add webfinger and routes boilerplate
This commit is contained in:
		
							parent
							
								
									cad4c59d51
								
							
						
					
					
						commit
						9f74db9857
					
				
					 8 changed files with 589 additions and 17 deletions
				
			
		|  | @ -17,6 +17,8 @@ | ||||||
|     "argon2": "^0.30.3", |     "argon2": "^0.30.3", | ||||||
|     "dotenv": "^16.3.1", |     "dotenv": "^16.3.1", | ||||||
|     "express": "^4.18.2", |     "express": "^4.18.2", | ||||||
|  |     "fastify": "^4.20.0", | ||||||
|  |     "glob": "^10.3.3", | ||||||
|     "pg": "^8.11.1", |     "pg": "^8.11.1", | ||||||
|     "reflect-metadata": "^0.1.13", |     "reflect-metadata": "^0.1.13", | ||||||
|     "tslog": "^4.8.2", |     "tslog": "^4.8.2", | ||||||
|  |  | ||||||
							
								
								
									
										457
									
								
								pnpm-lock.yaml
									
										
									
										generated
									
									
									
								
							
							
						
						
									
										457
									
								
								pnpm-lock.yaml
									
										
									
										generated
									
									
									
								
							|  | @ -10,6 +10,12 @@ dependencies: | ||||||
|   express: |   express: | ||||||
|     specifier: ^4.18.2 |     specifier: ^4.18.2 | ||||||
|     version: 4.18.2 |     version: 4.18.2 | ||||||
|  |   fastify: | ||||||
|  |     specifier: ^4.20.0 | ||||||
|  |     version: 4.20.0 | ||||||
|  |   glob: | ||||||
|  |     specifier: ^10.3.3 | ||||||
|  |     version: 10.3.3 | ||||||
|   pg: |   pg: | ||||||
|     specifier: ^8.11.1 |     specifier: ^8.11.1 | ||||||
|     version: 8.11.1 |     version: 8.11.1 | ||||||
|  | @ -58,6 +64,40 @@ packages: | ||||||
|     dependencies: |     dependencies: | ||||||
|       '@jridgewell/trace-mapping': 0.3.9 |       '@jridgewell/trace-mapping': 0.3.9 | ||||||
| 
 | 
 | ||||||
|  |   /@fastify/ajv-compiler@3.5.0: | ||||||
|  |     resolution: {integrity: sha512-ebbEtlI7dxXF5ziNdr05mOY8NnDiPB1XvAlLHctRt/Rc+C3LCOVW5imUVX+mhvUhnNzmPBHewUkOFgGlCxgdAA==} | ||||||
|  |     dependencies: | ||||||
|  |       ajv: 8.12.0 | ||||||
|  |       ajv-formats: 2.1.1(ajv@8.12.0) | ||||||
|  |       fast-uri: 2.2.0 | ||||||
|  |     dev: false | ||||||
|  | 
 | ||||||
|  |   /@fastify/deepmerge@1.3.0: | ||||||
|  |     resolution: {integrity: sha512-J8TOSBq3SoZbDhM9+R/u77hP93gz/rajSA+K2kGyijPpORPWUXHUpTaleoj+92As0S9uPRP7Oi8IqMf0u+ro6A==} | ||||||
|  |     dev: false | ||||||
|  | 
 | ||||||
|  |   /@fastify/error@3.3.0: | ||||||
|  |     resolution: {integrity: sha512-dj7vjIn1Ar8sVXj2yAXiMNCJDmS9MQ9XMlIecX2dIzzhjSHCyKo4DdXjXMs7wKW2kj6yvVRSpuQjOZ3YLrh56w==} | ||||||
|  |     dev: false | ||||||
|  | 
 | ||||||
|  |   /@fastify/fast-json-stringify-compiler@4.3.0: | ||||||
|  |     resolution: {integrity: sha512-aZAXGYo6m22Fk1zZzEUKBvut/CIIQe/BapEORnxiD5Qr0kPHqqI69NtEMCme74h+at72sPhbkb4ZrLd1W3KRLA==} | ||||||
|  |     dependencies: | ||||||
|  |       fast-json-stringify: 5.7.0 | ||||||
|  |     dev: false | ||||||
|  | 
 | ||||||
|  |   /@isaacs/cliui@8.0.2: | ||||||
|  |     resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==} | ||||||
|  |     engines: {node: '>=12'} | ||||||
|  |     dependencies: | ||||||
|  |       string-width: 5.1.2 | ||||||
|  |       string-width-cjs: /string-width@4.2.3 | ||||||
|  |       strip-ansi: 7.1.0 | ||||||
|  |       strip-ansi-cjs: /strip-ansi@6.0.1 | ||||||
|  |       wrap-ansi: 8.1.0 | ||||||
|  |       wrap-ansi-cjs: /wrap-ansi@7.0.0 | ||||||
|  |     dev: false | ||||||
|  | 
 | ||||||
|   /@jridgewell/resolve-uri@3.1.1: |   /@jridgewell/resolve-uri@3.1.1: | ||||||
|     resolution: {integrity: sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==} |     resolution: {integrity: sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==} | ||||||
|     engines: {node: '>=6.0.0'} |     engines: {node: '>=6.0.0'} | ||||||
|  | @ -94,6 +134,13 @@ packages: | ||||||
|     engines: {node: '>=10'} |     engines: {node: '>=10'} | ||||||
|     dev: false |     dev: false | ||||||
| 
 | 
 | ||||||
|  |   /@pkgjs/parseargs@0.11.0: | ||||||
|  |     resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} | ||||||
|  |     engines: {node: '>=14'} | ||||||
|  |     requiresBuild: true | ||||||
|  |     dev: false | ||||||
|  |     optional: true | ||||||
|  | 
 | ||||||
|   /@sqltools/formatter@1.2.5: |   /@sqltools/formatter@1.2.5: | ||||||
|     resolution: {integrity: sha512-Uy0+khmZqUrUGm5dmMqVlnvufZRSK0FbYzVgp0UMstm+F5+W2/jnEEQyc9vo1ZR/E5ZI/B1WjjoTqBqwJL6Krw==} |     resolution: {integrity: sha512-Uy0+khmZqUrUGm5dmMqVlnvufZRSK0FbYzVgp0UMstm+F5+W2/jnEEQyc9vo1ZR/E5ZI/B1WjjoTqBqwJL6Krw==} | ||||||
|     dev: false |     dev: false | ||||||
|  | @ -182,6 +229,17 @@ packages: | ||||||
|   /abbrev@1.1.1: |   /abbrev@1.1.1: | ||||||
|     resolution: {integrity: sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==} |     resolution: {integrity: sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==} | ||||||
| 
 | 
 | ||||||
|  |   /abort-controller@3.0.0: | ||||||
|  |     resolution: {integrity: sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==} | ||||||
|  |     engines: {node: '>=6.5'} | ||||||
|  |     dependencies: | ||||||
|  |       event-target-shim: 5.0.1 | ||||||
|  |     dev: false | ||||||
|  | 
 | ||||||
|  |   /abstract-logging@2.0.1: | ||||||
|  |     resolution: {integrity: sha512-2BjRTZxTPvheOvGbBslFSYOUkr+SjPtOnrLP33f+VIWLzezQpZcqVg7ja3L4dBXmzzgwT+a029jRx5PCi3JuiA==} | ||||||
|  |     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'} | ||||||
|  | @ -208,11 +266,36 @@ packages: | ||||||
|       - supports-color |       - supports-color | ||||||
|     dev: false |     dev: false | ||||||
| 
 | 
 | ||||||
