From 6cf3beae944ef96ba9b2bdae01f4a89fae92ba04 Mon Sep 17 00:00:00 2001 From: abearxiong Date: Sun, 25 Jan 2026 02:56:56 +0800 Subject: [PATCH] update --- .gitignore | 4 +- apps/.gitignore | 2 - apps/package.json | 13 --- package.json | 10 +- pnpm-lock.yaml | 272 ++++++++++++++++++++++++++++++++++---------- src/command/jwks.ts | 74 ++++++++++++ src/index.ts | 2 + 7 files changed, 299 insertions(+), 78 deletions(-) delete mode 100644 apps/.gitignore delete mode 100644 apps/package.json create mode 100644 src/command/jwks.ts diff --git a/.gitignore b/.gitignore index dce687a..d3e7416 100644 --- a/.gitignore +++ b/.gitignore @@ -8,4 +8,6 @@ pack-dist assistant-app build -.pnpm-store \ No newline at end of file +.pnpm-store + +jwt \ No newline at end of file diff --git a/apps/.gitignore b/apps/.gitignore deleted file mode 100644 index ae76b4b..0000000 --- a/apps/.gitignore +++ /dev/null @@ -1,2 +0,0 @@ -container -root \ No newline at end of file diff --git a/apps/package.json b/apps/package.json deleted file mode 100644 index 5edf761..0000000 --- a/apps/package.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "name": "apps", - "version": "1.0.0", - "description": "", - "main": "index.js", - "type": "module", - "scripts": { - "test": "echo \"Error: no test specified\" && exit 1" - }, - "keywords": [], - "author": "", - "license": "ISC" -} diff --git a/package.json b/package.json index ea89a9c..52542ed 100644 --- a/package.json +++ b/package.json @@ -46,16 +46,18 @@ "dependencies": { "@inquirer/prompts": "^8.2.0", "@kevisual/app": "^0.0.2", + "@kevisual/auth": "^2.0.3", "@kevisual/context": "^0.0.4", "@kevisual/use-config": "^1.0.28", - "@opencode-ai/sdk": "^1.1.28", + "@opencode-ai/sdk": "^1.1.34", "@types/busboy": "^1.5.4", "busboy": "^1.6.0", "eventemitter3": "^5.0.4", + "jose": "^6.1.3", "lowdb": "^7.0.1", - "pm2": "latest", "lru-cache": "^11.2.4", "micromatch": "^4.0.8", + "pm2": "latest", "semver": "^7.7.3", "unstorage": "^1.17.4" }, @@ -63,13 +65,13 @@ "@kevisual/dts": "^0.0.3", "@kevisual/load": "^0.0.6", "@kevisual/logger": "^0.0.4", - "@kevisual/query": "0.0.37", + "@kevisual/query": "0.0.38", "@kevisual/query-login": "0.0.7", "@types/bun": "^1.3.6", "@types/crypto-js": "^4.2.2", "@types/jsonwebtoken": "^9.0.10", "@types/micromatch": "^4.0.10", - "@types/node": "^25.0.9", + "@types/node": "^25.0.10", "@types/semver": "^7.7.1", "chalk": "^5.6.2", "commander": "^14.0.2", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 8ef9a60..3a396a8 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -10,10 +10,13 @@ importers: dependencies: '@inquirer/prompts': specifier: ^8.2.0 - version: 8.2.0(@types/node@25.0.9) + version: 8.2.0(@types/node@25.0.10) '@kevisual/app': specifier: ^0.0.2 version: 0.0.2(dotenv@17.2.3) + '@kevisual/auth': + specifier: ^2.0.3 + version: 2.0.3 '@kevisual/context': specifier: ^0.0.4 version: 0.0.4 @@ -21,8 +24,8 @@ importers: specifier: ^1.0.28 version: 1.0.28(dotenv@17.2.3) '@opencode-ai/sdk': - specifier: ^1.1.28 - version: 1.1.28 + specifier: ^1.1.34 + version: 1.1.34 '@types/busboy': specifier: ^1.5.4 version: 1.5.4 @@ -32,6 +35,9 @@ importers: eventemitter3: specifier: ^5.0.4 version: 5.0.4 + jose: + specifier: ^6.1.3 + version: 6.1.3 lowdb: specifier: ^7.0.1 version: 7.0.1 @@ -61,11 +67,11 @@ importers: specifier: ^0.0.4 version: 0.0.4 '@kevisual/query': - specifier: 0.0.37 - version: 0.0.37 + specifier: 0.0.38 + version: 0.0.38 '@kevisual/query-login': specifier: 0.0.7 - version: 0.0.7(@kevisual/query@0.0.37) + version: 0.0.7(@kevisual/query@0.0.38) '@types/bun': specifier: ^1.3.6 version: 1.3.6 @@ -79,8 +85,8 @@ importers: specifier: ^4.0.10 version: 4.0.10 '@types/node': - specifier: ^25.0.9 - version: 25.0.9 + specifier: ^25.0.10 + version: 25.0.10 '@types/semver': specifier: ^7.7.1 version: 7.7.1 @@ -243,16 +249,16 @@ importers: dependencies: '@astrojs/mdx': specifier: ^4.3.13 - version: 4.3.13(astro@5.16.11(@types/node@25.0.9)(idb-keyval@6.2.2)(jiti@2.6.1)(lightningcss@1.30.2)(rollup@4.43.0)(typescript@5.8.2)) + version: 4.3.13(astro@5.16.11(@types/node@25.0.10)(idb-keyval@6.2.2)(jiti@2.6.1)(lightningcss@1.30.2)(rollup@4.43.0)(typescript@5.8.2)) '@astrojs/react': specifier: ^4.4.2 - version: 4.4.2(@types/node@25.0.9)(@types/react-dom@19.2.3(@types/react@19.2.8))(@types/react@19.2.8)(jiti@2.6.1)(lightningcss@1.30.2)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + version: 4.4.2(@types/node@25.0.10)(@types/react-dom@19.2.3(@types/react@19.2.8))(@types/react@19.2.8)(jiti@2.6.1)(lightningcss@1.30.2)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) '@astrojs/sitemap': specifier: ^3.7.0 version: 3.7.0 '@astrojs/vue': specifier: ^5.1.4 - version: 5.1.4(@types/node@25.0.9)(astro@5.16.11(@types/node@25.0.9)(idb-keyval@6.2.2)(jiti@2.6.1)(lightningcss@1.30.2)(rollup@4.43.0)(typescript@5.8.2))(jiti@2.6.1)(lightningcss@1.30.2)(rollup@4.43.0)(vue@3.5.26(typescript@5.8.2)) + version: 5.1.4(@types/node@25.0.10)(astro@5.16.11(@types/node@25.0.10)(idb-keyval@6.2.2)(jiti@2.6.1)(lightningcss@1.30.2)(rollup@4.43.0)(typescript@5.8.2))(jiti@2.6.1)(lightningcss@1.30.2)(rollup@4.43.0)(vue@3.5.26(typescript@5.8.2)) '@kevisual/api': specifier: ^0.0.17 version: 0.0.17 @@ -276,7 +282,7 @@ importers: version: 1.2.4(@types/react@19.2.8)(react@19.2.3) '@tailwindcss/vite': specifier: ^4.1.18 - version: 4.1.18(vite@6.4.1(@types/node@25.0.9)(jiti@2.6.1)(lightningcss@1.30.2)) + version: 4.1.18(vite@6.4.1(@types/node@25.0.10)(jiti@2.6.1)(lightningcss@1.30.2)) '@uiw/react-md-editor': specifier: ^4.0.11 version: 4.0.11(@types/react@19.2.8)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) @@ -285,7 +291,7 @@ importers: version: 6.2.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3) astro: specifier: ^5.16.11 - version: 5.16.11(@types/node@25.0.9)(idb-keyval@6.2.2)(jiti@2.6.1)(lightningcss@1.30.2)(rollup@4.43.0)(typescript@5.8.2) + version: 5.16.11(@types/node@25.0.10)(idb-keyval@6.2.2)(jiti@2.6.1)(lightningcss@1.30.2)(rollup@4.43.0)(typescript@5.8.2) class-variance-authority: specifier: ^0.7.1 version: 0.7.1 @@ -1287,6 +1293,9 @@ packages: '@kevisual/app@0.0.2': resolution: {integrity: sha512-DdUkrsLxHO31y5nYl1qAoBPbvTrunztN3z84ow73Of3kZADJRKmjZtrSOMX53vGVgg74AoLOxbYggoWvil9Ifg==} + '@kevisual/auth@2.0.3': + resolution: {integrity: sha512-4xpijaIhlCTr/DlJaV/gmkCQeg45EO1yxWpRvUX+1jCdVbuxSR0wZrF0SD9oybnjmKWMKDNPLsXyduFjMGcItA==} + '@kevisual/cache@0.0.3': resolution: {integrity: sha512-BWEck69KYL96/ywjYVkML974RHjDJTj2ITQND1zFPR+hlBV1H1p55QZgSYRJCObg3EAV1S9Zic/fR2T4pfe8yg==} @@ -1344,6 +1353,9 @@ packages: '@kevisual/query@0.0.37': resolution: {integrity: sha512-ukBhExI7PdQZMfPYjLGbgf7/MJWtNcJbiHcvI1YLwEQnPotjNn5gLxeizfgCR1iW62+fg5Rj2s7Lq9FrvvxaYw==} + '@kevisual/query@0.0.38': + resolution: {integrity: sha512-bfvbSodsZyMfwY+1T2SvDeOCKsT/AaIxlVe0+B1R/fNhlg2MDq2CP0L9HKiFkEm+OXrvXcYDMKPUituVUM5J6Q==} + '@kevisual/registry@0.0.1': resolution: {integrity: sha512-//OHu9m4JDrMjgP8o8dcjZd3D3IAUkRVlkTSviouZEH7r5m7mccA3Hvzw0XJ/lelx6exC6LWsyv6c4uV0Dp+gw==} @@ -1432,6 +1444,9 @@ packages: '@opencode-ai/sdk@1.1.28': resolution: {integrity: sha512-fR5mPWu4O6Pu1u+Bj5eUpZix1PCOSSDh7GeE/KyM5pFEqLLoxcNjon5XRMNVggGI4zEFjq48pxdpP4z4mbGeew==} + '@opencode-ai/sdk@1.1.34': + resolution: {integrity: sha512-ToR20PJSiuLEY2WnJpBH8X1qmfCcmSoP4qk/TXgIr/yDnmlYmhCwk2ruA540RX4A2hXi2LJXjAqpjeRxxtLNCQ==} + '@oslojs/encoding@1.1.0': resolution: {integrity: sha512-70wQhgYmndg4GCPxPPxPGevRKqTIJ2Nh4OkiMWmDAVYsTQ+Ta7Sq+rPevXyXGdzr30/qZBnyOalCszoMxlyldQ==} @@ -2356,6 +2371,9 @@ packages: '@types/node@17.0.45': resolution: {integrity: sha512-w+tIMs3rq2afQdsPJlODhoUEKzFP1ayaoyl1CcnwtIlsVe7K7bA1NGm4s3PraqTLlXnbIN84zuBlxBWo1u9BLw==} + '@types/node@25.0.10': + resolution: {integrity: sha512-zWW5KPngR/yvakJgGOmZ5vTBemDoSqF3AcV/LrO5u5wTWyEAVVh+IT39G4gtyAkh3CtTZs8aX/yRM82OfzHJRg==} + '@types/node@25.0.9': resolution: {integrity: sha512-/rpCXHlCWeqClNBwUhDcusJxXYDjZTyE8v5oTO7WbL8eij2nKhUeU89/6xgjU7N4/Vh3He0BtyhJdQbDyhiXAw==} @@ -3555,6 +3573,9 @@ packages: resolution: {integrity: sha512-ekilCSN1jwRvIbgeg/57YFh8qQDNbwDb9xT/qu2DAHbFFZUicIl4ygVaAvzveMhMVr3LnpSKTNnwt8PoOfmKhQ==} hasBin: true + jose@6.1.3: + resolution: {integrity: sha512-0TpaTfihd4QMNwrz/ob2Bp7X04yuxJkjRGi4aKmOqwhov54i6u79oCv7T+C7lo70MKH6BesI3vscD1yb/yzKXQ==} + js-git@0.7.8: resolution: {integrity: sha512-+E5ZH/HeRnoc/LW0AmAyhU+mNcWBzAKE+30+IDMLSLbbK+Tdt02AdkOKq9u15rlJsDEGFqtgckc8ZM59LhhiUA==} @@ -5177,12 +5198,12 @@ snapshots: transitivePeerDependencies: - supports-color - '@astrojs/mdx@4.3.13(astro@5.16.11(@types/node@25.0.9)(idb-keyval@6.2.2)(jiti@2.6.1)(lightningcss@1.30.2)(rollup@4.43.0)(typescript@5.8.2))': + '@astrojs/mdx@4.3.13(astro@5.16.11(@types/node@25.0.10)(idb-keyval@6.2.2)(jiti@2.6.1)(lightningcss@1.30.2)(rollup@4.43.0)(typescript@5.8.2))': dependencies: '@astrojs/markdown-remark': 6.3.10 '@mdx-js/mdx': 3.1.1 acorn: 8.15.0 - astro: 5.16.11(@types/node@25.0.9)(idb-keyval@6.2.2)(jiti@2.6.1)(lightningcss@1.30.2)(rollup@4.43.0)(typescript@5.8.2) + astro: 5.16.11(@types/node@25.0.10)(idb-keyval@6.2.2)(jiti@2.6.1)(lightningcss@1.30.2)(rollup@4.43.0)(typescript@5.8.2) es-module-lexer: 1.7.0 estree-util-visit: 2.0.0 hast-util-to-html: 9.0.5 @@ -5200,15 +5221,15 @@ snapshots: dependencies: prismjs: 1.30.0 - '@astrojs/react@4.4.2(@types/node@25.0.9)(@types/react-dom@19.2.3(@types/react@19.2.8))(@types/react@19.2.8)(jiti@2.6.1)(lightningcss@1.30.2)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)': + '@astrojs/react@4.4.2(@types/node@25.0.10)(@types/react-dom@19.2.3(@types/react@19.2.8))(@types/react@19.2.8)(jiti@2.6.1)(lightningcss@1.30.2)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)': dependencies: '@types/react': 19.2.8 '@types/react-dom': 19.2.3(@types/react@19.2.8) - '@vitejs/plugin-react': 4.7.0(vite@6.4.1(@types/node@25.0.9)(jiti@2.6.1)(lightningcss@1.30.2)) + '@vitejs/plugin-react': 4.7.0(vite@6.4.1(@types/node@25.0.10)(jiti@2.6.1)(lightningcss@1.30.2)) react: 19.2.3 react-dom: 19.2.3(react@19.2.3) ultrahtml: 1.6.0 - vite: 6.4.1(@types/node@25.0.9)(jiti@2.6.1)(lightningcss@1.30.2) + vite: 6.4.1(@types/node@25.0.10)(jiti@2.6.1)(lightningcss@1.30.2) transitivePeerDependencies: - '@types/node' - jiti @@ -5241,14 +5262,14 @@ snapshots: transitivePeerDependencies: - supports-color - '@astrojs/vue@5.1.4(@types/node@25.0.9)(astro@5.16.11(@types/node@25.0.9)(idb-keyval@6.2.2)(jiti@2.6.1)(lightningcss@1.30.2)(rollup@4.43.0)(typescript@5.8.2))(jiti@2.6.1)(lightningcss@1.30.2)(rollup@4.43.0)(vue@3.5.26(typescript@5.8.2))': + '@astrojs/vue@5.1.4(@types/node@25.0.10)(astro@5.16.11(@types/node@25.0.10)(idb-keyval@6.2.2)(jiti@2.6.1)(lightningcss@1.30.2)(rollup@4.43.0)(typescript@5.8.2))(jiti@2.6.1)(lightningcss@1.30.2)(rollup@4.43.0)(vue@3.5.26(typescript@5.8.2))': dependencies: - '@vitejs/plugin-vue': 5.2.4(vite@6.4.1(@types/node@25.0.9)(jiti@2.6.1)(lightningcss@1.30.2))(vue@3.5.26(typescript@5.8.2)) - '@vitejs/plugin-vue-jsx': 4.2.0(vite@6.4.1(@types/node@25.0.9)(jiti@2.6.1)(lightningcss@1.30.2))(vue@3.5.26(typescript@5.8.2)) + '@vitejs/plugin-vue': 5.2.4(vite@6.4.1(@types/node@25.0.10)(jiti@2.6.1)(lightningcss@1.30.2))(vue@3.5.26(typescript@5.8.2)) + '@vitejs/plugin-vue-jsx': 4.2.0(vite@6.4.1(@types/node@25.0.10)(jiti@2.6.1)(lightningcss@1.30.2))(vue@3.5.26(typescript@5.8.2)) '@vue/compiler-sfc': 3.5.26 - astro: 5.16.11(@types/node@25.0.9)(idb-keyval@6.2.2)(jiti@2.6.1)(lightningcss@1.30.2)(rollup@4.43.0)(typescript@5.8.2) - vite: 6.4.1(@types/node@25.0.9)(jiti@2.6.1)(lightningcss@1.30.2) - vite-plugin-vue-devtools: 7.7.9(rollup@4.43.0)(vite@6.4.1(@types/node@25.0.9)(jiti@2.6.1)(lightningcss@1.30.2))(vue@3.5.26(typescript@5.8.2)) + astro: 5.16.11(@types/node@25.0.10)(idb-keyval@6.2.2)(jiti@2.6.1)(lightningcss@1.30.2)(rollup@4.43.0)(typescript@5.8.2) + vite: 6.4.1(@types/node@25.0.10)(jiti@2.6.1)(lightningcss@1.30.2) + vite-plugin-vue-devtools: 7.7.9(rollup@4.43.0)(vite@6.4.1(@types/node@25.0.10)(jiti@2.6.1)(lightningcss@1.30.2))(vue@3.5.26(typescript@5.8.2)) vue: 3.5.26(typescript@5.8.2) transitivePeerDependencies: - '@nuxt/kit' @@ -6251,6 +6272,15 @@ snapshots: '@inquirer/ansi@2.0.3': {} + '@inquirer/checkbox@5.0.4(@types/node@25.0.10)': + dependencies: + '@inquirer/ansi': 2.0.3 + '@inquirer/core': 11.1.1(@types/node@25.0.10) + '@inquirer/figures': 2.0.3 + '@inquirer/type': 4.0.3(@types/node@25.0.10) + optionalDependencies: + '@types/node': 25.0.10 + '@inquirer/checkbox@5.0.4(@types/node@25.0.9)': dependencies: '@inquirer/ansi': 2.0.3 @@ -6260,6 +6290,13 @@ snapshots: optionalDependencies: '@types/node': 25.0.9 + '@inquirer/confirm@6.0.4(@types/node@25.0.10)': + dependencies: + '@inquirer/core': 11.1.1(@types/node@25.0.10) + '@inquirer/type': 4.0.3(@types/node@25.0.10) + optionalDependencies: + '@types/node': 25.0.10 + '@inquirer/confirm@6.0.4(@types/node@25.0.9)': dependencies: '@inquirer/core': 11.1.1(@types/node@25.0.9) @@ -6267,6 +6304,18 @@ snapshots: optionalDependencies: '@types/node': 25.0.9 + '@inquirer/core@11.1.1(@types/node@25.0.10)': + dependencies: + '@inquirer/ansi': 2.0.3 + '@inquirer/figures': 2.0.3 + '@inquirer/type': 4.0.3(@types/node@25.0.10) + cli-width: 4.1.0 + mute-stream: 3.0.0 + signal-exit: 4.1.0 + wrap-ansi: 9.0.2 + optionalDependencies: + '@types/node': 25.0.10 + '@inquirer/core@11.1.1(@types/node@25.0.9)': dependencies: '@inquirer/ansi': 2.0.3 @@ -6279,6 +6328,14 @@ snapshots: optionalDependencies: '@types/node': 25.0.9 + '@inquirer/editor@5.0.4(@types/node@25.0.10)': + dependencies: + '@inquirer/core': 11.1.1(@types/node@25.0.10) + '@inquirer/external-editor': 2.0.3(@types/node@25.0.10) + '@inquirer/type': 4.0.3(@types/node@25.0.10) + optionalDependencies: + '@types/node': 25.0.10 + '@inquirer/editor@5.0.4(@types/node@25.0.9)': dependencies: '@inquirer/core': 11.1.1(@types/node@25.0.9) @@ -6287,6 +6344,13 @@ snapshots: optionalDependencies: '@types/node': 25.0.9 + '@inquirer/expand@5.0.4(@types/node@25.0.10)': + dependencies: + '@inquirer/core': 11.1.1(@types/node@25.0.10) + '@inquirer/type': 4.0.3(@types/node@25.0.10) + optionalDependencies: + '@types/node': 25.0.10 + '@inquirer/expand@5.0.4(@types/node@25.0.9)': dependencies: '@inquirer/core': 11.1.1(@types/node@25.0.9) @@ -6294,6 +6358,13 @@ snapshots: optionalDependencies: '@types/node': 25.0.9 + '@inquirer/external-editor@2.0.3(@types/node@25.0.10)': + dependencies: + chardet: 2.1.1 + iconv-lite: 0.7.2 + optionalDependencies: + '@types/node': 25.0.10 + '@inquirer/external-editor@2.0.3(@types/node@25.0.9)': dependencies: chardet: 2.1.1 @@ -6303,6 +6374,13 @@ snapshots: '@inquirer/figures@2.0.3': {} + '@inquirer/input@5.0.4(@types/node@25.0.10)': + dependencies: + '@inquirer/core': 11.1.1(@types/node@25.0.10) + '@inquirer/type': 4.0.3(@types/node@25.0.10) + optionalDependencies: + '@types/node': 25.0.10 + '@inquirer/input@5.0.4(@types/node@25.0.9)': dependencies: '@inquirer/core': 11.1.1(@types/node@25.0.9) @@ -6310,6 +6388,13 @@ snapshots: optionalDependencies: '@types/node': 25.0.9 + '@inquirer/number@4.0.4(@types/node@25.0.10)': + dependencies: + '@inquirer/core': 11.1.1(@types/node@25.0.10) + '@inquirer/type': 4.0.3(@types/node@25.0.10) + optionalDependencies: + '@types/node': 25.0.10 + '@inquirer/number@4.0.4(@types/node@25.0.9)': dependencies: '@inquirer/core': 11.1.1(@types/node@25.0.9) @@ -6317,6 +6402,14 @@ snapshots: optionalDependencies: '@types/node': 25.0.9 + '@inquirer/password@5.0.4(@types/node@25.0.10)': + dependencies: + '@inquirer/ansi': 2.0.3 + '@inquirer/core': 11.1.1(@types/node@25.0.10) + '@inquirer/type': 4.0.3(@types/node@25.0.10) + optionalDependencies: + '@types/node': 25.0.10 + '@inquirer/password@5.0.4(@types/node@25.0.9)': dependencies: '@inquirer/ansi': 2.0.3 @@ -6325,6 +6418,21 @@ snapshots: optionalDependencies: '@types/node': 25.0.9 + '@inquirer/prompts@8.2.0(@types/node@25.0.10)': + dependencies: + '@inquirer/checkbox': 5.0.4(@types/node@25.0.10) + '@inquirer/confirm': 6.0.4(@types/node@25.0.10) + '@inquirer/editor': 5.0.4(@types/node@25.0.10) + '@inquirer/expand': 5.0.4(@types/node@25.0.10) + '@inquirer/input': 5.0.4(@types/node@25.0.10) + '@inquirer/number': 4.0.4(@types/node@25.0.10) + '@inquirer/password': 5.0.4(@types/node@25.0.10) + '@inquirer/rawlist': 5.2.0(@types/node@25.0.10) + '@inquirer/search': 4.1.0(@types/node@25.0.10) + '@inquirer/select': 5.0.4(@types/node@25.0.10) + optionalDependencies: + '@types/node': 25.0.10 + '@inquirer/prompts@8.2.0(@types/node@25.0.9)': dependencies: '@inquirer/checkbox': 5.0.4(@types/node@25.0.9) @@ -6340,6 +6448,13 @@ snapshots: optionalDependencies: '@types/node': 25.0.9 + '@inquirer/rawlist@5.2.0(@types/node@25.0.10)': + dependencies: + '@inquirer/core': 11.1.1(@types/node@25.0.10) + '@inquirer/type': 4.0.3(@types/node@25.0.10) + optionalDependencies: + '@types/node': 25.0.10 + '@inquirer/rawlist@5.2.0(@types/node@25.0.9)': dependencies: '@inquirer/core': 11.1.1(@types/node@25.0.9) @@ -6347,6 +6462,14 @@ snapshots: optionalDependencies: '@types/node': 25.0.9 + '@inquirer/search@4.1.0(@types/node@25.0.10)': + dependencies: + '@inquirer/core': 11.1.1(@types/node@25.0.10) + '@inquirer/figures': 2.0.3 + '@inquirer/type': 4.0.3(@types/node@25.0.10) + optionalDependencies: + '@types/node': 25.0.10 + '@inquirer/search@4.1.0(@types/node@25.0.9)': dependencies: '@inquirer/core': 11.1.1(@types/node@25.0.9) @@ -6355,6 +6478,15 @@ snapshots: optionalDependencies: '@types/node': 25.0.9 + '@inquirer/select@5.0.4(@types/node@25.0.10)': + dependencies: + '@inquirer/ansi': 2.0.3 + '@inquirer/core': 11.1.1(@types/node@25.0.10) + '@inquirer/figures': 2.0.3 + '@inquirer/type': 4.0.3(@types/node@25.0.10) + optionalDependencies: + '@types/node': 25.0.10 + '@inquirer/select@5.0.4(@types/node@25.0.9)': dependencies: '@inquirer/ansi': 2.0.3 @@ -6364,6 +6496,10 @@ snapshots: optionalDependencies: '@types/node': 25.0.9 + '@inquirer/type@4.0.3(@types/node@25.0.10)': + optionalDependencies: + '@types/node': 25.0.10 + '@inquirer/type@4.0.3(@types/node@25.0.9)': optionalDependencies: '@types/node': 25.0.9 @@ -6446,6 +6582,8 @@ snapshots: - dotenv - supports-color + '@kevisual/auth@2.0.3': {} + '@kevisual/cache@0.0.3': dependencies: idb-keyval: 6.2.1 @@ -6538,6 +6676,12 @@ snapshots: '@kevisual/query': 0.0.37 dotenv: 17.2.3 + '@kevisual/query-login@0.0.7(@kevisual/query@0.0.38)': + dependencies: + '@kevisual/cache': 0.0.3 + '@kevisual/query': 0.0.38 + dotenv: 17.2.3 + '@kevisual/query@0.0.31': {} '@kevisual/query@0.0.32': {} @@ -6550,6 +6694,10 @@ snapshots: dependencies: tslib: 2.8.1 + '@kevisual/query@0.0.38': + dependencies: + tslib: 2.8.1 + '@kevisual/registry@0.0.1(typescript@5.8.2)': dependencies: class-variance-authority: 0.7.1 @@ -6716,6 +6864,8 @@ snapshots: '@opencode-ai/sdk@1.1.28': {} + '@opencode-ai/sdk@1.1.34': {} + '@oslojs/encoding@1.1.0': {} '@peculiar/asn1-cms@2.6.0': @@ -7774,12 +7924,12 @@ snapshots: '@tailwindcss/oxide-win32-arm64-msvc': 4.1.18 '@tailwindcss/oxide-win32-x64-msvc': 4.1.18 - '@tailwindcss/vite@4.1.18(vite@6.4.1(@types/node@25.0.9)(jiti@2.6.1)(lightningcss@1.30.2))': + '@tailwindcss/vite@4.1.18(vite@6.4.1(@types/node@25.0.10)(jiti@2.6.1)(lightningcss@1.30.2))': dependencies: '@tailwindcss/node': 4.1.18 '@tailwindcss/oxide': 4.1.18 tailwindcss: 4.1.18 - vite: 6.4.1(@types/node@25.0.9)(jiti@2.6.1)(lightningcss@1.30.2) + vite: 6.4.1(@types/node@25.0.10)(jiti@2.6.1)(lightningcss@1.30.2) '@tootallnate/quickjs-emscripten@0.23.0': {} @@ -7812,7 +7962,7 @@ snapshots: '@types/busboy@1.5.4': dependencies: - '@types/node': 25.0.9 + '@types/node': 25.0.10 '@types/crypto-js@4.2.2': {} @@ -7837,7 +7987,7 @@ snapshots: '@types/jsonwebtoken@9.0.10': dependencies: '@types/ms': 0.7.34 - '@types/node': 25.0.9 + '@types/node': 25.0.10 '@types/lodash-es@4.17.12': dependencies: @@ -7863,6 +8013,10 @@ snapshots: '@types/node@17.0.45': {} + '@types/node@25.0.10': + dependencies: + undici-types: 7.16.0 + '@types/node@25.0.9': dependencies: undici-types: 7.16.0 @@ -7881,13 +8035,13 @@ snapshots: '@types/sax@1.2.7': dependencies: - '@types/node': 25.0.9 + '@types/node': 25.0.10 '@types/semver@7.7.1': {} '@types/send@1.2.1': dependencies: - '@types/node': 25.0.9 + '@types/node': 25.0.10 '@types/trusted-types@2.0.7': {} @@ -7897,7 +8051,7 @@ snapshots: '@types/ws@8.18.1': dependencies: - '@types/node': 25.0.9 + '@types/node': 25.0.10 '@uiw/copy-to-clipboard@1.0.19': {} @@ -7936,7 +8090,7 @@ snapshots: '@ungap/structured-clone@1.3.0': {} - '@vitejs/plugin-react@4.7.0(vite@6.4.1(@types/node@25.0.9)(jiti@2.6.1)(lightningcss@1.30.2))': + '@vitejs/plugin-react@4.7.0(vite@6.4.1(@types/node@25.0.10)(jiti@2.6.1)(lightningcss@1.30.2))': dependencies: '@babel/core': 7.28.5 '@babel/plugin-transform-react-jsx-self': 7.27.1(@babel/core@7.28.5) @@ -7944,24 +8098,24 @@ snapshots: '@rolldown/pluginutils': 1.0.0-beta.27 '@types/babel__core': 7.20.5 react-refresh: 0.17.0 - vite: 6.4.1(@types/node@25.0.9)(jiti@2.6.1)(lightningcss@1.30.2) + vite: 6.4.1(@types/node@25.0.10)(jiti@2.6.1)(lightningcss@1.30.2) transitivePeerDependencies: - supports-color - '@vitejs/plugin-vue-jsx@4.2.0(vite@6.4.1(@types/node@25.0.9)(jiti@2.6.1)(lightningcss@1.30.2))(vue@3.5.26(typescript@5.8.2))': + '@vitejs/plugin-vue-jsx@4.2.0(vite@6.4.1(@types/node@25.0.10)(jiti@2.6.1)(lightningcss@1.30.2))(vue@3.5.26(typescript@5.8.2))': dependencies: '@babel/core': 7.28.5 '@babel/plugin-transform-typescript': 7.28.5(@babel/core@7.28.5) '@rolldown/pluginutils': 1.0.0-beta.55 '@vue/babel-plugin-jsx': 1.5.0(@babel/core@7.28.5) - vite: 6.4.1(@types/node@25.0.9)(jiti@2.6.1)(lightningcss@1.30.2) + vite: 6.4.1(@types/node@25.0.10)(jiti@2.6.1)(lightningcss@1.30.2) vue: 3.5.26(typescript@5.8.2) transitivePeerDependencies: - supports-color - '@vitejs/plugin-vue@5.2.4(vite@6.4.1(@types/node@25.0.9)(jiti@2.6.1)(lightningcss@1.30.2))(vue@3.5.26(typescript@5.8.2))': + '@vitejs/plugin-vue@5.2.4(vite@6.4.1(@types/node@25.0.10)(jiti@2.6.1)(lightningcss@1.30.2))(vue@3.5.26(typescript@5.8.2))': dependencies: - vite: 6.4.1(@types/node@25.0.9)(jiti@2.6.1)(lightningcss@1.30.2) + vite: 6.4.1(@types/node@25.0.10)(jiti@2.6.1)(lightningcss@1.30.2) vue: 3.5.26(typescript@5.8.2) '@vue/babel-helper-vue-transform-on@1.5.0': {} @@ -8023,14 +8177,14 @@ snapshots: '@vue/compiler-dom': 3.5.26 '@vue/shared': 3.5.26 - '@vue/devtools-core@7.7.9(vite@6.4.1(@types/node@25.0.9)(jiti@2.6.1)(lightningcss@1.30.2))(vue@3.5.26(typescript@5.8.2))': + '@vue/devtools-core@7.7.9(vite@6.4.1(@types/node@25.0.10)(jiti@2.6.1)(lightningcss@1.30.2))(vue@3.5.26(typescript@5.8.2))': dependencies: '@vue/devtools-kit': 7.7.9 '@vue/devtools-shared': 7.7.9 mitt: 3.0.1 nanoid: 5.1.6 pathe: 2.0.3 - vite-hot-client: 2.1.0(vite@6.4.1(@types/node@25.0.9)(jiti@2.6.1)(lightningcss@1.30.2)) + vite-hot-client: 2.1.0(vite@6.4.1(@types/node@25.0.10)(jiti@2.6.1)(lightningcss@1.30.2)) vue: 3.5.26(typescript@5.8.2) transitivePeerDependencies: - vite @@ -8196,7 +8350,7 @@ snapshots: astring@1.9.0: {} - astro@5.16.11(@types/node@25.0.9)(idb-keyval@6.2.2)(jiti@2.6.1)(lightningcss@1.30.2)(rollup@4.43.0)(typescript@5.8.2): + astro@5.16.11(@types/node@25.0.10)(idb-keyval@6.2.2)(jiti@2.6.1)(lightningcss@1.30.2)(rollup@4.43.0)(typescript@5.8.2): dependencies: '@astrojs/compiler': 2.13.0 '@astrojs/internal-helpers': 0.7.5 @@ -8253,8 +8407,8 @@ snapshots: unist-util-visit: 5.0.0 unstorage: 1.17.4(idb-keyval@6.2.2) vfile: 6.0.3 - vite: 6.4.1(@types/node@25.0.9)(jiti@2.6.1)(lightningcss@1.30.2) - vitefu: 1.1.1(vite@6.4.1(@types/node@25.0.9)(jiti@2.6.1)(lightningcss@1.30.2)) + vite: 6.4.1(@types/node@25.0.10)(jiti@2.6.1)(lightningcss@1.30.2) + vitefu: 1.1.1(vite@6.4.1(@types/node@25.0.10)(jiti@2.6.1)(lightningcss@1.30.2)) xxhash-wasm: 1.1.0 yargs-parser: 21.1.1 yocto-spinner: 0.2.3 @@ -8357,7 +8511,7 @@ snapshots: bun-types@1.3.6: dependencies: - '@types/node': 25.0.9 + '@types/node': 25.0.10 bundle-name@4.1.0: dependencies: @@ -9320,6 +9474,8 @@ snapshots: jiti@2.6.1: {} + jose@6.1.3: {} + js-git@0.7.8: dependencies: bodec: 0.1.0 @@ -11038,11 +11194,11 @@ snapshots: '@types/unist': 3.0.3 vfile-message: 4.0.3 - vite-hot-client@2.1.0(vite@6.4.1(@types/node@25.0.9)(jiti@2.6.1)(lightningcss@1.30.2)): + vite-hot-client@2.1.0(vite@6.4.1(@types/node@25.0.10)(jiti@2.6.1)(lightningcss@1.30.2)): dependencies: - vite: 6.4.1(@types/node@25.0.9)(jiti@2.6.1)(lightningcss@1.30.2) + vite: 6.4.1(@types/node@25.0.10)(jiti@2.6.1)(lightningcss@1.30.2) - vite-plugin-inspect@0.8.9(rollup@4.43.0)(vite@6.4.1(@types/node@25.0.9)(jiti@2.6.1)(lightningcss@1.30.2)): + vite-plugin-inspect@0.8.9(rollup@4.43.0)(vite@6.4.1(@types/node@25.0.10)(jiti@2.6.1)(lightningcss@1.30.2)): dependencies: '@antfu/utils': 0.7.10 '@rollup/pluginutils': 5.3.0(rollup@4.43.0) @@ -11053,28 +11209,28 @@ snapshots: perfect-debounce: 1.0.0 picocolors: 1.1.1 sirv: 3.0.2 - vite: 6.4.1(@types/node@25.0.9)(jiti@2.6.1)(lightningcss@1.30.2) + vite: 6.4.1(@types/node@25.0.10)(jiti@2.6.1)(lightningcss@1.30.2) transitivePeerDependencies: - rollup - supports-color - vite-plugin-vue-devtools@7.7.9(rollup@4.43.0)(vite@6.4.1(@types/node@25.0.9)(jiti@2.6.1)(lightningcss@1.30.2))(vue@3.5.26(typescript@5.8.2)): + vite-plugin-vue-devtools@7.7.9(rollup@4.43.0)(vite@6.4.1(@types/node@25.0.10)(jiti@2.6.1)(lightningcss@1.30.2))(vue@3.5.26(typescript@5.8.2)): dependencies: - '@vue/devtools-core': 7.7.9(vite@6.4.1(@types/node@25.0.9)(jiti@2.6.1)(lightningcss@1.30.2))(vue@3.5.26(typescript@5.8.2)) + '@vue/devtools-core': 7.7.9(vite@6.4.1(@types/node@25.0.10)(jiti@2.6.1)(lightningcss@1.30.2))(vue@3.5.26(typescript@5.8.2)) '@vue/devtools-kit': 7.7.9 '@vue/devtools-shared': 7.7.9 execa: 9.6.1 sirv: 3.0.2 - vite: 6.4.1(@types/node@25.0.9)(jiti@2.6.1)(lightningcss@1.30.2) - vite-plugin-inspect: 0.8.9(rollup@4.43.0)(vite@6.4.1(@types/node@25.0.9)(jiti@2.6.1)(lightningcss@1.30.2)) - vite-plugin-vue-inspector: 5.3.2(vite@6.4.1(@types/node@25.0.9)(jiti@2.6.1)(lightningcss@1.30.2)) + vite: 6.4.1(@types/node@25.0.10)(jiti@2.6.1)(lightningcss@1.30.2) + vite-plugin-inspect: 0.8.9(rollup@4.43.0)(vite@6.4.1(@types/node@25.0.10)(jiti@2.6.1)(lightningcss@1.30.2)) + vite-plugin-vue-inspector: 5.3.2(vite@6.4.1(@types/node@25.0.10)(jiti@2.6.1)(lightningcss@1.30.2)) transitivePeerDependencies: - '@nuxt/kit' - rollup - supports-color - vue - vite-plugin-vue-inspector@5.3.2(vite@6.4.1(@types/node@25.0.9)(jiti@2.6.1)(lightningcss@1.30.2)): + vite-plugin-vue-inspector@5.3.2(vite@6.4.1(@types/node@25.0.10)(jiti@2.6.1)(lightningcss@1.30.2)): dependencies: '@babel/core': 7.28.5 '@babel/plugin-proposal-decorators': 7.28.0(@babel/core@7.28.5) @@ -11085,11 +11241,11 @@ snapshots: '@vue/compiler-dom': 3.5.26 kolorist: 1.8.0 magic-string: 0.30.21 - vite: 6.4.1(@types/node@25.0.9)(jiti@2.6.1)(lightningcss@1.30.2) + vite: 6.4.1(@types/node@25.0.10)(jiti@2.6.1)(lightningcss@1.30.2) transitivePeerDependencies: - supports-color - vite@6.4.1(@types/node@25.0.9)(jiti@2.6.1)(lightningcss@1.30.2): + vite@6.4.1(@types/node@25.0.10)(jiti@2.6.1)(lightningcss@1.30.2): dependencies: esbuild: 0.25.12 fdir: 6.5.0(picomatch@4.0.2) @@ -11098,14 +11254,14 @@ snapshots: rollup: 4.43.0 tinyglobby: 0.2.15 optionalDependencies: - '@types/node': 25.0.9 + '@types/node': 25.0.10 fsevents: 2.3.3 jiti: 2.6.1 lightningcss: 1.30.2 - vitefu@1.1.1(vite@6.4.1(@types/node@25.0.9)(jiti@2.6.1)(lightningcss@1.30.2)): + vitefu@1.1.1(vite@6.4.1(@types/node@25.0.10)(jiti@2.6.1)(lightningcss@1.30.2)): optionalDependencies: - vite: 6.4.1(@types/node@25.0.9)(jiti@2.6.1)(lightningcss@1.30.2) + vite: 6.4.1(@types/node@25.0.10)(jiti@2.6.1)(lightningcss@1.30.2) vizion@2.2.1: dependencies: diff --git a/src/command/jwks.ts b/src/command/jwks.ts new file mode 100644 index 0000000..75d0314 --- /dev/null +++ b/src/command/jwks.ts @@ -0,0 +1,74 @@ +import { generate } from '@kevisual/auth' + +import { program, Command } from '@/program.ts'; +import fs from 'node:fs'; +import path from 'node:path'; +export const getPath = async (dir: string) => { + const JWKS_PATH = path.join(dir, 'jwks.json'); + const PRIVATE_JWK_PATH = path.join(dir, 'privateKey.json'); + + const PRIVATE_KEY_PATH = path.join(dir, 'privateKey.txt'); + const PUBLIC_KEY_PATH = path.join(dir, 'publicKey.txt'); + return { + JWKS_PATH, + PRIVATE_JWK_PATH, + PRIVATE_KEY_PATH, + PUBLIC_KEY_PATH, + } +} +const jwksCmd = new Command('jwks') + .description('JWKS 相关命令') + .action(async (opts) => { + }); + +const jwksGenerate = new Command('generate') + .alias('gen') + .option('-d , --dir ', '指定保存目录,默认当前目录下 jwt 文件夹', 'jwt') + .description('生成 JWKS 密钥对') + .action(async (opts) => { + const dir = path.isAbsolute(opts.dir) ? opts.dir : path.join(process.cwd(), opts.dir); + if (!fs.existsSync(dir)) { + fs.mkdirSync(dir, { recursive: true }); + } + const { JWKS_PATH, PRIVATE_JWK_PATH, PRIVATE_KEY_PATH, PUBLIC_KEY_PATH } = await getPath(dir); + const { jwks, privateJWK, privatePEM, publicPEM } = await generate(); + fs.writeFileSync(PUBLIC_KEY_PATH, publicPEM); + fs.writeFileSync(PRIVATE_KEY_PATH, privatePEM); + fs.writeFileSync(PRIVATE_JWK_PATH, JSON.stringify(privateJWK, null, 2)); + fs.writeFileSync(JWKS_PATH, JSON.stringify(jwks, null, 2)); + console.log(`Keys have been saved to directory: ${dir}`); + }); + +jwksCmd.addCommand(jwksGenerate); + +const getJWKS = new Command('get') + .description('获取 JWKS 内容') + .option('-d , --dir ', '指定 JWKS 所在目录,默认当前目录下 jwt 文件夹', 'jwt') + .option('-t, --type ', '指定获取类型,jwks 或 privateJWK', 'jwks') + .action(async (opts) => { + const dir = path.isAbsolute(opts.dir) ? opts.dir : path.join(process.cwd(), opts.dir); + const { JWKS_PATH, PRIVATE_JWK_PATH } = await getPath(dir); + const type = opts.type || 'jwks'; + if (type !== 'jwks') { + if (!fs.existsSync(PRIVATE_JWK_PATH)) { + console.error(`Private JWK file not found in directory: ${dir}`); + return; + } + const privateJWKContent = fs.readFileSync(PRIVATE_JWK_PATH, 'utf-8'); + console.log('Private JWK:\n'); + console.log(privateJWKContent); + return; + } + + if (!fs.existsSync(JWKS_PATH)) { + console.error(`JWKS file not found in directory: ${dir}`); + return; + } + const jwksContent = fs.readFileSync(JWKS_PATH, 'utf-8'); + console.log('PublicJWKS:\n'); + console.log(jwksContent); + }); + +jwksCmd.addCommand(getJWKS); + +program.addCommand(jwksCmd); \ No newline at end of file diff --git a/src/index.ts b/src/index.ts index d149b16..54007ed 100644 --- a/src/index.ts +++ b/src/index.ts @@ -19,6 +19,8 @@ import './command/config-secret-remote.ts'; import './command/ai.ts'; import './command/claude/cc.ts' import './command/docker.ts'; +import './command/jwks.ts'; + // program.parse(process.argv); export const runParser = async (argv: string[]) => {