diff --git a/.eslintrc.js b/.eslintrc.js index 12c3d870b..4db7a75eb 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -8,7 +8,7 @@ module.exports = { 'standard' ], parserOptions: { - ecmaVersion: 2020, // Allows for the parsing of modern ECMAScript features + ecmaVersion: 2024, // Allows for the parsing of modern ECMAScript features sourceType: 'module' // Allows for the use of imports }, plugins: [ diff --git a/.gitignore b/.gitignore index 8f9178ee5..6d3ac394f 100644 --- a/.gitignore +++ b/.gitignore @@ -104,3 +104,5 @@ commit-message.txt # configuration) and provide an example instead docker/.docker-env +# Generated jsdoc documentation +jsdoc/ diff --git a/.jsdoc.json b/.jsdoc.json new file mode 100644 index 000000000..b828e006f --- /dev/null +++ b/.jsdoc.json @@ -0,0 +1,3 @@ +{ + "plugins": ["plugins/markdown"] +} diff --git a/package-lock.json b/package-lock.json index 88c96fde7..784a81395 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "cve-services", - "version": "2.7.0", + "version": "2.7.1", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "cve-services", - "version": "2.7.0", + "version": "2.7.1", "license": "(CC0)", "dependencies": { "ajv": "^8.6.2", @@ -36,6 +36,7 @@ "prompt-sync": "^4.2.0", "replace-in-file": "6.3.5", "replace-json-property": "^1.8.0", + "set.prototype.intersection": "^1.1.8", "swagger-autogen": "^2.19.0", "swagger-ui-express": "^4.3.0", "uuid": "^8.3.2", @@ -60,20 +61,34 @@ "eslint-plugin-node": "^11.0.0", "eslint-plugin-promise": "^4.2.1", "eslint-plugin-standard": "^4.0.1", + "jsdoc": "^4.0.5", "mocha": "^10.8.2", "nyc": "^15.1.0", "sinon": "^15.0.4", "standard": "^16.0.3" } }, + "node_modules/@ampproject/remapping": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz", + "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==", + "dev": true, + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.24" + }, + "engines": { + "node": ">=6.0.0" + } + }, "node_modules/@babel/code-frame": { - "version": "7.29.0", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.29.0.tgz", - "integrity": "sha512-9NhCeYjq9+3uxgdtp20LSiJXJvN0FeCtNGpJxuMFZ1Kv3cWUNb6DOhJwUvcVCzKGR66cw4njwM6hrJLqgOwbcw==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.27.1.tgz", + "integrity": "sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-validator-identifier": "^7.28.5", + "@babel/helper-validator-identifier": "^7.27.1", "js-tokens": "^4.0.0", "picocolors": "^1.1.1" }, @@ -82,32 +97,30 @@ } }, "node_modules/@babel/compat-data": { - "version": "7.29.0", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.29.0.tgz", - "integrity": "sha512-T1NCJqT/j9+cn8fvkt7jtwbLBfLC/1y1c7NtCeXFRgzGTsafi68MRv8yzkYSapBnFA6L3U2VSc02ciDzoAJhJg==", + "version": "7.26.3", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.26.3.tgz", + "integrity": "sha512-nHIxvKPniQXpmQLb0vhY3VaFb3S0YrTAwpOWJZh1wn3oJPjJk9Asva204PsBdmAE8vpzfHudT8DB0scYvy9q0g==", "dev": true, - "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/core": { - "version": "7.29.0", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.29.0.tgz", - "integrity": "sha512-CGOfOJqWjg2qW/Mb6zNsDm+u5vFQ8DxXfbM09z69p5Z6+mE1ikP2jUXw+j42Pf1XTYED2Rni5f95npYeuwMDQA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/code-frame": "^7.29.0", - "@babel/generator": "^7.29.0", - "@babel/helper-compilation-targets": "^7.28.6", - "@babel/helper-module-transforms": "^7.28.6", - "@babel/helpers": "^7.28.6", - "@babel/parser": "^7.29.0", - "@babel/template": "^7.28.6", - "@babel/traverse": "^7.29.0", - "@babel/types": "^7.29.0", - "@jridgewell/remapping": "^2.3.5", + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.26.0.tgz", + "integrity": "sha512-i1SLeK+DzNnQ3LL/CswPCa/E5u4lh1k6IAEphON8F+cXt0t9euTshDru0q7/IqMa1PMPz5RnHuHscF8/ZJsStg==", + "dev": true, + "dependencies": { + "@ampproject/remapping": "^2.2.0", + "@babel/code-frame": "^7.26.0", + "@babel/generator": "^7.26.0", + "@babel/helper-compilation-targets": "^7.25.9", + "@babel/helper-module-transforms": "^7.26.0", + "@babel/helpers": "^7.26.0", + "@babel/parser": "^7.26.0", + "@babel/template": "^7.25.9", + "@babel/traverse": "^7.25.9", + "@babel/types": "^7.26.0", "convert-source-map": "^2.0.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", @@ -126,30 +139,27 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", - "dev": true, - "license": "MIT" + "dev": true }, "node_modules/@babel/core/node_modules/semver": { "version": "6.3.1", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true, - "license": "ISC", "bin": { "semver": "bin/semver.js" } }, "node_modules/@babel/generator": { - "version": "7.29.1", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.29.1.tgz", - "integrity": "sha512-qsaF+9Qcm2Qv8SRIMMscAvG4O3lJ0F1GuMo5HR/Bp02LopNgnZBC/EkbevHFeGs4ls/oPz9v+Bsmzbkbe+0dUw==", + "version": "7.26.3", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.26.3.tgz", + "integrity": "sha512-6FF/urZvD0sTeO7k6/B15pMLC4CHUv1426lzr3N01aHJTl046uCAh9LXW/fzeXXjPNCJ6iABW5XaWOsIZB93aQ==", "dev": true, - "license": "MIT", "dependencies": { - "@babel/parser": "^7.29.0", - "@babel/types": "^7.29.0", - "@jridgewell/gen-mapping": "^0.3.12", - "@jridgewell/trace-mapping": "^0.3.28", + "@babel/parser": "^7.26.3", + "@babel/types": "^7.26.3", + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25", "jsesc": "^3.0.2" }, "engines": { @@ -157,14 +167,13 @@ } }, "node_modules/@babel/helper-compilation-targets": { - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.28.6.tgz", - "integrity": "sha512-JYtls3hqi15fcx5GaSNL7SCTJ2MNmjrkHXg4FSpOA/grxK8KwyZ5bubHsCq8FXCkua6xhuaaBit+3b7+VZRfcA==", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.25.9.tgz", + "integrity": "sha512-j9Db8Suy6yV/VHa4qzrj9yZfZxhLWQdVnRlXxmKLYlhWUVB1sB2G5sxuWYXk/whHD9iW76PmNzxZ4UCnTQTVEQ==", "dev": true, - "license": "MIT", "dependencies": { - "@babel/compat-data": "^7.28.6", - "@babel/helper-validator-option": "^7.27.1", + "@babel/compat-data": "^7.25.9", + "@babel/helper-validator-option": "^7.25.9", "browserslist": "^4.24.0", "lru-cache": "^5.1.1", "semver": "^6.3.1" @@ -178,45 +187,32 @@ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true, - "license": "ISC", "bin": { "semver": "bin/semver.js" } }, - "node_modules/@babel/helper-globals": { - "version": "7.28.0", - "resolved": "https://registry.npmjs.org/@babel/helper-globals/-/helper-globals-7.28.0.tgz", - "integrity": "sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, "node_modules/@babel/helper-module-imports": { - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.28.6.tgz", - "integrity": "sha512-l5XkZK7r7wa9LucGw9LwZyyCUscb4x37JWTPz7swwFE/0FMQAGpiWUZn8u9DzkSBWEcK25jmvubfpw2dnAMdbw==", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.25.9.tgz", + "integrity": "sha512-tnUA4RsrmflIM6W6RFTLFSXITtl0wKjgpnLgXyowocVPrbYrLUXSBXDgTs8BlbmIzIdlBySRQjINYs2BAkiLtw==", "dev": true, - "license": "MIT", "dependencies": { - "@babel/traverse": "^7.28.6", - "@babel/types": "^7.28.6" + "@babel/traverse": "^7.25.9", + "@babel/types": "^7.25.9" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-module-transforms": { - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.28.6.tgz", - "integrity": "sha512-67oXFAYr2cDLDVGLXTEABjdBJZ6drElUSI7WKp70NrpyISso3plG9SAGEF6y7zbha/wOzUByWWTJvEDVNIUGcA==", + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.26.0.tgz", + "integrity": "sha512-xO+xu6B5K2czEnQye6BHA7DolFFmS3LB7stHZFaOLb1pAwO1HWLS8fXA+eh0A2yIvltPVmx3eNNDBJA2SLHXFw==", "dev": true, - "license": "MIT", "dependencies": { - "@babel/helper-module-imports": "^7.28.6", - "@babel/helper-validator-identifier": "^7.28.5", - "@babel/traverse": "^7.28.6" + "@babel/helper-module-imports": "^7.25.9", + "@babel/helper-validator-identifier": "^7.25.9", + "@babel/traverse": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -246,37 +242,36 @@ } }, "node_modules/@babel/helper-validator-option": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.27.1.tgz", - "integrity": "sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.25.9.tgz", + "integrity": "sha512-e/zv1co8pp55dNdEcCynfj9X7nyUKUXoUEwfXqaZt0omVOmDe9oOTdKStH4GmAw6zxMFs50ZayuMfHDKlO7Tfw==", "dev": true, - "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helpers": { - "version": "7.29.2", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.29.2.tgz", - "integrity": "sha512-HoGuUs4sCZNezVEKdVcwqmZN8GoHirLUcLaYVNBK2J0DadGtdcqgr3BCbvH8+XUo4NGjNl3VOtSjEKNzqfFgKw==", + "version": "7.28.4", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.28.4.tgz", + "integrity": "sha512-HFN59MmQXGHVyYadKLVumYsA9dBFun/ldYxipEjzA4196jpLZd8UjEEBLkbEkvfYreDqJhZxYAWFPtrfhNpj4w==", "dev": true, "license": "MIT", "dependencies": { - "@babel/template": "^7.28.6", - "@babel/types": "^7.29.0" + "@babel/template": "^7.27.2", + "@babel/types": "^7.28.4" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/parser": { - "version": "7.29.2", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.29.2.tgz", - "integrity": "sha512-4GgRzy/+fsBa72/RZVJmGKPmZu9Byn8o4MoLpmNe1m8ZfYnz5emHLQz3U4gLud6Zwl0RZIcgiLD7Uq7ySFuDLA==", + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.28.5.tgz", + "integrity": "sha512-KKBU1VGYR7ORr3At5HAtUQ+TV3SzRCXmA/8OdDZiLDBIZxVyzXuztPjfLd3BV1PRAQGCMWWSHYhL0F8d5uHBDQ==", "dev": true, "license": "MIT", "dependencies": { - "@babel/types": "^7.29.0" + "@babel/types": "^7.28.5" }, "bin": { "parser": "bin/babel-parser.js" @@ -286,43 +281,42 @@ } }, "node_modules/@babel/template": { - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.28.6.tgz", - "integrity": "sha512-YA6Ma2KsCdGb+WC6UpBVFJGXL58MDA6oyONbjyF/+5sBgxY/dwkhLogbMT2GXXyU84/IhRw/2D1Os1B/giz+BQ==", + "version": "7.27.2", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.27.2.tgz", + "integrity": "sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw==", "dev": true, "license": "MIT", "dependencies": { - "@babel/code-frame": "^7.28.6", - "@babel/parser": "^7.28.6", - "@babel/types": "^7.28.6" + "@babel/code-frame": "^7.27.1", + "@babel/parser": "^7.27.2", + "@babel/types": "^7.27.1" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/traverse": { - "version": "7.29.0", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.29.0.tgz", - "integrity": "sha512-4HPiQr0X7+waHfyXPZpWPfWL/J7dcN1mx9gL6WdQVMbPnF3+ZhSMs8tCxN7oHddJE9fhNE7+lxdnlyemKfJRuA==", + "version": "7.26.4", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.26.4.tgz", + "integrity": "sha512-fH+b7Y4p3yqvApJALCPJcwb0/XaOSgtK4pzV6WVjPR5GLFQBRI7pfoX2V2iM48NXvX07NUxxm1Vw98YjqTcU5w==", "dev": true, - "license": "MIT", "dependencies": { - "@babel/code-frame": "^7.29.0", - "@babel/generator": "^7.29.0", - "@babel/helper-globals": "^7.28.0", - "@babel/parser": "^7.29.0", - "@babel/template": "^7.28.6", - "@babel/types": "^7.29.0", - "debug": "^4.3.1" + "@babel/code-frame": "^7.26.2", + "@babel/generator": "^7.26.3", + "@babel/parser": "^7.26.3", + "@babel/template": "^7.25.9", + "@babel/types": "^7.26.3", + "debug": "^4.3.1", + "globals": "^11.1.0" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/types": { - "version": "7.29.0", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.29.0.tgz", - "integrity": "sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A==", + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.28.5.tgz", + "integrity": "sha512-qQ5m48eI/MFLQ5PxQj4PFaprjyCTLI37ElWMmNs0K8Lk3dVeOdNpB3ks8jc7yM5CDmVC73eMVk/trk3fgmrUpA==", "dev": true, "license": "MIT", "dependencies": { @@ -337,28 +331,25 @@ "version": "1.6.0", "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.6.0.tgz", "integrity": "sha512-Ir+AOibqzrIsL6ajt3Rz3LskB7OiMVHqltZmspbW/TJuTVuyOMirVqAkjfY6JISiLHgyNqicAC8AyHHGzNd/dA==", - "license": "MIT", "engines": { "node": ">=0.1.90" } }, "node_modules/@dabh/diagnostics": { - "version": "2.0.8", - "resolved": "https://registry.npmjs.org/@dabh/diagnostics/-/diagnostics-2.0.8.tgz", - "integrity": "sha512-R4MSXTVnuMzGD7bzHdW2ZhhdPC/igELENcq5IjEverBvq5hn1SXCWcsi6eSsdWP0/Ur+SItRRjAktmdoX/8R/Q==", - "license": "MIT", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@dabh/diagnostics/-/diagnostics-2.0.3.tgz", + "integrity": "sha512-hrlQOIi7hAfzsMqlGSFyVucrx38O+j6wiGOf//H2ecvIEqYN4ADBSS2iLMh5UFyDunCNniUIPk/q3riFv45xRA==", "dependencies": { - "@so-ric/colorspace": "^1.1.6", + "colorspace": "1.1.x", "enabled": "2.0.x", "kuler": "^2.0.0" } }, "node_modules/@eslint-community/eslint-utils": { - "version": "4.9.1", - "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.9.1.tgz", - "integrity": "sha512-phrYmNiYppR7znFEdqgfWHXR6NCkZEK7hwWDHZUjit/2/U0r6XvkDl0SYnoM51Hq7FhCGdLDT6zxCCOY1hexsQ==", + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.1.tgz", + "integrity": "sha512-s3O3waFUrMV8P/XaF/+ZTp1X9XBZW1a4B97ZnjQF2KYWaFD2A8KyFBsrsfSjEmjn3RGWAIuvlneuZm3CUK3jbA==", "dev": true, - "license": "MIT", "dependencies": { "eslint-visitor-keys": "^3.4.3" }, @@ -373,11 +364,10 @@ } }, "node_modules/@eslint-community/regexpp": { - "version": "4.12.2", - "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.2.tgz", - "integrity": "sha512-EriSTlt5OC9/7SXkRSCAhfSxxoSUgBm33OH+IkwbdpgoqsSsUg7y3uh+IICI/Qg4BBWr3U2i39RpmycbxMq4ew==", + "version": "4.12.1", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.1.tgz", + "integrity": "sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==", "dev": true, - "license": "MIT", "engines": { "node": "^12.0.0 || ^14.0.0 || >=16.0.0" } @@ -387,7 +377,6 @@ "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz", "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==", "dev": true, - "license": "MIT", "dependencies": { "ajv": "^6.12.4", "debug": "^4.3.2", @@ -407,11 +396,10 @@ } }, "node_modules/@eslint/eslintrc/node_modules/ajv": { - "version": "6.14.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.14.0.tgz", - "integrity": "sha512-IWrosm/yrn43eiKqkfkHis7QioDleaXQHdDVPKg0FSwwd/DuvyX79TZnFOnYpB7dcsFAMmtFztZuXPDvSePkFw==", + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", "dev": true, - "license": "MIT", "dependencies": { "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", @@ -427,8 +415,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true, - "license": "Python-2.0" + "dev": true }, "node_modules/@eslint/eslintrc/node_modules/brace-expansion": { "version": "1.1.12", @@ -441,12 +428,26 @@ "concat-map": "0.0.1" } }, + "node_modules/@eslint/eslintrc/node_modules/globals": { + "version": "13.24.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", + "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", + "dev": true, + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/@eslint/eslintrc/node_modules/js-yaml": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.1.tgz", "integrity": "sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==", "dev": true, - "license": "MIT", "dependencies": { "argparse": "^2.0.1" }, @@ -458,15 +459,13 @@ "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, - "license": "MIT" + "dev": true }, "node_modules/@eslint/eslintrc/node_modules/minimatch": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz", - "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, - "license": "ISC", "dependencies": { "brace-expansion": "^1.1.7" }, @@ -474,12 +473,23 @@ "node": "*" } }, + "node_modules/@eslint/eslintrc/node_modules/type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/@eslint/js": { "version": "8.57.1", "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.1.tgz", "integrity": "sha512-d9zaMRSTIKDLhctzH12MtXvJKSSUhaHcjV+2Z+GK+EEY7XKpP5yR4x+N3TAcHTcu963nIr+TMcCb4DBCYX1z6Q==", "dev": true, - "license": "MIT", "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" } @@ -489,7 +499,6 @@ "resolved": "https://registry.npmjs.org/@faker-js/faker/-/faker-7.6.0.tgz", "integrity": "sha512-XK6BTq1NDMo9Xqw/YkYyGjSsg44fbNwYRx7QK2CuoQgyy+f1rrTDHoExVM5PsyXCtfl2vs2vVJ0MN0yN6LppRw==", "dev": true, - "license": "MIT", "engines": { "node": ">=14.0.0", "npm": ">=6.0.0" @@ -501,7 +510,6 @@ "integrity": "sha512-DZLEEqFWQFiyK6h5YIeynKx7JlvCYWL0cImfSRXZ9l4Sg2efkFGTuFf6vzXjK1cq6IYkU+Eg/JizXw+TD2vRNw==", "deprecated": "Use @eslint/config-array instead", "dev": true, - "license": "Apache-2.0", "dependencies": { "@humanwhocodes/object-schema": "^2.0.3", "debug": "^4.3.1", @@ -523,11 +531,10 @@ } }, "node_modules/@humanwhocodes/config-array/node_modules/minimatch": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz", - "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, - "license": "ISC", "dependencies": { "brace-expansion": "^1.1.7" }, @@ -540,7 +547,6 @@ "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", "dev": true, - "license": "Apache-2.0", "engines": { "node": ">=12.22" }, @@ -554,15 +560,13 @@ "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz", "integrity": "sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==", "deprecated": "Use @eslint/object-schema instead", - "dev": true, - "license": "BSD-3-Clause" + "dev": true }, "node_modules/@istanbuljs/load-nyc-config": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", "dev": true, - "license": "ISC", "dependencies": { "camelcase": "^5.3.1", "find-up": "^4.1.0", @@ -579,7 +583,6 @@ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", "dev": true, - "license": "MIT", "engines": { "node": ">=6" } @@ -589,7 +592,6 @@ "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", "dev": true, - "license": "MIT", "dependencies": { "locate-path": "^5.0.0", "path-exists": "^4.0.0" @@ -603,7 +605,6 @@ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", "dev": true, - "license": "MIT", "dependencies": { "p-locate": "^4.1.0" }, @@ -616,7 +617,6 @@ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", "dev": true, - "license": "MIT", "dependencies": { "p-try": "^2.0.0" }, @@ -632,7 +632,6 @@ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", "dev": true, - "license": "MIT", "dependencies": { "p-limit": "^2.2.0" }, @@ -645,31 +644,22 @@ "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", "dev": true, - "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/@jridgewell/gen-mapping": { - "version": "0.3.13", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz", - "integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jridgewell/sourcemap-codec": "^1.5.0", - "@jridgewell/trace-mapping": "^0.3.24" - } - }, - "node_modules/@jridgewell/remapping": { - "version": "2.3.5", - "resolved": "https://registry.npmjs.org/@jridgewell/remapping/-/remapping-2.3.5.tgz", - "integrity": "sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==", + "version": "0.3.8", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.8.tgz", + "integrity": "sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==", "dev": true, - "license": "MIT", "dependencies": { - "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/set-array": "^1.2.1", + "@jridgewell/sourcemap-codec": "^1.4.10", "@jridgewell/trace-mapping": "^0.3.24" + }, + "engines": { + "node": ">=6.0.0" } }, "node_modules/@jridgewell/resolve-uri": { @@ -677,34 +667,52 @@ "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", "dev": true, - "license": "MIT", "engines": { "node": ">=6.0.0" } }, - "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.5.5", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", - "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==", + "node_modules/@jridgewell/set-array": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", + "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", "dev": true, - "license": "MIT" + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz", + "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==", + "dev": true }, "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.31", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz", - "integrity": "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==", + "version": "0.3.25", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", + "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", "dev": true, - "license": "MIT", "dependencies": { "@jridgewell/resolve-uri": "^3.1.0", "@jridgewell/sourcemap-codec": "^1.4.14" } }, + "node_modules/@jsdoc/salty": { + "version": "0.2.9", + "resolved": "https://registry.npmjs.org/@jsdoc/salty/-/salty-0.2.9.tgz", + "integrity": "sha512-yYxMVH7Dqw6nO0d5NIV8OQWnitU8k6vXH8NtgqAfIa/IUqRMxRv/NUJJ08VEKbAakwxlgBl5PJdrU0dMPStsnw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "lodash": "^4.17.21" + }, + "engines": { + "node": ">=v12.0.0" + } + }, "node_modules/@mongodb-js/saslprep": { - "version": "1.4.6", - "resolved": "https://registry.npmjs.org/@mongodb-js/saslprep/-/saslprep-1.4.6.tgz", - "integrity": "sha512-y+x3H1xBZd38n10NZF/rEBlvDOOMQ6LKUTHqr8R9VkJ+mmQOYtJFxIlkkK8fZrtOiL6VixbOBWMbZGBdal3Z1g==", - "license": "MIT", + "version": "1.1.9", + "resolved": "https://registry.npmjs.org/@mongodb-js/saslprep/-/saslprep-1.1.9.tgz", + "integrity": "sha512-tVkljjeEaAhCqTzajSdgbQ6gE6f3oneVwa3iXR6csiEwXXOFsiC6Uh9iAjAhXPtqa/XMDHWjjeNH/77m/Yq2dw==", "dependencies": { "sparse-bitfield": "^3.0.3" } @@ -727,7 +735,6 @@ "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", "dev": true, - "license": "MIT", "dependencies": { "@nodelib/fs.stat": "2.0.5", "run-parallel": "^1.1.9" @@ -741,7 +748,6 @@ "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", "dev": true, - "license": "MIT", "engines": { "node": ">= 8" } @@ -751,7 +757,6 @@ "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", "dev": true, - "license": "MIT", "dependencies": { "@nodelib/fs.scandir": "2.1.5", "fastq": "^1.6.0" @@ -774,7 +779,6 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/@phc/format/-/format-1.0.0.tgz", "integrity": "sha512-m7X9U6BG2+J+R1lSOdCiITLLrxm+cWlNI3HUFA92oLO77ObGNzaKdh8pMLqdZcshtkKuV84olNNXDfMc4FezBQ==", - "license": "MIT", "engines": { "node": ">=10" } @@ -783,22 +787,19 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/@rtsao/scc/-/scc-1.1.0.tgz", "integrity": "sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g==", - "dev": true, - "license": "MIT" + "dev": true }, "node_modules/@scarf/scarf": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/@scarf/scarf/-/scarf-1.4.0.tgz", "integrity": "sha512-xxeapPiUXdZAE3che6f3xogoJPeZgig6omHEy1rIY5WVsB3H2BHNnZH+gHG6x91SCWyQCzWGsuL2Hh3ClO5/qQ==", - "hasInstallScript": true, - "license": "Apache-2.0" + "hasInstallScript": true }, "node_modules/@sinonjs/commons": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.1.tgz", "integrity": "sha512-K3mCHKQ9sVh8o1C9cxkwxaOmXoAMlDxC1mYyHrjqOWEcBjYr76t96zL2zlj5dUGZ3HSw240X1qgH3Mjf1yJWpQ==", "dev": true, - "license": "BSD-3-Clause", "dependencies": { "type-detect": "4.0.8" } @@ -808,7 +809,6 @@ "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", "dev": true, - "license": "MIT", "engines": { "node": ">=4" } @@ -818,19 +818,18 @@ "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-10.3.0.tgz", "integrity": "sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==", "dev": true, - "license": "BSD-3-Clause", "dependencies": { "@sinonjs/commons": "^3.0.0" } }, "node_modules/@sinonjs/samsam": { - "version": "8.0.3", - "resolved": "https://registry.npmjs.org/@sinonjs/samsam/-/samsam-8.0.3.tgz", - "integrity": "sha512-hw6HbX+GyVZzmaYNh82Ecj1vdGZrqVIn/keDTg63IgAwiQPO+xCz99uG6Woqgb4tM0mUiFENKZ4cqd7IX94AXQ==", + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@sinonjs/samsam/-/samsam-8.0.2.tgz", + "integrity": "sha512-v46t/fwnhejRSFTGqbpn9u+LQ9xJDse10gNnPgAcxgdoCDMXj/G2asWAC/8Qs+BAZDicX+MNZouXT1A7c83kVw==", "dev": true, - "license": "BSD-3-Clause", "dependencies": { "@sinonjs/commons": "^3.0.1", + "lodash.get": "^4.4.2", "type-detect": "^4.1.0" } }, @@ -838,38 +837,48 @@ "version": "0.7.3", "resolved": "https://registry.npmjs.org/@sinonjs/text-encoding/-/text-encoding-0.7.3.tgz", "integrity": "sha512-DE427ROAphMQzU4ENbliGYrBSYPXF+TtLg9S8vzeA+OF4ZKzoDdzfL8sxuMUGS/lgRhM6j1URSk9ghf7Xo1tyA==", - "deprecated": "Deprecated: no longer maintained and no longer used by Sinon packages. See\n https://github.com/sinonjs/nise/issues/243 for replacement details.", - "dev": true, - "license": "(Unlicense OR Apache-2.0)" - }, - "node_modules/@so-ric/colorspace": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/@so-ric/colorspace/-/colorspace-1.1.6.tgz", - "integrity": "sha512-/KiKkpHNOBgkFJwu9sh48LkHSMYGyuTcSFK/qMBdnOAlrRJzRSXAOFB5qwzaVQuDl8wAvHVMkaASQDReTahxuw==", - "license": "MIT", - "dependencies": { - "color": "^5.0.2", - "text-hex": "1.0.x" - } + "dev": true }, "node_modules/@types/chai": { "version": "4.3.20", "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.3.20.tgz", "integrity": "sha512-/pC9HAB5I/xMlc5FP77qjCnI16ChlJfW0tGa0IUcFn38VJrTV6DeZ60NU5KZBtaOZqjdpwTWohz5HU1RrhiYxQ==", - "dev": true, - "license": "MIT" + "dev": true }, "node_modules/@types/cookiejar": { "version": "2.1.5", "resolved": "https://registry.npmjs.org/@types/cookiejar/-/cookiejar-2.1.5.tgz", "integrity": "sha512-he+DHOWReW0nghN24E1WUqM0efK4kI9oTqDm6XmK8ZPe2djZ90BSNdGnIyCLzCPw7/pogPlGbzI2wHGGmi4O/Q==", - "dev": true, - "license": "MIT" + "dev": true }, "node_modules/@types/json5": { "version": "0.0.29", "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==", + "dev": true + }, + "node_modules/@types/linkify-it": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/@types/linkify-it/-/linkify-it-5.0.0.tgz", + "integrity": "sha512-sVDA58zAw4eWAffKOaQH5/5j3XeayukzDk+ewSsnv3p4yJEZHCCzMDiZM8e0OUrRvmpGZ85jf4yDHkHsgBNr9Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/markdown-it": { + "version": "14.1.2", + "resolved": "https://registry.npmjs.org/@types/markdown-it/-/markdown-it-14.1.2.tgz", + "integrity": "sha512-promo4eFwuiW+TfGxhi+0x3czqTYJkG8qB17ZUJiVF10Xm7NLVRSLUsfRTU/6h1e24VvRnXCx+hG7li58lkzog==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/linkify-it": "^5", + "@types/mdurl": "^2" + } + }, + "node_modules/@types/mdurl": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@types/mdurl/-/mdurl-2.0.0.tgz", + "integrity": "sha512-RGdgjQUZba5p6QEFAVx2OGb8rQDL/cPRG7GiedRzMcJ1tYnUANBncjbSB1NRGwbvjcPeikRABz2nshyPk1bhWg==", "dev": true, "license": "MIT" }, @@ -877,32 +886,28 @@ "version": "3.0.5", "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.5.tgz", "integrity": "sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ==", - "dev": true, - "license": "MIT" + "dev": true }, "node_modules/@types/node": { - "version": "25.5.0", - "resolved": "https://registry.npmjs.org/@types/node/-/node-25.5.0.tgz", - "integrity": "sha512-jp2P3tQMSxWugkCUKLRPVUpGaL5MVFwF8RDuSRztfwgN1wmqJeMSbKlnEtQqU8UrhTmzEmZdu2I6v2dpp7XIxw==", + "version": "22.10.5", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.10.5.tgz", + "integrity": "sha512-F8Q+SeGimwOo86fiovQh8qiXfFEh2/ocYv7tU5pJ3EXMSSxk1Joj5wefpFK2fHTf/N6HKGSxIDBT9f3gCxXPkQ==", "dev": true, - "license": "MIT", "dependencies": { - "undici-types": "~7.18.0" + "undici-types": "~6.20.0" } }, "node_modules/@types/parse-json": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.2.tgz", "integrity": "sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw==", - "dev": true, - "license": "MIT" + "dev": true }, "node_modules/@types/superagent": { "version": "4.1.13", "resolved": "https://registry.npmjs.org/@types/superagent/-/superagent-4.1.13.tgz", "integrity": "sha512-YIGelp3ZyMiH0/A09PMAORO0EBGlF5xIKfDpK74wdYvWUs2o96b5CItJcWPdH409b7SAXIIG6p8NdU/4U2Maww==", "dev": true, - "license": "MIT", "dependencies": { "@types/cookiejar": "*", "@types/node": "*" @@ -911,97 +916,87 @@ "node_modules/@types/triple-beam": { "version": "1.3.5", "resolved": "https://registry.npmjs.org/@types/triple-beam/-/triple-beam-1.3.5.tgz", - "integrity": "sha512-6WaYesThRMCl19iryMYP7/x2OVgCtbIVflDGFpWnb9irXI3UjYE4AzmYuiUKY1AJstGijoY+MgUszMgRxIYTYw==", - "license": "MIT" + "integrity": "sha512-6WaYesThRMCl19iryMYP7/x2OVgCtbIVflDGFpWnb9irXI3UjYE4AzmYuiUKY1AJstGijoY+MgUszMgRxIYTYw==" }, "node_modules/@types/webidl-conversions": { "version": "7.0.3", "resolved": "https://registry.npmjs.org/@types/webidl-conversions/-/webidl-conversions-7.0.3.tgz", - "integrity": "sha512-CiJJvcRtIgzadHCYXw7dqEnMNRjhGZlYK05Mj9OyktqV8uVT8fD2BFOB7S1uwBE3Kj2Z+4UyPmFw/Ixgw/LAlA==", - "license": "MIT" + "integrity": "sha512-CiJJvcRtIgzadHCYXw7dqEnMNRjhGZlYK05Mj9OyktqV8uVT8fD2BFOB7S1uwBE3Kj2Z+4UyPmFw/Ixgw/LAlA==" }, "node_modules/@types/whatwg-url": { "version": "11.0.5", "resolved": "https://registry.npmjs.org/@types/whatwg-url/-/whatwg-url-11.0.5.tgz", "integrity": "sha512-coYR071JRaHa+xoEvvYqvnIHaVqaYrLPbsufM9BF63HkwI5Lgmy2QR8Q5K/lYDYo5AK82wOvSOS0UsLTpTG7uQ==", - "license": "MIT", "dependencies": { "@types/webidl-conversions": "*" } }, "node_modules/@ungap/structured-clone": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.3.0.tgz", - "integrity": "sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==", - "dev": true, - "license": "ISC" + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.1.tgz", + "integrity": "sha512-fEzPV3hSkSMltkw152tJKNARhOupqbH96MZWyRjNaYZOMIzbrTeQDG+MTc6Mr2pgzFQzFxAfmhGDNP5QK++2ZA==", + "dev": true }, "node_modules/@vue/compiler-core": { - "version": "3.5.31", - "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.5.31.tgz", - "integrity": "sha512-k/ueL14aNIEy5Onf0OVzR8kiqF/WThgLdFhxwa4e/KF/0qe38IwIdofoSWBTvvxQOesaz6riAFAUaYjoF9fLLQ==", + "version": "3.5.13", + "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.5.13.tgz", + "integrity": "sha512-oOdAkwqUfW1WqpwSYJce06wvt6HljgY3fGeM9NcVA1HaYOij3mZG9Rkysn0OHuyUAGMbEbARIpsG+LPVlBJ5/Q==", "dev": true, - "license": "MIT", "dependencies": { - "@babel/parser": "^7.29.2", - "@vue/shared": "3.5.31", - "entities": "^7.0.1", + "@babel/parser": "^7.25.3", + "@vue/shared": "3.5.13", + "entities": "^4.5.0", "estree-walker": "^2.0.2", - "source-map-js": "^1.2.1" + "source-map-js": "^1.2.0" } }, "node_modules/@vue/compiler-dom": { - "version": "3.5.31", - "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.5.31.tgz", - "integrity": "sha512-BMY/ozS/xxjYqRFL+tKdRpATJYDTTgWSo0+AJvJNg4ig+Hgb0dOsHPXvloHQ5hmlivUqw1Yt2pPIqp4e0v1GUw==", + "version": "3.5.13", + "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.5.13.tgz", + "integrity": "sha512-ZOJ46sMOKUjO3e94wPdCzQ6P1Lx/vhp2RSvfaab88Ajexs0AHeV0uasYhi99WPaogmBlRHNRuly8xV75cNTMDA==", "dev": true, - "license": "MIT", "dependencies": { - "@vue/compiler-core": "3.5.31", - "@vue/shared": "3.5.31" + "@vue/compiler-core": "3.5.13", + "@vue/shared": "3.5.13" } }, "node_modules/@vue/compiler-sfc": { - "version": "3.5.31", - "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.5.31.tgz", - "integrity": "sha512-M8wpPgR9UJ8MiRGjppvx9uWJfLV7A/T+/rL8s/y3QG3u0c2/YZgff3d6SuimKRIhcYnWg5fTfDMlz2E6seUW8Q==", + "version": "3.5.13", + "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.5.13.tgz", + "integrity": "sha512-6VdaljMpD82w6c2749Zhf5T9u5uLBWKnVue6XWxprDobftnletJ8+oel7sexFfM3qIxNmVE7LSFGTpv6obNyaQ==", "dev": true, - "license": "MIT", "dependencies": { - "@babel/parser": "^7.29.2", - "@vue/compiler-core": "3.5.31", - "@vue/compiler-dom": "3.5.31", - "@vue/compiler-ssr": "3.5.31", - "@vue/shared": "3.5.31", + "@babel/parser": "^7.25.3", + "@vue/compiler-core": "3.5.13", + "@vue/compiler-dom": "3.5.13", + "@vue/compiler-ssr": "3.5.13", + "@vue/shared": "3.5.13", "estree-walker": "^2.0.2", - "magic-string": "^0.30.21", - "postcss": "^8.5.8", - "source-map-js": "^1.2.1" + "magic-string": "^0.30.11", + "postcss": "^8.4.48", + "source-map-js": "^1.2.0" } }, "node_modules/@vue/compiler-ssr": { - "version": "3.5.31", - "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.5.31.tgz", - "integrity": "sha512-h0xIMxrt/LHOvJKMri+vdYT92BrK3HFLtDqq9Pr/lVVfE4IyKZKvWf0vJFW10Yr6nX02OR4MkJwI0c1HDa1hog==", + "version": "3.5.13", + "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.5.13.tgz", + "integrity": "sha512-wMH6vrYHxQl/IybKJagqbquvxpWCuVYpoUJfCqFZwa/JY1GdATAQ+TgVtgrwwMZ0D07QhA99rs/EAAWfvG6KpA==", "dev": true, - "license": "MIT", "dependencies": { - "@vue/compiler-dom": "3.5.31", - "@vue/shared": "3.5.31" + "@vue/compiler-dom": "3.5.13", + "@vue/shared": "3.5.13" } }, "node_modules/@vue/shared": { - "version": "3.5.31", - "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.5.31.tgz", - "integrity": "sha512-nBxuiuS9Lj5bPkPbWogPUnjxxWpkRniX7e5UBQDWl6Fsf4roq9wwV+cR7ezQ4zXswNvPIlsdj1slcLB7XCsRAw==", - "dev": true, - "license": "MIT" + "version": "3.5.13", + "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.5.13.tgz", + "integrity": "sha512-/hnE/qP5ZoGpol0a5mDi45bOd7t3tjYJBjsgCsivow7D48cJeV5l05RD82lPqi7gRiphZM37rnhW1l6ZoCNNnQ==", + "dev": true }, "node_modules/accepts": { "version": "1.3.8", "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", - "license": "MIT", "dependencies": { "mime-types": "~2.1.34", "negotiator": "0.6.3" @@ -1011,11 +1006,10 @@ } }, "node_modules/acorn": { - "version": "8.16.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.16.0.tgz", - "integrity": "sha512-UVJyE9MttOsBQIDKw1skb9nAwQuR5wuGD3+82K6JgJlm/Y+KI92oNsMNGZCYdDsVtRHSak0pcV5Dno5+4jh9sw==", + "version": "8.14.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.0.tgz", + "integrity": "sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==", "dev": true, - "license": "MIT", "bin": { "acorn": "bin/acorn" }, @@ -1028,7 +1022,6 @@ "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", "dev": true, - "license": "MIT", "peerDependencies": { "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" } @@ -1038,7 +1031,6 @@ "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", "dev": true, - "license": "MIT", "dependencies": { "clean-stack": "^2.0.0", "indent-string": "^4.0.0" @@ -1048,10 +1040,9 @@ } }, "node_modules/ajv": { - "version": "8.18.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.18.0.tgz", - "integrity": "sha512-PlXPeEWMXMZ7sPYOHqmDyCJzcfNrUr3fGNKtezX14ykXOEIvyK81d+qydx89KY5O71FKMPaQ2vBfBFI5NHR63A==", - "license": "MIT", + "version": "8.17.1", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", + "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", "dependencies": { "fast-deep-equal": "^3.1.3", "fast-uri": "^3.0.1", @@ -1067,7 +1058,6 @@ "version": "2.1.1", "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", - "license": "MIT", "dependencies": { "ajv": "^8.0.0" }, @@ -1085,7 +1075,6 @@ "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz", "integrity": "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==", "dev": true, - "license": "MIT", "engines": { "node": ">=6" } @@ -1094,7 +1083,6 @@ "version": "5.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "license": "MIT", "engines": { "node": ">=8" } @@ -1103,7 +1091,6 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "license": "MIT", "dependencies": { "color-convert": "^2.0.1" }, @@ -1119,7 +1106,6 @@ "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", "dev": true, - "license": "ISC", "dependencies": { "normalize-path": "^3.0.0", "picomatch": "^2.0.4" @@ -1133,7 +1119,6 @@ "resolved": "https://registry.npmjs.org/append-transform/-/append-transform-2.0.0.tgz", "integrity": "sha512-7yeyCEurROLQJFv5Xj4lEGTy0borxepjFv1g22oAdqFu//SrAlDl1O1Nxx15SH1RoliUml6p8dwJW9jvZughhg==", "dev": true, - "license": "MIT", "dependencies": { "default-require-extensions": "^3.0.0" }, @@ -1145,15 +1130,13 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/archy/-/archy-1.0.0.tgz", "integrity": "sha512-Xg+9RwCg/0p32teKdGMPTPnVXKD0w3DfHnFTficozsAgsvq2XenPJq/MYpzzQ/v8zrOyJn6Ds39VA4JIDwFfqw==", - "dev": true, - "license": "MIT" + "dev": true }, "node_modules/argon2": { "version": "0.41.1", "resolved": "https://registry.npmjs.org/argon2/-/argon2-0.41.1.tgz", "integrity": "sha512-dqCW8kJXke8Ik+McUcMDltrbuAWETPyU6iq+4AhxqKphWi7pChB/Zgd/Tp/o8xRLbg8ksMj46F/vph9wnxpTzQ==", "hasInstallScript": true, - "license": "MIT", "dependencies": { "@phc/format": "^1.0.0", "node-addon-api": "^8.1.0", @@ -1167,7 +1150,6 @@ "version": "1.0.10", "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "license": "MIT", "dependencies": { "sprintf-js": "~1.0.2" } @@ -1176,8 +1158,6 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.2.tgz", "integrity": "sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw==", - "dev": true, - "license": "MIT", "dependencies": { "call-bound": "^1.0.3", "is-array-buffer": "^3.0.5" @@ -1194,7 +1174,6 @@ "resolved": "https://registry.npmjs.org/array-differ/-/array-differ-3.0.0.tgz", "integrity": "sha512-THtfYS6KtME/yIAhKjZ2ul7XI96lQGHRputJQHO80LAWQnuGP4iCIN8vdMRboGbIEYBwU33q8Tch1os2+X0kMg==", "dev": true, - "license": "MIT", "engines": { "node": ">=8" } @@ -1202,24 +1181,20 @@ "node_modules/array-flatten": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", - "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==", - "license": "MIT" + "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==" }, "node_modules/array-includes": { - "version": "3.1.9", - "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.9.tgz", - "integrity": "sha512-FmeCCAenzH0KH381SPT5FZmiA/TmpndpcaShhfgEN9eCVjnFBqq3l1xrI42y8+PPLI6hypzou4GXw00WHmPBLQ==", + "version": "3.1.8", + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.8.tgz", + "integrity": "sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ==", "dev": true, - "license": "MIT", "dependencies": { - "call-bind": "^1.0.8", - "call-bound": "^1.0.4", + "call-bind": "^1.0.7", "define-properties": "^1.2.1", - "es-abstract": "^1.24.0", - "es-object-atoms": "^1.1.1", - "get-intrinsic": "^1.3.0", - "is-string": "^1.1.1", - "math-intrinsics": "^1.1.0" + "es-abstract": "^1.23.2", + "es-object-atoms": "^1.0.0", + "get-intrinsic": "^1.2.4", + "is-string": "^1.0.7" }, "engines": { "node": ">= 0.4" @@ -1233,25 +1208,22 @@ "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", "dev": true, - "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/array.prototype.findlastindex": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.6.tgz", - "integrity": "sha512-F/TKATkzseUExPlfvmwQKGITM3DGTK+vkAsCZoDc5daVygbJBnjEUCbgkAvVFsgfXfX4YIqZ/27G3k3tdXrTxQ==", + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.5.tgz", + "integrity": "sha512-zfETvRFA8o7EiNn++N5f/kaCw221hrpGsDmcpndVupkPzEc1Wuf3VgC0qby1BbHs7f5DVYjgtEU2LLh5bqeGfQ==", "dev": true, - "license": "MIT", "dependencies": { - "call-bind": "^1.0.8", - "call-bound": "^1.0.4", + "call-bind": "^1.0.7", "define-properties": "^1.2.1", - "es-abstract": "^1.23.9", + "es-abstract": "^1.23.2", "es-errors": "^1.3.0", - "es-object-atoms": "^1.1.1", - "es-shim-unscopables": "^1.1.0" + "es-object-atoms": "^1.0.0", + "es-shim-unscopables": "^1.0.2" }, "engines": { "node": ">= 0.4" @@ -1265,7 +1237,6 @@ "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.3.tgz", "integrity": "sha512-rwG/ja1neyLqCuGZ5YYrznA62D4mZXg0i1cIskIUKSiqF3Cje9/wXAls9B9s1Wa2fomMsIv8czB8jZcPmxCXFg==", "dev": true, - "license": "MIT", "dependencies": { "call-bind": "^1.0.8", "define-properties": "^1.2.1", @@ -1284,7 +1255,6 @@ "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.3.tgz", "integrity": "sha512-Y7Wt51eKJSyi80hFrJCePGGNo5ktJCslFuboqJsbf57CCPcm5zztluPlc4/aD8sWsKvlwatezpV4U1efk8kpjg==", "dev": true, - "license": "MIT", "dependencies": { "call-bind": "^1.0.8", "define-properties": "^1.2.1", @@ -1302,8 +1272,6 @@ "version": "1.0.4", "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.4.tgz", "integrity": "sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ==", - "dev": true, - "license": "MIT", "dependencies": { "array-buffer-byte-length": "^1.0.1", "call-bind": "^1.0.8", @@ -1325,7 +1293,6 @@ "resolved": "https://registry.npmjs.org/arrify/-/arrify-2.0.1.tgz", "integrity": "sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug==", "dev": true, - "license": "MIT", "engines": { "node": ">=8" } @@ -1334,15 +1301,13 @@ "version": "2.0.6", "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==", - "dev": true, - "license": "MIT" + "dev": true }, "node_modules/assertion-error": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz", "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==", "dev": true, - "license": "MIT", "engines": { "node": "*" } @@ -1352,7 +1317,6 @@ "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", "dev": true, - "license": "MIT", "engines": { "node": ">=8" } @@ -1360,32 +1324,18 @@ "node_modules/async": { "version": "3.2.6", "resolved": "https://registry.npmjs.org/async/-/async-3.2.6.tgz", - "integrity": "sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==", - "license": "MIT" - }, - "node_modules/async-function": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/async-function/-/async-function-1.0.0.tgz", - "integrity": "sha512-hsU18Ae8CDTR6Kgu9DYf0EbCr/a5iGL0rytQDobUcdpYOKokk8LEjVphnXkDkgpi0wYVsqrXuP0bZxJaTqdgoA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - } + "integrity": "sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==" }, "node_modules/asynckit": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", - "dev": true, - "license": "MIT" + "dev": true }, "node_modules/available-typed-arrays": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz", "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==", - "dev": true, - "license": "MIT", "dependencies": { "possible-typed-array-names": "^1.0.0" }, @@ -1399,36 +1349,20 @@ "node_modules/balanced-match": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "license": "MIT" + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" }, "node_modules/base64-url": { "version": "2.3.3", "resolved": "https://registry.npmjs.org/base64-url/-/base64-url-2.3.3.tgz", "integrity": "sha512-dLMhIsK7OplcDauDH/tZLvK7JmUZK3A7KiQpjNzsBrM6Etw7hzNI1tLEywqJk9NnwkgWuFKSlx/IUO7vF6Mo8Q==", - "license": "ISC", "engines": { "node": ">=6" } }, - "node_modules/baseline-browser-mapping": { - "version": "2.10.10", - "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.10.10.tgz", - "integrity": "sha512-sUoJ3IMxx4AyRqO4MLeHlnGDkyXRoUG0/AI9fjK+vS72ekpV0yWVY7O0BVjmBcRtkNcsAO2QDZ4tdKKGoI6YaQ==", - "dev": true, - "license": "Apache-2.0", - "bin": { - "baseline-browser-mapping": "dist/cli.cjs" - }, - "engines": { - "node": ">=6.0.0" - } - }, "node_modules/basic-auth": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/basic-auth/-/basic-auth-2.0.1.tgz", "integrity": "sha512-NF+epuEdnUYVlGuhaxbbq+dvJttwLnGY+YixlXlME5KpQ5W3CnXA5cVTneY3SPbPDRkcjMbifrwmFYcClgOZeg==", - "license": "MIT", "dependencies": { "safe-buffer": "5.1.2" }, @@ -1439,15 +1373,13 @@ "node_modules/basic-auth/node_modules/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==", - "license": "MIT" + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" }, "node_modules/binary-extensions": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", "dev": true, - "license": "MIT", "engines": { "node": ">=8" }, @@ -1455,6 +1387,13 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/bluebird": { + "version": "3.7.2", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", + "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==", + "dev": true, + "license": "MIT" + }, "node_modules/body-parser": { "version": "1.20.4", "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.4.tgz", @@ -1483,30 +1422,53 @@ "version": "2.6.9", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "license": "MIT", "dependencies": { "ms": "2.0.0" } }, - "node_modules/body-parser/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "license": "MIT" - }, - "node_modules/body-parser/node_modules/qs": { - "version": "6.14.2", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.14.2.tgz", - "integrity": "sha512-V/yCWTTF7VJ9hIh18Ugr2zhJMP01MY7c5kh4J870L7imm6/DIzBsNLTXzMwUA3yZ5b/KBqLx8Kp3uRvd7xSe3Q==", - "license": "BSD-3-Clause", + "node_modules/body-parser/node_modules/http-errors": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.1.tgz", + "integrity": "sha512-4FbRdAX+bSdmo4AUFuS0WNiPz8NgFt+r8ThgNWmlrjQjt1Q7ZR9+zTlce2859x4KSXrwIsaeTqDoKQmtP8pLmQ==", + "license": "MIT", "dependencies": { - "side-channel": "^1.1.0" + "depd": "~2.0.0", + "inherits": "~2.0.4", + "setprototypeof": "~1.2.0", + "statuses": "~2.0.2", + "toidentifier": "~1.0.1" }, "engines": { - "node": ">=0.6" + "node": ">= 0.8" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/body-parser/node_modules/iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/body-parser/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + }, + "node_modules/body-parser/node_modules/statuses": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.2.tgz", + "integrity": "sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw==", + "license": "MIT", + "engines": { + "node": ">= 0.8" } }, "node_modules/brace-expansion": { @@ -1524,7 +1486,6 @@ "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", "dev": true, - "license": "MIT", "dependencies": { "fill-range": "^7.1.1" }, @@ -1536,13 +1497,12 @@ "version": "1.3.1", "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", - "dev": true, - "license": "ISC" + "dev": true }, "node_modules/browserslist": { - "version": "4.28.1", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.28.1.tgz", - "integrity": "sha512-ZC5Bd0LgJXgwGqUknZY/vkUQ04r8NXnJZ3yYi4vDmSiZmC/pdSN0NbNRPxZpbtO4uAfDUAFffO8IZoM3Gj8IkA==", + "version": "4.24.3", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.24.3.tgz", + "integrity": "sha512-1CPmv8iobE2fyRMV97dAcMVegvvWKxmq94hkLiAkUGwKVTyDLw33K+ZxiFrREKmmps4rIw6grcCFCnTMSZ/YiA==", "dev": true, "funding": [ { @@ -1558,13 +1518,11 @@ "url": "https://github.com/sponsors/ai" } ], - "license": "MIT", "dependencies": { - "baseline-browser-mapping": "^2.9.0", - "caniuse-lite": "^1.0.30001759", - "electron-to-chromium": "^1.5.263", - "node-releases": "^2.0.27", - "update-browserslist-db": "^1.2.0" + "caniuse-lite": "^1.0.30001688", + "electron-to-chromium": "^1.5.73", + "node-releases": "^2.0.19", + "update-browserslist-db": "^1.1.1" }, "bin": { "browserslist": "cli.js" @@ -1574,10 +1532,9 @@ } }, "node_modules/bson": { - "version": "6.10.4", - "resolved": "https://registry.npmjs.org/bson/-/bson-6.10.4.tgz", - "integrity": "sha512-WIsKqkSC0ABoBJuT1LEX+2HEvNmNKKgnTAyd0fL8qzK4SH2i9NXg+t08YtdZp/V9IZ33cxe3iV4yM0qg8lMQng==", - "license": "Apache-2.0", + "version": "6.10.1", + "resolved": "https://registry.npmjs.org/bson/-/bson-6.10.1.tgz", + "integrity": "sha512-P92xmHDQjSKPLHqFxefqMxASNq/aWJMEZugpCjf+AF/pgcUpMMQCg7t7+ewko0/u8AapvF3luf/FoehddEK+sA==", "engines": { "node": ">=16.20.1" } @@ -1596,7 +1553,6 @@ "resolved": "https://registry.npmjs.org/caching-transform/-/caching-transform-4.0.0.tgz", "integrity": "sha512-kpqOvwXnjjN44D89K5ccQC+RUrsy7jB/XLlRrx0D7/2HNcTPqzsb6XgYoErwko6QsV184CA2YgS1fxDiiDZMWA==", "dev": true, - "license": "MIT", "dependencies": { "hasha": "^5.0.0", "make-dir": "^3.0.0", @@ -1611,8 +1567,6 @@ "version": "1.0.8", "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.8.tgz", "integrity": "sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==", - "dev": true, - "license": "MIT", "dependencies": { "call-bind-apply-helpers": "^1.0.0", "es-define-property": "^1.0.0", @@ -1669,7 +1623,6 @@ "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", "dev": true, - "license": "MIT", "engines": { "node": ">=6" } @@ -1679,7 +1632,6 @@ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", "dev": true, - "license": "MIT", "engines": { "node": ">=10" }, @@ -1688,9 +1640,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001781", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001781.tgz", - "integrity": "sha512-RdwNCyMsNBftLjW6w01z8bKEvT6e/5tpPVEgtn22TiLGlstHOVecsX2KHFkD5e/vRnIE4EGzpuIODb3mtswtkw==", + "version": "1.0.30001690", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001690.tgz", + "integrity": "sha512-5ExiE3qQN6oF8Clf8ifIDcMRCRE/dMGcETG/XGMD8/XiXm6HXQgQTh1yZYLXXpSOsEUlJm1Xr7kGULZTuGtP/w==", "dev": true, "funding": [ { @@ -1705,15 +1657,26 @@ "type": "github", "url": "https://github.com/sponsors/ai" } - ], - "license": "CC-BY-4.0" + ] + }, + "node_modules/catharsis": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/catharsis/-/catharsis-0.9.0.tgz", + "integrity": "sha512-prMTQVpcns/tzFgFVkVp6ak6RykZyWb3gu8ckUpd6YkTlacOd3DXGJjIpD4Q6zJirizvaiAjSSHlOsA+6sNh2A==", + "dev": true, + "license": "MIT", + "dependencies": { + "lodash": "^4.17.15" + }, + "engines": { + "node": ">= 10" + } }, "node_modules/chai": { "version": "4.5.0", "resolved": "https://registry.npmjs.org/chai/-/chai-4.5.0.tgz", "integrity": "sha512-RITGBfijLkBddZvnn8jdqoTypxvqbOLYQkGGxXzeFjVHvudaPw0HNFD9x928/eUwYWd2dPCugVqspGALTZZQKw==", "dev": true, - "license": "MIT", "dependencies": { "assertion-error": "^1.1.0", "check-error": "^1.0.3", @@ -1732,7 +1695,6 @@ "resolved": "https://registry.npmjs.org/chai-arrays/-/chai-arrays-2.2.0.tgz", "integrity": "sha512-4awrdGI2EH8owJ9I58PXwG4N56/FiM8bsn4CVSNEgr4GKAM6Kq5JPVApUbhUBjDakbZNuRvV7quRSC38PWq/tg==", "dev": true, - "license": "ISC", "engines": { "node": ">=0.10" } @@ -1742,7 +1704,6 @@ "resolved": "https://registry.npmjs.org/chai-http/-/chai-http-4.4.0.tgz", "integrity": "sha512-uswN3rZpawlRaa5NiDUHcDZ3v2dw5QgLyAwnQ2tnVNuP7CwIsOFuYJ0xR1WiR7ymD4roBnJIzOUep7w9jQMFJA==", "dev": true, - "license": "MIT", "dependencies": { "@types/chai": "4", "@types/superagent": "4.1.13", @@ -1762,17 +1723,15 @@ "resolved": "https://registry.npmjs.org/chai-like/-/chai-like-1.1.3.tgz", "integrity": "sha512-JGsxE2PBhXeXxfzkAobp8KcyVdXHa96/I/4oJf6GKtQccTugVaVD68TvPDiCUo+hBC2meR68riSeABHkn+Hyug==", "dev": true, - "license": "MIT", "peerDependencies": { "chai": "2 - 5" } }, "node_modules/chai-string": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/chai-string/-/chai-string-1.6.0.tgz", - "integrity": "sha512-sXV7whDmpax+8H++YaZelgin7aur1LGf9ZhjZa3ojETFJ0uPVuS4XEXuIagpZ/c8uVOtsSh4MwOjy5CBLjJSXA==", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/chai-string/-/chai-string-1.5.0.tgz", + "integrity": "sha512-sydDC3S3pNAQMYwJrs6dQX0oBQ6KfIPuOZ78n7rocW0eJJlsHPh2t3kwW7xfwYA/1Bf6/arGtSUo16rxR2JFlw==", "dev": true, - "license": "MIT", "peerDependencies": { "chai": "^4.1.2" } @@ -1781,21 +1740,18 @@ "version": "0.2.0", "resolved": "https://registry.npmjs.org/chai-things/-/chai-things-0.2.0.tgz", "integrity": "sha512-6ns0SU21xdRCoEXVKH3HGbwnsgfVMXQ+sU5V8PI9rfxaITos8lss1vUxbF1FAcJKjfqmmmLVlr/z3sLes00w+A==", - "dev": true, - "license": "MIT" + "dev": true }, "node_modules/chai-uuid": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/chai-uuid/-/chai-uuid-1.0.6.tgz", "integrity": "sha512-CG0kRk6TqI16ifkoNGLvyb6/Dz8ChE7nsrKCEUXa98ES3nnF3lYDCqXystFXTkH+2233favzkqmCbQT5uW+8iQ==", - "dev": true, - "license": "MIT" + "dev": true }, "node_modules/chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -1812,7 +1768,6 @@ "resolved": "https://registry.npmjs.org/charset/-/charset-1.0.1.tgz", "integrity": "sha512-6dVyOOYjpfFcL1Y4qChrAoQLRHvj2ziyhcm0QJlhOcAhykL/k1kTUPbeo+87MNRTRdk2OIIsIXbuF3x2wi5EXg==", "dev": true, - "license": "MIT", "engines": { "node": ">=4.0.0" } @@ -1822,7 +1777,6 @@ "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.3.tgz", "integrity": "sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg==", "dev": true, - "license": "MIT", "dependencies": { "get-func-name": "^2.0.2" }, @@ -1835,7 +1789,6 @@ "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", "dev": true, - "license": "MIT", "dependencies": { "anymatch": "~3.1.2", "braces": "~3.0.2", @@ -1860,7 +1813,6 @@ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", "dev": true, - "license": "ISC", "dependencies": { "is-glob": "^4.0.1" }, @@ -1873,7 +1825,6 @@ "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", "dev": true, - "license": "MIT", "engines": { "node": ">=6" } @@ -1883,7 +1834,6 @@ "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", "dev": true, - "license": "ISC", "dependencies": { "string-width": "^4.2.0", "strip-ansi": "^6.0.0", @@ -1891,23 +1841,18 @@ } }, "node_modules/color": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/color/-/color-5.0.3.tgz", - "integrity": "sha512-ezmVcLR3xAVp8kYOm4GS45ZLLgIE6SPAFoduLr6hTDajwb3KZ2F46gulK3XpcwRFb5KKGCSezCBAY4Dw4HsyXA==", - "license": "MIT", + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/color/-/color-3.2.1.tgz", + "integrity": "sha512-aBl7dZI9ENN6fUGC7mWpMTPNHmWUSNan9tuWN6ahh5ZLNk9baLJOnSMlrQkHcrfFgz2/RigjUVAjdx36VcemKA==", "dependencies": { - "color-convert": "^3.1.3", - "color-string": "^2.1.3" - }, - "engines": { - "node": ">=18" + "color-convert": "^1.9.3", + "color-string": "^1.6.0" } }, "node_modules/color-convert": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "license": "MIT", "dependencies": { "color-name": "~1.1.4" }, @@ -1918,49 +1863,37 @@ "node_modules/color-name": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "license": "MIT" + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, "node_modules/color-string": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/color-string/-/color-string-2.1.4.tgz", - "integrity": "sha512-Bb6Cq8oq0IjDOe8wJmi4JeNn763Xs9cfrBcaylK1tPypWzyoy2G3l90v9k64kjphl/ZJjPIShFztenRomi8WTg==", - "license": "MIT", + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.9.1.tgz", + "integrity": "sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==", "dependencies": { - "color-name": "^2.0.0" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/color-string/node_modules/color-name": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-2.1.0.tgz", - "integrity": "sha512-1bPaDNFm0axzE4MEAzKPuqKWeRaT43U/hyxKPBdqTfmPF+d6n7FSoTFxLVULUJOmiLp01KjhIPPH+HrXZJN4Rg==", - "license": "MIT", - "engines": { - "node": ">=12.20" + "color-name": "^1.0.0", + "simple-swizzle": "^0.2.2" } }, "node_modules/color/node_modules/color-convert": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-3.1.3.tgz", - "integrity": "sha512-fasDH2ont2GqF5HpyO4w0+BcewlhHEZOFn9c1ckZdHpJ56Qb7MHhH/IcJZbBGgvdtwdwNbLvxiBEdg336iA9Sg==", - "license": "MIT", + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", "dependencies": { - "color-name": "^2.0.0" - }, - "engines": { - "node": ">=14.6" + "color-name": "1.1.3" } }, "node_modules/color/node_modules/color-name": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-2.1.0.tgz", - "integrity": "sha512-1bPaDNFm0axzE4MEAzKPuqKWeRaT43U/hyxKPBdqTfmPF+d6n7FSoTFxLVULUJOmiLp01KjhIPPH+HrXZJN4Rg==", - "license": "MIT", - "engines": { - "node": ">=12.20" + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" + }, + "node_modules/colorspace": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/colorspace/-/colorspace-1.1.4.tgz", + "integrity": "sha512-BgvKJiuVu1igBUF2kEjRCZXol6wiiGbY5ipL/oVPwm0BL9sIpMIzM8IK7vwuxIIzOXMV3Ey5w+vxhm0rR/TN8w==", + "dependencies": { + "color": "^3.1.3", + "text-hex": "1.0.x" } }, "node_modules/combined-stream": { @@ -1968,7 +1901,6 @@ "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", "dev": true, - "license": "MIT", "dependencies": { "delayed-stream": "~1.0.0" }, @@ -1976,25 +1908,17 @@ "node": ">= 0.8" } }, - "node_modules/commander": { - "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", - "license": "MIT" - }, "node_modules/commondir": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==", - "dev": true, - "license": "MIT" + "dev": true }, "node_modules/component-emitter": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.1.tgz", "integrity": "sha512-T0+barUSQRTUQASh8bx02dl+DhF54GtIDY13Y3m9oWTklKbb3Wv974meRpeZ3lp1JpLVECWWNHC4vaG2XHXouQ==", "dev": true, - "license": "MIT", "funding": { "url": "https://github.com/sponsors/sindresorhus" } @@ -2002,14 +1926,12 @@ "node_modules/concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", - "license": "MIT" + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" }, "node_modules/config": { "version": "3.3.12", "resolved": "https://registry.npmjs.org/config/-/config-3.3.12.tgz", "integrity": "sha512-Vmx389R/QVM3foxqBzXO8t2tUikYZP64Q6vQxGrsMpREeJc/aWRnPRERXWsYzOHAumx/AOoILWe6nU3ZJL+6Sw==", - "license": "MIT", "dependencies": { "json5": "^2.2.3" }, @@ -2021,7 +1943,6 @@ "version": "0.5.4", "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", - "license": "MIT", "dependencies": { "safe-buffer": "5.2.1" }, @@ -2033,7 +1954,6 @@ "version": "1.0.5", "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", - "license": "MIT", "engines": { "node": ">= 0.6" } @@ -2042,46 +1962,37 @@ "version": "1.9.0", "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", - "dev": true, - "license": "MIT" + "dev": true }, "node_modules/cookie": { - "version": "0.7.2", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.2.tgz", - "integrity": "sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==", - "license": "MIT", + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.1.tgz", + "integrity": "sha512-6DnInpx7SJ2AK3+CTUE/ZM0vWTUboZCegxhC2xiIydHR9jNuTAASBrfEpHhiGOZw/nX51bHt6YQl8jsGo4y/0w==", "engines": { "node": ">= 0.6" } }, "node_modules/cookie-signature": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.7.tgz", - "integrity": "sha512-NXdYc3dLr47pBkpUCHtKSwIOQXLVn8dZEuywboCOJY/osA0wFSLlSawr3KN8qXJEyX66FcONTH8EIlVuK0yyFA==", - "license": "MIT" + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==" }, "node_modules/cookiejar": { "version": "2.1.4", "resolved": "https://registry.npmjs.org/cookiejar/-/cookiejar-2.1.4.tgz", "integrity": "sha512-LDx6oHrK+PhzLKJU9j5S7/Y3jM/mUHvD/DeI1WQmJn652iPC5Y4TBzC9l+5OMOXlyTTA+SmVUPm0HQUwpD5Jqw==", - "dev": true, - "license": "MIT" + "dev": true }, "node_modules/cors": { - "version": "2.8.6", - "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.6.tgz", - "integrity": "sha512-tJtZBBHA6vjIAaF6EnIaq6laBBP9aq/Y3ouVJjEfoHbRBcHBAHYcMh/w8LDrk2PvIMMq8gmopa5D4V8RmbrxGw==", - "license": "MIT", + "version": "2.8.5", + "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", + "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", "dependencies": { "object-assign": "^4", "vary": "^1" }, "engines": { "node": ">= 0.10" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/express" } }, "node_modules/cosmiconfig": { @@ -2089,7 +2000,6 @@ "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.1.0.tgz", "integrity": "sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==", "dev": true, - "license": "MIT", "dependencies": { "@types/parse-json": "^4.0.0", "import-fresh": "^3.2.1", @@ -2106,7 +2016,6 @@ "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", "dev": true, - "license": "MIT", "dependencies": { "path-key": "^3.1.0", "shebang-command": "^2.0.0", @@ -2120,7 +2029,6 @@ "version": "3.3.1", "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-3.3.1.tgz", "integrity": "sha512-5j88ECEn6h17UePrLi6pn1JcLtAiANa3KExyr9y9Z5vo2mv56Gh3I4Aja/B9P9uyMwyxNHAHWv+nE72f30T5Dg==", - "license": "MIT", "dependencies": { "type-fest": "^0.8.1" }, @@ -2132,8 +2040,6 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.2.tgz", "integrity": "sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ==", - "dev": true, - "license": "MIT", "dependencies": { "call-bound": "^1.0.3", "es-errors": "^1.3.0", @@ -2150,8 +2056,6 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/data-view-byte-length/-/data-view-byte-length-1.0.2.tgz", "integrity": "sha512-tuhGbE6CfTM9+5ANGf+oQb72Ky/0+s3xKUpHvShfiz2RxMFgFPjsXuRLBVMtvMs15awe45SRb83D6wH4ew6wlQ==", - "dev": true, - "license": "MIT", "dependencies": { "call-bound": "^1.0.3", "es-errors": "^1.3.0", @@ -2168,8 +2072,6 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/data-view-byte-offset/-/data-view-byte-offset-1.0.1.tgz", "integrity": "sha512-BS8PfmtDGnrgYdOonGZQdLZslWIeCGFP9tpan0hi1Co2Zr2NKADsvGYA8XxuG/4UWgJ6Cjtv+YJnB6MM69QGlQ==", - "dev": true, - "license": "MIT", "dependencies": { "call-bound": "^1.0.2", "es-errors": "^1.3.0", @@ -2186,7 +2088,6 @@ "version": "3.0.3", "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-3.0.3.tgz", "integrity": "sha512-jyCETtSl3VMZMWeRo7iY1FL19ges1t55hMo5yaam4Jrsm5EPL89UQkoQRyiI+Yf4k8r2ZpdngkV8hr1lIdjb3Q==", - "license": "MIT", "engines": { "node": "*" } @@ -2194,14 +2095,12 @@ "node_modules/debounce": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/debounce/-/debounce-1.2.1.tgz", - "integrity": "sha512-XRRe6Glud4rd/ZGQfiV1ruXSfbvfJedlV9Y6zOlP+2K04vBYiJEte6stfFkCP03aMnY5tsipamumUjL14fofug==", - "license": "MIT" + "integrity": "sha512-XRRe6Glud4rd/ZGQfiV1ruXSfbvfJedlV9Y6zOlP+2K04vBYiJEte6stfFkCP03aMnY5tsipamumUjL14fofug==" }, "node_modules/debug": { - "version": "4.4.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", - "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", - "license": "MIT", + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz", + "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==", "dependencies": { "ms": "^2.1.3" }, @@ -2219,7 +2118,6 @@ "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -2229,7 +2127,6 @@ "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-4.1.4.tgz", "integrity": "sha512-SUwdGfqdKOwxCPeVYjwSyRpJ7Z+fhpwIAtmCUdZIWZ/YP5R9WAsyuSgpLVDi9bjWoN2LXHNss/dk3urXtdQxGg==", "dev": true, - "license": "MIT", "dependencies": { "type-detect": "^4.0.0" }, @@ -2241,14 +2138,12 @@ "version": "0.1.4", "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", - "dev": true, - "license": "MIT" + "dev": true }, "node_modules/deepmerge": { "version": "4.3.1", "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", - "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -2258,7 +2153,6 @@ "resolved": "https://registry.npmjs.org/default-require-extensions/-/default-require-extensions-3.0.1.tgz", "integrity": "sha512-eXTJmRbm2TIt9MgWTsOH1wEuhew6XGZcMeGKCtLedIg/NCsg1iBePXkceTdK4Fii7pzmN9tGsZhKzZ4h7O/fxw==", "dev": true, - "license": "MIT", "dependencies": { "strip-bom": "^4.0.0" }, @@ -2273,8 +2167,6 @@ "version": "1.1.4", "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", - "dev": true, - "license": "MIT", "dependencies": { "es-define-property": "^1.0.0", "es-errors": "^1.3.0", @@ -2291,8 +2183,6 @@ "version": "1.2.1", "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", - "dev": true, - "license": "MIT", "dependencies": { "define-data-property": "^1.0.1", "has-property-descriptors": "^1.0.0", @@ -2310,7 +2200,6 @@ "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.4.0" } @@ -2320,7 +2209,6 @@ "resolved": "https://registry.npmjs.org/depcheck/-/depcheck-1.4.7.tgz", "integrity": "sha512-1lklS/bV5chOxwNKA/2XUUk/hPORp8zihZsXflr8x0kLwmcZ9Y9BsS6Hs3ssvA+2wUVbG0U2Ciqvm1SokNjPkA==", "dev": true, - "license": "MIT", "dependencies": { "@babel/parser": "^7.23.0", "@babel/traverse": "^7.23.2", @@ -2357,7 +2245,6 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", - "license": "MIT", "engines": { "node": ">= 0.8" } @@ -2366,14 +2253,12 @@ "version": "0.2.0", "resolved": "https://registry.npmjs.org/deps-regex/-/deps-regex-0.2.0.tgz", "integrity": "sha512-PwuBojGMQAYbWkMXOY9Pd/NWCDNHVH12pnS7WHqZkTSeMESe4hwnKKRp0yR87g37113x4JPbo/oIvXY+s/f56Q==", - "dev": true, - "license": "MIT" + "dev": true }, "node_modules/destroy": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", - "license": "MIT", "engines": { "node": ">= 0.8", "npm": "1.2.8000 || >= 1.4.16" @@ -2384,7 +2269,6 @@ "resolved": "https://registry.npmjs.org/detect-file/-/detect-file-1.0.0.tgz", "integrity": "sha512-DtCOLG98P007x7wiiOmfI0fi3eIKyWiLTGJ2MDnVi/E04lWGbf+JzrRHMm0rgIIZJGtHpKpbVgLWHrv8xXpc3Q==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -2394,18 +2278,16 @@ "resolved": "https://registry.npmjs.org/dezalgo/-/dezalgo-1.0.4.tgz", "integrity": "sha512-rXSP0bf+5n0Qonsb+SVVfNfIsimO4HEtmnIpPHY8Q1UCzKlQrDMfdobr8nJOOsRgWCyMRqeSBQzmWUMq7zvVig==", "dev": true, - "license": "ISC", "dependencies": { "asap": "^2.0.0", "wrappy": "1" } }, "node_modules/diff": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/diff/-/diff-5.2.2.tgz", - "integrity": "sha512-vtcDfH3TOjP8UekytvnHH1o1P4FcUdt4eQ1Y+Abap1tk/OB2MWQvcwS2ClCd1zuIhc3JKOx6p3kod8Vfys3E+A==", + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-5.2.0.tgz", + "integrity": "sha512-uIFDxqpRZGZ6ThOk84hEfqWoHx2devRFvpTZcTHur85vImfaxUbTW9Ryh4CpCuDnToOP1CEtXKIgytHBPVff5A==", "dev": true, - "license": "BSD-3-Clause", "engines": { "node": ">=0.3.1" } @@ -2415,7 +2297,6 @@ "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", "dev": true, - "license": "Apache-2.0", "dependencies": { "esutils": "^2.0.2" }, @@ -2427,7 +2308,6 @@ "version": "5.0.1", "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-5.0.1.tgz", "integrity": "sha512-4As8uPrjfwb7VXC+WnLCbXK7y+Ueb2B3zgNCePYfhxS1PYeaO1YTeplffTEcbfLhvFNGLAz90VvJs9yomG7bow==", - "license": "BSD-2-Clause", "engines": { "node": ">=4.6.0" } @@ -2436,7 +2316,6 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", - "license": "MIT", "dependencies": { "call-bind-apply-helpers": "^1.0.1", "es-errors": "^1.3.0", @@ -2450,7 +2329,6 @@ "version": "0.3.0", "resolved": "https://registry.npmjs.org/dynamic-dedupe/-/dynamic-dedupe-0.3.0.tgz", "integrity": "sha512-ssuANeD+z97meYOqd50e04Ze5qp4bPqo8cCkI4TRjZkzAUgIDTrXV1R8QCdINpiI+hw14+rYazvTRdQrz0/rFQ==", - "license": "MIT", "dependencies": { "xtend": "^4.0.0" } @@ -2458,33 +2336,28 @@ "node_modules/ee-first": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", - "license": "MIT" + "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==" }, "node_modules/electron-to-chromium": { - "version": "1.5.325", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.325.tgz", - "integrity": "sha512-PwfIw7WQSt3xX7yOf5OE/unLzsK9CaN2f/FvV3WjPR1Knoc1T9vePRVV4W1EM301JzzysK51K7FNKcusCr0zYA==", - "dev": true, - "license": "ISC" + "version": "1.5.76", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.76.tgz", + "integrity": "sha512-CjVQyG7n7Sr+eBXE86HIulnL5N8xZY1sgmOPGuq/F0Rr0FJq63lg0kEtOIDfZBk44FnDLf6FUJ+dsJcuiUDdDQ==", + "dev": true }, "node_modules/emoji-regex": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "license": "MIT" + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" }, "node_modules/enabled": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/enabled/-/enabled-2.0.0.tgz", - "integrity": "sha512-AKrN98kuwOzMIdAizXGI86UFBoo26CL21UM763y1h/GMSJ4/OHU9k2YlsmBpyScFo/wbLzWQJBMCW4+IO3/+OQ==", - "license": "MIT" + "integrity": "sha512-AKrN98kuwOzMIdAizXGI86UFBoo26CL21UM763y1h/GMSJ4/OHU9k2YlsmBpyScFo/wbLzWQJBMCW4+IO3/+OQ==" }, "node_modules/encodeurl": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==", - "license": "MIT", "engines": { "node": ">= 0.8" } @@ -2494,7 +2367,6 @@ "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.4.1.tgz", "integrity": "sha512-rRqJg/6gd538VHvR3PSrdRBb/1Vy2YfzHqzvbhGIQpDRKIa4FgV/54b5Q1xYSxOOwKvjXweS26E0Q+nAMwp2pQ==", "dev": true, - "license": "MIT", "dependencies": { "ansi-colors": "^4.1.1", "strip-ansi": "^6.0.1" @@ -2504,11 +2376,10 @@ } }, "node_modules/entities": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/entities/-/entities-7.0.1.tgz", - "integrity": "sha512-TWrgLOFUQTH994YUyl1yT4uyavY5nNB5muff+RtWaqNVCAK408b5ZnnbNAUEWLTCpum9w6arT70i1XdQ4UeOPA==", + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", "dev": true, - "license": "BSD-2-Clause", "engines": { "node": ">=0.12" }, @@ -2517,11 +2388,10 @@ } }, "node_modules/error-ex": { - "version": "1.3.4", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.4.tgz", - "integrity": "sha512-sqQamAnR14VgCr1A618A3sGrygcpK+HEbenA/HiEAkkUwcZIIB/tgWqHFxWgOyDh4nB4JCRimh79dR5Ywc9MDQ==", + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", "dev": true, - "license": "MIT", "dependencies": { "is-arrayish": "^0.2.1" } @@ -2530,7 +2400,6 @@ "version": "1.24.1", "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.24.1.tgz", "integrity": "sha512-zHXBLhP+QehSSbsS9Pt23Gg964240DPd6QCf8WpkqEXxQ7fhdZzYsocOr5u7apWonsS5EjZDmTF+/slGMyasvw==", - "dev": true, "license": "MIT", "dependencies": { "array-buffer-byte-length": "^1.0.2", @@ -2599,7 +2468,6 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", - "license": "MIT", "engines": { "node": ">= 0.4" } @@ -2608,9 +2476,53 @@ "version": "1.3.0", "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-get-iterator": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/es-get-iterator/-/es-get-iterator-1.1.3.tgz", + "integrity": "sha512-sPZmqHBe6JIiTfN5q2pEi//TwxmAFHwj/XEuYjTuse78i8KxaqMTTzxPoFKuzRpDpTJ+0NAbpfenkmH2rePtuw==", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.3", + "has-symbols": "^1.0.3", + "is-arguments": "^1.1.1", + "is-map": "^2.0.2", + "is-set": "^2.0.2", + "is-string": "^1.0.7", + "isarray": "^2.0.5", + "stop-iteration-iterator": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/es-map": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/es-map/-/es-map-1.0.6.tgz", + "integrity": "sha512-JWn54TeYJe93WHhduTh9MUqEkjhbCjU8vqq1q9FyCrOle/utr1i8PmzK2vXnP6BeLsBLvb1zV4fSkpVnT4LW1A==", "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.3", + "es-get-iterator": "^1.1.3", + "es-set-tostringtag": "^2.0.3", + "for-each": "^0.3.3", + "get-intrinsic": "^1.2.4", + "globalthis": "^1.0.4", + "has-symbols": "^1.0.3", + "internal-slot": "^1.0.7", + "object.entries": "^1.1.8" + }, "engines": { "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/es-shims/es-map?sponsor=1" } }, "node_modules/es-object-atoms": { @@ -2625,12 +2537,41 @@ "node": ">= 0.4" } }, + "node_modules/es-set": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/es-set/-/es-set-2.0.1.tgz", + "integrity": "sha512-w2EDjbgK6Xl23Bxob5Jgrcd+x7e51HxGssmP9GYZ0NbNLhtg9mHiVY9RxO7UsHHn0v10nt5cq2iFJ4GzibAP1Q==", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.2", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.5", + "es-map": "^1.0.6", + "es-set-tostringtag": "^2.0.3", + "for-each": "^0.3.3", + "functions-have-names": "^1.2.3", + "get-intrinsic": "^1.2.5", + "globalthis": "^1.0.4", + "gopd": "^1.2.0", + "has-property-descriptors": "^1.0.2", + "has-symbols": "^1.1.0", + "internal-slot": "^1.0.7", + "iterate-value": "^1.0.2", + "object.entries": "^1.1.8", + "stop-iteration-iterator": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/es-shims/Set?sponsor=1" + } + }, "node_modules/es-set-tostringtag": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz", "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==", - "dev": true, - "license": "MIT", "dependencies": { "es-errors": "^1.3.0", "get-intrinsic": "^1.2.6", @@ -2642,24 +2583,18 @@ } }, "node_modules/es-shim-unscopables": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.1.0.tgz", - "integrity": "sha512-d9T8ucsEhh8Bi1woXCf+TIKDIROLG5WCkxg8geBCbvk22kzwC5G2OnXVMO6FUsvQlgUUXQ2itephWDLqDzbeCw==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.2.tgz", + "integrity": "sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw==", "dev": true, - "license": "MIT", "dependencies": { - "hasown": "^2.0.2" - }, - "engines": { - "node": ">= 0.4" + "hasown": "^2.0.0" } }, "node_modules/es-to-primitive": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.3.0.tgz", "integrity": "sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g==", - "dev": true, - "license": "MIT", "dependencies": { "is-callable": "^1.2.7", "is-date-object": "^1.0.5", @@ -2676,14 +2611,12 @@ "version": "4.1.1", "resolved": "https://registry.npmjs.org/es6-error/-/es6-error-4.1.1.tgz", "integrity": "sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==", - "dev": true, - "license": "MIT" + "dev": true }, "node_modules/escalade": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", - "license": "MIT", "engines": { "node": ">=6" } @@ -2691,15 +2624,13 @@ "node_modules/escape-html": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", - "license": "MIT" + "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==" }, "node_modules/escape-string-regexp": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", "dev": true, - "license": "MIT", "engines": { "node": ">=10" }, @@ -2713,7 +2644,6 @@ "integrity": "sha512-ypowyDxpVSYpkXr9WPv2PAZCtNip1Mv5KTW0SCurXv/9iOpcrH9PaqUElksqEB6pChqHGDRCFTyrZlGhnLNGiA==", "deprecated": "This version is no longer supported. Please see https://eslint.org/version-support for other options.", "dev": true, - "license": "MIT", "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", "@eslint-community/regexpp": "^4.6.1", @@ -2769,7 +2699,6 @@ "resolved": "https://registry.npmjs.org/eslint-config-standard/-/eslint-config-standard-14.1.1.tgz", "integrity": "sha512-Z9B+VR+JIXRxz21udPTL9HpFMyoMUEeX1G251EQ6e05WD9aPVtVBn09XUmZ259wCMlCDmYDSZG62Hhm+ZTJcUg==", "dev": true, - "license": "MIT", "peerDependencies": { "eslint": ">=6.2.2", "eslint-plugin-import": ">=2.18.0", @@ -2783,7 +2712,6 @@ "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.9.tgz", "integrity": "sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==", "dev": true, - "license": "MIT", "dependencies": { "debug": "^3.2.7", "is-core-module": "^2.13.0", @@ -2795,17 +2723,15 @@ "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", "dev": true, - "license": "MIT", "dependencies": { "ms": "^2.1.1" } }, "node_modules/eslint-module-utils": { - "version": "2.12.1", - "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.12.1.tgz", - "integrity": "sha512-L8jSWTze7K2mTg0vos/RuLRS5soomksDPoJLXIslC7c8Wmut3bx7CPpJijDcBZtxQ5lrbUdM+s0OlNbz0DCDNw==", + "version": "2.12.0", + "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.12.0.tgz", + "integrity": "sha512-wALZ0HFoytlyh/1+4wuZ9FJCD/leWHQzzrxJ8+rebyReSLk7LApMyd3WJaLVoN+D5+WIdJyDK1c6JnE65V4Zyg==", "dev": true, - "license": "MIT", "dependencies": { "debug": "^3.2.7" }, @@ -2823,7 +2749,6 @@ "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", "dev": true, - "license": "MIT", "dependencies": { "ms": "^2.1.1" } @@ -2833,7 +2758,6 @@ "resolved": "https://registry.npmjs.org/eslint-plugin-es/-/eslint-plugin-es-3.0.1.tgz", "integrity": "sha512-GUmAsJaN4Fc7Gbtl8uOBlayo2DqhwWvEzykMHSCZHU3XdJ+NSzzZcVhXh3VxX5icqQ+oQdIEawXX8xkR3mIFmQ==", "dev": true, - "license": "MIT", "dependencies": { "eslint-utils": "^2.0.0", "regexpp": "^3.0.0" @@ -2849,30 +2773,29 @@ } }, "node_modules/eslint-plugin-import": { - "version": "2.32.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.32.0.tgz", - "integrity": "sha512-whOE1HFo/qJDyX4SnXzP4N6zOWn79WhnCUY/iDR0mPfQZO8wcYE4JClzI2oZrhBnnMUCBCHZhO6VQyoBU95mZA==", + "version": "2.31.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.31.0.tgz", + "integrity": "sha512-ixmkI62Rbc2/w8Vfxyh1jQRTdRTF52VxwRVHl/ykPAmqG+Nb7/kNn+byLP0LxPgI7zWA16Jt82SybJInmMia3A==", "dev": true, - "license": "MIT", "dependencies": { "@rtsao/scc": "^1.1.0", - "array-includes": "^3.1.9", - "array.prototype.findlastindex": "^1.2.6", - "array.prototype.flat": "^1.3.3", - "array.prototype.flatmap": "^1.3.3", + "array-includes": "^3.1.8", + "array.prototype.findlastindex": "^1.2.5", + "array.prototype.flat": "^1.3.2", + "array.prototype.flatmap": "^1.3.2", "debug": "^3.2.7", "doctrine": "^2.1.0", "eslint-import-resolver-node": "^0.3.9", - "eslint-module-utils": "^2.12.1", + "eslint-module-utils": "^2.12.0", "hasown": "^2.0.2", - "is-core-module": "^2.16.1", + "is-core-module": "^2.15.1", "is-glob": "^4.0.3", "minimatch": "^3.1.2", "object.fromentries": "^2.0.8", "object.groupby": "^1.0.3", - "object.values": "^1.2.1", + "object.values": "^1.2.0", "semver": "^6.3.1", - "string.prototype.trimend": "^1.0.9", + "string.prototype.trimend": "^1.0.8", "tsconfig-paths": "^3.15.0" }, "engines": { @@ -2898,7 +2821,6 @@ "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", "dev": true, - "license": "MIT", "dependencies": { "ms": "^2.1.1" } @@ -2908,7 +2830,6 @@ "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", "dev": true, - "license": "Apache-2.0", "dependencies": { "esutils": "^2.0.2" }, @@ -2917,11 +2838,10 @@ } }, "node_modules/eslint-plugin-import/node_modules/minimatch": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz", - "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, - "license": "ISC", "dependencies": { "brace-expansion": "^1.1.7" }, @@ -2934,7 +2854,6 @@ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true, - "license": "ISC", "bin": { "semver": "bin/semver.js" } @@ -2944,7 +2863,6 @@ "resolved": "https://registry.npmjs.org/eslint-plugin-mocha/-/eslint-plugin-mocha-8.2.0.tgz", "integrity": "sha512-8oOR47Ejt+YJPNQzedbiklDqS1zurEaNrxXpRs+Uk4DMDPVmKNagShFeUaYsfvWP55AhI+P1non5QZAHV6K78A==", "dev": true, - "license": "MIT", "dependencies": { "eslint-utils": "^2.1.0", "ramda": "^0.27.1" @@ -2961,7 +2879,6 @@ "resolved": "https://registry.npmjs.org/eslint-plugin-node/-/eslint-plugin-node-11.1.0.tgz", "integrity": "sha512-oUwtPJ1W0SKD0Tr+wqu92c5xuCeQqB3hSCHasn/ZgjFdA9iDGNkNf2Zi9ztY7X+hNuMib23LNGRm6+uN+KLE3g==", "dev": true, - "license": "MIT", "dependencies": { "eslint-plugin-es": "^3.0.0", "eslint-utils": "^2.0.0", @@ -2989,11 +2906,10 @@ } }, "node_modules/eslint-plugin-node/node_modules/minimatch": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz", - "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, - "license": "ISC", "dependencies": { "brace-expansion": "^1.1.7" }, @@ -3006,7 +2922,6 @@ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true, - "license": "ISC", "bin": { "semver": "bin/semver.js" } @@ -3016,7 +2931,6 @@ "resolved": "https://registry.npmjs.org/eslint-plugin-promise/-/eslint-plugin-promise-4.3.1.tgz", "integrity": "sha512-bY2sGqyptzFBDLh/GMbAxfdJC+b0f23ME63FOE4+Jao0oZ3E1LEwFtWJX/1pGMJLiTtrSSern2CRM/g+dfc0eQ==", "dev": true, - "license": "ISC", "engines": { "node": ">=6" } @@ -3040,7 +2954,6 @@ "url": "https://feross.org/support" } ], - "license": "MIT", "peerDependencies": { "eslint": ">=5.0.0" } @@ -3050,7 +2963,6 @@ "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", "dev": true, - "license": "BSD-2-Clause", "dependencies": { "esrecurse": "^4.3.0", "estraverse": "^5.2.0" @@ -3067,7 +2979,6 @@ "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz", "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==", "dev": true, - "license": "MIT", "dependencies": { "eslint-visitor-keys": "^1.1.0" }, @@ -3083,7 +2994,6 @@ "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", "dev": true, - "license": "Apache-2.0", "engines": { "node": ">=4" } @@ -3093,7 +3003,6 @@ "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", "dev": true, - "license": "Apache-2.0", "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, @@ -3102,11 +3011,10 @@ } }, "node_modules/eslint/node_modules/ajv": { - "version": "6.14.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.14.0.tgz", - "integrity": "sha512-IWrosm/yrn43eiKqkfkHis7QioDleaXQHdDVPKg0FSwwd/DuvyX79TZnFOnYpB7dcsFAMmtFztZuXPDvSePkFw==", + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", "dev": true, - "license": "MIT", "dependencies": { "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", @@ -3122,8 +3030,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true, - "license": "Python-2.0" + "dev": true }, "node_modules/eslint/node_modules/brace-expansion": { "version": "1.1.12", @@ -3136,12 +3043,26 @@ "concat-map": "0.0.1" } }, + "node_modules/eslint/node_modules/globals": { + "version": "13.24.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", + "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", + "dev": true, + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/eslint/node_modules/js-yaml": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.1.tgz", "integrity": "sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==", "dev": true, - "license": "MIT", "dependencies": { "argparse": "^2.0.1" }, @@ -3153,15 +3074,13 @@ "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, - "license": "MIT" + "dev": true }, "node_modules/eslint/node_modules/minimatch": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz", - "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, - "license": "ISC", "dependencies": { "brace-expansion": "^1.1.7" }, @@ -3169,12 +3088,23 @@ "node": "*" } }, + "node_modules/eslint/node_modules/type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/espree": { "version": "9.6.1", "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", "dev": true, - "license": "BSD-2-Clause", "dependencies": { "acorn": "^8.9.0", "acorn-jsx": "^5.3.2", @@ -3192,7 +3122,6 @@ "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", "dev": true, - "license": "BSD-2-Clause", "bin": { "esparse": "bin/esparse.js", "esvalidate": "bin/esvalidate.js" @@ -3202,11 +3131,10 @@ } }, "node_modules/esquery": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.7.0.tgz", - "integrity": "sha512-Ap6G0WQwcU/LHsvLwON1fAQX9Zp0A2Y6Y/cJBl9r/JbW90Zyg4/zbG6zzKa2OTALELarYHmKu0GhpM5EO+7T0g==", + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz", + "integrity": "sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==", "dev": true, - "license": "BSD-3-Clause", "dependencies": { "estraverse": "^5.1.0" }, @@ -3219,7 +3147,6 @@ "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", "dev": true, - "license": "BSD-2-Clause", "dependencies": { "estraverse": "^5.2.0" }, @@ -3232,7 +3159,6 @@ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", "dev": true, - "license": "BSD-2-Clause", "engines": { "node": ">=4.0" } @@ -3241,15 +3167,13 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", - "dev": true, - "license": "MIT" + "dev": true }, "node_modules/esutils": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", "dev": true, - "license": "BSD-2-Clause", "engines": { "node": ">=0.10.0" } @@ -3258,7 +3182,6 @@ "version": "1.8.1", "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", - "license": "MIT", "engines": { "node": ">= 0.6" } @@ -3268,7 +3191,6 @@ "resolved": "https://registry.npmjs.org/expand-tilde/-/expand-tilde-2.0.2.tgz", "integrity": "sha512-A5EmesHW6rfnZ9ysHQjPdJRni0SRar0tjtG5MNtm9n5TUvsYU8oozprtRD4AqHxcZWWlVuAmQo2nWKfN9oyjTw==", "dev": true, - "license": "MIT", "dependencies": { "homedir-polyfill": "^1.0.1" }, @@ -3280,7 +3202,6 @@ "version": "4.22.1", "resolved": "https://registry.npmjs.org/express/-/express-4.22.1.tgz", "integrity": "sha512-F2X8g9P1X7uCPZMA3MVf9wcTqlyNp7IhH5qPCI0izhaOIYXaW9L535tGA3qmjRzpH+bZczqq7hVKxTR4NWnu+g==", - "license": "MIT", "dependencies": { "accepts": "~1.3.8", "array-flatten": "1.1.1", @@ -3337,7 +3258,6 @@ "version": "6.11.2", "resolved": "https://registry.npmjs.org/express-rate-limit/-/express-rate-limit-6.11.2.tgz", "integrity": "sha512-a7uwwfNTh1U60ssiIkuLFWHt4hAC5yxlLGU2VP0X4YNlyEDZAqF4tK3GD3NSitVBrCQmQ0++0uOyFOgC2y4DDw==", - "license": "MIT", "engines": { "node": ">= 14" }, @@ -3349,7 +3269,6 @@ "version": "6.15.0", "resolved": "https://registry.npmjs.org/express-validator/-/express-validator-6.15.0.tgz", "integrity": "sha512-r05VYoBL3i2pswuehoFSy+uM8NBuVaY7avp5qrYjQBDzagx2Z5A77FZqPT8/gNLF3HopWkIzaTFaC4JysWXLqg==", - "license": "MIT", "dependencies": { "lodash": "^4.17.21", "validator": "^13.9.0" @@ -3362,7 +3281,6 @@ "version": "2.6.9", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "license": "MIT", "dependencies": { "ms": "2.0.0" } @@ -3370,55 +3288,35 @@ "node_modules/express/node_modules/ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "license": "MIT" - }, - "node_modules/express/node_modules/qs": { - "version": "6.14.2", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.14.2.tgz", - "integrity": "sha512-V/yCWTTF7VJ9hIh18Ugr2zhJMP01MY7c5kh4J870L7imm6/DIzBsNLTXzMwUA3yZ5b/KBqLx8Kp3uRvd7xSe3Q==", - "license": "BSD-3-Clause", - "dependencies": { - "side-channel": "^1.1.0" - }, - "engines": { - "node": ">=0.6" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" }, "node_modules/fast-deep-equal": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", - "license": "MIT" + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" }, "node_modules/fast-json-stable-stringify": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", - "dev": true, - "license": "MIT" + "dev": true }, "node_modules/fast-levenshtein": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", - "dev": true, - "license": "MIT" + "dev": true }, "node_modules/fast-safe-stringify": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.1.1.tgz", "integrity": "sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==", - "dev": true, - "license": "MIT" + "dev": true }, "node_modules/fast-uri": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.1.0.tgz", - "integrity": "sha512-iPeeDKJSWf4IEOasVVrknXpaBV0IApz/gp7S2bb7Z4Lljbl2MGJRqInZiUrQwV16cpzw/D3S5j5Julj/gT52AA==", + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.0.5.tgz", + "integrity": "sha512-5JnBCWpFlMo0a3ciDy/JckMzzv1U9coZrIhedq+HXxxUfDTAiS0LA8OKVao4G9BxmCVck/jtA5r3KAtRWEyD8Q==", "funding": [ { "type": "github", @@ -3428,15 +3326,13 @@ "type": "opencollective", "url": "https://opencollective.com/fastify" } - ], - "license": "BSD-3-Clause" + ] }, "node_modules/fastq": { - "version": "1.20.1", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.20.1.tgz", - "integrity": "sha512-GGToxJ/w1x32s/D2EKND7kTil4n8OVk/9mycTc4VDza13lOvpUZTGX3mFSCtV9ksdGBVzvsyAVLM6mHFThxXxw==", + "version": "1.18.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.18.0.tgz", + "integrity": "sha512-QKHXPW0hD8g4UET03SdOdunzSouc9N4AuHdsX8XNcTsuz+yYFILVNIX4l9yHABMhiEI9Db0JTTIpu0wB+Y1QQw==", "dev": true, - "license": "ISC", "dependencies": { "reusify": "^1.0.4" } @@ -3444,15 +3340,13 @@ "node_modules/fecha": { "version": "4.2.3", "resolved": "https://registry.npmjs.org/fecha/-/fecha-4.2.3.tgz", - "integrity": "sha512-OP2IUU6HeYKJi3i0z4A19kHMQoLVs4Hc+DPqqxI2h/DPZHTm/vjsfC6P0b4jCMy14XizLBqvndQ+UilD7707Jw==", - "license": "MIT" + "integrity": "sha512-OP2IUU6HeYKJi3i0z4A19kHMQoLVs4Hc+DPqqxI2h/DPZHTm/vjsfC6P0b4jCMy14XizLBqvndQ+UilD7707Jw==" }, "node_modules/file-entry-cache": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", "dev": true, - "license": "MIT", "dependencies": { "flat-cache": "^3.0.4" }, @@ -3464,7 +3358,6 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/filewatcher/-/filewatcher-3.0.1.tgz", "integrity": "sha512-Fro8py2B8EJupSP37Kyd4kjKZLr+5ksFq7Vbw8A392Z15Unq8016SPUDvO/AsDj5V6bbPk98PTAinpc5YhPbJw==", - "license": "MIT", "dependencies": { "debounce": "^1.0.0" } @@ -3474,7 +3367,6 @@ "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", "dev": true, - "license": "MIT", "dependencies": { "to-regex-range": "^5.0.1" }, @@ -3483,17 +3375,16 @@ } }, "node_modules/finalhandler": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.3.2.tgz", - "integrity": "sha512-aA4RyPcd3badbdABGDuTXCMTtOneUCAYH/gxoYRTZlIJdF0YPWuGqiAsIrhNnnqdXGswYk6dGujem4w80UJFhg==", - "license": "MIT", + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.3.1.tgz", + "integrity": "sha512-6BN9trH7bp3qvnrRyzsBz+g3lZxTNZTbVO2EV1CS0WIcDbawYVdYvGflME/9QP0h0pYlCDBCTjYa9nZzMDpyxQ==", "dependencies": { "debug": "2.6.9", "encodeurl": "~2.0.0", "escape-html": "~1.0.3", - "on-finished": "~2.4.1", + "on-finished": "2.4.1", "parseurl": "~1.3.3", - "statuses": "~2.0.2", + "statuses": "2.0.1", "unpipe": "~1.0.0" }, "engines": { @@ -3504,7 +3395,6 @@ "version": "2.6.9", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "license": "MIT", "dependencies": { "ms": "2.0.0" } @@ -3512,15 +3402,13 @@ "node_modules/finalhandler/node_modules/ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "license": "MIT" + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" }, "node_modules/find-cache-dir": { "version": "3.3.2", "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.2.tgz", "integrity": "sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==", "dev": true, - "license": "MIT", "dependencies": { "commondir": "^1.0.1", "make-dir": "^3.0.2", @@ -3538,7 +3426,6 @@ "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", "dev": true, - "license": "MIT", "dependencies": { "locate-path": "^6.0.0", "path-exists": "^4.0.0" @@ -3555,7 +3442,6 @@ "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-5.0.0.tgz", "integrity": "sha512-MzwXju70AuyflbgeOhzvQWAvvQdo1XL0A9bVvlXsYcFEBM87WR4OakL4OfZq+QRmr+duJubio+UtNQCPsVESzQ==", "dev": true, - "license": "MIT", "dependencies": { "detect-file": "^1.0.0", "is-glob": "^4.0.3", @@ -3571,7 +3457,6 @@ "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", "dev": true, - "license": "BSD-3-Clause", "bin": { "flat": "cli.js" } @@ -3581,7 +3466,6 @@ "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz", "integrity": "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==", "dev": true, - "license": "MIT", "dependencies": { "flatted": "^3.2.9", "keyv": "^4.5.3", @@ -3592,23 +3476,20 @@ } }, "node_modules/flatted": { - "version": "3.4.2", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.4.2.tgz", - "integrity": "sha512-PjDse7RzhcPkIJwy5t7KPWQSZ9cAbzQXcafsetQoD7sOJRQlGikNbx7yZp2OotDnJyrDcbyRq3Ttb18iYOqkxA==", - "dev": true, - "license": "ISC" + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.2.tgz", + "integrity": "sha512-AiwGJM8YcNOaobumgtng+6NHuOqC3A7MixFeDafM3X9cIUM+xUXoS5Vfgf+OihAYe20fxqNM9yPBXJzRtZ/4eA==", + "dev": true }, "node_modules/fn.name": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/fn.name/-/fn.name-1.1.0.tgz", - "integrity": "sha512-GRnmB5gPyJpAhTQdSZTSp9uaPSvl09KoYcMQtsB9rQoOmzs9dH6ffeccH+Z+cv6P68Hu5bC6JjRh4Ah/mHSNRw==", - "license": "MIT" + "integrity": "sha512-GRnmB5gPyJpAhTQdSZTSp9uaPSvl09KoYcMQtsB9rQoOmzs9dH6ffeccH+Z+cv6P68Hu5bC6JjRh4Ah/mHSNRw==" }, "node_modules/for-each": { "version": "0.3.5", "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.5.tgz", "integrity": "sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==", - "dev": true, "license": "MIT", "dependencies": { "is-callable": "^1.2.7" @@ -3625,7 +3506,6 @@ "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-2.0.0.tgz", "integrity": "sha512-dCIq9FpEcyQyXKCkyzmlPTFNgrCzPudOe+mhvJU5zAtlBnGVy2yKxtfsxK2tQBThwq225jcvBjpw1Gr40uzZCA==", "dev": true, - "license": "ISC", "dependencies": { "cross-spawn": "^7.0.0", "signal-exit": "^3.0.2" @@ -3635,11 +3515,10 @@ } }, "node_modules/form-data": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.5.tgz", - "integrity": "sha512-8RipRLol37bNs2bhoV67fiTEvdTrbMUYcFTiy3+wuuOnUog2QBHCZWXDRijWQfAkhBj2Uf5UnVaiWwA5vdd82w==", + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.4.tgz", + "integrity": "sha512-KrGhL9Q4zjj0kiUt5OO4Mr/A/jlI2jDYs5eHBpYHPcBEVSiipAvn2Ko2HnPe20rmcuuvMHNdZFp+4IlGTMF0Ow==", "dev": true, - "license": "MIT", "dependencies": { "asynckit": "^0.4.0", "combined-stream": "^1.0.8", @@ -3671,7 +3550,6 @@ "version": "0.2.0", "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", - "license": "MIT", "engines": { "node": ">= 0.6" } @@ -3680,7 +3558,6 @@ "version": "0.5.2", "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", - "license": "MIT", "engines": { "node": ">= 0.6" } @@ -3703,14 +3580,12 @@ "type": "consulting", "url": "https://feross.org/support" } - ], - "license": "MIT" + ] }, "node_modules/fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", - "license": "ISC" + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" }, "node_modules/fsevents": { "version": "2.3.3", @@ -3718,7 +3593,6 @@ "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", "dev": true, "hasInstallScript": true, - "license": "MIT", "optional": true, "os": [ "darwin" @@ -3731,7 +3605,6 @@ "version": "1.1.2", "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", - "license": "MIT", "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -3740,8 +3613,6 @@ "version": "1.1.8", "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.8.tgz", "integrity": "sha512-e5iwyodOHhbMr/yNrc7fDYG4qlbIvI5gajyzPnb5TCwyhjApznQh1BMFou9b30SevY43gCJKXycoCBjMbsuW0Q==", - "dev": true, - "license": "MIT", "dependencies": { "call-bind": "^1.0.8", "call-bound": "^1.0.3", @@ -3761,35 +3632,21 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", "integrity": "sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g==", - "dev": true, - "license": "MIT" + "dev": true }, "node_modules/functions-have-names": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", - "dev": true, - "license": "MIT", "funding": { "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/generator-function": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/generator-function/-/generator-function-2.0.1.tgz", - "integrity": "sha512-SFdFmIJi+ybC0vjlHN0ZGVGHc3lgE0DxPAT0djjVg+kjOnSqclqmj0KQ7ykTOLP6YxoqOvuAODGdcHJn+43q3g==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - } - }, "node_modules/gensync": { "version": "1.0.0-beta.2", "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", "dev": true, - "license": "MIT", "engines": { "node": ">=6.9.0" } @@ -3798,7 +3655,6 @@ "version": "2.0.5", "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", - "license": "ISC", "engines": { "node": "6.* || 8.* || >= 10.*" } @@ -3808,7 +3664,6 @@ "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.2.tgz", "integrity": "sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==", "dev": true, - "license": "MIT", "engines": { "node": "*" } @@ -3841,7 +3696,6 @@ "version": "0.1.0", "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", - "license": "MIT", "engines": { "node": ">=8.0.0" } @@ -3850,7 +3704,6 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", - "license": "MIT", "dependencies": { "dunder-proto": "^1.0.1", "es-object-atoms": "^1.0.0" @@ -3864,7 +3717,6 @@ "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-8.0.0.tgz", "integrity": "sha512-sY22aA6xchAzprjyqmSEQv4UbAAzRN0L2dQB0NlN5acTTK9Don6nhoc3eAbUnpZiCANAMfd/+40kVdKfFygohg==", "dev": true, - "license": "MIT", "engines": { "node": ">=10" }, @@ -3876,8 +3728,6 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.1.0.tgz", "integrity": "sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg==", - "dev": true, - "license": "MIT", "dependencies": { "call-bound": "^1.0.3", "es-errors": "^1.3.0", @@ -3891,21 +3741,20 @@ } }, "node_modules/glob": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz", - "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==", - "deprecated": "Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me", - "dev": true, - "license": "ISC", + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "deprecated": "Glob versions prior to v9 are no longer supported", "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", "inherits": "2", - "minimatch": "^5.0.1", - "once": "^1.3.0" + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" }, "engines": { - "node": ">=12" + "node": "*" }, "funding": { "url": "https://github.com/sponsors/isaacs" @@ -3916,7 +3765,6 @@ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", "dev": true, - "license": "ISC", "dependencies": { "is-glob": "^4.0.3" }, @@ -3924,17 +3772,25 @@ "node": ">=10.13.0" } }, + "node_modules/glob/node_modules/brace-expansion": { + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", + "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, "node_modules/glob/node_modules/minimatch": { - "version": "5.1.9", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.9.tgz", - "integrity": "sha512-7o1wEA2RyMP7Iu7GNba9vc0RWWGACJOCZBJX2GJWip0ikV+wcOsgVuY9uE8CPiyQhkGFSlhuSkZPavN7u1c2Fw==", - "dev": true, - "license": "ISC", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dependencies": { - "brace-expansion": "^2.0.1" + "brace-expansion": "^1.1.7" }, "engines": { - "node": ">=10" + "node": "*" } }, "node_modules/global-modules": { @@ -3942,7 +3798,6 @@ "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-1.0.0.tgz", "integrity": "sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg==", "dev": true, - "license": "MIT", "dependencies": { "global-prefix": "^1.0.1", "is-windows": "^1.0.1", @@ -3957,7 +3812,6 @@ "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-1.0.2.tgz", "integrity": "sha512-5lsx1NUDHtSjfg0eHlmYvZKv8/nVqX4ckFbM+FrGcQ+04KWcWFo9P5MxPZYSzUvyzmdTbI7Eix8Q4IbELDqzKg==", "dev": true, - "license": "MIT", "dependencies": { "expand-tilde": "^2.0.2", "homedir-polyfill": "^1.0.1", @@ -3974,7 +3828,6 @@ "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", "dev": true, - "license": "ISC", "dependencies": { "isexe": "^2.0.0" }, @@ -3983,40 +3836,18 @@ } }, "node_modules/globals": { - "version": "13.24.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", - "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "type-fest": "^0.20.2" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/globals/node_modules/type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", "dev": true, - "license": "(MIT OR CC0-1.0)", "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=4" } }, "node_modules/globalthis": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.4.tgz", "integrity": "sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==", - "dev": true, - "license": "MIT", "dependencies": { "define-properties": "^1.2.1", "gopd": "^1.0.1" @@ -4032,7 +3863,6 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", - "license": "MIT", "engines": { "node": ">= 0.4" }, @@ -4044,28 +3874,24 @@ "version": "4.2.11", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", - "devOptional": true, - "license": "ISC" + "devOptional": true }, "node_modules/graphemer": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", - "dev": true, - "license": "MIT" + "dev": true }, "node_modules/growly": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/growly/-/growly-1.3.0.tgz", - "integrity": "sha512-+xGQY0YyAWCnqy7Cd++hc2JqMYzlm0dG30Jd0beaA64sROr8C4nt8Yc9V5Ro3avlSUDTN0ulqP/VBKi1/lLygw==", - "license": "MIT" + "integrity": "sha512-+xGQY0YyAWCnqy7Cd++hc2JqMYzlm0dG30Jd0beaA64sROr8C4nt8Yc9V5Ro3avlSUDTN0ulqP/VBKi1/lLygw==" }, "node_modules/has": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/has/-/has-1.0.4.tgz", "integrity": "sha512-qdSAmqLF6209RFj4VVItywPMbm3vWylknmB3nvNiUIs72xAimcM8nVYxYr7ncvZq5qzk9MKIZR8ijqD/1QuYjQ==", "dev": true, - "license": "MIT", "engines": { "node": ">= 0.4.0" } @@ -4074,8 +3900,6 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.1.0.tgz", "integrity": "sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg==", - "dev": true, - "license": "MIT", "engines": { "node": ">= 0.4" }, @@ -4087,7 +3911,6 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "license": "MIT", "engines": { "node": ">=8" } @@ -4096,8 +3919,6 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", - "dev": true, - "license": "MIT", "dependencies": { "es-define-property": "^1.0.0" }, @@ -4109,8 +3930,6 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.2.0.tgz", "integrity": "sha512-KIL7eQPfHQRC8+XluaIw7BHUwwqL19bQn4hzNgdr+1wXoU0KKj6rufu47lhY7KbJR2C6T6+PfyN0Ea7wkSS+qQ==", - "dev": true, - "license": "MIT", "dependencies": { "dunder-proto": "^1.0.0" }, @@ -4125,7 +3944,6 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", - "license": "MIT", "engines": { "node": ">= 0.4" }, @@ -4137,8 +3955,6 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", - "dev": true, - "license": "MIT", "dependencies": { "has-symbols": "^1.0.3" }, @@ -4154,7 +3970,6 @@ "resolved": "https://registry.npmjs.org/hasha/-/hasha-5.2.2.tgz", "integrity": "sha512-Hrp5vIK/xr5SkeN2onO32H0MgNZ0f17HRNH39WfL0SYUNOTZ5Lz1TJ8Pajo/87dYGEFlLMm7mIc/k/s6Bvz9HQ==", "dev": true, - "license": "MIT", "dependencies": { "is-stream": "^2.0.0", "type-fest": "^0.8.0" @@ -4170,7 +3985,6 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", - "license": "MIT", "dependencies": { "function-bind": "^1.1.2" }, @@ -4183,7 +3997,6 @@ "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", "dev": true, - "license": "MIT", "bin": { "he": "bin/he" } @@ -4192,7 +4005,6 @@ "version": "7.2.0", "resolved": "https://registry.npmjs.org/helmet/-/helmet-7.2.0.tgz", "integrity": "sha512-ZRiwvN089JfMXokizgqEPXsl2Guk094yExfoDXR0cBYWxtBbaSww/w+vT4WEJsBW2iTUi1GgZ6swmoug3Oy4Xw==", - "license": "MIT", "engines": { "node": ">=16.0.0" } @@ -4202,7 +4014,6 @@ "resolved": "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz", "integrity": "sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==", "dev": true, - "license": "MIT", "dependencies": { "parse-passwd": "^1.0.0" }, @@ -4214,46 +4025,27 @@ "version": "2.8.9", "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", - "dev": true, - "license": "ISC" + "dev": true }, "node_modules/html-escaper": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", - "dev": true, - "license": "MIT" + "dev": true }, "node_modules/http-errors": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.1.tgz", - "integrity": "sha512-4FbRdAX+bSdmo4AUFuS0WNiPz8NgFt+r8ThgNWmlrjQjt1Q7ZR9+zTlce2859x4KSXrwIsaeTqDoKQmtP8pLmQ==", - "license": "MIT", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", + "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", "dependencies": { - "depd": "~2.0.0", - "inherits": "~2.0.4", - "setprototypeof": "~1.2.0", - "statuses": "~2.0.2", - "toidentifier": "~1.0.1" + "depd": "2.0.0", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "toidentifier": "1.0.1" }, "engines": { "node": ">= 0.8" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/express" - } - }, - "node_modules/iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "license": "MIT", - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3" - }, - "engines": { - "node": ">=0.10.0" } }, "node_modules/ignore": { @@ -4261,17 +4053,15 @@ "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", "dev": true, - "license": "MIT", "engines": { "node": ">= 4" } }, "node_modules/import-fresh": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.1.tgz", - "integrity": "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==", + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", "dev": true, - "license": "MIT", "dependencies": { "parent-module": "^1.0.0", "resolve-from": "^4.0.0" @@ -4288,7 +4078,6 @@ "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", "dev": true, - "license": "MIT", "engines": { "node": ">=4" } @@ -4298,7 +4087,6 @@ "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.8.19" } @@ -4308,7 +4096,6 @@ "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", "dev": true, - "license": "MIT", "engines": { "node": ">=8" } @@ -4318,7 +4105,6 @@ "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.", - "license": "ISC", "dependencies": { "once": "^1.3.0", "wrappy": "1" @@ -4327,22 +4113,18 @@ "node_modules/inherits": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "license": "ISC" + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" }, "node_modules/ini": { "version": "1.3.8", "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", - "dev": true, - "license": "ISC" + "dev": true }, "node_modules/internal-slot": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.1.0.tgz", "integrity": "sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw==", - "dev": true, - "license": "MIT", "dependencies": { "es-errors": "^1.3.0", "hasown": "^2.0.2", @@ -4357,7 +4139,6 @@ "resolved": "https://registry.npmjs.org/ip-regex/-/ip-regex-2.1.0.tgz", "integrity": "sha512-58yWmlHpp7VYfcdTwMTvwMmqx/Elfxjd9RXTDyMsbL7lLWmhMylLEqiYVLKuLzOZqVgiWXD9MfR62Vv89VRxkw==", "dev": true, - "license": "MIT", "engines": { "node": ">=4" } @@ -4366,17 +4147,30 @@ "version": "1.9.1", "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", - "license": "MIT", "engines": { "node": ">= 0.10" } }, + "node_modules/is-arguments": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.2.0.tgz", + "integrity": "sha512-7bVbi0huj/wrIAOzb8U1aszg9kdi3KN/CyU19CTI7tAoZYEZoL9yCDXpbXN+uPsuWnP02cyug1gleqq+TU+YCA==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-array-buffer": { "version": "3.0.5", "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.5.tgz", "integrity": "sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A==", - "dev": true, - "license": "MIT", "dependencies": { "call-bind": "^1.0.8", "call-bound": "^1.0.3", @@ -4393,17 +4187,13 @@ "version": "0.2.1", "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", - "dev": true, - "license": "MIT" + "dev": true }, "node_modules/is-async-function": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-async-function/-/is-async-function-2.1.1.tgz", - "integrity": "sha512-9dgM/cZBnNvjzaMYHVoxxfPj2QXt22Ev7SuuPrs+xav0ukGB0S6d4ydZdEiM48kLx5kDV+QBPrpVnFyefL8kkQ==", - "dev": true, - "license": "MIT", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-async-function/-/is-async-function-2.1.0.tgz", + "integrity": "sha512-GExz9MtyhlZyXYLxzlJRj5WUCE661zhDa1Yna52CN57AJsymh+DvXXjyveSioqSRdxvUrdKdvqB1b5cVKsNpWQ==", "dependencies": { - "async-function": "^1.0.0", "call-bound": "^1.0.3", "get-proto": "^1.0.1", "has-tostringtag": "^1.0.2", @@ -4420,8 +4210,6 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.1.0.tgz", "integrity": "sha512-n4ZT37wG78iz03xPRKJrHTdZbe3IicyucEtdRsV5yglwc3GyUfbAfpSeD0FJ41NbUNSt5wbhqfp1fS+BgnvDFQ==", - "dev": true, - "license": "MIT", "dependencies": { "has-bigints": "^1.0.2" }, @@ -4437,7 +4225,6 @@ "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", "dev": true, - "license": "MIT", "dependencies": { "binary-extensions": "^2.0.0" }, @@ -4446,13 +4233,11 @@ } }, "node_modules/is-boolean-object": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.2.2.tgz", - "integrity": "sha512-wa56o2/ElJMYqjCjGkXri7it5FbebW5usLw/nPmCMs5DeZ7eziSYZhSmPRn0txqeW4LnAmQQU7FgqLpsEFKM4A==", - "dev": true, - "license": "MIT", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.2.1.tgz", + "integrity": "sha512-l9qO6eFlUETHtuihLcYOaLKByJ1f+N4kthcU9YjHy3N+B3hWv0y/2Nd0mu/7lTFnRQHTrSdXF50HQ3bl5fEnng==", "dependencies": { - "call-bound": "^1.0.3", + "call-bound": "^1.0.2", "has-tostringtag": "^1.0.2" }, "engines": { @@ -4466,8 +4251,6 @@ "version": "1.2.7", "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", - "dev": true, - "license": "MIT", "engines": { "node": ">= 0.4" }, @@ -4479,7 +4262,6 @@ "version": "2.16.1", "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz", "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==", - "license": "MIT", "dependencies": { "hasown": "^2.0.2" }, @@ -4494,8 +4276,6 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-data-view/-/is-data-view-1.0.2.tgz", "integrity": "sha512-RKtWF8pGmS87i2D6gqQu/l7EYRlVdfzemCJN/P3UOs//x1QE7mfhvzHIApBTRf7axvT6DMGwSwBXYCT0nfB9xw==", - "dev": true, - "license": "MIT", "dependencies": { "call-bound": "^1.0.2", "get-intrinsic": "^1.2.6", @@ -4512,8 +4292,6 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.1.0.tgz", "integrity": "sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg==", - "dev": true, - "license": "MIT", "dependencies": { "call-bound": "^1.0.2", "has-tostringtag": "^1.0.2" @@ -4529,7 +4307,6 @@ "version": "2.2.1", "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", - "license": "MIT", "bin": { "is-docker": "cli.js" }, @@ -4545,7 +4322,6 @@ "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -4554,8 +4330,6 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/is-finalizationregistry/-/is-finalizationregistry-1.1.1.tgz", "integrity": "sha512-1pC6N8qWJbWoPtEjgcL2xyhQOP491EQjeUo3qTKcmV8YSDDJrOepfG8pcC7h/QgnQHYSv0mJ3Z/ZWxmatVrysg==", - "dev": true, - "license": "MIT", "dependencies": { "call-bound": "^1.0.3" }, @@ -4570,21 +4344,17 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/is-generator-function": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.1.2.tgz", - "integrity": "sha512-upqt1SkGkODW9tsGNG5mtXTXtECizwtS2kA161M+gJPc1xdb/Ax629af6YrTwcOeQHbewrPNlE5Dx7kzvXTizA==", - "dev": true, - "license": "MIT", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.1.0.tgz", + "integrity": "sha512-nPUB5km40q9e8UfN/Zc24eLlzdSf9OfKByBw9CIdw4H1giPMeA0OIJvbchsCu4npfI2QcMVBsGEBHKZ7wLTWmQ==", "dependencies": { - "call-bound": "^1.0.4", - "generator-function": "^2.0.0", - "get-proto": "^1.0.1", + "call-bound": "^1.0.3", + "get-proto": "^1.0.0", "has-tostringtag": "^1.0.2", "safe-regex-test": "^1.1.0" }, @@ -4600,7 +4370,6 @@ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", "dev": true, - "license": "MIT", "dependencies": { "is-extglob": "^2.1.1" }, @@ -4613,7 +4382,6 @@ "resolved": "https://registry.npmjs.org/is-ip/-/is-ip-2.0.0.tgz", "integrity": "sha512-9MTn0dteHETtyUx8pxqMwg5hMBi3pvlyglJ+b79KOCca0po23337LbVV2Hl4xmMvfw++ljnO0/+5G6G+0Szh6g==", "dev": true, - "license": "MIT", "dependencies": { "ip-regex": "^2.0.0" }, @@ -4625,8 +4393,6 @@ "version": "2.0.3", "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.3.tgz", "integrity": "sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==", - "dev": true, - "license": "MIT", "engines": { "node": ">= 0.4" }, @@ -4638,7 +4404,6 @@ "version": "2.0.3", "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.3.tgz", "integrity": "sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==", - "dev": true, "license": "MIT", "engines": { "node": ">= 0.4" @@ -4652,7 +4417,6 @@ "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.12.0" } @@ -4661,8 +4425,6 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.1.1.tgz", "integrity": "sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw==", - "dev": true, - "license": "MIT", "dependencies": { "call-bound": "^1.0.3", "has-tostringtag": "^1.0.2" @@ -4679,7 +4441,6 @@ "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", "dev": true, - "license": "MIT", "engines": { "node": ">=8" } @@ -4689,7 +4450,6 @@ "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", "dev": true, - "license": "MIT", "engines": { "node": ">=8" } @@ -4698,8 +4458,6 @@ "version": "1.2.1", "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.2.1.tgz", "integrity": "sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==", - "dev": true, - "license": "MIT", "dependencies": { "call-bound": "^1.0.2", "gopd": "^1.2.0", @@ -4717,8 +4475,6 @@ "version": "2.0.3", "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.3.tgz", "integrity": "sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==", - "dev": true, - "license": "MIT", "engines": { "node": ">= 0.4" }, @@ -4730,8 +4486,6 @@ "version": "1.0.4", "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.4.tgz", "integrity": "sha512-ISWac8drv4ZGfwKl5slpHG9OwPNty4jOWPRIhBpxOoD+hqITiwuipOQ2bNthAzwA3B4fIjO4Nln74N0S9byq8A==", - "dev": true, - "license": "MIT", "dependencies": { "call-bound": "^1.0.3" }, @@ -4746,7 +4500,6 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", - "license": "MIT", "engines": { "node": ">=8" }, @@ -4758,8 +4511,6 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.1.1.tgz", "integrity": "sha512-BtEeSsoaQjlSPBemMQIrY1MY0uM6vnS1g5fmufYOtnxLGUZM2178PKbhsk7Ffv58IX+ZtcvoGwccYsh0PglkAA==", - "dev": true, - "license": "MIT", "dependencies": { "call-bound": "^1.0.3", "has-tostringtag": "^1.0.2" @@ -4775,8 +4526,6 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.1.1.tgz", "integrity": "sha512-9gGx6GTtCQM73BgmHQXfDmLtfjjTUDSyoxTCbp5WtoixAhfgsDirWIcVQ/IHpvI5Vgd5i/J5F7B9cN/WlVbC/w==", - "dev": true, - "license": "MIT", "dependencies": { "call-bound": "^1.0.2", "has-symbols": "^1.1.0", @@ -4793,8 +4542,6 @@ "version": "1.1.15", "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.15.tgz", "integrity": "sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==", - "dev": true, - "license": "MIT", "dependencies": { "which-typed-array": "^1.1.16" }, @@ -4809,15 +4556,13 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==", - "dev": true, - "license": "MIT" + "dev": true }, "node_modules/is-unicode-supported": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", "dev": true, - "license": "MIT", "engines": { "node": ">=10" }, @@ -4829,8 +4574,6 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.2.tgz", "integrity": "sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==", - "dev": true, - "license": "MIT", "engines": { "node": ">= 0.4" }, @@ -4842,7 +4585,6 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.1.1.tgz", "integrity": "sha512-6i9mGWSlqzNMEqpCp93KwRS1uUOodk2OJ6b+sq7ZPDSy2WuI5NFIxp/254TytR8ftefexkWn5xNiHUNpPOfSew==", - "dev": true, "license": "MIT", "dependencies": { "call-bound": "^1.0.3" @@ -4858,8 +4600,6 @@ "version": "2.0.4", "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.4.tgz", "integrity": "sha512-mfcwb6IzQyOKTs84CQMrOwW4gQcaTOAWJ0zzJCl2WSPDrWk/OzDaImWFH3djXhb24g4eudZfLRozAvPGw4d9hQ==", - "dev": true, - "license": "MIT", "dependencies": { "call-bound": "^1.0.3", "get-intrinsic": "^1.2.6" @@ -4876,7 +4616,6 @@ "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -4885,7 +4624,6 @@ "version": "2.2.0", "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", - "license": "MIT", "dependencies": { "is-docker": "^2.0.0" }, @@ -4896,22 +4634,18 @@ "node_modules/isarray": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", - "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", - "dev": true, - "license": "MIT" + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==" }, "node_modules/isexe": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "license": "ISC" + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" }, "node_modules/istanbul-lib-coverage": { "version": "3.2.2", "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz", "integrity": "sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==", "dev": true, - "license": "BSD-3-Clause", "engines": { "node": ">=8" } @@ -4921,7 +4655,6 @@ "resolved": "https://registry.npmjs.org/istanbul-lib-hook/-/istanbul-lib-hook-3.0.0.tgz", "integrity": "sha512-Pt/uge1Q9s+5VAZ+pCo16TYMWPBIl+oaNIjgLQxcX0itS6ueeaA+pEfThZpH8WxhFgCiEb8sAJY6MdUKgiIWaQ==", "dev": true, - "license": "BSD-3-Clause", "dependencies": { "append-transform": "^2.0.0" }, @@ -4934,7 +4667,6 @@ "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-4.0.3.tgz", "integrity": "sha512-BXgQl9kf4WTCPCCpmFGoJkz/+uhvm7h7PFKUYxh7qarQd3ER33vHG//qaE8eN25l07YqZPpHXU9I09l/RD5aGQ==", "dev": true, - "license": "BSD-3-Clause", "dependencies": { "@babel/core": "^7.7.5", "@istanbuljs/schema": "^0.1.2", @@ -4950,7 +4682,6 @@ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true, - "license": "ISC", "bin": { "semver": "bin/semver.js" } @@ -4960,7 +4691,6 @@ "resolved": "https://registry.npmjs.org/istanbul-lib-processinfo/-/istanbul-lib-processinfo-2.0.3.tgz", "integrity": "sha512-NkwHbo3E00oybX6NGJi6ar0B29vxyvNwoC7eJ4G4Yq28UfY758Hgn/heV8VRFhevPED4LXfFz0DQ8z/0kw9zMg==", "dev": true, - "license": "ISC", "dependencies": { "archy": "^1.0.0", "cross-spawn": "^7.0.3", @@ -4978,7 +4708,6 @@ "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz", "integrity": "sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==", "dev": true, - "license": "BSD-3-Clause", "dependencies": { "istanbul-lib-coverage": "^3.0.0", "make-dir": "^4.0.0", @@ -4993,7 +4722,6 @@ "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz", "integrity": "sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==", "dev": true, - "license": "MIT", "dependencies": { "semver": "^7.5.3" }, @@ -5009,7 +4737,6 @@ "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz", "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==", "dev": true, - "license": "BSD-3-Clause", "dependencies": { "debug": "^4.1.1", "istanbul-lib-coverage": "^3.0.0", @@ -5020,11 +4747,10 @@ } }, "node_modules/istanbul-reports": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.2.0.tgz", - "integrity": "sha512-HGYWWS/ehqTV3xN10i23tkPkpH46MLCIMFNCaaKNavAXTF1RkqxawEPtnjnGZ6XKSInBKkiOA5BKS+aZiY3AvA==", + "version": "3.1.7", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.7.tgz", + "integrity": "sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g==", "dev": true, - "license": "BSD-3-Clause", "dependencies": { "html-escaper": "^2.0.0", "istanbul-lib-report": "^3.0.0" @@ -5033,19 +4759,39 @@ "node": ">=8" } }, + "node_modules/iterate-iterator": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/iterate-iterator/-/iterate-iterator-1.0.2.tgz", + "integrity": "sha512-t91HubM4ZDQ70M9wqp+pcNpu8OyJ9UAtXntT/Bcsvp5tZMnz9vRa+IunKXeI8AnfZMTv0jNuVEmGeLSMjVvfPw==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/iterate-value": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/iterate-value/-/iterate-value-1.0.2.tgz", + "integrity": "sha512-A6fMAio4D2ot2r/TYzr4yUWrmwNdsN5xL7+HUiyACE4DXm+q8HtPcnFTp+NnW3k4N05tZ7FVYFFb2CR13NxyHQ==", + "license": "MIT", + "dependencies": { + "es-get-iterator": "^1.0.2", + "iterate-iterator": "^1.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/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, - "license": "MIT" + "dev": true }, "node_modules/js-yaml": { "version": "3.14.2", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.2.tgz", "integrity": "sha512-PMSmkqxr106Xa156c2M265Z+FTrPl+oxd/rgOQy2tijQeK5TxQ43psO1ZCwhVOSdnn+RzkzlRz/eY4BgJBYVpg==", "dev": true, - "license": "MIT", "dependencies": { "argparse": "^1.0.7", "esprima": "^4.0.0" @@ -5054,12 +4800,110 @@ "js-yaml": "bin/js-yaml.js" } }, + "node_modules/js2xmlparser": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/js2xmlparser/-/js2xmlparser-4.0.2.tgz", + "integrity": "sha512-6n4D8gLlLf1n5mNLQPRfViYzu9RATblzPEtm1SthMX1Pjao0r9YI9nw7ZIfRxQMERS87mcswrg+r/OYrPRX6jA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "xmlcreate": "^2.0.4" + } + }, + "node_modules/jsdoc": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/jsdoc/-/jsdoc-4.0.5.tgz", + "integrity": "sha512-P4C6MWP9yIlMiK8nwoZvxN84vb6MsnXcHuy7XzVOvQoCizWX5JFCBsWIIWKXBltpoRZXddUOVQmCTOZt9yDj9g==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@babel/parser": "^7.20.15", + "@jsdoc/salty": "^0.2.1", + "@types/markdown-it": "^14.1.1", + "bluebird": "^3.7.2", + "catharsis": "^0.9.0", + "escape-string-regexp": "^2.0.0", + "js2xmlparser": "^4.0.2", + "klaw": "^3.0.0", + "markdown-it": "^14.1.0", + "markdown-it-anchor": "^8.6.7", + "marked": "^4.0.10", + "mkdirp": "^1.0.4", + "requizzle": "^0.2.3", + "strip-json-comments": "^3.1.0", + "underscore": "~1.13.2" + }, + "bin": { + "jsdoc": "jsdoc.js" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/jsdoc/node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true, + "license": "Python-2.0" + }, + "node_modules/jsdoc/node_modules/escape-string-regexp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", + "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/jsdoc/node_modules/linkify-it": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-5.0.0.tgz", + "integrity": "sha512-5aHCbzQRADcdP+ATqnDuhhJ/MRIqDkZX5pyjFHRRysS8vZ5AbqGEoFIb6pYHPZ+L/OC2Lc+xT8uHVVR5CAK/wQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "uc.micro": "^2.0.0" + } + }, + "node_modules/jsdoc/node_modules/markdown-it": { + "version": "14.1.0", + "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-14.1.0.tgz", + "integrity": "sha512-a54IwgWPaeBCAAsv13YgmALOF1elABB08FxO9i+r4VFk5Vl4pKokRPeX8u5TCgSsPi6ec1otfLjdOpVcgbpshg==", + "dev": true, + "license": "MIT", + "dependencies": { + "argparse": "^2.0.1", + "entities": "^4.4.0", + "linkify-it": "^5.0.0", + "mdurl": "^2.0.0", + "punycode.js": "^2.3.1", + "uc.micro": "^2.1.0" + }, + "bin": { + "markdown-it": "bin/markdown-it.mjs" + } + }, + "node_modules/jsdoc/node_modules/mdurl": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-2.0.0.tgz", + "integrity": "sha512-Lf+9+2r+Tdp5wXDXC4PcIBjTDtq4UKjCPMQhKIuzpJNW0b96kVqSwW0bT7FhRSfmAiFYgP+SCRvdrDozfh0U5w==", + "dev": true, + "license": "MIT" + }, + "node_modules/jsdoc/node_modules/uc.micro": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-2.1.0.tgz", + "integrity": "sha512-ARDJmphmdvUk6Glw7y9DQ2bFkKBHwQHLi2lsaH6PPmz/Ka9sFOBsBluozhDltWmnv9u/cF6Rt87znRTPV+yp/A==", + "dev": true, + "license": "MIT" + }, "node_modules/jsesc": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz", "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==", "dev": true, - "license": "MIT", "bin": { "jsesc": "bin/jsesc" }, @@ -5071,41 +4915,35 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", - "dev": true, - "license": "MIT" + "dev": true }, "node_modules/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, - "license": "MIT" + "dev": true }, "node_modules/json-parse-even-better-errors": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", - "dev": true, - "license": "MIT" + "dev": true }, "node_modules/json-schema-traverse": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", - "license": "MIT" + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" }, "node_modules/json-stable-stringify-without-jsonify": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", - "dev": true, - "license": "MIT" + "dev": true }, "node_modules/json5": { "version": "2.2.3", "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", - "license": "MIT", "bin": { "json5": "lib/cli.js" }, @@ -5113,32 +4951,18 @@ "node": ">=6" } }, - "node_modules/jsonfile": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-5.0.0.tgz", - "integrity": "sha512-NQRZ5CRo74MhMMC3/3r5g2k4fjodJ/wh8MxjFbCViWKFjxrnudWSY5vomh+23ZaXzAS7J3fBZIR2dV6WbmfM0w==", - "license": "MIT", - "dependencies": { - "universalify": "^0.1.2" - }, - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, "node_modules/jsonparse": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz", "integrity": "sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==", "engines": [ "node >= 0.2.0" - ], - "license": "MIT" + ] }, "node_modules/jsonschema": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/jsonschema/-/jsonschema-1.5.0.tgz", - "integrity": "sha512-K+A9hhqbn0f3pJX17Q/7H6yQfD/5OXgdrR5UE12gMXCiN9D5Xq2o5mddV2QEcX/bjla99ASsAAQUyMCCRWAEhw==", - "license": "MIT", + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/jsonschema/-/jsonschema-1.4.1.tgz", + "integrity": "sha512-S6cATIPVv1z0IlxdN+zUk5EPjkGCdnhN4wVSBlvoUO1tOLJootbo9CquNJmbIh4yikWHiUedhRYrNPn1arpEmQ==", "engines": { "node": "*" } @@ -5147,7 +4971,6 @@ "version": "1.3.5", "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.5.tgz", "integrity": "sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==", - "license": "(MIT OR Apache-2.0)", "dependencies": { "jsonparse": "^1.2.0", "through": ">=2.2.7 <3" @@ -5164,7 +4987,6 @@ "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.5.tgz", "integrity": "sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==", "dev": true, - "license": "MIT", "dependencies": { "array-includes": "^3.1.6", "array.prototype.flat": "^1.3.1", @@ -5179,14 +5001,12 @@ "version": "6.2.0", "resolved": "https://registry.npmjs.org/just-extend/-/just-extend-6.2.0.tgz", "integrity": "sha512-cYofQu2Xpom82S6qD778jBDpwvvy39s1l/hrYij2u9AMdQcGRpaBu6kY4mVhuno5kJVi1DAz4aiphA2WI1/OAw==", - "dev": true, - "license": "MIT" + "dev": true }, "node_modules/kareem": { "version": "2.6.3", "resolved": "https://registry.npmjs.org/kareem/-/kareem-2.6.3.tgz", "integrity": "sha512-C3iHfuGUXK2u8/ipq9LfjFfXFxAZMQJJq7vLS45r3D9Y2xQ/m4S8zaR4zMLFWh9AsNPXmcFfUDhTEO8UIC/V6Q==", - "license": "Apache-2.0", "engines": { "node": ">=12.0.0" } @@ -5196,16 +5016,24 @@ "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", "dev": true, - "license": "MIT", "dependencies": { "json-buffer": "3.0.1" } }, + "node_modules/klaw": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/klaw/-/klaw-3.0.0.tgz", + "integrity": "sha512-0Fo5oir+O9jnXu5EefYbVK+mHMBeEVEy2cmctR1O1NECcCkPRreJKrS6Qt/j3KC2C148Dfo9i3pCmCMsdqGr0g==", + "dev": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.1.9" + } + }, "node_modules/kleur": { "version": "4.1.5", "resolved": "https://registry.npmjs.org/kleur/-/kleur-4.1.5.tgz", "integrity": "sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==", - "license": "MIT", "engines": { "node": ">=6" } @@ -5213,15 +5041,13 @@ "node_modules/kuler": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/kuler/-/kuler-2.0.0.tgz", - "integrity": "sha512-Xq9nH7KlWZmXAtodXDDRE7vs6DU1gTU8zYDHDiWLSip45Egwq3plLHzPn27NgvzL2r1LMPC1vdqh98sQxtqj4A==", - "license": "MIT" + "integrity": "sha512-Xq9nH7KlWZmXAtodXDDRE7vs6DU1gTU8zYDHDiWLSip45Egwq3plLHzPn27NgvzL2r1LMPC1vdqh98sQxtqj4A==" }, "node_modules/levn": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", "dev": true, - "license": "MIT", "dependencies": { "prelude-ls": "^1.2.1", "type-check": "~0.4.0" @@ -5234,15 +5060,23 @@ "version": "1.2.4", "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", + "dev": true + }, + "node_modules/linkify-it": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-3.0.3.tgz", + "integrity": "sha512-ynTsyrFSdE5oZ/O9GEf00kPngmOfVwazR5GKDq6EYfhlpFug3J2zybX56a2PRRpc9P+FuSoGNAwjlbDs9jJBPQ==", "dev": true, - "license": "MIT" + "peer": true, + "dependencies": { + "uc.micro": "^1.0.1" + } }, "node_modules/load-json-file": { "version": "5.3.0", "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-5.3.0.tgz", "integrity": "sha512-cJGP40Jc/VXUsp8/OrnyKyTZ1y6v/dphm3bioS+RrKXjK2BB6wHUd6JptZEFDGgGahMT+InnZO5i1Ei9mpC8Bw==", "dev": true, - "license": "MIT", "dependencies": { "graceful-fs": "^4.1.15", "parse-json": "^4.0.0", @@ -5259,7 +5093,6 @@ "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", "integrity": "sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw==", "dev": true, - "license": "MIT", "dependencies": { "error-ex": "^1.3.1", "json-parse-better-errors": "^1.0.1" @@ -5273,7 +5106,6 @@ "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", "dev": true, - "license": "MIT", "engines": { "node": ">=4" } @@ -5283,7 +5115,6 @@ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.3.1.tgz", "integrity": "sha512-cUGJnCdr4STbePCgqNFbpVNCepa+kAVohJs1sLhxzdH+gnEoOd8VhbYa7pD3zZYGiURWM2xzEII3fQcRizDkYQ==", "dev": true, - "license": "(MIT OR CC0-1.0)", "engines": { "node": ">=6" } @@ -5293,7 +5124,6 @@ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", "dev": true, - "license": "MIT", "dependencies": { "p-locate": "^5.0.0" }, @@ -5307,36 +5137,37 @@ "node_modules/lodash": { "version": "4.17.23", "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.23.tgz", - "integrity": "sha512-LgVTMpQtIopCi79SJeDiP0TfWi5CNEc/L/aRdTh3yIvmZXTnheWpKjSZhnvMl8iXbC1tFg9gdHHDMLoV7CnG+w==", - "license": "MIT" + "integrity": "sha512-LgVTMpQtIopCi79SJeDiP0TfWi5CNEc/L/aRdTh3yIvmZXTnheWpKjSZhnvMl8iXbC1tFg9gdHHDMLoV7CnG+w==" }, "node_modules/lodash.flattendeep": { "version": "4.4.0", "resolved": "https://registry.npmjs.org/lodash.flattendeep/-/lodash.flattendeep-4.4.0.tgz", "integrity": "sha512-uHaJFihxmJcEX3kT4I23ABqKKalJ/zDrDg0lsFtc1h+3uw49SIJ5beyhx5ExVRti3AvKoOJngIj7xz3oylPdWQ==", - "dev": true, - "license": "MIT" + "dev": true + }, + "node_modules/lodash.get": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz", + "integrity": "sha512-z+Uw/vLuy6gQe8cfaFWD7p0wVv8fJl3mbzXh33RS+0oW2wvUqiRXiQ69gLWSLpgB5/6sU+r6BlQR0MBILadqTQ==", + "dev": true }, "node_modules/lodash.merge": { "version": "4.6.2", "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", - "dev": true, - "license": "MIT" + "dev": true }, "node_modules/lodash.truncate": { "version": "4.4.2", "resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz", "integrity": "sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw==", - "dev": true, - "license": "MIT" + "dev": true }, "node_modules/log-symbols": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", "dev": true, - "license": "MIT", "dependencies": { "chalk": "^4.1.0", "is-unicode-supported": "^0.1.0" @@ -5352,7 +5183,6 @@ "version": "2.7.0", "resolved": "https://registry.npmjs.org/logform/-/logform-2.7.0.tgz", "integrity": "sha512-TFYA4jnP7PVbmlBIfhlSe+WKxs9dklXMTEGcBCIvLhE/Tn3H6Gk1norupVW7m5Cnd4bLcr08AytbyV/xj7f/kQ==", - "license": "MIT", "dependencies": { "@colors/colors": "1.6.0", "@types/triple-beam": "^1.3.2", @@ -5370,7 +5200,6 @@ "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", "dev": true, - "license": "MIT", "dependencies": { "js-tokens": "^3.0.0 || ^4.0.0" }, @@ -5383,7 +5212,6 @@ "resolved": "https://registry.npmjs.org/loupe/-/loupe-2.3.7.tgz", "integrity": "sha512-zSMINGVYkdpYSOBmLi0D1Uo7JU9nVdQKrHxC8eYlV+9YKK9WePqAlL7lSlorG/U2Fw1w0hTBmaa/jrQ3UbPHtA==", "dev": true, - "license": "MIT", "dependencies": { "get-func-name": "^2.0.1" } @@ -5393,28 +5221,25 @@ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", "dev": true, - "license": "ISC", "dependencies": { "yallist": "^3.0.2" } }, "node_modules/luxon": { - "version": "3.7.2", - "resolved": "https://registry.npmjs.org/luxon/-/luxon-3.7.2.tgz", - "integrity": "sha512-vtEhXh/gNjI9Yg1u4jX/0YVPMvxzHuGgCm6tC5kZyb08yjGWGnqAjGJvcXbqQR2P3MyMEFnRbpcdFS6PBcLqew==", - "license": "MIT", + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/luxon/-/luxon-3.5.0.tgz", + "integrity": "sha512-rh+Zjr6DNfUYR3bPwJEnuwDdqMbxZW7LOQfUN4B54+Cl+0o5zaU9RJ6bcidfDtC1cWCZXQ+nvX8bf6bAji37QQ==", "engines": { "node": ">=12" } }, "node_modules/magic-string": { - "version": "0.30.21", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.21.tgz", - "integrity": "sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==", + "version": "0.30.17", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.17.tgz", + "integrity": "sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA==", "dev": true, - "license": "MIT", "dependencies": { - "@jridgewell/sourcemap-codec": "^1.5.5" + "@jridgewell/sourcemap-codec": "^1.5.0" } }, "node_modules/make-dir": { @@ -5422,7 +5247,6 @@ "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", "dev": true, - "license": "MIT", "dependencies": { "semver": "^6.0.0" }, @@ -5438,25 +5262,87 @@ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true, - "license": "ISC", "bin": { "semver": "bin/semver.js" } }, + "node_modules/markdown-it": { + "version": "12.3.2", + "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-12.3.2.tgz", + "integrity": "sha512-TchMembfxfNVpHkbtriWltGWc+m3xszaRD0CZup7GFFhzIgQqxIfn3eGj1yZpfuflzPvfkt611B2Q/Bsk1YnGg==", + "dev": true, + "peer": true, + "dependencies": { + "argparse": "^2.0.1", + "entities": "~2.1.0", + "linkify-it": "^3.0.1", + "mdurl": "^1.0.1", + "uc.micro": "^1.0.5" + }, + "bin": { + "markdown-it": "bin/markdown-it.js" + } + }, + "node_modules/markdown-it-anchor": { + "version": "8.6.7", + "resolved": "https://registry.npmjs.org/markdown-it-anchor/-/markdown-it-anchor-8.6.7.tgz", + "integrity": "sha512-FlCHFwNnutLgVTflOYHPW2pPcl2AACqVzExlkGQNsi4CJgqOHN7YTgDd4LuhgN1BFO3TS0vLAruV1Td6dwWPJA==", + "dev": true, + "license": "Unlicense", + "peerDependencies": { + "@types/markdown-it": "*", + "markdown-it": "*" + } + }, + "node_modules/markdown-it/node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true, + "peer": true + }, + "node_modules/markdown-it/node_modules/entities": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.1.0.tgz", + "integrity": "sha512-hCx1oky9PFrJ611mf0ifBLBRW8lUUVRlFolb5gWRfIELabBlbp9xZvrqZLZAs+NxFnbfQoeGd8wDkygjg7U85w==", + "dev": true, + "peer": true, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/marked": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/marked/-/marked-4.3.0.tgz", + "integrity": "sha512-PRsaiG84bK+AMvxziE/lCFss8juXjNaWzVbN5tXAm4XjeaS9NAHhop+PjQxz2A9h8Q4M/xGmzP8vqNwy6JeK0A==", + "dev": true, + "license": "MIT", + "bin": { + "marked": "bin/marked.js" + }, + "engines": { + "node": ">= 12" + } + }, "node_modules/math-intrinsics": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", - "license": "MIT", "engines": { "node": ">= 0.4" } }, + "node_modules/mdurl": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-1.0.1.tgz", + "integrity": "sha512-/sKlQJCBYVY9Ers9hqzKou4H6V5UWc/M59TH2dvkt+84itfnq7uFOMLpOiOS4ujvHP4etln18fmIxA5R5fll0g==", + "dev": true, + "peer": true + }, "node_modules/media-typer": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", - "license": "MIT", "engines": { "node": ">= 0.6" } @@ -5464,14 +5350,12 @@ "node_modules/memory-pager": { "version": "1.5.0", "resolved": "https://registry.npmjs.org/memory-pager/-/memory-pager-1.5.0.tgz", - "integrity": "sha512-ZS4Bp4r/Zoeq6+NLJpP+0Zzm0pR8whtGPf1XExKLJBAczGMnSi3It14OiNCStjQjM6NU1okjQGSxgEZN8eBYKg==", - "license": "MIT" + "integrity": "sha512-ZS4Bp4r/Zoeq6+NLJpP+0Zzm0pR8whtGPf1XExKLJBAczGMnSi3It14OiNCStjQjM6NU1okjQGSxgEZN8eBYKg==" }, "node_modules/merge-descriptors": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.3.tgz", "integrity": "sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ==", - "license": "MIT", "funding": { "url": "https://github.com/sponsors/sindresorhus" } @@ -5480,7 +5364,6 @@ "version": "1.1.2", "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", - "license": "MIT", "engines": { "node": ">= 0.6" } @@ -5490,7 +5373,6 @@ "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", "dev": true, - "license": "MIT", "dependencies": { "braces": "^3.0.3", "picomatch": "^2.3.1" @@ -5503,7 +5385,6 @@ "version": "1.6.0", "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", - "license": "MIT", "bin": { "mime": "cli.js" }, @@ -5515,7 +5396,6 @@ "version": "1.52.0", "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", - "license": "MIT", "engines": { "node": ">= 0.6" } @@ -5524,7 +5404,6 @@ "version": "2.1.35", "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "license": "MIT", "dependencies": { "mime-db": "1.52.0" }, @@ -5533,13 +5412,12 @@ } }, "node_modules/minimatch": { - "version": "7.4.9", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-7.4.9.tgz", - "integrity": "sha512-Brg/fp/iAVDOQoHxkuN5bEYhyQlZhxddI78yWsCbeEwTHXQjlNLtiJDUsp1GIptVqMI7/gkJMz4vVAc01mpoBw==", + "version": "7.4.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-7.4.6.tgz", + "integrity": "sha512-sBz8G/YjVniEz6lKPNpKxXwazJe4c19fEfV2GDMX6AjFz+MX9uDWIZW8XreVhkFW3fkIdTv/gxWr/Kks5FFAVw==", "dev": true, - "license": "ISC", "dependencies": { - "brace-expansion": "^2.0.2" + "brace-expansion": "^2.0.1" }, "engines": { "node": ">=10" @@ -5552,17 +5430,28 @@ "version": "1.2.8", "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", - "license": "MIT", "funding": { "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "dev": true, + "license": "MIT", + "bin": { + "mkdirp": "bin/cmd.js" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/mocha": { "version": "10.8.2", "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.8.2.tgz", "integrity": "sha512-VZlYo/WE8t1tstuRmqgeyBgCbJc/lEdopaa+axcKzTBJ+UIdlAB9XnmvTCAH4pwR4ElNInaedhEBmZD8iCSVEg==", "dev": true, - "license": "MIT", "dependencies": { "ansi-colors": "^4.1.3", "browser-stdout": "^1.3.1", @@ -5597,15 +5486,33 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, + "node_modules/mocha/node_modules/glob": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz", + "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==", + "deprecated": "Glob versions prior to v9 are no longer supported", "dev": true, - "license": "Python-2.0" + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^5.0.1", + "once": "^1.3.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } }, "node_modules/mocha/node_modules/js-yaml": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.1.tgz", "integrity": "sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==", "dev": true, - "license": "MIT", "dependencies": { "argparse": "^2.0.1" }, @@ -5614,11 +5521,10 @@ } }, "node_modules/mocha/node_modules/minimatch": { - "version": "5.1.9", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.9.tgz", - "integrity": "sha512-7o1wEA2RyMP7Iu7GNba9vc0RWWGACJOCZBJX2GJWip0ikV+wcOsgVuY9uE8CPiyQhkGFSlhuSkZPavN7u1c2Fw==", + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", "dev": true, - "license": "ISC", "dependencies": { "brace-expansion": "^2.0.1" }, @@ -5626,12 +5532,21 @@ "node": ">=10" } }, + "node_modules/mocha/node_modules/serialize-javascript": { + "version": "7.0.5", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-7.0.5.tgz", + "integrity": "sha512-F4LcB0UqUl1zErq+1nYEEzSHJnIwb3AF2XWB94b+afhrekOUijwooAYqFyRbjYkm2PAKBabx6oYv/xDxNi8IBw==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=20.0.0" + } + }, "node_modules/mocha/node_modules/supports-color": { "version": "8.1.1", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", "dev": true, - "license": "MIT", "dependencies": { "has-flag": "^4.0.0" }, @@ -5646,7 +5561,6 @@ "version": "8.1.3", "resolved": "https://registry.npmjs.org/mongo-cursor-pagination/-/mongo-cursor-pagination-8.1.3.tgz", "integrity": "sha512-fJ2InDztQ+BL3r9/j107bYpnTdJ5xyC4PkiFhoiVo+Y2ZLsEAgwPHzzwzp3phHMaBtiMCeabMxJRJXCqai+KIg==", - "license": "MIT", "dependencies": { "base64-url": "^2.2.0", "bson": "^4.7.0", @@ -5663,20 +5577,18 @@ "version": "5.7.2", "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", - "license": "ISC", "bin": { "semver": "bin/semver" } }, "node_modules/mongodb": { - "version": "6.20.0", - "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-6.20.0.tgz", - "integrity": "sha512-Tl6MEIU3K4Rq3TSHd+sZQqRBoGlFsOgNrH5ltAcFBV62Re3Fd+FcaVf8uSEQFOJ51SDowDVttBTONMfoYWrWlQ==", - "license": "Apache-2.0", + "version": "6.12.0", + "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-6.12.0.tgz", + "integrity": "sha512-RM7AHlvYfS7jv7+BXund/kR64DryVI+cHbVAy9P61fnb1RcWZqOW1/Wj2YhqMCx+MuYhqTRGv7AwHBzmsCKBfA==", "dependencies": { - "@mongodb-js/saslprep": "^1.3.0", - "bson": "^6.10.4", - "mongodb-connection-string-url": "^3.0.2" + "@mongodb-js/saslprep": "^1.1.9", + "bson": "^6.10.1", + "mongodb-connection-string-url": "^3.0.0" }, "engines": { "node": ">=16.20.1" @@ -5687,7 +5599,7 @@ "gcp-metadata": "^5.2.0", "kerberos": "^2.0.1", "mongodb-client-encryption": ">=6.0.0 <7", - "snappy": "^7.3.2", + "snappy": "^7.2.2", "socks": "^2.7.1" }, "peerDependenciesMeta": { @@ -5715,24 +5627,22 @@ } }, "node_modules/mongodb-connection-string-url": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/mongodb-connection-string-url/-/mongodb-connection-string-url-3.0.2.tgz", - "integrity": "sha512-rMO7CGo/9BFwyZABcKAWL8UJwH/Kc2x0g72uhDWzG48URRax5TCIcJ7Rc3RZqffZzO/Gwff/jyKwCU9TN8gehA==", - "license": "Apache-2.0", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/mongodb-connection-string-url/-/mongodb-connection-string-url-3.0.1.tgz", + "integrity": "sha512-XqMGwRX0Lgn05TDB4PyG2h2kKO/FfWJyCzYQbIhXUxz7ETt0I/FqHjUeqj37irJ+Dl1ZtU82uYyj14u2XsZKfg==", "dependencies": { "@types/whatwg-url": "^11.0.2", - "whatwg-url": "^14.1.0 || ^13.0.0" + "whatwg-url": "^13.0.0" } }, "node_modules/mongoose": { - "version": "8.23.0", - "resolved": "https://registry.npmjs.org/mongoose/-/mongoose-8.23.0.tgz", - "integrity": "sha512-Bul4Ha6J8IqzFrb0B1xpVzkC3S0sk43dmLSnhFOn8eJlZiLwL5WO6cRymmjaADdCMjUcCpj2ce8hZI6O4ZFSug==", - "license": "MIT", + "version": "8.9.5", + "resolved": "https://registry.npmjs.org/mongoose/-/mongoose-8.9.5.tgz", + "integrity": "sha512-SPhOrgBm0nKV3b+IIHGqpUTOmgVL5Z3OO9AwkFEmvOZznXTvplbomstCnPOGAyungtRXE5pJTgKpKcZTdjeESg==", "dependencies": { - "bson": "^6.10.4", + "bson": "^6.10.1", "kareem": "2.6.3", - "mongodb": "~6.20.0", + "mongodb": "~6.12.0", "mpath": "0.9.0", "mquery": "5.0.0", "ms": "2.1.3", @@ -5750,7 +5660,6 @@ "version": "1.0.6", "resolved": "https://registry.npmjs.org/mongoose-aggregate-paginate-v2/-/mongoose-aggregate-paginate-v2-1.0.6.tgz", "integrity": "sha512-UuALu+mjhQa1K9lMQvjLL3vm3iALvNw8PQNIh2gp1b+tO5hUa0NC0Wf6/8QrT9PSJVTihXaD8hQVy3J4e0jO0Q==", - "license": "MIT", "engines": { "node": ">=4.0.0" } @@ -5775,7 +5684,6 @@ "version": "2.6.9", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "license": "MIT", "dependencies": { "ms": "2.0.0" } @@ -5783,14 +5691,12 @@ "node_modules/morgan/node_modules/ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "license": "MIT" + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" }, "node_modules/morgan/node_modules/on-finished": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", "integrity": "sha512-ikqdkGAAyf/X/gPhXGvfgAytDZtDbr+bkNUJ0N9h5MI/dmdgCs3l6hoHrcUv41sRKew3jIwrp4qQDXiK99Utww==", - "license": "MIT", "dependencies": { "ee-first": "1.1.1" }, @@ -5802,7 +5708,6 @@ "version": "0.9.0", "resolved": "https://registry.npmjs.org/mpath/-/mpath-0.9.0.tgz", "integrity": "sha512-ikJRQTk8hw5DEoFVxHG1Gn9T/xcjtdnOKIU1JTmGjZZlg9LST2mBLmcX3/ICIbgJydT2GOc15RnNy5mHmzfSew==", - "license": "MIT", "engines": { "node": ">=4.0.0" } @@ -5811,7 +5716,6 @@ "version": "5.0.0", "resolved": "https://registry.npmjs.org/mquery/-/mquery-5.0.0.tgz", "integrity": "sha512-iQMncpmEK8R8ncT8HJGsGc9Dsp8xcgYMVSbs5jgnm1lFHTZqMJTUWTDx1LBO8+mK3tPNZWFLBghQEIOULSTHZg==", - "license": "MIT", "dependencies": { "debug": "4.x" }, @@ -5822,15 +5726,13 @@ "node_modules/ms": { "version": "2.1.3", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "license": "MIT" + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" }, "node_modules/multimatch": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/multimatch/-/multimatch-5.0.0.tgz", "integrity": "sha512-ypMKuglUrZUD99Tk2bUQ+xNQj43lPEfAeX2o9cTteAmShXy2VHDJpuwu1o0xqoKCt9jLVAvwyFKdLTPXKAfJyA==", "dev": true, - "license": "MIT", "dependencies": { "@types/minimatch": "^3.0.3", "array-differ": "^3.0.0", @@ -5857,11 +5759,10 @@ } }, "node_modules/multimatch/node_modules/minimatch": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz", - "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, - "license": "ISC", "dependencies": { "brace-expansion": "^1.1.7" }, @@ -5870,9 +5771,9 @@ } }, "node_modules/nanoid": { - "version": "3.3.11", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz", - "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==", + "version": "3.3.8", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.8.tgz", + "integrity": "sha512-WNLf5Sd8oZxOm+TzppcYk8gVOgP+l58xNy58D0nbUnOxOWRWvlcCV4kUF7ltmI6PsrLl/BgKEyS4mqsGChFN0w==", "dev": true, "funding": [ { @@ -5880,7 +5781,6 @@ "url": "https://github.com/sponsors/ai" } ], - "license": "MIT", "bin": { "nanoid": "bin/nanoid.cjs" }, @@ -5892,14 +5792,12 @@ "version": "1.4.0", "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", - "dev": true, - "license": "MIT" + "dev": true }, "node_modules/negotiator": { "version": "0.6.3", "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", - "license": "MIT", "engines": { "node": ">= 0.6" } @@ -5909,7 +5807,6 @@ "resolved": "https://registry.npmjs.org/nise/-/nise-5.1.9.tgz", "integrity": "sha512-qOnoujW4SV6e40dYxJOb3uvuoPHtmLzIk4TFo+j0jPJoC+5Z9xja5qH5JZobEPsa8+YYphMrOSwnrshEhG2qww==", "dev": true, - "license": "BSD-3-Clause", "dependencies": { "@sinonjs/commons": "^3.0.0", "@sinonjs/fake-timers": "^11.2.2", @@ -5923,7 +5820,6 @@ "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-11.3.1.tgz", "integrity": "sha512-EVJO7nW5M/F5Tur0Rf2z/QoMo+1Ia963RiMtapiQrEWvY0iBUvADo8Beegwjpnle5BHkyHuoxSTW3jF43H1XRA==", "dev": true, - "license": "BSD-3-Clause", "dependencies": { "@sinonjs/commons": "^3.0.1" } @@ -5932,14 +5828,12 @@ "version": "6.3.0", "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-6.3.0.tgz", "integrity": "sha512-Yhpw4T9C6hPpgPeA28us07OJeqZ5EzQTkbfwuhsUg0c237RomFoETJgmp2sa3F/41gfLE6G5cqcYwznmeEeOlQ==", - "dev": true, - "license": "MIT" + "dev": true }, "node_modules/node-addon-api": { - "version": "8.6.0", - "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-8.6.0.tgz", - "integrity": "sha512-gBVjCaqDlRUk0EwoPNKzIr9KkS9041G/q31IBShPs1Xz6UTA+EXdZADbzqAJQrpDRq71CIMnOP5VMut3SL0z5Q==", - "license": "MIT", + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-8.3.0.tgz", + "integrity": "sha512-8VOpLHFrOQlAH+qA0ZzuGRlALRA6/LVh8QJldbrC4DY0hXoMP0l4Acq8TzFC018HztWiRqyCEj2aTWY2UvnJUg==", "engines": { "node": "^18 || ^20 || >= 21" } @@ -5948,7 +5842,6 @@ "version": "7.4.3", "resolved": "https://registry.npmjs.org/node-dev/-/node-dev-7.4.3.tgz", "integrity": "sha512-o8aYipN28xY+WEunMHHiNc3hpPSkGG8ulHyYBapNbkg4dQxohmhx6jiRbiFhTF6zy+5IwljUGv1EcuxsaWI4Bw==", - "license": "MIT", "dependencies": { "dateformat": "^3.0.3", "dynamic-dedupe": "^0.3.0", @@ -5966,40 +5859,10 @@ "node": ">=12" } }, - "node_modules/node-exports-info": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/node-exports-info/-/node-exports-info-1.6.0.tgz", - "integrity": "sha512-pyFS63ptit/P5WqUkt+UUfe+4oevH+bFeIiPPdfb0pFeYEu/1ELnJu5l+5EcTKYL5M7zaAa7S8ddywgXypqKCw==", - "dev": true, - "license": "MIT", - "dependencies": { - "array.prototype.flatmap": "^1.3.3", - "es-errors": "^1.3.0", - "object.entries": "^1.1.9", - "semver": "^6.3.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/node-exports-info/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - } - }, "node_modules/node-gyp-build": { "version": "4.8.4", "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.8.4.tgz", "integrity": "sha512-LA4ZjwlnUblHVgq0oBF3Jl/6h/Nvs5fzBLwdEF4nuxnFdsfajde4WfxtJr3CaiH+F6ewcIB/q4jQ4UzPyid+CQ==", - "license": "MIT", "bin": { "node-gyp-build": "bin.js", "node-gyp-build-optional": "optional.js", @@ -6010,7 +5873,6 @@ "version": "8.0.2", "resolved": "https://registry.npmjs.org/node-notifier/-/node-notifier-8.0.2.tgz", "integrity": "sha512-oJP/9NAdd9+x2Q+rfphB2RJCHjod70RcRLjosiPMMu5gjIfwVnOUGq2nbTjTUbmy0DJ/tFIVT30+Qe3nzl4TJg==", - "license": "MIT", "dependencies": { "growly": "^1.3.0", "is-wsl": "^2.2.0", @@ -6025,7 +5887,6 @@ "resolved": "https://registry.npmjs.org/node-preload/-/node-preload-0.2.1.tgz", "integrity": "sha512-RM5oyBy45cLEoHqCeh+MNuFAxO0vTFBLskvQbOKnEE7YTTSN4tbN8QWDIPQ6L+WvKsB/qLEGpYe2ZZ9d4W9OIQ==", "dev": true, - "license": "MIT", "dependencies": { "process-on-spawn": "^1.0.0" }, @@ -6034,18 +5895,16 @@ } }, "node_modules/node-releases": { - "version": "2.0.36", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.36.tgz", - "integrity": "sha512-TdC8FSgHz8Mwtw9g5L4gR/Sh9XhSP/0DEkQxfEFXOpiul5IiHgHan2VhYYb6agDSfp4KuvltmGApc8HMgUrIkA==", - "dev": true, - "license": "MIT" + "version": "2.0.19", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.19.tgz", + "integrity": "sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==", + "dev": true }, "node_modules/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, - "license": "BSD-2-Clause", "dependencies": { "hosted-git-info": "^2.1.4", "resolve": "^1.10.0", @@ -6058,7 +5917,6 @@ "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", "dev": true, - "license": "ISC", "bin": { "semver": "bin/semver" } @@ -6068,7 +5926,6 @@ "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -6078,7 +5935,6 @@ "resolved": "https://registry.npmjs.org/nyc/-/nyc-15.1.0.tgz", "integrity": "sha512-jMW04n9SxKdKi1ZMGhvUTHBN0EICCRkHemEoE5jm6mTYcqcdas0ATzgUgejlQUHMvpnOZqGB5Xxsv9KxJW1j8A==", "dev": true, - "license": "ISC", "dependencies": { "@istanbuljs/load-nyc-config": "^1.0.0", "@istanbuljs/schema": "^0.1.2", @@ -6115,23 +5971,11 @@ "node": ">=8.9" } }, - "node_modules/nyc/node_modules/brace-expansion": { - "version": "1.1.12", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", - "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, "node_modules/nyc/node_modules/camelcase": { "version": "5.3.1", "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", "dev": true, - "license": "MIT", "engines": { "node": ">=6" } @@ -6141,7 +5985,6 @@ "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", "dev": true, - "license": "ISC", "dependencies": { "string-width": "^4.2.0", "strip-ansi": "^6.0.0", @@ -6153,7 +5996,6 @@ "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", "dev": true, - "license": "MIT", "dependencies": { "locate-path": "^5.0.0", "path-exists": "^4.0.0" @@ -6162,34 +6004,11 @@ "node": ">=8" } }, - "node_modules/nyc/node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "deprecated": "Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me", - "dev": true, - "license": "ISC", - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, "node_modules/nyc/node_modules/locate-path": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", "dev": true, - "license": "MIT", "dependencies": { "p-locate": "^4.1.0" }, @@ -6197,25 +6016,11 @@ "node": ">=8" } }, - "node_modules/nyc/node_modules/minimatch": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz", - "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, "node_modules/nyc/node_modules/p-limit": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", "dev": true, - "license": "MIT", "dependencies": { "p-try": "^2.0.0" }, @@ -6231,7 +6036,6 @@ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", "dev": true, - "license": "MIT", "dependencies": { "p-limit": "^2.2.0" }, @@ -6244,7 +6048,6 @@ "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", "dev": true, - "license": "MIT", "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", @@ -6258,15 +6061,13 @@ "version": "4.0.3", "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", - "dev": true, - "license": "ISC" + "dev": true }, "node_modules/nyc/node_modules/yargs": { "version": "15.4.1", "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz", "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==", "dev": true, - "license": "MIT", "dependencies": { "cliui": "^6.0.0", "decamelize": "^1.2.0", @@ -6289,7 +6090,6 @@ "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", "dev": true, - "license": "ISC", "dependencies": { "camelcase": "^5.0.0", "decamelize": "^1.2.0" @@ -6302,7 +6102,6 @@ "version": "4.1.1", "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", - "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -6323,8 +6122,6 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", - "dev": true, - "license": "MIT", "engines": { "node": ">= 0.4" } @@ -6333,7 +6130,6 @@ "version": "0.11.8", "resolved": "https://registry.npmjs.org/object-path/-/object-path-0.11.8.tgz", "integrity": "sha512-YJjNZrlXJFM42wTBn6zgOJVar9KFJvzx6sTWDte8sWZF//cnjl0BxHNpfZx+ZffXX63A9q0b1zsFiBX4g4X5KA==", - "license": "MIT", "engines": { "node": ">= 10.12.0" } @@ -6342,8 +6138,6 @@ "version": "4.1.7", "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.7.tgz", "integrity": "sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw==", - "dev": true, - "license": "MIT", "dependencies": { "call-bind": "^1.0.8", "call-bound": "^1.0.3", @@ -6360,16 +6154,13 @@ } }, "node_modules/object.entries": { - "version": "1.1.9", - "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.9.tgz", - "integrity": "sha512-8u/hfXFRBD1O0hPUjioLhoWFHRmt6tKA4/vZPyckBr18l1KE9uHrFaFaUi8MDRTpi4uak2goyPTSNJLXX2k2Hw==", - "dev": true, - "license": "MIT", + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.8.tgz", + "integrity": "sha512-cmopxi8VwRIAw/fkijJohSfpef5PdN0pMQJN6VC/ZKvn0LIknWD8KtgY6KlQdEc4tIjcQ3HxSMmnvtzIscdaYQ==", "dependencies": { - "call-bind": "^1.0.8", - "call-bound": "^1.0.4", + "call-bind": "^1.0.7", "define-properties": "^1.2.1", - "es-object-atoms": "^1.1.1" + "es-object-atoms": "^1.0.0" }, "engines": { "node": ">= 0.4" @@ -6380,7 +6171,6 @@ "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.8.tgz", "integrity": "sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==", "dev": true, - "license": "MIT", "dependencies": { "call-bind": "^1.0.7", "define-properties": "^1.2.1", @@ -6399,7 +6189,6 @@ "resolved": "https://registry.npmjs.org/object.groupby/-/object.groupby-1.0.3.tgz", "integrity": "sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ==", "dev": true, - "license": "MIT", "dependencies": { "call-bind": "^1.0.7", "define-properties": "^1.2.1", @@ -6414,7 +6203,6 @@ "resolved": "https://registry.npmjs.org/object.hasown/-/object.hasown-1.1.4.tgz", "integrity": "sha512-FZ9LZt9/RHzGySlBARE3VF+gE26TxR38SdmqOqliuTnl9wrKulaQs+4dee1V+Io8VfxqzAfHu6YuRgUy8OHoTg==", "dev": true, - "license": "MIT", "dependencies": { "define-properties": "^1.2.1", "es-abstract": "^1.23.2", @@ -6432,7 +6220,6 @@ "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.2.1.tgz", "integrity": "sha512-gXah6aZrcUxjWg2zR2MwouP2eHlCBzdV4pygudehaKXSGW4v2AsRQUK+lwwXhii6KFZcunEnmSUoYp5CXibxtA==", "dev": true, - "license": "MIT", "dependencies": { "call-bind": "^1.0.8", "call-bound": "^1.0.3", @@ -6450,7 +6237,6 @@ "version": "2.4.1", "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", - "license": "MIT", "dependencies": { "ee-first": "1.1.1" }, @@ -6471,7 +6257,6 @@ "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", - "license": "ISC", "dependencies": { "wrappy": "1" } @@ -6480,7 +6265,6 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/one-time/-/one-time-1.0.0.tgz", "integrity": "sha512-5DXOiRKwuSEcQ/l0kGCF6Q3jcADFv5tSmRaJck/OqkVFcOzutB134KRSfF0xDrL39MNnqxbHBbUUcjZIhTgb2g==", - "license": "MIT", "dependencies": { "fn.name": "1.x.x" } @@ -6490,7 +6274,6 @@ "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", "dev": true, - "license": "MIT", "dependencies": { "deep-is": "^0.1.3", "fast-levenshtein": "^2.0.6", @@ -6507,8 +6290,6 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/own-keys/-/own-keys-1.0.1.tgz", "integrity": "sha512-qFOyK5PjiWZd+QQIh+1jhdb9LpxTF0qs7Pm8o5QHYZ0M3vKqSqzsZaEB6oWlxZ+q2sJBMI/Ktgd2N5ZwQoRHfg==", - "dev": true, - "license": "MIT", "dependencies": { "get-intrinsic": "^1.2.6", "object-keys": "^1.1.1", @@ -6526,7 +6307,6 @@ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", "dev": true, - "license": "MIT", "dependencies": { "yocto-queue": "^0.1.0" }, @@ -6542,7 +6322,6 @@ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", "dev": true, - "license": "MIT", "dependencies": { "p-limit": "^3.0.2" }, @@ -6558,7 +6337,6 @@ "resolved": "https://registry.npmjs.org/p-map/-/p-map-3.0.0.tgz", "integrity": "sha512-d3qXVTF/s+W+CdJ5A29wywV2n8CQQYahlgz2bFiA+4eVNJbHJodPZ+/gXwPGh0bOqA+j8S+6+ckmvLGPk1QpxQ==", "dev": true, - "license": "MIT", "dependencies": { "aggregate-error": "^3.0.0" }, @@ -6571,7 +6349,6 @@ "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", "dev": true, - "license": "MIT", "engines": { "node": ">=6" } @@ -6581,7 +6358,6 @@ "resolved": "https://registry.npmjs.org/package-hash/-/package-hash-4.0.0.tgz", "integrity": "sha512-whdkPIooSu/bASggZ96BWVvZTRMOFxnyUG5PnTSGKoJE2gd5mbVNmR2Nj20QFzxYYgAXpoqC+AiXzl+UMRh7zQ==", "dev": true, - "license": "ISC", "dependencies": { "graceful-fs": "^4.1.15", "hasha": "^5.0.0", @@ -6603,7 +6379,6 @@ "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", "dev": true, - "license": "MIT", "dependencies": { "callsites": "^3.0.0" }, @@ -6616,7 +6391,6 @@ "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", "dev": true, - "license": "MIT", "dependencies": { "@babel/code-frame": "^7.0.0", "error-ex": "^1.3.1", @@ -6635,7 +6409,6 @@ "resolved": "https://registry.npmjs.org/parse-passwd/-/parse-passwd-1.0.0.tgz", "integrity": "sha512-1Y1A//QUXEZK7YKz+rD9WydcE1+EuPr6ZBgKecAB8tmoW6UFv0NREVJe1p+jRxtThkcbbKkfwIbWJe/IeE6m2Q==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -6644,7 +6417,6 @@ "version": "1.3.3", "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", - "license": "MIT", "engines": { "node": ">= 0.8" } @@ -6654,7 +6426,6 @@ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", "dev": true, - "license": "MIT", "engines": { "node": ">=8" } @@ -6663,7 +6434,6 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", - "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -6673,7 +6443,6 @@ "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", "dev": true, - "license": "MIT", "engines": { "node": ">=8" } @@ -6681,21 +6450,18 @@ "node_modules/path-parse": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", - "license": "MIT" + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" }, "node_modules/path-to-regexp": { "version": "0.1.12", "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.12.tgz", - "integrity": "sha512-RA1GjUVMnvYFxuqovrEqZoxxW5NUZqbwKtYz/Tt7nXerk0LbLblQmrsgdeOxV5SFHf0UDggjS/bSeOZwt1pmEQ==", - "license": "MIT" + "integrity": "sha512-RA1GjUVMnvYFxuqovrEqZoxxW5NUZqbwKtYz/Tt7nXerk0LbLblQmrsgdeOxV5SFHf0UDggjS/bSeOZwt1pmEQ==" }, "node_modules/path-type": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", "dev": true, - "license": "MIT", "engines": { "node": ">=8" } @@ -6705,7 +6471,6 @@ "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.1.tgz", "integrity": "sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==", "dev": true, - "license": "MIT", "engines": { "node": "*" } @@ -6714,15 +6479,13 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", - "dev": true, - "license": "ISC" + "dev": true }, "node_modules/picomatch": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.2.tgz", - "integrity": "sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==", + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", "dev": true, - "license": "MIT", "engines": { "node": ">=8.6" }, @@ -6735,7 +6498,6 @@ "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", "dev": true, - "license": "MIT", "engines": { "node": ">=6" } @@ -6745,7 +6507,6 @@ "resolved": "https://registry.npmjs.org/pkg-conf/-/pkg-conf-3.1.0.tgz", "integrity": "sha512-m0OTbR/5VPNPqO1ph6Fqbj7Hv6QU7gR/tQW40ZqrL1rjgCU85W6C1bJn0BItuJqnR98PWzw7Z8hHeChD1WrgdQ==", "dev": true, - "license": "MIT", "dependencies": { "find-up": "^3.0.0", "load-json-file": "^5.2.0" @@ -6759,7 +6520,6 @@ "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", "dev": true, - "license": "MIT", "dependencies": { "locate-path": "^3.0.0" }, @@ -6772,7 +6532,6 @@ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", "dev": true, - "license": "MIT", "dependencies": { "p-locate": "^3.0.0", "path-exists": "^3.0.0" @@ -6786,7 +6545,6 @@ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", "dev": true, - "license": "MIT", "dependencies": { "p-try": "^2.0.0" }, @@ -6802,7 +6560,6 @@ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", "dev": true, - "license": "MIT", "dependencies": { "p-limit": "^2.0.0" }, @@ -6815,7 +6572,6 @@ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==", "dev": true, - "license": "MIT", "engines": { "node": ">=4" } @@ -6825,7 +6581,6 @@ "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", "dev": true, - "license": "MIT", "dependencies": { "find-up": "^4.0.0" }, @@ -6838,7 +6593,6 @@ "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", "dev": true, - "license": "MIT", "dependencies": { "locate-path": "^5.0.0", "path-exists": "^4.0.0" @@ -6852,7 +6606,6 @@ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", "dev": true, - "license": "MIT", "dependencies": { "p-locate": "^4.1.0" }, @@ -6865,7 +6618,6 @@ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", "dev": true, - "license": "MIT", "dependencies": { "p-try": "^2.0.0" }, @@ -6881,7 +6633,6 @@ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", "dev": true, - "license": "MIT", "dependencies": { "p-limit": "^2.2.0" }, @@ -6894,7 +6645,6 @@ "resolved": "https://registry.npmjs.org/pkg-up/-/pkg-up-2.0.0.tgz", "integrity": "sha512-fjAPuiws93rm7mPUu21RdBnkeZNrbfCFCwfAhPWY+rR3zG0ubpe5cEReHOw5fIbfmsxEV/g2kSxGTATY3Bpnwg==", "dev": true, - "license": "MIT", "dependencies": { "find-up": "^2.1.0" }, @@ -6907,7 +6657,6 @@ "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", "integrity": "sha512-NWzkk0jSJtTt08+FBFMvXoeZnOJD+jTtsRmBYbAIzJdX6l7dLgR7CTubCM5/eDdPUBvLCeVasP1brfVR/9/EZQ==", "dev": true, - "license": "MIT", "dependencies": { "locate-path": "^2.0.0" }, @@ -6920,7 +6669,6 @@ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", "integrity": "sha512-NCI2kiDkyR7VeEKm27Kda/iQHyKJe1Bu0FlTbYp3CqJu+9IFe9bLyAjMxf5ZDDbEg+iMPzB5zYyUTSm8wVTKmA==", "dev": true, - "license": "MIT", "dependencies": { "p-locate": "^2.0.0", "path-exists": "^3.0.0" @@ -6934,7 +6682,6 @@ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", "dev": true, - "license": "MIT", "dependencies": { "p-try": "^1.0.0" }, @@ -6947,7 +6694,6 @@ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", "integrity": "sha512-nQja7m7gSKuewoVRen45CtVfODR3crN3goVQ0DDZ9N3yHxgpkuBhZqsaiotSQRrADUrne346peY7kT3TSACykg==", "dev": true, - "license": "MIT", "dependencies": { "p-limit": "^1.1.0" }, @@ -6960,7 +6706,6 @@ "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", "integrity": "sha512-U1etNYuMJoIz3ZXSrrySFjsXQTWOx2/jdi86L+2pRvph/qMKL6sbcCYdH23fqsbm8TH2Gn0OybpT4eSFlCVHww==", "dev": true, - "license": "MIT", "engines": { "node": ">=4" } @@ -6970,7 +6715,6 @@ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==", "dev": true, - "license": "MIT", "engines": { "node": ">=4" } @@ -6980,25 +6724,22 @@ "resolved": "https://registry.npmjs.org/please-upgrade-node/-/please-upgrade-node-3.2.0.tgz", "integrity": "sha512-gQR3WpIgNIKwBMVLkpMUeR3e1/E1y42bqDQZfql+kDeXd8COYfM8PQA4X6y7a8u9Ua9FHmsrrmirW2vHs45hWg==", "dev": true, - "license": "MIT", "dependencies": { "semver-compare": "^1.0.0" } }, "node_modules/possible-typed-array-names": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.1.0.tgz", - "integrity": "sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==", - "dev": true, - "license": "MIT", + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.0.0.tgz", + "integrity": "sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==", "engines": { "node": ">= 0.4" } }, "node_modules/postcss": { - "version": "8.5.8", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.8.tgz", - "integrity": "sha512-OW/rX8O/jXnm82Ey1k44pObPtdblfiuWnrd8X7GJ7emImCOstunGbXUpp7HdBrFQX6rJzn3sPT397Wp5aCwCHg==", + "version": "8.4.49", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.49.tgz", + "integrity": "sha512-OCVPnIObs4N29kxTjzLfUryOkvZEq+pf8jTF0lg8E7uETuWHA+v7j3c/xJmiqpX450191LlmZfUKkXxkTry7nA==", "dev": true, "funding": [ { @@ -7014,9 +6755,8 @@ "url": "https://github.com/sponsors/ai" } ], - "license": "MIT", "dependencies": { - "nanoid": "^3.3.11", + "nanoid": "^3.3.7", "picocolors": "^1.1.1", "source-map-js": "^1.2.1" }, @@ -7029,7 +6769,6 @@ "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", "dev": true, - "license": "MIT", "engines": { "node": ">= 0.8.0" } @@ -7039,7 +6778,6 @@ "resolved": "https://registry.npmjs.org/process-on-spawn/-/process-on-spawn-1.1.0.tgz", "integrity": "sha512-JOnOPQ/8TZgjs1JIH/m9ni7FfimjNa/PRx7y/Wb5qdItsnhO0jE4AT7fC0HjC28DUQWDr50dwSYZLdRMlqDq3Q==", "dev": true, - "license": "MIT", "dependencies": { "fromentries": "^1.2.0" }, @@ -7052,7 +6790,6 @@ "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.4.0" } @@ -7060,14 +6797,12 @@ "node_modules/projection-utils": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/projection-utils/-/projection-utils-1.1.0.tgz", - "integrity": "sha512-SyAjKYd83c9rcBfb4Xpawq0dnPbgOzva2vEaKvdd5rC+6a1MzLyNieqRfT0pas7FBJRyI4JLeuCENpz/Va8mMw==", - "license": "MIT" + "integrity": "sha512-SyAjKYd83c9rcBfb4Xpawq0dnPbgOzva2vEaKvdd5rC+6a1MzLyNieqRfT0pas7FBJRyI4JLeuCENpz/Va8mMw==" }, "node_modules/prompt-sync": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/prompt-sync/-/prompt-sync-4.2.0.tgz", "integrity": "sha512-BuEzzc5zptP5LsgV5MZETjDaKSWfchl5U9Luiu8SKp7iZWD5tZalOxvNcZRwv+d2phNFr8xlbxmFNcRKfJOzJw==", - "license": "MIT", "dependencies": { "strip-ansi": "^5.0.0" } @@ -7076,7 +6811,6 @@ "version": "4.1.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.1.tgz", "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==", - "license": "MIT", "engines": { "node": ">=6" } @@ -7085,7 +6819,6 @@ "version": "5.2.0", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "license": "MIT", "dependencies": { "ansi-regex": "^4.1.0" }, @@ -7098,7 +6831,6 @@ "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", "dev": true, - "license": "MIT", "dependencies": { "loose-envify": "^1.4.0", "object-assign": "^4.1.1", @@ -7109,7 +6841,6 @@ "version": "2.0.7", "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", - "license": "MIT", "dependencies": { "forwarded": "0.2.0", "ipaddr.js": "1.9.1" @@ -7122,17 +6853,24 @@ "version": "2.3.1", "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "engines": { + "node": ">=6" + } + }, + "node_modules/punycode.js": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode.js/-/punycode.js-2.3.1.tgz", + "integrity": "sha512-uxFIHU0YlHYhDQtV4R9J6a52SLx28BCjT+4ieh7IGbgwVJWO+km431c4yRlREUAsAmt/uMjQUyQHNEPf0M39CA==", + "dev": true, "license": "MIT", "engines": { "node": ">=6" } }, "node_modules/qs": { - "version": "6.15.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.15.0.tgz", - "integrity": "sha512-mAZTtNCeetKMH+pSjrb76NAM8V9a05I9aBZOHztWy/UqcJdQYNsf59vrRKWnojAT9Y+GbIvoTBC++CPHqpDBhQ==", - "dev": true, - "license": "BSD-3-Clause", + "version": "6.14.1", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.14.1.tgz", + "integrity": "sha512-4EK3+xJl8Ts67nLYNwqw/dsFVnCf+qR7RgXSK9jEEm9unao3njwMDdmsdvoKBKHzxd7tCYz5e5M+SnMjdtXGQQ==", "dependencies": { "side-channel": "^1.1.0" }, @@ -7161,21 +6899,18 @@ "type": "consulting", "url": "https://feross.org/support" } - ], - "license": "MIT" + ] }, "node_modules/ramda": { "version": "0.27.2", "resolved": "https://registry.npmjs.org/ramda/-/ramda-0.27.2.tgz", "integrity": "sha512-SbiLPU40JuJniHexQSAgad32hfwd+DRUdwF2PlVuI5RZD0/vahUco7R8vD86J/tcEKKF9vZrUVwgtmGCqlCKyA==", - "dev": true, - "license": "MIT" + "dev": true }, "node_modules/range-parser": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", - "license": "MIT", "engines": { "node": ">= 0.6" } @@ -7195,19 +6930,58 @@ "node": ">= 0.8" } }, + "node_modules/raw-body/node_modules/http-errors": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.1.tgz", + "integrity": "sha512-4FbRdAX+bSdmo4AUFuS0WNiPz8NgFt+r8ThgNWmlrjQjt1Q7ZR9+zTlce2859x4KSXrwIsaeTqDoKQmtP8pLmQ==", + "license": "MIT", + "dependencies": { + "depd": "~2.0.0", + "inherits": "~2.0.4", + "setprototypeof": "~1.2.0", + "statuses": "~2.0.2", + "toidentifier": "~1.0.1" + }, + "engines": { + "node": ">= 0.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/raw-body/node_modules/iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "license": "MIT", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/raw-body/node_modules/statuses": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.2.tgz", + "integrity": "sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, "node_modules/react-is": { "version": "16.13.1", "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", - "dev": true, - "license": "MIT" + "dev": true }, "node_modules/read-pkg": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz", "integrity": "sha512-BLq/cCO9two+lBgiTYNqD6GdtK8s4NpaWrl6/rCO9w0TUS8oJl7cmToOZfRYllKTISY6nt1U7jQ53brmKqY6BA==", "dev": true, - "license": "MIT", "dependencies": { "load-json-file": "^4.0.0", "normalize-package-data": "^2.3.2", @@ -7222,7 +6996,6 @@ "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-3.0.0.tgz", "integrity": "sha512-YFzFrVvpC6frF1sz8psoHDBGF7fLPc+llq/8NB43oagqWkx8ar5zYtsTORtOjw9W2RHLpWP+zTWwBvf1bCmcSw==", "dev": true, - "license": "MIT", "dependencies": { "find-up": "^2.0.0", "read-pkg": "^3.0.0" @@ -7236,7 +7009,6 @@ "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", "integrity": "sha512-NWzkk0jSJtTt08+FBFMvXoeZnOJD+jTtsRmBYbAIzJdX6l7dLgR7CTubCM5/eDdPUBvLCeVasP1brfVR/9/EZQ==", "dev": true, - "license": "MIT", "dependencies": { "locate-path": "^2.0.0" }, @@ -7249,7 +7021,6 @@ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", "integrity": "sha512-NCI2kiDkyR7VeEKm27Kda/iQHyKJe1Bu0FlTbYp3CqJu+9IFe9bLyAjMxf5ZDDbEg+iMPzB5zYyUTSm8wVTKmA==", "dev": true, - "license": "MIT", "dependencies": { "p-locate": "^2.0.0", "path-exists": "^3.0.0" @@ -7263,7 +7034,6 @@ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", "dev": true, - "license": "MIT", "dependencies": { "p-try": "^1.0.0" }, @@ -7276,7 +7046,6 @@ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", "integrity": "sha512-nQja7m7gSKuewoVRen45CtVfODR3crN3goVQ0DDZ9N3yHxgpkuBhZqsaiotSQRrADUrne346peY7kT3TSACykg==", "dev": true, - "license": "MIT", "dependencies": { "p-limit": "^1.1.0" }, @@ -7289,7 +7058,6 @@ "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", "integrity": "sha512-U1etNYuMJoIz3ZXSrrySFjsXQTWOx2/jdi86L+2pRvph/qMKL6sbcCYdH23fqsbm8TH2Gn0OybpT4eSFlCVHww==", "dev": true, - "license": "MIT", "engines": { "node": ">=4" } @@ -7299,7 +7067,6 @@ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==", "dev": true, - "license": "MIT", "engines": { "node": ">=4" } @@ -7309,7 +7076,6 @@ "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz", "integrity": "sha512-Kx8hMakjX03tiGTLAIdJ+lL0htKnXjEZN6hk/tozf/WOuYGdZBJrZ+rCJRbVCugsjB3jMLn9746NsQIf5VjBMw==", "dev": true, - "license": "MIT", "dependencies": { "graceful-fs": "^4.1.2", "parse-json": "^4.0.0", @@ -7325,7 +7091,6 @@ "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", "integrity": "sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw==", "dev": true, - "license": "MIT", "dependencies": { "error-ex": "^1.3.1", "json-parse-better-errors": "^1.0.1" @@ -7339,7 +7104,6 @@ "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", "dev": true, - "license": "MIT", "dependencies": { "pify": "^3.0.0" }, @@ -7352,7 +7116,6 @@ "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", "integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==", "dev": true, - "license": "MIT", "engines": { "node": ">=4" } @@ -7362,7 +7125,6 @@ "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", "dev": true, - "license": "MIT", "engines": { "node": ">=4" } @@ -7371,7 +7133,6 @@ "version": "3.6.2", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", - "license": "MIT", "dependencies": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", @@ -7386,7 +7147,6 @@ "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", "dev": true, - "license": "MIT", "dependencies": { "picomatch": "^2.2.1" }, @@ -7398,8 +7158,6 @@ "version": "1.0.10", "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.10.tgz", "integrity": "sha512-00o4I+DVrefhv+nX0ulyi3biSHCPDe+yLv5o/p6d/UVlirijB8E16FtfwSAi4g3tcqrQ4lRAqQSoFEZJehYEcw==", - "dev": true, - "license": "MIT", "dependencies": { "call-bind": "^1.0.8", "define-properties": "^1.2.1", @@ -7421,8 +7179,6 @@ "version": "1.5.4", "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.4.tgz", "integrity": "sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA==", - "dev": true, - "license": "MIT", "dependencies": { "call-bind": "^1.0.8", "define-properties": "^1.2.1", @@ -7443,7 +7199,6 @@ "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", "dev": true, - "license": "MIT", "engines": { "node": ">=8" }, @@ -7456,7 +7211,6 @@ "resolved": "https://registry.npmjs.org/release-zalgo/-/release-zalgo-1.0.0.tgz", "integrity": "sha512-gUAyHVHPPC5wdqX/LG4LWtRYtgjxyX78oanFNTMMyFEfOqdC54s3eE82imuWKbOeqYht2CrNf64Qb8vgmmtZGA==", "dev": true, - "license": "ISC", "dependencies": { "es6-error": "^4.0.1" }, @@ -7468,7 +7222,6 @@ "version": "6.3.5", "resolved": "https://registry.npmjs.org/replace-in-file/-/replace-in-file-6.3.5.tgz", "integrity": "sha512-arB9d3ENdKva2fxRnSjwBEXfK1npgyci7ZZuwysgAp7ORjHSyxz6oqIjTEv8R0Ydl4Ll7uOAZXL4vbkhGIizCg==", - "license": "MIT", "dependencies": { "chalk": "^4.1.2", "glob": "^7.2.0", @@ -7481,21 +7234,10 @@ "node": ">=10" } }, - "node_modules/replace-in-file/node_modules/brace-expansion": { - "version": "1.1.12", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", - "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, "node_modules/replace-in-file/node_modules/cliui": { "version": "8.0.1", "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", - "license": "ISC", "dependencies": { "string-width": "^4.2.0", "strip-ansi": "^6.0.1", @@ -7505,44 +7247,10 @@ "node": ">=12" } }, - "node_modules/replace-in-file/node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "deprecated": "Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me", - "license": "ISC", - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/replace-in-file/node_modules/minimatch": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz", - "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==", - "license": "ISC", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, "node_modules/replace-in-file/node_modules/yargs": { "version": "17.7.2", "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", - "license": "MIT", "dependencies": { "cliui": "^8.0.1", "escalade": "^3.1.1", @@ -7560,7 +7268,6 @@ "version": "21.1.1", "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", - "license": "ISC", "engines": { "node": ">=12" } @@ -7569,7 +7276,6 @@ "version": "1.9.0", "resolved": "https://registry.npmjs.org/replace-json-property/-/replace-json-property-1.9.0.tgz", "integrity": "sha512-+X6pZXsXSUKT9OzpJQjeDgLp9d0Ck7fsLZcNLhVL29XkwmB5oBz5T3fovs23/P0rLpzbCXrzG9/mbnyDrau+pw==", - "license": "MIT", "dependencies": { "chalk": "^4.1.0", "commander": "^2.19.0", @@ -7580,11 +7286,34 @@ "rjp": "bin/replace-json-property.bin.js" } }, + "node_modules/replace-json-property/node_modules/commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" + }, + "node_modules/replace-json-property/node_modules/jsonfile": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-5.0.0.tgz", + "integrity": "sha512-NQRZ5CRo74MhMMC3/3r5g2k4fjodJ/wh8MxjFbCViWKFjxrnudWSY5vomh+23ZaXzAS7J3fBZIR2dV6WbmfM0w==", + "dependencies": { + "universalify": "^0.1.2" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/replace-json-property/node_modules/universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "engines": { + "node": ">= 4.0.0" + } + }, "node_modules/require-directory": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", - "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -7593,7 +7322,6 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", - "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -7602,23 +7330,30 @@ "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==", - "dev": true, - "license": "ISC" + "dev": true }, "node_modules/require-package-name": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/require-package-name/-/require-package-name-2.0.1.tgz", "integrity": "sha512-uuoJ1hU/k6M0779t3VMVIYpb2VMJk05cehCaABFhXaibcbvfgR8wKiozLjVFSzJPmQMRqIcO0HMyTFqfV09V6Q==", + "dev": true + }, + "node_modules/requizzle": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/requizzle/-/requizzle-0.2.4.tgz", + "integrity": "sha512-JRrFk1D4OQ4SqovXOgdav+K8EAhSB/LJZqCz8tbX0KObcdeM15Ss59ozWMBWmmINMagCwmqn4ZNryUGpBsl6Jw==", "dev": true, - "license": "MIT" + "license": "MIT", + "dependencies": { + "lodash": "^4.17.21" + } }, "node_modules/resolve": { - "version": "1.22.11", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.11.tgz", - "integrity": "sha512-RfqAvLnMl313r7c9oclB1HhUEAezcpLjz95wFH4LVuhk9JF/r22qmVP9AMmOU4vMX7Q8pN8jwNg/CSpdFnMjTQ==", - "license": "MIT", + "version": "1.22.10", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.10.tgz", + "integrity": "sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==", "dependencies": { - "is-core-module": "^2.16.1", + "is-core-module": "^2.16.0", "path-parse": "^1.0.7", "supports-preserve-symlinks-flag": "^1.0.0" }, @@ -7637,7 +7372,6 @@ "resolved": "https://registry.npmjs.org/resolve-dir/-/resolve-dir-1.0.1.tgz", "integrity": "sha512-R7uiTjECzvOsWSfdM0QKFNBVFcK27aHOUwdvK53BcW8zqnGdYp0Fbj82cy54+2A4P2tFM22J5kRfe1R+lM/1yg==", "dev": true, - "license": "MIT", "dependencies": { "expand-tilde": "^2.0.0", "global-modules": "^1.0.0" @@ -7651,17 +7385,15 @@ "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", "dev": true, - "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/reusify": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz", - "integrity": "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", "dev": true, - "license": "MIT", "engines": { "iojs": ">=1.0.0", "node": ">=0.10.0" @@ -7673,7 +7405,6 @@ "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", "deprecated": "Rimraf versions prior to v4 are no longer supported", "dev": true, - "license": "ISC", "dependencies": { "glob": "^7.1.3" }, @@ -7684,52 +7415,6 @@ "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/rimraf/node_modules/brace-expansion": { - "version": "1.1.12", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", - "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/rimraf/node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "deprecated": "Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me", - "dev": true, - "license": "ISC", - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/rimraf/node_modules/minimatch": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz", - "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, "node_modules/run-parallel": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", @@ -7749,7 +7434,6 @@ "url": "https://feross.org/support" } ], - "license": "MIT", "dependencies": { "queue-microtask": "^1.2.2" } @@ -7758,8 +7442,6 @@ "version": "1.1.3", "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.3.tgz", "integrity": "sha512-AURm5f0jYEOydBj7VQlVvDrjeFgthDdEF5H1dP+6mNpoXOMo1quQqJ4wvJDyRZ9+pO3kGWoOdmV08cSv2aJV6Q==", - "dev": true, - "license": "MIT", "dependencies": { "call-bind": "^1.0.8", "call-bound": "^1.0.2", @@ -7791,15 +7473,12 @@ "type": "consulting", "url": "https://feross.org/support" } - ], - "license": "MIT" + ] }, "node_modules/safe-push-apply": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/safe-push-apply/-/safe-push-apply-1.0.0.tgz", "integrity": "sha512-iKE9w/Z7xCzUMIZqdBsp6pEQvwuEebH4vdpjcDWnyzaI6yl6O9FHvVpmGelvEHNsoY6wGblkxR6Zty/h00WiSA==", - "dev": true, - "license": "MIT", "dependencies": { "es-errors": "^1.3.0", "isarray": "^2.0.5" @@ -7815,8 +7494,6 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.1.0.tgz", "integrity": "sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw==", - "dev": true, - "license": "MIT", "dependencies": { "call-bound": "^1.0.2", "es-errors": "^1.3.0", @@ -7833,7 +7510,6 @@ "version": "2.5.0", "resolved": "https://registry.npmjs.org/safe-stable-stringify/-/safe-stable-stringify-2.5.0.tgz", "integrity": "sha512-b3rppTKm9T+PsVCBEOUR46GWI7fdOs00VKZ1+9c1EWDaDMvjQc6tUwuFyIprgGgTcWoVHSKrU8H31ZHA2e0RHA==", - "license": "MIT", "engines": { "node": ">=10" } @@ -7841,14 +7517,12 @@ "node_modules/safer-buffer": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", - "license": "MIT" + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" }, "node_modules/semver": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz", - "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==", - "license": "ISC", + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", + "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", "bin": { "semver": "bin/semver.js" }, @@ -7860,28 +7534,26 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/semver-compare/-/semver-compare-1.0.0.tgz", "integrity": "sha512-YM3/ITh2MJ5MtzaM429anh+x2jiLVjqILF4m4oyQB18W7Ggea7BfqdH/wGMK7dDiMghv/6WG7znWMwUDzJiXow==", - "dev": true, - "license": "MIT" + "dev": true }, "node_modules/send": { - "version": "0.19.2", - "resolved": "https://registry.npmjs.org/send/-/send-0.19.2.tgz", - "integrity": "sha512-VMbMxbDeehAxpOtWJXlcUS5E8iXh6QmN+BkRX1GARS3wRaXEEgzCcB10gTQazO42tpNIya8xIyNx8fll1OFPrg==", - "license": "MIT", + "version": "0.19.0", + "resolved": "https://registry.npmjs.org/send/-/send-0.19.0.tgz", + "integrity": "sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw==", "dependencies": { "debug": "2.6.9", "depd": "2.0.0", "destroy": "1.2.0", - "encodeurl": "~2.0.0", + "encodeurl": "~1.0.2", "escape-html": "~1.0.3", "etag": "~1.8.1", - "fresh": "~0.5.2", - "http-errors": "~2.0.1", + "fresh": "0.5.2", + "http-errors": "2.0.0", "mime": "1.6.0", "ms": "2.1.3", - "on-finished": "~2.4.1", + "on-finished": "2.4.1", "range-parser": "~1.2.1", - "statuses": "~2.0.2" + "statuses": "2.0.1" }, "engines": { "node": ">= 0.8.0" @@ -7891,7 +7563,6 @@ "version": "2.6.9", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "license": "MIT", "dependencies": { "ms": "2.0.0" } @@ -7899,29 +7570,25 @@ "node_modules/send/node_modules/debug/node_modules/ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "license": "MIT" + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" }, - "node_modules/serialize-javascript": { - "version": "7.0.5", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-7.0.5.tgz", - "integrity": "sha512-F4LcB0UqUl1zErq+1nYEEzSHJnIwb3AF2XWB94b+afhrekOUijwooAYqFyRbjYkm2PAKBabx6oYv/xDxNi8IBw==", - "dev": true, - "license": "BSD-3-Clause", + "node_modules/send/node_modules/encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", "engines": { - "node": ">=20.0.0" + "node": ">= 0.8" } }, "node_modules/serve-static": { - "version": "1.16.3", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.16.3.tgz", - "integrity": "sha512-x0RTqQel6g5SY7Lg6ZreMmsOzncHFU7nhnRWkKgWuMTu5NN0DR5oruckMqRvacAN9d5w6ARnRBXl9xhDCgfMeA==", - "license": "MIT", + "version": "1.16.2", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.16.2.tgz", + "integrity": "sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw==", "dependencies": { "encodeurl": "~2.0.0", "escape-html": "~1.0.3", "parseurl": "~1.3.3", - "send": "~0.19.1" + "send": "0.19.0" }, "engines": { "node": ">= 0.8.0" @@ -7931,15 +7598,12 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==", - "dev": true, - "license": "ISC" + "dev": true }, "node_modules/set-function-length": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", - "dev": true, - "license": "MIT", "dependencies": { "define-data-property": "^1.1.4", "es-errors": "^1.3.0", @@ -7956,8 +7620,6 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.2.tgz", "integrity": "sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==", - "dev": true, - "license": "MIT", "dependencies": { "define-data-property": "^1.1.4", "es-errors": "^1.3.0", @@ -7972,8 +7634,6 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/set-proto/-/set-proto-1.0.0.tgz", "integrity": "sha512-RJRdvCo6IAnPdsvP/7m6bsQqNnn1FCBX5ZNtFL98MmFF/4xAIJTIg1YbHW5DC2W5SKZanrC6i4HsJqlajw/dZw==", - "dev": true, - "license": "MIT", "dependencies": { "dunder-proto": "^1.0.1", "es-errors": "^1.3.0", @@ -7983,18 +7643,37 @@ "node": ">= 0.4" } }, + "node_modules/set.prototype.intersection": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/set.prototype.intersection/-/set.prototype.intersection-1.1.8.tgz", + "integrity": "sha512-82gd4NY6itPLCy66L0zxLN0k0IfKRjfGwrQKxCdyedmy1eNt1AkfG00EqAQd7XBdtG7AwLb+uJ8J5HxI6RJ1Ww==", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "define-properties": "^1.2.1", + "es-abstract": "^1.24.0", + "es-errors": "^1.3.0", + "es-set": "^2.0.1", + "is-set": "^2.0.3", + "stop-iteration-iterator": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/setprototypeof": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", - "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", - "license": "ISC" + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" }, "node_modules/shebang-command": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", "dev": true, - "license": "MIT", "dependencies": { "shebang-regex": "^3.0.0" }, @@ -8007,7 +7686,6 @@ "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", "dev": true, - "license": "MIT", "engines": { "node": ">=8" } @@ -8015,14 +7693,12 @@ "node_modules/shellwords": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/shellwords/-/shellwords-0.1.1.tgz", - "integrity": "sha512-vFwSUfQvqybiICwZY5+DAWIPLKsWO31Q91JSKl3UYv+K5c2QRPzn0qzec6QPu1Qc9eHYItiP3NdJqNVqetYAww==", - "license": "MIT" + "integrity": "sha512-vFwSUfQvqybiICwZY5+DAWIPLKsWO31Q91JSKl3UYv+K5c2QRPzn0qzec6QPu1Qc9eHYItiP3NdJqNVqetYAww==" }, "node_modules/side-channel": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz", "integrity": "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==", - "license": "MIT", "dependencies": { "es-errors": "^1.3.0", "object-inspect": "^1.13.3", @@ -8041,7 +7717,6 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.0.tgz", "integrity": "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==", - "license": "MIT", "dependencies": { "es-errors": "^1.3.0", "object-inspect": "^1.13.3" @@ -8057,7 +7732,6 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz", "integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==", - "license": "MIT", "dependencies": { "call-bound": "^1.0.2", "es-errors": "^1.3.0", @@ -8075,7 +7749,6 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz", "integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==", - "license": "MIT", "dependencies": { "call-bound": "^1.0.2", "es-errors": "^1.3.0", @@ -8093,15 +7766,26 @@ "node_modules/sift": { "version": "17.1.3", "resolved": "https://registry.npmjs.org/sift/-/sift-17.1.3.tgz", - "integrity": "sha512-Rtlj66/b0ICeFzYTuNvX/EF1igRbbnGSvEyT79McoZa/DeGhMyC5pWKOEsZKnpkqtSeovd5FL/bjHWC3CIIvCQ==", - "license": "MIT" + "integrity": "sha512-Rtlj66/b0ICeFzYTuNvX/EF1igRbbnGSvEyT79McoZa/DeGhMyC5pWKOEsZKnpkqtSeovd5FL/bjHWC3CIIvCQ==" }, "node_modules/signal-exit": { "version": "3.0.7", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", - "dev": true, - "license": "ISC" + "dev": true + }, + "node_modules/simple-swizzle": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", + "integrity": "sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==", + "dependencies": { + "is-arrayish": "^0.3.1" + } + }, + "node_modules/simple-swizzle/node_modules/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==" }, "node_modules/sinon": { "version": "15.2.0", @@ -8109,7 +7793,6 @@ "integrity": "sha512-nPS85arNqwBXaIsFCkolHjGIkFo+Oxu9vbgmBJizLAhqe6P2o3Qmj3KCUoRkfhHtvgDhZdWD3risLHAUJ8npjw==", "deprecated": "16.1.1", "dev": true, - "license": "BSD-3-Clause", "dependencies": { "@sinonjs/commons": "^3.0.0", "@sinonjs/fake-timers": "^10.3.0", @@ -8128,7 +7811,6 @@ "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", "dev": true, - "license": "MIT", "dependencies": { "ansi-styles": "^4.0.0", "astral-regex": "^2.0.0", @@ -8146,7 +7828,6 @@ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true, - "license": "BSD-3-Clause", "engines": { "node": ">=0.10.0" } @@ -8156,7 +7837,6 @@ "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", "dev": true, - "license": "BSD-3-Clause", "engines": { "node": ">=0.10.0" } @@ -8165,7 +7845,6 @@ "version": "3.0.3", "resolved": "https://registry.npmjs.org/sparse-bitfield/-/sparse-bitfield-3.0.3.tgz", "integrity": "sha512-kvzhi7vqKTfkh0PZU+2D2PIllw2ymqJKujUcyPMd9Y75Nv4nPbGJZXNhxsgdQab2BmlDct1YnfQCguEvHr7VsQ==", - "license": "MIT", "dependencies": { "memory-pager": "^1.0.2" } @@ -8175,7 +7854,6 @@ "resolved": "https://registry.npmjs.org/spawn-wrap/-/spawn-wrap-2.0.0.tgz", "integrity": "sha512-EeajNjfN9zMnULLwhZZQU3GWBoFNkbngTUPfaawT4RkMiviTxcX0qfhVbGey39mfctfDHkWtuecgQ8NJcyQWHg==", "dev": true, - "license": "ISC", "dependencies": { "foreground-child": "^2.0.0", "is-windows": "^1.0.2", @@ -8193,7 +7871,6 @@ "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz", "integrity": "sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==", "dev": true, - "license": "Apache-2.0", "dependencies": { "spdx-expression-parse": "^3.0.0", "spdx-license-ids": "^3.0.0" @@ -8203,38 +7880,33 @@ "version": "2.5.0", "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.5.0.tgz", "integrity": "sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w==", - "dev": true, - "license": "CC-BY-3.0" + "dev": true }, "node_modules/spdx-expression-parse": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", "dev": true, - "license": "MIT", "dependencies": { "spdx-exceptions": "^2.1.0", "spdx-license-ids": "^3.0.0" } }, "node_modules/spdx-license-ids": { - "version": "3.0.23", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.23.tgz", - "integrity": "sha512-CWLcCCH7VLu13TgOH+r8p1O/Znwhqv/dbb6lqWy67G+pT1kHmeD/+V36AVb/vq8QMIQwVShJ6Ssl5FPh0fuSdw==", - "dev": true, - "license": "CC0-1.0" + "version": "3.0.20", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.20.tgz", + "integrity": "sha512-jg25NiDV/1fLtSgEgyvVyDunvaNHbuwF9lfNV17gSmPFAlYzdfNBlLtLzXTevwkPj7DhGbmN9VnmJIgLnhvaBw==", + "dev": true }, "node_modules/sprintf-js": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", - "license": "BSD-3-Clause" + "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==" }, "node_modules/stack-trace": { "version": "0.0.10", "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz", "integrity": "sha512-KGzahc7puUKkzyMt+IqAep+TVNbKP+k2Lmwhub39m1AsTSkaDutx56aDCo+HLDzf/D26BIHTJWNiTG1KAJiQCg==", - "license": "MIT", "engines": { "node": "*" } @@ -8258,7 +7930,6 @@ "url": "https://feross.org/support" } ], - "license": "MIT", "dependencies": { "eslint": "~7.18.0", "eslint-config-standard": "16.0.3", @@ -8295,7 +7966,6 @@ "url": "https://feross.org/support" } ], - "license": "MIT", "dependencies": { "get-stdin": "^8.0.0", "minimist": "^1.2.5", @@ -8311,7 +7981,6 @@ "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.3.0.tgz", "integrity": "sha512-1JTKgrOKAHVivSvOYw+sJOunkBjUOvjqWk1DPja7ZFhIS2mX/4EgTT8M7eTK9jrKhL/FvXXEbQwIs3pg1xp3dg==", "dev": true, - "license": "MIT", "dependencies": { "ajv": "^6.12.4", "debug": "^4.1.1", @@ -8333,7 +8002,6 @@ "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", "dev": true, - "license": "MIT", "bin": { "acorn": "bin/acorn" }, @@ -8342,11 +8010,10 @@ } }, "node_modules/standard/node_modules/ajv": { - "version": "6.14.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.14.0.tgz", - "integrity": "sha512-IWrosm/yrn43eiKqkfkHis7QioDleaXQHdDVPKg0FSwwd/DuvyX79TZnFOnYpB7dcsFAMmtFztZuXPDvSePkFw==", + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", "dev": true, - "license": "MIT", "dependencies": { "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", @@ -8375,7 +8042,6 @@ "integrity": "sha512-fbgTiE8BfUJZuBeq2Yi7J3RB3WGUQ9PNuNbmgi6jt9Iv8qrkxfy19Ds3OpL1Pm7zg3BtTVhvcUZbIRQ0wmSjAQ==", "deprecated": "This version is no longer supported. Please see https://eslint.org/version-support for other options.", "dev": true, - "license": "MIT", "dependencies": { "@babel/code-frame": "^7.0.0", "@eslint/eslintrc": "^0.3.0", @@ -8444,7 +8110,6 @@ "url": "https://feross.org/support" } ], - "license": "MIT", "peerDependencies": { "eslint": "^7.12.1", "eslint-plugin-import": "^2.22.1", @@ -8471,7 +8136,6 @@ "url": "https://feross.org/support" } ], - "license": "MIT", "peerDependencies": { "eslint": "^7.12.1", "eslint-plugin-react": "^7.21.5" @@ -8482,7 +8146,6 @@ "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.24.2.tgz", "integrity": "sha512-hNVtyhiEtZmpsabL4neEj+6M5DCLgpYyG9nzJY8lZQeQXEn5UPW1DpUdsMHMXsq98dbNm7nt1w9ZMSVpfJdi8Q==", "dev": true, - "license": "MIT", "dependencies": { "array-includes": "^3.1.3", "array.prototype.flat": "^1.2.4", @@ -8512,7 +8175,6 @@ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dev": true, - "license": "MIT", "dependencies": { "ms": "2.0.0" } @@ -8522,7 +8184,6 @@ "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", "dev": true, - "license": "Apache-2.0", "dependencies": { "esutils": "^2.0.2" }, @@ -8535,7 +8196,6 @@ "resolved": "https://registry.npmjs.org/eslint-plugin-promise/-/eslint-plugin-promise-5.1.1.tgz", "integrity": "sha512-XgdcdyNzHfmlQyweOPTxmc7pIsS6dE4MvwhXWMQ2Dxs1XAL2GJDilUsjWen6TWik0aSI+zD/PqocZBblcm9rdA==", "dev": true, - "license": "ISC", "engines": { "node": "^10.12.0 || >=12.0.0" }, @@ -8548,7 +8208,6 @@ "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.25.3.tgz", "integrity": "sha512-ZMbFvZ1WAYSZKY662MBVEWR45VaBT6KSJCiupjrNlcdakB90juaZeDCbJq19e73JZQubqFtgETohwgAt8u5P6w==", "dev": true, - "license": "MIT", "dependencies": { "array-includes": "^3.1.3", "array.prototype.flatmap": "^1.2.4", @@ -8576,7 +8235,6 @@ "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", "dev": true, - "license": "Apache-2.0", "dependencies": { "esutils": "^2.0.2" }, @@ -8585,25 +8243,18 @@ } }, "node_modules/standard/node_modules/eslint-plugin-react/node_modules/resolve": { - "version": "2.0.0-next.6", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.6.tgz", - "integrity": "sha512-3JmVl5hMGtJ3kMmB3zi3DL25KfkCEyy3Tw7Gmw7z5w8M9WlwoPFnIvwChzu1+cF3iaK3sp18hhPz8ANeimdJfA==", + "version": "2.0.0-next.5", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.5.tgz", + "integrity": "sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==", "dev": true, - "license": "MIT", "dependencies": { - "es-errors": "^1.3.0", - "is-core-module": "^2.16.1", - "node-exports-info": "^1.6.0", - "object-keys": "^1.1.1", + "is-core-module": "^2.13.0", "path-parse": "^1.0.7", "supports-preserve-symlinks-flag": "^1.0.0" }, "bin": { "resolve": "bin/resolve" }, - "engines": { - "node": ">= 0.4" - }, "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -8613,7 +8264,6 @@ "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", "dev": true, - "license": "BSD-2-Clause", "dependencies": { "esrecurse": "^4.3.0", "estraverse": "^4.1.1" @@ -8627,7 +8277,6 @@ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", "dev": true, - "license": "BSD-2-Clause", "engines": { "node": ">=4.0" } @@ -8637,7 +8286,6 @@ "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", "dev": true, - "license": "Apache-2.0", "engines": { "node": ">=10" } @@ -8647,7 +8295,6 @@ "resolved": "https://registry.npmjs.org/espree/-/espree-7.3.1.tgz", "integrity": "sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g==", "dev": true, - "license": "BSD-2-Clause", "dependencies": { "acorn": "^7.4.0", "acorn-jsx": "^5.3.1", @@ -8662,7 +8309,6 @@ "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", "dev": true, - "license": "Apache-2.0", "engines": { "node": ">=4" } @@ -8672,7 +8318,6 @@ "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", "integrity": "sha512-NWzkk0jSJtTt08+FBFMvXoeZnOJD+jTtsRmBYbAIzJdX6l7dLgR7CTubCM5/eDdPUBvLCeVasP1brfVR/9/EZQ==", "dev": true, - "license": "MIT", "dependencies": { "locate-path": "^2.0.0" }, @@ -8685,7 +8330,6 @@ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", "dev": true, - "license": "ISC", "dependencies": { "is-glob": "^4.0.1" }, @@ -8698,7 +8342,6 @@ "resolved": "https://registry.npmjs.org/globals/-/globals-12.4.0.tgz", "integrity": "sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg==", "dev": true, - "license": "MIT", "dependencies": { "type-fest": "^0.8.1" }, @@ -8714,7 +8357,6 @@ "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", "dev": true, - "license": "MIT", "engines": { "node": ">= 4" } @@ -8723,15 +8365,13 @@ "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, - "license": "MIT" + "dev": true }, "node_modules/standard/node_modules/locate-path": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", "integrity": "sha512-NCI2kiDkyR7VeEKm27Kda/iQHyKJe1Bu0FlTbYp3CqJu+9IFe9bLyAjMxf5ZDDbEg+iMPzB5zYyUTSm8wVTKmA==", "dev": true, - "license": "MIT", "dependencies": { "p-locate": "^2.0.0", "path-exists": "^3.0.0" @@ -8741,11 +8381,10 @@ } }, "node_modules/standard/node_modules/minimatch": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz", - "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, - "license": "ISC", "dependencies": { "brace-expansion": "^1.1.7" }, @@ -8757,15 +8396,13 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true, - "license": "MIT" + "dev": true }, "node_modules/standard/node_modules/p-limit": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", "dev": true, - "license": "MIT", "dependencies": { "p-try": "^1.0.0" }, @@ -8778,7 +8415,6 @@ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", "integrity": "sha512-nQja7m7gSKuewoVRen45CtVfODR3crN3goVQ0DDZ9N3yHxgpkuBhZqsaiotSQRrADUrne346peY7kT3TSACykg==", "dev": true, - "license": "MIT", "dependencies": { "p-limit": "^1.1.0" }, @@ -8791,7 +8427,6 @@ "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", "integrity": "sha512-U1etNYuMJoIz3ZXSrrySFjsXQTWOx2/jdi86L+2pRvph/qMKL6sbcCYdH23fqsbm8TH2Gn0OybpT4eSFlCVHww==", "dev": true, - "license": "MIT", "engines": { "node": ">=4" } @@ -8801,16 +8436,14 @@ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==", "dev": true, - "license": "MIT", "engines": { "node": ">=4" } }, "node_modules/statuses": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.2.tgz", - "integrity": "sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw==", - "license": "MIT", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", "engines": { "node": ">= 0.8" } @@ -8819,7 +8452,6 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/stop-iteration-iterator/-/stop-iteration-iterator-1.1.0.tgz", "integrity": "sha512-eLoXW/DHyl62zxY4SCaIgnRhuMr6ri4juEYARS8E6sCEqzKpOiE521Ucofdx+KnDZl5xmvGYaaKCk5FEOxJCoQ==", - "dev": true, "license": "MIT", "dependencies": { "es-errors": "^1.3.0", @@ -8833,7 +8465,6 @@ "version": "1.3.0", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", - "license": "MIT", "dependencies": { "safe-buffer": "~5.2.0" } @@ -8842,7 +8473,6 @@ "version": "4.2.3", "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "license": "MIT", "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", @@ -8857,7 +8487,6 @@ "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.12.tgz", "integrity": "sha512-6CC9uyBL+/48dYizRf7H7VAYCMCNTBeM78x/VTUe9bFEaxBepPJDa1Ow99LqI/1yF7kuy7Q3cQsYMrcjGUcskA==", "dev": true, - "license": "MIT", "dependencies": { "call-bind": "^1.0.8", "call-bound": "^1.0.3", @@ -8884,8 +8513,6 @@ "version": "1.2.10", "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.10.tgz", "integrity": "sha512-Rs66F0P/1kedk5lyYyH9uBzuiI/kNRmwJAR9quK6VOtIpZ2G+hMZd+HQbbv25MgCA6gEffoMZYxlTod4WcdrKA==", - "dev": true, - "license": "MIT", "dependencies": { "call-bind": "^1.0.8", "call-bound": "^1.0.2", @@ -8906,8 +8533,6 @@ "version": "1.0.9", "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.9.tgz", "integrity": "sha512-G7Ok5C6E/j4SGfyLCloXTrngQIQU3PWtXGst3yM7Bea9FRURf1S42ZHlZZtsNque2FN2PoUhfZXYLNWwEr4dLQ==", - "dev": true, - "license": "MIT", "dependencies": { "call-bind": "^1.0.8", "call-bound": "^1.0.2", @@ -8925,8 +8550,6 @@ "version": "1.0.8", "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz", "integrity": "sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==", - "dev": true, - "license": "MIT", "dependencies": { "call-bind": "^1.0.7", "define-properties": "^1.2.1", @@ -8943,7 +8566,6 @@ "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "license": "MIT", "dependencies": { "ansi-regex": "^5.0.1" }, @@ -8956,7 +8578,6 @@ "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", "dev": true, - "license": "MIT", "engines": { "node": ">=8" } @@ -8966,7 +8587,6 @@ "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", "dev": true, - "license": "MIT", "engines": { "node": ">=8" }, @@ -8978,9 +8598,8 @@ "version": "8.1.2", "resolved": "https://registry.npmjs.org/superagent/-/superagent-8.1.2.tgz", "integrity": "sha512-6WTxW1EB6yCxV5VFOIPQruWGHqc3yI7hEmZK6h+pyk69Lk/Ut7rLUY6W/ONF2MjBuGjvmMiIpsrVJ2vjrHlslA==", - "deprecated": "Please upgrade to superagent v10.2.2+, see release notes at https://github.com/forwardemail/superagent/releases/tag/v10.2.2 - maintenance is supported by Forward Email @ https://forwardemail.net", + "deprecated": "Please upgrade to v9.0.0+ as we have fixed a public vulnerability with formidable dependency. Note that v9.0.0+ requires Node.js v14.18.0+. See https://github.com/ladjs/superagent/pull/1800 for insight. This project is supported and maintained by the team at Forward Email @ https://forwardemail.net", "dev": true, - "license": "MIT", "dependencies": { "component-emitter": "^1.3.0", "cookiejar": "^2.1.4", @@ -9002,7 +8621,6 @@ "resolved": "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz", "integrity": "sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==", "dev": true, - "license": "MIT", "bin": { "mime": "cli.js" }, @@ -9014,7 +8632,6 @@ "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "license": "MIT", "dependencies": { "has-flag": "^4.0.0" }, @@ -9026,7 +8643,6 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", - "license": "MIT", "engines": { "node": ">= 0.4" }, @@ -9038,7 +8654,6 @@ "version": "2.23.7", "resolved": "https://registry.npmjs.org/swagger-autogen/-/swagger-autogen-2.23.7.tgz", "integrity": "sha512-vr7uRmuV0DCxWc0wokLJAwX3GwQFJ0jwN+AWk0hKxre2EZwusnkGSGdVFd82u7fQLgwSTnbWkxUL7HXuz5LTZQ==", - "license": "MIT", "dependencies": { "acorn": "^7.4.1", "deepmerge": "^4.2.2", @@ -9050,7 +8665,6 @@ "version": "7.4.1", "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", - "license": "MIT", "bin": { "acorn": "bin/acorn" }, @@ -9058,54 +8672,10 @@ "node": ">=0.4.0" } }, - "node_modules/swagger-autogen/node_modules/brace-expansion": { - "version": "1.1.12", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", - "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/swagger-autogen/node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "deprecated": "Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me", - "license": "ISC", - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/swagger-autogen/node_modules/minimatch": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz", - "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==", - "license": "ISC", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, "node_modules/swagger-ui-dist": { - "version": "5.32.1", - "resolved": "https://registry.npmjs.org/swagger-ui-dist/-/swagger-ui-dist-5.32.1.tgz", - "integrity": "sha512-6HQoo7+j8PA2QqP5kgAb9dl1uxUjvR0SAoL/WUp1sTEvm0F6D5npgU2OGCLwl++bIInqGlEUQ2mpuZRZYtyCzQ==", - "license": "Apache-2.0", + "version": "5.18.2", + "resolved": "https://registry.npmjs.org/swagger-ui-dist/-/swagger-ui-dist-5.18.2.tgz", + "integrity": "sha512-J+y4mCw/zXh1FOj5wGJvnAajq6XgHOyywsa9yITmwxIlJbMqITq3gYRZHaeqLVH/eV/HOPphE6NjF+nbSNC5Zw==", "dependencies": { "@scarf/scarf": "=1.4.0" } @@ -9114,7 +8684,6 @@ "version": "4.6.3", "resolved": "https://registry.npmjs.org/swagger-ui-express/-/swagger-ui-express-4.6.3.tgz", "integrity": "sha512-CDje4PndhTD2HkgyKH3pab+LKspDeB/NhPN2OF1j+piYIamQqBYwAXWESOT1Yju2xFg51bRW9sUng2WxDjzArw==", - "license": "MIT", "dependencies": { "swagger-ui-dist": ">=4.11.0" }, @@ -9130,7 +8699,6 @@ "resolved": "https://registry.npmjs.org/table/-/table-6.9.0.tgz", "integrity": "sha512-9kY+CygyYM6j02t5YFHbNz2FN5QmYGv9zAjVp4lCDjlCw7amdckXlEt/bjMhUIfj4ThGRE4gCUH5+yGnNuPo5A==", "dev": true, - "license": "BSD-3-Clause", "dependencies": { "ajv": "^8.0.1", "lodash.truncate": "^4.4.2", @@ -9147,7 +8715,6 @@ "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", "dev": true, - "license": "ISC", "dependencies": { "@istanbuljs/schema": "^0.1.2", "glob": "^7.1.4", @@ -9168,34 +8735,11 @@ "concat-map": "0.0.1" } }, - "node_modules/test-exclude/node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "deprecated": "Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me", - "dev": true, - "license": "ISC", - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, "node_modules/test-exclude/node_modules/minimatch": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz", - "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, - "license": "ISC", "dependencies": { "brace-expansion": "^1.1.7" }, @@ -9206,28 +8750,24 @@ "node_modules/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==", - "license": "MIT" + "integrity": "sha512-uuVGNWzgJ4yhRaNSiubPY7OjISw4sw4E5Uv0wbjp+OzcbmVU/rsT8ujgcXJhn9ypzsgr5vlzpPqP+MBBKcGvbg==" }, "node_modules/text-table": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", - "dev": true, - "license": "MIT" + "dev": true }, "node_modules/through": { "version": "2.3.8", "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==", - "license": "MIT" + "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==" }, "node_modules/to-regex-range": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", "dev": true, - "license": "MIT", "dependencies": { "is-number": "^7.0.0" }, @@ -9239,28 +8779,25 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", - "license": "MIT", "engines": { "node": ">=0.6" } }, "node_modules/tr46": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-5.1.1.tgz", - "integrity": "sha512-hdF5ZgjTqgAntKkklYw0R03MG2x/bSzTtkxmIRw/sTNV8YXsCJ1tfLAX23lhxhHJlEf3CRCOCGGWw3vI3GaSPw==", - "license": "MIT", + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-4.1.1.tgz", + "integrity": "sha512-2lv/66T7e5yNyhAAC4NaKe5nVavzuGJQVVtRYLyQ2OI8tsJ61PMLlelehb0wi2Hx6+hT/OJUWZcw8MjlSRnxvw==", "dependencies": { - "punycode": "^2.3.1" + "punycode": "^2.3.0" }, "engines": { - "node": ">=18" + "node": ">=14" } }, "node_modules/triple-beam": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/triple-beam/-/triple-beam-1.4.1.tgz", "integrity": "sha512-aZbgViZrg1QNcG+LULa7nhZpJTZSLm/mXnHXnbAbjmN5aSa0y7V+wvv6+4WaBtpISJzThKy+PIPxc1Nq1EJ9mg==", - "license": "MIT", "engines": { "node": ">= 14.0.0" } @@ -9270,7 +8807,6 @@ "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.15.0.tgz", "integrity": "sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==", "dev": true, - "license": "MIT", "dependencies": { "@types/json5": "^0.0.29", "json5": "^1.0.2", @@ -9283,7 +8819,6 @@ "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", "dev": true, - "license": "MIT", "dependencies": { "minimist": "^1.2.0" }, @@ -9296,7 +8831,6 @@ "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", "dev": true, - "license": "MIT", "engines": { "node": ">=4" } @@ -9306,7 +8840,6 @@ "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", "dev": true, - "license": "MIT", "dependencies": { "prelude-ls": "^1.2.1" }, @@ -9319,7 +8852,6 @@ "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.1.0.tgz", "integrity": "sha512-Acylog8/luQ8L7il+geoSxhEkazvkslg7PSNKOX59mbB9cOveP5aq9h74Y7YU8yDpJwetzQQrfIwtf4Wp4LKcw==", "dev": true, - "license": "MIT", "engines": { "node": ">=4" } @@ -9328,7 +8860,6 @@ "version": "0.8.1", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", - "license": "(MIT OR CC0-1.0)", "engines": { "node": ">=8" } @@ -9337,7 +8868,6 @@ "version": "1.6.18", "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", - "license": "MIT", "dependencies": { "media-typer": "0.3.0", "mime-types": "~2.1.24" @@ -9350,8 +8880,6 @@ "version": "1.0.3", "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.3.tgz", "integrity": "sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==", - "dev": true, - "license": "MIT", "dependencies": { "call-bound": "^1.0.3", "es-errors": "^1.3.0", @@ -9365,8 +8893,6 @@ "version": "1.0.3", "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.3.tgz", "integrity": "sha512-BaXgOuIxz8n8pIq3e7Atg/7s+DpiYrxn4vdot3w9KbnBhcRQq6o3xemQdIfynqSeXeDrF32x+WvfzmOjPiY9lg==", - "dev": true, - "license": "MIT", "dependencies": { "call-bind": "^1.0.8", "for-each": "^0.3.3", @@ -9385,8 +8911,6 @@ "version": "1.0.4", "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.4.tgz", "integrity": "sha512-bTlAFB/FBYMcuX81gbL4OcpH5PmlFHqlCCpAl8AlEzMz5k53oNDvN8p1PNOWLEmI2x4orp3raOFB51tv9X+MFQ==", - "dev": true, - "license": "MIT", "dependencies": { "available-typed-arrays": "^1.0.7", "call-bind": "^1.0.8", @@ -9407,8 +8931,6 @@ "version": "1.0.7", "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.7.tgz", "integrity": "sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg==", - "dev": true, - "license": "MIT", "dependencies": { "call-bind": "^1.0.7", "for-each": "^0.3.3", @@ -9429,17 +8951,21 @@ "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", "dev": true, - "license": "MIT", "dependencies": { "is-typedarray": "^1.0.0" } }, + "node_modules/uc.micro": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-1.0.6.tgz", + "integrity": "sha512-8Y75pvTYkLJW2hWQHXxoqRgV7qb9B+9vFEtidML+7koHUFapnVJAZ6cKs+Qjz5Aw3aZWHMC6u0wJE3At+nSGwA==", + "dev": true, + "peer": true + }, "node_modules/unbox-primitive": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.1.0.tgz", "integrity": "sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw==", - "dev": true, - "license": "MIT", "dependencies": { "call-bound": "^1.0.3", "has-bigints": "^1.0.2", @@ -9454,40 +8980,28 @@ } }, "node_modules/underscore": { - "version": "1.13.8", - "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.13.8.tgz", - "integrity": "sha512-DXtD3ZtEQzc7M8m4cXotyHR+FAS18C64asBYY5vqZexfYryNNnDc02W4hKg3rdQuqOYas1jkseX0+nZXjTXnvQ==", - "license": "MIT" + "version": "1.13.7", + "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.13.7.tgz", + "integrity": "sha512-GMXzWtsc57XAtguZgaQViUOzs0KTkk8ojr3/xAxXLITqf/3EMwxC0inyETfDFjH/Krbhuep0HNbbjI9i/q3F3g==" }, "node_modules/undici-types": { - "version": "7.18.2", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.18.2.tgz", - "integrity": "sha512-AsuCzffGHJybSaRrmr5eHr81mwJU3kjw6M+uprWvCXiNeN9SOGwQ3Jn8jb8m3Z6izVgknn1R0FTCEAP2QrLY/w==", - "dev": true, - "license": "MIT" - }, - "node_modules/universalify": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", - "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", - "license": "MIT", - "engines": { - "node": ">= 4.0.0" - } + "version": "6.20.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.20.0.tgz", + "integrity": "sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg==", + "dev": true }, "node_modules/unpipe": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", - "license": "MIT", "engines": { "node": ">= 0.8" } }, "node_modules/update-browserslist-db": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.2.3.tgz", - "integrity": "sha512-Js0m9cx+qOgDxo0eMiFGEueWztz+d4+M3rGlmKPT+T4IS/jP4ylw3Nwpu6cpTTP8R1MAC1kF4VbdLt3ARf209w==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.1.tgz", + "integrity": "sha512-R8UzCaa9Az+38REPiJ1tXlImTJXlVfgHZsglwBD/k6nj76ctsH1E3q4doGrukiLQd3sGQYu56r5+lo5r94l29A==", "dev": true, "funding": [ { @@ -9503,10 +9017,9 @@ "url": "https://github.com/sponsors/ai" } ], - "license": "MIT", "dependencies": { "escalade": "^3.2.0", - "picocolors": "^1.1.1" + "picocolors": "^1.1.0" }, "bin": { "update-browserslist-db": "cli.js" @@ -9520,7 +9033,6 @@ "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", "dev": true, - "license": "BSD-2-Clause", "dependencies": { "punycode": "^2.1.0" } @@ -9528,14 +9040,12 @@ "node_modules/util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", - "license": "MIT" + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" }, "node_modules/utils-merge": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", - "license": "MIT", "engines": { "node": ">= 0.4.0" } @@ -9544,7 +9054,6 @@ "version": "8.3.2", "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", - "license": "MIT", "bin": { "uuid": "dist/bin/uuid" } @@ -9553,24 +9062,22 @@ "version": "2.4.0", "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.4.0.tgz", "integrity": "sha512-ocyWc3bAHBB/guyqJQVI5o4BZkPhznPYUG2ea80Gond/BgNWpap8TOmLSeeQG7bnh2KMISxskdADG59j7zruhw==", - "dev": true, - "license": "MIT" + "dev": true }, "node_modules/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", "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", "dev": true, - "license": "Apache-2.0", "dependencies": { "spdx-correct": "^3.0.0", "spdx-expression-parse": "^3.0.0" } }, "node_modules/validator": { - "version": "13.15.26", - "resolved": "https://registry.npmjs.org/validator/-/validator-13.15.26.tgz", - "integrity": "sha512-spH26xU080ydGggxRyR1Yhcbgx+j3y5jbNXk/8L+iRvdIEQ4uTRH2Sgf2dokud6Q4oAtsbNvJ1Ft+9xmm6IZcA==", + "version": "13.15.23", + "resolved": "https://registry.npmjs.org/validator/-/validator-13.15.23.tgz", + "integrity": "sha512-4yoz1kEWqUjzi5zsPbAS/903QXSYp0UOtHsPpp7p9rHAw/W+dkInskAE386Fat3oKRROwO98d9ZB0G4cObgUyw==", "license": "MIT", "engines": { "node": ">= 0.10" @@ -9580,7 +9087,6 @@ "version": "1.1.2", "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", - "license": "MIT", "engines": { "node": ">= 0.8" } @@ -9589,29 +9095,26 @@ "version": "7.0.0", "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz", "integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==", - "license": "BSD-2-Clause", "engines": { "node": ">=12" } }, "node_modules/whatwg-url": { - "version": "14.2.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-14.2.0.tgz", - "integrity": "sha512-De72GdQZzNTUBBChsXueQUnPKDkg/5A5zp7pFDuQAj5UFoENpiACU0wlCvzpAGnTkj++ihpKwKyYewn/XNUbKw==", - "license": "MIT", + "version": "13.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-13.0.0.tgz", + "integrity": "sha512-9WWbymnqj57+XEuqADHrCJ2eSXzn8WXIW/YSGaZtb2WKAInQ6CHfaUUcTyyver0p8BDg5StLQq8h1vtZuwmOig==", "dependencies": { - "tr46": "^5.1.0", + "tr46": "^4.1.1", "webidl-conversions": "^7.0.0" }, "engines": { - "node": ">=18" + "node": ">=16" } }, "node_modules/which": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "license": "ISC", "dependencies": { "isexe": "^2.0.0" }, @@ -9626,8 +9129,6 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.1.1.tgz", "integrity": "sha512-TbX3mj8n0odCBFVlY8AxkqcHASw3L60jIuF8jFP78az3C2YhmGvqbHBpAjTRH2/xqYunrJ9g1jSyjCjpoWzIAA==", - "dev": true, - "license": "MIT", "dependencies": { "is-bigint": "^1.1.0", "is-boolean-object": "^1.2.1", @@ -9646,8 +9147,6 @@ "version": "1.2.1", "resolved": "https://registry.npmjs.org/which-builtin-type/-/which-builtin-type-1.2.1.tgz", "integrity": "sha512-6iBczoX+kDQ7a3+YJBnh3T+KZRxM/iYNPXicqk66/Qfm1b93iu+yOImkg0zHbj5LNOcNv1TEADiZ0xa34B4q6Q==", - "dev": true, - "license": "MIT", "dependencies": { "call-bound": "^1.0.2", "function.prototype.name": "^1.1.6", @@ -9674,8 +9173,6 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.2.tgz", "integrity": "sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==", - "dev": true, - "license": "MIT", "dependencies": { "is-map": "^2.0.3", "is-set": "^2.0.3", @@ -9693,14 +9190,12 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.1.tgz", "integrity": "sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ==", - "dev": true, - "license": "ISC" + "dev": true }, "node_modules/which-typed-array": { "version": "1.1.20", "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.20.tgz", "integrity": "sha512-LYfpUkmqwl0h9A2HL09Mms427Q1RZWuOHsukfVcKRq9q95iQxdw0ix1JQrqbcDR9PH1QDwf5Qo8OZb5lksZ8Xg==", - "dev": true, "license": "MIT", "dependencies": { "available-typed-arrays": "^1.0.7", @@ -9719,13 +9214,12 @@ } }, "node_modules/winston": { - "version": "3.19.0", - "resolved": "https://registry.npmjs.org/winston/-/winston-3.19.0.tgz", - "integrity": "sha512-LZNJgPzfKR+/J3cHkxcpHKpKKvGfDZVPS4hfJCc4cCG0CgYzvlD6yE/S3CIL/Yt91ak327YCpiF/0MyeZHEHKA==", - "license": "MIT", + "version": "3.17.0", + "resolved": "https://registry.npmjs.org/winston/-/winston-3.17.0.tgz", + "integrity": "sha512-DLiFIXYC5fMPxaRg832S6F5mJYvePtmO5G9v9IgUFPhXm9/GkXarH/TUrBAVzhTCzAj9anE/+GjrgXp/54nOgw==", "dependencies": { "@colors/colors": "^1.6.0", - "@dabh/diagnostics": "^2.0.8", + "@dabh/diagnostics": "^2.0.2", "async": "^3.2.3", "is-stream": "^2.0.0", "logform": "^2.7.0", @@ -9744,7 +9238,6 @@ "version": "4.9.0", "resolved": "https://registry.npmjs.org/winston-transport/-/winston-transport-4.9.0.tgz", "integrity": "sha512-8drMJ4rkgaPo1Me4zD/3WLfI/zPdA9o2IipKODunnGDcuqbHwjsbB79ylv04LCGGzU0xQ6vTznOMpQGaLhhm6A==", - "license": "MIT", "dependencies": { "logform": "^2.7.0", "readable-stream": "^3.6.2", @@ -9759,7 +9252,6 @@ "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -9768,14 +9260,12 @@ "version": "6.5.1", "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.5.1.tgz", "integrity": "sha512-Fs4dNYcsdpYSAfVxhnl1L5zTksjvOJxtC5hzMNl+1t9B8hTJTdKDyZ5ju7ztgPy+ft9tBFXoOlDNiOT9WUXZlA==", - "dev": true, - "license": "Apache-2.0" + "dev": true }, "node_modules/wrap-ansi": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "license": "MIT", "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", @@ -9791,15 +9281,13 @@ "node_modules/wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", - "license": "ISC" + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" }, "node_modules/write-file-atomic": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", "dev": true, - "license": "ISC", "dependencies": { "imurmurhash": "^0.1.4", "is-typedarray": "^1.0.0", @@ -9812,16 +9300,21 @@ "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-4.0.0.tgz", "integrity": "sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q==", "dev": true, - "license": "MIT", "engines": { "node": ">=8" } }, + "node_modules/xmlcreate": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/xmlcreate/-/xmlcreate-2.0.4.tgz", + "integrity": "sha512-nquOebG4sngPmGPICTS5EnxqhKbCmz5Ox5hsszI2T6U5qdrJizBc+0ilYSEjTSzU0yZcmvppztXe/5Al5fUwdg==", + "dev": true, + "license": "Apache-2.0" + }, "node_modules/xtend": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", - "license": "MIT", "engines": { "node": ">=0.4" } @@ -9830,7 +9323,6 @@ "version": "5.0.8", "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", - "license": "ISC", "engines": { "node": ">=10" } @@ -9839,15 +9331,13 @@ "version": "3.1.1", "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", - "dev": true, - "license": "ISC" + "dev": true }, "node_modules/yaml": { - "version": "1.10.3", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.3.tgz", - "integrity": "sha512-vIYeF1u3CjlhAFekPPAk2h/Kv4T3mAkMox5OymRiJQB0spDP10LHvt+K7G9Ny6NuuMAb25/6n1qyUjAcGNf/AA==", + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", + "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", "dev": true, - "license": "ISC", "engines": { "node": ">= 6" } @@ -9856,7 +9346,6 @@ "version": "0.3.0", "resolved": "https://registry.npmjs.org/yamljs/-/yamljs-0.3.0.tgz", "integrity": "sha512-C/FsVVhht4iPQYXOInoxUM/1ELSf9EsgKH34FofQOp6hwCPrW4vG4w5++TED3xRUo8gD7l0P1J1dLlDYzODsTQ==", - "license": "MIT", "dependencies": { "argparse": "^1.0.7", "glob": "^7.0.5" @@ -9866,55 +9355,11 @@ "yaml2json": "bin/yaml2json" } }, - "node_modules/yamljs/node_modules/brace-expansion": { - "version": "1.1.12", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", - "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/yamljs/node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "deprecated": "Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me", - "license": "ISC", - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/yamljs/node_modules/minimatch": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz", - "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==", - "license": "ISC", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, "node_modules/yargs": { "version": "16.2.0", "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", "dev": true, - "license": "MIT", "dependencies": { "cliui": "^7.0.2", "escalade": "^3.1.1", @@ -9933,7 +9378,6 @@ "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", "dev": true, - "license": "ISC", "engines": { "node": ">=10" } @@ -9943,7 +9387,6 @@ "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz", "integrity": "sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==", "dev": true, - "license": "MIT", "dependencies": { "camelcase": "^6.0.0", "decamelize": "^4.0.0", @@ -9959,7 +9402,6 @@ "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz", "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==", "dev": true, - "license": "MIT", "engines": { "node": ">=10" }, @@ -9972,7 +9414,6 @@ "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", "dev": true, - "license": "MIT", "engines": { "node": ">=10" }, diff --git a/package.json b/package.json index db746da22..bd055a3ba 100644 --- a/package.json +++ b/package.json @@ -20,6 +20,7 @@ "eslint-plugin-node": "^11.0.0", "eslint-plugin-promise": "^4.2.1", "eslint-plugin-standard": "^4.0.1", + "jsdoc": "^4.0.5", "mocha": "^10.8.2", "nyc": "^15.1.0", "sinon": "^15.0.4", @@ -53,6 +54,7 @@ "prompt-sync": "^4.2.0", "replace-in-file": "6.3.5", "replace-json-property": "^1.8.0", + "set.prototype.intersection": "^1.1.8", "swagger-autogen": "^2.19.0", "swagger-ui-express": "^4.3.0", "uuid": "^8.3.2", @@ -71,7 +73,7 @@ }, "scripts": { "action:test": "node node_modules/mocha/bin/mocha test/unit-tests --recursive --exit", - "action:coverage": "NODE_ENV=test node node_modules/nyc/bin/nyc.js --lines=80 node_modules/mocha/bin/mocha.js src/* --recursive --exit", + "action:coverage": "NODE_ENV=test MONGO_CONN_STRING=mongodb://localhost:27017 MONGO_DB_NAME=cve_test node node_modules/nyc/bin/nyc.js --lines=80 npm run test", "action:lint-src": "node node_modules/eslint/bin/eslint.js src/", "action:lint-test": "node node_modules/eslint/bin/eslint.js test/", "action:lint-test-utils": "node node_modules/eslint/bin/eslint.js test-utils/", @@ -79,13 +81,13 @@ "lint:src": "node node_modules/eslint/bin/eslint.js src/ --fix", "lint:test": "node node_modules/eslint/bin/eslint.js test/ --fix", "lint:test-utils": "node node_modules/eslint/bin/eslint.js test-utils/ --fix", - "populate:dev": "NODE_ENV=development node-dev src/scripts/populate.js", + "populate:dev": "NODE_ENV=development node-dev src/scripts/populate.mjs", "migrate:dev": "NODE_ENV=development MONGO_CONN_STRING=mongodb://localhost:27017 MONGO_DB_NAME=cve_dev node-dev src/scripts/migrate.js", "migrate:test-black-box": "NODE_ENV=development MONGO_CONN_STRING=mongodb://docdb:27017 MONGO_DB_NAME=cve_dev node-dev src/scripts/migrate.js", "migrate:test": "NODE_ENV=test MONGO_CONN_STRING=mongodb://localhost:27017 MONGO_DB_NAME=cve_test node-dev src/scripts/migrate.js", - "populate:stage": "NODE_ENV=staging node src/scripts/populate.js", - "populate:int": "NODE_ENV=integration node src/scripts/populate.js", - "populate:prd": "NODE_ENV=production node src/scripts/populate.js", + "populate:stage": "NODE_ENV=staging node src/scripts/populate.mjs", + "populate:int": "NODE_ENV=integration node src/scripts/populate.mjs", + "populate:prd": "NODE_ENV=production node src/scripts/populate.mjs", "populate-cve:dev": "NODE_ENV=development node-dev src/scripts/populate-cve.js", "populate-cve:stage": "NODE_ENV=staging node src/scripts/populate-cve.js", "populate-cve:int": "NODE_ENV=integration node src/scripts/populate-cve.js", @@ -98,10 +100,12 @@ "start:prd": "node src/swagger.js && NODE_ENV=production node src/scripts/updateOpenapiHost.js && NODE_ENV=production node src/index.js", "swagger-autogen": "node src/swagger.js", "test": "NODE_ENV=test mocha --recursive --exit || true", - "test:integration": "NODE_ENV=test node-dev src/scripts/populate.js y; NODE_ENV=test MONGO_CONN_STRING=mongodb://docdb:27017 MONGO_DB_NAME=cve_test node-dev src/scripts/migrate.js; NODE_ENV=test mocha test/integration-tests --recursive --exit", + "test:integration": "NODE_ENV=test node-dev src/scripts/populate.mjs y; NODE_ENV=test MONGO_CONN_STRING=mongodb://docdb:27017 MONGO_DB_NAME=cve_test node-dev src/scripts/migrate.js; NODE_ENV=test mocha test/integration-tests --exclude test/integration-tests/cve/authzValidation.js --recursive --exit && NODE_ENV=test mocha test/integration-tests/cve/authzValidation.js --recursive --exit", + "test:integration-local": "NODE_ENV=test node-dev src/scripts/populate.mjs y; NODE_ENV=test MONGO_CONN_STRING=mongodb://localhost:27017 MONGO_DB_NAME=cve_test node-dev src/scripts/migrate.js; NODE_ENV=test mocha test/integration-tests --exclude test/integration-tests/cve/authzValidation.js --recursive --exit && NODE_ENV=test mocha test/integration-tests/cve/authzValidation.js --recursive --exit", "test:unit-tests": "NODE_ENV=test mocha test/unit-tests --recursive --exit || true", "test:coverage": "NODE_ENV=test nyc --reporter=text mocha src/* --recursive --exit || true", "test:coverage-html": "NODE_ENV=test nyc --reporter=html mocha src/* --recursive --exit || true", - "test:scripts": "NODE_ENV=development node-dev src/scripts/templateScript.js" + "test:scripts": "NODE_ENV=development node-dev src/scripts/templateScript.js", + "doc:build": "jsdoc -c .jsdoc.json -r src/ -d jsdoc/" } } diff --git a/src/constants/index.js b/src/constants/index.js index b6f310d3e..e5dcf2a61 100644 --- a/src/constants/index.js +++ b/src/constants/index.js @@ -1,3 +1,7 @@ +/** + * @module constants + */ + const fs = require('fs') const cveSchemaV5 = JSON.parse(fs.readFileSync('src/middleware/schemas/CVE_JSON_5.2.0_bundled.json')) @@ -8,6 +12,7 @@ const cveSchemaV5 = JSON.parse(fs.readFileSync('src/middleware/schemas/CVE_JSON_ * value re-assignment and still allow IDE type-hints and compiled regex * * @return {defaults} + * @alias module:constants.getConstants */ function getConstants () { /** diff --git a/src/controller/audit.controller/audit.controller.js b/src/controller/audit.controller/audit.controller.js index dc1c8c8a5..456e2a830 100644 --- a/src/controller/audit.controller/audit.controller.js +++ b/src/controller/audit.controller/audit.controller.js @@ -1,3 +1,7 @@ +/** + * @module controller/audit/controller + */ + const mongoose = require('mongoose') const logger = require('../../middleware/logger') const errors = require('./error') diff --git a/src/controller/audit.controller/audit.middleware.js b/src/controller/audit.controller/audit.middleware.js index be7e1a3df..370b5b79c 100644 --- a/src/controller/audit.controller/audit.middleware.js +++ b/src/controller/audit.controller/audit.middleware.js @@ -1,3 +1,7 @@ +/** +* @module controller/audit/middleware + */ + const utils = require('../../utils/utils') /** diff --git a/src/controller/audit.controller/error.js b/src/controller/audit.controller/error.js index ba2747c73..b1b6b88fe 100644 --- a/src/controller/audit.controller/error.js +++ b/src/controller/audit.controller/error.js @@ -1,3 +1,7 @@ +/** + * @module controller/audit/error + */ + const idrErr = require('../../utils/error') class AuditControllerError extends idrErr.IDRError { diff --git a/src/controller/audit.controller/index.js b/src/controller/audit.controller/index.js index 10da8f70f..9cd602cba 100644 --- a/src/controller/audit.controller/index.js +++ b/src/controller/audit.controller/index.js @@ -1,3 +1,7 @@ +/** + * @module controller/audit + */ + const router = require('express').Router() const controller = require('./audit.controller') const mw = require('../../middleware/middleware') diff --git a/src/controller/conversation.controller/conversation.controller.js b/src/controller/conversation.controller/conversation.controller.js index 73d5335bf..9ce42e584 100644 --- a/src/controller/conversation.controller/conversation.controller.js +++ b/src/controller/conversation.controller/conversation.controller.js @@ -1,3 +1,7 @@ +/** + * @module controller/conversation/controller + */ + const mongoose = require('mongoose') const logger = require('../../middleware/logger') const getConstants = require('../../../src/constants').getConstants diff --git a/src/controller/conversation.controller/index.js b/src/controller/conversation.controller/index.js index 421cc8e5e..bbad93e5b 100644 --- a/src/controller/conversation.controller/index.js +++ b/src/controller/conversation.controller/index.js @@ -1,3 +1,7 @@ +/** + * @module controller/conversation + */ + const router = require('express').Router() const { param, query } = require('express-validator') const controller = require('./conversation.controller') diff --git a/src/controller/cve-id.controller/cve-id.controller.js b/src/controller/cve-id.controller/cve-id.controller.js index d31790710..4835d8e58 100644 --- a/src/controller/cve-id.controller/cve-id.controller.js +++ b/src/controller/cve-id.controller/cve-id.controller.js @@ -1,3 +1,7 @@ +/** + * @module controller/cve-id/controller + */ + require('dotenv').config() const CveId = require('../../model/cve-id') const logger = require('../../middleware/logger') @@ -578,9 +582,9 @@ async function sequentialReservation (year, amount, shortName, orgShortName, req isFull = true if (isPriority) { - logger.error(JSON.stringify({ message: 'The cve id priority and sequential blocks are full for year ' + year + '. No more priority or sequential ids can be reserved at this time.' })) + logger.error({ message: 'The cve id priority and sequential blocks are full for year ' + year + '. No more priority or sequential ids can be reserved at this time.' }) } else { - logger.error(JSON.stringify({ message: 'The cve id sequential block is full for year ' + year + '. No more sequential ids can be reserved at this time.' })) + logger.error({ message: 'The cve id sequential block is full for year ' + year + '. No more sequential ids can be reserved at this time.' }) } res.header(CONSTANTS.QUOTA_HEADER, availableIds) @@ -688,7 +692,7 @@ async function nonSequentialReservation (year, amount, shortName, orgShortName, isFull = result.isFull if (isFull) { - logger.error(JSON.stringify({ message: 'The cve id non-sequential block is full for year ' + year + '. No more sequential ids can be reserved at this time.' })) + logger.error({ message: 'The cve id non-sequential block is full for year ' + year + '. No more sequential ids can be reserved at this time.' }) res.header(CONSTANTS.QUOTA_HEADER, availableIds) return res.status(403).json(error.yearRangeFull(year)) } diff --git a/src/controller/cve-id.controller/cve-id.middleware.js b/src/controller/cve-id.controller/cve-id.middleware.js index e81545bb8..50ab0f9f7 100644 --- a/src/controller/cve-id.controller/cve-id.middleware.js +++ b/src/controller/cve-id.controller/cve-id.middleware.js @@ -1,3 +1,7 @@ +/** + * @module controller/cve-id/middleware + */ + const { validationResult } = require('express-validator') const errors = require('./error') const error = new errors.CveIdControllerError() diff --git a/src/controller/cve-id.controller/error.js b/src/controller/cve-id.controller/error.js index b668cd666..3fa4d9b90 100644 --- a/src/controller/cve-id.controller/error.js +++ b/src/controller/cve-id.controller/error.js @@ -1,3 +1,7 @@ +/** + * @module controller/cve-id/error + */ + const idrErr = require('../../utils/error') const getConstants = require('../../constants').getConstants diff --git a/src/controller/cve-id.controller/index.js b/src/controller/cve-id.controller/index.js index 93819b48d..e00226177 100644 --- a/src/controller/cve-id.controller/index.js +++ b/src/controller/cve-id.controller/index.js @@ -1,3 +1,7 @@ +/** + * @module controller/cve-id + */ + const express = require('express') const router = express.Router() const mw = require('../../middleware/middleware') diff --git a/src/controller/cve.controller/cve.controller.js b/src/controller/cve.controller/cve.controller.js index 86ce4b97e..2a2e32bce 100644 --- a/src/controller/cve.controller/cve.controller.js +++ b/src/controller/cve.controller/cve.controller.js @@ -1,3 +1,7 @@ +/** + * @module controller/cve/controller + */ + const Cve = require('../../model/cve') const logger = require('../../middleware/logger') const errors = require('./error') @@ -552,7 +556,7 @@ async function submitCna (req, res, next) { result = Cve.validateCveRecord(cveModel.cve) if (!result.isValid) { - logger.error(JSON.stringify({ uuid: req.ctx.uuid, message: 'CVE JSON schema validation FAILED.' })) + logger.error({ uuid: req.ctx.uuid, message: 'CVE JSON schema validation FAILED.' }) return res.status(400).json(error.invalidCnaContainerJsonSchema(result.errors)) } @@ -658,7 +662,7 @@ async function updateCna (req, res, next) { result = Cve.validateCveRecord(cveModel.cve) if (!result.isValid) { - logger.error(JSON.stringify({ uuid: req.ctx.uuid, message: 'CVE JSON schema validation FAILED.' })) + logger.error({ uuid: req.ctx.uuid, message: 'CVE JSON schema validation FAILED.' }) return res.status(400).json(error.invalidCnaContainerJsonSchema(result.errors)) } @@ -730,7 +734,7 @@ async function rejectCVE (req, res, next) { result = Cve.validateCveRecord(newCveObj.cve) if (!result.isValid) { - logger.error(JSON.stringify({ uuid: req.ctx.uuid, message: 'CVE JSON schema validation FAILED.' })) + logger.error({ uuid: req.ctx.uuid, message: 'CVE JSON schema validation FAILED.' }) return res.status(400).json(error.invalidCnaContainerJsonSchema(result.errors)) } @@ -805,7 +809,7 @@ async function rejectExistingCve (req, res, next) { result = Cve.validateCveRecord(updatedCve.cve) if (!result.isValid) { - logger.error(JSON.stringify({ uuid: req.ctx.uuid, message: 'CVE JSON schema validation FAILED.' })) + logger.error({ uuid: req.ctx.uuid, message: 'CVE JSON schema validation FAILED.' }) return res.status(400).json(error.invalidCnaContainerJsonSchema(result.errors)) } result = await cveRepo.updateByCveId(id, updatedCve) @@ -916,7 +920,7 @@ async function insertAdp (req, res, next) { const cveModel = new Cve({ cve: convertDatesToISO(cveRecord, CONSTANTS.DATE_FIELDS) }) result = Cve.validateCveRecord(cveModel.cve) if (!result.isValid) { - logger.error(JSON.stringify({ uuid: req.ctx.uuid, message: 'CVE JSON schema validation FAILED.' })) + logger.error({ uuid: req.ctx.uuid, message: 'CVE JSON schema validation FAILED.' }) return res.status(400).json(error.badAdpJson(result.errors)) } diff --git a/src/controller/cve.controller/cve.middleware.js b/src/controller/cve.controller/cve.middleware.js index 90b5a64e7..ba57a7b44 100644 --- a/src/controller/cve.controller/cve.middleware.js +++ b/src/controller/cve.controller/cve.middleware.js @@ -1,3 +1,7 @@ +/** + * @module controller/cve/middleware + */ + const { PackageURL } = require('packageurl-js') const { body, validationResult } = require('express-validator') const errors = require('./error') @@ -134,7 +138,7 @@ function validateCveCnaContainerJsonSchema (req, res, next) { const cnaContainer = req.body const result = validateCnaContainer(cnaContainer) if (!result) { - logger.error(JSON.stringify({ uuid: req.ctx.uuid, message: 'CVE JSON schema validation FAILED.' })) + logger.error({ uuid: req.ctx.uuid, message: 'CVE JSON schema validation FAILED.' }) const temp = validateCnaContainer.errors const errorsArray = [] temp.forEach((error) => { @@ -144,7 +148,7 @@ function validateCveCnaContainerJsonSchema (req, res, next) { }) return res.status(400).json(error.invalidCnaContainerJsonSchema(errorsArray)) } - logger.info(JSON.stringify({ uuid: req.ctx.uuid, message: 'SUCCESSFUL CVE JSON schema validation.' })) + logger.info({ uuid: req.ctx.uuid, message: 'SUCCESSFUL CVE JSON schema validation.' }) next() } diff --git a/src/controller/cve.controller/error.js b/src/controller/cve.controller/error.js index 2ccd9b3df..a7bf6e01a 100644 --- a/src/controller/cve.controller/error.js +++ b/src/controller/cve.controller/error.js @@ -1,3 +1,7 @@ +/** + * @module controller/cve/error + */ + const idrErr = require('../../utils/error') class CveControllerError extends idrErr.IDRError { diff --git a/src/controller/cve.controller/index.js b/src/controller/cve.controller/index.js index c5a78503e..8b5185f2f 100644 --- a/src/controller/cve.controller/index.js +++ b/src/controller/cve.controller/index.js @@ -1,10 +1,27 @@ +/** + * @module controller/cve + */ + const express = require('express') const router = express.Router() const mw = require('../../middleware/middleware') const errorMsgs = require('../../middleware/errorMessages') const controller = require('./cve.controller') const { body, param, query } = require('express-validator') -const { parseGetParams, parsePostParams, parseError, validateCveCnaContainerJsonSchema, validateCveAdpContainerJsonSchema, validateRejectBody, validateUniqueEnglishEntry, validateDescription, validateDatePublic, validateTimelineDates, validatePURL } = require('./cve.middleware') +const { + parseGetParams, + parsePostParams, + parseError, + validateCveCnaContainerJsonSchema, + validateCveAdpContainerJsonSchema, + validateRejectBody, + validateUniqueEnglishEntry, + validateDescription, + validateDatePublic, + validateTimelineDates, + validatePURL +} = require('./cve.middleware') +const { authz, orgHasRole, OrgRoles } = require('../../middleware/authz') const getConstants = require('../../constants').getConstants const CONSTANTS = getConstants() const CHOICES = [CONSTANTS.CVE_STATES.REJECTED, CONSTANTS.CVE_STATES.PUBLISHED] @@ -580,6 +597,10 @@ router.put('/cve/:id', } */ mw.validateUser, + mw.authzApiSelector({ + oldAuthz: mw.onlySecretariat, + newAuthz: authz(orgHasRole(OrgRoles.SECRETARIAT)) + }), mw.onlySecretariat, mw.trimJSONWhitespace, mw.validateCveJsonSchema, diff --git a/src/controller/org.controller/error.js b/src/controller/org.controller/error.js index 4c4df5fd3..99dfe5d18 100644 --- a/src/controller/org.controller/error.js +++ b/src/controller/org.controller/error.js @@ -1,3 +1,7 @@ +/** + * @module controller/org/error + */ + const idrErr = require('../../utils/error') class OrgControllerError extends idrErr.IDRError { diff --git a/src/controller/org.controller/index.js b/src/controller/org.controller/index.js index 15a1b7cc9..9815fa66e 100644 --- a/src/controller/org.controller/index.js +++ b/src/controller/org.controller/index.js @@ -1,3 +1,7 @@ +/** + * @module controller/org + */ + const express = require('express') const router = express.Router() const mw = require('../../middleware/middleware') diff --git a/src/controller/org.controller/org.controller.js b/src/controller/org.controller/org.controller.js index 297887707..9233752db 100644 --- a/src/controller/org.controller/org.controller.js +++ b/src/controller/org.controller/org.controller.js @@ -1,3 +1,7 @@ +/** + * @module controller/org/controller + */ + require('dotenv').config() const mongoose = require('mongoose') const logger = require('../../middleware/logger') @@ -251,7 +255,7 @@ async function createOrg (req, res, next) { // If we are creating an org via the registry flag, we can do a full validation. const result = await repo.validateOrg(body, { session }) if (!result.isValid) { - logger.error(JSON.stringify({ uuid: req.ctx.uuid, message: 'CVE JSON schema validation FAILED.' })) + logger.error({ uuid: req.ctx.uuid, message: 'CVE JSON schema validation FAILED.' }) await session.abortTransaction() if (!Array.isArray(body?.authority) || body?.authority.some(item => typeof item !== 'string')) { return res.status(400).json({ error: 'BAD_INPUT', message: 'Parameters were invalid', details: [{ param: 'authority', msg: 'Parameter must be a one-dimensional array of strings' }] }) @@ -420,7 +424,7 @@ async function createUser (req, res, next) { return res.status(400).json({ message: 'Parameters were invalid', details: [{ param: 'role', msg: `Role must be one of the following: ${constants.USER_ROLES}` }] }) } if (!result.isValid) { - logger.error(JSON.stringify({ uuid: req.ctx.uuid, message: 'User JSON schema validation FAILED.' })) + logger.error({ uuid: req.ctx.uuid, message: 'User JSON schema validation FAILED.' }) await session.abortTransaction() return res.status(400).json({ message: 'Parameters were invalid', errors: result.errors }) } diff --git a/src/controller/org.controller/org.middleware.js b/src/controller/org.controller/org.middleware.js index 1b0dd358c..737a0116e 100644 --- a/src/controller/org.controller/org.middleware.js +++ b/src/controller/org.controller/org.middleware.js @@ -1,3 +1,7 @@ +/** + * @module controller/org/middleware + */ + const getConstants = require('../../constants').getConstants const { validationResult } = require('express-validator') const errors = require('./error') diff --git a/src/controller/registry-org.controller/error.js b/src/controller/registry-org.controller/error.js index d4af5f1e6..371a97f88 100644 --- a/src/controller/registry-org.controller/error.js +++ b/src/controller/registry-org.controller/error.js @@ -1,3 +1,7 @@ +/** + * @module controller/registry-org/error + */ + const idrErr = require('../../utils/error') class RegistryOrgControllerError extends idrErr.IDRError { diff --git a/src/controller/registry-org.controller/index.js b/src/controller/registry-org.controller/index.js index efd75791b..c3f014ab0 100644 --- a/src/controller/registry-org.controller/index.js +++ b/src/controller/registry-org.controller/index.js @@ -1,3 +1,7 @@ +/** + * @module controller/registry-org + */ + const express = require('express') const router = express.Router() const mw = require('../../middleware/middleware') diff --git a/src/controller/registry-org.controller/registry-org.controller.js b/src/controller/registry-org.controller/registry-org.controller.js index 7484b3e27..4ebfbab59 100644 --- a/src/controller/registry-org.controller/registry-org.controller.js +++ b/src/controller/registry-org.controller/registry-org.controller.js @@ -1,3 +1,7 @@ +/** + * @module controller/registry-org/controller + */ + const mongoose = require('mongoose') const logger = require('../../middleware/logger') const { getConstants } = require('../../constants') @@ -148,7 +152,7 @@ async function createOrg (req, res, next) { session.startTransaction() const result = repo.validateOrg(body, { session }) if (!result.isValid) { - logger.error(JSON.stringify({ uuid: req.ctx.uuid, message: 'CVE JSON schema validation FAILED.' })) + logger.error({ uuid: req.ctx.uuid, message: 'CVE JSON schema validation FAILED.' }) await session.abortTransaction() if (!Array.isArray(body?.authority) || body?.authority.some(item => typeof item !== 'string')) { return res.status(400).json({ error: 'BAD_INPUT', message: 'Parameters were invalid', details: [{ param: 'authority', msg: 'Parameter must be a one-dimensional array of strings' }] }) @@ -281,7 +285,7 @@ async function updateOrg (req, res, next) { const result = repo.validateOrg(body, { session }) if (!result.isValid) { - logger.error(JSON.stringify({ uuid: req.ctx.uuid, message: 'CVE JSON schema validation FAILED.' })) + logger.error({ uuid: req.ctx.uuid, message: 'CVE JSON schema validation FAILED.' }) await session.abortTransaction() return res.status(400).json({ message: 'Parameters were invalid', errors: result.errors }) } @@ -537,7 +541,7 @@ async function createUserByOrg (req, res, next) { return res.status(400).json({ message: 'Parameters were invalid', details: [{ param: 'role', msg: 'Parameter must be a string' }] }) } if (!result.isValid) { - logger.error(JSON.stringify({ uuid: req.ctx.uuid, message: 'User JSON schema validation FAILED.' })) + logger.error({ uuid: req.ctx.uuid, message: 'User JSON schema validation FAILED.' }) await session.abortTransaction() return res.status(400).json({ message: 'Parameters were invalid', errors: result.errors }) } diff --git a/src/controller/registry-org.controller/registry-org.middleware.js b/src/controller/registry-org.controller/registry-org.middleware.js index b6ac49ca4..006ebec96 100644 --- a/src/controller/registry-org.controller/registry-org.middleware.js +++ b/src/controller/registry-org.controller/registry-org.middleware.js @@ -1,3 +1,7 @@ +/** + * @module controller/registry-org/middleware + */ + const utils = require('../../utils/utils') const getConstants = require('../../constants').getConstants const { validationResult } = require('express-validator') diff --git a/src/controller/registry-user.controller/index.js b/src/controller/registry-user.controller/index.js index 872c6fe11..d7458cea8 100644 --- a/src/controller/registry-user.controller/index.js +++ b/src/controller/registry-user.controller/index.js @@ -1,3 +1,7 @@ +/** + * @module controller/registry-user + */ + const express = require('express') const router = express.Router() const mw = require('../../middleware/middleware') diff --git a/src/controller/registry-user.controller/registry-user.controller.js b/src/controller/registry-user.controller/registry-user.controller.js index fdfa630a8..0753bbbcf 100644 --- a/src/controller/registry-user.controller/registry-user.controller.js +++ b/src/controller/registry-user.controller/registry-user.controller.js @@ -1,3 +1,7 @@ +/** + * @module controller/registry-user/controller + */ + const mongoose = require('mongoose') const logger = require('../../middleware/logger') const { getConstants } = require('../../constants') @@ -168,7 +172,7 @@ async function createUser (req, res, next) { return res.status(400).json({ message: 'Parameters were invalid', details: [{ param: 'role', msg: 'Parameter must be a string' }] }) } if (!result.isValid) { - logger.error(JSON.stringify({ uuid: req.ctx.uuid, message: 'User JSON schema validation FAILED.' })) + logger.error({ uuid: req.ctx.uuid, message: 'User JSON schema validation FAILED.' }) await session.abortTransaction() return res.status(400).json({ message: 'Parameters were invalid', errors: result.errors }) } @@ -318,7 +322,7 @@ async function updateUser (req, res, next) { result = await userRepo.validateUser(body) if (!result.isValid) { - logger.error(JSON.stringify({ uuid: req.ctx.uuid, message: 'User JSON schema validation FAILED.' })) + logger.error({ uuid: req.ctx.uuid, message: 'User JSON schema validation FAILED.' }) await session.abortTransaction() return res.status(400).json({ message: 'Parameters were invalid', errors: result.errors }) } diff --git a/src/controller/registry-user.controller/registry-user.middleware.js b/src/controller/registry-user.controller/registry-user.middleware.js index 6b30b69e0..3fd89db3d 100644 --- a/src/controller/registry-user.controller/registry-user.middleware.js +++ b/src/controller/registry-user.controller/registry-user.middleware.js @@ -1,3 +1,7 @@ +/** + * @module controller/registry-user/middleware + */ + const utils = require('../../utils/utils') function parsePostParams (req, res, next) { diff --git a/src/controller/review-object.controller/index.js b/src/controller/review-object.controller/index.js index 702da7529..bb1d14b9e 100644 --- a/src/controller/review-object.controller/index.js +++ b/src/controller/review-object.controller/index.js @@ -1,3 +1,7 @@ +/** + * @module controller/review-object + */ + const router = require('express').Router() const { query } = require('express-validator') const controller = require('./review-object.controller') diff --git a/src/controller/review-object.controller/review-object.controller.js b/src/controller/review-object.controller/review-object.controller.js index 8bf0b5540..5f962ee44 100644 --- a/src/controller/review-object.controller/review-object.controller.js +++ b/src/controller/review-object.controller/review-object.controller.js @@ -1,3 +1,6 @@ +/** + * @module controller/review-object/controller + */ const validateUUID = require('uuid').validate const mongoose = require('mongoose') diff --git a/src/controller/schemas.controller/index.js b/src/controller/schemas.controller/index.js index f410c7395..ef1ae0af5 100644 --- a/src/controller/schemas.controller/index.js +++ b/src/controller/schemas.controller/index.js @@ -1,3 +1,7 @@ +/** + * @module controller/schemas + */ + const express = require('express') const router = express.Router() const controller = require('./schemas.controller') diff --git a/src/controller/schemas.controller/schemas.controller.js b/src/controller/schemas.controller/schemas.controller.js index fca920c92..a25aed731 100644 --- a/src/controller/schemas.controller/schemas.controller.js +++ b/src/controller/schemas.controller/schemas.controller.js @@ -1,3 +1,6 @@ +/** + * @module controller/schemas/controller + */ // Schemas relating to CVE records async function getCreateCveRecordResponseSchema (req, res) { diff --git a/src/controller/system.controller/index.js b/src/controller/system.controller/index.js index 410e232e0..3beeeb3d5 100644 --- a/src/controller/system.controller/index.js +++ b/src/controller/system.controller/index.js @@ -1,3 +1,7 @@ +/** + * @module controller/system + */ + const express = require('express') const router = express.Router() const controller = require('./system.controller') diff --git a/src/controller/system.controller/system.controller.js b/src/controller/system.controller/system.controller.js index 09765b4c3..a8ca5463a 100644 --- a/src/controller/system.controller/system.controller.js +++ b/src/controller/system.controller/system.controller.js @@ -1,3 +1,6 @@ +/** + * @module controller/system/controller + */ async function healthCheck (req, res) { res.status(200).send() diff --git a/src/controller/user.controller/error.js b/src/controller/user.controller/error.js index 11ab679b2..58a441977 100644 --- a/src/controller/user.controller/error.js +++ b/src/controller/user.controller/error.js @@ -1,3 +1,7 @@ +/** + * @module controller/user/error + */ + const idrErr = require('../../utils/error') class UserControllerError extends idrErr.IDRError { diff --git a/src/controller/user.controller/index.js b/src/controller/user.controller/index.js index c7d4a73d8..ccd81e99f 100644 --- a/src/controller/user.controller/index.js +++ b/src/controller/user.controller/index.js @@ -1,3 +1,7 @@ +/** + * @module controller/user + */ + const express = require('express') const router = express.Router() const mw = require('../../middleware/middleware') diff --git a/src/controller/user.controller/user.controller.js b/src/controller/user.controller/user.controller.js index a4b28b669..d7ce668bf 100644 --- a/src/controller/user.controller/user.controller.js +++ b/src/controller/user.controller/user.controller.js @@ -1,3 +1,6 @@ +/** + * @module controller/user/controller + */ require('dotenv').config() const mongoose = require('mongoose') diff --git a/src/controller/user.controller/user.middleware.js b/src/controller/user.controller/user.middleware.js index e9477fb70..92ff314b5 100644 --- a/src/controller/user.controller/user.middleware.js +++ b/src/controller/user.controller/user.middleware.js @@ -1,3 +1,7 @@ +/** + * @module controller/user/middleware + */ + const { validationResult } = require('express-validator') const errors = require('./error') const error = new errors.UserControllerError() diff --git a/src/index.js b/src/index.js index fa8ddf843..be6ddf28e 100644 --- a/src/index.js +++ b/src/index.js @@ -46,6 +46,9 @@ app.use((req, res, next) => { res.status(404).json(error.notFound()) }) +// TODO(alilleybrinker): Remove this when done testing the new Authz API. +app.set('useNewAuthzApi', false) + // Connect to MongoDB database const dbConnectionStr = dbUtils.getMongoConnectionString() const dbConnectionOptions = dbUtils.getMongoConnectionOptions() diff --git a/src/middleware/authz.js b/src/middleware/authz.js new file mode 100644 index 000000000..f268f177c --- /dev/null +++ b/src/middleware/authz.js @@ -0,0 +1,962 @@ +/** + * # Authorization API + * + * This module contains a unified API for performing authorization checks in + * the CVE Services application. + * + * Checks are performed with two authorization functions: + * + * - __[`authz`]{@link module:middleware/authz.authz}__: Perform "hard" + * authorization, rejecting requests that fail the authorization checks. + * - __[`authzLevel`]{@link module:middleware/authz.authzLevel}__: Perform + * "soft" authorization, annotating requests with the result of the + * authorization checks. + * + * Currently, there are five authorization checks available: + * + * - __[`orgHasRole`]{@link module:middleware/authz.orgHasRole}__: check the + * requesting user's organization has one of the specified roles. + * - __[`orgMatches`]{@link module:middleware/authz.orgMatches}__: check the + * requesting user's organization matches the target organization for the + * request. + * - __[`orgOwns`]{@link module:middleware/authz.orgOwns}__: check the + * requesting user's organization owns the target CVE ID. + * - __[`userHasRole`]{@link module:middleware/authz.userHasRole}__: check the + * requesting user has one of the specified roles. + * - __[`userMatches`]{@link module:middleware/authz.userMatches}__: check the + * requesting user matches the target user for the request. + * + * Plus two "check combinator" functions, to use when some combination of + * checks are required: + * + * - __[`every`]{@link module:middleware/authz.every}__: combine checks, + * succeeding if all succeed. + * - __[`some`]{@link module:middleware/authz.some}__: combine checks, + * succeeding if any succeed. + * + * Finally, there are two enumerations that define the roles available to + * users and organizations: + * + * - __[`OrgRoles`]{@link module:middleware/authz.OrgRoles}__: enumeration of + * roles that organizations can have. + * - __[`UserRoles`]{@link module:middleware/authz.UserRoles}__: enumeration of + * roles that users can have. + * + * The goal of this API is to be the _singular_ mechanism for defining + * authorization checks. If new authorization checks are required, they should + * be added here, rather than being performed in another middleware or added + * ad-hoc to a request handler. + * + * @module + */ + +const intersection = require('set.prototype.intersection') +const { getConstants } = require('../constants/index.js') +const { MiddlewareError } = require('./error.js') +const logger = require('./logger.js') + +// Apply intersection shim so Set.intersection works on older Node versions +intersection.shim() + +// Preload middleware errors and global system constants. +const mwError = new MiddlewareError() +const constants = getConstants() + +// =========================================================================== +// Authz Middleware Producers +// +// Functions that take in checks and return middleware to apply them to reqs. +// -------------------------------------------------------------------------*/ + +/** + * @external Middleware + * @private + */ + +/** + * An error arising from a middleware function. + * + * The full definitions are found in {@link module:middleware/error}. + * + * @typedef MwError + * @type {object} + * @property {string} error Unique string identifying the error kind. + * @property {string} message Human-readable message describing the error. + */ + +/** + * Construct middleware to run authorization checks. Reject request if the + * check fails. + * + * Optionally accepts an `overrideError`, which will override the underlying + * error value if authorization fails. This is useful where we want to preserve + * compatibility with existing authorization logic by ensuring we return the + * same error to users, and also want to be able to log more granular errors + * internally. In the case of an override, the original error will be logged, + * while the `overrideError` is returned to the user. + * + * __Example:__ + * + * ``` + * authz( + * every( + * orgHasRole(OrgRoles.SECRETARIAT, OrgRoles.BULK_DOWNLOAD), + * userHasRole(UserRoles.ADMIN), + * orgMatches((req) => req.params.orgId), + * userMatches((req) => req.params.userId), + * orgOwns((req) => req.params.cveId) + * ) + * ) + * ``` + * + * @param {Check} check The check to run. + * @param {?MwError} overrideError The error to override underlying errors with. + * @returns {Middleware} middleware which will apply the check to each request. + * @alias module:middleware/authz.authz + */ +function authz (check, overrideError = null) { + return async function (req, res, next) { + // Every request comes with some basic information pre-filled by previous + // middleware, including the user's verified username and organization + // shortname. However, for some checks we need additional information + // from the database, such as the full organization object for the + // requesting user's organization. + // + // To make sure we only get these extra pieces of information once, checks + // carry metadata that describes what they need, and if _any_ check needs + // a specific piece of data to be prefilled, we prefill it here. + // + // We attach this preloaded data to the request context so it can be + // accessed by subsequent middleware. + + logger.info({ + message: 'performing authz check', + check: check.name, + checkNeedsOrgData: check.needsOrgData, + checkNeedsUserData: check.needsUserData, + user: req.ctx.user, + org: req.ctx.org, + uuid: req.ctx.uuid + }) + + if (check.needsOrgData) { + const orgData = await getReqOrgData(req) + if (orgData == null) return authzError(res, mwError.orgDoesNotExist(req.ctx.org)) + req.ctx.orgData = orgData + } + + if (check.needsUserData) { + const userData = await getReqUserData(req) + if (userData == null) return authzError(res, mwError.userDoesNotExist(req.ctx.user)) + req.ctx.userData = userData + } + + const error = await check.run(req) + + if (error) { + // Log the original error if we're overriding it. + if (overrideError) { + logger.error({ + message: `overriding error '${error}'`, + uuid: req.ctx.uuid + }) + } + + logger.error({ + message: overrideError ?? error, + uuid: req.ctx.uuid + }) + + return authzError(res, overrideError ?? error) + } + + next() + } +} + +/** + * An object mapping from authorization level identifiers to checks. + * + * This is the "raw" version of the internal `CheckLevels` object, which + * wraps a `Map.`. When passed to `authzLevels`, it's parsed + * into `CheckLevels`. + * + * __Example:__ + * + * ``` + * { + * "secretariat": orgHasRole(OrgRoles.SECRETARIAT), + * "bulkDownload": orgHasRole(OrgRoles.BULK_DOWNLOAD), + * } + * ``` + * + * @typedef {Object.} RawCheckLevels + */ + +/** + * Check the authorization level of the request, tagging the request object + * with it. + * + * Similar to `authz`, but instead sets `req.ctx.authzLevel` based on which + * authz check passed first. It takes in mappings from an "authz level" to + * a check, and applies them. + * + * Checks are applied in order, so for example, in the sample code below, if + * the requirements for "secretariat" all pass, then `req.ctx.authzLevel` will + * be equal to `"secretariat"` and the checks for `"issuer"` will not be run. + * Put another way: users run at the highest permission level whose check they + * pass. + * + * This API does *not* include the ability to override errors, as all errors + * will only be logged, and failed authorization only results in + * `req.ctx.authzLevel` being set to `null`. __If you need authorization to + * fail, you should use [`authz`]{@link module:middleware/authz.authz} + * instead.__ + * + * __Example:__ + * + * ``` + * authzLevel({ + * "secretariat": orgHasRole(OrgRoles.SECRETARIAT), + * "issuer": every( + * orgOwns((req) => req.params.cveId), + * orgHasRole(OrgRoles.SECRETARIAT, OrgRoles.BULK_DOWNLOAD), + * userHasRole(UserRoles.ADMIN), + * orgMatches((req) => req.params.orgId), + * userMatches((req) => req.params.userId) + * ) + * }) + * ``` + * + * @param {CheckLevels} rawCheckLevels The mapping of authz levels to checks. + * @returns {Middleware} + * @alias module:middleware/authz.authzLevel + */ +function authzLevel (rawCheckLevels) { + const checkLevels = new CheckLevels(rawCheckLevels) + + return async function (req, res, next) { + if (checkLevels.needsOrgData()) { + const orgData = await getReqOrgData(req) + if (orgData == null) return authzError(res, mwError.orgDoesNotExist(req.ctx.org)) + req.ctx.orgData = orgData + } + + if (checkLevels.needsUserData()) { + const userData = await getReqUserData(req) + if (userData == null) return authzError(res, mwError.userDoesNotExist(req.ctx.user)) + req.ctx.userData = userData + } + + // To simplify life for later middleware, make sure in the failed authz + // case that `authzLevel` is `null` rather than `undefined`. + if (req.ctx.authzLevel == null) req.ctx.authzLevel = null + + for (const [authzLevelId, check] in checkLevels) { + const error = await check.run(req) + + if (error == null) { + // Only set this once, as we expect the spec entries to be in order of + // decreasing authorization, and we want to grant the highest valid + // authz level for a user. + if (req.ctx.authzLevel == null) req.ctx.authzLevel = authzLevelId + + // Don't run more authorization checks once one of them passes. + break + } + + // Log the error and then check the next authz level. + logger.error({ message: error, uuid: req.ctx.uuid }) + } + + next() + } +} + +/** + * Package up an error as an HTTP 403 response. + * @param {object} res The response object from Express + * @param {MwError} mwError The error we're returning + * @returns an updated response object carrying the error + * @private + */ +function authzError (res, mwError) { + return res.status(403).json(mwError) +} + +// =========================================================================== +// Request Getters +// +// Functions for getting data from the database based on request parameters. +// -------------------------------------------------------------------------*/ + +/** + * @typedef Org + * @type {object} + * @private + */ + +/** + * Get the requesting user's organization. + * + * @param {Request} req The request object. + * @returns {Promise} + * @private + */ +async function getReqOrgData (req) { + return await req + .ctx + .repositories + .getBaseOrgRepository() + .findOneByShortName(req.ctx.org) +} + +/** + * @typedef User + * @type {object} + * @private + */ + +/** + * Get the requesting user. + * + * @param {Request} req The request object. + * @returns {Promise} + * @private + */ +async function getReqUserData (req) { + return await req + .ctx + .repositories + .getBaseUserRepository() + .findOneByUsernameAndOrgShortname(req.ctx.user, req.ctx.org) +} + +/** + * @typedef CveId + * @type {object} + * @private + */ + +/** + * Get the CVE ID entry by the CVE ID. + * + * @param {Request} req The request object. + * @param {string} cveId The CVE ID. + * @returns {Promise} + * @private + */ +async function getReqCveIdData (req, cveId) { + return await req + .ctx + .repositories + .getCveIdRepository() + .findOneByCveId(cveId) +} + +// =========================================================================== +// Checks +// +// The actual authorization checks, encapsulated in a private class called +// `Check`. This includes both plain checks and check combinators (`some` and +// `every`). +// -------------------------------------------------------------------------*/ + +/** + * An authorization check. + * + * This type encapsulates authorization checks performed on incoming requests, + * with two functions to use: the check function itself, and an error handler + * to run if the check function fails. + * + * @private + */ +class Check { + /** + * The name of the check, for logging. + * @type {string} + */ + #name + + /** + * The check function to run. + * @type {CheckFn} + */ + #check + + /** + * Indicates if the check requires org data from the database. + * @type {boolean} + */ + #needsOrgData + + /** + * Indicates if the check requires user data from the database. + * @type {boolean} + */ + #needsUserData + + /** + * @callback CheckFn + * @param {Request} req The request object. + * @return {Promise} + * @private + */ + + /** + * Construct a new check from a check function and error function. + * + * @param {Object} options Options for the check. + * @param {string} options.name Name of the check being run, for debugging. + * @param {CheckFn} options.check Function to run to check the request's + * authorization. + * @param {?boolean} options.needsOrgData Whether the check requires organization data. + * @param {?boolean} options.needsUserData Whether the check requires user data. + */ + constructor (options) { + this.#name = options.name + this.#check = options.check + this.#needsOrgData = options.needsOrgData ?? false + this.#needsUserData = options.needsUserData ?? false + } + + /** + * See if the check needs a request's organization. + * @returns {boolean} if the check needs a request's organization. + */ + needsOrgData () { + return this.#needsOrgData + } + + /** + * See if the check needs a request's user. + * @returns {boolean} if the check needs a request's user. + */ + needsUserData () { + return this.#needsUserData + } + + /** + * Run the check function, returning the result of running the error + * function if the check fails. + * + * @param {Request} req The request sent by a user. + * @returns {Promise} + */ + async run (req) { + logger.debug({ message: `Running check ${this.#name}`, uuid: req.ctx.uuid }) + const result = await this.#check(req) + const resultStr = (result == null) ? 'passed' : 'failed' + logger.debug({ message: `Check ${this.#name} ${resultStr}`, uuid: req.ctx.uuid }) + // Convert `undefined` to `null`. For convenience, we let the underlying + // `CheckFn` return `undefined` to indicate success, but it's probably + // clearer to return `null` to callers for success. + return result ?? null + } +} + +/** + * Check that all sub-checks pass. + * + * Returns the first error if any check fails. All errors are logged. + * + * __Example:__ + * + * ``` + * authz( + * every( + * orgMatches((req) => req.params.orgId), + * userMatches((req) => req.params.userId) + * ) + * ) + * ``` + * + * @param {...Check} checks The sub-checks to run. + * @returns {Check} + * @alias module:middleware/authz.every + */ +function every (...checks) { + const reducer = makeCheckReducer( + 'every', + // Fail if any check failed. + (_checks, errors) => errors.length !== 0 + ) + + return reducer(...checks) +} + +/** + * Check that at least one of the sub-checks passes. + * + * Returns only the first error if no check passes. All errors are logged. + * + * __Example:__ + * + * ``` + * authz( + * some( + * orgHasRole(OrgRoles.SECRETARIAT), + * every( + * orgOwns((req) => req.params.cveId), + * userHasRole(UserRoles.ADMIN) + * ) + * ) + * ) + * ``` + * + * @param {...Check} checks The sub-checks to run. + * @returns {Check} + * @alias module:middleware/authz.some + */ +function some (...checks) { + const reducer = makeCheckReducer( + 'some', + // Fail if all checks failed. + (checks, errors) => errors.length === checks.length + ) + + return reducer(...checks) +} + +/** + * @callback ConditionFn + * @param {...Check} checks The checks being run by the reducer. + * @param {Array} errors The errors collected by the reducer. + * @return {boolean} whether the reducer passes. + * @private + */ + +/** + * Construct a reducer for checks that properly forwards needs and handles errors. + * @param {string} name The name of the reducer. + * @param {ConditionFn} errCondition The condition function to determine if the reducer fails. + * @returns a function which returns the check itself. + * @private + */ +function makeCheckReducer (name, errCondition) { + return (...checks) => { + return new Check({ + name, + + needsOrgData: checks.reduce((ac, ch) => ac || ch.needsOrgData(), false), + needsUserData: checks.reduce((ac, ch) => ac || ch.needsUserData(), false), + + async check (req) { + const errors = [] + + for (const check of checks) { + const result = await check.run(req) + if (result != null) errors.push(result) + } + + if (errCondition(checks, errors)) { + // Still log the full set of errors. + const errorStr = errors.map(error => error.message).join(', ') + logger.error({ + message: `multiple authz errors: '${errorStr}'`, + uuid: req.ctx.uuid + }) + + // Only return the first error. + return errors[0] + } + } + }) + } +} + +/** + * Function for getting the requesting user's organization shortname from the request object. + * + * __Example:__ + * + * ``` + * authz( + * orgMatches((req) => req.params.orgId) + * ) + * ``` + * + * @callback GetOrgShortnameFromReq + * @param {Request} req The request object. + * @return {string} The shortname of the requesting user's organiztion. + */ + +/** + * Check that requesting user's organization matches the target organization. + * + * Takes a closure which extracts the target organization's shortname from the + * request object. The location of the org shortname in the request is + * endpoint-specific. + * + * __Example:__ + * + * ``` + * authz( + * orgMatches((req) => req.params.orgId) + * ) + * ``` + * + * @param {GetOrgShortnameFromReq} reqOrgShortnameGetter + * @returns {Check} + * @alias module:middleware/authz.orgMatches + */ +function orgMatches (reqOrgShortnameGetter) { + return new Check({ + name: 'orgMatches', + needsOrgData: false, + needsUserData: false, + + async check (req) { + if (reqOrgShortnameGetter(req) !== req.ctx.org) { + return mwError.orgDoesNotMatch(req.ctx.org, reqOrgShortnameGetter(req)) + } + } + }) +} + +/** + * Function for getting the requesting user's username from the request object. + * + * __Example:__ + * + * ``` + * authz( + * userMatches((req) => req.params.userId) + * ) + * ``` + * + * @callback GetUsernameFromReq + * @param {Request} req The request object. + * @return {string} the requesting user's username extracted from the request. + */ + +/** + * Check that requesting user matches the target user. + * + * Takes a closure which extracts the target username from the request + * object. The location of the target username in the request is + * endpoint-specific. + * + * __Example:__ + * + * ``` + * authz( + * userMatches((req) => req.params.userId) + * ) + * ``` + * + * @param {GetUsernameFromReq} reqUsernameGetter Getter for the requesting user's + * username. + * @returns {Check} + * @alias module:middleware/authz.userMatches + */ +function userMatches (reqUsernameGetter) { + return new Check({ + name: 'userMatches', + needsOrgData: false, + needsUserData: false, + + async check (req) { + if (reqUsernameGetter(req) !== req.ctx.user) { + return mwError.userDoesNotMatch(req.ctx.user, reqUsernameGetter(req)) + } + } + }) +} + +/** + * Check that requesting user's organization has at least one of the required + * roles. + * + * __Example:__ + * + * ``` + * authz( + * orgHasRole(OrgRoles.SECRETARIAT, OrgRoles.BULK_DOWNLOAD) + * ) + * ``` + * + * @param {...OrgRoles} roles The required roles. + * @returns {Check} a check that validates the requesting user's organization + * has at least one of the required roles. + * @alias module:middleware/authz.orgHasRole + */ +function orgHasRole (...roles) { + const allowedRoles = new Set(roles) + + return new Check({ + name: 'orgHasRole', + needsOrgData: true, + needsUserData: false, + + async check (req) { + const orgRoles = new Set(req.ctx.orgData.authority) + + logger.debug({ + message: 'checking organization roles', + orgRoles: req.ctx.orgData.authority, + allowedRoles: Array.from(allowedRoles), + uuid: req.ctx.uuid + }) + + const matchingRoles = orgRoles.intersection(allowedRoles) + + logger.debug({ + message: 'matching roles', + matchingRoles: Array.from(matchingRoles), + uuid: req.ctx.uuid + }) + + if (matchingRoles.size === 0) { + return mwError.orgLacksRoles(req.ctx.org, roles) + } + } + }) +} + +/** + * Check that requesting user has at least one of the required roles. + * + * __Example:__ + * + * ``` + * authz( + * userHasRole(UserRoles.ADMIN) + * ) + * ``` + * + * @param {...UserRoles} roles The required roles. + * @returns {Check} a check that validates the requesting user has at least one + * of the required roles. + * @alias module:middleware/authz.userHasRole + */ +function userHasRole (...roles) { + const allowedRoles = new Set(roles) + + return new Check({ + name: 'userHasRole', + needsOrgData: false, + needsUserData: true, + + async check (req) { + logger.debug({ + message: 'checking user role', + userRole: req.ctx.userData.role, + allowedRoles: Array.from(allowedRoles), + uuid: req.ctx.uuid + }) + + const hasMatchingRoles = allowedRoles.has(req.ctx.userData.role) + + logger.debug({ + message: 'matching roles', + hasMatchingRoles, + uuid: req.ctx.uuid + }) + + if (!hasMatchingRoles) { + return mwError.userLacksRoles(req.ctx.user, roles) + } + } + }) +} + +/** + * Function for getting the target CVE ID from the request object. + * + * __Example:__ + * + * ``` + * authz( + * orgOwns((req) => req.params.cveId) + * ) + * ``` + * + * @callback GetCveIdFromReq + * @param {Request} req The request object. + * @return {string} The target CVE ID from the request. + */ + +/** + * Check that requesting user's organization matches the issuing CNA of the + * target CVE or CVE ID. + * + * Takes a closure which extracts the CVE ID of the target CVE from the + * request object. The location of the CVE ID in the request is + * endpoint-specific. + * + * __Example:__ + * + * ``` + * authz( + * orgOwns((req) => req.params.cveId) + * ) + * ``` + * + * @param {GetCveIdFromReq} reqTargetCveIdGetter Get the target CVE ID from the + * request. + * @returns {Check} a check that validates the requesting user's organization + * matches the issuing CNA of the target CVE. + * @alias module:middleware/authz.orgOwns + */ +function orgOwns (reqTargetCveIdGetter) { + return new Check({ + name: 'orgOwns', + needsOrgData: false, + needsUserData: false, + + async check (req) { + // Caching, only fetch the full cveIdData if we don't have it already. + // + // Note that this is done on the check itself, and not in the middleware + // producer, unlike the equivalent logic for users or orgs. That's + // because the CVE ID data is route-specific, unlike user and org which + // come from universally-required request headers. Because the CVE ID + // data is route-specific, the caller of `orgOwns` provides a callback + // to extract it from the request, and that callback isn't available + // inside of `authz` or `authzLevel`, so the cache-filling must happen + // here instead. + if (req.ctx.cveIdData == null) { + const cveId = reqTargetCveIdGetter(req) + + const cveIdData = await getReqCveIdData(req, cveId) + if (cveIdData == null) return mwError.cveIdDoesNotExist(cveId) + + req.ctx.cveIdData = cveIdData + } + + if (req.ctx.cveIdData.owning_cna !== req.ctx.org) { + return mwError.orgDoesNotOwnId(req.ctx.org, reqTargetCveIdGetter(req)) + } + } + }) +} + +// =========================================================================== +// CheckLevels +// +// Mapping of authz-level identifiers to checks, used for the `authzLevel` +// function. +// -------------------------------------------------------------------------*/ + +/** + * Maps authz level identifiers to checks. + * + * @private + */ +class CheckLevels { + /** + * @type {Map} + */ + #levels + + constructor (rawCheckLevels) { + this.#levels = new Map() + + // Use `Reflect.ownKeys()` to get the object keys of `rawCheckLevels` in + // guaranteed insertion order. + // + // See: https://tc39.es/ecma262/#sec-ordinaryownpropertykeys + // See: https://mdn.dev/Reflect.ownKeys + for (const levelId in Reflect.ownKeys(rawCheckLevels)) { + const check = rawCheckLevels[levelId] + // This will throw an exception if the levelId or check are invalid. + validateCheckLevelsEntry(levelId, check) + this.#levels.set(levelId, check) + } + } + + needsOrgData () { + return this.#levels.reduce( + (acc, [_, check]) => check.needsOrgData() ?? acc, + false + ) + } + + needsUserData () { + return this.#levels.reduce( + (acc, [_, check]) => check.needsUserData() ?? acc, + false + ) + } + + // Allow iterating over this object by delegating to the underlying `Map`. + [Symbol.iterator] () { + return this.#levels + } +} + +/** + * Parse a check specification from the programmer. It should be an object + * mapping a single string identifier to a single array of checks. If not, + * return null. + * + * @param {*} levelId A string identifying the authz level. + * @param {*} check A check associated with an authz level. + * @throws {Error} if levelId is not a `string` or check is not a `Check` + * @private + */ +function validateCheckLevelsEntry (levelId, check) { + // This is a rough substitute for type-checking, but it's useful for making + // sure we get loud exceptions when testing routes that use `authzLevel`. + // With this function, if the programmer-provided `rawCheckLevels` object + // is _not_ valid, the route won't work at all and you'll get an exception + // explaining which key is the problem. + if ((typeof levelId) !== 'string') throw new Error(`levelId must be a string: '${levelId}'`) + if (!(check instanceof Check)) throw new Error(`levelId value must be a check: '${levelId}'`) +} + +// =========================================================================== +// Roles +// +// These are frozen renamings of `constants.AUTH_ROLE_ENUM` and +// `constants.USER_ROLE_ENUM`, just for convenience when using the authz API. +// -------------------------------------------------------------------------*/ + +/** + * Roles available for organizations. + * + * Current roles are: + * + * | Role | Description | + * |------|-------------| + * | `OrgRoles.CNA` | The org is a CVE Numbering Authority. | + * | `OrgRoles.SECRETARIAT` | The org is the CVE Secretariat. | + * | `OrgRoles.BULK_DOWNLOAD` | The org is a bulk downloader. | + * | `OrgRoles.ROOT_CNA` | The org is a Root CVE Numbering Authority. | + * | `OrgRoles.ADP` | The org is an Authorized Data Publisher. | + * + * @alias module:middleware/authz.OrgRoles + */ +const OrgRoles = Object.freeze(constants.AUTH_ROLE_ENUM) + +/** + * Roles available for users. + * + * Current roles are: + * + * | Role | Description | + * |------|-------------| + * | `UserRoles.ADMIN` | The user is an administrator of their org. | + * + * @alias module:middleware/authz.UserRoles + */ +const UserRoles = Object.freeze(constants.USER_ROLE_ENUM) + +// ========================================================================== +// Exports +// ------------------------------------------------------------------------*/ + +module.exports = { + authz, + authzLevel, + every, + some, + orgMatches, + userMatches, + orgHasRole, + userHasRole, + orgOwns, + OrgRoles, + UserRoles +} diff --git a/src/middleware/error.js b/src/middleware/error.js index afc658a1b..a793b355c 100644 --- a/src/middleware/error.js +++ b/src/middleware/error.js @@ -1,113 +1,158 @@ +/** + * @module middleware/error + */ + const idrErr = require('../utils/error') + class MiddlewareError extends idrErr.IDRError { badRequest (header) { // mw - const err = {} - err.error = 'BAD_REQUEST' - err.message = `${header} header field required.` - return err + return { + error: 'BAD_REQUEST', + message: `${header} header field required.` + } } unauthorized () { // mw - const err = {} - err.error = 'UNAUTHORIZED' - err.message = 'Unauthorized' - return err + return { + error: 'UNAUTHORIZED', + message: 'Unauthorized' + } + } + + userDoesNotMatch (user, targetUser) { // mw + return { + error: 'USER_DOES_NOT_MATCH', + message: `User '${user}' doesn't match target user '${targetUser}'` + } + } + + orgDoesNotMatch (org, targetOrg) { // mw + return { + error: 'ORG_DOES_NOT_MATCH', + message: `User org '${org}' doesn't match target org '${targetOrg}'` + } } secretariatOnly () { // mw - const err = {} - err.error = 'SECRETARIAT_ONLY' - err.message = 'This function is currently only allowed to the Secretariat. This will change for many functions as more administrative roles are implemented.' - return err + return { + error: 'SECRETARIAT_ONLY', + message: 'This function is currently only allowed to the Secretariat. This will change for many functions as more administrative roles are implemented.' + } } cnaOnly () { // mw - const err = {} - err.error = 'CNA_ONLY' - err.message = 'This function is currently only allowed to CNAs. This will change for many functions as more administrative roles are implemented.' - return err + return { + error: 'CNA_ONLY', + message: 'This function is currently only allowed to CNAs. This will change for many functions as more administrative roles are implemented.' + } } adpOnly () { // mw - const err = {} - err.error = 'ADP_ONLY' - err.message = 'This function is only allowed for ADPs.' - return err + return { + error: 'ADP_ONLY', + message: 'This function is only allowed for ADPs.' + } } cnaDoesNotExist (shortname) { // mw - const err = {} - err.error = 'CNA_DOES_NOT_EXIST' - err.message = `The '${shortname}' organization designated by the shortname parameter does not exist.` - return err + return { + error: 'CNA_DOES_NOT_EXIST', + message: `The '${shortname}' organization designated by the shortname parameter does not exist.` + } } adpDoesNotExist (shortname) { // mw - const err = {} - err.error = 'ADP_DOES_NOT_EXIST' - err.message = `The '${shortname}' organization designated by the shortname parameter does not exist.` - return err + return { + error: 'ADP_DOES_NOT_EXIST', + message: `The '${shortname}' organization designated by the shortname parameter does not exist.` + } + } + + orgLacksRoles (org, roles) { // mw + return { + error: 'ORG_LACKS_ROLES', + message: `User's org '${org}' doesn't have one of these roles: ${roles.join(', ')}` + } + } + + userLacksRoles (user, roles) { // mw + return { + error: 'USER_LACKS_ROLES', + message: `User '${user}' does not have one of these roles: ${roles.join(', ')}` + } } orgDoesNotExist (shortname) { // mw - const err = {} - err.error = 'ORG_DOES_NOT_EXIST' - err.message = `The '${shortname}' organization designated by the shortname parameter does not exist.` - return err + return { + error: 'ORG_DOES_NOT_EXIST', + message: `The '${shortname}' organization designated by the shortname parameter does not exist.` + } + } + + userDoesNotExist (username) { // mw + return { + error: 'USER_DOES_NOT_EXIST', + message: `User '${username}' designated by the username parameter does not exist.` + } } orgHasNoRole (shortname) { // mw - const err = {} - err.error = 'ORG_HAS_NO_ROLE' - err.message = `The '${shortname}' organization designated by the shortname parameter does not have any roles.` - return err + return { + error: 'ORG_HAS_NO_ROLE', + message: `The '${shortname}' organization designated by the shortname parameter does not have any roles.` + } } orgHasNoPartnerRole (shortname) { // mw - const err = {} - err.error = 'ORG_HAS_NO_PARTNER_ROLE' - err.message = `The '${shortname}' organization designated by the shortname parameter does not have any partner roles.` - return err + return { + error: 'ORG_HAS_NO_PARTNER_ROLE', + message: `The '${shortname}' organization designated by the shortname parameter does not have any partner roles.` + } } orgDoesNotOwnId (org, id) { - const err = { + return { error: 'ORG_DOES_NOT_OWN_ID', - message: `${org} does not own ${id}` + message: `The org '${org}'' does not own '${id}'.` } - return err } - invalidJsonSchema (errors) { // mw - const err = {} - err.error = 'INVALID_JSON_SCHEMA' - err.message = 'CVE JSON schema validation FAILED.' - err.details = { - errors: errors + cveIdDoesNotExist (id) { + return { + error: 'CVE_ID_DOES_NOT_EXIST', + message: `The CVE ID '${id}' does not exist.` } + } - return err + invalidJsonSchema (errors) { // mw + return { + error: 'INVALID_JSON_SCHEMA', + message: 'CVE JSON schema validation FAILED.', + details: { + errors: errors + } + } } invalidJsonSyntax (errors) { // mw - const err = {} - err.error = 'INVALID_JSON_SYNTAX' - err.message = errors - return err + return { + error: 'INVALID_JSON_SYNTAX', + message: errors + } } genericBadRequest (errors) { // mw - const err = {} - err.error = 'BAD_REQUEST' - err.message = errors - return err + return { + error: 'BAD_REQUEST', + message: errors + } } recordTooLarge () { // mw - const err = {} - err.error = 'RECORD_TOO_LARGE' - err.message = 'Records must be less than 3.8MB.' - return err + return { + error: 'RECORD_TOO_LARGE', + message: 'Records must be less than 3.8MB.' + } } } diff --git a/src/middleware/errorMessages.js b/src/middleware/errorMessages.js index 7ed28d794..75cd48b2e 100644 --- a/src/middleware/errorMessages.js +++ b/src/middleware/errorMessages.js @@ -1,3 +1,7 @@ +/** + * @module middleware/errorMessages + */ + // Error message strings to be used in controller/index.js files module.exports = { diff --git a/src/middleware/logger.js b/src/middleware/logger.js index aa2cb0483..643d8efe9 100644 --- a/src/middleware/logger.js +++ b/src/middleware/logger.js @@ -1,3 +1,7 @@ +/** + * @module middleware/logger + */ + require('dotenv').config() // This enables us to read from the .env file const winston = require('winston') diff --git a/src/middleware/middleware.js b/src/middleware/middleware.js index 03aee444c..dffbf74c2 100644 --- a/src/middleware/middleware.js +++ b/src/middleware/middleware.js @@ -1,3 +1,7 @@ +/** + * @module middleware/middleware + */ + const getConstants = require('../constants').getConstants const fs = require('fs') const cveSchemaV5 = JSON.parse(fs.readFileSync('src/middleware/schemas/CVE_JSON_5.2.0_bundled.json')) @@ -19,7 +23,7 @@ function setCacheControl (req, res, next) { next() } -function createCtxAndReqUUID (req, res, next) { +function createCtxAndReqUUID (req, _res, next) { const CONSTANTS = getConstants() try { @@ -32,13 +36,45 @@ function createCtxAndReqUUID (req, res, next) { repositories: new RepositoryFactory() } - logger.info(JSON.stringify({ uuid: req.ctx.uuid, path: req.path })) + logger.info({ + message: 'setting up req context', + uuid: req.ctx.uuid, + path: req.path, + // TODO(alilleybrinker): Remove this when new Authz middleware is adopted. + useNewAuthzApi: req.app.get('useNewAuthzApi') ? 'yes' : 'no' + }) + next() } catch (err) { next(err) } } +// TODO(alilleybrinker): Remove this when new Authz middleware is adopted. + +/** + * Select what authz middleware to run based on `app.get('useNewAuthzApi')` + * + * @param {object} config + * @param {Middleware} config.oldAuthz The old authz middleware to run. + * @param {Middleware} config.newAuthz The new authz middleware to run. + * @returns {Middleware} the chosen middleware. + * @alias module:middleware/middleware.authzApiSelector + */ +function authzApiSelector (config) { + const { oldAuthz, newAuthz } = config + + return async function (req, res, next) { + if (req.app.get('useNewAuthzApi')) { + logger.debug('Using new authz middleware') + return newAuthz(req, res, next) + } else { + logger.debug('Using old authz middleware') + return oldAuthz(req, res, next) + } + } +} + // Sets parameter indicating whether user is authenticated async function optionallyValidateUser (req, res, next) { const org = req.ctx.org @@ -129,18 +165,18 @@ async function validateUser (req, res, next) { const result = await userRepo.findOneByUserNameAndOrgUUID(user, orgUUID) if (!result) { - logger.warn(JSON.stringify({ uuid: req.ctx.uuid, message: 'User not found. User authentication FAILED for ' + user })) + logger.warn({ uuid: req.ctx.uuid, message: 'User not found. User authentication FAILED for ' + user }) return res.status(401).json(error.unauthorized()) } if (result.active === false || result.status === 'inactive') { - logger.warn(JSON.stringify({ uuid: req.ctx.uuid, message: 'User deactivated. Authentication failed for ' + user })) + logger.warn({ uuid: req.ctx.uuid, message: 'User deactivated. Authentication failed for ' + user }) return res.status(401).json(error.unauthorized()) } const isPwd = await argon2.verify(result.secret, key) if (!isPwd) { - logger.warn(JSON.stringify({ uuid: req.ctx.uuid, message: 'Incorrect apikey. User authentication FAILED for ' + user })) + logger.warn({ uuid: req.ctx.uuid, message: 'Incorrect apikey. User authentication FAILED for ' + user }) return res.status(401).json(error.unauthorized()) } @@ -345,7 +381,7 @@ function validateCveJsonSchema (req, res, next) { } if (cveState === undefined) { - logger.error(JSON.stringify({ uuid: req.ctx.uuid, message: 'CVE JSON schema validation FAILED.' })) + logger.error({ uuid: req.ctx.uuid, message: 'CVE JSON schema validation FAILED.' }) return res.status(400).json(error.invalidJsonSchema(['instance.cveMetadata is not defined'])) } cveState = cveState.state @@ -356,15 +392,15 @@ function validateCveJsonSchema (req, res, next) { if (['PUBLISHED', 'RESERVED', 'REJECTED'].includes(cveState)) { result = validate(cve) } else { - logger.error(JSON.stringify({ uuid: req.ctx.uuid, message: 'CVE JSON schema validation FAILED.' })) + logger.error({ uuid: req.ctx.uuid, message: 'CVE JSON schema validation FAILED.' }) return res.status(400).json(error.invalidJsonSchema(['instance.cveMetadata.state is not one of enum values'])) } if (result) { - logger.info(JSON.stringify({ uuid: req.ctx.uuid, message: 'SUCCESSFUL CVE JSON schema validation.' })) + logger.info({ uuid: req.ctx.uuid, message: 'SUCCESSFUL CVE JSON schema validation.' }) next() } else { - logger.error(JSON.stringify({ uuid: req.ctx.uuid, message: 'CVE JSON schema validation FAILED.' })) + logger.error({ uuid: req.ctx.uuid, message: 'CVE JSON schema validation FAILED.' }) const temp = validate.errors const errors = [] temp.forEach((error) => { @@ -448,7 +484,8 @@ const limiter = rateLimit({ * that are safe to cast to a string * * @param {Any} val - * @returns + * @returns {boolean} + * @alias module:middleware/middleware.isFlatStringArray */ function isFlatStringArray (val) { const errorMsg = 'Parameter must be a one-dimensional array of strings' @@ -478,6 +515,7 @@ function isCveProgramOrgMembershipObject (val) { * Recursively casts to strings and upper-cases all items in array * * @param {Array} val + * @alias module:middleware/middleware.toUpperCaseArray */ function toUpperCaseArray (val) { if (!Array.isArray(val)) { @@ -499,6 +537,7 @@ function toUpperCaseArray (val) { * Recursively casts to strings and lower-cases all items in array * * @param {Array} val + * @alias module:middleware/middleware.toLowerCaseArray */ function toLowerCaseArray (val) { if (!Array.isArray(val)) { @@ -535,6 +574,7 @@ function containsNoInvalidCharacters (val) { * * @param {Array} allowedKeys - List of permitted keys in req.body * @returns {function} Express middleware + * @alias module:middleware/middleware.rejectUnexpectedKeys */ function rejectUnexpectedKeys (allowedKeys) { return (req, res, next) => { @@ -575,5 +615,6 @@ module.exports = { toLowerCaseArray, containsNoInvalidCharacters, trimJSONWhitespace, - rejectUnexpectedKeys + rejectUnexpectedKeys, + authzApiSelector } diff --git a/src/model/adporg.js b/src/model/adporg.js index f5efa867c..1b4e52698 100644 --- a/src/model/adporg.js +++ b/src/model/adporg.js @@ -1,3 +1,7 @@ +/** + * @module model/adporg + */ + const mongoose = require('mongoose') const BaseOrg = require('./baseorg') const fs = require('fs') diff --git a/src/model/audit.js b/src/model/audit.js index 9d346566c..614576299 100644 --- a/src/model/audit.js +++ b/src/model/audit.js @@ -1,3 +1,7 @@ +/** + * @module model/audit + */ + const mongoose = require('mongoose') const fs = require('fs') const aggregatePaginate = require('mongoose-aggregate-paginate-v2') diff --git a/src/model/baseorg.js b/src/model/baseorg.js index 33edd6cf3..d8ecb0797 100644 --- a/src/model/baseorg.js +++ b/src/model/baseorg.js @@ -1,3 +1,7 @@ +/** + * @module model/baseorg + */ + const mongoose = require('mongoose') const aggregatePaginate = require('mongoose-aggregate-paginate-v2') const MongoPaging = require('mongo-cursor-pagination') diff --git a/src/model/baseuser.js b/src/model/baseuser.js index 260179970..d168500f2 100644 --- a/src/model/baseuser.js +++ b/src/model/baseuser.js @@ -1,3 +1,7 @@ +/** + * @module model/baseuser + */ + const mongoose = require('mongoose') const fs = require('fs') const aggregatePaginate = require('mongoose-aggregate-paginate-v2') diff --git a/src/model/bulkdownloadorg.js b/src/model/bulkdownloadorg.js index e196b5ff3..1333c4397 100644 --- a/src/model/bulkdownloadorg.js +++ b/src/model/bulkdownloadorg.js @@ -1,3 +1,7 @@ +/** + * @module model/bulkdownloadorg + */ + const mongoose = require('mongoose') const BaseOrg = require('./baseorg') const fs = require('fs') diff --git a/src/model/cnaorg.js b/src/model/cnaorg.js index ab17599c9..db44e4892 100644 --- a/src/model/cnaorg.js +++ b/src/model/cnaorg.js @@ -1,3 +1,7 @@ +/** + * @module model/cnaorg + */ + const mongoose = require('mongoose') const BaseOrg = require('./baseorg') const fs = require('fs') diff --git a/src/model/conversation.js b/src/model/conversation.js index fe304bf8f..fbf0a0494 100644 --- a/src/model/conversation.js +++ b/src/model/conversation.js @@ -1,3 +1,7 @@ +/** + * @module model/conversation + */ + const mongoose = require('mongoose') const aggregatePaginate = require('mongoose-aggregate-paginate-v2') const MongoPaging = require('mongo-cursor-pagination') diff --git a/src/model/cve-id-range.js b/src/model/cve-id-range.js index 7b4bd9405..8b6fd7861 100644 --- a/src/model/cve-id-range.js +++ b/src/model/cve-id-range.js @@ -1,3 +1,7 @@ +/** + * @module model/cve-id-range + */ + const mongoose = require('mongoose') const schema = { diff --git a/src/model/cve-id.js b/src/model/cve-id.js index 4ef0bfbe7..20c63f303 100644 --- a/src/model/cve-id.js +++ b/src/model/cve-id.js @@ -1,3 +1,7 @@ +/** + * @module model/cve-id + */ + const mongoose = require('mongoose') const aggregatePaginate = require('mongoose-aggregate-paginate-v2') const MongoPaging = require('mongo-cursor-pagination') diff --git a/src/model/cve.js b/src/model/cve.js index 59e23aeee..782210e86 100644 --- a/src/model/cve.js +++ b/src/model/cve.js @@ -1,3 +1,7 @@ +/** + * @module model/cve + */ + const mongoose = require('mongoose') const aggregatePaginate = require('mongoose-aggregate-paginate-v2') const MongoPaging = require('mongo-cursor-pagination') diff --git a/src/model/org.js b/src/model/org.js index 48f3b226c..f9018f809 100644 --- a/src/model/org.js +++ b/src/model/org.js @@ -1,3 +1,7 @@ +/** + * @module model/org + */ + require('dotenv').config() const mongoose = require('mongoose') const aggregatePaginate = require('mongoose-aggregate-paginate-v2') diff --git a/src/model/registryuser.js b/src/model/registryuser.js index 5d9d32e9e..0c43d495b 100644 --- a/src/model/registryuser.js +++ b/src/model/registryuser.js @@ -1,3 +1,7 @@ +/** + * @module model/registryuser + */ + const mongoose = require('mongoose') const BaseUser = require('./baseuser') diff --git a/src/model/reviewobject.js b/src/model/reviewobject.js index 52bdea788..f820874ed 100644 --- a/src/model/reviewobject.js +++ b/src/model/reviewobject.js @@ -1,3 +1,7 @@ +/** + * @module model/registryobject + */ + const mongoose = require('mongoose') const aggregatePaginate = require('mongoose-aggregate-paginate-v2') const MongoPaging = require('mongo-cursor-pagination') diff --git a/src/model/secretariatorg.js b/src/model/secretariatorg.js index 127d236a6..7a93e441c 100644 --- a/src/model/secretariatorg.js +++ b/src/model/secretariatorg.js @@ -1,3 +1,7 @@ +/** + * @module model/secretariatorg + */ + const mongoose = require('mongoose') const BaseOrg = require('./baseorg') const fs = require('fs') diff --git a/src/model/user.js b/src/model/user.js index 971e1d94d..5633bc87a 100644 --- a/src/model/user.js +++ b/src/model/user.js @@ -1,3 +1,7 @@ +/** + * @module model/user + */ + const mongoose = require('mongoose') const aggregatePaginate = require('mongoose-aggregate-paginate-v2') const MongoPaging = require('mongo-cursor-pagination') diff --git a/src/repositories/auditRepository.js b/src/repositories/auditRepository.js index 5ba66f691..8707224c0 100644 --- a/src/repositories/auditRepository.js +++ b/src/repositories/auditRepository.js @@ -1,3 +1,7 @@ +/** + * @module repositories/auditRepository + */ + const Audit = require('../model/audit') const BaseRepository = require('./baseRepository') const BaseOrgRepository = require('./baseOrgRepository') diff --git a/src/repositories/baseOrgRepository.js b/src/repositories/baseOrgRepository.js index 26e8927fe..2c360a527 100644 --- a/src/repositories/baseOrgRepository.js +++ b/src/repositories/baseOrgRepository.js @@ -1,3 +1,7 @@ +/** + * @module repositories/baseOrgRepository + */ + const BaseRepository = require('./baseRepository') const BaseOrgModel = require('../model/baseorg') const CNAOrgModel = require('../model/cnaorg') diff --git a/src/repositories/baseRepository.js b/src/repositories/baseRepository.js index 046a1ad77..4c7567684 100644 --- a/src/repositories/baseRepository.js +++ b/src/repositories/baseRepository.js @@ -1,3 +1,7 @@ +/** + * @module repositories/baseRepository + */ + // baseRepository for Mongoose const mongoose = require('mongoose') diff --git a/src/repositories/baseUserRepository.js b/src/repositories/baseUserRepository.js index 903f6d58a..70c72e912 100644 --- a/src/repositories/baseUserRepository.js +++ b/src/repositories/baseUserRepository.js @@ -1,3 +1,7 @@ +/** + * @module repositories/baseUserRepository + */ + const BaseRepository = require('./baseRepository') const BaseUser = require('../model/baseuser') const BaseOrgRepository = require('./baseOrgRepository') @@ -293,7 +297,7 @@ class BaseUserRepository extends BaseRepository { async isAdminOrSecretariat (orgShortName, username, requesterOrg, options = {}, isRegistryObject = true) { const baseOrgRepository = new BaseOrgRepository() const org = await baseOrgRepository.findOneByShortName(requesterOrg) - if (await baseOrgRepository.isSecretariat(org) || await this.isAdmin(username, orgShortName, options, isRegistryObject)) { + if (baseOrgRepository.isSecretariat(org) || await this.isAdmin(username, orgShortName, options, isRegistryObject)) { return true } return false diff --git a/src/repositories/cnaOrgRepository.js b/src/repositories/cnaOrgRepository.js index e69de29bb..7542d6218 100644 --- a/src/repositories/cnaOrgRepository.js +++ b/src/repositories/cnaOrgRepository.js @@ -0,0 +1,3 @@ +/** + * @module repositories/cnaOrgRepository + */ diff --git a/src/repositories/conversationRepository.js b/src/repositories/conversationRepository.js index 39e055563..5d33bc896 100644 --- a/src/repositories/conversationRepository.js +++ b/src/repositories/conversationRepository.js @@ -1,3 +1,7 @@ +/** + * @module repositories/conversationRepository + */ + const uuid = require('uuid') const ConversationModel = require('../model/conversation') const BaseRepository = require('./baseRepository') diff --git a/src/repositories/cveIdRangeRepository.js b/src/repositories/cveIdRangeRepository.js index 0a0e4ace7..dd1e89c80 100644 --- a/src/repositories/cveIdRangeRepository.js +++ b/src/repositories/cveIdRangeRepository.js @@ -1,3 +1,7 @@ +/** + * @module repositories/cveIdRangeRepository + */ + const BaseRepository = require('./baseRepository') const CveIdRange = require('../model/cve-id-range') diff --git a/src/repositories/cveIdRepository.js b/src/repositories/cveIdRepository.js index 797dcae23..f1303b67e 100644 --- a/src/repositories/cveIdRepository.js +++ b/src/repositories/cveIdRepository.js @@ -1,3 +1,7 @@ +/** + * @module repositories/cveIdRepository + */ + const BaseRepository = require('./baseRepository') const CveId = require('../model/cve-id') diff --git a/src/repositories/cveRepository.js b/src/repositories/cveRepository.js index 34a1451fb..70e52e984 100644 --- a/src/repositories/cveRepository.js +++ b/src/repositories/cveRepository.js @@ -1,3 +1,7 @@ +/** + * @module repositories/cveRepository + */ + const BaseRepository = require('./baseRepository') const Cve = require('../model/cve') diff --git a/src/repositories/orgRepository.js b/src/repositories/orgRepository.js index 099cc2fa8..a974c5a45 100644 --- a/src/repositories/orgRepository.js +++ b/src/repositories/orgRepository.js @@ -1,3 +1,7 @@ +/** + * @module repositories/orgRepository + */ + const BaseRepository = require('./baseRepository') const Org = require('../model/org') const utils = require('../utils/utils') diff --git a/src/repositories/repositoryFactory.js b/src/repositories/repositoryFactory.js index 4750fffea..d90e7f8a1 100644 --- a/src/repositories/repositoryFactory.js +++ b/src/repositories/repositoryFactory.js @@ -1,3 +1,7 @@ +/** + * @module repositories/repositoryFactory + */ + const OrgRepository = require('./orgRepository') const CveRepository = require('./cveRepository') const CveIdRepository = require('./cveIdRepository') diff --git a/src/repositories/reviewObjectRepository.js b/src/repositories/reviewObjectRepository.js index 8ebcda1f6..00c4d2e42 100644 --- a/src/repositories/reviewObjectRepository.js +++ b/src/repositories/reviewObjectRepository.js @@ -1,3 +1,7 @@ +/** + * @module repositories/reviewObjectRepository + */ + const ReviewObjectModel = require('../model/reviewobject') const BaseRepository = require('./baseRepository') const BaseOrgRepository = require('./baseOrgRepository') diff --git a/src/repositories/userRepository.js b/src/repositories/userRepository.js index 356576d34..a89bbb9f1 100644 --- a/src/repositories/userRepository.js +++ b/src/repositories/userRepository.js @@ -1,3 +1,7 @@ +/** + * @module repositories/userRepository + */ + const BaseRepository = require('./baseRepository') const User = require('../model/user') diff --git a/src/scripts/populate.js b/src/scripts/populate.js deleted file mode 100644 index 28fe3d057..000000000 --- a/src/scripts/populate.js +++ /dev/null @@ -1,155 +0,0 @@ -/* - * used to populate or re-populate a MongoDB-compatible document - * database with static fixtures at `cve-services/datadump/pre-population` - */ - -const express = require('express') -const app = express() -const mongoose = require('mongoose') - -const dataUtils = require('../utils/data') -const dbUtils = require('../utils/db') -const errors = require('../utils/error') -const logger = require('../middleware/logger') -const CveIdRange = require('../model/cve-id-range') -const CveId = require('../model/cve-id') -const Cve = require('../model/cve') -const Org = require('../model/org') -const User = require('../model/user') -const BaseOrg = require('../model/baseorg') -const BaseUser = require('../model/baseuser') -const ReviewObject = require('../model/reviewobject') -const Conversation = require('../model/conversation') -const Audit = require('../model/audit') - -const error = new errors.IDRError() - -const populateTheseCollections = { - Cve: Cve, - 'Cve-Id-Range': CveIdRange, - 'Cve-Id': CveId, - User: User, - Org: Org, - BaseOrg: BaseOrg, - BaseUser: BaseUser, - ReviewObject: ReviewObject, - Conversation: Conversation, - Audit: Audit -} - -const indexesToCreate = { - Cve: [{ 'cve.cveMetadata.cveId': 1 }, { 'cve.cveMetadata.dateUpdated': 1 }], - 'Cve-Id': [{ cve_id: 1 }, { owning_cna: 1, state: 1 }, { reserved: 1 }], - User: [{ UUID: 1 }], - Org: [{ UUID: 1 }, { 'authority.active_roles': 1 }] -} - -// Body Parser Middleware -app.use(express.json()) // Allows us to handle raw JSON data -app.use(express.urlencoded({ extended: false })) // Allows us to handle url encoded data -// Make mongoose connection available globally -global.mongoose = mongoose - -// Connect to MongoDB database -const dbConnectionStr = dbUtils.getMongoConnectionString() -mongoose.connect(dbConnectionStr, { - useNewUrlParser: true, - useUnifiedTopology: false, - autoIndex: false -}) - -console.log('About to test connection') -const db = mongoose.connection -db.on('error', () => { - console.error.bind(console, 'Connection Error: Something went wrong!') - logger.error(error.connectionError()) -}) - -db.once('open', async () => { - logger.info('Successfully connected to database!') - - let userInput - if (process.argv.length > 2 && process.argv.slice(2)[0] === 'y') { - userInput = process.argv.slice(2)[0] - } else { - // script runner (currently) needs to agree to an action that drops collections - userInput = dataUtils.getUserPopulateInput(Object.keys(populateTheseCollections)) - } - - // drops and re-populates collections - if (userInput.toLowerCase() === 'y') { - const collections = await db.db.listCollections().toArray() - - for (const collection of collections) { - if (!collection.name.startsWith('system.')) { - logger.info(`Dropping ${collection.name} collection !!!`) - await db.dropCollection(collection.name) - } - } - - // Org - await dataUtils.populateCollection( - './datadump/pre-population/orgs.json', - Org, dataUtils.newOrgTransform - ) - - // User, depends on Org - const hash = await dataUtils.preprocessUserSecrets() - await dataUtils.populateCollection( - './datadump/pre-population/users.json', - User, dataUtils.newUserTransform, hash - ) - - const populatePromises = [] - - // CVE ID Range - populatePromises.push(dataUtils.populateCollection( - './datadump/pre-population/cve-ids-range.json', - CveIdRange - )) - - // CVE - if (process.env.NODE_ENV === 'development' || process.env.NODE_ENV === 'test') { - populatePromises.push(dataUtils.populateCollection( - './datadump/pre-population/cves.json', - Cve, dataUtils.newCveTransform - )) - } - - // CVE ID, depends on User and Org - populatePromises.push(dataUtils.populateCollection( - './datadump/pre-population/cve-ids.json', - CveId, dataUtils.newCveIdTransform - )) - - // don't close database connection until all remaining populate - // promises are resolved - Promise.all(populatePromises).then(async function () { - logger.info('Successfully populated the database!') - - const indexPromises = [] - Object.keys(indexesToCreate).forEach(col => { - indexesToCreate[col].forEach(index => { - indexPromises.push(db.collections[col].createIndex(index)) - }) - }) - - try { - await Promise.all(indexPromises) - logger.info('Successfully created indexes!') - - // Explicitly create collections for models that are not pre-populated but require transactions. - // Implicit collection creation inside Mongo transactions acquires heavy locks and leads to LockTimeout. - await Audit.createCollection() - await ReviewObject.createCollection() - await Conversation.createCollection() - } catch (err) { - logger.error('Error creating indexes:', err) - } finally { - mongoose.connection.close() - } - }) - } else { - mongoose.connection.close() - } -}) diff --git a/src/scripts/populate.mjs b/src/scripts/populate.mjs new file mode 100644 index 000000000..88c1141c2 --- /dev/null +++ b/src/scripts/populate.mjs @@ -0,0 +1,183 @@ +/** + * Populate script, used to either populate or re-populate a MongoDB-compatible + * document database with static fixtures defined at + * `cve-services/datadump/pre-population`. + */ + +// =========================================================================== +// Imports +// --------------------------------------------------------------------------- + +// Deps +import express from 'express' +import mongoose from 'mongoose' +import dataUtils from '../utils/data.js' +import dbUtils from '../utils/db.js' + +// Models +import CveIdRange from '../model/cve-id-range.js' +import CveId from '../model/cve-id.js' +import Cve from '../model/cve.js' +import Org from '../model/org.js' +import User from '../model/user.js' +import BaseOrg from '../model/baseorg.js' +import BaseUser from '../model/baseuser.js' +import ReviewObject from '../model/reviewobject.js' +import Conversation from '../model/conversation.js' +import Audit from '../model/audit.js' + +// =========================================================================== +// Models to Populate +// --------------------------------------------------------------------------- + +const populateTargets = { + Cve: Cve, + 'Cve-Id-Range': CveIdRange, + 'Cve-Id': CveId, + User: User, + Org: Org, + BaseOrg: BaseOrg, + BaseUser: BaseUser, + ReviewObject: ReviewObject, + Conversation: Conversation, + Audit: Audit +} + +const indexTargets = { + Cve: [ + { 'cve.cveMetadata.cveId': 1 }, + { 'cve.cveMetadata.dateUpdated': 1 } + ], + 'Cve-Id': [ + { cve_id: 1 }, + { owning_cna: 1, state: 1 }, + { reserved: 1 } + ], + User: [ + { UUID: 1 } + ], + Org: [ + { UUID: 1 }, + { 'authority.active_roles': 1 } + ] +} + +// =========================================================================== +// App Setup +// --------------------------------------------------------------------------- + +// Create the app, make sure it supports JSON and URL-encoded data. +const app = express() +app.use(express.json()) +app.use(express.urlencoded({ extended: false })) + +// =========================================================================== +// Database Setup +// --------------------------------------------------------------------------- + +// Connect to MongoDB database +const dbConnectionStr = dbUtils.getMongoConnectionString() + +const db = await mongoose.connect(dbConnectionStr, { + useNewUrlParser: true, + useUnifiedTopology: false, + autoIndex: false +}) + +console.log('Successfully connected to database!') + +// =========================================================================== +// Parse User Input +// --------------------------------------------------------------------------- + +let userInput +if (process.argv.length > 2 && process.argv.slice(2)[0] === 'y') { + userInput = process.argv.slice(2)[0] +} else { + // script runner (currently) needs to agree to an action that drops collections + userInput = dataUtils.getUserPopulateInput(Object.keys(populateTargets)) +} + +// =========================================================================== +// Populate Database +// --------------------------------------------------------------------------- + +// Drop and re-populate collections. +if (userInput.toLowerCase() === 'y') { + const collections = await db.connection.db.listCollections().toArray() + + for (const collection of collections) { + if (!collection.name.startsWith('system.')) { + console.log(`Dropping ${collection.name} collection !!!`) + await db.connection.dropCollection(collection.name) + } + } + + // Org + await dataUtils.populateCollection( + './datadump/pre-population/orgs.json', + Org, dataUtils.newOrgTransform + ) + + // User, depends on Org + const hash = await dataUtils.preprocessUserSecrets() + await dataUtils.populateCollection( + './datadump/pre-population/users.json', + User, dataUtils.newUserTransform, hash + ) + + const populatePromises = [] + + // CVE ID Range + populatePromises.push(dataUtils.populateCollection( + './datadump/pre-population/cve-ids-range.json', + CveIdRange + )) + + // CVE + if (process.env.NODE_ENV === 'development' || process.env.NODE_ENV === 'test') { + populatePromises.push(dataUtils.populateCollection( + './datadump/pre-population/cves.json', + Cve, dataUtils.newCveTransform + )) + } + + // CVE ID, depends on User and Org + populatePromises.push(dataUtils.populateCollection( + './datadump/pre-population/cve-ids.json', + CveId, dataUtils.newCveIdTransform + )) + + // Wait for all populate promises to resolve. + try { + await Promise.all(populatePromises) + console.log('Successfully populated the database data!') + } catch (err) { + console.error(`Error populating collections: ${err}`) + } + + const indexPromises = [] + + // Create all the indices. + for (const col of Object.keys(indexTargets)) { + for (const index of indexTargets[col]) { + indexPromises.push(db.connection.collections[col].createIndex(index)) + } + } + + // Explicitly create collections for models that are not pre-populated but + // require transactions. Implicit collection creation inside Mongo + // transactions acquires heavy locks and leads to LockTimeout. + try { + await Promise.all(indexPromises) + console.log('Successfully created all the indices!') + + await Audit.createCollection() + await ReviewObject.createCollection() + await Conversation.createCollection() + } catch (err) { + console.error(`Error creating indexes: ${err}`) + } +} + +await db.connection.close() diff --git a/src/utils/data.js b/src/utils/data.js index 529ab4c7d..af4f15e05 100644 --- a/src/utils/data.js +++ b/src/utils/data.js @@ -1,3 +1,7 @@ +/** + * @module utils/data + */ + /* This module exports a set of utilities to support new database * population or in-place data migrations utilizing Node.js file streaming * and asynchronous methods to support large data sets. diff --git a/src/utils/db.js b/src/utils/db.js index 6fde268f5..1279c7e8e 100644 --- a/src/utils/db.js +++ b/src/utils/db.js @@ -1,3 +1,7 @@ +/** + * @module utils/db + */ + const config = require('config') const logger = require('../middleware/logger') diff --git a/src/utils/error.js b/src/utils/error.js index 983af32c0..e96d3d421 100644 --- a/src/utils/error.js +++ b/src/utils/error.js @@ -1,3 +1,7 @@ +/** + * @module utils/error + */ + class IDRError { badInput (details) { // super const err = {} diff --git a/src/utils/utils.js b/src/utils/utils.js index 82e022ec7..6836ce509 100644 --- a/src/utils/utils.js +++ b/src/utils/utils.js @@ -1,3 +1,7 @@ +/** + * @module utils/utils + */ + const Org = require('../model/org') const User = require('../model/user') diff --git a/test/integration-tests/api.js b/test/integration-tests/api.js new file mode 100644 index 000000000..4e05b1477 --- /dev/null +++ b/test/integration-tests/api.js @@ -0,0 +1,117 @@ +const chai = require('chai') +const chaiHttp = require('chai-http') +const constant = require('./constants.js') +const app = require('../../src/index.js') +chai.use(chaiHttp) + +async function reserveCveIdAsCna (year, shortName, headers = constant.cnaHeaders) { + return await chai.request(app) + .post(`/api/cve-id?amount=1&cve_year=${year}&short_name=${shortName}&batch_type=non-sequential`) + .set(headers) +} + +async function bulkReserveCveIdAsSecretariat ( + requestLength, + year, + shortName, + batchType, + headers = constant.secretariatHeaders +) { + return await chai + .request(app) + .post( + `/api/cve-id?amount=${requestLength}&cve_year=${year}&short_name=${shortName}&batch_type=${batchType}` + ) + .set(headers) +} + +async function createCveAsCna (cveId, body = constant.testCve, headers = constant.cnaHeaders) { + return await chai + .request(app) + .post(`/api/cve/${cveId}/cna`) + .set(headers) + .send(body) +} + +async function createCveAsSecretariat (cveId, body = constant.testCve, headers = constant.secretariatHeaders) { + return await chai + .request(app) + .post(`/api/cve/${cveId}/cna`) + .set(headers) + .send(body) +} + +async function createCveAsCnaWithCnaContainer (cveId, body, headers = constant.cnaHeaders) { + return await chai + .request(app) + .post(`/api/cve/${cveId}/cna`) + .set(headers) + .send(body) +} + +async function updateCveAsCnaWithCnaContainer (cveId, body, headers = constant.cnaHeaders) { + return await chai + .request(app) + .put(`/api/cve/${cveId}/cna`) + .set(headers) + .send(body) +} + +async function updateCveAsSecretariat (cveId, body, headers = constant.secretariatHeaders) { + return await chai + .request(app) + .put(`/api/cve/${cveId}`) + .set(headers) + .send(body) +} + +async function updateCveAsSecretariatWithCnaContainer (cveId, body, headers = constant.secretariatHeaders) { + return await chai + .request(app) + .put(`/api/cve/${cveId}/cna`) + .set(headers) + .send(body) +} + +async function updateCveAsAdpWithAdpContainer (cveId, body, headers = constant.cnaHeaders) { + return await chai + .request(app) + .put(`/api/cve/${cveId}/adp`) + .set(headers) + .send(body) +} + +async function updateUserOrgAsSecretariat ( + userName, + orgShortName, + newOrgShortName, + headers = constant.secretariatHeaders +) { + return await chai + .request(app) + .put( + `/api/org/${orgShortName}/user/${userName}?org_short_name=${newOrgShortName}` + ) + .set(headers) +} + +async function updateCveIdOwningOrgAsSecretariat (cveId, newOrgShortName, headers = constant.secretariatHeaders) { + return await chai + .request(app) + .put(`/api/cve-id/${cveId}?org=${newOrgShortName}`) + .set(headers) +} + +module.exports = { + reserveCveIdAsCna, + bulkReserveCveIdAsSecretariat, + createCveAsCna, + createCveAsSecretariat, + createCveAsCnaWithCnaContainer, + updateCveAsCnaWithCnaContainer, + updateCveAsSecretariat, + updateCveAsSecretariatWithCnaContainer, + updateCveAsAdpWithAdpContainer, + updateUserOrgAsSecretariat, + updateCveIdOwningOrgAsSecretariat +} diff --git a/test/integration-tests/audit/auditTest.js b/test/integration-tests/audit/auditTest.js index 7b8d7daf7..3d0e0bc73 100644 --- a/test/integration-tests/audit/auditTest.js +++ b/test/integration-tests/audit/auditTest.js @@ -17,7 +17,7 @@ describe('Testing Audit Org endpoints', () => { before(async () => { await chai.request(app) .get('/api/org/win_5/users') - .set(constants.headers) + .set(constants.secretariatHeaders) .then((res, err) => { expect(err).to.be.undefined expect(res).to.have.status(200) @@ -42,7 +42,7 @@ describe('Testing Audit Org endpoints', () => { await chai.request(app) .post('/api/audit/org/') - .set(constants.headers) + .set(constants.secretariatHeaders) .send(auditData) .then((res, err) => { expect(err).to.be.undefined @@ -84,7 +84,7 @@ describe('Testing Audit Org endpoints', () => { await chai.request(app) .put('/api/audit/org/') - .set(constants.headers) + .set(constants.secretariatHeaders) .send(appendData) .then((res, err) => { expect(err).to.be.undefined @@ -103,7 +103,7 @@ describe('Testing Audit Org endpoints', () => { it('Should get all audit documents', async () => { await chai.request(app) .get('/api/audit/org/') - .set(constants.headers) + .set(constants.secretariatHeaders) .then((res, err) => { expect(err).to.be.undefined expect(res).to.have.status(200) @@ -120,7 +120,7 @@ describe('Testing Audit Org endpoints', () => { it('Should get audit document by UUID', async () => { await chai.request(app) .get(`/api/audit/org/document/${testAuditUUID}`) - .set(constants.headers) + .set(constants.secretariatHeaders) .then((res, err) => { expect(err).to.be.undefined expect(res).to.have.status(200) @@ -138,7 +138,7 @@ describe('Testing Audit Org endpoints', () => { it('Should get audit history by target UUID', async () => { await chai.request(app) .get(`/api/audit/org/${orgUuid}`) - .set(constants.headers) + .set(constants.secretariatHeaders) .then((res, err) => { expect(err).to.be.undefined expect(res).to.have.status(200) @@ -157,7 +157,7 @@ describe('Testing Audit Org endpoints', () => { await chai.request(app) .get(`/api/audit/org/${orgUuid}/${numberOfChanges}`) - .set(constants.headers) + .set(constants.secretariatHeaders) .then((res, err) => { expect(err).to.be.undefined expect(res).to.have.status(200) @@ -192,7 +192,7 @@ describe('Testing Audit Org endpoints', () => { await chai.request(app) .post('/api/audit/org/') - .set(constants.headers) + .set(constants.secretariatHeaders) .send(auditData) .then((res, err) => { expect(err).to.be.undefined @@ -211,7 +211,7 @@ describe('Testing Audit Org endpoints', () => { await chai.request(app) .post('/api/audit/org/') - .set(constants.headers) + .set(constants.secretariatHeaders) .send(auditData) .then((res, err) => { expect(err).to.be.undefined @@ -229,7 +229,7 @@ describe('Testing Audit Org endpoints', () => { await chai.request(app) .post('/api/audit/org/') - .set(constants.headers) + .set(constants.secretariatHeaders) .send(auditData) .then((res, err) => { expect(err).to.be.undefined @@ -245,7 +245,7 @@ describe('Testing Audit Org endpoints', () => { await chai.request(app) .get(`/api/audit/org/document/${fakeUUID}`) - .set(constants.headers) + .set(constants.secretariatHeaders) .then((res, err) => { expect(err).to.be.undefined expect(res).to.have.status(404) @@ -259,7 +259,7 @@ describe('Testing Audit Org endpoints', () => { const invalidNumber = -5 await chai.request(app) .get(`/api/audit/org/${orgUuid}/${invalidNumber}`) - .set(constants.headers) + .set(constants.secretariatHeaders) .then((res, err) => { expect(err).to.be.undefined expect(res).to.have.status(400) @@ -283,7 +283,7 @@ describe('Testing Audit Org endpoints', () => { await chai.request(app) .put('/api/audit/org/') - .set(constants.headers) + .set(constants.secretariatHeaders) .send(appendData) .then((res, err) => { expect(err).to.be.undefined @@ -303,7 +303,7 @@ describe('Testing Audit Org endpoints', () => { await chai.request(app) .post('/api/audit/org/') - .set(constants.headers) + .set(constants.secretariatHeaders) .send(auditData) .then((res, err) => { expect(err).to.be.undefined diff --git a/test/integration-tests/audit/registryOrgCreatesAuditTest.js b/test/integration-tests/audit/registryOrgCreatesAuditTest.js index 74cfc8fb2..9363a3e97 100644 --- a/test/integration-tests/audit/registryOrgCreatesAuditTest.js +++ b/test/integration-tests/audit/registryOrgCreatesAuditTest.js @@ -7,7 +7,7 @@ const AuditRepo = require('../../../src/repositories/auditRepository') const app = require('../../../src/index.js') const constants = require('../constants.js') -const secretariatHeaders = { ...constants.headers } +const secretariatHeaders = { ...constants.secretariatHeaders } const MAX_SHORTNAME_LENGTH = 32 async function createTestOrg (customProps = {}) { @@ -47,7 +47,7 @@ describe('Create and Update Audit Collection with Org Endpoints', () => { // Verify audit was created const auditRes = await chai.request(app) .get(`/api/audit/org/${org.uuid}`) - .set(constants.headers) + .set(constants.secretariatHeaders) expect(auditRes).to.have.status(200) @@ -83,9 +83,9 @@ describe('Create and Update Audit Collection with Org Endpoints', () => { // Verify each has its own audit const audits = await Promise.all([ - chai.request(app).get(`/api/audit/org/${org1.uuid}`).set(constants.headers), - chai.request(app).get(`/api/audit/org/${org2.uuid}`).set(constants.headers), - chai.request(app).get(`/api/audit/org/${org3.uuid}`).set(constants.headers) + chai.request(app).get(`/api/audit/org/${org1.uuid}`).set(constants.secretariatHeaders), + chai.request(app).get(`/api/audit/org/${org2.uuid}`).set(constants.secretariatHeaders), + chai.request(app).get(`/api/audit/org/${org3.uuid}`).set(constants.secretariatHeaders) ]) // Each should have its own audit document @@ -123,7 +123,7 @@ describe('Create and Update Audit Collection with Org Endpoints', () => { // Check audit history const auditRes = await chai.request(app) .get(`/api/audit/org/${org.uuid}`) - .set(constants.headers) + .set(constants.secretariatHeaders) expect(auditRes.body.history).to.have.lengthOf(2) }) @@ -150,7 +150,7 @@ describe('Create and Update Audit Collection with Org Endpoints', () => { // Check audit history const auditRes = await chai.request(app) .get(`/api/audit/org/${testOrg.shortName}`) - .set(constants.headers) + .set(constants.secretariatHeaders) expect(auditRes.body.history).to.have.lengthOf(2) @@ -202,7 +202,7 @@ describe('Create and Update Audit Collection with Org Endpoints', () => { // Check audit history const auditRes = await chai.request(app) .get(`/api/audit/org/${testOrg.uuid}`) - .set(constants.headers) + .set(constants.secretariatHeaders) expect(auditRes.body.history).to.have.lengthOf(4) @@ -229,7 +229,7 @@ describe('Create and Update Audit Collection with Org Endpoints', () => { // Check audit history const auditRes = await chai.request(app) .get(`/api/audit/org/${testOrg.uuid}`) - .set(constants.headers) + .set(constants.secretariatHeaders) expect(auditRes).to.have.status(404) // Now update org to trigger audit creation const updateRes = await chai.request(app) @@ -245,7 +245,7 @@ describe('Create and Update Audit Collection with Org Endpoints', () => { // Check audit history const auditResCreation = await chai.request(app) .get(`/api/audit/org/${testOrg.uuid}`) - .set(constants.headers) + .set(constants.secretariatHeaders) // Should have 2 entries: initial creation of current org object + new update expect(auditResCreation.body.history).to.have.lengthOf(2) }) diff --git a/test/integration-tests/constants.js b/test/integration-tests/constants.js index de4946825..0e26763fd 100644 --- a/test/integration-tests/constants.js +++ b/test/integration-tests/constants.js @@ -1,35 +1,34 @@ -const headers = { +const secretariatHeaders = { 'CVE-API-ORG': 'mitre', - 'content-type': 'application/json', 'CVE-API-USER': 'test_secretariat_0@mitre.org', 'CVE-API-KEY': 'TCF25YM-39C4H6D-KA32EGF-V5XSHN3' } -const nonSecretariatUserHeaders = { +const cnaHeaders = { 'CVE-API-ORG': 'win_5', 'CVE-API-Key': 'TCF25YM-39C4H6D-KA32EGF-V5XSHN3', 'CVE-API-USER': 'jasminesmith@win_5.com' } -const nonSecretariatUserHeaders2 = { +const cnaHeaders2 = { 'CVE-API-ORG': 'win_5', 'CVE-API-Key': 'TCF25YM-39C4H6D-KA32EGF-V5XSHN3', 'CVE-API-USER': 'win_5_admin@win_5.com' } -const nonSecretariatUserHeaders3 = { +const cnaHeaders3 = { 'CVE-API-ORG': 'evidence_15', 'CVE-API-Key': 'TCF25YM-39C4H6D-KA32EGF-V5XSHN3', 'CVE-API-USER': 'timothymyers@evidence_15.com' } -const nonSecretariatUserHeadersWithAdp2 = { +const cnaHeadersWithAdp2 = { 'CVE-API-ORG': 'range_4', 'CVE-API-Key': 'TCF25YM-39C4H6D-KA32EGF-V5XSHN3', 'CVE-API-USER': 'scottmitchell@range_4.com' } -const badNonSecretariatUserHeaders = { +const badCnaHeaders = { 'CVE-API-ORG': 'activity_6', 'CVE-API-Key': 'TCF25YM-39C4H6D-KA32EGF-V5XSHN3', 'CVE-API-USER': 'benjaminsimmons@activity_6.com' @@ -420,12 +419,12 @@ const existingRegistryOrg = { } module.exports = { - headers, - nonSecretariatUserHeaders, - nonSecretariatUserHeaders2, - nonSecretariatUserHeaders3, - badNonSecretariatUserHeaders, - nonSecretariatUserHeadersWithAdp2, + secretariatHeaders, + cnaHeaders, + cnaHeaders2, + cnaHeaders3, + badCnaHeaders, + cnaHeadersWithAdp2, testCve, testCveEdited, enrichedCve, diff --git a/test/integration-tests/conversation/conversationTest.js b/test/integration-tests/conversation/conversationTest.js index 802199ff2..610e3b1f7 100644 --- a/test/integration-tests/conversation/conversationTest.js +++ b/test/integration-tests/conversation/conversationTest.js @@ -16,7 +16,7 @@ describe('Testing Conversation endpoints', () => { await chai .request(app) .get('/api/registry/org/win_5') - .set(constants.headers) + .set(constants.secretariatHeaders) .then((res, err) => { expect(err).to.be.undefined expect(res).to.have.status(200) @@ -26,7 +26,7 @@ describe('Testing Conversation endpoints', () => { await chai .request(app) .get('/api/registry/org/mitre/user/test_secretariat_0@mitre.org') - .set(constants.headers) + .set(constants.secretariatHeaders) .then((res, err) => { expect(err).to.be.undefined expect(res).to.have.status(200) @@ -42,7 +42,7 @@ describe('Testing Conversation endpoints', () => { } await chai.request(app) .post(`/api/conversation/target/${orgUUID}`) - .set(constants.headers) + .set(constants.secretariatHeaders) .send(conversation) .then((res, err) => { expect(err).to.be.undefined @@ -83,7 +83,7 @@ describe('Testing Conversation endpoints', () => { const res = await chai .request(app) .post(`/api/conversation/target/${orgUUID}`) - .set(constants.headers) + .set(constants.secretariatHeaders) .send(conversation) expect(res).to.have.status(200) @@ -99,7 +99,7 @@ describe('Testing Conversation endpoints', () => { const convoRes = await chai.request(app) .get(`/api/conversation/target/${orgUUID}`) - .set(constants.headers) + .set(constants.secretariatHeaders) expect(convoRes).to.have.status(200) @@ -119,7 +119,7 @@ describe('Testing Conversation endpoints', () => { it('Should get all conversations', async () => { await chai.request(app) .get('/api/conversation') - .set(constants.headers) + .set(constants.secretariatHeaders) .then((res, err) => { expect(err).to.be.undefined expect(res).to.have.status(200) @@ -132,7 +132,7 @@ describe('Testing Conversation endpoints', () => { it('Should get and see all conversations for target UUID as Secretariat', async () => { await chai.request(app) .get(`/api/conversation/target/${orgUUID}`) - .set(constants.headers) + .set(constants.secretariatHeaders) .then((res, err) => { expect(err).to.be.undefined expect(res).to.have.status(200) @@ -151,7 +151,7 @@ describe('Testing Conversation endpoints', () => { it('Should fail to post a conversation with no body', async () => { await chai.request(app) .post(`/api/conversation/target/${orgUUID}`) - .set(constants.headers) + .set(constants.secretariatHeaders) .send({}) .then((res, err) => { expect(err).to.be.undefined diff --git a/test/integration-tests/conversation/editConversationTest.js b/test/integration-tests/conversation/editConversationTest.js index 7adff82e6..0e7a3916c 100644 --- a/test/integration-tests/conversation/editConversationTest.js +++ b/test/integration-tests/conversation/editConversationTest.js @@ -8,7 +8,7 @@ const constants = require('../constants.js') const app = require('../../../src/index.js') const orgAdminHeaders = { - ...constants.headers, + ...constants.secretariatHeaders, 'CVE-API-ORG': 'activity_6', 'CVE-API-Key': 'TCF25YM-39C4H6D-KA32EGF-V5XSHN3', 'CVE-API-USER': 'activity_6_admin@activity_6.com' @@ -24,7 +24,7 @@ describe('Testing Conversation endpoints', () => { await chai .request(app) .get('/api/registry/org/activity_6') - .set(constants.headers) + .set(constants.secretariatHeaders) .then((res, err) => { expect(err).to.be.undefined expect(res).to.have.status(200) @@ -34,7 +34,7 @@ describe('Testing Conversation endpoints', () => { await chai .request(app) .get('/api/registry/org/mitre/user/test_secretariat_0@mitre.org') - .set(constants.headers) + .set(constants.secretariatHeaders) .then((res, err) => { expect(err).to.be.undefined expect(res).to.have.status(200) @@ -44,7 +44,7 @@ describe('Testing Conversation endpoints', () => { await chai .request(app) .get('/api/registry/org/activity_6/user/activity_6_admin@activity_6.com') - .set(constants.headers) + .set(constants.secretariatHeaders) .then((res, err) => { expect(err).to.be.undefined expect(res).to.have.status(200) @@ -72,7 +72,7 @@ describe('Testing Conversation endpoints', () => { await chai .request(app) .post(`/api/conversation/target/${org.UUID}`) - .set(constants.headers) + .set(constants.secretariatHeaders) .send({ body: 'secretariat test', visibility: 'public' @@ -116,7 +116,7 @@ describe('Testing Conversation endpoints', () => { it('Should update body and visibility of own conversation as Secretariat', async () => { await chai.request(app) .put('/api/registry/org/activity_6/conversation/1') - .set(constants.headers) + .set(constants.secretariatHeaders) .send({ body: 'secretariat test updated', visibility: 'private' @@ -146,7 +146,7 @@ describe('Testing Conversation endpoints', () => { it('Should update body and visibility of conversation not owned by Secretariat', async () => { await chai.request(app) .put('/api/registry/org/activity_6/conversation/0') - .set(constants.headers) + .set(constants.secretariatHeaders) .send({ body: 'admin test updated by secretariat', visibility: 'private' @@ -180,7 +180,7 @@ describe('Testing Conversation endpoints', () => { await chai .request(app) .put('/api/registry/org/activity_6/conversation/5') - .set(constants.headers) + .set(constants.secretariatHeaders) .send({ body: 'test' }) diff --git a/test/integration-tests/cve-id/cveIdUpdateTest.js b/test/integration-tests/cve-id/cveIdUpdateTest.js index c274fe170..e967ab22b 100644 --- a/test/integration-tests/cve-id/cveIdUpdateTest.js +++ b/test/integration-tests/cve-id/cveIdUpdateTest.js @@ -6,20 +6,22 @@ const expect = chai.expect const constants = require('../constants.js') const app = require('../../../src/index.js') -const helpers = require('../helpers.js') +const api = require('../api.js') const shortName = 'win_5' describe('Text PUT CVE-ID/:id', () => { let cveId before(async () => { - cveId = await helpers.cveIdReserveHelper(1, '2023', shortName, 'non-sequential') + const reserveRes = await api.reserveCveIdAsCna('2023', shortName) + expect(reserveRes).to.have.status(200) + cveId = reserveRes.body.cve_ids[0].cve_id }) context('State parameter Tests', () => { it('Endpoint should return a 400 when state org is set to published', async () => { await chai.request(app) .put(`/api/cve-id/${cveId}?state=PUBLISHED`) - .set(constants.headers) + .set(constants.secretariatHeaders) .then((res, err) => { expect(err).to.be.undefined expect(res).to.have.status(400) @@ -28,7 +30,7 @@ describe('Text PUT CVE-ID/:id', () => { it('Endpoint should allow the state parameter to be set to reserved', async () => { await chai.request(app) .put(`/api/cve-id/${cveId}?state=REJECTED`) - .set(constants.headers) + .set(constants.secretariatHeaders) .then((res, err) => { expect(err).to.be.undefined expect(res).to.have.status(200) @@ -37,7 +39,7 @@ describe('Text PUT CVE-ID/:id', () => { it('Endpoint should still not allow a REJECTED endpoint to be set to published', async () => { await chai.request(app) .put(`/api/cve-id/${cveId}?state=PUBLISHED`) - .set(constants.headers) + .set(constants.secretariatHeaders) .then((res, err) => { expect(err).to.be.undefined expect(res).to.have.status(400) diff --git a/test/integration-tests/cve-id/getCveIdTest.js b/test/integration-tests/cve-id/getCveIdTest.js index 12ed01c0b..9c87164ee 100644 --- a/test/integration-tests/cve-id/getCveIdTest.js +++ b/test/integration-tests/cve-id/getCveIdTest.js @@ -7,12 +7,12 @@ const _ = require('lodash') const expect = chai.expect const constants = require('../constants.js') -const helpers = require('../helpers.js') +const api = require('../api.js') const app = require('../../../src/index.js') describe('Testing Get CVE-ID endpoint', () => { // TODO: Update this test to dynamically calculate reserved count. - const RESESRVED_COUNT = 124 + const RESESRVED_COUNT = 125 const YEAR_COUNT = 10 const PUB_YEAR_COUNT = 4 const TIME_WINDOW_COUNT = 40 @@ -21,7 +21,7 @@ describe('Testing Get CVE-ID endpoint', () => { it('Get CVE-ID should return everything when no parameters are specifed', async () => { await chai.request(app) .get('/api/cve-id') - .set(constants.headers) + .set(constants.secretariatHeaders) .then((res, err) => { expect(err).to.be.undefined expect(res).to.have.status(200) @@ -30,7 +30,7 @@ describe('Testing Get CVE-ID endpoint', () => { it('Get CVE-ID should return an empty array when time modified is set to a very far future date', async () => { await chai.request(app) .get('/api/cve-id?time_modified.gt=2100-01-01T00:00:00') - .set(constants.headers) + .set(constants.secretariatHeaders) .then((res, err) => { expect(err).to.be.undefined expect(res).to.have.status(200) @@ -41,7 +41,7 @@ describe('Testing Get CVE-ID endpoint', () => { it('Get all CVE-IDs modified within a given timeframe', async () => { await chai.request(app) .get('/api/cve-id?time_modified.gt=2021-05-11T15:05:20.093Z&time_modified.lt=2021-05-11T15:07:00.093Z') - .set(constants.headers) + .set(constants.secretariatHeaders) .then((res, err) => { expect(err).to.be.undefined expect(res).to.have.status(200) @@ -51,7 +51,7 @@ describe('Testing Get CVE-ID endpoint', () => { it('Get all CVE-IDs in the RESERVED state', async () => { await chai.request(app) .get('/api/cve-id?state=RESERVED') - .set(constants.headers) + .set(constants.secretariatHeaders) .then((res, err) => { expect(err).to.be.undefined expect(res).to.have.status(200) @@ -62,7 +62,7 @@ describe('Testing Get CVE-ID endpoint', () => { it('Get all CVE-IDs in the PUBLISHED state', async () => { await chai.request(app) .get('/api/cve-id?state=PUBLISHED') - .set(constants.headers) + .set(constants.secretariatHeaders) .then((res, err) => { expect(err).to.be.undefined expect(res).to.have.status(200) @@ -72,7 +72,7 @@ describe('Testing Get CVE-ID endpoint', () => { it('Get all CVE-IDs in the REJECTED state', async () => { await chai.request(app) .get('/api/cve-id?state=REJECTED') - .set(constants.headers) + .set(constants.secretariatHeaders) .then((res, err) => { expect(err).to.be.undefined expect(res).to.have.status(200) @@ -82,7 +82,7 @@ describe('Testing Get CVE-ID endpoint', () => { it('Get all CVE-IDs with cve_id_year 1999', async () => { await chai.request(app) .get('/api/cve-id?cve_id_year=1999') - .set(constants.headers) + .set(constants.secretariatHeaders) .then((res, err) => { expect(err).to.be.undefined expect(res).to.have.status(200) @@ -93,7 +93,7 @@ describe('Testing Get CVE-ID endpoint', () => { it('Get all CVE-IDs with cve_id_year 1999 with state PUBLISHED', async () => { await chai.request(app) .get('/api/cve-id?cve_id_year=1999&state=PUBLISHED') - .set(constants.headers) + .set(constants.secretariatHeaders) .then((res, err) => { expect(err).to.be.undefined expect(res).to.have.status(200) @@ -104,21 +104,23 @@ describe('Testing Get CVE-ID endpoint', () => { it('Z format should be be valid', async () => { await chai.request(app) .get('/api/cve-id?time_modified.gt=2024-01-15T00:00:01-02:00') - .set(constants.headers) + .set(constants.secretariatHeaders) .then((res, err) => { expect(err).to.be.undefined expect(res).to.have.status(200) }) }) it('For non Secretariat users, should redact requested_by.user values not in requested_by.cna org', async () => { - const cveId = await helpers.cveIdReserveHelper(1, '2023', constants.nonSecretariatUserHeaders['CVE-API-ORG'], 'non-sequential') + const reserveRes = await api.reserveCveIdAsCna('2023', constants.cnaHeaders['CVE-API-ORG']) + expect(reserveRes).to.have.status(200) + const cveId = reserveRes.body.cve_ids[0].cve_id // change users org for testing - await helpers.userOrgUpdateAsSecHelper(constants.nonSecretariatUserHeaders['CVE-API-USER'], constants.nonSecretariatUserHeaders['CVE-API-ORG'], 'mitre') + await api.updateUserOrgAsSecretariat(constants.cnaHeaders['CVE-API-USER'], constants.cnaHeaders['CVE-API-ORG'], 'mitre') await chai.request(app) .get('/api/cve-id?state=RESERVED') - .set(constants.nonSecretariatUserHeaders2) + .set(constants.cnaHeaders2) .then(async (res, err) => { const cveIdObject = _.find(res.body.cve_ids, obj => { return obj.cve_id === cveId @@ -128,18 +130,20 @@ describe('Testing Get CVE-ID endpoint', () => { expect(cveIdObject.requested_by.user).to.equal('REDACTED') // Reset user to original org - await helpers.userOrgUpdateAsSecHelper(constants.nonSecretariatUserHeaders['CVE-API-USER'], 'mitre', 'win_5') + await api.updateUserOrgAsSecretariat(constants.cnaHeaders['CVE-API-USER'], 'mitre', 'win_5') }) }) it('For non Secretariat users, should redact requested_by.user values when requested_by.cna is not owning_cna', async () => { - const cveId = await helpers.cveIdReserveHelper(1, '2023', constants.nonSecretariatUserHeaders['CVE-API-ORG'], 'non-sequential') + const reserveRes = await api.reserveCveIdAsCna('2023', constants.cnaHeaders['CVE-API-ORG']) + expect(reserveRes).to.have.status(200) + const cveId = reserveRes.body.cve_ids[0].cve_id // change cve-id's owning_org for testing - await helpers.updateOwningOrgAsSecHelper(cveId, constants.nonSecretariatUserHeaders3['CVE-API-ORG']) + await api.updateCveIdOwningOrgAsSecretariat(cveId, constants.cnaHeaders3['CVE-API-ORG']) await chai.request(app) .get('/api/cve-id?state=RESERVED') - .set(constants.nonSecretariatUserHeaders3) + .set(constants.cnaHeaders3) .then(async (res, err) => { const cveIdObject = _.find(res.body.cve_ids, obj => { return obj.cve_id === cveId @@ -150,42 +154,46 @@ describe('Testing Get CVE-ID endpoint', () => { }) }) it('For Secretariat users, should redact requested_by.user values not in requested_by.cna org', async () => { - const cveId = await helpers.cveIdReserveHelper(1, '2023', constants.nonSecretariatUserHeaders['CVE-API-ORG'], 'non-sequential') + const reserveRes = await api.reserveCveIdAsCna('2023', constants.cnaHeaders['CVE-API-ORG']) + expect(reserveRes).to.have.status(200) + const cveId = reserveRes.body.cve_ids[0].cve_id // change users org for testing - await helpers.userOrgUpdateAsSecHelper(constants.nonSecretariatUserHeaders['CVE-API-USER'], constants.nonSecretariatUserHeaders['CVE-API-ORG'], 'mitre') + await api.updateUserOrgAsSecretariat(constants.cnaHeaders['CVE-API-USER'], constants.cnaHeaders['CVE-API-ORG'], 'mitre') await chai.request(app) .get('/api/cve-id?state=RESERVED') - .set(constants.headers) + .set(constants.secretariatHeaders) .then(async (res, err) => { const cveIdObject = _.find(res.body.cve_ids, obj => { return obj.cve_id === cveId }) expect(err).to.be.undefined expect(res).to.have.status(200) - expect(cveIdObject.requested_by.user).to.equal(constants.nonSecretariatUserHeaders['CVE-API-USER']) + expect(cveIdObject.requested_by.user).to.equal(constants.cnaHeaders['CVE-API-USER']) // Reset user to original org - await helpers.userOrgUpdateAsSecHelper(constants.nonSecretariatUserHeaders['CVE-API-USER'], 'mitre', 'win_5') + await api.updateUserOrgAsSecretariat(constants.cnaHeaders['CVE-API-USER'], 'mitre', 'win_5') }) }) it('For Secretariat users, should redact requested_by.user values when requested_by.cna is not owning_cna', async () => { - const cveId = await helpers.cveIdReserveHelper(1, '2023', constants.nonSecretariatUserHeaders['CVE-API-ORG'], 'non-sequential') + const reserveRes = await api.reserveCveIdAsCna('2023', constants.cnaHeaders['CVE-API-ORG']) + expect(reserveRes).to.have.status(200) + const cveId = reserveRes.body.cve_ids[0].cve_id // change cve-id's owning_org for testing - await helpers.updateOwningOrgAsSecHelper(cveId, constants.nonSecretariatUserHeaders3['CVE-API-ORG']) + await api.updateCveIdOwningOrgAsSecretariat(cveId, constants.cnaHeaders3['CVE-API-ORG']) await chai.request(app) .get('/api/cve-id?state=RESERVED') - .set(constants.headers) + .set(constants.secretariatHeaders) .then(async (res, err) => { const cveIdObject = _.find(res.body.cve_ids, obj => { return obj.cve_id === cveId }) expect(err).to.be.undefined expect(res).to.have.status(200) - expect(cveIdObject.requested_by.user).to.equal(constants.nonSecretariatUserHeaders['CVE-API-USER']) + expect(cveIdObject.requested_by.user).to.equal(constants.cnaHeaders['CVE-API-USER']) }) }) }) @@ -193,7 +201,7 @@ describe('Testing Get CVE-ID endpoint', () => { it('Feb 29 2100 should not be valid', async () => { await chai.request(app) .get('/api/cve-id?time_modified.gt=2100-02-29T00:00:00Z') - .set(constants.headers) + .set(constants.secretariatHeaders) .then((res, err) => { expect(err).to.be.undefined expect(res).to.have.status(400) diff --git a/test/integration-tests/cve-id/reserveCveIdTest.js b/test/integration-tests/cve-id/reserveCveIdTest.js index 42e8f58d6..0181c0c06 100644 --- a/test/integration-tests/cve-id/reserveCveIdTest.js +++ b/test/integration-tests/cve-id/reserveCveIdTest.js @@ -16,7 +16,7 @@ describe('Testing Reserve CVE-ID Endpoints', () => { it('Should return 200 and have correct number of cve-id results for a successful non-squential cve-id reservation ', (done) => { chai.request(app) .post(`/api/cve-id?amount=${requestLength}&cve_year=2023&short_name=mitre&batch_type=non-sequential`) - .set(constants.headers) + .set(constants.secretariatHeaders) .end((err, res) => { expect(err).to.be.null expect(res.body).to.have.property('cve_ids') @@ -28,7 +28,7 @@ describe('Testing Reserve CVE-ID Endpoints', () => { it('Should return 200 and have correct number of cve-id results in sequential order for a successful sequential cve-id reserveration ', (done) => { chai.request(app) .post('/api/cve-id?amount=10&cve_year=2023&short_name=mitre&batch_type=sequential') - .set(constants.headers) + .set(constants.secretariatHeaders) .end((err, res) => { expect(err).to.be.null expect(res.body.cve_ids).to.have.length(10) @@ -50,7 +50,7 @@ describe('Testing Reserve CVE-ID Endpoints', () => { it('Should return 403 when a request is by a user to reserve cve-ids outside of their organization ', (done) => { chai.request(app) .post('/api/cve-id?amount=10&cve_year=2023&short_name=mitre&batch_type=sequential') - .set(constants.nonSecretariatUserHeaders) + .set(constants.cnaHeaders) .end((err, res) => { expect(err).to.be.null expect(res).to.have.status(403) @@ -58,6 +58,4 @@ describe('Testing Reserve CVE-ID Endpoints', () => { }) }) }) - - // afterEach(() => { }) }) diff --git a/test/integration-tests/cve/adpUserQuotaTest.js b/test/integration-tests/cve/adpUserQuotaTest.js index ff1716216..8b1ef6625 100644 --- a/test/integration-tests/cve/adpUserQuotaTest.js +++ b/test/integration-tests/cve/adpUserQuotaTest.js @@ -13,7 +13,7 @@ describe('Testing that a user maintains their quota if the cna role is removed', let orgUuid, quota await chai.request(app) .get('/api/org/win_5/users') - .set(constants.headers) + .set(constants.secretariatHeaders) .then((res, err) => { expect(err).to.be.undefined expect(res).to.have.status(200) @@ -22,7 +22,7 @@ describe('Testing that a user maintains their quota if the cna role is removed', // Check to make sure ORG has the role. await chai.request(app) .get(`/api/org/${orgUuid}`) - .set(constants.headers) + .set(constants.secretariatHeaders) .then((res, err) => { expect(err).to.be.undefined expect(res).to.have.status(200) @@ -33,7 +33,7 @@ describe('Testing that a user maintains their quota if the cna role is removed', // Remove the role from the user. & check the quota and active roles await chai.request(app) .put('/api/org/win_5?active_roles.remove=CNA') - .set(constants.headers) + .set(constants.secretariatHeaders) .then((res, err) => { expect(err).to.be.undefined expect(res).to.have.status(200) @@ -46,7 +46,7 @@ describe('Testing that a user maintains their quota if the cna role is removed', afterEach(async () => { await chai.request(app) .put('/api/org/win_5?active_roles.add=CNA') - .set(constants.headers) + .set(constants.secretariatHeaders) .then((res, err) => { expect(err).to.be.undefined expect(res).to.have.status(200) diff --git a/test/integration-tests/cve/authzValidation.js b/test/integration-tests/cve/authzValidation.js new file mode 100644 index 000000000..d56b6cf9b --- /dev/null +++ b/test/integration-tests/cve/authzValidation.js @@ -0,0 +1,41 @@ +const chai = require('chai') +const chaiHttp = require('chai-http') +const { reserveCveIdAsCna, updateCveAsSecretariat, createCveAsSecretariat } = require('../api.js') +const { cnaHeaders, secretariatHeaders } = require('../constants.js') +const app = require('../../../src/index.js') +chai.use(chaiHttp) + +describe('Testing Authorization API', function () { + // Before each test, reserve a CVE ID and create the CVE Record for that ID. + beforeEach(async function () { + const reserveRes = await reserveCveIdAsCna('2023', cnaHeaders['CVE-API-ORG']) + chai.expect(reserveRes).to.have.status(200) + + this.cveId = reserveRes.body.cve_ids[0].cve_id + + const createRes = await createCveAsSecretariat(this.cveId) + chai.expect(createRes).to.have.status(200) + + this.cveRecord = createRes.body.created + }) + + it('Secretariat can update CVE Record', async function () { + app.set('useNewAuthzApi', true) + + const res = await chai + .request(app) + .put(`/api/cve/${this.cveId}`) + .set(secretariatHeaders) + .send(this.cveRecord) + + chai.expect(res).to.have.status(200) + + app.set('useNewAuthzApi', false) + }) + + it('Non-Secretariat cannot update CVE Record', async function () { + // Overrides default headers with non-secretariat headers, so it should fail authz. + const res = await updateCveAsSecretariat(this.cveId, this.cveRecord, cnaHeaders) + chai.expect(res).to.have.status(403) + }) +}) diff --git a/test/integration-tests/cve/cursorPaginationTest.js b/test/integration-tests/cve/cursorPaginationTest.js index 07216c967..95466272d 100644 --- a/test/integration-tests/cve/cursorPaginationTest.js +++ b/test/integration-tests/cve/cursorPaginationTest.js @@ -2,7 +2,7 @@ const chai = require('chai') chai.use(require('chai-http')) -const helpers = require('../helpers.js') +const api = require('../api.js') const expect = chai.expect @@ -13,9 +13,13 @@ const currentDate = new Date().toISOString() describe('Testing Get cve_cursor endpoint', () => { let cveIds = [] before(async () => { - cveIds = await helpers.cveIdBulkReserveHelper(5, '2023', constants.headers['CVE-API-ORG'], 'sequential') + const reserveRes = await api.bulkReserveCveIdAsSecretariat(5, '2023', constants.secretariatHeaders['CVE-API-ORG'], 'sequential') + cveIds = reserveRes.body.cve_ids.map((cveId) => { + return cveId.cve_id + }) + for (const cveId of cveIds) { - await helpers.cveRequestAsSecHelper(cveId) + await api.createCveAsSecretariat(cveId) } }) const TOTAL_COUNT = 119 @@ -24,7 +28,7 @@ describe('Testing Get cve_cursor endpoint', () => { it('Get cve_cursor should return all records when no parameters are specifed', async () => { await chai.request(app) .get('/api/cve_cursor') - .set(constants.headers) + .set(constants.secretariatHeaders) .then((res, err) => { expect(err).to.be.undefined expect(res).to.have.status(200) @@ -35,7 +39,7 @@ describe('Testing Get cve_cursor endpoint', () => { const limit = 2 await chai.request(app) .get('/api/cve_cursor?limit=2') - .set(constants.headers) + .set(constants.secretariatHeaders) .then((res, err) => { expect(err).to.be.undefined expect(res).to.have.status(200) @@ -54,7 +58,7 @@ describe('Testing Get cve_cursor endpoint', () => { // Request page 1 await requester.get('/api/cve_cursor?limit=2&time_modified.gt=' + currentDate) - .set(constants.headers) + .set(constants.secretariatHeaders) .then(async (res, err) => { expect(err).to.be.undefined expect(res).to.have.status(200) @@ -71,7 +75,7 @@ describe('Testing Get cve_cursor endpoint', () => { // Request page 2 await requester.get('/api/cve_cursor?limit=2&next_page=' + next + '&time_modified.gt=' + currentDate) - .set(constants.headers) + .set(constants.secretariatHeaders) .then((res, err) => { expect(err).to.be.undefined expect(res).to.have.status(200) @@ -87,12 +91,16 @@ describe('Testing Get cve_cursor endpoint', () => { }) // Create new CVE record, which would appear at the beginning, but data should not be moved - const newcveId = await helpers.cveIdBulkReserveHelper(1, '2023', constants.headers['CVE-API-ORG'], 'sequential') - await helpers.cveRequestAsSecHelper(newcveId) + const newReserveRes = await api.bulkReserveCveIdAsSecretariat(1, '2023', constants.secretariatHeaders['CVE-API-ORG'], 'sequential') + const newcveId = newReserveRes.body.cve_ids.map((cveId) => { + return cveId.cve_id + }) + + await api.createCveAsSecretariat(newcveId) // Request page 2 again using same next_page string, should see no change in results await requester.get('/api/cve_cursor?limit=2&next_page=' + next + '&time_modified.gt=' + currentDate) - .set(constants.headers) + .set(constants.secretariatHeaders) .then((res, err) => { expect(err).to.be.undefined expect(res).to.have.status(200) @@ -103,7 +111,7 @@ describe('Testing Get cve_cursor endpoint', () => { // Request page 1 again using prev_page string from first page 2 request, should see no change in results await requester.get('/api/cve_cursor?limit=2&previous_page=' + prev + '&time_modified.gt=' + currentDate) - .set(constants.headers) + .set(constants.secretariatHeaders) .then((res, err) => { expect(err).to.be.undefined expect(res).to.have.status(200) @@ -114,7 +122,7 @@ describe('Testing Get cve_cursor endpoint', () => { // Request page 1 again without next/prev, should see new record await requester.get('/api/cve_cursor?limit=2&time_modified.gt=' + currentDate) - .set(constants.headers) + .set(constants.secretariatHeaders) .then((res, err) => { expect(err).to.be.undefined expect(res).to.have.status(200) @@ -138,7 +146,7 @@ describe('Testing Get cve_cursor endpoint', () => { // Request page 1 await requester.get('/api/cve_cursor?limit=2&time_modified.lt=' + currentDate) - .set(constants.headers) + .set(constants.secretariatHeaders) .then(async (res, err) => { expect(err).to.be.undefined expect(res).to.have.status(200) @@ -155,7 +163,7 @@ describe('Testing Get cve_cursor endpoint', () => { // Request page 2 await requester.get('/api/cve_cursor?limit=2&next_page=' + next + '&time_modified.lt=' + currentDate) - .set(constants.headers) + .set(constants.secretariatHeaders) .then(async (res, err) => { expect(err).to.be.undefined expect(res).to.have.status(200) @@ -171,11 +179,11 @@ describe('Testing Get cve_cursor endpoint', () => { }) // Modify page 1 CVE record, which would remove it, but data should not be moved - await helpers.cveUpdateAsSecHelper(pageOneRec1.cveMetadata.cveId, constants.testCve) + await api.updateCveAsSecretariatWithCnaContainer(pageOneRec1.cveMetadata.cveId, constants.testCve) // Request page 2 again using same next_page string, should see no change in results await requester.get('/api/cve_cursor?limit=2&next_page=' + next + '&time_modified.lt=' + currentDate) - .set(constants.headers) + .set(constants.secretariatHeaders) .then((res, err) => { expect(err).to.be.undefined expect(res).to.have.status(200) @@ -186,7 +194,7 @@ describe('Testing Get cve_cursor endpoint', () => { // Request page 1 again using prev_page string from first page 2 request, should have 1 record because modified one is filtered out await requester.get('/api/cve_cursor?limit=2&previous_page=' + prev + '&time_modified.lt=' + currentDate) - .set(constants.headers) + .set(constants.secretariatHeaders) .then((res, err) => { expect(err).to.be.undefined expect(res).to.have.status(200) @@ -197,7 +205,7 @@ describe('Testing Get cve_cursor endpoint', () => { // Request page 1 again without next/prev, should see 2 records, record from page 2 shifted over await requester.get('/api/cve_cursor?limit=2&time_modified.lt=' + currentDate) - .set(constants.headers) + .set(constants.secretariatHeaders) .then((res, err) => { expect(err).to.be.undefined expect(res).to.have.status(200) diff --git a/test/integration-tests/cve/erlCheckPOSTTest.js b/test/integration-tests/cve/erlCheckPOSTTest.js index 32da1e905..0c33958ec 100644 --- a/test/integration-tests/cve/erlCheckPOSTTest.js +++ b/test/integration-tests/cve/erlCheckPOSTTest.js @@ -1,32 +1,27 @@ /* eslint-disable no-unused-expressions */ const chai = require('chai') -chai.use(require('chai-http')) - -const expect = chai.expect - const constants = require('../constants.js') const app = require('../../../src/index.js') -const helpers = require('../helpers.js') - -const requestLength = 1 -const shortName = 'win_5' -const cveYear = '2023' -const batchType = 'non-sequential' +const api = require('../api.js') +const expect = chai.expect +chai.use(require('chai-http')) describe('Testing POST ERLCheck field', () => { let cveId + beforeEach(async () => { - cveId = await helpers.cveIdReserveHelper(requestLength, cveYear, shortName, batchType) + const reserveRes = await api.reserveCveIdAsCna('2023', constants.cnaHeaders['CVE-API-ORG']) + cveId = reserveRes.body.cve_ids[0].cve_id }) + context('ERL POST Check Tests', () => { it('POST CVE that is ERL Checked with correct details', async () => { await chai.request(app) .post(`/api/cve/${cveId}/cna?erlcheck=true`) - .set(constants.nonSecretariatUserHeaders) + .set(constants.cnaHeaders) .send(constants.enrichedCve) .then((res, err) => { - // Safety Expect expect(err).to.be.undefined expect(res).to.have.status(200) }) @@ -35,10 +30,9 @@ describe('Testing POST ERLCheck field', () => { it('POST CVE that is ERL checked with the incorrect details', async () => { await chai.request(app) .post(`/api/cve/${cveId}/cna?erlcheck=true`) - .set(constants.nonSecretariatUserHeaders) + .set(constants.cnaHeaders) .send(constants.testCve) .then((res, err) => { - // Safety Expect expect(res).to.have.status(403) }) }) @@ -46,10 +40,9 @@ describe('Testing POST ERLCheck field', () => { it('POST CVE that is ERL is false with correct details', async () => { await chai.request(app) .post(`/api/cve/${cveId}/cna?erlcheck=false`) - .set(constants.nonSecretariatUserHeaders) + .set(constants.cnaHeaders) .send(constants.enrichedCve) .then((res, err) => { - // Safety Expect expect(err).to.be.undefined expect(res).to.have.status(200) }) @@ -58,10 +51,9 @@ describe('Testing POST ERLCheck field', () => { it('POST CVE that is ERL is false with the incorrect details', async () => { await chai.request(app) .post(`/api/cve/${cveId}/cna?erlcheck=false`) - .set(constants.nonSecretariatUserHeaders) + .set(constants.cnaHeaders) .send(constants.testCve) .then((res, err) => { - // Safety Expect expect(res).to.have.status(200) }) }) @@ -69,10 +61,9 @@ describe('Testing POST ERLCheck field', () => { it('POST CVE that is ERL is null with the incorrect details', async () => { await chai.request(app) .post(`/api/cve/${cveId}/cna?erlcheck=null`) - .set(constants.nonSecretariatUserHeaders) + .set(constants.cnaHeaders) .send(constants.testCve) .then((res, err) => { - // Safety Expect expect(res).to.have.status(400) }) }) diff --git a/test/integration-tests/cve/erlCheckPUTTest.js b/test/integration-tests/cve/erlCheckPUTTest.js index bec8bd1c6..189ac1a15 100644 --- a/test/integration-tests/cve/erlCheckPUTTest.js +++ b/test/integration-tests/cve/erlCheckPUTTest.js @@ -7,28 +7,28 @@ const expect = chai.expect const constants = require('../constants.js') const app = require('../../../src/index.js') -const helpers = require('../helpers.js') +const api = require('../api.js') -const requestLength = 1 const shortName = 'win_5' const cveYear = '2023' -const batchType = 'non-sequential' describe('Testing PUT ERLCheck field', () => { let cveId before(async () => { - cveId = await helpers.cveIdReserveHelper(requestLength, cveYear, shortName, batchType) - await helpers.cveRequestAsCnaHelper(cveId) - console.log('HEre') + const reserveRes = await api.reserveCveIdAsCna(cveYear, shortName) + chai.expect(reserveRes).to.have.status(200) + cveId = reserveRes.body.cve_ids[0].cve_id + + const createRes = await api.createCveAsCna(cveId) + chai.expect(createRes).to.have.status(200) }) context('ERL PUT Check Tests', () => { it('PUT CVE that is ERL Checked with correct details', async () => { await chai.request(app) .put(`/api/cve/${cveId}/cna?erlcheck=true`) - .set(constants.nonSecretariatUserHeaders) + .set(constants.cnaHeaders) .send(constants.enrichedCve) .then((res, err) => { - // Safety Expect expect(err).to.be.undefined expect(res).to.have.status(200) }) @@ -37,7 +37,7 @@ describe('Testing PUT ERLCheck field', () => { it('PUT CVE that is ERL checked with the incorrect details', async () => { await chai.request(app) .put(`/api/cve/${cveId}/cna?erlcheck=true`) - .set(constants.nonSecretariatUserHeaders) + .set(constants.cnaHeaders) .send(constants.testCve) .then((res, err) => { // Safety Expect @@ -48,7 +48,7 @@ describe('Testing PUT ERLCheck field', () => { it('PUT CVE that is ERL is false with correct details', async () => { await chai.request(app) .put(`/api/cve/${cveId}/cna?erlcheck=false`) - .set(constants.nonSecretariatUserHeaders) + .set(constants.cnaHeaders) .send(constants.enrichedCve) .then((res, err) => { // Safety Expect @@ -60,7 +60,7 @@ describe('Testing PUT ERLCheck field', () => { it('PUT CVE that is ERL is false with the incorrect details', async () => { await chai.request(app) .put(`/api/cve/${cveId}/cna?erlcheck=false`) - .set(constants.nonSecretariatUserHeaders) + .set(constants.cnaHeaders) .send(constants.testCve) .then((res, err) => { // Safety Expect @@ -71,7 +71,7 @@ describe('Testing PUT ERLCheck field', () => { it('PUT CVE that is ERL is null with correct details', async () => { await chai.request(app) .put(`/api/cve/${cveId}/cna?erlcheck=null`) - .set(constants.nonSecretariatUserHeaders) + .set(constants.cnaHeaders) .send(constants.enrichedCve) .then((res, err) => { // Safety Expect diff --git a/test/integration-tests/cve/getCveAdpShortNameTest.js b/test/integration-tests/cve/getCveAdpShortNameTest.js index b7f60558e..33b7d6879 100644 --- a/test/integration-tests/cve/getCveAdpShortNameTest.js +++ b/test/integration-tests/cve/getCveAdpShortNameTest.js @@ -5,7 +5,7 @@ const expect = chai.expect const constants = require('../constants.js') const app = require('../../../src/index.js') -const helpers = require('../helpers.js') +const api = require('../api.js') const _ = require('lodash') const shortName = 'win_5' @@ -13,15 +13,21 @@ const shortName = 'win_5' describe('Test cna_modified parameter for get adp short name', () => { let cveId before(async () => { - cveId = await helpers.cveIdReserveHelper(1, '2023', shortName, 'non-sequential') - await helpers.cveRequestAsCnaHelper(cveId) - await helpers.cveUpdateAsCnaHelperWithAdpContainer(cveId, constants.testAdp) + const reserveRes = await api.reserveCveIdAsCna('2023', shortName) + chai.expect(reserveRes).to.have.status(200) + cveId = reserveRes.body.cve_ids[0].cve_id + + const createRes = await api.createCveAsCna(cveId) + chai.expect(createRes).to.have.status(200) + + const updateRes = await api.updateCveAsAdpWithAdpContainer(cveId, constants.testAdp) + chai.expect(updateRes).to.have.status(200) }) context('Positive Test', () => { it('CVE should not be returned with adp_short_name set to fake_org as it does not exist', async () => { await chai.request(app) .get('/api/cve/?adp_short_name=fake_org') - .set(constants.headers) + .set(constants.secretariatHeaders) .then((res, err) => { expect(err).to.be.undefined expect(res).to.have.status(200) @@ -31,7 +37,7 @@ describe('Test cna_modified parameter for get adp short name', () => { it(`CVE should be returned with adp_short_name set to ${shortName} as it has been created`, async () => { await chai.request(app) .get(`/api/cve/?adp_short_name=${shortName}`) - .set(constants.headers) + .set(constants.secretariatHeaders) .then((res, err) => { expect(err).to.be.undefined expect(res).to.have.status(200) @@ -41,7 +47,7 @@ describe('Test cna_modified parameter for get adp short name', () => { it(`Get CVE with adp_short_name set to ${shortName} AND date.gt should return when searched with a known earlier than date`, async () => { await chai.request(app) .get(`/api/cve/?time_modified.gt=2022-01-01T00:00:00&adp_short_name=${shortName}`) - .set(constants.headers) + .set(constants.secretariatHeaders) .then((res, err) => { expect(err).to.be.undefined expect(res).to.have.status(200) @@ -51,7 +57,7 @@ describe('Test cna_modified parameter for get adp short name', () => { it(`Get CVE with with adp_short_name set to ${shortName} AND date.gt should return and empty list when searched with a known bad earlier than date`, async () => { await chai.request(app) .get(`/api/cve/?time_modified.gt=2100-01-01T00:00:00&adp_short_name=${shortName}`) - .set(constants.headers) + .set(constants.secretariatHeaders) .then((res, err) => { expect(err).to.be.undefined expect(res).to.have.status(200) @@ -62,7 +68,7 @@ describe('Test cna_modified parameter for get adp short name', () => { it(`Get CVE with adp_short_name set to ${shortName} AND date.lt should return when searched with a known later than date`, async () => { await chai.request(app) .get(`/api/cve/?time_modified.lt=2100-01-01T00:00:00&adp_short_name=${shortName}`) - .set(constants.headers) + .set(constants.secretariatHeaders) .then((res, err) => { expect(err).to.be.undefined expect(res).to.have.status(200) @@ -72,7 +78,7 @@ describe('Test cna_modified parameter for get adp short name', () => { it(`Get CVE with adp_short_name set to ${shortName} AND date.lt should return and empty list when searched with a known bad later than date`, async () => { await chai.request(app) .get(`/api/cve/?time_modified.lt=2022-01-01T00:00:00&adp_short_name=${shortName}`) - .set(constants.headers) + .set(constants.secretariatHeaders) .then((res, err) => { expect(err).to.be.undefined expect(res).to.have.status(200) diff --git a/test/integration-tests/cve/getCveCnaModifiedTest.js b/test/integration-tests/cve/getCveCnaModifiedTest.js index d3ffbc1e4..c5e70ac28 100644 --- a/test/integration-tests/cve/getCveCnaModifiedTest.js +++ b/test/integration-tests/cve/getCveCnaModifiedTest.js @@ -6,7 +6,7 @@ const expect = chai.expect const constants = require('../constants.js') const app = require('../../../src/index.js') -const helpers = require('../helpers.js') +const api = require('../api.js') const _ = require('lodash') const shortName = 'win_5' @@ -14,14 +14,18 @@ const shortName = 'win_5' describe('Test cna_modified parameter for get CVE', () => { let cveId before(async () => { - cveId = await helpers.cveIdReserveHelper(1, '2023', shortName, 'non-sequential') - await helpers.cveRequestAsCnaHelper(cveId) + const reserveRes = await api.reserveCveIdAsCna('2023', shortName) + chai.expect(reserveRes).to.have.status(200) + cveId = reserveRes.body.cve_ids[0].cve_id + + const createRes = await api.createCveAsCna(cveId) + chai.expect(createRes).to.have.status(200) }) context('Positive Test', () => { it('Get CVE with cna_modified set to true AND date.gt should return when searched with a known earlier than date', async () => { await chai.request(app) .get('/api/cve/?time_modified.gt=2022-01-01T00:00:00&cna_modified=true') - .set(constants.headers) + .set(constants.secretariatHeaders) .then((res, err) => { expect(err).to.be.undefined expect(res).to.have.status(200) @@ -31,7 +35,7 @@ describe('Test cna_modified parameter for get CVE', () => { it('Get CVE with cna_modified set to true AND date.gt should return and empty list when searched with a known bad earlier than date', async () => { await chai.request(app) .get('/api/cve/?time_modified.gt=2100-01-01T00:00:00&cna_modified=true') - .set(constants.headers) + .set(constants.secretariatHeaders) .then((res, err) => { expect(err).to.be.undefined expect(res).to.have.status(200) @@ -42,7 +46,7 @@ describe('Test cna_modified parameter for get CVE', () => { it('Get CVE with cna_modified set to true AND date.lt should return when searched with a known later than date', async () => { await chai.request(app) .get('/api/cve/?time_modified.lt=2100-01-01T00:00:00&cna_modified=true') - .set(constants.headers) + .set(constants.secretariatHeaders) .then((res, err) => { expect(err).to.be.undefined expect(res).to.have.status(200) @@ -52,7 +56,7 @@ describe('Test cna_modified parameter for get CVE', () => { it('Get CVE with cna_modified set to true AND date.lt should return and empty list when searched with a known bad later than date', async () => { await chai.request(app) .get('/api/cve/?time_modified.lt=2022-01-01T00:00:00&cna_modified=true') - .set(constants.headers) + .set(constants.secretariatHeaders) .then((res, err) => { expect(err).to.be.undefined expect(res).to.have.status(200) @@ -64,7 +68,7 @@ describe('Test cna_modified parameter for get CVE', () => { it('CVE should NOT be returned with cna_modified true as it has been created', async () => { await chai.request(app) .get('/api/cve/?cna_modified=true') - .set(constants.headers) + .set(constants.secretariatHeaders) .then((res, err) => { expect(err).to.be.undefined expect(res).to.have.status(400) @@ -72,10 +76,10 @@ describe('Test cna_modified parameter for get CVE', () => { }) it('Get CVE with cna_modified set to true should NOT be returned after being edited', async () => { // Edit the CNA container - await helpers.cveUpdatetAsCnaHelperWithCnaContainer(cveId, constants.testCveEdited) + await api.updateCveAsCnaWithCnaContainer(cveId, constants.testCveEdited) await chai.request(app) .get('/api/cve/?cna_modified=true') - .set(constants.headers) + .set(constants.secretariatHeaders) .then((res, err) => { expect(err).to.be.undefined expect(res).to.have.status(400) diff --git a/test/integration-tests/cve/getCveCount.js b/test/integration-tests/cve/getCveCount.js index db4ba678f..1bc8517c2 100644 --- a/test/integration-tests/cve/getCveCount.js +++ b/test/integration-tests/cve/getCveCount.js @@ -21,7 +21,7 @@ describe('Test get /cve_count for CVE records', () => { it('Get /cve_count should allow privledged user to get count also', async () => { await chai.request(app) .get('/api/cve_count') - .set(constants.headers) + .set(constants.secretariatHeaders) .then((res, err) => { expect(err).to.be.undefined expect(res).to.have.status(200) @@ -31,7 +31,7 @@ describe('Test get /cve_count for CVE records', () => { it('Get /cve_count should return count with valid parameters', async () => { await chai.request(app) .get('/api/cve_count?state=PUBLISHED') - .set(constants.headers) + .set(constants.secretariatHeaders) .then((res, err) => { expect(err).to.be.undefined expect(res).to.have.status(200) @@ -51,7 +51,7 @@ describe('Test get /cve_count for CVE records', () => { it('Get /cve_count should fail if it is passed invalid parameters', async () => { await chai.request(app) .get('/api/cve_count?time_modified.gt=2022-13-01T00:00:00Z') - .set(constants.headers) + .set(constants.secretariatHeaders) .then((res, err) => { expect(err).to.be.undefined expect(res).to.have.status(400) @@ -61,7 +61,7 @@ describe('Test get /cve_count for CVE records', () => { it('Get /cve_count should fail if it is `state` parameter value is invalid ', async () => { await chai.request(app) .get('/api/cve_count?state=SUCESS') - .set(constants.headers) + .set(constants.secretariatHeaders) .then((res, err) => { expect(err).to.be.undefined expect(res).to.have.status(400) diff --git a/test/integration-tests/cve/getCveDateTest.js b/test/integration-tests/cve/getCveDateTest.js index 9e069aeb8..68e4821bb 100644 --- a/test/integration-tests/cve/getCveDateTest.js +++ b/test/integration-tests/cve/getCveDateTest.js @@ -12,7 +12,7 @@ describe('Test time_modified for get CVE', () => { it('Get CVE should fail if time_modified.gt is given a date with an invalid month', async () => { await chai.request(app) .get('/api/cve?time_modified.gt=2022-13-01T00:00:00Z') - .set(constants.headers) + .set(constants.secretariatHeaders) .then((res, err) => { expect(err).to.be.undefined expect(res).to.have.status(400) @@ -22,7 +22,7 @@ describe('Test time_modified for get CVE', () => { it('Get CVE should fail if time_modified.lt is given a date with an invalid month', async () => { await chai.request(app) .get('/api/cve?time_modified.lt=2022-13-01T00:00:00Z') - .set(constants.headers) + .set(constants.secretariatHeaders) .then((res, err) => { expect(err).to.be.undefined expect(res).to.have.status(400) @@ -32,7 +32,7 @@ describe('Test time_modified for get CVE', () => { it('Get CVE should fail if time_modified.lt is given a date with an invalid day', async () => { await chai.request(app) .get('/api/cve?time_modified.lt=2022-01-32T00:00:00Z') - .set(constants.headers) + .set(constants.secretariatHeaders) .then((res, err) => { expect(err).to.be.undefined expect(res).to.have.status(400) @@ -42,7 +42,7 @@ describe('Test time_modified for get CVE', () => { it('Get CVE should fail if time_modified.gt is given a date with an invalid day', async () => { await chai.request(app) .get('/api/cve?time_modified.gt=2022-01-32T00:00:00Z') - .set(constants.headers) + .set(constants.secretariatHeaders) .then((res, err) => { expect(err).to.be.undefined expect(res).to.have.status(400) @@ -52,7 +52,7 @@ describe('Test time_modified for get CVE', () => { it('Get CVE should fail if time_modified.gt is given a date with invalid hours', async () => { await chai.request(app) .get('/api/cve?time_modified.gt=2022-01-01T25:00:00Z') - .set(constants.headers) + .set(constants.secretariatHeaders) .then((res, err) => { expect(err).to.be.undefined expect(res).to.have.status(400) @@ -62,7 +62,7 @@ describe('Test time_modified for get CVE', () => { it('Get CVE should fail if time_modified.lt is given a date with invalid hours', async () => { await chai.request(app) .get('/api/cve?time_modified.lt=2022-01-01T25:00:00Z') - .set(constants.headers) + .set(constants.secretariatHeaders) .then((res, err) => { expect(err).to.be.undefined expect(res).to.have.status(400) @@ -72,7 +72,7 @@ describe('Test time_modified for get CVE', () => { it('Get CVE should fail if time_modified.gt is given a date with invalid minutes', async () => { await chai.request(app) .get('/api/cve?time_modified.gt=2022-01-01T00:61:00Z') - .set(constants.headers) + .set(constants.secretariatHeaders) .then((res, err) => { expect(err).to.be.undefined expect(res).to.have.status(400) @@ -82,7 +82,7 @@ describe('Test time_modified for get CVE', () => { it('Get CVE should fail if time_modified.lt is given a date with invalid minutes', async () => { await chai.request(app) .get('/api/cve?time_modified.lt=2022-01-01T00:61:00Z') - .set(constants.headers) + .set(constants.secretariatHeaders) .then((res, err) => { expect(err).to.be.undefined expect(res).to.have.status(400) @@ -92,7 +92,7 @@ describe('Test time_modified for get CVE', () => { it('Get CVE should fail if time_modified.gt is given a date with invalid seconds', async () => { await chai.request(app) .get('/api/cve?time_modified.gt=2022-01-01T00:00:61Z') - .set(constants.headers) + .set(constants.secretariatHeaders) .then((res, err) => { expect(err).to.be.undefined expect(res).to.have.status(400) @@ -102,7 +102,7 @@ describe('Test time_modified for get CVE', () => { it('Get CVE should fail if time_modified.lt is given a date with invalid seconds', async () => { await chai.request(app) .get('/api/cve?time_modified.lt=2022-01-01T00:00:61Z') - .set(constants.headers) + .set(constants.secretariatHeaders) .then((res, err) => { expect(err).to.be.undefined expect(res).to.have.status(400) @@ -112,7 +112,7 @@ describe('Test time_modified for get CVE', () => { it('Get CVE should fail if time_modified.gt is given a date with a 24 as a ZZ:ZZ offset', async () => { await chai.request(app) .get('/api/cve?time_modified.gt=2022-01-01T00:00:00-24:00') - .set(constants.headers) + .set(constants.secretariatHeaders) .then((res, err) => { expect(err).to.be.undefined expect(res).to.have.status(400) @@ -122,7 +122,7 @@ describe('Test time_modified for get CVE', () => { it('Get CVE should fail if time_modified.gt is given a date with an invalid ZZ:ZZ format (missing the colon) but with a valid value (23:00).', async () => { await chai.request(app) .get('/api/cve?time_modified.gt=2022-01-01T00:00:00-2300') - .set(constants.headers) + .set(constants.secretariatHeaders) .then((res, err) => { expect(err).to.be.undefined expect(res).to.have.status(400) diff --git a/test/integration-tests/cve/getCveTimeCreatedTest.js b/test/integration-tests/cve/getCveTimeCreatedTest.js index 960153589..adc72e0cb 100644 --- a/test/integration-tests/cve/getCveTimeCreatedTest.js +++ b/test/integration-tests/cve/getCveTimeCreatedTest.js @@ -6,7 +6,7 @@ const expect = chai.expect const constants = require('../constants.js') const app = require('../../../src/index.js') -const helpers = require('../helpers.js') +const api = require('../api.js') const _ = require('lodash') const shortName = 'win_5' @@ -14,14 +14,18 @@ const shortName = 'win_5' describe('Test time_created parameter for get CVE', () => { let cveId before(async () => { - cveId = await helpers.cveIdReserveHelper(1, '2023', shortName, 'non-sequential') - await helpers.cveRequestAsCnaHelper(cveId) + const reserveRes = await api.reserveCveIdAsCna('2023', shortName) + chai.expect(reserveRes).to.have.status(200) + cveId = reserveRes.body.cve_ids[0].cve_id + + const createRes = await api.createCveAsCna(cveId) + chai.expect(createRes).to.have.status(200) }) context('Positive Test', () => { it('Get CVE with time_created.gt set to a known earlier date', async () => { await chai.request(app) .get('/api/cve/?time_created.gt=2022-01-01T00:00:00Z') - .set(constants.headers) + .set(constants.secretariatHeaders) .then((res, err) => { expect(err).to.be.undefined expect(res).to.have.status(200) @@ -31,7 +35,7 @@ describe('Test time_created parameter for get CVE', () => { it('Get CVE with time_created.gt should return and empty list when searched with a known bad earlier than date', async () => { await chai.request(app) .get('/api/cve/?time_created.gt=2100-01-01T00:00:00Z') - .set(constants.headers) + .set(constants.secretariatHeaders) .then((res, err) => { expect(err).to.be.undefined expect(res).to.have.status(200) @@ -42,7 +46,7 @@ describe('Test time_created parameter for get CVE', () => { it('Get CVE with time_created.lt should return when searched with a known later than date', async () => { await chai.request(app) .get('/api/cve/?time_created.lt=2100-01-01T00:00:00Z') - .set(constants.headers) + .set(constants.secretariatHeaders) .then((res, err) => { expect(err).to.be.undefined expect(res).to.have.status(200) @@ -52,7 +56,7 @@ describe('Test time_created parameter for get CVE', () => { it('Get CVE with time_created.lt should return and empty list when searched with a known bad later than date', async () => { await chai.request(app) .get('/api/cve/?time_created.lt=2022-01-01T00:00:00Z') - .set(constants.headers) + .set(constants.secretariatHeaders) .then((res, err) => { expect(err).to.be.undefined expect(res).to.have.status(200) @@ -62,7 +66,7 @@ describe('Test time_created parameter for get CVE', () => { it('Get CVE with time_created.lt and gt set', async () => { await chai.request(app) .get('/api/cve/?time_created.lt=2100-01-01T00:00:00Z&time_created.gt=2022-01-01T00:00:00Z') - .set(constants.headers) + .set(constants.secretariatHeaders) .then((res, err) => { expect(err).to.be.undefined expect(res).to.have.status(200) diff --git a/test/integration-tests/cve/insertAdpTest.js b/test/integration-tests/cve/insertAdpTest.js index a389cfba6..f1eac7c96 100644 --- a/test/integration-tests/cve/insertAdpTest.js +++ b/test/integration-tests/cve/insertAdpTest.js @@ -7,17 +7,15 @@ const expect = chai.expect const constants = require('../constants.js') const app = require('../../../src/index.js') -const helpers = require('../helpers.js') +const api = require('../api.js') const _ = require('lodash') const adpContainer = require('../../schemas/5.0/adpContainerExample.json').adpContainer // Parameters for the CVE-ID reservation helper -const requestLength = 1 const shortName = 'win_5' const cveYear = '2023' -const batchType = 'non-sequential' const adpLength = 1 @@ -31,15 +29,18 @@ async function reserveAdp (cveId, headers, body) { describe('Testing ADP insert Endpoint', () => { let cveId, adpContainerCopy beforeEach(async () => { - // Reserve a custom CVE-ID - cveId = await helpers.cveIdReserveHelper(requestLength, cveYear, shortName, batchType) - // Publish the CVE - await helpers.cveRequestAsCnaHelper(cveId) + const reserveRes = await api.reserveCveIdAsCna(cveYear, shortName) + chai.expect(reserveRes).to.have.status(200) + cveId = reserveRes.body.cve_ids[0].cve_id + + const createRes = await api.createCveAsCna(cveId) + chai.expect(createRes).to.have.status(200) + adpContainerCopy = _.cloneDeep(adpContainer) }) context('Positive Tests', () => { it('Reserve ADP ', async () => { - await reserveAdp(cveId, constants.nonSecretariatUserHeaders, constants.testAdp).then((res, err) => { + await reserveAdp(cveId, constants.cnaHeaders, constants.testAdp).then((res, err) => { expect(err).to.be.undefined const resMessage = cveId + ' record had new ADP container for org ' + shortName + ' successfully inserted' expect(res.body.message).to.include(resMessage) @@ -53,7 +54,7 @@ describe('Testing ADP insert Endpoint', () => { }) context('Negative Tests', () => { it('Reserve ADP should fail if the org does not have ADP', async () => { - await reserveAdp(cveId, constants.badNonSecretariatUserHeaders, constants.testAdp) + await reserveAdp(cveId, constants.badCnaHeaders, constants.testAdp) .then((res, err) => { expect(err).to.be.undefined expect(res).to.have.status(403) @@ -63,20 +64,20 @@ describe('Testing ADP insert Endpoint', () => { it('A user should not be able to edit someone elses ADP container', async () => { // First make the ADP container - await reserveAdp(cveId, constants.nonSecretariatUserHeaders, constants.testAdp) + await reserveAdp(cveId, constants.cnaHeaders, constants.testAdp) .then((res, err) => { expect(err).to.be.undefined expect(res).to.have.status(200) }) // Add a second Container - await reserveAdp(cveId, constants.nonSecretariatUserHeadersWithAdp2, constants.testAdp) + await reserveAdp(cveId, constants.cnaHeadersWithAdp2, constants.testAdp) .then((res, err) => { expect(err).to.be.undefined expect(res).to.have.status(200) }) - await reserveAdp(cveId, constants.nonSecretariatUserHeadersWithAdp2, constants.testAdp2) + await reserveAdp(cveId, constants.cnaHeadersWithAdp2, constants.testAdp2) .then((res, err) => { expect(err).to.be.undefined expect(res).to.have.status(200) diff --git a/test/integration-tests/cve/postCveXFieldTest.js b/test/integration-tests/cve/postCveXFieldTest.js index aa3d9964a..79c59462f 100644 --- a/test/integration-tests/cve/postCveXFieldTest.js +++ b/test/integration-tests/cve/postCveXFieldTest.js @@ -8,25 +8,29 @@ const expect = chai.expect const constants = require('../constants.js') const app = require('../../../src/index.js') -const helpers = require('../helpers.js') +const api = require('../api.js') -const requestLength = 1 -const shortName = 'win_5' +const shortName = constants.cnaHeaders['CVE-API-ORG'] const cveYear = '2023' -const batchType = 'non-sequential' describe('Testing Reserve CVE Endpoint', () => { let cveId, cveIdDollar + beforeEach(async () => { - cveId = await helpers.cveIdReserveHelper(requestLength, cveYear, shortName, batchType) - cveIdDollar = await helpers.cveIdReserveHelper(requestLength, cveYear, shortName, batchType) + const reserveRes = await api.reserveCveIdAsCna(cveYear, shortName) + chai.expect(reserveRes).to.have.status(200) + cveId = reserveRes.body.cve_ids[0].cve_id + + const reserveResDollar = await api.reserveCveIdAsCna(cveYear, shortName) + chai.expect(reserveResDollar).to.have.status(200) + cveIdDollar = reserveResDollar.body.cve_ids[0].cve_id }) context('Negative Tests', () => { it('Should not allow null byte ', async () => { // Publish the CVE await chai.request(app) .post(`/api/cve/${cveId}/cna`) - .set(constants.nonSecretariatUserHeaders) + .set(constants.cnaHeaders) .send({ cnaContainer: { 'x_\u0000': true, @@ -60,7 +64,7 @@ describe('Testing Reserve CVE Endpoint', () => { // Publish the CVE await chai.request(app) .post(`/api/cve/${cveIdDollar}/cna`) - .set(constants.nonSecretariatUserHeaders) + .set(constants.cnaHeaders) .send({ cnaContainer: { $test: true, diff --git a/test/integration-tests/cve/publishCveTest.js b/test/integration-tests/cve/publishCveTest.js index 3bdff7ff5..37a69b997 100644 --- a/test/integration-tests/cve/publishCveTest.js +++ b/test/integration-tests/cve/publishCveTest.js @@ -8,24 +8,26 @@ const expect = chai.expect const constants = require('../constants.js') const app = require('../../../src/index.js') -const helpers = require('../helpers.js') +const api = require('../api.js') -const requestLength = 1 const shortName = 'win_5' const cveYear = '2023' -const batchType = 'non-sequential' describe('Testing Reserve CVE Endpoint', () => { let cveId + beforeEach(async () => { - cveId = await helpers.cveIdReserveHelper(requestLength, cveYear, shortName, batchType) + const reserveRes = await api.reserveCveIdAsCna(cveYear, shortName) + chai.expect(reserveRes).to.have.status(200) + cveId = reserveRes.body.cve_ids[0].cve_id }) + context('Positive Tests', () => { it('Testing Reservation of CVE ', async () => { // Publish the CVE await chai.request(app) .post(`/api/cve/${cveId}/cna`) - .set(constants.nonSecretariatUserHeaders) + .set(constants.cnaHeaders) .send(constants.testCve) .then((res, err) => { expect(err).to.be.undefined diff --git a/test/integration-tests/cve/validateTimelineDatesTest.js b/test/integration-tests/cve/validateTimelineDatesTest.js index 166569ea9..8953c5983 100644 --- a/test/integration-tests/cve/validateTimelineDatesTest.js +++ b/test/integration-tests/cve/validateTimelineDatesTest.js @@ -4,25 +4,14 @@ const chai = require('chai') chai.use(require('chai-http')) const expect = chai.expect -const constants = require('../constants.js') -const app = require('../../../src/index.js') -const helpers = require('../helpers.js') +const api = require('../api.js') const _ = require('lodash') const cnaContainer = require('../../schemas/cna-container/cna-container_pass.json').cnaContainer // Parameters for the CVE-ID reservation helper -const requestLength = 1 const shortName = 'win_5' const cveYear = '2023' -const batchType = 'non-sequential' - -async function cveRequestAsCna (cveId, headers, body) { - return await chai.request(app) - .post(`/api/cve/${cveId}/cna`) - .set(headers) - .send(body) -} describe('Testing validateTimelineDates Middleware', () => { let cveId @@ -30,7 +19,7 @@ describe('Testing validateTimelineDates Middleware', () => { beforeEach(async () => { // Reserve a custom CVE-ID - cveId = await helpers.cveIdReserveHelper(requestLength, cveYear, shortName, batchType) + cveId = await api.reserveCveIdAsCna(cveYear, shortName) cnaContainerCopy = _.cloneDeep(cnaContainer) }) @@ -48,7 +37,7 @@ describe('Testing validateTimelineDates Middleware', () => { cnaContainer: cnaContainerCopy } - const res = await cveRequestAsCna(cveId, constants.nonSecretariatUserHeaders, body) + const res = await api.createCveAsCna(cveId, body) expect(res).to.have.status(200) expect(res.body.created.containers.cna.timeline[0].time).to.equal('2023-10-25T00:00:00.000Z') }) @@ -68,7 +57,7 @@ describe('Testing validateTimelineDates Middleware', () => { cnaContainer: cnaContainerCopy } - const res = await cveRequestAsCna(cveId, constants.nonSecretariatUserHeaders, body) + const res = await api.createCveAsCna(cveId, body) expect(res).to.have.status(400) expect(res.body.error).to.include('INVALID_JSON_SCHEMA') }) @@ -86,7 +75,7 @@ describe('Testing validateTimelineDates Middleware', () => { cnaContainer: cnaContainerCopy } - const res = await cveRequestAsCna(cveId, constants.nonSecretariatUserHeaders, body) + const res = await api.createCveAsCna(cveId, body) expect(res).to.have.status(400) expect(res.body.error).to.include('BAD_INPUT') expect(res.body.details[0].msg).to.include('Invalid date string') diff --git a/test/integration-tests/helpers.js b/test/integration-tests/helpers.js deleted file mode 100644 index 4fd5cce6f..000000000 --- a/test/integration-tests/helpers.js +++ /dev/null @@ -1,130 +0,0 @@ - -const chai = require('chai') -chai.use(require('chai-http')) - -const expect = chai.expect - -const constants = require('./constants.js') -const app = require('../../src/index.js') - -// Helper function to reserve a CVE-ID -async function cveIdReserveHelper (requestLength, year, shortName, batchType) { - return await chai.request(app) - .post(`/api/cve-id?amount=${requestLength}&cve_year=${year}&short_name=${shortName}&batch_type=${batchType}`) - .set(constants.nonSecretariatUserHeaders) - .then((res, err) => { - return res.body.cve_ids[0].cve_id - }) -} - -// Helper function to bulk reserve CVE-ID -async function cveIdBulkReserveHelper (requestLength, year, shortName, batchType) { - return await chai.request(app) - .post(`/api/cve-id?amount=${requestLength}&cve_year=${year}&short_name=${shortName}&batch_type=${batchType}`) - .set(constants.headers) - .then((res, err) => { - const ids = res.body.cve_ids.map(cveId => { - return cveId.cve_id - }) - return ids - }) -} - -// Helper function to publish a CVE -async function cveRequestAsCnaHelper (cveId) { - await chai.request(app) - .post(`/api/cve/${cveId}/cna`) - .set(constants.nonSecretariatUserHeaders) - .send(constants.testCve) - .then((res, err) => { - // Safety Expect - expect(res).to.have.status(200) - }) -} - -async function cveRequestAsSecHelper (cveId) { - await chai.request(app) - .post(`/api/cve/${cveId}/cna`) - .set(constants.headers) - .send(constants.testCve) - .then((res, err) => { - // Safety Expect - expect(res).to.have.status(200) - }) -} - -async function cveRequestAsCnaHelperWithCnaContainer (cveId, cnaContainer) { - await chai.request(app) - .post(`/api/cve/${cveId}/cna`) - .set(constants.nonSecretariatUserHeaders) - .send(cnaContainer) - .then((res, err) => { - // Safety Expect - expect(res).to.have.status(200) - }) -} - -async function cveUpdatetAsCnaHelperWithCnaContainer (cveId, cnaContainer) { - await chai.request(app) - .put(`/api/cve/${cveId}/cna`) - .set(constants.nonSecretariatUserHeaders) - .send(cnaContainer) - .then((res, err) => { - // Safety Expect - expect(res).to.have.status(200) - }) -} - -async function cveUpdateAsSecHelper (cveId, cnaContainer) { - await chai.request(app) - .put(`/api/cve/${cveId}/cna`) - .set(constants.headers) - .send(cnaContainer) - .then((res, err) => { - // Safety Expect - expect(res).to.have.status(200) - }) -} - -async function cveUpdateAsCnaHelperWithAdpContainer (cveId, adpContainer) { - await chai.request(app) - .put(`/api/cve/${cveId}/adp`) - .set(constants.nonSecretariatUserHeaders) - .send(adpContainer) - .then((res, err) => { - expect(res).to.have.status(200) - }) -} - -async function userOrgUpdateAsSecHelper (userName, orgShortName, newOrgShortName) { - await chai.request(app) - .put(`/api/org/${orgShortName}/user/${userName}?org_short_name=${newOrgShortName}`) - .set(constants.headers) - .then((res, err) => { - // Safety Expect - expect(res).to.have.status(200) - }) -} - -async function updateOwningOrgAsSecHelper (cveId, newOrgShortName) { - await chai.request(app) - .put(`/api/cve-id/${cveId}?org=${newOrgShortName}`) - .set(constants.headers) - .then((res, err) => { - // Safety Expect - expect(res).to.have.status(200) - }) -} - -module.exports = { - cveIdReserveHelper, - cveIdBulkReserveHelper, - cveRequestAsCnaHelper, - cveRequestAsCnaHelperWithCnaContainer, - cveRequestAsSecHelper, - cveUpdatetAsCnaHelperWithCnaContainer, - cveUpdateAsSecHelper, - cveUpdateAsCnaHelperWithAdpContainer, - userOrgUpdateAsSecHelper, - updateOwningOrgAsSecHelper -} diff --git a/test/integration-tests/org/legacyAdminRoleRevokeTest.js b/test/integration-tests/org/legacyAdminRoleRevokeTest.js index 60ce795e4..e035574fc 100644 --- a/test/integration-tests/org/legacyAdminRoleRevokeTest.js +++ b/test/integration-tests/org/legacyAdminRoleRevokeTest.js @@ -8,7 +8,7 @@ const { expect } = chai const app = require('../../../src/index.js') const constants = require('../constants.js') -const secretariatHeaders = { ...constants.headers, 'content-type': 'application/json' } +const secretariatHeaders = { ...constants.secretariatHeaders, 'content-type': 'application/json' } const postNewUser = async (orgShortName, username) => { return chai.request(app) diff --git a/test/integration-tests/org/postOrgTest.js b/test/integration-tests/org/postOrgTest.js index fbc8b8dde..465d6a4ac 100644 --- a/test/integration-tests/org/postOrgTest.js +++ b/test/integration-tests/org/postOrgTest.js @@ -11,7 +11,7 @@ describe('Testing Org post endpoint', () => { it('Allows creation of org', async () => { await chai.request(app) .post('/api/org') - .set({ ...constants.headers }) + .set({ ...constants.secretariatHeaders }) .send(constants.testOrg) .then((res, err) => { expect(err).to.be.undefined @@ -40,7 +40,7 @@ describe('Testing Org post endpoint', () => { it('Allows creation of an org with registry enabled', async () => { await chai.request(app) .post('/api/registry/org') - .set(constants.headers) + .set(constants.secretariatHeaders) .send(constants.testRegistryOrg) .then((res, err) => { expect(err).to.be.undefined @@ -74,7 +74,7 @@ describe('Testing Org post endpoint', () => { it('Should fail to create an org that already exists', async () => { await chai.request(app) .post('/api/org') - .set({ ...constants.headers }) + .set({ ...constants.secretariatHeaders }) .send(constants.existingOrg) .then((res, err) => { expect(err).to.be.undefined @@ -87,7 +87,7 @@ describe('Testing Org post endpoint', () => { it('Should fail to create an org that already exists with registry enabled', async () => { await chai.request(app) .post('/api/registry/org') - .set({ ...constants.headers }) + .set({ ...constants.secretariatHeaders }) .send(constants.existingRegistryOrg) .then((res, err) => { expect(err).to.be.undefined diff --git a/test/integration-tests/org/postOrgUsersTest.js b/test/integration-tests/org/postOrgUsersTest.js index 098763b1b..e5f0bdada 100644 --- a/test/integration-tests/org/postOrgUsersTest.js +++ b/test/integration-tests/org/postOrgUsersTest.js @@ -18,7 +18,7 @@ describe('Testing user post endpoint', () => { it('Allows creation of user', async () => { await chai.request(app) .post('/api/org/win_5/user') - .set({ ...constants.headers, ...shortName }) + .set({ ...constants.secretariatHeaders, ...shortName }) .send({ username: 'fakeuser999', name: { @@ -42,7 +42,7 @@ describe('Testing user post endpoint', () => { await chai .request(app) .post('/api/registry/org/win_5/user') - .set({ ...constants.headers, ...shortName }) + .set({ ...constants.secretariatHeaders, ...shortName }) .send({ username: 'fakeregistryuser999', name: { @@ -63,7 +63,7 @@ describe('Testing user post endpoint', () => { it('Fails creation of user for bad long first name', async () => { await chai.request(app) .post('/api/org/win_5/user') - .set({ ...constants.headers, ...shortName }) + .set({ ...constants.secretariatHeaders, ...shortName }) .send({ username: 'fakeuser9999', name: { @@ -88,7 +88,7 @@ describe('Testing user post endpoint', () => { await chai .request(app) .post('/api/registry/org/win_5/user') - .set({ ...constants.headers, ...shortName }) + .set({ ...constants.secretariatHeaders, ...shortName }) .send({ username: 'fakeregistryuser9999', name: { @@ -113,7 +113,7 @@ describe('Testing user post endpoint', () => { it('Fails creation of user for bad long last name', async () => { await chai.request(app) .post('/api/org/win_5/user') - .set({ ...constants.headers, ...shortName }) + .set({ ...constants.secretariatHeaders, ...shortName }) .send({ username: 'fakeuser1000', name: { @@ -138,7 +138,7 @@ describe('Testing user post endpoint', () => { await chai .request(app) .post('/api/registry/org/win_5/user') - .set({ ...constants.headers, ...shortName }) + .set({ ...constants.secretariatHeaders, ...shortName }) .send({ username: 'fakeregistryuser1000', name: { @@ -163,7 +163,7 @@ describe('Testing user post endpoint', () => { it('Fails creation of user for bad long middle name', async () => { await chai.request(app) .post('/api/org/win_5/user') - .set({ ...constants.headers, ...shortName }) + .set({ ...constants.secretariatHeaders, ...shortName }) .send({ username: 'fakeuser1001', name: { @@ -188,7 +188,7 @@ describe('Testing user post endpoint', () => { await chai .request(app) .post('/api/registry/org/win_5/user') - .set({ ...constants.headers, ...shortName }) + .set({ ...constants.secretariatHeaders, ...shortName }) .send({ username: 'fakeregistryuser1001', name: { @@ -214,7 +214,7 @@ describe('Testing user post endpoint', () => { it('Fails creation of user for bad long suffix name', async () => { await chai.request(app) .post('/api/org/win_5/user') - .set({ ...constants.headers, ...shortName }) + .set({ ...constants.secretariatHeaders, ...shortName }) .send({ username: 'fakeuser1002', name: { @@ -239,7 +239,7 @@ describe('Testing user post endpoint', () => { await chai .request(app) .post('/api/registry/org/win_5/user') - .set({ ...constants.headers, ...shortName }) + .set({ ...constants.secretariatHeaders, ...shortName }) .send({ username: 'fakeregistryuser1002', name: { @@ -269,7 +269,7 @@ describe('Testing user post endpoint', () => { const lastName = faker.name.lastName() await chai.request(app) .post('/api/org/win_5/user') - .set({ ...constants.headers, ...shortName }) + .set({ ...constants.secretariatHeaders, ...shortName }) .send({ username: faker.internet.userName({ firstName: firstName, lastName: lastName }) + ' ' + counter, name: { @@ -288,7 +288,7 @@ describe('Testing user post endpoint', () => { await chai.request(app) .post('/api/org/win_5/user') - .set({ ...constants.headers, ...shortName }) + .set({ ...constants.secretariatHeaders, ...shortName }) .send({ username: 'Fake101User', name: { @@ -313,7 +313,7 @@ describe('Testing user post endpoint', () => { await chai .request(app) .post('/api/registry/org/win_5/user') - .set({ ...constants.headers, ...shortName }) + .set({ ...constants.secretariatHeaders, ...shortName }) .send({ username: 'Fake101RegistryUser', name: { diff --git a/test/integration-tests/org/registryOrg.js b/test/integration-tests/org/registryOrg.js index 9328f32dc..85176be26 100644 --- a/test/integration-tests/org/registryOrg.js +++ b/test/integration-tests/org/registryOrg.js @@ -9,7 +9,7 @@ const { v4: uuidv4 } = require('uuid') const app = require('../../../src/index.js') const constants = require('../constants.js') -const secretariatHeaders = { ...constants.headers, 'content-type': 'application/json' } +const secretariatHeaders = { ...constants.secretariatHeaders, 'content-type': 'application/json' } const MAX_SHORTNAME_LENGTH = 32 // Helper functions to replicate python test utilities diff --git a/test/integration-tests/org/registryOrgAsOrgAdmin.js b/test/integration-tests/org/registryOrgAsOrgAdmin.js index d248215dd..bad332b6e 100644 --- a/test/integration-tests/org/registryOrgAsOrgAdmin.js +++ b/test/integration-tests/org/registryOrgAsOrgAdmin.js @@ -21,7 +21,7 @@ describe('Testing Registry Org as org admin', () => { before(async () => { await chai.request(app) .post('/api/registry/org/beat_10/user') - .set(constants.headers) + .set(constants.secretariatHeaders) .send( { username: userId, @@ -35,7 +35,7 @@ describe('Testing Registry Org as org admin', () => { await chai.request(app) .post('/api/registry/org/beat_10/user') - .set(constants.headers) + .set(constants.secretariatHeaders) .send( { username: 'second_user@beat_10.mitre.org' @@ -46,7 +46,7 @@ describe('Testing Registry Org as org admin', () => { await chai.request(app) .post('/api/registry/org/beat_10/user') - .set(constants.headers) + .set(constants.secretariatHeaders) .send( { username: 'third_user@beat_10.mitre.org' diff --git a/test/integration-tests/org/regularUsersTestRegistry.js b/test/integration-tests/org/regularUsersTestRegistry.js index 348df2336..3d19d0190 100644 --- a/test/integration-tests/org/regularUsersTestRegistry.js +++ b/test/integration-tests/org/regularUsersTestRegistry.js @@ -16,17 +16,17 @@ describe('Testing regular user permissions for /api/registry/org/ endpoints with /* Positive Tests */ context('Positive Test', () => { it('regular user can update their name', async () => { - const org = constants.nonSecretariatUserHeaders['CVE-API-ORG'] - const user = constants.nonSecretariatUserHeaders['CVE-API-USER'] + const org = constants.cnaHeaders['CVE-API-ORG'] + const user = constants.cnaHeaders['CVE-API-USER'] let previousBody await chai.request(app).get(`/api/registry/org/${org}/user/${user}`) - .set(constants.nonSecretariatUserHeaders) + .set(constants.cnaHeaders) .then((res) => { previousBody = res.body }) await chai.request(app) .put(`/api/registry/org/${org}/user/${user}`) - .set(constants.nonSecretariatUserHeaders) + .set(constants.cnaHeaders) .send( { ...previousBody, @@ -47,11 +47,11 @@ describe('Testing regular user permissions for /api/registry/org/ endpoints with }) }) it('regular users can update their secret ', async () => { - const org = constants.nonSecretariatUserHeaders3['CVE-API-ORG'] - const user = constants.nonSecretariatUserHeaders3['CVE-API-USER'] + const org = constants.cnaHeaders3['CVE-API-ORG'] + const user = constants.cnaHeaders3['CVE-API-USER'] await chai.request(app) .put(`/api/registry/org/${org}/user/${user}/reset_secret`) - .set(constants.nonSecretariatUserHeaders3) + .set(constants.cnaHeaders3) .send({ }) .then((res) => { @@ -64,17 +64,17 @@ describe('Testing regular user permissions for /api/registry/org/ endpoints with context('Negative Test', () => { it('regular user cannot update their username', async () => { const newUsername = faker.datatype.uuid() - const org = constants.nonSecretariatUserHeaders['CVE-API-ORG'] - const user = constants.nonSecretariatUserHeaders['CVE-API-USER'] + const org = constants.cnaHeaders['CVE-API-ORG'] + const user = constants.cnaHeaders['CVE-API-USER'] let previousBody await chai.request(app).get(`/api/registry/org/${org}/user/${user}`) - .set(constants.nonSecretariatUserHeaders) + .set(constants.cnaHeaders) .then((res) => { previousBody = res.body }) await chai.request(app) .put(`/api/registry/org/${org}/user/${user}`) - .set(constants.nonSecretariatUserHeaders) + .set(constants.cnaHeaders) .send({ ...previousBody, username: newUsername @@ -87,17 +87,17 @@ describe('Testing regular user permissions for /api/registry/org/ endpoints with }) it('regular user cannot update information of another user of the same organization', async () => { const newUsername = faker.datatype.uuid() - const org = constants.nonSecretariatUserHeaders['CVE-API-ORG'] - const user2 = constants.nonSecretariatUserHeaders2['CVE-API-USER'] + const org = constants.cnaHeaders['CVE-API-ORG'] + const user2 = constants.cnaHeaders2['CVE-API-USER'] let previousBody await chai.request(app).get(`/api/registry/org/${org}/user/${user2}`) - .set(constants.nonSecretariatUserHeaders) + .set(constants.cnaHeaders) .then((res) => { previousBody = res.body }) await chai.request(app) .put(`/api/registry/org/${org}/user/${user2}`) - .set(constants.nonSecretariatUserHeaders) + .set(constants.cnaHeaders) .send({ ...previousBody, username: newUsername @@ -108,17 +108,17 @@ describe('Testing regular user permissions for /api/registry/org/ endpoints with }) }) it("regular users cannot update a user's username if that user already exists", async () => { - const org = constants.nonSecretariatUserHeaders['CVE-API-ORG'] - const user1 = constants.nonSecretariatUserHeaders['CVE-API-USER'] - const user2 = constants.nonSecretariatUserHeaders2['CVE-API-USER'] + const org = constants.cnaHeaders['CVE-API-ORG'] + const user1 = constants.cnaHeaders['CVE-API-USER'] + const user2 = constants.cnaHeaders2['CVE-API-USER'] let previousBody await chai.request(app).get(`/api/registry/org/${org}/user/${user1}`) - .set(constants.nonSecretariatUserHeaders) + .set(constants.cnaHeaders) .then((res) => { previousBody = res.body }) await chai.request(app) .put(`/api/registry/org/${org}/user/${user1}`) - .set(constants.nonSecretariatUserHeaders) + .set(constants.cnaHeaders) .send({ ...previousBody, username: user2 @@ -129,18 +129,18 @@ describe('Testing regular user permissions for /api/registry/org/ endpoints with }) }) it('regular users cannot update organization', async () => { - const org1 = constants.nonSecretariatUserHeaders['CVE-API-ORG'] - const user = constants.nonSecretariatUserHeaders['CVE-API-USER'] + const org1 = constants.cnaHeaders['CVE-API-ORG'] + const user = constants.cnaHeaders['CVE-API-USER'] const org2 = faker.datatype.uuid().slice(0, MAX_SHORTNAME_LENGTH) let previousBody await chai.request(app).get(`/api/registry/org/${org1}/user/${user}`) - .set(constants.nonSecretariatUserHeaders) + .set(constants.cnaHeaders) .then((res) => { previousBody = res.body }) await chai.request(app) .put(`/api/registry/org/${org1}/user/${user}`) - .set(constants.nonSecretariatUserHeaders) + .set(constants.cnaHeaders) .send({ ...previousBody, org_short_name: org2 @@ -151,17 +151,17 @@ describe('Testing regular user permissions for /api/registry/org/ endpoints with }) }) it('regular user cannot change its own active state', async () => { - const org = constants.nonSecretariatUserHeaders['CVE-API-ORG'] - const user = constants.nonSecretariatUserHeaders['CVE-API-USER'] + const org = constants.cnaHeaders['CVE-API-ORG'] + const user = constants.cnaHeaders['CVE-API-USER'] let previousBody await chai.request(app).get(`/api/registry/org/${org}/user/${user}`) - .set(constants.nonSecretariatUserHeaders) + .set(constants.cnaHeaders) .then((res) => { previousBody = res.body }) await chai.request(app) .put(`/api/registry/org/${org}/user/${user}`) - .set(constants.nonSecretariatUserHeaders) + .set(constants.cnaHeaders) .send({ ...previousBody, status: 'inactive' @@ -172,11 +172,11 @@ describe('Testing regular user permissions for /api/registry/org/ endpoints with }) }) it('regular users cannot add role', async () => { - const org = constants.nonSecretariatUserHeaders['CVE-API-ORG'] - const user = constants.nonSecretariatUserHeaders['CVE-API-USER'] + const org = constants.cnaHeaders['CVE-API-ORG'] + const user = constants.cnaHeaders['CVE-API-USER'] await chai.request(app) .post(`/api/registry/org/${org}/user/${user}/grant-role`) - .set(constants.nonSecretariatUserHeaders) + .set(constants.cnaHeaders) .send({ role: 'ADMIN' }) @@ -186,11 +186,11 @@ describe('Testing regular user permissions for /api/registry/org/ endpoints with }) }) it('regular users cannot remove role', async () => { - const org = constants.nonSecretariatUserHeaders['CVE-API-ORG'] - const user = constants.nonSecretariatUserHeaders['CVE-API-USER'] + const org = constants.cnaHeaders['CVE-API-ORG'] + const user = constants.cnaHeaders['CVE-API-USER'] await chai.request(app) .post(`/api/registry/org/${org}/user/${user}/revoke-role`) - .set(constants.nonSecretariatUserHeaders) + .set(constants.cnaHeaders) .send({ role: 'ADMIN' }) @@ -201,10 +201,10 @@ describe('Testing regular user permissions for /api/registry/org/ endpoints with }) it("regular user cannot update a user from an org that doesn't exist", async () => { const org = faker.datatype.uuid().slice(0, MAX_SHORTNAME_LENGTH) - const user = constants.nonSecretariatUserHeaders['CVE-API-USER'] + const user = constants.cnaHeaders['CVE-API-USER'] await chai.request(app) .put(`/api/registry/org/${org}/user/${user}`) - .set(constants.nonSecretariatUserHeaders) + .set(constants.cnaHeaders) .send({ }) .then((res) => { @@ -213,11 +213,11 @@ describe('Testing regular user permissions for /api/registry/org/ endpoints with }) }) it("regular user cannot update a user that doesn't exist ", async () => { - const org = constants.nonSecretariatUserHeaders['CVE-API-ORG'] + const org = constants.cnaHeaders['CVE-API-ORG'] const user = faker.datatype.uuid() await chai.request(app) .put(`/api/registry/org/${org}/user/${user}`) - .set(constants.nonSecretariatUserHeaders) + .set(constants.cnaHeaders) .send({ }) .then((res) => { @@ -226,11 +226,11 @@ describe('Testing regular user permissions for /api/registry/org/ endpoints with }) }) it('regular user cannot update the secret of another user', async () => { - const org = constants.nonSecretariatUserHeaders['CVE-API-ORG'] - const user = constants.nonSecretariatUserHeaders2['CVE-API-USER'] + const org = constants.cnaHeaders['CVE-API-ORG'] + const user = constants.cnaHeaders2['CVE-API-USER'] await chai.request(app) .put(`/api/registry/org/${org}/user/${user}/reset_secret`) - .set(constants.nonSecretariatUserHeaders) + .set(constants.cnaHeaders) .send({ }) .then((res) => { @@ -240,10 +240,10 @@ describe('Testing regular user permissions for /api/registry/org/ endpoints with }) it("regular user cannot reset the secret of a user from an org that doesn't exist", async () => { const org = faker.datatype.uuid().slice(0, MAX_SHORTNAME_LENGTH) - const user = constants.nonSecretariatUserHeaders['CVE-API-USER'] + const user = constants.cnaHeaders['CVE-API-USER'] await chai.request(app) .put(`/api/registry/org/${org}/user/${user}/reset_secret`) - .set(constants.nonSecretariatUserHeaders) + .set(constants.cnaHeaders) .send({ }) .then((res) => { @@ -252,11 +252,11 @@ describe('Testing regular user permissions for /api/registry/org/ endpoints with }) }) it("regular user cannot reset the secret of a user that doesn't exist", async () => { - const org = constants.nonSecretariatUserHeaders['CVE-API-ORG'] + const org = constants.cnaHeaders['CVE-API-ORG'] const user = faker.datatype.uuid() await chai.request(app) .put(`/api/registry/org/${org}/user/${user}/reset_secret`) - .set(constants.nonSecretariatUserHeaders) + .set(constants.cnaHeaders) .send({ }) .then((res) => { @@ -265,11 +265,11 @@ describe('Testing regular user permissions for /api/registry/org/ endpoints with }) }) it("regular user tries resetting admin user's secret, fails and admin user's role remains preserved", async () => { - const org = constants.nonSecretariatUserHeaders2['CVE-API-ORG'] - const user = constants.nonSecretariatUserHeaders2['CVE-API-USER'] + const org = constants.cnaHeaders2['CVE-API-ORG'] + const user = constants.cnaHeaders2['CVE-API-USER'] await chai.request(app) .put(`/api/registry/org/${org}/user/${user}/reset_secret`) - .set(constants.nonSecretariatUserHeaders) + .set(constants.cnaHeaders) .send({ }) .then((res) => { @@ -279,7 +279,7 @@ describe('Testing regular user permissions for /api/registry/org/ endpoints with /* Commenting out since authority.active_roles are not returned in the GET request response for registry=true */ // await chai.request(app) // .get(`/api/org/${org}/user/${user}?registry=true`) - // .set(constants.nonSecretariatUserHeaders2) + // .set(constants.cnaHeaders2) // .send({ // }) // .then((res) => { @@ -295,10 +295,10 @@ describe('Testing regular user permissions for /api/registry/org/ endpoints with context('Negative Test', () => { it('regular user cannot create another user', async () => { const newUsername = faker.datatype.uuid() - const org = constants.nonSecretariatUserHeaders['CVE-API-ORG'] + const org = constants.cnaHeaders['CVE-API-ORG'] await chai.request(app) .post(`/api/registry/org/${org}/user`) - .set(constants.nonSecretariatUserHeaders) + .set(constants.cnaHeaders) .send({ username: newUsername }) @@ -314,10 +314,10 @@ describe('Testing regular user permissions for /api/registry/org/ endpoints with /* Positive Tests */ context('Positive Test', () => { it('regular users can view users of the same organization', async () => { - const org = constants.nonSecretariatUserHeaders['CVE-API-ORG'] + const org = constants.cnaHeaders['CVE-API-ORG'] await chai.request(app) .get(`/api/registry/org/${org}/users`) - .set(constants.nonSecretariatUserHeaders) + .set(constants.cnaHeaders) .send({ }) .then((res) => { @@ -326,11 +326,11 @@ describe('Testing regular user permissions for /api/registry/org/ endpoints with }) }) it('regular users can view user of the same organization ', async () => { - const org = constants.nonSecretariatUserHeaders2['CVE-API-ORG'] - const user2 = constants.nonSecretariatUserHeaders2['CVE-API-USER'] + const org = constants.cnaHeaders2['CVE-API-ORG'] + const user2 = constants.cnaHeaders2['CVE-API-USER'] await chai.request(app) .get(`/api/registry/org/${org}/user/${user2}`) - .set(constants.nonSecretariatUserHeaders) + .set(constants.cnaHeaders) .send({ }) .then((res) => { @@ -345,7 +345,7 @@ describe('Testing regular user permissions for /api/registry/org/ endpoints with const org = faker.datatype.uuid().slice(0, MAX_SHORTNAME_LENGTH) await chai.request(app) .get(`/api/registry/org/${org}/users`) - .set(constants.nonSecretariatUserHeaders) + .set(constants.cnaHeaders) .send({ }) .then((res) => { @@ -354,10 +354,10 @@ describe('Testing regular user permissions for /api/registry/org/ endpoints with }) }) it('regular users cannot view users of another organization', async () => { - const org = constants.nonSecretariatUserHeaders3['CVE-API-ORG'] + const org = constants.cnaHeaders3['CVE-API-ORG'] await chai.request(app) .get(`/api/registry/org/${org}/users`) - .set(constants.nonSecretariatUserHeaders) + .set(constants.cnaHeaders) .send({ }) .then((res) => { @@ -366,11 +366,11 @@ describe('Testing regular user permissions for /api/registry/org/ endpoints with }) }) it('regular users cannot view users from another organization', async () => { - const org = constants.nonSecretariatUserHeaders3['CVE-API-ORG'] - const user = constants.nonSecretariatUserHeaders3['CVE-API-USER'] + const org = constants.cnaHeaders3['CVE-API-ORG'] + const user = constants.cnaHeaders3['CVE-API-USER'] await chai.request(app) .get(`/api/registry/org/${org}/user/${user}`) - .set(constants.nonSecretariatUserHeaders) + .set(constants.cnaHeaders) .send({ }) .then((res) => { @@ -379,11 +379,11 @@ describe('Testing regular user permissions for /api/registry/org/ endpoints with }) }) it("regular user cannot view user that doesn't exist", async () => { - const org = constants.nonSecretariatUserHeaders['CVE-API-ORG'] + const org = constants.cnaHeaders['CVE-API-ORG'] const user = faker.datatype.uuid() await chai.request(app) .get(`/api/registry/org/${org}/user/${user}`) - .set(constants.nonSecretariatUserHeaders) + .set(constants.cnaHeaders) .send({ }) .then((res) => { @@ -401,7 +401,7 @@ describe('Testing regular user permissions for /api/registry/org/ endpoints with const org = faker.datatype.uuid().slice(0, MAX_SHORTNAME_LENGTH) await chai.request(app) .put(`/api/registry/org/${org}`) - .set(constants.nonSecretariatUserHeaders) + .set(constants.cnaHeaders) .send({ }) .then((res) => { @@ -417,7 +417,7 @@ describe('Testing regular user permissions for /api/registry/org/ endpoints with it('regular users cannot create new org', async () => { await chai.request(app) .post('/api/registry/org') - .set(constants.nonSecretariatUserHeaders) + .set(constants.cnaHeaders) .send({ }) .then((res) => { @@ -432,10 +432,10 @@ describe('Testing regular user permissions for /api/registry/org/ endpoints with /* Positive Tests */ context('Positive Test', () => { it('regular users can view the organization they belong to', async () => { - const org = constants.nonSecretariatUserHeaders['CVE-API-ORG'] + const org = constants.cnaHeaders['CVE-API-ORG'] await chai.request(app) .get(`/api/registry/org/${org}`) - .set(constants.nonSecretariatUserHeaders) + .set(constants.cnaHeaders) .send({ }) .then((res) => { @@ -444,10 +444,10 @@ describe('Testing regular user permissions for /api/registry/org/ endpoints with }) }) it("regular users can see their organization's cve id quota", async () => { - const org = constants.nonSecretariatUserHeaders['CVE-API-ORG'] + const org = constants.cnaHeaders['CVE-API-ORG'] await chai.request(app) .get(`/api/registry/org/${org}/hard_quota`) - .set(constants.nonSecretariatUserHeaders) + .set(constants.cnaHeaders) .send({ }) .then((res) => { @@ -464,7 +464,7 @@ describe('Testing regular user permissions for /api/registry/org/ endpoints with const org = faker.datatype.uuid().slice(0, MAX_SHORTNAME_LENGTH) await chai.request(app) .get(`/api/registry/org/${org}`) - .set(constants.nonSecretariatUserHeaders) + .set(constants.cnaHeaders) .send({ }) .then((res) => { @@ -475,7 +475,7 @@ describe('Testing regular user permissions for /api/registry/org/ endpoints with it('regular users cannot view all organizations', async () => { await chai.request(app) .get('/api/registry/org') - .set(constants.nonSecretariatUserHeaders) + .set(constants.cnaHeaders) .send({ }) .then((res) => { @@ -484,10 +484,10 @@ describe('Testing regular user permissions for /api/registry/org/ endpoints with }) }) it("regular users cannot see an organization's cve id quota they don't belong to", async () => { - const org = constants.nonSecretariatUserHeaders3['CVE-API-ORG'] + const org = constants.cnaHeaders3['CVE-API-ORG'] await chai.request(app) .get(`/api/registry/org/${org}/hard_quota`) - .set(constants.nonSecretariatUserHeaders) + .set(constants.cnaHeaders) .send({ }) .then((res) => { diff --git a/test/integration-tests/org/roleValidationTest.js b/test/integration-tests/org/roleValidationTest.js index aca35c817..2f5677816 100644 --- a/test/integration-tests/org/roleValidationTest.js +++ b/test/integration-tests/org/roleValidationTest.js @@ -19,7 +19,7 @@ describe('BaseOrgRepository Role Validation', () => { it('should NOT add invalid roles to an organization', async () => { const res = await chai.request(app) .put(`/api/org/${orgShortName}?active_roles.add=INVALID_ROLE_XXX`) - .set(constants.headers) + .set(constants.secretariatHeaders) // We expect 200 OK because we decided to filter out invalid values silently, // OR 400 if validation strictness was elsewhere. @@ -37,7 +37,7 @@ describe('BaseOrgRepository Role Validation', () => { const res = await chai.request(app) .put(`/api/org/${orgShortName}?active_roles.add=${validRole}`) - .set(constants.headers) + .set(constants.secretariatHeaders) expect(res).to.have.status(200) expect(res.body.updated.authority.active_roles).to.include(validRole) diff --git a/test/integration-tests/registry-org/createUserByOrgTest.js b/test/integration-tests/registry-org/createUserByOrgTest.js index 9397eb8db..2a5e39538 100644 --- a/test/integration-tests/registry-org/createUserByOrgTest.js +++ b/test/integration-tests/registry-org/createUserByOrgTest.js @@ -23,7 +23,7 @@ describe('Testing POST /api/registryOrg/:shortname/user endpoint', () => { chai.request(app) .post(`/api/registryOrg/${orgShortName}/user`) - .set(constants.headers) + .set(constants.secretariatHeaders) .send(newUser) .end((err, res) => { expect(err).to.be.null @@ -49,7 +49,7 @@ describe('Testing POST /api/registryOrg/:shortname/user endpoint', () => { chai.request(app) .post(`/api/registryOrg/${orgShortName}/user`) - .set(constants.headers) + .set(constants.secretariatHeaders) .send(newUser) .end((err, res) => { expect(err).to.be.null @@ -72,7 +72,7 @@ describe('Testing POST /api/registryOrg/:shortname/user endpoint', () => { chai.request(app) .post(`/api/registryOrg/${orgShortName}/user`) - .set(constants.headers) + .set(constants.secretariatHeaders) .send(existingUser) .end((err, res) => { expect(err).to.be.null @@ -94,7 +94,7 @@ describe('Testing POST /api/registryOrg/:shortname/user endpoint', () => { chai.request(app) .post(`/api/registryOrg/${orgShortName}/user`) - .set(constants.headers) + .set(constants.secretariatHeaders) .send(invalidUser) .end((err, res) => { expect(err).to.be.null diff --git a/test/integration-tests/registry-org/registryOrgCRUDTest.js b/test/integration-tests/registry-org/registryOrgCRUDTest.js index 8ecd768bf..9ab5040d2 100644 --- a/test/integration-tests/registry-org/registryOrgCRUDTest.js +++ b/test/integration-tests/registry-org/registryOrgCRUDTest.js @@ -6,7 +6,7 @@ chai.use(require('chai-http')) const constants = require('../constants.js') const app = require('../../../src/index.js') -const secretariatHeaders = { ...constants.headers, 'content-type': 'application/json' } +const secretariatHeaders = { ...constants.secretariatHeaders, 'content-type': 'application/json' } const testRegistryOrg = { short_name: 'registry_org_test', diff --git a/test/integration-tests/registry-org/registryOrgWithJointReviewTest.js b/test/integration-tests/registry-org/registryOrgWithJointReviewTest.js index db236a830..02cc27cd9 100644 --- a/test/integration-tests/registry-org/registryOrgWithJointReviewTest.js +++ b/test/integration-tests/registry-org/registryOrgWithJointReviewTest.js @@ -8,7 +8,7 @@ chai.use(require('chai-http')) const constants = require('../constants.js') const app = require('../../../src/index.js') -const secretariatHeaders = { ...constants.headers, 'content-type': 'application/json' } +const secretariatHeaders = { ...constants.secretariatHeaders, 'content-type': 'application/json' } const nonAdminHeaders = { 'CVE-API-ORG': 'non_secretariat_org', @@ -101,7 +101,7 @@ describe('Testing Joint approval', () => { it('Create an User', async () => { await chai.request(app) .post('/api/registry/org/non_secretariat_org/user') - .set(constants.headers) + .set(constants.secretariatHeaders) .send(testRegistryOrgAdminUser) .then((res, err) => { expect(err).to.be.undefined @@ -204,7 +204,7 @@ describe('Testing Joint approval', () => { it('Create an User', async () => { await chai.request(app) .post('/api/registry/org/non_with_comments/user') - .set(constants.headers) + .set(constants.secretariatHeaders) .send(testRegistryOrgAdminUserWithComments) .then((res, err) => { expect(err).to.be.undefined diff --git a/test/integration-tests/registry-org/verifyDeepRemoveEmpty.js b/test/integration-tests/registry-org/verifyDeepRemoveEmpty.js index d2c056768..69f3dffab 100644 --- a/test/integration-tests/registry-org/verifyDeepRemoveEmpty.js +++ b/test/integration-tests/registry-org/verifyDeepRemoveEmpty.js @@ -6,7 +6,7 @@ chai.use(require('chai-http')) const constants = require('../constants.js') const app = require('../../../src/index.js') -const secretariatHeaders = { ...constants.headers, 'content-type': 'application/json' } +const secretariatHeaders = { ...constants.secretariatHeaders, 'content-type': 'application/json' } const testNullRemovalOrg = { short_name: 'test_null_removal', diff --git a/test/integration-tests/review-object/reviewObjectTest.js b/test/integration-tests/review-object/reviewObjectTest.js index 9f8be169c..9a16ed321 100644 --- a/test/integration-tests/review-object/reviewObjectTest.js +++ b/test/integration-tests/review-object/reviewObjectTest.js @@ -19,7 +19,7 @@ describe('Review Object Controller Integration Tests', () => { const res = await chai .request(app) .post('/api/registry/org') - .set({ ...constants.headers }) + .set({ ...constants.secretariatHeaders }) .send(constants.testRegistryOrg2) expect(res).to.have.status(200) expect(res.body).to.have.property('created') @@ -33,7 +33,7 @@ describe('Review Object Controller Integration Tests', () => { const res = await chai .request(app) .post('/api/review/org/') - .set({ ...constants.headers }) + .set({ ...constants.secretariatHeaders }) .send(reviewObject) expect(res).to.have.status(200) expect(res.body).to.have.property('uuid') @@ -47,7 +47,7 @@ describe('Review Object Controller Integration Tests', () => { const res = await chai .request(app) .get(`/api/review/org/${constants.testRegistryOrg2.short_name}`) - .set({ ...constants.headers }) + .set({ ...constants.secretariatHeaders }) expect(res).to.have.status(200) expect(res.body).to.have.property('uuid', reviewUUID) }) @@ -56,7 +56,7 @@ describe('Review Object Controller Integration Tests', () => { const res = await chai .request(app) .get(`/api/review/org/${orgUUID}`) - .set({ ...constants.headers }) + .set({ ...constants.secretariatHeaders }) expect(res).to.have.status(200) expect(res.body).to.have.property('uuid', reviewUUID) }) @@ -65,7 +65,7 @@ describe('Review Object Controller Integration Tests', () => { const res = await chai .request(app) .get(`/api/review/byUUID/${reviewUUID}`) - .set({ ...constants.headers }) + .set({ ...constants.secretariatHeaders }) expect(res).to.have.status(200) expect(res.body).to.have.property('uuid', reviewUUID) expect(res.body).to.have.property('target_object_uuid', orgUUID) @@ -75,7 +75,7 @@ describe('Review Object Controller Integration Tests', () => { const res = await chai .request(app) .get('/api/review/orgs') - .set({ ...constants.headers }) + .set({ ...constants.secretariatHeaders }) expect(res).to.have.status(200) expect(res.body).to.haveOwnProperty('reviewObjects') expect(res.body.reviewObjects).to.be.an('array') @@ -90,7 +90,7 @@ describe('Review Object Controller Integration Tests', () => { const res = await chai .request(app) .put(`/api/review/${reviewUUID}`) - .set({ ...constants.headers }) + .set({ ...constants.secretariatHeaders }) .send(reviewObject) expect(res).to.have.status(200) expect(res.body).to.have.property('uuid', reviewUUID) @@ -101,7 +101,7 @@ describe('Review Object Controller Integration Tests', () => { const res = await chai .request(app) .get('/api/review/orgs?page=1') - .set({ ...constants.headers }) + .set({ ...constants.secretariatHeaders }) expect(res).to.have.status(200) expect(res.body).to.have.property('reviewObjects') expect(res.body.reviewObjects).to.be.an('array') @@ -111,7 +111,7 @@ describe('Review Object Controller Integration Tests', () => { const res = await chai .request(app) .get('/api/review/orgs?status=pending') - .set({ ...constants.headers }) + .set({ ...constants.secretariatHeaders }) expect(res).to.have.status(200) expect(res.body).to.have.property('reviewObjects') res.body.reviewObjects.forEach(obj => { @@ -123,7 +123,7 @@ describe('Review Object Controller Integration Tests', () => { const res = await chai .request(app) .get('/api/review/orgs?status=approved') - .set({ ...constants.headers }) + .set({ ...constants.secretariatHeaders }) expect(res).to.have.status(200) expect(res.body).to.have.property('reviewObjects') res.body.reviewObjects.forEach(obj => { @@ -135,7 +135,7 @@ describe('Review Object Controller Integration Tests', () => { const res = await chai .request(app) .get('/api/review/orgs?status=rejected') - .set({ ...constants.headers }) + .set({ ...constants.secretariatHeaders }) expect(res).to.have.status(200) expect(res.body).to.have.property('reviewObjects') res.body.reviewObjects.forEach(obj => { @@ -147,7 +147,7 @@ describe('Review Object Controller Integration Tests', () => { const res = await chai .request(app) .get('/api/review/orgs?page=1&status=pending') - .set({ ...constants.headers }) + .set({ ...constants.secretariatHeaders }) expect(res).to.have.status(200) expect(res.body).to.have.property('reviewObjects') }) @@ -156,7 +156,7 @@ describe('Review Object Controller Integration Tests', () => { const res = await chai .request(app) .get(`/api/review/org/${constants.testRegistryOrg2.short_name}/reviews`) - .set({ ...constants.headers }) + .set({ ...constants.secretariatHeaders }) expect(res).to.have.status(200) expect(res.body).to.have.property('reviewObjects') expect(res.body.reviewObjects).to.be.an('array') @@ -166,7 +166,7 @@ describe('Review Object Controller Integration Tests', () => { const res = await chai .request(app) .get(`/api/review/org/${constants.testRegistryOrg2.short_name}/reviews?page=1`) - .set({ ...constants.headers }) + .set({ ...constants.secretariatHeaders }) expect(res).to.have.status(200) expect(res.body).to.have.property('reviewObjects') }) @@ -175,7 +175,7 @@ describe('Review Object Controller Integration Tests', () => { const res = await chai .request(app) .get(`/api/review/org/${constants.testRegistryOrg2.short_name}/reviews?include_conversations=true`) - .set({ ...constants.headers }) + .set({ ...constants.secretariatHeaders }) expect(res).to.have.status(200) expect(res.body).to.have.property('reviewObjects') if (res.body.reviewObjects.length > 0) { @@ -193,7 +193,7 @@ describe('Review Object Controller Integration Tests', () => { const res = await chai .request(app) .put(`/api/registry/org/${constants.existingOrg.short_name}`) - .set({ ...constants.nonSecretariatUserHeaders2 }) + .set({ ...constants.cnaHeaders2 }) .send(updateData) expect(res).to.have.status(200) expect(res.body.updated.contact_info.website).to.equal('https://www.example.com') @@ -201,7 +201,7 @@ describe('Review Object Controller Integration Tests', () => { const reviewRes = await chai .request(app) .get(`/api/review/org/${constants.existingOrg.short_name}`) - .set({ ...constants.headers }) + .set({ ...constants.secretariatHeaders }) expect(reviewRes).to.have.status(200) expect(reviewRes.body).to.have.property('uuid') expect(reviewRes.body.status).to.equal('pending') @@ -214,7 +214,7 @@ describe('Review Object Controller Integration Tests', () => { const res = await chai .request(app) .put(`/api/review/${approveTestReviewUUID}/approve`) - .set({ ...constants.headers }) + .set({ ...constants.secretariatHeaders }) .send({}) expect(res).to.have.status(200) expect(res.body).to.have.property('long_name', 'Approve Test Organization') @@ -224,7 +224,7 @@ describe('Review Object Controller Integration Tests', () => { const res = await chai .request(app) .get(`/api/review/byUUID/${approveTestReviewUUID}`) - .set({ ...constants.headers }) + .set({ ...constants.secretariatHeaders }) expect(res).to.have.status(200) expect(res.body).to.have.property('status', 'approved') }) @@ -238,7 +238,7 @@ describe('Review Object Controller Integration Tests', () => { const res = await chai .request(app) .put(`/api/registry/org/${constants.existingOrg.short_name}`) - .set({ ...constants.nonSecretariatUserHeaders2 }) + .set({ ...constants.cnaHeaders2 }) .send(updateData) expect(res).to.have.status(200) expect(res.body.updated.long_name).to.not.equal('Reject Test Organization') @@ -246,7 +246,7 @@ describe('Review Object Controller Integration Tests', () => { const reviewRes = await chai .request(app) .get(`/api/review/org/${constants.existingOrg.short_name}`) - .set({ ...constants.headers }) + .set({ ...constants.secretariatHeaders }) expect(reviewRes).to.have.status(200) expect(reviewRes.body).to.have.property('uuid') expect(reviewRes.body.status).to.equal('pending') @@ -258,7 +258,7 @@ describe('Review Object Controller Integration Tests', () => { const res = await chai .request(app) .put(`/api/review/${rejectTestReviewUUID}/reject`) - .set({ ...constants.headers }) + .set({ ...constants.secretariatHeaders }) .send({}) expect(res).to.have.status(200) expect(res.body).to.have.property('status', 'rejected') @@ -268,7 +268,7 @@ describe('Review Object Controller Integration Tests', () => { const res = await chai .request(app) .get(`/api/review/byUUID/${rejectTestReviewUUID}`) - .set({ ...constants.headers }) + .set({ ...constants.secretariatHeaders }) expect(res).to.have.status(200) expect(res.body).to.have.property('status', 'rejected') }) @@ -277,7 +277,7 @@ describe('Review Object Controller Integration Tests', () => { const res = await chai .request(app) .get(`/api/review/org/${constants.existingOrg.short_name}/reviews`) - .set({ ...constants.nonSecretariatUserHeaders2 }) + .set({ ...constants.cnaHeaders2 }) expect(res).to.have.status(200) expect(res.body).to.have.property('reviewObjects') expect(res.body.reviewObjects).to.be.an('array') @@ -294,14 +294,14 @@ describe('Review Object Controller Integration Tests', () => { const res = await chai .request(app) .put(`/api/registry/org/${constants.existingOrg.short_name}`) - .set({ ...constants.nonSecretariatUserHeaders2 }) + .set({ ...constants.cnaHeaders2 }) .send(updateData) expect(res).to.have.status(200) const reviewRes = await chai .request(app) .get(`/api/review/org/${constants.existingOrg.short_name}`) - .set({ ...constants.headers }) + .set({ ...constants.secretariatHeaders }) expect(reviewRes).to.have.status(200) expect(reviewRes.body).to.have.property('uuid') expect(reviewRes.body.status).to.equal('pending') @@ -320,7 +320,7 @@ describe('Review Object Controller Integration Tests', () => { const res = await chai .request(app) .put(`/api/registryOrg/${constants.existingOrg.short_name}`) - .set({ ...constants.headers }) + .set({ ...constants.secretariatHeaders }) .send(updateData) expect(res).to.have.status(200) expect(res.body.updated.long_name).to.equal('Auto Approve Test Org') @@ -329,7 +329,7 @@ describe('Review Object Controller Integration Tests', () => { const reviewRes = await chai .request(app) .get(`/api/review/byUUID/${autoApproveReviewUUID}`) - .set({ ...constants.headers }) + .set({ ...constants.secretariatHeaders }) expect(reviewRes).to.have.status(200) expect(reviewRes.body).to.have.property('status', 'approved') }) @@ -345,14 +345,14 @@ describe('Review Object Controller Integration Tests', () => { const res = await chai .request(app) .put(`/api/registry/org/${constants.existingOrg.short_name}`) - .set({ ...constants.nonSecretariatUserHeaders2 }) + .set({ ...constants.cnaHeaders2 }) .send(updateData) expect(res).to.have.status(200) const reviewRes = await chai .request(app) .get(`/api/review/org/${constants.existingOrg.short_name}`) - .set({ ...constants.headers }) + .set({ ...constants.secretariatHeaders }) expect(reviewRes).to.have.status(200) expect(reviewRes.body).to.have.property('uuid') expect(reviewRes.body.status).to.equal('pending') @@ -371,7 +371,7 @@ describe('Review Object Controller Integration Tests', () => { const res = await chai .request(app) .put(`/api/registry/org/${constants.existingOrg.short_name}`) - .set({ ...constants.headers }) + .set({ ...constants.secretariatHeaders }) .send(updateData) expect(res).to.have.status(200) expect(res.body.updated.long_name).to.equal('Test Organization') @@ -380,7 +380,7 @@ describe('Review Object Controller Integration Tests', () => { const reviewRes = await chai .request(app) .get(`/api/review/byUUID/${autoRejectReviewUUID}`) - .set({ ...constants.headers }) + .set({ ...constants.secretariatHeaders }) expect(reviewRes).to.have.status(200) expect(reviewRes.body).to.have.property('status', 'rejected') }) @@ -392,7 +392,7 @@ describe('Review Object Controller Integration Tests', () => { const res = await chai .request(app) .get('/api/review/org/nonexistent-org') - .set({ ...constants.headers }) + .set({ ...constants.secretariatHeaders }) expect(res).to.have.status(404) expect(res.body.message).to.contain('No pending review object exists for this organization') }) @@ -402,7 +402,7 @@ describe('Review Object Controller Integration Tests', () => { const res = await chai .request(app) .put(`/api/review/${fakeUUID}/approve`) - .set({ ...constants.headers }) + .set({ ...constants.secretariatHeaders }) .send({}) expect(res).to.have.status(404) expect(res.body.message).to.equal(`No pending review object found with UUID ${fakeUUID}`) @@ -413,7 +413,7 @@ describe('Review Object Controller Integration Tests', () => { const res = await chai .request(app) .put(`/api/review/${fakeUUID}/reject`) - .set({ ...constants.headers }) + .set({ ...constants.secretariatHeaders }) .send({}) expect(res).to.have.status(404) expect(res.body.message).to.equal(`No pending review object found with UUID ${fakeUUID}`) @@ -424,7 +424,7 @@ describe('Review Object Controller Integration Tests', () => { const res = await chai .request(app) .put(`/api/review/org/${fakeUUID}`) - .set({ ...constants.headers }) + .set({ ...constants.secretariatHeaders }) .send({ short_name: 'test', long_name: 'Test Org', hard_quota: 100 }) expect(res).to.have.status(404) }) @@ -434,7 +434,7 @@ describe('Review Object Controller Integration Tests', () => { const res = await chai .request(app) .get(`/api/review/byUUID/${fakeUUID}`) - .set({ ...constants.headers }) + .set({ ...constants.secretariatHeaders }) expect(res).to.have.status(200) expect(res.body).to.be.null }) @@ -443,7 +443,7 @@ describe('Review Object Controller Integration Tests', () => { const res = await chai .request(app) .get('/api/review/org/nonexistent_org_12345/reviews') - .set({ ...constants.headers }) + .set({ ...constants.secretariatHeaders }) expect(res).to.have.status(404) }) @@ -451,7 +451,7 @@ describe('Review Object Controller Integration Tests', () => { const res = await chai .request(app) .get('/api/review/orgs') - .set({ ...constants.nonSecretariatUserHeaders }) + .set({ ...constants.cnaHeaders }) expect(res).to.have.status(403) }) @@ -459,7 +459,7 @@ describe('Review Object Controller Integration Tests', () => { const res = await chai .request(app) .post('/api/review/org/') - .set({ ...constants.nonSecretariatUserHeaders }) + .set({ ...constants.cnaHeaders }) .send({ short_name: 'test', UUID: orgUUID }) expect(res).to.have.status(403) }) @@ -468,7 +468,7 @@ describe('Review Object Controller Integration Tests', () => { const res = await chai .request(app) .put(`/api/review/${reviewUUID}`) - .set({ ...constants.nonSecretariatUserHeaders }) + .set({ ...constants.cnaHeaders }) .send({ short_name: 'test' }) expect(res).to.have.status(403) }) @@ -477,7 +477,7 @@ describe('Review Object Controller Integration Tests', () => { const res = await chai .request(app) .put(`/api/review/${reviewUUID}/approve`) - .set({ ...constants.nonSecretariatUserHeaders }) + .set({ ...constants.cnaHeaders }) .send({}) expect(res).to.have.status(403) }) @@ -486,7 +486,7 @@ describe('Review Object Controller Integration Tests', () => { const res = await chai .request(app) .put(`/api/review/${reviewUUID}/reject`) - .set({ ...constants.nonSecretariatUserHeaders }) + .set({ ...constants.cnaHeaders }) .send({}) expect(res).to.have.status(403) }) @@ -495,7 +495,7 @@ describe('Review Object Controller Integration Tests', () => { const res = await chai .request(app) .get(`/api/review/org/${constants.testRegistryOrg2.short_name}`) - .set({ ...constants.nonSecretariatUserHeaders }) + .set({ ...constants.cnaHeaders }) expect(res).to.have.status(403) }) }) diff --git a/test/integration-tests/user/createUserTest.js b/test/integration-tests/user/createUserTest.js index a2050a67e..e6ef70b60 100644 --- a/test/integration-tests/user/createUserTest.js +++ b/test/integration-tests/user/createUserTest.js @@ -66,7 +66,7 @@ describe('Testing create user endpoint', () => { it('Should return 200 and new user', (done) => { chai.request(app) .post('/api/org/range_4/user') - .set(constants.headers) + .set(constants.secretariatHeaders) .send(body) .end((err, res) => { expect(err).to.be.null @@ -79,7 +79,7 @@ describe('Testing create user endpoint', () => { it('Should return 200 and new user with registry enabled', (done) => { chai.request(app) .post('/api/registry/org/range_4/user') - .set(constants.headers) + .set(constants.secretariatHeaders) .send(registryBody) .end((err, res) => { expect(err).to.be.null @@ -92,7 +92,7 @@ describe('Testing create user endpoint', () => { it('Should return 200 and create a non admin user', (done) => { chai.request(app) .post('/api/org/range_4/user') - .set(constants.headers) + .set(constants.secretariatHeaders) .send(nonAdminBody) .end((err, res) => { expect(err).to.be.null @@ -105,7 +105,7 @@ describe('Testing create user endpoint', () => { it('Should return 200 and create a non admin user with registry enabled', (done) => { chai.request(app) .post('/api/registry/org/range_4/user') - .set(constants.headers) + .set(constants.secretariatHeaders) .send(registryNonAdminBody) .end((err, res) => { expect(err).to.be.null diff --git a/test/integration-tests/user/updateUserTest.js b/test/integration-tests/user/updateUserTest.js index d885536af..d734b605c 100644 --- a/test/integration-tests/user/updateUserTest.js +++ b/test/integration-tests/user/updateUserTest.js @@ -13,7 +13,7 @@ describe('Testing Edit user endpoint', () => { it('Should return 200 when only name changes are done', async () => { await chai.request(app) .put('/api/org/win_5/user/jasminesmith@win_5.com?name.first=NewName') - .set(constants.nonSecretariatUserHeaders) + .set(constants.cnaHeaders) .then((res, err) => { expect(err).to.be.undefined expect(res).to.have.status(200) @@ -21,10 +21,10 @@ describe('Testing Edit user endpoint', () => { }) it('Should return 200 when only name changes are done with registry enabled', async () => { let user - await chai.request(app).get('/api/registry/org/win_5/user/jasminesmith@win_5.com').set(constants.nonSecretariatUserHeaders).then((res) => { user = res.body }) + await chai.request(app).get('/api/registry/org/win_5/user/jasminesmith@win_5.com').set(constants.cnaHeaders).then((res) => { user = res.body }) await chai.request(app) .put('/api/registry/org/win_5/user/jasminesmith@win_5.com') - .set(constants.nonSecretariatUserHeaders) + .set(constants.cnaHeaders) .send({ ...user, name: { @@ -40,7 +40,7 @@ describe('Testing Edit user endpoint', () => { it('Should return an error when admin is required', async () => { await chai.request(app) .put('/api/org/win_5/user/jasminesmith@win_5.com?new_username=NewUsername') - .set(constants.nonSecretariatUserHeaders) + .set(constants.cnaHeaders) .then((res, err) => { expect(err).to.be.undefined expect(res).to.have.status(403) @@ -49,10 +49,10 @@ describe('Testing Edit user endpoint', () => { }) it('Should return an error when admin is required with registry enabled', async () => { let user - await chai.request(app).get('/api/registry/org/win_5/user/jasminesmith@win_5.com').set(constants.nonSecretariatUserHeaders).then((res) => { user = res.body }) + await chai.request(app).get('/api/registry/org/win_5/user/jasminesmith@win_5.com').set(constants.cnaHeaders).then((res) => { user = res.body }) await chai.request(app) .put('/api/registry/org/win_5/user/jasminesmith@win_5.com') - .set(constants.nonSecretariatUserHeaders) + .set(constants.cnaHeaders) .send({ ...user, username: 'NewUsername' @@ -66,7 +66,7 @@ describe('Testing Edit user endpoint', () => { it('Should not allow a first name of more than 100 characters', async () => { await chai.request(app) .put('/api/org/win_5/user/jasminesmith@win_5.com?name.first=1:1234567,2:1234567,3:1234567,4:1234567,5:1234567,6:1234567,7:1234567,8:1234567,9:1234567,10:1234567,11:1234567') - .set(constants.nonSecretariatUserHeaders) + .set(constants.cnaHeaders) .then((res, err) => { expect(res).to.have.status(400) expect(res.body.error).to.contain('BAD_INPUT') @@ -74,10 +74,10 @@ describe('Testing Edit user endpoint', () => { }) it('Should not allow a first name of more than 100 characters with registry enabled', async () => { let user - await chai.request(app).get('/api/registry/org/win_5/user/jasminesmith@win_5.com').set(constants.nonSecretariatUserHeaders).then((res) => { user = res.body }) + await chai.request(app).get('/api/registry/org/win_5/user/jasminesmith@win_5.com').set(constants.cnaHeaders).then((res) => { user = res.body }) await chai.request(app) .put('/api/registry/org/win_5/user/jasminesmith@win_5.com') - .set(constants.nonSecretariatUserHeaders) + .set(constants.cnaHeaders) .send({ ...user, name: { @@ -94,7 +94,7 @@ describe('Testing Edit user endpoint', () => { it('Should not allow a middle name of more than 100 characters', async () => { await chai.request(app) .put('/api/org/win_5/user/jasminesmith@win_5.com?name.middle=1:1234567,2:1234567,3:1234567,4:1234567,5:1234567,6:1234567,7:1234567,8:1234567,9:1234567,10:1234567,11:1234567') - .set(constants.nonSecretariatUserHeaders) + .set(constants.cnaHeaders) .then((res, err) => { expect(res).to.have.status(400) expect(res.body.error).to.contain('BAD_INPUT') @@ -102,10 +102,10 @@ describe('Testing Edit user endpoint', () => { }) it('Should not allow a middle name of more than 100 characters with registry enabled', async () => { let user - await chai.request(app).get('/api/registry/org/win_5/user/jasminesmith@win_5.com').set(constants.nonSecretariatUserHeaders).then((res) => { user = res.body }) + await chai.request(app).get('/api/registry/org/win_5/user/jasminesmith@win_5.com').set(constants.cnaHeaders).then((res) => { user = res.body }) await chai.request(app) .put('/api/registry/org/win_5/user/jasminesmith@win_5.com') - .set(constants.nonSecretariatUserHeaders) + .set(constants.cnaHeaders) .send({ ...user, name: { @@ -122,7 +122,7 @@ describe('Testing Edit user endpoint', () => { it('Should not allow a last name of more than 100 characters', async () => { await chai.request(app) .put('/api/org/win_5/user/jasminesmith@win_5.com?name.last=1:1234567,2:1234567,3:1234567,4:1234567,5:1234567,6:1234567,7:1234567,8:1234567,9:1234567,10:1234567,11:1234567') - .set(constants.nonSecretariatUserHeaders) + .set(constants.cnaHeaders) .then((res, err) => { expect(res).to.have.status(400) expect(res.body.error).to.contain('BAD_INPUT') @@ -130,10 +130,10 @@ describe('Testing Edit user endpoint', () => { }) it('Should not allow a last name of more than 100 characters with registry enabled', async () => { let user - await chai.request(app).get('/api/registry/org/win_5/user/jasminesmith@win_5.com').set(constants.nonSecretariatUserHeaders).then((res) => { user = res.body }) + await chai.request(app).get('/api/registry/org/win_5/user/jasminesmith@win_5.com').set(constants.cnaHeaders).then((res) => { user = res.body }) await chai.request(app) .put('/api/registry/org/win_5/user/jasminesmith@win_5.com') - .set(constants.nonSecretariatUserHeaders) + .set(constants.cnaHeaders) .send({ ...user, name: { @@ -150,7 +150,7 @@ describe('Testing Edit user endpoint', () => { it('Should not allow a suffix of more than 100 characters', async () => { await chai.request(app) .put('/api/org/win_5/user/jasminesmith@win_5.com?name.suffix=1:1234567,2:1234567,3:1234567,4:1234567,5:1234567,6:1234567,7:1234567,8:1234567,9:1234567,10:1234567,11:1234567') - .set(constants.nonSecretariatUserHeaders) + .set(constants.cnaHeaders) .then((res, err) => { expect(res).to.have.status(400) expect(res.body.error).to.contain('BAD_INPUT') @@ -158,10 +158,10 @@ describe('Testing Edit user endpoint', () => { }) it('Should not allow a suffix of more than 100 characters with registry enabled', async () => { let user - await chai.request(app).get('/api/registry/org/win_5/user/jasminesmith@win_5.com').set(constants.nonSecretariatUserHeaders).then((res) => { user = res.body }) + await chai.request(app).get('/api/registry/org/win_5/user/jasminesmith@win_5.com').set(constants.cnaHeaders).then((res) => { user = res.body }) await chai.request(app) .put('/api/registry/org/win_5/user/jasminesmith@win_5.com?name.suffix=1:1234567,2:1234567,3:1234567,4:1234567,5:1234567,6:1234567,7:1234567,8:1234567,9:1234567,10:1234567,11:1234567') - .set(constants.nonSecretariatUserHeaders) + .set(constants.cnaHeaders) .send({ ...user, name: { @@ -176,11 +176,11 @@ describe('Testing Edit user endpoint', () => { }) }) it('expect error when trying to add existing user to the same org', async () => { - const user = constants.nonSecretariatUserHeaders3['CVE-API-USER'] - const org = constants.nonSecretariatUserHeaders3['CVE-API-ORG'] + const user = constants.cnaHeaders3['CVE-API-USER'] + const org = constants.cnaHeaders3['CVE-API-ORG'] await chai.request(app) .put(`/api/registry/org/${org}/user/${user}`) - .set(constants.headers) + .set(constants.secretariatHeaders) .send({ org_short_name: org })