✨ login & signup
This commit is contained in:
		
							parent
							
								
									02d200d9f6
								
							
						
					
					
						commit
						43b750313a
					
				| @ -28,10 +28,12 @@ | ||||
|     "@nestjs/common": "^9.0.0", | ||||
|     "@nestjs/config": "^2.3.1", | ||||
|     "@nestjs/core": "^9.0.0", | ||||
|     "@nestjs/jwt": "^10.0.2", | ||||
|     "@nestjs/mapped-types": "^1.2.2", | ||||
|     "@nestjs/platform-express": "^9.0.0", | ||||
|     "@nestjs/swagger": "^6.2.1", | ||||
|     "@prisma/client": "^4.10.1", | ||||
|     "bcrypt": "^5.1.0", | ||||
|     "class-transformer": "^0.5.1", | ||||
|     "class-validator": "^0.14.0", | ||||
|     "nestjs-prisma": "^0.20.0", | ||||
| @ -41,6 +43,7 @@ | ||||
|   "devDependencies": { | ||||
|     "@nestjs/cli": "^9.0.0", | ||||
|     "@nestjs/schematics": "^9.0.0", | ||||
|     "@types/bcrypt": "^5.0.0", | ||||
|     "@types/express": "^4.17.13", | ||||
|     "@types/node": "18.11.18", | ||||
|     "@typescript-eslint/eslint-plugin": "^5.0.0", | ||||
|  | ||||
							
								
								
									
										278
									
								
								pnpm-lock.yaml
									
									
									
									
									
								
							
							
						
						
									
										278
									
								
								pnpm-lock.yaml
									
									
									
									
									
								
							| @ -5,15 +5,18 @@ specifiers: | ||||
|   '@nestjs/common': ^9.0.0 | ||||
|   '@nestjs/config': ^2.3.1 | ||||
|   '@nestjs/core': ^9.0.0 | ||||
|   '@nestjs/jwt': ^10.0.2 | ||||
|   '@nestjs/mapped-types': ^1.2.2 | ||||
|   '@nestjs/platform-express': ^9.0.0 | ||||
|   '@nestjs/schematics': ^9.0.0 | ||||
|   '@nestjs/swagger': ^6.2.1 | ||||
|   '@prisma/client': ^4.10.1 | ||||
|   '@types/bcrypt': ^5.0.0 | ||||
|   '@types/express': ^4.17.13 | ||||
|   '@types/node': 18.11.18 | ||||
|   '@typescript-eslint/eslint-plugin': ^5.0.0 | ||||
|   '@typescript-eslint/parser': ^5.0.0 | ||||
|   bcrypt: ^5.1.0 | ||||
|   class-transformer: ^0.5.1 | ||||
|   class-validator: ^0.14.0 | ||||
|   eslint: ^8.0.1 | ||||
| @ -37,10 +40,12 @@ dependencies: | ||||
|   '@nestjs/common': 9.3.9_welcnyot5bzd5wa2aovbkxpi4i | ||||
|   '@nestjs/config': 2.3.1_jrq2rdgfp2sx67wmylmrqliwxe | ||||
|   '@nestjs/core': 9.3.9_q6agyr4hwia55oswpsa7zjxcpm | ||||
|   '@nestjs/jwt': 10.0.2_@nestjs+common@9.3.9 | ||||
|   '@nestjs/mapped-types': 1.2.2_sm5si6oczf3vcbfl6qa276t67m | ||||
|   '@nestjs/platform-express': 9.3.9_77foi4w27ghy47yutmnzv7krjy | ||||
|   '@nestjs/swagger': 6.2.1_ldzmua2hsw2tga2e42i6lmmdty | ||||
|   '@prisma/client': 4.10.1_prisma@4.10.1 | ||||
|   bcrypt: 5.1.0 | ||||
|   class-transformer: 0.5.1 | ||||
|   class-validator: 0.14.0 | ||||
|   nestjs-prisma: 0.20.0_uhhmeuf5jto6tk72f36tv2cdfe | ||||
| @ -50,6 +55,7 @@ dependencies: | ||||
| devDependencies: | ||||
|   '@nestjs/cli': 9.2.0 | ||||
|   '@nestjs/schematics': 9.0.4_typescript@4.9.5 | ||||
|   '@types/bcrypt': 5.0.0 | ||||
|   '@types/express': 4.17.17 | ||||
|   '@types/node': 18.11.18 | ||||
|   '@typescript-eslint/eslint-plugin': 5.52.0_6cfvjsbua5ptj65675bqcn6oza | ||||
| @ -325,6 +331,24 @@ packages: | ||||
|     engines: {node: '>=8'} | ||||
|     dev: false | ||||
| 
 | ||||
|   /@mapbox/node-pre-gyp/1.0.10: | ||||
|     resolution: {integrity: sha512-4ySo4CjzStuprMwk35H5pPbkymjv1SF3jGLj6rAHp/xT/RF7TL7bd9CTm1xDY49K2qF7jmR/g7k+SkLETP6opA==} | ||||
|     hasBin: true | ||||
|     dependencies: | ||||
|       detect-libc: 2.0.1 | ||||
|       https-proxy-agent: 5.0.1 | ||||
|       make-dir: 3.1.0 | ||||
|       node-fetch: 2.6.9 | ||||
|       nopt: 5.0.0 | ||||
|       npmlog: 5.0.1 | ||||
|       rimraf: 3.0.2 | ||||
|       semver: 7.3.8 | ||||
|       tar: 6.1.13 | ||||
|     transitivePeerDependencies: | ||||
|       - encoding | ||||
|       - supports-color | ||||
|     dev: false | ||||
| 
 | ||||
|   /@nestjs/cli/9.2.0: | ||||
|     resolution: {integrity: sha512-6B1IjDcJbrOu55oMF67L1x5lDUOZ3Zs9l7bKCBH9D78965m8wq/2rlEWl/gJto5TABLQWy3hVvV/s8VzUlRMxw==} | ||||
|     engines: {node: '>= 12.9.0'} | ||||
| @ -433,6 +457,16 @@ packages: | ||||
|       - encoding | ||||
|     dev: false | ||||
| 
 | ||||
|   /@nestjs/jwt/10.0.2_@nestjs+common@9.3.9: | ||||
|     resolution: {integrity: sha512-MLxjCSbO7C9fN2hst5kpIhnJAgglJmrKppXAXqElB8A9ip3ZuCowMDjjmNWWJyfOzE98NV0E0iEQGE2StMUC+Q==} | ||||
|     peerDependencies: | ||||
|       '@nestjs/common': ^8.0.0 || ^9.0.0 | ||||
|     dependencies: | ||||
|       '@nestjs/common': 9.3.9_welcnyot5bzd5wa2aovbkxpi4i | ||||
|       '@types/jsonwebtoken': 9.0.1 | ||||
|       jsonwebtoken: 9.0.0 | ||||
|     dev: false | ||||
| 
 | ||||
|   /@nestjs/mapped-types/1.2.2_sm5si6oczf3vcbfl6qa276t67m: | ||||
|     resolution: {integrity: sha512-3dHxLXs3M0GPiriAcCFFJQHoDFUuzTD5w6JDhE7TyfT89YKpe6tcCCIqOZWdXmt9AZjjK30RkHRSFF+QEnWFQg==} | ||||
|     peerDependencies: | ||||
| @ -610,6 +644,12 @@ packages: | ||||
|     resolution: {integrity: sha512-yOlFc+7UtL/89t2ZhjPvvB/DeAr3r+Dq58IgzsFkOAvVC6NMJXmCGjbptdXdR9qsX7pKcTL+s87FtYREi2dEEQ==} | ||||
|     dev: true | ||||
| 
 | ||||
|   /@types/bcrypt/5.0.0: | ||||
|     resolution: {integrity: sha512-agtcFKaruL8TmcvqbndlqHPSJgsolhf/qPWchFlgnW1gECTN/nKbFcoFnvKAQRFfKbh+BO6A3SWdJu9t+xF3Lw==} | ||||
|     dependencies: | ||||
|       '@types/node': 18.11.18 | ||||
|     dev: true | ||||
| 
 | ||||
|   /@types/body-parser/1.19.2: | ||||
|     resolution: {integrity: sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g==} | ||||
|     dependencies: | ||||
| @ -662,13 +702,18 @@ packages: | ||||
|     resolution: {integrity: sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==} | ||||
|     dev: true | ||||
| 
 | ||||
|   /@types/jsonwebtoken/9.0.1: | ||||
|     resolution: {integrity: sha512-c5ltxazpWabia/4UzhIoaDcIza4KViOQhdbjRlfcIGVnsE3c3brkz9Z+F/EeJIECOQP7W7US2hNE930cWWkPiw==} | ||||
|     dependencies: | ||||
|       '@types/node': 18.11.18 | ||||
|     dev: false | ||||
| 
 | ||||
|   /@types/mime/3.0.1: | ||||
|     resolution: {integrity: sha512-Y4XFY5VJAuw0FgAqPNd6NNoV44jbq9Bz2L7Rh/J6jLTiHBSBJa9fxqQIvkIld4GsoDOcCbvzOUAbLPsSKKg+uA==} | ||||
|     dev: true | ||||
| 
 | ||||
|   /@types/node/18.11.18: | ||||
|     resolution: {integrity: sha512-DHQpWGjyQKSHj3ebjFI/wRKcqQcdR+MoFBygntYOZytCqNfkd2ZC4ARDJ2DQqhjH5p85Nnd3jhUJIXrszFX/JA==} | ||||
|     dev: true | ||||
| 
 | ||||
|   /@types/parse-json/4.0.0: | ||||
|     resolution: {integrity: sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==} | ||||
| @ -941,6 +986,10 @@ packages: | ||||
|     resolution: {integrity: sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==} | ||||
|     dev: true | ||||
| 
 | ||||
|   /abbrev/1.1.1: | ||||
|     resolution: {integrity: sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==} | ||||
|     dev: false | ||||
| 
 | ||||
|   /accepts/1.3.8: | ||||
|     resolution: {integrity: sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==} | ||||
|     engines: {node: '>= 0.6'} | ||||
| @ -976,6 +1025,15 @@ packages: | ||||
|     hasBin: true | ||||
|     dev: true | ||||
| 
 | ||||
|   /agent-base/6.0.2: | ||||
|     resolution: {integrity: sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==} | ||||
|     engines: {node: '>= 6.0.0'} | ||||
|     dependencies: | ||||
|       debug: 4.3.4 | ||||
|     transitivePeerDependencies: | ||||
|       - supports-color | ||||
|     dev: false | ||||
| 
 | ||||
|   /aggregate-error/3.1.0: | ||||
|     resolution: {integrity: sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==} | ||||
|     engines: {node: '>=8'} | ||||
| @ -1086,6 +1144,18 @@ packages: | ||||
|     resolution: {integrity: sha512-klpgFSWLW1ZEs8svjfb7g4qWY0YS5imI82dTg+QahUvJ8YqAY0P10Uk8tTyh9ZGuYEZEMaeJYCF5BFuX552hsw==} | ||||
|     dev: false | ||||
| 
 | ||||
|   /aproba/2.0.0: | ||||
|     resolution: {integrity: sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==} | ||||
|     dev: false | ||||
| 
 | ||||
|   /are-we-there-yet/2.0.0: | ||||
|     resolution: {integrity: sha512-Ci/qENmwHnsYo9xKIcUJN5LeDKdJ6R1Z1j9V/J5wyq8nh/mYPEpIKJbBZXtZjG04HiK7zV/p6Vs9952MrMeUIw==} | ||||
|     engines: {node: '>=10'} | ||||
|     dependencies: | ||||
|       delegates: 1.0.0 | ||||
|       readable-stream: 3.6.0 | ||||
|     dev: false | ||||
| 
 | ||||
|   /arg/4.1.3: | ||||
|     resolution: {integrity: sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==} | ||||
|     dev: true | ||||
| @ -1109,11 +1179,22 @@ packages: | ||||
| 
 | ||||
|   /balanced-match/1.0.2: | ||||
|     resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} | ||||
|     dev: true | ||||
| 
 | ||||
