Compare commits
36 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 69fc35653e | |||
| c7fac9cc05 | |||
| 20a8dfe2b6 | |||
| 3333b21f1b | |||
| e2b27a998b | |||
| a8028c5f09 | |||
| 8ed4d8e7c9 | |||
| c69641d8b0 | |||
| a901dac0ae | |||
| 8a2ed9496d | |||
| 6fc6771b97 | |||
| dbbd60c9e9 | |||
| 64cbc4054d | |||
| 9a23c44c5e | |||
| 5dacf0c8f8 | |||
| cbafd37102 | |||
| e537359c73 | |||
| 2ed3e646be | |||
| c725ae4e2b | |||
| 5ab2c738df | |||
| cd70b0de75 | |||
| 6359b38a5d | |||
| 00b5a46cbc | |||
| e97a068bf0 | |||
| c7147ebfb2 | |||
| a344cda916 | |||
| 15a6af49f0 | |||
| 97956afdf6 | |||
| 7b71775e08 | |||
| 5fbccc3406 | |||
| ac8afe133f | |||
| 19736b1204 | |||
| 6e5f6bf0df | |||
| 67435e9cdf | |||
| a47899aa77 | |||
| 44fa52a7a7 |
Generated
+20
@@ -1907,6 +1907,7 @@ dependencies = [
|
|||||||
"maxminddb",
|
"maxminddb",
|
||||||
"nym-bin-common",
|
"nym-bin-common",
|
||||||
"nym-contracts-common",
|
"nym-contracts-common",
|
||||||
|
"nym-explorer-api-requests",
|
||||||
"nym-mixnet-contract-common",
|
"nym-mixnet-contract-common",
|
||||||
"nym-network-defaults",
|
"nym-network-defaults",
|
||||||
"nym-task",
|
"nym-task",
|
||||||
@@ -3783,6 +3784,7 @@ dependencies = [
|
|||||||
"nym-config",
|
"nym-config",
|
||||||
"nym-credential-storage",
|
"nym-credential-storage",
|
||||||
"nym-crypto",
|
"nym-crypto",
|
||||||
|
"nym-explorer-api-requests",
|
||||||
"nym-gateway-client",
|
"nym-gateway-client",
|
||||||
"nym-gateway-requests",
|
"nym-gateway-requests",
|
||||||
"nym-network-defaults",
|
"nym-network-defaults",
|
||||||
@@ -3793,6 +3795,7 @@ dependencies = [
|
|||||||
"nym-topology",
|
"nym-topology",
|
||||||
"nym-validator-client",
|
"nym-validator-client",
|
||||||
"rand 0.7.3",
|
"rand 0.7.3",
|
||||||
|
"reqwest",
|
||||||
"serde",
|
"serde",
|
||||||
"serde_json",
|
"serde_json",
|
||||||
"sha2 0.10.6",
|
"sha2 0.10.6",
|
||||||
@@ -4005,6 +4008,18 @@ dependencies = [
|
|||||||
"syn 1.0.109",
|
"syn 1.0.109",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "nym-explorer-api-requests"
|
||||||
|
version = "0.1.0"
|
||||||
|
dependencies = [
|
||||||
|
"nym-contracts-common",
|
||||||
|
"nym-mixnet-contract-common",
|
||||||
|
"nym-validator-client",
|
||||||
|
"schemars",
|
||||||
|
"serde",
|
||||||
|
"ts-rs",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "nym-gateway"
|
name = "nym-gateway"
|
||||||
version = "1.1.23"
|
version = "1.1.23"
|
||||||
@@ -4520,7 +4535,9 @@ dependencies = [
|
|||||||
"nym-bandwidth-controller",
|
"nym-bandwidth-controller",
|
||||||
"nym-client-core",
|
"nym-client-core",
|
||||||
"nym-config",
|
"nym-config",
|
||||||
|
"nym-contracts-common",
|
||||||
"nym-credential-storage",
|
"nym-credential-storage",
|
||||||
|
"nym-mixnet-contract-common",
|
||||||
"nym-network-defaults",
|
"nym-network-defaults",
|
||||||
"nym-service-providers-common",
|
"nym-service-providers-common",
|
||||||
"nym-socks5-proxy-helpers",
|
"nym-socks5-proxy-helpers",
|
||||||
@@ -4530,10 +4547,13 @@ dependencies = [
|
|||||||
"nym-validator-client",
|
"nym-validator-client",
|
||||||
"pin-project",
|
"pin-project",
|
||||||
"rand 0.7.3",
|
"rand 0.7.3",
|
||||||
|
"reqwest",
|
||||||
|
"schemars",
|
||||||
"serde",
|
"serde",
|
||||||
"tap",
|
"tap",
|
||||||
"thiserror",
|
"thiserror",
|
||||||
"tokio",
|
"tokio",
|
||||||
|
"url",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
|
|||||||
+7
-6
@@ -74,6 +74,7 @@ members = [
|
|||||||
"common/types",
|
"common/types",
|
||||||
"common/wasm-utils",
|
"common/wasm-utils",
|
||||||
"explorer-api",
|
"explorer-api",
|
||||||
|
"explorer-api/explorer-api-requests",
|
||||||
"gateway",
|
"gateway",
|
||||||
"gateway/gateway-requests",
|
"gateway/gateway-requests",
|
||||||
"integrations/bity",
|
"integrations/bity",
|
||||||
@@ -117,31 +118,31 @@ anyhow = "1.0.71"
|
|||||||
async-trait = "0.1.64"
|
async-trait = "0.1.64"
|
||||||
bip39 = { version = "2.0.0", features = ["zeroize"] }
|
bip39 = { version = "2.0.0", features = ["zeroize"] }
|
||||||
cfg-if = "1.0.0"
|
cfg-if = "1.0.0"
|
||||||
|
cosmrs = "=0.14.0"
|
||||||
cosmwasm-derive = "=1.2.5"
|
cosmwasm-derive = "=1.2.5"
|
||||||
cosmwasm-schema = "=1.2.5"
|
cosmwasm-schema = "=1.2.5"
|
||||||
cosmwasm-std = "=1.2.5"
|
cosmwasm-std = "=1.2.5"
|
||||||
cosmwasm-storage = "=1.2.5"
|
cosmwasm-storage = "=1.2.5"
|
||||||
cosmrs = "=0.14.0"
|
cw-controllers = { version = "=1.0.1" }
|
||||||
# same version as used by cosmrs
|
|
||||||
tendermint-rpc = "=0.32"
|
|
||||||
cw-utils = "=1.0.1"
|
|
||||||
cw-storage-plus = "=1.0.1"
|
cw-storage-plus = "=1.0.1"
|
||||||
|
cw-utils = "=1.0.1"
|
||||||
cw2 = { version = "=1.0.1" }
|
cw2 = { version = "=1.0.1" }
|
||||||
cw3 = { version = "=1.0.1" }
|
cw3 = { version = "=1.0.1" }
|
||||||
cw3-fixed-multisig = { version = "=1.0.1" }
|
cw3-fixed-multisig = { version = "=1.0.1" }
|
||||||
cw4 = { version = "=1.0.1" }
|
cw4 = { version = "=1.0.1" }
|
||||||
cw-controllers = { version = "=1.0.1" }
|
|
||||||
dotenvy = "0.15.6"
|
dotenvy = "0.15.6"
|
||||||
generic-array = "0.14.7"
|
generic-array = "0.14.7"
|
||||||
k256 = "0.13"
|
|
||||||
getrandom = "0.2.10"
|
getrandom = "0.2.10"
|
||||||
|
k256 = "0.13"
|
||||||
lazy_static = "1.4.0"
|
lazy_static = "1.4.0"
|
||||||
log = "0.4"
|
log = "0.4"
|
||||||
once_cell = "1.7.2"
|
once_cell = "1.7.2"
|
||||||
rand = "0.8.5"
|
rand = "0.8.5"
|
||||||
|
reqwest = "0.11.18"
|
||||||
serde = "1.0.152"
|
serde = "1.0.152"
|
||||||
serde_json = "1.0.91"
|
serde_json = "1.0.91"
|
||||||
tap = "1.0.1"
|
tap = "1.0.1"
|
||||||
|
tendermint-rpc = "=0.32" # same version as used by cosmrs
|
||||||
thiserror = "1.0.38"
|
thiserror = "1.0.38"
|
||||||
tokio = "1.24.1"
|
tokio = "1.24.1"
|
||||||
url = "2.2"
|
url = "2.2"
|
||||||
|
|||||||
@@ -0,0 +1,16 @@
|
|||||||
|
// Copyright 2023 - Nym Technologies SA <contact@nymtech.net>
|
||||||
|
// SPDX-License-Identifier: Apache-2.0
|
||||||
|
|
||||||
|
use clap::Args;
|
||||||
|
use nym_bin_common::bin_info_owned;
|
||||||
|
use nym_bin_common::output_format::OutputFormat;
|
||||||
|
|
||||||
|
#[derive(Args)]
|
||||||
|
pub(crate) struct BuildInfo {
|
||||||
|
#[clap(short, long, default_value_t = OutputFormat::default())]
|
||||||
|
output: OutputFormat,
|
||||||
|
}
|
||||||
|
|
||||||
|
pub(crate) fn execute(args: BuildInfo) {
|
||||||
|
println!("{}", args.output.format(&bin_info_owned!()))
|
||||||
|
}
|
||||||
@@ -10,7 +10,7 @@ use clap::CommandFactory;
|
|||||||
use clap::{Parser, Subcommand};
|
use clap::{Parser, Subcommand};
|
||||||
use lazy_static::lazy_static;
|
use lazy_static::lazy_static;
|
||||||
use log::{error, info};
|
use log::{error, info};
|
||||||
use nym_bin_common::build_information::BinaryBuildInformation;
|
use nym_bin_common::bin_info;
|
||||||
use nym_bin_common::completions::{fig_generate, ArgShell};
|
use nym_bin_common::completions::{fig_generate, ArgShell};
|
||||||
use nym_client_core::client::base_client::storage::gateway_details::{
|
use nym_client_core::client::base_client::storage::gateway_details::{
|
||||||
OnDiskGatewayDetails, PersistedGatewayDetails,
|
OnDiskGatewayDetails, PersistedGatewayDetails,
|
||||||
@@ -22,12 +22,12 @@ use nym_config::OptionalSet;
|
|||||||
use std::error::Error;
|
use std::error::Error;
|
||||||
use std::net::IpAddr;
|
use std::net::IpAddr;
|
||||||
|
|
||||||
|
pub(crate) mod build_info;
|
||||||
pub(crate) mod init;
|
pub(crate) mod init;
|
||||||
pub(crate) mod run;
|
pub(crate) mod run;
|
||||||
|
|
||||||
lazy_static! {
|
lazy_static! {
|
||||||
pub static ref PRETTY_BUILD_INFORMATION: String =
|
pub static ref PRETTY_BUILD_INFORMATION: String = bin_info!().pretty_print();
|
||||||
BinaryBuildInformation::new(env!("CARGO_PKG_VERSION")).pretty_print();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Helper for passing LONG_VERSION to clap
|
// Helper for passing LONG_VERSION to clap
|
||||||
@@ -42,6 +42,10 @@ pub(crate) struct Cli {
|
|||||||
#[clap(short, long)]
|
#[clap(short, long)]
|
||||||
pub(crate) config_env_file: Option<std::path::PathBuf>,
|
pub(crate) config_env_file: Option<std::path::PathBuf>,
|
||||||
|
|
||||||
|
/// Flag used for disabling the printed banner in tty.
|
||||||
|
#[clap(long)]
|
||||||
|
pub(crate) no_banner: bool,
|
||||||
|
|
||||||
#[clap(subcommand)]
|
#[clap(subcommand)]
|
||||||
command: Commands,
|
command: Commands,
|
||||||
}
|
}
|
||||||
@@ -54,6 +58,9 @@ pub(crate) enum Commands {
|
|||||||
/// Run the Nym client with provided configuration client optionally overriding set parameters
|
/// Run the Nym client with provided configuration client optionally overriding set parameters
|
||||||
Run(run::Run),
|
Run(run::Run),
|
||||||
|
|
||||||
|
/// Show build information of this binary
|
||||||
|
BuildInfo(build_info::BuildInfo),
|
||||||
|
|
||||||
/// Generate shell completions
|
/// Generate shell completions
|
||||||
Completions(ArgShell),
|
Completions(ArgShell),
|
||||||
|
|
||||||
@@ -73,12 +80,13 @@ pub(crate) struct OverrideConfig {
|
|||||||
enabled_credentials_mode: Option<bool>,
|
enabled_credentials_mode: Option<bool>,
|
||||||
}
|
}
|
||||||
|
|
||||||
pub(crate) async fn execute(args: &Cli) -> Result<(), Box<dyn Error + Send + Sync>> {
|
pub(crate) async fn execute(args: Cli) -> Result<(), Box<dyn Error + Send + Sync>> {
|
||||||
let bin_name = "nym-native-client";
|
let bin_name = "nym-native-client";
|
||||||
|
|
||||||
match &args.command {
|
match args.command {
|
||||||
Commands::Init(m) => init::execute(m).await?,
|
Commands::Init(m) => init::execute(&m).await?,
|
||||||
Commands::Run(m) => run::execute(m).await?,
|
Commands::Run(m) => run::execute(&m).await?,
|
||||||
|
Commands::BuildInfo(m) => build_info::execute(m),
|
||||||
Commands::Completions(s) => s.generate(&mut Cli::command(), bin_name),
|
Commands::Completions(s) => s.generate(&mut Cli::command(), bin_name),
|
||||||
Commands::GenerateFigSpec => fig_generate(&mut Cli::command(), bin_name),
|
Commands::GenerateFigSpec => fig_generate(&mut Cli::command(), bin_name),
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -14,10 +14,13 @@ pub mod websocket;
|
|||||||
|
|
||||||
#[tokio::main]
|
#[tokio::main]
|
||||||
async fn main() -> Result<(), Box<dyn Error + Send + Sync>> {
|
async fn main() -> Result<(), Box<dyn Error + Send + Sync>> {
|
||||||
setup_logging();
|
|
||||||
maybe_print_banner(crate_name!(), crate_version!());
|
|
||||||
|
|
||||||
let args = commands::Cli::parse();
|
let args = commands::Cli::parse();
|
||||||
setup_env(args.config_env_file.as_ref());
|
setup_env(args.config_env_file.as_ref());
|
||||||
commands::execute(&args).await
|
|
||||||
|
if !args.no_banner {
|
||||||
|
maybe_print_banner(crate_name!(), crate_version!());
|
||||||
|
}
|
||||||
|
setup_logging();
|
||||||
|
|
||||||
|
commands::execute(args).await
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,16 @@
|
|||||||
|
// Copyright 2023 - Nym Technologies SA <contact@nymtech.net>
|
||||||
|
// SPDX-License-Identifier: Apache-2.0
|
||||||
|
|
||||||
|
use clap::Args;
|
||||||
|
use nym_bin_common::bin_info_owned;
|
||||||
|
use nym_bin_common::output_format::OutputFormat;
|
||||||
|
|
||||||
|
#[derive(Args)]
|
||||||
|
pub(crate) struct BuildInfo {
|
||||||
|
#[clap(short, long, default_value_t = OutputFormat::default())]
|
||||||
|
output: OutputFormat,
|
||||||
|
}
|
||||||
|
|
||||||
|
pub(crate) fn execute(args: BuildInfo) {
|
||||||
|
println!("{}", args.output.format(&bin_info_owned!()))
|
||||||
|
}
|
||||||
@@ -94,6 +94,7 @@ impl From<Init> for OverrideConfig {
|
|||||||
use_anonymous_replies: init_config.use_reply_surbs,
|
use_anonymous_replies: init_config.use_reply_surbs,
|
||||||
fastmode: init_config.fastmode,
|
fastmode: init_config.fastmode,
|
||||||
no_cover: init_config.no_cover,
|
no_cover: init_config.no_cover,
|
||||||
|
geo_routing: None,
|
||||||
medium_toggle: false,
|
medium_toggle: false,
|
||||||
nyxd_urls: init_config.nyxd_urls,
|
nyxd_urls: init_config.nyxd_urls,
|
||||||
enabled_credentials_mode: init_config.enabled_credentials_mode,
|
enabled_credentials_mode: init_config.enabled_credentials_mode,
|
||||||
|
|||||||
@@ -10,24 +10,25 @@ use clap::CommandFactory;
|
|||||||
use clap::{Parser, Subcommand};
|
use clap::{Parser, Subcommand};
|
||||||
use lazy_static::lazy_static;
|
use lazy_static::lazy_static;
|
||||||
use log::{error, info};
|
use log::{error, info};
|
||||||
use nym_bin_common::build_information::BinaryBuildInformation;
|
use nym_bin_common::bin_info;
|
||||||
use nym_bin_common::completions::{fig_generate, ArgShell};
|
use nym_bin_common::completions::{fig_generate, ArgShell};
|
||||||
use nym_client_core::client::base_client::storage::gateway_details::{
|
use nym_client_core::client::base_client::storage::gateway_details::{
|
||||||
OnDiskGatewayDetails, PersistedGatewayDetails,
|
OnDiskGatewayDetails, PersistedGatewayDetails,
|
||||||
};
|
};
|
||||||
use nym_client_core::client::key_manager::persistence::OnDiskKeys;
|
use nym_client_core::client::key_manager::persistence::OnDiskKeys;
|
||||||
use nym_client_core::config::GatewayEndpointConfig;
|
use nym_client_core::client::topology_control::geo_aware_provider::CountryGroup;
|
||||||
|
use nym_client_core::config::{GatewayEndpointConfig, TopologyStructure};
|
||||||
use nym_client_core::error::ClientCoreError;
|
use nym_client_core::error::ClientCoreError;
|
||||||
use nym_config::OptionalSet;
|
use nym_config::OptionalSet;
|
||||||
use nym_sphinx::params::{PacketSize, PacketType};
|
use nym_sphinx::params::{PacketSize, PacketType};
|
||||||
use std::error::Error;
|
use std::error::Error;
|
||||||
|
|
||||||
|
pub(crate) mod build_info;
|
||||||
pub mod init;
|
pub mod init;
|
||||||
pub(crate) mod run;
|
pub(crate) mod run;
|
||||||
|
|
||||||
lazy_static! {
|
lazy_static! {
|
||||||
pub static ref PRETTY_BUILD_INFORMATION: String =
|
pub static ref PRETTY_BUILD_INFORMATION: String = bin_info!().pretty_print();
|
||||||
BinaryBuildInformation::new(env!("CARGO_PKG_VERSION")).pretty_print();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Helper for passing LONG_VERSION to clap
|
// Helper for passing LONG_VERSION to clap
|
||||||
@@ -42,6 +43,10 @@ pub(crate) struct Cli {
|
|||||||
#[clap(short, long)]
|
#[clap(short, long)]
|
||||||
pub(crate) config_env_file: Option<std::path::PathBuf>,
|
pub(crate) config_env_file: Option<std::path::PathBuf>,
|
||||||
|
|
||||||
|
/// Flag used for disabling the printed banner in tty.
|
||||||
|
#[clap(long)]
|
||||||
|
pub(crate) no_banner: bool,
|
||||||
|
|
||||||
#[clap(subcommand)]
|
#[clap(subcommand)]
|
||||||
command: Commands,
|
command: Commands,
|
||||||
}
|
}
|
||||||
@@ -54,6 +59,9 @@ pub(crate) enum Commands {
|
|||||||
/// Run the Nym client with provided configuration client optionally overriding set parameters
|
/// Run the Nym client with provided configuration client optionally overriding set parameters
|
||||||
Run(run::Run),
|
Run(run::Run),
|
||||||
|
|
||||||
|
/// Show build information of this binary
|
||||||
|
BuildInfo(build_info::BuildInfo),
|
||||||
|
|
||||||
/// Generate shell completions
|
/// Generate shell completions
|
||||||
Completions(ArgShell),
|
Completions(ArgShell),
|
||||||
|
|
||||||
@@ -68,18 +76,20 @@ pub(crate) struct OverrideConfig {
|
|||||||
use_anonymous_replies: Option<bool>,
|
use_anonymous_replies: Option<bool>,
|
||||||
fastmode: bool,
|
fastmode: bool,
|
||||||
no_cover: bool,
|
no_cover: bool,
|
||||||
|
geo_routing: Option<CountryGroup>,
|
||||||
medium_toggle: bool,
|
medium_toggle: bool,
|
||||||
nyxd_urls: Option<Vec<url::Url>>,
|
nyxd_urls: Option<Vec<url::Url>>,
|
||||||
enabled_credentials_mode: Option<bool>,
|
enabled_credentials_mode: Option<bool>,
|
||||||
outfox: bool,
|
outfox: bool,
|
||||||
}
|
}
|
||||||
|
|
||||||
pub(crate) async fn execute(args: &Cli) -> Result<(), Box<dyn Error + Send + Sync>> {
|
pub(crate) async fn execute(args: Cli) -> Result<(), Box<dyn Error + Send + Sync>> {
|
||||||
let bin_name = "nym-socks5-client";
|
let bin_name = "nym-socks5-client";
|
||||||
|
|
||||||
match &args.command {
|
match args.command {
|
||||||
Commands::Init(m) => init::execute(m).await?,
|
Commands::Init(m) => init::execute(&m).await?,
|
||||||
Commands::Run(m) => run::execute(m).await?,
|
Commands::Run(m) => run::execute(&m).await?,
|
||||||
|
Commands::BuildInfo(m) => build_info::execute(m),
|
||||||
Commands::Completions(s) => s.generate(&mut Cli::command(), bin_name),
|
Commands::Completions(s) => s.generate(&mut Cli::command(), bin_name),
|
||||||
Commands::GenerateFigSpec => fig_generate(&mut Cli::command(), bin_name),
|
Commands::GenerateFigSpec => fig_generate(&mut Cli::command(), bin_name),
|
||||||
}
|
}
|
||||||
@@ -91,6 +101,13 @@ pub(crate) fn override_config(config: Config, args: OverrideConfig) -> Config {
|
|||||||
let secondary_packet_size = args.medium_toggle.then_some(PacketSize::ExtendedPacket16);
|
let secondary_packet_size = args.medium_toggle.then_some(PacketSize::ExtendedPacket16);
|
||||||
let no_per_hop_delays = args.medium_toggle;
|
let no_per_hop_delays = args.medium_toggle;
|
||||||
|
|
||||||
|
let topology_structure = if args.medium_toggle || args.geo_routing.is_some() {
|
||||||
|
// TODO: rethink the default group. I just picked one for now.
|
||||||
|
TopologyStructure::GeoAware(args.geo_routing.unwrap_or(CountryGroup::Europe))
|
||||||
|
} else {
|
||||||
|
TopologyStructure::default()
|
||||||
|
};
|
||||||
|
|
||||||
let packet_type = if args.outfox {
|
let packet_type = if args.outfox {
|
||||||
PacketType::Outfox
|
PacketType::Outfox
|
||||||
} else {
|
} else {
|
||||||
@@ -114,6 +131,10 @@ pub(crate) fn override_config(config: Config, args: OverrideConfig) -> Config {
|
|||||||
// NOTE: see comment above about the order of the other disble cover traffic config
|
// NOTE: see comment above about the order of the other disble cover traffic config
|
||||||
.with_base(BaseClientConfig::with_disabled_cover_traffic, args.no_cover)
|
.with_base(BaseClientConfig::with_disabled_cover_traffic, args.no_cover)
|
||||||
.with_base(BaseClientConfig::with_packet_type, packet_type)
|
.with_base(BaseClientConfig::with_packet_type, packet_type)
|
||||||
|
.with_base(
|
||||||
|
BaseClientConfig::with_topology_structure,
|
||||||
|
topology_structure,
|
||||||
|
)
|
||||||
.with_optional(Config::with_anonymous_replies, args.use_anonymous_replies)
|
.with_optional(Config::with_anonymous_replies, args.use_anonymous_replies)
|
||||||
.with_optional(Config::with_port, args.port)
|
.with_optional(Config::with_port, args.port)
|
||||||
.with_optional_base_custom_env(
|
.with_optional_base_custom_env(
|
||||||
|
|||||||
@@ -11,6 +11,7 @@ use clap::Args;
|
|||||||
use log::*;
|
use log::*;
|
||||||
use nym_bin_common::version_checker::is_minor_version_compatible;
|
use nym_bin_common::version_checker::is_minor_version_compatible;
|
||||||
use nym_client_core::client::base_client::storage::OnDiskPersistent;
|
use nym_client_core::client::base_client::storage::OnDiskPersistent;
|
||||||
|
use nym_client_core::client::topology_control::geo_aware_provider::CountryGroup;
|
||||||
use nym_crypto::asymmetric::identity;
|
use nym_crypto::asymmetric::identity;
|
||||||
use nym_socks5_client_core::NymClient;
|
use nym_socks5_client_core::NymClient;
|
||||||
use nym_sphinx::addressing::clients::Recipient;
|
use nym_sphinx::addressing::clients::Recipient;
|
||||||
@@ -60,6 +61,10 @@ pub(crate) struct Run {
|
|||||||
#[clap(long, hide = true)]
|
#[clap(long, hide = true)]
|
||||||
no_cover: bool,
|
no_cover: bool,
|
||||||
|
|
||||||
|
/// Set geo-aware mixnode selection when sending mixnet traffic, for experiments only.
|
||||||
|
#[clap(long, hide = true, value_parser = validate_country_group)]
|
||||||
|
geo_routing: Option<CountryGroup>,
|
||||||
|
|
||||||
/// Enable medium mixnet traffic, for experiments only.
|
/// Enable medium mixnet traffic, for experiments only.
|
||||||
/// This includes things like disabling cover traffic, no per hop delays, etc.
|
/// This includes things like disabling cover traffic, no per hop delays, etc.
|
||||||
#[clap(long, hide = true)]
|
#[clap(long, hide = true)]
|
||||||
@@ -82,6 +87,7 @@ impl From<Run> for OverrideConfig {
|
|||||||
use_anonymous_replies: run_config.use_anonymous_replies,
|
use_anonymous_replies: run_config.use_anonymous_replies,
|
||||||
fastmode: run_config.fastmode,
|
fastmode: run_config.fastmode,
|
||||||
no_cover: run_config.no_cover,
|
no_cover: run_config.no_cover,
|
||||||
|
geo_routing: run_config.geo_routing,
|
||||||
medium_toggle: run_config.medium_toggle,
|
medium_toggle: run_config.medium_toggle,
|
||||||
nyxd_urls: run_config.nyxd_urls,
|
nyxd_urls: run_config.nyxd_urls,
|
||||||
enabled_credentials_mode: run_config.enabled_credentials_mode,
|
enabled_credentials_mode: run_config.enabled_credentials_mode,
|
||||||
@@ -90,6 +96,13 @@ impl From<Run> for OverrideConfig {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn validate_country_group(s: &str) -> Result<CountryGroup, String> {
|
||||||
|
match s.parse() {
|
||||||
|
Ok(cg) => Ok(cg),
|
||||||
|
Err(_) => Err(format!("failed to parse country group: {}", s)),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// this only checks compatibility between config the binary. It does not take into consideration
|
// this only checks compatibility between config the binary. It does not take into consideration
|
||||||
// network version. It might do so in the future.
|
// network version. It might do so in the future.
|
||||||
fn version_check(cfg: &Config) -> bool {
|
fn version_check(cfg: &Config) -> bool {
|
||||||
|
|||||||
@@ -13,10 +13,13 @@ pub mod error;
|
|||||||
|
|
||||||
#[tokio::main]
|
#[tokio::main]
|
||||||
async fn main() -> Result<(), Box<dyn Error + Send + Sync>> {
|
async fn main() -> Result<(), Box<dyn Error + Send + Sync>> {
|
||||||
setup_logging();
|
|
||||||
maybe_print_banner(crate_name!(), crate_version!());
|
|
||||||
|
|
||||||
let args = commands::Cli::parse();
|
let args = commands::Cli::parse();
|
||||||
setup_env(args.config_env_file.as_ref());
|
setup_env(args.config_env_file.as_ref());
|
||||||
commands::execute(&args).await
|
|
||||||
|
if !args.no_banner {
|
||||||
|
maybe_print_banner(crate_name!(), crate_version!());
|
||||||
|
}
|
||||||
|
setup_logging();
|
||||||
|
|
||||||
|
commands::execute(args).await
|
||||||
}
|
}
|
||||||
|
|||||||
Generated
+13
@@ -2477,6 +2477,7 @@ dependencies = [
|
|||||||
"nym-config",
|
"nym-config",
|
||||||
"nym-credential-storage",
|
"nym-credential-storage",
|
||||||
"nym-crypto",
|
"nym-crypto",
|
||||||
|
"nym-explorer-api-requests",
|
||||||
"nym-gateway-client",
|
"nym-gateway-client",
|
||||||
"nym-gateway-requests",
|
"nym-gateway-requests",
|
||||||
"nym-network-defaults",
|
"nym-network-defaults",
|
||||||
@@ -2487,6 +2488,7 @@ dependencies = [
|
|||||||
"nym-topology",
|
"nym-topology",
|
||||||
"nym-validator-client",
|
"nym-validator-client",
|
||||||
"rand 0.7.3",
|
"rand 0.7.3",
|
||||||
|
"reqwest",
|
||||||
"serde",
|
"serde",
|
||||||
"serde_json",
|
"serde_json",
|
||||||
"sha2 0.10.6",
|
"sha2 0.10.6",
|
||||||
@@ -2692,6 +2694,17 @@ dependencies = [
|
|||||||
"zeroize",
|
"zeroize",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "nym-explorer-api-requests"
|
||||||
|
version = "0.1.0"
|
||||||
|
dependencies = [
|
||||||
|
"nym-contracts-common",
|
||||||
|
"nym-mixnet-contract-common",
|
||||||
|
"nym-validator-client",
|
||||||
|
"schemars",
|
||||||
|
"serde",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "nym-gateway-client"
|
name = "nym-gateway-client"
|
||||||
version = "0.1.0"
|
version = "0.1.0"
|
||||||
|
|||||||
@@ -246,6 +246,7 @@ impl From<TopologyWasm> for ConfigTopology {
|
|||||||
topology.topology_resolution_timeout_ms,
|
topology.topology_resolution_timeout_ms,
|
||||||
),
|
),
|
||||||
disable_refreshing: topology.disable_refreshing,
|
disable_refreshing: topology.disable_refreshing,
|
||||||
|
topology_structure: Default::default(),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -5,9 +5,13 @@
|
|||||||
// and be used by our smart contracts
|
// and be used by our smart contracts
|
||||||
|
|
||||||
use serde::{Deserialize, Serialize};
|
use serde::{Deserialize, Serialize};
|
||||||
|
use std::fmt::{Display, Formatter};
|
||||||
|
|
||||||
#[derive(Debug)]
|
#[derive(Debug)]
|
||||||
pub struct BinaryBuildInformation {
|
pub struct BinaryBuildInformation {
|
||||||
|
/// Provides the name of the binary, i.e. the content of `CARGO_PKG_NAME` environmental variable.
|
||||||
|
pub binary_name: &'static str,
|
||||||
|
|
||||||
// VERGEN_BUILD_TIMESTAMP
|
// VERGEN_BUILD_TIMESTAMP
|
||||||
/// Provides the build timestamp, for example `2021-02-23T20:14:46.558472672+00:00`.
|
/// Provides the build timestamp, for example `2021-02-23T20:14:46.558472672+00:00`.
|
||||||
pub build_timestamp: &'static str,
|
pub build_timestamp: &'static str,
|
||||||
@@ -43,8 +47,9 @@ pub struct BinaryBuildInformation {
|
|||||||
|
|
||||||
impl BinaryBuildInformation {
|
impl BinaryBuildInformation {
|
||||||
// explicitly require the build_version to be passed as it's binary specific
|
// explicitly require the build_version to be passed as it's binary specific
|
||||||
pub const fn new(build_version: &'static str) -> Self {
|
pub const fn new(binary_name: &'static str, build_version: &'static str) -> Self {
|
||||||
BinaryBuildInformation {
|
BinaryBuildInformation {
|
||||||
|
binary_name,
|
||||||
build_timestamp: env!("VERGEN_BUILD_TIMESTAMP"),
|
build_timestamp: env!("VERGEN_BUILD_TIMESTAMP"),
|
||||||
build_version,
|
build_version,
|
||||||
commit_sha: env!("VERGEN_GIT_SHA"),
|
commit_sha: env!("VERGEN_GIT_SHA"),
|
||||||
@@ -58,6 +63,7 @@ impl BinaryBuildInformation {
|
|||||||
|
|
||||||
pub fn to_owned(&self) -> BinaryBuildInformationOwned {
|
pub fn to_owned(&self) -> BinaryBuildInformationOwned {
|
||||||
BinaryBuildInformationOwned {
|
BinaryBuildInformationOwned {
|
||||||
|
binary_name: self.binary_name.to_owned(),
|
||||||
build_timestamp: self.build_timestamp.to_owned(),
|
build_timestamp: self.build_timestamp.to_owned(),
|
||||||
build_version: self.build_version.to_owned(),
|
build_version: self.build_version.to_owned(),
|
||||||
commit_sha: self.commit_sha.to_owned(),
|
commit_sha: self.commit_sha.to_owned(),
|
||||||
@@ -70,39 +76,15 @@ impl BinaryBuildInformation {
|
|||||||
}
|
}
|
||||||
|
|
||||||
pub fn pretty_print(&self) -> String {
|
pub fn pretty_print(&self) -> String {
|
||||||
format!(
|
self.to_owned().to_string()
|
||||||
r#"
|
|
||||||
{:<20}{}
|
|
||||||
{:<20}{}
|
|
||||||
{:<20}{}
|
|
||||||
{:<20}{}
|
|
||||||
{:<20}{}
|
|
||||||
{:<20}{}
|
|
||||||
{:<20}{}
|
|
||||||
{:<20}{}
|
|
||||||
"#,
|
|
||||||
"Build Timestamp:",
|
|
||||||
self.build_timestamp,
|
|
||||||
"Build Version:",
|
|
||||||
self.build_version,
|
|
||||||
"Commit SHA:",
|
|
||||||
self.commit_sha,
|
|
||||||
"Commit Date:",
|
|
||||||
self.commit_timestamp,
|
|
||||||
"Commit Branch:",
|
|
||||||
self.commit_branch,
|
|
||||||
"rustc Version:",
|
|
||||||
self.rustc_version,
|
|
||||||
"rustc Channel:",
|
|
||||||
self.rustc_channel,
|
|
||||||
"cargo Profile:",
|
|
||||||
self.cargo_profile,
|
|
||||||
)
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Clone, Debug, Serialize, Deserialize)]
|
#[derive(Clone, Debug, Serialize, Deserialize)]
|
||||||
pub struct BinaryBuildInformationOwned {
|
pub struct BinaryBuildInformationOwned {
|
||||||
|
/// Provides the name of the binary, i.e. the content of `CARGO_PKG_NAME` environmental variable.
|
||||||
|
pub binary_name: String,
|
||||||
|
|
||||||
// VERGEN_BUILD_TIMESTAMP
|
// VERGEN_BUILD_TIMESTAMP
|
||||||
/// Provides the build timestamp, for example `2021-02-23T20:14:46.558472672+00:00`.
|
/// Provides the build timestamp, for example `2021-02-23T20:14:46.558472672+00:00`.
|
||||||
pub build_timestamp: String,
|
pub build_timestamp: String,
|
||||||
@@ -135,3 +117,62 @@ pub struct BinaryBuildInformationOwned {
|
|||||||
/// Provides the cargo profile that was used for the build, for example `debug`.
|
/// Provides the cargo profile that was used for the build, for example `debug`.
|
||||||
pub cargo_profile: String,
|
pub cargo_profile: String,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
impl Display for BinaryBuildInformationOwned {
|
||||||
|
fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result {
|
||||||
|
write!(
|
||||||
|
f,
|
||||||
|
r#"
|
||||||
|
{:<20}{}
|
||||||
|
{:<20}{}
|
||||||
|
{:<20}{}
|
||||||
|
{:<20}{}
|
||||||
|
{:<20}{}
|
||||||
|
{:<20}{}
|
||||||
|
{:<20}{}
|
||||||
|
{:<20}{}
|
||||||
|
{:<20}{}
|
||||||
|
"#,
|
||||||
|
"Binary Name:",
|
||||||
|
self.binary_name,
|
||||||
|
"Build Timestamp:",
|
||||||
|
self.build_timestamp,
|
||||||
|
"Build Version:",
|
||||||
|
self.build_version,
|
||||||
|
"Commit SHA:",
|
||||||
|
self.commit_sha,
|
||||||
|
"Commit Date:",
|
||||||
|
self.commit_timestamp,
|
||||||
|
"Commit Branch:",
|
||||||
|
self.commit_branch,
|
||||||
|
"rustc Version:",
|
||||||
|
self.rustc_version,
|
||||||
|
"rustc Channel:",
|
||||||
|
self.rustc_channel,
|
||||||
|
"cargo Profile:",
|
||||||
|
self.cargo_profile,
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// since this macro will get expanded at the callsite, it will pull in correct binary version
|
||||||
|
#[macro_export]
|
||||||
|
macro_rules! bin_info {
|
||||||
|
() => {
|
||||||
|
$crate::build_information::BinaryBuildInformation::new(
|
||||||
|
env!("CARGO_PKG_NAME"),
|
||||||
|
env!("CARGO_PKG_VERSION"),
|
||||||
|
)
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
#[macro_export]
|
||||||
|
macro_rules! bin_info_owned {
|
||||||
|
() => {
|
||||||
|
$crate::build_information::BinaryBuildInformation::new(
|
||||||
|
env!("CARGO_PKG_NAME"),
|
||||||
|
env!("CARGO_PKG_VERSION"),
|
||||||
|
)
|
||||||
|
.to_owned()
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|||||||
@@ -10,27 +10,29 @@ rust-version = "1.66"
|
|||||||
[dependencies]
|
[dependencies]
|
||||||
async-trait = { workspace = true }
|
async-trait = { workspace = true }
|
||||||
base64 = "0.21.2"
|
base64 = "0.21.2"
|
||||||
dirs = "4.0"
|
|
||||||
dashmap = "5.4.0"
|
dashmap = "5.4.0"
|
||||||
|
dirs = "4.0"
|
||||||
futures = "0.3"
|
futures = "0.3"
|
||||||
humantime-serde = "1.0"
|
humantime-serde = "1.0"
|
||||||
log = { workspace = true }
|
log = { workspace = true }
|
||||||
rand = { version = "0.7.3", features = ["wasm-bindgen"] }
|
rand = { version = "0.7.3", features = ["wasm-bindgen"] }
|
||||||
|
reqwest = { workspace = true }
|
||||||
serde = { workspace = true, features = ["derive"] }
|
serde = { workspace = true, features = ["derive"] }
|
||||||
serde_json = { workspace = true }
|
serde_json = { workspace = true }
|
||||||
sha2 = "0.10.6"
|
sha2 = "0.10.6"
|
||||||
tap = "1.0.1"
|
tap = "1.0.1"
|
||||||
thiserror = "1.0.34"
|
thiserror = "1.0.34"
|
||||||
url = { version ="2.2", features = ["serde"] }
|
|
||||||
tungstenite = { version = "0.13.0", default-features = false }
|
|
||||||
tokio = { version = "1.24.1", features = ["macros"]}
|
|
||||||
time = "0.3.17"
|
time = "0.3.17"
|
||||||
|
tokio = { version = "1.24.1", features = ["macros"]}
|
||||||
|
tungstenite = { version = "0.13.0", default-features = false }
|
||||||
|
url = { version ="2.2", features = ["serde"] }
|
||||||
zeroize = { workspace = true }
|
zeroize = { workspace = true }
|
||||||
|
|
||||||
# internal
|
# internal
|
||||||
nym-bandwidth-controller = { path = "../bandwidth-controller" }
|
nym-bandwidth-controller = { path = "../bandwidth-controller" }
|
||||||
nym-config = { path = "../config" }
|
nym-config = { path = "../config" }
|
||||||
nym-crypto = { path = "../crypto" }
|
nym-crypto = { path = "../crypto" }
|
||||||
|
nym-explorer-api-requests = { path = "../../explorer-api/explorer-api-requests" }
|
||||||
nym-gateway-client = { path = "../client-libs/gateway-client" }
|
nym-gateway-client = { path = "../client-libs/gateway-client" }
|
||||||
#gateway-client = { path = "../../common/client-libs/gateway-client", default-features = false, features = ["wasm", "coconut"] }
|
#gateway-client = { path = "../../common/client-libs/gateway-client", default-features = false, features = ["wasm", "coconut"] }
|
||||||
nym-gateway-requests = { path = "../../gateway/gateway-requests" }
|
nym-gateway-requests = { path = "../../gateway/gateway-requests" }
|
||||||
|
|||||||
@@ -2,6 +2,7 @@
|
|||||||
// SPDX-License-Identifier: Apache-2.0
|
// SPDX-License-Identifier: Apache-2.0
|
||||||
|
|
||||||
use super::received_buffer::ReceivedBufferMessage;
|
use super::received_buffer::ReceivedBufferMessage;
|
||||||
|
use super::topology_control::geo_aware_provider::GeoAwareTopologyProvider;
|
||||||
use crate::client::base_client::storage::MixnetClientStorage;
|
use crate::client::base_client::storage::MixnetClientStorage;
|
||||||
use crate::client::cover_traffic_stream::LoopCoverTrafficStream;
|
use crate::client::cover_traffic_stream::LoopCoverTrafficStream;
|
||||||
use crate::client::inbound_messages::{InputMessage, InputMessageReceiver, InputMessageSender};
|
use crate::client::inbound_messages::{InputMessage, InputMessageReceiver, InputMessageSender};
|
||||||
@@ -339,14 +340,20 @@ where
|
|||||||
|
|
||||||
fn setup_topology_provider(
|
fn setup_topology_provider(
|
||||||
custom_provider: Option<Box<dyn TopologyProvider + Send + Sync>>,
|
custom_provider: Option<Box<dyn TopologyProvider + Send + Sync>>,
|
||||||
|
provider_from_config: config::TopologyStructure,
|
||||||
nym_api_urls: Vec<Url>,
|
nym_api_urls: Vec<Url>,
|
||||||
) -> Box<dyn TopologyProvider + Send + Sync> {
|
) -> Box<dyn TopologyProvider + Send + Sync> {
|
||||||
// if no custom provider was ... provided ..., create one using nym-api
|
// if no custom provider was ... provided ..., create one using nym-api
|
||||||
custom_provider.unwrap_or_else(|| {
|
custom_provider.unwrap_or_else(|| match provider_from_config {
|
||||||
Box::new(NymApiTopologyProvider::new(
|
config::TopologyStructure::NymApi => Box::new(NymApiTopologyProvider::new(
|
||||||
nym_api_urls,
|
nym_api_urls,
|
||||||
env!("CARGO_PKG_VERSION").to_string(),
|
env!("CARGO_PKG_VERSION").to_string(),
|
||||||
))
|
)),
|
||||||
|
config::TopologyStructure::GeoAware(group) => Box::new(GeoAwareTopologyProvider::new(
|
||||||
|
nym_api_urls,
|
||||||
|
env!("CARGO_PKG_VERSION").to_string(),
|
||||||
|
group,
|
||||||
|
)),
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -521,8 +528,10 @@ where
|
|||||||
|
|
||||||
let topology_provider = Self::setup_topology_provider(
|
let topology_provider = Self::setup_topology_provider(
|
||||||
self.custom_topology_provider.take(),
|
self.custom_topology_provider.take(),
|
||||||
|
self.config.debug.topology.topology_structure,
|
||||||
self.config.get_nym_api_endpoints(),
|
self.config.get_nym_api_endpoints(),
|
||||||
);
|
);
|
||||||
|
|
||||||
Self::start_topology_refresher(
|
Self::start_topology_refresher(
|
||||||
topology_provider,
|
topology_provider,
|
||||||
self.config.debug.topology,
|
self.config.debug.topology,
|
||||||
|
|||||||
@@ -0,0 +1,319 @@
|
|||||||
|
use std::{collections::HashMap, fmt};
|
||||||
|
|
||||||
|
use log::{debug, error, info};
|
||||||
|
use nym_explorer_api_requests::PrettyDetailedMixNodeBond;
|
||||||
|
use nym_topology::{
|
||||||
|
nym_topology_from_detailed,
|
||||||
|
provider_trait::{async_trait, TopologyProvider},
|
||||||
|
NymTopology,
|
||||||
|
};
|
||||||
|
use nym_validator_client::client::MixId;
|
||||||
|
use rand::{prelude::SliceRandom, thread_rng};
|
||||||
|
use serde::{Deserialize, Serialize};
|
||||||
|
use url::Url;
|
||||||
|
|
||||||
|
const MIN_NODES_PER_LAYER: usize = 1;
|
||||||
|
const EXPLORER_API_MIXNODES_URL: &str = "https://explorer.nymtech.net/api/v1/mix-nodes";
|
||||||
|
|
||||||
|
// TODO: create a explorer-api-client
|
||||||
|
async fn fetch_mixnodes_from_explorer_api() -> Option<Vec<PrettyDetailedMixNodeBond>> {
|
||||||
|
reqwest::get(EXPLORER_API_MIXNODES_URL)
|
||||||
|
.await
|
||||||
|
.ok()?
|
||||||
|
.json::<Vec<PrettyDetailedMixNodeBond>>()
|
||||||
|
.await
|
||||||
|
.ok()
|
||||||
|
}
|
||||||
|
|
||||||
|
#[derive(Copy, Clone, Hash, PartialEq, Eq, Serialize, Deserialize, Debug)]
|
||||||
|
pub enum CountryGroup {
|
||||||
|
Europe,
|
||||||
|
NorthAmerica,
|
||||||
|
SouthAmerica,
|
||||||
|
Oceania,
|
||||||
|
Asia,
|
||||||
|
Africa,
|
||||||
|
Unknown,
|
||||||
|
}
|
||||||
|
|
||||||
|
impl CountryGroup {
|
||||||
|
// We map contry codes into group, which initially are continent codes to a first approximation,
|
||||||
|
// but we do it manually to reserve the right to tweak this distribution for our purposes.
|
||||||
|
fn new(country_code: &str) -> Self {
|
||||||
|
let country_code = country_code.to_uppercase();
|
||||||
|
use CountryGroup::*;
|
||||||
|
match country_code.as_ref() {
|
||||||
|
// Europe
|
||||||
|
"AT" => Europe,
|
||||||
|
"BG" => Europe,
|
||||||
|
"CH" => Europe,
|
||||||
|
"CY" => Europe,
|
||||||
|
"CZ" => Europe,
|
||||||
|
"DE" => Europe,
|
||||||
|
"DK" => Europe,
|
||||||
|
"ES" => Europe,
|
||||||
|
"FI" => Europe,
|
||||||
|
"FR" => Europe,
|
||||||
|
"GB" => Europe,
|
||||||
|
"GR" => Europe,
|
||||||
|
"IE" => Europe,
|
||||||
|
"IT" => Europe,
|
||||||
|
"LT" => Europe,
|
||||||
|
"LU" => Europe,
|
||||||
|
"LV" => Europe,
|
||||||
|
"MD" => Europe,
|
||||||
|
"MT" => Europe,
|
||||||
|
"NL" => Europe,
|
||||||
|
"NO" => Europe,
|
||||||
|
"PL" => Europe,
|
||||||
|
"RO" => Europe,
|
||||||
|
"SE" => Europe,
|
||||||
|
"SK" => Europe,
|
||||||
|
"TR" => Europe,
|
||||||
|
"UA" => Europe,
|
||||||
|
|
||||||
|
// North America
|
||||||
|
"CA" => NorthAmerica,
|
||||||
|
"MX" => NorthAmerica,
|
||||||
|
"US" => NorthAmerica,
|
||||||
|
|
||||||
|
// South America
|
||||||
|
"AR" => SouthAmerica,
|
||||||
|
"BR" => SouthAmerica,
|
||||||
|
"CL" => SouthAmerica,
|
||||||
|
"CO" => SouthAmerica,
|
||||||
|
"CR" => SouthAmerica,
|
||||||
|
"GT" => SouthAmerica,
|
||||||
|
|
||||||
|
// Oceania
|
||||||
|
"AU" => Oceania,
|
||||||
|
|
||||||
|
// Asia
|
||||||
|
"AM" => Asia,
|
||||||
|
"BH" => Asia,
|
||||||
|
"CN" => Asia,
|
||||||
|
"GE" => Asia,
|
||||||
|
"HK" => Asia,
|
||||||
|
"ID" => Asia,
|
||||||
|
"IL" => Asia,
|
||||||
|
"IN" => Asia,
|
||||||
|
"JP" => Asia,
|
||||||
|
"KH" => Asia,
|
||||||
|
"KR" => Asia,
|
||||||
|
"KZ" => Asia,
|
||||||
|
"MY" => Asia,
|
||||||
|
"RU" => Asia,
|
||||||
|
"SG" => Asia,
|
||||||
|
"TH" => Asia,
|
||||||
|
"VN" => Asia,
|
||||||
|
|
||||||
|
// Africa
|
||||||
|
"SC" => Africa,
|
||||||
|
"UG" => Africa,
|
||||||
|
"ZA" => Africa,
|
||||||
|
|
||||||
|
// And group level codes work too
|
||||||
|
"EU" => Europe,
|
||||||
|
"NA" => NorthAmerica,
|
||||||
|
"SA" => SouthAmerica,
|
||||||
|
"OC" => Oceania,
|
||||||
|
"AS" => Asia,
|
||||||
|
"AF" => Africa,
|
||||||
|
|
||||||
|
// And some aliases
|
||||||
|
"EUROPE" => Europe,
|
||||||
|
"NORTHAMERICA" => NorthAmerica,
|
||||||
|
"SOUTHAMERICA" => SouthAmerica,
|
||||||
|
"OCEANIA" => Oceania,
|
||||||
|
"ASIA" => Asia,
|
||||||
|
"AFRICA" => Africa,
|
||||||
|
|
||||||
|
_ => {
|
||||||
|
info!("Unknown country code: {}", country_code);
|
||||||
|
Unknown
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl fmt::Display for CountryGroup {
|
||||||
|
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
|
||||||
|
use CountryGroup::*;
|
||||||
|
match self {
|
||||||
|
Europe => write!(f, "EU"),
|
||||||
|
NorthAmerica => write!(f, "NA"),
|
||||||
|
SouthAmerica => write!(f, "SA"),
|
||||||
|
Oceania => write!(f, "OC"),
|
||||||
|
Asia => write!(f, "AS"),
|
||||||
|
Africa => write!(f, "AF"),
|
||||||
|
Unknown => write!(f, "Unknown"),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl std::str::FromStr for CountryGroup {
|
||||||
|
type Err = ();
|
||||||
|
|
||||||
|
fn from_str(s: &str) -> Result<Self, Self::Err> {
|
||||||
|
let group = CountryGroup::new(s);
|
||||||
|
if group == CountryGroup::Unknown {
|
||||||
|
Err(())
|
||||||
|
} else {
|
||||||
|
Ok(group)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl CountryGroup {
|
||||||
|
#[allow(unused)]
|
||||||
|
fn known(self) -> Option<CountryGroup> {
|
||||||
|
use CountryGroup::*;
|
||||||
|
match self {
|
||||||
|
Europe | NorthAmerica | SouthAmerica | Oceania | Asia | Africa => Some(self),
|
||||||
|
Unknown => None,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fn group_mixnodes_by_country_code(
|
||||||
|
mixnodes: Vec<PrettyDetailedMixNodeBond>,
|
||||||
|
) -> HashMap<CountryGroup, Vec<MixId>> {
|
||||||
|
mixnodes
|
||||||
|
.into_iter()
|
||||||
|
.fold(HashMap::<CountryGroup, Vec<MixId>>::new(), |mut acc, m| {
|
||||||
|
if let Some(ref location) = m.location {
|
||||||
|
let country_code = location.two_letter_iso_country_code.clone();
|
||||||
|
let group_code = CountryGroup::new(country_code.as_str());
|
||||||
|
let mixnodes = acc.entry(group_code).or_insert_with(Vec::new);
|
||||||
|
mixnodes.push(m.mix_id);
|
||||||
|
}
|
||||||
|
acc
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
fn log_mixnode_distribution(mixnodes: &HashMap<CountryGroup, Vec<MixId>>) {
|
||||||
|
let mixnode_distribution = mixnodes
|
||||||
|
.iter()
|
||||||
|
.map(|(k, v)| format!("{}: {}", k, v.len()))
|
||||||
|
.collect::<Vec<_>>()
|
||||||
|
.join(", ");
|
||||||
|
debug!("Mixnode distribution - {}", mixnode_distribution);
|
||||||
|
}
|
||||||
|
|
||||||
|
fn check_layer_integrity(topology: NymTopology) -> Result<(), ()> {
|
||||||
|
let mixes = topology.mixes();
|
||||||
|
if mixes.keys().len() < 3 {
|
||||||
|
error!("Layer is missing in topology!");
|
||||||
|
return Err(());
|
||||||
|
}
|
||||||
|
for (layer, mixnodes) in mixes {
|
||||||
|
debug!("Layer {:?} has {} mixnodes", layer, mixnodes.len());
|
||||||
|
if mixnodes.len() < MIN_NODES_PER_LAYER {
|
||||||
|
error!(
|
||||||
|
"There are only {} mixnodes in layer {:?}",
|
||||||
|
mixnodes.len(),
|
||||||
|
layer
|
||||||
|
);
|
||||||
|
return Err(());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
|
|
||||||
|
pub struct GeoAwareTopologyProvider {
|
||||||
|
validator_client: nym_validator_client::client::NymApiClient,
|
||||||
|
filter_on: CountryGroup,
|
||||||
|
client_version: String,
|
||||||
|
}
|
||||||
|
|
||||||
|
impl GeoAwareTopologyProvider {
|
||||||
|
pub fn new(
|
||||||
|
mut nym_api_urls: Vec<Url>,
|
||||||
|
client_version: String,
|
||||||
|
filter_on: CountryGroup,
|
||||||
|
) -> GeoAwareTopologyProvider {
|
||||||
|
log::info!(
|
||||||
|
"Creating geo-aware topology provider with filter on {:?}",
|
||||||
|
filter_on
|
||||||
|
);
|
||||||
|
nym_api_urls.shuffle(&mut thread_rng());
|
||||||
|
|
||||||
|
GeoAwareTopologyProvider {
|
||||||
|
validator_client: nym_validator_client::client::NymApiClient::new(
|
||||||
|
nym_api_urls[0].clone(),
|
||||||
|
),
|
||||||
|
filter_on,
|
||||||
|
client_version,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
async fn get_topology(&self) -> Option<NymTopology> {
|
||||||
|
let mixnodes = match self.validator_client.get_cached_active_mixnodes().await {
|
||||||
|
Err(err) => {
|
||||||
|
error!("failed to get network mixnodes - {err}");
|
||||||
|
return None;
|
||||||
|
}
|
||||||
|
Ok(mixes) => mixes,
|
||||||
|
};
|
||||||
|
|
||||||
|
let gateways = match self.validator_client.get_cached_gateways().await {
|
||||||
|
Err(err) => {
|
||||||
|
error!("failed to get network gateways - {err}");
|
||||||
|
return None;
|
||||||
|
}
|
||||||
|
Ok(gateways) => gateways,
|
||||||
|
};
|
||||||
|
|
||||||
|
// Also fetch mixnodes cached by explorer-api, with the purpose of getting their
|
||||||
|
// geolocation.
|
||||||
|
debug!("Fetching mixnodes from explorer-api...");
|
||||||
|
let Some(mixnodes_from_explorer_api) = fetch_mixnodes_from_explorer_api().await else {
|
||||||
|
error!("failed to get mixnodes from explorer-api");
|
||||||
|
return None;
|
||||||
|
};
|
||||||
|
|
||||||
|
// Partition mixnodes_from_explorer_api according to the value of
|
||||||
|
// two_letter_iso_country_code.
|
||||||
|
// NOTE: we construct the full distribution here, but only use the one we're interested in.
|
||||||
|
// The reason we this instead of a straight filter is that this opens up the possibility to
|
||||||
|
// complement a small grouping with mixnodes from adjecent countries.
|
||||||
|
let mixnode_distribution = group_mixnodes_by_country_code(mixnodes_from_explorer_api);
|
||||||
|
log_mixnode_distribution(&mixnode_distribution);
|
||||||
|
|
||||||
|
let Some(filtered_mixnode_ids) = mixnode_distribution.get(&self.filter_on) else {
|
||||||
|
error!("no mixnodes found for: {}", self.filter_on);
|
||||||
|
return None;
|
||||||
|
};
|
||||||
|
|
||||||
|
let mixnodes = mixnodes
|
||||||
|
.into_iter()
|
||||||
|
.filter(|m| filtered_mixnode_ids.contains(&m.mix_id()))
|
||||||
|
.collect::<Vec<_>>();
|
||||||
|
|
||||||
|
let topology = nym_topology_from_detailed(mixnodes, gateways)
|
||||||
|
.filter_system_version(&self.client_version);
|
||||||
|
|
||||||
|
// TODO: return real error type
|
||||||
|
check_layer_integrity(topology.clone()).ok()?;
|
||||||
|
|
||||||
|
Some(topology)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#[cfg(not(target_arch = "wasm32"))]
|
||||||
|
#[async_trait]
|
||||||
|
impl TopologyProvider for GeoAwareTopologyProvider {
|
||||||
|
// this will be manually refreshed on a timer specified inside mixnet client config
|
||||||
|
async fn get_new_topology(&mut self) -> Option<NymTopology> {
|
||||||
|
self.get_topology().await
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#[cfg(target_arch = "wasm32")]
|
||||||
|
#[async_trait(?Send)]
|
||||||
|
impl TopologyProvider for GeoAwareTopologyProvider {
|
||||||
|
// this will be manually refreshed on a timer specified inside mixnet client config
|
||||||
|
async fn get_new_topology(&mut self) -> Option<NymTopology> {
|
||||||
|
self.get_topology().await
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -10,6 +10,7 @@ use nym_topology::NymTopologyError;
|
|||||||
use std::time::Duration;
|
use std::time::Duration;
|
||||||
|
|
||||||
mod accessor;
|
mod accessor;
|
||||||
|
pub mod geo_aware_provider;
|
||||||
pub(crate) mod nym_api_provider;
|
pub(crate) mod nym_api_provider;
|
||||||
|
|
||||||
// TODO: move it to config later
|
// TODO: move it to config later
|
||||||
|
|||||||
@@ -8,7 +8,7 @@ use serde::{Deserialize, Serialize};
|
|||||||
use std::time::Duration;
|
use std::time::Duration;
|
||||||
use url::Url;
|
use url::Url;
|
||||||
|
|
||||||
use crate::error::ClientCoreError;
|
use crate::{client::topology_control::geo_aware_provider::CountryGroup, error::ClientCoreError};
|
||||||
#[cfg(target_arch = "wasm32")]
|
#[cfg(target_arch = "wasm32")]
|
||||||
use wasm_bindgen::prelude::*;
|
use wasm_bindgen::prelude::*;
|
||||||
|
|
||||||
@@ -158,6 +158,15 @@ impl Config {
|
|||||||
self
|
self
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn with_topology_structure(mut self, topology_structure: TopologyStructure) -> Self {
|
||||||
|
self.set_topology_structure(topology_structure);
|
||||||
|
self
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn set_topology_structure(&mut self, topology_structure: TopologyStructure) {
|
||||||
|
self.debug.topology.topology_structure = topology_structure;
|
||||||
|
}
|
||||||
|
|
||||||
pub fn with_no_per_hop_delays(mut self, no_per_hop_delays: bool) -> Self {
|
pub fn with_no_per_hop_delays(mut self, no_per_hop_delays: bool) -> Self {
|
||||||
if no_per_hop_delays {
|
if no_per_hop_delays {
|
||||||
self.set_no_per_hop_delays()
|
self.set_no_per_hop_delays()
|
||||||
@@ -466,6 +475,16 @@ pub struct Topology {
|
|||||||
/// the first valid instance.
|
/// the first valid instance.
|
||||||
/// Supersedes `topology_refresh_rate_ms`.
|
/// Supersedes `topology_refresh_rate_ms`.
|
||||||
pub disable_refreshing: bool,
|
pub disable_refreshing: bool,
|
||||||
|
|
||||||
|
/// Specifies the mixnode topology to be used for sending packets.
|
||||||
|
pub topology_structure: TopologyStructure,
|
||||||
|
}
|
||||||
|
|
||||||
|
#[derive(Default, Copy, Clone, Debug, PartialEq, Serialize, Deserialize)]
|
||||||
|
pub enum TopologyStructure {
|
||||||
|
#[default]
|
||||||
|
NymApi,
|
||||||
|
GeoAware(CountryGroup),
|
||||||
}
|
}
|
||||||
|
|
||||||
impl Default for Topology {
|
impl Default for Topology {
|
||||||
@@ -474,6 +493,7 @@ impl Default for Topology {
|
|||||||
topology_refresh_rate: DEFAULT_TOPOLOGY_REFRESH_RATE,
|
topology_refresh_rate: DEFAULT_TOPOLOGY_REFRESH_RATE,
|
||||||
topology_resolution_timeout: DEFAULT_TOPOLOGY_RESOLUTION_TIMEOUT,
|
topology_resolution_timeout: DEFAULT_TOPOLOGY_RESOLUTION_TIMEOUT,
|
||||||
disable_refreshing: false,
|
disable_refreshing: false,
|
||||||
|
topology_structure: TopologyStructure::default(),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -267,6 +267,7 @@ impl From<TopologyV1_1_20_2> for Topology {
|
|||||||
topology_refresh_rate: value.topology_refresh_rate,
|
topology_refresh_rate: value.topology_refresh_rate,
|
||||||
topology_resolution_timeout: value.topology_resolution_timeout,
|
topology_resolution_timeout: value.topology_resolution_timeout,
|
||||||
disable_refreshing: value.disable_refreshing,
|
disable_refreshing: value.disable_refreshing,
|
||||||
|
topology_structure: Default::default(),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -58,6 +58,10 @@ impl MixNodeDetails {
|
|||||||
self.bond_information.mix_id
|
self.bond_information.mix_id
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn layer(&self) -> Layer {
|
||||||
|
self.bond_information.layer
|
||||||
|
}
|
||||||
|
|
||||||
pub fn is_unbonding(&self) -> bool {
|
pub fn is_unbonding(&self) -> bool {
|
||||||
self.bond_information.is_unbonding
|
self.bond_information.is_unbonding
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -27,7 +27,7 @@ thiserror = "1.0.37"
|
|||||||
zeroize = { workspace = true, optional = true, features = ["zeroize_derive"] }
|
zeroize = { workspace = true, optional = true, features = ["zeroize_derive"] }
|
||||||
|
|
||||||
# internal
|
# internal
|
||||||
nym-sphinx-types = { path = "../nymsphinx/types", version = "0.2.0" }
|
nym-sphinx-types = { path = "../nymsphinx/types", version = "0.2.0", default-features = false }
|
||||||
nym-pemstore = { path = "../../common/pemstore", version = "0.3.0" }
|
nym-pemstore = { path = "../../common/pemstore", version = "0.3.0" }
|
||||||
|
|
||||||
[dev-dependencies]
|
[dev-dependencies]
|
||||||
@@ -38,3 +38,5 @@ serde = ["serde_crate", "serde_bytes", "ed25519-dalek/serde", "x25519-dalek/serd
|
|||||||
asymmetric = ["x25519-dalek", "ed25519-dalek", "zeroize"]
|
asymmetric = ["x25519-dalek", "ed25519-dalek", "zeroize"]
|
||||||
hashing = ["blake3", "digest", "hkdf", "hmac", "generic-array"]
|
hashing = ["blake3", "digest", "hkdf", "hmac", "generic-array"]
|
||||||
symmetric = ["aes", "ctr", "cipher", "generic-array"]
|
symmetric = ["aes", "ctr", "cipher", "generic-array"]
|
||||||
|
sphinx = ["nym-sphinx-types/sphinx"]
|
||||||
|
outfox = ["nym-sphinx-types/outfox"]
|
||||||
|
|||||||
@@ -273,36 +273,42 @@ impl PemStorableKey for PrivateKey {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// compatibility with sphinx keys:
|
// compatibility with sphinx keys:
|
||||||
|
#[cfg(feature = "sphinx")]
|
||||||
impl From<PublicKey> for nym_sphinx_types::PublicKey {
|
impl From<PublicKey> for nym_sphinx_types::PublicKey {
|
||||||
fn from(key: PublicKey) -> Self {
|
fn from(key: PublicKey) -> Self {
|
||||||
nym_sphinx_types::PublicKey::from(key.to_bytes())
|
nym_sphinx_types::PublicKey::from(key.to_bytes())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[cfg(feature = "sphinx")]
|
||||||
impl<'a> From<&'a PublicKey> for nym_sphinx_types::PublicKey {
|
impl<'a> From<&'a PublicKey> for nym_sphinx_types::PublicKey {
|
||||||
fn from(key: &'a PublicKey) -> Self {
|
fn from(key: &'a PublicKey) -> Self {
|
||||||
nym_sphinx_types::PublicKey::from((*key).to_bytes())
|
nym_sphinx_types::PublicKey::from((*key).to_bytes())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[cfg(feature = "sphinx")]
|
||||||
impl From<nym_sphinx_types::PublicKey> for PublicKey {
|
impl From<nym_sphinx_types::PublicKey> for PublicKey {
|
||||||
fn from(pub_key: nym_sphinx_types::PublicKey) -> Self {
|
fn from(pub_key: nym_sphinx_types::PublicKey) -> Self {
|
||||||
Self(x25519_dalek::PublicKey::from(*pub_key.as_bytes()))
|
Self(x25519_dalek::PublicKey::from(*pub_key.as_bytes()))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[cfg(feature = "sphinx")]
|
||||||
impl From<PrivateKey> for nym_sphinx_types::PrivateKey {
|
impl From<PrivateKey> for nym_sphinx_types::PrivateKey {
|
||||||
fn from(key: PrivateKey) -> Self {
|
fn from(key: PrivateKey) -> Self {
|
||||||
nym_sphinx_types::PrivateKey::from(key.to_bytes())
|
nym_sphinx_types::PrivateKey::from(key.to_bytes())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[cfg(feature = "sphinx")]
|
||||||
impl<'a> From<&'a PrivateKey> for nym_sphinx_types::PrivateKey {
|
impl<'a> From<&'a PrivateKey> for nym_sphinx_types::PrivateKey {
|
||||||
fn from(key: &'a PrivateKey) -> Self {
|
fn from(key: &'a PrivateKey) -> Self {
|
||||||
nym_sphinx_types::PrivateKey::from(key.to_bytes())
|
nym_sphinx_types::PrivateKey::from(key.to_bytes())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[cfg(feature = "sphinx")]
|
||||||
impl From<nym_sphinx_types::PrivateKey> for PrivateKey {
|
impl From<nym_sphinx_types::PrivateKey> for PrivateKey {
|
||||||
fn from(private_key: nym_sphinx_types::PrivateKey) -> Self {
|
fn from(private_key: nym_sphinx_types::PrivateKey) -> Self {
|
||||||
let private_key_bytes = private_key.to_bytes();
|
let private_key_bytes = private_key.to_bytes();
|
||||||
|
|||||||
@@ -5,6 +5,7 @@ pub use ed25519_dalek::ed25519::signature::Signature as SignatureTrait;
|
|||||||
pub use ed25519_dalek::SignatureError;
|
pub use ed25519_dalek::SignatureError;
|
||||||
pub use ed25519_dalek::{Verifier, PUBLIC_KEY_LENGTH, SECRET_KEY_LENGTH, SIGNATURE_LENGTH};
|
pub use ed25519_dalek::{Verifier, PUBLIC_KEY_LENGTH, SECRET_KEY_LENGTH, SIGNATURE_LENGTH};
|
||||||
use nym_pemstore::traits::{PemStorableKey, PemStorableKeyPair};
|
use nym_pemstore::traits::{PemStorableKey, PemStorableKeyPair};
|
||||||
|
#[cfg(feature = "sphinx")]
|
||||||
use nym_sphinx_types::{DestinationAddressBytes, DESTINATION_ADDRESS_LENGTH};
|
use nym_sphinx_types::{DestinationAddressBytes, DESTINATION_ADDRESS_LENGTH};
|
||||||
use std::fmt::{self, Display, Formatter};
|
use std::fmt::{self, Display, Formatter};
|
||||||
use std::str::FromStr;
|
use std::str::FromStr;
|
||||||
@@ -113,6 +114,7 @@ impl Display for PublicKey {
|
|||||||
}
|
}
|
||||||
|
|
||||||
impl PublicKey {
|
impl PublicKey {
|
||||||
|
#[cfg(feature = "sphinx")]
|
||||||
pub fn derive_destination_address(&self) -> DestinationAddressBytes {
|
pub fn derive_destination_address(&self) -> DestinationAddressBytes {
|
||||||
let mut temporary_address = [0u8; DESTINATION_ADDRESS_LENGTH];
|
let mut temporary_address = [0u8; DESTINATION_ADDRESS_LENGTH];
|
||||||
let public_key_bytes = self.to_bytes();
|
let public_key_bytes = self.to_bytes();
|
||||||
|
|||||||
@@ -19,7 +19,7 @@ nym-pemstore = { path = "../../pemstore" }
|
|||||||
nym-sphinx-addressing = { path = "../addressing" }
|
nym-sphinx-addressing = { path = "../addressing" }
|
||||||
nym-sphinx-params = { path = "../params" }
|
nym-sphinx-params = { path = "../params" }
|
||||||
nym-sphinx-routing = { path = "../routing" }
|
nym-sphinx-routing = { path = "../routing" }
|
||||||
nym-sphinx-types = { path = "../types" }
|
nym-sphinx-types = { path = "../types", features = ["sphinx"] }
|
||||||
nym-topology = { path = "../../topology" }
|
nym-topology = { path = "../../topology" }
|
||||||
|
|
||||||
[features]
|
[features]
|
||||||
|
|||||||
@@ -9,7 +9,7 @@ repository = { workspace = true }
|
|||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
nym-crypto = { path = "../../crypto", features = ["asymmetric"] } # all addresses are expressed in terms on their crypto keys
|
nym-crypto = { path = "../../crypto", features = ["asymmetric"] } # all addresses are expressed in terms on their crypto keys
|
||||||
nym-sphinx-types = { path = "../types" } # we need to be able to refer to some types defined inside sphinx crate
|
nym-sphinx-types = { path = "../types", features = ["sphinx"] } # we need to be able to refer to some types defined inside sphinx crate
|
||||||
serde = "1.0" # implementing serialization/deserialization for some types, like `Recipient`
|
serde = "1.0" # implementing serialization/deserialization for some types, like `Recipient`
|
||||||
thiserror = "1.0.37"
|
thiserror = "1.0.37"
|
||||||
|
|
||||||
|
|||||||
@@ -10,6 +10,6 @@ repository = { workspace = true }
|
|||||||
[dependencies]
|
[dependencies]
|
||||||
nym-sphinx-addressing = { path = "../addressing" }
|
nym-sphinx-addressing = { path = "../addressing" }
|
||||||
nym-sphinx-params = { path = "../params" }
|
nym-sphinx-params = { path = "../params" }
|
||||||
nym-sphinx-types = { path = "../types" }
|
nym-sphinx-types = { path = "../types", features = ["sphinx", "outfox"] }
|
||||||
nym-outfox = { path = "../../../nym-outfox" }
|
nym-outfox = { path = "../../../nym-outfox" }
|
||||||
thiserror = "1"
|
thiserror = "1"
|
||||||
|
|||||||
@@ -13,3 +13,7 @@ serde = { workspace = true, features = ["derive"] }
|
|||||||
|
|
||||||
nym-crypto = { path = "../../crypto", features = ["hashing", "symmetric"] }
|
nym-crypto = { path = "../../crypto", features = ["hashing", "symmetric"] }
|
||||||
nym-sphinx-types = { path = "../types" }
|
nym-sphinx-types = { path = "../types" }
|
||||||
|
|
||||||
|
[features]
|
||||||
|
sphinx = ["nym-crypto/sphinx", "nym-sphinx-types/outfox"]
|
||||||
|
outfox = ["nym-crypto/outfox", "nym-sphinx-types/outfox"]
|
||||||
|
|||||||
@@ -1,10 +1,10 @@
|
|||||||
// Copyright 2021-2023 - Nym Technologies SA <contact@nymtech.net>
|
// Copyright 2021-2023 - Nym Technologies SA <contact@nymtech.net>
|
||||||
// SPDX-License-Identifier: Apache-2.0
|
// SPDX-License-Identifier: Apache-2.0
|
||||||
|
|
||||||
use crate::{PacketType, FRAG_ID_LEN};
|
use crate::PacketType;
|
||||||
use nym_sphinx_types::header::HEADER_SIZE;
|
|
||||||
use nym_sphinx_types::{
|
use nym_sphinx_types::{
|
||||||
MIN_PACKET_SIZE, MIX_PARAMS_LEN, OUTFOX_PACKET_OVERHEAD, PAYLOAD_OVERHEAD_SIZE,
|
header::HEADER_SIZE, MIN_PACKET_SIZE, MIX_PARAMS_LEN, OUTFOX_PACKET_OVERHEAD,
|
||||||
|
PAYLOAD_OVERHEAD_SIZE,
|
||||||
};
|
};
|
||||||
use serde::{Deserialize, Serialize};
|
use serde::{Deserialize, Serialize};
|
||||||
use std::cmp::Ordering;
|
use std::cmp::Ordering;
|
||||||
@@ -22,9 +22,10 @@ const SPHINX_PACKET_OVERHEAD: usize = HEADER_SIZE + PAYLOAD_OVERHEAD_SIZE;
|
|||||||
|
|
||||||
// TODO: I'm not entirely sure if we can easily extract `<AckEncryptionAlgorithm as NewStreamCipher>::NonceSize`
|
// TODO: I'm not entirely sure if we can easily extract `<AckEncryptionAlgorithm as NewStreamCipher>::NonceSize`
|
||||||
// into a const usize before relevant stuff is stabilised in rust...
|
// into a const usize before relevant stuff is stabilised in rust...
|
||||||
|
|
||||||
const ACK_IV_SIZE: usize = 16;
|
const ACK_IV_SIZE: usize = 16;
|
||||||
|
|
||||||
const ACK_PACKET_SIZE: usize = ACK_IV_SIZE + FRAG_ID_LEN + SPHINX_PACKET_OVERHEAD;
|
const ACK_PACKET_SIZE: usize = ACK_IV_SIZE + crate::FRAG_ID_LEN + SPHINX_PACKET_OVERHEAD;
|
||||||
const REGULAR_PACKET_SIZE: usize = 2 * 1024 + SPHINX_PACKET_OVERHEAD;
|
const REGULAR_PACKET_SIZE: usize = 2 * 1024 + SPHINX_PACKET_OVERHEAD;
|
||||||
const EXTENDED_PACKET_SIZE_8: usize = 8 * 1024 + SPHINX_PACKET_OVERHEAD;
|
const EXTENDED_PACKET_SIZE_8: usize = 8 * 1024 + SPHINX_PACKET_OVERHEAD;
|
||||||
const EXTENDED_PACKET_SIZE_16: usize = 16 * 1024 + SPHINX_PACKET_OVERHEAD;
|
const EXTENDED_PACKET_SIZE_16: usize = 16 * 1024 + SPHINX_PACKET_OVERHEAD;
|
||||||
@@ -176,6 +177,7 @@ impl PacketSize {
|
|||||||
}
|
}
|
||||||
|
|
||||||
pub const fn payload_overhead(&self) -> usize {
|
pub const fn payload_overhead(&self) -> usize {
|
||||||
|
#[allow(unreachable_patterns)]
|
||||||
match self {
|
match self {
|
||||||
PacketSize::RegularPacket
|
PacketSize::RegularPacket
|
||||||
| PacketSize::AckPacket
|
| PacketSize::AckPacket
|
||||||
|
|||||||
@@ -11,4 +11,6 @@ repository = { workspace = true }
|
|||||||
thiserror = { workspace = true }
|
thiserror = { workspace = true }
|
||||||
|
|
||||||
nym-sphinx-addressing = { path = "../addressing" }
|
nym-sphinx-addressing = { path = "../addressing" }
|
||||||
nym-sphinx-types = { path = "../types" }
|
nym-sphinx-types = { path = "../types", features = ["sphinx"] }
|
||||||
|
|
||||||
|
[features]
|
||||||
@@ -8,6 +8,10 @@ license = { workspace = true }
|
|||||||
repository = { workspace = true }
|
repository = { workspace = true }
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
sphinx-packet = { version = "0.1.0" }
|
sphinx-packet = { version = "0.1.0", optional = true }
|
||||||
nym-outfox = { path = "../../../nym-outfox" }
|
nym-outfox = { path = "../../../nym-outfox", optional = true }
|
||||||
thiserror = "1"
|
thiserror = "1"
|
||||||
|
|
||||||
|
[features]
|
||||||
|
sphinx = ["sphinx-packet"]
|
||||||
|
outfox = ["nym-outfox"]
|
||||||
|
|||||||
@@ -1,12 +1,15 @@
|
|||||||
// Copyright 2021 - Nym Technologies SA <contact@nymtech.net>
|
// Copyright 2021 - Nym Technologies SA <contact@nymtech.net>
|
||||||
// SPDX-License-Identifier: Apache-2.0
|
// SPDX-License-Identifier: Apache-2.0
|
||||||
|
|
||||||
|
#[cfg(feature = "outfox")]
|
||||||
pub use nym_outfox::{
|
pub use nym_outfox::{
|
||||||
constants::MIN_PACKET_SIZE, constants::MIX_PARAMS_LEN, constants::OUTFOX_PACKET_OVERHEAD,
|
constants::MIN_PACKET_SIZE, constants::MIX_PARAMS_LEN, constants::OUTFOX_PACKET_OVERHEAD,
|
||||||
error::OutfoxError,
|
error::OutfoxError,
|
||||||
};
|
};
|
||||||
// re-exporting types and constants available in sphinx
|
// re-exporting types and constants available in sphinx
|
||||||
|
#[cfg(feature = "outfox")]
|
||||||
use nym_outfox::packet::{OutfoxPacket, OutfoxProcessedPacket};
|
use nym_outfox::packet::{OutfoxPacket, OutfoxProcessedPacket};
|
||||||
|
#[cfg(feature = "sphinx")]
|
||||||
pub use sphinx_packet::{
|
pub use sphinx_packet::{
|
||||||
constants::{
|
constants::{
|
||||||
self, DESTINATION_ADDRESS_LENGTH, IDENTIFIER_LENGTH, MAX_PATH_LENGTH, NODE_ADDRESS_LENGTH,
|
self, DESTINATION_ADDRESS_LENGTH, IDENTIFIER_LENGTH, MAX_PATH_LENGTH, NODE_ADDRESS_LENGTH,
|
||||||
@@ -20,6 +23,7 @@ pub use sphinx_packet::{
|
|||||||
surb::{SURBMaterial, SURB},
|
surb::{SURBMaterial, SURB},
|
||||||
Error as SphinxError, ProcessedPacket,
|
Error as SphinxError, ProcessedPacket,
|
||||||
};
|
};
|
||||||
|
#[cfg(feature = "sphinx")]
|
||||||
use sphinx_packet::{SphinxPacket, SphinxPacketBuilder};
|
use sphinx_packet::{SphinxPacket, SphinxPacketBuilder};
|
||||||
use std::{array::TryFromSliceError, fmt};
|
use std::{array::TryFromSliceError, fmt};
|
||||||
use thiserror::Error;
|
use thiserror::Error;
|
||||||
@@ -27,9 +31,11 @@ use thiserror::Error;
|
|||||||
#[derive(Error, Debug)]
|
#[derive(Error, Debug)]
|
||||||
pub enum NymPacketError {
|
pub enum NymPacketError {
|
||||||
#[error("Sphinx error: {0}")]
|
#[error("Sphinx error: {0}")]
|
||||||
|
#[cfg(feature = "sphinx")]
|
||||||
Sphinx(#[from] sphinx_packet::Error),
|
Sphinx(#[from] sphinx_packet::Error),
|
||||||
|
|
||||||
#[error("Outfox error: {0}")]
|
#[error("Outfox error: {0}")]
|
||||||
|
#[cfg(feature = "outfox")]
|
||||||
Outfox(#[from] nym_outfox::error::OutfoxError),
|
Outfox(#[from] nym_outfox::error::OutfoxError),
|
||||||
|
|
||||||
#[error("{0}")]
|
#[error("{0}")]
|
||||||
@@ -38,31 +44,40 @@ pub enum NymPacketError {
|
|||||||
|
|
||||||
#[allow(clippy::large_enum_variant)]
|
#[allow(clippy::large_enum_variant)]
|
||||||
pub enum NymPacket {
|
pub enum NymPacket {
|
||||||
|
#[cfg(feature = "sphinx")]
|
||||||
Sphinx(SphinxPacket),
|
Sphinx(SphinxPacket),
|
||||||
|
#[cfg(feature = "outfox")]
|
||||||
Outfox(OutfoxPacket),
|
Outfox(OutfoxPacket),
|
||||||
}
|
}
|
||||||
|
|
||||||
pub enum NymProcessedPacket {
|
pub enum NymProcessedPacket {
|
||||||
|
#[cfg(feature = "sphinx")]
|
||||||
Sphinx(ProcessedPacket),
|
Sphinx(ProcessedPacket),
|
||||||
|
#[cfg(feature = "outfox")]
|
||||||
Outfox(OutfoxProcessedPacket),
|
Outfox(OutfoxProcessedPacket),
|
||||||
}
|
}
|
||||||
|
|
||||||
impl fmt::Debug for NymPacket {
|
impl fmt::Debug for NymPacket {
|
||||||
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
|
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
|
||||||
|
#[allow(unreachable_patterns)]
|
||||||
match &self {
|
match &self {
|
||||||
|
#[cfg(feature = "sphinx")]
|
||||||
NymPacket::Sphinx(packet) => f
|
NymPacket::Sphinx(packet) => f
|
||||||
.debug_struct("NymPacket::Sphinx")
|
.debug_struct("NymPacket::Sphinx")
|
||||||
.field("len", &packet.len())
|
.field("len", &packet.len())
|
||||||
.finish(),
|
.finish(),
|
||||||
|
#[cfg(feature = "outfox")]
|
||||||
NymPacket::Outfox(packet) => f
|
NymPacket::Outfox(packet) => f
|
||||||
.debug_struct("NymPacket::Outfox")
|
.debug_struct("NymPacket::Outfox")
|
||||||
.field("len", &packet.len())
|
.field("len", &packet.len())
|
||||||
.finish(),
|
.finish(),
|
||||||
|
_ => write!(f, ""),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl NymPacket {
|
impl NymPacket {
|
||||||
|
#[cfg(feature = "sphinx")]
|
||||||
pub fn sphinx_build<M: AsRef<[u8]>>(
|
pub fn sphinx_build<M: AsRef<[u8]>>(
|
||||||
size: usize,
|
size: usize,
|
||||||
message: M,
|
message: M,
|
||||||
@@ -76,10 +91,12 @@ impl NymPacket {
|
|||||||
.build_packet(message, route, destination, delays)?,
|
.build_packet(message, route, destination, delays)?,
|
||||||
))
|
))
|
||||||
}
|
}
|
||||||
|
#[cfg(feature = "sphinx")]
|
||||||
pub fn sphinx_from_bytes(bytes: &[u8]) -> Result<NymPacket, NymPacketError> {
|
pub fn sphinx_from_bytes(bytes: &[u8]) -> Result<NymPacket, NymPacketError> {
|
||||||
Ok(NymPacket::Sphinx(SphinxPacket::from_bytes(bytes)?))
|
Ok(NymPacket::Sphinx(SphinxPacket::from_bytes(bytes)?))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[cfg(feature = "outfox")]
|
||||||
pub fn outfox_build<M: AsRef<[u8]>>(
|
pub fn outfox_build<M: AsRef<[u8]>>(
|
||||||
payload: M,
|
payload: M,
|
||||||
route: &[Node],
|
route: &[Node],
|
||||||
@@ -94,14 +111,19 @@ impl NymPacket {
|
|||||||
)?))
|
)?))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[cfg(feature = "outfox")]
|
||||||
pub fn outfox_from_bytes(bytes: &[u8]) -> Result<NymPacket, NymPacketError> {
|
pub fn outfox_from_bytes(bytes: &[u8]) -> Result<NymPacket, NymPacketError> {
|
||||||
Ok(NymPacket::Outfox(OutfoxPacket::try_from(bytes)?))
|
Ok(NymPacket::Outfox(OutfoxPacket::try_from(bytes)?))
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn len(&self) -> usize {
|
pub fn len(&self) -> usize {
|
||||||
|
#[allow(unreachable_patterns)]
|
||||||
match self {
|
match self {
|
||||||
|
#[cfg(feature = "sphinx")]
|
||||||
NymPacket::Sphinx(packet) => packet.len(),
|
NymPacket::Sphinx(packet) => packet.len(),
|
||||||
|
#[cfg(feature = "outfox")]
|
||||||
NymPacket::Outfox(packet) => packet.len(),
|
NymPacket::Outfox(packet) => packet.len(),
|
||||||
|
_ => 0,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -110,12 +132,17 @@ impl NymPacket {
|
|||||||
}
|
}
|
||||||
|
|
||||||
pub fn to_bytes(&self) -> Result<Vec<u8>, NymPacketError> {
|
pub fn to_bytes(&self) -> Result<Vec<u8>, NymPacketError> {
|
||||||
|
#[allow(unreachable_patterns)]
|
||||||
match self {
|
match self {
|
||||||
|
#[cfg(feature = "sphinx")]
|
||||||
NymPacket::Sphinx(packet) => Ok(packet.to_bytes()),
|
NymPacket::Sphinx(packet) => Ok(packet.to_bytes()),
|
||||||
|
#[cfg(feature = "outfox")]
|
||||||
NymPacket::Outfox(packet) => Ok(packet.to_bytes()?),
|
NymPacket::Outfox(packet) => Ok(packet.to_bytes()?),
|
||||||
|
_ => Ok(vec![]),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[cfg(feature = "sphinx")]
|
||||||
pub fn process(
|
pub fn process(
|
||||||
self,
|
self,
|
||||||
node_secret_key: &PrivateKey,
|
node_secret_key: &PrivateKey,
|
||||||
@@ -124,6 +151,7 @@ impl NymPacket {
|
|||||||
NymPacket::Sphinx(packet) => {
|
NymPacket::Sphinx(packet) => {
|
||||||
Ok(NymProcessedPacket::Sphinx(packet.process(node_secret_key)?))
|
Ok(NymProcessedPacket::Sphinx(packet.process(node_secret_key)?))
|
||||||
}
|
}
|
||||||
|
#[cfg(feature = "outfox")]
|
||||||
NymPacket::Outfox(mut packet) => {
|
NymPacket::Outfox(mut packet) => {
|
||||||
let next_address = packet.decode_next_layer(node_secret_key)?;
|
let next_address = packet.decode_next_layer(node_secret_key)?;
|
||||||
Ok(NymProcessedPacket::Outfox(OutfoxProcessedPacket::new(
|
Ok(NymProcessedPacket::Outfox(OutfoxProcessedPacket::new(
|
||||||
|
|||||||
@@ -7,22 +7,27 @@ edition = "2021"
|
|||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
dirs = "4.0"
|
dirs = "4.0"
|
||||||
|
futures = "0.3"
|
||||||
log = { workspace = true }
|
log = { workspace = true }
|
||||||
pin-project = "1.0"
|
pin-project = "1.0"
|
||||||
rand = { version = "0.7.3", features = ["wasm-bindgen"] }
|
rand = { version = "0.7.3", features = ["wasm-bindgen"] }
|
||||||
|
reqwest = "0.11.4"
|
||||||
|
schemars = { version = "0.8", features = ["preserve_order"] }
|
||||||
serde = { workspace = true, features = ["derive"] } # for config serialization/deserialization
|
serde = { workspace = true, features = ["derive"] } # for config serialization/deserialization
|
||||||
thiserror = "1.0.34"
|
|
||||||
tap = "1.0.1"
|
tap = "1.0.1"
|
||||||
|
thiserror = "1.0.34"
|
||||||
tokio = { version = "1.24.1", features = ["rt-multi-thread", "net", "signal"] }
|
tokio = { version = "1.24.1", features = ["rt-multi-thread", "net", "signal"] }
|
||||||
futures = "0.3"
|
url = "2.2"
|
||||||
|
|
||||||
nym-client-core = { path = "../client-core", features = ["fs-surb-storage"] }
|
|
||||||
nym-bandwidth-controller = { path = "../../common/bandwidth-controller" }
|
nym-bandwidth-controller = { path = "../../common/bandwidth-controller" }
|
||||||
|
nym-client-core = { path = "../client-core", features = ["fs-surb-storage"] }
|
||||||
nym-config = { path = "../config" }
|
nym-config = { path = "../config" }
|
||||||
|
nym-contracts-common = { path = "../cosmwasm-smart-contracts/contracts-common" }
|
||||||
nym-credential-storage = { path = "../credential-storage" }
|
nym-credential-storage = { path = "../credential-storage" }
|
||||||
|
nym-mixnet-contract-common = { path = "../cosmwasm-smart-contracts/mixnet-contract" }
|
||||||
nym-network-defaults = { path = "../network-defaults" }
|
nym-network-defaults = { path = "../network-defaults" }
|
||||||
nym-socks5-proxy-helpers = { path = "../socks5/proxy-helpers" }
|
|
||||||
nym-service-providers-common = { path = "../../service-providers/common" }
|
nym-service-providers-common = { path = "../../service-providers/common" }
|
||||||
|
nym-socks5-proxy-helpers = { path = "../socks5/proxy-helpers" }
|
||||||
nym-socks5-requests = { path = "../socks5/requests" }
|
nym-socks5-requests = { path = "../socks5/requests" }
|
||||||
nym-sphinx = { path = "../nymsphinx" }
|
nym-sphinx = { path = "../nymsphinx" }
|
||||||
nym-task = { path = "../task" }
|
nym-task = { path = "../task" }
|
||||||
|
|||||||
@@ -24,6 +24,7 @@ use nym_credential_storage::storage::Storage as CredentialStorage;
|
|||||||
use nym_sphinx::addressing::clients::Recipient;
|
use nym_sphinx::addressing::clients::Recipient;
|
||||||
use nym_sphinx::params::PacketType;
|
use nym_sphinx::params::PacketType;
|
||||||
use nym_task::{TaskClient, TaskManager};
|
use nym_task::{TaskClient, TaskManager};
|
||||||
|
|
||||||
use std::error::Error;
|
use std::error::Error;
|
||||||
|
|
||||||
pub mod config;
|
pub mod config;
|
||||||
|
|||||||
@@ -19,10 +19,10 @@ thiserror = "1.0.37"
|
|||||||
async-trait = { workspace = true, optional = true }
|
async-trait = { workspace = true, optional = true }
|
||||||
|
|
||||||
## internal
|
## internal
|
||||||
nym-crypto = { path = "../crypto" }
|
nym-crypto = { path = "../crypto", features = ["sphinx", "outfox"] }
|
||||||
nym-mixnet-contract-common = { path = "../cosmwasm-smart-contracts/mixnet-contract" }
|
nym-mixnet-contract-common = { path = "../cosmwasm-smart-contracts/mixnet-contract" }
|
||||||
nym-sphinx-addressing = { path = "../nymsphinx/addressing" }
|
nym-sphinx-addressing = { path = "../nymsphinx/addressing" }
|
||||||
nym-sphinx-types = { path = "../nymsphinx/types" }
|
nym-sphinx-types = { path = "../nymsphinx/types", features = ["sphinx", "outfox"] }
|
||||||
nym-sphinx-routing = { path = "../nymsphinx/routing" }
|
nym-sphinx-routing = { path = "../nymsphinx/routing" }
|
||||||
nym-bin-common = { path = "../bin-common" }
|
nym-bin-common = { path = "../bin-common" }
|
||||||
|
|
||||||
|
|||||||
@@ -41,6 +41,7 @@ pub enum NymTopologyError {
|
|||||||
PayloadBuilder,
|
PayloadBuilder,
|
||||||
|
|
||||||
#[error("Outfox: {0}")]
|
#[error("Outfox: {0}")]
|
||||||
|
#[cfg(feature = "outfox")]
|
||||||
Outfox(#[from] nym_sphinx_types::OutfoxError),
|
Outfox(#[from] nym_sphinx_types::OutfoxError),
|
||||||
|
|
||||||
#[error("{0}")]
|
#[error("{0}")]
|
||||||
|
|||||||
Generated
+16
-432
@@ -2,29 +2,6 @@
|
|||||||
# It is not intended for manual editing.
|
# It is not intended for manual editing.
|
||||||
version = 3
|
version = 3
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "aead"
|
|
||||||
version = "0.5.2"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "d122413f284cf2d62fb1b7db97e02edb8cda96d769b16e443a4f6195e35662b0"
|
|
||||||
dependencies = [
|
|
||||||
"crypto-common",
|
|
||||||
"generic-array 0.14.6",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "aes"
|
|
||||||
version = "0.7.5"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "9e8b47f52ea9bae42228d07ec09eb676433d7c4ed1ebdf0f1d1c29ed446f1ab8"
|
|
||||||
dependencies = [
|
|
||||||
"cfg-if",
|
|
||||||
"cipher 0.3.0",
|
|
||||||
"cpufeatures",
|
|
||||||
"ctr",
|
|
||||||
"opaque-debug 0.3.0",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "ahash"
|
name = "ahash"
|
||||||
version = "0.7.6"
|
version = "0.7.6"
|
||||||
@@ -42,18 +19,6 @@ version = "1.0.70"
|
|||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "7de8ce5e0f9f8d88245311066a578d72b7af3e7088f32783804676302df237e4"
|
checksum = "7de8ce5e0f9f8d88245311066a578d72b7af3e7088f32783804676302df237e4"
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "arrayref"
|
|
||||||
version = "0.3.7"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "6b4930d2cb77ce62f89ee5d5289b4ac049559b1c45539271f5ed4fdc7db34545"
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "arrayvec"
|
|
||||||
version = "0.7.4"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "96d30a06541fbafbc7f82ed10c06164cfbd2c401138f6addd8404629c4b16711"
|
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "autocfg"
|
name = "autocfg"
|
||||||
version = "1.1.0"
|
version = "1.1.0"
|
||||||
@@ -90,39 +55,13 @@ version = "1.3.2"
|
|||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a"
|
checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a"
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "blake2"
|
|
||||||
version = "0.8.1"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "94cb07b0da6a73955f8fb85d24c466778e70cda767a568229b104f0264089330"
|
|
||||||
dependencies = [
|
|
||||||
"byte-tools",
|
|
||||||
"crypto-mac 0.7.0",
|
|
||||||
"digest 0.8.1",
|
|
||||||
"opaque-debug 0.2.3",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "blake3"
|
|
||||||
version = "1.4.1"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "199c42ab6972d92c9f8995f086273d25c42fc0f7b2a1fcefba465c1352d25ba5"
|
|
||||||
dependencies = [
|
|
||||||
"arrayref",
|
|
||||||
"arrayvec",
|
|
||||||
"cc",
|
|
||||||
"cfg-if",
|
|
||||||
"constant_time_eq",
|
|
||||||
"digest 0.10.7",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "block-buffer"
|
name = "block-buffer"
|
||||||
version = "0.9.0"
|
version = "0.9.0"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "4152116fd6e9dadb291ae18fc1ec3575ed6d84c29642d97890f4b4a3417297e4"
|
checksum = "4152116fd6e9dadb291ae18fc1ec3575ed6d84c29642d97890f4b4a3417297e4"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"generic-array 0.14.6",
|
"generic-array",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
@@ -131,7 +70,7 @@ version = "0.10.4"
|
|||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71"
|
checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"generic-array 0.14.6",
|
"generic-array",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
@@ -146,12 +85,6 @@ version = "3.12.1"
|
|||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "9b1ce199063694f33ffb7dd4e0ee620741495c32833cde5aa08f02a0bf96f0c8"
|
checksum = "9b1ce199063694f33ffb7dd4e0ee620741495c32833cde5aa08f02a0bf96f0c8"
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "byte-tools"
|
|
||||||
version = "0.3.1"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "e3b5ca7a04898ad4bcd41c90c5285445ff5b791899bb1b0abdd2a2aa791211d7"
|
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "byteorder"
|
name = "byteorder"
|
||||||
version = "1.4.3"
|
version = "1.4.3"
|
||||||
@@ -179,60 +112,6 @@ version = "1.0.0"
|
|||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
|
checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "chacha"
|
|
||||||
version = "0.3.0"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "ddf3c081b5fba1e5615640aae998e0fbd10c24cbd897ee39ed754a77601a4862"
|
|
||||||
dependencies = [
|
|
||||||
"byteorder",
|
|
||||||
"keystream",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "chacha20"
|
|
||||||
version = "0.9.1"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "c3613f74bd2eac03dad61bd53dbe620703d4371614fe0bc3b9f04dd36fe4e818"
|
|
||||||
dependencies = [
|
|
||||||
"cfg-if",
|
|
||||||
"cipher 0.4.4",
|
|
||||||
"cpufeatures",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "chacha20poly1305"
|
|
||||||
version = "0.10.1"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "10cd79432192d1c0f4e1a0fef9527696cc039165d729fb41b3f4f4f354c2dc35"
|
|
||||||
dependencies = [
|
|
||||||
"aead",
|
|
||||||
"chacha20",
|
|
||||||
"cipher 0.4.4",
|
|
||||||
"poly1305",
|
|
||||||
"zeroize",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "cipher"
|
|
||||||
version = "0.3.0"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "7ee52072ec15386f770805afd189a01c8841be8696bed250fa2f13c4c0d6dfb7"
|
|
||||||
dependencies = [
|
|
||||||
"generic-array 0.14.6",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "cipher"
|
|
||||||
version = "0.4.4"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "773f3b9af64447d2ce9850330c473515014aa235e6a783b02db81ff39e4a3dad"
|
|
||||||
dependencies = [
|
|
||||||
"crypto-common",
|
|
||||||
"inout",
|
|
||||||
"zeroize",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "coconut-test"
|
name = "coconut-test"
|
||||||
version = "0.1.0"
|
version = "0.1.0"
|
||||||
@@ -264,12 +143,6 @@ version = "0.9.2"
|
|||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "520fbf3c07483f94e3e3ca9d0cfd913d7718ef2483d2cfd91c0d9e91474ab913"
|
checksum = "520fbf3c07483f94e3e3ca9d0cfd913d7718ef2483d2cfd91c0d9e91474ab913"
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "constant_time_eq"
|
|
||||||
version = "0.3.0"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "f7144d30dcf0fafbce74250a3963025d8d52177934239851c917d29f1df280c2"
|
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "cosmwasm-crypto"
|
name = "cosmwasm-crypto"
|
||||||
version = "1.2.5"
|
version = "1.2.5"
|
||||||
@@ -355,49 +228,6 @@ dependencies = [
|
|||||||
"libc",
|
"libc",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "crossbeam-channel"
|
|
||||||
version = "0.5.8"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "a33c2bf77f2df06183c3aa30d1e96c0695a313d4f9c453cc3762a6db39f99200"
|
|
||||||
dependencies = [
|
|
||||||
"cfg-if",
|
|
||||||
"crossbeam-utils",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "crossbeam-deque"
|
|
||||||
version = "0.8.3"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "ce6fd6f855243022dcecf8702fef0c297d4338e226845fe067f6341ad9fa0cef"
|
|
||||||
dependencies = [
|
|
||||||
"cfg-if",
|
|
||||||
"crossbeam-epoch",
|
|
||||||
"crossbeam-utils",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "crossbeam-epoch"
|
|
||||||
version = "0.9.15"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "ae211234986c545741a7dc064309f67ee1e5ad243d0e48335adc0484d960bcc7"
|
|
||||||
dependencies = [
|
|
||||||
"autocfg",
|
|
||||||
"cfg-if",
|
|
||||||
"crossbeam-utils",
|
|
||||||
"memoffset",
|
|
||||||
"scopeguard",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "crossbeam-utils"
|
|
||||||
version = "0.8.16"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "5a22b2d63d4d1dc0b7f1b6b2747dd0088008a9be28b6ddf0b1e7d335e3037294"
|
|
||||||
dependencies = [
|
|
||||||
"cfg-if",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "crunchy"
|
name = "crunchy"
|
||||||
version = "0.2.2"
|
version = "0.2.2"
|
||||||
@@ -410,9 +240,9 @@ version = "0.4.9"
|
|||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "ef2b4b23cddf68b89b8f8069890e8c270d54e2d5fe1b143820234805e4cb17ef"
|
checksum = "ef2b4b23cddf68b89b8f8069890e8c270d54e2d5fe1b143820234805e4cb17ef"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"generic-array 0.14.6",
|
"generic-array",
|
||||||
"rand_core 0.6.4",
|
"rand_core 0.6.4",
|
||||||
"subtle 2.4.1",
|
"subtle",
|
||||||
"zeroize",
|
"zeroize",
|
||||||
]
|
]
|
||||||
|
|
||||||
@@ -422,40 +252,10 @@ version = "0.1.6"
|
|||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3"
|
checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"generic-array 0.14.6",
|
"generic-array",
|
||||||
"rand_core 0.6.4",
|
|
||||||
"typenum",
|
"typenum",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "crypto-mac"
|
|
||||||
version = "0.7.0"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "4434400df11d95d556bac068ddfedd482915eb18fe8bea89bc80b6e4b1c179e5"
|
|
||||||
dependencies = [
|
|
||||||
"generic-array 0.12.4",
|
|
||||||
"subtle 1.0.0",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "crypto-mac"
|
|
||||||
version = "0.11.1"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "b1d1a86f49236c215f271d40892d5fc950490551400b02ef360692c29815c714"
|
|
||||||
dependencies = [
|
|
||||||
"generic-array 0.14.6",
|
|
||||||
"subtle 2.4.1",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "ctr"
|
|
||||||
version = "0.8.0"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "049bb91fb4aaf0e3c7efa6cd5ef877dbbbd15b39dad06d9948de4ec8a75761ea"
|
|
||||||
dependencies = [
|
|
||||||
"cipher 0.3.0",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "curve25519-dalek"
|
name = "curve25519-dalek"
|
||||||
version = "3.2.0"
|
version = "3.2.0"
|
||||||
@@ -465,7 +265,7 @@ dependencies = [
|
|||||||
"byteorder",
|
"byteorder",
|
||||||
"digest 0.9.0",
|
"digest 0.9.0",
|
||||||
"rand_core 0.5.1",
|
"rand_core 0.5.1",
|
||||||
"subtle 2.4.1",
|
"subtle",
|
||||||
"zeroize",
|
"zeroize",
|
||||||
]
|
]
|
||||||
|
|
||||||
@@ -676,22 +476,13 @@ dependencies = [
|
|||||||
"syn 1.0.109",
|
"syn 1.0.109",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "digest"
|
|
||||||
version = "0.8.1"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "f3d0c8c8752312f9713efd397ff63acb9f85585afbf179282e720e7704954dd5"
|
|
||||||
dependencies = [
|
|
||||||
"generic-array 0.12.4",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "digest"
|
name = "digest"
|
||||||
version = "0.9.0"
|
version = "0.9.0"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "d3dd60d1080a57a05ab032377049e0591415d2b31afd7028356dbf3cc6dcb066"
|
checksum = "d3dd60d1080a57a05ab032377049e0591415d2b31afd7028356dbf3cc6dcb066"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"generic-array 0.14.6",
|
"generic-array",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
@@ -702,7 +493,7 @@ checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292"
|
|||||||
dependencies = [
|
dependencies = [
|
||||||
"block-buffer 0.10.4",
|
"block-buffer 0.10.4",
|
||||||
"crypto-common",
|
"crypto-common",
|
||||||
"subtle 2.4.1",
|
"subtle",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
@@ -778,12 +569,12 @@ dependencies = [
|
|||||||
"der",
|
"der",
|
||||||
"digest 0.10.7",
|
"digest 0.10.7",
|
||||||
"ff",
|
"ff",
|
||||||
"generic-array 0.14.6",
|
"generic-array",
|
||||||
"group",
|
"group",
|
||||||
"pkcs8",
|
"pkcs8",
|
||||||
"rand_core 0.6.4",
|
"rand_core 0.6.4",
|
||||||
"sec1",
|
"sec1",
|
||||||
"subtle 2.4.1",
|
"subtle",
|
||||||
"zeroize",
|
"zeroize",
|
||||||
]
|
]
|
||||||
|
|
||||||
@@ -844,7 +635,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
|
|||||||
checksum = "d013fc25338cc558c5c2cfbad646908fb23591e2404481826742b651c9af7160"
|
checksum = "d013fc25338cc558c5c2cfbad646908fb23591e2404481826742b651c9af7160"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"rand_core 0.6.4",
|
"rand_core 0.6.4",
|
||||||
"subtle 2.4.1",
|
"subtle",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
@@ -963,15 +754,6 @@ dependencies = [
|
|||||||
"slab",
|
"slab",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "generic-array"
|
|
||||||
version = "0.12.4"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "ffdf9f34f1447443d37393cc6c2b8313aebddcd96906caf34e54c68d8e57d7bd"
|
|
||||||
dependencies = [
|
|
||||||
"typenum",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "generic-array"
|
name = "generic-array"
|
||||||
version = "0.14.6"
|
version = "0.14.6"
|
||||||
@@ -1002,10 +784,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
|
|||||||
checksum = "be4136b2a15dd319360be1c07d9933517ccf0be8f16bf62a3bee4f0d618df427"
|
checksum = "be4136b2a15dd319360be1c07d9933517ccf0be8f16bf62a3bee4f0d618df427"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"cfg-if",
|
"cfg-if",
|
||||||
"js-sys",
|
|
||||||
"libc",
|
"libc",
|
||||||
"wasi 0.11.0+wasi-snapshot-preview1",
|
"wasi 0.11.0+wasi-snapshot-preview1",
|
||||||
"wasm-bindgen",
|
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
@@ -1041,7 +821,7 @@ checksum = "5dfbfb3a6cfbd390d5c9564ab283a0349b9b9fcd46a706c1eb10e0db70bfbac7"
|
|||||||
dependencies = [
|
dependencies = [
|
||||||
"ff",
|
"ff",
|
||||||
"rand_core 0.6.4",
|
"rand_core 0.6.4",
|
||||||
"subtle 2.4.1",
|
"subtle",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
@@ -1065,26 +845,6 @@ version = "0.4.3"
|
|||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70"
|
checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70"
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "hkdf"
|
|
||||||
version = "0.11.0"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "01706d578d5c281058480e673ae4086a9f4710d8df1ad80a5b03e39ece5f886b"
|
|
||||||
dependencies = [
|
|
||||||
"digest 0.9.0",
|
|
||||||
"hmac 0.11.0",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "hmac"
|
|
||||||
version = "0.11.0"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "2a2a2320eb7ec0ebe8da8f744d7812d9fc4cb4d09344ac01898dbcb6a20ae69b"
|
|
||||||
dependencies = [
|
|
||||||
"crypto-mac 0.11.1",
|
|
||||||
"digest 0.9.0",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "hmac"
|
name = "hmac"
|
||||||
version = "0.12.1"
|
version = "0.12.1"
|
||||||
@@ -1120,15 +880,6 @@ dependencies = [
|
|||||||
"unicode-normalization",
|
"unicode-normalization",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "inout"
|
|
||||||
version = "0.1.3"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "a0c10553d664a4d0bcff9f4215d0aac67a639cc68ef660840afe309b807bc9f5"
|
|
||||||
dependencies = [
|
|
||||||
"generic-array 0.14.6",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "instant"
|
name = "instant"
|
||||||
version = "0.1.12"
|
version = "0.1.12"
|
||||||
@@ -1194,12 +945,6 @@ dependencies = [
|
|||||||
"sha2 0.10.6",
|
"sha2 0.10.6",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "keystream"
|
|
||||||
version = "1.0.0"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "c33070833c9ee02266356de0c43f723152bd38bd96ddf52c82b3af10c9138b28"
|
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "lazy_static"
|
name = "lazy_static"
|
||||||
version = "1.4.0"
|
version = "1.4.0"
|
||||||
@@ -1224,12 +969,6 @@ dependencies = [
|
|||||||
"pkg-config",
|
"pkg-config",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "libm"
|
|
||||||
version = "0.2.6"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "348108ab3fba42ec82ff6e9564fc4ca0247bdccdc68dd8af9764bbc79c3c8ffb"
|
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "libz-sys"
|
name = "libz-sys"
|
||||||
version = "1.1.8"
|
version = "1.1.8"
|
||||||
@@ -1248,18 +987,6 @@ version = "0.3.7"
|
|||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "ece97ea872ece730aed82664c424eb4c8291e1ff2480247ccf7409044bc6479f"
|
checksum = "ece97ea872ece730aed82664c424eb4c8291e1ff2480247ccf7409044bc6479f"
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "lioness"
|
|
||||||
version = "0.1.2"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "4ae926706ba42c425c9457121178330d75e273df2e82e28b758faf3de3a9acb9"
|
|
||||||
dependencies = [
|
|
||||||
"arrayref",
|
|
||||||
"blake2",
|
|
||||||
"chacha",
|
|
||||||
"keystream",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "log"
|
name = "log"
|
||||||
version = "0.4.17"
|
version = "0.4.17"
|
||||||
@@ -1275,15 +1002,6 @@ version = "2.5.0"
|
|||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "2dffe52ecf27772e601905b7522cb4ef790d2cc203488bbd0e2fe85fcb74566d"
|
checksum = "2dffe52ecf27772e601905b7522cb4ef790d2cc203488bbd0e2fe85fcb74566d"
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "memoffset"
|
|
||||||
version = "0.9.0"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "5a634b1c61a95585bd15607c6ab0c4e5b226e695ff2800ba0cdccddf208c406c"
|
|
||||||
dependencies = [
|
|
||||||
"autocfg",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "mixnet-vesting-integration-tests"
|
name = "mixnet-vesting-integration-tests"
|
||||||
version = "0.1.0"
|
version = "0.1.0"
|
||||||
@@ -1300,26 +1018,6 @@ dependencies = [
|
|||||||
"rand_chacha 0.2.2",
|
"rand_chacha 0.2.2",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "num-traits"
|
|
||||||
version = "0.2.15"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "578ede34cf02f8924ab9447f50c28075b4d3e5b269972345e7e0372b38c6cdcd"
|
|
||||||
dependencies = [
|
|
||||||
"autocfg",
|
|
||||||
"libm",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "num_cpus"
|
|
||||||
version = "1.16.0"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "4161fcb6d602d4d2081af7c3a45852d875a03dd337a6bfdd6e06407b61342a43"
|
|
||||||
dependencies = [
|
|
||||||
"hermit-abi",
|
|
||||||
"libc",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "nym-coconut-bandwidth"
|
name = "nym-coconut-bandwidth"
|
||||||
version = "0.1.0"
|
version = "0.1.0"
|
||||||
@@ -1507,23 +1205,6 @@ dependencies = [
|
|||||||
"thiserror",
|
"thiserror",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "nym-outfox"
|
|
||||||
version = "0.1.0"
|
|
||||||
dependencies = [
|
|
||||||
"blake3",
|
|
||||||
"chacha20",
|
|
||||||
"chacha20poly1305",
|
|
||||||
"curve25519-dalek",
|
|
||||||
"getrandom 0.2.10",
|
|
||||||
"log",
|
|
||||||
"rand 0.7.3",
|
|
||||||
"rayon",
|
|
||||||
"sphinx-packet",
|
|
||||||
"thiserror",
|
|
||||||
"zeroize",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "nym-pemstore"
|
name = "nym-pemstore"
|
||||||
version = "0.3.0"
|
version = "0.3.0"
|
||||||
@@ -1571,8 +1252,6 @@ dependencies = [
|
|||||||
name = "nym-sphinx-types"
|
name = "nym-sphinx-types"
|
||||||
version = "0.2.0"
|
version = "0.2.0"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"nym-outfox",
|
|
||||||
"sphinx-packet",
|
|
||||||
"thiserror",
|
"thiserror",
|
||||||
]
|
]
|
||||||
|
|
||||||
@@ -1616,12 +1295,6 @@ version = "1.17.1"
|
|||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "b7e5500299e16ebb147ae15a00a942af264cf3688f47923b8fc2cd5858f23ad3"
|
checksum = "b7e5500299e16ebb147ae15a00a942af264cf3688f47923b8fc2cd5858f23ad3"
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "opaque-debug"
|
|
||||||
version = "0.2.3"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "2839e79665f131bdb5782e51f2c6c9599c133c6098982a54c794358bf432529c"
|
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "opaque-debug"
|
name = "opaque-debug"
|
||||||
version = "0.3.0"
|
version = "0.3.0"
|
||||||
@@ -1673,17 +1346,6 @@ version = "0.3.26"
|
|||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "6ac9a59f73473f1b8d852421e59e64809f025994837ef743615c6d0c5b305160"
|
checksum = "6ac9a59f73473f1b8d852421e59e64809f025994837ef743615c6d0c5b305160"
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "poly1305"
|
|
||||||
version = "0.8.0"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "8159bd90725d2df49889a078b54f4f79e87f1f8a8444194cdca81d38f5393abf"
|
|
||||||
dependencies = [
|
|
||||||
"cpufeatures",
|
|
||||||
"opaque-debug 0.3.0",
|
|
||||||
"universal-hash",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "ppv-lite86"
|
name = "ppv-lite86"
|
||||||
version = "0.2.17"
|
version = "0.2.17"
|
||||||
@@ -1823,16 +1485,6 @@ dependencies = [
|
|||||||
"getrandom 0.2.10",
|
"getrandom 0.2.10",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "rand_distr"
|
|
||||||
version = "0.3.0"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "c9e9532ada3929fb8b2e9dbe28d1e06c9b2cc65813f074fcb6bd5fbefeff9d56"
|
|
||||||
dependencies = [
|
|
||||||
"num-traits",
|
|
||||||
"rand 0.7.3",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "rand_hc"
|
name = "rand_hc"
|
||||||
version = "0.2.0"
|
version = "0.2.0"
|
||||||
@@ -1842,28 +1494,6 @@ dependencies = [
|
|||||||
"rand_core 0.5.1",
|
"rand_core 0.5.1",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "rayon"
|
|
||||||
version = "1.7.0"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "1d2df5196e37bcc87abebc0053e20787d73847bb33134a69841207dd0a47f03b"
|
|
||||||
dependencies = [
|
|
||||||
"either",
|
|
||||||
"rayon-core",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "rayon-core"
|
|
||||||
version = "1.11.0"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "4b8f95bd6966f5c87776639160a66bd8ab9895d9d4ab01ddba9fc60661aebe8d"
|
|
||||||
dependencies = [
|
|
||||||
"crossbeam-channel",
|
|
||||||
"crossbeam-deque",
|
|
||||||
"crossbeam-utils",
|
|
||||||
"num_cpus",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "redox_syscall"
|
name = "redox_syscall"
|
||||||
version = "0.3.5"
|
version = "0.3.5"
|
||||||
@@ -1895,7 +1525,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
|
|||||||
checksum = "7743f17af12fa0b03b803ba12cd6a8d9483a587e89c69445e3909655c0b9fabb"
|
checksum = "7743f17af12fa0b03b803ba12cd6a8d9483a587e89c69445e3909655c0b9fabb"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"crypto-bigint",
|
"crypto-bigint",
|
||||||
"hmac 0.12.1",
|
"hmac",
|
||||||
"zeroize",
|
"zeroize",
|
||||||
]
|
]
|
||||||
|
|
||||||
@@ -1996,12 +1626,6 @@ dependencies = [
|
|||||||
"syn 1.0.109",
|
"syn 1.0.109",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "scopeguard"
|
|
||||||
version = "1.1.0"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd"
|
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "sec1"
|
name = "sec1"
|
||||||
version = "0.3.0"
|
version = "0.3.0"
|
||||||
@@ -2010,9 +1634,9 @@ checksum = "3be24c1842290c45df0a7bf069e0c268a747ad05a192f2fd7dcfdbc1cba40928"
|
|||||||
dependencies = [
|
dependencies = [
|
||||||
"base16ct",
|
"base16ct",
|
||||||
"der",
|
"der",
|
||||||
"generic-array 0.14.6",
|
"generic-array",
|
||||||
"pkcs8",
|
"pkcs8",
|
||||||
"subtle 2.4.1",
|
"subtle",
|
||||||
"zeroize",
|
"zeroize",
|
||||||
]
|
]
|
||||||
|
|
||||||
@@ -2103,7 +1727,7 @@ dependencies = [
|
|||||||
"cfg-if",
|
"cfg-if",
|
||||||
"cpufeatures",
|
"cpufeatures",
|
||||||
"digest 0.9.0",
|
"digest 0.9.0",
|
||||||
"opaque-debug 0.3.0",
|
"opaque-debug",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
@@ -2136,30 +1760,6 @@ dependencies = [
|
|||||||
"autocfg",
|
"autocfg",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "sphinx-packet"
|
|
||||||
version = "0.1.0"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "cc43eda802856ee82a7555c7b75ceb9e07451741c7a2f5f23d036020e01189d4"
|
|
||||||
dependencies = [
|
|
||||||
"aes",
|
|
||||||
"arrayref",
|
|
||||||
"blake2",
|
|
||||||
"bs58",
|
|
||||||
"byteorder",
|
|
||||||
"chacha",
|
|
||||||
"curve25519-dalek",
|
|
||||||
"digest 0.9.0",
|
|
||||||
"hkdf",
|
|
||||||
"hmac 0.11.0",
|
|
||||||
"lioness",
|
|
||||||
"log",
|
|
||||||
"rand 0.7.3",
|
|
||||||
"rand_distr",
|
|
||||||
"sha2 0.9.9",
|
|
||||||
"subtle 2.4.1",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "spki"
|
name = "spki"
|
||||||
version = "0.6.0"
|
version = "0.6.0"
|
||||||
@@ -2176,12 +1776,6 @@ version = "1.1.0"
|
|||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f"
|
checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f"
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "subtle"
|
|
||||||
version = "1.0.0"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "2d67a5a62ba6e01cb2192ff309324cb4875d0c451d55fe2319433abe7a05a8ee"
|
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "subtle"
|
name = "subtle"
|
||||||
version = "2.4.1"
|
version = "2.4.1"
|
||||||
@@ -2333,16 +1927,6 @@ dependencies = [
|
|||||||
"tinyvec",
|
"tinyvec",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "universal-hash"
|
|
||||||
version = "0.5.1"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "fc1de2c688dc15305988b563c3854064043356019f97a4b46276fe734c4f07ea"
|
|
||||||
dependencies = [
|
|
||||||
"crypto-common",
|
|
||||||
"subtle 2.4.1",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "url"
|
name = "url"
|
||||||
version = "2.3.1"
|
version = "2.3.1"
|
||||||
|
|||||||
@@ -11,6 +11,8 @@
|
|||||||
# Quickstart
|
# Quickstart
|
||||||
|
|
||||||
- [Overview](quickstart/overview.md)
|
- [Overview](quickstart/overview.md)
|
||||||
|
- [Chat demo (webapp)](quickstart/chat-demo.md)
|
||||||
|
- [Coconut Credential Playground (webapp)](quickstart/cred-playground.md)
|
||||||
- [SOCKS Proxy (CLI)](quickstart/socks-proxy.md)
|
- [SOCKS Proxy (CLI)](quickstart/socks-proxy.md)
|
||||||
- [NymConnect Beta (GUI)](quickstart/nymconnect-gui.md)
|
- [NymConnect Beta (GUI)](quickstart/nymconnect-gui.md)
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,5 @@
|
|||||||
|
# Chat demo (webapp)
|
||||||
|
|
||||||
|
You can find a browser-based 'hello world' chat app [here](https://chat-demo.nymtech.net).
|
||||||
|
|
||||||
|
Either open in two browser windows and send messages to yourself, or share with a friend and send messages to each other through the mixnet.
|
||||||
@@ -0,0 +1,5 @@
|
|||||||
|
# Coconut Credential Playground (webapp)
|
||||||
|
|
||||||
|
There is a coconut-scheme based Credential Library playground [here](https://coco-demo.nymtech.net/). This is a WASM implementation of our Coconut libraries which generate raw Coconut credentials. Test it to create and re-randomize your own credentials.
|
||||||
|
|
||||||
|
For more information on what is happening here check out the [Coconut docs](https://nymtech.net/docs/coconut.html).
|
||||||
@@ -1,13 +1,7 @@
|
|||||||
# Overview
|
# Overview
|
||||||
|
|
||||||
There are multiple options to quickly connect to Nym and see the network in action without the need for any code changes to your application. At most, these involve running Nym as a second process alongside an existing application in order to send traffic through the mixnet.
|
There are multiple options to quickly connect to Nym and play with both the mixnet and credentials on the Sandbox testnet.
|
||||||
|
|
||||||
Demo applications:
|
At most, these involve running Nym as a second process alongside an existing application in order to send traffic through the mixnet, most are either interact webpages or a standalone app.
|
||||||
* a browser-based 'hello world' [chat application](https://chat-demo.nymtech.net). Either open in two browser windows and send messages to yourself, or share with a friend and send messages to each other through the mixnet!
|
|
||||||
* a Coconut-scheme based [Credential Library](https://coco-demo.nymtech.net/). This is a WASM implementation of our Coconut libraries which generate raw Coconut credentials. Test it to create and re-randomize your own credentials!
|
|
||||||
<br>
|
|
||||||
Proxy traffic with the Nym Socks5 client:
|
|
||||||
* set up a plug-and-play connection with the [NymConnect](./nymconnect-gui.md) GUI for proxying Telegram, Electrum, Keybase or Blockstream Green traffic through the mixnet (~2 minutes).
|
|
||||||
* [Download and run](./socks-proxy.md) the Nym Socks5 client via the CLI, for other desktop applications with SOCKS5 connection options (~30 minutes).
|
|
||||||
|
|
||||||
If you've already covered the information in this section, or want to jump straight into integrating/ a Nym connection into an existing application, head to the [Integrations](../integrations/integration-options.md) section.
|
If you've already covered the information in this section, or want to jump straight into integrating/ a Nym connection into an existing application, head to the [Integrations](../integrations/integration-options.md) section.
|
||||||
|
|||||||
@@ -84,15 +84,15 @@ To check available configuration options for initializing your node use:
|
|||||||
```
|
```
|
||||||
~~~
|
~~~
|
||||||
|
|
||||||
Initalise your mixnode with the following command, replacing the value of `--id` with the moniker you wish to give your mixnode, and the `--wallet-address` with the Nym address you created earlier. Your `--host` must be publicly routable on the internet in order to mix packets, and can be either an Ipv4 or IPv6 address. The `$(curl ifconfig.me)` command returns your IP automatically using an external service. If you enter your IP address manually, enter it **without** any port information.
|
Initalise your mixnode with the following command, replacing the value of `--id` with the moniker you wish to give your mixnode. Your `--host` must be publicly routable on the internet in order to mix packets, and can be either an Ipv4 or IPv6 address. The `$(curl ifconfig.me)` command returns your IP automatically using an external service. If you enter your IP address manually, enter it **without** any port information.
|
||||||
|
|
||||||
```
|
```
|
||||||
./nym-mixnode init --id winston-smithnode --host $(curl ifconfig.me) --wallet-address n1eufxdlgt0puwrwptgjfqne8pj4nhy2u5ft62uq
|
./nym-mixnode init --id winston-smithnode --host $(curl ifconfig.me)
|
||||||
```
|
```
|
||||||
|
|
||||||
~~~admonish example collapsible=true title="Console output"
|
~~~admonish example collapsible=true title="Console output"
|
||||||
```
|
```
|
||||||
<!-- cmdrun ../../../../target/release/nym-mixnode init --id winston-smithnode --host $(curl ifconfig.me) --wallet-address n1eufxdlgt0puwrwptgjfqne8pj4nhy2u5ft62uq -->
|
<!-- cmdrun ../../../../target/release/nym-mixnode init --id winston-smithnode --host $(curl ifconfig.me) -->
|
||||||
```
|
```
|
||||||
~~~
|
~~~
|
||||||
|
|
||||||
|
|||||||
@@ -8,12 +8,17 @@ edition = "2021"
|
|||||||
[dependencies]
|
[dependencies]
|
||||||
chrono = { version = "0.4.19", features = ["serde"] }
|
chrono = { version = "0.4.19", features = ["serde"] }
|
||||||
clap = { version = "4.0", features = ["cargo", "derive"] }
|
clap = { version = "4.0", features = ["cargo", "derive"] }
|
||||||
|
dotenvy = "0.15.6"
|
||||||
humantime-serde = "1.0"
|
humantime-serde = "1.0"
|
||||||
isocountry = "0.3.2"
|
isocountry = "0.3.2"
|
||||||
itertools = "0.10.3"
|
itertools = "0.10.3"
|
||||||
log = { workspace = true }
|
log = { workspace = true }
|
||||||
|
maxminddb = "0.23.0"
|
||||||
okapi = { version = "0.7.0-rc.1", features = ["impl_json_schema"] }
|
okapi = { version = "0.7.0-rc.1", features = ["impl_json_schema"] }
|
||||||
pretty_env_logger = "0.4.0"
|
pretty_env_logger = "0.4.0"
|
||||||
|
rand = "0.8.5"
|
||||||
|
rand_pcg = "0.3.1"
|
||||||
|
rand_seeder = "0.2.3"
|
||||||
reqwest = "0.11.4"
|
reqwest = "0.11.4"
|
||||||
rocket = { version = "0.5.0-rc.2", features = ["json"] }
|
rocket = { version = "0.5.0-rc.2", features = ["json"] }
|
||||||
rocket_cors = { git="https://github.com/lawliet89/rocket_cors", rev="dfd3662c49e2f6fc37df35091cb94d82f7fb5915" }
|
rocket_cors = { git="https://github.com/lawliet89/rocket_cors", rev="dfd3662c49e2f6fc37df35091cb94d82f7fb5915" }
|
||||||
@@ -23,15 +28,11 @@ serde = "1.0.126"
|
|||||||
serde_json = "1.0.66"
|
serde_json = "1.0.66"
|
||||||
thiserror = "1.0.29"
|
thiserror = "1.0.29"
|
||||||
tokio = {version = "1.21.2", features = ["full"] }
|
tokio = {version = "1.21.2", features = ["full"] }
|
||||||
maxminddb = "0.23.0"
|
|
||||||
dotenvy = "0.15.6"
|
|
||||||
rand = "0.8.5"
|
|
||||||
rand_seeder = "0.2.3"
|
|
||||||
rand_pcg = "0.3.1"
|
|
||||||
|
|
||||||
nym-mixnet-contract-common = { path = "../common/cosmwasm-smart-contracts/mixnet-contract" }
|
|
||||||
nym-contracts-common = { path = "../common/cosmwasm-smart-contracts/contracts-common" }
|
|
||||||
nym-network-defaults = { path = "../common/network-defaults" }
|
|
||||||
nym-bin-common = { path = "../common/bin-common"}
|
nym-bin-common = { path = "../common/bin-common"}
|
||||||
|
nym-contracts-common = { path = "../common/cosmwasm-smart-contracts/contracts-common" }
|
||||||
|
nym-explorer-api-requests = { path = "explorer-api-requests" }
|
||||||
|
nym-mixnet-contract-common = { path = "../common/cosmwasm-smart-contracts/mixnet-contract" }
|
||||||
|
nym-network-defaults = { path = "../common/network-defaults" }
|
||||||
nym-task = { path = "../common/task" }
|
nym-task = { path = "../common/task" }
|
||||||
nym-validator-client = { path = "../common/client-libs/validator-client", features=["http-client"] }
|
nym-validator-client = { path = "../common/client-libs/validator-client", features=["http-client"] }
|
||||||
|
|||||||
@@ -0,0 +1,12 @@
|
|||||||
|
[package]
|
||||||
|
name = "nym-explorer-api-requests"
|
||||||
|
version = "0.1.0"
|
||||||
|
edition = "2021"
|
||||||
|
|
||||||
|
[dependencies]
|
||||||
|
nym-contracts-common = { path = "../../common/cosmwasm-smart-contracts/contracts-common" }
|
||||||
|
nym-mixnet-contract-common = { path = "../../common/cosmwasm-smart-contracts/mixnet-contract" }
|
||||||
|
nym-validator-client = { path = "../../common/client-libs/validator-client" }
|
||||||
|
schemars = { version = "0.8", features = ["preserve_order"] }
|
||||||
|
serde = { version = "1.0", features = ["derive"] }
|
||||||
|
ts-rs = { version = "6.1.2", optional = true }
|
||||||
@@ -0,0 +1,44 @@
|
|||||||
|
use nym_contracts_common::Percent;
|
||||||
|
use nym_mixnet_contract_common::{Addr, Coin, Layer, MixId, MixNode};
|
||||||
|
use nym_validator_client::models::NodePerformance;
|
||||||
|
use schemars::JsonSchema;
|
||||||
|
use serde::{Deserialize, Serialize};
|
||||||
|
|
||||||
|
#[derive(Clone, Debug, Serialize, Deserialize, JsonSchema, PartialEq)]
|
||||||
|
#[serde(rename_all = "snake_case")]
|
||||||
|
pub enum MixnodeStatus {
|
||||||
|
Active, // in both the active set and the rewarded set
|
||||||
|
Standby, // only in the rewarded set
|
||||||
|
Inactive, // in neither the rewarded set nor the active set
|
||||||
|
}
|
||||||
|
|
||||||
|
#[derive(Clone, Debug, Serialize, Deserialize, JsonSchema)]
|
||||||
|
pub struct PrettyDetailedMixNodeBond {
|
||||||
|
pub mix_id: MixId,
|
||||||
|
pub location: Option<Location>,
|
||||||
|
pub status: MixnodeStatus,
|
||||||
|
pub pledge_amount: Coin,
|
||||||
|
pub total_delegation: Coin,
|
||||||
|
pub owner: Addr,
|
||||||
|
pub layer: Layer,
|
||||||
|
pub mix_node: MixNode,
|
||||||
|
pub stake_saturation: f32,
|
||||||
|
pub uncapped_saturation: f32,
|
||||||
|
pub avg_uptime: u8,
|
||||||
|
pub node_performance: NodePerformance,
|
||||||
|
pub estimated_operator_apy: f64,
|
||||||
|
pub estimated_delegators_apy: f64,
|
||||||
|
pub operating_cost: Coin,
|
||||||
|
pub profit_margin_percent: Percent,
|
||||||
|
pub family_id: Option<u16>,
|
||||||
|
pub blacklisted: bool,
|
||||||
|
}
|
||||||
|
|
||||||
|
#[derive(Clone, Debug, JsonSchema, Serialize, Deserialize)]
|
||||||
|
pub struct Location {
|
||||||
|
pub two_letter_iso_country_code: String,
|
||||||
|
pub three_letter_iso_country_code: String,
|
||||||
|
pub country_name: String,
|
||||||
|
pub latitude: Option<f64>,
|
||||||
|
pub longitude: Option<f64>,
|
||||||
|
}
|
||||||
@@ -1,9 +1,9 @@
|
|||||||
// Copyright 2022 - Nym Technologies SA <contact@nymtech.net>
|
// Copyright 2022 - Nym Technologies SA <contact@nymtech.net>
|
||||||
// SPDX-License-Identifier: Apache-2.0
|
// SPDX-License-Identifier: Apache-2.0
|
||||||
|
|
||||||
use crate::mix_nodes::location::Location;
|
|
||||||
use crate::state::ExplorerApiStateContext;
|
use crate::state::ExplorerApiStateContext;
|
||||||
use log::{info, warn};
|
use log::{info, warn};
|
||||||
|
use nym_explorer_api_requests::Location;
|
||||||
use nym_task::TaskClient;
|
use nym_task::TaskClient;
|
||||||
|
|
||||||
pub(crate) struct GeoLocateTask {
|
pub(crate) struct GeoLocateTask {
|
||||||
@@ -64,7 +64,7 @@ impl GeoLocateTask {
|
|||||||
) {
|
) {
|
||||||
Ok(opt) => match opt {
|
Ok(opt) => match opt {
|
||||||
Some(location) => {
|
Some(location) => {
|
||||||
let location = Location::new(location);
|
let location: Location = location.into();
|
||||||
|
|
||||||
trace!(
|
trace!(
|
||||||
"{} mix nodes already located. Ip {} is located in {:#?}",
|
"{} mix nodes already located. Ip {} is located in {:#?}",
|
||||||
|
|||||||
@@ -42,6 +42,18 @@ pub(crate) struct Location {
|
|||||||
pub(crate) longitude: Option<f64>,
|
pub(crate) longitude: Option<f64>,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
impl From<Location> for nym_explorer_api_requests::Location {
|
||||||
|
fn from(location: Location) -> Self {
|
||||||
|
nym_explorer_api_requests::Location {
|
||||||
|
country_name: location.name,
|
||||||
|
two_letter_iso_country_code: location.iso_alpha2,
|
||||||
|
three_letter_iso_country_code: location.iso_alpha3,
|
||||||
|
latitude: location.latitude,
|
||||||
|
longitude: location.longitude,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
impl GeoIp {
|
impl GeoIp {
|
||||||
pub fn new() -> Self {
|
pub fn new() -> Self {
|
||||||
let db_path = std::env::var("GEOIP_DB_PATH").unwrap_or_else(|e| {
|
let db_path = std::env::var("GEOIP_DB_PATH").unwrap_or_else(|e| {
|
||||||
|
|||||||
@@ -6,9 +6,10 @@ use crate::mix_node::delegations::{
|
|||||||
};
|
};
|
||||||
use crate::mix_node::econ_stats::retrieve_mixnode_econ_stats;
|
use crate::mix_node::econ_stats::retrieve_mixnode_econ_stats;
|
||||||
use crate::mix_node::models::{
|
use crate::mix_node::models::{
|
||||||
EconomicDynamicsStats, NodeDescription, NodeStats, PrettyDetailedMixNodeBond, SummedDelegations,
|
EconomicDynamicsStats, NodeDescription, NodeStats, SummedDelegations,
|
||||||
};
|
};
|
||||||
use crate::state::ExplorerApiStateContext;
|
use crate::state::ExplorerApiStateContext;
|
||||||
|
use nym_explorer_api_requests::PrettyDetailedMixNodeBond;
|
||||||
use nym_mixnet_contract_common::{Delegation, MixId};
|
use nym_mixnet_contract_common::{Delegation, MixId};
|
||||||
use reqwest::Error as ReqwestError;
|
use reqwest::Error as ReqwestError;
|
||||||
use rocket::response::status::NotFound;
|
use rocket::response::status::NotFound;
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
pub(crate) mod delegations;
|
pub(crate) mod delegations;
|
||||||
pub(crate) mod econ_stats;
|
pub(crate) mod econ_stats;
|
||||||
pub(crate) mod http;
|
pub(crate) mod http;
|
||||||
pub(crate) mod models;
|
pub mod models;
|
||||||
|
|||||||
@@ -2,49 +2,15 @@
|
|||||||
// SPDX-License-Identifier: Apache-2.0
|
// SPDX-License-Identifier: Apache-2.0
|
||||||
|
|
||||||
use crate::cache::Cache;
|
use crate::cache::Cache;
|
||||||
use crate::mix_nodes::location::Location;
|
|
||||||
use nym_contracts_common::Percent;
|
|
||||||
use nym_mixnet_contract_common::Delegation;
|
use nym_mixnet_contract_common::Delegation;
|
||||||
use nym_mixnet_contract_common::{Addr, Coin, Layer, MixId, MixNode};
|
use nym_mixnet_contract_common::{Addr, Coin, MixId};
|
||||||
use nym_validator_client::models::{NodePerformance, SelectionChance};
|
use nym_validator_client::models::SelectionChance;
|
||||||
use serde::Deserialize;
|
use serde::Deserialize;
|
||||||
use serde::Serialize;
|
use serde::Serialize;
|
||||||
use std::sync::Arc;
|
use std::sync::Arc;
|
||||||
use std::time::SystemTime;
|
use std::time::SystemTime;
|
||||||
use tokio::sync::RwLock;
|
use tokio::sync::RwLock;
|
||||||
|
|
||||||
#[derive(Clone, Debug, Serialize, JsonSchema, PartialEq)]
|
|
||||||
#[serde(rename_all = "snake_case")]
|
|
||||||
pub(crate) enum MixnodeStatus {
|
|
||||||
Active, // in both the active set and the rewarded set
|
|
||||||
Standby, // only in the rewarded set
|
|
||||||
Inactive, // in neither the rewarded set nor the active set
|
|
||||||
}
|
|
||||||
|
|
||||||
#[derive(Clone, Debug, Serialize, JsonSchema)]
|
|
||||||
pub(crate) struct PrettyDetailedMixNodeBond {
|
|
||||||
// I leave this to @MS to refactor this type as a lot of things here are redundant thanks to
|
|
||||||
// the existence of `MixNodeDetails`
|
|
||||||
pub mix_id: MixId,
|
|
||||||
pub location: Option<Location>,
|
|
||||||
pub status: MixnodeStatus,
|
|
||||||
pub pledge_amount: Coin,
|
|
||||||
pub total_delegation: Coin,
|
|
||||||
pub owner: Addr,
|
|
||||||
pub layer: Layer,
|
|
||||||
pub mix_node: MixNode,
|
|
||||||
pub stake_saturation: f32,
|
|
||||||
pub uncapped_saturation: f32,
|
|
||||||
pub avg_uptime: u8,
|
|
||||||
pub node_performance: NodePerformance,
|
|
||||||
pub estimated_operator_apy: f64,
|
|
||||||
pub estimated_delegators_apy: f64,
|
|
||||||
pub operating_cost: Coin,
|
|
||||||
pub profit_margin_percent: Percent,
|
|
||||||
pub family_id: Option<u16>,
|
|
||||||
pub blacklisted: bool,
|
|
||||||
}
|
|
||||||
|
|
||||||
#[derive(Clone, Debug, Deserialize, Serialize, PartialEq, Eq, JsonSchema)]
|
#[derive(Clone, Debug, Deserialize, Serialize, PartialEq, Eq, JsonSchema)]
|
||||||
pub struct SummedDelegations {
|
pub struct SummedDelegations {
|
||||||
pub owner: Addr,
|
pub owner: Addr,
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
use crate::mix_node::models::{MixnodeStatus, PrettyDetailedMixNodeBond};
|
|
||||||
use crate::mix_nodes::models::{MixNodeActiveSetSummary, MixNodeSummary};
|
use crate::mix_nodes::models::{MixNodeActiveSetSummary, MixNodeSummary};
|
||||||
use crate::state::ExplorerApiStateContext;
|
use crate::state::ExplorerApiStateContext;
|
||||||
|
use nym_explorer_api_requests::{MixnodeStatus, PrettyDetailedMixNodeBond};
|
||||||
use rocket::serde::json::Json;
|
use rocket::serde::json::Json;
|
||||||
use rocket::{Route, State};
|
use rocket::{Route, State};
|
||||||
use rocket_okapi::okapi::openapi3::OpenApi;
|
use rocket_okapi::okapi::openapi3::OpenApi;
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
// Copyright 2021 - Nym Technologies SA <contact@nymtech.net>
|
// Copyright 2021 - Nym Technologies SA <contact@nymtech.net>
|
||||||
// SPDX-License-Identifier: Apache-2.0
|
// SPDX-License-Identifier: Apache-2.0
|
||||||
|
|
||||||
use crate::geo_ip::location;
|
use nym_explorer_api_requests::Location;
|
||||||
use nym_mixnet_contract_common::MixId;
|
use nym_mixnet_contract_common::MixId;
|
||||||
use serde::{Deserialize, Serialize};
|
use serde::{Deserialize, Serialize};
|
||||||
use std::collections::HashMap;
|
use std::collections::HashMap;
|
||||||
@@ -31,27 +31,6 @@ pub(crate) struct LocationCacheItem {
|
|||||||
pub(crate) valid_until: SystemTime,
|
pub(crate) valid_until: SystemTime,
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Clone, Debug, JsonSchema, Serialize, Deserialize)]
|
|
||||||
pub(crate) struct Location {
|
|
||||||
pub(crate) two_letter_iso_country_code: String,
|
|
||||||
pub(crate) three_letter_iso_country_code: String,
|
|
||||||
pub(crate) country_name: String,
|
|
||||||
pub(crate) latitude: Option<f64>,
|
|
||||||
pub(crate) longitude: Option<f64>,
|
|
||||||
}
|
|
||||||
|
|
||||||
impl Location {
|
|
||||||
pub(crate) fn new(location: location::Location) -> Self {
|
|
||||||
Location {
|
|
||||||
country_name: location.name,
|
|
||||||
two_letter_iso_country_code: location.iso_alpha2,
|
|
||||||
three_letter_iso_country_code: location.iso_alpha3,
|
|
||||||
latitude: location.latitude,
|
|
||||||
longitude: location.longitude,
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
impl LocationCacheItem {
|
impl LocationCacheItem {
|
||||||
pub(crate) fn new_from_location(location: Option<Location>) -> Self {
|
pub(crate) fn new_from_location(location: Option<Location>) -> Self {
|
||||||
LocationCacheItem {
|
LocationCacheItem {
|
||||||
|
|||||||
@@ -5,6 +5,7 @@ use std::collections::{HashMap, HashSet};
|
|||||||
use std::sync::Arc;
|
use std::sync::Arc;
|
||||||
use std::time::{Duration, SystemTime};
|
use std::time::{Duration, SystemTime};
|
||||||
|
|
||||||
|
use nym_explorer_api_requests::{Location, MixnodeStatus, PrettyDetailedMixNodeBond};
|
||||||
use nym_mixnet_contract_common::rewarding::helpers::truncate_reward;
|
use nym_mixnet_contract_common::rewarding::helpers::truncate_reward;
|
||||||
use nym_mixnet_contract_common::MixId;
|
use nym_mixnet_contract_common::MixId;
|
||||||
use serde::Serialize;
|
use serde::Serialize;
|
||||||
@@ -14,8 +15,7 @@ use crate::helpers::best_effort_small_dec_to_f64;
|
|||||||
use nym_validator_client::models::MixNodeBondAnnotated;
|
use nym_validator_client::models::MixNodeBondAnnotated;
|
||||||
|
|
||||||
use super::utils::family_numerical_id;
|
use super::utils::family_numerical_id;
|
||||||
use crate::mix_node::models::{MixnodeStatus, PrettyDetailedMixNodeBond};
|
use crate::mix_nodes::location::{LocationCache, LocationCacheItem};
|
||||||
use crate::mix_nodes::location::{Location, LocationCache, LocationCacheItem};
|
|
||||||
use crate::mix_nodes::CACHE_ENTRY_TTL;
|
use crate::mix_nodes::CACHE_ENTRY_TTL;
|
||||||
|
|
||||||
#[derive(Clone, Debug, Serialize, JsonSchema)]
|
#[derive(Clone, Debug, Serialize, JsonSchema)]
|
||||||
|
|||||||
@@ -0,0 +1,16 @@
|
|||||||
|
// Copyright 2023 - Nym Technologies SA <contact@nymtech.net>
|
||||||
|
// SPDX-License-Identifier: Apache-2.0
|
||||||
|
|
||||||
|
use clap::Args;
|
||||||
|
use nym_bin_common::bin_info_owned;
|
||||||
|
use nym_bin_common::output_format::OutputFormat;
|
||||||
|
|
||||||
|
#[derive(Args)]
|
||||||
|
pub(crate) struct BuildInfo {
|
||||||
|
#[clap(short, long, default_value_t = OutputFormat::default())]
|
||||||
|
output: OutputFormat,
|
||||||
|
}
|
||||||
|
|
||||||
|
pub(crate) fn execute(args: BuildInfo) {
|
||||||
|
println!("{}", args.output.format(&bin_info_owned!()))
|
||||||
|
}
|
||||||
@@ -18,6 +18,7 @@ use std::error::Error;
|
|||||||
use std::net::IpAddr;
|
use std::net::IpAddr;
|
||||||
use std::path::PathBuf;
|
use std::path::PathBuf;
|
||||||
|
|
||||||
|
pub(crate) mod build_info;
|
||||||
pub(crate) mod init;
|
pub(crate) mod init;
|
||||||
pub(crate) mod node_details;
|
pub(crate) mod node_details;
|
||||||
pub(crate) mod run;
|
pub(crate) mod run;
|
||||||
@@ -37,6 +38,9 @@ pub(crate) enum Commands {
|
|||||||
/// Sign text to prove ownership of this mixnode
|
/// Sign text to prove ownership of this mixnode
|
||||||
Sign(sign::Sign),
|
Sign(sign::Sign),
|
||||||
|
|
||||||
|
/// Show build information of this binary
|
||||||
|
BuildInfo(build_info::BuildInfo),
|
||||||
|
|
||||||
/// Generate shell completions
|
/// Generate shell completions
|
||||||
Completions(ArgShell),
|
Completions(ArgShell),
|
||||||
|
|
||||||
@@ -67,6 +71,7 @@ pub(crate) async fn execute(args: Cli) -> Result<(), Box<dyn Error + Send + Sync
|
|||||||
Commands::NodeDetails(m) => node_details::execute(m).await?,
|
Commands::NodeDetails(m) => node_details::execute(m).await?,
|
||||||
Commands::Run(m) => run::execute(m).await?,
|
Commands::Run(m) => run::execute(m).await?,
|
||||||
Commands::Sign(m) => sign::execute(m)?,
|
Commands::Sign(m) => sign::execute(m)?,
|
||||||
|
Commands::BuildInfo(m) => build_info::execute(m),
|
||||||
Commands::Completions(s) => s.generate(&mut crate::Cli::command(), bin_name),
|
Commands::Completions(s) => s.generate(&mut crate::Cli::command(), bin_name),
|
||||||
Commands::GenerateFigSpec => fig_generate(&mut crate::Cli::command(), bin_name),
|
Commands::GenerateFigSpec => fig_generate(&mut crate::Cli::command(), bin_name),
|
||||||
}
|
}
|
||||||
|
|||||||
+11
-6
@@ -5,7 +5,7 @@ use clap::{crate_name, crate_version, Parser};
|
|||||||
use colored::Colorize;
|
use colored::Colorize;
|
||||||
use lazy_static::lazy_static;
|
use lazy_static::lazy_static;
|
||||||
use log::error;
|
use log::error;
|
||||||
use nym_bin_common::build_information::BinaryBuildInformation;
|
use nym_bin_common::bin_info;
|
||||||
use nym_bin_common::logging::{maybe_print_banner, setup_logging};
|
use nym_bin_common::logging::{maybe_print_banner, setup_logging};
|
||||||
use nym_bin_common::output_format::OutputFormat;
|
use nym_bin_common::output_format::OutputFormat;
|
||||||
use nym_network_defaults::setup_env;
|
use nym_network_defaults::setup_env;
|
||||||
@@ -18,8 +18,7 @@ mod node;
|
|||||||
pub(crate) mod support;
|
pub(crate) mod support;
|
||||||
|
|
||||||
lazy_static! {
|
lazy_static! {
|
||||||
pub static ref PRETTY_BUILD_INFORMATION: String =
|
pub static ref PRETTY_BUILD_INFORMATION: String = bin_info!().pretty_print();
|
||||||
BinaryBuildInformation::new(env!("CARGO_PKG_VERSION")).pretty_print();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Helper for passing LONG_VERSION to clap
|
// Helper for passing LONG_VERSION to clap
|
||||||
@@ -34,18 +33,24 @@ struct Cli {
|
|||||||
#[clap(short, long)]
|
#[clap(short, long)]
|
||||||
pub(crate) config_env_file: Option<std::path::PathBuf>,
|
pub(crate) config_env_file: Option<std::path::PathBuf>,
|
||||||
|
|
||||||
|
/// Flag used for disabling the printed banner in tty.
|
||||||
|
#[clap(long)]
|
||||||
|
pub(crate) no_banner: bool,
|
||||||
|
|
||||||
#[clap(subcommand)]
|
#[clap(subcommand)]
|
||||||
command: commands::Commands,
|
command: commands::Commands,
|
||||||
}
|
}
|
||||||
|
|
||||||
#[tokio::main]
|
#[tokio::main]
|
||||||
async fn main() -> Result<(), Box<dyn Error + Send + Sync>> {
|
async fn main() -> Result<(), Box<dyn Error + Send + Sync>> {
|
||||||
setup_logging();
|
|
||||||
maybe_print_banner(crate_name!(), crate_version!());
|
|
||||||
|
|
||||||
let args = Cli::parse();
|
let args = Cli::parse();
|
||||||
setup_env(args.config_env_file.as_ref());
|
setup_env(args.config_env_file.as_ref());
|
||||||
|
|
||||||
|
if !args.no_banner {
|
||||||
|
maybe_print_banner(crate_name!(), crate_version!());
|
||||||
|
}
|
||||||
|
setup_logging();
|
||||||
|
|
||||||
commands::execute(args).await.map_err(|err| {
|
commands::execute(args).await.map_err(|err| {
|
||||||
if atty::is(atty::Stream::Stdout) {
|
if atty::is(atty::Stream::Stdout) {
|
||||||
let error_message = format!("{err}").red();
|
let error_message = format!("{err}").red();
|
||||||
|
|||||||
@@ -0,0 +1,16 @@
|
|||||||
|
// Copyright 2023 - Nym Technologies SA <contact@nymtech.net>
|
||||||
|
// SPDX-License-Identifier: Apache-2.0
|
||||||
|
|
||||||
|
use clap::Args;
|
||||||
|
use nym_bin_common::bin_info_owned;
|
||||||
|
use nym_bin_common::output_format::OutputFormat;
|
||||||
|
|
||||||
|
#[derive(Args)]
|
||||||
|
pub(crate) struct BuildInfo {
|
||||||
|
#[clap(short, long, default_value_t = OutputFormat::default())]
|
||||||
|
output: OutputFormat,
|
||||||
|
}
|
||||||
|
|
||||||
|
pub(crate) fn execute(args: BuildInfo) {
|
||||||
|
println!("{}", args.output.format(&bin_info_owned!()))
|
||||||
|
}
|
||||||
@@ -15,6 +15,7 @@ use nym_crypto::bech32_address_validation;
|
|||||||
use std::net::IpAddr;
|
use std::net::IpAddr;
|
||||||
use std::process;
|
use std::process;
|
||||||
|
|
||||||
|
mod build_info;
|
||||||
mod describe;
|
mod describe;
|
||||||
mod init;
|
mod init;
|
||||||
mod node_details;
|
mod node_details;
|
||||||
@@ -38,6 +39,9 @@ pub(crate) enum Commands {
|
|||||||
/// Show details of this mixnode
|
/// Show details of this mixnode
|
||||||
NodeDetails(node_details::NodeDetails),
|
NodeDetails(node_details::NodeDetails),
|
||||||
|
|
||||||
|
/// Show build information of this binary
|
||||||
|
BuildInfo(build_info::BuildInfo),
|
||||||
|
|
||||||
/// Generate shell completions
|
/// Generate shell completions
|
||||||
Completions(ArgShell),
|
Completions(ArgShell),
|
||||||
|
|
||||||
@@ -64,6 +68,7 @@ pub(crate) async fn execute(args: Cli) -> anyhow::Result<()> {
|
|||||||
Commands::Run(m) => run::execute(&m).await?,
|
Commands::Run(m) => run::execute(&m).await?,
|
||||||
Commands::Sign(m) => sign::execute(&m)?,
|
Commands::Sign(m) => sign::execute(&m)?,
|
||||||
Commands::NodeDetails(m) => node_details::execute(&m)?,
|
Commands::NodeDetails(m) => node_details::execute(&m)?,
|
||||||
|
Commands::BuildInfo(m) => build_info::execute(m),
|
||||||
Commands::Completions(s) => s.generate(&mut crate::Cli::command(), bin_name),
|
Commands::Completions(s) => s.generate(&mut crate::Cli::command(), bin_name),
|
||||||
Commands::GenerateFigSpec => fig_generate(&mut crate::Cli::command(), bin_name),
|
Commands::GenerateFigSpec => fig_generate(&mut crate::Cli::command(), bin_name),
|
||||||
}
|
}
|
||||||
|
|||||||
+15
-7
@@ -7,7 +7,8 @@ extern crate rocket;
|
|||||||
use ::nym_config::defaults::setup_env;
|
use ::nym_config::defaults::setup_env;
|
||||||
use clap::{crate_name, crate_version, Parser};
|
use clap::{crate_name, crate_version, Parser};
|
||||||
use lazy_static::lazy_static;
|
use lazy_static::lazy_static;
|
||||||
use nym_bin_common::build_information::BinaryBuildInformation;
|
use nym_bin_common::bin_info;
|
||||||
|
|
||||||
#[allow(unused_imports)]
|
#[allow(unused_imports)]
|
||||||
use nym_bin_common::logging::{maybe_print_banner, setup_logging};
|
use nym_bin_common::logging::{maybe_print_banner, setup_logging};
|
||||||
#[cfg(feature = "cpucycles")]
|
#[cfg(feature = "cpucycles")]
|
||||||
@@ -16,13 +17,13 @@ use nym_bin_common::setup_tracing;
|
|||||||
use nym_mixnode_common::measure;
|
use nym_mixnode_common::measure;
|
||||||
#[cfg(feature = "cpucycles")]
|
#[cfg(feature = "cpucycles")]
|
||||||
use tracing::instrument;
|
use tracing::instrument;
|
||||||
|
|
||||||
mod commands;
|
mod commands;
|
||||||
mod config;
|
mod config;
|
||||||
mod node;
|
mod node;
|
||||||
|
|
||||||
lazy_static! {
|
lazy_static! {
|
||||||
pub static ref PRETTY_BUILD_INFORMATION: String =
|
pub static ref PRETTY_BUILD_INFORMATION: String = bin_info!().pretty_print();
|
||||||
BinaryBuildInformation::new(env!("CARGO_PKG_VERSION")).pretty_print();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Helper for passing LONG_VERSION to clap
|
// Helper for passing LONG_VERSION to clap
|
||||||
@@ -37,6 +38,10 @@ struct Cli {
|
|||||||
#[clap(short, long)]
|
#[clap(short, long)]
|
||||||
pub(crate) config_env_file: Option<std::path::PathBuf>,
|
pub(crate) config_env_file: Option<std::path::PathBuf>,
|
||||||
|
|
||||||
|
/// Flag used for disabling the printed banner in tty.
|
||||||
|
#[clap(long)]
|
||||||
|
pub(crate) no_banner: bool,
|
||||||
|
|
||||||
#[clap(subcommand)]
|
#[clap(subcommand)]
|
||||||
command: commands::Commands,
|
command: commands::Commands,
|
||||||
}
|
}
|
||||||
@@ -49,6 +54,13 @@ fn test_function() {
|
|||||||
|
|
||||||
#[tokio::main]
|
#[tokio::main]
|
||||||
async fn main() -> anyhow::Result<()> {
|
async fn main() -> anyhow::Result<()> {
|
||||||
|
let args = Cli::parse();
|
||||||
|
setup_env(args.config_env_file.as_ref());
|
||||||
|
|
||||||
|
if !args.no_banner {
|
||||||
|
maybe_print_banner(crate_name!(), crate_version!());
|
||||||
|
}
|
||||||
|
|
||||||
cfg_if::cfg_if! {
|
cfg_if::cfg_if! {
|
||||||
if #[cfg(feature = "cpucycles")] {
|
if #[cfg(feature = "cpucycles")] {
|
||||||
setup_tracing!("mixnode");
|
setup_tracing!("mixnode");
|
||||||
@@ -59,10 +71,6 @@ async fn main() -> anyhow::Result<()> {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
maybe_print_banner(crate_name!(), crate_version!());
|
|
||||||
|
|
||||||
let args = Cli::parse();
|
|
||||||
setup_env(args.config_env_file.as_ref());
|
|
||||||
commands::execute(args).await?;
|
commands::execute(args).await?;
|
||||||
|
|
||||||
cfg_if::cfg_if! {
|
cfg_if::cfg_if! {
|
||||||
|
|||||||
@@ -8,14 +8,13 @@ use ::nym_config::defaults::var_names::{MIXNET_CONTRACT_ADDRESS, VESTING_CONTRAC
|
|||||||
use anyhow::Result;
|
use anyhow::Result;
|
||||||
use clap::Parser;
|
use clap::Parser;
|
||||||
use lazy_static::lazy_static;
|
use lazy_static::lazy_static;
|
||||||
use nym_bin_common::build_information::BinaryBuildInformation;
|
use nym_bin_common::bin_info;
|
||||||
use nym_config::defaults::var_names::NYXD;
|
use nym_config::defaults::var_names::NYXD;
|
||||||
use nym_config::OptionalSet;
|
use nym_config::OptionalSet;
|
||||||
use nym_validator_client::nyxd;
|
use nym_validator_client::nyxd;
|
||||||
|
|
||||||
lazy_static! {
|
lazy_static! {
|
||||||
pub static ref PRETTY_BUILD_INFORMATION: String =
|
pub static ref PRETTY_BUILD_INFORMATION: String = bin_info!().pretty_print();
|
||||||
BinaryBuildInformation::new(env!("CARGO_PKG_VERSION")).pretty_print();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Helper for passing LONG_VERSION to clap
|
// Helper for passing LONG_VERSION to clap
|
||||||
|
|||||||
@@ -1,12 +1,9 @@
|
|||||||
import ConfigHandler from "../../src/config/configHandler";
|
|
||||||
import ContractCache from "../../src/endpoints/CirculatingSupply";
|
import ContractCache from "../../src/endpoints/CirculatingSupply";
|
||||||
let contract: ContractCache;
|
let contract: ContractCache;
|
||||||
let config: ConfigHandler;
|
|
||||||
|
|
||||||
describe("Get circulating supply", (): void => {
|
describe("Get circulating supply", (): void => {
|
||||||
beforeAll(async (): Promise<void> => {
|
beforeAll(async (): Promise<void> => {
|
||||||
contract = new ContractCache();
|
contract = new ContractCache();
|
||||||
config = ConfigHandler.getInstance();
|
|
||||||
});
|
});
|
||||||
|
|
||||||
it("Get circulating supply amounts", async (): Promise<void> => {
|
it("Get circulating supply amounts", async (): Promise<void> => {
|
||||||
|
|||||||
@@ -1,13 +1,10 @@
|
|||||||
import ContractCache from "../../src/endpoints/ContractCache";
|
import ContractCache from "../../src/endpoints/ContractCache";
|
||||||
import ConfigHandler from "../../src/config/configHandler";
|
|
||||||
|
|
||||||
let contract: ContractCache;
|
let contract: ContractCache;
|
||||||
let config: ConfigHandler;
|
|
||||||
|
|
||||||
describe("Get epoch info", (): void => {
|
describe("Get epoch info", (): void => {
|
||||||
beforeAll(async (): Promise<void> => {
|
beforeAll(async (): Promise<void> => {
|
||||||
contract = new ContractCache();
|
contract = new ContractCache();
|
||||||
config = ConfigHandler.getInstance();
|
|
||||||
});
|
});
|
||||||
|
|
||||||
it("Get epoch reward params", async (): Promise<void> => {
|
it("Get epoch reward params", async (): Promise<void> => {
|
||||||
|
|||||||
@@ -1,13 +1,10 @@
|
|||||||
import ContractCache from "../../../src/endpoints/ContractCache";
|
import ContractCache from "../../../src/endpoints/ContractCache";
|
||||||
import ConfigHandler from "../../../src/config/configHandler";
|
|
||||||
|
|
||||||
let contract: ContractCache;
|
let contract: ContractCache;
|
||||||
let config: ConfigHandler;
|
|
||||||
|
|
||||||
describe("Get gateway data", (): void => {
|
describe("Get gateway data", (): void => {
|
||||||
beforeAll(async (): Promise<void> => {
|
beforeAll(async (): Promise<void> => {
|
||||||
contract = new ContractCache();
|
contract = new ContractCache();
|
||||||
config = ConfigHandler.getInstance();
|
|
||||||
});
|
});
|
||||||
|
|
||||||
it("Get all gateways", async (): Promise<void> => {
|
it("Get all gateways", async (): Promise<void> => {
|
||||||
@@ -40,8 +37,13 @@ describe("Get gateway data", (): void => {
|
|||||||
|
|
||||||
it("Get blacklisted gateways", async (): Promise<void> => {
|
it("Get blacklisted gateways", async (): Promise<void> => {
|
||||||
const response = await contract.getBlacklistedGateways();
|
const response = await contract.getBlacklistedGateways();
|
||||||
response.forEach(function (value) {
|
if (response === null) {
|
||||||
expect(typeof value).toBe("string");
|
// no blacklisted gateways returns an empty array
|
||||||
});
|
expect(response).toBeNull();
|
||||||
|
} else {
|
||||||
|
response.forEach(function (value) {
|
||||||
|
expect(typeof value).toBe("string");
|
||||||
|
});
|
||||||
|
}
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|||||||
+126
-41
@@ -16,8 +16,12 @@ describe("Get mixnode data", (): void => {
|
|||||||
//bond information overview
|
//bond information overview
|
||||||
expect(typeof mixnode.bond_information.mix_id).toBe("number");
|
expect(typeof mixnode.bond_information.mix_id).toBe("number");
|
||||||
expect(typeof mixnode.bond_information.owner).toBe("string");
|
expect(typeof mixnode.bond_information.owner).toBe("string");
|
||||||
expect(typeof mixnode.bond_information.original_pledge.amount).toBe("string");
|
expect(typeof mixnode.bond_information.original_pledge.amount).toBe(
|
||||||
expect(typeof mixnode.bond_information.original_pledge.denom).toBe("string");
|
"string"
|
||||||
|
);
|
||||||
|
expect(typeof mixnode.bond_information.original_pledge.denom).toBe(
|
||||||
|
"string"
|
||||||
|
);
|
||||||
expect(typeof mixnode.bond_information.layer).toBe("number");
|
expect(typeof mixnode.bond_information.layer).toBe("number");
|
||||||
expect(typeof mixnode.bond_information.bonding_height).toBe("number");
|
expect(typeof mixnode.bond_information.bonding_height).toBe("number");
|
||||||
expect(typeof mixnode.bond_information.is_unbonding).toBe("boolean");
|
expect(typeof mixnode.bond_information.is_unbonding).toBe("boolean");
|
||||||
@@ -30,11 +34,17 @@ describe("Get mixnode data", (): void => {
|
|||||||
|
|
||||||
//mixnode
|
//mixnode
|
||||||
expect(typeof mixnode.bond_information.mix_node.host).toBe("string");
|
expect(typeof mixnode.bond_information.mix_node.host).toBe("string");
|
||||||
expect(mixnode.bond_information.mix_node.http_api_port).toStrictEqual(8000);
|
expect(mixnode.bond_information.mix_node.http_api_port).toStrictEqual(
|
||||||
expect(typeof mixnode.bond_information.mix_node.verloc_port).toBe("number");
|
8000
|
||||||
|
);
|
||||||
|
expect(typeof mixnode.bond_information.mix_node.verloc_port).toBe(
|
||||||
|
"number"
|
||||||
|
);
|
||||||
expect(typeof mixnode.bond_information.mix_node.mix_port).toBe("number");
|
expect(typeof mixnode.bond_information.mix_node.mix_port).toBe("number");
|
||||||
expect(mixnode.bond_information.mix_node.mix_port).toStrictEqual(1789);
|
expect(mixnode.bond_information.mix_node.mix_port).toStrictEqual(1789);
|
||||||
expect(typeof mixnode.bond_information.mix_node.verloc_port).toBe("number");
|
expect(typeof mixnode.bond_information.mix_node.verloc_port).toBe(
|
||||||
|
"number"
|
||||||
|
);
|
||||||
|
|
||||||
const identitykey = mixnode.bond_information.mix_node.identity_key;
|
const identitykey = mixnode.bond_information.mix_node.identity_key;
|
||||||
if (typeof identitykey === "string") {
|
if (typeof identitykey === "string") {
|
||||||
@@ -51,15 +61,27 @@ describe("Get mixnode data", (): void => {
|
|||||||
}
|
}
|
||||||
|
|
||||||
//rewarding details
|
//rewarding details
|
||||||
expect(typeof mixnode.rewarding_details.cost_params.profit_margin_percent).toBe("string");
|
expect(
|
||||||
expect(typeof mixnode.rewarding_details.cost_params.interval_operating_cost.denom).toBe("string");
|
typeof mixnode.rewarding_details.cost_params.profit_margin_percent
|
||||||
expect(typeof mixnode.rewarding_details.cost_params.interval_operating_cost.amount).toBe("string");
|
).toBe("string");
|
||||||
|
expect(
|
||||||
|
typeof mixnode.rewarding_details.cost_params.interval_operating_cost
|
||||||
|
.denom
|
||||||
|
).toBe("string");
|
||||||
|
expect(
|
||||||
|
typeof mixnode.rewarding_details.cost_params.interval_operating_cost
|
||||||
|
.amount
|
||||||
|
).toBe("string");
|
||||||
expect(typeof mixnode.rewarding_details.operator).toBe("string");
|
expect(typeof mixnode.rewarding_details.operator).toBe("string");
|
||||||
expect(typeof mixnode.rewarding_details.delegates).toBe("string");
|
expect(typeof mixnode.rewarding_details.delegates).toBe("string");
|
||||||
expect(typeof mixnode.rewarding_details.total_unit_reward).toBe("string");
|
expect(typeof mixnode.rewarding_details.total_unit_reward).toBe("string");
|
||||||
expect(typeof mixnode.rewarding_details.unit_delegation).toBe("string");
|
expect(typeof mixnode.rewarding_details.unit_delegation).toBe("string");
|
||||||
expect(typeof mixnode.rewarding_details.last_rewarded_epoch).toBe("number");
|
expect(typeof mixnode.rewarding_details.last_rewarded_epoch).toBe(
|
||||||
expect(typeof mixnode.rewarding_details.unique_delegations).toBe("number");
|
"number"
|
||||||
|
);
|
||||||
|
expect(typeof mixnode.rewarding_details.unique_delegations).toBe(
|
||||||
|
"number"
|
||||||
|
);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -76,36 +98,66 @@ describe("Get mixnode data", (): void => {
|
|||||||
// expect(typeof mixnode.family).toBe("string");
|
// expect(typeof mixnode.family).toBe("string");
|
||||||
|
|
||||||
//mixnode details bond info
|
//mixnode details bond info
|
||||||
expect(typeof mixnode.mixnode_details.bond_information.mix_id).toBe("number")
|
expect(typeof mixnode.mixnode_details.bond_information.mix_id).toBe(
|
||||||
expect(typeof mixnode.mixnode_details.bond_information.owner).toBe("string");
|
"number"
|
||||||
expect(typeof mixnode.mixnode_details.bond_information.original_pledge.amount).toBe("string");
|
);
|
||||||
expect(typeof mixnode.mixnode_details.bond_information.original_pledge.denom).toBe("string");
|
expect(typeof mixnode.mixnode_details.bond_information.owner).toBe(
|
||||||
expect(typeof mixnode.mixnode_details.bond_information.layer).toBe("number");
|
"string"
|
||||||
expect(typeof mixnode.mixnode_details.bond_information.bonding_height).toBe("number");
|
);
|
||||||
expect(typeof mixnode.mixnode_details.bond_information.is_unbonding).toBe("boolean");
|
expect(
|
||||||
|
typeof mixnode.mixnode_details.bond_information.original_pledge.amount
|
||||||
|
).toBe("string");
|
||||||
|
expect(
|
||||||
|
typeof mixnode.mixnode_details.bond_information.original_pledge.denom
|
||||||
|
).toBe("string");
|
||||||
|
expect(typeof mixnode.mixnode_details.bond_information.layer).toBe(
|
||||||
|
"number"
|
||||||
|
);
|
||||||
|
expect(
|
||||||
|
typeof mixnode.mixnode_details.bond_information.bonding_height
|
||||||
|
).toBe("number");
|
||||||
|
expect(typeof mixnode.mixnode_details.bond_information.is_unbonding).toBe(
|
||||||
|
"boolean"
|
||||||
|
);
|
||||||
|
|
||||||
if (mixnode.mixnode_details.bond_information.proxy === null) {
|
if (mixnode.mixnode_details.bond_information.proxy === null) {
|
||||||
return true;
|
return true;
|
||||||
} else {
|
} else {
|
||||||
expect(typeof mixnode.mixnode_details.bond_information.proxy).toBe("string");
|
expect(typeof mixnode.mixnode_details.bond_information.proxy).toBe(
|
||||||
|
"string"
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
//mixnode
|
//mixnode
|
||||||
expect(typeof mixnode.mixnode_details.bond_information.mix_node.host).toBe("string");
|
expect(
|
||||||
expect(mixnode.mixnode_details.bond_information.mix_node.http_api_port).toStrictEqual(8000);
|
typeof mixnode.mixnode_details.bond_information.mix_node.host
|
||||||
expect(typeof mixnode.mixnode_details.bond_information.mix_node.verloc_port).toBe("number");
|
).toBe("string");
|
||||||
expect(typeof mixnode.mixnode_details.bond_information.mix_node.mix_port).toBe("number");
|
expect(
|
||||||
expect(mixnode.mixnode_details.bond_information.mix_node.mix_port).toStrictEqual(1789);
|
mixnode.mixnode_details.bond_information.mix_node.http_api_port
|
||||||
expect(typeof mixnode.mixnode_details.bond_information.mix_node.verloc_port).toBe("number");
|
).toStrictEqual(8000);
|
||||||
|
expect(
|
||||||
|
typeof mixnode.mixnode_details.bond_information.mix_node.verloc_port
|
||||||
|
).toBe("number");
|
||||||
|
expect(
|
||||||
|
typeof mixnode.mixnode_details.bond_information.mix_node.mix_port
|
||||||
|
).toBe("number");
|
||||||
|
expect(
|
||||||
|
mixnode.mixnode_details.bond_information.mix_node.mix_port
|
||||||
|
).toStrictEqual(1789);
|
||||||
|
expect(
|
||||||
|
typeof mixnode.mixnode_details.bond_information.mix_node.verloc_port
|
||||||
|
).toBe("number");
|
||||||
|
|
||||||
const identitykey2 = mixnode.mixnode_details.bond_information.mix_node.identity_key
|
const identitykey2 =
|
||||||
|
mixnode.mixnode_details.bond_information.mix_node.identity_key;
|
||||||
if (typeof identitykey2 === "string") {
|
if (typeof identitykey2 === "string") {
|
||||||
if (identitykey2.length === 43) {
|
if (identitykey2.length === 43) {
|
||||||
return true;
|
return true;
|
||||||
} else expect(identitykey2).toHaveLength(44);
|
} else expect(identitykey2).toHaveLength(44);
|
||||||
}
|
}
|
||||||
|
|
||||||
const sphinx2 = mixnode.mixnode_details.bond_information.mix_node.sphinx_key
|
const sphinx2 =
|
||||||
|
mixnode.mixnode_details.bond_information.mix_node.sphinx_key;
|
||||||
if (typeof sphinx2 === "string") {
|
if (typeof sphinx2 === "string") {
|
||||||
if (sphinx2.length === 43) {
|
if (sphinx2.length === 43) {
|
||||||
return true;
|
return true;
|
||||||
@@ -113,22 +165,45 @@ describe("Get mixnode data", (): void => {
|
|||||||
}
|
}
|
||||||
|
|
||||||
//mixnode rewarding info
|
//mixnode rewarding info
|
||||||
expect(typeof mixnode.mixnode_details.rewarding_details.cost_params.profit_margin_percent).toBe("string");
|
expect(
|
||||||
expect(typeof mixnode.mixnode_details.rewarding_details.cost_params.interval_operating_cost.denom).toBe("string");
|
typeof mixnode.mixnode_details.rewarding_details.cost_params
|
||||||
expect(typeof mixnode.mixnode_details.rewarding_details.cost_params.interval_operating_cost.amount).toBe("string");
|
.profit_margin_percent
|
||||||
expect(typeof mixnode.mixnode_details.rewarding_details.operator).toBe("string");
|
).toBe("string");
|
||||||
expect(typeof mixnode.mixnode_details.rewarding_details.delegates).toBe("string");
|
expect(
|
||||||
expect(typeof mixnode.mixnode_details.rewarding_details.total_unit_reward).toBe("string");
|
typeof mixnode.mixnode_details.rewarding_details.cost_params
|
||||||
expect(typeof mixnode.mixnode_details.rewarding_details.unit_delegation).toBe("string");
|
.interval_operating_cost.denom
|
||||||
expect(typeof mixnode.mixnode_details.rewarding_details.last_rewarded_epoch).toBe("number");
|
).toBe("string");
|
||||||
expect(typeof mixnode.mixnode_details.rewarding_details.unique_delegations).toBe("number");
|
expect(
|
||||||
|
typeof mixnode.mixnode_details.rewarding_details.cost_params
|
||||||
|
.interval_operating_cost.amount
|
||||||
|
).toBe("string");
|
||||||
|
expect(typeof mixnode.mixnode_details.rewarding_details.operator).toBe(
|
||||||
|
"string"
|
||||||
|
);
|
||||||
|
expect(typeof mixnode.mixnode_details.rewarding_details.delegates).toBe(
|
||||||
|
"string"
|
||||||
|
);
|
||||||
|
expect(
|
||||||
|
typeof mixnode.mixnode_details.rewarding_details.total_unit_reward
|
||||||
|
).toBe("string");
|
||||||
|
expect(
|
||||||
|
typeof mixnode.mixnode_details.rewarding_details.unit_delegation
|
||||||
|
).toBe("string");
|
||||||
|
expect(
|
||||||
|
typeof mixnode.mixnode_details.rewarding_details.last_rewarded_epoch
|
||||||
|
).toBe("number");
|
||||||
|
expect(
|
||||||
|
typeof mixnode.mixnode_details.rewarding_details.unique_delegations
|
||||||
|
).toBe("number");
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
it("Get active mixnodes", async (): Promise<void> => {
|
it("Get active mixnodes", async (): Promise<void> => {
|
||||||
const response = await contract.getActiveMixnodes();
|
const response = await contract.getActiveMixnodes();
|
||||||
response.forEach(function (mixnode) {
|
response.forEach(function (mixnode) {
|
||||||
expect(mixnode.rewarding_details.cost_params.profit_margin_percent).toBeTruthy();
|
expect(
|
||||||
|
mixnode.rewarding_details.cost_params.profit_margin_percent
|
||||||
|
).toBeTruthy();
|
||||||
expect(typeof mixnode.bond_information.layer).toBe("number");
|
expect(typeof mixnode.bond_information.layer).toBe("number");
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
@@ -136,7 +211,10 @@ describe("Get mixnode data", (): void => {
|
|||||||
it("Get active mixnodes detailed", async (): Promise<void> => {
|
it("Get active mixnodes detailed", async (): Promise<void> => {
|
||||||
const response = await contract.getActiveMixnodesDetailed();
|
const response = await contract.getActiveMixnodesDetailed();
|
||||||
response.forEach(function (mixnode) {
|
response.forEach(function (mixnode) {
|
||||||
expect(mixnode.mixnode_details.rewarding_details.cost_params.profit_margin_percent).toBeTruthy();
|
expect(
|
||||||
|
mixnode.mixnode_details.rewarding_details.cost_params
|
||||||
|
.profit_margin_percent
|
||||||
|
).toBeTruthy();
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -150,14 +228,21 @@ describe("Get mixnode data", (): void => {
|
|||||||
it("Get rewarded mixnodes detailed", async (): Promise<void> => {
|
it("Get rewarded mixnodes detailed", async (): Promise<void> => {
|
||||||
const response = await contract.getRewardedMixnodesDetailed();
|
const response = await contract.getRewardedMixnodesDetailed();
|
||||||
response.forEach(function (mixnode) {
|
response.forEach(function (mixnode) {
|
||||||
expect(mixnode.mixnode_details.rewarding_details.last_rewarded_epoch).toBeTruthy();
|
expect(
|
||||||
|
mixnode.mixnode_details.rewarding_details.last_rewarded_epoch
|
||||||
|
).toBeTruthy();
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
it("Get blacklisted mixnodes", async (): Promise<void> => {
|
it("Get blacklisted mixnodes", async (): Promise<void> => {
|
||||||
const response = await contract.getBlacklistedMixnodes();
|
const response = await contract.getBlacklistedMixnodes();
|
||||||
response.forEach(function (value) {
|
if (response === null) {
|
||||||
expect(typeof value).toBe("number");
|
// no blacklisted mixnodes returns an empty array
|
||||||
});
|
expect(response).toBeNull();
|
||||||
|
} else {
|
||||||
|
response.forEach(function (value) {
|
||||||
|
expect(typeof value).toBe("number");
|
||||||
|
});
|
||||||
|
}
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -1,28 +1,24 @@
|
|||||||
import ContractCache from "../../src/endpoints/ContractCache";
|
import ContractCache from "../../src/endpoints/ContractCache";
|
||||||
import ConfigHandler from "../../src/config/configHandler";
|
|
||||||
|
|
||||||
let contract: ContractCache;
|
let contract: ContractCache;
|
||||||
let config: ConfigHandler;
|
|
||||||
|
|
||||||
describe("Get service provider info", (): void => {
|
describe("Get service provider info", (): void => {
|
||||||
beforeAll(async (): Promise<void> => {
|
beforeAll(async (): Promise<void> => {
|
||||||
contract = new ContractCache();
|
contract = new ContractCache();
|
||||||
config = ConfigHandler.getInstance();
|
});
|
||||||
});
|
|
||||||
|
|
||||||
it("Get service providers", async (): Promise<void> => {
|
it("Get service providers", async (): Promise<void> => {
|
||||||
const response = await contract.getServiceProviders();
|
const response = await contract.getServiceProviders();
|
||||||
if ("[service_id]" in response) {
|
if ("[service_id]" in response) {
|
||||||
response.services.forEach((x) => {
|
response.services.forEach((x) => {
|
||||||
expect(typeof x.service.nym_address.address).toBe("string");
|
expect(typeof x.service.nym_address.address).toBe("string");
|
||||||
expect(typeof x.service.service_type).toBe("string");
|
expect(typeof x.service.service_type).toBe("string");
|
||||||
expect(typeof x.service.block_height).toBe("number");
|
expect(typeof x.service.block_height).toBe("number");
|
||||||
expect(typeof x.service.announcer).toBe("string");
|
expect(typeof x.service.announcer).toBe("string");
|
||||||
expect(typeof x.service.deposit.amount).toBe("string");
|
expect(typeof x.service.deposit.amount).toBe("string");
|
||||||
expect(typeof x.service.deposit.denom).toBe("string");
|
expect(typeof x.service.deposit.denom).toBe("string");
|
||||||
});
|
});
|
||||||
} else if ("[ ]" in response) {
|
} else if ("[ ]" in response) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -40,7 +40,9 @@ describe("Get gateway data", (): void => {
|
|||||||
expect(identity_key).toStrictEqual(response.identity);
|
expect(identity_key).toStrictEqual(response.identity);
|
||||||
expect(typeof response.owner).toBe("string");
|
expect(typeof response.owner).toBe("string");
|
||||||
} else if ("message" in response) {
|
} else if ("message" in response) {
|
||||||
expect(response.message).toContain("could not find uptime history associated with gateway");
|
expect(response.message).toContain(
|
||||||
|
"could not find uptime history associated with gateway"
|
||||||
|
);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -58,7 +60,9 @@ describe("Get gateway data", (): void => {
|
|||||||
expect(identity_key).toStrictEqual(response.identity);
|
expect(identity_key).toStrictEqual(response.identity);
|
||||||
expect(typeof response.count).toBe("number");
|
expect(typeof response.count).toBe("number");
|
||||||
} else if ("message" in response) {
|
} else if ("message" in response) {
|
||||||
expect(response.message).toContain("could not find uptime history associated with mixnode");
|
expect(response.message).toContain(
|
||||||
|
"could not find uptime history associated with mixnode"
|
||||||
|
);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
@@ -55,7 +55,9 @@ describe("Get mixnode data", (): void => {
|
|||||||
expect(identity_key).toStrictEqual(response.mix_id);
|
expect(identity_key).toStrictEqual(response.mix_id);
|
||||||
expect(typeof response.owner).toBe("string");
|
expect(typeof response.owner).toBe("string");
|
||||||
} else if ("message" in response) {
|
} else if ("message" in response) {
|
||||||
expect(response.message).toContain("could not find uptime history associated with mixnode");
|
expect(response.message).toContain(
|
||||||
|
"could not find uptime history associated with mixnode"
|
||||||
|
);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -70,7 +72,9 @@ describe("Get mixnode data", (): void => {
|
|||||||
const identity_key = config.environmnetConfig.mix_id;
|
const identity_key = config.environmnetConfig.mix_id;
|
||||||
const response = await status.getMixnodeRewardComputation(identity_key);
|
const response = await status.getMixnodeRewardComputation(identity_key);
|
||||||
if ("estimation" in response) {
|
if ("estimation" in response) {
|
||||||
expect(response.reward_params.interval.sybil_resistance).toStrictEqual("0.3");
|
expect(response.reward_params.interval.sybil_resistance).toStrictEqual(
|
||||||
|
"0.3"
|
||||||
|
);
|
||||||
expect(response.reward_params.active_set_size).toStrictEqual(240);
|
expect(response.reward_params.active_set_size).toStrictEqual(240);
|
||||||
expect(typeof response.reward_params.interval.reward_pool).toBe("string");
|
expect(typeof response.reward_params.interval.reward_pool).toBe("string");
|
||||||
} else if ("message" in response) {
|
} else if ("message" in response) {
|
||||||
@@ -108,7 +112,9 @@ describe("Get mixnode data", (): void => {
|
|||||||
const response = await status.getUnfilteredMixnodes();
|
const response = await status.getUnfilteredMixnodes();
|
||||||
response.forEach((x) => {
|
response.forEach((x) => {
|
||||||
expect(typeof x.stake_saturation).toBe("string");
|
expect(typeof x.stake_saturation).toBe("string");
|
||||||
expect(typeof x.mixnode_details.rewarding_details.last_rewarded_epoch).toBe("number");
|
expect(
|
||||||
|
typeof x.mixnode_details.rewarding_details.last_rewarded_epoch
|
||||||
|
).toBe("number");
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -116,7 +122,9 @@ describe("Get mixnode data", (): void => {
|
|||||||
const identity_key = config.environmnetConfig.mix_id;
|
const identity_key = config.environmnetConfig.mix_id;
|
||||||
const response = await status.getMixnodeStatus(identity_key);
|
const response = await status.getMixnodeStatus(identity_key);
|
||||||
const unfiltered_mixnodes_response = await status.getUnfilteredMixnodes();
|
const unfiltered_mixnodes_response = await status.getUnfilteredMixnodes();
|
||||||
const mixnode = unfiltered_mixnodes_response.find(x => x.mixnode_details.bond_information.mix_id === identity_key);
|
const mixnode = unfiltered_mixnodes_response.find(
|
||||||
|
(x) => x.mixnode_details.bond_information.mix_id === identity_key
|
||||||
|
);
|
||||||
if (mixnode) {
|
if (mixnode) {
|
||||||
expect(response.status).toStrictEqual("active");
|
expect(response.status).toStrictEqual("active");
|
||||||
} else {
|
} else {
|
||||||
@@ -127,7 +135,9 @@ describe("Get mixnode data", (): void => {
|
|||||||
it("Get all rewarded mixnodes", async (): Promise<void> => {
|
it("Get all rewarded mixnodes", async (): Promise<void> => {
|
||||||
const response = await status.getDetailedRewardedMixnodes();
|
const response = await status.getDetailedRewardedMixnodes();
|
||||||
response.forEach((x) => {
|
response.forEach((x) => {
|
||||||
expect(typeof x.mixnode_details.rewarding_details.last_rewarded_epoch).toBe("number");
|
expect(
|
||||||
|
typeof x.mixnode_details.rewarding_details.last_rewarded_epoch
|
||||||
|
).toBe("number");
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -146,7 +156,9 @@ describe("Get mixnode data", (): void => {
|
|||||||
|
|
||||||
it("with correct data", async (): Promise<void> => {
|
it("with correct data", async (): Promise<void> => {
|
||||||
const mix_id = config.environmnetConfig.mix_id;
|
const mix_id = config.environmnetConfig.mix_id;
|
||||||
const response = await status.sendMixnodeRewardEstimatedComputation(mix_id);
|
const response = await status.sendMixnodeRewardEstimatedComputation(
|
||||||
|
mix_id
|
||||||
|
);
|
||||||
expect(typeof response.estimation.delegates).toBe("string");
|
expect(typeof response.estimation.delegates).toBe("string");
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -10,7 +10,8 @@ qa:
|
|||||||
log_level: error
|
log_level: error
|
||||||
prod:
|
prod:
|
||||||
api_base_url: https://validator.nymtech.net/api/v1
|
api_base_url: https://validator.nymtech.net/api/v1
|
||||||
mixnode_identity: DLdMKLPywEy1vnu3yPrtXvzY7fw1puiiHpA9n9UQatiQ
|
mix_id: 730
|
||||||
gateway_identity: CgQrYP8etksSBf4nALNqp93SHPpgFwEUyTsjBNNLj5WM
|
mixnode_identity: 3pMCJswCyA19MGYWGDWT5fBk2M8ybSZGXttyAoNY5gBB
|
||||||
|
gateway_identity: 2BuMSfMW3zpeAjKXyKLhmY4QW1DXurrtSPEJ6CjX3SEh
|
||||||
log_level: error
|
log_level: error
|
||||||
time_zone: utc
|
time_zone: utc
|
||||||
|
|||||||
@@ -125,7 +125,7 @@ export interface EpochLength {
|
|||||||
}
|
}
|
||||||
|
|
||||||
export interface ServiceProviders {
|
export interface ServiceProviders {
|
||||||
services: (Services)[];
|
services: Services[];
|
||||||
}
|
}
|
||||||
export interface Services {
|
export interface Services {
|
||||||
service_id: number;
|
service_id: number;
|
||||||
@@ -145,4 +145,3 @@ export interface Deposit {
|
|||||||
denom: string;
|
denom: string;
|
||||||
amount: string;
|
amount: string;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Generated
+23
-16
@@ -284,8 +284,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
|
|||||||
checksum = "93f2635620bf0b9d4576eb7bb9a38a55df78bd1205d26fa994b25911a69f212f"
|
checksum = "93f2635620bf0b9d4576eb7bb9a38a55df78bd1205d26fa994b25911a69f212f"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"bitcoin_hashes",
|
"bitcoin_hashes",
|
||||||
"rand 0.7.3",
|
"rand 0.8.5",
|
||||||
"rand_core 0.5.1",
|
"rand_core 0.6.4",
|
||||||
"serde",
|
"serde",
|
||||||
"unicode-normalization",
|
"unicode-normalization",
|
||||||
"zeroize",
|
"zeroize",
|
||||||
@@ -2596,17 +2596,6 @@ dependencies = [
|
|||||||
"winapi",
|
"winapi",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "hostname"
|
|
||||||
version = "0.3.1"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "3c731c3e10504cc8ed35cfe2f1db4c9274c3d35fa486e3b31df46f068ef3e867"
|
|
||||||
dependencies = [
|
|
||||||
"libc",
|
|
||||||
"match_cfg",
|
|
||||||
"winapi",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "html5ever"
|
name = "html5ever"
|
||||||
version = "0.25.2"
|
version = "0.25.2"
|
||||||
@@ -3572,6 +3561,7 @@ dependencies = [
|
|||||||
"nym-config",
|
"nym-config",
|
||||||
"nym-credential-storage",
|
"nym-credential-storage",
|
||||||
"nym-crypto",
|
"nym-crypto",
|
||||||
|
"nym-explorer-api-requests",
|
||||||
"nym-gateway-client",
|
"nym-gateway-client",
|
||||||
"nym-gateway-requests",
|
"nym-gateway-requests",
|
||||||
"nym-network-defaults",
|
"nym-network-defaults",
|
||||||
@@ -3582,6 +3572,7 @@ dependencies = [
|
|||||||
"nym-topology",
|
"nym-topology",
|
||||||
"nym-validator-client",
|
"nym-validator-client",
|
||||||
"rand 0.7.3",
|
"rand 0.7.3",
|
||||||
|
"reqwest",
|
||||||
"serde",
|
"serde",
|
||||||
"serde_json",
|
"serde_json",
|
||||||
"sha2 0.10.6",
|
"sha2 0.10.6",
|
||||||
@@ -3669,7 +3660,7 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "nym-connect"
|
name = "nym-connect"
|
||||||
version = "1.1.13"
|
version = "1.1.15"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"anyhow",
|
"anyhow",
|
||||||
"bip39",
|
"bip39",
|
||||||
@@ -3794,6 +3785,17 @@ dependencies = [
|
|||||||
"zeroize",
|
"zeroize",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "nym-explorer-api-requests"
|
||||||
|
version = "0.1.0"
|
||||||
|
dependencies = [
|
||||||
|
"nym-contracts-common",
|
||||||
|
"nym-mixnet-contract-common",
|
||||||
|
"nym-validator-client",
|
||||||
|
"schemars",
|
||||||
|
"serde",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "nym-gateway-client"
|
name = "nym-gateway-client"
|
||||||
version = "0.1.0"
|
version = "0.1.0"
|
||||||
@@ -3995,7 +3997,9 @@ dependencies = [
|
|||||||
"nym-bandwidth-controller",
|
"nym-bandwidth-controller",
|
||||||
"nym-client-core",
|
"nym-client-core",
|
||||||
"nym-config",
|
"nym-config",
|
||||||
|
"nym-contracts-common",
|
||||||
"nym-credential-storage",
|
"nym-credential-storage",
|
||||||
|
"nym-mixnet-contract-common",
|
||||||
"nym-network-defaults",
|
"nym-network-defaults",
|
||||||
"nym-service-providers-common",
|
"nym-service-providers-common",
|
||||||
"nym-socks5-proxy-helpers",
|
"nym-socks5-proxy-helpers",
|
||||||
@@ -4005,10 +4009,13 @@ dependencies = [
|
|||||||
"nym-validator-client",
|
"nym-validator-client",
|
||||||
"pin-project",
|
"pin-project",
|
||||||
"rand 0.7.3",
|
"rand 0.7.3",
|
||||||
|
"reqwest",
|
||||||
|
"schemars",
|
||||||
"serde",
|
"serde",
|
||||||
"tap",
|
"tap",
|
||||||
"thiserror",
|
"thiserror",
|
||||||
"tokio",
|
"tokio",
|
||||||
|
"url",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
@@ -5155,9 +5162,9 @@ checksum = "f162c6dd7b008981e4d40210aca20b4bd0f9b60ca9271061b07f78537722f2e1"
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "reqwest"
|
name = "reqwest"
|
||||||
version = "0.11.15"
|
version = "0.11.18"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "0ba30cc2c0cd02af1222ed216ba659cdb2f879dfe3181852fe7c50b1d0005949"
|
checksum = "cde824a14b7c14f85caff81225f411faacc04a2013f41670f41443742b1c1c55"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"base64 0.21.2",
|
"base64 0.21.2",
|
||||||
"bytes",
|
"bytes",
|
||||||
|
|||||||
@@ -1,17 +1,23 @@
|
|||||||
use futures::{channel::mpsc, StreamExt};
|
use futures::{channel::mpsc, StreamExt};
|
||||||
use nym_client_core::client::base_client::storage::gateway_details::GatewayDetailsStore;
|
use nym_client_core::{
|
||||||
use nym_client_core::client::base_client::storage::{MixnetClientStorage, OnDiskPersistent};
|
client::{
|
||||||
use nym_client_core::{config::GatewayEndpointConfig, error::ClientCoreStatusMessage};
|
base_client::storage::{
|
||||||
use nym_socks5_client_core::NymClient as Socks5NymClient;
|
gateway_details::GatewayDetailsStore, MixnetClientStorage, OnDiskPersistent,
|
||||||
use nym_socks5_client_core::Socks5ControlMessageSender;
|
},
|
||||||
|
topology_control::geo_aware_provider::CountryGroup,
|
||||||
|
},
|
||||||
|
config::{GatewayEndpointConfig, TopologyStructure},
|
||||||
|
error::ClientCoreStatusMessage,
|
||||||
|
};
|
||||||
|
use nym_socks5_client_core::{NymClient as Socks5NymClient, Socks5ControlMessageSender};
|
||||||
use nym_sphinx::params::PacketSize;
|
use nym_sphinx::params::PacketSize;
|
||||||
use nym_task::manager::TaskStatus;
|
use nym_task::manager::TaskStatus;
|
||||||
use std::sync::Arc;
|
use std::sync::Arc;
|
||||||
use tap::TapFallible;
|
use tap::TapFallible;
|
||||||
use tokio::sync::RwLock;
|
use tokio::sync::RwLock;
|
||||||
|
|
||||||
use crate::config::{Config, PrivacyLevel};
|
|
||||||
use crate::{
|
use crate::{
|
||||||
|
config::{Config, PrivacyLevel},
|
||||||
error::Result,
|
error::Result,
|
||||||
events::{self, emit_event, emit_status_event},
|
events::{self, emit_event, emit_status_event},
|
||||||
models::{ConnectionStatusKind, ConnectivityTestResult},
|
models::{ConnectionStatusKind, ConnectivityTestResult},
|
||||||
@@ -46,6 +52,14 @@ fn override_config_from_env(config: &mut Config, privacy_level: &PrivacyLevel) {
|
|||||||
|
|
||||||
log::warn!("Disabling per-hop delay");
|
log::warn!("Disabling per-hop delay");
|
||||||
config.core.base.set_no_per_hop_delays();
|
config.core.base.set_no_per_hop_delays();
|
||||||
|
|
||||||
|
// TODO: selectable in the UI
|
||||||
|
let default_country_group = CountryGroup::Europe;
|
||||||
|
log::warn!("Using geo-aware mixnode selection: {default_country_group}");
|
||||||
|
config
|
||||||
|
.core
|
||||||
|
.base
|
||||||
|
.set_topology_structure(TopologyStructure::GeoAware(default_country_group));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,127 +0,0 @@
|
|||||||
plugins {
|
|
||||||
id 'com.android.application'
|
|
||||||
id 'org.jetbrains.kotlin.android'
|
|
||||||
id 'org.jetbrains.kotlin.plugin.serialization' version '1.8.21'
|
|
||||||
id 'io.sentry.android.gradle' version '3.11.0'
|
|
||||||
}
|
|
||||||
|
|
||||||
android {
|
|
||||||
namespace 'net.nymtech.nyms5'
|
|
||||||
compileSdk 33
|
|
||||||
|
|
||||||
defaultConfig {
|
|
||||||
applicationId "net.nymtech.nyms5"
|
|
||||||
minSdk 24
|
|
||||||
targetSdk 33
|
|
||||||
versionCode 1
|
|
||||||
versionName "1.0"
|
|
||||||
|
|
||||||
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
|
|
||||||
vectorDrawables {
|
|
||||||
useSupportLibrary true
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
buildTypes {
|
|
||||||
release {
|
|
||||||
minifyEnabled true
|
|
||||||
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
flavorDimensions "abi"
|
|
||||||
productFlavors {
|
|
||||||
universal {
|
|
||||||
dimension "abi"
|
|
||||||
ndk {
|
|
||||||
abiFilters "arm64-v8a", "armeabi-v7a", "x86_64", "x86"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
arch64 {
|
|
||||||
dimension "abi"
|
|
||||||
ndk {
|
|
||||||
abiFilters "arm64-v8a", "x86_64"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
arm64 {
|
|
||||||
dimension "abi"
|
|
||||||
ndk {
|
|
||||||
abiFilters "arm64-v8a"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
arm {
|
|
||||||
dimension "abi"
|
|
||||||
ndk {
|
|
||||||
abiFilters "armeabi-v7a"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
x86_64 {
|
|
||||||
dimension "abi"
|
|
||||||
ndk {
|
|
||||||
abiFilters "x86_64"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
x86 {
|
|
||||||
dimension "abi"
|
|
||||||
ndk {
|
|
||||||
abiFilters "x86"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// splits {
|
|
||||||
// abi {
|
|
||||||
// enable true
|
|
||||||
// reset()
|
|
||||||
// include "x86_64", "arm64-v8a"
|
|
||||||
// universalApk true
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
|
|
||||||
compileOptions {
|
|
||||||
sourceCompatibility JavaVersion.VERSION_1_8
|
|
||||||
targetCompatibility JavaVersion.VERSION_1_8
|
|
||||||
}
|
|
||||||
kotlinOptions {
|
|
||||||
jvmTarget = '1.8'
|
|
||||||
}
|
|
||||||
buildFeatures {
|
|
||||||
compose true
|
|
||||||
}
|
|
||||||
composeOptions {
|
|
||||||
kotlinCompilerExtensionVersion '1.4.6'
|
|
||||||
}
|
|
||||||
packagingOptions {
|
|
||||||
resources {
|
|
||||||
excludes += '/META-INF/{AL2.0,LGPL2.1}'
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
dependencies {
|
|
||||||
implementation 'androidx.core:core-ktx:1.10.1'
|
|
||||||
implementation 'androidx.lifecycle:lifecycle-runtime-ktx:2.6.1'
|
|
||||||
implementation 'androidx.activity:activity-compose:1.7.2'
|
|
||||||
implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-core:1.6.4'
|
|
||||||
implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.6.4'
|
|
||||||
implementation 'org.jetbrains.kotlinx:kotlinx-serialization-json:1.5.0'
|
|
||||||
implementation platform('androidx.compose:compose-bom:2022.10.00')
|
|
||||||
implementation 'androidx.lifecycle:lifecycle-viewmodel-compose:2.6.1'
|
|
||||||
implementation 'androidx.navigation:navigation-compose:2.6.0'
|
|
||||||
implementation 'androidx.compose.runtime:runtime-livedata'
|
|
||||||
implementation 'androidx.compose.ui:ui'
|
|
||||||
implementation 'androidx.compose.ui:ui-graphics'
|
|
||||||
implementation 'androidx.compose.ui:ui-tooling-preview'
|
|
||||||
implementation 'androidx.compose.material3:material3'
|
|
||||||
implementation 'androidx.work:work-runtime-ktx:2.8.1'
|
|
||||||
implementation 'androidx.datastore:datastore-preferences:1.0.0'
|
|
||||||
testImplementation 'junit:junit:4.13.2'
|
|
||||||
androidTestImplementation 'androidx.test.ext:junit:1.1.3'
|
|
||||||
androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0'
|
|
||||||
androidTestImplementation platform('androidx.compose:compose-bom:2022.10.00')
|
|
||||||
androidTestImplementation 'androidx.compose.ui:ui-test-junit4'
|
|
||||||
debugImplementation 'androidx.compose.ui:ui-tooling'
|
|
||||||
debugImplementation 'androidx.compose.ui:ui-test-manifest'
|
|
||||||
implementation 'com.github.kittinunf.fuel:fuel:2.3.1'
|
|
||||||
implementation 'io.sentry:sentry-android:6.24.0'
|
|
||||||
}
|
|
||||||
@@ -0,0 +1,137 @@
|
|||||||
|
plugins {
|
||||||
|
id("com.android.application")
|
||||||
|
id("org.jetbrains.kotlin.android")
|
||||||
|
id("org.jetbrains.kotlin.plugin.serialization") version "1.8.21"
|
||||||
|
id("io.sentry.android.gradle") version "3.11.0"
|
||||||
|
}
|
||||||
|
|
||||||
|
android {
|
||||||
|
namespace = "net.nymtech.nyms5"
|
||||||
|
compileSdk = 33
|
||||||
|
|
||||||
|
defaultConfig {
|
||||||
|
applicationId = "net.nymtech.nyms5"
|
||||||
|
minSdk = 24
|
||||||
|
targetSdk = 33
|
||||||
|
versionCode = 1
|
||||||
|
versionName = "1.0"
|
||||||
|
|
||||||
|
testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
|
||||||
|
vectorDrawables {
|
||||||
|
useSupportLibrary = true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
buildTypes {
|
||||||
|
release {
|
||||||
|
isMinifyEnabled = true
|
||||||
|
proguardFiles(
|
||||||
|
getDefaultProguardFile("proguard-android-optimize.txt"),
|
||||||
|
"proguard-rules.pro"
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
flavorDimensions += "abi"
|
||||||
|
productFlavors {
|
||||||
|
create("universal") {
|
||||||
|
dimension = "abi"
|
||||||
|
ndk {
|
||||||
|
abiFilters += listOf("arm64-v8a", "armeabi-v7a", "x86_64", "x86")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
create("arch64") {
|
||||||
|
dimension = "abi"
|
||||||
|
ndk {
|
||||||
|
abiFilters += listOf("arm64-v8a", "x86_64")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
create("arm64") {
|
||||||
|
dimension = "abi"
|
||||||
|
ndk {
|
||||||
|
abiFilters += "arm64-v8a"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
create("arm") {
|
||||||
|
dimension = "abi"
|
||||||
|
ndk {
|
||||||
|
abiFilters += "armeabi-v7a"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
create("x86_64") {
|
||||||
|
dimension = "abi"
|
||||||
|
ndk {
|
||||||
|
abiFilters += "x86_64"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
create("x86") {
|
||||||
|
dimension = "abi"
|
||||||
|
ndk {
|
||||||
|
abiFilters += "x86"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// splits {
|
||||||
|
// abi {
|
||||||
|
// enable true
|
||||||
|
// reset()
|
||||||
|
// include "x86_64", "arm64-v8a"
|
||||||
|
// universalApk true
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
|
||||||
|
compileOptions {
|
||||||
|
sourceCompatibility = JavaVersion.VERSION_1_8
|
||||||
|
targetCompatibility = JavaVersion.VERSION_1_8
|
||||||
|
}
|
||||||
|
kotlinOptions {
|
||||||
|
jvmTarget = "1.8"
|
||||||
|
}
|
||||||
|
buildFeatures {
|
||||||
|
compose = true
|
||||||
|
}
|
||||||
|
composeOptions {
|
||||||
|
kotlinCompilerExtensionVersion = "1.4.6"
|
||||||
|
}
|
||||||
|
packaging {
|
||||||
|
resources {
|
||||||
|
excludes += "/META-INF/{AL2.0,LGPL2.1}"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
sentry {
|
||||||
|
// TODO disable auto upload of mapping files for now to ease FDroid submission
|
||||||
|
// (avoiding to have to provide a sentry auth token during compile time)
|
||||||
|
autoUploadProguardMapping.set(false)
|
||||||
|
}
|
||||||
|
|
||||||
|
dependencies {
|
||||||
|
|
||||||
|
implementation("androidx.core:core-ktx:1.10.1")
|
||||||
|
implementation("androidx.lifecycle:lifecycle-runtime-ktx:2.6.1")
|
||||||
|
implementation("androidx.activity:activity-compose:1.7.2")
|
||||||
|
implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core:1.6.4")
|
||||||
|
implementation("org.jetbrains.kotlinx:kotlinx-coroutines-android:1.6.4")
|
||||||
|
implementation("org.jetbrains.kotlinx:kotlinx-serialization-json:1.5.0")
|
||||||
|
implementation(platform("androidx.compose:compose-bom:2022.10.00"))
|
||||||
|
implementation("androidx.lifecycle:lifecycle-viewmodel-compose:2.6.1")
|
||||||
|
implementation("androidx.navigation:navigation-compose:2.6.0")
|
||||||
|
implementation("androidx.compose.runtime:runtime-livedata")
|
||||||
|
implementation("androidx.compose.ui:ui")
|
||||||
|
implementation("androidx.compose.ui:ui-graphics")
|
||||||
|
implementation("androidx.compose.ui:ui-tooling-preview")
|
||||||
|
implementation("androidx.compose.material3:material3")
|
||||||
|
implementation("androidx.work:work-runtime-ktx:2.8.1")
|
||||||
|
implementation("androidx.datastore:datastore-preferences:1.0.0")
|
||||||
|
testImplementation("junit:junit:4.13.2")
|
||||||
|
androidTestImplementation("androidx.test.ext:junit:1.1.3")
|
||||||
|
androidTestImplementation("androidx.test.espresso:espresso-core:3.4.0")
|
||||||
|
androidTestImplementation(platform("androidx.compose:compose-bom:2022.10.00"))
|
||||||
|
androidTestImplementation("androidx.compose.ui:ui-test-junit4")
|
||||||
|
debugImplementation("androidx.compose.ui:ui-tooling")
|
||||||
|
debugImplementation("androidx.compose.ui:ui-test-manifest")
|
||||||
|
implementation("com.github.kittinunf.fuel:fuel:2.3.1")
|
||||||
|
implementation("io.sentry:sentry-android:6.24.0")
|
||||||
|
}
|
||||||
@@ -19,7 +19,6 @@ import kotlinx.coroutines.flow.first
|
|||||||
import kotlinx.coroutines.flow.map
|
import kotlinx.coroutines.flow.map
|
||||||
import kotlinx.coroutines.runBlocking
|
import kotlinx.coroutines.runBlocking
|
||||||
|
|
||||||
|
|
||||||
val Context.dataStore: DataStore<Preferences> by preferencesDataStore(name = "settings")
|
val Context.dataStore: DataStore<Preferences> by preferencesDataStore(name = "settings")
|
||||||
val monitoringKey = booleanPreferencesKey("monitoring")
|
val monitoringKey = booleanPreferencesKey("monitoring")
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +0,0 @@
|
|||||||
// Top-level build file where you can add configuration options common to all sub-projects/modules.
|
|
||||||
plugins {
|
|
||||||
id 'com.android.application' version '8.0.2' apply false
|
|
||||||
id 'com.android.library' version '8.0.2' apply false
|
|
||||||
id 'org.jetbrains.kotlin.android' version '1.8.20' apply false
|
|
||||||
}
|
|
||||||
@@ -0,0 +1,6 @@
|
|||||||
|
// Top-level build file where you can add configuration options common to all sub-projects/modules.
|
||||||
|
plugins {
|
||||||
|
id("com.android.application") version "8.1.0" apply false
|
||||||
|
id("com.android.library") version "8.1.0" apply false
|
||||||
|
id("org.jetbrains.kotlin.android") version "1.8.20" apply false
|
||||||
|
}
|
||||||
+3
-1
@@ -12,5 +12,7 @@ dependencyResolutionManagement {
|
|||||||
mavenCentral()
|
mavenCentral()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
rootProject.name = "nyms5"
|
rootProject.name = "nyms5"
|
||||||
include ':app'
|
include(":app")
|
||||||
|
|
||||||
Generated
+49
-379
@@ -21,20 +21,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
|
|||||||
checksum = "d122413f284cf2d62fb1b7db97e02edb8cda96d769b16e443a4f6195e35662b0"
|
checksum = "d122413f284cf2d62fb1b7db97e02edb8cda96d769b16e443a4f6195e35662b0"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"crypto-common",
|
"crypto-common",
|
||||||
"generic-array 0.14.7",
|
"generic-array",
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "aes"
|
|
||||||
version = "0.7.5"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "9e8b47f52ea9bae42228d07ec09eb676433d7c4ed1ebdf0f1d1c29ed446f1ab8"
|
|
||||||
dependencies = [
|
|
||||||
"cfg-if",
|
|
||||||
"cipher 0.3.0",
|
|
||||||
"cpufeatures",
|
|
||||||
"ctr 0.8.0",
|
|
||||||
"opaque-debug 0.3.0",
|
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
@@ -44,7 +31,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
|
|||||||
checksum = "433cfd6710c9986c576a25ca913c39d66a6474107b406f34f91d4a8923395241"
|
checksum = "433cfd6710c9986c576a25ca913c39d66a6474107b406f34f91d4a8923395241"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"cfg-if",
|
"cfg-if",
|
||||||
"cipher 0.4.4",
|
"cipher",
|
||||||
"cpufeatures",
|
"cpufeatures",
|
||||||
]
|
]
|
||||||
|
|
||||||
@@ -55,11 +42,11 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
|
|||||||
checksum = "82e1366e0c69c9f927b1fa5ce2c7bf9eafc8f9268c0b9800729e8b267612447c"
|
checksum = "82e1366e0c69c9f927b1fa5ce2c7bf9eafc8f9268c0b9800729e8b267612447c"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"aead",
|
"aead",
|
||||||
"aes 0.8.2",
|
"aes",
|
||||||
"cipher 0.4.4",
|
"cipher",
|
||||||
"ctr 0.9.2",
|
"ctr",
|
||||||
"ghash",
|
"ghash",
|
||||||
"subtle 2.4.1",
|
"subtle",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
@@ -110,22 +97,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
|
|||||||
checksum = "95c2fcf79ad1932ac6269a738109997a83c227c09b75842ae564dc8ede6a861c"
|
checksum = "95c2fcf79ad1932ac6269a738109997a83c227c09b75842ae564dc8ede6a861c"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"base64ct",
|
"base64ct",
|
||||||
"blake2 0.10.6",
|
"blake2",
|
||||||
"password-hash",
|
"password-hash",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "arrayref"
|
|
||||||
version = "0.3.6"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "a4c527152e37cf757a3f78aae5a06fbeefdb07ccc535c980a3208ee3060dd544"
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "arrayvec"
|
|
||||||
version = "0.7.4"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "96d30a06541fbafbc7f82ed10c06164cfbd2c401138f6addd8404629c4b16711"
|
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "async-trait"
|
name = "async-trait"
|
||||||
version = "0.1.64"
|
version = "0.1.64"
|
||||||
@@ -231,14 +206,14 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
|
|||||||
checksum = "7e141fb0f8be1c7b45887af94c88b182472b57c96b56773250ae00cd6a14a164"
|
checksum = "7e141fb0f8be1c7b45887af94c88b182472b57c96b56773250ae00cd6a14a164"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"bs58 0.5.0",
|
"bs58 0.5.0",
|
||||||
"hmac 0.12.1",
|
"hmac",
|
||||||
"k256 0.13.1",
|
"k256 0.13.1",
|
||||||
"once_cell",
|
"once_cell",
|
||||||
"pbkdf2",
|
"pbkdf2",
|
||||||
"rand_core 0.6.4",
|
"rand_core 0.6.4",
|
||||||
"ripemd",
|
"ripemd",
|
||||||
"sha2 0.10.6",
|
"sha2 0.10.6",
|
||||||
"subtle 2.4.1",
|
"subtle",
|
||||||
"zeroize",
|
"zeroize",
|
||||||
]
|
]
|
||||||
|
|
||||||
@@ -280,18 +255,6 @@ dependencies = [
|
|||||||
"wyz",
|
"wyz",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "blake2"
|
|
||||||
version = "0.8.1"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "94cb07b0da6a73955f8fb85d24c466778e70cda767a568229b104f0264089330"
|
|
||||||
dependencies = [
|
|
||||||
"byte-tools",
|
|
||||||
"crypto-mac 0.7.0",
|
|
||||||
"digest 0.8.1",
|
|
||||||
"opaque-debug 0.2.3",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "blake2"
|
name = "blake2"
|
||||||
version = "0.10.6"
|
version = "0.10.6"
|
||||||
@@ -301,20 +264,6 @@ dependencies = [
|
|||||||
"digest 0.10.7",
|
"digest 0.10.7",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "blake3"
|
|
||||||
version = "1.4.1"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "199c42ab6972d92c9f8995f086273d25c42fc0f7b2a1fcefba465c1352d25ba5"
|
|
||||||
dependencies = [
|
|
||||||
"arrayref",
|
|
||||||
"arrayvec",
|
|
||||||
"cc",
|
|
||||||
"cfg-if",
|
|
||||||
"constant_time_eq",
|
|
||||||
"digest 0.10.7",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "block"
|
name = "block"
|
||||||
version = "0.1.6"
|
version = "0.1.6"
|
||||||
@@ -327,7 +276,7 @@ version = "0.9.0"
|
|||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "4152116fd6e9dadb291ae18fc1ec3575ed6d84c29642d97890f4b4a3417297e4"
|
checksum = "4152116fd6e9dadb291ae18fc1ec3575ed6d84c29642d97890f4b4a3417297e4"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"generic-array 0.14.7",
|
"generic-array",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
@@ -336,7 +285,7 @@ version = "0.10.3"
|
|||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "69cce20737498f97b993470a6e536b8523f0af7892a4f928cceb1ac5e52ebe7e"
|
checksum = "69cce20737498f97b993470a6e536b8523f0af7892a4f928cceb1ac5e52ebe7e"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"generic-array 0.14.7",
|
"generic-array",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
@@ -349,7 +298,7 @@ dependencies = [
|
|||||||
"group 0.11.0",
|
"group 0.11.0",
|
||||||
"pairing",
|
"pairing",
|
||||||
"rand_core 0.6.4",
|
"rand_core 0.6.4",
|
||||||
"subtle 2.4.1",
|
"subtle",
|
||||||
"zeroize",
|
"zeroize",
|
||||||
]
|
]
|
||||||
|
|
||||||
@@ -405,12 +354,6 @@ version = "3.12.0"
|
|||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "0d261e256854913907f67ed06efbc3338dfe6179796deefc1ff763fc1aee5535"
|
checksum = "0d261e256854913907f67ed06efbc3338dfe6179796deefc1ff763fc1aee5535"
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "byte-tools"
|
|
||||||
version = "0.3.1"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "e3b5ca7a04898ad4bcd41c90c5285445ff5b791899bb1b0abdd2a2aa791211d7"
|
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "bytemuck"
|
name = "bytemuck"
|
||||||
version = "1.13.0"
|
version = "1.13.0"
|
||||||
@@ -515,49 +458,6 @@ version = "1.0.0"
|
|||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
|
checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "chacha"
|
|
||||||
version = "0.3.0"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "ddf3c081b5fba1e5615640aae998e0fbd10c24cbd897ee39ed754a77601a4862"
|
|
||||||
dependencies = [
|
|
||||||
"byteorder",
|
|
||||||
"keystream",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "chacha20"
|
|
||||||
version = "0.9.1"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "c3613f74bd2eac03dad61bd53dbe620703d4371614fe0bc3b9f04dd36fe4e818"
|
|
||||||
dependencies = [
|
|
||||||
"cfg-if",
|
|
||||||
"cipher 0.4.4",
|
|
||||||
"cpufeatures",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "chacha20poly1305"
|
|
||||||
version = "0.10.1"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "10cd79432192d1c0f4e1a0fef9527696cc039165d729fb41b3f4f4f354c2dc35"
|
|
||||||
dependencies = [
|
|
||||||
"aead",
|
|
||||||
"chacha20",
|
|
||||||
"cipher 0.4.4",
|
|
||||||
"poly1305",
|
|
||||||
"zeroize",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "cipher"
|
|
||||||
version = "0.3.0"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "7ee52072ec15386f770805afd189a01c8841be8696bed250fa2f13c4c0d6dfb7"
|
|
||||||
dependencies = [
|
|
||||||
"generic-array 0.14.7",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "cipher"
|
name = "cipher"
|
||||||
version = "0.4.4"
|
version = "0.4.4"
|
||||||
@@ -566,7 +466,6 @@ checksum = "773f3b9af64447d2ce9850330c473515014aa235e6a783b02db81ff39e4a3dad"
|
|||||||
dependencies = [
|
dependencies = [
|
||||||
"crypto-common",
|
"crypto-common",
|
||||||
"inout",
|
"inout",
|
||||||
"zeroize",
|
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
@@ -700,12 +599,6 @@ version = "0.9.2"
|
|||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "520fbf3c07483f94e3e3ca9d0cfd913d7718ef2483d2cfd91c0d9e91474ab913"
|
checksum = "520fbf3c07483f94e3e3ca9d0cfd913d7718ef2483d2cfd91c0d9e91474ab913"
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "constant_time_eq"
|
|
||||||
version = "0.3.0"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "f7144d30dcf0fafbce74250a3963025d8d52177934239851c917d29f1df280c2"
|
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "convert_case"
|
name = "convert_case"
|
||||||
version = "0.4.0"
|
version = "0.4.0"
|
||||||
@@ -879,30 +772,6 @@ dependencies = [
|
|||||||
"crossbeam-utils",
|
"crossbeam-utils",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "crossbeam-deque"
|
|
||||||
version = "0.8.3"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "ce6fd6f855243022dcecf8702fef0c297d4338e226845fe067f6341ad9fa0cef"
|
|
||||||
dependencies = [
|
|
||||||
"cfg-if",
|
|
||||||
"crossbeam-epoch",
|
|
||||||
"crossbeam-utils",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "crossbeam-epoch"
|
|
||||||
version = "0.9.15"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "ae211234986c545741a7dc064309f67ee1e5ad243d0e48335adc0484d960bcc7"
|
|
||||||
dependencies = [
|
|
||||||
"autocfg",
|
|
||||||
"cfg-if",
|
|
||||||
"crossbeam-utils",
|
|
||||||
"memoffset 0.9.0",
|
|
||||||
"scopeguard",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "crossbeam-utils"
|
name = "crossbeam-utils"
|
||||||
version = "0.8.14"
|
version = "0.8.14"
|
||||||
@@ -924,9 +793,9 @@ version = "0.4.9"
|
|||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "ef2b4b23cddf68b89b8f8069890e8c270d54e2d5fe1b143820234805e4cb17ef"
|
checksum = "ef2b4b23cddf68b89b8f8069890e8c270d54e2d5fe1b143820234805e4cb17ef"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"generic-array 0.14.7",
|
"generic-array",
|
||||||
"rand_core 0.6.4",
|
"rand_core 0.6.4",
|
||||||
"subtle 2.4.1",
|
"subtle",
|
||||||
"zeroize",
|
"zeroize",
|
||||||
]
|
]
|
||||||
|
|
||||||
@@ -936,9 +805,9 @@ version = "0.5.2"
|
|||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "cf4c2f4e1afd912bc40bfd6fed5d9dc1f288e0ba01bfcc835cc5bc3eb13efe15"
|
checksum = "cf4c2f4e1afd912bc40bfd6fed5d9dc1f288e0ba01bfcc835cc5bc3eb13efe15"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"generic-array 0.14.7",
|
"generic-array",
|
||||||
"rand_core 0.6.4",
|
"rand_core 0.6.4",
|
||||||
"subtle 2.4.1",
|
"subtle",
|
||||||
"zeroize",
|
"zeroize",
|
||||||
]
|
]
|
||||||
|
|
||||||
@@ -948,31 +817,11 @@ version = "0.1.6"
|
|||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3"
|
checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"generic-array 0.14.7",
|
"generic-array",
|
||||||
"rand_core 0.6.4",
|
"rand_core 0.6.4",
|
||||||
"typenum",
|
"typenum",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "crypto-mac"
|
|
||||||
version = "0.7.0"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "4434400df11d95d556bac068ddfedd482915eb18fe8bea89bc80b6e4b1c179e5"
|
|
||||||
dependencies = [
|
|
||||||
"generic-array 0.12.4",
|
|
||||||
"subtle 1.0.0",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "crypto-mac"
|
|
||||||
version = "0.11.1"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "b1d1a86f49236c215f271d40892d5fc950490551400b02ef360692c29815c714"
|
|
||||||
dependencies = [
|
|
||||||
"generic-array 0.14.7",
|
|
||||||
"subtle 2.4.1",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "cssparser"
|
name = "cssparser"
|
||||||
version = "0.27.2"
|
version = "0.27.2"
|
||||||
@@ -1019,22 +868,13 @@ dependencies = [
|
|||||||
"syn 1.0.107",
|
"syn 1.0.107",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "ctr"
|
|
||||||
version = "0.8.0"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "049bb91fb4aaf0e3c7efa6cd5ef877dbbbd15b39dad06d9948de4ec8a75761ea"
|
|
||||||
dependencies = [
|
|
||||||
"cipher 0.3.0",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "ctr"
|
name = "ctr"
|
||||||
version = "0.9.2"
|
version = "0.9.2"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "0369ee1ad671834580515889b80f2ea915f23b8be8d0daa4bbaf2ac5c7590835"
|
checksum = "0369ee1ad671834580515889b80f2ea915f23b8be8d0daa4bbaf2ac5c7590835"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"cipher 0.4.4",
|
"cipher",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
@@ -1052,7 +892,7 @@ dependencies = [
|
|||||||
"byteorder",
|
"byteorder",
|
||||||
"digest 0.9.0",
|
"digest 0.9.0",
|
||||||
"rand_core 0.5.1",
|
"rand_core 0.5.1",
|
||||||
"subtle 2.4.1",
|
"subtle",
|
||||||
"zeroize",
|
"zeroize",
|
||||||
]
|
]
|
||||||
|
|
||||||
@@ -1243,22 +1083,13 @@ dependencies = [
|
|||||||
"syn 1.0.107",
|
"syn 1.0.107",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "digest"
|
|
||||||
version = "0.8.1"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "f3d0c8c8752312f9713efd397ff63acb9f85585afbf179282e720e7704954dd5"
|
|
||||||
dependencies = [
|
|
||||||
"generic-array 0.12.4",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "digest"
|
name = "digest"
|
||||||
version = "0.9.0"
|
version = "0.9.0"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "d3dd60d1080a57a05ab032377049e0591415d2b31afd7028356dbf3cc6dcb066"
|
checksum = "d3dd60d1080a57a05ab032377049e0591415d2b31afd7028356dbf3cc6dcb066"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"generic-array 0.14.7",
|
"generic-array",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
@@ -1270,7 +1101,7 @@ dependencies = [
|
|||||||
"block-buffer 0.10.3",
|
"block-buffer 0.10.3",
|
||||||
"const-oid",
|
"const-oid",
|
||||||
"crypto-common",
|
"crypto-common",
|
||||||
"subtle 2.4.1",
|
"subtle",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
@@ -1478,12 +1309,12 @@ dependencies = [
|
|||||||
"der 0.6.1",
|
"der 0.6.1",
|
||||||
"digest 0.10.7",
|
"digest 0.10.7",
|
||||||
"ff 0.12.1",
|
"ff 0.12.1",
|
||||||
"generic-array 0.14.7",
|
"generic-array",
|
||||||
"group 0.12.1",
|
"group 0.12.1",
|
||||||
"pkcs8 0.9.0",
|
"pkcs8 0.9.0",
|
||||||
"rand_core 0.6.4",
|
"rand_core 0.6.4",
|
||||||
"sec1 0.3.0",
|
"sec1 0.3.0",
|
||||||
"subtle 2.4.1",
|
"subtle",
|
||||||
"zeroize",
|
"zeroize",
|
||||||
]
|
]
|
||||||
|
|
||||||
@@ -1497,12 +1328,12 @@ dependencies = [
|
|||||||
"crypto-bigint 0.5.2",
|
"crypto-bigint 0.5.2",
|
||||||
"digest 0.10.7",
|
"digest 0.10.7",
|
||||||
"ff 0.13.0",
|
"ff 0.13.0",
|
||||||
"generic-array 0.14.7",
|
"generic-array",
|
||||||
"group 0.13.0",
|
"group 0.13.0",
|
||||||
"pkcs8 0.10.2",
|
"pkcs8 0.10.2",
|
||||||
"rand_core 0.6.4",
|
"rand_core 0.6.4",
|
||||||
"sec1 0.7.3",
|
"sec1 0.7.3",
|
||||||
"subtle 2.4.1",
|
"subtle",
|
||||||
"zeroize",
|
"zeroize",
|
||||||
]
|
]
|
||||||
|
|
||||||
@@ -1611,7 +1442,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
|
|||||||
checksum = "131655483be284720a17d74ff97592b8e76576dc25563148601df2d7c9080924"
|
checksum = "131655483be284720a17d74ff97592b8e76576dc25563148601df2d7c9080924"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"rand_core 0.6.4",
|
"rand_core 0.6.4",
|
||||||
"subtle 2.4.1",
|
"subtle",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
@@ -1621,7 +1452,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
|
|||||||
checksum = "d013fc25338cc558c5c2cfbad646908fb23591e2404481826742b651c9af7160"
|
checksum = "d013fc25338cc558c5c2cfbad646908fb23591e2404481826742b651c9af7160"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"rand_core 0.6.4",
|
"rand_core 0.6.4",
|
||||||
"subtle 2.4.1",
|
"subtle",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
@@ -1631,7 +1462,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
|
|||||||
checksum = "ded41244b729663b1e574f1b4fb731469f69f79c17667b5d776b16cda0479449"
|
checksum = "ded41244b729663b1e574f1b4fb731469f69f79c17667b5d776b16cda0479449"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"rand_core 0.6.4",
|
"rand_core 0.6.4",
|
||||||
"subtle 2.4.1",
|
"subtle",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
@@ -1640,7 +1471,7 @@ version = "0.3.4"
|
|||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "1e1c54951450cbd39f3dbcf1005ac413b49487dabf18a720ad2383eccfeffb92"
|
checksum = "1e1c54951450cbd39f3dbcf1005ac413b49487dabf18a720ad2383eccfeffb92"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"memoffset 0.6.5",
|
"memoffset",
|
||||||
"rustc_version 0.3.3",
|
"rustc_version 0.3.3",
|
||||||
]
|
]
|
||||||
|
|
||||||
@@ -1911,15 +1742,6 @@ dependencies = [
|
|||||||
"windows 0.39.0",
|
"windows 0.39.0",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "generic-array"
|
|
||||||
version = "0.12.4"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "ffdf9f34f1447443d37393cc6c2b8313aebddcd96906caf34e54c68d8e57d7bd"
|
|
||||||
dependencies = [
|
|
||||||
"typenum",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "generic-array"
|
name = "generic-array"
|
||||||
version = "0.14.7"
|
version = "0.14.7"
|
||||||
@@ -1975,7 +1797,7 @@ version = "0.5.0"
|
|||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "d930750de5717d2dd0b8c0d42c076c0e884c81a73e6cab859bbd2339c71e3e40"
|
checksum = "d930750de5717d2dd0b8c0d42c076c0e884c81a73e6cab859bbd2339c71e3e40"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"opaque-debug 0.3.0",
|
"opaque-debug",
|
||||||
"polyval",
|
"polyval",
|
||||||
]
|
]
|
||||||
|
|
||||||
@@ -2106,7 +1928,7 @@ dependencies = [
|
|||||||
"byteorder",
|
"byteorder",
|
||||||
"ff 0.11.1",
|
"ff 0.11.1",
|
||||||
"rand_core 0.6.4",
|
"rand_core 0.6.4",
|
||||||
"subtle 2.4.1",
|
"subtle",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
@@ -2117,7 +1939,7 @@ checksum = "5dfbfb3a6cfbd390d5c9564ab283a0349b9b9fcd46a706c1eb10e0db70bfbac7"
|
|||||||
dependencies = [
|
dependencies = [
|
||||||
"ff 0.12.1",
|
"ff 0.12.1",
|
||||||
"rand_core 0.6.4",
|
"rand_core 0.6.4",
|
||||||
"subtle 2.4.1",
|
"subtle",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
@@ -2128,7 +1950,7 @@ checksum = "f0f9ef7462f7c099f518d754361858f86d8a07af53ba9af0fe635bbccb151a63"
|
|||||||
dependencies = [
|
dependencies = [
|
||||||
"ff 0.13.0",
|
"ff 0.13.0",
|
||||||
"rand_core 0.6.4",
|
"rand_core 0.6.4",
|
||||||
"subtle 2.4.1",
|
"subtle",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
@@ -2304,26 +2126,6 @@ version = "0.3.4"
|
|||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "7ebdb29d2ea9ed0083cd8cece49bbd968021bd99b0849edb4a9a7ee0fdf6a4e0"
|
checksum = "7ebdb29d2ea9ed0083cd8cece49bbd968021bd99b0849edb4a9a7ee0fdf6a4e0"
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "hkdf"
|
|
||||||
version = "0.11.0"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "01706d578d5c281058480e673ae4086a9f4710d8df1ad80a5b03e39ece5f886b"
|
|
||||||
dependencies = [
|
|
||||||
"digest 0.9.0",
|
|
||||||
"hmac 0.11.0",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "hmac"
|
|
||||||
version = "0.11.0"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "2a2a2320eb7ec0ebe8da8f744d7812d9fc4cb4d09344ac01898dbcb6a20ae69b"
|
|
||||||
dependencies = [
|
|
||||||
"crypto-mac 0.11.1",
|
|
||||||
"digest 0.9.0",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "hmac"
|
name = "hmac"
|
||||||
version = "0.12.1"
|
version = "0.12.1"
|
||||||
@@ -2575,7 +2377,7 @@ version = "0.1.3"
|
|||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "a0c10553d664a4d0bcff9f4215d0aac67a639cc68ef660840afe309b807bc9f5"
|
checksum = "a0c10553d664a4d0bcff9f4215d0aac67a639cc68ef660840afe309b807bc9f5"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"generic-array 0.14.7",
|
"generic-array",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
@@ -2734,12 +2536,6 @@ dependencies = [
|
|||||||
"signature 2.1.0",
|
"signature 2.1.0",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "keystream"
|
|
||||||
version = "1.0.0"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "c33070833c9ee02266356de0c43f723152bd38bd96ddf52c82b3af10c9138b28"
|
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "kuchiki"
|
name = "kuchiki"
|
||||||
version = "0.8.1"
|
version = "0.8.1"
|
||||||
@@ -2776,12 +2572,6 @@ dependencies = [
|
|||||||
"pkg-config",
|
"pkg-config",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "libm"
|
|
||||||
version = "0.2.6"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "348108ab3fba42ec82ff6e9564fc4ca0247bdccdc68dd8af9764bbc79c3c8ffb"
|
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "libz-sys"
|
name = "libz-sys"
|
||||||
version = "1.1.8"
|
version = "1.1.8"
|
||||||
@@ -2809,18 +2599,6 @@ version = "0.1.4"
|
|||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "f051f77a7c8e6957c0696eac88f26b0117e54f52d3fc682ab19397a8812846a4"
|
checksum = "f051f77a7c8e6957c0696eac88f26b0117e54f52d3fc682ab19397a8812846a4"
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "lioness"
|
|
||||||
version = "0.1.2"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "4ae926706ba42c425c9457121178330d75e273df2e82e28b758faf3de3a9acb9"
|
|
||||||
dependencies = [
|
|
||||||
"arrayref",
|
|
||||||
"blake2 0.8.1",
|
|
||||||
"chacha",
|
|
||||||
"keystream",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "lock_api"
|
name = "lock_api"
|
||||||
version = "0.4.9"
|
version = "0.4.9"
|
||||||
@@ -2915,15 +2693,6 @@ dependencies = [
|
|||||||
"autocfg",
|
"autocfg",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "memoffset"
|
|
||||||
version = "0.9.0"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "5a634b1c61a95585bd15607c6ab0c4e5b226e695ff2800ba0cdccddf208c406c"
|
|
||||||
dependencies = [
|
|
||||||
"autocfg",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "mime"
|
name = "mime"
|
||||||
version = "0.3.16"
|
version = "0.3.16"
|
||||||
@@ -3073,7 +2842,6 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
|
|||||||
checksum = "578ede34cf02f8924ab9447f50c28075b4d3e5b269972345e7e0372b38c6cdcd"
|
checksum = "578ede34cf02f8924ab9447f50c28075b4d3e5b269972345e7e0372b38c6cdcd"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"autocfg",
|
"autocfg",
|
||||||
"libm",
|
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
@@ -3328,23 +3096,6 @@ dependencies = [
|
|||||||
"url",
|
"url",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "nym-outfox"
|
|
||||||
version = "0.1.0"
|
|
||||||
dependencies = [
|
|
||||||
"blake3",
|
|
||||||
"chacha20",
|
|
||||||
"chacha20poly1305",
|
|
||||||
"curve25519-dalek",
|
|
||||||
"getrandom 0.2.10",
|
|
||||||
"log",
|
|
||||||
"rand 0.7.3",
|
|
||||||
"rayon",
|
|
||||||
"sphinx-packet",
|
|
||||||
"thiserror",
|
|
||||||
"zeroize",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "nym-pemstore"
|
name = "nym-pemstore"
|
||||||
version = "0.3.0"
|
version = "0.3.0"
|
||||||
@@ -3369,8 +3120,6 @@ dependencies = [
|
|||||||
name = "nym-sphinx-types"
|
name = "nym-sphinx-types"
|
||||||
version = "0.2.0"
|
version = "0.2.0"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"nym-outfox",
|
|
||||||
"sphinx-packet",
|
|
||||||
"thiserror",
|
"thiserror",
|
||||||
]
|
]
|
||||||
|
|
||||||
@@ -3380,7 +3129,7 @@ version = "0.1.0"
|
|||||||
dependencies = [
|
dependencies = [
|
||||||
"aes-gcm",
|
"aes-gcm",
|
||||||
"argon2",
|
"argon2",
|
||||||
"generic-array 0.14.7",
|
"generic-array",
|
||||||
"getrandom 0.2.10",
|
"getrandom 0.2.10",
|
||||||
"rand 0.8.5",
|
"rand 0.8.5",
|
||||||
"serde",
|
"serde",
|
||||||
@@ -3619,12 +3368,6 @@ version = "1.17.0"
|
|||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "6f61fba1741ea2b3d6a1e3178721804bb716a68a6aeba1149b5d52e3d464ea66"
|
checksum = "6f61fba1741ea2b3d6a1e3178721804bb716a68a6aeba1149b5d52e3d464ea66"
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "opaque-debug"
|
|
||||||
version = "0.2.3"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "2839e79665f131bdb5782e51f2c6c9599c133c6098982a54c794358bf432529c"
|
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "opaque-debug"
|
name = "opaque-debug"
|
||||||
version = "0.3.0"
|
version = "0.3.0"
|
||||||
@@ -3779,7 +3522,7 @@ checksum = "346f04948ba92c43e8469c1ee6736c7563d71012b17d40745260fe106aac2166"
|
|||||||
dependencies = [
|
dependencies = [
|
||||||
"base64ct",
|
"base64ct",
|
||||||
"rand_core 0.6.4",
|
"rand_core 0.6.4",
|
||||||
"subtle 2.4.1",
|
"subtle",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
@@ -3801,7 +3544,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
|
|||||||
checksum = "f8ed6a7761f76e3b9f92dfb0a60a6a6477c61024b775147ff0973a02653abaf2"
|
checksum = "f8ed6a7761f76e3b9f92dfb0a60a6a6477c61024b775147ff0973a02653abaf2"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"digest 0.10.7",
|
"digest 0.10.7",
|
||||||
"hmac 0.12.1",
|
"hmac",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
@@ -4074,17 +3817,6 @@ dependencies = [
|
|||||||
"miniz_oxide",
|
"miniz_oxide",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "poly1305"
|
|
||||||
version = "0.8.0"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "8159bd90725d2df49889a078b54f4f79e87f1f8a8444194cdca81d38f5393abf"
|
|
||||||
dependencies = [
|
|
||||||
"cpufeatures",
|
|
||||||
"opaque-debug 0.3.0",
|
|
||||||
"universal-hash",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "polyval"
|
name = "polyval"
|
||||||
version = "0.6.0"
|
version = "0.6.0"
|
||||||
@@ -4093,7 +3825,7 @@ checksum = "7ef234e08c11dfcb2e56f79fd70f6f2eb7f025c0ce2333e82f4f0518ecad30c6"
|
|||||||
dependencies = [
|
dependencies = [
|
||||||
"cfg-if",
|
"cfg-if",
|
||||||
"cpufeatures",
|
"cpufeatures",
|
||||||
"opaque-debug 0.3.0",
|
"opaque-debug",
|
||||||
"universal-hash",
|
"universal-hash",
|
||||||
]
|
]
|
||||||
|
|
||||||
@@ -4299,16 +4031,6 @@ dependencies = [
|
|||||||
"getrandom 0.2.10",
|
"getrandom 0.2.10",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "rand_distr"
|
|
||||||
version = "0.3.0"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "c9e9532ada3929fb8b2e9dbe28d1e06c9b2cc65813f074fcb6bd5fbefeff9d56"
|
|
||||||
dependencies = [
|
|
||||||
"num-traits",
|
|
||||||
"rand 0.7.3",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "rand_hc"
|
name = "rand_hc"
|
||||||
version = "0.2.0"
|
version = "0.2.0"
|
||||||
@@ -4336,28 +4058,6 @@ dependencies = [
|
|||||||
"cty",
|
"cty",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "rayon"
|
|
||||||
version = "1.7.0"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "1d2df5196e37bcc87abebc0053e20787d73847bb33134a69841207dd0a47f03b"
|
|
||||||
dependencies = [
|
|
||||||
"either",
|
|
||||||
"rayon-core",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "rayon-core"
|
|
||||||
version = "1.11.0"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "4b8f95bd6966f5c87776639160a66bd8ab9895d9d4ab01ddba9fc60661aebe8d"
|
|
||||||
dependencies = [
|
|
||||||
"crossbeam-channel",
|
|
||||||
"crossbeam-deque",
|
|
||||||
"crossbeam-utils",
|
|
||||||
"num_cpus",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "redox_syscall"
|
name = "redox_syscall"
|
||||||
version = "0.2.16"
|
version = "0.2.16"
|
||||||
@@ -4457,7 +4157,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
|
|||||||
checksum = "7743f17af12fa0b03b803ba12cd6a8d9483a587e89c69445e3909655c0b9fabb"
|
checksum = "7743f17af12fa0b03b803ba12cd6a8d9483a587e89c69445e3909655c0b9fabb"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"crypto-bigint 0.4.9",
|
"crypto-bigint 0.4.9",
|
||||||
"hmac 0.12.1",
|
"hmac",
|
||||||
"zeroize",
|
"zeroize",
|
||||||
]
|
]
|
||||||
|
|
||||||
@@ -4467,8 +4167,8 @@ version = "0.4.0"
|
|||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "f8dd2a808d456c4a54e300a23e9f5a67e122c3024119acbfd73e3bf664491cb2"
|
checksum = "f8dd2a808d456c4a54e300a23e9f5a67e122c3024119acbfd73e3bf664491cb2"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"hmac 0.12.1",
|
"hmac",
|
||||||
"subtle 2.4.1",
|
"subtle",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
@@ -4667,9 +4367,9 @@ checksum = "3be24c1842290c45df0a7bf069e0c268a747ad05a192f2fd7dcfdbc1cba40928"
|
|||||||
dependencies = [
|
dependencies = [
|
||||||
"base16ct 0.1.1",
|
"base16ct 0.1.1",
|
||||||
"der 0.6.1",
|
"der 0.6.1",
|
||||||
"generic-array 0.14.7",
|
"generic-array",
|
||||||
"pkcs8 0.9.0",
|
"pkcs8 0.9.0",
|
||||||
"subtle 2.4.1",
|
"subtle",
|
||||||
"zeroize",
|
"zeroize",
|
||||||
]
|
]
|
||||||
|
|
||||||
@@ -4681,9 +4381,9 @@ checksum = "d3e97a565f76233a6003f9f5c54be1d9c5bdfa3eccfb189469f11ec4901c47dc"
|
|||||||
dependencies = [
|
dependencies = [
|
||||||
"base16ct 0.2.0",
|
"base16ct 0.2.0",
|
||||||
"der 0.7.7",
|
"der 0.7.7",
|
||||||
"generic-array 0.14.7",
|
"generic-array",
|
||||||
"pkcs8 0.10.2",
|
"pkcs8 0.10.2",
|
||||||
"subtle 2.4.1",
|
"subtle",
|
||||||
"zeroize",
|
"zeroize",
|
||||||
]
|
]
|
||||||
|
|
||||||
@@ -4933,7 +4633,7 @@ dependencies = [
|
|||||||
"cfg-if",
|
"cfg-if",
|
||||||
"cpufeatures",
|
"cpufeatures",
|
||||||
"digest 0.9.0",
|
"digest 0.9.0",
|
||||||
"opaque-debug 0.3.0",
|
"opaque-debug",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
@@ -5044,30 +4744,6 @@ dependencies = [
|
|||||||
"system-deps 5.0.0",
|
"system-deps 5.0.0",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "sphinx-packet"
|
|
||||||
version = "0.1.0"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "cc43eda802856ee82a7555c7b75ceb9e07451741c7a2f5f23d036020e01189d4"
|
|
||||||
dependencies = [
|
|
||||||
"aes 0.7.5",
|
|
||||||
"arrayref",
|
|
||||||
"blake2 0.8.1",
|
|
||||||
"bs58 0.4.0",
|
|
||||||
"byteorder",
|
|
||||||
"chacha",
|
|
||||||
"curve25519-dalek",
|
|
||||||
"digest 0.9.0",
|
|
||||||
"hkdf",
|
|
||||||
"hmac 0.11.0",
|
|
||||||
"lioness",
|
|
||||||
"log",
|
|
||||||
"rand 0.7.3",
|
|
||||||
"rand_distr",
|
|
||||||
"sha2 0.9.9",
|
|
||||||
"subtle 2.4.1",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "spin"
|
name = "spin"
|
||||||
version = "0.5.2"
|
version = "0.5.2"
|
||||||
@@ -5169,12 +4845,6 @@ dependencies = [
|
|||||||
"syn 1.0.107",
|
"syn 1.0.107",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "subtle"
|
|
||||||
version = "1.0.0"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "2d67a5a62ba6e01cb2192ff309324cb4875d0c451d55fe2319433abe7a05a8ee"
|
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "subtle"
|
name = "subtle"
|
||||||
version = "2.4.1"
|
version = "2.4.1"
|
||||||
@@ -5534,7 +5204,7 @@ dependencies = [
|
|||||||
"serde_repr",
|
"serde_repr",
|
||||||
"sha2 0.10.6",
|
"sha2 0.10.6",
|
||||||
"signature 2.1.0",
|
"signature 2.1.0",
|
||||||
"subtle 2.4.1",
|
"subtle",
|
||||||
"subtle-encoding",
|
"subtle-encoding",
|
||||||
"tendermint-proto",
|
"tendermint-proto",
|
||||||
"time",
|
"time",
|
||||||
@@ -5594,7 +5264,7 @@ dependencies = [
|
|||||||
"serde",
|
"serde",
|
||||||
"serde_bytes",
|
"serde_bytes",
|
||||||
"serde_json",
|
"serde_json",
|
||||||
"subtle 2.4.1",
|
"subtle",
|
||||||
"subtle-encoding",
|
"subtle-encoding",
|
||||||
"tendermint",
|
"tendermint",
|
||||||
"tendermint-config",
|
"tendermint-config",
|
||||||
@@ -6004,7 +5674,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
|
|||||||
checksum = "7d3160b73c9a19f7e2939a2fdad446c57c1bbbbf4d919d3213ff1267a580d8b5"
|
checksum = "7d3160b73c9a19f7e2939a2fdad446c57c1bbbbf4d919d3213ff1267a580d8b5"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"crypto-common",
|
"crypto-common",
|
||||||
"subtle 2.4.1",
|
"subtle",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
|
|||||||
@@ -2024,10 +2024,10 @@ pkg-dir@4.2.0:
|
|||||||
dependencies:
|
dependencies:
|
||||||
find-up "^4.0.0"
|
find-up "^4.0.0"
|
||||||
|
|
||||||
prettier@2.4.1:
|
prettier@^2.8.7:
|
||||||
version "2.4.1"
|
version "2.8.8"
|
||||||
resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.4.1.tgz#671e11c89c14a4cfc876ce564106c4a6726c9f5c"
|
resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.8.8.tgz#e8c5d7e98a4305ffe3de2e1fc4aca1a71c28b1da"
|
||||||
integrity sha512-9fbDAXSBcc6Bs1mZrDYb3XKzDLm4EXXL9sC1LqKP5rZkT6KRr/rf9amVUcODVXgguK/isJz0d0hP72WeaKWsvA==
|
integrity sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==
|
||||||
|
|
||||||
pretty-format@^27.3.1:
|
pretty-format@^27.3.1:
|
||||||
version "27.3.1"
|
version "27.3.1"
|
||||||
@@ -2259,9 +2259,9 @@ safe-buffer@~5.1.0, safe-buffer@~5.1.1:
|
|||||||
integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==
|
integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==
|
||||||
|
|
||||||
"semver@2 || 3 || 4 || 5":
|
"semver@2 || 3 || 4 || 5":
|
||||||
version "5.7.1"
|
version "5.7.2"
|
||||||
resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7"
|
resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.2.tgz#48d55db737c3287cd4835e17fa13feace1c41ef8"
|
||||||
integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==
|
integrity sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==
|
||||||
|
|
||||||
serialize-error@^8.0.0:
|
serialize-error@^8.0.0:
|
||||||
version "8.1.0"
|
version "8.1.0"
|
||||||
|
|||||||
@@ -1,2 +1,3 @@
|
|||||||
src/mixnet/wasm/worker.js
|
src/mixnet/wasm/worker.js
|
||||||
src/mixnet/node-tester/worker.js
|
src/mixnet/node-tester/worker.js
|
||||||
|
docs/
|
||||||
@@ -0,0 +1,17 @@
|
|||||||
|
## Install dependencies
|
||||||
|
|
||||||
|
run `yarn install` to install dependencies
|
||||||
|
|
||||||
|
## Generate docs
|
||||||
|
|
||||||
|
We use TypeDoc for document generation https://typedoc.org/
|
||||||
|
|
||||||
|
To generate docs run `yarn docs:generate`. Generated docs can be found the `./docs` directory.
|
||||||
|
|
||||||
|
To view the generated docs in a webpage run `yarn docs:serve`. The docs will be available to view at `http://localhost:3000`.
|
||||||
|
|
||||||
|
## Local document development
|
||||||
|
|
||||||
|
To support the development process we have a local server that will watch for changes to the src files and update the docs in real time.
|
||||||
|
|
||||||
|
Run `yarn docs:dev` to start a local server to view the docs. Again, The docs will be available to view at `http://localhost:3000`.
|
||||||
@@ -28,11 +28,15 @@
|
|||||||
"build:dev": "yarn build:dev:only-this",
|
"build:dev": "yarn build:dev:only-this",
|
||||||
"build:dev:only-this": "scripts/build.sh",
|
"build:dev:only-this": "scripts/build.sh",
|
||||||
"build:local": "run-s build:dependencies:nym-client-wasm build:dev:only-this",
|
"build:local": "run-s build:dependencies:nym-client-wasm build:dev:only-this",
|
||||||
|
"docs:watch": "nodemon --ext ts --watch './src/**/*' --watch './typedoc.json' --exec \"yarn docs:generate\"",
|
||||||
|
"docs:generate": "typedoc",
|
||||||
|
"docs:serve": "reload -b -d ./docs -p 3000",
|
||||||
|
"docs:dev": "run-p docs:watch docs:serve ",
|
||||||
"test": "node --experimental-vm-modules --no-warnings node_modules/jest/bin/jest.js -c=jest.config.mjs --no-cache"
|
"test": "node --experimental-vm-modules --no-warnings node_modules/jest/bin/jest.js -c=jest.config.mjs --no-cache"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@npmcli/node-gyp": "^3.0.0",
|
"@npmcli/node-gyp": "^3.0.0",
|
||||||
"@nymproject/nym-client-wasm": "1.0.0",
|
"@nymproject/nym-client-wasm": "1",
|
||||||
"comlink": "^4.3.1",
|
"comlink": "^4.3.1",
|
||||||
"lerna": "^6.6.2",
|
"lerna": "^6.6.2",
|
||||||
"node-gyp": "^9.3.1"
|
"node-gyp": "^9.3.1"
|
||||||
@@ -52,10 +56,10 @@
|
|||||||
"@rollup/plugin-terser": "^0.2.1",
|
"@rollup/plugin-terser": "^0.2.1",
|
||||||
"@rollup/plugin-typescript": "^10.0.1",
|
"@rollup/plugin-typescript": "^10.0.1",
|
||||||
"@rollup/plugin-wasm": "^6.1.1",
|
"@rollup/plugin-wasm": "^6.1.1",
|
||||||
"@typescript-eslint/eslint-plugin": "^5.13.0",
|
|
||||||
"@typescript-eslint/parser": "^5.13.0",
|
|
||||||
"@types/jest": "^27.0.1",
|
"@types/jest": "^27.0.1",
|
||||||
"@types/node": "^16.7.13",
|
"@types/node": "^16.7.13",
|
||||||
|
"@typescript-eslint/eslint-plugin": "^5.13.0",
|
||||||
|
"@typescript-eslint/parser": "^5.13.0",
|
||||||
"eslint": "^8.10.0",
|
"eslint": "^8.10.0",
|
||||||
"eslint-config-airbnb": "^19.0.4",
|
"eslint-config-airbnb": "^19.0.4",
|
||||||
"eslint-config-airbnb-typescript": "^16.1.0",
|
"eslint-config-airbnb-typescript": "^16.1.0",
|
||||||
@@ -67,13 +71,15 @@
|
|||||||
"eslint-plugin-prettier": "^4.0.0",
|
"eslint-plugin-prettier": "^4.0.0",
|
||||||
"eslint-plugin-react": "^7.29.2",
|
"eslint-plugin-react": "^7.29.2",
|
||||||
"eslint-plugin-react-hooks": "^4.3.0",
|
"eslint-plugin-react-hooks": "^4.3.0",
|
||||||
|
"jest": "^29.5.0",
|
||||||
|
"nodemon": "3.0.1",
|
||||||
|
"reload": "^3.2.1",
|
||||||
"rimraf": "^3.0.2",
|
"rimraf": "^3.0.2",
|
||||||
"rollup": "^3.9.1",
|
"rollup": "^3.9.1",
|
||||||
"rollup-plugin-base64": "^1.0.1",
|
"rollup-plugin-base64": "^1.0.1",
|
||||||
"rollup-plugin-web-worker-loader": "^1.6.1",
|
"rollup-plugin-web-worker-loader": "^1.6.1",
|
||||||
"typescript": "^4.8.4",
|
|
||||||
"jest": "^29.5.0",
|
|
||||||
"ts-jest": "^29.1.0",
|
"ts-jest": "^29.1.0",
|
||||||
"ts-loader": "^9.4.2"
|
"typedoc": "^0.24.8",
|
||||||
|
"typescript": "^4.8.4"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,2 +1,7 @@
|
|||||||
// eslint-disable-next-line no-console
|
// eslint-disable-next-line no-console
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @ignore
|
||||||
|
* @internal
|
||||||
|
*/
|
||||||
export const notImplementedYet = () => console.log('Not implement, coming soon...');
|
export const notImplementedYet = () => console.log('Not implement, coming soon...');
|
||||||
|
|||||||
@@ -1,5 +0,0 @@
|
|||||||
const QA_VALIDATOR_URL = 'https://qa-nym-api.qa.nymte.ch/api';
|
|
||||||
const QWERTY_VALIDATOR_URL = 'https://qwerty-validator-api.qa.nymte.ch/api';
|
|
||||||
const MAINNET_VALIDATOR_URL = 'https://validator.nymtech.net/api/';
|
|
||||||
|
|
||||||
export { QA_VALIDATOR_URL, QWERTY_VALIDATOR_URL, MAINNET_VALIDATOR_URL };
|
|
||||||
@@ -25,8 +25,6 @@ export interface NodeTesterLoadedEvent {
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
export type Network = 'QA' | 'SANDBOX' | 'MAINNET';
|
|
||||||
|
|
||||||
export type NodeTestResultResponse = {
|
export type NodeTestResultResponse = {
|
||||||
score: number;
|
score: number;
|
||||||
sentPackets: number;
|
sentPackets: number;
|
||||||
@@ -35,31 +33,3 @@ export type NodeTestResultResponse = {
|
|||||||
duplicatePackets: number;
|
duplicatePackets: number;
|
||||||
duplicateAcks: number;
|
duplicateAcks: number;
|
||||||
};
|
};
|
||||||
|
|
||||||
export type Error = {
|
|
||||||
kind: 'Error';
|
|
||||||
args: { message: string };
|
|
||||||
};
|
|
||||||
|
|
||||||
export type WorkerLoaded = {
|
|
||||||
kind: 'WorkerLoaded';
|
|
||||||
};
|
|
||||||
|
|
||||||
export type DisplayTesterResults = {
|
|
||||||
kind: 'DisplayTesterResults';
|
|
||||||
args: {
|
|
||||||
result: NodeTestResultResponse;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
export type TestPacket = {
|
|
||||||
kind: 'TestPacket';
|
|
||||||
args: {
|
|
||||||
mixnodeIdentity: string;
|
|
||||||
network: Network;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
export type TestStatus = 'Stopped' | 'Running' | 'Complete';
|
|
||||||
|
|
||||||
export type NodeTestEvent = Error | DisplayTesterResults | TestPacket | WorkerLoaded;
|
|
||||||
|
|||||||
@@ -5,8 +5,8 @@ import {
|
|||||||
ConnectedEvent,
|
ConnectedEvent,
|
||||||
EventKinds,
|
EventKinds,
|
||||||
IWebWorker,
|
IWebWorker,
|
||||||
IWebWorkerAsync,
|
Client,
|
||||||
IWebWorkerEvents,
|
Events,
|
||||||
LoadedEvent,
|
LoadedEvent,
|
||||||
MimeTypes,
|
MimeTypes,
|
||||||
RawMessageReceivedEvent,
|
RawMessageReceivedEvent,
|
||||||
@@ -15,20 +15,40 @@ import {
|
|||||||
import { createSubscriptions } from './subscriptions';
|
import { createSubscriptions } from './subscriptions';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Client for the Nym mixnet.
|
* Options for the Nym mixnet client.
|
||||||
|
* @property autoConvertStringMimeTypes - An array of mime types.
|
||||||
|
* @example
|
||||||
|
* ```typescript
|
||||||
|
* const client = await createNymMixnetClient({
|
||||||
|
* autoConvertStringMimeTypes: [MimeTypes.ApplicationJson, MimeTypes.TextPlain],
|
||||||
|
* });
|
||||||
|
* ```
|
||||||
|
*/
|
||||||
|
|
||||||
|
export interface NymMixnetClientOptions {
|
||||||
|
autoConvertStringMimeTypes?: string[] | MimeTypes[];
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The client for the Nym mixnet which gives access to client methods and event subscriptions.
|
||||||
|
* Returned by the {@link createNymMixnetClient} function.
|
||||||
|
*
|
||||||
*/
|
*/
|
||||||
export interface NymMixnetClient {
|
export interface NymMixnetClient {
|
||||||
client: IWebWorkerAsync;
|
client: Client;
|
||||||
events: IWebWorkerEvents;
|
events: Events;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Create a client to send and receive traffic from the Nym mixnet.
|
* Create a client to send and receive traffic from the Nym mixnet.
|
||||||
*
|
* @required
|
||||||
|
* @returns
|
||||||
|
* @example
|
||||||
|
* ```typescript
|
||||||
|
* const client = await createNymMixnetClient();
|
||||||
|
* ```
|
||||||
*/
|
*/
|
||||||
export const createNymMixnetClient = async (options?: {
|
export const createNymMixnetClient = async (options?: NymMixnetClientOptions): Promise<NymMixnetClient> => {
|
||||||
autoConvertStringMimeTypes?: string[] | MimeTypes[];
|
|
||||||
}): Promise<NymMixnetClient> => {
|
|
||||||
// create a web worker that runs the WASM client on another thread and wait until it signals that it is ready
|
// create a web worker that runs the WASM client on another thread and wait until it signals that it is ready
|
||||||
// eslint-disable-next-line @typescript-eslint/no-use-before-define
|
// eslint-disable-next-line @typescript-eslint/no-use-before-define
|
||||||
const worker = await createWorker();
|
const worker = await createWorker();
|
||||||
@@ -53,7 +73,7 @@ export const createNymMixnetClient = async (options?: {
|
|||||||
});
|
});
|
||||||
|
|
||||||
// manage the subscribers, returning self-unsubscribe methods
|
// manage the subscribers, returning self-unsubscribe methods
|
||||||
const events: IWebWorkerEvents = {
|
const events: Events = {
|
||||||
subscribeToConnected: (handler) => addSubscription<ConnectedEvent>(EventKinds.Connected, handler),
|
subscribeToConnected: (handler) => addSubscription<ConnectedEvent>(EventKinds.Connected, handler),
|
||||||
subscribeToLoaded: (handler) => addSubscription<LoadedEvent>(EventKinds.Loaded, handler),
|
subscribeToLoaded: (handler) => addSubscription<LoadedEvent>(EventKinds.Loaded, handler),
|
||||||
subscribeToTextMessageReceivedEvent: (handler) =>
|
subscribeToTextMessageReceivedEvent: (handler) =>
|
||||||
@@ -65,7 +85,7 @@ export const createNymMixnetClient = async (options?: {
|
|||||||
};
|
};
|
||||||
|
|
||||||
// let comlink handle interop with the web worker
|
// let comlink handle interop with the web worker
|
||||||
const client: IWebWorkerAsync = Comlink.wrap<IWebWorker>(worker);
|
const client: Client = Comlink.wrap<IWebWorker>(worker);
|
||||||
|
|
||||||
// set any options
|
// set any options
|
||||||
if (options?.autoConvertStringMimeTypes) {
|
if (options?.autoConvertStringMimeTypes) {
|
||||||
|
|||||||
@@ -3,32 +3,138 @@ import type { DebugWasm } from './types-from-wasm-pack';
|
|||||||
export * from './types-from-wasm-pack';
|
export * from './types-from-wasm-pack';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Some common mime types, however, you can always just specify the mime-type as a string
|
*
|
||||||
|
* @ignore
|
||||||
|
* @hidden
|
||||||
|
* @internal
|
||||||
*/
|
*/
|
||||||
export enum MimeTypes {
|
export interface IWebWorker {
|
||||||
ApplicationOctetStream = 'application/octet-stream',
|
start: (config: NymClientConfig) => void;
|
||||||
TextPlain = 'text/plain',
|
stop: () => void;
|
||||||
ApplicationJson = 'application/json',
|
selfAddress: () => string | undefined;
|
||||||
|
setTextMimeTypes: (mimeTypes: string[]) => void;
|
||||||
|
getTextMimeTypes: () => string[];
|
||||||
|
send: (args: { payload: Payload; recipient: string; replySurbs?: number }) => void;
|
||||||
|
rawSend: (args: { payload: Uint8Array; recipient: string; replySurbs?: number }) => void;
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface Payload {
|
export interface Client {
|
||||||
message: string | Uint8Array;
|
/**
|
||||||
|
* Start the client.
|
||||||
mimeType?: MimeTypes | string;
|
*
|
||||||
|
* @example
|
||||||
headers?: string;
|
*
|
||||||
|
* ```typescript
|
||||||
|
* const client = await createNymMixnetClient();
|
||||||
|
* await client.start({
|
||||||
|
* clientId: 'my-client',
|
||||||
|
* nymApiUrl: 'https://validator.nymtech.net/api',
|
||||||
|
* });
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
start: (config: NymClientConfig) => Promise<void>;
|
||||||
|
/**
|
||||||
|
* Stop the client.
|
||||||
|
* @example
|
||||||
|
* ```typescript
|
||||||
|
* const client = await createNymMixnetClient();
|
||||||
|
* await client.start({
|
||||||
|
* clientId: 'my-client',
|
||||||
|
* nymApiUrl: 'https://validator.nymtech.net/api',
|
||||||
|
* });
|
||||||
|
* await client.stop();
|
||||||
|
* ```
|
||||||
|
*/
|
||||||
|
stop: () => Promise<void>;
|
||||||
|
/**
|
||||||
|
* Get the client address
|
||||||
|
* @example
|
||||||
|
* ```typescript
|
||||||
|
* const client = await createNymMixnetClient();
|
||||||
|
* await client.start({
|
||||||
|
* clientId: 'my-client',
|
||||||
|
* nymApiUrl: 'https://validator.nymtech.net/api',
|
||||||
|
* });
|
||||||
|
* const address = await client.selfAddress();
|
||||||
|
* ```
|
||||||
|
*/
|
||||||
|
selfAddress: () => Promise<string | undefined>;
|
||||||
|
/**
|
||||||
|
* Set the mime-types that should be used when using the {@link Client.send} method.
|
||||||
|
* @example
|
||||||
|
* ```typescript
|
||||||
|
* const client = await createNymMixnetClient();
|
||||||
|
* await client.start({
|
||||||
|
* clientId: 'my-client',
|
||||||
|
* nymApiUrl: 'https://validator.nymtech.net/api',
|
||||||
|
* });
|
||||||
|
* await client.setTextMimeTypes(['text/plain', 'application/json']);
|
||||||
|
* ```
|
||||||
|
* @param mimeTypes
|
||||||
|
* @see {@link MimeTypes}
|
||||||
|
* @see {@link Client.send}
|
||||||
|
* @see {@link Client.getTextMimeTypes}
|
||||||
|
*/
|
||||||
|
setTextMimeTypes: (mimeTypes: string[]) => void;
|
||||||
|
/**
|
||||||
|
* Get the mime-types that are automatically converted to strings.
|
||||||
|
* @example
|
||||||
|
* ```typescript
|
||||||
|
* const client = await createNymMixnetClient();
|
||||||
|
* await client.start({
|
||||||
|
* clientId: 'my-client',
|
||||||
|
* nymApiUrl: 'https://validator.nymtech.net/api',
|
||||||
|
* });
|
||||||
|
* const mimeTypes = await client.getTextMimeTypes();
|
||||||
|
* ```
|
||||||
|
* @see {@link MimeTypes}
|
||||||
|
* @see {@link Payload}
|
||||||
|
* @see {@link Client.send}
|
||||||
|
* @see {@link Client.setTextMimeTypes}
|
||||||
|
*/
|
||||||
|
getTextMimeTypes: () => Promise<string[]>;
|
||||||
|
/**
|
||||||
|
* Send some data through the mixnet message.
|
||||||
|
* @example
|
||||||
|
* ```typescript
|
||||||
|
* const client = await createNymMixnetClient();
|
||||||
|
* await client.start({
|
||||||
|
* clientId: 'my-client',
|
||||||
|
* nymApiUrl: 'https://validator.nymtech.net/api',
|
||||||
|
* });
|
||||||
|
* await client.send({
|
||||||
|
* payload: 'Hello world',
|
||||||
|
* recipient: // recipient address,
|
||||||
|
* });
|
||||||
|
* ```
|
||||||
|
* @see {@link MimeTypes}
|
||||||
|
* @see {@link Payload}
|
||||||
|
*/
|
||||||
|
send: (args: { payload: Payload; recipient: string; replySurbs?: number }) => Promise<void>;
|
||||||
|
/**
|
||||||
|
* Send a raw payload, without any mime-type conversion.
|
||||||
|
* @example
|
||||||
|
* ```typescript
|
||||||
|
* const client = await createNymMixnetClient();
|
||||||
|
* await client.start({
|
||||||
|
* clientId: 'my-client',
|
||||||
|
* nymApiUrl: 'https://validator.nymtech.net/api',
|
||||||
|
* });
|
||||||
|
* const payload = new Uint8Array([1, 2, 3]);
|
||||||
|
* await client.rawSend({
|
||||||
|
* payload,
|
||||||
|
* recipient: // recipient address,
|
||||||
|
* });
|
||||||
|
* ```
|
||||||
|
* @see {@link MimeTypes}
|
||||||
|
* @see {@link Payload}
|
||||||
|
*/
|
||||||
|
rawSend: (args: { payload: Uint8Array; recipient: string; replySurbs?: number }) => Promise<void>;
|
||||||
}
|
}
|
||||||
|
|
||||||
export type OnPayloadFn = (payload: Payload) => void;
|
/**
|
||||||
|
* The configuration passed to the {@link Client.start} method of the {@link Client}
|
||||||
export type OnRawPayloadFn = (payload: Uint8Array) => void;
|
*/
|
||||||
|
|
||||||
export type EventHandlerFn<E> = (e: E) => void | Promise<void>;
|
|
||||||
|
|
||||||
export type EventHandlerSubscribeFn<E> = (fn: EventHandlerFn<E>) => EventHandlerUnsubscribeFn;
|
|
||||||
|
|
||||||
export type EventHandlerUnsubscribeFn = () => void;
|
|
||||||
|
|
||||||
export interface NymClientConfig {
|
export interface NymClientConfig {
|
||||||
/**
|
/**
|
||||||
* A human-readable id for the client.
|
* A human-readable id for the client.
|
||||||
@@ -56,31 +162,99 @@ export interface NymClientConfig {
|
|||||||
debug?: DebugWasm;
|
debug?: DebugWasm;
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface IWebWorker {
|
export interface Events {
|
||||||
start: (config: NymClientConfig) => void;
|
/**
|
||||||
stop: () => void;
|
* @see {@link LoadedEvent}
|
||||||
selfAddress: () => string | undefined;
|
* @example
|
||||||
setTextMimeTypes: (mimeTypes: string[]) => void;
|
* ```typescript
|
||||||
getTextMimeTypes: () => string[];
|
* events.subscribeToLoaded((e) => {
|
||||||
send: (args: { payload: Payload; recipient: string; replySurbs?: number }) => void;
|
* console.log(e.args); // { loaded: true }
|
||||||
rawSend: (args: { payload: Uint8Array; recipient: string; replySurbs?: number }) => void;
|
* });
|
||||||
}
|
* ```
|
||||||
|
*/
|
||||||
export interface IWebWorkerAsync {
|
subscribeToLoaded: EventHandlerSubscribeFn<LoadedEvent>;
|
||||||
start: (config: NymClientConfig) => Promise<void>;
|
/**
|
||||||
stop: () => Promise<void>;
|
* @see {@link ConnectedEvent}
|
||||||
selfAddress: () => Promise<string | undefined>;
|
* @example
|
||||||
setTextMimeTypes: (mimeTypes: string[]) => void;
|
* ```typescript
|
||||||
getTextMimeTypes: () => Promise<string[]>;
|
* events.subscribeConnected((e) => {
|
||||||
send: (args: { payload: Payload; recipient: string; replySurbs?: number }) => Promise<void>;
|
* console.log(e.args.address); // Client address
|
||||||
rawSend: (args: { payload: Uint8Array; recipient: string; replySurbs?: number }) => Promise<void>;
|
* });
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
subscribeToConnected: EventHandlerSubscribeFn<ConnectedEvent>;
|
||||||
|
/**
|
||||||
|
* @returns {@link EventHandlerUnsubscribeFn}
|
||||||
|
* @see {@link StringMessageReceivedEvent}
|
||||||
|
* @example
|
||||||
|
* ```typescript
|
||||||
|
* const unsubscribe = events.subscribeToTextMessageReceivedEvent((e) => {
|
||||||
|
* console.log(e.args.payload); // string
|
||||||
|
* });
|
||||||
|
*
|
||||||
|
* // Stop listening to the event
|
||||||
|
* unsubscribe();
|
||||||
|
* ```
|
||||||
|
*/
|
||||||
|
subscribeToTextMessageReceivedEvent: EventHandlerSubscribeFn<StringMessageReceivedEvent>;
|
||||||
|
/**
|
||||||
|
* @returns {@link EventHandlerUnsubscribeFn}
|
||||||
|
* @see {@link BinaryMessageReceivedEvent}
|
||||||
|
* @example
|
||||||
|
* ```typescript
|
||||||
|
* const unsubscribe = events.subscribeToBinaryMessageReceivedEvent((e) => {
|
||||||
|
* console.log(e.args.payload); // Uint8Array
|
||||||
|
* });
|
||||||
|
*
|
||||||
|
* // Stop listening to the event
|
||||||
|
* unsubscribe();
|
||||||
|
* ```
|
||||||
|
*/
|
||||||
|
subscribeToBinaryMessageReceivedEvent: EventHandlerSubscribeFn<BinaryMessageReceivedEvent>;
|
||||||
|
/**
|
||||||
|
* @returns {@link EventHandlerUnsubscribeFn}
|
||||||
|
* @see {@link RawMessageReceivedEvent}
|
||||||
|
* @example
|
||||||
|
* ```typescript
|
||||||
|
* const unsubscribe = events.subscribeToRawMessageReceivedEvent((e) => {
|
||||||
|
* console.log(e.args.payload); // Uint8Array
|
||||||
|
* });
|
||||||
|
*
|
||||||
|
* // Stop listening to the event
|
||||||
|
* unsubscribe();
|
||||||
|
* ```
|
||||||
|
*/
|
||||||
|
subscribeToRawMessageReceivedEvent: EventHandlerSubscribeFn<RawMessageReceivedEvent>;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Enum representing various event kinds.
|
||||||
|
* @enum
|
||||||
|
*/
|
||||||
export enum EventKinds {
|
export enum EventKinds {
|
||||||
|
/**
|
||||||
|
* The event emitted when the nodetester is ready to be used.
|
||||||
|
*/
|
||||||
Loaded = 'Loaded',
|
Loaded = 'Loaded',
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The event emitted when connection to the gateway is established.
|
||||||
|
*/
|
||||||
Connected = 'Connected',
|
Connected = 'Connected',
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The event for when a message is received and interpreted as a string.
|
||||||
|
*/
|
||||||
StringMessageReceived = 'StringMessageReceived',
|
StringMessageReceived = 'StringMessageReceived',
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The event for when a binary message is received. BinaryMessage is a type of message that contains additional metadata, such as MIME type and some headers, along with the actual payload data.
|
||||||
|
*/
|
||||||
BinaryMessageReceived = 'BinaryMessageReceived',
|
BinaryMessageReceived = 'BinaryMessageReceived',
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The event for when a raw message is received. RawMessage represents the bytes that are received directly from the mixnet with no further parsing or interpretation done on them.
|
||||||
|
*/
|
||||||
RawMessageReceived = 'RawMessageReceived',
|
RawMessageReceived = 'RawMessageReceived',
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -107,7 +281,6 @@ export interface StringMessageReceivedEvent {
|
|||||||
headers?: string;
|
headers?: string;
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface BinaryMessageReceivedEvent {
|
export interface BinaryMessageReceivedEvent {
|
||||||
kind: EventKinds.BinaryMessageReceived;
|
kind: EventKinds.BinaryMessageReceived;
|
||||||
args: {
|
args: {
|
||||||
@@ -124,10 +297,54 @@ export interface RawMessageReceivedEvent {
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface IWebWorkerEvents {
|
/**
|
||||||
subscribeToLoaded: EventHandlerSubscribeFn<LoadedEvent>;
|
* Some common mime types, however, you can always just specify the mime-type as a string
|
||||||
subscribeToConnected: EventHandlerSubscribeFn<ConnectedEvent>;
|
*/
|
||||||
subscribeToTextMessageReceivedEvent: EventHandlerSubscribeFn<StringMessageReceivedEvent>;
|
export enum MimeTypes {
|
||||||
subscribeToBinaryMessageReceivedEvent: EventHandlerSubscribeFn<BinaryMessageReceivedEvent>;
|
ApplicationOctetStream = 'application/octet-stream',
|
||||||
subscribeToRawMessageReceivedEvent: EventHandlerSubscribeFn<RawMessageReceivedEvent>;
|
TextPlain = 'text/plain',
|
||||||
|
ApplicationJson = 'application/json',
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export interface Payload {
|
||||||
|
message: string | Uint8Array;
|
||||||
|
mimeType?: MimeTypes | string;
|
||||||
|
headers?: string;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @ignore
|
||||||
|
* @internal
|
||||||
|
*/
|
||||||
|
export type OnPayloadFn = (payload: Payload) => void;
|
||||||
|
/**
|
||||||
|
* @ignore
|
||||||
|
* @internal
|
||||||
|
*/
|
||||||
|
export type OnRawPayloadFn = (payload: Uint8Array) => void;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The **EventHandlerSubscribeFn** is a function that takes a callback of type {@link EventHandlerFn}
|
||||||
|
*
|
||||||
|
* @see {@link Events}
|
||||||
|
* @see {@link EventHandlerFn}
|
||||||
|
* @see {@link EventHandlerUnsubscribeFn}
|
||||||
|
*/
|
||||||
|
export type EventHandlerSubscribeFn<E> = (fn: EventHandlerFn<E>) => EventHandlerUnsubscribeFn;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The **EventHandlerFn** is a callback function that is passed to the {@link EventHandlerSubscribeFn}
|
||||||
|
* @see {@link Events}
|
||||||
|
* @see {@link EventHandlerFn}
|
||||||
|
* @see {@link EventHandlerSubscribeFn}
|
||||||
|
*/
|
||||||
|
export type EventHandlerFn<E> = (e: E) => void | Promise<void>;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The **EventHandlerUnsubscribeFn** function is returned by the {@link EventHandlerSubscribeFn}
|
||||||
|
* and can be used to stop listening for particular events
|
||||||
|
* @see {@link Events}
|
||||||
|
* @see {@link EventHandlerFn}
|
||||||
|
* @see {@link EventHandlerSubscribeFn}
|
||||||
|
*/
|
||||||
|
export type EventHandlerUnsubscribeFn = () => void;
|
||||||
|
|||||||
@@ -0,0 +1,32 @@
|
|||||||
|
{
|
||||||
|
"sort": ["kind"],
|
||||||
|
"entryPoints": ["./src/index.ts"],
|
||||||
|
"out": "./docs",
|
||||||
|
"exclude": ["./src/**/node-tester/*", "./src/**/wasm/types-from-wasm-pack.ts"],
|
||||||
|
"kindSortOrder": [
|
||||||
|
"Function",
|
||||||
|
"Interface",
|
||||||
|
"TypeAlias",
|
||||||
|
"Reference",
|
||||||
|
"Project",
|
||||||
|
"Module",
|
||||||
|
"Namespace",
|
||||||
|
"Enum",
|
||||||
|
"EnumMember",
|
||||||
|
"Class",
|
||||||
|
"Constructor",
|
||||||
|
"Property",
|
||||||
|
"Variable",
|
||||||
|
"Accessor",
|
||||||
|
"Method",
|
||||||
|
"ObjectLiteral",
|
||||||
|
"Parameter",
|
||||||
|
"TypeParameter",
|
||||||
|
"TypeLiteral",
|
||||||
|
"CallSignature",
|
||||||
|
"ConstructorSignature",
|
||||||
|
"IndexSignature",
|
||||||
|
"GetSignature",
|
||||||
|
"SetSignature"
|
||||||
|
]
|
||||||
|
}
|
||||||
@@ -136,7 +136,6 @@ impl HostsStore {
|
|||||||
})
|
})
|
||||||
.map(Host::from)
|
.map(Host::from)
|
||||||
.collect();
|
.collect();
|
||||||
dbg!(&hosts);
|
|
||||||
Ok(hosts)
|
Ok(hosts)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,16 @@
|
|||||||
|
// Copyright 2023 - Nym Technologies SA <contact@nymtech.net>
|
||||||
|
// SPDX-License-Identifier: Apache-2.0
|
||||||
|
|
||||||
|
use clap::Args;
|
||||||
|
use nym_bin_common::bin_info_owned;
|
||||||
|
use nym_bin_common::output_format::OutputFormat;
|
||||||
|
|
||||||
|
#[derive(Args)]
|
||||||
|
pub(crate) struct BuildInfo {
|
||||||
|
#[clap(short, long, default_value_t = OutputFormat::default())]
|
||||||
|
output: OutputFormat,
|
||||||
|
}
|
||||||
|
|
||||||
|
pub(crate) fn execute(args: BuildInfo) {
|
||||||
|
println!("{}", args.output.format(&bin_info_owned!()))
|
||||||
|
}
|
||||||
@@ -10,7 +10,7 @@ use crate::{
|
|||||||
};
|
};
|
||||||
use clap::{CommandFactory, Parser, Subcommand};
|
use clap::{CommandFactory, Parser, Subcommand};
|
||||||
use log::{error, info};
|
use log::{error, info};
|
||||||
use nym_bin_common::build_information::BinaryBuildInformation;
|
use nym_bin_common::bin_info;
|
||||||
use nym_bin_common::completions::{fig_generate, ArgShell};
|
use nym_bin_common::completions::{fig_generate, ArgShell};
|
||||||
use nym_bin_common::version_checker;
|
use nym_bin_common::version_checker;
|
||||||
use nym_client_core::client::base_client::storage::gateway_details::{
|
use nym_client_core::client::base_client::storage::gateway_details::{
|
||||||
@@ -21,13 +21,13 @@ use nym_client_core::config::GatewayEndpointConfig;
|
|||||||
use nym_client_core::error::ClientCoreError;
|
use nym_client_core::error::ClientCoreError;
|
||||||
use nym_sphinx::params::PacketSize;
|
use nym_sphinx::params::PacketSize;
|
||||||
|
|
||||||
|
mod build_info;
|
||||||
mod init;
|
mod init;
|
||||||
mod run;
|
mod run;
|
||||||
mod sign;
|
mod sign;
|
||||||
|
|
||||||
lazy_static::lazy_static! {
|
lazy_static::lazy_static! {
|
||||||
pub static ref PRETTY_BUILD_INFORMATION: String =
|
pub static ref PRETTY_BUILD_INFORMATION: String = bin_info!().pretty_print();
|
||||||
BinaryBuildInformation::new(env!("CARGO_PKG_VERSION")).pretty_print();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Helper for passing LONG_VERSION to clap
|
// Helper for passing LONG_VERSION to clap
|
||||||
@@ -42,6 +42,10 @@ pub(crate) struct Cli {
|
|||||||
#[clap(short, long)]
|
#[clap(short, long)]
|
||||||
pub(crate) config_env_file: Option<std::path::PathBuf>,
|
pub(crate) config_env_file: Option<std::path::PathBuf>,
|
||||||
|
|
||||||
|
/// Flag used for disabling the printed banner in tty.
|
||||||
|
#[clap(long)]
|
||||||
|
pub(crate) no_banner: bool,
|
||||||
|
|
||||||
#[clap(subcommand)]
|
#[clap(subcommand)]
|
||||||
command: Commands,
|
command: Commands,
|
||||||
}
|
}
|
||||||
@@ -59,6 +63,9 @@ pub(crate) enum Commands {
|
|||||||
/// Sign to prove ownership of this network requester
|
/// Sign to prove ownership of this network requester
|
||||||
Sign(sign::Sign),
|
Sign(sign::Sign),
|
||||||
|
|
||||||
|
/// Show build information of this binary
|
||||||
|
BuildInfo(build_info::BuildInfo),
|
||||||
|
|
||||||
/// Generate shell completions
|
/// Generate shell completions
|
||||||
Completions(ArgShell),
|
Completions(ArgShell),
|
||||||
|
|
||||||
@@ -119,10 +126,11 @@ pub(crate) fn override_config(config: Config, args: OverrideConfig) -> Config {
|
|||||||
pub(crate) async fn execute(args: Cli) -> Result<(), NetworkRequesterError> {
|
pub(crate) async fn execute(args: Cli) -> Result<(), NetworkRequesterError> {
|
||||||
let bin_name = "nym-network-requester";
|
let bin_name = "nym-network-requester";
|
||||||
|
|
||||||
match &args.command {
|
match args.command {
|
||||||
Commands::Init(m) => init::execute(m).await?,
|
Commands::Init(m) => init::execute(&m).await?,
|
||||||
Commands::Run(m) => run::execute(m).await?,
|
Commands::Run(m) => run::execute(&m).await?,
|
||||||
Commands::Sign(m) => sign::execute(m).await?,
|
Commands::Sign(m) => sign::execute(&m).await?,
|
||||||
|
Commands::BuildInfo(m) => build_info::execute(m),
|
||||||
Commands::Completions(s) => s.generate(&mut Cli::command(), bin_name),
|
Commands::Completions(s) => s.generate(&mut Cli::command(), bin_name),
|
||||||
Commands::GenerateFigSpec => fig_generate(&mut Cli::command(), bin_name),
|
Commands::GenerateFigSpec => fig_generate(&mut Cli::command(), bin_name),
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -13,7 +13,7 @@ use crate::{reply, socks5};
|
|||||||
use async_trait::async_trait;
|
use async_trait::async_trait;
|
||||||
use futures::channel::mpsc;
|
use futures::channel::mpsc;
|
||||||
use log::warn;
|
use log::warn;
|
||||||
use nym_bin_common::build_information::BinaryBuildInformation;
|
use nym_bin_common::bin_info_owned;
|
||||||
use nym_client_core::config::disk_persistence::CommonClientPaths;
|
use nym_client_core::config::disk_persistence::CommonClientPaths;
|
||||||
use nym_network_defaults::NymNetworkDetails;
|
use nym_network_defaults::NymNetworkDetails;
|
||||||
use nym_service_providers_common::interface::{
|
use nym_service_providers_common::interface::{
|
||||||
@@ -101,7 +101,7 @@ impl ServiceProvider<Socks5Request> for NRServiceProvider {
|
|||||||
) -> Result<BinaryInformation, Self::ServiceProviderError> {
|
) -> Result<BinaryInformation, Self::ServiceProviderError> {
|
||||||
Ok(BinaryInformation {
|
Ok(BinaryInformation {
|
||||||
binary_name: env!("CARGO_PKG_NAME").to_string(),
|
binary_name: env!("CARGO_PKG_NAME").to_string(),
|
||||||
build_information: BinaryBuildInformation::new(env!("CARGO_PKG_VERSION")).to_owned(),
|
build_information: bin_info_owned!(),
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -18,11 +18,13 @@ mod statistics;
|
|||||||
|
|
||||||
#[tokio::main]
|
#[tokio::main]
|
||||||
async fn main() -> Result<(), NetworkRequesterError> {
|
async fn main() -> Result<(), NetworkRequesterError> {
|
||||||
setup_logging();
|
|
||||||
maybe_print_banner(crate_name!(), crate_version!());
|
|
||||||
|
|
||||||
let args = cli::Cli::parse();
|
let args = cli::Cli::parse();
|
||||||
setup_env(args.config_env_file.as_ref());
|
setup_env(args.config_env_file.as_ref());
|
||||||
|
|
||||||
|
if !args.no_banner {
|
||||||
|
maybe_print_banner(crate_name!(), crate_version!());
|
||||||
|
}
|
||||||
|
setup_logging();
|
||||||
|
|
||||||
cli::execute(args).await
|
cli::execute(args).await
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -6421,6 +6421,11 @@ ansi-regex@^6.0.1:
|
|||||||
resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-6.0.1.tgz#3183e38fae9a65d7cb5e53945cd5897d0260a06a"
|
resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-6.0.1.tgz#3183e38fae9a65d7cb5e53945cd5897d0260a06a"
|
||||||
integrity sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==
|
integrity sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==
|
||||||
|
|
||||||
|
ansi-sequence-parser@^1.1.0:
|
||||||
|
version "1.1.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/ansi-sequence-parser/-/ansi-sequence-parser-1.1.0.tgz#4d790f31236ac20366b23b3916b789e1bde39aed"
|
||||||
|
integrity sha512-lEm8mt52to2fT8GhciPCGeCXACSz2UwIN4X2e2LJSnZ5uAbn2/dsYdOmUXq0AtWS5cpAupysIneExOgH0Vd2TQ==
|
||||||
|
|
||||||
ansi-styles@^3.2.1:
|
ansi-styles@^3.2.1:
|
||||||
version "3.2.1"
|
version "3.2.1"
|
||||||
resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d"
|
resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d"
|
||||||
@@ -7821,6 +7826,17 @@ cli-boxes@^2.2.1:
|
|||||||
resolved "https://registry.yarnpkg.com/cli-boxes/-/cli-boxes-2.2.1.tgz#ddd5035d25094fce220e9cab40a45840a440318f"
|
resolved "https://registry.yarnpkg.com/cli-boxes/-/cli-boxes-2.2.1.tgz#ddd5035d25094fce220e9cab40a45840a440318f"
|
||||||
integrity sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw==
|
integrity sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw==
|
||||||
|
|
||||||
|
cli-color@~2.0.0:
|
||||||
|
version "2.0.3"
|
||||||
|
resolved "https://registry.yarnpkg.com/cli-color/-/cli-color-2.0.3.tgz#73769ba969080629670f3f2ef69a4bf4e7cc1879"
|
||||||
|
integrity sha512-OkoZnxyC4ERN3zLzZaY9Emb7f/MhBOIpePv0Ycok0fJYT+Ouo00UBEIwsVsr0yoow++n5YWlSUgST9GKhNHiRQ==
|
||||||
|
dependencies:
|
||||||
|
d "^1.0.1"
|
||||||
|
es5-ext "^0.10.61"
|
||||||
|
es6-iterator "^2.0.3"
|
||||||
|
memoizee "^0.4.15"
|
||||||
|
timers-ext "^0.1.7"
|
||||||
|
|
||||||
cli-cursor@3.1.0, cli-cursor@^3.1.0:
|
cli-cursor@3.1.0, cli-cursor@^3.1.0:
|
||||||
version "3.1.0"
|
version "3.1.0"
|
||||||
resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-3.1.0.tgz#264305a7ae490d1d03bf0c9ba7c925d1753af307"
|
resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-3.1.0.tgz#264305a7ae490d1d03bf0c9ba7c925d1753af307"
|
||||||
@@ -8093,6 +8109,11 @@ commander@^9.4.1:
|
|||||||
resolved "https://registry.yarnpkg.com/commander/-/commander-9.5.0.tgz#bc08d1eb5cedf7ccb797a96199d41c7bc3e60d30"
|
resolved "https://registry.yarnpkg.com/commander/-/commander-9.5.0.tgz#bc08d1eb5cedf7ccb797a96199d41c7bc3e60d30"
|
||||||
integrity sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==
|
integrity sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==
|
||||||
|
|
||||||
|
commander@~9.4.0:
|
||||||
|
version "9.4.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/commander/-/commander-9.4.1.tgz#d1dd8f2ce6faf93147295c0df13c7c21141cfbdd"
|
||||||
|
integrity sha512-5EEkTNyHNGFPD2H+c/dXXfQZYa/scCKasxWcXJaWnNJ99pnQN9Vnmqow+p+PlFPE63Q6mThaZws1T+HxfpgtPw==
|
||||||
|
|
||||||
common-ancestor-path@^1.0.1:
|
common-ancestor-path@^1.0.1:
|
||||||
version "1.0.1"
|
version "1.0.1"
|
||||||
resolved "https://registry.yarnpkg.com/common-ancestor-path/-/common-ancestor-path-1.0.1.tgz#4f7d2d1394d91b7abdf51871c62f71eadb0182a7"
|
resolved "https://registry.yarnpkg.com/common-ancestor-path/-/common-ancestor-path-1.0.1.tgz#4f7d2d1394d91b7abdf51871c62f71eadb0182a7"
|
||||||
@@ -8871,6 +8892,14 @@ d3-zoom@^2.0.0:
|
|||||||
d3-selection "2"
|
d3-selection "2"
|
||||||
d3-transition "2"
|
d3-transition "2"
|
||||||
|
|
||||||
|
d@1, d@^1.0.1:
|
||||||
|
version "1.0.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/d/-/d-1.0.1.tgz#8698095372d58dbee346ffd0c7093f99f8f9eb5a"
|
||||||
|
integrity sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==
|
||||||
|
dependencies:
|
||||||
|
es5-ext "^0.10.50"
|
||||||
|
type "^1.0.1"
|
||||||
|
|
||||||
damerau-levenshtein@^1.0.8:
|
damerau-levenshtein@^1.0.8:
|
||||||
version "1.0.8"
|
version "1.0.8"
|
||||||
resolved "https://registry.yarnpkg.com/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz#b43d286ccbd36bc5b2f7ed41caf2d0aba1f8a6e7"
|
resolved "https://registry.yarnpkg.com/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz#b43d286ccbd36bc5b2f7ed41caf2d0aba1f8a6e7"
|
||||||
@@ -9678,16 +9707,52 @@ es-to-primitive@^1.2.1:
|
|||||||
is-date-object "^1.0.1"
|
is-date-object "^1.0.1"
|
||||||
is-symbol "^1.0.2"
|
is-symbol "^1.0.2"
|
||||||
|
|
||||||
|
es5-ext@^0.10.35, es5-ext@^0.10.46, es5-ext@^0.10.50, es5-ext@^0.10.53, es5-ext@^0.10.61, es5-ext@~0.10.14, es5-ext@~0.10.2, es5-ext@~0.10.46:
|
||||||
|
version "0.10.62"
|
||||||
|
resolved "https://registry.yarnpkg.com/es5-ext/-/es5-ext-0.10.62.tgz#5e6adc19a6da524bf3d1e02bbc8960e5eb49a9a5"
|
||||||
|
integrity sha512-BHLqn0klhEpnOKSrzn/Xsz2UIW8j+cGmo9JLzr8BiUapV8hPL9+FliFqjwr9ngW7jWdnxv6eO+/LqyhJVqgrjA==
|
||||||
|
dependencies:
|
||||||
|
es6-iterator "^2.0.3"
|
||||||
|
es6-symbol "^3.1.3"
|
||||||
|
next-tick "^1.1.0"
|
||||||
|
|
||||||
es5-shim@^4.5.13:
|
es5-shim@^4.5.13:
|
||||||
version "4.6.7"
|
version "4.6.7"
|
||||||
resolved "https://registry.yarnpkg.com/es5-shim/-/es5-shim-4.6.7.tgz#bc67ae0fc3dd520636e0a1601cc73b450ad3e955"
|
resolved "https://registry.yarnpkg.com/es5-shim/-/es5-shim-4.6.7.tgz#bc67ae0fc3dd520636e0a1601cc73b450ad3e955"
|
||||||
integrity sha512-jg21/dmlrNQI7JyyA2w7n+yifSxBng0ZralnSfVZjoCawgNTCnS+yBCyVM9DL5itm7SUnDGgv7hcq2XCZX4iRQ==
|
integrity sha512-jg21/dmlrNQI7JyyA2w7n+yifSxBng0ZralnSfVZjoCawgNTCnS+yBCyVM9DL5itm7SUnDGgv7hcq2XCZX4iRQ==
|
||||||
|
|
||||||
|
es6-iterator@^2.0.3:
|
||||||
|
version "2.0.3"
|
||||||
|
resolved "https://registry.yarnpkg.com/es6-iterator/-/es6-iterator-2.0.3.tgz#a7de889141a05a94b0854403b2d0a0fbfa98f3b7"
|
||||||
|
integrity sha512-zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g==
|
||||||
|
dependencies:
|
||||||
|
d "1"
|
||||||
|
es5-ext "^0.10.35"
|
||||||
|
es6-symbol "^3.1.1"
|
||||||
|
|
||||||
es6-shim@^0.35.5:
|
es6-shim@^0.35.5:
|
||||||
version "0.35.8"
|
version "0.35.8"
|
||||||
resolved "https://registry.yarnpkg.com/es6-shim/-/es6-shim-0.35.8.tgz#89216f6fbf8bacba3f897c8c0e814d2a41c05fb7"
|
resolved "https://registry.yarnpkg.com/es6-shim/-/es6-shim-0.35.8.tgz#89216f6fbf8bacba3f897c8c0e814d2a41c05fb7"
|
||||||
integrity sha512-Twf7I2v4/1tLoIXMT8HlqaBSS5H2wQTs2wx3MNYCI8K1R1/clXyCazrcVCPm/FuO9cyV8+leEaZOWD5C253NDg==
|
integrity sha512-Twf7I2v4/1tLoIXMT8HlqaBSS5H2wQTs2wx3MNYCI8K1R1/clXyCazrcVCPm/FuO9cyV8+leEaZOWD5C253NDg==
|
||||||
|
|
||||||
|
es6-symbol@^3.1.1, es6-symbol@^3.1.3:
|
||||||
|
version "3.1.3"
|
||||||
|
resolved "https://registry.yarnpkg.com/es6-symbol/-/es6-symbol-3.1.3.tgz#bad5d3c1bcdac28269f4cb331e431c78ac705d18"
|
||||||
|
integrity sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA==
|
||||||
|
dependencies:
|
||||||
|
d "^1.0.1"
|
||||||
|
ext "^1.1.2"
|
||||||
|
|
||||||
|
es6-weak-map@^2.0.3:
|
||||||
|
version "2.0.3"
|
||||||
|
resolved "https://registry.yarnpkg.com/es6-weak-map/-/es6-weak-map-2.0.3.tgz#b6da1f16cc2cc0d9be43e6bdbfc5e7dfcdf31d53"
|
||||||
|
integrity sha512-p5um32HOTO1kP+w7PRnB+5lQ43Z6muuMuIMffvDN8ZB4GcnjLBV6zGStpbASIMk4DCAvEaamhe2zhyCb/QXXsA==
|
||||||
|
dependencies:
|
||||||
|
d "1"
|
||||||
|
es5-ext "^0.10.46"
|
||||||
|
es6-iterator "^2.0.3"
|
||||||
|
es6-symbol "^3.1.1"
|
||||||
|
|
||||||
escalade@^3.1.1:
|
escalade@^3.1.1:
|
||||||
version "3.1.1"
|
version "3.1.1"
|
||||||
resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40"
|
resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40"
|
||||||
@@ -10150,6 +10215,14 @@ etag@~1.8.1:
|
|||||||
resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887"
|
resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887"
|
||||||
integrity sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==
|
integrity sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==
|
||||||
|
|
||||||
|
event-emitter@^0.3.5:
|
||||||
|
version "0.3.5"
|
||||||
|
resolved "https://registry.yarnpkg.com/event-emitter/-/event-emitter-0.3.5.tgz#df8c69eef1647923c7157b9ce83840610b02cc39"
|
||||||
|
integrity sha512-D9rRn9y7kLPnJ+hMq7S/nhvoKwwvVJahBi2BPmx3bvbsEdK3W9ii8cBSGjP+72/LnM4n6fo3+dkCX5FeTQruXA==
|
||||||
|
dependencies:
|
||||||
|
d "1"
|
||||||
|
es5-ext "~0.10.14"
|
||||||
|
|
||||||
event-target-shim@^5.0.0:
|
event-target-shim@^5.0.0:
|
||||||
version "5.0.1"
|
version "5.0.1"
|
||||||
resolved "https://registry.yarnpkg.com/event-target-shim/-/event-target-shim-5.0.1.tgz#5d4d3ebdf9583d63a5333ce2deb7480ab2b05789"
|
resolved "https://registry.yarnpkg.com/event-target-shim/-/event-target-shim-5.0.1.tgz#5d4d3ebdf9583d63a5333ce2deb7480ab2b05789"
|
||||||
@@ -10330,6 +10403,13 @@ express@^4.17.1, express@^4.17.3, express@^4.18.2:
|
|||||||
utils-merge "1.0.1"
|
utils-merge "1.0.1"
|
||||||
vary "~1.1.2"
|
vary "~1.1.2"
|
||||||
|
|
||||||
|
ext@^1.1.2:
|
||||||
|
version "1.7.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/ext/-/ext-1.7.0.tgz#0ea4383c0103d60e70be99e9a7f11027a33c4f5f"
|
||||||
|
integrity sha512-6hxeJYaL110a9b5TEJSj0gojyHQAmA2ch5Os+ySCiA1QGdS697XWY1pzsrSjqA9LDEEgdB/KypIlR59RcLuHYw==
|
||||||
|
dependencies:
|
||||||
|
type "^2.7.2"
|
||||||
|
|
||||||
extend-shallow@^2.0.1:
|
extend-shallow@^2.0.1:
|
||||||
version "2.0.1"
|
version "2.0.1"
|
||||||
resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-2.0.1.tgz#51af7d614ad9a9f610ea1bafbb989d6b1c56890f"
|
resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-2.0.1.tgz#51af7d614ad9a9f610ea1bafbb989d6b1c56890f"
|
||||||
@@ -10590,7 +10670,7 @@ fill-range@^7.0.1:
|
|||||||
dependencies:
|
dependencies:
|
||||||
to-regex-range "^5.0.1"
|
to-regex-range "^5.0.1"
|
||||||
|
|
||||||
finalhandler@1.2.0:
|
finalhandler@1.2.0, finalhandler@~1.2.0:
|
||||||
version "1.2.0"
|
version "1.2.0"
|
||||||
resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.2.0.tgz#7d23fe5731b207b4640e4fcd00aec1f9207a7b32"
|
resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.2.0.tgz#7d23fe5731b207b4640e4fcd00aec1f9207a7b32"
|
||||||
integrity sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==
|
integrity sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==
|
||||||
@@ -12432,6 +12512,11 @@ is-potential-custom-element-name@^1.0.1:
|
|||||||
resolved "https://registry.yarnpkg.com/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz#171ed6f19e3ac554394edf78caa05784a45bebb5"
|
resolved "https://registry.yarnpkg.com/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz#171ed6f19e3ac554394edf78caa05784a45bebb5"
|
||||||
integrity sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==
|
integrity sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==
|
||||||
|
|
||||||
|
is-promise@^2.2.2:
|
||||||
|
version "2.2.2"
|
||||||
|
resolved "https://registry.yarnpkg.com/is-promise/-/is-promise-2.2.2.tgz#39ab959ccbf9a774cf079f7b40c7a26f763135f1"
|
||||||
|
integrity sha512-+lP4/6lKUBfQjZ2pdxThZvLUAafmZb8OAxFb8XXtiQmS35INgr85hdOGoEs124ez1FCnZJt6jau/T+alh58QFQ==
|
||||||
|
|
||||||
is-reference@1.2.1:
|
is-reference@1.2.1:
|
||||||
version "1.2.1"
|
version "1.2.1"
|
||||||
resolved "https://registry.yarnpkg.com/is-reference/-/is-reference-1.2.1.tgz#8b2dac0b371f4bc994fdeaba9eb542d03002d0b7"
|
resolved "https://registry.yarnpkg.com/is-reference/-/is-reference-1.2.1.tgz#8b2dac0b371f4bc994fdeaba9eb542d03002d0b7"
|
||||||
@@ -13749,7 +13834,7 @@ json5@^1.0.1, json5@^1.0.2:
|
|||||||
dependencies:
|
dependencies:
|
||||||
minimist "^1.2.0"
|
minimist "^1.2.0"
|
||||||
|
|
||||||
jsonc-parser@3.2.0, jsonc-parser@^3.0.0:
|
jsonc-parser@3.2.0, jsonc-parser@^3.0.0, jsonc-parser@^3.2.0:
|
||||||
version "3.2.0"
|
version "3.2.0"
|
||||||
resolved "https://registry.yarnpkg.com/jsonc-parser/-/jsonc-parser-3.2.0.tgz#31ff3f4c2b9793f89c67212627c51c6394f88e76"
|
resolved "https://registry.yarnpkg.com/jsonc-parser/-/jsonc-parser-3.2.0.tgz#31ff3f4c2b9793f89c67212627c51c6394f88e76"
|
||||||
integrity sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w==
|
integrity sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w==
|
||||||
@@ -14314,6 +14399,13 @@ lru-cache@^7.4.4, lru-cache@^7.5.1, lru-cache@^7.7.1:
|
|||||||
resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-10.0.0.tgz#b9e2a6a72a129d81ab317202d93c7691df727e61"
|
resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-10.0.0.tgz#b9e2a6a72a129d81ab317202d93c7691df727e61"
|
||||||
integrity sha512-svTf/fzsKHffP42sujkO/Rjs37BCIsQVRCeNYIm9WN8rgT7ffoUnRtZCqU+6BqcSBdv8gwJeTz8knJpgACeQMw==
|
integrity sha512-svTf/fzsKHffP42sujkO/Rjs37BCIsQVRCeNYIm9WN8rgT7ffoUnRtZCqU+6BqcSBdv8gwJeTz8knJpgACeQMw==
|
||||||
|
|
||||||
|
lru-queue@^0.1.0:
|
||||||
|
version "0.1.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/lru-queue/-/lru-queue-0.1.0.tgz#2738bd9f0d3cf4f84490c5736c48699ac632cda3"
|
||||||
|
integrity sha512-BpdYkt9EvGl8OfWHDQPISVpcl5xZthb+XPsbELj5AQXxIC8IriDZIQYjBJPEm5rS420sjZ0TLEzRcq5KdBhYrQ==
|
||||||
|
dependencies:
|
||||||
|
es5-ext "~0.10.2"
|
||||||
|
|
||||||
lunr@^2.3.9:
|
lunr@^2.3.9:
|
||||||
version "2.3.9"
|
version "2.3.9"
|
||||||
resolved "https://registry.yarnpkg.com/lunr/-/lunr-2.3.9.tgz#18b123142832337dd6e964df1a5a7707b25d35e1"
|
resolved "https://registry.yarnpkg.com/lunr/-/lunr-2.3.9.tgz#18b123142832337dd6e964df1a5a7707b25d35e1"
|
||||||
@@ -14464,7 +14556,7 @@ markdown-extensions@^1.0.0:
|
|||||||
resolved "https://registry.yarnpkg.com/markdown-extensions/-/markdown-extensions-1.1.1.tgz#fea03b539faeaee9b4ef02a3769b455b189f7fc3"
|
resolved "https://registry.yarnpkg.com/markdown-extensions/-/markdown-extensions-1.1.1.tgz#fea03b539faeaee9b4ef02a3769b455b189f7fc3"
|
||||||
integrity sha512-WWC0ZuMzCyDHYCasEGs4IPvLyTGftYwh6wIEOULOF0HXcqZlhwRzrK0w2VUlxWA98xnvb/jszw4ZSkJ6ADpM6Q==
|
integrity sha512-WWC0ZuMzCyDHYCasEGs4IPvLyTGftYwh6wIEOULOF0HXcqZlhwRzrK0w2VUlxWA98xnvb/jszw4ZSkJ6ADpM6Q==
|
||||||
|
|
||||||
marked@^4.0.16:
|
marked@^4.0.16, marked@^4.3.0:
|
||||||
version "4.3.0"
|
version "4.3.0"
|
||||||
resolved "https://registry.yarnpkg.com/marked/-/marked-4.3.0.tgz#796362821b019f734054582038b116481b456cf3"
|
resolved "https://registry.yarnpkg.com/marked/-/marked-4.3.0.tgz#796362821b019f734054582038b116481b456cf3"
|
||||||
integrity sha512-PRsaiG84bK+AMvxziE/lCFss8juXjNaWzVbN5tXAm4XjeaS9NAHhop+PjQxz2A9h8Q4M/xGmzP8vqNwy6JeK0A==
|
integrity sha512-PRsaiG84bK+AMvxziE/lCFss8juXjNaWzVbN5tXAm4XjeaS9NAHhop+PjQxz2A9h8Q4M/xGmzP8vqNwy6JeK0A==
|
||||||
@@ -14662,6 +14754,20 @@ memfs@^3.1.2, memfs@^3.2.2, memfs@^3.4.1, memfs@^3.4.3:
|
|||||||
dependencies:
|
dependencies:
|
||||||
fs-monkey "^1.0.4"
|
fs-monkey "^1.0.4"
|
||||||
|
|
||||||
|
memoizee@^0.4.15:
|
||||||
|
version "0.4.15"
|
||||||
|
resolved "https://registry.yarnpkg.com/memoizee/-/memoizee-0.4.15.tgz#e6f3d2da863f318d02225391829a6c5956555b72"
|
||||||
|
integrity sha512-UBWmJpLZd5STPm7PMUlOw/TSy972M+z8gcyQ5veOnSDRREz/0bmpyTfKt3/51DhEBqCZQn1udM/5flcSPYhkdQ==
|
||||||
|
dependencies:
|
||||||
|
d "^1.0.1"
|
||||||
|
es5-ext "^0.10.53"
|
||||||
|
es6-weak-map "^2.0.3"
|
||||||
|
event-emitter "^0.3.5"
|
||||||
|
is-promise "^2.2.2"
|
||||||
|
lru-queue "^0.1.0"
|
||||||
|
next-tick "^1.1.0"
|
||||||
|
timers-ext "^0.1.7"
|
||||||
|
|
||||||
memoizerific@^1.11.3:
|
memoizerific@^1.11.3:
|
||||||
version "1.11.3"
|
version "1.11.3"
|
||||||
resolved "https://registry.yarnpkg.com/memoizerific/-/memoizerific-1.11.3.tgz#7c87a4646444c32d75438570905f2dbd1b1a805a"
|
resolved "https://registry.yarnpkg.com/memoizerific/-/memoizerific-1.11.3.tgz#7c87a4646444c32d75438570905f2dbd1b1a805a"
|
||||||
@@ -15195,7 +15301,7 @@ minimist-options@4.1.0:
|
|||||||
is-plain-obj "^1.1.0"
|
is-plain-obj "^1.1.0"
|
||||||
kind-of "^6.0.3"
|
kind-of "^6.0.3"
|
||||||
|
|
||||||
minimist@^1.1.1, minimist@^1.1.3, minimist@^1.2.0, minimist@^1.2.3, minimist@^1.2.5, minimist@^1.2.6:
|
minimist@^1.1.1, minimist@^1.1.3, minimist@^1.2.0, minimist@^1.2.3, minimist@^1.2.5, minimist@^1.2.6, minimist@~1.2.0:
|
||||||
version "1.2.8"
|
version "1.2.8"
|
||||||
resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c"
|
resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c"
|
||||||
integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==
|
integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==
|
||||||
@@ -15505,6 +15611,11 @@ nested-error-stacks@^2.0.0, nested-error-stacks@^2.1.0:
|
|||||||
resolved "https://registry.yarnpkg.com/nested-error-stacks/-/nested-error-stacks-2.1.1.tgz#26c8a3cee6cc05fbcf1e333cd2fc3e003326c0b5"
|
resolved "https://registry.yarnpkg.com/nested-error-stacks/-/nested-error-stacks-2.1.1.tgz#26c8a3cee6cc05fbcf1e333cd2fc3e003326c0b5"
|
||||||
integrity sha512-9iN1ka/9zmX1ZvLV9ewJYEk9h7RyRRtqdK0woXcqohu8EWIerfPUjYJPg0ULy0UqP7cslmdGc8xKDJcojlKiaw==
|
integrity sha512-9iN1ka/9zmX1ZvLV9ewJYEk9h7RyRRtqdK0woXcqohu8EWIerfPUjYJPg0ULy0UqP7cslmdGc8xKDJcojlKiaw==
|
||||||
|
|
||||||
|
next-tick@1, next-tick@^1.1.0:
|
||||||
|
version "1.1.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/next-tick/-/next-tick-1.1.0.tgz#1836ee30ad56d67ef281b22bd199f709449b35eb"
|
||||||
|
integrity sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==
|
||||||
|
|
||||||
nice-try@^1.0.4:
|
nice-try@^1.0.4:
|
||||||
version "1.0.5"
|
version "1.0.5"
|
||||||
resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366"
|
resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366"
|
||||||
@@ -15632,6 +15743,22 @@ node-releases@^2.0.12:
|
|||||||
resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.12.tgz#35627cc224a23bfb06fb3380f2b3afaaa7eb1039"
|
resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.12.tgz#35627cc224a23bfb06fb3380f2b3afaaa7eb1039"
|
||||||
integrity sha512-QzsYKWhXTWx8h1kIvqfnC++o0pEmpRQA/aenALsL2F4pqNVr7YzcdMlDij5WBnwftRbJCNJL/O7zdKaxKPHqgQ==
|
integrity sha512-QzsYKWhXTWx8h1kIvqfnC++o0pEmpRQA/aenALsL2F4pqNVr7YzcdMlDij5WBnwftRbJCNJL/O7zdKaxKPHqgQ==
|
||||||
|
|
||||||
|
nodemon@3.0.1:
|
||||||
|
version "3.0.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/nodemon/-/nodemon-3.0.1.tgz#affe822a2c5f21354466b2fc8ae83277d27dadc7"
|
||||||
|
integrity sha512-g9AZ7HmkhQkqXkRc20w+ZfQ73cHLbE8hnPbtaFbFtCumZsjyMhKk9LajQ07U5Ux28lvFjZ5X7HvWR1xzU8jHVw==
|
||||||
|
dependencies:
|
||||||
|
chokidar "^3.5.2"
|
||||||
|
debug "^3.2.7"
|
||||||
|
ignore-by-default "^1.0.1"
|
||||||
|
minimatch "^3.1.2"
|
||||||
|
pstree.remy "^1.1.8"
|
||||||
|
semver "^7.5.3"
|
||||||
|
simple-update-notifier "^2.0.0"
|
||||||
|
supports-color "^5.5.0"
|
||||||
|
touch "^3.1.0"
|
||||||
|
undefsafe "^2.0.5"
|
||||||
|
|
||||||
nodemon@^2.0.21:
|
nodemon@^2.0.21:
|
||||||
version "2.0.22"
|
version "2.0.22"
|
||||||
resolved "https://registry.yarnpkg.com/nodemon/-/nodemon-2.0.22.tgz#182c45c3a78da486f673d6c1702e00728daf5258"
|
resolved "https://registry.yarnpkg.com/nodemon/-/nodemon-2.0.22.tgz#182c45c3a78da486f673d6c1702e00728daf5258"
|
||||||
@@ -16143,7 +16270,7 @@ open@^7.0.3:
|
|||||||
is-docker "^2.0.0"
|
is-docker "^2.0.0"
|
||||||
is-wsl "^2.1.1"
|
is-wsl "^2.1.1"
|
||||||
|
|
||||||
open@^8.0.9, open@^8.4.0:
|
open@^8.0.0, open@^8.0.9, open@^8.4.0:
|
||||||
version "8.4.2"
|
version "8.4.2"
|
||||||
resolved "https://registry.yarnpkg.com/open/-/open-8.4.2.tgz#5b5ffe2a8f793dcd2aad73e550cb87b59cb084f9"
|
resolved "https://registry.yarnpkg.com/open/-/open-8.4.2.tgz#5b5ffe2a8f793dcd2aad73e550cb87b59cb084f9"
|
||||||
integrity sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==
|
integrity sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==
|
||||||
@@ -18108,6 +18235,20 @@ relateurl@^0.2.7:
|
|||||||
resolved "https://registry.yarnpkg.com/relateurl/-/relateurl-0.2.7.tgz#54dbf377e51440aca90a4cd274600d3ff2d888a9"
|
resolved "https://registry.yarnpkg.com/relateurl/-/relateurl-0.2.7.tgz#54dbf377e51440aca90a4cd274600d3ff2d888a9"
|
||||||
integrity sha512-G08Dxvm4iDN3MLM0EsP62EDV9IuhXPR6blNz6Utcp7zyV3tr4HVNINt6MpaRWbxoOHT3Q7YN2P+jaHX8vUbgog==
|
integrity sha512-G08Dxvm4iDN3MLM0EsP62EDV9IuhXPR6blNz6Utcp7zyV3tr4HVNINt6MpaRWbxoOHT3Q7YN2P+jaHX8vUbgog==
|
||||||
|
|
||||||
|
reload@^3.2.1:
|
||||||
|
version "3.2.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/reload/-/reload-3.2.1.tgz#42d43e33e327efe1348c723272c6835fe333349a"
|
||||||
|
integrity sha512-ZdM8ZSEeI72zkhh6heMEvJ0vHZoovZXcJI6Zae8CzS7o5vO/WjZsAMMr0y1+3I/fCN7y7ZxABoUwwCswcLHkjQ==
|
||||||
|
dependencies:
|
||||||
|
cli-color "~2.0.0"
|
||||||
|
commander "~9.4.0"
|
||||||
|
finalhandler "~1.2.0"
|
||||||
|
minimist "~1.2.0"
|
||||||
|
open "^8.0.0"
|
||||||
|
serve-static "~1.15.0"
|
||||||
|
supervisor "~0.12.0"
|
||||||
|
ws "~8.11.0"
|
||||||
|
|
||||||
remark-external-links@^8.0.0:
|
remark-external-links@^8.0.0:
|
||||||
version "8.0.0"
|
version "8.0.0"
|
||||||
resolved "https://registry.yarnpkg.com/remark-external-links/-/remark-external-links-8.0.0.tgz#308de69482958b5d1cd3692bc9b725ce0240f345"
|
resolved "https://registry.yarnpkg.com/remark-external-links/-/remark-external-links-8.0.0.tgz#308de69482958b5d1cd3692bc9b725ce0240f345"
|
||||||
@@ -18730,7 +18871,7 @@ serve-index@^1.9.1:
|
|||||||
mime-types "~2.1.17"
|
mime-types "~2.1.17"
|
||||||
parseurl "~1.3.2"
|
parseurl "~1.3.2"
|
||||||
|
|
||||||
serve-static@1.15.0:
|
serve-static@1.15.0, serve-static@~1.15.0:
|
||||||
version "1.15.0"
|
version "1.15.0"
|
||||||
resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.15.0.tgz#faaef08cffe0a1a62f60cad0c4e513cff0ac9540"
|
resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.15.0.tgz#faaef08cffe0a1a62f60cad0c4e513cff0ac9540"
|
||||||
integrity sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==
|
integrity sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==
|
||||||
@@ -18851,6 +18992,16 @@ shiki@^0.10.1:
|
|||||||
vscode-oniguruma "^1.6.1"
|
vscode-oniguruma "^1.6.1"
|
||||||
vscode-textmate "5.2.0"
|
vscode-textmate "5.2.0"
|
||||||
|
|
||||||
|
shiki@^0.14.1:
|
||||||
|
version "0.14.3"
|
||||||
|
resolved "https://registry.yarnpkg.com/shiki/-/shiki-0.14.3.tgz#d1a93c463942bdafb9866d74d619a4347d0bbf64"
|
||||||
|
integrity sha512-U3S/a+b0KS+UkTyMjoNojvTgrBHjgp7L6ovhFVZsXmBGnVdQ4K4U9oK0z63w538S91ATngv1vXigHCSWOwnr+g==
|
||||||
|
dependencies:
|
||||||
|
ansi-sequence-parser "^1.1.0"
|
||||||
|
jsonc-parser "^3.2.0"
|
||||||
|
vscode-oniguruma "^1.7.0"
|
||||||
|
vscode-textmate "^8.0.0"
|
||||||
|
|
||||||
side-channel@^1.0.4:
|
side-channel@^1.0.4:
|
||||||
version "1.0.4"
|
version "1.0.4"
|
||||||
resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.4.tgz#efce5c8fdc104ee751b25c58d4290011fa5ea2cf"
|
resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.4.tgz#efce5c8fdc104ee751b25c58d4290011fa5ea2cf"
|
||||||
@@ -18908,6 +19059,13 @@ simple-update-notifier@^1.0.7:
|
|||||||
dependencies:
|
dependencies:
|
||||||
semver "~7.0.0"
|
semver "~7.0.0"
|
||||||
|
|
||||||
|
simple-update-notifier@^2.0.0:
|
||||||
|
version "2.0.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/simple-update-notifier/-/simple-update-notifier-2.0.0.tgz#d70b92bdab7d6d90dfd73931195a30b6e3d7cebb"
|
||||||
|
integrity sha512-a2B9Y0KlNXl9u/vsW6sTIu9vGEpfKu2wRV6l1H3XEas/0gUIzGzBoP/IouTcUQbm9JWZLH3COxyn03TYlFax6w==
|
||||||
|
dependencies:
|
||||||
|
semver "^7.5.3"
|
||||||
|
|
||||||
sisteransi@^1.0.5:
|
sisteransi@^1.0.5:
|
||||||
version "1.0.5"
|
version "1.0.5"
|
||||||
resolved "https://registry.yarnpkg.com/sisteransi/-/sisteransi-1.0.5.tgz#134d681297756437cc05ca01370d3a7a571075ed"
|
resolved "https://registry.yarnpkg.com/sisteransi/-/sisteransi-1.0.5.tgz#134d681297756437cc05ca01370d3a7a571075ed"
|
||||||
@@ -19527,6 +19685,11 @@ stylis@4.2.0:
|
|||||||
resolved "https://registry.yarnpkg.com/stylis/-/stylis-4.2.0.tgz#79daee0208964c8fe695a42fcffcac633a211a51"
|
resolved "https://registry.yarnpkg.com/stylis/-/stylis-4.2.0.tgz#79daee0208964c8fe695a42fcffcac633a211a51"
|
||||||
integrity sha512-Orov6g6BB1sDfYgzWfTHDOxamtX1bE/zo104Dh9e6fqJ3PooipYyfJ0pUmrZO2wAvO8YbEyeFrkV91XTsGMSrw==
|
integrity sha512-Orov6g6BB1sDfYgzWfTHDOxamtX1bE/zo104Dh9e6fqJ3PooipYyfJ0pUmrZO2wAvO8YbEyeFrkV91XTsGMSrw==
|
||||||
|
|
||||||
|
supervisor@~0.12.0:
|
||||||
|
version "0.12.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/supervisor/-/supervisor-0.12.0.tgz#de7e6337015b291851c10f3538c4a7f04917ecc1"
|
||||||
|
integrity sha512-iBYeU5Or4WiiIa3+ns1DpHIiHjNNXSuYUiixKcznewwo4ImBJ8EobktaAo2csOcauhrz4SvKRTou8Z2C3W28+A==
|
||||||
|
|
||||||
supports-color@8.1.1, supports-color@^8.0.0:
|
supports-color@8.1.1, supports-color@^8.0.0:
|
||||||
version "8.1.1"
|
version "8.1.1"
|
||||||
resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-8.1.1.tgz#cd6fc17e28500cff56c1b86c0a7fd4a54a73005c"
|
resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-8.1.1.tgz#cd6fc17e28500cff56c1b86c0a7fd4a54a73005c"
|
||||||
@@ -19847,6 +20010,14 @@ timers-browserify@^2.0.4:
|
|||||||
dependencies:
|
dependencies:
|
||||||
setimmediate "^1.0.4"
|
setimmediate "^1.0.4"
|
||||||
|
|
||||||
|
timers-ext@^0.1.7:
|
||||||
|
version "0.1.7"
|
||||||
|
resolved "https://registry.yarnpkg.com/timers-ext/-/timers-ext-0.1.7.tgz#6f57ad8578e07a3fb9f91d9387d65647555e25c6"
|
||||||
|
integrity sha512-b85NUNzTSdodShTIbky6ZF02e8STtVVfD+fu4aXXShEELpozH+bCpJLYMPZbsABN2wDH7fJpqIoXxJpzbf0NqQ==
|
||||||
|
dependencies:
|
||||||
|
es5-ext "~0.10.46"
|
||||||
|
next-tick "1"
|
||||||
|
|
||||||
tiny-warning@^1.0.2:
|
tiny-warning@^1.0.2:
|
||||||
version "1.0.3"
|
version "1.0.3"
|
||||||
resolved "https://registry.yarnpkg.com/tiny-warning/-/tiny-warning-1.0.3.tgz#94a30db453df4c643d0fd566060d60a875d84754"
|
resolved "https://registry.yarnpkg.com/tiny-warning/-/tiny-warning-1.0.3.tgz#94a30db453df4c643d0fd566060d60a875d84754"
|
||||||
@@ -20237,6 +20408,16 @@ type-is@~1.6.18:
|
|||||||
media-typer "0.3.0"
|
media-typer "0.3.0"
|
||||||
mime-types "~2.1.24"
|
mime-types "~2.1.24"
|
||||||
|
|
||||||
|
type@^1.0.1:
|
||||||
|
version "1.2.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/type/-/type-1.2.0.tgz#848dd7698dafa3e54a6c479e759c4bc3f18847a0"
|
||||||
|
integrity sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==
|
||||||
|
|
||||||
|
type@^2.7.2:
|
||||||
|
version "2.7.2"
|
||||||
|
resolved "https://registry.yarnpkg.com/type/-/type-2.7.2.tgz#2376a15a3a28b1efa0f5350dcf72d24df6ef98d0"
|
||||||
|
integrity sha512-dzlvlNlt6AXU7EBSfpAscydQ7gXB+pPGsPnfJnZpiNJBDj7IaJzQlBZYGdEi4R9HmPdBv2XmWJ6YUtoTa7lmCw==
|
||||||
|
|
||||||
typed-array-length@^1.0.4:
|
typed-array-length@^1.0.4:
|
||||||
version "1.0.4"
|
version "1.0.4"
|
||||||
resolved "https://registry.yarnpkg.com/typed-array-length/-/typed-array-length-1.0.4.tgz#89d83785e5c4098bec72e08b319651f0eac9c1bb"
|
resolved "https://registry.yarnpkg.com/typed-array-length/-/typed-array-length-1.0.4.tgz#89d83785e5c4098bec72e08b319651f0eac9c1bb"
|
||||||
@@ -20269,6 +20450,16 @@ typedoc@^0.22.13:
|
|||||||
minimatch "^5.1.0"
|
minimatch "^5.1.0"
|
||||||
shiki "^0.10.1"
|
shiki "^0.10.1"
|
||||||
|
|
||||||
|
typedoc@^0.24.8:
|
||||||
|
version "0.24.8"
|
||||||
|
resolved "https://registry.yarnpkg.com/typedoc/-/typedoc-0.24.8.tgz#cce9f47ba6a8d52389f5e583716a2b3b4335b63e"
|
||||||
|
integrity sha512-ahJ6Cpcvxwaxfu4KtjA8qZNqS43wYt6JL27wYiIgl1vd38WW/KWX11YuAeZhuz9v+ttrutSsgK+XO1CjL1kA3w==
|
||||||
|
dependencies:
|
||||||
|
lunr "^2.3.9"
|
||||||
|
marked "^4.3.0"
|
||||||
|
minimatch "^9.0.0"
|
||||||
|
shiki "^0.14.1"
|
||||||
|
|
||||||
"typescript@^3 || ^4", typescript@^4.6.2, typescript@^4.8.4:
|
"typescript@^3 || ^4", typescript@^4.6.2, typescript@^4.8.4:
|
||||||
version "4.9.5"
|
version "4.9.5"
|
||||||
resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.9.5.tgz#095979f9bcc0d09da324d58d03ce8f8374cbe65a"
|
resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.9.5.tgz#095979f9bcc0d09da324d58d03ce8f8374cbe65a"
|
||||||
@@ -20850,7 +21041,7 @@ vm-browserify@^1.0.1:
|
|||||||
resolved "https://registry.yarnpkg.com/vm-browserify/-/vm-browserify-1.1.2.tgz#78641c488b8e6ca91a75f511e7a3b32a86e5dda0"
|
resolved "https://registry.yarnpkg.com/vm-browserify/-/vm-browserify-1.1.2.tgz#78641c488b8e6ca91a75f511e7a3b32a86e5dda0"
|
||||||
integrity sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==
|
integrity sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==
|
||||||
|
|
||||||
vscode-oniguruma@^1.6.1:
|
vscode-oniguruma@^1.6.1, vscode-oniguruma@^1.7.0:
|
||||||
version "1.7.0"
|
version "1.7.0"
|
||||||
resolved "https://registry.yarnpkg.com/vscode-oniguruma/-/vscode-oniguruma-1.7.0.tgz#439bfad8fe71abd7798338d1cd3dc53a8beea94b"
|
resolved "https://registry.yarnpkg.com/vscode-oniguruma/-/vscode-oniguruma-1.7.0.tgz#439bfad8fe71abd7798338d1cd3dc53a8beea94b"
|
||||||
integrity sha512-L9WMGRfrjOhgHSdOYgCt/yRMsXzLDJSL7BPrOZt73gU0iWO4mpqzqQzOz5srxqTvMBaR0XZTSrVWo4j55Rc6cA==
|
integrity sha512-L9WMGRfrjOhgHSdOYgCt/yRMsXzLDJSL7BPrOZt73gU0iWO4mpqzqQzOz5srxqTvMBaR0XZTSrVWo4j55Rc6cA==
|
||||||
@@ -20860,6 +21051,11 @@ vscode-textmate@5.2.0:
|
|||||||
resolved "https://registry.yarnpkg.com/vscode-textmate/-/vscode-textmate-5.2.0.tgz#01f01760a391e8222fe4f33fbccbd1ad71aed74e"
|
resolved "https://registry.yarnpkg.com/vscode-textmate/-/vscode-textmate-5.2.0.tgz#01f01760a391e8222fe4f33fbccbd1ad71aed74e"
|
||||||
integrity sha512-Uw5ooOQxRASHgu6C7GVvUxisKXfSgW4oFlO+aa+PAkgmH89O3CXxEEzNRNtHSqtXFTl0nAC1uYj0GMSH27uwtQ==
|
integrity sha512-Uw5ooOQxRASHgu6C7GVvUxisKXfSgW4oFlO+aa+PAkgmH89O3CXxEEzNRNtHSqtXFTl0nAC1uYj0GMSH27uwtQ==
|
||||||
|
|
||||||
|
vscode-textmate@^8.0.0:
|
||||||
|
version "8.0.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/vscode-textmate/-/vscode-textmate-8.0.0.tgz#2c7a3b1163ef0441097e0b5d6389cd5504b59e5d"
|
||||||
|
integrity sha512-AFbieoL7a5LMqcnOF04ji+rpXadgOXnZsxQr//r83kLPr7biP7am3g9zbaZIaBGwBRWeSvoMD4mgPdX3e4NWBg==
|
||||||
|
|
||||||
w3c-hr-time@^1.0.2:
|
w3c-hr-time@^1.0.2:
|
||||||
version "1.0.2"
|
version "1.0.2"
|
||||||
resolved "https://registry.yarnpkg.com/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz#0a89cdf5cc15822df9c360543676963e0cc308cd"
|
resolved "https://registry.yarnpkg.com/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz#0a89cdf5cc15822df9c360543676963e0cc308cd"
|
||||||
@@ -21416,6 +21612,11 @@ ws@^8.13.0, ws@^8.2.3:
|
|||||||
resolved "https://registry.yarnpkg.com/ws/-/ws-8.13.0.tgz#9a9fb92f93cf41512a0735c8f4dd09b8a1211cd0"
|
resolved "https://registry.yarnpkg.com/ws/-/ws-8.13.0.tgz#9a9fb92f93cf41512a0735c8f4dd09b8a1211cd0"
|
||||||
integrity sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA==
|
integrity sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA==
|
||||||
|
|
||||||
|
ws@~8.11.0:
|
||||||
|
version "8.11.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/ws/-/ws-8.11.0.tgz#6a0d36b8edfd9f96d8b25683db2f8d7de6e8e143"
|
||||||
|
integrity sha512-HPG3wQd9sNQoT9xHyNCXoDUa+Xw/VevmY9FoHyQ+g+rrMn4j6FB4np7Z0OhdTgjx6MgQLK7jwSy1YecU1+4Asg==
|
||||||
|
|
||||||
x-default-browser@^0.4.0:
|
x-default-browser@^0.4.0:
|
||||||
version "0.4.0"
|
version "0.4.0"
|
||||||
resolved "https://registry.yarnpkg.com/x-default-browser/-/x-default-browser-0.4.0.tgz#70cf0da85da7c0ab5cb0f15a897f2322a6bdd481"
|
resolved "https://registry.yarnpkg.com/x-default-browser/-/x-default-browser-0.4.0.tgz#70cf0da85da7c0ab5cb0f15a897f2322a6bdd481"
|
||||||
|
|||||||
Reference in New Issue
Block a user