From e6e4cd63f3853aeb92d242bf288c5533a244ea68 Mon Sep 17 00:00:00 2001 From: Matt Hill Date: Thu, 28 Sep 2023 14:54:20 -0600 Subject: [PATCH 01/38] fix welcome page --- frontend/package-lock.json | 2 +- .../ui/src/app/pages/apps-routes/app-list/app-list.page.html | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/frontend/package-lock.json b/frontend/package-lock.json index e093338f3..9553271bc 100644 --- a/frontend/package-lock.json +++ b/frontend/package-lock.json @@ -98,7 +98,7 @@ "prettier": "^2.8.4", "ts-node": "^10.9.0", "tslint": "6.1.3", - "typescript": "4.8.4" + "typescript": "^4.8.4" }, "peerDependencies": { "rxjs": ">=7.0.0" diff --git a/frontend/projects/ui/src/app/pages/apps-routes/app-list/app-list.page.html b/frontend/projects/ui/src/app/pages/apps-routes/app-list/app-list.page.html index 4dcc24234..05e4a76cf 100644 --- a/frontend/projects/ui/src/app/pages/apps-routes/app-list/app-list.page.html +++ b/frontend/projects/ui/src/app/pages/apps-routes/app-list/app-list.page.html @@ -14,7 +14,7 @@

Welcome to StartOS

- + From 5e3412d73530eacd3db4a150345b07dc58898c70 Mon Sep 17 00:00:00 2001 From: J H <2364004+Blu-J@users.noreply.github.com> Date: Fri, 29 Sep 2023 12:08:53 -0600 Subject: [PATCH 02/38] feat: Change all the dependency errors at once (#2427) * feat: Change all the dependency errors at once * remove deprecated dependency-errors field * set pointers to [] by default * chore: Something about fixing the build * fix migration --------- Co-authored-by: Aiden McClelland --- backend/Cargo.lock | 4 +- backend/src/context/rpc.rs | 63 +++++++++--- backend/src/db/model.rs | 1 + backend/src/init.rs | 11 ++- backend/src/install/mod.rs | 1 - backend/src/status/mod.rs | 2 - backend/src/version/mod.rs | 6 +- backend/src/version/v0_3_5.rs | 98 +++++++++++++++++++ .../apps-routes/app-show/app-show.page.ts | 2 +- .../ui/src/app/services/api/api.fixures.ts | 6 +- .../ui/src/app/services/api/mock-patch.ts | 8 +- .../src/app/services/patch-db/data-model.ts | 2 +- 12 files changed, 170 insertions(+), 34 deletions(-) create mode 100644 backend/src/version/v0_3_5.rs diff --git a/backend/Cargo.lock b/backend/Cargo.lock index 782823a4a..5a65c699f 100644 --- a/backend/Cargo.lock +++ b/backend/Cargo.lock @@ -2120,9 +2120,9 @@ dependencies = [ [[package]] name = "indicatif" -version = "0.17.6" +version = "0.17.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b297dc40733f23a0e52728a58fa9489a5b7638a324932de16b41adc3ef80730" +checksum = "fb28741c9db9a713d93deb3bb9515c20788cef5815265bee4980e87bde7e0f25" dependencies = [ "console", "instant", diff --git a/backend/src/context/rpc.rs b/backend/src/context/rpc.rs index f01ec2ce7..cd3f1676c 100644 --- a/backend/src/context/rpc.rs +++ b/backend/src/context/rpc.rs @@ -22,6 +22,7 @@ use crate::account::AccountInfo; use crate::core::rpc_continuations::{RequestGuid, RestHandler, RpcContinuation}; use crate::db::model::{CurrentDependents, Database, PackageDataEntryMatchModelRef}; use crate::db::prelude::PatchDbExt; +use crate::dependencies::compute_dependency_config_errs; use crate::disk::OsPartitionInfo; use crate::init::init_postgres; use crate::install::cleanup::{cleanup_failed, uninstall}; @@ -155,8 +156,7 @@ impl RpcContext { .unwrap_or(SocketAddr::from(([127, 0, 0, 1], 9051))), tor_proxy, base.dns_bind - .as_ref() - .map(|v| v.as_slice()) + .as_deref() .unwrap_or(&[SocketAddr::from(([127, 0, 0, 1], 53))]), SslManager::new(&account)?, &account.hostname, @@ -217,11 +217,8 @@ impl RpcContext { }); let res = Self(seed.clone()); - res.cleanup().await?; + res.cleanup_and_initialize().await?; tracing::info!("Cleaned up transient states"); - let peeked = res.db.peek().await?; - res.managers.init(res.clone(), peeked).await?; - tracing::info!("Initialized Package Managers"); Ok(res) } @@ -236,7 +233,7 @@ impl RpcContext { } #[instrument(skip(self))] - pub async fn cleanup(&self) -> Result<(), Error> { + pub async fn cleanup_and_initialize(&self) -> Result<(), Error> { self.db .mutate(|f| { let mut current_dependents = f @@ -278,9 +275,10 @@ impl RpcContext { Ok(()) }) .await?; + let peek = self.db.peek().await?; + for (package_id, package) in peek.as_package_data().as_entries()?.into_iter() { - let package = package.clone(); let action = match package.as_match() { PackageDataEntryMatchModelRef::Installing(_) | PackageDataEntryMatchModelRef::Restoring(_) @@ -298,7 +296,7 @@ impl RpcContext { &self.datadir, &package_id, &version, - &volume_id, + volume_id, )) .with_kind(ErrorKind::Filesystem)?; if tokio::fs::metadata(&tmp_path).await.is_ok() { @@ -314,7 +312,8 @@ impl RpcContext { tracing::debug!("{:?}", e); } } - self.db + let peek = self + .db .mutate(|v| { for (_, pde) in v.as_package_data_mut().as_entries_mut()? { let status = pde @@ -329,9 +328,49 @@ impl RpcContext { MainStatus::Stopped })?; } + Ok(v.clone()) + }) + .await?; + self.managers.init(self.clone(), peek.clone()).await?; + tracing::info!("Initialized Package Managers"); + + let mut all_dependency_config_errs = BTreeMap::new(); + for (package_id, package) in peek.as_package_data().as_entries()?.into_iter() { + let package = package.clone(); + if let Some(current_dependencies) = package + .as_installed() + .and_then(|x| x.as_current_dependencies().de().ok()) + { + let manifest = package.as_manifest().de()?; + all_dependency_config_errs.insert( + package_id.clone(), + compute_dependency_config_errs( + self, + &peek, + &manifest, + ¤t_dependencies, + &Default::default(), + ) + .await?, + ); + } + } + self.db + .mutate(|v| { + for (package_id, errs) in all_dependency_config_errs { + if let Some(config_errors) = v + .as_package_data_mut() + .as_idx_mut(&package_id) + .and_then(|pde| pde.as_installed_mut()) + .map(|i| i.as_status_mut().as_dependency_config_errors_mut()) + { + config_errors.ser(&errs)?; + } + } Ok(()) }) .await?; + Ok(()) } @@ -389,7 +428,7 @@ impl RpcContext { } impl AsRef for RpcContext { fn as_ref(&self) -> &Jwk { - &*CURRENT_SECRET + &CURRENT_SECRET } } impl Context for RpcContext {} @@ -403,7 +442,7 @@ impl Deref for RpcContext { tracing_error::SpanTrace::capture() ); } - &*self.0 + &self.0 } } impl Drop for RpcContext { diff --git a/backend/src/db/model.rs b/backend/src/db/model.rs index 879feb644..b23a3b149 100644 --- a/backend/src/db/model.rs +++ b/backend/src/db/model.rs @@ -480,6 +480,7 @@ pub struct StaticDependencyInfo { #[serde(rename_all = "kebab-case")] #[model = "Model"] pub struct CurrentDependencyInfo { + #[serde(default)] pub pointers: BTreeSet, pub health_checks: BTreeSet, } diff --git a/backend/src/init.rs b/backend/src/init.rs index 8a5ae2484..3bf8dde64 100644 --- a/backend/src/init.rs +++ b/backend/src/init.rs @@ -200,11 +200,6 @@ pub async fn init(cfg: &RpcContextConfig) -> Result { let account = AccountInfo::load(&secret_store).await?; let db = cfg.db(&account).await?; - db.mutate(|d| { - let model = d.de()?; - d.ser(&model) - }) - .await?; tracing::info!("Opened PatchDB"); let peek = db.peek().await?; let mut server_info = peek.as_server_info().de()?; @@ -375,6 +370,12 @@ pub async fn init(cfg: &RpcContextConfig) -> Result { crate::version::init(&db, &secret_store).await?; + db.mutate(|d| { + let model = d.de()?; + d.ser(&model) + }) + .await?; + if should_rebuild { match tokio::fs::remove_file(SYSTEM_REBUILD_PATH).await { Ok(()) => Ok(()), diff --git a/backend/src/install/mod.rs b/backend/src/install/mod.rs index a85c7c823..4f77ae1fa 100644 --- a/backend/src/install/mod.rs +++ b/backend/src/install/mod.rs @@ -1105,7 +1105,6 @@ pub async fn install_s9pk( status: Status { configured: manifest.config.is_none(), main: MainStatus::Stopped, - dependency_errors: Default::default(), dependency_config_errors: compute_dependency_config_errs( &ctx, &peek, diff --git a/backend/src/status/mod.rs b/backend/src/status/mod.rs index f6290be12..2a5a9391f 100644 --- a/backend/src/status/mod.rs +++ b/backend/src/status/mod.rs @@ -16,8 +16,6 @@ pub struct Status { pub configured: bool, pub main: MainStatus, #[serde(default)] - pub dependency_errors: BTreeMap<(), ()>, // TODO: remove - #[serde(default)] pub dependency_config_errors: DependencyConfigErrors, } diff --git a/backend/src/version/mod.rs b/backend/src/version/mod.rs index e145e324a..efdf1a387 100644 --- a/backend/src/version/mod.rs +++ b/backend/src/version/mod.rs @@ -13,8 +13,9 @@ mod v0_3_4_1; mod v0_3_4_2; mod v0_3_4_3; mod v0_3_4_4; +mod v0_3_5; -pub type Current = v0_3_4_4::Version; +pub type Current = v0_3_5::Version; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone)] #[serde(untagged)] @@ -24,6 +25,7 @@ enum Version { V0_3_4_2(Wrapper), V0_3_4_3(Wrapper), V0_3_4_4(Wrapper), + V0_3_5(Wrapper), Other(emver::Version), } @@ -44,6 +46,7 @@ impl Version { Version::V0_3_4_2(Wrapper(x)) => x.semver(), Version::V0_3_4_3(Wrapper(x)) => x.semver(), Version::V0_3_4_4(Wrapper(x)) => x.semver(), + Version::V0_3_5(Wrapper(x)) => x.semver(), Version::Other(x) => x.clone(), } } @@ -168,6 +171,7 @@ pub async fn init(db: &PatchDb, secrets: &PgPool) -> Result<(), Error> { Version::V0_3_4_2(v) => v.0.migrate_to(&Current::new(), db.clone(), secrets).await?, Version::V0_3_4_3(v) => v.0.migrate_to(&Current::new(), db.clone(), secrets).await?, Version::V0_3_4_4(v) => v.0.migrate_to(&Current::new(), db.clone(), secrets).await?, + Version::V0_3_5(v) => v.0.migrate_to(&Current::new(), db.clone(), secrets).await?, Version::Other(_) => { return Err(Error::new( eyre!("Cannot downgrade"), diff --git a/backend/src/version/v0_3_5.rs b/backend/src/version/v0_3_5.rs new file mode 100644 index 000000000..e3a142470 --- /dev/null +++ b/backend/src/version/v0_3_5.rs @@ -0,0 +1,98 @@ +use std::collections::BTreeMap; +use std::path::Path; + +use async_trait::async_trait; +use emver::VersionRange; +use models::DataUrl; +use sqlx::PgPool; + +use super::v0_3_4::V0_3_0_COMPAT; +use super::{v0_3_4_4, VersionT}; +use crate::prelude::*; + +const V0_3_5: emver::Version = emver::Version::new(0, 3, 5, 0); + +#[derive(Clone, Debug)] +pub struct Version; + +#[async_trait] +impl VersionT for Version { + type Previous = v0_3_4_4::Version; + fn new() -> Self { + Version + } + fn semver(&self) -> emver::Version { + V0_3_5 + } + fn compat(&self) -> &'static VersionRange { + &V0_3_0_COMPAT + } + async fn up(&self, db: PatchDb, _secrets: &PgPool) -> Result<(), Error> { + let peek = db.peek().await?; + let mut url_replacements = BTreeMap::new(); + for (_, pde) in peek.as_package_data().as_entries()? { + for (dependency, info) in pde + .as_installed() + .map(|i| i.as_dependency_info().as_entries()) + .transpose()? + .into_iter() + .flatten() + { + if !url_replacements.contains_key(&dependency) { + url_replacements.insert( + dependency, + DataUrl::from_path( + <&Value>::from(info.as_icon()) + .as_str() + .and_then(|i| i.strip_prefix("/public/package-data/")) + .map(|path| { + Path::new("/embassy-data/package-data/public").join(path) + }) + .unwrap_or_default(), + ) + .await + .unwrap_or_else(|_| { + DataUrl::from_slice( + "image/png", + include_bytes!("../install/package-icon.png"), + ) + }), + ); + } + } + } + db.mutate(|v| { + for (_, pde) in v.as_package_data_mut().as_entries_mut()? { + for (dependency, info) in pde + .as_installed_mut() + .map(|i| i.as_dependency_info_mut().as_entries_mut()) + .transpose()? + .into_iter() + .flatten() + { + if let Some(url) = url_replacements.get(&dependency) { + info.as_icon_mut().ser(url)?; + } + let manifest = <&mut Value>::from(&mut *info) + .as_object_mut() + .and_then(|o| o.remove("manifest")); + if let Some(title) = manifest + .as_ref() + .and_then(|m| m.as_object()) + .and_then(|m| m.get("title")) + .and_then(|t| t.as_str()) + .map(|s| s.to_owned()) + { + info.as_title_mut().ser(&title)?; + } + } + } + Ok(()) + }) + .await?; + Ok(()) + } + async fn down(&self, _db: PatchDb, _secrets: &PgPool) -> Result<(), Error> { + Ok(()) + } +} diff --git a/frontend/projects/ui/src/app/pages/apps-routes/app-show/app-show.page.ts b/frontend/projects/ui/src/app/pages/apps-routes/app-show/app-show.page.ts index 0a82d89b9..4257f916d 100644 --- a/frontend/projects/ui/src/app/pages/apps-routes/app-show/app-show.page.ts +++ b/frontend/projects/ui/src/app/pages/apps-routes/app-show/app-show.page.ts @@ -120,7 +120,7 @@ export class AppShowPage { return { id: depId, version: pkgInstalled.manifest.dependencies[depId].version, // do we want this version range? - title: depInfo?.manifest?.title || depId, + title: depInfo?.title || depId, icon: depInfo?.icon || '', errorText: errorText ? `${errorText}. ${pkgInstalled.manifest.title} will not work as expected.` diff --git a/frontend/projects/ui/src/app/services/api/api.fixures.ts b/frontend/projects/ui/src/app/services/api/api.fixures.ts index 7d447573b..e6ca7e07f 100644 --- a/frontend/projects/ui/src/app/services/api/api.fixures.ts +++ b/frontend/projects/ui/src/app/services/api/api.fixures.ts @@ -1958,7 +1958,7 @@ export module Mock { }, 'dependency-info': { bitcoind: { - manifest: Mock.MockManifestBitcoind, + title: Mock.MockManifestBitcoind.title, icon: 'assets/img/service-icons/bitcoind.svg', }, }, @@ -2012,11 +2012,11 @@ export module Mock { }, 'dependency-info': { bitcoind: { - manifest: Mock.MockManifestBitcoind, + title: Mock.MockManifestBitcoind.title, icon: 'assets/img/service-icons/bitcoind.svg', }, 'btc-rpc-proxy': { - manifest: Mock.MockManifestBitcoinProxy, + title: Mock.MockManifestBitcoinProxy.title, icon: 'assets/img/service-icons/btc-rpc-proxy.png', }, }, diff --git a/frontend/projects/ui/src/app/services/api/mock-patch.ts b/frontend/projects/ui/src/app/services/api/mock-patch.ts index 6cf5fa7e1..4672efaa0 100644 --- a/frontend/projects/ui/src/app/services/api/mock-patch.ts +++ b/frontend/projects/ui/src/app/services/api/mock-patch.ts @@ -664,15 +664,11 @@ export const mockPatchData: DataModel = { }, 'dependency-info': { bitcoind: { - manifest: { - title: 'Bitcoin Core', - } as Manifest, + title: 'Bitcoin Core', icon: 'assets/img/service-icons/bitcoind.svg', }, 'btc-rpc-proxy': { - manifest: { - title: 'Bitcoin Proxy', - } as Manifest, + title: 'Bitcoin Proxy', icon: 'assets/img/service-icons/btc-rpc-proxy.png', }, }, diff --git a/frontend/projects/ui/src/app/services/patch-db/data-model.ts b/frontend/projects/ui/src/app/services/patch-db/data-model.ts index 554a0dc30..b175d89ca 100644 --- a/frontend/projects/ui/src/app/services/patch-db/data-model.ts +++ b/frontend/projects/ui/src/app/services/patch-db/data-model.ts @@ -132,7 +132,7 @@ export interface InstalledPackageDataEntry { 'current-dependencies': { [id: string]: CurrentDependencyInfo } 'dependency-info': { [id: string]: { - manifest: Manifest + title: string icon: Url } } From 1e6f583431b68cb795338984c62954bb6bb6d485 Mon Sep 17 00:00:00 2001 From: Matt Hill Date: Fri, 29 Sep 2023 14:36:40 -0600 Subject: [PATCH 03/38] only emit when things change (#2428) * only emit when things change * remove log * remove test call * more efficient, thanks BluJ * point free --- frontend/package-lock.json | 54 +++++++++++++++++-- frontend/package.json | 1 + .../apps-routes/app-list/app-list.page.html | 2 +- .../apps-routes/app-list/package-info.pipe.ts | 17 +++--- .../apps-routes/app-show/app-show.page.ts | 21 ++++---- .../built-in/health/health.component.ts | 49 +++++++++-------- .../ui/src/app/services/dep-error.service.ts | 37 +++++++++---- .../services/pkg-status-rendering.service.ts | 14 ++--- .../ui/src/app/util/get-package-info.ts | 4 +- 9 files changed, 127 insertions(+), 72 deletions(-) diff --git a/frontend/package-lock.json b/frontend/package-lock.json index 9553271bc..fceedfaec 100644 --- a/frontend/package-lock.json +++ b/frontend/package-lock.json @@ -37,6 +37,7 @@ "cbor-web": "^8.1.0", "core-js": "^3.21.1", "dompurify": "^2.3.6", + "fast-deep-equal": "^3.1.3", "fast-json-patch": "^3.1.1", "fuse.js": "^6.4.6", "jose": "^4.9.0", @@ -7512,6 +7513,20 @@ "clone": "^1.0.2" } }, + "node_modules/define-data-property": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.0.tgz", + "integrity": "sha512-UzGwzcjyv3OtAvolTj1GoyNYzfFR+iqbGjcnBEENZVCpM4/Ng1yhGNvS3lR/xDS74Tb2wGG9WzNSNIOS9UVb2g==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.2.1", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/define-lazy-prop": { "version": "2.0.0", "devOptional": true, @@ -7521,10 +7536,12 @@ } }, "node_modules/define-properties": { - "version": "1.1.4", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", + "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", "dev": true, - "license": "MIT", "dependencies": { + "define-data-property": "^1.0.1", "has-property-descriptors": "^1.0.0", "object-keys": "^1.1.1" }, @@ -8208,7 +8225,8 @@ }, "node_modules/fast-deep-equal": { "version": "3.1.3", - "license": "MIT" + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" }, "node_modules/fast-glob": { "version": "3.2.12", @@ -8560,12 +8578,14 @@ } }, "node_modules/get-intrinsic": { - "version": "1.1.3", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.1.tgz", + "integrity": "sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==", "dev": true, - "license": "MIT", "dependencies": { "function-bind": "^1.1.1", "has": "^1.0.3", + "has-proto": "^1.0.1", "has-symbols": "^1.0.3" }, "funding": { @@ -8704,6 +8724,18 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/gopd": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", + "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.1.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/graceful-fs": { "version": "4.2.10", "devOptional": true, @@ -8758,6 +8790,18 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/has-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", + "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/has-symbols": { "version": "1.0.3", "dev": true, diff --git a/frontend/package.json b/frontend/package.json index 3b03dd26f..2e2beb413 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -62,6 +62,7 @@ "cbor-web": "^8.1.0", "core-js": "^3.21.1", "dompurify": "^2.3.6", + "fast-deep-equal": "^3.1.3", "fast-json-patch": "^3.1.1", "fuse.js": "^6.4.6", "jose": "^4.9.0", diff --git a/frontend/projects/ui/src/app/pages/apps-routes/app-list/app-list.page.html b/frontend/projects/ui/src/app/pages/apps-routes/app-list/app-list.page.html index 05e4a76cf..3bc38f762 100644 --- a/frontend/projects/ui/src/app/pages/apps-routes/app-list/app-list.page.html +++ b/frontend/projects/ui/src/app/pages/apps-routes/app-list/app-list.page.html @@ -27,7 +27,7 @@ sizeMd="6" > diff --git a/frontend/projects/ui/src/app/pages/apps-routes/app-list/package-info.pipe.ts b/frontend/projects/ui/src/app/pages/apps-routes/app-list/package-info.pipe.ts index 103845620..df48680af 100644 --- a/frontend/projects/ui/src/app/pages/apps-routes/app-list/package-info.pipe.ts +++ b/frontend/projects/ui/src/app/pages/apps-routes/app-list/package-info.pipe.ts @@ -1,10 +1,7 @@ import { Pipe, PipeTransform } from '@angular/core' -import { Observable, combineLatest } from 'rxjs' -import { filter, map, startWith } from 'rxjs/operators' -import { - DataModel, - PackageDataEntry, -} from 'src/app/services/patch-db/data-model' +import { Observable, combineLatest, firstValueFrom } from 'rxjs' +import { map } from 'rxjs/operators' +import { DataModel } from 'src/app/services/patch-db/data-model' import { getPackageInfo, PkgInfo } from '../../../util/get-package-info' import { PatchDB } from 'patch-db-client' import { DepErrorService } from 'src/app/services/dep-error.service' @@ -18,12 +15,10 @@ export class PackageInfoPipe implements PipeTransform { private readonly depErrorService: DepErrorService, ) {} - transform(pkg: PackageDataEntry): Observable { + transform(pkgId: string): Observable { return combineLatest([ - this.patch - .watch$('package-data', pkg.manifest.id) - .pipe(filter(Boolean), startWith(pkg)), - this.depErrorService.depErrors$, + this.patch.watch$('package-data', pkgId), + this.depErrorService.getPkgDepErrors$(pkgId), ]).pipe(map(([pkg, depErrors]) => getPackageInfo(pkg, depErrors))) } } diff --git a/frontend/projects/ui/src/app/pages/apps-routes/app-show/app-show.page.ts b/frontend/projects/ui/src/app/pages/apps-routes/app-show/app-show.page.ts index 4257f916d..19b29c1f6 100644 --- a/frontend/projects/ui/src/app/pages/apps-routes/app-show/app-show.page.ts +++ b/frontend/projects/ui/src/app/pages/apps-routes/app-show/app-show.page.ts @@ -21,7 +21,7 @@ import { DependentInfo } from 'src/app/types/dependent-info' import { DepErrorService, DependencyErrorType, - PackageDependencyErrors, + PkgDependencyErrors, } from 'src/app/services/dep-error.service' import { combineLatest } from 'rxjs' @@ -50,15 +50,14 @@ export class AppShowPage { private readonly pkgId = getPkgId(this.route) readonly pkgPlus$ = combineLatest([ - this.patch.watch$('package-data'), - this.depErrorService.depErrors$, + this.patch.watch$('package-data', this.pkgId), + this.depErrorService.getPkgDepErrors$(this.pkgId), ]).pipe( - tap(([pkgs, _]) => { + tap(([pkg, _]) => { // if package disappears, navigate to list page - if (!pkgs[this.pkgId]) this.navCtrl.navigateRoot('/services') + if (!pkg) this.navCtrl.navigateRoot('/services') }), - map(([pkgs, depErrors]) => { - const pkg = pkgs[this.pkgId] + map(([pkg, depErrors]) => { return { pkg, dependencies: this.getDepInfo(pkg, depErrors), @@ -93,7 +92,7 @@ export class AppShowPage { private getDepInfo( pkg: PackageDataEntry, - depErrors: PackageDependencyErrors, + depErrors: PkgDependencyErrors, ): DependencyInfo[] { const pkgInstalled = pkg.installed @@ -107,7 +106,7 @@ export class AppShowPage { private getDepValues( pkgInstalled: InstalledPackageDataEntry, depId: string, - depErrors: PackageDependencyErrors, + depErrors: PkgDependencyErrors, ): DependencyInfo { const { errorText, fixText, fixAction } = this.getDepErrors( pkgInstalled, @@ -134,10 +133,10 @@ export class AppShowPage { private getDepErrors( pkgInstalled: InstalledPackageDataEntry, depId: string, - depErrors: PackageDependencyErrors, + depErrors: PkgDependencyErrors, ) { const pkgManifest = pkgInstalled.manifest - const depError = depErrors[pkgInstalled.manifest.id][depId] + const depError = depErrors[depId] let errorText: string | null = null let fixText: string | null = null diff --git a/frontend/projects/ui/src/app/pages/widgets/built-in/health/health.component.ts b/frontend/projects/ui/src/app/pages/widgets/built-in/health/health.component.ts index f69a0407b..e4f456c01 100644 --- a/frontend/projects/ui/src/app/pages/widgets/built-in/health/health.component.ts +++ b/frontend/projects/ui/src/app/pages/widgets/built-in/health/health.component.ts @@ -7,6 +7,8 @@ import { } from 'src/app/services/patch-db/data-model' import { PrimaryStatus } from 'src/app/services/pkg-status-rendering.service' import { getPackageInfo, PkgInfo } from '../../../../util/get-package-info' +import { combineLatest } from 'rxjs' +import { DepErrorService } from 'src/app/services/dep-error.service' @Component({ selector: 'widget-health', @@ -23,31 +25,32 @@ export class HealthComponent { 'Transitioning', ] as const - readonly data$ = inject(PatchDB) - .watch$('package-data') - .pipe( - map(data => { - const pkgs = Object.values(data).map( - pkg => getPackageInfo(pkg, {}), // @TODO hack because not currently using widget - ) - const result = this.labels.reduce>( - (acc, label) => ({ - ...acc, - [label]: this.getCount(label, pkgs), - }), - {}, - ) + readonly data$ = combineLatest([ + inject(PatchDB).watch$('package-data'), + inject(DepErrorService).depErrors$, + ]).pipe( + map(([data, depErrors]) => { + const pkgs = Object.values(data).map(pkg => + getPackageInfo(pkg, depErrors[pkg.manifest.id]), + ) + const result = this.labels.reduce>( + (acc, label) => ({ + ...acc, + [label]: this.getCount(label, pkgs), + }), + {}, + ) - result['Healthy'] = - pkgs.length - - result['Error'] - - result['Needs Attention'] - - result['Stopped'] - - result['Transitioning'] + result['Healthy'] = + pkgs.length - + result['Error'] - + result['Needs Attention'] - + result['Stopped'] - + result['Transitioning'] - return this.labels.map(label => result[label]) - }), - ) + return this.labels.map(label => result[label]) + }), + ) private getCount(label: string, pkgs: PkgInfo[]): number { switch (label) { diff --git a/frontend/projects/ui/src/app/services/dep-error.service.ts b/frontend/projects/ui/src/app/services/dep-error.service.ts index 733b0a377..1b1880f72 100644 --- a/frontend/projects/ui/src/app/services/dep-error.service.ts +++ b/frontend/projects/ui/src/app/services/dep-error.service.ts @@ -1,6 +1,14 @@ import { Injectable } from '@angular/core' import { Emver } from '@start9labs/shared' -import { map, shareReplay } from 'rxjs/operators' +import { + distinctUntilChanged, + filter, + map, + pairwise, + shareReplay, + startWith, + tap, +} from 'rxjs/operators' import { PatchDB } from 'patch-db-client' import { DataModel, @@ -9,9 +17,10 @@ import { InstalledPackageDataEntry, PackageMainStatus, } from './patch-db/data-model' +import * as deepEqual from 'fast-deep-equal' -export type PackageDependencyErrors = Record -export type DependencyErrors = Record +export type AllDependencyErrors = Record +export type PkgDependencyErrors = Record @Injectable({ providedIn: 'root', @@ -26,13 +35,14 @@ export class DepErrorService { })) .sort((a, b) => (b.depth > a.depth ? -1 : 1)) .reduce( - (errors, { id }): PackageDependencyErrors => ({ + (errors, { id }): AllDependencyErrors => ({ ...errors, [id]: this.getDepErrors(pkgs, id, errors), }), - {} as PackageDependencyErrors, + {} as AllDependencyErrors, ), ), + distinctUntilChanged(deepEqual), shareReplay(1), ) @@ -41,21 +51,28 @@ export class DepErrorService { private readonly patch: PatchDB, ) {} + getPkgDepErrors$(pkgId: string) { + return this.depErrors$.pipe( + map(depErrors => depErrors[pkgId]), + distinctUntilChanged(deepEqual), + ) + } + private getDepErrors( pkgs: DataModel['package-data'], pkgId: string, - outerErrors: PackageDependencyErrors, - ): DependencyErrors { + outerErrors: AllDependencyErrors, + ): PkgDependencyErrors { const pkgInstalled = pkgs[pkgId].installed if (!pkgInstalled) return {} return currentDeps(pkgs, pkgId).reduce( - (innerErrors, depId): DependencyErrors => ({ + (innerErrors, depId): PkgDependencyErrors => ({ ...innerErrors, [depId]: this.getDepError(pkgs, pkgInstalled, depId, outerErrors), }), - {} as DependencyErrors, + {} as PkgDependencyErrors, ) } @@ -63,7 +80,7 @@ export class DepErrorService { pkgs: DataModel['package-data'], pkgInstalled: InstalledPackageDataEntry, depId: string, - outerErrors: PackageDependencyErrors, + outerErrors: AllDependencyErrors, ): DependencyError | null { const depInstalled = pkgs[depId]?.installed diff --git a/frontend/projects/ui/src/app/services/pkg-status-rendering.service.ts b/frontend/projects/ui/src/app/services/pkg-status-rendering.service.ts index ce415bcbd..28c58a809 100644 --- a/frontend/projects/ui/src/app/services/pkg-status-rendering.service.ts +++ b/frontend/projects/ui/src/app/services/pkg-status-rendering.service.ts @@ -1,13 +1,12 @@ import { isEmptyObject } from '@start9labs/shared' import { - InstalledPackageDataEntry, MainStatusStarting, PackageDataEntry, PackageMainStatus, PackageState, Status, } from 'src/app/services/patch-db/data-model' -import { PackageDependencyErrors } from './dep-error.service' +import { PkgDependencyErrors } from './dep-error.service' export interface PackageStatus { primary: PrimaryStatus @@ -17,7 +16,7 @@ export interface PackageStatus { export function renderPkgStatus( pkg: PackageDataEntry, - depErrors: PackageDependencyErrors, + depErrors: PkgDependencyErrors, ): PackageStatus { let primary: PrimaryStatus let dependency: DependencyStatus | null = null @@ -25,7 +24,7 @@ export function renderPkgStatus( if (pkg.state === PackageState.Installed && pkg.installed) { primary = getPrimaryStatus(pkg.installed.status) - dependency = getDependencyStatus(pkg.installed, depErrors) + dependency = getDependencyStatus(depErrors) health = getHealthStatus( pkg.installed.status, !isEmptyObject(pkg.manifest['health-checks']), @@ -47,11 +46,8 @@ function getPrimaryStatus(status: Status): PrimaryStatus { } } -function getDependencyStatus( - pkg: InstalledPackageDataEntry, - depErrors: PackageDependencyErrors, -): DependencyStatus { - return Object.values(depErrors[pkg.manifest.id]).some(err => !!err) +function getDependencyStatus(depErrors: PkgDependencyErrors): DependencyStatus { + return Object.values(depErrors).some(err => !!err) ? DependencyStatus.Warning : DependencyStatus.Satisfied } diff --git a/frontend/projects/ui/src/app/util/get-package-info.ts b/frontend/projects/ui/src/app/util/get-package-info.ts index f98d969fb..14901f201 100644 --- a/frontend/projects/ui/src/app/util/get-package-info.ts +++ b/frontend/projects/ui/src/app/util/get-package-info.ts @@ -10,11 +10,11 @@ import { import { ProgressData } from 'src/app/types/progress-data' import { Subscription } from 'rxjs' import { packageLoadingProgress } from './package-loading-progress' -import { PackageDependencyErrors } from '../services/dep-error.service' +import { PkgDependencyErrors } from '../services/dep-error.service' export function getPackageInfo( entry: PackageDataEntry, - depErrors: PackageDependencyErrors, + depErrors: PkgDependencyErrors, ): PkgInfo { const statuses = renderPkgStatus(entry, depErrors) const primaryRendering = PrimaryRendering[statuses.primary] From 33a67bf7b47ee2563a51dac0149a163bc8aa9db9 Mon Sep 17 00:00:00 2001 From: Matt Hill Date: Fri, 29 Sep 2023 16:32:10 -0600 Subject: [PATCH 04/38] bump FE version and release notes (#2429) * bump FE version and release notes * change cargo.toml version --------- Co-authored-by: Aiden McClelland --- backend/Cargo.lock | 2 +- backend/Cargo.toml | 2 +- frontend/package-lock.json | 4 +- frontend/package.json | 2 +- frontend/patchdb-ui-seed.json | 2 +- .../modals/os-welcome/os-welcome.page.html | 100 ++---------------- .../ui/src/app/services/api/api.fixures.ts | 3 +- .../ui/src/app/services/api/mock-patch.ts | 2 +- system-images/compat/Cargo.lock | 2 +- 9 files changed, 20 insertions(+), 99 deletions(-) diff --git a/backend/Cargo.lock b/backend/Cargo.lock index 5a65c699f..b72396e65 100644 --- a/backend/Cargo.lock +++ b/backend/Cargo.lock @@ -4569,7 +4569,7 @@ dependencies = [ [[package]] name = "start-os" -version = "0.3.4-rev.4" +version = "0.3.5" dependencies = [ "aes", "async-compression", diff --git a/backend/Cargo.toml b/backend/Cargo.toml index 5501769a7..20e4473a6 100644 --- a/backend/Cargo.toml +++ b/backend/Cargo.toml @@ -14,7 +14,7 @@ keywords = [ name = "start-os" readme = "README.md" repository = "https://github.com/Start9Labs/start-os" -version = "0.3.4-rev.4" +version = "0.3.5" [lib] name = "startos" diff --git a/frontend/package-lock.json b/frontend/package-lock.json index fceedfaec..5e2a730fe 100644 --- a/frontend/package-lock.json +++ b/frontend/package-lock.json @@ -1,12 +1,12 @@ { "name": "startos-ui", - "version": "0.3.4.4", + "version": "0.3.5", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "startos-ui", - "version": "0.3.4.4", + "version": "0.3.5", "dependencies": { "@angular/animations": "^14.1.0", "@angular/common": "^14.1.0", diff --git a/frontend/package.json b/frontend/package.json index 2e2beb413..28e90e9a8 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -1,6 +1,6 @@ { "name": "startos-ui", - "version": "0.3.4.4", + "version": "0.3.5", "author": "Start9 Labs, Inc", "homepage": "https://start9.com/", "scripts": { diff --git a/frontend/patchdb-ui-seed.json b/frontend/patchdb-ui-seed.json index 88328e827..5e31b198b 100644 --- a/frontend/patchdb-ui-seed.json +++ b/frontend/patchdb-ui-seed.json @@ -1,6 +1,6 @@ { "name": null, - "ack-welcome": "0.3.4.4", + "ack-welcome": "0.3.5", "marketplace": { "selected-url": "https://registry.start9.com/", "known-hosts": { diff --git a/frontend/projects/ui/src/app/modals/os-welcome/os-welcome.page.html b/frontend/projects/ui/src/app/modals/os-welcome/os-welcome.page.html index cd0c93507..d539886a1 100644 --- a/frontend/projects/ui/src/app/modals/os-welcome/os-welcome.page.html +++ b/frontend/projects/ui/src/app/modals/os-welcome/os-welcome.page.html @@ -12,11 +12,11 @@

This Release

-

0.3.4.4

+

0.3.5

View the complete @@ -26,98 +26,18 @@

Highlights
    -
  • Https over Tor for faster UI loading times
  • -
  • Change password through UI
  • -
  • Use IP address for Network Folder backups
  • - Multiple bug fixes, performance enhancements, and other small features + This release contains significant under-the-hood improvements to + performance and reliability
  • +
  • Ditch Docker, replace with Podman
  • +
  • Remove locking behavior from PatchDB and optimize
  • +
  • Boost efficiency of service manager
  • +
  • Require HTTPS on LAN, and improve setup flow for trusting Root CA
  • +
  • Better default privacy settings for Firefox kiosk mode
  • +
  • Other small bug fixes
-

Previous Releases

- -

0.3.4.3

-

- View the complete - - release notes - - for more details. -

-
Highlights
-
    -
  • Improved Tor reliability
  • -
  • Experimental features tab
  • -
  • Multiple bugfixes and general performance enhancements
  • -
  • Update branding
  • -
- -

0.3.4.2

-

- View the complete - - release notes - - for more details. -

-
Highlights
-
    -
  • Update build system for Server Lite and NUC-based Server One
  • -
  • Rename embassyOS to StartOS
  • -
  • - PWA support for StartOS web interface. You can now save StartOS to your - phone as an app! -
  • -
- -

0.3.4.1

-

- View the complete - - release notes - - for more details. -

-
Highlights
-
    -
  • 0.3.4 bug fixes
  • -
- -

0.3.4

-

- View the complete - - release notes - - for more details. -

-
Highlights
-
    -
  • Security patches
  • -
  • Bug fixes
  • -
  • Breakout services to Community Registry
  • -
  • SSL support for IP access
  • -
  • UI display improvements
  • -
  • Better logs
  • -
  • New system metrics
  • -
  • EFI support
  • -
Date: Sat, 30 Sep 2023 00:32:15 +0000 Subject: [PATCH 05/38] Shore up Firefox kiosk mode (#2422) * Shore up Firefox kiosk mode * Bash shell for kiosk user * enable-kiosk script final-ish touches * make script idempotent --------- Co-authored-by: Aiden McClelland --- build/lib/scripts/enable-kiosk | 92 +++++++++++++++++++++++----------- 1 file changed, 63 insertions(+), 29 deletions(-) diff --git a/build/lib/scripts/enable-kiosk b/build/lib/scripts/enable-kiosk index 3e6d0992d..d07fc29b3 100755 --- a/build/lib/scripts/enable-kiosk +++ b/build/lib/scripts/enable-kiosk @@ -6,35 +6,79 @@ set -e /usr/bin/apt update /usr/bin/apt install --no-install-recommends -y xserver-xorg x11-xserver-utils xinit firefox-esr matchbox-window-manager libnss3-tools +#Change a default preference set by stock debian firefox-esr +sed -i 's|^pref("extensions.update.enabled", true);$|pref("extensions.update.enabled", false);|' /etc/firefox-esr/firefox-esr.js + +if ! id kiosk; then + # create kiosk user + useradd -s /bin/bash --create-home kiosk +fi + # create kiosk script -cat > /home/start9/kiosk.sh << 'EOF' +cat > /home/kiosk/kiosk.sh << 'EOF' #!/bin/sh PROFILE=$(mktemp -d) if [ -f /usr/local/share/ca-certificates/startos-root-ca.crt ]; then certutil -A -n "StartOS Local Root CA" -t "TCu,Cuw,Tuw" -i /usr/local/share/ca-certificates/startos-root-ca.crt -d $PROFILE fi cat >> $PROFILE/prefs.js << EOT -user_pref("network.proxy.autoconfig_url", "file:///usr/lib/embassy/proxy.pac"); -user_pref("network.proxy.socks_remote_dns", true); -user_pref("network.proxy.type", 2); -user_pref("dom.securecontext.allowlist_onions", true); -user_pref("dom.securecontext.whitelist_onions", true); -user_pref("signon.rememberSignons", false); -user_pref("extensions.activeThemeID", "firefox-compact-dark@mozilla.org"); -user_pref("browser.theme.content-theme", 0); -user_pref("browser.theme.toolbar-theme", 0); -user_pref("datareporting.policy.firstRunURL", ""); +user_pref("app.normandy.api_url", ""); +user_pref("app.normandy.enabled", false); +user_pref("app.shield.optoutstudies.enabled", false); +user_pref("app.update.enabled", false); +user_pref("browser.aboutHomeSnippets.updateUrl", ""); +user_pref("browser.bookmarks.addedImportButton", false); +user_pref("browser.casting.enabled", false); +user_pref("browser.crashReports.unsubmittedCheck.autoSubmit2", false); +user_pref("browser.newtabpage.activity-stream.feeds.asrouterfeed", false); +user_pref("browser.newtabpage.activity-stream.feeds.topsites", false); +user_pref("browser.newtabpage.activity-stream.showSponsoredTopSites", false); +user_pref("browser.onboarding.enabled", false); +user_pref("browser.ping-centre.telemetry", false); +user_pref("browser.pocket.enabled", false); +user_pref("browser.safebrowsing.blockedURIs.enabled", false); user_pref("browser.safebrowsing.malware.enabled", false); user_pref("browser.safebrowsing.phishing.enabled", false); +user_pref("browser.safebrowsing.downloads.remote.block_potentially_unwanted", false); +user_pref("browser.safebrowsing.downloads.remote.block_uncommon", false); +user_pref("browser.safebrowsing.downloads.remote.enabled", false); +user_pref("browser.search.geoip.url", ""); +user_pref("browser.search.update", false); +user_pref("browser.search.suggest.enabled", false); +user_pref("browser.startup.homepage_override.mstone", "ignore"); +user_pref("browser.theme.content-theme", 0); +user_pref("browser.theme.toolbar-theme", 0); +user_pref("browser.urlbar.groupLabels.enabled", false); +user_pref("browser.urlbar.suggest.searches" false); +user_pref("datareporting.policy.firstRunURL", ""); user_pref("datareporting.healthreport.service.enabled", false); user_pref("datareporting.healthreport.uploadEnabled", false); user_pref("datareporting.policy.dataSubmissionEnabled", false); -user_pref("datareporting.policy.dataSubmissionEnabled", false); -user_pref("browser.crashReports.unsubmittedCheck.autoSubmit2", false); -user_pref("browser.ping-centre.telemetry", false); -user_pref("browser.onboarding.enabled", false); +user_pref("dom.securecontext.allowlist_onions", true); +user_pref("dom.securecontext.whitelist_onions", true); +user_pref("experiments.enabled", false); +user_pref("experiments.activeExperiment", false); +user_pref("experiments.supported", false); +user_pref("extensions.activeThemeID", "firefox-compact-dark@mozilla.org"); +user_pref("extensions.blocklist.enabled", false); +user_pref("extensions.getAddons.cache.enabled", false); +user_pref("extensions.pocket.enabled", false); +user_pref("extensions.update.enabled", false); +user_pref("extensions.shield-recipe-client.enabled", false); +user_pref("extensions.shield-recipe-client.user_id", ""); +user_pref("extensions.shield-recipe-client.api_url", ""); +user_pref("media.gmp-gmpopenh264.enabled", false); +user_pref("messaging-system.rsexperimentloader.enabled", false); +user_pref("network.allow-experiments", false); +user_pref("network.captive-portal-service.enabled", false); +user_pref("network.connectivity-service.enabled", false); +user_pref("network.proxy.autoconfig_url", "file:///usr/lib/embassy/proxy.pac"); +user_pref("network.proxy.socks_remote_dns", true); +user_pref("network.proxy.type", 2); +user_pref("signon.rememberSignons", false); user_pref("toolkit.telemetry.archive.enabled", false); user_pref("toolkit.telemetry.bhrPing.enabled", false); +user_pref("toolkit.telemetry.coverage.opt-out", true); user_pref("toolkit.telemetry.enabled", false); user_pref("toolkit.telemetry.firstShutdownPing.enabled", false); user_pref("toolkit.telemetry.newProfilePing.enabled", false); @@ -43,16 +87,6 @@ user_pref("toolkit.telemetry.shutdownPingSender.enabled", false); user_pref("toolkit.telemetry.unified", false); user_pref("toolkit.telemetry.updatePing.enabled", false); user_pref("toolkit.telemetry.cachedClientID", ""); -user_pref("experiments.enabled", false); -user_pref("experiments.activeExperiment", false); -user_pref("experiments.supported", false); -user_pref("network.allow-experiments", false); -user_pref("extensions.shield-recipe-client.enabled", false); -user_pref("extensions.shield-recipe-client.user_id", ""); -user_pref("extensions.shield-recipe-client.api_url", ""); -user_pref("app.normandy.enabled", false); -user_pref("app.normandy.api_url", ""); -user_pref("app.shield.optoutstudies.enabled", true); EOT while ! curl "http://localhost" > /dev/null; do sleep 1 @@ -70,11 +104,11 @@ matchbox-window-manager -use_titlebar no & firefox-esr http://localhost --profile $PROFILE rm -rf $PROFILE EOF -chmod +x /home/start9/kiosk.sh +chmod +x /home/kiosk/kiosk.sh # use kiosk if tty (not pts) -if ! grep -q 'kiosk' /home/start9/.profile; then -cat >> /home/start9/.profile << 'EOF' +if ! grep -q 'kiosk' /home/kiosk/.profile; then +cat >> /home/kiosk/.profile << 'EOF' # Use kiosk for TTY if [[ "$(tty)" =~ ^/dev/tty ]]; then exec startx "$HOME/kiosk.sh" @@ -87,7 +121,7 @@ mkdir -p /etc/systemd/system/getty@tty1.service.d cat > /etc/systemd/system/getty@tty1.service.d/autologin.conf << 'EOF' [Service] ExecStart= -ExecStart=-/sbin/agetty --autologin start9 --noclear %I $TERM +ExecStart=-/sbin/agetty --autologin kiosk --noclear %I $TERM EOF ln -fs /etc/systemd/system/autologin@.service /etc/systemd/system/getty.target.wants/getty@tty1.service From a110e8f2416745009dfb65902cfa3087d9ae1c99 Mon Sep 17 00:00:00 2001 From: Aiden McClelland Date: Mon, 2 Oct 2023 10:02:40 -0600 Subject: [PATCH 06/38] make migration more resilient --- backend/src/version/v0_3_5.rs | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/backend/src/version/v0_3_5.rs b/backend/src/version/v0_3_5.rs index e3a142470..19a85a345 100644 --- a/backend/src/version/v0_3_5.rs +++ b/backend/src/version/v0_3_5.rs @@ -72,6 +72,11 @@ impl VersionT for Version { { if let Some(url) = url_replacements.get(&dependency) { info.as_icon_mut().ser(url)?; + } else { + info.as_icon_mut().ser(&DataUrl::from_slice( + "image/png", + include_bytes!("../install/package-icon.png"), + ))?; } let manifest = <&mut Value>::from(&mut *info) .as_object_mut() @@ -84,6 +89,8 @@ impl VersionT for Version { .map(|s| s.to_owned()) { info.as_title_mut().ser(&title)?; + } else { + info.as_title_mut().ser(&dependency.to_string())?; } } } From 0ffa9167da13ecaa398cd8738f0abc4c65ca90cf Mon Sep 17 00:00:00 2001 From: J H <2364004+Blu-J@users.noreply.github.com> Date: Mon, 2 Oct 2023 15:15:24 -0600 Subject: [PATCH 07/38] feat: Add in the ssl_size (#2432) * feat: Add in the ssl_size * chore: Changes for the naming and other things. --- backend/src/net/mod.rs | 2 +- backend/src/net/ssl.rs | 21 ++++++++++++++++++++- 2 files changed, 21 insertions(+), 2 deletions(-) diff --git a/backend/src/net/mod.rs b/backend/src/net/mod.rs index 02788f018..0b98c439a 100644 --- a/backend/src/net/mod.rs +++ b/backend/src/net/mod.rs @@ -22,7 +22,7 @@ pub mod wifi; pub const PACKAGE_CERT_PATH: &str = "/var/lib/embassy/ssl"; -#[command(subcommands(tor::tor, dhcp::dhcp))] +#[command(subcommands(tor::tor, dhcp::dhcp, ssl::ssl))] pub fn net() -> Result<(), Error> { Ok(()) } diff --git a/backend/src/net/ssl.rs b/backend/src/net/ssl.rs index 13179da1d..b3cf0ec81 100644 --- a/backend/src/net/ssl.rs +++ b/backend/src/net/ssl.rs @@ -4,6 +4,7 @@ use std::net::IpAddr; use std::path::Path; use std::time::{SystemTime, UNIX_EPOCH}; +use chrono::format; use futures::FutureExt; use openssl::asn1::{Asn1Integer, Asn1Time}; use openssl::bn::{BigNum, MsbOption}; @@ -13,13 +14,18 @@ use openssl::nid::Nid; use openssl::pkey::{PKey, Private}; use openssl::x509::{X509Builder, X509Extension, X509NameBuilder, X509}; use openssl::*; +use rpc_toolkit::command; use tokio::sync::{Mutex, RwLock}; use tracing::instrument; -use crate::account::AccountInfo; use crate::hostname::Hostname; use crate::net::dhcp::ips; use crate::net::keys::{Key, KeyInfo}; +use crate::prelude::*; +use crate::{ + account::AccountInfo, + context::{self, RpcContext}, +}; use crate::{Error, ErrorKind, ResultExt}; static CERTIFICATE_VERSION: i32 = 2; // X509 version 3 is actually encoded as '2' in the cert because fuck you. @@ -414,3 +420,16 @@ pub fn make_leaf_cert( let cert = builder.build(); Ok(cert) } + +#[command(subcommands(size))] +pub async fn ssl() -> Result<(), Error> { + Ok(()) +} + +#[command] +pub async fn size(#[context] ctx: RpcContext) -> Result { + Ok(format!( + "Cert Catch size: {}", + ctx.net_controller.ssl.cert_cache.read().await.len() + )) +} From 0def02f604360705ed4f67aef0cc73e65428ba4b Mon Sep 17 00:00:00 2001 From: Aiden McClelland <3732071+dr-bonez@users.noreply.github.com> Date: Mon, 2 Oct 2023 15:18:39 -0600 Subject: [PATCH 08/38] mount /var/tmp to data drive (#2433) --- backend/src/init.rs | 2 ++ 1 file changed, 2 insertions(+) diff --git a/backend/src/init.rs b/backend/src/init.rs index 3bf8dde64..e74e19720 100644 --- a/backend/src/init.rs +++ b/backend/src/init.rs @@ -263,6 +263,8 @@ pub async fn init(cfg: &RpcContextConfig) -> Result { if tokio::fs::metadata(&tmp_dir).await.is_err() { tokio::fs::create_dir_all(&tmp_dir).await?; } + let tmp_var = cfg.datadir().join(format!("package-data/tmp/var")); + crate::disk::mount::util::bind(&tmp_var, "/var/tmp", false).await?; let tmp_docker = cfg .datadir() .join(format!("package-data/tmp/{CONTAINER_TOOL}")); From dc26d5c0c8e20053c27dc058416b152318433fad Mon Sep 17 00:00:00 2001 From: Aiden McClelland <3732071+dr-bonez@users.noreply.github.com> Date: Mon, 2 Oct 2023 15:50:05 -0600 Subject: [PATCH 09/38] Bugfix/var tmp (#2434) * mount /var/tmp to data drive * clear var tmp on restart --- backend/src/init.rs | 3 +++ 1 file changed, 3 insertions(+) diff --git a/backend/src/init.rs b/backend/src/init.rs index e74e19720..da6c2b8f4 100644 --- a/backend/src/init.rs +++ b/backend/src/init.rs @@ -264,6 +264,9 @@ pub async fn init(cfg: &RpcContextConfig) -> Result { tokio::fs::create_dir_all(&tmp_dir).await?; } let tmp_var = cfg.datadir().join(format!("package-data/tmp/var")); + if tokio::fs::metadata(&tmp_var).await.is_ok() { + tokio::fs::remove_dir_all(&tmp_var).await?; + } crate::disk::mount::util::bind(&tmp_var, "/var/tmp", false).await?; let tmp_docker = cfg .datadir() From 500369ab2b480d2268a69ebfa42a07bc66f34f14 Mon Sep 17 00:00:00 2001 From: Matt Hill Date: Tue, 3 Oct 2023 10:53:29 -0600 Subject: [PATCH 10/38] Update/logos (#2435) * update logos to startos icon * readme too * fix spelling --- README.md | 4 ++-- .../src/app/pages/home/home.page.html | 4 ++-- .../src/app/pages/home/home.page.html | 6 +++--- .../src/app/pages/home/home.page.scss | 4 ---- frontend/projects/shared/assets/img/icon.png | Bin 75599 -> 33304 bytes .../projects/shared/assets/img/icon_pwa.png | Bin 33304 -> 0 bytes .../shared/assets/img/icon_transparent.png | Bin 53685 -> 0 bytes frontend/projects/shared/assets/img/logo.png | Bin 40751 -> 0 bytes .../projects/shared/assets/img/logo_dark.png | Bin 43182 -> 0 bytes .../ui/src/app/app/menu/menu.component.html | 9 ++------- .../ui/src/app/app/menu/menu.component.scss | 3 ++- .../app/preloader/preloader.component.html | 2 -- .../store-icon/store-icon.component.ts | 2 +- .../login/ca-wizard/ca-wizard.component.html | 2 +- .../ui/src/app/pages/login/login.page.html | 2 -- .../ui/src/app/pages/login/login.page.scss | 7 +------ frontend/projects/ui/src/manifest.webmanifest | 2 +- 17 files changed, 15 insertions(+), 32 deletions(-) delete mode 100644 frontend/projects/shared/assets/img/icon_pwa.png delete mode 100644 frontend/projects/shared/assets/img/icon_transparent.png delete mode 100644 frontend/projects/shared/assets/img/logo.png delete mode 100644 frontend/projects/shared/assets/img/logo_dark.png diff --git a/README.md b/README.md index 125a956a4..ecc5f39fe 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,5 @@
- StartOS Logo + StartOS Logo

StartOS

@@ -65,7 +65,7 @@ There are multiple ways to contribute: work directly on StartOS, package a servi To report security issues, please email our security team - security@start9.com. ## 🌎 Marketplace -There are dozens of service available for StartOS, and new ones are being added all the time. Check out the full list of available services [here](https://marketplace.start9.com/marketplace). To read more about the Marketplace ecosystem, check out this [blog post](https://blog.start9.com/start9-marketplace-strategy/) +There are dozens of services available for StartOS, and new ones are being added all the time. Check out the full list of available services [here](https://marketplace.start9.com/marketplace). To read more about the Marketplace ecosystem, check out this [blog post](https://blog.start9.com/start9-marketplace-strategy/) ## 🖥️ User Interface Screenshots diff --git a/frontend/projects/install-wizard/src/app/pages/home/home.page.html b/frontend/projects/install-wizard/src/app/pages/home/home.page.html index d1ebe43b5..5bdaee493 100644 --- a/frontend/projects/install-wizard/src/app/pages/home/home.page.html +++ b/frontend/projects/install-wizard/src/app/pages/home/home.page.html @@ -2,8 +2,8 @@ -
- +
+
diff --git a/frontend/projects/setup-wizard/src/app/pages/home/home.page.html b/frontend/projects/setup-wizard/src/app/pages/home/home.page.html index 3c803bb34..ab517cbcb 100644 --- a/frontend/projects/setup-wizard/src/app/pages/home/home.page.html +++ b/frontend/projects/setup-wizard/src/app/pages/home/home.page.html @@ -4,13 +4,13 @@
- + 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 literal 75599 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 GhW$V3EHnK8 diff --git a/frontend/projects/shared/assets/img/icon_pwa.png b/frontend/projects/shared/assets/img/icon_pwa.png deleted file mode 100644 index c87903911eb152b095debfca04d0d9133311c41d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 33304 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 diff --git a/frontend/projects/shared/assets/img/icon_transparent.png b/frontend/projects/shared/assets/img/icon_transparent.png deleted file mode 100644 index f0aafd15de4c965ad7238b6d89dde4c1124c986f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 53685 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

- StartOS is a Debian-based Linux distro optimized for running a personal server. It facilitates the discovery, installation, network configuration, service configuration, data backup, dependency management, and health monitoring of self-hosted software services. + StartOS is an open source Linux distribution optimized for running a personal server. It facilitates the discovery, installation, network configuration, service configuration, data backup, dependency management, and health monitoring of self-hosted software services.

Zb}SFh5?>QaG-qYO`kM}CLNkCD_iBL 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 K9l#MLAz8BRh_ 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 h|8m*Tn!WYe*h^_s|)}D diff --git a/frontend/projects/shared/assets/img/logo.png b/frontend/projects/shared/assets/img/logo.png deleted file mode 100644 index 029c5c616c15a4bef8bbccd51fecac97d761413e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 40751 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 diff --git a/frontend/projects/shared/assets/img/logo_dark.png b/frontend/projects/shared/assets/img/logo_dark.png deleted file mode 100644 index 318f0b5edf7ae86c894005acf446aaf898f62d79..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 43182 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 diff --git a/frontend/projects/ui/src/app/app/menu/menu.component.scss b/frontend/projects/ui/src/app/app/menu/menu.component.scss index b85269c36..a7c8c762f 100644 --- a/frontend/projects/ui/src/app/app/menu/menu.component.scss +++ b/frontend/projects/ui/src/app/app/menu/menu.component.scss @@ -4,8 +4,9 @@ .logo { display: block; - width: 60%; + width: 36%; margin: 0 auto; + padding: 16px 16px 0 16px; } .menu { diff --git a/frontend/projects/ui/src/app/app/preloader/preloader.component.html b/frontend/projects/ui/src/app/app/preloader/preloader.component.html index 8669831e0..94d6d7107 100644 --- a/frontend/projects/ui/src/app/app/preloader/preloader.component.html +++ b/frontend/projects/ui/src/app/app/preloader/preloader.component.html @@ -60,9 +60,7 @@ - - diff --git a/frontend/projects/ui/src/app/components/store-icon/store-icon.component.ts b/frontend/projects/ui/src/app/components/store-icon/store-icon.component.ts index 076311697..3436a90d4 100644 --- a/frontend/projects/ui/src/app/components/store-icon/store-icon.component.ts +++ b/frontend/projects/ui/src/app/components/store-icon/store-icon.component.ts @@ -31,7 +31,7 @@ export class GetIconPipe implements PipeTransform { const { start9, community } = this.config.marketplace if (sameUrl(url, start9)) { - return 'assets/img/icon_transparent.png' + return 'assets/img/icon.png' } else if (sameUrl(url, community)) { return 'assets/img/community-store.png' } diff --git a/frontend/projects/ui/src/app/pages/login/ca-wizard/ca-wizard.component.html b/frontend/projects/ui/src/app/pages/login/ca-wizard/ca-wizard.component.html index 326eedd33..fb38b58ec 100644 --- a/frontend/projects/ui/src/app/pages/login/ca-wizard/ca-wizard.component.html +++ b/frontend/projects/ui/src/app/pages/login/ca-wizard/ca-wizard.component.html @@ -1,5 +1,5 @@ - + StartOS diff --git a/frontend/projects/ui/src/app/pages/login/login.page.html b/frontend/projects/ui/src/app/pages/login/login.page.html index a61553e44..cfd233caf 100644 --- a/frontend/projects/ui/src/app/pages/login/login.page.html +++ b/frontend/projects/ui/src/app/pages/login/login.page.html @@ -23,8 +23,6 @@ - - StartOS Login diff --git a/frontend/projects/ui/src/app/pages/login/login.page.scss b/frontend/projects/ui/src/app/pages/login/login.page.scss index 27524ee79..d9c9ce375 100644 --- a/frontend/projects/ui/src/app/pages/login/login.page.scss +++ b/frontend/projects/ui/src/app/pages/login/login.page.scss @@ -9,7 +9,7 @@ .title { margin: 24px 0 16px; color: #e0e0e0; - text-transform: uppercase; + font-size: 1.8rem; } .grid { @@ -23,11 +23,6 @@ text-align: center; } -.logo { - max-width: 240px; - padding-bottom: 16px; -} - .error { display: block; text-align: left; diff --git a/frontend/projects/ui/src/manifest.webmanifest b/frontend/projects/ui/src/manifest.webmanifest index 94e6b08f9..9971a98ab 100644 --- a/frontend/projects/ui/src/manifest.webmanifest +++ b/frontend/projects/ui/src/manifest.webmanifest @@ -9,7 +9,7 @@ "id": "/?version=0344", "icons": [ { - "src": "assets/img/icon_pwa.png", + "src": "assets/img/icon.png", "sizes": "256x256", "type": "image/png", "purpose": "any" From a0afd7b8ed5330922ea8d54c5c0c2b43b9e1d210 Mon Sep 17 00:00:00 2001 From: J H <2364004+Blu-J@users.noreply.github.com> Date: Wed, 4 Oct 2023 12:06:43 -0600 Subject: [PATCH 11/38] fixing: Reimplement https://github.com/Start9Labs/start-os/pull/2391 (#2437) * fixing: Reimplement https://github.com/Start9Labs/start-os/pull/2391 * remove the none thing --- backend/src/db/mod.rs | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/backend/src/db/mod.rs b/backend/src/db/mod.rs index 61f434493..245abbb1c 100644 --- a/backend/src/db/mod.rs +++ b/backend/src/db/mod.rs @@ -82,6 +82,8 @@ async fn deal_with_messages( mut sub: patch_db::Subscriber, mut stream: WebSocketStream, ) -> Result<(), Error> { + let mut timer = tokio::time::interval(tokio::time::Duration::from_secs(5)); + loop { futures::select! { _ = (&mut kill).fuse() => { @@ -112,6 +114,13 @@ async fn deal_with_messages( _ => (), } } + // This is trying to give a health checks to the home to keep the ui alive. + _ = timer.tick().fuse() => { + stream + .send(Message::Ping(vec![])) + .await + .with_kind(crate::ErrorKind::Network)?; + } } } } From 7e0e7860cdea1f32363a047d049af122c143f1c0 Mon Sep 17 00:00:00 2001 From: Matt Hill Date: Wed, 4 Oct 2023 13:00:49 -0600 Subject: [PATCH 12/38] cancel old request and base interval on tor (#2439) --- .../ui/src/app/pages/login/login.page.ts | 52 ------------------- .../ui/src/app/services/api/api.types.ts | 2 +- .../services/api/embassy-live-api.service.ts | 6 ++- .../app/services/patch-db/patch-db.factory.ts | 10 +++- 4 files changed, 14 insertions(+), 56 deletions(-) diff --git a/frontend/projects/ui/src/app/pages/login/login.page.ts b/frontend/projects/ui/src/app/pages/login/login.page.ts index a0c564aad..4a61f2adc 100644 --- a/frontend/projects/ui/src/app/pages/login/login.page.ts +++ b/frontend/projects/ui/src/app/pages/login/login.page.ts @@ -4,7 +4,6 @@ import { ApiService } from 'src/app/services/api/embassy-api.service' import { AuthService } from 'src/app/services/auth.service' import { Router } from '@angular/router' import { ConfigService } from 'src/app/services/config.service' -import { pauseFor, RELATIVE_URL } from '@start9labs/shared' import { DOCUMENT } from '@angular/common' import { WINDOW } from '@ng-web-apis/common' @@ -18,58 +17,16 @@ export class LoginPage { unmasked = false error = '' - downloadClicked = false - instructionsClicked = false - polling = false - caTrusted = false - constructor( private readonly router: Router, private readonly authService: AuthService, private readonly loadingCtrl: LoadingController, private readonly api: ApiService, public readonly config: ConfigService, - @Inject(RELATIVE_URL) private readonly relativeUrl: string, @Inject(DOCUMENT) public readonly document: Document, @Inject(WINDOW) private readonly windowRef: Window, ) {} - async ngOnInit() { - if (!this.config.isSecure()) { - await this.testHttps().catch(e => - console.warn('Failed Https connection attempt'), - ) - } - } - - download() { - this.downloadClicked = true - this.document.getElementById('install-cert')?.click() - } - - instructions() { - this.windowRef.open( - 'https://docs.start9.com/getting-started/trust-ca/#trust-your-server-s-root-ca', - '_blank', - 'noreferrer', - ) - this.instructionsClicked = true - this.startDaemon() - } - - private async startDaemon(): Promise { - this.polling = true - while (this.polling) { - try { - await this.testHttps() - this.polling = false - } catch (e) { - console.warn('Failed Https connection attempt') - await pauseFor(2000) - } - } - } - launchHttps() { const host = this.config.getHost() this.windowRef.open(`https://${host}`, '_blank', 'noreferrer') @@ -104,13 +61,4 @@ export class LoginPage { loader.dismiss() } } - - private async testHttps() { - const url = `https://${this.document.location.host}${this.relativeUrl}` - await this.api.echo({ message: 'ping' }, url).then(() => { - this.downloadClicked = true - this.instructionsClicked = true - this.caTrusted = true - }) - } } diff --git a/frontend/projects/ui/src/app/services/api/api.types.ts b/frontend/projects/ui/src/app/services/api/api.types.ts index 472cb5ab9..d5c519e69 100644 --- a/frontend/projects/ui/src/app/services/api/api.types.ts +++ b/frontend/projects/ui/src/app/services/api/api.types.ts @@ -38,7 +38,7 @@ export module RR { // server - export type EchoReq = { message: string } // server.echo + export type EchoReq = { message: string; timeout?: number } // server.echo export type EchoRes = string export type GetSystemTimeReq = {} // server.time diff --git a/frontend/projects/ui/src/app/services/api/embassy-live-api.service.ts b/frontend/projects/ui/src/app/services/api/embassy-live-api.service.ts index 63b36aa93..775fabf28 100644 --- a/frontend/projects/ui/src/app/services/api/embassy-live-api.service.ts +++ b/frontend/projects/ui/src/app/services/api/embassy-live-api.service.ts @@ -91,7 +91,11 @@ export class LiveApiService extends ApiService { // server async echo(params: RR.EchoReq, urlOverride?: string): Promise { - return this.rpcRequest({ method: 'echo', params }, false, urlOverride) + return this.rpcRequest( + { method: 'echo', params, timeout: 4000 }, + false, + urlOverride, + ) } openPatchWebsocket$(): Observable> { diff --git a/frontend/projects/ui/src/app/services/patch-db/patch-db.factory.ts b/frontend/projects/ui/src/app/services/patch-db/patch-db.factory.ts index 78af9beec..dc4276f79 100644 --- a/frontend/projects/ui/src/app/services/patch-db/patch-db.factory.ts +++ b/frontend/projects/ui/src/app/services/patch-db/patch-db.factory.ts @@ -13,6 +13,7 @@ import { defer, EMPTY, from, interval, merge, Observable } from 'rxjs' import { AuthService } from '../auth.service' import { ConnectionService } from '../connection.service' import { ApiService } from '../api/embassy-api.service' +import { ConfigService } from '../config.service' export const PATCH_SOURCE = new InjectionToken[]>>( '', @@ -26,6 +27,9 @@ export function sourceFactory( const api = injector.get(ApiService) const authService = injector.get(AuthService) const connectionService = injector.get(ConnectionService) + const configService = injector.get(ConfigService) + const isTor = configService.isTor() + const timeout = isTor ? 16000 : 4000 const websocket$ = api.openPatchWebsocket$().pipe( bufferTime(250), @@ -33,9 +37,11 @@ export function sourceFactory( catchError((_, watch$) => { connectionService.websocketConnected$.next(false) - return interval(4000).pipe( + return interval(timeout).pipe( switchMap(() => - from(api.echo({ message: 'ping' })).pipe(catchError(() => EMPTY)), + from(api.echo({ message: 'ping', timeout })).pipe( + catchError(() => EMPTY), + ), ), take(1), switchMap(() => watch$), From 05d6aea37f9055b060d143afbfb7367d41ac4863 Mon Sep 17 00:00:00 2001 From: Matt Hill Date: Wed, 4 Oct 2023 13:06:49 -0600 Subject: [PATCH 13/38] remove hard coded timeout --- .../ui/src/app/services/api/embassy-live-api.service.ts | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/frontend/projects/ui/src/app/services/api/embassy-live-api.service.ts b/frontend/projects/ui/src/app/services/api/embassy-live-api.service.ts index 775fabf28..63b36aa93 100644 --- a/frontend/projects/ui/src/app/services/api/embassy-live-api.service.ts +++ b/frontend/projects/ui/src/app/services/api/embassy-live-api.service.ts @@ -91,11 +91,7 @@ export class LiveApiService extends ApiService { // server async echo(params: RR.EchoReq, urlOverride?: string): Promise { - return this.rpcRequest( - { method: 'echo', params, timeout: 4000 }, - false, - urlOverride, - ) + return this.rpcRequest({ method: 'echo', params }, false, urlOverride) } openPatchWebsocket$(): Observable> { From 20241c27ee64fe3f79f2432812d32e9778cc99a6 Mon Sep 17 00:00:00 2001 From: Aiden McClelland <3732071+dr-bonez@users.noreply.github.com> Date: Wed, 4 Oct 2023 13:51:58 -0600 Subject: [PATCH 14/38] prevent stack overflow on shutdown (#2440) * prevent stack overflow on shutdown * fix --------- Co-authored-by: J H <2364004+Blu-J@users.noreply.github.com> --- backend/src/bins/startd.rs | 7 ++++--- backend/src/net/net_controller.rs | 8 ++++++-- 2 files changed, 10 insertions(+), 5 deletions(-) diff --git a/backend/src/bins/startd.rs b/backend/src/bins/startd.rs index e6c272803..a773dd99a 100644 --- a/backend/src/bins/startd.rs +++ b/backend/src/bins/startd.rs @@ -16,7 +16,7 @@ use crate::{Error, ErrorKind, ResultExt}; #[instrument(skip_all)] async fn inner_main(cfg_path: Option) -> Result, Error> { - let (rpc_ctx, server, shutdown) = { + let (rpc_ctx, server, shutdown) = async { let rpc_ctx = RpcContext::init( cfg_path, Arc::new( @@ -91,8 +91,9 @@ async fn inner_main(cfg_path: Option) -> Result, Error sig_handler.abort(); - (rpc_ctx, server, shutdown) - }; + Ok::<_, Error>((rpc_ctx, server, shutdown)) + } + .await?; server.shutdown().await; rpc_ctx.shutdown().await?; diff --git a/backend/src/net/net_controller.rs b/backend/src/net/net_controller.rs index cfd17a282..e2e77ed68 100644 --- a/backend/src/net/net_controller.rs +++ b/backend/src/net/net_controller.rs @@ -154,6 +154,7 @@ impl NetController { let dns = self.dns.add(Some(package.clone()), ip).await?; Ok(NetService { + shutdown: false, id: package, ip, dns, @@ -210,6 +211,7 @@ impl NetController { } pub struct NetService { + shutdown: bool, id: PackageId, ip: Ipv4Addr, dns: Arc<()>, @@ -323,6 +325,7 @@ impl NetService { Ok(()) } pub async fn remove_all(mut self) -> Result<(), Error> { + self.shutdown = true; let mut errors = ErrorCollection::new(); if let Some(ctrl) = Weak::upgrade(&self.controller) { for ((_, external), (key, rcs)) in std::mem::take(&mut self.lan) { @@ -333,9 +336,9 @@ impl NetService { } std::mem::take(&mut self.dns); errors.handle(ctrl.dns.gc(Some(self.id.clone()), self.ip).await); - self.ip = Ipv4Addr::new(0, 0, 0, 0); errors.into_result() } else { + tracing::warn!("NetService dropped after NetController is shutdown"); Err(Error::new( eyre!("NetController is shutdown"), crate::ErrorKind::Network, @@ -346,11 +349,12 @@ impl NetService { impl Drop for NetService { fn drop(&mut self) { - if self.ip != Ipv4Addr::new(0, 0, 0, 0) { + if !self.shutdown { tracing::debug!("Dropping NetService for {}", self.id); let svc = std::mem::replace( self, NetService { + shutdown: true, id: Default::default(), ip: Ipv4Addr::new(0, 0, 0, 0), dns: Default::default(), From 6f588196cbde254d7ff8763af7e504c7de85aa7c Mon Sep 17 00:00:00 2001 From: Aiden McClelland <3732071+dr-bonez@users.noreply.github.com> Date: Wed, 4 Oct 2023 14:52:56 -0600 Subject: [PATCH 15/38] set governor to "performance" if available (#2438) * set governor to "performance" if available * add linux-cpupower * fix: Boolean blindness, thanks @dr-bones --------- Co-authored-by: J H <2364004+Blu-J@users.noreply.github.com> --- backend/Cargo.lock | 59 ++++++++++++++++- backend/Cargo.toml | 1 + backend/src/init.rs | 20 ++++++ backend/src/util/cpupower.rs | 125 +++++++++++++++++++++++++++++++++++ backend/src/util/mod.rs | 1 + build/lib/depends | 1 + libs/models/src/errors.rs | 2 + 7 files changed, 208 insertions(+), 1 deletion(-) create mode 100644 backend/src/util/cpupower.rs diff --git a/backend/Cargo.lock b/backend/Cargo.lock index b72396e65..3c82288fa 100644 --- a/backend/Cargo.lock +++ b/backend/Cargo.lock @@ -661,6 +661,26 @@ version = "0.9.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "795bc6e66a8e340f075fcf6227e417a2dc976b92b91f3cdc778bb858778b6747" +[[package]] +name = "const_format" +version = "0.2.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c990efc7a285731f9a4378d81aff2f0e85a2c8781a05ef0f8baa8dac54d0ff48" +dependencies = [ + "const_format_proc_macros", +] + +[[package]] +name = "const_format_proc_macros" +version = "0.2.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e026b6ce194a874cb9cf32cd5772d1ef9767cc8fcb5765948d74f37a9d8b2bf6" +dependencies = [ + "proc-macro2 1.0.66", + "quote 1.0.31", + "unicode-xid 0.2.4", +] + [[package]] name = "constant_time_eq" version = "0.1.5" @@ -679,6 +699,15 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6245d59a3e82a7fc217c5828a6692dbc6dfb63a0c8c90495621f7b9d79704a0e" +[[package]] +name = "convert_case" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec182b0ca2f35d8fc196cf3404988fd8b8c739a4d270ff118a398feb0cbec1ca" +dependencies = [ + "unicode-segmentation", +] + [[package]] name = "cookie" version = "0.16.2" @@ -1074,7 +1103,7 @@ version = "0.99.17" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4fb810d30a7c1953f91334de7244731fc3f3c10d7fe163338a35b9f640960321" dependencies = [ - "convert_case", + "convert_case 0.4.0", "proc-macro2 1.0.66", "quote 1.0.31", "rustc_version 0.4.0", @@ -4519,6 +4548,33 @@ dependencies = [ "tokio-rustls", ] +[[package]] +name = "sscanf" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c713ebd15ce561dd4a13ed62bc2a0368e16806fc30dcaf66ecf1256b2a3fdde6" +dependencies = [ + "const_format", + "lazy_static", + "regex", + "sscanf_macro", +] + +[[package]] +name = "sscanf_macro" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "84955aa74a157e5834d58a07be11af7f0ab923f0194a0bb2ea6b3db8b5d1611d" +dependencies = [ + "convert_case 0.6.0", + "proc-macro2 1.0.66", + "quote 1.0.31", + "regex-syntax 0.6.29", + "strsim 0.10.0", + "syn 2.0.18", + "unicode-width", +] + [[package]] name = "ssh-encoding" version = "0.1.0" @@ -4657,6 +4713,7 @@ dependencies = [ "sha2 0.9.9", "simple-logging", "sqlx", + "sscanf", "ssh-key", "stderrlog", "tar", diff --git a/backend/Cargo.toml b/backend/Cargo.toml index 20e4473a6..461ae48c7 100644 --- a/backend/Cargo.toml +++ b/backend/Cargo.toml @@ -121,6 +121,7 @@ rpassword = "7.0.0" rpc-toolkit = "0.2.2" rust-argon2 = "1.0.0" scopeguard = "1.1" # because avahi-sys fucks your shit up +sscanf = "0.4.1" serde = { version = "1.0.139", features = ["derive", "rc"] } serde_cbor = { package = "ciborium", version = "0.2.0" } serde_json = "1.0.82" diff --git a/backend/src/init.rs b/backend/src/init.rs index da6c2b8f4..58d888b48 100644 --- a/backend/src/init.rs +++ b/backend/src/init.rs @@ -20,6 +20,9 @@ use crate::middleware::auth::LOCAL_AUTH_COOKIE_PATH; use crate::prelude::*; use crate::sound::BEP; use crate::system::time; +use crate::util::cpupower::{ + current_governor, get_available_governors, set_governor, GOVERNOR_PERFORMANCE, +}; use crate::util::docker::{create_bridge_network, CONTAINER_DATADIR, CONTAINER_TOOL}; use crate::util::Invoke; use crate::{Error, ARCH}; @@ -341,6 +344,23 @@ pub async fn init(cfg: &RpcContextConfig) -> Result { .await?; tracing::info!("Enabled Docker QEMU Emulation"); + if current_governor() + .await? + .map(|g| &g != &GOVERNOR_PERFORMANCE) + .unwrap_or(false) + { + tracing::info!("Setting CPU Governor to \"{}\"", GOVERNOR_PERFORMANCE); + if get_available_governors() + .await? + .contains(&GOVERNOR_PERFORMANCE) + { + set_governor(&GOVERNOR_PERFORMANCE).await?; + tracing::info!("Set CPU Governor"); + } else { + tracing::warn!("CPU Governor \"{}\" Not Available", GOVERNOR_PERFORMANCE) + } + } + let mut warn_time_not_synced = true; for _ in 0..60 { if check_time_is_synchronized().await? { diff --git a/backend/src/util/cpupower.rs b/backend/src/util/cpupower.rs new file mode 100644 index 000000000..a48502754 --- /dev/null +++ b/backend/src/util/cpupower.rs @@ -0,0 +1,125 @@ +use std::borrow::Cow; +use std::collections::BTreeSet; + +use imbl::OrdMap; +use tokio::process::Command; + +use crate::prelude::*; +use crate::util::Invoke; + +pub const GOVERNOR_PERFORMANCE: Governor = Governor(Cow::Borrowed("performance")); + +#[derive(Debug, Clone, PartialEq, Eq, PartialOrd, Ord)] +pub struct Governor(Cow<'static, str>); +impl std::fmt::Display for Governor { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + self.0.fmt(f) + } +} +impl std::ops::Deref for Governor { + type Target = str; + fn deref(&self) -> &Self::Target { + &*self.0 + } +} +impl std::borrow::Borrow for Governor { + fn borrow(&self) -> &str { + &**self + } +} + +pub async fn get_available_governors() -> Result, Error> { + let raw = String::from_utf8( + Command::new("cpupower") + .arg("frequency-info") + .arg("-g") + .invoke(ErrorKind::CpuSettings) + .await?, + )?; + let mut for_cpu: OrdMap> = OrdMap::new(); + let mut current_cpu = None; + for line in raw.lines() { + if line.starts_with("analyzing") { + current_cpu = Some( + sscanf::sscanf!(line, "analyzing CPU {u32}:") + .map_err(|e| eyre!("{e}")) + .with_kind(ErrorKind::ParseSysInfo)?, + ); + } else if let Some(rest) = line + .trim() + .strip_prefix("available cpufreq governors:") + .map(|s| s.trim()) + { + if rest != "Not Available" { + for_cpu + .entry(current_cpu.ok_or_else(|| { + Error::new( + eyre!("governors listed before cpu"), + ErrorKind::ParseSysInfo, + ) + })?) + .or_default() + .extend( + rest.split_ascii_whitespace() + .map(|g| Governor(Cow::Owned(g.to_owned()))), + ); + } + } + } + Ok(for_cpu + .into_iter() + .fold(None, |acc: Option>, (_, x)| { + if let Some(acc) = acc { + Some(acc.intersection(&x).cloned().collect()) + } else { + Some(x) + } + }) + .unwrap_or_default()) // include only governors available for ALL cpus +} + +pub async fn current_governor() -> Result, Error> { + let Some(raw) = Command::new("cpupower") + .arg("frequency-info") + .arg("-p") + .invoke(ErrorKind::CpuSettings) + .await + .and_then(|s| Ok(Some(String::from_utf8(s)?))) + .or_else(|e| { + if e.source + .to_string() + .contains("Unable to determine current policy") + { + Ok(None) + } else { + Err(e) + } + })? + else { + return Ok(None); + }; + + for line in raw.lines() { + if let Some(governor) = line + .trim() + .strip_prefix("The governor \"") + .and_then(|s| s.strip_suffix("\" may decide which speed to use")) + { + return Ok(Some(Governor(Cow::Owned(governor.to_owned())))); + } + } + Err(Error::new( + eyre!("Failed to parse cpupower output:\n{raw}"), + ErrorKind::ParseSysInfo, + )) +} + +pub async fn set_governor(governor: &Governor) -> Result<(), Error> { + Command::new("cpupower") + .arg("frequency-set") + .arg("-g") + .arg(&*governor.0) + .invoke(ErrorKind::CpuSettings) + .await?; + Ok(()) +} diff --git a/backend/src/util/mod.rs b/backend/src/util/mod.rs index 90b6ddcdf..428bf5c6e 100644 --- a/backend/src/util/mod.rs +++ b/backend/src/util/mod.rs @@ -24,6 +24,7 @@ use tracing::instrument; use crate::shutdown::Shutdown; use crate::{Error, ErrorKind, ResultExt as _}; pub mod config; +pub mod cpupower; pub mod docker; pub mod http_reader; pub mod io; diff --git a/build/lib/depends b/build/lib/depends index b64d81ba8..6376a0762 100644 --- a/build/lib/depends +++ b/build/lib/depends @@ -24,6 +24,7 @@ iw jq libavahi-client3 libyajl2 +linux-cpupower lm-sensors lshw lvm2 diff --git a/libs/models/src/errors.rs b/libs/models/src/errors.rs index 30a26b412..637ac9aa5 100644 --- a/libs/models/src/errors.rs +++ b/libs/models/src/errors.rs @@ -78,6 +78,7 @@ pub enum ErrorKind { OpenSsh = 66, Zram = 67, Lshw = 68, + CpuSettings = 69, } impl ErrorKind { pub fn as_str(&self) -> &'static str { @@ -151,6 +152,7 @@ impl ErrorKind { OpenSsh => "OpenSSH Error", Zram => "Zram Error", Lshw => "LSHW Error", + CpuSettings => "CPU Settings Error", } } } From 97ad8a85c331049a177974780cfc773e705473c2 Mon Sep 17 00:00:00 2001 From: Aiden McClelland Date: Thu, 5 Oct 2023 08:59:24 -0600 Subject: [PATCH 16/38] update cargo lock --- system-images/compat/Cargo.lock | 204 +++++++++++++++++++++----------- 1 file changed, 136 insertions(+), 68 deletions(-) diff --git a/system-images/compat/Cargo.lock b/system-images/compat/Cargo.lock index 01125bb3e..8ca1e9361 100644 --- a/system-images/compat/Cargo.lock +++ b/system-images/compat/Cargo.lock @@ -166,8 +166,8 @@ version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "10f203db73a71dfa2fb6dd22763990fa26f3d2625a6da2da900d23b87d26be27" dependencies = [ - "proc-macro2 1.0.50", - "quote 1.0.23", + "proc-macro2 1.0.67", + "quote 1.0.33", "syn 1.0.107", ] @@ -177,8 +177,8 @@ version = "0.1.61" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "705339e0e4a9690e2908d2b3d049d85682cf19fbd5782494498fbf7003a6a282" dependencies = [ - "proc-macro2 1.0.50", - "quote 1.0.23", + "proc-macro2 1.0.67", + "quote 1.0.33", "syn 1.0.107", ] @@ -620,6 +620,26 @@ version = "0.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cec318a675afcb6a1ea1d4340e2d377e56e47c266f28043ceccbf4412ddfdd3b" +[[package]] +name = "const_format" +version = "0.2.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c990efc7a285731f9a4378d81aff2f0e85a2c8781a05ef0f8baa8dac54d0ff48" +dependencies = [ + "const_format_proc_macros", +] + +[[package]] +name = "const_format_proc_macros" +version = "0.2.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e026b6ce194a874cb9cf32cd5772d1ef9767cc8fcb5765948d74f37a9d8b2bf6" +dependencies = [ + "proc-macro2 1.0.67", + "quote 1.0.33", + "unicode-xid 0.2.4", +] + [[package]] name = "constant_time_eq" version = "0.1.5" @@ -632,6 +652,15 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6245d59a3e82a7fc217c5828a6692dbc6dfb63a0c8c90495621f7b9d79704a0e" +[[package]] +name = "convert_case" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec182b0ca2f35d8fc196cf3404988fd8b8c739a4d270ff118a398feb0cbec1ca" +dependencies = [ + "unicode-segmentation", +] + [[package]] name = "cookie" version = "0.16.2" @@ -861,8 +890,8 @@ dependencies = [ "cc", "codespan-reporting", "once_cell", - "proc-macro2 1.0.50", - "quote 1.0.23", + "proc-macro2 1.0.67", + "quote 1.0.33", "scratch", "syn 1.0.107", ] @@ -879,8 +908,8 @@ version = "1.0.86" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "39e61fda7e62115119469c7b3591fd913ecca96fb766cfd3f2e2502ab7bc87a5" dependencies = [ - "proc-macro2 1.0.50", - "quote 1.0.23", + "proc-macro2 1.0.67", + "quote 1.0.33", "syn 1.0.107", ] @@ -902,8 +931,8 @@ checksum = "a784d2ccaf7c98501746bf0be29b2022ba41fd62a2e622af997a03e9f972859f" dependencies = [ "fnv", "ident_case", - "proc-macro2 1.0.50", - "quote 1.0.23", + "proc-macro2 1.0.67", + "quote 1.0.33", "strsim 0.10.0", "syn 1.0.107", ] @@ -915,7 +944,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7618812407e9402654622dd402b0a89dff9ba93badd6540781526117b92aab7e" dependencies = [ "darling_core", - "quote 1.0.23", + "quote 1.0.33", "syn 1.0.107", ] @@ -955,9 +984,9 @@ version = "0.99.17" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4fb810d30a7c1953f91334de7244731fc3f3c10d7fe163338a35b9f640960321" dependencies = [ - "convert_case", - "proc-macro2 1.0.50", - "quote 1.0.23", + "convert_case 0.4.0", + "proc-macro2 1.0.67", + "quote 1.0.33", "rustc_version", "syn 1.0.107", ] @@ -1204,8 +1233,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c9720bba047d567ffc8a3cba48bf19126600e249ab7f128e9233e6376976a116" dependencies = [ "heck", - "proc-macro2 1.0.50", - "quote 1.0.23", + "proc-macro2 1.0.67", + "quote 1.0.33", "syn 1.0.107", ] @@ -1275,8 +1304,8 @@ version = "0.1.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "aa4da3c766cd7a0db8242e326e9e4e081edd567072893ed320008189715366a4" dependencies = [ - "proc-macro2 1.0.50", - "quote 1.0.23", + "proc-macro2 1.0.67", + "quote 1.0.33", "syn 1.0.107", "synstructure", ] @@ -1447,8 +1476,8 @@ version = "0.3.25" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bdfb8ce053d86b91919aad980c220b1fb8401a9394410e1c289ed7e66b61835d" dependencies = [ - "proc-macro2 1.0.50", - "quote 1.0.23", + "proc-macro2 1.0.67", + "quote 1.0.33", "syn 1.0.107", ] @@ -1537,8 +1566,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fe69f1cbdb6e28af2bac214e943b99ce8a0a06b447d15d3e61161b0423139f3f" dependencies = [ "proc-macro-hack", - "proc-macro2 1.0.50", - "quote 1.0.23", + "proc-macro2 1.0.67", + "quote 1.0.33", "syn 1.0.107", ] @@ -1902,8 +1931,8 @@ version = "0.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b139284b5cf57ecfa712bcc66950bb635b31aff41c188e8a4cfc758eca374a3f" dependencies = [ - "proc-macro2 1.0.50", - "quote 1.0.23", + "proc-macro2 1.0.67", + "quote 1.0.33", ] [[package]] @@ -2609,8 +2638,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3b0498641e53dd6ac1a4f22547548caa6864cc4933784319cd1775271c5a46ce" dependencies = [ "proc-macro-crate", - "proc-macro2 1.0.50", - "quote 1.0.23", + "proc-macro2 1.0.67", + "quote 1.0.33", "syn 1.0.107", ] @@ -2675,8 +2704,8 @@ version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b501e44f11665960c7e7fcf062c7d96a14ade4aa98116c004b2e37b5be7d736c" dependencies = [ - "proc-macro2 1.0.50", - "quote 1.0.23", + "proc-macro2 1.0.67", + "quote 1.0.33", "syn 1.0.107", ] @@ -2853,7 +2882,7 @@ name = "patch-db-macro" version = "0.1.0" dependencies = [ "patch-db-macro-internals", - "proc-macro2 1.0.50", + "proc-macro2 1.0.67", "syn 1.0.107", ] @@ -2862,8 +2891,8 @@ name = "patch-db-macro-internals" version = "0.1.0" dependencies = [ "heck", - "proc-macro2 1.0.50", - "quote 1.0.23", + "proc-macro2 1.0.67", + "quote 1.0.33", "syn 1.0.107", ] @@ -2922,8 +2951,8 @@ checksum = "46b53634d8c8196302953c74d5352f33d0c512a9499bd2ce468fc9f4128fa27c" dependencies = [ "pest", "pest_meta", - "proc-macro2 1.0.50", - "quote 1.0.23", + "proc-macro2 1.0.67", + "quote 1.0.33", "syn 1.0.107", ] @@ -2978,8 +3007,8 @@ version = "1.0.12" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "069bdb1e05adc7a8990dce9cc75370895fbe4e3d58b9b73bf1aee56359344a55" dependencies = [ - "proc-macro2 1.0.50", - "quote 1.0.23", + "proc-macro2 1.0.67", + "quote 1.0.33", "syn 1.0.107", ] @@ -3092,9 +3121,9 @@ dependencies = [ [[package]] name = "proc-macro2" -version = "1.0.50" +version = "1.0.67" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6ef7d57beacfaf2d8aee5937dab7b7f28de3cb8b1828479bb5de2a7106f2bae2" +checksum = "3d433d9f1a3e8c1263d9456598b16fec66f4acc9a74dacffd35c7bb09b3a1328" dependencies = [ "unicode-ident", ] @@ -3184,11 +3213,11 @@ dependencies = [ [[package]] name = "quote" -version = "1.0.23" +version = "1.0.33" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8856d8364d252a14d474036ea1358d63c9e6965c8e5c1885c18f73d70bff9c7b" +checksum = "5267fca4496028628a95160fc423a33e8b2e6af8a5302579e322e4b520293cae" dependencies = [ - "proc-macro2 1.0.50", + "proc-macro2 1.0.67", ] [[package]] @@ -3477,7 +3506,7 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f8e4b9cb00baf2d61bcd35e98d67dcb760382a3b4540df7e63b38d053c8a7b8b" dependencies = [ - "proc-macro2 1.0.50", + "proc-macro2 1.0.67", "rpc-toolkit-macro-internals", "syn 1.0.107", ] @@ -3488,8 +3517,8 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d3e2ce21b936feaecdab9c9a8e75b9dca64374ccc11951a58045ad6559b75f42" dependencies = [ - "proc-macro2 1.0.50", - "quote 1.0.23", + "proc-macro2 1.0.67", + "quote 1.0.33", "syn 1.0.107", ] @@ -3735,8 +3764,8 @@ version = "1.0.152" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "af487d118eecd09402d70a5d72551860e788df87b464af30e5ea6a38c75c541e" dependencies = [ - "proc-macro2 1.0.50", - "quote 1.0.23", + "proc-macro2 1.0.67", + "quote 1.0.33", "syn 1.0.107", ] @@ -3796,8 +3825,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a1966009f3c05f095697c537312f5415d1e3ed31ce0a56942bac4c771c5c335e" dependencies = [ "darling", - "proc-macro2 1.0.50", - "quote 1.0.23", + "proc-macro2 1.0.67", + "quote 1.0.33", "syn 1.0.107", ] @@ -4066,8 +4095,8 @@ dependencies = [ "heck", "hex", "once_cell", - "proc-macro2 1.0.50", - "quote 1.0.23", + "proc-macro2 1.0.67", + "quote 1.0.33", "serde", "serde_json", "sha2 0.10.6", @@ -4088,6 +4117,33 @@ dependencies = [ "tokio-rustls", ] +[[package]] +name = "sscanf" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c713ebd15ce561dd4a13ed62bc2a0368e16806fc30dcaf66ecf1256b2a3fdde6" +dependencies = [ + "const_format", + "lazy_static", + "regex", + "sscanf_macro", +] + +[[package]] +name = "sscanf_macro" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "84955aa74a157e5834d58a07be11af7f0ab923f0194a0bb2ea6b3db8b5d1611d" +dependencies = [ + "convert_case 0.6.0", + "proc-macro2 1.0.67", + "quote 1.0.33", + "regex-syntax", + "strsim 0.10.0", + "syn 2.0.37", + "unicode-width", +] + [[package]] name = "ssh-encoding" version = "0.1.0" @@ -4205,6 +4261,7 @@ dependencies = [ "sha2 0.9.9", "simple-logging", "sqlx", + "sscanf", "ssh-key", "stderrlog", "tar", @@ -4301,8 +4358,19 @@ version = "1.0.107" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1f4064b5b16e03ae50984a5a8ed5d4f8803e6bc1fd170a3cda91a1be4b18e3f5" dependencies = [ - "proc-macro2 1.0.50", - "quote 1.0.23", + "proc-macro2 1.0.67", + "quote 1.0.33", + "unicode-ident", +] + +[[package]] +name = "syn" +version = "2.0.37" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7303ef2c05cd654186cb250d29049a24840ca25d2747c25c0381c8d9e2f582e8" +dependencies = [ + "proc-macro2 1.0.67", + "quote 1.0.33", "unicode-ident", ] @@ -4312,8 +4380,8 @@ version = "0.12.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f36bdaa60a83aca3921b5259d5400cbf5e90fc51931376a9bd4a0eb79aa7210f" dependencies = [ - "proc-macro2 1.0.50", - "quote 1.0.23", + "proc-macro2 1.0.67", + "quote 1.0.33", "syn 1.0.107", "unicode-xid 0.2.4", ] @@ -4399,8 +4467,8 @@ version = "1.0.38" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1fb327af4685e4d03fa8cbcf1716380da910eeb2bb8be417e7f9fd3fb164f36f" dependencies = [ - "proc-macro2 1.0.50", - "quote 1.0.23", + "proc-macro2 1.0.67", + "quote 1.0.33", "syn 1.0.107", ] @@ -4512,8 +4580,8 @@ version = "1.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d266c00fde287f55d3f1c3e96c500c362a2b8c695076ec180f27918820bc6df8" dependencies = [ - "proc-macro2 1.0.50", - "quote 1.0.23", + "proc-macro2 1.0.67", + "quote 1.0.33", "syn 1.0.107", ] @@ -4657,8 +4725,8 @@ version = "0.1.23" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4017f8f45139870ca7e672686113917c71c7a6e02d4924eda67186083c03081a" dependencies = [ - "proc-macro2 1.0.50", - "quote 1.0.23", + "proc-macro2 1.0.67", + "quote 1.0.33", "syn 1.0.107", ] @@ -4829,8 +4897,8 @@ version = "0.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "89851716b67b937e393b3daa8423e67ddfc4bbbf1654bcf05488e95e0828db0c" dependencies = [ - "proc-macro2 1.0.50", - "quote 1.0.23", + "proc-macro2 1.0.67", + "quote 1.0.33", "syn 1.0.107", ] @@ -5040,8 +5108,8 @@ dependencies = [ "bumpalo", "log", "once_cell", - "proc-macro2 1.0.50", - "quote 1.0.23", + "proc-macro2 1.0.67", + "quote 1.0.33", "syn 1.0.107", "wasm-bindgen-shared", ] @@ -5064,7 +5132,7 @@ version = "0.2.83" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "052be0f94026e6cbc75cdefc9bae13fd6052cdcaf532fa6c45e7ae33a1e6c810" dependencies = [ - "quote 1.0.23", + "quote 1.0.33", "wasm-bindgen-macro-support", ] @@ -5074,8 +5142,8 @@ version = "0.2.83" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "07bc0c051dc5f23e307b13285f9d75df86bfdf816c5721e573dec1f9b8aa193c" dependencies = [ - "proc-macro2 1.0.50", - "quote 1.0.23", + "proc-macro2 1.0.67", + "quote 1.0.33", "syn 1.0.107", "wasm-bindgen-backend", "wasm-bindgen-shared", @@ -5404,8 +5472,8 @@ version = "1.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "44bf07cb3e50ea2003396695d58bf46bc9887a1f362260446fad6bc4e79bd36c" dependencies = [ - "proc-macro2 1.0.50", - "quote 1.0.23", + "proc-macro2 1.0.67", + "quote 1.0.33", "syn 1.0.107", "synstructure", ] From 7db331320a095caafc5acba4a642a5be9d6db74f Mon Sep 17 00:00:00 2001 From: Aiden McClelland <3732071+dr-bonez@users.noreply.github.com> Date: Thu, 5 Oct 2023 13:37:31 -0600 Subject: [PATCH 17/38] Update LICENSE (#2441) * Update LICENSE * update README.md * update release notes --- LICENSE | 21 ++++++++++ LICENSE.md | 42 ------------------- README.md | 2 +- .../modals/os-welcome/os-welcome.page.html | 1 + 4 files changed, 23 insertions(+), 43 deletions(-) create mode 100644 LICENSE delete mode 100644 LICENSE.md diff --git a/LICENSE b/LICENSE new file mode 100644 index 000000000..110071e0d --- /dev/null +++ b/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2023 Start9 Labs, Inc. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/LICENSE.md b/LICENSE.md deleted file mode 100644 index bacd53575..000000000 --- a/LICENSE.md +++ /dev/null @@ -1,42 +0,0 @@ -# START9 NON-COMMERCIAL LICENSE v1 -Version 1, 22 September 2022 - -TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - -### 1.Definitions - -"License" means version 1 of the Start9 Non-Commercial License. - -"Licensor" means the Start9 Labs, Inc, or its successor(s) in interest, or a future assignee of the copyright. - -"You" (or "Your") means an individual or organization exercising permissions granted by this License. - -"Source Code" for a work means the preferred form of the work for making modifications to it. - -"Object Code" means any non-source form of a work, including the machine-language output by a compiler or assembler. - -"Work" means any work of authorship, whether in Source or Object form, made available under this License. - -"Derivative Work" means any work, whether in Source or Object form, that is based on (or derived from) the Work. - -"Distribute" means to convey or to publish and generally has the same meaning here as under U.S. Copyright law. - -"Sell" means practicing any or all of the rights granted to you under the License to provide to third parties, for a fee or other consideration (including, without limitation, fees for hosting, consulting, or support services), a product or service whose value derives, entirely or substantially, from the functionality of the Work or Derivative Work. - -### 2. Grant of Rights - -Subject to the terms of this license, the Licensor grants you, the licensee, a non-exclusive, worldwide, royalty-free copyright license to access, audit, copy, modify, compile, run, test, distribute, or otherwise use the Software. - -### 3. Limitations - -1. The grant of rights under the License does NOT include, and the License does NOT grant You the right to Sell the Work or Derivative Work. -2. If you Distribute the Work or Derivative Work, you expressly undertake not to remove or modify, in any manner, the copyright notices attached to the Work or displayed in any output of the Work when run, and to reproduce these notices, in an identical manner, in any distributed copies of the Work or Derivative Work together with a copy of this License. -3. If you Distribute a Derivative Work, it must carry prominent notices stating that it has been modified from the Work, providing a relevant date. - -### 4. Contributions - -You hereby grant to Licensor a perpetual, irrevocable, worldwide, non-exclusive, royalty-free license to use and exploit any Derivative Work of which you are the author. - -### 5. Disclaimer - -THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. LICENSOR HAS NO OBLIGATION TO SUPPORT RECIPIENTS OF THE SOFTWARE. diff --git a/README.md b/README.md index ecc5f39fe..d6ec21591 100644 --- a/README.md +++ b/README.md @@ -35,7 +35,7 @@ Welcome to the era of Sovereign Computing


diff --git a/frontend/projects/ui/src/app/modals/os-welcome/os-welcome.page.html b/frontend/projects/ui/src/app/modals/os-welcome/os-welcome.page.html index d539886a1..cc1243011 100644 --- a/frontend/projects/ui/src/app/modals/os-welcome/os-welcome.page.html +++ b/frontend/projects/ui/src/app/modals/os-welcome/os-welcome.page.html @@ -36,6 +36,7 @@
  • Require HTTPS on LAN, and improve setup flow for trusting Root CA
  • Better default privacy settings for Firefox kiosk mode
  • Other small bug fixes
  • +
  • Update license to MIT
  • From f12b7f4319696371beee0b4ba1916ceb19da9a3f Mon Sep 17 00:00:00 2001 From: Matt Hill Date: Thu, 5 Oct 2023 14:42:41 -0600 Subject: [PATCH 18/38] fix cert endpoint --- .../ui/src/app/pages/login/ca-wizard/ca-wizard.component.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frontend/projects/ui/src/app/pages/login/ca-wizard/ca-wizard.component.html b/frontend/projects/ui/src/app/pages/login/ca-wizard/ca-wizard.component.html index fb38b58ec..cae7b24d0 100644 --- a/frontend/projects/ui/src/app/pages/login/ca-wizard/ca-wizard.component.html +++ b/frontend/projects/ui/src/app/pages/login/ca-wizard/ca-wizard.component.html @@ -103,6 +103,6 @@ From 68c29ab99ec7cd1e0559f81cb340a6d3bf9b6530 Mon Sep 17 00:00:00 2001 From: Aiden McClelland <3732071+dr-bonez@users.noreply.github.com> Date: Thu, 5 Oct 2023 16:14:51 -0600 Subject: [PATCH 19/38] allow UNSET country code for wifi (#2442) --- backend/src/net/wifi.rs | 24 ++++++++++++++---------- 1 file changed, 14 insertions(+), 10 deletions(-) diff --git a/backend/src/net/wifi.rs b/backend/src/net/wifi.rs index d0d0dc6c0..8429f9205 100644 --- a/backend/src/net/wifi.rs +++ b/backend/src/net/wifi.rs @@ -174,7 +174,7 @@ pub async fn delete(#[context] ctx: RpcContext, #[arg] ssid: String) -> Result<( pub struct WiFiInfo { ssids: HashMap, connected: Option, - country: CountryCode, + country: Option, ethernet: bool, available_wifi: Vec, } @@ -216,7 +216,7 @@ fn display_wifi_info(info: WiFiInfo, matches: &ArgMatches) { .as_ref() .and_then(|x| info.ssids.get(x)) .map_or("[N/A]".to_owned(), |ss| format!("{}", ss.0)), - &info.country.alpha2(), + info.country.as_ref().map(|c| c.alpha2()).unwrap_or("00"), &format!("{}", info.ethernet) ]); table_global.print_tty(false).unwrap(); @@ -517,7 +517,7 @@ impl WpaCli { Ok(()) } - pub async fn get_country_low(&self) -> Result { + pub async fn get_country_low(&self) -> Result, Error> { let r = Command::new("iw") .arg("reg") .arg("get") @@ -539,12 +539,16 @@ impl WpaCli { ErrorKind::Wifi, ) })?[1]; - Ok(CountryCode::for_alpha2(country).map_err(|_| { - Error::new( - color_eyre::eyre::eyre!("Invalid Country Code: {}", country), - ErrorKind::Wifi, - ) - })?) + if country == "00" { + Ok(None) + } else { + Ok(Some(CountryCode::for_alpha2(country).map_err(|_| { + Error::new( + color_eyre::eyre::eyre!("Invalid Country Code: {}", country), + ErrorKind::Wifi, + ) + })?)) + } } pub async fn remove_network_low(&mut self, id: NetworkId) -> Result<(), Error> { let _ = Command::new("nmcli") @@ -634,7 +638,7 @@ impl WpaCli { Ok(()) } pub async fn save_config(&mut self, db: PatchDb) -> Result<(), Error> { - let new_country = Some(self.get_country_low().await?); + let new_country = self.get_country_low().await?; db.mutate(|d| { d.as_server_info_mut() .as_last_wifi_region_mut() From eb521b2332c76d1bd07b03b15ca6518267d468b4 Mon Sep 17 00:00:00 2001 From: Aiden McClelland <3732071+dr-bonez@users.noreply.github.com> Date: Thu, 5 Oct 2023 17:40:44 -0600 Subject: [PATCH 20/38] enable trimming in luks (#2443) --- backend/src/disk/main.rs | 1 + build/lib/scripts/postinst | 1 + 2 files changed, 2 insertions(+) diff --git a/backend/src/disk/main.rs b/backend/src/disk/main.rs index 48b392236..74f6db73c 100644 --- a/backend/src/disk/main.rs +++ b/backend/src/disk/main.rs @@ -126,6 +126,7 @@ pub async fn create_fs>( Command::new("cryptsetup") .arg("-q") .arg("luksOpen") + .arg("--allow-discards") .arg(format!("--key-file={}", PASSWORD_PATH)) .arg(format!("--keyfile-size={}", password.len())) .arg(&blockdev_path) diff --git a/build/lib/scripts/postinst b/build/lib/scripts/postinst index 2b0e09a12..171924a9c 100755 --- a/build/lib/scripts/postinst +++ b/build/lib/scripts/postinst @@ -76,6 +76,7 @@ sed -i '/\(^\|#\)Storage=/c\Storage=persistent' /etc/systemd/journald.conf sed -i '/\(^\|#\)Compress=/c\Compress=yes' /etc/systemd/journald.conf sed -i '/\(^\|#\)SystemMaxUse=/c\SystemMaxUse=1G' /etc/systemd/journald.conf sed -i '/\(^\|#\)ForwardToSyslog=/c\ForwardToSyslog=no' /etc/systemd/journald.conf +sed -i '/^\s*#\?\s*issue_discards\s*=\s*/c\issue_discards = 1' /etc/lvm/lvm.conf mkdir -p /etc/docker cat > /etc/docker/daemon.json << EOF { From caaf9d26db4702a71c0e0ee6e9145a9e5d007cf0 Mon Sep 17 00:00:00 2001 From: Matt Hill Date: Thu, 5 Oct 2023 19:04:10 -0600 Subject: [PATCH 21/38] Fix/patch fe (#2444) * clear caches on logout * fix uninstall pkg missing error --- .../pages/apps-routes/app-list/package-info.pipe.ts | 4 ++-- .../ui/src/app/services/api/embassy-api.service.ts | 4 ++-- .../src/app/services/api/embassy-mock-api.service.ts | 12 +++++++----- .../projects/ui/src/app/services/api/mock-patch.ts | 1 - .../ui/src/app/services/dep-error.service.ts | 12 ++---------- .../ui/src/app/services/marketplace.service.ts | 4 ++-- .../ui/src/app/services/patch-monitor.service.ts | 10 +++------- .../projects/ui/src/app/services/time-service.ts | 6 +----- 8 files changed, 19 insertions(+), 34 deletions(-) diff --git a/frontend/projects/ui/src/app/pages/apps-routes/app-list/package-info.pipe.ts b/frontend/projects/ui/src/app/pages/apps-routes/app-list/package-info.pipe.ts index df48680af..c0d00c2c9 100644 --- a/frontend/projects/ui/src/app/pages/apps-routes/app-list/package-info.pipe.ts +++ b/frontend/projects/ui/src/app/pages/apps-routes/app-list/package-info.pipe.ts @@ -1,6 +1,6 @@ import { Pipe, PipeTransform } from '@angular/core' import { Observable, combineLatest, firstValueFrom } from 'rxjs' -import { map } from 'rxjs/operators' +import { filter, map } from 'rxjs/operators' import { DataModel } from 'src/app/services/patch-db/data-model' import { getPackageInfo, PkgInfo } from '../../../util/get-package-info' import { PatchDB } from 'patch-db-client' @@ -17,7 +17,7 @@ export class PackageInfoPipe implements PipeTransform { transform(pkgId: string): Observable { return combineLatest([ - this.patch.watch$('package-data', pkgId), + this.patch.watch$('package-data', pkgId).pipe(filter(Boolean)), this.depErrorService.getPkgDepErrors$(pkgId), ]).pipe(map(([pkg, depErrors]) => getPackageInfo(pkg, depErrors))) } diff --git a/frontend/projects/ui/src/app/services/api/embassy-api.service.ts b/frontend/projects/ui/src/app/services/api/embassy-api.service.ts index 2a10bc473..7dd234969 100644 --- a/frontend/projects/ui/src/app/services/api/embassy-api.service.ts +++ b/frontend/projects/ui/src/app/services/api/embassy-api.service.ts @@ -1,4 +1,4 @@ -import { BehaviorSubject, Observable } from 'rxjs' +import { Observable, Subject } from 'rxjs' import { Update } from 'patch-db-client' import { RR } from './api.types' import { DataModel } from 'src/app/services/patch-db/data-model' @@ -6,7 +6,7 @@ import { Log } from '@start9labs/shared' import { WebSocketSubjectConfig } from 'rxjs/webSocket' export abstract class ApiService { - readonly patchStream$ = new BehaviorSubject[]>([]) + readonly patchStream$ = new Subject[]>() // http diff --git a/frontend/projects/ui/src/app/services/api/embassy-mock-api.service.ts b/frontend/projects/ui/src/app/services/api/embassy-mock-api.service.ts index c8c1a1f22..5f11b085f 100644 --- a/frontend/projects/ui/src/app/services/api/embassy-mock-api.service.ts +++ b/frontend/projects/ui/src/app/services/api/embassy-mock-api.service.ts @@ -26,7 +26,8 @@ import { interval, map, Observable, - ReplaySubject, + shareReplay, + Subject, switchMap, tap, timer, @@ -50,8 +51,8 @@ const PROGRESS: InstallProgress = { @Injectable() export class MockApiService extends ApiService { - readonly mockWsSource$ = new ReplaySubject>() - private readonly revertTime = 2000 + readonly mockWsSource$ = new Subject>() + private readonly revertTime = 1800 sequence = 0 constructor( @@ -149,7 +150,6 @@ export class MockApiService extends ApiService { async echo(params: RR.EchoReq, url?: string): Promise { if (url) { const num = Math.floor(Math.random() * 10) + 1 - console.warn(num) if (num > 8) return params.message throw new Error() } @@ -158,7 +158,9 @@ export class MockApiService extends ApiService { } openPatchWebsocket$(): Observable> { - return this.mockWsSource$ + return this.mockWsSource$.pipe( + shareReplay({ bufferSize: 1, refCount: true }), + ) } openLogsWebsocket$(config: WebSocketSubjectConfig): Observable { diff --git a/frontend/projects/ui/src/app/services/api/mock-patch.ts b/frontend/projects/ui/src/app/services/api/mock-patch.ts index 90044705c..f533a566e 100644 --- a/frontend/projects/ui/src/app/services/api/mock-patch.ts +++ b/frontend/projects/ui/src/app/services/api/mock-patch.ts @@ -2,7 +2,6 @@ import { DataModel, DockerIoFormat, HealthResult, - Manifest, PackageMainStatus, PackageState, } from 'src/app/services/patch-db/data-model' diff --git a/frontend/projects/ui/src/app/services/dep-error.service.ts b/frontend/projects/ui/src/app/services/dep-error.service.ts index 1b1880f72..1ba4f11a9 100644 --- a/frontend/projects/ui/src/app/services/dep-error.service.ts +++ b/frontend/projects/ui/src/app/services/dep-error.service.ts @@ -1,14 +1,6 @@ import { Injectable } from '@angular/core' import { Emver } from '@start9labs/shared' -import { - distinctUntilChanged, - filter, - map, - pairwise, - shareReplay, - startWith, - tap, -} from 'rxjs/operators' +import { distinctUntilChanged, map, shareReplay } from 'rxjs/operators' import { PatchDB } from 'patch-db-client' import { DataModel, @@ -43,7 +35,7 @@ export class DepErrorService { ), ), distinctUntilChanged(deepEqual), - shareReplay(1), + shareReplay({ bufferSize: 1, refCount: true }), ) constructor( diff --git a/frontend/projects/ui/src/app/services/marketplace.service.ts b/frontend/projects/ui/src/app/services/marketplace.service.ts index 47ca8f428..9592e7da1 100644 --- a/frontend/projects/ui/src/app/services/marketplace.service.ts +++ b/frontend/projects/ui/src/app/services/marketplace.service.ts @@ -77,7 +77,7 @@ export class MarketplaceService implements AbstractMarketplaceService { map(({ 'selected-url': url, 'known-hosts': hosts }) => toStoreIdentity(url, hosts[url]), ), - shareReplay(1), + shareReplay({ bufferSize: 1, refCount: true }), ) private readonly marketplace$ = this.knownHosts$.pipe( @@ -105,7 +105,7 @@ export class MarketplaceService implements AbstractMarketplaceService { }, {}, ), - shareReplay(1), + shareReplay({ bufferSize: 1, refCount: true }), ) private readonly filteredMarketplace$ = combineLatest([ diff --git a/frontend/projects/ui/src/app/services/patch-monitor.service.ts b/frontend/projects/ui/src/app/services/patch-monitor.service.ts index ac395798d..cafb9f0fe 100644 --- a/frontend/projects/ui/src/app/services/patch-monitor.service.ts +++ b/frontend/projects/ui/src/app/services/patch-monitor.service.ts @@ -13,13 +13,9 @@ import { LocalStorageBootstrap } from './patch-db/local-storage-bootstrap' export class PatchMonitorService extends Observable { // @TODO not happy with Observable private readonly stream$ = this.authService.isVerified$.pipe( - tap(verified => { - if (verified) { - this.patch.start(this.bootstrapper) - } else { - this.patch.stop() - } - }), + tap(verified => + verified ? this.patch.start(this.bootstrapper) : this.patch.stop(), + ), ) constructor( diff --git a/frontend/projects/ui/src/app/services/time-service.ts b/frontend/projects/ui/src/app/services/time-service.ts index 2f0193da4..355a671ff 100644 --- a/frontend/projects/ui/src/app/services/time-service.ts +++ b/frontend/projects/ui/src/app/services/time-service.ts @@ -18,11 +18,7 @@ import { combineLatest, from, timer } from 'rxjs' export class TimeService { private readonly startTimeMs$ = this.patch .watch$('server-info', 'system-start-time') - .pipe( - take(1), - map(startTime => new Date(startTime).valueOf()), - shareReplay(), - ) + .pipe(map(startTime => new Date(startTime).valueOf())) readonly systemTime$ = from(this.apiService.getSystemTime({})).pipe( switchMap(utcStr => { From 3ca9035fdb26e6cdbaa8ca09312af337cfda4ae4 Mon Sep 17 00:00:00 2001 From: Mariusz Kogen Date: Fri, 6 Oct 2023 17:29:54 +0200 Subject: [PATCH 22/38] Use the correct OS name (#2445) Use correct OS name --- backend/src/install/mod.rs | 2 +- backend/src/update/mod.rs | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/backend/src/install/mod.rs b/backend/src/install/mod.rs index 4f77ae1fa..c2546e6eb 100644 --- a/backend/src/install/mod.rs +++ b/backend/src/install/mod.rs @@ -699,7 +699,7 @@ pub async fn download_install_s9pk( for (p, lan) in cfg { if p.0 == 80 && lan.ssl || p.0 == 443 && !lan.ssl { return Err(Error::new( - eyre!("SSL Conflict with embassyOS"), + eyre!("SSL Conflict with StartOS"), ErrorKind::LanPortConflict, )); } diff --git a/backend/src/update/mod.rs b/backend/src/update/mod.rs index 6e3d3e3b0..200650166 100644 --- a/backend/src/update/mod.rs +++ b/backend/src/update/mod.rs @@ -154,7 +154,7 @@ async fn maybe_do_update(ctx: RpcContext, marketplace_url: Url) -> Result

    From edcd1a3c5bd84e6b4f6d5186266cc8a18d05f5b8 Mon Sep 17 00:00:00 2001 From: Aiden McClelland <3732071+dr-bonez@users.noreply.github.com> Date: Mon, 16 Oct 2023 12:19:24 -0600 Subject: [PATCH 30/38] only use first sensor of each group for temp reporting (#2457) --- backend/src/system.rs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/backend/src/system.rs b/backend/src/system.rs index 65dfbd463..b0bcfde8e 100644 --- a/backend/src/system.rs +++ b/backend/src/system.rs @@ -588,7 +588,8 @@ async fn get_temp() -> Result { .flat_map(|(_, v)| v.as_object()) .flatten() .filter_map(|(k, v)| { - if k.ends_with("_input") { + // we have seen so far that `temp1` is always a composite reading of some sort, so we should just use that for each chip + if k.trim() == "temp1_input" { v.as_f64() } else { None From 5164c21923ee157ea5d7278b8c241bd55e83403c Mon Sep 17 00:00:00 2001 From: Matt Hill Date: Mon, 16 Oct 2023 12:23:12 -0600 Subject: [PATCH 31/38] stop while starting or restarting (#2460) --- .../app-show-status/app-show-status.component.html | 13 +++++++++---- .../app-show-status/app-show-status.component.ts | 8 ++++++++ 2 files changed, 17 insertions(+), 4 deletions(-) diff --git a/frontend/projects/ui/src/app/pages/apps-routes/app-show/components/app-show-status/app-show-status.component.html b/frontend/projects/ui/src/app/pages/apps-routes/app-show/components/app-show-status/app-show-status.component.html index b26bb45af..6a8676ebc 100644 --- a/frontend/projects/ui/src/app/pages/apps-routes/app-show/components/app-show-status/app-show-status.component.html +++ b/frontend/projects/ui/src/app/pages/apps-routes/app-show/components/app-show-status/app-show-status.component.html @@ -15,11 +15,16 @@ + + + Stop + - - - Stop - Date: Mon, 16 Oct 2023 12:34:12 -0600 Subject: [PATCH 32/38] fix some causes of start wonkiness on update (#2458) * fix some causes of start wonkiness on update * fix race condition with manager Co-authored-by: J H * only restart if running * fix start function * clean up clode * fix restart logic --------- Co-authored-by: J H --- backend/src/control.rs | 9 ++- backend/src/install/mod.rs | 52 +++++--------- backend/src/manager/mod.rs | 94 ++++++++++++------------- backend/src/manager/transition_state.rs | 15 ++-- backend/src/util/mod.rs | 21 +++++- libs/helpers/src/lib.rs | 6 ++ libs/models/src/errors.rs | 2 + 7 files changed, 108 insertions(+), 91 deletions(-) diff --git a/backend/src/control.rs b/backend/src/control.rs index a84fe7283..6d72a4043 100644 --- a/backend/src/control.rs +++ b/backend/src/control.rs @@ -27,7 +27,8 @@ pub async fn start(#[context] ctx: RpcContext, #[arg] id: PackageId) -> Result<( .get(&(id, version)) .await .ok_or_else(|| Error::new(eyre!("Manager not found"), crate::ErrorKind::InvalidRequest))? - .start(); + .start() + .await; Ok(()) } @@ -62,7 +63,8 @@ pub async fn stop(#[context] ctx: RpcContext, #[arg] id: PackageId) -> Result Result .get(&(id, version)) .await .ok_or_else(|| Error::new(eyre!("Manager not found"), crate::ErrorKind::InvalidRequest))? - .restart(); + .restart() + .await; Ok(()) } diff --git a/backend/src/install/mod.rs b/backend/src/install/mod.rs index c2546e6eb..cb21739cc 100644 --- a/backend/src/install/mod.rs +++ b/backend/src/install/mod.rs @@ -22,7 +22,7 @@ use serde_json::{json, Value}; use tokio::fs::{File, OpenOptions}; use tokio::io::{AsyncRead, AsyncSeek, AsyncSeekExt, AsyncWriteExt}; use tokio::process::Command; -use tokio::sync::{oneshot, Mutex}; +use tokio::sync::oneshot; use tokio_stream::wrappers::ReadDirStream; use tracing::instrument; @@ -666,23 +666,11 @@ pub async fn download_install_s9pk( ) -> Result<(), Error> { let pkg_id = &temp_manifest.id; let version = &temp_manifest.version; - let previous_state: Arc>> = Default::default(); let db = ctx.db.peek().await?; - let after_previous_state = previous_state.clone(); if let Result::<(), Error>::Err(e) = { let ctx = ctx.clone(); async move { - if db - .as_package_data() - .as_idx(&pkg_id) - .or_not_found(&pkg_id)? - .as_installed() - .is_some() - { - *previous_state.lock().await = - crate::control::stop(ctx.clone(), pkg_id.clone()).await.ok(); - } // // Build set of existing manifests let mut manifests = Vec::new(); for (_id, pkg) in db.as_package_data().as_entries()? { @@ -779,15 +767,6 @@ pub async fn download_install_s9pk( tracing::debug!("{:?}", e); } - let previous_state = after_previous_state.lock().await; - if previous_state - .as_ref() - .map(|x| x.running()) - .unwrap_or(false) - { - crate::control::start(ctx.clone(), pkg_id.clone()).await?; - } - Err(e) } else { Ok::<_, Error>(()) @@ -845,7 +824,12 @@ pub async fn install_s9pk( .await .with_kind(crate::ErrorKind::Deserialization)?, )), - Err(e) if e.status() == Some(StatusCode::BAD_REQUEST) => Ok(None), + Err(e) + if e.status() == Some(StatusCode::BAD_REQUEST) + || e.status() == Some(StatusCode::NOT_FOUND) => + { + Ok(None) + } Err(e) => Err(e), } .with_kind(crate::ErrorKind::Registry)? @@ -1033,6 +1017,12 @@ pub async fn install_s9pk( ) .await?; + let peek = ctx.db.peek().await?; + let prev = peek + .as_package_data() + .as_idx(pkg_id) + .or_not_found(pkg_id)? + .de()?; let mut sql_tx = ctx.secret_store.begin().await?; tracing::info!("Install {}@{}: Creating volumes", pkg_id, version); @@ -1095,12 +1085,6 @@ pub async fn install_s9pk( CurrentDependents(deps) }; - let peek = ctx.db.peek().await?; - let prev = peek - .as_package_data() - .as_idx(pkg_id) - .or_not_found(pkg_id)? - .de()?; let installed = InstalledPackageInfo { status: Status { configured: manifest.config.is_none(), @@ -1240,11 +1224,7 @@ pub async fn install_s9pk( manager.configure(configure_context).await?; } - if auto_start { - manager.start(); - } - - for to_configure in to_configure { + for to_configure in to_configure.into_iter().filter(|(dep, _)| dep != pkg_id) { if let Err(e) = async { ctx.managers .get(&to_configure) @@ -1266,6 +1246,10 @@ pub async fn install_s9pk( } } + if auto_start { + manager.start().await; + } + tracing::info!("Install {}@{}: Complete", pkg_id, version); Ok(()) diff --git a/backend/src/manager/mod.rs b/backend/src/manager/mod.rs index ceb535302..85e302cc5 100644 --- a/backend/src/manager/mod.rs +++ b/backend/src/manager/mod.rs @@ -111,7 +111,7 @@ pub struct Manager { seed: Arc, manage_container: Arc, - transition: Arc>>, + transition: Arc>, persistent_container: ManagerPersistentContainer, pub gid: Arc, @@ -140,60 +140,67 @@ impl Manager { }) } - pub fn start(&self) { - self._transition_abort(); - self.manage_container.to_desired(StartStop::Start); - } - pub fn stop(&self) { - self._transition_abort(); - self.manage_container.to_desired(StartStop::Stop); - } - pub fn restart(&self) { + /// awaiting this does not wait for the start to complete + pub async fn start(&self) { if self._is_transition_restart() { return; } - self._transition_replace(self._transition_restart()); + self._transition_abort().await; + self.manage_container.to_desired(StartStop::Start); } + + /// awaiting this does not wait for the stop to complete + pub async fn stop(&self) { + self._transition_abort().await; + self.manage_container.to_desired(StartStop::Stop); + } + /// awaiting this does not wait for the restart to complete + pub async fn restart(&self) { + if self._is_transition_restart() + && *self.manage_container.desired_state().borrow() == StartStop::Stop + { + return; + } + if self.manage_container.desired_state().borrow().is_start() { + self._transition_replace(self._transition_restart()).await; + } + } + /// awaiting this does not wait for the restart to complete pub async fn configure( &self, configure_context: ConfigureContext, ) -> Result, Error> { - if self._is_transition_configure() { - return Ok(configure_context.breakages); + if self._is_transition_restart() { + self._transition_abort().await; + } else if self._is_transition_backup() { + return Err(Error::new( + eyre!("Can't configure because service is backing up"), + ErrorKind::InvalidRequest, + )); } let context = self.seed.ctx.clone(); let id = self.seed.manifest.id.clone(); let breakages = configure(context, id, configure_context).await?; - self._transition_replace({ - let manage_container = self.manage_container.clone(); - let state_reverter = DesiredStateReverter::new(manage_container.clone()); - let transition = self.transition.clone(); - TransitionState::Configuring( - tokio::spawn(async move { - manage_container.wait_for_desired(StartStop::Stop).await; + self.restart().await; - state_reverter.revert().await; - transition.send_replace(Default::default()); - }) - .into(), - ) - }); Ok(breakages) } + + /// awaiting this does not wait for the backup to complete pub async fn backup(&self, backup_guard: BackupGuard) -> BackupReturn { if self._is_transition_backup() { return BackupReturn::AlreadyRunning(PackageBackupReport { - error: Some("Can't do backup because service is in a backing up state".to_owned()), + error: Some("Can't do backup because service is already backing up".to_owned()), }); } let (transition_state, done) = self._transition_backup(backup_guard); - self._transition_replace(transition_state); + self._transition_replace(transition_state).await; done.await } pub async fn exit(&self) { - self._transition_abort(); + self._transition_abort().await; self.manage_container .wait_for_desired(StartStop::Stop) .await; @@ -220,19 +227,14 @@ impl Manager { .map(|x| x.rpc_client()) } - fn _transition_abort(&self) { - if let Some(transition) = self - .transition - .send_replace(Default::default()) - .join_handle() - { - (**transition).abort(); - } - } - fn _transition_replace(&self, transition_state: TransitionState) { + async fn _transition_abort(&self) { self.transition - .send_replace(Arc::new(transition_state)) - .abort(); + .send_replace(Default::default()) + .abort() + .await; + } + async fn _transition_replace(&self, transition_state: TransitionState) { + self.transition.send_replace(transition_state).abort().await; } pub(super) fn perform_restart(&self) -> impl Future> + 'static { @@ -322,15 +324,11 @@ impl Manager { } fn _is_transition_restart(&self) -> bool { let transition = self.transition.borrow(); - matches!(**transition, TransitionState::Restarting(_)) + matches!(*transition, TransitionState::Restarting(_)) } fn _is_transition_backup(&self) -> bool { let transition = self.transition.borrow(); - matches!(**transition, TransitionState::BackingUp(_)) - } - fn _is_transition_configure(&self) -> bool { - let transition = self.transition.borrow(); - matches!(**transition, TransitionState::Configuring(_)) + matches!(*transition, TransitionState::BackingUp(_)) } } @@ -602,7 +600,7 @@ impl Drop for DesiredStateReverter { type BackupDoneSender = oneshot::Sender>; fn finish_up_backup_task( - transition: Arc>>, + transition: Arc>, send: BackupDoneSender, ) -> impl FnOnce(Result, Error>) -> BoxFuture<'static, ()> { move |result| { diff --git a/backend/src/manager/transition_state.rs b/backend/src/manager/transition_state.rs index 6826aef09..122c0f703 100644 --- a/backend/src/manager/transition_state.rs +++ b/backend/src/manager/transition_state.rs @@ -5,21 +5,26 @@ use helpers::NonDetachingJoinHandle; pub(super) enum TransitionState { BackingUp(NonDetachingJoinHandle<()>), Restarting(NonDetachingJoinHandle<()>), - Configuring(NonDetachingJoinHandle<()>), None, } impl TransitionState { - pub(super) fn join_handle(&self) -> Option<&NonDetachingJoinHandle<()>> { + pub(super) fn take(&mut self) -> Self { + std::mem::take(self) + } + pub(super) fn into_join_handle(self) -> Option> { Some(match self { TransitionState::BackingUp(a) => a, TransitionState::Restarting(a) => a, - TransitionState::Configuring(a) => a, TransitionState::None => return None, }) } - pub(super) fn abort(&self) { - self.join_handle().map(|transition| transition.abort()); + pub(super) async fn abort(&mut self) { + if let Some(s) = self.take().into_join_handle() { + if s.wait_for_abort().await.is_ok() { + tracing::trace!("transition completed before abort"); + } + } } } diff --git a/backend/src/util/mod.rs b/backend/src/util/mod.rs index 428bf5c6e..7f2c62b5d 100644 --- a/backend/src/util/mod.rs +++ b/backend/src/util/mod.rs @@ -6,6 +6,7 @@ use std::pin::Pin; use std::process::Stdio; use std::sync::Arc; use std::task::{Context, Poll}; +use std::time::Duration; use async_trait::async_trait; use clap::ArgMatches; @@ -50,13 +51,31 @@ impl std::error::Error for Never {} #[async_trait::async_trait] pub trait Invoke { async fn invoke(&mut self, error_kind: crate::ErrorKind) -> Result, Error>; + async fn invoke_timeout( + &mut self, + error_kind: crate::ErrorKind, + timeout: Option, + ) -> Result, Error>; } #[async_trait::async_trait] impl Invoke for tokio::process::Command { async fn invoke(&mut self, error_kind: crate::ErrorKind) -> Result, Error> { + self.invoke_timeout(error_kind, None).await + } + async fn invoke_timeout( + &mut self, + error_kind: crate::ErrorKind, + timeout: Option, + ) -> Result, Error> { + self.kill_on_drop(true); self.stdout(Stdio::piped()); self.stderr(Stdio::piped()); - let res = self.output().await?; + let res = match timeout { + None => self.output().await?, + Some(t) => tokio::time::timeout(t, self.output()) + .await + .with_kind(ErrorKind::Timeout)??, + }; crate::ensure_code!( res.status.success(), error_kind, diff --git a/libs/helpers/src/lib.rs b/libs/helpers/src/lib.rs index b854f142c..226787590 100644 --- a/libs/helpers/src/lib.rs +++ b/libs/helpers/src/lib.rs @@ -70,6 +70,12 @@ pub async fn canonicalize( #[pin_project::pin_project(PinnedDrop)] pub struct NonDetachingJoinHandle(#[pin] JoinHandle); +impl NonDetachingJoinHandle { + pub async fn wait_for_abort(self) -> Result { + self.abort(); + self.await + } +} impl From> for NonDetachingJoinHandle { fn from(t: JoinHandle) -> Self { NonDetachingJoinHandle(t) diff --git a/libs/models/src/errors.rs b/libs/models/src/errors.rs index c7c733ca6..f22624d36 100644 --- a/libs/models/src/errors.rs +++ b/libs/models/src/errors.rs @@ -80,6 +80,7 @@ pub enum ErrorKind { Lshw = 68, CpuSettings = 69, Firmware = 70, + Timeout = 71, } impl ErrorKind { pub fn as_str(&self) -> &'static str { @@ -155,6 +156,7 @@ impl ErrorKind { Lshw => "LSHW Error", CpuSettings => "CPU Settings Error", Firmware => "Firmware Error", + Timeout => "Timeout Error", } } } From afbab293a89e408509f1739ce4cb9a1173692e81 Mon Sep 17 00:00:00 2001 From: J H <2364004+Blu-J@users.noreply.github.com> Date: Mon, 16 Oct 2023 16:26:59 -0600 Subject: [PATCH 33/38] Chore: remove an arc mutex that wasn't neccessary (#2462) --- libs/js_engine/src/lib.rs | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/libs/js_engine/src/lib.rs b/libs/js_engine/src/lib.rs index d3af82651..023726d7f 100644 --- a/libs/js_engine/src/lib.rs +++ b/libs/js_engine/src/lib.rs @@ -351,16 +351,14 @@ impl JsExecutionEnvironment { startup_snapshot: Some(Snapshot::Static(SNAPSHOT_BYTES)), ..Default::default() }; - let runtime = Arc::new(Mutex::new(JsRuntime::new(runtime_options))); + let mut runtime = JsRuntime::new(runtime_options); let future = async move { let mod_id = runtime - .lock() - .await .load_main_module(&"file:///loadModule.js".parse().unwrap(), None) .await?; - let evaluated = runtime.lock().await.mod_evaluate(mod_id); - let res = runtime.lock().await.run_event_loop(false).await; + let evaluated = runtime.mod_evaluate(mod_id); + let res = runtime.run_event_loop(false).await; res?; evaluated.await??; Ok::<_, AnyError>(()) From 202695096a908a832906ae929cd73c0bbf5fba50 Mon Sep 17 00:00:00 2001 From: Aiden McClelland <3732071+dr-bonez@users.noreply.github.com> Date: Tue, 17 Oct 2023 09:49:58 -0600 Subject: [PATCH 34/38] Feature/simple syncdb (#2464) * simplify db sync on rpc endpoints * switch to patch-db master * update fe for websocket only stream * fix api --------- Co-authored-by: Matt Hill --- backend/src/action.rs | 2 +- backend/src/backup/backup_bulk.rs | 4 +- backend/src/backup/mod.rs | 2 +- backend/src/backup/restore.rs | 2 +- backend/src/config/mod.rs | 4 +- backend/src/config/spec.rs | 8 +-- backend/src/context/rpc.rs | 2 +- backend/src/control.rs | 6 +- backend/src/db/mod.rs | 22 ++---- backend/src/db/prelude.rs | 6 +- backend/src/dependencies.rs | 2 +- backend/src/init.rs | 2 +- backend/src/install/cleanup.rs | 4 +- backend/src/install/mod.rs | 8 +-- backend/src/manager/health.rs | 2 +- backend/src/manager/manager_container.rs | 4 +- backend/src/manager/mod.rs | 4 +- backend/src/middleware/db.rs | 46 ++----------- backend/src/notifications.rs | 2 +- backend/src/properties.rs | 2 +- backend/src/system.rs | 2 +- backend/src/update/mod.rs | 2 +- backend/src/version/mod.rs | 2 +- backend/src/version/v0_3_5.rs | 2 +- .../app/services/api/embassy-api.service.ts | 4 +- .../services/api/embassy-live-api.service.ts | 47 +++++-------- .../services/api/embassy-mock-api.service.ts | 68 ++++++++++--------- .../app/services/patch-db/patch-db.factory.ts | 6 +- patch-db | 2 +- 29 files changed, 101 insertions(+), 168 deletions(-) diff --git a/backend/src/action.rs b/backend/src/action.rs index 07fe1759b..3223aaa86 100644 --- a/backend/src/action.rs +++ b/backend/src/action.rs @@ -134,7 +134,7 @@ pub async fn action( let manifest = ctx .db .peek() - .await? + .await .as_package_data() .as_idx(&pkg_id) .or_not_found(&pkg_id)? diff --git a/backend/src/backup/backup_bulk.rs b/backend/src/backup/backup_bulk.rs index 5bab4bb78..84def92f5 100644 --- a/backend/src/backup/backup_bulk.rs +++ b/backend/src/backup/backup_bulk.rs @@ -56,7 +56,7 @@ pub async fn backup_all( package_ids: Option>, #[arg] password: crate::auth::PasswordType, ) -> Result<(), Error> { - let db = ctx.db.peek().await?; + let db = ctx.db.peek().await; let old_password_decrypted = old_password .as_ref() .unwrap_or(&password) @@ -265,7 +265,7 @@ async fn perform_backup( } } - let ui = ctx.db.peek().await?.into_ui().de()?; + let ui = ctx.db.peek().await.into_ui().de()?; let mut os_backup_file = AtomicFile::new( backup_guard.lock().await.as_ref().join("os-backup.cbor"), diff --git a/backend/src/backup/mod.rs b/backend/src/backup/mod.rs index 670c01c29..2f3f9bd8f 100644 --- a/backend/src/backup/mod.rs +++ b/backend/src/backup/mod.rs @@ -134,7 +134,7 @@ impl BackupActions { let marketplace_url = ctx .db .peek() - .await? + .await .as_package_data() .as_idx(&pkg_id) .or_not_found(pkg_id)? diff --git a/backend/src/backup/restore.rs b/backend/src/backup/restore.rs index ac8d07f48..0fc0b6224 100644 --- a/backend/src/backup/restore.rs +++ b/backend/src/backup/restore.rs @@ -310,7 +310,7 @@ async fn assure_restoring( let mut insert_packages = BTreeMap::new(); for id in ids { - let peek = ctx.db.peek().await?; + let peek = ctx.db.peek().await; let model = peek.as_package_data().as_idx(&id); diff --git a/backend/src/config/mod.rs b/backend/src/config/mod.rs index 2d3a30fd7..3674142ab 100644 --- a/backend/src/config/mod.rs +++ b/backend/src/config/mod.rs @@ -167,7 +167,7 @@ pub async fn get( #[arg(long = "format")] format: Option, ) -> Result { - let db = ctx.db.peek().await?; + let db = ctx.db.peek().await; let manifest = db .as_package_data() .as_idx(&id) @@ -256,7 +256,7 @@ pub async fn configure( id: &PackageId, configure_context: ConfigureContext, ) -> Result, Error> { - let db = ctx.db.peek().await?; + let db = ctx.db.peek().await; let package = db .as_package_data() .as_idx(id) diff --git a/backend/src/config/spec.rs b/backend/src/config/spec.rs index b11cefaf2..6a5d96ef1 100644 --- a/backend/src/config/spec.rs +++ b/backend/src/config/spec.rs @@ -1696,7 +1696,6 @@ impl TorAddressPointer { .db .peek() .await - .map_err(|e| ConfigurationError::SystemError(e))? .as_package_data() .as_idx(&self.package_id) .and_then(|pde| pde.as_installed()) @@ -1739,7 +1738,6 @@ impl LanAddressPointer { .db .peek() .await - .map_err(|e| ConfigurationError::SystemError(e))? .as_package_data() .as_idx(&self.package_id) .and_then(|pde| pde.as_installed()) @@ -1775,11 +1773,7 @@ impl ConfigPointer { Ok(self.select(&Value::Object(cfg.clone()))) } else { let id = &self.package_id; - let db = ctx - .db - .peek() - .await - .map_err(|e| ConfigurationError::SystemError(e))?; + let db = ctx.db.peek().await; let manifest = db.as_package_data().as_idx(id).map(|pde| pde.as_manifest()); let cfg_actions = manifest.and_then(|m| m.as_config().transpose_ref()); if let (Some(manifest), Some(cfg_actions)) = (manifest, cfg_actions) { diff --git a/backend/src/context/rpc.rs b/backend/src/context/rpc.rs index cd3f1676c..e4fd66c97 100644 --- a/backend/src/context/rpc.rs +++ b/backend/src/context/rpc.rs @@ -276,7 +276,7 @@ impl RpcContext { }) .await?; - let peek = self.db.peek().await?; + let peek = self.db.peek().await; for (package_id, package) in peek.as_package_data().as_entries()?.into_iter() { let action = match package.as_match() { diff --git a/backend/src/control.rs b/backend/src/control.rs index 6d72a4043..58e39ac14 100644 --- a/backend/src/control.rs +++ b/backend/src/control.rs @@ -12,7 +12,7 @@ use crate::Error; #[command(display(display_none), metadata(sync_db = true))] #[instrument(skip_all)] pub async fn start(#[context] ctx: RpcContext, #[arg] id: PackageId) -> Result<(), Error> { - let peek = ctx.db.peek().await?; + let peek = ctx.db.peek().await; let version = peek .as_package_data() .as_idx(&id) @@ -35,7 +35,7 @@ pub async fn start(#[context] ctx: RpcContext, #[arg] id: PackageId) -> Result<( #[command(display(display_none), metadata(sync_db = true))] pub async fn stop(#[context] ctx: RpcContext, #[arg] id: PackageId) -> Result { - let peek = ctx.db.peek().await?; + let peek = ctx.db.peek().await; let version = peek .as_package_data() .as_idx(&id) @@ -71,7 +71,7 @@ pub async fn stop(#[context] ctx: RpcContext, #[arg] id: PackageId) -> Result Result<(), Error> { - let peek = ctx.db.peek().await?; + let peek = ctx.db.peek().await; let version = peek .as_package_data() .as_idx(&id) diff --git a/backend/src/db/mod.rs b/backend/src/db/mod.rs index 245abbb1c..03ad94338 100644 --- a/backend/src/db/mod.rs +++ b/backend/src/db/mod.rs @@ -37,7 +37,7 @@ async fn ws_handler< session: Option<(HasValidSession, HashSessionToken)>, ws_fut: WSFut, ) -> Result<(), Error> { - let (dump, sub) = ctx.db.dump_and_sub().await?; + let (dump, sub) = ctx.db.dump_and_sub().await; let mut stream = ws_fut .await .with_kind(ErrorKind::Network)? @@ -174,7 +174,7 @@ pub async fn subscribe(ctx: RpcContext, req: Request) -> Result Result<(), RpcError> { Ok(()) } @@ -186,20 +186,6 @@ pub enum RevisionsRes { Dump(Dump), } -#[command(display(display_serializable))] -pub async fn revisions( - #[context] ctx: RpcContext, - #[arg] since: u64, - #[allow(unused_variables)] - #[arg(long = "format")] - format: Option, -) -> Result { - Ok(match ctx.db.sync(since).await? { - Ok(revs) => RevisionsRes::Revisions(revs), - Err(dump) => RevisionsRes::Dump(dump), - }) -} - #[instrument(skip_all)] async fn cli_dump( ctx: CliContext, @@ -207,7 +193,7 @@ async fn cli_dump( path: Option, ) -> Result { let dump = if let Some(path) = path { - PatchDb::open(path).await?.dump().await? + PatchDb::open(path).await?.dump().await } else { rpc_toolkit::command_helpers::call_remote( ctx, @@ -235,7 +221,7 @@ pub async fn dump( #[arg] path: Option, ) -> Result { - Ok(ctx.db.dump().await?) + Ok(ctx.db.dump().await) } fn apply_expr(input: jaq_core::Val, expr: &str) -> Result { diff --git a/backend/src/db/prelude.rs b/backend/src/db/prelude.rs index 4fce5fbcb..922a47500 100644 --- a/backend/src/db/prelude.rs +++ b/backend/src/db/prelude.rs @@ -28,7 +28,7 @@ where #[async_trait::async_trait] pub trait PatchDbExt { - async fn peek(&self) -> Result; + async fn peek(&self) -> DatabaseModel; async fn mutate( &self, f: impl FnOnce(&mut DatabaseModel) -> Result + UnwindSafe + Send, @@ -40,8 +40,8 @@ pub trait PatchDbExt { } #[async_trait::async_trait] impl PatchDbExt for PatchDb { - async fn peek(&self) -> Result { - Ok(DatabaseModel::from(self.dump().await?.value)) + async fn peek(&self) -> DatabaseModel { + DatabaseModel::from(self.dump().await.value) } async fn mutate( &self, diff --git a/backend/src/dependencies.rs b/backend/src/dependencies.rs index 299518057..dfddecd93 100644 --- a/backend/src/dependencies.rs +++ b/backend/src/dependencies.rs @@ -170,7 +170,7 @@ pub async fn configure_logic( ctx: RpcContext, (pkg_id, dependency_id): (PackageId, PackageId), ) -> Result { - let db = ctx.db.peek().await?; + let db = ctx.db.peek().await; let pkg = db .as_package_data() .as_idx(&pkg_id) diff --git a/backend/src/init.rs b/backend/src/init.rs index 58d888b48..b98a23921 100644 --- a/backend/src/init.rs +++ b/backend/src/init.rs @@ -204,7 +204,7 @@ pub async fn init(cfg: &RpcContextConfig) -> Result { let account = AccountInfo::load(&secret_store).await?; let db = cfg.db(&account).await?; tracing::info!("Opened PatchDB"); - let peek = db.peek().await?; + let peek = db.peek().await; let mut server_info = peek.as_server_info().de()?; // write to ca cert store diff --git a/backend/src/install/cleanup.rs b/backend/src/install/cleanup.rs index e47b7ca6b..9d87f63e9 100644 --- a/backend/src/install/cleanup.rs +++ b/backend/src/install/cleanup.rs @@ -62,7 +62,7 @@ pub async fn cleanup_failed(ctx: &RpcContext, id: &PackageId) -> Result<(), Erro if let Some(version) = match ctx .db .peek() - .await? + .await .as_package_data() .as_idx(id) .or_not_found(id)? @@ -141,7 +141,7 @@ pub async fn uninstall(ctx: &RpcContext, secrets: &mut Ex, id: &PackageId) - where for<'a> &'a mut Ex: Executor<'a, Database = Postgres>, { - let db = ctx.db.peek().await?; + let db = ctx.db.peek().await; let entry = db .as_package_data() .as_idx(id) diff --git a/backend/src/install/mod.rs b/backend/src/install/mod.rs index cb21739cc..744e14664 100644 --- a/backend/src/install/mod.rs +++ b/backend/src/install/mod.rs @@ -64,7 +64,7 @@ pub const PKG_WASM_DIR: &str = "package-data/wasm"; #[command(display(display_serializable))] pub async fn list(#[context] ctx: RpcContext) -> Result { - Ok(ctx.db.peek().await?.as_package_data().as_entries()? + Ok(ctx.db.peek().await.as_package_data().as_entries()? .iter() .filter_map(|(id, pde)| { let status = match pde.as_match() { @@ -666,7 +666,7 @@ pub async fn download_install_s9pk( ) -> Result<(), Error> { let pkg_id = &temp_manifest.id; let version = &temp_manifest.version; - let db = ctx.db.peek().await?; + let db = ctx.db.peek().await; if let Result::<(), Error>::Err(e) = { let ctx = ctx.clone(); @@ -786,7 +786,7 @@ pub async fn install_s9pk( rdr.validated(); let developer_key = rdr.developer_key().clone(); rdr.reset().await?; - let db = ctx.db.peek().await?; + let db = ctx.db.peek().await; tracing::info!("Install {}@{}: Unpacking Manifest", pkg_id, version); let manifest = progress @@ -1017,7 +1017,7 @@ pub async fn install_s9pk( ) .await?; - let peek = ctx.db.peek().await?; + let peek = ctx.db.peek().await; let prev = peek .as_package_data() .as_idx(pkg_id) diff --git a/backend/src/manager/health.rs b/backend/src/manager/health.rs index 17e968f21..30f18051a 100644 --- a/backend/src/manager/health.rs +++ b/backend/src/manager/health.rs @@ -11,7 +11,7 @@ use crate::Error; #[instrument(skip_all)] pub async fn check(ctx: &RpcContext, id: &PackageId) -> Result<(), Error> { let (manifest, started) = { - let peeked = ctx.db.peek().await?; + let peeked = ctx.db.peek().await; let pde = peeked .as_package_data() .as_idx(id) diff --git a/backend/src/manager/manager_container.rs b/backend/src/manager/manager_container.rs index a4f44dbb4..32e11c2e5 100644 --- a/backend/src/manager/manager_container.rs +++ b/backend/src/manager/manager_container.rs @@ -53,7 +53,7 @@ impl ManageContainer { let current_state = Arc::new(watch::channel(StartStop::Stop).0); let desired_state = Arc::new( watch::channel::( - get_status(seed.ctx.db.peek().await?, &seed.manifest).into(), + get_status(seed.ctx.db.peek().await, &seed.manifest).into(), ) .0, ); @@ -103,7 +103,7 @@ impl ManageContainer { &self, seed: &manager_seed::ManagerSeed, ) -> Result<(), Error> { - let current_state = get_status(seed.ctx.db.peek().await?, &seed.manifest); + let current_state = get_status(seed.ctx.db.peek().await, &seed.manifest); self.override_main_status .send_modify(|x| *x = Some(current_state)); Ok(()) diff --git a/backend/src/manager/mod.rs b/backend/src/manager/mod.rs index 85e302cc5..8294ff586 100644 --- a/backend/src/manager/mod.rs +++ b/backend/src/manager/mod.rs @@ -267,7 +267,7 @@ impl Manager { let manage_container = self.manage_container.clone(); let seed = self.seed.clone(); async move { - let peek = seed.ctx.db.peek().await?; + let peek = seed.ctx.db.peek().await; let state_reverter = DesiredStateReverter::new(manage_container.clone()); let override_guard = manage_container.set_override(get_status(peek, &seed.manifest).backing_up())?; @@ -338,7 +338,7 @@ async fn configure( id: PackageId, mut configure_context: ConfigureContext, ) -> Result, Error> { - let db = ctx.db.peek().await?; + let db = ctx.db.peek().await; let id = &id; let ctx = &ctx; let overrides = &mut configure_context.overrides; diff --git a/backend/src/middleware/db.rs b/backend/src/middleware/db.rs index eeeeb299a..5eb0b482c 100644 --- a/backend/src/middleware/db.rs +++ b/backend/src/middleware/db.rs @@ -1,4 +1,3 @@ -use color_eyre::eyre::eyre; use futures::future::BoxFuture; use futures::FutureExt; use http::HeaderValue; @@ -11,7 +10,6 @@ use rpc_toolkit::yajrc::RpcMethod; use rpc_toolkit::Metadata; use crate::context::RpcContext; -use crate::{Error, ResultExt}; pub fn db(ctx: RpcContext) -> DynMiddleware { Box::new( @@ -22,49 +20,19 @@ pub fn db(ctx: RpcContext) -> DynMiddleware { async move { let m2: DynMiddlewareStage2 = Box::new(move |req, rpc_req| { async move { - let seq = req.headers.remove("x-patch-sequence"); let sync_db = metadata .get(rpc_req.method.as_str(), "sync_db") .unwrap_or(false); let m3: DynMiddlewareStage3 = Box::new(move |res, _| { async move { - if sync_db && seq.is_some() { - match async { - let seq = seq - .ok_or_else(|| { - Error::new( - eyre!("Missing X-Patch-Sequence"), - crate::ErrorKind::InvalidRequest, - ) - })? - .to_str() - .with_kind(crate::ErrorKind::InvalidRequest)? - .parse()?; - let res = ctx.db.sync(seq).await?; - let json = match res { - Ok(revs) => serde_json::to_vec(&revs), - Err(dump) => serde_json::to_vec(&[dump]), - } - .with_kind(crate::ErrorKind::Serialization)?; - Ok::<_, Error>(base64::encode_config( - &json, - base64::URL_SAFE, - )) - } - .await - { - Ok(a) => res - .headers - .append("X-Patch-Updates", HeaderValue::from_str(&a)?), - Err(e) => res.headers.append( - "X-Patch-Error", - HeaderValue::from_str(&base64::encode_config( - &e.to_string(), - base64::URL_SAFE, - ))?, - ), - }; + if sync_db { + res.headers.append( + "X-Patch-Sequence", + HeaderValue::from_str( + &ctx.db.sequence().await.to_string(), + )?, + ); } Ok(Ok(noop4())) } diff --git a/backend/src/notifications.rs b/backend/src/notifications.rs index afe92c571..73351471c 100644 --- a/backend/src/notifications.rs +++ b/backend/src/notifications.rs @@ -236,7 +236,7 @@ impl NotificationManager { subtype: T, debounce_interval: Option, ) -> Result<(), Error> { - let peek = db.peek().await?; + let peek = db.peek().await; if !self .should_notify(&package_id, &level, &title, debounce_interval) .await diff --git a/backend/src/properties.rs b/backend/src/properties.rs index da90a7370..851033b71 100644 --- a/backend/src/properties.rs +++ b/backend/src/properties.rs @@ -21,7 +21,7 @@ pub async fn properties(#[context] ctx: RpcContext, #[arg] id: PackageId) -> Res #[instrument(skip_all)] pub async fn fetch_properties(ctx: RpcContext, id: PackageId) -> Result { - let peek = ctx.db.peek().await?; + let peek = ctx.db.peek().await; let manifest = peek .as_package_data() diff --git a/backend/src/system.rs b/backend/src/system.rs index b0bcfde8e..aee32b50a 100644 --- a/backend/src/system.rs +++ b/backend/src/system.rs @@ -58,7 +58,7 @@ pub async fn enable_zram() -> Result<(), Error> { #[command(display(display_none))] pub async fn zram(#[context] ctx: RpcContext, #[arg] enable: bool) -> Result<(), Error> { - let db = ctx.db.peek().await?; + let db = ctx.db.peek().await; let zram = db.as_server_info().as_zram().de()?; if enable == zram { diff --git a/backend/src/update/mod.rs b/backend/src/update/mod.rs index 200650166..814a27b1d 100644 --- a/backend/src/update/mod.rs +++ b/backend/src/update/mod.rs @@ -76,7 +76,7 @@ fn display_update_result(status: UpdateResult, _: &ArgMatches) { #[instrument(skip_all)] async fn maybe_do_update(ctx: RpcContext, marketplace_url: Url) -> Result, Error> { - let peeked = ctx.db.peek().await?; + let peeked = ctx.db.peek().await; let latest_version: Version = ctx .client .get(with_query_params( diff --git a/backend/src/version/mod.rs b/backend/src/version/mod.rs index efdf1a387..e0651642d 100644 --- a/backend/src/version/mod.rs +++ b/backend/src/version/mod.rs @@ -163,7 +163,7 @@ where } pub async fn init(db: &PatchDb, secrets: &PgPool) -> Result<(), Error> { - let version = Version::from_util_version(db.peek().await?.as_server_info().as_version().de()?); + let version = Version::from_util_version(db.peek().await.as_server_info().as_version().de()?); match version { Version::V0_3_4(v) => v.0.migrate_to(&Current::new(), db.clone(), secrets).await?, diff --git a/backend/src/version/v0_3_5.rs b/backend/src/version/v0_3_5.rs index 19a85a345..bf48ac02c 100644 --- a/backend/src/version/v0_3_5.rs +++ b/backend/src/version/v0_3_5.rs @@ -28,7 +28,7 @@ impl VersionT for Version { &V0_3_0_COMPAT } async fn up(&self, db: PatchDb, _secrets: &PgPool) -> Result<(), Error> { - let peek = db.peek().await?; + let peek = db.peek().await; let mut url_replacements = BTreeMap::new(); for (_, pde) in peek.as_package_data().as_entries()? { for (dependency, info) in pde diff --git a/frontend/projects/ui/src/app/services/api/embassy-api.service.ts b/frontend/projects/ui/src/app/services/api/embassy-api.service.ts index 7dd234969..17ce2d9d6 100644 --- a/frontend/projects/ui/src/app/services/api/embassy-api.service.ts +++ b/frontend/projects/ui/src/app/services/api/embassy-api.service.ts @@ -1,4 +1,4 @@ -import { Observable, Subject } from 'rxjs' +import { Observable } from 'rxjs' import { Update } from 'patch-db-client' import { RR } from './api.types' import { DataModel } from 'src/app/services/patch-db/data-model' @@ -6,8 +6,6 @@ import { Log } from '@start9labs/shared' import { WebSocketSubjectConfig } from 'rxjs/webSocket' export abstract class ApiService { - readonly patchStream$ = new Subject[]>() - // http // for getting static files: ex icons, instructions, licenses diff --git a/frontend/projects/ui/src/app/services/api/embassy-live-api.service.ts b/frontend/projects/ui/src/app/services/api/embassy-live-api.service.ts index 63b36aa93..18d47e2ce 100644 --- a/frontend/projects/ui/src/app/services/api/embassy-live-api.service.ts +++ b/frontend/projects/ui/src/app/services/api/embassy-live-api.service.ts @@ -1,6 +1,5 @@ import { Inject, Injectable } from '@angular/core' import { - decodeBase64, HttpOptions, HttpService, isRpcError, @@ -14,7 +13,7 @@ import { RR } from './api.types' import { parsePropertiesPermissive } from 'src/app/util/properties.util' import { ConfigService } from '../config.service' import { webSocket, WebSocketSubjectConfig } from 'rxjs/webSocket' -import { Observable } from 'rxjs' +import { Observable, filter, firstValueFrom } from 'rxjs' import { AuthService } from '../auth.service' import { DOCUMENT } from '@angular/common' import { DataModel } from '../patch-db/data-model' @@ -67,7 +66,7 @@ export class LiveApiService extends ApiService { // auth async login(params: RR.LoginReq): Promise { - return this.rpcRequest({ method: 'auth.login', params }, false) + return this.rpcRequest({ method: 'auth.login', params }) } async logout(params: RR.LogoutReq): Promise { @@ -91,7 +90,7 @@ export class LiveApiService extends ApiService { // server async echo(params: RR.EchoReq, urlOverride?: string): Promise { - return this.rpcRequest({ method: 'echo', params }, false, urlOverride) + return this.rpcRequest({ method: 'echo', params }, urlOverride) } openPatchWebsocket$(): Observable> { @@ -434,42 +433,28 @@ export class LiveApiService extends ApiService { private async rpcRequest( options: RPCOptions, - addHeader = true, urlOverride?: string, ): Promise { - if (addHeader) { - options.headers = { - 'x-patch-sequence': String(this.patch.cache$.value.sequence), - ...(options.headers || {}), - } - } - const res = await this.http.rpcRequest(options, urlOverride) - const encodedUpdates = res.headers.get('x-patch-updates') - const encodedError = res.headers.get('x-patch-error') + const body = res.body - if (encodedUpdates) { - const decoded = decodeBase64(encodedUpdates) - const updates: Update[] = JSON.parse(decoded) - this.patchStream$.next(updates) - } - - if (encodedError) { - const error = decodeBase64(encodedError) - console.error(error) - } - - const rpcRes = res.body - - if (isRpcError(rpcRes)) { - if (rpcRes.error.code === 34) { + if (isRpcError(body)) { + if (body.error.code === 34) { console.error('Unauthenticated, logging out') this.auth.setUnverified() } - throw new RpcError(rpcRes.error) + throw new RpcError(body.error) } - return rpcRes.result + const patchSequence = res.headers.get('x-patch-sequence') + if (patchSequence) + await firstValueFrom( + this.patch.cache$.pipe( + filter(({ sequence }) => sequence >= Number(patchSequence)), + ), + ) + + return body.result } private async httpRequest(opts: HttpOptions): Promise { diff --git a/frontend/projects/ui/src/app/services/api/embassy-mock-api.service.ts b/frontend/projects/ui/src/app/services/api/embassy-mock-api.service.ts index 5f11b085f..101d5511f 100644 --- a/frontend/projects/ui/src/app/services/api/embassy-mock-api.service.ts +++ b/frontend/projects/ui/src/app/services/api/embassy-mock-api.service.ts @@ -65,7 +65,6 @@ export class MockApiService extends ApiService { .pipe( tap(() => { this.sequence = 0 - this.patchStream$.next([]) }), switchMap(verified => iif( @@ -108,7 +107,9 @@ export class MockApiService extends ApiService { value: params.value, }, ] - return this.withRevision(patch) + this.mockRevision(patch) + + return null } // auth @@ -289,7 +290,9 @@ export class MockApiService extends ApiService { value: initialProgress, }, ] - return this.withRevision(patch, 'updating') + this.mockRevision(patch) + + return 'updating' } async restartServer( @@ -332,7 +335,9 @@ export class MockApiService extends ApiService { value: params.enable, }, ] - return this.withRevision(patch, null) + this.mockRevision(patch) + + return null } // marketplace URLs @@ -385,7 +390,9 @@ export class MockApiService extends ApiService { value: 0, }, ] - return this.withRevision(patch, Mock.Notifications) + this.mockRevision(patch) + + return Mock.Notifications } async deleteNotification( @@ -564,7 +571,9 @@ export class MockApiService extends ApiService { }, ] - return this.withRevision(originalPatch) + this.mockRevision(originalPatch) + + return null } // package @@ -629,7 +638,9 @@ export class MockApiService extends ApiService { }, }, ] - return this.withRevision(patch) + this.mockRevision(patch) + + return null } async getPackageConfig( @@ -660,7 +671,9 @@ export class MockApiService extends ApiService { value: true, }, ] - return this.withRevision(patch) + this.mockRevision(patch) + + return null } async restorePackages( @@ -684,7 +697,9 @@ export class MockApiService extends ApiService { } }) - return this.withRevision(patch) + this.mockRevision(patch) + + return null } async executePackageAction( @@ -768,7 +783,9 @@ export class MockApiService extends ApiService { }, ] - return this.withRevision(originalPatch) + this.mockRevision(originalPatch) + + return null } async restartPackage( @@ -845,7 +862,9 @@ export class MockApiService extends ApiService { }, ] - return this.withRevision(patch) + this.mockRevision(patch) + + return null } async stopPackage(params: RR.StopPackageReq): Promise { @@ -876,7 +895,9 @@ export class MockApiService extends ApiService { }, ] - return this.withRevision(patch) + this.mockRevision(patch) + + return null } async uninstallPackage( @@ -902,7 +923,9 @@ export class MockApiService extends ApiService { }, ] - return this.withRevision(patch) + this.mockRevision(patch) + + return null } async dryConfigureDependency( @@ -1057,23 +1080,4 @@ export class MockApiService extends ApiService { } this.mockWsSource$.next(revision) } - - private async withRevision( - patch: Operation[], - response: T | null = null, - ): Promise { - if (!this.sequence) { - const { sequence } = this.bootstrapper.init() - this.sequence = sequence - } - - this.patchStream$.next([ - { - id: ++this.sequence, - patch, - }, - ]) - - return response as T - } } diff --git a/frontend/projects/ui/src/app/services/patch-db/patch-db.factory.ts b/frontend/projects/ui/src/app/services/patch-db/patch-db.factory.ts index dc4276f79..51d29edc8 100644 --- a/frontend/projects/ui/src/app/services/patch-db/patch-db.factory.ts +++ b/frontend/projects/ui/src/app/services/patch-db/patch-db.factory.ts @@ -9,7 +9,7 @@ import { } from 'rxjs/operators' import { Update } from 'patch-db-client' import { DataModel } from './data-model' -import { defer, EMPTY, from, interval, merge, Observable } from 'rxjs' +import { defer, EMPTY, from, interval, Observable } from 'rxjs' import { AuthService } from '../auth.service' import { ConnectionService } from '../connection.service' import { ApiService } from '../api/embassy-api.service' @@ -51,9 +51,7 @@ export function sourceFactory( ) return authService.isVerified$.pipe( - switchMap(verified => - verified ? merge(websocket$, api.patchStream$) : EMPTY, - ), + switchMap(verified => (verified ? websocket$ : EMPTY)), ) }) } diff --git a/patch-db b/patch-db index b553ff7b5..6af2221ad 160000 --- a/patch-db +++ b/patch-db @@ -1 +1 @@ -Subproject commit b553ff7b5304c77acd886a0a87e65a01ce91790a +Subproject commit 6af2221add56f0a557b37a268ef9fb2299a05255 From 246727995d3e2113bcb9088f5a517b1c59c8d346 Mon Sep 17 00:00:00 2001 From: Aiden McClelland <3732071+dr-bonez@users.noreply.github.com> Date: Tue, 17 Oct 2023 13:25:44 -0600 Subject: [PATCH 35/38] add tokio-console if `unstable` (#2461) * add tokio-console if `unstable` * instrument vhost controller --- Makefile | 10 +- backend/Cargo.lock | 226 +++++++++++++++++++++++++++++++++++++ backend/Cargo.toml | 3 +- backend/build-prod.sh | 45 +++----- backend/src/net/vhost.rs | 6 +- backend/src/util/logger.rs | 21 +++- 6 files changed, 275 insertions(+), 36 deletions(-) diff --git a/Makefile b/Makefile index a86168488..305519239 100644 --- a/Makefile +++ b/Makefile @@ -19,7 +19,7 @@ FRONTEND_INSTALL_WIZARD_SRC := $(shell find frontend/projects/install-wizard) PATCH_DB_CLIENT_SRC := $(shell find patch-db/client -not -path patch-db/client/dist -and -not -path patch-db/client/node_modules) GZIP_BIN := $(shell which pigz || which gzip) TAR_BIN := $(shell which gtar || which tar) -ALL_TARGETS := $(EMBASSY_BINS) system-images/compat/docker-images/$(ARCH).tar system-images/utils/docker-images/$(ARCH).tar system-images/binfmt/docker-images/$(ARCH).tar $(EMBASSY_SRC) $(shell if [ "$(OS_ARCH)" = "raspberrypi" ]; then echo cargo-deps/aarch64-unknown-linux-gnu/release/pi-beep; fi) $(ENVIRONMENT_FILE) $(GIT_HASH_FILE) $(VERSION_FILE) +ALL_TARGETS := $(EMBASSY_BINS) system-images/compat/docker-images/$(ARCH).tar system-images/utils/docker-images/$(ARCH).tar system-images/binfmt/docker-images/$(ARCH).tar $(EMBASSY_SRC) $(shell if [ "$(OS_ARCH)" = "raspberrypi" ]; then echo cargo-deps/aarch64-unknown-linux-gnu/release/pi-beep; fi) $(shell /bin/bash -c 'if [[ "${ENVIRONMENT}" =~ (^|-)unstable($$|-) ]]; then echo cargo-deps/$(ARCH)-unknown-linux-gnu/release/tokio-console; fi') $(ENVIRONMENT_FILE) $(GIT_HASH_FILE) $(VERSION_FILE) ifeq ($(REMOTE),) mkdir = mkdir -p $1 @@ -75,7 +75,7 @@ format: sdk: cd backend/ && ./install-sdk.sh -startos_raspberrypi.img: $(BUILD_SRC) startos.raspberrypi.squashfs $(VERSION_FILE) $(ENVIRONMENT_FILE) $(GIT_HASH_FILE) cargo-deps/aarch64-unknown-linux-gnu/release/pi-beep | sudo +startos_raspberrypi.img: $(BUILD_SRC) startos.raspberrypi.squashfs $(VERSION_FILE) $(ENVIRONMENT_FILE) $(GIT_HASH_FILE) | sudo ./build/raspberrypi/make-image.sh # For creating os images. DO NOT USE @@ -88,6 +88,7 @@ install: $(ALL_TARGETS) $(call ln,/usr/bin/startbox,$(DESTDIR)/usr/bin/avahi-alias) $(call ln,/usr/bin/startbox,$(DESTDIR)/usr/bin/embassy-cli) if [ "$(OS_ARCH)" = "raspberrypi" ]; then $(call cp,cargo-deps/aarch64-unknown-linux-gnu/release/pi-beep,$(DESTDIR)/usr/bin/pi-beep); fi + if /bin/bash -c '[[ "${ENVIRONMENT}" =~ (^|-)unstable($$|-) ]]'; then $(call cp,cargo-deps/$(ARCH)-unknown-linux-gnu/release/tokio-console,$(DESTDIR)/usr/bin/tokio-console); fi $(call mkdir,$(DESTDIR)/usr/lib) $(call rm,$(DESTDIR)/usr/lib/embassy) @@ -197,4 +198,7 @@ ui: frontend/dist/raw/ui backend: $(EMBASSY_BINS) cargo-deps/aarch64-unknown-linux-gnu/release/pi-beep: - ARCH=aarch64 ./build-cargo-dep.sh pi-beep \ No newline at end of file + ARCH=aarch64 ./build-cargo-dep.sh pi-beep + +cargo-deps/$(ARCH)-unknown-linux-gnu/release/tokio-console: + ARCH=$(ARCH) ./build-cargo-dep.sh tokio-console \ No newline at end of file diff --git a/backend/Cargo.lock b/backend/Cargo.lock index 3c82288fa..8b7eeebac 100644 --- a/backend/Cargo.lock +++ b/backend/Cargo.lock @@ -250,6 +250,51 @@ dependencies = [ "libc", ] +[[package]] +name = "axum" +version = "0.6.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3b829e4e32b91e643de6eafe82b1d90675f5874230191a4ffbc1b336dec4d6bf" +dependencies = [ + "async-trait", + "axum-core", + "bitflags 1.3.2", + "bytes", + "futures-util", + "http", + "http-body", + "hyper", + "itoa", + "matchit", + "memchr", + "mime", + "percent-encoding", + "pin-project-lite", + "rustversion", + "serde", + "sync_wrapper", + "tower", + "tower-layer", + "tower-service", +] + +[[package]] +name = "axum-core" +version = "0.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "759fa577a247914fd3f7f76d62972792636412fbfd634cd452f6a385a74d2d2c" +dependencies = [ + "async-trait", + "bytes", + "futures-util", + "http", + "http-body", + "mime", + "rustversion", + "tower-layer", + "tower-service", +] + [[package]] name = "backtrace" version = "0.3.68" @@ -655,6 +700,43 @@ dependencies = [ "windows-sys 0.45.0", ] +[[package]] +name = "console-api" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fd326812b3fd01da5bb1af7d340d0d555fd3d4b641e7f1dfcf5962a902952787" +dependencies = [ + "futures-core", + "prost", + "prost-types", + "tonic", + "tracing-core", +] + +[[package]] +name = "console-subscriber" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7481d4c57092cd1c19dd541b92bdce883de840df30aa5d03fd48a3935c01842e" +dependencies = [ + "console-api", + "crossbeam-channel", + "crossbeam-utils", + "futures-task", + "hdrhistogram", + "humantime 2.1.0", + "prost-types", + "serde", + "serde_json", + "thread_local", + "tokio", + "tokio-stream", + "tonic", + "tracing", + "tracing-core", + "tracing-subscriber", +] + [[package]] name = "const-oid" version = "0.9.4" @@ -802,6 +884,16 @@ dependencies = [ "cfg-if 1.0.0", ] +[[package]] +name = "crossbeam-channel" +version = "0.5.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a33c2bf77f2df06183c3aa30d1e96c0695a313d4f9c453cc3762a6db39f99200" +dependencies = [ + "cfg-if 1.0.0", + "crossbeam-utils", +] + [[package]] name = "crossbeam-queue" version = "0.3.8" @@ -1816,6 +1908,19 @@ dependencies = [ "hashbrown 0.14.0", ] +[[package]] +name = "hdrhistogram" +version = "7.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f19b9f54f7c7f55e31401bb647626ce0cf0f67b0004982ce815b3ee72a02aa8" +dependencies = [ + "base64 0.13.1", + "byteorder", + "flate2", + "nom 7.1.3", + "num-traits", +] + [[package]] name = "heck" version = "0.4.1" @@ -1970,6 +2075,18 @@ dependencies = [ "want", ] +[[package]] +name = "hyper-timeout" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bbb958482e8c7be4bc3cf272a766a2b0bf1a6755e7a6ae777f017a31d11b13b1" +dependencies = [ + "hyper", + "pin-project-lite", + "tokio", + "tokio-io-timeout", +] + [[package]] name = "hyper-tls" version = "0.5.0" @@ -2607,6 +2724,12 @@ version = "0.1.10" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2532096657941c2fea9c289d370a250971c689d4f143798ff67113ec042024a5" +[[package]] +name = "matchit" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0e7465ac9959cc2b1404e8e2367b43684a6d13790fe23056cc8c6c5a6b7bcb94" + [[package]] name = "mbrman" version = "0.5.2" @@ -3500,6 +3623,38 @@ dependencies = [ "syn 0.15.44", ] +[[package]] +name = "prost" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f4fdd22f3b9c31b53c060df4a0613a1c7f062d4115a2b984dd15b1858f7e340d" +dependencies = [ + "bytes", + "prost-derive", +] + +[[package]] +name = "prost-derive" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "265baba7fabd416cf5078179f7d2cbeca4ce7a9041111900675ea7c4cb8a4c32" +dependencies = [ + "anyhow", + "itertools 0.10.5", + "proc-macro2 1.0.66", + "quote 1.0.31", + "syn 2.0.18", +] + +[[package]] +name = "prost-types" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e081b29f63d83a4bc75cfc9f3fe424f9156cf92d8a4f0c9407cce9a1b67327cf" +dependencies = [ + "prost", +] + [[package]] name = "psl-types" version = "2.0.11" @@ -4642,6 +4797,7 @@ dependencies = [ "clap 3.2.25", "color-eyre", "console", + "console-subscriber", "cookie", "cookie_store 0.19.1", "current_platform", @@ -5221,6 +5377,12 @@ dependencies = [ "unicode-ident", ] +[[package]] +name = "sync_wrapper" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2047c6ded9c721764247e62cd3b03c09ffc529b2ba5b10ec482ae507a4a70160" + [[package]] name = "tap" version = "1.0.1" @@ -5416,9 +5578,20 @@ dependencies = [ "signal-hook-registry", "socket2", "tokio-macros", + "tracing", "windows-sys 0.48.0", ] +[[package]] +name = "tokio-io-timeout" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "30b74022ada614a1b4834de765f9bb43877f910cc8ce4be40e89042c9223a8bf" +dependencies = [ + "pin-project-lite", + "tokio", +] + [[package]] name = "tokio-macros" version = "2.1.0" @@ -5543,6 +5716,33 @@ dependencies = [ "winnow", ] +[[package]] +name = "tonic" +version = "0.10.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d560933a0de61cf715926b9cac824d4c883c2c43142f787595e48280c40a1d0e" +dependencies = [ + "async-stream", + "async-trait", + "axum", + "base64 0.21.2", + "bytes", + "h2", + "http", + "http-body", + "hyper", + "hyper-timeout", + "percent-encoding", + "pin-project", + "prost", + "tokio", + "tokio-stream", + "tower", + "tower-layer", + "tower-service", + "tracing", +] + [[package]] name = "torut" version = "0.2.1" @@ -5563,6 +5763,32 @@ dependencies = [ "tokio", ] +[[package]] +name = "tower" +version = "0.4.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b8fa9be0de6cf49e536ce1851f987bd21a43b771b09473c3549a6c853db37c1c" +dependencies = [ + "futures-core", + "futures-util", + "indexmap 1.9.3", + "pin-project", + "pin-project-lite", + "rand 0.8.5", + "slab", + "tokio", + "tokio-util", + "tower-layer", + "tower-service", + "tracing", +] + +[[package]] +name = "tower-layer" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c20c8dbed6283a09604c3e69b4b7eeb54e298b8a600d4d5ecb5ad39de609f1d0" + [[package]] name = "tower-service" version = "0.3.2" diff --git a/backend/Cargo.toml b/backend/Cargo.toml index 461ae48c7..a1fc3914d 100644 --- a/backend/Cargo.toml +++ b/backend/Cargo.toml @@ -28,7 +28,7 @@ path = "src/main.rs" avahi = ["avahi-sys"] default = ["cli", "sdk", "daemon", "js_engine"] dev = [] -unstable = ["patch-db/unstable"] +unstable = ["console-subscriber", "tokio/tracing"] avahi-alias = ["avahi"] cli = [] sdk = [] @@ -55,6 +55,7 @@ bytes = "1" chrono = { version = "0.4.19", features = ["serde"] } clap = "3.2.8" color-eyre = "0.6.1" +console-subscriber = { version = "0.2", optional = true } cookie = "0.16.2" cookie_store = "0.19.0" current_platform = "0.2.0" diff --git a/backend/build-prod.sh b/backend/build-prod.sh index 97ca33279..c679fdf98 100755 --- a/backend/build-prod.sh +++ b/backend/build-prod.sh @@ -22,49 +22,38 @@ if tty -s; then USE_TTY="-it" fi -alias 'rust-gnu-builder'='docker run $USE_TTY --rm -e "OS_ARCH=$OS_ARCH" -v "$HOME/.cargo/registry":/usr/local/cargo/registry -v "$(pwd)":/home/rust/src -w /home/rust/src -P start9/rust-arm-cross:aarch64' -alias 'rust-musl-builder'='docker run $USE_TTY --rm -e "OS_ARCH=$OS_ARCH" -v "$HOME/.cargo/registry":/root/.cargo/registry -v "$(pwd)":/home/rust/src -P messense/rust-musl-cross:$ARCH-musl' - cd .. FLAGS="" +RUSTFLAGS="" if [[ "$ENVIRONMENT" =~ (^|-)podman($|-) ]]; then FLAGS="podman,$FLAGS" fi if [[ "$ENVIRONMENT" =~ (^|-)unstable($|-) ]]; then FLAGS="unstable,$FLAGS" + RUSTFLAGS="$RUSTFLAGS --cfg tokio_unstable" fi if [[ "$ENVIRONMENT" =~ (^|-)dev($|-) ]]; then FLAGS="dev,$FLAGS" fi +alias 'rust-gnu-builder'='docker run $USE_TTY --rm -e "OS_ARCH=$OS_ARCH" -e "RUSTFLAGS=$RUSTFLAGS" -v "$HOME/.cargo/registry":/usr/local/cargo/registry -v "$(pwd)":/home/rust/src -w /home/rust/src -P start9/rust-arm-cross:aarch64' +alias 'rust-musl-builder'='docker run $USE_TTY --rm -e "OS_ARCH=$OS_ARCH" -v "$HOME/.cargo/registry":/root/.cargo/registry -v "$(pwd)":/home/rust/src -P messense/rust-musl-cross:$ARCH-musl' + set +e fail= -if [[ "$FLAGS" = "" ]]; then - rust-gnu-builder sh -c "(cd backend && cargo build --release --locked --features avahi-alias, --target=$ARCH-unknown-linux-gnu)" - if test $? -ne 0; then - fail=true - fi - for ARCH in x86_64 aarch64 - do - rust-musl-builder sh -c "(cd libs && cargo build --release --locked --bin embassy_container_init )" - if test $? -ne 0; then - fail=true - fi - done -else - echo "FLAGS=$FLAGS" - rust-gnu-builder sh -c "(cd backend && cargo build --release --features avahi-alias,$FLAGS --locked --target=$ARCH-unknown-linux-gnu)" - if test $? -ne 0; then - fail=true - fi - for ARCH in x86_64 aarch64 - do - rust-musl-builder sh -c "(cd libs && cargo build --release --locked --bin embassy_container_init)" - if test $? -ne 0; then - fail=true - fi - done +echo "FLAGS=\"$FLAGS\"" +echo "RUSTFLAGS=\"$RUSTFLAGS\"" +rust-gnu-builder sh -c "(cd backend && cargo build --release --features avahi-alias,$FLAGS --locked --target=$ARCH-unknown-linux-gnu)" +if test $? -ne 0; then + fail=true fi +for ARCH in x86_64 aarch64 +do + rust-musl-builder sh -c "(cd libs && cargo build --release --locked --bin embassy_container_init)" + if test $? -ne 0; then + fail=true + fi +done set -e cd backend diff --git a/backend/src/net/vhost.rs b/backend/src/net/vhost.rs index e8e754baf..00ffc6c59 100644 --- a/backend/src/net/vhost.rs +++ b/backend/src/net/vhost.rs @@ -16,12 +16,13 @@ use tokio::sync::{Mutex, RwLock}; use tokio_rustls::rustls::server::Acceptor; use tokio_rustls::rustls::{RootCertStore, ServerConfig}; use tokio_rustls::{LazyConfigAcceptor, TlsConnector}; +use tracing::instrument; use crate::net::keys::Key; use crate::net::ssl::SslManager; use crate::net::utils::SingleAccept; +use crate::prelude::*; use crate::util::io::{BackTrackingReader, TimeoutStream}; -use crate::Error; // not allowed: <=1024, >=32768, 5355, 5432, 9050, 6010, 9051, 5353 @@ -36,6 +37,7 @@ impl VHostController { servers: Mutex::new(BTreeMap::new()), } } + #[instrument(skip_all)] pub async fn add( &self, key: Key, @@ -63,6 +65,7 @@ impl VHostController { writable.insert(external, server); Ok(rc?) } + #[instrument(skip_all)] pub async fn gc(&self, hostname: Option, external: u16) -> Result<(), Error> { let mut writable = self.servers.lock().await; if let Some(server) = writable.remove(&external) { @@ -93,6 +96,7 @@ struct VHostServer { _thread: NonDetachingJoinHandle<()>, } impl VHostServer { + #[instrument(skip_all)] async fn new(port: u16, ssl: Arc) -> Result { // check if port allowed let listener = TcpListener::bind(SocketAddr::new(Ipv6Addr::UNSPECIFIED.into(), port)) diff --git a/backend/src/util/logger.rs b/backend/src/util/logger.rs index 8208f7de6..c7ab41ba2 100644 --- a/backend/src/util/logger.rs +++ b/backend/src/util/logger.rs @@ -10,13 +10,28 @@ impl EmbassyLogger { use tracing_subscriber::prelude::*; use tracing_subscriber::{fmt, EnvFilter}; - let filter_layer = EnvFilter::from_default_env(); + let filter_layer = EnvFilter::builder() + .with_default_directive( + format!("{}=info", std::module_path!().split("::").next().unwrap()) + .parse() + .unwrap(), + ) + .from_env_lossy(); + #[cfg(feature = "unstable")] + let filter_layer = filter_layer + .add_directive("tokio=trace".parse().unwrap()) + .add_directive("runtime=trace".parse().unwrap()); let fmt_layer = fmt::layer().with_target(true); - tracing_subscriber::registry() + let sub = tracing_subscriber::registry() .with(filter_layer) .with(fmt_layer) - .with(ErrorLayer::default()) + .with(ErrorLayer::default()); + + #[cfg(feature = "unstable")] + let sub = sub.with(console_subscriber::spawn()); + + sub } pub fn init() -> Self { Self::base_subscriber().init(); From bb6a4842bda76008a49b4864a25ff1d5010d4f16 Mon Sep 17 00:00:00 2001 From: Lucy <12953208+elvece@users.noreply.github.com> Date: Wed, 18 Oct 2023 14:24:48 -0400 Subject: [PATCH 36/38] Update/misc fe (#2463) * update to use transparent icon; add icon to login * update setup mocks to imitate reality * update webmanifest version * fix version in webmanifest * reset icons with background; update login page style * adjust login header * cleanup + adjust icon size * revert icon * cleanup and reposition error message --- .../src/app/services/api/mock-api.service.ts | 24 ++--- .../ui/src/app/pages/login/login.page.html | 73 +++++++------- .../ui/src/app/pages/login/login.page.scss | 98 +++++++------------ frontend/projects/ui/src/manifest.webmanifest | 4 +- 4 files changed, 91 insertions(+), 108 deletions(-) diff --git a/frontend/projects/setup-wizard/src/app/services/api/mock-api.service.ts b/frontend/projects/setup-wizard/src/app/services/api/mock-api.service.ts index 3977c8824..51acf4e7b 100644 --- a/frontend/projects/setup-wizard/src/app/services/api/mock-api.service.ts +++ b/frontend/projects/setup-wizard/src/app/services/api/mock-api.service.ts @@ -56,14 +56,14 @@ export class MockApiService extends ApiService { await pauseFor(1000) return [ { - logicalname: 'abcd', - vendor: 'Samsung', - model: 'T5', + logicalname: '/dev/nvme0n1p3', + vendor: 'Unknown Vendor', + model: 'Samsung SSD - 970 EVO Plus 2TB', partitions: [ { logicalname: 'pabcd', label: null, - capacity: 73264762332, + capacity: 1979120929996, used: null, 'embassy-os': { version: '0.2.17', @@ -75,13 +75,13 @@ export class MockApiService extends ApiService { guid: null, }, ], - capacity: 123456789123, + capacity: 1979120929996, guid: 'uuid-uuid-uuid-uuid', }, { logicalname: 'dcba', - vendor: 'Crucial', - model: 'MX500', + vendor: 'CT1000MX', + model: '500SSD1', partitions: [ { logicalname: 'pbcba', @@ -98,13 +98,13 @@ export class MockApiService extends ApiService { guid: null, }, ], - capacity: 124456789123, + capacity: 1000190509056, guid: null, }, { - logicalname: 'wxyz', - vendor: 'SanDisk', - model: 'Specialness', + logicalname: '/dev/sda', + vendor: 'ASMT', + model: '2115', partitions: [ { logicalname: 'pbcba', @@ -121,7 +121,7 @@ export class MockApiService extends ApiService { guid: 'guid-guid-guid-guid', }, ], - capacity: 123459789123, + capacity: 1000190509056, guid: null, }, ] diff --git a/frontend/projects/ui/src/app/pages/login/login.page.html b/frontend/projects/ui/src/app/pages/login/login.page.html index 7022c5cb7..def298675 100644 --- a/frontend/projects/ui/src/app/pages/login/login.page.html +++ b/frontend/projects/ui/src/app/pages/login/login.page.html @@ -23,43 +23,51 @@ - + + StartOS Icon - StartOS Login + Login to StartOS - -
    - - + + +

    + {{ error }} +

    diff --git a/frontend/projects/ui/src/app/pages/login/login.page.scss b/frontend/projects/ui/src/app/pages/login/login.page.scss index d9c9ce375..690d97591 100644 --- a/frontend/projects/ui/src/app/pages/login/login.page.scss +++ b/frontend/projects/ui/src/app/pages/login/login.page.scss @@ -1,15 +1,5 @@ .content { - --background: #222428; -} - -.card { - background: #414141; -} - -.title { - margin: 24px 0 16px; - color: #e0e0e0; - font-size: 1.8rem; + --background: #333333; } .grid { @@ -23,12 +13,6 @@ text-align: center; } -.error { - display: block; - text-align: left; - padding-top: 4px; -} - .banner { position: absolute; padding: 20px; @@ -41,58 +25,52 @@ } } -.side-button { - --border-radius: 0 4px 4px 0; -} - -.login-item { - --border-style: solid; - --border-color: var(--ion-color-light); - --border-radius: 4px 0 0 4px; - box-shadow: 0 3px 1px -2px rgba(0, 0, 0, 0.2), 0 2px 2px 0 rgba(0, 0, 0, 0.14), - 0 1px 5px 0 rgba(0, 0, 0, 0.12); - - .side-button { - --border-radius: 4px; - } -} - ion-card { - background: var(--ion-color-step-200); - box-shadow: 0 4px 4px rgba(0, 0, 0, 0.25); - border-radius: 44px; + background: #414141; + box-shadow: 0 4px 4px rgba(17, 17, 17, 0.144); + border-radius: 35px; min-height: 16rem; + contain: unset; + overflow: unset; + position: relative; +} + +ion-item { + --background: transparent; + --border-radius: 0px; +} + +.title { + padding-top: 55px; + color: #e0e0e0; + font-size: 1.3rem; +} + +.header { + &-icon { + width: 100px; + position: absolute; + left: 50%; + margin-left: -50px; + top: -17%; + z-index: 100; + } } .login-button { - margin-inline-start: 0; - margin-inline-end: 0; - height: 49px; - font-size: larger; - font-weight: bold; -} - -.form { - margin-bottom: 12px; - - * { - display: inline-block; - vertical-align: middle; - } + height: 45px; + width: 120px; + --border-radius: 50px; + margin: 0 auto; + margin-top: 27px; + margin-bottom: 10px; } .item-interactive { --highlight-background: #5260ff !important; } - -@media (max-width: 500px) { - .side-button { - --border-radius: 4px; - margin-top: 0.7rem; - } - - .login-item { - --border-radius: 4px; - } +.error { + display: block; + padding-top: 4px; } diff --git a/frontend/projects/ui/src/manifest.webmanifest b/frontend/projects/ui/src/manifest.webmanifest index 9971a98ab..a199ac1dd 100644 --- a/frontend/projects/ui/src/manifest.webmanifest +++ b/frontend/projects/ui/src/manifest.webmanifest @@ -5,8 +5,8 @@ "background_color": "#1e1e1e", "display": "standalone", "scope": ".", - "start_url": "/?version=0344", - "id": "/?version=0344", + "start_url": "/?version=035", + "id": "/?version=035", "icons": [ { "src": "assets/img/icon.png", From 9e633b37e7e5e1fb35594fb236bf43e1803ec4f2 Mon Sep 17 00:00:00 2001 From: J H <2364004+Blu-J@users.noreply.github.com> Date: Wed, 18 Oct 2023 16:02:45 -0600 Subject: [PATCH 37/38] Fix/quarantine deno (#2466) * fix: Move the deno embedded into a seperate binary. This should be the quick hacky way of making sure that the memory leaks wont happen * fix: --- Makefile | 1 + backend/Cargo.lock | 12 ++ backend/Cargo.toml | 1 + backend/src/bins/mod.rs | 4 + backend/src/bins/start_deno.rs | 145 ++++++++++++++++++ backend/src/config/mod.rs | 4 +- backend/src/logs.rs | 6 + backend/src/middleware/db.rs | 2 +- backend/src/net/ssl.rs | 6 +- backend/src/procedure/js_scripts.rs | 206 +++++++++++++++++-------- backend/src/procedure/mod.rs | 16 +- backend/src/registry/admin.rs | 4 +- libs/js_engine/src/lib.rs | 227 +--------------------------- libs/models/src/procedure_name.rs | 4 +- 14 files changed, 345 insertions(+), 293 deletions(-) create mode 100644 backend/src/bins/start_deno.rs diff --git a/Makefile b/Makefile index 305519239..3b4aca221 100644 --- a/Makefile +++ b/Makefile @@ -85,6 +85,7 @@ install: $(ALL_TARGETS) $(call ln,/usr/bin/startbox,$(DESTDIR)/usr/bin/startd) $(call ln,/usr/bin/startbox,$(DESTDIR)/usr/bin/start-cli) $(call ln,/usr/bin/startbox,$(DESTDIR)/usr/bin/start-sdk) + $(call ln,/usr/bin/startbox,$(DESTDIR)/usr/bin/start-deno) $(call ln,/usr/bin/startbox,$(DESTDIR)/usr/bin/avahi-alias) $(call ln,/usr/bin/startbox,$(DESTDIR)/usr/bin/embassy-cli) if [ "$(OS_ARCH)" = "raspberrypi" ]; then $(call cp,cargo-deps/aarch64-unknown-linux-gnu/release/pi-beep,$(DESTDIR)/usr/bin/pi-beep); fi diff --git a/backend/Cargo.lock b/backend/Cargo.lock index 8b7eeebac..f312cdb74 100644 --- a/backend/Cargo.lock +++ b/backend/Cargo.lock @@ -4886,6 +4886,7 @@ dependencies = [ "tracing", "tracing-error", "tracing-futures", + "tracing-journald", "tracing-subscriber", "trust-dns-server", "typed-builder", @@ -5848,6 +5849,17 @@ dependencies = [ "tracing", ] +[[package]] +name = "tracing-journald" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba316a74e8fc3c3896a850dba2375928a9fa171b085ecddfc7c054d39970f3fd" +dependencies = [ + "libc", + "tracing-core", + "tracing-subscriber", +] + [[package]] name = "tracing-log" version = "0.1.3" diff --git a/backend/Cargo.toml b/backend/Cargo.toml index a1fc3914d..665e0c651 100644 --- a/backend/Cargo.toml +++ b/backend/Cargo.toml @@ -153,6 +153,7 @@ torut = "0.2.1" tracing = "0.1.35" tracing-error = "0.2.0" tracing-futures = "0.2.5" +tracing-journald = "0.3.0" tracing-subscriber = { version = "0.3.14", features = ["env-filter"] } trust-dns-server = "0.22.0" typed-builder = "0.10.0" diff --git a/backend/src/bins/mod.rs b/backend/src/bins/mod.rs index 76329e094..e131d22c4 100644 --- a/backend/src/bins/mod.rs +++ b/backend/src/bins/mod.rs @@ -5,6 +5,8 @@ pub mod avahi_alias; pub mod deprecated; #[cfg(feature = "cli")] pub mod start_cli; +#[cfg(feature = "js_engine")] +pub mod start_deno; #[cfg(feature = "daemon")] pub mod start_init; #[cfg(feature = "sdk")] @@ -16,6 +18,8 @@ fn select_executable(name: &str) -> Option { match name { #[cfg(feature = "avahi-alias")] "avahi-alias" => Some(avahi_alias::main), + #[cfg(feature = "js_engine")] + "start-deno" => Some(start_deno::main), #[cfg(feature = "cli")] "start-cli" => Some(start_cli::main), #[cfg(feature = "sdk")] diff --git a/backend/src/bins/start_deno.rs b/backend/src/bins/start_deno.rs new file mode 100644 index 000000000..1a68decfc --- /dev/null +++ b/backend/src/bins/start_deno.rs @@ -0,0 +1,145 @@ +use clap::Arg; +use rpc_toolkit::command; +use rpc_toolkit::run_cli; +use rpc_toolkit::yajrc::RpcError; +use serde_json::Value; + +use crate::context::CliContext; +use crate::procedure::js_scripts::ExecuteArgs; +use crate::s9pk::manifest::PackageId; +use crate::util::logger::EmbassyLogger; +use crate::util::serde::{display_serializable, parse_stdin_deserializable}; +use crate::version::{Current, VersionT}; +use crate::Error; + +lazy_static::lazy_static! { + static ref VERSION_STRING: String = Current::new().semver().to_string(); +} + +#[command(subcommands(execute, sandbox))] +fn deno_api() -> Result<(), Error> { + Ok(()) +} + +#[command(cli_only, display(display_serializable))] +async fn execute( + #[arg(stdin, parse(parse_stdin_deserializable))] arg: ExecuteArgs, +) -> Result, Error> { + let ExecuteArgs { + procedure, + directory, + pkg_id, + pkg_version, + name, + volumes, + input, + } = arg; + PackageLogger::init(&pkg_id); + procedure + .execute_impl(&directory, &pkg_id, &pkg_version, name, &volumes, input) + .await +} +#[command(cli_only, display(display_serializable))] +async fn sandbox( + #[arg(stdin, parse(parse_stdin_deserializable))] arg: ExecuteArgs, +) -> Result, Error> { + let ExecuteArgs { + procedure, + directory, + pkg_id, + pkg_version, + name, + volumes, + input, + } = arg; + PackageLogger::init(&pkg_id); + procedure + .sandboxed_impl(&directory, &pkg_id, &pkg_version, &volumes, input, name) + .await +} + +use tracing::Subscriber; +use tracing_subscriber::util::SubscriberInitExt; + +#[derive(Clone)] +struct PackageLogger {} + +impl PackageLogger { + fn base_subscriber(id: &PackageId) -> impl Subscriber { + use tracing_error::ErrorLayer; + use tracing_subscriber::prelude::*; + use tracing_subscriber::{fmt, EnvFilter}; + + let filter_layer = EnvFilter::builder() + .with_default_directive( + format!("{}=info", std::module_path!().split("::").next().unwrap()) + .parse() + .unwrap(), + ) + .from_env_lossy(); + let fmt_layer = fmt::layer().with_writer(std::io::stderr).with_target(true); + let journald_layer = tracing_journald::layer() + .unwrap() + .with_syslog_identifier(format!("{id}.embassy")); + + let sub = tracing_subscriber::registry() + .with(filter_layer) + .with(fmt_layer) + .with(journald_layer) + .with(ErrorLayer::default()); + + sub + } + pub fn init(id: &PackageId) -> Self { + Self::base_subscriber(id).init(); + color_eyre::install().unwrap_or_else(|_| tracing::warn!("tracing too many times")); + + Self {} + } +} + +fn inner_main() -> Result<(), Error> { + run_cli!({ + command: deno_api, + app: app => app + .name("StartOS Deno Executor") + .version(&**VERSION_STRING) + .arg( + clap::Arg::with_name("config") + .short('c') + .long("config") + .takes_value(true), + ), + context: matches => { + CliContext::init(matches)? + }, + exit: |e: RpcError| { + match e.data { + Some(Value::String(s)) => eprintln!("{}: {}", e.message, s), + Some(Value::Object(o)) => if let Some(Value::String(s)) = o.get("details") { + eprintln!("{}: {}", e.message, s); + if let Some(Value::String(s)) = o.get("debug") { + tracing::debug!("{}", s) + } + } + Some(a) => eprintln!("{}: {}", e.message, a), + None => eprintln!("{}", e.message), + } + + std::process::exit(e.code); + } + }); + Ok(()) +} + +pub fn main() { + match inner_main() { + Ok(_) => (), + Err(e) => { + eprintln!("{}", e.source); + tracing::debug!("{:?}", e.source); + drop(e.source); + std::process::exit(e.kind as i32) + } + } +} diff --git a/backend/src/config/mod.rs b/backend/src/config/mod.rs index 3674142ab..8224860a5 100644 --- a/backend/src/config/mod.rs +++ b/backend/src/config/mod.rs @@ -14,9 +14,9 @@ use rpc_toolkit::command; use tracing::instrument; use crate::context::RpcContext; -use crate::db::model::CurrentDependencies; + use crate::prelude::*; -use crate::s9pk::manifest::{Manifest, PackageId}; +use crate::s9pk::manifest::{PackageId}; use crate::util::display_none; use crate::util::serde::{display_serializable, parse_stdin_deserializable, IoFormat}; use crate::Error; diff --git a/backend/src/logs.rs b/backend/src/logs.rs index 5725a3b72..baacb2845 100644 --- a/backend/src/logs.rs +++ b/backend/src/logs.rs @@ -374,6 +374,12 @@ pub async fn journalctl( cmd.arg(format!("_COMM={}", SYSTEM_UNIT)); } LogSource::Container(id) => { + #[cfg(feature = "podman")] + cmd.arg(format!( + "SYSLOG_IDENTIFIER={}", + DockerProcedure::container_name(&id, None) + )); + #[cfg(not(feature = "podman"))] cmd.arg(format!( "CONTAINER_NAME={}", DockerProcedure::container_name(&id, None) diff --git a/backend/src/middleware/db.rs b/backend/src/middleware/db.rs index 5eb0b482c..c3ceadda6 100644 --- a/backend/src/middleware/db.rs +++ b/backend/src/middleware/db.rs @@ -18,7 +18,7 @@ pub fn db(ctx: RpcContext) -> DynMiddleware { -> BoxFuture>, HttpError>> { let ctx = ctx.clone(); async move { - let m2: DynMiddlewareStage2 = Box::new(move |req, rpc_req| { + let m2: DynMiddlewareStage2 = Box::new(move |_req, rpc_req| { async move { let sync_db = metadata .get(rpc_req.method.as_str(), "sync_db") diff --git a/backend/src/net/ssl.rs b/backend/src/net/ssl.rs index bbce1debd..c2cab3355 100644 --- a/backend/src/net/ssl.rs +++ b/backend/src/net/ssl.rs @@ -4,7 +4,7 @@ use std::net::IpAddr; use std::path::Path; use std::time::{SystemTime, UNIX_EPOCH}; -use chrono::format; + use futures::FutureExt; use openssl::asn1::{Asn1Integer, Asn1Time}; use openssl::bn::{BigNum, MsbOption}; @@ -19,11 +19,11 @@ use tokio::sync::{Mutex, RwLock}; use tracing::instrument; use crate::account::AccountInfo; -use crate::context::{self, RpcContext}; +use crate::context::{RpcContext}; use crate::hostname::Hostname; use crate::net::dhcp::ips; use crate::net::keys::{Key, KeyInfo}; -use crate::prelude::*; + use crate::{Error, ErrorKind, ResultExt}; static CERTIFICATE_VERSION: i32 = 2; // X509 version 3 is actually encoded as '2' in the cert because fuck you. diff --git a/backend/src/procedure/js_scripts.rs b/backend/src/procedure/js_scripts.rs index 3494806b3..35d85c32e 100644 --- a/backend/src/procedure/js_scripts.rs +++ b/backend/src/procedure/js_scripts.rs @@ -1,23 +1,27 @@ -use std::path::{Path, PathBuf}; use std::sync::Arc; use std::time::Duration; +use std::{ + path::{Path, PathBuf}, + process::Stdio, +}; use color_eyre::eyre::eyre; -use embassy_container_init::{ProcessGroupId, SignalGroup, SignalGroupParams}; +use embassy_container_init::ProcessGroupId; use helpers::UnixRpcClient; pub use js_engine::JsError; use js_engine::{JsExecutionEnvironment, PathForVolumeId}; -use models::{ErrorKind, VolumeId}; +use models::VolumeId; use serde::de::DeserializeOwned; use serde::{Deserialize, Serialize}; +use tokio::process::Command; use tracing::instrument; use super::ProcedureName; -use crate::context::RpcContext; +use crate::prelude::*; use crate::s9pk::manifest::PackageId; -use crate::util::{GeneralGuard, Version}; +use crate::util::io::to_json_async_writer; +use crate::util::Version; use crate::volume::Volumes; -use crate::Error; #[derive(Debug, Serialize, Deserialize, Clone)] #[serde(rename_all = "kebab-case")] @@ -45,6 +49,17 @@ impl PathForVolumeId for Volumes { } } +#[derive(Clone, Debug, Deserialize, Serialize)] +pub struct ExecuteArgs { + pub procedure: JsProcedure, + pub directory: PathBuf, + pub pkg_id: PackageId, + pub pkg_version: Version, + pub name: ProcedureName, + pub volumes: Volumes, + pub input: Option, +} + #[derive(Clone, Debug, Default, Deserialize, Serialize)] #[serde(rename_all = "kebab-case")] pub struct JsProcedure { @@ -67,54 +82,54 @@ impl JsProcedure { volumes: &Volumes, input: Option, timeout: Option, - gid: ProcessGroupId, - rpc_client: Option>, + _gid: ProcessGroupId, + _rpc_client: Option>, ) -> Result, Error> { - let cleaner_client = rpc_client.clone(); - let cleaner = GeneralGuard::new(move || { - tokio::spawn(async move { - if let Some(client) = cleaner_client { - client - .request(SignalGroup, SignalGroupParams { gid, signal: 9 }) - .await - .map_err(|e| { - Error::new(eyre!("{}: {:?}", e.message, e.data), ErrorKind::Docker) - }) - } else { - Ok(()) - } - }) - }); - let res = async move { - let running_action = JsExecutionEnvironment::load_from_package( - directory, - pkg_id, - pkg_version, - Box::new(volumes.clone()), - gid, - rpc_client, - ) - .await? - .run_action(name, input, self.args.clone()); - let output: Option = match timeout { - Some(timeout_duration) => tokio::time::timeout(timeout_duration, running_action) - .await - .map_err(|_| (JsError::Timeout, "Timed out. Retrying soon...".to_owned()))??, - None => running_action.await?, - }; - let output: O = unwrap_known_error(output)?; - Ok(output) + let runner_argument = ExecuteArgs { + procedure: self.clone(), + directory: directory.clone(), + pkg_id: pkg_id.clone(), + pkg_version: pkg_version.clone(), + name, + volumes: volumes.clone(), + input: input.and_then(|x| serde_json::to_value(x).ok()), + }; + let mut runner = Command::new("start-deno") + .arg("execute") + .stdin(Stdio::piped()) + .stdout(Stdio::piped()) + .stderr(Stdio::piped()) + .kill_on_drop(true) + .spawn()?; + to_json_async_writer( + &mut runner.stdin.take().or_not_found("stdin")?, + &runner_argument, + ) + .await?; + + let res = if let Some(timeout) = timeout { + tokio::time::timeout(timeout, runner.wait_with_output()) + .await + .with_kind(ErrorKind::Timeout)?? + } else { + runner.wait_with_output().await? + }; + + if res.status.success() { + serde_json::from_str::>(std::str::from_utf8(&res.stdout)?) + .with_kind(ErrorKind::Deserialization) + } else { + Err(Error::new( + eyre!("{}", String::from_utf8(res.stderr)?), + ErrorKind::Javascript, + )) } - .await - .map_err(|(error, message)| (error.as_code_num(), message)); - cleaner.drop().await.unwrap()?; - Ok(res) } #[instrument(skip_all)] pub async fn sandboxed( &self, - ctx: &RpcContext, + directory: &PathBuf, pkg_id: &PackageId, pkg_version: &Version, volumes: &Volumes, @@ -122,24 +137,97 @@ impl JsProcedure { timeout: Option, name: ProcedureName, ) -> Result, Error> { - Ok(async move { + let runner_argument = ExecuteArgs { + procedure: self.clone(), + directory: directory.clone(), + pkg_id: pkg_id.clone(), + pkg_version: pkg_version.clone(), + name, + volumes: volumes.clone(), + input: input.and_then(|x| serde_json::to_value(x).ok()), + }; + let mut runner = Command::new("start-deno") + .arg("sandbox") + .stdin(Stdio::piped()) + .stdout(Stdio::piped()) + .stderr(Stdio::piped()) + .kill_on_drop(true) + .spawn()?; + to_json_async_writer( + &mut runner.stdin.take().or_not_found("stdin")?, + &runner_argument, + ) + .await?; + + let res = if let Some(timeout) = timeout { + tokio::time::timeout(timeout, runner.wait_with_output()) + .await + .with_kind(ErrorKind::Timeout)?? + } else { + runner.wait_with_output().await? + }; + + if res.status.success() { + serde_json::from_str::>(std::str::from_utf8(&res.stdout)?) + .with_kind(ErrorKind::Deserialization) + } else { + Err(Error::new( + eyre!("{}", String::from_utf8(res.stderr)?), + ErrorKind::Javascript, + )) + } + } + + #[instrument(skip_all)] + pub async fn execute_impl( + &self, + directory: &PathBuf, + pkg_id: &PackageId, + pkg_version: &Version, + name: ProcedureName, + volumes: &Volumes, + input: Option, + ) -> Result, Error> { + let res = async move { let running_action = JsExecutionEnvironment::load_from_package( - &ctx.datadir, + directory, + pkg_id, + pkg_version, + Box::new(volumes.clone()), + ) + .await? + .run_action(name, input, self.args.clone()); + let output: Option = running_action.await?; + let output: O = unwrap_known_error(output)?; + Ok(output) + } + .await + .map_err(|(error, message)| (error.as_code_num(), message)); + + Ok(res) + } + + #[instrument(skip_all)] + pub async fn sandboxed_impl( + &self, + directory: &PathBuf, + pkg_id: &PackageId, + pkg_version: &Version, + volumes: &Volumes, + input: Option, + name: ProcedureName, + ) -> Result, Error> { + Ok(async move { + let running_action = JsExecutionEnvironment::load_from_package( + directory, pkg_id, pkg_version, Box::new(volumes.clone()), - ProcessGroupId(0), - None, ) .await? .read_only_effects() .run_action(name, input, self.args.clone()); - let output: Option = match timeout { - Some(timeout_duration) => tokio::time::timeout(timeout_duration, running_action) - .await - .map_err(|_| (JsError::Timeout, "Timed out. Retrying soon...".to_owned()))??, - None => running_action.await?, - }; + let output: Option = running_action.await?; let output: O = unwrap_known_error(output)?; Ok(output) } @@ -720,7 +808,7 @@ async fn js_disk_usage() { .unwrap(); let input: Option = None; let timeout = Some(Duration::from_secs(10)); - dbg!(js_action + js_action .execute::( &path, &package_id, @@ -734,5 +822,5 @@ async fn js_disk_usage() { ) .await .unwrap() - .unwrap()); + .unwrap(); } diff --git a/backend/src/procedure/mod.rs b/backend/src/procedure/mod.rs index 4cc259303..d6d01bf00 100644 --- a/backend/src/procedure/mod.rs +++ b/backend/src/procedure/mod.rs @@ -21,8 +21,6 @@ pub mod docker; pub mod js_scripts; pub use models::ProcedureName; -// TODO: create RPC endpoint that looks up the appropriate action and calls `execute` - #[derive(Clone, Debug, Deserialize, Serialize, HasModel)] #[serde(rename_all = "kebab-case")] #[serde(tag = "type")] @@ -139,7 +137,15 @@ impl PackageProcedure { #[cfg(feature = "js_engine")] PackageProcedure::Script(procedure) => { procedure - .sandboxed(ctx, pkg_id, pkg_version, volumes, input, timeout, name) + .sandboxed( + &ctx.datadir, + pkg_id, + pkg_version, + volumes, + input, + timeout, + name, + ) .await } } @@ -157,13 +163,15 @@ impl std::fmt::Display for PackageProcedure { } } +// TODO: make this not allocate #[derive(Debug)] pub struct NoOutput; impl<'de> Deserialize<'de> for NoOutput { - fn deserialize(_: D) -> Result + fn deserialize(deserializer: D) -> Result where D: serde::Deserializer<'de>, { + let _ = Value::deserialize(deserializer)?; Ok(NoOutput) } } diff --git a/backend/src/registry/admin.rs b/backend/src/registry/admin.rs index f6eecc1f2..44b83d161 100644 --- a/backend/src/registry/admin.rs +++ b/backend/src/registry/admin.rs @@ -52,7 +52,7 @@ async fn do_index( pkg: &Package, ) -> Result<(), Error> { url.set_path("/admin/v0/index"); - let mut req = httpc + let req = httpc .post(url) .header(header::ACCEPT, "text/plain") .basic_auth(user, Some(pass)) @@ -74,7 +74,7 @@ async fn do_upload( body: Body, ) -> Result<(), Error> { url.set_path("/admin/v0/upload"); - let mut req = httpc + let req = httpc .post(url) .header(header::ACCEPT, "text/plain") .basic_auth(user, Some(pass)) diff --git a/libs/js_engine/src/lib.rs b/libs/js_engine/src/lib.rs index 023726d7f..b09e1fbb0 100644 --- a/libs/js_engine/src/lib.rs +++ b/libs/js_engine/src/lib.rs @@ -11,8 +11,7 @@ use deno_core::{ ModuleSourceFuture, ModuleSpecifier, ModuleType, OpDecl, ResolutionKind, RuntimeOptions, Snapshot, }; -use embassy_container_init::ProcessGroupId; -use helpers::{script_dir, spawn_local, Rsync, UnixRpcClient}; +use helpers::{script_dir, spawn_local, Rsync}; use models::{PackageId, ProcedureName, Version, VolumeId}; use serde::{Deserialize, Serialize}; use serde_json::Value; @@ -101,8 +100,6 @@ struct JsContext { volumes: Arc, input: Value, variable_args: Vec, - container_process_gid: ProcessGroupId, - container_rpc_client: Option>, rsyncs: Arc)>>, } #[derive(Debug, Clone, serde::Deserialize, serde::Serialize)] @@ -183,8 +180,6 @@ pub struct JsExecutionEnvironment { package_id: PackageId, version: Version, volumes: Arc, - container_process_gid: ProcessGroupId, - container_rpc_client: Option>, } impl JsExecutionEnvironment { @@ -193,8 +188,6 @@ impl JsExecutionEnvironment { package_id: &PackageId, version: &Version, volumes: Box, - container_process_gid: ProcessGroupId, - container_rpc_client: Option>, ) -> Result { let data_dir = data_directory.as_ref(); let base_directory = data_dir; @@ -228,8 +221,6 @@ impl JsExecutionEnvironment { version: version.clone(), volumes: volumes.into(), sandboxed: false, - container_process_gid, - container_rpc_client, }) } pub fn read_only_effects(mut self) -> Self { @@ -295,11 +286,7 @@ impl JsExecutionEnvironment { fns::get_variable_args::decl(), fns::set_value::decl(), fns::is_sandboxed::decl(), - fns::start_command::decl(), - fns::wait_command::decl(), fns::sleep::decl(), - fns::send_signal::decl(), - fns::signal_group::decl(), fns::rsync::decl(), fns::rsync_wait::decl(), fns::rsync_progress::decl(), @@ -332,8 +319,6 @@ impl JsExecutionEnvironment { sandboxed: self.sandboxed, input, variable_args, - container_process_gid: self.container_process_gid, - container_rpc_client: self.container_rpc_client.clone(), rsyncs: Default::default(), }; let ext = Extension::builder("embassy") @@ -389,20 +374,17 @@ mod fns { use deno_core::anyhow::{anyhow, bail}; use deno_core::error::AnyError; use deno_core::*; - use embassy_container_init::{ - OutputParams, OutputStrategy, ProcessGroupId, ProcessId, RunCommand, RunCommandParams, - SendSignal, SendSignalParams, SignalGroup, SignalGroupParams, - }; + use embassy_container_init::ProcessId; use helpers::{to_tmp_path, AtomicFile, Rsync, RsyncOptions}; use itertools::Itertools; use models::VolumeId; use serde::{Deserialize, Serialize}; - use serde_json::{json, Value}; + use serde_json::Value; use tokio::io::AsyncWriteExt; use tokio::process::Command; use super::{AnswerState, JsContext}; - use crate::{system_time_as_unix_ms, MetadataJs, ResultType}; + use crate::{system_time_as_unix_ms, MetadataJs}; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, Default)] struct FetchOptions { @@ -992,18 +974,6 @@ mod fns { let state = state.borrow(); state.borrow::().clone() }; - if let Some(rpc_client) = ctx.container_rpc_client { - return rpc_client - .request( - embassy_container_init::Log, - embassy_container_init::LogParams { - gid: Some(ctx.container_process_gid), - level: embassy_container_init::LogLevel::Trace(input), - }, - ) - .await - .map_err(|e| anyhow!("{}: {:?}", e.message, e.data)); - } tracing::trace!( package_id = tracing::field::display(&ctx.package_id), run_function = tracing::field::display(&ctx.run_function), @@ -1018,18 +988,6 @@ mod fns { let state = state.borrow(); state.borrow::().clone() }; - if let Some(rpc_client) = ctx.container_rpc_client { - return rpc_client - .request( - embassy_container_init::Log, - embassy_container_init::LogParams { - gid: Some(ctx.container_process_gid), - level: embassy_container_init::LogLevel::Warn(input), - }, - ) - .await - .map_err(|e| anyhow!("{}: {:?}", e.message, e.data)); - } tracing::warn!( package_id = tracing::field::display(&ctx.package_id), run_function = tracing::field::display(&ctx.run_function), @@ -1044,18 +1002,6 @@ mod fns { let state = state.borrow(); state.borrow::().clone() }; - if let Some(rpc_client) = ctx.container_rpc_client { - return rpc_client - .request( - embassy_container_init::Log, - embassy_container_init::LogParams { - gid: Some(ctx.container_process_gid), - level: embassy_container_init::LogLevel::Error(input), - }, - ) - .await - .map_err(|e| anyhow!("{}: {:?}", e.message, e.data)); - } tracing::error!( package_id = tracing::field::display(&ctx.package_id), run_function = tracing::field::display(&ctx.run_function), @@ -1070,18 +1016,6 @@ mod fns { let state = state.borrow(); state.borrow::().clone() }; - if let Some(rpc_client) = ctx.container_rpc_client { - return rpc_client - .request( - embassy_container_init::Log, - embassy_container_init::LogParams { - gid: Some(ctx.container_process_gid), - level: embassy_container_init::LogLevel::Debug(input), - }, - ) - .await - .map_err(|e| anyhow!("{}: {:?}", e.message, e.data)); - } tracing::debug!( package_id = tracing::field::display(&ctx.package_id), run_function = tracing::field::display(&ctx.run_function), @@ -1092,28 +1026,11 @@ mod fns { } #[op] async fn log_info(state: Rc>, input: String) -> Result<(), AnyError> { - let (container_rpc_client, container_process_gid, package_id, run_function) = { + let (package_id, run_function) = { let state = state.borrow(); let ctx: JsContext = state.borrow::().clone(); - ( - ctx.container_rpc_client, - ctx.container_process_gid, - ctx.package_id, - ctx.run_function, - ) + (ctx.package_id, ctx.run_function) }; - if let Some(rpc_client) = container_rpc_client { - return rpc_client - .request( - embassy_container_init::Log, - embassy_container_init::LogParams { - gid: Some(container_process_gid), - level: embassy_container_init::LogLevel::Info(input), - }, - ) - .await - .map_err(|e| anyhow!("{}: {:?}", e.message, e.data)); - } tracing::info!( package_id = tracing::field::display(&package_id), run_function = tracing::field::display(&run_function), @@ -1145,144 +1062,12 @@ mod fns { Ok(ctx.sandboxed) } - #[op] - async fn send_signal( - state: Rc>, - pid: u32, - signal: u32, - ) -> Result<(), AnyError> { - if let Some(rpc_client) = { - let state = state.borrow(); - let ctx = state.borrow::(); - ctx.container_rpc_client.clone() - } { - rpc_client - .request( - SendSignal, - SendSignalParams { - pid: ProcessId(pid), - signal, - }, - ) - .await - .map_err(|e| anyhow!("{}: {:?}", e.message, e.data))?; - - Ok(()) - } else { - Err(anyhow!("No RpcClient for command operations")) - } - } - - #[op] - async fn signal_group( - state: Rc>, - gid: u32, - signal: u32, - ) -> Result<(), AnyError> { - if let Some(rpc_client) = { - let state = state.borrow(); - let ctx = state.borrow::(); - ctx.container_rpc_client.clone() - } { - rpc_client - .request( - SignalGroup, - SignalGroupParams { - gid: ProcessGroupId(gid), - signal, - }, - ) - .await - .map_err(|e| anyhow!("{}: {:?}", e.message, e.data))?; - - Ok(()) - } else { - Err(anyhow!("No RpcClient for command operations")) - } - } - #[derive(Debug, Clone, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct StartCommand { process_id: ProcessId, } - #[op] - async fn start_command( - state: Rc>, - command: String, - args: Vec, - output: OutputStrategy, - timeout: Option, - ) -> Result { - if let (gid, Some(rpc_client)) = { - let state = state.borrow(); - let ctx = state.borrow::(); - (ctx.container_process_gid, ctx.container_rpc_client.clone()) - } { - let pid = rpc_client - .request( - RunCommand, - RunCommandParams { - gid: Some(gid), - command, - args, - output, - }, - ) - .await - .map_err(|e| anyhow!("{}: {:?}", e.message, e.data))?; - - if let Some(timeout) = timeout { - tokio::spawn(async move { - tokio::time::sleep(Duration::from_millis(timeout)).await; - if let Err(err) = rpc_client - .request(SendSignal, SendSignalParams { pid, signal: 9 }) - .await - .map_err(|e| anyhow!("{}: {:?}", e.message, e.data)) - { - tracing::warn!("Could not kill process {pid:?}"); - tracing::debug!("{err:?}"); - } - }); - } - - Ok(StartCommand { process_id: pid }) - } else { - Err(anyhow!("No RpcClient for command operations")) - } - } - - #[op] - async fn wait_command( - state: Rc>, - pid: ProcessId, - ) -> Result { - if let Some(rpc_client) = { - let state = state.borrow(); - let ctx = state.borrow::(); - ctx.container_rpc_client.clone() - } { - Ok( - match rpc_client - .request(embassy_container_init::Output, OutputParams { pid }) - .await - { - Ok(a) => ResultType::Result(json!(a)), - Err(e) => ResultType::ErrorCode( - e.code, - match e.data { - Some(Value::String(s)) => s, - e => format!("{:?}", e), - }, - ), - }, - ) - } else { - Err(anyhow!("No RpcClient for command operations")) - } - } - #[op] async fn sleep(time_ms: u64) -> Result<(), AnyError> { tokio::time::sleep(Duration::from_millis(time_ms)).await; diff --git a/libs/models/src/procedure_name.rs b/libs/models/src/procedure_name.rs index ae71e3ad5..6a092955a 100644 --- a/libs/models/src/procedure_name.rs +++ b/libs/models/src/procedure_name.rs @@ -1,6 +1,8 @@ +use serde::{Deserialize, Serialize}; + use crate::{ActionId, HealthCheckId, PackageId}; -#[derive(Debug, Clone)] +#[derive(Debug, Clone, Serialize, Deserialize)] pub enum ProcedureName { Main, // Usually just run container CreateBackup, From 58bb788034e0e44804fc770b8f794dd3b690a64b Mon Sep 17 00:00:00 2001 From: Aiden McClelland <3732071+dr-bonez@users.noreply.github.com> Date: Wed, 18 Oct 2023 16:53:54 -0600 Subject: [PATCH 38/38] chore: update dependencies (#2465) * chore: update dependencies * fix crypto * update deno * update release notes --- Makefile | 10 +- ...00f2b22433c86617a0dbf796bf2170186dd2e.json | 16 + ...ea745ffa5da4479478c1fd2158a45324b1930.json | 14 + ...36e463c20c841a7d6a0eb15be0f24f4a928ec.json | 40 + ...ef6cb0f1e9a4e158260700f1639dd4b438997.json | 34 + ...4f925f61dc5ea371903e62cdffa5d7b67ca96.json | 50 + ...c3afb81c2be5c681cfa8b4be0ce70610e9c3a.json | 14 + ...a83dbc6afd07cae69d246987f62cf0cc35c2a.json | 20 + ...bd8361776290a9411d527eaf1fdb40bef399d.json | 23 + ...9c1550a41ee580dad3f49d35cb843ebef10ca.json | 14 + ...5b987c5af5807151ff71a59000014586752e0.json | 24 + ...d514a66c421a11ab04c26d89a7aa8f6b67210.json | 65 + ...b98a73045adf618696cd838d79203ef5383fb.json | 19 + ...9f96a8bdb0fc97ee8a3c6df1069e1e2b98576.json | 14 + ...e3526b70bccf3e407327917294a993bc17ed5.json | 16 + ...bbf6bea226d38efaf6559923c79a36d5ca08c.json | 64 + ...5ab58252362694cf0f56999bf60194d20583a.json | 44 + ...337527233c84eee758ac9be967906e5841d27.json | 14 + ...9424e6b5a1d1402e028219e21726f1ebd282e.json | 32 + ...c4393a9a8fde2833cf096af766a979d94dee6.json | 18 + ...429d4c9b2cf534e76f35c80a2bf60e8599cca.json | 20 + ...21ea72db8cfb362e7181c8226d9297507c62b.json | 19 + ...9e34aeaef1154dcd3d6811ab504915497ccf7.json | 14 + ...f3ff3f9aed7f90027a9ba97634bcb47d772f0.json | 20 + ...799bd4f82e761837b526a0972c3d4439a264d.json | 16 + ...b81803f1e9ec9e8ebbf15cafddfc1c5a028ed.json | 40 + ...139c7b7569602adb58f2d6b3a94da4f167b0a.json | 14 + ...4ac6a5f34dd820c4073b7728c7067aab9fded.json | 25 + ...67b9deb46da75788c7fe6082b43821c22d556.json | 16 + ...cc96547f3f6dbec11bf2eadfaf53ad8ab51b5.json | 20 + ...ad285680ce157aae9d7837ac020c8b2945e7f.json | 62 + backend/Cargo.lock | 2220 +++++++++-------- backend/Cargo.toml | 164 +- backend/sqlx-data.json | 744 ------ backend/src/account.rs | 25 +- backend/src/auth.rs | 6 +- backend/src/backup/backup_bulk.rs | 4 +- backend/src/backup/restore.rs | 6 +- backend/src/backup/target/mod.rs | 6 +- backend/src/config/spec.rs | 5 +- backend/src/context/cli.rs | 8 +- backend/src/context/rpc.rs | 7 +- backend/src/context/sdk.rs | 20 +- backend/src/db/model.rs | 2 +- backend/src/developer/mod.rs | 9 +- backend/src/install/mod.rs | 9 +- backend/src/manager/mod.rs | 7 +- backend/src/middleware/auth.rs | 4 +- backend/src/middleware/encrypt.rs | 2 +- backend/src/net/dns.rs | 6 +- backend/src/net/keys.rs | 35 +- backend/src/registry/marketplace.rs | 6 +- backend/src/s9pk/builder.rs | 6 +- backend/src/s9pk/header.rs | 14 +- backend/src/s9pk/reader.rs | 10 +- backend/src/setup.rs | 4 +- backend/src/util/crypto.rs | 13 + backend/src/util/io.rs | 6 +- backend/src/util/mod.rs | 3 +- backend/src/util/serde.rs | 37 +- backend/update-sqlx-data.sh | 2 +- build/lib/depends | 2 + build/lib/motd | 0 build/lib/scripts/chroot-and-upgrade | 7 +- .../modals/os-welcome/os-welcome.page.html | 1 + libs/Cargo.lock | 1488 ++++++----- libs/build-arm-v8-snapshot.sh | 2 +- libs/embassy_container_init/Cargo.toml | 4 +- libs/helpers/Cargo.toml | 10 +- libs/js_engine/Cargo.toml | 14 +- .../src/artifacts/ARM_JS_SNAPSHOT.bin | Bin 513616 -> 547549 bytes libs/js_engine/src/artifacts/JS_SNAPSHOT.bin | Bin 459740 -> 493225 bytes libs/models/Cargo.toml | 29 +- libs/snapshot_creator/Cargo.toml | 4 +- libs/snapshot_creator/src/main.rs | 2 +- system-images/compat/Cargo.lock | 1777 +++++++------ system-images/compat/Makefile | 2 +- 77 files changed, 4114 insertions(+), 3429 deletions(-) create mode 100644 backend/.sqlx/query-1ce5254f27de971fd87f5ab66d300f2b22433c86617a0dbf796bf2170186dd2e.json create mode 100644 backend/.sqlx/query-21471490cdc3adb206274cc68e1ea745ffa5da4479478c1fd2158a45324b1930.json create mode 100644 backend/.sqlx/query-28ea34bbde836e0618c5fc9bb7c36e463c20c841a7d6a0eb15be0f24f4a928ec.json create mode 100644 backend/.sqlx/query-4099028a5c0de578255bf54a67cef6cb0f1e9a4e158260700f1639dd4b438997.json create mode 100644 backend/.sqlx/query-4691e3a2ce80b59009ac17124f54f925f61dc5ea371903e62cdffa5d7b67ca96.json create mode 100644 backend/.sqlx/query-4bcfbefb1eb3181343871a1cd7fc3afb81c2be5c681cfa8b4be0ce70610e9c3a.json create mode 100644 backend/.sqlx/query-629be61c3c341c131ddbbff0293a83dbc6afd07cae69d246987f62cf0cc35c2a.json create mode 100644 backend/.sqlx/query-687688055e63d27123cdc89a5bbbd8361776290a9411d527eaf1fdb40bef399d.json create mode 100644 backend/.sqlx/query-6d35ccf780fb2bb62586dd1d3df9c1550a41ee580dad3f49d35cb843ebef10ca.json create mode 100644 backend/.sqlx/query-770c1017734720453dc87b58c385b987c5af5807151ff71a59000014586752e0.json create mode 100644 backend/.sqlx/query-7b64f032d507e8ffe37c41f4c7ad514a66c421a11ab04c26d89a7aa8f6b67210.json create mode 100644 backend/.sqlx/query-7c7a3549c997eb75bf964ea65fbb98a73045adf618696cd838d79203ef5383fb.json create mode 100644 backend/.sqlx/query-7e0649d839927e57fa03ee51a2c9f96a8bdb0fc97ee8a3c6df1069e1e2b98576.json create mode 100644 backend/.sqlx/query-8951b9126fbf60dbb5997241e11e3526b70bccf3e407327917294a993bc17ed5.json create mode 100644 backend/.sqlx/query-94d471bb374b4965c6cbedf8c17bbf6bea226d38efaf6559923c79a36d5ca08c.json create mode 100644 backend/.sqlx/query-95c4ab4c645f3302568c6ff13d85ab58252362694cf0f56999bf60194d20583a.json create mode 100644 backend/.sqlx/query-a60d6e66719325b08dc4ecfacaf337527233c84eee758ac9be967906e5841d27.json create mode 100644 backend/.sqlx/query-a6b0c8909a3a5d6d9156aebfb359424e6b5a1d1402e028219e21726f1ebd282e.json create mode 100644 backend/.sqlx/query-b1147beaaabbed89f2ab8c1e13ec4393a9a8fde2833cf096af766a979d94dee6.json create mode 100644 backend/.sqlx/query-d5117054072476377f3c4f040ea429d4c9b2cf534e76f35c80a2bf60e8599cca.json create mode 100644 backend/.sqlx/query-da71f94b29798d1738d2b10b9a721ea72db8cfb362e7181c8226d9297507c62b.json create mode 100644 backend/.sqlx/query-e185203cf84e43b801dfb23b4159e34aeaef1154dcd3d6811ab504915497ccf7.json create mode 100644 backend/.sqlx/query-e545696735f202f9d13cf22a561f3ff3f9aed7f90027a9ba97634bcb47d772f0.json create mode 100644 backend/.sqlx/query-e5843c5b0e7819b29aa1abf2266799bd4f82e761837b526a0972c3d4439a264d.json create mode 100644 backend/.sqlx/query-e95322a8e2ae3b93f1e974b24c0b81803f1e9ec9e8ebbf15cafddfc1c5a028ed.json create mode 100644 backend/.sqlx/query-eb750adaa305bdbf3c5b70aaf59139c7b7569602adb58f2d6b3a94da4f167b0a.json create mode 100644 backend/.sqlx/query-ecc765d8205c0876956f95f76944ac6a5f34dd820c4073b7728c7067aab9fded.json create mode 100644 backend/.sqlx/query-f6d1c5ef0f9d9577bea8382318967b9deb46da75788c7fe6082b43821c22d556.json create mode 100644 backend/.sqlx/query-f7d2dae84613bcef330f7403352cc96547f3f6dbec11bf2eadfaf53ad8ab51b5.json create mode 100644 backend/.sqlx/query-fe6e4f09f3028e5b6b6259e86cbad285680ce157aae9d7837ac020c8b2945e7f.json delete mode 100644 backend/sqlx-data.json create mode 100644 backend/src/util/crypto.rs mode change 100644 => 100755 build/lib/motd diff --git a/Makefile b/Makefile index 3b4aca221..38f09468f 100644 --- a/Makefile +++ b/Makefile @@ -124,7 +124,7 @@ update: @if [ -z "$(REMOTE)" ]; then >&2 echo "Must specify REMOTE" && false; fi $(call ssh,"sudo rsync -a --delete --force --info=progress2 /media/embassy/embassyfs/current/ /media/embassy/next/") $(MAKE) install REMOTE=$(REMOTE) SSHPASS=$(SSHPASS) DESTDIR=/media/embassy/next OS_ARCH=$(OS_ARCH) - $(call ssh,"sudo touch /media/embassy/config/upgrade && sudo sync && sudo reboot") + $(call ssh,'sudo NO_SYNC=1 /media/embassy/next/usr/lib/embassy/scripts/chroot-and-upgrade "apt-get install -y $(shell cat ./build/lib/depends)"') emulate-reflash: @if [ -z "$(REMOTE)" ]; then >&2 echo "Must specify REMOTE" && false; fi @@ -132,14 +132,14 @@ emulate-reflash: $(MAKE) install REMOTE=$(REMOTE) SSHPASS=$(SSHPASS) DESTDIR=/media/embassy/next OS_ARCH=$(OS_ARCH) $(call ssh,"sudo touch /media/embassy/config/upgrade && sudo rm -f /media/embassy/config/disk.guid && sudo sync && sudo reboot") -system-images/compat/docker-images/aarch64.tar system-images/compat/docker-images/x86_64.tar: $(COMPAT_SRC) - cd system-images/compat && make +system-images/compat/docker-images/aarch64.tar system-images/compat/docker-images/x86_64.tar: $(COMPAT_SRC) backend/Cargo.lock + cd system-images/compat && make && touch docker-images/*.tar system-images/utils/docker-images/aarch64.tar system-images/utils/docker-images/x86_64.tar: $(UTILS_SRC) - cd system-images/utils && make + cd system-images/utils && make && touch docker-images/*.tar system-images/binfmt/docker-images/aarch64.tar system-images/binfmt/docker-images/x86_64.tar: $(BINFMT_SRC) - cd system-images/binfmt && make + cd system-images/binfmt && make && touch docker-images/*.tar snapshots: libs/snapshot_creator/Cargo.toml cd libs/ && ./build-v8-snapshot.sh diff --git a/backend/.sqlx/query-1ce5254f27de971fd87f5ab66d300f2b22433c86617a0dbf796bf2170186dd2e.json b/backend/.sqlx/query-1ce5254f27de971fd87f5ab66d300f2b22433c86617a0dbf796bf2170186dd2e.json new file mode 100644 index 000000000..d36100fef --- /dev/null +++ b/backend/.sqlx/query-1ce5254f27de971fd87f5ab66d300f2b22433c86617a0dbf796bf2170186dd2e.json @@ -0,0 +1,16 @@ +{ + "db_name": "PostgreSQL", + "query": "INSERT INTO network_keys (package, interface, key) VALUES ($1, $2, $3) ON CONFLICT (package, interface) DO NOTHING", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Text", + "Text", + "Bytea" + ] + }, + "nullable": [] + }, + "hash": "1ce5254f27de971fd87f5ab66d300f2b22433c86617a0dbf796bf2170186dd2e" +} diff --git a/backend/.sqlx/query-21471490cdc3adb206274cc68e1ea745ffa5da4479478c1fd2158a45324b1930.json b/backend/.sqlx/query-21471490cdc3adb206274cc68e1ea745ffa5da4479478c1fd2158a45324b1930.json new file mode 100644 index 000000000..e0b1d7cf2 --- /dev/null +++ b/backend/.sqlx/query-21471490cdc3adb206274cc68e1ea745ffa5da4479478c1fd2158a45324b1930.json @@ -0,0 +1,14 @@ +{ + "db_name": "PostgreSQL", + "query": "DELETE FROM ssh_keys WHERE fingerprint = $1", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Text" + ] + }, + "nullable": [] + }, + "hash": "21471490cdc3adb206274cc68e1ea745ffa5da4479478c1fd2158a45324b1930" +} diff --git a/backend/.sqlx/query-28ea34bbde836e0618c5fc9bb7c36e463c20c841a7d6a0eb15be0f24f4a928ec.json b/backend/.sqlx/query-28ea34bbde836e0618c5fc9bb7c36e463c20c841a7d6a0eb15be0f24f4a928ec.json new file mode 100644 index 000000000..e234a72a9 --- /dev/null +++ b/backend/.sqlx/query-28ea34bbde836e0618c5fc9bb7c36e463c20c841a7d6a0eb15be0f24f4a928ec.json @@ -0,0 +1,40 @@ +{ + "db_name": "PostgreSQL", + "query": "SELECT hostname, path, username, password FROM cifs_shares WHERE id = $1", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "hostname", + "type_info": "Text" + }, + { + "ordinal": 1, + "name": "path", + "type_info": "Text" + }, + { + "ordinal": 2, + "name": "username", + "type_info": "Text" + }, + { + "ordinal": 3, + "name": "password", + "type_info": "Text" + } + ], + "parameters": { + "Left": [ + "Int4" + ] + }, + "nullable": [ + false, + false, + false, + true + ] + }, + "hash": "28ea34bbde836e0618c5fc9bb7c36e463c20c841a7d6a0eb15be0f24f4a928ec" +} diff --git a/backend/.sqlx/query-4099028a5c0de578255bf54a67cef6cb0f1e9a4e158260700f1639dd4b438997.json b/backend/.sqlx/query-4099028a5c0de578255bf54a67cef6cb0f1e9a4e158260700f1639dd4b438997.json new file mode 100644 index 000000000..761af064b --- /dev/null +++ b/backend/.sqlx/query-4099028a5c0de578255bf54a67cef6cb0f1e9a4e158260700f1639dd4b438997.json @@ -0,0 +1,34 @@ +{ + "db_name": "PostgreSQL", + "query": "SELECT * FROM ssh_keys WHERE fingerprint = $1", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "fingerprint", + "type_info": "Text" + }, + { + "ordinal": 1, + "name": "openssh_pubkey", + "type_info": "Text" + }, + { + "ordinal": 2, + "name": "created_at", + "type_info": "Text" + } + ], + "parameters": { + "Left": [ + "Text" + ] + }, + "nullable": [ + false, + false, + false + ] + }, + "hash": "4099028a5c0de578255bf54a67cef6cb0f1e9a4e158260700f1639dd4b438997" +} diff --git a/backend/.sqlx/query-4691e3a2ce80b59009ac17124f54f925f61dc5ea371903e62cdffa5d7b67ca96.json b/backend/.sqlx/query-4691e3a2ce80b59009ac17124f54f925f61dc5ea371903e62cdffa5d7b67ca96.json new file mode 100644 index 000000000..1f7edd1ce --- /dev/null +++ b/backend/.sqlx/query-4691e3a2ce80b59009ac17124f54f925f61dc5ea371903e62cdffa5d7b67ca96.json @@ -0,0 +1,50 @@ +{ + "db_name": "PostgreSQL", + "query": "SELECT * FROM session WHERE logged_out IS NULL OR logged_out > CURRENT_TIMESTAMP", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "id", + "type_info": "Text" + }, + { + "ordinal": 1, + "name": "logged_in", + "type_info": "Timestamp" + }, + { + "ordinal": 2, + "name": "logged_out", + "type_info": "Timestamp" + }, + { + "ordinal": 3, + "name": "last_active", + "type_info": "Timestamp" + }, + { + "ordinal": 4, + "name": "user_agent", + "type_info": "Text" + }, + { + "ordinal": 5, + "name": "metadata", + "type_info": "Text" + } + ], + "parameters": { + "Left": [] + }, + "nullable": [ + false, + false, + true, + false, + true, + false + ] + }, + "hash": "4691e3a2ce80b59009ac17124f54f925f61dc5ea371903e62cdffa5d7b67ca96" +} diff --git a/backend/.sqlx/query-4bcfbefb1eb3181343871a1cd7fc3afb81c2be5c681cfa8b4be0ce70610e9c3a.json b/backend/.sqlx/query-4bcfbefb1eb3181343871a1cd7fc3afb81c2be5c681cfa8b4be0ce70610e9c3a.json new file mode 100644 index 000000000..2157198e5 --- /dev/null +++ b/backend/.sqlx/query-4bcfbefb1eb3181343871a1cd7fc3afb81c2be5c681cfa8b4be0ce70610e9c3a.json @@ -0,0 +1,14 @@ +{ + "db_name": "PostgreSQL", + "query": "UPDATE session SET logged_out = CURRENT_TIMESTAMP WHERE id = $1", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Text" + ] + }, + "nullable": [] + }, + "hash": "4bcfbefb1eb3181343871a1cd7fc3afb81c2be5c681cfa8b4be0ce70610e9c3a" +} diff --git a/backend/.sqlx/query-629be61c3c341c131ddbbff0293a83dbc6afd07cae69d246987f62cf0cc35c2a.json b/backend/.sqlx/query-629be61c3c341c131ddbbff0293a83dbc6afd07cae69d246987f62cf0cc35c2a.json new file mode 100644 index 000000000..764cff84a --- /dev/null +++ b/backend/.sqlx/query-629be61c3c341c131ddbbff0293a83dbc6afd07cae69d246987f62cf0cc35c2a.json @@ -0,0 +1,20 @@ +{ + "db_name": "PostgreSQL", + "query": "SELECT password FROM account", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "password", + "type_info": "Text" + } + ], + "parameters": { + "Left": [] + }, + "nullable": [ + false + ] + }, + "hash": "629be61c3c341c131ddbbff0293a83dbc6afd07cae69d246987f62cf0cc35c2a" +} diff --git a/backend/.sqlx/query-687688055e63d27123cdc89a5bbbd8361776290a9411d527eaf1fdb40bef399d.json b/backend/.sqlx/query-687688055e63d27123cdc89a5bbbd8361776290a9411d527eaf1fdb40bef399d.json new file mode 100644 index 000000000..2e8a9ee0e --- /dev/null +++ b/backend/.sqlx/query-687688055e63d27123cdc89a5bbbd8361776290a9411d527eaf1fdb40bef399d.json @@ -0,0 +1,23 @@ +{ + "db_name": "PostgreSQL", + "query": "SELECT key FROM tor WHERE package = $1 AND interface = $2", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "key", + "type_info": "Bytea" + } + ], + "parameters": { + "Left": [ + "Text", + "Text" + ] + }, + "nullable": [ + false + ] + }, + "hash": "687688055e63d27123cdc89a5bbbd8361776290a9411d527eaf1fdb40bef399d" +} diff --git a/backend/.sqlx/query-6d35ccf780fb2bb62586dd1d3df9c1550a41ee580dad3f49d35cb843ebef10ca.json b/backend/.sqlx/query-6d35ccf780fb2bb62586dd1d3df9c1550a41ee580dad3f49d35cb843ebef10ca.json new file mode 100644 index 000000000..3f859bd10 --- /dev/null +++ b/backend/.sqlx/query-6d35ccf780fb2bb62586dd1d3df9c1550a41ee580dad3f49d35cb843ebef10ca.json @@ -0,0 +1,14 @@ +{ + "db_name": "PostgreSQL", + "query": "UPDATE session SET last_active = CURRENT_TIMESTAMP WHERE id = $1 AND logged_out IS NULL OR logged_out > CURRENT_TIMESTAMP", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Text" + ] + }, + "nullable": [] + }, + "hash": "6d35ccf780fb2bb62586dd1d3df9c1550a41ee580dad3f49d35cb843ebef10ca" +} diff --git a/backend/.sqlx/query-770c1017734720453dc87b58c385b987c5af5807151ff71a59000014586752e0.json b/backend/.sqlx/query-770c1017734720453dc87b58c385b987c5af5807151ff71a59000014586752e0.json new file mode 100644 index 000000000..cf3591e01 --- /dev/null +++ b/backend/.sqlx/query-770c1017734720453dc87b58c385b987c5af5807151ff71a59000014586752e0.json @@ -0,0 +1,24 @@ +{ + "db_name": "PostgreSQL", + "query": "INSERT INTO network_keys (package, interface, key) VALUES ($1, $2, $3) ON CONFLICT (package, interface) DO UPDATE SET package = EXCLUDED.package RETURNING key", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "key", + "type_info": "Bytea" + } + ], + "parameters": { + "Left": [ + "Text", + "Text", + "Bytea" + ] + }, + "nullable": [ + false + ] + }, + "hash": "770c1017734720453dc87b58c385b987c5af5807151ff71a59000014586752e0" +} diff --git a/backend/.sqlx/query-7b64f032d507e8ffe37c41f4c7ad514a66c421a11ab04c26d89a7aa8f6b67210.json b/backend/.sqlx/query-7b64f032d507e8ffe37c41f4c7ad514a66c421a11ab04c26d89a7aa8f6b67210.json new file mode 100644 index 000000000..53fc6f066 --- /dev/null +++ b/backend/.sqlx/query-7b64f032d507e8ffe37c41f4c7ad514a66c421a11ab04c26d89a7aa8f6b67210.json @@ -0,0 +1,65 @@ +{ + "db_name": "PostgreSQL", + "query": "SELECT id, package_id, created_at, code, level, title, message, data FROM notifications WHERE id < $1 ORDER BY id DESC LIMIT $2", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "id", + "type_info": "Int4" + }, + { + "ordinal": 1, + "name": "package_id", + "type_info": "Text" + }, + { + "ordinal": 2, + "name": "created_at", + "type_info": "Timestamp" + }, + { + "ordinal": 3, + "name": "code", + "type_info": "Int4" + }, + { + "ordinal": 4, + "name": "level", + "type_info": "Text" + }, + { + "ordinal": 5, + "name": "title", + "type_info": "Text" + }, + { + "ordinal": 6, + "name": "message", + "type_info": "Text" + }, + { + "ordinal": 7, + "name": "data", + "type_info": "Text" + } + ], + "parameters": { + "Left": [ + "Int4", + "Int8" + ] + }, + "nullable": [ + false, + true, + false, + false, + false, + false, + false, + true + ] + }, + "hash": "7b64f032d507e8ffe37c41f4c7ad514a66c421a11ab04c26d89a7aa8f6b67210" +} diff --git a/backend/.sqlx/query-7c7a3549c997eb75bf964ea65fbb98a73045adf618696cd838d79203ef5383fb.json b/backend/.sqlx/query-7c7a3549c997eb75bf964ea65fbb98a73045adf618696cd838d79203ef5383fb.json new file mode 100644 index 000000000..245a838d8 --- /dev/null +++ b/backend/.sqlx/query-7c7a3549c997eb75bf964ea65fbb98a73045adf618696cd838d79203ef5383fb.json @@ -0,0 +1,19 @@ +{ + "db_name": "PostgreSQL", + "query": "\n INSERT INTO account (\n id,\n server_id,\n hostname,\n password,\n network_key,\n root_ca_key_pem,\n root_ca_cert_pem\n ) VALUES (\n 0, $1, $2, $3, $4, $5, $6\n ) ON CONFLICT (id) DO UPDATE SET\n server_id = EXCLUDED.server_id,\n hostname = EXCLUDED.hostname,\n password = EXCLUDED.password,\n network_key = EXCLUDED.network_key,\n root_ca_key_pem = EXCLUDED.root_ca_key_pem,\n root_ca_cert_pem = EXCLUDED.root_ca_cert_pem\n ", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Text", + "Text", + "Text", + "Bytea", + "Text", + "Text" + ] + }, + "nullable": [] + }, + "hash": "7c7a3549c997eb75bf964ea65fbb98a73045adf618696cd838d79203ef5383fb" +} diff --git a/backend/.sqlx/query-7e0649d839927e57fa03ee51a2c9f96a8bdb0fc97ee8a3c6df1069e1e2b98576.json b/backend/.sqlx/query-7e0649d839927e57fa03ee51a2c9f96a8bdb0fc97ee8a3c6df1069e1e2b98576.json new file mode 100644 index 000000000..e3ce7957d --- /dev/null +++ b/backend/.sqlx/query-7e0649d839927e57fa03ee51a2c9f96a8bdb0fc97ee8a3c6df1069e1e2b98576.json @@ -0,0 +1,14 @@ +{ + "db_name": "PostgreSQL", + "query": "DELETE FROM tor WHERE package = $1", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Text" + ] + }, + "nullable": [] + }, + "hash": "7e0649d839927e57fa03ee51a2c9f96a8bdb0fc97ee8a3c6df1069e1e2b98576" +} diff --git a/backend/.sqlx/query-8951b9126fbf60dbb5997241e11e3526b70bccf3e407327917294a993bc17ed5.json b/backend/.sqlx/query-8951b9126fbf60dbb5997241e11e3526b70bccf3e407327917294a993bc17ed5.json new file mode 100644 index 000000000..e39aebf69 --- /dev/null +++ b/backend/.sqlx/query-8951b9126fbf60dbb5997241e11e3526b70bccf3e407327917294a993bc17ed5.json @@ -0,0 +1,16 @@ +{ + "db_name": "PostgreSQL", + "query": "INSERT INTO tor (package, interface, key) VALUES ($1, $2, $3) ON CONFLICT (package, interface) DO NOTHING", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Text", + "Text", + "Bytea" + ] + }, + "nullable": [] + }, + "hash": "8951b9126fbf60dbb5997241e11e3526b70bccf3e407327917294a993bc17ed5" +} diff --git a/backend/.sqlx/query-94d471bb374b4965c6cbedf8c17bbf6bea226d38efaf6559923c79a36d5ca08c.json b/backend/.sqlx/query-94d471bb374b4965c6cbedf8c17bbf6bea226d38efaf6559923c79a36d5ca08c.json new file mode 100644 index 000000000..e7fe8d38c --- /dev/null +++ b/backend/.sqlx/query-94d471bb374b4965c6cbedf8c17bbf6bea226d38efaf6559923c79a36d5ca08c.json @@ -0,0 +1,64 @@ +{ + "db_name": "PostgreSQL", + "query": "SELECT id, package_id, created_at, code, level, title, message, data FROM notifications ORDER BY id DESC LIMIT $1", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "id", + "type_info": "Int4" + }, + { + "ordinal": 1, + "name": "package_id", + "type_info": "Text" + }, + { + "ordinal": 2, + "name": "created_at", + "type_info": "Timestamp" + }, + { + "ordinal": 3, + "name": "code", + "type_info": "Int4" + }, + { + "ordinal": 4, + "name": "level", + "type_info": "Text" + }, + { + "ordinal": 5, + "name": "title", + "type_info": "Text" + }, + { + "ordinal": 6, + "name": "message", + "type_info": "Text" + }, + { + "ordinal": 7, + "name": "data", + "type_info": "Text" + } + ], + "parameters": { + "Left": [ + "Int8" + ] + }, + "nullable": [ + false, + true, + false, + false, + false, + false, + false, + true + ] + }, + "hash": "94d471bb374b4965c6cbedf8c17bbf6bea226d38efaf6559923c79a36d5ca08c" +} diff --git a/backend/.sqlx/query-95c4ab4c645f3302568c6ff13d85ab58252362694cf0f56999bf60194d20583a.json b/backend/.sqlx/query-95c4ab4c645f3302568c6ff13d85ab58252362694cf0f56999bf60194d20583a.json new file mode 100644 index 000000000..aadc0fc3a --- /dev/null +++ b/backend/.sqlx/query-95c4ab4c645f3302568c6ff13d85ab58252362694cf0f56999bf60194d20583a.json @@ -0,0 +1,44 @@ +{ + "db_name": "PostgreSQL", + "query": "SELECT id, hostname, path, username, password FROM cifs_shares", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "id", + "type_info": "Int4" + }, + { + "ordinal": 1, + "name": "hostname", + "type_info": "Text" + }, + { + "ordinal": 2, + "name": "path", + "type_info": "Text" + }, + { + "ordinal": 3, + "name": "username", + "type_info": "Text" + }, + { + "ordinal": 4, + "name": "password", + "type_info": "Text" + } + ], + "parameters": { + "Left": [] + }, + "nullable": [ + false, + false, + false, + false, + true + ] + }, + "hash": "95c4ab4c645f3302568c6ff13d85ab58252362694cf0f56999bf60194d20583a" +} diff --git a/backend/.sqlx/query-a60d6e66719325b08dc4ecfacaf337527233c84eee758ac9be967906e5841d27.json b/backend/.sqlx/query-a60d6e66719325b08dc4ecfacaf337527233c84eee758ac9be967906e5841d27.json new file mode 100644 index 000000000..c56a9ebd1 --- /dev/null +++ b/backend/.sqlx/query-a60d6e66719325b08dc4ecfacaf337527233c84eee758ac9be967906e5841d27.json @@ -0,0 +1,14 @@ +{ + "db_name": "PostgreSQL", + "query": "DELETE FROM cifs_shares WHERE id = $1", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Int4" + ] + }, + "nullable": [] + }, + "hash": "a60d6e66719325b08dc4ecfacaf337527233c84eee758ac9be967906e5841d27" +} diff --git a/backend/.sqlx/query-a6b0c8909a3a5d6d9156aebfb359424e6b5a1d1402e028219e21726f1ebd282e.json b/backend/.sqlx/query-a6b0c8909a3a5d6d9156aebfb359424e6b5a1d1402e028219e21726f1ebd282e.json new file mode 100644 index 000000000..86bd9250e --- /dev/null +++ b/backend/.sqlx/query-a6b0c8909a3a5d6d9156aebfb359424e6b5a1d1402e028219e21726f1ebd282e.json @@ -0,0 +1,32 @@ +{ + "db_name": "PostgreSQL", + "query": "SELECT fingerprint, openssh_pubkey, created_at FROM ssh_keys", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "fingerprint", + "type_info": "Text" + }, + { + "ordinal": 1, + "name": "openssh_pubkey", + "type_info": "Text" + }, + { + "ordinal": 2, + "name": "created_at", + "type_info": "Text" + } + ], + "parameters": { + "Left": [] + }, + "nullable": [ + false, + false, + false + ] + }, + "hash": "a6b0c8909a3a5d6d9156aebfb359424e6b5a1d1402e028219e21726f1ebd282e" +} diff --git a/backend/.sqlx/query-b1147beaaabbed89f2ab8c1e13ec4393a9a8fde2833cf096af766a979d94dee6.json b/backend/.sqlx/query-b1147beaaabbed89f2ab8c1e13ec4393a9a8fde2833cf096af766a979d94dee6.json new file mode 100644 index 000000000..c8ff84277 --- /dev/null +++ b/backend/.sqlx/query-b1147beaaabbed89f2ab8c1e13ec4393a9a8fde2833cf096af766a979d94dee6.json @@ -0,0 +1,18 @@ +{ + "db_name": "PostgreSQL", + "query": "UPDATE cifs_shares SET hostname = $1, path = $2, username = $3, password = $4 WHERE id = $5", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Text", + "Text", + "Text", + "Text", + "Int4" + ] + }, + "nullable": [] + }, + "hash": "b1147beaaabbed89f2ab8c1e13ec4393a9a8fde2833cf096af766a979d94dee6" +} diff --git a/backend/.sqlx/query-d5117054072476377f3c4f040ea429d4c9b2cf534e76f35c80a2bf60e8599cca.json b/backend/.sqlx/query-d5117054072476377f3c4f040ea429d4c9b2cf534e76f35c80a2bf60e8599cca.json new file mode 100644 index 000000000..b77ba7ce9 --- /dev/null +++ b/backend/.sqlx/query-d5117054072476377f3c4f040ea429d4c9b2cf534e76f35c80a2bf60e8599cca.json @@ -0,0 +1,20 @@ +{ + "db_name": "PostgreSQL", + "query": "SELECT openssh_pubkey FROM ssh_keys", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "openssh_pubkey", + "type_info": "Text" + } + ], + "parameters": { + "Left": [] + }, + "nullable": [ + false + ] + }, + "hash": "d5117054072476377f3c4f040ea429d4c9b2cf534e76f35c80a2bf60e8599cca" +} diff --git a/backend/.sqlx/query-da71f94b29798d1738d2b10b9a721ea72db8cfb362e7181c8226d9297507c62b.json b/backend/.sqlx/query-da71f94b29798d1738d2b10b9a721ea72db8cfb362e7181c8226d9297507c62b.json new file mode 100644 index 000000000..5c5c89c27 --- /dev/null +++ b/backend/.sqlx/query-da71f94b29798d1738d2b10b9a721ea72db8cfb362e7181c8226d9297507c62b.json @@ -0,0 +1,19 @@ +{ + "db_name": "PostgreSQL", + "query": "INSERT INTO notifications (package_id, code, level, title, message, data) VALUES ($1, $2, $3, $4, $5, $6)", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Text", + "Int4", + "Text", + "Text", + "Text", + "Text" + ] + }, + "nullable": [] + }, + "hash": "da71f94b29798d1738d2b10b9a721ea72db8cfb362e7181c8226d9297507c62b" +} diff --git a/backend/.sqlx/query-e185203cf84e43b801dfb23b4159e34aeaef1154dcd3d6811ab504915497ccf7.json b/backend/.sqlx/query-e185203cf84e43b801dfb23b4159e34aeaef1154dcd3d6811ab504915497ccf7.json new file mode 100644 index 000000000..a4dc187cd --- /dev/null +++ b/backend/.sqlx/query-e185203cf84e43b801dfb23b4159e34aeaef1154dcd3d6811ab504915497ccf7.json @@ -0,0 +1,14 @@ +{ + "db_name": "PostgreSQL", + "query": "DELETE FROM notifications WHERE id = $1", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Int4" + ] + }, + "nullable": [] + }, + "hash": "e185203cf84e43b801dfb23b4159e34aeaef1154dcd3d6811ab504915497ccf7" +} diff --git a/backend/.sqlx/query-e545696735f202f9d13cf22a561f3ff3f9aed7f90027a9ba97634bcb47d772f0.json b/backend/.sqlx/query-e545696735f202f9d13cf22a561f3ff3f9aed7f90027a9ba97634bcb47d772f0.json new file mode 100644 index 000000000..97a4ec95a --- /dev/null +++ b/backend/.sqlx/query-e545696735f202f9d13cf22a561f3ff3f9aed7f90027a9ba97634bcb47d772f0.json @@ -0,0 +1,20 @@ +{ + "db_name": "PostgreSQL", + "query": "SELECT tor_key FROM account WHERE id = 0", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "tor_key", + "type_info": "Bytea" + } + ], + "parameters": { + "Left": [] + }, + "nullable": [ + true + ] + }, + "hash": "e545696735f202f9d13cf22a561f3ff3f9aed7f90027a9ba97634bcb47d772f0" +} diff --git a/backend/.sqlx/query-e5843c5b0e7819b29aa1abf2266799bd4f82e761837b526a0972c3d4439a264d.json b/backend/.sqlx/query-e5843c5b0e7819b29aa1abf2266799bd4f82e761837b526a0972c3d4439a264d.json new file mode 100644 index 000000000..b2aa04370 --- /dev/null +++ b/backend/.sqlx/query-e5843c5b0e7819b29aa1abf2266799bd4f82e761837b526a0972c3d4439a264d.json @@ -0,0 +1,16 @@ +{ + "db_name": "PostgreSQL", + "query": "INSERT INTO session (id, user_agent, metadata) VALUES ($1, $2, $3)", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Text", + "Text", + "Text" + ] + }, + "nullable": [] + }, + "hash": "e5843c5b0e7819b29aa1abf2266799bd4f82e761837b526a0972c3d4439a264d" +} diff --git a/backend/.sqlx/query-e95322a8e2ae3b93f1e974b24c0b81803f1e9ec9e8ebbf15cafddfc1c5a028ed.json b/backend/.sqlx/query-e95322a8e2ae3b93f1e974b24c0b81803f1e9ec9e8ebbf15cafddfc1c5a028ed.json new file mode 100644 index 000000000..fd5a467ec --- /dev/null +++ b/backend/.sqlx/query-e95322a8e2ae3b93f1e974b24c0b81803f1e9ec9e8ebbf15cafddfc1c5a028ed.json @@ -0,0 +1,40 @@ +{ + "db_name": "PostgreSQL", + "query": "\n SELECT\n network_keys.package,\n network_keys.interface,\n network_keys.key,\n tor.key AS \"tor_key?\"\n FROM\n network_keys\n LEFT JOIN\n tor\n ON\n network_keys.package = tor.package\n AND\n network_keys.interface = tor.interface\n WHERE\n network_keys.package = $1\n ", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "package", + "type_info": "Text" + }, + { + "ordinal": 1, + "name": "interface", + "type_info": "Text" + }, + { + "ordinal": 2, + "name": "key", + "type_info": "Bytea" + }, + { + "ordinal": 3, + "name": "tor_key?", + "type_info": "Bytea" + } + ], + "parameters": { + "Left": [ + "Text" + ] + }, + "nullable": [ + false, + false, + false, + false + ] + }, + "hash": "e95322a8e2ae3b93f1e974b24c0b81803f1e9ec9e8ebbf15cafddfc1c5a028ed" +} diff --git a/backend/.sqlx/query-eb750adaa305bdbf3c5b70aaf59139c7b7569602adb58f2d6b3a94da4f167b0a.json b/backend/.sqlx/query-eb750adaa305bdbf3c5b70aaf59139c7b7569602adb58f2d6b3a94da4f167b0a.json new file mode 100644 index 000000000..fb8a7c1e5 --- /dev/null +++ b/backend/.sqlx/query-eb750adaa305bdbf3c5b70aaf59139c7b7569602adb58f2d6b3a94da4f167b0a.json @@ -0,0 +1,14 @@ +{ + "db_name": "PostgreSQL", + "query": "DELETE FROM notifications WHERE id < $1", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Int4" + ] + }, + "nullable": [] + }, + "hash": "eb750adaa305bdbf3c5b70aaf59139c7b7569602adb58f2d6b3a94da4f167b0a" +} diff --git a/backend/.sqlx/query-ecc765d8205c0876956f95f76944ac6a5f34dd820c4073b7728c7067aab9fded.json b/backend/.sqlx/query-ecc765d8205c0876956f95f76944ac6a5f34dd820c4073b7728c7067aab9fded.json new file mode 100644 index 000000000..27c9752b2 --- /dev/null +++ b/backend/.sqlx/query-ecc765d8205c0876956f95f76944ac6a5f34dd820c4073b7728c7067aab9fded.json @@ -0,0 +1,25 @@ +{ + "db_name": "PostgreSQL", + "query": "INSERT INTO cifs_shares (hostname, path, username, password) VALUES ($1, $2, $3, $4) RETURNING id", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "id", + "type_info": "Int4" + } + ], + "parameters": { + "Left": [ + "Text", + "Text", + "Text", + "Text" + ] + }, + "nullable": [ + false + ] + }, + "hash": "ecc765d8205c0876956f95f76944ac6a5f34dd820c4073b7728c7067aab9fded" +} diff --git a/backend/.sqlx/query-f6d1c5ef0f9d9577bea8382318967b9deb46da75788c7fe6082b43821c22d556.json b/backend/.sqlx/query-f6d1c5ef0f9d9577bea8382318967b9deb46da75788c7fe6082b43821c22d556.json new file mode 100644 index 000000000..6ed9898f6 --- /dev/null +++ b/backend/.sqlx/query-f6d1c5ef0f9d9577bea8382318967b9deb46da75788c7fe6082b43821c22d556.json @@ -0,0 +1,16 @@ +{ + "db_name": "PostgreSQL", + "query": "INSERT INTO ssh_keys (fingerprint, openssh_pubkey, created_at) VALUES ($1, $2, $3)", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Text", + "Text", + "Text" + ] + }, + "nullable": [] + }, + "hash": "f6d1c5ef0f9d9577bea8382318967b9deb46da75788c7fe6082b43821c22d556" +} diff --git a/backend/.sqlx/query-f7d2dae84613bcef330f7403352cc96547f3f6dbec11bf2eadfaf53ad8ab51b5.json b/backend/.sqlx/query-f7d2dae84613bcef330f7403352cc96547f3f6dbec11bf2eadfaf53ad8ab51b5.json new file mode 100644 index 000000000..f48ccb074 --- /dev/null +++ b/backend/.sqlx/query-f7d2dae84613bcef330f7403352cc96547f3f6dbec11bf2eadfaf53ad8ab51b5.json @@ -0,0 +1,20 @@ +{ + "db_name": "PostgreSQL", + "query": "SELECT network_key FROM account WHERE id = 0", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "network_key", + "type_info": "Bytea" + } + ], + "parameters": { + "Left": [] + }, + "nullable": [ + false + ] + }, + "hash": "f7d2dae84613bcef330f7403352cc96547f3f6dbec11bf2eadfaf53ad8ab51b5" +} diff --git a/backend/.sqlx/query-fe6e4f09f3028e5b6b6259e86cbad285680ce157aae9d7837ac020c8b2945e7f.json b/backend/.sqlx/query-fe6e4f09f3028e5b6b6259e86cbad285680ce157aae9d7837ac020c8b2945e7f.json new file mode 100644 index 000000000..6ef1d5023 --- /dev/null +++ b/backend/.sqlx/query-fe6e4f09f3028e5b6b6259e86cbad285680ce157aae9d7837ac020c8b2945e7f.json @@ -0,0 +1,62 @@ +{ + "db_name": "PostgreSQL", + "query": "SELECT * FROM account WHERE id = 0", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "id", + "type_info": "Int4" + }, + { + "ordinal": 1, + "name": "password", + "type_info": "Text" + }, + { + "ordinal": 2, + "name": "tor_key", + "type_info": "Bytea" + }, + { + "ordinal": 3, + "name": "server_id", + "type_info": "Text" + }, + { + "ordinal": 4, + "name": "hostname", + "type_info": "Text" + }, + { + "ordinal": 5, + "name": "network_key", + "type_info": "Bytea" + }, + { + "ordinal": 6, + "name": "root_ca_key_pem", + "type_info": "Text" + }, + { + "ordinal": 7, + "name": "root_ca_cert_pem", + "type_info": "Text" + } + ], + "parameters": { + "Left": [] + }, + "nullable": [ + false, + false, + true, + true, + true, + false, + false, + false + ] + }, + "hash": "fe6e4f09f3028e5b6b6259e86cbad285680ce157aae9d7837ac020c8b2945e7f" +} diff --git a/backend/Cargo.lock b/backend/Cargo.lock index f312cdb74..ae5690b8d 100644 --- a/backend/Cargo.lock +++ b/backend/Cargo.lock @@ -14,9 +14,9 @@ dependencies = [ [[package]] name = "addr2line" -version = "0.20.0" +version = "0.21.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f4fa78e18c64fce05e902adecd7a5eed15a5e0a3439f7b0e169f0252214865e3" +checksum = "8a30b2e23b9e17a9f90641c7ab1549cd9b44f296d3ccbf309d2863cfe398a0cb" dependencies = [ "gimli", ] @@ -34,7 +34,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9e8b47f52ea9bae42228d07ec09eb676433d7c4ed1ebdf0f1d1c29ed446f1ab8" dependencies = [ "cfg-if 1.0.0", - "cipher", + "cipher 0.3.0", "cpufeatures", "ctr", "opaque-debug", @@ -65,9 +65,9 @@ dependencies = [ [[package]] name = "aho-corasick" -version = "1.0.2" +version = "1.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "43f6cb1bf222025340178f382c426f13757b2960e89779dfcb319c32542a5a41" +checksum = "b2969dcb958b36655471fc61f7e416fa76033bdd4bfed0678d8fee1e2d07a1f0" dependencies = [ "memchr", ] @@ -119,9 +119,9 @@ dependencies = [ [[package]] name = "anyhow" -version = "1.0.72" +version = "1.0.75" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3b13c32d80ecc7ab747b80c3784bce54ee8a7a0cc4fbda9bf4cda2cf6fe90854" +checksum = "a4668cab20f66d8d020e1fbc0ebe47217433c1b6c8f2040faf858554e394ace6" [[package]] name = "arrayref" @@ -146,15 +146,15 @@ dependencies = [ [[package]] name = "ast_node" -version = "0.9.4" +version = "0.9.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c704e2f6ee1a98223f5a7629a6ef0f3decb3b552ed282889dc957edff98ce1e6" +checksum = "c09c69dffe06d222d072c878c3afe86eee2179806f20503faec97250268b4c24" dependencies = [ "pmutil", - "proc-macro2 1.0.66", - "quote 1.0.31", + "proc-macro2", + "quote", "swc_macros_common", - "syn 1.0.109", + "syn 2.0.38", ] [[package]] @@ -170,9 +170,9 @@ dependencies = [ [[package]] name = "async-compression" -version = "0.3.15" +version = "0.4.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "942c7cd7ae39e91bde4820d74132e9862e62c2f386c3aa90ccf55949f5bad63a" +checksum = "f658e2baef915ba0f26f1f7c42bfb8e12f532a01f449a090ded75ae7a07e9ba2" dependencies = [ "brotli", "flate2", @@ -199,27 +199,27 @@ version = "0.3.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "16e62a023e7c117e27523144c5d2459f4397fcc3cab0085af8e2224f643a0193" dependencies = [ - "proc-macro2 1.0.66", - "quote 1.0.31", - "syn 2.0.18", + "proc-macro2", + "quote", + "syn 2.0.38", ] [[package]] name = "async-trait" -version = "0.1.69" +version = "0.1.74" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b2d0f03b3640e3a630367e40c468cb7f309529c708ed1d88597047b0e7c6ef7" +checksum = "a66537f1bb974b254c98ed142ff995236e81b9d0fe4db0575f46612cb15eb0f9" dependencies = [ - "proc-macro2 1.0.66", - "quote 1.0.31", - "syn 2.0.18", + "proc-macro2", + "quote", + "syn 2.0.38", ] [[package]] name = "atoi" -version = "1.0.0" +version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d7c57d12312ff59c811c0643f4d80830505833c9ffaebd193d819392b265be8e" +checksum = "f28d99ec8bfea296261ca1af174f24225171fea9664ba9003cbebee704810528" dependencies = [ "num-traits", ] @@ -297,9 +297,9 @@ dependencies = [ [[package]] name = "backtrace" -version = "0.3.68" +version = "0.3.69" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4319208da049c43661739c5fade2ba182f09d1dc2299b32298d3a31692b17e12" +checksum = "2089b7e3f35b9dd2d0ed921ead4f6d318c27680d4a5bd167b3ee120edb105837" dependencies = [ "addr2line", "cc", @@ -312,9 +312,9 @@ dependencies = [ [[package]] name = "base16ct" -version = "0.1.1" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "349a06037c7bf932dd7e7d1f653678b2038b9ad46a74102f1fc7bd7872678cce" +checksum = "4c7f02d4ea65f2c1853089ffd8d2787bdbc63de2f0d29dedbcf8ccdfa0ccd4cf" [[package]] name = "base32" @@ -330,9 +330,9 @@ checksum = "9e1b586273c5702936fe7b7d6896644d8be71e6314cfe09d3167c95f712589e8" [[package]] name = "base64" -version = "0.21.2" +version = "0.21.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "604178f6c5c21f02dc555784810edfb88d34ac2c73b2eae109655649ee73ce3d" +checksum = "9ba43ea6f343b788c8764558649e08df62f86c6ef251fdaeb1ffd010a9ae50a2" [[package]] name = "base64ct" @@ -385,8 +385,8 @@ dependencies = [ "lazycell", "log", "peeking_take_while", - "proc-macro2 1.0.66", - "quote 1.0.31", + "proc-macro2", + "quote", "regex", "rustc-hash", "shlex", @@ -416,9 +416,12 @@ checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" [[package]] name = "bitflags" -version = "2.3.3" +version = "2.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "630be753d4e58660abd17930c71b647fe46c27ea6b63cc59e1e3851406972e42" +checksum = "327762f6e5a765692301e5bb513e0d9fef63be86bbc14528052b1cd3e6f03e07" +dependencies = [ + "serde", +] [[package]] name = "bitmaps" @@ -440,13 +443,13 @@ dependencies = [ [[package]] name = "blake2b_simd" -version = "1.0.1" +version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c2f0dc9a68c6317d884f97cc36cf5a3d20ba14ce404227df55e1af708ab04bc" +checksum = "23285ad32269793932e830392f2fe2f83e26488fd3ec778883a93c8323735780" dependencies = [ "arrayref", "arrayvec", - "constant_time_eq 0.2.6", + "constant_time_eq", ] [[package]] @@ -476,9 +479,9 @@ checksum = "8d696c370c750c948ada61c69a0ee2cbbb9c50b1019ddb86d9317157a99c2cae" [[package]] name = "brotli" -version = "3.3.4" +version = "3.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1a0b1dbcc8ae29329621f8d4f0d835787c1c38bb1401979b49d13b0b305ff68" +checksum = "516074a47ef4bce09577a3b379392300159ce5b1ba2e501ff1c819950066100f" dependencies = [ "alloc-no-stdlib", "alloc-stdlib", @@ -487,9 +490,9 @@ dependencies = [ [[package]] name = "brotli-decompressor" -version = "2.3.4" +version = "2.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4b6561fd3f895a11e8f72af2cb7d22e08366bebc2b6b57f7744c4bda27034744" +checksum = "da74e2b81409b1b743f8f0c62cc6254afefb8b8e50bbfe3735550f7aeefa3448" dependencies = [ "alloc-no-stdlib", "alloc-stdlib", @@ -497,27 +500,30 @@ dependencies = [ [[package]] name = "bumpalo" -version = "3.13.0" +version = "3.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a3e2c3daef883ecc1b5d58c15adae93470a91d425f3532ba1695849656af3fc1" +checksum = "7f30e7476521f6f8af1a1c4c0b8cc94f0bee37d91763d0ca2665f299b6cd8aec" [[package]] name = "byteorder" -version = "1.4.3" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "14c189c53d098945499cdfa7ecc63567cf3886b3332b312a5b4585d8d3a6a610" +checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" [[package]] name = "bytes" -version = "1.4.0" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "89b2fd2a0dcf38d7971e2194b6b6eebab45ae01067456a7fd93d5547a61b70be" +checksum = "a2bd12c1caf447e69cd4528f47f94d203fd2582878ecb9e9465484c4148a8223" [[package]] name = "cc" -version = "1.0.79" +version = "1.0.83" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "50d30906286121d95be3d479533b458f87493b30a4b5f79a607db8f5d11aa91f" +checksum = "f1174fb0b6ec23863f8b971027804a42614e347eafb0a95bf0b12cdae21fc4d0" +dependencies = [ + "libc", +] [[package]] name = "cexpr" @@ -542,18 +548,17 @@ checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" [[package]] name = "chrono" -version = "0.4.26" +version = "0.4.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec837a71355b28f6556dbd569b37b3f363091c0bd4b2e735674521b4c5fd9bc5" +checksum = "7f2c685bad3eb3d45a01354cedb7d5faa66194d1d58ba6e267a8de788f79db38" dependencies = [ "android-tzdata", "iana-time-zone", "js-sys", "num-traits", "serde", - "time 0.1.45", "wasm-bindgen", - "winapi", + "windows-targets 0.48.5", ] [[package]] @@ -601,6 +606,16 @@ dependencies = [ "generic-array", ] +[[package]] +name = "cipher" +version = "0.4.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "773f3b9af64447d2ce9850330c473515014aa235e6a783b02db81ff39e4a3dad" +dependencies = [ + "crypto-common", + "inout", +] + [[package]] name = "clang-sys" version = "1.6.1" @@ -680,9 +695,9 @@ dependencies = [ [[package]] name = "concurrent-queue" -version = "2.2.0" +version = "2.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "62ec6771ecfa0762d24683ee5a32ad78487a3d3afdc0fb8cae19d2c5deb50b7c" +checksum = "f057a694a54f12365049b0958a1685bb52d567f5593b355fbf685838e873d400" dependencies = [ "crossbeam-utils", ] @@ -739,41 +754,35 @@ dependencies = [ [[package]] name = "const-oid" -version = "0.9.4" +version = "0.9.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "795bc6e66a8e340f075fcf6227e417a2dc976b92b91f3cdc778bb858778b6747" +checksum = "28c122c3980598d243d63d9a704629a2d748d101f278052ff068be5a4423ab6f" [[package]] name = "const_format" -version = "0.2.31" +version = "0.2.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c990efc7a285731f9a4378d81aff2f0e85a2c8781a05ef0f8baa8dac54d0ff48" +checksum = "e3a214c7af3d04997541b18d432afaff4c455e79e2029079647e72fc2bd27673" dependencies = [ "const_format_proc_macros", ] [[package]] name = "const_format_proc_macros" -version = "0.2.31" +version = "0.2.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e026b6ce194a874cb9cf32cd5772d1ef9767cc8fcb5765948d74f37a9d8b2bf6" +checksum = "c7f6ff08fd20f4f299298a28e2dfa8a8ba1036e6cd2460ac1de7b425d76f2500" dependencies = [ - "proc-macro2 1.0.66", - "quote 1.0.31", - "unicode-xid 0.2.4", + "proc-macro2", + "quote", + "unicode-xid", ] [[package]] name = "constant_time_eq" -version = "0.1.5" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "245097e9a4535ee1e3e3931fcfcd55a796a44c643e8596ff6566d68f09b87bbc" - -[[package]] -name = "constant_time_eq" -version = "0.2.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "21a53c0a4d288377e7415b53dcfc3c04da5cdc2cc95c8d5ac178b58f0b861ad6" +checksum = "f7144d30dcf0fafbce74250a3963025d8d52177934239851c917d29f1df280c2" [[package]] name = "convert_case" @@ -797,7 +806,28 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e859cd57d0710d9e06c381b550c06e76992472a8c6d527aecd2fc673dcc231fb" dependencies = [ "percent-encoding", - "time 0.3.23", + "time", + "version_check", +] + +[[package]] +name = "cookie" +version = "0.17.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7efb37c3e1ccb1ff97164ad95ac1606e8ccd35b3fa0a7d99a304c7f4a428cc24" +dependencies = [ + "percent-encoding", + "time", + "version_check", +] + +[[package]] +name = "cookie" +version = "0.18.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3cd91cf61412820176e137621345ee43b3f4423e589e7ae4e50d601d93e35ef8" +dependencies = [ + "time", "version_check", ] @@ -807,31 +837,31 @@ version = "0.16.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d606d0fba62e13cf04db20536c05cb7f13673c161cb47a47a82b9b9e7d3f1daa" dependencies = [ - "cookie", + "cookie 0.16.2", "idna 0.2.3", "log", "publicsuffix", "serde", "serde_derive", "serde_json", - "time 0.3.23", + "time", "url", ] [[package]] name = "cookie_store" -version = "0.19.1" +version = "0.20.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d5a18f35792056f8c7c2de9c002e7e4fe44c7b5f66e7d99f46468dbb730a7ea7" +checksum = "387461abbc748185c3a6e1673d826918b450b87ff22639429c694619a83b6cf6" dependencies = [ - "cookie", + "cookie 0.17.0", "idna 0.3.0", "log", "publicsuffix", "serde", "serde_derive", "serde_json", - "time 0.3.23", + "time", "url", ] @@ -921,9 +951,9 @@ checksum = "7a81dae078cea95a014a339291cec439d2f232ebe854a9d672b796c6afafa9b7" [[package]] name = "crypto-bigint" -version = "0.4.9" +version = "0.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ef2b4b23cddf68b89b8f8069890e8c270d54e2d5fe1b143820234805e4cb17ef" +checksum = "740fe28e594155f10cfc383984cbefd529d7396050557148f79cb0f621204124" dependencies = [ "generic-array", "rand_core 0.6.4", @@ -953,9 +983,9 @@ dependencies = [ [[package]] name = "csv" -version = "1.2.2" +version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "626ae34994d3d8d668f4269922248239db4ae42d538b14c398b74a52208e8086" +checksum = "ac574ff4d437a7b5ad237ef331c17ccca63c46479e5b5453eb8e10bb99a759fe" dependencies = [ "csv-core", "itoa", @@ -965,9 +995,9 @@ dependencies = [ [[package]] name = "csv-core" -version = "0.1.10" +version = "0.1.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2b2466559f260f48ad25fe6317b3c8dac77b5bdb5763ac7d9d6103530663bc90" +checksum = "5efa2b3d7902f4b634a20cae3c9c4e6209dc4779feb6863329607560143efa70" dependencies = [ "memchr", ] @@ -978,7 +1008,7 @@ version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "049bb91fb4aaf0e3c7efa6cd5ef877dbbbd15b39dad06d9948de4ec8a75761ea" dependencies = [ - "cipher", + "cipher 0.3.0", ] [[package]] @@ -1000,6 +1030,34 @@ dependencies = [ "zeroize", ] +[[package]] +name = "curve25519-dalek" +version = "4.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e89b8c6a2e4b1f45971ad09761aafb85514a84744b67a95e32c3cc1352d1f65c" +dependencies = [ + "cfg-if 1.0.0", + "cpufeatures", + "curve25519-dalek-derive", + "digest 0.10.7", + "fiat-crypto", + "platforms", + "rustc_version 0.4.0", + "subtle", + "zeroize", +] + +[[package]] +name = "curve25519-dalek-derive" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "83fdaf97f4804dcebfa5862639bc9ce4121e82140bec2a987ac5140294865b5b" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.38", +] + [[package]] name = "darling" version = "0.20.3" @@ -1018,10 +1076,10 @@ checksum = "177e3443818124b357d8e76f53be906d60937f0d3a90773a664fa63fa253e621" dependencies = [ "fnv", "ident_case", - "proc-macro2 1.0.66", - "quote 1.0.31", + "proc-macro2", + "quote", "strsim 0.10.0", - "syn 2.0.18", + "syn 2.0.38", ] [[package]] @@ -1031,21 +1089,21 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "836a9bbc7ad63342d6d6e7b815ccab164bc77a2d95d84bc3117a8c0d5c98e2d5" dependencies = [ "darling_core", - "quote 1.0.31", - "syn 2.0.18", + "quote", + "syn 2.0.38", ] [[package]] name = "dashmap" -version = "5.5.0" +version = "5.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6943ae99c34386c84a470c499d3414f66502a41340aa895406e0d2e4a207b91d" +checksum = "978747c1d849a7d2ee5e8adc0159961c48fb7e5db2f06af6723b80123bb53856" dependencies = [ "cfg-if 1.0.0", - "hashbrown 0.14.0", + "hashbrown 0.14.1", "lock_api", "once_cell", - "parking_lot_core 0.9.8", + "parking_lot_core", ] [[package]] @@ -1056,9 +1114,19 @@ checksum = "c2e66c9d817f1720209181c316d28635c050fa304f9c79e47a520882661b7308" [[package]] name = "data-url" -version = "0.2.0" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8d7439c3735f405729d52c3fbbe4de140eaf938a1fe47d227c27f8254d4302a5" +checksum = "41b319d1b62ffbd002e057f36bebd1f42b9f97927c9577461d855f3513c4289f" + +[[package]] +name = "debugid" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bef552e6f588e446098f6ba40d89ac146c8c7b64aade83c051ee00bb5d2bc18d" +dependencies = [ + "serde", + "uuid", +] [[package]] name = "deno-proc-macro-rules" @@ -1067,8 +1135,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3c65c2ffdafc1564565200967edc4851c7b55422d3913466688907efd05ea26f" dependencies = [ "deno-proc-macro-rules-macros", - "proc-macro2 1.0.66", - "syn 2.0.18", + "proc-macro2", + "syn 2.0.38", ] [[package]] @@ -1078,16 +1146,16 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3047b312b7451e3190865713a4dd6e1f821aed614ada219766ebc3024a690435" dependencies = [ "once_cell", - "proc-macro2 1.0.66", - "quote 1.0.31", - "syn 2.0.18", + "proc-macro2", + "quote", + "syn 2.0.38", ] [[package]] name = "deno_ast" -version = "0.27.2" +version = "0.29.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a39dc5554b1c835c62914b545f8b378563a997521e39a8f03450b37b216143ef" +checksum = "8a8adb6aeb787db71d015d8e9f63f6e004eeb09c86babb4ded00878be18619b1" dependencies = [ "anyhow", "base64 0.13.1", @@ -1121,25 +1189,26 @@ dependencies = [ [[package]] name = "deno_core" -version = "0.195.0" +version = "0.222.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "408e433386de30dd501cf82d26ca1fb4cd84b055536f8f6f9c78c3380649d94b" +checksum = "b13c81b9ea8462680e7b77088a44fc36390bab3dbfa5a205a285e11b64e0919c" dependencies = [ "anyhow", "bytes", "deno_ops", + "deno_unsync", "futures", - "indexmap 1.9.3", + "indexmap 2.0.2", "libc", "log", "once_cell", - "parking_lot 0.12.1", + "parking_lot", "pin-project", "serde", "serde_json", "serde_v8", "smallvec", - "sourcemap", + "sourcemap 7.0.0", "tokio", "url", "v8", @@ -1147,9 +1216,9 @@ dependencies = [ [[package]] name = "deno_media_type" -version = "0.1.0" +version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "63772a60d740a41d97fbffb4788fc3779e6df47289e01892c12be38f4a5beded" +checksum = "a798670c20308e5770cc0775de821424ff9e85665b602928509c8c70430b3ee0" dependencies = [ "data-url", "serde", @@ -1158,37 +1227,53 @@ dependencies = [ [[package]] name = "deno_ops" -version = "0.73.0" +version = "0.98.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c6d06feb9b26ccd2997f35610517d5a8f1dd423e21364509523f72474601f87f" +checksum = "bf89da1a3e50ff7c89956495b53d9bcad29e1f1b3f3d2bc54cad7155f55419c4" dependencies = [ "deno-proc-macro-rules", "lazy-regex", "once_cell", "pmutil", "proc-macro-crate", - "proc-macro2 1.0.66", - "quote 1.0.31", + "proc-macro2", + "quote", "regex", "strum", "strum_macros", - "syn 1.0.109", - "syn 2.0.18", + "syn 2.0.38", "thiserror", - "v8", +] + +[[package]] +name = "deno_unsync" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8a8f3722afd50e566ecfc783cc8a3a046bc4dd5eb45007431dfb2776aeb8993" +dependencies = [ + "tokio", ] [[package]] name = "der" -version = "0.6.1" +version = "0.7.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f1a467a65c5e759bce6e65eaf91cc29f466cdc57cb65777bd646872a8a1fd4de" +checksum = "fffa369a668c8af7dbf8b5e56c9f744fbd399949ed171606040001947de40b1c" dependencies = [ "const-oid", "pem-rfc7468", "zeroize", ] +[[package]] +name = "deranged" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0f32d04922c60427da6f9fef14d042d9edddef64cb9d4ce0d64d0685fbeb1fd3" +dependencies = [ + "serde", +] + [[package]] name = "derive_more" version = "0.99.17" @@ -1196,8 +1281,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4fb810d30a7c1953f91334de7244731fc3f3c10d7fe163338a35b9f640960321" dependencies = [ "convert_case 0.4.0", - "proc-macro2 1.0.66", - "quote 1.0.31", + "proc-macro2", + "quote", "rustc_version 0.4.0", "syn 1.0.109", ] @@ -1229,15 +1314,6 @@ dependencies = [ "subtle", ] -[[package]] -name = "dirs" -version = "4.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ca3aa72a6f96ea37bbc5aa912f6788242832f75369bdfdadcb0e38423f100059" -dependencies = [ - "dirs-sys", -] - [[package]] name = "dirs-next" version = "2.0.0" @@ -1248,17 +1324,6 @@ dependencies = [ "dirs-sys-next", ] -[[package]] -name = "dirs-sys" -version = "0.3.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1b1d1d91c932ef41c0f2663aa8b0ca0342d444d842c06914aa0a7e352d0bada6" -dependencies = [ - "libc", - "redox_users", - "winapi", -] - [[package]] name = "dirs-sys-next" version = "0.1.2" @@ -1284,9 +1349,9 @@ checksum = "1aaf95b3e5c8f23aa320147307562d361db0ae0d51242340f558153b4eb2439b" [[package]] name = "dprint-swc-ext" -version = "0.10.0" +version = "0.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dd4dda8a1b920e8be367aeaad035753d21bb69b3c50515afb41ab1eefbb886b5" +checksum = "6a0a2492465344a58a37ae119de59e81fe5a2885f2711c7b5048ef0dfa14ce42" dependencies = [ "bumpalo", "num-bigint", @@ -1299,33 +1364,32 @@ dependencies = [ ] [[package]] -name = "dyn-clone" -version = "1.0.12" +name = "drain" +version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "304e6508efa593091e97a9abbc10f90aa7ca635b6d2784feff3c89d41dd12272" - -[[package]] -name = "ecdsa" -version = "0.14.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "413301934810f597c1d19ca71c8710e99a3f1ba28a0d2ebc01551a2daeea3c5c" +checksum = "2f1a0abf3fcefad9b4dd0e414207a7408e12b68414a01e6bb19b897d5bd7632d" dependencies = [ - "der", - "elliptic-curve", - "rfc6979", - "signature 1.6.4", + "tokio", ] [[package]] -name = "ecdsa" -version = "0.15.1" +name = "dyn-clone" +version = "1.0.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "12844141594ad74185a926d030f3b605f6a903b4e3fec351f3ea338ac5b7637e" +checksum = "23d2f3407d9a573d666de4b5bdf10569d73ca9478087346697dcbae6244bfbcd" + +[[package]] +name = "ecdsa" +version = "0.16.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a4b1e0c257a9e9f25f90ff76d7a68360ed497ee519c8e428d1825ef0000799d4" dependencies = [ "der", + "digest 0.10.7", "elliptic-curve", "rfc6979", "signature 2.0.0", + "spki", ] [[package]] @@ -1333,10 +1397,19 @@ name = "ed25519" version = "1.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "91cff35c70bba8a626e3185d8cd48cc11b5437e1a5bcd15b9b5fa3c64b6dfee7" +dependencies = [ + "signature 1.6.4", +] + +[[package]] +name = "ed25519" +version = "2.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "115531babc129696a58c64a4fef0a8bf9e9698629fb97e9e40767d235cfbcd53" dependencies = [ "pkcs8", "serde", - "signature 1.6.4", + "signature 2.0.0", ] [[package]] @@ -1345,33 +1418,46 @@ version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c762bae6dcaf24c4c84667b8579785430908723d5c889f469d76a41d59cc7a9d" dependencies = [ - "curve25519-dalek", - "ed25519", + "curve25519-dalek 3.2.0", + "ed25519 1.5.3", "rand 0.7.3", "serde", - "serde_bytes", "sha2 0.9.9", "zeroize", ] [[package]] -name = "either" -version = "1.8.1" +name = "ed25519-dalek" +version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7fcaabb2fef8c910e7f4c7ce9f67a1283a1715879a7c230ca9d6d1ae31f16d91" +checksum = "7277392b266383ef8396db7fdeb1e77b6c52fed775f5df15bb24f35b72156980" +dependencies = [ + "curve25519-dalek 4.1.1", + "ed25519 2.2.3", + "rand_core 0.6.4", + "serde", + "sha2 0.10.8", + "signature 2.0.0", + "zeroize", +] + +[[package]] +name = "either" +version = "1.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a26ae43d7bcc3b814de94796a5e736d4029efb0ee900c12e2d54c993ad1a1e07" dependencies = [ "serde", ] [[package]] name = "elliptic-curve" -version = "0.12.3" +version = "0.13.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e7bb888ab5300a19b8e5bceef25ac745ad065f3c9f7efc6de1b91958110891d3" +checksum = "d97ca172ae9dc9f9b779a6e3a65d308f2af74e5b8c921299075bdb4a0370e914" dependencies = [ "base16ct", "crypto-bigint", - "der", "digest 0.10.7", "ff", "generic-array", @@ -1393,7 +1479,7 @@ dependencies = [ "futures", "helpers", "imbl", - "nix 0.25.1", + "nix 0.27.1", "procfs", "serde", "serde_json", @@ -1440,29 +1526,23 @@ checksum = "34aa73646ffb006b8f5147f3dc182bd4bcb190227ce861fc4a4844bf8e3cb2c0" [[package]] name = "encoding_rs" -version = "0.8.32" +version = "0.8.33" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "071a31f4ee85403370b58aca746f01041ede6f0da2730960ad001edc2b71b394" +checksum = "7268b386296a025e474d5140678f75d6de9493ae55a5d709eeb9dd08149945e1" dependencies = [ "cfg-if 1.0.0", ] -[[package]] -name = "endian-type" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c34f04666d835ff5d62e058c3995147c06f42fe86ff053337632bca83e42702d" - [[package]] name = "enum-as-inner" -version = "0.5.1" +version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c9720bba047d567ffc8a3cba48bf19126600e249ab7f128e9233e6376976a116" +checksum = "5ffccbb6966c05b32ef8fbac435df276c4ae4d3dc55a8cd0eb9745e6c12f546a" dependencies = [ "heck", - "proc-macro2 1.0.66", - "quote 1.0.31", - "syn 1.0.109", + "proc-macro2", + "quote", + "syn 2.0.38", ] [[package]] @@ -1480,12 +1560,12 @@ dependencies = [ [[package]] name = "env_logger" -version = "0.9.3" +version = "0.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a12e6657c4c97ebab115a42dcee77225f7f482cdd841cf7088c657a42e9e00e7" +checksum = "85cdab6a89accf66733ad5a1693a4dcced6aeff64602b634530dd73c1f3ee9f0" dependencies = [ - "atty", "humantime 2.1.0", + "is-terminal", "log", "regex", "termcolor", @@ -1499,23 +1579,23 @@ checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5" [[package]] name = "errno" -version = "0.3.1" +version = "0.3.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4bcfec3a70f97c962c307b2d2c56e358cf1d00b558d74262b5f929ee8cc7e73a" +checksum = "ac3e13f66a2f95e32a39eaa81f6b95d42878ca0e1db0c7543723dfe12557e860" dependencies = [ - "errno-dragonfly", "libc", "windows-sys 0.48.0", ] [[package]] -name = "errno-dragonfly" -version = "0.1.2" +name = "etcetera" +version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aa68f1b12764fab894d2755d2518754e71b4fd80ecfb822714a1206c2aab39bf" +checksum = "136d1b5283a1ab77bd9257427ffd09d8667ced0570b6f938942bc7568ed5b943" dependencies = [ - "cc", - "libc", + "cfg-if 1.0.0", + "home", + "windows-sys 0.48.0", ] [[package]] @@ -1536,12 +1616,9 @@ dependencies = [ [[package]] name = "fastrand" -version = "1.9.0" +version = "2.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e51093e27b0797c359783294ca4f0a911c270184cb10f85783b118614a1501be" -dependencies = [ - "instant", -] +checksum = "25cbce373ec4653f1a01a31e8a5e5ec0c622dc27ff9c4e6606eefef5cbbed4a5" [[package]] name = "fd-lock-rs" @@ -1554,26 +1631,38 @@ dependencies = [ [[package]] name = "ff" -version = "0.12.1" +version = "0.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d013fc25338cc558c5c2cfbad646908fb23591e2404481826742b651c9af7160" +checksum = "ded41244b729663b1e574f1b4fb731469f69f79c17667b5d776b16cda0479449" dependencies = [ "rand_core 0.6.4", "subtle", ] [[package]] -name = "filetime" -version = "0.2.21" +name = "fiat-crypto" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5cbc844cecaee9d4443931972e1289c8ff485cb4cc2767cb03ca139ed6885153" +checksum = "d0870c84016d4b481be5c9f323c24f65e31e901ae618f0e80f4308fb00de1d2d" + +[[package]] +name = "filetime" +version = "0.2.22" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d4029edd3e734da6fe05b6cd7bd2960760a616bd2ddd0d59a0124746d6272af0" dependencies = [ "cfg-if 1.0.0", "libc", - "redox_syscall 0.2.16", + "redox_syscall 0.3.5", "windows-sys 0.48.0", ] +[[package]] +name = "finl_unicode" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8fcfdc7a0362c9f4444381a9e697c79d435fe65b52a37466fc2c1184cee9edc6" + [[package]] name = "fixedbitset" version = "0.4.2" @@ -1582,14 +1671,25 @@ checksum = "0ce7134b9999ecaf8bcd65542e436736ef32ddca1b3e06094cb6ec5755203b80" [[package]] name = "flate2" -version = "1.0.26" +version = "1.0.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3b9429470923de8e8cbd4d2dc513535400b4b3fef0319fb5c4e1f520a7bef743" +checksum = "46303f565772937ffe1d394a4fac6f411c6013172fadde9dcdb1e147a086940e" dependencies = [ "crc32fast", "miniz_oxide", ] +[[package]] +name = "flume" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "55ac459de2512911e4b674ce33cf20befaba382d05b62b008afc1c8b57cbf181" +dependencies = [ + "futures-core", + "futures-sink", + "spin 0.9.8", +] + [[package]] name = "fnv" version = "1.0.7" @@ -1631,14 +1731,14 @@ dependencies = [ [[package]] name = "from_variant" -version = "0.1.5" +version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d449976075322384507443937df2f1d5577afbf4282f12a5a66ef29fa3e6307" +checksum = "03ec5dc38ee19078d84a692b1c41181ff9f94331c76cee66ff0208c770b5e54f" dependencies = [ "pmutil", - "proc-macro2 1.0.66", + "proc-macro2", "swc_macros_common", - "syn 1.0.109", + "syn 2.0.38", ] [[package]] @@ -1701,13 +1801,13 @@ dependencies = [ [[package]] name = "futures-intrusive" -version = "0.4.2" +version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a604f7a68fbf8103337523b1fadc8ade7361ee3f112f7c680ad179651616aed5" +checksum = "1d930c203dd0b6ff06e0201a4a2fe9149b43c684fd4420555b26d21b1a02956f" dependencies = [ "futures-core", "lock_api", - "parking_lot 0.11.2", + "parking_lot", ] [[package]] @@ -1722,9 +1822,9 @@ version = "0.3.28" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "89ca545a94061b6365f2c7355b4b32bd20df3ff95f02da9329b34ccc3bd6ee72" dependencies = [ - "proc-macro2 1.0.66", - "quote 1.0.31", - "syn 2.0.18", + "proc-macro2", + "quote", + "syn 2.0.38", ] [[package]] @@ -1765,6 +1865,7 @@ checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a" dependencies = [ "typenum", "version_check", + "zeroize", ] [[package]] @@ -1791,9 +1892,9 @@ dependencies = [ [[package]] name = "gimli" -version = "0.27.3" +version = "0.28.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6c80984affa11d98d1b88b66ac8853f143217b399d3c74116778ff8fdb4ed2e" +checksum = "6fb8d784f27acf97159b40fc4db5ecd8aa23b9ad5ef69cdd136d3bc80665f0c0" [[package]] name = "git-version" @@ -1812,8 +1913,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fe69f1cbdb6e28af2bac214e943b99ce8a0a06b447d15d3e61161b0423139f3f" dependencies = [ "proc-macro-hack", - "proc-macro2 1.0.66", - "quote 1.0.31", + "proc-macro2", + "quote", "syn 1.0.109", ] @@ -1829,7 +1930,7 @@ version = "3.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8283e7331b8c93b9756e0cfdbcfb90312852f953c6faf9bf741e684cc3b6ad69" dependencies = [ - "bitflags 2.3.3", + "bitflags 2.4.1", "crc", "log", "uuid", @@ -1837,9 +1938,9 @@ dependencies = [ [[package]] name = "group" -version = "0.12.1" +version = "0.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5dfbfb3a6cfbd390d5c9564ab283a0349b9b9fcd46a706c1eb10e0db70bfbac7" +checksum = "f0f9ef7462f7c099f518d754361858f86d8a07af53ba9af0fe635bbccb151a63" dependencies = [ "ff", "rand_core 0.6.4", @@ -1848,9 +1949,9 @@ dependencies = [ [[package]] name = "h2" -version = "0.3.20" +version = "0.3.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "97ec8491ebaf99c8eaa73058b045fe58073cd6be7f596ac993ced0b0a0c01049" +checksum = "91fc23aa11be92976ef4729127f1a74adf36d8436f7816b185d18df956790833" dependencies = [ "bytes", "fnv", @@ -1891,9 +1992,9 @@ dependencies = [ [[package]] name = "hashbrown" -version = "0.14.0" +version = "0.14.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2c6201b9ff9fd90a5a3bac2e56a830d0caa509576f0e503818ee82c181b3437a" +checksum = "7dfda62a12f55daeae5015f81b0baea145391cb4520f86c248fc615d72640d12" dependencies = [ "ahash 0.8.3", "allocator-api2", @@ -1901,11 +2002,11 @@ dependencies = [ [[package]] name = "hashlink" -version = "0.8.3" +version = "0.8.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "312f66718a2d7789ffef4f4b7b213138ed9f1eb3aa1d0d82fc99f88fb3ffd26f" +checksum = "e8094feaf31ff591f651a2664fb9cfd92bba7a60ce3197265e9482ebe753c8f7" dependencies = [ - "hashbrown 0.14.0", + "hashbrown 0.14.1", ] [[package]] @@ -1958,9 +2059,9 @@ dependencies = [ [[package]] name = "hermit-abi" -version = "0.3.2" +version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "443144c8cdadd93ebf52ddb4056d257f5b52c04d3c804e657d19eb73fc33668b" +checksum = "d77f7ec81a6d05a3abb01ab6eb7590f6083d08449fe5a1c8b1e620283546ccb7" [[package]] name = "hex" @@ -2002,6 +2103,15 @@ dependencies = [ "digest 0.10.7", ] +[[package]] +name = "home" +version = "0.5.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5444c27eef6923071f7ebcc33e3444508466a76f7a2b93da00ed6e19f30c1ddb" +dependencies = [ + "windows-sys 0.48.0", +] + [[package]] name = "http" version = "0.2.9" @@ -2032,9 +2142,9 @@ checksum = "d897f394bad6a705d5f4104762e116a75639e470d80901eed05a860a95cb1904" [[package]] name = "httpdate" -version = "1.0.2" +version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c4a1e36c821dbe04574f602848a19f742f4fb3c98d40449f11bcad18d6b17421" +checksum = "df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9" [[package]] name = "humantime" @@ -2068,7 +2178,7 @@ dependencies = [ "httpdate", "itoa", "pin-project-lite", - "socket2", + "socket2 0.4.9", "tokio", "tower-service", "tracing", @@ -2102,13 +2212,13 @@ dependencies = [ [[package]] name = "hyper-ws-listener" -version = "0.2.0" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b3fb761e568fdb34ff794d284bfe1769efc5d16b9d716286451ab3a70ab82bea" +checksum = "dcbfe4981e45b0a7403a55d4af12f8d30e173e722409658c3857243990e72180" dependencies = [ "anyhow", - "base64 0.13.1", - "env_logger 0.9.3", + "base64 0.21.4", + "env_logger 0.10.0", "futures", "hyper", "log", @@ -2119,16 +2229,16 @@ dependencies = [ [[package]] name = "iana-time-zone" -version = "0.1.57" +version = "0.1.58" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2fad5b825842d2b38bd206f3e81d6957625fd7f0a361e345c30e01a0ae2dd613" +checksum = "8326b86b6cff230b97d0d312a6c40a60726df3332e721f72a1b035f451663b20" dependencies = [ "android_system_properties", "core-foundation-sys", "iana-time-zone-haiku", "js-sys", "wasm-bindgen", - "windows", + "windows-core", ] [[package]] @@ -2185,9 +2295,9 @@ checksum = "cb56e1aa765b4b4f3aadfab769793b7087bb03a4ea4920644a6d238e2df5b9ed" [[package]] name = "imbl" -version = "2.0.0" +version = "2.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c2806b69cd9f4664844027b64465eacb444c67c1db9c778e341adff0c25cdb0d" +checksum = "85b4555023847ca2cd6fd11f20b553886e6981c7e8aee9b3e7e960b4b17fb440" dependencies = [ "bitmaps", "imbl-sized-chunks", @@ -2233,8 +2343,8 @@ version = "0.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b139284b5cf57ecfa712bcc66950bb635b31aff41c188e8a4cfc758eca374a3f" dependencies = [ - "proc-macro2 1.0.66", - "quote 1.0.31", + "proc-macro2", + "quote", ] [[package]] @@ -2256,12 +2366,13 @@ dependencies = [ [[package]] name = "indexmap" -version = "2.0.0" +version = "2.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d5477fe2230a79769d8dc68e0eabf5437907c0457a5614a9e8dddb67f65eb65d" +checksum = "8adf3ddd720272c6ea8bf59463c04e0f93d0bbf7c5439b691bca2987e0270897" dependencies = [ "equivalent", - "hashbrown 0.14.0", + "hashbrown 0.14.1", + "serde", ] [[package]] @@ -2278,6 +2389,15 @@ dependencies = [ "unicode-width", ] +[[package]] +name = "inout" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a0c10553d664a4d0bcff9f4215d0aac67a639cc68ef660840afe309b807bc9f5" +dependencies = [ + "generic-array", +] + [[package]] name = "instant" version = "0.1.12" @@ -2293,7 +2413,7 @@ version = "1.0.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "eae7b9aee968036d54dce06cebaefd919e4472e753296daccd6d344e3e2df0c2" dependencies = [ - "hermit-abi 0.3.2", + "hermit-abi 0.3.3", "libc", "windows-sys 0.48.0", ] @@ -2319,15 +2439,15 @@ dependencies = [ [[package]] name = "is-macro" -version = "0.2.2" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a7d079e129b77477a49c5c4f1cfe9ce6c2c909ef52520693e8e811a714c7b20" +checksum = "f4467ed1321b310c2625c5aa6c1b1ffc5de4d9e42668cf697a08fb033ee8265e" dependencies = [ "Inflector", "pmutil", - "proc-macro2 1.0.66", - "quote 1.0.31", - "syn 1.0.109", + "proc-macro2", + "quote", + "syn 2.0.38", ] [[package]] @@ -2336,8 +2456,8 @@ version = "0.4.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cb0889898416213fab133e1d33a0e5858a48177452750691bde3666d0fdbaf8b" dependencies = [ - "hermit-abi 0.3.2", - "rustix 0.38.4", + "hermit-abi 0.3.3", + "rustix 0.38.19", "windows-sys 0.48.0", ] @@ -2369,6 +2489,15 @@ dependencies = [ "either", ] +[[package]] +name = "itertools" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b1c173a5686ce8bfa551b3563d0c2170bf24ca44da99c7ca4bfdab5418c3fe57" +dependencies = [ + "either", +] + [[package]] name = "itoa" version = "1.0.9" @@ -2377,9 +2506,9 @@ checksum = "af150ab688ff2122fcef229be89cb50dd66af9e01a4ff320cc137eecc9bacc38" [[package]] name = "jaq-core" -version = "0.10.0" +version = "0.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3ab6f495d0fe97460255aef70fbd77d3b5a7701930163ad69c963b9c6d5d5726" +checksum = "eb52eeac20f256459e909bd4a03bb8c4fab6a1fdbb8ed52d00f644152df48ece" dependencies = [ "ahash 0.7.6", "dyn-clone", @@ -2415,12 +2544,12 @@ dependencies = [ [[package]] name = "josekit" -version = "0.8.3" +version = "0.8.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "33a96c4f2128a6f44ecf7c36df2b03dddf5a07b060a4d5ebc0a81e9821f7c60e" +checksum = "5754487a088f527b1407df470db8e654e4064dccbbe1fe850e0773721e9962b7" dependencies = [ "anyhow", - "base64 0.21.2", + "base64 0.21.4", "flate2", "once_cell", "openssl", @@ -2428,7 +2557,7 @@ dependencies = [ "serde", "serde_json", "thiserror", - "time 0.3.23", + "time", ] [[package]] @@ -2450,13 +2579,13 @@ dependencies = [ "deno_core", "embassy_container_init", "helpers", - "itertools 0.10.5", + "itertools 0.11.0", "lazy_static", "models", "reqwest", "serde", "serde_json", - "sha2 0.10.7", + "sha2 0.10.8", "tokio", "tracing", ] @@ -2520,7 +2649,7 @@ dependencies = [ "string_cache", "term", "tiny-keccak", - "unicode-xid 0.2.4", + "unicode-xid", ] [[package]] @@ -2534,9 +2663,9 @@ dependencies = [ [[package]] name = "lazy-regex" -version = "2.5.0" +version = "3.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ff63c423c68ea6814b7da9e88ce585f793c87ddd9e78f646970891769c8235d4" +checksum = "e723bd417b2df60a0f6a2b6825f297ea04b245d4ba52b5a22cb679bdf58b05fa" dependencies = [ "lazy-regex-proc_macros", "once_cell", @@ -2545,14 +2674,14 @@ dependencies = [ [[package]] name = "lazy-regex-proc_macros" -version = "2.4.1" +version = "3.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8edfc11b8f56ce85e207e62ea21557cfa09bb24a8f6b04ae181b086ff8611c22" +checksum = "0f0a1d9139f0ee2e862e08a9c5d0ba0470f2aa21cd1e1aa1b1562f83116c725f" dependencies = [ - "proc-macro2 1.0.66", - "quote 1.0.31", + "proc-macro2", + "quote", "regex", - "syn 1.0.109", + "syn 2.0.38", ] [[package]] @@ -2571,7 +2700,7 @@ version = "1.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" dependencies = [ - "spin", + "spin 0.5.2", ] [[package]] @@ -2580,84 +2709,11 @@ version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "830d08ce1d1d941e6b30645f1a0eb5643013d835ce3779a5fc208261dbe10f55" -[[package]] -name = "lexical" -version = "6.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c7aefb36fd43fef7003334742cbf77b243fcd36418a1d1bdd480d613a67968f6" -dependencies = [ - "lexical-core", -] - -[[package]] -name = "lexical-core" -version = "0.8.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2cde5de06e8d4c2faabc400238f9ae1c74d5412d03a7bd067645ccbc47070e46" -dependencies = [ - "lexical-parse-float", - "lexical-parse-integer", - "lexical-util", - "lexical-write-float", - "lexical-write-integer", -] - -[[package]] -name = "lexical-parse-float" -version = "0.8.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "683b3a5ebd0130b8fb52ba0bdc718cc56815b6a097e28ae5a6997d0ad17dc05f" -dependencies = [ - "lexical-parse-integer", - "lexical-util", - "static_assertions", -] - -[[package]] -name = "lexical-parse-integer" -version = "0.8.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6d0994485ed0c312f6d965766754ea177d07f9c00c9b82a5ee62ed5b47945ee9" -dependencies = [ - "lexical-util", - "static_assertions", -] - -[[package]] -name = "lexical-util" -version = "0.8.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5255b9ff16ff898710eb9eb63cb39248ea8a5bb036bea8085b1a767ff6c4e3fc" -dependencies = [ - "static_assertions", -] - -[[package]] -name = "lexical-write-float" -version = "0.8.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "accabaa1c4581f05a3923d1b4cfd124c329352288b7b9da09e766b0668116862" -dependencies = [ - "lexical-util", - "lexical-write-integer", - "static_assertions", -] - -[[package]] -name = "lexical-write-integer" -version = "0.8.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e1b6f3d1f4422866b68192d62f77bc5c700bee84f3069f2469d7bc8c77852446" -dependencies = [ - "lexical-util", - "static_assertions", -] - [[package]] name = "libc" -version = "0.2.147" +version = "0.2.149" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b4668fb0ea861c1df094127ac5f1da3409a82116a4ba74fca2e58ef927159bb3" +checksum = "a08173bc88b7955d1b3145aa561539096c421ac8debde8cbc3612ec635fee29b" [[package]] name = "libloading" @@ -2671,9 +2727,20 @@ dependencies = [ [[package]] name = "libm" -version = "0.2.7" +version = "0.2.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f7012b1bbb0719e1097c47611d3898568c546d597c2e74d66f6087edd5233ff4" +checksum = "4ec2a862134d2a7d32d7983ddcdd1c4923530833c9f2ea1a44fc5fa473989058" + +[[package]] +name = "libsqlite3-sys" +version = "0.26.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "afc22eff61b133b115c6e8c74e818c628d6d5e7a502afea6f64dee076dd94326" +dependencies = [ + "cc", + "pkg-config", + "vcpkg", +] [[package]] name = "linux-raw-sys" @@ -2683,15 +2750,9 @@ checksum = "f051f77a7c8e6957c0696eac88f26b0117e54f52d3fc682ab19397a8812846a4" [[package]] name = "linux-raw-sys" -version = "0.3.8" +version = "0.4.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ef53942eb7bf7ff43a617b3e2c1c4a5ecf5944a7c1bc12d7ee39bbb15e5c1519" - -[[package]] -name = "linux-raw-sys" -version = "0.4.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09fc20d2ca12cb9f044c93e3bd6d32d523e6e2ec3db4f7b2939cd99026ecd3f0" +checksum = "da2479e8c062e40bf0066ffa0bc823de0a9368974af99c9f6df941d2c231e03f" [[package]] name = "lock_api" @@ -2705,9 +2766,9 @@ dependencies = [ [[package]] name = "log" -version = "0.4.19" +version = "0.4.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b06a4cde4c0f271a446782e3eff8de789548ce57dbc8eca9292c27f4a42004b4" +checksum = "b5e6163cb8c49088c2c36f57875e58ccd8c87c7427f7fbd50ea6710b2f3f2e8f" [[package]] name = "matchers" @@ -2745,29 +2806,19 @@ dependencies = [ [[package]] name = "md-5" -version = "0.9.1" +version = "0.10.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b5a279bb9607f9f53c22d496eade00d138d1bdcccd07d74650387cf94942a15" -dependencies = [ - "block-buffer 0.9.0", - "digest 0.9.0", - "opaque-debug", -] - -[[package]] -name = "md-5" -version = "0.10.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6365506850d44bff6e2fbcb5176cf63650e48bd45ef2fe2665ae1570e0f4b9ca" +checksum = "d89e7ee0cfbedfc4da3340218492196241d89eefb6dab27de5df917a6d2e78cf" dependencies = [ + "cfg-if 1.0.0", "digest 0.10.7", ] [[package]] name = "memchr" -version = "2.5.0" +version = "2.6.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2dffe52ecf27772e601905b7522cb4ef790d2cc203488bbd0e2fe85fcb74566d" +checksum = "f665ee40bc4a3c5590afb1e9677db74a508659dfd71e126420da8274909a0167" [[package]] name = "memoffset" @@ -2823,9 +2874,9 @@ dependencies = [ name = "models" version = "0.1.0" dependencies = [ - "base64 0.21.2", + "base64 0.21.4", "color-eyre", - "ed25519-dalek", + "ed25519-dalek 2.0.0", "emver", "ipnet", "lazy_static", @@ -2881,15 +2932,6 @@ dependencies = [ "unicase", ] -[[package]] -name = "nibble_vec" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77a5d83df9f36fe23f0c3648c6bbb8b0298bb5f1939c8f2704431371f4b84d43" -dependencies = [ - "smallvec", -] - [[package]] name = "nix" version = "0.24.3" @@ -2902,20 +2944,6 @@ dependencies = [ "memoffset 0.6.5", ] -[[package]] -name = "nix" -version = "0.25.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f346ff70e7dbfd675fe90590b92d59ef2de15a8779ae305ebcbfd3f0caf59be4" -dependencies = [ - "autocfg", - "bitflags 1.3.2", - "cfg-if 1.0.0", - "libc", - "memoffset 0.6.5", - "pin-utils", -] - [[package]] name = "nix" version = "0.26.4" @@ -2929,6 +2957,17 @@ dependencies = [ "pin-utils", ] +[[package]] +name = "nix" +version = "0.27.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2eb04e9c688eff1c89d72b407f168cf79bb9e867a9d3323ed6c01519eb9cc053" +dependencies = [ + "bitflags 2.4.1", + "cfg-if 1.0.0", + "libc", +] + [[package]] name = "nom" version = "5.1.3" @@ -2975,9 +3014,9 @@ dependencies = [ [[package]] name = "num-bigint" -version = "0.4.3" +version = "0.4.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f93ab6289c7b344a8a9f60f88d80aa20032336fe78da341afc91c8a2341fc75f" +checksum = "608e7659b5c3d7cba262d894801b9ec9d00de989e8a82bd4bef91d08da45cdc0" dependencies = [ "autocfg", "num-integer", @@ -3005,9 +3044,9 @@ dependencies = [ [[package]] name = "num-complex" -version = "0.4.3" +version = "0.4.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "02e0d21255c828d6f128a1e41534206671e8c3ea0c62f32291e808dc82cff17d" +checksum = "1ba157ca0885411de85d6ca030ba7e2a83a28636056c7c699b07c8b6f7383214" dependencies = [ "num-traits", ] @@ -3047,9 +3086,9 @@ dependencies = [ [[package]] name = "num-traits" -version = "0.2.15" +version = "0.2.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "578ede34cf02f8924ab9447f50c28075b4d3e5b269972345e7e0372b38c6cdcd" +checksum = "39e3200413f237f41ab11ad6d161bc7239c84dcb631773ccd7de3dfe4b5c267c" dependencies = [ "autocfg", "libm", @@ -3061,29 +3100,29 @@ version = "1.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4161fcb6d602d4d2081af7c3a45852d875a03dd337a6bfdd6e06407b61342a43" dependencies = [ - "hermit-abi 0.3.2", + "hermit-abi 0.3.3", "libc", ] [[package]] name = "num_enum" -version = "0.5.11" +version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1f646caf906c20226733ed5b1374287eb97e3c2a5c227ce668c1f2ce20ae57c9" +checksum = "70bf6736f74634d299d00086f02986875b3c2d924781a6a2cb6c201e73da0ceb" dependencies = [ "num_enum_derive", ] [[package]] name = "num_enum_derive" -version = "0.5.11" +version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dcbff9bc912032c62bf65ef1d5aea88983b420f4f839db1e9b0c281a25c9c799" +checksum = "56ea360eafe1022f7cc56cd7b869ed57330fb2453d0c7831d99b74c65d2f5597" dependencies = [ "proc-macro-crate", - "proc-macro2 1.0.66", - "quote 1.0.31", - "syn 1.0.109", + "proc-macro2", + "quote", + "syn 2.0.38", ] [[package]] @@ -3094,9 +3133,9 @@ checksum = "830b246a0e5f20af87141b25c173cd1b609bd7779a4617d6ec582abaf90870f3" [[package]] name = "object" -version = "0.31.1" +version = "0.32.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8bda667d9f2b5051b8833f59f3bf748b28ef54f850f4fcb389a252aa383866d1" +checksum = "9cf5f9dd3933bd50a9e1f149ec995f39ae2c496d31fd772c1fd45ebc27e902b0" dependencies = [ "memchr", ] @@ -3115,24 +3154,24 @@ checksum = "624a8340c38c1b80fd549087862da4ba43e08858af025b236e509b6649fc13d5" [[package]] name = "openssh-keys" -version = "0.5.0" +version = "0.6.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e7249a699cdeea261ac73f1bf9350777cb867324f44373aafb5a287365bf1771" +checksum = "c75a0ec2d1b302412fb503224289325fcc0e44600176864804c7211b055cfd58" dependencies = [ - "base64 0.13.1", + "base64 0.21.4", "byteorder", - "md-5 0.9.1", - "sha2 0.9.9", + "md-5", + "sha2 0.10.8", "thiserror", ] [[package]] name = "openssl" -version = "0.10.55" +version = "0.10.57" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "345df152bc43501c5eb9e4654ff05f794effb78d4efe3d53abc158baddc0703d" +checksum = "bac25ee399abb46215765b1cb35bc0212377e58a061560d8b29b024fd0430e7c" dependencies = [ - "bitflags 1.3.2", + "bitflags 2.4.1", "cfg-if 1.0.0", "foreign-types", "libc", @@ -3147,9 +3186,9 @@ version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c" dependencies = [ - "proc-macro2 1.0.66", - "quote 1.0.31", - "syn 2.0.18", + "proc-macro2", + "quote", + "syn 2.0.38", ] [[package]] @@ -3160,18 +3199,18 @@ checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf" [[package]] name = "openssl-src" -version = "111.26.0+1.1.1u" +version = "300.1.5+3.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "efc62c9f12b22b8f5208c23a7200a442b2e5999f8bdf80233852122b5a4f6f37" +checksum = "559068e4c12950d7dcaa1857a61725c0d38d4fc03ff8e070ab31a75d6e316491" dependencies = [ "cc", ] [[package]] name = "openssl-sys" -version = "0.9.90" +version = "0.9.93" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "374533b0e45f3a7ced10fcaeccca020e66656bc03dac384f852e4e5a7a8104a6" +checksum = "db4d56a4c0478783083cfafcc42493dd4a981d41669da64b4572a2a089b51b1d" dependencies = [ "cc", "libc", @@ -3182,9 +3221,9 @@ dependencies = [ [[package]] name = "os_str_bytes" -version = "6.5.1" +version = "6.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4d5d9eb14b174ee9aa2ef96dc2b94637a2d4b6e7cb873c7e171f0c20c6cf3eac" +checksum = "e2355d85b9a3786f481747ced0e0ff2ba35213a1f9bd406ed906554d7af805a1" [[package]] name = "overload" @@ -3200,47 +3239,26 @@ checksum = "c1b04fb49957986fdce4d6ee7a65027d55d4b6d2265e5848bbb507b58ccfdb6f" [[package]] name = "p256" -version = "0.11.1" +version = "0.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "51f44edd08f51e2ade572f141051021c5af22677e42b7dd28a88155151c33594" +checksum = "c9863ad85fa8f4460f9c48cb909d38a0d689dba1f6f6988a5e3e0d31071bcd4b" dependencies = [ - "ecdsa 0.14.8", - "elliptic-curve", - "sha2 0.10.7", -] - -[[package]] -name = "p256" -version = "0.12.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49c124b3cbce43bcbac68c58ec181d98ed6cc7e6d0aa7c3ba97b2563410b0e55" -dependencies = [ - "ecdsa 0.15.1", + "ecdsa", "elliptic-curve", "primeorder", - "sha2 0.10.7", + "sha2 0.10.8", ] [[package]] name = "p384" -version = "0.11.2" +version = "0.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dfc8c5bf642dde52bb9e87c0ecd8ca5a76faac2eeed98dedb7c717997e1080aa" +checksum = "70786f51bcc69f6a4c0360e063a4cac5419ef7c5cd5b3c99ad70f3be5ba79209" dependencies = [ - "ecdsa 0.14.8", + "ecdsa", "elliptic-curve", - "sha2 0.10.7", -] - -[[package]] -name = "parking_lot" -version = "0.11.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7d17b78036a60663b797adeaee46f5c9dfebb86948d1255007a1d6be0271ff99" -dependencies = [ - "instant", - "lock_api", - "parking_lot_core 0.8.6", + "primeorder", + "sha2 0.10.8", ] [[package]] @@ -3250,21 +3268,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3742b2c103b9f06bc9fff0a37ff4912935851bee6d36f3c02bcc755bcfec228f" dependencies = [ "lock_api", - "parking_lot_core 0.9.8", -] - -[[package]] -name = "parking_lot_core" -version = "0.8.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "60a2cfe6f0ad2bfc16aefa463b497d5c7a5ecd44a23efa72aa342d90177356dc" -dependencies = [ - "cfg-if 1.0.0", - "instant", - "libc", - "redox_syscall 0.2.16", - "smallvec", - "winapi", + "parking_lot_core", ] [[package]] @@ -3277,18 +3281,7 @@ dependencies = [ "libc", "redox_syscall 0.3.5", "smallvec", - "windows-targets 0.48.1", -] - -[[package]] -name = "password-hash" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7676374caaee8a325c9e7a2ae557f216c5563a171d6997b0ef8a65af35147700" -dependencies = [ - "base64ct", - "rand_core 0.6.4", - "subtle", + "windows-targets 0.48.5", ] [[package]] @@ -3324,7 +3317,7 @@ name = "patch-db-macro" version = "0.1.0" dependencies = [ "patch-db-macro-internals", - "proc-macro2 1.0.66", + "proc-macro2", "syn 1.0.109", ] @@ -3333,8 +3326,8 @@ name = "patch-db-macro-internals" version = "0.1.0" dependencies = [ "heck", - "proc-macro2 1.0.66", - "quote 1.0.31", + "proc-macro2", + "quote", "syn 1.0.109", ] @@ -3346,14 +3339,12 @@ checksum = "8835116a5c179084a830efb3adc117ab007512b535bc1a21c991d3b32a6b44dd" [[package]] name = "pbkdf2" -version = "0.11.0" +version = "0.12.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "83a0692ec44e4cf1ef28ca317f14f8f07da2d95ec3fa01f86e4467b725e60917" +checksum = "f8ed6a7761f76e3b9f92dfb0a60a6a6477c61024b775147ff0973a02653abaf2" dependencies = [ "digest 0.10.7", "hmac 0.12.1", - "password-hash", - "sha2 0.10.7", ] [[package]] @@ -3364,9 +3355,9 @@ checksum = "19b17cddbe7ec3f8bc800887bab5e717348c95ea2ca0b1bf0837fb964dc67099" [[package]] name = "pem-rfc7468" -version = "0.6.0" +version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "24d159833a9105500e0398934e205e0773f0b27529557134ecfc51c27646adac" +checksum = "88b39c9bfcfc231068454382784bb460aae594343fb030d46e9f50a645418412" dependencies = [ "base64ct", ] @@ -3379,12 +3370,12 @@ checksum = "9b2a4787296e9989611394c33f193f676704af1686e70b8f8033ab5ba9a35a94" [[package]] name = "petgraph" -version = "0.6.3" +version = "0.6.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4dd7d28ee937e54fe3080c91faa1c3a46c06de6252988a7f4592ba2310ef22a4" +checksum = "e1d3afd2628e69da2be385eb6f2fd57c8ac7977ceeff6dc166ff1657b0e386a9" dependencies = [ "fixedbitset", - "indexmap 1.9.3", + "indexmap 2.0.2", ] [[package]] @@ -3417,8 +3408,8 @@ dependencies = [ "phf_generator", "phf_shared", "proc-macro-hack", - "proc-macro2 1.0.66", - "quote 1.0.31", + "proc-macro2", + "quote", "syn 1.0.109", ] @@ -3433,29 +3424,29 @@ dependencies = [ [[package]] name = "pin-project" -version = "1.1.2" +version = "1.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "030ad2bc4db10a8944cb0d837f158bdfec4d4a4873ab701a95046770d11f8842" +checksum = "fda4ed1c6c173e3fc7a83629421152e01d7b1f9b7f65fb301e490e8cfc656422" dependencies = [ "pin-project-internal", ] [[package]] name = "pin-project-internal" -version = "1.1.2" +version = "1.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec2e072ecce94ec471b13398d5402c188e76ac03cf74dd1a975161b23a3f6d9c" +checksum = "4359fd9c9171ec6e8c62926d6faaf553a8dc3f64e1507e76da7911b4f6a04405" dependencies = [ - "proc-macro2 1.0.66", - "quote 1.0.31", - "syn 2.0.18", + "proc-macro2", + "quote", + "syn 2.0.38", ] [[package]] name = "pin-project-lite" -version = "0.2.10" +version = "0.2.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c40d25201921e5ff0c862a505c6557ea88568a4e3ace775ab55e93f2f4f9d57" +checksum = "8afb450f006bf6385ca15ef45d71d2288452bc3683ce2e2cacc0d18e4be60b58" [[package]] name = "pin-utils" @@ -3465,21 +3456,20 @@ checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" [[package]] name = "pkcs1" -version = "0.4.1" +version = "0.7.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eff33bdbdfc54cc98a2eca766ebdec3e1b8fb7387523d5c9c9a2891da856f719" +checksum = "c8ffb9f10fa047879315e6625af03c164b16962a5368d724ed16323b68ace47f" dependencies = [ "der", "pkcs8", "spki", - "zeroize", ] [[package]] name = "pkcs8" -version = "0.9.0" +version = "0.10.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9eca2c590a5f85da82668fa685c09ce2888b9430e83299debf1f34b65fd4a4ba" +checksum = "f950b2377845cebe5cf8b5165cb3cc1a5e0fa5cfa3e1f7f55707d8fd82e0a7b7" dependencies = [ "der", "spki", @@ -3492,14 +3482,20 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "26072860ba924cbfa98ea39c8c19b4dd6a4a25423dbdf219c1eca91aa0cf6964" [[package]] -name = "pmutil" -version = "0.5.3" +name = "platforms" +version = "3.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3894e5d549cccbe44afecf72922f277f603cd4bb0219c8342631ef18fffbe004" +checksum = "4503fa043bf02cee09a9582e9554b4c6403b2ef55e4612e96561d294419429f8" + +[[package]] +name = "pmutil" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "52a40bc70c2c58040d2d8b167ba9a5ff59fc9dab7ad44771cfde3dcfde7a09c6" dependencies = [ - "proc-macro2 1.0.66", - "quote 1.0.31", - "syn 1.0.109", + "proc-macro2", + "quote", + "syn 2.0.38", ] [[package]] @@ -3536,9 +3532,9 @@ dependencies = [ [[package]] name = "primeorder" -version = "0.12.1" +version = "0.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b54f7131b3dba65a2f414cf5bd25b66d4682e4608610668eae785750ba4c5b2" +checksum = "3c2fcef82c0ec6eefcc179b978446c399b3cdf73c392c35604e399eee6df1ee3" dependencies = [ "elliptic-curve", ] @@ -3550,7 +3546,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7f4c021e1093a56626774e81216a4ce732a735e5bad4868a03f3ed65ca0c3919" dependencies = [ "once_cell", - "toml_edit", + "toml_edit 0.19.15", ] [[package]] @@ -3561,27 +3557,18 @@ checksum = "dc375e1527247fe1a97d8b7156678dfe7c1af2fc075c9a4db3690ecd2a148068" [[package]] name = "proc-macro2" -version = "0.4.30" +version = "1.0.69" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cf3d2011ab5c909338f7887f4fc896d35932e29146c12c8d01da6b22a80ba759" -dependencies = [ - "unicode-xid 0.1.0", -] - -[[package]] -name = "proc-macro2" -version = "1.0.66" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "18fb31db3f9bddb2ea821cde30a9f70117e3f119938b5ee630b7403aa6e2ead9" +checksum = "134c189feb4956b20f6f547d2cf727d4c0fe06722b20a0eec87ed445a97f92da" dependencies = [ "unicode-ident", ] [[package]] name = "procfs" -version = "0.14.2" +version = "0.15.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b1de8dacb0873f77e6aefc6d71e044761fcc68060290f5b1089fcdf84626bb69" +checksum = "943ca7f9f29bab5844ecd8fdb3992c5969b6622bb9609b9502fef9b4310e3f1f" dependencies = [ "bitflags 1.3.2", "byteorder", @@ -3589,24 +3576,24 @@ dependencies = [ "flate2", "hex", "lazy_static", - "rustix 0.36.15", + "rustix 0.36.16", ] [[package]] name = "proptest" -version = "1.2.0" +version = "1.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4e35c06b98bf36aba164cc17cb25f7e232f5c4aeea73baa14b8a9f0d92dbfa65" +checksum = "7c003ac8c77cb07bb74f5f198bce836a689bcd5a42574612bf14d17bfd08c20e" dependencies = [ "bit-set", - "bitflags 1.3.2", - "byteorder", + "bit-vec", + "bitflags 2.4.1", "lazy_static", "num-traits", "rand 0.8.5", "rand_chacha 0.3.1", "rand_xorshift", - "regex-syntax 0.6.29", + "regex-syntax 0.7.5", "rusty-fork", "tempfile", "unarray", @@ -3614,13 +3601,13 @@ dependencies = [ [[package]] name = "proptest-derive" -version = "0.3.0" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "90b46295382dc76166cb7cf2bb4a97952464e4b7ed5a43e6cd34e1fec3349ddc" +checksum = "9cf16337405ca084e9c78985114633b6827711d22b9e6ef6c6c0d665eb3f0b6e" dependencies = [ - "proc-macro2 0.4.30", - "quote 0.6.13", - "syn 0.15.44", + "proc-macro2", + "quote", + "syn 1.0.109", ] [[package]] @@ -3640,10 +3627,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "265baba7fabd416cf5078179f7d2cbeca4ce7a9041111900675ea7c4cb8a4c32" dependencies = [ "anyhow", - "itertools 0.10.5", - "proc-macro2 1.0.66", - "quote 1.0.31", - "syn 2.0.18", + "itertools 0.11.0", + "proc-macro2", + "quote", + "syn 2.0.38", ] [[package]] @@ -3688,20 +3675,11 @@ checksum = "a1d01941d82fa2ab50be1e79e6714289dd7cde78eba4c074bc5a4374f650dfe0" [[package]] name = "quote" -version = "0.6.13" +version = "1.0.33" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6ce23b6b870e8f94f81fb0a363d65d86675884b34a09043c81e5562f11c1f8e1" +checksum = "5267fca4496028628a95160fc423a33e8b2e6af8a5302579e322e4b520293cae" dependencies = [ - "proc-macro2 0.4.30", -] - -[[package]] -name = "quote" -version = "1.0.31" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5fe8a65d69dd0808184ebb5f836ab526bb259db23c657efa38711b1072ee47f0" -dependencies = [ - "proc-macro2 1.0.66", + "proc-macro2", ] [[package]] @@ -3710,16 +3688,6 @@ version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dc33ff2d4973d518d823d61aa239014831e521c75da58e3df4840d3f47749d09" -[[package]] -name = "radix_trie" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c069c179fcdc6a2fe24d8d18305cf085fdbd4f922c041943e203685d6a1c58fd" -dependencies = [ - "endian-type", - "nibble_vec", -] - [[package]] name = "rand" version = "0.7.3" @@ -3846,14 +3814,14 @@ dependencies = [ [[package]] name = "regex" -version = "1.9.1" +version = "1.10.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b2eae68fc220f7cf2532e4494aded17545fce192d59cd996e0fe7887f4ceb575" +checksum = "380b951a9c5e80ddfd6136919eef32310721aa4aacd4889a8d39124b026ab343" dependencies = [ "aho-corasick", "memchr", - "regex-automata 0.3.3", - "regex-syntax 0.7.4", + "regex-automata 0.4.3", + "regex-syntax 0.8.2", ] [[package]] @@ -3867,13 +3835,13 @@ dependencies = [ [[package]] name = "regex-automata" -version = "0.3.3" +version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "39354c10dd07468c2e73926b23bb9c2caca74c5501e38a35da70406f1d923310" +checksum = "5f804c7828047e88b2d32e2d7fe5a105da8ee3264f01902f796c8e067dc2483f" dependencies = [ "aho-corasick", "memchr", - "regex-syntax 0.7.4", + "regex-syntax 0.8.2", ] [[package]] @@ -3884,19 +3852,25 @@ checksum = "f162c6dd7b008981e4d40210aca20b4bd0f9b60ca9271061b07f78537722f2e1" [[package]] name = "regex-syntax" -version = "0.7.4" +version = "0.7.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e5ea92a5b6195c6ef2a0295ea818b312502c6fc94dde986c5553242e18fd4ce2" +checksum = "dbb5fb1acd8a1a18b3dd5be62d25485eb770e05afb408a9627d14d451bae12da" + +[[package]] +name = "regex-syntax" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c08c74e62047bb2de4ff487b251e4a92e24f48745648451635cec7d591162d9f" [[package]] name = "reqwest" -version = "0.11.18" +version = "0.11.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cde824a14b7c14f85caff81225f411faacc04a2013f41670f41443742b1c1c55" +checksum = "046cd98826c46c2ac8ddecae268eb5c2e58628688a5fc7a2643704a73faba95b" dependencies = [ - "base64 0.21.2", + "base64 0.21.4", "bytes", - "cookie", + "cookie 0.16.2", "cookie_store 0.16.2", "encoding_rs", "futures-core", @@ -3917,6 +3891,7 @@ dependencies = [ "serde", "serde_json", "serde_urlencoded", + "system-configuration", "tokio", "tokio-native-tls", "tokio-socks", @@ -3932,26 +3907,24 @@ dependencies = [ [[package]] name = "reqwest_cookie_store" -version = "0.5.0" +version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "06b407c05de7a0f7e4cc2a56af5e9bd6468e509124e81078ce1f8bc2ed3536bf" +checksum = "ba529055ea150e42e4eb9c11dcd380a41025ad4d594b0cb4904ef28b037e1061" dependencies = [ "bytes", - "cookie", - "cookie_store 0.19.1", + "cookie_store 0.20.0", "reqwest", "url", ] [[package]] name = "rfc6979" -version = "0.3.1" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7743f17af12fa0b03b803ba12cd6a8d9483a587e89c69445e3909655c0b9fabb" +checksum = "f8dd2a808d456c4a54e300a23e9f5a67e122c3024119acbfd73e3bf664491cb2" dependencies = [ - "crypto-bigint", "hmac 0.12.1", - "zeroize", + "subtle", ] [[package]] @@ -3963,7 +3936,7 @@ dependencies = [ "cc", "libc", "once_cell", - "spin", + "spin 0.5.2", "untrusted", "web-sys", "winapi", @@ -4008,7 +3981,7 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f8e4b9cb00baf2d61bcd35e98d67dcb760382a3b4540df7e63b38d053c8a7b8b" dependencies = [ - "proc-macro2 1.0.66", + "proc-macro2", "rpc-toolkit-macro-internals", "syn 1.0.109", ] @@ -4019,18 +3992,19 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d3e2ce21b936feaecdab9c9a8e75b9dca64374ccc11951a58045ad6559b75f42" dependencies = [ - "proc-macro2 1.0.66", - "quote 1.0.31", + "proc-macro2", + "quote", "syn 1.0.109", ] [[package]] name = "rsa" -version = "0.7.2" +version = "0.9.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "094052d5470cbcef561cb848a7209968c9f12dfa6d668f4bca048ac5de51099c" +checksum = "6ab43bb47d23c1a631b4b680199a45255dce26fa9ab2fa902581f624ff13e6a8" dependencies = [ "byteorder", + "const-oid", "digest 0.10.7", "num-bigint-dig", "num-integer", @@ -4039,8 +4013,9 @@ dependencies = [ "pkcs1", "pkcs8", "rand_core 0.6.4", - "signature 1.6.4", - "smallvec", + "sha2 0.10.8", + "signature 2.0.0", + "spki", "subtle", "zeroize", ] @@ -4057,14 +4032,13 @@ dependencies = [ [[package]] name = "rust-argon2" -version = "1.0.0" +version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b50162d19404029c1ceca6f6980fe40d45c8b369f6f44446fa14bb39573b5bb9" +checksum = "1e71971821b3ae0e769e4a4328dbcb517607b434db7697e9aba17203ec14e46a" dependencies = [ - "base64 0.13.1", + "base64 0.21.4", "blake2b_simd", - "constant_time_eq 0.1.5", - "crossbeam-utils", + "constant_time_eq", ] [[package]] @@ -4094,14 +4068,14 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bfa0f585226d2e68097d4f95d113b15b83a82e819ab25717ec0590d9584ef366" dependencies = [ - "semver 1.0.18", + "semver 1.0.20", ] [[package]] name = "rustix" -version = "0.36.15" +version = "0.36.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c37f1bd5ef1b5422177b7646cba67430579cfe2ace80f284fee876bca52ad941" +checksum = "6da3636faa25820d8648e0e31c5d519bbb01f72fdf57131f0f5f7da5fed36eab" dependencies = [ "bitflags 1.3.2", "errno", @@ -4113,41 +4087,27 @@ dependencies = [ [[package]] name = "rustix" -version = "0.37.23" +version = "0.38.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4d69718bf81c6127a49dc64e44a742e8bb9213c0ff8869a22c308f84c1d4ab06" +checksum = "745ecfa778e66b2b63c88a61cb36e0eea109e803b0b86bf9879fbc77c70e86ed" dependencies = [ - "bitflags 1.3.2", - "errno", - "io-lifetimes", - "libc", - "linux-raw-sys 0.3.8", - "windows-sys 0.48.0", -] - -[[package]] -name = "rustix" -version = "0.38.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0a962918ea88d644592894bc6dc55acc6c0956488adcebbfb6e273506b7fd6e5" -dependencies = [ - "bitflags 2.3.3", + "bitflags 2.4.1", "errno", "libc", - "linux-raw-sys 0.4.3", + "linux-raw-sys 0.4.10", "windows-sys 0.48.0", ] [[package]] name = "rustls" -version = "0.20.8" +version = "0.21.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fff78fc74d175294f4e83b28343315ffcfb114b156f0185e9741cb5570f50e2f" +checksum = "cd8d6c9f025a446bc4d18ad9632e69aec8f287aa84499ee335599fabd20c3fd8" dependencies = [ "log", "ring", + "rustls-webpki", "sct", - "webpki", ] [[package]] @@ -4156,7 +4116,17 @@ version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2d3987094b1d07b653b7dfdc3f70ce9a1da9c51ac18c1b06b662e4f9a0e9f4b2" dependencies = [ - "base64 0.21.2", + "base64 0.21.4", +] + +[[package]] +name = "rustls-webpki" +version = "0.101.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3c7d5dece342910d9ba34d259310cae3e0154b873b35408b787b59bce53d34fe" +dependencies = [ + "ring", + "untrusted", ] [[package]] @@ -4216,9 +4186,9 @@ dependencies = [ [[package]] name = "sec1" -version = "0.3.0" +version = "0.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3be24c1842290c45df0a7bf069e0c268a747ad05a192f2fd7dcfdbc1cba40928" +checksum = "d3e97a565f76233a6003f9f5c54be1d9c5bdfa3eccfb189469f11ec4901c47dc" dependencies = [ "base16ct", "der", @@ -4230,9 +4200,9 @@ dependencies = [ [[package]] name = "security-framework" -version = "2.9.1" +version = "2.9.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1fc758eb7bffce5b308734e9b0c1468893cae9ff70ebf13e7090be8dcbcc83a8" +checksum = "05b64fb303737d99b81884b2c63433e9ae28abebe5eb5045dcdd175dc2ecf4de" dependencies = [ "bitflags 1.3.2", "core-foundation", @@ -4243,9 +4213,9 @@ dependencies = [ [[package]] name = "security-framework-sys" -version = "2.9.0" +version = "2.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f51d0c0d83bec45f16480d0ce0058397a69e48fcdc52d1dc8855fb68acbd31a7" +checksum = "e932934257d3b408ed8f30db49d85ea163bfe74961f017f405b025af298f0c7a" dependencies = [ "core-foundation-sys", "libc", @@ -4262,9 +4232,9 @@ dependencies = [ [[package]] name = "semver" -version = "1.0.18" +version = "1.0.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b0293b4b29daaf487284529cc2f5675b8e57c61f70167ba415a463651fd6a918" +checksum = "836fa6a3e1e547f9a2c4040802ec865b5d85f4014efe00555d7090a3dcaa1090" [[package]] name = "semver-parser" @@ -4323,9 +4293,9 @@ version = "1.0.164" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d9735b638ccc51c28bf6914d90a2e9725b377144fc612c49a611fddd1b631d68" dependencies = [ - "proc-macro2 1.0.66", - "quote 1.0.31", - "syn 2.0.18", + "proc-macro2", + "quote", + "syn 2.0.38", ] [[package]] @@ -4334,12 +4304,21 @@ version = "1.0.99" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "46266871c240a00b8f503b877622fe33430b3c7d963bdc0f2adc511e54a1eae3" dependencies = [ - "indexmap 2.0.0", + "indexmap 2.0.2", "itoa", "ryu", "serde", ] +[[package]] +name = "serde_spanned" +version = "0.6.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "96426c9936fd7a0124915f9185ea1d20aa9445cc9821142f0a73bc9207a2e186" +dependencies = [ + "serde", +] + [[package]] name = "serde_urlencoded" version = "0.7.1" @@ -4354,9 +4333,9 @@ dependencies = [ [[package]] name = "serde_v8" -version = "0.106.0" +version = "0.131.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1506733ba5b864018c44320fa3bb11dbb4bf01b62dd09eda007be73034371c51" +checksum = "38cafa16d0a4288d75925351bb54d06d2e830118ad3fad393947bb11f91b18f3" dependencies = [ "bytes", "derive_more", @@ -4370,39 +4349,40 @@ dependencies = [ [[package]] name = "serde_with" -version = "2.3.3" +version = "3.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "07ff71d2c147a7b57362cead5e22f772cd52f6ab31cfcd9edcd7f6aeb2a0afbe" +checksum = "64cd236ccc1b7a29e7e2739f27c0b2dd199804abc4290e32f59f3b68d6405c23" dependencies = [ - "base64 0.13.1", + "base64 0.21.4", "chrono", "hex", "indexmap 1.9.3", + "indexmap 2.0.2", "serde", "serde_json", "serde_with_macros", - "time 0.3.23", + "time", ] [[package]] name = "serde_with_macros" -version = "2.3.3" +version = "3.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "881b6f881b17d13214e5d494c939ebab463d01264ce1811e9d4ac3a882e7695f" +checksum = "93634eb5f75a2323b16de4748022ac4297f9e76b6dced2be287a099f41b5e788" dependencies = [ "darling", - "proc-macro2 1.0.66", - "quote 1.0.31", - "syn 2.0.18", + "proc-macro2", + "quote", + "syn 2.0.38", ] [[package]] name = "serde_yaml" -version = "0.9.23" +version = "0.9.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da6075b41c7e3b079e5f246eb6094a44850d3a4c25a67c581c80796c80134012" +checksum = "1a49e178e4452f45cb61d0cd8cebc1b0fafd3e41929e996cef79aa3aca91f574" dependencies = [ - "indexmap 2.0.0", + "indexmap 2.0.2", "itoa", "ryu", "serde", @@ -4422,9 +4402,9 @@ dependencies = [ [[package]] name = "sha1" -version = "0.10.5" +version = "0.10.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f04293dc80c3993519f2d7f6f511707ee7094fe0c6d3406feb330cdb3540eba3" +checksum = "e3bf829a2d51ab4a5ddf1352d8470c140cadc8301b2ae1789db023f01cedd6ba" dependencies = [ "cfg-if 1.0.0", "cpufeatures", @@ -4446,9 +4426,9 @@ dependencies = [ [[package]] name = "sha2" -version = "0.10.7" +version = "0.10.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "479fb9d862239e610720565ca91403019f2f00410f1864c5aa7479b950a76ed8" +checksum = "793db75ad2bcafc3ffa7c68b215fee268f537982cd901d132f89c6343f3a3dc8" dependencies = [ "cfg-if 1.0.0", "cpufeatures", @@ -4469,9 +4449,9 @@ dependencies = [ [[package]] name = "sharded-slab" -version = "0.1.4" +version = "0.1.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "900fba806f70c630b0a382d0d825e17a0f19fcd059a2ade1ff237bcddf446b31" +checksum = "f40ca3c46823713e0d4209592e8d6e826aa57e928f09752619fc696c499637f6" dependencies = [ "lazy_static", ] @@ -4496,10 +4476,6 @@ name = "signature" version = "1.6.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "74233d3b3b2f6d4b006dc19dee745e73e2a6bfb6f93607cd3b02bd5b00797d7c" -dependencies = [ - "digest 0.10.7", - "rand_core 0.6.4", -] [[package]] name = "signature" @@ -4524,24 +4500,24 @@ dependencies = [ [[package]] name = "siphasher" -version = "0.3.10" +version = "0.3.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7bd3e3206899af3f8b12af284fafc038cc1dc2b41d1b89dd17297221c5d225de" +checksum = "38b58827f4464d87d377d175e90bf58eb00fd8716ff0a62f80356b5e61555d0d" [[package]] name = "slab" -version = "0.4.8" +version = "0.4.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6528351c9bc8ab22353f9d776db39a20288e8d6c37ef8cfe3317cf875eecfc2d" +checksum = "8f92a496fb766b417c996b9c5e57daf2f7ad3b0bebe1ccfca4856390e3d3bb67" dependencies = [ "autocfg", ] [[package]] name = "smallvec" -version = "1.11.0" +version = "1.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "62bb4feee49fdd9f707ef802e22365a35de4b7b299de4763d44bfea899442ff9" +checksum = "942b4a808e05215192e39f4ab80813e599068285906cc91aa64f923db842bd5a" [[package]] name = "smartstring" @@ -4565,12 +4541,39 @@ dependencies = [ ] [[package]] -name = "sourcemap" -version = "6.2.3" +name = "socket2" +version = "0.5.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eed16231c92d0a6f0388f56e0ab2be24ecff1173f8e22f0ea5e074d0525631cb" +checksum = "4031e820eb552adee9295814c0ced9e5cf38ddf1e8b7d566d6de8e2538ea989e" +dependencies = [ + "libc", + "windows-sys 0.48.0", +] + +[[package]] +name = "sourcemap" +version = "6.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e4cbf65ca7dc576cf50e21f8d0712d96d4fcfd797389744b7b222a85cdf5bd90" dependencies = [ "data-encoding", + "debugid", + "if_chain", + "rustc_version 0.2.3", + "serde", + "serde_json", + "unicode-id", + "url", +] + +[[package]] +name = "sourcemap" +version = "7.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dbecc42a2b6131acc3bf9a25c9fe4161dba438eb52131bba83c5d781b5b70be3" +dependencies = [ + "data-encoding", + "debugid", "if_chain", "rustc_version 0.2.3", "serde", @@ -4586,10 +4589,19 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6e63cff320ae2c57904679ba7cb63280a3dc4613885beafb148ee7bf9aa9042d" [[package]] -name = "spki" -version = "0.6.0" +name = "spin" +version = "0.9.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "67cf02bbac7a337dc36e4f5a693db6c21e7863f45070f7064577eb4367a3212b" +checksum = "6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67" +dependencies = [ + "lock_api", +] + +[[package]] +name = "spki" +version = "0.7.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9d1e996ef02c474957d681f1b05213dfb0abab947b446a62d37770b23500184a" dependencies = [ "base64ct", "der", @@ -4597,110 +4609,215 @@ dependencies = [ [[package]] name = "sqlformat" -version = "0.2.1" +version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0c12bc9199d1db8234678b7051747c07f517cdcf019262d1847b94ec8b1aee3e" +checksum = "6b7b278788e7be4d0d29c0f39497a0eef3fba6bbc8e70d8bf7fde46edeaa9e85" dependencies = [ - "itertools 0.10.5", + "itertools 0.11.0", "nom 7.1.3", "unicode_categories", ] [[package]] name = "sqlx" -version = "0.6.3" +version = "0.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f8de3b03a925878ed54a954f621e64bf55a3c1bd29652d0d1a17830405350188" +checksum = "0e50c216e3624ec8e7ecd14c6a6a6370aad6ee5d8cfc3ab30b5162eeeef2ed33" dependencies = [ "sqlx-core", "sqlx-macros", + "sqlx-mysql", + "sqlx-postgres", + "sqlx-sqlite", ] [[package]] name = "sqlx-core" -version = "0.6.3" +version = "0.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fa8241483a83a3f33aa5fff7e7d9def398ff9990b2752b6c6112b83c6d246029" +checksum = "8d6753e460c998bbd4cd8c6f0ed9a64346fcca0723d6e75e52fdc351c5d2169d" dependencies = [ - "ahash 0.7.6", + "ahash 0.8.3", "atoi", - "base64 0.13.1", - "bitflags 1.3.2", "byteorder", "bytes", "chrono", "crc", "crossbeam-queue", - "dirs", "dotenvy", "either", "event-listener", "futures-channel", "futures-core", "futures-intrusive", + "futures-io", "futures-util", "hashlink", "hex", - "hkdf", - "hmac 0.12.1", - "indexmap 1.9.3", - "itoa", - "libc", + "indexmap 2.0.2", "log", - "md-5 0.10.5", "memchr", "once_cell", "paste", "percent-encoding", - "rand 0.8.5", "rustls", "rustls-pemfile", "serde", "serde_json", - "sha1", - "sha2 0.10.7", + "sha2 0.10.8", "smallvec", "sqlformat", - "sqlx-rt", - "stringprep", "thiserror", + "tokio", "tokio-stream", + "tracing", "url", "webpki-roots", - "whoami", ] [[package]] name = "sqlx-macros" -version = "0.6.3" +version = "0.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9966e64ae989e7e575b19d7265cb79d7fc3cbbdf179835cb0d716f294c2049c9" +checksum = "9a793bb3ba331ec8359c1853bd39eed32cdd7baaf22c35ccf5c92a7e8d1189ec" +dependencies = [ + "proc-macro2", + "quote", + "sqlx-core", + "sqlx-macros-core", + "syn 1.0.109", +] + +[[package]] +name = "sqlx-macros-core" +version = "0.7.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0a4ee1e104e00dedb6aa5ffdd1343107b0a4702e862a84320ee7cc74782d96fc" dependencies = [ "dotenvy", "either", "heck", "hex", "once_cell", - "proc-macro2 1.0.66", - "quote 1.0.31", + "proc-macro2", + "quote", "serde", "serde_json", - "sha2 0.10.7", + "sha2 0.10.8", "sqlx-core", - "sqlx-rt", + "sqlx-mysql", + "sqlx-postgres", + "sqlx-sqlite", "syn 1.0.109", + "tempfile", + "tokio", "url", ] [[package]] -name = "sqlx-rt" -version = "0.6.3" +name = "sqlx-mysql" +version = "0.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "804d3f245f894e61b1e6263c84b23ca675d96753b5abfd5cc8597d86806e8024" +checksum = "864b869fdf56263f4c95c45483191ea0af340f9f3e3e7b4d57a61c7c87a970db" dependencies = [ + "atoi", + "base64 0.21.4", + "bitflags 2.4.1", + "byteorder", + "bytes", + "chrono", + "crc", + "digest 0.10.7", + "dotenvy", + "either", + "futures-channel", + "futures-core", + "futures-io", + "futures-util", + "generic-array", + "hex", + "hkdf", + "hmac 0.12.1", + "itoa", + "log", + "md-5", + "memchr", "once_cell", - "tokio", - "tokio-rustls", + "percent-encoding", + "rand 0.8.5", + "rsa", + "serde", + "sha1", + "sha2 0.10.8", + "smallvec", + "sqlx-core", + "stringprep", + "thiserror", + "tracing", + "whoami", +] + +[[package]] +name = "sqlx-postgres" +version = "0.7.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eb7ae0e6a97fb3ba33b23ac2671a5ce6e3cabe003f451abd5a56e7951d975624" +dependencies = [ + "atoi", + "base64 0.21.4", + "bitflags 2.4.1", + "byteorder", + "chrono", + "crc", + "dotenvy", + "etcetera", + "futures-channel", + "futures-core", + "futures-io", + "futures-util", + "hex", + "hkdf", + "hmac 0.12.1", + "home", + "itoa", + "log", + "md-5", + "memchr", + "once_cell", + "rand 0.8.5", + "serde", + "serde_json", + "sha1", + "sha2 0.10.8", + "smallvec", + "sqlx-core", + "stringprep", + "thiserror", + "tracing", + "whoami", +] + +[[package]] +name = "sqlx-sqlite" +version = "0.7.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d59dc83cf45d89c555a577694534fcd1b55c545a816c816ce51f20bbe56a4f3f" +dependencies = [ + "atoi", + "chrono", + "flume", + "futures-channel", + "futures-core", + "futures-executor", + "futures-intrusive", + "futures-util", + "libsqlite3-sys", + "log", + "percent-encoding", + "serde", + "sqlx-core", + "tracing", + "url", ] [[package]] @@ -4722,40 +4839,52 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "84955aa74a157e5834d58a07be11af7f0ab923f0194a0bb2ea6b3db8b5d1611d" dependencies = [ "convert_case 0.6.0", - "proc-macro2 1.0.66", - "quote 1.0.31", + "proc-macro2", + "quote", "regex-syntax 0.6.29", "strsim 0.10.0", - "syn 2.0.18", + "syn 2.0.38", "unicode-width", ] [[package]] -name = "ssh-encoding" -version = "0.1.0" +name = "ssh-cipher" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "19cfdc32e0199062113edf41f344fbf784b8205a94600233c84eb838f45191e1" +checksum = "caac132742f0d33c3af65bfcde7f6aa8f62f0e991d80db99149eb9d44708784f" +dependencies = [ + "cipher 0.4.4", + "ssh-encoding", +] + +[[package]] +name = "ssh-encoding" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eb9242b9ef4108a78e8cd1a2c98e193ef372437f8c22be363075233321dd4a15" dependencies = [ "base64ct", "pem-rfc7468", - "sha2 0.10.7", + "sha2 0.10.8", ] [[package]] name = "ssh-key" -version = "0.5.1" +version = "0.6.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "288d8f5562af5a3be4bda308dd374b2c807b940ac370b5efa1c99311da91d9a1" +checksum = "2180b3bc4955efd5661a97658d3cf4c8107e0d132f619195afe9486c13cca313" dependencies = [ - "ed25519-dalek", - "p256 0.11.1", + "ed25519-dalek 2.0.0", + "p256", "p384", "rand_core 0.6.4", "rsa", "sec1", - "sha2 0.10.7", - "signature 1.6.4", + "sha2 0.10.8", + "signature 2.0.0", + "ssh-cipher", "ssh-encoding", + "subtle", "zeroize", ] @@ -4788,7 +4917,7 @@ dependencies = [ "async-trait", "avahi-sys", "base32", - "base64 0.13.1", + "base64 0.21.4", "base64ct", "basic-cookies", "bytes", @@ -4798,14 +4927,13 @@ dependencies = [ "color-eyre", "console", "console-subscriber", - "cookie", - "cookie_store 0.19.1", + "cookie 0.18.0", + "cookie_store 0.20.0", "current_platform", "digest 0.10.7", - "digest 0.9.0", "divrem", - "ed25519", - "ed25519-dalek", + "ed25519 2.2.3", + "ed25519-dalek 2.0.0", "embassy_container_init", "emver", "fd-lock-rs", @@ -4821,12 +4949,12 @@ dependencies = [ "imbl", "imbl-value", "include_dir", - "indexmap 1.9.3", + "indexmap 2.0.2", "indicatif", "ipnet", "iprange", "isocountry", - "itertools 0.10.5", + "itertools 0.11.0", "jaq-core", "jaq-std", "josekit", @@ -4838,13 +4966,13 @@ dependencies = [ "mbrman", "models", "new_mime_guess", - "nix 0.25.1", + "nix 0.27.1", "nom 7.1.3", "num", "num_enum", "openssh-keys", "openssl", - "p256 0.12.0", + "p256", "patch-db", "pbkdf2", "pin-project", @@ -4852,7 +4980,6 @@ dependencies = [ "prettytable-rs", "proptest", "proptest-derive", - "rand 0.7.3", "rand 0.8.5", "regex", "reqwest", @@ -4865,8 +4992,7 @@ dependencies = [ "serde_json", "serde_with", "serde_yaml", - "sha2 0.10.7", - "sha2 0.9.9", + "sha2 0.10.8", "simple-logging", "sqlx", "sscanf", @@ -4881,7 +5007,7 @@ dependencies = [ "tokio-tar", "tokio-tungstenite", "tokio-util", - "toml", + "toml 0.8.2", "torut", "tracing", "tracing-error", @@ -4923,7 +5049,7 @@ checksum = "f91138e76242f575eb1d3b38b4f1362f10d3a43f47d182a5b359af488a02293b" dependencies = [ "new_debug_unreachable", "once_cell", - "parking_lot 0.12.1", + "parking_lot", "phf_shared", "precomputed-hash", "serde", @@ -4937,29 +5063,30 @@ checksum = "6bb30289b722be4ff74a408c3cc27edeaad656e06cb1fe8fa9231fa59c728988" dependencies = [ "phf_generator", "phf_shared", - "proc-macro2 1.0.66", - "quote 1.0.31", + "proc-macro2", + "quote", ] [[package]] name = "string_enum" -version = "0.4.0" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0090512bdfee4b56d82480d66c0fd8a6f53f0fe0f97e075e949b252acdd482e0" +checksum = "8fa4d4f81d7c05b9161f8de839975d3326328b8ba2831164b465524cc2f55252" dependencies = [ "pmutil", - "proc-macro2 1.0.66", - "quote 1.0.31", + "proc-macro2", + "quote", "swc_macros_common", - "syn 1.0.109", + "syn 2.0.38", ] [[package]] name = "stringprep" -version = "0.1.3" +version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "db3737bde7edce97102e0e2b15365bf7a20bfdb5f60f4f9e8d7004258a51a8da" +checksum = "bb41d74e231a107a1b4ee36bd1214b11285b77768d2e3824aedafa988fd36ee6" dependencies = [ + "finl_unicode", "unicode-bidi", "unicode-normalization", ] @@ -4978,24 +5105,24 @@ checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623" [[package]] name = "strum" -version = "0.24.1" +version = "0.25.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "063e6045c0e62079840579a7e47a355ae92f60eb74daaf156fb1e84ba164e63f" +checksum = "290d54ea6f91c969195bdbcd7442c8c2a2ba87da8bf60a7ee86a235d4bc1e125" dependencies = [ "strum_macros", ] [[package]] name = "strum_macros" -version = "0.24.3" +version = "0.25.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e385be0d24f186b4ce2f9982191e7101bb737312ad61c1f2f984f34bcf85d59" +checksum = "23dc1fa9ac9c169a78ba62f0b841814b7abae11bdd047b9c58f893439e309ea0" dependencies = [ "heck", - "proc-macro2 1.0.66", - "quote 1.0.31", + "proc-macro2", + "quote", "rustversion", - "syn 1.0.109", + "syn 2.0.38", ] [[package]] @@ -5006,9 +5133,9 @@ checksum = "6bdef32e8150c2a081110b42772ffe7d7c9032b606bc226c8260fd97e0976601" [[package]] name = "swc_atoms" -version = "0.5.6" +version = "0.5.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "93d0307dc4bfd107d49c7528350c372758cfca94fb503629b9a056e6a1572860" +checksum = "9f54563d7dcba626d4acfe14ed12def7ecc28e004debe3ecd2c3ee07cc47e449" dependencies = [ "once_cell", "rustc-hash", @@ -5020,11 +5147,10 @@ dependencies = [ [[package]] name = "swc_common" -version = "0.31.12" +version = "0.32.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "19c774005489d2907fb67909cf42af926e72edee1366512777c605ba2ef19c94" +checksum = "39cb7fcd56655c8ae7dcf2344f0be6cbff4d9c7cb401fe3ec8e56e1de8dfe582" dependencies = [ - "ahash 0.7.6", "ast_node", "better_scoped_tls", "cfg-if 1.0.0", @@ -5036,7 +5162,7 @@ dependencies = [ "rustc-hash", "serde", "siphasher", - "sourcemap", + "sourcemap 6.4.1", "string_cache", "swc_atoms", "swc_eq_ignore_macros", @@ -5048,9 +5174,9 @@ dependencies = [ [[package]] name = "swc_config" -version = "0.1.5" +version = "0.1.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "89c8fc2c12bb1634c7c32fc3c9b6b963ad8f034cc62c4ecddcf215dc4f6f959d" +checksum = "9ba1c7a40d38f9dd4e9a046975d3faf95af42937b34b2b963be4d8f01239584b" dependencies = [ "indexmap 1.9.3", "serde", @@ -5060,24 +5186,24 @@ dependencies = [ [[package]] name = "swc_config_macro" -version = "0.1.1" +version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7dadb9998d4f5fc36ef558ed5a092579441579ee8c6fcce84a5228cca9df4004" +checksum = "e5b5aaca9a0082be4515f0fbbecc191bf5829cd25b5b9c0a2810f6a2bb0d6829" dependencies = [ "pmutil", - "proc-macro2 1.0.66", - "quote 1.0.31", + "proc-macro2", + "quote", "swc_macros_common", - "syn 1.0.109", + "syn 2.0.38", ] [[package]] name = "swc_ecma_ast" -version = "0.104.5" +version = "0.109.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b5cf9dd351d0c285dcd36535267953a18995d4dda0cbe34ac9d1df61aa415b26" +checksum = "7bc2286cedd688a68f214faa1c19bb5cceab7c9c54d0cbe3273e4c1704e38f69" dependencies = [ - "bitflags 2.3.3", + "bitflags 2.4.1", "is-macro", "num-bigint", "scoped-tls", @@ -5090,16 +5216,16 @@ dependencies = [ [[package]] name = "swc_ecma_codegen" -version = "0.139.17" +version = "0.144.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c66d1ea16bb9b7ea6f87f17325742ff256fcbd65b188af57c2bf415fe4afc945" +checksum = "8e62ba2c0ed1f119fc1a76542d007f1b2c12854d54dea15f5491363227debe11" dependencies = [ "memchr", "num-bigint", "once_cell", "rustc-hash", "serde", - "sourcemap", + "sourcemap 6.4.1", "swc_atoms", "swc_common", "swc_ecma_ast", @@ -5109,24 +5235,23 @@ dependencies = [ [[package]] name = "swc_ecma_codegen_macros" -version = "0.7.2" +version = "0.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bf4ee0caee1018808d94ecd09490cb7affd3d504b19aa11c49238f5fc4b54901" +checksum = "dcdff076dccca6cc6a0e0b2a2c8acfb066014382bc6df98ec99e755484814384" dependencies = [ "pmutil", - "proc-macro2 1.0.66", - "quote 1.0.31", + "proc-macro2", + "quote", "swc_macros_common", - "syn 1.0.109", + "syn 2.0.38", ] [[package]] name = "swc_ecma_loader" -version = "0.43.14" +version = "0.44.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fe45f1e5dcc1b005544ff78253b787dea5dfd5e2f712b133964cdc3545c954a4" +checksum = "e7d7c322462657ae27ac090a2c89f7e456c94416284a2f5ecf66c43a6a3c19d1" dependencies = [ - "ahash 0.7.6", "anyhow", "pathdiff", "serde", @@ -5136,13 +5261,13 @@ dependencies = [ [[package]] name = "swc_ecma_parser" -version = "0.134.12" +version = "0.139.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f0a3fcfe3d83dd445cbd9321882e47b467594433d9a21c4d6c37a27f534bb89e" +checksum = "3eab46cb863bc5cd61535464e07e5b74d5f792fa26a27b9f6fd4c8daca9903b7" dependencies = [ "either", - "lexical", "num-bigint", + "num-traits", "serde", "smallvec", "smartstring", @@ -5156,12 +5281,12 @@ dependencies = [ [[package]] name = "swc_ecma_transforms_base" -version = "0.127.18" +version = "0.132.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f9c33ec5369178f3a0580ab86cfe89ffb9c3fbd122aed379cfb71d469d9d61c1" +checksum = "01ffd4a8149052bfc1ec1832fcbe04f317846ce635a49ec438df33b06db27d26" dependencies = [ "better_scoped_tls", - "bitflags 2.3.3", + "bitflags 2.4.1", "indexmap 1.9.3", "once_cell", "phf", @@ -5179,9 +5304,9 @@ dependencies = [ [[package]] name = "swc_ecma_transforms_classes" -version = "0.116.18" +version = "0.121.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6e3b0d5f362f0da97be1f1b06d7b0d8667ea70b4adeabff0dcaecb6259c09525" +checksum = "f4b7fee0e2c6f12456d2aefb2418f2f26529b995945d493e1dce35a5a22584fc" dependencies = [ "swc_atoms", "swc_common", @@ -5193,22 +5318,22 @@ dependencies = [ [[package]] name = "swc_ecma_transforms_macros" -version = "0.5.1" +version = "0.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "984d5ac69b681fc5438f9abf82b0fda34fe04e119bc75f8213b7e01128c7c9a2" +checksum = "8188eab297da773836ef5cf2af03ee5cca7a563e1be4b146f8141452c28cc690" dependencies = [ "pmutil", - "proc-macro2 1.0.66", - "quote 1.0.31", + "proc-macro2", + "quote", "swc_macros_common", - "syn 1.0.109", + "syn 2.0.38", ] [[package]] name = "swc_ecma_transforms_proposal" -version = "0.161.22" +version = "0.166.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0cdce42d44ef775bc29f5ada3678a80ff72fa17a0ef705e14f63cfd0e0155e0e" +checksum = "122fd9a69f464694edefbf9c59106b3c15e5cc8cb8575a97836e4fb79018e98f" dependencies = [ "either", "rustc-hash", @@ -5226,11 +5351,10 @@ dependencies = [ [[package]] name = "swc_ecma_transforms_react" -version = "0.173.20" +version = "0.178.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5fb9481ad4e2acba34c6fbb6d4ccc64efe9f1821675e883dcfa732d7220f4b1e" +checksum = "675b5c755b0448268830e85e59429095d3423c0ce4a850b209c6f0eeab069f63" dependencies = [ - "ahash 0.7.6", "base64 0.13.1", "dashmap", "indexmap 1.9.3", @@ -5251,9 +5375,9 @@ dependencies = [ [[package]] name = "swc_ecma_transforms_typescript" -version = "0.177.23" +version = "0.182.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1fe2eea4f5b8a25c93cdaa29fb1ce4108893da88a11e61e04b7f5295b5468829" +checksum = "4eba97b1ea71739fcf278aedad4677a3cacb52288a3f3566191b70d16a889de6" dependencies = [ "serde", "swc_atoms", @@ -5267,9 +5391,9 @@ dependencies = [ [[package]] name = "swc_ecma_utils" -version = "0.117.13" +version = "0.122.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ad791bbfdafcebd878584021e050964c8ab68aba7eeac9d0ee4afba4c284a629" +checksum = "11006a3398ffd4693c4d3b0a1b1a5030edbdc04228159f5301120a6178144708" dependencies = [ "indexmap 1.9.3", "num_cpus", @@ -5285,9 +5409,9 @@ dependencies = [ [[package]] name = "swc_ecma_visit" -version = "0.90.5" +version = "0.95.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6ce3ac941ae1d6c7e683aa375fc71fbf58df58b441f614d757fbb10554936ca2" +checksum = "0f628ec196e76e67892441e14eef2e423a738543d32bffdabfeec20c29582117" dependencies = [ "num-bigint", "swc_atoms", @@ -5299,33 +5423,33 @@ dependencies = [ [[package]] name = "swc_eq_ignore_macros" -version = "0.1.1" +version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0c20468634668c2bbab581947bb8c75c97158d5a6959f4ba33df20983b20b4f6" +checksum = "05a95d367e228d52484c53336991fdcf47b6b553ef835d9159db4ba40efb0ee8" dependencies = [ "pmutil", - "proc-macro2 1.0.66", - "quote 1.0.31", - "syn 1.0.109", + "proc-macro2", + "quote", + "syn 2.0.38", ] [[package]] name = "swc_macros_common" -version = "0.3.7" +version = "0.3.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3e582c3e3c2269238524923781df5be49e011dbe29cf7683a2215d600a562ea6" +checksum = "7a273205ccb09b51fabe88c49f3b34c5a4631c4c00a16ae20e03111d6a42e832" dependencies = [ "pmutil", - "proc-macro2 1.0.66", - "quote 1.0.31", - "syn 1.0.109", + "proc-macro2", + "quote", + "syn 2.0.38", ] [[package]] name = "swc_visit" -version = "0.5.6" +version = "0.5.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f412dd4fbc58f509a04e64f5c8038333142fc139e8232f01b883db0094b3b51" +checksum = "e87c337fbb2d191bf371173dea6a957f01899adb8f189c6c31b122a6cfc98fc3" dependencies = [ "either", "swc_visit_macros", @@ -5333,27 +5457,16 @@ dependencies = [ [[package]] name = "swc_visit_macros" -version = "0.5.7" +version = "0.5.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4cfc226380ba54a5feed2c12f3ccd33f1ae8e959160290e5d2d9b4e918b6472a" +checksum = "0f322730fb82f3930a450ac24de8c98523af7d34ab8cb2f46bcb405839891a99" dependencies = [ "Inflector", "pmutil", - "proc-macro2 1.0.66", - "quote 1.0.31", + "proc-macro2", + "quote", "swc_macros_common", - "syn 1.0.109", -] - -[[package]] -name = "syn" -version = "0.15.44" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ca4b3b69a77cbe1ffc9e198781b7acb0c7365a883670e8f1c1bc66fba79a5c5" -dependencies = [ - "proc-macro2 0.4.30", - "quote 0.6.13", - "unicode-xid 0.1.0", + "syn 2.0.38", ] [[package]] @@ -5362,19 +5475,19 @@ version = "1.0.109" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237" dependencies = [ - "proc-macro2 1.0.66", - "quote 1.0.31", + "proc-macro2", + "quote", "unicode-ident", ] [[package]] name = "syn" -version = "2.0.18" +version = "2.0.38" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "32d41677bcbe24c20c52e7c70b0d8db04134c5d1066bf98662e2871ad200ea3e" +checksum = "e96b79aaa137db8f61e26363a0c9b47d8b4ec75da28b7d1d614c2303e232408b" dependencies = [ - "proc-macro2 1.0.66", - "quote 1.0.31", + "proc-macro2", + "quote", "unicode-ident", ] @@ -5384,6 +5497,27 @@ version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2047c6ded9c721764247e62cd3b03c09ffc529b2ba5b10ec482ae507a4a70160" +[[package]] +name = "system-configuration" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba3a3adc5c275d719af8cb4272ea1c4a6d668a777f37e115f6d11ddbc1c8e0e7" +dependencies = [ + "bitflags 1.3.2", + "core-foundation", + "system-configuration-sys", +] + +[[package]] +name = "system-configuration-sys" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a75fb188eb626b924683e3b95e3a48e63551fcfb51949de2f06a9d91dbee93c9" +dependencies = [ + "core-foundation-sys", + "libc", +] + [[package]] name = "tap" version = "1.0.1" @@ -5392,26 +5526,25 @@ checksum = "55937e1799185b12863d447f42597ed69d9928686b8d88a1df17376a097d8369" [[package]] name = "tar" -version = "0.4.39" +version = "0.4.40" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec96d2ffad078296368d46ff1cb309be1c23c513b4ab0e22a45de0185275ac96" +checksum = "b16afcea1f22891c49a00c751c7b63b2233284064f11a200fc624137c51e2ddb" dependencies = [ "filetime", "libc", - "xattr", + "xattr 1.0.1", ] [[package]] name = "tempfile" -version = "3.6.0" +version = "3.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "31c0432476357e58790aaa47a8efb0c5138f137343f3b5f23bd36a27e3b0a6d6" +checksum = "cb94d2f3cc536af71caac6b6fcebf65860b347e7ce0cc9ebe8f70d3e521054ef" dependencies = [ - "autocfg", "cfg-if 1.0.0", "fastrand", "redox_syscall 0.3.5", - "rustix 0.37.23", + "rustix 0.38.19", "windows-sys 0.48.0", ] @@ -5461,22 +5594,22 @@ checksum = "222a222a5bfe1bba4a77b45ec488a741b3cb8872e5e499451fd7d0129c9c7c3d" [[package]] name = "thiserror" -version = "1.0.40" +version = "1.0.49" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "978c9a314bd8dc99be594bc3c175faaa9794be04a5a5e153caba6915336cebac" +checksum = "1177e8c6d7ede7afde3585fd2513e611227efd6481bd78d2e82ba1ce16557ed4" dependencies = [ "thiserror-impl", ] [[package]] name = "thiserror-impl" -version = "1.0.40" +version = "1.0.49" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f9456a42c5b0d803c8cd86e73dd7cc9edd429499f37a3550d286d5e86720569f" +checksum = "10712f02019e9288794769fba95cd6847df9874d49d871d062172f9dd41bc4cc" dependencies = [ - "proc-macro2 1.0.66", - "quote 1.0.31", - "syn 2.0.18", + "proc-macro2", + "quote", + "syn 2.0.38", ] [[package]] @@ -5502,21 +5635,11 @@ dependencies = [ [[package]] name = "time" -version = "0.1.45" +version = "0.3.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1b797afad3f312d1c66a56d11d0316f916356d11bd158fbc6ca6389ff6bf805a" -dependencies = [ - "libc", - "wasi 0.10.0+wasi-snapshot-preview1", - "winapi", -] - -[[package]] -name = "time" -version = "0.3.23" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "59e399c068f43a5d116fedaf73b203fa4f9c519f17e2b34f63221d3792f81446" +checksum = "a79d09ac6b08c1ab3906a2f7cc2e81a0e27c7ae89c63812df75e52bef0751e07" dependencies = [ + "deranged", "itoa", "serde", "time-core", @@ -5531,9 +5654,9 @@ checksum = "7300fbefb4dadc1af235a9cef3737cea692a9d97e1b9cbcd4ebdae6f8868e6fb" [[package]] name = "time-macros" -version = "0.2.10" +version = "0.2.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "96ba15a897f3c86766b757e5ac7221554c6750054d74d5b28844fce5fb36a6c4" +checksum = "75c65469ed6b3a4809d987a41eb1dc918e9bc1d92211cbad7ae82931846f7451" dependencies = [ "time-core", ] @@ -5564,20 +5687,19 @@ checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" [[package]] name = "tokio" -version = "1.29.1" +version = "1.33.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "532826ff75199d5833b9d2c5fe410f29235e25704ee5f0ef599fb51c21f4a4da" +checksum = "4f38200e3ef7995e5ef13baec2f432a6da0aa9ac495b2c0e8f3b7eec2c92d653" dependencies = [ - "autocfg", "backtrace", "bytes", "libc", "mio", "num_cpus", - "parking_lot 0.12.1", + "parking_lot", "pin-project-lite", "signal-hook-registry", - "socket2", + "socket2 0.5.4", "tokio-macros", "tracing", "windows-sys 0.48.0", @@ -5599,9 +5721,9 @@ version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "630bdcf245f78637c13ec01ffae6187cca34625e8c63150d424b59e55af2675e" dependencies = [ - "proc-macro2 1.0.66", - "quote 1.0.31", - "syn 2.0.18", + "proc-macro2", + "quote", + "syn 2.0.38", ] [[package]] @@ -5616,13 +5738,12 @@ dependencies = [ [[package]] name = "tokio-rustls" -version = "0.23.4" +version = "0.24.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c43ee83903113e03984cb9e5cebe6c04a5116269e900e3ddba8f068a62adda59" +checksum = "c28327cf380ac148141087fbfb9de9d7bd4e84ab5d2c28fbc911d753de8a7081" dependencies = [ "rustls", "tokio", - "webpki", ] [[package]] @@ -5660,14 +5781,14 @@ dependencies = [ "redox_syscall 0.2.16", "tokio", "tokio-stream", - "xattr", + "xattr 0.2.3", ] [[package]] name = "tokio-tungstenite" -version = "0.17.2" +version = "0.20.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f714dd15bead90401d77e04243611caec13726c2408afd5b31901dfcdcb3b181" +checksum = "212d5dcb2a1ce06d81107c3d0ffa3121fe974b73f068c8282cb1c32328113b6c" dependencies = [ "futures-util", "log", @@ -5679,9 +5800,9 @@ dependencies = [ [[package]] name = "tokio-util" -version = "0.7.8" +version = "0.7.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "806fe8c2c87eccc8b3267cbae29ed3ab2d0bd37fca70ab622e46aaa9375ddb7d" +checksum = "1d68074620f57a0b21594d9735eb2e98ab38b17f80d3fcb189fca266771ca60d" dependencies = [ "bytes", "futures-core", @@ -5693,11 +5814,26 @@ dependencies = [ [[package]] name = "toml" -version = "0.5.11" +version = "0.7.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f4f7f0dd8d50a853a531c426359045b1998f04219d88799810762cd4ad314234" +checksum = "dd79e69d3b627db300ff956027cc6c3798cef26d22526befdfcd12feeb6d2257" dependencies = [ "serde", + "serde_spanned", + "toml_datetime", + "toml_edit 0.19.15", +] + +[[package]] +name = "toml" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "185d8ab0dfbb35cf1399a6344d8484209c088f75f8f68230da55d48d95d43e3d" +dependencies = [ + "serde", + "serde_spanned", + "toml_datetime", + "toml_edit 0.20.2", ] [[package]] @@ -5705,14 +5841,32 @@ name = "toml_datetime" version = "0.6.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7cda73e2f1397b1262d6dfdcef8aafae14d1de7748d66822d3bfeeb6d03e5e4b" +dependencies = [ + "serde", +] [[package]] name = "toml_edit" -version = "0.19.14" +version = "0.19.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f8123f27e969974a3dfba720fdb560be359f57b44302d280ba72e76a74480e8a" +checksum = "1b5bb770da30e5cbfde35a2d7b9b8a2c4b8ef89548a7a6aeab5c9a576e3e7421" dependencies = [ - "indexmap 2.0.0", + "indexmap 2.0.2", + "serde", + "serde_spanned", + "toml_datetime", + "winnow", +] + +[[package]] +name = "toml_edit" +version = "0.20.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "396e4d48bbb2b7554c944bde63101b5ae446cff6ec4a24227428f15eb72ef338" +dependencies = [ + "indexmap 2.0.2", + "serde", + "serde_spanned", "toml_datetime", "winnow", ] @@ -5726,7 +5880,7 @@ dependencies = [ "async-stream", "async-trait", "axum", - "base64 0.21.2", + "base64 0.21.4", "bytes", "h2", "http", @@ -5753,7 +5907,7 @@ dependencies = [ "base32", "base64 0.13.1", "derive_more", - "ed25519-dalek", + "ed25519-dalek 1.0.1", "hex", "hmac 0.11.0", "rand 0.7.3", @@ -5798,11 +5952,11 @@ checksum = "b6bc1c9ce2b5135ac7f93c72918fc37feb872bdc6a5533a8b85eb4b86bfdae52" [[package]] name = "tracing" -version = "0.1.37" +version = "0.1.39" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ce8c33a8d48bd45d624a6e523445fd21ec13d3653cd51f681abf67418f54eb8" +checksum = "ee2ef2af84856a50c1d430afce2fdded0a4ec7eda868db86409b4543df0797f9" dependencies = [ - "cfg-if 1.0.0", + "log", "pin-project-lite", "tracing-attributes", "tracing-core", @@ -5810,20 +5964,20 @@ dependencies = [ [[package]] name = "tracing-attributes" -version = "0.1.26" +version = "0.1.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f4f31f56159e98206da9efd823404b79b6ef3143b4a7ab76e67b1751b25a4ab" +checksum = "34704c8d6ebcbc939824180af020566b01a7c01f80641264eba0999f6c2b6be7" dependencies = [ - "proc-macro2 1.0.66", - "quote 1.0.31", - "syn 2.0.18", + "proc-macro2", + "quote", + "syn 2.0.38", ] [[package]] name = "tracing-core" -version = "0.1.31" +version = "0.1.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0955b8137a1df6f1a2e9a37d8a6656291ff0297c1a97c24e0d8425fe2312f79a" +checksum = "c06d3da6113f116aaee68e4d601191614c9053067f9ab7f6edbcb161237daa54" dependencies = [ "once_cell", "valuable", @@ -5908,31 +6062,11 @@ dependencies = [ "stable_deref_trait", ] -[[package]] -name = "trust-dns-client" -version = "0.22.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c408c32e6a9dbb38037cece35740f2cf23c875d8ca134d33631cec83f74d3fe" -dependencies = [ - "cfg-if 1.0.0", - "data-encoding", - "futures-channel", - "futures-util", - "lazy_static", - "radix_trie", - "rand 0.8.5", - "thiserror", - "time 0.3.23", - "tokio", - "tracing", - "trust-dns-proto", -] - [[package]] name = "trust-dns-proto" -version = "0.22.0" +version = "0.23.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4f7f83d1e4a0e4358ac54c5c3681e5d7da5efc5a7a632c90bb6d6669ddd9bc26" +checksum = "559ac980345f7f5020883dd3bcacf176355225e01916f8c2efecad7534f682c6" dependencies = [ "async-trait", "cfg-if 1.0.0", @@ -5941,9 +6075,9 @@ dependencies = [ "futures-channel", "futures-io", "futures-util", - "idna 0.2.3", + "idna 0.4.0", "ipnet", - "lazy_static", + "once_cell", "rand 0.8.5", "smallvec", "thiserror", @@ -5955,23 +6089,23 @@ dependencies = [ [[package]] name = "trust-dns-server" -version = "0.22.1" +version = "0.23.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "99022f9befa6daec2a860be68ac28b1f0d9d7ccf441d8c5a695e35a58d88840d" +checksum = "f4307166910ddf09378e651e9d4730c44900e9e0e1f157a6b955e48b539cd1d6" dependencies = [ "async-trait", "bytes", "cfg-if 1.0.0", + "drain", "enum-as-inner", "futures-executor", "futures-util", "serde", "thiserror", - "time 0.3.23", + "time", "tokio", - "toml", + "toml 0.7.8", "tracing", - "trust-dns-client", "trust-dns-proto", ] @@ -5983,19 +6117,19 @@ checksum = "3528ecfd12c466c6f163363caf2d02a71161dd5e1cc6ae7b34207ea2d42d81ed" [[package]] name = "tungstenite" -version = "0.17.3" +version = "0.20.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e27992fd6a8c29ee7eef28fc78349aa244134e10ad447ce3b9f0ac0ed0fa4ce0" +checksum = "9e3dac10fd62eaf6617d3a904ae222845979aec67c615d1c842b4002c7666fb9" dependencies = [ - "base64 0.13.1", "byteorder", "bytes", + "data-encoding", "http", "httparse", "log", "native-tls", "rand 0.8.5", - "sha-1", + "sha1", "thiserror", "url", "utf-8", @@ -6009,20 +6143,29 @@ checksum = "6af6ae20167a9ece4bcb41af5b80f8a1f1df981f6391189ce00fd257af04126a" [[package]] name = "typed-builder" -version = "0.10.0" +version = "0.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "89851716b67b937e393b3daa8423e67ddfc4bbbf1654bcf05488e95e0828db0c" +checksum = "b1c6a006a6d3d6a6f143fda41cf4d1ad35110080687628c9f2117bd3cc7924f3" dependencies = [ - "proc-macro2 1.0.66", - "quote 1.0.31", - "syn 1.0.109", + "typed-builder-macro", +] + +[[package]] +name = "typed-builder-macro" +version = "0.17.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8fa054ee5e2346187d631d2f1d1fd3b33676772d6d03a2d84e1c5213b31674ee" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.38", ] [[package]] name = "typenum" -version = "1.16.0" +version = "1.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "497961ef93d974e23eb6f433eb5fe1b7930b659f06d12dec6fc44a8f554c0bba" +checksum = "42ff0bf0c66b8238c6f3b578df37d0b7848e55df8577b3f74f92a69acceeb825" [[package]] name = "unarray" @@ -6032,9 +6175,9 @@ checksum = "eaea85b334db583fe3274d12b4cd1880032beab409c0d774be044d4480ab9a94" [[package]] name = "unicase" -version = "2.6.0" +version = "2.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "50f37be617794602aabbeee0be4f259dc1778fabe05e2d67ee8f79326d5cb4f6" +checksum = "f7d2d4dafb69621809a81864c9c1b864479e1235c0dd4e199924b9742439ed89" dependencies = [ "version_check", ] @@ -6047,15 +6190,15 @@ checksum = "92888ba5573ff080736b3648696b70cafad7d250551175acbaa4e0385b3e1460" [[package]] name = "unicode-id" -version = "0.3.3" +version = "0.3.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d70b6494226b36008c8366c288d77190b3fad2eb4c10533139c1c1f461127f1a" +checksum = "b1b6def86329695390197b82c1e244a54a131ceb66c996f2088a3876e2ae083f" [[package]] name = "unicode-ident" -version = "1.0.11" +version = "1.0.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "301abaae475aa91687eb82514b328ab47a211a533026cb25fc3e519b86adfc3c" +checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b" [[package]] name = "unicode-normalization" @@ -6074,15 +6217,9 @@ checksum = "1dd624098567895118886609431a7c3b8f516e41d30e0643f03d94592a147e36" [[package]] name = "unicode-width" -version = "0.1.10" +version = "0.1.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c0edd1e5b14653f783770bce4a4dabb4a5108a5370a5f5d8cfe8710c361f6c8b" - -[[package]] -name = "unicode-xid" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fc72304796d0818e357ead4e000d19c9c174ab23dc11093ac919054d20a6a7fc" +checksum = "e51733f11c9c4f72aa0c160008246859e340b00807569a0da0e7a1079b27ba85" [[package]] name = "unicode-xid" @@ -6110,9 +6247,9 @@ checksum = "a156c684c91ea7d62626509bce3cb4e1d9ed5c4d978f7b4352658f96a4c26b4a" [[package]] name = "url" -version = "2.4.0" +version = "2.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "50bff7831e19200a85b17131d085c25d7811bc4e186efdaf54bbd132994a88cb" +checksum = "143b538f18257fac9cad154828a57c6bf5157e1aa604d4816b5995bf6de87ae5" dependencies = [ "form_urlencoded", "idna 0.4.0", @@ -6122,9 +6259,9 @@ dependencies = [ [[package]] name = "urlencoding" -version = "2.1.2" +version = "2.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e8db7427f936968176eaa7cdf81b7f98b980b18495ec28f1b5791ac3bfe3eea9" +checksum = "daf8dba3b7eb870caf1ddeed7bc9d2a049f3cfdfae7cb521b087cc33ae4c49da" [[package]] name = "utf-8" @@ -6143,14 +6280,14 @@ dependencies = [ [[package]] name = "v8" -version = "0.74.2" +version = "0.79.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7568bf38565bd5b350d96abbf3d09417e8c9dd74fbb38860e91b759e46f9009c" +checksum = "b15561535230812a1db89a696f1f16a12ae6c2c370c6b2241c68d4cb33963faf" dependencies = [ "bitflags 1.3.2", "fslock", "once_cell", - "which 4.4.0", + "which 4.4.2", ] [[package]] @@ -6201,12 +6338,6 @@ version = "0.9.0+wasi-snapshot-preview1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cccddf32554fecc6acb585f82a32a72e28b48f8c4c1883ddfeeeaa96f7d8e519" -[[package]] -name = "wasi" -version = "0.10.0+wasi-snapshot-preview1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1a143597ca7c7793eff794def352d41792a93c481eb1042423ff7ff72ba2c31f" - [[package]] name = "wasi" version = "0.11.0+wasi-snapshot-preview1" @@ -6232,9 +6363,9 @@ dependencies = [ "bumpalo", "log", "once_cell", - "proc-macro2 1.0.66", - "quote 1.0.31", - "syn 2.0.18", + "proc-macro2", + "quote", + "syn 2.0.38", "wasm-bindgen-shared", ] @@ -6256,7 +6387,7 @@ version = "0.2.87" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dee495e55982a3bd48105a7b947fd2a9b4a8ae3010041b9e0faab3f9cd028f1d" dependencies = [ - "quote 1.0.31", + "quote", "wasm-bindgen-macro-support", ] @@ -6266,9 +6397,9 @@ version = "0.2.87" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "54681b18a46765f095758388f2d0cf16eb8d4169b639ab575a8f5693af210c7b" dependencies = [ - "proc-macro2 1.0.66", - "quote 1.0.31", - "syn 2.0.18", + "proc-macro2", + "quote", + "syn 2.0.38", "wasm-bindgen-backend", "wasm-bindgen-shared", ] @@ -6281,9 +6412,9 @@ checksum = "ca6ad05a4870b2bf5fe995117d3728437bd27d7cd5f06f13c17443ef369775a1" [[package]] name = "wasm-streams" -version = "0.2.3" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6bbae3363c08332cadccd13b67db371814cd214c2524020932f0804b8cf7c078" +checksum = "b4609d447824375f43e1ffbc051b50ad8f4b3ae8219680c94452ea05eb240ac7" dependencies = [ "futures-util", "js-sys", @@ -6302,23 +6433,13 @@ dependencies = [ "wasm-bindgen", ] -[[package]] -name = "webpki" -version = "0.22.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f095d78192e208183081cc07bc5515ef55216397af48b873e5edcd72637fa1bd" -dependencies = [ - "ring", - "untrusted", -] - [[package]] name = "webpki-roots" -version = "0.22.6" +version = "0.24.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6c71e40d7d2c34a5106301fb632274ca37242cd0c9d3e64dbece371a40a2d87" +checksum = "b291546d5d9d1eab74f069c77749f2cb8504a12caa20f0f2de93ddbf6f411888" dependencies = [ - "webpki", + "rustls-webpki", ] [[package]] @@ -6332,13 +6453,14 @@ dependencies = [ [[package]] name = "which" -version = "4.4.0" +version = "4.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2441c784c52b289a054b7201fc93253e288f094e2f4be9058343127c4226a269" +checksum = "87ba24419a2078cd2b0f2ede2691b6c66d8e47836da3b6db8265ebad47afbfc7" dependencies = [ "either", - "libc", + "home", "once_cell", + "rustix 0.38.19", ] [[package]] @@ -6346,10 +6468,6 @@ name = "whoami" version = "1.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "22fc3756b8a9133049b26c7f61ab35416c130e8c09b660f5b3958b446f52cc50" -dependencies = [ - "wasm-bindgen", - "web-sys", -] [[package]] name = "winapi" @@ -6369,9 +6487,9 @@ checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" [[package]] name = "winapi-util" -version = "0.1.5" +version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "70ec6ce85bb158151cae5e5c87f95a8e97d2c0c4b001223f33a334e3ce5de178" +checksum = "f29e6f9198ba0d26b4c9f07dbe6f9ed633e1f3d5b8b414090084349e46a52596" dependencies = [ "winapi", ] @@ -6383,12 +6501,12 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" [[package]] -name = "windows" -version = "0.48.0" +name = "windows-core" +version = "0.51.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e686886bc078bc1b0b600cac0147aadb815089b6e4da64016cbd754b6342700f" +checksum = "f1f8cf84f35d2db49a46868f947758c7a1138116f7fac3bc844f43ade1292e64" dependencies = [ - "windows-targets 0.48.1", + "windows-targets 0.48.5", ] [[package]] @@ -6406,7 +6524,7 @@ version = "0.48.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9" dependencies = [ - "windows-targets 0.48.1", + "windows-targets 0.48.5", ] [[package]] @@ -6426,17 +6544,17 @@ dependencies = [ [[package]] name = "windows-targets" -version = "0.48.1" +version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "05d4b17490f70499f20b9e791dcf6a299785ce8af4d709018206dc5b4953e95f" +checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c" dependencies = [ - "windows_aarch64_gnullvm 0.48.0", - "windows_aarch64_msvc 0.48.0", - "windows_i686_gnu 0.48.0", - "windows_i686_msvc 0.48.0", - "windows_x86_64_gnu 0.48.0", - "windows_x86_64_gnullvm 0.48.0", - "windows_x86_64_msvc 0.48.0", + "windows_aarch64_gnullvm 0.48.5", + "windows_aarch64_msvc 0.48.5", + "windows_i686_gnu 0.48.5", + "windows_i686_msvc 0.48.5", + "windows_x86_64_gnu 0.48.5", + "windows_x86_64_gnullvm 0.48.5", + "windows_x86_64_msvc 0.48.5", ] [[package]] @@ -6447,9 +6565,9 @@ checksum = "597a5118570b68bc08d8d59125332c54f1ba9d9adeedeef5b99b02ba2b0698f8" [[package]] name = "windows_aarch64_gnullvm" -version = "0.48.0" +version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "91ae572e1b79dba883e0d315474df7305d12f569b400fcf90581b06062f7e1bc" +checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8" [[package]] name = "windows_aarch64_msvc" @@ -6459,9 +6577,9 @@ checksum = "e08e8864a60f06ef0d0ff4ba04124db8b0fb3be5776a5cd47641e942e58c4d43" [[package]] name = "windows_aarch64_msvc" -version = "0.48.0" +version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b2ef27e0d7bdfcfc7b868b317c1d32c641a6fe4629c171b8928c7b08d98d7cf3" +checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc" [[package]] name = "windows_i686_gnu" @@ -6471,9 +6589,9 @@ checksum = "c61d927d8da41da96a81f029489353e68739737d3beca43145c8afec9a31a84f" [[package]] name = "windows_i686_gnu" -version = "0.48.0" +version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "622a1962a7db830d6fd0a69683c80a18fda201879f0f447f065a3b7467daa241" +checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e" [[package]] name = "windows_i686_msvc" @@ -6483,9 +6601,9 @@ checksum = "44d840b6ec649f480a41c8d80f9c65108b92d89345dd94027bfe06ac444d1060" [[package]] name = "windows_i686_msvc" -version = "0.48.0" +version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4542c6e364ce21bf45d69fdd2a8e455fa38d316158cfd43b3ac1c5b1b19f8e00" +checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406" [[package]] name = "windows_x86_64_gnu" @@ -6495,9 +6613,9 @@ checksum = "8de912b8b8feb55c064867cf047dda097f92d51efad5b491dfb98f6bbb70cb36" [[package]] name = "windows_x86_64_gnu" -version = "0.48.0" +version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ca2b8a661f7628cbd23440e50b05d705db3686f894fc9580820623656af974b1" +checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e" [[package]] name = "windows_x86_64_gnullvm" @@ -6507,9 +6625,9 @@ checksum = "26d41b46a36d453748aedef1486d5c7a85db22e56aff34643984ea85514e94a3" [[package]] name = "windows_x86_64_gnullvm" -version = "0.48.0" +version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7896dbc1f41e08872e9d5e8f8baa8fdd2677f29468c4e156210174edc7f7b953" +checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc" [[package]] name = "windows_x86_64_msvc" @@ -6519,26 +6637,27 @@ checksum = "9aec5da331524158c6d1a4ac0ab1541149c0b9505fde06423b02f5ef0106b9f0" [[package]] name = "windows_x86_64_msvc" -version = "0.48.0" +version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1a515f5799fe4961cb532f983ce2b23082366b898e52ffbce459c86f67c8378a" +checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538" [[package]] name = "winnow" -version = "0.5.0" +version = "0.5.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "81fac9742fd1ad1bd9643b991319f72dd031016d44b77039a26977eb667141e7" +checksum = "a3b801d0e0a6726477cc207f60162da452f3a95adb368399bef20a946e06f65c" dependencies = [ "memchr", ] [[package]] name = "winreg" -version = "0.10.1" +version = "0.50.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "80d0f4e272c85def139476380b12f9ac60926689dd2e01d4923222f40580869d" +checksum = "524e57b2c537c0f9b1e69f1965311ec12182b4122e45035b1508cd24d2adadb1" dependencies = [ - "winapi", + "cfg-if 1.0.0", + "windows-sys 0.48.0", ] [[package]] @@ -6559,6 +6678,15 @@ dependencies = [ "libc", ] +[[package]] +name = "xattr" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f4686009f71ff3e5c4dbcf1a282d0a44db3f021ba69350cd42086b3e5f1c6985" +dependencies = [ + "libc", +] + [[package]] name = "yajrc" version = "0.1.0" @@ -6609,7 +6737,7 @@ version = "1.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ce36e65b0d2999d2aafac989fb249189a141aee1f53c612c1f37d72631959f69" dependencies = [ - "proc-macro2 1.0.66", - "quote 1.0.31", - "syn 2.0.18", + "proc-macro2", + "quote", + "syn 2.0.38", ] diff --git a/backend/Cargo.toml b/backend/Cargo.toml index 665e0c651..84998b323 100644 --- a/backend/Cargo.toml +++ b/backend/Cargo.toml @@ -26,143 +26,145 @@ path = "src/main.rs" [features] avahi = ["avahi-sys"] -default = ["cli", "sdk", "daemon", "js_engine"] -dev = [] -unstable = ["console-subscriber", "tokio/tracing"] avahi-alias = ["avahi"] cli = [] -sdk = [] daemon = [] +default = ["cli", "sdk", "daemon", "js_engine"] +dev = [] podman = [] +sdk = [] +unstable = ["console-subscriber", "tokio/tracing"] [dependencies] aes = { version = "0.7.5", features = ["ctr"] } -async-compression = { version = "0.3.15", features = [ +async-compression = { version = "0.4.4", features = [ "gzip", "brotli", "tokio", ] } -async-stream = "0.3.3" -async-trait = "0.1.56" +async-stream = "0.3.5" +async-trait = "0.1.74" avahi-sys = { git = "https://github.com/Start9Labs/avahi-sys", version = "0.10.0", branch = "feature/dynamic-linking", features = [ "dynamic", ], optional = true } base32 = "0.4.0" -base64 = "0.13.0" -base64ct = "1.5.1" +base64 = "0.21.4" +base64ct = "1.6.0" basic-cookies = "0.1.4" bytes = "1" -chrono = { version = "0.4.19", features = ["serde"] } -clap = "3.2.8" -color-eyre = "0.6.1" +chrono = { version = "0.4.31", features = ["serde"] } +clap = "3.2.25" +color-eyre = "0.6.2" +console = "0.15.7" console-subscriber = { version = "0.2", optional = true } -cookie = "0.16.2" -cookie_store = "0.19.0" +cookie = "0.18.0" +cookie_store = "0.20.0" current_platform = "0.2.0" -digest = "0.10.3" -digest-old = { package = "digest", version = "0.9.0" } +digest = "0.10.7" divrem = "1.0.0" -ed25519 = { version = "1.5.2", features = ["pkcs8", "pem", "alloc"] } -ed25519-dalek = { version = "1.0.1", features = ["serde"] } +ed25519 = { version = "2.2.3", features = ["pkcs8", "pem", "alloc"] } +ed25519-dalek = { version = "2.0.0", features = [ + "serde", + "hazmat", + "zeroize", + "rand_core", + "digest", +] } +embassy_container_init = { path = "../libs/embassy_container_init" } emver = { version = "0.1.7", git = "https://github.com/Start9Labs/emver-rs.git", features = [ "serde", ] } fd-lock-rs = "0.1.4" -futures = "0.3.21" +futures = "0.3.28" git-version = "0.3.5" -gpt = "3.0.0" +gpt = "3.1.0" helpers = { path = "../libs/helpers" } -embassy_container_init = { path = "../libs/embassy_container_init" } hex = "0.4.3" hmac = "0.12.1" -http = "0.2.8" -hyper = { version = "0.14.20", features = ["full"] } -hyper-ws-listener = "0.2.0" -imbl = "2.0.0" +http = "0.2.9" +hyper = { version = "0.14.27", features = ["full"] } +hyper-ws-listener = "0.3.0" +imbl = "2.0.2" imbl-value = { git = "https://github.com/Start9Labs/imbl-value.git" } include_dir = "0.7.3" -indexmap = { version = "1.9.1", features = ["serde"] } -ipnet = { version = "2.7.1", features = ["serde"] } +indexmap = { version = "2.0.2", features = ["serde"] } +indicatif = { version = "0.17.7", features = ["tokio"] } +ipnet = { version = "2.8.0", features = ["serde"] } iprange = { version = "0.6.7", features = ["serde"] } isocountry = "0.3.2" -itertools = "0.10.3" -jaq-core = "0.10.0" +itertools = "0.11.0" +jaq-core = "0.10.1" jaq-std = "0.10.0" -josekit = "0.8.1" +josekit = "0.8.4" js_engine = { path = '../libs/js_engine', optional = true } jsonpath_lib = { git = "https://github.com/Start9Labs/jsonpath.git" } lazy_static = "1.4.0" -libc = "0.2.126" -log = "0.4.17" -mbrman = "0.5.0" +libc = "0.2.149" +log = "0.4.20" +mbrman = "0.5.2" models = { version = "*", path = "../libs/models" } new_mime_guess = "4" -nix = "0.25.0" -nom = "7.1.1" -num = "0.4.0" -num_enum = "0.5.7" -openssh-keys = "0.5.0" -openssl = { version = "0.10.41", features = ["vendored"] } +nix = { version = "0.27.1", features = ["user", "process", "signal", "fs"] } +nom = "7.1.3" +num = "0.4.1" +num_enum = "0.7.0" +openssh-keys = "0.6.2" +openssl = { version = "0.10.57", features = ["vendored"] } +p256 = { version = "0.13.2", features = ["pem"] } patch-db = { version = "*", path = "../patch-db/patch-db", features = [ "trace", ] } -p256 = { version = "0.12.0", features = ["pem"] } -pbkdf2 = "0.11.0" -pin-project = "1.0.11" -pkcs8 = { version = "0.9.0", features = ["std"] } +pbkdf2 = "0.12.2" +pin-project = "1.1.3" +pkcs8 = { version = "0.10.2", features = ["std"] } prettytable-rs = "0.10.0" -proptest = "1.0.0" -proptest-derive = "0.3.0" +proptest = "1.3.1" +proptest-derive = "0.4.0" rand = { version = "0.8.5", features = ["std"] } -rand-old = { package = "rand", version = "0.7.3" } -regex = "1.6.0" -reqwest = { version = "0.11.11", features = ["stream", "json", "socks"] } -reqwest_cookie_store = "0.5.0" -rpassword = "7.0.0" +regex = "1.10.2" +reqwest = { version = "0.11.22", features = ["stream", "json", "socks"] } +reqwest_cookie_store = "0.6.0" +rpassword = "7.2.0" rpc-toolkit = "0.2.2" -rust-argon2 = "1.0.0" +rust-argon2 = "2.0.0" scopeguard = "1.1" # because avahi-sys fucks your shit up -sscanf = "0.4.1" -serde = { version = "1.0.139", features = ["derive", "rc"] } -serde_cbor = { package = "ciborium", version = "0.2.0" } -serde_json = "1.0.82" -serde_toml = { package = "toml", version = "0.5.9" } -serde_with = { version = "2.0.1", features = ["macros", "json"] } -serde_yaml = "0.9.11" +serde = { version = "1.0", features = ["derive", "rc"] } +serde_cbor = { package = "ciborium", version = "0.2.1" } +serde_json = "1.0" +serde_toml = { package = "toml", version = "0.8.2" } +serde_with = { version = "3.4.0", features = ["macros", "json"] } +serde_yaml = "0.9.25" sha2 = "0.10.2" -sha2-old = { package = "sha2", version = "0.9.9" } simple-logging = "2.0.2" -sqlx = { version = "0.6.0", features = [ +sqlx = { version = "0.7.2", features = [ "chrono", - "offline", "runtime-tokio-rustls", "postgres", ] } -ssh-key = { version = "0.5.1", features = ["ed25519"] } -stderrlog = "0.5.3" -tar = "0.4.38" -thiserror = "1.0.31" -tokio = { version = "1.23", features = ["full"] } -tokio-stream = { version = "0.1.11", features = ["io-util", "sync", "net"] } -tokio-tar = { git = "https://github.com/dr-bonez/tokio-tar.git" } -tokio-tungstenite = { version = "0.17.1", features = ["native-tls"] } -tokio-rustls = "0.23.4" +sscanf = "0.4.1" +ssh-key = { version = "0.6.2", features = ["ed25519"] } +stderrlog = "0.5.4" +tar = "0.4.40" +thiserror = "1.0.49" +tokio = { version = "1", features = ["full"] } +tokio-rustls = "0.24.1" tokio-socks = "0.5.1" -tokio-util = { version = "0.7.3", features = ["io"] } +tokio-stream = { version = "0.1.14", features = ["io-util", "sync", "net"] } +tokio-tar = { git = "https://github.com/dr-bonez/tokio-tar.git" } +tokio-tungstenite = { version = "0.20.1", features = ["native-tls"] } +tokio-util = { version = "0.7.9", features = ["io"] } torut = "0.2.1" -tracing = "0.1.35" +tracing = "0.1.39" tracing-error = "0.2.0" tracing-futures = "0.2.5" tracing-journald = "0.3.0" -tracing-subscriber = { version = "0.3.14", features = ["env-filter"] } -trust-dns-server = "0.22.0" -typed-builder = "0.10.0" -url = { version = "2.2.2", features = ["serde"] } -urlencoding = "2.1.2" -uuid = { version = "1.1.2", features = ["v4"] } -zeroize = "1.5.7" -indicatif = { version = "0.17.6", features = ["tokio"] } -console = "^0.15" +tracing-subscriber = { version = "0.3.17", features = ["env-filter"] } +trust-dns-server = "0.23.1" +typed-builder = "0.17.0" +url = { version = "2.4.1", features = ["serde"] } +urlencoding = "2.1.3" +uuid = { version = "1.4.1", features = ["v4"] } +zeroize = "1.6.0" [profile.test] opt-level = 3 diff --git a/backend/sqlx-data.json b/backend/sqlx-data.json deleted file mode 100644 index 84afcfdb6..000000000 --- a/backend/sqlx-data.json +++ /dev/null @@ -1,744 +0,0 @@ -{ - "db": "PostgreSQL", - "1ce5254f27de971fd87f5ab66d300f2b22433c86617a0dbf796bf2170186dd2e": { - "describe": { - "columns": [], - "nullable": [], - "parameters": { - "Left": [ - "Text", - "Text", - "Bytea" - ] - } - }, - "query": "INSERT INTO network_keys (package, interface, key) VALUES ($1, $2, $3) ON CONFLICT (package, interface) DO NOTHING" - }, - "21471490cdc3adb206274cc68e1ea745ffa5da4479478c1fd2158a45324b1930": { - "describe": { - "columns": [], - "nullable": [], - "parameters": { - "Left": [ - "Text" - ] - } - }, - "query": "DELETE FROM ssh_keys WHERE fingerprint = $1" - }, - "28ea34bbde836e0618c5fc9bb7c36e463c20c841a7d6a0eb15be0f24f4a928ec": { - "describe": { - "columns": [ - { - "name": "hostname", - "ordinal": 0, - "type_info": "Text" - }, - { - "name": "path", - "ordinal": 1, - "type_info": "Text" - }, - { - "name": "username", - "ordinal": 2, - "type_info": "Text" - }, - { - "name": "password", - "ordinal": 3, - "type_info": "Text" - } - ], - "nullable": [ - false, - false, - false, - true - ], - "parameters": { - "Left": [ - "Int4" - ] - } - }, - "query": "SELECT hostname, path, username, password FROM cifs_shares WHERE id = $1" - }, - "4099028a5c0de578255bf54a67cef6cb0f1e9a4e158260700f1639dd4b438997": { - "describe": { - "columns": [ - { - "name": "fingerprint", - "ordinal": 0, - "type_info": "Text" - }, - { - "name": "openssh_pubkey", - "ordinal": 1, - "type_info": "Text" - }, - { - "name": "created_at", - "ordinal": 2, - "type_info": "Text" - } - ], - "nullable": [ - false, - false, - false - ], - "parameters": { - "Left": [ - "Text" - ] - } - }, - "query": "SELECT * FROM ssh_keys WHERE fingerprint = $1" - }, - "4691e3a2ce80b59009ac17124f54f925f61dc5ea371903e62cdffa5d7b67ca96": { - "describe": { - "columns": [ - { - "name": "id", - "ordinal": 0, - "type_info": "Text" - }, - { - "name": "logged_in", - "ordinal": 1, - "type_info": "Timestamp" - }, - { - "name": "logged_out", - "ordinal": 2, - "type_info": "Timestamp" - }, - { - "name": "last_active", - "ordinal": 3, - "type_info": "Timestamp" - }, - { - "name": "user_agent", - "ordinal": 4, - "type_info": "Text" - }, - { - "name": "metadata", - "ordinal": 5, - "type_info": "Text" - } - ], - "nullable": [ - false, - false, - true, - false, - true, - false - ], - "parameters": { - "Left": [] - } - }, - "query": "SELECT * FROM session WHERE logged_out IS NULL OR logged_out > CURRENT_TIMESTAMP" - }, - "4bcfbefb1eb3181343871a1cd7fc3afb81c2be5c681cfa8b4be0ce70610e9c3a": { - "describe": { - "columns": [], - "nullable": [], - "parameters": { - "Left": [ - "Text" - ] - } - }, - "query": "UPDATE session SET logged_out = CURRENT_TIMESTAMP WHERE id = $1" - }, - "629be61c3c341c131ddbbff0293a83dbc6afd07cae69d246987f62cf0cc35c2a": { - "describe": { - "columns": [ - { - "name": "password", - "ordinal": 0, - "type_info": "Text" - } - ], - "nullable": [ - false - ], - "parameters": { - "Left": [] - } - }, - "query": "SELECT password FROM account" - }, - "687688055e63d27123cdc89a5bbbd8361776290a9411d527eaf1fdb40bef399d": { - "describe": { - "columns": [ - { - "name": "key", - "ordinal": 0, - "type_info": "Bytea" - } - ], - "nullable": [ - false - ], - "parameters": { - "Left": [ - "Text", - "Text" - ] - } - }, - "query": "SELECT key FROM tor WHERE package = $1 AND interface = $2" - }, - "6d35ccf780fb2bb62586dd1d3df9c1550a41ee580dad3f49d35cb843ebef10ca": { - "describe": { - "columns": [], - "nullable": [], - "parameters": { - "Left": [ - "Text" - ] - } - }, - "query": "UPDATE session SET last_active = CURRENT_TIMESTAMP WHERE id = $1 AND logged_out IS NULL OR logged_out > CURRENT_TIMESTAMP" - }, - "770c1017734720453dc87b58c385b987c5af5807151ff71a59000014586752e0": { - "describe": { - "columns": [ - { - "name": "key", - "ordinal": 0, - "type_info": "Bytea" - } - ], - "nullable": [ - false - ], - "parameters": { - "Left": [ - "Text", - "Text", - "Bytea" - ] - } - }, - "query": "INSERT INTO network_keys (package, interface, key) VALUES ($1, $2, $3) ON CONFLICT (package, interface) DO UPDATE SET package = EXCLUDED.package RETURNING key" - }, - "7b64f032d507e8ffe37c41f4c7ad514a66c421a11ab04c26d89a7aa8f6b67210": { - "describe": { - "columns": [ - { - "name": "id", - "ordinal": 0, - "type_info": "Int4" - }, - { - "name": "package_id", - "ordinal": 1, - "type_info": "Text" - }, - { - "name": "created_at", - "ordinal": 2, - "type_info": "Timestamp" - }, - { - "name": "code", - "ordinal": 3, - "type_info": "Int4" - }, - { - "name": "level", - "ordinal": 4, - "type_info": "Text" - }, - { - "name": "title", - "ordinal": 5, - "type_info": "Text" - }, - { - "name": "message", - "ordinal": 6, - "type_info": "Text" - }, - { - "name": "data", - "ordinal": 7, - "type_info": "Text" - } - ], - "nullable": [ - false, - true, - false, - false, - false, - false, - false, - true - ], - "parameters": { - "Left": [ - "Int4", - "Int8" - ] - } - }, - "query": "SELECT id, package_id, created_at, code, level, title, message, data FROM notifications WHERE id < $1 ORDER BY id DESC LIMIT $2" - }, - "7c7a3549c997eb75bf964ea65fbb98a73045adf618696cd838d79203ef5383fb": { - "describe": { - "columns": [], - "nullable": [], - "parameters": { - "Left": [ - "Text", - "Text", - "Text", - "Bytea", - "Text", - "Text" - ] - } - }, - "query": "\n INSERT INTO account (\n id,\n server_id,\n hostname,\n password,\n network_key,\n root_ca_key_pem,\n root_ca_cert_pem\n ) VALUES (\n 0, $1, $2, $3, $4, $5, $6\n ) ON CONFLICT (id) DO UPDATE SET\n server_id = EXCLUDED.server_id,\n hostname = EXCLUDED.hostname,\n password = EXCLUDED.password,\n network_key = EXCLUDED.network_key,\n root_ca_key_pem = EXCLUDED.root_ca_key_pem,\n root_ca_cert_pem = EXCLUDED.root_ca_cert_pem\n " - }, - "7e0649d839927e57fa03ee51a2c9f96a8bdb0fc97ee8a3c6df1069e1e2b98576": { - "describe": { - "columns": [], - "nullable": [], - "parameters": { - "Left": [ - "Text" - ] - } - }, - "query": "DELETE FROM tor WHERE package = $1" - }, - "8951b9126fbf60dbb5997241e11e3526b70bccf3e407327917294a993bc17ed5": { - "describe": { - "columns": [], - "nullable": [], - "parameters": { - "Left": [ - "Text", - "Text", - "Bytea" - ] - } - }, - "query": "INSERT INTO tor (package, interface, key) VALUES ($1, $2, $3) ON CONFLICT (package, interface) DO NOTHING" - }, - "94d471bb374b4965c6cbedf8c17bbf6bea226d38efaf6559923c79a36d5ca08c": { - "describe": { - "columns": [ - { - "name": "id", - "ordinal": 0, - "type_info": "Int4" - }, - { - "name": "package_id", - "ordinal": 1, - "type_info": "Text" - }, - { - "name": "created_at", - "ordinal": 2, - "type_info": "Timestamp" - }, - { - "name": "code", - "ordinal": 3, - "type_info": "Int4" - }, - { - "name": "level", - "ordinal": 4, - "type_info": "Text" - }, - { - "name": "title", - "ordinal": 5, - "type_info": "Text" - }, - { - "name": "message", - "ordinal": 6, - "type_info": "Text" - }, - { - "name": "data", - "ordinal": 7, - "type_info": "Text" - } - ], - "nullable": [ - false, - true, - false, - false, - false, - false, - false, - true - ], - "parameters": { - "Left": [ - "Int8" - ] - } - }, - "query": "SELECT id, package_id, created_at, code, level, title, message, data FROM notifications ORDER BY id DESC LIMIT $1" - }, - "95c4ab4c645f3302568c6ff13d85ab58252362694cf0f56999bf60194d20583a": { - "describe": { - "columns": [ - { - "name": "id", - "ordinal": 0, - "type_info": "Int4" - }, - { - "name": "hostname", - "ordinal": 1, - "type_info": "Text" - }, - { - "name": "path", - "ordinal": 2, - "type_info": "Text" - }, - { - "name": "username", - "ordinal": 3, - "type_info": "Text" - }, - { - "name": "password", - "ordinal": 4, - "type_info": "Text" - } - ], - "nullable": [ - false, - false, - false, - false, - true - ], - "parameters": { - "Left": [] - } - }, - "query": "SELECT id, hostname, path, username, password FROM cifs_shares" - }, - "a60d6e66719325b08dc4ecfacaf337527233c84eee758ac9be967906e5841d27": { - "describe": { - "columns": [], - "nullable": [], - "parameters": { - "Left": [ - "Int4" - ] - } - }, - "query": "DELETE FROM cifs_shares WHERE id = $1" - }, - "a6b0c8909a3a5d6d9156aebfb359424e6b5a1d1402e028219e21726f1ebd282e": { - "describe": { - "columns": [ - { - "name": "fingerprint", - "ordinal": 0, - "type_info": "Text" - }, - { - "name": "openssh_pubkey", - "ordinal": 1, - "type_info": "Text" - }, - { - "name": "created_at", - "ordinal": 2, - "type_info": "Text" - } - ], - "nullable": [ - false, - false, - false - ], - "parameters": { - "Left": [] - } - }, - "query": "SELECT fingerprint, openssh_pubkey, created_at FROM ssh_keys" - }, - "b1147beaaabbed89f2ab8c1e13ec4393a9a8fde2833cf096af766a979d94dee6": { - "describe": { - "columns": [], - "nullable": [], - "parameters": { - "Left": [ - "Text", - "Text", - "Text", - "Text", - "Int4" - ] - } - }, - "query": "UPDATE cifs_shares SET hostname = $1, path = $2, username = $3, password = $4 WHERE id = $5" - }, - "d5117054072476377f3c4f040ea429d4c9b2cf534e76f35c80a2bf60e8599cca": { - "describe": { - "columns": [ - { - "name": "openssh_pubkey", - "ordinal": 0, - "type_info": "Text" - } - ], - "nullable": [ - false - ], - "parameters": { - "Left": [] - } - }, - "query": "SELECT openssh_pubkey FROM ssh_keys" - }, - "da71f94b29798d1738d2b10b9a721ea72db8cfb362e7181c8226d9297507c62b": { - "describe": { - "columns": [], - "nullable": [], - "parameters": { - "Left": [ - "Text", - "Int4", - "Text", - "Text", - "Text", - "Text" - ] - } - }, - "query": "INSERT INTO notifications (package_id, code, level, title, message, data) VALUES ($1, $2, $3, $4, $5, $6)" - }, - "e185203cf84e43b801dfb23b4159e34aeaef1154dcd3d6811ab504915497ccf7": { - "describe": { - "columns": [], - "nullable": [], - "parameters": { - "Left": [ - "Int4" - ] - } - }, - "query": "DELETE FROM notifications WHERE id = $1" - }, - "e545696735f202f9d13cf22a561f3ff3f9aed7f90027a9ba97634bcb47d772f0": { - "describe": { - "columns": [ - { - "name": "tor_key", - "ordinal": 0, - "type_info": "Bytea" - } - ], - "nullable": [ - true - ], - "parameters": { - "Left": [] - } - }, - "query": "SELECT tor_key FROM account WHERE id = 0" - }, - "e5843c5b0e7819b29aa1abf2266799bd4f82e761837b526a0972c3d4439a264d": { - "describe": { - "columns": [], - "nullable": [], - "parameters": { - "Left": [ - "Text", - "Text", - "Text" - ] - } - }, - "query": "INSERT INTO session (id, user_agent, metadata) VALUES ($1, $2, $3)" - }, - "e95322a8e2ae3b93f1e974b24c0b81803f1e9ec9e8ebbf15cafddfc1c5a028ed": { - "describe": { - "columns": [ - { - "name": "package", - "ordinal": 0, - "type_info": "Text" - }, - { - "name": "interface", - "ordinal": 1, - "type_info": "Text" - }, - { - "name": "key", - "ordinal": 2, - "type_info": "Bytea" - }, - { - "name": "tor_key?", - "ordinal": 3, - "type_info": "Bytea" - } - ], - "nullable": [ - false, - false, - false, - false - ], - "parameters": { - "Left": [ - "Text" - ] - } - }, - "query": "\n SELECT\n network_keys.package,\n network_keys.interface,\n network_keys.key,\n tor.key AS \"tor_key?\"\n FROM\n network_keys\n LEFT JOIN\n tor\n ON\n network_keys.package = tor.package\n AND\n network_keys.interface = tor.interface\n WHERE\n network_keys.package = $1\n " - }, - "eb750adaa305bdbf3c5b70aaf59139c7b7569602adb58f2d6b3a94da4f167b0a": { - "describe": { - "columns": [], - "nullable": [], - "parameters": { - "Left": [ - "Int4" - ] - } - }, - "query": "DELETE FROM notifications WHERE id < $1" - }, - "ecc765d8205c0876956f95f76944ac6a5f34dd820c4073b7728c7067aab9fded": { - "describe": { - "columns": [ - { - "name": "id", - "ordinal": 0, - "type_info": "Int4" - } - ], - "nullable": [ - false - ], - "parameters": { - "Left": [ - "Text", - "Text", - "Text", - "Text" - ] - } - }, - "query": "INSERT INTO cifs_shares (hostname, path, username, password) VALUES ($1, $2, $3, $4) RETURNING id" - }, - "f6d1c5ef0f9d9577bea8382318967b9deb46da75788c7fe6082b43821c22d556": { - "describe": { - "columns": [], - "nullable": [], - "parameters": { - "Left": [ - "Text", - "Text", - "Text" - ] - } - }, - "query": "INSERT INTO ssh_keys (fingerprint, openssh_pubkey, created_at) VALUES ($1, $2, $3)" - }, - "f7d2dae84613bcef330f7403352cc96547f3f6dbec11bf2eadfaf53ad8ab51b5": { - "describe": { - "columns": [ - { - "name": "network_key", - "ordinal": 0, - "type_info": "Bytea" - } - ], - "nullable": [ - false - ], - "parameters": { - "Left": [] - } - }, - "query": "SELECT network_key FROM account WHERE id = 0" - }, - "fe6e4f09f3028e5b6b6259e86cbad285680ce157aae9d7837ac020c8b2945e7f": { - "describe": { - "columns": [ - { - "name": "id", - "ordinal": 0, - "type_info": "Int4" - }, - { - "name": "password", - "ordinal": 1, - "type_info": "Text" - }, - { - "name": "tor_key", - "ordinal": 2, - "type_info": "Bytea" - }, - { - "name": "server_id", - "ordinal": 3, - "type_info": "Text" - }, - { - "name": "hostname", - "ordinal": 4, - "type_info": "Text" - }, - { - "name": "network_key", - "ordinal": 5, - "type_info": "Bytea" - }, - { - "name": "root_ca_key_pem", - "ordinal": 6, - "type_info": "Text" - }, - { - "name": "root_ca_cert_pem", - "ordinal": 7, - "type_info": "Text" - } - ], - "nullable": [ - false, - false, - true, - true, - true, - false, - false, - false - ], - "parameters": { - "Left": [] - } - }, - "query": "SELECT * FROM account WHERE id = 0" - } -} \ No newline at end of file diff --git a/backend/src/account.rs b/backend/src/account.rs index daae7bee7..1f8d86e91 100644 --- a/backend/src/account.rs +++ b/backend/src/account.rs @@ -1,5 +1,5 @@ -use ed25519_dalek::{ExpandedSecretKey, SecretKey}; -use models::ResultExt; +use digest::Digest; +use ed25519_dalek::SecretKey; use openssl::pkey::{PKey, Private}; use openssl::x509::X509; use sqlx::PgExecutor; @@ -7,7 +7,8 @@ use sqlx::PgExecutor; use crate::hostname::{generate_hostname, generate_id, Hostname}; use crate::net::keys::Key; use crate::net::ssl::{generate_key, make_root_cert}; -use crate::Error; +use crate::prelude::*; +use crate::util::crypto::ed25519_expand_key; fn hash_password(password: &str) -> Result { argon2::hash_encoded( @@ -51,13 +52,23 @@ impl AccountInfo { let server_id = r.server_id.unwrap_or_else(generate_id); let hostname = r.hostname.map(Hostname).unwrap_or_else(generate_hostname); let password = r.password; - let network_key = SecretKey::from_bytes(&r.network_key)?; + let network_key = SecretKey::try_from(r.network_key).map_err(|e| { + Error::new( + eyre!("expected vec of len 32, got len {}", e.len()), + ErrorKind::ParseDbField, + ) + })?; let tor_key = if let Some(k) = &r.tor_key { - ExpandedSecretKey::from_bytes(k)? + <[u8; 64]>::try_from(&k[..]).map_err(|_| { + Error::new( + eyre!("expected vec of len 64, got len {}", k.len()), + ErrorKind::ParseDbField, + ) + })? } else { - ExpandedSecretKey::from(&network_key) + ed25519_expand_key(&network_key) }; - let key = Key::from_pair(None, network_key.to_bytes(), tor_key.to_bytes()); + let key = Key::from_pair(None, network_key, tor_key); let root_ca_key = PKey::private_key_from_pem(r.root_ca_key_pem.as_bytes())?; let root_ca_cert = X509::from_pem(r.root_ca_cert_pem.as_bytes())?; diff --git a/backend/src/auth.rs b/backend/src/auth.rs index 132c80ef8..823480fd3 100644 --- a/backend/src/auth.rs +++ b/backend/src/auth.rs @@ -160,7 +160,7 @@ pub async fn login( ) -> Result<(), Error> { let password = password.unwrap_or_default().decrypt(&ctx)?; let mut handle = ctx.secret_store.acquire().await?; - check_password_against_db(&mut handle, &password).await?; + check_password_against_db(handle.as_mut(), &password).await?; let hash_token = HashSessionToken::new(); let user_agent = req.headers.get("user-agent").and_then(|h| h.to_str().ok()); @@ -172,7 +172,7 @@ pub async fn login( user_agent, metadata, ) - .execute(&mut handle) + .execute(handle.as_mut()) .await?; res.headers.insert( "set-cookie", @@ -263,7 +263,7 @@ pub async fn list( sessions: sqlx::query!( "SELECT * FROM session WHERE logged_out IS NULL OR logged_out > CURRENT_TIMESTAMP" ) - .fetch_all(&mut ctx.secret_store.acquire().await?) + .fetch_all(ctx.secret_store.acquire().await?.as_mut()) .await? .into_iter() .map(|row| { diff --git a/backend/src/backup/backup_bulk.rs b/backend/src/backup/backup_bulk.rs index 84def92f5..21eedbaf2 100644 --- a/backend/src/backup/backup_bulk.rs +++ b/backend/src/backup/backup_bulk.rs @@ -63,9 +63,9 @@ pub async fn backup_all( .clone() .decrypt(&ctx)?; let password = password.decrypt(&ctx)?; - check_password_against_db(&mut ctx.secret_store.acquire().await?, &password).await?; + check_password_against_db(ctx.secret_store.acquire().await?.as_mut(), &password).await?; let fs = target_id - .load(&mut ctx.secret_store.acquire().await?) + .load(ctx.secret_store.acquire().await?.as_mut()) .await?; let mut backup_guard = BackupMountGuard::mount( TmpMountGuard::mount(&fs, ReadWrite).await?, diff --git a/backend/src/backup/restore.rs b/backend/src/backup/restore.rs index 0fc0b6224..46d0b9036 100644 --- a/backend/src/backup/restore.rs +++ b/backend/src/backup/restore.rs @@ -52,7 +52,7 @@ pub async fn restore_packages_rpc( #[arg] password: String, ) -> Result<(), Error> { let fs = target_id - .load(&mut ctx.secret_store.acquire().await?) + .load(ctx.secret_store.acquire().await?.as_mut()) .await?; let backup_guard = BackupMountGuard::mount(TmpMountGuard::mount(&fs, ReadWrite).await?, &password).await?; @@ -402,7 +402,7 @@ async fn restore_package<'a>( iface.to_string(), k, ) - .execute(&mut secrets_tx).await?; + .execute(secrets_tx.as_mut()).await?; } // DEPRECATED for (iface, key) in metadata.tor_keys { @@ -413,7 +413,7 @@ async fn restore_package<'a>( iface.to_string(), k, ) - .execute(&mut secrets_tx).await?; + .execute(secrets_tx.as_mut()).await?; } secrets_tx.commit().await?; drop(secrets); diff --git a/backend/src/backup/target/mod.rs b/backend/src/backup/target/mod.rs index 80c4a59c6..93e56c2d3 100644 --- a/backend/src/backup/target/mod.rs +++ b/backend/src/backup/target/mod.rs @@ -142,7 +142,7 @@ pub async fn list( let mut sql_handle = ctx.secret_store.acquire().await?; let (disks_res, cifs) = tokio::try_join!( crate::disk::util::list(&ctx.os_partitions), - cifs::list(&mut sql_handle), + cifs::list(sql_handle.as_mut()), )?; Ok(disks_res .into_iter() @@ -233,7 +233,7 @@ pub async fn info( let guard = BackupMountGuard::mount( TmpMountGuard::mount( &target_id - .load(&mut ctx.secret_store.acquire().await?) + .load(ctx.secret_store.acquire().await?.as_mut()) .await?, ReadWrite, ) @@ -271,7 +271,7 @@ pub async fn mount( TmpMountGuard::mount( &target_id .clone() - .load(&mut ctx.secret_store.acquire().await?) + .load(ctx.secret_store.acquire().await?.as_mut()) .await?, ReadWrite, ) diff --git a/backend/src/config/spec.rs b/backend/src/config/spec.rs index 6a5d96ef1..35512d47a 100644 --- a/backend/src/config/spec.rs +++ b/backend/src/config/spec.rs @@ -1894,10 +1894,11 @@ impl TorKeyPointer { )); } let key = Key::for_interface( - &mut secrets + secrets .acquire() .await - .map_err(|e| ConfigurationError::SystemError(e.into()))?, + .map_err(|e| ConfigurationError::SystemError(e.into()))? + .as_mut(), Some((self.package_id.clone(), self.interface.clone())), ) .await diff --git a/backend/src/context/cli.rs b/backend/src/context/cli.rs index 25adecdde..020b73459 100644 --- a/backend/src/context/cli.rs +++ b/backend/src/context/cli.rs @@ -6,8 +6,7 @@ use std::sync::Arc; use clap::ArgMatches; use color_eyre::eyre::eyre; -use cookie::Cookie; -use cookie_store::CookieStore; +use cookie_store::{CookieStore, RawCookie}; use josekit::jwk::Jwk; use reqwest::Proxy; use reqwest_cookie_store::CookieStoreMutex; @@ -111,7 +110,10 @@ impl CliContext { }; if let Ok(local) = std::fs::read_to_string(LOCAL_AUTH_COOKIE_PATH) { store - .insert_raw(&Cookie::new("local", local), &"http://localhost".parse()?) + .insert_raw( + &RawCookie::new("local", local), + &"http://localhost".parse()?, + ) .with_kind(crate::ErrorKind::Network)?; } store diff --git a/backend/src/context/rpc.rs b/backend/src/context/rpc.rs index e4fd66c97..abb122d6e 100644 --- a/backend/src/context/rpc.rs +++ b/backend/src/context/rpc.rs @@ -286,7 +286,12 @@ impl RpcContext { cleanup_failed(self, &package_id).await } PackageDataEntryMatchModelRef::Removing(_) => { - uninstall(self, &mut self.secret_store.acquire().await?, &package_id).await + uninstall( + self, + self.secret_store.acquire().await?.as_mut(), + &package_id, + ) + .await } PackageDataEntryMatchModelRef::Installed(m) => { let version = m.as_manifest().as_version().clone().de()?; diff --git a/backend/src/context/sdk.rs b/backend/src/context/sdk.rs index 87adaee1f..7ba7a6bfa 100644 --- a/backend/src/context/sdk.rs +++ b/backend/src/context/sdk.rs @@ -7,8 +7,8 @@ use rpc_toolkit::Context; use serde::Deserialize; use tracing::instrument; +use crate::prelude::*; use crate::util::config::{load_config_from_paths, local_config_path}; -use crate::{Error, ResultExt}; #[derive(Debug, Default, Deserialize)] #[serde(rename_all = "kebab-case")] @@ -50,21 +50,21 @@ impl SdkContext { } /// BLOCKING #[instrument(skip_all)] - pub fn developer_key(&self) -> Result { + pub fn developer_key(&self) -> Result { if !self.developer_key_path.exists() { - return Err(Error::new(eyre!("Developer Key does not exist! Please run `embassy-sdk init` before running this command."), crate::ErrorKind::Uninitialized)); + return Err(Error::new(eyre!("Developer Key does not exist! Please run `start-sdk init` before running this command."), crate::ErrorKind::Uninitialized)); } let pair = ::from_pkcs8_pem( &std::fs::read_to_string(&self.developer_key_path)?, ) .with_kind(crate::ErrorKind::Pem)?; - let secret = ed25519_dalek::SecretKey::from_bytes(&pair.secret_key[..])?; - let public = if let Some(public) = pair.public_key { - ed25519_dalek::PublicKey::from_bytes(&public[..])? - } else { - (&secret).into() - }; - Ok(ed25519_dalek::Keypair { secret, public }) + let secret = ed25519_dalek::SecretKey::try_from(&pair.secret_key[..]).map_err(|_| { + Error::new( + eyre!("pkcs8 key is of incorrect length"), + ErrorKind::OpenSsl, + ) + })?; + Ok(secret.into()) } } impl std::ops::Deref for SdkContext { diff --git a/backend/src/db/model.rs b/backend/src/db/model.rs index af6147ab6..86c9bbb42 100644 --- a/backend/src/db/model.rs +++ b/backend/src/db/model.rs @@ -423,7 +423,7 @@ pub struct InstalledPackageInfo { pub marketplace_url: Option, #[serde(default)] #[serde(with = "crate::util::serde::ed25519_pubkey")] - pub developer_key: ed25519_dalek::PublicKey, + pub developer_key: ed25519_dalek::VerifyingKey, pub manifest: Manifest, pub last_backup: Option>, pub dependency_info: BTreeMap, diff --git a/backend/src/developer/mod.rs b/backend/src/developer/mod.rs index 23d714875..8722a4a11 100644 --- a/backend/src/developer/mod.rs +++ b/backend/src/developer/mod.rs @@ -3,7 +3,8 @@ use std::io::Write; use std::path::Path; use ed25519::pkcs8::EncodePrivateKey; -use ed25519_dalek::Keypair; +use ed25519::PublicKeyBytes; +use ed25519_dalek::{SigningKey, VerifyingKey}; use rpc_toolkit::command; use tracing::instrument; @@ -21,11 +22,11 @@ pub fn init(#[context] ctx: SdkContext) -> Result<(), Error> { .with_ctx(|_| (crate::ErrorKind::Filesystem, parent.display().to_string()))?; } tracing::info!("Generating new developer key..."); - let keypair = Keypair::generate(&mut rand_old::thread_rng()); + let secret = SigningKey::generate(&mut rand::thread_rng()); tracing::info!("Writing key to {}", ctx.developer_key_path.display()); let keypair_bytes = ed25519::KeypairBytes { - secret_key: keypair.secret.to_bytes(), - public_key: Some(keypair.public.to_bytes()), + secret_key: secret.to_bytes(), + public_key: Some(PublicKeyBytes(VerifyingKey::from(&secret).to_bytes())), }; let mut dev_key_file = File::create(&ctx.developer_key_path)?; dev_key_file.write_all( diff --git a/backend/src/install/mod.rs b/backend/src/install/mod.rs index 744e14664..20f57764f 100644 --- a/backend/src/install/mod.rs +++ b/backend/src/install/mod.rs @@ -626,9 +626,10 @@ pub async fn uninstall( let return_id = id.clone(); tokio::spawn(async move { - if let Err(e) = - async { cleanup::uninstall(&ctx, &mut ctx.secret_store.acquire().await?, &id).await } - .await + if let Err(e) = async { + cleanup::uninstall(&ctx, ctx.secret_store.acquire().await?.as_mut(), &id).await + } + .await { let err_str = format!("Uninstall of {} Failed: {}", id, e); tracing::error!("{}", err_str); @@ -1030,7 +1031,7 @@ pub async fn install_s9pk( tracing::info!("Install {}@{}: Created volumes", pkg_id, version); tracing::info!("Install {}@{}: Installing interfaces", pkg_id, version); - let interface_addresses = manifest.interfaces.install(&mut sql_tx, pkg_id).await?; + let interface_addresses = manifest.interfaces.install(sql_tx.as_mut(), pkg_id).await?; tracing::info!( "Install {}@{}: Installed interfaces {:?}", pkg_id, diff --git a/backend/src/manager/mod.rs b/backend/src/manager/mod.rs index 8294ff586..cf4457b9f 100644 --- a/backend/src/manager/mod.rs +++ b/backend/src/manager/mod.rs @@ -759,7 +759,7 @@ async fn add_network_for_main( for (id, interface) in &seed.manifest.interfaces.0 { for (external, internal) in interface.lan_config.iter().flatten() { svc.add_lan( - &mut tx, + tx.as_mut(), id.clone(), external.0, internal.internal, @@ -768,13 +768,14 @@ async fn add_network_for_main( .await?; } for (external, internal) in interface.tor_config.iter().flat_map(|t| &t.port_mapping) { - svc.add_tor(&mut tx, id.clone(), external.0, internal.0) + svc.add_tor(tx.as_mut(), id.clone(), external.0, internal.0) .await?; } } for volume in seed.manifest.volumes.values() { if let Volume::Certificate { interface_id } = volume { - svc.export_cert(&mut tx, interface_id, ip.into()).await?; + svc.export_cert(tx.as_mut(), interface_id, ip.into()) + .await?; } } tx.commit().await?; diff --git a/backend/src/middleware/auth.rs b/backend/src/middleware/auth.rs index ecc07ffd6..611923ad6 100644 --- a/backend/src/middleware/auth.rs +++ b/backend/src/middleware/auth.rs @@ -47,7 +47,7 @@ impl HasLoggedOutSessions { "UPDATE session SET logged_out = CURRENT_TIMESTAMP WHERE id = $1", session ) - .execute(&mut sqlx_conn) + .execute(sqlx_conn.as_mut()) .await?; for socket in open_authed_websockets.remove(&session).unwrap_or_default() { let _ = socket.send(()); @@ -94,7 +94,7 @@ impl HasValidSession { pub async fn from_session(session: &HashSessionToken, ctx: &RpcContext) -> Result { let session_hash = session.hashed(); let session = sqlx::query!("UPDATE session SET last_active = CURRENT_TIMESTAMP WHERE id = $1 AND logged_out IS NULL OR logged_out > CURRENT_TIMESTAMP", session_hash) - .execute(&mut ctx.secret_store.acquire().await?) + .execute(ctx.secret_store.acquire().await?.as_mut()) .await?; if session.rows_affected() == 0 { return Err(Error::new( diff --git a/backend/src/middleware/encrypt.rs b/backend/src/middleware/encrypt.rs index 6eb8ed967..010197c49 100644 --- a/backend/src/middleware/encrypt.rs +++ b/backend/src/middleware/encrypt.rs @@ -13,7 +13,7 @@ pub fn pbkdf2(password: impl AsRef<[u8]>, salt: impl AsRef<[u8]>) -> CipherKey>(), diff --git a/backend/src/net/keys.rs b/backend/src/net/keys.rs index 50193e328..624f3bcc4 100644 --- a/backend/src/net/keys.rs +++ b/backend/src/net/keys.rs @@ -1,5 +1,4 @@ use color_eyre::eyre::eyre; -use ed25519_dalek::{ExpandedSecretKey, SecretKey}; use models::{Id, InterfaceId, PackageId}; use openssl::pkey::{PKey, Private}; use openssl::sha::Sha256; @@ -11,13 +10,14 @@ use torut::onion::{OnionAddressV3, TorSecretKeyV3}; use zeroize::Zeroize; use crate::net::ssl::CertPair; -use crate::Error; +use crate::prelude::*; +use crate::util::crypto::ed25519_expand_key; // TODO: delete once we may change tor addresses async fn compat( secrets: impl PgExecutor<'_>, interface: &Option<(PackageId, InterfaceId)>, -) -> Result, Error> { +) -> Result, Error> { if let Some((package, interface)) = interface { if let Some(r) = sqlx::query!( "SELECT key FROM tor WHERE package = $1 AND interface = $2", @@ -27,7 +27,12 @@ async fn compat( .fetch_optional(secrets) .await? { - Ok(Some(ExpandedSecretKey::from_bytes(&r.key)?)) + Ok(Some(<[u8; 64]>::try_from(r.key).map_err(|e| { + Error::new( + eyre!("expected vec of len 64, got len {}", e.len()), + ErrorKind::ParseDbField, + ) + })?)) } else { Ok(None) } @@ -36,7 +41,12 @@ async fn compat( .await? .tor_key { - Ok(Some(ExpandedSecretKey::from_bytes(&key)?)) + Ok(Some(<[u8; 64]>::try_from(key).map_err(|e| { + Error::new( + eyre!("expected vec of len 64, got len {}", e.len()), + ErrorKind::ParseDbField, + ) + })?)) } else { Ok(None) } @@ -62,10 +72,7 @@ impl Key { .unwrap_or_else(|| "embassy".to_owned()) } pub fn tor_key(&self) -> TorSecretKeyV3 { - ed25519_dalek::ExpandedSecretKey::from_bytes(&self.tor_key) - .unwrap() - .to_bytes() - .into() + self.tor_key.into() } pub fn tor_address(&self) -> OnionAddressV3 { self.tor_key().public().get_onion_address() @@ -85,7 +92,7 @@ impl Key { pub fn openssl_key_nistp256(&self) -> PKey { let mut buf = self.base; loop { - if let Ok(k) = p256::SecretKey::from_be_bytes(&buf) { + if let Ok(k) = p256::SecretKey::from_slice(&buf) { return PKey::private_key_from_pkcs8(&*k.to_pkcs8_der().unwrap().as_bytes()) .unwrap(); } @@ -109,11 +116,7 @@ impl Key { } } pub fn from_bytes(interface: Option<(PackageId, InterfaceId)>, bytes: [u8; 32]) -> Self { - Self::from_pair( - interface, - bytes, - ExpandedSecretKey::from(&SecretKey::from_bytes(&bytes).unwrap()).to_bytes(), - ) + Self::from_pair(interface, bytes, ed25519_expand_key(&bytes)) } pub fn new(interface: Option<(PackageId, InterfaceId)>) -> Self { Self::from_bytes(interface, rand::random()) @@ -222,7 +225,7 @@ impl Key { }; let mut res = Self::from_bytes(interface, actual); if let Some(tor_key) = compat(secrets, &res.interface).await? { - res.tor_key = tor_key.to_bytes(); + res.tor_key = tor_key; } Ok(res) } diff --git a/backend/src/registry/marketplace.rs b/backend/src/registry/marketplace.rs index 6c0bcb96a..435350240 100644 --- a/backend/src/registry/marketplace.rs +++ b/backend/src/registry/marketplace.rs @@ -1,3 +1,4 @@ +use base64::Engine; use color_eyre::eyre::eyre; use reqwest::{StatusCode, Url}; use rpc_toolkit::command; @@ -65,12 +66,11 @@ pub async fn get(#[context] ctx: RpcContext, #[arg] url: Url) -> Result Ok(Value::String(format!( "data:{};base64,{}", ctype, - base64::encode_config( + base64::engine::general_purpose::URL_SAFE.encode( &response .bytes() .await - .with_kind(crate::ErrorKind::Registry)?, - base64::URL_SAFE + .with_kind(crate::ErrorKind::Registry)? ) ))), _ => Err(Error::new( diff --git a/backend/src/s9pk/builder.rs b/backend/src/s9pk/builder.rs index 24869564f..199742439 100644 --- a/backend/src/s9pk/builder.rs +++ b/backend/src/s9pk/builder.rs @@ -1,4 +1,4 @@ -use sha2_old::{Digest, Sha512}; +use sha2::{Digest, Sha512}; use tokio::io::{AsyncReadExt, AsyncSeekExt, AsyncWriteExt, SeekFrom}; use tracing::instrument; use typed_builder::TypedBuilder; @@ -43,7 +43,7 @@ impl< { /// BLOCKING #[instrument(skip_all)] - pub async fn pack(mut self, key: &ed25519_dalek::Keypair) -> Result<(), Error> { + pub async fn pack(mut self, key: &ed25519_dalek::SigningKey) -> Result<(), Error> { let header_pos = self.writer.stream_position().await?; if header_pos != 0 { tracing::warn!("Appending to non-empty file."); @@ -132,7 +132,7 @@ impl< // header let (hash, _) = writer.finish(); self.writer.seek(SeekFrom::Start(header_pos)).await?; - header.pubkey = key.public.clone(); + header.pubkey = key.into(); header.signature = key.sign_prehashed(hash, Some(SIG_CONTEXT))?; header .serialize(&mut self.writer) diff --git a/backend/src/s9pk/header.rs b/backend/src/s9pk/header.rs index 9e8bfae7e..4f77ad855 100644 --- a/backend/src/s9pk/header.rs +++ b/backend/src/s9pk/header.rs @@ -1,7 +1,7 @@ use std::collections::BTreeMap; use color_eyre::eyre::eyre; -use ed25519_dalek::{PublicKey, Signature}; +use ed25519_dalek::{Signature, VerifyingKey}; use tokio::io::{AsyncRead, AsyncReadExt, AsyncWriteExt}; use crate::Error; @@ -11,15 +11,15 @@ pub const VERSION: u8 = 1; #[derive(Debug)] pub struct Header { - pub pubkey: PublicKey, + pub pubkey: VerifyingKey, pub signature: Signature, pub table_of_contents: TableOfContents, } impl Header { pub fn placeholder() -> Self { Header { - pubkey: PublicKey::default(), - signature: Signature::from_bytes(&[0; 64]).expect("Invalid ed25519 signature"), + pubkey: VerifyingKey::default(), + signature: Signature::from_bytes(&[0; 64]), table_of_contents: Default::default(), } } @@ -28,7 +28,7 @@ impl Header { writer.write_all(&MAGIC).await?; writer.write_all(&[VERSION]).await?; writer.write_all(self.pubkey.as_bytes()).await?; - writer.write_all(self.signature.as_ref()).await?; + writer.write_all(&self.signature.to_bytes()).await?; self.table_of_contents.serialize(writer).await?; Ok(()) } @@ -51,11 +51,11 @@ impl Header { } let mut pubkey_bytes = [0; 32]; reader.read_exact(&mut pubkey_bytes).await?; - let pubkey = PublicKey::from_bytes(&pubkey_bytes) + let pubkey = VerifyingKey::from_bytes(&pubkey_bytes) .map_err(|e| Error::new(e, crate::ErrorKind::ParseS9pk))?; let mut sig_bytes = [0; 64]; reader.read_exact(&mut sig_bytes).await?; - let signature = Signature::from_bytes(&sig_bytes).expect("Invalid ed25519 signature"); + let signature = Signature::from_bytes(&sig_bytes); let table_of_contents = TableOfContents::deserialize(reader).await?; Ok(Header { diff --git a/backend/src/s9pk/reader.rs b/backend/src/s9pk/reader.rs index 98ccb8fc1..a4e41a51e 100644 --- a/backend/src/s9pk/reader.rs +++ b/backend/src/s9pk/reader.rs @@ -7,11 +7,11 @@ use std::str::FromStr; use std::task::{Context, Poll}; use color_eyre::eyre::eyre; -use digest_old::Output; -use ed25519_dalek::PublicKey; +use digest::Output; +use ed25519_dalek::VerifyingKey; use futures::TryStreamExt; use models::ImageId; -use sha2_old::{Digest, Sha512}; +use sha2::{Digest, Sha512}; use tokio::fs::File; use tokio::io::{AsyncRead, AsyncReadExt, AsyncSeek, AsyncSeekExt, ReadBuf}; use tracing::instrument; @@ -147,7 +147,7 @@ impl FromStr for ImageTag { pub struct S9pkReader { hash: Option>, hash_string: Option, - developer_key: PublicKey, + developer_key: VerifyingKey, toc: TableOfContents, pos: u64, rdr: R, @@ -343,7 +343,7 @@ impl S9pkReader { self.hash_string.as_ref().map(|s| s.as_str()) } - pub fn developer_key(&self) -> &PublicKey { + pub fn developer_key(&self) -> &VerifyingKey { &self.developer_key } diff --git a/backend/src/setup.rs b/backend/src/setup.rs index e789aba26..f9e897d01 100644 --- a/backend/src/setup.rs +++ b/backend/src/setup.rs @@ -59,11 +59,11 @@ async fn setup_init( let mut secrets_handle = secret_store.acquire().await?; let mut secrets_tx = secrets_handle.begin().await?; - let mut account = AccountInfo::load(&mut secrets_tx).await?; + let mut account = AccountInfo::load(secrets_tx.as_mut()).await?; if let Some(password) = password { account.set_password(&password)?; - account.save(&mut secrets_tx).await?; + account.save(secrets_tx.as_mut()).await?; db.mutate(|m| { m.as_server_info_mut() .as_password_hash_mut() diff --git a/backend/src/util/crypto.rs b/backend/src/util/crypto.rs new file mode 100644 index 000000000..ba9f68599 --- /dev/null +++ b/backend/src/util/crypto.rs @@ -0,0 +1,13 @@ +use ed25519_dalek::hazmat::ExpandedSecretKey; +use ed25519_dalek::{SecretKey, EXPANDED_SECRET_KEY_LENGTH}; + +#[inline] +pub fn ed25519_expand_key(key: &SecretKey) -> [u8; EXPANDED_SECRET_KEY_LENGTH] { + let key = ExpandedSecretKey::from(key); + + let mut bytes: [u8; 64] = [0u8; 64]; + + bytes[..32].copy_from_slice(key.scalar.as_bytes()); + bytes[32..].copy_from_slice(&key.hash_prefix[..]); + bytes +} diff --git a/backend/src/util/io.rs b/backend/src/util/io.rs index a2fa84342..282a2db8e 100644 --- a/backend/src/util/io.rs +++ b/backend/src/util/io.rs @@ -143,7 +143,7 @@ where { let mut buffer = Vec::new(); reader.read_to_end(&mut buffer).await?; - serde_toml::from_slice(&buffer) + serde_toml::from_str(std::str::from_utf8(&buffer)?) .map_err(color_eyre::eyre::Error::from) .with_kind(crate::ErrorKind::Deserialization) } @@ -153,7 +153,9 @@ where T: serde::Serialize, W: AsyncWrite + Unpin, { - let mut buffer = serde_toml::to_vec(value).with_kind(crate::ErrorKind::Serialization)?; + let mut buffer = serde_toml::to_string(value) + .with_kind(crate::ErrorKind::Serialization)? + .into_bytes(); buffer.extend_from_slice(b"\n"); writer.write_all(&buffer).await?; Ok(()) diff --git a/backend/src/util/mod.rs b/backend/src/util/mod.rs index 7f2c62b5d..c6978802d 100644 --- a/backend/src/util/mod.rs +++ b/backend/src/util/mod.rs @@ -17,7 +17,7 @@ pub use helpers::NonDetachingJoinHandle; use lazy_static::lazy_static; pub use models::Version; use pin_project::pin_project; -use sha2_old::Digest; +use sha2::Digest; use tokio::fs::File; use tokio::sync::{Mutex, OwnedMutexGuard, RwLock}; use tracing::instrument; @@ -32,6 +32,7 @@ pub mod io; pub mod logger; pub mod lshw; pub mod serde; +pub mod crypto; #[derive(Clone, Copy, Debug, ::serde::Deserialize, ::serde::Serialize)] pub enum Never {} diff --git a/backend/src/util/serde.rs b/backend/src/util/serde.rs index 856923c09..4a6f7551b 100644 --- a/backend/src/util/serde.rs +++ b/backend/src/util/serde.rs @@ -97,20 +97,25 @@ pub fn serialize_display_opt( } pub mod ed25519_pubkey { - use ed25519_dalek::PublicKey; + use ed25519_dalek::VerifyingKey; use serde::de::{Error, Unexpected, Visitor}; use serde::{Deserializer, Serializer}; - pub fn serialize(pubkey: &PublicKey, serializer: S) -> Result { + pub fn serialize( + pubkey: &VerifyingKey, + serializer: S, + ) -> Result { serializer.serialize_str(&base32::encode( base32::Alphabet::RFC4648 { padding: true }, pubkey.as_bytes(), )) } - pub fn deserialize<'de, D: Deserializer<'de>>(deserializer: D) -> Result { + pub fn deserialize<'de, D: Deserializer<'de>>( + deserializer: D, + ) -> Result { struct PubkeyVisitor; impl<'de> Visitor<'de> for PubkeyVisitor { - type Value = ed25519_dalek::PublicKey; + type Value = ed25519_dalek::VerifyingKey; fn expecting(&self, formatter: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { write!(formatter, "an RFC4648 encoded string") } @@ -118,10 +123,13 @@ pub mod ed25519_pubkey { where E: Error, { - PublicKey::from_bytes( - &base32::decode(base32::Alphabet::RFC4648 { padding: true }, v).ok_or( - Error::invalid_value(Unexpected::Str(v), &"an RFC4648 encoded string"), - )?, + VerifyingKey::from_bytes( + &<[u8; 32]>::try_from( + base32::decode(base32::Alphabet::RFC4648 { padding: true }, v).ok_or( + Error::invalid_value(Unexpected::Str(v), &"an RFC4648 encoded string"), + )?, + ) + .map_err(|e| Error::invalid_length(e.len(), &"32 bytes"))?, ) .map_err(Error::custom) } @@ -312,11 +320,12 @@ impl IoFormat { .with_kind(crate::ErrorKind::Serialization), IoFormat::Toml => writer .write_all( - &serde_toml::to_vec( + serde_toml::to_string( &serde_toml::Value::try_from(value) .with_kind(crate::ErrorKind::Serialization)?, ) - .with_kind(crate::ErrorKind::Serialization)?, + .with_kind(crate::ErrorKind::Serialization)? + .as_bytes(), ) .with_kind(crate::ErrorKind::Serialization), IoFormat::TomlPretty => writer @@ -346,10 +355,11 @@ impl IoFormat { .with_kind(crate::ErrorKind::Serialization)?; Ok(res) } - IoFormat::Toml => serde_toml::to_vec( + IoFormat::Toml => serde_toml::to_string( &serde_toml::Value::try_from(value).with_kind(crate::ErrorKind::Serialization)?, ) - .with_kind(crate::ErrorKind::Serialization), + .with_kind(crate::ErrorKind::Serialization) + .map(|s| s.into_bytes()), IoFormat::TomlPretty => serde_toml::to_string_pretty( &serde_toml::Value::try_from(value).with_kind(crate::ErrorKind::Serialization)?, ) @@ -408,7 +418,8 @@ impl IoFormat { serde_cbor::de::from_reader(slice).with_kind(crate::ErrorKind::Deserialization) } IoFormat::Toml | IoFormat::TomlPretty => { - serde_toml::from_slice(slice).with_kind(crate::ErrorKind::Deserialization) + serde_toml::from_str(std::str::from_utf8(slice)?) + .with_kind(crate::ErrorKind::Deserialization) } } } diff --git a/backend/update-sqlx-data.sh b/backend/update-sqlx-data.sh index 46dc26a0e..1b00498a2 100755 --- a/backend/update-sqlx-data.sh +++ b/backend/update-sqlx-data.sh @@ -15,7 +15,7 @@ docker run -d --rm --name=tmp_postgres -e POSTGRES_PASSWORD=password -v $TMP_DIR PG_IP=$(docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' tmp_postgres) DATABASE_URL=postgres://postgres:password@$PG_IP/postgres cargo sqlx migrate run - DATABASE_URL=postgres://postgres:password@$PG_IP/postgres cargo sqlx prepare -- --lib --profile=test + DATABASE_URL=postgres://postgres:password@$PG_IP/postgres OS_ARCH=$(uname -m) cargo sqlx prepare -- --lib --profile=test ) docker stop tmp_postgres diff --git a/build/lib/depends b/build/lib/depends index 37ecddbca..263a7d65d 100644 --- a/build/lib/depends +++ b/build/lib/depends @@ -18,7 +18,9 @@ e2fsprogs ecryptfs-utils exfatprogs flashrom +gdb grub-common +heaptrack htop httpdirfs iotop diff --git a/build/lib/motd b/build/lib/motd old mode 100644 new mode 100755 diff --git a/build/lib/scripts/chroot-and-upgrade b/build/lib/scripts/chroot-and-upgrade index 355e8be1c..f95e49924 100755 --- a/build/lib/scripts/chroot-and-upgrade +++ b/build/lib/scripts/chroot-and-upgrade @@ -5,9 +5,10 @@ if [ "$UID" -ne 0 ]; then exit 1 fi -echo 'Syncing...' - -rsync -a --delete --force --info=progress2 /media/embassy/embassyfs/current/ /media/embassy/next +if [ -z "$NO_SYNC" ]; then + echo 'Syncing...' + rsync -a --delete --force --info=progress2 /media/embassy/embassyfs/current/ /media/embassy/next +fi mkdir -p /media/embassy/next/run mkdir -p /media/embassy/next/dev diff --git a/frontend/projects/ui/src/app/modals/os-welcome/os-welcome.page.html b/frontend/projects/ui/src/app/modals/os-welcome/os-welcome.page.html index cc1243011..ed05ccb45 100644 --- a/frontend/projects/ui/src/app/modals/os-welcome/os-welcome.page.html +++ b/frontend/projects/ui/src/app/modals/os-welcome/os-welcome.page.html @@ -35,6 +35,7 @@
  • Boost efficiency of service manager
  • Require HTTPS on LAN, and improve setup flow for trusting Root CA
  • Better default privacy settings for Firefox kiosk mode
  • +
  • Eliminate memory leak from Javascript runtime
  • Other small bug fixes
  • Update license to MIT
  • diff --git a/libs/Cargo.lock b/libs/Cargo.lock index af2585dbc..2e6259bb8 100644 --- a/libs/Cargo.lock +++ b/libs/Cargo.lock @@ -14,9 +14,9 @@ dependencies = [ [[package]] name = "addr2line" -version = "0.20.0" +version = "0.21.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f4fa78e18c64fce05e902adecd7a5eed15a5e0a3439f7b0e169f0252214865e3" +checksum = "8a30b2e23b9e17a9f90641c7ab1549cd9b44f296d3ccbf309d2863cfe398a0cb" dependencies = [ "gimli", ] @@ -27,17 +27,6 @@ version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" -[[package]] -name = "ahash" -version = "0.7.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fcb51a0695d8f838b1ee009b3fbf66bda078cd64590202a864a8f3e8c4315c47" -dependencies = [ - "getrandom 0.2.10", - "once_cell", - "version_check", -] - [[package]] name = "ahash" version = "0.8.3" @@ -52,9 +41,9 @@ dependencies = [ [[package]] name = "aho-corasick" -version = "1.0.2" +version = "1.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "43f6cb1bf222025340178f382c426f13757b2960e89779dfcb319c32542a5a41" +checksum = "b2969dcb958b36655471fc61f7e416fa76033bdd4bfed0678d8fee1e2d07a1f0" dependencies = [ "memchr", ] @@ -82,21 +71,21 @@ dependencies = [ [[package]] name = "anyhow" -version = "1.0.72" +version = "1.0.75" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3b13c32d80ecc7ab747b80c3784bce54ee8a7a0cc4fbda9bf4cda2cf6fe90854" +checksum = "a4668cab20f66d8d020e1fbc0ebe47217433c1b6c8f2040faf858554e394ace6" [[package]] name = "ast_node" -version = "0.9.4" +version = "0.9.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c704e2f6ee1a98223f5a7629a6ef0f3decb3b552ed282889dc957edff98ce1e6" +checksum = "c09c69dffe06d222d072c878c3afe86eee2179806f20503faec97250268b4c24" dependencies = [ "pmutil", "proc-macro2", "quote", "swc_macros_common", - "syn 1.0.109", + "syn 2.0.38", ] [[package]] @@ -129,25 +118,25 @@ checksum = "16e62a023e7c117e27523144c5d2459f4397fcc3cab0085af8e2224f643a0193" dependencies = [ "proc-macro2", "quote", - "syn 2.0.18", + "syn 2.0.38", ] [[package]] name = "async-trait" -version = "0.1.69" +version = "0.1.74" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b2d0f03b3640e3a630367e40c468cb7f309529c708ed1d88597047b0e7c6ef7" +checksum = "a66537f1bb974b254c98ed142ff995236e81b9d0fe4db0575f46612cb15eb0f9" dependencies = [ "proc-macro2", "quote", - "syn 2.0.18", + "syn 2.0.38", ] [[package]] name = "atoi" -version = "1.0.0" +version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d7c57d12312ff59c811c0643f4d80830505833c9ffaebd193d819392b265be8e" +checksum = "f28d99ec8bfea296261ca1af174f24225171fea9664ba9003cbebee704810528" dependencies = [ "num-traits", ] @@ -171,9 +160,9 @@ checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa" [[package]] name = "backtrace" -version = "0.3.68" +version = "0.3.69" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4319208da049c43661739c5fade2ba182f09d1dc2299b32298d3a31692b17e12" +checksum = "2089b7e3f35b9dd2d0ed921ead4f6d318c27680d4a5bd167b3ee120edb105837" dependencies = [ "addr2line", "cc", @@ -186,9 +175,9 @@ dependencies = [ [[package]] name = "base16ct" -version = "0.1.1" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "349a06037c7bf932dd7e7d1f653678b2038b9ad46a74102f1fc7bd7872678cce" +checksum = "4c7f02d4ea65f2c1853089ffd8d2787bdbc63de2f0d29dedbcf8ccdfa0ccd4cf" [[package]] name = "base32" @@ -204,9 +193,9 @@ checksum = "9e1b586273c5702936fe7b7d6896644d8be71e6314cfe09d3167c95f712589e8" [[package]] name = "base64" -version = "0.21.2" +version = "0.21.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "604178f6c5c21f02dc555784810edfb88d34ac2c73b2eae109655649ee73ce3d" +checksum = "9ba43ea6f343b788c8764558649e08df62f86c6ef251fdaeb1ffd010a9ae50a2" [[package]] name = "base64ct" @@ -240,9 +229,12 @@ checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" [[package]] name = "bitflags" -version = "2.3.3" +version = "2.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "630be753d4e58660abd17930c71b647fe46c27ea6b63cc59e1e3851406972e42" +checksum = "327762f6e5a765692301e5bb513e0d9fef63be86bbc14528052b1cd3e6f03e07" +dependencies = [ + "serde", +] [[package]] name = "bitmaps" @@ -289,27 +281,30 @@ checksum = "8d696c370c750c948ada61c69a0ee2cbbb9c50b1019ddb86d9317157a99c2cae" [[package]] name = "bumpalo" -version = "3.13.0" +version = "3.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a3e2c3daef883ecc1b5d58c15adae93470a91d425f3532ba1695849656af3fc1" +checksum = "7f30e7476521f6f8af1a1c4c0b8cc94f0bee37d91763d0ca2665f299b6cd8aec" [[package]] name = "byteorder" -version = "1.4.3" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "14c189c53d098945499cdfa7ecc63567cf3886b3332b312a5b4585d8d3a6a610" +checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" [[package]] name = "bytes" -version = "1.4.0" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "89b2fd2a0dcf38d7971e2194b6b6eebab45ae01067456a7fd93d5547a61b70be" +checksum = "a2bd12c1caf447e69cd4528f47f94d203fd2582878ecb9e9465484c4148a8223" [[package]] name = "cc" -version = "1.0.79" +version = "1.0.83" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "50d30906286121d95be3d479533b458f87493b30a4b5f79a607db8f5d11aa91f" +checksum = "f1174fb0b6ec23863f8b971027804a42614e347eafb0a95bf0b12cdae21fc4d0" +dependencies = [ + "libc", +] [[package]] name = "cfg-if" @@ -319,14 +314,24 @@ checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" [[package]] name = "chrono" -version = "0.4.26" +version = "0.4.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec837a71355b28f6556dbd569b37b3f363091c0bd4b2e735674521b4c5fd9bc5" +checksum = "7f2c685bad3eb3d45a01354cedb7d5faa66194d1d58ba6e267a8de788f79db38" dependencies = [ "android-tzdata", "iana-time-zone", "num-traits", - "winapi", + "windows-targets 0.48.5", +] + +[[package]] +name = "cipher" +version = "0.4.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "773f3b9af64447d2ce9850330c473515014aa235e6a783b02db81ff39e4a3dad" +dependencies = [ + "crypto-common", + "inout", ] [[package]] @@ -382,18 +387,18 @@ dependencies = [ [[package]] name = "concurrent-queue" -version = "2.2.0" +version = "2.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "62ec6771ecfa0762d24683ee5a32ad78487a3d3afdc0fb8cae19d2c5deb50b7c" +checksum = "f057a694a54f12365049b0958a1685bb52d567f5593b355fbf685838e873d400" dependencies = [ "crossbeam-utils", ] [[package]] name = "const-oid" -version = "0.9.4" +version = "0.9.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "795bc6e66a8e340f075fcf6227e417a2dc976b92b91f3cdc778bb858778b6747" +checksum = "28c122c3980598d243d63d9a704629a2d748d101f278052ff068be5a4423ab6f" [[package]] name = "convert_case" @@ -471,9 +476,9 @@ dependencies = [ [[package]] name = "crypto-bigint" -version = "0.4.9" +version = "0.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ef2b4b23cddf68b89b8f8069890e8c270d54e2d5fe1b143820234805e4cb17ef" +checksum = "740fe28e594155f10cfc383984cbefd529d7396050557148f79cb0f621204124" dependencies = [ "generic-array", "rand_core 0.6.4", @@ -515,16 +520,44 @@ dependencies = [ ] [[package]] -name = "dashmap" -version = "5.5.0" +name = "curve25519-dalek" +version = "4.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6943ae99c34386c84a470c499d3414f66502a41340aa895406e0d2e4a207b91d" +checksum = "e89b8c6a2e4b1f45971ad09761aafb85514a84744b67a95e32c3cc1352d1f65c" dependencies = [ "cfg-if", - "hashbrown 0.14.0", + "cpufeatures", + "curve25519-dalek-derive", + "digest 0.10.7", + "fiat-crypto", + "platforms", + "rustc_version 0.4.0", + "subtle", + "zeroize", +] + +[[package]] +name = "curve25519-dalek-derive" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "83fdaf97f4804dcebfa5862639bc9ce4121e82140bec2a987ac5140294865b5b" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.38", +] + +[[package]] +name = "dashmap" +version = "5.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "978747c1d849a7d2ee5e8adc0159961c48fb7e5db2f06af6723b80123bb53856" +dependencies = [ + "cfg-if", + "hashbrown 0.14.1", "lock_api", "once_cell", - "parking_lot_core 0.9.8", + "parking_lot_core", ] [[package]] @@ -535,9 +568,19 @@ checksum = "c2e66c9d817f1720209181c316d28635c050fa304f9c79e47a520882661b7308" [[package]] name = "data-url" -version = "0.2.0" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8d7439c3735f405729d52c3fbbe4de140eaf938a1fe47d227c27f8254d4302a5" +checksum = "41b319d1b62ffbd002e057f36bebd1f42b9f97927c9577461d855f3513c4289f" + +[[package]] +name = "debugid" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bef552e6f588e446098f6ba40d89ac146c8c7b64aade83c051ee00bb5d2bc18d" +dependencies = [ + "serde", + "uuid", +] [[package]] name = "deno-proc-macro-rules" @@ -547,7 +590,7 @@ checksum = "3c65c2ffdafc1564565200967edc4851c7b55422d3913466688907efd05ea26f" dependencies = [ "deno-proc-macro-rules-macros", "proc-macro2", - "syn 2.0.18", + "syn 2.0.38", ] [[package]] @@ -559,14 +602,14 @@ dependencies = [ "once_cell", "proc-macro2", "quote", - "syn 2.0.18", + "syn 2.0.38", ] [[package]] name = "deno_ast" -version = "0.27.2" +version = "0.29.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a39dc5554b1c835c62914b545f8b378563a997521e39a8f03450b37b216143ef" +checksum = "8a8adb6aeb787db71d015d8e9f63f6e004eeb09c86babb4ded00878be18619b1" dependencies = [ "anyhow", "base64 0.13.1", @@ -600,25 +643,26 @@ dependencies = [ [[package]] name = "deno_core" -version = "0.195.0" +version = "0.222.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "408e433386de30dd501cf82d26ca1fb4cd84b055536f8f6f9c78c3380649d94b" +checksum = "b13c81b9ea8462680e7b77088a44fc36390bab3dbfa5a205a285e11b64e0919c" dependencies = [ "anyhow", "bytes", "deno_ops", + "deno_unsync", "futures", - "indexmap 1.9.3", + "indexmap 2.0.2", "libc", "log", "once_cell", - "parking_lot 0.12.1", + "parking_lot", "pin-project", "serde", "serde_json", "serde_v8", "smallvec", - "sourcemap", + "sourcemap 7.0.0", "tokio", "url", "v8", @@ -626,9 +670,9 @@ dependencies = [ [[package]] name = "deno_media_type" -version = "0.1.0" +version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "63772a60d740a41d97fbffb4788fc3779e6df47289e01892c12be38f4a5beded" +checksum = "a798670c20308e5770cc0775de821424ff9e85665b602928509c8c70430b3ee0" dependencies = [ "data-url", "serde", @@ -637,9 +681,9 @@ dependencies = [ [[package]] name = "deno_ops" -version = "0.73.0" +version = "0.98.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c6d06feb9b26ccd2997f35610517d5a8f1dd423e21364509523f72474601f87f" +checksum = "bf89da1a3e50ff7c89956495b53d9bcad29e1f1b3f3d2bc54cad7155f55419c4" dependencies = [ "deno-proc-macro-rules", "lazy-regex", @@ -651,17 +695,24 @@ dependencies = [ "regex", "strum", "strum_macros", - "syn 1.0.109", - "syn 2.0.18", + "syn 2.0.38", "thiserror", - "v8", +] + +[[package]] +name = "deno_unsync" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8a8f3722afd50e566ecfc783cc8a3a046bc4dd5eb45007431dfb2776aeb8993" +dependencies = [ + "tokio", ] [[package]] name = "der" -version = "0.6.1" +version = "0.7.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f1a467a65c5e759bce6e65eaf91cc29f466cdc57cb65777bd646872a8a1fd4de" +checksum = "fffa369a668c8af7dbf8b5e56c9f744fbd399949ed171606040001947de40b1c" dependencies = [ "const-oid", "pem-rfc7468", @@ -702,26 +753,6 @@ dependencies = [ "subtle", ] -[[package]] -name = "dirs" -version = "4.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ca3aa72a6f96ea37bbc5aa912f6788242832f75369bdfdadcb0e38423f100059" -dependencies = [ - "dirs-sys", -] - -[[package]] -name = "dirs-sys" -version = "0.3.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1b1d1d91c932ef41c0f2663aa8b0ca0342d444d842c06914aa0a7e352d0bada6" -dependencies = [ - "libc", - "redox_users", - "winapi", -] - [[package]] name = "dotenvy" version = "0.15.7" @@ -730,9 +761,9 @@ checksum = "1aaf95b3e5c8f23aa320147307562d361db0ae0d51242340f558153b4eb2439b" [[package]] name = "dprint-swc-ext" -version = "0.10.0" +version = "0.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dd4dda8a1b920e8be367aeaad035753d21bb69b3c50515afb41ab1eefbb886b5" +checksum = "6a0a2492465344a58a37ae119de59e81fe5a2885f2711c7b5048ef0dfa14ce42" dependencies = [ "bumpalo", "num-bigint", @@ -746,14 +777,16 @@ dependencies = [ [[package]] name = "ecdsa" -version = "0.14.8" +version = "0.16.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "413301934810f597c1d19ca71c8710e99a3f1ba28a0d2ebc01551a2daeea3c5c" +checksum = "a4b1e0c257a9e9f25f90ff76d7a68360ed497ee519c8e428d1825ef0000799d4" dependencies = [ "der", + "digest 0.10.7", "elliptic-curve", "rfc6979", - "signature", + "signature 2.1.0", + "spki", ] [[package]] @@ -762,8 +795,18 @@ version = "1.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "91cff35c70bba8a626e3185d8cd48cc11b5437e1a5bcd15b9b5fa3c64b6dfee7" dependencies = [ + "signature 1.6.4", +] + +[[package]] +name = "ed25519" +version = "2.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "115531babc129696a58c64a4fef0a8bf9e9698629fb97e9e40767d235cfbcd53" +dependencies = [ + "pkcs8", "serde", - "signature", + "signature 2.1.0", ] [[package]] @@ -772,37 +815,49 @@ version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c762bae6dcaf24c4c84667b8579785430908723d5c889f469d76a41d59cc7a9d" dependencies = [ - "curve25519-dalek", - "ed25519", + "curve25519-dalek 3.2.0", + "ed25519 1.5.3", "rand 0.7.3", "serde", - "serde_bytes", "sha2 0.9.9", "zeroize", ] [[package]] -name = "either" -version = "1.8.1" +name = "ed25519-dalek" +version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7fcaabb2fef8c910e7f4c7ce9f67a1283a1715879a7c230ca9d6d1ae31f16d91" +checksum = "7277392b266383ef8396db7fdeb1e77b6c52fed775f5df15bb24f35b72156980" +dependencies = [ + "curve25519-dalek 4.1.1", + "ed25519 2.2.3", + "serde", + "sha2 0.10.8", + "zeroize", +] + +[[package]] +name = "either" +version = "1.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a26ae43d7bcc3b814de94796a5e736d4029efb0ee900c12e2d54c993ad1a1e07" dependencies = [ "serde", ] [[package]] name = "elliptic-curve" -version = "0.12.3" +version = "0.13.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e7bb888ab5300a19b8e5bceef25ac745ad065f3c9f7efc6de1b91958110891d3" +checksum = "d97ca172ae9dc9f9b779a6e3a65d308f2af74e5b8c921299075bdb4a0370e914" dependencies = [ "base16ct", "crypto-bigint", - "der", "digest 0.10.7", "ff", "generic-array", "group", + "pkcs8", "rand_core 0.6.4", "sec1", "subtle", @@ -818,7 +873,7 @@ dependencies = [ "futures", "helpers", "imbl", - "nix 0.25.1", + "nix 0.27.1", "procfs", "serde", "serde_json", @@ -844,9 +899,9 @@ dependencies = [ [[package]] name = "encoding_rs" -version = "0.8.32" +version = "0.8.33" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "071a31f4ee85403370b58aca746f01041ede6f0da2730960ad001edc2b71b394" +checksum = "7268b386296a025e474d5140678f75d6de9493ae55a5d709eeb9dd08149945e1" dependencies = [ "cfg-if", ] @@ -859,23 +914,23 @@ checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5" [[package]] name = "errno" -version = "0.3.1" +version = "0.3.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4bcfec3a70f97c962c307b2d2c56e358cf1d00b558d74262b5f929ee8cc7e73a" +checksum = "ac3e13f66a2f95e32a39eaa81f6b95d42878ca0e1db0c7543723dfe12557e860" dependencies = [ - "errno-dragonfly", "libc", "windows-sys 0.48.0", ] [[package]] -name = "errno-dragonfly" -version = "0.1.2" +name = "etcetera" +version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aa68f1b12764fab894d2755d2518754e71b4fd80ecfb822714a1206c2aab39bf" +checksum = "136d1b5283a1ab77bd9257427ffd09d8667ced0570b6f938942bc7568ed5b943" dependencies = [ - "cc", - "libc", + "cfg-if", + "home", + "windows-sys 0.48.0", ] [[package]] @@ -896,12 +951,9 @@ dependencies = [ [[package]] name = "fastrand" -version = "1.9.0" +version = "2.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e51093e27b0797c359783294ca4f0a911c270184cb10f85783b118614a1501be" -dependencies = [ - "instant", -] +checksum = "25cbce373ec4653f1a01a31e8a5e5ec0c622dc27ff9c4e6606eefef5cbbed4a5" [[package]] name = "fd-lock-rs" @@ -914,24 +966,47 @@ dependencies = [ [[package]] name = "ff" -version = "0.12.1" +version = "0.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d013fc25338cc558c5c2cfbad646908fb23591e2404481826742b651c9af7160" +checksum = "ded41244b729663b1e574f1b4fb731469f69f79c17667b5d776b16cda0479449" dependencies = [ "rand_core 0.6.4", "subtle", ] [[package]] -name = "flate2" -version = "1.0.26" +name = "fiat-crypto" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3b9429470923de8e8cbd4d2dc513535400b4b3fef0319fb5c4e1f520a7bef743" +checksum = "d0870c84016d4b481be5c9f323c24f65e31e901ae618f0e80f4308fb00de1d2d" + +[[package]] +name = "finl_unicode" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8fcfdc7a0362c9f4444381a9e697c79d435fe65b52a37466fc2c1184cee9edc6" + +[[package]] +name = "flate2" +version = "1.0.28" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "46303f565772937ffe1d394a4fac6f411c6013172fadde9dcdb1e147a086940e" dependencies = [ "crc32fast", "miniz_oxide", ] +[[package]] +name = "flume" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "55ac459de2512911e4b674ce33cf20befaba382d05b62b008afc1c8b57cbf181" +dependencies = [ + "futures-core", + "futures-sink", + "spin 0.9.8", +] + [[package]] name = "fnv" version = "1.0.7" @@ -973,14 +1048,14 @@ dependencies = [ [[package]] name = "from_variant" -version = "0.1.5" +version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d449976075322384507443937df2f1d5577afbf4282f12a5a66ef29fa3e6307" +checksum = "03ec5dc38ee19078d84a692b1c41181ff9f94331c76cee66ff0208c770b5e54f" dependencies = [ "pmutil", "proc-macro2", "swc_macros_common", - "syn 1.0.109", + "syn 2.0.38", ] [[package]] @@ -1043,13 +1118,13 @@ dependencies = [ [[package]] name = "futures-intrusive" -version = "0.4.2" +version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a604f7a68fbf8103337523b1fadc8ade7361ee3f112f7c680ad179651616aed5" +checksum = "1d930c203dd0b6ff06e0201a4a2fe9149b43c684fd4420555b26d21b1a02956f" dependencies = [ "futures-core", "lock_api", - "parking_lot 0.11.2", + "parking_lot", ] [[package]] @@ -1066,7 +1141,7 @@ checksum = "89ca545a94061b6365f2c7355b4b32bd20df3ff95f02da9329b34ccc3bd6ee72" dependencies = [ "proc-macro2", "quote", - "syn 2.0.18", + "syn 2.0.38", ] [[package]] @@ -1107,6 +1182,7 @@ checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a" dependencies = [ "typenum", "version_check", + "zeroize", ] [[package]] @@ -1133,15 +1209,15 @@ dependencies = [ [[package]] name = "gimli" -version = "0.27.3" +version = "0.28.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6c80984affa11d98d1b88b66ac8853f143217b399d3c74116778ff8fdb4ed2e" +checksum = "6fb8d784f27acf97159b40fc4db5ecd8aa23b9ad5ef69cdd136d3bc80665f0c0" [[package]] name = "group" -version = "0.12.1" +version = "0.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5dfbfb3a6cfbd390d5c9564ab283a0349b9b9fcd46a706c1eb10e0db70bfbac7" +checksum = "f0f9ef7462f7c099f518d754361858f86d8a07af53ba9af0fe635bbccb151a63" dependencies = [ "ff", "rand_core 0.6.4", @@ -1150,9 +1226,9 @@ dependencies = [ [[package]] name = "h2" -version = "0.3.20" +version = "0.3.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "97ec8491ebaf99c8eaa73058b045fe58073cd6be7f596ac993ced0b0a0c01049" +checksum = "91fc23aa11be92976ef4729127f1a74adf36d8436f7816b185d18df956790833" dependencies = [ "bytes", "fnv", @@ -1185,26 +1261,26 @@ version = "0.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "43a3c133739dddd0d2990f9a4bdf8eb4b21ef50e4851ca85ab661199821d510e" dependencies = [ - "ahash 0.8.3", + "ahash", ] [[package]] name = "hashbrown" -version = "0.14.0" +version = "0.14.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2c6201b9ff9fd90a5a3bac2e56a830d0caa509576f0e503818ee82c181b3437a" +checksum = "7dfda62a12f55daeae5015f81b0baea145391cb4520f86c248fc615d72640d12" dependencies = [ - "ahash 0.8.3", + "ahash", "allocator-api2", ] [[package]] name = "hashlink" -version = "0.8.3" +version = "0.8.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "312f66718a2d7789ffef4f4b7b213138ed9f1eb3aa1d0d82fc99f88fb3ffd26f" +checksum = "e8094feaf31ff591f651a2664fb9cfd92bba7a60ce3197265e9482ebe753c8f7" dependencies = [ - "hashbrown 0.14.0", + "hashbrown 0.14.1", ] [[package]] @@ -1244,9 +1320,9 @@ dependencies = [ [[package]] name = "hermit-abi" -version = "0.3.2" +version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "443144c8cdadd93ebf52ddb4056d257f5b52c04d3c804e657d19eb73fc33668b" +checksum = "d77f7ec81a6d05a3abb01ab6eb7590f6083d08449fe5a1c8b1e620283546ccb7" [[package]] name = "hex" @@ -1282,6 +1358,15 @@ dependencies = [ "digest 0.10.7", ] +[[package]] +name = "home" +version = "0.5.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5444c27eef6923071f7ebcc33e3444508466a76f7a2b93da00ed6e19f30c1ddb" +dependencies = [ + "windows-sys 0.48.0", +] + [[package]] name = "http" version = "0.2.9" @@ -1312,9 +1397,9 @@ checksum = "d897f394bad6a705d5f4104762e116a75639e470d80901eed05a860a95cb1904" [[package]] name = "httpdate" -version = "1.0.2" +version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c4a1e36c821dbe04574f602848a19f742f4fb3c98d40449f11bcad18d6b17421" +checksum = "df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9" [[package]] name = "hyper" @@ -1333,7 +1418,7 @@ dependencies = [ "httpdate", "itoa", "pin-project-lite", - "socket2", + "socket2 0.4.9", "tokio", "tower-service", "tracing", @@ -1355,16 +1440,16 @@ dependencies = [ [[package]] name = "iana-time-zone" -version = "0.1.57" +version = "0.1.58" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2fad5b825842d2b38bd206f3e81d6957625fd7f0a361e345c30e01a0ae2dd613" +checksum = "8326b86b6cff230b97d0d312a6c40a60726df3332e721f72a1b035f451663b20" dependencies = [ "android_system_properties", "core-foundation-sys", "iana-time-zone-haiku", "js-sys", "wasm-bindgen", - "windows", + "windows-core", ] [[package]] @@ -1394,9 +1479,9 @@ checksum = "cb56e1aa765b4b4f3aadfab769793b7087bb03a4ea4920644a6d238e2df5b9ed" [[package]] name = "imbl" -version = "2.0.0" +version = "2.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c2806b69cd9f4664844027b64465eacb444c67c1db9c778e341adff0c25cdb0d" +checksum = "85b4555023847ca2cd6fd11f20b553886e6981c7e8aee9b3e7e960b4b17fb440" dependencies = [ "bitmaps", "imbl-sized-chunks", @@ -1445,21 +1530,21 @@ dependencies = [ [[package]] name = "indexmap" -version = "2.0.0" +version = "2.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d5477fe2230a79769d8dc68e0eabf5437907c0457a5614a9e8dddb67f65eb65d" +checksum = "8adf3ddd720272c6ea8bf59463c04e0f93d0bbf7c5439b691bca2987e0270897" dependencies = [ "equivalent", - "hashbrown 0.14.0", + "hashbrown 0.14.1", ] [[package]] -name = "instant" -version = "0.1.12" +name = "inout" +version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a5bbe824c507c5da5956355e86a746d82e0e1464f65d862cc5e71da70e94b2c" +checksum = "a0c10553d664a4d0bcff9f4215d0aac67a639cc68ef660840afe309b807bc9f5" dependencies = [ - "cfg-if", + "generic-array", ] [[package]] @@ -1468,7 +1553,7 @@ version = "1.0.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "eae7b9aee968036d54dce06cebaefd919e4472e753296daccd6d344e3e2df0c2" dependencies = [ - "hermit-abi 0.3.2", + "hermit-abi 0.3.3", "libc", "windows-sys 0.48.0", ] @@ -1481,15 +1566,15 @@ checksum = "28b29a3cd74f0f4598934efe3aeba42bae0eb4680554128851ebbecb02af14e6" [[package]] name = "is-macro" -version = "0.2.2" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a7d079e129b77477a49c5c4f1cfe9ce6c2c909ef52520693e8e811a714c7b20" +checksum = "f4467ed1321b310c2625c5aa6c1b1ffc5de4d9e42668cf697a08fb033ee8265e" dependencies = [ "Inflector", "pmutil", "proc-macro2", "quote", - "syn 1.0.109", + "syn 2.0.38", ] [[package]] @@ -1503,9 +1588,9 @@ dependencies = [ [[package]] name = "itertools" -version = "0.10.5" +version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b0fd2260e829bddf4cb6ea802289de2f86d6a7a690192fbe91b3f46e0f2c8473" +checksum = "b1c173a5686ce8bfa551b3563d0c2170bf24ca44da99c7ca4bfdab5418c3fe57" dependencies = [ "either", ] @@ -1535,13 +1620,13 @@ dependencies = [ "deno_core", "embassy_container_init", "helpers", - "itertools 0.10.5", + "itertools 0.11.0", "lazy_static", "models", "reqwest", "serde", "serde_json", - "sha2 0.10.7", + "sha2 0.10.8", "tokio", "tracing", ] @@ -1577,9 +1662,9 @@ dependencies = [ [[package]] name = "lazy-regex" -version = "2.5.0" +version = "3.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ff63c423c68ea6814b7da9e88ce585f793c87ddd9e78f646970891769c8235d4" +checksum = "e723bd417b2df60a0f6a2b6825f297ea04b245d4ba52b5a22cb679bdf58b05fa" dependencies = [ "lazy-regex-proc_macros", "once_cell", @@ -1588,14 +1673,14 @@ dependencies = [ [[package]] name = "lazy-regex-proc_macros" -version = "2.4.1" +version = "3.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8edfc11b8f56ce85e207e62ea21557cfa09bb24a8f6b04ae181b086ff8611c22" +checksum = "0f0a1d9139f0ee2e862e08a9c5d0ba0470f2aa21cd1e1aa1b1562f83116c725f" dependencies = [ "proc-macro2", "quote", "regex", - "syn 1.0.109", + "syn 2.0.38", ] [[package]] @@ -1614,93 +1699,31 @@ version = "1.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" dependencies = [ - "spin", -] - -[[package]] -name = "lexical" -version = "6.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c7aefb36fd43fef7003334742cbf77b243fcd36418a1d1bdd480d613a67968f6" -dependencies = [ - "lexical-core", -] - -[[package]] -name = "lexical-core" -version = "0.8.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2cde5de06e8d4c2faabc400238f9ae1c74d5412d03a7bd067645ccbc47070e46" -dependencies = [ - "lexical-parse-float", - "lexical-parse-integer", - "lexical-util", - "lexical-write-float", - "lexical-write-integer", -] - -[[package]] -name = "lexical-parse-float" -version = "0.8.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "683b3a5ebd0130b8fb52ba0bdc718cc56815b6a097e28ae5a6997d0ad17dc05f" -dependencies = [ - "lexical-parse-integer", - "lexical-util", - "static_assertions", -] - -[[package]] -name = "lexical-parse-integer" -version = "0.8.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6d0994485ed0c312f6d965766754ea177d07f9c00c9b82a5ee62ed5b47945ee9" -dependencies = [ - "lexical-util", - "static_assertions", -] - -[[package]] -name = "lexical-util" -version = "0.8.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5255b9ff16ff898710eb9eb63cb39248ea8a5bb036bea8085b1a767ff6c4e3fc" -dependencies = [ - "static_assertions", -] - -[[package]] -name = "lexical-write-float" -version = "0.8.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "accabaa1c4581f05a3923d1b4cfd124c329352288b7b9da09e766b0668116862" -dependencies = [ - "lexical-util", - "lexical-write-integer", - "static_assertions", -] - -[[package]] -name = "lexical-write-integer" -version = "0.8.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e1b6f3d1f4422866b68192d62f77bc5c700bee84f3069f2469d7bc8c77852446" -dependencies = [ - "lexical-util", - "static_assertions", + "spin 0.5.2", ] [[package]] name = "libc" -version = "0.2.147" +version = "0.2.149" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b4668fb0ea861c1df094127ac5f1da3409a82116a4ba74fca2e58ef927159bb3" +checksum = "a08173bc88b7955d1b3145aa561539096c421ac8debde8cbc3612ec635fee29b" [[package]] name = "libm" -version = "0.2.7" +version = "0.2.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f7012b1bbb0719e1097c47611d3898568c546d597c2e74d66f6087edd5233ff4" +checksum = "4ec2a862134d2a7d32d7983ddcdd1c4923530833c9f2ea1a44fc5fa473989058" + +[[package]] +name = "libsqlite3-sys" +version = "0.26.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "afc22eff61b133b115c6e8c74e818c628d6d5e7a502afea6f64dee076dd94326" +dependencies = [ + "cc", + "pkg-config", + "vcpkg", +] [[package]] name = "linux-raw-sys" @@ -1710,9 +1733,9 @@ checksum = "f051f77a7c8e6957c0696eac88f26b0117e54f52d3fc682ab19397a8812846a4" [[package]] name = "linux-raw-sys" -version = "0.3.8" +version = "0.4.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ef53942eb7bf7ff43a617b3e2c1c4a5ecf5944a7c1bc12d7ee39bbb15e5c1519" +checksum = "da2479e8c062e40bf0066ffa0bc823de0a9368974af99c9f6df941d2c231e03f" [[package]] name = "lock_api" @@ -1726,9 +1749,9 @@ dependencies = [ [[package]] name = "log" -version = "0.4.19" +version = "0.4.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b06a4cde4c0f271a446782e3eff8de789548ce57dbc8eca9292c27f4a42004b4" +checksum = "b5e6163cb8c49088c2c36f57875e58ccd8c87c7427f7fbd50ea6710b2f3f2e8f" [[package]] name = "matchers" @@ -1754,18 +1777,19 @@ dependencies = [ [[package]] name = "md-5" -version = "0.10.5" +version = "0.10.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6365506850d44bff6e2fbcb5176cf63650e48bd45ef2fe2665ae1570e0f4b9ca" +checksum = "d89e7ee0cfbedfc4da3340218492196241d89eefb6dab27de5df917a6d2e78cf" dependencies = [ + "cfg-if", "digest 0.10.7", ] [[package]] name = "memchr" -version = "2.5.0" +version = "2.6.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2dffe52ecf27772e601905b7522cb4ef790d2cc203488bbd0e2fe85fcb74566d" +checksum = "f665ee40bc4a3c5590afb1e9677db74a508659dfd71e126420da8274909a0167" [[package]] name = "memoffset" @@ -1821,9 +1845,9 @@ dependencies = [ name = "models" version = "0.1.0" dependencies = [ - "base64 0.21.2", + "base64 0.21.4", "color-eyre", - "ed25519-dalek", + "ed25519-dalek 2.0.0", "emver", "ipnet", "lazy_static", @@ -1881,20 +1905,6 @@ dependencies = [ "memoffset 0.6.5", ] -[[package]] -name = "nix" -version = "0.25.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f346ff70e7dbfd675fe90590b92d59ef2de15a8779ae305ebcbfd3f0caf59be4" -dependencies = [ - "autocfg", - "bitflags 1.3.2", - "cfg-if", - "libc", - "memoffset 0.6.5", - "pin-utils", -] - [[package]] name = "nix" version = "0.26.4" @@ -1908,6 +1918,17 @@ dependencies = [ "pin-utils", ] +[[package]] +name = "nix" +version = "0.27.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2eb04e9c688eff1c89d72b407f168cf79bb9e867a9d3323ed6c01519eb9cc053" +dependencies = [ + "bitflags 2.4.1", + "cfg-if", + "libc", +] + [[package]] name = "nom" version = "7.1.3" @@ -1930,9 +1951,9 @@ dependencies = [ [[package]] name = "num-bigint" -version = "0.4.3" +version = "0.4.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f93ab6289c7b344a8a9f60f88d80aa20032336fe78da341afc91c8a2341fc75f" +checksum = "608e7659b5c3d7cba262d894801b9ec9d00de989e8a82bd4bef91d08da45cdc0" dependencies = [ "autocfg", "num-integer", @@ -1981,9 +2002,9 @@ dependencies = [ [[package]] name = "num-traits" -version = "0.2.15" +version = "0.2.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "578ede34cf02f8924ab9447f50c28075b4d3e5b269972345e7e0372b38c6cdcd" +checksum = "39e3200413f237f41ab11ad6d161bc7239c84dcb631773ccd7de3dfe4b5c267c" dependencies = [ "autocfg", "libm", @@ -1995,15 +2016,15 @@ version = "1.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4161fcb6d602d4d2081af7c3a45852d875a03dd337a6bfdd6e06407b61342a43" dependencies = [ - "hermit-abi 0.3.2", + "hermit-abi 0.3.3", "libc", ] [[package]] name = "object" -version = "0.31.1" +version = "0.32.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8bda667d9f2b5051b8833f59f3bf748b28ef54f850f4fcb389a252aa383866d1" +checksum = "9cf5f9dd3933bd50a9e1f149ec995f39ae2c496d31fd772c1fd45ebc27e902b0" dependencies = [ "memchr", ] @@ -2022,11 +2043,11 @@ checksum = "624a8340c38c1b80fd549087862da4ba43e08858af025b236e509b6649fc13d5" [[package]] name = "openssl" -version = "0.10.55" +version = "0.10.57" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "345df152bc43501c5eb9e4654ff05f794effb78d4efe3d53abc158baddc0703d" +checksum = "bac25ee399abb46215765b1cb35bc0212377e58a061560d8b29b024fd0430e7c" dependencies = [ - "bitflags 1.3.2", + "bitflags 2.4.1", "cfg-if", "foreign-types", "libc", @@ -2043,7 +2064,7 @@ checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c" dependencies = [ "proc-macro2", "quote", - "syn 2.0.18", + "syn 2.0.38", ] [[package]] @@ -2054,18 +2075,18 @@ checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf" [[package]] name = "openssl-src" -version = "111.26.0+1.1.1u" +version = "300.1.5+3.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "efc62c9f12b22b8f5208c23a7200a442b2e5999f8bdf80233852122b5a4f6f37" +checksum = "559068e4c12950d7dcaa1857a61725c0d38d4fc03ff8e070ab31a75d6e316491" dependencies = [ "cc", ] [[package]] name = "openssl-sys" -version = "0.9.90" +version = "0.9.93" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "374533b0e45f3a7ced10fcaeccca020e66656bc03dac384f852e4e5a7a8104a6" +checksum = "db4d56a4c0478783083cfafcc42493dd4a981d41669da64b4572a2a089b51b1d" dependencies = [ "cc", "libc", @@ -2076,9 +2097,9 @@ dependencies = [ [[package]] name = "os_str_bytes" -version = "6.5.1" +version = "6.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4d5d9eb14b174ee9aa2ef96dc2b94637a2d4b6e7cb873c7e171f0c20c6cf3eac" +checksum = "e2355d85b9a3786f481747ced0e0ff2ba35213a1f9bd406ed906554d7af805a1" [[package]] name = "overload" @@ -2094,35 +2115,26 @@ checksum = "c1b04fb49957986fdce4d6ee7a65027d55d4b6d2265e5848bbb507b58ccfdb6f" [[package]] name = "p256" -version = "0.11.1" +version = "0.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "51f44edd08f51e2ade572f141051021c5af22677e42b7dd28a88155151c33594" +checksum = "c9863ad85fa8f4460f9c48cb909d38a0d689dba1f6f6988a5e3e0d31071bcd4b" dependencies = [ "ecdsa", "elliptic-curve", - "sha2 0.10.7", + "primeorder", + "sha2 0.10.8", ] [[package]] name = "p384" -version = "0.11.2" +version = "0.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dfc8c5bf642dde52bb9e87c0ecd8ca5a76faac2eeed98dedb7c717997e1080aa" +checksum = "70786f51bcc69f6a4c0360e063a4cac5419ef7c5cd5b3c99ad70f3be5ba79209" dependencies = [ "ecdsa", "elliptic-curve", - "sha2 0.10.7", -] - -[[package]] -name = "parking_lot" -version = "0.11.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7d17b78036a60663b797adeaee46f5c9dfebb86948d1255007a1d6be0271ff99" -dependencies = [ - "instant", - "lock_api", - "parking_lot_core 0.8.6", + "primeorder", + "sha2 0.10.8", ] [[package]] @@ -2132,21 +2144,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3742b2c103b9f06bc9fff0a37ff4912935851bee6d36f3c02bcc755bcfec228f" dependencies = [ "lock_api", - "parking_lot_core 0.9.8", -] - -[[package]] -name = "parking_lot_core" -version = "0.8.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "60a2cfe6f0ad2bfc16aefa463b497d5c7a5ecd44a23efa72aa342d90177356dc" -dependencies = [ - "cfg-if", - "instant", - "libc", - "redox_syscall 0.2.16", - "smallvec", - "winapi", + "parking_lot_core", ] [[package]] @@ -2157,9 +2155,9 @@ checksum = "93f00c865fe7cabf650081affecd3871070f26767e7b2070a3ffae14c654b447" dependencies = [ "cfg-if", "libc", - "redox_syscall 0.3.5", + "redox_syscall", "smallvec", - "windows-targets 0.48.1", + "windows-targets 0.48.5", ] [[package]] @@ -2217,9 +2215,9 @@ checksum = "8835116a5c179084a830efb3adc117ab007512b535bc1a21c991d3b32a6b44dd" [[package]] name = "pem-rfc7468" -version = "0.6.0" +version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "24d159833a9105500e0398934e205e0773f0b27529557134ecfc51c27646adac" +checksum = "88b39c9bfcfc231068454382784bb460aae594343fb030d46e9f50a645418412" dependencies = [ "base64ct", ] @@ -2276,29 +2274,29 @@ dependencies = [ [[package]] name = "pin-project" -version = "1.1.2" +version = "1.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "030ad2bc4db10a8944cb0d837f158bdfec4d4a4873ab701a95046770d11f8842" +checksum = "fda4ed1c6c173e3fc7a83629421152e01d7b1f9b7f65fb301e490e8cfc656422" dependencies = [ "pin-project-internal", ] [[package]] name = "pin-project-internal" -version = "1.1.2" +version = "1.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec2e072ecce94ec471b13398d5402c188e76ac03cf74dd1a975161b23a3f6d9c" +checksum = "4359fd9c9171ec6e8c62926d6faaf553a8dc3f64e1507e76da7911b4f6a04405" dependencies = [ "proc-macro2", "quote", - "syn 2.0.18", + "syn 2.0.38", ] [[package]] name = "pin-project-lite" -version = "0.2.10" +version = "0.2.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c40d25201921e5ff0c862a505c6557ea88568a4e3ace775ab55e93f2f4f9d57" +checksum = "8afb450f006bf6385ca15ef45d71d2288452bc3683ce2e2cacc0d18e4be60b58" [[package]] name = "pin-utils" @@ -2308,21 +2306,20 @@ checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" [[package]] name = "pkcs1" -version = "0.4.1" +version = "0.7.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eff33bdbdfc54cc98a2eca766ebdec3e1b8fb7387523d5c9c9a2891da856f719" +checksum = "c8ffb9f10fa047879315e6625af03c164b16962a5368d724ed16323b68ace47f" dependencies = [ "der", "pkcs8", "spki", - "zeroize", ] [[package]] name = "pkcs8" -version = "0.9.0" +version = "0.10.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9eca2c590a5f85da82668fa685c09ce2888b9430e83299debf1f34b65fd4a4ba" +checksum = "f950b2377845cebe5cf8b5165cb3cc1a5e0fa5cfa3e1f7f55707d8fd82e0a7b7" dependencies = [ "der", "spki", @@ -2335,14 +2332,20 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "26072860ba924cbfa98ea39c8c19b4dd6a4a25423dbdf219c1eca91aa0cf6964" [[package]] -name = "pmutil" -version = "0.5.3" +name = "platforms" +version = "3.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3894e5d549cccbe44afecf72922f277f603cd4bb0219c8342631ef18fffbe004" +checksum = "4503fa043bf02cee09a9582e9554b4c6403b2ef55e4612e96561d294419429f8" + +[[package]] +name = "pmutil" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "52a40bc70c2c58040d2d8b167ba9a5ff59fc9dab7ad44771cfde3dcfde7a09c6" dependencies = [ "proc-macro2", "quote", - "syn 1.0.109", + "syn 2.0.38", ] [[package]] @@ -2357,6 +2360,15 @@ version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "925383efa346730478fb4838dbe9137d2a47675ad789c546d150a6e1dd4ab31c" +[[package]] +name = "primeorder" +version = "0.13.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3c2fcef82c0ec6eefcc179b978446c399b3cdf73c392c35604e399eee6df1ee3" +dependencies = [ + "elliptic-curve", +] + [[package]] name = "proc-macro-crate" version = "1.3.1" @@ -2375,18 +2387,18 @@ checksum = "dc375e1527247fe1a97d8b7156678dfe7c1af2fc075c9a4db3690ecd2a148068" [[package]] name = "proc-macro2" -version = "1.0.66" +version = "1.0.69" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "18fb31db3f9bddb2ea821cde30a9f70117e3f119938b5ee630b7403aa6e2ead9" +checksum = "134c189feb4956b20f6f547d2cf727d4c0fe06722b20a0eec87ed445a97f92da" dependencies = [ "unicode-ident", ] [[package]] name = "procfs" -version = "0.14.2" +version = "0.15.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b1de8dacb0873f77e6aefc6d71e044761fcc68060290f5b1089fcdf84626bb69" +checksum = "943ca7f9f29bab5844ecd8fdb3992c5969b6622bb9609b9502fef9b4310e3f1f" dependencies = [ "bitflags 1.3.2", "byteorder", @@ -2394,7 +2406,7 @@ dependencies = [ "flate2", "hex", "lazy_static", - "rustix 0.36.15", + "rustix 0.36.16", ] [[package]] @@ -2408,9 +2420,9 @@ dependencies = [ [[package]] name = "quote" -version = "1.0.31" +version = "1.0.33" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5fe8a65d69dd0808184ebb5f836ab526bb259db23c657efa38711b1072ee47f0" +checksum = "5267fca4496028628a95160fc423a33e8b2e6af8a5302579e322e4b520293cae" dependencies = [ "proc-macro2", ] @@ -2501,15 +2513,6 @@ dependencies = [ "rand_core 0.6.4", ] -[[package]] -name = "redox_syscall" -version = "0.2.16" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fb5a58c1855b4b6819d59012155603f0b22ad30cad752600aadfcb695265519a" -dependencies = [ - "bitflags 1.3.2", -] - [[package]] name = "redox_syscall" version = "0.3.5" @@ -2519,27 +2522,16 @@ dependencies = [ "bitflags 1.3.2", ] -[[package]] -name = "redox_users" -version = "0.4.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b033d837a7cf162d7993aded9304e30a83213c648b6e389db233191f891e5c2b" -dependencies = [ - "getrandom 0.2.10", - "redox_syscall 0.2.16", - "thiserror", -] - [[package]] name = "regex" -version = "1.9.1" +version = "1.10.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b2eae68fc220f7cf2532e4494aded17545fce192d59cd996e0fe7887f4ceb575" +checksum = "380b951a9c5e80ddfd6136919eef32310721aa4aacd4889a8d39124b026ab343" dependencies = [ "aho-corasick", "memchr", - "regex-automata 0.3.3", - "regex-syntax 0.7.4", + "regex-automata 0.4.3", + "regex-syntax 0.8.2", ] [[package]] @@ -2553,13 +2545,13 @@ dependencies = [ [[package]] name = "regex-automata" -version = "0.3.3" +version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "39354c10dd07468c2e73926b23bb9c2caca74c5501e38a35da70406f1d923310" +checksum = "5f804c7828047e88b2d32e2d7fe5a105da8ee3264f01902f796c8e067dc2483f" dependencies = [ "aho-corasick", "memchr", - "regex-syntax 0.7.4", + "regex-syntax 0.8.2", ] [[package]] @@ -2570,17 +2562,17 @@ checksum = "f162c6dd7b008981e4d40210aca20b4bd0f9b60ca9271061b07f78537722f2e1" [[package]] name = "regex-syntax" -version = "0.7.4" +version = "0.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e5ea92a5b6195c6ef2a0295ea818b312502c6fc94dde986c5553242e18fd4ce2" +checksum = "c08c74e62047bb2de4ff487b251e4a92e24f48745648451635cec7d591162d9f" [[package]] name = "reqwest" -version = "0.11.18" +version = "0.11.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cde824a14b7c14f85caff81225f411faacc04a2013f41670f41443742b1c1c55" +checksum = "046cd98826c46c2ac8ddecae268eb5c2e58628688a5fc7a2643704a73faba95b" dependencies = [ - "base64 0.21.2", + "base64 0.21.4", "bytes", "encoding_rs", "futures-core", @@ -2601,6 +2593,7 @@ dependencies = [ "serde", "serde_json", "serde_urlencoded", + "system-configuration", "tokio", "tokio-native-tls", "tower-service", @@ -2613,13 +2606,12 @@ dependencies = [ [[package]] name = "rfc6979" -version = "0.3.1" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7743f17af12fa0b03b803ba12cd6a8d9483a587e89c69445e3909655c0b9fabb" +checksum = "f8dd2a808d456c4a54e300a23e9f5a67e122c3024119acbfd73e3bf664491cb2" dependencies = [ - "crypto-bigint", "hmac 0.12.1", - "zeroize", + "subtle", ] [[package]] @@ -2631,7 +2623,7 @@ dependencies = [ "cc", "libc", "once_cell", - "spin", + "spin 0.5.2", "untrusted", "web-sys", "winapi", @@ -2683,11 +2675,12 @@ dependencies = [ [[package]] name = "rsa" -version = "0.7.2" +version = "0.9.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "094052d5470cbcef561cb848a7209968c9f12dfa6d668f4bca048ac5de51099c" +checksum = "6ab43bb47d23c1a631b4b680199a45255dce26fa9ab2fa902581f624ff13e6a8" dependencies = [ "byteorder", + "const-oid", "digest 0.10.7", "num-bigint-dig", "num-integer", @@ -2696,8 +2689,9 @@ dependencies = [ "pkcs1", "pkcs8", "rand_core 0.6.4", - "signature", - "smallvec", + "sha2 0.10.8", + "signature 2.1.0", + "spki", "subtle", "zeroize", ] @@ -2729,14 +2723,14 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bfa0f585226d2e68097d4f95d113b15b83a82e819ab25717ec0590d9584ef366" dependencies = [ - "semver 1.0.18", + "semver 1.0.20", ] [[package]] name = "rustix" -version = "0.36.15" +version = "0.36.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c37f1bd5ef1b5422177b7646cba67430579cfe2ace80f284fee876bca52ad941" +checksum = "6da3636faa25820d8648e0e31c5d519bbb01f72fdf57131f0f5f7da5fed36eab" dependencies = [ "bitflags 1.3.2", "errno", @@ -2748,28 +2742,26 @@ dependencies = [ [[package]] name = "rustix" -version = "0.37.23" +version = "0.38.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4d69718bf81c6127a49dc64e44a742e8bb9213c0ff8869a22c308f84c1d4ab06" +checksum = "745ecfa778e66b2b63c88a61cb36e0eea109e803b0b86bf9879fbc77c70e86ed" dependencies = [ - "bitflags 1.3.2", + "bitflags 2.4.1", "errno", - "io-lifetimes", "libc", - "linux-raw-sys 0.3.8", + "linux-raw-sys 0.4.10", "windows-sys 0.48.0", ] [[package]] name = "rustls" -version = "0.20.8" +version = "0.21.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fff78fc74d175294f4e83b28343315ffcfb114b156f0185e9741cb5570f50e2f" +checksum = "cd8d6c9f025a446bc4d18ad9632e69aec8f287aa84499ee335599fabd20c3fd8" dependencies = [ - "log", "ring", + "rustls-webpki", "sct", - "webpki", ] [[package]] @@ -2778,7 +2770,17 @@ version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2d3987094b1d07b653b7dfdc3f70ce9a1da9c51ac18c1b06b662e4f9a0e9f4b2" dependencies = [ - "base64 0.21.2", + "base64 0.21.4", +] + +[[package]] +name = "rustls-webpki" +version = "0.101.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3c7d5dece342910d9ba34d259310cae3e0154b873b35408b787b59bce53d34fe" +dependencies = [ + "ring", + "untrusted", ] [[package]] @@ -2826,9 +2828,9 @@ dependencies = [ [[package]] name = "sec1" -version = "0.3.0" +version = "0.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3be24c1842290c45df0a7bf069e0c268a747ad05a192f2fd7dcfdbc1cba40928" +checksum = "d3e97a565f76233a6003f9f5c54be1d9c5bdfa3eccfb189469f11ec4901c47dc" dependencies = [ "base16ct", "der", @@ -2840,9 +2842,9 @@ dependencies = [ [[package]] name = "security-framework" -version = "2.9.1" +version = "2.9.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1fc758eb7bffce5b308734e9b0c1468893cae9ff70ebf13e7090be8dcbcc83a8" +checksum = "05b64fb303737d99b81884b2c63433e9ae28abebe5eb5045dcdd175dc2ecf4de" dependencies = [ "bitflags 1.3.2", "core-foundation", @@ -2853,9 +2855,9 @@ dependencies = [ [[package]] name = "security-framework-sys" -version = "2.9.0" +version = "2.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f51d0c0d83bec45f16480d0ce0058397a69e48fcdc52d1dc8855fb68acbd31a7" +checksum = "e932934257d3b408ed8f30db49d85ea163bfe74961f017f405b025af298f0c7a" dependencies = [ "core-foundation-sys", "libc", @@ -2872,9 +2874,9 @@ dependencies = [ [[package]] name = "semver" -version = "1.0.18" +version = "1.0.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b0293b4b29daaf487284529cc2f5675b8e57c61f70167ba415a463651fd6a918" +checksum = "836fa6a3e1e547f9a2c4040802ec865b5d85f4014efe00555d7090a3dcaa1090" [[package]] name = "semver-parser" @@ -2935,7 +2937,7 @@ checksum = "d9735b638ccc51c28bf6914d90a2e9725b377144fc612c49a611fddd1b631d68" dependencies = [ "proc-macro2", "quote", - "syn 2.0.18", + "syn 2.0.38", ] [[package]] @@ -2944,7 +2946,7 @@ version = "1.0.99" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "46266871c240a00b8f503b877622fe33430b3c7d963bdc0f2adc511e54a1eae3" dependencies = [ - "indexmap 2.0.0", + "indexmap 2.0.2", "itoa", "ryu", "serde", @@ -2964,9 +2966,9 @@ dependencies = [ [[package]] name = "serde_v8" -version = "0.106.0" +version = "0.131.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1506733ba5b864018c44320fa3bb11dbb4bf01b62dd09eda007be73034371c51" +checksum = "38cafa16d0a4288d75925351bb54d06d2e830118ad3fad393947bb11f91b18f3" dependencies = [ "bytes", "derive_more", @@ -2991,9 +2993,9 @@ dependencies = [ [[package]] name = "sha1" -version = "0.10.5" +version = "0.10.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f04293dc80c3993519f2d7f6f511707ee7094fe0c6d3406feb330cdb3540eba3" +checksum = "e3bf829a2d51ab4a5ddf1352d8470c140cadc8301b2ae1789db023f01cedd6ba" dependencies = [ "cfg-if", "cpufeatures", @@ -3015,9 +3017,9 @@ dependencies = [ [[package]] name = "sha2" -version = "0.10.7" +version = "0.10.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "479fb9d862239e610720565ca91403019f2f00410f1864c5aa7479b950a76ed8" +checksum = "793db75ad2bcafc3ffa7c68b215fee268f537982cd901d132f89c6343f3a3dc8" dependencies = [ "cfg-if", "cpufeatures", @@ -3038,9 +3040,9 @@ dependencies = [ [[package]] name = "sharded-slab" -version = "0.1.4" +version = "0.1.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "900fba806f70c630b0a382d0d825e17a0f19fcd059a2ade1ff237bcddf446b31" +checksum = "f40ca3c46823713e0d4209592e8d6e826aa57e928f09752619fc696c499637f6" dependencies = [ "lazy_static", ] @@ -3059,6 +3061,12 @@ name = "signature" version = "1.6.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "74233d3b3b2f6d4b006dc19dee745e73e2a6bfb6f93607cd3b02bd5b00797d7c" + +[[package]] +name = "signature" +version = "2.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5e1788eed21689f9cf370582dfc467ef36ed9c707f073528ddafa8d83e3b8500" dependencies = [ "digest 0.10.7", "rand_core 0.6.4", @@ -3066,24 +3074,24 @@ dependencies = [ [[package]] name = "siphasher" -version = "0.3.10" +version = "0.3.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7bd3e3206899af3f8b12af284fafc038cc1dc2b41d1b89dd17297221c5d225de" +checksum = "38b58827f4464d87d377d175e90bf58eb00fd8716ff0a62f80356b5e61555d0d" [[package]] name = "slab" -version = "0.4.8" +version = "0.4.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6528351c9bc8ab22353f9d776db39a20288e8d6c37ef8cfe3317cf875eecfc2d" +checksum = "8f92a496fb766b417c996b9c5e57daf2f7ad3b0bebe1ccfca4856390e3d3bb67" dependencies = [ "autocfg", ] [[package]] name = "smallvec" -version = "1.11.0" +version = "1.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "62bb4feee49fdd9f707ef802e22365a35de4b7b299de4763d44bfea899442ff9" +checksum = "942b4a808e05215192e39f4ab80813e599068285906cc91aa64f923db842bd5a" [[package]] name = "smartstring" @@ -3116,12 +3124,39 @@ dependencies = [ ] [[package]] -name = "sourcemap" -version = "6.2.3" +name = "socket2" +version = "0.5.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eed16231c92d0a6f0388f56e0ab2be24ecff1173f8e22f0ea5e074d0525631cb" +checksum = "4031e820eb552adee9295814c0ced9e5cf38ddf1e8b7d566d6de8e2538ea989e" +dependencies = [ + "libc", + "windows-sys 0.48.0", +] + +[[package]] +name = "sourcemap" +version = "6.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e4cbf65ca7dc576cf50e21f8d0712d96d4fcfd797389744b7b222a85cdf5bd90" dependencies = [ "data-encoding", + "debugid", + "if_chain", + "rustc_version 0.2.3", + "serde", + "serde_json", + "unicode-id", + "url", +] + +[[package]] +name = "sourcemap" +version = "7.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dbecc42a2b6131acc3bf9a25c9fe4161dba438eb52131bba83c5d781b5b70be3" +dependencies = [ + "data-encoding", + "debugid", "if_chain", "rustc_version 0.2.3", "serde", @@ -3137,10 +3172,19 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6e63cff320ae2c57904679ba7cb63280a3dc4613885beafb148ee7bf9aa9042d" [[package]] -name = "spki" -version = "0.6.0" +name = "spin" +version = "0.9.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "67cf02bbac7a337dc36e4f5a693db6c21e7863f45070f7064577eb4367a3212b" +checksum = "6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67" +dependencies = [ + "lock_api", +] + +[[package]] +name = "spki" +version = "0.7.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9d1e996ef02c474957d681f1b05213dfb0abab947b446a62d37770b23500184a" dependencies = [ "base64ct", "der", @@ -3148,84 +3192,90 @@ dependencies = [ [[package]] name = "sqlformat" -version = "0.2.1" +version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0c12bc9199d1db8234678b7051747c07f517cdcf019262d1847b94ec8b1aee3e" +checksum = "6b7b278788e7be4d0d29c0f39497a0eef3fba6bbc8e70d8bf7fde46edeaa9e85" dependencies = [ - "itertools 0.10.5", + "itertools 0.11.0", "nom", "unicode_categories", ] [[package]] name = "sqlx" -version = "0.6.3" +version = "0.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f8de3b03a925878ed54a954f621e64bf55a3c1bd29652d0d1a17830405350188" +checksum = "0e50c216e3624ec8e7ecd14c6a6a6370aad6ee5d8cfc3ab30b5162eeeef2ed33" dependencies = [ "sqlx-core", "sqlx-macros", + "sqlx-mysql", + "sqlx-postgres", + "sqlx-sqlite", ] [[package]] name = "sqlx-core" -version = "0.6.3" +version = "0.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fa8241483a83a3f33aa5fff7e7d9def398ff9990b2752b6c6112b83c6d246029" +checksum = "8d6753e460c998bbd4cd8c6f0ed9a64346fcca0723d6e75e52fdc351c5d2169d" dependencies = [ - "ahash 0.7.6", + "ahash", "atoi", - "base64 0.13.1", - "bitflags 1.3.2", "byteorder", "bytes", "chrono", "crc", "crossbeam-queue", - "dirs", "dotenvy", "either", "event-listener", "futures-channel", "futures-core", "futures-intrusive", + "futures-io", "futures-util", "hashlink", "hex", - "hkdf", - "hmac 0.12.1", - "indexmap 1.9.3", - "itoa", - "libc", + "indexmap 2.0.2", "log", - "md-5", "memchr", "once_cell", "paste", "percent-encoding", - "rand 0.8.5", "rustls", "rustls-pemfile", "serde", "serde_json", - "sha1", - "sha2 0.10.7", + "sha2 0.10.8", "smallvec", "sqlformat", - "sqlx-rt", - "stringprep", "thiserror", + "tokio", "tokio-stream", + "tracing", "url", "webpki-roots", - "whoami", ] [[package]] name = "sqlx-macros" -version = "0.6.3" +version = "0.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9966e64ae989e7e575b19d7265cb79d7fc3cbbdf179835cb0d716f294c2049c9" +checksum = "9a793bb3ba331ec8359c1853bd39eed32cdd7baaf22c35ccf5c92a7e8d1189ec" +dependencies = [ + "proc-macro2", + "quote", + "sqlx-core", + "sqlx-macros-core", + "syn 1.0.109", +] + +[[package]] +name = "sqlx-macros-core" +version = "0.7.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0a4ee1e104e00dedb6aa5ffdd1343107b0a4702e862a84320ee7cc74782d96fc" dependencies = [ "dotenvy", "either", @@ -3236,50 +3286,160 @@ dependencies = [ "quote", "serde", "serde_json", - "sha2 0.10.7", + "sha2 0.10.8", "sqlx-core", - "sqlx-rt", + "sqlx-mysql", + "sqlx-postgres", + "sqlx-sqlite", "syn 1.0.109", + "tempfile", + "tokio", "url", ] [[package]] -name = "sqlx-rt" -version = "0.6.3" +name = "sqlx-mysql" +version = "0.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "804d3f245f894e61b1e6263c84b23ca675d96753b5abfd5cc8597d86806e8024" +checksum = "864b869fdf56263f4c95c45483191ea0af340f9f3e3e7b4d57a61c7c87a970db" dependencies = [ + "atoi", + "base64 0.21.4", + "bitflags 2.4.1", + "byteorder", + "bytes", + "chrono", + "crc", + "digest 0.10.7", + "dotenvy", + "either", + "futures-channel", + "futures-core", + "futures-io", + "futures-util", + "generic-array", + "hex", + "hkdf", + "hmac 0.12.1", + "itoa", + "log", + "md-5", + "memchr", "once_cell", - "tokio", - "tokio-rustls", + "percent-encoding", + "rand 0.8.5", + "rsa", + "serde", + "sha1", + "sha2 0.10.8", + "smallvec", + "sqlx-core", + "stringprep", + "thiserror", + "tracing", + "whoami", +] + +[[package]] +name = "sqlx-postgres" +version = "0.7.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eb7ae0e6a97fb3ba33b23ac2671a5ce6e3cabe003f451abd5a56e7951d975624" +dependencies = [ + "atoi", + "base64 0.21.4", + "bitflags 2.4.1", + "byteorder", + "chrono", + "crc", + "dotenvy", + "etcetera", + "futures-channel", + "futures-core", + "futures-io", + "futures-util", + "hex", + "hkdf", + "hmac 0.12.1", + "home", + "itoa", + "log", + "md-5", + "memchr", + "once_cell", + "rand 0.8.5", + "serde", + "serde_json", + "sha1", + "sha2 0.10.8", + "smallvec", + "sqlx-core", + "stringprep", + "thiserror", + "tracing", + "whoami", +] + +[[package]] +name = "sqlx-sqlite" +version = "0.7.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d59dc83cf45d89c555a577694534fcd1b55c545a816c816ce51f20bbe56a4f3f" +dependencies = [ + "atoi", + "chrono", + "flume", + "futures-channel", + "futures-core", + "futures-executor", + "futures-intrusive", + "futures-util", + "libsqlite3-sys", + "log", + "percent-encoding", + "serde", + "sqlx-core", + "tracing", + "url", +] + +[[package]] +name = "ssh-cipher" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "caac132742f0d33c3af65bfcde7f6aa8f62f0e991d80db99149eb9d44708784f" +dependencies = [ + "cipher", + "ssh-encoding", ] [[package]] name = "ssh-encoding" -version = "0.1.0" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "19cfdc32e0199062113edf41f344fbf784b8205a94600233c84eb838f45191e1" +checksum = "eb9242b9ef4108a78e8cd1a2c98e193ef372437f8c22be363075233321dd4a15" dependencies = [ "base64ct", "pem-rfc7468", - "sha2 0.10.7", + "sha2 0.10.8", ] [[package]] name = "ssh-key" -version = "0.5.1" +version = "0.6.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "288d8f5562af5a3be4bda308dd374b2c807b940ac370b5efa1c99311da91d9a1" +checksum = "2180b3bc4955efd5661a97658d3cf4c8107e0d132f619195afe9486c13cca313" dependencies = [ - "ed25519-dalek", "p256", "p384", "rand_core 0.6.4", "rsa", "sec1", - "sha2 0.10.7", - "signature", + "sha2 0.10.8", + "signature 2.1.0", + "ssh-cipher", "ssh-encoding", + "subtle", "zeroize", ] @@ -3316,7 +3476,7 @@ checksum = "f91138e76242f575eb1d3b38b4f1362f10d3a43f47d182a5b359af488a02293b" dependencies = [ "new_debug_unreachable", "once_cell", - "parking_lot 0.12.1", + "parking_lot", "phf_shared", "precomputed-hash", "serde", @@ -3336,23 +3496,24 @@ dependencies = [ [[package]] name = "string_enum" -version = "0.4.0" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0090512bdfee4b56d82480d66c0fd8a6f53f0fe0f97e075e949b252acdd482e0" +checksum = "8fa4d4f81d7c05b9161f8de839975d3326328b8ba2831164b465524cc2f55252" dependencies = [ "pmutil", "proc-macro2", "quote", "swc_macros_common", - "syn 1.0.109", + "syn 2.0.38", ] [[package]] name = "stringprep" -version = "0.1.3" +version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "db3737bde7edce97102e0e2b15365bf7a20bfdb5f60f4f9e8d7004258a51a8da" +checksum = "bb41d74e231a107a1b4ee36bd1214b11285b77768d2e3824aedafa988fd36ee6" dependencies = [ + "finl_unicode", "unicode-bidi", "unicode-normalization", ] @@ -3365,24 +3526,24 @@ checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623" [[package]] name = "strum" -version = "0.24.1" +version = "0.25.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "063e6045c0e62079840579a7e47a355ae92f60eb74daaf156fb1e84ba164e63f" +checksum = "290d54ea6f91c969195bdbcd7442c8c2a2ba87da8bf60a7ee86a235d4bc1e125" dependencies = [ "strum_macros", ] [[package]] name = "strum_macros" -version = "0.24.3" +version = "0.25.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e385be0d24f186b4ce2f9982191e7101bb737312ad61c1f2f984f34bcf85d59" +checksum = "23dc1fa9ac9c169a78ba62f0b841814b7abae11bdd047b9c58f893439e309ea0" dependencies = [ "heck", "proc-macro2", "quote", "rustversion", - "syn 1.0.109", + "syn 2.0.38", ] [[package]] @@ -3393,9 +3554,9 @@ checksum = "6bdef32e8150c2a081110b42772ffe7d7c9032b606bc226c8260fd97e0976601" [[package]] name = "swc_atoms" -version = "0.5.6" +version = "0.5.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "93d0307dc4bfd107d49c7528350c372758cfca94fb503629b9a056e6a1572860" +checksum = "9f54563d7dcba626d4acfe14ed12def7ecc28e004debe3ecd2c3ee07cc47e449" dependencies = [ "once_cell", "rustc-hash", @@ -3407,11 +3568,10 @@ dependencies = [ [[package]] name = "swc_common" -version = "0.31.12" +version = "0.32.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "19c774005489d2907fb67909cf42af926e72edee1366512777c605ba2ef19c94" +checksum = "39cb7fcd56655c8ae7dcf2344f0be6cbff4d9c7cb401fe3ec8e56e1de8dfe582" dependencies = [ - "ahash 0.7.6", "ast_node", "better_scoped_tls", "cfg-if", @@ -3423,7 +3583,7 @@ dependencies = [ "rustc-hash", "serde", "siphasher", - "sourcemap", + "sourcemap 6.4.1", "string_cache", "swc_atoms", "swc_eq_ignore_macros", @@ -3435,9 +3595,9 @@ dependencies = [ [[package]] name = "swc_config" -version = "0.1.5" +version = "0.1.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "89c8fc2c12bb1634c7c32fc3c9b6b963ad8f034cc62c4ecddcf215dc4f6f959d" +checksum = "9ba1c7a40d38f9dd4e9a046975d3faf95af42937b34b2b963be4d8f01239584b" dependencies = [ "indexmap 1.9.3", "serde", @@ -3447,24 +3607,24 @@ dependencies = [ [[package]] name = "swc_config_macro" -version = "0.1.1" +version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7dadb9998d4f5fc36ef558ed5a092579441579ee8c6fcce84a5228cca9df4004" +checksum = "e5b5aaca9a0082be4515f0fbbecc191bf5829cd25b5b9c0a2810f6a2bb0d6829" dependencies = [ "pmutil", "proc-macro2", "quote", "swc_macros_common", - "syn 1.0.109", + "syn 2.0.38", ] [[package]] name = "swc_ecma_ast" -version = "0.104.5" +version = "0.109.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b5cf9dd351d0c285dcd36535267953a18995d4dda0cbe34ac9d1df61aa415b26" +checksum = "7bc2286cedd688a68f214faa1c19bb5cceab7c9c54d0cbe3273e4c1704e38f69" dependencies = [ - "bitflags 2.3.3", + "bitflags 2.4.1", "is-macro", "num-bigint", "scoped-tls", @@ -3477,16 +3637,16 @@ dependencies = [ [[package]] name = "swc_ecma_codegen" -version = "0.139.17" +version = "0.144.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c66d1ea16bb9b7ea6f87f17325742ff256fcbd65b188af57c2bf415fe4afc945" +checksum = "8e62ba2c0ed1f119fc1a76542d007f1b2c12854d54dea15f5491363227debe11" dependencies = [ "memchr", "num-bigint", "once_cell", "rustc-hash", "serde", - "sourcemap", + "sourcemap 6.4.1", "swc_atoms", "swc_common", "swc_ecma_ast", @@ -3496,24 +3656,23 @@ dependencies = [ [[package]] name = "swc_ecma_codegen_macros" -version = "0.7.2" +version = "0.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bf4ee0caee1018808d94ecd09490cb7affd3d504b19aa11c49238f5fc4b54901" +checksum = "dcdff076dccca6cc6a0e0b2a2c8acfb066014382bc6df98ec99e755484814384" dependencies = [ "pmutil", "proc-macro2", "quote", "swc_macros_common", - "syn 1.0.109", + "syn 2.0.38", ] [[package]] name = "swc_ecma_loader" -version = "0.43.14" +version = "0.44.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fe45f1e5dcc1b005544ff78253b787dea5dfd5e2f712b133964cdc3545c954a4" +checksum = "e7d7c322462657ae27ac090a2c89f7e456c94416284a2f5ecf66c43a6a3c19d1" dependencies = [ - "ahash 0.7.6", "anyhow", "pathdiff", "serde", @@ -3523,13 +3682,13 @@ dependencies = [ [[package]] name = "swc_ecma_parser" -version = "0.134.12" +version = "0.139.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f0a3fcfe3d83dd445cbd9321882e47b467594433d9a21c4d6c37a27f534bb89e" +checksum = "3eab46cb863bc5cd61535464e07e5b74d5f792fa26a27b9f6fd4c8daca9903b7" dependencies = [ "either", - "lexical", "num-bigint", + "num-traits", "serde", "smallvec", "smartstring", @@ -3543,12 +3702,12 @@ dependencies = [ [[package]] name = "swc_ecma_transforms_base" -version = "0.127.18" +version = "0.132.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f9c33ec5369178f3a0580ab86cfe89ffb9c3fbd122aed379cfb71d469d9d61c1" +checksum = "01ffd4a8149052bfc1ec1832fcbe04f317846ce635a49ec438df33b06db27d26" dependencies = [ "better_scoped_tls", - "bitflags 2.3.3", + "bitflags 2.4.1", "indexmap 1.9.3", "once_cell", "phf", @@ -3566,9 +3725,9 @@ dependencies = [ [[package]] name = "swc_ecma_transforms_classes" -version = "0.116.18" +version = "0.121.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6e3b0d5f362f0da97be1f1b06d7b0d8667ea70b4adeabff0dcaecb6259c09525" +checksum = "f4b7fee0e2c6f12456d2aefb2418f2f26529b995945d493e1dce35a5a22584fc" dependencies = [ "swc_atoms", "swc_common", @@ -3580,22 +3739,22 @@ dependencies = [ [[package]] name = "swc_ecma_transforms_macros" -version = "0.5.1" +version = "0.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "984d5ac69b681fc5438f9abf82b0fda34fe04e119bc75f8213b7e01128c7c9a2" +checksum = "8188eab297da773836ef5cf2af03ee5cca7a563e1be4b146f8141452c28cc690" dependencies = [ "pmutil", "proc-macro2", "quote", "swc_macros_common", - "syn 1.0.109", + "syn 2.0.38", ] [[package]] name = "swc_ecma_transforms_proposal" -version = "0.161.22" +version = "0.166.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0cdce42d44ef775bc29f5ada3678a80ff72fa17a0ef705e14f63cfd0e0155e0e" +checksum = "122fd9a69f464694edefbf9c59106b3c15e5cc8cb8575a97836e4fb79018e98f" dependencies = [ "either", "rustc-hash", @@ -3613,11 +3772,10 @@ dependencies = [ [[package]] name = "swc_ecma_transforms_react" -version = "0.173.20" +version = "0.178.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5fb9481ad4e2acba34c6fbb6d4ccc64efe9f1821675e883dcfa732d7220f4b1e" +checksum = "675b5c755b0448268830e85e59429095d3423c0ce4a850b209c6f0eeab069f63" dependencies = [ - "ahash 0.7.6", "base64 0.13.1", "dashmap", "indexmap 1.9.3", @@ -3638,9 +3796,9 @@ dependencies = [ [[package]] name = "swc_ecma_transforms_typescript" -version = "0.177.23" +version = "0.182.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1fe2eea4f5b8a25c93cdaa29fb1ce4108893da88a11e61e04b7f5295b5468829" +checksum = "4eba97b1ea71739fcf278aedad4677a3cacb52288a3f3566191b70d16a889de6" dependencies = [ "serde", "swc_atoms", @@ -3654,9 +3812,9 @@ dependencies = [ [[package]] name = "swc_ecma_utils" -version = "0.117.13" +version = "0.122.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ad791bbfdafcebd878584021e050964c8ab68aba7eeac9d0ee4afba4c284a629" +checksum = "11006a3398ffd4693c4d3b0a1b1a5030edbdc04228159f5301120a6178144708" dependencies = [ "indexmap 1.9.3", "num_cpus", @@ -3672,9 +3830,9 @@ dependencies = [ [[package]] name = "swc_ecma_visit" -version = "0.90.5" +version = "0.95.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6ce3ac941ae1d6c7e683aa375fc71fbf58df58b441f614d757fbb10554936ca2" +checksum = "0f628ec196e76e67892441e14eef2e423a738543d32bffdabfeec20c29582117" dependencies = [ "num-bigint", "swc_atoms", @@ -3686,33 +3844,33 @@ dependencies = [ [[package]] name = "swc_eq_ignore_macros" -version = "0.1.1" +version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0c20468634668c2bbab581947bb8c75c97158d5a6959f4ba33df20983b20b4f6" +checksum = "05a95d367e228d52484c53336991fdcf47b6b553ef835d9159db4ba40efb0ee8" dependencies = [ "pmutil", "proc-macro2", "quote", - "syn 1.0.109", + "syn 2.0.38", ] [[package]] name = "swc_macros_common" -version = "0.3.7" +version = "0.3.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3e582c3e3c2269238524923781df5be49e011dbe29cf7683a2215d600a562ea6" +checksum = "7a273205ccb09b51fabe88c49f3b34c5a4631c4c00a16ae20e03111d6a42e832" dependencies = [ "pmutil", "proc-macro2", "quote", - "syn 1.0.109", + "syn 2.0.38", ] [[package]] name = "swc_visit" -version = "0.5.6" +version = "0.5.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f412dd4fbc58f509a04e64f5c8038333142fc139e8232f01b883db0094b3b51" +checksum = "e87c337fbb2d191bf371173dea6a957f01899adb8f189c6c31b122a6cfc98fc3" dependencies = [ "either", "swc_visit_macros", @@ -3720,16 +3878,16 @@ dependencies = [ [[package]] name = "swc_visit_macros" -version = "0.5.7" +version = "0.5.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4cfc226380ba54a5feed2c12f3ccd33f1ae8e959160290e5d2d9b4e918b6472a" +checksum = "0f322730fb82f3930a450ac24de8c98523af7d34ab8cb2f46bcb405839891a99" dependencies = [ "Inflector", "pmutil", "proc-macro2", "quote", "swc_macros_common", - "syn 1.0.109", + "syn 2.0.38", ] [[package]] @@ -3745,15 +3903,36 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.18" +version = "2.0.38" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "32d41677bcbe24c20c52e7c70b0d8db04134c5d1066bf98662e2871ad200ea3e" +checksum = "e96b79aaa137db8f61e26363a0c9b47d8b4ec75da28b7d1d614c2303e232408b" dependencies = [ "proc-macro2", "quote", "unicode-ident", ] +[[package]] +name = "system-configuration" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba3a3adc5c275d719af8cb4272ea1c4a6d668a777f37e115f6d11ddbc1c8e0e7" +dependencies = [ + "bitflags 1.3.2", + "core-foundation", + "system-configuration-sys", +] + +[[package]] +name = "system-configuration-sys" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a75fb188eb626b924683e3b95e3a48e63551fcfb51949de2f06a9d91dbee93c9" +dependencies = [ + "core-foundation-sys", + "libc", +] + [[package]] name = "tap" version = "1.0.1" @@ -3762,23 +3941,22 @@ checksum = "55937e1799185b12863d447f42597ed69d9928686b8d88a1df17376a097d8369" [[package]] name = "tempfile" -version = "3.6.0" +version = "3.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "31c0432476357e58790aaa47a8efb0c5138f137343f3b5f23bd36a27e3b0a6d6" +checksum = "cb94d2f3cc536af71caac6b6fcebf65860b347e7ce0cc9ebe8f70d3e521054ef" dependencies = [ - "autocfg", "cfg-if", "fastrand", - "redox_syscall 0.3.5", - "rustix 0.37.23", + "redox_syscall", + "rustix 0.38.19", "windows-sys 0.48.0", ] [[package]] name = "termcolor" -version = "1.2.0" +version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "be55cf8942feac5c765c2c993422806843c9a9a45d4d5c407ad6dd2ea95eb9b6" +checksum = "6093bad37da69aab9d123a8091e4be0aa4a03e4d601ec641c327398315f62b64" dependencies = [ "winapi-util", ] @@ -3815,7 +3993,7 @@ checksum = "f9456a42c5b0d803c8cd86e73dd7cc9edd429499f37a3550d286d5e86720569f" dependencies = [ "proc-macro2", "quote", - "syn 2.0.18", + "syn 2.0.38", ] [[package]] @@ -3845,20 +4023,19 @@ checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" [[package]] name = "tokio" -version = "1.29.1" +version = "1.33.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "532826ff75199d5833b9d2c5fe410f29235e25704ee5f0ef599fb51c21f4a4da" +checksum = "4f38200e3ef7995e5ef13baec2f432a6da0aa9ac495b2c0e8f3b7eec2c92d653" dependencies = [ - "autocfg", "backtrace", "bytes", "libc", "mio", "num_cpus", - "parking_lot 0.12.1", + "parking_lot", "pin-project-lite", "signal-hook-registry", - "socket2", + "socket2 0.5.4", "tokio-macros", "windows-sys 0.48.0", ] @@ -3871,7 +4048,7 @@ checksum = "630bdcf245f78637c13ec01ffae6187cca34625e8c63150d424b59e55af2675e" dependencies = [ "proc-macro2", "quote", - "syn 2.0.18", + "syn 2.0.38", ] [[package]] @@ -3884,17 +4061,6 @@ dependencies = [ "tokio", ] -[[package]] -name = "tokio-rustls" -version = "0.23.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c43ee83903113e03984cb9e5cebe6c04a5116269e900e3ddba8f068a62adda59" -dependencies = [ - "rustls", - "tokio", - "webpki", -] - [[package]] name = "tokio-stream" version = "0.1.14" @@ -3909,9 +4075,9 @@ dependencies = [ [[package]] name = "tokio-util" -version = "0.7.8" +version = "0.7.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "806fe8c2c87eccc8b3267cbae29ed3ab2d0bd37fca70ab622e46aaa9375ddb7d" +checksum = "1d68074620f57a0b21594d9735eb2e98ab38b17f80d3fcb189fca266771ca60d" dependencies = [ "bytes", "futures-core", @@ -3929,11 +4095,11 @@ checksum = "7cda73e2f1397b1262d6dfdcef8aafae14d1de7748d66822d3bfeeb6d03e5e4b" [[package]] name = "toml_edit" -version = "0.19.14" +version = "0.19.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f8123f27e969974a3dfba720fdb560be359f57b44302d280ba72e76a74480e8a" +checksum = "1b5bb770da30e5cbfde35a2d7b9b8a2c4b8ef89548a7a6aeab5c9a576e3e7421" dependencies = [ - "indexmap 2.0.0", + "indexmap 2.0.2", "toml_datetime", "winnow", ] @@ -3947,7 +4113,7 @@ dependencies = [ "base32", "base64 0.13.1", "derive_more", - "ed25519-dalek", + "ed25519-dalek 1.0.1", "hex", "hmac 0.11.0", "rand 0.7.3", @@ -3966,11 +4132,11 @@ checksum = "b6bc1c9ce2b5135ac7f93c72918fc37feb872bdc6a5533a8b85eb4b86bfdae52" [[package]] name = "tracing" -version = "0.1.37" +version = "0.1.39" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ce8c33a8d48bd45d624a6e523445fd21ec13d3653cd51f681abf67418f54eb8" +checksum = "ee2ef2af84856a50c1d430afce2fdded0a4ec7eda868db86409b4543df0797f9" dependencies = [ - "cfg-if", + "log", "pin-project-lite", "tracing-attributes", "tracing-core", @@ -3978,20 +4144,20 @@ dependencies = [ [[package]] name = "tracing-attributes" -version = "0.1.26" +version = "0.1.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f4f31f56159e98206da9efd823404b79b6ef3143b4a7ab76e67b1751b25a4ab" +checksum = "34704c8d6ebcbc939824180af020566b01a7c01f80641264eba0999f6c2b6be7" dependencies = [ "proc-macro2", "quote", - "syn 2.0.18", + "syn 2.0.38", ] [[package]] name = "tracing-core" -version = "0.1.31" +version = "0.1.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0955b8137a1df6f1a2e9a37d8a6656291ff0297c1a97c24e0d8425fe2312f79a" +checksum = "c06d3da6113f116aaee68e4d601191614c9053067f9ab7f6edbcb161237daa54" dependencies = [ "once_cell", "valuable", @@ -4079,9 +4245,9 @@ checksum = "6af6ae20167a9ece4bcb41af5b80f8a1f1df981f6391189ce00fd257af04126a" [[package]] name = "typenum" -version = "1.16.0" +version = "1.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "497961ef93d974e23eb6f433eb5fe1b7930b659f06d12dec6fc44a8f554c0bba" +checksum = "42ff0bf0c66b8238c6f3b578df37d0b7848e55df8577b3f74f92a69acceeb825" [[package]] name = "unicode-bidi" @@ -4091,15 +4257,15 @@ checksum = "92888ba5573ff080736b3648696b70cafad7d250551175acbaa4e0385b3e1460" [[package]] name = "unicode-id" -version = "0.3.3" +version = "0.3.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d70b6494226b36008c8366c288d77190b3fad2eb4c10533139c1c1f461127f1a" +checksum = "b1b6def86329695390197b82c1e244a54a131ceb66c996f2088a3876e2ae083f" [[package]] name = "unicode-ident" -version = "1.0.11" +version = "1.0.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "301abaae475aa91687eb82514b328ab47a211a533026cb25fc3e519b86adfc3c" +checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b" [[package]] name = "unicode-normalization" @@ -4118,9 +4284,9 @@ checksum = "1dd624098567895118886609431a7c3b8f516e41d30e0643f03d94592a147e36" [[package]] name = "unicode-width" -version = "0.1.10" +version = "0.1.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c0edd1e5b14653f783770bce4a4dabb4a5108a5370a5f5d8cfe8710c361f6c8b" +checksum = "e51733f11c9c4f72aa0c160008246859e340b00807569a0da0e7a1079b27ba85" [[package]] name = "unicode_categories" @@ -4136,9 +4302,9 @@ checksum = "a156c684c91ea7d62626509bce3cb4e1d9ed5c4d978f7b4352658f96a4c26b4a" [[package]] name = "url" -version = "2.4.0" +version = "2.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "50bff7831e19200a85b17131d085c25d7811bc4e186efdaf54bbd132994a88cb" +checksum = "143b538f18257fac9cad154828a57c6bf5157e1aa604d4816b5995bf6de87ae5" dependencies = [ "form_urlencoded", "idna", @@ -4147,10 +4313,16 @@ dependencies = [ ] [[package]] -name = "v8" -version = "0.74.2" +name = "uuid" +version = "1.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7568bf38565bd5b350d96abbf3d09417e8c9dd74fbb38860e91b759e46f9009c" +checksum = "79daa5ed5740825c40b389c5e50312b9c86df53fccd33f281df655642b43869d" + +[[package]] +name = "v8" +version = "0.79.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b15561535230812a1db89a696f1f16a12ae6c2c370c6b2241c68d4cb33963faf" dependencies = [ "bitflags 1.3.2", "fslock", @@ -4218,7 +4390,7 @@ dependencies = [ "once_cell", "proc-macro2", "quote", - "syn 2.0.18", + "syn 2.0.38", "wasm-bindgen-shared", ] @@ -4252,7 +4424,7 @@ checksum = "54681b18a46765f095758388f2d0cf16eb8d4169b639ab575a8f5693af210c7b" dependencies = [ "proc-macro2", "quote", - "syn 2.0.18", + "syn 2.0.38", "wasm-bindgen-backend", "wasm-bindgen-shared", ] @@ -4273,34 +4445,25 @@ dependencies = [ "wasm-bindgen", ] -[[package]] -name = "webpki" -version = "0.22.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f095d78192e208183081cc07bc5515ef55216397af48b873e5edcd72637fa1bd" -dependencies = [ - "ring", - "untrusted", -] - [[package]] name = "webpki-roots" -version = "0.22.6" +version = "0.24.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6c71e40d7d2c34a5106301fb632274ca37242cd0c9d3e64dbece371a40a2d87" +checksum = "b291546d5d9d1eab74f069c77749f2cb8504a12caa20f0f2de93ddbf6f411888" dependencies = [ - "webpki", + "rustls-webpki", ] [[package]] name = "which" -version = "4.4.0" +version = "4.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2441c784c52b289a054b7201fc93253e288f094e2f4be9058343127c4226a269" +checksum = "87ba24419a2078cd2b0f2ede2691b6c66d8e47836da3b6db8265ebad47afbfc7" dependencies = [ "either", - "libc", + "home", "once_cell", + "rustix 0.38.19", ] [[package]] @@ -4308,10 +4471,6 @@ name = "whoami" version = "1.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "22fc3756b8a9133049b26c7f61ab35416c130e8c09b660f5b3958b446f52cc50" -dependencies = [ - "wasm-bindgen", - "web-sys", -] [[package]] name = "winapi" @@ -4331,9 +4490,9 @@ checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" [[package]] name = "winapi-util" -version = "0.1.5" +version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "70ec6ce85bb158151cae5e5c87f95a8e97d2c0c4b001223f33a334e3ce5de178" +checksum = "f29e6f9198ba0d26b4c9f07dbe6f9ed633e1f3d5b8b414090084349e46a52596" dependencies = [ "winapi", ] @@ -4345,12 +4504,12 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" [[package]] -name = "windows" -version = "0.48.0" +name = "windows-core" +version = "0.51.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e686886bc078bc1b0b600cac0147aadb815089b6e4da64016cbd754b6342700f" +checksum = "f1f8cf84f35d2db49a46868f947758c7a1138116f7fac3bc844f43ade1292e64" dependencies = [ - "windows-targets 0.48.1", + "windows-targets 0.48.5", ] [[package]] @@ -4368,7 +4527,7 @@ version = "0.48.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9" dependencies = [ - "windows-targets 0.48.1", + "windows-targets 0.48.5", ] [[package]] @@ -4388,17 +4547,17 @@ dependencies = [ [[package]] name = "windows-targets" -version = "0.48.1" +version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "05d4b17490f70499f20b9e791dcf6a299785ce8af4d709018206dc5b4953e95f" +checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c" dependencies = [ - "windows_aarch64_gnullvm 0.48.0", - "windows_aarch64_msvc 0.48.0", - "windows_i686_gnu 0.48.0", - "windows_i686_msvc 0.48.0", - "windows_x86_64_gnu 0.48.0", - "windows_x86_64_gnullvm 0.48.0", - "windows_x86_64_msvc 0.48.0", + "windows_aarch64_gnullvm 0.48.5", + "windows_aarch64_msvc 0.48.5", + "windows_i686_gnu 0.48.5", + "windows_i686_msvc 0.48.5", + "windows_x86_64_gnu 0.48.5", + "windows_x86_64_gnullvm 0.48.5", + "windows_x86_64_msvc 0.48.5", ] [[package]] @@ -4409,9 +4568,9 @@ checksum = "597a5118570b68bc08d8d59125332c54f1ba9d9adeedeef5b99b02ba2b0698f8" [[package]] name = "windows_aarch64_gnullvm" -version = "0.48.0" +version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "91ae572e1b79dba883e0d315474df7305d12f569b400fcf90581b06062f7e1bc" +checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8" [[package]] name = "windows_aarch64_msvc" @@ -4421,9 +4580,9 @@ checksum = "e08e8864a60f06ef0d0ff4ba04124db8b0fb3be5776a5cd47641e942e58c4d43" [[package]] name = "windows_aarch64_msvc" -version = "0.48.0" +version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b2ef27e0d7bdfcfc7b868b317c1d32c641a6fe4629c171b8928c7b08d98d7cf3" +checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc" [[package]] name = "windows_i686_gnu" @@ -4433,9 +4592,9 @@ checksum = "c61d927d8da41da96a81f029489353e68739737d3beca43145c8afec9a31a84f" [[package]] name = "windows_i686_gnu" -version = "0.48.0" +version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "622a1962a7db830d6fd0a69683c80a18fda201879f0f447f065a3b7467daa241" +checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e" [[package]] name = "windows_i686_msvc" @@ -4445,9 +4604,9 @@ checksum = "44d840b6ec649f480a41c8d80f9c65108b92d89345dd94027bfe06ac444d1060" [[package]] name = "windows_i686_msvc" -version = "0.48.0" +version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4542c6e364ce21bf45d69fdd2a8e455fa38d316158cfd43b3ac1c5b1b19f8e00" +checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406" [[package]] name = "windows_x86_64_gnu" @@ -4457,9 +4616,9 @@ checksum = "8de912b8b8feb55c064867cf047dda097f92d51efad5b491dfb98f6bbb70cb36" [[package]] name = "windows_x86_64_gnu" -version = "0.48.0" +version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ca2b8a661f7628cbd23440e50b05d705db3686f894fc9580820623656af974b1" +checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e" [[package]] name = "windows_x86_64_gnullvm" @@ -4469,9 +4628,9 @@ checksum = "26d41b46a36d453748aedef1486d5c7a85db22e56aff34643984ea85514e94a3" [[package]] name = "windows_x86_64_gnullvm" -version = "0.48.0" +version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7896dbc1f41e08872e9d5e8f8baa8fdd2677f29468c4e156210174edc7f7b953" +checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc" [[package]] name = "windows_x86_64_msvc" @@ -4481,26 +4640,27 @@ checksum = "9aec5da331524158c6d1a4ac0ab1541149c0b9505fde06423b02f5ef0106b9f0" [[package]] name = "windows_x86_64_msvc" -version = "0.48.0" +version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1a515f5799fe4961cb532f983ce2b23082366b898e52ffbce459c86f67c8378a" +checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538" [[package]] name = "winnow" -version = "0.5.0" +version = "0.5.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "81fac9742fd1ad1bd9643b991319f72dd031016d44b77039a26977eb667141e7" +checksum = "a3b801d0e0a6726477cc207f60162da452f3a95adb368399bef20a946e06f65c" dependencies = [ "memchr", ] [[package]] name = "winreg" -version = "0.10.1" +version = "0.50.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "80d0f4e272c85def139476380b12f9ac60926689dd2e01d4923222f40580869d" +checksum = "524e57b2c537c0f9b1e69f1965311ec12182b4122e45035b1508cd24d2adadb1" dependencies = [ - "winapi", + "cfg-if", + "windows-sys 0.48.0", ] [[package]] @@ -4541,7 +4701,7 @@ version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7f355ab62ebe30b758c1f4ab096a306722c4b7dbfb9d8c07d18c70d71a945588" dependencies = [ - "ahash 0.8.3", + "ahash", "hashbrown 0.13.2", "lazy_static", "serde", @@ -4564,5 +4724,5 @@ checksum = "ce36e65b0d2999d2aafac989fb249189a141aee1f53c612c1f37d72631959f69" dependencies = [ "proc-macro2", "quote", - "syn 2.0.18", + "syn 2.0.38", ] diff --git a/libs/build-arm-v8-snapshot.sh b/libs/build-arm-v8-snapshot.sh index 19e700dc4..4c11adfb4 100755 --- a/libs/build-arm-v8-snapshot.sh +++ b/libs/build-arm-v8-snapshot.sh @@ -22,7 +22,7 @@ rust-gnu-builder sh -c "(cd libs/ && cargo build -p snapshot_creator --release - cd - echo "Creating Arm v8 Snapshot" -docker run $USE_TTY --platform linux/arm64/v8 --mount type=bind,src=$(pwd),dst=/mnt arm64v8/ubuntu:20.04 /bin/sh -c "cd /mnt && /mnt/target/aarch64-unknown-linux-gnu/release/snapshot_creator" +docker run $USE_TTY --platform linux/arm64/v8 --mount type=bind,src=$(pwd),dst=/mnt arm64v8/ubuntu:22.04 /bin/sh -c "cd /mnt && /mnt/target/aarch64-unknown-linux-gnu/release/snapshot_creator" sudo chown -R $USER target sudo chown -R $USER ~/.cargo sudo chown $USER JS_SNAPSHOT.bin diff --git a/libs/embassy_container_init/Cargo.toml b/libs/embassy_container_init/Cargo.toml index 27fb2a834..c7da951f7 100644 --- a/libs/embassy_container_init/Cargo.toml +++ b/libs/embassy_container_init/Cargo.toml @@ -20,7 +20,7 @@ serde = { version = "1", features = ["derive", "rc"] } serde_json = "1" helpers = { path = "../helpers" } imbl = "2" -nix = "0.25" +nix = { version = "0.27", features = ["process", "signal"] } tokio = { version = "1", features = ["full"] } tokio-stream = { version = "0.1", features = ["io-util", "sync", "net"] } tracing = "0.1" @@ -30,7 +30,7 @@ tracing-subscriber = { version = "0.3", features = ["env-filter"] } yajrc = { version = "*", git = "https://github.com/dr-bonez/yajrc.git", branch = "develop" } [target.'cfg(target_os = "linux")'.dependencies] -procfs = "0.14" +procfs = "0.15" [profile.test] opt-level = 3 diff --git a/libs/helpers/Cargo.toml b/libs/helpers/Cargo.toml index 02258e8fb..83e1fd788 100644 --- a/libs/helpers/Cargo.toml +++ b/libs/helpers/Cargo.toml @@ -7,13 +7,13 @@ edition = "2021" [dependencies] color-eyre = "0.6.2" -futures = "0.3.21" +futures = "0.3.28" lazy_async_pool = "0.3.3" models = { path = "../models" } -pin-project = "1.0.11" +pin-project = "1.1.3" serde = { version = "1.0", features = ["derive", "rc"] } serde_json = "1.0" -tokio = { version = "1.23", features = ["full"] } -tokio-stream = { version = "0.1.9", features = ["io-util", "sync"] } -tracing = "0.1.35" +tokio = { version = "1", features = ["full"] } +tokio-stream = { version = "0.1.14", features = ["io-util", "sync"] } +tracing = "0.1.39" yajrc = { version = "*", git = "https://github.com/dr-bonez/yajrc.git", branch = "develop" } diff --git a/libs/js_engine/Cargo.toml b/libs/js_engine/Cargo.toml index 904a63fdb..1a18cd9fe 100644 --- a/libs/js_engine/Cargo.toml +++ b/libs/js_engine/Cargo.toml @@ -6,14 +6,14 @@ edition = "2021" # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html [dependencies] -async-trait = "0.1.56" -dashmap = "5.3.4" -deno_core = "=0.195.0" -deno_ast = { version = "=0.27.2", features = ["transpiling"] } +async-trait = "0.1.74" +dashmap = "5.5.3" +deno_core = "=0.222.0" +deno_ast = { version = "=0.29.5", features = ["transpiling"] } embassy_container_init = { path = "../embassy_container_init" } -reqwest = { version = "0.11.11" } -sha2 = "0.10.2" -itertools = "0.10.5" +reqwest = { version = "0.11.22" } +sha2 = "0.10.8" +itertools = "0.11.0" lazy_static = "1.4.0" models = { path = "../models" } helpers = { path = "../helpers" } diff --git a/libs/js_engine/src/artifacts/ARM_JS_SNAPSHOT.bin b/libs/js_engine/src/artifacts/ARM_JS_SNAPSHOT.bin index b366410caa33872dd6f8a34a683556f56719869e..305aa2d4cb7922ecf830fd7131b70087418bebd4 100644 GIT binary patch literal 547549 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%0AGZyhwiB{T=s#RV`58P! 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 Um+J;v_1sa6xN@WfdoK9-A1@}8+W-In literal 513616 zcmeEv3w&Hvo&VgKWO|$QoxTDEZbJ(b$fGZy6p*G(Y6E>gM65M4lT4C zcGVS8m-3eN+0_-O_+VWD1%+wZ)%CIJuI{?4u6EVGC`ASO++F#9zvpr9xpyXQs>t&H zZ|^5LbMNo`&hPxr@BGg1yw9;hp^%0Dv;Xr0JLk`Dy0mHj;>(*Z1K{^~e*C-@n)zsD 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
    @-1?TvsRmJHv;w>Y%tnB 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 z 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%0Ag$V#_iWTo7Ot*8?Se+ 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ⅅDYmmxTBz zk1v9NEEHQ+{!~d7D~+zKAX$7B9Yn<<>M;fnuUs0KU;xb}VvVgt6HSHa-ioTENmx=w z8(V=iiIWB@5*2)S(2~JGo$qHu3&&UZO^}OKbI7j*?Aq(avB9inu`HLNS%0 zbjAP0!rV^{M#Z*7toN5+Ajw$+H4(NWVqYJzcSW#Rl1nBRVF6^sPDJcf#7;+UWMsir zcBlGXZPi^@oH2MaO=_Ykv;c!`k&&nvtJ4#wVL*PK;CSTVshGIN{9)*}$w*Hk68UKK z9)WTeKscQk!T&E19*;!9wDki3?t=u7#Dfx?!@vXwrO+P|7LN=5A%HHK3h=ZB=RiEc zYw`b&2#d!BKLpS(V7|y6A~*+sIWE{8qaJMB6UW&Na<5vlrD!`{Qb^)Q4 zu&EJz%46pcvI@US*i;Zc<*|iSv|s_nbPI6haE^^nW$eXOur*JWvA0*jMu`$nW$a!B z!GA%{m9ebA`60x63oTmXObD!$w&b&uhcxBsHJ% z*wmKCk#1YSNU8B%|MV)n%Gi%q!RCY?pUT+ts+2L#hx4h7J*x^ftsbAs*wy0ZG#j7F z*wx}@Ma-u%_Lr(ijq_f7UK{otiToO|Sq<_jANNBjCBJ})SSW!+8RNVDaYmI-d2HI2 zy&_yX!BWBsl23W;Zz1kqL28^+=0j}0>mMsXK9#X!Q0hw9tjqaS#{Mo$UnOkqUmlxM z`^zevb5fR1W$Zhv#LadBpYqt0`OP9+IzgFpcA3v>!*&F2CF~av%BG06evF&%`nRAe zHZ9Y=kX$9~#;Vwi`#7+*1!CNM*T3_tVpD34g5W=58=tQJSC(3@0UpF&q{1p=YkeYM z5c`60v8%;>;kek0PHg)ZO1;KwzxA7?!EAqR1y2rzAQ>4mcFGaf9!md=t z7FWfd3G7)_u$NTDCg&dq1^oomy;KF1=bYHft6(pyicRaV8Jz2SnsM`8|CU$9X1aUv zt0c8cs$w4k<~+o$%M#<}yZ&8T6`SdP96wt@5u304=I=6o;HfON#}Qfydj(PPyf*C1 zC2|$)YLHT`kAnF)sF(6a@bT=!S1Po%o zXI$(R3Zfi#_qf=rs$j>*#lEsi`A&?B-CPAb`MR)s#>JjjC2nmw%I7yV)xoclrl!V? zTWcu+gZbU}y0H6S7xq9^Y^Hk^ewEUl9v7RXq!RWG<6^I>f-UCw5MDXQs>MB6HSR+Q zeLsFW*O+5`*T12v*h`^j>tSGYT}Eua>tCiS_6rC-8`!fH6tVfPf7x-d{{it=ihH;! z_Eum%S_S*2s@PyU^a};Sf8^ZwbdSd z*S`-}#b&x4{3>yNTUBi4_osl~te_Y--}Ub!Rk4}h(`Qz$LqA#-o1Fh&(#{9Yrz-v9 zGjqp8kuOmc+Ym(!hA4^+Q51zJN*RBqD1XKnMNx>NR7{k1wMi7a+GMkvT{e`WQi$CY zh3L<2ZP>K6+n?X_IrlziX1<;CoZqYGyk2L%_dECVKF@QW^XHy>zxR8;YbpCYe=taQ z6X=J6^fv-MM@7$7(WNT-VUfldn?x6ETPG^CH?}#?6X_j9e@>Htv2We@9{w7E- z5^O&q($w76YX}jw1TZg)k~i+Ywu+**{=~BHvx9C=1V#t)lOm1w-br+=Lw zIe3r$&xka7Dvp=Fp1Mp$FBfTQZtFFKh*|=em)|CD+))eBzf;i|y+}XL_OmhUp;ysf zjEbs>3iZY|=iev)ciTpbHKOcmvFC#HBpN9`+bcyHp6{XTqn}sNC>_aN?^4?HB4wZL zKLDll^XM01_-E3qRrDW&^mis7bjff(-qqc+g z{v}AiAkb@rv}Ai-kd|!!HAqXgUkcJ+3H4qt(#5nlpR#Xm*&x!P8F{0Mep#fkUduSn z-&0=+(p_@=^d^x;)G(*|qV{T#MsM-auZeU`BD+!GQ;7=45^QtcEYgTtiBRt?LAtd- zzb?{<+IN(F^?pM|zbVq8sBIPLP(Oc5q>s{G%&EQ>dt0PKwzsM1?J9bQNFSxXHj`G^ zd5H==72BNO5$RC9cdF=JD*A6CT}t&{L}!xq5*6x=ZO(re=~YDcrKq(pM`N4wyFvN| zvYlIw#y02O$^YF)fArMKWWQ>ng6G)g{9cg$E>T06PQM?dCEI&M8Zlo+0}ShAB-q9_ z=e_2?zI96}b+$!x(%CCffyOrH4}x?rqI;C1vCa8IkuE0BizwGCM`N4wK9NSfR|xce zkq(Wq11kC>6@5@eA5zgDtLRTex(~J1=XCzxBvGNS<(H`_lj7TKV z*yjA1`L9HySNiCGh;(s6R!&r~jcv~Vlxg%*T07v%1rq2c^osY$pHoJ1*BhfmqQ8h? z4~=Mwd|EcKjRP^^M`Ue%wmneVUD9NCi3+d<4nJPL+*YJRS8Lj- z=nGWzg(|weiteDIf2pD`Qqdh%bSD+vSw&y0qPwW*t}6Nx6@96S?xv!oZtyhpx4MGp$n3k2H*A|0ytV397Sx@{%}KEXsnz4_BjywW3ZO>&QK z(8DPE=%GOxJ=ND+h6U;V0$nK5p{U)cqHj{s!&USM6@9aczC}fk6zLt*)+>ef9u=fl z2=r)?4)vBXDjN5`Ai2j_$o5zjT`bbrTlpma2pt!sOKSM(k|5o!rk@@!(-hA<%D$QD z)*y|ej*q@ANK3XSh;$!n@V008kAf3L8Z)xw`RyXTiuMjW-GAla4v{V<&kH)ncT@#k+!;dveM9K96@>r`xWeo&<0IZZ9z`TU_EjdK9s(O^!H z#uYdpJvT^8QA1pi{IlXKwAW|*;UK+PpmDy0^z&@b57LtDM?|_0?fvcq|JvcvApNO8 z<6KRyw=}0d7Nn*2{#B5cZ2vk)OSTsV>Gc#AUtfDXNFNmF-vsG51^S5~EqT5uNK2kS z8Kfo87mM@`+B=haDppuXm=$@oh1aJ<8ndF*-b+M!6|L7c3*T*7D$WV|mZwEJ zwE+fxt zkrD|swmG9_NbX~3E85$UdW(<#gGi&^J1P5m%L^jCgUA&Ey;`IxXttlxrl~hxIsH+j z;dw48eD(g5NW=3vlzsjDMUgJ0z4)%8&-NOT4tf4(75x{HMsHa}->dO?zE-4B?>riz z^^zt+PsKLpbs`;V@4u?(msIq66}>^Eiz!05PVMV!8-uj8%6(a+(bt+#i}`H75~T4< zJ3e|-kWLA0`~>6wD< zH${2})w@Wry;YmIc`HaSqA9|6BzjwT#6$ved zZO)&GbWPg3jrv;o5z3F)53v1dcmsY;!(Eq~UpqK-USm=FhKpOOb9xdtaopn%vlgi8;18V?WZ*i}|@K8t2D; z+c*jyrp$dEy@ijTcx@xnSS$7yu2P*R(%8wzFxvddjC{U|ZY$D9$)0q#L_3kjN^>5C zrvz?OLezTDE8ZhtAkv8W3d+8n=&NTd<9d6d~cY-5{qN0BZiyV7qPb`t53=bc5mCfUYs)t0|fgl*0ji!?l6 zMq{k}RVuzZhSx44jh!4Z+Wg5F>nhTycL^zcJ@pci4%xm`q*3pMbZ(Fjw<)2$o6sxX zBX<*N#QZR+%EvsFyvP5#i!}OL56T?5^uBhPNMk3HwE2^mU#_BisOX*|T})AHOH*?B zsBtgF>lGr67F$3x&fbs^H9nKW>y<&e7v1IQqkD<;DzZJBg5KI#j%{O`b8nG`=LLf8 zJ}UYu72Q`w_fyeVi!^ph{rnmg-CsoyP|??_=<7uKDD|~BX9MnqKB#ILXpOCtbe(>BWj2P=Nm=36}8xRq{eX*2{g7j-z3u5DaCxaNW=3Y zS~K}$et+qZ}`cCuaCG*QDVr;#dpl!_j$qQ|J{A{9MWq*qaJ ztCE7_p5ETYB8{Va_KopM7p(*ut6t9IL>fB}Q%~gtnz!+aQjq-T{%d1_`I}CU57Lup zPUW*`rtu#6)*!u7uzg#Q?nYyb6WiwZ6M}Sqfu0zo7qTIGO}Bk}kX|p)cLeDd1bR}C z=6MB$q`L?4xG{ z>8}L(o*<1;;FRr1B9K5gp;x>| z{*6fQAbJAb-HH_e66n_SiucG*h;&V&7gDZ8N+i(O=DbLxv6Jh}G+sG9DbmHTn_cn# zwOm3`cjUz?`Y9E?BuL}CslFCls-mA3Y4p^Ulzlz*nIOGFpqB;dNkns-qqlG$$Ln$x z{o5d2BG~?2kbXg^_X?3-MLiYYTpvayAfeu^=@svhpAFKLX@vUd-v{YjqA|Z9!8ZCG z-XlLJ(mO~2yS^4%Dbm=vo-!xc=54$_AEe(bCr_tWspvlh>Ggu`7lO3p`DzvY#~__8 zc>X7mZbdzH1)Yy!{zgK~vCa8Kk;c)WfSzkn$FMPtZO&^%8aw+YBwo_n`_Cecv$@UG zO?|fiBGOn3E~E33Mu~mc#y01*B8{Fnr>p-8_&Sj`p0|y!sdByh(+20iiZs>^ttnRq zN(r80oAXN|jh##~jaN?VRrCgthUc$P_RTFDMfxauDqXwx9mif4Y3yXXs4Jp|S5B{} z=uIm6RguORTR^#9;wn7H=)`;E*F+jSrFw5x(OXpX>ni#U75%1)-m0SCQqga#=xr)` zyNceSqTf-`J5}^975z6A{dX1pu8Q8RqTf@|@2luNDtfPq{y;^4sG|3&=>01CfQtS| zMIThrhg9^(D*6)@{i%xnOhx}gMgLPpf3BjxP|^QV(O;_Q!z%iSiax5M|E;3GQqjj$ z^w%o-KPvhg75%M>{;!JupNjrYMSriNe^Ajss_2a59uW8Ez$jWeo6A(uSt>eG(b+1x zl8Vkz(Z{Li$||~wiauUNpP-`gd^Dt=*Uzh|=o3|Rbrqdb(KS?bO%;8Tims)iYpdv! zRrDz;x{ivjtD;X;(Wj~CdMdiUivER)K3zrUs^|tPx}l0bLq#`I(T!E~nJW4$72QNd zH&xMRtLSr7be@WCrlOmx=oTtEUq!c6(XCYUxhlG~if*H#&r{LotLU~Wx}A!?Kt*4u zqT8$J4l4SWD*7T7-BCq%Qqi4N^u;Q=i;C{5qAyX=m#S#oW&QKdL%XZ!%T)B`D!PY? z?x~`$P|;Va=w2$iw~FqgqOVfXeN}Wn6@9gezD7mki5WkCd=F63*Q)62RP;aYOI7s4DtexZp0A=G zQPGd8=mjeJF%|tQ75!@!y--CzuA+aVqMuOFi&XTJDtfVseo93zQPE3P^wTQ(85O-u zMK4#;zg5w{Q_(9_^s_4Z_bU216}?hLKd+)!spvnb=oeJ;UPW(E(Hm9t%PRU66}?GCzpA2NQ_-7M^cEHUx{7{7MZc+{ zx2ov3RP@^_dYg*guA+CS=yz1~P8GdNMgL7j|6N7DtD<+S==W6g`zm^mir%ZDKM?6+ z`V!ah>hu(~_{IeDB$8pYjrYhOigf53VEa_`eieN{MSmpHc>2riv}a;6}#>_M0y926X^Mh zO{mu(p{HV-^YUY1B7rFyp(+B*{IR%E*y%}g(v+Qlt4leY05Ia{Pr?`4#IQL7}LPuV`gt$%d=C*wsP{;E#e3wGNS9Li*)&S>NQnd*+nj5N^bS&fPPr;& zB+%IATr)_2m8f0xNg|D&`Yw6zo6qswW+eB#R!mX*PMDc$i*zZ`hw0a(2gW8$y|K;t zWRYG)URM?7^HW3`^~Tc~eKD^i(rB^Glzntv6@98m_o1lOqP~_(_L0zAa_N=xX(D}; z>RdqQV@-%a0*!6X^+X!=eu1*D-t~jD6t!Qd=+i|SQOg&imMhYTS~m5yMpSnsL=D@V z8;CS|>NoVv+Kxaef$m7JoErw|eKbm-MoOp85NXriG_UoFVMAk^b0d*PdrRw<#v+X| zhSfby5GKKMY;!(Sq|ssvsKtD%p0h+6_1-M3dYXvz4zgYKg81qIT!-hllEAsCNcSP- zHtH?8Kq-OFrB}{pi*zZ`jp%u~U5G#ejcv~7h;%V|{wB4zkIob6Qlf`d_V=}BL3-pF z@w$mUpH3T`n~QW!vfYa&7W7Oc)EnEJTZnWqMGb2c-*GHoq+1bPLW*1%rUcu$^vb!V zNMn?Ap%T!qkw9acbE_bIkZ7Oh=LYF_$(C=LKoW^YcY|71eo|Q17-P zT}tGOLW{K%=~YBlrun=zm4bx!#x~~*M7o%iQ!u{(r34z=oG+AVvfYamzFD!oNTa7p zG4BwhcP5_F%TGN2rAXH#&oTS>M#)7%dV)ZA4APSAPC;6--8o20=VKR(G-jr?lzma_ zBGP?`%%#3o3(Z9deGS{3y9R0e-j$EOM5NK)xKiZv{8Eudz1s@5yNUEssw3_U@QtzV zLAoy~e4bwxq;Yqh&-Ud(8f$Q$?H)lIpA`FS_YBg*1lw1LG+Hc0D=wesR|e_XMEm+0 z<~$_#c_`cV(Y=GTWV??@V?JL-nU+l^VT@s$^Ho85TcQS@PNN?px$6zv65UTlU#+6A z5owH2%!IV(wN?Db?|~wX zsP(7u?K}EkAEfadVjq2jNMnpOp%Ln%2Z=Q5jcfP55n2$WafGi&^+!T`W1I6}kuD{> z-%xL9YuK2^Hs>Khx-GSsj~*)0tH@3X#oX7=G2bHj$2UmKB}k|@&ntK>6lwI9PbvHQ z`Hd?2CXq(H4-2-3%QUrETk31R_8uY9JIF51sC@OlS*D4cO~GwKr63{Z*yenTNcRCv z+1JlUiZr73E@hwRqeL3E>rr3x(W6Bgw%ZG~$B1-sfG!g0Qli%iw#NqPuLQbSq~UoZ zfgUH)h&eu8^Nnv@RY3BO?~$~Zx|>Pq<9mFN9xl+giZo)5^H87Xw}~|B-9uQf;d}|n zUGJJiV~y+^B@;z@6_qO;OKw-ucLeEt^4vEwO%iGJHPqQRLMMwf>OF}f=Zo5%D*7&w zZbf$Y37$_8>7zuxD9}?y8odS2mG{+qT9C%I9v^+TNEZ{?OX#W7RrCyzE+yLw1>5%o z=>-CPZ;-~d!#dPzNSK+h&3R^!UMtw16{NBL_u0NLNG}lR`-Aj0fu0?tKNaW)g7jg5 zeo#d}B+{#>uXPbt_j6SA+#o$tuwAO69}dzuj`{l9ydXVYpyvl^w72hA@`#FlRHXY* zd*fcrTnuhX7~i?{${8aF$$k9BthkI6zB%L3*J;FB0jaL>3A3 zlR3BH*B zPNZRb3C+kjt3pD|^XL`tkynUx$o8`$T}-w|(&zpdDM+x5dgDFv??oEDC7WhNU%j6b zY1Dfj*&arAkhtD>kGxW(L$;q6Y1pnq_Y@V79VFPs)sliFuM%m*d>%@mS0vEb=KKed zE++C#`X%ebhK=cNw2k-3FNpLGqK8q`a2AaO+r8)&?~zxF^eUpK5RLwY1RC3%|0vRZ zh;BlPE`}|m@gDh4v=7NWLP6sSnU8)kNaL!7k6sg`+Y^mABca~;^osY$e-`Ogr07Vw zDrF?l*yj8fk={Ydwp8~NP)eY&&3SE*enp_y1!-J&@Y()rkp4!XUkcKj1$w&8DMLN{puc+uvD*9Cw{hEs2EYfK2IYMvQBGRFlzpkR+2-3^Qd*AHv zW{{RPGR|@_7 z-5@RX^W8zZve4e|1!>9l`zm^mNMps-g%rNE;$D$PPwhx0_>O`fh%{_ZrdD zl##Gj#5U)TMH;sIQufvRlOR2it{nKT?R^@g_fX7zXYZc{>4C!MCI1N0jRg9iLAtL% ze;%ZV6YU#gUx;)mwbm4hny+WX5Oy-1*Oofpa7&*AwZ%D%pKM5NJE3n*&7 zzIIea|2s(IQ)FL@eHEk>_IIivC(f|0hV}yY0T1f1{$mRnh-d(fpzk*kX|>MflEA=3EP-R7F{xe08b-c#rm=PJlG zgY@V0tRN_n(&>|A8aAk}`C?v6q<0YgCMg=lrj2cEbFQtTPZnwPmYL*vZaLf7=6s4s z_o0|qrf*s1QYlD?S`oeCJ#rn9hV3G1?EZ$0>5jCG_sDfc8hx!1m4Gpg1l!o=d}@#$ zNNQhSJ1t1}73g{*T}obOP|VBEOgt;$wZ4k}g-Ev|+xUblm+T-RYPs~v`E-%qL39(M z4-$a{8gamTe$! z2Z^pnr66&=@gBLcNUx$g7toQYBPo$Ux24yPNj_7g`w)%Zm`iFT&~@lFH_2y-H0q7- z&7qZ$Kx3OTzR7^(p3jdGIg+mRG>S!r#y01sB8_h{FQU1n{E>){LU=t}q|x4ev;Fir zA`Q=T1<&(D8n*G|ney$;ZH?DvB8`~i+bOy9iiDWw(ktiYB8~Q*K=no&BZ0;?=N2Lj z&u3EhjgowkMvLLQ=dGy(B-q9_=aw=}o)08No?&Ae+nig8G(6u%narC6+t}uOZjgRA zQ3Fq>@hLBoyPw1MTFO4#ZGtqeO8VBw=ZSPHBAZagh(vIbS5wnAg6cr=avV zY)oUDb4QVe?N96YW8O)o$@X`YsQ{DUIkq`>7U@zV7m>o(&o35fjFQ>3Zpkla8{3?_ zh%`pYPRhPf(p98aQPd{Yt$26La4L=SB_a*avFh>F`%;lc)Kau|$R&G7hWQ}#vevLOAPKwqw+aj!Cxdwj!l$#zc_eT9m?GDz1$o15Cj?Tu~D zy;OAXAT33$k4V>~QPNiUT=1$OeXwmjhob7}=Zol-b6=4@N)gMbAK%$XTZSG`-}8ZQqH4H=1qcaY;ztE zq$eb5;OX?WD*8GVjddiFdwhrLeZ7jlAxKM68>FHOg0$4$gM+l>`4AO7R7DR{(S;(7 zqad!<;G7c){T$nzZw%5iX^hu1Y)oUD^Gza+o;rc(TIFbLa~>X~alOSyj}U3pyDHs} z?DPC)kuD_~t18SyNQfG?Ip3n9M~bv*G2sk)RFKXV=+PpL7F$Reb0`w(jcv|jg7gBR z#foH_ddlW=;?LsP_7vLSJXWL;wT1M#Ae~&81kbU}xmct_$FXrD4ch|++a*CdSD?p> zbRV+4gxcFTN^TWtc>dLC{(gR2kX}IN1{f7ch&i@7WA%;XK90fmyQlb9_Y*~W2bKFS zW%NuW*v2;J+k^DZMD3#Q2-2St=3A#u3euA8$s%2oqE?jckJ_Cgy@Tk_&!!%ON>f7A zu+90dAbpU|Lw$X1ib%urg_M2tRFUpOvqN@G|GED(kw(2gCC}@aTF3RqHs`xV`Y57C zwC`9lU8G_A8^QLBAe}+SF`wu61nK@li`^^IrrvZ7yH~lWVVm#r?LAAR zONm7Jx#etQoAZ4ljhG*%dP9wbex6IOobMOuRYb24+Ix18{*ODm`mdp`poCD)(jnDJBB3(+hYgP4M<0=(t)H|C- zNp88QVVm>AA`Q>?knPsxXl!$yC(~qGn%CxwH0s@-Y{OHe^q%^NNcSOnShk;jRHU)m zTT7X`n@O;ZZO#isx+dA)N0B4vEsbr?kBKyn-@~Z{AN?zlhUe1#$iEh8#C#_yd?R$B zNW(V1qv;!CkBc;-hTnwp(Z3OC*j_-iuf?7a>0+|ozOtWQB+_WH&uNVLY(E*K*HZ~T zdU24(Q^b8o!KXwTQNwR9<Q1jc334JbzlG;rU9+zESdwNEZ`H zlY{r(_hmsEy_7nPNr)P@IWJeyzZL0HvNMpfuin2CY1A9>_IbV{NMohvv;Az49wyMg z57Myh^ZYp#y;7tR^Vx#u&x?Oj0G*U#68G};@aFKT}d(m4A2=)Z{cD$J*J<)9bYN5ag6ZO&^& z8b^OT6U$fcbwPTOK>t;wi^=mz)Ld9uBEfTPbACyrONqu2xUFGh8rz)L2k8{q#>|KW z+t}v3L8j@fVhV)}y%h;GwmEMU>7x|$DZ=MtFN-vKDrN^?i@hS!=&4;O`}*3ZAU#R2 z{c4czA<(Y{>AnKJIY@UC=q*9IKheIZy{@9)2-1j}&-R-^T59jDL0Yo?R*;@2c>cDE z-WH^X3%0ihX{p{jf^;s~u1XmRvjes{za!EZ-!l_6z5Im6xf+t^Ix_9aqwMP~yMlCE zf&N>NmTdoBMZX)Qa|O?LtLXQFbQ8h$`$1ard{2;;Z0{B69pp8xN}^{XrT5eiL>fI+ zTHSvr(yNG`LfL0~pGX%ISwPv>&-VxE7X|u2ke(^f9|dVd&FA?+k;WAh=~)AZL>f`c z7i@nVq~W#C^G`$?y=5e2UweNVq-P8CXCi%+NUWJ?!DkZsIkq|fL!=RNw3v_nr%1y# z)(*aUe=gF+Xm3)~q7sncIkq`}A=0aeUP5bCUyJ=qq|sY?Q1;PZ25CghM;}(vM^yAt z75#4&{gsM7rlP-A(f?7=->B$sRrG&V^#4@!cPjdO75#&X{!v9|(7c1>S*Oy>l%4IL z*D^)Al;{`ex`S_4%o6EVM9(A7d^2(+(wG&83p9Qe70F%inq*r#j#UzAc#fy9`i?|7 zA`Q=5Q})&SxFDTRv~NDI9Hd7IwyUV<<3$=VUntlIoAT9NlY9d`sp5yyt zzV<#*rpfazLcOc2=v0u#==AlL8bP|f;Cam;Ese30f^-wX^IAcApFr0Z=|0rn%ZNtg zkkVIsCyO+C>I%xf-g1gauOc#!uBrNL*AZ!WF2%gANMnRf60V4zD$=FoIo9V@DI+0j z*yeniNW(UsCFqM#R`te&ZLTyJc1K0QdUq?r5aoh#DC zWM>g&U%eZMG+L~eKsOX=*lr}yX9Q`?Exwtlkx1_#a*1HOu}H)7I)d#pMH*2XDcC+M zNDmiiJPQEHy>1D4-c+RF`8LYF-g0)3{#>BX5$TZUc`CY@if*o=TZlAbK1qmLzDOf# zXf59;X&I!O2y`nIeXfdb9i%ZreLb~}NaNnQ_SOBz(DOu^d#ca&`9WHm725`BX=Z9C z(nl#`uLx1QAV_zi$ocAhp-7{jj}&aT7iq*im$I*)cMxgRTl#&$Uy3w5muBRPL>ivs zNbmE!qe#Q^Izr4li8O3Wy`{5?zF4H;`9V4-^7WQ3B3(+fbR_C3(x`V^%D$LiBGT|2 zcRTt#zf`2*`R9~dEQ;5L!MtI(y%S{mdjOi50QrF(%jNhq(h!xp`x!8>5%8W zL^|YoZx!7~q(h!xCDI|!`>N=EA|3MlYLPCbz9y}>t`TY2mX4wL<_eN~eID|BfJoD% zWakywz!@}NIbExwuT#+jRrK{L`UVv}NJST@=)o#_h>9MnqKB#ILKS_ZioQuj4_DD6 zRP@a%`W6*EQbmta(W6!L7!_TlqQ|P}Vii43MVF}P@gj|Dxtr;r<-4YNtBSr&q(jHh z2`YM`ioRV%-=U%>sp!cn`c4&nmx`XEqNl3pX)5||6+K-=&rs3#sOWoD^h^~!OGV$O zqVHGHvsLs1D*8bc{g8^DqoU`k=u#E^u!^3iqUWpVM^yBqDtdv6eoRIGN=5%#MK4s* zkE`h4sOTqD^dc4gq>5gwqMuUHOH}ky75%h|env$vQ_;&+^lw%4?^N^(75%J={=JHR zPNY}SxgdTs5}!OE;hHA4Ijq4Rdz(myJm0RO zcc|!hRP;_2y-P*^O{CFNb1D0J>feKOTY-KzNOu(I-75M$75%=7-V>y;qV>gmuZsR4 zNJ}yQFi6i4Jm06H_Xp{2g6#t;`lBG7E7(35r1J&(P>^mS&>sisMgsjwke0^xr$Jh} zYyYz#ohNwy4;B5-AYDY~WWEvlxk#@hvKIZik?&hMUj*slDL?%$k={lTTSVD+^#4+% zi->%IvajBUgY-y&J|fcaT)GqMXpqLQQTporZ;?ieZKGdR_O;koA|3MlSdf-H|5~Ks zd4b^he?%Id@1g9A+BYJN5z>o(LCi;gE7Gw2qG0>KL3*=5|4*cgh+I$E*U!Hb>BB_k z34QH*kw(2&Quamd2NnHekX|O(#&f!n-1jTObE(BLgS2EjOQaEVsl6kS?nSMIXNCI4 zH=ewV&mnpq zDe~f=nW)vHZM;W5UPYgvqVc;bNbdHA=Y6TYeV$iS(I*CJJf+-cyShlD#aavfJQbwt z33LsS?nSnT3v|sOji>7P`uRygdYC}h5@|#&Px!`uZIMR3^XU?N`SG2izJ>S5C#&dF zRCJvn-A(YkZjf#((5D7zJS71$0uts_v_0Mjh~%_uXf^zDT3JcM9|` zL^_}7UP9DP7wIC3%p}UbbxUrL#=PRA8wBY$1-hX~W93y zB8{juq3o-7W06i#i%p{J^ZZPaUP*R)(I=Wd+h?ihCL)b`R~BqH4brs)`s^T`E70cz zX*}=V7qz?~T~)B%EJ)WA=;lGXi9ojy=}>RU7wI|F-cu<1dTL9NhV3N+-Abg<*LqR* zwb;2LjWL!h9KTzObP>^bE>()`BVlgAHs>}XJ%^Nsh4Fo!OcS}1D(zdhoG;Rc$#y=~ z+t*@kMYnz^we%LO`h)&evhiVNTY;(R!r1OdHNWIl}6znU~h}a5&?kCbKi7ug|e?8-O>^ZhMUoFx_q{LaeZ)UnC zNaqT4{~+B~pa-bvYgP1hDtcg$?kLpz`XDVu?FJP+C`fk^JTC~+GX;9EiXIZACkeKP zs_0=sI$y9|sG@IF(Ko5+;VOEBioQ8WOQYl#6+JRY_Z8ZElt^zQav#mr^L)W}agc5#(BnjUC6UsasYFGO7wI`<8+G?Z?N*V7 z=W7M}wjhle*=Ku#ik=vx7Yep-7imOnIA!0u@QAr(C*NJ}j? zH%R9To|gvcCIbC%kd}`A^MbUrR-7-=IRE}8RKCBG7Bcs_-)?^yEdAl*b*BQKO`A`c4p3_dQ?0ndLEq$SUvkZJO~Nbr1- zOq1t(gqS}m(nVyuM7Y~=u}Gu6*9*3v3ewVAafwKypToAVr!E!g!$jr_eeG$HM!hk{ zeEs|x6}>D-uMli657KJ|`nN$^vi&=eM$F$7Y_AaMUesE+U$GXIfP@t`wmCl=q>G5I zW7wF+Hs{|5Y5XdjkA5yl_oA!NKF?PM>3RbFyhvkwOTSOFN~Bj3{V6H(%0;anZR0)i zA5`=UDtdL0#_u-zJpZGL{!@@fi}`H7DAH&#>8^n_K{{I)C4UxajIk1d{!5U?Z;bi+ z`Pv{Y*GpKxp#1nwQUB)I;UyKlUPW&R($bxG8-p~SN$som%Rzb= z#T+vN63@tZkNirI-b}WA^d=Sksz{@sOZQ5?7Nmy>QQIuiSUXIiT$M5sqK0kGTY~h2 zMD3zq7wIBGr1P;iL^?%Ln?l*=`I{oWl59)&3~p7?Z;3SOE!{Ktc953t8Qd16bF=;H z)a^l9x@T}lke2Qld?!dt_YCd~($YPHyF@zFTmB}}bEv(iQ}*@Lzl$_%uMp^WMH+pr zFJ<3($!?Lx7%LEtq3?+_j)FUdqu~1@ji{{^#`hkXCUP59+IRHdE7FI_Hhx{$*J2-t zH0oW46y=X4d=$d#hbnrXir%lH4~TRxs`mt;y+0D^Z4{Y>lzlNjDAH&#=}2@)q+$DA z!S=^N8uopje>o{Khut&qNyc?X{+JgWPg7wmJVpr1QzH zbm!eaMH=hGIl`THpNll=y^^vo=3fNqB?A4gAT8ZH_oYbBA-hsfJshNG3Z5SkX^c>0 zU(}AO=zohe>MeQxl}K+RuNTs~#W$xO6X_zdU5B#oDEM`d&K2nY1nIT{{f&zLRz?3; zMgK2IcNFUVU67Wd_PvV!AxL)-JpVCBqo4cw8t-t==jf>totYHtrzZ)vvs82xr1J&a z*($n{iq28d$EoPbD!NLLmPX0(D*A*VEuC3Z73po%Qw|D8qG}?IQSz10*G>%59R<3& zNW=3C!Sj?z!}EN>b`6nUN#r8RzTPK(KwXNY5d18SGO=O25W+ibx+OVhUv+T}PzhIYy|Dt}D{ph#V=f}FRCGNR zU0+52LPei0(rB?<%8BSF{X92FV~y&g8w6>|cEccDBG^7dMK=o4d4lc6D*DVIEk*6D zAT4>`BuFfJO*HxlTxgLG?wK1ZZi(lP9C%729{FGw#D=w>2~d2I=0->leNq%lHY z5bE6`NDmk2e36FdQz-j9ZyBVeJ9ApeG_}~f!kszi%5=c<)wDJPBB_kQ{8<%wY^BA z-YY5l=ng9SmqB`&VEdvV{h~m34APSAP9lw%Zx(EK7U^EpS~G=DTP_aLBZ;m<_K~p4 z#Wv?ILHeLTcMZ}#gu8++3DR{0`cjd`_+Ck$I@B_?j_ZwW&fP?MCDHg~A+H>b^&8$J zcURGusp!jt^d4$4pXWVPbk87Ni(1TQ`wEdpi`5bO`ISLBL!f(!G{zY2yz}*z-a+~s zf$kHeCEHhtG@>TmQ`9#|OZOD@Q_)we=xc(sbWc(LAT8ZfG$2S92=^3S8>FRsimp@9 z14SDBT)L;|`XF5(+*5ReNMr3ViE>rSNa@#G1_kL7qI`6LNEZ>=gmNPK$(m`fNT(=j z(sRg$h&0wq(mh2(RrD~CM!ltbiVB0YbWhQZL0Y<}=%yeo-BUC?NK5w=jR?|pvi-f~ z<{&NIQ*?_+hkDCMk)A{CJ%zGwl#CK-*j^^kqeU8htrz7)^pi0*Mx-&uqfoI zZNfb!V?`QKdyz`;MXgw-VVe}bwZk}(K1{Zydx}a#8uga$DH^Y$Z&lH^spttJ-HYli z-BUDCq_!Ur$id_`B#GNB|*BQKra<( zc>Wz_-!b%Qk%s5eD0xPtR}#HQu)R!0FBfTeK8$iA`pMk#TaiZ8q^yMtQhxn=QOS4DESH&H?GSi51^8>GY*^`IpkNeysj<#S~yap3W<|_ z8SHg07T34pUy~!*8J*9G%Z@!~d2g0Cs2erNjIOtF`OY{r?Q}rtl|7rGr6;og*`&#t zj4-B)&tdTlg9enyF%X~FVcR$e78yDx@3!)YK2pi4QrWaBk(9XXmMq?IDhIKaDSNRg zJ3TI~SYD|*%fB~Gly!!yiOyyDa_h>EMm{8wSMD#mTkQHZ{va=e;uFxAw z9PbV+UuWe%m?1qRk;nU4{!5lWYb$!PDgA)6^ov+t&33Gjn7OvZo?~yeb>&nR7uMlk zSTioWDLl`>-NTgFmF_J6-g*p$c6U!g3$Ikqo z{*|3ET1@k5e-{p98D zE}2boW*kp1xjEfqSsVy+P0q@vbcvdtUBGXrbh$oieD+|x<+&Z(T?_CRsr({?-kL>* z*+GAz?v=S))-c1hbAH@$VgZklL5V*4_GFfKj3auzOa3m)SD(Q0zDC~gfw%!Gmfk6; zWK_v62d<)jGXonW%+6=|D};PbjtHt{;ZW>WaRN- zE4}oVEPvk0I~n=3)~=4-isfspyt9$J+p#sv*ID_6^sk)9T*v-qEPm38amPr`7A)m6 zvC=6Q#O5qsT0OIB&iLa8V`rOWh4eAKMjNuC5t-Z?xhTlFPC{*wqBhp*1(=7EWpZS8 za?@SH;>SbcsHC*_Sw#PHH&N5!So#cE9Z;25#qfZjy^0NYe)4b6fhbhPOq|IEl28+j64>-hkd53ur=>0j9y4V$}4zn0}2tnXi&(x*A) z*RlKoTl)Wu{D4zFkmXNW`S(UXq=n0w>sh|s%6~NSjZXOuEPvk0-=Tj|Ra?4BH)DhL zN168AyJ6h9j65kUgIksRMAX4{fisN!fKxt{o#|xdEsVT#E0;6FSU%Ru8yWdxBTsMD zLY8;6^7ZDxk#(-C^cz{e+8#KXn$m|Dd3xzLv3!6neKY-wj$+QzhqHW_?K4}AyrFZl z9KrI>tQ@zB&@${^tlH?vV-m;xW|kkat@=LwD?U4+d7*;%78W!QkAGb?Y1DsPG^Z=vm|^7g3mt|%Ii8P%;Ejm?Z6$c&a}Mw>GE zI3^wQ{)=KMv9_ie+6~vm!y_K8?EU|YlG^oqds1_fkuSa_4rN98cP!7ehicsOOAYn1 ztMu<#UfarZV`oOXO8bkJODjJUWsiW@>1TzREbeK=r<$^-Im^ysd3`IdZu+8ovim2? zkDMIs&y2p!jH+ZsUu1Ge*h>}584S15C%%bX<)+6+^|PXuSy88~vK3(Ow(;&Y^csDZ z6*Y*WE!okGh|B#0nWZk^Jf-L?dK z8f~PHSt$Y(Us$IJ(j*?67qhro^{AZs^SJ)Iq=aa)y(~1C3ZY{__qdi74Lr;8 zb}4QfbBDd%MO z%xL>Lsh$Yi*8f-7Y72%q^^fs`$e}nKvk#|a%))O&@sablVTn2oSp14?vz$&MeZ(8z?p|LQ}d`5>1g=v zIjLvi$+3!_pk2x}75A%C=-=eY;2~p*O9tIGc-*K#<4P!4qehIr2>}9?By%aNHNQc3 zujmo##HpM|-J)uFsUGA{mAnf59388iKXrOnuLWauDU&}HJsC8vuw>BqVqRF5>q?|H zepRClq^MnX)F#{6d@O;iV)GS64f0YYq zC4`*(7&m-;$*?iE#by)2I5}cm+`){&axKb1`-R_0TBg`k&dEB_{=8H@3fA6=!SeW#9AHa|C&t4c zMV9k}-kDjEr)1~At7-j6pAQ#B$MRB3$eAM*osnD49PI~>j3;SF%blFqi@L`>>EQ~E z$9o|{T;^q_=2PQsi>fqB?Ic$!H5-gweAr7nnsNIiak;H{1Rd=YU&xj8qZs!T6PJp9 z@MuZ%8anaSk0`NK*nOM_ckI%ErBl$F^pMiT}X40FqMDOQEI4ju`YN(v{G zz?1aO#mhuz(=|x*rL5^%W=5l$rP{!q5f$A@>tWn<$w~=Jqv6zKB_oF3GH4tcZT!fj z;has^IPt)^SMjKaKFbMBmmF<6Wkyq*rMkki$)ac6beLHvP-DjzjxQ`bTZv0{bf&Ws zn+}i8XLsneoJVvLKfhV(5ImY&(WA7cxHC#|*lFr6&+ii$^!E-4p7KH?mocwl1q=n(b?ul38l zfq!%8l#gcC8ky17W~thU;g*UqO!I)}*5ueXespo+jf2J%nNrJnLhsEnhkLlg6CR^L z%X#vAX0*RqYBfCBD|*8HD_Q5!veV28pS!rFDC1Jsf)COD+y~c&0J|s<@=!)`U-RCRy4HkNP!FjU+#Mi+*r;lH*~y zlL|C`e!_=Ba-0Y>Vg_2P(NJ zS2()jMLENuG~4K@rak)&Zgtl75h{+6%Njfjx|pe!mT3}-I9A!xr;rfsnUDWIWR@ZxKnY3 zi8U)H1SnZyei~J2k@}qcsMMmuvCA{Uk}-ednBq}`O9tIIVq{@_T7Z%rBa9b74uANt z2C|$#yXkDNMQSf1Q&;qeJ9TmzRd{RR=#oJr$58*q@E?WM=51q&sYg?Cc*ZAk&W7WQ z2w*FYxw>?g*CJIP?lr6EUU{@Axu*;?p0h=@?{w8hI7fHGLz2oTBIt$ zvreLCd{j$L6=)$hXvjo5XCGNO`lgcMDAfckeeCfEDh`i$1q`yBN4=r}EmD2yAMQ1H zf2`sLM*U)E`RHJ*7vL{aCQlH_OlmItmit&ER+W9MfvciO&Q`_Ifm6j+T^~(uk$MH5 zKKj#-UpB+fH=~Ia{Y-0a_A|La9bW}0yFkssVlNDXrh4Qi$i)%FS1u2I=c^tBe{>;jZR<}q!fbRBuMUT>EFdnDqKQuV8 z#vDCn^q>)=hZRo16kAkSTrx3P;5m+s`H6XFi`Gl?t!#p=k{NAjk*WswHdS=b({RZV zsN4yba}?y3cc;0u7gZEc94rw6{g-ad@)3q9r5Gk-8-+|p?c#Qi6iB+2CNy`)F|hesNz zje8wv1If5o@#KI%CBkkvmz*3di0bC27Ls4JEBckzuX!EI-wn>^H4wA5up%B{O4jVY~u24MlO_g6Y-70hbVvoXyn6?27+XY^LpW&X%9r zg=Xqd(H*&&uzpGw3HJ2X9`PK_#2qF2EQ$_Ae9a`(;Mr?dP4 zEB}*`yYKqLUC&6-Tq|D_JL9}B54SQK`D0f8XOg>bKy1k3$F2A;rfl~eg^gJLWVN!p zb*@h4s^jQPB3haiJ&+a6%8DjtMdPzLc=!c2_l-aUxx}T_q8fDTMif06Ma!e;`6yZw zMcbq3SQJ&sj%s8_b+eIp0_q7vvn7U%a!K9A{)Xncz01=&XKyaoDEF1<}1mfvqmci+K;+vSm> z{kHU%-BfcEJF}rKm;RcOPn!dI`Yrbubf)y}R=(ND4>;xc!i$mbvhvqsXXd&} z$9Gtae6N*nG4jPmo_^aCz7cHXyRCd3$#Yh_ZtlZ3f{l2&6~AH1&MI}e(x2t~t$dr2 z4{^%ztzc97F)M%5$TvFW_*SryAF}eTM&9sYmowL~{4*sfxp%Ku98oaB4Caev~zegli2wc_oj?9TICo)2RAw^qK_$QK)V(pT+BDqwljQ@J

    4ChN<4^tLtV~ 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