feat: login by command by web
This commit is contained in:
		
							
								
								
									
										13
									
								
								package.json
									
									
									
									
									
								
							
							
						
						
									
										13
									
								
								package.json
									
									
									
									
									
								
							| @@ -1,6 +1,6 @@ | |||||||
| { | { | ||||||
|   "name": "@kevisual/envision-cli", |   "name": "@kevisual/envision-cli", | ||||||
|   "version": "0.0.22", |   "version": "0.0.23", | ||||||
|   "description": "envision command tools", |   "description": "envision command tools", | ||||||
|   "main": "dist/index.js", |   "main": "dist/index.js", | ||||||
|   "type": "module", |   "type": "module", | ||||||
| @@ -31,7 +31,9 @@ | |||||||
|     "@rollup/plugin-node-resolve": "^16.0.0", |     "@rollup/plugin-node-resolve": "^16.0.0", | ||||||
|     "@rollup/plugin-replace": "^6.0.2", |     "@rollup/plugin-replace": "^6.0.2", | ||||||
|     "@rollup/plugin-typescript": "^12.1.2", |     "@rollup/plugin-typescript": "^12.1.2", | ||||||
|     "@types/node": "^22.13.4", |     "@types/crypto-js": "^4.2.2", | ||||||
|  |     "@types/jsonwebtoken": "^9.0.9", | ||||||
|  |     "@types/node": "^22.13.5", | ||||||
|     "chalk": "^5.4.1", |     "chalk": "^5.4.1", | ||||||
|     "commander": "^13.1.0", |     "commander": "^13.1.0", | ||||||
|     "fast-glob": "^3.3.3", |     "fast-glob": "^3.3.3", | ||||||
| @@ -57,10 +59,13 @@ | |||||||
|     "access": "public" |     "access": "public" | ||||||
|   }, |   }, | ||||||
|   "dependencies": { |   "dependencies": { | ||||||
|     "@kevisual/router": "^0.0.6-alpha-5", |     "@kevisual/load": "^0.0.4", | ||||||
|  |     "@kevisual/router": "^0.0.6", | ||||||
|  |     "crypto-js": "^4.2.0", | ||||||
|  |     "jsonwebtoken": "^9.0.2", | ||||||
|     "pg-hstore": "^2.3.4", |     "pg-hstore": "^2.3.4", | ||||||
|     "sequelize": "^6.37.5", |     "sequelize": "^6.37.5", | ||||||
|     "sqlite3": "^5.1.7", |     "sqlite3": "^5.1.7", | ||||||
|     "vite": "^6.1.0" |     "vite": "^6.2.0" | ||||||
|   } |   } | ||||||
| } | } | ||||||
							
								
								
									
										510
									
								
								pnpm-lock.yaml
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										510
									
								
								pnpm-lock.yaml
									
									
									
										generated
									
									
									
								
							| @@ -11,9 +11,18 @@ importers: | |||||||