|  |   /ajv-formats@2.1.1(ajv@8.12.0): | ||||||
|  |     resolution: {integrity: sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==} | ||||||
|  |     peerDependencies: | ||||||
|  |       ajv: ^8.0.0 | ||||||
|  |     peerDependenciesMeta: | ||||||
|  |       ajv: | ||||||
|  |         optional: true | ||||||
|  |     dependencies: | ||||||
|  |       ajv: 8.12.0 | ||||||
|  |     dev: false | ||||||
|  | 
 | ||||||
|  |   /ajv@8.12.0: | ||||||
|  |     resolution: {integrity: sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==} | ||||||
|  |     dependencies: | ||||||
|  |       fast-deep-equal: 3.1.3 | ||||||
|  |       json-schema-traverse: 1.0.0 | ||||||
|  |       require-from-string: 2.0.2 | ||||||
|  |       uri-js: 4.4.1 | ||||||
|  |     dev: false | ||||||
|  | 
 | ||||||
|   /ansi-regex@5.0.1: |   /ansi-regex@5.0.1: | ||||||
|     resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} |     resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} | ||||||
|     engines: {node: '>=8'} |     engines: {node: '>=8'} | ||||||
|     dev: false |     dev: false | ||||||
| 
 | 
 | ||||||
|  |   /ansi-regex@6.0.1: | ||||||
|  |     resolution: {integrity: sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==} | ||||||
|  |     engines: {node: '>=12'} | ||||||
|  |     dev: false | ||||||
|  | 
 | ||||||
|   /ansi-styles@4.3.0: |   /ansi-styles@4.3.0: | ||||||
|     resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} |     resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} | ||||||
|     engines: {node: '>=8'} |     engines: {node: '>=8'} | ||||||
|  | @ -220,6 +303,11 @@ packages: | ||||||
|       color-convert: 2.0.1 |       color-convert: 2.0.1 | ||||||
|     dev: false |     dev: false | ||||||
| 
 | 
 | ||||||
|  |   /ansi-styles@6.2.1: | ||||||
|  |     resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==} | ||||||
|  |     engines: {node: '>=12'} | ||||||
|  |     dev: false | ||||||
|  | 
 | ||||||
|   /any-promise@1.3.0: |   /any-promise@1.3.0: | ||||||
|     resolution: {integrity: sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==} |     resolution: {integrity: sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==} | ||||||
|     dev: false |     dev: false | ||||||
|  | @ -241,6 +329,10 @@ packages: | ||||||
|     resolution: {integrity: sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==} |     resolution: {integrity: sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==} | ||||||
|     dev: false |     dev: false | ||||||
| 
 | 
 | ||||||
|  |   /archy@1.0.0: | ||||||
|  |     resolution: {integrity: sha512-Xg+9RwCg/0p32teKdGMPTPnVXKD0w3DfHnFTficozsAgsvq2XenPJq/MYpzzQ/v8zrOyJn6Ds39VA4JIDwFfqw==} | ||||||
|  |     dev: false | ||||||
|  | 
 | ||||||
|   /are-we-there-yet@2.0.0: |   /are-we-there-yet@2.0.0: | ||||||
|     resolution: {integrity: sha512-Ci/qENmwHnsYo9xKIcUJN5LeDKdJ6R1Z1j9V/J5wyq8nh/mYPEpIKJbBZXtZjG04HiK7zV/p6Vs9952MrMeUIw==} |     resolution: {integrity: sha512-Ci/qENmwHnsYo9xKIcUJN5LeDKdJ6R1Z1j9V/J5wyq8nh/mYPEpIKJbBZXtZjG04HiK7zV/p6Vs9952MrMeUIw==} | ||||||
|     engines: {node: '>=10'} |     engines: {node: '>=10'} | ||||||
|  | @ -269,6 +361,21 @@ packages: | ||||||
|     resolution: {integrity: sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==} |     resolution: {integrity: sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==} | ||||||
|     dev: false |     dev: false | ||||||
| 
 | 
 | ||||||
|  |   /atomic-sleep@1.0.0: | ||||||
|  |     resolution: {integrity: sha512-kNOjDqAh7px0XWNI+4QbzoiR/nTkHAWNud2uvnJquD1/x5a7EQZMJT0AczqK0Qn67oY/TTQ1LbUKajZpp3I9tQ==} | ||||||
|  |     engines: {node: '>=8.0.0'} | ||||||
|  |     dev: false | ||||||
|  | 
 | ||||||
|  |   /avvio@8.2.1: | ||||||
|  |     resolution: {integrity: sha512-TAlMYvOuwGyLK3PfBb5WKBXZmXz2fVCgv23d6zZFdle/q3gPjmxBaeuC0pY0Dzs5PWMSgfqqEZkrye19GlDTgw==} | ||||||
|  |     dependencies: | ||||||
|  |       archy: 1.0.0 | ||||||
|  |       debug: 4.3.4 | ||||||
|  |       fastq: 1.15.0 | ||||||
|  |     transitivePeerDependencies: | ||||||
|  |       - supports-color | ||||||
|  |     dev: false | ||||||
|  | 
 | ||||||
|   /balanced-match@1.0.2: |   /balanced-match@1.0.2: | ||||||
|     resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} |     resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} | ||||||
| 
 | 
 | ||||||
|  | @ -449,6 +556,15 @@ packages: | ||||||
|   /create-require@1.1.1: |   /create-require@1.1.1: | ||||||
|     resolution: {integrity: sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==} |     resolution: {integrity: sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==} | ||||||
| 
 | 
 | ||||||
|  |   /cross-spawn@7.0.3: | ||||||
|  |     resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==} | ||||||
|  |     engines: {node: '>= 8'} | ||||||
|  |     dependencies: | ||||||
|  |       path-key: 3.1.1 | ||||||
|  |       shebang-command: 2.0.0 | ||||||
|  |       which: 2.0.2 | ||||||
|  |     dev: false | ||||||
|  | 
 | ||||||
|   /date-fns@2.30.0: |   /date-fns@2.30.0: | ||||||
|     resolution: {integrity: sha512-fnULvOpxnC5/Vg3NCiWelDsLiUc9bRwAPs/+LfTLNvetFCtCTN+yQz15C/fs4AwX1R9K5GLtLfn8QW+dWisaAw==} |     resolution: {integrity: sha512-fnULvOpxnC5/Vg3NCiWelDsLiUc9bRwAPs/+LfTLNvetFCtCTN+yQz15C/fs4AwX1R9K5GLtLfn8QW+dWisaAw==} | ||||||
|     engines: {node: '>=0.11'} |     engines: {node: '>=0.11'} | ||||||
|  | @ -519,6 +635,10 @@ packages: | ||||||
|     engines: {node: '>=12'} |     engines: {node: '>=12'} | ||||||
|     dev: false |     dev: false | ||||||
| 
 | 
 | ||||||
|  |   /eastasianwidth@0.2.0: | ||||||
|  |     resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} | ||||||
|  |     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 | ||||||
|  | @ -527,6 +647,10 @@ packages: | ||||||
|     resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} |     resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} | ||||||
|     dev: false |     dev: false | ||||||
| 
 | 
 | ||||||
|  |   /emoji-regex@9.2.2: | ||||||
|  |     resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} | ||||||
|  |     dev: false | ||||||
|  | 
 | ||||||
|   /encodeurl@1.0.2: |   /encodeurl@1.0.2: | ||||||
|     resolution: {integrity: sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==} |     resolution: {integrity: sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==} | ||||||
|     engines: {node: '>= 0.8'} |     engines: {node: '>= 0.8'} | ||||||
|  | @ -546,6 +670,16 @@ packages: | ||||||
|     engines: {node: '>= 0.6'} |     engines: {node: '>= 0.6'} | ||||||
|     dev: false |     dev: false | ||||||
| 
 | 
 | ||||||
