✨ login & signup
This commit is contained in:
		
							parent
							
								
									02d200d9f6
								
							
						
					
					
						commit
						43b750313a
					
				| @ -28,10 +28,12 @@ | |||||||
|     "@nestjs/common": "^9.0.0", |     "@nestjs/common": "^9.0.0", | ||||||
|     "@nestjs/config": "^2.3.1", |     "@nestjs/config": "^2.3.1", | ||||||
|     "@nestjs/core": "^9.0.0", |     "@nestjs/core": "^9.0.0", | ||||||
|  |     "@nestjs/jwt": "^10.0.2", | ||||||
|     "@nestjs/mapped-types": "^1.2.2", |     "@nestjs/mapped-types": "^1.2.2", | ||||||
|     "@nestjs/platform-express": "^9.0.0", |     "@nestjs/platform-express": "^9.0.0", | ||||||
|     "@nestjs/swagger": "^6.2.1", |     "@nestjs/swagger": "^6.2.1", | ||||||
|     "@prisma/client": "^4.10.1", |     "@prisma/client": "^4.10.1", | ||||||
|  |     "bcrypt": "^5.1.0", | ||||||
|     "class-transformer": "^0.5.1", |     "class-transformer": "^0.5.1", | ||||||
|     "class-validator": "^0.14.0", |     "class-validator": "^0.14.0", | ||||||
|     "nestjs-prisma": "^0.20.0", |     "nestjs-prisma": "^0.20.0", | ||||||
| @ -41,6 +43,7 @@ | |||||||
|   "devDependencies": { |   "devDependencies": { | ||||||
|     "@nestjs/cli": "^9.0.0", |     "@nestjs/cli": "^9.0.0", | ||||||
|     "@nestjs/schematics": "^9.0.0", |     "@nestjs/schematics": "^9.0.0", | ||||||
|  |     "@types/bcrypt": "^5.0.0", | ||||||
|     "@types/express": "^4.17.13", |     "@types/express": "^4.17.13", | ||||||
|     "@types/node": "18.11.18", |     "@types/node": "18.11.18", | ||||||
|     "@typescript-eslint/eslint-plugin": "^5.0.0", |     "@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/common': ^9.0.0 | ||||||
|   '@nestjs/config': ^2.3.1 |   '@nestjs/config': ^2.3.1 | ||||||
|   '@nestjs/core': ^9.0.0 |   '@nestjs/core': ^9.0.0 | ||||||
|  |   '@nestjs/jwt': ^10.0.2 | ||||||
|   '@nestjs/mapped-types': ^1.2.2 |   '@nestjs/mapped-types': ^1.2.2 | ||||||
|   '@nestjs/platform-express': ^9.0.0 |   '@nestjs/platform-express': ^9.0.0 | ||||||
|   '@nestjs/schematics': ^9.0.0 |   '@nestjs/schematics': ^9.0.0 | ||||||
|   '@nestjs/swagger': ^6.2.1 |   '@nestjs/swagger': ^6.2.1 | ||||||
|   '@prisma/client': ^4.10.1 |   '@prisma/client': ^4.10.1 | ||||||
|  |   '@types/bcrypt': ^5.0.0 | ||||||
|   '@types/express': ^4.17.13 |   '@types/express': ^4.17.13 | ||||||
|   '@types/node': 18.11.18 |   '@types/node': 18.11.18 | ||||||
|   '@typescript-eslint/eslint-plugin': ^5.0.0 |   '@typescript-eslint/eslint-plugin': ^5.0.0 | ||||||
|   '@typescript-eslint/parser': ^5.0.0 |   '@typescript-eslint/parser': ^5.0.0 | ||||||
|  |   bcrypt: ^5.1.0 | ||||||
|   class-transformer: ^0.5.1 |   class-transformer: ^0.5.1 | ||||||
|   class-validator: ^0.14.0 |   class-validator: ^0.14.0 | ||||||
|   eslint: ^8.0.1 |   eslint: ^8.0.1 | ||||||
| @ -37,10 +40,12 @@ dependencies: | |||||||
|   '@nestjs/common': 9.3.9_welcnyot5bzd5wa2aovbkxpi4i |   '@nestjs/common': 9.3.9_welcnyot5bzd5wa2aovbkxpi4i | ||||||
|   '@nestjs/config': 2.3.1_jrq2rdgfp2sx67wmylmrqliwxe |   '@nestjs/config': 2.3.1_jrq2rdgfp2sx67wmylmrqliwxe | ||||||
|   '@nestjs/core': 9.3.9_q6agyr4hwia55oswpsa7zjxcpm |   '@nestjs/core': 9.3.9_q6agyr4hwia55oswpsa7zjxcpm | ||||||
|  |   '@nestjs/jwt': 10.0.2_@nestjs+common@9.3.9 | ||||||
|   '@nestjs/mapped-types': 1.2.2_sm5si6oczf3vcbfl6qa276t67m |   '@nestjs/mapped-types': 1.2.2_sm5si6oczf3vcbfl6qa276t67m | ||||||
|   '@nestjs/platform-express': 9.3.9_77foi4w27ghy47yutmnzv7krjy |   '@nestjs/platform-express': 9.3.9_77foi4w27ghy47yutmnzv7krjy | ||||||
|   '@nestjs/swagger': 6.2.1_ldzmua2hsw2tga2e42i6lmmdty |   '@nestjs/swagger': 6.2.1_ldzmua2hsw2tga2e42i6lmmdty | ||||||
|   '@prisma/client': 4.10.1_prisma@4.10.1 |   '@prisma/client': 4.10.1_prisma@4.10.1 | ||||||
|  |   bcrypt: 5.1.0 | ||||||
|   class-transformer: 0.5.1 |   class-transformer: 0.5.1 | ||||||
|   class-validator: 0.14.0 |   class-validator: 0.14.0 | ||||||
|   nestjs-prisma: 0.20.0_uhhmeuf5jto6tk72f36tv2cdfe |   nestjs-prisma: 0.20.0_uhhmeuf5jto6tk72f36tv2cdfe | ||||||
| @ -50,6 +55,7 @@ dependencies: | |||||||
| devDependencies: | devDependencies: | ||||||
|   '@nestjs/cli': 9.2.0 |   '@nestjs/cli': 9.2.0 | ||||||
|   '@nestjs/schematics': 9.0.4_typescript@4.9.5 |   '@nestjs/schematics': 9.0.4_typescript@4.9.5 | ||||||
|  |   '@types/bcrypt': 5.0.0 | ||||||
|   '@types/express': 4.17.17 |   '@types/express': 4.17.17 | ||||||
|   '@types/node': 18.11.18 |   '@types/node': 18.11.18 | ||||||
|   '@typescript-eslint/eslint-plugin': 5.52.0_6cfvjsbua5ptj65675bqcn6oza |   '@typescript-eslint/eslint-plugin': 5.52.0_6cfvjsbua5ptj65675bqcn6oza | ||||||
| @ -325,6 +331,24 @@ packages: | |||||||
|     engines: {node: '>=8'} |     engines: {node: '>=8'} | ||||||
|     dev: false |     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: |   /@nestjs/cli/9.2.0: | ||||||
|     resolution: {integrity: sha512-6B1IjDcJbrOu55oMF67L1x5lDUOZ3Zs9l7bKCBH9D78965m8wq/2rlEWl/gJto5TABLQWy3hVvV/s8VzUlRMxw==} |     resolution: {integrity: sha512-6B1IjDcJbrOu55oMF67L1x5lDUOZ3Zs9l7bKCBH9D78965m8wq/2rlEWl/gJto5TABLQWy3hVvV/s8VzUlRMxw==} | ||||||
|     engines: {node: '>= 12.9.0'} |     engines: {node: '>= 12.9.0'} | ||||||
| @ -433,6 +457,16 @@ packages: | |||||||
|       - encoding |       - encoding | ||||||
|     dev: false |     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: |   /@nestjs/mapped-types/1.2.2_sm5si6oczf3vcbfl6qa276t67m: | ||||||
|     resolution: {integrity: sha512-3dHxLXs3M0GPiriAcCFFJQHoDFUuzTD5w6JDhE7TyfT89YKpe6tcCCIqOZWdXmt9AZjjK30RkHRSFF+QEnWFQg==} |     resolution: {integrity: sha512-3dHxLXs3M0GPiriAcCFFJQHoDFUuzTD5w6JDhE7TyfT89YKpe6tcCCIqOZWdXmt9AZjjK30RkHRSFF+QEnWFQg==} | ||||||
|     peerDependencies: |     peerDependencies: | ||||||
| @ -610,6 +644,12 @@ packages: | |||||||
|     resolution: {integrity: sha512-yOlFc+7UtL/89t2ZhjPvvB/DeAr3r+Dq58IgzsFkOAvVC6NMJXmCGjbptdXdR9qsX7pKcTL+s87FtYREi2dEEQ==} |     resolution: {integrity: sha512-yOlFc+7UtL/89t2ZhjPvvB/DeAr3r+Dq58IgzsFkOAvVC6NMJXmCGjbptdXdR9qsX7pKcTL+s87FtYREi2dEEQ==} | ||||||
|     dev: true |     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: |   /@types/body-parser/1.19.2: | ||||||
|     resolution: {integrity: sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g==} |     resolution: {integrity: sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g==} | ||||||
|     dependencies: |     dependencies: | ||||||
| @ -662,13 +702,18 @@ packages: | |||||||
|     resolution: {integrity: sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==} |     resolution: {integrity: sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==} | ||||||
|     dev: true |     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: |   /@types/mime/3.0.1: | ||||||
|     resolution: {integrity: sha512-Y4XFY5VJAuw0FgAqPNd6NNoV44jbq9Bz2L7Rh/J6jLTiHBSBJa9fxqQIvkIld4GsoDOcCbvzOUAbLPsSKKg+uA==} |     resolution: {integrity: sha512-Y4XFY5VJAuw0FgAqPNd6NNoV44jbq9Bz2L7Rh/J6jLTiHBSBJa9fxqQIvkIld4GsoDOcCbvzOUAbLPsSKKg+uA==} | ||||||
|     dev: true |     dev: true | ||||||
| 
 | 
 | ||||||
|   /@types/node/18.11.18: |   /@types/node/18.11.18: | ||||||
|     resolution: {integrity: sha512-DHQpWGjyQKSHj3ebjFI/wRKcqQcdR+MoFBygntYOZytCqNfkd2ZC4ARDJ2DQqhjH5p85Nnd3jhUJIXrszFX/JA==} |     resolution: {integrity: sha512-DHQpWGjyQKSHj3ebjFI/wRKcqQcdR+MoFBygntYOZytCqNfkd2ZC4ARDJ2DQqhjH5p85Nnd3jhUJIXrszFX/JA==} | ||||||
|     dev: true |  | ||||||
| 
 | 
 | ||||||
|   /@types/parse-json/4.0.0: |   /@types/parse-json/4.0.0: | ||||||
|     resolution: {integrity: sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==} |     resolution: {integrity: sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==} | ||||||
| @ -941,6 +986,10 @@ packages: | |||||||
|     resolution: {integrity: sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==} |     resolution: {integrity: sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==} | ||||||
|     dev: true |     dev: true | ||||||
| 
 | 
 | ||||||
|  |   /abbrev/1.1.1: | ||||||
|  |     resolution: {integrity: sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==} | ||||||
|  |     dev: false | ||||||
|  | 
 | ||||||
|   /accepts/1.3.8: |   /accepts/1.3.8: | ||||||
|     resolution: {integrity: sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==} |     resolution: {integrity: sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==} | ||||||
|     engines: {node: '>= 0.6'} |     engines: {node: '>= 0.6'} | ||||||
| @ -976,6 +1025,15 @@ packages: | |||||||
|     hasBin: true |     hasBin: true | ||||||
|     dev: 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: |   /aggregate-error/3.1.0: | ||||||
|     resolution: {integrity: sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==} |     resolution: {integrity: sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==} | ||||||
|     engines: {node: '>=8'} |     engines: {node: '>=8'} | ||||||
| @ -1086,6 +1144,18 @@ packages: | |||||||
|     resolution: {integrity: sha512-klpgFSWLW1ZEs8svjfb7g4qWY0YS5imI82dTg+QahUvJ8YqAY0P10Uk8tTyh9ZGuYEZEMaeJYCF5BFuX552hsw==} |     resolution: {integrity: sha512-klpgFSWLW1ZEs8svjfb7g4qWY0YS5imI82dTg+QahUvJ8YqAY0P10Uk8tTyh9ZGuYEZEMaeJYCF5BFuX552hsw==} | ||||||
|     dev: false |     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: |   /arg/4.1.3: | ||||||
|     resolution: {integrity: sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==} |     resolution: {integrity: sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==} | ||||||
|     dev: true |     dev: true | ||||||
| @ -1109,11 +1179,22 @@ packages: | |||||||
| 
 | 
 | ||||||
|   /balanced-match/1.0.2: |   /balanced-match/1.0.2: | ||||||
|     resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} |     resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} | ||||||
|     dev: true |  | ||||||
| 
 | 
 | ||||||
