From a07569d3368e8487ebb5902213a05f7a67d63d8b Mon Sep 17 00:00:00 2001 From: Nabil Ananthamangalath Date: Tue, 7 Jan 2025 12:25:47 +0530 Subject: [PATCH] Implemented Server power operations page - Navigation: Operations > Server power operations - Jira: https://jsw.ibm.com/browse/PFEBMC-2398 and https://jsw.ibm.com/browse/PFEBMC-3670 Signed-off-by: Nabil Ananthamangalath --- package-lock.json | 2128 ++++++++++++++--- package.json | 3 +- src/assets/styles/bmc/custom/_tables.scss | 4 + src/components/AppHeader/AppHeader.vue | 2 +- src/layouts/AppLayout.vue | 5 +- src/locales/en-US.json | 2 +- src/main.js | 10 +- src/router/routes.js | 9 + src/store/index.js | 4 +- .../Authentication/AuthenticationStore.js | 10 +- src/store/modules/GlobalStore.js | 112 +- .../modules/Operations/BootSettingsStore.js | 34 +- src/store/modules/Operations/ControlStore.js | 65 +- .../Operations/NetworkSettingsStore.js | 114 +- src/store/modules/Settings/NetworkStore.js | 485 +++- src/store/plugins/WebSocketPlugin.js | 130 +- .../ServerPowerOperations/BiosSettings.vue | 1171 ++++----- .../ServerPowerOperations/BootSettings.vue | 285 ++- .../NetworkSettingsModal.vue | 1064 +++++---- .../ServerPowerOperations.vue | 938 ++++---- src/views/Overview/OverviewNetwork.vue | 5 +- vite.config.js | 6 +- 22 files changed, 4221 insertions(+), 2365 deletions(-) diff --git a/package-lock.json b/package-lock.json index 5ced1ba41e..db2ff616ab 100644 --- a/package-lock.json +++ b/package-lock.json @@ -22,7 +22,8 @@ "date-fns-tz": "3.1.3", "express": "4.19.2", "js-cookie": "^3.0.5", - "lodash": "^4.17.21", + "json-bigint": "1.0.0", + "lodash": "4.17.21", "pinia": "2.1.7", "tiny-emitter": "2.1.0", "vue": "^3.3.9", @@ -78,11 +79,11 @@ } }, "node_modules/@babel/parser": { - "version": "7.26.2", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.26.2.tgz", - "integrity": "sha512-DWMCZH9WA4Maitz2q21SRKHo9QXZxkDsbNZoVD62gusNtNBBqDg9i7uOhASfTfIGNzW+O+r7+jAlM8dwphcJKQ==", + "version": "7.26.3", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.26.3.tgz", + "integrity": "sha512-WJ/CvmY8Mea8iDXo6a7RK2wbmJITT5fN3BEkRuFlxVyNx8jOKIIhmC4fSkTcPcf8JyavbBwIe6OpiCOBXt/IcA==", "dependencies": { - "@babel/types": "^7.26.0" + "@babel/types": "^7.26.3" }, "bin": { "parser": "bin/babel-parser.js" @@ -92,9 +93,9 @@ } }, "node_modules/@babel/types": { - "version": "7.26.0", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.26.0.tgz", - "integrity": "sha512-Z/yiTPj+lDVnF7lWeKCIJzaIkI0vYO87dMpZ4bg4TDrFe4XXLFWL1TbXU27gBP3QccxV9mZICCrnjnYlJjXHOA==", + "version": "7.26.3", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.26.3.tgz", + "integrity": "sha512-vN5p+1kl59GVKMvTHt55NzzmYVxprfJD+ql7U9NFIfKCBkYE55LYtS+WtPlaYOyzydrKI8Nezd+aZextrd+FMA==", "dependencies": { "@babel/helper-string-parser": "^7.25.9", "@babel/helper-validator-identifier": "^7.25.9" @@ -113,9 +114,9 @@ } }, "node_modules/@carbon/grid": { - "version": "11.29.0", - "resolved": "https://registry.npmjs.org/@carbon/grid/-/grid-11.29.0.tgz", - "integrity": "sha512-SAJhTexN6TjbItcUczOqhzgHBGXLhvUhlTdyqj+wzUH0tqEN8g6gLp+1sn9+rL+kV4obSb/7bdSESZtwQr/tQg==", + "version": "11.30.0", + "resolved": "https://registry.npmjs.org/@carbon/grid/-/grid-11.30.0.tgz", + "integrity": "sha512-HgeAJqh8Ln7d/HGe8Aw/bxHDQJbJSLxnVol3CwaJ1lRoZscUlFCZgrH60OVvUGXgH6yoUojKkyFovryZ8zxIdw==", "hasInstallScript": true, "dependencies": { "@carbon/layout": "^11.28.0", @@ -167,16 +168,256 @@ } }, "node_modules/@carbon/type": { - "version": "11.33.0", - "resolved": "https://registry.npmjs.org/@carbon/type/-/type-11.33.0.tgz", - "integrity": "sha512-v3lfot0vcHNw6WDe32ap3ewpMGwUqhZ6z56sN11jzngRrWVPFgA9U7NciuoylFw301l2htJuZu0dBS2F4ViCXQ==", + "version": "11.34.0", + "resolved": "https://registry.npmjs.org/@carbon/type/-/type-11.34.0.tgz", + "integrity": "sha512-rcKNsW6KzZAnaX0VJ2lbzWvEAJg8AJwG5zvJ+JqFpSs26mCZc9/0xw+J8eE5bZ34eSrgHPGEIHHNV0PEGKcBTQ==", "hasInstallScript": true, "dependencies": { - "@carbon/grid": "^11.29.0", + "@carbon/grid": "^11.30.0", "@carbon/layout": "^11.28.0", "@ibm/telemetry-js": "^1.5.0" } }, + "node_modules/@esbuild/aix-ppc64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.20.2.tgz", + "integrity": "sha512-D+EBOJHXdNZcLJRBkhENNG8Wji2kgc9AZ9KiPr1JuZjsNtyHzrsfLRrY0tk2H2aoFu6RANO1y1iPPUCDYWkb5g==", + "cpu": [ + "ppc64" + ], + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.20.2.tgz", + "integrity": "sha512-t98Ra6pw2VaDhqNWO2Oph2LXbz/EJcnLmKLGBJwEwXX/JAN83Fym1rU8l0JUWK6HkIbWONCSSatf4sf2NBRx/w==", + "cpu": [ + "arm" + ], + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.20.2.tgz", + "integrity": "sha512-mRzjLacRtl/tWU0SvD8lUEwb61yP9cqQo6noDZP/O8VkwafSYwZ4yWy24kan8jE/IMERpYncRt2dw438LP3Xmg==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.20.2.tgz", + "integrity": "sha512-btzExgV+/lMGDDa194CcUQm53ncxzeBrWJcncOBxuC6ndBkKxnHdFJn86mCIgTELsooUmwUm9FkhSp5HYu00Rg==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.20.2.tgz", + "integrity": "sha512-4J6IRT+10J3aJH3l1yzEg9y3wkTDgDk7TSDFX+wKFiWjqWp/iCfLIYzGyasx9l0SAFPT1HwSCR+0w/h1ES/MjA==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.20.2.tgz", + "integrity": "sha512-tBcXp9KNphnNH0dfhv8KYkZhjc+H3XBkF5DKtswJblV7KlT9EI2+jeA8DgBjp908WEuYll6pF+UStUCfEpdysA==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.20.2.tgz", + "integrity": "sha512-d3qI41G4SuLiCGCFGUrKsSeTXyWG6yem1KcGZVS+3FYlYhtNoNgYrWcvkOoaqMhwXSMrZRl69ArHsGJ9mYdbbw==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.20.2.tgz", + "integrity": "sha512-d+DipyvHRuqEeM5zDivKV1KuXn9WeRX6vqSqIDgwIfPQtwMP4jaDsQsDncjTDDsExT4lR/91OLjRo8bmC1e+Cw==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.20.2.tgz", + "integrity": "sha512-VhLPeR8HTMPccbuWWcEUD1Az68TqaTYyj6nfE4QByZIQEQVWBB8vup8PpR7y1QHL3CpcF6xd5WVBU/+SBEvGTg==", + "cpu": [ + "arm" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.20.2.tgz", + "integrity": "sha512-9pb6rBjGvTFNira2FLIWqDk/uaf42sSyLE8j1rnUpuzsODBq7FvpwHYZxQ/It/8b+QOS1RYfqgGFNLRI+qlq2A==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.20.2.tgz", + "integrity": "sha512-o10utieEkNPFDZFQm9CoP7Tvb33UutoJqg3qKf1PWVeeJhJw0Q347PxMvBgVVFgouYLGIhFYG0UGdBumROyiig==", + "cpu": [ + "ia32" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.20.2.tgz", + "integrity": "sha512-PR7sp6R/UC4CFVomVINKJ80pMFlfDfMQMYynX7t1tNTeivQ6XdX5r2XovMmha/VjR1YN/HgHWsVcTRIMkymrgQ==", + "cpu": [ + "loong64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.20.2.tgz", + "integrity": "sha512-4BlTqeutE/KnOiTG5Y6Sb/Hw6hsBOZapOVF6njAESHInhlQAghVVZL1ZpIctBOoTFbQyGW+LsVYZ8lSSB3wkjA==", + "cpu": [ + "mips64el" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.20.2.tgz", + "integrity": "sha512-rD3KsaDprDcfajSKdn25ooz5J5/fWBylaaXkuotBDGnMnDP1Uv5DLAN/45qfnf3JDYyJv/ytGHQaziHUdyzaAg==", + "cpu": [ + "ppc64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.20.2.tgz", + "integrity": "sha512-snwmBKacKmwTMmhLlz/3aH1Q9T8v45bKYGE3j26TsaOVtjIag4wLfWSiZykXzXuE1kbCE+zJRmwp+ZbIHinnVg==", + "cpu": [ + "riscv64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.20.2.tgz", + "integrity": "sha512-wcWISOobRWNm3cezm5HOZcYz1sKoHLd8VL1dl309DiixxVFoFe/o8HnwuIwn6sXre88Nwj+VwZUvJf4AFxkyrQ==", + "cpu": [ + "s390x" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, "node_modules/@esbuild/linux-x64": { "version": "0.20.2", "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.20.2.tgz", @@ -192,6 +433,96 @@ "node": ">=12" } }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.20.2.tgz", + "integrity": "sha512-K8/DhBxcVQkzYc43yJXDSyjlFeHQJBiowJ0uVL6Tor3jGQfSGHNNJcWxNbOI8v5k82prYqzPuwkzHt3J1T1iZQ==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.20.2.tgz", + "integrity": "sha512-eMpKlV0SThJmmJgiVyN9jTPJ2VBPquf6Kt/nAoo6DgHAoN57K15ZghiHaMvqjCye/uU4X5u3YSMgVBI1h3vKrQ==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.20.2.tgz", + "integrity": "sha512-2UyFtRC6cXLyejf/YEld4Hajo7UHILetzE1vsRcGL3earZEW77JxrFjH4Ez2qaTiEfMgAXxfAZCm1fvM/G/o8w==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.20.2.tgz", + "integrity": "sha512-GRibxoawM9ZCnDxnP3usoUDO9vUkpAxIIZ6GQI+IlVmr5kP3zUq+l17xELTHMWTWzjxa2guPNyrpq1GWmPvcGQ==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.20.2.tgz", + "integrity": "sha512-HfLOfn9YWmkSKRQqovpnITazdtquEW8/SoHW7pWpuEeguaZI4QnCRW6b+oZTztdBnZOS2hqJ6im/D5cPzBTTlQ==", + "cpu": [ + "ia32" + ], + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.20.2.tgz", + "integrity": "sha512-N49X4lJX27+l9jbLKSqZ6bKNjzQvHaT8IIFUy+YIqmXQdjYCToGWwOItDrfby14c78aDd5NHQl29xingXfCdLQ==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, "node_modules/@eslint-community/eslint-utils": { "version": "4.4.1", "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.1.tgz", @@ -516,9 +847,9 @@ } }, "node_modules/@jridgewell/gen-mapping": { - "version": "0.3.5", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz", - "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==", + "version": "0.3.8", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.8.tgz", + "integrity": "sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==", "devOptional": true, "peer": true, "dependencies": { @@ -676,9 +1007,9 @@ } }, "node_modules/@rollup/pluginutils": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.1.3.tgz", - "integrity": "sha512-Pnsb6f32CD2W3uCaLZIzDmeFyQ2b8UWMFI7xtwUezpcGBDVDW6y9XgAWIlARiGAo6eNF5FK5aQTr0LFyNyqq5A==", + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.1.4.tgz", + "integrity": "sha512-USm05zrsFxYLPdWWq+K3STlWiT/3ELn3RcV5hJMghpeAIhxfsUIg6mt12CBJBInWMV4VneoV7SfGv8xIwo2qNQ==", "dev": true, "dependencies": { "@types/estree": "^1.0.0", @@ -697,40 +1028,244 @@ } } }, - "node_modules/@rollup/rollup-linux-x64-gnu": { - "version": "4.28.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.28.0.tgz", - "integrity": "sha512-Nl4KIzteVEKE9BdAvYoTkW19pa7LR/RBrT6F1dJCV/3pbjwDcaOq+edkP0LXuJ9kflW/xOK414X78r+K84+msw==", + "node_modules/@rollup/rollup-android-arm-eabi": { + "version": "4.29.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.29.1.tgz", + "integrity": "sha512-ssKhA8RNltTZLpG6/QNkCSge+7mBQGUqJRisZ2MDQcEGaK93QESEgWK2iOpIDZ7k9zPVkG5AS3ksvD5ZWxmItw==", "cpu": [ - "x64" + "arm" ], "optional": true, "os": [ - "linux" + "android" ] }, - "node_modules/@rollup/rollup-linux-x64-musl": { - "version": "4.28.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.28.0.tgz", - "integrity": "sha512-eKpJr4vBDOi4goT75MvW+0dXcNUqisK4jvibY9vDdlgLx+yekxSm55StsHbxUsRxSTt3JEQvlr3cGDkzcSP8bw==", + "node_modules/@rollup/rollup-android-arm64": { + "version": "4.29.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.29.1.tgz", + "integrity": "sha512-CaRfrV0cd+NIIcVVN/jx+hVLN+VRqnuzLRmfmlzpOzB87ajixsN/+9L5xNmkaUUvEbI5BmIKS+XTwXsHEb65Ew==", "cpu": [ - "x64" + "arm64" ], "optional": true, "os": [ - "linux" + "android" ] }, - "node_modules/@rushstack/eslint-patch": { - "version": "1.10.4", - "resolved": "https://registry.npmjs.org/@rushstack/eslint-patch/-/eslint-patch-1.10.4.tgz", - "integrity": "sha512-WJgX9nzTqknM393q1QJDJmoW28kUfEnybeTfVNcNAPnIx210RXm2DiXiHzfNPJNIUUb1tJnz/l4QGtJ30PgWmA==", - "dev": true + "node_modules/@rollup/rollup-darwin-arm64": { + "version": "4.29.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.29.1.tgz", + "integrity": "sha512-2ORr7T31Y0Mnk6qNuwtyNmy14MunTAMx06VAPI6/Ju52W10zk1i7i5U3vlDRWjhOI5quBcrvhkCHyF76bI7kEw==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "darwin" + ] }, - "node_modules/@sinclair/typebox": { - "version": "0.27.8", - "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz", - "integrity": "sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==", + "node_modules/@rollup/rollup-darwin-x64": { + "version": "4.29.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.29.1.tgz", + "integrity": "sha512-j/Ej1oanzPjmN0tirRd5K2/nncAhS9W6ICzgxV+9Y5ZsP0hiGhHJXZ2JQ53iSSjj8m6cRY6oB1GMzNn2EUt6Ng==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-freebsd-arm64": { + "version": "4.29.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.29.1.tgz", + "integrity": "sha512-91C//G6Dm/cv724tpt7nTyP+JdN12iqeXGFM1SqnljCmi5yTXriH7B1r8AD9dAZByHpKAumqP1Qy2vVNIdLZqw==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-freebsd-x64": { + "version": "4.29.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.29.1.tgz", + "integrity": "sha512-hEioiEQ9Dec2nIRoeHUP6hr1PSkXzQaCUyqBDQ9I9ik4gCXQZjJMIVzoNLBRGet+hIUb3CISMh9KXuCcWVW/8w==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-linux-arm-gnueabihf": { + "version": "4.29.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.29.1.tgz", + "integrity": "sha512-Py5vFd5HWYN9zxBv3WMrLAXY3yYJ6Q/aVERoeUFwiDGiMOWsMs7FokXihSOaT/PMWUty/Pj60XDQndK3eAfE6A==", + "cpu": [ + "arm" + ], + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm-musleabihf": { + "version": "4.29.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.29.1.tgz", + "integrity": "sha512-RiWpGgbayf7LUcuSNIbahr0ys2YnEERD4gYdISA06wa0i8RALrnzflh9Wxii7zQJEB2/Eh74dX4y/sHKLWp5uQ==", + "cpu": [ + "arm" + ], + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-gnu": { + "version": "4.29.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.29.1.tgz", + "integrity": "sha512-Z80O+taYxTQITWMjm/YqNoe9d10OX6kDh8X5/rFCMuPqsKsSyDilvfg+vd3iXIqtfmp+cnfL1UrYirkaF8SBZA==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-musl": { + "version": "4.29.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.29.1.tgz", + "integrity": "sha512-fOHRtF9gahwJk3QVp01a/GqS4hBEZCV1oKglVVq13kcK3NeVlS4BwIFzOHDbmKzt3i0OuHG4zfRP0YoG5OF/rA==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-loongarch64-gnu": { + "version": "4.29.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.29.1.tgz", + "integrity": "sha512-5a7q3tnlbcg0OodyxcAdrrCxFi0DgXJSoOuidFUzHZ2GixZXQs6Tc3CHmlvqKAmOs5eRde+JJxeIf9DonkmYkw==", + "cpu": [ + "loong64" + ], + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-powerpc64le-gnu": { + "version": "4.29.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.29.1.tgz", + "integrity": "sha512-9b4Mg5Yfz6mRnlSPIdROcfw1BU22FQxmfjlp/CShWwO3LilKQuMISMTtAu/bxmmrE6A902W2cZJuzx8+gJ8e9w==", + "cpu": [ + "ppc64" + ], + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-gnu": { + "version": "4.29.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.29.1.tgz", + "integrity": "sha512-G5pn0NChlbRM8OJWpJFMX4/i8OEU538uiSv0P6roZcbpe/WfhEO+AT8SHVKfp8qhDQzaz7Q+1/ixMy7hBRidnQ==", + "cpu": [ + "riscv64" + ], + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-s390x-gnu": { + "version": "4.29.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.29.1.tgz", + "integrity": "sha512-WM9lIkNdkhVwiArmLxFXpWndFGuOka4oJOZh8EP3Vb8q5lzdSCBuhjavJsw68Q9AKDGeOOIHYzYm4ZFvmWez5g==", + "cpu": [ + "s390x" + ], + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-gnu": { + "version": "4.29.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.29.1.tgz", + "integrity": "sha512-87xYCwb0cPGZFoGiErT1eDcssByaLX4fc0z2nRM6eMtV9njAfEE6OW3UniAoDhX4Iq5xQVpE6qO9aJbCFumKYQ==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-musl": { + "version": "4.29.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.29.1.tgz", + "integrity": "sha512-xufkSNppNOdVRCEC4WKvlR1FBDyqCSCpQeMMgv9ZyXqqtKBfkw1yfGMTUTs9Qsl6WQbJnsGboWCp7pJGkeMhKA==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-win32-arm64-msvc": { + "version": "4.29.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.29.1.tgz", + "integrity": "sha512-F2OiJ42m77lSkizZQLuC+jiZ2cgueWQL5YC9tjo3AgaEw+KJmVxHGSyQfDUoYR9cci0lAywv2Clmckzulcq6ig==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-ia32-msvc": { + "version": "4.29.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.29.1.tgz", + "integrity": "sha512-rYRe5S0FcjlOBZQHgbTKNrqxCBUmgDJem/VQTCcTnA2KCabYSWQDrytOzX7avb79cAAweNmMUb/Zw18RNd4mng==", + "cpu": [ + "ia32" + ], + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-msvc": { + "version": "4.29.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.29.1.tgz", + "integrity": "sha512-+10CMg9vt1MoHj6x1pxyjPSMjHTIlqs8/tBztXvPAx24SKs9jwVnKqHJumlH/IzhaPUaj3T6T6wfZr8okdXaIg==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rushstack/eslint-patch": { + "version": "1.10.4", + "resolved": "https://registry.npmjs.org/@rushstack/eslint-patch/-/eslint-patch-1.10.4.tgz", + "integrity": "sha512-WJgX9nzTqknM393q1QJDJmoW28kUfEnybeTfVNcNAPnIx210RXm2DiXiHzfNPJNIUUb1tJnz/l4QGtJ30PgWmA==", + "dev": true + }, + "node_modules/@sinclair/typebox": { + "version": "0.27.8", + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz", + "integrity": "sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==", "dev": true }, "node_modules/@tootallnate/once": { @@ -792,9 +1327,9 @@ "peer": true }, "node_modules/@types/node": { - "version": "22.10.1", - "resolved": "https://registry.npmjs.org/@types/node/-/node-22.10.1.tgz", - "integrity": "sha512-qKgsUwfHZV2WCWLAnVP1JqnpE6Im6h3Y0+fYgMTasNQ7V++CBX5OT1as0g0f+OyubbFqhf6XVNIsmN4IIhEgGQ==", + "version": "22.10.3", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.10.3.tgz", + "integrity": "sha512-DifAyw4BkrufCILvD3ucnuN8eydUfc/C1GlyrnI+LK6543w5/L3VeVgf05o3B4fqSXP1dKYLOZsKfutpxPzZrw==", "devOptional": true, "dependencies": { "undici-types": "~6.20.0" @@ -806,9 +1341,9 @@ "integrity": "sha512-g9gZnnXVq7gM7v3tJCWV/qw7w+KeOlSHAhgF9RytFyifW6AF61hdT2ucrYhPq9hLs5JIryeupHV3qGk95dH9ow==" }, "node_modules/@ungap/structured-clone": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz", - "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.1.tgz", + "integrity": "sha512-fEzPV3hSkSMltkw152tJKNARhOupqbH96MZWyRjNaYZOMIzbrTeQDG+MTc6Mr2pgzFQzFxAfmhGDNP5QK++2ZA==", "dev": true }, "node_modules/@vitejs/plugin-basic-ssl": { @@ -1481,6 +2016,48 @@ "url": "https://github.com/sponsors/epoberezkin" } }, + "node_modules/ajv-formats": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", + "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", + "dev": true, + "peer": true, + "dependencies": { + "ajv": "^8.0.0" + }, + "peerDependencies": { + "ajv": "^8.0.0" + }, + "peerDependenciesMeta": { + "ajv": { + "optional": true + } + } + }, + "node_modules/ajv-formats/node_modules/ajv": { + "version": "8.17.1", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", + "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", + "dev": true, + "peer": true, + "dependencies": { + "fast-deep-equal": "^3.1.3", + "fast-uri": "^3.0.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ajv-formats/node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true, + "peer": true + }, "node_modules/ajv-keywords": { "version": "3.5.2", "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", @@ -1566,9 +2143,9 @@ "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" }, "node_modules/axios": { - "version": "1.7.8", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.7.8.tgz", - "integrity": "sha512-Uu0wb7KNqK2t5K+YQyVCLM76prD5sRFjKHbJYCP1J7JFGEQ6nN7HWn9+04LAeiJ3ji54lgS/gZCH1oxyrf1SPw==", + "version": "1.7.9", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.7.9.tgz", + "integrity": "sha512-LhLcE7Hbiryz8oMDdDptSrWowmB4Bl6RCt6sIJKpRB4XtVf0iEgewX3au/pJqm+Py1kCASkb/FFKjxQaLtxJvw==", "dependencies": { "follow-redirects": "^1.15.6", "form-data": "^4.0.0", @@ -1581,6 +2158,14 @@ "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", "dev": true }, + "node_modules/bignumber.js": { + "version": "9.1.2", + "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.1.2.tgz", + "integrity": "sha512-2/mKyZH9K85bzOEfhXDBFZTGd1CTs+5IHpeFQo9luiBG7hghdC851Pj2WAhb6E3R6b9tZj/XKhbg4fum+Kepug==", + "engines": { + "node": "*" + } + }, "node_modules/binary-extensions": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", @@ -1692,9 +2277,9 @@ } }, "node_modules/browserslist": { - "version": "4.24.2", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.24.2.tgz", - "integrity": "sha512-ZIc+Q62revdMcqC6aChtW4jz3My3klmCO1fEmINZY/8J3EpBg5/A/D0AKmBveUh6pgoeycoMkVMko84tuYS+Gg==", + "version": "4.24.3", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.24.3.tgz", + "integrity": "sha512-1CPmv8iobE2fyRMV97dAcMVegvvWKxmq94hkLiAkUGwKVTyDLw33K+ZxiFrREKmmps4rIw6grcCFCnTMSZ/YiA==", "dev": true, "funding": [ { @@ -1712,9 +2297,9 @@ ], "peer": true, "dependencies": { - "caniuse-lite": "^1.0.30001669", - "electron-to-chromium": "^1.5.41", - "node-releases": "^2.0.18", + "caniuse-lite": "^1.0.30001688", + "electron-to-chromium": "^1.5.73", + "node-releases": "^2.0.19", "update-browserslist-db": "^1.1.1" }, "bin": { @@ -1748,16 +2333,25 @@ "node": ">=8" } }, - "node_modules/call-bind": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", - "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==", + "node_modules/call-bind-apply-helpers": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.1.tgz", + "integrity": "sha512-BhYE+WDaywFg2TBWYNXAE+8B1ATnThNBqXHP5nQu0jWJdVvY2hvkpyB3qOmtmDePiS5/BDQ8wASEWGMWRG148g==", "dependencies": { - "es-define-property": "^1.0.0", "es-errors": "^1.3.0", - "function-bind": "^1.1.2", - "get-intrinsic": "^1.2.4", - "set-function-length": "^1.2.1" + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/call-bound": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.3.tgz", + "integrity": "sha512-YTd+6wGlNlPxSuri7Y6X8tY2dmm12UMH66RpKMhiX6rsk5wXXnYgbUcOt8kiS31/AjfoTOvCsE+w8nZQLQnzHA==", + "dependencies": { + "call-bind-apply-helpers": "^1.0.1", + "get-intrinsic": "^1.2.6" }, "engines": { "node": ">= 0.4" @@ -1776,9 +2370,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001684", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001684.tgz", - "integrity": "sha512-G1LRwLIQjBQoyq0ZJGqGIJUXzJ8irpbjHLpVRXDvBEScFJ9b17sgK6vlx0GAJFE21okD7zXl08rRRUfq6HdoEQ==", + "version": "1.0.30001690", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001690.tgz", + "integrity": "sha512-5ExiE3qQN6oF8Clf8ifIDcMRCRE/dMGcETG/XGMD8/XiXm6HXQgQTh1yZYLXXpSOsEUlJm1Xr7kGULZTuGtP/w==", "dev": true, "funding": [ { @@ -2074,9 +2668,9 @@ } }, "node_modules/debug": { - "version": "4.3.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", - "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz", + "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==", "dev": true, "dependencies": { "ms": "^2.1.3" @@ -2114,22 +2708,6 @@ "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", "dev": true }, - "node_modules/define-data-property": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", - "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", - "dependencies": { - "es-define-property": "^1.0.0", - "es-errors": "^1.3.0", - "gopd": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/delayed-stream": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", @@ -2189,6 +2767,19 @@ "node": ">=12" } }, + "node_modules/dunder-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", + "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", + "dependencies": { + "call-bind-apply-helpers": "^1.0.1", + "es-errors": "^1.3.0", + "gopd": "^1.2.0" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/eastasianwidth": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", @@ -2243,9 +2834,9 @@ "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==" }, "node_modules/electron-to-chromium": { - "version": "1.5.67", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.67.tgz", - "integrity": "sha512-nz88NNBsD7kQSAGGJyp8hS6xSPtWwqNogA0mjtc2nUYeEf3nURK9qpV18TuBdDmEDgVWotS8Wkzf+V52dSQ/LQ==", + "version": "1.5.76", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.76.tgz", + "integrity": "sha512-CjVQyG7n7Sr+eBXE86HIulnL5N8xZY1sgmOPGuq/F0Rr0FJq63lg0kEtOIDfZBk44FnDLf6FUJ+dsJcuiUDdDQ==", "dev": true, "peer": true }, @@ -2264,9 +2855,9 @@ } }, "node_modules/enhanced-resolve": { - "version": "5.17.1", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.17.1.tgz", - "integrity": "sha512-LMHl3dXhTcfv8gM4kEzIUeTQ+7fpdA0l2tUf34BddXPkz2A5xJ5L/Pchd5BL6rdccM9QGvu0sWZzK1Z1t4wwyg==", + "version": "5.18.0", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.18.0.tgz", + "integrity": "sha512-0/r0MySGYG8YqlayBZ6MuCfECmHFdJ5qyPh8s8wa5Hnm6SaFLSK1VYCbj+NKp090Nm1caZhD+QTnmxO7esYGyQ==", "dev": true, "peer": true, "dependencies": { @@ -2289,12 +2880,9 @@ } }, "node_modules/es-define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz", - "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==", - "dependencies": { - "get-intrinsic": "^1.2.4" - }, + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", + "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", "engines": { "node": ">= 0.4" } @@ -2308,12 +2896,23 @@ } }, "node_modules/es-module-lexer": { - "version": "1.5.4", - "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.5.4.tgz", - "integrity": "sha512-MVNK56NiMrOwitFB7cqDwq0CQutbw+0BvLshJSse0MUNU+y1FC3bUS/AQg7oUng+/wKrrki7JfmwtVHkVfPLlw==", + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.6.0.tgz", + "integrity": "sha512-qqnD1yMU6tk/jnaMosogGySTZP8YtUgAffA9nMN+E/rjxcfRQ6IEk7IiozUjgxKoFHBGjTLnrHB/YC45r/59EQ==", "dev": true, "peer": true }, + "node_modules/es-object-atoms": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.0.0.tgz", + "integrity": "sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw==", + "dependencies": { + "es-errors": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/esbuild": { "version": "0.20.2", "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.20.2.tgz", @@ -2748,10 +3347,17 @@ "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", "dev": true }, + "node_modules/fast-uri": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.0.3.tgz", + "integrity": "sha512-aLrHthzCjH5He4Z2H9YZ+v6Ujb9ocRuW6ZzkJQOrTxleEijANq4v1TsaPaVG1PZcuurEzrLcWRyYBYXD5cEiaw==", + "dev": true, + "peer": true + }, "node_modules/fastq": { - "version": "1.17.1", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz", - "integrity": "sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==", + "version": "1.18.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.18.0.tgz", + "integrity": "sha512-QKHXPW0hD8g4UET03SdOdunzSouc9N4AuHdsX8XNcTsuz+yYFILVNIX4l9yHABMhiEI9Db0JTTIpu0wB+Y1QQw==", "dev": true, "dependencies": { "reusify": "^1.0.4" @@ -2940,6 +3546,19 @@ "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", "dev": true }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, "node_modules/function-bind": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", @@ -2958,15 +3577,20 @@ } }, "node_modules/get-intrinsic": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", - "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==", + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.6.tgz", + "integrity": "sha512-qxsEs+9A+u85HhllWJJFicJfPDhRmjzoYdl64aMWW9yRIJmSyxdn8IEkuIM530/7T+lv0TIHd8L6Q/ra0tEoeA==", "dependencies": { + "call-bind-apply-helpers": "^1.0.1", + "dunder-proto": "^1.0.0", + "es-define-property": "^1.0.1", "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", "function-bind": "^1.1.2", - "has-proto": "^1.0.1", - "has-symbols": "^1.0.3", - "hasown": "^2.0.0" + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "math-intrinsics": "^1.0.0" }, "engines": { "node": ">= 0.4" @@ -3054,12 +3678,9 @@ } }, "node_modules/gopd": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.1.0.tgz", - "integrity": "sha512-FQoVQnqcdk4hVM4JN1eromaun4iuS34oStkdlLENLdpULsuQcTyXj8w7ayhuUfPwEYZ1ZOooOTT6fdA9Vmx/RA==", - "dependencies": { - "get-intrinsic": "^1.2.4" - }, + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", + "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", "engines": { "node": ">= 0.4" }, @@ -3088,32 +3709,10 @@ "node": ">=8" } }, - "node_modules/has-property-descriptors": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", - "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", - "dependencies": { - "es-define-property": "^1.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-proto": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz", - "integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/has-symbols": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", - "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", + "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", "engines": { "node": ">= 0.4" }, @@ -3285,9 +3884,9 @@ } }, "node_modules/is-core-module": { - "version": "2.15.1", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.15.1.tgz", - "integrity": "sha512-z0vtXSwucUJtANQWldhbtbt7BnL0vxiFjIdDLAatwhDYty2bad6s+rijD6Ri4YuYJubLzIJLUidCh09e1djEVQ==", + "version": "2.16.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz", + "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==", "dev": true, "dependencies": { "hasown": "^2.0.2" @@ -3488,6 +4087,14 @@ } } }, + "node_modules/json-bigint": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-bigint/-/json-bigint-1.0.0.tgz", + "integrity": "sha512-SiPv/8VpZuWbvLSMtTDU8hEfrZWg/mH/nV/b4o0CYbSxu1UIQPLdwKOCIyLQX+VIPO5vrLX3i8qtqFyhdPSUSQ==", + "dependencies": { + "bignumber.js": "^9.0.0" + } + }, "node_modules/json-buffer": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", @@ -3650,13 +4257,21 @@ "dev": true }, "node_modules/magic-string": { - "version": "0.30.14", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.14.tgz", - "integrity": "sha512-5c99P1WKTed11ZC0HMJOj6CDIue6F8ySu+bJL+85q1zBEIY8IklrJ1eiKC2NDRh3Ct3FcvmJPyQHb9erXMTJNw==", + "version": "0.30.17", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.17.tgz", + "integrity": "sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA==", "dependencies": { "@jridgewell/sourcemap-codec": "^1.5.0" } }, + "node_modules/math-intrinsics": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", + "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", + "engines": { + "node": ">= 0.4" + } + }, "node_modules/media-typer": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", @@ -3825,9 +4440,9 @@ "dev": true }, "node_modules/node-releases": { - "version": "2.0.18", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.18.tgz", - "integrity": "sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g==", + "version": "2.0.19", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.19.tgz", + "integrity": "sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==", "dev": true, "peer": true }, @@ -4126,13 +4741,13 @@ } }, "node_modules/pkg-types": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/pkg-types/-/pkg-types-1.2.1.tgz", - "integrity": "sha512-sQoqa8alT3nHjGuTjuKgOnvjo4cljkufdtLMnO2LBP/wRwuDlo1tkaEdMxCRhyGRPacv/ztlZgDPm2b7FAmEvw==", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/pkg-types/-/pkg-types-1.3.0.tgz", + "integrity": "sha512-kS7yWjVFCkIw9hqdJBoMxDdzEngmkr5FXeWZZfQ6GoYacjVnsW6l2CcYW/0ThD0vF4LPJgVYnrg4d0uuhwYQbg==", "dev": true, "dependencies": { "confbox": "^0.1.8", - "mlly": "^1.7.2", + "mlly": "^1.7.3", "pathe": "^1.1.2" } }, @@ -4186,9 +4801,9 @@ } }, "node_modules/prettier": { - "version": "3.4.1", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.4.1.tgz", - "integrity": "sha512-G+YdqtITVZmOJje6QkXQWzl3fSfMxFwm1tjTyo9exhkmWSqC4Yhd1+lug++IlR2mvRVAxEDDWYkQdeSztajqgg==", + "version": "3.4.2", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.4.2.tgz", + "integrity": "sha512-e9MewbtFo+Fevyuxn/4rrcDAaq0IYxPGLvObpQjiZBMAzB9IGmzlnG9RZy3FFas+eBMu2vA0CszMeduow5dIuQ==", "dev": true, "bin": { "prettier": "bin/prettier.cjs" @@ -4262,12 +4877,15 @@ "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==" }, "node_modules/psl": { - "version": "1.14.0", - "resolved": "https://registry.npmjs.org/psl/-/psl-1.14.0.tgz", - "integrity": "sha512-Syk1bnf6fRZ9wQs03AtKJHcM12cKbOLo9L8JtCCdYj5/DTsHmTyXM4BK5ouWeG2P6kZ4nmFvuNTdtaqfobCOCg==", + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.15.0.tgz", + "integrity": "sha512-JZd3gMVBAVQkSs6HdNZo9Sdo0LNcQeMNP3CozBJb3JYC/QUYZTnKxP+f8oWRX4rHP5EurWxqAHTSwUCjlNKa1w==", "dev": true, "dependencies": { "punycode": "^2.3.1" + }, + "funding": { + "url": "https://github.com/sponsors/lupomontero" } }, "node_modules/punycode": { @@ -4381,6 +4999,16 @@ "url": "https://github.com/sponsors/jonschlinkert" } }, + "node_modules/require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "dev": true, + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/requires-port": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", @@ -4388,18 +5016,21 @@ "dev": true }, "node_modules/resolve": { - "version": "1.22.8", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", - "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", + "version": "1.22.10", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.10.tgz", + "integrity": "sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==", "dev": true, "dependencies": { - "is-core-module": "^2.13.0", + "is-core-module": "^2.16.0", "path-parse": "^1.0.7", "supports-preserve-symlinks-flag": "^1.0.0" }, "bin": { "resolve": "bin/resolve" }, + "engines": { + "node": ">= 0.4" + }, "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -4461,9 +5092,9 @@ } }, "node_modules/rollup": { - "version": "4.28.0", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.28.0.tgz", - "integrity": "sha512-G9GOrmgWHBma4YfCcX8PjH0qhXSdH8B4HDE2o4/jaxj93S4DPCIDoLcXz99eWMji4hB29UFCEd7B2gwGJDR9cQ==", + "version": "4.29.1", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.29.1.tgz", + "integrity": "sha512-RaJ45M/kmJUzSWDs1Nnd5DdV4eerC98idtUOVr6FfKcgxqvjwHmxc5upLF9qZU9EpsVzzhleFahrT3shLuJzIw==", "dependencies": { "@types/estree": "1.0.6" }, @@ -4475,24 +5106,25 @@ "npm": ">=8.0.0" }, "optionalDependencies": { - "@rollup/rollup-android-arm-eabi": "4.28.0", - "@rollup/rollup-android-arm64": "4.28.0", - "@rollup/rollup-darwin-arm64": "4.28.0", - "@rollup/rollup-darwin-x64": "4.28.0", - "@rollup/rollup-freebsd-arm64": "4.28.0", - "@rollup/rollup-freebsd-x64": "4.28.0", - "@rollup/rollup-linux-arm-gnueabihf": "4.28.0", - "@rollup/rollup-linux-arm-musleabihf": "4.28.0", - "@rollup/rollup-linux-arm64-gnu": "4.28.0", - "@rollup/rollup-linux-arm64-musl": "4.28.0", - "@rollup/rollup-linux-powerpc64le-gnu": "4.28.0", - "@rollup/rollup-linux-riscv64-gnu": "4.28.0", - "@rollup/rollup-linux-s390x-gnu": "4.28.0", - "@rollup/rollup-linux-x64-gnu": "4.28.0", - "@rollup/rollup-linux-x64-musl": "4.28.0", - "@rollup/rollup-win32-arm64-msvc": "4.28.0", - "@rollup/rollup-win32-ia32-msvc": "4.28.0", - "@rollup/rollup-win32-x64-msvc": "4.28.0", + "@rollup/rollup-android-arm-eabi": "4.29.1", + "@rollup/rollup-android-arm64": "4.29.1", + "@rollup/rollup-darwin-arm64": "4.29.1", + "@rollup/rollup-darwin-x64": "4.29.1", + "@rollup/rollup-freebsd-arm64": "4.29.1", + "@rollup/rollup-freebsd-x64": "4.29.1", + "@rollup/rollup-linux-arm-gnueabihf": "4.29.1", + "@rollup/rollup-linux-arm-musleabihf": "4.29.1", + "@rollup/rollup-linux-arm64-gnu": "4.29.1", + "@rollup/rollup-linux-arm64-musl": "4.29.1", + "@rollup/rollup-linux-loongarch64-gnu": "4.29.1", + "@rollup/rollup-linux-powerpc64le-gnu": "4.29.1", + "@rollup/rollup-linux-riscv64-gnu": "4.29.1", + "@rollup/rollup-linux-s390x-gnu": "4.29.1", + "@rollup/rollup-linux-x64-gnu": "4.29.1", + "@rollup/rollup-linux-x64-musl": "4.29.1", + "@rollup/rollup-win32-arm64-msvc": "4.29.1", + "@rollup/rollup-win32-ia32-msvc": "4.29.1", + "@rollup/rollup-win32-x64-msvc": "4.29.1", "fsevents": "~2.3.2" } }, @@ -4706,22 +5338,6 @@ "node": ">= 0.8.0" } }, - "node_modules/set-function-length": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", - "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", - "dependencies": { - "define-data-property": "^1.1.4", - "es-errors": "^1.3.0", - "function-bind": "^1.1.2", - "get-intrinsic": "^1.2.4", - "gopd": "^1.0.1", - "has-property-descriptors": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - } - }, "node_modules/setprototypeof": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", @@ -4749,14 +5365,65 @@ } }, "node_modules/side-channel": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.6.tgz", - "integrity": "sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz", + "integrity": "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==", + "dependencies": { + "es-errors": "^1.3.0", + "object-inspect": "^1.13.3", + "side-channel-list": "^1.0.0", + "side-channel-map": "^1.0.1", + "side-channel-weakmap": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-list": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.0.tgz", + "integrity": "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==", + "dependencies": { + "es-errors": "^1.3.0", + "object-inspect": "^1.13.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-map": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz", + "integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==", "dependencies": { - "call-bind": "^1.0.7", + "call-bound": "^1.0.2", "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.4", - "object-inspect": "^1.13.1" + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-weakmap": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz", + "integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3", + "side-channel-map": "^1.0.1" }, "engines": { "node": ">= 0.4" @@ -5010,9 +5677,9 @@ } }, "node_modules/terser": { - "version": "5.36.0", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.36.0.tgz", - "integrity": "sha512-IYV9eNMuFAV4THUspIRXkLakHnV6XO7FEdtKjf/mDyrnqUg9LnlOn6/RwRvM9SZjR4GUq8Nk8zj67FzVARr74w==", + "version": "5.37.0", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.37.0.tgz", + "integrity": "sha512-B8wRRkmre4ERucLM/uXx4MOV5cbnOlVAqUst+1+iLKPI0dOgFO28f84ptoQt9HEI537PMzfYa/d+GEPKTRXmYA==", "devOptional": true, "peer": true, "dependencies": { @@ -5029,17 +5696,17 @@ } }, "node_modules/terser-webpack-plugin": { - "version": "5.3.10", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.10.tgz", - "integrity": "sha512-BKFPWlPDndPs+NGGCr1U59t0XScL5317Y0UReNrHaw9/FwhPENlq6bfgs+4yPfyP51vqC1bQ4rp1EfXW5ZSH9w==", + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.11.tgz", + "integrity": "sha512-RVCsMfuD0+cTt3EwX8hSl2Ks56EbFHWmhluwcqoPKtBnfjiT6olaq7PRIRfhyU8nnC2MrnDrBLfrD/RGE+cVXQ==", "dev": true, "peer": true, "dependencies": { - "@jridgewell/trace-mapping": "^0.3.20", + "@jridgewell/trace-mapping": "^0.3.25", "jest-worker": "^27.4.5", - "schema-utils": "^3.1.1", - "serialize-javascript": "^6.0.1", - "terser": "^5.26.0" + "schema-utils": "^4.3.0", + "serialize-javascript": "^6.0.2", + "terser": "^5.31.1" }, "engines": { "node": ">= 10.13.0" @@ -5063,6 +5730,63 @@ } } }, + "node_modules/terser-webpack-plugin/node_modules/ajv": { + "version": "8.17.1", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", + "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", + "dev": true, + "peer": true, + "dependencies": { + "fast-deep-equal": "^3.1.3", + "fast-uri": "^3.0.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/terser-webpack-plugin/node_modules/ajv-keywords": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", + "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", + "dev": true, + "peer": true, + "dependencies": { + "fast-deep-equal": "^3.1.3" + }, + "peerDependencies": { + "ajv": "^8.8.2" + } + }, + "node_modules/terser-webpack-plugin/node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true, + "peer": true + }, + "node_modules/terser-webpack-plugin/node_modules/schema-utils": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.3.0.tgz", + "integrity": "sha512-Gf9qqc58SpCA/xdziiHz35F4GNIWYWZrEshUc/G/r5BnLph6xpKuLeoJoQuj5WfBIx/eQLf+hmVPYHaxJu7V2g==", + "dev": true, + "peer": true, + "dependencies": { + "@types/json-schema": "^7.0.9", + "ajv": "^8.9.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.1.0" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, "node_modules/terser/node_modules/commander": { "version": "2.20.3", "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", @@ -5455,172 +6179,508 @@ "url": "https://opencollective.com/vitest" } }, - "node_modules/vite-node/node_modules/@esbuild/linux-x64": { + "node_modules/vite-node/node_modules/@esbuild/android-arm": { "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.18.20.tgz", - "integrity": "sha512-UYqiqemphJcNsFEskc73jQ7B9jgwjWrSayxawS6UVFZGWrAAtkzjxSqnoclCXxWtfwLdzU+vTpcNYhpn43uP1w==", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.18.20.tgz", + "integrity": "sha512-fyi7TDI/ijKKNZTUJAQqiG5T7YjJXgnzkURqmGj13C6dCqckZBLdl4h7bkhHt/t0WP+zO9/zwroDvANaOqO5Sw==", "cpu": [ - "x64" + "arm" ], "dev": true, "optional": true, "os": [ - "linux" + "android" ], "engines": { "node": ">=12" } }, - "node_modules/vite-node/node_modules/esbuild": { + "node_modules/vite-node/node_modules/@esbuild/android-arm64": { "version": "0.18.20", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.18.20.tgz", - "integrity": "sha512-ceqxoedUrcayh7Y7ZX6NdbbDzGROiyVBgC4PriJThBKSVPWnnFHZAkfI1lJT8QFkOwH4qOS2SJkS4wvpGl8BpA==", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.18.20.tgz", + "integrity": "sha512-Nz4rJcchGDtENV0eMKUNa6L12zz2zBDXuhj/Vjh18zGqB44Bi7MBMSXjgunJgjRhCmKOjnPuZp4Mb6OKqtMHLQ==", + "cpu": [ + "arm64" + ], "dev": true, - "hasInstallScript": true, - "bin": { - "esbuild": "bin/esbuild" - }, + "optional": true, + "os": [ + "android" + ], "engines": { "node": ">=12" - }, - "optionalDependencies": { - "@esbuild/android-arm": "0.18.20", - "@esbuild/android-arm64": "0.18.20", - "@esbuild/android-x64": "0.18.20", - "@esbuild/darwin-arm64": "0.18.20", - "@esbuild/darwin-x64": "0.18.20", - "@esbuild/freebsd-arm64": "0.18.20", - "@esbuild/freebsd-x64": "0.18.20", - "@esbuild/linux-arm": "0.18.20", - "@esbuild/linux-arm64": "0.18.20", - "@esbuild/linux-ia32": "0.18.20", - "@esbuild/linux-loong64": "0.18.20", - "@esbuild/linux-mips64el": "0.18.20", - "@esbuild/linux-ppc64": "0.18.20", - "@esbuild/linux-riscv64": "0.18.20", - "@esbuild/linux-s390x": "0.18.20", - "@esbuild/linux-x64": "0.18.20", - "@esbuild/netbsd-x64": "0.18.20", - "@esbuild/openbsd-x64": "0.18.20", - "@esbuild/sunos-x64": "0.18.20", - "@esbuild/win32-arm64": "0.18.20", - "@esbuild/win32-ia32": "0.18.20", - "@esbuild/win32-x64": "0.18.20" } }, - "node_modules/vite-node/node_modules/rollup": { - "version": "3.29.5", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.29.5.tgz", - "integrity": "sha512-GVsDdsbJzzy4S/v3dqWPJ7EfvZJfCHiDqe80IyrF59LYuP+e6U1LJoUqeuqRbwAWoMNoXivMNeNAOf5E22VA1w==", + "node_modules/vite-node/node_modules/@esbuild/android-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.18.20.tgz", + "integrity": "sha512-8GDdlePJA8D6zlZYJV/jnrRAi6rOiNaCC/JclcXpB+KIuvfBN4owLtgzY2bsxnx666XjJx2kDPUmnTtR8qKQUg==", + "cpu": [ + "x64" + ], "dev": true, - "bin": { - "rollup": "dist/bin/rollup" - }, + "optional": true, + "os": [ + "android" + ], "engines": { - "node": ">=14.18.0", - "npm": ">=8.0.0" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" + "node": ">=12" } }, - "node_modules/vite-node/node_modules/vite": { - "version": "4.5.5", - "resolved": "https://registry.npmjs.org/vite/-/vite-4.5.5.tgz", - "integrity": "sha512-ifW3Lb2sMdX+WU91s3R0FyQlAyLxOzCSCP37ujw0+r5POeHPwe6udWVIElKQq8gk3t7b8rkmvqC6IHBpCff4GQ==", + "node_modules/vite-node/node_modules/@esbuild/darwin-arm64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.18.20.tgz", + "integrity": "sha512-bxRHW5kHU38zS2lPTPOyuyTm+S+eobPUnTNkdJEfAddYgEcll4xkT8DB9d2008DtTbl7uJag2HuE5NZAZgnNEA==", + "cpu": [ + "arm64" + ], "dev": true, - "dependencies": { - "esbuild": "^0.18.10", - "postcss": "^8.4.27", - "rollup": "^3.27.1" - }, - "bin": { - "vite": "bin/vite.js" - }, + "optional": true, + "os": [ + "darwin" + ], "engines": { - "node": "^14.18.0 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/vitejs/vite?sponsor=1" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" - }, - "peerDependencies": { - "@types/node": ">= 14", - "less": "*", - "lightningcss": "^1.21.0", - "sass": "*", - "stylus": "*", - "sugarss": "*", - "terser": "^5.4.0" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - }, - "less": { - "optional": true - }, - "lightningcss": { - "optional": true - }, - "sass": { - "optional": true - }, - "stylus": { - "optional": true - }, - "sugarss": { - "optional": true - }, - "terser": { - "optional": true - } + "node": ">=12" } }, - "node_modules/vite-plugin-compression": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/vite-plugin-compression/-/vite-plugin-compression-0.5.1.tgz", - "integrity": "sha512-5QJKBDc+gNYVqL/skgFAP81Yuzo9R+EAf19d+EtsMF/i8kFUpNi3J/H01QD3Oo8zBQn+NzoCIFkpPLynoOzaJg==", + "node_modules/vite-node/node_modules/@esbuild/darwin-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.18.20.tgz", + "integrity": "sha512-pc5gxlMDxzm513qPGbCbDukOdsGtKhfxD1zJKXjCCcU7ju50O7MeAZ8c4krSJcOIJGFR+qx21yMMVYwiQvyTyQ==", + "cpu": [ + "x64" + ], "dev": true, - "dependencies": { - "chalk": "^4.1.2", - "debug": "^4.3.3", - "fs-extra": "^10.0.0" - }, - "peerDependencies": { - "vite": ">=2.0.0" + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" } }, - "node_modules/vite-plugin-sass": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/vite-plugin-sass/-/vite-plugin-sass-0.1.0.tgz", - "integrity": "sha512-gLwvs3ozfDAOZCqs+PepkTd4078m8tfq50IlmTW/OphlWsW95uP7lQ5A3NezfUfTZDTCOA4nFlYnOWRpsKYOqw==", - "dev": true + "node_modules/vite-node/node_modules/@esbuild/freebsd-arm64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.18.20.tgz", + "integrity": "sha512-yqDQHy4QHevpMAaxhhIwYPMv1NECwOvIpGCZkECn8w2WFHXjEwrBn3CeNIYsibZ/iZEUemj++M26W3cNR5h+Tw==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } }, - "node_modules/vitest": { - "version": "0.33.0", - "resolved": "https://registry.npmjs.org/vitest/-/vitest-0.33.0.tgz", - "integrity": "sha512-1CxaugJ50xskkQ0e969R/hW47za4YXDUfWJDxip1hwbnhUjYolpfUn2AMOulqG/Dtd9WYAtkHmM/m3yKVrEejQ==", + "node_modules/vite-node/node_modules/@esbuild/freebsd-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.18.20.tgz", + "integrity": "sha512-tgWRPPuQsd3RmBZwarGVHZQvtzfEBOreNuxEMKFcd5DaDn2PbBxfwLcj4+aenoh7ctXcbXmOQIn8HI6mCSw5MQ==", + "cpu": [ + "x64" + ], "dev": true, - "dependencies": { - "@types/chai": "^4.3.5", - "@types/chai-subset": "^1.3.3", - "@types/node": "*", - "@vitest/expect": "0.33.0", - "@vitest/runner": "0.33.0", - "@vitest/snapshot": "0.33.0", - "@vitest/spy": "0.33.0", - "@vitest/utils": "0.33.0", - "acorn": "^8.9.0", - "acorn-walk": "^8.2.0", - "cac": "^6.7.14", - "chai": "^4.3.7", - "debug": "^4.3.4", - "local-pkg": "^0.4.3", - "magic-string": "^0.30.1", - "pathe": "^1.1.1", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite-node/node_modules/@esbuild/linux-arm": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.18.20.tgz", + "integrity": "sha512-/5bHkMWnq1EgKr1V+Ybz3s1hWXok7mDFUMQ4cG10AfW3wL02PSZi5kFpYKrptDsgb2WAJIvRcDm+qIvXf/apvg==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite-node/node_modules/@esbuild/linux-arm64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.18.20.tgz", + "integrity": "sha512-2YbscF+UL7SQAVIpnWvYwM+3LskyDmPhe31pE7/aoTMFKKzIc9lLbyGUpmmb8a8AixOL61sQ/mFh3jEjHYFvdA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite-node/node_modules/@esbuild/linux-ia32": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.18.20.tgz", + "integrity": "sha512-P4etWwq6IsReT0E1KHU40bOnzMHoH73aXp96Fs8TIT6z9Hu8G6+0SHSw9i2isWrD2nbx2qo5yUqACgdfVGx7TA==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite-node/node_modules/@esbuild/linux-loong64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.18.20.tgz", + "integrity": "sha512-nXW8nqBTrOpDLPgPY9uV+/1DjxoQ7DoB2N8eocyq8I9XuqJ7BiAMDMf9n1xZM9TgW0J8zrquIb/A7s3BJv7rjg==", + "cpu": [ + "loong64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite-node/node_modules/@esbuild/linux-mips64el": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.18.20.tgz", + "integrity": "sha512-d5NeaXZcHp8PzYy5VnXV3VSd2D328Zb+9dEq5HE6bw6+N86JVPExrA6O68OPwobntbNJ0pzCpUFZTo3w0GyetQ==", + "cpu": [ + "mips64el" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite-node/node_modules/@esbuild/linux-ppc64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.18.20.tgz", + "integrity": "sha512-WHPyeScRNcmANnLQkq6AfyXRFr5D6N2sKgkFo2FqguP44Nw2eyDlbTdZwd9GYk98DZG9QItIiTlFLHJHjxP3FA==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite-node/node_modules/@esbuild/linux-riscv64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.18.20.tgz", + "integrity": "sha512-WSxo6h5ecI5XH34KC7w5veNnKkju3zBRLEQNY7mv5mtBmrP/MjNBCAlsM2u5hDBlS3NGcTQpoBvRzqBcRtpq1A==", + "cpu": [ + "riscv64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite-node/node_modules/@esbuild/linux-s390x": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.18.20.tgz", + "integrity": "sha512-+8231GMs3mAEth6Ja1iK0a1sQ3ohfcpzpRLH8uuc5/KVDFneH6jtAJLFGafpzpMRO6DzJ6AvXKze9LfFMrIHVQ==", + "cpu": [ + "s390x" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite-node/node_modules/@esbuild/linux-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.18.20.tgz", + "integrity": "sha512-UYqiqemphJcNsFEskc73jQ7B9jgwjWrSayxawS6UVFZGWrAAtkzjxSqnoclCXxWtfwLdzU+vTpcNYhpn43uP1w==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite-node/node_modules/@esbuild/netbsd-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.18.20.tgz", + "integrity": "sha512-iO1c++VP6xUBUmltHZoMtCUdPlnPGdBom6IrO4gyKPFFVBKioIImVooR5I83nTew5UOYrk3gIJhbZh8X44y06A==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite-node/node_modules/@esbuild/openbsd-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.18.20.tgz", + "integrity": "sha512-e5e4YSsuQfX4cxcygw/UCPIEP6wbIL+se3sxPdCiMbFLBWu0eiZOJ7WoD+ptCLrmjZBK1Wk7I6D/I3NglUGOxg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite-node/node_modules/@esbuild/sunos-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.18.20.tgz", + "integrity": "sha512-kDbFRFp0YpTQVVrqUd5FTYmWo45zGaXe0X8E1G/LKFC0v8x0vWrhOWSLITcCn63lmZIxfOMXtCfti/RxN/0wnQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite-node/node_modules/@esbuild/win32-arm64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.18.20.tgz", + "integrity": "sha512-ddYFR6ItYgoaq4v4JmQQaAI5s7npztfV4Ag6NrhiaW0RrnOXqBkgwZLofVTlq1daVTQNhtI5oieTvkRPfZrePg==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite-node/node_modules/@esbuild/win32-ia32": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.18.20.tgz", + "integrity": "sha512-Wv7QBi3ID/rROT08SABTS7eV4hX26sVduqDOTe1MvGMjNd3EjOz4b7zeexIR62GTIEKrfJXKL9LFxTYgkyeu7g==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite-node/node_modules/@esbuild/win32-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.18.20.tgz", + "integrity": "sha512-kTdfRcSiDfQca/y9QIkng02avJ+NCaQvrMejlsB3RRv5sE9rRoeBPISaZpKxHELzRxZyLvNts1P27W3wV+8geQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite-node/node_modules/esbuild": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.18.20.tgz", + "integrity": "sha512-ceqxoedUrcayh7Y7ZX6NdbbDzGROiyVBgC4PriJThBKSVPWnnFHZAkfI1lJT8QFkOwH4qOS2SJkS4wvpGl8BpA==", + "dev": true, + "hasInstallScript": true, + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=12" + }, + "optionalDependencies": { + "@esbuild/android-arm": "0.18.20", + "@esbuild/android-arm64": "0.18.20", + "@esbuild/android-x64": "0.18.20", + "@esbuild/darwin-arm64": "0.18.20", + "@esbuild/darwin-x64": "0.18.20", + "@esbuild/freebsd-arm64": "0.18.20", + "@esbuild/freebsd-x64": "0.18.20", + "@esbuild/linux-arm": "0.18.20", + "@esbuild/linux-arm64": "0.18.20", + "@esbuild/linux-ia32": "0.18.20", + "@esbuild/linux-loong64": "0.18.20", + "@esbuild/linux-mips64el": "0.18.20", + "@esbuild/linux-ppc64": "0.18.20", + "@esbuild/linux-riscv64": "0.18.20", + "@esbuild/linux-s390x": "0.18.20", + "@esbuild/linux-x64": "0.18.20", + "@esbuild/netbsd-x64": "0.18.20", + "@esbuild/openbsd-x64": "0.18.20", + "@esbuild/sunos-x64": "0.18.20", + "@esbuild/win32-arm64": "0.18.20", + "@esbuild/win32-ia32": "0.18.20", + "@esbuild/win32-x64": "0.18.20" + } + }, + "node_modules/vite-node/node_modules/rollup": { + "version": "3.29.5", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.29.5.tgz", + "integrity": "sha512-GVsDdsbJzzy4S/v3dqWPJ7EfvZJfCHiDqe80IyrF59LYuP+e6U1LJoUqeuqRbwAWoMNoXivMNeNAOf5E22VA1w==", + "dev": true, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=14.18.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/vite-node/node_modules/vite": { + "version": "4.5.5", + "resolved": "https://registry.npmjs.org/vite/-/vite-4.5.5.tgz", + "integrity": "sha512-ifW3Lb2sMdX+WU91s3R0FyQlAyLxOzCSCP37ujw0+r5POeHPwe6udWVIElKQq8gk3t7b8rkmvqC6IHBpCff4GQ==", + "dev": true, + "dependencies": { + "esbuild": "^0.18.10", + "postcss": "^8.4.27", + "rollup": "^3.27.1" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + }, + "peerDependencies": { + "@types/node": ">= 14", + "less": "*", + "lightningcss": "^1.21.0", + "sass": "*", + "stylus": "*", + "sugarss": "*", + "terser": "^5.4.0" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "less": { + "optional": true + }, + "lightningcss": { + "optional": true + }, + "sass": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + } + } + }, + "node_modules/vite-plugin-compression": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/vite-plugin-compression/-/vite-plugin-compression-0.5.1.tgz", + "integrity": "sha512-5QJKBDc+gNYVqL/skgFAP81Yuzo9R+EAf19d+EtsMF/i8kFUpNi3J/H01QD3Oo8zBQn+NzoCIFkpPLynoOzaJg==", + "dev": true, + "dependencies": { + "chalk": "^4.1.2", + "debug": "^4.3.3", + "fs-extra": "^10.0.0" + }, + "peerDependencies": { + "vite": ">=2.0.0" + } + }, + "node_modules/vite-plugin-sass": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/vite-plugin-sass/-/vite-plugin-sass-0.1.0.tgz", + "integrity": "sha512-gLwvs3ozfDAOZCqs+PepkTd4078m8tfq50IlmTW/OphlWsW95uP7lQ5A3NezfUfTZDTCOA4nFlYnOWRpsKYOqw==", + "dev": true + }, + "node_modules/vitest": { + "version": "0.33.0", + "resolved": "https://registry.npmjs.org/vitest/-/vitest-0.33.0.tgz", + "integrity": "sha512-1CxaugJ50xskkQ0e969R/hW47za4YXDUfWJDxip1hwbnhUjYolpfUn2AMOulqG/Dtd9WYAtkHmM/m3yKVrEejQ==", + "dev": true, + "dependencies": { + "@types/chai": "^4.3.5", + "@types/chai-subset": "^1.3.3", + "@types/node": "*", + "@vitest/expect": "0.33.0", + "@vitest/runner": "0.33.0", + "@vitest/snapshot": "0.33.0", + "@vitest/spy": "0.33.0", + "@vitest/utils": "0.33.0", + "acorn": "^8.9.0", + "acorn-walk": "^8.2.0", + "cac": "^6.7.14", + "chai": "^4.3.7", + "debug": "^4.3.4", + "local-pkg": "^0.4.3", + "magic-string": "^0.30.1", + "pathe": "^1.1.1", "picocolors": "^1.0.0", "std-env": "^3.3.3", "strip-literal": "^1.0.1", @@ -5676,6 +6736,246 @@ } } }, + "node_modules/vitest/node_modules/@esbuild/android-arm": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.18.20.tgz", + "integrity": "sha512-fyi7TDI/ijKKNZTUJAQqiG5T7YjJXgnzkURqmGj13C6dCqckZBLdl4h7bkhHt/t0WP+zO9/zwroDvANaOqO5Sw==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vitest/node_modules/@esbuild/android-arm64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.18.20.tgz", + "integrity": "sha512-Nz4rJcchGDtENV0eMKUNa6L12zz2zBDXuhj/Vjh18zGqB44Bi7MBMSXjgunJgjRhCmKOjnPuZp4Mb6OKqtMHLQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vitest/node_modules/@esbuild/android-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.18.20.tgz", + "integrity": "sha512-8GDdlePJA8D6zlZYJV/jnrRAi6rOiNaCC/JclcXpB+KIuvfBN4owLtgzY2bsxnx666XjJx2kDPUmnTtR8qKQUg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vitest/node_modules/@esbuild/darwin-arm64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.18.20.tgz", + "integrity": "sha512-bxRHW5kHU38zS2lPTPOyuyTm+S+eobPUnTNkdJEfAddYgEcll4xkT8DB9d2008DtTbl7uJag2HuE5NZAZgnNEA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vitest/node_modules/@esbuild/darwin-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.18.20.tgz", + "integrity": "sha512-pc5gxlMDxzm513qPGbCbDukOdsGtKhfxD1zJKXjCCcU7ju50O7MeAZ8c4krSJcOIJGFR+qx21yMMVYwiQvyTyQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vitest/node_modules/@esbuild/freebsd-arm64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.18.20.tgz", + "integrity": "sha512-yqDQHy4QHevpMAaxhhIwYPMv1NECwOvIpGCZkECn8w2WFHXjEwrBn3CeNIYsibZ/iZEUemj++M26W3cNR5h+Tw==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vitest/node_modules/@esbuild/freebsd-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.18.20.tgz", + "integrity": "sha512-tgWRPPuQsd3RmBZwarGVHZQvtzfEBOreNuxEMKFcd5DaDn2PbBxfwLcj4+aenoh7ctXcbXmOQIn8HI6mCSw5MQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vitest/node_modules/@esbuild/linux-arm": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.18.20.tgz", + "integrity": "sha512-/5bHkMWnq1EgKr1V+Ybz3s1hWXok7mDFUMQ4cG10AfW3wL02PSZi5kFpYKrptDsgb2WAJIvRcDm+qIvXf/apvg==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vitest/node_modules/@esbuild/linux-arm64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.18.20.tgz", + "integrity": "sha512-2YbscF+UL7SQAVIpnWvYwM+3LskyDmPhe31pE7/aoTMFKKzIc9lLbyGUpmmb8a8AixOL61sQ/mFh3jEjHYFvdA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vitest/node_modules/@esbuild/linux-ia32": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.18.20.tgz", + "integrity": "sha512-P4etWwq6IsReT0E1KHU40bOnzMHoH73aXp96Fs8TIT6z9Hu8G6+0SHSw9i2isWrD2nbx2qo5yUqACgdfVGx7TA==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vitest/node_modules/@esbuild/linux-loong64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.18.20.tgz", + "integrity": "sha512-nXW8nqBTrOpDLPgPY9uV+/1DjxoQ7DoB2N8eocyq8I9XuqJ7BiAMDMf9n1xZM9TgW0J8zrquIb/A7s3BJv7rjg==", + "cpu": [ + "loong64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vitest/node_modules/@esbuild/linux-mips64el": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.18.20.tgz", + "integrity": "sha512-d5NeaXZcHp8PzYy5VnXV3VSd2D328Zb+9dEq5HE6bw6+N86JVPExrA6O68OPwobntbNJ0pzCpUFZTo3w0GyetQ==", + "cpu": [ + "mips64el" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vitest/node_modules/@esbuild/linux-ppc64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.18.20.tgz", + "integrity": "sha512-WHPyeScRNcmANnLQkq6AfyXRFr5D6N2sKgkFo2FqguP44Nw2eyDlbTdZwd9GYk98DZG9QItIiTlFLHJHjxP3FA==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vitest/node_modules/@esbuild/linux-riscv64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.18.20.tgz", + "integrity": "sha512-WSxo6h5ecI5XH34KC7w5veNnKkju3zBRLEQNY7mv5mtBmrP/MjNBCAlsM2u5hDBlS3NGcTQpoBvRzqBcRtpq1A==", + "cpu": [ + "riscv64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vitest/node_modules/@esbuild/linux-s390x": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.18.20.tgz", + "integrity": "sha512-+8231GMs3mAEth6Ja1iK0a1sQ3ohfcpzpRLH8uuc5/KVDFneH6jtAJLFGafpzpMRO6DzJ6AvXKze9LfFMrIHVQ==", + "cpu": [ + "s390x" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, "node_modules/vitest/node_modules/@esbuild/linux-x64": { "version": "0.18.20", "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.18.20.tgz", @@ -5692,6 +6992,102 @@ "node": ">=12" } }, + "node_modules/vitest/node_modules/@esbuild/netbsd-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.18.20.tgz", + "integrity": "sha512-iO1c++VP6xUBUmltHZoMtCUdPlnPGdBom6IrO4gyKPFFVBKioIImVooR5I83nTew5UOYrk3gIJhbZh8X44y06A==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vitest/node_modules/@esbuild/openbsd-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.18.20.tgz", + "integrity": "sha512-e5e4YSsuQfX4cxcygw/UCPIEP6wbIL+se3sxPdCiMbFLBWu0eiZOJ7WoD+ptCLrmjZBK1Wk7I6D/I3NglUGOxg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vitest/node_modules/@esbuild/sunos-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.18.20.tgz", + "integrity": "sha512-kDbFRFp0YpTQVVrqUd5FTYmWo45zGaXe0X8E1G/LKFC0v8x0vWrhOWSLITcCn63lmZIxfOMXtCfti/RxN/0wnQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vitest/node_modules/@esbuild/win32-arm64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.18.20.tgz", + "integrity": "sha512-ddYFR6ItYgoaq4v4JmQQaAI5s7npztfV4Ag6NrhiaW0RrnOXqBkgwZLofVTlq1daVTQNhtI5oieTvkRPfZrePg==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vitest/node_modules/@esbuild/win32-ia32": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.18.20.tgz", + "integrity": "sha512-Wv7QBi3ID/rROT08SABTS7eV4hX26sVduqDOTe1MvGMjNd3EjOz4b7zeexIR62GTIEKrfJXKL9LFxTYgkyeu7g==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vitest/node_modules/@esbuild/win32-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.18.20.tgz", + "integrity": "sha512-kTdfRcSiDfQca/y9QIkng02avJ+NCaQvrMejlsB3RRv5sE9rRoeBPISaZpKxHELzRxZyLvNts1P27W3wV+8geQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, "node_modules/vitest/node_modules/esbuild": { "version": "0.18.20", "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.18.20.tgz", @@ -5830,9 +7226,9 @@ } }, "node_modules/vue-component-type-helpers": { - "version": "2.1.10", - "resolved": "https://registry.npmjs.org/vue-component-type-helpers/-/vue-component-type-helpers-2.1.10.tgz", - "integrity": "sha512-lfgdSLQKrUmADiSV6PbBvYgQ33KF3Ztv6gP85MfGaGaSGMTXORVaHT1EHfsqCgzRNBstPKYDmvAV9Do5CmJ07A==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/vue-component-type-helpers/-/vue-component-type-helpers-2.2.0.tgz", + "integrity": "sha512-cYrAnv2me7bPDcg9kIcGwjJiSB6Qyi08+jLDo9yuvoFQjzHiPTzML7RnkJB1+3P6KMsX/KbCD4QE3Tv/knEllw==", "dev": true }, "node_modules/vue-eslint-parser": { @@ -5936,17 +7332,17 @@ } }, "node_modules/webpack": { - "version": "5.96.1", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.96.1.tgz", - "integrity": "sha512-l2LlBSvVZGhL4ZrPwyr8+37AunkcYj5qh8o6u2/2rzoPc8gxFJkLj1WxNgooi9pnoc06jh0BjuXnamM4qlujZA==", + "version": "5.97.1", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.97.1.tgz", + "integrity": "sha512-EksG6gFY3L1eFMROS/7Wzgrii5mBAFe4rIr3r2BTfo7bcc+DWwFZ4OJ/miOuHJO/A85HwyI4eQ0F6IKXesO7Fg==", "dev": true, "peer": true, "dependencies": { "@types/eslint-scope": "^3.7.7", "@types/estree": "^1.0.6", - "@webassemblyjs/ast": "^1.12.1", - "@webassemblyjs/wasm-edit": "^1.12.1", - "@webassemblyjs/wasm-parser": "^1.12.1", + "@webassemblyjs/ast": "^1.14.1", + "@webassemblyjs/wasm-edit": "^1.14.1", + "@webassemblyjs/wasm-parser": "^1.14.1", "acorn": "^8.14.0", "browserslist": "^4.24.0", "chrome-trace-event": "^1.0.2", @@ -6245,9 +7641,9 @@ "dev": true }, "node_modules/yaml": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.6.1.tgz", - "integrity": "sha512-7r0XPzioN/Q9kXBro/XPnA6kznR73DHq+GXh5ON7ZozRO6aMjbmiBuKste2wslTFkC5d1dw0GooOCepZXJ2SAg==", + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.7.0.tgz", + "integrity": "sha512-+hSoy/QHluxmC9kCIJyL/uyFmLmc+e5CFR5Wa+bpIhIj85LVb9ZH2nVnqrHoSvKogwODv0ClqZkmiSSaIH5LTA==", "dev": true, "bin": { "yaml": "bin.mjs" diff --git a/package.json b/package.json index d640f1e6cf..1d8edc1eeb 100644 --- a/package.json +++ b/package.json @@ -28,7 +28,8 @@ "date-fns-tz": "3.1.3", "express": "4.19.2", "js-cookie": "^3.0.5", - "lodash": "^4.17.21", + "json-bigint": "1.0.0", + "lodash": "4.17.21", "pinia": "2.1.7", "tiny-emitter": "2.1.0", "vue": "^3.3.9", diff --git a/src/assets/styles/bmc/custom/_tables.scss b/src/assets/styles/bmc/custom/_tables.scss index fb055dd60a..b984c22706 100644 --- a/src/assets/styles/bmc/custom/_tables.scss +++ b/src/assets/styles/bmc/custom/_tables.scss @@ -152,6 +152,10 @@ background-color: theme-color-dark($light); } } + + caption { + color: $gray-600; + } } .b-table-sticky-header td { diff --git a/src/components/AppHeader/AppHeader.vue b/src/components/AppHeader/AppHeader.vue index e38cd95664..3ac37faf79 100644 --- a/src/components/AppHeader/AppHeader.vue +++ b/src/components/AppHeader/AppHeader.vue @@ -157,7 +157,7 @@ getEvents(); const assetTag = computed(() => globalStore.assetTag); const isNavTagPresent = computed( - () => assetTag.value || globalStore.modelType || globalStore.serialNumber, + () => assetTag.value || globalStore.modelType || globalStore.serialNumber ); const modelType = computed(() => globalStore.modelType); const serialNumber = computed(() => globalStore.serialNumber); diff --git a/src/layouts/AppLayout.vue b/src/layouts/AppLayout.vue index 48eb07ca87..a4494d53bd 100644 --- a/src/layouts/AppLayout.vue +++ b/src/layouts/AppLayout.vue @@ -22,7 +22,9 @@ import AppHeader from '@/components/AppHeader/AppHeader.vue'; import { ref, watch, onMounted } from 'vue'; import { useRoute } from 'vue-router'; import eventBus from '@/eventBus'; +import { GlobalStore } from '@/store'; +const globalStore = GlobalStore(); // const { setFocus } = useJumpLinkComposable(); const routerKey = ref(0); const route = useRoute(); @@ -33,7 +35,7 @@ onMounted(() => { }); watch( - () => route, + () => route // () => { // nextTick(() => { // setFocus(focusTarget.value); @@ -41,6 +43,7 @@ watch( // }, ); const refreshPage = async () => { + globalStore.getSystemInfo(); console.log('Refresh called'); routerKey.value += 1; }; diff --git a/src/locales/en-US.json b/src/locales/en-US.json index 77b5c2179a..bbc85ac3d9 100644 --- a/src/locales/en-US.json +++ b/src/locales/en-US.json @@ -1779,7 +1779,7 @@ "invalidVlanTagId": "VLAN ID must be in range %{min} to %{max}", "invalidIsciTargetPort": "The port value should be a positive integer between %{min} and %{max}", "chapNameRequired": "CHAP name is required when CHAP secret is specified", - "chapSecretRequired": "CHAP secret is required when CHAP secret is specified", + "chapSecretRequired": "CHAP secret is required when CHAP name is specified", "invalidFieldLength": "%{field} should not exceed %{max} characters", "invalidChapSecretLength": "CHAP secret length must be between %{min} and %{max} characters" } diff --git a/src/main.js b/src/main.js index 1a6e68a6ed..2f8520c7e7 100644 --- a/src/main.js +++ b/src/main.js @@ -3,7 +3,7 @@ import { createPinia } from 'pinia'; import App from './App.vue'; import router from './router'; import { createBootstrap } from 'bootstrap-vue-next'; -import { GlobalStore } from './store'; +import { GlobalStore, AuthenticationStore } from './store'; import { format } from 'date-fns-tz'; // Add the necessary CSSs // import 'bootstrap/dist/css/bootstrap.css'; @@ -11,6 +11,9 @@ import 'bootstrap-vue-next/dist/bootstrap-vue-next.css'; import i18n from './i18n'; import ArrowRight16 from '@carbon/icons-vue/es/arrow--right/16'; +import WebSocketPlugin, { + initWebSocket, +} from '@/store/plugins/WebSocketPlugin.js'; const pinia = createPinia(); const app = createApp(App); @@ -20,7 +23,12 @@ app.component('IconArrowRight', ArrowRight16); app.use(createBootstrap({ components: true, directives: true })); // Change this line app.use(i18n); +pinia.use(WebSocketPlugin); + const globalStore = GlobalStore(); +const authenticationStore = AuthenticationStore(); + +if (authenticationStore.isLoggedIn) initWebSocket(); app.config.globalProperties.$filters = { shortTimeZone(value) { diff --git a/src/router/routes.js b/src/router/routes.js index a1c6c94a07..c7c68b43fb 100644 --- a/src/router/routes.js +++ b/src/router/routes.js @@ -26,6 +26,7 @@ import Firmware from '@/views/Operations/Firmware'; import Certificates from '@/views/SecurityAndAccess/Certificates'; import Inventory from '../views/HardwareStatus/Inventory/Inventory.vue'; import SystemParameters from '@/views/ResourceManagement/SystemParameters'; +import ServerPowerOperations from '@/views/Operations/ServerPowerOperations'; const roles = { administrator: 'Administrator', @@ -69,6 +70,14 @@ export const routes = [ exclusiveToRoles: [roles.administrator], }, }, + { + path: '/operations/server-power-operations', + name: 'server-power-operations', + component: ServerPowerOperations, + meta: { + title: i18n.global.t('appPageTitle.serverPowerOperations'), + }, + }, { path: '/hardware-status/sensors', name: 'sensors', diff --git a/src/store/index.js b/src/store/index.js index 700f4ba044..0be0c241d2 100644 --- a/src/store/index.js +++ b/src/store/index.js @@ -29,6 +29,7 @@ import SystemParametersStore from './modules/ResourceManagement/SystemParameters import CertificatesStore from './modules/SecurityAndAccess/CertificatesStore'; import UserManagementStore from './modules/SecurityAndAccess/UserManagementStore'; import PcieTopologyStore from './modules/HardwareStatus/PcieTopologyStore.js'; +import NetworkSettingsStore from './modules/Operations/NetworkSettingsStore.js'; // ... (export use other stores) export { EventLogStore, @@ -60,5 +61,6 @@ export { SystemParametersStore, CertificatesStore, UserManagementStore, - PcieTopologyStore + PcieTopologyStore, + NetworkSettingsStore, }; diff --git a/src/store/modules/Authentication/AuthenticationStore.js b/src/store/modules/Authentication/AuthenticationStore.js index c4cea36581..3ae95f816a 100644 --- a/src/store/modules/Authentication/AuthenticationStore.js +++ b/src/store/modules/Authentication/AuthenticationStore.js @@ -6,6 +6,7 @@ import { useCookies } from 'vue3-cookies'; import Cookies from 'js-cookie'; const { cookies } = useCookies(); // const router = useRouter(); + export const AuthenticationStore = defineStore('authentication', { state: () => ({ consoleWindow: null, @@ -51,7 +52,6 @@ export const AuthenticationStore = defineStore('authentication', { .then((response) => { this.authSuccess(); this.$state.authError = false; - this.xsrfCookie = response.data.token; }) .catch((error) => { this.$state.authError = true; @@ -82,7 +82,6 @@ export const AuthenticationStore = defineStore('authentication', { console.log(error); this.logoutRemove(); }); - }, getUserInfo(username) { return api @@ -96,14 +95,13 @@ export const AuthenticationStore = defineStore('authentication', { .then((response) => { this.$state.bmcTime = response.data.DateTime; const cookie = Cookies.get('XSRF-TOKEN'); - console.log('cookie', cookie); }) .catch((error) => console.log(error)); }, resetStoreState() { - this.$state.authError = false; - this.$state.xsrfCookie = cookies.get('XSRF-TOKEN'); - this.$state.isAuthenticatedCookie = cookies.get('IsAuthenticated'); + this.authError = false; + this.xsrfCookie = cookies.get('XSRF-TOKEN'); + this.isAuthenticatedCookie = cookies.get('IsAuthenticated'); }, }, }); diff --git a/src/store/modules/GlobalStore.js b/src/store/modules/GlobalStore.js index 1b72180b4a..128b5e242a 100644 --- a/src/store/modules/GlobalStore.js +++ b/src/store/modules/GlobalStore.js @@ -39,14 +39,16 @@ export const GlobalStore = defineStore('global', { serialNumber: null, safeMode: null, serverStatus: 'unreachable', + postCodeValue: null, languagePreference: localStorage.getItem('storedLanguage') || 'en-US', isUtcDisplay: localStorage.getItem('storedUtcDisplay') ? JSON.parse(localStorage.getItem('storedUtcDisplay')) : true, username: localStorage.getItem('storedUsername'), - isAuthorized: true, - userPrivilege: null, currentUser: JSON.parse(localStorage.getItem('storedCurrentUser')), + isAuthorized: true, + hmcManaged: localStorage.getItem('storedHmcManagedValue') || null, + isServiceLoginEnabled: false, }), getters: { bootProgressGetter: (state) => state.bootProgress, @@ -57,12 +59,29 @@ export const GlobalStore = defineStore('global', { state.bootProgress === 'OSBootStarted' || state.bootProgress === 'OSRunning', isOSRunningGetter: (state) => state.bootProgress === 'OSRunning', + assetTagGetter: (state) => state.assetTag, + modelTypeGetter: (state) => state.modelType, + serialNumberGetter: (state) => state.serialNumber, getIsUtcDisplay: (state) => state.isUtcDisplay, safeModeGetter: (state) => state.safeMode, + postCodeValueGetter: (state) => state.postCodeValue, + bmcTimeGetter: (state) => state.bmcTime, + acfInstalledGetter: (state) => state.acfInstalled, + expirationDateGetter: (state) => state.expirationDate, + languagePreferenceGetter: (state) => state.languagePreference, + isUtcDisplayGetter: (state) => state.isUtcDisplay, serverStatusGetter: (state) => state.serverStatus, + usernameGetter: (state) => state.username, + hmcManagedGetter: (state) => state.hmcManaged, currentUserGetter: (state) => state.currentUser, isServiceUser: (state) => state.currentUser?.RoleId === 'OemIBMServiceAgent' || !state.currentUser, + isAdminUser: (state) => + state.currentUser?.RoleId === 'Administrator' || !state.currentUser, + isReadOnlyUser: (state) => + state.currentUser?.RoleId === 'ReadOnly' || !state.currentUser, + isAuthorizedGetter: (state) => state.isAuthorized, + isServiceLoginEnabledGetter: (state) => state.isServiceLoginEnabled, }, actions: { async getBmcTime() { @@ -75,8 +94,58 @@ export const GlobalStore = defineStore('global', { }) .catch((error) => console.log(error)); }, - setCurrentUser (currentUsr) { - this.currentUser = currentUsr + async getServiceLogin() { + return await api + .get('/redfish/v1/AccountService/Accounts/service') + .then((response) => { + this.acfInstalled = response.data.Oem.IBM.ACF.ACFInstalled; + this.expirationDate = response.data.Oem.IBM.ACF.ExpirationDate; + this.isServiceLoginEnabled = response.data.Enabled; + }) + .catch((error) => console.log(error)); + }, + getCurrentUser(username = localStorage.getItem('storedUsername')) { + if (localStorage.getItem('storedCurrentUser')) return; + return api + .get(`/redfish/v1/AccountService/Accounts/${username}`) + .then(({ data }) => { + this.currentUser = data; + localStorage.setItem( + 'storedCurrentUser', + JSON.stringify(this.currentUser) + ); + }) + .catch((error) => { + console.log(error); + this.getAccountService(); + }); + }, + getAccountService() { + return api + .get('/redfish/v1/AccountService') + .then((response) => { + if (response.data?.LDAP?.RemoteRoleMapping?.length > 0) { + return Promise.resolve(); + } + }) + .catch(() => { + return Promise.reject(); + }); + }, + async getHmcManaged() { + return await api + .get( + '/redfish/v1/Registries/BiosAttributeRegistry/BiosAttributeRegistry' + ) + .then(({ data: { RegistryEntries } }) => { + const hmcMananged = RegistryEntries.Attributes.filter( + (Attribute) => Attribute.AttributeName == 'pvm_hmc_managed' + ); + let hmcManangedValue = hmcMananged[0].CurrentValue; + this.hmcManaged = hmcManangedValue; + localStorage.setItem('storedHmcManagedValue', hmcManangedValue); + }) + .catch((error) => console.log(error)); }, getSystemInfo() { api @@ -108,43 +177,13 @@ export const GlobalStore = defineStore('global', { } else { this.serverStatus = serverStateMapper(PowerState); } - }, + } ) .catch((error) => { console.log(error); return Promise.reject(); }); }, - getCurrentUser( - username = localStorage.getItem('storedUsername') - ) { - if (localStorage.getItem('storedCurrentUser')) return; - return api - .get(`/redfish/v1/AccountService/Accounts/${username}`) - .then(({ data }) => { - this.setCurrentUser(data) - localStorage.setItem( - 'storedCurrentUser', - JSON.stringify(this.currentUser) - ); - }) - .catch((error) => { - console.log(error); - return this.getAccountService(); - }); - }, - getAccountService() { - return api - .get('/redfish/v1/AccountService') - .then((response) => { - if (response.data?.LDAP?.RemoteRoleMapping?.length > 0) { - return Promise.resolve(); - } - }) - .catch(() => { - return Promise.reject(); - }); - }, async getBootProgress() { api .get('/redfish/v1/Systems/system') @@ -163,9 +202,6 @@ export const GlobalStore = defineStore('global', { this.isAuthorized = true; }, 100); }, - setUtcTime(state, isUtcDisplay) { - state.isUtcDisplay = isUtcDisplay; - }, async getCurrentTask(task) { return await api.get(task).then(({ data }) => { return data; diff --git a/src/store/modules/Operations/BootSettingsStore.js b/src/store/modules/Operations/BootSettingsStore.js index eee97df306..cd9922b900 100644 --- a/src/store/modules/Operations/BootSettingsStore.js +++ b/src/store/modules/Operations/BootSettingsStore.js @@ -69,19 +69,19 @@ export const BootSettingsStore = defineStore('bootSettings', { return await api.all(promises).then( api.spread((...responses) => { let message = i18n.global.t( - 'pageServerPowerOperations.toast.successSaveSettings', + 'pageServerPowerOperations.toast.successSaveSettings' ); responses.forEach((response) => { if (response instanceof Error) { throw new Error( i18n.global.t( - 'pageServerPowerOperations.toast.errorSaveSettings', - ), + 'pageServerPowerOperations.toast.errorSaveSettings' + ) ); } }); return message; - }), + }) ); }, async fetchBiosAttributes() { @@ -108,7 +108,7 @@ export const BootSettingsStore = defineStore('bootSettings', { // Action not tested. Remove this comment once the action is tested and verified. return await api .get( - '/redfish/v1/Registries/BiosAttributeRegistry/BiosAttributeRegistry', + '/redfish/v1/Registries/BiosAttributeRegistry/BiosAttributeRegistry' ) .then( ({ @@ -117,22 +117,22 @@ export const BootSettingsStore = defineStore('bootSettings', { }, }) => { let linuxPercentObj = Attributes.find( - (itm) => itm.AttributeName === 'pvm_linux_kvm_percentage', + (itm) => itm.AttributeName === 'pvm_linux_kvm_percentage' ); let linuxPercentCurrentObj = Attributes.find( - (itm) => itm.AttributeName === 'pvm_linux_kvm_percentage_current', + (itm) => itm.AttributeName === 'pvm_linux_kvm_percentage_current' ); let linuxValue = linuxPercentObj?.CurrentValue / 10; let ibmi_load_source = Attributes.find( - (itm) => itm.AttributeName === 'pvm_ibmi_load_source', + (itm) => itm.AttributeName === 'pvm_ibmi_load_source' ); let ibmi_load_source_value = ibmi_load_source?.CurrentValue; let ibmi_alt_load_source = Attributes.find( - (itm) => itm.AttributeName === 'pvm_ibmi_alt_load_source', + (itm) => itm.AttributeName === 'pvm_ibmi_alt_load_source' ); let ibmi_alt_load_source_value = ibmi_alt_load_source?.CurrentValue; let ibmi_console = Attributes.find( - (itm) => itm.AttributeName === 'pvm_ibmi_console', + (itm) => itm.AttributeName === 'pvm_ibmi_console' ); let ibmi_console_value = ibmi_console?.CurrentValue; let linuxPercentCurrentValue = @@ -180,16 +180,16 @@ export const BootSettingsStore = defineStore('bootSettings', { 'pvm_linux_kvm_memory', ].indexOf(attributeObj.AttributeName) >= 0 ? i18n.global.t( - `pageServerPowerOperations.biosSettings.attributeValues.${attributeObj.AttributeName}.${item.ValueName}`, + `pageServerPowerOperations.biosSettings.attributeValues.${attributeObj.AttributeName}.${item.ValueName}` ) : item.ValueName, }; - }, + } ), }; }, {}); this.attributeValues = filteredAttributeValues; - }, + } ) .catch((error) => console.log(error)); }, @@ -207,7 +207,7 @@ export const BootSettingsStore = defineStore('bootSettings', { pcieSlot?.Location?.PartLocation?.ServiceLabel ) { locationCodes.push( - pcieSlot?.Location?.PartLocation?.ServiceLabel, + pcieSlot?.Location?.PartLocation?.ServiceLabel ); } }); @@ -239,14 +239,14 @@ export const BootSettingsStore = defineStore('bootSettings', { ResetType: 'On', }) .then(() => { - return i18n.global.tc( - 'pageServerPowerOperations.toast.successSaveSettings', + return i18n.global.t( + 'pageServerPowerOperations.toast.successSaveSettings' ); }) .catch((error) => { console.log(error); throw new Error( - i18n.global.tc('pageServerPowerOperations.toast.errorSaveSettings'), + i18n.global.t('pageServerPowerOperations.toast.errorSaveSettings') ); }); }, diff --git a/src/store/modules/Operations/ControlStore.js b/src/store/modules/Operations/ControlStore.js index 190ca1dfe8..ae8ad67825 100644 --- a/src/store/modules/Operations/ControlStore.js +++ b/src/store/modules/Operations/ControlStore.js @@ -8,6 +8,7 @@ export const ControlStore = defineStore('control', { isOperationInProgress: false, lastPowerOperationTime: null, lastBmcRebootTime: null, + displayInfoToast: false, }), getters: { getIsOperationInProgress: (state) => state.isOperationInProgress, @@ -24,7 +25,6 @@ export const ControlStore = defineStore('control', { * @returns {Promise} */ async checkForServerStatus(serverStatus) { - // Action not tested. Remove this comment once the action is tested and verified. const global = GlobalStore(); return new Promise((resolve) => { const timer = setTimeout(() => { @@ -42,12 +42,11 @@ export const ControlStore = defineStore('control', { clearTimeout(timer); } }, - { detached: true }, + { detached: true } ); }); }, async fetchLastPowerOperationTime() { - // Action not tested. Remove this comment once the action is tested and verified. return await api .get('/redfish/v1/Systems/system') .then((response) => { @@ -78,57 +77,61 @@ export const ControlStore = defineStore('control', { .catch((error) => { console.log(error); throw new Error( - i18n.global.t('pageRebootBmc.toast.errorRebootStart'), + i18n.global.t('pageRebootBmc.toast.errorRebootStart') ); }); }, - async serverPowerOn() { - // Action not tested. Remove this comment once the action is tested and verified. - const data = { ResetType: 'On' }; - this.serverPowerChange(data); - await this.checkForServerStatus('on'); + async powerOps(value) { + await this.checkForServerStatus(value); this.isOperationInProgress = false; this.fetchLastPowerOperationTime(); }, + async serverPowerOn() { + const value = 'on'; + const data = { ResetType: 'On' }; + const displayInfo = await this.serverPowerChange(data); + this.powerOps(value); + return Promise.resolve(displayInfo); + }, async serverSoftReboot() { - // Action not tested. Remove this comment once the action is tested and verified. + const value = 'on'; const data = { ResetType: 'GracefulRestart' }; - this.serverPowerChange(data); - await this.checkForServerStatus('on'); - this.isOperationInProgress = false; - this.fetchLastPowerOperationTime(); + const displayInfo = await this.serverPowerChange(data); + this.powerOps(value); + return Promise.resolve(displayInfo); }, async serverHardReboot() { - // Action not tested. Remove this comment once the action is tested and verified. + const value = 'on'; const data = { ResetType: 'ForceRestart' }; - this.serverPowerChange(data); - await this.checkForServerStatus('on'); - this.isOperationInProgress = false; - this.fetchLastPowerOperationTime(); + const displayInfo = await this.serverPowerChange(data); + this.powerOps(value); + return Promise.resolve(displayInfo); }, async serverSoftPowerOff() { - // Action not tested. Remove this comment once the action is tested and verified. + const value = 'off'; const data = { ResetType: 'GracefulShutdown' }; - this.serverPowerChange(data); - await this.checkForServerStatus('off'); - this.isOperationInProgress = false; - this.fetchLastPowerOperationTime(); + const displayInfo = await this.serverPowerChange(data); + this.powerOps(value); + return Promise.resolve(displayInfo); }, async serverHardPowerOff() { - // Action not tested. Remove this comment once the action is tested and verified. + const value = 'off'; const data = { ResetType: 'ForceOff' }; - this.serverPowerChange(data); - await this.checkForServerStatus('off'); - this.isOperationInProgress = false; - this.fetchLastPowerOperationTime(); + const displayInfo = await this.serverPowerChange(data); + this.powerOps(value); + return Promise.resolve(displayInfo); }, serverPowerChange(data) { - // Action not tested. Remove this comment once the action is tested and verified. this.isOperationInProgress = true; - api + return api .post('/redfish/v1/Systems/system/Actions/ComputerSystem.Reset', data) + .then(() => { + this.displayInfoToast = true; + return this.displayInfoToast; + }) .catch((error) => { console.log(error); + this.displayInfoToast = false; this.isOperationInProgress = false; }); }, diff --git a/src/store/modules/Operations/NetworkSettingsStore.js b/src/store/modules/Operations/NetworkSettingsStore.js index df393082a9..584ef4a99a 100644 --- a/src/store/modules/Operations/NetworkSettingsStore.js +++ b/src/store/modules/Operations/NetworkSettingsStore.js @@ -1,9 +1,9 @@ import api from '@/store/api'; import i18n from '@/i18n'; +import { defineStore } from 'pinia'; -const NetworkSettingsStore = { - namespaced: true, - state: { +export const NetworkSettingsStore = defineStore('networkSettings', { + state: () => ({ biosAttributes: null, requiredAttributes: [ 'pvm_ibmi_network_install_type', @@ -24,35 +24,21 @@ const NetworkSettingsStore = { targetNameMaxLength: null, targetPortUpperBound: null, vlanTagIdUpperBound: null, - }, + }), getters: { - biosAttributes: (state) => state.biosAttributes, - nfsImageDirMaxLength: (state) => state.nfsImageDirMaxLength, - initiatorNameMaxLength: (state) => state.initiatorNameMaxLength, - targetNameMaxLength: (state) => state.targetNameMaxLength, - targetPortUpperBound: (state) => state.targetPortUpperBound, - vlanTagIdUpperBound: (state) => state.vlanTagIdUpperBound, - }, - mutations: { - setBiosAttributes: (state, biosAttributes) => - (state.biosAttributes = biosAttributes), - setNfsImageDirMaxLength: (state, nfsImageDirMaxLength) => - (state.nfsImageDirMaxLength = nfsImageDirMaxLength), - setInitiatorNameMaxLength: (state, initiatorNameMaxLength) => - (state.initiatorNameMaxLength = initiatorNameMaxLength), - setTargetNameMaxLength: (state, targetNameMaxLength) => - (state.targetNameMaxLength = targetNameMaxLength), - setTargetPortUpperBound: (state, targetPortUpperBound) => - (state.targetPortUpperBound = targetPortUpperBound), - setVlanTagIdUpperBound: (state, vlanTagIdUpperBound) => - (state.vlanTagIdUpperBound = vlanTagIdUpperBound), + biosAttributesGetter: (state) => state.biosAttributes, + nfsImageDirMaxLengthGetter: (state) => state.nfsImageDirMaxLength, + initiatorNameMaxLengthGetter: (state) => state.initiatorNameMaxLength, + targetNameMaxLengthGetter: (state) => state.targetNameMaxLength, + targetPortUpperBoundGetter: (state) => state.targetPortUpperBound, + vlanTagIdUpperBoundGetter: (state) => state.vlanTagIdUpperBound, }, actions: { - async getBiosAttributes({ commit, state }) { + async getBiosAttributes() { return await api .get('/redfish/v1/Systems/system/Bios') .then(({ data: { Attributes } }) => { - const filteredAttributes = state.requiredAttributes + const filteredAttributes = this.requiredAttributes .filter((key) => Object.keys(Attributes).includes(key)) .reduce((obj, key) => { return { @@ -60,7 +46,7 @@ const NetworkSettingsStore = { [key]: Attributes[key], }; }, {}); - commit('setBiosAttributes', filteredAttributes); + this.biosAttributes = filteredAttributes; }) .catch((error) => { console.log(error); @@ -73,60 +59,60 @@ const NetworkSettingsStore = { return await api .patch('/redfish/v1/Systems/system/Bios/Settings', setDModeObj) .then(() => { - return i18n.t( - 'pageServerPowerOperations.modal.networkSettings.toast.successUpdateDMode', + return i18n.global.t( + 'pageServerPowerOperations.modal.networkSettings.toast.successUpdateDMode' ); }) .catch((error) => { console.log(error); throw new Error( - i18n.t( - 'pageServerPowerOperations.modal.networkSettings.toast.errorUpdateDMode', - ), + i18n.global.t( + 'pageServerPowerOperations.modal.networkSettings.toast.errorUpdateDMode' + ) ); }); }, - async restoreDefault({ dispatch }) { + async restoreDefault() { const restoreDefaultObj = { Attributes: { pvm_ibmi_iscsi_initiator_name: '' }, }; return await api .patch('/redfish/v1/Systems/system/Bios/Settings', restoreDefaultObj) .then(() => { - dispatch('getBiosAttributes'); - return i18n.t( - 'pageServerPowerOperations.modal.networkSettings.toast.successRestoreDefault', + this.getBiosAttributes(); + return i18n.global.t( + 'pageServerPowerOperations.modal.networkSettings.toast.successRestoreDefault' ); }) .catch((error) => { console.log(error); throw new Error( - i18n.t( - 'pageServerPowerOperations.modal.networkSettings.toast.errorRestoreDefault', - ), + i18n.global.t( + 'pageServerPowerOperations.modal.networkSettings.toast.errorRestoreDefault' + ) ); }); }, - async saveBiosSettings(_, { form }) { + async saveBiosSettings({ form }) { return await api .patch('/redfish/v1/Systems/system/Bios/Settings', { Attributes: form, }) .then(() => { - return i18n.t( - 'pageServerPowerOperations.modal.networkSettings.toast.successSavedSetting', + return i18n.global.t( + 'pageServerPowerOperations.modal.networkSettings.toast.successSavedSetting' ); }) .catch((error) => { console.log(error); throw new Error( - i18n.t( - 'pageServerPowerOperations.modal.networkSettings.toast.errorSavedSettings', - ), + i18n.global.t( + 'pageServerPowerOperations.modal.networkSettings.toast.errorSavedSettings' + ) ); }); }, - async updateChapData(_, { chapData }) { + async updateChapData({ chapData }) { return await api .patch('/redfish/v1/Systems/system', { Oem: { @@ -139,61 +125,61 @@ const NetworkSettingsStore = { }, }) .then(() => { - return i18n.t( - 'pageServerPowerOperations.modal.networkSettings.toast.successSavedSetting', + return i18n.global.t( + 'pageServerPowerOperations.modal.networkSettings.toast.successSavedSetting' ); }) .catch((error) => { console.log('error', error); throw new Error( - i18n.t( - 'pageServerPowerOperations.modal.networkSettings.toast.errorSavedSettings', - ), + i18n.global.t( + 'pageServerPowerOperations.modal.networkSettings.toast.errorSavedSettings' + ) ); }); }, - async getPropertyLimits({ commit }) { + async getPropertyLimits() { return await api .get( - '/redfish/v1/Registries/BiosAttributeRegistry/BiosAttributeRegistry', + '/redfish/v1/Registries/BiosAttributeRegistry/BiosAttributeRegistry' ) .then(({ data: { RegistryEntries } }) => { const nfsImageDir = RegistryEntries.Attributes.filter( (Attribute) => - Attribute.AttributeName == 'pvm_ibmi_nfs_image_directory', + Attribute.AttributeName == 'pvm_ibmi_nfs_image_directory' ); const nfsImageDirMaxLength = nfsImageDir[0].MaxLength; - commit('setNfsImageDirMaxLength', nfsImageDirMaxLength); + this.nfsImageDirMaxLength = nfsImageDirMaxLength; const initiatorName = RegistryEntries.Attributes.filter( (Attribute) => - Attribute.AttributeName == 'pvm_ibmi_iscsi_initiator_name', + Attribute.AttributeName == 'pvm_ibmi_iscsi_initiator_name' ); const initiatorNameMaxLength = initiatorName[0].MaxLength; - commit('setInitiatorNameMaxLength', initiatorNameMaxLength); + this.initiatorNameMaxLength = initiatorNameMaxLength; const targetName = RegistryEntries.Attributes.filter( (Attribute) => - Attribute.AttributeName == 'pvm_ibmi_iscsi_target_name', + Attribute.AttributeName == 'pvm_ibmi_iscsi_target_name' ); const targetNameMaxLength = targetName[0].MaxLength; - commit('setTargetNameMaxLength', targetNameMaxLength); + this.targetNameMaxLength = targetNameMaxLength; const targetPort = RegistryEntries.Attributes.filter( (Attribute) => - Attribute.AttributeName == 'pvm_ibmi_iscsi_target_port', + Attribute.AttributeName == 'pvm_ibmi_iscsi_target_port' ); const targetPortUpperBound = targetPort[0].UpperBound; - commit('setTargetPortUpperBound', targetPortUpperBound); + this.targetPortUpperBound = targetPortUpperBound; const vlanTagId = RegistryEntries.Attributes.filter( - (Attribute) => Attribute.AttributeName == 'pvm_ibmi_vlan_tag_id', + (Attribute) => Attribute.AttributeName == 'pvm_ibmi_vlan_tag_id' ); const vlanTagIdUpperBound = vlanTagId[0].UpperBound; - commit('setVlanTagIdUpperBound', vlanTagIdUpperBound); + this.vlanTagIdUpperBound = vlanTagIdUpperBound; }); }, }, -}; +}); export default NetworkSettingsStore; diff --git a/src/store/modules/Settings/NetworkStore.js b/src/store/modules/Settings/NetworkStore.js index ab29604835..6d6813f8b2 100644 --- a/src/store/modules/Settings/NetworkStore.js +++ b/src/store/modules/Settings/NetworkStore.js @@ -2,53 +2,71 @@ import api from '@/store/api'; import i18n from '@/i18n'; import { defineStore } from 'pinia'; +import { find } from 'lodash'; export const NetworkStore = defineStore('network', { state: () => ({ - dchpEnabledState: false, - ipv6DchpEnabledState: false, + dhcpEnabledState: false, + ipv6DhcpEnabledState: false, ipv6AutoConfigEnabled: false, - ethernetData: [], - firstInterfaceId: '', //used for setting global DHCP settings - globalNetworkSettings: [], + networkSettings: [], selectedInterfaceId: '', // which tab is selected - selectedInterfaceIndex: 0, - isTableBusy: false, // which tab is selected + selectedInterfaceIndex: 0, // which tab is selected + isTableBusy: false, }), getters: { - getEthernetDatathernetData: (state) => state.ethernetData, - getFirstInterfaceId: (state) => state.firstInterfaceId, - getGlobalNetworkSettings: (state) => state.globalNetworkSettings, - getIsTableBusy: (state) => state.isTableBusy, - getSelectedInterfaceIdIndex: (state) => state.selectedInterfaceId, - getSelectedInterfaceData: (state) => state.ethernetData, - getSelectedInterfaceId: (state) => state.selectedInterfaceId, - getSelectedInterfaceIndex: (state) => state.selectedInterfaceIndex, + dhcpEnabledStateGetter: (state) => state.dhcpEnabledState, + ipv6DhcpEnabledStateGetter: (state) => state.ipv6DhcpEnabledState, + ipv6AutoConfigEnabledGetter: (state) => state.ipv6AutoConfigEnabled, + networkSettingsGetter: (state) => state.networkSettings, + selectedInterfaceIdGetter: (state) => state.selectedInterfaceId, + selectedInterfaceIndexGetter: (state) => state.selectedInterfaceIndex, + isTableBusyGetter: (state) => state.isTableBusy, }, actions: { - async setGlobalNetworkSettings(data) { - this.globalNetworkSettings = data.map(({ data }) => { + setNetworkSettings: (data) => { + this.networkSettings = data.map(({ data }) => { const { DHCPv4, + DHCPv6, HostName, + Id, IPv4Addresses, IPv4StaticAddresses, - LinkStatus, + IPv6StaticAddresses, + IPv6Addresses, + IPv6DefaultGateway, + IPv6StaticDefaultGateways, MACAddress, + StaticNameServers, + StatelessAddressAutoConfig, } = data; return { defaultGateway: IPv4StaticAddresses[0]?.Gateway, //First static gateway is the default gateway dhcpAddress: IPv4Addresses.filter( - (ipv4) => ipv4.AddressOrigin === 'DHCP', + (ipv4) => ipv4.AddressOrigin === 'DHCP' ), dhcpEnabled: DHCPv4.DHCPEnabled, hostname: HostName, + id: Id, + ipv4: IPv4Addresses, macAddress: MACAddress, - linkStatus: LinkStatus, staticAddress: IPv4StaticAddresses[0]?.Address, // Display first static address on overview page + staticIpv4Addresses: IPv4StaticAddresses, + staticNameServers: StaticNameServers, useDnsEnabled: DHCPv4.UseDNSServers, useDomainNameEnabled: DHCPv4.UseDomainName, useNtpEnabled: DHCPv4.UseNTPServers, + staticIpv6Addresses: IPv6StaticAddresses ?? [], + ipv6: IPv6Addresses ?? [], + ipv6DefaultGateway: IPv6DefaultGateway ?? '', + ipv6OperatingMode: DHCPv6?.OperatingMode ?? '', + ipv6StaticDefaultGateways: IPv6StaticDefaultGateways ?? [], + ipv6UseDnsEnabled: DHCPv6?.UseDNSServers ?? false, + ipv6UseDomainNameEnabled: DHCPv6?.UseDomainName ?? false, + ipv6UseNtpEnabled: DHCPv6?.UseNTPServers ?? false, + ipv6AutoConfigEnabled: + StatelessAddressAutoConfig?.IPv6AutoConfigEnabled ?? false, }; }); }, @@ -57,141 +75,222 @@ export const NetworkStore = defineStore('network', { .get('/redfish/v1/Managers/bmc/EthernetInterfaces') .then((response) => response.data.Members.map( - (ethernetInterface) => ethernetInterface['@odata.id'], - ), + (ethernetInterface) => ethernetInterface['@odata.id'] + ) ) .then((ethernetInterfaceIds) => api.all( ethernetInterfaceIds.map((ethernetInterface) => - api.get(ethernetInterface), - ), - ), + api.get(ethernetInterface) + ) + ) ) .then((ethernetInterfaces) => { const ethernetData = ethernetInterfaces.map( - (ethernetInterface) => ethernetInterface.data, + (ethernetInterface) => ethernetInterface.data ); - const firstInterfaceId = ethernetData[0].Id; - this.ethernetData = ethernetData; - this.firstInterfaceId = firstInterfaceId; - this.selectedInterfaceId = firstInterfaceId; - this.setGlobalNetworkSettings(ethernetInterfaces); + this.setNetworkSettings(ethernetInterfaces); + let currentInterfaceIndex = 0; + if (this.selectedInterfaceIndex) { + currentInterfaceIndex = this.selectedInterfaceIndex; + } + this.selectedInterfaceId = ethernetData[currentInterfaceIndex].Id; }) .catch((error) => { console.log('Network Data:', error); }); }, - async saveDhcpEnabledState(dhcpState) { + async getEthernetDataAfterDelay() { + this.isTableBusy = true; + setTimeout(() => { + this.getEthernetData(); + }, 10000); + setTimeout(() => { + this.isTableBusy = false; + }, 15000); + }, + async saveDomainNameState(domainState) { + this.domainState = domainState; const data = { DHCPv4: { - DHCPEnabled: dhcpState, + UseDomainName: domainState, }, }; return api .patch( `/redfish/v1/Managers/bmc/EthernetInterfaces/${this.selectedInterfaceId}`, - data, + data ) .then(this.getEthernetData()) .then(() => { return i18n.global.t('pageNetwork.toast.successSaveNetworkSettings', { - setting: i18n.global.t('pageNetwork.dhcp'), + setting: i18n.global.t('pageNetwork.domainName'), }); }) .catch((error) => { console.log(error); + this.domainState = !domainState; throw new Error( i18n.global.t('pageNetwork.toast.errorSaveNetworkSettings', { - setting: i18n.global.t('pageNetwork.dhcp'), - }), + setting: i18n.global.t('pageNetwork.domainName'), + }) ); }); }, - async saveDomainNameState(domainState) { - this.domainState = domainState; + async saveDnsState(dnsState) { + this.dnsState = dnsState; const data = { DHCPv4: { - UseDomainName: domainState, + UseDNSServers: dnsState, }, }; - // Saving to the first interface automatically updates DHCPv4 and DHCPv6 - // on all interfaces return api .patch( - `/redfish/v1/Managers/bmc/EthernetInterfaces/${this.firstInterfaceId}`, - data, + `/redfish/v1/Managers/bmc/EthernetInterfaces/${this.selectedInterfaceId}`, + data ) + .then(this.getEthernetData()) .then(() => { return i18n.global.t('pageNetwork.toast.successSaveNetworkSettings', { - setting: i18n.global.t('pageNetwork.domainName'), + setting: i18n.global.t('pageNetwork.dns'), }); }) .catch((error) => { console.log(error); - this.domainState = !domainState; + this.dnsState = !dnsState; throw new Error( i18n.global.t('pageNetwork.toast.errorSaveNetworkSettings', { - setting: i18n.global.t('pageNetwork.domainName'), - }), + setting: i18n.global.t('pageNetwork.dns'), + }) ); }); }, - async saveDnsState(dnsState) { - this.dnsState = dnsState; + async saveNtpState(ntpState) { + this.ntpState = ntpState; const data = { DHCPv4: { - UseDNSServers: dnsState, + UseNTPServers: ntpState, }, }; - // Saving to the first interface automatically updates DHCPv4 and DHCPv6 - // on all interfaces return api .patch( - `/redfish/v1/Managers/bmc/EthernetInterfaces/${this.firstInterfaceId}`, - data, + `/redfish/v1/Managers/bmc/EthernetInterfaces/${this.selectedInterfaceId}`, + data ) + .then(this.getEthernetData()) .then(() => { return i18n.global.t('pageNetwork.toast.successSaveNetworkSettings', { - setting: i18n.global.t('pageNetwork.dns'), + setting: i18n.global.t('pageNetwork.ntp'), }); }) .catch((error) => { console.log(error); - this.dnsState = !dnsState; + this.ntpState = !ntpState; throw new Error( i18n.global.t('pageNetwork.toast.errorSaveNetworkSettings', { - setting: i18n.global.t('pageNetwork.dns'), - }), + setting: i18n.global.t('pageNetwork.ntp'), + }) ); }); }, - async saveNtpState(ntpState) { - this.ntpState = ntpState; + async saveDhcpEnabledState(dhcpState) { + this.dhcpEnabledState = dhcpState; const data = { DHCPv4: { - UseNTPServers: ntpState, + DHCPEnabled: dhcpState, + }, + }; + return api + .patch( + `/redfish/v1/Managers/bmc/EthernetInterfaces/${this.selectedInterfaceId}`, + data + ) + .then(() => { + // Getting Ethernet data here so that the toggle gets updated + this.getEthernetData(); + // Getting Ethernet data here so that the IPv4 table gets updated + this.getEthernetDataAfterDelay(); + }) + .then(() => { + return i18n.global.t('pageNetwork.toast.successSaveNetworkSettings', { + setting: i18n.global.t('pageNetwork.dhcp'), + }); + }) + .catch((error) => { + console.log(error); + this.dhcpEnabledState = !dhcpState; + throw new Error( + i18n.global.t('pageNetwork.toast.errorSaveNetworkSettings', { + setting: i18n.global.t('pageNetwork.dhcp'), + }) + ); + }); + }, + async saveIpv6DhcpEnabledState(dhcpState) { + const updatedDhcpState = dhcpState ? 'Enabled' : 'Disabled'; + this.ipv6DhcpEnabledState = updatedDhcpState; + const data = { + DHCPv6: { + OperatingMode: updatedDhcpState, }, }; - // Saving to the first interface automatically updates DHCPv4 and DHCPv6 - // on all interfaces return api .patch( - `/redfish/v1/Managers/bmc/EthernetInterfaces/${this.firstInterfaceId}`, - data, + `/redfish/v1/Managers/bmc/EthernetInterfaces/${this.selectedInterfaceId}`, + data ) + .then(() => { + // Getting Ethernet data here so that the toggle gets updated + this.getEthernetData(); + // Getting Ethernet data here so that the IPv6 table gets updated + this.getEthernetDataAfterDelay(); + }) .then(() => { return i18n.global.t('pageNetwork.toast.successSaveNetworkSettings', { - setting: i18n.global.t('pageNetwork.ntp'), + setting: i18n.global.t('pageNetwork.dhcp'), }); }) .catch((error) => { console.log(error); - this.ntpState = !ntpState; + this.ipv6DhcpEnabledState = !dhcpState; throw new Error( i18n.global.t('pageNetwork.toast.errorSaveNetworkSettings', { - setting: i18n.global.t('pageNetwork.ntp'), - }), + setting: i18n.global.t('pageNetwork.dhcp'), + }) + ); + }); + }, + async saveIpv6AutoConfigState(ipv6AutoConfigState) { + this.ipv6AutoConfigEnabled = ipv6AutoConfigState; + const data = { + StatelessAddressAutoConfig: { + IPv6AutoConfigEnabled: ipv6AutoConfigState, + }, + }; + return api + .patch( + `/redfish/v1/Managers/bmc/EthernetInterfaces/${this.selectedInterfaceId}`, + data + ) + .then(() => { + // Getting Ethernet data here so that the toggle gets updated + this.getEthernetData(); + // Getting Ethernet data here so that the IPv6 table gets updated + this.getEthernetDataAfterDelay(); + }) + .then(() => { + return i18n.global.t('pageNetwork.toast.successSaveNetworkSettings', { + setting: i18n.global.t('pageNetwork.ipv6AutoConfig'), + }); + }) + .catch((error) => { + console.log(error); + this.ipv6AutoConfigEnabled = !ipv6AutoConfigState; + throw new Error( + i18n.global.t('pageNetwork.toast.errorSaveNetworkSettings', { + setting: i18n.global.t('pageNetwork.ipv6AutoConfig'), + }) ); }); }, @@ -201,26 +300,31 @@ export const NetworkStore = defineStore('network', { async setSelectedTabId(tabId) { this.selectedInterfaceId = tabId; }, - async saveIpv4Address(ipv4Form) { - const originalAddresses = this.ethernetData[ - this.selectedInterfaceIndex - ].IPv4StaticAddresses.map((ipv4) => { - const { Address, SubnetMask, Gateway } = ipv4; - return { - Address, - SubnetMask, - Gateway, - }; + async updateIpv4Address(newIpv4Address) { + const originalAddresses = + this.networkSettings[this.selectedInterfaceIndex].staticIpv4Addresses; + const updatedIpv4 = originalAddresses.map((item) => { + const address = item.Address; + if (find(newIpv4Address, { Address: address })) { + return null; // if address matches then delete address to "edit" + } else { + return {}; // if address doesn't match then skip address, no change + } }); - const newAddress = [ipv4Form]; + const filteredAddress = newIpv4Address.filter( + (item) => item.Subnet !== '' + ); + const updatedIpv4Array = { + IPv4StaticAddresses: [...updatedIpv4, ...filteredAddress], + }; return api .patch( `/redfish/v1/Managers/bmc/EthernetInterfaces/${this.selectedInterfaceId}`, - { - IPv4StaticAddresses: originalAddresses.concat(newAddress), - }, + updatedIpv4Array ) - .then(this.getEthernetData()) + .then(() => { + this.getEthernetDataAfterDelay(); + }) .then(() => { return i18n.global.t('pageNetwork.toast.successSaveNetworkSettings', { setting: i18n.global.t('pageNetwork.ipv4'), @@ -231,40 +335,199 @@ export const NetworkStore = defineStore('network', { throw new Error( i18n.global.t('pageNetwork.toast.errorSaveNetworkSettings', { setting: i18n.global.t('pageNetwork.ipv4'), - }), + }) ); }); }, - async editIpv4Address(ipv4TableData) { + async updateIpv6Address(newIpv6Address) { + const originalAddresses = + this.networkSettings[this.selectedInterfaceIndex].staticIpv6Addresses; + const updatedIpv6 = originalAddresses.map((item) => { + const address = item.Address; + if (find(newIpv6Address, { Address: address })) { + return null; // if address matches then delete address to "edit" + } else { + return {}; // if address doesn't match then skip address, no change + } + }); + const filteredAddress = newIpv6Address.filter( + (item) => item.PrefixLength !== 0 + ); + const updatedIpv6Array = { + IPv6StaticAddresses: [...updatedIpv6, ...filteredAddress], + }; return api .patch( `/redfish/v1/Managers/bmc/EthernetInterfaces/${this.selectedInterfaceId}`, - { - IPv4StaticAddresses: ipv4TableData, - }, + updatedIpv6Array ) - .then(this.getEthernetData()) + .then(() => { + this.getEthernetDataAfterDelay(); + }) + .then(() => { + return i18n.globalt('pageNetwork.toast.successSaveNetworkSettings', { + setting: i18n.global.t('pageNetwork.ipv6'), + }); + }) + .catch((error) => { + console.log(error); + throw new Error( + i18n.global.t('pageNetwork.toast.errorSaveNetworkSettings', { + setting: i18n.global.t('pageNetwork.ipv6'), + }) + ); + }); + }, + async updateIpv6StaticDefaultGatewayAddress( + newIpv6StaticDefaultGatewayAddress + ) { + const originalAddresses = + this.networkSettings[this.selectedInterfaceIndex] + .ipv6StaticDefaultGateways; + const updatedIpv6 = originalAddresses.map((item) => { + const address = item.Address; + if (find(newIpv6StaticDefaultGatewayAddress, { Address: address })) { + return null; // if address matches then delete address to "edit" + } else { + return {}; // if address doesn't match then skip address, no change + } + }); + const filteredAddress = newIpv6StaticDefaultGatewayAddress.filter( + (item) => item.PrefixLength !== 0 + ); + const updatedIpv6Array = { + IPv6StaticDefaultGateways: [...updatedIpv6, ...filteredAddress], + }; + return api + .patch( + `/redfish/v1/Managers/bmc/EthernetInterfaces/${this.selectedInterfaceId}`, + updatedIpv6Array + ) + .then(() => { + this.getEthernetDataAfterDelay(); + }) .then(() => { return i18n.global.t('pageNetwork.toast.successSaveNetworkSettings', { - setting: i18n.global.t('pageNetwork.ipv4'), + setting: i18n.global.t('pageNetwork.ipv6StaticDefaultGateway'), }); }) .catch((error) => { console.log(error); throw new Error( i18n.global.t('pageNetwork.toast.errorSaveNetworkSettings', { - setting: i18n.global.t('pageNetwork.ipv4'), - }), + setting: i18n.global.t('pageNetwork.ipv6StaticDefaultGateway'), + }) ); }); }, - async saveSettings(interfaceSettingsForm) { + async deleteIpv4Address(updatedIpv4Array) { + const originalAddressArray = + this.networkSettings[this.selectedInterfaceIndex].staticIpv4Addresses; + const newIpv4Array = originalAddressArray.map((item) => { + const address = item.Address; + if (find(updatedIpv4Array, { Address: address })) { + return {}; //return addresses that match the updated array + } else { + return null; // delete address that do not match updated array + } + }); + return api .patch( `/redfish/v1/Managers/bmc/EthernetInterfaces/${this.selectedInterfaceId}`, - interfaceSettingsForm, + { IPv4StaticAddresses: newIpv4Array } + ) + .then(() => { + // Getting Ethernet data here so that the address is deleted immediately + this.getEthernetData(); + // Getting Ethernet data here so that the IPv4 table gets updated + this.getEthernetDataAfterDelay(); + }) + .then(() => { + return i18n.global.t('pageNetwork.toast.successDeletingIpv4Server'); + }) + .catch((error) => { + console.log(error); + throw new Error( + i18n.global.t('pageNetwork.toast.errorDeletingIpv4Server') + ); + }); + }, + async deleteIpv6Address(updatedIpv6Array) { + const originalAddressArray = + this.networkSettings[this.selectedInterfaceIndex].staticIpv6Addresses; + const newIpv6Array = originalAddressArray.map((item) => { + const address = item.Address; + if (find(updatedIpv6Array, { Address: address })) { + return {}; //return addresses that match the updated array + } else { + return null; // delete address that do not match updated array + } + }); + return api + .patch( + `/redfish/v1/Managers/bmc/EthernetInterfaces/${this.selectedInterfaceId}`, + { IPv6StaticAddresses: newIpv6Array } + ) + .then(() => { + // Getting Ethernet data here so that the address is deleted immediately + this.getEthernetData(); + // Getting Ethernet data here so that the IPv6 table gets updated + this.getEthernetDataAfterDelay(); + }) + .then(() => { + return i18n.global.t('pageNetwork.toast.successDeletingIpv6Server'); + }) + .catch((error) => { + console.log(error); + throw new Error( + i18n.global.t('pageNetwork.toast.errorDeletingIpv6Server') + ); + }); + }, + async deleteIpv6StaticDefaultGatewayAddress(updatedIpv6Array) { + const originalAddressArray = + this.networkSettings[this.selectedInterfaceIndex] + .ipv6StaticDefaultGateways; + const newIpv6Array = originalAddressArray.map((item) => { + const address = item.Address; + if (find(updatedIpv6Array, { Address: address })) { + return {}; //return addresses that match the updated array + } else { + return null; // delete address that do not match updated array + } + }); + return api + .patch( + `/redfish/v1/Managers/bmc/EthernetInterfaces/${this.selectedInterfaceId}`, + { IPv6StaticDefaultGateways: newIpv6Array } + ) + .then(() => { + // Getting Ethernet data here so that the address is deleted immediately + this.getEthernetData(); + // Getting Ethernet data here so that the table gets updated + this.getEthernetDataAfterDelay(); + }) + .then(() => { + return i18n.global.t( + 'pageNetwork.toast.successDeletingIpv6StaticDefaultGateway' + ); + }) + .catch((error) => { + console.log(error); + throw new Error( + i18n.global.t( + 'pageNetwork.toast.errorDeletingIpv6StaticDefaultGateway' + ) + ); + }); + }, + async saveHostname(hostname) { + return api + .patch( + `/redfish/v1/Managers/bmc/EthernetInterfaces/${this.selectedInterfaceId}`, + hostname ) - .then(this.getEthernetData()) .then(() => { return i18n.global.t('pageNetwork.toast.successSaveNetworkSettings', { setting: i18n.global.t('pageNetwork.network'), @@ -275,34 +538,28 @@ export const NetworkStore = defineStore('network', { throw new Error( i18n.global.t('pageNetwork.toast.errorSaveNetworkSettings', { setting: i18n.global.t('pageNetwork.network'), - }), + }) ); }); }, async saveDnsAddress(dnsForm) { const newAddress = dnsForm; const originalAddresses = - this.ethernetData[this.selectedInterfaceIndex].StaticNameServers; + this.networkSettings[this.selectedInterfaceIndex].staticNameServers; const newDnsArray = originalAddresses.concat(newAddress); return api .patch( `/redfish/v1/Managers/bmc/EthernetInterfaces/${this.selectedInterfaceId}`, - { - StaticNameServers: newDnsArray, - }, + { StaticNameServers: newDnsArray } ) .then(this.getEthernetData()) .then(() => { - return i18n.global.t('pageNetwork.toast.successSaveNetworkSettings', { - setting: i18n.global.t('pageNetwork.dns'), - }); + return i18n.global.t('pageNetwork.toast.successAddingDnsServer'); }) .catch((error) => { console.log(error); throw new Error( - i18n.global.t('pageNetwork.toast.errorSaveNetworkSettings', { - setting: i18n.global.t('pageNetwork.dns'), - }), + i18n.global.t('pageNetwork.toast.errorAddingDnsServer') ); }); }, @@ -310,22 +567,16 @@ export const NetworkStore = defineStore('network', { return api .patch( `/redfish/v1/Managers/bmc/EthernetInterfaces/${this.selectedInterfaceId}`, - { - StaticNameServers: dnsTableData, - }, + { StaticNameServers: dnsTableData } ) .then(this.getEthernetData()) .then(() => { - return i18n.global.t('pageNetwork.toast.successSaveNetworkSettings', { - setting: i18n.global.t('pageNetwork.dns'), - }); + return i18n.global.t('pageNetwork.toast.successDeletingDnsServer'); }) .catch((error) => { console.log(error); throw new Error( - i18n.global.t('pageNetwork.toast.errorSaveNetworkSettings', { - setting: i18n.global.t('pageNetwork.dns'), - }), + i18n.global.t('pageNetwork.toast.errorDeletingDnsServer') ); }); }, diff --git a/src/store/plugins/WebSocketPlugin.js b/src/store/plugins/WebSocketPlugin.js index f50e8608dc..e7699d6d3b 100644 --- a/src/store/plugins/WebSocketPlugin.js +++ b/src/store/plugins/WebSocketPlugin.js @@ -1,3 +1,5 @@ +import JSONbig from 'json-bigint'; +import { AuthenticationStore, GlobalStore, EventLogStore } from '@/store'; /** * WebSocketPlugin will allow us to get new data from the server * without having to poll for changes on the frontend. @@ -7,73 +9,81 @@ * * https://github.com/openbmc/docs/blob/b41aff0fabe137cdb0cfff584b5fe4a41c0c8e77/rest-api.md#event-subscription-protocol */ -const WebSocketPlugin = (store) => { - let ws; - const data = { - paths: [ - '/xyz/openbmc_project/state/host0', - '/xyz/openbmc_project/logging', - '/xyz/openbmc_project/state/boot/raw0', - ], - interfaces: [ - 'xyz.openbmc_project.State.Host', - 'xyz.openbmc_project.Logging.Entry', - 'xyz.openbmc_project.State.Boot.Raw', - ], - }; - const initWebSocket = () => { - const socketDisabled = - process.env.VUE_APP_SUBSCRIBE_SOCKET_DISABLED === 'true' ? true : false; - if (socketDisabled) return; - const token = store.getters['authentication/token']; - var host = - window.location.origin.replace('https://', '') + window.location.pathname; - host = host.replace(/\/$/, ''); - ws = new WebSocket(`wss://${host}/subscribe`, [token]); - ws.onopen = () => { - ws.send(JSON.stringify(data)); - }; - ws.onerror = (event) => { - console.error(event); - }; - ws.onmessage = (event) => { - var JSONbig = require('json-bigint'); - var data = JSONbig.parse(event.data); - const eventInterface = data.interface; - const path = data.path; - if (eventInterface === 'xyz.openbmc_project.State.Boot.Raw') { - if (path === '/xyz/openbmc_project/state/boot/raw0') { - const { properties: { Value } = {} } = data; - if (Value) { - if (Array.isArray(Value) && Value.length) { - var finalValue = Value[0].c.join(''); - } - store.commit('global/setPostCodeValue', finalValue); +let ws; +const data = { + paths: [ + '/xyz/openbmc_project/state/host0', + '/xyz/openbmc_project/logging', + '/xyz/openbmc_project/state/boot/raw0', + ], + interfaces: [ + 'xyz.openbmc_project.State.Host', + 'xyz.openbmc_project.Logging.Entry', + 'xyz.openbmc_project.State.Boot.Raw', + ], +}; + +export const initWebSocket = () => { + const globalStore = GlobalStore(); + const authenticationStore = AuthenticationStore(); + const eventLogStore = EventLogStore(); + + const socketDisabled = + import.meta.env.VITE_APP_SUBSCRIBE_SOCKET_DISABLED === 'true' + ? true + : false; + + if (socketDisabled) return; + + const token = authenticationStore.token; + + var host = window.location.origin.replace('https://', ''); + host = host.replace(/\/$/, ''); + ws = new WebSocket(`wss://${host}/subscribe`, [token]); + ws.onopen = () => { + ws.send(JSON.stringify(data)); + }; + ws.onerror = (event) => { + console.error(event); + }; + ws.onmessage = (event) => { + var data = JSONbig.parse(event.data); + const eventInterface = data.interface; + const path = data.path; + if (eventInterface === 'xyz.openbmc_project.State.Boot.Raw') { + if (path === '/xyz/openbmc_project/state/boot/raw0') { + const { properties: { Value } = {} } = data; + if (Value) { + if (Array.isArray(Value) && Value.length) { + var finalValue = Value[0].c.join(''); } + globalStore.postCodeValue = finalValue; } } - if (eventInterface === 'xyz.openbmc_project.State.Host') { - const { properties: { CurrentHostState } = {} } = data; - if (CurrentHostState) { - store.commit('global/setServerStatus', CurrentHostState); - } - } else if (path === '/xyz/openbmc_project/logging') { - store.dispatch('eventLog/getEventLogData'); + } + if (eventInterface === 'xyz.openbmc_project.State.Host') { + const { properties: { CurrentHostState } = {} } = data; + if (CurrentHostState) { + globalStore.serverStatus = CurrentHostState; } - }; + } else if (path === '/xyz/openbmc_project/logging') { + eventLogStore.getEventLogData(); + } }; +}; - store.subscribe(({ type }) => { - if (type === 'authentication/authSuccess') { - initWebSocket(); - } - if (type === 'authentication/logout') { - if (ws) ws.close(); - } +function WebSocketPlugin({ store }) { + store.$onAction(({ name, _, after }) => { + after(() => { + if (name === 'authSuccess') { + initWebSocket(); + } + if (name === 'logout') { + if (ws) ws.close(); + } + }); }); - - if (store.getters['authentication/isLoggedIn']) initWebSocket(); -}; +} export default WebSocketPlugin; diff --git a/src/views/Operations/ServerPowerOperations/BiosSettings.vue b/src/views/Operations/ServerPowerOperations/BiosSettings.vue index 7f20c2f30a..68dab4df7c 100644 --- a/src/views/Operations/ServerPowerOperations/BiosSettings.vue +++ b/src/views/Operations/ServerPowerOperations/BiosSettings.vue @@ -1,8 +1,8 @@ - - - + + - - - + - - - + + + + + + {{ $t('pageServerPowerOperations.biosSettings.powerSettingDescription') }} - - - + + {{ $t('pageServerPowerOperations.biosSettings.serverFirmware') }} - - + - - + - - + - - + {{ $t( - 'pageServerPowerOperations.biosSettings.pvm_ibmi_load_source', + 'pageServerPowerOperations.biosSettings.pvm_ibmi_load_source' ) }} ({{ $t('pageServerPowerOperations.biosSettings.nonHMCManaged') }}) - - + {{ $t( - 'pageServerPowerOperations.biosSettings.pvm_ibmi_alt_load_source', + 'pageServerPowerOperations.biosSettings.pvm_ibmi_alt_load_source' ) }} ({{ $t('pageServerPowerOperations.biosSettings.nonHMCManaged') }}) - - + - - + {{ $t( - 'pageServerPowerOperations.biosSettings.pvm_linux_kvm_memory', + 'pageServerPowerOperations.biosSettings.pvm_linux_kvm_memory' ) }} ({{ $t('pageServerPowerOperations.biosSettings.nonHMCManaged') }}) - - + {{ $t( - 'pageServerPowerOperations.biosSettings.pvm_linux_kvm_percentage', + 'pageServerPowerOperations.biosSettings.pvm_linux_kvm_percentage' ) }} ({{ $t('pageServerPowerOperations.biosSettings.nonHMCManaged') }}) - - - - + + + + - - diff --git a/src/views/Operations/ServerPowerOperations/BootSettings.vue b/src/views/Operations/ServerPowerOperations/BootSettings.vue index 4bfd49db8d..fd686c791f 100644 --- a/src/views/Operations/ServerPowerOperations/BootSettings.vue +++ b/src/views/Operations/ServerPowerOperations/BootSettings.vue @@ -1,5 +1,5 @@ - diff --git a/src/views/Operations/ServerPowerOperations/NetworkSettingsModal.vue b/src/views/Operations/ServerPowerOperations/NetworkSettingsModal.vue index 8ce5e5e5ac..bc001b0a82 100644 --- a/src/views/Operations/ServerPowerOperations/NetworkSettingsModal.vue +++ b/src/views/Operations/ServerPowerOperations/NetworkSettingsModal.vue @@ -1,7 +1,7 @@ - diff --git a/src/views/Operations/ServerPowerOperations/ServerPowerOperations.vue b/src/views/Operations/ServerPowerOperations/ServerPowerOperations.vue index 3acd1bc28c..4657360c1d 100644 --- a/src/views/Operations/ServerPowerOperations/ServerPowerOperations.vue +++ b/src/views/Operations/ServerPowerOperations/ServerPowerOperations.vue @@ -1,444 +1,518 @@ - diff --git a/src/views/Overview/OverviewNetwork.vue b/src/views/Overview/OverviewNetwork.vue index 7b1bf79171..c3934012bc 100644 --- a/src/views/Overview/OverviewNetwork.vue +++ b/src/views/Overview/OverviewNetwork.vue @@ -38,7 +38,7 @@ dataFormatterGlobal.dataFormatter( network.dhcpAddress.length !== 0 ? network.dhcpAddress[0].Address - : null, + : null ) }} @@ -60,6 +60,7 @@ const dataFormatterGlobal = useDataFormatterGlobal(); const networkStore = NetworkStore(); networkStore.getEthernetData(); const network = computed(() => { - return networkStore.globalNetworkSettings[0]; + // Commenting this line out. Will be implemented once overview page is completed + // return networkStore.globalNetworkSettings[0]; }); diff --git a/vite.config.js b/vite.config.js index 16dfa3e44e..657965c2e1 100644 --- a/vite.config.js +++ b/vite.config.js @@ -58,7 +58,7 @@ export default defineConfig({ // locale messages resource pre-compile option include: resolve( dirname(fileURLToPath(import.meta.url)), - './path/to/src/locales/**', + './path/to/src/locales/**' ), }), ], @@ -98,7 +98,7 @@ export default defineConfig({ const setCookieHeader = proxyRes.headers['set-cookie']; if (setCookieHeader) { proxyRes.headers['set-cookie'] = setCookieHeader.map( - (cookie) => cookie + '; Path=/', + (cookie) => cookie + '; Path=/' ); } // Remove the 'strict-transport-security' header @@ -148,7 +148,7 @@ export default defineConfig({ // eslint-disable-next-line no-undef new CompressionPlugin({ deleteOriginalAssets: true, - }), + }) ); }