From 9e6bf25c834f46ed2a4a3c4f492a07d427fc15e1 Mon Sep 17 00:00:00 2001 From: Divlo Date: Sat, 5 Mar 2022 18:49:38 +0000 Subject: [PATCH] feat(scripts): add delete dead uploaded files --- CONTRIBUTING.md | 4 +- Dockerfile | 6 +- README.md | 4 +- package-lock.json | 695 +++++++----------- package.json | 9 +- src/__test__/setup.ts | 12 +- src/scripts/delete-dead-uploaded-files.ts | 58 ++ .../plugins/__test__/authenticateUser.test.ts | 77 ++ 8 files changed, 438 insertions(+), 427 deletions(-) create mode 100644 src/scripts/delete-dead-uploaded-files.ts create mode 100644 src/tools/plugins/__test__/authenticateUser.test.ts diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 7156974..56996a6 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -21,7 +21,7 @@ All work on **Thream/api** happens directly on [GitHub](https://github.com/Threa - **Please first discuss** the change you wish to make via issues. -- Ensure your code respect `eslint` and `prettier`. +- Ensure your code respect linting. - Make sure your **code passes the tests**. @@ -70,6 +70,7 @@ git commit -m "fix(services): should emit events to connected users" ├── prisma └── src ├── models + ├── scripts ├── services ├── tools └── typings @@ -81,6 +82,7 @@ git commit -m "fix(services): should emit events to connected users" - `prisma` : contains the prisma schema and migrations - `src` : all source files - `models` : models that represent tables in database as JSON schema + - `scripts` : scripts - `services` : all REST API endpoints - `tools` : configs and utilities - `typings` : types gloablly used in the project diff --git a/Dockerfile b/Dockerfile index 86c6dc3..42ce995 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,15 +1,15 @@ -FROM node:16.13.2 AS dependencies +FROM node:16.14.0 AS dependencies WORKDIR /usr/src/app COPY ./package*.json ./ RUN npm install -FROM node:16.13.2 AS builder +FROM node:16.14.0 AS builder WORKDIR /usr/src/app COPY --from=dependencies /usr/src/app/node_modules ./node_modules COPY ./ ./ RUN npm run prisma:generate && npm run build -FROM node:16.13.2 AS runner +FROM node:16.14.0 AS runner WORKDIR /usr/src/app ENV NODE_ENV=production COPY --from=builder /usr/src/app/node_modules ./node_modules diff --git a/README.md b/README.md index e399a30..a4c708d 100644 --- a/README.md +++ b/README.md @@ -16,9 +16,7 @@ ## 📜 About -Thream's application programming interface to stay close with your friends and communities. - -This project was bootstrapped with [create-fullstack-app](https://github.com/Divlo/create-fullstack-app). +Thream's Application Programming Interface (API) to stay close with your friends and communities. ## ⚙️ Getting Started diff --git a/package-lock.json b/package-lock.json index 59626fd..2952e6f 100644 --- a/package-lock.json +++ b/package-lock.json @@ -24,7 +24,7 @@ "fastify-rate-limit": "5.7.2", "fastify-sensible": "3.1.2", "fastify-static": "4.5.0", - "fastify-swagger": "4.15.0", + "fastify-swagger": "4.17.0", "fastify-url-data": "3.0.3", "http-errors": "2.0.0", "jsonwebtoken": "8.5.1", @@ -38,7 +38,7 @@ "@commitlint/config-conventional": "16.2.1", "@saithodev/semantic-release-backmerge": "2.1.2", "@swc/cli": "0.1.55", - "@swc/core": "1.2.146", + "@swc/core": "1.2.148", "@swc/jest": "0.2.20", "@types/bcryptjs": "2.4.2", "@types/busboy": "1.3.0", @@ -55,7 +55,7 @@ "editorconfig-checker": "4.0.2", "eslint": "8.10.0", "eslint-config-conventions": "1.1.0", - "eslint-config-prettier": "8.4.0", + "eslint-config-prettier": "8.5.0", "eslint-plugin-import": "2.25.4", "eslint-plugin-prettier": "4.0.0", "eslint-plugin-promise": "6.0.0", @@ -64,7 +64,7 @@ "jest": "27.5.1", "jest-mock-extended": "2.0.4", "jest-ts-webcompat-resolver": "1.0.0", - "lint-staged": "12.3.4", + "lint-staged": "12.3.5", "markdownlint-cli": "0.31.1", "nodemon": "2.0.15", "plop": "3.0.5", @@ -1810,10 +1810,13 @@ } }, "node_modules/@swc/core": { - "version": "1.2.146", - "resolved": "https://registry.npmjs.org/@swc/core/-/core-1.2.146.tgz", - "integrity": "sha512-axIapm2mReT45ILuYxwe0xEWqtITj3dyfDIGIgdC8Tx7ss5vpXvr22UbDSUTRIS+nypFy6hViIR1RhXE1hXnig==", + "version": "1.2.148", + "resolved": "https://registry.npmjs.org/@swc/core/-/core-1.2.148.tgz", + "integrity": "sha512-kIuHnJx3WEzmAx+9V5KO6JlGdILMyw75iKwqp5U+zf+kmcB2kWgUh5ofb8YxJY04yxBIurlTxkkRE0SV+cHKaw==", "dev": true, + "bin": { + "swcx": "run_swcx.js" + }, "engines": { "node": ">=10" }, @@ -1822,25 +1825,25 @@ "url": "https://opencollective.com/swc" }, "optionalDependencies": { - "@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": "1.2.148", + "@swc/core-android-arm64": "1.2.148", + "@swc/core-darwin-arm64": "1.2.148", + "@swc/core-darwin-x64": "1.2.148", + "@swc/core-freebsd-x64": "1.2.148", + "@swc/core-linux-arm-gnueabihf": "1.2.148", + "@swc/core-linux-arm64-gnu": "1.2.148", + "@swc/core-linux-arm64-musl": "1.2.148", + "@swc/core-linux-x64-gnu": "1.2.148", + "@swc/core-linux-x64-musl": "1.2.148", + "@swc/core-win32-arm64-msvc": "1.2.148", + "@swc/core-win32-ia32-msvc": "1.2.148", + "@swc/core-win32-x64-msvc": "1.2.148" } }, "node_modules/@swc/core-android-arm-eabi": { - "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==", + "version": "1.2.148", + "resolved": "https://registry.npmjs.org/@swc/core-android-arm-eabi/-/core-android-arm-eabi-1.2.148.tgz", + "integrity": "sha512-lCPV+CvF3cKc2mq0si0dI2AP+1y0p/b9ASn0vWpdhdLUoAht25M68BYUHKMDmywuOeFnAvPdWoQF/ayD+Uk2NQ==", "cpu": [ "arm" ], @@ -1849,17 +1852,14 @@ "os": [ "android" ], - "bin": { - "swcx": "swc" - }, "engines": { "node": ">=10" } }, "node_modules/@swc/core-android-arm64": { - "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==", + "version": "1.2.148", + "resolved": "https://registry.npmjs.org/@swc/core-android-arm64/-/core-android-arm64-1.2.148.tgz", + "integrity": "sha512-p+PFcpDByIopBfncwxOtn+mOEnKrLhCxuNi3CtaiyZa51IeefP/IhV0mtVJy9YeuRp+Bk7WkA/SSXUHA0TqZuA==", "cpu": [ "arm64" ], @@ -1868,17 +1868,14 @@ "os": [ "android" ], - "bin": { - "swcx": "swc" - }, "engines": { "node": ">=10" } }, "node_modules/@swc/core-darwin-arm64": { - "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==", + "version": "1.2.148", + "resolved": "https://registry.npmjs.org/@swc/core-darwin-arm64/-/core-darwin-arm64-1.2.148.tgz", + "integrity": "sha512-1lxLa8i0fcL/70WM+ejJHs5lC0D/Hf+7gH40PSZgrnmDQyZPDcjNYEqXrggvIfAfLab1JgVmKLu1a987nvmdug==", "cpu": [ "arm64" ], @@ -1887,17 +1884,14 @@ "os": [ "darwin" ], - "bin": { - "swcx": "swc" - }, "engines": { "node": ">=10" } }, "node_modules/@swc/core-darwin-x64": { - "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==", + "version": "1.2.148", + "resolved": "https://registry.npmjs.org/@swc/core-darwin-x64/-/core-darwin-x64-1.2.148.tgz", + "integrity": "sha512-DZeCC4DBBbxdvmrOpDZWS/UZGPCRPFextqWxjdkpHhWyNMHVlWxwjINxTZbCZx0RwvZA2he1xFwXbgXZ9hGKzQ==", "cpu": [ "x64" ], @@ -1906,17 +1900,14 @@ "os": [ "darwin" ], - "bin": { - "swcx": "swc" - }, "engines": { "node": ">=10" } }, "node_modules/@swc/core-freebsd-x64": { - "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==", + "version": "1.2.148", + "resolved": "https://registry.npmjs.org/@swc/core-freebsd-x64/-/core-freebsd-x64-1.2.148.tgz", + "integrity": "sha512-tCwJXQHGYvdVRn9LMEqXzQex+cY9110oVYv/9FFUfyamIpbJZohBjy8s5bgdfkZsTgbi6ecYxy3PrJ63Sb9M8A==", "cpu": [ "x64" ], @@ -1925,17 +1916,14 @@ "os": [ "freebsd" ], - "bin": { - "swcx": "swc" - }, "engines": { "node": ">=10" } }, "node_modules/@swc/core-linux-arm-gnueabihf": { - "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==", + "version": "1.2.148", + "resolved": "https://registry.npmjs.org/@swc/core-linux-arm-gnueabihf/-/core-linux-arm-gnueabihf-1.2.148.tgz", + "integrity": "sha512-rzBbEGnYb8FER/N/86J1Nhvvagb/4h+JV6mHm71k6UTicPuhwFZzAJvCuKVyejT8TRunDkMU5u67Bn6dKVIsMQ==", "cpu": [ "arm" ], @@ -1944,17 +1932,14 @@ "os": [ "linux" ], - "bin": { - "swcx": "swc" - }, "engines": { "node": ">=10" } }, "node_modules/@swc/core-linux-arm64-gnu": { - "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==", + "version": "1.2.148", + "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-gnu/-/core-linux-arm64-gnu-1.2.148.tgz", + "integrity": "sha512-WFjWyDO3QU5sQI0mkPzd5DnAC+3sjpvBpoClQ8xCzOLZvXrjdfC1O01UGTquUbdpgVVJvazljWRgnW7hRLKxKg==", "cpu": [ "arm64" ], @@ -1963,17 +1948,14 @@ "os": [ "linux" ], - "bin": { - "swcx": "swc" - }, "engines": { "node": ">=10" } }, "node_modules/@swc/core-linux-arm64-musl": { - "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==", + "version": "1.2.148", + "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-musl/-/core-linux-arm64-musl-1.2.148.tgz", + "integrity": "sha512-RoTgNIYC3/qiqOKEIFxL2cc8DNnaHd0vp1r/9oS1EWPqnie/mTdrL7LdHQlvgPkOnguGW2BnceTpEfL4G9bLQQ==", "cpu": [ "arm64" ], @@ -1982,17 +1964,14 @@ "os": [ "linux" ], - "bin": { - "swcx": "swc" - }, "engines": { "node": ">=10" } }, "node_modules/@swc/core-linux-x64-gnu": { - "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==", + "version": "1.2.148", + "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.2.148.tgz", + "integrity": "sha512-TaePcQUtDrPo6bL4f+mKnSkgEsUXjNLcWUawZTD/DaHI2/VQMpkiqyaQTYcObq/QcDma4ude5Jsl4Gt8KtW/Dg==", "cpu": [ "x64" ], @@ -2001,17 +1980,14 @@ "os": [ "linux" ], - "bin": { - "swcx": "swc" - }, "engines": { "node": ">=10" } }, "node_modules/@swc/core-linux-x64-musl": { - "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==", + "version": "1.2.148", + "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.2.148.tgz", + "integrity": "sha512-8YtF2HNBJtAe+RCyQEE5igrSGxGazYCOAS2HEgT84FTYpr1K7XjCNjhBp4Hk93gzrijWBnEtC9k+fEQlaRE+XQ==", "cpu": [ "x64" ], @@ -2020,17 +1996,14 @@ "os": [ "linux" ], - "bin": { - "swcx": "swc" - }, "engines": { "node": ">=10" } }, "node_modules/@swc/core-win32-arm64-msvc": { - "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==", + "version": "1.2.148", + "resolved": "https://registry.npmjs.org/@swc/core-win32-arm64-msvc/-/core-win32-arm64-msvc-1.2.148.tgz", + "integrity": "sha512-rEGjkO6SdyrxbP7EfA9lbCKWclhHKKeLehDtAU0aHoscjiPfc18rEGe+2rEbWE2Vw3HsMxkmg+Qp93/2gSsKOQ==", "cpu": [ "arm64" ], @@ -2039,17 +2012,14 @@ "os": [ "win32" ], - "bin": { - "swcx": "swc.exe" - }, "engines": { "node": ">=10" } }, "node_modules/@swc/core-win32-ia32-msvc": { - "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==", + "version": "1.2.148", + "resolved": "https://registry.npmjs.org/@swc/core-win32-ia32-msvc/-/core-win32-ia32-msvc-1.2.148.tgz", + "integrity": "sha512-AFpE/FIwSzjT/lpJp405yc+xXUVn88lHxrwzDiAUvAeIXS6kk5xots7ymIWbu7J8k5ROAWAwSVhi7C+fUxa8Pg==", "cpu": [ "ia32" ], @@ -2058,17 +2028,14 @@ "os": [ "win32" ], - "bin": { - "swcx": "swc.exe" - }, "engines": { "node": ">=10" } }, "node_modules/@swc/core-win32-x64-msvc": { - "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==", + "version": "1.2.148", + "resolved": "https://registry.npmjs.org/@swc/core-win32-x64-msvc/-/core-win32-x64-msvc-1.2.148.tgz", + "integrity": "sha512-BAKfOXvPTGLo8K8+BheDqyIZHUFdbtw/7wBHhBBIDJK/D4et1dg886uyP1A0Qib2L/jtYMD/XcyRaTEw3VAW7A==", "cpu": [ "x64" ], @@ -2077,9 +2044,6 @@ "os": [ "win32" ], - "bin": { - "swcx": "swc.exe" - }, "engines": { "node": ">=10" } @@ -2414,9 +2378,9 @@ } }, "node_modules/@types/yargs-parser": { - "version": "20.2.1", - "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-20.2.1.tgz", - "integrity": "sha512-7tFImggNeNBVMsn0vLrpn1H1uPrUBdnARPTpZoitY37ZrdJREzf7I16tMrlK3hen349gr1NYh8CmZQa7CTG6Aw==", + "version": "21.0.0", + "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.0.tgz", + "integrity": "sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA==", "dev": true }, "node_modules/@typescript-eslint/eslint-plugin": { @@ -2962,9 +2926,9 @@ } }, "node_modules/avvio": { - "version": "7.2.4", - "resolved": "https://registry.npmjs.org/avvio/-/avvio-7.2.4.tgz", - "integrity": "sha512-m9XMb/6E9P0lV4eiXNxfiJ/uFBW0KFpMrrB26c+ZJeRpYmc8JTOPy/7+lJrlbaqfrAArv9PmzOaFU6TKtKRLGA==", + "version": "7.2.5", + "resolved": "https://registry.npmjs.org/avvio/-/avvio-7.2.5.tgz", + "integrity": "sha512-AOhBxyLVdpOad3TujtC9kL/9r3HnTkxwQ5ggOsYrvvZP1cCFvzHWJd5XxZDFuTn+IN8vkKSG5SEJrd27vCSbeA==", "dependencies": { "archy": "^1.0.0", "debug": "^4.0.0", @@ -3421,9 +3385,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001312", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001312.tgz", - "integrity": "sha512-Wiz1Psk2MEK0pX3rUzWaunLTZzqS2JYZFzNKqAiJGiuxIjRPLgV6+VDPOg6lQOUxmDwhTlh198JsTTi8Hzw6aQ==", + "version": "1.0.30001313", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001313.tgz", + "integrity": "sha512-rI1UN0koZUiKINjysQDuRi2VeSCce3bYJNmDcj3PIKREiAmjakugBul1QSkg/fPrlULYl6oWfGg3PbgOSY9X4Q==", "dev": true, "funding": { "type": "opencollective", @@ -4637,9 +4601,9 @@ } }, "node_modules/electron-to-chromium": { - "version": "1.4.75", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.75.tgz", - "integrity": "sha512-LxgUNeu3BVU7sXaKjUDD9xivocQLxFtq6wgERrutdY/yIOps3ODOZExK1jg8DTEg4U8TUCb5MLGeWFOYuxjF3Q==", + "version": "1.4.76", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.76.tgz", + "integrity": "sha512-3Vftv7cenJtQb+k00McEBZ2vVmZ/x+HEF7pcZONZIkOsESqAqVuACmBxMv0JhzX7u0YltU0vSqRqgBSTAhFUjA==", "dev": true }, "node_modules/emittery": { @@ -5013,9 +4977,9 @@ } }, "node_modules/eslint-config-prettier": { - "version": "8.4.0", - "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.4.0.tgz", - "integrity": "sha512-CFotdUcMY18nGRo5KGsnNxpznzhkopOcOo0InID+sgQssPrzjvsyKZPvOgymTFeHrFuC3Tzdf2YndhXtULK9Iw==", + "version": "8.5.0", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.5.0.tgz", + "integrity": "sha512-obmWKLUNCnhtQRKc+tmnYuQl0pFU1ibYJQ5BGhTVB08bHe9wC8qUeG7c08dj9XX+AuPj1YSGSQIHl1pnDHZR0Q==", "dev": true, "bin": { "eslint-config-prettier": "bin/cli.js" @@ -5714,9 +5678,9 @@ } }, "node_modules/fastify-swagger": { - "version": "4.15.0", - "resolved": "https://registry.npmjs.org/fastify-swagger/-/fastify-swagger-4.15.0.tgz", - "integrity": "sha512-gFHc1FcvYLvhGhQvtb3KlxnF+CeM/0mIDJ6E12/kBTPJ1tYDeqIXwAdKZJ19abcReYEH6J3UAnLXDh7cmhT/IQ==", + "version": "4.17.0", + "resolved": "https://registry.npmjs.org/fastify-swagger/-/fastify-swagger-4.17.0.tgz", + "integrity": "sha512-xXngJ3FXZ6IOjRbSscSVnV9Cb9AlIQTwSzOi/CBkaCsurYFMivb1Y8/O/DSZIHpJg0BXJeqcC0QyKhXMEVbpBA==", "dependencies": { "fastify-plugin": "^3.0.0", "fastify-static": "^4.0.0", @@ -8775,9 +8739,9 @@ } }, "node_modules/lint-staged": { - "version": "12.3.4", - "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-12.3.4.tgz", - "integrity": "sha512-yv/iK4WwZ7/v0GtVkNb3R82pdL9M+ScpIbJLJNyCXkJ1FGaXvRCOg/SeL59SZtPpqZhE7BD6kPKFLIDUhDx2/w==", + "version": "12.3.5", + "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-12.3.5.tgz", + "integrity": "sha512-oOH36RUs1It7b9U/C7Nl/a0sLfoIBcMB8ramiB3nuJ6brBqzsWiUAFSR5DQ3yyP/OR7XKMpijtgKl2DV1lQ3lA==", "dev": true, "dependencies": { "cli-truncate": "^3.1.0", @@ -9926,9 +9890,9 @@ } }, "node_modules/npm": { - "version": "8.5.2", - "resolved": "https://registry.npmjs.org/npm/-/npm-8.5.2.tgz", - "integrity": "sha512-fQRPOSrQfO3AG1JEOgScVrYhOfprZbhSKAjY4goESGPKMflWHxyQt8djo6EZhNjxCNIUAPtT75hkCN902SeYAw==", + "version": "8.5.3", + "resolved": "https://registry.npmjs.org/npm/-/npm-8.5.3.tgz", + "integrity": "sha512-O+1j66Alx7ZQgWnUSSTaz8rTqQrJnqNb8Num5uQw2vYvc2RrxLaX7cWtRkDhvkPIL8Nf2WU9gx1oSu268QConA==", "bundleDependencies": [ "@isaacs/string-locale-compare", "@npmcli/arborist", @@ -10097,7 +10061,7 @@ } }, "node_modules/npm/node_modules/@gar/promisify": { - "version": "1.1.2", + "version": "1.1.3", "dev": true, "inBundle": true, "license": "MIT" @@ -10166,12 +10130,12 @@ } }, "node_modules/npm/node_modules/@npmcli/config": { - "version": "4.0.0", + "version": "4.0.1", "dev": true, "inBundle": true, "license": "ISC", "dependencies": { - "@npmcli/map-workspaces": "^2.0.0", + "@npmcli/map-workspaces": "^2.0.1", "ini": "^2.0.0", "mkdirp-infer-owner": "^2.0.0", "nopt": "^5.0.0", @@ -10230,7 +10194,7 @@ } }, "node_modules/npm/node_modules/@npmcli/git/node_modules/lru-cache": { - "version": "7.3.1", + "version": "7.4.0", "dev": true, "inBundle": true, "license": "ISC", @@ -10255,20 +10219,41 @@ } }, "node_modules/npm/node_modules/@npmcli/map-workspaces": { - "version": "2.0.0", + "version": "2.0.1", "dev": true, "inBundle": true, "license": "ISC", "dependencies": { "@npmcli/name-from-folder": "^1.0.1", - "glob": "^7.1.6", - "minimatch": "^3.0.4", - "read-package-json-fast": "^2.0.1" + "glob": "^7.2.0", + "minimatch": "^5.0.0", + "read-package-json-fast": "^2.0.3" }, "engines": { "node": "^12.13.0 || ^14.15.0 || >=16" } }, + "node_modules/npm/node_modules/@npmcli/map-workspaces/node_modules/brace-expansion": { + "version": "2.0.1", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/npm/node_modules/@npmcli/map-workspaces/node_modules/minimatch": { + "version": "5.0.1", + "dev": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/npm/node_modules/@npmcli/metavuln-calculator": { "version": "3.0.0", "dev": true, @@ -10328,14 +10313,14 @@ } }, "node_modules/npm/node_modules/@npmcli/run-script": { - "version": "3.0.0", + "version": "3.0.1", "dev": true, "inBundle": true, "license": "ISC", "dependencies": { "@npmcli/node-gyp": "^1.0.3", "@npmcli/promise-spawn": "^1.3.2", - "node-gyp": "^8.4.1", + "node-gyp": "^9.0.0", "read-package-json-fast": "^2.0.3" }, "engines": { @@ -10370,7 +10355,7 @@ } }, "node_modules/npm/node_modules/agentkeepalive": { - "version": "4.2.0", + "version": "4.2.1", "dev": true, "inBundle": true, "license": "MIT", @@ -10873,20 +10858,20 @@ "license": "MIT" }, "node_modules/npm/node_modules/gauge": { - "version": "4.0.1", + "version": "4.0.2", "dev": true, "inBundle": true, "license": "ISC", "dependencies": { "ansi-regex": "^5.0.1", "aproba": "^1.0.3 || ^2.0.0", - "color-support": "^1.1.2", - "console-control-strings": "^1.0.0", + "color-support": "^1.1.3", + "console-control-strings": "^1.1.0", "has-unicode": "^2.0.1", - "signal-exit": "^3.0.0", + "signal-exit": "^3.0.7", "string-width": "^4.2.3", "strip-ansi": "^6.0.1", - "wide-align": "^1.1.2" + "wide-align": "^1.1.5" }, "engines": { "node": "^12.13.0 || ^14.15.0 || >=16" @@ -11166,12 +11151,6 @@ "inBundle": true, "license": "MIT" }, - "node_modules/npm/node_modules/is-typedarray": { - "version": "1.0.0", - "dev": true, - "inBundle": true, - "license": "MIT" - }, "node_modules/npm/node_modules/isexe": { "version": "2.0.0", "dev": true, @@ -11394,21 +11373,21 @@ } }, "node_modules/npm/node_modules/make-fetch-happen": { - "version": "10.0.3", + "version": "10.0.4", "dev": true, "inBundle": true, "license": "ISC", "dependencies": { - "agentkeepalive": "^4.2.0", + "agentkeepalive": "^4.2.1", "cacache": "^15.3.0", "http-cache-semantics": "^4.1.0", "http-proxy-agent": "^5.0.0", "https-proxy-agent": "^5.0.0", "is-lambda": "^1.0.1", - "lru-cache": "^7.3.1", + "lru-cache": "^7.4.0", "minipass": "^3.1.6", "minipass-collect": "^1.0.2", - "minipass-fetch": "^1.4.1", + "minipass-fetch": "^2.0.1", "minipass-flush": "^1.0.5", "minipass-pipeline": "^1.2.4", "negotiator": "^0.6.3", @@ -11421,7 +11400,7 @@ } }, "node_modules/npm/node_modules/make-fetch-happen/node_modules/lru-cache": { - "version": "7.3.1", + "version": "7.4.0", "dev": true, "inBundle": true, "license": "ISC", @@ -11430,7 +11409,7 @@ } }, "node_modules/npm/node_modules/minimatch": { - "version": "3.0.4", + "version": "3.1.2", "dev": true, "inBundle": true, "license": "ISC", @@ -11466,20 +11445,20 @@ } }, "node_modules/npm/node_modules/minipass-fetch": { - "version": "1.4.1", + "version": "2.0.2", "dev": true, "inBundle": true, "license": "MIT", "dependencies": { - "minipass": "^3.1.0", + "minipass": "^3.1.6", "minipass-sized": "^1.0.3", - "minizlib": "^2.0.0" + "minizlib": "^2.1.2" }, "engines": { - "node": ">=8" + "node": "^12.13.0 || ^14.15.0 || >=16" }, "optionalDependencies": { - "encoding": "^0.1.12" + "encoding": "^0.1.13" } }, "node_modules/npm/node_modules/minipass-flush": { @@ -11589,7 +11568,7 @@ } }, "node_modules/npm/node_modules/node-gyp": { - "version": "8.4.1", + "version": "9.0.0", "dev": true, "inBundle": true, "license": "MIT", @@ -11597,7 +11576,7 @@ "env-paths": "^2.2.0", "glob": "^7.1.4", "graceful-fs": "^4.2.6", - "make-fetch-happen": "^9.1.0", + "make-fetch-happen": "^10.0.3", "nopt": "^5.0.0", "npmlog": "^6.0.0", "rimraf": "^3.0.2", @@ -11609,57 +11588,7 @@ "node-gyp": "bin/node-gyp.js" }, "engines": { - "node": ">= 10.12.0" - } - }, - "node_modules/npm/node_modules/node-gyp/node_modules/@tootallnate/once": { - "version": "1.1.2", - "dev": true, - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">= 6" - } - }, - "node_modules/npm/node_modules/node-gyp/node_modules/http-proxy-agent": { - "version": "4.0.1", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "@tootallnate/once": "1", - "agent-base": "6", - "debug": "4" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/npm/node_modules/node-gyp/node_modules/make-fetch-happen": { - "version": "9.1.0", - "dev": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "agentkeepalive": "^4.1.3", - "cacache": "^15.2.0", - "http-cache-semantics": "^4.1.0", - "http-proxy-agent": "^4.0.1", - "https-proxy-agent": "^5.0.0", - "is-lambda": "^1.0.1", - "lru-cache": "^6.0.0", - "minipass": "^3.1.3", - "minipass-collect": "^1.0.2", - "minipass-fetch": "^1.3.2", - "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.4", - "negotiator": "^0.6.2", - "promise-retry": "^2.0.1", - "socks-proxy-agent": "^6.0.0", - "ssri": "^8.0.0" - }, - "engines": { - "node": ">= 10" + "node": "^12.22 || ^14.13 || >=16" } }, "node_modules/npm/node_modules/nopt": { @@ -11792,14 +11721,14 @@ } }, "node_modules/npm/node_modules/npm-registry-fetch": { - "version": "13.0.0", + "version": "13.0.1", "dev": true, "inBundle": true, "license": "ISC", "dependencies": { - "make-fetch-happen": "^10.0.2", + "make-fetch-happen": "^10.0.3", "minipass": "^3.1.6", - "minipass-fetch": "^1.4.1", + "minipass-fetch": "^2.0.1", "minipass-json-stream": "^1.0.1", "minizlib": "^2.1.2", "npm-package-arg": "^9.0.0", @@ -12129,7 +12058,7 @@ "license": "ISC" }, "node_modules/npm/node_modules/signal-exit": { - "version": "3.0.6", + "version": "3.0.7", "dev": true, "inBundle": true, "license": "ISC" @@ -12145,13 +12074,13 @@ } }, "node_modules/npm/node_modules/socks": { - "version": "2.6.1", + "version": "2.6.2", "dev": true, "inBundle": true, "license": "MIT", "dependencies": { "ip": "^1.1.5", - "smart-buffer": "^4.1.0" + "smart-buffer": "^4.2.0" }, "engines": { "node": ">= 10.13.0", @@ -12313,26 +12242,6 @@ "inBundle": true, "license": "ISC" }, - "node_modules/npm/node_modules/typedarray-to-buffer": { - "version": "4.0.0", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "inBundle": true, - "license": "MIT" - }, "node_modules/npm/node_modules/unique-filename": { "version": "1.1.1", "dev": true, @@ -12422,15 +12331,13 @@ "license": "ISC" }, "node_modules/npm/node_modules/write-file-atomic": { - "version": "4.0.0", + "version": "4.0.1", "dev": true, "inBundle": true, "license": "ISC", "dependencies": { "imurmurhash": "^0.1.4", - "is-typedarray": "^1.0.0", - "signal-exit": "^3.0.2", - "typedarray-to-buffer": "^4.0.0" + "signal-exit": "^3.0.7" }, "engines": { "node": "^12.13.0 || ^14.15.0 || >=16" @@ -15192,9 +15099,9 @@ } }, "node_modules/tsconfig-paths": { - "version": "3.12.0", - "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.12.0.tgz", - "integrity": "sha512-e5adrnOYT6zqVnWqZu7i/BQ3BnhzvGbjEjejFXO20lKIKpwTaupkCPgEfv4GZK1IBciJUEhYs3J3p75FdaTFVg==", + "version": "3.13.0", + "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.13.0.tgz", + "integrity": "sha512-nWuffZppoaYK0vQ1SQmkSsQzJoHA4s6uzdb2waRpD806x9yfq153AdVsWz4je2qZcW+pENrMQXbGQ3sMCkXuhw==", "dev": true, "dependencies": { "@types/json5": "^0.0.29", @@ -17268,114 +17175,114 @@ } }, "@swc/core": { - "version": "1.2.146", - "resolved": "https://registry.npmjs.org/@swc/core/-/core-1.2.146.tgz", - "integrity": "sha512-axIapm2mReT45ILuYxwe0xEWqtITj3dyfDIGIgdC8Tx7ss5vpXvr22UbDSUTRIS+nypFy6hViIR1RhXE1hXnig==", + "version": "1.2.148", + "resolved": "https://registry.npmjs.org/@swc/core/-/core-1.2.148.tgz", + "integrity": "sha512-kIuHnJx3WEzmAx+9V5KO6JlGdILMyw75iKwqp5U+zf+kmcB2kWgUh5ofb8YxJY04yxBIurlTxkkRE0SV+cHKaw==", "dev": true, "requires": { - "@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": "1.2.148", + "@swc/core-android-arm64": "1.2.148", + "@swc/core-darwin-arm64": "1.2.148", + "@swc/core-darwin-x64": "1.2.148", + "@swc/core-freebsd-x64": "1.2.148", + "@swc/core-linux-arm-gnueabihf": "1.2.148", + "@swc/core-linux-arm64-gnu": "1.2.148", + "@swc/core-linux-arm64-musl": "1.2.148", + "@swc/core-linux-x64-gnu": "1.2.148", + "@swc/core-linux-x64-musl": "1.2.148", + "@swc/core-win32-arm64-msvc": "1.2.148", + "@swc/core-win32-ia32-msvc": "1.2.148", + "@swc/core-win32-x64-msvc": "1.2.148" } }, "@swc/core-android-arm-eabi": { - "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==", + "version": "1.2.148", + "resolved": "https://registry.npmjs.org/@swc/core-android-arm-eabi/-/core-android-arm-eabi-1.2.148.tgz", + "integrity": "sha512-lCPV+CvF3cKc2mq0si0dI2AP+1y0p/b9ASn0vWpdhdLUoAht25M68BYUHKMDmywuOeFnAvPdWoQF/ayD+Uk2NQ==", "dev": true, "optional": true }, "@swc/core-android-arm64": { - "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==", + "version": "1.2.148", + "resolved": "https://registry.npmjs.org/@swc/core-android-arm64/-/core-android-arm64-1.2.148.tgz", + "integrity": "sha512-p+PFcpDByIopBfncwxOtn+mOEnKrLhCxuNi3CtaiyZa51IeefP/IhV0mtVJy9YeuRp+Bk7WkA/SSXUHA0TqZuA==", "dev": true, "optional": true }, "@swc/core-darwin-arm64": { - "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==", + "version": "1.2.148", + "resolved": "https://registry.npmjs.org/@swc/core-darwin-arm64/-/core-darwin-arm64-1.2.148.tgz", + "integrity": "sha512-1lxLa8i0fcL/70WM+ejJHs5lC0D/Hf+7gH40PSZgrnmDQyZPDcjNYEqXrggvIfAfLab1JgVmKLu1a987nvmdug==", "dev": true, "optional": true }, "@swc/core-darwin-x64": { - "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==", + "version": "1.2.148", + "resolved": "https://registry.npmjs.org/@swc/core-darwin-x64/-/core-darwin-x64-1.2.148.tgz", + "integrity": "sha512-DZeCC4DBBbxdvmrOpDZWS/UZGPCRPFextqWxjdkpHhWyNMHVlWxwjINxTZbCZx0RwvZA2he1xFwXbgXZ9hGKzQ==", "dev": true, "optional": true }, "@swc/core-freebsd-x64": { - "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==", + "version": "1.2.148", + "resolved": "https://registry.npmjs.org/@swc/core-freebsd-x64/-/core-freebsd-x64-1.2.148.tgz", + "integrity": "sha512-tCwJXQHGYvdVRn9LMEqXzQex+cY9110oVYv/9FFUfyamIpbJZohBjy8s5bgdfkZsTgbi6ecYxy3PrJ63Sb9M8A==", "dev": true, "optional": true }, "@swc/core-linux-arm-gnueabihf": { - "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==", + "version": "1.2.148", + "resolved": "https://registry.npmjs.org/@swc/core-linux-arm-gnueabihf/-/core-linux-arm-gnueabihf-1.2.148.tgz", + "integrity": "sha512-rzBbEGnYb8FER/N/86J1Nhvvagb/4h+JV6mHm71k6UTicPuhwFZzAJvCuKVyejT8TRunDkMU5u67Bn6dKVIsMQ==", "dev": true, "optional": true }, "@swc/core-linux-arm64-gnu": { - "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==", + "version": "1.2.148", + "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-gnu/-/core-linux-arm64-gnu-1.2.148.tgz", + "integrity": "sha512-WFjWyDO3QU5sQI0mkPzd5DnAC+3sjpvBpoClQ8xCzOLZvXrjdfC1O01UGTquUbdpgVVJvazljWRgnW7hRLKxKg==", "dev": true, "optional": true }, "@swc/core-linux-arm64-musl": { - "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==", + "version": "1.2.148", + "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-musl/-/core-linux-arm64-musl-1.2.148.tgz", + "integrity": "sha512-RoTgNIYC3/qiqOKEIFxL2cc8DNnaHd0vp1r/9oS1EWPqnie/mTdrL7LdHQlvgPkOnguGW2BnceTpEfL4G9bLQQ==", "dev": true, "optional": true }, "@swc/core-linux-x64-gnu": { - "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==", + "version": "1.2.148", + "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.2.148.tgz", + "integrity": "sha512-TaePcQUtDrPo6bL4f+mKnSkgEsUXjNLcWUawZTD/DaHI2/VQMpkiqyaQTYcObq/QcDma4ude5Jsl4Gt8KtW/Dg==", "dev": true, "optional": true }, "@swc/core-linux-x64-musl": { - "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==", + "version": "1.2.148", + "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.2.148.tgz", + "integrity": "sha512-8YtF2HNBJtAe+RCyQEE5igrSGxGazYCOAS2HEgT84FTYpr1K7XjCNjhBp4Hk93gzrijWBnEtC9k+fEQlaRE+XQ==", "dev": true, "optional": true }, "@swc/core-win32-arm64-msvc": { - "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==", + "version": "1.2.148", + "resolved": "https://registry.npmjs.org/@swc/core-win32-arm64-msvc/-/core-win32-arm64-msvc-1.2.148.tgz", + "integrity": "sha512-rEGjkO6SdyrxbP7EfA9lbCKWclhHKKeLehDtAU0aHoscjiPfc18rEGe+2rEbWE2Vw3HsMxkmg+Qp93/2gSsKOQ==", "dev": true, "optional": true }, "@swc/core-win32-ia32-msvc": { - "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==", + "version": "1.2.148", + "resolved": "https://registry.npmjs.org/@swc/core-win32-ia32-msvc/-/core-win32-ia32-msvc-1.2.148.tgz", + "integrity": "sha512-AFpE/FIwSzjT/lpJp405yc+xXUVn88lHxrwzDiAUvAeIXS6kk5xots7ymIWbu7J8k5ROAWAwSVhi7C+fUxa8Pg==", "dev": true, "optional": true }, "@swc/core-win32-x64-msvc": { - "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==", + "version": "1.2.148", + "resolved": "https://registry.npmjs.org/@swc/core-win32-x64-msvc/-/core-win32-x64-msvc-1.2.148.tgz", + "integrity": "sha512-BAKfOXvPTGLo8K8+BheDqyIZHUFdbtw/7wBHhBBIDJK/D4et1dg886uyP1A0Qib2L/jtYMD/XcyRaTEw3VAW7A==", "dev": true, "optional": true }, @@ -17693,9 +17600,9 @@ } }, "@types/yargs-parser": { - "version": "20.2.1", - "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-20.2.1.tgz", - "integrity": "sha512-7tFImggNeNBVMsn0vLrpn1H1uPrUBdnARPTpZoitY37ZrdJREzf7I16tMrlK3hen349gr1NYh8CmZQa7CTG6Aw==", + "version": "21.0.0", + "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.0.tgz", + "integrity": "sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA==", "dev": true }, "@typescript-eslint/eslint-plugin": { @@ -18068,9 +17975,9 @@ "integrity": "sha512-kNOjDqAh7px0XWNI+4QbzoiR/nTkHAWNud2uvnJquD1/x5a7EQZMJT0AczqK0Qn67oY/TTQ1LbUKajZpp3I9tQ==" }, "avvio": { - "version": "7.2.4", - "resolved": "https://registry.npmjs.org/avvio/-/avvio-7.2.4.tgz", - "integrity": "sha512-m9XMb/6E9P0lV4eiXNxfiJ/uFBW0KFpMrrB26c+ZJeRpYmc8JTOPy/7+lJrlbaqfrAArv9PmzOaFU6TKtKRLGA==", + "version": "7.2.5", + "resolved": "https://registry.npmjs.org/avvio/-/avvio-7.2.5.tgz", + "integrity": "sha512-AOhBxyLVdpOad3TujtC9kL/9r3HnTkxwQ5ggOsYrvvZP1cCFvzHWJd5XxZDFuTn+IN8vkKSG5SEJrd27vCSbeA==", "requires": { "archy": "^1.0.0", "debug": "^4.0.0", @@ -18409,9 +18316,9 @@ } }, "caniuse-lite": { - "version": "1.0.30001312", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001312.tgz", - "integrity": "sha512-Wiz1Psk2MEK0pX3rUzWaunLTZzqS2JYZFzNKqAiJGiuxIjRPLgV6+VDPOg6lQOUxmDwhTlh198JsTTi8Hzw6aQ==", + "version": "1.0.30001313", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001313.tgz", + "integrity": "sha512-rI1UN0koZUiKINjysQDuRi2VeSCce3bYJNmDcj3PIKREiAmjakugBul1QSkg/fPrlULYl6oWfGg3PbgOSY9X4Q==", "dev": true }, "capital-case": { @@ -19363,9 +19270,9 @@ } }, "electron-to-chromium": { - "version": "1.4.75", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.75.tgz", - "integrity": "sha512-LxgUNeu3BVU7sXaKjUDD9xivocQLxFtq6wgERrutdY/yIOps3ODOZExK1jg8DTEg4U8TUCb5MLGeWFOYuxjF3Q==", + "version": "1.4.76", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.76.tgz", + "integrity": "sha512-3Vftv7cenJtQb+k00McEBZ2vVmZ/x+HEF7pcZONZIkOsESqAqVuACmBxMv0JhzX7u0YltU0vSqRqgBSTAhFUjA==", "dev": true }, "emittery": { @@ -19654,9 +19561,9 @@ "requires": {} }, "eslint-config-prettier": { - "version": "8.4.0", - "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.4.0.tgz", - "integrity": "sha512-CFotdUcMY18nGRo5KGsnNxpznzhkopOcOo0InID+sgQssPrzjvsyKZPvOgymTFeHrFuC3Tzdf2YndhXtULK9Iw==", + "version": "8.5.0", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.5.0.tgz", + "integrity": "sha512-obmWKLUNCnhtQRKc+tmnYuQl0pFU1ibYJQ5BGhTVB08bHe9wC8qUeG7c08dj9XX+AuPj1YSGSQIHl1pnDHZR0Q==", "dev": true, "requires": {} }, @@ -20197,9 +20104,9 @@ } }, "fastify-swagger": { - "version": "4.15.0", - "resolved": "https://registry.npmjs.org/fastify-swagger/-/fastify-swagger-4.15.0.tgz", - "integrity": "sha512-gFHc1FcvYLvhGhQvtb3KlxnF+CeM/0mIDJ6E12/kBTPJ1tYDeqIXwAdKZJ19abcReYEH6J3UAnLXDh7cmhT/IQ==", + "version": "4.17.0", + "resolved": "https://registry.npmjs.org/fastify-swagger/-/fastify-swagger-4.17.0.tgz", + "integrity": "sha512-xXngJ3FXZ6IOjRbSscSVnV9Cb9AlIQTwSzOi/CBkaCsurYFMivb1Y8/O/DSZIHpJg0BXJeqcC0QyKhXMEVbpBA==", "requires": { "fastify-plugin": "^3.0.0", "fastify-static": "^4.0.0", @@ -22496,9 +22403,9 @@ } }, "lint-staged": { - "version": "12.3.4", - "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-12.3.4.tgz", - "integrity": "sha512-yv/iK4WwZ7/v0GtVkNb3R82pdL9M+ScpIbJLJNyCXkJ1FGaXvRCOg/SeL59SZtPpqZhE7BD6kPKFLIDUhDx2/w==", + "version": "12.3.5", + "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-12.3.5.tgz", + "integrity": "sha512-oOH36RUs1It7b9U/C7Nl/a0sLfoIBcMB8ramiB3nuJ6brBqzsWiUAFSR5DQ3yyP/OR7XKMpijtgKl2DV1lQ3lA==", "dev": true, "requires": { "cli-truncate": "^3.1.0", @@ -23365,9 +23272,9 @@ "dev": true }, "npm": { - "version": "8.5.2", - "resolved": "https://registry.npmjs.org/npm/-/npm-8.5.2.tgz", - "integrity": "sha512-fQRPOSrQfO3AG1JEOgScVrYhOfprZbhSKAjY4goESGPKMflWHxyQt8djo6EZhNjxCNIUAPtT75hkCN902SeYAw==", + "version": "8.5.3", + "resolved": "https://registry.npmjs.org/npm/-/npm-8.5.3.tgz", + "integrity": "sha512-O+1j66Alx7ZQgWnUSSTaz8rTqQrJnqNb8Num5uQw2vYvc2RrxLaX7cWtRkDhvkPIL8Nf2WU9gx1oSu268QConA==", "dev": true, "requires": { "@isaacs/string-locale-compare": "*", @@ -23444,7 +23351,7 @@ }, "dependencies": { "@gar/promisify": { - "version": "1.1.2", + "version": "1.1.3", "bundled": true, "dev": true }, @@ -23500,11 +23407,11 @@ "dev": true }, "@npmcli/config": { - "version": "4.0.0", + "version": "4.0.1", "bundled": true, "dev": true, "requires": { - "@npmcli/map-workspaces": "^2.0.0", + "@npmcli/map-workspaces": "^2.0.1", "ini": "^2.0.0", "mkdirp-infer-owner": "^2.0.0", "nopt": "^5.0.0", @@ -23548,7 +23455,7 @@ }, "dependencies": { "lru-cache": { - "version": "7.3.1", + "version": "7.4.0", "bundled": true, "dev": true } @@ -23564,14 +23471,32 @@ } }, "@npmcli/map-workspaces": { - "version": "2.0.0", + "version": "2.0.1", "bundled": true, "dev": true, "requires": { "@npmcli/name-from-folder": "^1.0.1", - "glob": "^7.1.6", - "minimatch": "^3.0.4", - "read-package-json-fast": "^2.0.1" + "glob": "^7.2.0", + "minimatch": "^5.0.0", + "read-package-json-fast": "^2.0.3" + }, + "dependencies": { + "brace-expansion": { + "version": "2.0.1", + "bundled": true, + "dev": true, + "requires": { + "balanced-match": "^1.0.0" + } + }, + "minimatch": { + "version": "5.0.1", + "bundled": true, + "dev": true, + "requires": { + "brace-expansion": "^2.0.1" + } + } } }, "@npmcli/metavuln-calculator": { @@ -23621,13 +23546,13 @@ } }, "@npmcli/run-script": { - "version": "3.0.0", + "version": "3.0.1", "bundled": true, "dev": true, "requires": { "@npmcli/node-gyp": "^1.0.3", "@npmcli/promise-spawn": "^1.3.2", - "node-gyp": "^8.4.1", + "node-gyp": "^9.0.0", "read-package-json-fast": "^2.0.3" } }, @@ -23650,7 +23575,7 @@ } }, "agentkeepalive": { - "version": "4.2.0", + "version": "4.2.1", "bundled": true, "dev": true, "requires": { @@ -24008,19 +23933,19 @@ "dev": true }, "gauge": { - "version": "4.0.1", + "version": "4.0.2", "bundled": true, "dev": true, "requires": { "ansi-regex": "^5.0.1", "aproba": "^1.0.3 || ^2.0.0", - "color-support": "^1.1.2", - "console-control-strings": "^1.0.0", + "color-support": "^1.1.3", + "console-control-strings": "^1.1.0", "has-unicode": "^2.0.1", - "signal-exit": "^3.0.0", + "signal-exit": "^3.0.7", "string-width": "^4.2.3", "strip-ansi": "^6.0.1", - "wide-align": "^1.1.2" + "wide-align": "^1.1.5" }, "dependencies": { "ansi-regex": { @@ -24215,11 +24140,6 @@ "bundled": true, "dev": true }, - "is-typedarray": { - "version": "1.0.0", - "bundled": true, - "dev": true - }, "isexe": { "version": "2.0.0", "bundled": true, @@ -24382,20 +24302,20 @@ } }, "make-fetch-happen": { - "version": "10.0.3", + "version": "10.0.4", "bundled": true, "dev": true, "requires": { - "agentkeepalive": "^4.2.0", + "agentkeepalive": "^4.2.1", "cacache": "^15.3.0", "http-cache-semantics": "^4.1.0", "http-proxy-agent": "^5.0.0", "https-proxy-agent": "^5.0.0", "is-lambda": "^1.0.1", - "lru-cache": "^7.3.1", + "lru-cache": "^7.4.0", "minipass": "^3.1.6", "minipass-collect": "^1.0.2", - "minipass-fetch": "^1.4.1", + "minipass-fetch": "^2.0.1", "minipass-flush": "^1.0.5", "minipass-pipeline": "^1.2.4", "negotiator": "^0.6.3", @@ -24405,14 +24325,14 @@ }, "dependencies": { "lru-cache": { - "version": "7.3.1", + "version": "7.4.0", "bundled": true, "dev": true } } }, "minimatch": { - "version": "3.0.4", + "version": "3.1.2", "bundled": true, "dev": true, "requires": { @@ -24436,14 +24356,14 @@ } }, "minipass-fetch": { - "version": "1.4.1", + "version": "2.0.2", "bundled": true, "dev": true, "requires": { - "encoding": "^0.1.12", - "minipass": "^3.1.0", + "encoding": "^0.1.13", + "minipass": "^3.1.6", "minipass-sized": "^1.0.3", - "minizlib": "^2.0.0" + "minizlib": "^2.1.2" } }, "minipass-flush": { @@ -24519,60 +24439,20 @@ "dev": true }, "node-gyp": { - "version": "8.4.1", + "version": "9.0.0", "bundled": true, "dev": true, "requires": { "env-paths": "^2.2.0", "glob": "^7.1.4", "graceful-fs": "^4.2.6", - "make-fetch-happen": "^9.1.0", + "make-fetch-happen": "^10.0.3", "nopt": "^5.0.0", "npmlog": "^6.0.0", "rimraf": "^3.0.2", "semver": "^7.3.5", "tar": "^6.1.2", "which": "^2.0.2" - }, - "dependencies": { - "@tootallnate/once": { - "version": "1.1.2", - "bundled": true, - "dev": true - }, - "http-proxy-agent": { - "version": "4.0.1", - "bundled": true, - "dev": true, - "requires": { - "@tootallnate/once": "1", - "agent-base": "6", - "debug": "4" - } - }, - "make-fetch-happen": { - "version": "9.1.0", - "bundled": true, - "dev": true, - "requires": { - "agentkeepalive": "^4.1.3", - "cacache": "^15.2.0", - "http-cache-semantics": "^4.1.0", - "http-proxy-agent": "^4.0.1", - "https-proxy-agent": "^5.0.0", - "is-lambda": "^1.0.1", - "lru-cache": "^6.0.0", - "minipass": "^3.1.3", - "minipass-collect": "^1.0.2", - "minipass-fetch": "^1.3.2", - "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.4", - "negotiator": "^0.6.2", - "promise-retry": "^2.0.1", - "socks-proxy-agent": "^6.0.0", - "ssri": "^8.0.0" - } - } } }, "nopt": { @@ -24665,13 +24545,13 @@ } }, "npm-registry-fetch": { - "version": "13.0.0", + "version": "13.0.1", "bundled": true, "dev": true, "requires": { - "make-fetch-happen": "^10.0.2", + "make-fetch-happen": "^10.0.3", "minipass": "^3.1.6", - "minipass-fetch": "^1.4.1", + "minipass-fetch": "^2.0.1", "minipass-json-stream": "^1.0.1", "minizlib": "^2.1.2", "npm-package-arg": "^9.0.0", @@ -24892,7 +24772,7 @@ "dev": true }, "signal-exit": { - "version": "3.0.6", + "version": "3.0.7", "bundled": true, "dev": true }, @@ -24902,12 +24782,12 @@ "dev": true }, "socks": { - "version": "2.6.1", + "version": "2.6.2", "bundled": true, "dev": true, "requires": { "ip": "^1.1.5", - "smart-buffer": "^4.1.0" + "smart-buffer": "^4.2.0" } }, "socks-proxy-agent": { @@ -25030,11 +24910,6 @@ "bundled": true, "dev": true }, - "typedarray-to-buffer": { - "version": "4.0.0", - "bundled": true, - "dev": true - }, "unique-filename": { "version": "1.1.1", "bundled": true, @@ -25108,14 +24983,12 @@ "dev": true }, "write-file-atomic": { - "version": "4.0.0", + "version": "4.0.1", "bundled": true, "dev": true, "requires": { "imurmurhash": "^0.1.4", - "is-typedarray": "^1.0.0", - "signal-exit": "^3.0.2", - "typedarray-to-buffer": "^4.0.0" + "signal-exit": "^3.0.7" } }, "yallist": { @@ -27202,9 +27075,9 @@ } }, "tsconfig-paths": { - "version": "3.12.0", - "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.12.0.tgz", - "integrity": "sha512-e5adrnOYT6zqVnWqZu7i/BQ3BnhzvGbjEjejFXO20lKIKpwTaupkCPgEfv4GZK1IBciJUEhYs3J3p75FdaTFVg==", + "version": "3.13.0", + "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.13.0.tgz", + "integrity": "sha512-nWuffZppoaYK0vQ1SQmkSsQzJoHA4s6uzdb2waRpD806x9yfq153AdVsWz4je2qZcW+pENrMQXbGQ3sMCkXuhw==", "dev": true, "requires": { "@types/json5": "^0.0.29", diff --git a/package.json b/package.json index 25a990e..ddac930 100644 --- a/package.json +++ b/package.json @@ -16,6 +16,7 @@ "start": "cross-env NODE_ENV=production node build/index.js", "dev": "concurrently -k -n \"TypeScript,Node\" -p \"[{name}]\" -c \"blue,green\" \"swc ./src --out-dir ./build --watch\" \"cross-env NODE_ENV=development nodemon build/index.js\"", "generate": "plop", + "scripts:delete-dead-uploaded-files": "node build/scripts/delete-dead-uploaded-files.js", "lint:commit": "commitlint", "lint:editorconfig": "editorconfig-checker", "lint:markdown": "markdownlint \"**/*.md\" --dot --ignore-path \".gitignore\"", @@ -46,7 +47,7 @@ "fastify-rate-limit": "5.7.2", "fastify-sensible": "3.1.2", "fastify-static": "4.5.0", - "fastify-swagger": "4.15.0", + "fastify-swagger": "4.17.0", "fastify-url-data": "3.0.3", "http-errors": "2.0.0", "jsonwebtoken": "8.5.1", @@ -60,7 +61,7 @@ "@commitlint/config-conventional": "16.2.1", "@saithodev/semantic-release-backmerge": "2.1.2", "@swc/cli": "0.1.55", - "@swc/core": "1.2.146", + "@swc/core": "1.2.148", "@swc/jest": "0.2.20", "@types/bcryptjs": "2.4.2", "@types/busboy": "1.3.0", @@ -76,7 +77,7 @@ "cross-env": "7.0.3", "editorconfig-checker": "4.0.2", "eslint": "8.10.0", - "eslint-config-prettier": "8.4.0", + "eslint-config-prettier": "8.5.0", "eslint-config-conventions": "1.1.0", "eslint-plugin-import": "2.25.4", "eslint-plugin-prettier": "4.0.0", @@ -86,7 +87,7 @@ "jest": "27.5.1", "jest-mock-extended": "2.0.4", "jest-ts-webcompat-resolver": "1.0.0", - "lint-staged": "12.3.4", + "lint-staged": "12.3.5", "markdownlint-cli": "0.31.1", "nodemon": "2.0.15", "plop": "3.0.5", diff --git a/src/__test__/setup.ts b/src/__test__/setup.ts index 251adc2..455b6bd 100644 --- a/src/__test__/setup.ts +++ b/src/__test__/setup.ts @@ -3,13 +3,15 @@ import { mockDeep, mockReset, DeepMockProxy } from 'jest-mock-extended' import prisma from '../tools/database/prisma.js' -jest.mock('nodemailer', () => ({ - createTransport: () => { - return { - sendMail: jest.fn(async () => {}) +jest.mock('nodemailer', () => { + return { + createTransport: () => { + return { + sendMail: jest.fn(async () => {}) + } } } -})) +}) jest.mock('../tools/database/prisma.js', () => ({ __esModule: true, diff --git a/src/scripts/delete-dead-uploaded-files.ts b/src/scripts/delete-dead-uploaded-files.ts new file mode 100644 index 0000000..71cd697 --- /dev/null +++ b/src/scripts/delete-dead-uploaded-files.ts @@ -0,0 +1,58 @@ +import fs from 'node:fs' + +import prisma from '../tools/database/prisma.js' +import { UPLOADS_URL } from '../tools/configurations/index.js' + +const getPathStoredInDatabaseFromFile = ( + file: string, + folderInUploadsFolder: string +): string => { + return `/uploads/${folderInUploadsFolder}/${file}` +} + +const deleteDeadUploadedFiles = async ( + folderInUploadsFolder: string, + getElementInDatabase: (file: string) => Promise +): Promise => { + const UPLOADS_FILES_URL = new URL(`./${folderInUploadsFolder}`, UPLOADS_URL) + const files = await fs.promises.readdir(UPLOADS_FILES_URL) + for (const file of files) { + if (file !== '.gitkeep') { + const pathStoredInDatabase = getPathStoredInDatabaseFromFile( + file, + folderInUploadsFolder + ) + const element = await getElementInDatabase(pathStoredInDatabase) + if (element == null) { + const fileURL = new URL( + `./${folderInUploadsFolder}/${file}`, + UPLOADS_URL + ) + await fs.promises.rm(fileURL) + } + } + } +} + +const main = async (): Promise => { + await deleteDeadUploadedFiles('guilds', async (icon: string) => { + return await prisma.guild.findFirst({ + where: { icon } + }) + }) + await deleteDeadUploadedFiles('messages', async (value: string) => { + return await prisma.message.findFirst({ + where: { type: 'file', value } + }) + }) + await deleteDeadUploadedFiles('users', async (logo: string) => { + return await prisma.user.findFirst({ + where: { logo } + }) + }) +} + +main().catch((error) => { + console.error(error) + process.exit(1) +}) diff --git a/src/tools/plugins/__test__/authenticateUser.test.ts b/src/tools/plugins/__test__/authenticateUser.test.ts new file mode 100644 index 0000000..830b2c0 --- /dev/null +++ b/src/tools/plugins/__test__/authenticateUser.test.ts @@ -0,0 +1,77 @@ +import httpErrors from 'http-errors' +import jwt from 'jsonwebtoken' + +import { userExample } from '../../../models/User.js' +import { prismaMock } from '../../../__test__/setup.js' +import { getUserWithBearerToken } from '../authenticateUser.js' + +const { Unauthorized, Forbidden, BadRequest } = httpErrors + +describe('tools/plugins/authenticateUser - getUserWithBearerToken', () => { + afterEach(() => { + jest.clearAllMocks() + }) + + it('shoulds succeeds with the right information', async () => { + prismaMock.user.findUnique.mockResolvedValue(userExample) + const currentStrategy = 'local' + jwt.verify = jest.fn((() => { + return { id: userExample.id, currentStrategy } + }) as any) + const userWithBearerToken = await getUserWithBearerToken('Bearer token') + expect(userWithBearerToken.current.id).toEqual(userExample.id) + expect(userWithBearerToken.current.name).toEqual(userExample.name) + expect(userWithBearerToken.accessToken).toEqual('token') + expect(userWithBearerToken.currentStrategy).toEqual(currentStrategy) + }) + + it('shoulds throws `Unauthorized` if `bearerToken` is not a string', async () => { + await expect( + async () => await getUserWithBearerToken(undefined) + ).rejects.toThrow(Unauthorized) + }) + + it('shoulds throws `Unauthorized` if `bearerToken` is not to the right format: `"Bearer token"`', async () => { + await expect( + async () => await getUserWithBearerToken('Bearer') + ).rejects.toThrow(Unauthorized) + await expect(async () => await getUserWithBearerToken('')).rejects.toThrow( + Unauthorized + ) + await expect( + async () => await getUserWithBearerToken('Bearer token token2') + ).rejects.toThrow(Unauthorized) + }) + + it('shoulds throws `Forbidden` if invalid `bearerToken` by `jwt.verify`', async () => { + jwt.verify = jest.fn((() => { + throw new Error('Invalid token') + }) as any) + await expect( + async () => await getUserWithBearerToken('Bearer token') + ).rejects.toThrow(Forbidden) + }) + + it("shoulds throws `Forbidden` if the user doesn't exist", async () => { + prismaMock.user.findUnique.mockResolvedValue(null) + jwt.verify = jest.fn((() => { + return { id: userExample.id } + }) as any) + await expect( + async () => await getUserWithBearerToken('Bearer token') + ).rejects.toThrow(Forbidden) + }) + + it('shoulds throws `BadRequest` if the user account is not confirmed', async () => { + prismaMock.user.findUnique.mockResolvedValue({ + ...userExample, + isConfirmed: false + }) + jwt.verify = jest.fn((() => { + return { id: userExample.id, currentStrategy: 'local' } + }) as any) + await expect( + async () => await getUserWithBearerToken('Bearer token') + ).rejects.toThrow(BadRequest) + }) +})