|   /base64-js/1.5.1: |   /base64-js/1.5.1: | ||||||
|     resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} |     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: |   /binary-extensions/2.2.0: | ||||||
|     resolution: {integrity: sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==} |     resolution: {integrity: sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==} | ||||||
|     engines: {node: '>=8'} |     engines: {node: '>=8'} | ||||||
| @ -1151,7 +1232,6 @@ packages: | |||||||
|     dependencies: |     dependencies: | ||||||
|       balanced-match: 1.0.2 |       balanced-match: 1.0.2 | ||||||
|       concat-map: 0.0.1 |       concat-map: 0.0.1 | ||||||
|     dev: true |  | ||||||
| 
 | 
 | ||||||
|   /braces/3.0.2: |   /braces/3.0.2: | ||||||
|     resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==} |     resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==} | ||||||
| @ -1171,6 +1251,10 @@ packages: | |||||||
|       update-browserslist-db: 1.0.10_browserslist@4.21.5 |       update-browserslist-db: 1.0.10_browserslist@4.21.5 | ||||||
|     dev: true |     dev: true | ||||||
| 
 | 
 | ||||||
|  |   /buffer-equal-constant-time/1.0.1: | ||||||
|  |     resolution: {integrity: sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==} | ||||||
|  |     dev: false | ||||||
|  | 
 | ||||||