|   /base64-js/1.5.1: | ||||
|     resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} | ||||
| 
 | ||||
|   /bcrypt/5.1.0: | ||||
|     resolution: {integrity: sha512-RHBS7HI5N5tEnGTmtR/pppX0mmDSBpQ4aCBsj7CEQfYXDcO74A8sIBYcJMuCsis2E81zDxeENYhv66oZwLiA+Q==} | ||||
|     engines: {node: '>= 10.0.0'} | ||||
|     requiresBuild: true | ||||
|     dependencies: | ||||
|       '@mapbox/node-pre-gyp': 1.0.10 | ||||
|       node-addon-api: 5.1.0 | ||||
|     transitivePeerDependencies: | ||||
|       - encoding | ||||
|       - supports-color | ||||
|     dev: false | ||||
| 
 | ||||
|   /binary-extensions/2.2.0: | ||||
|     resolution: {integrity: sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==} | ||||
|     engines: {node: '>=8'} | ||||
| @ -1151,7 +1232,6 @@ packages: | ||||
|     dependencies: | ||||
|       balanced-match: 1.0.2 | ||||
|       concat-map: 0.0.1 | ||||
|     dev: true | ||||
| 
 | ||||
|   /braces/3.0.2: | ||||
|     resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==} | ||||
| @ -1171,6 +1251,10 @@ packages: | ||||
|       update-browserslist-db: 1.0.10_browserslist@4.21.5 | ||||
|     dev: true | ||||
| 
 | ||||