|  |   /event-target-shim@5.0.1: | ||||||
|  |     resolution: {integrity: sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==} | ||||||
|  |     engines: {node: '>=6'} | ||||||
|  |     dev: false | ||||||
|  | 
 | ||||||
|  |   /events@3.3.0: | ||||||
|  |     resolution: {integrity: sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==} | ||||||
|  |     engines: {node: '>=0.8.x'} | ||||||
|  |     dev: false | ||||||
|  | 
 | ||||||
|   /express@4.18.2: |   /express@4.18.2: | ||||||
|     resolution: {integrity: sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==} |     resolution: {integrity: sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==} | ||||||
|     engines: {node: '>= 0.10.0'} |     engines: {node: '>= 0.10.0'} | ||||||
|  | @ -585,6 +719,73 @@ packages: | ||||||
|       - supports-color |       - supports-color | ||||||
|     dev: false |     dev: false | ||||||
| 
 | 
 | ||||||
|  |   /fast-content-type-parse@1.0.0: | ||||||
|  |     resolution: {integrity: sha512-Xbc4XcysUXcsP5aHUU7Nq3OwvHq97C+WnbkeIefpeYLX+ryzFJlU6OStFJhs6Ol0LkUGpcK+wL0JwfM+FCU5IA==} | ||||||
|  |     dev: false | ||||||
|  | 
 | ||||||
|  |   /fast-decode-uri-component@1.0.1: | ||||||
|  |     resolution: {integrity: sha512-WKgKWg5eUxvRZGwW8FvfbaH7AXSh2cL+3j5fMGzUMCxWBJ3dV3a7Wz8y2f/uQ0e3B6WmodD3oS54jTQ9HVTIIg==} | ||||||
|  |     dev: false | ||||||
|  | 
 | ||||||
|  |   /fast-deep-equal@3.1.3: | ||||||
|  |     resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} | ||||||
|  |     dev: false | ||||||
|  | 
 | ||||||
|  |   /fast-json-stringify@5.7.0: | ||||||
|  |     resolution: {integrity: sha512-sBVPTgnAZseLu1Qgj6lUbQ0HfjFhZWXAmpZ5AaSGkyLh5gAXBga/uPJjQPHpDFjC9adWIpdOcCLSDTgrZ7snoQ==} | ||||||
|  |     dependencies: | ||||||
|  |       '@fastify/deepmerge': 1.3.0 | ||||||
|  |       ajv: 8.12.0 | ||||||
|  |       ajv-formats: 2.1.1(ajv@8.12.0) | ||||||
|  |       fast-deep-equal: 3.1.3 | ||||||
|  |       fast-uri: 2.2.0 | ||||||
|  |       rfdc: 1.3.0 | ||||||
|  |     dev: false | ||||||
|  | 
 | ||||||
|  |   /fast-querystring@1.1.2: | ||||||
|  |     resolution: {integrity: sha512-g6KuKWmFXc0fID8WWH0jit4g0AGBoJhCkJMb1RmbsSEUNvQ+ZC8D6CUZ+GtF8nMzSPXnhiePyyqqipzNNEnHjg==} | ||||||
|  |     dependencies: | ||||||
|  |       fast-decode-uri-component: 1.0.1 | ||||||
|  |     dev: false | ||||||
|  | 
 | ||||||
|  |   /fast-redact@3.2.0: | ||||||
|  |     resolution: {integrity: sha512-zaTadChr+NekyzallAMXATXLOR8MNx3zqpZ0MUF2aGf4EathnG0f32VLODNlY8IuGY3HoRO2L6/6fSzNsLaHIw==} | ||||||
|  |     engines: {node: '>=6'} | ||||||
|  |     dev: false | ||||||
|  | 
 | ||||||
|  |   /fast-uri@2.2.0: | ||||||
|  |     resolution: {integrity: sha512-cIusKBIt/R/oI6z/1nyfe2FvGKVTohVRfvkOhvx0nCEW+xf5NoCXjAHcWp93uOUBchzYcsvPlrapAdX1uW+YGg==} | ||||||
|  |     dev: false | ||||||
|  | 
 | ||||||
|  |   /fastify@4.20.0: | ||||||
|  |     resolution: {integrity: sha512-zWWi5KGAb1YZ6fyrnFnA1CA1EZHkGM6YuELgB3QpS3l4lLRy14W1cc16b4KGPH/zQ98WCSdS+T41JkHY3eq1oA==} | ||||||
|  |     dependencies: | ||||||
|  |       '@fastify/ajv-compiler': 3.5.0 | ||||||
|  |       '@fastify/error': 3.3.0 | ||||||
|  |       '@fastify/fast-json-stringify-compiler': 4.3.0 | ||||||
|  |       abstract-logging: 2.0.1 | ||||||
|  |       avvio: 8.2.1 | ||||||
|  |       fast-content-type-parse: 1.0.0 | ||||||
|  |       fast-json-stringify: 5.7.0 | ||||||
|  |       find-my-way: 7.6.2 | ||||||
|  |       light-my-request: 5.10.0 | ||||||
|  |       pino: 8.14.1 | ||||||
|  |       process-warning: 2.2.0 | ||||||
|  |       proxy-addr: 2.0.7 | ||||||
|  |       rfdc: 1.3.0 | ||||||
|  |       secure-json-parse: 2.7.0 | ||||||
|  |       semver: 7.5.4 | ||||||
|  |       tiny-lru: 11.0.1 | ||||||
|  |     transitivePeerDependencies: | ||||||
|  |       - supports-color | ||||||
|  |     dev: false | ||||||
|  | 
 | ||||||
|  |   /fastq@1.15.0: | ||||||
|  |     resolution: {integrity: sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==} | ||||||
|  |     dependencies: | ||||||
|  |       reusify: 1.0.4 | ||||||
|  |     dev: false | ||||||
|  | 
 | ||||||
|   /fill-range@7.0.1: |   /fill-range@7.0.1: | ||||||
|     resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==} |     resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==} | ||||||
|     engines: {node: '>=8'} |     engines: {node: '>=8'} | ||||||
|  | @ -607,6 +808,23 @@ packages: | ||||||
|       - supports-color |       - supports-color | ||||||
|     dev: false |     dev: false | ||||||
| 
 | 
 | ||||||
|  |   /find-my-way@7.6.2: | ||||||
|  |     resolution: {integrity: sha512-0OjHn1b1nCX3eVbm9ByeEHiscPYiHLfhei1wOUU9qffQkk98wE0Lo8VrVYfSGMgnSnDh86DxedduAnBf4nwUEw==} | ||||||
|  |     engines: {node: '>=14'} | ||||||
|  |     dependencies: | ||||||
|  |       fast-deep-equal: 3.1.3 | ||||||
|  |       fast-querystring: 1.1.2 | ||||||
|  |       safe-regex2: 2.0.0 | ||||||
|  |     dev: false | ||||||
|  | 
 | ||||||
|  |   /foreground-child@3.1.1: | ||||||
|  |     resolution: {integrity: sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==} | ||||||
|  |     engines: {node: '>=14'} | ||||||
|  |     dependencies: | ||||||
|  |       cross-spawn: 7.0.3 | ||||||
|  |       signal-exit: 4.0.2 | ||||||
|  |     dev: false | ||||||
|  | 
 | ||||||
