API authentifiée
This commit is contained in:
		@@ -1 +0,0 @@
 | 
			
		||||
DATABASE_URL="postgres://traintrapemoi:traintrapemoi@localhost:5432/traintrape-moi"
 | 
			
		||||
							
								
								
									
										2
									
								
								server/.env.example
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										2
									
								
								server/.env.example
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,2 @@
 | 
			
		||||
DATABASE_URL="postgres://username:password@localhost:5432/traintrape-moi"
 | 
			
		||||
JWT_SECRET="CHANGE_ME"
 | 
			
		||||
							
								
								
									
										1
									
								
								server/.gitignore
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										1
									
								
								server/.gitignore
									
									
									
									
										vendored
									
									
								
							@@ -40,6 +40,7 @@ lerna-debug.log*
 | 
			
		||||
!.vscode/extensions.json
 | 
			
		||||
 | 
			
		||||
# dotenv environment variable files
 | 
			
		||||
.env
 | 
			
		||||
.env*.local
 | 
			
		||||
 | 
			
		||||
# temp directory
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										591
									
								
								server/package-lock.json
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										591
									
								
								server/package-lock.json
									
									
									
										generated
									
									
									
								
							@@ -11,10 +11,15 @@
 | 
			
		||||
      "dependencies": {
 | 
			
		||||
        "@nestjs/common": "^10.0.0",
 | 
			
		||||
        "@nestjs/core": "^10.4.13",
 | 
			
		||||
        "@nestjs/jwt": "^10.2.0",
 | 
			
		||||
        "@nestjs/passport": "^10.0.3",
 | 
			
		||||
        "@nestjs/platform-express": "^10.0.0",
 | 
			
		||||
        "@nestjs/swagger": "^8.1.0",
 | 
			
		||||
        "@prisma/client": "^6.0.1",
 | 
			
		||||
        "bcrypt": "^5.1.1",
 | 
			
		||||
        "class-validator": "^0.14.1",
 | 
			
		||||
        "passport": "^0.7.0",
 | 
			
		||||
        "passport-jwt": "^4.0.1",
 | 
			
		||||
        "prisma": "^6.0.1",
 | 
			
		||||
        "reflect-metadata": "^0.2.0",
 | 
			
		||||
        "rxjs": "^7.8.1",
 | 
			
		||||
@@ -24,9 +29,11 @@
 | 
			
		||||
        "@nestjs/cli": "^10.0.0",
 | 
			
		||||
        "@nestjs/schematics": "^10.0.0",
 | 
			
		||||
        "@nestjs/testing": "^10.4.13",
 | 
			
		||||
        "@types/bcrypt": "^5.0.2",
 | 
			
		||||
        "@types/express": "^5.0.0",
 | 
			
		||||
        "@types/jest": "^29.5.2",
 | 
			
		||||
        "@types/node": "^20.3.1",
 | 
			
		||||
        "@types/passport-jwt": "^4.0.1",
 | 
			
		||||
        "@types/supertest": "^6.0.0",
 | 
			
		||||
        "@typescript-eslint/eslint-plugin": "^8.0.0",
 | 
			
		||||
        "@typescript-eslint/parser": "^8.0.0",
 | 
			
		||||
@@ -1566,6 +1573,50 @@
 | 
			
		||||
        "node": ">=8"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/@mapbox/node-pre-gyp": {
 | 
			
		||||
      "version": "1.0.11",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/@mapbox/node-pre-gyp/-/node-pre-gyp-1.0.11.tgz",
 | 
			
		||||
      "integrity": "sha512-Yhlar6v9WQgUp/He7BdgzOz8lqMQ8sU+jkCq7Wx8Myc5YFJLbEe7lgui/V7G1qB1DJykHSGwreceSaD60Y0PUQ==",
 | 
			
		||||
      "license": "BSD-3-Clause",
 | 
			
		||||
      "dependencies": {
 | 
			
		||||
        "detect-libc": "^2.0.0",
 | 
			
		||||
        "https-proxy-agent": "^5.0.0",
 | 
			
		||||
        "make-dir": "^3.1.0",
 | 
			
		||||
        "node-fetch": "^2.6.7",
 | 
			
		||||
        "nopt": "^5.0.0",
 | 
			
		||||
        "npmlog": "^5.0.1",
 | 
			
		||||
        "rimraf": "^3.0.2",
 | 
			
		||||
        "semver": "^7.3.5",
 | 
			
		||||
        "tar": "^6.1.11"
 | 
			
		||||
      },
 | 
			
		||||
      "bin": {
 | 
			
		||||
        "node-pre-gyp": "bin/node-pre-gyp"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/@mapbox/node-pre-gyp/node_modules/make-dir": {
 | 
			
		||||
      "version": "3.1.0",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz",
 | 
			
		||||
      "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==",
 | 
			
		||||
      "license": "MIT",
 | 
			
		||||
      "dependencies": {
 | 
			
		||||
        "semver": "^6.0.0"
 | 
			
		||||
      },
 | 
			
		||||
      "engines": {
 | 
			
		||||
        "node": ">=8"
 | 
			
		||||
      },
 | 
			
		||||
      "funding": {
 | 
			
		||||
        "url": "https://github.com/sponsors/sindresorhus"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/@mapbox/node-pre-gyp/node_modules/make-dir/node_modules/semver": {
 | 
			
		||||
      "version": "6.3.1",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
 | 
			
		||||
      "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
 | 
			
		||||
      "license": "ISC",
 | 
			
		||||
      "bin": {
 | 
			
		||||
        "semver": "bin/semver.js"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/@microsoft/tsdoc": {
 | 
			
		||||
      "version": "0.15.1",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/@microsoft/tsdoc/-/tsdoc-0.15.1.tgz",
 | 
			
		||||
@@ -1699,6 +1750,19 @@
 | 
			
		||||
        }
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/@nestjs/jwt": {
 | 
			
		||||
      "version": "10.2.0",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/@nestjs/jwt/-/jwt-10.2.0.tgz",
 | 
			
		||||
      "integrity": "sha512-x8cG90SURkEiLOehNaN2aRlotxT0KZESUliOPKKnjWiyJOcWurkF3w345WOX0P4MgFzUjGoZ1Sy0aZnxeihT0g==",
 | 
			
		||||
      "license": "MIT",
 | 
			
		||||
      "dependencies": {
 | 
			
		||||
        "@types/jsonwebtoken": "9.0.5",
 | 
			
		||||
        "jsonwebtoken": "9.0.2"
 | 
			
		||||
      },
 | 
			
		||||
      "peerDependencies": {
 | 
			
		||||
        "@nestjs/common": "^8.0.0 || ^9.0.0 || ^10.0.0"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/@nestjs/mapped-types": {
 | 
			
		||||
      "version": "2.0.6",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/@nestjs/mapped-types/-/mapped-types-2.0.6.tgz",
 | 
			
		||||
@@ -1719,6 +1783,16 @@
 | 
			
		||||
        }
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/@nestjs/passport": {
 | 
			
		||||
      "version": "10.0.3",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/@nestjs/passport/-/passport-10.0.3.tgz",
 | 
			
		||||
      "integrity": "sha512-znJ9Y4S8ZDVY+j4doWAJ8EuuVO7SkQN3yOBmzxbGaXbvcSwFDAdGJ+OMCg52NdzIO4tQoN4pYKx8W6M0ArfFRQ==",
 | 
			
		||||
      "license": "MIT",
 | 
			
		||||
      "peerDependencies": {
 | 
			
		||||
        "@nestjs/common": "^8.0.0 || ^9.0.0 || ^10.0.0",
 | 
			
		||||
        "passport": "^0.4.0 || ^0.5.0 || ^0.6.0 || ^0.7.0"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/@nestjs/platform-express": {
 | 
			
		||||
      "version": "10.4.13",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/@nestjs/platform-express/-/platform-express-10.4.13.tgz",
 | 
			
		||||
@@ -2075,6 +2149,16 @@
 | 
			
		||||
        "@babel/types": "^7.20.7"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/@types/bcrypt": {
 | 
			
		||||
      "version": "5.0.2",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/@types/bcrypt/-/bcrypt-5.0.2.tgz",
 | 
			
		||||
      "integrity": "sha512-6atioO8Y75fNcbmj0G7UjI9lXN2pQ/IGJ2FWT4a/btd0Lk9lQalHLKhkgKVZ3r+spnmWUKfbMi1GEe9wyHQfNQ==",
 | 
			
		||||
      "dev": true,
 | 
			
		||||
      "license": "MIT",
 | 
			
		||||
      "dependencies": {
 | 
			
		||||
        "@types/node": "*"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/@types/body-parser": {
 | 
			
		||||
      "version": "1.19.5",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.5.tgz",
 | 
			
		||||
@@ -2220,6 +2304,15 @@
 | 
			
		||||
      "dev": true,
 | 
			
		||||
      "license": "MIT"
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/@types/jsonwebtoken": {
 | 
			
		||||
      "version": "9.0.5",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/@types/jsonwebtoken/-/jsonwebtoken-9.0.5.tgz",
 | 
			
		||||
      "integrity": "sha512-VRLSGzik+Unrup6BsouBeHsf4d1hOEgYWTm/7Nmw1sXoN1+tRly/Gy/po3yeahnP4jfnQWWAhQAqcNfH7ngOkA==",
 | 
			
		||||
      "license": "MIT",
 | 
			
		||||
      "dependencies": {
 | 
			
		||||
        "@types/node": "*"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/@types/methods": {
 | 
			
		||||
      "version": "1.1.4",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/@types/methods/-/methods-1.1.4.tgz",
 | 
			
		||||
@@ -2238,12 +2331,43 @@
 | 
			
		||||
      "version": "20.17.9",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/@types/node/-/node-20.17.9.tgz",
 | 
			
		||||
      "integrity": "sha512-0JOXkRyLanfGPE2QRCwgxhzlBAvaRdCNMcvbd7jFfpmD4eEXll7LRwy5ymJmyeZqk7Nh7eD2LeUyQ68BbndmXw==",
 | 
			
		||||
      "dev": true,
 | 
			
		||||
      "license": "MIT",
 | 
			
		||||
      "dependencies": {
 | 
			
		||||
        "undici-types": "~6.19.2"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/@types/passport": {
 | 
			
		||||
      "version": "1.0.17",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/@types/passport/-/passport-1.0.17.tgz",
 | 
			
		||||
      "integrity": "sha512-aciLyx+wDwT2t2/kJGJR2AEeBz0nJU4WuRX04Wu9Dqc5lSUtwu0WERPHYsLhF9PtseiAMPBGNUOtFjxZ56prsg==",
 | 
			
		||||
      "dev": true,
 | 
			
		||||
      "license": "MIT",
 | 
			
		||||
      "dependencies": {
 | 
			
		||||
        "@types/express": "*"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/@types/passport-jwt": {
 | 
			
		||||
      "version": "4.0.1",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/@types/passport-jwt/-/passport-jwt-4.0.1.tgz",
 | 
			
		||||
      "integrity": "sha512-Y0Ykz6nWP4jpxgEUYq8NoVZeCQPo1ZndJLfapI249g1jHChvRfZRO/LS3tqu26YgAS/laI1qx98sYGz0IalRXQ==",
 | 
			
		||||
      "dev": true,
 | 
			
		||||
      "license": "MIT",
 | 
			
		||||
      "dependencies": {
 | 
			
		||||
        "@types/jsonwebtoken": "*",
 | 
			
		||||
        "@types/passport-strategy": "*"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/@types/passport-strategy": {
 | 
			
		||||
      "version": "0.2.38",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/@types/passport-strategy/-/passport-strategy-0.2.38.tgz",
 | 
			
		||||
      "integrity": "sha512-GC6eMqqojOooq993Tmnmp7AUTbbQSgilyvpCYQjT+H6JfG/g6RGc7nXEniZlp0zyKJ0WUdOiZWLBZft9Yug1uA==",
 | 
			
		||||
      "dev": true,
 | 
			
		||||
      "license": "MIT",
 | 
			
		||||
      "dependencies": {
 | 
			
		||||
        "@types/express": "*",
 | 
			
		||||
        "@types/passport": "*"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/@types/qs": {
 | 
			
		||||
      "version": "6.9.17",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.17.tgz",
 | 
			
		||||
@@ -2728,6 +2852,12 @@
 | 
			
		||||
      "dev": true,
 | 
			
		||||
      "license": "Apache-2.0"
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/abbrev": {
 | 
			
		||||
      "version": "1.1.1",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz",
 | 
			
		||||
      "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==",
 | 
			
		||||
      "license": "ISC"
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/accepts": {
 | 
			
		||||
      "version": "1.3.8",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz",
 | 
			
		||||
@@ -2777,6 +2907,18 @@
 | 
			
		||||
        "node": ">=0.4.0"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/agent-base": {
 | 
			
		||||
      "version": "6.0.2",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz",
 | 
			
		||||
      "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==",
 | 
			
		||||
      "license": "MIT",
 | 
			
		||||
      "dependencies": {
 | 
			
		||||
        "debug": "4"
 | 
			
		||||
      },
 | 
			
		||||
      "engines": {
 | 
			
		||||
        "node": ">= 6.0.0"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/ajv": {
 | 
			
		||||
      "version": "8.12.0",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz",
 | 
			
		||||
@@ -2855,7 +2997,6 @@
 | 
			
		||||
      "version": "5.0.1",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
 | 
			
		||||
      "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
 | 
			
		||||
      "dev": true,
 | 
			
		||||
      "license": "MIT",
 | 
			
		||||
      "engines": {
 | 
			
		||||
        "node": ">=8"
 | 
			
		||||
@@ -2909,6 +3050,40 @@
 | 
			
		||||
      "integrity": "sha512-klpgFSWLW1ZEs8svjfb7g4qWY0YS5imI82dTg+QahUvJ8YqAY0P10Uk8tTyh9ZGuYEZEMaeJYCF5BFuX552hsw==",
 | 
			
		||||
      "license": "MIT"
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/aproba": {
 | 
			
		||||
      "version": "2.0.0",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/aproba/-/aproba-2.0.0.tgz",
 | 
			
		||||
      "integrity": "sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==",
 | 
			
		||||
      "license": "ISC"
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/are-we-there-yet": {
 | 
			
		||||
      "version": "2.0.0",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-2.0.0.tgz",
 | 
			
		||||
      "integrity": "sha512-Ci/qENmwHnsYo9xKIcUJN5LeDKdJ6R1Z1j9V/J5wyq8nh/mYPEpIKJbBZXtZjG04HiK7zV/p6Vs9952MrMeUIw==",
 | 
			
		||||
      "deprecated": "This package is no longer supported.",
 | 
			
		||||
      "license": "ISC",
 | 
			
		||||
      "dependencies": {
 | 
			
		||||
        "delegates": "^1.0.0",
 | 
			
		||||
        "readable-stream": "^3.6.0"
 | 
			
		||||
      },
 | 
			
		||||
      "engines": {
 | 
			
		||||
        "node": ">=10"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/are-we-there-yet/node_modules/readable-stream": {
 | 
			
		||||
      "version": "3.6.2",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz",
 | 
			
		||||
      "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==",
 | 
			
		||||
      "license": "MIT",
 | 
			
		||||
      "dependencies": {
 | 
			
		||||
        "inherits": "^2.0.3",
 | 
			
		||||
        "string_decoder": "^1.1.1",
 | 
			
		||||
        "util-deprecate": "^1.0.1"
 | 
			
		||||
      },
 | 
			
		||||
      "engines": {
 | 
			
		||||
        "node": ">= 6"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/arg": {
 | 
			
		||||
      "version": "4.1.3",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz",
 | 
			
		||||
@@ -3086,7 +3261,6 @@
 | 
			
		||||
      "version": "1.0.2",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
 | 
			
		||||
      "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==",
 | 
			
		||||
      "dev": true,
 | 
			
		||||
      "license": "MIT"
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/base64-js": {
 | 
			
		||||
@@ -3110,6 +3284,20 @@
 | 
			
		||||
      ],
 | 
			
		||||
      "license": "MIT"
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/bcrypt": {
 | 
			
		||||
      "version": "5.1.1",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/bcrypt/-/bcrypt-5.1.1.tgz",
 | 
			
		||||
      "integrity": "sha512-AGBHOG5hPYZ5Xl9KXzU5iKq9516yEmvCKDg3ecP5kX2aB6UqTeXZxk2ELnDgDm6BQSMlLt9rDB4LoSMx0rYwww==",
 | 
			
		||||
      "hasInstallScript": true,
 | 
			
		||||
      "license": "MIT",
 | 
			
		||||
      "dependencies": {
 | 
			
		||||
        "@mapbox/node-pre-gyp": "^1.0.11",
 | 
			
		||||
        "node-addon-api": "^5.0.0"
 | 
			
		||||
      },
 | 
			
		||||
      "engines": {
 | 
			
		||||
        "node": ">= 10.0.0"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/binary-extensions": {
 | 
			
		||||
      "version": "2.3.0",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz",
 | 
			
		||||
@@ -3293,6 +3481,12 @@
 | 
			
		||||
        "ieee754": "^1.1.13"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/buffer-equal-constant-time": {
 | 
			
		||||
      "version": "1.0.1",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz",
 | 
			
		||||
      "integrity": "sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==",
 | 
			
		||||
      "license": "BSD-3-Clause"
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/buffer-from": {
 | 
			
		||||
      "version": "1.1.2",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz",
 | 
			
		||||
@@ -3437,6 +3631,15 @@
 | 
			
		||||
        "fsevents": "~2.3.2"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/chownr": {
 | 
			
		||||
      "version": "2.0.0",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz",
 | 
			
		||||
      "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==",
 | 
			
		||||
      "license": "ISC",
 | 
			
		||||
      "engines": {
 | 
			
		||||
        "node": ">=10"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/chrome-trace-event": {
 | 
			
		||||
      "version": "1.0.4",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.4.tgz",
 | 
			
		||||
@@ -3620,6 +3823,15 @@
 | 
			
		||||
      "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
 | 
			
		||||
      "license": "MIT"
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/color-support": {
 | 
			
		||||
      "version": "1.1.3",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz",
 | 
			
		||||
      "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==",
 | 
			
		||||
      "license": "ISC",
 | 
			
		||||
      "bin": {
 | 
			
		||||
        "color-support": "bin.js"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/combined-stream": {
 | 
			
		||||
      "version": "1.0.8",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz",
 | 
			
		||||
@@ -3674,7 +3886,6 @@
 | 
			
		||||
      "version": "0.0.1",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
 | 
			
		||||
      "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==",
 | 
			
		||||
      "dev": true,
 | 
			
		||||
      "license": "MIT"
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/concat-stream": {
 | 
			
		||||
@@ -3698,6 +3909,12 @@
 | 
			
		||||
      "integrity": "sha512-9vAdYbHj6x2fLKC4+oPH0kFzY/orMZyG2Aj+kNylHxKGJ/Ed4dpNyAQYwJOdqO4zdM7XpVHmyejQDcQHrnuXbw==",
 | 
			
		||||
      "license": "MIT"
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/console-control-strings": {
 | 
			
		||||
      "version": "1.1.0",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz",
 | 
			
		||||
      "integrity": "sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==",
 | 
			
		||||
      "license": "ISC"
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/content-disposition": {
 | 
			
		||||
      "version": "0.5.4",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz",
 | 
			
		||||
@@ -3842,7 +4059,6 @@
 | 
			
		||||
      "version": "4.3.7",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz",
 | 
			
		||||
      "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==",
 | 
			
		||||
      "dev": true,
 | 
			
		||||
      "license": "MIT",
 | 
			
		||||
      "dependencies": {
 | 
			
		||||
        "ms": "^2.1.3"
 | 
			
		||||
@@ -3928,6 +4144,12 @@
 | 
			
		||||
        "node": ">=0.4.0"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/delegates": {
 | 
			
		||||
      "version": "1.0.0",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz",
 | 
			
		||||
      "integrity": "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==",
 | 
			
		||||
      "license": "MIT"
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/depd": {
 | 
			
		||||
      "version": "2.0.0",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz",
 | 
			
		||||
@@ -3947,6 +4169,15 @@
 | 
			
		||||
        "npm": "1.2.8000 || >= 1.4.16"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/detect-libc": {
 | 
			
		||||
      "version": "2.0.3",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.3.tgz",
 | 
			
		||||
      "integrity": "sha512-bwy0MGW55bG41VqxxypOsdSdGqLwXPI/focwgTYCFMbdUiBAxLg9CFzG08sz2aqzknwiX7Hkl0bQENjg8iLByw==",
 | 
			
		||||
      "license": "Apache-2.0",
 | 
			
		||||
      "engines": {
 | 
			
		||||
        "node": ">=8"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/detect-newline": {
 | 
			
		||||
      "version": "3.1.0",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz",
 | 
			
		||||
@@ -4008,6 +4239,15 @@
 | 
			
		||||
      "dev": true,
 | 
			
		||||
      "license": "MIT"
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/ecdsa-sig-formatter": {
 | 
			
		||||
      "version": "1.0.11",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz",
 | 
			
		||||
      "integrity": "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==",
 | 
			
		||||
      "license": "Apache-2.0",
 | 
			
		||||
      "dependencies": {
 | 
			
		||||
        "safe-buffer": "^5.0.1"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/ee-first": {
 | 
			
		||||
      "version": "1.1.1",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz",
 | 
			
		||||
@@ -4054,7 +4294,6 @@
 | 
			
		||||
      "version": "8.0.0",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
 | 
			
		||||
      "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
 | 
			
		||||
      "dev": true,
 | 
			
		||||
      "license": "MIT"
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/encodeurl": {
 | 
			
		||||
@@ -4922,6 +5161,36 @@
 | 
			
		||||
        "node": ">=12"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/fs-minipass": {
 | 
			
		||||
      "version": "2.1.0",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz",
 | 
			
		||||
      "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==",
 | 
			
		||||
      "license": "ISC",
 | 
			
		||||
      "dependencies": {
 | 
			
		||||
        "minipass": "^3.0.0"
 | 
			
		||||
      },
 | 
			
		||||
      "engines": {
 | 
			
		||||
        "node": ">= 8"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/fs-minipass/node_modules/minipass": {
 | 
			
		||||
      "version": "3.3.6",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz",
 | 
			
		||||
      "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==",
 | 
			
		||||
      "license": "ISC",
 | 
			
		||||
      "dependencies": {
 | 
			
		||||
        "yallist": "^4.0.0"
 | 
			
		||||
      },
 | 
			
		||||
      "engines": {
 | 
			
		||||
        "node": ">=8"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/fs-minipass/node_modules/yallist": {
 | 
			
		||||
      "version": "4.0.0",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
 | 
			
		||||
      "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
 | 
			
		||||
      "license": "ISC"
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/fs-monkey": {
 | 
			
		||||
      "version": "1.0.6",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/fs-monkey/-/fs-monkey-1.0.6.tgz",
 | 
			
		||||
@@ -4933,7 +5202,6 @@
 | 
			
		||||
      "version": "1.0.0",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
 | 
			
		||||
      "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==",
 | 
			
		||||
      "dev": true,
 | 
			
		||||
      "license": "ISC"
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/fsevents": {
 | 
			
		||||
@@ -4959,6 +5227,33 @@
 | 
			
		||||
        "url": "https://github.com/sponsors/ljharb"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/gauge": {
 | 
			
		||||
      "version": "3.0.2",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/gauge/-/gauge-3.0.2.tgz",
 | 
			
		||||
      "integrity": "sha512-+5J6MS/5XksCuXq++uFRsnUd7Ovu1XenbeuIuNRJxYWjgQbPuFhT14lAvsWfqfAmnwluf1OwMjz39HjfLPci0Q==",
 | 
			
		||||
      "deprecated": "This package is no longer supported.",
 | 
			
		||||
      "license": "ISC",
 | 
			
		||||
      "dependencies": {
 | 
			
		||||
        "aproba": "^1.0.3 || ^2.0.0",
 | 
			
		||||
        "color-support": "^1.1.2",
 | 
			
		||||
        "console-control-strings": "^1.0.0",
 | 
			
		||||
        "has-unicode": "^2.0.1",
 | 
			
		||||
        "object-assign": "^4.1.1",
 | 
			
		||||
        "signal-exit": "^3.0.0",
 | 
			
		||||
        "string-width": "^4.2.3",
 | 
			
		||||
        "strip-ansi": "^6.0.1",
 | 
			
		||||
        "wide-align": "^1.1.2"
 | 
			
		||||
      },
 | 
			
		||||
      "engines": {
 | 
			
		||||
        "node": ">=10"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/gauge/node_modules/signal-exit": {
 | 
			
		||||
      "version": "3.0.7",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz",
 | 
			
		||||
      "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==",
 | 
			
		||||
      "license": "ISC"
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/gensync": {
 | 
			
		||||
      "version": "1.0.0-beta.2",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz",
 | 
			
		||||
@@ -5162,6 +5457,12 @@
 | 
			
		||||
        "url": "https://github.com/sponsors/ljharb"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/has-unicode": {
 | 
			
		||||
      "version": "2.0.1",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz",
 | 
			
		||||
      "integrity": "sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==",
 | 
			
		||||
      "license": "ISC"
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/hasown": {
 | 
			
		||||
      "version": "2.0.2",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz",
 | 
			
		||||
@@ -5207,6 +5508,19 @@
 | 
			
		||||
        "node": ">= 0.8"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/https-proxy-agent": {
 | 
			
		||||
      "version": "5.0.1",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz",
 | 
			
		||||
      "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==",
 | 
			
		||||
      "license": "MIT",
 | 
			
		||||
      "dependencies": {
 | 
			
		||||
        "agent-base": "6",
 | 
			
		||||
        "debug": "4"
 | 
			
		||||
      },
 | 
			
		||||
      "engines": {
 | 
			
		||||
        "node": ">= 6"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/human-signals": {
 | 
			
		||||
      "version": "2.1.0",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz",
 | 
			
		||||
@@ -5312,7 +5626,6 @@
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
 | 
			
		||||
      "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==",
 | 
			
		||||
      "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.",
 | 
			
		||||
      "dev": true,
 | 
			
		||||
      "license": "ISC",
 | 
			
		||||
      "dependencies": {
 | 
			
		||||
        "once": "^1.3.0",
 | 
			
		||||
@@ -5411,7 +5724,6 @@
 | 
			
		||||
      "version": "3.0.0",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
 | 
			
		||||
      "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
 | 
			
		||||
      "dev": true,
 | 
			
		||||
      "license": "MIT",
 | 
			
		||||
      "engines": {
 | 
			
		||||
        "node": ">=8"
 | 
			
		||||
@@ -6460,6 +6772,49 @@
 | 
			
		||||
        "graceful-fs": "^4.1.6"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/jsonwebtoken": {
 | 
			
		||||
      "version": "9.0.2",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-9.0.2.tgz",
 | 
			
		||||
      "integrity": "sha512-PRp66vJ865SSqOlgqS8hujT5U4AOgMfhrwYIuIhfKaoSCZcirrmASQr8CX7cUg+RMih+hgznrjp99o+W4pJLHQ==",
 | 
			
		||||
      "license": "MIT",
 | 
			
		||||
      "dependencies": {
 | 
			
		||||
        "jws": "^3.2.2",
 | 
			
		||||
        "lodash.includes": "^4.3.0",
 | 
			
		||||
        "lodash.isboolean": "^3.0.3",
 | 
			
		||||
        "lodash.isinteger": "^4.0.4",
 | 
			
		||||
        "lodash.isnumber": "^3.0.3",
 | 
			
		||||
        "lodash.isplainobject": "^4.0.6",
 | 
			
		||||
        "lodash.isstring": "^4.0.1",
 | 
			
		||||
        "lodash.once": "^4.0.0",
 | 
			
		||||
        "ms": "^2.1.1",
 | 
			
		||||
        "semver": "^7.5.4"
 | 
			
		||||
      },
 | 
			
		||||
      "engines": {
 | 
			
		||||
        "node": ">=12",
 | 
			
		||||
        "npm": ">=6"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/jwa": {
 | 
			
		||||
      "version": "1.4.1",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/jwa/-/jwa-1.4.1.tgz",
 | 
			
		||||
      "integrity": "sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA==",
 | 
			
		||||
      "license": "MIT",
 | 
			
		||||
      "dependencies": {
 | 
			
		||||
        "buffer-equal-constant-time": "1.0.1",
 | 
			
		||||
        "ecdsa-sig-formatter": "1.0.11",
 | 
			
		||||
        "safe-buffer": "^5.0.1"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/jws": {
 | 
			
		||||
      "version": "3.2.2",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/jws/-/jws-3.2.2.tgz",
 | 
			
		||||
      "integrity": "sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==",
 | 
			
		||||
      "license": "MIT",
 | 
			
		||||
      "dependencies": {
 | 
			
		||||
        "jwa": "^1.4.1",
 | 
			
		||||
        "safe-buffer": "^5.0.1"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/keyv": {
 | 
			
		||||
      "version": "4.5.4",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz",
 | 
			
		||||
@@ -6549,6 +6904,42 @@
 | 
			
		||||
      "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==",
 | 
			
		||||
      "license": "MIT"
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/lodash.includes": {
 | 
			
		||||
      "version": "4.3.0",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/lodash.includes/-/lodash.includes-4.3.0.tgz",
 | 
			
		||||
      "integrity": "sha512-W3Bx6mdkRTGtlJISOvVD/lbqjTlPPUDTMnlXZFnVwi9NKJ6tiAk6LVdlhZMm17VZisqhKcgzpO5Wz91PCt5b0w==",
 | 
			
		||||
      "license": "MIT"
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/lodash.isboolean": {
 | 
			
		||||
      "version": "3.0.3",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz",
 | 
			
		||||
      "integrity": "sha512-Bz5mupy2SVbPHURB98VAcw+aHh4vRV5IPNhILUCsOzRmsTmSQ17jIuqopAentWoehktxGd9e/hbIXq980/1QJg==",
 | 
			
		||||
      "license": "MIT"
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/lodash.isinteger": {
 | 
			
		||||
      "version": "4.0.4",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz",
 | 
			
		||||
      "integrity": "sha512-DBwtEWN2caHQ9/imiNeEA5ys1JoRtRfY3d7V9wkqtbycnAmTvRRmbHKDV4a0EYc678/dia0jrte4tjYwVBaZUA==",
 | 
			
		||||
      "license": "MIT"
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/lodash.isnumber": {
 | 
			
		||||
      "version": "3.0.3",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz",
 | 
			
		||||
      "integrity": "sha512-QYqzpfwO3/CWf3XP+Z+tkQsfaLL/EnUlXWVkIk5FUPc4sBdTehEqZONuyRt2P67PXAk+NXmTBcc97zw9t1FQrw==",
 | 
			
		||||
      "license": "MIT"
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/lodash.isplainobject": {
 | 
			
		||||
      "version": "4.0.6",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz",
 | 
			
		||||
      "integrity": "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==",
 | 
			
		||||
      "license": "MIT"
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/lodash.isstring": {
 | 
			
		||||
      "version": "4.0.1",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz",
 | 
			
		||||
      "integrity": "sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw==",
 | 
			
		||||
      "license": "MIT"
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/lodash.memoize": {
 | 
			
		||||
      "version": "4.1.2",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz",
 | 
			
		||||
@@ -6563,6 +6954,12 @@
 | 
			
		||||
      "dev": true,
 | 
			
		||||
      "license": "MIT"
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/lodash.once": {
 | 
			
		||||
      "version": "4.1.1",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz",
 | 
			
		||||
      "integrity": "sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==",
 | 
			
		||||
      "license": "MIT"
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/log-symbols": {
 | 
			
		||||
      "version": "4.1.0",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz",
 | 
			
		||||
@@ -6798,6 +7195,37 @@
 | 
			
		||||
        "node": ">=16 || 14 >=14.17"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/minizlib": {
 | 
			
		||||
      "version": "2.1.2",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz",
 | 
			
		||||
      "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==",
 | 
			
		||||
      "license": "MIT",
 | 
			
		||||
      "dependencies": {
 | 
			
		||||
        "minipass": "^3.0.0",
 | 
			
		||||
        "yallist": "^4.0.0"
 | 
			
		||||
      },
 | 
			
		||||
      "engines": {
 | 
			
		||||
        "node": ">= 8"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/minizlib/node_modules/minipass": {
 | 
			
		||||
      "version": "3.3.6",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz",
 | 
			
		||||
      "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==",
 | 
			
		||||
      "license": "ISC",
 | 
			
		||||
      "dependencies": {
 | 
			
		||||
        "yallist": "^4.0.0"
 | 
			
		||||
      },
 | 
			
		||||
      "engines": {
 | 
			
		||||
        "node": ">=8"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/minizlib/node_modules/yallist": {
 | 
			
		||||
      "version": "4.0.0",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
 | 
			
		||||
      "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
 | 
			
		||||
      "license": "ISC"
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/mkdirp": {
 | 
			
		||||
      "version": "0.5.6",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz",
 | 
			
		||||
@@ -6871,6 +7299,12 @@
 | 
			
		||||
      "dev": true,
 | 
			
		||||
      "license": "MIT"
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/node-addon-api": {
 | 
			
		||||
      "version": "5.1.0",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-5.1.0.tgz",
 | 
			
		||||
      "integrity": "sha512-eh0GgfEkpnoWDq+VY8OyvYhFEzBk6jIYbRKdIlyTiAXIVJ8PyBaKb0rp7oDtoddbdoHWhq8wwr+XZ81F1rpNdA==",
 | 
			
		||||
      "license": "MIT"
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/node-emoji": {
 | 
			
		||||
      "version": "1.11.0",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/node-emoji/-/node-emoji-1.11.0.tgz",
 | 
			
		||||
@@ -6915,6 +7349,21 @@
 | 
			
		||||
      "dev": true,
 | 
			
		||||
      "license": "MIT"
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/nopt": {
 | 
			
		||||
      "version": "5.0.0",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz",
 | 
			
		||||
      "integrity": "sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==",
 | 
			
		||||
      "license": "ISC",
 | 
			
		||||
      "dependencies": {
 | 
			
		||||
        "abbrev": "1"
 | 
			
		||||
      },
 | 
			
		||||
      "bin": {
 | 
			
		||||
        "nopt": "bin/nopt.js"
 | 
			
		||||
      },
 | 
			
		||||
      "engines": {
 | 
			
		||||
        "node": ">=6"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/normalize-path": {
 | 
			
		||||
      "version": "3.0.0",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
 | 
			
		||||
@@ -6938,6 +7387,19 @@
 | 
			
		||||
        "node": ">=8"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/npmlog": {
 | 
			
		||||
      "version": "5.0.1",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-5.0.1.tgz",
 | 
			
		||||
      "integrity": "sha512-AqZtDUWOMKs1G/8lwylVjrdYgqA4d9nu8hc+0gzRxlDb1I10+FHBGMXs6aiQHFdCUUlqH99MUMuLfzWDNDtfxw==",
 | 
			
		||||
      "deprecated": "This package is no longer supported.",
 | 
			
		||||
      "license": "ISC",
 | 
			
		||||
      "dependencies": {
 | 
			
		||||
        "are-we-there-yet": "^2.0.0",
 | 
			
		||||
        "console-control-strings": "^1.1.0",
 | 
			
		||||
        "gauge": "^3.0.0",
 | 
			
		||||
        "set-blocking": "^2.0.0"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/object-assign": {
 | 
			
		||||
      "version": "4.1.1",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
 | 
			
		||||
@@ -6975,7 +7437,6 @@
 | 
			
		||||
      "version": "1.4.0",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
 | 
			
		||||
      "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==",
 | 
			
		||||
      "dev": true,
 | 
			
		||||
      "license": "ISC",
 | 
			
		||||
      "dependencies": {
 | 
			
		||||
        "wrappy": "1"
 | 
			
		||||
@@ -7139,6 +7600,42 @@
 | 
			
		||||
        "node": ">= 0.8"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/passport": {
 | 
			
		||||
      "version": "0.7.0",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/passport/-/passport-0.7.0.tgz",
 | 
			
		||||
      "integrity": "sha512-cPLl+qZpSc+ireUvt+IzqbED1cHHkDoVYMo30jbJIdOOjQ1MQYZBPiNvmi8UM6lJuOpTPXJGZQk0DtC4y61MYQ==",
 | 
			
		||||
      "license": "MIT",
 | 
			
		||||
      "dependencies": {
 | 
			
		||||
        "passport-strategy": "1.x.x",
 | 
			
		||||
        "pause": "0.0.1",
 | 
			
		||||
        "utils-merge": "^1.0.1"
 | 
			
		||||
      },
 | 
			
		||||
      "engines": {
 | 
			
		||||
        "node": ">= 0.4.0"
 | 
			
		||||
      },
 | 
			
		||||
      "funding": {
 | 
			
		||||
        "type": "github",
 | 
			
		||||
        "url": "https://github.com/sponsors/jaredhanson"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/passport-jwt": {
 | 
			
		||||
      "version": "4.0.1",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/passport-jwt/-/passport-jwt-4.0.1.tgz",
 | 
			
		||||
      "integrity": "sha512-UCKMDYhNuGOBE9/9Ycuoyh7vP6jpeTp/+sfMJl7nLff/t6dps+iaeE0hhNkKN8/HZHcJ7lCdOyDxHdDoxoSvdQ==",
 | 
			
		||||
      "license": "MIT",
 | 
			
		||||
      "dependencies": {
 | 
			
		||||
        "jsonwebtoken": "^9.0.0",
 | 
			
		||||
        "passport-strategy": "^1.0.0"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/passport-strategy": {
 | 
			
		||||
      "version": "1.0.0",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/passport-strategy/-/passport-strategy-1.0.0.tgz",
 | 
			
		||||
      "integrity": "sha512-CB97UUvDKJde2V0KDWWB3lyf6PC3FaZP7YxZ2G8OAtn9p4HI9j9JLP9qjOGZFvyl8uwNT8qM+hGnz/n16NI7oA==",
 | 
			
		||||
      "engines": {
 | 
			
		||||
        "node": ">= 0.4.0"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/path-exists": {
 | 
			
		||||
      "version": "4.0.0",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
 | 
			
		||||
@@ -7153,7 +7650,6 @@
 | 
			
		||||
      "version": "1.0.1",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
 | 
			
		||||
      "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==",
 | 
			
		||||
      "dev": true,
 | 
			
		||||
      "license": "MIT",
 | 
			
		||||
      "engines": {
 | 
			
		||||
        "node": ">=0.10.0"
 | 
			
		||||
@@ -7216,6 +7712,11 @@
 | 
			
		||||
        "node": ">=8"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/pause": {
 | 
			
		||||
      "version": "0.0.1",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/pause/-/pause-0.0.1.tgz",
 | 
			
		||||
      "integrity": "sha512-KG8UEiEVkR3wGEb4m5yZkVCzigAD+cVEJck2CzYZO37ZGJfctvVptVO192MwrtPhzONn6go8ylnOdMhKqi4nfg=="
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/picocolors": {
 | 
			
		||||
      "version": "1.1.1",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz",
 | 
			
		||||
@@ -7729,7 +8230,6 @@
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz",
 | 
			
		||||
      "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==",
 | 
			
		||||
      "deprecated": "Rimraf versions prior to v4 are no longer supported",
 | 
			
		||||
      "dev": true,
 | 
			
		||||
      "license": "ISC",
 | 
			
		||||
      "dependencies": {
 | 
			
		||||
        "glob": "^7.1.3"
 | 
			
		||||
@@ -7745,7 +8245,6 @@
 | 
			
		||||
      "version": "1.1.11",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
 | 
			
		||||
      "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
 | 
			
		||||
      "dev": true,
 | 
			
		||||
      "license": "MIT",
 | 
			
		||||
      "dependencies": {
 | 
			
		||||
        "balanced-match": "^1.0.0",
 | 
			
		||||
@@ -7757,7 +8256,6 @@
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz",
 | 
			
		||||
      "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==",
 | 
			
		||||
      "deprecated": "Glob versions prior to v9 are no longer supported",
 | 
			
		||||
      "dev": true,
 | 
			
		||||
      "license": "ISC",
 | 
			
		||||
      "dependencies": {
 | 
			
		||||
        "fs.realpath": "^1.0.0",
 | 
			
		||||
@@ -7778,7 +8276,6 @@
 | 
			
		||||
      "version": "3.1.2",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
 | 
			
		||||
      "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
 | 
			
		||||
      "dev": true,
 | 
			
		||||
      "license": "ISC",
 | 
			
		||||
      "dependencies": {
 | 
			
		||||
        "brace-expansion": "^1.1.7"
 | 
			
		||||
@@ -7913,7 +8410,6 @@
 | 
			
		||||
      "version": "7.6.3",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz",
 | 
			
		||||
      "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==",
 | 
			
		||||
      "dev": true,
 | 
			
		||||
      "license": "ISC",
 | 
			
		||||
      "bin": {
 | 
			
		||||
        "semver": "bin/semver.js"
 | 
			
		||||
@@ -7995,6 +8491,12 @@
 | 
			
		||||
        "node": ">= 0.8.0"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/set-blocking": {
 | 
			
		||||
      "version": "2.0.0",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz",
 | 
			
		||||
      "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==",
 | 
			
		||||
      "license": "ISC"
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/set-function-length": {
 | 
			
		||||
      "version": "1.2.2",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz",
 | 
			
		||||
@@ -8200,7 +8702,6 @@
 | 
			
		||||
      "version": "4.2.3",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
 | 
			
		||||
      "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
 | 
			
		||||
      "dev": true,
 | 
			
		||||
      "license": "MIT",
 | 
			
		||||
      "dependencies": {
 | 
			
		||||
        "emoji-regex": "^8.0.0",
 | 
			
		||||
@@ -8231,7 +8732,6 @@
 | 
			
		||||
      "version": "6.0.1",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
 | 
			
		||||
      "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
 | 
			
		||||
      "dev": true,
 | 
			
		||||
      "license": "MIT",
 | 
			
		||||
      "dependencies": {
 | 
			
		||||
        "ansi-regex": "^5.0.1"
 | 
			
		||||
@@ -8421,6 +8921,50 @@
 | 
			
		||||
        "node": ">=6"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/tar": {
 | 
			
		||||
      "version": "6.2.1",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/tar/-/tar-6.2.1.tgz",
 | 
			
		||||
      "integrity": "sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==",
 | 
			
		||||
      "license": "ISC",
 | 
			
		||||
      "dependencies": {
 | 
			
		||||
        "chownr": "^2.0.0",
 | 
			
		||||
        "fs-minipass": "^2.0.0",
 | 
			
		||||
        "minipass": "^5.0.0",
 | 
			
		||||
        "minizlib": "^2.1.1",
 | 
			
		||||
        "mkdirp": "^1.0.3",
 | 
			
		||||
        "yallist": "^4.0.0"
 | 
			
		||||
      },
 | 
			
		||||
      "engines": {
 | 
			
		||||
        "node": ">=10"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/tar/node_modules/minipass": {
 | 
			
		||||
      "version": "5.0.0",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz",
 | 
			
		||||
      "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==",
 | 
			
		||||
      "license": "ISC",
 | 
			
		||||
      "engines": {
 | 
			
		||||
        "node": ">=8"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/tar/node_modules/mkdirp": {
 | 
			
		||||
      "version": "1.0.4",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz",
 | 
			
		||||
      "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==",
 | 
			
		||||
      "license": "MIT",
 | 
			
		||||
      "bin": {
 | 
			
		||||
        "mkdirp": "bin/cmd.js"
 | 
			
		||||
      },
 | 
			
		||||
      "engines": {
 | 
			
		||||
        "node": ">=10"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/tar/node_modules/yallist": {
 | 
			
		||||
      "version": "4.0.0",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
 | 
			
		||||
      "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
 | 
			
		||||
      "license": "ISC"
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/terser": {
 | 
			
		||||
      "version": "5.36.0",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/terser/-/terser-5.36.0.tgz",
 | 
			
		||||
@@ -8905,7 +9449,6 @@
 | 
			
		||||
      "version": "6.19.8",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.19.8.tgz",
 | 
			
		||||
      "integrity": "sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==",
 | 
			
		||||
      "dev": true,
 | 
			
		||||
      "license": "MIT"
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/universalify": {
 | 
			
		||||
@@ -9180,6 +9723,15 @@
 | 
			
		||||
        "node": ">= 8"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/wide-align": {
 | 
			
		||||
      "version": "1.1.5",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz",
 | 
			
		||||
      "integrity": "sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==",
 | 
			
		||||
      "license": "ISC",
 | 
			
		||||
      "dependencies": {
 | 
			
		||||
        "string-width": "^1.0.2 || 2 || 3 || 4"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/word-wrap": {
 | 
			
		||||
      "version": "1.2.5",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz",
 | 
			
		||||
@@ -9228,7 +9780,6 @@
 | 
			
		||||
      "version": "1.0.2",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
 | 
			
		||||
      "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==",
 | 
			
		||||
      "dev": true,
 | 
			
		||||
      "license": "ISC"
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/write-file-atomic": {
 | 
			
		||||
 
 | 
			
		||||
@@ -22,10 +22,15 @@
 | 
			
		||||
  "dependencies": {
 | 
			
		||||
    "@nestjs/common": "^10.0.0",
 | 
			
		||||
    "@nestjs/core": "^10.4.13",
 | 
			
		||||
    "@nestjs/jwt": "^10.2.0",
 | 
			
		||||
    "@nestjs/passport": "^10.0.3",
 | 
			
		||||
    "@nestjs/platform-express": "^10.0.0",
 | 
			
		||||
    "@nestjs/swagger": "^8.1.0",
 | 
			
		||||
    "@prisma/client": "^6.0.1",
 | 
			
		||||
    "bcrypt": "^5.1.1",
 | 
			
		||||
    "class-validator": "^0.14.1",
 | 
			
		||||
    "passport": "^0.7.0",
 | 
			
		||||
    "passport-jwt": "^4.0.1",
 | 
			
		||||
    "prisma": "^6.0.1",
 | 
			
		||||
    "reflect-metadata": "^0.2.0",
 | 
			
		||||
    "rxjs": "^7.8.1",
 | 
			
		||||
@@ -35,9 +40,11 @@
 | 
			
		||||
    "@nestjs/cli": "^10.0.0",
 | 
			
		||||
    "@nestjs/schematics": "^10.0.0",
 | 
			
		||||
    "@nestjs/testing": "^10.4.13",
 | 
			
		||||
    "@types/bcrypt": "^5.0.2",
 | 
			
		||||
    "@types/express": "^5.0.0",
 | 
			
		||||
    "@types/jest": "^29.5.2",
 | 
			
		||||
    "@types/node": "^20.3.1",
 | 
			
		||||
    "@types/passport-jwt": "^4.0.1",
 | 
			
		||||
    "@types/supertest": "^6.0.0",
 | 
			
		||||
    "@typescript-eslint/eslint-plugin": "^8.0.0",
 | 
			
		||||
    "@typescript-eslint/parser": "^8.0.0",
 | 
			
		||||
 
 | 
			
		||||
@@ -5,6 +5,7 @@ CREATE TYPE "MoneyUpdateType" AS ENUM ('START', 'WIN_CHALLENGE', 'BUY_TRAIN');
 | 
			
		||||
CREATE TABLE "User" (
 | 
			
		||||
    "id" SERIAL NOT NULL,
 | 
			
		||||
    "name" TEXT NOT NULL,
 | 
			
		||||
    "password" TEXT NOT NULL,
 | 
			
		||||
    "money" INTEGER NOT NULL DEFAULT 0,
 | 
			
		||||
    "currentRunner" BOOLEAN NOT NULL DEFAULT false,
 | 
			
		||||
 | 
			
		||||
@@ -10,6 +10,7 @@ datasource db {
 | 
			
		||||
model User {
 | 
			
		||||
  id            Int               @id @default(autoincrement())
 | 
			
		||||
  name          String            @unique
 | 
			
		||||
  password      String
 | 
			
		||||
  money         Int               @default(0)
 | 
			
		||||
  currentRunner Boolean           @default(false)
 | 
			
		||||
  actions       ChallengeAction[]
 | 
			
		||||
 
 | 
			
		||||
@@ -1,17 +1,21 @@
 | 
			
		||||
import { PrismaClient } from '@prisma/client'
 | 
			
		||||
import * as bcrypt from 'bcrypt'
 | 
			
		||||
 | 
			
		||||
const prisma = new PrismaClient()
 | 
			
		||||
 | 
			
		||||
async function main() {
 | 
			
		||||
  const emmyPassword = await bcrypt.hash("Emmy", 10)
 | 
			
		||||
  const emmy = await prisma.user.upsert({
 | 
			
		||||
    where: { id: 1 },
 | 
			
		||||
    update: { name: 'Emmy' },
 | 
			
		||||
    create: { name: 'Emmy' },
 | 
			
		||||
    create: { name: 'Emmy', password: emmyPassword },
 | 
			
		||||
  })
 | 
			
		||||
 | 
			
		||||
  const taminaPassword = await bcrypt.hash("Tamina", 10)
 | 
			
		||||
  const tamina = await prisma.user.upsert({
 | 
			
		||||
    where: { id: 2 },
 | 
			
		||||
    update: { name: 'Tamina' },
 | 
			
		||||
    create: { name: 'Tamina' },
 | 
			
		||||
    create: { name: 'Tamina', password: taminaPassword },
 | 
			
		||||
  })
 | 
			
		||||
  console.log({ emmy, tamina })
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -2,9 +2,10 @@ import { Module } from '@nestjs/common'
 | 
			
		||||
import { PrismaService } from './prisma/prisma.service'
 | 
			
		||||
import { PrismaModule } from './prisma/prisma.module'
 | 
			
		||||
import { UsersModule } from './users/users.module'
 | 
			
		||||
import { AuthModule } from './auth/auth.module'
 | 
			
		||||
 | 
			
		||||
@Module({
 | 
			
		||||
  imports: [PrismaModule, UsersModule],
 | 
			
		||||
  imports: [PrismaModule, UsersModule, AuthModule],
 | 
			
		||||
  providers: [PrismaService],
 | 
			
		||||
})
 | 
			
		||||
export class AppModule {}
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										20
									
								
								server/src/auth/auth.controller.spec.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										20
									
								
								server/src/auth/auth.controller.spec.ts
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,20 @@
 | 
			
		||||
import { Test, TestingModule } from '@nestjs/testing'
 | 
			
		||||
import { AuthController } from './auth.controller'
 | 
			
		||||
import { AuthService } from './auth.service'
 | 
			
		||||
 | 
			
		||||
describe('AuthController', () => {
 | 
			
		||||
  let controller: AuthController
 | 
			
		||||
 | 
			
		||||
  beforeEach(async () => {
 | 
			
		||||
    const module: TestingModule = await Test.createTestingModule({
 | 
			
		||||
      controllers: [AuthController],
 | 
			
		||||
      providers: [AuthService],
 | 
			
		||||
    }).compile()
 | 
			
		||||
 | 
			
		||||
    controller = module.get<AuthController>(AuthController)
 | 
			
		||||
  })
 | 
			
		||||
 | 
			
		||||
  it('should be defined', () => {
 | 
			
		||||
    expect(controller).toBeDefined()
 | 
			
		||||
  })
 | 
			
		||||
})
 | 
			
		||||
							
								
								
									
										17
									
								
								server/src/auth/auth.controller.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										17
									
								
								server/src/auth/auth.controller.ts
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,17 @@
 | 
			
		||||
import { Body, Controller, Post } from '@nestjs/common'
 | 
			
		||||
import { AuthService } from './auth.service'
 | 
			
		||||
import { ApiOkResponse, ApiTags } from '@nestjs/swagger'
 | 
			
		||||
import { AuthEntity } from './entity/auth.entity'
 | 
			
		||||
import { LoginDto } from './dto/login.dto'
 | 
			
		||||
 | 
			
		||||
@Controller('auth')
 | 
			
		||||
@ApiTags('auth')
 | 
			
		||||
export class AuthController {
 | 
			
		||||
  constructor(private readonly authService: AuthService) {}
 | 
			
		||||
 | 
			
		||||
  @Post('login')
 | 
			
		||||
  @ApiOkResponse({ type: AuthEntity })
 | 
			
		||||
  login(@Body() { name, password }: LoginDto) {
 | 
			
		||||
    return this.authService.login(name, password)
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										26
									
								
								server/src/auth/auth.module.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										26
									
								
								server/src/auth/auth.module.ts
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,26 @@
 | 
			
		||||
import { Module } from '@nestjs/common'
 | 
			
		||||
import { AuthService } from './auth.service'
 | 
			
		||||
import { AuthController } from './auth.controller'
 | 
			
		||||
import { PrismaModule } from 'src/prisma/prisma.module'
 | 
			
		||||
import { PassportModule } from '@nestjs/passport'
 | 
			
		||||
import { JwtModule } from '@nestjs/jwt'
 | 
			
		||||
import { env } from 'process'
 | 
			
		||||
import { UsersModule } from 'src/users/users.module'
 | 
			
		||||
import { JwtStrategy } from './jwt.strategy'
 | 
			
		||||
 | 
			
		||||
export const JWT_SECRET = env.JWT_SECRET
 | 
			
		||||
 | 
			
		||||
@Module({
 | 
			
		||||
  imports: [
 | 
			
		||||
    PrismaModule,
 | 
			
		||||
    PassportModule,
 | 
			
		||||
    JwtModule.register({
 | 
			
		||||
      secret: JWT_SECRET,
 | 
			
		||||
      signOptions: { expiresIn: '5m' },
 | 
			
		||||
    }),
 | 
			
		||||
    UsersModule,
 | 
			
		||||
  ],
 | 
			
		||||
  controllers: [AuthController],
 | 
			
		||||
  providers: [AuthService, JwtStrategy],
 | 
			
		||||
})
 | 
			
		||||
export class AuthModule {}
 | 
			
		||||
							
								
								
									
										18
									
								
								server/src/auth/auth.service.spec.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										18
									
								
								server/src/auth/auth.service.spec.ts
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,18 @@
 | 
			
		||||
import { Test, TestingModule } from '@nestjs/testing'
 | 
			
		||||
import { AuthService } from './auth.service'
 | 
			
		||||
 | 
			
		||||
describe('AuthService', () => {
 | 
			
		||||
  let service: AuthService
 | 
			
		||||
 | 
			
		||||
  beforeEach(async () => {
 | 
			
		||||
    const module: TestingModule = await Test.createTestingModule({
 | 
			
		||||
      providers: [AuthService],
 | 
			
		||||
    }).compile()
 | 
			
		||||
 | 
			
		||||
    service = module.get<AuthService>(AuthService)
 | 
			
		||||
  })
 | 
			
		||||
 | 
			
		||||
  it('should be defined', () => {
 | 
			
		||||
    expect(service).toBeDefined()
 | 
			
		||||
  })
 | 
			
		||||
})
 | 
			
		||||
							
								
								
									
										27
									
								
								server/src/auth/auth.service.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										27
									
								
								server/src/auth/auth.service.ts
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,27 @@
 | 
			
		||||
import { Injectable, NotFoundException, UnauthorizedException } from '@nestjs/common'
 | 
			
		||||
import { PrismaService } from './../prisma/prisma.service'
 | 
			
		||||
import { JwtService } from '@nestjs/jwt'
 | 
			
		||||
import { AuthEntity } from './entity/auth.entity'
 | 
			
		||||
import * as bcrypt from 'bcrypt'
 | 
			
		||||
 | 
			
		||||
@Injectable()
 | 
			
		||||
export class AuthService {
 | 
			
		||||
  constructor(private prisma: PrismaService, private jwtService: JwtService) {}
 | 
			
		||||
 | 
			
		||||
  async login(name: string, password: string): Promise<AuthEntity> {
 | 
			
		||||
    const user = await this.prisma.user.findUnique({ where: { name: name } })
 | 
			
		||||
    if (!user) {
 | 
			
		||||
        throw new NotFoundException(`Aucun⋅e utilisateur⋅rice avec pour nom ${name}`)
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    const isPasswordValid = await bcrypt.compare(password, user.password)
 | 
			
		||||
 | 
			
		||||
    if (!isPasswordValid) {
 | 
			
		||||
        throw new UnauthorizedException('Mot de passe incorrect')
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    return {
 | 
			
		||||
      accessToken: this.jwtService.sign({ userId: user.id }),
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										14
									
								
								server/src/auth/dto/login.dto.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										14
									
								
								server/src/auth/dto/login.dto.ts
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,14 @@
 | 
			
		||||
import { ApiProperty } from '@nestjs/swagger'
 | 
			
		||||
import { IsNotEmpty, IsString, MinLength } from 'class-validator'
 | 
			
		||||
 | 
			
		||||
export class LoginDto {
 | 
			
		||||
  @IsString()
 | 
			
		||||
  @IsNotEmpty()
 | 
			
		||||
  @ApiProperty()
 | 
			
		||||
  name: string
 | 
			
		||||
 | 
			
		||||
  @IsString()
 | 
			
		||||
  @IsNotEmpty()
 | 
			
		||||
  @ApiProperty()
 | 
			
		||||
  password: string
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										6
									
								
								server/src/auth/entity/auth.entity.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										6
									
								
								server/src/auth/entity/auth.entity.ts
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,6 @@
 | 
			
		||||
import { ApiProperty } from '@nestjs/swagger'
 | 
			
		||||
 | 
			
		||||
export class AuthEntity {
 | 
			
		||||
  @ApiProperty()
 | 
			
		||||
  accessToken: string
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										5
									
								
								server/src/auth/jwt-auth.guard.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										5
									
								
								server/src/auth/jwt-auth.guard.ts
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,5 @@
 | 
			
		||||
import { Injectable } from '@nestjs/common'
 | 
			
		||||
import { AuthGuard } from '@nestjs/passport'
 | 
			
		||||
 | 
			
		||||
@Injectable()
 | 
			
		||||
export class JwtAuthGuard extends AuthGuard('jwt') {}
 | 
			
		||||
							
								
								
									
										23
									
								
								server/src/auth/jwt.strategy.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										23
									
								
								server/src/auth/jwt.strategy.ts
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,23 @@
 | 
			
		||||
import { Injectable, UnauthorizedException } from '@nestjs/common'
 | 
			
		||||
import { PassportStrategy } from '@nestjs/passport'
 | 
			
		||||
import { ExtractJwt, Strategy } from 'passport-jwt'
 | 
			
		||||
import { JWT_SECRET } from './auth.module'
 | 
			
		||||
import { UsersService } from 'src/users/users.service'
 | 
			
		||||
 | 
			
		||||
@Injectable()
 | 
			
		||||
export class JwtStrategy extends PassportStrategy(Strategy, 'jwt') {
 | 
			
		||||
  constructor(private usersService: UsersService) {
 | 
			
		||||
    super({
 | 
			
		||||
      jwtFromRequest: ExtractJwt.fromAuthHeaderAsBearerToken(),
 | 
			
		||||
      secretOrKey: JWT_SECRET,
 | 
			
		||||
    })
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  async validate(payload: { userId: number }) {
 | 
			
		||||
    const user = await this.usersService.findOne(payload.userId)
 | 
			
		||||
    if (!user) {
 | 
			
		||||
      throw new UnauthorizedException()
 | 
			
		||||
    }
 | 
			
		||||
    return user
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
@@ -1,19 +1,23 @@
 | 
			
		||||
import { NestFactory } from '@nestjs/core'
 | 
			
		||||
import { NestFactory, Reflector } from '@nestjs/core'
 | 
			
		||||
import { AppModule } from './app.module'
 | 
			
		||||
import { DocumentBuilder, SwaggerModule } from '@nestjs/swagger'
 | 
			
		||||
import { ValidationPipe } from '@nestjs/common'
 | 
			
		||||
import { ClassSerializerInterceptor, ValidationPipe } from '@nestjs/common'
 | 
			
		||||
 | 
			
		||||
async function bootstrap() {
 | 
			
		||||
  const app = await NestFactory.create(AppModule)
 | 
			
		||||
 | 
			
		||||
  app.useGlobalPipes(new ValidationPipe())
 | 
			
		||||
  app.useGlobalInterceptors(new ClassSerializerInterceptor(app.get(Reflector)))
 | 
			
		||||
 | 
			
		||||
  const config = new DocumentBuilder()
 | 
			
		||||
    .setTitle('Traintrape-moi')
 | 
			
		||||
    .setDescription('API permettant de stocker les données de Traintrape-moi')
 | 
			
		||||
    .setVersion('1.0')
 | 
			
		||||
    .addBearerAuth()
 | 
			
		||||
    .build()
 | 
			
		||||
  const document = SwaggerModule.createDocument(app, config)
 | 
			
		||||
 | 
			
		||||
  SwaggerModule.setup('', app, document);
 | 
			
		||||
  SwaggerModule.setup('', app, document)
 | 
			
		||||
  await app.listen(process.env.PORT ?? 3000)
 | 
			
		||||
}
 | 
			
		||||
bootstrap()
 | 
			
		||||
 
 | 
			
		||||
@@ -1,13 +1,21 @@
 | 
			
		||||
import { ApiProperty } from "@nestjs/swagger"
 | 
			
		||||
import { User } from "@prisma/client"
 | 
			
		||||
import { Exclude } from 'class-transformer'
 | 
			
		||||
 | 
			
		||||
export class UserEntity implements User {
 | 
			
		||||
  constructor(partial: Partial<UserEntity>) {
 | 
			
		||||
    Object.assign(this, partial)
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  @ApiProperty({description: "Identifiant unique"})
 | 
			
		||||
  id: number
 | 
			
		||||
 | 
			
		||||
  @ApiProperty({description: "Nom de læ joueur⋅se"})
 | 
			
		||||
  name: string
 | 
			
		||||
 | 
			
		||||
  @Exclude()
 | 
			
		||||
  password: string
 | 
			
		||||
 | 
			
		||||
  @ApiProperty({description: "Nombre de jetons dont dispose actuellement læ joueur⋅se"})
 | 
			
		||||
  money: number
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -1,20 +1,20 @@
 | 
			
		||||
import { Test, TestingModule } from '@nestjs/testing';
 | 
			
		||||
import { UsersController } from './users.controller';
 | 
			
		||||
import { UsersService } from './users.service';
 | 
			
		||||
import { Test, TestingModule } from '@nestjs/testing'
 | 
			
		||||
import { UsersController } from './users.controller'
 | 
			
		||||
import { UsersService } from './users.service'
 | 
			
		||||
 | 
			
		||||
describe('UsersController', () => {
 | 
			
		||||
  let controller: UsersController;
 | 
			
		||||
  let controller: UsersController
 | 
			
		||||
 | 
			
		||||
  beforeEach(async () => {
 | 
			
		||||
    const module: TestingModule = await Test.createTestingModule({
 | 
			
		||||
      controllers: [UsersController],
 | 
			
		||||
      providers: [UsersService],
 | 
			
		||||
    }).compile();
 | 
			
		||||
    }).compile()
 | 
			
		||||
 | 
			
		||||
    controller = module.get<UsersController>(UsersController);
 | 
			
		||||
  });
 | 
			
		||||
    controller = module.get<UsersController>(UsersController)
 | 
			
		||||
  })
 | 
			
		||||
 | 
			
		||||
  it('should be defined', () => {
 | 
			
		||||
    expect(controller).toBeDefined();
 | 
			
		||||
  });
 | 
			
		||||
});
 | 
			
		||||
    expect(controller).toBeDefined()
 | 
			
		||||
  })
 | 
			
		||||
})
 | 
			
		||||
 
 | 
			
		||||
@@ -1,25 +1,31 @@
 | 
			
		||||
import { Controller, Get, NotFoundException, Param, ParseIntPipe } from '@nestjs/common'
 | 
			
		||||
import { Controller, Get, NotFoundException, Param, ParseIntPipe, UseGuards } from '@nestjs/common'
 | 
			
		||||
import { UsersService } from './users.service'
 | 
			
		||||
import { ApiNotFoundResponse, ApiOkResponse } from '@nestjs/swagger'
 | 
			
		||||
import { ApiBearerAuth, ApiNotFoundResponse, ApiOkResponse } from '@nestjs/swagger'
 | 
			
		||||
import { UserEntity } from './entities/user.entity'
 | 
			
		||||
import { JwtAuthGuard } from 'src/auth/jwt-auth.guard'
 | 
			
		||||
 | 
			
		||||
@Controller('users')
 | 
			
		||||
export class UsersController {
 | 
			
		||||
  constructor(private readonly usersService: UsersService) {}
 | 
			
		||||
 | 
			
		||||
  @Get()
 | 
			
		||||
  @UseGuards(JwtAuthGuard)
 | 
			
		||||
  @ApiBearerAuth()
 | 
			
		||||
  @ApiOkResponse({ type: UserEntity, isArray: true })
 | 
			
		||||
  async findAll() {
 | 
			
		||||
    return this.usersService.findAll()
 | 
			
		||||
    const users = await this.usersService.findAll()
 | 
			
		||||
    return users.map(user => new UserEntity(user))
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  @Get(':id')
 | 
			
		||||
  @UseGuards(JwtAuthGuard)
 | 
			
		||||
  @ApiBearerAuth()
 | 
			
		||||
  @ApiOkResponse({ type: UserEntity })
 | 
			
		||||
  @ApiNotFoundResponse({ description: "Utilisateur⋅rice non trouvé⋅e" })
 | 
			
		||||
  async findOne(@Param('id', ParseIntPipe) id: number) {
 | 
			
		||||
    const user = await this.usersService.findOne(id)
 | 
			
		||||
    if (!user)
 | 
			
		||||
      throw new NotFoundException(`L'utilisateur⋅rice avec l'identifiant ${id} n'existe pas`)
 | 
			
		||||
    return user
 | 
			
		||||
    return new UserEntity(user)
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -7,5 +7,6 @@ import { PrismaModule } from 'src/prisma/prisma.module'
 | 
			
		||||
  controllers: [UsersController],
 | 
			
		||||
  providers: [UsersService],
 | 
			
		||||
  imports: [PrismaModule],
 | 
			
		||||
  exports: [UsersService],
 | 
			
		||||
})
 | 
			
		||||
export class UsersModule {}
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user