|   /buffer-equal-constant-time/1.0.1: | ||||
|     resolution: {integrity: sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==} | ||||
|     dev: false | ||||
| 
 | ||||
|   /buffer-from/1.1.2: | ||||
|     resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} | ||||
| 
 | ||||
| @ -1251,6 +1335,11 @@ packages: | ||||
|       fsevents: 2.3.2 | ||||
|     dev: true | ||||
| 
 | ||||
|   /chownr/2.0.0: | ||||
|     resolution: {integrity: sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==} | ||||
|     engines: {node: '>=10'} | ||||
|     dev: false | ||||
| 
 | ||||
|   /chrome-trace-event/1.0.3: | ||||
|     resolution: {integrity: sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==} | ||||
|     engines: {node: '>=6.0'} | ||||
| @ -1336,6 +1425,11 @@ packages: | ||||
|   /color-name/1.1.4: | ||||
|     resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} | ||||
| 
 | ||||
|   /color-support/1.1.3: | ||||
|     resolution: {integrity: sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==} | ||||
|     hasBin: true | ||||
|     dev: false | ||||
| 
 | ||||
|   /colorette/2.0.19: | ||||
|     resolution: {integrity: sha512-3tlv/dIP7FWvj3BsbHrGLJ6l/oKh1O3TcgBqMn+yyCagOxc23fyzDS6HypQbgxWbkpDnf52p1LuR4eWDQ/K9WQ==} | ||||
|     dev: true | ||||
| @ -1356,7 +1450,6 @@ packages: | ||||
| 
 | ||||
|   /concat-map/0.0.1: | ||||
|     resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} | ||||
|     dev: true | ||||
| 
 | ||||
|   /concat-stream/1.6.2: | ||||
|     resolution: {integrity: sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==} | ||||
| @ -1372,6 +1465,10 @@ packages: | ||||
|     resolution: {integrity: sha512-9vAdYbHj6x2fLKC4+oPH0kFzY/orMZyG2Aj+kNylHxKGJ/Ed4dpNyAQYwJOdqO4zdM7XpVHmyejQDcQHrnuXbw==} | ||||
|     dev: false | ||||
| 
 | ||||
|   /console-control-strings/1.1.0: | ||||
|     resolution: {integrity: sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==} | ||||
|     dev: false | ||||
| 
 | ||||
|   /content-disposition/0.5.4: | ||||
|     resolution: {integrity: sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==} | ||||
|     engines: {node: '>= 0.6'} | ||||
| @ -1450,7 +1547,6 @@ packages: | ||||
|         optional: true | ||||
|     dependencies: | ||||
|       ms: 2.1.2 | ||||
|     dev: true | ||||
| 
 | ||||
|   /deep-is/0.1.4: | ||||
|     resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} | ||||
| @ -1466,6 +1562,10 @@ packages: | ||||
|     dependencies: | ||||
|       clone: 1.0.4 | ||||
| 
 | ||||
|   /delegates/1.0.0: | ||||
|     resolution: {integrity: sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==} | ||||
|     dev: false | ||||
| 
 | ||||
|   /depd/2.0.0: | ||||
|     resolution: {integrity: sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==} | ||||
|     engines: {node: '>= 0.8'} | ||||
| @ -1476,6 +1576,11 @@ packages: | ||||
|     engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} | ||||
|     dev: false | ||||
| 
 | ||||
|   /detect-libc/2.0.1: | ||||
|     resolution: {integrity: sha512-463v3ZeIrcWtdgIg6vI6XUncguvr2TnGl4SzDXinkt9mSLpBJKXT3mW6xT3VQdDN11+WVs29pgvivTc4Lp8v+w==} | ||||
|     engines: {node: '>=8'} | ||||
|     dev: false | ||||
| 
 | ||||
|   /diff/4.0.2: | ||||
|     resolution: {integrity: sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==} | ||||
|     engines: {node: '>=0.3.1'} | ||||
| @ -1509,6 +1614,12 @@ packages: | ||||
|     resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} | ||||
|     dev: true | ||||
| 
 | ||||