|   /forwarded@0.2.0: |   /forwarded@0.2.0: | ||||||
|     resolution: {integrity: sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==} |     resolution: {integrity: sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==} | ||||||
|     engines: {node: '>= 0.6'} |     engines: {node: '>= 0.6'} | ||||||
|  | @ -676,6 +894,18 @@ packages: | ||||||
|       is-glob: 4.0.3 |       is-glob: 4.0.3 | ||||||
|     dev: true |     dev: true | ||||||
| 
 | 
 | ||||||
|  |   /glob@10.3.3: | ||||||
|  |     resolution: {integrity: sha512-92vPiMb/iqpmEgsOoIDvTjc50wf9CCCvMzsi6W0JLPeUKE8TWP1a73PgqSrqy7iAZxaSD1YdzU7QZR5LF51MJw==} | ||||||
|  |     engines: {node: '>=16 || 14 >=14.17'} | ||||||
|  |     hasBin: true | ||||||
|  |     dependencies: | ||||||
|  |       foreground-child: 3.1.1 | ||||||
|  |       jackspeak: 2.2.1 | ||||||
|  |       minimatch: 9.0.3 | ||||||
|  |       minipass: 5.0.0 | ||||||
|  |       path-scurry: 1.10.1 | ||||||
|  |     dev: false | ||||||
|  | 
 | ||||||
|   /glob@7.2.3: |   /glob@7.2.3: | ||||||
|     resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} |     resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} | ||||||
|     dependencies: |     dependencies: | ||||||
|  | @ -814,6 +1044,36 @@ packages: | ||||||
|     engines: {node: '>=0.12.0'} |     engines: {node: '>=0.12.0'} | ||||||
|     dev: true |     dev: true | ||||||
| 
 | 
 | ||||||
|  |   /isexe@2.0.0: | ||||||
|  |     resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} | ||||||
|  |     dev: false | ||||||
|  | 
 | ||||||
|  |   /jackspeak@2.2.1: | ||||||
|  |     resolution: {integrity: sha512-MXbxovZ/Pm42f6cDIDkl3xpwv1AGwObKwfmjs2nQePiy85tP3fatofl3FC1aBsOtP/6fq5SbtgHwWcMsLP+bDw==} | ||||||
|  |     engines: {node: '>=14'} | ||||||
|  |     dependencies: | ||||||
|  |       '@isaacs/cliui': 8.0.2 | ||||||
|  |     optionalDependencies: | ||||||
|  |       '@pkgjs/parseargs': 0.11.0 | ||||||
|  |     dev: false | ||||||
|  | 
 | ||||||
|  |   /json-schema-traverse@1.0.0: | ||||||
|  |     resolution: {integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==} | ||||||
|  |     dev: false | ||||||
|  | 
 | ||||||
|  |   /light-my-request@5.10.0: | ||||||
|  |     resolution: {integrity: sha512-ZU2D9GmAcOUculTTdH9/zryej6n8TzT+fNGdNtm6SDp5MMMpHrJJkvAdE3c6d8d2chE9i+a//dS9CWZtisknqA==} | ||||||
|  |     dependencies: | ||||||
|  |       cookie: 0.5.0 | ||||||
|  |       process-warning: 2.2.0 | ||||||
|  |       set-cookie-parser: 2.6.0 | ||||||
|  |     dev: false | ||||||
|  | 
 | ||||||
|  |   /lru-cache@10.0.0: | ||||||
|  |     resolution: {integrity: sha512-svTf/fzsKHffP42sujkO/Rjs37BCIsQVRCeNYIm9WN8rgT7ffoUnRtZCqU+6BqcSBdv8gwJeTz8knJpgACeQMw==} | ||||||
|  |     engines: {node: 14 || >=16.14} | ||||||
|  |     dev: false | ||||||
|  | 
 | ||||||
|   /lru-cache@6.0.0: |   /lru-cache@6.0.0: | ||||||
|     resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==} |     resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==} | ||||||
|     engines: {node: '>=10'} |     engines: {node: '>=10'} | ||||||
|  | @ -874,6 +1134,13 @@ packages: | ||||||
|       brace-expansion: 2.0.1 |       brace-expansion: 2.0.1 | ||||||
|     dev: false |     dev: false | ||||||
| 
 | 
 | ||||||
|  |   /minimatch@9.0.3: | ||||||
|  |     resolution: {integrity: sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==} | ||||||
|  |     engines: {node: '>=16 || 14 >=14.17'} | ||||||
|  |     dependencies: | ||||||
|  |       brace-expansion: 2.0.1 | ||||||
|  |     dev: false | ||||||
|  | 
 | ||||||
|   /minipass@3.3.6: |   /minipass@3.3.6: | ||||||
|     resolution: {integrity: sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==} |     resolution: {integrity: sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==} | ||||||
|     engines: {node: '>=8'} |     engines: {node: '>=8'} | ||||||
|  | @ -1001,6 +1268,10 @@ packages: | ||||||
|     resolution: {integrity: sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==} |     resolution: {integrity: sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==} | ||||||
|     dev: false |     dev: false | ||||||
| 
 | 
 | ||||||
|  |   /on-exit-leak-free@2.1.0: | ||||||
|  |     resolution: {integrity: sha512-VuCaZZAjReZ3vUwgOB8LxAosIurDiAW0s13rI1YwmaP++jvcxP77AWoQvenZebpCA2m8WC1/EosPYPMjnRAp/w==} | ||||||
|  |     dev: false | ||||||
|  | 
 | ||||||
|   /on-finished@2.4.1: |   /on-finished@2.4.1: | ||||||
|     resolution: {integrity: sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==} |     resolution: {integrity: sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==} | ||||||
|     engines: {node: '>= 0.8'} |     engines: {node: '>= 0.8'} | ||||||
|  | @ -1042,6 +1313,19 @@ packages: | ||||||
|     engines: {node: '>=0.10.0'} |     engines: {node: '>=0.10.0'} | ||||||
|     dev: false |     dev: false | ||||||
| 
 | 
 | ||||||
|  |   /path-key@3.1.1: | ||||||
|  |     resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} | ||||||
|  |     engines: {node: '>=8'} | ||||||
|  |     dev: false | ||||||
|  | 
 | ||||||