|   /buffer-from/1.1.2: |   /buffer-from/1.1.2: | ||||||
|     resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} |     resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} | ||||||
| 
 | 
 | ||||||
| @ -1251,6 +1335,11 @@ packages: | |||||||
|       fsevents: 2.3.2 |       fsevents: 2.3.2 | ||||||
|     dev: true |     dev: true | ||||||
| 
 | 
 | ||||||
|  |   /chownr/2.0.0: | ||||||
|  |     resolution: {integrity: sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==} | ||||||
|  |     engines: {node: '>=10'} | ||||||
|  |     dev: false | ||||||
|  | 
 | ||||||
|   /chrome-trace-event/1.0.3: |   /chrome-trace-event/1.0.3: | ||||||
|     resolution: {integrity: sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==} |     resolution: {integrity: sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==} | ||||||
|     engines: {node: '>=6.0'} |     engines: {node: '>=6.0'} | ||||||
| @ -1336,6 +1425,11 @@ packages: | |||||||
|   /color-name/1.1.4: |   /color-name/1.1.4: | ||||||
|     resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} |     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: |   /colorette/2.0.19: | ||||||
|     resolution: {integrity: sha512-3tlv/dIP7FWvj3BsbHrGLJ6l/oKh1O3TcgBqMn+yyCagOxc23fyzDS6HypQbgxWbkpDnf52p1LuR4eWDQ/K9WQ==} |     resolution: {integrity: sha512-3tlv/dIP7FWvj3BsbHrGLJ6l/oKh1O3TcgBqMn+yyCagOxc23fyzDS6HypQbgxWbkpDnf52p1LuR4eWDQ/K9WQ==} | ||||||
|     dev: true |     dev: true | ||||||
| @ -1356,7 +1450,6 @@ packages: | |||||||
| 
 | 
 | ||||||