|   /ecdsa-sig-formatter/1.0.11: | ||||
|     resolution: {integrity: sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==} | ||||
|     dependencies: | ||||
|       safe-buffer: 5.2.1 | ||||
|     dev: false | ||||
| 
 | ||||
|   /ee-first/1.1.1: | ||||
|     resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==} | ||||
|     dev: false | ||||
| @ -1519,7 +1630,6 @@ packages: | ||||
| 
 | ||||
|   /emoji-regex/8.0.0: | ||||
|     resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} | ||||
|     dev: true | ||||
| 
 | ||||
|   /emoji-regex/9.2.2: | ||||
|     resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} | ||||
| @ -1955,13 +2065,19 @@ packages: | ||||
|       universalify: 2.0.0 | ||||
|     dev: true | ||||
| 
 | ||||
|   /fs-minipass/2.1.0: | ||||
|     resolution: {integrity: sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==} | ||||
|     engines: {node: '>= 8'} | ||||
|     dependencies: | ||||
|       minipass: 3.3.6 | ||||
|     dev: false | ||||
| 
 | ||||
|   /fs-monkey/1.0.3: | ||||
|     resolution: {integrity: sha512-cybjIfiiE+pTWicSCLFHSrXZ6EilF30oh91FDP9S2B051prEa7QWfrVTQm10/dDpswBDXZugPa1Ogu8Yh+HV0Q==} | ||||
|     dev: true | ||||
| 
 | ||||
|   /fs.realpath/1.0.0: | ||||
|     resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} | ||||
|     dev: true | ||||
| 
 | ||||
|   /fsevents/2.3.2: | ||||
|     resolution: {integrity: sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==} | ||||
| @ -1974,6 +2090,21 @@ packages: | ||||
|   /function-bind/1.1.1: | ||||
|     resolution: {integrity: sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==} | ||||
| 
 | ||||
|   /gauge/3.0.2: | ||||
|     resolution: {integrity: sha512-+5J6MS/5XksCuXq++uFRsnUd7Ovu1XenbeuIuNRJxYWjgQbPuFhT14lAvsWfqfAmnwluf1OwMjz39HjfLPci0Q==} | ||||
|     engines: {node: '>=10'} | ||||
|     dependencies: | ||||
|       aproba: 2.0.0 | ||||
|       color-support: 1.1.3 | ||||
|       console-control-strings: 1.1.0 | ||||
|       has-unicode: 2.0.1 | ||||
|       object-assign: 4.1.1 | ||||
|       signal-exit: 3.0.7 | ||||
|       string-width: 4.2.3 | ||||
|       strip-ansi: 6.0.1 | ||||
|       wide-align: 1.1.5 | ||||
|     dev: false | ||||
| 
 | ||||
|   /get-intrinsic/1.2.0: | ||||
|     resolution: {integrity: sha512-L049y6nFOuom5wGyRc3/gdTLO94dySVKRACj1RmJZBQXlbTMhtNIgkWkUHq+jYmZvKf14EW1EoJnnjbmoHij0Q==} | ||||
|     dependencies: | ||||
| @ -2021,7 +2152,6 @@ packages: | ||||
|       minimatch: 3.1.2 | ||||
|       once: 1.4.0 | ||||
|       path-is-absolute: 1.0.1 | ||||
|     dev: true | ||||
| 
 | ||||
|   /globals/13.20.0: | ||||
|     resolution: {integrity: sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==} | ||||
| @ -2064,6 +2194,10 @@ packages: | ||||
|     engines: {node: '>= 0.4'} | ||||
|     dev: false | ||||
| 
 | ||||
|   /has-unicode/2.0.1: | ||||
|     resolution: {integrity: sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==} | ||||
|     dev: false | ||||
| 
 | ||||
|   /has/1.0.3: | ||||
|     resolution: {integrity: sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==} | ||||
|     engines: {node: '>= 0.4.0'} | ||||
| @ -2081,6 +2215,16 @@ packages: | ||||
|       toidentifier: 1.0.1 | ||||
|     dev: false | ||||
| 
 | ||||
|   /https-proxy-agent/5.0.1: | ||||
|     resolution: {integrity: sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==} | ||||
|     engines: {node: '>= 6'} | ||||
|     dependencies: | ||||
|       agent-base: 6.0.2 | ||||
|       debug: 4.3.4 | ||||
|     transitivePeerDependencies: | ||||
|       - supports-color | ||||
|     dev: false | ||||
| 
 | ||||
|   /human-signals/1.1.1: | ||||
|     resolution: {integrity: sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==} | ||||
|     engines: {node: '>=8.12.0'} | ||||
| @ -2134,7 +2278,6 @@ packages: | ||||
|     dependencies: | ||||
|       once: 1.4.0 | ||||
|       wrappy: 1.0.2 | ||||
|     dev: true | ||||
| 
 | ||||
|   /inherits/2.0.4: | ||||
|     resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} | ||||
| @ -2214,7 +2357,6 @@ packages: | ||||
|   /is-fullwidth-code-point/3.0.0: | ||||
|     resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} | ||||
|     engines: {node: '>=8'} | ||||
|     dev: true | ||||
| 
 | ||||
|   /is-fullwidth-code-point/4.0.0: | ||||
|     resolution: {integrity: sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==} | ||||
| @ -2329,6 +2471,31 @@ packages: | ||||
|       graceful-fs: 4.2.10 | ||||
|     dev: true | ||||
| 
 | ||||
|   /jsonwebtoken/9.0.0: | ||||
|     resolution: {integrity: sha512-tuGfYXxkQGDPnLJ7SibiQgVgeDgfbPq2k2ICcbgqW8WxWLBAxKQM/ZCu/IT8SOSwmaYl4dpTFCW5xZv7YbbWUw==} | ||||
|     engines: {node: '>=12', npm: '>=6'} | ||||
|     dependencies: | ||||
|       jws: 3.2.2 | ||||
|       lodash: 4.17.21 | ||||
|       ms: 2.1.3 | ||||
|       semver: 7.3.8 | ||||
|     dev: false | ||||
| 
 | ||||