|  |  | ||||||
|   .: |   .: | ||||||
|     dependencies: |     dependencies: | ||||||
|  |       '@kevisual/load': | ||||||
|  |         specifier: ^0.0.4 | ||||||
|  |         version: 0.0.4 | ||||||
|       '@kevisual/router': |       '@kevisual/router': | ||||||
|         specifier: ^0.0.6-alpha-5 |         specifier: ^0.0.6 | ||||||
|         version: 0.0.6-alpha-5 |         version: 0.0.6 | ||||||
|  |       crypto-js: | ||||||
|  |         specifier: ^4.2.0 | ||||||
|  |         version: 4.2.0 | ||||||
|  |       jsonwebtoken: | ||||||
|  |         specifier: ^9.0.2 | ||||||
|  |         version: 9.0.2 | ||||||
|       pg-hstore: |       pg-hstore: | ||||||
|         specifier: ^2.3.4 |         specifier: ^2.3.4 | ||||||
|         version: 2.3.4 |         version: 2.3.4 | ||||||
| @@ -24,8 +33,8 @@ importers: | |||||||
|         specifier: ^5.1.7 |         specifier: ^5.1.7 | ||||||
|         version: 5.1.7 |         version: 5.1.7 | ||||||
|       vite: |       vite: | ||||||
|         specifier: ^6.1.0 |         specifier: ^6.2.0 | ||||||
|         version: 6.1.0(@types/node@22.13.4) |         version: 6.2.0(@types/node@22.13.5) | ||||||
|     devDependencies: |     devDependencies: | ||||||
|       '@kevisual/query': |       '@kevisual/query': | ||||||
|         specifier: 0.0.7-alpha.3 |         specifier: 0.0.7-alpha.3 | ||||||
| @@ -48,9 +57,15 @@ importers: | |||||||
|       '@rollup/plugin-typescript': |       '@rollup/plugin-typescript': | ||||||
|         specifier: ^12.1.2 |         specifier: ^12.1.2 | ||||||
|         version: 12.1.2(rollup@4.34.8)(tslib@2.8.1)(typescript@5.7.3) |         version: 12.1.2(rollup@4.34.8)(tslib@2.8.1)(typescript@5.7.3) | ||||||
|  |       '@types/crypto-js': | ||||||
|  |         specifier: ^4.2.2 | ||||||
|  |         version: 4.2.2 | ||||||
|  |       '@types/jsonwebtoken': | ||||||
|  |         specifier: ^9.0.9 | ||||||
|  |         version: 9.0.9 | ||||||
|       '@types/node': |       '@types/node': | ||||||
|         specifier: ^22.13.4 |         specifier: ^22.13.5 | ||||||
|         version: 22.13.4 |         version: 22.13.5 | ||||||
|       chalk: |       chalk: | ||||||
|         specifier: ^5.4.1 |         specifier: ^5.4.1 | ||||||
|         version: 5.4.1 |         version: 5.4.1 | ||||||
| @@ -71,7 +86,7 @@ importers: | |||||||
|         version: 7.0.3 |         version: 7.0.3 | ||||||
|       inquirer: |       inquirer: | ||||||
|         specifier: ^12.4.2 |         specifier: ^12.4.2 | ||||||
|         version: 12.4.2(@types/node@22.13.4) |         version: 12.4.2(@types/node@22.13.5) | ||||||
|       rimraf: |       rimraf: | ||||||
|         specifier: ^6.0.1 |         specifier: ^6.0.1 | ||||||
|         version: 6.0.1 |         version: 6.0.1 | ||||||
| @@ -83,7 +98,7 @@ importers: | |||||||
|         version: 6.1.1(rollup@4.34.8)(typescript@5.7.3) |         version: 6.1.1(rollup@4.34.8)(typescript@5.7.3) | ||||||
|       rollup-plugin-esbuild: |       rollup-plugin-esbuild: | ||||||
|         specifier: ^6.2.0 |         specifier: ^6.2.0 | ||||||
|         version: 6.2.0(esbuild@0.24.2)(rollup@4.34.8) |         version: 6.2.0(esbuild@0.25.0)(rollup@4.34.8) | ||||||
|       tar: |       tar: | ||||||
|         specifier: ^7.4.3 |         specifier: ^7.4.3 | ||||||
|         version: 7.4.3 |         version: 7.4.3 | ||||||
| @@ -104,152 +119,152 @@ packages: | |||||||
|     resolution: {integrity: sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==} |     resolution: {integrity: sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==} | ||||||
|     engines: {node: '>=6.9.0'} |     engines: {node: '>=6.9.0'} | ||||||
|  |  | ||||||
|   '@esbuild/aix-ppc64@0.24.2': |   '@esbuild/aix-ppc64@0.25.0': | ||||||
|     resolution: {integrity: sha512-thpVCb/rhxE/BnMLQ7GReQLLN8q9qbHmI55F4489/ByVg2aQaQ6kbcLb6FHkocZzQhxc4gx0sCk0tJkKBFzDhA==} |     resolution: {integrity: sha512-O7vun9Sf8DFjH2UtqK8Ku3LkquL9SZL8OLY1T5NZkA34+wG3OQF7cl4Ql8vdNzM6fzBbYfLaiRLIOZ+2FOCgBQ==} | ||||||
|     engines: {node: '>=18'} |     engines: {node: '>=18'} | ||||||
|     cpu: [ppc64] |     cpu: [ppc64] | ||||||
|     os: [aix] |     os: [aix] | ||||||
|  |  | ||||||
|   '@esbuild/android-arm64@0.24.2': |   '@esbuild/android-arm64@0.25.0': | ||||||
|     resolution: {integrity: sha512-cNLgeqCqV8WxfcTIOeL4OAtSmL8JjcN6m09XIgro1Wi7cF4t/THaWEa7eL5CMoMBdjoHOTh/vwTO/o2TRXIyzg==} |     resolution: {integrity: sha512-grvv8WncGjDSyUBjN9yHXNt+cq0snxXbDxy5pJtzMKGmmpPxeAmAhWxXI+01lU5rwZomDgD3kJwulEnhTRUd6g==} | ||||||
|     engines: {node: '>=18'} |     engines: {node: '>=18'} | ||||||
|     cpu: [arm64] |     cpu: [arm64] | ||||||
|     os: [android] |     os: [android] | ||||||
|  |  | ||||||
|   '@esbuild/android-arm@0.24.2': |   '@esbuild/android-arm@0.25.0': | ||||||
|     resolution: {integrity: sha512-tmwl4hJkCfNHwFB3nBa8z1Uy3ypZpxqxfTQOcHX+xRByyYgunVbZ9MzUUfb0RxaHIMnbHagwAxuTL+tnNM+1/Q==} |     resolution: {integrity: sha512-PTyWCYYiU0+1eJKmw21lWtC+d08JDZPQ5g+kFyxP0V+es6VPPSUhM6zk8iImp2jbV6GwjX4pap0JFbUQN65X1g==} | ||||||
|     engines: {node: '>=18'} |     engines: {node: '>=18'} | ||||||
|     cpu: [arm] |     cpu: [arm] | ||||||
|     os: [android] |     os: [android] | ||||||
|  |  | ||||||
|   '@esbuild/android-x64@0.24.2': |   '@esbuild/android-x64@0.25.0': | ||||||
|     resolution: {integrity: sha512-B6Q0YQDqMx9D7rvIcsXfmJfvUYLoP722bgfBlO5cGvNVb5V/+Y7nhBE3mHV9OpxBf4eAS2S68KZztiPaWq4XYw==} |     resolution: {integrity: sha512-m/ix7SfKG5buCnxasr52+LI78SQ+wgdENi9CqyCXwjVR2X4Jkz+BpC3le3AoBPYTC9NHklwngVXvbJ9/Akhrfg==} | ||||||
|     engines: {node: '>=18'} |     engines: {node: '>=18'} | ||||||
|     cpu: [x64] |     cpu: [x64] | ||||||
|     os: [android] |     os: [android] | ||||||
|  |  | ||||||
|   '@esbuild/darwin-arm64@0.24.2': |   '@esbuild/darwin-arm64@0.25.0': | ||||||
|     resolution: {integrity: sha512-kj3AnYWc+CekmZnS5IPu9D+HWtUI49hbnyqk0FLEJDbzCIQt7hg7ucF1SQAilhtYpIujfaHr6O0UHlzzSPdOeA==} |     resolution: {integrity: sha512-mVwdUb5SRkPayVadIOI78K7aAnPamoeFR2bT5nszFUZ9P8UpK4ratOdYbZZXYSqPKMHfS1wdHCJk1P1EZpRdvw==} | ||||||
|     engines: {node: '>=18'} |     engines: {node: '>=18'} | ||||||
|     cpu: [arm64] |     cpu: [arm64] | ||||||
|     os: [darwin] |     os: [darwin] | ||||||
|  |  | ||||||
|   '@esbuild/darwin-x64@0.24.2': |   '@esbuild/darwin-x64@0.25.0': | ||||||
|     resolution: {integrity: sha512-WeSrmwwHaPkNR5H3yYfowhZcbriGqooyu3zI/3GGpF8AyUdsrrP0X6KumITGA9WOyiJavnGZUwPGvxvwfWPHIA==} |     resolution: {integrity: sha512-DgDaYsPWFTS4S3nWpFcMn/33ZZwAAeAFKNHNa1QN0rI4pUjgqf0f7ONmXf6d22tqTY+H9FNdgeaAa+YIFUn2Rg==} | ||||||
|     engines: {node: '>=18'} |     engines: {node: '>=18'} | ||||||
|     cpu: [x64] |     cpu: [x64] | ||||||
|     os: [darwin] |     os: [darwin] | ||||||
|  |  | ||||||
|   '@esbuild/freebsd-arm64@0.24.2': |   '@esbuild/freebsd-arm64@0.25.0': | ||||||
|     resolution: {integrity: sha512-UN8HXjtJ0k/Mj6a9+5u6+2eZ2ERD7Edt1Q9IZiB5UZAIdPnVKDoG7mdTVGhHJIeEml60JteamR3qhsr1r8gXvg==} |     resolution: {integrity: sha512-VN4ocxy6dxefN1MepBx/iD1dH5K8qNtNe227I0mnTRjry8tj5MRk4zprLEdG8WPyAPb93/e4pSgi1SoHdgOa4w==} | ||||||
|     engines: {node: '>=18'} |     engines: {node: '>=18'} | ||||||
|     cpu: [arm64] |     cpu: [arm64] | ||||||
|     os: [freebsd] |     os: [freebsd] | ||||||
|  |  | ||||||
|   '@esbuild/freebsd-x64@0.24.2': |   '@esbuild/freebsd-x64@0.25.0': | ||||||
|     resolution: {integrity: sha512-TvW7wE/89PYW+IevEJXZ5sF6gJRDY/14hyIGFXdIucxCsbRmLUcjseQu1SyTko+2idmCw94TgyaEZi9HUSOe3Q==} |     resolution: {integrity: sha512-mrSgt7lCh07FY+hDD1TxiTyIHyttn6vnjesnPoVDNmDfOmggTLXRv8Id5fNZey1gl/V2dyVK1VXXqVsQIiAk+A==} | ||||||
|     engines: {node: '>=18'} |     engines: {node: '>=18'} | ||||||
|     cpu: [x64] |     cpu: [x64] | ||||||
|     os: [freebsd] |     os: [freebsd] | ||||||
|  |  | ||||||
|   '@esbuild/linux-arm64@0.24.2': |   '@esbuild/linux-arm64@0.25.0': | ||||||
|     resolution: {integrity: sha512-7HnAD6074BW43YvvUmE/35Id9/NB7BeX5EoNkK9obndmZBUk8xmJJeU7DwmUeN7tkysslb2eSl6CTrYz6oEMQg==} |     resolution: {integrity: sha512-9QAQjTWNDM/Vk2bgBl17yWuZxZNQIF0OUUuPZRKoDtqF2k4EtYbpyiG5/Dk7nqeK6kIJWPYldkOcBqjXjrUlmg==} | ||||||
|     engines: {node: '>=18'} |     engines: {node: '>=18'} | ||||||
|     cpu: [arm64] |     cpu: [arm64] | ||||||
|     os: [linux] |     os: [linux] | ||||||
|  |  | ||||||
|   '@esbuild/linux-arm@0.24.2': |   '@esbuild/linux-arm@0.25.0': | ||||||
|     resolution: {integrity: sha512-n0WRM/gWIdU29J57hJyUdIsk0WarGd6To0s+Y+LwvlC55wt+GT/OgkwoXCXvIue1i1sSNWblHEig00GBWiJgfA==} |     resolution: {integrity: sha512-vkB3IYj2IDo3g9xX7HqhPYxVkNQe8qTK55fraQyTzTX/fxaDtXiEnavv9geOsonh2Fd2RMB+i5cbhu2zMNWJwg==} | ||||||
|     engines: {node: '>=18'} |     engines: {node: '>=18'} | ||||||
|     cpu: [arm] |     cpu: [arm] | ||||||
|     os: [linux] |     os: [linux] | ||||||
|  |  | ||||||
|   '@esbuild/linux-ia32@0.24.2': |   '@esbuild/linux-ia32@0.25.0': | ||||||
|     resolution: {integrity: sha512-sfv0tGPQhcZOgTKO3oBE9xpHuUqguHvSo4jl+wjnKwFpapx+vUDcawbwPNuBIAYdRAvIDBfZVvXprIj3HA+Ugw==} |     resolution: {integrity: sha512-43ET5bHbphBegyeqLb7I1eYn2P/JYGNmzzdidq/w0T8E2SsYL1U6un2NFROFRg1JZLTzdCoRomg8Rvf9M6W6Gg==} | ||||||
|     engines: {node: '>=18'} |     engines: {node: '>=18'} | ||||||
|     cpu: [ia32] |     cpu: [ia32] | ||||||
|     os: [linux] |     os: [linux] | ||||||
|  |  | ||||||
|   '@esbuild/linux-loong64@0.24.2': |   '@esbuild/linux-loong64@0.25.0': | ||||||
|     resolution: {integrity: sha512-CN9AZr8kEndGooS35ntToZLTQLHEjtVB5n7dl8ZcTZMonJ7CCfStrYhrzF97eAecqVbVJ7APOEe18RPI4KLhwQ==} |     resolution: {integrity: sha512-fC95c/xyNFueMhClxJmeRIj2yrSMdDfmqJnyOY4ZqsALkDrrKJfIg5NTMSzVBr5YW1jf+l7/cndBfP3MSDpoHw==} | ||||||
|     engines: {node: '>=18'} |     engines: {node: '>=18'} | ||||||
|     cpu: [loong64] |     cpu: [loong64] | ||||||
|     os: [linux] |     os: [linux] | ||||||
|  |  | ||||||
|   '@esbuild/linux-mips64el@0.24.2': |   '@esbuild/linux-mips64el@0.25.0': | ||||||
|     resolution: {integrity: sha512-iMkk7qr/wl3exJATwkISxI7kTcmHKE+BlymIAbHO8xanq/TjHaaVThFF6ipWzPHryoFsesNQJPE/3wFJw4+huw==} |     resolution: {integrity: sha512-nkAMFju7KDW73T1DdH7glcyIptm95a7Le8irTQNO/qtkoyypZAnjchQgooFUDQhNAy4iu08N79W4T4pMBwhPwQ==} | ||||||
|     engines: {node: '>=18'} |     engines: {node: '>=18'} | ||||||
|     cpu: [mips64el] |     cpu: [mips64el] | ||||||
|     os: [linux] |     os: [linux] | ||||||
|  |  | ||||||
|   '@esbuild/linux-ppc64@0.24.2': |   '@esbuild/linux-ppc64@0.25.0': | ||||||
|     resolution: {integrity: sha512-shsVrgCZ57Vr2L8mm39kO5PPIb+843FStGt7sGGoqiiWYconSxwTiuswC1VJZLCjNiMLAMh34jg4VSEQb+iEbw==} |     resolution: {integrity: sha512-NhyOejdhRGS8Iwv+KKR2zTq2PpysF9XqY+Zk77vQHqNbo/PwZCzB5/h7VGuREZm1fixhs4Q/qWRSi5zmAiO4Fw==} | ||||||
|     engines: {node: '>=18'} |     engines: {node: '>=18'} | ||||||
|     cpu: [ppc64] |     cpu: [ppc64] | ||||||
|     os: [linux] |     os: [linux] | ||||||
|  |  | ||||||
|   '@esbuild/linux-riscv64@0.24.2': |   '@esbuild/linux-riscv64@0.25.0': | ||||||
|     resolution: {integrity: sha512-4eSFWnU9Hhd68fW16GD0TINewo1L6dRrB+oLNNbYyMUAeOD2yCK5KXGK1GH4qD/kT+bTEXjsyTCiJGHPZ3eM9Q==} |     resolution: {integrity: sha512-5S/rbP5OY+GHLC5qXp1y/Mx//e92L1YDqkiBbO9TQOvuFXM+iDqUNG5XopAnXoRH3FjIUDkeGcY1cgNvnXp/kA==} | ||||||
|     engines: {node: '>=18'} |     engines: {node: '>=18'} | ||||||
|     cpu: [riscv64] |     cpu: [riscv64] | ||||||
|     os: [linux] |     os: [linux] | ||||||
|  |  | ||||||
|   '@esbuild/linux-s390x@0.24.2': |   '@esbuild/linux-s390x@0.25.0': | ||||||
|     resolution: {integrity: sha512-S0Bh0A53b0YHL2XEXC20bHLuGMOhFDO6GN4b3YjRLK//Ep3ql3erpNcPlEFed93hsQAjAQDNsvcK+hV90FubSw==} |     resolution: {integrity: sha512-XM2BFsEBz0Fw37V0zU4CXfcfuACMrppsMFKdYY2WuTS3yi8O1nFOhil/xhKTmE1nPmVyvQJjJivgDT+xh8pXJA==} | ||||||
|     engines: {node: '>=18'} |     engines: {node: '>=18'} | ||||||
|     cpu: [s390x] |     cpu: [s390x] | ||||||
|     os: [linux] |     os: [linux] | ||||||
|  |  | ||||||
|   '@esbuild/linux-x64@0.24.2': |   '@esbuild/linux-x64@0.25.0': | ||||||
|     resolution: {integrity: sha512-8Qi4nQcCTbLnK9WoMjdC9NiTG6/E38RNICU6sUNqK0QFxCYgoARqVqxdFmWkdonVsvGqWhmm7MO0jyTqLqwj0Q==} |     resolution: {integrity: sha512-9yl91rHw/cpwMCNytUDxwj2XjFpxML0y9HAOH9pNVQDpQrBxHy01Dx+vaMu0N1CKa/RzBD2hB4u//nfc+Sd3Cw==} | ||||||
|     engines: {node: '>=18'} |     engines: {node: '>=18'} | ||||||
|     cpu: [x64] |     cpu: [x64] | ||||||
|     os: [linux] |     os: [linux] | ||||||
|  |  | ||||||
|   '@esbuild/netbsd-arm64@0.24.2': |   '@esbuild/netbsd-arm64@0.25.0': | ||||||
|     resolution: {integrity: sha512-wuLK/VztRRpMt9zyHSazyCVdCXlpHkKm34WUyinD2lzK07FAHTq0KQvZZlXikNWkDGoT6x3TD51jKQ7gMVpopw==} |     resolution: {integrity: sha512-RuG4PSMPFfrkH6UwCAqBzauBWTygTvb1nxWasEJooGSJ/NwRw7b2HOwyRTQIU97Hq37l3npXoZGYMy3b3xYvPw==} | ||||||
|     engines: {node: '>=18'} |     engines: {node: '>=18'} | ||||||
|     cpu: [arm64] |     cpu: [arm64] | ||||||
|     os: [netbsd] |     os: [netbsd] | ||||||
|  |  | ||||||
|   '@esbuild/netbsd-x64@0.24.2': |   '@esbuild/netbsd-x64@0.25.0': | ||||||
|     resolution: {integrity: sha512-VefFaQUc4FMmJuAxmIHgUmfNiLXY438XrL4GDNV1Y1H/RW3qow68xTwjZKfj/+Plp9NANmzbH5R40Meudu8mmw==} |     resolution: {integrity: sha512-jl+qisSB5jk01N5f7sPCsBENCOlPiS/xptD5yxOx2oqQfyourJwIKLRA2yqWdifj3owQZCL2sn6o08dBzZGQzA==} | ||||||
|     engines: {node: '>=18'} |     engines: {node: '>=18'} | ||||||
|     cpu: [x64] |     cpu: [x64] | ||||||
|     os: [netbsd] |     os: [netbsd] | ||||||
|  |  | ||||||
|   '@esbuild/openbsd-arm64@0.24.2': |   '@esbuild/openbsd-arm64@0.25.0': | ||||||
|     resolution: {integrity: sha512-YQbi46SBct6iKnszhSvdluqDmxCJA+Pu280Av9WICNwQmMxV7nLRHZfjQzwbPs3jeWnuAhE9Jy0NrnJ12Oz+0A==} |     resolution: {integrity: sha512-21sUNbq2r84YE+SJDfaQRvdgznTD8Xc0oc3p3iW/a1EVWeNj/SdUCbm5U0itZPQYRuRTW20fPMWMpcrciH2EJw==} | ||||||
|     engines: {node: '>=18'} |     engines: {node: '>=18'} | ||||||
|     cpu: [arm64] |     cpu: [arm64] | ||||||
|     os: [openbsd] |     os: [openbsd] | ||||||
|  |  | ||||||
|   '@esbuild/openbsd-x64@0.24.2': |   '@esbuild/openbsd-x64@0.25.0': | ||||||
|     resolution: {integrity: sha512-+iDS6zpNM6EnJyWv0bMGLWSWeXGN/HTaF/LXHXHwejGsVi+ooqDfMCCTerNFxEkM3wYVcExkeGXNqshc9iMaOA==} |     resolution: {integrity: sha512-2gwwriSMPcCFRlPlKx3zLQhfN/2WjJ2NSlg5TKLQOJdV0mSxIcYNTMhk3H3ulL/cak+Xj0lY1Ym9ysDV1igceg==} | ||||||
|     engines: {node: '>=18'} |     engines: {node: '>=18'} | ||||||
|     cpu: [x64] |     cpu: [x64] | ||||||
|     os: [openbsd] |     os: [openbsd] | ||||||
|  |  | ||||||
|   '@esbuild/sunos-x64@0.24.2': |   '@esbuild/sunos-x64@0.25.0': | ||||||
|     resolution: {integrity: sha512-hTdsW27jcktEvpwNHJU4ZwWFGkz2zRJUz8pvddmXPtXDzVKTTINmlmga3ZzwcuMpUvLw7JkLy9QLKyGpD2Yxig==} |     resolution: {integrity: sha512-bxI7ThgLzPrPz484/S9jLlvUAHYMzy6I0XiU1ZMeAEOBcS0VePBFxh1JjTQt3Xiat5b6Oh4x7UC7IwKQKIJRIg==} | ||||||
|     engines: {node: '>=18'} |     engines: {node: '>=18'} | ||||||
|     cpu: [x64] |     cpu: [x64] | ||||||
|     os: [sunos] |     os: [sunos] | ||||||
|  |  | ||||||
|   '@esbuild/win32-arm64@0.24.2': |   '@esbuild/win32-arm64@0.25.0': | ||||||
|     resolution: {integrity: sha512-LihEQ2BBKVFLOC9ZItT9iFprsE9tqjDjnbulhHoFxYQtQfai7qfluVODIYxt1PgdoyQkz23+01rzwNwYfutxUQ==} |     resolution: {integrity: sha512-ZUAc2YK6JW89xTbXvftxdnYy3m4iHIkDtK3CLce8wg8M2L+YZhIvO1DKpxrd0Yr59AeNNkTiic9YLf6FTtXWMw==} | ||||||
|     engines: {node: '>=18'} |     engines: {node: '>=18'} | ||||||
|     cpu: [arm64] |     cpu: [arm64] | ||||||
|     os: [win32] |     os: [win32] | ||||||
|  |  | ||||||
|   '@esbuild/win32-ia32@0.24.2': |   '@esbuild/win32-ia32@0.25.0': | ||||||
|     resolution: {integrity: sha512-q+iGUwfs8tncmFC9pcnD5IvRHAzmbwQ3GPS5/ceCyHdjXubwQWI12MKWSNSMYLJMq23/IUCvJMS76PDqXe1fxA==} |     resolution: {integrity: sha512-eSNxISBu8XweVEWG31/JzjkIGbGIJN/TrRoiSVZwZ6pkC6VX4Im/WV2cz559/TXLcYbcrDN8JtKgd9DJVIo8GA==} | ||||||
|     engines: {node: '>=18'} |     engines: {node: '>=18'} | ||||||
|     cpu: [ia32] |     cpu: [ia32] | ||||||
|     os: [win32] |     os: [win32] | ||||||
|  |  | ||||||
|   '@esbuild/win32-x64@0.24.2': |   '@esbuild/win32-x64@0.25.0': | ||||||
|     resolution: {integrity: sha512-7VTgWzgMGvup6aSqDPLiW5zHaxYJGTO4OokMjIlrCtf+VpEL+cXKtCvg723iguPYI5oaUNdS+/V7OU2gvXVWEg==} |     resolution: {integrity: sha512-ZENoHJBxA20C2zFzh6AI4fT6RraMzjYw4xKWemRTRmRVtN9c5DcH9r/f2ihEkMjOW5eGgrwCslG/+Y/3bL+DHQ==} | ||||||
|     engines: {node: '>=18'} |     engines: {node: '>=18'} | ||||||
|     cpu: [x64] |     cpu: [x64] | ||||||
|     os: [win32] |     os: [win32] | ||||||
| @@ -389,11 +404,14 @@ packages: | |||||||
|   '@jridgewell/sourcemap-codec@1.5.0': |   '@jridgewell/sourcemap-codec@1.5.0': | ||||||
|     resolution: {integrity: sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==} |     resolution: {integrity: sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==} | ||||||
|  |  | ||||||
|  |   '@kevisual/load@0.0.4': | ||||||
|  |     resolution: {integrity: sha512-TJBieKsEoEPfP4+tDyhNZdMX2LMAGiDZ/IrAXPFWB4jeFP0Ywm1W5xDV52LhhHq4nwTmuhyTVmPxJYiEVYTHtA==} | ||||||
|  |  | ||||||
|   '@kevisual/query@0.0.7-alpha.3': |   '@kevisual/query@0.0.7-alpha.3': | ||||||
|     resolution: {integrity: sha512-zNTIbyU87dlp8ZeLvPoc1ou7cZCL60to4xptyMD3VKsldL/dDSAMf7JWwUivNiq9lRxk9KVEZA7YX558mzeQcw==} |     resolution: {integrity: sha512-zNTIbyU87dlp8ZeLvPoc1ou7cZCL60to4xptyMD3VKsldL/dDSAMf7JWwUivNiq9lRxk9KVEZA7YX558mzeQcw==} | ||||||
|  |  | ||||||
|   '@kevisual/router@0.0.6-alpha-5': |   '@kevisual/router@0.0.6': | ||||||
|     resolution: {integrity: sha512-YT9cxzzFKjWyE05MYlvhuAp16ymgmwThSMHrr2PNbmnZiYgUqm3O4j8cny40lOhZB4Jy/4nQb9Ql2laL+mZ4zg==} |     resolution: {integrity: sha512-7FQUY87Zy5A4V30OAggRbGpO/Asd7SUpnhHv8mlxnSFFTto25xpXmjHYp12mu/HJTsHM7RTaxVEyD1DeP44D2A==} | ||||||
|  |  | ||||||
|   '@nodelib/fs.scandir@2.1.5': |   '@nodelib/fs.scandir@2.1.5': | ||||||
|     resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} |     resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} | ||||||
| @@ -595,20 +613,26 @@ packages: | |||||||
|     resolution: {integrity: sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==} |     resolution: {integrity: sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==} | ||||||
|     engines: {node: '>= 6'} |     engines: {node: '>= 6'} | ||||||
|  |  | ||||||
|  |   '@types/crypto-js@4.2.2': | ||||||
|  |     resolution: {integrity: sha512-sDOLlVbHhXpAUAL0YHDUUwDZf3iN4Bwi4W6a0W0b+QcAezUbRtH4FVb+9J4h+XFPW7l/gQ9F8qC7P+Ec4k8QVQ==} | ||||||
|  |  | ||||||
|   '@types/debug@4.1.12': |   '@types/debug@4.1.12': | ||||||
|     resolution: {integrity: sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==} |     resolution: {integrity: sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==} | ||||||
|  |  | ||||||
|   '@types/estree@1.0.6': |   '@types/estree@1.0.6': | ||||||
|     resolution: {integrity: sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==} |     resolution: {integrity: sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==} | ||||||
|  |  | ||||||
|  |   '@types/jsonwebtoken@9.0.9': | ||||||
|  |     resolution: {integrity: sha512-uoe+GxEuHbvy12OUQct2X9JenKM3qAscquYymuQN4fMWG9DBQtykrQEFcAbVACF7qaLw9BePSodUL0kquqBJpQ==} | ||||||
|  |  | ||||||
|   '@types/ms@0.7.34': |   '@types/ms@0.7.34': | ||||||
|     resolution: {integrity: sha512-nG96G3Wp6acyAgJqGasjODb+acrI7KltPiRxzHPXnP3NgI28bpQDRv53olbqGXbfcgF5aiiHmO3xpwEpS5Ld9g==} |     resolution: {integrity: sha512-nG96G3Wp6acyAgJqGasjODb+acrI7KltPiRxzHPXnP3NgI28bpQDRv53olbqGXbfcgF5aiiHmO3xpwEpS5Ld9g==} | ||||||
|  |  | ||||||
|   '@types/node-forge@1.3.11': |   '@types/node-forge@1.3.11': | ||||||
|     resolution: {integrity: sha512-FQx220y22OKNTqaByeBGqHWYz4cl94tpcxeFdvBo3wjG6XPBuZ0BNgNZRV5J5TFmmcsJ4IzsLkmGRiQbnYsBEQ==} |     resolution: {integrity: sha512-FQx220y22OKNTqaByeBGqHWYz4cl94tpcxeFdvBo3wjG6XPBuZ0BNgNZRV5J5TFmmcsJ4IzsLkmGRiQbnYsBEQ==} | ||||||
|  |  | ||||||
|   '@types/node@22.13.4': |   '@types/node@22.13.5': | ||||||
|     resolution: {integrity: sha512-ywP2X0DYtX3y08eFVx5fNIw7/uIv8hYUKgXoK8oayJlLnKcRfEYCxWMVE1XagUdVtCJlZT1AU4LXEABW+L1Peg==} |     resolution: {integrity: sha512-+lTU0PxZXn0Dr1NBtC7Y8cR21AJr87dLLU953CWA6pMxxv/UDc7jYAY90upcrie1nRcD6XNG5HOYEDtgW5TxAg==} | ||||||
|  |  | ||||||
|   '@types/resolve@1.20.2': |   '@types/resolve@1.20.2': | ||||||
|     resolution: {integrity: sha512-60BCwRFOZCQhDncwQdxxeOEEkbc5dIMccYLwbxsS4TUNeVECQ/pBJ0j09mrHOl/JJvpRPGwO9SvE4nR2Nb/a4Q==} |     resolution: {integrity: sha512-60BCwRFOZCQhDncwQdxxeOEEkbc5dIMccYLwbxsS4TUNeVECQ/pBJ0j09mrHOl/JJvpRPGwO9SvE4nR2Nb/a4Q==} | ||||||
| @@ -684,6 +708,9 @@ packages: | |||||||
|     resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} |     resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} | ||||||
|     engines: {node: '>=8'} |     engines: {node: '>=8'} | ||||||
|  |  | ||||||
|  |   buffer-equal-constant-time@1.0.1: | ||||||
|  |     resolution: {integrity: sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==} | ||||||
|  |  | ||||||
|   buffer@5.7.1: |   buffer@5.7.1: | ||||||
|     resolution: {integrity: sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==} |     resolution: {integrity: sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==} | ||||||
|  |  | ||||||
| @@ -753,6 +780,9 @@ packages: | |||||||
|     resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==} |     resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==} | ||||||
|     engines: {node: '>= 8'} |     engines: {node: '>= 8'} | ||||||
|  |  | ||||||
|  |   crypto-js@4.2.0: | ||||||
|  |     resolution: {integrity: sha512-KALDyEYgpY+Rlob/iriUtjV6d5Eq+Y191A5g4UqLAi8CyGP9N1+FdVbkc1SxKc2r4YAYqG8JzO2KGL+AizD70Q==} | ||||||
|  |  | ||||||
|   debug@4.3.7: |   debug@4.3.7: | ||||||
|     resolution: {integrity: sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==} |     resolution: {integrity: sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==} | ||||||
|     engines: {node: '>=6.0'} |     engines: {node: '>=6.0'} | ||||||
| @@ -804,6 +834,9 @@ packages: | |||||||
|   eastasianwidth@0.2.0: |   eastasianwidth@0.2.0: | ||||||
|     resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} |     resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} | ||||||
|  |  | ||||||
|  |   ecdsa-sig-formatter@1.0.11: | ||||||
|  |     resolution: {integrity: sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==} | ||||||
|  |  | ||||||
|   emoji-regex@8.0.0: |   emoji-regex@8.0.0: | ||||||
|     resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} |     resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} | ||||||
|  |  | ||||||
| @@ -842,14 +875,17 @@ packages: | |||||||
|     resolution: {integrity: sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==} |     resolution: {integrity: sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==} | ||||||
|     engines: {node: '>= 0.4'} |     engines: {node: '>= 0.4'} | ||||||
|  |  | ||||||
|   esbuild@0.24.2: |   esbuild@0.25.0: | ||||||
|     resolution: {integrity: sha512-+9egpBW8I3CD5XPe0n6BfT5fxLzxrlDzqydF3aviG+9ni1lDC/OvMHcxqEFV0+LANZG5R1bFMWfUrjVsdwxJvA==} |     resolution: {integrity: sha512-BXq5mqc8ltbaN34cDqWuYKyNhX8D/Z0J1xdtdQ8UcIIIyJyz+ZMKUt58tF3SrZ85jcfN/PZYhjR5uDQAYNVbuw==} | ||||||
|     engines: {node: '>=18'} |     engines: {node: '>=18'} | ||||||
|     hasBin: true |     hasBin: true | ||||||
|  |  | ||||||
|   estree-walker@2.0.2: |   estree-walker@2.0.2: | ||||||
|     resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==} |     resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==} | ||||||
|  |  | ||||||
|  |   eventemitter3@5.0.1: | ||||||
|  |     resolution: {integrity: sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==} | ||||||
|  |  | ||||||
|   expand-template@2.0.3: |   expand-template@2.0.3: | ||||||
|     resolution: {integrity: sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==} |     resolution: {integrity: sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==} | ||||||
|     engines: {node: '>=6'} |     engines: {node: '>=6'} | ||||||
| @@ -1080,6 +1116,37 @@ packages: | |||||||
|   jsbn@1.1.0: |   jsbn@1.1.0: | ||||||
|     resolution: {integrity: sha512-4bYVV3aAMtDTTu4+xsDYa6sy9GyJ69/amsu9sYF2zqjiEoZA5xJi3BrfX3uY+/IekIu7MwdObdbDWpoZdBv3/A==} |     resolution: {integrity: sha512-4bYVV3aAMtDTTu4+xsDYa6sy9GyJ69/amsu9sYF2zqjiEoZA5xJi3BrfX3uY+/IekIu7MwdObdbDWpoZdBv3/A==} | ||||||
|  |  | ||||||
|  |   jsonwebtoken@9.0.2: | ||||||
|  |     resolution: {integrity: sha512-PRp66vJ865SSqOlgqS8hujT5U4AOgMfhrwYIuIhfKaoSCZcirrmASQr8CX7cUg+RMih+hgznrjp99o+W4pJLHQ==} | ||||||
|  |     engines: {node: '>=12', npm: '>=6'} | ||||||
|  |  | ||||||
|  |   jwa@1.4.1: | ||||||
|  |     resolution: {integrity: sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA==} | ||||||
|  |  | ||||||
|  |   jws@3.2.2: | ||||||
|  |     resolution: {integrity: sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==} | ||||||
|  |  | ||||||
|  |   lodash.includes@4.3.0: | ||||||
|  |     resolution: {integrity: sha512-W3Bx6mdkRTGtlJISOvVD/lbqjTlPPUDTMnlXZFnVwi9NKJ6tiAk6LVdlhZMm17VZisqhKcgzpO5Wz91PCt5b0w==} | ||||||
|  |  | ||||||
|  |   lodash.isboolean@3.0.3: | ||||||
|  |     resolution: {integrity: sha512-Bz5mupy2SVbPHURB98VAcw+aHh4vRV5IPNhILUCsOzRmsTmSQ17jIuqopAentWoehktxGd9e/hbIXq980/1QJg==} | ||||||
|  |  | ||||||
|  |   lodash.isinteger@4.0.4: | ||||||
|  |     resolution: {integrity: sha512-DBwtEWN2caHQ9/imiNeEA5ys1JoRtRfY3d7V9wkqtbycnAmTvRRmbHKDV4a0EYc678/dia0jrte4tjYwVBaZUA==} | ||||||
|  |  | ||||||
|  |   lodash.isnumber@3.0.3: | ||||||
|  |     resolution: {integrity: sha512-QYqzpfwO3/CWf3XP+Z+tkQsfaLL/EnUlXWVkIk5FUPc4sBdTehEqZONuyRt2P67PXAk+NXmTBcc97zw9t1FQrw==} | ||||||
|  |  | ||||||
|  |   lodash.isplainobject@4.0.6: | ||||||
|  |     resolution: {integrity: sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==} | ||||||
|  |  | ||||||
|  |   lodash.isstring@4.0.1: | ||||||
|  |     resolution: {integrity: sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw==} | ||||||
|  |  | ||||||
|  |   lodash.once@4.1.1: | ||||||
|  |     resolution: {integrity: sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==} | ||||||
|  |  | ||||||
|   lodash@4.17.21: |   lodash@4.17.21: | ||||||
|     resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} |     resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} | ||||||
|  |  | ||||||
| @@ -1297,8 +1364,8 @@ packages: | |||||||
|     resolution: {integrity: sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==} |     resolution: {integrity: sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==} | ||||||
|     engines: {node: '>=12'} |     engines: {node: '>=12'} | ||||||
|  |  | ||||||
|   postcss@8.5.2: |   postcss@8.5.3: | ||||||
|     resolution: {integrity: sha512-MjOadfU3Ys9KYoX0AdkBlFEF1Vx37uCCeN4ZHnmwm9FfpbsGWMZeBLMmmpY+6Ocqod7mkdZ0DT31OlbsFrLlkA==} |     resolution: {integrity: sha512-dle9A3yYxlBSrt8Fu+IpjGT8SY8hN0mlaA6GY8t0P5PjIOZemULz/E2Bnm/2dcUOena75OTNkHI76uZBNUUq3A==} | ||||||
|     engines: {node: ^10 || ^12 || >=14} |     engines: {node: ^10 || ^12 || >=14} | ||||||
|  |  | ||||||
|   prebuild-install@7.1.2: |   prebuild-install@7.1.2: | ||||||
| @@ -1590,8 +1657,8 @@ packages: | |||||||
|     resolution: {integrity: sha512-c1Q0mCiPlgdTVVVIJIrBuxNicYE+t/7oKeI9MWLj3fh/uq2Pxh/3eeWbVZ4OcGW1TUf53At0njHw5SMdA3tmMg==} |     resolution: {integrity: sha512-c1Q0mCiPlgdTVVVIJIrBuxNicYE+t/7oKeI9MWLj3fh/uq2Pxh/3eeWbVZ4OcGW1TUf53At0njHw5SMdA3tmMg==} | ||||||
|     engines: {node: '>= 0.10'} |     engines: {node: '>= 0.10'} | ||||||
|  |  | ||||||
|   vite@6.1.0: |   vite@6.2.0: | ||||||
|     resolution: {integrity: sha512-RjjMipCKVoR4hVfPY6GQTgveinjNuyLw+qruksLDvA5ktI1150VmcMBKmQaEWJhg/j6Uaf6dNCNA0AfdzUb/hQ==} |     resolution: {integrity: sha512-7dPxoo+WsT/64rDcwoOjk76XHj+TqNTIvHKcuMQ1k4/SeHDaQt5GFAeLYzrimZrMpn/O6DtdI03WUjdxuPM0oQ==} | ||||||
|     engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} |     engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} | ||||||
|     hasBin: true |     hasBin: true | ||||||
|     peerDependencies: |     peerDependencies: | ||||||
| @@ -1691,105 +1758,105 @@ snapshots: | |||||||
|   '@babel/helper-validator-identifier@7.25.9': |   '@babel/helper-validator-identifier@7.25.9': | ||||||
|     optional: true |     optional: true | ||||||
|  |  | ||||||
|   '@esbuild/aix-ppc64@0.24.2': |   '@esbuild/aix-ppc64@0.25.0': | ||||||
|     optional: true |     optional: true | ||||||
|  |  | ||||||
|   '@esbuild/android-arm64@0.24.2': |   '@esbuild/android-arm64@0.25.0': | ||||||
|     optional: true |     optional: true | ||||||
|  |  | ||||||
|   '@esbuild/android-arm@0.24.2': |   '@esbuild/android-arm@0.25.0': | ||||||
|     optional: true |     optional: true | ||||||
|  |  | ||||||
|   '@esbuild/android-x64@0.24.2': |   '@esbuild/android-x64@0.25.0': | ||||||
|     optional: true |     optional: true | ||||||
|  |  | ||||||
|   '@esbuild/darwin-arm64@0.24.2': |   '@esbuild/darwin-arm64@0.25.0': | ||||||
|     optional: true |     optional: true | ||||||
|  |  | ||||||
|   '@esbuild/darwin-x64@0.24.2': |   '@esbuild/darwin-x64@0.25.0': | ||||||
|     optional: true |     optional: true | ||||||
|  |  | ||||||
|   '@esbuild/freebsd-arm64@0.24.2': |   '@esbuild/freebsd-arm64@0.25.0': | ||||||
|     optional: true |     optional: true | ||||||
|  |  | ||||||
|   '@esbuild/freebsd-x64@0.24.2': |   '@esbuild/freebsd-x64@0.25.0': | ||||||
|     optional: true |     optional: true | ||||||
|  |  | ||||||
|   '@esbuild/linux-arm64@0.24.2': |   '@esbuild/linux-arm64@0.25.0': | ||||||
|     optional: true |     optional: true | ||||||
|  |  | ||||||
|   '@esbuild/linux-arm@0.24.2': |   '@esbuild/linux-arm@0.25.0': | ||||||
|     optional: true |     optional: true | ||||||
|  |  | ||||||
|   '@esbuild/linux-ia32@0.24.2': |   '@esbuild/linux-ia32@0.25.0': | ||||||
|     optional: true |     optional: true | ||||||
|  |  | ||||||
|   '@esbuild/linux-loong64@0.24.2': |   '@esbuild/linux-loong64@0.25.0': | ||||||
|     optional: true |     optional: true | ||||||
|  |  | ||||||
|   '@esbuild/linux-mips64el@0.24.2': |   '@esbuild/linux-mips64el@0.25.0': | ||||||
|     optional: true |     optional: true | ||||||
|  |  | ||||||
|   '@esbuild/linux-ppc64@0.24.2': |   '@esbuild/linux-ppc64@0.25.0': | ||||||
|     optional: true |     optional: true | ||||||
|  |  | ||||||
|   '@esbuild/linux-riscv64@0.24.2': |   '@esbuild/linux-riscv64@0.25.0': | ||||||
|     optional: true |     optional: true | ||||||
|  |  | ||||||
|   '@esbuild/linux-s390x@0.24.2': |   '@esbuild/linux-s390x@0.25.0': | ||||||
|     optional: true |     optional: true | ||||||
|  |  | ||||||
|   '@esbuild/linux-x64@0.24.2': |   '@esbuild/linux-x64@0.25.0': | ||||||
|     optional: true |     optional: true | ||||||
|  |  | ||||||
|   '@esbuild/netbsd-arm64@0.24.2': |   '@esbuild/netbsd-arm64@0.25.0': | ||||||
|     optional: true |     optional: true | ||||||
|  |  | ||||||
|   '@esbuild/netbsd-x64@0.24.2': |   '@esbuild/netbsd-x64@0.25.0': | ||||||
|     optional: true |     optional: true | ||||||
|  |  | ||||||
|   '@esbuild/openbsd-arm64@0.24.2': |   '@esbuild/openbsd-arm64@0.25.0': | ||||||
|     optional: true |     optional: true | ||||||
|  |  | ||||||
|   '@esbuild/openbsd-x64@0.24.2': |   '@esbuild/openbsd-x64@0.25.0': | ||||||
|     optional: true |     optional: true | ||||||
|  |  | ||||||
|   '@esbuild/sunos-x64@0.24.2': |   '@esbuild/sunos-x64@0.25.0': | ||||||
|     optional: true |     optional: true | ||||||
|  |  | ||||||
|   '@esbuild/win32-arm64@0.24.2': |   '@esbuild/win32-arm64@0.25.0': | ||||||
|     optional: true |     optional: true | ||||||
|  |  | ||||||
|   '@esbuild/win32-ia32@0.24.2': |   '@esbuild/win32-ia32@0.25.0': | ||||||
|     optional: true |     optional: true | ||||||
|  |  | ||||||
|   '@esbuild/win32-x64@0.24.2': |   '@esbuild/win32-x64@0.25.0': | ||||||
|     optional: true |     optional: true | ||||||
|  |  | ||||||
|   '@gar/promisify@1.1.3': |   '@gar/promisify@1.1.3': | ||||||
|     optional: true |     optional: true | ||||||
|  |  | ||||||
|   '@inquirer/checkbox@4.1.2(@types/node@22.13.4)': |   '@inquirer/checkbox@4.1.2(@types/node@22.13.5)': | ||||||
|     dependencies: |     dependencies: | ||||||
|       '@inquirer/core': 10.1.7(@types/node@22.13.4) |       '@inquirer/core': 10.1.7(@types/node@22.13.5) | ||||||
|       '@inquirer/figures': 1.0.10 |       '@inquirer/figures': 1.0.10 | ||||||
|       '@inquirer/type': 3.0.4(@types/node@22.13.4) |       '@inquirer/type': 3.0.4(@types/node@22.13.5) | ||||||
|       ansi-escapes: 4.3.2 |       ansi-escapes: 4.3.2 | ||||||
|       yoctocolors-cjs: 2.1.2 |       yoctocolors-cjs: 2.1.2 | ||||||
|     optionalDependencies: |     optionalDependencies: | ||||||
|       '@types/node': 22.13.4 |       '@types/node': 22.13.5 | ||||||
|  |  | ||||||
|   '@inquirer/confirm@5.1.6(@types/node@22.13.4)': |   '@inquirer/confirm@5.1.6(@types/node@22.13.5)': | ||||||
|     dependencies: |     dependencies: | ||||||
|       '@inquirer/core': 10.1.7(@types/node@22.13.4) |       '@inquirer/core': 10.1.7(@types/node@22.13.5) | ||||||
|       '@inquirer/type': 3.0.4(@types/node@22.13.4) |       '@inquirer/type': 3.0.4(@types/node@22.13.5) | ||||||
|     optionalDependencies: |     optionalDependencies: | ||||||
|       '@types/node': 22.13.4 |       '@types/node': 22.13.5 | ||||||
|  |  | ||||||
|   '@inquirer/core@10.1.7(@types/node@22.13.4)': |   '@inquirer/core@10.1.7(@types/node@22.13.5)': | ||||||
|     dependencies: |     dependencies: | ||||||
|       '@inquirer/figures': 1.0.10 |       '@inquirer/figures': 1.0.10 | ||||||
|       '@inquirer/type': 3.0.4(@types/node@22.13.4) |       '@inquirer/type': 3.0.4(@types/node@22.13.5) | ||||||
|       ansi-escapes: 4.3.2 |       ansi-escapes: 4.3.2 | ||||||
|       cli-width: 4.1.0 |       cli-width: 4.1.0 | ||||||
|       mute-stream: 2.0.0 |       mute-stream: 2.0.0 | ||||||
| @@ -1797,93 +1864,93 @@ snapshots: | |||||||
|       wrap-ansi: 6.2.0 |       wrap-ansi: 6.2.0 | ||||||
|       yoctocolors-cjs: 2.1.2 |       yoctocolors-cjs: 2.1.2 | ||||||
|     optionalDependencies: |     optionalDependencies: | ||||||
|       '@types/node': 22.13.4 |       '@types/node': 22.13.5 | ||||||
|  |  | ||||||
|   '@inquirer/editor@4.2.7(@types/node@22.13.4)': |   '@inquirer/editor@4.2.7(@types/node@22.13.5)': | ||||||
|     dependencies: |     dependencies: | ||||||
|       '@inquirer/core': 10.1.7(@types/node@22.13.4) |       '@inquirer/core': 10.1.7(@types/node@22.13.5) | ||||||
|       '@inquirer/type': 3.0.4(@types/node@22.13.4) |       '@inquirer/type': 3.0.4(@types/node@22.13.5) | ||||||
|       external-editor: 3.1.0 |       external-editor: 3.1.0 | ||||||
|     optionalDependencies: |     optionalDependencies: | ||||||
|       '@types/node': 22.13.4 |       '@types/node': 22.13.5 | ||||||
|  |  | ||||||
|   '@inquirer/expand@4.0.9(@types/node@22.13.4)': |   '@inquirer/expand@4.0.9(@types/node@22.13.5)': | ||||||
|     dependencies: |     dependencies: | ||||||
|       '@inquirer/core': 10.1.7(@types/node@22.13.4) |       '@inquirer/core': 10.1.7(@types/node@22.13.5) | ||||||
|       '@inquirer/type': 3.0.4(@types/node@22.13.4) |       '@inquirer/type': 3.0.4(@types/node@22.13.5) | ||||||
|       yoctocolors-cjs: 2.1.2 |       yoctocolors-cjs: 2.1.2 | ||||||
|     optionalDependencies: |     optionalDependencies: | ||||||
|       '@types/node': 22.13.4 |       '@types/node': 22.13.5 | ||||||
|  |  | ||||||
|   '@inquirer/figures@1.0.10': {} |   '@inquirer/figures@1.0.10': {} | ||||||
|  |  | ||||||
|   '@inquirer/input@4.1.6(@types/node@22.13.4)': |   '@inquirer/input@4.1.6(@types/node@22.13.5)': | ||||||
|     dependencies: |     dependencies: | ||||||
|       '@inquirer/core': 10.1.7(@types/node@22.13.4) |       '@inquirer/core': 10.1.7(@types/node@22.13.5) | ||||||
|       '@inquirer/type': 3.0.4(@types/node@22.13.4) |       '@inquirer/type': 3.0.4(@types/node@22.13.5) | ||||||
|     optionalDependencies: |     optionalDependencies: | ||||||
|       '@types/node': 22.13.4 |       '@types/node': 22.13.5 | ||||||
|  |  | ||||||
|   '@inquirer/number@3.0.9(@types/node@22.13.4)': |   '@inquirer/number@3.0.9(@types/node@22.13.5)': | ||||||
|     dependencies: |     dependencies: | ||||||
|       '@inquirer/core': 10.1.7(@types/node@22.13.4) |       '@inquirer/core': 10.1.7(@types/node@22.13.5) | ||||||
|       '@inquirer/type': 3.0.4(@types/node@22.13.4) |       '@inquirer/type': 3.0.4(@types/node@22.13.5) | ||||||
|     optionalDependencies: |     optionalDependencies: | ||||||
|       '@types/node': 22.13.4 |       '@types/node': 22.13.5 | ||||||
|  |  | ||||||
|   '@inquirer/password@4.0.9(@types/node@22.13.4)': |   '@inquirer/password@4.0.9(@types/node@22.13.5)': | ||||||
|     dependencies: |     dependencies: | ||||||
|       '@inquirer/core': 10.1.7(@types/node@22.13.4) |       '@inquirer/core': 10.1.7(@types/node@22.13.5) | ||||||
|       '@inquirer/type': 3.0.4(@types/node@22.13.4) |       '@inquirer/type': 3.0.4(@types/node@22.13.5) | ||||||
|       ansi-escapes: 4.3.2 |       ansi-escapes: 4.3.2 | ||||||
|     optionalDependencies: |     optionalDependencies: | ||||||
|       '@types/node': 22.13.4 |       '@types/node': 22.13.5 | ||||||
|  |  | ||||||
|   '@inquirer/prompts@7.3.2(@types/node@22.13.4)': |   '@inquirer/prompts@7.3.2(@types/node@22.13.5)': | ||||||
|     dependencies: |     dependencies: | ||||||
|       '@inquirer/checkbox': 4.1.2(@types/node@22.13.4) |       '@inquirer/checkbox': 4.1.2(@types/node@22.13.5) | ||||||
|       '@inquirer/confirm': 5.1.6(@types/node@22.13.4) |       '@inquirer/confirm': 5.1.6(@types/node@22.13.5) | ||||||
|       '@inquirer/editor': 4.2.7(@types/node@22.13.4) |       '@inquirer/editor': 4.2.7(@types/node@22.13.5) | ||||||
|       '@inquirer/expand': 4.0.9(@types/node@22.13.4) |       '@inquirer/expand': 4.0.9(@types/node@22.13.5) | ||||||
|       '@inquirer/input': 4.1.6(@types/node@22.13.4) |       '@inquirer/input': 4.1.6(@types/node@22.13.5) | ||||||
|       '@inquirer/number': 3.0.9(@types/node@22.13.4) |       '@inquirer/number': 3.0.9(@types/node@22.13.5) | ||||||
|       '@inquirer/password': 4.0.9(@types/node@22.13.4) |       '@inquirer/password': 4.0.9(@types/node@22.13.5) | ||||||
|       '@inquirer/rawlist': 4.0.9(@types/node@22.13.4) |       '@inquirer/rawlist': 4.0.9(@types/node@22.13.5) | ||||||
|       '@inquirer/search': 3.0.9(@types/node@22.13.4) |       '@inquirer/search': 3.0.9(@types/node@22.13.5) | ||||||
|       '@inquirer/select': 4.0.9(@types/node@22.13.4) |       '@inquirer/select': 4.0.9(@types/node@22.13.5) | ||||||
|     optionalDependencies: |     optionalDependencies: | ||||||
|       '@types/node': 22.13.4 |       '@types/node': 22.13.5 | ||||||
|  |  | ||||||
|   '@inquirer/rawlist@4.0.9(@types/node@22.13.4)': |   '@inquirer/rawlist@4.0.9(@types/node@22.13.5)': | ||||||
|     dependencies: |     dependencies: | ||||||
|       '@inquirer/core': 10.1.7(@types/node@22.13.4) |       '@inquirer/core': 10.1.7(@types/node@22.13.5) | ||||||
|       '@inquirer/type': 3.0.4(@types/node@22.13.4) |       '@inquirer/type': 3.0.4(@types/node@22.13.5) | ||||||
|       yoctocolors-cjs: 2.1.2 |       yoctocolors-cjs: 2.1.2 | ||||||
|     optionalDependencies: |     optionalDependencies: | ||||||
|       '@types/node': 22.13.4 |       '@types/node': 22.13.5 | ||||||
|  |  | ||||||
|   '@inquirer/search@3.0.9(@types/node@22.13.4)': |   '@inquirer/search@3.0.9(@types/node@22.13.5)': | ||||||
|     dependencies: |     dependencies: | ||||||
|       '@inquirer/core': 10.1.7(@types/node@22.13.4) |       '@inquirer/core': 10.1.7(@types/node@22.13.5) | ||||||
|       '@inquirer/figures': 1.0.10 |       '@inquirer/figures': 1.0.10 | ||||||
|       '@inquirer/type': 3.0.4(@types/node@22.13.4) |       '@inquirer/type': 3.0.4(@types/node@22.13.5) | ||||||
|       yoctocolors-cjs: 2.1.2 |       yoctocolors-cjs: 2.1.2 | ||||||
|     optionalDependencies: |     optionalDependencies: | ||||||
|       '@types/node': 22.13.4 |       '@types/node': 22.13.5 | ||||||
|  |  | ||||||
|   '@inquirer/select@4.0.9(@types/node@22.13.4)': |   '@inquirer/select@4.0.9(@types/node@22.13.5)': | ||||||
|     dependencies: |     dependencies: | ||||||
|       '@inquirer/core': 10.1.7(@types/node@22.13.4) |       '@inquirer/core': 10.1.7(@types/node@22.13.5) | ||||||
|       '@inquirer/figures': 1.0.10 |       '@inquirer/figures': 1.0.10 | ||||||
|       '@inquirer/type': 3.0.4(@types/node@22.13.4) |       '@inquirer/type': 3.0.4(@types/node@22.13.5) | ||||||
|       ansi-escapes: 4.3.2 |       ansi-escapes: 4.3.2 | ||||||
|       yoctocolors-cjs: 2.1.2 |       yoctocolors-cjs: 2.1.2 | ||||||
|     optionalDependencies: |     optionalDependencies: | ||||||
|       '@types/node': 22.13.4 |       '@types/node': 22.13.5 | ||||||
|  |  | ||||||
|   '@inquirer/type@3.0.4(@types/node@22.13.4)': |   '@inquirer/type@3.0.4(@types/node@22.13.5)': | ||||||
|     optionalDependencies: |     optionalDependencies: | ||||||
|       '@types/node': 22.13.4 |       '@types/node': 22.13.5 | ||||||
|  |  | ||||||
|   '@isaacs/cliui@8.0.2': |   '@isaacs/cliui@8.0.2': | ||||||
|     dependencies: |     dependencies: | ||||||
| @@ -1900,9 +1967,13 @@ snapshots: | |||||||
|  |  | ||||||
|   '@jridgewell/sourcemap-codec@1.5.0': {} |   '@jridgewell/sourcemap-codec@1.5.0': {} | ||||||
|  |  | ||||||
|  |   '@kevisual/load@0.0.4': | ||||||
|  |     dependencies: | ||||||
|  |       eventemitter3: 5.0.1 | ||||||
|  |  | ||||||
|   '@kevisual/query@0.0.7-alpha.3': {} |   '@kevisual/query@0.0.7-alpha.3': {} | ||||||
|  |  | ||||||
|   '@kevisual/router@0.0.6-alpha-5': |   '@kevisual/router@0.0.6': | ||||||
|     dependencies: |     dependencies: | ||||||
|       path-to-regexp: 8.2.0 |       path-to-regexp: 8.2.0 | ||||||
|       selfsigned: 2.4.1 |       selfsigned: 2.4.1 | ||||||
| @@ -2054,19 +2125,26 @@ snapshots: | |||||||
|   '@tootallnate/once@1.1.2': |   '@tootallnate/once@1.1.2': | ||||||
|     optional: true |     optional: true | ||||||
|  |  | ||||||
|  |   '@types/crypto-js@4.2.2': {} | ||||||
|  |  | ||||||
|   '@types/debug@4.1.12': |   '@types/debug@4.1.12': | ||||||
|     dependencies: |     dependencies: | ||||||
|       '@types/ms': 0.7.34 |       '@types/ms': 0.7.34 | ||||||
|  |  | ||||||
|   '@types/estree@1.0.6': {} |   '@types/estree@1.0.6': {} | ||||||
|  |  | ||||||
|  |   '@types/jsonwebtoken@9.0.9': | ||||||
|  |     dependencies: | ||||||
|  |       '@types/ms': 0.7.34 | ||||||
|  |       '@types/node': 22.13.5 | ||||||
|  |  | ||||||
|   '@types/ms@0.7.34': {} |   '@types/ms@0.7.34': {} | ||||||
|  |  | ||||||
|   '@types/node-forge@1.3.11': |   '@types/node-forge@1.3.11': | ||||||
|     dependencies: |     dependencies: | ||||||
|       '@types/node': 22.13.4 |       '@types/node': 22.13.5 | ||||||
|  |  | ||||||
|   '@types/node@22.13.4': |   '@types/node@22.13.5': | ||||||
|     dependencies: |     dependencies: | ||||||
|       undici-types: 6.20.0 |       undici-types: 6.20.0 | ||||||
|  |  | ||||||
| @@ -2148,6 +2226,8 @@ snapshots: | |||||||
|     dependencies: |     dependencies: | ||||||
|       fill-range: 7.1.1 |       fill-range: 7.1.1 | ||||||
|  |  | ||||||
|  |   buffer-equal-constant-time@1.0.1: {} | ||||||
|  |  | ||||||
|   buffer@5.7.1: |   buffer@5.7.1: | ||||||
|     dependencies: |     dependencies: | ||||||
|       base64-js: 1.5.1 |       base64-js: 1.5.1 | ||||||
| @@ -2226,6 +2306,8 @@ snapshots: | |||||||
|       shebang-command: 2.0.0 |       shebang-command: 2.0.0 | ||||||
|       which: 2.0.2 |       which: 2.0.2 | ||||||
|  |  | ||||||
|  |   crypto-js@4.2.0: {} | ||||||
|  |  | ||||||
|   debug@4.3.7: |   debug@4.3.7: | ||||||
|     dependencies: |     dependencies: | ||||||
|       ms: 2.1.3 |       ms: 2.1.3 | ||||||
| @@ -2259,6 +2341,10 @@ snapshots: | |||||||
|  |  | ||||||
|   eastasianwidth@0.2.0: {} |   eastasianwidth@0.2.0: {} | ||||||
|  |  | ||||||
|  |   ecdsa-sig-formatter@1.0.11: | ||||||
|  |     dependencies: | ||||||
|  |       safe-buffer: 5.2.1 | ||||||
|  |  | ||||||
|   emoji-regex@8.0.0: {} |   emoji-regex@8.0.0: {} | ||||||
|  |  | ||||||
|   emoji-regex@9.2.2: {} |   emoji-regex@9.2.2: {} | ||||||
| @@ -2295,36 +2381,38 @@ snapshots: | |||||||
|       has-tostringtag: 1.0.2 |       has-tostringtag: 1.0.2 | ||||||
|       hasown: 2.0.2 |       hasown: 2.0.2 | ||||||
|  |  | ||||||
|   esbuild@0.24.2: |   esbuild@0.25.0: | ||||||
|     optionalDependencies: |     optionalDependencies: | ||||||
|       '@esbuild/aix-ppc64': 0.24.2 |       '@esbuild/aix-ppc64': 0.25.0 | ||||||
|       '@esbuild/android-arm': 0.24.2 |       '@esbuild/android-arm': 0.25.0 | ||||||
|       '@esbuild/android-arm64': 0.24.2 |       '@esbuild/android-arm64': 0.25.0 | ||||||
|       '@esbuild/android-x64': 0.24.2 |       '@esbuild/android-x64': 0.25.0 | ||||||
|       '@esbuild/darwin-arm64': 0.24.2 |       '@esbuild/darwin-arm64': 0.25.0 | ||||||
|       '@esbuild/darwin-x64': 0.24.2 |       '@esbuild/darwin-x64': 0.25.0 | ||||||
|       '@esbuild/freebsd-arm64': 0.24.2 |       '@esbuild/freebsd-arm64': 0.25.0 | ||||||
|       '@esbuild/freebsd-x64': 0.24.2 |       '@esbuild/freebsd-x64': 0.25.0 | ||||||
|       '@esbuild/linux-arm': 0.24.2 |       '@esbuild/linux-arm': 0.25.0 | ||||||
|       '@esbuild/linux-arm64': 0.24.2 |       '@esbuild/linux-arm64': 0.25.0 | ||||||
|       '@esbuild/linux-ia32': 0.24.2 |       '@esbuild/linux-ia32': 0.25.0 | ||||||
|       '@esbuild/linux-loong64': 0.24.2 |       '@esbuild/linux-loong64': 0.25.0 | ||||||
|       '@esbuild/linux-mips64el': 0.24.2 |       '@esbuild/linux-mips64el': 0.25.0 | ||||||
|       '@esbuild/linux-ppc64': 0.24.2 |       '@esbuild/linux-ppc64': 0.25.0 | ||||||
|       '@esbuild/linux-riscv64': 0.24.2 |       '@esbuild/linux-riscv64': 0.25.0 | ||||||
|       '@esbuild/linux-s390x': 0.24.2 |       '@esbuild/linux-s390x': 0.25.0 | ||||||
|       '@esbuild/linux-x64': 0.24.2 |       '@esbuild/linux-x64': 0.25.0 | ||||||
|       '@esbuild/netbsd-arm64': 0.24.2 |       '@esbuild/netbsd-arm64': 0.25.0 | ||||||
|       '@esbuild/netbsd-x64': 0.24.2 |       '@esbuild/netbsd-x64': 0.25.0 | ||||||
|       '@esbuild/openbsd-arm64': 0.24.2 |       '@esbuild/openbsd-arm64': 0.25.0 | ||||||
|       '@esbuild/openbsd-x64': 0.24.2 |       '@esbuild/openbsd-x64': 0.25.0 | ||||||
|       '@esbuild/sunos-x64': 0.24.2 |       '@esbuild/sunos-x64': 0.25.0 | ||||||
|       '@esbuild/win32-arm64': 0.24.2 |       '@esbuild/win32-arm64': 0.25.0 | ||||||
|       '@esbuild/win32-ia32': 0.24.2 |       '@esbuild/win32-ia32': 0.25.0 | ||||||
|       '@esbuild/win32-x64': 0.24.2 |       '@esbuild/win32-x64': 0.25.0 | ||||||
|  |  | ||||||
|   estree-walker@2.0.2: {} |   estree-walker@2.0.2: {} | ||||||
|  |  | ||||||
|  |   eventemitter3@5.0.1: {} | ||||||
|  |  | ||||||
|   expand-template@2.0.3: {} |   expand-template@2.0.3: {} | ||||||
|  |  | ||||||
|   external-editor@3.1.0: |   external-editor@3.1.0: | ||||||
| @@ -2528,17 +2616,17 @@ snapshots: | |||||||
|  |  | ||||||
|   ini@1.3.8: {} |   ini@1.3.8: {} | ||||||
|  |  | ||||||
|   inquirer@12.4.2(@types/node@22.13.4): |   inquirer@12.4.2(@types/node@22.13.5): | ||||||
|     dependencies: |     dependencies: | ||||||
|       '@inquirer/core': 10.1.7(@types/node@22.13.4) |       '@inquirer/core': 10.1.7(@types/node@22.13.5) | ||||||
|       '@inquirer/prompts': 7.3.2(@types/node@22.13.4) |       '@inquirer/prompts': 7.3.2(@types/node@22.13.5) | ||||||
|       '@inquirer/type': 3.0.4(@types/node@22.13.4) |       '@inquirer/type': 3.0.4(@types/node@22.13.5) | ||||||
|       ansi-escapes: 4.3.2 |       ansi-escapes: 4.3.2 | ||||||
|       mute-stream: 2.0.0 |       mute-stream: 2.0.0 | ||||||
|       run-async: 3.0.0 |       run-async: 3.0.0 | ||||||
|       rxjs: 7.8.1 |       rxjs: 7.8.1 | ||||||
|     optionalDependencies: |     optionalDependencies: | ||||||
|       '@types/node': 22.13.4 |       '@types/node': 22.13.5 | ||||||
|  |  | ||||||
|   ip-address@9.0.5: |   ip-address@9.0.5: | ||||||
|     dependencies: |     dependencies: | ||||||
| @@ -2587,6 +2675,44 @@ snapshots: | |||||||
|   jsbn@1.1.0: |   jsbn@1.1.0: | ||||||
|     optional: true |     optional: true | ||||||
|  |  | ||||||
|  |   jsonwebtoken@9.0.2: | ||||||
|  |     dependencies: | ||||||
|  |       jws: 3.2.2 | ||||||
|  |       lodash.includes: 4.3.0 | ||||||
|  |       lodash.isboolean: 3.0.3 | ||||||
|  |       lodash.isinteger: 4.0.4 | ||||||
|  |       lodash.isnumber: 3.0.3 | ||||||
|  |       lodash.isplainobject: 4.0.6 | ||||||
|  |       lodash.isstring: 4.0.1 | ||||||
|  |       lodash.once: 4.1.1 | ||||||
|  |       ms: 2.1.3 | ||||||
|  |       semver: 7.6.3 | ||||||
|  |  | ||||||
|  |   jwa@1.4.1: | ||||||
|  |     dependencies: | ||||||
|  |       buffer-equal-constant-time: 1.0.1 | ||||||
|  |       ecdsa-sig-formatter: 1.0.11 | ||||||
|  |       safe-buffer: 5.2.1 | ||||||
|  |  | ||||||
|  |   jws@3.2.2: | ||||||
|  |     dependencies: | ||||||
|  |       jwa: 1.4.1 | ||||||
|  |       safe-buffer: 5.2.1 | ||||||
|  |  | ||||||
|  |   lodash.includes@4.3.0: {} | ||||||
|  |  | ||||||
|  |   lodash.isboolean@3.0.3: {} | ||||||
|  |  | ||||||
|  |   lodash.isinteger@4.0.4: {} | ||||||
|  |  | ||||||
|  |   lodash.isnumber@3.0.3: {} | ||||||
|  |  | ||||||
|  |   lodash.isplainobject@4.0.6: {} | ||||||
|  |  | ||||||
|  |   lodash.isstring@4.0.1: {} | ||||||
|  |  | ||||||
|  |   lodash.once@4.1.1: {} | ||||||
|  |  | ||||||
|   lodash@4.17.21: {} |   lodash@4.17.21: {} | ||||||
|  |  | ||||||
|   lru-cache@10.4.3: {} |   lru-cache@10.4.3: {} | ||||||
| @@ -2809,7 +2935,7 @@ snapshots: | |||||||
|  |  | ||||||
|   picomatch@4.0.2: {} |   picomatch@4.0.2: {} | ||||||
|  |  | ||||||
|   postcss@8.5.2: |   postcss@8.5.3: | ||||||
|     dependencies: |     dependencies: | ||||||
|       nanoid: 3.3.8 |       nanoid: 3.3.8 | ||||||
|       picocolors: 1.1.1 |       picocolors: 1.1.1 | ||||||
| @@ -2896,11 +3022,11 @@ snapshots: | |||||||
|     optionalDependencies: |     optionalDependencies: | ||||||
|       '@babel/code-frame': 7.26.2 |       '@babel/code-frame': 7.26.2 | ||||||
|  |  | ||||||
|   rollup-plugin-esbuild@6.2.0(esbuild@0.24.2)(rollup@4.34.8): |   rollup-plugin-esbuild@6.2.0(esbuild@0.25.0)(rollup@4.34.8): | ||||||
|     dependencies: |     dependencies: | ||||||
|       debug: 4.4.0 |       debug: 4.4.0 | ||||||
|       es-module-lexer: 1.6.0 |       es-module-lexer: 1.6.0 | ||||||
|       esbuild: 0.24.2 |       esbuild: 0.25.0 | ||||||
|       get-tsconfig: 4.10.0 |       get-tsconfig: 4.10.0 | ||||||
|       rollup: 4.34.8 |       rollup: 4.34.8 | ||||||
|       unplugin-utils: 0.2.4 |       unplugin-utils: 0.2.4 | ||||||
| @@ -3147,13 +3273,13 @@ snapshots: | |||||||
|  |  | ||||||
|   validator@13.12.0: {} |   validator@13.12.0: {} | ||||||
|  |  | ||||||
|   vite@6.1.0(@types/node@22.13.4): |   vite@6.2.0(@types/node@22.13.5): | ||||||
|     dependencies: |     dependencies: | ||||||
|       esbuild: 0.24.2 |       esbuild: 0.25.0 | ||||||
|       postcss: 8.5.2 |       postcss: 8.5.3 | ||||||
|       rollup: 4.34.8 |       rollup: 4.34.8 | ||||||
|     optionalDependencies: |     optionalDependencies: | ||||||
|       '@types/node': 22.13.4 |       '@types/node': 22.13.5 | ||||||
|       fsevents: 2.3.3 |       fsevents: 2.3.3 | ||||||
|  |  | ||||||
|   which@2.0.2: |   which@2.0.2: | ||||||
| @@ -3167,7 +3293,7 @@ snapshots: | |||||||
|  |  | ||||||
|   wkx@0.5.0: |   wkx@0.5.0: | ||||||
|     dependencies: |     dependencies: | ||||||
|       '@types/node': 22.13.4 |       '@types/node': 22.13.5 | ||||||
|  |  | ||||||
|   wrap-ansi@6.2.0: |   wrap-ansi@6.2.0: | ||||||
|     dependencies: |     dependencies: | ||||||
|   | |||||||
| @@ -1,19 +1,24 @@ | |||||||
| import { program, Command } from '@/program.ts'; | import { program, Command } from '@/program.ts'; | ||||||
| import { getConfig, writeConfig } from '@/module/get-config.ts'; | import { getConfig, writeConfig } from '@/module/get-config.ts'; | ||||||
|  | import { getBaseURL } from '@/module/query.ts'; | ||||||
| import { queryLogin, queryMe, switchOrg, switchMe } from '@/query/index.ts'; | import { queryLogin, queryMe, switchOrg, switchMe } from '@/query/index.ts'; | ||||||
| import inquirer from 'inquirer'; | import inquirer from 'inquirer'; | ||||||
| import { runApp } from '../app-run.ts'; | import { runApp } from '../app-run.ts'; | ||||||
| // 导入 login 命令 | import { chalk } from '@/module/chalk.ts'; | ||||||
|  | import { loginInCommand } from '@/module/login/login-by-web.ts'; | ||||||
| // 定义login命令,支持 `-u` 和 `-p` 参数来输入用户名和密码 | // 定义login命令,支持 `-u` 和 `-p` 参数来输入用户名和密码 | ||||||
| const loginCommand = new Command('login') | const loginCommand = new Command('login') | ||||||
|   .description('Login to the application') |   .description('Login to the application') | ||||||
|   .option('-u, --username <username>', 'Specify username') |   .option('-u, --username <username>', 'Specify username') | ||||||
|   .option('-p, --password <password>', 'Specify password') |   .option('-p, --password <password>', 'Specify password') | ||||||
|  |   .option('-w, --web', 'Login on the web') | ||||||
|   .action(async (options) => { |   .action(async (options) => { | ||||||
|     const config = getConfig(); |     const config = getConfig(); | ||||||
|     let { username, password } = options; |     let { username, password } = options; | ||||||
|  |     if (options.web) { | ||||||
|  |       await loginInCommand(); | ||||||
|  |       return; | ||||||
|  |     } | ||||||
|     // 如果没有传递参数,则通过交互式输入 |     // 如果没有传递参数,则通过交互式输入 | ||||||
|     if (!username || !password) { |     if (!username || !password) { | ||||||
|       const answers = await inquirer.prompt([ |       const answers = await inquirer.prompt([ | ||||||
|   | |||||||
| @@ -11,10 +11,11 @@ app.addCommand(token); | |||||||
|  |  | ||||||
| const baseURL = new Command('baseURL') | const baseURL = new Command('baseURL') | ||||||
|   .alias('base') |   .alias('base') | ||||||
|  |   .alias('registry') | ||||||
|   .description('show baseURL') |   .description('show baseURL') | ||||||
|   .option('-a, --add <baseURL>', 'add baseURL') |   .option('-a, --add <baseURL>', 'add baseURL') | ||||||
|   .option('-r, --remove <number>', 'remove baseURL number') |   .option('-r, --remove <number>', 'remove baseURL number') | ||||||
|   .option('-s, --set <number>', 'set current baseURL') |   .option('-s, --set <number|string>', 'set current baseURL, use number to set from list or string to set') | ||||||
|   .option('-l, --list', 'list baseURL') |   .option('-l, --list', 'list baseURL') | ||||||
|   .option('-c, --clear', 'clear baseURL') |   .option('-c, --clear', 'clear baseURL') | ||||||
|   .action(async (opts) => { |   .action(async (opts) => { | ||||||
| @@ -29,7 +30,7 @@ const baseURL = new Command('baseURL') | |||||||
|         console.log('expand baseURLList is empty'); |         console.log('expand baseURLList is empty'); | ||||||
|         return; |         return; | ||||||
|       } |       } | ||||||
|       console.log('----current baseURL:' + config.baseURL+'----\n'); |       console.log('----current baseURL:' + config.baseURL + '----\n'); | ||||||
|       list.forEach((item, index) => { |       list.forEach((item, index) => { | ||||||
|         console.log(`${index + 1}: ${item}`); |         console.log(`${index + 1}: ${item}`); | ||||||
|       }); |       }); | ||||||
| @@ -55,12 +56,25 @@ const baseURL = new Command('baseURL') | |||||||
|       return; |       return; | ||||||
|     } |     } | ||||||
|     if (opts.set) { |     if (opts.set) { | ||||||
|  |       const isNumber = !isNaN(Number(opts.set)); | ||||||
|  |       if (isNumber) { | ||||||
|         const index = Number(opts.set) - 1; |         const index = Number(opts.set) - 1; | ||||||
|         if (index < 0 || index >= list.length) { |         if (index < 0 || index >= list.length) { | ||||||
|           console.log('index out of range'); |           console.log('index out of range'); | ||||||
|  |           return; | ||||||
|         } |         } | ||||||
|         writeConfig({ ...config, baseURL: list[index] }); |         writeConfig({ ...config, baseURL: list[index] }); | ||||||
|         console.log('set baseURL success:', list[index]); |         console.log('set baseURL success:', list[index]); | ||||||
|  |       } else { | ||||||
|  |         try { | ||||||
|  |           new URL(opts.set); | ||||||
|  |         } catch (error) { | ||||||
|  |           console.log('invalid baseURL:', opts.set); | ||||||
|  |           return; | ||||||
|  |         } | ||||||
|  |         writeConfig({ ...config, baseURL: opts.set }); | ||||||
|  |         console.log('set baseURL success:', opts.set); | ||||||
|  |       } | ||||||
|       return; |       return; | ||||||
|     } |     } | ||||||
|     if (opts.list) { |     if (opts.list) { | ||||||
| @@ -75,7 +89,7 @@ const baseURL = new Command('baseURL') | |||||||
|   }); |   }); | ||||||
| app.addCommand(baseURL); | app.addCommand(baseURL); | ||||||
|  |  | ||||||
| const setBaseURL = new Command('setBaseURL').description('set baseURL').action(async () => { | const setBaseURL = new Command('set').description('set baseURL').action(async () => { | ||||||
|   const config = getConfig(); |   const config = getConfig(); | ||||||
|   const answers = await inquirer.prompt([ |   const answers = await inquirer.prompt([ | ||||||
|     { |     { | ||||||
| @@ -88,7 +102,7 @@ const setBaseURL = new Command('setBaseURL').description('set baseURL').action(a | |||||||
|   writeConfig({ ...config, baseURL }); |   writeConfig({ ...config, baseURL }); | ||||||
| }); | }); | ||||||
|  |  | ||||||
| app.addCommand(setBaseURL); | baseURL.addCommand(setBaseURL); | ||||||
|  |  | ||||||
| // const showQueryURL = new Command('showQueryURL').description('show query URL').action(async () => { | // const showQueryURL = new Command('showQueryURL').description('show query URL').action(async () => { | ||||||
| //   console.log("url", query.url); | //   console.log("url", query.url); | ||||||
|   | |||||||
| @@ -7,6 +7,7 @@ const command = new Command('proxy') | |||||||
|   .option('-s, --start', '启动代理') |   .option('-s, --start', '启动代理') | ||||||
|   .option('-u, --unset', '关闭代理') |   .option('-u, --unset', '关闭代理') | ||||||
|   .action((options) => { |   .action((options) => { | ||||||
|  |     // TODO: 代理相关的逻辑, 进行配置 | ||||||
|     const proxyShell = 'export https_proxy=http://127.0.0.1:7890 http_proxy=http://127.0.0.1:7890 all_proxy=socks5://127.0.0.1:7890'; |     const proxyShell = 'export https_proxy=http://127.0.0.1:7890 http_proxy=http://127.0.0.1:7890 all_proxy=socks5://127.0.0.1:7890'; | ||||||
|     const unProxyShell = 'unset https_proxy http_proxy all_proxy'; |     const unProxyShell = 'unset https_proxy http_proxy all_proxy'; | ||||||
|  |  | ||||||
|   | |||||||
| @@ -8,7 +8,7 @@ import { fileIsExist } from '@/uitls/file.ts'; | |||||||
| import ignore from 'ignore'; | import ignore from 'ignore'; | ||||||
| import FormData from 'form-data'; | import FormData from 'form-data'; | ||||||
| import { chalk } from '@/module/chalk.ts'; | import { chalk } from '@/module/chalk.ts'; | ||||||
|  | import * as backServices from '@/query/services/index.ts'; | ||||||
| // 查找文件(忽略大小写) | // 查找文件(忽略大小写) | ||||||
| async function findFileInsensitive(targetFile: string): Promise<string | null> { | async function findFileInsensitive(targetFile: string): Promise<string | null> { | ||||||
|   const files = fs.readdirSync('.'); |   const files = fs.readdirSync('.'); | ||||||
| @@ -321,6 +321,7 @@ const deployLoadFn = async (id: string, fileKey: string, force = false) => { | |||||||
|   }); |   }); | ||||||
|   if (res.code === 200) { |   if (res.code === 200) { | ||||||
|     console.log('deploy-load success. current version:', res.data?.pkg?.version); |     console.log('deploy-load success. current version:', res.data?.pkg?.version); | ||||||
|  |     console.log('run: ', 'envision services restart', res.data?.pkg?.name); | ||||||
|   } else { |   } else { | ||||||
|     console.error('deploy-load failed', res.message); |     console.error('deploy-load failed', res.message); | ||||||
|   } |   } | ||||||
| @@ -357,8 +358,141 @@ const packDeployCommand = new Command('pack-deploy') | |||||||
|   .action(async (id, fileKey, opts) => { |   .action(async (id, fileKey, opts) => { | ||||||
|     const { force } = opts || {}; |     const { force } = opts || {}; | ||||||
|     const res = await deployLoadFn(id, fileKey, force); |     const res = await deployLoadFn(id, fileKey, force); | ||||||
|  |  | ||||||
|   }); |   }); | ||||||
|  |  | ||||||
| program.addCommand(packDeployCommand); | program.addCommand(packDeployCommand); | ||||||
| program.addCommand(publishCommand); | program.addCommand(publishCommand); | ||||||
| program.addCommand(packCommand); | program.addCommand(packCommand); | ||||||
|  |  | ||||||
|  | enum AppType { | ||||||
|  |   /** | ||||||
|  |    * run in (import way) | ||||||
|  |    */ | ||||||
|  |   SystemApp = 'system-app', | ||||||
|  |   /** | ||||||
|  |    * fork 执行 | ||||||
|  |    */ | ||||||
|  |   MicroApp = 'micro-app', | ||||||
|  |   GatewayApp = 'gateway-app', | ||||||
|  |   /** | ||||||
|  |    * pm2 启动 | ||||||
|  |    */ | ||||||
|  |   Pm2SystemApp = 'pm2-system-app', | ||||||
|  | } | ||||||
|  | type ServiceItem = { | ||||||
|  |   key: string; | ||||||
|  |   status: 'inactive' | 'running' | 'stop' | 'error'; | ||||||
|  |   type: AppType; | ||||||
|  |   description: string; | ||||||
|  |   version: string; | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | const servicesCommand = new Command('services') | ||||||
|  |   .description('服务器registry当中的服务管理') | ||||||
|  |   .option('-l, --list', 'list services') | ||||||
|  |   .option('-r, --restart <service>', 'restart services') | ||||||
|  |   .option('-s, --start <service>', 'start services') | ||||||
|  |   .option('-t, --stop <service>', 'stop services') | ||||||
|  |   .option('-i, --info <services>', 'info services') | ||||||
|  |   .option('-d, --delete <services>', 'delete services') | ||||||
|  |   .action(async (opts) => { | ||||||
|  |     // | ||||||
|  |     if (opts.list) { | ||||||
|  |       const res = await backServices.queryServiceList(); | ||||||
|  |       if (res.code === 200) { | ||||||
|  |         // console.log('res', JSON.stringify(res.data, null, 2)); | ||||||
|  |         const data = res.data as ServiceItem[]; | ||||||
|  |         console.log('services list'); | ||||||
|  |         const getMaxLengths = (data) => { | ||||||
|  |           const lengths = { key: 0, status: 0, type: 0, description: 0, version: 0 }; | ||||||
|  |           data.forEach((item) => { | ||||||
|  |             lengths.key = Math.max(lengths.key, item.key.length); | ||||||
|  |             lengths.status = Math.max(lengths.status, item.status.length); | ||||||
|  |             lengths.type = Math.max(lengths.type, item.type.length); | ||||||
|  |             lengths.description = Math.max(lengths.description, item.description.length); | ||||||
|  |             lengths.version = Math.max(lengths.version, item.version.length); | ||||||
|  |           }); | ||||||
|  |           return lengths; | ||||||
|  |         }; | ||||||
|  |         const lengths = getMaxLengths(data); | ||||||
|  |         const padString = (str, length) => str + ' '.repeat(Math.max(length - str.length, 0)); | ||||||
|  |         try { | ||||||
|  |           console.log( | ||||||
|  |             chalk.blue(padString('Key', lengths.key)), | ||||||
|  |             chalk.green(padString('Status', lengths.status)), | ||||||
|  |             chalk.yellow(padString('Type', lengths.type)), | ||||||
|  |             chalk.red(padString('Version', lengths.version)), | ||||||
|  |           ); | ||||||
|  |         } catch (error) { | ||||||
|  |           console.error('error', error); | ||||||
|  |         } | ||||||
|  |         data.forEach((item) => { | ||||||
|  |           console.log( | ||||||
|  |             chalk.blue(padString(item.key, lengths.key)), | ||||||
|  |             chalk.green(padString(item.status, lengths.status)), | ||||||
|  |             chalk.blue(padString(item.type, lengths.type)), | ||||||
|  |             chalk.green(padString(item.version, lengths.version)), | ||||||
|  |           ); | ||||||
|  |         }); | ||||||
|  |       } else { | ||||||
|  |         console.log(chalk.red(res.message || '获取列表失败')); | ||||||
|  |       } | ||||||
|  |       return; | ||||||
|  |     } | ||||||
|  |     if (opts.restart) { | ||||||
|  |       const res = await backServices.queryServiceOperate(opts.restart, 'restart'); | ||||||
|  |       if (res.code === 200) { | ||||||
|  |         console.log('restart success'); | ||||||
|  |       } else { | ||||||
|  |         console.error('restart failed', res.message); | ||||||
|  |       } | ||||||
|  |       return; | ||||||
|  |     } | ||||||
|  |     if (opts.start) { | ||||||
|  |       const res = await backServices.queryServiceOperate(opts.start, 'start'); | ||||||
|  |       if (res.code === 200) { | ||||||
|  |         console.log('start success'); | ||||||
|  |       } else { | ||||||
|  |         console.error('start failed', res.message); | ||||||
|  |       } | ||||||
|  |       return; | ||||||
|  |     } | ||||||
|  |     if (opts.stop) { | ||||||
|  |       const res = await backServices.queryServiceOperate(opts.stop, 'stop'); | ||||||
|  |       if (res.code === 200) { | ||||||
|  |         console.log('stop success'); | ||||||
|  |       } else { | ||||||
|  |         console.log(chalk.red('stop failed'), res.message); | ||||||
|  |       } | ||||||
|  |       return; | ||||||
|  |     } | ||||||
|  |     if (opts.info) { | ||||||
|  |       const res = await backServices.queryServiceList(); | ||||||
|  |       if (res.code === 200) { | ||||||
|  |         const data = res.data as ServiceItem[]; | ||||||
|  |         const item = data.find((item) => item.key === opts.info); | ||||||
|  |         if (!item) { | ||||||
|  |           console.log('not found'); | ||||||
|  |           return; | ||||||
|  |         } | ||||||
|  |         console.log(chalk.blue(item.key), chalk.green(item.status), chalk.yellow(item.type), chalk.red(item.version)); | ||||||
|  |         console.log('description:', chalk.blue(item.description)); | ||||||
|  |       } else { | ||||||
|  |         console.log(chalk.red(res.message || '获取列表失败')); | ||||||
|  |       } | ||||||
|  |     } | ||||||
|  |     if (opts.delete) { | ||||||
|  |       const res = await backServices.queryServiceOperate(opts.delete, 'delete'); | ||||||
|  |       if (res.code === 200) { | ||||||
|  |         console.log('delete success'); | ||||||
|  |       } else { | ||||||
|  |         console.log(chalk.red('delete failed'), res.message); | ||||||
|  |       } | ||||||
|  |     } | ||||||
|  |   }); | ||||||
|  | const detectCommand = new Command('detect').description('检测服务, 当返回内容不为true,则是有新增的内容').action(async () => { | ||||||
|  |   const res = await backServices.queryServiceDetect(); | ||||||
|  |   console.log('detect', res); | ||||||
|  | }); | ||||||
|  | program.addCommand(servicesCommand); | ||||||
|  | servicesCommand.addCommand(detectCommand); | ||||||
|   | |||||||
							
								
								
									
										94
									
								
								src/module/login/login-by-web.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										94
									
								
								src/module/login/login-by-web.ts
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,94 @@ | |||||||
|  | import MD5 from 'crypto-js/md5.js'; | ||||||
|  | import { getBaseURL, query } from '../query.ts'; | ||||||
|  | import { chalk } from '../chalk.ts'; | ||||||
|  | import jsonwebtoken from 'jsonwebtoken'; | ||||||
|  | import { BaseLoad } from '@kevisual/load'; | ||||||
|  | import { getConfig, writeConfig } from '../get-config.ts'; | ||||||
|  | export const saveToken = async (token: string) => { | ||||||
|  |   const config = await getConfig(); | ||||||
|  |   writeConfig({ | ||||||
|  |     ...config, | ||||||
|  |     token, | ||||||
|  |   }); | ||||||
|  | }; | ||||||
|  | type LoginWithWebOptions = {}; | ||||||
|  | export const loginWithWeb = async (opts?: LoginWithWebOptions) => { | ||||||
|  |   const baseURL = getBaseURL(); | ||||||
|  |   const randomId = Math.random().toString(36).substring(2, 15); | ||||||
|  |   const timestamp = Date.now(); | ||||||
|  |   const tokenSecret = 'xiao' + randomId; | ||||||
|  |   const sign = MD5(`${tokenSecret}${timestamp}`).toString(); | ||||||
|  |   const token = jsonwebtoken.sign({ randomId, timestamp, sign }, tokenSecret, { | ||||||
|  |     // 10分钟过期 | ||||||
|  |     expiresIn: 60 * 10, // 10分钟 | ||||||
|  |   }); | ||||||
|  |   const config = await getConfig(); | ||||||
|  |  | ||||||
|  |   const url = `${baseURL}/api/router?path=user&key=webLogin&p&loginToken=${token}&sign=${sign}&randomId=${randomId}`; | ||||||
|  |  | ||||||
|  |   console.log(chalk.blue(url)); | ||||||
|  |   return { | ||||||
|  |     url, | ||||||
|  |     token, | ||||||
|  |     tokenSecret, | ||||||
|  |   }; | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | type PollLoginOptions = { | ||||||
|  |   tokenSecret: string; | ||||||
|  | }; | ||||||
|  | export const pollLoginStatus = async (token: string, opts: PollLoginOptions) => { | ||||||
|  |   const load = new BaseLoad(); | ||||||
|  |   load.load( | ||||||
|  |     async () => { | ||||||
|  |       const res = await query.post({ | ||||||
|  |         path: 'user', | ||||||
|  |         key: 'checkLoginStatus', | ||||||
|  |         loginToken: token, | ||||||
|  |       }); | ||||||
|  |       return res; | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |       key: 'check-login-status', | ||||||
|  |       isReRun: true, | ||||||
|  |       checkSuccess: (data) => { | ||||||
|  |         return data?.code === 200; | ||||||
|  |       }, | ||||||
|  |     }, | ||||||
|  |   ); | ||||||
|  |   const res = await load.hasLoaded('check-login-status', { | ||||||
|  |     timeout: 60 * 3 * 1000, // 5分钟超时 | ||||||
|  |   }); | ||||||
|  |   if (res.code === 200 && res.data?.code === 200) { | ||||||
|  |     const data = res.data?.data; | ||||||
|  |     try { | ||||||
|  |       const payload = jsonwebtoken.verify(data, opts.tokenSecret) as UserPayload; | ||||||
|  |       type UserPayload = { | ||||||
|  |         userToken: { | ||||||
|  |           token: string; | ||||||
|  |           expireTime: number; | ||||||
|  |         }; | ||||||
|  |         user: { | ||||||
|  |           id: string; | ||||||
|  |           username: string; | ||||||
|  |         }; | ||||||
|  |       }; | ||||||
|  |       const userToken = payload.userToken; | ||||||
|  |       // console.log('token:\n\n', userToken); | ||||||
|  |       console.log(chalk.green('登录成功', payload?.user?.username)); | ||||||
|  |       await saveToken(userToken.token); | ||||||
|  |       return; | ||||||
|  |     } catch (error) { | ||||||
|  |       console.log(chalk.red('登录失败'), error); | ||||||
|  |     } | ||||||
|  |   } | ||||||
|  |   console.log(chalk.red('登录失败'), res); | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | export const loginInCommand = async () => { | ||||||
|  |   const { url, token, tokenSecret } = await loginWithWeb(); | ||||||
|  |   await pollLoginStatus(token, { tokenSecret }); | ||||||
|  |   return url; | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | // loginInCommand(); | ||||||
							
								
								
									
										55
									
								
								src/query/services/index.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										55
									
								
								src/query/services/index.ts
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,55 @@ | |||||||
|  | import { query } from '@/module/query.ts'; | ||||||
|  |  | ||||||
|  | type OperateAction = 'start' | 'stop' | 'restart' | 'reload' | 'delete' | 'update' | 'install' | 'uninstall'; | ||||||
|  | export const queryServiceOperate = async (appKey: string, action: OperateAction) => { | ||||||
|  |   if (['start', 'stop', 'restart'].indexOf(action) === -1) { | ||||||
|  |     throw new Error('Invalid action'); | ||||||
|  |   } | ||||||
|  |   return await query.post({ | ||||||
|  |     path: 'local-apps', | ||||||
|  |     key: 'operate', | ||||||
|  |     appKey: appKey, | ||||||
|  |     action: action, | ||||||
|  |   }); | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | export const queryServiceList = async () => { | ||||||
|  |   return await query.post({ | ||||||
|  |     path: 'local-apps', | ||||||
|  |     key: 'list', | ||||||
|  |   }); | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | export const queryServiceUpdate = async (appKey: string, data: any) => { | ||||||
|  |   return await query.post({ | ||||||
|  |     path: 'local-apps', | ||||||
|  |     key: 'update', | ||||||
|  |     appkey: appKey, | ||||||
|  |     data: data, | ||||||
|  |   }); | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | export const queryServiceDownload = async (id: string, token: string, installDeps: boolean = true) => { | ||||||
|  |   return await query.post({ | ||||||
|  |     path: 'local-apps', | ||||||
|  |     key: 'download', | ||||||
|  |     id: id, | ||||||
|  |     token: token, | ||||||
|  |     installDeps: installDeps, | ||||||
|  |   }); | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | export const queryServiceDetect = async () => { | ||||||
|  |   return await query.get({ | ||||||
|  |     path: 'local-apps', | ||||||
|  |     key: 'detect', | ||||||
|  |   }); | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | export const queryServiceDelect = async (appKey: string) => { | ||||||
|  |   return await query.get({ | ||||||
|  |     path: 'local-apps', | ||||||
|  |     key: 'delete', | ||||||
|  |     appKey: appKey, | ||||||
|  |   }); | ||||||
|  | }; | ||||||
		Reference in New Issue
	
	Block a user