Browse Source

feat(CORS): add CORS middleware to allow all origins and update ws URL handling for dev

Jacky 3 days ago
parent
commit
3058ec11e6

+ 1 - 1
app/.env

@@ -1 +1 @@
-VITE_PROXY_TARGET=http://127.0.0.1:9000
+VITE_PROXY_TARGET=http://127.0.0.1:9001

+ 103 - 103
app/pnpm-lock.yaml

@@ -1102,63 +1102,63 @@ packages:
   '@types/yauzl@2.10.3':
   '@types/yauzl@2.10.3':
     resolution: {integrity: sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q==}
     resolution: {integrity: sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q==}
 
 
-  '@typescript-eslint/eslint-plugin@8.34.1':
-    resolution: {integrity: sha512-STXcN6ebF6li4PxwNeFnqF8/2BNDvBupf2OPx2yWNzr6mKNGF7q49VM00Pz5FaomJyqvbXpY6PhO+T9w139YEQ==}
+  '@typescript-eslint/eslint-plugin@8.35.0':
+    resolution: {integrity: sha512-ijItUYaiWuce0N1SoSMrEd0b6b6lYkYt99pqCPfybd+HKVXtEvYhICfLdwp42MhiI5mp0oq7PKEL+g1cNiz/Eg==}
     engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
     engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
     peerDependencies:
     peerDependencies:
-      '@typescript-eslint/parser': ^8.34.1
+      '@typescript-eslint/parser': ^8.35.0
       eslint: ^8.57.0 || ^9.0.0
       eslint: ^8.57.0 || ^9.0.0
       typescript: '>=4.8.4 <5.9.0'
       typescript: '>=4.8.4 <5.9.0'
 
 
-  '@typescript-eslint/parser@8.34.1':
-    resolution: {integrity: sha512-4O3idHxhyzjClSMJ0a29AcoK0+YwnEqzI6oz3vlRf3xw0zbzt15MzXwItOlnr5nIth6zlY2RENLsOPvhyrKAQA==}
+  '@typescript-eslint/parser@8.35.0':
+    resolution: {integrity: sha512-6sMvZePQrnZH2/cJkwRpkT7DxoAWh+g6+GFRK6bV3YQo7ogi3SX5rgF6099r5Q53Ma5qeT7LGmOmuIutF4t3lA==}
     engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
     engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
     peerDependencies:
     peerDependencies:
       eslint: ^8.57.0 || ^9.0.0
       eslint: ^8.57.0 || ^9.0.0
       typescript: '>=4.8.4 <5.9.0'
       typescript: '>=4.8.4 <5.9.0'
 
 
-  '@typescript-eslint/project-service@8.34.1':
-    resolution: {integrity: sha512-nuHlOmFZfuRwLJKDGQOVc0xnQrAmuq1Mj/ISou5044y1ajGNp2BNliIqp7F2LPQ5sForz8lempMFCovfeS1XoA==}
+  '@typescript-eslint/project-service@8.35.0':
+    resolution: {integrity: sha512-41xatqRwWZuhUMF/aZm2fcUsOFKNcG28xqRSS6ZVr9BVJtGExosLAm5A1OxTjRMagx8nJqva+P5zNIGt8RIgbQ==}
     engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
     engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
     peerDependencies:
     peerDependencies:
       typescript: '>=4.8.4 <5.9.0'
       typescript: '>=4.8.4 <5.9.0'
 
 
-  '@typescript-eslint/scope-manager@8.34.1':
-    resolution: {integrity: sha512-beu6o6QY4hJAgL1E8RaXNC071G4Kso2MGmJskCFQhRhg8VOH/FDbC8soP8NHN7e/Hdphwp8G8cE6OBzC8o41ZA==}
+  '@typescript-eslint/scope-manager@8.35.0':
+    resolution: {integrity: sha512-+AgL5+mcoLxl1vGjwNfiWq5fLDZM1TmTPYs2UkyHfFhgERxBbqHlNjRzhThJqz+ktBqTChRYY6zwbMwy0591AA==}
     engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
     engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
 
 
-  '@typescript-eslint/tsconfig-utils@8.34.1':
-    resolution: {integrity: sha512-K4Sjdo4/xF9NEeA2khOb7Y5nY6NSXBnod87uniVYW9kHP+hNlDV8trUSFeynA2uxWam4gIWgWoygPrv9VMWrYg==}
+  '@typescript-eslint/tsconfig-utils@8.35.0':
+    resolution: {integrity: sha512-04k/7247kZzFraweuEirmvUj+W3bJLI9fX6fbo1Qm2YykuBvEhRTPl8tcxlYO8kZZW+HIXfkZNoasVb8EV4jpA==}
     engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
     engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
     peerDependencies:
     peerDependencies:
       typescript: '>=4.8.4 <5.9.0'
       typescript: '>=4.8.4 <5.9.0'
 
 
-  '@typescript-eslint/type-utils@8.34.1':
-    resolution: {integrity: sha512-Tv7tCCr6e5m8hP4+xFugcrwTOucB8lshffJ6zf1mF1TbU67R+ntCc6DzLNKM+s/uzDyv8gLq7tufaAhIBYeV8g==}
+  '@typescript-eslint/type-utils@8.35.0':
+    resolution: {integrity: sha512-ceNNttjfmSEoM9PW87bWLDEIaLAyR+E6BoYJQ5PfaDau37UGca9Nyq3lBk8Bw2ad0AKvYabz6wxc7DMTO2jnNA==}
     engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
     engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
     peerDependencies:
     peerDependencies:
       eslint: ^8.57.0 || ^9.0.0
       eslint: ^8.57.0 || ^9.0.0
       typescript: '>=4.8.4 <5.9.0'
       typescript: '>=4.8.4 <5.9.0'
 
 
-  '@typescript-eslint/types@8.34.1':
-    resolution: {integrity: sha512-rjLVbmE7HR18kDsjNIZQHxmv9RZwlgzavryL5Lnj2ujIRTeXlKtILHgRNmQ3j4daw7zd+mQgy+uyt6Zo6I0IGA==}
+  '@typescript-eslint/types@8.35.0':
+    resolution: {integrity: sha512-0mYH3emanku0vHw2aRLNGqe7EXh9WHEhi7kZzscrMDf6IIRUQ5Jk4wp1QrledE/36KtdZrVfKnE32eZCf/vaVQ==}
     engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
     engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
 
 
-  '@typescript-eslint/typescript-estree@8.34.1':
-    resolution: {integrity: sha512-rjCNqqYPuMUF5ODD+hWBNmOitjBWghkGKJg6hiCHzUvXRy6rK22Jd3rwbP2Xi+R7oYVvIKhokHVhH41BxPV5mA==}
+  '@typescript-eslint/typescript-estree@8.35.0':
+    resolution: {integrity: sha512-F+BhnaBemgu1Qf8oHrxyw14wq6vbL8xwWKKMwTMwYIRmFFY/1n/9T/jpbobZL8vp7QyEUcC6xGrnAO4ua8Kp7w==}
     engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
     engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
     peerDependencies:
     peerDependencies:
       typescript: '>=4.8.4 <5.9.0'
       typescript: '>=4.8.4 <5.9.0'
 
 
-  '@typescript-eslint/utils@8.34.1':
-    resolution: {integrity: sha512-mqOwUdZ3KjtGk7xJJnLbHxTuWVn3GO2WZZuM+Slhkun4+qthLdXx32C8xIXbO1kfCECb3jIs3eoxK3eryk7aoQ==}
+  '@typescript-eslint/utils@8.35.0':
+    resolution: {integrity: sha512-nqoMu7WWM7ki5tPgLVsmPM8CkqtoPUG6xXGeefM5t4x3XumOEKMoUZPdi+7F+/EotukN4R9OWdmDxN80fqoZeg==}
     engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
     engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
     peerDependencies:
     peerDependencies:
       eslint: ^8.57.0 || ^9.0.0
       eslint: ^8.57.0 || ^9.0.0
       typescript: '>=4.8.4 <5.9.0'
       typescript: '>=4.8.4 <5.9.0'
 
 
-  '@typescript-eslint/visitor-keys@8.34.1':
-    resolution: {integrity: sha512-xoh5rJ+tgsRKoXnkBPFRLZ7rjKM0AfVbC68UZ/ECXoDbfggb9RbEySN359acY1vS3qZ0jVTVWzbtfapwm5ztxw==}
+  '@typescript-eslint/visitor-keys@8.35.0':
+    resolution: {integrity: sha512-zTh2+1Y8ZpmeQaQVIc/ZZxsx8UzgKJyNg1PTvjzC7WMhPSVS8bfDX34k1SrwOf016qd5RU3az2UxUNue3IfQ5g==}
     engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
     engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
 
 
   '@unocss/astro@66.2.3':
   '@unocss/astro@66.2.3':
@@ -1289,14 +1289,14 @@ packages:
       vitest:
       vitest:
         optional: true
         optional: true
 
 
-  '@volar/language-core@2.4.14':
-    resolution: {integrity: sha512-X6beusV0DvuVseaOEy7GoagS4rYHgDHnTrdOj5jeUb49fW5ceQyP9Ej5rBhqgz2wJggl+2fDbbojq1XKaxDi6w==}
+  '@volar/language-core@2.4.15':
+    resolution: {integrity: sha512-3VHw+QZU0ZG9IuQmzT68IyN4hZNd9GchGPhbD9+pa8CVv7rnoOZwo7T8weIbrRmihqy3ATpdfXFnqRrfPVK6CA==}
 
 
-  '@volar/source-map@2.4.14':
-    resolution: {integrity: sha512-5TeKKMh7Sfxo8021cJfmBzcjfY1SsXsPMMjMvjY7ivesdnybqqS+GxGAoXHAOUawQTwtdUxgP65Im+dEmvWtYQ==}
+  '@volar/source-map@2.4.15':
+    resolution: {integrity: sha512-CPbMWlUN6hVZJYGcU/GSoHu4EnCHiLaXI9n8c9la6RaI9W5JHX+NqG+GSQcB0JdC2FIBLdZJwGsfKyBB71VlTg==}
 
 
-  '@volar/typescript@2.4.14':
-    resolution: {integrity: sha512-p8Z6f/bZM3/HyCdRNFZOEEzts51uV8WHeN8Tnfnm2EBv6FDB2TQLzfVx7aJvnl8ofKAOnS64B2O8bImBFaauRw==}
+  '@volar/typescript@2.4.15':
+    resolution: {integrity: sha512-2aZ8i0cqPGjXb4BhkMsPYDkkuc2ZQ6yOpqwAuNwUoncELqoy5fRgOQtLR9gB0g902iS0NAkvpIzs27geVyVdPg==}
 
 
   '@vue-macros/common@1.16.1':
   '@vue-macros/common@1.16.1':
     resolution: {integrity: sha512-Pn/AWMTjoMYuquepLZP813BIcq8DTZiNCoaceuNlvaYuOTd8DqBZWc5u0uOMQZMInwME1mdSmmBAcTluiV9Jtg==}
     resolution: {integrity: sha512-Pn/AWMTjoMYuquepLZP813BIcq8DTZiNCoaceuNlvaYuOTd8DqBZWc5u0uOMQZMInwME1mdSmmBAcTluiV9Jtg==}
@@ -1937,8 +1937,8 @@ packages:
   eastasianwidth@0.2.0:
   eastasianwidth@0.2.0:
     resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==}
     resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==}
 
 
-  electron-to-chromium@1.5.171:
-    resolution: {integrity: sha512-scWpzXEJEMrGJa4Y6m/tVotb0WuvNmasv3wWVzUAeCgKU0ToFOhUW6Z+xWnRQANMYGxN4ngJXIThgBJOqzVPCQ==}
+  electron-to-chromium@1.5.173:
+    resolution: {integrity: sha512-2bFhXP2zqSfQHugjqJIDFVwa+qIxyNApenmXTp9EjaKtdPrES5Qcn9/aSFy/NaP2E+fWG/zxKu/LBvY36p5VNQ==}
 
 
   emoji-regex@8.0.0:
   emoji-regex@8.0.0:
     resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==}
     resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==}
@@ -1952,8 +1952,8 @@ packages:
   end-of-stream@1.4.5:
   end-of-stream@1.4.5:
     resolution: {integrity: sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg==}
     resolution: {integrity: sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg==}
 
 
-  enhanced-resolve@5.18.1:
-    resolution: {integrity: sha512-ZSW3ma5GkcQBIpwZTSRAI8N71Uuwgs93IezB7mf7R60tC8ZbJideoDNKjHn2O9KIlx6rkGTTEk1xUCK2E1Y2Yg==}
+  enhanced-resolve@5.18.2:
+    resolution: {integrity: sha512-6Jw4sE1maoRJo3q8MsSIn2onJFbLTOjY9hlx4DZXmOKvLRd1Ok2kXmAGXaafL2+ijsJZ1ClYbl/pmqr9+k4iUQ==}
     engines: {node: '>=10.13.0'}
     engines: {node: '>=10.13.0'}
 
 
   entities@4.5.0:
   entities@4.5.0:
@@ -2097,8 +2097,8 @@ packages:
       typescript:
       typescript:
         optional: true
         optional: true
 
 
-  eslint-plugin-jsdoc@51.2.1:
-    resolution: {integrity: sha512-iE2qpG/kaA9xXfEcTNSsxNvH5O8+o38VBGLwl2oZisQaM1JRGftTLJAGQrj7YZjSkp3n9VCrNTjOpo3ONhTApQ==}
+  eslint-plugin-jsdoc@51.2.3:
+    resolution: {integrity: sha512-pagzxFubOih+O6XSB1D8BkDkJjF4G4/v8s9pRg4FkXQJLu0e3QJg621ayhmnhyc5mNBpp3cYCNiUyeLQs7oz7w==}
     engines: {node: '>=20.11.0'}
     engines: {node: '>=20.11.0'}
     peerDependencies:
     peerDependencies:
       eslint: ^7.0.0 || ^8.0.0 || ^9.0.0
       eslint: ^7.0.0 || ^8.0.0 || ^9.0.0
@@ -2661,8 +2661,8 @@ packages:
   isexe@2.0.0:
   isexe@2.0.0:
     resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==}
     resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==}
 
 
-  isomorphic-git@1.31.0:
-    resolution: {integrity: sha512-huMXDX1pMuBc0+GQSp7zD4ejqmrhqwWlK2X7p2dZyb7p2DKZWva4kRc4aH+0EE92W1j3+D7N4VRv35RCMWAeCQ==}
+  isomorphic-git@1.31.1:
+    resolution: {integrity: sha512-aQ2fg2Qf69Abhu4C3WkRDhr5WcY40mQpIALC2+HTJjeyKlKT/7pXm9KUEtcCbR6TnLxmzOO98IFQvkY6cBIzaw==}
     engines: {node: '>=14.17'}
     engines: {node: '>=14.17'}
     hasBin: true
     hasBin: true
 
 
@@ -3849,8 +3849,8 @@ packages:
     peerDependencies:
     peerDependencies:
       vue: ^3.4.36
       vue: ^3.4.36
 
 
-  vue-eslint-parser@10.1.3:
-    resolution: {integrity: sha512-dbCBnd2e02dYWsXoqX5yKUZlOt+ExIpq7hmHKPb5ZqKcjf++Eo0hMseFTZMLKThrUk61m+Uv6A2YSBve6ZvuDQ==}
+  vue-eslint-parser@10.1.4:
+    resolution: {integrity: sha512-EIZvCukIEMHEb3mxOKemtvWR1fcUAdWWAgkfyjmRHzvyhrZvBvH9oz69+thDIWhGiIQjZnPkCn8yHqvjM+a9eg==}
     engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
     engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
     peerDependencies:
     peerDependencies:
       eslint: ^8.57.0 || ^9.0.0
       eslint: ^8.57.0 || ^9.0.0
@@ -4045,8 +4045,8 @@ snapshots:
       '@eslint-community/eslint-plugin-eslint-comments': 4.5.0(eslint@9.29.0(jiti@2.4.2))
       '@eslint-community/eslint-plugin-eslint-comments': 4.5.0(eslint@9.29.0(jiti@2.4.2))
       '@eslint/markdown': 6.6.0
       '@eslint/markdown': 6.6.0
       '@stylistic/eslint-plugin': 5.0.0(eslint@9.29.0(jiti@2.4.2))
       '@stylistic/eslint-plugin': 5.0.0(eslint@9.29.0(jiti@2.4.2))
-      '@typescript-eslint/eslint-plugin': 8.34.1(@typescript-eslint/parser@8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3)
-      '@typescript-eslint/parser': 8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3)
+      '@typescript-eslint/eslint-plugin': 8.35.0(@typescript-eslint/parser@8.35.0(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3)
+      '@typescript-eslint/parser': 8.35.0(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3)
       '@vitest/eslint-plugin': 1.2.7(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3)
       '@vitest/eslint-plugin': 1.2.7(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3)
       ansis: 4.1.0
       ansis: 4.1.0
       cac: 6.7.14
       cac: 6.7.14
@@ -4057,7 +4057,7 @@ snapshots:
       eslint-plugin-antfu: 3.1.1(eslint@9.29.0(jiti@2.4.2))
       eslint-plugin-antfu: 3.1.1(eslint@9.29.0(jiti@2.4.2))
       eslint-plugin-command: 3.3.1(eslint@9.29.0(jiti@2.4.2))
       eslint-plugin-command: 3.3.1(eslint@9.29.0(jiti@2.4.2))
       eslint-plugin-import-lite: 0.3.0(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3)
       eslint-plugin-import-lite: 0.3.0(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3)
-      eslint-plugin-jsdoc: 51.2.1(eslint@9.29.0(jiti@2.4.2))
+      eslint-plugin-jsdoc: 51.2.3(eslint@9.29.0(jiti@2.4.2))
       eslint-plugin-jsonc: 2.20.1(eslint@9.29.0(jiti@2.4.2))
       eslint-plugin-jsonc: 2.20.1(eslint@9.29.0(jiti@2.4.2))
       eslint-plugin-n: 17.20.0(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3)
       eslint-plugin-n: 17.20.0(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3)
       eslint-plugin-no-only-tests: 3.3.0
       eslint-plugin-no-only-tests: 3.3.0
@@ -4066,8 +4066,8 @@ snapshots:
       eslint-plugin-regexp: 2.9.0(eslint@9.29.0(jiti@2.4.2))
       eslint-plugin-regexp: 2.9.0(eslint@9.29.0(jiti@2.4.2))
       eslint-plugin-toml: 0.12.0(eslint@9.29.0(jiti@2.4.2))
       eslint-plugin-toml: 0.12.0(eslint@9.29.0(jiti@2.4.2))
       eslint-plugin-unicorn: 59.0.1(eslint@9.29.0(jiti@2.4.2))
       eslint-plugin-unicorn: 59.0.1(eslint@9.29.0(jiti@2.4.2))
-      eslint-plugin-unused-imports: 4.1.4(@typescript-eslint/eslint-plugin@8.34.1(@typescript-eslint/parser@8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint@9.29.0(jiti@2.4.2))
-      eslint-plugin-vue: 10.2.0(eslint@9.29.0(jiti@2.4.2))(vue-eslint-parser@10.1.3(eslint@9.29.0(jiti@2.4.2)))
+      eslint-plugin-unused-imports: 4.1.4(@typescript-eslint/eslint-plugin@8.35.0(@typescript-eslint/parser@8.35.0(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint@9.29.0(jiti@2.4.2))
+      eslint-plugin-vue: 10.2.0(eslint@9.29.0(jiti@2.4.2))(vue-eslint-parser@10.1.4(eslint@9.29.0(jiti@2.4.2)))
       eslint-plugin-yml: 1.18.0(eslint@9.29.0(jiti@2.4.2))
       eslint-plugin-yml: 1.18.0(eslint@9.29.0(jiti@2.4.2))
       eslint-processor-vue-blocks: 2.0.0(@vue/compiler-sfc@3.5.17)(eslint@9.29.0(jiti@2.4.2))
       eslint-processor-vue-blocks: 2.0.0(@vue/compiler-sfc@3.5.17)(eslint@9.29.0(jiti@2.4.2))
       globals: 16.2.0
       globals: 16.2.0
@@ -4075,7 +4075,7 @@ snapshots:
       local-pkg: 1.1.1
       local-pkg: 1.1.1
       parse-gitignore: 2.0.0
       parse-gitignore: 2.0.0
       toml-eslint-parser: 0.10.0
       toml-eslint-parser: 0.10.0
-      vue-eslint-parser: 10.1.3(eslint@9.29.0(jiti@2.4.2))
+      vue-eslint-parser: 10.1.4(eslint@9.29.0(jiti@2.4.2))
       yaml-eslint-parser: 1.3.0
       yaml-eslint-parser: 1.3.0
     transitivePeerDependencies:
     transitivePeerDependencies:
       - '@eslint/json'
       - '@eslint/json'
@@ -4278,7 +4278,7 @@ snapshots:
   '@es-joy/jsdoccomment@0.50.2':
   '@es-joy/jsdoccomment@0.50.2':
     dependencies:
     dependencies:
       '@types/estree': 1.0.8
       '@types/estree': 1.0.8
-      '@typescript-eslint/types': 8.34.1
+      '@typescript-eslint/types': 8.35.0
       comment-parser: 1.4.1
       comment-parser: 1.4.1
       esquery: 1.6.0
       esquery: 1.6.0
       jsdoc-type-pratt-parser: 4.1.0
       jsdoc-type-pratt-parser: 4.1.0
@@ -4286,7 +4286,7 @@ snapshots:
   '@es-joy/jsdoccomment@0.52.0':
   '@es-joy/jsdoccomment@0.52.0':
     dependencies:
     dependencies:
       '@types/estree': 1.0.8
       '@types/estree': 1.0.8
-      '@typescript-eslint/types': 8.34.1
+      '@typescript-eslint/types': 8.35.0
       comment-parser: 1.4.1
       comment-parser: 1.4.1
       esquery: 1.6.0
       esquery: 1.6.0
       jsdoc-type-pratt-parser: 4.1.0
       jsdoc-type-pratt-parser: 4.1.0
@@ -4738,7 +4738,7 @@ snapshots:
   '@stylistic/eslint-plugin@5.0.0(eslint@9.29.0(jiti@2.4.2))':
   '@stylistic/eslint-plugin@5.0.0(eslint@9.29.0(jiti@2.4.2))':
     dependencies:
     dependencies:
       '@eslint-community/eslint-utils': 4.7.0(eslint@9.29.0(jiti@2.4.2))
       '@eslint-community/eslint-utils': 4.7.0(eslint@9.29.0(jiti@2.4.2))
-      '@typescript-eslint/types': 8.34.1
+      '@typescript-eslint/types': 8.35.0
       eslint: 9.29.0(jiti@2.4.2)
       eslint: 9.29.0(jiti@2.4.2)
       eslint-visitor-keys: 4.2.1
       eslint-visitor-keys: 4.2.1
       espree: 10.4.0
       espree: 10.4.0
@@ -4816,14 +4816,14 @@ snapshots:
       '@types/node': 24.0.3
       '@types/node': 24.0.3
     optional: true
     optional: true
 
 
-  '@typescript-eslint/eslint-plugin@8.34.1(@typescript-eslint/parser@8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3)':
+  '@typescript-eslint/eslint-plugin@8.35.0(@typescript-eslint/parser@8.35.0(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3)':
     dependencies:
     dependencies:
       '@eslint-community/regexpp': 4.12.1
       '@eslint-community/regexpp': 4.12.1
-      '@typescript-eslint/parser': 8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3)
-      '@typescript-eslint/scope-manager': 8.34.1
-      '@typescript-eslint/type-utils': 8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3)
-      '@typescript-eslint/utils': 8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3)
-      '@typescript-eslint/visitor-keys': 8.34.1
+      '@typescript-eslint/parser': 8.35.0(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3)
+      '@typescript-eslint/scope-manager': 8.35.0
+      '@typescript-eslint/type-utils': 8.35.0(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3)
+      '@typescript-eslint/utils': 8.35.0(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3)
+      '@typescript-eslint/visitor-keys': 8.35.0
       eslint: 9.29.0(jiti@2.4.2)
       eslint: 9.29.0(jiti@2.4.2)
       graphemer: 1.4.0
       graphemer: 1.4.0
       ignore: 7.0.5
       ignore: 7.0.5
@@ -4833,40 +4833,40 @@ snapshots:
     transitivePeerDependencies:
     transitivePeerDependencies:
       - supports-color
       - supports-color
 
 
-  '@typescript-eslint/parser@8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3)':
+  '@typescript-eslint/parser@8.35.0(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3)':
     dependencies:
     dependencies:
-      '@typescript-eslint/scope-manager': 8.34.1
-      '@typescript-eslint/types': 8.34.1
-      '@typescript-eslint/typescript-estree': 8.34.1(typescript@5.8.3)
-      '@typescript-eslint/visitor-keys': 8.34.1
+      '@typescript-eslint/scope-manager': 8.35.0
+      '@typescript-eslint/types': 8.35.0
+      '@typescript-eslint/typescript-estree': 8.35.0(typescript@5.8.3)
+      '@typescript-eslint/visitor-keys': 8.35.0
       debug: 4.4.1
       debug: 4.4.1
       eslint: 9.29.0(jiti@2.4.2)
       eslint: 9.29.0(jiti@2.4.2)
       typescript: 5.8.3
       typescript: 5.8.3
     transitivePeerDependencies:
     transitivePeerDependencies:
       - supports-color
       - supports-color
 
 
-  '@typescript-eslint/project-service@8.34.1(typescript@5.8.3)':
+  '@typescript-eslint/project-service@8.35.0(typescript@5.8.3)':
     dependencies:
     dependencies:
-      '@typescript-eslint/tsconfig-utils': 8.34.1(typescript@5.8.3)
-      '@typescript-eslint/types': 8.34.1
+      '@typescript-eslint/tsconfig-utils': 8.35.0(typescript@5.8.3)
+      '@typescript-eslint/types': 8.35.0
       debug: 4.4.1
       debug: 4.4.1
       typescript: 5.8.3
       typescript: 5.8.3
     transitivePeerDependencies:
     transitivePeerDependencies:
       - supports-color
       - supports-color
 
 
-  '@typescript-eslint/scope-manager@8.34.1':
+  '@typescript-eslint/scope-manager@8.35.0':
     dependencies:
     dependencies:
-      '@typescript-eslint/types': 8.34.1
-      '@typescript-eslint/visitor-keys': 8.34.1
+      '@typescript-eslint/types': 8.35.0
+      '@typescript-eslint/visitor-keys': 8.35.0
 
 
-  '@typescript-eslint/tsconfig-utils@8.34.1(typescript@5.8.3)':
+  '@typescript-eslint/tsconfig-utils@8.35.0(typescript@5.8.3)':
     dependencies:
     dependencies:
       typescript: 5.8.3
       typescript: 5.8.3
 
 
-  '@typescript-eslint/type-utils@8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3)':
+  '@typescript-eslint/type-utils@8.35.0(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3)':
     dependencies:
     dependencies:
-      '@typescript-eslint/typescript-estree': 8.34.1(typescript@5.8.3)
-      '@typescript-eslint/utils': 8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3)
+      '@typescript-eslint/typescript-estree': 8.35.0(typescript@5.8.3)
+      '@typescript-eslint/utils': 8.35.0(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3)
       debug: 4.4.1
       debug: 4.4.1
       eslint: 9.29.0(jiti@2.4.2)
       eslint: 9.29.0(jiti@2.4.2)
       ts-api-utils: 2.1.0(typescript@5.8.3)
       ts-api-utils: 2.1.0(typescript@5.8.3)
@@ -4874,14 +4874,14 @@ snapshots:
     transitivePeerDependencies:
     transitivePeerDependencies:
       - supports-color
       - supports-color
 
 
-  '@typescript-eslint/types@8.34.1': {}
+  '@typescript-eslint/types@8.35.0': {}
 
 
-  '@typescript-eslint/typescript-estree@8.34.1(typescript@5.8.3)':
+  '@typescript-eslint/typescript-estree@8.35.0(typescript@5.8.3)':
     dependencies:
     dependencies:
