Compare commits
1 Commits
renovate/e
...
fdf83ee8cf
Author | SHA1 | Date | |
---|---|---|---|
fdf83ee8cf |
4
virtweb_backend/Cargo.lock
generated
4
virtweb_backend/Cargo.lock
generated
@ -2938,9 +2938,9 @@ checksum = "2b15c43186be67a4fd63bee50d0303afffcef381492ebe2c5d87f324e1b8815c"
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "reqwest"
|
name = "reqwest"
|
||||||
version = "0.12.22"
|
version = "0.12.20"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "cbc931937e6ca3a06e3b6c0aa7841849b160a90351d6ab467a8b9b9959767531"
|
checksum = "eabf4c97d9130e2bf606614eb937e86edac8292eaa6f422f995d7e8de1eb1813"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"base64 0.22.1",
|
"base64 0.22.1",
|
||||||
"bytes",
|
"bytes",
|
||||||
|
@ -28,7 +28,7 @@ futures-util = "0.3.31"
|
|||||||
anyhow = "1.0.98"
|
anyhow = "1.0.98"
|
||||||
actix-multipart = "0.7.2"
|
actix-multipart = "0.7.2"
|
||||||
tempfile = "3.20.0"
|
tempfile = "3.20.0"
|
||||||
reqwest = { version = "0.12.22", features = ["stream"] }
|
reqwest = { version = "0.12.20", features = ["stream"] }
|
||||||
url = "2.5.4"
|
url = "2.5.4"
|
||||||
virt = "0.4.2"
|
virt = "0.4.2"
|
||||||
sysinfo = { version = "0.35.2", features = ["serde"] }
|
sysinfo = { version = "0.35.2", features = ["serde"] }
|
||||||
|
@ -27,7 +27,10 @@ impl LibVirtActor {
|
|||||||
/// Connect to hypervisor
|
/// Connect to hypervisor
|
||||||
pub async fn connect() -> anyhow::Result<Self> {
|
pub async fn connect() -> anyhow::Result<Self> {
|
||||||
let hypervisor_uri = AppConfig::get().hypervisor_uri.as_deref().unwrap_or("");
|
let hypervisor_uri = AppConfig::get().hypervisor_uri.as_deref().unwrap_or("");
|
||||||
log::info!("Will connect to hypvervisor at address '{hypervisor_uri}'",);
|
log::info!(
|
||||||
|
"Will connect to hypvervisor at address '{}'",
|
||||||
|
hypervisor_uri
|
||||||
|
);
|
||||||
let conn = Connect::open(Some(hypervisor_uri))?;
|
let conn = Connect::open(Some(hypervisor_uri))?;
|
||||||
|
|
||||||
Ok(Self { m: conn })
|
Ok(Self { m: conn })
|
||||||
@ -99,7 +102,7 @@ impl Handler<GetDomainXMLReq> for LibVirtActor {
|
|||||||
log::debug!("Get domain XML:\n{}", msg.0.as_string());
|
log::debug!("Get domain XML:\n{}", msg.0.as_string());
|
||||||
let domain = Domain::lookup_by_uuid_string(&self.m, &msg.0.as_string())?;
|
let domain = Domain::lookup_by_uuid_string(&self.m, &msg.0.as_string())?;
|
||||||
let xml = domain.get_xml_desc(VIR_DOMAIN_XML_SECURE)?;
|
let xml = domain.get_xml_desc(VIR_DOMAIN_XML_SECURE)?;
|
||||||
log::debug!("XML = {xml}");
|
log::debug!("XML = {}", xml);
|
||||||
DomainXML::parse_xml(&xml)
|
DomainXML::parse_xml(&xml)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -128,7 +131,7 @@ impl Handler<DefineDomainReq> for LibVirtActor {
|
|||||||
fn handle(&mut self, mut msg: DefineDomainReq, _ctx: &mut Self::Context) -> Self::Result {
|
fn handle(&mut self, mut msg: DefineDomainReq, _ctx: &mut Self::Context) -> Self::Result {
|
||||||
let xml = msg.1.as_xml()?;
|
let xml = msg.1.as_xml()?;
|
||||||
|
|
||||||
log::debug!("Define domain:\n{xml}");
|
log::debug!("Define domain:\n{}", xml);
|
||||||
let domain = Domain::define_xml(&self.m, &xml)?;
|
let domain = Domain::define_xml(&self.m, &xml)?;
|
||||||
let uuid = XMLUuid::parse_from_str(&domain.get_uuid_string()?)?;
|
let uuid = XMLUuid::parse_from_str(&domain.get_uuid_string()?)?;
|
||||||
|
|
||||||
@ -443,7 +446,7 @@ impl Handler<GetNetworkXMLReq> for LibVirtActor {
|
|||||||
log::debug!("Get network XML:\n{}", msg.0.as_string());
|
log::debug!("Get network XML:\n{}", msg.0.as_string());
|
||||||
let network = Network::lookup_by_uuid_string(&self.m, &msg.0.as_string())?;
|
let network = Network::lookup_by_uuid_string(&self.m, &msg.0.as_string())?;
|
||||||
let xml = network.get_xml_desc(0)?;
|
let xml = network.get_xml_desc(0)?;
|
||||||
log::debug!("XML = {xml}");
|
log::debug!("XML = {}", xml);
|
||||||
NetworkXML::parse_xml(&xml)
|
NetworkXML::parse_xml(&xml)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -599,7 +602,7 @@ impl Handler<GetNWFilterXMLReq> for LibVirtActor {
|
|||||||
log::debug!("Get network filter XML:\n{}", msg.0.as_string());
|
log::debug!("Get network filter XML:\n{}", msg.0.as_string());
|
||||||
let filter = NWFilter::lookup_by_uuid_string(&self.m, &msg.0.as_string())?;
|
let filter = NWFilter::lookup_by_uuid_string(&self.m, &msg.0.as_string())?;
|
||||||
let xml = filter.get_xml_desc(0)?;
|
let xml = filter.get_xml_desc(0)?;
|
||||||
log::debug!("XML = {xml}");
|
log::debug!("XML = {}", xml);
|
||||||
NetworkFilterXML::parse_xml(xml)
|
NetworkFilterXML::parse_xml(xml)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -614,7 +617,7 @@ impl Handler<DefineNWFilterReq> for LibVirtActor {
|
|||||||
fn handle(&mut self, mut msg: DefineNWFilterReq, _ctx: &mut Self::Context) -> Self::Result {
|
fn handle(&mut self, mut msg: DefineNWFilterReq, _ctx: &mut Self::Context) -> Self::Result {
|
||||||
let xml = msg.1.into_xml()?;
|
let xml = msg.1.into_xml()?;
|
||||||
|
|
||||||
log::debug!("Define network filter:\n{xml}");
|
log::debug!("Define network filter:\n{}", xml);
|
||||||
let filter = NWFilter::define_xml(&self.m, &xml)?;
|
let filter = NWFilter::define_xml(&self.m, &xml)?;
|
||||||
let uuid = XMLUuid::parse_from_str(&filter.get_uuid_string()?)?;
|
let uuid = XMLUuid::parse_from_str(&filter.get_uuid_string()?)?;
|
||||||
|
|
||||||
|
@ -280,7 +280,7 @@ impl AppConfig {
|
|||||||
|
|
||||||
/// Get VM vnc sockets path for domain
|
/// Get VM vnc sockets path for domain
|
||||||
pub fn vnc_socket_for_domain(&self, name: &str) -> PathBuf {
|
pub fn vnc_socket_for_domain(&self, name: &str) -> PathBuf {
|
||||||
self.vnc_sockets_path().join(format!("vnc-{name}"))
|
self.vnc_sockets_path().join(format!("vnc-{}", name))
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Get VM root disks storage directory
|
/// Get VM root disks storage directory
|
||||||
|
@ -34,7 +34,8 @@ pub async fn upload(MultipartForm(mut form): MultipartForm<UploadDiskImageForm>)
|
|||||||
if let Some(mime_type) = file.content_type {
|
if let Some(mime_type) = file.content_type {
|
||||||
if !constants::ALLOWED_DISK_IMAGES_MIME_TYPES.contains(&mime_type.as_ref()) {
|
if !constants::ALLOWED_DISK_IMAGES_MIME_TYPES.contains(&mime_type.as_ref()) {
|
||||||
return Ok(HttpResponse::BadRequest().json(format!(
|
return Ok(HttpResponse::BadRequest().json(format!(
|
||||||
"Unsupported file type for disk upload: {mime_type}"
|
"Unsupported file type for disk upload: {}",
|
||||||
|
mime_type
|
||||||
)));
|
)));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -52,7 +52,7 @@ pub async fn upload_file(MultipartForm(mut form): MultipartForm<UploadIsoForm>)
|
|||||||
}
|
}
|
||||||
|
|
||||||
let dest_file = AppConfig::get().iso_storage_path().join(file_name);
|
let dest_file = AppConfig::get().iso_storage_path().join(file_name);
|
||||||
log::info!("Will save ISO file {dest_file:?}");
|
log::info!("Will save ISO file {:?}", dest_file);
|
||||||
|
|
||||||
if dest_file.exists() {
|
if dest_file.exists() {
|
||||||
log::error!("Conflict with uploaded iso file name!");
|
log::error!("Conflict with uploaded iso file name!");
|
||||||
|
@ -43,7 +43,7 @@ impl actix_web::error::ResponseError for HttpErr {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
fn error_response(&self) -> HttpResponse<BoxBody> {
|
fn error_response(&self) -> HttpResponse<BoxBody> {
|
||||||
log::error!("Error while processing request! {self}");
|
log::error!("Error while processing request! {}", self);
|
||||||
|
|
||||||
HttpResponse::InternalServerError().body("Failed to execute request!")
|
HttpResponse::InternalServerError().body("Failed to execute request!")
|
||||||
}
|
}
|
||||||
|
@ -109,7 +109,7 @@ fn extract_ip_mask<const V: usize>(n: Option<u8>) -> anyhow::Result<Option<u8>>
|
|||||||
fn extract_nw_filter_comment(n: &Option<String>) -> anyhow::Result<Option<String>> {
|
fn extract_nw_filter_comment(n: &Option<String>) -> anyhow::Result<Option<String>> {
|
||||||
if let Some(comment) = n {
|
if let Some(comment) = n {
|
||||||
if comment.len() > 256 || comment.contains('\"') || comment.contains('\n') {
|
if comment.len() > 256 || comment.contains('\"') || comment.contains('\n') {
|
||||||
return Err(NetworkFilterExtraction(format!("Invalid comment! {comment}")).into());
|
return Err(NetworkFilterExtraction(format!("Invalid comment! {}", comment)).into());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -69,7 +69,8 @@ where
|
|||||||
|
|
||||||
if !AppConfig::get().is_allowed_ip(remote_ip.0) {
|
if !AppConfig::get().is_allowed_ip(remote_ip.0) {
|
||||||
log::error!(
|
log::error!(
|
||||||
"An attempt to access VirtWeb from an unauthorized network has been intercepted! {remote_ip:?}"
|
"An attempt to access VirtWeb from an unauthorized network has been intercepted! {:?}",
|
||||||
|
remote_ip
|
||||||
);
|
);
|
||||||
return Ok(req
|
return Ok(req
|
||||||
.into_response(
|
.into_response(
|
||||||
|
@ -81,10 +81,10 @@ impl CloudInitConfig {
|
|||||||
// Process metadata
|
// Process metadata
|
||||||
let mut metadatas = vec![];
|
let mut metadatas = vec![];
|
||||||
if let Some(inst_id) = &self.instance_id {
|
if let Some(inst_id) = &self.instance_id {
|
||||||
metadatas.push(format!("instance-id: {inst_id}"));
|
metadatas.push(format!("instance-id: {}", inst_id));
|
||||||
}
|
}
|
||||||
if let Some(local_hostname) = &self.local_hostname {
|
if let Some(local_hostname) = &self.local_hostname {
|
||||||
metadatas.push(format!("local-hostname: {local_hostname}"));
|
metadatas.push(format!("local-hostname: {}", local_hostname));
|
||||||
}
|
}
|
||||||
if let Some(dsmode) = &self.dsmode {
|
if let Some(dsmode) = &self.dsmode {
|
||||||
metadatas.push(format!(
|
metadatas.push(format!(
|
||||||
|
118
virtweb_frontend/package-lock.json
generated
118
virtweb_frontend/package-lock.json
generated
@ -9,15 +9,15 @@
|
|||||||
"version": "0.1.0",
|
"version": "0.1.0",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@emotion/react": "^11.14.0",
|
"@emotion/react": "^11.14.0",
|
||||||
"@emotion/styled": "^11.14.1",
|
"@emotion/styled": "^11.14.0",
|
||||||
"@fontsource/roboto": "^5.2.6",
|
"@fontsource/roboto": "^5.2.6",
|
||||||
"@mdi/js": "^7.4.47",
|
"@mdi/js": "^7.4.47",
|
||||||
"@mdi/react": "^1.6.1",
|
"@mdi/react": "^1.6.1",
|
||||||
"@monaco-editor/react": "^4.7.0",
|
"@monaco-editor/react": "^4.7.0",
|
||||||
"@mui/icons-material": "^7.1.2",
|
"@mui/icons-material": "^7.1.2",
|
||||||
"@mui/material": "^7.1.2",
|
"@mui/material": "^7.1.2",
|
||||||
"@mui/x-charts": "^8.3.1",
|
"@mui/x-charts": "^8.6.0",
|
||||||
"@mui/x-data-grid": "^8.7.0",
|
"@mui/x-data-grid": "^8.5.3",
|
||||||
"date-and-time": "^3.6.0",
|
"date-and-time": "^3.6.0",
|
||||||
"filesize": "^10.1.6",
|
"filesize": "^10.1.6",
|
||||||
"humanize-duration": "^3.32.2",
|
"humanize-duration": "^3.32.2",
|
||||||
@ -25,7 +25,7 @@
|
|||||||
"monaco-yaml": "^5.4.0",
|
"monaco-yaml": "^5.4.0",
|
||||||
"react": "^19.1.0",
|
"react": "^19.1.0",
|
||||||
"react-dom": "^19.1.0",
|
"react-dom": "^19.1.0",
|
||||||
"react-router-dom": "^7.6.3",
|
"react-router-dom": "^7.6.2",
|
||||||
"react-syntax-highlighter": "^15.6.1",
|
"react-syntax-highlighter": "^15.6.1",
|
||||||
"react-vnc": "^3.1.0",
|
"react-vnc": "^3.1.0",
|
||||||
"uuid": "^11.1.0",
|
"uuid": "^11.1.0",
|
||||||
@ -33,7 +33,7 @@
|
|||||||
"yaml": "^2.8.0"
|
"yaml": "^2.8.0"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@eslint/js": "^9.30.1",
|
"@eslint/js": "^9.27.0",
|
||||||
"@types/humanize-duration": "^3.27.4",
|
"@types/humanize-duration": "^3.27.4",
|
||||||
"@types/jest": "^29.5.14",
|
"@types/jest": "^29.5.14",
|
||||||
"@types/react": "^19.1.8",
|
"@types/react": "^19.1.8",
|
||||||
@ -41,12 +41,12 @@
|
|||||||
"@types/react-syntax-highlighter": "^15.5.13",
|
"@types/react-syntax-highlighter": "^15.5.13",
|
||||||
"@types/uuid": "^10.0.0",
|
"@types/uuid": "^10.0.0",
|
||||||
"@vitejs/plugin-react": "^4.6.0",
|
"@vitejs/plugin-react": "^4.6.0",
|
||||||
"eslint": "^9.30.1",
|
"eslint": "^9.29.0",
|
||||||
"eslint-plugin-react-dom": "^1.52.2",
|
"eslint-plugin-react-dom": "^1.52.2",
|
||||||
"eslint-plugin-react-hooks": "^5.2.0",
|
"eslint-plugin-react-hooks": "^5.2.0",
|
||||||
"eslint-plugin-react-refresh": "^0.4.20",
|
"eslint-plugin-react-refresh": "^0.4.20",
|
||||||
"eslint-plugin-react-x": "^1.52.2",
|
"eslint-plugin-react-x": "^1.52.2",
|
||||||
"globals": "^16.3.0",
|
"globals": "^16.1.0",
|
||||||
"typescript": "^5.8.3",
|
"typescript": "^5.8.3",
|
||||||
"typescript-eslint": "^8.32.1",
|
"typescript-eslint": "^8.32.1",
|
||||||
"vite": "^6.3.5"
|
"vite": "^6.3.5"
|
||||||
@ -451,9 +451,9 @@
|
|||||||
"license": "MIT"
|
"license": "MIT"
|
||||||
},
|
},
|
||||||
"node_modules/@emotion/styled": {
|
"node_modules/@emotion/styled": {
|
||||||
"version": "11.14.1",
|
"version": "11.14.0",
|
||||||
"resolved": "https://registry.npmjs.org/@emotion/styled/-/styled-11.14.1.tgz",
|
"resolved": "https://registry.npmjs.org/@emotion/styled/-/styled-11.14.0.tgz",
|
||||||
"integrity": "sha512-qEEJt42DuToa3gurlH4Qqc1kVpNq8wO8cJtDzU46TjlzWjDlsVyevtYCRijVq3SrHsROS+gVQ8Fnea108GnKzw==",
|
"integrity": "sha512-XxfOnXFffatap2IyCeJyNov3kiDQWoR08gPUQxvbL7fxKryGBKUZUkG6Hz48DZwVrJSVh9sJboyV1Ds4OW6SgA==",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@babel/runtime": "^7.18.3",
|
"@babel/runtime": "^7.18.3",
|
||||||
@ -1403,9 +1403,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@eslint/config-array": {
|
"node_modules/@eslint/config-array": {
|
||||||
"version": "0.21.0",
|
"version": "0.20.1",
|
||||||
"resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.21.0.tgz",
|
"resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.20.1.tgz",
|
||||||
"integrity": "sha512-ENIdc4iLu0d93HeYirvKmrzshzofPw6VkZRKQGe9Nv46ZnWUzcF1xV01dcvEg/1wXUR61OmmlSfyeyO7EvjLxQ==",
|
"integrity": "sha512-OL0RJzC/CBzli0DrrR31qzj6d6i6Mm3HByuhflhl4LOBiWxN+3i6/t/ZQQNii4tjksXi8r2CRW1wMpWA2ULUEw==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"license": "Apache-2.0",
|
"license": "Apache-2.0",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
@ -1418,9 +1418,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@eslint/config-helpers": {
|
"node_modules/@eslint/config-helpers": {
|
||||||
"version": "0.3.0",
|
"version": "0.2.2",
|
||||||
"resolved": "https://registry.npmjs.org/@eslint/config-helpers/-/config-helpers-0.3.0.tgz",
|
"resolved": "https://registry.npmjs.org/@eslint/config-helpers/-/config-helpers-0.2.2.tgz",
|
||||||
"integrity": "sha512-ViuymvFmcJi04qdZeDc2whTHryouGcDlaxPqarTD0ZE10ISpxGUVZGZDx4w01upyIynL3iu6IXH2bS1NhclQMw==",
|
"integrity": "sha512-+GPzk8PlG0sPpzdU5ZvIRMPidzAnZDl/s9L+y13iodqvb8leL53bTannOrQ/Im7UkpsmFU5Ily5U60LWixnmLg==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"license": "Apache-2.0",
|
"license": "Apache-2.0",
|
||||||
"engines": {
|
"engines": {
|
||||||
@ -1478,9 +1478,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@eslint/js": {
|
"node_modules/@eslint/js": {
|
||||||
"version": "9.30.1",
|
"version": "9.29.0",
|
||||||
"resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.30.1.tgz",
|
"resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.29.0.tgz",
|
||||||
"integrity": "sha512-zXhuECFlyep42KZUhWjfvsmXGX39W8K8LFb8AWXM9gSV9dQB+MrJGLKvW6Zw0Ggnbpw0VHTtrhFXYe3Gym18jg==",
|
"integrity": "sha512-3PIF4cBw/y+1u2EazflInpV+lYsSG0aByVIQzAgb1m1MhHFSbqTyNqtBKHgWf/9Ykud+DhILS9EGkmekVhbKoQ==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"engines": {
|
"engines": {
|
||||||
@ -1953,15 +1953,15 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@mui/x-charts": {
|
"node_modules/@mui/x-charts": {
|
||||||
"version": "8.3.1",
|
"version": "8.6.0",
|
||||||
"resolved": "https://registry.npmjs.org/@mui/x-charts/-/x-charts-8.3.1.tgz",
|
"resolved": "https://registry.npmjs.org/@mui/x-charts/-/x-charts-8.6.0.tgz",
|
||||||
"integrity": "sha512-jZClK40++ftcMwCeHKudGKmazd0MsgnrIP6RhYi2lH1kg0jK2upueokyxVIIxqquwWsQYE3WsflJBP61DvYXOQ==",
|
"integrity": "sha512-rhgmy6nVfnCLiEarUlwTvjBPmlbV4EoLVV3985OqCoZrAvtr3u4IzqRzrF2hhjO9fCH+SsFejt/0hC9+ZFNTuA==",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@babel/runtime": "^7.27.1",
|
"@babel/runtime": "^7.27.6",
|
||||||
"@mui/utils": "^7.0.2",
|
"@mui/utils": "^7.1.1",
|
||||||
"@mui/x-charts-vendor": "8.3.1",
|
"@mui/x-charts-vendor": "8.5.3",
|
||||||
"@mui/x-internals": "8.3.1",
|
"@mui/x-internals": "8.6.0",
|
||||||
"bezier-easing": "^2.1.0",
|
"bezier-easing": "^2.1.0",
|
||||||
"clsx": "^2.1.1",
|
"clsx": "^2.1.1",
|
||||||
"prop-types": "^15.8.1",
|
"prop-types": "^15.8.1",
|
||||||
@ -1989,12 +1989,12 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@mui/x-charts-vendor": {
|
"node_modules/@mui/x-charts-vendor": {
|
||||||
"version": "8.3.1",
|
"version": "8.5.3",
|
||||||
"resolved": "https://registry.npmjs.org/@mui/x-charts-vendor/-/x-charts-vendor-8.3.1.tgz",
|
"resolved": "https://registry.npmjs.org/@mui/x-charts-vendor/-/x-charts-vendor-8.5.3.tgz",
|
||||||
"integrity": "sha512-UcUa7HDIpSfeVBYgeHewWoVALcB4Gg9we53l78j2cyadYBZOWdtLj8fezo9zAhxfZ5s9T+1yIyuD+CCnYJnUpQ==",
|
"integrity": "sha512-H05cb0c2qfRhWLPcwtiIU8BOcKTrMNvhgmRAvJJXpmlirOA1km8dUlR71VeUvJiCthhVIHKyFkPPzFYKgHAfng==",
|
||||||
"license": "MIT AND ISC",
|
"license": "MIT AND ISC",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@babel/runtime": "^7.27.1",
|
"@babel/runtime": "^7.27.6",
|
||||||
"@types/d3-color": "^3.1.3",
|
"@types/d3-color": "^3.1.3",
|
||||||
"@types/d3-delaunay": "^6.0.4",
|
"@types/d3-delaunay": "^6.0.4",
|
||||||
"@types/d3-interpolate": "^3.0.4",
|
"@types/d3-interpolate": "^3.0.4",
|
||||||
@ -2014,14 +2014,14 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@mui/x-data-grid": {
|
"node_modules/@mui/x-data-grid": {
|
||||||
"version": "8.7.0",
|
"version": "8.5.3",
|
||||||
"resolved": "https://registry.npmjs.org/@mui/x-data-grid/-/x-data-grid-8.7.0.tgz",
|
"resolved": "https://registry.npmjs.org/@mui/x-data-grid/-/x-data-grid-8.5.3.tgz",
|
||||||
"integrity": "sha512-3hVjnADSBXEd/7f+CHlxTNhqJrnRL0XkTbvI+yfttPuqLHYQJwNUR7p7d/VtyRcR6QlaK19+Bu8Q6u0Ygmw/PQ==",
|
"integrity": "sha512-rA+de5yre16KFIGKRBUwb8kYIdn7SPPrZsBy1P3QxisqhC+Wz2AQg/W6WWv71aFHwplmGwsFUjU6d47Fy/wvXg==",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@babel/runtime": "^7.27.6",
|
"@babel/runtime": "^7.27.6",
|
||||||
"@mui/utils": "^7.1.1",
|
"@mui/utils": "^7.1.1",
|
||||||
"@mui/x-internals": "8.7.0",
|
"@mui/x-internals": "8.5.3",
|
||||||
"clsx": "^2.1.1",
|
"clsx": "^2.1.1",
|
||||||
"prop-types": "^15.8.1",
|
"prop-types": "^15.8.1",
|
||||||
"use-sync-external-store": "^1.5.0"
|
"use-sync-external-store": "^1.5.0"
|
||||||
@ -2051,9 +2051,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@mui/x-data-grid/node_modules/@mui/x-internals": {
|
"node_modules/@mui/x-data-grid/node_modules/@mui/x-internals": {
|
||||||
"version": "8.7.0",
|
"version": "8.5.3",
|
||||||
"resolved": "https://registry.npmjs.org/@mui/x-internals/-/x-internals-8.7.0.tgz",
|
"resolved": "https://registry.npmjs.org/@mui/x-internals/-/x-internals-8.5.3.tgz",
|
||||||
"integrity": "sha512-1aduds7L2i6t0HIFNlqG4UB07SVEg+wcnJ9GGu8B/X8EVwO72Rt+rc8ZlqK10ooscq1AlTwi2dd0q+hz+aWk+Q==",
|
"integrity": "sha512-ImCg4E3DT3XoDIZO0pNCbB7iw14N+YCFY3J1V28POwCD7P2f3HSIz4jwzM006oYxI6bqeE6LMfpdPRDW6s6dQw==",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@babel/runtime": "^7.27.6",
|
"@babel/runtime": "^7.27.6",
|
||||||
@ -2073,13 +2073,14 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@mui/x-internals": {
|
"node_modules/@mui/x-internals": {
|
||||||
"version": "8.3.1",
|
"version": "8.6.0",
|
||||||
"resolved": "https://registry.npmjs.org/@mui/x-internals/-/x-internals-8.3.1.tgz",
|
"resolved": "https://registry.npmjs.org/@mui/x-internals/-/x-internals-8.6.0.tgz",
|
||||||
"integrity": "sha512-8kIxT66cea63iEseEIHSWzKju2Wzl7MsWFoAUQEyRvYqOFa2j9Un2Vn/EH2vy9nm/MtMAYpwOE/nt68/KTIA2w==",
|
"integrity": "sha512-ed6IOmnUpm18b607JRTJS+xya731CrQtJKX35l/4TlH8Df1SpkSJsmoyBBmZ09DNX8YNEFpYt5EyfXI28iyM2A==",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@babel/runtime": "^7.27.1",
|
"@babel/runtime": "^7.27.6",
|
||||||
"@mui/utils": "^7.0.2"
|
"@mui/utils": "^7.1.1",
|
||||||
|
"reselect": "^5.1.1"
|
||||||
},
|
},
|
||||||
"engines": {
|
"engines": {
|
||||||
"node": ">=14.0.0"
|
"node": ">=14.0.0"
|
||||||
@ -2089,6 +2090,7 @@
|
|||||||
"url": "https://opencollective.com/mui-org"
|
"url": "https://opencollective.com/mui-org"
|
||||||
},
|
},
|
||||||
"peerDependencies": {
|
"peerDependencies": {
|
||||||
|
"@mui/system": "^5.15.14 || ^6.0.0 || ^7.0.0",
|
||||||
"react": "^17.0.0 || ^18.0.0 || ^19.0.0"
|
"react": "^17.0.0 || ^18.0.0 || ^19.0.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@ -3389,19 +3391,19 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/eslint": {
|
"node_modules/eslint": {
|
||||||
"version": "9.30.1",
|
"version": "9.29.0",
|
||||||
"resolved": "https://registry.npmjs.org/eslint/-/eslint-9.30.1.tgz",
|
"resolved": "https://registry.npmjs.org/eslint/-/eslint-9.29.0.tgz",
|
||||||
"integrity": "sha512-zmxXPNMOXmwm9E0yQLi5uqXHs7uq2UIiqEKo3Gq+3fwo1XrJ+hijAZImyF7hclW3E6oHz43Yk3RP8at6OTKflQ==",
|
"integrity": "sha512-GsGizj2Y1rCWDu6XoEekL3RLilp0voSePurjZIkxL3wlm5o5EC9VpgaP7lrCvjnkuLvzFBQWB3vWB3K5KQTveQ==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@eslint-community/eslint-utils": "^4.2.0",
|
"@eslint-community/eslint-utils": "^4.2.0",
|
||||||
"@eslint-community/regexpp": "^4.12.1",
|
"@eslint-community/regexpp": "^4.12.1",
|
||||||
"@eslint/config-array": "^0.21.0",
|
"@eslint/config-array": "^0.20.1",
|
||||||
"@eslint/config-helpers": "^0.3.0",
|
"@eslint/config-helpers": "^0.2.1",
|
||||||
"@eslint/core": "^0.14.0",
|
"@eslint/core": "^0.14.0",
|
||||||
"@eslint/eslintrc": "^3.3.1",
|
"@eslint/eslintrc": "^3.3.1",
|
||||||
"@eslint/js": "9.30.1",
|
"@eslint/js": "9.29.0",
|
||||||
"@eslint/plugin-kit": "^0.3.1",
|
"@eslint/plugin-kit": "^0.3.1",
|
||||||
"@humanfs/node": "^0.16.6",
|
"@humanfs/node": "^0.16.6",
|
||||||
"@humanwhocodes/module-importer": "^1.0.1",
|
"@humanwhocodes/module-importer": "^1.0.1",
|
||||||
@ -4180,9 +4182,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/globals": {
|
"node_modules/globals": {
|
||||||
"version": "16.3.0",
|
"version": "16.1.0",
|
||||||
"resolved": "https://registry.npmjs.org/globals/-/globals-16.3.0.tgz",
|
"resolved": "https://registry.npmjs.org/globals/-/globals-16.1.0.tgz",
|
||||||
"integrity": "sha512-bqWEnJ1Nt3neqx2q5SFfGS8r/ahumIakg3HcwtNlrVlwXIeNumWn/c7Pn/wKzGhf6SaW6H6uWXLqC30STCMchQ==",
|
"integrity": "sha512-aibexHNbb/jiUSObBgpHLj+sIuUmJnYcgXBlrfsiDZ9rt4aF2TFRbyLgZ2iFQuVZ1K5Mx3FVkbKRSgKrbK3K2g==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"engines": {
|
"engines": {
|
||||||
@ -5222,9 +5224,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/react-router": {
|
"node_modules/react-router": {
|
||||||
"version": "7.6.3",
|
"version": "7.6.2",
|
||||||
"resolved": "https://registry.npmjs.org/react-router/-/react-router-7.6.3.tgz",
|
"resolved": "https://registry.npmjs.org/react-router/-/react-router-7.6.2.tgz",
|
||||||
"integrity": "sha512-zf45LZp5skDC6I3jDLXQUu0u26jtuP4lEGbc7BbdyxenBN1vJSTA18czM2D+h5qyMBuMrD+9uB+mU37HIoKGRA==",
|
"integrity": "sha512-U7Nv3y+bMimgWjhlT5CRdzHPu2/KVmqPwKUCChW8en5P3znxUqwlYFlbmyj8Rgp1SF6zs5X4+77kBVknkg6a0w==",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"cookie": "^1.0.1",
|
"cookie": "^1.0.1",
|
||||||
@ -5244,12 +5246,12 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/react-router-dom": {
|
"node_modules/react-router-dom": {
|
||||||
"version": "7.6.3",
|
"version": "7.6.2",
|
||||||
"resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-7.6.3.tgz",
|
"resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-7.6.2.tgz",
|
||||||
"integrity": "sha512-DiWJm9qdUAmiJrVWaeJdu4TKu13+iB/8IEi0EW/XgaHCjW/vWGrwzup0GVvaMteuZjKnh5bEvJP/K0MDnzawHw==",
|
"integrity": "sha512-Q8zb6VlTbdYKK5JJBLQEN06oTUa/RAbG/oQS1auK1I0TbJOXktqm+QENEVJU6QvWynlXPRBXI3fiOQcSEA78rA==",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"react-router": "7.6.3"
|
"react-router": "7.6.2"
|
||||||
},
|
},
|
||||||
"engines": {
|
"engines": {
|
||||||
"node": ">=20.0.0"
|
"node": ">=20.0.0"
|
||||||
|
@ -11,15 +11,15 @@
|
|||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@emotion/react": "^11.14.0",
|
"@emotion/react": "^11.14.0",
|
||||||
"@emotion/styled": "^11.14.1",
|
"@emotion/styled": "^11.14.0",
|
||||||
"@fontsource/roboto": "^5.2.6",
|
"@fontsource/roboto": "^5.2.6",
|
||||||
"@mdi/js": "^7.4.47",
|
"@mdi/js": "^7.4.47",
|
||||||
"@mdi/react": "^1.6.1",
|
"@mdi/react": "^1.6.1",
|
||||||
"@monaco-editor/react": "^4.7.0",
|
"@monaco-editor/react": "^4.7.0",
|
||||||
"@mui/icons-material": "^7.1.2",
|
"@mui/icons-material": "^7.1.2",
|
||||||
"@mui/material": "^7.1.2",
|
"@mui/material": "^7.1.2",
|
||||||
"@mui/x-charts": "^8.3.1",
|
"@mui/x-charts": "^8.6.0",
|
||||||
"@mui/x-data-grid": "^8.7.0",
|
"@mui/x-data-grid": "^8.5.3",
|
||||||
"date-and-time": "^3.6.0",
|
"date-and-time": "^3.6.0",
|
||||||
"filesize": "^10.1.6",
|
"filesize": "^10.1.6",
|
||||||
"humanize-duration": "^3.32.2",
|
"humanize-duration": "^3.32.2",
|
||||||
@ -27,7 +27,7 @@
|
|||||||
"monaco-yaml": "^5.4.0",
|
"monaco-yaml": "^5.4.0",
|
||||||
"react": "^19.1.0",
|
"react": "^19.1.0",
|
||||||
"react-dom": "^19.1.0",
|
"react-dom": "^19.1.0",
|
||||||
"react-router-dom": "^7.6.3",
|
"react-router-dom": "^7.6.2",
|
||||||
"react-syntax-highlighter": "^15.6.1",
|
"react-syntax-highlighter": "^15.6.1",
|
||||||
"react-vnc": "^3.1.0",
|
"react-vnc": "^3.1.0",
|
||||||
"uuid": "^11.1.0",
|
"uuid": "^11.1.0",
|
||||||
@ -35,7 +35,7 @@
|
|||||||
"yaml": "^2.8.0"
|
"yaml": "^2.8.0"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@eslint/js": "^9.30.1",
|
"@eslint/js": "^9.27.0",
|
||||||
"@types/humanize-duration": "^3.27.4",
|
"@types/humanize-duration": "^3.27.4",
|
||||||
"@types/jest": "^29.5.14",
|
"@types/jest": "^29.5.14",
|
||||||
"@types/react": "^19.1.8",
|
"@types/react": "^19.1.8",
|
||||||
@ -43,12 +43,12 @@
|
|||||||
"@types/react-syntax-highlighter": "^15.5.13",
|
"@types/react-syntax-highlighter": "^15.5.13",
|
||||||
"@types/uuid": "^10.0.0",
|
"@types/uuid": "^10.0.0",
|
||||||
"@vitejs/plugin-react": "^4.6.0",
|
"@vitejs/plugin-react": "^4.6.0",
|
||||||
"eslint": "^9.30.1",
|
"eslint": "^9.29.0",
|
||||||
"eslint-plugin-react-dom": "^1.52.2",
|
"eslint-plugin-react-dom": "^1.52.2",
|
||||||
"eslint-plugin-react-hooks": "^5.2.0",
|
"eslint-plugin-react-hooks": "^5.2.0",
|
||||||
"eslint-plugin-react-refresh": "^0.4.20",
|
"eslint-plugin-react-refresh": "^0.4.20",
|
||||||
"eslint-plugin-react-x": "^1.52.2",
|
"eslint-plugin-react-x": "^1.52.2",
|
||||||
"globals": "^16.3.0",
|
"globals": "^16.1.0",
|
||||||
"typescript": "^5.8.3",
|
"typescript": "^5.8.3",
|
||||||
"typescript-eslint": "^8.32.1",
|
"typescript-eslint": "^8.32.1",
|
||||||
"vite": "^6.3.5"
|
"vite": "^6.3.5"
|
||||||
|
Reference in New Issue
Block a user