|  |   /path-scurry@1.10.1: | ||||||
|  |     resolution: {integrity: sha512-MkhCqzzBEpPvxxQ71Md0b1Kk51W01lrYvlMzSUaIzNsODdd7mqhiimSZlr+VegAz5Z6Vzt9Xg2ttE//XBhH3EQ==} | ||||||
|  |     engines: {node: '>=16 || 14 >=14.17'} | ||||||
|  |     dependencies: | ||||||
|  |       lru-cache: 10.0.0 | ||||||
|  |       minipass: 5.0.0 | ||||||
|  |     dev: false | ||||||
|  | 
 | ||||||
|   /path-to-regexp@0.1.7: |   /path-to-regexp@0.1.7: | ||||||
|     resolution: {integrity: sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==} |     resolution: {integrity: sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==} | ||||||
|     dev: false |     dev: false | ||||||
|  | @ -1115,6 +1399,34 @@ packages: | ||||||
|     engines: {node: '>=8.6'} |     engines: {node: '>=8.6'} | ||||||
|     dev: true |     dev: true | ||||||
| 
 | 
 | ||||||
|  |   /pino-abstract-transport@1.0.0: | ||||||
|  |     resolution: {integrity: sha512-c7vo5OpW4wIS42hUVcT5REsL8ZljsUfBjqV/e2sFxmFEFZiq1XLUp5EYLtuDH6PEHq9W1egWqRbnLUP5FuZmOA==} | ||||||
|  |     dependencies: | ||||||
|  |       readable-stream: 4.4.2 | ||||||
|  |       split2: 4.2.0 | ||||||
|  |     dev: false | ||||||
|  | 
 | ||||||
|  |   /pino-std-serializers@6.2.2: | ||||||
|  |     resolution: {integrity: sha512-cHjPPsE+vhj/tnhCy/wiMh3M3z3h/j15zHQX+S9GkTBgqJuTuJzYJ4gUyACLhDaJ7kk9ba9iRDmbH2tJU03OiA==} | ||||||
|  |     dev: false | ||||||
|  | 
 | ||||||
|  |   /pino@8.14.1: | ||||||
|  |     resolution: {integrity: sha512-8LYNv7BKWXSfS+k6oEc6occy5La+q2sPwU3q2ljTX5AZk7v+5kND2o5W794FyRaqha6DJajmkNRsWtPpFyMUdw==} | ||||||
|  |     hasBin: true | ||||||
|  |     dependencies: | ||||||
|  |       atomic-sleep: 1.0.0 | ||||||
|  |       fast-redact: 3.2.0 | ||||||
|  |       on-exit-leak-free: 2.1.0 | ||||||
|  |       pino-abstract-transport: 1.0.0 | ||||||
|  |       pino-std-serializers: 6.2.2 | ||||||
|  |       process-warning: 2.2.0 | ||||||
|  |       quick-format-unescaped: 4.0.4 | ||||||
|  |       real-require: 0.2.0 | ||||||
|  |       safe-stable-stringify: 2.4.3 | ||||||
|  |       sonic-boom: 3.3.0 | ||||||
|  |       thread-stream: 2.3.0 | ||||||
|  |     dev: false | ||||||
|  | 
 | ||||||
|   /postgres-array@2.0.0: |   /postgres-array@2.0.0: | ||||||
|     resolution: {integrity: sha512-VpZrUqU5A69eQyW2c5CA1jtLecCsN2U/bD6VilrFDWq5+5UIEVO7nazS3TEcHf1zuPYO/sqGvUvW62g86RXZuA==} |     resolution: {integrity: sha512-VpZrUqU5A69eQyW2c5CA1jtLecCsN2U/bD6VilrFDWq5+5UIEVO7nazS3TEcHf1zuPYO/sqGvUvW62g86RXZuA==} | ||||||
|     engines: {node: '>=4'} |     engines: {node: '>=4'} | ||||||
|  | @ -1143,6 +1455,15 @@ packages: | ||||||
|     hasBin: true |     hasBin: true | ||||||
|     dev: true |     dev: true | ||||||
| 
 | 
 | ||||||
|  |   /process-warning@2.2.0: | ||||||
|  |     resolution: {integrity: sha512-/1WZ8+VQjR6avWOgHeEPd7SDQmFQ1B5mC1eRXsCm5TarlNmx/wCsa5GEaxGm05BORRtyG/Ex/3xq3TuRvq57qg==} | ||||||
|  |     dev: false | ||||||
|  | 
 | ||||||
|  |   /process@0.11.10: | ||||||
|  |     resolution: {integrity: sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==} | ||||||
|  |     engines: {node: '>= 0.6.0'} | ||||||
|  |     dev: false | ||||||
|  | 
 | ||||||
|   /proxy-addr@2.0.7: |   /proxy-addr@2.0.7: | ||||||
|     resolution: {integrity: sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==} |     resolution: {integrity: sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==} | ||||||
|     engines: {node: '>= 0.10'} |     engines: {node: '>= 0.10'} | ||||||
|  | @ -1155,6 +1476,11 @@ packages: | ||||||
|     resolution: {integrity: sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w==} |     resolution: {integrity: sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w==} | ||||||
|     dev: true |     dev: true | ||||||
| 
 | 
 | ||||||
|  |   /punycode@2.3.0: | ||||||
|  |     resolution: {integrity: sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==} | ||||||
|  |     engines: {node: '>=6'} | ||||||
|  |     dev: false | ||||||
|  | 
 | ||||||
|   /qs@6.11.0: |   /qs@6.11.0: | ||||||
|     resolution: {integrity: sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==} |     resolution: {integrity: sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==} | ||||||
|     engines: {node: '>=0.6'} |     engines: {node: '>=0.6'} | ||||||
|  | @ -1162,6 +1488,10 @@ packages: | ||||||
|       side-channel: 1.0.4 |       side-channel: 1.0.4 | ||||||
|     dev: false |     dev: false | ||||||
| 
 | 
 | ||||||
|  |   /quick-format-unescaped@4.0.4: | ||||||
|  |     resolution: {integrity: sha512-tYC1Q1hgyRuHgloV/YXs2w15unPVh8qfu/qCTfhTYamaw7fyhumKa2yGpdSo87vY32rIclj+4fWYQXUMs9EHvg==} | ||||||
|  |     dev: false | ||||||
|  | 
 | ||||||
|   /range-parser@1.2.1: |   /range-parser@1.2.1: | ||||||
|     resolution: {integrity: sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==} |     resolution: {integrity: sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==} | ||||||
|     engines: {node: '>= 0.6'} |     engines: {node: '>= 0.6'} | ||||||
|  | @ -1186,6 +1516,17 @@ packages: | ||||||
|       util-deprecate: 1.0.2 |       util-deprecate: 1.0.2 | ||||||
|     dev: false |     dev: false | ||||||
| 
 | 
 | ||||||
|  |   /readable-stream@4.4.2: | ||||||
|  |     resolution: {integrity: sha512-Lk/fICSyIhodxy1IDK2HazkeGjSmezAWX2egdtJnYhtzKEsBPJowlI6F6LPb5tqIQILrMbx22S5o3GuJavPusA==} | ||||||
|  |     engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} | ||||||
|  |     dependencies: | ||||||
|  |       abort-controller: 3.0.0 | ||||||
|  |       buffer: 6.0.3 | ||||||
|  |       events: 3.3.0 | ||||||
|  |       process: 0.11.10 | ||||||
|  |       string_decoder: 1.3.0 | ||||||
|  |     dev: false | ||||||
|  | 
 | ||||||
|   /readdirp@3.6.0: |   /readdirp@3.6.0: | ||||||
|     resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} |     resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} | ||||||
|     engines: {node: '>=8.10.0'} |     engines: {node: '>=8.10.0'} | ||||||
|  | @ -1193,6 +1534,11 @@ packages: | ||||||
|       picomatch: 2.3.1 |       picomatch: 2.3.1 | ||||||
|     dev: true |     dev: true | ||||||
| 
 | 
 | ||||||
|  |   /real-require@0.2.0: | ||||||
|  |     resolution: {integrity: sha512-57frrGM/OCTLqLOAh0mhVA9VBMHd+9U7Zb2THMGdBUoZVOtGbJzjxsYGDJ3A9AYYCP4hn6y1TVbaOfzWtm5GFg==} | ||||||
|  |     engines: {node: '>= 12.13.0'} | ||||||
|  |     dev: false | ||||||
|  | 
 | ||||||
|   /reflect-metadata@0.1.13: |   /reflect-metadata@0.1.13: | ||||||
|     resolution: {integrity: sha512-Ts1Y/anZELhSsjMcU605fU9RE4Oi3p5ORujwbIKXfWa+0Zxs510Qrmrce5/Jowq3cHSZSJqBjypxmHarc+vEWg==} |     resolution: {integrity: sha512-Ts1Y/anZELhSsjMcU605fU9RE4Oi3p5ORujwbIKXfWa+0Zxs510Qrmrce5/Jowq3cHSZSJqBjypxmHarc+vEWg==} | ||||||
|     dev: false |     dev: false | ||||||
|  | @ -1206,6 +1552,25 @@ packages: | ||||||
|     engines: {node: '>=0.10.0'} |     engines: {node: '>=0.10.0'} | ||||||
|     dev: false |     dev: false | ||||||
| 
 | 
 | ||||||