-      '@typescript-eslint/project-service': 8.34.1(typescript@5.8.3)
-      '@typescript-eslint/tsconfig-utils': 8.34.1(typescript@5.8.3)
-      '@typescript-eslint/types': 8.34.1
-      '@typescript-eslint/visitor-keys': 8.34.1
+      '@typescript-eslint/project-service': 8.35.0(typescript@5.8.3)
+      '@typescript-eslint/tsconfig-utils': 8.35.0(typescript@5.8.3)
+      '@typescript-eslint/types': 8.35.0
+      '@typescript-eslint/visitor-keys': 8.35.0
       debug: 4.4.1
       debug: 4.4.1
       fast-glob: 3.3.3
       fast-glob: 3.3.3
       is-glob: 4.0.3
       is-glob: 4.0.3
@@ -4892,20 +4892,20 @@ snapshots:
     transitivePeerDependencies:
     transitivePeerDependencies:
       - supports-color
       - supports-color
 
 
-  '@typescript-eslint/utils@8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3)':
+  '@typescript-eslint/utils@8.35.0(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3)':
     dependencies:
     dependencies:
       '@eslint-community/eslint-utils': 4.7.0(eslint@9.29.0(jiti@2.4.2))
       '@eslint-community/eslint-utils': 4.7.0(eslint@9.29.0(jiti@2.4.2))
-      '@typescript-eslint/scope-manager': 8.34.1
-      '@typescript-eslint/types': 8.34.1
-      '@typescript-eslint/typescript-estree': 8.34.1(typescript@5.8.3)
+      '@typescript-eslint/scope-manager': 8.35.0
+      '@typescript-eslint/types': 8.35.0
+      '@typescript-eslint/typescript-estree': 8.35.0(typescript@5.8.3)
       eslint: 9.29.0(jiti@2.4.2)
       eslint: 9.29.0(jiti@2.4.2)
       typescript: 5.8.3
       typescript: 5.8.3
     transitivePeerDependencies:
     transitivePeerDependencies:
       - supports-color
       - supports-color
 
 
-  '@typescript-eslint/visitor-keys@8.34.1':
+  '@typescript-eslint/visitor-keys@8.35.0':
     dependencies:
     dependencies:
-      '@typescript-eslint/types': 8.34.1
+      '@typescript-eslint/types': 8.35.0
       eslint-visitor-keys: 4.2.1
       eslint-visitor-keys: 4.2.1
 
 
   '@unocss/astro@66.2.3(vite@6.3.5(@types/node@24.0.3)(jiti@2.4.2)(less@4.3.0)(tsx@4.19.2)(yaml@2.8.0))(vue@3.5.17(typescript@5.8.3))':
   '@unocss/astro@66.2.3(vite@6.3.5(@types/node@24.0.3)(jiti@2.4.2)(less@4.3.0)(tsx@4.19.2)(yaml@2.8.0))(vue@3.5.17(typescript@5.8.3))':
@@ -5100,22 +5100,22 @@ snapshots:
 
 
   '@vitest/eslint-plugin@1.2.7(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3)':
   '@vitest/eslint-plugin@1.2.7(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3)':
     dependencies:
     dependencies:
-      '@typescript-eslint/utils': 8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3)
+      '@typescript-eslint/utils': 8.35.0(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3)
       eslint: 9.29.0(jiti@2.4.2)
       eslint: 9.29.0(jiti@2.4.2)
     optionalDependencies:
     optionalDependencies:
       typescript: 5.8.3
       typescript: 5.8.3
     transitivePeerDependencies:
     transitivePeerDependencies:
       - supports-color
       - supports-color
 
 
-  '@volar/language-core@2.4.14':
+  '@volar/language-core@2.4.15':
     dependencies:
     dependencies:
-      '@volar/source-map': 2.4.14
+      '@volar/source-map': 2.4.15
 
 
-  '@volar/source-map@2.4.14': {}
+  '@volar/source-map@2.4.15': {}
 
 
-  '@volar/typescript@2.4.14':
+  '@volar/typescript@2.4.15':
     dependencies:
     dependencies:
-      '@volar/language-core': 2.4.14
+      '@volar/language-core': 2.4.15
       path-browserify: 1.0.1
       path-browserify: 1.0.1
       vscode-uri: 3.1.0
       vscode-uri: 3.1.0
 
 
@@ -5216,7 +5216,7 @@ snapshots:
 
 
   '@vue/language-core@2.2.10(typescript@5.8.3)':
   '@vue/language-core@2.2.10(typescript@5.8.3)':
     dependencies:
     dependencies:
-      '@volar/language-core': 2.4.14
+      '@volar/language-core': 2.4.15
       '@vue/compiler-dom': 3.5.17
       '@vue/compiler-dom': 3.5.17
       '@vue/compiler-vue2': 2.7.16
       '@vue/compiler-vue2': 2.7.16
       '@vue/shared': 3.5.17
       '@vue/shared': 3.5.17
@@ -5475,7 +5475,7 @@ snapshots:
   browserslist@4.25.0:
   browserslist@4.25.0:
     dependencies:
     dependencies:
       caniuse-lite: 1.0.30001724
       caniuse-lite: 1.0.30001724
-      electron-to-chromium: 1.5.171
+      electron-to-chromium: 1.5.173
       node-releases: 2.0.19
       node-releases: 2.0.19
       update-browserslist-db: 1.1.3(browserslist@4.25.0)
       update-browserslist-db: 1.1.3(browserslist@4.25.0)
 
 
@@ -5807,7 +5807,7 @@ snapshots:
 
 
   eastasianwidth@0.2.0: {}
   eastasianwidth@0.2.0: {}
 
 
-  electron-to-chromium@1.5.171: {}
+  electron-to-chromium@1.5.173: {}
 
 
   emoji-regex@8.0.0: {}
   emoji-regex@8.0.0: {}
 
 
@@ -5822,7 +5822,7 @@ snapshots:
     dependencies:
     dependencies:
       once: 1.4.0
       once: 1.4.0
 
 
-  enhanced-resolve@5.18.1:
+  enhanced-resolve@5.18.2:
     dependencies:
     dependencies:
       graceful-fs: 4.2.11
       graceful-fs: 4.2.11
       tapable: 2.2.2
       tapable: 2.2.2
@@ -6040,12 +6040,12 @@ snapshots:
   eslint-plugin-import-lite@0.3.0(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3):
   eslint-plugin-import-lite@0.3.0(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3):
     dependencies:
     dependencies:
       '@eslint-community/eslint-utils': 4.7.0(eslint@9.29.0(jiti@2.4.2))
       '@eslint-community/eslint-utils': 4.7.0(eslint@9.29.0(jiti@2.4.2))
-      '@typescript-eslint/types': 8.34.1
+      '@typescript-eslint/types': 8.35.0
       eslint: 9.29.0(jiti@2.4.2)
       eslint: 9.29.0(jiti@2.4.2)
     optionalDependencies:
     optionalDependencies:
       typescript: 5.8.3
       typescript: 5.8.3
 
 
-  eslint-plugin-jsdoc@51.2.1(eslint@9.29.0(jiti@2.4.2)):
+  eslint-plugin-jsdoc@51.2.3(eslint@9.29.0(jiti@2.4.2)):
     dependencies:
     dependencies:
       '@es-joy/jsdoccomment': 0.52.0
       '@es-joy/jsdoccomment': 0.52.0
       are-docs-informative: 0.0.2
       are-docs-informative: 0.0.2
@@ -6078,8 +6078,8 @@ snapshots:
   eslint-plugin-n@17.20.0(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3):
   eslint-plugin-n@17.20.0(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3):
     dependencies:
     dependencies:
       '@eslint-community/eslint-utils': 4.7.0(eslint@9.29.0(jiti@2.4.2))
       '@eslint-community/eslint-utils': 4.7.0(eslint@9.29.0(jiti@2.4.2))
-      '@typescript-eslint/utils': 8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3)
-      enhanced-resolve: 5.18.1
+      '@typescript-eslint/utils': 8.35.0(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3)
+      enhanced-resolve: 5.18.2
       eslint: 9.29.0(jiti@2.4.2)
       eslint: 9.29.0(jiti@2.4.2)
       eslint-plugin-es-x: 7.8.0(eslint@9.29.0(jiti@2.4.2))
       eslint-plugin-es-x: 7.8.0(eslint@9.29.0(jiti@2.4.2))
       get-tsconfig: 4.10.1
       get-tsconfig: 4.10.1
@@ -6096,8 +6096,8 @@ snapshots:
 
 
   eslint-plugin-perfectionist@4.15.0(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3):
   eslint-plugin-perfectionist@4.15.0(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3):
     dependencies:
     dependencies:
-      '@typescript-eslint/types': 8.34.1
-      '@typescript-eslint/utils': 8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3)
+      '@typescript-eslint/types': 8.35.0
+      '@typescript-eslint/utils': 8.35.0(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3)
       eslint: 9.29.0(jiti@2.4.2)
       eslint: 9.29.0(jiti@2.4.2)
       natural-orderby: 5.0.0
       natural-orderby: 5.0.0
     transitivePeerDependencies:
     transitivePeerDependencies:
@@ -6169,13 +6169,13 @@ snapshots:
       semver: 7.7.2
       semver: 7.7.2
       strip-indent: 4.0.0
       strip-indent: 4.0.0
 
 