|   /concat-map/0.0.1: |   /concat-map/0.0.1: | ||||||
|     resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} |     resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} | ||||||
|     dev: true |  | ||||||
| 
 | 
 | ||||||
|   /concat-stream/1.6.2: |   /concat-stream/1.6.2: | ||||||
|     resolution: {integrity: sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==} |     resolution: {integrity: sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==} | ||||||
| @ -1372,6 +1465,10 @@ packages: | |||||||
|     resolution: {integrity: sha512-9vAdYbHj6x2fLKC4+oPH0kFzY/orMZyG2Aj+kNylHxKGJ/Ed4dpNyAQYwJOdqO4zdM7XpVHmyejQDcQHrnuXbw==} |     resolution: {integrity: sha512-9vAdYbHj6x2fLKC4+oPH0kFzY/orMZyG2Aj+kNylHxKGJ/Ed4dpNyAQYwJOdqO4zdM7XpVHmyejQDcQHrnuXbw==} | ||||||
|     dev: false |     dev: false | ||||||
| 
 | 
 | ||||||
|  |   /console-control-strings/1.1.0: | ||||||
|  |     resolution: {integrity: sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==} | ||||||
|  |     dev: false | ||||||
|  | 
 | ||||||
|   /content-disposition/0.5.4: |   /content-disposition/0.5.4: | ||||||
|     resolution: {integrity: sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==} |     resolution: {integrity: sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==} | ||||||
|     engines: {node: '>= 0.6'} |     engines: {node: '>= 0.6'} | ||||||
| @ -1450,7 +1547,6 @@ packages: | |||||||
|         optional: true |         optional: true | ||||||
|     dependencies: |     dependencies: | ||||||
|       ms: 2.1.2 |       ms: 2.1.2 | ||||||
|     dev: true |  | ||||||
| 
 | 
 | ||||||
|   /deep-is/0.1.4: |   /deep-is/0.1.4: | ||||||
|     resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} |     resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} | ||||||
| @ -1466,6 +1562,10 @@ packages: | |||||||
|     dependencies: |     dependencies: | ||||||
|       clone: 1.0.4 |       clone: 1.0.4 | ||||||
| 
 | 
 | ||||||
|  |   /delegates/1.0.0: | ||||||
|  |     resolution: {integrity: sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==} | ||||||
|  |     dev: false | ||||||
|  | 
 | ||||||
|   /depd/2.0.0: |   /depd/2.0.0: | ||||||
|     resolution: {integrity: sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==} |     resolution: {integrity: sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==} | ||||||
|     engines: {node: '>= 0.8'} |     engines: {node: '>= 0.8'} | ||||||
| @ -1476,6 +1576,11 @@ packages: | |||||||
|     engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} |     engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} | ||||||
|     dev: false |     dev: false | ||||||
| 
 | 
 | ||||||
|  |   /detect-libc/2.0.1: | ||||||
|  |     resolution: {integrity: sha512-463v3ZeIrcWtdgIg6vI6XUncguvr2TnGl4SzDXinkt9mSLpBJKXT3mW6xT3VQdDN11+WVs29pgvivTc4Lp8v+w==} | ||||||
|  |     engines: {node: '>=8'} | ||||||
|  |     dev: false | ||||||
|  | 
 | ||||||
|   /diff/4.0.2: |   /diff/4.0.2: | ||||||
|     resolution: {integrity: sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==} |     resolution: {integrity: sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==} | ||||||
|     engines: {node: '>=0.3.1'} |     engines: {node: '>=0.3.1'} | ||||||
| @ -1509,6 +1614,12 @@ packages: | |||||||
|     resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} |     resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} | ||||||
|     dev: true |     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: |   /ee-first/1.1.1: | ||||||
|     resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==} |     resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==} | ||||||
|     dev: false |     dev: false | ||||||
| @ -1519,7 +1630,6 @@ packages: | |||||||
| 
 | 
 | ||||||
|   /emoji-regex/8.0.0: |   /emoji-regex/8.0.0: | ||||||
|     resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} |     resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} | ||||||
|     dev: true |  | ||||||
| 
 | 
 | ||||||