|   /jwa/1.4.1: | ||||
|     resolution: {integrity: sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA==} | ||||
|     dependencies: | ||||
|       buffer-equal-constant-time: 1.0.1 | ||||
|       ecdsa-sig-formatter: 1.0.11 | ||||
|       safe-buffer: 5.2.1 | ||||
|     dev: false | ||||
| 
 | ||||
|   /jws/3.2.2: | ||||
|     resolution: {integrity: sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==} | ||||
|     dependencies: | ||||
|       jwa: 1.4.1 | ||||
|       safe-buffer: 5.2.1 | ||||
|     dev: false | ||||
| 
 | ||||
|   /levn/0.4.1: | ||||
|     resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} | ||||
|     engines: {node: '>= 0.8.0'} | ||||
| @ -2433,7 +2600,6 @@ packages: | ||||
|     engines: {node: '>=10'} | ||||
|     dependencies: | ||||
|       yallist: 4.0.0 | ||||
|     dev: true | ||||
| 
 | ||||
|   /macos-release/2.5.0: | ||||
|     resolution: {integrity: sha512-EIgv+QZ9r+814gjJj0Bt5vSLJLzswGmSUbUpbi9AIr/fsN2IWFBl2NucV9PAiek+U1STK468tEkxmVYUtuAN3g==} | ||||
| @ -2460,6 +2626,13 @@ packages: | ||||
|       '@jridgewell/sourcemap-codec': 1.4.14 | ||||
|     dev: true | ||||
| 
 | ||||
|   /make-dir/3.1.0: | ||||
|     resolution: {integrity: sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==} | ||||
|     engines: {node: '>=8'} | ||||
|     dependencies: | ||||
|       semver: 6.3.0 | ||||
|     dev: false | ||||
| 
 | ||||
|   /make-error/1.3.6: | ||||
|     resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==} | ||||
|     dev: true | ||||
| @ -2531,11 +2704,30 @@ packages: | ||||
|     resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} | ||||
|     dependencies: | ||||
|       brace-expansion: 1.1.11 | ||||
|     dev: true | ||||
| 
 | ||||
|   /minimist/1.2.8: | ||||
|     resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} | ||||
| 
 | ||||
|   /minipass/3.3.6: | ||||
|     resolution: {integrity: sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==} | ||||
|     engines: {node: '>=8'} | ||||
|     dependencies: | ||||
|       yallist: 4.0.0 | ||||
|     dev: false | ||||
| 
 | ||||
|   /minipass/4.0.3: | ||||
|     resolution: {integrity: sha512-OW2r4sQ0sI+z5ckEt5c1Tri4xTgZwYDxpE54eqWlQloQRoWtXjqt9udJ5Z4dSv7wK+nfFI7FRXyCpBSft+gpFw==} | ||||
|     engines: {node: '>=8'} | ||||
|     dev: false | ||||
| 
 | ||||
|   /minizlib/2.1.2: | ||||
|     resolution: {integrity: sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==} | ||||
|     engines: {node: '>= 8'} | ||||
|     dependencies: | ||||
|       minipass: 3.3.6 | ||||
|       yallist: 4.0.0 | ||||
|     dev: false | ||||
| 
 | ||||
|   /mkdirp/0.5.6: | ||||
|     resolution: {integrity: sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==} | ||||
|     hasBin: true | ||||
| @ -2543,13 +2735,18 @@ packages: | ||||
|       minimist: 1.2.8 | ||||
|     dev: false | ||||
| 
 | ||||
|   /mkdirp/1.0.4: | ||||
|     resolution: {integrity: sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==} | ||||
|     engines: {node: '>=10'} | ||||
|     hasBin: true | ||||
|     dev: false | ||||
| 
 | ||||
|   /ms/2.0.0: | ||||
|     resolution: {integrity: sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==} | ||||
|     dev: false | ||||
| 
 | ||||
|   /ms/2.1.2: | ||||
|     resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} | ||||
|     dev: true | ||||
| 
 | ||||
|   /ms/2.1.3: | ||||
|     resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} | ||||
| @ -2610,6 +2807,10 @@ packages: | ||||
|     resolution: {integrity: sha512-AGK2yQKIjRuqnc6VkX2Xj5d+QW8xZ87pa1UK6yA6ouUyuxfHuMP6umE5QK7UmTeOAymo+Zx1Fxiuw9rVx8taHQ==} | ||||
|     dev: true | ||||
| 
 | ||||
|   /node-addon-api/5.1.0: | ||||
|     resolution: {integrity: sha512-eh0GgfEkpnoWDq+VY8OyvYhFEzBk6jIYbRKdIlyTiAXIVJ8PyBaKb0rp7oDtoddbdoHWhq8wwr+XZ81F1rpNdA==} | ||||
|     dev: false | ||||
| 
 | ||||
|   /node-emoji/1.11.0: | ||||
|     resolution: {integrity: sha512-wo2DpQkQp7Sjm2A0cq+sN7EHKO6Sl0ctXeBdFZrL9T9+UywORbufTcTZxom8YqpLQt/FqNMUkOpkZrJVYSKD3A==} | ||||
|     dependencies: | ||||
| @ -2632,6 +2833,14 @@ packages: | ||||
|     resolution: {integrity: sha512-5GFldHPXVG/YZmFzJvKK2zDSzPKhEp0+ZR5SVaoSag9fsL5YgHbUHDfnG5494ISANDcK4KwPXAx2xqVEydmd7w==} | ||||
|     dev: true | ||||
| 
 | ||||
|   /nopt/5.0.0: | ||||
|     resolution: {integrity: sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==} | ||||
|     engines: {node: '>=6'} | ||||
|     hasBin: true | ||||
|     dependencies: | ||||
|       abbrev: 1.1.1 | ||||
|     dev: false | ||||
| 
 | ||||