-  eslint-plugin-unused-imports@4.1.4(@typescript-eslint/eslint-plugin@8.34.1(@typescript-eslint/parser@8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint@9.29.0(jiti@2.4.2)):
+  eslint-plugin-unused-imports@4.1.4(@typescript-eslint/eslint-plugin@8.35.0(@typescript-eslint/parser@8.35.0(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint@9.29.0(jiti@2.4.2)):
     dependencies:
     dependencies:
       eslint: 9.29.0(jiti@2.4.2)
       eslint: 9.29.0(jiti@2.4.2)
     optionalDependencies:
     optionalDependencies:
-      '@typescript-eslint/eslint-plugin': 8.34.1(@typescript-eslint/parser@8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3)
+      '@typescript-eslint/eslint-plugin': 8.35.0(@typescript-eslint/parser@8.35.0(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3)
 
 
-  eslint-plugin-vue@10.2.0(eslint@9.29.0(jiti@2.4.2))(vue-eslint-parser@10.1.3(eslint@9.29.0(jiti@2.4.2))):
+  eslint-plugin-vue@10.2.0(eslint@9.29.0(jiti@2.4.2))(vue-eslint-parser@10.1.4(eslint@9.29.0(jiti@2.4.2))):
     dependencies:
     dependencies:
       '@eslint-community/eslint-utils': 4.7.0(eslint@9.29.0(jiti@2.4.2))
       '@eslint-community/eslint-utils': 4.7.0(eslint@9.29.0(jiti@2.4.2))
       eslint: 9.29.0(jiti@2.4.2)
       eslint: 9.29.0(jiti@2.4.2)
@@ -6183,7 +6183,7 @@ snapshots:
       nth-check: 2.1.1
       nth-check: 2.1.1
       postcss-selector-parser: 6.1.2
       postcss-selector-parser: 6.1.2
       semver: 7.7.2
       semver: 7.7.2
-      vue-eslint-parser: 10.1.3(eslint@9.29.0(jiti@2.4.2))
+      vue-eslint-parser: 10.1.4(eslint@9.29.0(jiti@2.4.2))
       xml-name-validator: 4.0.0
       xml-name-validator: 4.0.0
 
 
   eslint-plugin-yml@1.18.0(eslint@9.29.0(jiti@2.4.2)):
   eslint-plugin-yml@1.18.0(eslint@9.29.0(jiti@2.4.2)):
@@ -6707,7 +6707,7 @@ snapshots:
 
 
   isexe@2.0.0: {}
   isexe@2.0.0: {}
 
 
-  isomorphic-git@1.31.0:
+  isomorphic-git@1.31.1:
     dependencies:
     dependencies:
       async-lock: 1.4.1
       async-lock: 1.4.1
       clean-git-ref: 2.0.1
       clean-git-ref: 2.0.1
@@ -8122,7 +8122,7 @@ snapshots:
 
 
   vite-plugin-build-id@0.5.0:
   vite-plugin-build-id@0.5.0:
     dependencies:
     dependencies:
-      isomorphic-git: 1.31.0
+      isomorphic-git: 1.31.1
       node-object-hash: 3.1.1
       node-object-hash: 3.1.1
       picocolors: 1.1.1
       picocolors: 1.1.1
       typescript: 5.8.3
       typescript: 5.8.3
@@ -8172,7 +8172,7 @@ snapshots:
       dompurify: 3.2.6
       dompurify: 3.2.6
       vue: 3.5.17(typescript@5.8.3)
       vue: 3.5.17(typescript@5.8.3)
 
 
-  vue-eslint-parser@10.1.3(eslint@9.29.0(jiti@2.4.2)):
+  vue-eslint-parser@10.1.4(eslint@9.29.0(jiti@2.4.2)):
     dependencies:
     dependencies:
       debug: 4.4.1
       debug: 4.4.1
       eslint: 9.29.0(jiti@2.4.2)
       eslint: 9.29.0(jiti@2.4.2)
@@ -8203,7 +8203,7 @@ snapshots:
 
 
   vue-tsc@2.2.10(typescript@5.8.3):
   vue-tsc@2.2.10(typescript@5.8.3):
     dependencies:
     dependencies:
-      '@volar/typescript': 2.4.14
+      '@volar/typescript': 2.4.15
       '@vue/language-core': 2.2.10(typescript@5.8.3)
       '@vue/language-core': 2.2.10(typescript@5.8.3)
       typescript: 5.8.3
       typescript: 5.8.3
 
 

+ 62 - 5
app/src/composables/useSSE.ts

@@ -17,12 +17,40 @@ export interface SSEOptions {
   reconnectInterval?: number
   reconnectInterval?: number
 }
 }
 
 
+/**
+ * Build SSE URL based on environment
+ */
+function buildSSEUrl(url: string): string {
+  // In development mode, connect directly to backend server
+  if (import.meta.env.DEV) {
+    const proxyTarget = import.meta.env.VITE_PROXY_TARGET || 'http://localhost:9000'
+
+    return urlJoin(proxyTarget, url)
+  }
+
+  // In production mode, use relative path
+  return urlJoin(window.location.pathname, url)
+}
+
 /**
 /**
  * SSE Composable
  * SSE Composable
  * Provide the ability to create, manage, and automatically clean up SSE connections
  * Provide the ability to create, manage, and automatically clean up SSE connections
  */
  */
 export function useSSE() {
 export function useSSE() {
   const sseInstance = shallowRef<SSE>()
   const sseInstance = shallowRef<SSE>()
+  const reconnectTimer = shallowRef<ReturnType<typeof setTimeout>>()
+  const isReconnecting = ref(false)
+  const currentOptions = shallowRef<SSEOptions>()
+
+  /**
+   * Clear reconnect timer
+   */
+  function clearReconnectTimer() {
+    if (reconnectTimer.value) {
+      clearTimeout(reconnectTimer.value)
+      reconnectTimer.value = undefined
+    }
+  }
 
 
   /**
   /**
    * Connect to SSE service
    * Connect to SSE service
@@ -36,7 +64,18 @@ export function useSSE() {
       reconnectInterval = 5000,
       reconnectInterval = 5000,
     } = options
     } = options
 
 
-    const fullUrl = urlJoin(window.location.pathname, url)
+    // Store current options for reconnection
+    currentOptions.value = options
+
+    // Clear any existing reconnect timer
+    clearReconnectTimer()
+
+    // Disconnect existing connection before creating new one
+    if (sseInstance.value) {
+      sseInstance.value.close()
+    }
+
+    const fullUrl = buildSSEUrl(url)
 
 
     const headers: Record<string, string> = {}
     const headers: Record<string, string> = {}
 
 
@@ -58,6 +97,9 @@ export function useSSE() {
         return
         return
       }
       }
 
 
+      // Reset reconnecting state on successful message
+      isReconnecting.value = false
+
       try {
       try {
         const parsedData = parseData ? JSON.parse(e.data) : e.data
         const parsedData = parseData ? JSON.parse(e.data) : e.data
         onMessage?.(parsedData)
         onMessage?.(parsedData)
@@ -71,10 +113,19 @@ export function useSSE() {
     sse.onerror = () => {
     sse.onerror = () => {
       onError?.()
       onError?.()
 
 
-      // Reconnect logic
-      setTimeout(() => {
-        connect(options)
-      }, reconnectInterval)
+      // Only attempt reconnection if not already reconnecting and we have current options
+      if (!isReconnecting.value && currentOptions.value) {
+        isReconnecting.value = true
+
+        // Clear any existing timer before setting new one
+        clearReconnectTimer()
+
+        reconnectTimer.value = setTimeout(() => {
+          if (currentOptions.value && isReconnecting.value) {
+            connect(currentOptions.value)
+          }
+        }, reconnectInterval)
+      }
     }
     }
 
 
     sseInstance.value = sse
     sseInstance.value = sse
@@ -85,6 +136,11 @@ export function useSSE() {
    * Disconnect SSE connection
    * Disconnect SSE connection
    */
    */
   function disconnect() {
   function disconnect() {
+    // Clear reconnect timer and state
+    clearReconnectTimer()
+    isReconnecting.value = false
+    currentOptions.value = undefined
+
     if (sseInstance.value) {
     if (sseInstance.value) {
       sseInstance.value.close()
       sseInstance.value.close()
       sseInstance.value = undefined
       sseInstance.value = undefined
@@ -102,5 +158,6 @@ export function useSSE() {
     connect,
     connect,
     disconnect,
     disconnect,
     sseInstance,
     sseInstance,
+    isReconnecting: readonly(isReconnecting),
   }
   }
 }
 }

+ 21 - 21
app/src/language/ar/app.po

@@ -638,7 +638,7 @@ msgstr "لا يمكن المقارنة: المحتوى المفقود"
 msgid "Cannot delete protected path: {0}"
 msgid "Cannot delete protected path: {0}"
 msgstr "لا يمكن حذف المسار المحمي: {0}"
 msgstr "لا يمكن حذف المسار المحمي: {0}"
 
 
-#: src/views/dashboard/NginxDashBoard.vue:129
+#: src/views/dashboard/NginxDashBoard.vue:134
 msgid "Cannot get performance data in this state"
 msgid "Cannot get performance data in this state"
 msgstr "لا يمكن الحصول على بيانات الأداء في هذه الحالة"
 msgstr "لا يمكن الحصول على بيانات الأداء في هذه الحالة"
 
 
@@ -1064,7 +1064,7 @@ msgstr "تأكيد كلمة المرور الجديدة"
 msgid "Connected"
 msgid "Connected"
 msgstr "متصل"
 msgstr "متصل"
 
 
-#: src/views/dashboard/NginxDashBoard.vue:82
+#: src/views/dashboard/NginxDashBoard.vue:87
 msgid "Connection error, trying to reconnect..."
 msgid "Connection error, trying to reconnect..."
 msgstr "خطأ في الاتصال، جاري محاولة إعادة الاتصال..."
 msgstr "خطأ في الاتصال، جاري محاولة إعادة الاتصال..."
 
 
@@ -1723,7 +1723,7 @@ msgstr "فشل تمكين الدفق %{name} على %{node}"
 msgid "Enable stream %{name} on %{node} successfully"
 msgid "Enable stream %{name} on %{node} successfully"
 msgstr "تم تمكين الدفق %{name} على %{node} بنجاح"
 msgstr "تم تمكين الدفق %{name} على %{node} بنجاح"
 
 
-#: src/views/dashboard/NginxDashBoard.vue:147
+#: src/views/dashboard/NginxDashBoard.vue:152
 msgid "Enable stub_status module"
 msgid "Enable stub_status module"
 msgstr "تمكين وحدة stub_status"
 msgstr "تمكين وحدة stub_status"
 
 
@@ -2306,7 +2306,7 @@ msgstr "توليد مفتاح خاص لتسجيل الحساب"
 msgid "Get acme user error: {0}"
 msgid "Get acme user error: {0}"
 msgstr "خطأ في الحصول على مستخدم ACME: {0}"
 msgstr "خطأ في الحصول على مستخدم ACME: {0}"
 
 
-#: src/views/dashboard/NginxDashBoard.vue:138
+#: src/views/dashboard/NginxDashBoard.vue:143
 msgid "Get data failed"
 msgid "Get data failed"
 msgstr "فشل الحصول على البيانات"
 msgstr "فشل الحصول على البيانات"
 
 
@@ -2637,7 +2637,7 @@ msgstr "وقت آخر نسخة احتياطية"
 msgid "Last checked at"
 msgid "Last checked at"
 msgstr "آخر فحص في"
 msgstr "آخر فحص في"
 
 
-#: src/views/dashboard/NginxDashBoard.vue:113
+#: src/views/dashboard/NginxDashBoard.vue:118
 msgid "Last update"
 msgid "Last update"
 msgstr "آخر تحديث"
 msgstr "آخر تحديث"
 
 
@@ -2724,7 +2724,7 @@ msgstr "وقت توقف المحمل"
 msgid "Loader Threshold"
 msgid "Loader Threshold"
 msgstr "عتبة المحمل"
 msgstr "عتبة المحمل"
 
 
-#: src/views/dashboard/NginxDashBoard.vue:175
+#: src/views/dashboard/NginxDashBoard.vue:180
 msgid "Loading data..."
 msgid "Loading data..."
 msgstr "جارٍ تحميل البيانات..."
 msgstr "جارٍ تحميل البيانات..."
 
 
@@ -2767,11 +2767,11 @@ msgstr ""
 msgid "Log List"
 msgid "Log List"
 msgstr "قائمة السجلات"
 msgstr "قائمة السجلات"
 
 
-#: src/routes/modules/auth.ts:14 src/views/other/Login.vue:263
+#: src/routes/modules/auth.ts:14 src/views/other/Login.vue:267
 msgid "Login"
 msgid "Login"
 msgstr "تسجيل الدخول"
 msgstr "تسجيل الدخول"
 
 
-#: src/views/other/Login.vue:75
+#: src/views/other/Login.vue:76
 msgid "Login successful"
 msgid "Login successful"
 msgstr "تم تسجيل الدخول بنجاح"
 msgstr "تم تسجيل الدخول بنجاح"
 
 
@@ -3022,7 +3022,7 @@ msgstr "توجيه متعدد الأسطر"
 msgid "Name"
 msgid "Name"
 msgstr "اسم"
 msgstr "اسم"
 
 
-#: src/views/dashboard/NginxDashBoard.vue:170
+#: src/views/dashboard/NginxDashBoard.vue:175
 msgid "Need to enable the stub_status module"
 msgid "Need to enable the stub_status module"
 msgstr "يجب تمكين وحدة stub_status"
 msgstr "يجب تمكين وحدة stub_status"
 
 
@@ -3174,8 +3174,8 @@ msgstr "خطأ في Nginx: {0}"
 
 
 #: src/components/NgxConfigEditor/NginxStatusAlert.vue:15
 #: src/components/NgxConfigEditor/NginxStatusAlert.vue:15
 #: src/composables/useNginxPerformance.ts:43
 #: src/composables/useNginxPerformance.ts:43
-#: src/views/dashboard/NginxDashBoard.vue:109
-#: src/views/dashboard/NginxDashBoard.vue:128
+#: src/views/dashboard/NginxDashBoard.vue:114
+#: src/views/dashboard/NginxDashBoard.vue:133
 #: src/views/dashboard/NginxDashBoard.vue:77
 #: src/views/dashboard/NginxDashBoard.vue:77
 msgid "Nginx is not running"
 msgid "Nginx is not running"
 msgstr "Nginx لا يعمل"
 msgstr "Nginx لا يعمل"
@@ -3184,7 +3184,7 @@ msgstr "Nginx لا يعمل"
 msgid "Nginx is not running in another container"
 msgid "Nginx is not running in another container"
 msgstr "إن Nginx لا يعمل في حاوية أخرى"
 msgstr "إن Nginx لا يعمل في حاوية أخرى"
 
 
-#: src/views/dashboard/NginxDashBoard.vue:109
+#: src/views/dashboard/NginxDashBoard.vue:114
 msgid "Nginx is running"
 msgid "Nginx is running"
 msgstr "إن Nginx يعمل"
 msgstr "إن Nginx يعمل"
 
 
@@ -3296,7 +3296,7 @@ msgstr "لا"
 msgid "No Action"
 msgid "No Action"
 msgstr "لا إجراء"
 msgstr "لا إجراء"
 
 
-#: src/views/dashboard/NginxDashBoard.vue:177
+#: src/views/dashboard/NginxDashBoard.vue:182
 msgid "No data"
 msgid "No data"
 msgstr "لا توجد بيانات"
 msgstr "لا توجد بيانات"
 
 
@@ -3487,7 +3487,7 @@ msgstr "مفتوح"
 msgid "OpenAI"
 msgid "OpenAI"
 msgstr "أوبن أي آي"
 msgstr "أوبن أي آي"
 
 
-#: src/components/TwoFA/Authorization.vue:100 src/views/other/Login.vue:272
+#: src/components/TwoFA/Authorization.vue:100 src/views/other/Login.vue:276
 msgid "Or"
 msgid "Or"
 msgstr "أو"
 msgstr "أو"
 
 
@@ -3560,7 +3560,7 @@ msgstr ""
 "التعرف على الوجه أو كلمة مرور الجهاز أو رقم التعريف الشخصي. يمكن استخدامها "
 "التعرف على الوجه أو كلمة مرور الجهاز أو رقم التعريف الشخصي. يمكن استخدامها "
 "كبديل لكلمة المرور أو كطريقة للمصادقة الثنائية."
 "كبديل لكلمة المرور أو كطريقة للمصادقة الثنائية."
 
 
-#: src/views/other/Login.vue:224 src/views/user/userColumns.tsx:16
+#: src/views/other/Login.vue:228 src/views/user/userColumns.tsx:16
 msgid "Password"
 msgid "Password"
 msgstr "كلمة المرور"
 msgstr "كلمة المرور"
 
 
@@ -3622,7 +3622,7 @@ msgstr "خطأ في تنفيذ ترقية النواة"
 msgid "Performance"
 msgid "Performance"
 msgstr "الأداء"
 msgstr "الأداء"
 
 
-#: src/views/dashboard/NginxDashBoard.vue:182
+#: src/views/dashboard/NginxDashBoard.vue:187
 msgid "Performance Metrics"
 msgid "Performance Metrics"
 msgstr "مقاييس الأداء"
 msgstr "مقاييس الأداء"
 
 
@@ -3646,7 +3646,7 @@ msgstr "مسار PID غير موجود"
 msgid "Plain text is empty"
 msgid "Plain text is empty"
 msgstr "النص العادي فارغ"
 msgstr "النص العادي فارغ"
 
 
-#: src/views/dashboard/NginxDashBoard.vue:171
+#: src/views/dashboard/NginxDashBoard.vue:176
 msgid ""
 msgid ""
 "Please enable the stub_status module to get request statistics, connection "
 "Please enable the stub_status module to get request statistics, connection "
 "count, etc."
 "count, etc."
@@ -4625,7 +4625,7 @@ msgstr "منطقة الذاكرة المشتركة"
 msgid "Show"
 msgid "Show"
 msgstr "عرض"
 msgstr "عرض"
 
 
-#: src/views/other/Login.vue:281
+#: src/views/other/Login.vue:285
 msgid "Sign in with a passkey"
 msgid "Sign in with a passkey"
 msgstr "تسجيل الدخول باستخدام مفتاح المرور"
 msgstr "تسجيل الدخول باستخدام مفتاح المرور"
 
 
@@ -4730,7 +4730,7 @@ msgstr "مسار مفتاح SSL"
 msgid "SSL key path is required when HTTPS is enabled"
 msgid "SSL key path is required when HTTPS is enabled"
 msgstr "مسار مفتاح SSL مطلوب عند تمكين HTTPS"
 msgstr "مسار مفتاح SSL مطلوب عند تمكين HTTPS"
 
 
-#: src/views/other/Login.vue:238
+#: src/views/other/Login.vue:242
 msgid "SSO Login"
 msgid "SSO Login"
 msgstr "تسجيل الدخول عبر SSO"
 msgstr "تسجيل الدخول عبر SSO"
 
 
@@ -5169,7 +5169,7 @@ msgid ""
 "_./:"
 "_./:"
 msgstr "يجب أن يحتوي هذا الحقل على أحرف وأحرف يونيكود وأرقام و -_./: فقط"
 msgstr "يجب أن يحتوي هذا الحقل على أحرف وأحرف يونيكود وأرقام و -_./: فقط"
 
 
-#: src/views/dashboard/NginxDashBoard.vue:150
+#: src/views/dashboard/NginxDashBoard.vue:155
 msgid ""
 msgid ""
 "This module provides Nginx request statistics, connection count, etc. data. "
 "This module provides Nginx request statistics, connection count, etc. data. "
 "After enabling it, you can view performance statistics"
 "After enabling it, you can view performance statistics"
@@ -5481,7 +5481,7 @@ msgstr "المستخدم لم يتم تفعيل OTP كعامل ثنائي"
 msgid "User Profile"
 msgid "User Profile"
 msgstr "ملف المستخدم"
 msgstr "ملف المستخدم"
 
 
-#: src/views/other/Login.vue:214 src/views/user/userColumns.tsx:7
+#: src/views/other/Login.vue:218 src/views/user/userColumns.tsx:7
 #: src/views/user/UserProfile.vue:127 src/views/user/UserProfile.vue:131
 #: src/views/user/UserProfile.vue:127 src/views/user/UserProfile.vue:131
 msgid "Username"
 msgid "Username"
 msgstr "اسم المستخدم"
 msgstr "اسم المستخدم"

+ 21 - 21
app/src/language/de_DE/app.po

@@ -655,7 +655,7 @@ msgstr "Kann nicht vergleichen: Fehlende Inhalte"
 msgid "Cannot delete protected path: {0}"
 msgid "Cannot delete protected path: {0}"
 msgstr "Geschützter Pfad kann nicht gelöscht werden: {0}"
 msgstr "Geschützter Pfad kann nicht gelöscht werden: {0}"
 
 
-#: src/views/dashboard/NginxDashBoard.vue:129
+#: src/views/dashboard/NginxDashBoard.vue:134
 msgid "Cannot get performance data in this state"
 msgid "Cannot get performance data in this state"
 msgstr "In diesem Zustand können Leistungsdaten nicht erhalten"
 msgstr "In diesem Zustand können Leistungsdaten nicht erhalten"
 
 
@@ -1081,7 +1081,7 @@ msgstr "Neues Passwort bestätigen"
 msgid "Connected"
 msgid "Connected"
 msgstr "Verbunden"
 msgstr "Verbunden"
 
 
-#: src/views/dashboard/NginxDashBoard.vue:82
+#: src/views/dashboard/NginxDashBoard.vue:87
 msgid "Connection error, trying to reconnect..."
 msgid "Connection error, trying to reconnect..."
 msgstr "Verbindungsfehler, versuche erneut zu verbinden..."
 msgstr "Verbindungsfehler, versuche erneut zu verbinden..."
 
 
@@ -1754,7 +1754,7 @@ msgstr "Aktivierung des Streams %{name} auf %{node} fehlgeschlagen"
 msgid "Enable stream %{name} on %{node} successfully"
 msgid "Enable stream %{name} on %{node} successfully"
 msgstr "Stream %{name} auf %{node} erfolgreich aktiviert"
 msgstr "Stream %{name} auf %{node} erfolgreich aktiviert"
 
 
-#: src/views/dashboard/NginxDashBoard.vue:147
+#: src/views/dashboard/NginxDashBoard.vue:152
 msgid "Enable stub_status module"
 msgid "Enable stub_status module"
 msgstr "Aktiviere stub_status-Modul"
 msgstr "Aktiviere stub_status-Modul"
 
 
@@ -2339,7 +2339,7 @@ msgstr "Generiere privaten Schlüssel zur Registrierung des Kontos"
 msgid "Get acme user error: {0}"
 msgid "Get acme user error: {0}"
 msgstr "Fehler beim Abrufen des ACME-Benutzers: {0}"
 msgstr "Fehler beim Abrufen des ACME-Benutzers: {0}"
 
 
-#: src/views/dashboard/NginxDashBoard.vue:138
+#: src/views/dashboard/NginxDashBoard.vue:143
 msgid "Get data failed"
 msgid "Get data failed"
 msgstr "Datenabruf fehlgeschlagen"
 msgstr "Datenabruf fehlgeschlagen"
 
 
@@ -2675,7 +2675,7 @@ msgstr "Letzter Sicherungszeitpunkt"
 msgid "Last checked at"
 msgid "Last checked at"
 msgstr "Zuletzt überprüft am"
 msgstr "Zuletzt überprüft am"
 
 
-#: src/views/dashboard/NginxDashBoard.vue:113
+#: src/views/dashboard/NginxDashBoard.vue:118
 msgid "Last update"
 msgid "Last update"
 msgstr "Letzte Aktualisierung"
 msgstr "Letzte Aktualisierung"
 
 
@@ -2763,7 +2763,7 @@ msgstr "Loader-Pause"
 msgid "Loader Threshold"
 msgid "Loader Threshold"
 msgstr "Laderschwelle"
 msgstr "Laderschwelle"
 
 
-#: src/views/dashboard/NginxDashBoard.vue:175
+#: src/views/dashboard/NginxDashBoard.vue:180
 msgid "Loading data..."
 msgid "Loading data..."
 msgstr "Daten werden geladen..."
 msgstr "Daten werden geladen..."
 
 
@@ -2806,11 +2806,11 @@ msgstr ""
 msgid "Log List"
 msgid "Log List"
 msgstr "Protokollliste"
 msgstr "Protokollliste"
 
 
-#: src/routes/modules/auth.ts:14 src/views/other/Login.vue:263
+#: src/routes/modules/auth.ts:14 src/views/other/Login.vue:267
 msgid "Login"
 msgid "Login"
 msgstr "Login"
 msgstr "Login"
 
 
-#: src/views/other/Login.vue:75
+#: src/views/other/Login.vue:76
 msgid "Login successful"
 msgid "Login successful"
 msgstr "Login erfolgreich"
 msgstr "Login erfolgreich"
 
 
@@ -3062,7 +3062,7 @@ msgstr "Mehrzeilige Direktive"
 msgid "Name"
 msgid "Name"
 msgstr "Name"
 msgstr "Name"
 
 
-#: src/views/dashboard/NginxDashBoard.vue:170
+#: src/views/dashboard/NginxDashBoard.vue:175
 msgid "Need to enable the stub_status module"
 msgid "Need to enable the stub_status module"
 msgstr "Das stub_status-Modul muss aktiviert werden"
 msgstr "Das stub_status-Modul muss aktiviert werden"
 
 
@@ -3214,8 +3214,8 @@ msgstr "Nginx-Fehler: {0}"
 
 
 #: src/components/NgxConfigEditor/NginxStatusAlert.vue:15
 #: src/components/NgxConfigEditor/NginxStatusAlert.vue:15
 #: src/composables/useNginxPerformance.ts:43
 #: src/composables/useNginxPerformance.ts:43
-#: src/views/dashboard/NginxDashBoard.vue:109
-#: src/views/dashboard/NginxDashBoard.vue:128
+#: src/views/dashboard/NginxDashBoard.vue:114
+#: src/views/dashboard/NginxDashBoard.vue:133
 #: src/views/dashboard/NginxDashBoard.vue:77
 #: src/views/dashboard/NginxDashBoard.vue:77
 msgid "Nginx is not running"
 msgid "Nginx is not running"
 msgstr "Nginx läuft nicht"
 msgstr "Nginx läuft nicht"
@@ -3224,7 +3224,7 @@ msgstr "Nginx läuft nicht"
 msgid "Nginx is not running in another container"
 msgid "Nginx is not running in another container"
 msgstr "Nginx läuft nicht in einem anderen Container"
 msgstr "Nginx läuft nicht in einem anderen Container"
 
 
-#: src/views/dashboard/NginxDashBoard.vue:109
+#: src/views/dashboard/NginxDashBoard.vue:114
 msgid "Nginx is running"
 msgid "Nginx is running"
 msgstr "Nginx läuft"
 msgstr "Nginx läuft"
 
 
@@ -3339,7 +3339,7 @@ msgstr "Nein"
 msgid "No Action"
 msgid "No Action"
 msgstr "Keine Aktion"
 msgstr "Keine Aktion"
 
 
-#: src/views/dashboard/NginxDashBoard.vue:177
+#: src/views/dashboard/NginxDashBoard.vue:182
 msgid "No data"
 msgid "No data"
 msgstr "Keine Daten"
 msgstr "Keine Daten"
 
 
@@ -3534,7 +3534,7 @@ msgstr "Offen"
 msgid "OpenAI"
 msgid "OpenAI"
 msgstr "OpenAI"
 msgstr "OpenAI"
 
 
-#: src/components/TwoFA/Authorization.vue:100 src/views/other/Login.vue:272
+#: src/components/TwoFA/Authorization.vue:100 src/views/other/Login.vue:276
 msgid "Or"
 msgid "Or"
 msgstr "Oder"
 msgstr "Oder"
 
 
@@ -3607,7 +3607,7 @@ msgstr ""
 "Berührung, Gesichtserkennung, ein Gerätepasswort oder eine PIN validieren. "
 "Berührung, Gesichtserkennung, ein Gerätepasswort oder eine PIN validieren. "
 "Sie können als Passwortersatz oder als 2FA-Methode verwendet werden."
 "Sie können als Passwortersatz oder als 2FA-Methode verwendet werden."
 
 
-#: src/views/other/Login.vue:224 src/views/user/userColumns.tsx:16
+#: src/views/other/Login.vue:228 src/views/user/userColumns.tsx:16
 msgid "Password"
 msgid "Password"
 msgstr "Passwort"
 msgstr "Passwort"
 
 
@@ -3670,7 +3670,7 @@ msgstr "Führe Core-Upgrade-Fehler aus"
 msgid "Performance"
 msgid "Performance"
 msgstr "Leistung"
 msgstr "Leistung"
 
 
-#: src/views/dashboard/NginxDashBoard.vue:182
+#: src/views/dashboard/NginxDashBoard.vue:187
 msgid "Performance Metrics"
 msgid "Performance Metrics"
 msgstr "Leistungsmetriken"
 msgstr "Leistungsmetriken"
 
 
@@ -3694,7 +3694,7 @@ msgstr "PID-Pfad existiert nicht"
 msgid "Plain text is empty"
 msgid "Plain text is empty"
 msgstr "Klartext ist leer"
 msgstr "Klartext ist leer"
 
 
-#: src/views/dashboard/NginxDashBoard.vue:171
+#: src/views/dashboard/NginxDashBoard.vue:176
 msgid ""
 msgid ""
 "Please enable the stub_status module to get request statistics, connection "
 "Please enable the stub_status module to get request statistics, connection "
 "count, etc."
 "count, etc."
@@ -4705,7 +4705,7 @@ msgstr "Gemeinsamer Speicherbereich"
 msgid "Show"
 msgid "Show"
 msgstr "Zeige"
 msgstr "Zeige"
 
 
-#: src/views/other/Login.vue:281
+#: src/views/other/Login.vue:285
 msgid "Sign in with a passkey"
 msgid "Sign in with a passkey"
 msgstr "Mit einem Passkey anmelden"
 msgstr "Mit einem Passkey anmelden"
 
 
@@ -4814,7 +4814,7 @@ msgstr "SSL-Schlüsselpfad"
 msgid "SSL key path is required when HTTPS is enabled"
 msgid "SSL key path is required when HTTPS is enabled"
 msgstr "Der SSL-Schlüsselpfad ist erforderlich, wenn HTTPS aktiviert ist"
 msgstr "Der SSL-Schlüsselpfad ist erforderlich, wenn HTTPS aktiviert ist"
 
 
-#: src/views/other/Login.vue:238
+#: src/views/other/Login.vue:242
 msgid "SSO Login"
 msgid "SSO Login"
 msgstr "SSO-Anmeldung"
 msgstr "SSO-Anmeldung"
 
 
@@ -5265,7 +5265,7 @@ msgid ""
 msgstr ""
 msgstr ""
 "Dieses Feld darf nur Buchstaben, Unicode-Zeichen, Zahlen und -_./: enthalten"
 "Dieses Feld darf nur Buchstaben, Unicode-Zeichen, Zahlen und -_./: enthalten"
 
 
-#: src/views/dashboard/NginxDashBoard.vue:150
+#: src/views/dashboard/NginxDashBoard.vue:155
 msgid ""
 msgid ""
 "This module provides Nginx request statistics, connection count, etc. data. "
 "This module provides Nginx request statistics, connection count, etc. data. "
 "After enabling it, you can view performance statistics"
 "After enabling it, you can view performance statistics"
@@ -5583,7 +5583,7 @@ msgstr "Benutzer hat OTP nicht als 2FA aktiviert"
 msgid "User Profile"
 msgid "User Profile"
 msgstr "Benutzerprofil"
 msgstr "Benutzerprofil"
 
 
-#: src/views/other/Login.vue:214 src/views/user/userColumns.tsx:7
+#: src/views/other/Login.vue:218 src/views/user/userColumns.tsx:7
 #: src/views/user/UserProfile.vue:127 src/views/user/UserProfile.vue:131
 #: src/views/user/UserProfile.vue:127 src/views/user/UserProfile.vue:131
 msgid "Username"
 msgid "Username"
 msgstr "Benutzername"
 msgstr "Benutzername"

+ 21 - 21
app/src/language/en/app.po

@@ -614,7 +614,7 @@ msgstr ""
 msgid "Cannot delete protected path: {0}"
 msgid "Cannot delete protected path: {0}"
 msgstr ""
 msgstr ""
 
 
-#: src/views/dashboard/NginxDashBoard.vue:129
+#: src/views/dashboard/NginxDashBoard.vue:134
 msgid "Cannot get performance data in this state"
 msgid "Cannot get performance data in this state"
 msgstr ""
 msgstr ""
 
 
@@ -1002,7 +1002,7 @@ msgstr ""
 msgid "Connected"
 msgid "Connected"
 msgstr ""
 msgstr ""
 
 
-#: src/views/dashboard/NginxDashBoard.vue:82
+#: src/views/dashboard/NginxDashBoard.vue:87
 msgid "Connection error, trying to reconnect..."
 msgid "Connection error, trying to reconnect..."
 msgstr ""
 msgstr ""
 
 
@@ -1658,7 +1658,7 @@ msgstr ""
 msgid "Enable stream %{name} on %{node} successfully"
 msgid "Enable stream %{name} on %{node} successfully"
 msgstr ""
 msgstr ""
 
 
-#: src/views/dashboard/NginxDashBoard.vue:147
+#: src/views/dashboard/NginxDashBoard.vue:152
 msgid "Enable stub_status module"
 msgid "Enable stub_status module"
 msgstr ""
 msgstr ""
 
 
@@ -2241,7 +2241,7 @@ msgstr ""
 msgid "Get acme user error: {0}"
 msgid "Get acme user error: {0}"
 msgstr ""
 msgstr ""
 
 
-#: src/views/dashboard/NginxDashBoard.vue:138
+#: src/views/dashboard/NginxDashBoard.vue:143
 msgid "Get data failed"
 msgid "Get data failed"
 msgstr ""
 msgstr ""
 
 
@@ -2562,7 +2562,7 @@ msgstr ""
 msgid "Last checked at"
 msgid "Last checked at"
 msgstr ""
 msgstr ""
 
 
-#: src/views/dashboard/NginxDashBoard.vue:113
+#: src/views/dashboard/NginxDashBoard.vue:118
 msgid "Last update"
 msgid "Last update"
 msgstr ""
 msgstr ""
 
 
@@ -2649,7 +2649,7 @@ msgstr ""
 msgid "Loader Threshold"
 msgid "Loader Threshold"
 msgstr ""
 msgstr ""
 
 
-#: src/views/dashboard/NginxDashBoard.vue:175
+#: src/views/dashboard/NginxDashBoard.vue:180
 msgid "Loading data..."
 msgid "Loading data..."
 msgstr ""
 msgstr ""
 
 
@@ -2689,11 +2689,11 @@ msgstr ""
 msgid "Log List"
 msgid "Log List"
 msgstr ""
 msgstr ""
 
 
-#: src/routes/modules/auth.ts:14 src/views/other/Login.vue:263
+#: src/routes/modules/auth.ts:14 src/views/other/Login.vue:267
 msgid "Login"
 msgid "Login"
 msgstr ""
 msgstr ""
 
 
-#: src/views/other/Login.vue:75
+#: src/views/other/Login.vue:76
 msgid "Login successful"
 msgid "Login successful"
 msgstr ""
 msgstr ""
 
 
@@ -2936,7 +2936,7 @@ msgstr ""
 msgid "Name"
 msgid "Name"
 msgstr ""
 msgstr ""
 
 
-#: src/views/dashboard/NginxDashBoard.vue:170
+#: src/views/dashboard/NginxDashBoard.vue:175
 msgid "Need to enable the stub_status module"
 msgid "Need to enable the stub_status module"
 msgstr ""
 msgstr ""
 
 
@@ -3088,8 +3088,8 @@ msgstr ""
 
 
 #: src/components/NgxConfigEditor/NginxStatusAlert.vue:15
 #: src/components/NgxConfigEditor/NginxStatusAlert.vue:15
 #: src/composables/useNginxPerformance.ts:43
 #: src/composables/useNginxPerformance.ts:43
-#: src/views/dashboard/NginxDashBoard.vue:109
-#: src/views/dashboard/NginxDashBoard.vue:128
+#: src/views/dashboard/NginxDashBoard.vue:114
+#: src/views/dashboard/NginxDashBoard.vue:133
 #: src/views/dashboard/NginxDashBoard.vue:77
 #: src/views/dashboard/NginxDashBoard.vue:77
 msgid "Nginx is not running"
 msgid "Nginx is not running"
 msgstr ""
 msgstr ""
@@ -3098,7 +3098,7 @@ msgstr ""
 msgid "Nginx is not running in another container"
 msgid "Nginx is not running in another container"
 msgstr ""
 msgstr ""
 
 
-#: src/views/dashboard/NginxDashBoard.vue:109
+#: src/views/dashboard/NginxDashBoard.vue:114
 msgid "Nginx is running"
 msgid "Nginx is running"
 msgstr ""
 msgstr ""
 
 
@@ -3210,7 +3210,7 @@ msgstr ""
 msgid "No Action"
 msgid "No Action"
 msgstr ""
 msgstr ""
 
 
-#: src/views/dashboard/NginxDashBoard.vue:177
+#: src/views/dashboard/NginxDashBoard.vue:182
 msgid "No data"
 msgid "No data"
 msgstr ""
 msgstr ""
 
 
@@ -3395,7 +3395,7 @@ msgstr ""
 msgid "OpenAI"
 msgid "OpenAI"
 msgstr ""
 msgstr ""
 
 
-#: src/components/TwoFA/Authorization.vue:100 src/views/other/Login.vue:272
+#: src/components/TwoFA/Authorization.vue:100 src/views/other/Login.vue:276
 msgid "Or"
 msgid "Or"
 msgstr ""
 msgstr ""
 
 
@@ -3465,7 +3465,7 @@ msgid ""
 "password replacement or as a 2FA method."
 "password replacement or as a 2FA method."
 msgstr ""
 msgstr ""
 
 
-#: src/views/other/Login.vue:224 src/views/user/userColumns.tsx:16
+#: src/views/other/Login.vue:228 src/views/user/userColumns.tsx:16
 msgid "Password"
 msgid "Password"
 msgstr ""
 msgstr ""
 
 
@@ -3527,7 +3527,7 @@ msgstr ""
 msgid "Performance"
 msgid "Performance"
 msgstr ""
 msgstr ""
 
 
-#: src/views/dashboard/NginxDashBoard.vue:182
+#: src/views/dashboard/NginxDashBoard.vue:187
 msgid "Performance Metrics"
 msgid "Performance Metrics"
 msgstr ""
 msgstr ""
 
 
@@ -3551,7 +3551,7 @@ msgstr ""
 msgid "Plain text is empty"
 msgid "Plain text is empty"
 msgstr ""
 msgstr ""
 
 
-#: src/views/dashboard/NginxDashBoard.vue:171
+#: src/views/dashboard/NginxDashBoard.vue:176
 msgid ""
 msgid ""
 "Please enable the stub_status module to get request statistics, connection "
 "Please enable the stub_status module to get request statistics, connection "
 "count, etc."
 "count, etc."
@@ -4513,7 +4513,7 @@ msgstr ""
 msgid "Show"
 msgid "Show"
 msgstr ""
 msgstr ""
 
 
-#: src/views/other/Login.vue:281
+#: src/views/other/Login.vue:285
 msgid "Sign in with a passkey"
 msgid "Sign in with a passkey"
 msgstr ""
 msgstr ""
 
 
@@ -4618,7 +4618,7 @@ msgstr ""
 msgid "SSL key path is required when HTTPS is enabled"
 msgid "SSL key path is required when HTTPS is enabled"
 msgstr ""
 msgstr ""
 
 
-#: src/views/other/Login.vue:238
+#: src/views/other/Login.vue:242
 msgid "SSO Login"
 msgid "SSO Login"
 msgstr ""
 msgstr ""
 
 
@@ -5028,7 +5028,7 @@ msgid ""
 "_./:"
 "_./:"
 msgstr ""
 msgstr ""
 
 
-#: src/views/dashboard/NginxDashBoard.vue:150
+#: src/views/dashboard/NginxDashBoard.vue:155
 msgid ""
 msgid ""
 "This module provides Nginx request statistics, connection count, etc. data. "
 "This module provides Nginx request statistics, connection count, etc. data. "
 "After enabling it, you can view performance statistics"
 "After enabling it, you can view performance statistics"
@@ -5316,7 +5316,7 @@ msgstr ""
 msgid "User Profile"
 msgid "User Profile"
 msgstr ""
 msgstr ""
 
 
-#: src/views/other/Login.vue:214 src/views/user/userColumns.tsx:7
+#: src/views/other/Login.vue:218 src/views/user/userColumns.tsx:7
 #: src/views/user/UserProfile.vue:127 src/views/user/UserProfile.vue:131
 #: src/views/user/UserProfile.vue:127 src/views/user/UserProfile.vue:131
 msgid "Username"
 msgid "Username"
 msgstr ""
 msgstr ""

+ 21 - 21
app/src/language/es/app.po

@@ -663,7 +663,7 @@ msgstr "No se puede comparar: faltando contenido"
 msgid "Cannot delete protected path: {0}"
 msgid "Cannot delete protected path: {0}"
 msgstr "No se puede eliminar la ruta protegida: {0}"
 msgstr "No se puede eliminar la ruta protegida: {0}"
 
 
-#: src/views/dashboard/NginxDashBoard.vue:129
+#: src/views/dashboard/NginxDashBoard.vue:134
 msgid "Cannot get performance data in this state"
 msgid "Cannot get performance data in this state"
 msgstr "No se puede obtener datos de rendimiento en este estado"
 msgstr "No se puede obtener datos de rendimiento en este estado"
 
 
@@ -1087,7 +1087,7 @@ msgstr "Confirmar nueva contraseña"
 msgid "Connected"
 msgid "Connected"
 msgstr "Conectado"
 msgstr "Conectado"
 
 
-#: src/views/dashboard/NginxDashBoard.vue:82
+#: src/views/dashboard/NginxDashBoard.vue:87
 msgid "Connection error, trying to reconnect..."
 msgid "Connection error, trying to reconnect..."
 msgstr "Error de conexión, intentando reconectar..."
 msgstr "Error de conexión, intentando reconectar..."
 
 
@@ -1756,7 +1756,7 @@ msgstr "No se pudo habilitar el flujo %{name} en %{node}"
 msgid "Enable stream %{name} on %{node} successfully"
 msgid "Enable stream %{name} on %{node} successfully"
 msgstr "Habilitar el flujo %{name} en %{node} correctamente"
 msgstr "Habilitar el flujo %{name} en %{node} correctamente"
 
 
-#: src/views/dashboard/NginxDashBoard.vue:147
+#: src/views/dashboard/NginxDashBoard.vue:152
 msgid "Enable stub_status module"
 msgid "Enable stub_status module"
 msgstr "Habilitar módulo stub_status"
 msgstr "Habilitar módulo stub_status"
 
 
@@ -2344,7 +2344,7 @@ msgstr "Generando clave privada para registrar cuenta"
 msgid "Get acme user error: {0}"
 msgid "Get acme user error: {0}"
 msgstr "Error al obtener el usuario de ACME: {0}"
 msgstr "Error al obtener el usuario de ACME: {0}"
 
 
-#: src/views/dashboard/NginxDashBoard.vue:138
+#: src/views/dashboard/NginxDashBoard.vue:143
 msgid "Get data failed"
 msgid "Get data failed"
 msgstr "Error al obtener los datos"
 msgstr "Error al obtener los datos"
 
 
@@ -2679,7 +2679,7 @@ msgstr "Hora del último respaldo"
 msgid "Last checked at"
 msgid "Last checked at"
 msgstr "Comprobado por última vez el"
 msgstr "Comprobado por última vez el"
 
 
-#: src/views/dashboard/NginxDashBoard.vue:113
+#: src/views/dashboard/NginxDashBoard.vue:118
 msgid "Last update"
 msgid "Last update"
 msgstr "Última actualización"
 msgstr "Última actualización"
 
 
@@ -2767,7 +2767,7 @@ msgstr "Pausa del cargador"
 msgid "Loader Threshold"
 msgid "Loader Threshold"
 msgstr "Umbral del cargador"
 msgstr "Umbral del cargador"
 
 
-#: src/views/dashboard/NginxDashBoard.vue:175
+#: src/views/dashboard/NginxDashBoard.vue:180
 msgid "Loading data..."
 msgid "Loading data..."
 msgstr "Cargando datos..."
 msgstr "Cargando datos..."
 
 
@@ -2810,11 +2810,11 @@ msgstr ""
 msgid "Log List"
 msgid "Log List"
 msgstr "Lista de registros"
 msgstr "Lista de registros"
 
 
-#: src/routes/modules/auth.ts:14 src/views/other/Login.vue:263
+#: src/routes/modules/auth.ts:14 src/views/other/Login.vue:267
 msgid "Login"
 msgid "Login"
 msgstr "Acceso"
 msgstr "Acceso"
 
 
-#: src/views/other/Login.vue:75
+#: src/views/other/Login.vue:76
 msgid "Login successful"
 msgid "Login successful"
 msgstr "Acceso exitoso"
 msgstr "Acceso exitoso"
 
 
@@ -3066,7 +3066,7 @@ msgstr "Directiva multilínea"
 msgid "Name"
 msgid "Name"
 msgstr "Nombre"
 msgstr "Nombre"
 
 
-#: src/views/dashboard/NginxDashBoard.vue:170
+#: src/views/dashboard/NginxDashBoard.vue:175
 msgid "Need to enable the stub_status module"
 msgid "Need to enable the stub_status module"
 msgstr "Es necesario habilitar el módulo stub_status"
 msgstr "Es necesario habilitar el módulo stub_status"
 
 
@@ -3218,8 +3218,8 @@ msgstr "Error de Nginx: {0}"
 
 
 #: src/components/NgxConfigEditor/NginxStatusAlert.vue:15
 #: src/components/NgxConfigEditor/NginxStatusAlert.vue:15
 #: src/composables/useNginxPerformance.ts:43
 #: src/composables/useNginxPerformance.ts:43
-#: src/views/dashboard/NginxDashBoard.vue:109
-#: src/views/dashboard/NginxDashBoard.vue:128
+#: src/views/dashboard/NginxDashBoard.vue:114
+#: src/views/dashboard/NginxDashBoard.vue:133
 #: src/views/dashboard/NginxDashBoard.vue:77
 #: src/views/dashboard/NginxDashBoard.vue:77
 msgid "Nginx is not running"
 msgid "Nginx is not running"
 msgstr "Nginx no se está ejecutando"
 msgstr "Nginx no se está ejecutando"
@@ -3228,7 +3228,7 @@ msgstr "Nginx no se está ejecutando"
 msgid "Nginx is not running in another container"
 msgid "Nginx is not running in another container"
 msgstr "Nginx no se está ejecutando en otro contenedor"
 msgstr "Nginx no se está ejecutando en otro contenedor"
 
 
-#: src/views/dashboard/NginxDashBoard.vue:109
+#: src/views/dashboard/NginxDashBoard.vue:114
 msgid "Nginx is running"
 msgid "Nginx is running"
 msgstr "Nginx está en ejecución"
 msgstr "Nginx está en ejecución"
 
 
@@ -3343,7 +3343,7 @@ msgstr "No"
 msgid "No Action"
 msgid "No Action"
 msgstr "Sin acción"
 msgstr "Sin acción"
 
 
-#: src/views/dashboard/NginxDashBoard.vue:177
+#: src/views/dashboard/NginxDashBoard.vue:182
 msgid "No data"
 msgid "No data"
 msgstr "Sin datos"
 msgstr "Sin datos"
 
 
@@ -3535,7 +3535,7 @@ msgstr "Abierto"
 msgid "OpenAI"
 msgid "OpenAI"
 msgstr "OpenAI"
 msgstr "OpenAI"
 
 
-#: src/components/TwoFA/Authorization.vue:100 src/views/other/Login.vue:272
+#: src/components/TwoFA/Authorization.vue:100 src/views/other/Login.vue:276
 msgid "Or"
 msgid "Or"
 msgstr "O"
 msgstr "O"
 
 
@@ -3609,7 +3609,7 @@ msgstr ""
 "dispositivo o un PIN. Se pueden utilizar como reemplazo de contraseña o como "
 "dispositivo o un PIN. Se pueden utilizar como reemplazo de contraseña o como "
 "método de autenticación de dos factores."
 "método de autenticación de dos factores."
 
 
-#: src/views/other/Login.vue:224 src/views/user/userColumns.tsx:16
+#: src/views/other/Login.vue:228 src/views/user/userColumns.tsx:16
 msgid "Password"
 msgid "Password"
 msgstr "Contraseña"
 msgstr "Contraseña"
 
 
@@ -3672,7 +3672,7 @@ msgstr "Error al ejecutar la actualización del kernel"
 msgid "Performance"
 msgid "Performance"
 msgstr "Rendimiento"
 msgstr "Rendimiento"
 
 
-#: src/views/dashboard/NginxDashBoard.vue:182
+#: src/views/dashboard/NginxDashBoard.vue:187
 msgid "Performance Metrics"
 msgid "Performance Metrics"
 msgstr "Métricas de rendimiento"
 msgstr "Métricas de rendimiento"
 
 
@@ -3696,7 +3696,7 @@ msgstr "La ruta del PID no existe"
 msgid "Plain text is empty"
 msgid "Plain text is empty"
 msgstr "El texto plano está vacío"
 msgstr "El texto plano está vacío"
 
 
-#: src/views/dashboard/NginxDashBoard.vue:171
+#: src/views/dashboard/NginxDashBoard.vue:176
 msgid ""
 msgid ""
 "Please enable the stub_status module to get request statistics, connection "
 "Please enable the stub_status module to get request statistics, connection "
 "count, etc."
 "count, etc."
@@ -4703,7 +4703,7 @@ msgstr "Zona de Memoria Compartida"
 msgid "Show"
 msgid "Show"
 msgstr "Mostrar"
 msgstr "Mostrar"
 
 
-#: src/views/other/Login.vue:281
+#: src/views/other/Login.vue:285
 msgid "Sign in with a passkey"
 msgid "Sign in with a passkey"
 msgstr "Iniciar sesión con una llave de acceso"
 msgstr "Iniciar sesión con una llave de acceso"
 
 
@@ -4812,7 +4812,7 @@ msgstr "Ruta de la clave SSL"
 msgid "SSL key path is required when HTTPS is enabled"
 msgid "SSL key path is required when HTTPS is enabled"
 msgstr "Se requiere la ruta de la clave SSL cuando HTTPS está habilitado"
 msgstr "Se requiere la ruta de la clave SSL cuando HTTPS está habilitado"
 
 
-#: src/views/other/Login.vue:238
+#: src/views/other/Login.vue:242
 msgid "SSO Login"
 msgid "SSO Login"
 msgstr "Acceso SSO"
 msgstr "Acceso SSO"
 
 
@@ -5260,7 +5260,7 @@ msgid ""
 msgstr ""
 msgstr ""
 "Este campo solo debe contener letras, caracteres Unicode, números y -_./:"
 "Este campo solo debe contener letras, caracteres Unicode, números y -_./:"
 
 
-#: src/views/dashboard/NginxDashBoard.vue:150
+#: src/views/dashboard/NginxDashBoard.vue:155
 msgid ""
 msgid ""
 "This module provides Nginx request statistics, connection count, etc. data. "
 "This module provides Nginx request statistics, connection count, etc. data. "
 "After enabling it, you can view performance statistics"
 "After enabling it, you can view performance statistics"
@@ -5577,7 +5577,7 @@ msgstr "Usuario no ha habilitado OTP como 2FA"
 msgid "User Profile"
 msgid "User Profile"
 msgstr "Perfil de usuario"
 msgstr "Perfil de usuario"
 
 
-#: src/views/other/Login.vue:214 src/views/user/userColumns.tsx:7
+#: src/views/other/Login.vue:218 src/views/user/userColumns.tsx:7
 #: src/views/user/UserProfile.vue:127 src/views/user/UserProfile.vue:131
 #: src/views/user/UserProfile.vue:127 src/views/user/UserProfile.vue:131
 msgid "Username"
 msgid "Username"
 msgstr "Nombre de usuario"
 msgstr "Nombre de usuario"

+ 21 - 21
app/src/language/fr_FR/app.po

@@ -663,7 +663,7 @@ msgstr "Impossible de comparer: contenu manquant"
 msgid "Cannot delete protected path: {0}"
 msgid "Cannot delete protected path: {0}"
 msgstr "Impossible de supprimer le chemin protégé : {0}"
 msgstr "Impossible de supprimer le chemin protégé : {0}"
 
 
-#: src/views/dashboard/NginxDashBoard.vue:129
+#: src/views/dashboard/NginxDashBoard.vue:134
 msgid "Cannot get performance data in this state"
 msgid "Cannot get performance data in this state"
 msgstr "Impossible d'obtenir des données de performance dans cet état"
 msgstr "Impossible d'obtenir des données de performance dans cet état"
 
 
@@ -1090,7 +1090,7 @@ msgstr "Confirmer le nouveau mot de passe"
 msgid "Connected"
 msgid "Connected"
 msgstr "Connecté"
 msgstr "Connecté"
 
 
-#: src/views/dashboard/NginxDashBoard.vue:82
+#: src/views/dashboard/NginxDashBoard.vue:87
 msgid "Connection error, trying to reconnect..."
 msgid "Connection error, trying to reconnect..."
 msgstr "Erreur de connexion, tentative de reconnexion..."
 msgstr "Erreur de connexion, tentative de reconnexion..."
 
 
@@ -1760,7 +1760,7 @@ msgstr "Échec de l'activation du flux %{name} sur %{node}"
 msgid "Enable stream %{name} on %{node} successfully"
 msgid "Enable stream %{name} on %{node} successfully"
 msgstr "Activation du flux %{name} sur %{node} réussie"
 msgstr "Activation du flux %{name} sur %{node} réussie"
 
 
-#: src/views/dashboard/NginxDashBoard.vue:147
+#: src/views/dashboard/NginxDashBoard.vue:152
 msgid "Enable stub_status module"
 msgid "Enable stub_status module"
 msgstr "Activer le module stub_status"
 msgstr "Activer le module stub_status"
 
 
@@ -2347,7 +2347,7 @@ msgstr "Génération de clé privée pour l'enregistrement du compte"
 msgid "Get acme user error: {0}"
 msgid "Get acme user error: {0}"
 msgstr "Erreur lors de la récupération de l'utilisateur ACME: {0}"
 msgstr "Erreur lors de la récupération de l'utilisateur ACME: {0}"
 
 
-#: src/views/dashboard/NginxDashBoard.vue:138
+#: src/views/dashboard/NginxDashBoard.vue:143
 msgid "Get data failed"
 msgid "Get data failed"
 msgstr "Échec de la récupération des données"
 msgstr "Échec de la récupération des données"
 
 
@@ -2686,7 +2686,7 @@ msgstr "Dernière heure de sauvegarde"
 msgid "Last checked at"
 msgid "Last checked at"
 msgstr "Dernière vérification le"
 msgstr "Dernière vérification le"
 
 
-#: src/views/dashboard/NginxDashBoard.vue:113
+#: src/views/dashboard/NginxDashBoard.vue:118
 msgid "Last update"
 msgid "Last update"
 msgstr "Dernière mise à jour"
 msgstr "Dernière mise à jour"
 
 
@@ -2773,7 +2773,7 @@ msgstr "Pause du chargeur"
 msgid "Loader Threshold"
 msgid "Loader Threshold"
 msgstr "Seuil du chargeur"
 msgstr "Seuil du chargeur"
 
 
-#: src/views/dashboard/NginxDashBoard.vue:175
+#: src/views/dashboard/NginxDashBoard.vue:180
 msgid "Loading data..."
 msgid "Loading data..."
 msgstr "Chargement des données..."
 msgstr "Chargement des données..."
 
 
@@ -2816,11 +2816,11 @@ msgstr ""
 msgid "Log List"
 msgid "Log List"
 msgstr "Liste des journaux"
 msgstr "Liste des journaux"
 
 
-#: src/routes/modules/auth.ts:14 src/views/other/Login.vue:263
+#: src/routes/modules/auth.ts:14 src/views/other/Login.vue:267
 msgid "Login"
 msgid "Login"
 msgstr "Connexion"
 msgstr "Connexion"
 
 
-#: src/views/other/Login.vue:75
+#: src/views/other/Login.vue:76
 msgid "Login successful"
 msgid "Login successful"
 msgstr "Connexion réussie"
 msgstr "Connexion réussie"
 
 
@@ -3072,7 +3072,7 @@ msgstr "Directive multiligne"
 msgid "Name"
 msgid "Name"
 msgstr "Nom"
 msgstr "Nom"
 
 
-#: src/views/dashboard/NginxDashBoard.vue:170
+#: src/views/dashboard/NginxDashBoard.vue:175
 msgid "Need to enable the stub_status module"
 msgid "Need to enable the stub_status module"
 msgstr "Il faut activer le module stub_status"
 msgstr "Il faut activer le module stub_status"
 
 
@@ -3224,8 +3224,8 @@ msgstr "Erreur Nginx : {0}"
 
 
 #: src/components/NgxConfigEditor/NginxStatusAlert.vue:15
 #: src/components/NgxConfigEditor/NginxStatusAlert.vue:15
 #: src/composables/useNginxPerformance.ts:43
 #: src/composables/useNginxPerformance.ts:43
-#: src/views/dashboard/NginxDashBoard.vue:109
-#: src/views/dashboard/NginxDashBoard.vue:128
+#: src/views/dashboard/NginxDashBoard.vue:114
+#: src/views/dashboard/NginxDashBoard.vue:133
 #: src/views/dashboard/NginxDashBoard.vue:77
 #: src/views/dashboard/NginxDashBoard.vue:77
 msgid "Nginx is not running"
 msgid "Nginx is not running"
 msgstr "Nginx n'est pas en cours d'exécution"
 msgstr "Nginx n'est pas en cours d'exécution"
@@ -3234,7 +3234,7 @@ msgstr "Nginx n'est pas en cours d'exécution"
 msgid "Nginx is not running in another container"
 msgid "Nginx is not running in another container"
 msgstr "Nginx ne fonctionne pas dans un autre conteneur"
 msgstr "Nginx ne fonctionne pas dans un autre conteneur"
 
 
-#: src/views/dashboard/NginxDashBoard.vue:109
+#: src/views/dashboard/NginxDashBoard.vue:114
 msgid "Nginx is running"
 msgid "Nginx is running"
 msgstr "Nginx est en cours d'exécution"
 msgstr "Nginx est en cours d'exécution"
 
 
@@ -3350,7 +3350,7 @@ msgstr "Non"
 msgid "No Action"
 msgid "No Action"
 msgstr "Aucune action"
 msgstr "Aucune action"
 
 
-#: src/views/dashboard/NginxDashBoard.vue:177
+#: src/views/dashboard/NginxDashBoard.vue:182
 msgid "No data"
 msgid "No data"
 msgstr "Aucune donnée"
 msgstr "Aucune donnée"
 
 
@@ -3542,7 +3542,7 @@ msgstr "Ouvert"
 msgid "OpenAI"
 msgid "OpenAI"
 msgstr "OpenAI"
 msgstr "OpenAI"
 
 
-#: src/components/TwoFA/Authorization.vue:100 src/views/other/Login.vue:272
+#: src/components/TwoFA/Authorization.vue:100 src/views/other/Login.vue:276
 msgid "Or"
 msgid "Or"
 msgstr "Ou"
 msgstr "Ou"
 
 
@@ -3616,7 +3616,7 @@ msgstr ""
 "ou un code PIN. Elles peuvent être utilisées comme remplacement d'un mot de "
 "ou un code PIN. Elles peuvent être utilisées comme remplacement d'un mot de "
 "passe ou comme méthode d'authentification à deux facteurs (2FA)."
 "passe ou comme méthode d'authentification à deux facteurs (2FA)."
 
 
-#: src/views/other/Login.vue:224 src/views/user/userColumns.tsx:16
+#: src/views/other/Login.vue:228 src/views/user/userColumns.tsx:16
 msgid "Password"
 msgid "Password"
 msgstr "Mot de passe"
 msgstr "Mot de passe"
 
 
@@ -3680,7 +3680,7 @@ msgstr "Erreur lors de la mise a niveau du core"
 msgid "Performance"
 msgid "Performance"
 msgstr "Performance"
 msgstr "Performance"
 
 
-#: src/views/dashboard/NginxDashBoard.vue:182
+#: src/views/dashboard/NginxDashBoard.vue:187
 msgid "Performance Metrics"
 msgid "Performance Metrics"
 msgstr "Métriques de performance"
 msgstr "Métriques de performance"
 
 
@@ -3704,7 +3704,7 @@ msgstr "Le chemin du PID n'existe pas"
 msgid "Plain text is empty"
 msgid "Plain text is empty"
 msgstr "Le texte en clair est vide"
 msgstr "Le texte en clair est vide"
 
 
-#: src/views/dashboard/NginxDashBoard.vue:171
+#: src/views/dashboard/NginxDashBoard.vue:176
 msgid ""
 msgid ""
 "Please enable the stub_status module to get request statistics, connection "
 "Please enable the stub_status module to get request statistics, connection "
 "count, etc."
 "count, etc."
@@ -4710,7 +4710,7 @@ msgstr "Zone de Mémoire Partagée"
 msgid "Show"
 msgid "Show"
 msgstr "Afficher"
 msgstr "Afficher"
 
 
-#: src/views/other/Login.vue:281
+#: src/views/other/Login.vue:285
 msgid "Sign in with a passkey"
 msgid "Sign in with a passkey"
 msgstr "Se connecter avec une clé d'accès"
 msgstr "Se connecter avec une clé d'accès"
 
 
@@ -4819,7 +4819,7 @@ msgstr "Chemin de la clé SSL"
 msgid "SSL key path is required when HTTPS is enabled"
 msgid "SSL key path is required when HTTPS is enabled"
 msgstr "Le chemin de la clé SSL est requis lorsque HTTPS est activé"
 msgstr "Le chemin de la clé SSL est requis lorsque HTTPS est activé"
 
 
-#: src/views/other/Login.vue:238
+#: src/views/other/Login.vue:242
 msgid "SSO Login"
 msgid "SSO Login"
 msgstr "Connexion SSO"
 msgstr "Connexion SSO"
 
 
@@ -5273,7 +5273,7 @@ msgstr ""
 "Ce champ ne doit contenir que des lettres, des caractères Unicode, des "
 "Ce champ ne doit contenir que des lettres, des caractères Unicode, des "
 "chiffres et -_./:"
 "chiffres et -_./:"
 
 
-#: src/views/dashboard/NginxDashBoard.vue:150
+#: src/views/dashboard/NginxDashBoard.vue:155
 msgid ""
 msgid ""
 "This module provides Nginx request statistics, connection count, etc. data. "
 "This module provides Nginx request statistics, connection count, etc. data. "
 "After enabling it, you can view performance statistics"
 "After enabling it, you can view performance statistics"
@@ -5594,7 +5594,7 @@ msgstr "L'utilisateur n'a pas activé l'OTP comme 2FA"
 msgid "User Profile"
 msgid "User Profile"
 msgstr "Profil utilisateur"
 msgstr "Profil utilisateur"
 
 
-#: src/views/other/Login.vue:214 src/views/user/userColumns.tsx:7
+#: src/views/other/Login.vue:218 src/views/user/userColumns.tsx:7
 #: src/views/user/UserProfile.vue:127 src/views/user/UserProfile.vue:131
 #: src/views/user/UserProfile.vue:127 src/views/user/UserProfile.vue:131
 msgid "Username"
 msgid "Username"
 msgstr "Nom d'utilisateur"
 msgstr "Nom d'utilisateur"

+ 21 - 21
app/src/language/ja_JP/app.po

@@ -647,7 +647,7 @@ msgstr "比較できません:不足しているコンテンツ"
 msgid "Cannot delete protected path: {0}"
 msgid "Cannot delete protected path: {0}"
 msgstr "保護されたパスを削除できません: {0}"
 msgstr "保護されたパスを削除できません: {0}"
 
 
-#: src/views/dashboard/NginxDashBoard.vue:129
+#: src/views/dashboard/NginxDashBoard.vue:134
 msgid "Cannot get performance data in this state"
 msgid "Cannot get performance data in this state"
 msgstr "この状態でパフォーマンスデータを取得できません"
 msgstr "この状態でパフォーマンスデータを取得できません"
 
 
@@ -1065,7 +1065,7 @@ msgstr "新しいパスワードを確認"
 msgid "Connected"
 msgid "Connected"
 msgstr "接続済み"
 msgstr "接続済み"
 
 
-#: src/views/dashboard/NginxDashBoard.vue:82
+#: src/views/dashboard/NginxDashBoard.vue:87
 msgid "Connection error, trying to reconnect..."
 msgid "Connection error, trying to reconnect..."
 msgstr "接続エラー、再接続を試みています..."
 msgstr "接続エラー、再接続を試みています..."
 
 
@@ -1725,7 +1725,7 @@ msgstr "ストリーム %{name} を %{node} で有効化できませんでした
 msgid "Enable stream %{name} on %{node} successfully"
 msgid "Enable stream %{name} on %{node} successfully"
 msgstr "ストリーム %{name} を %{node} で有効化しました"
 msgstr "ストリーム %{name} を %{node} で有効化しました"
 
 
-#: src/views/dashboard/NginxDashBoard.vue:147
+#: src/views/dashboard/NginxDashBoard.vue:152
 msgid "Enable stub_status module"
 msgid "Enable stub_status module"
 msgstr "stub_status モジュールを有効にする"
 msgstr "stub_status モジュールを有効にする"
 
 
@@ -2308,7 +2308,7 @@ msgstr "アカウント登録用の秘密鍵を生成中"
 msgid "Get acme user error: {0}"
 msgid "Get acme user error: {0}"
 msgstr "ACMEユーザーの取得エラー: {0}"
 msgstr "ACMEユーザーの取得エラー: {0}"
 
 
-#: src/views/dashboard/NginxDashBoard.vue:138
+#: src/views/dashboard/NginxDashBoard.vue:143
 msgid "Get data failed"
 msgid "Get data failed"
 msgstr "データの取得に失敗しました"
 msgstr "データの取得に失敗しました"
 
 
@@ -2642,7 +2642,7 @@ msgstr "最終バックアップ時刻"
 msgid "Last checked at"
 msgid "Last checked at"
 msgstr "最終確認日時"
 msgstr "最終確認日時"
 
 
-#: src/views/dashboard/NginxDashBoard.vue:113
+#: src/views/dashboard/NginxDashBoard.vue:118
 msgid "Last update"
 msgid "Last update"
 msgstr "最終更新"
 msgstr "最終更新"
 
 
@@ -2731,7 +2731,7 @@ msgstr "ローダー スリープ"
 msgid "Loader Threshold"
 msgid "Loader Threshold"
 msgstr "ローダー閾値"
 msgstr "ローダー閾値"
 
 
-#: src/views/dashboard/NginxDashBoard.vue:175
+#: src/views/dashboard/NginxDashBoard.vue:180
 msgid "Loading data..."
 msgid "Loading data..."
 msgstr "データを読み込んでいます..."
 msgstr "データを読み込んでいます..."
 
 
@@ -2774,11 +2774,11 @@ msgstr ""
 msgid "Log List"
 msgid "Log List"
 msgstr "ログリスト"
 msgstr "ログリスト"
 
 
-#: src/routes/modules/auth.ts:14 src/views/other/Login.vue:263
+#: src/routes/modules/auth.ts:14 src/views/other/Login.vue:267
 msgid "Login"
 msgid "Login"
 msgstr "ログイン"
 msgstr "ログイン"
 
 
-#: src/views/other/Login.vue:75
+#: src/views/other/Login.vue:76
 msgid "Login successful"
 msgid "Login successful"
 msgstr "ログインに成功しました"
 msgstr "ログインに成功しました"
 
 
@@ -3029,7 +3029,7 @@ msgstr "複数行ディレクティブ"
 msgid "Name"
 msgid "Name"
 msgstr "名前"
 msgstr "名前"
 
 
-#: src/views/dashboard/NginxDashBoard.vue:170
+#: src/views/dashboard/NginxDashBoard.vue:175
 msgid "Need to enable the stub_status module"
 msgid "Need to enable the stub_status module"
 msgstr "stub_statusモジュールを有効にする必要があります"
 msgstr "stub_statusモジュールを有効にする必要があります"
 
 
@@ -3181,8 +3181,8 @@ msgstr "Nginxエラー: {0}"
 
 
 #: src/components/NgxConfigEditor/NginxStatusAlert.vue:15
 #: src/components/NgxConfigEditor/NginxStatusAlert.vue:15
 #: src/composables/useNginxPerformance.ts:43
 #: src/composables/useNginxPerformance.ts:43
-#: src/views/dashboard/NginxDashBoard.vue:109
-#: src/views/dashboard/NginxDashBoard.vue:128
+#: src/views/dashboard/NginxDashBoard.vue:114
+#: src/views/dashboard/NginxDashBoard.vue:133
 #: src/views/dashboard/NginxDashBoard.vue:77
 #: src/views/dashboard/NginxDashBoard.vue:77
 msgid "Nginx is not running"
 msgid "Nginx is not running"
 msgstr "Nginx は実行されていません"
 msgstr "Nginx は実行されていません"
@@ -3191,7 +3191,7 @@ msgstr "Nginx は実行されていません"
 msgid "Nginx is not running in another container"
 msgid "Nginx is not running in another container"
 msgstr "Nginx は他のコンテナで実行されていません"
 msgstr "Nginx は他のコンテナで実行されていません"
 
 
-#: src/views/dashboard/NginxDashBoard.vue:109
+#: src/views/dashboard/NginxDashBoard.vue:114
 msgid "Nginx is running"
 msgid "Nginx is running"
 msgstr "Nginx は実行中です"
 msgstr "Nginx は実行中です"
 
 
@@ -3303,7 +3303,7 @@ msgstr "いいえ"
 msgid "No Action"
 msgid "No Action"
 msgstr "アクションなし"
 msgstr "アクションなし"
 
 
-#: src/views/dashboard/NginxDashBoard.vue:177
+#: src/views/dashboard/NginxDashBoard.vue:182
 msgid "No data"
 msgid "No data"
 msgstr "データなし"
 msgstr "データなし"
 
 
@@ -3492,7 +3492,7 @@ msgstr "開いている"
 msgid "OpenAI"
 msgid "OpenAI"
 msgstr "OpenAI"
 msgstr "OpenAI"
 
 
-#: src/components/TwoFA/Authorization.vue:100 src/views/other/Login.vue:272
+#: src/components/TwoFA/Authorization.vue:100 src/views/other/Login.vue:276
 msgid "Or"
 msgid "Or"
 msgstr "または"
 msgstr "または"
 
 
@@ -3565,7 +3565,7 @@ msgstr ""
 "認する WebAuthn 認証情報です。パスワードの代わりや 2FA 方法として使用できま"
 "認する WebAuthn 認証情報です。パスワードの代わりや 2FA 方法として使用できま"
 "す。"
 "す。"
 
 
-#: src/views/other/Login.vue:224 src/views/user/userColumns.tsx:16
+#: src/views/other/Login.vue:228 src/views/user/userColumns.tsx:16
 msgid "Password"
 msgid "Password"
 msgstr "パスワード"
 msgstr "パスワード"
 
 
@@ -3627,7 +3627,7 @@ msgstr "コアアップグレード実行エラー"
 msgid "Performance"
 msgid "Performance"
 msgstr "パフォーマンス"
 msgstr "パフォーマンス"
 
 
-#: src/views/dashboard/NginxDashBoard.vue:182
+#: src/views/dashboard/NginxDashBoard.vue:187
 msgid "Performance Metrics"
 msgid "Performance Metrics"
 msgstr "パフォーマンスメトリクス"
 msgstr "パフォーマンスメトリクス"
 
 
@@ -3651,7 +3651,7 @@ msgstr "PID パスが存在しません"
 msgid "Plain text is empty"
 msgid "Plain text is empty"
 msgstr "プレーンテキストが空です"
 msgstr "プレーンテキストが空です"
 
 
-#: src/views/dashboard/NginxDashBoard.vue:171
+#: src/views/dashboard/NginxDashBoard.vue:176
 msgid ""
 msgid ""
 "Please enable the stub_status module to get request statistics, connection "
 "Please enable the stub_status module to get request statistics, connection "
 "count, etc."
 "count, etc."
@@ -4639,7 +4639,7 @@ msgstr "共有メモリゾーン"
 msgid "Show"
 msgid "Show"
 msgstr "表示"
 msgstr "表示"
 
 
-#: src/views/other/Login.vue:281
+#: src/views/other/Login.vue:285
 msgid "Sign in with a passkey"
 msgid "Sign in with a passkey"
 msgstr "パスキーでサインイン"
 msgstr "パスキーでサインイン"
 
 
@@ -4744,7 +4744,7 @@ msgstr "SSLキーのパス"
 msgid "SSL key path is required when HTTPS is enabled"
 msgid "SSL key path is required when HTTPS is enabled"
 msgstr "HTTPS を有効にするには SSL キーのパスが必要です"
 msgstr "HTTPS を有効にするには SSL キーのパスが必要です"
 
 
-#: src/views/other/Login.vue:238
+#: src/views/other/Login.vue:242
 msgid "SSO Login"
 msgid "SSO Login"
 msgstr "SSOログイン"
 msgstr "SSOログイン"
 
 
@@ -5190,7 +5190,7 @@ msgstr ""
 "このフィールドには、文字、Unicode文字、数字、および -_./: のみを含める必要が"
 "このフィールドには、文字、Unicode文字、数字、および -_./: のみを含める必要が"
 "あります"
 "あります"
 
 
-#: src/views/dashboard/NginxDashBoard.vue:150
+#: src/views/dashboard/NginxDashBoard.vue:155
 msgid ""
 msgid ""
 "This module provides Nginx request statistics, connection count, etc. data. "
 "This module provides Nginx request statistics, connection count, etc. data. "
 "After enabling it, you can view performance statistics"
 "After enabling it, you can view performance statistics"
@@ -5504,7 +5504,7 @@ msgstr "ユーザーはOTPを2FAとして有効にしていません"
 msgid "User Profile"
 msgid "User Profile"
 msgstr "ユーザープロフィール"
 msgstr "ユーザープロフィール"
 
 
-#: src/views/other/Login.vue:214 src/views/user/userColumns.tsx:7
+#: src/views/other/Login.vue:218 src/views/user/userColumns.tsx:7
 #: src/views/user/UserProfile.vue:127 src/views/user/UserProfile.vue:131
 #: src/views/user/UserProfile.vue:127 src/views/user/UserProfile.vue:131
 msgid "Username"
 msgid "Username"
 msgstr "ユーザー名"
 msgstr "ユーザー名"

+ 21 - 21
app/src/language/ko_KR/app.po

@@ -637,7 +637,7 @@ msgstr "비교할 수 없습니다 : 내용 누락"
 msgid "Cannot delete protected path: {0}"
 msgid "Cannot delete protected path: {0}"
 msgstr "보호된 경로를 삭제할 수 없습니다: {0}"
 msgstr "보호된 경로를 삭제할 수 없습니다: {0}"
 
 
-#: src/views/dashboard/NginxDashBoard.vue:129
+#: src/views/dashboard/NginxDashBoard.vue:134
 msgid "Cannot get performance data in this state"
 msgid "Cannot get performance data in this state"
 msgstr "이 상태에서 성능 데이터를 얻을 수 없습니다"
 msgstr "이 상태에서 성능 데이터를 얻을 수 없습니다"
 
 
@@ -1051,7 +1051,7 @@ msgstr "새 비밀번호 확인"
 msgid "Connected"
 msgid "Connected"
 msgstr "연결됨"
 msgstr "연결됨"
 
 
-#: src/views/dashboard/NginxDashBoard.vue:82
+#: src/views/dashboard/NginxDashBoard.vue:87
 msgid "Connection error, trying to reconnect..."
 msgid "Connection error, trying to reconnect..."
 msgstr "연결 오류, 다시 연결 시도 중..."
 msgstr "연결 오류, 다시 연결 시도 중..."
 
 
@@ -1711,7 +1711,7 @@ msgstr "%{node}에서 스트림 %{name} 활성화 실패"
 msgid "Enable stream %{name} on %{node} successfully"
 msgid "Enable stream %{name} on %{node} successfully"
 msgstr "%{node}에서 스트림 %{name} 활성화 성공"
 msgstr "%{node}에서 스트림 %{name} 활성화 성공"
 
 
-#: src/views/dashboard/NginxDashBoard.vue:147
+#: src/views/dashboard/NginxDashBoard.vue:152
 msgid "Enable stub_status module"
 msgid "Enable stub_status module"
 msgstr "stub_status 모듈 활성화"
 msgstr "stub_status 모듈 활성화"
 
 
@@ -2294,7 +2294,7 @@ msgstr "계정 등록을 위한 개인 키 생성 중"
 msgid "Get acme user error: {0}"
 msgid "Get acme user error: {0}"
 msgstr "ACME 사용자 가져오기 오류: {0}"
 msgstr "ACME 사용자 가져오기 오류: {0}"
 
 
-#: src/views/dashboard/NginxDashBoard.vue:138
+#: src/views/dashboard/NginxDashBoard.vue:143
 msgid "Get data failed"
 msgid "Get data failed"
 msgstr "데이터 가져오기 실패"
 msgstr "데이터 가져오기 실패"
 
 
@@ -2624,7 +2624,7 @@ msgstr "마지막 백업 시간"
 msgid "Last checked at"
 msgid "Last checked at"
 msgstr "마지막 확인 시간"
 msgstr "마지막 확인 시간"
 
 
-#: src/views/dashboard/NginxDashBoard.vue:113
+#: src/views/dashboard/NginxDashBoard.vue:118
 msgid "Last update"
 msgid "Last update"
 msgstr "마지막 업데이트"
 msgstr "마지막 업데이트"
 
 
@@ -2711,7 +2711,7 @@ msgstr "로더 슬립"
 msgid "Loader Threshold"
 msgid "Loader Threshold"
 msgstr "로더 임계값"
 msgstr "로더 임계값"
 
 
-#: src/views/dashboard/NginxDashBoard.vue:175
+#: src/views/dashboard/NginxDashBoard.vue:180
 msgid "Loading data..."
 msgid "Loading data..."
 msgstr "데이터를 불러오는 중..."
 msgstr "데이터를 불러오는 중..."
 
 
@@ -2754,11 +2754,11 @@ msgstr ""
 msgid "Log List"
 msgid "Log List"
 msgstr "로그 목록"
 msgstr "로그 목록"
 
 
-#: src/routes/modules/auth.ts:14 src/views/other/Login.vue:263
+#: src/routes/modules/auth.ts:14 src/views/other/Login.vue:267
 msgid "Login"
 msgid "Login"
 msgstr "로그인"
 msgstr "로그인"
 
 
-#: src/views/other/Login.vue:75
+#: src/views/other/Login.vue:76
 msgid "Login successful"
 msgid "Login successful"
 msgstr "로그인 성공"
 msgstr "로그인 성공"
 
 
@@ -3008,7 +3008,7 @@ msgstr "여러 줄 지시문"
 msgid "Name"
 msgid "Name"
 msgstr "이름"
 msgstr "이름"
 
 
-#: src/views/dashboard/NginxDashBoard.vue:170
+#: src/views/dashboard/NginxDashBoard.vue:175
 msgid "Need to enable the stub_status module"
 msgid "Need to enable the stub_status module"
 msgstr "stub_status 모듈을 활성화해야 합니다"
 msgstr "stub_status 모듈을 활성화해야 합니다"
 
 
@@ -3160,8 +3160,8 @@ msgstr "Nginx 오류: {0}"
 
 
 #: src/components/NgxConfigEditor/NginxStatusAlert.vue:15
 #: src/components/NgxConfigEditor/NginxStatusAlert.vue:15
 #: src/composables/useNginxPerformance.ts:43
 #: src/composables/useNginxPerformance.ts:43
-#: src/views/dashboard/NginxDashBoard.vue:109
-#: src/views/dashboard/NginxDashBoard.vue:128
+#: src/views/dashboard/NginxDashBoard.vue:114
+#: src/views/dashboard/NginxDashBoard.vue:133
 #: src/views/dashboard/NginxDashBoard.vue:77
 #: src/views/dashboard/NginxDashBoard.vue:77
 msgid "Nginx is not running"
 msgid "Nginx is not running"
 msgstr "Nginx가 실행 중이 아닙니다"
 msgstr "Nginx가 실행 중이 아닙니다"
@@ -3170,7 +3170,7 @@ msgstr "Nginx가 실행 중이 아닙니다"
 msgid "Nginx is not running in another container"
 msgid "Nginx is not running in another container"
 msgstr "Nginx가 다른 컨테이너에서 실행되고 있지 않습니다"
 msgstr "Nginx가 다른 컨테이너에서 실행되고 있지 않습니다"
 
 
-#: src/views/dashboard/NginxDashBoard.vue:109
+#: src/views/dashboard/NginxDashBoard.vue:114
 msgid "Nginx is running"
 msgid "Nginx is running"
 msgstr "Nginx가 실행 중입니다"
 msgstr "Nginx가 실행 중입니다"
 
 
@@ -3282,7 +3282,7 @@ msgstr "아니요"
 msgid "No Action"
 msgid "No Action"
 msgstr "작업 없음"
 msgstr "작업 없음"
 
 
-#: src/views/dashboard/NginxDashBoard.vue:177
+#: src/views/dashboard/NginxDashBoard.vue:182
 msgid "No data"
 msgid "No data"
 msgstr "데이터 없음"
 msgstr "데이터 없음"
 
 
@@ -3471,7 +3471,7 @@ msgstr "열림"
 msgid "OpenAI"
 msgid "OpenAI"
 msgstr "오픈AI"
 msgstr "오픈AI"
 
 
-#: src/components/TwoFA/Authorization.vue:100 src/views/other/Login.vue:272
+#: src/components/TwoFA/Authorization.vue:100 src/views/other/Login.vue:276
 msgid "Or"
 msgid "Or"
 msgstr "또는"
 msgstr "또는"
 
 
@@ -3544,7 +3544,7 @@ msgstr ""
 "웹인증(WebAuthn) 자격 증명입니다. 비밀번호 대체 또는 2FA 방법으로 사용할 수 "
 "웹인증(WebAuthn) 자격 증명입니다. 비밀번호 대체 또는 2FA 방법으로 사용할 수 "
 "있습니다."
 "있습니다."
 
 
-#: src/views/other/Login.vue:224 src/views/user/userColumns.tsx:16
+#: src/views/other/Login.vue:228 src/views/user/userColumns.tsx:16
 msgid "Password"
 msgid "Password"
 msgstr "비밀번호"
 msgstr "비밀번호"
 
 
@@ -3606,7 +3606,7 @@ msgstr "핵심 업그레이드 오류 수행"
 msgid "Performance"
 msgid "Performance"
 msgstr "성능"
 msgstr "성능"
 
 
-#: src/views/dashboard/NginxDashBoard.vue:182
+#: src/views/dashboard/NginxDashBoard.vue:187
 msgid "Performance Metrics"
 msgid "Performance Metrics"
 msgstr "성능 메트릭"
 msgstr "성능 메트릭"
 
 
@@ -3630,7 +3630,7 @@ msgstr "PID 경로가 존재하지 않습니다"
 msgid "Plain text is empty"
 msgid "Plain text is empty"
 msgstr "평문이 비어 있습니다"
 msgstr "평문이 비어 있습니다"
 
 
-#: src/views/dashboard/NginxDashBoard.vue:171
+#: src/views/dashboard/NginxDashBoard.vue:176
 msgid ""
 msgid ""
 "Please enable the stub_status module to get request statistics, connection "
 "Please enable the stub_status module to get request statistics, connection "
 "count, etc."
 "count, etc."
@@ -4612,7 +4612,7 @@ msgstr "공유 메모리 영역"
 msgid "Show"
 msgid "Show"
 msgstr "표시"
 msgstr "표시"
 
 
-#: src/views/other/Login.vue:281
+#: src/views/other/Login.vue:285
 msgid "Sign in with a passkey"
 msgid "Sign in with a passkey"
 msgstr "패스키로 로그인"
 msgstr "패스키로 로그인"
 
 
@@ -4717,7 +4717,7 @@ msgstr "SSL 키 경로"
 msgid "SSL key path is required when HTTPS is enabled"
 msgid "SSL key path is required when HTTPS is enabled"
 msgstr "HTTPS가 활성화된 경우 SSL 키 경로가 필요합니다"
 msgstr "HTTPS가 활성화된 경우 SSL 키 경로가 필요합니다"
 
 
-#: src/views/other/Login.vue:238
+#: src/views/other/Login.vue:242
 msgid "SSO Login"
 msgid "SSO Login"
 msgstr "SSO 로그인"
 msgstr "SSO 로그인"
 
 
@@ -5152,7 +5152,7 @@ msgid ""
 "_./:"
 "_./:"
 msgstr "이 필드에는 문자, 유니코드 문자, 숫자 및 -_./: 만 포함되어야 합니다"
 msgstr "이 필드에는 문자, 유니코드 문자, 숫자 및 -_./: 만 포함되어야 합니다"
 
 
-#: src/views/dashboard/NginxDashBoard.vue:150
+#: src/views/dashboard/NginxDashBoard.vue:155
 msgid ""
 msgid ""
 "This module provides Nginx request statistics, connection count, etc. data. "
 "This module provides Nginx request statistics, connection count, etc. data. "
 "After enabling it, you can view performance statistics"
 "After enabling it, you can view performance statistics"
@@ -5465,7 +5465,7 @@ msgstr "사용자가 OTP를 2FA로 활성화하지 않음"
 msgid "User Profile"
 msgid "User Profile"
 msgstr "사용자 프로필"
 msgstr "사용자 프로필"
 
 
-#: src/views/other/Login.vue:214 src/views/user/userColumns.tsx:7
+#: src/views/other/Login.vue:218 src/views/user/userColumns.tsx:7
 #: src/views/user/UserProfile.vue:127 src/views/user/UserProfile.vue:131
 #: src/views/user/UserProfile.vue:127 src/views/user/UserProfile.vue:131
 msgid "Username"
 msgid "Username"
 msgstr "사용자 이름"
 msgstr "사용자 이름"

+ 21 - 21
app/src/language/messages.pot

@@ -620,7 +620,7 @@ msgstr ""
 msgid "Cannot delete protected path: {0}"
 msgid "Cannot delete protected path: {0}"
 msgstr ""
 msgstr ""
 
 
-#: src/views/dashboard/NginxDashBoard.vue:129
+#: src/views/dashboard/NginxDashBoard.vue:134
 msgid "Cannot get performance data in this state"
 msgid "Cannot get performance data in this state"
 msgstr ""
 msgstr ""
 
 
@@ -979,7 +979,7 @@ msgstr ""
 msgid "Connected"
 msgid "Connected"
 msgstr ""
 msgstr ""
 
 
-#: src/views/dashboard/NginxDashBoard.vue:82
+#: src/views/dashboard/NginxDashBoard.vue:87
 msgid "Connection error, trying to reconnect..."
 msgid "Connection error, trying to reconnect..."
 msgstr ""
 msgstr ""
 
 
@@ -1636,7 +1636,7 @@ msgstr ""
 msgid "Enable stream %{name} on %{node} successfully"
 msgid "Enable stream %{name} on %{node} successfully"
 msgstr ""
 msgstr ""
 
 
-#: src/views/dashboard/NginxDashBoard.vue:147
+#: src/views/dashboard/NginxDashBoard.vue:152
 msgid "Enable stub_status module"
 msgid "Enable stub_status module"
 msgstr ""
 msgstr ""
 
 
@@ -2220,7 +2220,7 @@ msgstr ""
 msgid "Get acme user error: {0}"
 msgid "Get acme user error: {0}"
 msgstr ""
 msgstr ""
 
 
-#: src/views/dashboard/NginxDashBoard.vue:138
+#: src/views/dashboard/NginxDashBoard.vue:143
 msgid "Get data failed"
 msgid "Get data failed"
 msgstr ""
 msgstr ""
 
 
@@ -2530,7 +2530,7 @@ msgstr ""
 msgid "Last checked at"
 msgid "Last checked at"
 msgstr ""
 msgstr ""
 
 
-#: src/views/dashboard/NginxDashBoard.vue:113
+#: src/views/dashboard/NginxDashBoard.vue:118
 msgid "Last update"
 msgid "Last update"
 msgstr ""
 msgstr ""
 
 
@@ -2617,7 +2617,7 @@ msgstr ""
 msgid "Loader Threshold"
 msgid "Loader Threshold"
 msgstr ""
 msgstr ""
 
 
-#: src/views/dashboard/NginxDashBoard.vue:175
+#: src/views/dashboard/NginxDashBoard.vue:180
 msgid "Loading data..."
 msgid "Loading data..."
 msgstr ""
 msgstr ""
 
 
@@ -2656,11 +2656,11 @@ msgid "Log List"
 msgstr ""
 msgstr ""
 
 
 #: src/routes/modules/auth.ts:14
 #: src/routes/modules/auth.ts:14
-#: src/views/other/Login.vue:263
+#: src/views/other/Login.vue:267
 msgid "Login"
 msgid "Login"
 msgstr ""
 msgstr ""
 
 
-#: src/views/other/Login.vue:75
+#: src/views/other/Login.vue:76
 msgid "Login successful"
 msgid "Login successful"
 msgstr ""
 msgstr ""
 
 
@@ -2898,7 +2898,7 @@ msgstr ""
 msgid "Name"
 msgid "Name"
 msgstr ""
 msgstr ""
 
 
-#: src/views/dashboard/NginxDashBoard.vue:170
+#: src/views/dashboard/NginxDashBoard.vue:175
 msgid "Need to enable the stub_status module"
 msgid "Need to enable the stub_status module"
 msgstr ""
 msgstr ""
 
 
@@ -3051,8 +3051,8 @@ msgstr ""
 
 
 #: src/components/NgxConfigEditor/NginxStatusAlert.vue:15
 #: src/components/NgxConfigEditor/NginxStatusAlert.vue:15
 #: src/composables/useNginxPerformance.ts:43
 #: src/composables/useNginxPerformance.ts:43
-#: src/views/dashboard/NginxDashBoard.vue:109
-#: src/views/dashboard/NginxDashBoard.vue:128
+#: src/views/dashboard/NginxDashBoard.vue:114
+#: src/views/dashboard/NginxDashBoard.vue:133
 #: src/views/dashboard/NginxDashBoard.vue:77
 #: src/views/dashboard/NginxDashBoard.vue:77
 msgid "Nginx is not running"
 msgid "Nginx is not running"
 msgstr ""
 msgstr ""
@@ -3061,7 +3061,7 @@ msgstr ""
 msgid "Nginx is not running in another container"
 msgid "Nginx is not running in another container"
 msgstr ""
 msgstr ""
 
 
-#: src/views/dashboard/NginxDashBoard.vue:109
+#: src/views/dashboard/NginxDashBoard.vue:114
 msgid "Nginx is running"
 msgid "Nginx is running"
 msgstr ""
 msgstr ""
 
 
@@ -3175,7 +3175,7 @@ msgstr ""
 msgid "No Action"
 msgid "No Action"
 msgstr ""
 msgstr ""
 
 
-#: src/views/dashboard/NginxDashBoard.vue:177
+#: src/views/dashboard/NginxDashBoard.vue:182
 msgid "No data"
 msgid "No data"
 msgstr ""
 msgstr ""
 
 
@@ -3359,7 +3359,7 @@ msgid "OpenAI"
 msgstr ""
 msgstr ""
 
 
 #: src/components/TwoFA/Authorization.vue:100
 #: src/components/TwoFA/Authorization.vue:100
-#: src/views/other/Login.vue:272
+#: src/views/other/Login.vue:276
 msgid "Or"
 msgid "Or"
 msgstr ""
 msgstr ""
 
 
@@ -3426,7 +3426,7 @@ msgstr ""
 msgid "Passkeys are webauthn credentials that validate your identity using touch, facial recognition, a device password, or a PIN. They can be used as a password replacement or as a 2FA method."
 msgid "Passkeys are webauthn credentials that validate your identity using touch, facial recognition, a device password, or a PIN. They can be used as a password replacement or as a 2FA method."
 msgstr ""
 msgstr ""
 
 
-#: src/views/other/Login.vue:224
+#: src/views/other/Login.vue:228
 #: src/views/user/userColumns.tsx:16
 #: src/views/user/userColumns.tsx:16
 msgid "Password"
 msgid "Password"
 msgstr ""
 msgstr ""
@@ -3490,7 +3490,7 @@ msgstr ""
 msgid "Performance"
 msgid "Performance"
 msgstr ""
 msgstr ""
 
 
-#: src/views/dashboard/NginxDashBoard.vue:182
+#: src/views/dashboard/NginxDashBoard.vue:187
 msgid "Performance Metrics"
 msgid "Performance Metrics"
 msgstr ""
 msgstr ""
 
 
@@ -3514,7 +3514,7 @@ msgstr ""
 msgid "Plain text is empty"
 msgid "Plain text is empty"
 msgstr ""
 msgstr ""
 
 
-#: src/views/dashboard/NginxDashBoard.vue:171
+#: src/views/dashboard/NginxDashBoard.vue:176
 msgid "Please enable the stub_status module to get request statistics, connection count, etc."
 msgid "Please enable the stub_status module to get request statistics, connection count, etc."
 msgstr ""
 msgstr ""
 
 
@@ -4461,7 +4461,7 @@ msgstr ""
 msgid "Show"
 msgid "Show"
 msgstr ""
 msgstr ""
 
 
-#: src/views/other/Login.vue:281
+#: src/views/other/Login.vue:285
 msgid "Sign in with a passkey"
 msgid "Sign in with a passkey"
 msgstr ""
 msgstr ""
 
 
@@ -4566,7 +4566,7 @@ msgstr ""
 msgid "SSL key path is required when HTTPS is enabled"
 msgid "SSL key path is required when HTTPS is enabled"
 msgstr ""
 msgstr ""
 
 
-#: src/views/other/Login.vue:238
+#: src/views/other/Login.vue:242
 msgid "SSO Login"
 msgid "SSO Login"
 msgstr ""
 msgstr ""
 
 
@@ -4955,7 +4955,7 @@ msgstr ""
 msgid "This field should only contain letters, unicode characters, numbers, and -_./:"
 msgid "This field should only contain letters, unicode characters, numbers, and -_./:"
 msgstr ""
 msgstr ""
 
 
-#: src/views/dashboard/NginxDashBoard.vue:150
+#: src/views/dashboard/NginxDashBoard.vue:155
 msgid "This module provides Nginx request statistics, connection count, etc. data. After enabling it, you can view performance statistics"
 msgid "This module provides Nginx request statistics, connection count, etc. data. After enabling it, you can view performance statistics"
 msgstr ""
 msgstr ""
 
 
@@ -5219,7 +5219,7 @@ msgstr ""
 msgid "User Profile"
 msgid "User Profile"
 msgstr ""
 msgstr ""
 
 
-#: src/views/other/Login.vue:214
+#: src/views/other/Login.vue:218
 #: src/views/user/userColumns.tsx:7
 #: src/views/user/userColumns.tsx:7
 #: src/views/user/UserProfile.vue:127
 #: src/views/user/UserProfile.vue:127
 #: src/views/user/UserProfile.vue:131
 #: src/views/user/UserProfile.vue:131

+ 21 - 21
app/src/language/pt_PT/app.po

@@ -651,7 +651,7 @@ msgstr "Não posso comparar: conteúdo ausente"
 msgid "Cannot delete protected path: {0}"
 msgid "Cannot delete protected path: {0}"
 msgstr "Não é possível eliminar o caminho protegido: {0}"
 msgstr "Não é possível eliminar o caminho protegido: {0}"
 
 
-#: src/views/dashboard/NginxDashBoard.vue:129
+#: src/views/dashboard/NginxDashBoard.vue:134
 msgid "Cannot get performance data in this state"
 msgid "Cannot get performance data in this state"
 msgstr "Não é possível obter dados de desempenho neste estado"
 msgstr "Não é possível obter dados de desempenho neste estado"
 
 
@@ -1078,7 +1078,7 @@ msgstr "Confirmar nova palavra-passe"
 msgid "Connected"
 msgid "Connected"
 msgstr "Conectado"
 msgstr "Conectado"
 
 
-#: src/views/dashboard/NginxDashBoard.vue:82
+#: src/views/dashboard/NginxDashBoard.vue:87
 msgid "Connection error, trying to reconnect..."
 msgid "Connection error, trying to reconnect..."
 msgstr "Erro de conexão, tentando reconectar..."
 msgstr "Erro de conexão, tentando reconectar..."
 
 
@@ -1743,7 +1743,7 @@ msgstr "Falha ao ativar o fluxo %{name} em %{node}"
 msgid "Enable stream %{name} on %{node} successfully"
 msgid "Enable stream %{name} on %{node} successfully"
 msgstr "Ativar o fluxo %{name} em %{node} com sucesso"
 msgstr "Ativar o fluxo %{name} em %{node} com sucesso"
 
 
-#: src/views/dashboard/NginxDashBoard.vue:147
+#: src/views/dashboard/NginxDashBoard.vue:152
 msgid "Enable stub_status module"
 msgid "Enable stub_status module"
 msgstr "Ativar módulo stub_status"
 msgstr "Ativar módulo stub_status"
 
 
@@ -2329,7 +2329,7 @@ msgstr "Gerar chave privada para registo de conta"
 msgid "Get acme user error: {0}"
 msgid "Get acme user error: {0}"
 msgstr "Erro ao obter o utilizador ACME: {0}"
 msgstr "Erro ao obter o utilizador ACME: {0}"
 
 
-#: src/views/dashboard/NginxDashBoard.vue:138
+#: src/views/dashboard/NginxDashBoard.vue:143
 msgid "Get data failed"
 msgid "Get data failed"
 msgstr "Falha ao obter os dados"
 msgstr "Falha ao obter os dados"
 
 
@@ -2665,7 +2665,7 @@ msgstr "Hora do último backup"
 msgid "Last checked at"
 msgid "Last checked at"
 msgstr "Última verificação em"
 msgstr "Última verificação em"
 
 
-#: src/views/dashboard/NginxDashBoard.vue:113
+#: src/views/dashboard/NginxDashBoard.vue:118
 msgid "Last update"
 msgid "Last update"
 msgstr "Última atualização"
 msgstr "Última atualização"
 
 
@@ -2753,7 +2753,7 @@ msgstr "Pausa do Carregador"
 msgid "Loader Threshold"
 msgid "Loader Threshold"
 msgstr "Limiar do carregador"
 msgstr "Limiar do carregador"
 
 
-#: src/views/dashboard/NginxDashBoard.vue:175
+#: src/views/dashboard/NginxDashBoard.vue:180
 msgid "Loading data..."
 msgid "Loading data..."
 msgstr "A carregar dados..."
 msgstr "A carregar dados..."
 
 
@@ -2796,11 +2796,11 @@ msgstr ""
 msgid "Log List"
 msgid "Log List"
 msgstr "Lista de registos"
 msgstr "Lista de registos"
 
 
-#: src/routes/modules/auth.ts:14 src/views/other/Login.vue:263
+#: src/routes/modules/auth.ts:14 src/views/other/Login.vue:267
 msgid "Login"
 msgid "Login"
 msgstr "Autenticar"
 msgstr "Autenticar"
 
 
-#: src/views/other/Login.vue:75
+#: src/views/other/Login.vue:76
 msgid "Login successful"
 msgid "Login successful"
 msgstr "Autenticado com sucesso"
 msgstr "Autenticado com sucesso"
 
 
@@ -3051,7 +3051,7 @@ msgstr "Diretiva Multilinha"
 msgid "Name"
 msgid "Name"
 msgstr "Nome"
 msgstr "Nome"
 
 
-#: src/views/dashboard/NginxDashBoard.vue:170
+#: src/views/dashboard/NginxDashBoard.vue:175
 msgid "Need to enable the stub_status module"
 msgid "Need to enable the stub_status module"
 msgstr "É necessário ativar o módulo stub_status"
 msgstr "É necessário ativar o módulo stub_status"
 
 
@@ -3203,8 +3203,8 @@ msgstr "Erro do Nginx: {0}"
 
 
 #: src/components/NgxConfigEditor/NginxStatusAlert.vue:15
 #: src/components/NgxConfigEditor/NginxStatusAlert.vue:15
 #: src/composables/useNginxPerformance.ts:43
 #: src/composables/useNginxPerformance.ts:43
-#: src/views/dashboard/NginxDashBoard.vue:109
-#: src/views/dashboard/NginxDashBoard.vue:128
+#: src/views/dashboard/NginxDashBoard.vue:114
+#: src/views/dashboard/NginxDashBoard.vue:133
 #: src/views/dashboard/NginxDashBoard.vue:77
 #: src/views/dashboard/NginxDashBoard.vue:77
 msgid "Nginx is not running"
 msgid "Nginx is not running"
 msgstr "O Nginx não está em execução"
 msgstr "O Nginx não está em execução"
@@ -3213,7 +3213,7 @@ msgstr "O Nginx não está em execução"
 msgid "Nginx is not running in another container"
 msgid "Nginx is not running in another container"
 msgstr "O Nginx não está em execução noutro contentor"
 msgstr "O Nginx não está em execução noutro contentor"
 
 
-#: src/views/dashboard/NginxDashBoard.vue:109
+#: src/views/dashboard/NginxDashBoard.vue:114
 msgid "Nginx is running"
 msgid "Nginx is running"
 msgstr "O Nginx está em execução"
 msgstr "O Nginx está em execução"
 
 
@@ -3328,7 +3328,7 @@ msgstr "Não"
 msgid "No Action"
 msgid "No Action"
 msgstr "Sem ação"
 msgstr "Sem ação"
 
 
-#: src/views/dashboard/NginxDashBoard.vue:177
+#: src/views/dashboard/NginxDashBoard.vue:182
 msgid "No data"
 msgid "No data"
 msgstr "Sem dados"
 msgstr "Sem dados"
 
 
@@ -3520,7 +3520,7 @@ msgstr "Aberto"
 msgid "OpenAI"
 msgid "OpenAI"
 msgstr "OpenAI"
 msgstr "OpenAI"
 
 
-#: src/components/TwoFA/Authorization.vue:100 src/views/other/Login.vue:272
+#: src/components/TwoFA/Authorization.vue:100 src/views/other/Login.vue:276
 msgid "Or"
 msgid "Or"
 msgstr "Ou"
 msgstr "Ou"
 
 
@@ -3594,7 +3594,7 @@ msgstr ""
 "Podem ser usadas como substituto de palavra-passe ou como método de "
 "Podem ser usadas como substituto de palavra-passe ou como método de "
 "autenticação de dois fatores (2FA)."
 "autenticação de dois fatores (2FA)."
 
 
-#: src/views/other/Login.vue:224 src/views/user/userColumns.tsx:16
+#: src/views/other/Login.vue:228 src/views/user/userColumns.tsx:16
 msgid "Password"
 msgid "Password"
 msgstr "Palavra-passe"
 msgstr "Palavra-passe"
 
 
@@ -3656,7 +3656,7 @@ msgstr "Erro ao efectuar actualização do core"
 msgid "Performance"
 msgid "Performance"
 msgstr "Desempenho"
 msgstr "Desempenho"
 
 
-#: src/views/dashboard/NginxDashBoard.vue:182
+#: src/views/dashboard/NginxDashBoard.vue:187
 msgid "Performance Metrics"
 msgid "Performance Metrics"
 msgstr "Métricas de desempenho"
 msgstr "Métricas de desempenho"
 
 
@@ -3680,7 +3680,7 @@ msgstr "O caminho do PID não existe"
 msgid "Plain text is empty"
 msgid "Plain text is empty"
 msgstr "O texto simples está vazio"
 msgstr "O texto simples está vazio"
 
 
-#: src/views/dashboard/NginxDashBoard.vue:171
+#: src/views/dashboard/NginxDashBoard.vue:176
 msgid ""
 msgid ""
 "Please enable the stub_status module to get request statistics, connection "
 "Please enable the stub_status module to get request statistics, connection "
 "count, etc."
 "count, etc."
@@ -4684,7 +4684,7 @@ msgstr "Zona de Memória Partilhada"
 msgid "Show"
 msgid "Show"
 msgstr "Mostrar"
 msgstr "Mostrar"
 
 
-#: src/views/other/Login.vue:281
+#: src/views/other/Login.vue:285
 msgid "Sign in with a passkey"
 msgid "Sign in with a passkey"
 msgstr "Iniciar sessão com uma chave de acesso"
 msgstr "Iniciar sessão com uma chave de acesso"
 
 
@@ -4792,7 +4792,7 @@ msgstr "Caminho da chave SSL"
 msgid "SSL key path is required when HTTPS is enabled"
 msgid "SSL key path is required when HTTPS is enabled"
 msgstr "O caminho da chave SSL é necessário quando o HTTPS está ativado"
 msgstr "O caminho da chave SSL é necessário quando o HTTPS está ativado"
 
 
-#: src/views/other/Login.vue:238
+#: src/views/other/Login.vue:242
 msgid "SSO Login"
 msgid "SSO Login"
 msgstr "Autenticação SSO"
 msgstr "Autenticação SSO"
 
 
@@ -5241,7 +5241,7 @@ msgid ""
 msgstr ""
 msgstr ""
 "Este campo deve conter apenas letras, caracteres Unicode, números e -_./:"
 "Este campo deve conter apenas letras, caracteres Unicode, números e -_./:"
 
 
-#: src/views/dashboard/NginxDashBoard.vue:150
+#: src/views/dashboard/NginxDashBoard.vue:155
 msgid ""
 msgid ""
 "This module provides Nginx request statistics, connection count, etc. data. "
 "This module provides Nginx request statistics, connection count, etc. data. "
 "After enabling it, you can view performance statistics"
 "After enabling it, you can view performance statistics"
@@ -5556,7 +5556,7 @@ msgstr "Utilizador não ativou OTP como 2FA"
 msgid "User Profile"
 msgid "User Profile"
 msgstr "Perfil do utilizador"
 msgstr "Perfil do utilizador"
 
 
-#: src/views/other/Login.vue:214 src/views/user/userColumns.tsx:7
+#: src/views/other/Login.vue:218 src/views/user/userColumns.tsx:7
 #: src/views/user/UserProfile.vue:127 src/views/user/UserProfile.vue:131
 #: src/views/user/UserProfile.vue:127 src/views/user/UserProfile.vue:131
 msgid "Username"
 msgid "Username"
 msgstr "Nome de Utilizador"
 msgstr "Nome de Utilizador"

+ 21 - 21
app/src/language/ru_RU/app.po

@@ -656,7 +656,7 @@ msgstr "Невозможно сравнить: отсутствующий кон
 msgid "Cannot delete protected path: {0}"
 msgid "Cannot delete protected path: {0}"
 msgstr "Невозможно удалить защищенный путь: {0}"
 msgstr "Невозможно удалить защищенный путь: {0}"
 
 
-#: src/views/dashboard/NginxDashBoard.vue:129
+#: src/views/dashboard/NginxDashBoard.vue:134
 msgid "Cannot get performance data in this state"
 msgid "Cannot get performance data in this state"
 msgstr "Не может получить данные о производительности в этом состоянии"
 msgstr "Не может получить данные о производительности в этом состоянии"
 
 
@@ -1079,7 +1079,7 @@ msgstr "Подтвердите новый пароль"
 msgid "Connected"
 msgid "Connected"
 msgstr "Подключено"
 msgstr "Подключено"
 
 
-#: src/views/dashboard/NginxDashBoard.vue:82
+#: src/views/dashboard/NginxDashBoard.vue:87
 msgid "Connection error, trying to reconnect..."
 msgid "Connection error, trying to reconnect..."
 msgstr "Ошибка соединения, попытка переподключения..."
 msgstr "Ошибка соединения, попытка переподключения..."
 
 
@@ -1743,7 +1743,7 @@ msgstr "Не удалось включить поток %{name} на %{node}"
 msgid "Enable stream %{name} on %{node} successfully"
 msgid "Enable stream %{name} on %{node} successfully"
 msgstr "Поток %{name} успешно включён на %{node}"
 msgstr "Поток %{name} успешно включён на %{node}"
 
 
-#: src/views/dashboard/NginxDashBoard.vue:147
+#: src/views/dashboard/NginxDashBoard.vue:152
 msgid "Enable stub_status module"
 msgid "Enable stub_status module"
 msgstr "Включить модуль stub_status"
 msgstr "Включить модуль stub_status"
 
 
@@ -2328,7 +2328,7 @@ msgstr "Генерация приватного ключа для регистр
 msgid "Get acme user error: {0}"
 msgid "Get acme user error: {0}"
 msgstr "Ошибка получения пользователя ACME: {0}"
 msgstr "Ошибка получения пользователя ACME: {0}"
 
 
-#: src/views/dashboard/NginxDashBoard.vue:138
+#: src/views/dashboard/NginxDashBoard.vue:143
 msgid "Get data failed"
 msgid "Get data failed"
 msgstr "Не удалось получить данные"
 msgstr "Не удалось получить данные"
 
 
@@ -2663,7 +2663,7 @@ msgstr "Время последнего резервного копирован
 msgid "Last checked at"
 msgid "Last checked at"
 msgstr "Последняя проверка в"
 msgstr "Последняя проверка в"
 
 
-#: src/views/dashboard/NginxDashBoard.vue:113
+#: src/views/dashboard/NginxDashBoard.vue:118
 msgid "Last update"
 msgid "Last update"
 msgstr "Последнее обновление"
 msgstr "Последнее обновление"
 
 
@@ -2750,7 +2750,7 @@ msgstr "Пауза загрузчика"
 msgid "Loader Threshold"
 msgid "Loader Threshold"
 msgstr "Порог загрузчика"
 msgstr "Порог загрузчика"
 
 
-#: src/views/dashboard/NginxDashBoard.vue:175
+#: src/views/dashboard/NginxDashBoard.vue:180
 msgid "Loading data..."
 msgid "Loading data..."
 msgstr "Загрузка данных..."
 msgstr "Загрузка данных..."
 
 
@@ -2793,11 +2793,11 @@ msgstr ""
 msgid "Log List"
 msgid "Log List"
 msgstr "Список журналов"
 msgstr "Список журналов"
 
 
-#: src/routes/modules/auth.ts:14 src/views/other/Login.vue:263
+#: src/routes/modules/auth.ts:14 src/views/other/Login.vue:267
 msgid "Login"
 msgid "Login"
 msgstr "Логин"
 msgstr "Логин"
 
 
-#: src/views/other/Login.vue:75
+#: src/views/other/Login.vue:76
 msgid "Login successful"
 msgid "Login successful"
 msgstr "Авторизация успешна"
 msgstr "Авторизация успешна"
 
 
@@ -3048,7 +3048,7 @@ msgstr "Многострочная директива"
 msgid "Name"
 msgid "Name"
 msgstr "Имя"
 msgstr "Имя"
 
 
-#: src/views/dashboard/NginxDashBoard.vue:170
+#: src/views/dashboard/NginxDashBoard.vue:175
 msgid "Need to enable the stub_status module"
 msgid "Need to enable the stub_status module"
 msgstr "Необходимо включить модуль stub_status"
 msgstr "Необходимо включить модуль stub_status"
 
 
@@ -3200,8 +3200,8 @@ msgstr "Ошибка Nginx: {0}"
 
 
 #: src/components/NgxConfigEditor/NginxStatusAlert.vue:15
 #: src/components/NgxConfigEditor/NginxStatusAlert.vue:15
 #: src/composables/useNginxPerformance.ts:43
 #: src/composables/useNginxPerformance.ts:43
-#: src/views/dashboard/NginxDashBoard.vue:109
-#: src/views/dashboard/NginxDashBoard.vue:128
+#: src/views/dashboard/NginxDashBoard.vue:114
+#: src/views/dashboard/NginxDashBoard.vue:133
 #: src/views/dashboard/NginxDashBoard.vue:77
 #: src/views/dashboard/NginxDashBoard.vue:77
 msgid "Nginx is not running"
 msgid "Nginx is not running"
 msgstr "Nginx не работает"
 msgstr "Nginx не работает"
@@ -3210,7 +3210,7 @@ msgstr "Nginx не работает"
 msgid "Nginx is not running in another container"
 msgid "Nginx is not running in another container"
 msgstr "Nginx не работает в другом контейнере"
 msgstr "Nginx не работает в другом контейнере"
 
 
-#: src/views/dashboard/NginxDashBoard.vue:109
+#: src/views/dashboard/NginxDashBoard.vue:114
 msgid "Nginx is running"
 msgid "Nginx is running"
 msgstr "Nginx работает"
 msgstr "Nginx работает"
 
 
@@ -3324,7 +3324,7 @@ msgstr "Нет"
 msgid "No Action"
 msgid "No Action"
 msgstr "Нет действия"
 msgstr "Нет действия"
 
 
-#: src/views/dashboard/NginxDashBoard.vue:177
+#: src/views/dashboard/NginxDashBoard.vue:182
 msgid "No data"
 msgid "No data"
 msgstr "Нет данных"
 msgstr "Нет данных"
 
 
@@ -3515,7 +3515,7 @@ msgstr "Открыт"
 msgid "OpenAI"
 msgid "OpenAI"
 msgstr "OpenAI"
 msgstr "OpenAI"
 
 
-#: src/components/TwoFA/Authorization.vue:100 src/views/other/Login.vue:272
+#: src/components/TwoFA/Authorization.vue:100 src/views/other/Login.vue:276
 msgid "Or"
 msgid "Or"
 msgstr "Или"
 msgstr "Или"
 
 
@@ -3589,7 +3589,7 @@ msgstr ""
 "могут использоваться вместо пароля или в качестве метода двухфакторной "
 "могут использоваться вместо пароля или в качестве метода двухфакторной "
 "аутентификации (2FA)."
 "аутентификации (2FA)."
 
 
-#: src/views/other/Login.vue:224 src/views/user/userColumns.tsx:16
+#: src/views/other/Login.vue:228 src/views/user/userColumns.tsx:16
 msgid "Password"
 msgid "Password"
 msgstr "Пароль"
 msgstr "Пароль"
 
 
@@ -3651,7 +3651,7 @@ msgstr "Ошибка обновления ядра"
 msgid "Performance"
 msgid "Performance"
 msgstr "Производительность"
 msgstr "Производительность"
 
 
-#: src/views/dashboard/NginxDashBoard.vue:182
+#: src/views/dashboard/NginxDashBoard.vue:187
 msgid "Performance Metrics"
 msgid "Performance Metrics"
 msgstr "Метрики производительности"
 msgstr "Метрики производительности"
 
 
@@ -3675,7 +3675,7 @@ msgstr "Путь PID не существует"
 msgid "Plain text is empty"
 msgid "Plain text is empty"
 msgstr "Открытый текст пуст"
 msgstr "Открытый текст пуст"
 
 
-#: src/views/dashboard/NginxDashBoard.vue:171
+#: src/views/dashboard/NginxDashBoard.vue:176
 msgid ""
 msgid ""
 "Please enable the stub_status module to get request statistics, connection "
 "Please enable the stub_status module to get request statistics, connection "
 "count, etc."
 "count, etc."
@@ -4677,7 +4677,7 @@ msgstr "Зона общей памяти"
 msgid "Show"
 msgid "Show"
 msgstr "Показать"
 msgstr "Показать"
 
 
-#: src/views/other/Login.vue:281
+#: src/views/other/Login.vue:285
 msgid "Sign in with a passkey"
 msgid "Sign in with a passkey"
 msgstr "Войти с помощью ключа доступа"
 msgstr "Войти с помощью ключа доступа"
 
 
@@ -4783,7 +4783,7 @@ msgstr "Путь к SSL-ключу"
 msgid "SSL key path is required when HTTPS is enabled"
 msgid "SSL key path is required when HTTPS is enabled"
 msgstr "Путь к SSL-ключу обязателен при включении HTTPS"
 msgstr "Путь к SSL-ключу обязателен при включении HTTPS"
 
 
-#: src/views/other/Login.vue:238
+#: src/views/other/Login.vue:242
 msgid "SSO Login"
 msgid "SSO Login"
 msgstr "SSO Вход"
 msgstr "SSO Вход"
 
 
@@ -5226,7 +5226,7 @@ msgid ""
 "_./:"
 "_./:"
 msgstr "Это поле должно содержать только буквы, символы Unicode, цифры и -_./:"
 msgstr "Это поле должно содержать только буквы, символы Unicode, цифры и -_./:"
 
 
-#: src/views/dashboard/NginxDashBoard.vue:150
+#: src/views/dashboard/NginxDashBoard.vue:155
 msgid ""
 msgid ""
 "This module provides Nginx request statistics, connection count, etc. data. "
 "This module provides Nginx request statistics, connection count, etc. data. "
 "After enabling it, you can view performance statistics"
 "After enabling it, you can view performance statistics"
@@ -5543,7 +5543,7 @@ msgstr "Пользователь не включил OTP в качестве 2FA
 msgid "User Profile"
 msgid "User Profile"
 msgstr "Профиль пользователя"
 msgstr "Профиль пользователя"
 
 
-#: src/views/other/Login.vue:214 src/views/user/userColumns.tsx:7
+#: src/views/other/Login.vue:218 src/views/user/userColumns.tsx:7
 #: src/views/user/UserProfile.vue:127 src/views/user/UserProfile.vue:131
 #: src/views/user/UserProfile.vue:127 src/views/user/UserProfile.vue:131
 msgid "Username"
 msgid "Username"
 msgstr "Имя пользователя"
 msgstr "Имя пользователя"

+ 21 - 21
app/src/language/tr_TR/app.po

@@ -649,7 +649,7 @@ msgstr "Karşılaştırılamaz: Eksik İçerik"
 msgid "Cannot delete protected path: {0}"
 msgid "Cannot delete protected path: {0}"
 msgstr "Korunan yol silinemez: {0}"
 msgstr "Korunan yol silinemez: {0}"
 
 
-#: src/views/dashboard/NginxDashBoard.vue:129
+#: src/views/dashboard/NginxDashBoard.vue:134
 msgid "Cannot get performance data in this state"
 msgid "Cannot get performance data in this state"
 msgstr "Bu durumda performans verileri alamıyorum"
 msgstr "Bu durumda performans verileri alamıyorum"
 
 
@@ -1074,7 +1074,7 @@ msgstr "Yeni Şifreyi Onayla"
 msgid "Connected"
 msgid "Connected"
 msgstr "Bağlandı"
 msgstr "Bağlandı"
 
 
-#: src/views/dashboard/NginxDashBoard.vue:82
+#: src/views/dashboard/NginxDashBoard.vue:87
 msgid "Connection error, trying to reconnect..."
 msgid "Connection error, trying to reconnect..."
 msgstr "Bağlantı hatası, yeniden bağlanılmaya çalışılıyor..."
 msgstr "Bağlantı hatası, yeniden bağlanılmaya çalışılıyor..."
 
 
@@ -1741,7 +1741,7 @@ msgstr "%{node} üzerinde %{name} akışı etkinleştirilemedi"
 msgid "Enable stream %{name} on %{node} successfully"
 msgid "Enable stream %{name} on %{node} successfully"
 msgstr "%{node} üzerinde %{name} akışı başarıyla etkinleştirildi"
 msgstr "%{node} üzerinde %{name} akışı başarıyla etkinleştirildi"
 
 
-#: src/views/dashboard/NginxDashBoard.vue:147
+#: src/views/dashboard/NginxDashBoard.vue:152
 msgid "Enable stub_status module"
 msgid "Enable stub_status module"
 msgstr "stub_status modülünü etkinleştir"
 msgstr "stub_status modülünü etkinleştir"
 
 
@@ -2326,7 +2326,7 @@ msgstr "Hesap kaydı için özel anahtar oluşturuluyor"
 msgid "Get acme user error: {0}"
 msgid "Get acme user error: {0}"
 msgstr "ACME kullanıcısı alınırken hata: {0}"
 msgstr "ACME kullanıcısı alınırken hata: {0}"
 
 
-#: src/views/dashboard/NginxDashBoard.vue:138
+#: src/views/dashboard/NginxDashBoard.vue:143
 msgid "Get data failed"
 msgid "Get data failed"
 msgstr "Veri alınamadı"
 msgstr "Veri alınamadı"
 
 
@@ -2663,7 +2663,7 @@ msgstr "Son Yedekleme Zamanı"
 msgid "Last checked at"
 msgid "Last checked at"
 msgstr "En son şu tarihte kontrol edildi"
 msgstr "En son şu tarihte kontrol edildi"
 
 
-#: src/views/dashboard/NginxDashBoard.vue:113
+#: src/views/dashboard/NginxDashBoard.vue:118
 msgid "Last update"
 msgid "Last update"
 msgstr "Son güncelleme"
 msgstr "Son güncelleme"
 
 
@@ -2750,7 +2750,7 @@ msgstr "Yükleyici Bekleme Süresi"
 msgid "Loader Threshold"
 msgid "Loader Threshold"
 msgstr "Yükleyici Eşiği"
 msgstr "Yükleyici Eşiği"
 
 
-#: src/views/dashboard/NginxDashBoard.vue:175
+#: src/views/dashboard/NginxDashBoard.vue:180
 msgid "Loading data..."
 msgid "Loading data..."
 msgstr "Veriler yükleniyor..."
 msgstr "Veriler yükleniyor..."
 
 
@@ -2793,11 +2793,11 @@ msgstr ""
 msgid "Log List"
 msgid "Log List"
 msgstr "Günlük Listesi"
 msgstr "Günlük Listesi"
 
 
-#: src/routes/modules/auth.ts:14 src/views/other/Login.vue:263
+#: src/routes/modules/auth.ts:14 src/views/other/Login.vue:267
 msgid "Login"
 msgid "Login"
 msgstr "Giriş"
 msgstr "Giriş"
 
 
-#: src/views/other/Login.vue:75
+#: src/views/other/Login.vue:76
 msgid "Login successful"
 msgid "Login successful"
 msgstr "Giriş Başarılı"
 msgstr "Giriş Başarılı"
 
 
@@ -3048,7 +3048,7 @@ msgstr "Çok Satırlı Yönergeler"
 msgid "Name"
 msgid "Name"
 msgstr "İsim"
 msgstr "İsim"
 
 
-#: src/views/dashboard/NginxDashBoard.vue:170
+#: src/views/dashboard/NginxDashBoard.vue:175
 msgid "Need to enable the stub_status module"
 msgid "Need to enable the stub_status module"
 msgstr "stub_status modülünün etkinleştirilmesi gerekiyor"
 msgstr "stub_status modülünün etkinleştirilmesi gerekiyor"
 
 
@@ -3200,8 +3200,8 @@ msgstr "Nginx hatası: {0}"
 
 
 #: src/components/NgxConfigEditor/NginxStatusAlert.vue:15
 #: src/components/NgxConfigEditor/NginxStatusAlert.vue:15
 #: src/composables/useNginxPerformance.ts:43
 #: src/composables/useNginxPerformance.ts:43
-#: src/views/dashboard/NginxDashBoard.vue:109
-#: src/views/dashboard/NginxDashBoard.vue:128
+#: src/views/dashboard/NginxDashBoard.vue:114
+#: src/views/dashboard/NginxDashBoard.vue:133
 #: src/views/dashboard/NginxDashBoard.vue:77
 #: src/views/dashboard/NginxDashBoard.vue:77
 msgid "Nginx is not running"
 msgid "Nginx is not running"
 msgstr "Nginx çalışmıyor"
 msgstr "Nginx çalışmıyor"
@@ -3210,7 +3210,7 @@ msgstr "Nginx çalışmıyor"
 msgid "Nginx is not running in another container"
 msgid "Nginx is not running in another container"
 msgstr "Nginx başka bir konteynerde çalışmıyor"
 msgstr "Nginx başka bir konteynerde çalışmıyor"
 
 
-#: src/views/dashboard/NginxDashBoard.vue:109
+#: src/views/dashboard/NginxDashBoard.vue:114
 msgid "Nginx is running"
 msgid "Nginx is running"
 msgstr "Nginx çalışıyor"
 msgstr "Nginx çalışıyor"
 
 
@@ -3324,7 +3324,7 @@ msgstr "Hayır"
 msgid "No Action"
 msgid "No Action"
 msgstr "Eylem Yok"
 msgstr "Eylem Yok"
 
 
-#: src/views/dashboard/NginxDashBoard.vue:177
+#: src/views/dashboard/NginxDashBoard.vue:182
 msgid "No data"
 msgid "No data"
 msgstr "Veri yok"
 msgstr "Veri yok"
 
 
@@ -3515,7 +3515,7 @@ msgstr "Açık"
 msgid "OpenAI"
 msgid "OpenAI"
 msgstr "OpenAI"
 msgstr "OpenAI"
 
 
-#: src/components/TwoFA/Authorization.vue:100 src/views/other/Login.vue:272
+#: src/components/TwoFA/Authorization.vue:100 src/views/other/Login.vue:276
 msgid "Or"
 msgid "Or"
 msgstr "Veya"
 msgstr "Veya"
 
 
@@ -3588,7 +3588,7 @@ msgstr ""
 "kimliğinizi doğrulayan WebAuthn kimlik bilgileridir. Bir şifre yerine veya "
 "kimliğinizi doğrulayan WebAuthn kimlik bilgileridir. Bir şifre yerine veya "
 "iki faktörlü kimlik doğrulama (2FA) yöntemi olarak kullanılabilirler."
 "iki faktörlü kimlik doğrulama (2FA) yöntemi olarak kullanılabilirler."
 
 
-#: src/views/other/Login.vue:224 src/views/user/userColumns.tsx:16
+#: src/views/other/Login.vue:228 src/views/user/userColumns.tsx:16
 msgid "Password"
 msgid "Password"
 msgstr "Şifre"
 msgstr "Şifre"
 
 
@@ -3650,7 +3650,7 @@ msgstr "Çekirdek yükseltme hatası"
 msgid "Performance"
 msgid "Performance"
 msgstr "Performans"
 msgstr "Performans"
 
 
-#: src/views/dashboard/NginxDashBoard.vue:182
+#: src/views/dashboard/NginxDashBoard.vue:187
 msgid "Performance Metrics"
 msgid "Performance Metrics"
 msgstr "Performans Metrikleri"
 msgstr "Performans Metrikleri"
 
 
@@ -3674,7 +3674,7 @@ msgstr "PID yolu mevcut değil"
 msgid "Plain text is empty"
 msgid "Plain text is empty"
 msgstr "Düz metin boş"
 msgstr "Düz metin boş"
 
 
-#: src/views/dashboard/NginxDashBoard.vue:171
+#: src/views/dashboard/NginxDashBoard.vue:176
 msgid ""
 msgid ""
 "Please enable the stub_status module to get request statistics, connection "
 "Please enable the stub_status module to get request statistics, connection "
 "count, etc."
 "count, etc."
@@ -4682,7 +4682,7 @@ msgstr "Paylaşılan Bellek Bölgesi"
 msgid "Show"
 msgid "Show"
 msgstr "Göster"
 msgstr "Göster"
 
 
-#: src/views/other/Login.vue:281
+#: src/views/other/Login.vue:285
 msgid "Sign in with a passkey"
 msgid "Sign in with a passkey"
 msgstr "Bir anahtarla oturum aç"
 msgstr "Bir anahtarla oturum aç"
 
 
@@ -4787,7 +4787,7 @@ msgstr "SSL Anahtar Yolu"
 msgid "SSL key path is required when HTTPS is enabled"
 msgid "SSL key path is required when HTTPS is enabled"
 msgstr "HTTPS etkinleştirildiğinde SSL anahtar yolu gereklidir"
 msgstr "HTTPS etkinleştirildiğinde SSL anahtar yolu gereklidir"
 
 
-#: src/views/other/Login.vue:238
+#: src/views/other/Login.vue:242
 msgid "SSO Login"
 msgid "SSO Login"
 msgstr "SSO Girişi"
 msgstr "SSO Girişi"
 
 
@@ -5234,7 +5234,7 @@ msgid ""
 msgstr ""
 msgstr ""
 "Bu alan yalnızca harfler, Unicode karakterler, sayılar ve -_./: içermelidir"
 "Bu alan yalnızca harfler, Unicode karakterler, sayılar ve -_./: içermelidir"
 
 
-#: src/views/dashboard/NginxDashBoard.vue:150
+#: src/views/dashboard/NginxDashBoard.vue:155
 msgid ""
 msgid ""
 "This module provides Nginx request statistics, connection count, etc. data. "
 "This module provides Nginx request statistics, connection count, etc. data. "
 "After enabling it, you can view performance statistics"
 "After enabling it, you can view performance statistics"
@@ -5550,7 +5550,7 @@ msgstr "Kullanıcı OTP'yi 2FA olarak etkinleştirmedi"
 msgid "User Profile"
 msgid "User Profile"
 msgstr "Kullanıcı Profili"
 msgstr "Kullanıcı Profili"
 
 
-#: src/views/other/Login.vue:214 src/views/user/userColumns.tsx:7
+#: src/views/other/Login.vue:218 src/views/user/userColumns.tsx:7
 #: src/views/user/UserProfile.vue:127 src/views/user/UserProfile.vue:131
 #: src/views/user/UserProfile.vue:127 src/views/user/UserProfile.vue:131
 msgid "Username"
 msgid "Username"
 msgstr "Kullanıcı Adı"
 msgstr "Kullanıcı Adı"

+ 21 - 21
app/src/language/uk_UA/app.po

@@ -657,7 +657,7 @@ msgstr "Не вдається порівняти: відсутній вміст"
 msgid "Cannot delete protected path: {0}"
 msgid "Cannot delete protected path: {0}"
 msgstr "Неможливо видалити захищений шлях: {0}"
 msgstr "Неможливо видалити захищений шлях: {0}"
 
 
-#: src/views/dashboard/NginxDashBoard.vue:129
+#: src/views/dashboard/NginxDashBoard.vue:134
 msgid "Cannot get performance data in this state"
 msgid "Cannot get performance data in this state"
 msgstr "Не вдається отримати дані про ефективність у цьому стані"
 msgstr "Не вдається отримати дані про ефективність у цьому стані"
 
 
@@ -1077,7 +1077,7 @@ msgstr "Підтвердити новий пароль"
 msgid "Connected"
 msgid "Connected"
 msgstr "Підключено"
 msgstr "Підключено"
 
 
-#: src/views/dashboard/NginxDashBoard.vue:82
+#: src/views/dashboard/NginxDashBoard.vue:87
 msgid "Connection error, trying to reconnect..."
 msgid "Connection error, trying to reconnect..."
 msgstr "Помилка з'єднання, спроба повторного підключення..."
 msgstr "Помилка з'єднання, спроба повторного підключення..."
 
 
@@ -1814,7 +1814,7 @@ msgstr "Не вдалося увімкнути потік %{name} на %{node}"
 msgid "Enable stream %{name} on %{node} successfully"
 msgid "Enable stream %{name} on %{node} successfully"
 msgstr "Потік %{name} успішно ввімкнено на %{node}"
 msgstr "Потік %{name} успішно ввімкнено на %{node}"
 
 
-#: src/views/dashboard/NginxDashBoard.vue:147
+#: src/views/dashboard/NginxDashBoard.vue:152
 msgid "Enable stub_status module"
 msgid "Enable stub_status module"
 msgstr "Увімкнути модуль stub_status"
 msgstr "Увімкнути модуль stub_status"
 
 
@@ -2399,7 +2399,7 @@ msgstr "Генерація приватного ключа для реєстра
 msgid "Get acme user error: {0}"
 msgid "Get acme user error: {0}"
 msgstr "Помилка отримання користувача ACME: {0}"
 msgstr "Помилка отримання користувача ACME: {0}"
 
 
-#: src/views/dashboard/NginxDashBoard.vue:138
+#: src/views/dashboard/NginxDashBoard.vue:143
 msgid "Get data failed"
 msgid "Get data failed"
 msgstr "Не вдалося отримати дані"
 msgstr "Не вдалося отримати дані"
 
 
@@ -2733,7 +2733,7 @@ msgstr "Час останньої резервної копії"
 msgid "Last checked at"
 msgid "Last checked at"
 msgstr "Остання перевірка"
 msgstr "Остання перевірка"
 
 
-#: src/views/dashboard/NginxDashBoard.vue:113
+#: src/views/dashboard/NginxDashBoard.vue:118
 msgid "Last update"
 msgid "Last update"
 msgstr "Останнє оновлення"
 msgstr "Останнє оновлення"
 
 
@@ -2821,7 +2821,7 @@ msgstr "Час очікування завантажувача"
 msgid "Loader Threshold"
 msgid "Loader Threshold"
 msgstr "Поріг завантажувача"
 msgstr "Поріг завантажувача"
 
 
-#: src/views/dashboard/NginxDashBoard.vue:175
+#: src/views/dashboard/NginxDashBoard.vue:180
 msgid "Loading data..."
 msgid "Loading data..."
 msgstr "Завантаження даних..."
 msgstr "Завантаження даних..."
 
 
@@ -2864,11 +2864,11 @@ msgstr ""
 msgid "Log List"
 msgid "Log List"
 msgstr "Список журналів"
 msgstr "Список журналів"
 
 
-#: src/routes/modules/auth.ts:14 src/views/other/Login.vue:263
+#: src/routes/modules/auth.ts:14 src/views/other/Login.vue:267
 msgid "Login"
 msgid "Login"
 msgstr "Увійти"
 msgstr "Увійти"
 
 
-#: src/views/other/Login.vue:75
+#: src/views/other/Login.vue:76
 msgid "Login successful"
 msgid "Login successful"
 msgstr "Успішний вхід"
 msgstr "Успішний вхід"
 
 
@@ -3119,7 +3119,7 @@ msgstr "Багаторядкова директива"
 msgid "Name"
 msgid "Name"
 msgstr "Ім'я"
 msgstr "Ім'я"
 
 
-#: src/views/dashboard/NginxDashBoard.vue:170
+#: src/views/dashboard/NginxDashBoard.vue:175
 msgid "Need to enable the stub_status module"
 msgid "Need to enable the stub_status module"
 msgstr "Потрібно активувати модуль stub_status"
 msgstr "Потрібно активувати модуль stub_status"
 
 
@@ -3271,8 +3271,8 @@ msgstr "Помилка Nginx: {0}"
 
 
 #: src/components/NgxConfigEditor/NginxStatusAlert.vue:15
 #: src/components/NgxConfigEditor/NginxStatusAlert.vue:15
 #: src/composables/useNginxPerformance.ts:43
 #: src/composables/useNginxPerformance.ts:43
-#: src/views/dashboard/NginxDashBoard.vue:109
-#: src/views/dashboard/NginxDashBoard.vue:128
+#: src/views/dashboard/NginxDashBoard.vue:114
+#: src/views/dashboard/NginxDashBoard.vue:133
 #: src/views/dashboard/NginxDashBoard.vue:77
 #: src/views/dashboard/NginxDashBoard.vue:77
 msgid "Nginx is not running"
 msgid "Nginx is not running"
 msgstr "Nginx не працює"
 msgstr "Nginx не працює"
@@ -3281,7 +3281,7 @@ msgstr "Nginx не працює"
 msgid "Nginx is not running in another container"
 msgid "Nginx is not running in another container"
 msgstr "Nginx не працює в іншому контейнері"
 msgstr "Nginx не працює в іншому контейнері"
 
 
-#: src/views/dashboard/NginxDashBoard.vue:109
+#: src/views/dashboard/NginxDashBoard.vue:114
 msgid "Nginx is running"
 msgid "Nginx is running"
 msgstr "Nginx працює"
 msgstr "Nginx працює"
 
 
@@ -3395,7 +3395,7 @@ msgstr "Ні"
 msgid "No Action"
 msgid "No Action"
 msgstr "Без дії"
 msgstr "Без дії"
 
 
-#: src/views/dashboard/NginxDashBoard.vue:177
+#: src/views/dashboard/NginxDashBoard.vue:182
 msgid "No data"
 msgid "No data"
 msgstr "Немає даних"
 msgstr "Немає даних"
 
 
@@ -3586,7 +3586,7 @@ msgstr "Відкрито"
 msgid "OpenAI"
 msgid "OpenAI"
 msgstr "OpenAI"
 msgstr "OpenAI"
 
 
-#: src/components/TwoFA/Authorization.vue:100 src/views/other/Login.vue:272
+#: src/components/TwoFA/Authorization.vue:100 src/views/other/Login.vue:276
 msgid "Or"
 msgid "Or"
 msgstr "Або"
 msgstr "Або"
 
 
@@ -3660,7 +3660,7 @@ msgstr ""
 "можуть використовуватися замість пароля або як метод двофакторної "
 "можуть використовуватися замість пароля або як метод двофакторної "
 "аутентифікації (2FA)."
 "аутентифікації (2FA)."
 
 
-#: src/views/other/Login.vue:224 src/views/user/userColumns.tsx:16
+#: src/views/other/Login.vue:228 src/views/user/userColumns.tsx:16
 msgid "Password"
 msgid "Password"
 msgstr "Пароль"
 msgstr "Пароль"
 
 
@@ -3722,7 +3722,7 @@ msgstr "Помилка виконання оновлення ядра"
 msgid "Performance"
 msgid "Performance"
 msgstr "Продуктивність"
 msgstr "Продуктивність"
 
 
-#: src/views/dashboard/NginxDashBoard.vue:182
+#: src/views/dashboard/NginxDashBoard.vue:187
 msgid "Performance Metrics"
 msgid "Performance Metrics"
 msgstr "Метрики продуктивності"
 msgstr "Метрики продуктивності"
 
 
@@ -3746,7 +3746,7 @@ msgstr "Шлях PID не існує"
 msgid "Plain text is empty"
 msgid "Plain text is empty"
 msgstr "Звичайний текст порожній"
 msgstr "Звичайний текст порожній"
 
 
-#: src/views/dashboard/NginxDashBoard.vue:171
+#: src/views/dashboard/NginxDashBoard.vue:176
 msgid ""
 msgid ""
 "Please enable the stub_status module to get request statistics, connection "
 "Please enable the stub_status module to get request statistics, connection "
 "count, etc."
 "count, etc."
@@ -4749,7 +4749,7 @@ msgstr "Зона спільної пам'яті"
 msgid "Show"
 msgid "Show"
 msgstr "Показати"
 msgstr "Показати"
 
 
-#: src/views/other/Login.vue:281
+#: src/views/other/Login.vue:285
 msgid "Sign in with a passkey"
 msgid "Sign in with a passkey"
 msgstr "Увійти за допомогою ключа доступу"
 msgstr "Увійти за допомогою ключа доступу"
 
 
@@ -4855,7 +4855,7 @@ msgstr "Шлях до SSL-ключа"
 msgid "SSL key path is required when HTTPS is enabled"
 msgid "SSL key path is required when HTTPS is enabled"
 msgstr "Шлях до SSL-ключа обов’язковий при ввімкненні HTTPS"
 msgstr "Шлях до SSL-ключа обов’язковий при ввімкненні HTTPS"
 
 
-#: src/views/other/Login.vue:238
+#: src/views/other/Login.vue:242
 msgid "SSO Login"
 msgid "SSO Login"
 msgstr "Вхід через SSO"
 msgstr "Вхід через SSO"
 
 
@@ -5299,7 +5299,7 @@ msgid ""
 "_./:"
 "_./:"
 msgstr "Це поле має містити лише літери, символи Unicode, цифри та -_./:"
 msgstr "Це поле має містити лише літери, символи Unicode, цифри та -_./:"
 
 
-#: src/views/dashboard/NginxDashBoard.vue:150
+#: src/views/dashboard/NginxDashBoard.vue:155
 msgid ""
 msgid ""
 "This module provides Nginx request statistics, connection count, etc. data. "
 "This module provides Nginx request statistics, connection count, etc. data. "
 "After enabling it, you can view performance statistics"
 "After enabling it, you can view performance statistics"
@@ -5614,7 +5614,7 @@ msgstr "Користувач не увімкнув OTP як 2FA"
 msgid "User Profile"
 msgid "User Profile"
 msgstr "Профіль користувача"
 msgstr "Профіль користувача"
 
 
-#: src/views/other/Login.vue:214 src/views/user/userColumns.tsx:7
+#: src/views/other/Login.vue:218 src/views/user/userColumns.tsx:7
 #: src/views/user/UserProfile.vue:127 src/views/user/UserProfile.vue:131
 #: src/views/user/UserProfile.vue:127 src/views/user/UserProfile.vue:131
 msgid "Username"
 msgid "Username"
 msgstr "Ім’я користувача"
 msgstr "Ім’я користувача"

+ 21 - 21
app/src/language/vi_VN/app.po

@@ -637,7 +637,7 @@ msgstr "Không thể so sánh: Thiếu nội dung"
 msgid "Cannot delete protected path: {0}"
 msgid "Cannot delete protected path: {0}"
 msgstr "Không thể xóa đường dẫn được bảo vệ: {0}"
 msgstr "Không thể xóa đường dẫn được bảo vệ: {0}"
 
 
-#: src/views/dashboard/NginxDashBoard.vue:129
+#: src/views/dashboard/NginxDashBoard.vue:134
 msgid "Cannot get performance data in this state"
 msgid "Cannot get performance data in this state"
 msgstr "Không thể nhận được dữ liệu hiệu suất ở trạng thái này"
 msgstr "Không thể nhận được dữ liệu hiệu suất ở trạng thái này"
 
 
@@ -1056,7 +1056,7 @@ msgstr "Xác nhận mật khẩu mới"
 msgid "Connected"
 msgid "Connected"
 msgstr "Đã kết nối"
 msgstr "Đã kết nối"
 
 
-#: src/views/dashboard/NginxDashBoard.vue:82
+#: src/views/dashboard/NginxDashBoard.vue:87
 msgid "Connection error, trying to reconnect..."
 msgid "Connection error, trying to reconnect..."
 msgstr "Lỗi kết nối, đang thử kết nối lại..."
 msgstr "Lỗi kết nối, đang thử kết nối lại..."
 
 
@@ -1718,7 +1718,7 @@ msgstr "Không thể bật luồng %{name} trên %{node}"
 msgid "Enable stream %{name} on %{node} successfully"
 msgid "Enable stream %{name} on %{node} successfully"
 msgstr "Đã bật luồng %{name} trên %{node} thành công"
 msgstr "Đã bật luồng %{name} trên %{node} thành công"
 
 
-#: src/views/dashboard/NginxDashBoard.vue:147
+#: src/views/dashboard/NginxDashBoard.vue:152
 msgid "Enable stub_status module"
 msgid "Enable stub_status module"
 msgstr "Bật module stub_status"
 msgstr "Bật module stub_status"
 
 
@@ -2303,7 +2303,7 @@ msgstr "Tạo khóa riêng để đăng ký tài khoản"
 msgid "Get acme user error: {0}"
 msgid "Get acme user error: {0}"
 msgstr "Lỗi khi lấy người dùng ACME: {0}"
 msgstr "Lỗi khi lấy người dùng ACME: {0}"
 
 
-#: src/views/dashboard/NginxDashBoard.vue:138
+#: src/views/dashboard/NginxDashBoard.vue:143
 msgid "Get data failed"
 msgid "Get data failed"
 msgstr "Không thể lấy dữ liệu"
 msgstr "Không thể lấy dữ liệu"
 
 
@@ -2635,7 +2635,7 @@ msgstr "Thời gian sao lưu cuối cùng"
 msgid "Last checked at"
 msgid "Last checked at"
 msgstr "Kiểm tra lần cuối lúc"
 msgstr "Kiểm tra lần cuối lúc"
 
 
-#: src/views/dashboard/NginxDashBoard.vue:113
+#: src/views/dashboard/NginxDashBoard.vue:118
 msgid "Last update"
 msgid "Last update"
 msgstr "Cập nhật cuối cùng"
 msgstr "Cập nhật cuối cùng"
 
 
@@ -2722,7 +2722,7 @@ msgstr "Thời gian nghỉ của bộ nạp"
 msgid "Loader Threshold"
 msgid "Loader Threshold"
 msgstr "Ngưỡng tải"
 msgstr "Ngưỡng tải"
 
 
-#: src/views/dashboard/NginxDashBoard.vue:175
+#: src/views/dashboard/NginxDashBoard.vue:180
 msgid "Loading data..."
 msgid "Loading data..."
 msgstr "Đang tải dữ liệu..."
 msgstr "Đang tải dữ liệu..."
 
 
@@ -2765,11 +2765,11 @@ msgstr ""
 msgid "Log List"
 msgid "Log List"
 msgstr "Danh sách nhật ký"
 msgstr "Danh sách nhật ký"
 
 
-#: src/routes/modules/auth.ts:14 src/views/other/Login.vue:263
+#: src/routes/modules/auth.ts:14 src/views/other/Login.vue:267
 msgid "Login"
 msgid "Login"
 msgstr "Đăng nhập"
 msgstr "Đăng nhập"
 
 
-#: src/views/other/Login.vue:75
+#: src/views/other/Login.vue:76
 msgid "Login successful"
 msgid "Login successful"
 msgstr "Đăng nhập thành công"
 msgstr "Đăng nhập thành công"
 
 
@@ -3020,7 +3020,7 @@ msgstr "Chỉ thị nhiều dòng"
 msgid "Name"
 msgid "Name"
 msgstr "Tên"
 msgstr "Tên"
 
 
-#: src/views/dashboard/NginxDashBoard.vue:170
+#: src/views/dashboard/NginxDashBoard.vue:175
 msgid "Need to enable the stub_status module"
 msgid "Need to enable the stub_status module"
 msgstr "Cần bật module stub_status"
 msgstr "Cần bật module stub_status"
 
 
@@ -3172,8 +3172,8 @@ msgstr "Lỗi Nginx: {0}"
 
 
 #: src/components/NgxConfigEditor/NginxStatusAlert.vue:15
 #: src/components/NgxConfigEditor/NginxStatusAlert.vue:15
 #: src/composables/useNginxPerformance.ts:43
 #: src/composables/useNginxPerformance.ts:43
-#: src/views/dashboard/NginxDashBoard.vue:109
-#: src/views/dashboard/NginxDashBoard.vue:128
+#: src/views/dashboard/NginxDashBoard.vue:114
+#: src/views/dashboard/NginxDashBoard.vue:133
 #: src/views/dashboard/NginxDashBoard.vue:77
 #: src/views/dashboard/NginxDashBoard.vue:77
 msgid "Nginx is not running"
 msgid "Nginx is not running"
 msgstr "Nginx không đang chạy"
 msgstr "Nginx không đang chạy"
@@ -3182,7 +3182,7 @@ msgstr "Nginx không đang chạy"
 msgid "Nginx is not running in another container"
 msgid "Nginx is not running in another container"
 msgstr "Nginx không chạy trong một container khác"
 msgstr "Nginx không chạy trong một container khác"
 
 
-#: src/views/dashboard/NginxDashBoard.vue:109
+#: src/views/dashboard/NginxDashBoard.vue:114
 msgid "Nginx is running"
 msgid "Nginx is running"
 msgstr "Nginx đang chạy"
 msgstr "Nginx đang chạy"
 
 
@@ -3295,7 +3295,7 @@ msgstr "Không"
 msgid "No Action"
 msgid "No Action"
 msgstr "Không hành động"
 msgstr "Không hành động"
 
 
-#: src/views/dashboard/NginxDashBoard.vue:177
+#: src/views/dashboard/NginxDashBoard.vue:182
 msgid "No data"
 msgid "No data"
 msgstr "Không có dữ liệu"
 msgstr "Không có dữ liệu"
 
 
@@ -3484,7 +3484,7 @@ msgstr "Mở"
 msgid "OpenAI"
 msgid "OpenAI"
 msgstr "OpenAI"
 msgstr "OpenAI"
 
 
-#: src/components/TwoFA/Authorization.vue:100 src/views/other/Login.vue:272
+#: src/components/TwoFA/Authorization.vue:100 src/views/other/Login.vue:276
 msgid "Or"
 msgid "Or"
 msgstr "Hoặc"
 msgstr "Hoặc"
 
 
@@ -3558,7 +3558,7 @@ msgstr ""
 "thể được sử dụng để thay thế mật khẩu hoặc làm phương thức xác thực hai yếu "
 "thể được sử dụng để thay thế mật khẩu hoặc làm phương thức xác thực hai yếu "
 "tố (2FA)."
 "tố (2FA)."
 
 
-#: src/views/other/Login.vue:224 src/views/user/userColumns.tsx:16
+#: src/views/other/Login.vue:228 src/views/user/userColumns.tsx:16
 msgid "Password"
 msgid "Password"
 msgstr "Mật khẩu"
 msgstr "Mật khẩu"
 
 
@@ -3620,7 +3620,7 @@ msgstr "Nâng cấp core không thành công"
 msgid "Performance"
 msgid "Performance"
 msgstr "Hiệu suất"
 msgstr "Hiệu suất"
 
 
-#: src/views/dashboard/NginxDashBoard.vue:182
+#: src/views/dashboard/NginxDashBoard.vue:187
 msgid "Performance Metrics"
 msgid "Performance Metrics"
 msgstr "Chỉ số hiệu suất"
 msgstr "Chỉ số hiệu suất"
 
 
@@ -3644,7 +3644,7 @@ msgstr "Đường dẫn PID không tồn tại"
 msgid "Plain text is empty"
 msgid "Plain text is empty"
 msgstr "Văn bản thuần túy trống"
 msgstr "Văn bản thuần túy trống"
 
 
-#: src/views/dashboard/NginxDashBoard.vue:171
+#: src/views/dashboard/NginxDashBoard.vue:176
 msgid ""
 msgid ""
 "Please enable the stub_status module to get request statistics, connection "
 "Please enable the stub_status module to get request statistics, connection "
 "count, etc."
 "count, etc."
@@ -4633,7 +4633,7 @@ msgstr "Vùng Bộ Nhớ Chia Sẻ"
 msgid "Show"
 msgid "Show"
 msgstr "Hiển thị"
 msgstr "Hiển thị"
 
 
-#: src/views/other/Login.vue:281
+#: src/views/other/Login.vue:285
 msgid "Sign in with a passkey"
 msgid "Sign in with a passkey"
 msgstr "Đăng nhập bằng khóa truy cập"
 msgstr "Đăng nhập bằng khóa truy cập"
 
 
@@ -4738,7 +4738,7 @@ msgstr "Đường dẫn khóa SSL"
 msgid "SSL key path is required when HTTPS is enabled"
 msgid "SSL key path is required when HTTPS is enabled"
 msgstr "Đường dẫn khóa SSL là bắt buộc khi bật HTTPS"
 msgstr "Đường dẫn khóa SSL là bắt buộc khi bật HTTPS"
 
 
-#: src/views/other/Login.vue:238
+#: src/views/other/Login.vue:242
 msgid "SSO Login"
 msgid "SSO Login"
 msgstr "Đăng nhập SSO"
 msgstr "Đăng nhập SSO"
 
 
@@ -5181,7 +5181,7 @@ msgid ""
 "_./:"
 "_./:"
 msgstr "Trường này chỉ được chứa chữ cái, ký tự Unicode, số và -_./:"
 msgstr "Trường này chỉ được chứa chữ cái, ký tự Unicode, số và -_./:"
 
 
-#: src/views/dashboard/NginxDashBoard.vue:150
+#: src/views/dashboard/NginxDashBoard.vue:155
 msgid ""
 msgid ""
 "This module provides Nginx request statistics, connection count, etc. data. "
 "This module provides Nginx request statistics, connection count, etc. data. "
 "After enabling it, you can view performance statistics"
 "After enabling it, you can view performance statistics"
@@ -5497,7 +5497,7 @@ msgstr "Người dùng chưa bật OTP làm 2FA"
 msgid "User Profile"
 msgid "User Profile"
 msgstr "Hồ sơ người dùng"
 msgstr "Hồ sơ người dùng"
 
 
-#: src/views/other/Login.vue:214 src/views/user/userColumns.tsx:7
+#: src/views/other/Login.vue:218 src/views/user/userColumns.tsx:7
 #: src/views/user/UserProfile.vue:127 src/views/user/UserProfile.vue:131
 #: src/views/user/UserProfile.vue:127 src/views/user/UserProfile.vue:131
 msgid "Username"
 msgid "Username"
 msgstr "Username"
 msgstr "Username"

+ 21 - 21
app/src/language/zh_CN/app.po

@@ -633,7 +633,7 @@ msgstr "无法比较:内容缺失"
 msgid "Cannot delete protected path: {0}"
 msgid "Cannot delete protected path: {0}"
 msgstr "无法删除受保护的路径:{0}"
 msgstr "无法删除受保护的路径:{0}"
 
 
-#: src/views/dashboard/NginxDashBoard.vue:129
+#: src/views/dashboard/NginxDashBoard.vue:134
 msgid "Cannot get performance data in this state"
 msgid "Cannot get performance data in this state"
 msgstr "在此状态下无法获取性能数据"
 msgstr "在此状态下无法获取性能数据"
 
 
@@ -1039,7 +1039,7 @@ msgstr "确认新密码"
 msgid "Connected"
 msgid "Connected"
 msgstr "已连接"
 msgstr "已连接"
 
 
-#: src/views/dashboard/NginxDashBoard.vue:82
+#: src/views/dashboard/NginxDashBoard.vue:87
 msgid "Connection error, trying to reconnect..."
 msgid "Connection error, trying to reconnect..."
 msgstr "连接错误,正在尝试重新连接..."
 msgstr "连接错误,正在尝试重新连接..."
 
 
@@ -1697,7 +1697,7 @@ msgstr "在 %{node} 中启用 %{name} 失败"
 msgid "Enable stream %{name} on %{node} successfully"
 msgid "Enable stream %{name} on %{node} successfully"
 msgstr "在 %{node} 上启用 %{name} 成功"
 msgstr "在 %{node} 上启用 %{name} 成功"
 
 
-#: src/views/dashboard/NginxDashBoard.vue:147
+#: src/views/dashboard/NginxDashBoard.vue:152
 msgid "Enable stub_status module"
 msgid "Enable stub_status module"
 msgstr "启用 stub_status 模块"
 msgstr "启用 stub_status 模块"
 
 
@@ -2280,7 +2280,7 @@ msgstr "正在生成私钥用于注册账户"
 msgid "Get acme user error: {0}"
 msgid "Get acme user error: {0}"
 msgstr "获取 ACME 用户错误: {0}"
 msgstr "获取 ACME 用户错误: {0}"
 
 
-#: src/views/dashboard/NginxDashBoard.vue:138
+#: src/views/dashboard/NginxDashBoard.vue:143
 msgid "Get data failed"
 msgid "Get data failed"
 msgstr "获取数据失败"
 msgstr "获取数据失败"
 
 
@@ -2604,7 +2604,7 @@ msgstr "上次备份时间"
 msgid "Last checked at"
 msgid "Last checked at"
 msgstr "最后检查时间"
 msgstr "最后检查时间"
 
 
-#: src/views/dashboard/NginxDashBoard.vue:113
+#: src/views/dashboard/NginxDashBoard.vue:118
 msgid "Last update"
 msgid "Last update"
 msgstr "上次更新"
 msgstr "上次更新"
 
 
@@ -2691,7 +2691,7 @@ msgstr "加载器睡眠"
 msgid "Loader Threshold"
 msgid "Loader Threshold"
 msgstr "加载器阈值"
 msgstr "加载器阈值"
 
 
-#: src/views/dashboard/NginxDashBoard.vue:175
+#: src/views/dashboard/NginxDashBoard.vue:180
 msgid "Loading data..."
 msgid "Loading data..."
 msgstr "正在加载数据..."
 msgstr "正在加载数据..."
 
 
@@ -2733,11 +2733,11 @@ msgstr ""
 msgid "Log List"
 msgid "Log List"
 msgstr "日志列表"
 msgstr "日志列表"
 
 
-#: src/routes/modules/auth.ts:14 src/views/other/Login.vue:263
+#: src/routes/modules/auth.ts:14 src/views/other/Login.vue:267
 msgid "Login"
 msgid "Login"
 msgstr "登录"
 msgstr "登录"
 
 
-#: src/views/other/Login.vue:75
+#: src/views/other/Login.vue:76
 msgid "Login successful"
 msgid "Login successful"
 msgstr "登录成功"
 msgstr "登录成功"
 
 
@@ -2986,7 +2986,7 @@ msgstr "多行指令"
 msgid "Name"
 msgid "Name"
 msgstr "名称"
 msgstr "名称"
 
 
-#: src/views/dashboard/NginxDashBoard.vue:170
+#: src/views/dashboard/NginxDashBoard.vue:175
 msgid "Need to enable the stub_status module"
 msgid "Need to enable the stub_status module"
 msgstr "需要启用 stub_status 模块"
 msgstr "需要启用 stub_status 模块"
 
 
@@ -3138,8 +3138,8 @@ msgstr "Nginx 错误:{0}"
 
 
 #: src/components/NgxConfigEditor/NginxStatusAlert.vue:15
 #: src/components/NgxConfigEditor/NginxStatusAlert.vue:15
 #: src/composables/useNginxPerformance.ts:43
 #: src/composables/useNginxPerformance.ts:43
-#: src/views/dashboard/NginxDashBoard.vue:109
-#: src/views/dashboard/NginxDashBoard.vue:128
+#: src/views/dashboard/NginxDashBoard.vue:114
+#: src/views/dashboard/NginxDashBoard.vue:133
 #: src/views/dashboard/NginxDashBoard.vue:77
 #: src/views/dashboard/NginxDashBoard.vue:77
 msgid "Nginx is not running"
 msgid "Nginx is not running"
 msgstr "Nginx 未启动"
 msgstr "Nginx 未启动"
@@ -3148,7 +3148,7 @@ msgstr "Nginx 未启动"
 msgid "Nginx is not running in another container"
 msgid "Nginx is not running in another container"
 msgstr "Nginx 未在另一个容器中运行"
 msgstr "Nginx 未在另一个容器中运行"
 
 
-#: src/views/dashboard/NginxDashBoard.vue:109
+#: src/views/dashboard/NginxDashBoard.vue:114
 msgid "Nginx is running"
 msgid "Nginx is running"
 msgstr "Nginx 正在运行"
 msgstr "Nginx 正在运行"
 
 
@@ -3260,7 +3260,7 @@ msgstr "取消"
 msgid "No Action"
 msgid "No Action"
 msgstr "无操作"
 msgstr "无操作"
 
 
-#: src/views/dashboard/NginxDashBoard.vue:177
+#: src/views/dashboard/NginxDashBoard.vue:182
 msgid "No data"
 msgid "No data"
 msgstr "没有数据"
 msgstr "没有数据"
 
 
@@ -3445,7 +3445,7 @@ msgstr "开放"
 msgid "OpenAI"
 msgid "OpenAI"
 msgstr "OpenAI"
 msgstr "OpenAI"
 
 
-#: src/components/TwoFA/Authorization.vue:100 src/views/other/Login.vue:272
+#: src/components/TwoFA/Authorization.vue:100 src/views/other/Login.vue:276
 msgid "Or"
 msgid "Or"
 msgstr "或"
 msgstr "或"
 
 
@@ -3517,7 +3517,7 @@ msgstr ""
 "Passkey 是一种网络认证凭据,可通过指纹、面部识别、设备密码或 PIN 码验证身份。"
 "Passkey 是一种网络认证凭据,可通过指纹、面部识别、设备密码或 PIN 码验证身份。"
 "它们可用作密码替代品或二步验证方法。"
 "它们可用作密码替代品或二步验证方法。"
 
 
-#: src/views/other/Login.vue:224 src/views/user/userColumns.tsx:16
+#: src/views/other/Login.vue:228 src/views/user/userColumns.tsx:16
 msgid "Password"
 msgid "Password"
 msgstr "密码"
 msgstr "密码"
 
 
@@ -3579,7 +3579,7 @@ msgstr "执行核心升级错误"
 msgid "Performance"
 msgid "Performance"
 msgstr "性能"
 msgstr "性能"
 
 
-#: src/views/dashboard/NginxDashBoard.vue:182
+#: src/views/dashboard/NginxDashBoard.vue:187
 msgid "Performance Metrics"
 msgid "Performance Metrics"
 msgstr "性能指标"
 msgstr "性能指标"
 
 
@@ -3603,7 +3603,7 @@ msgstr "PID 路径不存在"
 msgid "Plain text is empty"
 msgid "Plain text is empty"
 msgstr "原文为空"
 msgstr "原文为空"
 
 
-#: src/views/dashboard/NginxDashBoard.vue:171
+#: src/views/dashboard/NginxDashBoard.vue:176
 msgid ""
 msgid ""
 "Please enable the stub_status module to get request statistics, connection "
 "Please enable the stub_status module to get request statistics, connection "
 "count, etc."
 "count, etc."
@@ -4575,7 +4575,7 @@ msgstr "共享内存区"
 msgid "Show"
 msgid "Show"
 msgstr "显示"
 msgstr "显示"
 
 
-#: src/views/other/Login.vue:281
+#: src/views/other/Login.vue:285
 msgid "Sign in with a passkey"
 msgid "Sign in with a passkey"
 msgstr "使用 Passkey 登录"
 msgstr "使用 Passkey 登录"
 
 
@@ -4680,7 +4680,7 @@ msgstr "SSL 密钥路径"
 msgid "SSL key path is required when HTTPS is enabled"
 msgid "SSL key path is required when HTTPS is enabled"
 msgstr "启用 HTTPS 时需要 SSL 密钥路径"
 msgstr "启用 HTTPS 时需要 SSL 密钥路径"
 
 
-#: src/views/other/Login.vue:238
+#: src/views/other/Login.vue:242
 msgid "SSO Login"
 msgid "SSO Login"
 msgstr "SSO 登录"
 msgstr "SSO 登录"
 
 
@@ -5101,7 +5101,7 @@ msgid ""
 "_./:"
 "_./:"
 msgstr "此字段应仅包含字母、Unicode字符、数字和 -_./:"
 msgstr "此字段应仅包含字母、Unicode字符、数字和 -_./:"
 
 
-#: src/views/dashboard/NginxDashBoard.vue:150
+#: src/views/dashboard/NginxDashBoard.vue:155
 msgid ""
 msgid ""
 "This module provides Nginx request statistics, connection count, etc. data. "
 "This module provides Nginx request statistics, connection count, etc. data. "
 "After enabling it, you can view performance statistics"
 "After enabling it, you can view performance statistics"
@@ -5397,7 +5397,7 @@ msgstr "用户未启用 OTP 作为 2FA"
 msgid "User Profile"
 msgid "User Profile"
 msgstr "用户资料"
 msgstr "用户资料"
 
 
-#: src/views/other/Login.vue:214 src/views/user/userColumns.tsx:7
+#: src/views/other/Login.vue:218 src/views/user/userColumns.tsx:7
 #: src/views/user/UserProfile.vue:127 src/views/user/UserProfile.vue:131
 #: src/views/user/UserProfile.vue:127 src/views/user/UserProfile.vue:131
 msgid "Username"
 msgid "Username"
 msgstr "用户名"
 msgstr "用户名"

+ 21 - 21
app/src/language/zh_TW/app.po

@@ -637,7 +637,7 @@ msgstr "無法比較:缺少內容"
 msgid "Cannot delete protected path: {0}"
 msgid "Cannot delete protected path: {0}"
 msgstr "無法刪除受保護的路徑:{0}"
 msgstr "無法刪除受保護的路徑:{0}"
 
 
-#: src/views/dashboard/NginxDashBoard.vue:129
+#: src/views/dashboard/NginxDashBoard.vue:134
 msgid "Cannot get performance data in this state"
 msgid "Cannot get performance data in this state"
 msgstr "目前狀態無法取得效能資料"
 msgstr "目前狀態無法取得效能資料"
 
 
@@ -1044,7 +1044,7 @@ msgstr "確認新密碼"
 msgid "Connected"
 msgid "Connected"
 msgstr "已連線"
 msgstr "已連線"
 
 
-#: src/views/dashboard/NginxDashBoard.vue:82
+#: src/views/dashboard/NginxDashBoard.vue:87
 msgid "Connection error, trying to reconnect..."
 msgid "Connection error, trying to reconnect..."
 msgstr "連線錯誤,正在嘗試重新連線..."
 msgstr "連線錯誤,正在嘗試重新連線..."
 
 
@@ -1702,7 +1702,7 @@ msgstr "在 %{node} 上啟用串流 %{name} 失敗"
 msgid "Enable stream %{name} on %{node} successfully"
 msgid "Enable stream %{name} on %{node} successfully"
 msgstr "在 %{node} 上成功啟用串流 %{name}"
 msgstr "在 %{node} 上成功啟用串流 %{name}"
 
 
-#: src/views/dashboard/NginxDashBoard.vue:147
+#: src/views/dashboard/NginxDashBoard.vue:152
 msgid "Enable stub_status module"
 msgid "Enable stub_status module"
 msgstr "啟用stub_status模組"
 msgstr "啟用stub_status模組"
 
 
@@ -2285,7 +2285,7 @@ msgstr "產生註冊帳號的私鑰"
 msgid "Get acme user error: {0}"
 msgid "Get acme user error: {0}"
 msgstr "獲取 ACME 用戶錯誤: {0}"
 msgstr "獲取 ACME 用戶錯誤: {0}"
 
 
-#: src/views/dashboard/NginxDashBoard.vue:138
+#: src/views/dashboard/NginxDashBoard.vue:143
 msgid "Get data failed"
 msgid "Get data failed"
 msgstr "取得資料失敗"
 msgstr "取得資料失敗"
 
 
@@ -2609,7 +2609,7 @@ msgstr "上次備份時間"
 msgid "Last checked at"
 msgid "Last checked at"
 msgstr "上次檢查時間"
 msgstr "上次檢查時間"
 
 
-#: src/views/dashboard/NginxDashBoard.vue:113
+#: src/views/dashboard/NginxDashBoard.vue:118
 msgid "Last update"
 msgid "Last update"
 msgstr "最後更新時間"
 msgstr "最後更新時間"
 
 
@@ -2696,7 +2696,7 @@ msgstr "載入器休眠時間"
 msgid "Loader Threshold"
 msgid "Loader Threshold"
 msgstr "載入器門檻值"
 msgstr "載入器門檻值"
 
 
-#: src/views/dashboard/NginxDashBoard.vue:175
+#: src/views/dashboard/NginxDashBoard.vue:180
 msgid "Loading data..."
 msgid "Loading data..."
 msgstr "資料載入中…"
 msgstr "資料載入中…"
 
 
@@ -2738,11 +2738,11 @@ msgstr ""
 msgid "Log List"
 msgid "Log List"
 msgstr "日誌列表"
 msgstr "日誌列表"
 
 
-#: src/routes/modules/auth.ts:14 src/views/other/Login.vue:263
+#: src/routes/modules/auth.ts:14 src/views/other/Login.vue:267
 msgid "Login"
 msgid "Login"
 msgstr "登入"
 msgstr "登入"
 
 
-#: src/views/other/Login.vue:75
+#: src/views/other/Login.vue:76
 msgid "Login successful"
 msgid "Login successful"
 msgstr "登入成功"
 msgstr "登入成功"
 
 
@@ -2990,7 +2990,7 @@ msgstr "多行指令"
 msgid "Name"
 msgid "Name"
 msgstr "名稱"
 msgstr "名稱"
 
 
-#: src/views/dashboard/NginxDashBoard.vue:170
+#: src/views/dashboard/NginxDashBoard.vue:175
 msgid "Need to enable the stub_status module"
 msgid "Need to enable the stub_status module"
 msgstr "需要啟用 stub_status 模組"
 msgstr "需要啟用 stub_status 模組"
 
 
@@ -3142,8 +3142,8 @@ msgstr "Nginx 錯誤:{0}"
 
 
 #: src/components/NgxConfigEditor/NginxStatusAlert.vue:15
 #: src/components/NgxConfigEditor/NginxStatusAlert.vue:15
 #: src/composables/useNginxPerformance.ts:43
 #: src/composables/useNginxPerformance.ts:43
-#: src/views/dashboard/NginxDashBoard.vue:109
-#: src/views/dashboard/NginxDashBoard.vue:128
+#: src/views/dashboard/NginxDashBoard.vue:114
+#: src/views/dashboard/NginxDashBoard.vue:133
 #: src/views/dashboard/NginxDashBoard.vue:77
 #: src/views/dashboard/NginxDashBoard.vue:77
 msgid "Nginx is not running"
 msgid "Nginx is not running"
 msgstr "Nginx 未執行"
 msgstr "Nginx 未執行"
@@ -3152,7 +3152,7 @@ msgstr "Nginx 未執行"
 msgid "Nginx is not running in another container"
 msgid "Nginx is not running in another container"
 msgstr "Nginx 未在另一個容器中運行"
 msgstr "Nginx 未在另一個容器中運行"
 
 
-#: src/views/dashboard/NginxDashBoard.vue:109
+#: src/views/dashboard/NginxDashBoard.vue:114
 msgid "Nginx is running"
 msgid "Nginx is running"
 msgstr "Nginx 執行中"
 msgstr "Nginx 執行中"
 
 
@@ -3264,7 +3264,7 @@ msgstr "取消"
 msgid "No Action"
 msgid "No Action"
 msgstr "無行動"
 msgstr "無行動"
 
 
-#: src/views/dashboard/NginxDashBoard.vue:177
+#: src/views/dashboard/NginxDashBoard.vue:182
 msgid "No data"
 msgid "No data"
 msgstr "無數據"
 msgstr "無數據"
 
 
@@ -3449,7 +3449,7 @@ msgstr "開放"
 msgid "OpenAI"
 msgid "OpenAI"
 msgstr "OpenAI"
 msgstr "OpenAI"
 
 
-#: src/components/TwoFA/Authorization.vue:100 src/views/other/Login.vue:272
+#: src/components/TwoFA/Authorization.vue:100 src/views/other/Login.vue:276
 msgid "Or"
 msgid "Or"
 msgstr "或"
 msgstr "或"
 
 
@@ -3521,7 +3521,7 @@ msgstr ""
 "通行金鑰是 WebAuthn 認證,透過觸控、面部辨識、裝置密碼或 PIN 碼來驗證您的身"
 "通行金鑰是 WebAuthn 認證,透過觸控、面部辨識、裝置密碼或 PIN 碼來驗證您的身"
 "份。它們可以用作密碼替代品或作為雙重身份驗證 (2FA) 方法。"
 "份。它們可以用作密碼替代品或作為雙重身份驗證 (2FA) 方法。"
 
 
-#: src/views/other/Login.vue:224 src/views/user/userColumns.tsx:16
+#: src/views/other/Login.vue:228 src/views/user/userColumns.tsx:16
 msgid "Password"
 msgid "Password"
 msgstr "密碼"
 msgstr "密碼"
 
 
@@ -3583,7 +3583,7 @@ msgstr "執行核心升級錯誤"
 msgid "Performance"
 msgid "Performance"
 msgstr "效能"
 msgstr "效能"
 
 
-#: src/views/dashboard/NginxDashBoard.vue:182
+#: src/views/dashboard/NginxDashBoard.vue:187
 msgid "Performance Metrics"
 msgid "Performance Metrics"
 msgstr "效能指標"
 msgstr "效能指標"
 
 
@@ -3607,7 +3607,7 @@ msgstr "PID 路徑不存在"
 msgid "Plain text is empty"
 msgid "Plain text is empty"
 msgstr "純文字為空"
 msgstr "純文字為空"
 
 
-#: src/views/dashboard/NginxDashBoard.vue:171
+#: src/views/dashboard/NginxDashBoard.vue:176
 msgid ""
 msgid ""
 "Please enable the stub_status module to get request statistics, connection "
 "Please enable the stub_status module to get request statistics, connection "
 "count, etc."
 "count, etc."
@@ -4578,7 +4578,7 @@ msgstr "共享記憶體區域"
 msgid "Show"
 msgid "Show"
 msgstr "顯示"
 msgstr "顯示"
 
 
-#: src/views/other/Login.vue:281
+#: src/views/other/Login.vue:285
 msgid "Sign in with a passkey"
 msgid "Sign in with a passkey"
 msgstr "使用通行金鑰登入"
 msgstr "使用通行金鑰登入"
 
 
@@ -4683,7 +4683,7 @@ msgstr "SSL 金鑰路徑"
 msgid "SSL key path is required when HTTPS is enabled"
 msgid "SSL key path is required when HTTPS is enabled"
 msgstr "啟用 HTTPS 時必須提供 SSL 金鑰路徑"
 msgstr "啟用 HTTPS 時必須提供 SSL 金鑰路徑"
 
 
-#: src/views/other/Login.vue:238
+#: src/views/other/Login.vue:242
 msgid "SSO Login"
 msgid "SSO Login"
 msgstr "SSO 登入"
 msgstr "SSO 登入"
 
 
@@ -5105,7 +5105,7 @@ msgid ""
 "_./:"
 "_./:"
 msgstr "此欄位應僅包含字母、Unicode字符、數字和 -_./:"
 msgstr "此欄位應僅包含字母、Unicode字符、數字和 -_./:"
 
 
-#: src/views/dashboard/NginxDashBoard.vue:150
+#: src/views/dashboard/NginxDashBoard.vue:155
 msgid ""
 msgid ""
 "This module provides Nginx request statistics, connection count, etc. data. "
 "This module provides Nginx request statistics, connection count, etc. data. "
 "After enabling it, you can view performance statistics"
 "After enabling it, you can view performance statistics"
@@ -5402,7 +5402,7 @@ msgstr "使用者未啟用 OTP 作為雙重身份驗證 (2FA)"
 msgid "User Profile"
 msgid "User Profile"
 msgstr "用戶資料"
 msgstr "用戶資料"
 
 
-#: src/views/other/Login.vue:214 src/views/user/userColumns.tsx:7
+#: src/views/other/Login.vue:218 src/views/user/userColumns.tsx:7
 #: src/views/user/UserProfile.vue:127 src/views/user/UserProfile.vue:131
 #: src/views/user/UserProfile.vue:127 src/views/user/UserProfile.vue:131
 msgid "Username"
 msgid "Username"
 msgstr "使用者名稱"
 msgstr "使用者名稱"

+ 19 - 5
app/src/lib/websocket/index.ts

@@ -3,16 +3,30 @@ import ReconnectingWebSocket from 'reconnecting-websocket'
 import { urlJoin } from '@/lib/helper'
 import { urlJoin } from '@/lib/helper'
 import { useSettingsStore, useUserStore } from '@/pinia'
 import { useSettingsStore, useUserStore } from '@/pinia'
 
 
+/**
+ * Build WebSocket URL based on environment
+ */
+function buildWebSocketUrl(url: string, token: string, nodeId?: number): string {
+  const node_id = nodeId && nodeId > 0 ? `&x_node_id=${nodeId}` : ''
+
+  // In development mode, connect directly to backend server
+  if (import.meta.env.DEV) {
+    const proxyTarget = import.meta.env.VITE_PROXY_TARGET || 'http://localhost:9000'
+    const wsTarget = proxyTarget.replace(/^https?:/, location.protocol === 'https:' ? 'wss:' : 'ws:')
+    return urlJoin(wsTarget, url, `?token=${btoa(token)}`, node_id)
+  }
+
+  // In production mode, use current host
+  const protocol = location.protocol === 'https:' ? 'wss://' : 'ws://'
+  return urlJoin(protocol + window.location.host, window.location.pathname, url, `?token=${btoa(token)}`, node_id)
+}
+
 function ws(url: string, reconnect: boolean = true): ReconnectingWebSocket | WebSocket {
 function ws(url: string, reconnect: boolean = true): ReconnectingWebSocket | WebSocket {
   const user = useUserStore()
   const user = useUserStore()
   const settings = useSettingsStore()
   const settings = useSettingsStore()
   const { token } = storeToRefs(user)
   const { token } = storeToRefs(user)
 
 
-  const protocol = location.protocol === 'https:' ? 'wss://' : 'ws://'
-
-  const node_id = (settings.environment.id > 0) ? (`&x_node_id=${settings.environment.id}`) : ''
-
-  const _url = urlJoin(protocol + window.location.host, window.location.pathname, url, `?token=${btoa(token.value)}`, node_id)
+  const _url = buildWebSocketUrl(url, token.value, settings.environment.id)
 
 
   if (reconnect)
   if (reconnect)
     return new ReconnectingWebSocket(_url, undefined, { maxRetries: 10 })
     return new ReconnectingWebSocket(_url, undefined, { maxRetries: 10 })

+ 1 - 3
app/vite.config.ts

@@ -82,11 +82,9 @@ export default defineConfig(({ mode }) => {
       port: Number.parseInt(env.VITE_PORT) || 3002,
       port: Number.parseInt(env.VITE_PORT) || 3002,
       proxy: {
       proxy: {
         '/api': {
         '/api': {
-          target: env.VITE_PROXY_TARGET || 'http://localhost:9000',
+          target: env.VITE_PROXY_TARGET || 'http://localhost:9001',
           changeOrigin: true,
           changeOrigin: true,
           secure: false,
           secure: false,
-          ws: true,
-          timeout: 60000,
         },
         },
       },
       },
     },
     },

+ 3 - 2
go.mod

@@ -127,6 +127,7 @@ require (
 	github.com/felixge/httpsnoop v1.0.4 // indirect
 	github.com/felixge/httpsnoop v1.0.4 // indirect
 	github.com/fxamacker/cbor/v2 v2.8.0 // indirect
 	github.com/fxamacker/cbor/v2 v2.8.0 // indirect
 	github.com/gabriel-vasile/mimetype v1.4.9 // indirect
 	github.com/gabriel-vasile/mimetype v1.4.9 // indirect
+	github.com/gin-contrib/cors v1.7.6 // indirect
 	github.com/gin-contrib/sse v1.1.0 // indirect
 	github.com/gin-contrib/sse v1.1.0 // indirect
 	github.com/go-errors/errors v1.5.1 // indirect
 	github.com/go-errors/errors v1.5.1 // indirect
 	github.com/go-jose/go-jose/v4 v4.1.0 // indirect
 	github.com/go-jose/go-jose/v4 v4.1.0 // indirect
@@ -246,7 +247,7 @@ require (
 	github.com/tklauser/numcpus v0.10.0 // indirect
 	github.com/tklauser/numcpus v0.10.0 // indirect
 	github.com/transip/gotransip/v6 v6.26.0 // indirect
 	github.com/transip/gotransip/v6 v6.26.0 // indirect
 	github.com/twitchyliquid64/golang-asm v0.15.1 // indirect
 	github.com/twitchyliquid64/golang-asm v0.15.1 // indirect
-	github.com/ugorji/go/codec v1.2.14 // indirect
+	github.com/ugorji/go/codec v1.3.0 // indirect
 	github.com/ultradns/ultradns-go-sdk v1.8.0-20241010134910-243eeec // indirect
 	github.com/ultradns/ultradns-go-sdk v1.8.0-20241010134910-243eeec // indirect
 	github.com/uozi-tech/cosy-driver-mysql v0.2.2 // indirect
 	github.com/uozi-tech/cosy-driver-mysql v0.2.2 // indirect
 	github.com/uozi-tech/cosy-driver-postgres v0.2.1 // indirect
 	github.com/uozi-tech/cosy-driver-postgres v0.2.1 // indirect
@@ -265,7 +266,7 @@ require (
 	go.opentelemetry.io/otel/trace v1.36.0 // indirect
 	go.opentelemetry.io/otel/trace v1.36.0 // indirect
 	go.uber.org/multierr v1.11.0 // indirect
 	go.uber.org/multierr v1.11.0 // indirect
 	go.uber.org/zap v1.27.0 // indirect
 	go.uber.org/zap v1.27.0 // indirect
-	golang.org/x/arch v0.17.0 // indirect
+	golang.org/x/arch v0.18.0 // indirect
 	golang.org/x/mod v0.25.0 // indirect
 	golang.org/x/mod v0.25.0 // indirect
 	golang.org/x/oauth2 v0.30.0 // indirect
 	golang.org/x/oauth2 v0.30.0 // indirect
 	golang.org/x/sync v0.15.0 // indirect
 	golang.org/x/sync v0.15.0 // indirect

+ 6 - 0
go.sum

@@ -1024,6 +1024,8 @@ github.com/fxamacker/cbor/v2 v2.8.0/go.mod h1:vM4b+DJCtHn+zz7h3FFp/hDAI9WNWCsZj2
 github.com/gabriel-vasile/mimetype v1.4.9 h1:5k+WDwEsD9eTLL8Tz3L0VnmVh9QxGjRmjBvAG7U/oYY=
 github.com/gabriel-vasile/mimetype v1.4.9 h1:5k+WDwEsD9eTLL8Tz3L0VnmVh9QxGjRmjBvAG7U/oYY=
 github.com/gabriel-vasile/mimetype v1.4.9/go.mod h1:WnSQhFKJuBlRyLiKohA/2DtIlPFAbguNaG7QCHcyGok=
 github.com/gabriel-vasile/mimetype v1.4.9/go.mod h1:WnSQhFKJuBlRyLiKohA/2DtIlPFAbguNaG7QCHcyGok=
 github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04=
 github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04=
+github.com/gin-contrib/cors v1.7.6 h1:3gQ8GMzs1Ylpf70y8bMw4fVpycXIeX1ZemuSQIsnQQY=
+github.com/gin-contrib/cors v1.7.6/go.mod h1:Ulcl+xN4jel9t1Ry8vqph23a60FwH9xVLd+3ykmTjOk=
 github.com/gin-contrib/pprof v1.5.3 h1:Bj5SxJ3kQDVez/s/+f9+meedJIqLS+xlkIVDe/lcvgM=
 github.com/gin-contrib/pprof v1.5.3 h1:Bj5SxJ3kQDVez/s/+f9+meedJIqLS+xlkIVDe/lcvgM=
 github.com/gin-contrib/pprof v1.5.3/go.mod h1:0+LQSZ4SLO0B6+2n6JBzaEygpTBxe/nI+YEYpfQQ6xY=
 github.com/gin-contrib/pprof v1.5.3/go.mod h1:0+LQSZ4SLO0B6+2n6JBzaEygpTBxe/nI+YEYpfQQ6xY=
 github.com/gin-contrib/sse v1.1.0 h1:n0w2GMuUpWDVp7qSpvze6fAu9iRxJY4Hmj6AmBOU05w=
 github.com/gin-contrib/sse v1.1.0 h1:n0w2GMuUpWDVp7qSpvze6fAu9iRxJY4Hmj6AmBOU05w=
@@ -1940,6 +1942,8 @@ github.com/ugorji/go/codec v1.2.12 h1:9LC83zGrHhuUA9l16C9AHXAqEV/2wBQ4nkvumAE65E
 github.com/ugorji/go/codec v1.2.12/go.mod h1:UNopzCgEMSXjBc6AOMqYvWC1ktqTAfzJZUZgYf6w6lg=
 github.com/ugorji/go/codec v1.2.12/go.mod h1:UNopzCgEMSXjBc6AOMqYvWC1ktqTAfzJZUZgYf6w6lg=
 github.com/ugorji/go/codec v1.2.14 h1:yOQvXCBc3Ij46LRkRoh4Yd5qK6LVOgi0bYOXfb7ifjw=
 github.com/ugorji/go/codec v1.2.14 h1:yOQvXCBc3Ij46LRkRoh4Yd5qK6LVOgi0bYOXfb7ifjw=
 github.com/ugorji/go/codec v1.2.14/go.mod h1:UNopzCgEMSXjBc6AOMqYvWC1ktqTAfzJZUZgYf6w6lg=
 github.com/ugorji/go/codec v1.2.14/go.mod h1:UNopzCgEMSXjBc6AOMqYvWC1ktqTAfzJZUZgYf6w6lg=
+github.com/ugorji/go/codec v1.3.0 h1:Qd2W2sQawAfG8XSvzwhBeoGq71zXOC/Q1E9y/wUcsUA=
+github.com/ugorji/go/codec v1.3.0/go.mod h1:pRBVtBSKl77K30Bv8R2P+cLSGaTtex6fsA2Wjqmfxj4=
 github.com/ultradns/ultradns-go-sdk v1.8.0-20241010134910-243eeec h1:2s/ghQ8wKE+UzD/hf3P4Gd1j0JI9ncbxv+nsypPoUYI=
 github.com/ultradns/ultradns-go-sdk v1.8.0-20241010134910-243eeec h1:2s/ghQ8wKE+UzD/hf3P4Gd1j0JI9ncbxv+nsypPoUYI=
 github.com/ultradns/ultradns-go-sdk v1.8.0-20241010134910-243eeec/go.mod h1:BZr7Qs3ku1ckpqed8tCRSqTlp8NAeZfAVpfx4OzXMss=
 github.com/ultradns/ultradns-go-sdk v1.8.0-20241010134910-243eeec/go.mod h1:BZr7Qs3ku1ckpqed8tCRSqTlp8NAeZfAVpfx4OzXMss=
 github.com/uozi-tech/cosy v1.21.1 h1:S2jK0EwwbMkPD2VGiMfNzDAmh8NSvT7c+rn45wUJoTI=
 github.com/uozi-tech/cosy v1.21.1 h1:S2jK0EwwbMkPD2VGiMfNzDAmh8NSvT7c+rn45wUJoTI=
@@ -2079,6 +2083,8 @@ go.uber.org/zap v1.27.0 h1:aJMhYGrd5QSmlpLMr2MftRKl7t8J8PTZPA732ud/XR8=
 go.uber.org/zap v1.27.0/go.mod h1:GB2qFLM7cTU87MWRP2mPIjqfIDnGu+VIO4V/SdhGo2E=
 go.uber.org/zap v1.27.0/go.mod h1:GB2qFLM7cTU87MWRP2mPIjqfIDnGu+VIO4V/SdhGo2E=
 golang.org/x/arch v0.17.0 h1:4O3dfLzd+lQewptAHqjewQZQDyEdejz3VwgeYwkZneU=
 golang.org/x/arch v0.17.0 h1:4O3dfLzd+lQewptAHqjewQZQDyEdejz3VwgeYwkZneU=
 golang.org/x/arch v0.17.0/go.mod h1:bdwinDaKcfZUGpH09BB7ZmOfhalA8lQdzl62l8gGWsk=
 golang.org/x/arch v0.17.0/go.mod h1:bdwinDaKcfZUGpH09BB7ZmOfhalA8lQdzl62l8gGWsk=
+golang.org/x/arch v0.18.0 h1:WN9poc33zL4AzGxqf8VtpKUnGvMi8O9lhNyBMF/85qc=
+golang.org/x/arch v0.18.0/go.mod h1:bdwinDaKcfZUGpH09BB7ZmOfhalA8lQdzl62l8gGWsk=
 golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
 golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
 golang.org/x/crypto v0.0.0-20181029021203-45a5f77698d3/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
 golang.org/x/crypto v0.0.0-20181029021203-45a5f77698d3/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
 golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
 golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=

+ 21 - 0
internal/middleware/cors.go

@@ -0,0 +1,21 @@
+package middleware
+
+import (
+	"time"
+
+	"github.com/gin-contrib/cors"
+	"github.com/gin-gonic/gin"
+)
+
+func CORS() gin.HandlerFunc {
+	config := cors.Config{
+		AllowAllOrigins:  true,
+		AllowMethods:     []string{"GET", "POST", "PUT", "PATCH", "DELETE", "HEAD", "OPTIONS"},
+		AllowHeaders:     []string{"*"},
+		ExposeHeaders:    []string{"*"},
+		AllowCredentials: false,
+		MaxAge:           12 * time.Hour,
+	}
+
+	return cors.New(config)
+}

+ 3 - 0
router/routers.go

@@ -36,6 +36,9 @@ import (
 func InitRouter() {
 func InitRouter() {
 	r := cosy.GetEngine()
 	r := cosy.GetEngine()
 
 
+	// Add CORS middleware to allow all origins
+	r.Use(middleware.CORS())
+
 	initEmbedRoute(r)
 	initEmbedRoute(r)
 
 
 	pages.InitRouter(r)
 	pages.InitRouter(r)