|   /emoji-regex/9.2.2: |   /emoji-regex/9.2.2: | ||||||
|     resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} |     resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} | ||||||
| @ -1955,13 +2065,19 @@ packages: | |||||||
|       universalify: 2.0.0 |       universalify: 2.0.0 | ||||||
|     dev: true |     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: |   /fs-monkey/1.0.3: | ||||||
|     resolution: {integrity: sha512-cybjIfiiE+pTWicSCLFHSrXZ6EilF30oh91FDP9S2B051prEa7QWfrVTQm10/dDpswBDXZugPa1Ogu8Yh+HV0Q==} |     resolution: {integrity: sha512-cybjIfiiE+pTWicSCLFHSrXZ6EilF30oh91FDP9S2B051prEa7QWfrVTQm10/dDpswBDXZugPa1Ogu8Yh+HV0Q==} | ||||||
|     dev: true |     dev: true | ||||||
| 
 | 
 | ||||||
|   /fs.realpath/1.0.0: |   /fs.realpath/1.0.0: | ||||||
|     resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} |     resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} | ||||||
|     dev: true |  | ||||||
| 
 | 
 | ||||||
|   /fsevents/2.3.2: |   /fsevents/2.3.2: | ||||||
|     resolution: {integrity: sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==} |     resolution: {integrity: sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==} | ||||||
| @ -1974,6 +2090,21 @@ packages: | |||||||
|   /function-bind/1.1.1: |   /function-bind/1.1.1: | ||||||
|     resolution: {integrity: sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==} |     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: |   /get-intrinsic/1.2.0: | ||||||
|     resolution: {integrity: sha512-L049y6nFOuom5wGyRc3/gdTLO94dySVKRACj1RmJZBQXlbTMhtNIgkWkUHq+jYmZvKf14EW1EoJnnjbmoHij0Q==} |     resolution: {integrity: sha512-L049y6nFOuom5wGyRc3/gdTLO94dySVKRACj1RmJZBQXlbTMhtNIgkWkUHq+jYmZvKf14EW1EoJnnjbmoHij0Q==} | ||||||
|     dependencies: |     dependencies: | ||||||
| @ -2021,7 +2152,6 @@ packages: | |||||||
|       minimatch: 3.1.2 |       minimatch: 3.1.2 | ||||||
|       once: 1.4.0 |       once: 1.4.0 | ||||||
|       path-is-absolute: 1.0.1 |       path-is-absolute: 1.0.1 | ||||||
|     dev: true |  | ||||||
| 
 | 
 | ||||||
|   /globals/13.20.0: |   /globals/13.20.0: | ||||||
|     resolution: {integrity: sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==} |     resolution: {integrity: sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==} | ||||||
| @ -2064,6 +2194,10 @@ packages: | |||||||
|     engines: {node: '>= 0.4'} |     engines: {node: '>= 0.4'} | ||||||
|     dev: false |     dev: false | ||||||
| 
 | 
 | ||||||
|  |   /has-unicode/2.0.1: | ||||||
|  |     resolution: {integrity: sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==} | ||||||
|  |     dev: false | ||||||
|  | 
 | ||||||
|   /has/1.0.3: |   /has/1.0.3: | ||||||
|     resolution: {integrity: sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==} |     resolution: {integrity: sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==} | ||||||
|     engines: {node: '>= 0.4.0'} |     engines: {node: '>= 0.4.0'} | ||||||
| @ -2081,6 +2215,16 @@ packages: | |||||||
|       toidentifier: 1.0.1 |       toidentifier: 1.0.1 | ||||||
|     dev: false |     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: |   /human-signals/1.1.1: | ||||||
|     resolution: {integrity: sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==} |     resolution: {integrity: sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==} | ||||||
|     engines: {node: '>=8.12.0'} |     engines: {node: '>=8.12.0'} | ||||||
| @ -2134,7 +2278,6 @@ packages: | |||||||
|     dependencies: |     dependencies: | ||||||
|       once: 1.4.0 |       once: 1.4.0 | ||||||
|       wrappy: 1.0.2 |       wrappy: 1.0.2 | ||||||
|     dev: true |  | ||||||
| 
 | 
 | ||||||
|   /inherits/2.0.4: |   /inherits/2.0.4: | ||||||
|     resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} |     resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} | ||||||
| @ -2214,7 +2357,6 @@ packages: | |||||||
|   /is-fullwidth-code-point/3.0.0: |   /is-fullwidth-code-point/3.0.0: | ||||||
|     resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} |     resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} | ||||||
|     engines: {node: '>=8'} |     engines: {node: '>=8'} | ||||||
|     dev: true |  | ||||||
| 
 | 
 | ||||||
|   /is-fullwidth-code-point/4.0.0: |   /is-fullwidth-code-point/4.0.0: | ||||||
|     resolution: {integrity: sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==} |     resolution: {integrity: sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==} | ||||||
| @ -2329,6 +2471,31 @@ packages: | |||||||
|       graceful-fs: 4.2.10 |       graceful-fs: 4.2.10 | ||||||
|     dev: true |     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: |   /levn/0.4.1: | ||||||
|     resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} |     resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} | ||||||
|     engines: {node: '>= 0.8.0'} |     engines: {node: '>= 0.8.0'} | ||||||
| @ -2433,7 +2600,6 @@ packages: | |||||||
|     engines: {node: '>=10'} |     engines: {node: '>=10'} | ||||||
|     dependencies: |     dependencies: | ||||||
|       yallist: 4.0.0 |       yallist: 4.0.0 | ||||||
|     dev: true |  | ||||||
| 
 | 
 | ||||||