|   /normalize-path/3.0.0: | ||||
|     resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} | ||||
|     engines: {node: '>=0.10.0'} | ||||
| @ -2651,6 +2860,15 @@ packages: | ||||
|       path-key: 4.0.0 | ||||
|     dev: true | ||||
| 
 | ||||
|   /npmlog/5.0.1: | ||||
|     resolution: {integrity: sha512-AqZtDUWOMKs1G/8lwylVjrdYgqA4d9nu8hc+0gzRxlDb1I10+FHBGMXs6aiQHFdCUUlqH99MUMuLfzWDNDtfxw==} | ||||
|     dependencies: | ||||
|       are-we-there-yet: 2.0.0 | ||||
|       console-control-strings: 1.1.0 | ||||
|       gauge: 3.0.2 | ||||
|       set-blocking: 2.0.0 | ||||
|     dev: false | ||||
| 
 | ||||
|   /object-assign/4.1.1: | ||||
|     resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} | ||||
|     engines: {node: '>=0.10.0'} | ||||
| @ -2670,7 +2888,6 @@ packages: | ||||
|     resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} | ||||
|     dependencies: | ||||
|       wrappy: 1.0.2 | ||||
|     dev: true | ||||
| 
 | ||||
|   /onetime/5.1.2: | ||||
|     resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==} | ||||
| @ -2775,7 +2992,6 @@ packages: | ||||
|   /path-is-absolute/1.0.1: | ||||
|     resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} | ||||
|     engines: {node: '>=0.10.0'} | ||||
|     dev: true | ||||
| 
 | ||||
|   /path-key/3.1.1: | ||||
|     resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} | ||||
| @ -2987,7 +3203,6 @@ packages: | ||||
|     hasBin: true | ||||
|     dependencies: | ||||
|       glob: 7.2.3 | ||||
|     dev: true | ||||
| 
 | ||||
|   /rimraf/4.1.2: | ||||
|     resolution: {integrity: sha512-BlIbgFryTbw3Dz6hyoWFhKk+unCcHMSkZGrTFVAx2WmttdBSonsdtRlwiuTbDqTKr+UlXIUqJVS4QT5tUzGENQ==} | ||||
| @ -3036,13 +3251,17 @@ packages: | ||||
|       ajv-keywords: 3.5.2_ajv@6.12.6 | ||||
|     dev: true | ||||
| 
 | ||||
|   /semver/6.3.0: | ||||
|     resolution: {integrity: sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==} | ||||
|     hasBin: true | ||||
|     dev: false | ||||
| 
 | ||||
|   /semver/7.3.8: | ||||
|     resolution: {integrity: sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==} | ||||
|     engines: {node: '>=10'} | ||||
|     hasBin: true | ||||
|     dependencies: | ||||
|       lru-cache: 6.0.0 | ||||
|     dev: true | ||||
| 
 | ||||
|   /send/0.18.0: | ||||
|     resolution: {integrity: sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==} | ||||
| @ -3083,6 +3302,10 @@ packages: | ||||
|       - supports-color | ||||
|     dev: false | ||||
| 
 | ||||
|   /set-blocking/2.0.0: | ||||
|     resolution: {integrity: sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==} | ||||
|     dev: false | ||||
| 
 | ||||
|   /setprototypeof/1.2.0: | ||||
|     resolution: {integrity: sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==} | ||||
|     dev: false | ||||
| @ -3199,7 +3422,6 @@ packages: | ||||
|       emoji-regex: 8.0.0 | ||||
|       is-fullwidth-code-point: 3.0.0 | ||||
|       strip-ansi: 6.0.1 | ||||
|     dev: true | ||||
| 
 | ||||
|   /string-width/5.1.2: | ||||
|     resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==} | ||||
| @ -3293,6 +3515,18 @@ packages: | ||||
|     engines: {node: '>=6'} | ||||
|     dev: true | ||||
| 
 | ||||
|   /tar/6.1.13: | ||||
|     resolution: {integrity: sha512-jdIBIN6LTIe2jqzay/2vtYLlBHa3JF42ot3h1dW8Q0PaAG4v8rm0cvpVePtau5C6OKXGGcgO9q2AMNSWxiLqKw==} | ||||
|     engines: {node: '>=10'} | ||||
|     dependencies: | ||||
|       chownr: 2.0.0 | ||||
|       fs-minipass: 2.1.0 | ||||
|       minipass: 4.0.3 | ||||
|       minizlib: 2.1.2 | ||||
|       mkdirp: 1.0.4 | ||||
|       yallist: 4.0.0 | ||||
|     dev: false | ||||
| 
 | ||||
|   /terser-webpack-plugin/5.3.6_webpack@5.75.0: | ||||
|     resolution: {integrity: sha512-kfLFk+PoLUQIbLmB1+PZDMRSZS99Mp+/MHqDNmMA6tOItzRt+Npe3E+fsMs5mfcM0wCtrrdU387UnV+vnSffXQ==} | ||||
|     engines: {node: '>= 10.13.0'} | ||||
| @ -3630,6 +3864,12 @@ packages: | ||||
|       isexe: 2.0.0 | ||||
|     dev: true | ||||
| 
 | ||||
|   /wide-align/1.1.5: | ||||
|     resolution: {integrity: sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==} | ||||
|     dependencies: | ||||
|       string-width: 4.2.3 | ||||
|     dev: false | ||||
| 
 | ||||
|   /windows-release/4.0.0: | ||||
|     resolution: {integrity: sha512-OxmV4wzDKB1x7AZaZgXMVsdJ1qER1ed83ZrTYd5Bwq2HfJVg3DJS8nqlAG4sMoJ7mu8cuRmLEYyU13BKwctRAg==} | ||||
|     engines: {node: '>=10'} | ||||
| @ -3662,7 +3902,6 @@ packages: | ||||
| 
 | ||||
|   /wrappy/1.0.2: | ||||
|     resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} | ||||
|     dev: true | ||||
| 
 | ||||
