diff --git a/.eslintrc.json b/.eslintrc.json index d7efe2b..da7847b 100644 --- a/.eslintrc.json +++ b/.eslintrc.json @@ -12,6 +12,6 @@ "prettier/prettier": "error", "import/extensions": ["error", "always"], "unicorn/prevent-abbreviations": "error", - "require-atomic-updates": "off" + "@typescript-eslint/await-thenable": "off" } } diff --git a/package-lock.json b/package-lock.json index 568c53a..689ef77 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9,7 +9,7 @@ "version": "0.0.1", "hasInstallScript": true, "dependencies": { - "@prisma/client": "3.9.2", + "@prisma/client": "3.10.0", "@sinclair/typebox": "0.23.4", "@thream/socketio-jwt": "2.2.1", "axios": "0.26.0", @@ -17,7 +17,7 @@ "dotenv": "16.0.0", "ejs": "3.1.6", "fastify": "3.27.2", - "fastify-cors": "6.0.2", + "fastify-cors": "6.0.3", "fastify-helmet": "7.0.1", "fastify-multipart": "5.3.1", "fastify-plugin": "3.0.1", @@ -38,23 +38,23 @@ "@commitlint/config-conventional": "16.2.1", "@saithodev/semantic-release-backmerge": "2.1.1", "@swc/cli": "0.1.55", - "@swc/core": "1.2.143", - "@swc/jest": "0.2.17", + "@swc/core": "1.2.146", + "@swc/jest": "0.2.20", "@types/bcryptjs": "2.4.2", "@types/busboy": "1.3.0", "@types/ejs": "3.1.0", "@types/http-errors": "1.8.2", - "@types/jest": "27.4.0", + "@types/jest": "27.4.1", "@types/jsonwebtoken": "8.5.8", "@types/ms": "0.7.31", - "@types/node": "17.0.18", + "@types/node": "17.0.21", "@types/nodemailer": "6.4.4", - "@typescript-eslint/eslint-plugin": "5.12.0", + "@typescript-eslint/eslint-plugin": "5.12.1", "concurrently": "7.0.0", "cross-env": "7.0.3", "editorconfig-checker": "4.0.2", - "eslint": "8.9.0", - "eslint-config-conventions": "1.0.2", + "eslint": "8.10.0", + "eslint-config-conventions": "1.1.0", "eslint-config-prettier": "8.4.0", "eslint-plugin-import": "2.25.4", "eslint-plugin-prettier": "4.0.0", @@ -69,7 +69,7 @@ "nodemon": "2.0.15", "plop": "3.0.5", "prettier": "2.5.1", - "prisma": "3.9.2", + "prisma": "3.10.0", "rimraf": "3.0.2", "semantic-release": "19.0.2", "typescript": "4.5.5" @@ -263,9 +263,9 @@ } }, "node_modules/@babel/helper-module-transforms": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.16.7.tgz", - "integrity": "sha512-gaqtLDxJEFCeQbYp9aLAefjhkKdjKcdh6DB7jniIGU3Pz52WAmP268zK0VgPz9hUNkMSYeH976K2/Y6yPadpng==", + "version": "7.17.6", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.17.6.tgz", + "integrity": "sha512-2ULmRdqoOMpdvkbT8jONrZML/XALfzxlb052bldftkicAUy8AxSCkD5trDPQcwHNmolcl7wP6ehNqMlyUw6AaA==", "dev": true, "dependencies": { "@babel/helper-environment-visitor": "^7.16.7", @@ -274,8 +274,8 @@ "@babel/helper-split-export-declaration": "^7.16.7", "@babel/helper-validator-identifier": "^7.16.7", "@babel/template": "^7.16.7", - "@babel/traverse": "^7.16.7", - "@babel/types": "^7.16.7" + "@babel/traverse": "^7.17.3", + "@babel/types": "^7.17.0" }, "engines": { "node": ">=6.9.0" @@ -918,9 +918,9 @@ } }, "node_modules/@eslint/eslintrc": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.1.0.tgz", - "integrity": "sha512-C1DfL7XX4nPqGd6jcP01W9pVM1HYCuUkFk1432D7F0v3JSlUIeOYn9oCoi3eoLZ+iwBSb29BMFxxny0YrrEZqg==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.2.0.tgz", + "integrity": "sha512-igm9SjJHNEJRiUnecP/1R5T3wKLEJ7pL6e2P+GUSfCd0dGjPYYZve08uzw8L2J8foVHFz+NGu12JxRcU2gGo6w==", "dev": true, "dependencies": { "ajv": "^6.12.4", @@ -966,9 +966,9 @@ } }, "node_modules/@humanwhocodes/config-array": { - "version": "0.9.3", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.9.3.tgz", - "integrity": "sha512-3xSMlXHh03hCcCmFc0rbKp3Ivt2PFEJnQUJDDMTJQ2wkECZWdq4GePs2ctc5H8zV+cHPaq8k2vU8mrQjA6iHdQ==", + "version": "0.9.5", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.9.5.tgz", + "integrity": "sha512-ObyMyWxZiCu/yTisA7uzx81s40xR2fD5Cg/2Kq7G02ajkNubJf6BopgDTmDyc3U7sXpNKM8cYOw7s7Tyr+DnCw==", "dev": true, "dependencies": { "@humanwhocodes/object-schema": "^1.2.1", @@ -1556,12 +1556,12 @@ } }, "node_modules/@prisma/client": { - "version": "3.9.2", - "resolved": "https://registry.npmjs.org/@prisma/client/-/client-3.9.2.tgz", - "integrity": "sha512-VlEIYVMyfFZHbVBOlunPl47gmP/Z0zzPjPj8I7uKEIaABqrUy50ru3XS0aZd8GFvevVwt7p91xxkUjNjrWhKAQ==", + "version": "3.10.0", + "resolved": "https://registry.npmjs.org/@prisma/client/-/client-3.10.0.tgz", + "integrity": "sha512-6P4sV7WFuODSfSoSEzCH1qfmWMrCUBk1LIIuTbQf6m1LI/IOpLN4lnqGDmgiBGprEzuWobnGLfe9YsXLn0inrg==", "hasInstallScript": true, "dependencies": { - "@prisma/engines-version": "3.9.0-58.bcc2ff906db47790ee902e7bbc76d7ffb1893009" + "@prisma/engines-version": "3.10.0-50.73e60b76d394f8d37d8ebd1f8918c79029f0db86" }, "engines": { "node": ">=12.6" @@ -1576,16 +1576,16 @@ } }, "node_modules/@prisma/engines": { - "version": "3.9.0-58.bcc2ff906db47790ee902e7bbc76d7ffb1893009", - "resolved": "https://registry.npmjs.org/@prisma/engines/-/engines-3.9.0-58.bcc2ff906db47790ee902e7bbc76d7ffb1893009.tgz", - "integrity": "sha512-qM+uJbkelB21bnK44gYE049YTHIjHysOuj0mj5U2gDGyNLfmiazlggzFPCgEjgme4U5YB2tYs6Z5Hq08Kl8pjA==", + "version": "3.10.0-50.73e60b76d394f8d37d8ebd1f8918c79029f0db86", + "resolved": "https://registry.npmjs.org/@prisma/engines/-/engines-3.10.0-50.73e60b76d394f8d37d8ebd1f8918c79029f0db86.tgz", + "integrity": "sha512-LjRssaWu9w2SrXitofnutRIyURI7l0veQYIALz7uY4shygM9nMcK3omXcObRm7TAcw3Z+9ytfK1B+ySOsOesxQ==", "devOptional": true, "hasInstallScript": true }, "node_modules/@prisma/engines-version": { - "version": "3.9.0-58.bcc2ff906db47790ee902e7bbc76d7ffb1893009", - "resolved": "https://registry.npmjs.org/@prisma/engines-version/-/engines-version-3.9.0-58.bcc2ff906db47790ee902e7bbc76d7ffb1893009.tgz", - "integrity": "sha512-5Dh+qTDhpPR66w6NNAnPs+/W/Qt4r1DSd+qhfPFcDThUK4uxoZKGlPb2IYQn5LL+18aIGnmteDf7BnVMmvBNSQ==" + "version": "3.10.0-50.73e60b76d394f8d37d8ebd1f8918c79029f0db86", + "resolved": "https://registry.npmjs.org/@prisma/engines-version/-/engines-version-3.10.0-50.73e60b76d394f8d37d8ebd1f8918c79029f0db86.tgz", + "integrity": "sha512-cVYs5gyQH/qyut24hUvDznCfPrWiNMKNfPb9WmEoiU6ihlkscIbCfkmuKTtspVLWRdl0LqjYEC7vfnPv17HWhw==" }, "node_modules/@saithodev/semantic-release-backmerge": { "version": "2.1.1", @@ -1810,9 +1810,9 @@ } }, "node_modules/@swc/core": { - "version": "1.2.143", - "resolved": "https://registry.npmjs.org/@swc/core/-/core-1.2.143.tgz", - "integrity": "sha512-kZ1OVaNS183b3nMZBDQMev/ULpF/iUcF4bwlx+Nz6GH7D9qGTTbhiN7xWkoCWjcCY1TF8Bt7z1+ddX6ibPSc8w==", + "version": "1.2.146", + "resolved": "https://registry.npmjs.org/@swc/core/-/core-1.2.146.tgz", + "integrity": "sha512-axIapm2mReT45ILuYxwe0xEWqtITj3dyfDIGIgdC8Tx7ss5vpXvr22UbDSUTRIS+nypFy6hViIR1RhXE1hXnig==", "dev": true, "engines": { "node": ">=10" @@ -1822,25 +1822,25 @@ "url": "https://opencollective.com/swc" }, "optionalDependencies": { - "@swc/core-android-arm-eabi": "1.2.143", - "@swc/core-android-arm64": "1.2.143", - "@swc/core-darwin-arm64": "1.2.143", - "@swc/core-darwin-x64": "1.2.143", - "@swc/core-freebsd-x64": "1.2.143", - "@swc/core-linux-arm-gnueabihf": "1.2.143", - "@swc/core-linux-arm64-gnu": "1.2.143", - "@swc/core-linux-arm64-musl": "1.2.143", - "@swc/core-linux-x64-gnu": "1.2.143", - "@swc/core-linux-x64-musl": "1.2.143", - "@swc/core-win32-arm64-msvc": "1.2.143", - "@swc/core-win32-ia32-msvc": "1.2.143", - "@swc/core-win32-x64-msvc": "1.2.143" + "@swc/core-android-arm-eabi": "1.2.146", + "@swc/core-android-arm64": "1.2.146", + "@swc/core-darwin-arm64": "1.2.146", + "@swc/core-darwin-x64": "1.2.146", + "@swc/core-freebsd-x64": "1.2.146", + "@swc/core-linux-arm-gnueabihf": "1.2.146", + "@swc/core-linux-arm64-gnu": "1.2.146", + "@swc/core-linux-arm64-musl": "1.2.146", + "@swc/core-linux-x64-gnu": "1.2.146", + "@swc/core-linux-x64-musl": "1.2.146", + "@swc/core-win32-arm64-msvc": "1.2.146", + "@swc/core-win32-ia32-msvc": "1.2.146", + "@swc/core-win32-x64-msvc": "1.2.146" } }, "node_modules/@swc/core-android-arm-eabi": { - "version": "1.2.143", - "resolved": "https://registry.npmjs.org/@swc/core-android-arm-eabi/-/core-android-arm-eabi-1.2.143.tgz", - "integrity": "sha512-OyRhH2NfHRm8jgN6KxpEX5fBg2KaGdocPQgSWzhk9QSnn+juacBXg6lE9lQEb1nekb36XusE51GNiImOnZI9RQ==", + "version": "1.2.146", + "resolved": "https://registry.npmjs.org/@swc/core-android-arm-eabi/-/core-android-arm-eabi-1.2.146.tgz", + "integrity": "sha512-vRlxDksEDdprqfj9VACYUGyCJr/tYLetNjhjel46qmKoXU5uAib1WLWWgMB1Ur+oh8eCSTN8cnOblOziqfC1Rw==", "cpu": [ "arm" ], @@ -1849,14 +1849,17 @@ "os": [ "android" ], + "bin": { + "swcx": "swc" + }, "engines": { "node": ">=10" } }, "node_modules/@swc/core-android-arm64": { - "version": "1.2.143", - "resolved": "https://registry.npmjs.org/@swc/core-android-arm64/-/core-android-arm64-1.2.143.tgz", - "integrity": "sha512-hMnZcFkoI26n3QakazyNmuMpaIm/pyC1KJXvp49wTaFazbeG0OqxbWvzUIK3vDnXJPuNf1m9c0jXtvQaXbacvQ==", + "version": "1.2.146", + "resolved": "https://registry.npmjs.org/@swc/core-android-arm64/-/core-android-arm64-1.2.146.tgz", + "integrity": "sha512-YoJygRvjZ6IXvWstYZHGThEj1aWshzoMohX0i6WH5NIZhkzeF0UhRu/IZoS9VcQsd0WtDEMQe0G0wcrd/FToNg==", "cpu": [ "arm64" ], @@ -1865,14 +1868,17 @@ "os": [ "android" ], + "bin": { + "swcx": "swc" + }, "engines": { "node": ">=10" } }, "node_modules/@swc/core-darwin-arm64": { - "version": "1.2.143", - "resolved": "https://registry.npmjs.org/@swc/core-darwin-arm64/-/core-darwin-arm64-1.2.143.tgz", - "integrity": "sha512-Mcd27MvxBCqNJ9HHEu2RH7lY0zcImSP1/3uivJ4eiiAE7WSUdrs9flhryZ7AlOfs0DR7b4fpjJgK0tZyg9K9Yw==", + "version": "1.2.146", + "resolved": "https://registry.npmjs.org/@swc/core-darwin-arm64/-/core-darwin-arm64-1.2.146.tgz", + "integrity": "sha512-ftAyhczQHSUQo1Mox/VyZ3YL9KtG0LgOFUUUuLD3Pb9zKQB20Jc/Dfnh/bFktemVG8XiH0rOyR9yEI2EANHuEA==", "cpu": [ "arm64" ], @@ -1881,14 +1887,17 @@ "os": [ "darwin" ], + "bin": { + "swcx": "swc" + }, "engines": { "node": ">=10" } }, "node_modules/@swc/core-darwin-x64": { - "version": "1.2.143", - "resolved": "https://registry.npmjs.org/@swc/core-darwin-x64/-/core-darwin-x64-1.2.143.tgz", - "integrity": "sha512-KV8147NuOqU6wCliAF+PmpbUecwUn0GynOUjb44kMbwCsYeH/Pm5FewGvyW9Dr7rnpnoT11pOUAJlcRzRfXrDA==", + "version": "1.2.146", + "resolved": "https://registry.npmjs.org/@swc/core-darwin-x64/-/core-darwin-x64-1.2.146.tgz", + "integrity": "sha512-mYRN/WTS7TfYt3jqJYghcrpAW7zkpjdeEx9Rot8rmUEmk97luh9Bcwqafzjb9ndoG1mAiaTQcqvs/QqT2efS5Q==", "cpu": [ "x64" ], @@ -1897,14 +1906,17 @@ "os": [ "darwin" ], + "bin": { + "swcx": "swc" + }, "engines": { "node": ">=10" } }, "node_modules/@swc/core-freebsd-x64": { - "version": "1.2.143", - "resolved": "https://registry.npmjs.org/@swc/core-freebsd-x64/-/core-freebsd-x64-1.2.143.tgz", - "integrity": "sha512-SU3hOtPqwaCxTO8jajEaNMO8aU0/5JduuRBbv843UzCz9S2on+dTYNkm94TsBxhX+JYN+T9yGi/tynoTjKj1QA==", + "version": "1.2.146", + "resolved": "https://registry.npmjs.org/@swc/core-freebsd-x64/-/core-freebsd-x64-1.2.146.tgz", + "integrity": "sha512-eYU5g7p/dY98+hvg3VJtwiX+btRWnq+WO4y4M+X1nguqghvuTv6jtVLeHDNr8FEhc+FMSJPYKO321ZVa0xCKXw==", "cpu": [ "x64" ], @@ -1913,14 +1925,17 @@ "os": [ "freebsd" ], + "bin": { + "swcx": "swc" + }, "engines": { "node": ">=10" } }, "node_modules/@swc/core-linux-arm-gnueabihf": { - "version": "1.2.143", - "resolved": "https://registry.npmjs.org/@swc/core-linux-arm-gnueabihf/-/core-linux-arm-gnueabihf-1.2.143.tgz", - "integrity": "sha512-ZGfb0Fz2jQqrRv3gg0gdzQfkZbqTAC9ac03fXx0KiNFgkAjnWNm0JYRQe0sxa1L5wBml2Sv4aAFIN1BHi6roVA==", + "version": "1.2.146", + "resolved": "https://registry.npmjs.org/@swc/core-linux-arm-gnueabihf/-/core-linux-arm-gnueabihf-1.2.146.tgz", + "integrity": "sha512-ahKwlP9b41HUlwY+0eRJjgG4yJZN+uT16iBB2X7VedipmRO0aOOaP8xLReDjn4Z13DL14iAPC6Jnxiaw5rl8LQ==", "cpu": [ "arm" ], @@ -1929,14 +1944,17 @@ "os": [ "linux" ], + "bin": { + "swcx": "swc" + }, "engines": { "node": ">=10" } }, "node_modules/@swc/core-linux-arm64-gnu": { - "version": "1.2.143", - "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-gnu/-/core-linux-arm64-gnu-1.2.143.tgz", - "integrity": "sha512-roLB+QYf7omusDTNfqsAuFWMyeRjXi2Wp1abNh++7YZVhkZ57q1tUNJiqw6KJhaSd5KSQGpBygarDRvL70ZZ4Q==", + "version": "1.2.146", + "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-gnu/-/core-linux-arm64-gnu-1.2.146.tgz", + "integrity": "sha512-S/0EJI8BWBQtsyIuYwVg+Gq03NlGl/xWOJgwLJss5+DawvxK8YZFteczw7M/bN/E5D2TqZRyybLM6baQozgDAg==", "cpu": [ "arm64" ], @@ -1945,14 +1963,17 @@ "os": [ "linux" ], + "bin": { + "swcx": "swc" + }, "engines": { "node": ">=10" } }, "node_modules/@swc/core-linux-arm64-musl": { - "version": "1.2.143", - "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-musl/-/core-linux-arm64-musl-1.2.143.tgz", - "integrity": "sha512-66qRHVh2F4Z0b6G8n9CEKuKwYVIzfTlNHixwoqCgdCbHT5n1lUiWigDel1psCDbrD/p9nWTU0lfVtbqmKJWnPw==", + "version": "1.2.146", + "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-musl/-/core-linux-arm64-musl-1.2.146.tgz", + "integrity": "sha512-tOHcanuqgniMwUWMwjA+zr/hZyVn931l8DiIi3Mthyplp/PDY68PVAUJ8miJd4C5XDPcYfPOe5kRyXsFrdZzhw==", "cpu": [ "arm64" ], @@ -1961,14 +1982,17 @@ "os": [ "linux" ], + "bin": { + "swcx": "swc" + }, "engines": { "node": ">=10" } }, "node_modules/@swc/core-linux-x64-gnu": { - "version": "1.2.143", - "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.2.143.tgz", - "integrity": "sha512-FSn9E+uWSyLQtHFpJcj+jNU+NPxrwOMlB+XUObfRcZwRzV6W0KeGLwnwvuhByYmGE7ujvEGCEQpLP95ER88TzQ==", + "version": "1.2.146", + "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.2.146.tgz", + "integrity": "sha512-w9jHnFe1XLYfQYWkaJwKgmtb/HKsgyFy0sCQpVjgDq/+ds8PPyACthDINpiEMsAOFN+IfE59HDn4A2gN3qyVgg==", "cpu": [ "x64" ], @@ -1977,14 +2001,17 @@ "os": [ "linux" ], + "bin": { + "swcx": "swc" + }, "engines": { "node": ">=10" } }, "node_modules/@swc/core-linux-x64-musl": { - "version": "1.2.143", - "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.2.143.tgz", - "integrity": "sha512-yCD0LkqUVTLz07MD1m5gajfdOobIqUdQ8E0ZarkcCqvd6eLygXb7U2fn0pZs1eadOqxLSjEjig1i2bCx655Z5w==", + "version": "1.2.146", + "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.2.146.tgz", + "integrity": "sha512-iwKiHvV8p48/82+eJRCy/WcnAZBOFr2ZJ5VLtRuV+sz0mkWjoimnLZ8SEshoru9PVoKF7hfG7AMqKaVOUjSJFg==", "cpu": [ "x64" ], @@ -1993,14 +2020,17 @@ "os": [ "linux" ], + "bin": { + "swcx": "swc" + }, "engines": { "node": ">=10" } }, "node_modules/@swc/core-win32-arm64-msvc": { - "version": "1.2.143", - "resolved": "https://registry.npmjs.org/@swc/core-win32-arm64-msvc/-/core-win32-arm64-msvc-1.2.143.tgz", - "integrity": "sha512-ehdvirsmL5yJ3J5HUcZD48VBFFiINX61FM5NTfRQgZgqGTyZo88iNTHsBmQXaEtp25y9xr6xXtKXeRGIBpuszg==", + "version": "1.2.146", + "resolved": "https://registry.npmjs.org/@swc/core-win32-arm64-msvc/-/core-win32-arm64-msvc-1.2.146.tgz", + "integrity": "sha512-n21riIEGTPim19Y0mrBIDVZfOrYdfd2W8QEgbiG/f+kcOlWckvyh9ZKexd6D8QpHe73C4lOX1RrmH3DgnPGhqA==", "cpu": [ "arm64" ], @@ -2009,14 +2039,17 @@ "os": [ "win32" ], + "bin": { + "swcx": "swc.exe" + }, "engines": { "node": ">=10" } }, "node_modules/@swc/core-win32-ia32-msvc": { - "version": "1.2.143", - "resolved": "https://registry.npmjs.org/@swc/core-win32-ia32-msvc/-/core-win32-ia32-msvc-1.2.143.tgz", - "integrity": "sha512-ZWENEbRo9Jbqm/3ezLGotYN7siIEYC5PoJQBi+P/Fg42xm7bUpewIbbGmizOMN0d0+OWVc2V1IFg9bbA0oZbpg==", + "version": "1.2.146", + "resolved": "https://registry.npmjs.org/@swc/core-win32-ia32-msvc/-/core-win32-ia32-msvc-1.2.146.tgz", + "integrity": "sha512-5b99VzxvTqTQCZDmpKrGevUc9SK0QBiGZG4Oeh5CnSJyx8SZU0A3R7rbMoSR5/raP9OA/0ZvlXefUDXIsKNadA==", "cpu": [ "ia32" ], @@ -2025,14 +2058,17 @@ "os": [ "win32" ], + "bin": { + "swcx": "swc.exe" + }, "engines": { "node": ">=10" } }, "node_modules/@swc/core-win32-x64-msvc": { - "version": "1.2.143", - "resolved": "https://registry.npmjs.org/@swc/core-win32-x64-msvc/-/core-win32-x64-msvc-1.2.143.tgz", - "integrity": "sha512-IBJ4DLOtMOAzW1+fFkdoj0e85l+CLj+Zn3jjUtdlYKroEunA3xNGci5+Ak/NRvt4lnlPlyVyw+2JXsfpnV2FCA==", + "version": "1.2.146", + "resolved": "https://registry.npmjs.org/@swc/core-win32-x64-msvc/-/core-win32-x64-msvc-1.2.146.tgz", + "integrity": "sha512-P45vAh0hR9dISIceSv6MkypjT0WduLWB4U8LPoCneeAw7mA1U7liS0Uu1PeiafxQVMWg8SNyIJFDcSg/haLJgg==", "cpu": [ "x64" ], @@ -2041,14 +2077,17 @@ "os": [ "win32" ], + "bin": { + "swcx": "swc.exe" + }, "engines": { "node": ">=10" } }, "node_modules/@swc/jest": { - "version": "0.2.17", - "resolved": "https://registry.npmjs.org/@swc/jest/-/jest-0.2.17.tgz", - "integrity": "sha512-n/g989+O8xxMcTZnP0phDrrgezGZBQBf7cX4QuzEsn07QkWbqmMsfaCxdF0kzajXublXWJ8yk5vRe3VNk1tczA==", + "version": "0.2.20", + "resolved": "https://registry.npmjs.org/@swc/jest/-/jest-0.2.20.tgz", + "integrity": "sha512-5qSUBYY1wyIMn7p0Vl9qqV4hMI69oJwZCIPUpBsTFWN2wlwn6RDugzdgCn+bLXVYh+Cxi8bJcZ1uumDgsoL+FA==", "dev": true, "dependencies": { "@jest/create-cache-key-function": "^27.4.2" @@ -2261,12 +2300,12 @@ } }, "node_modules/@types/jest": { - "version": "27.4.0", - "resolved": "https://registry.npmjs.org/@types/jest/-/jest-27.4.0.tgz", - "integrity": "sha512-gHl8XuC1RZ8H2j5sHv/JqsaxXkDDM9iDOgu0Wp8sjs4u/snb2PVehyWXJPr+ORA0RPpgw231mnutWI1+0hgjIQ==", + "version": "27.4.1", + "resolved": "https://registry.npmjs.org/@types/jest/-/jest-27.4.1.tgz", + "integrity": "sha512-23iPJADSmicDVrWk+HT58LMJtzLAnB2AgIzplQuq/bSrGaxCrlvRFjGbXmamnnk/mAmCdLStiGqggu28ocUyiw==", "dev": true, "dependencies": { - "jest-diff": "^27.0.0", + "jest-matcher-utils": "^27.0.0", "pretty-format": "^27.0.0" } }, @@ -2314,9 +2353,9 @@ "dev": true }, "node_modules/@types/node": { - "version": "17.0.18", - "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.18.tgz", - "integrity": "sha512-eKj4f/BsN/qcculZiRSujogjvp5O/k4lOW5m35NopjZM/QwLOR075a8pJW5hD+Rtdm2DaCVPENS6KtSQnUD6BA==" + "version": "17.0.21", + "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.21.tgz", + "integrity": "sha512-DBZCJbhII3r90XbQxI8Y9IjjiiOGlZ0Hr32omXIZvwwZ7p4DMMXGrKXVyPfuoBOri9XNtL0UK69jYIBIsRX3QQ==" }, "node_modules/@types/nodemailer": { "version": "6.4.4", @@ -2381,14 +2420,14 @@ "dev": true }, "node_modules/@typescript-eslint/eslint-plugin": { - "version": "5.12.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.12.0.tgz", - "integrity": "sha512-fwCMkDimwHVeIOKeBHiZhRUfJXU8n6xW1FL9diDxAyGAFvKcH4csy0v7twivOQdQdA0KC8TDr7GGRd3L4Lv0rQ==", + "version": "5.12.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.12.1.tgz", + "integrity": "sha512-M499lqa8rnNK7mUv74lSFFttuUsubIRdAbHcVaP93oFcKkEmHmLqy2n7jM9C8DVmFMYK61ExrZU6dLYhQZmUpw==", "dev": true, "dependencies": { - "@typescript-eslint/scope-manager": "5.12.0", - "@typescript-eslint/type-utils": "5.12.0", - "@typescript-eslint/utils": "5.12.0", + "@typescript-eslint/scope-manager": "5.12.1", + "@typescript-eslint/type-utils": "5.12.1", + "@typescript-eslint/utils": "5.12.1", "debug": "^4.3.2", "functional-red-black-tree": "^1.0.1", "ignore": "^5.1.8", @@ -2414,15 +2453,15 @@ } }, "node_modules/@typescript-eslint/parser": { - "version": "5.12.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.12.0.tgz", - "integrity": "sha512-MfSwg9JMBojMUoGjUmX+D2stoQj1CBYTCP0qnnVtu9A+YQXVKNtLjasYh+jozOcrb/wau8TCfWOkQTiOAruBog==", + "version": "5.12.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.12.1.tgz", + "integrity": "sha512-6LuVUbe7oSdHxUWoX/m40Ni8gsZMKCi31rlawBHt7VtW15iHzjbpj2WLiToG2758KjtCCiLRKZqfrOdl3cNKuw==", "dev": true, "peer": true, "dependencies": { - "@typescript-eslint/scope-manager": "5.12.0", - "@typescript-eslint/types": "5.12.0", - "@typescript-eslint/typescript-estree": "5.12.0", + "@typescript-eslint/scope-manager": "5.12.1", + "@typescript-eslint/types": "5.12.1", + "@typescript-eslint/typescript-estree": "5.12.1", "debug": "^4.3.2" }, "engines": { @@ -2442,13 +2481,13 @@ } }, "node_modules/@typescript-eslint/scope-manager": { - "version": "5.12.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.12.0.tgz", - "integrity": "sha512-GAMobtIJI8FGf1sLlUWNUm2IOkIjvn7laFWyRx7CLrv6nLBI7su+B7lbStqVlK5NdLvHRFiJo2HhiDF7Ki01WQ==", + "version": "5.12.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.12.1.tgz", + "integrity": "sha512-J0Wrh5xS6XNkd4TkOosxdpObzlYfXjAFIm9QxYLCPOcHVv1FyyFCPom66uIh8uBr0sZCrtS+n19tzufhwab8ZQ==", "dev": true, "dependencies": { - "@typescript-eslint/types": "5.12.0", - "@typescript-eslint/visitor-keys": "5.12.0" + "@typescript-eslint/types": "5.12.1", + "@typescript-eslint/visitor-keys": "5.12.1" }, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" @@ -2459,12 +2498,12 @@ } }, "node_modules/@typescript-eslint/type-utils": { - "version": "5.12.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.12.0.tgz", - "integrity": "sha512-9j9rli3zEBV+ae7rlbBOotJcI6zfc6SHFMdKI9M3Nc0sy458LJ79Os+TPWeBBL96J9/e36rdJOfCuyRSgFAA0Q==", + "version": "5.12.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.12.1.tgz", + "integrity": "sha512-Gh8feEhsNLeCz6aYqynh61Vsdy+tiNNkQtc+bN3IvQvRqHkXGUhYkUi+ePKzP0Mb42se7FDb+y2SypTbpbR/Sg==", "dev": true, "dependencies": { - "@typescript-eslint/utils": "5.12.0", + "@typescript-eslint/utils": "5.12.1", "debug": "^4.3.2", "tsutils": "^3.21.0" }, @@ -2485,9 +2524,9 @@ } }, "node_modules/@typescript-eslint/types": { - "version": "5.12.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.12.0.tgz", - "integrity": "sha512-JowqbwPf93nvf8fZn5XrPGFBdIK8+yx5UEGs2QFAYFI8IWYfrzz+6zqlurGr2ctShMaJxqwsqmra3WXWjH1nRQ==", + "version": "5.12.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.12.1.tgz", + "integrity": "sha512-hfcbq4qVOHV1YRdhkDldhV9NpmmAu2vp6wuFODL71Y0Ixak+FLeEU4rnPxgmZMnGreGEghlEucs9UZn5KOfHJA==", "dev": true, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" @@ -2498,13 +2537,13 @@ } }, "node_modules/@typescript-eslint/typescript-estree": { - "version": "5.12.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.12.0.tgz", - "integrity": "sha512-Dd9gVeOqt38QHR0BEA8oRaT65WYqPYbIc5tRFQPkfLquVEFPD1HAtbZT98TLBkEcCkvwDYOAvuSvAD9DnQhMfQ==", + "version": "5.12.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.12.1.tgz", + "integrity": "sha512-ahOdkIY9Mgbza7L9sIi205Pe1inCkZWAHE1TV1bpxlU4RZNPtXaDZfiiFWcL9jdxvW1hDYZJXrFm+vlMkXRbBw==", "dev": true, "dependencies": { - "@typescript-eslint/types": "5.12.0", - "@typescript-eslint/visitor-keys": "5.12.0", + "@typescript-eslint/types": "5.12.1", + "@typescript-eslint/visitor-keys": "5.12.1", "debug": "^4.3.2", "globby": "^11.0.4", "is-glob": "^4.0.3", @@ -2525,15 +2564,15 @@ } }, "node_modules/@typescript-eslint/utils": { - "version": "5.12.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.12.0.tgz", - "integrity": "sha512-k4J2WovnMPGI4PzKgDtQdNrCnmBHpMUFy21qjX2CoPdoBcSBIMvVBr9P2YDP8jOqZOeK3ThOL6VO/sy6jtnvzw==", + "version": "5.12.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.12.1.tgz", + "integrity": "sha512-Qq9FIuU0EVEsi8fS6pG+uurbhNTtoYr4fq8tKjBupsK5Bgbk2I32UGm0Sh+WOyjOPgo/5URbxxSNV6HYsxV4MQ==", "dev": true, "dependencies": { "@types/json-schema": "^7.0.9", - "@typescript-eslint/scope-manager": "5.12.0", - "@typescript-eslint/types": "5.12.0", - "@typescript-eslint/typescript-estree": "5.12.0", + "@typescript-eslint/scope-manager": "5.12.1", + "@typescript-eslint/types": "5.12.1", + "@typescript-eslint/typescript-estree": "5.12.1", "eslint-scope": "^5.1.1", "eslint-utils": "^3.0.0" }, @@ -2549,12 +2588,12 @@ } }, "node_modules/@typescript-eslint/visitor-keys": { - "version": "5.12.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.12.0.tgz", - "integrity": "sha512-cFwTlgnMV6TgezQynx2c/4/tx9Tufbuo9LPzmWqyRC3QC4qTGkAG1C6pBr0/4I10PAI/FlYunI3vJjIcu+ZHMg==", + "version": "5.12.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.12.1.tgz", + "integrity": "sha512-l1KSLfupuwrXx6wc0AuOmC7Ko5g14ZOQ86wJJqRbdLbXLK02pK/DPiDDqCc7BqqiiA04/eAA6ayL0bgOrAkH7A==", "dev": true, "dependencies": { - "@typescript-eslint/types": "5.12.0", + "@typescript-eslint/types": "5.12.1", "eslint-visitor-keys": "^3.0.0" }, "engines": { @@ -2923,9 +2962,9 @@ } }, "node_modules/avvio": { - "version": "7.2.2", - "resolved": "https://registry.npmjs.org/avvio/-/avvio-7.2.2.tgz", - "integrity": "sha512-XW2CMCmZaCmCCsIaJaLKxAzPwF37fXi1KGxNOvedOpeisLdmxZnblGc3hpHWYnlP+KOUxZsazh43WXNHgXpbqw==", + "version": "7.2.4", + "resolved": "https://registry.npmjs.org/avvio/-/avvio-7.2.4.tgz", + "integrity": "sha512-m9XMb/6E9P0lV4eiXNxfiJ/uFBW0KFpMrrB26c+ZJeRpYmc8JTOPy/7+lJrlbaqfrAArv9PmzOaFU6TKtKRLGA==", "dependencies": { "archy": "^1.0.0", "debug": "^4.0.0", @@ -4598,9 +4637,9 @@ } }, "node_modules/electron-to-chromium": { - "version": "1.4.71", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.71.tgz", - "integrity": "sha512-Hk61vXXKRb2cd3znPE9F+2pLWdIOmP7GjiTj45y6L3W/lO+hSnUSUhq+6lEaERWBdZOHbk2s3YV5c9xVl3boVw==", + "version": "1.4.73", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.73.tgz", + "integrity": "sha512-RlCffXkE/LliqfA5m29+dVDPB2r72y2D2egMMfIy3Le8ODrxjuZNVo4NIC2yPL01N4xb4nZQLwzi6Z5tGIGLnA==", "dev": true }, "node_modules/emittery": { @@ -4646,9 +4685,9 @@ } }, "node_modules/engine.io": { - "version": "6.1.2", - "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-6.1.2.tgz", - "integrity": "sha512-v/7eGHxPvO2AWsksyx2PUsQvBafuvqs0jJJQ0FdmJG1b9qIvgSbqDRGwNhfk2XHaTTbTXiC4quRE8Q9nRjsrQQ==", + "version": "6.1.3", + "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-6.1.3.tgz", + "integrity": "sha512-rqs60YwkvWTLLnfazqgZqLa/aKo+9cueVfEi/dZ8PyGyaf8TLOxj++4QMIgeG3Gn0AhrWiFXvghsoY9L9h25GA==", "dependencies": { "@types/cookie": "^0.4.1", "@types/cors": "^2.8.12", @@ -4658,7 +4697,7 @@ "cookie": "~0.4.1", "cors": "~2.8.5", "debug": "~4.3.1", - "engine.io-parser": "~5.0.0", + "engine.io-parser": "~5.0.3", "ws": "~8.2.3" }, "engines": { @@ -4906,12 +4945,12 @@ } }, "node_modules/eslint": { - "version": "8.9.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.9.0.tgz", - "integrity": "sha512-PB09IGwv4F4b0/atrbcMFboF/giawbBLVC7fyDamk5Wtey4Jh2K+rYaBhCAbUyEI4QzB1ly09Uglc9iCtFaG2Q==", + "version": "8.10.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.10.0.tgz", + "integrity": "sha512-tcI1D9lfVec+R4LE1mNDnzoJ/f71Kl/9Cv4nG47jOueCMBrCCKYXr4AUVS7go6mWYGFD4+EoN6+eXSrEbRzXVw==", "dev": true, "dependencies": { - "@eslint/eslintrc": "^1.1.0", + "@eslint/eslintrc": "^1.2.0", "@humanwhocodes/config-array": "^0.9.2", "ajv": "^6.10.0", "chalk": "^4.0.0", @@ -4958,21 +4997,19 @@ } }, "node_modules/eslint-config-conventions": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/eslint-config-conventions/-/eslint-config-conventions-1.0.2.tgz", - "integrity": "sha512-5/tQQg6LjQkIz88uMfBzK6xK6vgLmRNWP4bRaAMgEzAhQPfoAFmom9WGxG/VA5S4wsQ8kM9useP9vi/YSl86GQ==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/eslint-config-conventions/-/eslint-config-conventions-1.1.0.tgz", + "integrity": "sha512-y++k1iIB1kxbdNyETq2AMRiAs2OVkjLbesIp8Jm9svUrbzsqzPiZfW2Mn+7vAoTtCwRjd7B9UrzPT2alpKPK7Q==", "dev": true, "engines": { "node": ">=16.0.0", "npm": ">=8.0.0" }, "peerDependencies": { - "@typescript-eslint/eslint-plugin": "^5.12.0", "eslint": "^8.9.0", "eslint-plugin-import": "^2.25.4", "eslint-plugin-promise": "^6.0.0", - "eslint-plugin-unicorn": "^41.0.0", - "typescript": "^4.4.0" + "eslint-plugin-unicorn": "^41.0.0" } }, "node_modules/eslint-config-prettier": { @@ -5528,9 +5565,9 @@ "dev": true }, "node_modules/fast-redact": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/fast-redact/-/fast-redact-3.1.0.tgz", - "integrity": "sha512-dir8LOnvialLxiXDPESMDHGp82CHi6ZEYTVkcvdn5d7psdv9ZkkButXrOeXST4aqreIRR+N7CYlsrwFuorurVg==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/fast-redact/-/fast-redact-3.1.1.tgz", + "integrity": "sha512-odVmjC8x8jNeMZ3C+rPMESzXVSEU8tSWSHv9HFxP2mm89G/1WwqhrerJDQm9Zus8X6aoRgQDThKqptdNA6bt+A==", "engines": { "node": ">=6" } @@ -5563,9 +5600,9 @@ } }, "node_modules/fastify-cors": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/fastify-cors/-/fastify-cors-6.0.2.tgz", - "integrity": "sha512-sE0AOyzmj5hLLRRVgenjA6G2iOGX35/1S3QGYB9rr9TXelMZB3lFrXy4CzwYVOMiujJeMiLgO4J7eRm8sQSv8Q==", + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/fastify-cors/-/fastify-cors-6.0.3.tgz", + "integrity": "sha512-fMbXubKKyBHHCfSBtsCi3+7VyVRdhJQmGes5gM+eGKkRErCdm0NaYO0ozd31BQBL1ycoTIjbqOZhJo4RTF/Vlg==", "dependencies": { "fastify-plugin": "^3.0.0", "vary": "^1.1.2" @@ -6018,9 +6055,9 @@ ] }, "node_modules/fs-extra": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.0.0.tgz", - "integrity": "sha512-C5owb14u9eJwizKGdchcDUQeFtlSHHthBk8pbX9Vc1PFZrLombudjDnNns88aYslCyF6IY5SUw3Roz6xShcEIQ==", + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.0.1.tgz", + "integrity": "sha512-NbdoVMZso2Lsrn/QwLXOy6rm0ufY2zEOKCDzJR/0kBsb0E6qed0P3iYK+Ath3BfvXEeu4JhEtXLgILx5psUfag==", "dev": true, "dependencies": { "graceful-fs": "^4.2.0", @@ -9889,9 +9926,9 @@ } }, "node_modules/npm": { - "version": "8.5.1", - "resolved": "https://registry.npmjs.org/npm/-/npm-8.5.1.tgz", - "integrity": "sha512-zHrOHAatEPJ59o2JIPlhgc9LX9mb8xFrqu4kiiul4w1IGMTtKn2lqRiGIRKU0or69NSLXNmqbCP9bNJIr/wB6Q==", + "version": "8.5.2", + "resolved": "https://registry.npmjs.org/npm/-/npm-8.5.2.tgz", + "integrity": "sha512-fQRPOSrQfO3AG1JEOgScVrYhOfprZbhSKAjY4goESGPKMflWHxyQt8djo6EZhNjxCNIUAPtT75hkCN902SeYAw==", "bundleDependencies": [ "@isaacs/string-locale-compare", "@npmcli/arborist", @@ -10072,7 +10109,7 @@ "license": "ISC" }, "node_modules/npm/node_modules/@npmcli/arborist": { - "version": "4.3.1", + "version": "5.0.0", "dev": true, "inBundle": true, "license": "ISC", @@ -10080,12 +10117,12 @@ "@isaacs/string-locale-compare": "^1.1.0", "@npmcli/installed-package-contents": "^1.0.7", "@npmcli/map-workspaces": "^2.0.0", - "@npmcli/metavuln-calculator": "^2.0.0", + "@npmcli/metavuln-calculator": "^3.0.0", "@npmcli/move-file": "^1.1.0", "@npmcli/name-from-folder": "^1.0.1", "@npmcli/node-gyp": "^1.0.3", "@npmcli/package-json": "^1.0.1", - "@npmcli/run-script": "^2.0.0", + "@npmcli/run-script": "^3.0.0", "bin-links": "^3.0.0", "cacache": "^15.0.3", "common-ancestor-path": "^1.0.1", @@ -10093,13 +10130,15 @@ "json-stringify-nice": "^1.1.4", "mkdirp": "^1.0.4", "mkdirp-infer-owner": "^2.0.0", + "nopt": "^5.0.0", "npm-install-checks": "^4.0.0", - "npm-package-arg": "^8.1.5", - "npm-pick-manifest": "^6.1.0", - "npm-registry-fetch": "^12.0.1", - "pacote": "^12.0.2", + "npm-package-arg": "^9.0.0", + "npm-pick-manifest": "^7.0.0", + "npm-registry-fetch": "^13.0.0", + "npmlog": "^6.0.1", + "pacote": "^13.0.2", "parse-conflict-json": "^2.0.1", - "proc-log": "^1.0.0", + "proc-log": "^2.0.0", "promise-all-reject-late": "^1.0.0", "promise-call-limit": "^1.0.1", "read-package-json-fast": "^2.0.2", @@ -10127,7 +10166,7 @@ } }, "node_modules/npm/node_modules/@npmcli/config": { - "version": "3.0.0", + "version": "4.0.0", "dev": true, "inBundle": true, "license": "ISC", @@ -10136,8 +10175,9 @@ "ini": "^2.0.0", "mkdirp-infer-owner": "^2.0.0", "nopt": "^5.0.0", + "proc-log": "^2.0.0", "read-package-json-fast": "^2.0.3", - "semver": "^7.3.4", + "semver": "^7.3.5", "walk-up-path": "^1.0.0" }, "engines": { @@ -10170,19 +10210,32 @@ } }, "node_modules/npm/node_modules/@npmcli/git": { - "version": "2.1.0", + "version": "3.0.0", "dev": true, "inBundle": true, "license": "ISC", "dependencies": { "@npmcli/promise-spawn": "^1.3.2", - "lru-cache": "^6.0.0", + "lru-cache": "^7.3.1", "mkdirp": "^1.0.4", - "npm-pick-manifest": "^6.1.1", + "npm-pick-manifest": "^7.0.0", + "proc-log": "^2.0.0", "promise-inflight": "^1.0.1", "promise-retry": "^2.0.1", "semver": "^7.3.5", "which": "^2.0.2" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16" + } + }, + "node_modules/npm/node_modules/@npmcli/git/node_modules/lru-cache": { + "version": "7.3.1", + "dev": true, + "inBundle": true, + "license": "ISC", + "engines": { + "node": ">=12" } }, "node_modules/npm/node_modules/@npmcli/installed-package-contents": { @@ -10217,15 +10270,15 @@ } }, "node_modules/npm/node_modules/@npmcli/metavuln-calculator": { - "version": "2.0.0", + "version": "3.0.0", "dev": true, "inBundle": true, "license": "ISC", "dependencies": { - "cacache": "^15.0.5", + "cacache": "^15.3.0", "json-parse-even-better-errors": "^2.3.1", - "pacote": "^12.0.0", - "semver": "^7.3.2" + "pacote": "^13.0.1", + "semver": "^7.3.5" }, "engines": { "node": "^12.13.0 || ^14.15.0 || >=16" @@ -10275,15 +10328,18 @@ } }, "node_modules/npm/node_modules/@npmcli/run-script": { - "version": "2.0.0", + "version": "3.0.0", "dev": true, "inBundle": true, "license": "ISC", "dependencies": { - "@npmcli/node-gyp": "^1.0.2", + "@npmcli/node-gyp": "^1.0.3", "@npmcli/promise-spawn": "^1.3.2", - "node-gyp": "^8.2.0", - "read-package-json-fast": "^2.0.1" + "node-gyp": "^8.4.1", + "read-package-json-fast": "^2.0.3" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16" } }, "node_modules/npm/node_modules/@tootallnate/once": { @@ -10340,15 +10396,6 @@ "node": ">=8" } }, - "node_modules/npm/node_modules/ansi-regex": { - "version": "2.1.1", - "dev": true, - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/npm/node_modules/ansi-styles": { "version": "4.3.0", "dev": true, @@ -10552,29 +10599,6 @@ "node": ">=8" } }, - "node_modules/npm/node_modules/cli-columns/node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "dev": true, - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/npm/node_modules/cli-columns/node_modules/string-width": { - "version": "4.2.3", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/npm/node_modules/cli-columns/node_modules/strip-ansi": { "version": "6.0.1", "dev": true, @@ -10602,50 +10626,6 @@ "colors": "1.4.0" } }, - "node_modules/npm/node_modules/cli-table3/node_modules/ansi-regex": { - "version": "5.0.0", - "dev": true, - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/npm/node_modules/cli-table3/node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "dev": true, - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/npm/node_modules/cli-table3/node_modules/string-width": { - "version": "4.2.2", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/npm/node_modules/cli-table3/node_modules/strip-ansi": { - "version": "6.0.0", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "ansi-regex": "^5.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/npm/node_modules/clone": { "version": "1.0.4", "dev": true, @@ -10705,13 +10685,37 @@ } }, "node_modules/npm/node_modules/columnify": { - "version": "1.5.4", + "version": "1.6.0", "dev": true, "inBundle": true, "license": "MIT", "dependencies": { - "strip-ansi": "^3.0.0", + "strip-ansi": "^6.0.1", "wcwidth": "^1.0.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/npm/node_modules/columnify/node_modules/ansi-regex": { + "version": "5.0.1", + "dev": true, + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/npm/node_modules/columnify/node_modules/strip-ansi": { + "version": "6.0.1", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" } }, "node_modules/npm/node_modules/common-ancestor-path": { @@ -10897,29 +10901,6 @@ "node": ">=8" } }, - "node_modules/npm/node_modules/gauge/node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "dev": true, - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/npm/node_modules/gauge/node_modules/string-width": { - "version": "4.2.3", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/npm/node_modules/gauge/node_modules/strip-ansi": { "version": "6.0.1", "dev": true, @@ -11114,21 +11095,21 @@ } }, "node_modules/npm/node_modules/init-package-json": { - "version": "2.0.5", + "version": "3.0.0", "dev": true, "inBundle": true, "license": "ISC", "dependencies": { - "npm-package-arg": "^8.1.5", + "npm-package-arg": "^9.0.0", "promzard": "^0.3.0", - "read": "~1.0.1", + "read": "^1.0.7", "read-package-json": "^4.1.1", "semver": "^7.3.5", "validate-npm-package-license": "^3.0.4", "validate-npm-package-name": "^3.0.0" }, "engines": { - "node": ">=10" + "node": "^12.13.0 || ^14.15.0 || >=16" } }, "node_modules/npm/node_modules/ip": { @@ -11171,12 +11152,12 @@ } }, "node_modules/npm/node_modules/is-fullwidth-code-point": { - "version": "2.0.0", + "version": "3.0.0", "dev": true, "inBundle": true, "license": "MIT", "engines": { - "node": ">=4" + "node": ">=8" } }, "node_modules/npm/node_modules/is-lambda": { @@ -11234,22 +11215,22 @@ "license": "MIT" }, "node_modules/npm/node_modules/libnpmaccess": { - "version": "5.0.1", + "version": "6.0.0", "dev": true, "inBundle": true, "license": "ISC", "dependencies": { "aproba": "^2.0.0", "minipass": "^3.1.1", - "npm-package-arg": "^8.1.2", - "npm-registry-fetch": "^12.0.1" + "npm-package-arg": "^9.0.0", + "npm-registry-fetch": "^13.0.0" }, "engines": { "node": "^12.13.0 || ^14.15.0 || >=16" } }, "node_modules/npm/node_modules/libnpmdiff": { - "version": "3.0.0", + "version": "4.0.0", "dev": true, "inBundle": true, "license": "ISC", @@ -11259,8 +11240,8 @@ "binary-extensions": "^2.2.0", "diff": "^5.0.0", "minimatch": "^3.0.4", - "npm-package-arg": "^8.1.4", - "pacote": "^12.0.0", + "npm-package-arg": "^9.0.0", + "pacote": "^13.0.2", "tar": "^6.1.0" }, "engines": { @@ -11268,19 +11249,20 @@ } }, "node_modules/npm/node_modules/libnpmexec": { - "version": "3.0.3", + "version": "4.0.0", "dev": true, "inBundle": true, "license": "ISC", "dependencies": { - "@npmcli/arborist": "^4.0.0", + "@npmcli/arborist": "^5.0.0", "@npmcli/ci-detect": "^2.0.0", - "@npmcli/run-script": "^2.0.0", + "@npmcli/run-script": "^3.0.0", "chalk": "^4.1.0", "mkdirp-infer-owner": "^2.0.0", - "npm-package-arg": "^8.1.2", - "pacote": "^12.0.0", - "proc-log": "^1.0.0", + "npm-package-arg": "^9.0.0", + "npmlog": "^6.0.1", + "pacote": "^13.0.2", + "proc-log": "^2.0.0", "read": "^1.0.7", "read-package-json-fast": "^2.0.2", "walk-up-path": "^1.0.0" @@ -11290,66 +11272,66 @@ } }, "node_modules/npm/node_modules/libnpmfund": { - "version": "2.0.2", + "version": "3.0.0", "dev": true, "inBundle": true, "license": "ISC", "dependencies": { - "@npmcli/arborist": "^4.0.0" + "@npmcli/arborist": "^5.0.0" }, "engines": { "node": "^12.13.0 || ^14.15.0 || >=16" } }, "node_modules/npm/node_modules/libnpmhook": { - "version": "7.0.1", + "version": "8.0.0", "dev": true, "inBundle": true, "license": "ISC", "dependencies": { "aproba": "^2.0.0", - "npm-registry-fetch": "^12.0.1" + "npm-registry-fetch": "^13.0.0" }, "engines": { "node": "^12.13.0 || ^14.15.0 || >=16" } }, "node_modules/npm/node_modules/libnpmorg": { - "version": "3.0.1", + "version": "4.0.0", "dev": true, "inBundle": true, "license": "ISC", "dependencies": { "aproba": "^2.0.0", - "npm-registry-fetch": "^12.0.1" + "npm-registry-fetch": "^13.0.0" }, "engines": { "node": "^12.13.0 || ^14.15.0 || >=16" } }, "node_modules/npm/node_modules/libnpmpack": { - "version": "3.1.0", + "version": "4.0.0", "dev": true, "inBundle": true, "license": "ISC", "dependencies": { - "@npmcli/run-script": "^2.0.0", - "npm-package-arg": "^8.1.0", - "pacote": "^12.0.0" + "@npmcli/run-script": "^3.0.0", + "npm-package-arg": "^9.0.0", + "pacote": "^13.0.2" }, "engines": { "node": "^12.13.0 || ^14.15.0 || >=16" } }, "node_modules/npm/node_modules/libnpmpublish": { - "version": "5.0.1", + "version": "6.0.0", "dev": true, "inBundle": true, "license": "ISC", "dependencies": { "normalize-package-data": "^3.0.2", - "npm-package-arg": "^8.1.2", - "npm-registry-fetch": "^12.0.1", + "npm-package-arg": "^9.0.0", + "npm-registry-fetch": "^13.0.0", "semver": "^7.1.3", "ssri": "^8.0.1" }, @@ -11358,39 +11340,40 @@ } }, "node_modules/npm/node_modules/libnpmsearch": { - "version": "4.0.1", + "version": "5.0.0", "dev": true, "inBundle": true, "license": "ISC", "dependencies": { - "npm-registry-fetch": "^12.0.1" + "npm-registry-fetch": "^13.0.0" }, "engines": { "node": "^12.13.0 || ^14.15.0 || >=16" } }, "node_modules/npm/node_modules/libnpmteam": { - "version": "3.0.1", + "version": "4.0.0", "dev": true, "inBundle": true, "license": "ISC", "dependencies": { "aproba": "^2.0.0", - "npm-registry-fetch": "^12.0.1" + "npm-registry-fetch": "^13.0.0" }, "engines": { "node": "^12.13.0 || ^14.15.0 || >=16" } }, "node_modules/npm/node_modules/libnpmversion": { - "version": "2.0.2", + "version": "3.0.0", "dev": true, "inBundle": true, "license": "ISC", "dependencies": { - "@npmcli/git": "^2.0.7", - "@npmcli/run-script": "^2.0.0", + "@npmcli/git": "^3.0.0", + "@npmcli/run-script": "^3.0.0", "json-parse-even-better-errors": "^2.3.1", + "proc-log": "^2.0.0", "semver": "^7.3.5", "stringify-package": "^1.0.1" }, @@ -11749,17 +11732,17 @@ "license": "ISC" }, "node_modules/npm/node_modules/npm-package-arg": { - "version": "8.1.5", + "version": "9.0.0", "dev": true, "inBundle": true, "license": "ISC", "dependencies": { - "hosted-git-info": "^4.0.1", - "semver": "^7.3.4", + "hosted-git-info": "^4.1.0", + "semver": "^7.3.5", "validate-npm-package-name": "^3.0.0" }, "engines": { - "node": ">=10" + "node": "^12.13.0 || ^14.15.0 || >=16" } }, "node_modules/npm/node_modules/npm-packlist": { @@ -11781,41 +11764,46 @@ } }, "node_modules/npm/node_modules/npm-pick-manifest": { - "version": "6.1.1", + "version": "7.0.0", "dev": true, "inBundle": true, "license": "ISC", "dependencies": { "npm-install-checks": "^4.0.0", "npm-normalize-package-bin": "^1.0.1", - "npm-package-arg": "^8.1.2", - "semver": "^7.3.4" + "npm-package-arg": "^9.0.0", + "semver": "^7.3.5" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16" } }, "node_modules/npm/node_modules/npm-profile": { - "version": "6.0.0", + "version": "6.0.2", "dev": true, "inBundle": true, "license": "ISC", "dependencies": { - "npm-registry-fetch": "^12.0.0" + "npm-registry-fetch": "^13.0.0", + "proc-log": "^2.0.0" }, "engines": { "node": "^12.13.0 || ^14.15.0 || >=16" } }, "node_modules/npm/node_modules/npm-registry-fetch": { - "version": "12.0.2", + "version": "13.0.0", "dev": true, "inBundle": true, "license": "ISC", "dependencies": { - "make-fetch-happen": "^10.0.1", + "make-fetch-happen": "^10.0.2", "minipass": "^3.1.6", "minipass-fetch": "^1.4.1", "minipass-json-stream": "^1.0.1", "minizlib": "^2.1.2", - "npm-package-arg": "^8.1.5" + "npm-package-arg": "^9.0.0", + "proc-log": "^2.0.0" }, "engines": { "node": "^12.13.0 || ^14.15.0 || >=16" @@ -11876,30 +11864,32 @@ } }, "node_modules/npm/node_modules/pacote": { - "version": "12.0.3", + "version": "13.0.3", "dev": true, "inBundle": true, "license": "ISC", "dependencies": { - "@npmcli/git": "^2.1.0", - "@npmcli/installed-package-contents": "^1.0.6", + "@npmcli/git": "^3.0.0", + "@npmcli/installed-package-contents": "^1.0.7", "@npmcli/promise-spawn": "^1.2.0", - "@npmcli/run-script": "^2.0.0", - "cacache": "^15.0.5", + "@npmcli/run-script": "^3.0.0", + "cacache": "^15.3.0", "chownr": "^2.0.0", "fs-minipass": "^2.1.0", "infer-owner": "^1.0.4", - "minipass": "^3.1.3", - "mkdirp": "^1.0.3", - "npm-package-arg": "^8.0.1", + "minipass": "^3.1.6", + "mkdirp": "^1.0.4", + "npm-package-arg": "^9.0.0", "npm-packlist": "^3.0.0", - "npm-pick-manifest": "^6.0.0", - "npm-registry-fetch": "^12.0.0", + "npm-pick-manifest": "^7.0.0", + "npm-registry-fetch": "^13.0.0", + "proc-log": "^2.0.0", "promise-retry": "^2.0.1", - "read-package-json-fast": "^2.0.1", + "read-package-json": "^4.1.1", + "read-package-json-fast": "^2.0.3", "rimraf": "^3.0.2", "ssri": "^8.0.1", - "tar": "^6.1.0" + "tar": "^6.1.11" }, "bin": { "pacote": "lib/bin.js" @@ -11932,10 +11922,13 @@ } }, "node_modules/npm/node_modules/proc-log": { - "version": "1.0.0", + "version": "2.0.0", "dev": true, "inBundle": true, - "license": "ISC" + "license": "ISC", + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16" + } }, "node_modules/npm/node_modules/promise-all-reject-late": { "version": "1.0.1", @@ -12233,37 +12226,38 @@ } }, "node_modules/npm/node_modules/string-width": { - "version": "2.1.1", + "version": "4.2.3", "dev": true, "inBundle": true, "license": "MIT", "dependencies": { - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^4.0.0" + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" }, "engines": { - "node": ">=4" + "node": ">=8" } }, "node_modules/npm/node_modules/string-width/node_modules/ansi-regex": { - "version": "3.0.0", + "version": "5.0.1", "dev": true, "inBundle": true, "license": "MIT", "engines": { - "node": ">=4" + "node": ">=8" } }, "node_modules/npm/node_modules/string-width/node_modules/strip-ansi": { - "version": "4.0.0", + "version": "6.0.1", "dev": true, "inBundle": true, "license": "MIT", "dependencies": { - "ansi-regex": "^3.0.0" + "ansi-regex": "^5.0.1" }, "engines": { - "node": ">=4" + "node": ">=8" } }, "node_modules/npm/node_modules/stringify-package": { @@ -12272,18 +12266,6 @@ "inBundle": true, "license": "ISC" }, - "node_modules/npm/node_modules/strip-ansi": { - "version": "3.0.1", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "ansi-regex": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/npm/node_modules/supports-color": { "version": "7.2.0", "dev": true, @@ -12624,18 +12606,18 @@ } }, "node_modules/ora": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/ora/-/ora-6.0.1.tgz", - "integrity": "sha512-TDdKkKHdWE6jo/6pIa5U5AWcSVfpNRFJ8sdRJpioGNVPLAzZzHs/N+QhUfF7ZbyoC+rnDuNTKzeDJUbAza9g4g==", + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/ora/-/ora-6.1.0.tgz", + "integrity": "sha512-CxEP6845hLK+NHFWZ+LplGO4zfw4QSfxTlqMfvlJ988GoiUeZDMzCvqsZkFHv69sPICmJH1MDxZoQFOKXerAVw==", "dev": true, "dependencies": { "bl": "^5.0.0", - "chalk": "^4.1.2", + "chalk": "^5.0.0", "cli-cursor": "^4.0.0", - "cli-spinners": "^2.6.0", + "cli-spinners": "^2.6.1", "is-interactive": "^2.0.0", "is-unicode-supported": "^1.1.0", - "log-symbols": "^5.0.0", + "log-symbols": "^5.1.0", "strip-ansi": "^7.0.1", "wcwidth": "^1.0.1" }, @@ -12658,6 +12640,18 @@ "url": "https://github.com/chalk/ansi-regex?sponsor=1" } }, + "node_modules/ora/node_modules/chalk": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.0.0.tgz", + "integrity": "sha512-/duVOqst+luxCQRKEo4bNxinsOQtMP80ZYm7mMqzuh5PociNL0PvmHFvREJ9ueYL2TxlHjBcmLCdmocx9Vg+IQ==", + "dev": true, + "engines": { + "node": "^12.17.0 || ^14.13 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, "node_modules/ora/node_modules/cli-cursor": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-4.0.0.tgz", @@ -13326,13 +13320,13 @@ } }, "node_modules/prisma": { - "version": "3.9.2", - "resolved": "https://registry.npmjs.org/prisma/-/prisma-3.9.2.tgz", - "integrity": "sha512-i9eK6cexV74OgeWaH3+e6S07kvC9jEZTl6BqtBH398nlCU0tck7mE9dicY6YQd+euvMjjCtY89q4NgmaPnUsSg==", + "version": "3.10.0", + "resolved": "https://registry.npmjs.org/prisma/-/prisma-3.10.0.tgz", + "integrity": "sha512-dAld12vtwdz9Rz01nOjmnXe+vHana5PSog8t0XGgLemKsUVsaupYpr74AHaS3s78SaTS5s2HOghnJF+jn91ZrA==", "devOptional": true, "hasInstallScript": true, "dependencies": { - "@prisma/engines": "3.9.0-58.bcc2ff906db47790ee902e7bbc76d7ffb1893009" + "@prisma/engines": "3.10.0-50.73e60b76d394f8d37d8ebd1f8918c79029f0db86" }, "bin": { "prisma": "build/index.js", @@ -14700,9 +14694,9 @@ "integrity": "sha512-/q/8Q4Bl4ZKAPjj8WerIBJWALKkaPRfrvhfF8k/B23i4nzrlRj2/go1m90In7nG/3XDSbOo0+pu6RvCTM9RGMQ==" }, "node_modules/string-width": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.0.tgz", - "integrity": "sha512-7x54QnN21P+XL/v8SuNKvfgsUre6PXpN7mc77N3HlZv+f1SBRGmjxtOud2Z6FZ8DmdkD/IdjCaf9XXbnqmTZGQ==", + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", "dev": true, "dependencies": { "eastasianwidth": "^0.2.0", @@ -15331,9 +15325,9 @@ "dev": true }, "node_modules/uglify-js": { - "version": "3.15.1", - "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.15.1.tgz", - "integrity": "sha512-FAGKF12fWdkpvNJZENacOH0e/83eG6JyVQyanIJaBXCN1J11TUQv1T1/z8S+Z0CG0ZPk1nPcreF/c7lrTd0TEQ==", + "version": "3.15.2", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.15.2.tgz", + "integrity": "sha512-peeoTk3hSwYdoc9nrdiEJk+gx1ALCtTjdYuKSXMTDqq7n1W7dHPqWDdSi+BPL0ni2YMeHD7hKUSdbj3TZauY2A==", "dev": true, "optional": true, "bin": { @@ -15887,9 +15881,9 @@ } }, "node_modules/yargs/node_modules/yargs-parser": { - "version": "21.0.0", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.0.0.tgz", - "integrity": "sha512-z9kApYUOCwoeZ78rfRYYWdiU/iNL6mwwYlkkZfJoyMR1xps+NEBX5X7XmRpxkZHhXJ6+Ey00IwKxBBSW9FIjyA==", + "version": "21.0.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.0.1.tgz", + "integrity": "sha512-9BK1jFpLzJROCI5TzwZL/TU4gqjK5xiHV/RfWLOahrjAko/e4DJkRDZQXfvqAsiZzzYhgAzbgz6lg48jcm4GLg==", "dev": true, "engines": { "node": ">=12" @@ -16058,9 +16052,9 @@ } }, "@babel/helper-module-transforms": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.16.7.tgz", - "integrity": "sha512-gaqtLDxJEFCeQbYp9aLAefjhkKdjKcdh6DB7jniIGU3Pz52WAmP268zK0VgPz9hUNkMSYeH976K2/Y6yPadpng==", + "version": "7.17.6", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.17.6.tgz", + "integrity": "sha512-2ULmRdqoOMpdvkbT8jONrZML/XALfzxlb052bldftkicAUy8AxSCkD5trDPQcwHNmolcl7wP6ehNqMlyUw6AaA==", "dev": true, "requires": { "@babel/helper-environment-visitor": "^7.16.7", @@ -16069,8 +16063,8 @@ "@babel/helper-split-export-declaration": "^7.16.7", "@babel/helper-validator-identifier": "^7.16.7", "@babel/template": "^7.16.7", - "@babel/traverse": "^7.16.7", - "@babel/types": "^7.16.7" + "@babel/traverse": "^7.17.3", + "@babel/types": "^7.17.0" } }, "@babel/helper-plugin-utils": { @@ -16555,9 +16549,9 @@ } }, "@eslint/eslintrc": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.1.0.tgz", - "integrity": "sha512-C1DfL7XX4nPqGd6jcP01W9pVM1HYCuUkFk1432D7F0v3JSlUIeOYn9oCoi3eoLZ+iwBSb29BMFxxny0YrrEZqg==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.2.0.tgz", + "integrity": "sha512-igm9SjJHNEJRiUnecP/1R5T3wKLEJ7pL6e2P+GUSfCd0dGjPYYZve08uzw8L2J8foVHFz+NGu12JxRcU2gGo6w==", "dev": true, "requires": { "ajv": "^6.12.4", @@ -16596,9 +16590,9 @@ } }, "@humanwhocodes/config-array": { - "version": "0.9.3", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.9.3.tgz", - "integrity": "sha512-3xSMlXHh03hCcCmFc0rbKp3Ivt2PFEJnQUJDDMTJQ2wkECZWdq4GePs2ctc5H8zV+cHPaq8k2vU8mrQjA6iHdQ==", + "version": "0.9.5", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.9.5.tgz", + "integrity": "sha512-ObyMyWxZiCu/yTisA7uzx81s40xR2fD5Cg/2Kq7G02ajkNubJf6BopgDTmDyc3U7sXpNKM8cYOw7s7Tyr+DnCw==", "dev": true, "requires": { "@humanwhocodes/object-schema": "^1.2.1", @@ -17086,23 +17080,23 @@ } }, "@prisma/client": { - "version": "3.9.2", - "resolved": "https://registry.npmjs.org/@prisma/client/-/client-3.9.2.tgz", - "integrity": "sha512-VlEIYVMyfFZHbVBOlunPl47gmP/Z0zzPjPj8I7uKEIaABqrUy50ru3XS0aZd8GFvevVwt7p91xxkUjNjrWhKAQ==", + "version": "3.10.0", + "resolved": "https://registry.npmjs.org/@prisma/client/-/client-3.10.0.tgz", + "integrity": "sha512-6P4sV7WFuODSfSoSEzCH1qfmWMrCUBk1LIIuTbQf6m1LI/IOpLN4lnqGDmgiBGprEzuWobnGLfe9YsXLn0inrg==", "requires": { - "@prisma/engines-version": "3.9.0-58.bcc2ff906db47790ee902e7bbc76d7ffb1893009" + "@prisma/engines-version": "3.10.0-50.73e60b76d394f8d37d8ebd1f8918c79029f0db86" } }, "@prisma/engines": { - "version": "3.9.0-58.bcc2ff906db47790ee902e7bbc76d7ffb1893009", - "resolved": "https://registry.npmjs.org/@prisma/engines/-/engines-3.9.0-58.bcc2ff906db47790ee902e7bbc76d7ffb1893009.tgz", - "integrity": "sha512-qM+uJbkelB21bnK44gYE049YTHIjHysOuj0mj5U2gDGyNLfmiazlggzFPCgEjgme4U5YB2tYs6Z5Hq08Kl8pjA==", + "version": "3.10.0-50.73e60b76d394f8d37d8ebd1f8918c79029f0db86", + "resolved": "https://registry.npmjs.org/@prisma/engines/-/engines-3.10.0-50.73e60b76d394f8d37d8ebd1f8918c79029f0db86.tgz", + "integrity": "sha512-LjRssaWu9w2SrXitofnutRIyURI7l0veQYIALz7uY4shygM9nMcK3omXcObRm7TAcw3Z+9ytfK1B+ySOsOesxQ==", "devOptional": true }, "@prisma/engines-version": { - "version": "3.9.0-58.bcc2ff906db47790ee902e7bbc76d7ffb1893009", - "resolved": "https://registry.npmjs.org/@prisma/engines-version/-/engines-version-3.9.0-58.bcc2ff906db47790ee902e7bbc76d7ffb1893009.tgz", - "integrity": "sha512-5Dh+qTDhpPR66w6NNAnPs+/W/Qt4r1DSd+qhfPFcDThUK4uxoZKGlPb2IYQn5LL+18aIGnmteDf7BnVMmvBNSQ==" + "version": "3.10.0-50.73e60b76d394f8d37d8ebd1f8918c79029f0db86", + "resolved": "https://registry.npmjs.org/@prisma/engines-version/-/engines-version-3.10.0-50.73e60b76d394f8d37d8ebd1f8918c79029f0db86.tgz", + "integrity": "sha512-cVYs5gyQH/qyut24hUvDznCfPrWiNMKNfPb9WmEoiU6ihlkscIbCfkmuKTtspVLWRdl0LqjYEC7vfnPv17HWhw==" }, "@saithodev/semantic-release-backmerge": { "version": "2.1.1", @@ -17274,121 +17268,121 @@ } }, "@swc/core": { - "version": "1.2.143", - "resolved": "https://registry.npmjs.org/@swc/core/-/core-1.2.143.tgz", - "integrity": "sha512-kZ1OVaNS183b3nMZBDQMev/ULpF/iUcF4bwlx+Nz6GH7D9qGTTbhiN7xWkoCWjcCY1TF8Bt7z1+ddX6ibPSc8w==", + "version": "1.2.146", + "resolved": "https://registry.npmjs.org/@swc/core/-/core-1.2.146.tgz", + "integrity": "sha512-axIapm2mReT45ILuYxwe0xEWqtITj3dyfDIGIgdC8Tx7ss5vpXvr22UbDSUTRIS+nypFy6hViIR1RhXE1hXnig==", "dev": true, "requires": { - "@swc/core-android-arm-eabi": "1.2.143", - "@swc/core-android-arm64": "1.2.143", - "@swc/core-darwin-arm64": "1.2.143", - "@swc/core-darwin-x64": "1.2.143", - "@swc/core-freebsd-x64": "1.2.143", - "@swc/core-linux-arm-gnueabihf": "1.2.143", - "@swc/core-linux-arm64-gnu": "1.2.143", - "@swc/core-linux-arm64-musl": "1.2.143", - "@swc/core-linux-x64-gnu": "1.2.143", - "@swc/core-linux-x64-musl": "1.2.143", - "@swc/core-win32-arm64-msvc": "1.2.143", - "@swc/core-win32-ia32-msvc": "1.2.143", - "@swc/core-win32-x64-msvc": "1.2.143" + "@swc/core-android-arm-eabi": "1.2.146", + "@swc/core-android-arm64": "1.2.146", + "@swc/core-darwin-arm64": "1.2.146", + "@swc/core-darwin-x64": "1.2.146", + "@swc/core-freebsd-x64": "1.2.146", + "@swc/core-linux-arm-gnueabihf": "1.2.146", + "@swc/core-linux-arm64-gnu": "1.2.146", + "@swc/core-linux-arm64-musl": "1.2.146", + "@swc/core-linux-x64-gnu": "1.2.146", + "@swc/core-linux-x64-musl": "1.2.146", + "@swc/core-win32-arm64-msvc": "1.2.146", + "@swc/core-win32-ia32-msvc": "1.2.146", + "@swc/core-win32-x64-msvc": "1.2.146" } }, "@swc/core-android-arm-eabi": { - "version": "1.2.143", - "resolved": "https://registry.npmjs.org/@swc/core-android-arm-eabi/-/core-android-arm-eabi-1.2.143.tgz", - "integrity": "sha512-OyRhH2NfHRm8jgN6KxpEX5fBg2KaGdocPQgSWzhk9QSnn+juacBXg6lE9lQEb1nekb36XusE51GNiImOnZI9RQ==", + "version": "1.2.146", + "resolved": "https://registry.npmjs.org/@swc/core-android-arm-eabi/-/core-android-arm-eabi-1.2.146.tgz", + "integrity": "sha512-vRlxDksEDdprqfj9VACYUGyCJr/tYLetNjhjel46qmKoXU5uAib1WLWWgMB1Ur+oh8eCSTN8cnOblOziqfC1Rw==", "dev": true, "optional": true }, "@swc/core-android-arm64": { - "version": "1.2.143", - "resolved": "https://registry.npmjs.org/@swc/core-android-arm64/-/core-android-arm64-1.2.143.tgz", - "integrity": "sha512-hMnZcFkoI26n3QakazyNmuMpaIm/pyC1KJXvp49wTaFazbeG0OqxbWvzUIK3vDnXJPuNf1m9c0jXtvQaXbacvQ==", + "version": "1.2.146", + "resolved": "https://registry.npmjs.org/@swc/core-android-arm64/-/core-android-arm64-1.2.146.tgz", + "integrity": "sha512-YoJygRvjZ6IXvWstYZHGThEj1aWshzoMohX0i6WH5NIZhkzeF0UhRu/IZoS9VcQsd0WtDEMQe0G0wcrd/FToNg==", "dev": true, "optional": true }, "@swc/core-darwin-arm64": { - "version": "1.2.143", - "resolved": "https://registry.npmjs.org/@swc/core-darwin-arm64/-/core-darwin-arm64-1.2.143.tgz", - "integrity": "sha512-Mcd27MvxBCqNJ9HHEu2RH7lY0zcImSP1/3uivJ4eiiAE7WSUdrs9flhryZ7AlOfs0DR7b4fpjJgK0tZyg9K9Yw==", + "version": "1.2.146", + "resolved": "https://registry.npmjs.org/@swc/core-darwin-arm64/-/core-darwin-arm64-1.2.146.tgz", + "integrity": "sha512-ftAyhczQHSUQo1Mox/VyZ3YL9KtG0LgOFUUUuLD3Pb9zKQB20Jc/Dfnh/bFktemVG8XiH0rOyR9yEI2EANHuEA==", "dev": true, "optional": true }, "@swc/core-darwin-x64": { - "version": "1.2.143", - "resolved": "https://registry.npmjs.org/@swc/core-darwin-x64/-/core-darwin-x64-1.2.143.tgz", - "integrity": "sha512-KV8147NuOqU6wCliAF+PmpbUecwUn0GynOUjb44kMbwCsYeH/Pm5FewGvyW9Dr7rnpnoT11pOUAJlcRzRfXrDA==", + "version": "1.2.146", + "resolved": "https://registry.npmjs.org/@swc/core-darwin-x64/-/core-darwin-x64-1.2.146.tgz", + "integrity": "sha512-mYRN/WTS7TfYt3jqJYghcrpAW7zkpjdeEx9Rot8rmUEmk97luh9Bcwqafzjb9ndoG1mAiaTQcqvs/QqT2efS5Q==", "dev": true, "optional": true }, "@swc/core-freebsd-x64": { - "version": "1.2.143", - "resolved": "https://registry.npmjs.org/@swc/core-freebsd-x64/-/core-freebsd-x64-1.2.143.tgz", - "integrity": "sha512-SU3hOtPqwaCxTO8jajEaNMO8aU0/5JduuRBbv843UzCz9S2on+dTYNkm94TsBxhX+JYN+T9yGi/tynoTjKj1QA==", + "version": "1.2.146", + "resolved": "https://registry.npmjs.org/@swc/core-freebsd-x64/-/core-freebsd-x64-1.2.146.tgz", + "integrity": "sha512-eYU5g7p/dY98+hvg3VJtwiX+btRWnq+WO4y4M+X1nguqghvuTv6jtVLeHDNr8FEhc+FMSJPYKO321ZVa0xCKXw==", "dev": true, "optional": true }, "@swc/core-linux-arm-gnueabihf": { - "version": "1.2.143", - "resolved": "https://registry.npmjs.org/@swc/core-linux-arm-gnueabihf/-/core-linux-arm-gnueabihf-1.2.143.tgz", - "integrity": "sha512-ZGfb0Fz2jQqrRv3gg0gdzQfkZbqTAC9ac03fXx0KiNFgkAjnWNm0JYRQe0sxa1L5wBml2Sv4aAFIN1BHi6roVA==", + "version": "1.2.146", + "resolved": "https://registry.npmjs.org/@swc/core-linux-arm-gnueabihf/-/core-linux-arm-gnueabihf-1.2.146.tgz", + "integrity": "sha512-ahKwlP9b41HUlwY+0eRJjgG4yJZN+uT16iBB2X7VedipmRO0aOOaP8xLReDjn4Z13DL14iAPC6Jnxiaw5rl8LQ==", "dev": true, "optional": true }, "@swc/core-linux-arm64-gnu": { - "version": "1.2.143", - "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-gnu/-/core-linux-arm64-gnu-1.2.143.tgz", - "integrity": "sha512-roLB+QYf7omusDTNfqsAuFWMyeRjXi2Wp1abNh++7YZVhkZ57q1tUNJiqw6KJhaSd5KSQGpBygarDRvL70ZZ4Q==", + "version": "1.2.146", + "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-gnu/-/core-linux-arm64-gnu-1.2.146.tgz", + "integrity": "sha512-S/0EJI8BWBQtsyIuYwVg+Gq03NlGl/xWOJgwLJss5+DawvxK8YZFteczw7M/bN/E5D2TqZRyybLM6baQozgDAg==", "dev": true, "optional": true }, "@swc/core-linux-arm64-musl": { - "version": "1.2.143", - "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-musl/-/core-linux-arm64-musl-1.2.143.tgz", - "integrity": "sha512-66qRHVh2F4Z0b6G8n9CEKuKwYVIzfTlNHixwoqCgdCbHT5n1lUiWigDel1psCDbrD/p9nWTU0lfVtbqmKJWnPw==", + "version": "1.2.146", + "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-musl/-/core-linux-arm64-musl-1.2.146.tgz", + "integrity": "sha512-tOHcanuqgniMwUWMwjA+zr/hZyVn931l8DiIi3Mthyplp/PDY68PVAUJ8miJd4C5XDPcYfPOe5kRyXsFrdZzhw==", "dev": true, "optional": true }, "@swc/core-linux-x64-gnu": { - "version": "1.2.143", - "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.2.143.tgz", - "integrity": "sha512-FSn9E+uWSyLQtHFpJcj+jNU+NPxrwOMlB+XUObfRcZwRzV6W0KeGLwnwvuhByYmGE7ujvEGCEQpLP95ER88TzQ==", + "version": "1.2.146", + "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.2.146.tgz", + "integrity": "sha512-w9jHnFe1XLYfQYWkaJwKgmtb/HKsgyFy0sCQpVjgDq/+ds8PPyACthDINpiEMsAOFN+IfE59HDn4A2gN3qyVgg==", "dev": true, "optional": true }, "@swc/core-linux-x64-musl": { - "version": "1.2.143", - "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.2.143.tgz", - "integrity": "sha512-yCD0LkqUVTLz07MD1m5gajfdOobIqUdQ8E0ZarkcCqvd6eLygXb7U2fn0pZs1eadOqxLSjEjig1i2bCx655Z5w==", + "version": "1.2.146", + "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.2.146.tgz", + "integrity": "sha512-iwKiHvV8p48/82+eJRCy/WcnAZBOFr2ZJ5VLtRuV+sz0mkWjoimnLZ8SEshoru9PVoKF7hfG7AMqKaVOUjSJFg==", "dev": true, "optional": true }, "@swc/core-win32-arm64-msvc": { - "version": "1.2.143", - "resolved": "https://registry.npmjs.org/@swc/core-win32-arm64-msvc/-/core-win32-arm64-msvc-1.2.143.tgz", - "integrity": "sha512-ehdvirsmL5yJ3J5HUcZD48VBFFiINX61FM5NTfRQgZgqGTyZo88iNTHsBmQXaEtp25y9xr6xXtKXeRGIBpuszg==", + "version": "1.2.146", + "resolved": "https://registry.npmjs.org/@swc/core-win32-arm64-msvc/-/core-win32-arm64-msvc-1.2.146.tgz", + "integrity": "sha512-n21riIEGTPim19Y0mrBIDVZfOrYdfd2W8QEgbiG/f+kcOlWckvyh9ZKexd6D8QpHe73C4lOX1RrmH3DgnPGhqA==", "dev": true, "optional": true }, "@swc/core-win32-ia32-msvc": { - "version": "1.2.143", - "resolved": "https://registry.npmjs.org/@swc/core-win32-ia32-msvc/-/core-win32-ia32-msvc-1.2.143.tgz", - "integrity": "sha512-ZWENEbRo9Jbqm/3ezLGotYN7siIEYC5PoJQBi+P/Fg42xm7bUpewIbbGmizOMN0d0+OWVc2V1IFg9bbA0oZbpg==", + "version": "1.2.146", + "resolved": "https://registry.npmjs.org/@swc/core-win32-ia32-msvc/-/core-win32-ia32-msvc-1.2.146.tgz", + "integrity": "sha512-5b99VzxvTqTQCZDmpKrGevUc9SK0QBiGZG4Oeh5CnSJyx8SZU0A3R7rbMoSR5/raP9OA/0ZvlXefUDXIsKNadA==", "dev": true, "optional": true }, "@swc/core-win32-x64-msvc": { - "version": "1.2.143", - "resolved": "https://registry.npmjs.org/@swc/core-win32-x64-msvc/-/core-win32-x64-msvc-1.2.143.tgz", - "integrity": "sha512-IBJ4DLOtMOAzW1+fFkdoj0e85l+CLj+Zn3jjUtdlYKroEunA3xNGci5+Ak/NRvt4lnlPlyVyw+2JXsfpnV2FCA==", + "version": "1.2.146", + "resolved": "https://registry.npmjs.org/@swc/core-win32-x64-msvc/-/core-win32-x64-msvc-1.2.146.tgz", + "integrity": "sha512-P45vAh0hR9dISIceSv6MkypjT0WduLWB4U8LPoCneeAw7mA1U7liS0Uu1PeiafxQVMWg8SNyIJFDcSg/haLJgg==", "dev": true, "optional": true }, "@swc/jest": { - "version": "0.2.17", - "resolved": "https://registry.npmjs.org/@swc/jest/-/jest-0.2.17.tgz", - "integrity": "sha512-n/g989+O8xxMcTZnP0phDrrgezGZBQBf7cX4QuzEsn07QkWbqmMsfaCxdF0kzajXublXWJ8yk5vRe3VNk1tczA==", + "version": "0.2.20", + "resolved": "https://registry.npmjs.org/@swc/jest/-/jest-0.2.20.tgz", + "integrity": "sha512-5qSUBYY1wyIMn7p0Vl9qqV4hMI69oJwZCIPUpBsTFWN2wlwn6RDugzdgCn+bLXVYh+Cxi8bJcZ1uumDgsoL+FA==", "dev": true, "requires": { "@jest/create-cache-key-function": "^27.4.2" @@ -17585,12 +17579,12 @@ } }, "@types/jest": { - "version": "27.4.0", - "resolved": "https://registry.npmjs.org/@types/jest/-/jest-27.4.0.tgz", - "integrity": "sha512-gHl8XuC1RZ8H2j5sHv/JqsaxXkDDM9iDOgu0Wp8sjs4u/snb2PVehyWXJPr+ORA0RPpgw231mnutWI1+0hgjIQ==", + "version": "27.4.1", + "resolved": "https://registry.npmjs.org/@types/jest/-/jest-27.4.1.tgz", + "integrity": "sha512-23iPJADSmicDVrWk+HT58LMJtzLAnB2AgIzplQuq/bSrGaxCrlvRFjGbXmamnnk/mAmCdLStiGqggu28ocUyiw==", "dev": true, "requires": { - "jest-diff": "^27.0.0", + "jest-matcher-utils": "^27.0.0", "pretty-format": "^27.0.0" } }, @@ -17638,9 +17632,9 @@ "dev": true }, "@types/node": { - "version": "17.0.18", - "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.18.tgz", - "integrity": "sha512-eKj4f/BsN/qcculZiRSujogjvp5O/k4lOW5m35NopjZM/QwLOR075a8pJW5hD+Rtdm2DaCVPENS6KtSQnUD6BA==" + "version": "17.0.21", + "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.21.tgz", + "integrity": "sha512-DBZCJbhII3r90XbQxI8Y9IjjiiOGlZ0Hr32omXIZvwwZ7p4DMMXGrKXVyPfuoBOri9XNtL0UK69jYIBIsRX3QQ==" }, "@types/nodemailer": { "version": "6.4.4", @@ -17705,14 +17699,14 @@ "dev": true }, "@typescript-eslint/eslint-plugin": { - "version": "5.12.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.12.0.tgz", - "integrity": "sha512-fwCMkDimwHVeIOKeBHiZhRUfJXU8n6xW1FL9diDxAyGAFvKcH4csy0v7twivOQdQdA0KC8TDr7GGRd3L4Lv0rQ==", + "version": "5.12.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.12.1.tgz", + "integrity": "sha512-M499lqa8rnNK7mUv74lSFFttuUsubIRdAbHcVaP93oFcKkEmHmLqy2n7jM9C8DVmFMYK61ExrZU6dLYhQZmUpw==", "dev": true, "requires": { - "@typescript-eslint/scope-manager": "5.12.0", - "@typescript-eslint/type-utils": "5.12.0", - "@typescript-eslint/utils": "5.12.0", + "@typescript-eslint/scope-manager": "5.12.1", + "@typescript-eslint/type-utils": "5.12.1", + "@typescript-eslint/utils": "5.12.1", "debug": "^4.3.2", "functional-red-black-tree": "^1.0.1", "ignore": "^5.1.8", @@ -17722,53 +17716,53 @@ } }, "@typescript-eslint/parser": { - "version": "5.12.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.12.0.tgz", - "integrity": "sha512-MfSwg9JMBojMUoGjUmX+D2stoQj1CBYTCP0qnnVtu9A+YQXVKNtLjasYh+jozOcrb/wau8TCfWOkQTiOAruBog==", + "version": "5.12.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.12.1.tgz", + "integrity": "sha512-6LuVUbe7oSdHxUWoX/m40Ni8gsZMKCi31rlawBHt7VtW15iHzjbpj2WLiToG2758KjtCCiLRKZqfrOdl3cNKuw==", "dev": true, "peer": true, "requires": { - "@typescript-eslint/scope-manager": "5.12.0", - "@typescript-eslint/types": "5.12.0", - "@typescript-eslint/typescript-estree": "5.12.0", + "@typescript-eslint/scope-manager": "5.12.1", + "@typescript-eslint/types": "5.12.1", + "@typescript-eslint/typescript-estree": "5.12.1", "debug": "^4.3.2" } }, "@typescript-eslint/scope-manager": { - "version": "5.12.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.12.0.tgz", - "integrity": "sha512-GAMobtIJI8FGf1sLlUWNUm2IOkIjvn7laFWyRx7CLrv6nLBI7su+B7lbStqVlK5NdLvHRFiJo2HhiDF7Ki01WQ==", + "version": "5.12.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.12.1.tgz", + "integrity": "sha512-J0Wrh5xS6XNkd4TkOosxdpObzlYfXjAFIm9QxYLCPOcHVv1FyyFCPom66uIh8uBr0sZCrtS+n19tzufhwab8ZQ==", "dev": true, "requires": { - "@typescript-eslint/types": "5.12.0", - "@typescript-eslint/visitor-keys": "5.12.0" + "@typescript-eslint/types": "5.12.1", + "@typescript-eslint/visitor-keys": "5.12.1" } }, "@typescript-eslint/type-utils": { - "version": "5.12.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.12.0.tgz", - "integrity": "sha512-9j9rli3zEBV+ae7rlbBOotJcI6zfc6SHFMdKI9M3Nc0sy458LJ79Os+TPWeBBL96J9/e36rdJOfCuyRSgFAA0Q==", + "version": "5.12.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.12.1.tgz", + "integrity": "sha512-Gh8feEhsNLeCz6aYqynh61Vsdy+tiNNkQtc+bN3IvQvRqHkXGUhYkUi+ePKzP0Mb42se7FDb+y2SypTbpbR/Sg==", "dev": true, "requires": { - "@typescript-eslint/utils": "5.12.0", + "@typescript-eslint/utils": "5.12.1", "debug": "^4.3.2", "tsutils": "^3.21.0" } }, "@typescript-eslint/types": { - "version": "5.12.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.12.0.tgz", - "integrity": "sha512-JowqbwPf93nvf8fZn5XrPGFBdIK8+yx5UEGs2QFAYFI8IWYfrzz+6zqlurGr2ctShMaJxqwsqmra3WXWjH1nRQ==", + "version": "5.12.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.12.1.tgz", + "integrity": "sha512-hfcbq4qVOHV1YRdhkDldhV9NpmmAu2vp6wuFODL71Y0Ixak+FLeEU4rnPxgmZMnGreGEghlEucs9UZn5KOfHJA==", "dev": true }, "@typescript-eslint/typescript-estree": { - "version": "5.12.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.12.0.tgz", - "integrity": "sha512-Dd9gVeOqt38QHR0BEA8oRaT65WYqPYbIc5tRFQPkfLquVEFPD1HAtbZT98TLBkEcCkvwDYOAvuSvAD9DnQhMfQ==", + "version": "5.12.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.12.1.tgz", + "integrity": "sha512-ahOdkIY9Mgbza7L9sIi205Pe1inCkZWAHE1TV1bpxlU4RZNPtXaDZfiiFWcL9jdxvW1hDYZJXrFm+vlMkXRbBw==", "dev": true, "requires": { - "@typescript-eslint/types": "5.12.0", - "@typescript-eslint/visitor-keys": "5.12.0", + "@typescript-eslint/types": "5.12.1", + "@typescript-eslint/visitor-keys": "5.12.1", "debug": "^4.3.2", "globby": "^11.0.4", "is-glob": "^4.0.3", @@ -17777,26 +17771,26 @@ } }, "@typescript-eslint/utils": { - "version": "5.12.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.12.0.tgz", - "integrity": "sha512-k4J2WovnMPGI4PzKgDtQdNrCnmBHpMUFy21qjX2CoPdoBcSBIMvVBr9P2YDP8jOqZOeK3ThOL6VO/sy6jtnvzw==", + "version": "5.12.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.12.1.tgz", + "integrity": "sha512-Qq9FIuU0EVEsi8fS6pG+uurbhNTtoYr4fq8tKjBupsK5Bgbk2I32UGm0Sh+WOyjOPgo/5URbxxSNV6HYsxV4MQ==", "dev": true, "requires": { "@types/json-schema": "^7.0.9", - "@typescript-eslint/scope-manager": "5.12.0", - "@typescript-eslint/types": "5.12.0", - "@typescript-eslint/typescript-estree": "5.12.0", + "@typescript-eslint/scope-manager": "5.12.1", + "@typescript-eslint/types": "5.12.1", + "@typescript-eslint/typescript-estree": "5.12.1", "eslint-scope": "^5.1.1", "eslint-utils": "^3.0.0" } }, "@typescript-eslint/visitor-keys": { - "version": "5.12.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.12.0.tgz", - "integrity": "sha512-cFwTlgnMV6TgezQynx2c/4/tx9Tufbuo9LPzmWqyRC3QC4qTGkAG1C6pBr0/4I10PAI/FlYunI3vJjIcu+ZHMg==", + "version": "5.12.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.12.1.tgz", + "integrity": "sha512-l1KSLfupuwrXx6wc0AuOmC7Ko5g14ZOQ86wJJqRbdLbXLK02pK/DPiDDqCc7BqqiiA04/eAA6ayL0bgOrAkH7A==", "dev": true, "requires": { - "@typescript-eslint/types": "5.12.0", + "@typescript-eslint/types": "5.12.1", "eslint-visitor-keys": "^3.0.0" } }, @@ -18074,9 +18068,9 @@ "integrity": "sha512-kNOjDqAh7px0XWNI+4QbzoiR/nTkHAWNud2uvnJquD1/x5a7EQZMJT0AczqK0Qn67oY/TTQ1LbUKajZpp3I9tQ==" }, "avvio": { - "version": "7.2.2", - "resolved": "https://registry.npmjs.org/avvio/-/avvio-7.2.2.tgz", - "integrity": "sha512-XW2CMCmZaCmCCsIaJaLKxAzPwF37fXi1KGxNOvedOpeisLdmxZnblGc3hpHWYnlP+KOUxZsazh43WXNHgXpbqw==", + "version": "7.2.4", + "resolved": "https://registry.npmjs.org/avvio/-/avvio-7.2.4.tgz", + "integrity": "sha512-m9XMb/6E9P0lV4eiXNxfiJ/uFBW0KFpMrrB26c+ZJeRpYmc8JTOPy/7+lJrlbaqfrAArv9PmzOaFU6TKtKRLGA==", "requires": { "archy": "^1.0.0", "debug": "^4.0.0", @@ -19369,9 +19363,9 @@ } }, "electron-to-chromium": { - "version": "1.4.71", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.71.tgz", - "integrity": "sha512-Hk61vXXKRb2cd3znPE9F+2pLWdIOmP7GjiTj45y6L3W/lO+hSnUSUhq+6lEaERWBdZOHbk2s3YV5c9xVl3boVw==", + "version": "1.4.73", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.73.tgz", + "integrity": "sha512-RlCffXkE/LliqfA5m29+dVDPB2r72y2D2egMMfIy3Le8ODrxjuZNVo4NIC2yPL01N4xb4nZQLwzi6Z5tGIGLnA==", "dev": true }, "emittery": { @@ -19405,9 +19399,9 @@ } }, "engine.io": { - "version": "6.1.2", - "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-6.1.2.tgz", - "integrity": "sha512-v/7eGHxPvO2AWsksyx2PUsQvBafuvqs0jJJQ0FdmJG1b9qIvgSbqDRGwNhfk2XHaTTbTXiC4quRE8Q9nRjsrQQ==", + "version": "6.1.3", + "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-6.1.3.tgz", + "integrity": "sha512-rqs60YwkvWTLLnfazqgZqLa/aKo+9cueVfEi/dZ8PyGyaf8TLOxj++4QMIgeG3Gn0AhrWiFXvghsoY9L9h25GA==", "requires": { "@types/cookie": "^0.4.1", "@types/cors": "^2.8.12", @@ -19417,7 +19411,7 @@ "cookie": "~0.4.1", "cors": "~2.8.5", "debug": "~4.3.1", - "engine.io-parser": "~5.0.0", + "engine.io-parser": "~5.0.3", "ws": "~8.2.3" }, "dependencies": { @@ -19592,12 +19586,12 @@ } }, "eslint": { - "version": "8.9.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.9.0.tgz", - "integrity": "sha512-PB09IGwv4F4b0/atrbcMFboF/giawbBLVC7fyDamk5Wtey4Jh2K+rYaBhCAbUyEI4QzB1ly09Uglc9iCtFaG2Q==", + "version": "8.10.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.10.0.tgz", + "integrity": "sha512-tcI1D9lfVec+R4LE1mNDnzoJ/f71Kl/9Cv4nG47jOueCMBrCCKYXr4AUVS7go6mWYGFD4+EoN6+eXSrEbRzXVw==", "dev": true, "requires": { - "@eslint/eslintrc": "^1.1.0", + "@eslint/eslintrc": "^1.2.0", "@humanwhocodes/config-array": "^0.9.2", "ajv": "^6.10.0", "chalk": "^4.0.0", @@ -19653,9 +19647,9 @@ } }, "eslint-config-conventions": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/eslint-config-conventions/-/eslint-config-conventions-1.0.2.tgz", - "integrity": "sha512-5/tQQg6LjQkIz88uMfBzK6xK6vgLmRNWP4bRaAMgEzAhQPfoAFmom9WGxG/VA5S4wsQ8kM9useP9vi/YSl86GQ==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/eslint-config-conventions/-/eslint-config-conventions-1.1.0.tgz", + "integrity": "sha512-y++k1iIB1kxbdNyETq2AMRiAs2OVkjLbesIp8Jm9svUrbzsqzPiZfW2Mn+7vAoTtCwRjd7B9UrzPT2alpKPK7Q==", "dev": true, "requires": {} }, @@ -20067,9 +20061,9 @@ "dev": true }, "fast-redact": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/fast-redact/-/fast-redact-3.1.0.tgz", - "integrity": "sha512-dir8LOnvialLxiXDPESMDHGp82CHi6ZEYTVkcvdn5d7psdv9ZkkButXrOeXST4aqreIRR+N7CYlsrwFuorurVg==" + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/fast-redact/-/fast-redact-3.1.1.tgz", + "integrity": "sha512-odVmjC8x8jNeMZ3C+rPMESzXVSEU8tSWSHv9HFxP2mm89G/1WwqhrerJDQm9Zus8X6aoRgQDThKqptdNA6bt+A==" }, "fast-safe-stringify": { "version": "2.1.1", @@ -20099,9 +20093,9 @@ } }, "fastify-cors": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/fastify-cors/-/fastify-cors-6.0.2.tgz", - "integrity": "sha512-sE0AOyzmj5hLLRRVgenjA6G2iOGX35/1S3QGYB9rr9TXelMZB3lFrXy4CzwYVOMiujJeMiLgO4J7eRm8sQSv8Q==", + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/fastify-cors/-/fastify-cors-6.0.3.tgz", + "integrity": "sha512-fMbXubKKyBHHCfSBtsCi3+7VyVRdhJQmGes5gM+eGKkRErCdm0NaYO0ozd31BQBL1ycoTIjbqOZhJo4RTF/Vlg==", "requires": { "fastify-plugin": "^3.0.0", "vary": "^1.1.2" @@ -20465,9 +20459,9 @@ "dev": true }, "fs-extra": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.0.0.tgz", - "integrity": "sha512-C5owb14u9eJwizKGdchcDUQeFtlSHHthBk8pbX9Vc1PFZrLombudjDnNns88aYslCyF6IY5SUw3Roz6xShcEIQ==", + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.0.1.tgz", + "integrity": "sha512-NbdoVMZso2Lsrn/QwLXOy6rm0ufY2zEOKCDzJR/0kBsb0E6qed0P3iYK+Ath3BfvXEeu4JhEtXLgILx5psUfag==", "dev": true, "requires": { "graceful-fs": "^4.2.0", @@ -23371,9 +23365,9 @@ "dev": true }, "npm": { - "version": "8.5.1", - "resolved": "https://registry.npmjs.org/npm/-/npm-8.5.1.tgz", - "integrity": "sha512-zHrOHAatEPJ59o2JIPlhgc9LX9mb8xFrqu4kiiul4w1IGMTtKn2lqRiGIRKU0or69NSLXNmqbCP9bNJIr/wB6Q==", + "version": "8.5.2", + "resolved": "https://registry.npmjs.org/npm/-/npm-8.5.2.tgz", + "integrity": "sha512-fQRPOSrQfO3AG1JEOgScVrYhOfprZbhSKAjY4goESGPKMflWHxyQt8djo6EZhNjxCNIUAPtT75hkCN902SeYAw==", "dev": true, "requires": { "@isaacs/string-locale-compare": "*", @@ -23460,19 +23454,19 @@ "dev": true }, "@npmcli/arborist": { - "version": "4.3.1", + "version": "5.0.0", "bundled": true, "dev": true, "requires": { "@isaacs/string-locale-compare": "^1.1.0", "@npmcli/installed-package-contents": "^1.0.7", "@npmcli/map-workspaces": "^2.0.0", - "@npmcli/metavuln-calculator": "^2.0.0", + "@npmcli/metavuln-calculator": "^3.0.0", "@npmcli/move-file": "^1.1.0", "@npmcli/name-from-folder": "^1.0.1", "@npmcli/node-gyp": "^1.0.3", "@npmcli/package-json": "^1.0.1", - "@npmcli/run-script": "^2.0.0", + "@npmcli/run-script": "^3.0.0", "bin-links": "^3.0.0", "cacache": "^15.0.3", "common-ancestor-path": "^1.0.1", @@ -23480,13 +23474,15 @@ "json-stringify-nice": "^1.1.4", "mkdirp": "^1.0.4", "mkdirp-infer-owner": "^2.0.0", + "nopt": "^5.0.0", "npm-install-checks": "^4.0.0", - "npm-package-arg": "^8.1.5", - "npm-pick-manifest": "^6.1.0", - "npm-registry-fetch": "^12.0.1", - "pacote": "^12.0.2", + "npm-package-arg": "^9.0.0", + "npm-pick-manifest": "^7.0.0", + "npm-registry-fetch": "^13.0.0", + "npmlog": "^6.0.1", + "pacote": "^13.0.2", "parse-conflict-json": "^2.0.1", - "proc-log": "^1.0.0", + "proc-log": "^2.0.0", "promise-all-reject-late": "^1.0.0", "promise-call-limit": "^1.0.1", "read-package-json-fast": "^2.0.2", @@ -23504,7 +23500,7 @@ "dev": true }, "@npmcli/config": { - "version": "3.0.0", + "version": "4.0.0", "bundled": true, "dev": true, "requires": { @@ -23512,8 +23508,9 @@ "ini": "^2.0.0", "mkdirp-infer-owner": "^2.0.0", "nopt": "^5.0.0", + "proc-log": "^2.0.0", "read-package-json-fast": "^2.0.3", - "semver": "^7.3.4", + "semver": "^7.3.5", "walk-up-path": "^1.0.0" } }, @@ -23535,18 +23532,26 @@ } }, "@npmcli/git": { - "version": "2.1.0", + "version": "3.0.0", "bundled": true, "dev": true, "requires": { "@npmcli/promise-spawn": "^1.3.2", - "lru-cache": "^6.0.0", + "lru-cache": "^7.3.1", "mkdirp": "^1.0.4", - "npm-pick-manifest": "^6.1.1", + "npm-pick-manifest": "^7.0.0", + "proc-log": "^2.0.0", "promise-inflight": "^1.0.1", "promise-retry": "^2.0.1", "semver": "^7.3.5", "which": "^2.0.2" + }, + "dependencies": { + "lru-cache": { + "version": "7.3.1", + "bundled": true, + "dev": true + } } }, "@npmcli/installed-package-contents": { @@ -23570,14 +23575,14 @@ } }, "@npmcli/metavuln-calculator": { - "version": "2.0.0", + "version": "3.0.0", "bundled": true, "dev": true, "requires": { - "cacache": "^15.0.5", + "cacache": "^15.3.0", "json-parse-even-better-errors": "^2.3.1", - "pacote": "^12.0.0", - "semver": "^7.3.2" + "pacote": "^13.0.1", + "semver": "^7.3.5" } }, "@npmcli/move-file": { @@ -23616,14 +23621,14 @@ } }, "@npmcli/run-script": { - "version": "2.0.0", + "version": "3.0.0", "bundled": true, "dev": true, "requires": { - "@npmcli/node-gyp": "^1.0.2", + "@npmcli/node-gyp": "^1.0.3", "@npmcli/promise-spawn": "^1.3.2", - "node-gyp": "^8.2.0", - "read-package-json-fast": "^2.0.1" + "node-gyp": "^8.4.1", + "read-package-json-fast": "^2.0.3" } }, "@tootallnate/once": { @@ -23663,11 +23668,6 @@ "indent-string": "^4.0.0" } }, - "ansi-regex": { - "version": "2.1.1", - "bundled": true, - "dev": true - }, "ansi-styles": { "version": "4.3.0", "bundled": true, @@ -23813,21 +23813,6 @@ "bundled": true, "dev": true }, - "is-fullwidth-code-point": { - "version": "3.0.0", - "bundled": true, - "dev": true - }, - "string-width": { - "version": "4.2.3", - "bundled": true, - "dev": true, - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - } - }, "strip-ansi": { "version": "6.0.1", "bundled": true, @@ -23845,36 +23830,6 @@ "requires": { "colors": "1.4.0", "string-width": "^4.2.0" - }, - "dependencies": { - "ansi-regex": { - "version": "5.0.0", - "bundled": true, - "dev": true - }, - "is-fullwidth-code-point": { - "version": "3.0.0", - "bundled": true, - "dev": true - }, - "string-width": { - "version": "4.2.2", - "bundled": true, - "dev": true, - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.0" - } - }, - "strip-ansi": { - "version": "6.0.0", - "bundled": true, - "dev": true, - "requires": { - "ansi-regex": "^5.0.0" - } - } } }, "clone": { @@ -23915,12 +23870,27 @@ "optional": true }, "columnify": { - "version": "1.5.4", + "version": "1.6.0", "bundled": true, "dev": true, "requires": { - "strip-ansi": "^3.0.0", + "strip-ansi": "^6.0.1", "wcwidth": "^1.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "5.0.1", + "bundled": true, + "dev": true + }, + "strip-ansi": { + "version": "6.0.1", + "bundled": true, + "dev": true, + "requires": { + "ansi-regex": "^5.0.1" + } + } } }, "common-ancestor-path": { @@ -24058,21 +24028,6 @@ "bundled": true, "dev": true }, - "is-fullwidth-code-point": { - "version": "3.0.0", - "bundled": true, - "dev": true - }, - "string-width": { - "version": "4.2.3", - "bundled": true, - "dev": true, - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - } - }, "strip-ansi": { "version": "6.0.1", "bundled": true, @@ -24211,13 +24166,13 @@ "dev": true }, "init-package-json": { - "version": "2.0.5", + "version": "3.0.0", "bundled": true, "dev": true, "requires": { - "npm-package-arg": "^8.1.5", + "npm-package-arg": "^9.0.0", "promzard": "^0.3.0", - "read": "~1.0.1", + "read": "^1.0.7", "read-package-json": "^4.1.1", "semver": "^7.3.5", "validate-npm-package-license": "^3.0.4", @@ -24251,7 +24206,7 @@ } }, "is-fullwidth-code-point": { - "version": "2.0.0", + "version": "3.0.0", "bundled": true, "dev": true }, @@ -24296,18 +24251,18 @@ "dev": true }, "libnpmaccess": { - "version": "5.0.1", + "version": "6.0.0", "bundled": true, "dev": true, "requires": { "aproba": "^2.0.0", "minipass": "^3.1.1", - "npm-package-arg": "^8.1.2", - "npm-registry-fetch": "^12.0.1" + "npm-package-arg": "^9.0.0", + "npm-registry-fetch": "^13.0.0" } }, "libnpmdiff": { - "version": "3.0.0", + "version": "4.0.0", "bundled": true, "dev": true, "requires": { @@ -24316,102 +24271,104 @@ "binary-extensions": "^2.2.0", "diff": "^5.0.0", "minimatch": "^3.0.4", - "npm-package-arg": "^8.1.4", - "pacote": "^12.0.0", + "npm-package-arg": "^9.0.0", + "pacote": "^13.0.2", "tar": "^6.1.0" } }, "libnpmexec": { - "version": "3.0.3", + "version": "4.0.0", "bundled": true, "dev": true, "requires": { - "@npmcli/arborist": "^4.0.0", + "@npmcli/arborist": "^5.0.0", "@npmcli/ci-detect": "^2.0.0", - "@npmcli/run-script": "^2.0.0", + "@npmcli/run-script": "^3.0.0", "chalk": "^4.1.0", "mkdirp-infer-owner": "^2.0.0", - "npm-package-arg": "^8.1.2", - "pacote": "^12.0.0", - "proc-log": "^1.0.0", + "npm-package-arg": "^9.0.0", + "npmlog": "^6.0.1", + "pacote": "^13.0.2", + "proc-log": "^2.0.0", "read": "^1.0.7", "read-package-json-fast": "^2.0.2", "walk-up-path": "^1.0.0" } }, "libnpmfund": { - "version": "2.0.2", + "version": "3.0.0", "bundled": true, "dev": true, "requires": { - "@npmcli/arborist": "^4.0.0" + "@npmcli/arborist": "^5.0.0" } }, "libnpmhook": { - "version": "7.0.1", + "version": "8.0.0", "bundled": true, "dev": true, "requires": { "aproba": "^2.0.0", - "npm-registry-fetch": "^12.0.1" + "npm-registry-fetch": "^13.0.0" } }, "libnpmorg": { - "version": "3.0.1", + "version": "4.0.0", "bundled": true, "dev": true, "requires": { "aproba": "^2.0.0", - "npm-registry-fetch": "^12.0.1" + "npm-registry-fetch": "^13.0.0" } }, "libnpmpack": { - "version": "3.1.0", + "version": "4.0.0", "bundled": true, "dev": true, "requires": { - "@npmcli/run-script": "^2.0.0", - "npm-package-arg": "^8.1.0", - "pacote": "^12.0.0" + "@npmcli/run-script": "^3.0.0", + "npm-package-arg": "^9.0.0", + "pacote": "^13.0.2" } }, "libnpmpublish": { - "version": "5.0.1", + "version": "6.0.0", "bundled": true, "dev": true, "requires": { "normalize-package-data": "^3.0.2", - "npm-package-arg": "^8.1.2", - "npm-registry-fetch": "^12.0.1", + "npm-package-arg": "^9.0.0", + "npm-registry-fetch": "^13.0.0", "semver": "^7.1.3", "ssri": "^8.0.1" } }, "libnpmsearch": { - "version": "4.0.1", + "version": "5.0.0", "bundled": true, "dev": true, "requires": { - "npm-registry-fetch": "^12.0.1" + "npm-registry-fetch": "^13.0.0" } }, "libnpmteam": { - "version": "3.0.1", + "version": "4.0.0", "bundled": true, "dev": true, "requires": { "aproba": "^2.0.0", - "npm-registry-fetch": "^12.0.1" + "npm-registry-fetch": "^13.0.0" } }, "libnpmversion": { - "version": "2.0.2", + "version": "3.0.0", "bundled": true, "dev": true, "requires": { - "@npmcli/git": "^2.0.7", - "@npmcli/run-script": "^2.0.0", + "@npmcli/git": "^3.0.0", + "@npmcli/run-script": "^3.0.0", "json-parse-even-better-errors": "^2.3.1", + "proc-log": "^2.0.0", "semver": "^7.3.5", "stringify-package": "^1.0.1" } @@ -24667,12 +24624,12 @@ "dev": true }, "npm-package-arg": { - "version": "8.1.5", + "version": "9.0.0", "bundled": true, "dev": true, "requires": { - "hosted-git-info": "^4.0.1", - "semver": "^7.3.4", + "hosted-git-info": "^4.1.0", + "semver": "^7.3.5", "validate-npm-package-name": "^3.0.0" } }, @@ -24688,35 +24645,37 @@ } }, "npm-pick-manifest": { - "version": "6.1.1", + "version": "7.0.0", "bundled": true, "dev": true, "requires": { "npm-install-checks": "^4.0.0", "npm-normalize-package-bin": "^1.0.1", - "npm-package-arg": "^8.1.2", - "semver": "^7.3.4" + "npm-package-arg": "^9.0.0", + "semver": "^7.3.5" } }, "npm-profile": { - "version": "6.0.0", + "version": "6.0.2", "bundled": true, "dev": true, "requires": { - "npm-registry-fetch": "^12.0.0" + "npm-registry-fetch": "^13.0.0", + "proc-log": "^2.0.0" } }, "npm-registry-fetch": { - "version": "12.0.2", + "version": "13.0.0", "bundled": true, "dev": true, "requires": { - "make-fetch-happen": "^10.0.1", + "make-fetch-happen": "^10.0.2", "minipass": "^3.1.6", "minipass-fetch": "^1.4.1", "minipass-json-stream": "^1.0.1", "minizlib": "^2.1.2", - "npm-package-arg": "^8.1.5" + "npm-package-arg": "^9.0.0", + "proc-log": "^2.0.0" } }, "npm-user-validate": { @@ -24757,29 +24716,31 @@ } }, "pacote": { - "version": "12.0.3", + "version": "13.0.3", "bundled": true, "dev": true, "requires": { - "@npmcli/git": "^2.1.0", - "@npmcli/installed-package-contents": "^1.0.6", + "@npmcli/git": "^3.0.0", + "@npmcli/installed-package-contents": "^1.0.7", "@npmcli/promise-spawn": "^1.2.0", - "@npmcli/run-script": "^2.0.0", - "cacache": "^15.0.5", + "@npmcli/run-script": "^3.0.0", + "cacache": "^15.3.0", "chownr": "^2.0.0", "fs-minipass": "^2.1.0", "infer-owner": "^1.0.4", - "minipass": "^3.1.3", - "mkdirp": "^1.0.3", - "npm-package-arg": "^8.0.1", + "minipass": "^3.1.6", + "mkdirp": "^1.0.4", + "npm-package-arg": "^9.0.0", "npm-packlist": "^3.0.0", - "npm-pick-manifest": "^6.0.0", - "npm-registry-fetch": "^12.0.0", + "npm-pick-manifest": "^7.0.0", + "npm-registry-fetch": "^13.0.0", + "proc-log": "^2.0.0", "promise-retry": "^2.0.1", - "read-package-json-fast": "^2.0.1", + "read-package-json": "^4.1.1", + "read-package-json-fast": "^2.0.3", "rimraf": "^3.0.2", "ssri": "^8.0.1", - "tar": "^6.1.0" + "tar": "^6.1.11" } }, "parse-conflict-json": { @@ -24798,7 +24759,7 @@ "dev": true }, "proc-log": { - "version": "1.0.0", + "version": "2.0.0", "bundled": true, "dev": true }, @@ -25004,25 +24965,26 @@ } }, "string-width": { - "version": "2.1.1", + "version": "4.2.3", "bundled": true, "dev": true, "requires": { - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^4.0.0" + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" }, "dependencies": { "ansi-regex": { - "version": "3.0.0", + "version": "5.0.1", "bundled": true, "dev": true }, "strip-ansi": { - "version": "4.0.0", + "version": "6.0.1", "bundled": true, "dev": true, "requires": { - "ansi-regex": "^3.0.0" + "ansi-regex": "^5.0.1" } } } @@ -25032,14 +24994,6 @@ "bundled": true, "dev": true }, - "strip-ansi": { - "version": "3.0.1", - "bundled": true, - "dev": true, - "requires": { - "ansi-regex": "^2.0.0" - } - }, "supports-color": { "version": "7.2.0", "bundled": true, @@ -25302,18 +25256,18 @@ } }, "ora": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/ora/-/ora-6.0.1.tgz", - "integrity": "sha512-TDdKkKHdWE6jo/6pIa5U5AWcSVfpNRFJ8sdRJpioGNVPLAzZzHs/N+QhUfF7ZbyoC+rnDuNTKzeDJUbAza9g4g==", + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/ora/-/ora-6.1.0.tgz", + "integrity": "sha512-CxEP6845hLK+NHFWZ+LplGO4zfw4QSfxTlqMfvlJ988GoiUeZDMzCvqsZkFHv69sPICmJH1MDxZoQFOKXerAVw==", "dev": true, "requires": { "bl": "^5.0.0", - "chalk": "^4.1.2", + "chalk": "^5.0.0", "cli-cursor": "^4.0.0", - "cli-spinners": "^2.6.0", + "cli-spinners": "^2.6.1", "is-interactive": "^2.0.0", "is-unicode-supported": "^1.1.0", - "log-symbols": "^5.0.0", + "log-symbols": "^5.1.0", "strip-ansi": "^7.0.1", "wcwidth": "^1.0.1" }, @@ -25324,6 +25278,12 @@ "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", "dev": true }, + "chalk": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.0.0.tgz", + "integrity": "sha512-/duVOqst+luxCQRKEo4bNxinsOQtMP80ZYm7mMqzuh5PociNL0PvmHFvREJ9ueYL2TxlHjBcmLCdmocx9Vg+IQ==", + "dev": true + }, "cli-cursor": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-4.0.0.tgz", @@ -25808,12 +25768,12 @@ } }, "prisma": { - "version": "3.9.2", - "resolved": "https://registry.npmjs.org/prisma/-/prisma-3.9.2.tgz", - "integrity": "sha512-i9eK6cexV74OgeWaH3+e6S07kvC9jEZTl6BqtBH398nlCU0tck7mE9dicY6YQd+euvMjjCtY89q4NgmaPnUsSg==", + "version": "3.10.0", + "resolved": "https://registry.npmjs.org/prisma/-/prisma-3.10.0.tgz", + "integrity": "sha512-dAld12vtwdz9Rz01nOjmnXe+vHana5PSog8t0XGgLemKsUVsaupYpr74AHaS3s78SaTS5s2HOghnJF+jn91ZrA==", "devOptional": true, "requires": { - "@prisma/engines": "3.9.0-58.bcc2ff906db47790ee902e7bbc76d7ffb1893009" + "@prisma/engines": "3.10.0-50.73e60b76d394f8d37d8ebd1f8918c79029f0db86" } }, "process-nextick-args": { @@ -26882,9 +26842,9 @@ "integrity": "sha512-/q/8Q4Bl4ZKAPjj8WerIBJWALKkaPRfrvhfF8k/B23i4nzrlRj2/go1m90In7nG/3XDSbOo0+pu6RvCTM9RGMQ==" }, "string-width": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.0.tgz", - "integrity": "sha512-7x54QnN21P+XL/v8SuNKvfgsUre6PXpN7mc77N3HlZv+f1SBRGmjxtOud2Z6FZ8DmdkD/IdjCaf9XXbnqmTZGQ==", + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", "dev": true, "requires": { "eastasianwidth": "^0.2.0", @@ -27345,9 +27305,9 @@ "dev": true }, "uglify-js": { - "version": "3.15.1", - "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.15.1.tgz", - "integrity": "sha512-FAGKF12fWdkpvNJZENacOH0e/83eG6JyVQyanIJaBXCN1J11TUQv1T1/z8S+Z0CG0ZPk1nPcreF/c7lrTd0TEQ==", + "version": "3.15.2", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.15.2.tgz", + "integrity": "sha512-peeoTk3hSwYdoc9nrdiEJk+gx1ALCtTjdYuKSXMTDqq7n1W7dHPqWDdSi+BPL0ni2YMeHD7hKUSdbj3TZauY2A==", "dev": true, "optional": true }, @@ -27783,9 +27743,9 @@ } }, "yargs-parser": { - "version": "21.0.0", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.0.0.tgz", - "integrity": "sha512-z9kApYUOCwoeZ78rfRYYWdiU/iNL6mwwYlkkZfJoyMR1xps+NEBX5X7XmRpxkZHhXJ6+Ey00IwKxBBSW9FIjyA==", + "version": "21.0.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.0.1.tgz", + "integrity": "sha512-9BK1jFpLzJROCI5TzwZL/TU4gqjK5xiHV/RfWLOahrjAko/e4DJkRDZQXfvqAsiZzzYhgAzbgz6lg48jcm4GLg==", "dev": true } } diff --git a/package.json b/package.json index 663cf53..ed8a6d2 100644 --- a/package.json +++ b/package.json @@ -31,7 +31,7 @@ "postinstall": "husky install" }, "dependencies": { - "@prisma/client": "3.9.2", + "@prisma/client": "3.10.0", "@sinclair/typebox": "0.23.4", "@thream/socketio-jwt": "2.2.1", "axios": "0.26.0", @@ -39,7 +39,7 @@ "dotenv": "16.0.0", "ejs": "3.1.6", "fastify": "3.27.2", - "fastify-cors": "6.0.2", + "fastify-cors": "6.0.3", "fastify-helmet": "7.0.1", "fastify-multipart": "5.3.1", "fastify-plugin": "3.0.1", @@ -60,24 +60,24 @@ "@commitlint/config-conventional": "16.2.1", "@saithodev/semantic-release-backmerge": "2.1.1", "@swc/cli": "0.1.55", - "@swc/core": "1.2.143", - "@swc/jest": "0.2.17", + "@swc/core": "1.2.146", + "@swc/jest": "0.2.20", "@types/bcryptjs": "2.4.2", "@types/busboy": "1.3.0", "@types/ejs": "3.1.0", "@types/http-errors": "1.8.2", - "@types/jest": "27.4.0", + "@types/jest": "27.4.1", "@types/jsonwebtoken": "8.5.8", "@types/ms": "0.7.31", - "@types/node": "17.0.18", + "@types/node": "17.0.21", "@types/nodemailer": "6.4.4", - "@typescript-eslint/eslint-plugin": "5.12.0", + "@typescript-eslint/eslint-plugin": "5.12.1", "concurrently": "7.0.0", "cross-env": "7.0.3", "editorconfig-checker": "4.0.2", - "eslint": "8.9.0", + "eslint": "8.10.0", "eslint-config-prettier": "8.4.0", - "eslint-config-conventions": "1.0.2", + "eslint-config-conventions": "1.1.0", "eslint-plugin-import": "2.25.4", "eslint-plugin-prettier": "4.0.0", "eslint-plugin-promise": "6.0.0", @@ -91,7 +91,7 @@ "nodemon": "2.0.15", "plop": "3.0.5", "prettier": "2.5.1", - "prisma": "3.9.2", + "prisma": "3.10.0", "rimraf": "3.0.2", "semantic-release": "19.0.2", "typescript": "4.5.5" diff --git a/src/services/channels/[channelId]/__test__/delete.test.ts b/src/services/channels/[channelId]/__test__/delete.test.ts new file mode 100644 index 0000000..60d04c6 --- /dev/null +++ b/src/services/channels/[channelId]/__test__/delete.test.ts @@ -0,0 +1,71 @@ +import { application } from '../../../../application.js' +import { authenticateUserTest } from '../../../../__test__/utils/authenticateUserTest.js' +import { prismaMock } from '../../../../__test__/setup.js' +import { channelExample } from '../../../../models/Channel.js' +import { memberExample } from '../../../../models/Member.js' + +describe('DELETE /channels/[channelId]', () => { + it('succeeds', async () => { + prismaMock.channel.findUnique.mockResolvedValue(channelExample) + prismaMock.member.findFirst.mockResolvedValue(memberExample) + prismaMock.channel.delete.mockResolvedValue(channelExample) + const { accessToken } = await authenticateUserTest() + const response = await application.inject({ + method: 'DELETE', + url: `/channels/${channelExample.id}`, + headers: { + authorization: `Bearer ${accessToken}` + } + }) + const responseJson = response.json() + expect(response.statusCode).toEqual(200) + expect(responseJson.id).toEqual(channelExample.id) + expect(responseJson.name).toEqual(channelExample.name) + expect(responseJson.guildId).toEqual(channelExample.guildId) + }) + + it('fails if the channel is not found', async () => { + prismaMock.channel.findUnique.mockResolvedValue(null) + const { accessToken } = await authenticateUserTest() + const response = await application.inject({ + method: 'DELETE', + url: `/channels/${channelExample.id}`, + headers: { + authorization: `Bearer ${accessToken}` + } + }) + expect(response.statusCode).toEqual(404) + }) + + it('fails if the member is not found', async () => { + prismaMock.channel.findUnique.mockResolvedValue(channelExample) + prismaMock.member.findFirst.mockResolvedValue(null) + const { accessToken } = await authenticateUserTest() + const response = await application.inject({ + method: 'DELETE', + url: `/channels/${channelExample.id}`, + headers: { + authorization: `Bearer ${accessToken}` + } + }) + expect(response.statusCode).toEqual(404) + }) + + it('fails if the member is not owner', async () => { + const member = { + ...memberExample, + isOwner: false + } + prismaMock.channel.findUnique.mockResolvedValue(channelExample) + prismaMock.member.findFirst.mockResolvedValue(member) + const { accessToken } = await authenticateUserTest() + const response = await application.inject({ + method: 'DELETE', + url: `/channels/${channelExample.id}`, + headers: { + authorization: `Bearer ${accessToken}` + } + }) + expect(response.statusCode).toEqual(400) + }) +}) diff --git a/src/services/channels/[channelId]/__test__/put.test.ts b/src/services/channels/[channelId]/__test__/put.test.ts new file mode 100644 index 0000000..94e0825 --- /dev/null +++ b/src/services/channels/[channelId]/__test__/put.test.ts @@ -0,0 +1,75 @@ +import { application } from '../../../../application.js' +import { authenticateUserTest } from '../../../../__test__/utils/authenticateUserTest.js' +import { prismaMock } from '../../../../__test__/setup.js' +import { channelExample } from '../../../../models/Channel.js' +import { memberExample } from '../../../../models/Member.js' + +describe('PUT /channels/[channelId]', () => { + it('succeeds', async () => { + prismaMock.channel.findUnique.mockResolvedValue(channelExample) + prismaMock.member.findFirst.mockResolvedValue(memberExample) + prismaMock.channel.update.mockResolvedValue(channelExample) + const { accessToken } = await authenticateUserTest() + const response = await application.inject({ + method: 'PUT', + url: `/channels/${channelExample.id}`, + headers: { + authorization: `Bearer ${accessToken}` + }, + payload: { name: channelExample.name } + }) + const responseJson = response.json() + expect(response.statusCode).toEqual(200) + expect(responseJson.id).toEqual(channelExample.id) + expect(responseJson.name).toEqual(channelExample.name) + expect(responseJson.guildId).toEqual(channelExample.guildId) + }) + + it('fails if the channel is not found', async () => { + prismaMock.channel.findUnique.mockResolvedValue(null) + const { accessToken } = await authenticateUserTest() + const response = await application.inject({ + method: 'PUT', + url: `/channels/${channelExample.id}`, + headers: { + authorization: `Bearer ${accessToken}` + }, + payload: { name: channelExample.name } + }) + expect(response.statusCode).toEqual(404) + }) + + it('fails if the member is not found', async () => { + prismaMock.channel.findUnique.mockResolvedValue(channelExample) + prismaMock.member.findFirst.mockResolvedValue(null) + const { accessToken } = await authenticateUserTest() + const response = await application.inject({ + method: 'PUT', + url: `/channels/${channelExample.id}`, + headers: { + authorization: `Bearer ${accessToken}` + }, + payload: { name: channelExample.name } + }) + expect(response.statusCode).toEqual(404) + }) + + it('fails if the member is not owner', async () => { + const member = { + ...memberExample, + isOwner: false + } + prismaMock.channel.findUnique.mockResolvedValue(channelExample) + prismaMock.member.findFirst.mockResolvedValue(member) + const { accessToken } = await authenticateUserTest() + const response = await application.inject({ + method: 'PUT', + url: `/channels/${channelExample.id}`, + headers: { + authorization: `Bearer ${accessToken}` + }, + payload: { name: channelExample.name } + }) + expect(response.statusCode).toEqual(400) + }) +}) diff --git a/src/services/channels/[channelId]/delete.ts b/src/services/channels/[channelId]/delete.ts new file mode 100644 index 0000000..e756618 --- /dev/null +++ b/src/services/channels/[channelId]/delete.ts @@ -0,0 +1,79 @@ +import { Static, Type } from '@sinclair/typebox' +import { FastifyPluginAsync, FastifySchema } from 'fastify' + +import prisma from '../../../tools/database/prisma.js' +import { fastifyErrors } from '../../../models/utils.js' +import authenticateUser from '../../../tools/plugins/authenticateUser.js' +import { channelSchema } from '../../../models/Channel.js' + +const parametersSchema = Type.Object({ + channelId: channelSchema.id +}) + +type Parameters = Static + +const deleteServiceSchema: FastifySchema = { + description: 'DELETE a channel with its id.', + tags: ['channels'] as string[], + security: [ + { + bearerAuth: [] + } + ] as Array<{ [key: string]: [] }>, + params: parametersSchema, + response: { + 200: Type.Object(channelSchema), + 400: fastifyErrors[400], + 401: fastifyErrors[401], + 403: fastifyErrors[403], + 404: fastifyErrors[404], + 500: fastifyErrors[500] + } +} as const + +export const deleteChannelService: FastifyPluginAsync = async (fastify) => { + await fastify.register(authenticateUser) + + fastify.route<{ + Params: Parameters + }>({ + method: 'DELETE', + url: '/channels/:channelId', + schema: deleteServiceSchema, + handler: async (request, reply) => { + if (request.user == null) { + throw fastify.httpErrors.forbidden() + } + const { user } = request + const { channelId } = request.params + const channelCheck = await prisma.channel.findUnique({ + where: { id: channelId } + }) + if (channelCheck == null) { + throw fastify.httpErrors.notFound('Channel not found') + } + const member = await prisma.member.findFirst({ + where: { guildId: channelCheck.guildId, userId: user.current.id } + }) + if (member == null) { + throw fastify.httpErrors.notFound('Member not found') + } + if (!member.isOwner) { + throw fastify.httpErrors.badRequest('You should be a member owner') + } + const channel = await prisma.channel.delete({ + where: { id: channelId } + }) + await fastify.io.emitToMembers({ + event: 'channels', + guildId: member.guildId, + payload: { + action: 'delete', + item: channel + } + }) + reply.statusCode = 200 + return channel + } + }) +} diff --git a/src/services/channels/[channelId]/put.ts b/src/services/channels/[channelId]/put.ts new file mode 100644 index 0000000..6101cf2 --- /dev/null +++ b/src/services/channels/[channelId]/put.ts @@ -0,0 +1,89 @@ +import { Static, Type } from '@sinclair/typebox' +import { FastifyPluginAsync, FastifySchema } from 'fastify' + +import prisma from '../../../tools/database/prisma.js' +import { fastifyErrors } from '../../../models/utils.js' +import authenticateUser from '../../../tools/plugins/authenticateUser.js' +import { channelSchema } from '../../../models/Channel.js' + +const bodyPutServiceSchema = Type.Object({ + name: channelSchema.name +}) + +type BodyPutServiceSchemaType = Static + +const parametersSchema = Type.Object({ + channelId: channelSchema.id +}) + +type Parameters = Static + +const putServiceSchema: FastifySchema = { + description: 'UPDATE a channel with its id.', + tags: ['channels'] as string[], + security: [ + { + bearerAuth: [] + } + ] as Array<{ [key: string]: [] }>, + params: parametersSchema, + body: bodyPutServiceSchema, + response: { + 200: Type.Object(channelSchema), + 400: fastifyErrors[400], + 401: fastifyErrors[401], + 403: fastifyErrors[403], + 404: fastifyErrors[404], + 500: fastifyErrors[500] + } +} as const + +export const putChannelService: FastifyPluginAsync = async (fastify) => { + await fastify.register(authenticateUser) + + fastify.route<{ + Body: BodyPutServiceSchemaType + Params: Parameters + }>({ + method: 'PUT', + url: '/channels/:channelId', + schema: putServiceSchema, + handler: async (request, reply) => { + if (request.user == null) { + throw fastify.httpErrors.forbidden() + } + const { user } = request + const { channelId } = request.params + const { name } = request.body + const channelCheck = await prisma.channel.findUnique({ + where: { id: channelId } + }) + if (channelCheck == null) { + throw fastify.httpErrors.notFound('Channel not found') + } + const member = await prisma.member.findFirst({ + where: { guildId: channelCheck.guildId, userId: user.current.id } + }) + if (member == null) { + throw fastify.httpErrors.notFound('Member not found') + } + if (!member.isOwner) { + throw fastify.httpErrors.badRequest('You should be a member owner') + } + const channel = await prisma.channel.update({ + where: { id: channelId }, + data: { name } + }) + await fastify.io.emitToMembers({ + event: 'channels', + guildId: member.guildId, + payload: { + action: 'update', + item: channel + } + }) + reply.statusCode = 200 + return channel + } + }) +} diff --git a/src/services/channels/index.ts b/src/services/channels/index.ts index 181aee7..d7a3dbd 100644 --- a/src/services/channels/index.ts +++ b/src/services/channels/index.ts @@ -1,13 +1,17 @@ import { FastifyPluginAsync } from 'fastify' +import { deleteChannelService } from './[channelId]/delete.js' import { getChannelByIdService } from './[channelId]/get.js' import { getMessagesByChannelIdService } from './[channelId]/messages/get.js' import { postMessageByChannelIdService } from './[channelId]/messages/post.js' import { postMessageUploadsByChannelIdService } from './[channelId]/messages/uploads/post.js' +import { putChannelService } from './[channelId]/put.js' export const channelsService: FastifyPluginAsync = async (fastify) => { await fastify.register(getChannelByIdService) await fastify.register(getMessagesByChannelIdService) await fastify.register(postMessageByChannelIdService) await fastify.register(postMessageUploadsByChannelIdService) + await fastify.register(putChannelService) + await fastify.register(deleteChannelService) } diff --git a/src/services/guilds/[guildId]/channels/__test__/post.test.ts b/src/services/guilds/[guildId]/channels/__test__/post.test.ts new file mode 100644 index 0000000..a023a4e --- /dev/null +++ b/src/services/guilds/[guildId]/channels/__test__/post.test.ts @@ -0,0 +1,59 @@ +import { application } from '../../../../../application.js' +import { authenticateUserTest } from '../../../../../__test__/utils/authenticateUserTest.js' +import { prismaMock } from '../../../../../__test__/setup.js' +import { channelExample } from '../../../../../models/Channel.js' +import { memberExample } from '../../../../../models/Member.js' +import { guildExample } from '../../../../../models/Guild.js' + +describe('POST /guilds/[guildId]/channels', () => { + it('succeeds', async () => { + prismaMock.member.findFirst.mockResolvedValue(memberExample) + prismaMock.channel.create.mockResolvedValue(channelExample) + const { accessToken } = await authenticateUserTest() + const response = await application.inject({ + method: 'POST', + url: `/guilds/${guildExample.id}/channels`, + headers: { + authorization: `Bearer ${accessToken}` + }, + payload: { name: channelExample.name } + }) + const responseJson = response.json() + expect(response.statusCode).toEqual(201) + expect(responseJson.id).toEqual(channelExample.id) + expect(responseJson.name).toEqual(channelExample.name) + expect(responseJson.guildId).toEqual(channelExample.guildId) + }) + + it('fails if the member is not found', async () => { + prismaMock.member.findFirst.mockResolvedValue(null) + const { accessToken } = await authenticateUserTest() + const response = await application.inject({ + method: 'POST', + url: `/guilds/${guildExample.id}/channels`, + headers: { + authorization: `Bearer ${accessToken}` + }, + payload: { name: channelExample.name } + }) + expect(response.statusCode).toEqual(404) + }) + + it('fails if the member is not owner', async () => { + const member = { + ...memberExample, + isOwner: false + } + prismaMock.member.findFirst.mockResolvedValue(member) + const { accessToken } = await authenticateUserTest() + const response = await application.inject({ + method: 'POST', + url: `/guilds/${guildExample.id}/channels`, + headers: { + authorization: `Bearer ${accessToken}` + }, + payload: { name: channelExample.name } + }) + expect(response.statusCode).toEqual(400) + }) +}) diff --git a/src/services/guilds/[guildId]/channels/post.ts b/src/services/guilds/[guildId]/channels/post.ts new file mode 100644 index 0000000..e7691ce --- /dev/null +++ b/src/services/guilds/[guildId]/channels/post.ts @@ -0,0 +1,86 @@ +import { Static, Type } from '@sinclair/typebox' +import { FastifyPluginAsync, FastifySchema } from 'fastify' + +import prisma from '../../../../tools/database/prisma.js' +import { fastifyErrors } from '../../../../models/utils.js' +import authenticateUser from '../../../../tools/plugins/authenticateUser.js' +import { channelSchema } from '../../../../models/Channel.js' +import { guildSchema } from '../../../../models/Guild.js' + +const bodyPostServiceSchema = Type.Object({ + name: channelSchema.name +}) + +type BodyPostServiceSchemaType = Static + +const parametersSchema = Type.Object({ + guildId: guildSchema.id +}) + +type Parameters = Static + +const postChannelServiceSchema: FastifySchema = { + description: 'Create a channel.', + tags: ['channels'] as string[], + security: [ + { + bearerAuth: [] + } + ] as Array<{ [key: string]: [] }>, + body: bodyPostServiceSchema, + params: parametersSchema, + response: { + 201: Type.Object(channelSchema), + 400: fastifyErrors[400], + 401: fastifyErrors[401], + 403: fastifyErrors[403], + 404: fastifyErrors[404], + 500: fastifyErrors[500] + } +} as const + +export const postChannelService: FastifyPluginAsync = async (fastify) => { + await fastify.register(authenticateUser) + + fastify.route<{ + Body: BodyPostServiceSchemaType + Params: Parameters + }>({ + method: 'POST', + url: '/guilds/:guildId/channels', + schema: postChannelServiceSchema, + handler: async (request, reply) => { + if (request.user == null) { + throw fastify.httpErrors.forbidden() + } + const { user } = request + const { guildId } = request.params + const { name } = request.body + const member = await prisma.member.findFirst({ + where: { guildId, userId: user.current.id } + }) + if (member == null) { + throw fastify.httpErrors.notFound('Member not found') + } + if (!member.isOwner) { + throw fastify.httpErrors.badRequest('You should be a member owner') + } + const channel = await prisma.channel.create({ + data: { + name, + guildId + } + }) + await fastify.io.emitToMembers({ + event: 'channels', + guildId, + payload: { + action: 'create', + item: channel + } + }) + reply.statusCode = 201 + return channel + } + }) +} diff --git a/src/services/guilds/[guildId]/members/join/__test__/post.test.ts b/src/services/guilds/[guildId]/members/join/__test__/post.test.ts new file mode 100644 index 0000000..7c0f20e --- /dev/null +++ b/src/services/guilds/[guildId]/members/join/__test__/post.test.ts @@ -0,0 +1,49 @@ +import { application } from '../../../../../../application.js' +import { authenticateUserTest } from '../../../../../../__test__/utils/authenticateUserTest.js' +import { prismaMock } from '../../../../../../__test__/setup.js' +import { guildExample } from '../../../../../../models/Guild.js' +import { channelExample } from '../../../../../../models/Channel.js' +import { memberExample } from '../../../../../../models/Member.js' +import { userExample } from '../../../../../../models/User.js' + +describe('POST /guilds/[guildId]/members/join', () => { + it('succeeds', async () => { + prismaMock.member.findFirst.mockResolvedValue(null) + prismaMock.member.create.mockResolvedValue({ + ...memberExample, + user: userExample + } as any) + prismaMock.channel.findFirst.mockResolvedValue(channelExample) + prismaMock.guild.findUnique.mockResolvedValue(guildExample) + const { accessToken, user } = await authenticateUserTest() + const response = await application.inject({ + method: 'POST', + url: `/guilds/${guildExample.id}/members/join`, + headers: { + authorization: `Bearer ${accessToken}` + } + }) + const responseJson = response.json() + expect(response.statusCode).toEqual(201) + expect(responseJson.id).toEqual(memberExample.id) + expect(responseJson.userId).toEqual(memberExample.userId) + expect(responseJson.user.name).toEqual(user.name) + expect(responseJson.user.email).toEqual(null) + expect(responseJson.guild.id).toEqual(guildExample.id) + expect(responseJson.guild.name).toEqual(guildExample.name) + expect(responseJson.guild.defaultChannelId).toEqual(channelExample.id) + }) + + it('fails if the user is already in the guild', async () => { + prismaMock.member.findFirst.mockResolvedValue(memberExample) + const { accessToken } = await authenticateUserTest() + const response = await application.inject({ + method: 'POST', + url: `/guilds/${guildExample.id}/members/join`, + headers: { + authorization: `Bearer ${accessToken}` + } + }) + expect(response.statusCode).toEqual(400) + }) +}) diff --git a/src/services/guilds/[guildId]/members/join/post.ts b/src/services/guilds/[guildId]/members/join/post.ts new file mode 100644 index 0000000..71414f2 --- /dev/null +++ b/src/services/guilds/[guildId]/members/join/post.ts @@ -0,0 +1,121 @@ +import { Static, Type } from '@sinclair/typebox' +import { FastifyPluginAsync, FastifySchema } from 'fastify' + +import prisma from '../../../../../tools/database/prisma.js' +import { fastifyErrors, id } from '../../../../../models/utils.js' +import authenticateUser from '../../../../../tools/plugins/authenticateUser.js' +import { guildSchema } from '../../../../../models/Guild.js' +import { memberSchema } from '../../../../../models/Member.js' +import { userPublicWithoutSettingsSchema } from '../../../../../models/User.js' + +const parametersSchema = Type.Object({ + guildId: guildSchema.id +}) + +type Parameters = Static + +const postServiceSchema: FastifySchema = { + description: 'Join a guild (create a member).', + tags: ['members'] as string[], + security: [ + { + bearerAuth: [] + } + ] as Array<{ [key: string]: [] }>, + params: parametersSchema, + response: { + 201: Type.Object({ + ...memberSchema, + guild: Type.Object({ + ...guildSchema, + defaultChannelId: id + }), + user: Type.Object(userPublicWithoutSettingsSchema) + }), + 400: fastifyErrors[400], + 401: fastifyErrors[401], + 403: fastifyErrors[403], + 500: fastifyErrors[500] + } +} as const + +export const postMemberService: FastifyPluginAsync = async (fastify) => { + await fastify.register(authenticateUser) + + fastify.route<{ + Params: Parameters + }>({ + method: 'POST', + url: '/guilds/:guildId/members/join', + schema: postServiceSchema, + handler: async (request, reply) => { + if (request.user == null) { + throw fastify.httpErrors.forbidden() + } + const { user } = request + const { guildId } = request.params + const memberCheck = await prisma.member.findFirst({ + where: { + userId: user.current.id, + guildId + } + }) + if (memberCheck != null) { + throw fastify.httpErrors.badRequest( + "Guild doesn't exist or you are already in the guild" + ) + } + const member = await prisma.member.create({ + data: { + guildId, + userId: user.current.id + }, + include: { + user: { + select: { + id: true, + name: true, + logo: true, + status: true, + biography: true, + website: true, + createdAt: true, + updatedAt: true + } + } + } + }) + const channel = await prisma.channel.findFirst({ + where: { + guildId: member.guildId + } + }) + const guild = await prisma.guild.findUnique({ + where: { + id: member.guildId + } + }) + const item = { + ...member, + user: { + ...member.user, + email: null + }, + guild: { + ...guild, + defaultChannelId: channel?.id + } + } + await fastify.io.emitToMembers({ + event: 'members', + guildId, + payload: { + action: 'create', + item + } + }) + reply.statusCode = 201 + return item + } + }) +} diff --git a/src/services/guilds/[guildId]/members/leave/__test__/delete.test.ts b/src/services/guilds/[guildId]/members/leave/__test__/delete.test.ts new file mode 100644 index 0000000..cb0e3b5 --- /dev/null +++ b/src/services/guilds/[guildId]/members/leave/__test__/delete.test.ts @@ -0,0 +1,59 @@ +import { application } from '../../../../../../application.js' +import { authenticateUserTest } from '../../../../../../__test__/utils/authenticateUserTest.js' +import { prismaMock } from '../../../../../../__test__/setup.js' +import { guildExample } from '../../../../../../models/Guild.js' +import { memberExample } from '../../../../../../models/Member.js' + +describe('DELETE /guilds/[guildId]/members/leave', () => { + it('succeeds', async () => { + const member = { + ...memberExample, + isOwner: false + } + prismaMock.member.findFirst.mockResolvedValue(member) + prismaMock.member.delete.mockResolvedValue(member) + const { accessToken } = await authenticateUserTest() + const response = await application.inject({ + method: 'DELETE', + url: `/guilds/${guildExample.id}/members/leave`, + headers: { + authorization: `Bearer ${accessToken}` + } + }) + const responseJson = response.json() + expect(response.statusCode).toEqual(200) + expect(responseJson.id).toEqual(member.id) + expect(responseJson.isOwner).toEqual(member.isOwner) + expect(responseJson.userId).toEqual(member.userId) + }) + + it('fails if the member is not found', async () => { + prismaMock.member.findFirst.mockResolvedValue(null) + const { accessToken } = await authenticateUserTest() + const response = await application.inject({ + method: 'DELETE', + url: `/guilds/${guildExample.id}/members/leave`, + headers: { + authorization: `Bearer ${accessToken}` + } + }) + expect(response.statusCode).toEqual(404) + }) + + it('fails if the member is owner', async () => { + const member = { + ...memberExample, + isOwner: true + } + prismaMock.member.findFirst.mockResolvedValue(member) + const { accessToken } = await authenticateUserTest() + const response = await application.inject({ + method: 'DELETE', + url: `/guilds/${guildExample.id}/members/leave`, + headers: { + authorization: `Bearer ${accessToken}` + } + }) + expect(response.statusCode).toEqual(400) + }) +}) diff --git a/src/services/guilds/[guildId]/members/leave/delete.ts b/src/services/guilds/[guildId]/members/leave/delete.ts new file mode 100644 index 0000000..96651e0 --- /dev/null +++ b/src/services/guilds/[guildId]/members/leave/delete.ts @@ -0,0 +1,74 @@ +import { Static, Type } from '@sinclair/typebox' +import { FastifyPluginAsync, FastifySchema } from 'fastify' + +import prisma from '../../../../../tools/database/prisma.js' +import { fastifyErrors } from '../../../../../models/utils.js' +import authenticateUser from '../../../../../tools/plugins/authenticateUser.js' +import { guildSchema } from '../../../../../models/Guild.js' +import { memberSchema } from '../../../../../models/Member.js' + +const parametersSchema = Type.Object({ + guildId: guildSchema.id +}) + +type Parameters = Static + +const deleteServiceSchema: FastifySchema = { + description: 'Leave a guild (delete a member).', + tags: ['members'] as string[], + security: [ + { + bearerAuth: [] + } + ] as Array<{ [key: string]: [] }>, + params: parametersSchema, + response: { + 200: Type.Object(memberSchema), + 400: fastifyErrors[400], + 401: fastifyErrors[401], + 403: fastifyErrors[403], + 404: fastifyErrors[404], + 500: fastifyErrors[500] + } +} as const + +export const deleteMemberService: FastifyPluginAsync = async (fastify) => { + await fastify.register(authenticateUser) + + fastify.route<{ + Params: Parameters + }>({ + method: 'DELETE', + url: '/guilds/:guildId/members/leave', + schema: deleteServiceSchema, + handler: async (request, reply) => { + if (request.user == null) { + throw fastify.httpErrors.forbidden() + } + const { user } = request + const { guildId } = request.params + const member = await prisma.member.findFirst({ + where: { guildId, userId: user.current.id } + }) + if (member == null) { + throw fastify.httpErrors.notFound('Member not found') + } + if (member.isOwner) { + throw fastify.httpErrors.badRequest( + "The member owner can't leave the guild (you can delete it instead)" + ) + } + await prisma.member.delete({ where: { id: member.id } }) + await fastify.io.emitToMembers({ + event: 'members', + guildId, + payload: { + action: 'delete', + item: member + } + }) + reply.statusCode = 200 + return member + } + }) +} diff --git a/src/services/guilds/index.ts b/src/services/guilds/index.ts index d57388f..02bbf42 100644 --- a/src/services/guilds/index.ts +++ b/src/services/guilds/index.ts @@ -4,10 +4,13 @@ import { getGuilds } from './get.js' import { postGuilds } from './post.js' import { getGuildsPublic } from './public/get.js' import { getChannelsByGuildIdService } from './[guildId]/channels/get.js' +import { postChannelService } from './[guildId]/channels/post.js' import { deleteGuildByIdService } from './[guildId]/delete.js' import { getGuildMemberByIdService } from './[guildId]/get.js' import { putGuildIconById } from './[guildId]/icon/put.js' import { getMembersByGuildIdService } from './[guildId]/members/get.js' +import { postMemberService } from './[guildId]/members/join/post.js' +import { deleteMemberService } from './[guildId]/members/leave/delete.js' import { putGuildByIdService } from './[guildId]/put.js' export const guildsService: FastifyPluginAsync = async (fastify) => { @@ -20,4 +23,7 @@ export const guildsService: FastifyPluginAsync = async (fastify) => { await fastify.register(getMembersByGuildIdService) await fastify.register(putGuildByIdService) await fastify.register(deleteGuildByIdService) + await fastify.register(postMemberService) + await fastify.register(deleteMemberService) + await fastify.register(postChannelService) }