|   /macos-release/2.5.0: |   /macos-release/2.5.0: | ||||||
|     resolution: {integrity: sha512-EIgv+QZ9r+814gjJj0Bt5vSLJLzswGmSUbUpbi9AIr/fsN2IWFBl2NucV9PAiek+U1STK468tEkxmVYUtuAN3g==} |     resolution: {integrity: sha512-EIgv+QZ9r+814gjJj0Bt5vSLJLzswGmSUbUpbi9AIr/fsN2IWFBl2NucV9PAiek+U1STK468tEkxmVYUtuAN3g==} | ||||||
| @ -2460,6 +2626,13 @@ packages: | |||||||
|       '@jridgewell/sourcemap-codec': 1.4.14 |       '@jridgewell/sourcemap-codec': 1.4.14 | ||||||
|     dev: true |     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: |   /make-error/1.3.6: | ||||||
|     resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==} |     resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==} | ||||||
|     dev: true |     dev: true | ||||||
| @ -2531,11 +2704,30 @@ packages: | |||||||
|     resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} |     resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} | ||||||
|     dependencies: |     dependencies: | ||||||
|       brace-expansion: 1.1.11 |       brace-expansion: 1.1.11 | ||||||
|     dev: true |  | ||||||
| 
 | 
 | ||||||
|   /minimist/1.2.8: |   /minimist/1.2.8: | ||||||
|     resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} |     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: |   /mkdirp/0.5.6: | ||||||
|     resolution: {integrity: sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==} |     resolution: {integrity: sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==} | ||||||
|     hasBin: true |     hasBin: true | ||||||
| @ -2543,13 +2735,18 @@ packages: | |||||||
|       minimist: 1.2.8 |       minimist: 1.2.8 | ||||||
|     dev: false |     dev: false | ||||||
| 
 | 
 | ||||||
|  |   /mkdirp/1.0.4: | ||||||
|  |     resolution: {integrity: sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==} | ||||||
|  |     engines: {node: '>=10'} | ||||||
|  |     hasBin: true | ||||||
|  |     dev: false | ||||||
|  | 
 | ||||||
|   /ms/2.0.0: |   /ms/2.0.0: | ||||||
|     resolution: {integrity: sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==} |     resolution: {integrity: sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==} | ||||||
|     dev: false |     dev: false | ||||||
| 
 | 
 | ||||||
|   /ms/2.1.2: |   /ms/2.1.2: | ||||||
|     resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} |     resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} | ||||||
|     dev: true |  | ||||||
| 
 | 
 | ||||||
|   /ms/2.1.3: |   /ms/2.1.3: | ||||||
|     resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} |     resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} | ||||||
| @ -2610,6 +2807,10 @@ packages: | |||||||
|     resolution: {integrity: sha512-AGK2yQKIjRuqnc6VkX2Xj5d+QW8xZ87pa1UK6yA6ouUyuxfHuMP6umE5QK7UmTeOAymo+Zx1Fxiuw9rVx8taHQ==} |     resolution: {integrity: sha512-AGK2yQKIjRuqnc6VkX2Xj5d+QW8xZ87pa1UK6yA6ouUyuxfHuMP6umE5QK7UmTeOAymo+Zx1Fxiuw9rVx8taHQ==} | ||||||
|     dev: true |     dev: true | ||||||
| 
 | 
 | ||||||
|  |   /node-addon-api/5.1.0: | ||||||
|  |     resolution: {integrity: sha512-eh0GgfEkpnoWDq+VY8OyvYhFEzBk6jIYbRKdIlyTiAXIVJ8PyBaKb0rp7oDtoddbdoHWhq8wwr+XZ81F1rpNdA==} | ||||||
|  |     dev: false | ||||||
|  | 
 | ||||||
