From 28d73de149f8611591b83528f18fa465b10202c5 Mon Sep 17 00:00:00 2001 From: Nixieboluo Date: Mon, 20 Apr 2026 11:48:48 +0800 Subject: [PATCH 1/5] chore(frontend): bump to node 24 Signed-off-by: Nixieboluo --- frontend/.nvmrc | 2 +- frontend/Dockerfile | 2 +- frontend/desktop/README.md | 2 +- frontend/desktop/package.json | 2 +- frontend/package.json | 2 +- frontend/packages/client-sdk/package.json | 4 ++-- frontend/packages/gtm/package.json | 2 +- frontend/packages/mcp-sdk/package.json | 2 +- frontend/packages/shadcn-ui/package.json | 2 +- frontend/packages/shared/package.json | 2 +- frontend/providers/aiproxy/package.json | 2 +- frontend/providers/aiproxy/tsconfig.json | 2 +- frontend/providers/applaunchpad/package.json | 2 +- frontend/providers/cloudserver/package.json | 2 +- frontend/providers/costcenter/package.json | 2 +- frontend/providers/cronjob/package.json | 2 +- frontend/providers/dbprovider/package.json | 2 +- frontend/providers/devbox/package.json | 2 +- frontend/providers/devbox/tsconfig.json | 4 ++-- frontend/providers/invite/package.json | 2 +- frontend/providers/kubepanel/package.json | 2 +- frontend/providers/kubepanel/tsconfig.json | 24 +++++-------------- frontend/providers/license/package.json | 2 +- frontend/providers/objectstorage/package.json | 2 +- frontend/providers/template/package.json | 2 +- frontend/providers/terminal/package.json | 2 +- frontend/tsconfig.base.json | 2 +- 27 files changed, 34 insertions(+), 46 deletions(-) diff --git a/frontend/.nvmrc b/frontend/.nvmrc index 92bc26a4217b..eefb690f4abf 100644 --- a/frontend/.nvmrc +++ b/frontend/.nvmrc @@ -1 +1 @@ -20.20.2 \ No newline at end of file +24.15.0 \ No newline at end of file diff --git a/frontend/Dockerfile b/frontend/Dockerfile index 8282fe818e02..bc36db8993ba 100644 --- a/frontend/Dockerfile +++ b/frontend/Dockerfile @@ -11,7 +11,7 @@ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. -FROM node:20.20.2-alpine AS base +FROM node:24.15.0-alpine AS base ENV PNPM_HOME="/pnpm" ENV PATH="$PNPM_HOME:$PATH" WORKDIR /app diff --git a/frontend/desktop/README.md b/frontend/desktop/README.md index b203efee9b0e..46e0e7169b81 100644 --- a/frontend/desktop/README.md +++ b/frontend/desktop/README.md @@ -139,7 +139,7 @@ Open [http://localhost:3000](http://localhost:3000) with your browser to see the "devDependencies": { "@types/js-yaml": "^4.0.5", "@types/lodash": "^4.14.194", - "@types/node": "18.15.11", + "@types/node": "^24", "@types/nprogress": "^0.2.0", "@types/react": "18.0.37", "@types/react-dom": "18.0.11" diff --git a/frontend/desktop/package.json b/frontend/desktop/package.json index d91e0056012d..84153e857b8d 100644 --- a/frontend/desktop/package.json +++ b/frontend/desktop/package.json @@ -103,7 +103,7 @@ "@types/jsonwebtoken": "^9.0.3", "@types/lodash": "^4.14.199", "@types/minio": "^7.1.1", - "@types/node": "18.15.11", + "@types/node": "^24", "@types/nodemailer": "^6.4.15", "@types/nprogress": "^0.2.1", "@types/react": "18.3.27", diff --git a/frontend/package.json b/frontend/package.json index d1f7595cdd84..8a2637dcf67a 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -52,7 +52,7 @@ }, "packageManager": "pnpm@8.9.0", "engines": { - "node": "20.20.2", + "node": "24.15.0", "pnpm": "8.9.0" } } diff --git a/frontend/packages/client-sdk/package.json b/frontend/packages/client-sdk/package.json index 5e3e53652661..aa5f5689a6c4 100644 --- a/frontend/packages/client-sdk/package.json +++ b/frontend/packages/client-sdk/package.json @@ -57,7 +57,7 @@ "@rollup/plugin-typescript": "^11.1.4", "@types/js-cookie": "^3.0.4", "@types/js-yaml": "^4.0.6", - "@types/node": "^20.7.1", + "@types/node": "^24", "@types/uuid": "^9.0.4", "rollup": "2.79.1", "rollup-plugin-copy": "^3.5.0", @@ -74,4 +74,4 @@ "peerDependencies": { "@kubernetes/client-node": "^0.18.1" } -} \ No newline at end of file +} diff --git a/frontend/packages/gtm/package.json b/frontend/packages/gtm/package.json index a74c9e37a7b3..258c660ec0ed 100644 --- a/frontend/packages/gtm/package.json +++ b/frontend/packages/gtm/package.json @@ -50,7 +50,7 @@ }, "devDependencies": { "@types/react": "18.3.27", - "@types/node": "18.15.11", + "@types/node": "^24", "typescript": "^5.0.0" } } diff --git a/frontend/packages/mcp-sdk/package.json b/frontend/packages/mcp-sdk/package.json index cc8d01810d85..5e16a9cc3d88 100644 --- a/frontend/packages/mcp-sdk/package.json +++ b/frontend/packages/mcp-sdk/package.json @@ -33,7 +33,7 @@ "license": "ISC", "devDependencies": { "@rollup/plugin-typescript": "^11.1.4", - "@types/node": "^20.7.1", + "@types/node": "^24", "rollup": "2.79.1", "rollup-plugin-copy": "^3.5.0", "rollup-plugin-dts": "^4.2.3", diff --git a/frontend/packages/shadcn-ui/package.json b/frontend/packages/shadcn-ui/package.json index 51ef80461164..e500463aa515 100644 --- a/frontend/packages/shadcn-ui/package.json +++ b/frontend/packages/shadcn-ui/package.json @@ -35,7 +35,7 @@ "tw-animate-css": "^1.3.4" }, "devDependencies": { - "@types/node": "^20.7.1", + "@types/node": "^24", "@types/react": "18.3.27", "@types/react-dom": "18.3.7", "@vitejs/plugin-react": "^5.1.1", diff --git a/frontend/packages/shared/package.json b/frontend/packages/shared/package.json index 53b248fcaaaa..a56c9f4078da 100644 --- a/frontend/packages/shared/package.json +++ b/frontend/packages/shared/package.json @@ -102,7 +102,7 @@ "@chakra-ui/react": "^2.8.1", "@tanstack/react-query": "^4.36.1", "@types/js-yaml": "^4.0.9", - "@types/node": "^20.7.1", + "@types/node": "^24", "@types/react": "18.3.27", "@types/react-dom": "18.3.7", "@vitejs/plugin-react": "^5.1.1", diff --git a/frontend/providers/aiproxy/package.json b/frontend/providers/aiproxy/package.json index 28b56027de54..b6e8f945a610 100644 --- a/frontend/providers/aiproxy/package.json +++ b/frontend/providers/aiproxy/package.json @@ -64,7 +64,7 @@ }, "devDependencies": { "@types/jsonwebtoken": "^9.0.3", - "@types/node": "^20", + "@types/node": "^24", "@types/react": "18.3.27", "@types/react-dom": "18.3.7", "@types/react-syntax-highlighter": "^15.5.7", diff --git a/frontend/providers/aiproxy/tsconfig.json b/frontend/providers/aiproxy/tsconfig.json index 6e3b26607db5..9510caa43d9a 100644 --- a/frontend/providers/aiproxy/tsconfig.json +++ b/frontend/providers/aiproxy/tsconfig.json @@ -2,7 +2,7 @@ "compilerOptions": { "baseUrl": ".", "lib": ["dom", "dom.iterable", "esnext"], - "target": "ES2020", + "target": "esnext", "forceConsistentCasingInFileNames": false, "paths": { "@/*": ["./*"] diff --git a/frontend/providers/applaunchpad/package.json b/frontend/providers/applaunchpad/package.json index 68620eafc074..a66f777ac0c2 100644 --- a/frontend/providers/applaunchpad/package.json +++ b/frontend/providers/applaunchpad/package.json @@ -87,7 +87,7 @@ "@types/js-cookie": "^3.0.4", "@types/js-yaml": "^4.0.6", "@types/lodash": "^4.14.199", - "@types/node": "18.13.0", + "@types/node": "^24", "@types/nprogress": "^0.2.1", "@types/react": "18.3.27", "@types/react-dom": "18.3.7", diff --git a/frontend/providers/cloudserver/package.json b/frontend/providers/cloudserver/package.json index 6d57e86e5753..c6799517f9a8 100644 --- a/frontend/providers/cloudserver/package.json +++ b/frontend/providers/cloudserver/package.json @@ -60,7 +60,7 @@ "@types/js-yaml": "^4.0.6", "@types/jsonwebtoken": "^9.0.3", "@types/lodash": "^4.14.199", - "@types/node": "18.13.0", + "@types/node": "^24", "@types/nprogress": "^0.2.1", "@types/react": "18.3.27", "@types/react-dom": "18.3.7", diff --git a/frontend/providers/costcenter/package.json b/frontend/providers/costcenter/package.json index 7b8908563adf..5e8e8d2663e0 100644 --- a/frontend/providers/costcenter/package.json +++ b/frontend/providers/costcenter/package.json @@ -73,7 +73,7 @@ "@types/js-yaml": "^4.0.6", "@types/jsonwebtoken": "^9.0.3", "@types/lodash": "^4.14.199", - "@types/node": "18.15.5", + "@types/node": "^24", "@types/nprogress": "^0.2.1", "@types/react": "18.3.27", "@types/react-dom": "18.3.7", diff --git a/frontend/providers/cronjob/package.json b/frontend/providers/cronjob/package.json index c5b7e8437c30..0d98882e73dd 100644 --- a/frontend/providers/cronjob/package.json +++ b/frontend/providers/cronjob/package.json @@ -66,7 +66,7 @@ "@types/js-cookie": "^3.0.4", "@types/js-yaml": "^4.0.6", "@types/lodash": "^4.14.199", - "@types/node": "18.13.0", + "@types/node": "^24", "@types/nprogress": "^0.2.1", "@types/react": "18.3.27", "@types/react-dom": "18.3.7", diff --git a/frontend/providers/dbprovider/package.json b/frontend/providers/dbprovider/package.json index 46e0bbbe8afe..4c059274567e 100644 --- a/frontend/providers/dbprovider/package.json +++ b/frontend/providers/dbprovider/package.json @@ -83,7 +83,7 @@ "@types/js-yaml": "^4.0.6", "@types/lodash": "^4.14.199", "@types/multer": "^1.4.10", - "@types/node": "18.13.0", + "@types/node": "^24", "@types/nprogress": "^0.2.1", "@types/papaparse": "^5.3.15", "@types/react": "18.3.27", diff --git a/frontend/providers/devbox/package.json b/frontend/providers/devbox/package.json index 3344df0aafa1..2027813883c9 100644 --- a/frontend/providers/devbox/package.json +++ b/frontend/providers/devbox/package.json @@ -84,7 +84,7 @@ "@types/js-yaml": "^4.0.9", "@types/jsonwebtoken": "^9.0.3", "@types/lodash": "^4.14.199", - "@types/node": "^20", + "@types/node": "^24", "@types/nprogress": "^0.2.3", "@types/react": "18.3.27", "@types/react-dom": "18.3.7", diff --git a/frontend/providers/devbox/tsconfig.json b/frontend/providers/devbox/tsconfig.json index e187d64dd7c9..0d99bde2efd3 100644 --- a/frontend/providers/devbox/tsconfig.json +++ b/frontend/providers/devbox/tsconfig.json @@ -2,8 +2,8 @@ "extends": "../../tsconfig.web.json", "compilerOptions": { "baseUrl": ".", - "lib": ["dom", "dom.iterable", "ES2022"], - "target": "es2022", + "lib": ["dom", "dom.iterable", "esnext"], + "target": "esnext", "forceConsistentCasingInFileNames": false, "moduleResolution": "bundler", "paths": { diff --git a/frontend/providers/invite/package.json b/frontend/providers/invite/package.json index 4650ee7fb510..39ebf7928e3f 100644 --- a/frontend/providers/invite/package.json +++ b/frontend/providers/invite/package.json @@ -56,7 +56,7 @@ "@types/js-cookie": "^3.0.4", "@types/js-yaml": "^4.0.6", "@types/lodash": "^4.14.199", - "@types/node": "18.13.0", + "@types/node": "^24", "@types/nprogress": "^0.2.1", "@types/react": "18.3.27", "@types/react-dom": "18.3.7", diff --git a/frontend/providers/kubepanel/package.json b/frontend/providers/kubepanel/package.json index b64e5772a694..ca0a07541f4a 100644 --- a/frontend/providers/kubepanel/package.json +++ b/frontend/providers/kubepanel/package.json @@ -45,7 +45,7 @@ "@tailwindcss/postcss": "^4.1.17", "@types/js-yaml": "^4.0.9", "@types/lodash": "^4.17.21", - "@types/node": "^24.0.0", + "@types/node": "^24", "@types/nprogress": "^0.2.3", "@types/react": "18.3.27", "autoprefixer": "^10.4.22", diff --git a/frontend/providers/kubepanel/tsconfig.json b/frontend/providers/kubepanel/tsconfig.json index 2ec2ce764ec5..ed828a5acd31 100644 --- a/frontend/providers/kubepanel/tsconfig.json +++ b/frontend/providers/kubepanel/tsconfig.json @@ -3,12 +3,8 @@ "noUncheckedIndexedAccess": true, "experimentalDecorators": true, "useDefineForClassFields": true, - "target": "ESNext", - "lib": [ - "dom", - "dom.iterable", - "esnext" - ], + "target": "esnext", + "lib": ["dom", "dom.iterable", "esnext"], "allowJs": true, "skipLibCheck": true, "strict": true, @@ -21,18 +17,10 @@ "jsx": "preserve", "incremental": true, "paths": { - "@/*": [ - "./src/*" - ] + "@/*": ["./src/*"] }, "forceConsistentCasingInFileNames": true }, - "include": [ - "next-env.d.ts", - "**/*.ts", - "**/*.tsx" - ], - "exclude": [ - "node_modules" - ] -} \ No newline at end of file + "include": ["next-env.d.ts", "**/*.ts", "**/*.tsx"], + "exclude": ["node_modules"] +} diff --git a/frontend/providers/license/package.json b/frontend/providers/license/package.json index 26e83778286e..00f1c7a1f099 100644 --- a/frontend/providers/license/package.json +++ b/frontend/providers/license/package.json @@ -61,7 +61,7 @@ "@types/js-yaml": "^4.0.6", "@types/jsonwebtoken": "^9.0.3", "@types/lodash": "^4.14.199", - "@types/node": "18.13.0", + "@types/node": "^24", "@types/nprogress": "^0.2.1", "@types/react": "18.3.27", "@types/react-dom": "18.3.7", diff --git a/frontend/providers/objectstorage/package.json b/frontend/providers/objectstorage/package.json index 87a778e67b24..3d057bc31e51 100644 --- a/frontend/providers/objectstorage/package.json +++ b/frontend/providers/objectstorage/package.json @@ -62,7 +62,7 @@ "@types/js-yaml": "^4.0.6", "@types/jsonwebtoken": "^9.0.3", "@types/lodash": "^4.14.199", - "@types/node": "^20", + "@types/node": "^24", "@types/react": "18.3.27", "@types/react-dom": "18.3.7", "@vitejs/plugin-react": "^5.1.1", diff --git a/frontend/providers/template/package.json b/frontend/providers/template/package.json index c5a43433d02c..e221a9b16bd2 100644 --- a/frontend/providers/template/package.json +++ b/frontend/providers/template/package.json @@ -85,7 +85,7 @@ "@types/js-cookie": "^3.0.4", "@types/js-yaml": "^4.0.6", "@types/lodash": "^4.14.199", - "@types/node": "18.13.0", + "@types/node": "^24", "@types/nprogress": "^0.2.1", "@types/pluralize": "^0.0.33", "@types/react": "18.3.27", diff --git a/frontend/providers/terminal/package.json b/frontend/providers/terminal/package.json index 49139ddb92cf..96db3d4eaed1 100644 --- a/frontend/providers/terminal/package.json +++ b/frontend/providers/terminal/package.json @@ -51,7 +51,7 @@ "@playwright/test": "^1.58.1", "@types/js-yaml": "^4.0.6", "@types/lodash": "^4.14.199", - "@types/node": "18.15.5", + "@types/node": "^24", "@types/react": "18.3.27", "@types/react-dom": "18.3.7", "@vitejs/plugin-react": "^5.1.1", diff --git a/frontend/tsconfig.base.json b/frontend/tsconfig.base.json index e7c73a3c31ba..18b7261a053a 100644 --- a/frontend/tsconfig.base.json +++ b/frontend/tsconfig.base.json @@ -1,6 +1,6 @@ { "compilerOptions": { - "target": "es2022", + "target": "esnext", "module": "esnext", "noEmit": true, "moduleResolution": "node", From 70fed46b75028c37b7f4777188ce8d26b15c8cd6 Mon Sep 17 00:00:00 2001 From: Nixieboluo Date: Mon, 20 Apr 2026 16:41:12 +0800 Subject: [PATCH 2/5] chore(frontend): bump echarts to 5.6.0 Signed-off-by: Nixieboluo --- frontend/pnpm-lock.yaml | 21 +++++++++++++++---- .../aiproxy/app/[lng]/(user)/home/page.tsx | 5 ++++- frontend/providers/aiproxy/package.json | 10 ++++----- frontend/providers/applaunchpad/package.json | 6 +++--- .../src/components/app/detail/index/Pods.tsx | 1 - .../components/app/detail/logs/LogCounts.tsx | 6 +++++- .../src/components/apps/list/columns/CPU.tsx | 6 +++++- .../components/apps/list/columns/Memory.tsx | 6 +++++- .../src/pages/app/detail/monitor.tsx | 6 +++++- 9 files changed, 49 insertions(+), 18 deletions(-) diff --git a/frontend/pnpm-lock.yaml b/frontend/pnpm-lock.yaml index 32aecfb9fe1c..f209e1ce4b27 100644 --- a/frontend/pnpm-lock.yaml +++ b/frontend/pnpm-lock.yaml @@ -772,8 +772,8 @@ importers: specifier: ^9.0.8 version: 9.0.8(react@18.3.1) echarts: - specifier: ^5.4.3 - version: 5.4.3 + specifier: ^5.6.0 + version: 5.6.0 framer-motion: specifier: ^10.16.4 version: 10.16.5(react-dom@18.3.1)(react@18.3.1) @@ -986,8 +986,8 @@ importers: specifier: ^5.6.1 version: 5.6.1 echarts: - specifier: ^5.4.3 - version: 5.4.3 + specifier: ^5.6.0 + version: 5.6.0 fast-json-patch: specifier: ^3.1.1 version: 3.1.1 @@ -17671,6 +17671,13 @@ packages: zrender: 5.4.4 dev: false + /echarts@5.6.0: + resolution: {integrity: sha512-oTbVTsXfKuEhxftHqL5xprgLoc0k7uScAwtryCgWF6hPYFLRwOUHiFmHGCBKP5NPFNkDVopOieyUqYGH8Fa3kA==} + dependencies: + tslib: 2.3.0 + zrender: 5.6.1 + dev: false + /ee-first@1.0.3: resolution: {integrity: sha512-1q/3kz+ZwmrrWpJcCCrBZ3JnBzB1BMA5EVW9nxnIP1LxDZ16Cqs9VdolqLWlExet1vU+bar3WSkAa4/YrA9bIw==} dev: false @@ -30046,6 +30053,12 @@ packages: tslib: 2.3.0 dev: false + /zrender@5.6.1: + resolution: {integrity: sha512-OFXkDJKcrlx5su2XbzJvj/34Q3m6PvyCZkVPHGYpcCJ52ek4U/ymZyfuV1nKE23AyBJ51E/6Yr0mhZ7xGTO4ag==} + dependencies: + tslib: 2.3.0 + dev: false + /zustand@4.4.7(@types/react@18.3.27)(immer@10.0.3)(react@18.3.1): resolution: {integrity: sha512-QFJWJMdlETcI69paJwhSMJz7PPWjVP8Sjhclxmxmxv/RYI7ZOvR5BHX+ktH0we9gTWQMxcne8q1OY8xxz604gw==} engines: {node: '>=12.7.0'} diff --git a/frontend/providers/aiproxy/app/[lng]/(user)/home/page.tsx b/frontend/providers/aiproxy/app/[lng]/(user)/home/page.tsx index 3ef570431dc6..5334a581d264 100644 --- a/frontend/providers/aiproxy/app/[lng]/(user)/home/page.tsx +++ b/frontend/providers/aiproxy/app/[lng]/(user)/home/page.tsx @@ -4,6 +4,7 @@ import { useState } from 'react'; import { Box, Button, Center, Flex, Text } from '@chakra-ui/react'; import { CurrencySymbol, MySelect } from '@sealos/ui'; import { useQuery, UseQueryResult } from '@tanstack/react-query'; +import dynamic from 'next/dynamic'; import { getDashboardData } from '@/api/platform'; import { useTranslationClientSide } from '@/app/i18n/client'; @@ -12,7 +13,9 @@ import { useBackendStore } from '@/store/backend'; import { QueryKey } from '@/types/query-key'; import { DashboardResponse } from '@/types/user/dashboard'; -import RequestDataChart from './components/RequestDataChart'; +const RequestDataChart = dynamic(() => import('./components/RequestDataChart'), { + ssr: false, +}); export default function Home(): React.JSX.Element { const { lng } = useI18n(); diff --git a/frontend/providers/aiproxy/package.json b/frontend/providers/aiproxy/package.json index b6e8f945a610..2e234f01bfdc 100644 --- a/frontend/providers/aiproxy/package.json +++ b/frontend/providers/aiproxy/package.json @@ -35,7 +35,7 @@ "axios": "^1.7.7", "date-fns": "^2.30.0", "downshift": "^9.0.8", - "echarts": "^5.4.3", + "echarts": "^5.6.0", "framer-motion": "^10.16.4", "i18next": "^23.11.5", "i18next-browser-languagedetector": "^8.0.0", @@ -63,6 +63,7 @@ "zustand": "^4.5.4" }, "devDependencies": { + "@playwright/test": "^1.58.1", "@types/jsonwebtoken": "^9.0.3", "@types/node": "^24", "@types/react": "18.3.27", @@ -70,6 +71,8 @@ "@types/react-syntax-highlighter": "^15.5.7", "@types/swagger-ui-react": "^5.18.0", "@vitejs/plugin-react": "^5.1.1", + "@vitest/browser": "4.0.15", + "@vitest/browser-playwright": "4.0.15", "eslint": "^8", "eslint-config-next": "15.0.1", "eslint-config-prettier": "^9.1.0", @@ -78,9 +81,6 @@ "tailwindcss": "^3.4.1", "typescript": "^5", "vite-tsconfig-paths": "^5.1.4", - "vitest": "^4.0.12", - "@playwright/test": "^1.58.1", - "@vitest/browser": "4.0.15", - "@vitest/browser-playwright": "4.0.15" + "vitest": "^4.0.12" } } diff --git a/frontend/providers/applaunchpad/package.json b/frontend/providers/applaunchpad/package.json index a66f777ac0c2..4d2feb097b98 100644 --- a/frontend/providers/applaunchpad/package.json +++ b/frontend/providers/applaunchpad/package.json @@ -41,7 +41,7 @@ "decimal.js": "^10.4.3", "dns": "^0.2.2", "dns-packet": "^5.6.1", - "echarts": "^5.4.3", + "echarts": "^5.6.0", "fast-json-patch": "^3.1.1", "formidable": "^3.5.1", "framer-motion": "^10.16.4", @@ -77,8 +77,6 @@ "devDependencies": { "@svgr/webpack": "^6.5.1", "@tailwindcss/postcss": "^4.1.10", - "tailwindcss": "^4.1.10", - "geist": "^1.4.2", "@testing-library/dom": "^10.4.1", "@testing-library/react": "^14.0.0", "@types/base64-stream": "^1.0.5", @@ -96,8 +94,10 @@ "@vitest/ui": "4.0.12", "eslint": "8.33.0", "eslint-config-next": "13.5.9", + "geist": "^1.4.2", "jsdom": "^27.2.0", "svg-inline-loader": "^0.8.2", + "tailwindcss": "^4.1.10", "vite-tsconfig-paths": "^5.1.4", "vitest": "^4.0.12", "webpack-bundle-analyzer": "^4.9.1" diff --git a/frontend/providers/applaunchpad/src/components/app/detail/index/Pods.tsx b/frontend/providers/applaunchpad/src/components/app/detail/index/Pods.tsx index 9c876c227980..048cb8ae8a6d 100644 --- a/frontend/providers/applaunchpad/src/components/app/detail/index/Pods.tsx +++ b/frontend/providers/applaunchpad/src/components/app/detail/index/Pods.tsx @@ -1,5 +1,4 @@ import { restartPodByName } from '@/api/app'; -import PodLineChart from '@/components/PodLineChart'; import { PodStatusEnum } from '@/constants/app'; import { useConfirm } from '@/hooks/useConfirm'; import { useLoading } from '@/hooks/useLoading'; diff --git a/frontend/providers/applaunchpad/src/components/app/detail/logs/LogCounts.tsx b/frontend/providers/applaunchpad/src/components/app/detail/logs/LogCounts.tsx index bd1314f17c60..7f8b4cf25082 100644 --- a/frontend/providers/applaunchpad/src/components/app/detail/logs/LogCounts.tsx +++ b/frontend/providers/applaunchpad/src/components/app/detail/logs/LogCounts.tsx @@ -1,13 +1,17 @@ import MyIcon from '@/components/Icon'; -import LogBarChart from '@/components/LogBarChart'; import { Button } from '@sealos/shadcn-ui/button'; import { Loading } from '@sealos/shadcn-ui/loading'; import { cn } from '@sealos/shadcn-ui'; import { useTranslation } from 'next-i18next'; +import dynamic from 'next/dynamic'; import { useState } from 'react'; import EmptyChart from '@/components/Icon/icons/emptyChart.svg'; import { ChevronRight, BarChart3 } from 'lucide-react'; +const LogBarChart = dynamic(() => import('@/components/LogBarChart'), { + ssr: false +}); + export const LogCounts = ({ logCountsData, isLogCountsLoading diff --git a/frontend/providers/applaunchpad/src/components/apps/list/columns/CPU.tsx b/frontend/providers/applaunchpad/src/components/apps/list/columns/CPU.tsx index 9994dc8bc336..fd3e4872919e 100644 --- a/frontend/providers/applaunchpad/src/components/apps/list/columns/CPU.tsx +++ b/frontend/providers/applaunchpad/src/components/apps/list/columns/CPU.tsx @@ -1,10 +1,14 @@ import { memo } from 'react'; import { type CellContext } from '@tanstack/react-table'; +import dynamic from 'next/dynamic'; import { AppListItemType } from '@/types/app'; -import PodLineChart from '@/components/PodLineChart'; import { EMPTY_MONITOR_DATA } from '@/constants/monitor'; +const PodLineChart = dynamic(() => import('@/components/PodLineChart'), { + ssr: false +}); + export const CPU = memo>( ({ row }) => { const item = row.original; diff --git a/frontend/providers/applaunchpad/src/components/apps/list/columns/Memory.tsx b/frontend/providers/applaunchpad/src/components/apps/list/columns/Memory.tsx index 1f82d8a4f698..004e3acbc0ef 100644 --- a/frontend/providers/applaunchpad/src/components/apps/list/columns/Memory.tsx +++ b/frontend/providers/applaunchpad/src/components/apps/list/columns/Memory.tsx @@ -1,10 +1,14 @@ import { memo } from 'react'; import { type CellContext } from '@tanstack/react-table'; +import dynamic from 'next/dynamic'; import { AppListItemType } from '@/types/app'; -import PodLineChart from '@/components/PodLineChart'; import { EMPTY_MONITOR_DATA } from '@/constants/monitor'; +const PodLineChart = dynamic(() => import('@/components/PodLineChart'), { + ssr: false +}); + export const Memory = memo>( ({ row }) => { const item = row.original; diff --git a/frontend/providers/applaunchpad/src/pages/app/detail/monitor.tsx b/frontend/providers/applaunchpad/src/pages/app/detail/monitor.tsx index 3a61c6ddd42a..82cce5d1756f 100644 --- a/frontend/providers/applaunchpad/src/pages/app/detail/monitor.tsx +++ b/frontend/providers/applaunchpad/src/pages/app/detail/monitor.tsx @@ -4,7 +4,6 @@ import { serviceSideProps } from '@/utils/i18n'; import { useQuery } from '@tanstack/react-query'; import { useTranslation } from 'react-i18next'; import Header, { MonitorTab } from '@/components/Monitor/Header'; -import MonitorChart from '@/components/MonitorChart'; import { useCallback, useEffect, useMemo, useState } from 'react'; import { ListItem } from '@/components/AdvancedSelect'; import useDateTimeStore from '@/store/date'; @@ -15,8 +14,13 @@ import { generatePvcNameRegex } from '@/utils/tools'; import { parseTimeRange } from '@/utils/timeRange'; import { Skeleton } from '@sealos/shadcn-ui/skeleton'; import { Tabs, TabsContent, TabsList, TabsTrigger } from '@sealos/shadcn-ui/tabs'; +import dynamic from 'next/dynamic'; import { useRouter } from 'next/router'; +const MonitorChart = dynamic(() => import('@/components/MonitorChart'), { + ssr: false +}); + const getPaddedAxisMax = (value: { max: number }) => { const rawMax = value?.max ?? 0; if (rawMax <= 0) return 1; From 9a264c3a5758a3d773fc89cbbabcb0565a0e7f6a Mon Sep 17 00:00:00 2001 From: Nixieboluo Date: Sat, 9 May 2026 15:58:24 +0800 Subject: [PATCH 3/5] chore(frontend): bump to node 26.1.0 Signed-off-by: Nixieboluo --- frontend/.nvmrc | 2 +- frontend/Dockerfile | 4 +- frontend/desktop/package.json | 12 +- frontend/package.json | 2 +- frontend/pnpm-lock.yaml | 903 +++++++----------------- frontend/providers/aiproxy/package.json | 2 +- frontend/providers/devbox/package.json | 2 +- frontend/providers/license/package.json | 2 +- 8 files changed, 249 insertions(+), 680 deletions(-) diff --git a/frontend/.nvmrc b/frontend/.nvmrc index eefb690f4abf..be5f09d0a368 100644 --- a/frontend/.nvmrc +++ b/frontend/.nvmrc @@ -1 +1 @@ -24.15.0 \ No newline at end of file +26.1.0 \ No newline at end of file diff --git a/frontend/Dockerfile b/frontend/Dockerfile index bc36db8993ba..b93b7428d634 100644 --- a/frontend/Dockerfile +++ b/frontend/Dockerfile @@ -11,7 +11,7 @@ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. -FROM node:24.15.0-alpine AS base +FROM node:26.1.0-alpine AS base ENV PNPM_HOME="/pnpm" ENV PATH="$PNPM_HOME:$PATH" WORKDIR /app @@ -20,7 +20,7 @@ WORKDIR /app FROM base AS deps # Check https://github.com/nodejs/docker-node/tree/b4117f9333da4138b03a546ec926ef50a31506c3#nodealpine to understand why libc6-compat might be needed. -RUN apk add --no-cache libc6-compat && corepack enable && corepack prepare pnpm@8.9.0 --activate +RUN apk add --no-cache libc6-compat && npm install -g corepack && corepack enable && corepack prepare pnpm@8.9.0 --activate # Install dependencies based on the preferred package manager root workspace diff --git a/frontend/desktop/package.json b/frontend/desktop/package.json index 84153e857b8d..5d0a2aadc840 100644 --- a/frontend/desktop/package.json +++ b/frontend/desktop/package.json @@ -63,7 +63,7 @@ "immer": "^10.0.2", "js-cookie": "^3.0.5", "js-yaml": "^4.1.0", - "jsonwebtoken": "^9.0.2", + "jsonwebtoken": "^9.0.3", "jwt-decode": "^4.0.0", "lodash": "^4.17.21", "lucide-react": "^0.488.0", @@ -97,6 +97,7 @@ "zustand": "^4.4.1" }, "devDependencies": { + "@playwright/test": "^1.58.1", "@testing-library/react": "^14.0.0", "@types/js-cookie": "^3.0.4", "@types/js-yaml": "^4.0.6", @@ -110,13 +111,12 @@ "@types/react-dom": "18.3.7", "@types/umami-browser": "^2.3.2", "@types/uuid": "^9.0.4", + "@vitejs/plugin-react": "^5.1.1", + "@vitest/browser": "4.0.15", + "@vitest/browser-playwright": "4.0.15", "dotenv-cli": "^7.3.0", "prettier": "^2.8.8", "vite-tsconfig-paths": "^5.1.4", - "vitest": "^4.0.12", - "@playwright/test": "^1.58.1", - "@vitest/browser": "4.0.15", - "@vitest/browser-playwright": "4.0.15", - "@vitejs/plugin-react": "^5.1.1" + "vitest": "^4.0.12" } } diff --git a/frontend/package.json b/frontend/package.json index 8a2637dcf67a..0f2a56047504 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -52,7 +52,7 @@ }, "packageManager": "pnpm@8.9.0", "engines": { - "node": "24.15.0", + "node": "26.1.0", "pnpm": "8.9.0" } } diff --git a/frontend/pnpm-lock.yaml b/frontend/pnpm-lock.yaml index f209e1ce4b27..121c03c416bb 100644 --- a/frontend/pnpm-lock.yaml +++ b/frontend/pnpm-lock.yaml @@ -147,8 +147,8 @@ importers: specifier: ^4.1.0 version: 4.1.0 jsonwebtoken: - specifier: ^9.0.2 - version: 9.0.2 + specifier: ^9.0.3 + version: 9.0.3 jwt-decode: specifier: ^4.0.0 version: 4.0.0 @@ -265,8 +265,8 @@ importers: specifier: ^7.1.1 version: 7.1.1 '@types/node': - specifier: 18.15.11 - version: 18.15.11 + specifier: ^24 + version: 24.10.4 '@types/nodemailer': specifier: ^6.4.15 version: 6.4.15 @@ -305,7 +305,7 @@ importers: version: 5.1.4(typescript@5.9.3)(vite@7.2.6) vitest: specifier: ^4.0.12 - version: 4.0.15(@types/node@18.15.11)(@vitest/browser-playwright@4.0.15)(sass@1.69.5) + version: 4.0.15(@types/node@24.10.4)(@vitest/browser-playwright@4.0.15)(sass@1.69.5) packages/client-sdk: dependencies: @@ -338,8 +338,8 @@ importers: specifier: ^4.0.6 version: 4.0.9 '@types/node': - specifier: ^20.7.1 - version: 20.10.0 + specifier: ^24 + version: 24.10.4 '@types/uuid': specifier: ^9.0.4 version: 9.0.7 @@ -376,7 +376,7 @@ importers: dependencies: next: specifier: '>=13.5.11' - version: 14.2.35(@babel/core@7.23.5)(react-dom@18.3.1)(react@18.3.1)(sass@1.69.5) + version: 14.2.35(react-dom@18.3.1)(react@18.3.1) react: specifier: ^18.0 || ^19.0 || ^19.0.0-rc version: 18.3.1 @@ -385,8 +385,8 @@ importers: version: 18.3.1(react@18.3.1) devDependencies: '@types/node': - specifier: 18.15.11 - version: 18.15.11 + specifier: ^24 + version: 24.10.4 '@types/react': specifier: 18.3.27 version: 18.3.27 @@ -410,7 +410,7 @@ importers: version: 1.0.0 next: specifier: 14.2.35 - version: 14.2.35(@babel/core@7.23.5)(react-dom@18.3.1)(react@18.3.1)(sass@1.69.5) + version: 14.2.35(react-dom@18.3.1)(react@18.3.1) openapi-types: specifier: ^12.1.3 version: 12.1.3 @@ -422,8 +422,8 @@ importers: specifier: ^11.1.4 version: 11.1.5(rollup@2.79.1)(tslib@2.6.2)(typescript@5.2.2) '@types/node': - specifier: ^20.7.1 - version: 20.17.32 + specifier: ^24 + version: 24.10.4 rollup: specifier: 2.79.1 version: 2.79.1 @@ -525,8 +525,8 @@ importers: version: 1.3.4 devDependencies: '@types/node': - specifier: ^20.7.1 - version: 20.17.32 + specifier: ^24 + version: 24.10.4 '@types/react': specifier: 18.3.27 version: 18.3.27 @@ -553,7 +553,7 @@ importers: version: 18.3.1(react@18.3.1) vitest: specifier: ^4.0.12 - version: 4.0.15(@types/node@20.17.32)(@vitest/browser-playwright@4.0.15) + version: 4.0.15(@types/node@24.10.4)(@vitest/browser-playwright@4.0.15)(sass@1.69.5) packages/shared: devDependencies: @@ -570,8 +570,8 @@ importers: specifier: ^4.0.9 version: 4.0.9 '@types/node': - specifier: ^20.7.1 - version: 20.17.32 + specifier: ^24 + version: 24.10.4 '@types/react': specifier: 18.3.27 version: 18.3.27 @@ -631,7 +631,7 @@ importers: version: 5.9.3 vitest: specifier: ^4.0.12 - version: 4.0.15(@types/node@20.17.32)(@vitest/browser-playwright@4.0.15) + version: 4.0.15(@types/node@24.10.4)(@vitest/browser-playwright@4.0.15)(sass@1.69.5) zod: specifier: ^4.3.5 version: 4.3.5 @@ -793,8 +793,8 @@ importers: specifier: ^10.1.1 version: 10.1.1 jsonwebtoken: - specifier: ^9.0.2 - version: 9.0.2 + specifier: ^9.0.3 + version: 9.0.3 lucide-react: specifier: ^0.555.0 version: 0.555.0(react@18.3.1) @@ -857,8 +857,8 @@ importers: specifier: ^9.0.3 version: 9.0.5 '@types/node': - specifier: ^20 - version: 20.10.0 + specifier: ^24 + version: 24.10.4 '@types/react': specifier: 18.3.27 version: 18.3.27 @@ -906,7 +906,7 @@ importers: version: 5.1.4(typescript@5.2.2)(vite@7.2.6) vitest: specifier: ^4.0.12 - version: 4.0.15(@types/node@20.10.0)(@vitest/browser-playwright@4.0.15) + version: 4.0.15(@types/node@24.10.4)(@vitest/browser-playwright@4.0.15)(sass@1.69.5) providers/applaunchpad: dependencies: @@ -1113,8 +1113,8 @@ importers: specifier: ^4.14.199 version: 4.14.202 '@types/node': - specifier: 18.13.0 - version: 18.13.0 + specifier: ^24 + version: 24.10.4 '@types/nprogress': specifier: ^0.2.1 version: 0.2.3 @@ -1156,7 +1156,7 @@ importers: version: 5.1.4(typescript@5.2.2)(vite@7.2.6) vitest: specifier: ^4.0.12 - version: 4.0.15(@types/node@18.13.0)(@vitest/ui@4.0.12)(jsdom@27.2.0)(sass@1.69.5) + version: 4.0.15(@types/node@24.10.4)(@vitest/ui@4.0.12)(jsdom@27.2.0)(sass@1.69.5) webpack-bundle-analyzer: specifier: ^4.9.1 version: 4.10.1 @@ -1315,8 +1315,8 @@ importers: specifier: ^4.14.199 version: 4.14.202 '@types/node': - specifier: 18.13.0 - version: 18.13.0 + specifier: ^24 + version: 24.10.4 '@types/nprogress': specifier: ^0.2.1 version: 0.2.3 @@ -1517,8 +1517,8 @@ importers: specifier: ^4.14.199 version: 4.14.202 '@types/node': - specifier: 18.15.5 - version: 18.15.5 + specifier: ^24 + version: 24.10.4 '@types/nprogress': specifier: ^0.2.1 version: 0.2.3 @@ -1554,7 +1554,7 @@ importers: version: 5.1.4(typescript@5.2.2)(vite@7.2.6) vitest: specifier: ^4.0.12 - version: 4.0.15(@types/node@18.15.5)(@vitest/browser-playwright@4.0.15)(sass@1.69.5) + version: 4.0.15(@types/node@24.10.4)(@vitest/browser-playwright@4.0.15)(sass@1.69.5) providers/cronjob: dependencies: @@ -1704,8 +1704,8 @@ importers: specifier: ^4.14.199 version: 4.14.202 '@types/node': - specifier: 18.13.0 - version: 18.13.0 + specifier: ^24 + version: 24.10.4 '@types/nprogress': specifier: ^0.2.1 version: 0.2.3 @@ -1741,7 +1741,7 @@ importers: version: 5.1.4(typescript@5.2.2)(vite@7.2.6) vitest: specifier: ^4.0.12 - version: 4.0.15(@types/node@18.13.0)(@vitest/browser-playwright@4.0.15)(sass@1.69.5) + version: 4.0.15(@types/node@24.10.4)(@vitest/browser-playwright@4.0.15)(sass@1.69.5) webpack-bundle-analyzer: specifier: ^4.9.1 version: 4.10.1 @@ -1939,8 +1939,8 @@ importers: specifier: ^1.4.10 version: 1.4.11 '@types/node': - specifier: 18.13.0 - version: 18.13.0 + specifier: ^24 + version: 24.10.4 '@types/nprogress': specifier: ^0.2.1 version: 0.2.3 @@ -1979,7 +1979,7 @@ importers: version: 5.1.4(typescript@5.2.2)(vite@7.2.6) vitest: specifier: ^4.0.12 - version: 4.0.15(@types/node@18.13.0)(@vitest/browser-playwright@4.0.15)(sass@1.69.5) + version: 4.0.15(@types/node@24.10.4)(@vitest/browser-playwright@4.0.15)(sass@1.69.5) webpack-bundle-analyzer: specifier: ^4.9.1 version: 4.10.1 @@ -2077,8 +2077,8 @@ importers: specifier: ^4.1.0 version: 4.1.0 jsonwebtoken: - specifier: ^9.0.2 - version: 9.0.2 + specifier: ^9.0.3 + version: 9.0.3 jszip: specifier: ^3.10.1 version: 3.10.1 @@ -2177,8 +2177,8 @@ importers: specifier: ^4.14.199 version: 4.14.202 '@types/node': - specifier: ^20 - version: 20.10.0 + specifier: ^24 + version: 24.10.4 '@types/nprogress': specifier: ^0.2.3 version: 0.2.3 @@ -2355,8 +2355,8 @@ importers: specifier: ^4.14.199 version: 4.14.202 '@types/node': - specifier: 18.13.0 - version: 18.13.0 + specifier: ^24 + version: 24.10.4 '@types/nprogress': specifier: ^0.2.1 version: 0.2.3 @@ -2449,7 +2449,7 @@ importers: version: 0.55.1 next: specifier: 14.2.35 - version: 14.2.35(@babel/core@7.23.5)(react-dom@18.3.1)(react@18.3.1)(sass@1.69.5) + version: 14.2.35(react-dom@18.3.1)(react@18.3.1) next-i18next: specifier: ^15.3.0 version: 15.3.0(i18next@23.12.1)(next@14.2.35)(react-i18next@14.1.2)(react@18.3.1) @@ -2488,7 +2488,7 @@ importers: specifier: ^4.17.21 version: 4.17.21 '@types/node': - specifier: ^24.0.0 + specifier: ^24 version: 24.10.4 '@types/nprogress': specifier: ^0.2.3 @@ -2593,8 +2593,8 @@ importers: specifier: ^4.1.0 version: 4.1.0 jsonwebtoken: - specifier: ^9.0.2 - version: 9.0.2 + specifier: ^9.0.3 + version: 9.0.3 jszip: specifier: ^3.10.1 version: 3.10.1 @@ -2672,8 +2672,8 @@ importers: specifier: ^4.14.199 version: 4.14.202 '@types/node': - specifier: 18.13.0 - version: 18.13.0 + specifier: ^24 + version: 24.10.4 '@types/nprogress': specifier: ^0.2.1 version: 0.2.3 @@ -2838,8 +2838,8 @@ importers: specifier: ^4.14.199 version: 4.14.202 '@types/node': - specifier: ^20 - version: 20.10.0 + specifier: ^24 + version: 24.10.4 '@types/react': specifier: 18.3.27 version: 18.3.27 @@ -2866,7 +2866,7 @@ importers: version: 5.1.4(typescript@5.2.2)(vite@7.2.6) vitest: specifier: ^4.0.12 - version: 4.0.15(@types/node@20.10.0)(@vitest/browser-playwright@4.0.15) + version: 4.0.15(@types/node@24.10.4)(@vitest/browser-playwright@4.0.15)(sass@1.69.5) providers/template: dependencies: @@ -3079,8 +3079,8 @@ importers: specifier: ^4.14.199 version: 4.14.202 '@types/node': - specifier: 18.13.0 - version: 18.13.0 + specifier: ^24 + version: 24.10.4 '@types/nprogress': specifier: ^0.2.1 version: 0.2.3 @@ -3125,7 +3125,7 @@ importers: version: 5.1.4(typescript@5.2.2)(vite@7.2.6) vitest: specifier: ^4.0.12 - version: 4.0.15(@types/node@18.13.0)(@vitest/browser-playwright@4.0.15)(sass@1.69.5) + version: 4.0.15(@types/node@24.10.4)(@vitest/browser-playwright@4.0.15)(sass@1.69.5) providers/terminal: dependencies: @@ -3236,8 +3236,8 @@ importers: specifier: ^4.14.199 version: 4.14.202 '@types/node': - specifier: 18.15.5 - version: 18.15.5 + specifier: ^24 + version: 24.10.4 '@types/react': specifier: 18.3.27 version: 18.3.27 @@ -3261,7 +3261,7 @@ importers: version: 5.1.4(typescript@5.2.2)(vite@7.2.6) vitest: specifier: ^4.0.12 - version: 4.0.15(@types/node@18.15.5)(@vitest/browser-playwright@4.0.15)(sass@1.69.5) + version: 4.0.15(@types/node@24.10.4)(@vitest/browser-playwright@4.0.15)(sass@1.69.5) packages: @@ -6511,7 +6511,7 @@ packages: '@chakra-ui/react': 2.8.2(@emotion/react@11.11.1)(@emotion/styled@11.11.0)(@types/react@18.3.27)(framer-motion@10.16.5)(react-dom@18.3.1)(react@18.3.1) '@emotion/cache': 11.14.0 '@emotion/react': 11.11.1(@types/react@18.3.27)(react@18.3.1) - next: 14.2.35(@babel/core@7.28.5)(@playwright/test@1.59.1)(react-dom@18.3.1)(react@18.3.1)(sass@1.69.5) + next: 14.2.35(@babel/core@7.23.5)(react-dom@18.3.1)(react@18.3.1)(sass@1.69.5) react: 18.3.1 dev: false @@ -13639,14 +13639,14 @@ packages: /@types/base64-stream@1.0.5: resolution: {integrity: sha512-gXuo/a7pQ1EXlR5ksM2MccBLl6UUgAgnzR01r/QoHnkaSNinmzSdaGcCq5NAxn72dZ5A1zNYQIl+J9hPsBgBrA==} dependencies: - '@types/node': 20.17.32 + '@types/node': 24.10.4 dev: true /@types/body-parser@1.19.5: resolution: {integrity: sha512-fB3Zu92ucau0iQ0JMCFQE7b/dv8Ot07NI3KaZIkIUNXq82k4eBAqUaneXfleGY9JWskeS9y+u0nXMyspcuQrCg==} dependencies: '@types/connect': 3.4.38 - '@types/node': 20.17.32 + '@types/node': 24.10.4 /@types/btoa-lite@1.0.2: resolution: {integrity: sha512-ZYbcE2x7yrvNFJiU7xJGrpF/ihpkM7zKgw8bha3LNJSesvTtUNxbpzaT7WXBIryf6jovisrxTBvymxMeLLj1Mg==} @@ -13665,7 +13665,7 @@ packages: /@types/connect@3.4.38: resolution: {integrity: sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==} dependencies: - '@types/node': 20.17.32 + '@types/node': 24.10.4 /@types/d3-array@3.2.2: resolution: {integrity: sha512-hOLWVbm7uRza0BYXpIIW5pxfrKe0W+D5lrFiAEYR+pb6w3N2SwSMaJbXdUfSEv+dT4MfHBLtn5js0LAWaO6otw==} @@ -13766,7 +13766,7 @@ packages: /@types/dns-packet@5.6.5: resolution: {integrity: sha512-qXOC7XLOEe43ehtWJCMnQXvgcIpv6rPmQ1jXT98Ad8A3TB1Ue50jsCbSSSyuazScEuZ/Q026vHbrOTVkmwA+7Q==} dependencies: - '@types/node': 20.17.32 + '@types/node': 24.10.4 dev: true /@types/eslint-scope@3.7.7: @@ -13789,7 +13789,7 @@ packages: /@types/express-serve-static-core@4.17.41: resolution: {integrity: sha512-OaJ7XLaelTgrvlZD8/aa0vvvxZdUmlCn6MtWeB7TkiKW70BQLc9XEPpDLPdbo52ZhXUCrznlWdCHWxJWtdyajA==} dependencies: - '@types/node': 20.17.32 + '@types/node': 24.10.4 '@types/qs': 6.9.10 '@types/range-parser': 1.2.7 '@types/send': 0.17.4 @@ -13805,13 +13805,13 @@ packages: /@types/formidable@3.4.5: resolution: {integrity: sha512-s7YPsNVfnsng5L8sKnG/Gbb2tiwwJTY1conOkJzTMRvJAlLFW1nEua+ADsJQu8N1c0oTHx9+d5nqg10WuT9gHQ==} dependencies: - '@types/node': 20.17.32 + '@types/node': 24.10.4 dev: true /@types/fs-extra@8.1.5: resolution: {integrity: sha512-0dzKcwO+S8s2kuF5Z9oUWatQJj5Uq/iqphEtE3GQJVRRYm/tD1LglU2UnXi2A8jLq5umkGouOXOR9y0n613ZwQ==} dependencies: - '@types/node': 20.17.32 + '@types/node': 24.10.4 dev: true /@types/geojson@7946.0.14: @@ -13822,7 +13822,7 @@ packages: resolution: {integrity: sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA==} dependencies: '@types/minimatch': 5.1.2 - '@types/node': 20.17.32 + '@types/node': 24.10.4 dev: true /@types/har-format@1.2.16: @@ -13871,7 +13871,7 @@ packages: /@types/jsonwebtoken@9.0.5: resolution: {integrity: sha512-VRLSGzik+Unrup6BsouBeHsf4d1hOEgYWTm/7Nmw1sXoN1+tRly/Gy/po3yeahnP4jfnQWWAhQAqcNfH7ngOkA==} dependencies: - '@types/node': 20.17.32 + '@types/node': 24.10.4 /@types/lodash.mergewith@4.6.7: resolution: {integrity: sha512-3m+lkO5CLRRYU0fhGRp7zbsGi6+BZj0uTVSwvcKU+nSlhjA9/QRNfuSGnD2mX6hQA7ZbmcCkzk5h4ZYGOtk14A==} @@ -13926,7 +13926,7 @@ packages: /@types/node-fetch@2.6.12: resolution: {integrity: sha512-8nneRWKCg3rMtF69nLQJnOYUcbafYeFSjqkw3jCRLsqkWFlHaoQrr5mXmofFGOx3DKn7UfmBMyov8ySvLRVldA==} dependencies: - '@types/node': 20.17.32 + '@types/node': 24.10.4 form-data: 4.0.4 dev: false @@ -13942,27 +13942,14 @@ packages: resolution: {integrity: sha512-fAtCfv4jJg+ExtXhvCkCqUKZ+4ok/JQk01qDKhL5BDDoS3AxKXhV5/MAVUZyQnSEd2GT92fkgZl0pz0Q0AzcIQ==} dev: false - /@types/node@18.13.0: - resolution: {integrity: sha512-gC3TazRzGoOnoKAhUx+Q0t8S9Tzs74z7m0ipwGpSqQrleP14hKxP4/JUeEQcD3W1/aIpnWl8pHowI7WokuZpXg==} - dev: true - /@types/node@18.15.11: resolution: {integrity: sha512-E5Kwq2n4SbMzQOn6wnmBjuK9ouqlURrcZDVfbo9ftDDTFt3nk7ZKK4GMOzoYgnpQJKcxwQw+lGaBvvlMo0qN/Q==} - /@types/node@18.15.5: - resolution: {integrity: sha512-Ark2WDjjZO7GmvsyFFf81MXuGTA/d6oP38anyxWOL6EREyBKAxKoFHwBhaZxCfLRLpO8JgVXwqOwSwa7jRcjew==} - dev: true - - /@types/node@20.10.0: - resolution: {integrity: sha512-D0WfRmU9TQ8I9PFx9Yc+EBHw+vSpIub4IDvQivcp26PtPrdMGAq5SDcpXEo/epqa/DXotVpekHiLNTg3iaKXBQ==} - dependencies: - undici-types: 5.26.5 - dev: true - /@types/node@20.17.32: resolution: {integrity: sha512-zeMXFn8zQ+UkjK4ws0RiOC9EWByyW1CcVmLe+2rQocXRsGEDxUCwPEIVgpsGcLHS/P8JkT0oa3839BRABS0oPw==} dependencies: undici-types: 6.19.8 + dev: false /@types/node@22.19.11: resolution: {integrity: sha512-BH7YwL6rA93ReqeQS1c4bsPpcfOmJasG+Fkr6Y59q83f9M1WcBRHR2vM+P9eOisYRcN3ujQoiZY8uk5W+1WL8w==} @@ -13974,12 +13961,11 @@ packages: resolution: {integrity: sha512-vnDVpYPMzs4wunl27jHrfmwojOGKya0xyM3sH+UE5iv5uPS6vX7UIoh6m+vQc5LGBq52HBKPIn/zcSZVzeDEZg==} dependencies: undici-types: 7.16.0 - dev: true /@types/nodemailer@6.4.15: resolution: {integrity: sha512-0EBJxawVNjPkng1zm2vopRctuWVCxk34JcIlRuXSf54habUWdz1FB7wHDqOqvDa8Mtpt0Q3LTXQkAs2LNyK5jQ==} dependencies: - '@types/node': 20.17.32 + '@types/node': 24.10.4 dev: true /@types/nprogress@0.2.3: @@ -13989,7 +13975,7 @@ packages: /@types/papaparse@5.3.15: resolution: {integrity: sha512-JHe6vF6x/8Z85nCX4yFdDslN11d+1pr12E526X8WAfhadOeaOTx5AuIkvDKIBopfvlzpzkdMx4YyvSKCM9oqtw==} dependencies: - '@types/node': 20.17.32 + '@types/node': 24.10.4 dev: true /@types/parse-json@4.0.2: @@ -14041,7 +14027,7 @@ packages: resolution: {integrity: sha512-G3sY+NpsA9jnwm0ixhAFQSJ3Q9JkpLZpJbI3GMv0mIAT0y3mRabYeINzal5WOChIiaTEGQYlHOKgkaM9EisWHw==} dependencies: '@types/caseless': 0.12.5 - '@types/node': 20.17.32 + '@types/node': 24.10.4 '@types/tough-cookie': 4.0.5 form-data: 2.5.1 @@ -14057,19 +14043,19 @@ packages: resolution: {integrity: sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA==} dependencies: '@types/mime': 1.3.5 - '@types/node': 20.17.32 + '@types/node': 24.10.4 /@types/serve-static@1.15.5: resolution: {integrity: sha512-PDRk21MnK70hja/YF8AHfC7yIsiQHn1rcXx7ijCFBX/k+XQJhQT/gw3xekXKJvx+5SXaMMS8oqQy09Mzvz2TuQ==} dependencies: '@types/http-errors': 2.0.4 '@types/mime': 3.0.4 - '@types/node': 20.17.32 + '@types/node': 24.10.4 /@types/stream-buffers@3.0.7: resolution: {integrity: sha512-azOCy05sXVXrO+qklf0c/B07H/oHaIuDDAiHPVwlk3A9Ek+ksHyTeMajLZl3r76FxpPpxem//4Te61G1iW3Giw==} dependencies: - '@types/node': 20.17.32 + '@types/node': 24.10.4 dev: false /@types/stylis@4.2.5: @@ -14089,7 +14075,7 @@ packages: /@types/tar@6.1.13: resolution: {integrity: sha512-IznnlmU5f4WcGTh2ltRu/Ijpmk8wiWXfF0VA4s+HPjHZgvFggk1YaIkbo5krX/zUCzWF8N/l4+W/LNxnvAJ8nw==} dependencies: - '@types/node': 20.17.32 + '@types/node': 24.10.4 minipass: 4.2.8 dev: false @@ -14137,25 +14123,25 @@ packages: /@types/whatwg-url@8.2.2: resolution: {integrity: sha512-FtQu10RWgn3D9U4aazdwIE2yzphmTJREDqNdODHrbrZmmMqI0vMheC/6NE/J1Yveaj8H+ela+YwWTjq5PGmuhA==} dependencies: - '@types/node': 20.17.32 + '@types/node': 24.10.4 '@types/webidl-conversions': 7.0.3 dev: false /@types/ws@6.0.4: resolution: {integrity: sha512-PpPrX7SZW9re6+Ha8ojZG4Se8AZXgf0GK6zmfqEuCsY49LFDNXO3SByp44X3dFEqtB73lkCDAdUazhAjVPiNwg==} dependencies: - '@types/node': 20.17.32 + '@types/node': 24.10.4 dev: false /@types/ws@8.5.10: resolution: {integrity: sha512-vmQSUcfalpIq0R9q7uTo2lXs6eGIpt9wtnLdMv9LVpIjCA/+ufZRozlVoVelIYixx1ugCBKDhn89vnsEGOCx9A==} dependencies: - '@types/node': 20.17.32 + '@types/node': 24.10.4 /@types/xml2js@0.4.14: resolution: {integrity: sha512-4YnrRemBShWRO2QjvUin8ESA41rH+9nQGLUGZV/1IDhi3SL9OhdpNC/MrulTWuptXKwhx/aDxE7toV0f/ypIXQ==} dependencies: - '@types/node': 20.17.32 + '@types/node': 24.10.4 dev: false /@typescript-eslint/eslint-plugin@6.21.0(@typescript-eslint/parser@6.21.0)(eslint@8.33.0)(typescript@5.2.2): @@ -14299,7 +14285,7 @@ packages: '@typescript-eslint/types': 6.21.0 '@typescript-eslint/typescript-estree': 6.21.0(typescript@5.2.2) '@typescript-eslint/visitor-keys': 6.21.0 - debug: 4.4.3 + debug: 4.4.1 eslint: 8.33.0 typescript: 5.2.2 transitivePeerDependencies: @@ -14320,7 +14306,7 @@ packages: '@typescript-eslint/types': 6.21.0 '@typescript-eslint/typescript-estree': 6.21.0(typescript@5.2.2) '@typescript-eslint/visitor-keys': 6.21.0 - debug: 4.4.3 + debug: 4.4.1 eslint: 8.36.0 typescript: 5.2.2 transitivePeerDependencies: @@ -14340,7 +14326,7 @@ packages: '@typescript-eslint/types': 6.21.0 '@typescript-eslint/typescript-estree': 6.21.0(typescript@5.2.2) '@typescript-eslint/visitor-keys': 6.21.0 - debug: 4.4.3 + debug: 4.4.1 eslint: 8.42.0 typescript: 5.2.2 transitivePeerDependencies: @@ -14361,7 +14347,7 @@ packages: '@typescript-eslint/types': 6.21.0 '@typescript-eslint/typescript-estree': 6.21.0(typescript@5.2.2) '@typescript-eslint/visitor-keys': 6.21.0 - debug: 4.4.3 + debug: 4.4.1 eslint: 8.57.0 typescript: 5.2.2 transitivePeerDependencies: @@ -14490,7 +14476,7 @@ packages: debug: 4.4.3 globby: 11.1.0 is-glob: 4.0.3 - semver: 7.6.3 + semver: 7.7.4 tsutils: 3.21.0(typescript@5.2.2) typescript: 5.2.2 transitivePeerDependencies: @@ -14511,7 +14497,7 @@ packages: debug: 4.4.3 globby: 11.1.0 is-glob: 4.0.3 - semver: 7.6.3 + semver: 7.7.4 tsutils: 3.21.0(typescript@5.9.3) typescript: 5.9.3 transitivePeerDependencies: @@ -14682,7 +14668,7 @@ packages: '@modelcontextprotocol/sdk': 1.12.1 chalk: 5.4.1 commander: 11.1.0 - next: 14.2.35(@babel/core@7.23.5)(react-dom@18.3.1)(react@18.3.1)(sass@1.69.5) + next: 14.2.35(react-dom@18.3.1)(react@18.3.1) redis: 4.7.1 dev: false @@ -14698,7 +14684,7 @@ packages: '@rolldown/pluginutils': 1.0.0-beta.47 '@types/babel__core': 7.20.5 react-refresh: 0.18.0 - vite: 7.2.6(@types/node@18.15.11)(sass@1.69.5) + vite: 7.2.6(@types/node@24.10.4)(sass@1.69.5) transitivePeerDependencies: - supports-color dev: true @@ -14713,7 +14699,7 @@ packages: '@vitest/mocker': 4.0.15(vite@7.2.6) playwright: 1.59.1 tinyrainbow: 3.0.3 - vitest: 4.0.15(@types/node@18.15.11)(@vitest/browser-playwright@4.0.15)(sass@1.69.5) + vitest: 4.0.15(@types/node@24.10.4)(@vitest/browser-playwright@4.0.15)(sass@1.69.5) transitivePeerDependencies: - bufferutil - msw @@ -14733,7 +14719,7 @@ packages: pngjs: 7.0.0 sirv: 3.0.2 tinyrainbow: 3.0.3 - vitest: 4.0.15(@types/node@18.15.11)(@vitest/browser-playwright@4.0.15)(sass@1.69.5) + vitest: 4.0.15(@types/node@24.10.4)(@vitest/browser-playwright@4.0.15)(sass@1.69.5) ws: 8.18.3 transitivePeerDependencies: - bufferutil @@ -14767,7 +14753,7 @@ packages: '@vitest/spy': 4.0.15 estree-walker: 3.0.3 magic-string: 0.30.21 - vite: 7.2.6(@types/node@18.15.11)(sass@1.69.5) + vite: 7.2.6(@types/node@24.10.4)(sass@1.69.5) dev: true /@vitest/pretty-format@4.0.12: @@ -14813,7 +14799,7 @@ packages: sirv: 3.0.2 tinyglobby: 0.2.15 tinyrainbow: 3.0.3 - vitest: 4.0.15(@types/node@18.13.0)(@vitest/ui@4.0.12)(jsdom@27.2.0)(sass@1.69.5) + vitest: 4.0.15(@types/node@24.10.4)(@vitest/ui@4.0.12)(jsdom@27.2.0)(sass@1.69.5) dev: true /@vitest/utils@4.0.12: @@ -18240,7 +18226,7 @@ packages: eslint: 8.57.0 eslint-import-resolver-node: 0.3.9 eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@6.21.0)(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.31.0)(eslint@8.57.0) - eslint-plugin-import: 2.31.0(eslint@8.57.0) + eslint-plugin-import: 2.31.0(@typescript-eslint/parser@6.21.0)(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0) eslint-plugin-jsx-a11y: 6.10.2(eslint@8.57.0) eslint-plugin-react: 7.37.2(eslint@8.57.0) eslint-plugin-react-hooks: 4.6.0(eslint@8.57.0) @@ -18291,7 +18277,7 @@ packages: eslint: 8.57.0 eslint-import-resolver-node: 0.3.9 eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@6.21.0)(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.31.0)(eslint@8.57.0) - eslint-plugin-import: 2.31.0(eslint@8.57.0) + eslint-plugin-import: 2.31.0(@typescript-eslint/parser@6.21.0)(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0) eslint-plugin-jsx-a11y: 6.8.0(eslint@8.57.0) eslint-plugin-react: 7.33.2(eslint@8.57.0) eslint-plugin-react-hooks: 4.6.0(eslint@8.57.0) @@ -18470,7 +18456,7 @@ packages: enhanced-resolve: 5.18.1 eslint: 8.57.0 eslint-module-utils: 2.12.0(@typescript-eslint/parser@6.21.0)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0) - eslint-plugin-import: 2.31.0(@typescript-eslint/parser@6.21.0)(eslint@8.57.0) + eslint-plugin-import: 2.31.0(@typescript-eslint/parser@6.21.0)(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0) fast-glob: 3.3.2 get-tsconfig: 4.7.2 is-core-module: 2.15.1 @@ -18865,7 +18851,7 @@ packages: - supports-color dev: true - /eslint-plugin-import@2.31.0(@typescript-eslint/parser@6.21.0)(eslint@8.33.0): + /eslint-plugin-import@2.31.0(@typescript-eslint/parser@6.21.0)(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0): resolution: {integrity: sha512-ixmkI62Rbc2/w8Vfxyh1jQRTdRTF52VxwRVHl/ykPAmqG+Nb7/kNn+byLP0LxPgI7zWA16Jt82SybJInmMia3A==} engines: {node: '>=4'} peerDependencies: @@ -18876,16 +18862,16 @@ packages: optional: true dependencies: '@rtsao/scc': 1.1.0 - '@typescript-eslint/parser': 6.21.0(eslint@8.33.0)(typescript@5.2.2) + '@typescript-eslint/parser': 6.21.0(eslint@8.57.0)(typescript@5.2.2) array-includes: 3.1.8 array.prototype.findlastindex: 1.2.5 array.prototype.flat: 1.3.2 array.prototype.flatmap: 1.3.2 debug: 3.2.7 doctrine: 2.1.0 - eslint: 8.33.0 + eslint: 8.57.0 eslint-import-resolver-node: 0.3.9 - eslint-module-utils: 2.12.0(@typescript-eslint/parser@6.21.0)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@8.33.0) + eslint-module-utils: 2.12.0(@typescript-eslint/parser@6.21.0)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0) hasown: 2.0.2 is-core-module: 2.15.1 is-glob: 4.0.3 @@ -18902,7 +18888,7 @@ packages: - supports-color dev: true - /eslint-plugin-import@2.31.0(@typescript-eslint/parser@6.21.0)(eslint@8.57.0): + /eslint-plugin-import@2.31.0(@typescript-eslint/parser@6.21.0)(eslint@8.33.0): resolution: {integrity: sha512-ixmkI62Rbc2/w8Vfxyh1jQRTdRTF52VxwRVHl/ykPAmqG+Nb7/kNn+byLP0LxPgI7zWA16Jt82SybJInmMia3A==} engines: {node: '>=4'} peerDependencies: @@ -18913,16 +18899,16 @@ packages: optional: true dependencies: '@rtsao/scc': 1.1.0 - '@typescript-eslint/parser': 6.21.0(eslint@8.57.0)(typescript@5.9.3) + '@typescript-eslint/parser': 6.21.0(eslint@8.33.0)(typescript@5.2.2) array-includes: 3.1.8 array.prototype.findlastindex: 1.2.5 array.prototype.flat: 1.3.2 array.prototype.flatmap: 1.3.2 debug: 3.2.7 doctrine: 2.1.0 - eslint: 8.57.0 + eslint: 8.33.0 eslint-import-resolver-node: 0.3.9 - eslint-module-utils: 2.12.0(@typescript-eslint/parser@6.21.0)(eslint-import-resolver-node@0.3.9)(eslint@8.57.0) + eslint-module-utils: 2.12.0(@typescript-eslint/parser@6.21.0)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@8.33.0) hasown: 2.0.2 is-core-module: 2.15.1 is-glob: 4.0.3 @@ -18939,7 +18925,7 @@ packages: - supports-color dev: true - /eslint-plugin-import@2.31.0(eslint@8.57.0): + /eslint-plugin-import@2.31.0(@typescript-eslint/parser@6.21.0)(eslint@8.57.0): resolution: {integrity: sha512-ixmkI62Rbc2/w8Vfxyh1jQRTdRTF52VxwRVHl/ykPAmqG+Nb7/kNn+byLP0LxPgI7zWA16Jt82SybJInmMia3A==} engines: {node: '>=4'} peerDependencies: @@ -18950,6 +18936,7 @@ packages: optional: true dependencies: '@rtsao/scc': 1.1.0 + '@typescript-eslint/parser': 6.21.0(eslint@8.57.0)(typescript@5.9.3) array-includes: 3.1.8 array.prototype.findlastindex: 1.2.5 array.prototype.flat: 1.3.2 @@ -18958,7 +18945,7 @@ packages: doctrine: 2.1.0 eslint: 8.57.0 eslint-import-resolver-node: 0.3.9 - eslint-module-utils: 2.12.0(@typescript-eslint/parser@6.21.0)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0) + eslint-module-utils: 2.12.0(@typescript-eslint/parser@6.21.0)(eslint-import-resolver-node@0.3.9)(eslint@8.57.0) hasown: 2.0.2 is-core-module: 2.15.1 is-glob: 4.0.3 @@ -20453,7 +20440,7 @@ packages: peerDependencies: next: '>=13.2.0' dependencies: - next: 14.2.35(@babel/core@7.28.5)(@playwright/test@1.59.1)(react-dom@18.3.1)(react@18.3.1)(sass@1.69.5) + next: 14.2.35(@babel/core@7.23.5)(react-dom@18.3.1)(react@18.3.1)(sass@1.69.5) dev: true /generic-pool@3.9.0: @@ -21835,7 +21822,7 @@ packages: resolution: {integrity: sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ==} engines: {node: '>= 10.13.0'} dependencies: - '@types/node': 20.17.32 + '@types/node': 24.10.4 merge-stream: 2.0.0 supports-color: 7.2.0 dev: true @@ -21844,7 +21831,7 @@ packages: resolution: {integrity: sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==} engines: {node: '>= 10.13.0'} dependencies: - '@types/node': 20.17.32 + '@types/node': 24.10.4 merge-stream: 2.0.0 supports-color: 8.1.1 dev: false @@ -22097,6 +22084,22 @@ packages: semver: 7.6.3 dev: false + /jsonwebtoken@9.0.3: + resolution: {integrity: sha512-MT/xP0CrubFRNLNKvxJ2BYfy53Zkm++5bX9dtuPbqAeQpTVe0MQTFhao8+Cp//EmJp244xt6Drw/GVEGCUj40g==} + engines: {node: '>=12', npm: '>=6'} + dependencies: + jws: 4.0.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 + ms: 2.1.3 + semver: 7.7.4 + dev: false + /jsprim@1.4.2: resolution: {integrity: sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw==} engines: {node: '>=0.6.0'} @@ -22144,6 +22147,14 @@ packages: safe-buffer: 5.2.1 dev: false + /jwa@2.0.1: + resolution: {integrity: sha512-hRF04fqJIP8Abbkq5NKGN0Bbr3JxlQ+qhZufXVr0DvujKy93ZCbXZMHDL4EOtodSbCWxOqR8MS1tXA5hwqCXDg==} + dependencies: + buffer-equal-constant-time: 1.0.1 + ecdsa-sig-formatter: 1.0.11 + safe-buffer: 5.2.1 + dev: false + /jws@3.2.2: resolution: {integrity: sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==} dependencies: @@ -22151,6 +22162,13 @@ packages: safe-buffer: 5.2.1 dev: false + /jws@4.0.1: + resolution: {integrity: sha512-EKI/M/yqPncGUUh44xz0PxSidXFr/+r0pA70+gIYhjv+et7yxM+s29Y+VGDkovRofQem0fs7Uvf4+YmAdyRduA==} + dependencies: + jwa: 2.0.1 + safe-buffer: 5.2.1 + dev: false + /jwt-decode@4.0.0: resolution: {integrity: sha512-+KJGIyHgkGuIq3IEBNftfhW/LfWhXUIY6OmyVWjliu5KH1y0fw7VQ8YndE2O4qZdMSd9SqbnC8GOcZEy0Om7sA==} engines: {node: '>=18'} @@ -24055,7 +24073,7 @@ packages: hoist-non-react-statics: 3.3.2 i18next: 23.12.1 i18next-fs-backend: 2.3.1 - next: 14.2.35(@babel/core@7.28.5)(@playwright/test@1.59.1)(react-dom@18.3.1)(react@18.3.1)(sass@1.69.5) + next: 14.2.35(@babel/core@7.23.5)(react-dom@18.3.1)(react@18.3.1)(sass@1.69.5) react: 18.3.1 react-i18next: 14.1.2(i18next@23.12.1)(react-dom@18.3.1)(react@18.3.1) dev: false @@ -24225,7 +24243,6 @@ packages: transitivePeerDependencies: - '@babel/core' - babel-plugin-macros - dev: false /next@14.2.35(@babel/core@7.28.5)(@playwright/test@1.59.1)(react-dom@18.3.1)(react@18.3.1)(sass@1.69.5): resolution: {integrity: sha512-KhYd2Hjt/O1/1aZVX3dCwGXM1QmOV4eNM2UTacK5gipDdPN/oHHK/4oVGy7X8GMfPMsUTUEmGlsy0EY1YGAkig==} @@ -24269,12 +24286,55 @@ packages: transitivePeerDependencies: - '@babel/core' - babel-plugin-macros + dev: false + + /next@14.2.35(react-dom@18.3.1)(react@18.3.1): + resolution: {integrity: sha512-KhYd2Hjt/O1/1aZVX3dCwGXM1QmOV4eNM2UTacK5gipDdPN/oHHK/4oVGy7X8GMfPMsUTUEmGlsy0EY1YGAkig==} + engines: {node: '>=18.17.0'} + hasBin: true + peerDependencies: + '@opentelemetry/api': ^1.1.0 + '@playwright/test': ^1.41.2 + react: ^18.2.0 + react-dom: ^18.2.0 + sass: ^1.3.0 + peerDependenciesMeta: + '@opentelemetry/api': + optional: true + '@playwright/test': + optional: true + sass: + optional: true + dependencies: + '@next/env': 14.2.35 + '@swc/helpers': 0.5.5 + busboy: 1.6.0 + caniuse-lite: 1.0.30001761 + graceful-fs: 4.2.11 + postcss: 8.4.31 + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + styled-jsx: 5.1.1(@babel/core@7.28.5)(react@18.3.1) + optionalDependencies: + '@next/swc-darwin-arm64': 14.2.33 + '@next/swc-darwin-x64': 14.2.33 + '@next/swc-linux-arm64-gnu': 14.2.33 + '@next/swc-linux-arm64-musl': 14.2.33 + '@next/swc-linux-x64-gnu': 14.2.33 + '@next/swc-linux-x64-musl': 14.2.33 + '@next/swc-win32-arm64-msvc': 14.2.33 + '@next/swc-win32-ia32-msvc': 14.2.33 + '@next/swc-win32-x64-msvc': 14.2.33 + transitivePeerDependencies: + - '@babel/core' + - babel-plugin-macros + dev: false /node-abi@3.54.0: resolution: {integrity: sha512-p7eGEiQil0YUV3ItH4/tBb781L5impVmmx2E9FRKF7d18XXzp4PGT2tdYMFY6wQqgxD0IwNZOiSJ0/K0fSi/OA==} engines: {node: '>=10'} dependencies: - semver: 7.6.3 + semver: 7.7.4 dev: false /node-abort-controller@3.1.1: @@ -26533,7 +26593,6 @@ packages: resolution: {integrity: sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==} engines: {node: '>=10'} hasBin: true - dev: true /send@0.6.0: resolution: {integrity: sha512-A3EwHmDwcPcmLxIRNjr2YbXiYWq6M9JyUq4303pLKVFs4m5oeME0a9Cpcu9N22fED5XVepldjPYGo9eJifb7Yg==} @@ -27342,7 +27401,6 @@ packages: '@babel/core': 7.23.5 client-only: 0.0.1 react: 18.3.1 - dev: false /styled-jsx@5.1.1(@babel/core@7.28.5)(react@18.3.1): resolution: {integrity: sha512-pW7uC1l4mBZ8ugbiZrcIsiIvVx1UmTfw7UkC3Um2tmfUq9Bhk8IiyEIPl6F8agHgjzku6j0xQEZbfA5uSgSaCw==} @@ -27360,6 +27418,7 @@ packages: '@babel/core': 7.28.5 client-only: 0.0.1 react: 18.3.1 + dev: false /stylis@4.2.0: resolution: {integrity: sha512-Orov6g6BB1sDfYgzWfTHDOxamtX1bE/zo104Dh9e6fqJ3PooipYyfJ0pUmrZO2wAvO8YbEyeFrkV91XTsGMSrw==} @@ -28277,12 +28336,9 @@ packages: /underscore@1.13.6: resolution: {integrity: sha512-+A5Sja4HP1M08MaXya7p5LvjuM7K6q/2EaC0+iovj/wOcMsTzMvDFbasi/oSapiwOlt252IqsKqPjCl7huKS0A==} - /undici-types@5.26.5: - resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==} - dev: true - /undici-types@6.19.8: resolution: {integrity: sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==} + dev: false /undici-types@6.21.0: resolution: {integrity: sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==} @@ -28290,7 +28346,6 @@ packages: /undici-types@7.16.0: resolution: {integrity: sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw==} - dev: true /unhead@1.11.20: resolution: {integrity: sha512-3AsNQC0pjwlLqEYHLjtichGWankK8yqmocReITecmpB1H0aOabeESueyy+8X1gyJx4ftZVwo9hqQ4O3fPWffCA==} @@ -28429,7 +28484,7 @@ packages: resolution: {integrity: sha512-G33RTLrIBMFmlDV4u4CBF7dh71eWwykck4XgaxaIVeZKOYZRAAxvcGMRFTUclVY6xoUPQvO4Ne5wKGxYm/Yy9w==} dependencies: '@types/jsonwebtoken': 9.0.5 - jsonwebtoken: 9.0.2 + jsonwebtoken: 9.0.3 dev: false /universal-user-agent@6.0.1: @@ -28720,7 +28775,7 @@ packages: debug: 4.4.3 globrex: 0.1.2 tsconfck: 3.1.6(typescript@5.2.2) - vite: 7.2.6(@types/node@20.10.0) + vite: 7.2.6(@types/node@24.10.4)(sass@1.69.5) transitivePeerDependencies: - supports-color - typescript @@ -28737,13 +28792,13 @@ packages: debug: 4.4.3 globrex: 0.1.2 tsconfck: 3.1.6(typescript@5.9.3) - vite: 7.2.6(@types/node@18.15.11)(sass@1.69.5) + vite: 7.2.6(@types/node@24.10.4)(sass@1.69.5) transitivePeerDependencies: - supports-color - typescript dev: true - /vite@7.2.6(@types/node@18.13.0)(sass@1.69.5): + /vite@7.2.6(@types/node@24.10.4)(sass@1.69.5): resolution: {integrity: sha512-tI2l/nFHC5rLh7+5+o7QjKjSR04ivXDF4jcgV0f/bTQ+OJiITy5S6gaynVsEM+7RqzufMnVbIon6Sr5x1SDYaQ==} engines: {node: ^20.19.0 || >=22.12.0} hasBin: true @@ -28783,7 +28838,7 @@ packages: yaml: optional: true dependencies: - '@types/node': 18.13.0 + '@types/node': 24.10.4 esbuild: 0.25.12 fdir: 6.5.0(picomatch@4.0.3) picomatch: 4.0.3 @@ -28795,267 +28850,61 @@ packages: fsevents: 2.3.3 dev: true - /vite@7.2.6(@types/node@18.15.11)(sass@1.69.5): - resolution: {integrity: sha512-tI2l/nFHC5rLh7+5+o7QjKjSR04ivXDF4jcgV0f/bTQ+OJiITy5S6gaynVsEM+7RqzufMnVbIon6Sr5x1SDYaQ==} - engines: {node: ^20.19.0 || >=22.12.0} + /vitest@4.0.15(@types/node@24.10.4)(@vitest/browser-playwright@4.0.15)(sass@1.69.5): + resolution: {integrity: sha512-n1RxDp8UJm6N0IbJLQo+yzLZ2sQCDyl1o0LeugbPWf8+8Fttp29GghsQBjYJVmWq3gBFfe9Hs1spR44vovn2wA==} + engines: {node: ^20.0.0 || ^22.0.0 || >=24.0.0} hasBin: true peerDependencies: - '@types/node': ^20.19.0 || >=22.12.0 - jiti: '>=1.21.0' - less: ^4.0.0 - lightningcss: ^1.21.0 - sass: ^1.70.0 - sass-embedded: ^1.70.0 - stylus: '>=0.54.8' - sugarss: ^5.0.0 - terser: ^5.16.0 - tsx: ^4.8.1 - yaml: ^2.4.2 + '@edge-runtime/vm': '*' + '@opentelemetry/api': ^1.9.0 + '@types/node': ^20.0.0 || ^22.0.0 || >=24.0.0 + '@vitest/browser-playwright': 4.0.15 + '@vitest/browser-preview': 4.0.15 + '@vitest/browser-webdriverio': 4.0.15 + '@vitest/ui': 4.0.15 + happy-dom: '*' + jsdom: '*' peerDependenciesMeta: - '@types/node': - optional: true - jiti: - optional: true - less: + '@edge-runtime/vm': optional: true - lightningcss: + '@opentelemetry/api': optional: true - sass: + '@types/node': optional: true - sass-embedded: + '@vitest/browser-playwright': optional: true - stylus: + '@vitest/browser-preview': optional: true - sugarss: + '@vitest/browser-webdriverio': optional: true - terser: + '@vitest/ui': optional: true - tsx: + happy-dom: optional: true - yaml: + jsdom: optional: true dependencies: - '@types/node': 18.15.11 - esbuild: 0.25.12 - fdir: 6.5.0(picomatch@4.0.3) + '@types/node': 24.10.4 + '@vitest/browser-playwright': 4.0.15(playwright@1.59.1)(vite@7.2.6)(vitest@4.0.15) + '@vitest/expect': 4.0.15 + '@vitest/mocker': 4.0.15(vite@7.2.6) + '@vitest/pretty-format': 4.0.15 + '@vitest/runner': 4.0.15 + '@vitest/snapshot': 4.0.15 + '@vitest/spy': 4.0.15 + '@vitest/utils': 4.0.15 + es-module-lexer: 1.7.0 + expect-type: 1.2.2 + magic-string: 0.30.21 + obug: 2.1.1 + pathe: 2.0.3 picomatch: 4.0.3 - postcss: 8.5.6 - rollup: 4.53.3 - sass: 1.69.5 - tinyglobby: 0.2.15 - optionalDependencies: - fsevents: 2.3.3 - dev: true - - /vite@7.2.6(@types/node@18.15.5)(sass@1.69.5): - resolution: {integrity: sha512-tI2l/nFHC5rLh7+5+o7QjKjSR04ivXDF4jcgV0f/bTQ+OJiITy5S6gaynVsEM+7RqzufMnVbIon6Sr5x1SDYaQ==} - engines: {node: ^20.19.0 || >=22.12.0} - hasBin: true - peerDependencies: - '@types/node': ^20.19.0 || >=22.12.0 - jiti: '>=1.21.0' - less: ^4.0.0 - lightningcss: ^1.21.0 - sass: ^1.70.0 - sass-embedded: ^1.70.0 - stylus: '>=0.54.8' - sugarss: ^5.0.0 - terser: ^5.16.0 - tsx: ^4.8.1 - yaml: ^2.4.2 - peerDependenciesMeta: - '@types/node': - optional: true - jiti: - optional: true - less: - optional: true - lightningcss: - optional: true - sass: - optional: true - sass-embedded: - optional: true - stylus: - optional: true - sugarss: - optional: true - terser: - optional: true - tsx: - optional: true - yaml: - optional: true - dependencies: - '@types/node': 18.15.5 - esbuild: 0.25.12 - fdir: 6.5.0(picomatch@4.0.3) - picomatch: 4.0.3 - postcss: 8.5.6 - rollup: 4.53.3 - sass: 1.69.5 - tinyglobby: 0.2.15 - optionalDependencies: - fsevents: 2.3.3 - dev: true - - /vite@7.2.6(@types/node@20.10.0): - resolution: {integrity: sha512-tI2l/nFHC5rLh7+5+o7QjKjSR04ivXDF4jcgV0f/bTQ+OJiITy5S6gaynVsEM+7RqzufMnVbIon6Sr5x1SDYaQ==} - engines: {node: ^20.19.0 || >=22.12.0} - hasBin: true - peerDependencies: - '@types/node': ^20.19.0 || >=22.12.0 - jiti: '>=1.21.0' - less: ^4.0.0 - lightningcss: ^1.21.0 - sass: ^1.70.0 - sass-embedded: ^1.70.0 - stylus: '>=0.54.8' - sugarss: ^5.0.0 - terser: ^5.16.0 - tsx: ^4.8.1 - yaml: ^2.4.2 - peerDependenciesMeta: - '@types/node': - optional: true - jiti: - optional: true - less: - optional: true - lightningcss: - optional: true - sass: - optional: true - sass-embedded: - optional: true - stylus: - optional: true - sugarss: - optional: true - terser: - optional: true - tsx: - optional: true - yaml: - optional: true - dependencies: - '@types/node': 20.10.0 - esbuild: 0.25.12 - fdir: 6.5.0(picomatch@4.0.3) - picomatch: 4.0.3 - postcss: 8.5.6 - rollup: 4.53.3 - tinyglobby: 0.2.15 - optionalDependencies: - fsevents: 2.3.3 - dev: true - - /vite@7.2.6(@types/node@20.17.32): - resolution: {integrity: sha512-tI2l/nFHC5rLh7+5+o7QjKjSR04ivXDF4jcgV0f/bTQ+OJiITy5S6gaynVsEM+7RqzufMnVbIon6Sr5x1SDYaQ==} - engines: {node: ^20.19.0 || >=22.12.0} - hasBin: true - peerDependencies: - '@types/node': ^20.19.0 || >=22.12.0 - jiti: '>=1.21.0' - less: ^4.0.0 - lightningcss: ^1.21.0 - sass: ^1.70.0 - sass-embedded: ^1.70.0 - stylus: '>=0.54.8' - sugarss: ^5.0.0 - terser: ^5.16.0 - tsx: ^4.8.1 - yaml: ^2.4.2 - peerDependenciesMeta: - '@types/node': - optional: true - jiti: - optional: true - less: - optional: true - lightningcss: - optional: true - sass: - optional: true - sass-embedded: - optional: true - stylus: - optional: true - sugarss: - optional: true - terser: - optional: true - tsx: - optional: true - yaml: - optional: true - dependencies: - '@types/node': 20.17.32 - esbuild: 0.25.12 - fdir: 6.5.0(picomatch@4.0.3) - picomatch: 4.0.3 - postcss: 8.5.6 - rollup: 4.53.3 - tinyglobby: 0.2.15 - optionalDependencies: - fsevents: 2.3.3 - dev: true - - /vitest@4.0.15(@types/node@18.13.0)(@vitest/browser-playwright@4.0.15)(sass@1.69.5): - resolution: {integrity: sha512-n1RxDp8UJm6N0IbJLQo+yzLZ2sQCDyl1o0LeugbPWf8+8Fttp29GghsQBjYJVmWq3gBFfe9Hs1spR44vovn2wA==} - engines: {node: ^20.0.0 || ^22.0.0 || >=24.0.0} - hasBin: true - peerDependencies: - '@edge-runtime/vm': '*' - '@opentelemetry/api': ^1.9.0 - '@types/node': ^20.0.0 || ^22.0.0 || >=24.0.0 - '@vitest/browser-playwright': 4.0.15 - '@vitest/browser-preview': 4.0.15 - '@vitest/browser-webdriverio': 4.0.15 - '@vitest/ui': 4.0.15 - happy-dom: '*' - jsdom: '*' - peerDependenciesMeta: - '@edge-runtime/vm': - optional: true - '@opentelemetry/api': - optional: true - '@types/node': - optional: true - '@vitest/browser-playwright': - optional: true - '@vitest/browser-preview': - optional: true - '@vitest/browser-webdriverio': - optional: true - '@vitest/ui': - optional: true - happy-dom: - optional: true - jsdom: - optional: true - dependencies: - '@types/node': 18.13.0 - '@vitest/browser-playwright': 4.0.15(playwright@1.59.1)(vite@7.2.6)(vitest@4.0.15) - '@vitest/expect': 4.0.15 - '@vitest/mocker': 4.0.15(vite@7.2.6) - '@vitest/pretty-format': 4.0.15 - '@vitest/runner': 4.0.15 - '@vitest/snapshot': 4.0.15 - '@vitest/spy': 4.0.15 - '@vitest/utils': 4.0.15 - es-module-lexer: 1.7.0 - expect-type: 1.2.2 - magic-string: 0.30.21 - obug: 2.1.1 - pathe: 2.0.3 - picomatch: 4.0.3 - std-env: 3.10.0 - tinybench: 2.9.0 - tinyexec: 1.0.2 + std-env: 3.10.0 + tinybench: 2.9.0 + tinyexec: 1.0.2 tinyglobby: 0.2.15 tinyrainbow: 3.0.3 - vite: 7.2.6(@types/node@18.13.0)(sass@1.69.5) + vite: 7.2.6(@types/node@24.10.4)(sass@1.69.5) why-is-node-running: 2.3.0 transitivePeerDependencies: - jiti @@ -29071,7 +28920,7 @@ packages: - yaml dev: true - /vitest@4.0.15(@types/node@18.13.0)(@vitest/ui@4.0.12)(jsdom@27.2.0)(sass@1.69.5): + /vitest@4.0.15(@types/node@24.10.4)(@vitest/ui@4.0.12)(jsdom@27.2.0)(sass@1.69.5): resolution: {integrity: sha512-n1RxDp8UJm6N0IbJLQo+yzLZ2sQCDyl1o0LeugbPWf8+8Fttp29GghsQBjYJVmWq3gBFfe9Hs1spR44vovn2wA==} engines: {node: ^20.0.0 || ^22.0.0 || >=24.0.0} hasBin: true @@ -29105,7 +28954,7 @@ packages: jsdom: optional: true dependencies: - '@types/node': 18.13.0 + '@types/node': 24.10.4 '@vitest/expect': 4.0.15 '@vitest/mocker': 4.0.15(vite@7.2.6) '@vitest/pretty-format': 4.0.15 @@ -29126,287 +28975,7 @@ packages: tinyexec: 1.0.2 tinyglobby: 0.2.15 tinyrainbow: 3.0.3 - vite: 7.2.6(@types/node@18.13.0)(sass@1.69.5) - why-is-node-running: 2.3.0 - transitivePeerDependencies: - - jiti - - less - - lightningcss - - msw - - sass - - sass-embedded - - stylus - - sugarss - - terser - - tsx - - yaml - dev: true - - /vitest@4.0.15(@types/node@18.15.11)(@vitest/browser-playwright@4.0.15)(sass@1.69.5): - resolution: {integrity: sha512-n1RxDp8UJm6N0IbJLQo+yzLZ2sQCDyl1o0LeugbPWf8+8Fttp29GghsQBjYJVmWq3gBFfe9Hs1spR44vovn2wA==} - engines: {node: ^20.0.0 || ^22.0.0 || >=24.0.0} - hasBin: true - peerDependencies: - '@edge-runtime/vm': '*' - '@opentelemetry/api': ^1.9.0 - '@types/node': ^20.0.0 || ^22.0.0 || >=24.0.0 - '@vitest/browser-playwright': 4.0.15 - '@vitest/browser-preview': 4.0.15 - '@vitest/browser-webdriverio': 4.0.15 - '@vitest/ui': 4.0.15 - happy-dom: '*' - jsdom: '*' - peerDependenciesMeta: - '@edge-runtime/vm': - optional: true - '@opentelemetry/api': - optional: true - '@types/node': - optional: true - '@vitest/browser-playwright': - optional: true - '@vitest/browser-preview': - optional: true - '@vitest/browser-webdriverio': - optional: true - '@vitest/ui': - optional: true - happy-dom: - optional: true - jsdom: - optional: true - dependencies: - '@types/node': 18.15.11 - '@vitest/browser-playwright': 4.0.15(playwright@1.59.1)(vite@7.2.6)(vitest@4.0.15) - '@vitest/expect': 4.0.15 - '@vitest/mocker': 4.0.15(vite@7.2.6) - '@vitest/pretty-format': 4.0.15 - '@vitest/runner': 4.0.15 - '@vitest/snapshot': 4.0.15 - '@vitest/spy': 4.0.15 - '@vitest/utils': 4.0.15 - es-module-lexer: 1.7.0 - expect-type: 1.2.2 - magic-string: 0.30.21 - obug: 2.1.1 - pathe: 2.0.3 - picomatch: 4.0.3 - std-env: 3.10.0 - tinybench: 2.9.0 - tinyexec: 1.0.2 - tinyglobby: 0.2.15 - tinyrainbow: 3.0.3 - vite: 7.2.6(@types/node@18.15.11)(sass@1.69.5) - why-is-node-running: 2.3.0 - transitivePeerDependencies: - - jiti - - less - - lightningcss - - msw - - sass - - sass-embedded - - stylus - - sugarss - - terser - - tsx - - yaml - dev: true - - /vitest@4.0.15(@types/node@18.15.5)(@vitest/browser-playwright@4.0.15)(sass@1.69.5): - resolution: {integrity: sha512-n1RxDp8UJm6N0IbJLQo+yzLZ2sQCDyl1o0LeugbPWf8+8Fttp29GghsQBjYJVmWq3gBFfe9Hs1spR44vovn2wA==} - engines: {node: ^20.0.0 || ^22.0.0 || >=24.0.0} - hasBin: true - peerDependencies: - '@edge-runtime/vm': '*' - '@opentelemetry/api': ^1.9.0 - '@types/node': ^20.0.0 || ^22.0.0 || >=24.0.0 - '@vitest/browser-playwright': 4.0.15 - '@vitest/browser-preview': 4.0.15 - '@vitest/browser-webdriverio': 4.0.15 - '@vitest/ui': 4.0.15 - happy-dom: '*' - jsdom: '*' - peerDependenciesMeta: - '@edge-runtime/vm': - optional: true - '@opentelemetry/api': - optional: true - '@types/node': - optional: true - '@vitest/browser-playwright': - optional: true - '@vitest/browser-preview': - optional: true - '@vitest/browser-webdriverio': - optional: true - '@vitest/ui': - optional: true - happy-dom: - optional: true - jsdom: - optional: true - dependencies: - '@types/node': 18.15.5 - '@vitest/browser-playwright': 4.0.15(playwright@1.59.1)(vite@7.2.6)(vitest@4.0.15) - '@vitest/expect': 4.0.15 - '@vitest/mocker': 4.0.15(vite@7.2.6) - '@vitest/pretty-format': 4.0.15 - '@vitest/runner': 4.0.15 - '@vitest/snapshot': 4.0.15 - '@vitest/spy': 4.0.15 - '@vitest/utils': 4.0.15 - es-module-lexer: 1.7.0 - expect-type: 1.2.2 - magic-string: 0.30.21 - obug: 2.1.1 - pathe: 2.0.3 - picomatch: 4.0.3 - std-env: 3.10.0 - tinybench: 2.9.0 - tinyexec: 1.0.2 - tinyglobby: 0.2.15 - tinyrainbow: 3.0.3 - vite: 7.2.6(@types/node@18.15.5)(sass@1.69.5) - why-is-node-running: 2.3.0 - transitivePeerDependencies: - - jiti - - less - - lightningcss - - msw - - sass - - sass-embedded - - stylus - - sugarss - - terser - - tsx - - yaml - dev: true - - /vitest@4.0.15(@types/node@20.10.0)(@vitest/browser-playwright@4.0.15): - resolution: {integrity: sha512-n1RxDp8UJm6N0IbJLQo+yzLZ2sQCDyl1o0LeugbPWf8+8Fttp29GghsQBjYJVmWq3gBFfe9Hs1spR44vovn2wA==} - engines: {node: ^20.0.0 || ^22.0.0 || >=24.0.0} - hasBin: true - peerDependencies: - '@edge-runtime/vm': '*' - '@opentelemetry/api': ^1.9.0 - '@types/node': ^20.0.0 || ^22.0.0 || >=24.0.0 - '@vitest/browser-playwright': 4.0.15 - '@vitest/browser-preview': 4.0.15 - '@vitest/browser-webdriverio': 4.0.15 - '@vitest/ui': 4.0.15 - happy-dom: '*' - jsdom: '*' - peerDependenciesMeta: - '@edge-runtime/vm': - optional: true - '@opentelemetry/api': - optional: true - '@types/node': - optional: true - '@vitest/browser-playwright': - optional: true - '@vitest/browser-preview': - optional: true - '@vitest/browser-webdriverio': - optional: true - '@vitest/ui': - optional: true - happy-dom: - optional: true - jsdom: - optional: true - dependencies: - '@types/node': 20.10.0 - '@vitest/browser-playwright': 4.0.15(playwright@1.59.1)(vite@7.2.6)(vitest@4.0.15) - '@vitest/expect': 4.0.15 - '@vitest/mocker': 4.0.15(vite@7.2.6) - '@vitest/pretty-format': 4.0.15 - '@vitest/runner': 4.0.15 - '@vitest/snapshot': 4.0.15 - '@vitest/spy': 4.0.15 - '@vitest/utils': 4.0.15 - es-module-lexer: 1.7.0 - expect-type: 1.2.2 - magic-string: 0.30.21 - obug: 2.1.1 - pathe: 2.0.3 - picomatch: 4.0.3 - std-env: 3.10.0 - tinybench: 2.9.0 - tinyexec: 1.0.2 - tinyglobby: 0.2.15 - tinyrainbow: 3.0.3 - vite: 7.2.6(@types/node@20.10.0) - why-is-node-running: 2.3.0 - transitivePeerDependencies: - - jiti - - less - - lightningcss - - msw - - sass - - sass-embedded - - stylus - - sugarss - - terser - - tsx - - yaml - dev: true - - /vitest@4.0.15(@types/node@20.17.32)(@vitest/browser-playwright@4.0.15): - resolution: {integrity: sha512-n1RxDp8UJm6N0IbJLQo+yzLZ2sQCDyl1o0LeugbPWf8+8Fttp29GghsQBjYJVmWq3gBFfe9Hs1spR44vovn2wA==} - engines: {node: ^20.0.0 || ^22.0.0 || >=24.0.0} - hasBin: true - peerDependencies: - '@edge-runtime/vm': '*' - '@opentelemetry/api': ^1.9.0 - '@types/node': ^20.0.0 || ^22.0.0 || >=24.0.0 - '@vitest/browser-playwright': 4.0.15 - '@vitest/browser-preview': 4.0.15 - '@vitest/browser-webdriverio': 4.0.15 - '@vitest/ui': 4.0.15 - happy-dom: '*' - jsdom: '*' - peerDependenciesMeta: - '@edge-runtime/vm': - optional: true - '@opentelemetry/api': - optional: true - '@types/node': - optional: true - '@vitest/browser-playwright': - optional: true - '@vitest/browser-preview': - optional: true - '@vitest/browser-webdriverio': - optional: true - '@vitest/ui': - optional: true - happy-dom: - optional: true - jsdom: - optional: true - dependencies: - '@types/node': 20.17.32 - '@vitest/browser-playwright': 4.0.15(playwright@1.59.1)(vite@7.2.6)(vitest@4.0.15) - '@vitest/expect': 4.0.15 - '@vitest/mocker': 4.0.15(vite@7.2.6) - '@vitest/pretty-format': 4.0.15 - '@vitest/runner': 4.0.15 - '@vitest/snapshot': 4.0.15 - '@vitest/spy': 4.0.15 - '@vitest/utils': 4.0.15 - es-module-lexer: 1.7.0 - expect-type: 1.2.2 - magic-string: 0.30.21 - obug: 2.1.1 - pathe: 2.0.3 - picomatch: 4.0.3 - std-env: 3.10.0 - tinybench: 2.9.0 - tinyexec: 1.0.2 - tinyglobby: 0.2.15 - tinyrainbow: 3.0.3 - vite: 7.2.6(@types/node@20.17.32) + vite: 7.2.6(@types/node@24.10.4)(sass@1.69.5) why-is-node-running: 2.3.0 transitivePeerDependencies: - jiti diff --git a/frontend/providers/aiproxy/package.json b/frontend/providers/aiproxy/package.json index 2e234f01bfdc..41d35c41aa79 100644 --- a/frontend/providers/aiproxy/package.json +++ b/frontend/providers/aiproxy/package.json @@ -42,7 +42,7 @@ "i18next-http-backend": "^2.6.2", "i18next-resources-to-backend": "^1.2.1", "immer": "^10.1.1", - "jsonwebtoken": "^9.0.2", + "jsonwebtoken": "^9.0.3", "lucide-react": "^0.555.0", "next": "14.2.35", "next-i18next": "^15.3.0", diff --git a/frontend/providers/devbox/package.json b/frontend/providers/devbox/package.json index 2027813883c9..afa6bc7355d4 100644 --- a/frontend/providers/devbox/package.json +++ b/frontend/providers/devbox/package.json @@ -49,7 +49,7 @@ "ini": "^4.1.3", "js-cookie": "^3.0.5", "js-yaml": "^4.1.0", - "jsonwebtoken": "^9.0.2", + "jsonwebtoken": "^9.0.3", "jszip": "^3.10.1", "lodash": "^4.17.21", "lucide-react": "^0.476.0", diff --git a/frontend/providers/license/package.json b/frontend/providers/license/package.json index 00f1c7a1f099..1b5564d00cda 100644 --- a/frontend/providers/license/package.json +++ b/frontend/providers/license/package.json @@ -33,7 +33,7 @@ "immer": "^9.0.21", "js-cookie": "^3.0.5", "js-yaml": "^4.1.0", - "jsonwebtoken": "^9.0.2", + "jsonwebtoken": "^9.0.3", "jszip": "^3.10.1", "lodash": "^4.17.21", "mongodb": "^5.9.0", From 4961fbd9204260e7c598b4efe3692cf91d4b3c31 Mon Sep 17 00:00:00 2001 From: Nixieboluo Date: Mon, 15 Jun 2026 16:06:04 +0800 Subject: [PATCH 4/5] refactor(auth): replace jsonwebtoken with jose --- frontend/.nvmrc | 2 +- frontend/Dockerfile | 2 +- frontend/desktop/package.json | 2 - .../unit/backend/auth/global-token.test.ts | 10 +- .../pages/api/account/alerts/createAlert.ts | 2 +- .../pages/api/account/alerts/deleteAlerts.ts | 2 +- .../pages/api/account/alerts/listAlerts.ts | 2 +- .../pages/api/account/alerts/updateAlerts.ts | 2 +- .../pages/api/account/enterpriseRealName.ts | 4 +- .../api/account/generateRealNameQRcodeUri.ts | 2 +- .../api/account/refreshRealNameQRecodeUri.ts | 2 +- .../desktop/src/pages/api/auth/globalToken.ts | 2 +- .../src/pages/api/auth/namespace/switch.ts | 4 +- .../src/pages/api/desktop/getBilling.ts | 2 +- frontend/desktop/src/pages/api/plan/info.ts | 2 +- .../src/pages/api/plan/workspaces-plans.ts | 2 +- .../src/pages/api/workspace/getQuota.ts | 2 +- frontend/desktop/src/services/backend/auth.ts | 34 +- .../services/backend/cronjob/mergeUserCr.ts | 8 +- .../src/services/backend/globalAuth.ts | 2 +- .../backend/middleware/checkResource.ts | 4 +- .../src/services/backend/middleware/oauth.ts | 7 +- .../src/services/backend/oauth2/service.ts | 8 +- .../src/services/backend/regionAuth.ts | 8 +- .../src/services/backend/svc/checkResource.ts | 6 +- frontend/package.json | 2 +- .../shared/__tests__/server/jwt.test.ts | 76 ++ frontend/packages/shared/package.json | 7 + .../packages/shared/src-server/jwt/index.ts | 74 ++ frontend/packages/shared/vitest.config.mts | 11 + frontend/pnpm-lock.yaml | 1003 ++--------------- frontend/providers/aiproxy/package.json | 2 - .../providers/aiproxy/utils/backend/auth.ts | 43 +- frontend/providers/applaunchpad/package.json | 2 - .../applaunchpad/src/services/backend/auth.ts | 9 +- frontend/providers/cloudserver/package.json | 3 +- .../cloudserver/src/services/backend/auth.ts | 14 +- frontend/providers/costcenter/package.json | 2 - .../costcenter/src/pages/api/plan/list.ts | 2 +- .../providers/costcenter/src/service/auth.ts | 19 +- .../costcenter/src/service/backend/region.ts | 15 +- frontend/providers/dbprovider/package.json | 2 - .../dbprovider/src/services/backend/auth.ts | 9 +- frontend/providers/license/package.json | 3 +- .../providers/license/src/utils/crypto.ts | 10 +- frontend/providers/objectstorage/package.json | 2 - .../objectstorage/src/utils/isRealName.ts | 10 +- 47 files changed, 380 insertions(+), 1063 deletions(-) create mode 100644 frontend/packages/shared/__tests__/server/jwt.test.ts create mode 100644 frontend/packages/shared/src-server/jwt/index.ts diff --git a/frontend/.nvmrc b/frontend/.nvmrc index be5f09d0a368..c4697fd5666f 100644 --- a/frontend/.nvmrc +++ b/frontend/.nvmrc @@ -1 +1 @@ -26.1.0 \ No newline at end of file +26.3.0 diff --git a/frontend/Dockerfile b/frontend/Dockerfile index 6c729170e26b..d66e1ab82f60 100644 --- a/frontend/Dockerfile +++ b/frontend/Dockerfile @@ -11,7 +11,7 @@ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. -FROM node:26.1.0-alpine AS base +FROM node:26.3.0-alpine AS base ENV PNPM_HOME="/pnpm" ENV PATH="$PNPM_HOME:$PATH" WORKDIR /app diff --git a/frontend/desktop/package.json b/frontend/desktop/package.json index 5d0a2aadc840..39a4d3e5c1b0 100644 --- a/frontend/desktop/package.json +++ b/frontend/desktop/package.json @@ -63,7 +63,6 @@ "immer": "^10.0.2", "js-cookie": "^3.0.5", "js-yaml": "^4.1.0", - "jsonwebtoken": "^9.0.3", "jwt-decode": "^4.0.0", "lodash": "^4.17.21", "lucide-react": "^0.488.0", @@ -101,7 +100,6 @@ "@testing-library/react": "^14.0.0", "@types/js-cookie": "^3.0.4", "@types/js-yaml": "^4.0.6", - "@types/jsonwebtoken": "^9.0.3", "@types/lodash": "^4.14.199", "@types/minio": "^7.1.1", "@types/node": "^24", diff --git a/frontend/desktop/src/__tests__/unit/backend/auth/global-token.test.ts b/frontend/desktop/src/__tests__/unit/backend/auth/global-token.test.ts index efe9f0e5fd35..ac380bf5763f 100644 --- a/frontend/desktop/src/__tests__/unit/backend/auth/global-token.test.ts +++ b/frontend/desktop/src/__tests__/unit/backend/auth/global-token.test.ts @@ -5,7 +5,7 @@ import { generateOAuth2RefreshToken, verifyGlobalToken } from '@/services/backend/auth'; -import { sign } from 'jsonwebtoken'; +import { signJwt } from '@sealos/shared/server/jwt'; describe('verifyGlobalToken', () => { beforeEach(() => { @@ -31,7 +31,7 @@ describe('verifyGlobalToken', () => { } as any); it('maps oauth2 access token claims to legacy payload', async () => { - const token = generateOAuth2AccessToken({ + const token = await generateOAuth2AccessToken({ sub: 'oauth-uid', user_id: 'oauth-user-id', client_id: GLOBAL_TOKEN_CLIENT_ID @@ -46,7 +46,7 @@ describe('verifyGlobalToken', () => { }); it('rejects oauth2 refresh token', async () => { - const token = generateOAuth2RefreshToken({ + const token = await generateOAuth2RefreshToken({ sub: 'oauth-uid', user_id: 'oauth-user-id', client_id: GLOBAL_TOKEN_CLIENT_ID @@ -58,7 +58,7 @@ describe('verifyGlobalToken', () => { }); it('rejects oauth2 access token without subject', async () => { - const token = sign( + const token = await signJwt( { client_id: GLOBAL_TOKEN_CLIENT_ID, token_type: 'access_token', @@ -74,7 +74,7 @@ describe('verifyGlobalToken', () => { }); it('rejects oauth2 access token without user_id', async () => { - const token = sign( + const token = await signJwt( { sub: 'oauth-uid', client_id: GLOBAL_TOKEN_CLIENT_ID, diff --git a/frontend/desktop/src/pages/api/account/alerts/createAlert.ts b/frontend/desktop/src/pages/api/account/alerts/createAlert.ts index c3a1ad93c96a..4582536991e6 100644 --- a/frontend/desktop/src/pages/api/account/alerts/createAlert.ts +++ b/frontend/desktop/src/pages/api/account/alerts/createAlert.ts @@ -77,7 +77,7 @@ export default async function handler(req: NextApiRequest, res: NextApiResponse) return jsonRes(res, { code: 500, message: 'Billing service not configured' }); } - const billingToken = generateBillingToken({ + const billingToken = await generateBillingToken({ userUid: session.userUid, userId: session.userId }); diff --git a/frontend/desktop/src/pages/api/account/alerts/deleteAlerts.ts b/frontend/desktop/src/pages/api/account/alerts/deleteAlerts.ts index 344f6d24395e..0433870fb099 100644 --- a/frontend/desktop/src/pages/api/account/alerts/deleteAlerts.ts +++ b/frontend/desktop/src/pages/api/account/alerts/deleteAlerts.ts @@ -35,7 +35,7 @@ export default async function handler(req: NextApiRequest, res: NextApiResponse) return jsonRes(res, { code: 500, message: 'Billing service not configured' }); } - const billingToken = generateBillingToken({ + const billingToken = await generateBillingToken({ userUid: session.userUid, userId: session.userId }); diff --git a/frontend/desktop/src/pages/api/account/alerts/listAlerts.ts b/frontend/desktop/src/pages/api/account/alerts/listAlerts.ts index d1e3683efbad..eed55617558c 100644 --- a/frontend/desktop/src/pages/api/account/alerts/listAlerts.ts +++ b/frontend/desktop/src/pages/api/account/alerts/listAlerts.ts @@ -25,7 +25,7 @@ export default async function handler(req: NextApiRequest, res: NextApiResponse) return jsonRes(res, { code: 500, message: 'Billing service not configured' }); } - const billingToken = generateBillingToken({ + const billingToken = await generateBillingToken({ userUid: session.userUid, userId: session.userId }); diff --git a/frontend/desktop/src/pages/api/account/alerts/updateAlerts.ts b/frontend/desktop/src/pages/api/account/alerts/updateAlerts.ts index 19ed0aa2595e..70934ffa9915 100644 --- a/frontend/desktop/src/pages/api/account/alerts/updateAlerts.ts +++ b/frontend/desktop/src/pages/api/account/alerts/updateAlerts.ts @@ -42,7 +42,7 @@ export default async function handler(req: NextApiRequest, res: NextApiResponse) return jsonRes(res, { code: 500, message: 'Billing service not configured' }); } - const billingToken = generateBillingToken({ + const billingToken = await generateBillingToken({ userUid: session.userUid, userId: session.userId }); diff --git a/frontend/desktop/src/pages/api/account/enterpriseRealName.ts b/frontend/desktop/src/pages/api/account/enterpriseRealName.ts index c41c713e32c5..f3e33236507e 100644 --- a/frontend/desktop/src/pages/api/account/enterpriseRealName.ts +++ b/frontend/desktop/src/pages/api/account/enterpriseRealName.ts @@ -196,7 +196,7 @@ async function handlePost( const data = validationResult.data; - const globalToken = generateLegacyGlobalToken({ + const globalToken = await generateLegacyGlobalToken({ userUid: payload.userUid, userId: payload.userId, regionUid: payload.regionUid @@ -346,7 +346,7 @@ async function handleGetBanks( const config: UnionPay3060Config = realNameAuthProvider.config as UnionPay3060Config; const enterpriseRealNameAuthApi = config.api; - const globalToken = generateLegacyGlobalToken({ + const globalToken = await generateLegacyGlobalToken({ userUid: payload.userUid, userId: payload.userId, regionUid: payload.regionUid diff --git a/frontend/desktop/src/pages/api/account/generateRealNameQRcodeUri.ts b/frontend/desktop/src/pages/api/account/generateRealNameQRcodeUri.ts index 2feb8b5da02c..db1b05b97365 100644 --- a/frontend/desktop/src/pages/api/account/generateRealNameQRcodeUri.ts +++ b/frontend/desktop/src/pages/api/account/generateRealNameQRcodeUri.ts @@ -123,7 +123,7 @@ export default async function handler(req: NextApiRequest, res: NextApiResponse) global.AppConfig?.common.realNameCallbackUrl || `https://${global.AppConfig?.cloud.domain}/api/account/faceIdRealNameAuthCallback`; - const globalToken = generateLegacyGlobalToken( + const globalToken = await generateLegacyGlobalToken( { userUid: payload.userUid, userId: payload.userId diff --git a/frontend/desktop/src/pages/api/account/refreshRealNameQRecodeUri.ts b/frontend/desktop/src/pages/api/account/refreshRealNameQRecodeUri.ts index 80174f53d69d..fa35cc2df57c 100644 --- a/frontend/desktop/src/pages/api/account/refreshRealNameQRecodeUri.ts +++ b/frontend/desktop/src/pages/api/account/refreshRealNameQRecodeUri.ts @@ -121,7 +121,7 @@ export default async function handler(req: NextApiRequest, res: NextApiResponse) global.AppConfig?.common.realNameCallbackUrl || `https://${global.AppConfig?.cloud.domain}/api/account/faceIdRealNameAuthCallback`; - const globalToken = generateLegacyGlobalToken( + const globalToken = await generateLegacyGlobalToken( { userUid: payload.userUid, userId: payload.userId diff --git a/frontend/desktop/src/pages/api/auth/globalToken.ts b/frontend/desktop/src/pages/api/auth/globalToken.ts index b77c8b4cbe42..12dd9eecb7d5 100644 --- a/frontend/desktop/src/pages/api/auth/globalToken.ts +++ b/frontend/desktop/src/pages/api/auth/globalToken.ts @@ -15,7 +15,7 @@ export default async function handler(req: NextApiRequest, res: NextApiResponse) code: 200, message: 'Successfully', data: { - token: generateGlobalAccessToken({ + token: await generateGlobalAccessToken({ sub: regionUserData.userUid, user_id: regionUserData.userId }) diff --git a/frontend/desktop/src/pages/api/auth/namespace/switch.ts b/frontend/desktop/src/pages/api/auth/namespace/switch.ts index 84576aa15898..c0e708820b78 100644 --- a/frontend/desktop/src/pages/api/auth/namespace/switch.ts +++ b/frontend/desktop/src/pages/api/auth/namespace/switch.ts @@ -40,8 +40,8 @@ export default async function handler(req: NextApiRequest, res: NextApiResponse) userId: payload.userId, userUid: payload.userUid }; - const token = generateRegionalToken(jwtPayload); - const appToken = generateAppToken(jwtPayload); + const token = await generateRegionalToken(jwtPayload); + const appToken = await generateAppToken(jwtPayload); const data = { token, appToken diff --git a/frontend/desktop/src/pages/api/desktop/getBilling.ts b/frontend/desktop/src/pages/api/desktop/getBilling.ts index 73a59e5dbea6..d8c9b731abac 100644 --- a/frontend/desktop/src/pages/api/desktop/getBilling.ts +++ b/frontend/desktop/src/pages/api/desktop/getBilling.ts @@ -31,7 +31,7 @@ export default async function handler(req: NextApiRequest, res: NextApiResponse) const base = global.AppConfig.desktop.auth.billingUrl as string; const consumptionUrl = base + '/account/v1alpha1/costs/all-region-consumption'; - const billingToken = generateBillingToken({ + const billingToken = await generateBillingToken({ userUid: payload.userUid, userId: payload.userId }); diff --git a/frontend/desktop/src/pages/api/plan/info.ts b/frontend/desktop/src/pages/api/plan/info.ts index ef4c053cf60d..a70693655aca 100644 --- a/frontend/desktop/src/pages/api/plan/info.ts +++ b/frontend/desktop/src/pages/api/plan/info.ts @@ -25,7 +25,7 @@ export default async function handler(req: NextApiRequest, res: NextApiResponse) return jsonRes(res, { code: 500, message: 'Billing service not configured' }); } - const billingToken = generateBillingToken({ + const billingToken = await generateBillingToken({ userUid: payload.userUid, userId: payload.userId }); diff --git a/frontend/desktop/src/pages/api/plan/workspaces-plans.ts b/frontend/desktop/src/pages/api/plan/workspaces-plans.ts index a5e61b93c382..a9d602c41be6 100644 --- a/frontend/desktop/src/pages/api/plan/workspaces-plans.ts +++ b/frontend/desktop/src/pages/api/plan/workspaces-plans.ts @@ -24,7 +24,7 @@ export default async function handler(req: NextApiRequest, res: NextApiResponse) return jsonRes(res, { code: 500, message: 'Billing service not configured' }); } - const billingToken = generateBillingToken({ + const billingToken = await generateBillingToken({ userUid: payload.userUid, userId: payload.userId }); diff --git a/frontend/desktop/src/pages/api/workspace/getQuota.ts b/frontend/desktop/src/pages/api/workspace/getQuota.ts index 9e3c2a19d1ca..5a81ace27125 100644 --- a/frontend/desktop/src/pages/api/workspace/getQuota.ts +++ b/frontend/desktop/src/pages/api/workspace/getQuota.ts @@ -31,7 +31,7 @@ export default async function handler(req: NextApiRequest, res: NextApiResponse) return jsonRes(res, { code: 500, message: 'Billing service not configured' }); } - const billingToken = generateBillingToken({ + const billingToken = await generateBillingToken({ userUid: session.userUid, userId: session.userId }); diff --git a/frontend/desktop/src/services/backend/auth.ts b/frontend/desktop/src/services/backend/auth.ts index 46e5c36dfc0a..66f06ed55ed5 100644 --- a/frontend/desktop/src/services/backend/auth.ts +++ b/frontend/desktop/src/services/backend/auth.ts @@ -9,8 +9,8 @@ import { OAuth2RefreshTokenPayload, OnceTokenPayload } from '@/types/token'; +import { signJwt, verifyJwt as verifySharedJwt } from '@sealos/shared/server/jwt'; import { IncomingHttpHeaders } from 'http'; -import { sign, verify } from 'jsonwebtoken'; const regionUID = () => global.AppConfig?.cloud.regionUID || '123456789'; export const globalJwtSecret = () => global.AppConfig?.desktop.auth.jwt.global || '123456789'; @@ -129,19 +129,11 @@ export const verifyGlobalToken = async ( return null; }; +const signPayload = (payload: T, secret: string, expiresIn: string) => + signJwt(payload as Record, secret, { expiresIn }); + const verifyJwt = (token: string | undefined, secret: string) => - new Promise((resolve) => { - if (!token) return resolve(null); - verify(token, secret, (err, payload) => { - if (err) { - resolve(null); - } else if (!payload) { - resolve(null); - } else { - resolve(payload as T); - } - }); - }); + verifySharedJwt(token, secret) as Promise; export const verifyRegionalJwt = (token?: string) => verifyJwt(token, regionalJwtSecret()); @@ -160,13 +152,13 @@ export const verifyAppToken = async (header: IncomingHttpHeaders) => { }; export const generateBillingToken = (props: BillingTokenPayload) => - sign(props, internalJwtSecret(), { expiresIn: '3600000' }); + signPayload(props, internalJwtSecret(), '3600000'); export const generateRegionalToken = (props: AccessTokenPayload) => - sign(props, regionalJwtSecret(), { expiresIn: '7d' }); + signPayload(props, regionalJwtSecret(), '7d'); export const generateAppToken = (props: AccessTokenPayload) => - sign(props, internalJwtSecret(), { expiresIn: '7d' }); + signPayload(props, internalJwtSecret(), '7d'); /** * Signs global token. @@ -182,7 +174,7 @@ export const signGlobalToken = (props: GlobalJwtClaims, expiresIn?: string) => { ...props }; - return sign(payload, globalJwtSecret(), { expiresIn: expiresIn ?? '7d' }); + return signPayload(payload, globalJwtSecret(), expiresIn ?? '7d'); }; /** @@ -199,7 +191,7 @@ export const generateLegacyGlobalToken = (props: GlobalTokenPayload, expiresIn?: // [FIXME] Should have a client_id in here but external services will reject the additional claim. }; - return sign(payload, globalJwtSecret(), { expiresIn: expiresIn ?? '7d' }); + return signPayload(payload, globalJwtSecret(), expiresIn ?? '7d'); }; /** @@ -267,10 +259,10 @@ export const verifyOAuth2RefreshToken = (token?: string) => verifyOAuth2TokenByType(token, REFRESH_TOKEN_TYPE); export const generateOnceToken = (props: OnceTokenPayload) => - sign(props, regionalJwtSecret(), { expiresIn: '1800000' }); + signPayload(props, regionalJwtSecret(), '1800000'); export const generateCronJobToken = (props: CronJobTokenPayload) => - sign(props, internalJwtSecret(), { expiresIn: '60000' }); + signPayload(props, internalJwtSecret(), '60000'); export const callBillingService = async ( endpoint: string, @@ -282,7 +274,7 @@ export const callBillingService = async ( throw new Error('Billing service not configured'); } - const billingToken = generateBillingToken(payload); + const billingToken = await generateBillingToken(payload); const regionDomain = body.regionDomain || global.AppConfig.cloud.domain; const requestBody = { ...body, diff --git a/frontend/desktop/src/services/backend/cronjob/mergeUserCr.ts b/frontend/desktop/src/services/backend/cronjob/mergeUserCr.ts index 1dd7b4561a4b..a1a9500ac582 100644 --- a/frontend/desktop/src/services/backend/cronjob/mergeUserCr.ts +++ b/frontend/desktop/src/services/backend/cronjob/mergeUserCr.ts @@ -264,21 +264,21 @@ export class MergeUserCrJob implements CronJobStatus { headers: { Authorization: 'Bearer ' + - generateBillingToken({ + (await generateBillingToken({ userUid: mergeUser.uid, userId: mergeUser.id - }) + })) } } ), axios.post(workorderUrl, { - token: generateCronJobToken({ + token: await generateCronJobToken({ userUid: user.id, mergeUserUid: mergeUser.id }) }), axios.post(cvmUrl, { - token: generateCronJobToken({ + token: await generateCronJobToken({ userUid: user.uid, mergeUserUid: mergeUser.uid }) diff --git a/frontend/desktop/src/services/backend/globalAuth.ts b/frontend/desktop/src/services/backend/globalAuth.ts index e9f78553a6c7..ecd59f67d8cf 100644 --- a/frontend/desktop/src/services/backend/globalAuth.ts +++ b/frontend/desktop/src/services/backend/globalAuth.ts @@ -498,7 +498,7 @@ export const getGlobalToken = async ({ // user is deleted or banned if (user.status !== UserStatus.NORMAL_USER) return null; - const token = generateGlobalAccessToken({ + const token = await generateGlobalAccessToken({ sub: user.uid, user_id: user.id, preferred_username: user.nickname diff --git a/frontend/desktop/src/services/backend/middleware/checkResource.ts b/frontend/desktop/src/services/backend/middleware/checkResource.ts index 08ac3f39d66e..8518c054ff62 100644 --- a/frontend/desktop/src/services/backend/middleware/checkResource.ts +++ b/frontend/desktop/src/services/backend/middleware/checkResource.ts @@ -126,7 +126,7 @@ export const otherRegionResourceGuard = (region) => region.uid !== global.AppConfig.cloud.regionUID ); const otherCheckResp = await Promise.all( - regionTarget.map((region) => + regionTarget.map(async (region) => fetch( process.env.NODE_ENV === 'development' ? `http://127.0.0.1:3000/api/auth/delete/checkResource` @@ -134,7 +134,7 @@ export const otherRegionResourceGuard = { headers: { authorization: encodeURI( - generateLegacyGlobalToken({ + await generateLegacyGlobalToken({ userUid: userUid, userId: userId }) diff --git a/frontend/desktop/src/services/backend/middleware/oauth.ts b/frontend/desktop/src/services/backend/middleware/oauth.ts index ab1bc40ad372..3fae6b94f463 100644 --- a/frontend/desktop/src/services/backend/middleware/oauth.ts +++ b/frontend/desktop/src/services/backend/middleware/oauth.ts @@ -2,7 +2,6 @@ import { NextApiRequest, NextApiResponse } from 'next'; import { jsonRes } from '../response'; import { isNumber } from 'lodash'; import { TgithubToken, TgithubUser, TWechatToken, TWechatUser } from '@/types/user'; -import * as jwt from 'jsonwebtoken'; import { userCanMerge } from '@/utils/tools'; import { ProviderType } from 'prisma/global/generated/client'; import { globalPrisma } from '../db/init'; @@ -13,6 +12,7 @@ import { UNBIND_STATUS } from '@/types/response/unbind'; import { SemData } from '@/types/sem'; import axios from 'axios'; import { AdClickData } from '@/types/adClick'; +import { decodeJwt } from '@sealos/shared/server/jwt'; export const OauthCodeFilter = async ( req: NextApiRequest, @@ -95,7 +95,7 @@ export const googleOAuthGuard = token_type: string; id_token: string; }; - const userInfo = jwt.decode(__data.id_token) as { + const userInfo = decodeJwt<{ iss: string; azp: string; aud: string; @@ -109,7 +109,8 @@ export const googleOAuthGuard = locale: string; iat: number; exp: number; - }; + }>(__data.id_token); + if (!userInfo) throw Error('get userInfo error'); const name = userInfo.name; const id = userInfo.sub; const avatar_url = userInfo.picture; diff --git a/frontend/desktop/src/services/backend/oauth2/service.ts b/frontend/desktop/src/services/backend/oauth2/service.ts index 70aa65785bd2..a2da9c6b3e25 100644 --- a/frontend/desktop/src/services/backend/oauth2/service.ts +++ b/frontend/desktop/src/services/backend/oauth2/service.ts @@ -187,7 +187,7 @@ export const exchangeDeviceCodeForToken = async ( throw new OAuth2HttpError(400, 'invalid_grant'); } - const accessToken = generateOAuth2AccessToken( + const accessToken = await generateOAuth2AccessToken( { sub: user.uid, user_id: user.id, @@ -196,7 +196,7 @@ export const exchangeDeviceCodeForToken = async ( }, `${ACCESS_TOKEN_EXPIRES_IN_SECONDS}s` ); - const refreshToken = generateOAuth2RefreshToken( + const refreshToken = await generateOAuth2RefreshToken( { sub: user.uid, user_id: user.id, @@ -248,7 +248,7 @@ export const exchangeRefreshTokenForToken = async ( throw new OAuth2HttpError(400, 'invalid_grant', 'Refresh token does not match client'); } - const accessToken = generateOAuth2AccessToken( + const accessToken = await generateOAuth2AccessToken( { sub: refreshPayload.sub, user_id: refreshPayload.user_id, @@ -258,7 +258,7 @@ export const exchangeRefreshTokenForToken = async ( }, `${ACCESS_TOKEN_EXPIRES_IN_SECONDS}s` ); - const refreshToken = generateOAuth2RefreshToken( + const refreshToken = await generateOAuth2RefreshToken( { sub: refreshPayload.sub, user_id: refreshPayload.user_id, diff --git a/frontend/desktop/src/services/backend/regionAuth.ts b/frontend/desktop/src/services/backend/regionAuth.ts index 02ac1639d3f9..c6edd75c0543 100644 --- a/frontend/desktop/src/services/backend/regionAuth.ts +++ b/frontend/desktop/src/services/backend/regionAuth.ts @@ -347,8 +347,8 @@ export async function getRegionToken({ const { kubeconfig, payload } = result; return { kubeconfig, - token: generateRegionalToken(payload), - appToken: generateAppToken(payload) + token: await generateRegionalToken(payload), + appToken: await generateAppToken(payload) }; } @@ -573,8 +573,8 @@ export async function initRegionToken({ const { kubeconfig, payload } = result; return { kubeconfig, - token: generateRegionalToken(payload), - appToken: generateAppToken(payload) + token: await generateRegionalToken(payload), + appToken: await generateAppToken(payload) }; } diff --git a/frontend/desktop/src/services/backend/svc/checkResource.ts b/frontend/desktop/src/services/backend/svc/checkResource.ts index f0c9290ad6e2..191d1104e4ff 100644 --- a/frontend/desktop/src/services/backend/svc/checkResource.ts +++ b/frontend/desktop/src/services/backend/svc/checkResource.ts @@ -48,7 +48,7 @@ const checkResourceResponse = async (userId: string, userUid: string, userCrName const authorization = 'Bearer ' + encodeURI( - generateBillingToken({ + await generateBillingToken({ userUid, userId }) @@ -157,7 +157,7 @@ export const allRegionResourceSvc = resource: currentResourceCheck }); const otherCheckResp = await Promise.all( - regionTarget.map((region) => + regionTarget.map(async (region) => fetch( process.env.NODE_ENV === 'development' ? `http://127.0.0.1:3000/api/auth/delete/checkCurrentResource` @@ -165,7 +165,7 @@ export const allRegionResourceSvc = { headers: { authorization: encodeURI( - generateLegacyGlobalToken({ + await generateLegacyGlobalToken({ userUid: userUid, userId: userId }) diff --git a/frontend/package.json b/frontend/package.json index 96c513066d12..9b7dc4d186ad 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -51,7 +51,7 @@ }, "packageManager": "pnpm@8.9.0", "engines": { - "node": "26.1.0", + "node": "26.3.0", "pnpm": "8.9.0" } } diff --git a/frontend/packages/shared/__tests__/server/jwt.test.ts b/frontend/packages/shared/__tests__/server/jwt.test.ts new file mode 100644 index 000000000000..78cdc9df4202 --- /dev/null +++ b/frontend/packages/shared/__tests__/server/jwt.test.ts @@ -0,0 +1,76 @@ +import { describe, expect, it } from 'vitest'; +import { decodeJwt, isJwtToken, signJwt, verifyJwt, verifyJwtOrThrow } from '../../src-server/jwt'; + +type TestPayload = { + sub: string; + user_id: string; +}; + +describe('server jwt utilities', () => { + it('signs and verifies HS256 tokens', async () => { + const token = await signJwt( + { + sub: 'user-uid', + user_id: 'user-id' + }, + 'test-secret', + { expiresIn: '1h' } + ); + + const payload = await verifyJwt(token, 'test-secret'); + + expect(payload).toMatchObject({ + sub: 'user-uid', + user_id: 'user-id' + }); + expect(payload?.iat).toEqual(expect.any(Number)); + expect(payload?.exp).toEqual(expect.any(Number)); + }); + + it('returns null when the secret is wrong', async () => { + const token = await signJwt({ sub: 'user-uid' }, 'test-secret', { expiresIn: '1h' }); + + const payload = await verifyJwt(token, 'wrong-secret'); + + expect(payload).toBeNull(); + }); + + it('returns null when the token is expired', async () => { + const token = await signJwt({ sub: 'user-uid' }, 'test-secret', { expiresIn: '-1s' }); + + const payload = await verifyJwt(token, 'test-secret'); + + expect(payload).toBeNull(); + }); + + it('throws when verifyJwtOrThrow receives an invalid token', async () => { + await expect(verifyJwtOrThrow('invalid-token', 'test-secret')).rejects.toThrow(); + }); + + it('decodes payload without verifying the signature', async () => { + const token = await signJwt( + { + sub: 'user-uid', + role: 'admin' + }, + 'test-secret', + { expiresIn: '60000' } + ); + + const payload = decodeJwt<{ sub: string; role: string }>(token); + + expect(payload).toMatchObject({ + sub: 'user-uid', + role: 'admin' + }); + }); + + it('returns null when decoding malformed jwt', () => { + expect(decodeJwt('not-a-jwt')).toBeNull(); + }); + + it('detects compact jwt shape', () => { + expect(isJwtToken('a.b.c')).toBe(true); + expect(isJwtToken('a.b')).toBe(false); + }); +}); diff --git a/frontend/packages/shared/package.json b/frontend/packages/shared/package.json index a56c9f4078da..dc798be70a4f 100644 --- a/frontend/packages/shared/package.json +++ b/frontend/packages/shared/package.json @@ -12,6 +12,7 @@ "./shadcn": "./src/components/shadcn/index.ts", "./components/shadcn/styles.css": "./src/components/shadcn/styles.css", "./server/config": "./src-server/config/index.ts", + "./server/jwt": "./src-server/jwt/index.ts", "./server/v2alpha": "./src-server/v2alpha/error.ts" }, "typesVersions": { @@ -25,6 +26,9 @@ "server/config": [ "src-server/config/index.ts" ], + "server/jwt": [ + "src-server/jwt/index.ts" + ], "server/v2alpha": [ "src-server/v2alpha/error.ts" ] @@ -51,6 +55,9 @@ "zod": "^3 || ^4", "zustand": "^4 || ^5" }, + "dependencies": { + "jose": "^6.0.10" + }, "peerDependenciesMeta": { "@chakra-ui/icons": { "optional": true, diff --git a/frontend/packages/shared/src-server/jwt/index.ts b/frontend/packages/shared/src-server/jwt/index.ts new file mode 100644 index 000000000000..79f13bd6ab4f --- /dev/null +++ b/frontend/packages/shared/src-server/jwt/index.ts @@ -0,0 +1,74 @@ +import { decodeJwt as joseDecodeJwt, jwtVerify, SignJWT, type JWTPayload } from 'jose'; + +const textEncoder = new TextEncoder(); + +export type JwtPayload = JWTPayload; +export type JwtExpiresIn = number | string | Date; + +export type SignJwtOptions = { + expiresIn?: JwtExpiresIn; +}; + +type SignableJwtPayload = JWTPayload & Record; + +const getSecretKey = (secret: string) => textEncoder.encode(secret); + +const isNumericString = (value: string) => /^-?\d+$/.test(value); + +const toExpirationTime = (expiresIn: JwtExpiresIn) => { + if (typeof expiresIn === 'string' && isNumericString(expiresIn)) { + return new Date(Date.now() + Number(expiresIn)); + } + + return expiresIn; +}; + +export const isJwtToken = (token: string): boolean => token.split('.').length === 3; + +export const signJwt = ( + payload: T, + secret: string, + options: SignJwtOptions = {} +): Promise => { + let jwt = new SignJWT(payload as SignableJwtPayload) + .setProtectedHeader({ alg: 'HS256', typ: 'JWT' }) + .setIssuedAt(); + + if (options.expiresIn !== undefined) { + jwt = jwt.setExpirationTime(toExpirationTime(options.expiresIn)); + } + + return jwt.sign(getSecretKey(secret)); +}; + +export const verifyJwtOrThrow = async ( + token: string, + secret: string +): Promise => { + const { payload } = await jwtVerify(token, getSecretKey(secret), { + algorithms: ['HS256'] + }); + + return payload; +}; + +export const verifyJwt = async ( + token: string | undefined, + secret: string +): Promise<(T & JWTPayload) | null> => { + if (!token) return null; + + try { + return await verifyJwtOrThrow(token, secret); + } catch { + return null; + } +}; + +export const decodeJwt = (token: string): (T & JWTPayload) | null => { + try { + return joseDecodeJwt(token); + } catch { + return null; + } +}; diff --git a/frontend/packages/shared/vitest.config.mts b/frontend/packages/shared/vitest.config.mts index feef537783e2..dc9a41ec46ed 100644 --- a/frontend/packages/shared/vitest.config.mts +++ b/frontend/packages/shared/vitest.config.mts @@ -6,6 +6,17 @@ export default defineConfig({ plugins: [react()], test: { projects: [ + { + extends: true, + test: { + name: 'server', + globals: true, + environment: 'node', + passWithNoTests: true, + include: ['__tests__/server/**/*.{test,spec}.ts'], + exclude: ['node_modules', 'dist'] + } + }, { extends: true, test: { diff --git a/frontend/pnpm-lock.yaml b/frontend/pnpm-lock.yaml index 121c03c416bb..516284d0a250 100644 --- a/frontend/pnpm-lock.yaml +++ b/frontend/pnpm-lock.yaml @@ -146,9 +146,6 @@ importers: js-yaml: specifier: ^4.1.0 version: 4.1.0 - jsonwebtoken: - specifier: ^9.0.3 - version: 9.0.3 jwt-decode: specifier: ^4.0.0 version: 4.0.0 @@ -255,9 +252,6 @@ importers: '@types/js-yaml': specifier: ^4.0.6 version: 4.0.9 - '@types/jsonwebtoken': - specifier: ^9.0.3 - version: 9.0.5 '@types/lodash': specifier: ^4.14.199 version: 4.14.202 @@ -305,7 +299,7 @@ importers: version: 5.1.4(typescript@5.9.3)(vite@7.2.6) vitest: specifier: ^4.0.12 - version: 4.0.15(@types/node@24.10.4)(@vitest/browser-playwright@4.0.15)(sass@1.69.5) + version: 4.0.15(@types/node@24.10.4)(@vitest/browser-playwright@4.0.15)(@vitest/ui@4.0.12)(jsdom@27.2.0)(sass@1.69.5) packages/client-sdk: dependencies: @@ -553,9 +547,13 @@ importers: version: 18.3.1(react@18.3.1) vitest: specifier: ^4.0.12 - version: 4.0.15(@types/node@24.10.4)(@vitest/browser-playwright@4.0.15)(sass@1.69.5) + version: 4.0.15(@types/node@24.10.4)(@vitest/browser-playwright@4.0.15) packages/shared: + dependencies: + jose: + specifier: ^6.0.10 + version: 6.0.10 devDependencies: '@chakra-ui/icons': specifier: ^2.1.1 @@ -631,7 +629,7 @@ importers: version: 5.9.3 vitest: specifier: ^4.0.12 - version: 4.0.15(@types/node@24.10.4)(@vitest/browser-playwright@4.0.15)(sass@1.69.5) + version: 4.0.15(@types/node@24.10.4)(@vitest/browser-playwright@4.0.15) zod: specifier: ^4.3.5 version: 4.3.5 @@ -792,9 +790,6 @@ importers: immer: specifier: ^10.1.1 version: 10.1.1 - jsonwebtoken: - specifier: ^9.0.3 - version: 9.0.3 lucide-react: specifier: ^0.555.0 version: 0.555.0(react@18.3.1) @@ -853,9 +848,6 @@ importers: '@playwright/test': specifier: ^1.58.1 version: 1.59.1 - '@types/jsonwebtoken': - specifier: ^9.0.3 - version: 9.0.5 '@types/node': specifier: ^24 version: 24.10.4 @@ -906,7 +898,7 @@ importers: version: 5.1.4(typescript@5.2.2)(vite@7.2.6) vitest: specifier: ^4.0.12 - version: 4.0.15(@types/node@24.10.4)(@vitest/browser-playwright@4.0.15)(sass@1.69.5) + version: 4.0.15(@types/node@24.10.4)(@vitest/browser-playwright@4.0.15) providers/applaunchpad: dependencies: @@ -958,9 +950,6 @@ importers: '@tanstack/react-table': specifier: ^8.10.7 version: 8.10.7(react-dom@18.3.1)(react@18.3.1) - '@types/jsonwebtoken': - specifier: ^9.0.3 - version: 9.0.5 ansi_up: specifier: ^5.2.1 version: 5.2.1 @@ -1012,9 +1001,6 @@ importers: js-yaml: specifier: ^4.1.0 version: 4.1.0 - jsonwebtoken: - specifier: ^9.0.2 - version: 9.0.2 jszip: specifier: ^3.10.1 version: 3.10.1 @@ -1130,6 +1116,12 @@ importers: '@vitejs/plugin-react': specifier: ^5.1.1 version: 5.1.1(vite@7.2.6) + '@vitest/browser': + specifier: 4.0.15 + version: 4.0.15(vite@7.2.6)(vitest@4.0.15) + '@vitest/browser-playwright': + specifier: 4.0.15 + version: 4.0.15(playwright@1.59.1)(vite@7.2.6)(vitest@4.0.15) '@vitest/ui': specifier: 4.0.12 version: 4.0.12(vitest@4.0.15) @@ -1156,7 +1148,7 @@ importers: version: 5.1.4(typescript@5.2.2)(vite@7.2.6) vitest: specifier: ^4.0.12 - version: 4.0.15(@types/node@24.10.4)(@vitest/ui@4.0.12)(jsdom@27.2.0)(sass@1.69.5) + version: 4.0.15(@types/node@24.10.4)(@vitest/browser-playwright@4.0.15)(@vitest/ui@4.0.12)(jsdom@27.2.0)(sass@1.69.5) webpack-bundle-analyzer: specifier: ^4.9.1 version: 4.10.1 @@ -1190,6 +1182,9 @@ importers: '@next/font': specifier: 13.1.6 version: 13.1.6 + '@sealos/shared': + specifier: workspace:^ + version: link:../../packages/shared '@sealos/ui': specifier: workspace:^ version: link:../../packages/ui @@ -1232,9 +1227,6 @@ importers: js-yaml: specifier: ^4.1.0 version: 4.1.0 - jsonwebtoken: - specifier: ^9.0.2 - version: 9.0.2 jszip: specifier: ^3.10.1 version: 3.10.1 @@ -1308,9 +1300,6 @@ importers: '@types/js-yaml': specifier: ^4.0.6 version: 4.0.9 - '@types/jsonwebtoken': - specifier: ^9.0.3 - version: 9.0.5 '@types/lodash': specifier: ^4.14.199 version: 4.14.202 @@ -1437,9 +1426,6 @@ importers: js-yaml: specifier: ^4.1.0 version: 4.1.0 - jsonwebtoken: - specifier: ^9.0.2 - version: 9.0.2 lodash: specifier: ^4.17.21 version: 4.17.21 @@ -1510,9 +1496,6 @@ importers: '@types/js-yaml': specifier: ^4.0.6 version: 4.0.9 - '@types/jsonwebtoken': - specifier: ^9.0.3 - version: 9.0.5 '@types/lodash': specifier: ^4.14.199 version: 4.14.202 @@ -1554,7 +1537,7 @@ importers: version: 5.1.4(typescript@5.2.2)(vite@7.2.6) vitest: specifier: ^4.0.12 - version: 4.0.15(@types/node@24.10.4)(@vitest/browser-playwright@4.0.15)(sass@1.69.5) + version: 4.0.15(@types/node@24.10.4)(@vitest/browser-playwright@4.0.15)(@vitest/ui@4.0.12)(jsdom@27.2.0)(sass@1.69.5) providers/cronjob: dependencies: @@ -1741,7 +1724,7 @@ importers: version: 5.1.4(typescript@5.2.2)(vite@7.2.6) vitest: specifier: ^4.0.12 - version: 4.0.15(@types/node@24.10.4)(@vitest/browser-playwright@4.0.15)(sass@1.69.5) + version: 4.0.15(@types/node@24.10.4)(@vitest/browser-playwright@4.0.15)(@vitest/ui@4.0.12)(jsdom@27.2.0)(sass@1.69.5) webpack-bundle-analyzer: specifier: ^4.9.1 version: 4.10.1 @@ -1799,9 +1782,6 @@ importers: '@tanstack/react-virtual': specifier: ^3.10.8 version: 3.10.8(react-dom@18.3.1)(react@18.3.1) - '@types/jsonwebtoken': - specifier: ^9.0.3 - version: 9.0.5 ansi_up: specifier: ^5.2.1 version: 5.2.1 @@ -1838,9 +1818,6 @@ importers: js-yaml: specifier: ^4.1.0 version: 4.1.0 - jsonwebtoken: - specifier: ^9.0.2 - version: 9.0.2 jszip: specifier: ^3.10.1 version: 3.10.1 @@ -1979,243 +1956,11 @@ importers: version: 5.1.4(typescript@5.2.2)(vite@7.2.6) vitest: specifier: ^4.0.12 - version: 4.0.15(@types/node@24.10.4)(@vitest/browser-playwright@4.0.15)(sass@1.69.5) + version: 4.0.15(@types/node@24.10.4)(@vitest/browser-playwright@4.0.15)(@vitest/ui@4.0.12)(jsdom@27.2.0)(sass@1.69.5) webpack-bundle-analyzer: specifier: ^4.9.1 version: 4.10.1 - providers/devbox: - dependencies: - '@chakra-ui/anatomy': - specifier: ^2.2.1 - version: 2.2.2 - '@chakra-ui/icons': - specifier: ^2.1.1 - version: 2.1.1(@chakra-ui/system@2.6.2)(react@18.3.1) - '@chakra-ui/next-js': - specifier: ^2.1.5 - version: 2.2.0(@chakra-ui/react@2.8.2)(@emotion/react@11.11.1)(next@14.2.35)(react@18.3.1) - '@chakra-ui/react': - specifier: ^2.8.1 - version: 2.8.2(@emotion/react@11.11.1)(@emotion/styled@11.11.0)(@types/react@18.3.27)(framer-motion@10.16.5)(react-dom@18.3.1)(react@18.3.1) - '@chakra-ui/system': - specifier: ^2.6.1 - version: 2.6.2(@emotion/react@11.11.1)(@emotion/styled@11.11.0)(react@18.3.1) - '@emotion/react': - specifier: ^11.11.1 - version: 11.11.1(@types/react@18.3.27)(react@18.3.1) - '@emotion/styled': - specifier: ^11.11.0 - version: 11.11.0(@emotion/react@11.11.1)(@types/react@18.3.27)(react@18.3.1) - '@hookform/resolvers': - specifier: ^3.9.0 - version: 3.9.0(react-hook-form@7.48.2) - '@kubernetes/client-node': - specifier: ^0.21.0 - version: 0.21.0 - '@prisma/client': - specifier: ^5.10.2 - version: 5.10.2(prisma@5.10.2) - '@scalar/api-reference-react': - specifier: ^0.8.36 - version: 0.8.36(axios@1.7.3)(nprogress@0.2.0)(react@18.3.1)(tailwindcss@4.1.10)(typescript@5.2.2) - '@sealos/driver': - specifier: workspace:^ - version: link:../../packages/driver - '@sealos/gtm': - specifier: workspace:^ - version: link:../../packages/gtm - '@sealos/shadcn-ui': - specifier: workspace:^ - version: link:../../packages/shadcn-ui - '@sealos/shared': - specifier: workspace:^ - version: link:../../packages/shared - '@sealos/ui': - specifier: workspace:^ - version: link:../../packages/ui - '@tanstack/react-query': - specifier: ^4.35.3 - version: 4.36.1(react-dom@18.3.1)(react@18.3.1) - '@tanstack/react-table': - specifier: ^8.10.7 - version: 8.10.7(react-dom@18.3.1)(react@18.3.1) - axios: - specifier: ^1.7.3 - version: 1.7.3 - date-fns: - specifier: ^2.30.0 - version: 2.30.0 - dayjs: - specifier: ^1.11.10 - version: 1.11.10 - dns: - specifier: ^0.2.2 - version: 0.2.2 - echarts: - specifier: ^5.4.3 - version: 5.4.3 - fast-json-patch: - specifier: ^3.1.1 - version: 3.1.1 - framer-motion: - specifier: ^10.16.4 - version: 10.16.5(react-dom@18.3.1)(react@18.3.1) - i18next: - specifier: ^23.11.5 - version: 23.12.1 - immer: - specifier: ^10.1.1 - version: 10.1.1 - ini: - specifier: ^4.1.3 - version: 4.1.3 - js-cookie: - specifier: ^3.0.5 - version: 3.0.5 - js-yaml: - specifier: ^4.1.0 - version: 4.1.0 - jsonwebtoken: - specifier: ^9.0.3 - version: 9.0.3 - jszip: - specifier: ^3.10.1 - version: 3.10.1 - lodash: - specifier: ^4.17.21 - version: 4.17.21 - lucide-react: - specifier: ^0.476.0 - version: 0.476.0(react@18.3.1) - modern-tar: - specifier: ^0.7.2 - version: 0.7.2 - nanoid: - specifier: ^4.0.2 - version: 4.0.2 - next: - specifier: 14.2.35 - version: 14.2.35(@babel/core@7.23.5)(react-dom@18.3.1)(react@18.3.1)(sass@1.69.5) - next-i18next: - specifier: ^15.3.0 - version: 15.3.0(i18next@23.12.1)(next@14.2.35)(react-i18next@14.1.2)(react@18.3.1) - next-intl: - specifier: ^3.17.2 - version: 3.17.2(next@14.2.35)(react@18.3.1) - next-themes: - specifier: ^0.4.6 - version: 0.4.6(react-dom@18.3.1)(react@18.3.1) - nprogress: - specifier: ^0.2.0 - version: 0.2.0 - prisma: - specifier: ^5.10.2 - version: 5.10.2 - react: - specifier: 18.3.1 - version: 18.3.1 - react-day-picker: - specifier: ^9.8.0 - version: 9.8.0(react@18.3.1) - react-dom: - specifier: 18.3.1 - version: 18.3.1(react@18.3.1) - react-hook-form: - specifier: ^7.48.2 - version: 7.48.2(react@18.3.1) - react-i18next: - specifier: ^14.1.2 - version: 14.1.2(i18next@23.12.1)(react-dom@18.3.1)(react@18.3.1) - react-markdown: - specifier: ^8.0.7 - version: 8.0.7(@types/react@18.3.27)(react@18.3.1) - react-syntax-highlighter: - specifier: ^15.6.1 - version: 15.6.1(react@18.3.1) - sass: - specifier: ^1.68.0 - version: 1.69.5 - sealos-desktop-sdk: - specifier: workspace:* - version: link:../../packages/client-sdk - sealos-mcp-sdk: - specifier: workspace:^ - version: link:../../packages/mcp-sdk - sonner: - specifier: ^2.0.5 - version: 2.0.5(react-dom@18.3.1)(react@18.3.1) - zod: - specifier: ^3.23.8 - version: 3.25.76 - zod-openapi: - specifier: ^4.2.4 - version: 4.2.4(zod@3.25.76) - zustand: - specifier: ^4.5.4 - version: 4.5.4(@types/react@18.3.27)(immer@10.1.1)(react@18.3.1) - devDependencies: - '@svgr/webpack': - specifier: ^6.5.1 - version: 6.5.1 - '@tailwindcss/postcss': - specifier: ^4.1.10 - version: 4.1.10 - '@types/ini': - specifier: ^4.1.1 - version: 4.1.1 - '@types/js-cookie': - specifier: ^3.0.4 - version: 3.0.6 - '@types/js-yaml': - specifier: ^4.0.9 - version: 4.0.9 - '@types/jsonwebtoken': - specifier: ^9.0.3 - version: 9.0.5 - '@types/lodash': - specifier: ^4.14.199 - version: 4.14.202 - '@types/node': - specifier: ^24 - version: 24.10.4 - '@types/nprogress': - specifier: ^0.2.3 - version: 0.2.3 - '@types/react': - specifier: 18.3.27 - version: 18.3.27 - '@types/react-dom': - specifier: 18.3.7 - version: 18.3.7(@types/react@18.3.27) - clsx: - specifier: ^2.1.1 - version: 2.1.1 - eslint: - specifier: ^8 - version: 8.57.0 - eslint-config-next: - specifier: 14.2.5 - version: 14.2.5(eslint@8.57.0)(typescript@5.2.2) - geist: - specifier: ^1.4.2 - version: 1.4.2(next@14.2.35) - postcss: - specifier: ^8 - version: 8.5.3 - prettier: - specifier: ^3.4.2 - version: 3.4.2 - prettier-plugin-tailwindcss: - specifier: ^0.6.9 - version: 0.6.9(prettier@3.4.2) - tailwindcss: - specifier: ^4.1.10 - version: 4.1.10 - typescript: - specifier: ^5 - version: 5.2.2 - providers/invite: dependencies: '@chakra-ui/anatomy': @@ -2553,6 +2298,9 @@ importers: '@next/font': specifier: 13.1.6 version: 13.1.6 + '@sealos/shared': + specifier: workspace:^ + version: link:../../packages/shared '@sealos/ui': specifier: workspace:^ version: link:../../packages/ui @@ -2592,9 +2340,6 @@ importers: js-yaml: specifier: ^4.1.0 version: 4.1.0 - jsonwebtoken: - specifier: ^9.0.3 - version: 9.0.3 jszip: specifier: ^3.10.1 version: 3.10.1 @@ -2665,9 +2410,6 @@ importers: '@types/js-yaml': specifier: ^4.0.6 version: 4.0.9 - '@types/jsonwebtoken': - specifier: ^9.0.3 - version: 9.0.5 '@types/lodash': specifier: ^4.14.199 version: 4.14.202 @@ -2773,9 +2515,6 @@ importers: js-yaml: specifier: ^4.1.0 version: 4.1.0 - jsonwebtoken: - specifier: ^9.0.2 - version: 9.0.2 jszip: specifier: ^3.10.1 version: 3.10.1 @@ -2831,9 +2570,6 @@ importers: '@types/js-yaml': specifier: ^4.0.6 version: 4.0.9 - '@types/jsonwebtoken': - specifier: ^9.0.3 - version: 9.0.5 '@types/lodash': specifier: ^4.14.199 version: 4.14.202 @@ -2866,7 +2602,7 @@ importers: version: 5.1.4(typescript@5.2.2)(vite@7.2.6) vitest: specifier: ^4.0.12 - version: 4.0.15(@types/node@24.10.4)(@vitest/browser-playwright@4.0.15)(sass@1.69.5) + version: 4.0.15(@types/node@24.10.4)(@vitest/browser-playwright@4.0.15) providers/template: dependencies: @@ -3125,7 +2861,7 @@ importers: version: 5.1.4(typescript@5.2.2)(vite@7.2.6) vitest: specifier: ^4.0.12 - version: 4.0.15(@types/node@24.10.4)(@vitest/browser-playwright@4.0.15)(sass@1.69.5) + version: 4.0.15(@types/node@24.10.4)(@vitest/browser-playwright@4.0.15)(@vitest/ui@4.0.12)(jsdom@27.2.0)(sass@1.69.5) providers/terminal: dependencies: @@ -3261,7 +2997,7 @@ importers: version: 5.1.4(typescript@5.2.2)(vite@7.2.6) vitest: specifier: ^4.0.12 - version: 4.0.15(@types/node@24.10.4)(@vitest/browser-playwright@4.0.15)(sass@1.69.5) + version: 4.0.15(@types/node@24.10.4)(@vitest/browser-playwright@4.0.15)(@vitest/ui@4.0.12)(jsdom@27.2.0)(sass@1.69.5) packages: @@ -3395,6 +3131,7 @@ packages: dependencies: '@jridgewell/gen-mapping': 0.3.8 '@jridgewell/trace-mapping': 0.3.25 + dev: false /@ant-design/charts-util@0.0.1-alpha.7(react-dom@18.3.1)(react@18.3.1): resolution: {integrity: sha512-Yh0o6EdO6SvdSnStFZMbnUzjyymkVzV+TQ9ymVW9hlVgO/fUkUII3JYSdV+UVcFnYwUF0YiDKuSTLCZNAzg2bQ==} @@ -6511,7 +6248,7 @@ packages: '@chakra-ui/react': 2.8.2(@emotion/react@11.11.1)(@emotion/styled@11.11.0)(@types/react@18.3.27)(framer-motion@10.16.5)(react-dom@18.3.1)(react@18.3.1) '@emotion/cache': 11.14.0 '@emotion/react': 11.11.1(@types/react@18.3.27)(react@18.3.1) - next: 14.2.35(@babel/core@7.23.5)(react-dom@18.3.1)(react@18.3.1)(sass@1.69.5) + next: 14.2.35(@babel/core@7.28.5)(@playwright/test@1.59.1)(react-dom@18.3.1)(react@18.3.1)(sass@1.69.5) react: 18.3.1 dev: false @@ -7412,10 +7149,6 @@ packages: postcss-selector-parser: 7.1.1 dev: true - /@date-fns/tz@1.2.0: - resolution: {integrity: sha512-LBrd7MiJZ9McsOgxqWX7AaxrDjcFVjWH/tIKJd7pnR7McaslGYOP1QmmiBXdJH/H/yLCT+rcQ7FaPBUxRGUtrg==} - dev: false - /@date-fns/tz@1.4.1: resolution: {integrity: sha512-P5LUNhtbj6YfI3iJjw5EL9eUAG6OitD0W3fWQcpQjDRc/QIsL0tRNuO1PcDvPccWL1fSTXXdE1ds+l95DV/OFA==} dev: false @@ -8205,46 +7938,6 @@ packages: - vue dev: false - /@formatjs/ecma402-abstract@2.0.0: - resolution: {integrity: sha512-rRqXOqdFmk7RYvj4khklyqzcfQl9vEL/usogncBHRZfZBDOwMGuSRNFl02fu5KGHXdbinju+YXyuR+Nk8xlr/g==} - dependencies: - '@formatjs/intl-localematcher': 0.5.4 - tslib: 2.6.2 - dev: false - - /@formatjs/fast-memoize@2.2.0: - resolution: {integrity: sha512-hnk/nY8FyrL5YxwP9e4r9dqeM6cAbo8PeU9UjyXojZMNvVad2Z06FAVHyR3Ecw6fza+0GH7vdJgiKIVXTMbSBA==} - dependencies: - tslib: 2.6.2 - dev: false - - /@formatjs/icu-messageformat-parser@2.7.8: - resolution: {integrity: sha512-nBZJYmhpcSX0WeJ5SDYUkZ42AgR3xiyhNCsQweFx3cz/ULJjym8bHAzWKvG5e2+1XO98dBYC0fWeeAECAVSwLA==} - dependencies: - '@formatjs/ecma402-abstract': 2.0.0 - '@formatjs/icu-skeleton-parser': 1.8.2 - tslib: 2.6.2 - dev: false - - /@formatjs/icu-skeleton-parser@1.8.2: - resolution: {integrity: sha512-k4ERKgw7aKGWJZgTarIcNEmvyTVD9FYh0mTrrBMHZ1b8hUu6iOJ4SzsZlo3UNAvHYa+PnvntIwRPt1/vy4nA9Q==} - dependencies: - '@formatjs/ecma402-abstract': 2.0.0 - tslib: 2.6.2 - dev: false - - /@formatjs/intl-localematcher@0.2.32: - resolution: {integrity: sha512-k/MEBstff4sttohyEpXxCmC3MqbUn9VvHGlZ8fauLzkbwXmVrEeyzS+4uhrvAk9DWU9/7otYWxyDox4nT/KVLQ==} - dependencies: - tslib: 2.6.2 - dev: false - - /@formatjs/intl-localematcher@0.5.4: - resolution: {integrity: sha512-zTwEpWOzZ2CiKcB93BLngUX59hQkuZjT2+SAQEscSm52peDW/getsawMcWF1rGRpMCX6D7nSJA3CzJ8gn13N/g==} - dependencies: - tslib: 2.6.2 - dev: false - /@headlessui/tailwindcss@0.2.2(tailwindcss@3.4.1): resolution: {integrity: sha512-xNe42KjdyA4kfUKLLPGzME9zkH7Q3rOZ5huFihWNWOQFxnItxPB3/67yBI8/qBfY8nwBRx5GHn4VprsoluVMGw==} engines: {node: '>=10'} @@ -8254,15 +7947,6 @@ packages: tailwindcss: 3.4.1 dev: false - /@headlessui/tailwindcss@0.2.2(tailwindcss@4.1.10): - resolution: {integrity: sha512-xNe42KjdyA4kfUKLLPGzME9zkH7Q3rOZ5huFihWNWOQFxnItxPB3/67yBI8/qBfY8nwBRx5GHn4VprsoluVMGw==} - engines: {node: '>=10'} - peerDependencies: - tailwindcss: ^3.0 || ^4.0 - dependencies: - tailwindcss: 4.1.10 - dev: false - /@headlessui/tailwindcss@0.2.2(tailwindcss@4.1.18): resolution: {integrity: sha512-xNe42KjdyA4kfUKLLPGzME9zkH7Q3rOZ5huFihWNWOQFxnItxPB3/67yBI8/qBfY8nwBRx5GHn4VprsoluVMGw==} engines: {node: '>=10'} @@ -8352,6 +8036,7 @@ packages: engines: {node: '>=18.0.0'} dependencies: minipass: 7.1.2 + dev: false /@jridgewell/gen-mapping@0.3.13: resolution: {integrity: sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==} @@ -8525,30 +8210,6 @@ packages: - utf-8-validate dev: false - /@kubernetes/client-node@0.21.0: - resolution: {integrity: sha512-yYRbgMeyQbvZDHt/ZqsW3m4lRefzhbbJEuj8sVXM+bufKrgmzriA2oq7lWPH/k/LQIicAME9ixPUadTrxIF6dQ==} - dependencies: - '@types/js-yaml': 4.0.9 - '@types/node': 20.17.32 - '@types/request': 2.48.12 - '@types/ws': 8.5.10 - byline: 5.0.0 - isomorphic-ws: 5.0.0(ws@8.14.2) - js-yaml: 4.1.1 - jsonpath-plus: 8.1.0 - request: 2.88.2 - rfc4648: 1.5.3 - stream-buffers: 3.0.2 - tar: 7.4.3 - tslib: 2.6.2 - ws: 8.14.2 - optionalDependencies: - openid-client: 5.6.1 - transitivePeerDependencies: - - bufferutil - - utf-8-validate - dev: false - /@kubernetes/client-node@1.1.2: resolution: {integrity: sha512-kkE0D8zB5rIQoR6SUwlHUyQtpLvrW0gXOd2MabQsql7I2oPnMA8pb50A1MWB4yH0eX29t45gxs7lOVlS0UPsiw==} dependencies: @@ -8791,12 +8452,6 @@ packages: glob: 10.3.10 dev: true - /@next/eslint-plugin-next@14.2.5: - resolution: {integrity: sha512-LY3btOpPh+OTIpviNojDpUdIbHW9j0JBYBjsIp8IxtDFfYFyORvw3yNq6N231FVqQA7n7lwaf7xHbVJlA1ED7g==} - dependencies: - glob: 10.3.10 - dev: true - /@next/eslint-plugin-next@15.0.1: resolution: {integrity: sha512-bKWsMaGPbiFAaGqrDJvbE8b4Z0uKicGVcgOI77YM2ui3UfjHMr4emFPrZTLeZVchi7fT1mooG2LxREfUUClIKw==} dependencies: @@ -11465,66 +11120,6 @@ packages: - universal-cookie dev: false - /@scalar/api-client@2.21.1(axios@1.7.3)(nprogress@0.2.0)(tailwindcss@4.1.10)(typescript@5.2.2): - resolution: {integrity: sha512-jZO15BJ3kgMsi8kF6I4j23xAmRtSGQ/kaC4Tgahr1L50PrUCqHzwu+aQAjFq1FFGlTWsDAT2pPSpuXJcHWTh9g==} - engines: {node: '>=20'} - dependencies: - '@headlessui/tailwindcss': 0.2.2(tailwindcss@4.1.10) - '@headlessui/vue': 1.7.23(vue@3.5.29) - '@scalar/analytics-client': 1.0.1 - '@scalar/components': 0.16.32(typescript@5.2.2) - '@scalar/draggable': 0.3.0(typescript@5.2.2) - '@scalar/helpers': 0.2.9 - '@scalar/icons': 0.5.2(typescript@5.2.2) - '@scalar/import': 0.4.46 - '@scalar/json-magic': 0.9.4 - '@scalar/oas-utils': 0.6.29(typescript@5.2.2) - '@scalar/object-utils': 1.2.23 - '@scalar/openapi-parser': 0.24.5 - '@scalar/openapi-types': 0.5.3 - '@scalar/postman-to-openapi': 0.4.1 - '@scalar/sidebar': 0.7.22(typescript@5.2.2) - '@scalar/snippetz': 0.6.8 - '@scalar/themes': 0.13.26 - '@scalar/types': 0.5.10 - '@scalar/use-codemirror': 0.13.26(typescript@5.2.2) - '@scalar/use-hooks': 0.3.6(typescript@5.2.2) - '@scalar/use-toasts': 0.9.1(typescript@5.2.2) - '@scalar/workspace-store': 0.27.1(typescript@5.2.2) - '@types/har-format': 1.2.16 - '@vueuse/core': 13.9.0(vue@3.5.29) - '@vueuse/integrations': 13.9.0(axios@1.7.3)(focus-trap@7.6.4)(fuse.js@7.1.0)(nprogress@0.2.0)(vue@3.5.29) - focus-trap: 7.6.4 - fuse.js: 7.1.0 - js-base64: 3.7.8 - microdiff: 1.5.0 - nanoid: 5.1.6 - pretty-bytes: 7.1.0 - pretty-ms: 9.3.0 - shell-quote: 1.8.2 - type-fest: 5.3.1 - vue: 3.5.29(typescript@5.2.2) - vue-router: 4.6.2(vue@3.5.29) - whatwg-mimetype: 4.0.0 - yaml: 2.8.0 - zod: 4.3.6 - transitivePeerDependencies: - - '@vue/composition-api' - - async-validator - - axios - - change-case - - drauu - - idb-keyval - - jwt-decode - - nprogress - - qrcode - - sortablejs - - supports-color - - tailwindcss - - typescript - - universal-cookie - dev: false - /@scalar/api-client@2.21.1(axios@1.7.7)(tailwindcss@3.4.1)(typescript@5.2.2): resolution: {integrity: sha512-jZO15BJ3kgMsi8kF6I4j23xAmRtSGQ/kaC4Tgahr1L50PrUCqHzwu+aQAjFq1FFGlTWsDAT2pPSpuXJcHWTh9g==} engines: {node: '>=20'} @@ -11611,32 +11206,6 @@ packages: - universal-cookie dev: false - /@scalar/api-reference-react@0.8.36(axios@1.7.3)(nprogress@0.2.0)(react@18.3.1)(tailwindcss@4.1.10)(typescript@5.2.2): - resolution: {integrity: sha512-m4OzRO8cfmv9UQe9YQ7I9T26virQKyyCzyDrbCAKdDTn81ZQgN1LxGJ2e+GOh9bwCqJPs+2ud+OKApFsqTnx9A==} - engines: {node: '>=20'} - peerDependencies: - react: ^18.0.0 || ^19.0.0 - dependencies: - '@scalar/api-reference': 1.43.17(axios@1.7.3)(nprogress@0.2.0)(tailwindcss@4.1.10)(typescript@5.2.2) - '@scalar/types': 0.5.10 - react: 18.3.1 - transitivePeerDependencies: - - '@vue/composition-api' - - async-validator - - axios - - change-case - - drauu - - idb-keyval - - jwt-decode - - nprogress - - qrcode - - sortablejs - - supports-color - - tailwindcss - - typescript - - universal-cookie - dev: false - /@scalar/api-reference-react@0.8.36(axios@1.7.7)(react@18.3.1)(tailwindcss@3.4.1)(typescript@5.2.2): resolution: {integrity: sha512-m4OzRO8cfmv9UQe9YQ7I9T26virQKyyCzyDrbCAKdDTn81ZQgN1LxGJ2e+GOh9bwCqJPs+2ud+OKApFsqTnx9A==} engines: {node: '>=20'} @@ -11707,50 +11276,6 @@ packages: - universal-cookie dev: false - /@scalar/api-reference@1.43.17(axios@1.7.3)(nprogress@0.2.0)(tailwindcss@4.1.10)(typescript@5.2.2): - resolution: {integrity: sha512-YeJUfd6gSER0lMtrY2VwuLEesUwxTik54za3N0Udhhy/OBwrrA//DtBfsv2Gd89zLvaocjXavdu9prXpqLndaw==} - engines: {node: '>=20'} - dependencies: - '@headlessui/vue': 1.7.23(vue@3.5.29) - '@scalar/api-client': 2.21.1(axios@1.7.3)(nprogress@0.2.0)(tailwindcss@4.1.10)(typescript@5.2.2) - '@scalar/code-highlight': 0.2.2 - '@scalar/components': 0.16.32(typescript@5.2.2) - '@scalar/helpers': 0.2.9 - '@scalar/icons': 0.5.2(typescript@5.2.2) - '@scalar/oas-utils': 0.6.29(typescript@5.2.2) - '@scalar/openapi-parser': 0.24.5 - '@scalar/openapi-types': 0.5.3 - '@scalar/sidebar': 0.7.22(typescript@5.2.2) - '@scalar/snippetz': 0.6.8 - '@scalar/themes': 0.13.26 - '@scalar/types': 0.5.10 - '@scalar/use-hooks': 0.3.6(typescript@5.2.2) - '@scalar/use-toasts': 0.9.1(typescript@5.2.2) - '@scalar/workspace-store': 0.27.1(typescript@5.2.2) - '@unhead/vue': 1.11.20(vue@3.5.29) - '@vueuse/core': 13.9.0(vue@3.5.29) - fuse.js: 7.1.0 - github-slugger: 2.0.0 - microdiff: 1.5.0 - nanoid: 5.1.6 - vue: 3.5.29(typescript@5.2.2) - transitivePeerDependencies: - - '@vue/composition-api' - - async-validator - - axios - - change-case - - drauu - - idb-keyval - - jwt-decode - - nprogress - - qrcode - - sortablejs - - supports-color - - tailwindcss - - typescript - - universal-cookie - dev: false - /@scalar/api-reference@1.43.17(axios@1.7.7)(tailwindcss@3.4.1)(typescript@5.2.2): resolution: {integrity: sha512-YeJUfd6gSER0lMtrY2VwuLEesUwxTik54za3N0Udhhy/OBwrrA//DtBfsv2Gd89zLvaocjXavdu9prXpqLndaw==} engines: {node: '>=20'} @@ -13158,6 +12683,7 @@ packages: magic-string: 0.30.17 source-map-js: 1.2.1 tailwindcss: 4.1.10 + dev: false /@tailwindcss/node@4.1.18: resolution: {integrity: sha512-DoR7U1P7iYhw16qJ49fgXUlry1t4CpXeErJHnQ44JgTSKMaZUdf17cfn5mHchfJ4KRBZRFA/Coo+MUF5+gOaCQ==} @@ -13177,6 +12703,7 @@ packages: cpu: [arm64] os: [android] requiresBuild: true + dev: false optional: true /@tailwindcss/oxide-android-arm64@4.1.18: @@ -13194,6 +12721,7 @@ packages: cpu: [arm64] os: [darwin] requiresBuild: true + dev: false optional: true /@tailwindcss/oxide-darwin-arm64@4.1.18: @@ -13211,6 +12739,7 @@ packages: cpu: [x64] os: [darwin] requiresBuild: true + dev: false optional: true /@tailwindcss/oxide-darwin-x64@4.1.18: @@ -13228,6 +12757,7 @@ packages: cpu: [x64] os: [freebsd] requiresBuild: true + dev: false optional: true /@tailwindcss/oxide-freebsd-x64@4.1.18: @@ -13245,6 +12775,7 @@ packages: cpu: [arm] os: [linux] requiresBuild: true + dev: false optional: true /@tailwindcss/oxide-linux-arm-gnueabihf@4.1.18: @@ -13263,6 +12794,7 @@ packages: os: [linux] libc: [glibc] requiresBuild: true + dev: false optional: true /@tailwindcss/oxide-linux-arm64-gnu@4.1.18: @@ -13281,6 +12813,7 @@ packages: os: [linux] libc: [musl] requiresBuild: true + dev: false optional: true /@tailwindcss/oxide-linux-arm64-musl@4.1.18: @@ -13299,6 +12832,7 @@ packages: os: [linux] libc: [glibc] requiresBuild: true + dev: false optional: true /@tailwindcss/oxide-linux-x64-gnu@4.1.18: @@ -13317,6 +12851,7 @@ packages: os: [linux] libc: [musl] requiresBuild: true + dev: false optional: true /@tailwindcss/oxide-linux-x64-musl@4.1.18: @@ -13333,6 +12868,7 @@ packages: engines: {node: '>=14.0.0'} cpu: [wasm32] requiresBuild: true + dev: false optional: true bundledDependencies: - '@napi-rs/wasm-runtime' @@ -13363,6 +12899,7 @@ packages: cpu: [arm64] os: [win32] requiresBuild: true + dev: false optional: true /@tailwindcss/oxide-win32-arm64-msvc@4.1.18: @@ -13380,6 +12917,7 @@ packages: cpu: [x64] os: [win32] requiresBuild: true + dev: false optional: true /@tailwindcss/oxide-win32-x64-msvc@4.1.18: @@ -13411,6 +12949,7 @@ packages: '@tailwindcss/oxide-wasm32-wasi': 4.1.10 '@tailwindcss/oxide-win32-arm64-msvc': 4.1.10 '@tailwindcss/oxide-win32-x64-msvc': 4.1.10 + dev: false /@tailwindcss/oxide@4.1.18: resolution: {integrity: sha512-EgCR5tTS5bUSKQgzeMClT6iCY3ToqE1y+ZB0AKldj809QXk1Y+3jB0upOYZrn9aGIzPtUsP7sX4QQ4XtjBB95A==} @@ -13438,6 +12977,7 @@ packages: '@tailwindcss/oxide': 4.1.10 postcss: 8.5.6 tailwindcss: 4.1.10 + dev: false /@tailwindcss/postcss@4.1.18: resolution: {integrity: sha512-Ce0GFnzAOuPyfV5SxjXGn0CubwGcuDB0zcdaPuCSzAa/2vII24JTkH+I6jcbXLb1ctjZMZZI6OjDaLPJQL1S0g==} @@ -13872,6 +13412,7 @@ packages: resolution: {integrity: sha512-VRLSGzik+Unrup6BsouBeHsf4d1hOEgYWTm/7Nmw1sXoN1+tRly/Gy/po3yeahnP4jfnQWWAhQAqcNfH7ngOkA==} dependencies: '@types/node': 24.10.4 + dev: false /@types/lodash.mergewith@4.6.7: resolution: {integrity: sha512-3m+lkO5CLRRYU0fhGRp7zbsGi6+BZj0uTVSwvcKU+nSlhjA9/QRNfuSGnD2mX6hQA7ZbmcCkzk5h4ZYGOtk14A==} @@ -14699,7 +14240,7 @@ packages: '@vitest/mocker': 4.0.15(vite@7.2.6) playwright: 1.59.1 tinyrainbow: 3.0.3 - vitest: 4.0.15(@types/node@24.10.4)(@vitest/browser-playwright@4.0.15)(sass@1.69.5) + vitest: 4.0.15(@types/node@24.10.4)(@vitest/browser-playwright@4.0.15)(@vitest/ui@4.0.12)(jsdom@27.2.0)(sass@1.69.5) transitivePeerDependencies: - bufferutil - msw @@ -14719,7 +14260,7 @@ packages: pngjs: 7.0.0 sirv: 3.0.2 tinyrainbow: 3.0.3 - vitest: 4.0.15(@types/node@24.10.4)(@vitest/browser-playwright@4.0.15)(sass@1.69.5) + vitest: 4.0.15(@types/node@24.10.4)(@vitest/browser-playwright@4.0.15)(@vitest/ui@4.0.12)(jsdom@27.2.0)(sass@1.69.5) ws: 8.18.3 transitivePeerDependencies: - bufferutil @@ -14799,7 +14340,7 @@ packages: sirv: 3.0.2 tinyglobby: 0.2.15 tinyrainbow: 3.0.3 - vitest: 4.0.15(@types/node@24.10.4)(@vitest/ui@4.0.12)(jsdom@27.2.0)(sass@1.69.5) + vitest: 4.0.15(@types/node@24.10.4)(@vitest/browser-playwright@4.0.15)(@vitest/ui@4.0.12)(jsdom@27.2.0)(sass@1.69.5) dev: true /@vitest/utils@4.0.12: @@ -14968,57 +14509,6 @@ packages: vue: 3.5.29(typescript@5.2.2) dev: false - /@vueuse/integrations@13.9.0(axios@1.7.3)(focus-trap@7.6.4)(fuse.js@7.1.0)(nprogress@0.2.0)(vue@3.5.29): - resolution: {integrity: sha512-SDobKBbPIOe0cVL7QxMzGkuUGHvWTdihi9zOrrWaWUgFKe15cwEcwfWmgrcNzjT6kHnNmWuTajPHoIzUjYNYYQ==} - peerDependencies: - async-validator: ^4 - axios: ^1 - change-case: ^5 - drauu: ^0.4 - focus-trap: ^7 - fuse.js: ^7 - idb-keyval: ^6 - jwt-decode: ^4 - nprogress: ^0.2 - qrcode: ^1.5 - sortablejs: ^1 - universal-cookie: ^7 || ^8 - vue: ^3.5.0 - peerDependenciesMeta: - async-validator: - optional: true - axios: - optional: true - change-case: - optional: true - drauu: - optional: true - focus-trap: - optional: true - fuse.js: - optional: true - idb-keyval: - optional: true - jwt-decode: - optional: true - nprogress: - optional: true - qrcode: - optional: true - sortablejs: - optional: true - universal-cookie: - optional: true - dependencies: - '@vueuse/core': 13.9.0(vue@3.5.29) - '@vueuse/shared': 13.9.0(vue@3.5.29) - axios: 1.7.3 - focus-trap: 7.6.4 - fuse.js: 7.1.0 - nprogress: 0.2.0 - vue: 3.5.29(typescript@5.2.2) - dev: false - /@vueuse/integrations@13.9.0(axios@1.7.7)(focus-trap@7.6.4)(fuse.js@7.1.0)(vue@3.5.29): resolution: {integrity: sha512-SDobKBbPIOe0cVL7QxMzGkuUGHvWTdihi9zOrrWaWUgFKe15cwEcwfWmgrcNzjT6kHnNmWuTajPHoIzUjYNYYQ==} peerDependencies: @@ -15856,16 +15346,6 @@ packages: - debug dev: false - /axios@1.7.3: - resolution: {integrity: sha512-Ar7ND9pU99eJ9GpoGQKhKf58GpUOgnzuaB7ueNQ5BMi0p+LZ5oaEnfF999fAArcTIBwXTCHAmGcHOZJaWPq9Nw==} - dependencies: - follow-redirects: 1.15.6 - form-data: 4.0.0 - proxy-from-env: 1.1.0 - transitivePeerDependencies: - - debug - dev: false - /axios@1.7.7: resolution: {integrity: sha512-S4kL7XrjgBmvdGut0sN3yJxqYzrDOnivkBiN0OFs6hLiUam3UPvswUo0kqGyhqUZGEOytHyumEdXsAkgCOUf3Q==} dependencies: @@ -16387,6 +15867,7 @@ packages: /chownr@3.0.0: resolution: {integrity: sha512-+IxzY9BZOQd/XuYPRmrvEVjF/nqj5kgT4kEq7VofrDoM1MxoRjEWkrCC3EtLi59TVawxTAn+orJwFQcrqEN1+g==} engines: {node: '>=18'} + dev: false /chrome-trace-event@1.0.4: resolution: {integrity: sha512-rNjApaLzuwaOTjCiT8lSDdGN1APCiqkChLMJxJPWLunPAt5fy8xgU9/jNOchV84wfIxrA0lRQB7oCT8jrn/wrQ==} @@ -16478,6 +15959,7 @@ packages: /clsx@2.1.1: resolution: {integrity: sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==} engines: {node: '>=6'} + dev: false /cluster-key-slot@1.1.2: resolution: {integrity: sha512-RMr0FhtfXemyinomL4hrWcYJxmX6deFdCxpJzhDttxgO1+bcCnkk+9drydLVDmAMG7NE6aN/fl4F7ucU/90gAA==} @@ -18226,44 +17708,18 @@ packages: eslint: 8.57.0 eslint-import-resolver-node: 0.3.9 eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@6.21.0)(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.31.0)(eslint@8.57.0) - eslint-plugin-import: 2.31.0(@typescript-eslint/parser@6.21.0)(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0) + eslint-plugin-import: 2.31.0(eslint@8.57.0) eslint-plugin-jsx-a11y: 6.10.2(eslint@8.57.0) eslint-plugin-react: 7.37.2(eslint@8.57.0) eslint-plugin-react-hooks: 4.6.0(eslint@8.57.0) - typescript: 5.9.3 - transitivePeerDependencies: - - eslint-import-resolver-webpack - - supports-color - dev: true - - /eslint-config-next@14.2.35(eslint@8.33.0)(typescript@5.2.2): - resolution: {integrity: sha512-BpLsv01UisH193WyT/1lpHqq5iJ/Orfz9h/NOOlAmTUq4GY349PextQ62K4XpnaM9supeiEn3TaOTeQO07gURg==} - peerDependencies: - eslint: ^7.23.0 || ^8.0.0 - typescript: '>=3.3.1' - peerDependenciesMeta: - typescript: - optional: true - dependencies: - '@next/eslint-plugin-next': 14.2.35 - '@rushstack/eslint-patch': 1.10.4 - '@typescript-eslint/eslint-plugin': 6.21.0(@typescript-eslint/parser@6.21.0)(eslint@8.33.0)(typescript@5.2.2) - '@typescript-eslint/parser': 6.21.0(eslint@8.33.0)(typescript@5.2.2) - eslint: 8.33.0 - eslint-import-resolver-node: 0.3.9 - eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@6.21.0)(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.31.0)(eslint@8.33.0) - eslint-plugin-import: 2.31.0(@typescript-eslint/parser@6.21.0)(eslint@8.33.0) - eslint-plugin-jsx-a11y: 6.10.2(eslint@8.33.0) - eslint-plugin-react: 7.37.2(eslint@8.33.0) - eslint-plugin-react-hooks: 4.6.0(eslint@8.33.0) - typescript: 5.2.2 + typescript: 5.9.3 transitivePeerDependencies: - eslint-import-resolver-webpack - supports-color dev: true - /eslint-config-next@14.2.5(eslint@8.57.0)(typescript@5.2.2): - resolution: {integrity: sha512-zogs9zlOiZ7ka+wgUnmcM0KBEDjo4Jis7kxN1jvC0N4wynQ2MIx/KBkg4mVF63J5EK4W0QMCn7xO3vNisjaAoA==} + /eslint-config-next@14.2.35(eslint@8.33.0)(typescript@5.2.2): + resolution: {integrity: sha512-BpLsv01UisH193WyT/1lpHqq5iJ/Orfz9h/NOOlAmTUq4GY349PextQ62K4XpnaM9supeiEn3TaOTeQO07gURg==} peerDependencies: eslint: ^7.23.0 || ^8.0.0 typescript: '>=3.3.1' @@ -18271,16 +17727,17 @@ packages: typescript: optional: true dependencies: - '@next/eslint-plugin-next': 14.2.5 - '@rushstack/eslint-patch': 1.6.0 - '@typescript-eslint/parser': 6.21.0(eslint@8.57.0)(typescript@5.2.2) - eslint: 8.57.0 + '@next/eslint-plugin-next': 14.2.35 + '@rushstack/eslint-patch': 1.10.4 + '@typescript-eslint/eslint-plugin': 6.21.0(@typescript-eslint/parser@6.21.0)(eslint@8.33.0)(typescript@5.2.2) + '@typescript-eslint/parser': 6.21.0(eslint@8.33.0)(typescript@5.2.2) + eslint: 8.33.0 eslint-import-resolver-node: 0.3.9 - eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@6.21.0)(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.31.0)(eslint@8.57.0) - eslint-plugin-import: 2.31.0(@typescript-eslint/parser@6.21.0)(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0) - eslint-plugin-jsx-a11y: 6.8.0(eslint@8.57.0) - eslint-plugin-react: 7.33.2(eslint@8.57.0) - eslint-plugin-react-hooks: 4.6.0(eslint@8.57.0) + eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@6.21.0)(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.31.0)(eslint@8.33.0) + eslint-plugin-import: 2.31.0(@typescript-eslint/parser@6.21.0)(eslint@8.33.0) + eslint-plugin-jsx-a11y: 6.10.2(eslint@8.33.0) + eslint-plugin-react: 7.37.2(eslint@8.33.0) + eslint-plugin-react-hooks: 4.6.0(eslint@8.33.0) typescript: 5.2.2 transitivePeerDependencies: - eslint-import-resolver-webpack @@ -18456,7 +17913,7 @@ packages: enhanced-resolve: 5.18.1 eslint: 8.57.0 eslint-module-utils: 2.12.0(@typescript-eslint/parser@6.21.0)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0) - eslint-plugin-import: 2.31.0(@typescript-eslint/parser@6.21.0)(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0) + eslint-plugin-import: 2.31.0(@typescript-eslint/parser@6.21.0)(eslint@8.57.0) fast-glob: 3.3.2 get-tsconfig: 4.7.2 is-core-module: 2.15.1 @@ -18851,7 +18308,7 @@ packages: - supports-color dev: true - /eslint-plugin-import@2.31.0(@typescript-eslint/parser@6.21.0)(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0): + /eslint-plugin-import@2.31.0(@typescript-eslint/parser@6.21.0)(eslint@8.33.0): resolution: {integrity: sha512-ixmkI62Rbc2/w8Vfxyh1jQRTdRTF52VxwRVHl/ykPAmqG+Nb7/kNn+byLP0LxPgI7zWA16Jt82SybJInmMia3A==} engines: {node: '>=4'} peerDependencies: @@ -18862,16 +18319,16 @@ packages: optional: true dependencies: '@rtsao/scc': 1.1.0 - '@typescript-eslint/parser': 6.21.0(eslint@8.57.0)(typescript@5.2.2) + '@typescript-eslint/parser': 6.21.0(eslint@8.33.0)(typescript@5.2.2) array-includes: 3.1.8 array.prototype.findlastindex: 1.2.5 array.prototype.flat: 1.3.2 array.prototype.flatmap: 1.3.2 debug: 3.2.7 doctrine: 2.1.0 - eslint: 8.57.0 + eslint: 8.33.0 eslint-import-resolver-node: 0.3.9 - eslint-module-utils: 2.12.0(@typescript-eslint/parser@6.21.0)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0) + eslint-module-utils: 2.12.0(@typescript-eslint/parser@6.21.0)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@8.33.0) hasown: 2.0.2 is-core-module: 2.15.1 is-glob: 4.0.3 @@ -18888,7 +18345,7 @@ packages: - supports-color dev: true - /eslint-plugin-import@2.31.0(@typescript-eslint/parser@6.21.0)(eslint@8.33.0): + /eslint-plugin-import@2.31.0(@typescript-eslint/parser@6.21.0)(eslint@8.57.0): resolution: {integrity: sha512-ixmkI62Rbc2/w8Vfxyh1jQRTdRTF52VxwRVHl/ykPAmqG+Nb7/kNn+byLP0LxPgI7zWA16Jt82SybJInmMia3A==} engines: {node: '>=4'} peerDependencies: @@ -18899,16 +18356,16 @@ packages: optional: true dependencies: '@rtsao/scc': 1.1.0 - '@typescript-eslint/parser': 6.21.0(eslint@8.33.0)(typescript@5.2.2) + '@typescript-eslint/parser': 6.21.0(eslint@8.57.0)(typescript@5.9.3) array-includes: 3.1.8 array.prototype.findlastindex: 1.2.5 array.prototype.flat: 1.3.2 array.prototype.flatmap: 1.3.2 debug: 3.2.7 doctrine: 2.1.0 - eslint: 8.33.0 + eslint: 8.57.0 eslint-import-resolver-node: 0.3.9 - eslint-module-utils: 2.12.0(@typescript-eslint/parser@6.21.0)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@8.33.0) + eslint-module-utils: 2.12.0(@typescript-eslint/parser@6.21.0)(eslint-import-resolver-node@0.3.9)(eslint@8.57.0) hasown: 2.0.2 is-core-module: 2.15.1 is-glob: 4.0.3 @@ -18925,7 +18382,7 @@ packages: - supports-color dev: true - /eslint-plugin-import@2.31.0(@typescript-eslint/parser@6.21.0)(eslint@8.57.0): + /eslint-plugin-import@2.31.0(eslint@8.57.0): resolution: {integrity: sha512-ixmkI62Rbc2/w8Vfxyh1jQRTdRTF52VxwRVHl/ykPAmqG+Nb7/kNn+byLP0LxPgI7zWA16Jt82SybJInmMia3A==} engines: {node: '>=4'} peerDependencies: @@ -18936,7 +18393,6 @@ packages: optional: true dependencies: '@rtsao/scc': 1.1.0 - '@typescript-eslint/parser': 6.21.0(eslint@8.57.0)(typescript@5.9.3) array-includes: 3.1.8 array.prototype.findlastindex: 1.2.5 array.prototype.flat: 1.3.2 @@ -18945,7 +18401,7 @@ packages: doctrine: 2.1.0 eslint: 8.57.0 eslint-import-resolver-node: 0.3.9 - eslint-module-utils: 2.12.0(@typescript-eslint/parser@6.21.0)(eslint-import-resolver-node@0.3.9)(eslint@8.57.0) + eslint-module-utils: 2.12.0(@typescript-eslint/parser@6.21.0)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0) hasown: 2.0.2 is-core-module: 2.15.1 is-glob: 4.0.3 @@ -19133,31 +18589,6 @@ packages: object.fromentries: 2.0.7 dev: true - /eslint-plugin-jsx-a11y@6.8.0(eslint@8.57.0): - resolution: {integrity: sha512-Hdh937BS3KdwwbBaKd5+PLCOmYY6U4f2h9Z2ktwtNKvIdIEu137rjYbcb9ApSbVJfWxANNuiKTD/9tOKjK9qOA==} - engines: {node: '>=4.0'} - peerDependencies: - eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 - dependencies: - '@babel/runtime': 7.26.0 - aria-query: 5.3.2 - array-includes: 3.1.7 - array.prototype.flatmap: 1.3.2 - ast-types-flow: 0.0.8 - axe-core: 4.7.0 - axobject-query: 3.2.1 - damerau-levenshtein: 1.0.8 - emoji-regex: 9.2.2 - es-iterator-helpers: 1.0.15 - eslint: 8.57.0 - hasown: 2.0.0 - jsx-ast-utils: 3.3.5 - language-tags: 1.0.9 - minimatch: 3.1.2 - object.entries: 1.1.7 - object.fromentries: 2.0.7 - dev: true - /eslint-plugin-react-hooks@4.6.0(eslint@8.33.0): resolution: {integrity: sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g==} engines: {node: '>=10'} @@ -19286,31 +18717,6 @@ packages: string.prototype.matchall: 4.0.10 dev: true - /eslint-plugin-react@7.33.2(eslint@8.57.0): - resolution: {integrity: sha512-73QQMKALArI8/7xGLNI/3LylrEYrlKZSb5C9+q3OtOewTnMQi5cT+aE9E41sLCmli3I9PGGmD1yiZydyo4FEPw==} - engines: {node: '>=4'} - peerDependencies: - eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 - dependencies: - array-includes: 3.1.7 - array.prototype.flatmap: 1.3.2 - array.prototype.tosorted: 1.1.2 - doctrine: 2.1.0 - es-iterator-helpers: 1.0.15 - eslint: 8.57.0 - estraverse: 5.3.0 - jsx-ast-utils: 3.3.5 - minimatch: 3.1.2 - object.entries: 1.1.7 - object.fromentries: 2.0.7 - object.hasown: 1.1.3 - object.values: 1.1.7 - prop-types: 15.8.1 - resolve: 2.0.0-next.5 - semver: 6.3.1 - string.prototype.matchall: 4.0.10 - dev: true - /eslint-plugin-react@7.37.2(eslint@8.33.0): resolution: {integrity: sha512-EsTAnj9fLVr/GZleBLFbj/sSuXeWmp1eXIN60ceYnZveqEaUCyW4X+Vh4WTdUhCkW4xutXYqTXCUSyqD4rB75w==} engines: {node: '>=4'} @@ -20440,7 +19846,7 @@ packages: peerDependencies: next: '>=13.2.0' dependencies: - next: 14.2.35(@babel/core@7.23.5)(react-dom@18.3.1)(react@18.3.1)(sass@1.69.5) + next: 14.2.35(@babel/core@7.28.5)(@playwright/test@1.59.1)(react-dom@18.3.1)(react@18.3.1)(sass@1.69.5) dev: true /generic-pool@3.9.0: @@ -21391,15 +20797,6 @@ packages: engines: {node: '>= 0.10'} dev: false - /intl-messageformat@10.5.14: - resolution: {integrity: sha512-IjC6sI0X7YRjjyVH9aUgdftcmZK7WXdHeil4KwbjDnRWjnVitKpAx3rr6t6di1joFp5188VqKcobOPA6mCLG/w==} - dependencies: - '@formatjs/ecma402-abstract': 2.0.0 - '@formatjs/fast-memoize': 2.2.0 - '@formatjs/icu-messageformat-parser': 2.7.8 - tslib: 2.6.2 - dev: false - /invariant@2.2.4: resolution: {integrity: sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==} dependencies: @@ -21843,6 +21240,7 @@ packages: /jiti@2.4.2: resolution: {integrity: sha512-rg9zJN+G4n2nfJl5MW3BMygZX56zKPNVEYYqq7adpmMh4Jn2QNEwhvQlFy6jPVdcod7txZtKHWnyZiA3a0zP7A==} hasBin: true + dev: false /jiti@2.6.1: resolution: {integrity: sha512-ekilCSN1jwRvIbgeg/57YFh8qQDNbwDb9xT/qu2DAHbFFZUicIl4ygVaAvzveMhMVr3LnpSKTNnwt8PoOfmKhQ==} @@ -22057,33 +21455,11 @@ packages: resolution: {integrity: sha512-zBfiUPM5nD0YZSBT/o/fbCUlCcepMIdP0CJZxM1+KgA4f2T206f6VAg9e7mX35+KlMaIc5qXW34f3BnwJ3w+RA==} engines: {node: '>=12.0.0'} - /jsonpath-plus@8.1.0: - resolution: {integrity: sha512-qVTiuKztFGw0dGhYi3WNqvddx3/SHtyDT0xJaeyz4uP0d1tkpG+0y5uYQ4OcIo1TLAz3PE/qDOW9F0uDt3+CTw==} - engines: {node: '>=14.0.0'} - hasBin: true - dev: false - /jsonpointer@5.0.1: resolution: {integrity: sha512-p/nXbhSEcu3pZRdkW1OfJhpsVtW1gd4Wa1fnQc9YLiTfAjn0312eMKimbdIQzuZl9aa9xUGaRlP9T/CJE/ditQ==} engines: {node: '>=0.10.0'} dev: false - /jsonwebtoken@9.0.2: - resolution: {integrity: sha512-PRp66vJ865SSqOlgqS8hujT5U4AOgMfhrwYIuIhfKaoSCZcirrmASQr8CX7cUg+RMih+hgznrjp99o+W4pJLHQ==} - engines: {node: '>=12', npm: '>=6'} - 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 - dev: false - /jsonwebtoken@9.0.3: resolution: {integrity: sha512-MT/xP0CrubFRNLNKvxJ2BYfy53Zkm++5bX9dtuPbqAeQpTVe0MQTFhao8+Cp//EmJp244xt6Drw/GVEGCUj40g==} engines: {node: '>=12', npm: '>=6'} @@ -22139,14 +21515,6 @@ packages: resolution: {integrity: sha512-1IynUYEc/HAwxhi3WDpIpxJbZpMCvvrrmZVqvj9EhpvbH8lls7HhdhiByjL7DkAaWlLIzpC0Xc/VPvy/UxLNjA==} dev: false - /jwa@1.4.1: - resolution: {integrity: sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA==} - dependencies: - buffer-equal-constant-time: 1.0.1 - ecdsa-sig-formatter: 1.0.11 - safe-buffer: 5.2.1 - dev: false - /jwa@2.0.1: resolution: {integrity: sha512-hRF04fqJIP8Abbkq5NKGN0Bbr3JxlQ+qhZufXVr0DvujKy93ZCbXZMHDL4EOtodSbCWxOqR8MS1tXA5hwqCXDg==} dependencies: @@ -22155,13 +21523,6 @@ packages: safe-buffer: 5.2.1 dev: false - /jws@3.2.2: - resolution: {integrity: sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==} - dependencies: - jwa: 1.4.1 - safe-buffer: 5.2.1 - dev: false - /jws@4.0.1: resolution: {integrity: sha512-EKI/M/yqPncGUUh44xz0PxSidXFr/+r0pA70+gIYhjv+et7yxM+s29Y+VGDkovRofQem0fs7Uvf4+YmAdyRduA==} dependencies: @@ -22245,6 +21606,7 @@ packages: cpu: [arm64] os: [darwin] requiresBuild: true + dev: false optional: true /lightningcss-darwin-arm64@1.30.2: @@ -22262,6 +21624,7 @@ packages: cpu: [x64] os: [darwin] requiresBuild: true + dev: false optional: true /lightningcss-darwin-x64@1.30.2: @@ -22279,6 +21642,7 @@ packages: cpu: [x64] os: [freebsd] requiresBuild: true + dev: false optional: true /lightningcss-freebsd-x64@1.30.2: @@ -22296,6 +21660,7 @@ packages: cpu: [arm] os: [linux] requiresBuild: true + dev: false optional: true /lightningcss-linux-arm-gnueabihf@1.30.2: @@ -22314,6 +21679,7 @@ packages: os: [linux] libc: [glibc] requiresBuild: true + dev: false optional: true /lightningcss-linux-arm64-gnu@1.30.2: @@ -22333,6 +21699,7 @@ packages: os: [linux] libc: [musl] requiresBuild: true + dev: false optional: true /lightningcss-linux-arm64-musl@1.30.2: @@ -22352,6 +21719,7 @@ packages: os: [linux] libc: [glibc] requiresBuild: true + dev: false optional: true /lightningcss-linux-x64-gnu@1.30.2: @@ -22371,6 +21739,7 @@ packages: os: [linux] libc: [musl] requiresBuild: true + dev: false optional: true /lightningcss-linux-x64-musl@1.30.2: @@ -22389,6 +21758,7 @@ packages: cpu: [arm64] os: [win32] requiresBuild: true + dev: false optional: true /lightningcss-win32-arm64-msvc@1.30.2: @@ -22406,6 +21776,7 @@ packages: cpu: [x64] os: [win32] requiresBuild: true + dev: false optional: true /lightningcss-win32-x64-msvc@1.30.2: @@ -22433,6 +21804,7 @@ packages: lightningcss-linux-x64-musl: 1.30.1 lightningcss-win32-arm64-msvc: 1.30.1 lightningcss-win32-x64-msvc: 1.30.1 + dev: false /lightningcss@1.30.2: resolution: {integrity: sha512-utfs7Pr5uJyyvDETitgsaqSyjCb2qNRAtuqUeWIAKztsOYdcACf2KtARYXg2pSvhkt+9NfoaNY7fxjl6nuMjIQ==} @@ -23776,6 +23148,7 @@ packages: dependencies: minipass: 7.1.2 rimraf: 5.0.10 + dev: false /mkdirp-classic@0.5.3: resolution: {integrity: sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==} @@ -23797,6 +23170,7 @@ packages: resolution: {integrity: sha512-+NsyUUAZDmo6YVHzL/stxSu3t9YS1iljliy3BSDrXJ/dkn1KYdmtZODGGjLcc9XLgVVpH4KshHB8XmZgMhaBXg==} engines: {node: '>=10'} hasBin: true + dev: false /ml-array-max@1.2.4: resolution: {integrity: sha512-BlEeg80jI0tW6WaPyGxf5Sa4sqvcyY6lbSn5Vcv44lp1I2GR6AWojfUvLnGTNsIXrZ8uqWmo8VcG1WpkI2ONMQ==} @@ -23825,11 +23199,6 @@ packages: ml-array-rescale: 1.3.7 dev: false - /modern-tar@0.7.2: - resolution: {integrity: sha512-TGG1ZRk1TAQ3neuZwahAHke3rKsSlro+ooMYtjh9sl2gGPVMLMuWiHgwC7im9T5bSM566RSo2Dko56ETgEvZcA==} - engines: {node: '>=18.0.0'} - dev: false - /moment-timezone@0.5.45: resolution: {integrity: sha512-HIWmqA86KcmCAhnMAN0wuDOARV/525R2+lOLotuGFzn4HO+FH+/645z2wx0Dt3iDv6/p61SIvKnDstISainhLQ==} dependencies: @@ -23999,11 +23368,6 @@ packages: resolution: {integrity: sha512-ujxWwyRfZ6udAgHGECQC3JDO9e6UAsuItfUMcqA0Xf2OLNQTveFVFx+fHGIJ5p0MJaJrZyGQqPwzuN0NxJzEKA==} dev: false - /negotiator@0.6.3: - resolution: {integrity: sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==} - engines: {node: '>= 0.6'} - dev: false - /negotiator@1.0.0: resolution: {integrity: sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg==} engines: {node: '>= 0.6'} @@ -24073,24 +23437,11 @@ packages: hoist-non-react-statics: 3.3.2 i18next: 23.12.1 i18next-fs-backend: 2.3.1 - next: 14.2.35(@babel/core@7.23.5)(react-dom@18.3.1)(react@18.3.1)(sass@1.69.5) + next: 14.2.35(@babel/core@7.28.5)(@playwright/test@1.59.1)(react-dom@18.3.1)(react@18.3.1)(sass@1.69.5) react: 18.3.1 react-i18next: 14.1.2(i18next@23.12.1)(react-dom@18.3.1)(react@18.3.1) dev: false - /next-intl@3.17.2(next@14.2.35)(react@18.3.1): - resolution: {integrity: sha512-X2ly23e1lC5vdWHaJFBDZi/0iornEdFQQtqJmmPOb7WD+LDssm9vAnx+hJshYGjddaP3rUmyWaPgePCQqaxm1g==} - peerDependencies: - next: ^10.0.0 || ^11.0.0 || ^12.0.0 || ^13.0.0 || ^14.0.0 - react: ^16.8.0 || ^17.0.0 || ^18.0.0 - dependencies: - '@formatjs/intl-localematcher': 0.2.32 - negotiator: 0.6.3 - next: 14.2.35(@babel/core@7.23.5)(react-dom@18.3.1)(react@18.3.1)(sass@1.69.5) - react: 18.3.1 - use-intl: 3.17.2(react@18.3.1) - dev: false - /next-swagger-doc@0.4.1(next@14.2.35)(openapi-types@12.1.3): resolution: {integrity: sha512-pFmFUOwNlJh7mr9P6b2obAHa9JAwgPK3oNTIzE9g/Gs+h2OG1T3C5SanzrqGA3dDncagyf/DbO5U+ZzNxKadWg==} engines: {node: '>=18'} @@ -24107,16 +23458,6 @@ packages: - openapi-types dev: false - /next-themes@0.4.6(react-dom@18.3.1)(react@18.3.1): - resolution: {integrity: sha512-pZvgD5L0IEvX5/9GWyHMf3m8BKiVQwsCMHfoFosXtXBMnaS0ZnIJ9ST4b4NqLVKDEm8QBxoNNGNaBv2JNF6XNA==} - peerDependencies: - react: ^16.8 || ^17 || ^18 || ^19 || ^19.0.0-rc - react-dom: ^16.8 || ^17 || ^18 || ^19 || ^19.0.0-rc - dependencies: - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) - dev: false - /next@13.1.6(@babel/core@7.23.5)(react-dom@18.3.1)(react@18.3.1)(sass@1.69.5): resolution: {integrity: sha512-hHlbhKPj9pW+Cymvfzc15lvhaOZ54l+8sXDXJWm3OBNBzgrVj6hwGPmqqsXg40xO1Leq+kXpllzRPuncpC0Phw==} engines: {node: '>=14.6.0'} @@ -24202,48 +23543,6 @@ packages: - babel-plugin-macros dev: false - /next@14.2.35(@babel/core@7.23.5)(react-dom@18.3.1)(react@18.3.1)(sass@1.69.5): - resolution: {integrity: sha512-KhYd2Hjt/O1/1aZVX3dCwGXM1QmOV4eNM2UTacK5gipDdPN/oHHK/4oVGy7X8GMfPMsUTUEmGlsy0EY1YGAkig==} - engines: {node: '>=18.17.0'} - hasBin: true - peerDependencies: - '@opentelemetry/api': ^1.1.0 - '@playwright/test': ^1.41.2 - react: ^18.2.0 - react-dom: ^18.2.0 - sass: ^1.3.0 - peerDependenciesMeta: - '@opentelemetry/api': - optional: true - '@playwright/test': - optional: true - sass: - optional: true - dependencies: - '@next/env': 14.2.35 - '@swc/helpers': 0.5.5 - busboy: 1.6.0 - caniuse-lite: 1.0.30001761 - graceful-fs: 4.2.11 - postcss: 8.4.31 - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) - sass: 1.69.5 - styled-jsx: 5.1.1(@babel/core@7.23.5)(react@18.3.1) - optionalDependencies: - '@next/swc-darwin-arm64': 14.2.33 - '@next/swc-darwin-x64': 14.2.33 - '@next/swc-linux-arm64-gnu': 14.2.33 - '@next/swc-linux-arm64-musl': 14.2.33 - '@next/swc-linux-x64-gnu': 14.2.33 - '@next/swc-linux-x64-musl': 14.2.33 - '@next/swc-win32-arm64-msvc': 14.2.33 - '@next/swc-win32-ia32-msvc': 14.2.33 - '@next/swc-win32-x64-msvc': 14.2.33 - transitivePeerDependencies: - - '@babel/core' - - babel-plugin-macros - /next@14.2.35(@babel/core@7.28.5)(@playwright/test@1.59.1)(react-dom@18.3.1)(react@18.3.1)(sass@1.69.5): resolution: {integrity: sha512-KhYd2Hjt/O1/1aZVX3dCwGXM1QmOV4eNM2UTacK5gipDdPN/oHHK/4oVGy7X8GMfPMsUTUEmGlsy0EY1YGAkig==} engines: {node: '>=18.17.0'} @@ -24286,7 +23585,6 @@ packages: transitivePeerDependencies: - '@babel/core' - babel-plugin-macros - dev: false /next@14.2.35(react-dom@18.3.1)(react@18.3.1): resolution: {integrity: sha512-KhYd2Hjt/O1/1aZVX3dCwGXM1QmOV4eNM2UTacK5gipDdPN/oHHK/4oVGy7X8GMfPMsUTUEmGlsy0EY1YGAkig==} @@ -24314,7 +23612,7 @@ packages: postcss: 8.4.31 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - styled-jsx: 5.1.1(@babel/core@7.28.5)(react@18.3.1) + styled-jsx: 5.1.1(@babel/core@7.23.5)(react@18.3.1) optionalDependencies: '@next/swc-darwin-arm64': 14.2.33 '@next/swc-darwin-x64': 14.2.33 @@ -25107,15 +24405,6 @@ packages: source-map-js: 1.2.1 dev: false - /postcss@8.5.3: - resolution: {integrity: sha512-dle9A3yYxlBSrt8Fu+IpjGT8SY8hN0mlaA6GY8t0P5PjIOZemULz/E2Bnm/2dcUOena75OTNkHI76uZBNUUq3A==} - engines: {node: ^10 || ^12 || >=14} - dependencies: - nanoid: 3.3.11 - picocolors: 1.1.1 - source-map-js: 1.2.1 - dev: true - /postcss@8.5.6: resolution: {integrity: sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==} engines: {node: ^10 || ^12 || >=14} @@ -25147,75 +24436,11 @@ packages: resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} engines: {node: '>= 0.8.0'} - /prettier-plugin-tailwindcss@0.6.9(prettier@3.4.2): - resolution: {integrity: sha512-r0i3uhaZAXYP0At5xGfJH876W3HHGHDp+LCRUJrs57PBeQ6mYHMwr25KH8NPX44F2yGTvdnH7OqCshlQx183Eg==} - engines: {node: '>=14.21.3'} - peerDependencies: - '@ianvs/prettier-plugin-sort-imports': '*' - '@prettier/plugin-pug': '*' - '@shopify/prettier-plugin-liquid': '*' - '@trivago/prettier-plugin-sort-imports': '*' - '@zackad/prettier-plugin-twig-melody': '*' - prettier: ^3.0 - prettier-plugin-astro: '*' - prettier-plugin-css-order: '*' - prettier-plugin-import-sort: '*' - prettier-plugin-jsdoc: '*' - prettier-plugin-marko: '*' - prettier-plugin-multiline-arrays: '*' - prettier-plugin-organize-attributes: '*' - prettier-plugin-organize-imports: '*' - prettier-plugin-sort-imports: '*' - prettier-plugin-style-order: '*' - prettier-plugin-svelte: '*' - peerDependenciesMeta: - '@ianvs/prettier-plugin-sort-imports': - optional: true - '@prettier/plugin-pug': - optional: true - '@shopify/prettier-plugin-liquid': - optional: true - '@trivago/prettier-plugin-sort-imports': - optional: true - '@zackad/prettier-plugin-twig-melody': - optional: true - prettier-plugin-astro: - optional: true - prettier-plugin-css-order: - optional: true - prettier-plugin-import-sort: - optional: true - prettier-plugin-jsdoc: - optional: true - prettier-plugin-marko: - optional: true - prettier-plugin-multiline-arrays: - optional: true - prettier-plugin-organize-attributes: - optional: true - prettier-plugin-organize-imports: - optional: true - prettier-plugin-sort-imports: - optional: true - prettier-plugin-style-order: - optional: true - prettier-plugin-svelte: - optional: true - dependencies: - prettier: 3.4.2 - dev: true - /prettier@2.8.8: resolution: {integrity: sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==} engines: {node: '>=10.13.0'} hasBin: true - /prettier@3.4.2: - resolution: {integrity: sha512-e9MewbtFo+Fevyuxn/4rrcDAaq0IYxPGLvObpQjiZBMAzB9IGmzlnG9RZy3FFas+eBMu2vA0CszMeduow5dIuQ==} - engines: {node: '>=14'} - hasBin: true - dev: true - /pretty-bytes@7.1.0: resolution: {integrity: sha512-nODzvTiYVRGRqAOvE84Vk5JDPyyxsVk0/fbA/bq7RqlnhksGpset09XTxbpvLTIjoaF7K8Z8DG8yHtKGTPSYRw==} engines: {node: '>=20'} @@ -25544,18 +24769,6 @@ packages: react: 18.3.1 dev: false - /react-day-picker@9.8.0(react@18.3.1): - resolution: {integrity: sha512-E0yhhg7R+pdgbl/2toTb0xBhsEAtmAx1l7qjIWYfcxOy8w4rTSVfbtBoSzVVhPwKP/5E9iL38LivzoE3AQDhCQ==} - engines: {node: '>=18'} - peerDependencies: - react: '>=16.8.0' - dependencies: - '@date-fns/tz': 1.2.0 - date-fns: 4.1.0 - date-fns-jalali: 4.1.0-0 - react: 18.3.1 - dev: false - /react-debounce-input@3.3.0(react@18.3.1): resolution: {integrity: sha512-VEqkvs8JvY/IIZvh71Z0TC+mdbxERvYF33RcebnodlsUZ8RSgyKe2VWaHXv4+/8aoOgXLxWrdsYs2hDhcwbUgA==} peerDependencies: @@ -26339,6 +25552,7 @@ packages: hasBin: true dependencies: glob: 10.3.10 + dev: false /rollup-plugin-copy@3.5.0: resolution: {integrity: sha512-wI8D5dvYovRMx/YYKtUNt3Yxaw4ORC9xo6Gt9t22kveWz1enG9QrhVlagzwrxSC455xD1dHMKhIJkbsQ7d48BA==} @@ -27401,6 +26615,7 @@ packages: '@babel/core': 7.23.5 client-only: 0.0.1 react: 18.3.1 + dev: false /styled-jsx@5.1.1(@babel/core@7.28.5)(react@18.3.1): resolution: {integrity: sha512-pW7uC1l4mBZ8ugbiZrcIsiIvVx1UmTfw7UkC3Um2tmfUq9Bhk8IiyEIPl6F8agHgjzku6j0xQEZbfA5uSgSaCw==} @@ -27418,7 +26633,6 @@ packages: '@babel/core': 7.28.5 client-only: 0.0.1 react: 18.3.1 - dev: false /stylis@4.2.0: resolution: {integrity: sha512-Orov6g6BB1sDfYgzWfTHDOxamtX1bE/zo104Dh9e6fqJ3PooipYyfJ0pUmrZO2wAvO8YbEyeFrkV91XTsGMSrw==} @@ -27660,6 +26874,7 @@ packages: /tailwindcss@4.1.10: resolution: {integrity: sha512-P3nr6WkvKV/ONsTzj6Gb57sWPMX29EPNPopo7+FcpkQaNsrNpZ1pv8QmrYI2RqEKD7mlGqLnGovlcYnBK0IqUA==} + dev: false /tailwindcss@4.1.12: resolution: {integrity: sha512-DzFtxOi+7NsFf7DBtI3BJsynR+0Yp6etH+nRPTbpWnS2pZBaSksv/JGctNwSWzbFjp0vxSqknaUylseZqMDGrA==} @@ -27734,6 +26949,7 @@ packages: minizlib: 3.0.1 mkdirp: 3.0.1 yallist: 5.0.0 + dev: false /tencentcloud-sdk-nodejs@4.0.905: resolution: {integrity: sha512-oXZygzjI/smJD1I9amigZ5vukur60ZUhuc5St8gv+3krGg3vDBccHWgEnXB/OlJVCcnbmb40mzsYfTkDOtSccQ==} @@ -28573,16 +27789,6 @@ packages: react: 18.3.1 dev: false - /use-intl@3.17.2(react@18.3.1): - resolution: {integrity: sha512-9lPgt41nS8x4AYCLfIC9VKCmamnVxzPM2nze7lpp/I1uaSSQvIz5MQpYUFikv08cMUsCwAWahU0e+arHInpdcw==} - peerDependencies: - react: ^16.8.0 || ^17.0.0 || ^18.0.0 - dependencies: - '@formatjs/fast-memoize': 2.2.0 - intl-messageformat: 10.5.14 - react: 18.3.1 - dev: false - /use-isomorphic-layout-effect@1.2.0(@types/react@18.3.27)(react@18.3.1): resolution: {integrity: sha512-q6ayo8DWoPZT0VdG4u3D3uxcgONP3Mevx2i2b0434cwWBoL+aelL1DzkXI6w3PhTZzUeR2kaVlZn70iCiseP6w==} peerDependencies: @@ -28850,7 +28056,7 @@ packages: fsevents: 2.3.3 dev: true - /vitest@4.0.15(@types/node@24.10.4)(@vitest/browser-playwright@4.0.15)(sass@1.69.5): + /vitest@4.0.15(@types/node@24.10.4)(@vitest/browser-playwright@4.0.15): resolution: {integrity: sha512-n1RxDp8UJm6N0IbJLQo+yzLZ2sQCDyl1o0LeugbPWf8+8Fttp29GghsQBjYJVmWq3gBFfe9Hs1spR44vovn2wA==} engines: {node: ^20.0.0 || ^22.0.0 || >=24.0.0} hasBin: true @@ -28920,7 +28126,7 @@ packages: - yaml dev: true - /vitest@4.0.15(@types/node@24.10.4)(@vitest/ui@4.0.12)(jsdom@27.2.0)(sass@1.69.5): + /vitest@4.0.15(@types/node@24.10.4)(@vitest/browser-playwright@4.0.15)(@vitest/ui@4.0.12)(jsdom@27.2.0)(sass@1.69.5): resolution: {integrity: sha512-n1RxDp8UJm6N0IbJLQo+yzLZ2sQCDyl1o0LeugbPWf8+8Fttp29GghsQBjYJVmWq3gBFfe9Hs1spR44vovn2wA==} engines: {node: ^20.0.0 || ^22.0.0 || >=24.0.0} hasBin: true @@ -28955,6 +28161,7 @@ packages: optional: true dependencies: '@types/node': 24.10.4 + '@vitest/browser-playwright': 4.0.15(playwright@1.59.1)(vite@7.2.6)(vitest@4.0.15) '@vitest/expect': 4.0.15 '@vitest/mocker': 4.0.15(vite@7.2.6) '@vitest/pretty-format': 4.0.15 @@ -29481,6 +28688,7 @@ packages: /yallist@5.0.0: resolution: {integrity: sha512-YgvUTfwqyc7UXVMrB+SImsVYSmTS8X/tSrtdNZMImM+n7+QTriRXyXim0mBrTXNeqzVF0KWGgHPeiyViFFrNDw==} engines: {node: '>=18'} + dev: false /yaml@1.10.2: resolution: {integrity: sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==} @@ -29541,15 +28749,6 @@ packages: readable-stream: 3.6.2 dev: false - /zod-openapi@4.2.4(zod@3.25.76): - resolution: {integrity: sha512-tsrQpbpqFCXqVXUzi3TPwFhuMtLN3oNZobOtYnK6/5VkXsNdnIgyNr4r8no4wmYluaxzN3F7iS+8xCW8BmMQ8g==} - engines: {node: '>=18'} - peerDependencies: - zod: ^3.21.4 - dependencies: - zod: 3.25.76 - dev: false - /zod-openapi@4.2.4(zod@4.3.5): resolution: {integrity: sha512-tsrQpbpqFCXqVXUzi3TPwFhuMtLN3oNZobOtYnK6/5VkXsNdnIgyNr4r8no4wmYluaxzN3F7iS+8xCW8BmMQ8g==} engines: {node: '>=18'} diff --git a/frontend/providers/aiproxy/package.json b/frontend/providers/aiproxy/package.json index 41d35c41aa79..3d365384bd75 100644 --- a/frontend/providers/aiproxy/package.json +++ b/frontend/providers/aiproxy/package.json @@ -42,7 +42,6 @@ "i18next-http-backend": "^2.6.2", "i18next-resources-to-backend": "^1.2.1", "immer": "^10.1.1", - "jsonwebtoken": "^9.0.3", "lucide-react": "^0.555.0", "next": "14.2.35", "next-i18next": "^15.3.0", @@ -64,7 +63,6 @@ }, "devDependencies": { "@playwright/test": "^1.58.1", - "@types/jsonwebtoken": "^9.0.3", "@types/node": "^24", "@types/react": "18.3.27", "@types/react-dom": "18.3.7", diff --git a/frontend/providers/aiproxy/utils/backend/auth.ts b/frontend/providers/aiproxy/utils/backend/auth.ts index 71683dce60e7..1aa3475c73bb 100644 --- a/frontend/providers/aiproxy/utils/backend/auth.ts +++ b/frontend/providers/aiproxy/utils/backend/auth.ts @@ -1,4 +1,4 @@ -import jwt from 'jsonwebtoken' +import { isJwtToken, signJwt, verifyJwt } from '@sealos/shared/server/jwt' import { getNamespaceFromKubeConfigString, verifyK8sConfigString } from './check-kc' @@ -37,10 +37,13 @@ export async function kcOrAppTokenAuth(headers: Headers): Promise { if (isJwtToken(token)) { // Handle JWT token validation try { - const decoded = jwt.verify( + const decoded = await verifyJwt( token, global.AppConfig?.auth.appTokenJwtKey || process.env.APP_TOKEN_JWT_KEY || '' - ) as AppTokenPayload + ) + if (!decoded) { + return Promise.reject('Auth: Invalid JWT token') + } const now = Math.floor(Date.now() / 1000) if (decoded.exp && decoded.exp < now) { return Promise.reject('Auth: Token expired') @@ -80,15 +83,17 @@ export async function kcOrAppTokenAuthDecoded(headers: Headers): Promise if (token.includes('%')) { try { token = decodeURIComponent(token) - } catch (error) { - } + } catch {} } if (isJwtToken(token)) { try { - const decoded = jwt.verify( + const decoded = await verifyJwt( token, global.AppConfig?.auth.appTokenJwtKey || process.env.APP_TOKEN_JWT_KEY || '' - ) as AppTokenPayload + ) + if (!decoded) { + return Promise.reject('Auth: Invalid JWT token') + } const now = Math.floor(Date.now() / 1000) if (decoded.exp && decoded.exp < now) { return Promise.reject('Auth: Token expired') @@ -116,13 +121,6 @@ export async function kcOrAppTokenAuthDecoded(headers: Headers): Promise } } } -/** - * Check if the token is a JWT token (contains dots separating header, payload, signature) - */ -function isJwtToken(token: string): boolean { - return token.includes('.') && token.split('.').length === 3 -} - export async function parseJwtToken(headers: Headers): Promise { try { const token = headers.get('authorization') @@ -130,10 +128,13 @@ export async function parseJwtToken(headers: Headers): Promise { return Promise.reject('Auth: Token is missing') } - const decoded = jwt.verify( + const decoded = await verifyJwt( token, global.AppConfig?.auth.appTokenJwtKey || process.env.APP_TOKEN_JWT_KEY || '' - ) as AppTokenPayload + ) + if (!decoded) { + return Promise.reject('Auth: Invalid token') + } const now = Math.floor(Date.now() / 1000) if (decoded.exp && decoded.exp < now) { return Promise.reject('Auth: Token expired') @@ -166,10 +167,14 @@ export async function checkSealosUserIsRealName(headers: Headers): Promise( token, global.AppConfig?.auth.appTokenJwtKey || '' - ) as AppTokenPayload + ) + if (!decoded) { + console.error('CheckSealosUserIsRealName: Token is invalid') + return false + } const now = Math.floor(Date.now() / 1000) if (decoded.exp && decoded.exp < now) { console.error('CheckSealosUserIsRealName: Token expired') @@ -181,7 +186,7 @@ export async function checkSealosUserIsRealName(headers: Headers): Promise { if (!header) return Promise.reject('unAuthorization'); @@ -30,10 +30,5 @@ export const verifyJwt = async ( token: string, secret: string ): Promise => { - try { - const payload = verify(token, secret) as TPayload; - return payload; - } catch (err) { - return null; - } + return verifySharedJwt(token, secret) as Promise; }; diff --git a/frontend/providers/cloudserver/package.json b/frontend/providers/cloudserver/package.json index c6799517f9a8..959f0b18b0c8 100644 --- a/frontend/providers/cloudserver/package.json +++ b/frontend/providers/cloudserver/package.json @@ -17,6 +17,7 @@ "@emotion/styled": "^11.11.0", "@kubernetes/client-node": "^0.18.1", "@next/font": "13.1.6", + "@sealos/shared": "workspace:^", "@sealos/ui": "workspace:^", "@tanstack/react-query": "^4.35.3", "@types/multer": "^1.4.10", @@ -31,7 +32,6 @@ "immer": "^9.0.21", "js-cookie": "^3.0.5", "js-yaml": "^4.1.0", - "jsonwebtoken": "^9.0.2", "jszip": "^3.10.1", "lodash": "^4.17.21", "minio": "^7.1.3", @@ -58,7 +58,6 @@ "@svgr/webpack": "^6.5.1", "@types/js-cookie": "^3.0.4", "@types/js-yaml": "^4.0.6", - "@types/jsonwebtoken": "^9.0.3", "@types/lodash": "^4.14.199", "@types/node": "^24", "@types/nprogress": "^0.2.1", diff --git a/frontend/providers/cloudserver/src/services/backend/auth.ts b/frontend/providers/cloudserver/src/services/backend/auth.ts index 4b99a0690a7e..74302c83c727 100644 --- a/frontend/providers/cloudserver/src/services/backend/auth.ts +++ b/frontend/providers/cloudserver/src/services/backend/auth.ts @@ -1,5 +1,5 @@ import { DesktopTokenPayload } from '@/types/user'; -import { verify } from 'jsonwebtoken'; +import { verifyJwtOrThrow } from '@sealos/shared/server/jwt'; import type { NextApiRequest } from 'next'; import { ERROR_ENUM } from '../error'; @@ -13,14 +13,4 @@ export const verifyAccessToken = async (req: NextApiRequest) => { }; export const verifyDesktopToken: (token: string) => Promise = (token) => - new Promise((resolve, reject) => { - verify(token, appJwtSecret, (err, payload) => { - if (err) { - reject(err); - } else if (!payload) { - reject('payload is null'); - } else { - resolve(payload as DesktopTokenPayload); - } - }); - }); + verifyJwtOrThrow(token, appJwtSecret); diff --git a/frontend/providers/costcenter/package.json b/frontend/providers/costcenter/package.json index 5e8e8d2663e0..2decf471e516 100644 --- a/frontend/providers/costcenter/package.json +++ b/frontend/providers/costcenter/package.json @@ -46,7 +46,6 @@ "immer": "^9.0.21", "js-cookie": "^3.0.5", "js-yaml": "^4.1.0", - "jsonwebtoken": "^9.0.2", "lodash": "^4.17.21", "lucide-react": "^0.540.0", "mongodb": "^5.9.0", @@ -71,7 +70,6 @@ "devDependencies": { "@types/js-cookie": "^3.0.4", "@types/js-yaml": "^4.0.6", - "@types/jsonwebtoken": "^9.0.3", "@types/lodash": "^4.14.199", "@types/node": "^24", "@types/nprogress": "^0.2.1", diff --git a/frontend/providers/costcenter/src/pages/api/plan/list.ts b/frontend/providers/costcenter/src/pages/api/plan/list.ts index ae054ed44316..68c2e2925013 100644 --- a/frontend/providers/costcenter/src/pages/api/plan/list.ts +++ b/frontend/providers/costcenter/src/pages/api/plan/list.ts @@ -5,7 +5,7 @@ import { PlanListResponse } from '@/types/plan'; export default async function handler(req: NextApiRequest, res: NextApiResponse) { try { - const client = makeAPIClient(null); + const client = await makeAPIClient(null); const response = await client.post( '/account/v1alpha1/workspace-subscription/plan-list' diff --git a/frontend/providers/costcenter/src/service/auth.ts b/frontend/providers/costcenter/src/service/auth.ts index ba06a022cedf..2c70c1f931f5 100644 --- a/frontend/providers/costcenter/src/service/auth.ts +++ b/frontend/providers/costcenter/src/service/auth.ts @@ -1,5 +1,5 @@ -import { sign, verify } from 'jsonwebtoken'; import { Config } from '@/config'; +import { signJwt, verifyJwt as verifySharedJwt } from '@sealos/shared/server/jwt'; const internalJwtSecret = () => Config().costCenter.auth.jwt.internal; @@ -17,22 +17,11 @@ export type AccessTokenPayload = { workspaceId: string; } & AuthenticationTokenPayload; -export const verifyJWT = (token: string, secret: string) => - new Promise((resolve) => { - if (!token) return resolve(null); - verify(token, secret, (err, payload) => { - if (err) { - resolve(null); - } else if (!payload) { - resolve(null); - } else { - resolve(payload as T); - } - }); - }); +export const verifyJWT = (token: string, secret: string) => + verifySharedJwt(token, secret); export const generateBillingToken = (props: AuthenticationTokenPayload) => - sign(props, billingJwtSecret(), { expiresIn: '5d' }); + signJwt(props, billingJwtSecret(), { expiresIn: '5d' }); export const verifyInternalToken = (token: string) => verifyJWT(token, internalJwtSecret()); diff --git a/frontend/providers/costcenter/src/service/backend/region.ts b/frontend/providers/costcenter/src/service/backend/region.ts index da2571989d19..8679a5aa0715 100644 --- a/frontend/providers/costcenter/src/service/backend/region.ts +++ b/frontend/providers/costcenter/src/service/backend/region.ts @@ -51,17 +51,16 @@ export async function makeRegionListAPIClientByHeader(req: NextApiRequest, res: return null; } const regionList = await getRegionList(); - const clientList = regionList?.map((region) => { - const client = makeAPIClient(region, payload); - return client; - }); + const clientList = regionList + ? await Promise.all(regionList.map((region) => makeAPIClient(region, payload))) + : undefined; return clientList; } -export function makeAPIClient( +export async function makeAPIClient( region: Region | undefined | null, payload?: AccessTokenPayload -): AxiosInstance { +): Promise { const baseURL = region?.accountSvc ? `http://${region?.accountSvc}` : Config().costCenter.components.billing.url; @@ -75,7 +74,7 @@ export function makeAPIClient( } }); } - const token = generateBillingToken({ + const token = await generateBillingToken({ userUid: payload.userUid, userId: payload.userId }); @@ -97,6 +96,6 @@ export async function makeAPIClientByHeader(req: NextApiRequest, res: NextApiRes return null; } const region = await getRegionByUid(regionUid); - const client = makeAPIClient(region, payload); + const client = await makeAPIClient(region, payload); return client; } diff --git a/frontend/providers/dbprovider/package.json b/frontend/providers/dbprovider/package.json index 4c059274567e..7d94da41941d 100644 --- a/frontend/providers/dbprovider/package.json +++ b/frontend/providers/dbprovider/package.json @@ -35,7 +35,6 @@ "@tanstack/react-query": "^4.35.3", "@tanstack/react-table": "^8.10.7", "@tanstack/react-virtual": "^3.10.8", - "@types/jsonwebtoken": "^9.0.3", "ansi_up": "^5.2.1", "axios": "^1.5.1", "date-fns": "^3.0.0", @@ -48,7 +47,6 @@ "ini": "^4.1.3", "js-cookie": "^3.0.5", "js-yaml": "^4.1.0", - "jsonwebtoken": "^9.0.2", "jszip": "^3.10.1", "lodash": "^4.17.21", "lucide-react": "^0.511.0", diff --git a/frontend/providers/dbprovider/src/services/backend/auth.ts b/frontend/providers/dbprovider/src/services/backend/auth.ts index 7e5d0731db50..ac269efac50c 100644 --- a/frontend/providers/dbprovider/src/services/backend/auth.ts +++ b/frontend/providers/dbprovider/src/services/backend/auth.ts @@ -1,7 +1,7 @@ import type { NextApiRequest } from 'next'; import { IncomingHttpHeaders } from 'http'; import { ResponseCode } from '@/types/response'; -import { verify } from 'jsonwebtoken'; +import { verifyJwt as verifySharedJwt } from '@sealos/shared/server/jwt'; export const authSession = async (req: NextApiRequest) => { if (!req.headers) return Promise.reject(ResponseCode.UNAUTHORIZED); @@ -32,10 +32,5 @@ export const verifyJwt = async ( token: string, secret: string ): Promise => { - try { - const payload = verify(token, secret) as TPayload; - return payload; - } catch (err) { - return null; - } + return verifySharedJwt(token, secret) as Promise; }; diff --git a/frontend/providers/license/package.json b/frontend/providers/license/package.json index 1b5564d00cda..80b4e111ac29 100644 --- a/frontend/providers/license/package.json +++ b/frontend/providers/license/package.json @@ -20,6 +20,7 @@ "@emotion/styled": "^11.11.0", "@kubernetes/client-node": "^0.18.1", "@next/font": "13.1.6", + "@sealos/shared": "workspace:^", "@sealos/ui": "workspace:^", "@tanstack/react-query": "^4.35.3", "ansi_up": "^5.2.1", @@ -33,7 +34,6 @@ "immer": "^9.0.21", "js-cookie": "^3.0.5", "js-yaml": "^4.1.0", - "jsonwebtoken": "^9.0.3", "jszip": "^3.10.1", "lodash": "^4.17.21", "mongodb": "^5.9.0", @@ -59,7 +59,6 @@ "@svgr/webpack": "^6.5.1", "@types/js-cookie": "^3.0.4", "@types/js-yaml": "^4.0.6", - "@types/jsonwebtoken": "^9.0.3", "@types/lodash": "^4.14.199", "@types/node": "^24", "@types/nprogress": "^0.2.1", diff --git a/frontend/providers/license/src/utils/crypto.ts b/frontend/providers/license/src/utils/crypto.ts index 78cf9b874833..f65b78ef2c66 100644 --- a/frontend/providers/license/src/utils/crypto.ts +++ b/frontend/providers/license/src/utils/crypto.ts @@ -1,6 +1,6 @@ import { LicenseToken } from '@/types'; +import { decodeJwt as decodeSharedJwt } from '@sealos/shared/server/jwt'; import * as crypto from 'crypto'; -import * as jwt from 'jsonwebtoken'; export const hashCrypto = (text: string): string => { const hash = crypto.createHash('sha256'); @@ -9,11 +9,5 @@ export const hashCrypto = (text: string): string => { }; export const decodeJWT = (token: string): T | null => { - try { - const decoded = jwt.decode(token); - return decoded as T; - } catch (error) { - console.error('Invalid token:', error); - return null; - } + return decodeSharedJwt(token) as T | null; }; diff --git a/frontend/providers/objectstorage/package.json b/frontend/providers/objectstorage/package.json index 3d057bc31e51..2c9b9476cca5 100644 --- a/frontend/providers/objectstorage/package.json +++ b/frontend/providers/objectstorage/package.json @@ -39,7 +39,6 @@ "i18next": "^23.11.5", "immer": "^10.0.3", "js-yaml": "^4.1.0", - "jsonwebtoken": "^9.0.2", "jszip": "^3.10.1", "lodash": "^4.17.21", "lucide-react": "^0.544.0", @@ -60,7 +59,6 @@ "@playwright/test": "^1.58.1", "@types/js-cookie": "^3.0.4", "@types/js-yaml": "^4.0.6", - "@types/jsonwebtoken": "^9.0.3", "@types/lodash": "^4.14.199", "@types/node": "^24", "@types/react": "18.3.27", diff --git a/frontend/providers/objectstorage/src/utils/isRealName.ts b/frontend/providers/objectstorage/src/utils/isRealName.ts index ca0f7ad67861..baea65942f5d 100644 --- a/frontend/providers/objectstorage/src/utils/isRealName.ts +++ b/frontend/providers/objectstorage/src/utils/isRealName.ts @@ -1,5 +1,5 @@ -import jwt from 'jsonwebtoken'; import { Config } from '@/config'; +import { signJwt, verifyJwt } from '@sealos/shared/server/jwt'; interface AppTokenPayload { workspaceUid: string; @@ -49,7 +49,11 @@ export async function checkSealosUserIsRealName(token: string): Promise return false; } - const decoded = jwt.verify(token, sealosAppTokenJwtKey) as AppTokenPayload; + const decoded = await verifyJwt(token, sealosAppTokenJwtKey); + if (!decoded) { + console.error('CheckSealosUserIsRealName: Token is invalid'); + return false; + } const now = Math.floor(Date.now() / 1000); if (decoded.exp && decoded.exp < now) { console.error('CheckSealosUserIsRealName: Token expired'); @@ -61,7 +65,7 @@ export async function checkSealosUserIsRealName(token: string): Promise return false; } - const accountServerToken = jwt.sign( + const accountServerToken = await signJwt( { userUid: decoded.userUid, userId: decoded.userId From 990ca315fee203c00a1296ea909e12f636d32aaf Mon Sep 17 00:00:00 2001 From: Nixieboluo Date: Mon, 15 Jun 2026 18:12:20 +0800 Subject: [PATCH 5/5] chore(deps): upgrade @types/node --- frontend/desktop/package.json | 2 +- frontend/packages/client-sdk/package.json | 2 +- frontend/packages/gtm/package.json | 2 +- frontend/packages/mcp-sdk/package.json | 2 +- frontend/packages/shadcn-ui/package.json | 2 +- frontend/packages/shared/package.json | 2 +- frontend/pnpm-lock.yaml | 180 +++++++++--------- frontend/providers/aiproxy/package.json | 2 +- frontend/providers/applaunchpad/package.json | 2 +- frontend/providers/cloudserver/package.json | 2 +- frontend/providers/costcenter/package.json | 2 +- frontend/providers/cronjob/package.json | 2 +- frontend/providers/dbprovider/package.json | 2 +- frontend/providers/invite/package.json | 2 +- frontend/providers/kubepanel/package.json | 2 +- frontend/providers/license/package.json | 2 +- frontend/providers/objectstorage/package.json | 2 +- frontend/providers/template/package.json | 2 +- frontend/providers/terminal/package.json | 2 +- 19 files changed, 108 insertions(+), 108 deletions(-) diff --git a/frontend/desktop/package.json b/frontend/desktop/package.json index 39a4d3e5c1b0..e8ae8d466943 100644 --- a/frontend/desktop/package.json +++ b/frontend/desktop/package.json @@ -102,7 +102,7 @@ "@types/js-yaml": "^4.0.6", "@types/lodash": "^4.14.199", "@types/minio": "^7.1.1", - "@types/node": "^24", + "@types/node": "^25.9.3", "@types/nodemailer": "^6.4.15", "@types/nprogress": "^0.2.1", "@types/react": "18.3.27", diff --git a/frontend/packages/client-sdk/package.json b/frontend/packages/client-sdk/package.json index aa5f5689a6c4..a23d04978612 100644 --- a/frontend/packages/client-sdk/package.json +++ b/frontend/packages/client-sdk/package.json @@ -57,7 +57,7 @@ "@rollup/plugin-typescript": "^11.1.4", "@types/js-cookie": "^3.0.4", "@types/js-yaml": "^4.0.6", - "@types/node": "^24", + "@types/node": "^25.9.3", "@types/uuid": "^9.0.4", "rollup": "2.79.1", "rollup-plugin-copy": "^3.5.0", diff --git a/frontend/packages/gtm/package.json b/frontend/packages/gtm/package.json index 258c660ec0ed..8cfda9b77ca6 100644 --- a/frontend/packages/gtm/package.json +++ b/frontend/packages/gtm/package.json @@ -50,7 +50,7 @@ }, "devDependencies": { "@types/react": "18.3.27", - "@types/node": "^24", + "@types/node": "^25.9.3", "typescript": "^5.0.0" } } diff --git a/frontend/packages/mcp-sdk/package.json b/frontend/packages/mcp-sdk/package.json index 5e16a9cc3d88..e2953e9e6aa7 100644 --- a/frontend/packages/mcp-sdk/package.json +++ b/frontend/packages/mcp-sdk/package.json @@ -33,7 +33,7 @@ "license": "ISC", "devDependencies": { "@rollup/plugin-typescript": "^11.1.4", - "@types/node": "^24", + "@types/node": "^25.9.3", "rollup": "2.79.1", "rollup-plugin-copy": "^3.5.0", "rollup-plugin-dts": "^4.2.3", diff --git a/frontend/packages/shadcn-ui/package.json b/frontend/packages/shadcn-ui/package.json index e500463aa515..0d6261322080 100644 --- a/frontend/packages/shadcn-ui/package.json +++ b/frontend/packages/shadcn-ui/package.json @@ -35,7 +35,7 @@ "tw-animate-css": "^1.3.4" }, "devDependencies": { - "@types/node": "^24", + "@types/node": "^25.9.3", "@types/react": "18.3.27", "@types/react-dom": "18.3.7", "@vitejs/plugin-react": "^5.1.1", diff --git a/frontend/packages/shared/package.json b/frontend/packages/shared/package.json index dc798be70a4f..ffd662d4cd0b 100644 --- a/frontend/packages/shared/package.json +++ b/frontend/packages/shared/package.json @@ -109,7 +109,7 @@ "@chakra-ui/react": "^2.8.1", "@tanstack/react-query": "^4.36.1", "@types/js-yaml": "^4.0.9", - "@types/node": "^24", + "@types/node": "^25.9.3", "@types/react": "18.3.27", "@types/react-dom": "18.3.7", "@vitejs/plugin-react": "^5.1.1", diff --git a/frontend/pnpm-lock.yaml b/frontend/pnpm-lock.yaml index 516284d0a250..da7d9dc0e907 100644 --- a/frontend/pnpm-lock.yaml +++ b/frontend/pnpm-lock.yaml @@ -259,8 +259,8 @@ importers: specifier: ^7.1.1 version: 7.1.1 '@types/node': - specifier: ^24 - version: 24.10.4 + specifier: ^25.9.3 + version: 25.9.3 '@types/nodemailer': specifier: ^6.4.15 version: 6.4.15 @@ -299,7 +299,7 @@ importers: version: 5.1.4(typescript@5.9.3)(vite@7.2.6) vitest: specifier: ^4.0.12 - version: 4.0.15(@types/node@24.10.4)(@vitest/browser-playwright@4.0.15)(@vitest/ui@4.0.12)(jsdom@27.2.0)(sass@1.69.5) + version: 4.0.15(@types/node@25.9.3)(@vitest/browser-playwright@4.0.15)(@vitest/ui@4.0.12)(jsdom@27.2.0)(sass@1.69.5) packages/client-sdk: dependencies: @@ -332,8 +332,8 @@ importers: specifier: ^4.0.6 version: 4.0.9 '@types/node': - specifier: ^24 - version: 24.10.4 + specifier: ^25.9.3 + version: 25.9.3 '@types/uuid': specifier: ^9.0.4 version: 9.0.7 @@ -379,8 +379,8 @@ importers: version: 18.3.1(react@18.3.1) devDependencies: '@types/node': - specifier: ^24 - version: 24.10.4 + specifier: ^25.9.3 + version: 25.9.3 '@types/react': specifier: 18.3.27 version: 18.3.27 @@ -416,8 +416,8 @@ importers: specifier: ^11.1.4 version: 11.1.5(rollup@2.79.1)(tslib@2.6.2)(typescript@5.2.2) '@types/node': - specifier: ^24 - version: 24.10.4 + specifier: ^25.9.3 + version: 25.9.3 rollup: specifier: 2.79.1 version: 2.79.1 @@ -519,8 +519,8 @@ importers: version: 1.3.4 devDependencies: '@types/node': - specifier: ^24 - version: 24.10.4 + specifier: ^25.9.3 + version: 25.9.3 '@types/react': specifier: 18.3.27 version: 18.3.27 @@ -547,7 +547,7 @@ importers: version: 18.3.1(react@18.3.1) vitest: specifier: ^4.0.12 - version: 4.0.15(@types/node@24.10.4)(@vitest/browser-playwright@4.0.15) + version: 4.0.15(@types/node@25.9.3)(@vitest/browser-playwright@4.0.15) packages/shared: dependencies: @@ -568,8 +568,8 @@ importers: specifier: ^4.0.9 version: 4.0.9 '@types/node': - specifier: ^24 - version: 24.10.4 + specifier: ^25.9.3 + version: 25.9.3 '@types/react': specifier: 18.3.27 version: 18.3.27 @@ -629,7 +629,7 @@ importers: version: 5.9.3 vitest: specifier: ^4.0.12 - version: 4.0.15(@types/node@24.10.4)(@vitest/browser-playwright@4.0.15) + version: 4.0.15(@types/node@25.9.3)(@vitest/browser-playwright@4.0.15) zod: specifier: ^4.3.5 version: 4.3.5 @@ -849,8 +849,8 @@ importers: specifier: ^1.58.1 version: 1.59.1 '@types/node': - specifier: ^24 - version: 24.10.4 + specifier: ^25.9.3 + version: 25.9.3 '@types/react': specifier: 18.3.27 version: 18.3.27 @@ -898,7 +898,7 @@ importers: version: 5.1.4(typescript@5.2.2)(vite@7.2.6) vitest: specifier: ^4.0.12 - version: 4.0.15(@types/node@24.10.4)(@vitest/browser-playwright@4.0.15) + version: 4.0.15(@types/node@25.9.3)(@vitest/browser-playwright@4.0.15) providers/applaunchpad: dependencies: @@ -1099,8 +1099,8 @@ importers: specifier: ^4.14.199 version: 4.14.202 '@types/node': - specifier: ^24 - version: 24.10.4 + specifier: ^25.9.3 + version: 25.9.3 '@types/nprogress': specifier: ^0.2.1 version: 0.2.3 @@ -1148,7 +1148,7 @@ importers: version: 5.1.4(typescript@5.2.2)(vite@7.2.6) vitest: specifier: ^4.0.12 - version: 4.0.15(@types/node@24.10.4)(@vitest/browser-playwright@4.0.15)(@vitest/ui@4.0.12)(jsdom@27.2.0)(sass@1.69.5) + version: 4.0.15(@types/node@25.9.3)(@vitest/browser-playwright@4.0.15)(@vitest/ui@4.0.12)(jsdom@27.2.0)(sass@1.69.5) webpack-bundle-analyzer: specifier: ^4.9.1 version: 4.10.1 @@ -1304,8 +1304,8 @@ importers: specifier: ^4.14.199 version: 4.14.202 '@types/node': - specifier: ^24 - version: 24.10.4 + specifier: ^25.9.3 + version: 25.9.3 '@types/nprogress': specifier: ^0.2.1 version: 0.2.3 @@ -1500,8 +1500,8 @@ importers: specifier: ^4.14.199 version: 4.14.202 '@types/node': - specifier: ^24 - version: 24.10.4 + specifier: ^25.9.3 + version: 25.9.3 '@types/nprogress': specifier: ^0.2.1 version: 0.2.3 @@ -1537,7 +1537,7 @@ importers: version: 5.1.4(typescript@5.2.2)(vite@7.2.6) vitest: specifier: ^4.0.12 - version: 4.0.15(@types/node@24.10.4)(@vitest/browser-playwright@4.0.15)(@vitest/ui@4.0.12)(jsdom@27.2.0)(sass@1.69.5) + version: 4.0.15(@types/node@25.9.3)(@vitest/browser-playwright@4.0.15)(@vitest/ui@4.0.12)(jsdom@27.2.0)(sass@1.69.5) providers/cronjob: dependencies: @@ -1687,8 +1687,8 @@ importers: specifier: ^4.14.199 version: 4.14.202 '@types/node': - specifier: ^24 - version: 24.10.4 + specifier: ^25.9.3 + version: 25.9.3 '@types/nprogress': specifier: ^0.2.1 version: 0.2.3 @@ -1724,7 +1724,7 @@ importers: version: 5.1.4(typescript@5.2.2)(vite@7.2.6) vitest: specifier: ^4.0.12 - version: 4.0.15(@types/node@24.10.4)(@vitest/browser-playwright@4.0.15)(@vitest/ui@4.0.12)(jsdom@27.2.0)(sass@1.69.5) + version: 4.0.15(@types/node@25.9.3)(@vitest/browser-playwright@4.0.15)(@vitest/ui@4.0.12)(jsdom@27.2.0)(sass@1.69.5) webpack-bundle-analyzer: specifier: ^4.9.1 version: 4.10.1 @@ -1916,8 +1916,8 @@ importers: specifier: ^1.4.10 version: 1.4.11 '@types/node': - specifier: ^24 - version: 24.10.4 + specifier: ^25.9.3 + version: 25.9.3 '@types/nprogress': specifier: ^0.2.1 version: 0.2.3 @@ -1956,7 +1956,7 @@ importers: version: 5.1.4(typescript@5.2.2)(vite@7.2.6) vitest: specifier: ^4.0.12 - version: 4.0.15(@types/node@24.10.4)(@vitest/browser-playwright@4.0.15)(@vitest/ui@4.0.12)(jsdom@27.2.0)(sass@1.69.5) + version: 4.0.15(@types/node@25.9.3)(@vitest/browser-playwright@4.0.15)(@vitest/ui@4.0.12)(jsdom@27.2.0)(sass@1.69.5) webpack-bundle-analyzer: specifier: ^4.9.1 version: 4.10.1 @@ -2100,8 +2100,8 @@ importers: specifier: ^4.14.199 version: 4.14.202 '@types/node': - specifier: ^24 - version: 24.10.4 + specifier: ^25.9.3 + version: 25.9.3 '@types/nprogress': specifier: ^0.2.1 version: 0.2.3 @@ -2233,8 +2233,8 @@ importers: specifier: ^4.17.21 version: 4.17.21 '@types/node': - specifier: ^24 - version: 24.10.4 + specifier: ^25.9.3 + version: 25.9.3 '@types/nprogress': specifier: ^0.2.3 version: 0.2.3 @@ -2414,8 +2414,8 @@ importers: specifier: ^4.14.199 version: 4.14.202 '@types/node': - specifier: ^24 - version: 24.10.4 + specifier: ^25.9.3 + version: 25.9.3 '@types/nprogress': specifier: ^0.2.1 version: 0.2.3 @@ -2574,8 +2574,8 @@ importers: specifier: ^4.14.199 version: 4.14.202 '@types/node': - specifier: ^24 - version: 24.10.4 + specifier: ^25.9.3 + version: 25.9.3 '@types/react': specifier: 18.3.27 version: 18.3.27 @@ -2602,7 +2602,7 @@ importers: version: 5.1.4(typescript@5.2.2)(vite@7.2.6) vitest: specifier: ^4.0.12 - version: 4.0.15(@types/node@24.10.4)(@vitest/browser-playwright@4.0.15) + version: 4.0.15(@types/node@25.9.3)(@vitest/browser-playwright@4.0.15) providers/template: dependencies: @@ -2815,8 +2815,8 @@ importers: specifier: ^4.14.199 version: 4.14.202 '@types/node': - specifier: ^24 - version: 24.10.4 + specifier: ^25.9.3 + version: 25.9.3 '@types/nprogress': specifier: ^0.2.1 version: 0.2.3 @@ -2861,7 +2861,7 @@ importers: version: 5.1.4(typescript@5.2.2)(vite@7.2.6) vitest: specifier: ^4.0.12 - version: 4.0.15(@types/node@24.10.4)(@vitest/browser-playwright@4.0.15)(@vitest/ui@4.0.12)(jsdom@27.2.0)(sass@1.69.5) + version: 4.0.15(@types/node@25.9.3)(@vitest/browser-playwright@4.0.15)(@vitest/ui@4.0.12)(jsdom@27.2.0)(sass@1.69.5) providers/terminal: dependencies: @@ -2972,8 +2972,8 @@ importers: specifier: ^4.14.199 version: 4.14.202 '@types/node': - specifier: ^24 - version: 24.10.4 + specifier: ^25.9.3 + version: 25.9.3 '@types/react': specifier: 18.3.27 version: 18.3.27 @@ -2997,7 +2997,7 @@ importers: version: 5.1.4(typescript@5.2.2)(vite@7.2.6) vitest: specifier: ^4.0.12 - version: 4.0.15(@types/node@24.10.4)(@vitest/browser-playwright@4.0.15)(@vitest/ui@4.0.12)(jsdom@27.2.0)(sass@1.69.5) + version: 4.0.15(@types/node@25.9.3)(@vitest/browser-playwright@4.0.15)(@vitest/ui@4.0.12)(jsdom@27.2.0)(sass@1.69.5) packages: @@ -13179,14 +13179,14 @@ packages: /@types/base64-stream@1.0.5: resolution: {integrity: sha512-gXuo/a7pQ1EXlR5ksM2MccBLl6UUgAgnzR01r/QoHnkaSNinmzSdaGcCq5NAxn72dZ5A1zNYQIl+J9hPsBgBrA==} dependencies: - '@types/node': 24.10.4 + '@types/node': 25.9.3 dev: true /@types/body-parser@1.19.5: resolution: {integrity: sha512-fB3Zu92ucau0iQ0JMCFQE7b/dv8Ot07NI3KaZIkIUNXq82k4eBAqUaneXfleGY9JWskeS9y+u0nXMyspcuQrCg==} dependencies: '@types/connect': 3.4.38 - '@types/node': 24.10.4 + '@types/node': 25.9.3 /@types/btoa-lite@1.0.2: resolution: {integrity: sha512-ZYbcE2x7yrvNFJiU7xJGrpF/ihpkM7zKgw8bha3LNJSesvTtUNxbpzaT7WXBIryf6jovisrxTBvymxMeLLj1Mg==} @@ -13205,7 +13205,7 @@ packages: /@types/connect@3.4.38: resolution: {integrity: sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==} dependencies: - '@types/node': 24.10.4 + '@types/node': 25.9.3 /@types/d3-array@3.2.2: resolution: {integrity: sha512-hOLWVbm7uRza0BYXpIIW5pxfrKe0W+D5lrFiAEYR+pb6w3N2SwSMaJbXdUfSEv+dT4MfHBLtn5js0LAWaO6otw==} @@ -13306,7 +13306,7 @@ packages: /@types/dns-packet@5.6.5: resolution: {integrity: sha512-qXOC7XLOEe43ehtWJCMnQXvgcIpv6rPmQ1jXT98Ad8A3TB1Ue50jsCbSSSyuazScEuZ/Q026vHbrOTVkmwA+7Q==} dependencies: - '@types/node': 24.10.4 + '@types/node': 25.9.3 dev: true /@types/eslint-scope@3.7.7: @@ -13329,7 +13329,7 @@ packages: /@types/express-serve-static-core@4.17.41: resolution: {integrity: sha512-OaJ7XLaelTgrvlZD8/aa0vvvxZdUmlCn6MtWeB7TkiKW70BQLc9XEPpDLPdbo52ZhXUCrznlWdCHWxJWtdyajA==} dependencies: - '@types/node': 24.10.4 + '@types/node': 25.9.3 '@types/qs': 6.9.10 '@types/range-parser': 1.2.7 '@types/send': 0.17.4 @@ -13345,13 +13345,13 @@ packages: /@types/formidable@3.4.5: resolution: {integrity: sha512-s7YPsNVfnsng5L8sKnG/Gbb2tiwwJTY1conOkJzTMRvJAlLFW1nEua+ADsJQu8N1c0oTHx9+d5nqg10WuT9gHQ==} dependencies: - '@types/node': 24.10.4 + '@types/node': 25.9.3 dev: true /@types/fs-extra@8.1.5: resolution: {integrity: sha512-0dzKcwO+S8s2kuF5Z9oUWatQJj5Uq/iqphEtE3GQJVRRYm/tD1LglU2UnXi2A8jLq5umkGouOXOR9y0n613ZwQ==} dependencies: - '@types/node': 24.10.4 + '@types/node': 25.9.3 dev: true /@types/geojson@7946.0.14: @@ -13362,7 +13362,7 @@ packages: resolution: {integrity: sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA==} dependencies: '@types/minimatch': 5.1.2 - '@types/node': 24.10.4 + '@types/node': 25.9.3 dev: true /@types/har-format@1.2.16: @@ -13411,7 +13411,7 @@ packages: /@types/jsonwebtoken@9.0.5: resolution: {integrity: sha512-VRLSGzik+Unrup6BsouBeHsf4d1hOEgYWTm/7Nmw1sXoN1+tRly/Gy/po3yeahnP4jfnQWWAhQAqcNfH7ngOkA==} dependencies: - '@types/node': 24.10.4 + '@types/node': 25.9.3 dev: false /@types/lodash.mergewith@4.6.7: @@ -13467,7 +13467,7 @@ packages: /@types/node-fetch@2.6.12: resolution: {integrity: sha512-8nneRWKCg3rMtF69nLQJnOYUcbafYeFSjqkw3jCRLsqkWFlHaoQrr5mXmofFGOx3DKn7UfmBMyov8ySvLRVldA==} dependencies: - '@types/node': 24.10.4 + '@types/node': 25.9.3 form-data: 4.0.4 dev: false @@ -13498,15 +13498,15 @@ packages: undici-types: 6.21.0 dev: false - /@types/node@24.10.4: - resolution: {integrity: sha512-vnDVpYPMzs4wunl27jHrfmwojOGKya0xyM3sH+UE5iv5uPS6vX7UIoh6m+vQc5LGBq52HBKPIn/zcSZVzeDEZg==} + /@types/node@25.9.3: + resolution: {integrity: sha512-603BddQMv3pUcr4U2dhujk83N2tTDVr/34wII2B6bJy6g+8WD6yUb11jszNs0gdi4PesVWl7ABt8nYMVpnLUcg==} dependencies: - undici-types: 7.16.0 + undici-types: 7.24.6 /@types/nodemailer@6.4.15: resolution: {integrity: sha512-0EBJxawVNjPkng1zm2vopRctuWVCxk34JcIlRuXSf54habUWdz1FB7wHDqOqvDa8Mtpt0Q3LTXQkAs2LNyK5jQ==} dependencies: - '@types/node': 24.10.4 + '@types/node': 25.9.3 dev: true /@types/nprogress@0.2.3: @@ -13516,7 +13516,7 @@ packages: /@types/papaparse@5.3.15: resolution: {integrity: sha512-JHe6vF6x/8Z85nCX4yFdDslN11d+1pr12E526X8WAfhadOeaOTx5AuIkvDKIBopfvlzpzkdMx4YyvSKCM9oqtw==} dependencies: - '@types/node': 24.10.4 + '@types/node': 25.9.3 dev: true /@types/parse-json@4.0.2: @@ -13568,7 +13568,7 @@ packages: resolution: {integrity: sha512-G3sY+NpsA9jnwm0ixhAFQSJ3Q9JkpLZpJbI3GMv0mIAT0y3mRabYeINzal5WOChIiaTEGQYlHOKgkaM9EisWHw==} dependencies: '@types/caseless': 0.12.5 - '@types/node': 24.10.4 + '@types/node': 25.9.3 '@types/tough-cookie': 4.0.5 form-data: 2.5.1 @@ -13584,19 +13584,19 @@ packages: resolution: {integrity: sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA==} dependencies: '@types/mime': 1.3.5 - '@types/node': 24.10.4 + '@types/node': 25.9.3 /@types/serve-static@1.15.5: resolution: {integrity: sha512-PDRk21MnK70hja/YF8AHfC7yIsiQHn1rcXx7ijCFBX/k+XQJhQT/gw3xekXKJvx+5SXaMMS8oqQy09Mzvz2TuQ==} dependencies: '@types/http-errors': 2.0.4 '@types/mime': 3.0.4 - '@types/node': 24.10.4 + '@types/node': 25.9.3 /@types/stream-buffers@3.0.7: resolution: {integrity: sha512-azOCy05sXVXrO+qklf0c/B07H/oHaIuDDAiHPVwlk3A9Ek+ksHyTeMajLZl3r76FxpPpxem//4Te61G1iW3Giw==} dependencies: - '@types/node': 24.10.4 + '@types/node': 25.9.3 dev: false /@types/stylis@4.2.5: @@ -13616,7 +13616,7 @@ packages: /@types/tar@6.1.13: resolution: {integrity: sha512-IznnlmU5f4WcGTh2ltRu/Ijpmk8wiWXfF0VA4s+HPjHZgvFggk1YaIkbo5krX/zUCzWF8N/l4+W/LNxnvAJ8nw==} dependencies: - '@types/node': 24.10.4 + '@types/node': 25.9.3 minipass: 4.2.8 dev: false @@ -13664,25 +13664,25 @@ packages: /@types/whatwg-url@8.2.2: resolution: {integrity: sha512-FtQu10RWgn3D9U4aazdwIE2yzphmTJREDqNdODHrbrZmmMqI0vMheC/6NE/J1Yveaj8H+ela+YwWTjq5PGmuhA==} dependencies: - '@types/node': 24.10.4 + '@types/node': 25.9.3 '@types/webidl-conversions': 7.0.3 dev: false /@types/ws@6.0.4: resolution: {integrity: sha512-PpPrX7SZW9re6+Ha8ojZG4Se8AZXgf0GK6zmfqEuCsY49LFDNXO3SByp44X3dFEqtB73lkCDAdUazhAjVPiNwg==} dependencies: - '@types/node': 24.10.4 + '@types/node': 25.9.3 dev: false /@types/ws@8.5.10: resolution: {integrity: sha512-vmQSUcfalpIq0R9q7uTo2lXs6eGIpt9wtnLdMv9LVpIjCA/+ufZRozlVoVelIYixx1ugCBKDhn89vnsEGOCx9A==} dependencies: - '@types/node': 24.10.4 + '@types/node': 25.9.3 /@types/xml2js@0.4.14: resolution: {integrity: sha512-4YnrRemBShWRO2QjvUin8ESA41rH+9nQGLUGZV/1IDhi3SL9OhdpNC/MrulTWuptXKwhx/aDxE7toV0f/ypIXQ==} dependencies: - '@types/node': 24.10.4 + '@types/node': 25.9.3 dev: false /@typescript-eslint/eslint-plugin@6.21.0(@typescript-eslint/parser@6.21.0)(eslint@8.33.0)(typescript@5.2.2): @@ -14225,7 +14225,7 @@ packages: '@rolldown/pluginutils': 1.0.0-beta.47 '@types/babel__core': 7.20.5 react-refresh: 0.18.0 - vite: 7.2.6(@types/node@24.10.4)(sass@1.69.5) + vite: 7.2.6(@types/node@25.9.3)(sass@1.69.5) transitivePeerDependencies: - supports-color dev: true @@ -14240,7 +14240,7 @@ packages: '@vitest/mocker': 4.0.15(vite@7.2.6) playwright: 1.59.1 tinyrainbow: 3.0.3 - vitest: 4.0.15(@types/node@24.10.4)(@vitest/browser-playwright@4.0.15)(@vitest/ui@4.0.12)(jsdom@27.2.0)(sass@1.69.5) + vitest: 4.0.15(@types/node@25.9.3)(@vitest/browser-playwright@4.0.15)(@vitest/ui@4.0.12)(jsdom@27.2.0)(sass@1.69.5) transitivePeerDependencies: - bufferutil - msw @@ -14260,7 +14260,7 @@ packages: pngjs: 7.0.0 sirv: 3.0.2 tinyrainbow: 3.0.3 - vitest: 4.0.15(@types/node@24.10.4)(@vitest/browser-playwright@4.0.15)(@vitest/ui@4.0.12)(jsdom@27.2.0)(sass@1.69.5) + vitest: 4.0.15(@types/node@25.9.3)(@vitest/browser-playwright@4.0.15)(@vitest/ui@4.0.12)(jsdom@27.2.0)(sass@1.69.5) ws: 8.18.3 transitivePeerDependencies: - bufferutil @@ -14294,7 +14294,7 @@ packages: '@vitest/spy': 4.0.15 estree-walker: 3.0.3 magic-string: 0.30.21 - vite: 7.2.6(@types/node@24.10.4)(sass@1.69.5) + vite: 7.2.6(@types/node@25.9.3)(sass@1.69.5) dev: true /@vitest/pretty-format@4.0.12: @@ -14340,7 +14340,7 @@ packages: sirv: 3.0.2 tinyglobby: 0.2.15 tinyrainbow: 3.0.3 - vitest: 4.0.15(@types/node@24.10.4)(@vitest/browser-playwright@4.0.15)(@vitest/ui@4.0.12)(jsdom@27.2.0)(sass@1.69.5) + vitest: 4.0.15(@types/node@25.9.3)(@vitest/browser-playwright@4.0.15)(@vitest/ui@4.0.12)(jsdom@27.2.0)(sass@1.69.5) dev: true /@vitest/utils@4.0.12: @@ -21219,7 +21219,7 @@ packages: resolution: {integrity: sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ==} engines: {node: '>= 10.13.0'} dependencies: - '@types/node': 24.10.4 + '@types/node': 25.9.3 merge-stream: 2.0.0 supports-color: 7.2.0 dev: true @@ -21228,7 +21228,7 @@ packages: resolution: {integrity: sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==} engines: {node: '>= 10.13.0'} dependencies: - '@types/node': 24.10.4 + '@types/node': 25.9.3 merge-stream: 2.0.0 supports-color: 8.1.1 dev: false @@ -27560,8 +27560,8 @@ packages: resolution: {integrity: sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==} dev: false - /undici-types@7.16.0: - resolution: {integrity: sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw==} + /undici-types@7.24.6: + resolution: {integrity: sha512-WRNW+sJgj5OBN4/0JpHFqtqzhpbnV0GuB+OozA9gCL7a993SmU+1JBZCzLNxYsbMfIeDL+lTsphD5jN5N+n0zg==} /unhead@1.11.20: resolution: {integrity: sha512-3AsNQC0pjwlLqEYHLjtichGWankK8yqmocReITecmpB1H0aOabeESueyy+8X1gyJx4ftZVwo9hqQ4O3fPWffCA==} @@ -27981,7 +27981,7 @@ packages: debug: 4.4.3 globrex: 0.1.2 tsconfck: 3.1.6(typescript@5.2.2) - vite: 7.2.6(@types/node@24.10.4)(sass@1.69.5) + vite: 7.2.6(@types/node@25.9.3)(sass@1.69.5) transitivePeerDependencies: - supports-color - typescript @@ -27998,13 +27998,13 @@ packages: debug: 4.4.3 globrex: 0.1.2 tsconfck: 3.1.6(typescript@5.9.3) - vite: 7.2.6(@types/node@24.10.4)(sass@1.69.5) + vite: 7.2.6(@types/node@25.9.3)(sass@1.69.5) transitivePeerDependencies: - supports-color - typescript dev: true - /vite@7.2.6(@types/node@24.10.4)(sass@1.69.5): + /vite@7.2.6(@types/node@25.9.3)(sass@1.69.5): resolution: {integrity: sha512-tI2l/nFHC5rLh7+5+o7QjKjSR04ivXDF4jcgV0f/bTQ+OJiITy5S6gaynVsEM+7RqzufMnVbIon6Sr5x1SDYaQ==} engines: {node: ^20.19.0 || >=22.12.0} hasBin: true @@ -28044,7 +28044,7 @@ packages: yaml: optional: true dependencies: - '@types/node': 24.10.4 + '@types/node': 25.9.3 esbuild: 0.25.12 fdir: 6.5.0(picomatch@4.0.3) picomatch: 4.0.3 @@ -28056,7 +28056,7 @@ packages: fsevents: 2.3.3 dev: true - /vitest@4.0.15(@types/node@24.10.4)(@vitest/browser-playwright@4.0.15): + /vitest@4.0.15(@types/node@25.9.3)(@vitest/browser-playwright@4.0.15): resolution: {integrity: sha512-n1RxDp8UJm6N0IbJLQo+yzLZ2sQCDyl1o0LeugbPWf8+8Fttp29GghsQBjYJVmWq3gBFfe9Hs1spR44vovn2wA==} engines: {node: ^20.0.0 || ^22.0.0 || >=24.0.0} hasBin: true @@ -28090,7 +28090,7 @@ packages: jsdom: optional: true dependencies: - '@types/node': 24.10.4 + '@types/node': 25.9.3 '@vitest/browser-playwright': 4.0.15(playwright@1.59.1)(vite@7.2.6)(vitest@4.0.15) '@vitest/expect': 4.0.15 '@vitest/mocker': 4.0.15(vite@7.2.6) @@ -28110,7 +28110,7 @@ packages: tinyexec: 1.0.2 tinyglobby: 0.2.15 tinyrainbow: 3.0.3 - vite: 7.2.6(@types/node@24.10.4)(sass@1.69.5) + vite: 7.2.6(@types/node@25.9.3)(sass@1.69.5) why-is-node-running: 2.3.0 transitivePeerDependencies: - jiti @@ -28126,7 +28126,7 @@ packages: - yaml dev: true - /vitest@4.0.15(@types/node@24.10.4)(@vitest/browser-playwright@4.0.15)(@vitest/ui@4.0.12)(jsdom@27.2.0)(sass@1.69.5): + /vitest@4.0.15(@types/node@25.9.3)(@vitest/browser-playwright@4.0.15)(@vitest/ui@4.0.12)(jsdom@27.2.0)(sass@1.69.5): resolution: {integrity: sha512-n1RxDp8UJm6N0IbJLQo+yzLZ2sQCDyl1o0LeugbPWf8+8Fttp29GghsQBjYJVmWq3gBFfe9Hs1spR44vovn2wA==} engines: {node: ^20.0.0 || ^22.0.0 || >=24.0.0} hasBin: true @@ -28160,7 +28160,7 @@ packages: jsdom: optional: true dependencies: - '@types/node': 24.10.4 + '@types/node': 25.9.3 '@vitest/browser-playwright': 4.0.15(playwright@1.59.1)(vite@7.2.6)(vitest@4.0.15) '@vitest/expect': 4.0.15 '@vitest/mocker': 4.0.15(vite@7.2.6) @@ -28182,7 +28182,7 @@ packages: tinyexec: 1.0.2 tinyglobby: 0.2.15 tinyrainbow: 3.0.3 - vite: 7.2.6(@types/node@24.10.4)(sass@1.69.5) + vite: 7.2.6(@types/node@25.9.3)(sass@1.69.5) why-is-node-running: 2.3.0 transitivePeerDependencies: - jiti diff --git a/frontend/providers/aiproxy/package.json b/frontend/providers/aiproxy/package.json index 3d365384bd75..93963ecad379 100644 --- a/frontend/providers/aiproxy/package.json +++ b/frontend/providers/aiproxy/package.json @@ -63,7 +63,7 @@ }, "devDependencies": { "@playwright/test": "^1.58.1", - "@types/node": "^24", + "@types/node": "^25.9.3", "@types/react": "18.3.27", "@types/react-dom": "18.3.7", "@types/react-syntax-highlighter": "^15.5.7", diff --git a/frontend/providers/applaunchpad/package.json b/frontend/providers/applaunchpad/package.json index e9663bb0cbc7..a9afec3fb982 100644 --- a/frontend/providers/applaunchpad/package.json +++ b/frontend/providers/applaunchpad/package.json @@ -89,7 +89,7 @@ "@types/js-cookie": "^3.0.4", "@types/js-yaml": "^4.0.6", "@types/lodash": "^4.14.199", - "@types/node": "^24", + "@types/node": "^25.9.3", "@types/nprogress": "^0.2.1", "@types/react": "18.3.27", "@types/react-dom": "18.3.7", diff --git a/frontend/providers/cloudserver/package.json b/frontend/providers/cloudserver/package.json index 959f0b18b0c8..8c85eccad2e6 100644 --- a/frontend/providers/cloudserver/package.json +++ b/frontend/providers/cloudserver/package.json @@ -59,7 +59,7 @@ "@types/js-cookie": "^3.0.4", "@types/js-yaml": "^4.0.6", "@types/lodash": "^4.14.199", - "@types/node": "^24", + "@types/node": "^25.9.3", "@types/nprogress": "^0.2.1", "@types/react": "18.3.27", "@types/react-dom": "18.3.7", diff --git a/frontend/providers/costcenter/package.json b/frontend/providers/costcenter/package.json index 2decf471e516..0efe8b1a3528 100644 --- a/frontend/providers/costcenter/package.json +++ b/frontend/providers/costcenter/package.json @@ -71,7 +71,7 @@ "@types/js-cookie": "^3.0.4", "@types/js-yaml": "^4.0.6", "@types/lodash": "^4.14.199", - "@types/node": "^24", + "@types/node": "^25.9.3", "@types/nprogress": "^0.2.1", "@types/react": "18.3.27", "@types/react-dom": "18.3.7", diff --git a/frontend/providers/cronjob/package.json b/frontend/providers/cronjob/package.json index 0d98882e73dd..d025bfb254ca 100644 --- a/frontend/providers/cronjob/package.json +++ b/frontend/providers/cronjob/package.json @@ -66,7 +66,7 @@ "@types/js-cookie": "^3.0.4", "@types/js-yaml": "^4.0.6", "@types/lodash": "^4.14.199", - "@types/node": "^24", + "@types/node": "^25.9.3", "@types/nprogress": "^0.2.1", "@types/react": "18.3.27", "@types/react-dom": "18.3.7", diff --git a/frontend/providers/dbprovider/package.json b/frontend/providers/dbprovider/package.json index 7d94da41941d..57f6b7988022 100644 --- a/frontend/providers/dbprovider/package.json +++ b/frontend/providers/dbprovider/package.json @@ -81,7 +81,7 @@ "@types/js-yaml": "^4.0.6", "@types/lodash": "^4.14.199", "@types/multer": "^1.4.10", - "@types/node": "^24", + "@types/node": "^25.9.3", "@types/nprogress": "^0.2.1", "@types/papaparse": "^5.3.15", "@types/react": "18.3.27", diff --git a/frontend/providers/invite/package.json b/frontend/providers/invite/package.json index 39ebf7928e3f..0cf162217f9c 100644 --- a/frontend/providers/invite/package.json +++ b/frontend/providers/invite/package.json @@ -56,7 +56,7 @@ "@types/js-cookie": "^3.0.4", "@types/js-yaml": "^4.0.6", "@types/lodash": "^4.14.199", - "@types/node": "^24", + "@types/node": "^25.9.3", "@types/nprogress": "^0.2.1", "@types/react": "18.3.27", "@types/react-dom": "18.3.7", diff --git a/frontend/providers/kubepanel/package.json b/frontend/providers/kubepanel/package.json index ca0a07541f4a..2b338bbb7565 100644 --- a/frontend/providers/kubepanel/package.json +++ b/frontend/providers/kubepanel/package.json @@ -45,7 +45,7 @@ "@tailwindcss/postcss": "^4.1.17", "@types/js-yaml": "^4.0.9", "@types/lodash": "^4.17.21", - "@types/node": "^24", + "@types/node": "^25.9.3", "@types/nprogress": "^0.2.3", "@types/react": "18.3.27", "autoprefixer": "^10.4.22", diff --git a/frontend/providers/license/package.json b/frontend/providers/license/package.json index 80b4e111ac29..6d29664bb392 100644 --- a/frontend/providers/license/package.json +++ b/frontend/providers/license/package.json @@ -60,7 +60,7 @@ "@types/js-cookie": "^3.0.4", "@types/js-yaml": "^4.0.6", "@types/lodash": "^4.14.199", - "@types/node": "^24", + "@types/node": "^25.9.3", "@types/nprogress": "^0.2.1", "@types/react": "18.3.27", "@types/react-dom": "18.3.7", diff --git a/frontend/providers/objectstorage/package.json b/frontend/providers/objectstorage/package.json index 2c9b9476cca5..23c3087b187b 100644 --- a/frontend/providers/objectstorage/package.json +++ b/frontend/providers/objectstorage/package.json @@ -60,7 +60,7 @@ "@types/js-cookie": "^3.0.4", "@types/js-yaml": "^4.0.6", "@types/lodash": "^4.14.199", - "@types/node": "^24", + "@types/node": "^25.9.3", "@types/react": "18.3.27", "@types/react-dom": "18.3.7", "@vitejs/plugin-react": "^5.1.1", diff --git a/frontend/providers/template/package.json b/frontend/providers/template/package.json index e221a9b16bd2..ebf7610082a2 100644 --- a/frontend/providers/template/package.json +++ b/frontend/providers/template/package.json @@ -85,7 +85,7 @@ "@types/js-cookie": "^3.0.4", "@types/js-yaml": "^4.0.6", "@types/lodash": "^4.14.199", - "@types/node": "^24", + "@types/node": "^25.9.3", "@types/nprogress": "^0.2.1", "@types/pluralize": "^0.0.33", "@types/react": "18.3.27", diff --git a/frontend/providers/terminal/package.json b/frontend/providers/terminal/package.json index 96db3d4eaed1..e6e3529dca15 100644 --- a/frontend/providers/terminal/package.json +++ b/frontend/providers/terminal/package.json @@ -51,7 +51,7 @@ "@playwright/test": "^1.58.1", "@types/js-yaml": "^4.0.6", "@types/lodash": "^4.14.199", - "@types/node": "^24", + "@types/node": "^25.9.3", "@types/react": "18.3.27", "@types/react-dom": "18.3.7", "@vitejs/plugin-react": "^5.1.1",