From 5643ab420faaa5b1826eded2d33883e535186473 Mon Sep 17 00:00:00 2001 From: Divlo Date: Thu, 13 Jan 2022 16:33:16 +0000 Subject: [PATCH] feat: add realtime with socket.io --- .eslintrc.json | 5 +- .gitignore | 1 + package-lock.json | 721 +++++++++--------- package.json | 25 +- .../channels/[channelId]/messages/post.ts | 8 +- .../[channelId]/messages/uploads/post.ts | 8 +- src/tools/plugins/socket-io.ts | 78 +- 7 files changed, 483 insertions(+), 363 deletions(-) diff --git a/.eslintrc.json b/.eslintrc.json index a7709ca..2d51219 100644 --- a/.eslintrc.json +++ b/.eslintrc.json @@ -12,7 +12,10 @@ "prettier/prettier": "error", "import/order": [ "error", - { "groups": ["builtin", "external", "internal"] } + { + "groups": ["builtin", "external", "internal"], + "newlines-between": "always" + } ], "import/extensions": ["error", "always"], "unicorn/prefer-node-protocol": "error", diff --git a/.gitignore b/.gitignore index 0d85514..e5334a5 100644 --- a/.gitignore +++ b/.gitignore @@ -4,6 +4,7 @@ node_modules # production build +.swc # testing coverage diff --git a/package-lock.json b/package-lock.json index 4709b01..5474ab5 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9,21 +9,22 @@ "version": "0.0.1", "hasInstallScript": true, "dependencies": { - "@prisma/client": "3.7.0", + "@prisma/client": "3.8.0", "@sinclair/typebox": "0.23.2", + "@thream/socketio-jwt": "2.1.1", "axios": "0.24.0", "bcryptjs": "2.4.3", - "dotenv": "10.0.0", + "dotenv": "11.0.0", "ejs": "3.1.6", "fastify": "3.25.3", "fastify-cors": "6.0.2", - "fastify-helmet": "5.3.2", + "fastify-helmet": "6.0.0", "fastify-multipart": "5.2.1", "fastify-plugin": "3.0.0", "fastify-rate-limit": "5.7.0", "fastify-sensible": "3.1.2", "fastify-static": "4.5.0", - "fastify-swagger": "4.13.0", + "fastify-swagger": "4.13.1", "fastify-url-data": "3.0.3", "http-errors": "2.0.0", "jsonwebtoken": "8.5.1", @@ -33,18 +34,18 @@ "socket.io": "4.4.1" }, "devDependencies": { - "@commitlint/cli": "16.0.1", + "@commitlint/cli": "16.0.2", "@commitlint/config-conventional": "16.0.0", "@saithodev/semantic-release-backmerge": "2.1.0", "@swc/cli": "0.1.55", - "@swc/core": "1.2.127", - "@swc/jest": "0.2.15", + "@swc/core": "1.2.129", + "@swc/jest": "0.2.17", "@types/bcryptjs": "2.4.2", - "@types/busboy": "0.3.1", + "@types/busboy": "1.3.0", "@types/ejs": "3.1.0", "@types/http-errors": "1.8.1", "@types/jest": "27.4.0", - "@types/jsonwebtoken": "8.5.6", + "@types/jsonwebtoken": "8.5.7", "@types/ms": "0.7.31", "@types/node": "17.0.8", "@types/nodemailer": "6.4.4", @@ -64,12 +65,12 @@ "jest": "27.4.7", "jest-mock-extended": "2.0.4", "jest-ts-webcompat-resolver": "1.0.0", - "lint-staged": "12.1.5", + "lint-staged": "12.1.7", "markdownlint-cli": "0.30.0", "nodemon": "2.0.15", "plop": "3.0.5", "prettier": "2.5.1", - "prisma": "3.7.0", + "prisma": "3.8.0", "rimraf": "3.0.2", "semantic-release": "18.0.1", "typescript": "4.5.4" @@ -88,9 +89,9 @@ } }, "node_modules/@babel/compat-data": { - "version": "7.16.4", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.16.4.tgz", - "integrity": "sha512-1o/jo7D+kC9ZjHX5v+EHrdjl3PhxMrLSOTGsOdHJ+KL8HCaEK6ehrVL2RS6oHDZp+L7xLirLrPmQtEng769J/Q==", + "version": "7.16.8", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.16.8.tgz", + "integrity": "sha512-m7OkX0IdKLKPpBlJtF561YJal5y/jyI5fNfWbPxh2D/nbzzGI4qRyrD8xO2jB24u7l+5I2a43scCG2IrfjC50Q==", "dev": true, "engines": { "node": ">=6.9.0" @@ -157,12 +158,12 @@ } }, "node_modules/@babel/generator": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.16.7.tgz", - "integrity": "sha512-/ST3Sg8MLGY5HVYmrjOgL60ENux/HfO/CsUh7y4MalThufhE/Ff/6EibFDHi4jiDCaWfJKoqbE6oTh21c5hrRg==", + "version": "7.16.8", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.16.8.tgz", + "integrity": "sha512-1ojZwE9+lOXzcWdWmO6TbUzDfqLD39CmEhN8+2cX9XkDo5yW1OpgfejfliysR2AWLpMamTiOiAp/mtroaymhpw==", "dev": true, "dependencies": { - "@babel/types": "^7.16.7", + "@babel/types": "^7.16.8", "jsesc": "^2.5.1", "source-map": "^0.5.0" }, @@ -429,9 +430,9 @@ } }, "node_modules/@babel/parser": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.16.7.tgz", - "integrity": "sha512-sR4eaSrnM7BV7QPzGfEX5paG/6wrZM3I0HDzfIAK06ESvo9oy3xBuVBxE3MbQaKNhvg8g/ixjMWo2CGpzpHsDA==", + "version": "7.16.8", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.16.8.tgz", + "integrity": "sha512-i7jDUfrVBWc+7OKcBzEe5n7fbv3i2fWtxKzzCvOjnzSxMfWMigAhtfJ7qzZNGFNMsCCd67+uz553dYKWXPvCKw==", "dev": true, "bin": { "parser": "bin/babel-parser.js" @@ -629,19 +630,19 @@ } }, "node_modules/@babel/traverse": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.16.7.tgz", - "integrity": "sha512-8KWJPIb8c2VvY8AJrydh6+fVRo2ODx1wYBU2398xJVq0JomuLBZmVQzLPBblJgHIGYG4znCpUZUZ0Pt2vdmVYQ==", + "version": "7.16.8", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.16.8.tgz", + "integrity": "sha512-xe+H7JlvKsDQwXRsBhSnq1/+9c+LlQcCK3Tn/l5sbx02HYns/cn7ibp9+RV1sIUqu7hKg91NWsgHurO9dowITQ==", "dev": true, "dependencies": { "@babel/code-frame": "^7.16.7", - "@babel/generator": "^7.16.7", + "@babel/generator": "^7.16.8", "@babel/helper-environment-visitor": "^7.16.7", "@babel/helper-function-name": "^7.16.7", "@babel/helper-hoist-variables": "^7.16.7", "@babel/helper-split-export-declaration": "^7.16.7", - "@babel/parser": "^7.16.7", - "@babel/types": "^7.16.7", + "@babel/parser": "^7.16.8", + "@babel/types": "^7.16.8", "debug": "^4.1.0", "globals": "^11.1.0" }, @@ -671,9 +672,9 @@ } }, "node_modules/@babel/types": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.16.7.tgz", - "integrity": "sha512-E8HuV7FO9qLpx6OtoGfUQ2cjIYnbFwvZWYBS+87EwtdMvmUPJSwykpovFB+8insbpF0uJcpr8KMUi64XZntZcg==", + "version": "7.16.8", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.16.8.tgz", + "integrity": "sha512-smN2DQc5s4M7fntyjGtyIPbRJv6wW4rU/94fmYJ7PKQuZkC0qGMHXJbg6sNGt12JmVr4k5YaptI/XtiLJBnmIg==", "dev": true, "dependencies": { "@babel/helper-validator-identifier": "^7.16.7", @@ -690,9 +691,9 @@ "dev": true }, "node_modules/@commitlint/cli": { - "version": "16.0.1", - "resolved": "https://registry.npmjs.org/@commitlint/cli/-/cli-16.0.1.tgz", - "integrity": "sha512-61gGRy65WiVDRsqP0dAR2fAgE3qrTBW3fgz9MySv32y5Ib3ZXXDDq6bGyQqi2dSaPuDYzNCRwwlC7mmQM73T/g==", + "version": "16.0.2", + "resolved": "https://registry.npmjs.org/@commitlint/cli/-/cli-16.0.2.tgz", + "integrity": "sha512-Jt7iaBjoLGC5Nq4dHPTvTYnqPGkElFPBtTXTvBpTgatZApczyjI2plE0oG4GYWPp1suHIS/VdVDOMpPZjGVusg==", "dev": true, "dependencies": { "@commitlint/format": "^16.0.0", @@ -1377,9 +1378,9 @@ "dev": true }, "node_modules/@node-rs/helper": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@node-rs/helper/-/helper-1.3.0.tgz", - "integrity": "sha512-KPS0EBA1bXtf96IL7wr5bFHxhL2KCZ6kI/hkyLG7nzEq2cDq8pJhOhcJDOLXIPh5J2LEJ5eXyjDTWDFg5eRypw==", + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/@node-rs/helper/-/helper-1.3.2.tgz", + "integrity": "sha512-cjP3xk/x8YQP4bsg9CdzxC86olR2lLkTUR1LB9UtOZElMht3SzE/+X3ZYJfIeOzxfKcDA4uABg+/1JRgkx/Puw==", "dev": true, "dependencies": { "@napi-rs/triples": "^1.1.0" @@ -1553,12 +1554,12 @@ } }, "node_modules/@prisma/client": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/@prisma/client/-/client-3.7.0.tgz", - "integrity": "sha512-fUJMvBOX5C7JPc0e3CJD6Gbelbu4dMJB4ScYpiht8HMUnRShw20ULOipTopjNtl6ekHQJ4muI7pXlQxWS9nMbw==", + "version": "3.8.0", + "resolved": "https://registry.npmjs.org/@prisma/client/-/client-3.8.0.tgz", + "integrity": "sha512-odYAbzfGvVWpDxhk2Yb03DlcCg6zKgJjt5admcp4xtr7u0f76B2NppC4TSGxvdQUGzPI6G37afu2oZCb/uwGfg==", "hasInstallScript": true, "dependencies": { - "@prisma/engines-version": "3.7.0-31.8746e055198f517658c08a0c426c7eec87f5a85f" + "@prisma/engines-version": "3.8.0-43.34df67547cf5598f5a6cd3eb45f14ee70c3fb86f" }, "engines": { "node": ">=12.6" @@ -1573,16 +1574,16 @@ } }, "node_modules/@prisma/engines": { - "version": "3.7.0-31.8746e055198f517658c08a0c426c7eec87f5a85f", - "resolved": "https://registry.npmjs.org/@prisma/engines/-/engines-3.7.0-31.8746e055198f517658c08a0c426c7eec87f5a85f.tgz", - "integrity": "sha512-W549ub5NlgexNhR8EFstA/UwAWq3Zq0w9aNkraqsozVCt2CsX+lK4TK7IW5OZVSnxHwRjrgEAt3r9yPy8nZQRg==", + "version": "3.8.0-43.34df67547cf5598f5a6cd3eb45f14ee70c3fb86f", + "resolved": "https://registry.npmjs.org/@prisma/engines/-/engines-3.8.0-43.34df67547cf5598f5a6cd3eb45f14ee70c3fb86f.tgz", + "integrity": "sha512-bHYubuItSN/DGYo36aDu7xJiJmK52JOSHs4MK+KbceAtwS20BCWadRgtpQ3iZ2EXfN/B1T0iCXlNraaNwnpU2w==", "devOptional": true, "hasInstallScript": true }, "node_modules/@prisma/engines-version": { - "version": "3.7.0-31.8746e055198f517658c08a0c426c7eec87f5a85f", - "resolved": "https://registry.npmjs.org/@prisma/engines-version/-/engines-version-3.7.0-31.8746e055198f517658c08a0c426c7eec87f5a85f.tgz", - "integrity": "sha512-+qx2b+HK7BKF4VCa0LZ/t1QCXsu6SmvhUQyJkOD2aPpmOzket4fEnSKQZSB0i5tl7rwCDsvAiSeK8o7rf+yvwg==" + "version": "3.8.0-43.34df67547cf5598f5a6cd3eb45f14ee70c3fb86f", + "resolved": "https://registry.npmjs.org/@prisma/engines-version/-/engines-version-3.8.0-43.34df67547cf5598f5a6cd3eb45f14ee70c3fb86f.tgz", + "integrity": "sha512-G2JH6yWt6ixGKmsRmVgaQYahfwMopim0u/XLIZUo2o/mZ5jdu7+BL+2V5lZr7XiG1axhyrpvlyqE/c0OgYSl3g==" }, "node_modules/@saithodev/semantic-release-backmerge": { "version": "2.1.0", @@ -1799,9 +1800,9 @@ } }, "node_modules/@swc/core": { - "version": "1.2.127", - "resolved": "https://registry.npmjs.org/@swc/core/-/core-1.2.127.tgz", - "integrity": "sha512-JF2xOOPgKT1XRs5eXiKAk2kV7BwJvPTIfBT79Pk3cEEQzDgxGSs3spVWXHA0EhCbh1MquJgR7bElt0Pyk/CRbg==", + "version": "1.2.129", + "resolved": "https://registry.npmjs.org/@swc/core/-/core-1.2.129.tgz", + "integrity": "sha512-Ay2Vt/uI+vRn6Nu5nRTjcuRlXejN5VfYOCCsNGqA5DIrhO0VSwxyOncL/kYlGtzE5XhYBE5eU8QIkRC+koI/fw==", "dev": true, "dependencies": { "@node-rs/helper": "^1.0.0" @@ -1814,25 +1815,25 @@ "url": "https://opencollective.com/swc" }, "optionalDependencies": { - "@swc/core-android-arm-eabi": "1.2.127", - "@swc/core-android-arm64": "1.2.127", - "@swc/core-darwin-arm64": "1.2.127", - "@swc/core-darwin-x64": "1.2.127", - "@swc/core-freebsd-x64": "1.2.127", - "@swc/core-linux-arm-gnueabihf": "1.2.127", - "@swc/core-linux-arm64-gnu": "1.2.127", - "@swc/core-linux-arm64-musl": "1.2.127", - "@swc/core-linux-x64-gnu": "1.2.127", - "@swc/core-linux-x64-musl": "1.2.127", - "@swc/core-win32-arm64-msvc": "1.2.127", - "@swc/core-win32-ia32-msvc": "1.2.127", - "@swc/core-win32-x64-msvc": "1.2.127" + "@swc/core-android-arm-eabi": "1.2.129", + "@swc/core-android-arm64": "1.2.129", + "@swc/core-darwin-arm64": "1.2.129", + "@swc/core-darwin-x64": "1.2.129", + "@swc/core-freebsd-x64": "1.2.129", + "@swc/core-linux-arm-gnueabihf": "1.2.129", + "@swc/core-linux-arm64-gnu": "1.2.129", + "@swc/core-linux-arm64-musl": "1.2.129", + "@swc/core-linux-x64-gnu": "1.2.129", + "@swc/core-linux-x64-musl": "1.2.129", + "@swc/core-win32-arm64-msvc": "1.2.129", + "@swc/core-win32-ia32-msvc": "1.2.129", + "@swc/core-win32-x64-msvc": "1.2.129" } }, "node_modules/@swc/core-android-arm-eabi": { - "version": "1.2.127", - "resolved": "https://registry.npmjs.org/@swc/core-android-arm-eabi/-/core-android-arm-eabi-1.2.127.tgz", - "integrity": "sha512-/bF4gupb+96Fi1FmcGFRig9zToQrAIH/2+NgZMDlCESJP1Dio/bbAB59vPllXgTsfvAQsbv26sScm4VmBmgttw==", + "version": "1.2.129", + "resolved": "https://registry.npmjs.org/@swc/core-android-arm-eabi/-/core-android-arm-eabi-1.2.129.tgz", + "integrity": "sha512-5/q+32xm9Ile5NWJeGKa3UhPrMxjx6rVph7yauJlzOOxPsE3v7vhKhBFBkNMzlscoKbC4PFyu54xaRR8TTvrww==", "cpu": [ "arm" ], @@ -1846,9 +1847,9 @@ } }, "node_modules/@swc/core-android-arm64": { - "version": "1.2.127", - "resolved": "https://registry.npmjs.org/@swc/core-android-arm64/-/core-android-arm64-1.2.127.tgz", - "integrity": "sha512-DqSSjaRrZaY23vbYEBwjU0WxPSfAgnabJK8Dx08DQmTrUXAbsvWkF7QyVdsdZuroC1GiJui/slT33xxNnLVVBg==", + "version": "1.2.129", + "resolved": "https://registry.npmjs.org/@swc/core-android-arm64/-/core-android-arm64-1.2.129.tgz", + "integrity": "sha512-e8n8g5BLQFXxOP/t6KY5JlK/40L+opjZyUZb3NHLuvFct7p9j5QpSPR8jkDYBPzvD75N7cPNE1KxPaU7QT5qYQ==", "cpu": [ "arm64" ], @@ -1862,9 +1863,9 @@ } }, "node_modules/@swc/core-darwin-arm64": { - "version": "1.2.127", - "resolved": "https://registry.npmjs.org/@swc/core-darwin-arm64/-/core-darwin-arm64-1.2.127.tgz", - "integrity": "sha512-9aAS7CZzKKHngdN9eHMDveoVcoiyq6EYRGi46CrRDwiEdZ14DzznYlJ37I71cUz1vHapb4YbIWN5/jxb34r/RA==", + "version": "1.2.129", + "resolved": "https://registry.npmjs.org/@swc/core-darwin-arm64/-/core-darwin-arm64-1.2.129.tgz", + "integrity": "sha512-l86EpZb73PKFaOYR1Wsd3kXCz1/vgBrBLGB9JzKNTiH0yVDtRWl5PonMhntUBdg6AzwZToyeAumLWZ3Xo21GqQ==", "cpu": [ "arm64" ], @@ -1878,9 +1879,9 @@ } }, "node_modules/@swc/core-darwin-x64": { - "version": "1.2.127", - "resolved": "https://registry.npmjs.org/@swc/core-darwin-x64/-/core-darwin-x64-1.2.127.tgz", - "integrity": "sha512-GSZHGEhpjWStOdpAJvOPZmIEHTksbKezwnNEq1M27lNaiT8dPfrBWi28z/NfQp8HEpEi5U7hTB41PPIXT66MUA==", + "version": "1.2.129", + "resolved": "https://registry.npmjs.org/@swc/core-darwin-x64/-/core-darwin-x64-1.2.129.tgz", + "integrity": "sha512-yd1hMErfoF4xrjt9jj/qWDtR74/5eCDc4+kSbe/hkZ4lCXaYpE8Po962trPgUd+mCLkW58ElArGP3uEPXvJofQ==", "cpu": [ "x64" ], @@ -1894,9 +1895,9 @@ } }, "node_modules/@swc/core-freebsd-x64": { - "version": "1.2.127", - "resolved": "https://registry.npmjs.org/@swc/core-freebsd-x64/-/core-freebsd-x64-1.2.127.tgz", - "integrity": "sha512-BJBmcWCSZbdkyq+ZDxvzkvqtz67wgLDsVuAfpIdCEw1KoFTJSxwc6K7dKZqfd68xULnj2aHRFZr0SyK3kXeirg==", + "version": "1.2.129", + "resolved": "https://registry.npmjs.org/@swc/core-freebsd-x64/-/core-freebsd-x64-1.2.129.tgz", + "integrity": "sha512-u0ONxga6YOH1Bt0nihwtWPjLM/nB0x1RfK5R/J1xTZyV3d5AMu4Dp2LQi37K6gT9BIto/h7h2wTuHtgqhIDA+g==", "cpu": [ "x64" ], @@ -1910,9 +1911,9 @@ } }, "node_modules/@swc/core-linux-arm-gnueabihf": { - "version": "1.2.127", - "resolved": "https://registry.npmjs.org/@swc/core-linux-arm-gnueabihf/-/core-linux-arm-gnueabihf-1.2.127.tgz", - "integrity": "sha512-wE6JzkbmQ7Kq5U/BRyE1893//MRrpees7bNvcION5rq9Yd0on2XY7ifaSlGeEEMgO/RRIsHXUJTUjsfY4XVvMQ==", + "version": "1.2.129", + "resolved": "https://registry.npmjs.org/@swc/core-linux-arm-gnueabihf/-/core-linux-arm-gnueabihf-1.2.129.tgz", + "integrity": "sha512-Tr3IwKRASqSFJnv1NV+fHunIGh0lqRY89GDwEiGbWnEiEIrviRdFdQd3w+zJk3SQFj9raaZTZoWuAfHduePSwg==", "cpu": [ "arm" ], @@ -1926,9 +1927,9 @@ } }, "node_modules/@swc/core-linux-arm64-gnu": { - "version": "1.2.127", - "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-gnu/-/core-linux-arm64-gnu-1.2.127.tgz", - "integrity": "sha512-oenvsF18KUNiNvDxHmUwY3uXJoqeienSAPAiWQfThrNOyadVLeKs6ecmkFxoCEZOV05gek4A/hBHImdby0UTcw==", + "version": "1.2.129", + "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-gnu/-/core-linux-arm64-gnu-1.2.129.tgz", + "integrity": "sha512-r0SrNxI1ZLZLvkl3a2UeGBEGiylL9XKKFbrlWebvgsZcRA3fzBiuJ3NVHO0PzE4S4+KvV73sCwA9MusFv28jvQ==", "cpu": [ "arm64" ], @@ -1942,9 +1943,9 @@ } }, "node_modules/@swc/core-linux-arm64-musl": { - "version": "1.2.127", - "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-musl/-/core-linux-arm64-musl-1.2.127.tgz", - "integrity": "sha512-R371z8YH3t0uevQA8AfimS5GwBHwoPifpsKjl3sH1LXlYEm+XAw/yUe/z/bRBUx465IhqdNW+ZrUswCtxo1fVw==", + "version": "1.2.129", + "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-musl/-/core-linux-arm64-musl-1.2.129.tgz", + "integrity": "sha512-8BBLmBDsGm+/rrZ8AAk9AktemnVxe1m9csZ5OElzyvqcsHWjqfION657Ae1UEzUtFTzdeP5Lx0WeEqigBu2W8A==", "cpu": [ "arm64" ], @@ -1958,9 +1959,9 @@ } }, "node_modules/@swc/core-linux-x64-gnu": { - "version": "1.2.127", - "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.2.127.tgz", - "integrity": "sha512-QAn3KVRQOKmvJxUb/0gNcb4BeFfBVWV+Ry5o4HMfnxdRSLl7sGlDYAbH7V2atM6P/4OT5cpiorQvjCdOXNSS1Q==", + "version": "1.2.129", + "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.2.129.tgz", + "integrity": "sha512-iL4sM+0pLD0V2H6QJrkFpvL6hjWzjEMww8peXG/+0b1jXleD0GuN+NuguMmZHEbr64+uqm2KFA9ctKyTBH9aQQ==", "cpu": [ "x64" ], @@ -1974,9 +1975,9 @@ } }, "node_modules/@swc/core-linux-x64-musl": { - "version": "1.2.127", - "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.2.127.tgz", - "integrity": "sha512-UeBPFWXndeefjcsoW6JBwT5aSdGQpaqqoiA1Sa7aHa87O/Egun2dMawGhTqbyzeKapS70rcZlvaY9UCHj2TEiQ==", + "version": "1.2.129", + "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.2.129.tgz", + "integrity": "sha512-4RKrA1KhQVx6no5AxO7lqwnijYAx1GQ1v0xywiiYSrQkDxi2Q+yAqxDvWS9UT2LtEaOO9HzCr3vWEoHp+wDd2w==", "cpu": [ "x64" ], @@ -1990,9 +1991,9 @@ } }, "node_modules/@swc/core-win32-arm64-msvc": { - "version": "1.2.127", - "resolved": "https://registry.npmjs.org/@swc/core-win32-arm64-msvc/-/core-win32-arm64-msvc-1.2.127.tgz", - "integrity": "sha512-4S7LZvOo0k121dXZgfE9Rs4DYNOmLy9OXI4kB5wk52B4llfzNhiZjARwqI4f5oqk8znyOuPV8JIzDUnNPzxkTA==", + "version": "1.2.129", + "resolved": "https://registry.npmjs.org/@swc/core-win32-arm64-msvc/-/core-win32-arm64-msvc-1.2.129.tgz", + "integrity": "sha512-Qrh0vytLHzkZezHemNcZFQSj3AQ559WA35Dwzt7BO6a0UvwjHAJHdKSIaF8pYeVdr44VcwqcS0BO9D7rDHWNkQ==", "cpu": [ "arm64" ], @@ -2006,9 +2007,9 @@ } }, "node_modules/@swc/core-win32-ia32-msvc": { - "version": "1.2.127", - "resolved": "https://registry.npmjs.org/@swc/core-win32-ia32-msvc/-/core-win32-ia32-msvc-1.2.127.tgz", - "integrity": "sha512-7oM0G+1KASIEujhBYD/a6xDwFFhN31pZ34rEfrXvu+lGlx0e5i0q/vHI9fXkxNimMpePCQJ21aTIeCxs0HzZ6g==", + "version": "1.2.129", + "resolved": "https://registry.npmjs.org/@swc/core-win32-ia32-msvc/-/core-win32-ia32-msvc-1.2.129.tgz", + "integrity": "sha512-wXUqCoQeH0ktOEPkAJXwt4KAhrChmDJD82ydJzkrDFyFyQnY5axBFDLX1XespsI5eNRxzag/FemewMbagnHoSw==", "cpu": [ "ia32" ], @@ -2022,9 +2023,9 @@ } }, "node_modules/@swc/core-win32-x64-msvc": { - "version": "1.2.127", - "resolved": "https://registry.npmjs.org/@swc/core-win32-x64-msvc/-/core-win32-x64-msvc-1.2.127.tgz", - "integrity": "sha512-AglGNIi5VYJEbrqWiA0VbrKFG0Xta6yBLCy39XQgImgL8yl3R586vNRts+kPv2+hC2MOx9yr8eUXFnKpBCr9hA==", + "version": "1.2.129", + "resolved": "https://registry.npmjs.org/@swc/core-win32-x64-msvc/-/core-win32-x64-msvc-1.2.129.tgz", + "integrity": "sha512-SqfiGn1KTlunTK42gtJ7XUP0IaVkYKQAfBEP6PT+t5xoQVcxOla5lR8cvoN5b2wQkFUL/yLkc+HuFjzi5vdppg==", "cpu": [ "x64" ], @@ -2038,12 +2039,12 @@ } }, "node_modules/@swc/jest": { - "version": "0.2.15", - "resolved": "https://registry.npmjs.org/@swc/jest/-/jest-0.2.15.tgz", - "integrity": "sha512-Ja+YCVPOGPX/nFnPvPKaWpx2HUwrtuvHP1onHOey1gNGhq8CktQ7xQhCFSuyYBQJiW3WOZ+qMsv3aZk1XUBSOg==", + "version": "0.2.17", + "resolved": "https://registry.npmjs.org/@swc/jest/-/jest-0.2.17.tgz", + "integrity": "sha512-n/g989+O8xxMcTZnP0phDrrgezGZBQBf7cX4QuzEsn07QkWbqmMsfaCxdF0kzajXublXWJ8yk5vRe3VNk1tczA==", "dev": true, "dependencies": { - "@jest/create-cache-key-function": "^27.3.1" + "@jest/create-cache-key-function": "^27.4.2" }, "engines": { "npm": ">= 7.0.0" @@ -2064,6 +2065,20 @@ "node": ">=6" } }, + "node_modules/@thream/socketio-jwt": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@thream/socketio-jwt/-/socketio-jwt-2.1.1.tgz", + "integrity": "sha512-HqqJmR5bRb5ks/V7ABKfpA3gJuUYO6QA0VIl8wiAD+1ow3EQLIM0HNWtyooKPcBpiQRqfrJi2YuKenURFAhD7w==", + "dependencies": { + "jsonwebtoken": "8.5.1" + }, + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "socket.io": ">=3.0.0" + } + }, "node_modules/@tootallnate/once": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz", @@ -2145,9 +2160,9 @@ "dev": true }, "node_modules/@types/busboy": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/@types/busboy/-/busboy-0.3.1.tgz", - "integrity": "sha512-8BPLNy4x+7lbTOGkAyUIZrrPEZ7WzbO7YlVGMf9EZi9J9mqILEkYbt/kgVWQ7fizOISo1hM/7cAsWVTa7EhQDg==", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@types/busboy/-/busboy-1.3.0.tgz", + "integrity": "sha512-Qx7ehfGO/k2yiTVpRIVIu16oVgbJpG65WLjEhbNSoTPdQEoRCorFUKHsSznyHmIkdvzOg2W3JWeewCmfSwcgeA==", "dev": true, "dependencies": { "@types/node": "*" @@ -2206,9 +2221,9 @@ } }, "node_modules/@types/inquirer/node_modules/rxjs": { - "version": "7.5.1", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.5.1.tgz", - "integrity": "sha512-KExVEeZWxMZnZhUZtsJcFwz8IvPvgu4G2Z2QyqjZQzUGr32KDYuSxrEYO4w3tFFNbfLozcrKUTvTPi+E9ywJkQ==", + "version": "7.5.2", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.5.2.tgz", + "integrity": "sha512-PwDt186XaL3QN5qXj/H9DGyHhP3/RYYgZZwqBv9Tv8rsAaiwFH1IsJJlcgD37J7UW5a6O67qX0KWKS3/pu0m4w==", "dev": true, "dependencies": { "tslib": "^2.1.0" @@ -2261,9 +2276,9 @@ "dev": true }, "node_modules/@types/jsonwebtoken": { - "version": "8.5.6", - "resolved": "https://registry.npmjs.org/@types/jsonwebtoken/-/jsonwebtoken-8.5.6.tgz", - "integrity": "sha512-+P3O/xC7nzVizIi5VbF34YtqSonFsdnbXBnWUCYRiKOi1f9gA4sEFvXkrGr/QVV23IbMYvcoerI7nnhDUiWXRQ==", + "version": "8.5.7", + "resolved": "https://registry.npmjs.org/@types/jsonwebtoken/-/jsonwebtoken-8.5.7.tgz", + "integrity": "sha512-CBHN+1unePowgS94ayLE7aVp7AfyhgG/3l2O+AjkhOMY4kAAfVI1OnbbLnOeDMAdTNLP5ZjJ3kdZanRtRQaK3Q==", "dev": true, "dependencies": { "@types/node": "*" @@ -2317,9 +2332,9 @@ "dev": true }, "node_modules/@types/prettier": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.4.2.tgz", - "integrity": "sha512-ekoj4qOQYp7CvjX8ZDBgN86w3MqQhLE1hczEJbEIjgFEumDy+na/4AJAbLXfgEWFNB2pKadM5rPFtuSGMWK7xA==", + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.4.3.tgz", + "integrity": "sha512-QzSuZMBuG5u8HqYz01qtMdg/Jfctlnvj1z/lYnIDXs/golxw0fxtRAHd9KrzjR7Yxz1qVeI00o0kiO3PmVdJ9w==", "dev": true }, "node_modules/@types/retry": { @@ -3341,9 +3356,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001296", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001296.tgz", - "integrity": "sha512-WfrtPEoNSoeATDlf4y3QvkwiELl9GyPLISV5GejTbbQRtQx4LhsXmc9IQ6XCL2d7UxCyEzToEZNMeqR79OUw8Q==", + "version": "1.0.30001299", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001299.tgz", + "integrity": "sha512-iujN4+x7QzqA2NCSrS5VUy+4gLmRd4xv6vbBBsmfVqTx8bLAD8097euLqQgKxSVLvxjSDcvF1T/i9ocgnUFexw==", "dev": true, "funding": { "type": "opencollective", @@ -3534,19 +3549,18 @@ } }, "node_modules/cli-table3": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.6.0.tgz", - "integrity": "sha512-gnB85c3MGC7Nm9I/FkiasNBOKjOiO1RNuXXarQms37q4QMpWdlbBgD/VnOStA2faG1dpXMv31RFApjX1/QdgWQ==", + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.6.1.tgz", + "integrity": "sha512-w0q/enDHhPLq44ovMGdQeeDLvwxwavsJX7oQGYt/LrBlYsyaxyDnp6z3QzFut/6kLLKnlcUVJLrpB7KBfgG/RA==", "dev": true, "dependencies": { - "object-assign": "^4.1.0", "string-width": "^4.2.0" }, "engines": { "node": "10.* || >= 12.*" }, "optionalDependencies": { - "colors": "^1.1.2" + "colors": "1.4.0" } }, "node_modules/cli-table3/node_modules/emoji-regex": { @@ -4439,11 +4453,11 @@ } }, "node_modules/dotenv": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-10.0.0.tgz", - "integrity": "sha512-rlBi9d8jpv9Sf1klPjNfFAuWDjKLwTIJJ/VxtoTwIR6hnZxcEOQCZg2oIL3MWBYw5GpUDKOEnND7LXTbIpQ03Q==", + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-11.0.0.tgz", + "integrity": "sha512-Fp/b504Y5W+e+FpCxTFMUZ7ZEQkQYF0rx+KZtmwixJxGQbLHrhCwo3FjZgNC8vIfrSi29PABNbMoCGD9YoiXbQ==", "engines": { - "node": ">=10" + "node": ">=12" } }, "node_modules/duplexer2": { @@ -4491,6 +4505,12 @@ "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=", "dev": true }, + "node_modules/eastasianwidth": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", + "dev": true + }, "node_modules/ecdsa-sig-formatter": { "version": "1.0.11", "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz", @@ -4534,9 +4554,9 @@ } }, "node_modules/electron-to-chromium": { - "version": "1.4.36", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.36.tgz", - "integrity": "sha512-MbLlbF39vKrXWlFEFpCgDHwdlz4O3LmHM5W4tiLRHjSmEUXjJjz8sZkMgWgvYxlZw3N1iDTmCEtOkkESb5TMCg==", + "version": "1.4.44", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.44.tgz", + "integrity": "sha512-tHGWiUUmY7GABK8+DNcr474cnZDTzD8x1736SlDosVH8+/vRJeqfaIBAEHFtMjddz/0T4rKKYsxEc8BwQRdBpw==", "dev": true }, "node_modules/emittery": { @@ -4582,9 +4602,9 @@ } }, "node_modules/engine.io": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-6.1.0.tgz", - "integrity": "sha512-ErhZOVu2xweCjEfYcTdkCnEYUiZgkAcBBAhW4jbIvNG8SLU3orAqoJCiytZjYF7eTpVmmCrLDjLIEaPlUAs1uw==", + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-6.1.1.tgz", + "integrity": "sha512-AyMc20q8JUUdvKd46+thc9o7yCZ6iC6MoBCChG5Z1XmFMpp+2+y/oKvwpZTUJB0KCjxScw1dV9c2h5pjiYBLuQ==", "dependencies": { "@types/cookie": "^0.4.1", "@types/cors": "^2.8.12", @@ -5561,9 +5581,9 @@ "dev": true }, "node_modules/fast-glob": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.7.tgz", - "integrity": "sha512-rYGMRwip6lUMvYD3BTScMwT1HtAs2d71SMv66Vrxs0IekGZEjhM0pcMfjQPnknBt2zeCwQMEupiN02ZP4DiT1Q==", + "version": "3.2.10", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.10.tgz", + "integrity": "sha512-s9nFhFnvR63wls6/kM88kQqDhMu0AfdjqouE2l5GVQPbqLgyFjjU5ry/r2yKsJxpb9Py1EYNqieFrmMaX4v++A==", "dev": true, "dependencies": { "@nodelib/fs.stat": "^2.0.2", @@ -5573,7 +5593,7 @@ "micromatch": "^4.0.4" }, "engines": { - "node": ">=8" + "node": ">=8.6.0" } }, "node_modules/fast-json-stable-stringify": { @@ -5651,12 +5671,12 @@ "integrity": "sha512-oCfpcsDndgnDVgiI7bwFKAun2dO+4h84vBlkWsWnz/OUK9Reff5UFoFl241xTiLeHWX/vU9zkDVXqYUxjOwHcQ==" }, "node_modules/fastify-helmet": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/fastify-helmet/-/fastify-helmet-5.3.2.tgz", - "integrity": "sha512-X9lKZa7wjvMe79eUP0Fo+3GMMmbxKC92ddJGdmSIEZxn0JwSw+Fw5mlOiM9RABRQGphdLDSHIL/29ywH7GUusQ==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/fastify-helmet/-/fastify-helmet-6.0.0.tgz", + "integrity": "sha512-BHU3QvpvlDlrhBpkGQYTctgwg6jqmCU3uQLqzz1C/AnrjSB2JQ+ukJPgaiQgcLAqejktHy0zQcqszSHEv4iHrA==", "dependencies": { "fastify-plugin": "^3.0.0", - "helmet": "^4.0.0" + "helmet": "^5.0.1" } }, "node_modules/fastify-multipart": { @@ -5751,9 +5771,9 @@ } }, "node_modules/fastify-swagger": { - "version": "4.13.0", - "resolved": "https://registry.npmjs.org/fastify-swagger/-/fastify-swagger-4.13.0.tgz", - "integrity": "sha512-HQ4059nlrOaJ20opGP+9KXBtxobEgovLOov2BPsqaNkLpFyPcddoYoLeiQur4YuB53rxUE1mnGMLIPXKwvcwbg==", + "version": "4.13.1", + "resolved": "https://registry.npmjs.org/fastify-swagger/-/fastify-swagger-4.13.1.tgz", + "integrity": "sha512-9MQ+YVo/2F9Bg2tXs5POccHau5znmHaneggjoyinqumD+n7wClu4uYwV8cNMikdr7zvoepVaYedPue1xHQwsgg==", "dependencies": { "fastify-plugin": "^3.0.0", "fastify-static": "^4.0.0", @@ -5983,9 +6003,9 @@ "dev": true }, "node_modules/follow-redirects": { - "version": "1.14.6", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.14.6.tgz", - "integrity": "sha512-fhUl5EwSJbbl8AR+uYL2KQDxLkdSjZGR36xy46AO7cOMTrCMON6Sa28FmAnC2tRTDbd/Uuzz3aJBv7EBN7JH8A==", + "version": "1.14.7", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.14.7.tgz", + "integrity": "sha512-+hbxoLbFMbRKDwohX8GkTataGqO6Jb7jGwpAlwgy2bIz25XtRm7KEzJM76R1WiNT5SwZkX4Y75SwBolkpmE7iQ==", "funding": [ { "type": "individual", @@ -6432,16 +6452,16 @@ } }, "node_modules/globby": { - "version": "11.0.4", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.0.4.tgz", - "integrity": "sha512-9O4MVG9ioZJ08ffbcyVYyLOJLk5JQ688pJ4eMGLpdWLHq/Wr1D9BlriLQyL0E+jbkuePVZXYFj47QM/v093wHg==", + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", "dev": true, "dependencies": { "array-union": "^2.1.0", "dir-glob": "^3.0.1", - "fast-glob": "^3.1.1", - "ignore": "^5.1.4", - "merge2": "^1.3.0", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", "slash": "^3.0.0" }, "engines": { @@ -6606,11 +6626,11 @@ } }, "node_modules/helmet": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/helmet/-/helmet-4.6.0.tgz", - "integrity": "sha512-HVqALKZlR95ROkrnesdhbbZJFi/rIVSoNq6f3jA/9u6MIbTsPh3xZwihjeI5+DO/2sOV6HMHooXcEOuwskHpTg==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/helmet/-/helmet-5.0.1.tgz", + "integrity": "sha512-iyYpGYH2nbQVaQtauYDnemWg45S2RyGvJ+iKj+V9jp7Dc1NTtAJHmD+hFOSYS7Xdwe1GeyVEYSydggXLOg6TKQ==", "engines": { - "node": ">=10.0.0" + "node": ">=12.0.0" } }, "node_modules/hexoid": { @@ -7030,9 +7050,9 @@ } }, "node_modules/inquirer/node_modules/rxjs": { - "version": "7.5.1", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.5.1.tgz", - "integrity": "sha512-KExVEeZWxMZnZhUZtsJcFwz8IvPvgu4G2Z2QyqjZQzUGr32KDYuSxrEYO4w3tFFNbfLozcrKUTvTPi+E9ywJkQ==", + "version": "7.5.2", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.5.2.tgz", + "integrity": "sha512-PwDt186XaL3QN5qXj/H9DGyHhP3/RYYgZZwqBv9Tv8rsAaiwFH1IsJJlcgD37J7UW5a6O67qX0KWKS3/pu0m4w==", "dev": true, "dependencies": { "tslib": "^2.1.0" @@ -8858,9 +8878,9 @@ } }, "node_modules/lint-staged": { - "version": "12.1.5", - "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-12.1.5.tgz", - "integrity": "sha512-WyKb+0sNKDTd1LwwAfTBPp0XmdaKkAOEbg4oHE4Kq2+oQVchg/VAcjVQtSqZih1izNsTURjc2EkhG/syRQUXdA==", + "version": "12.1.7", + "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-12.1.7.tgz", + "integrity": "sha512-bltv/ejiLWtowExpjU+s5z8j1Byjg9AlmaAjMmqNbIicY69u6sYIwXGg0dCn0TlkrrY2CphtHIXAkbZ+1VoWQQ==", "dev": true, "dependencies": { "cli-truncate": "^3.1.0", @@ -8967,9 +8987,9 @@ } }, "node_modules/listr2/node_modules/rxjs": { - "version": "7.5.1", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.5.1.tgz", - "integrity": "sha512-KExVEeZWxMZnZhUZtsJcFwz8IvPvgu4G2Z2QyqjZQzUGr32KDYuSxrEYO4w3tFFNbfLozcrKUTvTPi+E9ywJkQ==", + "version": "7.5.2", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.5.2.tgz", + "integrity": "sha512-PwDt186XaL3QN5qXj/H9DGyHhP3/RYYgZZwqBv9Tv8rsAaiwFH1IsJJlcgD37J7UW5a6O67qX0KWKS3/pu0m4w==", "dev": true, "dependencies": { "tslib": "^2.1.0" @@ -13787,13 +13807,13 @@ } }, "node_modules/prisma": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/prisma/-/prisma-3.7.0.tgz", - "integrity": "sha512-pzgc95msPLcCHqOli7Hnabu/GRfSGSUWl5s2P6N13T/rgMB+NNeKbxCmzQiZT2yLOeLEPivV6YrW1oeQIwJxcg==", + "version": "3.8.0", + "resolved": "https://registry.npmjs.org/prisma/-/prisma-3.8.0.tgz", + "integrity": "sha512-xLmVyO/L6C4ZdHzHqiJVq3ZfDWSym29x75JcwJx746ps61UcNEg4ozSwN9ud7UjXLntdXe1xDLNOUO1lc7LN5g==", "devOptional": true, "hasInstallScript": true, "dependencies": { - "@prisma/engines": "3.7.0-31.8746e055198f517658c08a0c426c7eec87f5a85f" + "@prisma/engines": "3.8.0-43.34df67547cf5598f5a6cd3eb45f14ee70c3fb86f" }, "bin": { "prisma": "build/index.js", @@ -15170,13 +15190,13 @@ "integrity": "sha512-/q/8Q4Bl4ZKAPjj8WerIBJWALKkaPRfrvhfF8k/B23i4nzrlRj2/go1m90In7nG/3XDSbOo0+pu6RvCTM9RGMQ==" }, "node_modules/string-width": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.0.1.tgz", - "integrity": "sha512-5ohWO/M4//8lErlUUtrFy3b11GtNOuMOU0ysKCDXFcfXuuvUXu95akgj/i8ofmaGdN0hCqyl6uu9i8dS/mQp5g==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.0.tgz", + "integrity": "sha512-7x54QnN21P+XL/v8SuNKvfgsUre6PXpN7mc77N3HlZv+f1SBRGmjxtOud2Z6FZ8DmdkD/IdjCaf9XXbnqmTZGQ==", "dev": true, "dependencies": { + "eastasianwidth": "^0.2.0", "emoji-regex": "^9.2.2", - "is-fullwidth-code-point": "^4.0.0", "strip-ansi": "^7.0.1" }, "engines": { @@ -16049,9 +16069,9 @@ "dev": true }, "node_modules/v8-to-istanbul": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-8.1.0.tgz", - "integrity": "sha512-/PRhfd8aTNp9Ggr62HPzXg2XasNFGy5PBt0Rp04du7/8GNNSgxFL6WBTkgMKSL9bFjH+8kKEG3f37FmxiTqUUA==", + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-8.1.1.tgz", + "integrity": "sha512-FGtKtv3xIpR6BYhvgH8MI/y78oT7d8Au3ww4QIxymrCtZEh5b8gCw2siywE+puhEmuWKDtmfrvF5UlB298ut3w==", "dev": true, "dependencies": { "@types/istanbul-lib-coverage": "^2.0.1", @@ -16485,9 +16505,9 @@ } }, "@babel/compat-data": { - "version": "7.16.4", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.16.4.tgz", - "integrity": "sha512-1o/jo7D+kC9ZjHX5v+EHrdjl3PhxMrLSOTGsOdHJ+KL8HCaEK6ehrVL2RS6oHDZp+L7xLirLrPmQtEng769J/Q==", + "version": "7.16.8", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.16.8.tgz", + "integrity": "sha512-m7OkX0IdKLKPpBlJtF561YJal5y/jyI5fNfWbPxh2D/nbzzGI4qRyrD8xO2jB24u7l+5I2a43scCG2IrfjC50Q==", "dev": true }, "@babel/core": { @@ -16537,12 +16557,12 @@ } }, "@babel/generator": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.16.7.tgz", - "integrity": "sha512-/ST3Sg8MLGY5HVYmrjOgL60ENux/HfO/CsUh7y4MalThufhE/Ff/6EibFDHi4jiDCaWfJKoqbE6oTh21c5hrRg==", + "version": "7.16.8", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.16.8.tgz", + "integrity": "sha512-1ojZwE9+lOXzcWdWmO6TbUzDfqLD39CmEhN8+2cX9XkDo5yW1OpgfejfliysR2AWLpMamTiOiAp/mtroaymhpw==", "dev": true, "requires": { - "@babel/types": "^7.16.7", + "@babel/types": "^7.16.8", "jsesc": "^2.5.1", "source-map": "^0.5.0" }, @@ -16746,9 +16766,9 @@ } }, "@babel/parser": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.16.7.tgz", - "integrity": "sha512-sR4eaSrnM7BV7QPzGfEX5paG/6wrZM3I0HDzfIAK06ESvo9oy3xBuVBxE3MbQaKNhvg8g/ixjMWo2CGpzpHsDA==", + "version": "7.16.8", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.16.8.tgz", + "integrity": "sha512-i7jDUfrVBWc+7OKcBzEe5n7fbv3i2fWtxKzzCvOjnzSxMfWMigAhtfJ7qzZNGFNMsCCd67+uz553dYKWXPvCKw==", "dev": true }, "@babel/plugin-syntax-async-generators": { @@ -16891,19 +16911,19 @@ } }, "@babel/traverse": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.16.7.tgz", - "integrity": "sha512-8KWJPIb8c2VvY8AJrydh6+fVRo2ODx1wYBU2398xJVq0JomuLBZmVQzLPBblJgHIGYG4znCpUZUZ0Pt2vdmVYQ==", + "version": "7.16.8", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.16.8.tgz", + "integrity": "sha512-xe+H7JlvKsDQwXRsBhSnq1/+9c+LlQcCK3Tn/l5sbx02HYns/cn7ibp9+RV1sIUqu7hKg91NWsgHurO9dowITQ==", "dev": true, "requires": { "@babel/code-frame": "^7.16.7", - "@babel/generator": "^7.16.7", + "@babel/generator": "^7.16.8", "@babel/helper-environment-visitor": "^7.16.7", "@babel/helper-function-name": "^7.16.7", "@babel/helper-hoist-variables": "^7.16.7", "@babel/helper-split-export-declaration": "^7.16.7", - "@babel/parser": "^7.16.7", - "@babel/types": "^7.16.7", + "@babel/parser": "^7.16.8", + "@babel/types": "^7.16.8", "debug": "^4.1.0", "globals": "^11.1.0" }, @@ -16926,9 +16946,9 @@ } }, "@babel/types": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.16.7.tgz", - "integrity": "sha512-E8HuV7FO9qLpx6OtoGfUQ2cjIYnbFwvZWYBS+87EwtdMvmUPJSwykpovFB+8insbpF0uJcpr8KMUi64XZntZcg==", + "version": "7.16.8", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.16.8.tgz", + "integrity": "sha512-smN2DQc5s4M7fntyjGtyIPbRJv6wW4rU/94fmYJ7PKQuZkC0qGMHXJbg6sNGt12JmVr4k5YaptI/XtiLJBnmIg==", "dev": true, "requires": { "@babel/helper-validator-identifier": "^7.16.7", @@ -16942,9 +16962,9 @@ "dev": true }, "@commitlint/cli": { - "version": "16.0.1", - "resolved": "https://registry.npmjs.org/@commitlint/cli/-/cli-16.0.1.tgz", - "integrity": "sha512-61gGRy65WiVDRsqP0dAR2fAgE3qrTBW3fgz9MySv32y5Ib3ZXXDDq6bGyQqi2dSaPuDYzNCRwwlC7mmQM73T/g==", + "version": "16.0.2", + "resolved": "https://registry.npmjs.org/@commitlint/cli/-/cli-16.0.2.tgz", + "integrity": "sha512-Jt7iaBjoLGC5Nq4dHPTvTYnqPGkElFPBtTXTvBpTgatZApczyjI2plE0oG4GYWPp1suHIS/VdVDOMpPZjGVusg==", "dev": true, "requires": { "@commitlint/format": "^16.0.0", @@ -17485,9 +17505,9 @@ "dev": true }, "@node-rs/helper": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@node-rs/helper/-/helper-1.3.0.tgz", - "integrity": "sha512-KPS0EBA1bXtf96IL7wr5bFHxhL2KCZ6kI/hkyLG7nzEq2cDq8pJhOhcJDOLXIPh5J2LEJ5eXyjDTWDFg5eRypw==", + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/@node-rs/helper/-/helper-1.3.2.tgz", + "integrity": "sha512-cjP3xk/x8YQP4bsg9CdzxC86olR2lLkTUR1LB9UtOZElMht3SzE/+X3ZYJfIeOzxfKcDA4uABg+/1JRgkx/Puw==", "dev": true, "requires": { "@napi-rs/triples": "^1.1.0" @@ -17644,23 +17664,23 @@ } }, "@prisma/client": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/@prisma/client/-/client-3.7.0.tgz", - "integrity": "sha512-fUJMvBOX5C7JPc0e3CJD6Gbelbu4dMJB4ScYpiht8HMUnRShw20ULOipTopjNtl6ekHQJ4muI7pXlQxWS9nMbw==", + "version": "3.8.0", + "resolved": "https://registry.npmjs.org/@prisma/client/-/client-3.8.0.tgz", + "integrity": "sha512-odYAbzfGvVWpDxhk2Yb03DlcCg6zKgJjt5admcp4xtr7u0f76B2NppC4TSGxvdQUGzPI6G37afu2oZCb/uwGfg==", "requires": { - "@prisma/engines-version": "3.7.0-31.8746e055198f517658c08a0c426c7eec87f5a85f" + "@prisma/engines-version": "3.8.0-43.34df67547cf5598f5a6cd3eb45f14ee70c3fb86f" } }, "@prisma/engines": { - "version": "3.7.0-31.8746e055198f517658c08a0c426c7eec87f5a85f", - "resolved": "https://registry.npmjs.org/@prisma/engines/-/engines-3.7.0-31.8746e055198f517658c08a0c426c7eec87f5a85f.tgz", - "integrity": "sha512-W549ub5NlgexNhR8EFstA/UwAWq3Zq0w9aNkraqsozVCt2CsX+lK4TK7IW5OZVSnxHwRjrgEAt3r9yPy8nZQRg==", + "version": "3.8.0-43.34df67547cf5598f5a6cd3eb45f14ee70c3fb86f", + "resolved": "https://registry.npmjs.org/@prisma/engines/-/engines-3.8.0-43.34df67547cf5598f5a6cd3eb45f14ee70c3fb86f.tgz", + "integrity": "sha512-bHYubuItSN/DGYo36aDu7xJiJmK52JOSHs4MK+KbceAtwS20BCWadRgtpQ3iZ2EXfN/B1T0iCXlNraaNwnpU2w==", "devOptional": true }, "@prisma/engines-version": { - "version": "3.7.0-31.8746e055198f517658c08a0c426c7eec87f5a85f", - "resolved": "https://registry.npmjs.org/@prisma/engines-version/-/engines-version-3.7.0-31.8746e055198f517658c08a0c426c7eec87f5a85f.tgz", - "integrity": "sha512-+qx2b+HK7BKF4VCa0LZ/t1QCXsu6SmvhUQyJkOD2aPpmOzket4fEnSKQZSB0i5tl7rwCDsvAiSeK8o7rf+yvwg==" + "version": "3.8.0-43.34df67547cf5598f5a6cd3eb45f14ee70c3fb86f", + "resolved": "https://registry.npmjs.org/@prisma/engines-version/-/engines-version-3.8.0-43.34df67547cf5598f5a6cd3eb45f14ee70c3fb86f.tgz", + "integrity": "sha512-G2JH6yWt6ixGKmsRmVgaQYahfwMopim0u/XLIZUo2o/mZ5jdu7+BL+2V5lZr7XiG1axhyrpvlyqE/c0OgYSl3g==" }, "@saithodev/semantic-release-backmerge": { "version": "2.1.0", @@ -17827,125 +17847,125 @@ } }, "@swc/core": { - "version": "1.2.127", - "resolved": "https://registry.npmjs.org/@swc/core/-/core-1.2.127.tgz", - "integrity": "sha512-JF2xOOPgKT1XRs5eXiKAk2kV7BwJvPTIfBT79Pk3cEEQzDgxGSs3spVWXHA0EhCbh1MquJgR7bElt0Pyk/CRbg==", + "version": "1.2.129", + "resolved": "https://registry.npmjs.org/@swc/core/-/core-1.2.129.tgz", + "integrity": "sha512-Ay2Vt/uI+vRn6Nu5nRTjcuRlXejN5VfYOCCsNGqA5DIrhO0VSwxyOncL/kYlGtzE5XhYBE5eU8QIkRC+koI/fw==", "dev": true, "requires": { "@node-rs/helper": "^1.0.0", - "@swc/core-android-arm-eabi": "1.2.127", - "@swc/core-android-arm64": "1.2.127", - "@swc/core-darwin-arm64": "1.2.127", - "@swc/core-darwin-x64": "1.2.127", - "@swc/core-freebsd-x64": "1.2.127", - "@swc/core-linux-arm-gnueabihf": "1.2.127", - "@swc/core-linux-arm64-gnu": "1.2.127", - "@swc/core-linux-arm64-musl": "1.2.127", - "@swc/core-linux-x64-gnu": "1.2.127", - "@swc/core-linux-x64-musl": "1.2.127", - "@swc/core-win32-arm64-msvc": "1.2.127", - "@swc/core-win32-ia32-msvc": "1.2.127", - "@swc/core-win32-x64-msvc": "1.2.127" + "@swc/core-android-arm-eabi": "1.2.129", + "@swc/core-android-arm64": "1.2.129", + "@swc/core-darwin-arm64": "1.2.129", + "@swc/core-darwin-x64": "1.2.129", + "@swc/core-freebsd-x64": "1.2.129", + "@swc/core-linux-arm-gnueabihf": "1.2.129", + "@swc/core-linux-arm64-gnu": "1.2.129", + "@swc/core-linux-arm64-musl": "1.2.129", + "@swc/core-linux-x64-gnu": "1.2.129", + "@swc/core-linux-x64-musl": "1.2.129", + "@swc/core-win32-arm64-msvc": "1.2.129", + "@swc/core-win32-ia32-msvc": "1.2.129", + "@swc/core-win32-x64-msvc": "1.2.129" } }, "@swc/core-android-arm-eabi": { - "version": "1.2.127", - "resolved": "https://registry.npmjs.org/@swc/core-android-arm-eabi/-/core-android-arm-eabi-1.2.127.tgz", - "integrity": "sha512-/bF4gupb+96Fi1FmcGFRig9zToQrAIH/2+NgZMDlCESJP1Dio/bbAB59vPllXgTsfvAQsbv26sScm4VmBmgttw==", + "version": "1.2.129", + "resolved": "https://registry.npmjs.org/@swc/core-android-arm-eabi/-/core-android-arm-eabi-1.2.129.tgz", + "integrity": "sha512-5/q+32xm9Ile5NWJeGKa3UhPrMxjx6rVph7yauJlzOOxPsE3v7vhKhBFBkNMzlscoKbC4PFyu54xaRR8TTvrww==", "dev": true, "optional": true }, "@swc/core-android-arm64": { - "version": "1.2.127", - "resolved": "https://registry.npmjs.org/@swc/core-android-arm64/-/core-android-arm64-1.2.127.tgz", - "integrity": "sha512-DqSSjaRrZaY23vbYEBwjU0WxPSfAgnabJK8Dx08DQmTrUXAbsvWkF7QyVdsdZuroC1GiJui/slT33xxNnLVVBg==", + "version": "1.2.129", + "resolved": "https://registry.npmjs.org/@swc/core-android-arm64/-/core-android-arm64-1.2.129.tgz", + "integrity": "sha512-e8n8g5BLQFXxOP/t6KY5JlK/40L+opjZyUZb3NHLuvFct7p9j5QpSPR8jkDYBPzvD75N7cPNE1KxPaU7QT5qYQ==", "dev": true, "optional": true }, "@swc/core-darwin-arm64": { - "version": "1.2.127", - "resolved": "https://registry.npmjs.org/@swc/core-darwin-arm64/-/core-darwin-arm64-1.2.127.tgz", - "integrity": "sha512-9aAS7CZzKKHngdN9eHMDveoVcoiyq6EYRGi46CrRDwiEdZ14DzznYlJ37I71cUz1vHapb4YbIWN5/jxb34r/RA==", + "version": "1.2.129", + "resolved": "https://registry.npmjs.org/@swc/core-darwin-arm64/-/core-darwin-arm64-1.2.129.tgz", + "integrity": "sha512-l86EpZb73PKFaOYR1Wsd3kXCz1/vgBrBLGB9JzKNTiH0yVDtRWl5PonMhntUBdg6AzwZToyeAumLWZ3Xo21GqQ==", "dev": true, "optional": true }, "@swc/core-darwin-x64": { - "version": "1.2.127", - "resolved": "https://registry.npmjs.org/@swc/core-darwin-x64/-/core-darwin-x64-1.2.127.tgz", - "integrity": "sha512-GSZHGEhpjWStOdpAJvOPZmIEHTksbKezwnNEq1M27lNaiT8dPfrBWi28z/NfQp8HEpEi5U7hTB41PPIXT66MUA==", + "version": "1.2.129", + "resolved": "https://registry.npmjs.org/@swc/core-darwin-x64/-/core-darwin-x64-1.2.129.tgz", + "integrity": "sha512-yd1hMErfoF4xrjt9jj/qWDtR74/5eCDc4+kSbe/hkZ4lCXaYpE8Po962trPgUd+mCLkW58ElArGP3uEPXvJofQ==", "dev": true, "optional": true }, "@swc/core-freebsd-x64": { - "version": "1.2.127", - "resolved": "https://registry.npmjs.org/@swc/core-freebsd-x64/-/core-freebsd-x64-1.2.127.tgz", - "integrity": "sha512-BJBmcWCSZbdkyq+ZDxvzkvqtz67wgLDsVuAfpIdCEw1KoFTJSxwc6K7dKZqfd68xULnj2aHRFZr0SyK3kXeirg==", + "version": "1.2.129", + "resolved": "https://registry.npmjs.org/@swc/core-freebsd-x64/-/core-freebsd-x64-1.2.129.tgz", + "integrity": "sha512-u0ONxga6YOH1Bt0nihwtWPjLM/nB0x1RfK5R/J1xTZyV3d5AMu4Dp2LQi37K6gT9BIto/h7h2wTuHtgqhIDA+g==", "dev": true, "optional": true }, "@swc/core-linux-arm-gnueabihf": { - "version": "1.2.127", - "resolved": "https://registry.npmjs.org/@swc/core-linux-arm-gnueabihf/-/core-linux-arm-gnueabihf-1.2.127.tgz", - "integrity": "sha512-wE6JzkbmQ7Kq5U/BRyE1893//MRrpees7bNvcION5rq9Yd0on2XY7ifaSlGeEEMgO/RRIsHXUJTUjsfY4XVvMQ==", + "version": "1.2.129", + "resolved": "https://registry.npmjs.org/@swc/core-linux-arm-gnueabihf/-/core-linux-arm-gnueabihf-1.2.129.tgz", + "integrity": "sha512-Tr3IwKRASqSFJnv1NV+fHunIGh0lqRY89GDwEiGbWnEiEIrviRdFdQd3w+zJk3SQFj9raaZTZoWuAfHduePSwg==", "dev": true, "optional": true }, "@swc/core-linux-arm64-gnu": { - "version": "1.2.127", - "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-gnu/-/core-linux-arm64-gnu-1.2.127.tgz", - "integrity": "sha512-oenvsF18KUNiNvDxHmUwY3uXJoqeienSAPAiWQfThrNOyadVLeKs6ecmkFxoCEZOV05gek4A/hBHImdby0UTcw==", + "version": "1.2.129", + "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-gnu/-/core-linux-arm64-gnu-1.2.129.tgz", + "integrity": "sha512-r0SrNxI1ZLZLvkl3a2UeGBEGiylL9XKKFbrlWebvgsZcRA3fzBiuJ3NVHO0PzE4S4+KvV73sCwA9MusFv28jvQ==", "dev": true, "optional": true }, "@swc/core-linux-arm64-musl": { - "version": "1.2.127", - "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-musl/-/core-linux-arm64-musl-1.2.127.tgz", - "integrity": "sha512-R371z8YH3t0uevQA8AfimS5GwBHwoPifpsKjl3sH1LXlYEm+XAw/yUe/z/bRBUx465IhqdNW+ZrUswCtxo1fVw==", + "version": "1.2.129", + "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-musl/-/core-linux-arm64-musl-1.2.129.tgz", + "integrity": "sha512-8BBLmBDsGm+/rrZ8AAk9AktemnVxe1m9csZ5OElzyvqcsHWjqfION657Ae1UEzUtFTzdeP5Lx0WeEqigBu2W8A==", "dev": true, "optional": true }, "@swc/core-linux-x64-gnu": { - "version": "1.2.127", - "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.2.127.tgz", - "integrity": "sha512-QAn3KVRQOKmvJxUb/0gNcb4BeFfBVWV+Ry5o4HMfnxdRSLl7sGlDYAbH7V2atM6P/4OT5cpiorQvjCdOXNSS1Q==", + "version": "1.2.129", + "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.2.129.tgz", + "integrity": "sha512-iL4sM+0pLD0V2H6QJrkFpvL6hjWzjEMww8peXG/+0b1jXleD0GuN+NuguMmZHEbr64+uqm2KFA9ctKyTBH9aQQ==", "dev": true, "optional": true }, "@swc/core-linux-x64-musl": { - "version": "1.2.127", - "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.2.127.tgz", - "integrity": "sha512-UeBPFWXndeefjcsoW6JBwT5aSdGQpaqqoiA1Sa7aHa87O/Egun2dMawGhTqbyzeKapS70rcZlvaY9UCHj2TEiQ==", + "version": "1.2.129", + "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.2.129.tgz", + "integrity": "sha512-4RKrA1KhQVx6no5AxO7lqwnijYAx1GQ1v0xywiiYSrQkDxi2Q+yAqxDvWS9UT2LtEaOO9HzCr3vWEoHp+wDd2w==", "dev": true, "optional": true }, "@swc/core-win32-arm64-msvc": { - "version": "1.2.127", - "resolved": "https://registry.npmjs.org/@swc/core-win32-arm64-msvc/-/core-win32-arm64-msvc-1.2.127.tgz", - "integrity": "sha512-4S7LZvOo0k121dXZgfE9Rs4DYNOmLy9OXI4kB5wk52B4llfzNhiZjARwqI4f5oqk8znyOuPV8JIzDUnNPzxkTA==", + "version": "1.2.129", + "resolved": "https://registry.npmjs.org/@swc/core-win32-arm64-msvc/-/core-win32-arm64-msvc-1.2.129.tgz", + "integrity": "sha512-Qrh0vytLHzkZezHemNcZFQSj3AQ559WA35Dwzt7BO6a0UvwjHAJHdKSIaF8pYeVdr44VcwqcS0BO9D7rDHWNkQ==", "dev": true, "optional": true }, "@swc/core-win32-ia32-msvc": { - "version": "1.2.127", - "resolved": "https://registry.npmjs.org/@swc/core-win32-ia32-msvc/-/core-win32-ia32-msvc-1.2.127.tgz", - "integrity": "sha512-7oM0G+1KASIEujhBYD/a6xDwFFhN31pZ34rEfrXvu+lGlx0e5i0q/vHI9fXkxNimMpePCQJ21aTIeCxs0HzZ6g==", + "version": "1.2.129", + "resolved": "https://registry.npmjs.org/@swc/core-win32-ia32-msvc/-/core-win32-ia32-msvc-1.2.129.tgz", + "integrity": "sha512-wXUqCoQeH0ktOEPkAJXwt4KAhrChmDJD82ydJzkrDFyFyQnY5axBFDLX1XespsI5eNRxzag/FemewMbagnHoSw==", "dev": true, "optional": true }, "@swc/core-win32-x64-msvc": { - "version": "1.2.127", - "resolved": "https://registry.npmjs.org/@swc/core-win32-x64-msvc/-/core-win32-x64-msvc-1.2.127.tgz", - "integrity": "sha512-AglGNIi5VYJEbrqWiA0VbrKFG0Xta6yBLCy39XQgImgL8yl3R586vNRts+kPv2+hC2MOx9yr8eUXFnKpBCr9hA==", + "version": "1.2.129", + "resolved": "https://registry.npmjs.org/@swc/core-win32-x64-msvc/-/core-win32-x64-msvc-1.2.129.tgz", + "integrity": "sha512-SqfiGn1KTlunTK42gtJ7XUP0IaVkYKQAfBEP6PT+t5xoQVcxOla5lR8cvoN5b2wQkFUL/yLkc+HuFjzi5vdppg==", "dev": true, "optional": true }, "@swc/jest": { - "version": "0.2.15", - "resolved": "https://registry.npmjs.org/@swc/jest/-/jest-0.2.15.tgz", - "integrity": "sha512-Ja+YCVPOGPX/nFnPvPKaWpx2HUwrtuvHP1onHOey1gNGhq8CktQ7xQhCFSuyYBQJiW3WOZ+qMsv3aZk1XUBSOg==", + "version": "0.2.17", + "resolved": "https://registry.npmjs.org/@swc/jest/-/jest-0.2.17.tgz", + "integrity": "sha512-n/g989+O8xxMcTZnP0phDrrgezGZBQBf7cX4QuzEsn07QkWbqmMsfaCxdF0kzajXublXWJ8yk5vRe3VNk1tczA==", "dev": true, "requires": { - "@jest/create-cache-key-function": "^27.3.1" + "@jest/create-cache-key-function": "^27.4.2" } }, "@szmarczak/http-timer": { @@ -17957,6 +17977,14 @@ "defer-to-connect": "^1.0.1" } }, + "@thream/socketio-jwt": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@thream/socketio-jwt/-/socketio-jwt-2.1.1.tgz", + "integrity": "sha512-HqqJmR5bRb5ks/V7ABKfpA3gJuUYO6QA0VIl8wiAD+1ow3EQLIM0HNWtyooKPcBpiQRqfrJi2YuKenURFAhD7w==", + "requires": { + "jsonwebtoken": "8.5.1" + } + }, "@tootallnate/once": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz", @@ -18035,9 +18063,9 @@ "dev": true }, "@types/busboy": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/@types/busboy/-/busboy-0.3.1.tgz", - "integrity": "sha512-8BPLNy4x+7lbTOGkAyUIZrrPEZ7WzbO7YlVGMf9EZi9J9mqILEkYbt/kgVWQ7fizOISo1hM/7cAsWVTa7EhQDg==", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@types/busboy/-/busboy-1.3.0.tgz", + "integrity": "sha512-Qx7ehfGO/k2yiTVpRIVIu16oVgbJpG65WLjEhbNSoTPdQEoRCorFUKHsSznyHmIkdvzOg2W3JWeewCmfSwcgeA==", "dev": true, "requires": { "@types/node": "*" @@ -18096,9 +18124,9 @@ }, "dependencies": { "rxjs": { - "version": "7.5.1", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.5.1.tgz", - "integrity": "sha512-KExVEeZWxMZnZhUZtsJcFwz8IvPvgu4G2Z2QyqjZQzUGr32KDYuSxrEYO4w3tFFNbfLozcrKUTvTPi+E9ywJkQ==", + "version": "7.5.2", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.5.2.tgz", + "integrity": "sha512-PwDt186XaL3QN5qXj/H9DGyHhP3/RYYgZZwqBv9Tv8rsAaiwFH1IsJJlcgD37J7UW5a6O67qX0KWKS3/pu0m4w==", "dev": true, "requires": { "tslib": "^2.1.0" @@ -18153,9 +18181,9 @@ "dev": true }, "@types/jsonwebtoken": { - "version": "8.5.6", - "resolved": "https://registry.npmjs.org/@types/jsonwebtoken/-/jsonwebtoken-8.5.6.tgz", - "integrity": "sha512-+P3O/xC7nzVizIi5VbF34YtqSonFsdnbXBnWUCYRiKOi1f9gA4sEFvXkrGr/QVV23IbMYvcoerI7nnhDUiWXRQ==", + "version": "8.5.7", + "resolved": "https://registry.npmjs.org/@types/jsonwebtoken/-/jsonwebtoken-8.5.7.tgz", + "integrity": "sha512-CBHN+1unePowgS94ayLE7aVp7AfyhgG/3l2O+AjkhOMY4kAAfVI1OnbbLnOeDMAdTNLP5ZjJ3kdZanRtRQaK3Q==", "dev": true, "requires": { "@types/node": "*" @@ -18209,9 +18237,9 @@ "dev": true }, "@types/prettier": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.4.2.tgz", - "integrity": "sha512-ekoj4qOQYp7CvjX8ZDBgN86w3MqQhLE1hczEJbEIjgFEumDy+na/4AJAbLXfgEWFNB2pKadM5rPFtuSGMWK7xA==", + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.4.3.tgz", + "integrity": "sha512-QzSuZMBuG5u8HqYz01qtMdg/Jfctlnvj1z/lYnIDXs/golxw0fxtRAHd9KrzjR7Yxz1qVeI00o0kiO3PmVdJ9w==", "dev": true }, "@types/retry": { @@ -18955,9 +18983,9 @@ } }, "caniuse-lite": { - "version": "1.0.30001296", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001296.tgz", - "integrity": "sha512-WfrtPEoNSoeATDlf4y3QvkwiELl9GyPLISV5GejTbbQRtQx4LhsXmc9IQ6XCL2d7UxCyEzToEZNMeqR79OUw8Q==", + "version": "1.0.30001299", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001299.tgz", + "integrity": "sha512-iujN4+x7QzqA2NCSrS5VUy+4gLmRd4xv6vbBBsmfVqTx8bLAD8097euLqQgKxSVLvxjSDcvF1T/i9ocgnUFexw==", "dev": true }, "capital-case": { @@ -19102,13 +19130,12 @@ "dev": true }, "cli-table3": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.6.0.tgz", - "integrity": "sha512-gnB85c3MGC7Nm9I/FkiasNBOKjOiO1RNuXXarQms37q4QMpWdlbBgD/VnOStA2faG1dpXMv31RFApjX1/QdgWQ==", + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.6.1.tgz", + "integrity": "sha512-w0q/enDHhPLq44ovMGdQeeDLvwxwavsJX7oQGYt/LrBlYsyaxyDnp6z3QzFut/6kLLKnlcUVJLrpB7KBfgG/RA==", "dev": true, "requires": { - "colors": "^1.1.2", - "object-assign": "^4.1.0", + "colors": "1.4.0", "string-width": "^4.2.0" }, "dependencies": { @@ -19809,9 +19836,9 @@ } }, "dotenv": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-10.0.0.tgz", - "integrity": "sha512-rlBi9d8jpv9Sf1klPjNfFAuWDjKLwTIJJ/VxtoTwIR6hnZxcEOQCZg2oIL3MWBYw5GpUDKOEnND7LXTbIpQ03Q==" + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-11.0.0.tgz", + "integrity": "sha512-Fp/b504Y5W+e+FpCxTFMUZ7ZEQkQYF0rx+KZtmwixJxGQbLHrhCwo3FjZgNC8vIfrSi29PABNbMoCGD9YoiXbQ==" }, "duplexer2": { "version": "0.1.4", @@ -19860,6 +19887,12 @@ "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=", "dev": true }, + "eastasianwidth": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", + "dev": true + }, "ecdsa-sig-formatter": { "version": "1.0.11", "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz", @@ -19893,9 +19926,9 @@ } }, "electron-to-chromium": { - "version": "1.4.36", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.36.tgz", - "integrity": "sha512-MbLlbF39vKrXWlFEFpCgDHwdlz4O3LmHM5W4tiLRHjSmEUXjJjz8sZkMgWgvYxlZw3N1iDTmCEtOkkESb5TMCg==", + "version": "1.4.44", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.44.tgz", + "integrity": "sha512-tHGWiUUmY7GABK8+DNcr474cnZDTzD8x1736SlDosVH8+/vRJeqfaIBAEHFtMjddz/0T4rKKYsxEc8BwQRdBpw==", "dev": true }, "emittery": { @@ -19929,9 +19962,9 @@ } }, "engine.io": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-6.1.0.tgz", - "integrity": "sha512-ErhZOVu2xweCjEfYcTdkCnEYUiZgkAcBBAhW4jbIvNG8SLU3orAqoJCiytZjYF7eTpVmmCrLDjLIEaPlUAs1uw==", + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-6.1.1.tgz", + "integrity": "sha512-AyMc20q8JUUdvKd46+thc9o7yCZ6iC6MoBCChG5Z1XmFMpp+2+y/oKvwpZTUJB0KCjxScw1dV9c2h5pjiYBLuQ==", "requires": { "@types/cookie": "^0.4.1", "@types/cors": "^2.8.12", @@ -20640,9 +20673,9 @@ "dev": true }, "fast-glob": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.7.tgz", - "integrity": "sha512-rYGMRwip6lUMvYD3BTScMwT1HtAs2d71SMv66Vrxs0IekGZEjhM0pcMfjQPnknBt2zeCwQMEupiN02ZP4DiT1Q==", + "version": "3.2.10", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.10.tgz", + "integrity": "sha512-s9nFhFnvR63wls6/kM88kQqDhMu0AfdjqouE2l5GVQPbqLgyFjjU5ry/r2yKsJxpb9Py1EYNqieFrmMaX4v++A==", "dev": true, "requires": { "@nodelib/fs.stat": "^2.0.2", @@ -20721,12 +20754,12 @@ "integrity": "sha512-oCfpcsDndgnDVgiI7bwFKAun2dO+4h84vBlkWsWnz/OUK9Reff5UFoFl241xTiLeHWX/vU9zkDVXqYUxjOwHcQ==" }, "fastify-helmet": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/fastify-helmet/-/fastify-helmet-5.3.2.tgz", - "integrity": "sha512-X9lKZa7wjvMe79eUP0Fo+3GMMmbxKC92ddJGdmSIEZxn0JwSw+Fw5mlOiM9RABRQGphdLDSHIL/29ywH7GUusQ==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/fastify-helmet/-/fastify-helmet-6.0.0.tgz", + "integrity": "sha512-BHU3QvpvlDlrhBpkGQYTctgwg6jqmCU3uQLqzz1C/AnrjSB2JQ+ukJPgaiQgcLAqejktHy0zQcqszSHEv4iHrA==", "requires": { "fastify-plugin": "^3.0.0", - "helmet": "^4.0.0" + "helmet": "^5.0.1" } }, "fastify-multipart": { @@ -20811,9 +20844,9 @@ } }, "fastify-swagger": { - "version": "4.13.0", - "resolved": "https://registry.npmjs.org/fastify-swagger/-/fastify-swagger-4.13.0.tgz", - "integrity": "sha512-HQ4059nlrOaJ20opGP+9KXBtxobEgovLOov2BPsqaNkLpFyPcddoYoLeiQur4YuB53rxUE1mnGMLIPXKwvcwbg==", + "version": "4.13.1", + "resolved": "https://registry.npmjs.org/fastify-swagger/-/fastify-swagger-4.13.1.tgz", + "integrity": "sha512-9MQ+YVo/2F9Bg2tXs5POccHau5znmHaneggjoyinqumD+n7wClu4uYwV8cNMikdr7zvoepVaYedPue1xHQwsgg==", "requires": { "fastify-plugin": "^3.0.0", "fastify-static": "^4.0.0", @@ -21004,9 +21037,9 @@ "dev": true }, "follow-redirects": { - "version": "1.14.6", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.14.6.tgz", - "integrity": "sha512-fhUl5EwSJbbl8AR+uYL2KQDxLkdSjZGR36xy46AO7cOMTrCMON6Sa28FmAnC2tRTDbd/Uuzz3aJBv7EBN7JH8A==" + "version": "1.14.7", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.14.7.tgz", + "integrity": "sha512-+hbxoLbFMbRKDwohX8GkTataGqO6Jb7jGwpAlwgy2bIz25XtRm7KEzJM76R1WiNT5SwZkX4Y75SwBolkpmE7iQ==" }, "for-in": { "version": "1.0.2", @@ -21340,16 +21373,16 @@ } }, "globby": { - "version": "11.0.4", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.0.4.tgz", - "integrity": "sha512-9O4MVG9ioZJ08ffbcyVYyLOJLk5JQ688pJ4eMGLpdWLHq/Wr1D9BlriLQyL0E+jbkuePVZXYFj47QM/v093wHg==", + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", "dev": true, "requires": { "array-union": "^2.1.0", "dir-glob": "^3.0.1", - "fast-glob": "^3.1.1", - "ignore": "^5.1.4", - "merge2": "^1.3.0", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", "slash": "^3.0.0" } }, @@ -21468,9 +21501,9 @@ } }, "helmet": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/helmet/-/helmet-4.6.0.tgz", - "integrity": "sha512-HVqALKZlR95ROkrnesdhbbZJFi/rIVSoNq6f3jA/9u6MIbTsPh3xZwihjeI5+DO/2sOV6HMHooXcEOuwskHpTg==" + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/helmet/-/helmet-5.0.1.tgz", + "integrity": "sha512-iyYpGYH2nbQVaQtauYDnemWg45S2RyGvJ+iKj+V9jp7Dc1NTtAJHmD+hFOSYS7Xdwe1GeyVEYSydggXLOg6TKQ==" }, "hexoid": { "version": "1.0.0", @@ -21761,9 +21794,9 @@ } }, "rxjs": { - "version": "7.5.1", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.5.1.tgz", - "integrity": "sha512-KExVEeZWxMZnZhUZtsJcFwz8IvPvgu4G2Z2QyqjZQzUGr32KDYuSxrEYO4w3tFFNbfLozcrKUTvTPi+E9ywJkQ==", + "version": "7.5.2", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.5.2.tgz", + "integrity": "sha512-PwDt186XaL3QN5qXj/H9DGyHhP3/RYYgZZwqBv9Tv8rsAaiwFH1IsJJlcgD37J7UW5a6O67qX0KWKS3/pu0m4w==", "dev": true, "requires": { "tslib": "^2.1.0" @@ -23150,9 +23183,9 @@ } }, "lint-staged": { - "version": "12.1.5", - "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-12.1.5.tgz", - "integrity": "sha512-WyKb+0sNKDTd1LwwAfTBPp0XmdaKkAOEbg4oHE4Kq2+oQVchg/VAcjVQtSqZih1izNsTURjc2EkhG/syRQUXdA==", + "version": "12.1.7", + "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-12.1.7.tgz", + "integrity": "sha512-bltv/ejiLWtowExpjU+s5z8j1Byjg9AlmaAjMmqNbIicY69u6sYIwXGg0dCn0TlkrrY2CphtHIXAkbZ+1VoWQQ==", "dev": true, "requires": { "cli-truncate": "^3.1.0", @@ -23223,9 +23256,9 @@ "dev": true }, "rxjs": { - "version": "7.5.1", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.5.1.tgz", - "integrity": "sha512-KExVEeZWxMZnZhUZtsJcFwz8IvPvgu4G2Z2QyqjZQzUGr32KDYuSxrEYO4w3tFFNbfLozcrKUTvTPi+E9ywJkQ==", + "version": "7.5.2", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.5.2.tgz", + "integrity": "sha512-PwDt186XaL3QN5qXj/H9DGyHhP3/RYYgZZwqBv9Tv8rsAaiwFH1IsJJlcgD37J7UW5a6O67qX0KWKS3/pu0m4w==", "dev": true, "requires": { "tslib": "^2.1.0" @@ -26762,12 +26795,12 @@ } }, "prisma": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/prisma/-/prisma-3.7.0.tgz", - "integrity": "sha512-pzgc95msPLcCHqOli7Hnabu/GRfSGSUWl5s2P6N13T/rgMB+NNeKbxCmzQiZT2yLOeLEPivV6YrW1oeQIwJxcg==", + "version": "3.8.0", + "resolved": "https://registry.npmjs.org/prisma/-/prisma-3.8.0.tgz", + "integrity": "sha512-xLmVyO/L6C4ZdHzHqiJVq3ZfDWSym29x75JcwJx746ps61UcNEg4ozSwN9ud7UjXLntdXe1xDLNOUO1lc7LN5g==", "devOptional": true, "requires": { - "@prisma/engines": "3.7.0-31.8746e055198f517658c08a0c426c7eec87f5a85f" + "@prisma/engines": "3.8.0-43.34df67547cf5598f5a6cd3eb45f14ee70c3fb86f" } }, "process-nextick-args": { @@ -27842,13 +27875,13 @@ "integrity": "sha512-/q/8Q4Bl4ZKAPjj8WerIBJWALKkaPRfrvhfF8k/B23i4nzrlRj2/go1m90In7nG/3XDSbOo0+pu6RvCTM9RGMQ==" }, "string-width": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.0.1.tgz", - "integrity": "sha512-5ohWO/M4//8lErlUUtrFy3b11GtNOuMOU0ysKCDXFcfXuuvUXu95akgj/i8ofmaGdN0hCqyl6uu9i8dS/mQp5g==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.0.tgz", + "integrity": "sha512-7x54QnN21P+XL/v8SuNKvfgsUre6PXpN7mc77N3HlZv+f1SBRGmjxtOud2Z6FZ8DmdkD/IdjCaf9XXbnqmTZGQ==", "dev": true, "requires": { + "eastasianwidth": "^0.2.0", "emoji-regex": "^9.2.2", - "is-fullwidth-code-point": "^4.0.0", "strip-ansi": "^7.0.1" }, "dependencies": { @@ -28503,9 +28536,9 @@ "dev": true }, "v8-to-istanbul": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-8.1.0.tgz", - "integrity": "sha512-/PRhfd8aTNp9Ggr62HPzXg2XasNFGy5PBt0Rp04du7/8GNNSgxFL6WBTkgMKSL9bFjH+8kKEG3f37FmxiTqUUA==", + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-8.1.1.tgz", + "integrity": "sha512-FGtKtv3xIpR6BYhvgH8MI/y78oT7d8Au3ww4QIxymrCtZEh5b8gCw2siywE+puhEmuWKDtmfrvF5UlB298ut3w==", "dev": true, "requires": { "@types/istanbul-lib-coverage": "^2.0.1", diff --git a/package.json b/package.json index 57b4d2e..1357733 100644 --- a/package.json +++ b/package.json @@ -18,7 +18,7 @@ "generate": "plop", "lint:commit": "commitlint", "lint:editorconfig": "editorconfig-checker", - "lint:markdown": "markdownlint '**/*.md' --dot --ignore 'node_modules'", + "lint:markdown": "markdownlint '**/*.md' --dot --ignore-path '.gitignore'", "lint:typescript": "eslint '**/*.{js,ts,jsx,tsx}'", "lint:prettier": "prettier '.' --check", "lint:staged": "lint-staged", @@ -31,21 +31,22 @@ "postinstall": "husky install" }, "dependencies": { - "@prisma/client": "3.7.0", + "@prisma/client": "3.8.0", "@sinclair/typebox": "0.23.2", + "@thream/socketio-jwt": "2.1.1", "axios": "0.24.0", "bcryptjs": "2.4.3", - "dotenv": "10.0.0", + "dotenv": "11.0.0", "ejs": "3.1.6", "fastify": "3.25.3", "fastify-cors": "6.0.2", - "fastify-helmet": "5.3.2", + "fastify-helmet": "6.0.0", "fastify-multipart": "5.2.1", "fastify-plugin": "3.0.0", "fastify-rate-limit": "5.7.0", "fastify-sensible": "3.1.2", "fastify-static": "4.5.0", - "fastify-swagger": "4.13.0", + "fastify-swagger": "4.13.1", "fastify-url-data": "3.0.3", "http-errors": "2.0.0", "jsonwebtoken": "8.5.1", @@ -55,18 +56,18 @@ "socket.io": "4.4.1" }, "devDependencies": { - "@commitlint/cli": "16.0.1", + "@commitlint/cli": "16.0.2", "@commitlint/config-conventional": "16.0.0", "@saithodev/semantic-release-backmerge": "2.1.0", "@swc/cli": "0.1.55", - "@swc/core": "1.2.127", - "@swc/jest": "0.2.15", + "@swc/core": "1.2.129", + "@swc/jest": "0.2.17", "@types/bcryptjs": "2.4.2", - "@types/busboy": "0.3.1", + "@types/busboy": "1.3.0", "@types/ejs": "3.1.0", "@types/http-errors": "1.8.1", "@types/jest": "27.4.0", - "@types/jsonwebtoken": "8.5.6", + "@types/jsonwebtoken": "8.5.7", "@types/ms": "0.7.31", "@types/node": "17.0.8", "@types/nodemailer": "6.4.4", @@ -86,12 +87,12 @@ "jest": "27.4.7", "jest-mock-extended": "2.0.4", "jest-ts-webcompat-resolver": "1.0.0", - "lint-staged": "12.1.5", + "lint-staged": "12.1.7", "markdownlint-cli": "0.30.0", "nodemon": "2.0.15", "plop": "3.0.5", "prettier": "2.5.1", - "prisma": "3.7.0", + "prisma": "3.8.0", "rimraf": "3.0.2", "semantic-release": "18.0.1", "typescript": "4.5.4" diff --git a/src/services/channels/[channelId]/messages/post.ts b/src/services/channels/[channelId]/messages/post.ts index aacc09d..5d6c791 100644 --- a/src/services/channels/[channelId]/messages/post.ts +++ b/src/services/channels/[channelId]/messages/post.ts @@ -102,7 +102,7 @@ export const postMessageByChannelIdService: FastifyPluginAsync = async ( } }) reply.statusCode = 201 - return { + const item = { ...message, member: { ...memberCheck, @@ -112,6 +112,12 @@ export const postMessageByChannelIdService: FastifyPluginAsync = async ( } } } + await fastify.io.emitToMembers({ + event: 'messages', + guildId: item.member.guildId, + payload: { action: 'create', item } + }) + return item } }) } diff --git a/src/services/channels/[channelId]/messages/uploads/post.ts b/src/services/channels/[channelId]/messages/uploads/post.ts index 48a48de..7c111c8 100644 --- a/src/services/channels/[channelId]/messages/uploads/post.ts +++ b/src/services/channels/[channelId]/messages/uploads/post.ts @@ -107,7 +107,7 @@ export const postMessageUploadsByChannelIdService: FastifyPluginAsync = async ( } }) reply.statusCode = 201 - return { + const item = { ...message, member: { ...memberCheck, @@ -117,6 +117,12 @@ export const postMessageUploadsByChannelIdService: FastifyPluginAsync = async ( } } } + await fastify.io.emitToMembers({ + event: 'messages', + guildId: item.member.guildId, + payload: { action: 'create', item } + }) + return item } }) } diff --git a/src/tools/plugins/socket-io.ts b/src/tools/plugins/socket-io.ts index 7026b95..12a2194 100644 --- a/src/tools/plugins/socket-io.ts +++ b/src/tools/plugins/socket-io.ts @@ -1,18 +1,88 @@ import fastifyPlugin from 'fastify-plugin' import { Server as SocketIoServer, ServerOptions } from 'socket.io' +import { authorize } from '@thream/socketio-jwt' + +import prisma from '../database/prisma.js' +import { JWT_ACCESS_SECRET } from '../configurations/index.js' + +interface EmitEventOptions { + event: string + payload: { + action: 'create' | 'delete' | 'update' + item: object + } +} + +interface EmitToAuthorizedUsersOptions extends EmitEventOptions { + /** tests whether the current connected userId is authorized to get the event, if the callback returns true, the server will emit the event to that user */ + isAuthorizedCallback: (userId: number) => Promise +} + +type EmitToAuthorizedUsers = ( + options: EmitToAuthorizedUsersOptions +) => Promise + +interface EmitToMembersOptions extends EmitEventOptions { + guildId: number +} + +type EmitToMembers = (options: EmitToMembersOptions) => Promise + +interface FastifyIo { + instance: SocketIoServer + emitToAuthorizedUsers: EmitToAuthorizedUsers + emitToMembers: EmitToMembers +} declare module 'fastify' { export interface FastifyInstance { - io: SocketIoServer + io: FastifyIo } } export default fastifyPlugin( async (fastify, options: Partial) => { - const socket = new SocketIoServer(fastify.server, options) - fastify.decorate('io', socket) + const instance = new SocketIoServer(fastify.server, options) + instance.use( + authorize({ + secret: JWT_ACCESS_SECRET + }) + ) + const emitToAuthorizedUsers: EmitToAuthorizedUsers = async (options) => { + const { event, payload, isAuthorizedCallback } = options + const clients = await instance.sockets.allSockets() + for (const clientId of clients) { + const client = instance.sockets.sockets.get(clientId) + if (client != null) { + const userId = client.decodedToken.id + const isAuthorized = await isAuthorizedCallback(userId) + if (isAuthorized) { + client.emit(event, payload) + } + } + } + } + const emitToMembers: EmitToMembers = async (options) => { + const { event, payload, guildId } = options + await emitToAuthorizedUsers({ + event, + payload, + isAuthorizedCallback: async (userId) => { + const memberCount = await prisma.member.count({ + where: { userId, guildId } + }) + return memberCount > 0 + } + }) + } + const io: FastifyIo = { + instance, + emitToAuthorizedUsers, + emitToMembers + } + fastify.decorate('io', io) fastify.addHook('onClose', async (fastify) => { - fastify.io.close() + fastify.io.instance.close() }) }, { fastify: '3.x' }