|   /node-emoji/1.11.0: |   /node-emoji/1.11.0: | ||||||
|     resolution: {integrity: sha512-wo2DpQkQp7Sjm2A0cq+sN7EHKO6Sl0ctXeBdFZrL9T9+UywORbufTcTZxom8YqpLQt/FqNMUkOpkZrJVYSKD3A==} |     resolution: {integrity: sha512-wo2DpQkQp7Sjm2A0cq+sN7EHKO6Sl0ctXeBdFZrL9T9+UywORbufTcTZxom8YqpLQt/FqNMUkOpkZrJVYSKD3A==} | ||||||
|     dependencies: |     dependencies: | ||||||
| @ -2632,6 +2833,14 @@ packages: | |||||||
|     resolution: {integrity: sha512-5GFldHPXVG/YZmFzJvKK2zDSzPKhEp0+ZR5SVaoSag9fsL5YgHbUHDfnG5494ISANDcK4KwPXAx2xqVEydmd7w==} |     resolution: {integrity: sha512-5GFldHPXVG/YZmFzJvKK2zDSzPKhEp0+ZR5SVaoSag9fsL5YgHbUHDfnG5494ISANDcK4KwPXAx2xqVEydmd7w==} | ||||||
|     dev: true |     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: |   /normalize-path/3.0.0: | ||||||
|     resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} |     resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} | ||||||
|     engines: {node: '>=0.10.0'} |     engines: {node: '>=0.10.0'} | ||||||
| @ -2651,6 +2860,15 @@ packages: | |||||||
|       path-key: 4.0.0 |       path-key: 4.0.0 | ||||||
|     dev: true |     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: |   /object-assign/4.1.1: | ||||||
|     resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} |     resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} | ||||||
|     engines: {node: '>=0.10.0'} |     engines: {node: '>=0.10.0'} | ||||||
| @ -2670,7 +2888,6 @@ packages: | |||||||
|     resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} |     resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} | ||||||
|     dependencies: |     dependencies: | ||||||
|       wrappy: 1.0.2 |       wrappy: 1.0.2 | ||||||
|     dev: true |  | ||||||
| 
 | 
 | ||||||
|   /onetime/5.1.2: |   /onetime/5.1.2: | ||||||
|     resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==} |     resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==} | ||||||
| @ -2775,7 +2992,6 @@ packages: | |||||||
|   /path-is-absolute/1.0.1: |   /path-is-absolute/1.0.1: | ||||||
|     resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} |     resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} | ||||||
|     engines: {node: '>=0.10.0'} |     engines: {node: '>=0.10.0'} | ||||||
|     dev: true |  | ||||||
| 
 | 
 | ||||||
|   /path-key/3.1.1: |   /path-key/3.1.1: | ||||||
|     resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} |     resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} | ||||||
| @ -2987,7 +3203,6 @@ packages: | |||||||
|     hasBin: true |     hasBin: true | ||||||
|     dependencies: |     dependencies: | ||||||
|       glob: 7.2.3 |       glob: 7.2.3 | ||||||
|     dev: true |  | ||||||
| 
 | 
 | ||||||
|   /rimraf/4.1.2: |   /rimraf/4.1.2: | ||||||
|     resolution: {integrity: sha512-BlIbgFryTbw3Dz6hyoWFhKk+unCcHMSkZGrTFVAx2WmttdBSonsdtRlwiuTbDqTKr+UlXIUqJVS4QT5tUzGENQ==} |     resolution: {integrity: sha512-BlIbgFryTbw3Dz6hyoWFhKk+unCcHMSkZGrTFVAx2WmttdBSonsdtRlwiuTbDqTKr+UlXIUqJVS4QT5tUzGENQ==} | ||||||
| @ -3036,13 +3251,17 @@ packages: | |||||||
|       ajv-keywords: 3.5.2_ajv@6.12.6 |       ajv-keywords: 3.5.2_ajv@6.12.6 | ||||||
|     dev: true |     dev: true | ||||||
| 
 | 
 | ||||||
|  |   /semver/6.3.0: | ||||||
|  |     resolution: {integrity: sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==} | ||||||
|  |     hasBin: true | ||||||
|  |     dev: false | ||||||
|  | 
 | ||||||
|   /semver/7.3.8: |   /semver/7.3.8: | ||||||
|     resolution: {integrity: sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==} |     resolution: {integrity: sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==} | ||||||
|     engines: {node: '>=10'} |     engines: {node: '>=10'} | ||||||
|     hasBin: true |     hasBin: true | ||||||
|     dependencies: |     dependencies: | ||||||
|       lru-cache: 6.0.0 |       lru-cache: 6.0.0 | ||||||
|     dev: true |  | ||||||
| 
 | 
 | ||||||
|   /send/0.18.0: |   /send/0.18.0: | ||||||
|     resolution: {integrity: sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==} |     resolution: {integrity: sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==} | ||||||
| @ -3083,6 +3302,10 @@ packages: | |||||||
|       - supports-color |       - supports-color | ||||||
|     dev: false |     dev: false | ||||||
| 
 | 
 | ||||||
|  |   /set-blocking/2.0.0: | ||||||
|  |     resolution: {integrity: sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==} | ||||||
|  |     dev: false | ||||||
|  | 
 | ||||||
|   /setprototypeof/1.2.0: |   /setprototypeof/1.2.0: | ||||||
|     resolution: {integrity: sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==} |     resolution: {integrity: sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==} | ||||||
|     dev: false |     dev: false | ||||||
| @ -3199,7 +3422,6 @@ packages: | |||||||
|       emoji-regex: 8.0.0 |       emoji-regex: 8.0.0 | ||||||
|       is-fullwidth-code-point: 3.0.0 |       is-fullwidth-code-point: 3.0.0 | ||||||
|       strip-ansi: 6.0.1 |       strip-ansi: 6.0.1 | ||||||
|     dev: true |  | ||||||
| 
 | 
 | ||||||
