From e8dd347186580fe688e1f0336a4fcc04cbac2fdc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jon=20H=C3=A4ggblad?= Date: Sun, 14 May 2023 22:00:17 +0200 Subject: [PATCH 01/10] Update Cargo.lock (#3410) --- Cargo.lock | 18 +++++++++--------- contracts/Cargo.lock | 1 + nym-connect/desktop/Cargo.lock | 1 + 3 files changed, 11 insertions(+), 9 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index cd076406e1..72ad7ad052 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1640,7 +1640,7 @@ checksum = "0206175f82b8d6bf6652ff7d71a1e27fd2e4efde587fd368662814d6ec1d9ce0" [[package]] name = "explorer-api" -version = "1.1.17" +version = "1.1.18" dependencies = [ "chrono", "clap 4.2.7", @@ -3069,7 +3069,7 @@ dependencies = [ [[package]] name = "nym-api" -version = "1.1.18" +version = "1.1.19" dependencies = [ "anyhow", "async-trait", @@ -3203,7 +3203,7 @@ dependencies = [ [[package]] name = "nym-cli" -version = "1.1.17" +version = "1.1.18" dependencies = [ "anyhow", "base64 0.13.1", @@ -3265,7 +3265,7 @@ dependencies = [ [[package]] name = "nym-client" -version = "1.1.17" +version = "1.1.18" dependencies = [ "clap 4.2.7", "dirs", @@ -3534,7 +3534,7 @@ dependencies = [ [[package]] name = "nym-gateway" -version = "1.1.17" +version = "1.1.18" dependencies = [ "anyhow", "async-trait", @@ -3682,7 +3682,7 @@ dependencies = [ [[package]] name = "nym-mixnode" -version = "1.1.18" +version = "1.1.19" dependencies = [ "anyhow", "bs58", @@ -3793,7 +3793,7 @@ dependencies = [ [[package]] name = "nym-network-requester" -version = "1.1.17" +version = "1.1.18" dependencies = [ "async-file-watcher", "async-trait", @@ -3835,7 +3835,7 @@ dependencies = [ [[package]] name = "nym-network-statistics" -version = "1.1.17" +version = "1.1.18" dependencies = [ "dirs", "log", @@ -3970,7 +3970,7 @@ dependencies = [ [[package]] name = "nym-socks5-client" -version = "1.1.17" +version = "1.1.18" dependencies = [ "clap 4.2.7", "lazy_static", diff --git a/contracts/Cargo.lock b/contracts/Cargo.lock index f260999dfb..cb6279fdc4 100644 --- a/contracts/Cargo.lock +++ b/contracts/Cargo.lock @@ -1248,6 +1248,7 @@ name = "nym-name-service-common" version = "0.1.0" dependencies = [ "cosmwasm-std", + "schemars", "serde", ] diff --git a/nym-connect/desktop/Cargo.lock b/nym-connect/desktop/Cargo.lock index 1fa522c799..8aec6aaaba 100644 --- a/nym-connect/desktop/Cargo.lock +++ b/nym-connect/desktop/Cargo.lock @@ -3528,6 +3528,7 @@ name = "nym-name-service-common" version = "0.1.0" dependencies = [ "cosmwasm-std", + "schemars", "serde", ] From 0373e2b02a344905cca95259adf98f1a86544ff3 Mon Sep 17 00:00:00 2001 From: Pierre Dommerc Date: Fri, 12 May 2023 10:37:08 +0200 Subject: [PATCH 02/10] feat(wallet): select validator (#3375) --- .../validator-client/src/connection_tester.rs | 27 ++- nym-wallet/src-tauri/src/config/mod.rs | 61 +++++- nym-wallet/src-tauri/src/error.rs | 4 + nym-wallet/src-tauri/src/main.rs | 3 + nym-wallet/src-tauri/src/network_config.rs | 36 +++- .../src/operations/mixnet/account.rs | 94 ++++++--- nym-wallet/src-tauri/src/state.rs | 38 +++- .../components/Settings/SelectValidator.tsx | 185 ++++++++++++++++++ nym-wallet/src/context/bonding.tsx | 21 +- .../src/pages/settings/AdvancedSettings.tsx | 3 + nym-wallet/src/requests/network.ts | 11 ++ nym-wallet/src/utils/fireRequests.ts | 22 +++ nym-wallet/src/utils/index.ts | 3 + 13 files changed, 452 insertions(+), 56 deletions(-) create mode 100644 nym-wallet/src/components/Settings/SelectValidator.tsx create mode 100644 nym-wallet/src/utils/fireRequests.ts diff --git a/common/client-libs/validator-client/src/connection_tester.rs b/common/client-libs/validator-client/src/connection_tester.rs index 570d94f986..5d89e86d05 100644 --- a/common/client-libs/validator-client/src/connection_tester.rs +++ b/common/client-libs/validator-client/src/connection_tester.rs @@ -1,6 +1,6 @@ use crate::nyxd::error::NyxdError; use crate::nyxd::{Config as ClientConfig, NyxdClient, QueryNyxdClient}; -use crate::NymApiClient; +use crate::{NymApiClient, ValidatorClientError}; use crate::nyxd::traits::MixnetQueryClient; use colored::Colorize; @@ -45,6 +45,23 @@ pub async fn run_validator_connection_test( ) } +pub async fn test_nyxd_url_connection( + network: NymNetworkDetails, + nyxd_url: Url, + address: cosmrs::AccountId, +) -> Result { + let config = ClientConfig::try_from_nym_network_details(&network) + .expect("failed to create valid nyxd client config"); + + let mut nyxd_client = NyxdClient::::connect(config, nyxd_url.as_str())?; + // possibly redundant, but lets just leave it here + nyxd_client.set_mixnet_contract_address(address); + match test_nyxd_connection(network, &nyxd_url, &nyxd_client).await { + ConnectionResult::Nyxd(_, _, res) => Ok(res), + _ => Ok(false), // ✶ not possible to happens + } +} + fn setup_connection_tests( nyxd_urls: impl Iterator, api_urls: impl Iterator, @@ -105,7 +122,7 @@ async fn test_nyxd_connection( { Ok(Err(NyxdError::TendermintError(e))) => { // If we get a tendermint-rpc error, we classify the node as not contactable - log::debug!("Checking: nyxd url: {url}: {}: {}", "failed".red(), e); + log::warn!("Checking: nyxd url: {url}: {}: {}", "failed".red(), e); false } Ok(Err(NyxdError::AbciError { code, log, .. })) => { @@ -118,12 +135,12 @@ async fn test_nyxd_connection( code == 18 } Ok(Err(error @ NyxdError::NoContractAddressAvailable(_))) => { - log::debug!("Checking: nyxd url: {url}: {}: {error}", "failed".red()); + log::warn!("Checking: nyxd url: {url}: {}: {error}", "failed".red()); false } Ok(Err(e)) => { // For any other error, we're optimistic and just try anyway. - log::debug!( + log::warn!( "Checking: nyxd_url: {url}: {}, but with error: {e}", "success".green() ); @@ -134,7 +151,7 @@ async fn test_nyxd_connection( true } Err(e) => { - log::debug!("Checking: nyxd_url: {url}: {}: {e}", "failed".red()); + log::warn!("Checking: nyxd_url: {url}: {}: {e}", "failed".red()); false } }; diff --git a/nym-wallet/src-tauri/src/config/mod.rs b/nym-wallet/src-tauri/src/config/mod.rs index f560b89c36..24e8a7d03a 100644 --- a/nym-wallet/src-tauri/src/config/mod.rs +++ b/nym-wallet/src-tauri/src/config/mod.rs @@ -57,6 +57,10 @@ pub struct NetworkConfig { // User selected urls selected_nyxd_url: Option, + // Default nyxd URL assigned during login, can be used when the user wants + // to revert back its selected validator URL + default_nyxd_url: Option, + selected_api_url: Option, // Additional user provided validators. @@ -85,6 +89,7 @@ impl Default for NetworkConfig { fn default() -> Self { Self { version: Some(CURRENT_NETWORK_CONFIG_VERSION), + default_nyxd_url: None, selected_nyxd_url: None, selected_api_url: None, nyxd_urls: None, @@ -241,6 +246,30 @@ impl Config { .expect("Wrong format for bandwidth claim contract address") } + pub fn set_default_nyxd_urls(&mut self, urls: &HashMap) { + for (network, url) in urls { + self.set_default_nyxd_url(url.to_owned(), network); + } + } + + pub fn set_default_nyxd_url(&mut self, nyxd_url: Url, network: &WalletNetwork) { + log::debug!( + "set default nyxd URL for {network} {}", + nyxd_url.to_string() + ); + if let Some(net) = self.networks.get_mut(&network.as_key()) { + net.default_nyxd_url = Some(nyxd_url); + } else { + self.networks.insert( + network.as_key(), + NetworkConfig { + default_nyxd_url: Some(nyxd_url), + ..NetworkConfig::default() + }, + ); + } + } + pub fn select_nyxd_url(&mut self, nyxd_url: Url, network: WalletNetwork) { if let Some(net) = self.networks.get_mut(&network.as_key()) { net.selected_nyxd_url = Some(nyxd_url); @@ -255,6 +284,13 @@ impl Config { } } + pub fn reset_nyxd_url(&mut self, network: WalletNetwork) { + match self.networks.get_mut(&network.as_key()) { + Some(net) => net.selected_nyxd_url = None, + None => log::warn!("reset_nyxd_url: {network} network not found, ignoring"), + } + } + pub fn select_nym_api_url(&mut self, api_url: Url, network: WalletNetwork) { if let Some(net) = self.networks.get_mut(&network.as_key()) { net.selected_api_url = Some(api_url); @@ -262,7 +298,7 @@ impl Config { self.networks.insert( network.as_key(), NetworkConfig { - selected_nyxd_url: Some(api_url), + selected_api_url: Some(api_url), ..NetworkConfig::default() }, ); @@ -270,9 +306,25 @@ impl Config { } pub fn get_selected_validator_nyxd_url(&self, network: WalletNetwork) -> Option { - self.networks - .get(&network.as_key()) - .and_then(|config| config.selected_nyxd_url.clone()) + self.networks.get(&network.as_key()).and_then(|config| { + log::debug!( + "get selected nyxd url for {} {:?}", + network.to_string(), + config.selected_nyxd_url, + ); + config.selected_nyxd_url.clone() + }) + } + + pub fn get_default_nyxd_url(&self, network: WalletNetwork) -> Option { + self.networks.get(&network.as_key()).and_then(|config| { + log::debug!( + "get default nyxd url for {} {:?}", + network.to_string(), + config.default_nyxd_url, + ); + config.default_nyxd_url.clone() + }) } pub fn get_selected_nym_api_url(&self, network: &WalletNetwork) -> Option { @@ -573,6 +625,7 @@ api_url = 'https://baz/api' r#"{ "version": 1, "selected_nyxd_url": null, + "default_nyxd_url": null, "selected_api_url": "https://my_api_url.com/", "nyxd_urls": [ { diff --git a/nym-wallet/src-tauri/src/error.rs b/nym-wallet/src-tauri/src/error.rs index d7c552bf15..8cee3018d5 100644 --- a/nym-wallet/src-tauri/src/error.rs +++ b/nym-wallet/src-tauri/src/error.rs @@ -130,6 +130,10 @@ pub enum BackendError { NewWindowError, #[error("Failed to check for application update")] CheckAppVersionError, + #[error("Failed to connect to the provided validator URL")] + WalletValidatorConnectionFailed, + #[error("No defined default validator URL")] + WalletNoDefaultValidator, #[error(transparent)] WalletError { diff --git a/nym-wallet/src-tauri/src/main.rs b/nym-wallet/src-tauri/src/main.rs index e0842fa096..87c961b38e 100644 --- a/nym-wallet/src-tauri/src/main.rs +++ b/nym-wallet/src-tauri/src/main.rs @@ -94,6 +94,9 @@ fn main() { network_config::remove_validator, network_config::select_nym_api_url, network_config::select_nyxd_url, + network_config::reset_nyxd_url, + network_config::get_default_nyxd_url, + network_config::get_selected_nyxd_url, network_config::update_nyxd_urls, state::load_config_from_files, state::save_config_to_files, diff --git a/nym-wallet/src-tauri/src/network_config.rs b/nym-wallet/src-tauri/src/network_config.rs index bcac19bb62..6f75b6e5fa 100644 --- a/nym-wallet/src-tauri/src/network_config.rs +++ b/nym-wallet/src-tauri/src/network_config.rs @@ -26,6 +26,28 @@ pub async fn get_nym_api_urls( Ok(ValidatorUrls { urls }) } +#[tauri::command] +pub async fn get_selected_nyxd_url( + network: WalletNetwork, + state: tauri::State<'_, WalletState>, +) -> Result, BackendError> { + let state = state.read().await; + let url = state.get_selected_nyxd_url(&network).map(String::from); + log::info!("Selected nyxd url for {network}: {:?}", url); + Ok(url) +} + +#[tauri::command] +pub async fn get_default_nyxd_url( + network: WalletNetwork, + state: tauri::State<'_, WalletState>, +) -> Result { + let state = state.read().await; + let url = state.get_default_nyxd_url(&network).map(String::from); + log::info!("Default nyxd url for {network}: {:?}", url); + url.ok_or_else(|| BackendError::WalletNoDefaultValidator) +} + #[tauri::command] pub async fn select_nyxd_url( url: &str, @@ -33,7 +55,19 @@ pub async fn select_nyxd_url( state: tauri::State<'_, WalletState>, ) -> Result<(), BackendError> { log::debug!("Selecting new nyxd url for {network}: {url}"); - state.write().await.select_nyxd_url(url, network)?; + state.write().await.select_nyxd_url(url, network).await?; + state.read().await.save_config_files()?; + Ok(()) +} + +#[tauri::command] +pub async fn reset_nyxd_url( + network: WalletNetwork, + state: tauri::State<'_, WalletState>, +) -> Result<(), BackendError> { + log::debug!("Resetting nyxd url for {network} to default"); + state.write().await.reset_nyxd_url(network)?; + state.read().await.save_config_files()?; Ok(()) } diff --git a/nym-wallet/src-tauri/src/operations/mixnet/account.rs b/nym-wallet/src-tauri/src/operations/mixnet/account.rs index 35265f54f2..a15732e5ee 100644 --- a/nym-wallet/src-tauri/src/operations/mixnet/account.rs +++ b/nym-wallet/src-tauri/src/operations/mixnet/account.rs @@ -3,8 +3,8 @@ use crate::error::BackendError; use crate::network_config; use crate::state::{WalletAccountIds, WalletState}; use crate::wallet_storage::{self, UserPassword, DEFAULT_LOGIN_ID}; -use bip39::rand::{self, seq::SliceRandom}; -use bip39::{Language, Mnemonic}; +use bip39::rand::seq::SliceRandom; +use bip39::{rand, Language, Mnemonic}; use cosmrs::bip32::DerivationPath; use itertools::Itertools; use nym_config::defaults::{NymNetworkDetails, COSMOS_DERIVATION_PATH}; @@ -118,6 +118,14 @@ async fn _connect_with_mnemonic( let state = state.read().await; (state.get_all_nyxd_urls(), state.get_all_api_urls()) }; + + let (nyxd_urls, api_urls) = run_connection_test( + untested_nyxd_urls.clone(), + untested_api_urls.clone(), + &config, + ) + .await; + let default_nyxd_urls: HashMap = untested_nyxd_urls .iter() .map(|(network, urls)| (*network, urls.iter().next().unwrap().clone())) @@ -127,19 +135,17 @@ async fn _connect_with_mnemonic( .map(|(network, urls)| (*network, urls.iter().next().unwrap().clone())) .collect(); - // Run connection tests on all nyxd and nym-api endpoints - let (nyxd_urls, api_urls) = - run_connection_test(untested_nyxd_urls, untested_api_urls, &config).await; + let nyxd_urls = pick_good_nyxd_urls(&default_nyxd_urls, &nyxd_urls).await?; + let api_urls = pick_good_api_urls(&default_api_urls, &api_urls).await?; + + { + let mut w_state = state.write().await; + // Save the checked nyxd URLs + w_state.set_default_nyxd_urls(&nyxd_urls); + } // Create clients for all networks - let clients = create_clients( - &nyxd_urls, - &api_urls, - &default_nyxd_urls, - &default_api_urls, - &config, - &mnemonic, - )?; + let clients = create_clients(&nyxd_urls, &api_urls, &config, &mnemonic)?; // Set the default account let default_network = WalletNetwork::MAINNET; @@ -196,9 +202,51 @@ async fn run_connection_test( .await } -fn create_clients( +async fn pick_good_nyxd_urls( + default_nyxd_urls: &HashMap, nyxd_urls: &HashMap>, +) -> Result, BackendError> { + let nyxd_urls: HashMap = WalletNetwork::iter() + .map(|network| { + let default_nyxd_url = default_nyxd_urls + .get(&network) + .expect("Expected at least one nyxd_url"); + let url = select_random_responding_url(nyxd_urls, network).unwrap_or_else(|| { + log::warn!( + "No successful nyxd_urls for {network}: using default: {default_nyxd_url}" + ); + default_nyxd_url.clone() + }); + log::info!("Set default nyxd_url for {network}: {url}"); + (network, url) + }) + .collect(); + + Ok(nyxd_urls) +} + +async fn pick_good_api_urls( + default_api_urls: &HashMap, api_urls: &HashMap>, +) -> Result, BackendError> { + let api_urls: HashMap = WalletNetwork::iter() + .map(|network| { + let default_api_url = default_api_urls + .get(&network) + .expect("Expected at least one api_url"); + let url = select_first_responding_url(api_urls, network).unwrap_or_else(|| { + log::warn!("No passing api_urls for {network}: using default: {default_api_url}"); + default_api_url.clone() + }); + log::info!("Set default api_url for {network}: {url}"); + (network, url) + }) + .collect(); + + Ok(api_urls) +} + +fn create_clients( default_nyxd_urls: &HashMap, default_api_urls: &HashMap, config: &Config, @@ -210,28 +258,22 @@ fn create_clients( log::debug!("Using selected nyxd_url for {network}: {url}"); url.clone() } else { - let default_nyxd_url = default_nyxd_urls + let url = default_nyxd_urls .get(&network) .expect("Expected at least one nyxd_url"); - select_random_responding_url(nyxd_urls, network).unwrap_or_else(|| { - log::debug!( - "No successful nyxd_urls for {network}: using default: {default_nyxd_url}" - ); - default_nyxd_url.clone() - }) + log::debug!("Using default nyxd_url for {network}: {url}"); + url.to_owned() }; let api_url = if let Some(url) = config.get_selected_nym_api_url(&network) { log::debug!("Using selected api_url for {network}: {url}"); url.clone() } else { - let default_api_url = default_api_urls + let url = default_api_urls .get(&network) .expect("Expected at least one api url"); - select_first_responding_url(api_urls, network).unwrap_or_else(|| { - log::debug!("No passing api_urls for {network}: using default: {default_api_url}"); - default_api_url.clone() - }) + log::debug!("Using default api_url for {network}: {url}"); + url.to_owned() }; log::info!("Connecting to: nyxd_url: {nyxd_url} for {network}"); diff --git a/nym-wallet/src-tauri/src/state.rs b/nym-wallet/src-tauri/src/state.rs index c10bbf486f..bfc2d85cb6 100644 --- a/nym-wallet/src-tauri/src/state.rs +++ b/nym-wallet/src-tauri/src/state.rs @@ -437,7 +437,20 @@ impl WalletStateInner { } } - pub fn select_nyxd_url(&mut self, url: &str, network: Network) -> Result<(), BackendError> { + pub async fn select_nyxd_url( + &mut self, + url: &str, + network: Network, + ) -> Result<(), BackendError> { + if !nym_validator_client::connection_tester::test_nyxd_url_connection( + network.into(), + url.parse()?, + self.config.get_mixnet_contract_address(network), + ) + .await? + { + return Err(BackendError::WalletValidatorConnectionFailed); + } self.config.select_nyxd_url(url.parse()?, network); if let Ok(client) = self.client_mut(network) { client.change_nyxd(url.parse()?)?; @@ -445,6 +458,29 @@ impl WalletStateInner { Ok(()) } + pub fn reset_nyxd_url(&mut self, network: Network) -> Result<(), BackendError> { + self.config.reset_nyxd_url(network); + let default_nyxd = self.config.get_default_nyxd_url(network); + if let Ok(client) = self.client_mut(network) { + if let Some(url) = default_nyxd { + client.change_nyxd(url)?; + } + } + Ok(()) + } + + pub fn set_default_nyxd_urls(&mut self, urls: &HashMap) { + self.config.set_default_nyxd_urls(urls); + } + + pub fn get_selected_nyxd_url(&self, network: &Network) -> Option { + self.config.get_selected_validator_nyxd_url(*network) + } + + pub fn get_default_nyxd_url(&self, network: &Network) -> Option { + self.config.get_default_nyxd_url(*network) + } + pub fn select_nym_api_url(&mut self, url: &str, network: Network) -> Result<(), BackendError> { self.config.select_nym_api_url(url.parse()?, network); if let Ok(client) = self.client_mut(network) { diff --git a/nym-wallet/src/components/Settings/SelectValidator.tsx b/nym-wallet/src/components/Settings/SelectValidator.tsx new file mode 100644 index 0000000000..c52cc2db3e --- /dev/null +++ b/nym-wallet/src/components/Settings/SelectValidator.tsx @@ -0,0 +1,185 @@ +import React, { useContext, useEffect, useState } from 'react'; +import { Button, FormControl, Grid, Stack, Switch, TextField, Typography } from '@mui/material'; +import { useSnackbar } from 'notistack'; +import { + checkMixnodeOwnership, + getDefaultValidatorUrl, + getSelectedValidatorUrl, + resetValidatorUrl, + setSelectedValidatorUrl as setSelectedValidatorUrlReq, +} from '../../requests'; +import { AppContext } from '../../context'; +import { Console } from '../../utils/console'; +import { Network } from '../../types'; + +const SelectValidator = () => { + const [customValidatorEnabled, setCustomValidatorEnabled] = useState(false); + const [selectedValidatorUrl, setSelectedValidatorUrl] = useState(); + const [defaultValidatorUrl, setDefaultValidatorUrl] = useState(); + const [validatorUrlInput, setValidatorUrlInput] = useState(''); + const [isLoading, setIsLoading] = useState(false); + const { network } = useContext(AppContext); + + const { enqueueSnackbar } = useSnackbar(); + + const getDefaultValidator = async (net: Network) => { + if (!network) { + return; + } + try { + const defaultValidator = await getDefaultValidatorUrl(net); + setDefaultValidatorUrl(defaultValidator); + } catch (e) { + Console.error(`an error occurred while requesting the default validator URL: ${e}`); + } + }; + + const getSelectedValidator = async (net: Network) => { + if (!network) { + return null; + } + try { + const selectedValidator = await getSelectedValidatorUrl(net); + setSelectedValidatorUrl(selectedValidator); + } catch (e) { + Console.error(`an error occurred while requesting the selected validator URL: ${e}`); + } + return null; + }; + + useEffect(() => { + if (network) { + getDefaultValidator(network); + getSelectedValidator(network); + } + }, [network, customValidatorEnabled]); + + useEffect(() => { + // on network change, turn off the custom val switch if there is no selected val + // for this network + if (!selectedValidatorUrl) { + setCustomValidatorEnabled(false); + setValidatorUrlInput(''); + } + }, [network, selectedValidatorUrl]); + + useEffect(() => { + if (selectedValidatorUrl && selectedValidatorUrl !== defaultValidatorUrl) { + setCustomValidatorEnabled(true); + } + + if (selectedValidatorUrl) { + setValidatorUrlInput(selectedValidatorUrl); + } + }, [selectedValidatorUrl, defaultValidatorUrl, network]); + + const onToggle = async () => { + if (!customValidatorEnabled) { + setCustomValidatorEnabled(true); + return; + } + setIsLoading(true); + try { + await resetValidatorUrl(network as Network); + setValidatorUrlInput(''); + setSelectedValidatorUrl(null); + setCustomValidatorEnabled(false); + } catch (e) { + Console.error(e); + } finally { + setIsLoading(false); + } + }; + + const saveValidator = async () => { + if (!network || !validatorUrlInput || validatorUrlInput === defaultValidatorUrl) { + return; + } + setIsLoading(true); + try { + // this tauri request also does a basic connection check + await setSelectedValidatorUrlReq({ network, url: validatorUrlInput }); + } catch (e) { + Console.error(e); + enqueueSnackbar(`Invalid validator URL: ${e}`, { variant: 'error' }); + setIsLoading(false); + return; + } + + // to enforce the validator URL is valid, try to query the node ownership + // if it fails, that means the endpoint is wrong + // TODO this check logic should be handled directly in the rust side, `select_nyxd_url` command + try { + await checkMixnodeOwnership(); + enqueueSnackbar('Validator URL saved', { variant: 'success' }); + } catch (e) { + Console.error(e); + enqueueSnackbar('The given validator URL is not valid for the currently selected network', { variant: 'error' }); + await resetValidatorUrl(network as Network); + setSelectedValidatorUrl(null); + } finally { + setIsLoading(false); + } + }; + + return ( + + + + Change validator + + You can use the validator of your choice by providing its RPC URL address + + + Turn Off + + Turn On + + + + + + {customValidatorEnabled ? ( + + + setValidatorUrlInput(e.target.value)} + error={false} + InputLabelProps={{ shrink: true }} + fullWidth + disabled={!customValidatorEnabled} + autoFocus + /> + + + + ) : ( + + Default validator address + {defaultValidatorUrl} + + )} + + + + ); +}; + +export default SelectValidator; diff --git a/nym-wallet/src/context/bonding.tsx b/nym-wallet/src/context/bonding.tsx index 4e17da9066..181f531a1e 100644 --- a/nym-wallet/src/context/bonding.tsx +++ b/nym-wallet/src/context/bonding.tsx @@ -57,6 +57,8 @@ import { import { useCheckOwnership } from '../hooks/useCheckOwnership'; import { AppContext } from './main'; import { + fireRequests, + TauriReq, attachDefaultOperatingCost, decCoinToDisplay, toPercentFloatString, @@ -162,12 +164,6 @@ export const BondingContext = createContext({ isVestingAccount: false, }); -type TauriReq Promise)> = { - name: Req['name']; - request: () => ReturnType; - onFulfilled: (value: Awaited>) => void; -}; - export const BondingContextProvider: FCWithChildren = ({ children }): JSX.Element => { const [isLoading, setIsLoading] = useState(false); const [error, setError] = useState(); @@ -192,19 +188,6 @@ export const BondingContextProvider: FCWithChildren = ({ children }): JSX.Elemen setBondedNode(undefined); }; - const fireRequests = async (reqs: TauriReq[]) => { - const promises = await Promise.allSettled(reqs.map((r) => r.request())); - - promises.forEach((res, index) => { - if (res.status === 'rejected') { - Console.warn(`${reqs[index].name} request fails`, res.reason); - } - if (res.status === 'fulfilled') { - reqs[index].onFulfilled(res.value as any); - } - }); - }; - /** * Fetch mixnode **optional** data. * ⚠ The underlying queries are allowed to fail. diff --git a/nym-wallet/src/pages/settings/AdvancedSettings.tsx b/nym-wallet/src/pages/settings/AdvancedSettings.tsx index fd403a6166..76ec15c967 100644 --- a/nym-wallet/src/pages/settings/AdvancedSettings.tsx +++ b/nym-wallet/src/pages/settings/AdvancedSettings.tsx @@ -3,6 +3,7 @@ import { Box, Button, Divider, Stack, Typography } from '@mui/material'; import { helpLogToggleWindow } from '../../requests'; import { AppContext } from '../../context'; import { config } from '../../config'; +import SelectValidator from '../../components/Settings/SelectValidator'; const AdvancedSettings = () => { const { handleShowTerminal, appEnv } = useContext(AppContext); @@ -40,6 +41,8 @@ const AdvancedSettings = () => { + + ); }; diff --git a/nym-wallet/src/requests/network.ts b/nym-wallet/src/requests/network.ts index 931aa6a9e9..32380e924f 100644 --- a/nym-wallet/src/requests/network.ts +++ b/nym-wallet/src/requests/network.ts @@ -3,3 +3,14 @@ import { Network } from 'src/types'; import { invokeWrapper } from './wrapper'; export const selectNetwork = async (network: Network) => invokeWrapper('switch_network', { network }); + +export const getSelectedValidatorUrl = async (network: Network) => + invokeWrapper('get_selected_nyxd_url', { network }); + +export const getDefaultValidatorUrl = async (network: Network) => + invokeWrapper('get_default_nyxd_url', { network }); + +export const setSelectedValidatorUrl = async (args: { network: Network; url: string }) => + invokeWrapper('select_nyxd_url', args); + +export const resetValidatorUrl = async (network: Network) => invokeWrapper('reset_nyxd_url', { network }); diff --git a/nym-wallet/src/utils/fireRequests.ts b/nym-wallet/src/utils/fireRequests.ts new file mode 100644 index 0000000000..23117e13eb --- /dev/null +++ b/nym-wallet/src/utils/fireRequests.ts @@ -0,0 +1,22 @@ +import { Console } from 'src/utils/console'; + +export type TauriReq Promise)> = { + name: Req['name']; + request: () => ReturnType; + onFulfilled: (value: Awaited>) => void; +}; + +async function fireRequests(requests: TauriReq[]) { + const promises = await Promise.allSettled(requests.map((r) => r.request())); + + promises.forEach((res, index) => { + if (res.status === 'rejected') { + Console.warn(`${requests[index].name} request fails`, res.reason); + } + if (res.status === 'fulfilled') { + requests[index].onFulfilled(res.value as any); + } + }); +} + +export default fireRequests; diff --git a/nym-wallet/src/utils/index.ts b/nym-wallet/src/utils/index.ts index 28192993dc..1f713a7b1d 100644 --- a/nym-wallet/src/utils/index.ts +++ b/nym-wallet/src/utils/index.ts @@ -228,3 +228,6 @@ export const getIntervalAsDate = async () => { return { nextEpoch, nextInterval }; }; + +export * from './fireRequests'; +export { default as fireRequests } from './fireRequests'; From 77e0c6425efcbbc28624f96bf583fbb89992861f Mon Sep 17 00:00:00 2001 From: mx Date: Tue, 16 May 2023 09:54:40 +0200 Subject: [PATCH 03/10] * updated validator go version + added link to precompiled binaries * general version bump --- documentation/docs/book.toml | 8 ++++---- documentation/docs/src/nodes/validator-setup.md | 9 ++++++--- 2 files changed, 10 insertions(+), 7 deletions(-) diff --git a/documentation/docs/book.toml b/documentation/docs/book.toml index cba1d3a611..05ec0148f3 100644 --- a/documentation/docs/book.toml +++ b/documentation/docs/book.toml @@ -1,5 +1,5 @@ [book] -title = "Nym Docs v1.1.18" +title = "Nym Docs v1.1.19" authors = ["Max Hampshire"] description = "Nym technical documentation" language = "en" @@ -48,9 +48,9 @@ assets_version = "2.0.0" # do not edit: managed by `mdbook-admonish install` # https://gitlab.com/tglman/mdbook-variables/ [preprocessor.variables.variables] minimum_rust_version = "1.66" -platform_release_version = "v1.1.18" -upcoming_platform_release_version = "v1.1.19" # to use in 'edit page on github' plugin (coming soon) -mix_node_release_version = "v1.1.19" +platform_release_version = "v1.1.19" +upcoming_platform_release_version = "v1.1.20" # to use in 'edit page on github' plugin (coming soon) +mix_node_release_version = "v1.1.20" [preprocessor.last-changed] command = "mdbook-last-changed" diff --git a/documentation/docs/src/nodes/validator-setup.md b/documentation/docs/src/nodes/validator-setup.md index 3e6812b88a..2d45563222 100644 --- a/documentation/docs/src/nodes/validator-setup.md +++ b/documentation/docs/src/nodes/validator-setup.md @@ -27,7 +27,7 @@ pacman -S git gcc jq sudo rm -rf /usr/local/go # Install correct Go version -curl https://dl.google.com/go/go1.19.2.linux-amd64.tar.gz | sudo tar -C/usr/local -zxvf - +curl https://dl.google.com/go/go1.20.4.linux-amd64.tar.gz | sudo tar -C/usr/local -zxvf - # Update environment variables to include go cat <<'EOF' >>$HOME/.profile @@ -44,10 +44,13 @@ Verify `Go` is installed with: ``` go version # Should return something like: -go version go1.19.2 linux/amd64 +go version go1.20.4 linux/amd64 ``` -### Compiling your validator binary +### Download a precompiled validator binary +You can find pre-compiled binaries for Ubuntu `22.04` and `20.04` [here](https://github.com/nymtech/nyxd/releases). + +### Manually compiling your validator binary The codebase for the Nyx validators can be found [here](https://github.com/nymtech/nyxd). The validator binary can be compiled by running the following commands: From 86755aa6ba566d9d30383062d459bbccb87a3d20 Mon Sep 17 00:00:00 2001 From: mx Date: Tue, 16 May 2023 10:00:01 +0200 Subject: [PATCH 04/10] updated admonishments for uniformity --- documentation/docs/src/nodes/validator-setup.md | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/documentation/docs/src/nodes/validator-setup.md b/documentation/docs/src/nodes/validator-setup.md index 2d45563222..ea341627ba 100644 --- a/documentation/docs/src/nodes/validator-setup.md +++ b/documentation/docs/src/nodes/validator-setup.md @@ -50,6 +50,10 @@ go version go1.20.4 linux/amd64 ### Download a precompiled validator binary You can find pre-compiled binaries for Ubuntu `22.04` and `20.04` [here](https://github.com/nymtech/nyxd/releases). +```admonish caution title="" +Binaries for both Mainnet and Sandbox testnet can be found in each release - make sure to download the correct binary to avoid `bech32Prefix` mismatches. +``` + ### Manually compiling your validator binary The codebase for the Nyx validators can be found [here](https://github.com/nymtech/nyxd). @@ -75,7 +79,7 @@ You should see help text print out. The `nyxd` binary and the `libwasmvm.so` shared object library binary have been compiled. `libwasmvm.so` is the wasm virtual machine which is needed to execute smart contracts. -```admonish caution +```admonish caution title="" If you have compiled these files locally you need to upload both of them to the server on which the validator will run. **If you have instead compiled them on the server skip to the step outlining setting `LD_LIBRARY PATH` below.** ``` @@ -135,7 +139,7 @@ nyxd init --chain-id=nyx nyxd init --chain-id=sandbox ``` -```admonish caution +```admonish caution title="" `init` generates `priv_validator_key.json` and `node_key.json`. If you have already set up a validator on a network, **make sure to back up the key located at** @@ -269,7 +273,7 @@ If you wish to sync from a snapshot or via state-sync please check out the Polka > If you are having trouble upgrading your validator binary, try replacing (or re-compile) the `libwasmvm.so` file and replace it on your validator server. -```admonish caution +```admonish caution title="" When joining consensus, make sure that you do not disrupt (or worse - halt) the network by coming in with a disproportionately large amount of staked tokens. Please initially stake a small amount of tokens compared to existing validators, then delegate to yourself in tranches over time. @@ -432,7 +436,7 @@ sudo apt install certbot nginx python3 certbot --nginx -d nym-validator.yourdomain.com -m you@yourdomain.com --agree-tos --noninteractive --redirect ``` -```admonish caution +```admonish caution title="" If using a VPS running Ubuntu 20: replace `certbot nginx python3` with `python3-certbot-nginx` ``` From e8a026ef0baa9f482451fa5cbb2e19a24ec36db7 Mon Sep 17 00:00:00 2001 From: mx Date: Tue, 16 May 2023 10:02:39 +0200 Subject: [PATCH 05/10] updated sandbox peer --- documentation/docs/src/nodes/validator-setup.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/documentation/docs/src/nodes/validator-setup.md b/documentation/docs/src/nodes/validator-setup.md index ea341627ba..b2c1d9c8c3 100644 --- a/documentation/docs/src/nodes/validator-setup.md +++ b/documentation/docs/src/nodes/validator-setup.md @@ -175,7 +175,7 @@ laddr = "tcp://0.0.0.0:26656" ``` # Sandbox testnet cors_allowed_origins = ["*"] -persistent_peers = "8421c0a3d90d490e27e8061f2abcb1276c8358b6@sandbox-validator1.nymtech.net:26656" +persistent_peers = "8421c0a3d90d490e27e8061f2abcb1276c8358b6@sandbox-validator1.nymtech.net:26666" create_empty_blocks = false laddr = "tcp://0.0.0.0:26656" ``` From 9bd03af3e9fa57cd0778aed3c1cc8d4c96272a80 Mon Sep 17 00:00:00 2001 From: mx Date: Tue, 16 May 2023 10:14:27 +0200 Subject: [PATCH 06/10] version bump --- documentation/dev-portal/book.toml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/documentation/dev-portal/book.toml b/documentation/dev-portal/book.toml index ea3865b4e0..258ad6deb2 100644 --- a/documentation/dev-portal/book.toml +++ b/documentation/dev-portal/book.toml @@ -49,9 +49,9 @@ assets_version = "2.0.0" # do not edit: managed by `mdbook-admonish install` [preprocessor.variables.variables] # code prerequisites versions minimum_rust_version = "1.66" -platform_release_version = "v1.1.18" -upcoming_platform_release_version = "v1.1.19" # to use when adding 'edit on github' plugin -mix_node_release_version = "v1.1.19" +platform_release_version = "v1.1.19" +upcoming_platform_release_version = "v1.1.20" # to use when adding 'edit on github' plugin +mix_node_release_version = "v1.1.20" # [preprocessor.last-changed] command = "mdbook-last-changed" From e5db7cb915474e15c72971a50bce3e153d27d058 Mon Sep 17 00:00:00 2001 From: farbanas Date: Tue, 16 May 2023 10:30:06 +0200 Subject: [PATCH 07/10] update changelog for release v1.1.19 --- CHANGELOG.md | 12 ++++++++++++ clients/native/Cargo.toml | 2 +- clients/socks5/Cargo.toml | 2 +- explorer-api/Cargo.toml | 2 +- gateway/Cargo.toml | 2 +- mixnode/Cargo.toml | 2 +- nym-api/Cargo.toml | 2 +- nym-wallet/CHANGELOG.md | 6 ++++++ nym-wallet/package.json | 2 +- nym-wallet/src-tauri/Cargo.toml | 2 +- nym-wallet/src-tauri/tauri.conf.json | 2 +- service-providers/network-requester/Cargo.toml | 2 +- service-providers/network-statistics/Cargo.toml | 2 +- tools/nym-cli/Cargo.toml | 2 +- 14 files changed, 30 insertions(+), 12 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 4eadc86b07..b5feedc758 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,18 @@ Post 1.0.0 release, the changelog format is based on [Keep a Changelog](https:// ## [Unreleased] +## [v1.1.19] (2023-05-16) + +- nym-name-service endpoint in nym-api ([#3403]) +- Implement key storage for WASM client using IndexedDB (for browser) ([#3329]) +- Initial version of nym-name-service contract providing name aliases for nym-addresses ([#3274]) +- Update Cargo.lock ([#3410]) + +[#3403]: https://github.com/nymtech/nym/issues/3403 +[#3329]: https://github.com/nymtech/nym/issues/3329 +[#3274]: https://github.com/nymtech/nym/issues/3274 +[#3410]: https://github.com/nymtech/nym/pull/3410 + ## [v1.1.18] (2023-05-09) - Implement heartbeat messages between socks5 proxy and network requester ([#3215]) diff --git a/clients/native/Cargo.toml b/clients/native/Cargo.toml index cb170492d0..90aa3e2c66 100644 --- a/clients/native/Cargo.toml +++ b/clients/native/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "nym-client" -version = "1.1.18" +version = "1.1.19" authors = ["Dave Hrycyszyn ", "Jędrzej Stuczyński "] description = "Implementation of the Nym Client" edition = "2021" diff --git a/clients/socks5/Cargo.toml b/clients/socks5/Cargo.toml index a984c08684..152f5a23fa 100644 --- a/clients/socks5/Cargo.toml +++ b/clients/socks5/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "nym-socks5-client" -version = "1.1.18" +version = "1.1.19" authors = ["Dave Hrycyszyn "] description = "A SOCKS5 localhost proxy that converts incoming messages to Sphinx and sends them to a Nym address" edition = "2021" diff --git a/explorer-api/Cargo.toml b/explorer-api/Cargo.toml index 6f1ed90643..d85c7e90bf 100644 --- a/explorer-api/Cargo.toml +++ b/explorer-api/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "explorer-api" -version = "1.1.18" +version = "1.1.19" edition = "2021" # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html diff --git a/gateway/Cargo.toml b/gateway/Cargo.toml index 5e72fe702d..1c420d372d 100644 --- a/gateway/Cargo.toml +++ b/gateway/Cargo.toml @@ -3,7 +3,7 @@ [package] name = "nym-gateway" -version = "1.1.18" +version = "1.1.19" authors = [ "Dave Hrycyszyn ", "Jędrzej Stuczyński ", diff --git a/mixnode/Cargo.toml b/mixnode/Cargo.toml index 4fd3bfca6b..5f3da88b7f 100644 --- a/mixnode/Cargo.toml +++ b/mixnode/Cargo.toml @@ -3,7 +3,7 @@ [package] name = "nym-mixnode" -version = "1.1.19" +version = "1.1.20" authors = [ "Dave Hrycyszyn ", "Jędrzej Stuczyński ", diff --git a/nym-api/Cargo.toml b/nym-api/Cargo.toml index 5c135305ba..199b8a9e8c 100644 --- a/nym-api/Cargo.toml +++ b/nym-api/Cargo.toml @@ -3,7 +3,7 @@ [package] name = "nym-api" -version = "1.1.19" +version = "1.1.20" authors = [ "Dave Hrycyszyn ", "Jędrzej Stuczyński ", diff --git a/nym-wallet/CHANGELOG.md b/nym-wallet/CHANGELOG.md index a7609912e7..f4474e774c 100644 --- a/nym-wallet/CHANGELOG.md +++ b/nym-wallet/CHANGELOG.md @@ -2,6 +2,12 @@ ## [Unreleased] +## [v1.2.3] (2023-05-16) + +- Wallet - Allow users to choose validator under the Advanced Settings 🟢 ([#2489]) + +[#2489]: https://github.com/nymtech/nym/issues/2489 + ## [v1.2.2] (2023-05-02) - Wallet - change "Bond more" action to "Change bond amount" to allow for increasing and decreasing the amount in the same modal ([#2134]) diff --git a/nym-wallet/package.json b/nym-wallet/package.json index 488af14323..b2eff151d8 100644 --- a/nym-wallet/package.json +++ b/nym-wallet/package.json @@ -1,6 +1,6 @@ { "name": "@nymproject/nym-wallet-app", - "version": "1.2.2", + "version": "1.2.3", "main": "index.js", "license": "MIT", "scripts": { diff --git a/nym-wallet/src-tauri/Cargo.toml b/nym-wallet/src-tauri/Cargo.toml index c6e7a2ddf0..fbf5b0b6cd 100644 --- a/nym-wallet/src-tauri/Cargo.toml +++ b/nym-wallet/src-tauri/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "nym_wallet" -version = "1.2.2" +version = "1.2.3" description = "Nym Native Wallet" authors = ["Nym Technologies SA"] license = "" diff --git a/nym-wallet/src-tauri/tauri.conf.json b/nym-wallet/src-tauri/tauri.conf.json index e7a9b27382..d9c8717ac3 100644 --- a/nym-wallet/src-tauri/tauri.conf.json +++ b/nym-wallet/src-tauri/tauri.conf.json @@ -1,7 +1,7 @@ { "package": { "productName": "nym-wallet", - "version": "1.2.2" + "version": "1.2.3" }, "build": { "distDir": "../dist", diff --git a/service-providers/network-requester/Cargo.toml b/service-providers/network-requester/Cargo.toml index 9a71189a6c..0ca9f50631 100644 --- a/service-providers/network-requester/Cargo.toml +++ b/service-providers/network-requester/Cargo.toml @@ -3,7 +3,7 @@ [package] name = "nym-network-requester" -version = "1.1.18" +version = "1.1.19" authors.workspace = true edition.workspace = true rust-version = "1.65" diff --git a/service-providers/network-statistics/Cargo.toml b/service-providers/network-statistics/Cargo.toml index f12245cfab..75bf5522d0 100644 --- a/service-providers/network-statistics/Cargo.toml +++ b/service-providers/network-statistics/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "nym-network-statistics" -version = "1.1.18" +version = "1.1.19" edition = "2021" # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html diff --git a/tools/nym-cli/Cargo.toml b/tools/nym-cli/Cargo.toml index ce28faae85..b0e4bd84d7 100644 --- a/tools/nym-cli/Cargo.toml +++ b/tools/nym-cli/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "nym-cli" -version = "1.1.18" +version = "1.1.19" authors.workspace = true edition = "2021" From 8e021a44198fff9da1cea8c2c4a6d16082d7bf8b Mon Sep 17 00:00:00 2001 From: farbanas Date: Tue, 16 May 2023 10:33:04 +0200 Subject: [PATCH 08/10] update Cargo.lock --- Cargo.lock | 18 +++++++++--------- nym-wallet/Cargo.lock | 2 +- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 72ad7ad052..42a04227bd 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1640,7 +1640,7 @@ checksum = "0206175f82b8d6bf6652ff7d71a1e27fd2e4efde587fd368662814d6ec1d9ce0" [[package]] name = "explorer-api" -version = "1.1.18" +version = "1.1.19" dependencies = [ "chrono", "clap 4.2.7", @@ -3069,7 +3069,7 @@ dependencies = [ [[package]] name = "nym-api" -version = "1.1.19" +version = "1.1.20" dependencies = [ "anyhow", "async-trait", @@ -3203,7 +3203,7 @@ dependencies = [ [[package]] name = "nym-cli" -version = "1.1.18" +version = "1.1.19" dependencies = [ "anyhow", "base64 0.13.1", @@ -3265,7 +3265,7 @@ dependencies = [ [[package]] name = "nym-client" -version = "1.1.18" +version = "1.1.19" dependencies = [ "clap 4.2.7", "dirs", @@ -3534,7 +3534,7 @@ dependencies = [ [[package]] name = "nym-gateway" -version = "1.1.18" +version = "1.1.19" dependencies = [ "anyhow", "async-trait", @@ -3682,7 +3682,7 @@ dependencies = [ [[package]] name = "nym-mixnode" -version = "1.1.19" +version = "1.1.20" dependencies = [ "anyhow", "bs58", @@ -3793,7 +3793,7 @@ dependencies = [ [[package]] name = "nym-network-requester" -version = "1.1.18" +version = "1.1.19" dependencies = [ "async-file-watcher", "async-trait", @@ -3835,7 +3835,7 @@ dependencies = [ [[package]] name = "nym-network-statistics" -version = "1.1.18" +version = "1.1.19" dependencies = [ "dirs", "log", @@ -3970,7 +3970,7 @@ dependencies = [ [[package]] name = "nym-socks5-client" -version = "1.1.18" +version = "1.1.19" dependencies = [ "clap 4.2.7", "lazy_static", diff --git a/nym-wallet/Cargo.lock b/nym-wallet/Cargo.lock index e3ca998572..97d71651f1 100644 --- a/nym-wallet/Cargo.lock +++ b/nym-wallet/Cargo.lock @@ -3168,7 +3168,7 @@ dependencies = [ [[package]] name = "nym_wallet" -version = "1.2.2" +version = "1.2.3" dependencies = [ "async-trait", "base64 0.13.1", From acef5a56529edb90c9932e56e2d51563556ee8e3 Mon Sep 17 00:00:00 2001 From: Tommy Verrall Date: Tue, 16 May 2023 11:22:03 +0200 Subject: [PATCH 09/10] rename package.json to prevent ci moaning --- nym-connect/mobile/package.json.bak | 119 ++++++++++++++++++++++++++++ 1 file changed, 119 insertions(+) create mode 100644 nym-connect/mobile/package.json.bak diff --git a/nym-connect/mobile/package.json.bak b/nym-connect/mobile/package.json.bak new file mode 100644 index 0000000000..20c4aceb65 --- /dev/null +++ b/nym-connect/mobile/package.json.bak @@ -0,0 +1,119 @@ +{ + "name": "@nym/nym-connect-mobile", + "version": "1.1.7", + "main": "index.js", + "license": "MIT", + "scripts": { + "prewebpack:dev": "yarn --cwd ../.. build", + "webpack:dev": "yarn webpack serve --config webpack.dev.js", + "webpack:dev:onlyThis": "yarn webpack serve --config webpack.dev.js", + "webpack:prod": "yarn webpack --progress --config webpack.prod.js", + "tauri": "tauri", + "tauri:dev:android": "WRY_ANDROID_PACKAGE=net.nymtech.nym_connect WRY_ANDROID_LIBRARY=nym_connect cargo tauri android dev", + "tauri:build:android": "WRY_ANDROID_PACKAGE=net.nymtech.nym_connect WRY_ANDROID_LIBRARY=nym_connect cargo tauri android build", + "dev:android": "run-p webpack:dev:onlyThis tauri:dev:android", + "prebuild": "yarn --cwd ../.. build", + "build:android": "run-s webpack:prod tauri:build:android", + "storybook": "start-storybook -p 6006", + "prestorybook:build": "yarn --cwd ../.. build", + "storybook:build": "build-storybook", + "tsc": "tsc --noEmit true", + "tsc:watch": "tsc --noEmit true --watch", + "lint": "eslint src", + "lint:fix": "eslint src --fix", + "test": "jest", + "test:watch": "jest --watch", + "clean:dist": "rm -rf dist", + "clean:node": "rm -rf node_modules", + "clean:rust": "cargo clean --manifest-path src-tauri/Cargo.toml", + "clean:android": "cd src-tauri/gen/android/nym_connect/ && gradlew clean", + "clean:": "run-p clean:node clean:rust clean:android" + }, + "dependencies": { + "@emotion/react": "^11.7.0", + "@emotion/styled": "^11.6.0", + "@hookform/resolvers": "^2.8.0", + "@mui/icons-material": "^5.2.0", + "@mui/material": "^5.2.2", + "@mui/styles": "^5.2.2", + "@mui/system": ">= 5", + "@mui/lab": "^5.0.0-alpha.72", + "@nymproject/react": "^1.0.0", + "@tauri-apps/api": "^2.0.0-alpha.0", + "@tauri-apps/tauri-forage": "^1.0.0-beta.2", + "clsx": "^1.1.1", + "luxon": "^2.3.0", + "pretty-bytes": "^6.0.0", + "react": "^18.2.0", + "react-dom": "^18.2.0", + "react-error-boundary": "^3.1.3", + "react-hook-form": "^7.14.2", + "react-markdown": "^8.0.4", + "react-router-dom": "^6.7.0", + "semver": "^6.3.0", + "yup": "^0.32.9" + }, + "devDependencies": { + "@babel/core": "^7.15.0", + "@babel/plugin-transform-async-to-generator": "^7.14.5", + "@babel/preset-env": "^7.15.0", + "@babel/preset-react": "^7.14.5", + "@babel/preset-typescript": "^7.15.0", + "@mdx-js/loader": "^2.1.5", + "@nymproject/eslint-config-react-typescript": "^1.0.0", + "@pmmmwh/react-refresh-webpack-plugin": "^0.5.4", + "@storybook/react": "^6.5.15", + "@svgr/webpack": "^6.1.1", + "@tauri-apps/cli": "^2.0.0-alpha.2", + "@testing-library/jest-dom": "^5.14.1", + "@testing-library/react": "^12.0.0", + "@types/jest": "^27.0.1", + "@types/luxon": "^2.3.2", + "@types/node": "^16.7.13", + "@types/react": "^18.0.26", + "@types/react-dom": "^18.0.10", + "@types/semver": "^7.3.8", + "@types/uuid": "^8.3.4", + "@typescript-eslint/eslint-plugin": "^5.13.0", + "@typescript-eslint/parser": "^5.13.0", + "babel-loader": "^8.3.0", + "babel-plugin-root-import": "^6.6.0", + "clean-webpack-plugin": "^4.0.0", + "css-loader": "^6.7.3", + "css-minimizer-webpack-plugin": "^3.0.2", + "dotenv-webpack": "^7.0.3", + "eslint": "^8.10.0", + "eslint-config-airbnb": "^19.0.4", + "eslint-config-airbnb-typescript": "^16.1.0", + "eslint-config-prettier": "^8.5.0", + "eslint-import-resolver-root-import": "^1.0.4", + "eslint-plugin-import": "^2.25.4", + "eslint-plugin-jest": "^26.1.1", + "eslint-plugin-jsx-a11y": "^6.5.1", + "eslint-plugin-prettier": "^4.0.0", + "eslint-plugin-react": "^7.29.2", + "eslint-plugin-react-hooks": "^4.3.0", + "eslint-plugin-storybook": "^0.5.12", + "file-loader": "^6.2.0", + "fork-ts-checker-webpack-plugin": "^7.2.1", + "html-webpack-plugin": "^5.3.2", + "jest": "^27.1.0", + "mini-css-extract-plugin": "^2.2.2", + "npm-run-all": "^4.1.5", + "prettier": "^2.8.7", + "react-refresh": "^0.10.0", + "react-refresh-typescript": "^2.0.2", + "style-loader": "^3.3.1", + "thread-loader": "^3.0.4", + "ts-jest": "^27.0.5", + "ts-loader": "^9.4.2", + "tsconfig-paths-webpack-plugin": "^3.5.2", + "typescript": "^4.6.2", + "url-loader": "^4.1.1", + "webpack": "^5.75.0", + "webpack-cli": "^4.8.0", + "webpack-dev-server": "^4.5.0", + "webpack-merge": "^5.8.0", + "yaml-loader": "^0.8.0" + } +} From 47d8fcb21adcaf3cebc1ed6b5431ec03d1b8039c Mon Sep 17 00:00:00 2001 From: Tommy Verrall Date: Tue, 16 May 2023 11:22:46 +0200 Subject: [PATCH 10/10] remove package.json --- nym-connect/mobile/package.json | 119 -------------------------------- 1 file changed, 119 deletions(-) delete mode 100644 nym-connect/mobile/package.json diff --git a/nym-connect/mobile/package.json b/nym-connect/mobile/package.json deleted file mode 100644 index 20c4aceb65..0000000000 --- a/nym-connect/mobile/package.json +++ /dev/null @@ -1,119 +0,0 @@ -{ - "name": "@nym/nym-connect-mobile", - "version": "1.1.7", - "main": "index.js", - "license": "MIT", - "scripts": { - "prewebpack:dev": "yarn --cwd ../.. build", - "webpack:dev": "yarn webpack serve --config webpack.dev.js", - "webpack:dev:onlyThis": "yarn webpack serve --config webpack.dev.js", - "webpack:prod": "yarn webpack --progress --config webpack.prod.js", - "tauri": "tauri", - "tauri:dev:android": "WRY_ANDROID_PACKAGE=net.nymtech.nym_connect WRY_ANDROID_LIBRARY=nym_connect cargo tauri android dev", - "tauri:build:android": "WRY_ANDROID_PACKAGE=net.nymtech.nym_connect WRY_ANDROID_LIBRARY=nym_connect cargo tauri android build", - "dev:android": "run-p webpack:dev:onlyThis tauri:dev:android", - "prebuild": "yarn --cwd ../.. build", - "build:android": "run-s webpack:prod tauri:build:android", - "storybook": "start-storybook -p 6006", - "prestorybook:build": "yarn --cwd ../.. build", - "storybook:build": "build-storybook", - "tsc": "tsc --noEmit true", - "tsc:watch": "tsc --noEmit true --watch", - "lint": "eslint src", - "lint:fix": "eslint src --fix", - "test": "jest", - "test:watch": "jest --watch", - "clean:dist": "rm -rf dist", - "clean:node": "rm -rf node_modules", - "clean:rust": "cargo clean --manifest-path src-tauri/Cargo.toml", - "clean:android": "cd src-tauri/gen/android/nym_connect/ && gradlew clean", - "clean:": "run-p clean:node clean:rust clean:android" - }, - "dependencies": { - "@emotion/react": "^11.7.0", - "@emotion/styled": "^11.6.0", - "@hookform/resolvers": "^2.8.0", - "@mui/icons-material": "^5.2.0", - "@mui/material": "^5.2.2", - "@mui/styles": "^5.2.2", - "@mui/system": ">= 5", - "@mui/lab": "^5.0.0-alpha.72", - "@nymproject/react": "^1.0.0", - "@tauri-apps/api": "^2.0.0-alpha.0", - "@tauri-apps/tauri-forage": "^1.0.0-beta.2", - "clsx": "^1.1.1", - "luxon": "^2.3.0", - "pretty-bytes": "^6.0.0", - "react": "^18.2.0", - "react-dom": "^18.2.0", - "react-error-boundary": "^3.1.3", - "react-hook-form": "^7.14.2", - "react-markdown": "^8.0.4", - "react-router-dom": "^6.7.0", - "semver": "^6.3.0", - "yup": "^0.32.9" - }, - "devDependencies": { - "@babel/core": "^7.15.0", - "@babel/plugin-transform-async-to-generator": "^7.14.5", - "@babel/preset-env": "^7.15.0", - "@babel/preset-react": "^7.14.5", - "@babel/preset-typescript": "^7.15.0", - "@mdx-js/loader": "^2.1.5", - "@nymproject/eslint-config-react-typescript": "^1.0.0", - "@pmmmwh/react-refresh-webpack-plugin": "^0.5.4", - "@storybook/react": "^6.5.15", - "@svgr/webpack": "^6.1.1", - "@tauri-apps/cli": "^2.0.0-alpha.2", - "@testing-library/jest-dom": "^5.14.1", - "@testing-library/react": "^12.0.0", - "@types/jest": "^27.0.1", - "@types/luxon": "^2.3.2", - "@types/node": "^16.7.13", - "@types/react": "^18.0.26", - "@types/react-dom": "^18.0.10", - "@types/semver": "^7.3.8", - "@types/uuid": "^8.3.4", - "@typescript-eslint/eslint-plugin": "^5.13.0", - "@typescript-eslint/parser": "^5.13.0", - "babel-loader": "^8.3.0", - "babel-plugin-root-import": "^6.6.0", - "clean-webpack-plugin": "^4.0.0", - "css-loader": "^6.7.3", - "css-minimizer-webpack-plugin": "^3.0.2", - "dotenv-webpack": "^7.0.3", - "eslint": "^8.10.0", - "eslint-config-airbnb": "^19.0.4", - "eslint-config-airbnb-typescript": "^16.1.0", - "eslint-config-prettier": "^8.5.0", - "eslint-import-resolver-root-import": "^1.0.4", - "eslint-plugin-import": "^2.25.4", - "eslint-plugin-jest": "^26.1.1", - "eslint-plugin-jsx-a11y": "^6.5.1", - "eslint-plugin-prettier": "^4.0.0", - "eslint-plugin-react": "^7.29.2", - "eslint-plugin-react-hooks": "^4.3.0", - "eslint-plugin-storybook": "^0.5.12", - "file-loader": "^6.2.0", - "fork-ts-checker-webpack-plugin": "^7.2.1", - "html-webpack-plugin": "^5.3.2", - "jest": "^27.1.0", - "mini-css-extract-plugin": "^2.2.2", - "npm-run-all": "^4.1.5", - "prettier": "^2.8.7", - "react-refresh": "^0.10.0", - "react-refresh-typescript": "^2.0.2", - "style-loader": "^3.3.1", - "thread-loader": "^3.0.4", - "ts-jest": "^27.0.5", - "ts-loader": "^9.4.2", - "tsconfig-paths-webpack-plugin": "^3.5.2", - "typescript": "^4.6.2", - "url-loader": "^4.1.1", - "webpack": "^5.75.0", - "webpack-cli": "^4.8.0", - "webpack-dev-server": "^4.5.0", - "webpack-merge": "^5.8.0", - "yaml-loader": "^0.8.0" - } -}