|   /xtend/4.0.2: | ||||
|     resolution: {integrity: sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==} | ||||
| @ -3671,7 +3910,6 @@ packages: | ||||
| 
 | ||||
|   /yallist/4.0.0: | ||||
|     resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} | ||||
|     dev: true | ||||
| 
 | ||||
|   /yaml/1.10.2: | ||||
|     resolution: {integrity: sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==} | ||||
|  | ||||
| @ -2,6 +2,7 @@ import { Logger, Module } from '@nestjs/common' | ||||
| import { ConfigModule } from '@nestjs/config' | ||||
| import { PrismaModule, loggingMiddleware } from 'nestjs-prisma' | ||||
| import { UsersModule } from './users/users.module' | ||||
| import { AuthModule } from './auth/auth.module' | ||||
| 
 | ||||
| @Module({ | ||||
|   imports: [ | ||||
| @ -18,6 +19,7 @@ import { UsersModule } from './users/users.module' | ||||
|       }, | ||||
|     }), | ||||
|     UsersModule, | ||||
|     AuthModule, | ||||
|   ], | ||||
|   controllers: [], | ||||
|   providers: [], | ||||
|  | ||||
							
								
								
									
										21
									
								
								src/auth/auth.controller.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										21
									
								
								src/auth/auth.controller.ts
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,21 @@ | ||||
| import { Body, Controller, Post } from '@nestjs/common' | ||||
| import { AuthService } from './auth.service' | ||||
| import { CreateUserDto } from 'src/users/dto/create-user.dto' | ||||
| import { ApiTags } from '@nestjs/swagger' | ||||
| import { LoginInputDto } from './dto/login-input.dto' | ||||
| 
 | ||||
| @ApiTags('auth') | ||||
| @Controller() | ||||
| export class AuthController { | ||||
|   constructor(private readonly authService: AuthService) {} | ||||
| 
 | ||||
|   @Post('api/signup') | ||||
|   async register(@Body() userData: CreateUserDto) { | ||||
|     return this.authService.createUser(userData) | ||||
|   } | ||||
| 
 | ||||
|   @Post('api/login') | ||||
|   async login(@Body() user: LoginInputDto) { | ||||
|     return this.authService.login(user.email, user.password) | ||||
|   } | ||||
| } | ||||
							
								
								
									
										13
									
								
								src/auth/auth.module.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										13
									
								
								src/auth/auth.module.ts
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,13 @@ | ||||
| import { Module } from '@nestjs/common' | ||||
| import { AuthService } from './auth.service' | ||||
| import { AuthController } from './auth.controller' | ||||
| import { UsersModule } from 'src/users/users.module' | ||||
| import { PasswordService } from './password.service' | ||||
| import { JwtService } from '@nestjs/jwt' | ||||
| 
 | ||||
| @Module({ | ||||
|   controllers: [AuthController], | ||||
|   providers: [AuthService, PasswordService, JwtService], | ||||
|   imports: [UsersModule], | ||||
| }) | ||||
| export class AuthModule {} | ||||
							
								
								
									
										89
									
								
								src/auth/auth.service.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										89
									
								
								src/auth/auth.service.ts
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,89 @@ | ||||
| import { | ||||
|   Injectable, | ||||
|   NotFoundException, | ||||
|   BadRequestException, | ||||
| } from '@nestjs/common' | ||||
| import { PrismaService } from 'nestjs-prisma' | ||||
| import { Prisma } from '@prisma/client' | ||||
| import { PasswordService } from './password.service' | ||||
| import { Token, UserToken } from './models/token.model' | ||||
| import { JwtService } from '@nestjs/jwt' | ||||
| import { ConfigService } from '@nestjs/config' | ||||
| 
 | ||||
| @Injectable() | ||||
| export class AuthService { | ||||
|   constructor( | ||||
|     private prisma: PrismaService, | ||||
|     private passwordService: PasswordService, | ||||
|     private jwtService: JwtService, | ||||
|     private configService: ConfigService, | ||||
|   ) {} | ||||
| 
 | ||||
|   async createUser(payload: Prisma.UserCreateInput): Promise<UserToken> { | ||||
|     const hashedPassword = await this.passwordService.hashPassword( | ||||
|       payload.password, | ||||
|     ) | ||||
|     const user = await this.prisma.user.create({ | ||||
|       data: { | ||||
|         ...payload, | ||||
|         password: hashedPassword, | ||||
|       }, | ||||
|     }) | ||||
| 
 | ||||
|     return { | ||||
|       ...this.generateTokens({ userId: user.id }), | ||||
|       ...this.exclude(user, ['password']), | ||||
|     } | ||||
|   } | ||||
| 
 | ||||
|   async login(email: string, password: string): Promise<UserToken> { | ||||
|     const user = await this.prisma.user.findUnique({ where: { email } }) | ||||
| 
 | ||||
|     if (!user) { | ||||
|       throw new NotFoundException(`No user found for email: ${email}`) | ||||
|     } | ||||
| 
 | ||||
|     const passwordValid = await this.passwordService.validatePassword( | ||||
|       password, | ||||
|       user.password, | ||||
|     ) | ||||
| 
 | ||||
|     if (!passwordValid) { | ||||
|       throw new BadRequestException('Invalid password') | ||||
|     } | ||||
| 
 | ||||
|     return { | ||||
|       ...this.generateTokens({ userId: user.id }), | ||||
|       ...this.exclude(user, ['password']), | ||||
|     } | ||||
|   } | ||||
| 
 | ||||
|   private exclude<User, Key extends keyof User>( | ||||
|     user: User, | ||||
|     keys: Key[], | ||||
|   ): Omit<User, Key> { | ||||
|     for (const key of keys) { | ||||
|       delete user[key] | ||||
|     } | ||||
|     return user | ||||
|   } | ||||
| 
 | ||||
|   private generateTokens(payload: { userId: string }): Token { | ||||
|     const accessToken = this.jwtService.sign(payload, { | ||||
|       secret: this.configService.get<string>( | ||||
|         'JWT_ACCESS_SECRET', | ||||
|         'JWT_ACCESS_SECRET', | ||||
|       ), | ||||
|       expiresIn: '30min', | ||||
|     }) | ||||
|     const refreshToken = this.jwtService.sign(payload, { | ||||
|       secret: this.configService.get<string>( | ||||
|         'JWT_REFRESH_SECRET', | ||||
|         'JWT_REFRESH_SECRET', | ||||
|       ), | ||||
|       expiresIn: '7d', | ||||
|     }) | ||||
| 
 | ||||
|     return { accessToken, refreshToken } | ||||
|   } | ||||
| } | ||||
							
								
								
									
										10
									
								
								src/auth/dto/login-input.dto.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										10
									
								
								src/auth/dto/login-input.dto.ts
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,10 @@ | ||||
| import { IsEmail, IsNotEmpty, Length } from 'class-validator' | ||||
| 
 | ||||