|  |   /require-from-string@2.0.2: | ||||||
|  |     resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==} | ||||||
|  |     engines: {node: '>=0.10.0'} | ||||||
|  |     dev: false | ||||||
|  | 
 | ||||||
|  |   /ret@0.2.2: | ||||||
|  |     resolution: {integrity: sha512-M0b3YWQs7R3Z917WRQy1HHA7Ba7D8hvZg6UE5mLykJxQVE2ju0IXbGlaHPPlkY+WN7wFP+wUMXmBFA0aV6vYGQ==} | ||||||
|  |     engines: {node: '>=4'} | ||||||
|  |     dev: false | ||||||
|  | 
 | ||||||
|  |   /reusify@1.0.4: | ||||||
|  |     resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} | ||||||
|  |     engines: {iojs: '>=1.0.0', node: '>=0.10.0'} | ||||||
|  |     dev: false | ||||||
|  | 
 | ||||||
|  |   /rfdc@1.3.0: | ||||||
|  |     resolution: {integrity: sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA==} | ||||||
|  |     dev: false | ||||||
|  | 
 | ||||||
|   /rimraf@3.0.2: |   /rimraf@3.0.2: | ||||||
|     resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} |     resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} | ||||||
|     hasBin: true |     hasBin: true | ||||||
|  | @ -1217,10 +1582,25 @@ packages: | ||||||
|     resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} |     resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} | ||||||
|     dev: false |     dev: false | ||||||
| 
 | 
 | ||||||
|  |   /safe-regex2@2.0.0: | ||||||
|  |     resolution: {integrity: sha512-PaUSFsUaNNuKwkBijoAPHAK6/eM6VirvyPWlZ7BAQy4D+hCvh4B6lIG+nPdhbFfIbP+gTGBcrdsOaUs0F+ZBOQ==} | ||||||
|  |     dependencies: | ||||||
|  |       ret: 0.2.2 | ||||||
|  |     dev: false | ||||||
|  | 
 | ||||||
|  |   /safe-stable-stringify@2.4.3: | ||||||
|  |     resolution: {integrity: sha512-e2bDA2WJT0wxseVd4lsDP4+3ONX6HpMXQa1ZhFQ7SU+GjvORCmShbCMltrtIDfkYhVHrOcPtj+KhmDBdPdZD1g==} | ||||||
|  |     engines: {node: '>=10'} | ||||||
|  |     dev: false | ||||||
|  | 
 | ||||||
|   /safer-buffer@2.1.2: |   /safer-buffer@2.1.2: | ||||||
|     resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} |     resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} | ||||||
|     dev: false |     dev: false | ||||||
| 
 | 
 | ||||||
|  |   /secure-json-parse@2.7.0: | ||||||
|  |     resolution: {integrity: sha512-6aU+Rwsezw7VR8/nyvKTx8QpWH9FrcYiXXlqC4z5d5XQBDRqtbfsRjnwGyqbi3gddNtWHuEk9OANUotL26qKUw==} | ||||||
|  |     dev: false | ||||||
|  | 
 | ||||||
|   /semver@6.3.1: |   /semver@6.3.1: | ||||||
|     resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} |     resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} | ||||||
|     hasBin: true |     hasBin: true | ||||||
|  | @ -1270,6 +1650,10 @@ packages: | ||||||
|     resolution: {integrity: sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==} |     resolution: {integrity: sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==} | ||||||
|     dev: false |     dev: false | ||||||
| 
 | 
 | ||||||
|  |   /set-cookie-parser@2.6.0: | ||||||
|  |     resolution: {integrity: sha512-RVnVQxTXuerk653XfuliOxBP81Sf0+qfQE73LIYKcyMYHG94AuH0kgrQpRDuTZnSmjpysHmzxJXKNfa6PjFhyQ==} | ||||||
|  |     dev: false | ||||||
|  | 
 | ||||||
|   /setprototypeof@1.2.0: |   /setprototypeof@1.2.0: | ||||||
|     resolution: {integrity: sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==} |     resolution: {integrity: sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==} | ||||||
|     dev: false |     dev: false | ||||||
|  | @ -1282,6 +1666,18 @@ packages: | ||||||
|       safe-buffer: 5.2.1 |       safe-buffer: 5.2.1 | ||||||
|     dev: false |     dev: false | ||||||
| 
 | 
 | ||||||
|  |   /shebang-command@2.0.0: | ||||||
|  |     resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} | ||||||
|  |     engines: {node: '>=8'} | ||||||
|  |     dependencies: | ||||||
|  |       shebang-regex: 3.0.0 | ||||||
|  |     dev: false | ||||||
|  | 
 | ||||||
|  |   /shebang-regex@3.0.0: | ||||||
|  |     resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} | ||||||
|  |     engines: {node: '>=8'} | ||||||
|  |     dev: false | ||||||
|  | 
 | ||||||
|   /side-channel@1.0.4: |   /side-channel@1.0.4: | ||||||
|     resolution: {integrity: sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==} |     resolution: {integrity: sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==} | ||||||
|     dependencies: |     dependencies: | ||||||
|  | @ -1294,6 +1690,11 @@ packages: | ||||||
|     resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} |     resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} | ||||||
|     dev: false |     dev: false | ||||||
| 
 | 
 | ||||||
|  |   /signal-exit@4.0.2: | ||||||
|  |     resolution: {integrity: sha512-MY2/qGx4enyjprQnFaZsHib3Yadh3IXyV2C321GY0pjGfVBu4un0uDJkwgdxqO+Rdx8JMT8IfJIRwbYVz3Ob3Q==} | ||||||
|  |     engines: {node: '>=14'} | ||||||
|  |     dev: false | ||||||
|  | 
 | ||||||
|   /simple-update-notifier@2.0.0: |   /simple-update-notifier@2.0.0: | ||||||
|     resolution: {integrity: sha512-a2B9Y0KlNXl9u/vsW6sTIu9vGEpfKu2wRV6l1H3XEas/0gUIzGzBoP/IouTcUQbm9JWZLH3COxyn03TYlFax6w==} |     resolution: {integrity: sha512-a2B9Y0KlNXl9u/vsW6sTIu9vGEpfKu2wRV6l1H3XEas/0gUIzGzBoP/IouTcUQbm9JWZLH3COxyn03TYlFax6w==} | ||||||
|     engines: {node: '>=10'} |     engines: {node: '>=10'} | ||||||
|  | @ -1301,6 +1702,12 @@ packages: | ||||||
|       semver: 7.5.4 |       semver: 7.5.4 | ||||||
|     dev: true |     dev: true | ||||||
| 
 | 
 | ||||||
|  |   /sonic-boom@3.3.0: | ||||||
|  |     resolution: {integrity: sha512-LYxp34KlZ1a2Jb8ZQgFCK3niIHzibdwtwNUWKg0qQRzsDoJ3Gfgkf8KdBTFU3SkejDEIlWwnSnpVdOZIhFMl/g==} | ||||||
|  |     dependencies: | ||||||
|  |       atomic-sleep: 1.0.0 | ||||||
|  |     dev: false | ||||||
|  | 
 | ||||||
