diff --git a/CHANGELOG.md b/CHANGELOG.md
index 5c39b97..44ae28b 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,17 +1,16 @@
+
# Changelog
# [1.6.0](https://github.com/perfect-panel/ppanel-web/compare/v1.5.4...v1.6.0) (2025-10-28)
-
### ✨ Features
-* Add server installation dialog and commands ([4429c9d](https://github.com/perfect-panel/ppanel-web/commit/4429c9d))
-
+- Add server installation dialog and commands ([4429c9d](https://github.com/perfect-panel/ppanel-web/commit/4429c9d))
### 🐛 Bug Fixes
-* Add typeRoots configuration to ensure type definitions are resolved correctly ([ad60ea9](https://github.com/perfect-panel/ppanel-web/commit/ad60ea9))
+- Add typeRoots configuration to ensure type definitions are resolved correctly ([ad60ea9](https://github.com/perfect-panel/ppanel-web/commit/ad60ea9))
diff --git a/apps/admin/app/dashboard/servers/form-schema/fields.ts b/apps/admin/app/dashboard/servers/form-schema/fields.ts
index e185a8d..7b80a0f 100644
--- a/apps/admin/app/dashboard/servers/form-schema/fields.ts
+++ b/apps/admin/app/dashboard/servers/form-schema/fields.ts
@@ -444,7 +444,16 @@ export const PROTOCOL_FIELDS: Record = {
placeholder: (t) => t('encryption_private_key_placeholder'),
group: 'encryption',
generate: {
- function: generateMLKEM768KeyPair,
+ functions: [
+ {
+ label: (t) => t('generate_standard_encryption_key'),
+ function: generateRealityKeyPair,
+ },
+ {
+ label: (t) => t('generate_quantum_resistant_key'),
+ function: generateMLKEM768KeyPair,
+ },
+ ],
updateFields: {
encryption_private_key: 'privateKey',
encryption_password: 'publicKey',
diff --git a/apps/admin/app/dashboard/servers/form-schema/types.ts b/apps/admin/app/dashboard/servers/form-schema/types.ts
index 36911ad..501e342 100644
--- a/apps/admin/app/dashboard/servers/form-schema/types.ts
+++ b/apps/admin/app/dashboard/servers/form-schema/types.ts
@@ -12,7 +12,11 @@ export type FieldConfig = {
step?: number;
suffix?: string;
generate?: {
- function: () => Promise> | string | Record;
+ function?: () => Promise> | string | Record;
+ functions?: {
+ label: string | ((t: (key: string) => string, protocol: any) => string);
+ function: () => Promise> | string | Record;
+ }[];
updateFields?: Record;
};
condition?: (protocol: any, values: any) => boolean;
diff --git a/apps/admin/app/dashboard/servers/generate/x25519.ts b/apps/admin/app/dashboard/servers/generate/x25519.ts
index a5a265f..1b68e3b 100644
--- a/apps/admin/app/dashboard/servers/generate/x25519.ts
+++ b/apps/admin/app/dashboard/servers/generate/x25519.ts
@@ -1,11 +1,11 @@
-import * as x25519 from '@noble/ed25519';
+import { x25519 } from '@noble/curves/ed25519.js';
import { toB64Url } from './util';
/**
* Generate a Reality key pair
* @returns An object containing the private and public keys in base64url format
*/
-export async function generateRealityKeyPair() {
- const { secretKey, publicKey } = await x25519.keygenAsync();
+export function generateRealityKeyPair() {
+ const { secretKey, publicKey } = x25519.keygen();
return { privateKey: toB64Url(secretKey), publicKey: toB64Url(publicKey) };
}
diff --git a/apps/admin/app/dashboard/servers/page.tsx b/apps/admin/app/dashboard/servers/page.tsx
index 6a06bfd..996efe8 100644
--- a/apps/admin/app/dashboard/servers/page.tsx
+++ b/apps/admin/app/dashboard/servers/page.tsx
@@ -61,7 +61,6 @@ export default function ServersPage() {
const { fetchServers } = useServer();
const [loading, setLoading] = useState(false);
- const [migrating, setMigrating] = useState(false);
const ref = useRef(null);
return (
diff --git a/apps/admin/app/dashboard/servers/server-form.tsx b/apps/admin/app/dashboard/servers/server-form.tsx
index 4857462..c6dcbcf 100644
--- a/apps/admin/app/dashboard/servers/server-form.tsx
+++ b/apps/admin/app/dashboard/servers/server-form.tsx
@@ -10,6 +10,12 @@ import {
} from '@workspace/ui/components/accordion';
import { Badge } from '@workspace/ui/components/badge';
import { Button } from '@workspace/ui/components/button';
+import {
+ DropdownMenu,
+ DropdownMenuContent,
+ DropdownMenuItem,
+ DropdownMenuTrigger,
+} from '@workspace/ui/components/dropdown-menu';
import {
Form,
FormControl,
@@ -99,29 +105,68 @@ function DynamicField({
onValueChange={(v) => fieldProps.onChange(v)}
suffix={
field.generate ? (
-
+ ) : null
) : (
field.suffix
)
diff --git a/apps/admin/locales/cs-CZ/servers.json b/apps/admin/locales/cs-CZ/servers.json
index b9f9615..9fdeba7 100644
--- a/apps/admin/locales/cs-CZ/servers.json
+++ b/apps/admin/locales/cs-CZ/servers.json
@@ -50,6 +50,8 @@
"expired": "Vypršelo",
"extra": "Další konfigurace",
"flow": "Tok",
+ "generate_quantum_resistant_key": "Generovat kvantově odolný klíč",
+ "generate_standard_encryption_key": "Generovat standardní šifrovací klíč",
"hop_interval": "Interval skoku",
"hop_ports": "Porty skoku",
"hop_ports_placeholder": "např. 1-65535",
diff --git a/apps/admin/locales/de-DE/servers.json b/apps/admin/locales/de-DE/servers.json
index 47345c6..9bd50d0 100644
--- a/apps/admin/locales/de-DE/servers.json
+++ b/apps/admin/locales/de-DE/servers.json
@@ -50,6 +50,8 @@
"expired": "Abgelaufen",
"extra": "Zusätzliche Konfiguration",
"flow": "Fluss",
+ "generate_quantum_resistant_key": "Quantenresistenten Schlüssel generieren",
+ "generate_standard_encryption_key": "Standard-Verschlüsselungsschlüssel generieren",
"hop_interval": "Hop-Intervall",
"hop_ports": "Hop-Ports",
"hop_ports_placeholder": "z.B. 1-65535",
diff --git a/apps/admin/locales/en-US/servers.json b/apps/admin/locales/en-US/servers.json
index 5f4403f..e21a292 100644
--- a/apps/admin/locales/en-US/servers.json
+++ b/apps/admin/locales/en-US/servers.json
@@ -50,6 +50,8 @@
"expired": "Expired",
"extra": "Extra Configuration",
"flow": "Flow",
+ "generate_quantum_resistant_key": "Generate Quantum-Resistant Key",
+ "generate_standard_encryption_key": "Generate Standard Encryption Key",
"hop_interval": "Hop interval",
"hop_ports": "Hop ports",
"hop_ports_placeholder": "e.g. 1-65535",
diff --git a/apps/admin/locales/es-ES/servers.json b/apps/admin/locales/es-ES/servers.json
index 885c503..7c35a0e 100644
--- a/apps/admin/locales/es-ES/servers.json
+++ b/apps/admin/locales/es-ES/servers.json
@@ -50,6 +50,8 @@
"expired": "Expirado",
"extra": "Configuración Extra",
"flow": "Flujo",
+ "generate_quantum_resistant_key": "Generar clave resistente a cuánticos",
+ "generate_standard_encryption_key": "Generar clave de cifrado estándar",
"hop_interval": "Intervalo de salto",
"hop_ports": "Puertos de salto",
"hop_ports_placeholder": "p. ej. 1-65535",
diff --git a/apps/admin/locales/es-MX/servers.json b/apps/admin/locales/es-MX/servers.json
index b37aec1..6f06c1b 100644
--- a/apps/admin/locales/es-MX/servers.json
+++ b/apps/admin/locales/es-MX/servers.json
@@ -50,6 +50,8 @@
"expired": "Expirado",
"extra": "Configuración Extra",
"flow": "Flujo",
+ "generate_quantum_resistant_key": "Generar clave resistente a cuánticos",
+ "generate_standard_encryption_key": "Generar clave de cifrado estándar",
"hop_interval": "Intervalo de salto",
"hop_ports": "Puertos de salto",
"hop_ports_placeholder": "p. ej. 1-65535",
diff --git a/apps/admin/locales/fa-IR/servers.json b/apps/admin/locales/fa-IR/servers.json
index 9935af5..786781e 100644
--- a/apps/admin/locales/fa-IR/servers.json
+++ b/apps/admin/locales/fa-IR/servers.json
@@ -50,6 +50,8 @@
"expired": "منقضی شده",
"extra": "پیکربندی اضافی",
"flow": "جریان",
+ "generate_quantum_resistant_key": "تولید کلید مقاوم در برابر کوانتوم",
+ "generate_standard_encryption_key": "تولید کلید رمزگذاری استاندارد",
"hop_interval": "فاصله پرش",
"hop_ports": "پورتهای پرش",
"hop_ports_placeholder": "مثلاً 1-65535",
diff --git a/apps/admin/locales/fi-FI/servers.json b/apps/admin/locales/fi-FI/servers.json
index b01c43b..0e0f402 100644
--- a/apps/admin/locales/fi-FI/servers.json
+++ b/apps/admin/locales/fi-FI/servers.json
@@ -50,6 +50,8 @@
"expired": "Vanhentunut",
"extra": "Lisäasetukset",
"flow": "Virta",
+ "generate_quantum_resistant_key": "Luo kvanttikestävä avain",
+ "generate_standard_encryption_key": "Luo standardi salausavain",
"hop_interval": "Hyppyvälit",
"hop_ports": "Hyppysatamat",
"hop_ports_placeholder": "esim. 1-65535",
diff --git a/apps/admin/locales/fr-FR/servers.json b/apps/admin/locales/fr-FR/servers.json
index 37bb6cb..27dc077 100644
--- a/apps/admin/locales/fr-FR/servers.json
+++ b/apps/admin/locales/fr-FR/servers.json
@@ -50,6 +50,8 @@
"expired": "Expiré",
"extra": "Configuration supplémentaire",
"flow": "Flux",
+ "generate_quantum_resistant_key": "Générer une clé résistante aux quantiques",
+ "generate_standard_encryption_key": "Générer une clé de chiffrement standard",
"hop_interval": "Intervalle de saut",
"hop_ports": "Ports de saut",
"hop_ports_placeholder": "ex. 1-65535",
diff --git a/apps/admin/locales/hi-IN/servers.json b/apps/admin/locales/hi-IN/servers.json
index 3c82b06..ee69691 100644
--- a/apps/admin/locales/hi-IN/servers.json
+++ b/apps/admin/locales/hi-IN/servers.json
@@ -50,6 +50,8 @@
"expired": "समय समाप्त",
"extra": "अतिरिक्त कॉन्फ़िगरेशन",
"flow": "प्रवाह",
+ "generate_quantum_resistant_key": "क्वांटम-प्रतिरोधी कुंजी उत्पन्न करें",
+ "generate_standard_encryption_key": "मानक एन्क्रिप्शन कुंजी उत्पन्न करें",
"hop_interval": "हॉप अंतराल",
"hop_ports": "हॉप पोर्ट",
"hop_ports_placeholder": "जैसे 1-65535",
diff --git a/apps/admin/locales/hu-HU/servers.json b/apps/admin/locales/hu-HU/servers.json
index 71a24f7..d58fe5d 100644
--- a/apps/admin/locales/hu-HU/servers.json
+++ b/apps/admin/locales/hu-HU/servers.json
@@ -50,6 +50,8 @@
"expired": "Lejárt",
"extra": "További konfiguráció",
"flow": "Forgalom",
+ "generate_quantum_resistant_key": "Kvantumálló kulcs generálása",
+ "generate_standard_encryption_key": "Szabványos titkosítási kulcs generálása",
"hop_interval": "Ugrás időköz",
"hop_ports": "Ugrás portok",
"hop_ports_placeholder": "pl. 1-65535",
diff --git a/apps/admin/locales/ja-JP/servers.json b/apps/admin/locales/ja-JP/servers.json
index bf5acaf..d6e617d 100644
--- a/apps/admin/locales/ja-JP/servers.json
+++ b/apps/admin/locales/ja-JP/servers.json
@@ -50,6 +50,8 @@
"expired": "期限切れ",
"extra": "追加設定",
"flow": "フロー",
+ "generate_quantum_resistant_key": "量子耐性キーを生成",
+ "generate_standard_encryption_key": "標準暗号化キーを生成",
"hop_interval": "ホップ間隔",
"hop_ports": "ホップポート",
"hop_ports_placeholder": "例: 1-65535",
diff --git a/apps/admin/locales/ko-KR/servers.json b/apps/admin/locales/ko-KR/servers.json
index 5ed2906..8a01750 100644
--- a/apps/admin/locales/ko-KR/servers.json
+++ b/apps/admin/locales/ko-KR/servers.json
@@ -50,6 +50,8 @@
"expired": "만료됨",
"extra": "추가 구성",
"flow": "흐름",
+ "generate_quantum_resistant_key": "양자 저항 키 생성",
+ "generate_standard_encryption_key": "표준 암호화 키 생성",
"hop_interval": "홉 간격",
"hop_ports": "홉 포트",
"hop_ports_placeholder": "예: 1-65535",
diff --git a/apps/admin/locales/no-NO/servers.json b/apps/admin/locales/no-NO/servers.json
index e6a4d12..b930b2f 100644
--- a/apps/admin/locales/no-NO/servers.json
+++ b/apps/admin/locales/no-NO/servers.json
@@ -50,6 +50,8 @@
"expired": "Utløpt",
"extra": "Ekstra konfigurasjon",
"flow": "Flyt",
+ "generate_quantum_resistant_key": "Generer kvantumresistent nøkkel",
+ "generate_standard_encryption_key": "Generer standard krypteringsnøkkel",
"hop_interval": "Hoppintervall",
"hop_ports": "Hoppporter",
"hop_ports_placeholder": "f.eks. 1-65535",
diff --git a/apps/admin/locales/pl-PL/servers.json b/apps/admin/locales/pl-PL/servers.json
index 49ffd16..ed92f42 100644
--- a/apps/admin/locales/pl-PL/servers.json
+++ b/apps/admin/locales/pl-PL/servers.json
@@ -50,6 +50,8 @@
"expired": "Wygasł",
"extra": "Dodatkowa konfiguracja",
"flow": "Przepływ",
+ "generate_quantum_resistant_key": "Generuj klucz odporny na kwanty",
+ "generate_standard_encryption_key": "Generuj standardowy klucz szyfrowania",
"hop_interval": "Interwał skoku",
"hop_ports": "Porty skoku",
"hop_ports_placeholder": "np. 1-65535",
diff --git a/apps/admin/locales/pt-BR/servers.json b/apps/admin/locales/pt-BR/servers.json
index a2cd388..93a42aa 100644
--- a/apps/admin/locales/pt-BR/servers.json
+++ b/apps/admin/locales/pt-BR/servers.json
@@ -50,6 +50,8 @@
"expired": "Expirado",
"extra": "Configuração Extra",
"flow": "Fluxo",
+ "generate_quantum_resistant_key": "Gerar chave resistente a quânticos",
+ "generate_standard_encryption_key": "Gerar chave de criptografia padrão",
"hop_interval": "Intervalo de salto",
"hop_ports": "Portas de salto",
"hop_ports_placeholder": "ex. 1-65535",
diff --git a/apps/admin/locales/ro-RO/servers.json b/apps/admin/locales/ro-RO/servers.json
index 2dd241a..db04487 100644
--- a/apps/admin/locales/ro-RO/servers.json
+++ b/apps/admin/locales/ro-RO/servers.json
@@ -50,6 +50,8 @@
"expired": "Expirat",
"extra": "Configurație suplimentară",
"flow": "Flux",
+ "generate_quantum_resistant_key": "Generează cheie rezistentă la cuantică",
+ "generate_standard_encryption_key": "Generează cheie de criptare standard",
"hop_interval": "Interval de hop",
"hop_ports": "Porturi hop",
"hop_ports_placeholder": "de ex. 1-65535",
diff --git a/apps/admin/locales/ru-RU/servers.json b/apps/admin/locales/ru-RU/servers.json
index 0e1f9a2..52bbf48 100644
--- a/apps/admin/locales/ru-RU/servers.json
+++ b/apps/admin/locales/ru-RU/servers.json
@@ -50,6 +50,8 @@
"expired": "Истекло",
"extra": "Дополнительная конфигурация",
"flow": "Поток",
+ "generate_quantum_resistant_key": "Генерировать квантово-устойчивый ключ",
+ "generate_standard_encryption_key": "Генерировать стандартный ключ шифрования",
"hop_interval": "Интервал перехода",
"hop_ports": "Порты перехода",
"hop_ports_placeholder": "например, 1-65535",
diff --git a/apps/admin/locales/th-TH/servers.json b/apps/admin/locales/th-TH/servers.json
index bdcc26e..191ee2e 100644
--- a/apps/admin/locales/th-TH/servers.json
+++ b/apps/admin/locales/th-TH/servers.json
@@ -50,6 +50,8 @@
"expired": "หมดอายุ",
"extra": "การกำหนดค่าพิเศษ",
"flow": "การไหล",
+ "generate_quantum_resistant_key": "สร้างคีย์ต้านทานควอนตัม",
+ "generate_standard_encryption_key": "สร้างคีย์เข้ารหัสมาตรฐาน",
"hop_interval": "ช่วงเวลาการกระโดด",
"hop_ports": "พอร์ตการกระโดด",
"hop_ports_placeholder": "เช่น 1-65535",
diff --git a/apps/admin/locales/tr-TR/servers.json b/apps/admin/locales/tr-TR/servers.json
index a77c2f4..562a77a 100644
--- a/apps/admin/locales/tr-TR/servers.json
+++ b/apps/admin/locales/tr-TR/servers.json
@@ -50,6 +50,8 @@
"expired": "Süresi dolmuş",
"extra": "Ek Yapılandırma",
"flow": "Akış",
+ "generate_quantum_resistant_key": "Kuantuma Dayanıklı Anahtar Oluştur",
+ "generate_standard_encryption_key": "Standart Şifreleme Anahtarı Oluştur",
"hop_interval": "Atlama aralığı",
"hop_ports": "Atlama portları",
"hop_ports_placeholder": "örn. 1-65535",
diff --git a/apps/admin/locales/uk-UA/servers.json b/apps/admin/locales/uk-UA/servers.json
index 840be14..1aee243 100644
--- a/apps/admin/locales/uk-UA/servers.json
+++ b/apps/admin/locales/uk-UA/servers.json
@@ -50,6 +50,8 @@
"expired": "Термін дії закінчився",
"extra": "Додаткова конфігурація",
"flow": "Потік",
+ "generate_quantum_resistant_key": "Згенерувати квантово-стійкий ключ",
+ "generate_standard_encryption_key": "Згенерувати стандартний ключ шифрування",
"hop_interval": "Інтервал стрибка",
"hop_ports": "Порти стрибка",
"hop_ports_placeholder": "наприклад, 1-65535",
diff --git a/apps/admin/locales/vi-VN/servers.json b/apps/admin/locales/vi-VN/servers.json
index e7ac224..438fa33 100644
--- a/apps/admin/locales/vi-VN/servers.json
+++ b/apps/admin/locales/vi-VN/servers.json
@@ -50,6 +50,8 @@
"expired": "Đã hết hạn",
"extra": "Cấu hình thêm",
"flow": "Lưu lượng",
+ "generate_quantum_resistant_key": "Tạo khóa chống lượng tử",
+ "generate_standard_encryption_key": "Tạo khóa mã hóa tiêu chuẩn",
"hop_interval": "Khoảng thời gian nhảy",
"hop_ports": "Cổng nhảy",
"hop_ports_placeholder": "vd. 1-65535",
diff --git a/apps/admin/locales/zh-CN/servers.json b/apps/admin/locales/zh-CN/servers.json
index 31efb81..f0d71a8 100644
--- a/apps/admin/locales/zh-CN/servers.json
+++ b/apps/admin/locales/zh-CN/servers.json
@@ -53,6 +53,8 @@
"expired": "已过期",
"extra": "额外配置",
"flow": "流控",
+ "generate_quantum_resistant_key": "生成抗量子密钥",
+ "generate_standard_encryption_key": "生成标准加密密钥",
"hop_interval": "跳跃端口间隔",
"hop_ports": "跳跃端口",
"hop_ports_placeholder": "例如 1-65535",
diff --git a/apps/admin/locales/zh-HK/servers.json b/apps/admin/locales/zh-HK/servers.json
index 5de3730..4bdd94b 100644
--- a/apps/admin/locales/zh-HK/servers.json
+++ b/apps/admin/locales/zh-HK/servers.json
@@ -50,6 +50,8 @@
"expired": "已過期",
"extra": "額外配置",
"flow": "流量",
+ "generate_quantum_resistant_key": "生成抗量子密鑰",
+ "generate_standard_encryption_key": "生成標準加密密鑰",
"hop_interval": "跳躍間隔",
"hop_ports": "跳躍端口",
"hop_ports_placeholder": "例如 1-65535",
diff --git a/apps/admin/package.json b/apps/admin/package.json
index 79cc5c5..568f338 100644
--- a/apps/admin/package.json
+++ b/apps/admin/package.json
@@ -11,6 +11,7 @@
},
"dependencies": {
"@lottiefiles/dotlottie-react": "^0.15.1",
+ "@noble/curves": "^2.0.1",
"@noble/ed25519": "^3.0.0",
"@tanstack/react-query": "^5.85.5",
"@tanstack/react-query-next-experimental": "^5.85.5",
diff --git a/bun.lock b/bun.lock
index 5ffaa49..b6cfc18 100644
--- a/bun.lock
+++ b/bun.lock
@@ -16,6 +16,7 @@
"@iconify/react": "^5.2.0",
"@lottiefiles/dotlottie-react": "^0.15.1",
"@monaco-editor/react": "^4.7.0",
+ "@noble/curves": "^2.0.1",
"@radix-ui/react-accordion": "^1.2.12",
"@radix-ui/react-alert-dialog": "^1.1.15",
"@radix-ui/react-aspect-ratio": "^1.1.7",
@@ -104,6 +105,7 @@
"name": "ppanel-admin-web",
"dependencies": {
"@lottiefiles/dotlottie-react": "^0.15.1",
+ "@noble/curves": "^2.0.1",
"@noble/ed25519": "^3.0.0",
"@tanstack/react-query": "^5.85.5",
"@tanstack/react-query-next-experimental": "^5.85.5",
@@ -548,8 +550,12 @@
"@next/swc-win32-x64-msvc": ["@next/swc-win32-x64-msvc@15.5.6", "", { "os": "win32", "cpu": "x64" }, "sha512-pxK4VIjFRx1MY92UycLOOw7dTdvccWsNETQ0kDHkBlcFH1GrTLUjSiHU1ohrznnux6TqRHgv5oflhfIWZwVROQ=="],
+ "@noble/curves": ["@noble/curves@2.0.1", "", { "dependencies": { "@noble/hashes": "2.0.1" } }, "sha512-vs1Az2OOTBiP4q0pwjW5aF0xp9n4MxVrmkFBxc6EKZc6ddYx5gaZiAsZoq0uRRXWbi3AT/sBqn05eRPtn1JCPw=="],
+
"@noble/ed25519": ["@noble/ed25519@3.0.0", "", {}, "sha512-QyteqMNm0GLqfa5SoYbSC3+Pvykwpn95Zgth4MFVSMKBB75ELl9tX1LAVsN4c3HXOrakHsF2gL4zWDAYCcsnzg=="],
+ "@noble/hashes": ["@noble/hashes@2.0.1", "", {}, "sha512-XlOlEbQcE9fmuXxrVTXCTlG2nlRXa9Rj3rr5Ue/+tX+nmkgbX720YHh0VR3hBF9xDvwnb8D2shVGOwNx+ulArw=="],
+
"@nodelib/fs.scandir": ["@nodelib/fs.scandir@2.1.5", "", { "dependencies": { "@nodelib/fs.stat": "2.0.5", "run-parallel": "^1.1.9" } }, "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g=="],
"@nodelib/fs.stat": ["@nodelib/fs.stat@2.0.5", "", {}, "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A=="],
diff --git a/package.json b/package.json
index 4f9cf10..4c7da53 100644
--- a/package.json
+++ b/package.json
@@ -60,6 +60,7 @@
"@iconify/react": "^5.2.0",
"@lottiefiles/dotlottie-react": "^0.15.1",
"@monaco-editor/react": "^4.7.0",
+ "@noble/curves": "^2.0.1",
"@radix-ui/react-accordion": "^1.2.12",
"@radix-ui/react-alert-dialog": "^1.1.15",
"@radix-ui/react-aspect-ratio": "^1.1.7",