| export class LoginInputDto { | ||||
|   @IsEmail() | ||||
|   email: string | ||||
| 
 | ||||
|   @IsNotEmpty() | ||||
|   @Length(8) | ||||
|   password: string | ||||
| } | ||||
							
								
								
									
										15
									
								
								src/auth/models/token.model.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										15
									
								
								src/auth/models/token.model.ts
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,15 @@ | ||||
| import '@nestjs/mapped-types' | ||||
| import { IntersectionType, ApiProperty, OmitType } from '@nestjs/swagger' | ||||
| import { UserEntity } from 'src/users/entities/user.entity' | ||||
| 
 | ||||
| export class Token { | ||||
|   @ApiProperty() | ||||
|   accessToken: string | ||||
|   @ApiProperty() | ||||
|   refreshToken: string | ||||
| } | ||||
| 
 | ||||
| export class UserToken extends IntersectionType( | ||||
|   Token, | ||||
|   OmitType(UserEntity, ['password']), | ||||
| ) {} | ||||
							
								
								
									
										24
									
								
								src/auth/password.service.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										24
									
								
								src/auth/password.service.ts
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,24 @@ | ||||
| import { Injectable } from '@nestjs/common' | ||||
| import { ConfigService } from '@nestjs/config' | ||||
| import { hash, compare } from 'bcrypt' | ||||
| 
 | ||||
| @Injectable() | ||||
| export class PasswordService { | ||||
|   constructor(private configService: ConfigService) {} | ||||
| 
 | ||||
|   get bcryptSaltRounds(): string | number { | ||||
|     const saltOrRounds = this.configService.get<string>('SALT', '10') | ||||
| 
 | ||||
|     return Number.isInteger(Number(saltOrRounds)) | ||||
|       ? Number(saltOrRounds) | ||||
|       : saltOrRounds | ||||
|   } | ||||
| 
 | ||||
|   validatePassword(password: string, hashedPassword: string) { | ||||
|     return compare(password, hashedPassword) | ||||
|   } | ||||
| 
 | ||||
|   hashPassword(password: string) { | ||||
|     return hash(password, this.bcryptSaltRounds) | ||||
|   } | ||||
| } | ||||
| @ -1,29 +1,9 @@ | ||||
| import { Controller, Get, Post, Body, Param } from '@nestjs/common' | ||||
| import { Controller } from '@nestjs/common' | ||||
| import { UsersService } from './users.service' | ||||
| import { CreateUserDto } from './dto/create-user.dto' | ||||
| import { ApiOkResponse, ApiTags } from '@nestjs/swagger' | ||||
| import { UserEntity } from './entities/user.entity' | ||||
| import { ApiTags } from '@nestjs/swagger' | ||||
| 
 | ||||
| @ApiTags('user') | ||||
| @Controller() | ||||
| export class UsersController { | ||||
|   constructor(private readonly userService: UsersService) {} | ||||
| 
 | ||||
|   // TODO: 分页
 | ||||
|   @ApiOkResponse({ type: UserEntity, isArray: true }) | ||||
|   @Get('users') | ||||
|   async findUsers() { | ||||
|     return this.userService.findUsers() | ||||
|   } | ||||
| 
 | ||||
|   @ApiOkResponse({ type: UserEntity }) | ||||
|   @Get('users/:id') | ||||
|   async getUserInfo(@Param('id') id: string) { | ||||
|     return this.userService.getUserInfo(id) | ||||
|   } | ||||
| 
 | ||||
|   @Post('users') | ||||
|   async createUser(@Body() userData: CreateUserDto) { | ||||
|     return this.userService.createUser(userData) | ||||
|   } | ||||
| } | ||||
|  | ||||
| @ -5,5 +5,6 @@ import { UsersController } from './users.controller' | ||||
| @Module({ | ||||
|   controllers: [UsersController], | ||||
|   providers: [UsersService], | ||||
|   exports: [UsersService], | ||||
| }) | ||||
| export class UsersModule {} | ||||
|  | ||||
| @ -1,26 +1,7 @@ | ||||
| import { Injectable } from '@nestjs/common' | ||||
| import { PrismaService } from 'nestjs-prisma' | ||||
| import { Prisma } from '@prisma/client' | ||||
| 
 | ||||
| @Injectable() | ||||
| export class UsersService { | ||||
|   constructor(private prisma: PrismaService) {} | ||||
| 
 | ||||
|   async findUsers() { | ||||
|     return this.prisma.user.findMany() | ||||
|   } | ||||
| 
 | ||||
|   async getUserInfo(id: string) { | ||||
|     return this.prisma.user.findUnique({ | ||||
|       where: { | ||||
|         id, | ||||
|       }, | ||||
|     }) | ||||
|   } | ||||
| 
 | ||||
|   async createUser(data: Prisma.UserCreateInput) { | ||||
|     return this.prisma.user.create({ | ||||
|       data, | ||||
|     }) | ||||
|   } | ||||
| } | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user