|   /split2@4.2.0: |   /split2@4.2.0: | ||||||
|     resolution: {integrity: sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==} |     resolution: {integrity: sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==} | ||||||
|     engines: {node: '>= 10.x'} |     engines: {node: '>= 10.x'} | ||||||
|  | @ -1320,6 +1727,15 @@ packages: | ||||||
|       strip-ansi: 6.0.1 |       strip-ansi: 6.0.1 | ||||||
|     dev: false |     dev: false | ||||||
| 
 | 
 | ||||||
|  |   /string-width@5.1.2: | ||||||
|  |     resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==} | ||||||
|  |     engines: {node: '>=12'} | ||||||
|  |     dependencies: | ||||||
|  |       eastasianwidth: 0.2.0 | ||||||
|  |       emoji-regex: 9.2.2 | ||||||
|  |       strip-ansi: 7.1.0 | ||||||
|  |     dev: false | ||||||
|  | 
 | ||||||
|   /string_decoder@1.3.0: |   /string_decoder@1.3.0: | ||||||
|     resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==} |     resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==} | ||||||
|     dependencies: |     dependencies: | ||||||
|  | @ -1333,6 +1749,13 @@ packages: | ||||||
|       ansi-regex: 5.0.1 |       ansi-regex: 5.0.1 | ||||||
|     dev: false |     dev: false | ||||||
| 
 | 
 | ||||||
|  |   /strip-ansi@7.1.0: | ||||||
|  |     resolution: {integrity: sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==} | ||||||
|  |     engines: {node: '>=12'} | ||||||
|  |     dependencies: | ||||||
|  |       ansi-regex: 6.0.1 | ||||||
|  |     dev: false | ||||||
|  | 
 | ||||||
|   /supports-color@5.5.0: |   /supports-color@5.5.0: | ||||||
|     resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==} |     resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==} | ||||||
|     engines: {node: '>=4'} |     engines: {node: '>=4'} | ||||||
|  | @ -1372,6 +1795,17 @@ packages: | ||||||
|       any-promise: 1.3.0 |       any-promise: 1.3.0 | ||||||
|     dev: false |     dev: false | ||||||
| 
 | 
 | ||||||
|  |   /thread-stream@2.3.0: | ||||||
|  |     resolution: {integrity: sha512-kaDqm1DET9pp3NXwR8382WHbnpXnRkN9xGN9dQt3B2+dmXiW8X1SOwmFOxAErEQ47ObhZ96J6yhZNXuyCOL7KA==} | ||||||
|  |     dependencies: | ||||||
|  |       real-require: 0.2.0 | ||||||
|  |     dev: false | ||||||
|  | 
 | ||||||
|  |   /tiny-lru@11.0.1: | ||||||
|  |     resolution: {integrity: sha512-iNgFugVuQgBKrqeO/mpiTTgmBsTP0WL6yeuLfLs/Ctf0pI/ixGqIRm8sDCwMcXGe9WWvt2sGXI5mNqZbValmJg==} | ||||||
|  |     engines: {node: '>=12'} | ||||||
|  |     dev: false | ||||||
|  | 
 | ||||||
|   /to-regex-range@5.0.1: |   /to-regex-range@5.0.1: | ||||||
|     resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} |     resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} | ||||||
|     engines: {node: '>=8.0'} |     engines: {node: '>=8.0'} | ||||||
|  | @ -1540,6 +1974,12 @@ packages: | ||||||
|     engines: {node: '>= 0.8'} |     engines: {node: '>= 0.8'} | ||||||
|     dev: false |     dev: false | ||||||
| 
 | 
 | ||||||
|  |   /uri-js@4.4.1: | ||||||
|  |     resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} | ||||||
|  |     dependencies: | ||||||
|  |       punycode: 2.3.0 | ||||||
|  |     dev: false | ||||||
|  | 
 | ||||||
|   /util-deprecate@1.0.2: |   /util-deprecate@1.0.2: | ||||||
|     resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} |     resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} | ||||||
|     dev: false |     dev: false | ||||||
|  | @ -1573,6 +2013,14 @@ packages: | ||||||
|       webidl-conversions: 3.0.1 |       webidl-conversions: 3.0.1 | ||||||
|     dev: false |     dev: false | ||||||
| 
 | 
 | ||||||
|  |   /which@2.0.2: | ||||||
|  |     resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} | ||||||
|  |     engines: {node: '>= 8'} | ||||||
|  |     hasBin: true | ||||||
|  |     dependencies: | ||||||
|  |       isexe: 2.0.0 | ||||||
|  |     dev: false | ||||||
|  | 
 | ||||||
|   /wide-align@1.1.5: |   /wide-align@1.1.5: | ||||||
|     resolution: {integrity: sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==} |     resolution: {integrity: sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==} | ||||||
|     dependencies: |     dependencies: | ||||||
|  | @ -1588,6 +2036,15 @@ packages: | ||||||
|       strip-ansi: 6.0.1 |       strip-ansi: 6.0.1 | ||||||
|     dev: false |     dev: false | ||||||
| 
 | 
 | ||||||
|  |   /wrap-ansi@8.1.0: | ||||||
|  |     resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==} | ||||||
|  |     engines: {node: '>=12'} | ||||||
|  |     dependencies: | ||||||
|  |       ansi-styles: 6.2.1 | ||||||
|  |       string-width: 5.1.2 | ||||||
|  |       strip-ansi: 7.1.0 | ||||||
|  |     dev: false | ||||||
|  | 
 | ||||||
|   /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: false |     dev: false | ||||||
|  |  | ||||||
|  | @ -9,3 +9,10 @@ export const DATABASE_PORT = Number(process.env.DATABASE_PORT) || 5432; | ||||||
| export const DATABASE_USER = process.env.DATABASE_USER || "postgres"; | export const DATABASE_USER = process.env.DATABASE_USER || "postgres"; | ||||||
| export const DATABASE_PASS = process.env.DATABASE_PASS || "postgres"; | export const DATABASE_PASS = process.env.DATABASE_PASS || "postgres"; | ||||||
| export const DATABASE_NAME = process.env.DATABASE_NAME || "postgres"; | export const DATABASE_NAME = process.env.DATABASE_NAME || "postgres"; | ||||||
|  | 
 | ||||||
|  | export const HTTPS = process.env.HTTPS === "true"; | ||||||
|  | export const DOMAIN = process.env.DOMAIN; | ||||||
|  | 
 | ||||||
|  | if (!DOMAIN) throw "$DOMAIN is empty"; | ||||||
|  | 
 | ||||||
|  | export const BASE_URL = `${HTTPS ? "https" : "http"}://${DOMAIN}`; | ||||||
|  |  | ||||||
|  | @ -1,7 +1,7 @@ | ||||||
| import * as crypto from "node:crypto"; | import * as crypto from "node:crypto"; | ||||||
| import * as util from "node:util"; | import { promisify }from "node:util"; | ||||||
| 
 | 
 | ||||||
| const generate = util.promisify(crypto.generateKeyPair); | const generate = promisify(crypto.generateKeyPair); | ||||||
| 
 | 
 | ||||||