|   /string-width/5.1.2: |   /string-width/5.1.2: | ||||||
|     resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==} |     resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==} | ||||||
| @ -3293,6 +3515,18 @@ packages: | |||||||
|     engines: {node: '>=6'} |     engines: {node: '>=6'} | ||||||
|     dev: true |     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: |   /terser-webpack-plugin/5.3.6_webpack@5.75.0: | ||||||
|     resolution: {integrity: sha512-kfLFk+PoLUQIbLmB1+PZDMRSZS99Mp+/MHqDNmMA6tOItzRt+Npe3E+fsMs5mfcM0wCtrrdU387UnV+vnSffXQ==} |     resolution: {integrity: sha512-kfLFk+PoLUQIbLmB1+PZDMRSZS99Mp+/MHqDNmMA6tOItzRt+Npe3E+fsMs5mfcM0wCtrrdU387UnV+vnSffXQ==} | ||||||
|     engines: {node: '>= 10.13.0'} |     engines: {node: '>= 10.13.0'} | ||||||
| @ -3630,6 +3864,12 @@ packages: | |||||||
|       isexe: 2.0.0 |       isexe: 2.0.0 | ||||||
|     dev: true |     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: |   /windows-release/4.0.0: | ||||||
|     resolution: {integrity: sha512-OxmV4wzDKB1x7AZaZgXMVsdJ1qER1ed83ZrTYd5Bwq2HfJVg3DJS8nqlAG4sMoJ7mu8cuRmLEYyU13BKwctRAg==} |     resolution: {integrity: sha512-OxmV4wzDKB1x7AZaZgXMVsdJ1qER1ed83ZrTYd5Bwq2HfJVg3DJS8nqlAG4sMoJ7mu8cuRmLEYyU13BKwctRAg==} | ||||||
|     engines: {node: '>=10'} |     engines: {node: '>=10'} | ||||||
| @ -3662,7 +3902,6 @@ packages: | |||||||
| 
 | 
 | ||||||
|   /wrappy/1.0.2: |   /wrappy/1.0.2: | ||||||
|     resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} |     resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} | ||||||
|     dev: true |  | ||||||
| 
 | 
 | ||||||
|   /xtend/4.0.2: |   /xtend/4.0.2: | ||||||
|     resolution: {integrity: sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==} |     resolution: {integrity: sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==} | ||||||
| @ -3671,7 +3910,6 @@ packages: | |||||||
| 
 | 
 | ||||||
|   /yallist/4.0.0: |   /yallist/4.0.0: | ||||||
|     resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} |     resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} | ||||||
|     dev: true |  | ||||||
| 
 | 
 | ||||||
|   /yaml/1.10.2: |   /yaml/1.10.2: | ||||||
|     resolution: {integrity: sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==} |     resolution: {integrity: sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==} | ||||||
|  | |||||||
| @ -2,6 +2,7 @@ import { Logger, Module } from '@nestjs/common' | |||||||
| import { ConfigModule } from '@nestjs/config' | import { ConfigModule } from '@nestjs/config' | ||||||
| import { PrismaModule, loggingMiddleware } from 'nestjs-prisma' | import { PrismaModule, loggingMiddleware } from 'nestjs-prisma' | ||||||
| import { UsersModule } from './users/users.module' | import { UsersModule } from './users/users.module' | ||||||
|  | import { AuthModule } from './auth/auth.module' | ||||||
| 
 | 
 | ||||||
| @Module({ | @Module({ | ||||||
|   imports: [ |   imports: [ | ||||||
| @ -18,6 +19,7 @@ import { UsersModule } from './users/users.module' | |||||||
|       }, |       }, | ||||||
|     }), |     }), | ||||||
|     UsersModule, |     UsersModule, | ||||||
|  |     AuthModule, | ||||||
|   ], |   ], | ||||||
|   controllers: [], |   controllers: [], | ||||||
|   providers: [], |   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 { UsersService } from './users.service' | ||||||
| import { CreateUserDto } from './dto/create-user.dto' | import { ApiTags } from '@nestjs/swagger' | ||||||
| import { ApiOkResponse, ApiTags } from '@nestjs/swagger' |  | ||||||
| import { UserEntity } from './entities/user.entity' |  | ||||||
| 
 | 
 | ||||||
| @ApiTags('user') | @ApiTags('user') | ||||||
| @Controller() | @Controller() | ||||||
| export class UsersController { | export class UsersController { | ||||||
|   constructor(private readonly userService: UsersService) {} |   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({ | @Module({ | ||||||
|   controllers: [UsersController], |   controllers: [UsersController], | ||||||
|   providers: [UsersService], |   providers: [UsersService], | ||||||
|  |   exports: [UsersService], | ||||||
| }) | }) | ||||||
| export class UsersModule {} | export class UsersModule {} | ||||||
|  | |||||||
| @ -1,26 +1,7 @@ | |||||||
| import { Injectable } from '@nestjs/common' | import { Injectable } from '@nestjs/common' | ||||||
| import { PrismaService } from 'nestjs-prisma' | import { PrismaService } from 'nestjs-prisma' | ||||||
| import { Prisma } from '@prisma/client' |  | ||||||
| 
 | 
 | ||||||
| @Injectable() | @Injectable() | ||||||
| export class UsersService { | export class UsersService { | ||||||
|   constructor(private prisma: PrismaService) {} |   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