| export async function generateKeyPair() { | export async function generateKeyPair() { | ||||||
|   return await generate("rsa", { |   return await generate("rsa", { | ||||||
|  |  | ||||||
							
								
								
									
										31
									
								
								src/routes.ts
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										31
									
								
								src/routes.ts
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,31 @@ | ||||||
|  | import { dirname, join } from "node:path"; | ||||||
|  | import { fileURLToPath } from "node:url"; | ||||||
|  | import { glob } from "glob"; | ||||||
|  | import type { FastifyInstance, RouteOptions } from "fastify"; | ||||||
|  | 
 | ||||||
|  | import log from "./log.js"; | ||||||
|  | 
 | ||||||
|  | export default async function getRoutes() { | ||||||
|  |   const rootDir = dirname(fileURLToPath(import.meta.url)); | ||||||
|  | 
 | ||||||
|  |   const routes: RouteOptions[] = []; | ||||||
|  |   const matches = await glob(join(rootDir, "/routes/**/*.{js,ts}")); | ||||||
|  | 
 | ||||||
|  |   for (const filename of matches) { | ||||||
|  |     try { | ||||||
|  |       const mod = await import(filename); | ||||||
|  |       routes.push(mod.default as RouteOptions); | ||||||
|  |     } catch (e) { | ||||||
|  |       log.error("Importing route %s", filename, e); | ||||||
|  |     } | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|  |   return routes; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | export function mountRoutes(app: FastifyInstance, routes: RouteOptions[]) { | ||||||
|  |   for (const route of routes) { | ||||||
|  |     log.trace("Mounting route %s %s", route.method, route.url); | ||||||
|  |     app.route(route); | ||||||
|  |   } | ||||||
|  | } | ||||||
							
								
								
									
										80
									
								
								src/routes/well-known/webfinger.ts
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										80
									
								
								src/routes/well-known/webfinger.ts
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,80 @@ | ||||||
|  | import type { FastifyReply, FastifyRequest, RouteOptions } from "fastify"; | ||||||
|  | import { IsNull } from "typeorm"; | ||||||
|  | 
 | ||||||
|  | import log from "../../log.js"; | ||||||
|  | import MercuryDataSource from "../../db/index.js"; | ||||||
|  | import { Blog } from "../../db/entities/blog.js"; | ||||||
|  | import { BASE_URL } from "../../config.js"; | ||||||
|  | 
 | ||||||
|  | const route: RouteOptions = { | ||||||
|  |   method: "GET", | ||||||
|  |   url: "/.well-known/webfinger", | ||||||
|  |   handler: async (req, res) => { | ||||||
|  |     // TypeScript complains if we just use plain `req.query` :(
 | ||||||
|  |     const encodedResource = (req.query as { resource: string }).resource; | ||||||
|  | 
 | ||||||
|  |     if (!encodedResource || typeof encodedResource !== "string") { | ||||||
|  |       res.status(400).send({ | ||||||
|  |         error: "resource query parameter is missing or invalid", | ||||||
|  |       }); | ||||||
|  |       return; | ||||||
|  |     } | ||||||
|  |     const resource = decodeURIComponent(encodedResource); | ||||||
|  | 
 | ||||||
|  |     log.debug("Handling WebFinger request for %s", resource); | ||||||
|  | 
 | ||||||
|  |     if (resource.startsWith("acct:")) { | ||||||
|  |       await handleAcctWebfinger(req, res, resource); | ||||||
|  |       return; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     res.status(500).send({ error: "Unhandled WebFinger resource type" }); | ||||||
|  |   }, | ||||||
|  | }; | ||||||
|  | 
 | ||||||
|  | export default route; | ||||||
|  | 
 | ||||||
|  | async function handleAcctWebfinger( | ||||||
|  |   req: FastifyRequest, | ||||||
|  |   res: FastifyReply, | ||||||
|  |   resource: string | ||||||
|  | ): Promise<void> { | ||||||
|  |   const [username, domain] = resource.slice("acct:".length).split("@"); | ||||||
|  |   if (domain !== process.env.DOMAIN) { | ||||||
|  |     res.status(404).send({ | ||||||
|  |       error: "Account not found", | ||||||
|  |     }); | ||||||
|  |     return; | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|  |   const blog = await MercuryDataSource.getRepository(Blog).findOneBy({ | ||||||
|  |     username: username, | ||||||
|  |     host: IsNull(), | ||||||
|  |   }); | ||||||
|  |   if (!blog) { | ||||||
|  |     res.status(404).send({ | ||||||
|  |       error: "Account not found", | ||||||
|  |     }); | ||||||
|  |     return; | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|  |   res.send({ | ||||||
|  |     subject: resource, | ||||||
|  |     aliases: [ | ||||||
|  |       `${BASE_URL}/@${blog.username}`, | ||||||
|  |       `${BASE_URL}/blogs/${blog.username}`, | ||||||
|  |     ], | ||||||
|  |     links: [ | ||||||
|  |       { | ||||||
|  |         rel: "http://webfinger.net/rel/profile-page", | ||||||
|  |         type: "text/html", | ||||||
|  |         href: `${BASE_URL}/@${blog.username}`, | ||||||
|  |       }, | ||||||
|  |       { | ||||||
|  |         rel: "self", | ||||||
|  |         type: "application/activity+json", | ||||||
|  |         href: `${BASE_URL}/blogs/${blog.username}`, | ||||||
|  |       }, | ||||||
|  |     ], | ||||||
|  |   }); | ||||||
|  | } | ||||||
							
								
								
									
										22
									
								
								src/start.ts
									
										
									
									
									
								
							
							
						
						
									
										22
									
								
								src/start.ts
									
										
									
									
									
								
							|  | @ -1,9 +1,10 @@ | ||||||
| import "reflect-metadata"; // Required for TypeORM
 | import "reflect-metadata"; // Required for TypeORM
 | ||||||
| import express from "express"; | import Fastify from "fastify"; | ||||||
|  | 
 | ||||||
| import MercuryDataSource from "./db/index.js"; | import MercuryDataSource from "./db/index.js"; | ||||||
| import log from "./log.js"; | import log from "./log.js"; | ||||||
| import { Blog } from "./db/entities/blog.js"; |  | ||||||
| import { PORT } from "./config.js"; | import { PORT } from "./config.js"; | ||||||
|  | import getRoutes, { mountRoutes } from "./routes.js"; | ||||||
| 
 | 
 | ||||||
| export default async function start() { | export default async function start() { | ||||||
|   log.info("Initializing database"); |   log.info("Initializing database"); | ||||||
|  | @ -17,17 +18,12 @@ export default async function start() { | ||||||
|     return; |     return; | ||||||
|   } |   } | ||||||
| 
 | 
 | ||||||
|   log.debug("Setting up routes") |   log.debug("Setting up routes"); | ||||||
|   const app = express(); |   const app = Fastify(); | ||||||
| 
 | 
 | ||||||
|   app.get("/", async (_, res) => { |   const routes = await getRoutes(); | ||||||
|     const blogRepository = MercuryDataSource.getRepository(Blog); |   mountRoutes(app, routes); | ||||||
| 
 | 
 | ||||||
|     const resp = await blogRepository.find(); |   log.info("Listening on port %d", PORT); | ||||||
| 
 |   await app.listen({ port: PORT }); | ||||||
|     return res.json(resp) |  | ||||||
|   }) |  | ||||||
| 
 |  | ||||||
|   log.info("Listening on port %d", PORT) |  | ||||||
|   app.listen(PORT); |  | ||||||
| } | } | ||||||
|  |  | ||||||
|  | @ -6,8 +6,7 @@ | ||||||
|     "rootDir": "./src", |     "rootDir": "./src", | ||||||
|     "allowJs": true, |     "allowJs": true, | ||||||
|     "checkJs": true, |     "checkJs": true, | ||||||
|     "declaration": true, |     "declaration": false, | ||||||
|     "declarationMap": true, |  | ||||||
|     "sourceMap": true, |     "sourceMap": true, | ||||||
|     "outDir": "./build", |     "outDir": "./build", | ||||||
|     "esModuleInterop": true, |     "esModuleInterop": true, | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue