diff --git a/.github/workflows/ci-build.yml b/.github/workflows/ci-build.yml index 9adb0df9d8..60617c55d6 100644 --- a/.github/workflows/ci-build.yml +++ b/.github/workflows/ci-build.yml @@ -8,10 +8,13 @@ on: - 'gateway/**' - 'integrations/**' - 'nym-api/**' + - 'nym-authenticator-client/**' - 'nym-credential-proxy/**' + - 'nym-ip-packet-client/**' - 'nym-network-monitor/**' - 'nym-node/**' - 'nym-node-status-api/**' + - 'nym-registration-client/**' - 'nym-statistics-api/**' - 'nym-outfox/**' - 'nym-validator-rewarder/**' diff --git a/.github/workflows/ci-lint-typescript.yml b/.github/workflows/ci-lint-typescript.yml index b0f4907834..21066677ec 100644 --- a/.github/workflows/ci-lint-typescript.yml +++ b/.github/workflows/ci-lint-typescript.yml @@ -6,16 +6,14 @@ on: paths: - "ts-packages/**" - "sdk/typescript/**" - - "nym-connect/desktop/src/**" - - "nym-connect/desktop/package.json" - "nym-wallet/src/**" - "nym-wallet/package.json" - - "explorer/**" + - "explorer-v2/**" - ".github/workflows/ci-lint-typescript.yml" jobs: build: - runs-on: ubuntu-22.04 + runs-on: arc-linux-latest env: RUSTUP_PERMIT_COPY_RENAME: 1 steps: @@ -25,6 +23,7 @@ jobs: - uses: actions/setup-node@v4 with: node-version: 20 + - name: Setup yarn run: npm install -g yarn @@ -37,14 +36,12 @@ jobs: run: curl https://rustwasm.github.io/wasm-pack/installer/init.sh -sSf | sh - name: Install wasm-opt - uses: ./.github/actions/install-wasm-opt - with: - version: '116' + run: cargo install wasm-opt - name: Set up Go - uses: actions/setup-go@v5 + uses: actions/setup-go@v6 with: - go-version: "1.23.7" + go-version: "1.24.6" - name: Install run: yarn @@ -52,7 +49,11 @@ jobs: - name: Build packages run: yarn build:ci + - name: Install again + run: yarn + - name: Lint run: yarn lint + - name: Typecheck with tsc run: yarn tsc diff --git a/.github/workflows/ci-nym-wallet-storybook.yml b/.github/workflows/ci-nym-wallet-storybook.yml index bfdfd358b6..cb43bdd91e 100644 --- a/.github/workflows/ci-nym-wallet-storybook.yml +++ b/.github/workflows/ci-nym-wallet-storybook.yml @@ -8,7 +8,7 @@ on: jobs: build: - runs-on: custom-linux + runs-on: arc-linux-latest steps: - uses: actions/checkout@v4 diff --git a/.github/workflows/publish-sdk-npm.yml b/.github/workflows/publish-sdk-npm.yml index 173f94bcff..642737a6f8 100644 --- a/.github/workflows/publish-sdk-npm.yml +++ b/.github/workflows/publish-sdk-npm.yml @@ -4,7 +4,7 @@ on: jobs: publish: - runs-on: arc-ubuntu-22.04 + runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 @@ -17,10 +17,13 @@ jobs: - name: Setup yarn run: npm install -g yarn - - name: Install Rust stable + - name: Install rust toolchain uses: actions-rs/toolchain@v1 with: + profile: minimal toolchain: stable + override: true + components: rustfmt, clippy - name: Install wasm-pack run: curl https://rustwasm.github.io/wasm-pack/installer/init.sh -sSf | sh @@ -29,9 +32,9 @@ jobs: run: cargo install wasm-opt - name: Set up Go - uses: actions/setup-go@v5 + uses: actions/setup-go@v6 with: - go-version: "1.23.7" + go-version: "1.24.6" - name: Install dependencies run: yarn diff --git a/CHANGELOG.md b/CHANGELOG.md index 20653fe313..2033d13fe5 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,28 @@ Post 1.0.0 release, the changelog format is based on [Keep a Changelog](https:// ## [Unreleased] +## [2025.21-mozzarella] (2025-11-25) + +- [bugfix] Tunnel not waiting on MixnetClient to shut down cleanly ([#6225]) +- bugfix: fix credential proxy upgrade mode attestation url arg ([#6202]) +- HTTP API resilience enable & domain rotation conditions ([#6200]) +- Remove debug feature from http-macro spec in gateway probe ([#6195]) +- DNS relibility and troubleshooting ([#6179]) +- [bugfix] Distinguish authenticator errors by credential spent ([#6176]) +- Typescript SDK 1.4.1 ([#6146]) +- Enable URL rotation and retries for mixnet gateway init ([#6126]) +- Feature/credential proxy jwt ([#5957]) + +[#6225]: https://github.com/nymtech/nym/pull/6225 +[#6202]: https://github.com/nymtech/nym/pull/6202 +[#6200]: https://github.com/nymtech/nym/pull/6200 +[#6195]: https://github.com/nymtech/nym/pull/6195 +[#6179]: https://github.com/nymtech/nym/pull/6179 +[#6176]: https://github.com/nymtech/nym/pull/6176 +[#6146]: https://github.com/nymtech/nym/pull/6146 +[#6126]: https://github.com/nymtech/nym/pull/6126 +[#5957]: https://github.com/nymtech/nym/pull/5957 + ## [2025.20-leerdammer] (2025-11-12) - Max/tweak ts sdk actions ([#6185]) diff --git a/Cargo.lock b/Cargo.lock index 30e33a0ea3..784ed126c4 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2579,7 +2579,7 @@ dependencies = [ [[package]] name = "extension-storage" -version = "1.4.0-rc.0" +version = "1.4.1" dependencies = [ "bip39", "console_error_panic_hook", @@ -4478,7 +4478,7 @@ dependencies = [ [[package]] name = "mix-fetch-wasm" -version = "1.4.0-rc.0" +version = "1.4.1" dependencies = [ "async-trait", "futures", @@ -4488,6 +4488,7 @@ dependencies = [ "nym-ordered-buffer", "nym-service-providers-common", "nym-socks5-requests", + "nym-validator-client", "rand 0.8.5", "serde", "serde-wasm-bindgen 0.6.5", @@ -4824,7 +4825,7 @@ dependencies = [ [[package]] name = "nym-api" -version = "1.1.69" +version = "1.1.70" dependencies = [ "anyhow", "async-trait", @@ -5050,7 +5051,7 @@ dependencies = [ [[package]] name = "nym-cli" -version = "1.1.66" +version = "1.1.67" dependencies = [ "anyhow", "base64 0.22.1", @@ -5133,7 +5134,7 @@ dependencies = [ [[package]] name = "nym-client" -version = "1.1.66" +version = "1.1.67" dependencies = [ "bs58", "clap", @@ -5283,7 +5284,7 @@ dependencies = [ [[package]] name = "nym-client-wasm" -version = "1.4.0-rc.0" +version = "1.4.1" dependencies = [ "anyhow", "futures", @@ -5462,8 +5463,11 @@ dependencies = [ "nym-crypto", "nym-ecash-contract-common", "nym-ecash-signer-check", + "nym-http-api-client", "nym-http-api-common", "nym-network-defaults", + "nym-pemstore", + "nym-upgrade-mode-check", "nym-validator-client", "rand 0.8.5", "reqwest 0.12.22", @@ -5534,6 +5538,7 @@ dependencies = [ "nym-http-api-client", "nym-http-api-common", "nym-serde-helpers", + "nym-upgrade-mode-check", "reqwest 0.12.22", "schemars 0.8.22", "serde", @@ -5661,6 +5666,7 @@ dependencies = [ "aead", "aes", "aes-gcm-siv", + "anyhow", "base64 0.22.1", "blake3", "bs58", @@ -5674,10 +5680,12 @@ dependencies = [ "jwt-simple", "nym-pemstore", "nym-sphinx-types", + "nym-test-utils", "rand 0.8.5", "rand_chacha 0.3.1", "serde", "serde_bytes", + "serde_json", "sha2 0.10.9", "subtle-encoding", "thiserror 2.0.12", @@ -6050,6 +6058,7 @@ dependencies = [ "thiserror 2.0.12", "tokio", "tracing", + "tracing-subscriber", "url", "wasmtimer", ] @@ -6354,7 +6363,7 @@ dependencies = [ [[package]] name = "nym-network-requester" -version = "1.1.67" +version = "1.1.68" dependencies = [ "addr", "anyhow", @@ -6404,7 +6413,7 @@ dependencies = [ [[package]] name = "nym-node" -version = "1.21.0" +version = "1.22.0" dependencies = [ "anyhow", "arc-swap", @@ -6642,7 +6651,7 @@ dependencies = [ [[package]] name = "nym-node-tester-wasm" -version = "1.3.0-rc.0" +version = "1.3.1" dependencies = [ "futures", "js-sys", @@ -6931,7 +6940,7 @@ dependencies = [ [[package]] name = "nym-socks5-client" -version = "1.1.66" +version = "1.1.67" dependencies = [ "bs58", "clap", @@ -7378,12 +7387,14 @@ dependencies = [ "jwt-simple", "nym-crypto", "nym-http-api-client", + "nym-test-utils", "reqwest 0.12.22", "serde", "serde_json", "thiserror 2.0.12", "time", "tracing", + "utoipa", ] [[package]] @@ -7670,7 +7681,7 @@ dependencies = [ [[package]] name = "nymvisor" -version = "0.1.31" +version = "0.1.32" dependencies = [ "anyhow", "bytes", @@ -7824,9 +7835,9 @@ checksum = "d05e27ee213611ffe7d6348b942e8f942b37114c00cc03cec254295a4a17852e" [[package]] name = "openssl-sys" -version = "0.9.109" +version = "0.9.110" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "90096e2e47630d78b7d1c20952dc621f957103f8bc2c8359ec81290d75238571" +checksum = "0a9f0075ba3c21b09f8e8b2026584b1d18d49388648f2fbbf3c97ea8deced8e2" dependencies = [ "cc", "libc", diff --git a/Cargo.toml b/Cargo.toml index c125c58216..c07db1f4ba 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -150,7 +150,7 @@ members = [ "tools/internal/contract-state-importer/importer-cli", "tools/internal/contract-state-importer/importer-contract", "tools/internal/mixnet-connectivity-check", - # "tools/internal/sdk-version-bump", +# "tools/internal/sdk-version-bump", "tools/internal/ssl-inject", "tools/internal/testnet-manager", "tools/internal/testnet-manager/dkg-bypass-contract", @@ -453,6 +453,11 @@ opt-level = 'z' unexpected_cfgs = { level = "warn", check-cfg = ['cfg(tokio_unstable)'] } [workspace.lints.clippy] +suspicious = "deny" +complexity = "deny" +perf = "deny" +style = "deny" + unwrap_used = "deny" expect_used = "deny" todo = "deny" diff --git a/Makefile b/Makefile index a2a7562c54..eb58f2ab5c 100644 --- a/Makefile +++ b/Makefile @@ -107,16 +107,16 @@ sdk-wasm-build: $(MAKE) -C nym-browser-extension/storage wasm-pack $(MAKE) -C wasm/client $(MAKE) -C wasm/node-tester - # $(MAKE) -C wasm/mix-fetch + $(MAKE) -C wasm/mix-fetch $(MAKE) -C wasm/zknym-lib # $(MAKE) -C wasm/full-nym-wasm # run this from npm/yarn to ensure tools are in the path, e.g. yarn build:sdk from root of repo sdk-typescript-build: npx lerna run --scope @nymproject/sdk build --stream - # npx lerna run --scope @nymproject/mix-fetch build --stream - # npx lerna run --scope @nymproject/node-tester build --stream - # yarn --cwd sdk/typescript/codegen/contract-clients build + npx lerna run --scope @nymproject/mix-fetch build --stream + npx lerna run --scope @nymproject/node-tester build --stream + yarn --cwd sdk/typescript/codegen/contract-clients build # NOTE: These targets are part of the main workspace (but not as wasm32-unknown-unknown) WASM_CRATES = extension-storage nym-client-wasm nym-node-tester-wasm zknym-lib diff --git a/clients/native/Cargo.toml b/clients/native/Cargo.toml index 3b23db96b3..e53458609b 100644 --- a/clients/native/Cargo.toml +++ b/clients/native/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "nym-client" -version = "1.1.66" +version = "1.1.67" 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 a4e1b2d6b4..91d6591411 100644 --- a/clients/socks5/Cargo.toml +++ b/clients/socks5/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "nym-socks5-client" -version = "1.1.66" +version = "1.1.67" 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/common/client-core/src/error.rs b/common/client-core/src/error.rs index dc6e4fc1b2..eea24910d0 100644 --- a/common/client-core/src/error.rs +++ b/common/client-core/src/error.rs @@ -45,7 +45,7 @@ pub enum ClientCoreError { #[cfg(not(target_arch = "wasm32"))] #[error("resolution failed: {0}")] - ResolutionFailed(#[from] nym_http_api_client::HickoryDnsError), + ResolutionFailed(#[from] nym_http_api_client::ResolveError), #[error("no gateways on network")] NoGatewaysOnNetwork, diff --git a/common/client-core/src/init/websockets.rs b/common/client-core/src/init/websockets.rs index 6d09a325b0..ba407623a6 100644 --- a/common/client-core/src/init/websockets.rs +++ b/common/client-core/src/init/websockets.rs @@ -30,7 +30,6 @@ pub(crate) async fn connect_async( resolver .resolve_str(domain) .await? - .into_iter() .map(|a| SocketAddr::new(a, port)) .collect() } diff --git a/common/client-libs/gateway-client/src/client/websockets.rs b/common/client-libs/gateway-client/src/client/websockets.rs index 9b04c9e028..2336549d5e 100644 --- a/common/client-libs/gateway-client/src/client/websockets.rs +++ b/common/client-libs/gateway-client/src/client/websockets.rs @@ -39,7 +39,6 @@ pub(crate) async fn connect_async( resolver .resolve_str(domain) .await? - .into_iter() .map(|a| SocketAddr::new(a, port)) .collect() } diff --git a/common/client-libs/gateway-client/src/error.rs b/common/client-libs/gateway-client/src/error.rs index 8766f9f5a6..eaea37c586 100644 --- a/common/client-libs/gateway-client/src/error.rs +++ b/common/client-libs/gateway-client/src/error.rs @@ -54,7 +54,7 @@ pub enum GatewayClientError { #[cfg(not(target_arch = "wasm32"))] #[error("resolution failed: {0}")] - ResolutionFailed(#[from] nym_http_api_client::HickoryDnsError), + ResolutionFailed(#[from] nym_http_api_client::ResolveError), #[error("No shared key was provided or obtained")] NoSharedKeyAvailable, diff --git a/common/credential-proxy/build.rs b/common/credential-proxy/build.rs index bedf911da7..6e29ca0430 100644 --- a/common/credential-proxy/build.rs +++ b/common/credential-proxy/build.rs @@ -8,7 +8,7 @@ async fn main() -> anyhow::Result<()> { use sqlx::{Connection, SqliteConnection}; use std::env; - let out_dir = env::var("OUT_DIR")?; + let out_dir = env::var("OUT_DIR").context("missing OUT_DIR env variable")?; let database_path = format!("{out_dir}/nym-credential-proxy-example.sqlite"); // remove the db file if it already existed from previous build diff --git a/common/credential-proxy/src/error.rs b/common/credential-proxy/src/error.rs index 8db781da1e..d6e3e8d28f 100644 --- a/common/credential-proxy/src/error.rs +++ b/common/credential-proxy/src/error.rs @@ -127,6 +127,13 @@ pub enum CredentialProxyError { #[error("failed to create deposit")] DepositFailure, + #[error("failed to load jwt signing key from {path}: {err}")] + JWTSigningKeyLoadFailure { + path: String, + #[source] + err: std::io::Error, + }, + #[error("can't obtain sufficient number of credential shares due to unavailable quorum")] UnavailableSigningQuorum, @@ -161,6 +168,14 @@ pub enum CredentialProxyError { device_id: String, credential_id: String, }, + + #[error( + "the attestation check url has not been provided through either the CLI nor the default .env config" + )] + AttestationCheckUrlNotSet, + + #[error("the provided attestation check url is malformed: {source}")] + MalformedAttestationCheckUrl { source: url::ParseError }, } impl From for CredentialProxyError { diff --git a/common/credential-proxy/src/ticketbook_manager/ticketbook_handlers.rs b/common/credential-proxy/src/ticketbook_manager/ticketbook_handlers.rs index bcfd4c3e9d..8eb4f6bbae 100644 --- a/common/credential-proxy/src/ticketbook_manager/ticketbook_handlers.rs +++ b/common/credential-proxy/src/ticketbook_manager/ticketbook_handlers.rs @@ -7,9 +7,9 @@ use crate::ticketbook_manager::TicketbookManager; use nym_compact_ecash::Base58; use nym_credential_proxy_requests::api::v1::ticketbook::models::{ CurrentEpochResponse, DepositResponse, GlobalDataParams, MasterVerificationKeyResponse, - PartialVerificationKey, PartialVerificationKeysResponse, TicketbookAsyncRequest, - TicketbookObtainParams, TicketbookRequest, TicketbookWalletSharesAsyncResponse, - TicketbookWalletSharesResponse, + ObtainTicketBookSharesAsyncResponse, PartialVerificationKey, PartialVerificationKeysResponse, + TicketbookAsyncRequest, TicketbookObtainParams, TicketbookRequest, + TicketbookWalletSharesAsyncResponse, TicketbookWalletSharesResponse, }; use time::OffsetDateTime; use tracing::{Instrument, Level, error, info, span, warn}; @@ -65,7 +65,7 @@ impl TicketbookManager { uuid: Uuid, request: TicketbookAsyncRequest, params: TicketbookObtainParams, - ) -> Result { + ) -> Result { let requested_on = OffsetDateTime::now_utc(); let span = span!(Level::INFO, "[async] obtain ticketboook", uuid = %uuid); async move { @@ -110,7 +110,7 @@ impl TicketbookManager { } // 4. in the meantime, return the id to the user - Ok(TicketbookWalletSharesAsyncResponse { id, uuid }) + Ok(TicketbookWalletSharesAsyncResponse { id, uuid }.into()) } .instrument(span) .await diff --git a/common/crypto/Cargo.toml b/common/crypto/Cargo.toml index 96549a448d..37a1e317e5 100644 --- a/common/crypto/Cargo.toml +++ b/common/crypto/Cargo.toml @@ -36,7 +36,11 @@ nym-sphinx-types = { path = "../nymsphinx/types", version = "0.2.0", default-fea nym-pemstore = { path = "../../common/pemstore", version = "0.3.0" } [dev-dependencies] +anyhow = { workspace = true } rand_chacha = { workspace = true } +serde_json = { workspace = true } +nym-test-utils = { path = "../test-utils" } + [features] default = [] diff --git a/common/crypto/src/asymmetric/ed25519/serde_helpers.rs b/common/crypto/src/asymmetric/ed25519/serde_helpers.rs index 51a0ac2dfe..6fbc6f3cf7 100644 --- a/common/crypto/src/asymmetric/ed25519/serde_helpers.rs +++ b/common/crypto/src/asymmetric/ed25519/serde_helpers.rs @@ -17,6 +17,51 @@ pub mod bs58_ed25519_pubkey { } } +pub mod vec_bs58_ed25519_pubkey { + use super::*; + use serde::{Deserialize, Deserializer, Serializer, ser::SerializeSeq}; + + pub fn serialize( + keys: &Vec, + serializer: S, + ) -> Result { + let mut seq = serializer.serialize_seq(Some(keys.len()))?; + for key in keys { + seq.serialize_element(&Bs58KeyWrapper(*key))?; + } + seq.end() + } + + pub fn deserialize<'de, D: Deserializer<'de>>( + deserializer: D, + ) -> Result, D::Error> { + let wrapped = Vec::::deserialize(deserializer)?; + Ok(wrapped.into_iter().map(|k| k.0).collect()) + } + + struct Bs58KeyWrapper(PublicKey); + + impl serde::Serialize for Bs58KeyWrapper { + fn serialize(&self, serializer: S) -> Result + where + S: Serializer, + { + bs58_ed25519_pubkey::serialize(&self.0, serializer) + } + } + + impl<'de> Deserialize<'de> for Bs58KeyWrapper { + fn deserialize(deserializer: D) -> Result + where + D: Deserializer<'de>, + { + Ok(Bs58KeyWrapper(bs58_ed25519_pubkey::deserialize( + deserializer, + )?)) + } + } +} + pub mod bs58_ed25519_signature { use crate::asymmetric::ed25519::Signature; use serde::{Deserialize, Deserializer, Serializer}; @@ -33,3 +78,53 @@ pub mod bs58_ed25519_signature { Signature::from_base58_string(s).map_err(serde::de::Error::custom) } } + +#[cfg(test)] +mod tests { + use super::*; + use jwt_simple::reexports::{anyhow, serde_json}; + use nym_test_utils::helpers::deterministic_rng; + use serde::{Deserialize, Serialize}; + + #[test] + fn vec_bs58_ed25519_pubkey_json() -> anyhow::Result<()> { + #[derive(Serialize, Deserialize, Debug, PartialEq)] + struct KeysWrapper(#[serde(with = "vec_bs58_ed25519_pubkey")] Vec); + + use crate::asymmetric::ed25519; + let mut rng = deterministic_rng(); + let empty = KeysWrapper(vec![]); + let single_key = KeysWrapper(vec![PublicKey::from_base58_string( + "Be9wH7xuXBRJAuV1pC7MALZv6a61RvWQ3SypsNarqTt", + )?]); + let three_keys = KeysWrapper(vec![ + ed25519::KeyPair::new(&mut rng).public_key, + ed25519::KeyPair::new(&mut rng).public_key, + ed25519::KeyPair::new(&mut rng).public_key, + ]); + + let se_empty = serde_json::to_string(&empty)?; + let se_single_key = serde_json::to_string(&single_key)?; + let se_three_keys = serde_json::to_string(&three_keys)?; + + assert_eq!(se_empty, r#"[]"#); + assert_eq!( + se_single_key, + r#"["Be9wH7xuXBRJAuV1pC7MALZv6a61RvWQ3SypsNarqTt"]"# + ); + assert_eq!( + se_three_keys, + r#"["HmgHDV79LpnEaSUp8QZQwSroxVvS4RewF7yM9e7qu8y3","311xRh859qCd5MVqoPRCoNx26eYhLknGwtjzkkTJFGhf","A5BMp8WJ6Uk91U4JpWRv2Bc6X35AaRaSEy8QEWeAkaBv"]"# + ); + + let empty_de = serde_json::from_str::(&se_empty)?; + let single_key_de = serde_json::from_str::(&se_single_key)?; + let three_keys_de = serde_json::from_str::(&se_three_keys)?; + + assert_eq!(empty, empty_de); + assert_eq!(single_key, single_key_de); + assert_eq!(three_keys, three_keys_de); + + Ok(()) + } +} diff --git a/common/http-api-client/Cargo.toml b/common/http-api-client/Cargo.toml index 35da8e0e11..e748e37888 100644 --- a/common/http-api-client/Cargo.toml +++ b/common/http-api-client/Cargo.toml @@ -32,7 +32,7 @@ thiserror = { workspace = true } tracing = { workspace = true } itertools = { workspace = true } inventory = { workspace = true } - +tokio = { workspace = true, features = ["rt", "macros", "time"] } # used for decoding text responses (they were already implicitly included) bytes = { workspace = true } encoding_rs = { workspace = true } @@ -52,5 +52,4 @@ workspace = true features = ["tokio"] [dev-dependencies] -tokio = { workspace = true, features = ["rt", "macros"] } - +tracing-subscriber.workspace = true diff --git a/common/http-api-client/src/dns.rs b/common/http-api-client/src/dns.rs index d3fa9dde35..79f7997fbe 100644 --- a/common/http-api-client/src/dns.rs +++ b/common/http-api-client/src/dns.rs @@ -30,19 +30,26 @@ use crate::ClientBuilder; use std::{ - net::SocketAddr, + collections::HashMap, + net::{IpAddr, SocketAddr}, + str::FromStr, sync::{Arc, LazyLock}, + time::Duration, }; use hickory_resolver::{ - ResolveError, TokioResolver, - config::{LookupIpStrategy, NameServerConfigGroup, ResolverConfig, ServerOrderingStrategy}, - lookup_ip::{LookupIp, LookupIpIntoIter}, + TokioResolver, + config::{LookupIpStrategy, NameServerConfigGroup, ResolverConfig}, + lookup_ip::LookupIpIntoIter, name_server::TokioConnectionProvider, }; use once_cell::sync::OnceCell; use reqwest::dns::{Addrs, Name, Resolve, Resolving}; -use tracing::warn; +use tracing::*; + +mod constants; +mod static_resolver; +pub use static_resolver::*; impl ClientBuilder { /// Override the DNS resolver implementation used by the underlying http client. @@ -59,10 +66,6 @@ impl ClientBuilder { } } -struct SocketAddrs { - iter: LookupIpIntoIter, -} - // n.b. static items do not call [`Drop`] on program termination, so this won't be deallocated. // this is fine, as the OS can deallocate the terminated program faster than we can free memory // but tools like valgrind might report "memory leaks" as it isn't obvious this is intentional. @@ -72,11 +75,24 @@ static SHARED_RESOLVER: LazyLock = LazyLock::new(|| { }); #[derive(Debug, thiserror::Error)] -#[error("hickory-dns resolver error: {hickory_error}")] +#[allow(missing_docs)] /// Error occurring while resolving a hostname into an IP address. -pub struct HickoryDnsError { - #[from] - hickory_error: ResolveError, +pub enum ResolveError { + #[error("invalid name: {0}")] + InvalidNameError(String), + #[error("hickory-dns resolver error: {0}")] + ResolveError(#[from] hickory_resolver::ResolveError), + #[error("high level lookup timed out")] + Timeout, + #[error("hostname not found in static lookup table")] + StaticLookupMiss, +} + +impl ResolveError { + /// Returns true if the error is a timeout. + pub fn is_timeout(&self) -> bool { + matches!(self, ResolveError::Timeout) + } } /// Wrapper around an `AsyncResolver`, which implements the `Resolve` trait. @@ -87,69 +103,116 @@ pub struct HickoryDnsError { /// The default initialization uses a shared underlying `AsyncResolver`. If a thread local resolver /// is required use `thread_resolver()` to build a resolver with an independently instantiated /// internal `AsyncResolver`. -#[derive(Debug, Default, Clone)] +#[derive(Debug, Clone)] pub struct HickoryDnsResolver { // Since we might not have been called in the context of a // Tokio Runtime in initialization, so we must delay the actual // construction of the resolver. state: Arc>, fallback: Option>>, + static_base: Option>>, dont_use_shared: bool, + /// Overall timeout for dns lookup associated with any individual host resolution. For example, + /// use of retries, server_ordering_strategy, etc. ends absolutely if this timeout is reached. + overall_dns_timeout: Duration, +} + +impl Default for HickoryDnsResolver { + fn default() -> Self { + Self { + state: Default::default(), + fallback: Default::default(), + static_base: Default::default(), + dont_use_shared: Default::default(), + overall_dns_timeout: Duration::from_secs(10), + } + } } impl Resolve for HickoryDnsResolver { fn resolve(&self, name: Name) -> Resolving { let resolver = self.state.clone(); let maybe_fallback = self.fallback.clone(); + let maybe_static = self.static_base.clone(); let independent = self.dont_use_shared; + let overall_dns_timeout = self.overall_dns_timeout; Box::pin(async move { - let resolver = resolver.get_or_try_init(|| { - // using a closure here is slightly gross, but this makes sure that if the - // lazy-init returns an error it can be handled by the client - if independent { - new_resolver() - } else { - Ok(SHARED_RESOLVER.state.get_or_try_init(new_resolver)?.clone()) - } - })?; + resolve( + name, + resolver, + maybe_fallback, + maybe_static, + independent, + overall_dns_timeout, + ) + .await + .map_err(|e| Box::new(e) as Box) + }) + } +} - // try the primary DNS resolver that we set up (DoH or DoT or whatever) - let lookup = match resolver.lookup_ip(name.as_str()).await { - Ok(res) => res, - Err(e) => { - if let Some(ref fallback) = maybe_fallback { - // on failure use the fall back system configured DNS resolver - if !e.is_no_records_found() { - warn!("primary DNS failed w/ error {e}: using system fallback"); - } - let resolver = fallback.get_or_try_init(|| { - // using a closure here is slightly gross, but this makes sure that if the - // lazy-init returns an error it can be handled by the client - if independent { - new_resolver_system() - } else { - Ok(SHARED_RESOLVER - .fallback - .as_ref() - .ok_or(e)? // if the shared resolver has no fallback return the original error - .get_or_try_init(new_resolver_system)? - .clone()) - } - })?; - - resolver.lookup_ip(name.as_str()).await? - } else { - return Err(e.into()); - } - } - }; +async fn resolve( + name: Name, + resolver: Arc>, + maybe_fallback: Option>>, + maybe_static: Option>>, + independent: bool, + overall_dns_timeout: Duration, +) -> Result { + let resolver = resolver.get_or_try_init(|| HickoryDnsResolver::new_resolver(independent))?; + // Attempt a lookup using the primary resolver + let resolve_fut = tokio::time::timeout(overall_dns_timeout, resolver.lookup_ip(name.as_str())); + let primary_err = match resolve_fut.await { + Err(_) => ResolveError::Timeout, + Ok(Ok(lookup)) => { let addrs: Addrs = Box::new(SocketAddrs { iter: lookup.into_iter(), }); - Ok(addrs) - }) + return Ok(addrs); + } + Ok(Err(e)) => { + // on failure use the fall back system configured DNS resolver + if !e.is_no_records_found() { + warn!("primary DNS failed w/ error: {e}"); + } + e.into() + } + }; + + // If the primary resolver encountered an error, attempt a lookup using the fallback + // resolver if one is configured. + if let Some(ref fallback) = maybe_fallback { + let resolver = + fallback.get_or_try_init(|| HickoryDnsResolver::new_resolver_system(independent))?; + + let resolve_fut = + tokio::time::timeout(overall_dns_timeout, resolver.lookup_ip(name.as_str())); + if let Ok(Ok(lookup)) = resolve_fut.await { + let addrs: Addrs = Box::new(SocketAddrs { + iter: lookup.into_iter(), + }); + return Ok(addrs); + } } + + // If no record has been found and a static map of fallback addresses is configured + // check the table for our entry + if let Some(ref static_resolver) = maybe_static { + debug!("checking static"); + let resolver = + static_resolver.get_or_init(|| HickoryDnsResolver::new_static_fallback(independent)); + + if let Ok(addrs) = resolver.resolve(name).await { + return Ok(addrs); + } + } + + Err(primary_err) +} + +struct SocketAddrs { + iter: LookupIpIntoIter, } impl Iterator for SocketAddrs { @@ -162,28 +225,22 @@ impl Iterator for SocketAddrs { impl HickoryDnsResolver { /// Attempt to resolve a domain name to a set of ['IpAddr']s - pub async fn resolve_str(&self, name: &str) -> Result { - let resolver = self.state.get_or_try_init(|| self.new_resolver())?; - - // try the primary DNS resolver that we set up (DoH or DoT or whatever) - let lookup = match resolver.lookup_ip(name).await { - Ok(res) => res, - Err(e) => { - if let Some(ref fallback) = self.fallback { - // on failure use the fall back system configured DNS resolver - if !e.is_no_records_found() { - warn!("primary DNS failed w/ error {e}: using system fallback"); - } - - let resolver = fallback.get_or_try_init(|| self.new_resolver_system())?; - resolver.lookup_ip(name).await? - } else { - return Err(e.into()); - } - } - }; - - Ok(lookup) + pub async fn resolve_str( + &self, + name: &str, + ) -> Result + use<>, ResolveError> { + let n = + Name::from_str(name).map_err(|_| ResolveError::InvalidNameError(name.to_string()))?; + resolve( + n, + self.state.clone(), + self.fallback.clone(), + self.static_base.clone(), + self.dont_use_shared, + self.overall_dns_timeout, + ) + .await + .map(|addrs| addrs.map(|socket_addr| socket_addr.ip())) } /// Create a (lazy-initialized) resolver that is not shared across threads. @@ -194,16 +251,20 @@ impl HickoryDnsResolver { } } - fn new_resolver(&self) -> Result { - if self.dont_use_shared { + fn new_resolver(dont_use_shared: bool) -> Result { + // using a closure here is slightly gross, but this makes sure that if the + // lazy-init returns an error it can be handled by the client + if dont_use_shared { new_resolver() } else { Ok(SHARED_RESOLVER.state.get_or_try_init(new_resolver)?.clone()) } } - fn new_resolver_system(&self) -> Result { - if self.dont_use_shared || SHARED_RESOLVER.fallback.is_none() { + fn new_resolver_system(dont_use_shared: bool) -> Result { + // using a closure here is slightly gross, but this makes sure that if the + // lazy-init returns an error it can be handled by the client + if dont_use_shared || SHARED_RESOLVER.fallback.is_none() { new_resolver_system() } else { Ok(SHARED_RESOLVER @@ -215,8 +276,18 @@ impl HickoryDnsResolver { } } + fn new_static_fallback(dont_use_shared: bool) -> StaticResolver { + if !dont_use_shared && let Some(ref shared_resolver) = SHARED_RESOLVER.static_base { + shared_resolver + .get_or_init(new_default_static_fallback) + .clone() + } else { + new_default_static_fallback() + } + } + /// Enable fallback to the system default resolver if the primary (DoX) resolver fails - pub fn enable_system_fallback(&mut self) -> Result<(), HickoryDnsError> { + pub fn enable_system_fallback(&mut self) -> Result<(), ResolveError> { self.fallback = Some(Default::default()); let _ = self .fallback @@ -231,22 +302,51 @@ impl HickoryDnsResolver { pub fn disable_system_fallback(&mut self) { self.fallback = None; } + + /// Get the current map of hostname to address in use by the fallback static lookup if one + /// exists. + pub fn get_static_fallbacks(&self) -> Option>> { + Some(self.static_base.as_ref()?.get()?.get_addrs()) + } + + /// Set (or overwrite) the map of addresses used in the fallback static hostname lookup + pub fn set_static_fallbacks(&mut self, addrs: HashMap>) { + let cell = OnceCell::new(); + cell.set(StaticResolver::new(addrs)) + .expect("infallible assign"); + self.static_base = Some(Arc::new(cell)); + } } /// Create a new resolver with a custom DoT based configuration. The options are overridden to look /// up for both IPv4 and IPv6 addresses to work with "happy eyeballs" algorithm. -fn new_resolver() -> Result { +/// +/// Timeout Defaults to 5 seconds +/// Number of retries after lookup failure before giving up Defaults to 2 +/// +/// Caches successfully resolved addresses for 30 minutes to prevent continual use of remote lookup. +/// This resolver is intended to be used for OUR API endpoints that do not rapidly rotate IPs. +fn new_resolver() -> Result { + info!("building new configured resolver"); + let mut name_servers = NameServerConfigGroup::quad9_tls(); name_servers.merge(NameServerConfigGroup::quad9_https()); name_servers.merge(NameServerConfigGroup::cloudflare_tls()); name_servers.merge(NameServerConfigGroup::cloudflare_https()); + configure_and_build_resolver(name_servers) +} + +fn configure_and_build_resolver( + name_servers: NameServerConfigGroup, +) -> Result { let config = ResolverConfig::from_parts(None, Vec::new(), name_servers); let mut resolver_builder = TokioResolver::builder_with_config(config, TokioConnectionProvider::default()); resolver_builder.options_mut().ip_strategy = LookupIpStrategy::Ipv4AndIpv6; - resolver_builder.options_mut().server_ordering_strategy = ServerOrderingStrategy::RoundRobin; + // Cache successful responses for queries received by this resolver for 30 min minimum. + resolver_builder.options_mut().positive_min_ttl = Some(Duration::from_secs(1800)); Ok(resolver_builder.build()) } @@ -254,20 +354,27 @@ fn new_resolver() -> Result { /// Create a new resolver with the default configuration, which reads from the system DNS config /// (i.e. `/etc/resolve.conf` in unix). The options are overridden to look up for both IPv4 and IPv6 /// addresses to work with "happy eyeballs" algorithm. -fn new_resolver_system() -> Result { +fn new_resolver_system() -> Result { let mut resolver_builder = TokioResolver::builder_tokio()?; resolver_builder.options_mut().ip_strategy = LookupIpStrategy::Ipv4AndIpv6; Ok(resolver_builder.build()) } +fn new_default_static_fallback() -> StaticResolver { + StaticResolver::new(constants::default_static_addrs()) +} + #[cfg(test)] mod test { use super::*; + use itertools::Itertools; + use std::collections::HashMap; #[tokio::test] - async fn reqwest_hickory_doh() { - let resolver = HickoryDnsResolver::default(); + async fn reqwest_with_custom_dns() { + let var_name = HickoryDnsResolver::default(); + let resolver = var_name; let client = reqwest::ClientBuilder::new() .dns_resolver(resolver.into()) .build() @@ -286,7 +393,7 @@ mod test { } #[tokio::test] - async fn dns_lookup() -> Result<(), HickoryDnsError> { + async fn dns_lookup() -> Result<(), ResolveError> { let resolver = HickoryDnsResolver::default(); let domain = "ifconfig.me"; @@ -296,4 +403,124 @@ mod test { Ok(()) } + + #[tokio::test] + async fn static_resolver_as_fallback() -> Result<(), ResolveError> { + let example_domain = "non-existent.nymvpn.com"; + let mut resolver = HickoryDnsResolver { + ..Default::default() + }; + + let result = resolver.resolve_str(example_domain).await; + assert!(result.is_err()); // should be NXDomain + + resolver.static_base = Some(Default::default()); + + let mut addr_map = HashMap::new(); + let example_ip4: IpAddr = "10.10.10.10".parse().unwrap(); + let example_ip6: IpAddr = "dead::beef".parse().unwrap(); + addr_map.insert(example_domain.to_string(), vec![example_ip4, example_ip6]); + + resolver.set_static_fallbacks(addr_map); + + let mut addrs = resolver.resolve_str(example_domain).await?; + assert!(addrs.contains(&example_ip4)); + assert!(addrs.contains(&example_ip6)); + Ok(()) + } +} + +#[cfg(test)] +mod failure_test { + use super::*; + use std::net::{IpAddr, Ipv4Addr, Ipv6Addr}; + + /// IP addresses guaranteed to fail attempts to resolve + /// + /// Addresses drawn from blocks set off by RFC5737 (ipv4) and RFC3849 (ipv6) + const GUARANTEED_BROKEN_IPS_1: &[IpAddr] = &[ + IpAddr::V4(Ipv4Addr::new(192, 0, 2, 1)), + IpAddr::V4(Ipv4Addr::new(198, 51, 100, 1)), + IpAddr::V6(Ipv6Addr::new(0x2001, 0x0db8, 0, 0, 0, 0, 0, 0x1111)), + IpAddr::V6(Ipv6Addr::new(0x2001, 0x0db8, 0, 0, 0, 0, 0, 0x1001)), + ]; + + // Create a resolver that behaves the same as the custom configured router, except for the fact + // that it is guaranteed to fail. + fn build_broken_resolver() -> Result { + info!("building new faulty resolver"); + + let mut broken_ns_group = NameServerConfigGroup::from_ips_tls( + GUARANTEED_BROKEN_IPS_1, + 853, + "cloudflare-dns.com".to_string(), + true, + ); + let broken_ns_https = NameServerConfigGroup::from_ips_https( + GUARANTEED_BROKEN_IPS_1, + 443, + "cloudflare-dns.com".to_string(), + true, + ); + broken_ns_group.merge(broken_ns_https); + + configure_and_build_resolver(broken_ns_group) + } + + #[tokio::test] + async fn dns_lookup_failures() -> Result<(), ResolveError> { + let time_start = std::time::Instant::now(); + + let r = OnceCell::new(); + r.set(build_broken_resolver().expect("failed to build resolver")) + .expect("broken resolver init error"); + + // create a new resolver that won't mess with the shared resolver used by other tests + let resolver = HickoryDnsResolver { + dont_use_shared: true, + state: Arc::new(r), + overall_dns_timeout: Duration::from_secs(5), + ..Default::default() + }; + build_broken_resolver()?; + let domain = "ifconfig.me"; + let result = resolver.resolve_str(domain).await; + assert!(result.is_err_and(|e| matches!(e, ResolveError::Timeout))); + + let duration = time_start.elapsed(); + assert!(duration < resolver.overall_dns_timeout + Duration::from_secs(1)); + + Ok(()) + } + + #[tokio::test] + async fn fallback_to_static() -> Result<(), ResolveError> { + let r = OnceCell::new(); + r.set(build_broken_resolver().expect("failed to build resolver")) + .expect("broken resolver init error"); + + // create a new resolver that won't mess with the shared resolver used by other tests + let resolver = HickoryDnsResolver { + dont_use_shared: true, + state: Arc::new(r), + static_base: Some(Default::default()), + overall_dns_timeout: Duration::from_secs(5), + ..Default::default() + }; + build_broken_resolver()?; + + // successful lookup using fallback to static resolver + let domain = "nymvpn.com"; + let _ = resolver + .resolve_str(domain) + .await + .expect("failed to resolve address in static lookup"); + + // unsuccessful lookup - primary times out, and not in + let domain = "non-existent.nymtech.net"; + let result = resolver.resolve_str(domain).await; + assert!(result.is_err_and(|e| matches!(e, ResolveError::Timeout))); + + Ok(()) + } } diff --git a/common/http-api-client/src/dns/constants.rs b/common/http-api-client/src/dns/constants.rs new file mode 100644 index 0000000000..b25dc43a1c --- /dev/null +++ b/common/http-api-client/src/dns/constants.rs @@ -0,0 +1,95 @@ +#![allow(missing_docs)] + +use std::collections::HashMap; +use std::net::{IpAddr, Ipv4Addr, Ipv6Addr}; + +pub const NYM_API_DOMAIN: &str = "validator.nymtech.net"; +pub const NYM_API_IPS: &[IpAddr] = &[IpAddr::V4(Ipv4Addr::new(212, 71, 233, 232))]; + +pub const NYM_VPN_API_DOMAIN: &str = "nymvpn.com"; +pub const NYM_VPN_API_IPS: &[IpAddr] = &[IpAddr::V4(Ipv4Addr::new(76, 76, 21, 21))]; + +pub const NYM_FRONTDOOR_VERCEL_DOMAIN: &str = "nym-frontdoor.vercel.app"; +pub const NYM_FRONTDOOR_VERCEL_IPS: &[IpAddr] = &[ + IpAddr::V4(Ipv4Addr::new(64, 29, 17, 195)), + IpAddr::V4(Ipv4Addr::new(216, 198, 79, 195)), +]; + +pub const NYM_FRONTDOOR_FASTLY_DOMAIN: &str = "nym-frontdoor.global.ssl.fastly.net"; +pub const NYM_FRONTDOOR_FASTLY_IPS: &[IpAddr] = &[ + IpAddr::V4(Ipv4Addr::new(151, 101, 193, 194)), + IpAddr::V4(Ipv4Addr::new(151, 101, 129, 194)), + IpAddr::V4(Ipv4Addr::new(151, 101, 1, 194)), + IpAddr::V4(Ipv4Addr::new(151, 101, 65, 194)), +]; + +pub const NYMVPN_FRONTDOOR_FASTLY_DOMAIN: &str = "nymvpn-frontdoor.global.ssl.fastly.net"; +pub const NYMVPN_FRONTDOOR_FASTLY_IPS: &[IpAddr] = &[ + IpAddr::V4(Ipv4Addr::new(151, 101, 193, 194)), + IpAddr::V4(Ipv4Addr::new(151, 101, 129, 194)), + IpAddr::V4(Ipv4Addr::new(151, 101, 1, 194)), + IpAddr::V4(Ipv4Addr::new(151, 101, 65, 194)), +]; + +pub const YELP_FASTLY_DOMAIN: &str = "yelp.global.ssl.fastly.net"; +pub const YELP_FASTLY_IPS: &[IpAddr] = &[ + IpAddr::V4(Ipv4Addr::new(151, 101, 193, 194)), + IpAddr::V4(Ipv4Addr::new(151, 101, 129, 194)), + IpAddr::V4(Ipv4Addr::new(151, 101, 1, 194)), + IpAddr::V4(Ipv4Addr::new(151, 101, 65, 194)), +]; + +pub const VERCEL_APP_DOMAIN: &str = "vercel.app"; +pub const VERCEL_APP_IPS: &[IpAddr] = &[ + IpAddr::V4(Ipv4Addr::new(64, 29, 17, 195)), + IpAddr::V4(Ipv4Addr::new(216, 198, 79, 195)), +]; + +pub const VERCEL_COM_DOMAIN: &str = "vercel.com"; +pub const VERCEL_COM_IPS: &[IpAddr] = &[ + IpAddr::V4(Ipv4Addr::new(198, 169, 2, 129)), + IpAddr::V4(Ipv4Addr::new(198, 169, 1, 193)), +]; + +pub const NYM_COM_DOMAIN: &str = "nym.com"; +pub const NYM_COM_IPS: &[IpAddr] = &[IpAddr::V4(Ipv4Addr::new(76, 76, 21, 22))]; + +pub const NYM_STATS_API_DOMAIN: &str = "nym-statistics-api.nymtech.cc"; +pub const NYM_STATS_API_IPS: &[IpAddr] = &[IpAddr::V4(Ipv4Addr::new(91, 92, 153, 96))]; + +pub const NYM_RPC_DOMAIN: &str = "rpc.nymtech.net"; +pub const NYM_RPC_IPS: &[IpAddr] = &[ + IpAddr::V4(Ipv4Addr::new(194, 182, 169, 49)), + IpAddr::V4(Ipv4Addr::new(91, 92, 200, 116)), + IpAddr::V6(Ipv6Addr::new( + 0x2a04, 0xc43, 0xe00, 0x6f28, 0x400, 0xd8ff, 0xfe00, 0x1483, + )), + IpAddr::V6(Ipv6Addr::new( + 0x2a04, 0xc46, 0xe00, 0x6f28, 0x4b3, 0x68ff, 0xfe00, 0x460, + )), +]; + +pub fn default_static_addrs() -> HashMap> { + let mut m = HashMap::new(); + m.insert(NYM_API_DOMAIN.to_string(), NYM_API_IPS.to_vec()); + m.insert(NYM_VPN_API_DOMAIN.to_string(), NYM_VPN_API_IPS.to_vec()); + m.insert( + NYM_FRONTDOOR_VERCEL_DOMAIN.to_string(), + NYM_FRONTDOOR_VERCEL_IPS.to_vec(), + ); + m.insert( + NYM_FRONTDOOR_FASTLY_DOMAIN.to_string(), + NYM_FRONTDOOR_FASTLY_IPS.to_vec(), + ); + m.insert( + NYMVPN_FRONTDOOR_FASTLY_DOMAIN.to_string(), + NYMVPN_FRONTDOOR_FASTLY_IPS.to_vec(), + ); + m.insert(YELP_FASTLY_DOMAIN.to_string(), YELP_FASTLY_IPS.to_vec()); + m.insert(VERCEL_APP_DOMAIN.to_string(), VERCEL_APP_IPS.to_vec()); + m.insert(VERCEL_COM_DOMAIN.to_string(), VERCEL_COM_IPS.to_vec()); + m.insert(NYM_COM_DOMAIN.to_string(), NYM_COM_IPS.to_vec()); + m.insert(NYM_STATS_API_DOMAIN.to_string(), NYM_STATS_API_IPS.to_vec()); + m.insert(NYM_RPC_DOMAIN.to_string(), NYM_RPC_IPS.to_vec()); + m +} diff --git a/common/http-api-client/src/dns/static_resolver.rs b/common/http-api-client/src/dns/static_resolver.rs new file mode 100644 index 0000000000..030ae4419d --- /dev/null +++ b/common/http-api-client/src/dns/static_resolver.rs @@ -0,0 +1,89 @@ +use crate::dns::ResolveError; + +use std::{ + collections::HashMap, + net::{IpAddr, SocketAddr}, + sync::{Arc, Mutex}, +}; + +use reqwest::dns::{Addrs, Name, Resolve, Resolving}; +use tracing::*; + +#[derive(Debug, Default, Clone)] +pub struct StaticResolver { + static_addr_map: Arc>>>, +} + +impl StaticResolver { + pub fn new(static_entries: HashMap>) -> StaticResolver { + debug!("building static resolver"); + Self { + static_addr_map: Arc::new(Mutex::new(static_entries)), + } + } + + pub fn get_addrs(&self) -> HashMap> { + self.static_addr_map.lock().unwrap().clone() + } +} + +impl Resolve for StaticResolver { + fn resolve(&self, name: Name) -> Resolving { + debug!("looking up {name:?} in static resolver"); + let addr_map = self.static_addr_map.clone(); + Box::pin(async move { + let addr_map = addr_map.lock().unwrap(); + let lookup = match addr_map.get(name.as_str()) { + None => return Err(ResolveError::StaticLookupMiss.into()), + Some(addrs) => addrs, + }; + let addrs: Addrs = Box::new( + lookup + .clone() + .into_iter() + .map(|ip_addr| SocketAddr::new(ip_addr, 0)), + ); + + Ok(addrs) + }) + } +} + +#[cfg(test)] +mod test { + use itertools::Itertools; + + use super::*; + use std::error::Error as StdError; + use std::str::FromStr; + + #[tokio::test] + async fn lookup_using_static_resolver() -> Result<(), Box> { + let example_domain = String::from("static.nymvpn.com"); + + // lookup for domain for which there is no entry + let resolver = StaticResolver::new(HashMap::new()); + + let url = reqwest::dns::Name::from_str(&example_domain).unwrap(); + let result = resolver.resolve(url).await; + assert!(result.is_err()); + match result { + Ok(_) => panic!("lookup with empty map should fail"), + Err(e) => assert_eq!(e.to_string(), ResolveError::StaticLookupMiss.to_string()), + } + + // Successful lookup + let mut addr_map = HashMap::new(); + let example_ip4: IpAddr = "10.10.10.10".parse().unwrap(); + let example_ip6: IpAddr = "dead::beef".parse().unwrap(); + addr_map.insert(example_domain.clone(), vec![example_ip4, example_ip6]); + + let url = reqwest::dns::Name::from_str(&example_domain).unwrap(); + let resolver = StaticResolver::new(addr_map); + let mut addrs = resolver.resolve(url).await?; + assert!(addrs.contains(&SocketAddr::new(example_ip4, 0))); + assert!(addrs.contains(&SocketAddr::new(example_ip6, 0))); + + Ok(()) + } +} diff --git a/common/http-api-client/src/fronted.rs b/common/http-api-client/src/fronted.rs index 4b5a9d9eab..be884264cf 100644 --- a/common/http-api-client/src/fronted.rs +++ b/common/http-api-client/src/fronted.rs @@ -121,4 +121,89 @@ mod tests { // println!("{response:?}"); assert_eq!(response.status(), 200); } + + #[tokio::test] + async fn fallback_on_failure() { + let url1 = Url::new( + "https://fake-domain.nymtech.net", + Some(vec![ + "https://fake-front-1.nymtech.net", + "https://fake-front-2.nymtech.net", + ]), + ) + .unwrap(); + let url2 = Url::new( + "https://validator.global.ssl.fastly.net", + Some(vec!["https://yelp.global.ssl.fastly.net"]), + ) + .unwrap(); // fastly + + let client = ClientBuilder::new_with_urls(vec![url1, url2]) + .expect("bad url") + .with_fronting(FrontPolicy::Always) + .build() + .expect("failed to build client"); + + // Check that the initial configuration has the broken domain and front. + assert_eq!( + client.current_url().as_str(), + "https://fake-domain.nymtech.net/", + ); + assert_eq!( + client.current_url().front_str(), + Some("fake-front-1.nymtech.net"), + ); + + let result = client + .send_request::<_, (), &str, &str>( + reqwest::Method::GET, + &["api", "v1", "network", "details"], + NO_PARAMS, + None, + ) + .await; + assert!(result.is_err()); + + // Check that the host configuration updated the front on error. + assert_eq!( + client.current_url().as_str(), + "https://fake-domain.nymtech.net/", + ); + assert_eq!( + client.current_url().front_str(), + Some("fake-front-2.nymtech.net"), + ); + + let result = client + .send_request::<_, (), &str, &str>( + reqwest::Method::GET, + &["api", "v1", "network", "details"], + NO_PARAMS, + None, + ) + .await; + assert!(result.is_err()); + + // Check that the host configuration updated the domain and front on error. + assert_eq!( + client.current_url().as_str(), + "https://validator.global.ssl.fastly.net/", + ); + assert_eq!( + client.current_url().front_str(), + Some("yelp.global.ssl.fastly.net"), + ); + + let response = client + .send_request::<_, (), &str, &str>( + reqwest::Method::GET, + &["api", "v1", "network", "details"], + NO_PARAMS, + None, + ) + .await + .expect("failed get request"); + + assert_eq!(response.status(), 200); + } } diff --git a/common/http-api-client/src/lib.rs b/common/http-api-client/src/lib.rs index 3baa390c53..a74a141fe6 100644 --- a/common/http-api-client/src/lib.rs +++ b/common/http-api-client/src/lib.rs @@ -179,7 +179,7 @@ mod dns; mod path; #[cfg(not(target_arch = "wasm32"))] -pub use dns::{HickoryDnsError, HickoryDnsResolver}; +pub use dns::{HickoryDnsResolver, ResolveError}; // helper for generating user agent based on binary information #[cfg(not(target_arch = "wasm32"))] @@ -395,6 +395,13 @@ pub enum HttpClientError { #[error("failed to resolve request to {url} due to data inconsistency: {details}")] InternalResponseInconsistency { url: ::url::Url, details: String }, + #[cfg(not(target_arch = "wasm32"))] + #[error("encountered dns failure: {inner}")] + DnsLookupFailure { + #[from] + inner: ResolveError, + }, + #[error("Failed to encode bincode: {0}")] Bincode(#[from] bincode::Error), @@ -421,6 +428,8 @@ impl HttpClientError { HttpClientError::ReqwestClientError { source } => source.is_timeout(), HttpClientError::RequestSendFailure { source, .. } => source.0.is_timeout(), HttpClientError::ResponseReadFailure { source, .. } => source.0.is_timeout(), + #[cfg(not(target_arch = "wasm32"))] + HttpClientError::DnsLookupFailure { inner } => inner.is_timeout(), #[cfg(target_arch = "wasm32")] HttpClientError::RequestTimeout => true, _ => false, @@ -775,6 +784,7 @@ impl ClientBuilder { base_urls: self.urls, current_idx: Arc::new(AtomicUsize::new(0)), reqwest_client, + using_secure_dns: self.use_secure_dns, #[cfg(feature = "tunneling")] front: self.front, @@ -795,6 +805,7 @@ pub struct Client { base_urls: Vec, current_idx: Arc, reqwest_client: reqwest::Client, + using_secure_dns: bool, #[cfg(feature = "tunneling")] front: Option, @@ -852,6 +863,7 @@ impl Client { base_urls: vec![new_url], current_idx: Arc::new(Default::default()), reqwest_client: self.reqwest_client.clone(), + using_secure_dns: self.using_secure_dns, #[cfg(feature = "tunneling")] front: self.front.clone(), @@ -883,8 +895,34 @@ impl Client { self.retry_limit = limit; } + fn matches_current_host(&self, url: &Url) -> bool { + if cfg!(feature = "tunneling") { + if let Some(ref front) = self.front + && front.is_enabled() + { + url.host_str() == self.current_url().front_str() + } else { + url.host_str() == self.current_url().host_str() + } + } else { + url.host_str() == self.current_url().host_str() + } + } + /// If multiple base urls are available rotate to next (e.g. when the current one resulted in an error) - fn update_host(&self) { + /// + /// Takes an optional URL argument. If this is none, the current host will be updated automatically. + /// If a url is provided first check that the CURRENT host matches the hostname in the URL before + /// triggering a rotation. This is meant to prevent parallel requests that fail from rotating the host + /// multiple times. + fn update_host(&self, maybe_url: Option) { + // If a causal url is provided and it doesn't match the hostname currently in use, skip update. + if let Some(err_url) = maybe_url + && !self.matches_current_host(&err_url) + { + return; + } + #[cfg(feature = "tunneling")] if let Some(ref front) = self.front && front.is_enabled() @@ -902,6 +940,8 @@ impl Client { if self.base_urls.len() > 1 { let orig = self.current_idx.load(Ordering::Relaxed); + + #[allow(unused_mut)] let mut next = (orig + 1) % self.base_urls.len(); // if fronting is enabled we want to update to a host that has fronts configured @@ -1046,8 +1086,28 @@ impl ApiClientCore for Client { .build() .map_err(HttpClientError::reqwest_client_build_error)?; self.apply_hosts_to_req(&mut req); + let url: Url = req.url().clone().into(); + + // try an explicit DNS resolution - if successful then it will be in cache when reqwest + // goes to execute the request. If failure then we get to handle the DNS lookup error. #[cfg(not(target_arch = "wasm32"))] - let url = req.url().clone(); + if self.using_secure_dns + && let Some(hostname) = req.url().domain() + // Default here will use a shared resolver instance + && let Err(err) = HickoryDnsResolver::default().resolve_str(hostname).await + { + // on failure update host, but don't trigger fronting enable. + self.update_host(Some(url.clone())); + + if attempts < self.retry_limit { + attempts += 1; + warn!( + "Retrying request due to dns error on attempt ({attempts}/{}): {err}", + self.retry_limit + ); + continue; + } + } #[cfg(target_arch = "wasm32")] let response: Result = { @@ -1065,25 +1125,39 @@ impl ApiClientCore for Client { match response { Ok(resp) => return Ok(resp), Err(err) => { - // if we have multiple urls, update to the next - self.update_host(); + // only if there was a network issue should we consider updating the host info + // + // note: for now this includes DNS resolution failure, I am not sure how I would go about + // segregating that based on the interface provided by request for errors. + #[cfg(target_arch = "wasm32")] + let is_network_err = err.is_timeout(); + #[cfg(not(target_arch = "wasm32"))] + let is_network_err = err.is_timeout() || err.is_connect(); - #[cfg(feature = "tunneling")] - if let Some(ref front) = self.front { - // If fronting is set to be enabled on error, enable domain fronting as we - // have encountered an error. - let was_enabled = front.is_enabled(); - front.retry_enable(); - if !was_enabled && front.is_enabled() { - tracing::info!( - "Domain fronting activated after connection failure: {err}", - ); + if is_network_err { + // if we have multiple urls, update to the next + self.update_host(Some(url.clone())); + + #[cfg(feature = "tunneling")] + if let Some(ref front) = self.front { + // If fronting is set to be enabled on error, enable domain fronting as we + // have encountered an error. + let was_enabled = front.is_enabled(); + front.retry_enable(); + if !was_enabled && front.is_enabled() { + tracing::info!( + "Domain fronting activated after connection failure: {err}", + ); + } } } if attempts < self.retry_limit { - warn!("Retrying request due to http error: {err}"); attempts += 1; + warn!( + "Retrying request due to http error on attempt ({attempts}/{}): {err}", + self.retry_limit + ); continue; } @@ -1092,7 +1166,7 @@ impl ApiClientCore for Client { if #[cfg(target_arch = "wasm32")] { return Err(err); } else { - return Err(HttpClientError::request_send_error(url, err)); + return Err(HttpClientError::request_send_error(url.into(), err)); } } } diff --git a/common/http-api-client/src/tests.rs b/common/http-api-client/src/tests.rs index a990ef653f..bbfe8df6e0 100644 --- a/common/http-api-client/src/tests.rs +++ b/common/http-api-client/src/tests.rs @@ -91,14 +91,15 @@ fn sanitizing_urls() { #[tokio::test] async fn api_client_retry() -> Result<(), Box> { let client = ClientBuilder::new_with_urls(vec![ - "http://broken.nym.test".parse()?, // This will fail - "https://httpbin.org/status/200".parse()?, // This will succeed + "http://broken.nym.test".parse()?, // This will fail because of DNS (rotate) + "http://127.0.0.1:9".parse()?, // This will fail because of TCP refused (rotate) + "https://httpbin.org/status/200".parse()?, // This should succeed ])? .with_retries(3) .build()?; let req = client.create_get_request(&[], NO_PARAMS).unwrap(); - let resp = client.send(req).await?; + let _resp = client.send(req).await?; // The main test is that we successfully retried and switched to the working URL // We accept any response from the working endpoint since external services can be unreliable @@ -107,7 +108,9 @@ async fn api_client_retry() -> Result<(), Box> { "https://httpbin.org/status/200" ); - println!("Response status: {}", resp.status()); + // // This assert can be unreliable due to factors beyond our control and beyond the scope of + // // this test + // assert_eq!(_resp.status(), StatusCode::OK); Ok(()) } @@ -123,7 +126,7 @@ fn host_updating() { assert_eq!(current_url.front_str(), None); // update the url - client.update_host(); + client.update_host(None); // check that the url is still the same since there is one URL assert_eq!(client.current_url().as_str(), "http://nym-api1.test/"); @@ -138,13 +141,13 @@ fn host_updating() { client.change_base_urls(new_urls); assert_eq!(client.current_url().as_str(), "http://nym-api1.test/"); - client.update_host(); + client.update_host(None); // check that the url got updated now that there are multiple URLs assert_eq!(client.current_url().as_str(), "http://nym-api2.test/"); assert_eq!(client.current_url().front_str(), None); - client.update_host(); + client.update_host(None); assert_eq!(client.current_url().as_str(), "http://nym-api1.test/"); // ======================================= @@ -162,12 +165,33 @@ fn host_updating() { assert_eq!(client.current_url().as_str(), "http://nym-api1.test/"); - client.update_host(); + client.update_host(None); // check that the url got updated now that there are multiple URLs assert_eq!(client.current_url().as_str(), "http://nym-api2.test/"); } +#[test] +fn host_updating_url_conditioned() { + let url1 = Url::new("http://nym-api1.test", None).unwrap(); + let url2 = Url::new("http://nym-api2.test", None).unwrap(); + let urls = vec![url1.clone(), url2.clone()]; + let client = ClientBuilder::new_with_urls(urls).unwrap().build().unwrap(); + + assert_eq!(client.current_url().as_str(), "http://nym-api1.test/"); + + // Try to update with a URL that does NOT match current - should result in no change + client.update_host(Some(Url::parse("http://example.com").unwrap())); + + // check that the url did NOT get updated + assert_eq!(client.current_url().as_str(), "http://nym-api1.test/"); + assert_eq!(client.current_url().front_str(), None); + + // Try to update with a URL that DOES match current - should result in no change + client.update_host(Some(url1)); + assert_eq!(client.current_url().as_str(), "http://nym-api2.test/"); +} + #[test] #[cfg(feature = "tunneling")] fn fronted_host_updating() { @@ -184,7 +208,7 @@ fn fronted_host_updating() { assert_eq!(current_url.front_str(), Some("cdn1.test")); // update the url - client.update_host(); + client.update_host(None); // check that the url is still the same since there is one URL and one front let current_url = client.current_url(); @@ -209,7 +233,7 @@ fn fronted_host_updating() { assert_eq!(current_url.front_str(), Some("cdn1.test")); // update the url - this should keep the same host but change the front - client.update_host(); + client.update_host(None); let current_url = client.current_url(); // check that the url is still the same since there is one URL @@ -217,7 +241,7 @@ fn fronted_host_updating() { assert_eq!(current_url.front_str(), Some("cdn2.test")); // update the url - this should wrap around to the first front as the second url is not fronted - client.update_host(); + client.update_host(None); let current_url = client.current_url(); assert_eq!(current_url.as_str(), "http://nym-api.test/"); diff --git a/common/network-defaults/src/mainnet.rs b/common/network-defaults/src/mainnet.rs index 8bace8f485..291f397482 100644 --- a/common/network-defaults/src/mainnet.rs +++ b/common/network-defaults/src/mainnet.rs @@ -54,6 +54,11 @@ pub const NYM_APIS: &[ApiUrlConst] = &[ ]; pub const NYM_VPN_API: &str = "https://nymvpn.com/api/"; + +pub const UPGRADE_MODE_ATTESTATION_URL: &str = "https://nym.com/upgrade-mode/attestation.json"; +pub const UPGRADE_MODE_ATTESTER_ED25519_BS58_PUBKEY: &str = + "3bgffBYcfFkTTXc2npNNn9MkddFZ3H2LrPjXDmnJzrqd"; + #[cfg(feature = "network")] pub const NYM_VPN_APIS: &[ApiUrlConst] = &[ ApiUrlConst { @@ -159,6 +164,14 @@ pub fn export_to_env() { set_var_to_default(var_names::NYXD_WEBSOCKET, NYXD_WS); set_var_to_default(var_names::EXIT_POLICY_URL, EXIT_POLICY_URL); set_var_to_default(var_names::NYM_VPN_API, NYM_VPN_API); + set_var_to_default( + var_names::UPGRADE_MODE_ATTESTATION_URL, + UPGRADE_MODE_ATTESTATION_URL, + ); + set_var_to_default( + var_names::UPGRADE_MODE_ATTESTER_ED25519_BS58_PUBKEY, + UPGRADE_MODE_ATTESTER_ED25519_BS58_PUBKEY, + ); } #[cfg(all(feature = "env", feature = "network"))] @@ -199,4 +212,12 @@ pub fn export_to_env_if_not_set() { set_var_conditionally_to_default(var_names::NYM_API, NYM_API); set_var_conditionally_to_default(var_names::NYXD_WEBSOCKET, NYXD_WS); set_var_conditionally_to_default(var_names::EXIT_POLICY_URL, EXIT_POLICY_URL); + set_var_conditionally_to_default( + var_names::UPGRADE_MODE_ATTESTATION_URL, + UPGRADE_MODE_ATTESTATION_URL, + ); + set_var_conditionally_to_default( + var_names::UPGRADE_MODE_ATTESTER_ED25519_BS58_PUBKEY, + UPGRADE_MODE_ATTESTER_ED25519_BS58_PUBKEY, + ); } diff --git a/common/network-defaults/src/var_names.rs b/common/network-defaults/src/var_names.rs index 5bcebe85eb..897937b0fe 100644 --- a/common/network-defaults/src/var_names.rs +++ b/common/network-defaults/src/var_names.rs @@ -25,6 +25,8 @@ pub const NYXD_WEBSOCKET: &str = "NYXD_WS"; pub const EXIT_POLICY_URL: &str = "EXIT_POLICY"; pub const NYM_VPN_API: &str = "NYM_VPN_API"; pub const CLIENT_STATS_COLLECTION_PROVIDER: &str = "CLIENT_STATS_COLLECTION_PROVIDER"; +pub const UPGRADE_MODE_ATTESTATION_URL: &str = "UPGRADE_MODE_ATTESTATION_URL"; +pub const UPGRADE_MODE_ATTESTER_ED25519_BS58_PUBKEY: &str = "UPGRADE_MODE_ATTESTER_ED25519_PUBKEY"; pub const DKG_TIME_CONFIGURATION: &str = "DKG_TIME_CONFIGURATION"; diff --git a/common/upgrade-mode-check/Cargo.toml b/common/upgrade-mode-check/Cargo.toml index 50e0cb3f7c..17f292a566 100644 --- a/common/upgrade-mode-check/Cargo.toml +++ b/common/upgrade-mode-check/Cargo.toml @@ -15,9 +15,10 @@ jwt-simple = { workspace = true } reqwest = { workspace = true, features = ["rustls-tls"] } serde = { workspace = true, features = ["derive"] } serde_json = { workspace = true } -time = { workspace = true, features = ["serde"] } +time = { workspace = true, features = ["serde", "formatting", "parsing"] } thiserror = { workspace = true } tracing = { workspace = true } +utoipa = { workspace = true, optional = true } nym-http-api-client = { path = "../http-api-client", default-features = false } nym-crypto = { path = "../crypto", features = ["asymmetric", "serde", "naive_jwt"] } @@ -25,6 +26,12 @@ nym-crypto = { path = "../crypto", features = ["asymmetric", "serde", "naive_jwt [dev-dependencies] anyhow = { workspace = true } time = { workspace = true, features = ["macros"] } +nym-test-utils = { path = "../test-utils" } +nym-crypto = { path = "../crypto", features = ["rand"] } + + +[features] +openapi = ["utoipa"] [lints] workspace = true diff --git a/common/upgrade-mode-check/src/attestation.rs b/common/upgrade-mode-check/src/attestation.rs index 42c115f3cd..3d052caadd 100644 --- a/common/upgrade-mode-check/src/attestation.rs +++ b/common/upgrade-mode-check/src/attestation.rs @@ -1,31 +1,43 @@ // Copyright 2025 - Nym Technologies SA // SPDX-License-Identifier: Apache-2.0 -use crate::UpgradeModeCheckError; use nym_crypto::asymmetric::ed25519; -use nym_http_api_client::generate_user_agent; use serde::{Deserialize, Serialize}; -use std::time::Duration; use time::OffsetDateTime; -#[derive(Serialize, Deserialize, Debug, PartialEq, Clone, Copy)] +#[derive(Serialize, Deserialize, Debug, PartialEq, Clone)] +#[cfg_attr(feature = "openapi", derive(utoipa::ToSchema))] pub struct UpgradeModeAttestation { #[serde(flatten)] pub content: UpgradeModeAttestationContent, #[serde(with = "ed25519::bs58_ed25519_signature")] + #[cfg_attr(feature = "openapi", schema(value_type = String))] pub signature: ed25519::Signature, } -#[derive(Serialize, Deserialize, Debug, PartialEq, Clone, Copy)] +impl UpgradeModeAttestation { + pub fn authorised_to_issue_jwt(&self, key: &ed25519::PublicKey) -> bool { + self.content.authorised_jwt_issuers.contains(key) + } +} + +#[derive(Serialize, Deserialize, Debug, PartialEq, Clone)] #[serde(tag = "type")] #[serde(rename = "upgrade_mode")] +#[cfg_attr(feature = "openapi", derive(utoipa::ToSchema))] pub struct UpgradeModeAttestationContent { - #[serde(with = "time::serde::timestamp")] + #[serde(with = "time::serde::rfc3339")] + #[cfg_attr(feature = "openapi", schema(value_type = String))] pub starting_time: OffsetDateTime, #[serde(with = "ed25519::bs58_ed25519_pubkey")] + #[cfg_attr(feature = "openapi", schema(value_type = String))] pub attester_public_key: ed25519::PublicKey, + + #[serde(with = "ed25519::vec_bs58_ed25519_pubkey")] + #[cfg_attr(feature = "openapi", schema(value_type = Vec))] + pub authorised_jwt_issuers: Vec, } impl UpgradeModeAttestation { @@ -45,17 +57,26 @@ impl UpgradeModeAttestationContent { } } -pub fn generate_new_attestation(key: &ed25519::PrivateKey) -> UpgradeModeAttestation { - generate_new_attestation_with_starting_time(key, OffsetDateTime::now_utc()) +pub fn generate_new_attestation( + key: &ed25519::PrivateKey, + authorised_jwt_issuers: Vec, +) -> UpgradeModeAttestation { + generate_new_attestation_with_starting_time( + key, + authorised_jwt_issuers, + OffsetDateTime::now_utc(), + ) } pub fn generate_new_attestation_with_starting_time( key: &ed25519::PrivateKey, + authorised_jwt_issuers: Vec, starting_time: OffsetDateTime, ) -> UpgradeModeAttestation { let content = UpgradeModeAttestationContent { starting_time, attester_public_key: key.into(), + authorised_jwt_issuers, }; UpgradeModeAttestation { signature: key.sign(content.as_json()), @@ -63,17 +84,19 @@ pub fn generate_new_attestation_with_starting_time( } } -pub async fn attempt_retrieve( +#[cfg(not(target_arch = "wasm32"))] +pub async fn attempt_retrieve_attestation( url: &str, -) -> Result, UpgradeModeCheckError> { - let retrieval_failure = |source| UpgradeModeCheckError::AttestationRetrievalFailure { + user_agent: Option, +) -> Result, crate::UpgradeModeCheckError> { + let retrieval_failure = |source| crate::UpgradeModeCheckError::AttestationRetrievalFailure { url: url.to_string(), source, }; let attestation = reqwest::ClientBuilder::new() - .user_agent(generate_user_agent!()) - .timeout(Duration::from_secs(5)) + .user_agent(user_agent.unwrap_or_else(|| nym_http_api_client::generate_user_agent!())) + .timeout(std::time::Duration::from_secs(5)) .build() .map_err(retrieval_failure)? .get(url) @@ -101,13 +124,20 @@ mod tests { 163, 122, 170, 79, 198, 87, 85, 36, 29, 243, 92, 64, 161, ])?; - let attestation = generate_new_attestation_with_starting_time(&key, starting_time); + let authorised_jwt_issuers = vec![ed25519::PublicKey::from_base58_string( + "Be9wH7xuXBRJAuV1pC7MALZv6a61RvWQ3SypsNarqTt", + )?]; + let attestation = generate_new_attestation_with_starting_time( + &key, + authorised_jwt_issuers, + starting_time, + ); let attestation_json = serde_json::to_string(&attestation)?; let attestation_content_json = attestation.content.as_json(); - let expected_attestation = r#"{"type":"upgrade_mode","starting_time":1629720000,"attester_public_key":"3pkFcBXCEmbmXBT2G8CkFMuKisJcH54mbBGvncHaDibt","signature":"5rWUr2ypaDTtrMKegMP3tQkkZGFAuhNTnEVCVe5Azv6QqvLzoGdQiMkFmeyhDd1XSfoXpL9fFM58rsdA1kf4GYMM"}"#; - let expected_content = r#"{"type":"upgrade_mode","starting_time":1629720000,"attester_public_key":"3pkFcBXCEmbmXBT2G8CkFMuKisJcH54mbBGvncHaDibt"}"#; + let expected_attestation = r#"{"type":"upgrade_mode","starting_time":"2021-08-23T12:00:00Z","attester_public_key":"3pkFcBXCEmbmXBT2G8CkFMuKisJcH54mbBGvncHaDibt","authorised_jwt_issuers":["Be9wH7xuXBRJAuV1pC7MALZv6a61RvWQ3SypsNarqTt"],"signature":"5Kt9dfwvnkdnDcENbwNyitrxghyckWUYycBv8jUUn7hJUMohWEMc6otb3scXQfCrAGSE7FD5m7kr6auBmkAmfczY"}"#; + let expected_content = r#"{"type":"upgrade_mode","starting_time":"2021-08-23T12:00:00Z","attester_public_key":"3pkFcBXCEmbmXBT2G8CkFMuKisJcH54mbBGvncHaDibt","authorised_jwt_issuers":["Be9wH7xuXBRJAuV1pC7MALZv6a61RvWQ3SypsNarqTt"]}"#; assert_eq!(attestation_content_json, expected_content); assert_eq!(attestation_json, expected_attestation); diff --git a/common/upgrade-mode-check/src/error.rs b/common/upgrade-mode-check/src/error.rs index d1f26b7c5f..0edf4201e8 100644 --- a/common/upgrade-mode-check/src/error.rs +++ b/common/upgrade-mode-check/src/error.rs @@ -12,6 +12,9 @@ pub enum UpgradeModeCheckError { #[error("the jwt metadata didn't contain explicit public key")] MissingTokenPublicKey, + #[error("the jwt signer does not appear in the authorised attestation set")] + UnauthorisedIssuer, + #[error("the attached public key was not valid ed25519 public key")] MalformedEd25519PublicKey { source: Ed25519RecoveryError }, diff --git a/common/upgrade-mode-check/src/jwt.rs b/common/upgrade-mode-check/src/jwt.rs index 93be406ab2..060546f0bb 100644 --- a/common/upgrade-mode-check/src/jwt.rs +++ b/common/upgrade-mode-check/src/jwt.rs @@ -65,6 +65,12 @@ pub fn validate_upgrade_mode_jwt( .map_err(|source| UpgradeModeCheckError::JwtVerificationFailure { source })? .custom; + // jwt itself is cryptographically valid, + // but let's see if this entity has been permitted to issue the token in the first place + if !attestation.authorised_to_issue_jwt(&ed25519_pub_key) { + return Err(UpgradeModeCheckError::UnauthorisedIssuer); + } + Ok(attestation) } @@ -73,6 +79,7 @@ mod tests { use super::*; use crate::generate_new_attestation; use nym_crypto::asymmetric::ed25519; + use nym_test_utils::helpers::deterministic_rng; #[test] fn generate_and_validate_jwt() { @@ -86,15 +93,25 @@ mod tests { 2, 52, 215, 241, 219, 200, 18, 159, 241, 76, 111, 42, 32, ]) .unwrap(); - let keys = ed25519::KeyPair::from(jwt_key); + let jwt_keys = ed25519::KeyPair::from(jwt_key); - let attestation = generate_new_attestation(&attestation_key); + let mut rng = deterministic_rng(); + let unauthorised_jwt_keys = ed25519::KeyPair::new(&mut rng); + + let attestation = generate_new_attestation(&attestation_key, vec![*jwt_keys.public_key()]); let jwt_issuer = generate_jwt_for_upgrade_mode_attestation( - attestation, + attestation.clone(), Duration::from_secs(60 * 60), - &keys, + &jwt_keys, Some("nym-credential-proxy"), ); + let unauthorised_jwt = generate_jwt_for_upgrade_mode_attestation( + attestation.clone(), + Duration::from_secs(60 * 60), + &unauthorised_jwt_keys, + Some("nym-credential-proxy"), + ); + // we expect 'nym-credential-proxy' issuer assert!(validate_upgrade_mode_jwt(&jwt_issuer, Some("nym-credential-proxy")).is_ok()); @@ -104,10 +121,15 @@ mod tests { // we expect another-issuer assert!(validate_upgrade_mode_jwt(&jwt_issuer, Some("another-issuer")).is_err()); + // the key is not in the authorised set inside the attestation + assert!( + validate_upgrade_mode_jwt(&unauthorised_jwt, Some("nym-credential-proxy")).is_err() + ); + let jwt_no_issuer = generate_jwt_for_upgrade_mode_attestation( attestation, Duration::from_secs(60 * 60), - &keys, + &jwt_keys, None, ); // we expect 'nym-credential-proxy' issuer diff --git a/common/upgrade-mode-check/src/lib.rs b/common/upgrade-mode-check/src/lib.rs index d0f952b361..36cbf43c91 100644 --- a/common/upgrade-mode-check/src/lib.rs +++ b/common/upgrade-mode-check/src/lib.rs @@ -6,8 +6,10 @@ pub(crate) mod error; pub(crate) mod jwt; pub use attestation::{ - UpgradeModeAttestation, attempt_retrieve, generate_new_attestation, - generate_new_attestation_with_starting_time, + UpgradeModeAttestation, generate_new_attestation, generate_new_attestation_with_starting_time, }; pub use error::UpgradeModeCheckError; pub use jwt::{generate_jwt_for_upgrade_mode_attestation, validate_upgrade_mode_jwt}; + +#[cfg(not(target_arch = "wasm32"))] +pub use attestation::attempt_retrieve_attestation; diff --git a/documentation/docs/pages/developers/concepts.mdx b/documentation/backup-pages/concepts.mdx.bak similarity index 100% rename from documentation/docs/pages/developers/concepts.mdx rename to documentation/backup-pages/concepts.mdx.bak diff --git a/documentation/docs/pages/developers/binaries.md b/documentation/backup-pages/old-dev-docs/binaries.md.bak similarity index 100% rename from documentation/docs/pages/developers/binaries.md rename to documentation/backup-pages/old-dev-docs/binaries.md.bak diff --git a/documentation/docs/pages/developers/clients.mdx b/documentation/backup-pages/old-dev-docs/clients.mdx.bak similarity index 100% rename from documentation/docs/pages/developers/clients.mdx rename to documentation/backup-pages/old-dev-docs/clients.mdx.bak diff --git a/documentation/docs/pages/developers/concepts/credentials.mdx b/documentation/backup-pages/old-dev-docs/credentials.mdx similarity index 100% rename from documentation/docs/pages/developers/concepts/credentials.mdx rename to documentation/backup-pages/old-dev-docs/credentials.mdx diff --git a/documentation/docs/pages/developers/rust/development-status.mdx b/documentation/backup-pages/old-dev-docs/development-status.mdx similarity index 100% rename from documentation/docs/pages/developers/rust/development-status.mdx rename to documentation/backup-pages/old-dev-docs/development-status.mdx diff --git a/documentation/backup-pages/old-dev-docs/integrations.mdx b/documentation/backup-pages/old-dev-docs/integrations.mdx new file mode 100644 index 0000000000..6937290ae5 --- /dev/null +++ b/documentation/backup-pages/old-dev-docs/integrations.mdx @@ -0,0 +1,40 @@ +import Box from '@mui/material/Box'; +import { Steps } from 'nextra/components' +import { Tabs } from 'nextra/components' +import { GitHubRepoSearch } from '../../code-snippets/mixfetchurl'; + +# Integration Options +Developers might want to either integrate a Mixnet client or just to interact with the blockchain. See the relevant section below. + +## Integrating Mixnet Functionality +There are several options available to developers wanting to embed a Nym client in their application code. + + + + <> + + Rust developers can rely on our Rust SDK to import Nym client functionality into their code. This can either be in the form of a standard message-based client, the `socks5` client, or the `TcpProxy` modules. + + We aim to expose at least the majority of this functionality via FFI to Go and C/C++. This is detailed alongside the Rust SDK components in the [Rust SDK docs](./rust). + + + + + <> + + Typescript and Javascript developers have several options avaliable to them: + - [`mixfetch`](./typescript/examples/mix-fetch) is an almost-dropin replacement for the `fetch` library. The best way to integrate Nym's `mixFetch` into your application will be where external network calls and RPC happens, for example, something in the lines of `sendRawTransaction` if you have an ETH-compatible wallet or `JsonRpcClient` if you use CosmJS. Although you can simply search for any JS `fetch` calls in your code (using our tool below) that are easily replaceable with `mixFetch`, keep in mind that `fetch` is not the only way to make `JSONRPC` or `XHR` calls. We advise to approach the integration process in a semantic way, searching for a module that is the common denominator for external communication in the codebase. Usually these are API controllers, middlewares or repositories. + + + + - Otherwise, a well-modularized JS/TS codebase should permit the integration of one of our other SDK components, which will allow more flexibility and control (or if your codebase is not using something that can be covered by `fetch` for networking). Read more about our different SDK components in the [TS SDK overview page](./typescript/overview). + + + + If your app is not written in any of the supported languages, you might still be able to send traffic through a standalone [socks5 client](./clients/socks5) but will have to think about packaging and bundling the client binary with e.g. a `systemd` file for autostart to run the client as a daemon. If you want to discuss FFI options reach out to us via our public dev channel. + + +## Interacting with Nyx +If instead of relying on the Mixnet you wish to interact with the Nyx chain, either as a payment processor or to get on-chain events, see [interacting with the chain](./chain). + +> Note that depending on your setup, you might already be able to combine interacting with the chain with using the Mixnet: check the options above for more. diff --git a/documentation/docs/pages/developers/concepts/required-architecture.md b/documentation/backup-pages/old-dev-docs/required-architecture.md similarity index 98% rename from documentation/docs/pages/developers/concepts/required-architecture.md rename to documentation/backup-pages/old-dev-docs/required-architecture.md index b12a791a9f..5be11e9a41 100644 --- a/documentation/docs/pages/developers/concepts/required-architecture.md +++ b/documentation/backup-pages/old-dev-docs/required-architecture.md @@ -1,5 +1,7 @@ # Required Application Architecture +**TODO once you;ve reworked you can probably just remove this** + Due to the fact that there are a lot of components that make up the Nym network (the Mixnet, Blockchain, etc) there is often confusion / misunderstandings about what is required to run application traffic through the Mixnet and take advantage of its various privacy properties. ## What do I need? diff --git a/documentation/docs/code-examples/sdk/typescript/mixfetch-example-code.mdx b/documentation/docs/code-examples/sdk/typescript/mixfetch-example-code.mdx index c9e9320462..85eb29277f 100644 --- a/documentation/docs/code-examples/sdk/typescript/mixfetch-example-code.mdx +++ b/documentation/docs/code-examples/sdk/typescript/mixfetch-example-code.mdx @@ -1,27 +1,26 @@ -```ts copy filename="mixFetchExample.tsx" -import React, { useState } from 'react'; -import CircularProgress from '@mui/material/CircularProgress'; -import Button from '@mui/material/Button'; -import TextField from '@mui/material/TextField'; -import Typography from '@mui/material/Typography'; -import Box from '@mui/material/Box'; -import { mixFetch } from '@nymproject/mix-fetch-full-fat'; -import Stack from '@mui/material/Stack'; -import Paper from '@mui/material/Paper'; -import type { SetupMixFetchOps } from '@nymproject/mix-fetch'; +```tsx copy filename="mixFetchExample.tsx" +import React, { useState } from "react"; +import CircularProgress from "@mui/material/CircularProgress"; +import Button from "@mui/material/Button"; +import TextField from "@mui/material/TextField"; +import Typography from "@mui/material/Typography"; +import Box from "@mui/material/Box"; +import { mixFetch } from "@nymproject/mix-fetch-full-fat"; +import Stack from "@mui/material/Stack"; +import Paper from "@mui/material/Paper"; +import type { SetupMixFetchOps } from "@nymproject/mix-fetch-full-fat"; -const defaultUrl = 'https://nym.com/favicon.svg'; -const args = { mode: 'unsafe-ignore-cors' }; +const defaultUrl = "https://nymtech.net/.wellknown/network-requester/exit-policy.txt"; +const args = { mode: "unsafe-ignore-cors" }; const mixFetchOptions: SetupMixFetchOps = { - preferredGateway: '6Gb7ftQdKveMjPyrxDXeAtfYAX7Zg5mVZHtnRC5MmZ1B', // with WSS - preferredNetworkRequester: - '8rRGWy54oC8drFL9DepMegBt2DLrsqQwCoHMXt9nsnTo.2XjCPVbb4FpQ9hNRcXwb9mTzEAVVk1zf1tcch3wdtNEA@6Gb7ftQdKveMjPyrxDXeAtfYAX7Zg5mVZHtnRC5MmZ1B', + preferredGateway: "2xU4CBE6QiiYt6EyBXSALwxkNvM7gqJfjHXaMkjiFmYW", // with WSS + // preferredNetworkRequester: + // "CTDxrcXgrZHWyCWnuCgjpJPghQUcEVz1HkhUr5mGdFnT.3UAww1YWNyVNYNWFQL1LaHYouQtDiXBGK5GiDZgpXkTK@2RFtU5BwxvJJXagAWAEuaPgb5ZVPRoy2542TT93Edw6v", mixFetchOverride: { requestTimeoutMs: 60_000, }, forceTls: true, // force WSS - extra: {}, }; export const MixFetch = () => { @@ -45,7 +44,7 @@ export const MixFetch = () => { }; return ( -
+
{ defaultValue={defaultUrl} onChange={(e) => setUrl(e.target.value)} /> - diff --git a/documentation/docs/code-examples/sdk/typescript/traffic-example-code.mdx b/documentation/docs/code-examples/sdk/typescript/traffic-example-code.mdx index 351e5bdbde..6631759392 100644 --- a/documentation/docs/code-examples/sdk/typescript/traffic-example-code.mdx +++ b/documentation/docs/code-examples/sdk/typescript/traffic-example-code.mdx @@ -1,15 +1,19 @@ ```ts copy filename="MixnetWASMClientExample.tsx" -import React, { useEffect, useState } from 'react'; -import { createNymMixnetClient, NymMixnetClient, Payload } from '@nymproject/sdk-full-fat'; -import Box from '@mui/material/Box'; -import CircularProgress from '@mui/material/CircularProgress'; -import Paper from '@mui/material/Paper'; -import Typography from '@mui/material/Typography'; -import Stack from '@mui/material/Stack'; -import TextField from '@mui/material/TextField'; -import Button from '@mui/material/Button'; +import React, { useEffect, useState } from "react"; +import { + createNymMixnetClient, + NymMixnetClient, + Payload, +} from "@nymproject/sdk-full-fat"; +import Box from "@mui/material/Box"; +import CircularProgress from "@mui/material/CircularProgress"; +import Paper from "@mui/material/Paper"; +import Typography from "@mui/material/Typography"; +import Stack from "@mui/material/Stack"; +import TextField from "@mui/material/TextField"; +import Button from "@mui/material/Button"; -const nymApiUrl = 'https://validator.nymtech.net/api'; +const nymApiUrl = "https://validator.nymtech.net/api"; export const Traffic = () => { const [nym, setNym] = useState(); @@ -17,27 +21,31 @@ export const Traffic = () => { const [recipient, setRecipient] = useState(); const [payload, setPayload] = useState(); const [receivedMessage, setReceivedMessage] = useState(); + const [buttonEnabled, setButtonEnabled] = useState(false); const init = async () => { const client = await createNymMixnetClient(); setNym(client); + // start the client and connect to a gateway await client?.client.start({ clientId: crypto.randomUUID(), nymApiUrl, forceTls: true, // force WSS }); + // check when is connected and set the self address client?.events.subscribeToConnected((e) => { const { address } = e.args; setSelfAddress(address); }); + // show whether the client is ready or not client?.events.subscribeToLoaded((e) => { - console.log('Client ready: ', e.args); + console.log("Client ready: ", e.args); }); - + // show message payload content when received client?.events.subscribeToTextMessageReceivedEvent((e) => { console.log(e.args.payload); setReceivedMessage(e.args.payload); @@ -48,7 +56,8 @@ export const Traffic = () => { await nym?.client.stop(); }; - const send = () => nym.client.send({ payload, recipient }); + const send = () => + payload && recipient && nym?.client.send({ payload, recipient }); useEffect(() => { init(); @@ -57,9 +66,17 @@ export const Traffic = () => { }; }, []); + useEffect(() => { + if (recipient && payload) { + setButtonEnabled(true); + } else { + setButtonEnabled(false); + } + }, [recipient, payload]); + if (!nym || !selfAddress) { return ( - + ); @@ -67,10 +84,10 @@ export const Traffic = () => { return ( - + My self address is: - {selfAddress || 'loading'} + {selfAddress || "loading"} Communication through the Mixnet { placeholder="Message to send" multiline rows={4} - onChange={(e) => setPayload({ message: e.target.value, mimeType: 'text/plain' })} + onChange={(e) => + setPayload({ message: e.target.value, mimeType: "text/plain" }) + } size="small" /> - {receivedMessage && ( - + Message Received! {receivedMessage} diff --git a/documentation/docs/components/mix-fetch.tsx b/documentation/docs/components/mix-fetch.tsx index 252dcc1d1c..a7b51c3b9d 100644 --- a/documentation/docs/components/mix-fetch.tsx +++ b/documentation/docs/components/mix-fetch.tsx @@ -9,13 +9,12 @@ import Stack from "@mui/material/Stack"; import Paper from "@mui/material/Paper"; import type { SetupMixFetchOps } from "@nymproject/mix-fetch-full-fat"; -const defaultUrl = "https://nym.com/favicon.svg"; +const defaultUrl = + "https://nymtech.net/.wellknown/network-requester/exit-policy.txt"; const args = { mode: "unsafe-ignore-cors" }; const mixFetchOptions: SetupMixFetchOps = { - preferredGateway: "6Gb7ftQdKveMjPyrxDXeAtfYAX7Zg5mVZHtnRC5MmZ1B", // with WSS - preferredNetworkRequester: - "8rRGWy54oC8drFL9DepMegBt2DLrsqQwCoHMXt9nsnTo.2XjCPVbb4FpQ9hNRcXwb9mTzEAVVk1zf1tcch3wdtNEA@6Gb7ftQdKveMjPyrxDXeAtfYAX7Zg5mVZHtnRC5MmZ1B", + preferredGateway: "q2A2cbooyC16YJzvdYaSMH9X3cSiieZNtfBr8cE8Fi1", mixFetchOverride: { requestTimeoutMs: 60_000, }, diff --git a/documentation/docs/components/operators/snippets/icmp.js b/documentation/docs/components/operators/snippets/icmp.js new file mode 100644 index 0000000000..e91ede7f12 --- /dev/null +++ b/documentation/docs/components/operators/snippets/icmp.js @@ -0,0 +1,2 @@ +export const ICMP = + "ICMP (Internet Control Message Protocol) is a network layer protocol used for sending error messages and operational information regarding network conditions. It is commonly utilized for diagnostic purposes, such as sending ping requests to check the reachability of a host. ICMP helps in managing and controlling network traffic by providing feedback about issues in the communication environment."; diff --git a/documentation/docs/components/operators/snippets/ipr.js b/documentation/docs/components/operators/snippets/ipr.js new file mode 100644 index 0000000000..51f39e1c94 --- /dev/null +++ b/documentation/docs/components/operators/snippets/ipr.js @@ -0,0 +1,3 @@ +export const IPR = + "IPR (IP Packet Router) is a component that routes packets to the Internet on behalf of clients within the Nym network. It uses multiplexed streams, NAT, and SURBs for anonymity."; + diff --git a/documentation/docs/components/operators/snippets/node-perf-mixnet.mdx b/documentation/docs/components/operators/snippets/node-perf-mixnet.mdx new file mode 100644 index 0000000000..4d96b6bb49 --- /dev/null +++ b/documentation/docs/components/operators/snippets/node-perf-mixnet.mdx @@ -0,0 +1,93 @@ +import { Callout } from 'nextra/components'; + + +## Mixnet: Node Performance Calculation + +Performance is a value between `0` and `1`. The final performance number is a result of multiplying [config score](#config-score-calculation) and [routing score](#routing-score-calculation). + + +> **node_performance = config_score \* routing_score** + + +Performance value is an average of last 24h. + + +All parameters regarding performance score can be browsed or pull live from: + +`https://validator.nymtech.net/api/v1/nym-nodes/annotation/` + +In case you don't know your nodes `NODE_ID`, it's easy to find as long as your node is bonded. Visit [validator.nymtech.net/api/v1/nym-nodes/bonded](https://validator.nymtech.net/api/v1/nym-nodes/bonded) and search your node using `identity_key` or bonding Nyx account address (denoted as `owner`). + + +### Config Score Calculation + +Config score is in place to ensure that the node configuration is done properly so the node is eligible for taking part in Nym network. The API looks into these paramteres: + +1. If the node binary is `nym-node` (not legacy `nym-mixnode` or `nym-gateway`): `1` if `True`, `0` if `False` +2. If [Terms & Conditions](/operators/nodes/nym-node/setup.mdx#terms--conditions) are accepted: `1` if `True`, `0` if `False` +3. If the nodes self described endpoint is available: `1` if `True`, `0` if `False` +4. Version of `nym-node` binary: decreasing weight for outdated versions, as [explained below](#versions-behind-calculation) + +**The `config_score` calculation formula:** + + +> **config_score = is_tc_accepted \* is_nym-node_binary \* self_described_api_available \* ( 0.995 ^ ( ( X * versions_behind) ^ 1.65 ) )** + + +First three points have binary values of either `0` or `1`, with a following logic: + +| **Run `nym-node` binary** | **T&C's accepted** | **Self described available** | **Value** | +| :-- | :-- | :-- | ---: | +| **True** | **True** | **True** | **1** | +| True | False | False | 0 | +| True | True | False | 0 | +| False | True | True | 0 | +| False | False | True | 0 | +| True | False | True | 0 | +| False | False | False | 0 | +| False | True | False | 0 | + +**Only if ALL conditions above are `True` the node can have any chance to be selected, as otherwise the probability will always be 0.** + + +Besides these values, the API also checks whether the node is bonded in Mixnet smart contract as a Nym Node or legacy node (Mixnode or Gateway). **Only nodes bonded as Nym Node in Mixnet smart contract can be selected to the Rewrded set. Thus, if you haven't migrated your node yet, please [follow these steps](/operators/nodes/nym-node/bonding#migrate-to-nym-node-in-mixnet-smart-contract)!** + + +#### Versions Behind Calculation + +From release `2024.14-crunch` (`nym-node v1.2.0`), the `config_score` parameter takes into account also nodes version (denoted as `versions_behind`). The "current version" is the one marked as `Latest` in the [repository](https://github.com/nymtech/nym/releases/). The parameter `versions_behind` indicates the number of versions between the `Latest` version and the version run by the node, and it is factored into the config score with this formula: + + +> **0.995 ^ ( ( X * versions_behind ) ^ 1.65 )** +> +> where:
+> **X = 1; for patches**
+> **X = 10; for minor versions**
+> **X = 100; for major versions** +
+ +> The exact parameters are live accessible on [`/v1/status/config-score-details`](https://validator.nymtech.net/api/swagger/index.html#/Status/config_score_details). + +Our versioning convention is: `major_version . minor_version . patch` + +For example `nym-node` on version `1.2.0` is on 1st major version, 2nd minor and 0 patches. + +Note that the `X` multiplier heavily lowers the `config_score` when nodes are outdated with respect to more significant updates. See the the table and graph below: + +| **Version behind** | **Patches (X = 1)** | **Minor versions (X = 10)** | **Major versions (X = 100)** | +| :-- | --: | --: | --: | +| 0 (current version) | 1.0 | 1.0 | 1.0 | +| 1 | 0.995 | 0.7994 | 0.0000 | +| 2 | 0.9844 | 0.4953 | 0.0000 | +| 3 | 0.9698 | 0.2536 | 0.0000 | +| 4 | 0.9518 | 0.1102 | 0.0000 | +| 5 | 0.9311 | 0.0413 | 0.0000 | + + +![](/images/operators/tokenomics/reward_version_graph.png) + +As you can see above, the algorithm is designed to give maximum selection score (`1`) to the latest version, while non-upgraded nodes receive a lower score. The score decreases faster when the node has failed to make a major version upgrade, and slower when the node is behind only with minor updates. This scoring de-prioritizes the selection of outdated nodes, even if their saturation and performance are high. Nodes are selected probabilistically in each epoch (60 min), according to their scores, to be part of the Rewarded set. This scoring mechanism gives priority to the operators running up-to-date nodes, ensuring that the network is as updated as possible. + +### Routing Score Calculation + +Routing score is measured by Nym Network Monitor which sends thousands of packages through different routes every 15 minutes and measures how many were dropped on the way. Test result represents percentage of packets succesfully returned which are then converted into floats bettween `0` and `1`. diff --git a/documentation/docs/components/operators/snippets/node-perf-wg.mdx b/documentation/docs/components/operators/snippets/node-perf-wg.mdx new file mode 100644 index 0000000000..edc6992450 --- /dev/null +++ b/documentation/docs/components/operators/snippets/node-perf-wg.mdx @@ -0,0 +1,223 @@ +import { Callout } from 'nextra/components'; +import { Steps } from 'nextra/components'; +import { Green, Yellow, Red, Gray } from 'components/severity.jsx' +import { IPR } from 'components/operators/snippets/ipr.js'; +import { ICMP } from 'components/operators/snippets/icmp.js'; + +## WireGuard: Gateways Performance Calculation + +> If you are looking for a page with a guide to run your own `gateway-probe` instance, go [here](/operators/performance-and-testing/gateway-probe). + + +**Note that there is only one binary `nym-node` for [all network functionalities](/operators/nodes/nym-node/setup#functionality-mode) (defined by a positional argument `--mode`).** + +When we say *Exit Gateway* in connection to Wireguard, we talk about a `nym-node` running in a mode Exit Gateway (`--mode exit-gateway`) with Wireguard enabled. Such node is listed in [NymVPN application](https://nym.com) as an Exit Gateway and an Entry Gateway for both dVPN (2-hop) and Mixnet (5-hop) options. That's because every Exit Gateway can serve as an Entry, not vice versa for Mixnet and every Gateway with Wireguard enabled option (`--wireguard-enabled true`) can always serve as both Entry and Exit for dVPN (provided that they are correctly [configured](/operators/nodes/nym-node/configuration)). + + +**Please note that even the most perfectly configured Gateway, running on the strongest machine may not always be listed as a suggested node in the app. If you are interested to learn the details why, check out the [Gateway Probe Details page](/operators/performance-and-testing/gateway-probe-details).** + +### Summary + +A simplified explanation of node performance measuring is that the [Node Status API](https://node-status.nym.com) runs [gateway probes](/operators/performance-and-testing/gateway-probe) that connect to gateways to: + +- Check the configuration of gateways + - Checks a list of capabilities (e.g. can route IPv4 traffic in mixnet mode) + - Checks a list of configuration (e.g. runs IPR, has exit policy) +- Acts like a user: + - Registers a mixnet client + - Registers a wireguard peer and tops up bandwidth with a zk-nym + - Sends ICMP ping packets + - Downloads files + +The results are collected and stored in the [Node Status API](https://node-status.nym.com) and can be also veiwed per node in [Node Status Observatory](https://harbourmaster.nymtech.net). + +The [NymVPN API directory](https://nymvpn.com/api/public/v1/directory/gateways) cache uses the output of the gateway probes to calculate and display hints to users about the contention on each gateway and what they might expect if they use the gateway. The section [*Gateway Roles & Requirements* below](#gateway-roles--requirements) explains how are these stats measured and what is their significance. + +### Performance Score + +Gateways are listed in NymVPN application displaying various stats. + +![](/images/operators/nym-vpn-sceenshots/nym-vpn-score1.png) + +There are four colored score bars. + +![](/images/operators/nym-vpn-sceenshots/nym-vpn-score2.png) + +This is how they are defined: + + + +###### 1. Overall performance: + +Calculated by mixnet performance score multiplied by WireGuard performance, this is the formula: + +> **mixnet_performance * (download_speed_score * ping_ips_performance_v4)** + +- High: `> 75%` +- Medium: `> 50%` +- Low: > `10%` +- Offline: `≤ 10%` + +- **Download speed scoring:** + +> **\> 5 Mbps = 1.0**
+> **\> 2 Mbps = 0.75**
+> **\> 1 Mbps = 0.5**
+> **\> 0.5 Mbps = 0.25**
+> **otherwise = 0.1** +
+ +###### 2. Server Load: + +A load indicator based on ping success + +- Low: `> 80%` ping success (low load) +- Medium: `> 40%` ping success (medium load) +- High: `≤ 40%` ping success (node under stress, high load) + +###### 3. Uptime: + +A routing score of Mixnet (5-hop) is indicated this way: +- High: `> 80%` mixnet packet delivery success +- Medium: `> 60%` mixnet packet delivery success +- Low: `> 10%` mixnet packet delivery success +- Offline: `≤ 10%` mixnet packet delivery success + +
+ +Note that there are caches in place to keep various dept of details to provide info for different pieces of the software. Their timing differs and it can lead to small discrepancies of outcome in between multiple clients observed by users at the same time. + +See the [*Gateway Roles & Requirements*](#gateway-roles--requirements) to understand how these stats get measured. + + +You can find more details [directly in the code](https://github.com/nymtech/nym-vpn-client/blob/develop/nym-vpn-app/src/hooks/useScore.ts#L10). + + +### Gateway Roles & Requirements + +A node configuration break down coming alongside basic [server configuration](/operators/nodes/preliminary-steps/vps-setup) required for the nodes in specific roles: + +- **Entry Gateway - Mixnet:** + - Node configured (running with `--mode` argument) as `entry-gateway` or `exit-gateway` (as Exit works as Entry too) + - `WS/WSS` ports (9000/9001) accessible + - [IPv6 configured](/operators/nodes/nym-node/configuration#quick-ipv6-check) +- **Exit Gateway - Mixnet:** + - Node configured (running with `--mode` argument) as `exit-gateway`, that configuration ensures that: + - IPR address present + - NR address present + - [IPv6 configured](/operators/nodes/nym-node/configuration#quick-ipv6-check) + - NymTun configured - using [NetworkTunnelManager](/operators/nodes/nym-node/configuration#routing-configuration) + +- **Entry & Exit Gateway - dVPN (WireGuard mode):** + - Node configured as Wireguard node: `--wireguard-enabled true` + - Authenticator address present + - NymWG configured - using [NetworkTunnelManager](/operators/nodes/nym-node/configuration#routing-configuration) + - [Metadata port open for WG](/operators/nodes/nym-node/configuration#fixing-metadata-port-showing-not-open-in-probe-results) + - Wireguard exit policy [configured](/operators/nodes/nym-node/configuration#wireguard-exit-policy-configuration) + - [IPv6 configured](/operators/nodes/nym-node/configuration#quick-ipv6-check) + - Recommended: [QUIC bridge setup](/operators/nodes/nym-node/configuration#quic-transport-bridge-deployment) + +### How Probe Works + +Nym Gateway probe is perfomance measurement program running tests through various routes. Operators can run their [local instance of Gateway probe](/operators/performance-and-testing/gateway-probe) or use visit of our dashboards to conveniently see probe results. + +- [Node Status dashboard](https://node-status.nym.com/dvpn): Shows latest probe results on one board +- [Nym Node Status Observatory](https://harbourmaster.nymtech.net): New version of a good old Nym Harbourmaster, allowing operators preview stats of each node + +The following sections explain what is measured in order to collect stats to the [API enpoint](https://nymvpn.com/api/public/v1/directory/gateways) and in the section [*Complete Setup Checklist*](#complete-setup-checklist) below you can see the order of measurements. + +#### Entry Gateway - Mixnet (5-hop) + +**Tests:** + +- `can_connect`: Can connect to client WS/WSS endpoint (ports 9000/9001) +- `can_route`: Entry gateway correctly forwards packets into the mixnet + +**To Pass:** + +- Expose correct `WS` and or `WSS` ports (`9000`/ `9001`) +- Ensure DNS A/AAAA records resolve correctly +- Verify IPv6 is actually reachable (not just in DNS) +- Keep node online and monitor packet loss + +#### Exit Gateway (IPR) - Mixnet (5-hop) + +**Tests:** + +- `can_connect`: Can connect to IPR +- `can_route_ip_v4`: IPv4 routing works +- `can_route_ip_external_v4`: IPv4 routing to external internet works +- `can_route_ip_v6`: IPv6 routing works +- `can_route_ip_external_v6`: IPv6 routing to external internet works + +**To Pass:** + +- Ensure upstream routing and NAT allow both IPv4 and IPv6 traffic to external internet +- Check system firewall rules (bidirectional) +- Confirm outbound reachability to common external hosts on both stacks +- Run node with `mode=exit-gateway` - this by default includes entry-gateway mode. + +#### Gateways - WireGuard (dVPN / 2-hop) + +**Tests:** + +- `can_register`: Authentication flow completes successfully +- `can_handshake`: WireGuard handshake succeeds +- `can_resolve_dns`: DNS resolution works +- `can_query_metadata_v4`: Can query metadata endpoint +- `ping_hosts_performance` / `ping_ips_performance`: Latency and packet loss metrics + +**To Pass:** + +- Open WireGuard UDP port `51822` (public) +- Ensure metadata TCP port `51830` is accessible inside the WireGuard tunnel (at `10.1.0.1:51830`) for bandwidth queries/topup +- Keep QUIC bridge (`UDP 4443`) healthy if deployed +- Reduce server latency/jitter (depends on provider and location) +- Ensure DNS resolvers are reliable +- Pass the `--wireguard-enabled true` flag in the node config + +### Probe Freshness + +- Probes run continuously; each node is typically tested every ~2 hours +- If a probe fails or times out, the gateway will have stale probe data until the next successful probe completes +- `last_updated_utc`: Timestamp indicating when the last successful probe test completed + +See [*Complete Setup Checklist*](#complete-setup-checklist) to understand the order of tests. + +### Complete Setup Checklist + +**If one test fails, the following points don't get checked!** + +#### On-Chain & Configuration + +- [ ] [Bonded on-chain](/operators/nodes/nym-node/bonding) with [correct role](/operators/nodes/nym-node/setup#functionality-mode) (`exit-gateway`) and correct ports opened exposed +- [ ] Self-description endpoint is reachable +- [ ] [T&Cs accepted](/operators/nodes/nym-node/setup#terms--conditions) + +#### Network & Ports + +- [ ] **Mixnet**: Port `1789` (mixnet) accessible; ports `9000` (`WS`) and `9001` (`WSS`) accessible with valid [TLS for WSS](/operators/nodes/nym-node/configuration/proxy-configuration#reverse-proxy-configuration) +- [ ] [**QUIC bridge**](/operators/nodes/nym-node/configuration#quic-transport-bridge-deployment) (if used): UDP 4443 with valid addresses and SNI host +- [ ] [**WireGuard**](/operators/nodes/nym-node/configuration#routing-configuration): `UDP 51822` open (public); `TCP 51830` accessible [inside WireGuard tunnel](/operators/nodes/nym-node/configuration#fixing-metadata-port-showing-not-open-in-probe-results) (`10.1.0.1:51830`); `--wireguard-enabled true` set in node config +- [ ] **Exit (IPR)**: [IPv4 and IPv6](/operators/nodes/nym-node/configuration#routing-configuration) routing to external internet configured +- [ ] **DNS**: A/AAAA records correct; IPv6 actually reachable (test, don't just add DNS) + +#### Performance Targets + +- [ ] Achieve `≥ 60%` mixnet performance (Medium) +- [ ] Aim for `≥ 80%` (High) for optimal visibility +- [ ] Keep latency and packet loss low (excessive load reduces performance scores) +- [ ] Keep uptime high (network monitor tracks this) + +#### Probe Results (Verify All Pass) + +- [ ] Entry: `can_connect=true` and `can_route=true` +- [ ] Exit: `can_connect=true` and all v4/v6 routing flags are `true` +- [ ] WireGuard: `can_register`, `can_handshake`, `can_resolve_dns`, and `can_query_metadata_v4` all pass; ping metrics good + +#### Recommended + +- [ ] [WSS enabled](/operators/nodes/nym-node/configuration/proxy-configuration) (connections may fail on clients if only WS is available) +- [ ] [QUIC bridge](/operators/nodes/nym-node/configuration#quic-transport-bridge-deployment) operational (ensures your node appears when users enable QUIC only filter on the app) +- [ ] Accurate geo/IP information (country/region/residential filters rely on this) +- [ ] Stay on most recent supported binary version - [old versions are penalised](/operators/performance-and-testing#versions-behind-calculation) diff --git a/documentation/docs/components/operators/snippets/quic-bridge-deployment-script-setup.mdx b/documentation/docs/components/operators/snippets/quic-bridge-deployment-script-setup.mdx index 90a367d3c4..592269d728 100644 --- a/documentation/docs/components/operators/snippets/quic-bridge-deployment-script-setup.mdx +++ b/documentation/docs/components/operators/snippets/quic-bridge-deployment-script-setup.mdx @@ -3,7 +3,7 @@ import { Callout } from 'nextra/components'; import { AccordionTemplate } from 'components/accordion-template.tsx'; -**QUIC bridge is a requirement for all nodes which enable Wireguard functionality. Note that it this feature is compatible with nodes from `v1.18.0` (platform release [`v2025.17-isabirra`](https://github.com/nymtech/nym/releases/tag/nym-binaries-v2025.17-isabirra)) and newer!** +**QUIC bridge is a requirement for all nodes which enable Wireguard functionality. Note that it this feature is compatible with nodes from `v1.19.0` (platform release [`v2025.18-jarlsberg`](https://github.com/nymtech/nym/releases/tag/nym-binaries-v2025.17-isabirra)) and newer!** Nym Network uses various [transport bridges](https://github.com/nymtech/nym-bridges/blob/main/README.md) for routing the packets. Right now operators need to configure [our implementation](https://github.com/nymtech/nym-bridges/tree/main/nym-bridge) of general-purpose transport layer network protocol called [QUIC](https://en.wikipedia.org/wiki/QUIC). @@ -12,17 +12,20 @@ Operators can use [Nym Bridge Configuration Tool](https://github.com/nymtech/nym **We recommend a more convenient QUIC bridge deployment using a script [`quic_bridge_deployment.sh`](https://github.com/nymtech/nym/blob/develop/scripts/nym-node-setup/quic_bridge_deployment.sh), following the steps below.** + +This script assumes that you follow the convention of running a `nym-node` as `root`. In case you run as a [non-root user](/operators/nodes/nym-node/configuration#running-nym-node-as-a-non-root), please follow [manual QUIC bridge setup](https://github.com/nymtech/nym-bridges/blob/main/README.md) and ask for support in the [Matrix channel](https://matrix.to/#/#operators:nymtech.chat). + + ###### 1. Download [`quic_bridge_deployment.sh`](https://github.com/nymtech/nym/blob/develop/scripts/nym-node-setup/quic_bridge_deployment.sh) script - SSH to your server - **Run as root** - Download the script and make executable ```sh -wget https://raw.githubusercontent.com/nymtech/nym/refs/heads/develop/scripts/nym-node-setup/quic_bridge_deployment.sh && \ +curl -L https://raw.githubusercontent.com/nymtech/nym/refs/heads/develop/scripts/nym-node-setup/quic_bridge_deployment.sh -o quic_bridge_deployment.sh && \ chmod +x quic_bridge_deployment.sh ``` - ###### 2. Run the script with `full_bridge_setup` command - Optional: open `tmux` in case you will need to run another commands on the VPS - Run the script with a command `full_bridge_setup` @@ -31,18 +34,21 @@ chmod +x quic_bridge_deployment.sh ``` ###### 3. Follow the interactive prompts -- When you are asked for bridge binary URL, look here for one to match your system: [builds.ci.nymte.ch/QUIC](https://builds.ci.nymte.ch/QUIC/) -- When you are asked to enter forward address, it's your IPv4 used for bonding the node, alongside port `:51822` (an example: `172.232.238.161:51822`) -- To find out your IP address you can always run: - - IPv4: `curl -4 https://ifconfig.co/ip` - - IPv6: `curl -6 https://ifconfig.co/ip` -- **For all prompts with default options, we highly recommend to stick to default (press enter)** +- Make sure you don't just press enter to insert default values if your setup is different, for example in case of path to the config file -###### 4. Restart the node service +###### 4. Validate + +- After running the script, ensure that the bridges are running correctly: +```sh +systemctl status nym-bridge.service +``` + +###### 5. Restart `nym-node` service - When done with the deployment, please restart your node systemd service ```sh service nym-node restart && journalctl -u nym-node.service -f --all ``` + Congratulation, you deployed QUIC transport bridge! The script offers a standalone tweaks and checks, you can always run it without any argument to see all the options: @@ -53,51 +59,27 @@ Congratulation, you deployed QUIC transport bridge! The script offers a standalo ```shell root@localhost:~# ./quic_bridge_deployment.sh -iptables-persistent is already installed. -Usage: ./quic_bridge_deployment.sh [command] [options] +Logs are being saved locally to: /var/log/nym-bridge-helper.log +These logs never leave your machine. -Nym QUIC Bridge Deployment Helper Script -Bridge Installation & Configuration: - check_bridge_installation - Check bridge installation status - show_bridge_config - Display bridge configuration files - show_bridge_keys - Display bridge key information - show_bridge_info - Show comprehensive bridge information - verify_bridge_prerequisites - Verify all prerequisites are met +Usage: ./quic_bridge_deployment.sh [command] -Bridge Setup Commands: - install_bridge_binary - Download and install nym-bridge binary - generate_bridge_keys - Generate ED25519 bridge identity keys - create_client_params - Create client_bridge_params.json - create_bridge_config - Create bridges.toml configuration - create_bridge_service - Create systemd service file - full_bridge_setup - Interactive full bridge setup wizard +Commands: + full_bridge_setup - Run full setup + install_bridge_binary - Install nym-bridge (.deb; falls back to source build if libc too old) + install_bridge_cfg_tool - Install bridge-cfg (prebuilt; falls back to source build if libc too old) + run_bridge_cfg_generate - Generate bridges.toml + create_bridge_service - Setup systemd service (respects .deb-provided service) + adjust_ip_forwarding - Enable forwarding + apply_bridge_iptables_rules - NAT rules + configure_dns_and_icmp - Allow ICMP/DNS -Network Configuration Commands: - adjust_ip_forwarding - Enable IPv4 and IPv6 forwarding - apply_bridge_iptables_rules - Apply iptables rules for QUIC bridge (nymwg) - configure_dns_and_icmp - Allow ICMP ping tests and configure DNS - remove_duplicate_bridge_rules - Remove duplicate iptables rules for nymwg -Network Inspection Commands: - fetch_and_display_ipv6 - Show IPv6 on default network device - fetch_wg_ipv6_address - Fetch IPv6 for nymwg interface - check_bridge_iptables - Check iptables rules for nymwg - check_ipv6_ipv4_forwarding - Check IPv4 and IPv6 forwarding status - check_ip_routing - Display IP routing tables - -Testing Commands: - perform_pings - Test IPv4 and IPv6 connectivity - test_bridge_connectivity - Comprehensive bridge connectivity test - -Service Management Commands: - check_bridge_service_status - Check nym-bridge and nym-node service status - show_bridge_logs [lines] - Show recent nym-bridge logs (default: 50 lines) - -Quick Start: - 1. Run 'verify_bridge_prerequisites' to check prerequisites - 2. Run 'check_bridge_installation' to verify installation - 3. Run 'test_bridge_connectivity' to test connectivity +------------------------------------------ +Script exited with errors (code: 1). +Check the log at: /var/log/nym-bridge-helper.log +------------------------------------------ ``` @@ -105,7 +87,9 @@ Quick Start: If you have followed the steps outlined above, but the metadata port is not shown as open in either the Node Status API's probe results or an explorer that gets its data from the API, see below: -###### 1. +**Run as root** + +###### 1. Confirm correct `config.toml` private IPv4 address Ensure that in your `config.toml` file, this value is set to the default one - any other value here will cause the metadata endpoint to fail: ``` @@ -116,7 +100,7 @@ private_ipv4 = '10.1.0.1' Then restart your node. -###### 2. +###### 2. Open the needed port Run this command if not already done: ``` ufw allow in on nymwg to any port 51830 proto tcp @@ -132,7 +116,7 @@ Then ensure the metadata endpoint is listening from the correct address with: netstat -an | egrep LISTEN | egrep "51830" ``` -###### 3. +###### 3. Validate the setup Once the Node Status API has run a probe on your node, the probe results will reflect this - `can_query_metadata_v4` will have `true` as a value. The quickest way to check this is by using the [NymVPN API](https://nymvpn.com/api/public/v1/directory/gateways?show_vpn_only=true) and checking the same field: diff --git a/documentation/docs/components/outputs/api-scraping-outputs/circulating-supply.json b/documentation/docs/components/outputs/api-scraping-outputs/circulating-supply.json index 4b71af2328..af384ffeb7 100644 --- a/documentation/docs/components/outputs/api-scraping-outputs/circulating-supply.json +++ b/documentation/docs/components/outputs/api-scraping-outputs/circulating-supply.json @@ -5,7 +5,7 @@ }, "mixmining_reserve": { "denom": "unym", - "amount": "180875972213757" + "amount": "178754510529387" }, "vesting_tokens": { "denom": "unym", @@ -13,6 +13,6 @@ }, "circulating_supply": { "denom": "unym", - "amount": "819124027786243" + "amount": "821245489470613" } } diff --git a/documentation/docs/components/outputs/api-scraping-outputs/nyx-outputs/circulating-supply.md b/documentation/docs/components/outputs/api-scraping-outputs/nyx-outputs/circulating-supply.md index e1811f4408..90ec4ff9ac 100644 --- a/documentation/docs/components/outputs/api-scraping-outputs/nyx-outputs/circulating-supply.md +++ b/documentation/docs/components/outputs/api-scraping-outputs/nyx-outputs/circulating-supply.md @@ -1 +1 @@ -819_124_027 +821_245_489 diff --git a/documentation/docs/components/outputs/api-scraping-outputs/nyx-outputs/epoch-reward-budget.md b/documentation/docs/components/outputs/api-scraping-outputs/nyx-outputs/epoch-reward-budget.md index cde61716af..c5ddf5f938 100644 --- a/documentation/docs/components/outputs/api-scraping-outputs/nyx-outputs/epoch-reward-budget.md +++ b/documentation/docs/components/outputs/api-scraping-outputs/nyx-outputs/epoch-reward-budget.md @@ -1 +1 @@ -5_024 +4_965 diff --git a/documentation/docs/components/outputs/api-scraping-outputs/nyx-outputs/stake-saturation.md b/documentation/docs/components/outputs/api-scraping-outputs/nyx-outputs/stake-saturation.md index 5a818ac526..d3afb9ba0a 100644 --- a/documentation/docs/components/outputs/api-scraping-outputs/nyx-outputs/stake-saturation.md +++ b/documentation/docs/components/outputs/api-scraping-outputs/nyx-outputs/stake-saturation.md @@ -1 +1 @@ -250_614 +251_263 diff --git a/documentation/docs/components/outputs/api-scraping-outputs/nyx-outputs/staking-target.md b/documentation/docs/components/outputs/api-scraping-outputs/nyx-outputs/staking-target.md index 8896188535..c20966a751 100644 --- a/documentation/docs/components/outputs/api-scraping-outputs/nyx-outputs/staking-target.md +++ b/documentation/docs/components/outputs/api-scraping-outputs/nyx-outputs/staking-target.md @@ -1 +1 @@ -60_147_392 +60_303_169 diff --git a/documentation/docs/components/outputs/api-scraping-outputs/nyx-outputs/staking_supply.md b/documentation/docs/components/outputs/api-scraping-outputs/nyx-outputs/staking_supply.md index 108b28c216..789ba81d93 100644 --- a/documentation/docs/components/outputs/api-scraping-outputs/nyx-outputs/staking_supply.md +++ b/documentation/docs/components/outputs/api-scraping-outputs/nyx-outputs/staking_supply.md @@ -1 +1 @@ -60_147_391 +60_303_168 diff --git a/documentation/docs/components/outputs/api-scraping-outputs/nyx-outputs/token-table.md b/documentation/docs/components/outputs/api-scraping-outputs/nyx-outputs/token-table.md index ed4f907b1b..3d811fa0d8 100644 --- a/documentation/docs/components/outputs/api-scraping-outputs/nyx-outputs/token-table.md +++ b/documentation/docs/components/outputs/api-scraping-outputs/nyx-outputs/token-table.md @@ -1,7 +1,7 @@ | **Item** | **Description** | **Amount in NYM** | |:-------------------|:------------------------------------------------------|--------------------:| | Total Supply | Maximum amount of NYM token in existence | 1_000_000_000 | -| Mixmining Reserve | Tokens releasing for operators rewards | 180_875_972 | +| Mixmining Reserve | Tokens releasing for operators rewards | 178_754_510 | | Vesting Tokens | Tokens locked outside of cicrulation for future claim | 0 | -| Circulating Supply | Amount of unlocked tokens | 819_124_027 | -| Stake Saturation | Optimal size of node self-bond + delegation | 250_614 | +| Circulating Supply | Amount of unlocked tokens | 821_245_489 | +| Stake Saturation | Optimal size of node self-bond + delegation | 251_263 | diff --git a/documentation/docs/components/outputs/api-scraping-outputs/reward-params.json b/documentation/docs/components/outputs/api-scraping-outputs/reward-params.json index 83380b5686..b1969e1f76 100644 --- a/documentation/docs/components/outputs/api-scraping-outputs/reward-params.json +++ b/documentation/docs/components/outputs/api-scraping-outputs/reward-params.json @@ -1,10 +1,10 @@ { "interval": { - "reward_pool": "180875972213757.135840914936141948", - "staking_supply": "60147391744900.170789956043539529", + "reward_pool": "178754510529387.687865580967403579", + "staking_supply": "60303168385204.800235781003503301", "staking_supply_scale_factor": "0.07342892", - "epoch_reward_budget": "5024332561.493253773358748226", - "stake_saturation_point": "250614132270.417378291483514748", + "epoch_reward_budget": "4965403070.260769107377249094", + "stake_saturation_point": "251263201605.02000098242084793", "sybil_resistance": "0.3", "active_set_work_factor": "10", "interval_pool_emission": "0.02" diff --git a/documentation/docs/components/outputs/api-scraping-outputs/time-now.md b/documentation/docs/components/outputs/api-scraping-outputs/time-now.md index d71df80a85..bd9b415e4a 100644 --- a/documentation/docs/components/outputs/api-scraping-outputs/time-now.md +++ b/documentation/docs/components/outputs/api-scraping-outputs/time-now.md @@ -1 +1 @@ -Thursday, October 30th 2025, 13:00:59 UTC +Thursday, November 13th 2025, 11:23:33 UTC diff --git a/documentation/docs/components/outputs/command-outputs/node-api-check-query-help.md b/documentation/docs/components/outputs/command-outputs/node-api-check-query-help.md index bfa068ddb0..999f3d4a6f 100644 --- a/documentation/docs/components/outputs/command-outputs/node-api-check-query-help.md +++ b/documentation/docs/components/outputs/command-outputs/node-api-check-query-help.md @@ -11,7 +11,7 @@ options: --no_routing_history Display node stats without routing history --no_verloc_metrics Display node stats without verloc metrics -m, --markdown Display results in markdown format - -o [OUTPUT], --output [OUTPUT] + -o, --output [OUTPUT] Save results to file (in current dir or supply with path without filename) ``` diff --git a/documentation/docs/components/severity.jsx b/documentation/docs/components/severity.jsx new file mode 100644 index 0000000000..393d97d798 --- /dev/null +++ b/documentation/docs/components/severity.jsx @@ -0,0 +1,12 @@ +export const Green = ({ children }) => ( + {children} +); +export const Yellow = ({ children }) => ( + {children} +); +export const Red = ({ children }) => ( + {children} +); +export const Gray = ({ children }) => ( + {children} +); diff --git a/documentation/docs/components/traffic.tsx b/documentation/docs/components/traffic.tsx index 0d298ffff6..120c2ffc2f 100644 --- a/documentation/docs/components/traffic.tsx +++ b/documentation/docs/components/traffic.tsx @@ -13,6 +13,7 @@ import TextField from "@mui/material/TextField"; import Button from "@mui/material/Button"; const nymApiUrl = "https://validator.nymtech.net/api"; +const preferredGateway = "q2A2cbooyC16YJzvdYaSMH9X3cSiieZNtfBr8cE8Fi1"; export const Traffic = () => { const [nym, setNym] = useState(); @@ -31,6 +32,7 @@ export const Traffic = () => { clientId: crypto.randomUUID(), nymApiUrl, forceTls: true, // force WSS + preferredGateway, }); // check when is connected and set the self address diff --git a/documentation/docs/next.config.js b/documentation/docs/next.config.js index 6d6a79257e..59613ca1e6 100644 --- a/documentation/docs/next.config.js +++ b/documentation/docs/next.config.js @@ -1108,22 +1108,22 @@ const config = { form-action 'self'; frame-ancestors 'none'; upgrade-insecure-requests; - connect-src 'self' https://github.com *.vercel.app *.nymtech.net *.nymvpn.com *.nymte.ch *.nyx.network *.nym.com https://nym.com nymvpn.com https://nymvpn.com *.nymtech.cc; + connect-src 'self' wss://nym-node-cli.devrel.nymte.ch:9001 https://github.com *.vercel.app *.nymtech.net *.nymvpn.com *.nymte.ch *.nyx.network *.nym.com https://nym.com nymvpn.com https://nymvpn.com *.nymtech.cc; frame-src 'self' https://vercel.live *.vercel.app *.nym.com https://nym.com; worker-src 'self' blob: https://vercel.live *.vercel.app *.nym.com https://nym.com; `; return [ { - source: '/(.*)', + source: "/(.*)", headers: [ { - key: 'Content-Security-Policy', + key: "Content-Security-Policy", value: csp.replace(/\s{2,}/g, " ").trim(), - } - ] - } - ] - } + }, + ], + }, + ]; + }, }; module.exports = config; diff --git a/documentation/docs/package.json b/documentation/docs/package.json index 8ff630dad4..c66bed7698 100644 --- a/documentation/docs/package.json +++ b/documentation/docs/package.json @@ -38,8 +38,8 @@ "@nextui-org/accordion": "^2.0.40", "@nextui-org/react": "^2.4.8", "@nymproject/contract-clients": ">=1.2.4-rc.2 || ^1", - "@nymproject/mix-fetch-full-fat": ">=1.2.4-rc.2 || ^1", - "@nymproject/sdk-full-fat": ">=1.2.4-rc.2 || ^1", + "@nymproject/mix-fetch-full-fat": ">=1.5.1-rc.0 || ^1.4.1", + "@nymproject/sdk-full-fat": ">=1.5.1-rc.0 || ^1.4.1", "@redocly/cli": "^1.25.15", "@types/mdx": "^2.0.13", "chain-registry": "^1.19.0", diff --git a/documentation/docs/pages/_meta.json b/documentation/docs/pages/_meta.json index 15f1b5e394..b3b6f66d1d 100644 --- a/documentation/docs/pages/_meta.json +++ b/documentation/docs/pages/_meta.json @@ -11,8 +11,8 @@ "type": "menu", "items": { "developers": { - "title": "Developer Overview", - "href": "/developers/" + "title": "Integrations", + "href": "/developers/integrations" }, "rust": { "title": "Rust SDK", diff --git a/documentation/docs/pages/developers/_meta.json b/documentation/docs/pages/developers/_meta.json index b3e5134275..65cfa18527 100644 --- a/documentation/docs/pages/developers/_meta.json +++ b/documentation/docs/pages/developers/_meta.json @@ -1,18 +1,28 @@ { "index": "Introduction", - "concepts": "Core Concepts", - "binaries": "Binaries", - "integrations": "Integration Options", - "clients": "Clients", - "tools": "Tools", - "nymvpncli": "Nym VPN CLI", - "chain": "Interacting with Nyx", "--": { - "type": "separator" + "type": "separator", + "title": "Mixnet Integrations" + }, + "integrations": "Overview - Start Here!", + "native": "Native Apps", + "browsers": "Browser Apps", + "concepts": "Nym-Specific Concepts for Integrations", + "-": { + "type": "separator", + "title": "SDKs" }, "rust": "Rust SDK", "typescript": "Typescript SDK", "---": { + "type": "separator", + "title": "Misc" + }, + "chain": "Interacting with Nyx Blockchain", + "tools": "Tools", + "nymvpncli": "Nym VPN CLI", + "clients": "Standlone Clients", + "----": { "type": "separator" }, "archive": "Archive", diff --git a/documentation/docs/pages/developers/browsers.mdx b/documentation/docs/pages/developers/browsers.mdx new file mode 100644 index 0000000000..b1b07f4edc --- /dev/null +++ b/documentation/docs/pages/developers/browsers.mdx @@ -0,0 +1,40 @@ +import { Callout } from 'nextra/components'; + +# Browser-Based Apps +Browsers are a very restricted environment to work in, with limited options for external communications (websockets, Web Transport API, WebRTC), mixed content restrictions (HTTPS-only), and no access to the file system or any syscalls. These aside, the main issue when trying to capture traffic and send it via a different transport - such as the Mixnet - is the lack of access to browser TLS negotiation from JS or the CA certificate store. + +This means that the functionality offered by our current browser-based solutions are quite restricted / specific. There are currently two options for interacting with the Mixnet from the browser: `mixFetch`, and the WASM SDK. + +![](/images/developers/nym-browser-arch.png) + +Both `mixFetch` and the WASM client are delivered to the client bundled into a web application. + +## mixFetch +Drop-in replacement for browser's `fetch` API that makes HTTP(S) requests via Exit Gateways using the SOCKS Network Requester. + +Uses an embedded CA certificate store to establish TLS session between `mixFetch` and the remote host, creating a client-host secure channel from the browser to the host over the Mixnet. + +Internally it uses the WASM client. + +- [docs](./typescript/start#mixfetch) +- [example](./typescript/playground/mixfetch) + + + + ### Current Limitations of `mixFetch` + + It cannot currently handle concurrent requests, and comes with a pre-bundled CA store. `mixFetchv2` - which will act more like a general-purpose userspace IP stack - is currently in development. + + + +## WASM Client +Makes Sphinx packets and cover traffic using WASM and sent over a Websocket to the Entry Gateway and receive responses. + +This only works in messaging mode (i.e. messages sent either as text or binary data), and currently doesn’t support making IP packets that are routed to the Internet by an Exit Gateway IPR, nor does it currently expose any stream-like API. If you want to send HTTP(S) requests, use `mixFetch`. + +Note that the limitations of CSPs and Mixed Content restrictions (i.e HTTPS only) apply to the Websocket connection as normal in browsers or embedded WebViews. + +Runs in a web worker to leave UI thread free for the user. + +- [docs](./typescript/start#mixnet-client) +- [example](./typescript/playground/traffic) diff --git a/documentation/docs/pages/developers/clients/_meta.json b/documentation/docs/pages/developers/clients/_meta.json index 4a9fdefe51..56e270ddad 100644 --- a/documentation/docs/pages/developers/clients/_meta.json +++ b/documentation/docs/pages/developers/clients/_meta.json @@ -1,5 +1,4 @@ { - "socks5": "Socks5 (standalone)", - "webassembly-client": "Webassembly Client", - "websocket": "Websocket (standalone)" + "socks5": "SOCKS Proxy", + "websocket": "Websocket" } diff --git a/documentation/docs/pages/developers/concepts/_meta.json b/documentation/docs/pages/developers/concepts/_meta.json deleted file mode 100644 index a2140d915b..0000000000 --- a/documentation/docs/pages/developers/concepts/_meta.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "required-architecture": "Required Architecture", - "messages": "Message Based Paradigm", - "message-queue": "Message Queue", - "credentials": "Credentials" -} diff --git a/documentation/docs/pages/developers/concepts/message-queue.md b/documentation/docs/pages/developers/concepts/message-queue.mdx similarity index 88% rename from documentation/docs/pages/developers/concepts/message-queue.md rename to documentation/docs/pages/developers/concepts/message-queue.mdx index 3fba96b77f..b5df5325d8 100644 --- a/documentation/docs/pages/developers/concepts/message-queue.md +++ b/documentation/docs/pages/developers/concepts/message-queue.mdx @@ -1,5 +1,11 @@ +import { Callout } from 'nextra/components' + # Message Queue + + Although good to understand how the Nym Client works under the hood, this information is only of practical use if you're using the `Mixnet` module of the RustSDK and interacting with the SDK Mixnet Client at a low level. This is all mostly abstracted away with the `MixSocket`, `MixStream`, and `IpMixStream` abstractions. + + ## Sphinx Packet Streams Clients, once connected to the Mixnet, **are always sending traffic into the Mixnet**; as well as the packets that you as a developer are sending from your application logic, they send [cover traffic](../../network/concepts/cover-traffic) at a constant rate defined by a Poisson process. This is part of the network's mitigation of timing attacks. diff --git a/documentation/docs/pages/developers/concepts/messages.mdx b/documentation/docs/pages/developers/concepts/messages.mdx deleted file mode 100644 index 5a019593c9..0000000000 --- a/documentation/docs/pages/developers/concepts/messages.mdx +++ /dev/null @@ -1,31 +0,0 @@ -# Message-based Paradigm - -## Message Format -For the moment, Mixnet clients work assuming they will be piped atomic messages looking something like this: - -``` -MixnetMessage { - Message: Message_Bytes, - To: Nym_Address, - Attached_SURBS: Number_Of_Surbs -} -``` - -That the client will then encrypt as Sphinx packets and send through the Mixnet. - -Likewise, they assume that once they have received and decrypted a Sphinx packet, they will kick back a reconstructed message to the rest of your app logic that look something like: - -``` -ReconstructedMessage { - Message: Message_Bytes, - From: SURB_Sender_Tag -} -``` - -This is obviously quite different to e.g. simply being able to read/write from a stream returned from a function call to create a TCP connection, but there are several approaches that developers can take to dealing with this right now. - -## Message Abstractions -- Rust/Go (and soon C++) developers can use the `TcpProxy` [stream abstraction](../rust/tcpproxy). -- Developers who are using Typescript/Javascript can also avoid having to deal directly with messages via using [MixFetch](../typescript/examples/mix-fetch). -- As can developers who are bundling and running the standalone [socks5 client](../clients/socks5) using some form of init script. -- There is a seperate pair of binaries which other developers can use to run as a persistent secondary proxy process built using the `TcpProxy` abstraction. These simply expose a `localhost` socket port to pipe traffic to and from in the same way as you would a TCP connection and can be found [here](https://github.com/nymtech/standalone-tcp-proxies). diff --git a/documentation/docs/pages/developers/index.mdx b/documentation/docs/pages/developers/index.mdx index 9f27706c0d..f1cdd88680 100644 --- a/documentation/docs/pages/developers/index.mdx +++ b/documentation/docs/pages/developers/index.mdx @@ -1,7 +1,2 @@ # Introduction Nym's developer documentation covering core concepts of integrating with the Mixnet, interacting with the Nyx blockchain, an overview of the avaliable tools, and our SDK docs. - -## Where to Start? -If you are completely new to Nym, it is suggested to start with the top sections covering the core concepts, integration options, and the clients and tools available to you. - -If you feel like starting with more practical examples, check out the relevent SDK docs in the sidebar to the left. diff --git a/documentation/docs/pages/developers/integrations.mdx b/documentation/docs/pages/developers/integrations.mdx index 6937290ae5..8568f7285a 100644 --- a/documentation/docs/pages/developers/integrations.mdx +++ b/documentation/docs/pages/developers/integrations.mdx @@ -1,40 +1,16 @@ -import Box from '@mui/material/Box'; -import { Steps } from 'nextra/components' -import { Tabs } from 'nextra/components' -import { GitHubRepoSearch } from '../../code-snippets/mixfetchurl'; +import { Callout } from 'nextra/components'; -# Integration Options -Developers might want to either integrate a Mixnet client or just to interact with the blockchain. See the relevant section below. +# Integrating With Nym +Any application that wants to integrate with Nym involves sending its application traffic through the Mixnet using one of the available Nym Clients. There is no single solution for this, as different environments offer different access and transport options (e.g. if operating in a web browser, you do not have access to syscalls or sockets, have to deal with content security policies, etc). -## Integrating Mixnet Functionality -There are several options available to developers wanting to embed a Nym client in their application code. +As such, we have several solutions available for developers to choose from depending on the **environment** their application is expected to run in: native apps which are running on a desktop, or webapps running in a browser. - - - <> + + The list of current options available to developers to do not cover all environments and setups - we are working on expanding this list and approaching more general solutions, but there is no one-size-fits-all approach when dealing with rerouting network traffic. + - Rust developers can rely on our Rust SDK to import Nym client functionality into their code. This can either be in the form of a standard message-based client, the `socks5` client, or the `TcpProxy` modules. +Integration options are then further subdivided by app **architecture**; whether the application interacts with remote hosts on the public internet running independently of the app (e.g. public blockchain RPC endpoints, third-party APIs) or whether app developers have some control over the versions of the software being run on both sides of an interaction (e.g. peer to peer apps running the same software version, or client-server architectures which are running software written by the same team). - We aim to expose at least the majority of this functionality via FFI to Go and C/C++. This is detailed alongside the Rust SDK components in the [Rust SDK docs](./rust). - - - - - <> - - Typescript and Javascript developers have several options avaliable to them: - - [`mixfetch`](./typescript/examples/mix-fetch) is an almost-dropin replacement for the `fetch` library. The best way to integrate Nym's `mixFetch` into your application will be where external network calls and RPC happens, for example, something in the lines of `sendRawTransaction` if you have an ETH-compatible wallet or `JsonRpcClient` if you use CosmJS. Although you can simply search for any JS `fetch` calls in your code (using our tool below) that are easily replaceable with `mixFetch`, keep in mind that `fetch` is not the only way to make `JSONRPC` or `XHR` calls. We advise to approach the integration process in a semantic way, searching for a module that is the common denominator for external communication in the codebase. Usually these are API controllers, middlewares or repositories. - - - - - Otherwise, a well-modularized JS/TS codebase should permit the integration of one of our other SDK components, which will allow more flexibility and control (or if your codebase is not using something that can be covered by `fetch` for networking). Read more about our different SDK components in the [TS SDK overview page](./typescript/overview). - - - - If your app is not written in any of the supported languages, you might still be able to send traffic through a standalone [socks5 client](./clients/socks5) but will have to think about packaging and bundling the client binary with e.g. a `systemd` file for autostart to run the client as a daemon. If you want to discuss FFI options reach out to us via our public dev channel. - - -## Interacting with Nyx -If instead of relying on the Mixnet you wish to interact with the Nyx chain, either as a payment processor or to get on-chain events, see [interacting with the chain](./chain). - -> Note that depending on your setup, you might already be able to combine interacting with the chain with using the Mixnet: check the options above for more. + + This is because of the different security considerations each option offers. These are detailed in the following pages. + diff --git a/documentation/docs/pages/developers/native.mdx b/documentation/docs/pages/developers/native.mdx new file mode 100644 index 0000000000..8fee54371f --- /dev/null +++ b/documentation/docs/pages/developers/native.mdx @@ -0,0 +1,86 @@ +import { Callout } from 'nextra/components'; + +# Native / Desktop Apps + +Developers wanting to integrate into desktop apps & CLIs can use our Rust SDK. There are two broad approaches to using the Mixnet (E2E or as a proxy), with different modules suited for each, each with their own specific usecase and limitations. + +## Option 1: Mixnet End-To-End +You might want to embed Nym Clients in both sides of your app, and have them send all of your app network traffic through the Mixnet: maybe two clients in a peer to peer setup, or a client and a server where it is possible for you as a developer to release both the client and server side code, and have some ability to make sure that it is being run. + +![](/images/developers/nym-arch-client-to-client.png) + +There are several options available: + +{ /* ### Stream Wrapper Module +Exposes `MixSocket`/`MixStream` abstractions that can be split a reader/writer halves that consumes bytes, with an interface inspired by `std::net::TcpStream`. For developers who just want to read/write bytes to/from the Mixnet working with something socket-like. + +- docs TODO LINK +- example TODO LINK */ } + +### Mixnet & Client Pool Modules +The Mixnet module of the SDK exposes low level connection functionality and the Mixnet Client. The Client Pool is one answer to concurrency, and allows developers to run several Nym Clients at once which can be quickly used. + +{ /* This approach might be useful if you want to build custom connection logic, but **`MixSocket`/`MixStream` will probably be sufficient for the majority of usecases** where developers just want to send and receive traffic as streams. */ } + +This approach might be useful if you want to build custom connection logic, but the TcpProxy Module will probably be sufficient for the majority of usecases where developers just want to send and receive traffic as streams. + +- [docs](./rust/mixnet) +- [examples](./rust/mixnet/examples) + +### TcpProxy Module +{ /* + This module has been superseded by the Stream Wrapper module, and will soon be deprecated. **New features will not be added to it.** The main drawback of this (which is fixed with `MixSocket`/`MixStream`) is that TLS is impossible, as it exposes a localhost port for the consuming process to communicate with. + */ } +A pair of abstractions built for use in a client-server setup, which both expose a `localhost` TCP Socket which apps can read/write bytes to/from. + +- [docs](./rust/tcpproxy) +- [examples](./rust/tcpproxy/examples/singleconn) + + + There is a new abstraction coming soon mirroring the interface and use of a TCP Socket, making it easier for developers to use the Mixnet, and also perform TLS through a Mixnet connection. Stay tuned. + + +## Option 2: Mixnet-As-Proxy +For developers who are only able to control the client-side code, and/or need to communicate with a 3rd party service, such as a public blockchain RPC or a remote host they do not control. + +![](/images/developers/nym-arch-ip-routing.png) + + + + ### Security Considerations + + Since traffic is only packaged as Sphinx until it gets to the Exit Gateway, where it is unwrapped into either HTTPS packets (by a Network Requester) or IP packets (by an IP Packet Router), the last hop between the Gateway and the remote host **travels as normal internet traffic**. + + As such, this option has fewer protections than the E2E option against a global passive adversary, but still grants you timing obfuscation and sender-receiver unlinkability between your client software and whatever service it is interacting with. + + +### SOCKS Client +Developers with apps that support SOCKS4,4a, or 5 can use the Socks Client exposed by the Mixnet module. This uses the Network Requester service of the chosen Exit Gateway to interact with the remote host via the chosen SOCKS proxy protocol. The Network Requester uses SURBs to anonymously reply to the original sender with whatever response it gets from the remote host. + +- [docs](./rust/mixnet/examples/socks) +- [example](./rust/mixnet/examples/socks) + + + There is a new abstraction coming soon that will allow the SDK to send IP packets, the beginning of a longer project to make a native Rust version of [`mixFetch`](./typescript/start#mixfetch). Stay tuned. + + + +{ /* ### `IPMixStream` +This is a version of the `MixSocket` that consumes IP packets before wrapping them in Sphinx and forwarding through the Mixnet to the IP Packet Router of the chosen Exit Gateway, where they are unwrapped and treated as normal IP packets. The IPR uses SURBs to anonymously reply to the original sender with whatever response it gets from the remote host. + + + Currently only consumes IP packets - those who do not want to work with IP packets directly should check `mixtcp` below for doing something with HTTP(S). + + +- docs TODO LINK +- examples TODO LINK + +### `MixTCP` +A proof of concept TCP/IP crate containing a [`smoltcp`](https://docs.rs/smoltcp/latest/smoltcp/index.html) `device` that uses the Mixnet for transport. Examples of using this to make a TLS handshake and perform an HTTPS request can be found linked below. + + + This crate is currently a proof of concept which is in active development. This crate will become the basis of a general-purpose HTTP-through-Mixnet crate in the near future. + + +- docs TODO LINK +- example TODO LINK */ } diff --git a/documentation/docs/pages/developers/rust.mdx b/documentation/docs/pages/developers/rust.mdx index db5aa11b61..d39707bb44 100644 --- a/documentation/docs/pages/developers/rust.mdx +++ b/documentation/docs/pages/developers/rust.mdx @@ -1,16 +1,3 @@ # Introduction - -import { Callout } from 'nextra/components'; - - - There will be a breaking SDK upgrade in the coming months. This upgrade will make the SDK a lot easier to build with. - -This upgrade will affect the interface of the SDK dramatically, and will be coupled with a protocol change - stay tuned for information on early access to the new protocol testnet. - -It will also be coupled with the documentation of the SDK on [crates.io](https://crates.io/). - - -The Rust SDK allows developers building applications in Rust to import and interact with Nym clients as they would any other dependency, instead of running the client as a separate process on their machine. - -Check the [development status](./rust/development-status) page to see the various modules that make up the SDK, and the [FFI](./rust/ffi) page for Go/C++ developers. +The Rust SDK allows exposes a few different modules, some more plug and play than others. Each of which handles exposes a Nym Client, which handles finding and using a route for packets through the Mixnet, encryption, and cover traffic, all under the hood. diff --git a/documentation/docs/pages/developers/rust/_meta.json b/documentation/docs/pages/developers/rust/_meta.json index dda7e68e20..5ce667aa28 100644 --- a/documentation/docs/pages/developers/rust/_meta.json +++ b/documentation/docs/pages/developers/rust/_meta.json @@ -1,8 +1,7 @@ { "importing": "Importing", - "development-status": "Development Status", - "mixnet": "Mixnet Module", "tcpproxy": "TcpProxy Module", - "client-pool": "Client Pool", + "mixnet": "Mixnet Module", + "client-pool": "Client Pool Module", "ffi": "FFI" } diff --git a/documentation/docs/pages/developers/rust/client-pool.mdx b/documentation/docs/pages/developers/rust/client-pool.mdx index 6c444ad9e8..70c3f54ca1 100644 --- a/documentation/docs/pages/developers/rust/client-pool.mdx +++ b/documentation/docs/pages/developers/rust/client-pool.mdx @@ -2,15 +2,6 @@ import { Callout } from 'nextra/components'; - - There will be a breaking SDK upgrade in the coming months. This upgrade will make the SDK a lot easier to build with. - -This upgrade will affect the interface of the SDK dramatically, and will be coupled with a protocol change - stay tuned for information on early access to the new protocol testnet. - - -It will also be coupled with the documentation of the SDK on [crates.io](https://crates.io/). - - We have a configurable-size Client Pool for processes that require multiple clients in quick succession (this is used by default by the [`TcpProxyClient`](./tcpproxy) for instance) This will be useful for developers looking to build connection logic, or just are using raw SDK clients in a sitatuation where there are multiple connections with a lot of churn. diff --git a/documentation/docs/pages/developers/rust/ffi.mdx b/documentation/docs/pages/developers/rust/ffi.mdx index 69ccfe3b75..349b298bc8 100644 --- a/documentation/docs/pages/developers/rust/ffi.mdx +++ b/documentation/docs/pages/developers/rust/ffi.mdx @@ -2,17 +2,6 @@ # FFI Bindings import { Callout } from 'nextra/components'; - - There will be a breaking SDK upgrade in the coming months. This upgrade will make the SDK a lot easier to build with. - -This upgrade will affect the interface of the SDK dramatically, and will be coupled with a protocol change - stay tuned for information on early access to the new protocol testnet. - -It will also be coupled with the documentation of the SDK on [crates.io](https://crates.io/). - - - We are working on the intitial versions of the FFI code to allow developers to experiment and get feedback. Please get in touch if you think the FFI bindings are lacking certain functionality. - - We currently have FFI bindings for Go and C/C++. See the table below to check the coverage of functionality we expect devs would like to see. The [`nym/sdk/ffi`](https://github.com/nymtech/nym/tree/master/sdk/ffi) directory has the following structure: @@ -50,7 +39,7 @@ At the time of writing the following functionality is not exposed to the shared - `Socks5::new()`: creation and use of the [socks5/4a/4 proxy client](./mixnet/examples/socks). ## TcpProxy Module -A connection abstraction which exposes a local TCP socket which developers are able to interact with basically as expected, being able to read/write to/from a bytestream, without really having to take into account the workings of the Mixnet/Sphinx/the [message-based](../concepts/messages) format of the underlying client. +A connection abstraction which exposes a local TCP socket which developers are able to interact with basically as expected, being able to read/write to/from a bytestream, without really having to take into account the workings of the Mixnet/Sphinx/the message-based format of the underlying client. At the time of writing this functionality is **only** exposed to Go. C/C++ bindings will follow in the future in a larger update to the C FFI. diff --git a/documentation/docs/pages/developers/rust/importing.mdx b/documentation/docs/pages/developers/rust/importing.mdx index fb487d9048..255b45f466 100644 --- a/documentation/docs/pages/developers/rust/importing.mdx +++ b/documentation/docs/pages/developers/rust/importing.mdx @@ -1,14 +1,6 @@ # Installation import { Callout } from 'nextra/components'; - - There will be a breaking SDK upgrade in the coming months. This upgrade will make the SDK a lot easier to build with. - -This upgrade will affect the interface of the SDK dramatically, and will be coupled with a protocol change - stay tuned for information on early access to the new protocol testnet. - -It will also be coupled with the documentation of the SDK on [crates.io](https://crates.io/). - - The `nym-sdk` crate is **not yet available via [crates.io](https://crates.io)**. As such, in order to import the crate you must specify the Nym monorepo in your `Cargo.toml` file. Since the `HEAD` of `master` is always the most recent release, we recommend developers use that for their imports, unless they have a reason to pull in a specific historic version of the code. ```toml diff --git a/documentation/docs/pages/developers/rust/mixnet.mdx b/documentation/docs/pages/developers/rust/mixnet.mdx index c6173329f1..0524619874 100644 --- a/documentation/docs/pages/developers/rust/mixnet.mdx +++ b/documentation/docs/pages/developers/rust/mixnet.mdx @@ -1,14 +1,6 @@ # Mixnet Module import { Callout } from 'nextra/components'; - - There will be a breaking SDK upgrade in the coming months. This upgrade will make the SDK a lot easier to build with. - -This upgrade will affect the interface of the SDK dramatically, and will be coupled with a protocol change - stay tuned for information on early access to the new protocol testnet. - -It will also be coupled with the documentation of the SDK on [crates.io](https://crates.io/). - - This module exposes the logic of creating and interacting with clients and Mixnet messages. This is recommended for those wanting to either start playing around with the Mixnet and how it works, or build connection logic. > For developers wanting something more 'plug and play' we recommend the [`TcpProxy` module](./tcpproxy). diff --git a/documentation/docs/pages/developers/rust/mixnet/examples/builders.mdx b/documentation/docs/pages/developers/rust/mixnet/examples/builders.mdx index fed758990b..3975a5aaac 100644 --- a/documentation/docs/pages/developers/rust/mixnet/examples/builders.mdx +++ b/documentation/docs/pages/developers/rust/mixnet/examples/builders.mdx @@ -1,11 +1,4 @@ # Builder Patterns import { Callout } from 'nextra/components'; - - There will be a breaking SDK upgrade in the coming months. This upgrade will make the SDK a lot easier to build with. - -This upgrade will affect the interface of the SDK dramatically, and will be coupled with a protocol change - stay tuned for information on early access to the new protocol testnet. - -It will also be coupled with the documentation of the SDK on [crates.io](https://crates.io/). - Since there are two ways of creating an SDK client - ephemeral and with-storage - then there are two ways of applying the Builder Pattern to client creation. diff --git a/documentation/docs/pages/developers/rust/mixnet/examples/builders/builder-with-storage.mdx b/documentation/docs/pages/developers/rust/mixnet/examples/builders/builder-with-storage.mdx index 0d86bea5dc..07966916bf 100644 --- a/documentation/docs/pages/developers/rust/mixnet/examples/builders/builder-with-storage.mdx +++ b/documentation/docs/pages/developers/rust/mixnet/examples/builders/builder-with-storage.mdx @@ -1,13 +1,6 @@ # Mixnet Client Builder with Storage import { Callout } from 'nextra/components'; - - There will be a breaking SDK upgrade in the coming months. This upgrade will make the SDK a lot easier to build with. - -This upgrade will affect the interface of the SDK dramatically, and will be coupled with a protocol change - stay tuned for information on early access to the new protocol testnet. - -It will also be coupled with the documentation of the SDK on [crates.io](https://crates.io/). - The previous example involves ephemeral keys - if we want to create and then maintain a client identity over time, our code becomes a little more complex as we need to create, store, and conditionally load these keys. > You can find this code [here](https://github.com/nymtech/nym/blob/master/sdk/rust/nym-sdk/examples/builder_with_storage.rs). diff --git a/documentation/docs/pages/developers/rust/mixnet/examples/builders/builder.mdx b/documentation/docs/pages/developers/rust/mixnet/examples/builders/builder.mdx index d94dfae86a..1b9f63517c 100644 --- a/documentation/docs/pages/developers/rust/mixnet/examples/builders/builder.mdx +++ b/documentation/docs/pages/developers/rust/mixnet/examples/builders/builder.mdx @@ -1,13 +1,6 @@ # Mixnet Client Builder import { Callout } from 'nextra/components'; - - There will be a breaking SDK upgrade in the coming months. This upgrade will make the SDK a lot easier to build with. - -This upgrade will affect the interface of the SDK dramatically, and will be coupled with a protocol change - stay tuned for information on early access to the new protocol testnet. - -It will also be coupled with the documentation of the SDK on [crates.io](https://crates.io/). - You can spin up an ephemeral client like so. This client will not have a persistent identity and its keys will be dropped on restart. Since there is currently no way of reconnecting a client that has been disconnected after use, then treat disconnecting a client the same as dropping its keys entirely. > You can find this code [here](https://github.com/nymtech/nym/blob/master/sdk/rust/nym-sdk/examples/builder.rs). diff --git a/documentation/docs/pages/developers/rust/mixnet/examples/custom-topology.mdx b/documentation/docs/pages/developers/rust/mixnet/examples/custom-topology.mdx index e26b346976..1985900b06 100644 --- a/documentation/docs/pages/developers/rust/mixnet/examples/custom-topology.mdx +++ b/documentation/docs/pages/developers/rust/mixnet/examples/custom-topology.mdx @@ -2,14 +2,6 @@ import { Callout } from 'nextra/components' - - There will be a breaking SDK upgrade in the coming months. This upgrade will make the SDK a lot easier to build with. - -This upgrade will affect the interface of the SDK dramatically, and will be coupled with a protocol change - stay tuned for information on early access to the new protocol testnet. - -It will also be coupled with the documentation of the SDK on [crates.io](https://crates.io/). - - These examples are **not** the same as using a configurable network: these functions define a subset of nodes to use on a given network, whereas the [testnet](./testnet) example is an example of switching to use a different network entirely. The two can be combined, but if you are looking for how to connect your client to a testnet, see the `testnet` file. diff --git a/documentation/docs/pages/developers/rust/mixnet/examples/custom-topology/custom-provider.mdx b/documentation/docs/pages/developers/rust/mixnet/examples/custom-topology/custom-provider.mdx index be32aecb2d..32218f1c91 100644 --- a/documentation/docs/pages/developers/rust/mixnet/examples/custom-topology/custom-provider.mdx +++ b/documentation/docs/pages/developers/rust/mixnet/examples/custom-topology/custom-provider.mdx @@ -1,13 +1,6 @@ # Custom Topology Provider import { Callout } from 'nextra/components'; - - There will be a breaking SDK upgrade in the coming months. This upgrade will make the SDK a lot easier to build with. - -This upgrade will affect the interface of the SDK dramatically, and will be coupled with a protocol change - stay tuned for information on early access to the new protocol testnet. - -It will also be coupled with the documentation of the SDK on [crates.io](https://crates.io/). - If you are also running a Validator and Nym API for your network, you can specify that endpoint as such and interact with it as clients usually do (under the hood). > You can find this code [here](https://github.com/nymtech/nym/blob/master/sdk/rust/nym-sdk/examples/custom_topology_provider.rs) @@ -33,7 +26,7 @@ impl MyTopologyProvider { .expect("Failed to create API client builder") .build::() .expect("Failed to build API client"); - + MyTopologyProvider { validator_client, } diff --git a/documentation/docs/pages/developers/rust/mixnet/examples/custom-topology/manually-overwrite-topology.mdx b/documentation/docs/pages/developers/rust/mixnet/examples/custom-topology/manually-overwrite-topology.mdx index e3c6d1fec2..61b4b3fdbc 100644 --- a/documentation/docs/pages/developers/rust/mixnet/examples/custom-topology/manually-overwrite-topology.mdx +++ b/documentation/docs/pages/developers/rust/mixnet/examples/custom-topology/manually-overwrite-topology.mdx @@ -1,13 +1,6 @@ # Manually Overwrite Topology import { Callout } from 'nextra/components'; - - There will be a breaking SDK upgrade in the coming months. This upgrade will make the SDK a lot easier to build with. - -This upgrade will affect the interface of the SDK dramatically, and will be coupled with a protocol change - stay tuned for information on early access to the new protocol testnet. - -It will also be coupled with the documentation of the SDK on [crates.io](https://crates.io/). - If you aren't running a Validator and Nym API, and just want to import a specific sub-set of mix nodes, you can simply overwrite the grabbed topology manually. > You can find this code [here](https://github.com/nymtech/nym/blob/master/sdk/rust/nym-sdk/examples/manually_overwrite_topology.rs) diff --git a/documentation/docs/pages/developers/rust/mixnet/examples/simple.mdx b/documentation/docs/pages/developers/rust/mixnet/examples/simple.mdx index c6065d6231..730d98608a 100644 --- a/documentation/docs/pages/developers/rust/mixnet/examples/simple.mdx +++ b/documentation/docs/pages/developers/rust/mixnet/examples/simple.mdx @@ -2,13 +2,6 @@ import { Callout } from 'nextra/components' - - There will be a breaking SDK upgrade in the coming months. This upgrade will make the SDK a lot easier to build with. - -This upgrade will affect the interface of the SDK dramatically, and will be coupled with a protocol change - stay tuned for information on early access to the new protocol testnet. - -It will also be coupled with the documentation of the SDK on [crates.io](https://crates.io/). - Lets look at a very simple example of how you can import and use the websocket client in a piece of Rust code. Simply importing the `nym_sdk` crate into your project allows you to create a client and send traffic through the mixnet. diff --git a/documentation/docs/pages/developers/rust/mixnet/examples/socks.mdx b/documentation/docs/pages/developers/rust/mixnet/examples/socks.mdx index 03089679b7..9dff137fd5 100644 --- a/documentation/docs/pages/developers/rust/mixnet/examples/socks.mdx +++ b/documentation/docs/pages/developers/rust/mixnet/examples/socks.mdx @@ -2,13 +2,6 @@ import { Callout } from 'nextra/components' - - There will be a breaking SDK upgrade in the coming months. This upgrade will make the SDK a lot easier to build with. - -This upgrade will affect the interface of the SDK dramatically, and will be coupled with a protocol change - stay tuned for information on early access to the new protocol testnet. - -It will also be coupled with the documentation of the SDK on [crates.io](https://crates.io/). - If you are looking at implementing Nym as a transport layer for a crypto wallet or desktop app, this is probably the best place to start if they can speak SOCKS5, 4a, or 4. > You can find this code [here](https://github.com/nymtech/nym/blob/master/sdk/rust/nym-sdk/examples/socks5.rs) diff --git a/documentation/docs/pages/developers/rust/mixnet/examples/split-send.mdx b/documentation/docs/pages/developers/rust/mixnet/examples/split-send.mdx index 6648e1956f..88cd9cc059 100644 --- a/documentation/docs/pages/developers/rust/mixnet/examples/split-send.mdx +++ b/documentation/docs/pages/developers/rust/mixnet/examples/split-send.mdx @@ -2,13 +2,6 @@ import { Callout } from 'nextra/components' - - There will be a breaking SDK upgrade in the coming months. This upgrade will make the SDK a lot easier to build with. - -This upgrade will affect the interface of the SDK dramatically, and will be coupled with a protocol change - stay tuned for information on early access to the new protocol testnet. - -It will also be coupled with the documentation of the SDK on [crates.io](https://crates.io/). - If you need to split the different actions of your client across different tasks, you can do so like this. You can think of this analogously to spliting a Tcp Stream into read/write. This functionality is also useful for embedding a sending and receiving client into different tasks. > You can find this code [here](https://github.com/nymtech/nym/blob/master/sdk/rust/nym-sdk/examples/parallel_sending_and_receiving.rs) diff --git a/documentation/docs/pages/developers/rust/mixnet/examples/storage.mdx b/documentation/docs/pages/developers/rust/mixnet/examples/storage.mdx index 3a103c78f0..230e8eced5 100644 --- a/documentation/docs/pages/developers/rust/mixnet/examples/storage.mdx +++ b/documentation/docs/pages/developers/rust/mixnet/examples/storage.mdx @@ -2,13 +2,6 @@ import { Callout } from 'nextra/components' - - There will be a breaking SDK upgrade in the coming months. This upgrade will make the SDK a lot easier to build with. - -This upgrade will affect the interface of the SDK dramatically, and will be coupled with a protocol change - stay tuned for information on early access to the new protocol testnet. - -It will also be coupled with the documentation of the SDK on [crates.io](https://crates.io/). - If you're integrating mixnet functionality into an existing app and want to integrate saving client configs and keys into your existing storage logic, you can manually perform these actions. > You can find this code [here](https://github.com/nymtech/nym/blob/master/sdk/rust/nym-sdk/examples/manually_handle_storage.rs) diff --git a/documentation/docs/pages/developers/rust/mixnet/examples/surbs.mdx b/documentation/docs/pages/developers/rust/mixnet/examples/surbs.mdx index 1543102a63..d9b68f4848 100644 --- a/documentation/docs/pages/developers/rust/mixnet/examples/surbs.mdx +++ b/documentation/docs/pages/developers/rust/mixnet/examples/surbs.mdx @@ -2,13 +2,6 @@ import { Callout } from 'nextra/components' - - There will be a breaking SDK upgrade in the coming months. This upgrade will make the SDK a lot easier to build with. - -This upgrade will affect the interface of the SDK dramatically, and will be coupled with a protocol change - stay tuned for information on early access to the new protocol testnet. - -It will also be coupled with the documentation of the SDK on [crates.io](https://crates.io/). - Both functions used to send messages through the mixnet (`send_message` and `send_plain_message`) send a pre-determined number of SURBs along with their messages by default. You can read more about how SURBs function under the hood [here](../../../../network/traffic/anonymous-replies). diff --git a/documentation/docs/pages/developers/rust/mixnet/examples/testnet.mdx b/documentation/docs/pages/developers/rust/mixnet/examples/testnet.mdx index 606fcc8ead..a6fc4b4b3e 100644 --- a/documentation/docs/pages/developers/rust/mixnet/examples/testnet.mdx +++ b/documentation/docs/pages/developers/rust/mixnet/examples/testnet.mdx @@ -1,13 +1,7 @@ # Configurable Network import { Callout } from 'nextra/components' - - There will be a breaking SDK upgrade in the coming months. This upgrade will make the SDK a lot easier to build with. -This upgrade will affect the interface of the SDK dramatically, and will be coupled with a protocol change - stay tuned for information on early access to the new protocol testnet. - -It will also be coupled with the documentation of the SDK on [crates.io](https://crates.io/). - If you want to connect your Mixnet client to a different network than Mainnet, simply pull in a file from [`nym/envs`](https://github.com/nymtech/nym/tree/master/envs) as such: ```rust diff --git a/documentation/docs/pages/developers/rust/tcpproxy.mdx b/documentation/docs/pages/developers/rust/tcpproxy.mdx index ee7836d175..d34d4f0a37 100644 --- a/documentation/docs/pages/developers/rust/tcpproxy.mdx +++ b/documentation/docs/pages/developers/rust/tcpproxy.mdx @@ -1,15 +1,8 @@ # TcpProxy Module import { Callout } from 'nextra/components'; - - There will be a breaking SDK upgrade in the coming months. This upgrade will make the SDK a lot easier to build with. - -This upgrade will affect the interface of the SDK dramatically, and will be coupled with a protocol change - stay tuned for information on early access to the new protocol testnet. - -It will also be coupled with the documentation of the SDK on [crates.io](https://crates.io/). - This module exposes the `TcpProxyClient` and the `TcpProxyServer` which can be used to proxy traffic through the Mixnet in a way that is more familiar to developers than the methods exposed by the [`Mixnet` module](./mixnet). -Both `Client` and `Server` are intended to be initialised and then run in a background thread, exposing a configurable `localhost` socket which developers can read/write/stream to without having to worry about the [message-based](../concepts/messages) nature of sending and receiving traffic to/from the Mixnet. +Both `Client` and `Server` are intended to be initialised and then run in a background thread, exposing a configurable `localhost` socket which developers can read/write/stream to without having to worry about the message-based nature of sending and receiving traffic to/from the Mixnet. > Non-Rust/Go developers who want to experiment with this module can start with the [standalone binaries](../tools/standalone-tcpproxy). diff --git a/documentation/docs/pages/developers/rust/tcpproxy/architecture.mdx b/documentation/docs/pages/developers/rust/tcpproxy/architecture.mdx index b9be09ecdc..7a7965673b 100644 --- a/documentation/docs/pages/developers/rust/tcpproxy/architecture.mdx +++ b/documentation/docs/pages/developers/rust/tcpproxy/architecture.mdx @@ -3,14 +3,6 @@ import { Callout } from 'nextra/components' - - There will be a breaking SDK upgrade in the coming months. This upgrade will make the SDK a lot easier to build with. - - This upgrade will affect the interface of the SDK dramatically, and will be coupled with a protocol change - stay tuned for information on early access to the new protocol testnet. - - It will also be coupled with the documentation of the SDK on [crates.io](https://crates.io/). - - ## Motivations The motivation behind the creation of the `TcpProxy` module is to allow developers to interact with the Mixnet in a way that is far more familiar to them: simply setting up a connection with a transport, being returned a socket, and then being able to stream data to/from it, similar to something like the Tor [`arti`](https://gitlab.torproject.org/tpo/core/arti/-/tree/main/crates/arti-client) client. diff --git a/documentation/docs/pages/developers/rust/tcpproxy/examples/multiconn.mdx b/documentation/docs/pages/developers/rust/tcpproxy/examples/multiconn.mdx index 6f3bcffd38..daeb38069e 100644 --- a/documentation/docs/pages/developers/rust/tcpproxy/examples/multiconn.mdx +++ b/documentation/docs/pages/developers/rust/tcpproxy/examples/multiconn.mdx @@ -1,13 +1,7 @@ # Multi Connection Example import { Callout } from 'nextra/components' - - There will be a breaking SDK upgrade in the coming months. This upgrade will make the SDK a lot easier to build with. -This upgrade will affect the interface of the SDK dramatically, and will be coupled with a protocol change - stay tuned for information on early access to the new protocol testnet. - -It will also be coupled with the documentation of the SDK on [crates.io](https://crates.io/). - This example starts off several Tcp connections on a loop to a remote endpoint: in this case the `TcpListener` behind the `NymProxyServer` instance on the echo server found in [`nym/tools/echo-server/`](https://github.com/nymtech/nym/tree/develop/tools/echo-server). It pipes a few messages to it, logs the replies, and keeps track of the number of replies received per connection. diff --git a/documentation/docs/pages/developers/rust/tcpproxy/examples/singleconn.mdx b/documentation/docs/pages/developers/rust/tcpproxy/examples/singleconn.mdx index a0c1a73cfe..47f341a893 100644 --- a/documentation/docs/pages/developers/rust/tcpproxy/examples/singleconn.mdx +++ b/documentation/docs/pages/developers/rust/tcpproxy/examples/singleconn.mdx @@ -1,13 +1,7 @@ # Single Connection Example import { Callout } from 'nextra/components' - - There will be a breaking SDK upgrade in the coming months. This upgrade will make the SDK a lot easier to build with. -This upgrade will affect the interface of the SDK dramatically, and will be coupled with a protocol change - stay tuned for information on early access to the new protocol testnet. - -It will also be coupled with the documentation of the SDK on [crates.io](https://crates.io/). - This is a basic example which opens a single TCP connection and writes a bunch of messages between a client and some 'echo server' logic, so only uses a single session under the hood and doesn't really show off the message ordering capabilities; this is mainly just a quick introductory illustration on how: - the mixnet does message ordering - the NymProxyClient and NymProxyServer can be hooked into and used to communicate between two otherwise pretty vanilla TcpStreams diff --git a/documentation/docs/pages/developers/rust/tcpproxy/troubleshooting.mdx b/documentation/docs/pages/developers/rust/tcpproxy/troubleshooting.mdx index 7634e94ac4..8688ae63f4 100644 --- a/documentation/docs/pages/developers/rust/tcpproxy/troubleshooting.mdx +++ b/documentation/docs/pages/developers/rust/tcpproxy/troubleshooting.mdx @@ -1,12 +1,5 @@ # Troubleshooting import { Callout } from 'nextra/components' - - There will be a breaking SDK upgrade in the coming months. This upgrade will make the SDK a lot easier to build with. - -This upgrade will affect the interface of the SDK dramatically, and will be coupled with a protocol change - stay tuned for information on early access to the new protocol testnet. - -It will also be coupled with the documentation of the SDK on [crates.io](https://crates.io/). - ## Lots of `duplicate fragment received` messages You might see a lot of `WARN` level logs about duplicate fragments in your logs, depending on the log level you're using. This occurs when a packet is retransmitted somewhere in the Mixnet, but then the original makes it to the destination client as well. This is not something to do with your client logic, but instead the state of the Mixnet. diff --git a/documentation/docs/pages/developers/tools.mdx b/documentation/docs/pages/developers/tools.mdx index ccd413c5ba..9f0299c333 100644 --- a/documentation/docs/pages/developers/tools.mdx +++ b/documentation/docs/pages/developers/tools.mdx @@ -1,7 +1,7 @@ # Tools -There are a few tools available to developers for chain interaction: the `nym-cli` tool, which operates as an easier-to-use wrapper around `nyxd`, to allow operators to script interactions with their infrastructure (and those who prefer CLI tools ;) ). +There are a few tools available to developers for chain interaction: the `nym-cli` tool, which operates as an easier-to-use wrapper around `nyxd`, to allow operators to script interactions with their infrastructure (and those who prefer CLI tools). There is also a basic echo server tool which app developers can use as a quick endpoint for traffic testing. This will be deployed onto a persistent public server in the future so devs dont have to run it themselves. -Finally, there are a pair of standalone versions of the TcpProxy Rust SDK module for developers to begin experimenting with sending app traffic through them mixnet. +Finally, there are also a pair of standalone versions of the TcpProxy Rust SDK module for developers to begin experimenting with sending app traffic through them mixnet (**this module will soon be deprecated in place of the `MixSocket`/`MixStream` abstractions**). diff --git a/documentation/docs/pages/developers/typescript.mdx b/documentation/docs/pages/developers/typescript.mdx index 93a95b4c6f..3cf683f0f4 100644 --- a/documentation/docs/pages/developers/typescript.mdx +++ b/documentation/docs/pages/developers/typescript.mdx @@ -1,16 +1,4 @@ # Introduction -import { Callout } from 'nextra/components'; - - - The TypeScript SDK is currently not avaliable to use: a network upgrade elsewhere has caused a problem which is not currently fixed. TS SDK Clients are not able to connect to the network. - - When the issue is resolved, this will be reflected in the documentation. - - Thanks for your patience! - - -Welcome to the documentation for Nym's TypeScript SDK! - -This guide contains information about the various TypeScript SDK modules that facilitate interaction with different components of the Nym stack, including the Nym mixnet, the Nyx blockchain, and Coconut credentials. +This guide contains information about the various TypeScript SDK modules that facilitate interaction with different components of the Nym stack: the Nym mixnet & the Nyx blockchain. diff --git a/documentation/docs/pages/developers/typescript/FAQ.mdx b/documentation/docs/pages/developers/typescript/FAQ.mdx index f226a9466a..e27628e69d 100644 --- a/documentation/docs/pages/developers/typescript/FAQ.mdx +++ b/documentation/docs/pages/developers/typescript/FAQ.mdx @@ -1,14 +1,6 @@ # TS SDK FAQ import { Callout } from 'nextra/components' - - The TypeScript SDK is currently not avaliable to use: a network upgrade elsewhere has caused a problem which is not currently fixed. TS SDK Clients are not able to connect to the network. - - When the issue is resolved, this will be reflected in the documentation. - - Thanks for your patience! - - ## Why and when does the mixnet client complain about insufficient topology? It will in one of the following cases: diff --git a/documentation/docs/pages/developers/typescript/bundling/bundling.mdx b/documentation/docs/pages/developers/typescript/bundling/bundling.mdx index 0bb48dc0e9..6fed215105 100644 --- a/documentation/docs/pages/developers/typescript/bundling/bundling.mdx +++ b/documentation/docs/pages/developers/typescript/bundling/bundling.mdx @@ -2,14 +2,6 @@ import { Callout } from 'nextra/components'; - - The TypeScript SDK is currently not avaliable to use: a network upgrade elsewhere has caused a problem which is not currently fixed. TS SDK Clients are not able to connect to the network. - - When the issue is resolved, this will be reflected in the documentation. - - Thanks for your patience! - - You might need some help bundling packages from the Nym Typescript SDK into your package. Here are some things that could go wrong: diff --git a/documentation/docs/pages/developers/typescript/bundling/esbuild.mdx b/documentation/docs/pages/developers/typescript/bundling/esbuild.mdx index 9f225a512c..5ff64081cf 100644 --- a/documentation/docs/pages/developers/typescript/bundling/esbuild.mdx +++ b/documentation/docs/pages/developers/typescript/bundling/esbuild.mdx @@ -2,14 +2,6 @@ import { Callout } from 'nextra/components'; # Troubleshooting bundling with ESbuild - - The TypeScript SDK is currently not avaliable to use: a network upgrade elsewhere has caused a problem which is not currently fixed. TS SDK Clients are not able to connect to the network. - - When the issue is resolved, this will be reflected in the documentation. - - Thanks for your patience! - - If you've been following the steps outlined in the Examples section, your development environment should be configured as follows: #### Environment Setup diff --git a/documentation/docs/pages/developers/typescript/bundling/webpack.mdx b/documentation/docs/pages/developers/typescript/bundling/webpack.mdx index 80b688d44a..1b5803f90c 100644 --- a/documentation/docs/pages/developers/typescript/bundling/webpack.mdx +++ b/documentation/docs/pages/developers/typescript/bundling/webpack.mdx @@ -3,14 +3,6 @@ import { Callout } from 'nextra/components'; # Troubleshooting bundling with Webpack - - The TypeScript SDK is currently not avaliable to use: a network upgrade elsewhere has caused a problem which is not currently fixed. TS SDK Clients are not able to connect to the network. - - When the issue is resolved, this will be reflected in the documentation. - - Thanks for your patience! - - ## Webpack > 5 ESM For any project using Webpack, you´ll need the following rule in your `webpack.config.js` above version 5: diff --git a/documentation/docs/pages/developers/typescript/examples/cosmos-kit.mdx b/documentation/docs/pages/developers/typescript/examples/cosmos-kit.mdx index 5f220bbb0d..c33f16d971 100644 --- a/documentation/docs/pages/developers/typescript/examples/cosmos-kit.mdx +++ b/documentation/docs/pages/developers/typescript/examples/cosmos-kit.mdx @@ -2,14 +2,6 @@ import { Callout } from 'nextra/components' # Cosmos Kit - - The TypeScript SDK is currently not avaliable: a network upgrade elsewhere has caused a problem which is not currently fixed. TS SDK Clients are not able to connect to the network. - - When the issue is resolved, this will be reflected in the documentation. - - Thanks for your patience! - - The wonderful people of Cosmology have made some [fantastic components](https://cosmoskit.com/) that can be used with Nym. These include: diff --git a/documentation/docs/pages/developers/typescript/examples/mix-fetch.mdx b/documentation/docs/pages/developers/typescript/examples/mix-fetch.mdx index 0c49da6181..4bc35df9a1 100644 --- a/documentation/docs/pages/developers/typescript/examples/mix-fetch.mdx +++ b/documentation/docs/pages/developers/typescript/examples/mix-fetch.mdx @@ -1,13 +1,6 @@ import { Callout } from 'nextra/components'; # `mixFetch` - - The TypeScript SDK is currently not avaliable to use: a network upgrade elsewhere has caused a problem which is not currently fixed. TS SDK Clients are not able to connect to the network. - - When the issue is resolved, this will be reflected in the documentation. - - Thanks for your patience! - An easy way to secure parts or all of your web app is to replace calls to [`fetch`](https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API/Using_Fetch) with `mixFetch`: @@ -25,7 +18,7 @@ Sounds great, are there any catches? Well, there are a few (for now): Right now Gateways are not required to run a Secure Websocket (WSS) listener, so only a subset of nodes running in Gateway mode have configured their nodes to do so. -For the moment you have to select a Gateway that has WSS enabled and Network Requester from [Harbourmaster Gateways for mixFetch list](https://harbourmaster.nymtech.net/). +For the moment you have to select a Gateway that has WSS from [Harbourmaster Gateways for mixFetch list](https://harbourmaster.nymtech.net/). ``` curl -X 'GET' \ @@ -40,9 +33,7 @@ curl -X 'GET' \ import type { SetupMixFetchOps } from '@nymproject/mix-fetch'; const mixFetchOptions: SetupMixFetchOps = { - preferredGateway: '23A7CSaBSA2L67PWuFTPXUnYrCdyVcB7ATYsjUsfdftb', // with WSS - preferredNetworkRequester: - 'HuNL1pFprNSKW6jdqppibXP5KNKCNJxDh7ivpYcoULN9.C62NahRTUf6kqpNtDVHXoVriQr6yyaU5LtxdgpbsGrtA@23A7CSaBSA2L67PWuFTPXUnYrCdyVcB7ATYsjUsfdftb', + preferredGateway: "q2A2cbooyC16YJzvdYaSMH9X3cSiieZNtfBr8cE8Fi1", // with WSS mixFetchOverride: { requestTimeoutMs: 60_000, }, diff --git a/documentation/docs/pages/developers/typescript/examples/mixnet.mdx b/documentation/docs/pages/developers/typescript/examples/mixnet.mdx index db1ec6c59a..db015511a9 100644 --- a/documentation/docs/pages/developers/typescript/examples/mixnet.mdx +++ b/documentation/docs/pages/developers/typescript/examples/mixnet.mdx @@ -1,13 +1,6 @@ import { Callout } from 'nextra/components' # Mixnet Client - - The TypeScript SDK is currently not avaliable to use: a network upgrade elsewhere has caused a problem which is not currently fixed. TS SDK Clients are not able to connect to the network. - - When the issue is resolved, this will be reflected in the documentation. - - Thanks for your patience! - As you know by now, in order to send or receive messages over the mixnet, you'll need to use the [`SDK Client`](https://www.npmjs.com/package/@nymproject/sdk), which will allow you to create apps that can use the Nym mixnet and Coconut credentials. This client is message based - it can only send a one-way message to another client's address. diff --git a/documentation/docs/pages/developers/typescript/examples/nym-smart-contracts.mdx b/documentation/docs/pages/developers/typescript/examples/nym-smart-contracts.mdx index 0e982dd1e9..c2f3303bf7 100644 --- a/documentation/docs/pages/developers/typescript/examples/nym-smart-contracts.mdx +++ b/documentation/docs/pages/developers/typescript/examples/nym-smart-contracts.mdx @@ -1,13 +1,7 @@ import { Callout } from 'nextra/components' # Nym Smart Contract Clients - - The TypeScript SDK is currently not avaliable to use: a network upgrade elsewhere has caused a problem which is not currently fixed. TS SDK Clients are not able to connect to the network. - When the issue is resolved, this will be reflected in the documentation. - - Thanks for your patience! - As previously mentioned, to query or execute on any of the Nym contracts, you'll need to use one of the [`Contract Clients`](https://www.npmjs.com/package/@nymproject/contract-clients), which contains read-only query and signing clients for all of Nym's smart contracts. ##### Contract Clients list diff --git a/documentation/docs/pages/developers/typescript/installation.mdx b/documentation/docs/pages/developers/typescript/installation.mdx index cc8367d787..0596ef0828 100644 --- a/documentation/docs/pages/developers/typescript/installation.mdx +++ b/documentation/docs/pages/developers/typescript/installation.mdx @@ -4,14 +4,6 @@ import { Callout } from 'nextra/components' The different modules in the Typescript SDK allow developers to start building browser-based applications quickly. Simply import the SDK module of your choice – depending on the component from the Nym architecture you want to use – into your code via NPM, as you would any other TypeScript library. - - The TypeScript SDK is currently not avaliable to use: a network upgrade elsewhere has caused a problem which is not currently fixed. TS SDK Clients are not able to connect to the network. - - When the issue is resolved, this will be reflected in the documentation. - - Thanks for your patience! - - Other than the `Contract Clients`, SDK modules come in four different flavours (ESM, CJS and full-fat for ESM and CJS). This documentation focuses on examples using the `full-fat` versions. diff --git a/documentation/docs/pages/developers/typescript/overview.mdx b/documentation/docs/pages/developers/typescript/overview.mdx index 82bf983f28..171cbc50cf 100644 --- a/documentation/docs/pages/developers/typescript/overview.mdx +++ b/documentation/docs/pages/developers/typescript/overview.mdx @@ -4,15 +4,6 @@ import { NPMLink } from '../../../components/npm'; ## SDK overview - - - The TypeScript SDK is currently not avaliable to use: a network upgrade elsewhere has caused a problem which is not currently fixed. TS SDK Clients are not able to connect to the network. - - When the issue is resolved, this will be reflected in the documentation. - - Thanks for your patience! - - The Typescript SDK allows developers to start building browser-based Nym-based applications quickly, by simply importing the SDK modules into their code via NPM as they would any other Typescript library. Currently developers can use different packages from the Typescript SDK to run the following entirely in browser: diff --git a/documentation/docs/pages/developers/typescript/playground/cosmos-kit.mdx b/documentation/docs/pages/developers/typescript/playground/cosmos-kit.mdx index 5852480206..d6640e0344 100644 --- a/documentation/docs/pages/developers/typescript/playground/cosmos-kit.mdx +++ b/documentation/docs/pages/developers/typescript/playground/cosmos-kit.mdx @@ -6,14 +6,6 @@ import FormattedCosmoskitExampleCode from '../../../../code-examples/sdk/typescr import { Callout } from 'nextra/components' - - The TypeScript SDK is currently not avaliable to use: a network upgrade elsewhere has caused a problem which is not currently fixed. TS SDK Clients are not able to connect to the network. - - When the issue is resolved, this will be reflected in the documentation. - - Thanks for your patience! - - Below is an example that uses [CosmosKit](https://cosmoskit.com/) to connect and sign a fake transaction with your [Keplr wallet](https://www.keplr.app/) or [Ledger hardware wallet](https://www.ledger.com/) to this page: diff --git a/documentation/docs/pages/developers/typescript/playground/mixfetch.mdx b/documentation/docs/pages/developers/typescript/playground/mixfetch.mdx index 6f3612b1c5..307dd35bd4 100644 --- a/documentation/docs/pages/developers/typescript/playground/mixfetch.mdx +++ b/documentation/docs/pages/developers/typescript/playground/mixfetch.mdx @@ -6,16 +6,13 @@ import FormattedMixFetchExampleCode from '../../../../code-examples/sdk/typescri import { Callout } from 'nextra/components' - - The TypeScript SDK is currently not avaliable to use: a network upgrade elsewhere has caused a problem which is not currently fixed. TS SDK Clients are not able to connect to the network. - - When the issue is resolved, this will be reflected in the documentation. - - Thanks for your patience! - - + + + Open your browser's console to see the connection and send/receive logging for this example. + + diff --git a/documentation/docs/pages/developers/typescript/playground/mixnodes.mdx b/documentation/docs/pages/developers/typescript/playground/mixnodes.mdx index b5114ef3ee..66f4bc06a5 100644 --- a/documentation/docs/pages/developers/typescript/playground/mixnodes.mdx +++ b/documentation/docs/pages/developers/typescript/playground/mixnodes.mdx @@ -7,14 +7,6 @@ import { Callout } from 'nextra/components' - - The TypeScript SDK is currently not avaliable to use: a network upgrade elsewhere has caused a problem which is not currently fixed. TS SDK Clients are not able to connect to the network. - - When the issue is resolved, this will be reflected in the documentation. - - Thanks for your patience! - - The Nym Mixnet contract keeps a directory of all mixnodes that can be used to mix traffic. Here is a live example of querying the Mixnet Contract for a paged list of mixnodes: diff --git a/documentation/docs/pages/developers/typescript/playground/traffic.mdx b/documentation/docs/pages/developers/typescript/playground/traffic.mdx index 6dcc16b335..d3852de9e3 100644 --- a/documentation/docs/pages/developers/typescript/playground/traffic.mdx +++ b/documentation/docs/pages/developers/typescript/playground/traffic.mdx @@ -5,14 +5,11 @@ import Box from '@mui/material/Box'; import FormattedTrafficExampleCode from '../../../../code-examples/sdk/typescript/traffic-example-code.mdx'; - - The TypeScript SDK is currently not avaliable to use: a network upgrade elsewhere has caused a problem which is not currently fixed. TS SDK Clients are not able to connect to the network. - - When the issue is resolved, this will be reflected in the documentation. - - Thanks for your patience! - Use this tool to experiment with the mixnet: send and receive messages! + + Open your browser's console to see the connection and send/receive logging for this example. + + diff --git a/documentation/docs/pages/developers/typescript/playground/wallet.mdx b/documentation/docs/pages/developers/typescript/playground/wallet.mdx index 20b97911b6..183ddbfe61 100644 --- a/documentation/docs/pages/developers/typescript/playground/wallet.mdx +++ b/documentation/docs/pages/developers/typescript/playground/wallet.mdx @@ -13,14 +13,6 @@ import FormattedWalletDelegationsCode from '../../../../code-examples/sdk/typesc import { Callout } from 'nextra/components' - - The TypeScript SDK is currently not avaliable to use: a network upgrade elsewhere has caused a problem which is not currently fixed. TS SDK Clients are not able to connect to the network. - - When the issue is resolved, this will be reflected in the documentation. - - Thanks for your patience! - - Here's a small wallet example using testnet for you to test out! diff --git a/documentation/docs/pages/developers/typescript/start.mdx b/documentation/docs/pages/developers/typescript/start.mdx index 59c636eb21..0d3c5b4c0f 100644 --- a/documentation/docs/pages/developers/typescript/start.mdx +++ b/documentation/docs/pages/developers/typescript/start.mdx @@ -3,14 +3,6 @@ import { Callout } from 'nextra/components' ## MixFetch - - The TypeScript SDK is currently not avaliable to use: a network upgrade elsewhere has caused a problem which is not currently fixed. TS SDK Clients are not able to connect to the network. - - When the issue is resolved, this will be reflected in the documentation. - - Thanks for your patience! - - Use the [`mixFetch`](https://www.npmjs.com/package/@nymproject/mix-fetch) package as a drop-in replacement for `fetch`to send HTTP requests over the Nym mixnet: ```ts diff --git a/documentation/docs/pages/network/architecture/mixnet.mdx b/documentation/docs/pages/network/architecture/mixnet.mdx index 352db039d8..4843a292a6 100644 --- a/documentation/docs/pages/network/architecture/mixnet.mdx +++ b/documentation/docs/pages/network/architecture/mixnet.mdx @@ -32,7 +32,7 @@ Upcoming: ## Nym Clients - You can read about setting up and using various clients in the [Developer Docs](../../developers/clients). + You can read about setting up and using various clients in the [Developer Docs](../../developers/clients/socks5). A large proportion of the Nym Mixnet's functionality is implemented client-side. @@ -48,4 +48,4 @@ Clients perform the following actions on behalf of users: * Send Sphinx packet [cover traffic](../concepts/cover-traffic) when no real messages are being sent * Retransmit [un-acknowledged packet sends](../traffic/acks) -> At the moment due to the fact that Nym clients are [message-based](../../developers/concepts/messages), using the Mixnet requires another client on the 'other side' of the mixet to send packets to, unless you're using the `nymvpn` client (part of the NymVPN app) or the `socks5` client, which operates as a SOCKS4,4a, or 5 proxy and is able to utilise the client embedded within the `nym-node`'s Exit Gateway functionality (prev. this functionality was a standalone service, the Network Requester). In the future we wish to remove this point of friction and have all Nym clients construct IP packets instead, easing the integration burden and abstracting away the message-based nature of client communication. +> At the moment due to the fact that Nym clients are message-based, using the Mixnet requires another client on the 'other side' of the mixet to send packets to, unless you're using the `nymvpn` client (part of the NymVPN app) or the `socks5` client, which operates as a SOCKS4,4a, or 5 proxy and is able to utilise the client embedded within the `nym-node`'s Exit Gateway functionality (prev. this functionality was a standalone service, the Network Requester). In the future we wish to remove this point of friction and have all Nym clients construct IP packets instead, easing the integration burden and abstracting away the message-based nature of client communication. diff --git a/documentation/docs/pages/operators/_meta.json b/documentation/docs/pages/operators/_meta.json index fbe58e2492..319bba3f0b 100644 --- a/documentation/docs/pages/operators/_meta.json +++ b/documentation/docs/pages/operators/_meta.json @@ -6,6 +6,7 @@ "sandbox": "Sandbox Testnet", "binaries": "Binaries", "nodes": "Nodes & Validators Guides", + "performance-and-testing": "Performance Measurement", "tools": "Tools", "troubleshooting": "Troubleshooting", "tokenomics": "Tokenomics", diff --git a/documentation/docs/pages/operators/changelog.mdx b/documentation/docs/pages/operators/changelog.mdx index 7c6cf1620a..aa1fe30dfe 100644 --- a/documentation/docs/pages/operators/changelog.mdx +++ b/documentation/docs/pages/operators/changelog.mdx @@ -49,6 +49,76 @@ This page displays a full list of all the changes during our release cycle from +## `v2025.20-leerdammer` + +- [Release Binaries](https://github.com/nymtech/nym/releases/tag/nym-binaries-v2025.20-leerdammer) +- [`nym-node`](nodes/nym-node.mdx) version `1.21.0` + +```sh +nym-node +Binary Name: nym-node +Build Timestamp: 2025-11-12T08:19:33.288341371Z +Build Version: 1.21.0 +Commit SHA: babf113fe5d396fa8a84fa939ad4b1b5b4d38b83 +Commit Date: 2025-11-12T08:39:48.000000000+01:00 +Commit Branch: HEAD +rustc Version: 1.88.0 +rustc Channel: stable +cargo Profile: release +``` + +### Operators Updates & Tools + +- [New **Performance Measurement** page](/operators/performance-and-testing) explaining the logic behind node selection for NymVPN application + +- [New **Gateway Probe Details** page](/operators/performance-and-testing/gateway-probe-details) explaining complexity and contradictions when measuring network performance + +### Developer Tools + +- [Typescript SDK 1.4.1](https://github.com/nymtech/nym/pull/6146): This PR is a new release of the Typescript SDK, `mixFetch` and `WASM` client. It also removes the Harbour Master client from `mixFetch`, replacing it with the Nym API's described endpoint for nym-nodes + +- [Overhauled **developer integrations** pages](/developers/integrations) explaining the different restrictions for the different SDK options on offer + +- [Fixed `mixFetch` and `WASM Client` playground + examples](/developers/typescript/start): new versions of the Typescript SDK and `mixFetch` have been published, examples and live playground have been updated accordingly + + +### Features + +- [Tweak ts sdk actions](https://github.com/nymtech/nym/pull/6185): Using `taskset` to limit the number of of CPUs used by `wasm-pack` and `wasm-opt` commands used by ts linting CI + +- [Configurable mixnet client startup timeout](https://github.com/nymtech/nym/pull/6148) + +- [QUIC bridge deployment script v2](https://github.com/nymtech/nym/pull/6145): Script helping operators to install, configure and deploy QUIC bridge as systemd service + +- [Expose more explicit `new_with_fronted_urls` builder for http API client](https://github.com/nymtech/nym/pull/6136) + +- [Domain fronting](https://github.com/nymtech/nym/pull/6134): Enable URL rotation and retries for mixnet gateway [`init`](https://github.com/nymtech/nym/pull/6126) + + +### Bugfix + +- [Add circuit breaker](https://github.com/nymtech/nym/pull/6143): When the mixnet client's `mix_tx` channel closes during network drops, `OutQueueControl` would retry sending packets through the closed channel, flooding logs and hanging the daemon. This affects all clients (VPN, SOCKS5, native clients), not just VPN .. (Read more in the [PR description](https://github.com/nymtech/nym/pull/6143)) + +- [Update internal owner address in transferred share](https://github.com/nymtech/nym/pull/6139) + +- [Update quic_bridge_deployment.sh for IPv4 and .deb package](https://github.com/nymtech/nym/pull/6138): Updated ping commands to explicitly use IPv4 and adjusted file permission checks with sudo. Changed the forward address prompt to specify IPv4 and modified the binary download process to fetch and install the latest `.deb` release URL automatically + +- [Update stored epoch share when changing ownership](https://github.com/nymtech/nym/pull/6135) + +- [Update stored epoch share when changing announce address](https://github.com/nymtech/nym/pull/6131) + +### Refactors & Maintenance + +- [Re-merge: disconnect mixnet client if registration fails](https://github.com/nymtech/nym/pull/6169) ([\#6158](https://github.com/nymtech/nym/pull/6158)) + +- [Resolve `clippy 1.91` warnings](https://github.com/nymtech/nym/pull/6168) + +- [Remove unused dependencies](https://github.com/nymtech/nym/pull/6151): Removing the crates that only shows up on the workspace `Cargo.toml` + +- [Use typed-builder for registration client builder config](https://github.com/nymtech/nym/pull/6150) + +- [tommy is too quick](https://github.com/nymtech/nym/pull/6149) + ## `v2025.19-kase` - [Release Binaries](https://github.com/nymtech/nym/releases/tag/nym-binaries-v2025.19-kase) @@ -70,7 +140,7 @@ cargo Profile: release ### Operators Updates & Tools -**When this platform release becomes latest, we would like to ask operators ruuning any Gateway mode of `nym-node`, to use new version of [QUIC brige deployment tool](https://github.com/nymtech/nym/blob/develop/scripts/nym-node-setup/quic_bridge_deployment.sh)and install QUIC `nym-bridge` on their server, following [these steps](#quic-transport-bridge-deployment).** +**When this platform release becomes latest, we would like to ask operators ruuning any Gateway mode of `nym-node`, to use new version of [QUIC brige deployment tool](https://github.com/nymtech/nym/blob/develop/scripts/nym-node-setup/quic_bridge_deployment.sh) and install QUIC `nym-bridge` on their server, following [these steps](#quic-transport-bridge-deployment).** Alongside this platform release we are happy to introduce several improvements and new tools for node operators. @@ -2881,7 +2951,7 @@ cargo Profile: release After changes coming along with `v2024.13-magura` (`nym-node v1.1.10`), Nym Explorer is no longer picking all values correctly. Instead of fixing this outdated explorer, we are working on a new one, coming out soon. -[Nym Harbourmaster](https://harbourmaster.nymtech.net) has cache of 90min, expect your values to be updated with delay. We are aware of some issues with Nym Harbourmaster and working hard to resolve them in the upcoming explorer v2. To check your routing values in real time, you can use [`nym-gateway-probe`](nodes/performance-and-testing/gateway-probe). +[Nym Harbourmaster](https://harbourmaster.nymtech.net) has cache of 90min, expect your values to be updated with delay. We are aware of some issues with Nym Harbourmaster and working hard to resolve them in the upcoming explorer v2. To check your routing values in real time, you can use [`nym-gateway-probe`](performance-and-testing/gateway-probe). ### Operators Updates & Tools diff --git a/documentation/docs/pages/operators/introduction.mdx b/documentation/docs/pages/operators/introduction.mdx index 4292e39a73..1ed3c1ffd5 100644 --- a/documentation/docs/pages/operators/introduction.mdx +++ b/documentation/docs/pages/operators/introduction.mdx @@ -40,6 +40,9 @@ If you want to explore kickstart options and examples, learn how to integrate wi * [Validators](nodes/validator-setup.mdx) * [Nym API Setup](nodes/validator-setup/nym-api.mdx) +**Performance Monitoring** +* [Performance, probe and measurements](performance-and-testing) + **Tokenomics, rewards and roadmap** * [General tokenomics page](tokenomics.mdx) * [Nym Node rewards page](tokenomics/mixnet-rewards.mdx) diff --git a/documentation/docs/pages/operators/nodes/_meta.json b/documentation/docs/pages/operators/nodes/_meta.json index 1a235c011d..43bff5e938 100644 --- a/documentation/docs/pages/operators/nodes/_meta.json +++ b/documentation/docs/pages/operators/nodes/_meta.json @@ -2,6 +2,5 @@ "preliminary-steps": "Preliminary Steps", "nym-node": "Nym Node", "validator-setup": "Nyx Validator Setup", - "maintenance": "Maintenance", - "performance-and-testing": "Performance Monitoring & Testing" + "maintenance": "Maintenance" } diff --git a/documentation/docs/pages/operators/nodes/maintenance/manual-upgrade.mdx b/documentation/docs/pages/operators/nodes/maintenance/manual-upgrade.mdx index 8b3db6b61b..d2a99e5cbe 100644 --- a/documentation/docs/pages/operators/nodes/maintenance/manual-upgrade.mdx +++ b/documentation/docs/pages/operators/nodes/maintenance/manual-upgrade.mdx @@ -55,7 +55,7 @@ journalctl -f -u nym-node.service After changes coming along with `v2024.13-magura` (`nym-node v1.1.10`), Nym Explorer is no longer picking all values correctly. Instead of fixing this outdated explorer, we are working on a new one, coming out soon. -[Nym Harbourmaster](https://harbourmaster.nymtech.net) has cache of 90min, expect your values to be updated with delay. We are aware of some issues with Nym Harbourmaster and working hard to resolve them in the upcoming explorer v2. To check your routing values in real time, you can use [`nym-gateway-probe`](../performance-and-testing/gateway-probe). +[Nym Harbourmaster](https://harbourmaster.nymtech.net) has cache of 90min, expect your values to be updated with delay. We are aware of some issues with Nym Harbourmaster and working hard to resolve them in the upcoming explorer v2. To check your routing values in real time, you can use [`nym-gateway-probe`](/operators/performance-and-testing/gateway-probe). ## Validator Upgrade diff --git a/documentation/docs/pages/operators/nodes/nym-node/bonding.mdx b/documentation/docs/pages/operators/nodes/nym-node/bonding.mdx index ef3ade7403..66320bcb83 100644 --- a/documentation/docs/pages/operators/nodes/nym-node/bonding.mdx +++ b/documentation/docs/pages/operators/nodes/nym-node/bonding.mdx @@ -28,7 +28,7 @@ Do not bond your node to the API if the previous steps weren't finished. Bad con Any new bonded node will provide only the bare minimum information: host, identity key and optionally custom port of its HTTP API - we highly recommend to set that one up to `8080`. Everything else will be discovered via the self-described API for maximum flexibility. This also includes the sphinx key, meaning if the API is not exposed, the node will be unable to route any traffic. -**Every operator has to make sure that their nodes [self-described endpoint works](../performance-and-testing#functionality--performance-check), otherwise the node will be un-routable and thus won't get any rewards!** +**Every operator has to make sure that their nodes [self-described endpoint works](/operators/performance-and-testing#functionality--performance-check), otherwise the node will be un-routable and thus won't get any rewards!** **Reveal your menominc phrase only in areas out of surveillance of other people and never share it with others. Nym team will never ask you for your mnemonic phrase - in case you were asked by someone it's a scam, do *not* reply to it!** @@ -79,7 +79,7 @@ If you are part of [Nym Delegation Program](https://delegations.explorenym.net) - You will be asked to run a `sign` command with your `nym-node` - copy and paste the long signature as the value of `--contract-msg` and sing it on your VPS: ```sh -./nym-node sign --contract-msg +./nym-node sign --id --contract-msg ``` - Copy the resulting signature string and paste it into the wallet nodal, press `Next` and confirm the transaction: diff --git a/documentation/docs/pages/operators/nodes/nym-node/setup.mdx b/documentation/docs/pages/operators/nodes/nym-node/setup.mdx index 56131612ca..de584513ec 100644 --- a/documentation/docs/pages/operators/nodes/nym-node/setup.mdx +++ b/documentation/docs/pages/operators/nodes/nym-node/setup.mdx @@ -21,10 +21,10 @@ This documentation page provides a guide on how to set up and run a [NYM NODE](. ```sh nym-node Binary Name: nym-node -Build Timestamp: 2025-10-30T12:43:37.933354749Z -Build Version: 1.20.0 -Commit SHA: 75a6d3426bd18dca600ad1cfa39b0a3c4f319c69 -Commit Date: 2025-10-30T11:59:32.000000000+01:00 +Build Timestamp: 2025-11-12T08:19:33.288341371Z +Build Version: 1.21.0 +Commit SHA: babf113fe5d396fa8a84fa939ad4b1b5b4d38b83 +Commit Date: 2025-11-12T08:39:48.000000000+01:00 Commit Branch: HEAD rustc Version: 1.88.0 rustc Channel: stable @@ -184,7 +184,7 @@ Make sure to use `--deny-init` flag to prevent initialisation of a new node. ## Functionality & Performance Check -We have a chapter called [Performance Monitoring & Testing](../performance-and-testing) including much more information and tooling. If you want to just quickly check your nodes performance, connectivity and much more, visit [harbourmaster.nymtech.net](https://harbourmaster.nymtech.net/). +We have a chapter called [Performance Monitoring & Testing](/operators/performance-and-testing) including much more information and tooling. If you want to just quickly check your nodes performance, connectivity and much more, visit [harbourmaster.nymtech.net](https://harbourmaster.nymtech.net/). For more information about available endpoints and their status, you can refer to: ```sh diff --git a/documentation/docs/pages/operators/nodes/performance-and-testing/gateway-probe.mdx b/documentation/docs/pages/operators/nodes/performance-and-testing/gateway-probe.mdx deleted file mode 100644 index 8b1b8f38f2..0000000000 --- a/documentation/docs/pages/operators/nodes/performance-and-testing/gateway-probe.mdx +++ /dev/null @@ -1,128 +0,0 @@ -# Nym Gateway Probe - -Nym Node operators running Gateway functionality are already familiar with the monitoring tool [Harbourmaster.nymtech.net](https://harbourmaster.nymtech.net). Under the hood of Nym Harbourmaster runs iterations of `nym-gateway-probe` doing various checks and displaying the results on the interface. Operators don't have to rely on the probe ran by Nym and wait for the data to refresh. With `nym-gateway-probe` everyone can check any Gateway's networking status from their own computer at any time. In one command the client queries data from: - -- [`nym-api`](https://validator.nymtech.net/api/v1/gateways) -- [`explorer-api`](https://mainnet-node-status-api.nymtech.cc/swagger/#/Gateways) -- [`harbour-master`](https://harbourmaster.nymtech.net/) - - -## Preparation - -We recommend to have installed all [the prerequisites](../binaries/building-nym.md#prerequisites) needed to build `nym-node` from source including latest [Rust Toolchain](https://www.rust-lang.org/tools/install), **and** make sure to have [Go](https://go.dev/doc/install) installed. Go is necessary as the probe uses the `rust2go` FFI library to use `netstack` when making requests. - -## Installation - -`nym-gateway-probe` source code is in [`nym-vpn-client`](https://github.com/nymtech/nym-vpn-client) repository. The client needs to be build from source. - -1. Clone the repository: - -```sh -git clone https://github.com/nymtech/nym-vpn-client.git -``` - -2. Build `nym-gateway-probe`: - -```sh -cd nym-vpn-client/nym-vpn-core - -cargo build --release -p nym-gateway-probe -``` - -## Running the Client - -To list all commands and options run the binary with `--help` command: - -```sh -./target/release/nym-gateway-probe -h -``` - -- Output: - -```sh -Usage: nym-gateway-probe [OPTIONS] --mnemonic - -Options: - -c, --config-env-file - Path pointing to an env file describing the network - -g, --entry-gateway - The specific gateway specified by ID - -n, --node - Identity of the node to test - --min-gateway-mixnet-performance - - --min-gateway-vpn-performance - - --only-wireguard - - -i, --ignore-egress-epoch-role - Disable logging during probe - --no-log - - -a, --amnezia-args - Arguments to be appended to the wireguard config enabling amnezia-wg configuration - --netstack-download-timeout-sec - [default: 180] - --netstack-v4-dns - [default: 1.1.1.1] - --netstack-v6-dns - [default: 2606:4700:4700::1111] - --netstack-num-ping - [default: 5] - --netstack-send-timeout-sec - [default: 3] - --netstack-recv-timeout-sec - [default: 3] - --netstack-ping-hosts-v4 - [default: nymtech.net] - --netstack-ping-ips-v4 - [default: 1.1.1.1] - --netstack-ping-hosts-v6 - [default: ipv6.google.com] - --netstack-ping-ips-v6 - [default: 2001:4860:4860::8888 2606:4700:4700::1111 2620:fe::fe] - --mnemonic - - -h, --help - Print help - -V, --version - Print version -``` - -To run the client, simply add `-n` flag followed by the ID key of the node you wish to test, as well as the mnemonic of a funded Nyx account; this is required to test the ticketbook generation. - -```sh -./target/release/nym-gateway-probe -n --mnemonic -``` - -For any `nym-node --mode exit-gateway` the aim is to have this outcome: - -```json -{ - "gateway": "", - "outcome": { - "as_entry": { - "can_connect": true, - "can_route": true - }, - "as_exit": { - "can_connect": true, - "can_route_ip_v4": true, - "can_route_ip_external_v4": true, - "can_route_ip_v6": true, - "can_route_ip_external_v6": true - }, - "wg": { - "can_register": true, - "can_handshake": true, - "can_resolve_dns": true, - "ping_hosts_performance": 1.0, - "ping_ips_performance": 1.0 - } - } -} -``` - -**If your Gateway is blacklisted, the probe will not work.** - -If you don't provide a `-n` flag it will pick a random node to test. diff --git a/documentation/docs/pages/operators/nodes/performance-and-testing.mdx b/documentation/docs/pages/operators/performance-and-testing.mdx similarity index 55% rename from documentation/docs/pages/operators/nodes/performance-and-testing.mdx rename to documentation/docs/pages/operators/performance-and-testing.mdx index ba700cf031..317e4f0978 100644 --- a/documentation/docs/pages/operators/nodes/performance-and-testing.mdx +++ b/documentation/docs/pages/operators/performance-and-testing.mdx @@ -1,18 +1,37 @@ import { Callout } from 'nextra/components'; +import { Tabs } from 'nextra/components'; +import { MyTab } from 'components/generic-tabs.tsx'; +import { AccordionTemplate } from 'components/accordion-template.tsx'; +import NodePerfWG from 'components/operators/snippets/node-perf-wg.mdx'; +import NodePerfMixnet from 'components/operators/snippets/node-perf-mixnet.mdx'; # Performance Monitoring & Testing -Nym Mixnet has been running on mainnet for quite some time. There is still work to be done in order for the network to meet its full potential - mass adoption of privacy through fully distributed Mixnet. +As Nym developers constantly improve the software, the role of Node Operators is to keep their nodes up to date, monitor their performance and share feedback with the rest of the community and Nym team. Node performance measurements and [server monitoring](#monitoring) are an essential pillar of our common work. -As developers we need to be constantly improving the software. Operators have as much important role, keep their nodes up to date, monitor their performance and share their feedback with the rest of the community and core developers. +Nym Network is routed either through the Mixnet (5-hop) or through Wireguard (2-hop). In all cases Nym node operators always employ only one binary called [`nym-node`](/operators/nodes/nym-node). Through provided arguments (or changes in the config file), `nym-node` can be utilised for different [functionalities](/operators/nodes/nym-node/setup#functionality-mode). However, once it's [registered to Nym Network](/operators/nodes/nym-node/bonding) it's by default available for Nym Mixnet not for Wireguard routing. Only nodes with Wireguard enabled, are also available for Wireguard routing. This creates a situation where every Wireguard enabled `nym-node` is required to have a solid performance score in Mixnet to begin with, but not every Mixnet routing `nym-node` must have Wireguard enabled. + +Given this complexity, we divided the part below about perfromance calculation logic and node selection into two parallel tabs: Mixnet and Wireguard. + +
+ Mixnet: Nodes Performance Calculation, + WireGuard: Gateways Performance Calculation, + ]} defaultIndex="0"> + + + +
-Therefore [monitoring](#monitoring) and [testing](#testing) are essential pieces of our common work. We call out all Nym operators to join the efforts! ## Functionality & Performance Check -If you want to just quickly check your nodes performance, connectivity and much more, visit [harbourmaster.nymtech.net](https://harbourmaster.nymtech.net/). +If you want to check your nodes performance, connectivity and much more, see some of the dashobards: -For more information about available endpoints and their status, you can refer to: +- [Node Status dashboard](https://node-status.nym.com/dvpn): Shows latest probe results on one board +- [Nym Node Status Observatory](https://harbourmaster.nymtech.net): New version of a good old Nym Harbourmaster, allowing operators preview stats of each node + +For more information about available endpoints and their status, you can refer to [`nymvpn.com/api/public/v1/directory/gateways`](https://nymvpn.com/api/public/v1/directory/gateways) or see directly self described endpoints of your node: ```sh # sustitude or with the one corresponding to your node # for http @@ -23,7 +42,7 @@ http:///api/v1/swagger/#/ # for reversed proxy/WSS https:///api/v1/swagger/#/ ``` - + For example to determine which mode your node is running, you can check the `:8080/api/v1/roles` endpoint: ```sh # sustitude or with the one corresponding to your node @@ -35,6 +54,7 @@ http:///api/v1/roles # for reversed proxy/WSS https:///api/v1/roles ``` + ## Monitoring @@ -44,7 +64,7 @@ There are multiple ways to monitor performance of nodes and the machines on whic A list of different scripts, templates and guides for easier navigation: -* [`nym-gateway-probe`](perfomance-and-testing/gateway-probe.mdx) - a useful tool used under the hood of [harbourmaster.nymtech.net](https://harbourmaster.nymtech.net) +* [`nym-gateway-probe`](performance-and-testing/gateway-probe.mdx) - a useful tool used under the hood of [Node Status Observatory](https://harbourmaster.nymtech.net) * [Prometheus and Grafana](performance-and-testing/prometheus-grafana.mdx) self-hosted setup * [Nym-node CPU cron service](https://gist.github.com/tommyv1987/97e939a7adf491333d686a8eaa68d4bd) - an easy bash script by Nym core developer [@tommy1987](https://gist.github.com/tommyv1987), designed to monitor a CPU usage of your node, running locally * Nym's script [`prom_targets.py`](https://github.com/nymtech/nym/blob/develop/scripts/prom_targets.py) - a useful python program to request data from API and can be run on its own or plugged to more sophisticated flows @@ -53,7 +73,7 @@ A list of different scripts, templates and guides for easier navigation: For the purpose of the performance testing Nym core developers plan to run instances of Prometheus and Grafana connected to Node explorer in the house. The network overall key insights we seek from these tests are primarily internal. We're focused on pinpointing bottlenecks, capacity loads, and monitoring cpu usage on the nodes' machines. - +{/* LEAVING THIS BIT FOR FUTURE F&F CASES: ## Testing @@ -73,3 +93,4 @@ We do testing in order to **understand and increase the overall quality of the N 7. Adjust rewarding based on the machine specs and server pricing Visit [Nym Harbour Master](https://harbourmaster.nymtech.net/) monitoring page to monitor network components (nodes) performance. +*/} \ No newline at end of file diff --git a/documentation/docs/pages/operators/nodes/performance-and-testing/_meta.json b/documentation/docs/pages/operators/performance-and-testing/_meta.json similarity index 60% rename from documentation/docs/pages/operators/nodes/performance-and-testing/_meta.json rename to documentation/docs/pages/operators/performance-and-testing/_meta.json index 32d200a0dc..9d5f481d1c 100644 --- a/documentation/docs/pages/operators/nodes/performance-and-testing/_meta.json +++ b/documentation/docs/pages/operators/performance-and-testing/_meta.json @@ -1,4 +1,5 @@ -{ +{ "gateway-probe": "Gateway Probe", + "gateway-probe-details": "Gateway Probe Details", "prometheus-grafana": "Prometheus & Grafana" } diff --git a/documentation/docs/pages/operators/performance-and-testing/gateway-probe-details.mdx b/documentation/docs/pages/operators/performance-and-testing/gateway-probe-details.mdx new file mode 100644 index 0000000000..7dbbfbfd29 --- /dev/null +++ b/documentation/docs/pages/operators/performance-and-testing/gateway-probe-details.mdx @@ -0,0 +1,139 @@ +import { Callout, CalloutTitle, CalloutDescription } from 'nextra/components'; +import { Steps } from 'nextra/components'; +import { IPR } from 'components/operators/snippets/ipr.js'; +import { ICMP } from 'components/operators/snippets/icmp.js'; + +# Gateway Probes Details & Contradictions + +## Summary + +A simplified explanation of node performance measuring is that the [Node Status API](https://node-status.nym.com) runs [gateway probes](/operators/performance-and-testing/gateway-probe) that connect to gateways to: + +- Check the configuration of gateways + - Checks a list of capabilities (e.g. can route IPv4 traffic in mixnet mode) + - Checks a list of configuration (e.g. runs IPR, has exit policy) +- Acts like a user: + - Registers a mixnet client + - Registers a wireguard peer and tops up bandwidth with a zk-nym + - Sends ICMP ping packets + - Downloads files + +The results are collected and stored in the [Node Status API](https://node-status.nym.com) and can be also veiwed per node in [Node Status Observatory](https://harbourmaster.nymtech.net). + +The [NymVPN API directory](https://nymvpn.com/api/public/v1/directory/gateways) cache uses the output of the gateway probes to calculate and display hints to users about the contention on each gateway and what they might expect if they use the gateway. + +## Heisenberg’s Uncertainty Principle for Gateways + +> The uncertainty principle, also known as Heisenberg's indeterminacy principle, is a fundamental concept in quantum mechanics. It states that there is a limit to the precision with which certain pairs of physical properties, such as position and momentum, can be simultaneously known. In other words, the more accurately one property is measured, the less accurately the other property can be known. +> +> [https://en.wikipedia.org/wiki/Uncertainty\_principle](https://en.wikipedia.org/wiki/Uncertainty_principle) + +The nodes in the Nym network are run by independent operators, so we can only know: + +- What we see from the outside + - Probes can run tests like users + - Users can report performance from a Gateway (also includes the performance of the user’s internet connection and the speed of the host they are using) +- What we ask operators to report + - They can lie + - We can’t check them + +### Gateway Probe Generates a Stream to Fill Available Bandwidth on Gateway + +The probe can check a Gateway periodically and can generate a traffic stream to use the remaining bandwidth: + +![](/images/operators/performance/perceived-gw-dwl.png) + +Depending on how busy the Gateway is with user streams, the probe will report different values for the available remaining bandwidth. + + +This is currently what we do with downloading a 10MB file + + +If the timing of the probe and user activity overlaps, then the “available bandwidth” remaining looks like this from the probe’s perspective: + +![](/images/operators/performance/bandwith-probe-user-overlaps.png) + +### Fully Utilised Gateways Will Have Low Availability + +If a Gateway is popular, then there will not be a lot of room for the probe’s stream: + +![](/images/operators/performance/popular-gw-probe.png) + +The Gateway is doing a fine job is serving 92.5% of its available capacity to clients, and it only have 7.5Mbps available for another user. + + +Is that enough for a user? Only they can know! + + +### Can Another Netflix 4k Stream Fit? + +Streaming Netflix at 4k takes anywhere from 11-15Mbps, so lets see what that looks like in a few cases: + +###### “Yay, Netflix will fit most of the time” + +![](/images/operators/performance/netflix-fits-bandwidth.png) + +###### “Netflix is not going to fit” + +![](/images/operators/performance/netflix-not-fit.png) + +### Does Measuring Affect Users of the Gateway? + +If we add heavy traffic streams to Gateways, what happens to other users? + +Imagine there are 6 \* Netflix 4k users on a 100Mbps Gateway, let's look at different traffic stream scenarios: + +###### Take the space of 2 streams + +Two users will stall while we use their space: + +![](/images/operators/performance/two-streams-space.png) + +###### Scale the user space down by the test stream + +Adjust the Gateway settings to force users into less bandwidth and make the test take priority: + +*Sad users for 5 minutes* + +![](/images/operators/performance/sad-users.png) + +*Angry users for 5 minutes* + +![](/images/operators/performance/angry-users.png) + +*Furious users for 5 minutes* + +![](/images/operators/performance/furious-users.png) + +## Gateways, IaaS and Network Quotas + +IaaS providers like Linode, AWS, etc and data centre providers have a mix of methods where they can cap or rate limit VMs or physical connections: + +- **Fixed quota:** you can only use the outbound networking available, e.g. AWS limits to 100Mbps + +![](/images/operators/performance/capped-bandwidth.png) + +- **Fixed quota with burst:** you get a fixed outbound network rate, but can burst above it + - You pay penalties when you burst - many data centres and fixed lines do this + - You have a leaky bucket - you can only burst with your saved quota + +![](/images/operators/performance/burst-charges.png) + +- **Leaky bucket quota:** you start with a small quota that builds up to a maximum, but once you use your “saved quota” you drop down to the rate at which your quota comes in. Or sometimes no matter how much you pour into the bucket, only a fixed amount drains out the other side (see [https://en.wikipedia.org/wiki/Leaky\_bucket](https://en.wikipedia.org/wiki/Leaky_bucket)) + +![](/images/operators/performance/leaky-bucket.png) + +This means that if there is a flexible quota, a gateway with high usage, can burn through its quota early in the monthly billing cycle leaving it rate limited for the majority of the month: + +![](/images/operators/performance/vps-quota.png) + +The cheaper the VPS, the more it is likely to be rate limited or have a leaky bucket quota that will appear to users as “unreliable”. + +The best hosts will be ones with a fixed bandwidth that is capped by the hosting provider with network equipment, because: + +- Users will scale with the available bandwidth +- No weird side effects of quotas +- Most predictable behaviour +- Will not be the cheapest, but will also not be the most expensive + +Bursting sounds attractive, but could be financially crippling for operators. \ No newline at end of file diff --git a/documentation/docs/pages/operators/performance-and-testing/gateway-probe.mdx b/documentation/docs/pages/operators/performance-and-testing/gateway-probe.mdx new file mode 100644 index 0000000000..a9b7199761 --- /dev/null +++ b/documentation/docs/pages/operators/performance-and-testing/gateway-probe.mdx @@ -0,0 +1,132 @@ +# Nym Gateway Probe + +Nym Node operators running Gateway functionality are already familiar with the monitoring tool [Harbourmaster.nymtech.net](https://harbourmaster.nymtech.net). Under the hood of Nym Harbourmaster runs iterations of `nym-gateway-probe` doing various checks and displaying the results on the interface. Operators don't have to rely on the probe ran by Nym and wait for the data to refresh. With `nym-gateway-probe` everyone can check any Gateway's networking status from their own computer at any time. In one command the client queries data from: + +- [`nym-api`](https://validator.nymtech.net/api/v1/gateways) +- [`explorer-api`](https://mainnet-node-status-api.nymtech.cc/swagger/#/Gateways) +- [`harbour-master`](https://harbourmaster.nymtech.net/) + + +## Preparation + +We recommend to have installed all [the prerequisites](../binaries/building-nym.md#prerequisites) needed to build `nym-node` from source including latest [Rust Toolchain](https://www.rust-lang.org/tools/install), **and** make sure to have [Go](https://go.dev/doc/install) installed. Go is necessary as the probe uses the `rust2go` FFI library to use `netstack` when making requests. + +## Installation + +`nym-gateway-probe` source code is in [`nym` monorepo](https://github.com/nymtech/nym). The probe needs to be built from source. + +1. Clone the repository: + +```sh +git clone https://github.com/nymtech/nym.git +``` + +2. Build `nym-gateway-probe`: + +```sh +cargo build --release -p nym-gateway-probe +``` + +## Running the Client + +To list all commands and options run the binary with `--help` command: + +```sh +./target/release/nym-gateway-probe -h +``` + +- Output: + +```sh + Usage: nym-gateway-probe [OPTIONS] [COMMAND] + + Commands: + run-local Run the probe locally + help Print this message or the help of the given subcommand(s) + + Options: + -c, --config-env-file + Path pointing to an env file describing the network + -g, --entry-gateway + The specific gateway specified by ID + -n, --node + Identity of the node to test + --min-gateway-mixnet-performance + + --only-wireguard + + --ignore-egress-epoch-role + Disable logging during probe + --no-log + + -a, --amnezia-args + Arguments to be appended to the wireguard config enabling amnezia-wg configuration + --netstack-download-timeout-sec + [default: 180] + --metadata-timeout-sec + [default: 30] + --netstack-v4-dns + [default: 1.1.1.1] + --netstack-v6-dns + [default: 2606:4700:4700::1111] + --netstack-num-ping + [default: 5] + --netstack-send-timeout-sec + [default: 3] + --netstack-recv-timeout-sec + [default: 3] + --netstack-ping-hosts-v4 + [default: nym.com] + --netstack-ping-ips-v4 + [default: 1.1.1.1] + --netstack-ping-hosts-v6 + [default: cloudflare.com] + --netstack-ping-ips-v6 + [default: 2001:4860:4860::8888 2606:4700:4700::1111 2620:fe::fe] + --ticket-materials + + --ticket-materials-revision + [default: 1] + -h, --help + Print help + -V, --version + Print version +``` + +To run the client, simply add `-g` flag followed by the ID key of the node you wish to test, as well as the mnemonic of a funded Nyx account; this is required to test the ticketbook generation. **Note that this accout needs to have NYM tokens; you cannot use an account with a NymVPN subscription**. Make sure to have at least a few NYM tokens in there. + +```sh +./target/release/nym-gateway-probe run-local -g --mnemonic +``` + +For any `nym-node --mode exit-gateway` the aim is to have this outcome: + +```json +{ + "gateway": "", + "outcome": { + "as_entry": { + "can_connect": true, + "can_route": true + }, + "as_exit": { + "can_connect": true, + "can_route_ip_v4": true, + "can_route_ip_external_v4": true, + "can_route_ip_v6": true, + "can_route_ip_external_v6": true + }, + "wg": { + "can_register": true, + "can_handshake": true, + "can_resolve_dns": true, + "ping_hosts_performance": 1.0, + "ping_ips_performance": 1.0 + } + } +} +``` + +**If your Gateway is blacklisted, the probe will not work.** + +If you don't provide a `-g` flag it will pick a random node to test. diff --git a/documentation/docs/pages/operators/nodes/performance-and-testing/prometheus-grafana.mdx b/documentation/docs/pages/operators/performance-and-testing/prometheus-grafana.mdx similarity index 100% rename from documentation/docs/pages/operators/nodes/performance-and-testing/prometheus-grafana.mdx rename to documentation/docs/pages/operators/performance-and-testing/prometheus-grafana.mdx diff --git a/documentation/docs/pages/operators/nodes/performance-and-testing/prometheus-grafana/_meta.json b/documentation/docs/pages/operators/performance-and-testing/prometheus-grafana/_meta.json similarity index 100% rename from documentation/docs/pages/operators/nodes/performance-and-testing/prometheus-grafana/_meta.json rename to documentation/docs/pages/operators/performance-and-testing/prometheus-grafana/_meta.json diff --git a/documentation/docs/pages/operators/nodes/performance-and-testing/prometheus-grafana/explorenym-scripts.mdx b/documentation/docs/pages/operators/performance-and-testing/prometheus-grafana/explorenym-scripts.mdx similarity index 100% rename from documentation/docs/pages/operators/nodes/performance-and-testing/prometheus-grafana/explorenym-scripts.mdx rename to documentation/docs/pages/operators/performance-and-testing/prometheus-grafana/explorenym-scripts.mdx diff --git a/documentation/docs/pages/operators/tokenomics.mdx b/documentation/docs/pages/operators/tokenomics.mdx index 8247730461..23f9e00517 100644 --- a/documentation/docs/pages/operators/tokenomics.mdx +++ b/documentation/docs/pages/operators/tokenomics.mdx @@ -148,7 +148,7 @@ Nym Mixnet is using an active set of chosen nodes. Currently the [active set The alorithm for selecting the nodes into the Rewarded set is in detail explained in the [Rewarded set selection logic part](tokenomics/mixnet-rewards#rewarded-set-selection). -In dVPN (2-hop) mode every node which meets the [performance criteria](tokenomics/mixnet-rewards#node-performance-calculation), including wireguard and IPv6 routing tests, becomes eligible to take part in the network. Whether the node is working or not then depends on the NymVPN end users choise of the location or exact nodes selection. +In dVPN (2-hop) mode every node which meets the [performance criteria](tokenomics/mixnet-rewards#mixnet-node-performance-calculation), including wireguard and IPv6 routing tests, becomes eligible to take part in the network. Whether the node is working or not then depends on the NymVPN end users choise of the location or exact nodes selection.
diff --git a/documentation/docs/pages/operators/tokenomics/mixnet-rewards.mdx b/documentation/docs/pages/operators/tokenomics/mixnet-rewards.mdx index c7d1007bd7..ee1cd26ae6 100644 --- a/documentation/docs/pages/operators/tokenomics/mixnet-rewards.mdx +++ b/documentation/docs/pages/operators/tokenomics/mixnet-rewards.mdx @@ -11,6 +11,7 @@ import StakeSaturation from 'components/outputs/api-scraping-outputs/nyx-outputs import StakeSaturationSnippet from 'components/operators/snippets/stake-saturation.mdx'; import CirculatingSupply from 'components/outputs/api-scraping-outputs/nyx-outputs/circulating-supply.md'; import StakingTarget from 'components/outputs/api-scraping-outputs/nyx-outputs/staking-target.md'; +import NodePerfMixnet from 'components/operators/snippets/node-perf-mixnet.mdx'; import { TimeNow } from 'components/time-now.tsx'; import { AccordionTemplate } from 'components/accordion-template.tsx'; import { Clt } from 'components/callout-custom/CalloutCustom.jsx'; @@ -57,7 +58,7 @@ Nodes bonded with vesting tokens are [not allowed to join rewarded set](https:// ## Rewards Logic & Overview -This is a quick summary, to understand the logic behind fundamentals like [rewarded set selection](#rewarded-set-selection), [node performance](#node-performance-calculation), [stake saturation](#stake-saturation), or [rewards calculation](#rewards-calculation), please read the chapters below. +This is a quick summary, to understand the logic behind fundamentals like [rewarded set selection](#rewarded-set-selection), [node performance](#mixnet-node-performance-calculation), [stake saturation](#stake-saturation), or [rewards calculation](#rewards-calculation), please read the chapters below. * **The current reward system is called [*Naive rewarding*](#naive-rewarding) - an intermediate step - where the operators of `nym-node` get rewarded from [Mixmining pool](https://validator.nymtech.net/api/v1/epoch/reward_params), which emits NYM per hour** * **Only nodes selected to [rewarded set](../tokenomics.mdx#active-set) of Mixnet receive rewards** @@ -67,7 +68,7 @@ This is a quick summary, to understand the logic behind fundamentals like [rewar * If a node is selected to the rewarded set, it will be rewarded in the end of the epoch, based on this reward calculation formula: -> **node_epoch_rewards = [total_epoch_reward_budget](https://validator.nymtech.net/api/v1/epoch/reward_params) \* node_work_fraction \* [node_stake_saturation](#stake-saturation) \* [node_performance](#node-performance-calculation)** +> **node_epoch_rewards = [total_epoch_reward_budget](https://validator.nymtech.net/api/v1/epoch/reward_params) \* node_work_fraction \* [node_stake_saturation](#stake-saturation) \* [node_performance](#mixnet-node-performance-calculation)** > > We know that:
> **[total_epoch_reward_budget](https://validator.nymtech.net/api/v1/epoch/reward_params) = **
@@ -75,7 +76,7 @@ This is a quick summary, to understand the logic behind fundamentals like [rewar > **[active_set_size](https://validator.nymtech.net/api/v1/epoch/reward_params) = 240** > > Therefore:
-> **node_epoch_rewards = \* 1 / 240 \* [node_stake_saturation](#stake-saturation) \* [node_performance](#node-performance-calculation)** +> **node_epoch_rewards = \* 1 / 240 \* [node_stake_saturation](#stake-saturation) \* [node_performance](#mixnet-node-performance-calculation)**
In reality there is a an additional value called **α**, giving a premium to nodes with a higher self bond. And additionally an operator gets more rewards based on [*Operators cost*](#rewards-distribution) and [*Profit margin*](#rewards-distribution) size. **Read chapter [Rewards calculation](#rewards-calculation) to be able to navigate in all the details relevant for operators and delegators.** @@ -163,7 +164,7 @@ For a node to be rewarded, the node must be part of a [Rewarded set](https://val Nodes selected into the rewarded set are chosen probabilisticaly, and their selection chances increase the larger nodes weight is. Weight value is always between `0` and `1` and it's calculated by multiplying these parameters, each of them also having a value between `0` and `1` (some are floats, some are binary): -**1. [Performance](#node-performance-calculation):** This value consists of: +**1. [Performance](#mixnet-node-performance-calculation):** This value consists of: - [Config score](#config-score-calculation): highest (`1`) when the node is running the latest version of the software, has [T&C's accepted](../nodes/nym-node/setup.mdx#terms--conditions) and self described API endpoint available - [Routing ](#routing-score-calculation): highest (`1`) when the node is consistently online and correctly processes all the received traffic (100% of time) @@ -175,7 +176,7 @@ Nodes selected into the rewarded set are chosen probabilisticaly, and their sele > **active_set_selection_weight = stake_saturation \* ( node_performance ^ 20 )** -For the rewarded set selection weight, good [performance](#node-performance-calculation) is much more essential than [stake saturation](#stake-saturation), because it's lifted to 20th power in the selection algorhitm. +For the rewarded set selection weight, good [performance](#mixnet-node-performance-calculation) is much more essential than [stake saturation](#stake-saturation), because it's lifted to 20th power in the selection algorhitm. For a comparison we made an example with 5 nodes, where first number is node performance and second stake saturation (assuming all of them [`config_score`](#config-score-calculation) = `1` for simplification): @@ -268,99 +269,10 @@ weight_total = 95 In reality we have mixing nodes selected into 3 layers. To increase security, there is an additional function in place where a node cannot be assigned to the same layer in two following epochs. -Below we break down [performance calculation](#node-performance-calculation) and show examples. +Below we break down [performance calculation](#mixnet-node-performance-calculation) and show examples. -## Node Performance Calculation - -Performance is a value between `0` and `1`. The final performance number is a result of multiplying [config score](#config-score-calculation) and [routing score](#routing-score-calculation). - - -> **node_performance = config_score \* routing_score** - - -Performance value is an average of last 24h. - - -All parameters regarding performance score can be browsed or pull live from: - -`https://validator.nymtech.net/api/v1/nym-nodes/annotation/` - -In case you don't know your nodes `NODE_ID`, it's easy to find as long as your node is bonded. Visit [validator.nymtech.net/api/v1/nym-nodes/bonded](https://validator.nymtech.net/api/v1/nym-nodes/bonded) and search your node using `identity_key` or bonding Nyx account address (denoted as `owner`). - - -### Config Score Calculation - -Config score is in place to ensure that the node configuration is done properly so the node is eligible for taking part in Nym network. The API looks into these paramteres: - -1. If the node binary is `nym-node` (not legacy `nym-mixnode` or `nym-gateway`): `1` if `True`, `0` if `False` -2. If [Terms & Conditions](../nodes/nym-node/setup.mdx#terms--conditions) are accepted: `1` if `True`, `0` if `False` -3. If the nodes self described endpoint is available: `1` if `True`, `0` if `False` -4. Version of `nym-node` binary: decreasing weight for outdated versions, as [explained below](#versions-behind-calculation) - -**The `config_score` calculation formula:** - - -> **config_score = is_tc_accepted \* is_nym-node_binary \* self_described_api_available \* ( 0.995 ^ ( ( X * versions_behind) ^ 1.65 ) )** - - -First three points have binary values of either `0` or `1`, with a following logic: - -| **Run `nym-node` binary** | **T&C's accepted** | **Self described available** | **Value** | -| :-- | :-- | :-- | ---: | -| **True** | **True** | **True** | **1** | -| True | False | False | 0 | -| True | True | False | 0 | -| False | True | True | 0 | -| False | False | True | 0 | -| True | False | True | 0 | -| False | False | False | 0 | -| False | True | False | 0 | - -**Only if ALL conditions above are `True` the node can have any chance to be selected, as otherwise the probability will always be 0.** - - -Besides these values, the API also checks whether the node is bonded in Mixnet smart contract as a Nym Node or legacy node (Mixnode or Gateway). **Only nodes bonded as Nym Node in Mixnet smart contract can be selected to the Rewrded set. Thus, if you haven't migrated your node yet, please [follow these steps](../nodes/nym-node/bonding#migrate-to-nym-node-in-mixnet-smart-contract)!** - - -#### Versions Behind Calculation - -From release `2024.14-crunch` (`nym-node v1.2.0`), the `config_score` parameter takes into account also nodes version (denoted as `versions_behind`). The "current version" is the one marked as `Latest` in the [repository](https://github.com/nymtech/nym/releases/). The parameter `versions_behind` indicates the number of versions between the `Latest` version and the version run by the node, and it is factored into the config score with this formula: - - -> **0.995 ^ ( ( X * versions_behind ) ^ 1.65 )** -> -> where:
-> **X = 1; for patches**
-> **X = 10; for minor versions**
-> **X = 100; for major versions** -
- -> The exact parameters are live accessible on [`/v1/status/config-score-details`](https://validator.nymtech.net/api/swagger/index.html#/Status/config_score_details). - -Our versioning convention is: `major_version . minor_version . patch` - -For example `nym-node` on version `1.2.0` is on 1st major version, 2nd minor and 0 patches. - -Note that the `X` multiplier heavily lowers the `config_score` when nodes are outdated with respect to more significant updates. See the the table and graph below: - -| **Version behind** | **Patches (X = 1)** | **Minor versions (X = 10)** | **Major versions (X = 100)** | -| :-- | --: | --: | --: | -| 0 (current version) | 1.0 | 1.0 | 1.0 | -| 1 | 0.995 | 0.7994 | 0.0000 | -| 2 | 0.9844 | 0.4953 | 0.0000 | -| 3 | 0.9698 | 0.2536 | 0.0000 | -| 4 | 0.9518 | 0.1102 | 0.0000 | -| 5 | 0.9311 | 0.0413 | 0.0000 | - - -![](/images/operators/tokenomics/reward_version_graph.png) - -As you can see above, the algorithm is designed to give maximum selection score (`1`) to the latest version, while non-upgraded nodes receive a lower score. The score decreases faster when the node has failed to make a major version upgrade, and slower when the node is behind only with minor updates. This scoring de-prioritizes the selection of outdated nodes, even if their saturation and performance are high. Nodes are selected probabilistically in each epoch (60 min), according to their scores, to be part of the Rewarded set. This scoring mechanism gives priority to the operators running up-to-date nodes, ensuring that the network is as updated as possible. - -### Routing Score Calculation - -Routing score is measured by Nym Network Monitor which sends thousands of packages through different routes every 15 minutes and measures how many were dropped on the way. Test result represents percentage of packets succesfully returned which are then converted into floats bettween `0` and `1`. + ## Stake Saturation @@ -378,7 +290,7 @@ If a node is active in the rewarded set, it will receive rewards in the end of t **Node rewards calculation formula:** -> **node_epoch_rewards = [total_epoch_reward_budget](https://validator.nymtech.net/api/v1/epoch/reward_params) \* [node_performance](#node-performance-calculation) \* [node_stake_saturation](#stake-saturation) \* ( node_work_fraction + α \* ( ( node_bond_size / [stake_saturation_level](https://validator.nymtech.net/api/v1/epoch/reward_params) ) / rewarded_set_size ) ) \* 1 / ( 1 + α )** +> **node_epoch_rewards = [total_epoch_reward_budget](https://validator.nymtech.net/api/v1/epoch/reward_params) \* [node_performance](#mixnet-node-performance-calculation) \* [node_stake_saturation](#stake-saturation) \* ( node_work_fraction + α \* ( ( node_bond_size / [stake_saturation_level](https://validator.nymtech.net/api/v1/epoch/reward_params) ) / rewarded_set_size ) ) \* 1 / ( 1 + α )** > > Where:
> **[total_epoch_reward_budget](https://validator.nymtech.net/api/v1/epoch/reward_params) = **
@@ -388,7 +300,7 @@ If a node is active in the rewarded set, it will receive rewards in the end of t > **α = 0.3** > > Therefore:
-> **node_epoch_rewards = \* [node_performance](#node-performance-calculation) \* [node_stake_saturation](#stake-saturation) \* ( ( 1 / 240 ) + 0.3 \* ( ( node_bond_size / ) / 240 ) ) \* 1 / ( 1 + 0.3 )** +> **node_epoch_rewards = \* [node_performance](#mixnet-node-performance-calculation) \* [node_stake_saturation](#stake-saturation) \* ( ( 1 / 240 ) + 0.3 \* ( ( node_bond_size / ) / 240 ) ) \* 1 / ( 1 + 0.3 )**
Performance and stake saturation (both are a float between `0` and `1` representing percentage) play an equally decisive role in the size of rewards earned after the epoch. The closer a node is to maximum value (`1`) of each of these parameters, the more rewards it will get. diff --git a/documentation/docs/pnpm-lock.yaml b/documentation/docs/pnpm-lock.yaml index 3fa8337bc4..1ff947d4a0 100644 --- a/documentation/docs/pnpm-lock.yaml +++ b/documentation/docs/pnpm-lock.yaml @@ -78,11 +78,11 @@ importers: specifier: '>=1.2.4-rc.2 || ^1' version: 1.4.1 '@nymproject/mix-fetch-full-fat': - specifier: '>=1.2.4-rc.2 || ^1' - version: 1.2.3 + specifier: '>=1.5.1-rc.0 || ^1.4.1' + version: 1.4.1 '@nymproject/sdk-full-fat': - specifier: '>=1.2.4-rc.2 || ^1' - version: 1.2.3 + specifier: '>=1.5.1-rc.0 || ^1.4.1' + version: 1.4.1 '@redocly/cli': specifier: ^1.25.15 version: 1.34.5(ajv@8.17.1) @@ -1679,11 +1679,11 @@ packages: '@nymproject/contract-clients@1.4.1': resolution: {integrity: sha512-HuJZ4Hv+Rl6ZZEtCHKgurNLJapM+QQRJlGkevFH2a4UdqUqF9omUkUi3AVes4679dPoSFgvA7plyVSDBdbgV6w==} - '@nymproject/mix-fetch-full-fat@1.2.3': - resolution: {integrity: sha512-5yAQhw33LC0cNsyV0Rj+LIa2kvJY+8jsfgOSr1aeKNfQ7dG4fngWkKnGUbPGzhUTJjqgXPTwNVeJSd6hwGim+g==} + '@nymproject/mix-fetch-full-fat@1.4.1': + resolution: {integrity: sha512-AMa21sEd9FELqAJe1lCyHPqxxbc13ApiJ1P/exAslQjiFPb/de/3Ow0FHqKGNPrwyVRS/T2pSzjQ3l8TddiEBA==} - '@nymproject/sdk-full-fat@1.2.3': - resolution: {integrity: sha512-lheA1Zk020o2t95FPVZfdUR0aSI52aD0aJQs074fjH16QkoNNEMotzhJGAnsnnczVg3bpddKghNpCLyDOWvg9A==} + '@nymproject/sdk-full-fat@1.4.1': + resolution: {integrity: sha512-dh5bvMUj3m8nEssvO8Nl66WpcJAjwRZrGNwqfczJWLG4nX3Vt95tPLv4v0/Z1W3DQWQFW6WmEPPYHNjl18V/fA==} '@opentelemetry/api-logs@0.53.0': resolution: {integrity: sha512-8HArjKx+RaAI8uEIgcORbZIPklyh1YLjPSBus8hjRmvLi6DeFzgOcdZ7KwPabKj8mXF8dX0hyfAyGfycz0DbFw==} @@ -9247,9 +9247,9 @@ snapshots: '@nymproject/contract-clients@1.4.1': {} - '@nymproject/mix-fetch-full-fat@1.2.3': {} + '@nymproject/mix-fetch-full-fat@1.4.1': {} - '@nymproject/sdk-full-fat@1.2.3': {} + '@nymproject/sdk-full-fat@1.4.1': {} '@opentelemetry/api-logs@0.53.0': dependencies: diff --git a/documentation/docs/public/images/developers/nym-arch-client-to-client.png b/documentation/docs/public/images/developers/nym-arch-client-to-client.png new file mode 100644 index 0000000000..18c0132653 Binary files /dev/null and b/documentation/docs/public/images/developers/nym-arch-client-to-client.png differ diff --git a/documentation/docs/public/images/developers/nym-arch-ip-routing.png b/documentation/docs/public/images/developers/nym-arch-ip-routing.png new file mode 100644 index 0000000000..e1c2cc2b34 Binary files /dev/null and b/documentation/docs/public/images/developers/nym-arch-ip-routing.png differ diff --git a/documentation/docs/public/images/developers/nym-browser-arch.png b/documentation/docs/public/images/developers/nym-browser-arch.png new file mode 100644 index 0000000000..925682b796 Binary files /dev/null and b/documentation/docs/public/images/developers/nym-browser-arch.png differ diff --git a/documentation/docs/public/images/operators/nym-vpn-sceenshots/nym-vpn-score1.png b/documentation/docs/public/images/operators/nym-vpn-sceenshots/nym-vpn-score1.png new file mode 100644 index 0000000000..d63a5e41ff Binary files /dev/null and b/documentation/docs/public/images/operators/nym-vpn-sceenshots/nym-vpn-score1.png differ diff --git a/documentation/docs/public/images/operators/nym-vpn-sceenshots/nym-vpn-score2.png b/documentation/docs/public/images/operators/nym-vpn-sceenshots/nym-vpn-score2.png new file mode 100644 index 0000000000..689d2cea31 Binary files /dev/null and b/documentation/docs/public/images/operators/nym-vpn-sceenshots/nym-vpn-score2.png differ diff --git a/documentation/docs/public/images/operators/performance/angry-users.png b/documentation/docs/public/images/operators/performance/angry-users.png new file mode 100644 index 0000000000..391cf1643e Binary files /dev/null and b/documentation/docs/public/images/operators/performance/angry-users.png differ diff --git a/documentation/docs/public/images/operators/performance/bandwith-probe-user-overlaps.png b/documentation/docs/public/images/operators/performance/bandwith-probe-user-overlaps.png new file mode 100644 index 0000000000..ec3bff14fe Binary files /dev/null and b/documentation/docs/public/images/operators/performance/bandwith-probe-user-overlaps.png differ diff --git a/documentation/docs/public/images/operators/performance/burst-charges.png b/documentation/docs/public/images/operators/performance/burst-charges.png new file mode 100644 index 0000000000..9f0d583d58 Binary files /dev/null and b/documentation/docs/public/images/operators/performance/burst-charges.png differ diff --git a/documentation/docs/public/images/operators/performance/capped-bandwidth.png b/documentation/docs/public/images/operators/performance/capped-bandwidth.png new file mode 100644 index 0000000000..0a2f2383ac Binary files /dev/null and b/documentation/docs/public/images/operators/performance/capped-bandwidth.png differ diff --git a/documentation/docs/public/images/operators/performance/furious-users.png b/documentation/docs/public/images/operators/performance/furious-users.png new file mode 100644 index 0000000000..bd10e839c7 Binary files /dev/null and b/documentation/docs/public/images/operators/performance/furious-users.png differ diff --git a/documentation/docs/public/images/operators/performance/leaky-bucket.png b/documentation/docs/public/images/operators/performance/leaky-bucket.png new file mode 100644 index 0000000000..0e68bcf118 Binary files /dev/null and b/documentation/docs/public/images/operators/performance/leaky-bucket.png differ diff --git a/documentation/docs/public/images/operators/performance/netflix-fits-bandwidth.png b/documentation/docs/public/images/operators/performance/netflix-fits-bandwidth.png new file mode 100644 index 0000000000..a1b0862453 Binary files /dev/null and b/documentation/docs/public/images/operators/performance/netflix-fits-bandwidth.png differ diff --git a/documentation/docs/public/images/operators/performance/netflix-not-fit.png b/documentation/docs/public/images/operators/performance/netflix-not-fit.png new file mode 100644 index 0000000000..0b4af6af23 Binary files /dev/null and b/documentation/docs/public/images/operators/performance/netflix-not-fit.png differ diff --git a/documentation/docs/public/images/operators/performance/perceived-gw-dwl.png b/documentation/docs/public/images/operators/performance/perceived-gw-dwl.png new file mode 100644 index 0000000000..e6b3c66756 Binary files /dev/null and b/documentation/docs/public/images/operators/performance/perceived-gw-dwl.png differ diff --git a/documentation/docs/public/images/operators/performance/popular-gw-probe.png b/documentation/docs/public/images/operators/performance/popular-gw-probe.png new file mode 100644 index 0000000000..2bc5e6f3dc Binary files /dev/null and b/documentation/docs/public/images/operators/performance/popular-gw-probe.png differ diff --git a/documentation/docs/public/images/operators/performance/sad-users.png b/documentation/docs/public/images/operators/performance/sad-users.png new file mode 100644 index 0000000000..45140fa29b Binary files /dev/null and b/documentation/docs/public/images/operators/performance/sad-users.png differ diff --git a/documentation/docs/public/images/operators/performance/two-streams-space.png b/documentation/docs/public/images/operators/performance/two-streams-space.png new file mode 100644 index 0000000000..1f602a67c9 Binary files /dev/null and b/documentation/docs/public/images/operators/performance/two-streams-space.png differ diff --git a/documentation/docs/public/images/operators/performance/vps-quota.png b/documentation/docs/public/images/operators/performance/vps-quota.png new file mode 100644 index 0000000000..cae056fe63 Binary files /dev/null and b/documentation/docs/public/images/operators/performance/vps-quota.png differ diff --git a/explorer-v2/next.config.js b/explorer-v2/next.config.js index ba18864d7e..86f3fcc2e1 100644 --- a/explorer-v2/next.config.js +++ b/explorer-v2/next.config.js @@ -2,23 +2,23 @@ /** @type {import('next').NextConfig} */ const nextConfig = { - reactStrictMode: true, + reactStrictMode: true, - basePath: "/explorer", - assetPrefix: "/explorer", - trailingSlash: false, + basePath: "/explorer", + assetPrefix: "/explorer", + trailingSlash: false, - async redirects() { - return [ - // Change the basePath to /explorer - { - source: "/", - destination: "/explorer", - basePath: false, - permanent: true, - }, - ]; - }, + async redirects() { + return [ + // Change the basePath to /explorer + { + source: "/", + destination: "/explorer", + basePath: false, + permanent: true, + }, + ]; + }, }; -module.exports = nextConfig \ No newline at end of file +module.exports = nextConfig; diff --git a/explorer-v2/src/components/search/NodeAndAddressSearch.tsx b/explorer-v2/src/components/search/NodeAndAddressSearch.tsx index 22eca32f4e..6f0de3a6da 100644 --- a/explorer-v2/src/components/search/NodeAndAddressSearch.tsx +++ b/explorer-v2/src/components/search/NodeAndAddressSearch.tsx @@ -1,5 +1,6 @@ "use client"; import type { IObservatoryNode } from "@/app/api/types"; +import { NYM_ACCOUNT_ADDRESS } from "@/app/api/urls"; import { Search } from "@mui/icons-material"; import { Autocomplete, @@ -13,7 +14,6 @@ import { useQuery } from "@tanstack/react-query"; import { useRouter } from "next/navigation"; import { useState } from "react"; import { fetchObservatoryNodes } from "../../app/api"; -import { NYM_ACCOUNT_ADDRESS } from "@/app/api/urls"; const NodeAndAddressSearch = () => { const router = useRouter(); @@ -50,7 +50,7 @@ const NodeAndAddressSearch = () => { } } catch { setErrorText( - "No node found with the provided Name, Node ID or Identity Key. Please check your input and try again." + "No node found with the provided Name, Node ID or Identity Key. Please check your input and try again.", ); setIsLoading(false); // Stop loading @@ -58,7 +58,7 @@ const NodeAndAddressSearch = () => { } } else { setErrorText( - "No node found with the provided Name, Node ID or Identity Key. Please check your input and try again." + "No node found with the provided Name, Node ID or Identity Key. Please check your input and try again.", ); setIsLoading(false); // Stop loading @@ -68,7 +68,7 @@ const NodeAndAddressSearch = () => { // Check if it's a node identity key if (nymNodes) { const matchingNode = nymNodes.find( - (node) => node.identity_key === inputValue + (node) => node.identity_key === inputValue, ); if (matchingNode) { @@ -77,13 +77,13 @@ const NodeAndAddressSearch = () => { } } setErrorText( - "No node found with the provided Name, Node ID or Identity Key. Please check your input and try again." + "No node found with the provided Name, Node ID or Identity Key. Please check your input and try again.", ); setIsLoading(false); } } catch (error) { setErrorText( - "No node found with the provided Name, Node ID or Identity Key. Please check your input and try again." + "No node found with the provided Name, Node ID or Identity Key. Please check your input and try again.", ); console.error(error); setIsLoading(false); // Stop loading @@ -92,7 +92,7 @@ const NodeAndAddressSearch = () => { // Handle search input change const handleSearchInputChange = ( - event: React.ChangeEvent + event: React.ChangeEvent, ) => { const value = event.target.value; setInputValue(value); @@ -107,7 +107,7 @@ const NodeAndAddressSearch = () => { const filteredNodes = nymNodes.filter((node) => node.self_description?.moniker ?.toLowerCase() - .includes(value.toLowerCase()) + .includes(value.toLowerCase()), ); setSearchOptions(filteredNodes); } else { @@ -118,7 +118,7 @@ const NodeAndAddressSearch = () => { // Handle node selection from dropdown const handleNodeSelect = ( event: React.SyntheticEvent, - value: string | IObservatoryNode | null + value: string | IObservatoryNode | null, ) => { if (value && typeof value !== "string") { setIsLoading(true); // Show loading spinner diff --git a/nym-api/Cargo.toml b/nym-api/Cargo.toml index 1e3cf67d48..362c78f731 100644 --- a/nym-api/Cargo.toml +++ b/nym-api/Cargo.toml @@ -4,7 +4,7 @@ [package] name = "nym-api" license = "GPL-3.0" -version = "1.1.69" +version = "1.1.70" authors.workspace = true edition = "2021" rust-version.workspace = true diff --git a/nym-authenticator-client/src/error.rs b/nym-authenticator-client/src/error.rs index 39d991f886..43598acdd8 100644 --- a/nym-authenticator-client/src/error.rs +++ b/nym-authenticator-client/src/error.rs @@ -2,7 +2,7 @@ use nym_credentials_interface::TicketType; use nym_sdk::mixnet::InputMessage; #[derive(thiserror::Error, Debug)] -pub enum Error { +pub enum AuthenticationClientError { #[error("mixnet client stopped returning responses")] NoMixnetMessagesReceived, @@ -42,10 +42,19 @@ pub enum Error { #[error("unknown authenticator version number")] UnsupportedAuthenticatorVersion, +} - #[error("failed to wait on AuthenticatorClientListener")] - FailedToJoinOnTask(#[from] tokio::task::JoinError), +#[derive(thiserror::Error, Debug)] +pub enum RegistrationError { + #[error(transparent)] + NoCredentialSent(AuthenticationClientError), // This intentionnally doesn't use `from` to avoid random ? operator to land here when they shouldn't + + #[error("an error occured after a credential was sent : {source}")] + CredentialSent { + #[source] + source: AuthenticationClientError, + }, } // Result type based on our error type -pub type Result = std::result::Result; +pub(crate) type Result = std::result::Result; diff --git a/nym-authenticator-client/src/lib.rs b/nym-authenticator-client/src/lib.rs index 8fe7edb511..ab811ef79d 100644 --- a/nym-authenticator-client/src/lib.rs +++ b/nym-authenticator-client/src/lib.rs @@ -6,11 +6,11 @@ use nym_bandwidth_controller::{BandwidthTicketProvider, DEFAULT_TICKETS_TO_SPEND use nym_crypto::asymmetric::x25519::KeyPair; use nym_registration_common::GatewayData; use std::net::{IpAddr, SocketAddr}; -use std::str::FromStr; use std::sync::Arc; use std::time::Duration; use tracing::{debug, error, trace}; +use crate::error::Result; use crate::mixnet_listener::{MixnetMessageBroadcastReceiver, MixnetMessageInputSender}; use nym_authenticator_requests::{ AuthenticatorVersion, client_message::ClientMessage, response::AuthenticatorResponse, @@ -25,7 +25,7 @@ mod error; mod helpers; mod mixnet_listener; -pub use crate::error::{Error, Result}; +pub use crate::error::{AuthenticationClientError, RegistrationError}; pub use crate::mixnet_listener::{AuthClientMixnetListener, AuthClientMixnetListenerHandle}; pub struct AuthenticatorClient { @@ -91,7 +91,7 @@ impl AuthenticatorClient { self.mixnet_sender .send(input_message) .await - .map_err(|e| Error::SendMixnetMessage(Box::new(e)))?; + .map_err(|e| AuthenticationClientError::SendMixnetMessage(Box::new(e)))?; Ok(request_id) } @@ -104,11 +104,11 @@ impl AuthenticatorClient { tokio::select! { _ = &mut timeout => { error!("Timed out waiting for reply to connect request"); - return Err(Error::TimeoutWaitingForConnectResponse); + return Err(AuthenticationClientError::TimeoutWaitingForConnectResponse); } msg = self.mixnet_listener.recv() => match msg { Err(_) => { - return Err(Error::NoMixnetMessagesReceived); + return Err(AuthenticationClientError::NoMixnetMessagesReceived); } Ok(msg) => { let Some(header) = msg.message.first_chunk::<2>() else { @@ -131,12 +131,12 @@ impl AuthenticatorClient { // Then we deserialize the message debug!("AuthClient: got message while waiting for connect response with version {version:?}"); let ret: Result = match version { - AuthenticatorVersion::V1 => Err(Error::UnsupportedVersion), + AuthenticatorVersion::V1 => Err(AuthenticationClientError::UnsupportedVersion), AuthenticatorVersion::V2 => v2::response::AuthenticatorResponse::from_reconstructed_message(&msg).map(Into::into).map_err(Into::into), AuthenticatorVersion::V3 => v3::response::AuthenticatorResponse::from_reconstructed_message(&msg).map(Into::into).map_err(Into::into), AuthenticatorVersion::V4 => v4::response::AuthenticatorResponse::from_reconstructed_message(&msg).map(Into::into).map_err(Into::into), AuthenticatorVersion::V5 => v5::response::AuthenticatorResponse::from_reconstructed_message(&msg).map(Into::into).map_err(Into::into), - AuthenticatorVersion::UNKNOWN => Err(Error::UnknownVersion), + AuthenticatorVersion::UNKNOWN => Err(AuthenticationClientError::UnknownVersion), }; let Ok(response) = ret else { // This is ok, it's likely just one of our self-pings @@ -158,10 +158,14 @@ impl AuthenticatorClient { &mut self, controller: &dyn BandwidthTicketProvider, ticketbook_type: TicketType, - ) -> Result { + ) -> std::result::Result { debug!("Registering with the wg gateway..."); let init_message = match self.auth_version { - AuthenticatorVersion::V1 => return Err(Error::UnsupportedAuthenticatorVersion), + AuthenticatorVersion::V1 | AuthenticatorVersion::UNKNOWN => { + return Err(RegistrationError::NoCredentialSent( + AuthenticationClientError::UnsupportedAuthenticatorVersion, + )); + } AuthenticatorVersion::V2 => { ClientMessage::Initial(Box::new(v2::registration::InitMessage { pub_key: PeerPublicKey::new(self.keypair.public_key().to_bytes().into()), @@ -182,16 +186,20 @@ impl AuthenticatorClient { pub_key: PeerPublicKey::new(self.keypair.public_key().to_bytes().into()), })) } - AuthenticatorVersion::UNKNOWN => return Err(Error::UnsupportedAuthenticatorVersion), }; trace!("sending init msg to {}: {:?}", &self.ip_addr, &init_message); - let response = self.send_and_wait_for_response(&init_message).await?; + let response = self + .send_and_wait_for_response(&init_message) + .await + .map_err(RegistrationError::NoCredentialSent)?; let registered_data = match response { AuthenticatorResponse::PendingRegistration(pending_registration_response) => { // Unwrap since we have already checked that we have the keypair. debug!("Verifying data"); if let Err(e) = pending_registration_response.verify(self.keypair.private_key()) { - return Err(Error::VerificationFailed(e)); + return Err(RegistrationError::NoCredentialSent( + AuthenticationClientError::VerificationFailed(e), + )); } trace!( @@ -199,6 +207,7 @@ impl AuthenticatorClient { &self.ip_addr, &pending_registration_response ); + // This call takes care of updating the credential count in storage, so failure of this must be counted as credential waste let credential = Some( controller .get_ecash_ticket( @@ -207,15 +216,21 @@ impl AuthenticatorClient { DEFAULT_TICKETS_TO_SPEND, ) .await - .map_err(|source| Error::GetTicket { - ticketbook_type, - source, + .map_err(|source| RegistrationError::CredentialSent { + source: AuthenticationClientError::GetTicket { + ticketbook_type, + source, + }, })? .data, ); let finalized_message = match self.auth_version { - AuthenticatorVersion::V1 => return Err(Error::UnsupportedAuthenticatorVersion), + AuthenticatorVersion::V1 | AuthenticatorVersion::UNKNOWN => { + return Err(RegistrationError::CredentialSent { + source: AuthenticationClientError::UnsupportedAuthenticatorVersion, + }); + } AuthenticatorVersion::V2 => { ClientMessage::Final(Box::new(v2::registration::FinalMessage { gateway_client: v2::registration::GatewayClient::new( @@ -260,23 +275,29 @@ impl AuthenticatorClient { credential, })) } - AuthenticatorVersion::UNKNOWN => { - return Err(Error::UnsupportedAuthenticatorVersion); - } }; trace!( "sending final msg to {}: {:?}", &self.ip_addr, &finalized_message ); - let response = self.send_and_wait_for_response(&finalized_message).await?; + let response = self + .send_and_wait_for_response(&finalized_message) + .await + .map_err(|source| RegistrationError::CredentialSent { source })?; let AuthenticatorResponse::Registered(registered_response) = response else { - return Err(Error::InvalidGatewayAuthResponse); + return Err(RegistrationError::CredentialSent { + source: AuthenticationClientError::InvalidGatewayAuthResponse, + }); }; registered_response } AuthenticatorResponse::Registered(registered_response) => registered_response, - _ => return Err(Error::InvalidGatewayAuthResponse), + _ => { + return Err(RegistrationError::NoCredentialSent( + AuthenticationClientError::InvalidGatewayAuthResponse, + )); + } }; trace!( @@ -286,12 +307,7 @@ impl AuthenticatorClient { let gateway_data = GatewayData { public_key: registered_data.pub_key().inner().into(), - endpoint: SocketAddr::from_str(&format!( - "{}:{}", - self.ip_addr, - registered_data.wg_port() - )) - .map_err(Error::FailedToParseEntryGatewaySocketAddr)?, + endpoint: SocketAddr::new(self.ip_addr, registered_data.wg_port()), private_ipv4: registered_data.private_ips().ipv4, private_ipv6: registered_data.private_ips().ipv6, }; @@ -299,9 +315,12 @@ impl AuthenticatorClient { Ok(gateway_data) } + // This is up to the caller to know nothing is ever spent there pub async fn query_bandwidth(&mut self) -> Result> { let query_message = match self.auth_version { - AuthenticatorVersion::V1 => return Err(Error::UnsupportedAuthenticatorVersion), + AuthenticatorVersion::V1 => { + return Err(AuthenticationClientError::UnsupportedAuthenticatorVersion); + } AuthenticatorVersion::V2 => ClientMessage::Query(Box::new(QueryMessageImpl { pub_key: PeerPublicKey::new(self.keypair.public_key().to_bytes().into()), version: AuthenticatorVersion::V2, @@ -318,7 +337,9 @@ impl AuthenticatorClient { pub_key: PeerPublicKey::new(self.keypair.public_key().to_bytes().into()), version: AuthenticatorVersion::V5, })), - AuthenticatorVersion::UNKNOWN => return Err(Error::UnsupportedAuthenticatorVersion), + AuthenticatorVersion::UNKNOWN => { + return Err(AuthenticationClientError::UnsupportedAuthenticatorVersion); + } }; let response = self.send_and_wait_for_response(&query_message).await?; @@ -332,7 +353,7 @@ impl AuthenticatorClient { return Ok(None); } } - _ => return Err(Error::InvalidGatewayAuthResponse), + _ => return Err(AuthenticationClientError::InvalidGatewayAuthResponse), }; let remaining_pretty = if available_bandwidth > 1024 * 1024 { @@ -347,13 +368,13 @@ impl AuthenticatorClient { ); if available_bandwidth < 1024 * 1024 { tracing::warn!( - "Remaining bandwidth is under 1 MB. The wireguard mode will get suspended after that until tomorrow, UTC time. The client might shutdown with timeout soon - " - ); + "Remaining bandwidth is under 1 MB. The wireguard mode will get suspended after that until tomorrow, UTC time. The client might shutdown with timeout soon" + ); } Ok(Some(available_bandwidth)) } + // Since the caller provides the credential, it knows it is spent pub async fn top_up(&mut self, credential: CredentialSpendingData) -> Result { let top_up_message = match self.auth_version { AuthenticatorVersion::V3 => ClientMessage::TopUp(Box::new(v3::topup::TopUpMessage { @@ -371,7 +392,7 @@ impl AuthenticatorClient { credential, })), AuthenticatorVersion::V1 | AuthenticatorVersion::V2 | AuthenticatorVersion::UNKNOWN => { - return Err(Error::UnsupportedAuthenticatorVersion); + return Err(AuthenticationClientError::UnsupportedAuthenticatorVersion); } }; let response = self.send_and_wait_for_response(&top_up_message).await?; @@ -380,7 +401,7 @@ impl AuthenticatorClient { AuthenticatorResponse::TopUpBandwidth(top_up_bandwidth_response) => { top_up_bandwidth_response.available_bandwidth() } - _ => return Err(Error::InvalidGatewayAuthResponse), + _ => return Err(AuthenticationClientError::InvalidGatewayAuthResponse), }; Ok(remaining_bandwidth) diff --git a/nym-browser-extension/storage/Cargo.toml b/nym-browser-extension/storage/Cargo.toml index ec61e945b8..61a34e51e7 100644 --- a/nym-browser-extension/storage/Cargo.toml +++ b/nym-browser-extension/storage/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "extension-storage" -version = "1.4.0-rc.0" +version = "1.4.1" edition = "2024" license = "Apache-2.0" repository = "https://github.com/nymtech/nym" diff --git a/nym-credential-proxy/nym-credential-proxy-requests/Cargo.toml b/nym-credential-proxy/nym-credential-proxy-requests/Cargo.toml index 7897a1287e..76f91373b8 100644 --- a/nym-credential-proxy/nym-credential-proxy-requests/Cargo.toml +++ b/nym-credential-proxy/nym-credential-proxy-requests/Cargo.toml @@ -30,6 +30,7 @@ nym-credentials-interface = { path = "../../common/credentials-interface" } nym-http-api-common = { path = "../../common/http-api-common", optional = true } nym-http-api-client = { path = "../../common/http-api-client" } nym-serde-helpers = { path = "../../common/serde-helpers", features = ["bs58"] } +nym-upgrade-mode-check = { path = "../../common/upgrade-mode-check" } [target."cfg(target_arch = \"wasm32\")".dependencies.wasmtimer] workspace = true @@ -38,5 +39,8 @@ features = ["tokio"] [features] default = ["query-types"] query-types = ["nym-http-api-common", "nym-http-api-common/output"] -openapi = ["utoipa", "nym-http-api-common/utoipa"] +openapi = ["utoipa", "nym-http-api-common/utoipa", "nym-upgrade-mode-check/openapi"] tsify = ["dep:tsify", "wasm-bindgen"] + +[lints] +workspace = true \ No newline at end of file diff --git a/nym-credential-proxy/nym-credential-proxy-requests/src/api/v1/ticketbook/models.rs b/nym-credential-proxy/nym-credential-proxy-requests/src/api/v1/ticketbook/models.rs index 3ed36ade31..7f1b844774 100644 --- a/nym-credential-proxy/nym-credential-proxy-requests/src/api/v1/ticketbook/models.rs +++ b/nym-credential-proxy/nym-credential-proxy-requests/src/api/v1/ticketbook/models.rs @@ -12,17 +12,19 @@ use serde::{Deserialize, Serialize}; use serde_with::{DisplayFromStr, serde_as}; use std::ops::{Deref, DerefMut}; use time::{Date, OffsetDateTime}; +use uuid::Uuid; #[cfg(feature = "query-types")] use nym_http_api_common::Output; #[cfg(feature = "tsify")] use tsify::Tsify; -use uuid::Uuid; #[cfg(feature = "tsify")] use wasm_bindgen::prelude::wasm_bindgen; +pub use nym_upgrade_mode_check::UpgradeModeAttestation; + #[derive(JsonSchema)] #[cfg_attr(feature = "openapi", derive(utoipa::ToSchema))] pub struct PlaceholderJsonSchemaImpl {} @@ -225,6 +227,27 @@ pub struct TicketbookWalletSharesResponse { pub aggregated_expiration_date_signatures: Option, } +#[derive(Serialize, Deserialize, Debug, Clone)] +#[cfg_attr(feature = "openapi", derive(utoipa::ToSchema))] +#[serde(rename_all = "camelCase")] +#[serde(untagged)] +pub enum ObtainTicketBookSharesAsyncResponse { + InProgress(TicketbookWalletSharesAsyncResponse), + UpgradeMode(Box), +} + +impl From for ObtainTicketBookSharesAsyncResponse { + fn from(response: TicketbookWalletSharesAsyncResponse) -> Self { + Self::InProgress(response) + } +} + +impl From for ObtainTicketBookSharesAsyncResponse { + fn from(response: UpgradeModeResponse) -> Self { + Self::UpgradeMode(Box::new(response)) + } +} + #[derive(Serialize, Deserialize, Debug, Clone, JsonSchema)] #[cfg_attr(feature = "openapi", derive(utoipa::ToSchema))] #[serde(rename_all = "camelCase")] @@ -319,3 +342,13 @@ pub struct SharesQueryParams { #[serde(flatten)] pub global: GlobalDataParams, } + +#[derive(Serialize, Deserialize, Debug, Clone)] +#[cfg_attr(feature = "openapi", derive(utoipa::ToSchema))] +#[serde(rename_all = "camelCase")] +pub struct UpgradeModeResponse { + pub upgrade_mode_attestation: UpgradeModeAttestation, + /// The issued upgrade mode JWT. + /// The value is `None` if this credential proxy is not-authorised to be issuing one + pub jwt: Option, +} diff --git a/nym-credential-proxy/nym-credential-proxy-requests/src/lib.rs b/nym-credential-proxy/nym-credential-proxy-requests/src/lib.rs index 8415c35ba6..6ff65c9fda 100644 --- a/nym-credential-proxy/nym-credential-proxy-requests/src/lib.rs +++ b/nym-credential-proxy/nym-credential-proxy-requests/src/lib.rs @@ -1,15 +1,12 @@ // Copyright 2024 Nym Technologies SA // SPDX-License-Identifier: GPL-3.0-only -#![warn(clippy::expect_used)] -#![warn(clippy::unwrap_used)] -#![warn(clippy::todo)] -#![warn(clippy::dbg_macro)] - pub mod api; pub mod client; mod helpers; +pub const CREDENTIAL_PROXY_JWT_ISSUER: &str = "nym-credential-proxy"; + macro_rules! absolute_route { ( $name:ident, $parent:expr, $suffix:expr ) => { pub fn $name() -> String { diff --git a/nym-credential-proxy/nym-credential-proxy/Cargo.toml b/nym-credential-proxy/nym-credential-proxy/Cargo.toml index 63a2df37a9..c727488d37 100644 --- a/nym-credential-proxy/nym-credential-proxy/Cargo.toml +++ b/nym-credential-proxy/nym-credential-proxy/Cargo.toml @@ -62,13 +62,16 @@ nym-http-api-common = { path = "../../common/http-api-common", features = [ "utoipa", "middleware", ] } +nym-http-api-client = { path = "../../common/http-api-client", default-features = false } nym-validator-client = { path = "../../common/client-libs/validator-client" } nym-network-defaults = { path = "../../common/network-defaults" } nym-credential-proxy-requests = { path = "../nym-credential-proxy-requests", features = [ "openapi", ] } +nym-upgrade-mode-check = { path = "../../common/upgrade-mode-check" } nym-ecash-signer-check = { path = "../../common/ecash-signer-check" } +nym-pemstore = { path = "../../common/pemstore" } nym-credential-proxy-lib = { path = "../../common/credential-proxy" } diff --git a/nym-credential-proxy/nym-credential-proxy/src/attestation_watcher.rs b/nym-credential-proxy/nym-credential-proxy/src/attestation_watcher.rs new file mode 100644 index 0000000000..e0ff97ac05 --- /dev/null +++ b/nym-credential-proxy/nym-credential-proxy/src/attestation_watcher.rs @@ -0,0 +1,97 @@ +// Copyright 2025 - Nym Technologies SA +// SPDX-License-Identifier: Apache-2.0 + +use crate::http::state::nyx_upgrade_mode::UpgradeModeState; +use nym_crypto::asymmetric::ed25519; +use nym_http_api_client::generate_user_agent; +use nym_upgrade_mode_check::attempt_retrieve_attestation; +use std::sync::Arc; +use std::time::Duration; +use tokio::time::Instant; +use tokio_util::sync::CancellationToken; +use tracing::{debug, info}; +use url::Url; + +pub struct AttestationWatcher { + // default polling interval + regular_polling_interval: Duration, + + // expedited polling interval once upgrade mode is detected + expedited_poll_interval: Duration, + + attestation_url: Url, + + jwt_signing_keys: ed25519::KeyPair, + + jwt_validity: Duration, + + upgrade_mode_state: UpgradeModeState, +} + +impl AttestationWatcher { + pub(crate) fn new( + regular_polling_interval: Duration, + expedited_poll_interval: Duration, + attestation_url: Url, + jwt_signing_keys: ed25519::KeyPair, + jwt_validity: Duration, + ) -> Self { + AttestationWatcher { + regular_polling_interval, + expedited_poll_interval, + attestation_url, + jwt_signing_keys, + jwt_validity, + upgrade_mode_state: UpgradeModeState { + inner: Arc::new(Default::default()), + }, + } + } + + pub(crate) fn shared_state(&self) -> UpgradeModeState { + self.upgrade_mode_state.clone() + } + + async fn try_update_state(&self) { + match attempt_retrieve_attestation( + self.attestation_url.as_str(), + Some(generate_user_agent!()), + ) + .await + { + Err(err) => { + info!("upgrade mode attestation is not available at this time"); + debug!("retrieval error: {err}") + } + Ok(attestation) => { + self.upgrade_mode_state + .update(attestation, &self.jwt_signing_keys, self.jwt_validity) + .await + } + } + } + + pub async fn run_forever(self, cancellation_token: CancellationToken) { + info!("starting the attestation watcher task"); + + let check_wait = tokio::time::sleep(self.regular_polling_interval); + tokio::pin!(check_wait); + + loop { + tokio::select! { + biased; + _ = cancellation_token.cancelled() => { + break + } + _ = &mut check_wait => { + self.try_update_state().await; + if self.upgrade_mode_state.has_attestation().await { + check_wait.as_mut().reset(Instant::now() + self.expedited_poll_interval); + } else { + check_wait.as_mut().reset(Instant::now() + self.regular_polling_interval) + } + } + } + } + } +} diff --git a/nym-credential-proxy/nym-credential-proxy/src/cli.rs b/nym-credential-proxy/nym-credential-proxy/src/cli.rs index 40ba50aa56..d5c27a7730 100644 --- a/nym-credential-proxy/nym-credential-proxy/src/cli.rs +++ b/nym-credential-proxy/nym-credential-proxy/src/cli.rs @@ -7,10 +7,13 @@ use clap::{Args, Parser}; use nym_bin_common::bin_info; use nym_credential_proxy_lib::error::CredentialProxyError; use nym_credential_proxy_lib::webhook::ZkNymWebhook; +use nym_crypto::asymmetric::ed25519; +use nym_crypto::asymmetric::ed25519::Ed25519RecoveryError; use std::fs::create_dir_all; use std::net::{IpAddr, Ipv4Addr, SocketAddr}; use std::path::PathBuf; -use std::sync::OnceLock; +use std::str::FromStr; +use std::sync::{Arc, OnceLock}; use std::time::Duration; use tracing::info; use url::Url; @@ -20,6 +23,61 @@ fn pretty_build_info_static() -> &'static str { PRETTY_BUILD_INFORMATION.get_or_init(|| bin_info!().pretty_print()) } +// the reason for `Arc` is that `ArgMatches` impls `Clone`, +// so we also need to make the type clone-able +// https://github.com/clap-rs/clap/issues/4286#issuecomment-1262527218 +#[derive(Debug, Clone)] +struct PrivateKeyCliWrapper(Arc); + +impl FromStr for PrivateKeyCliWrapper { + type Err = Ed25519RecoveryError; + fn from_str(s: &str) -> Result { + Ok(PrivateKeyCliWrapper(Arc::new(s.parse()?))) + } +} + +#[derive(Debug, Args)] +#[clap(group = clap::ArgGroup::new("jwt-signing-keys").required(true).multiple(false))] +pub struct JwtSigningKeysArgs { + /// Explicit base58-encoded ed25519 private key used for signing upgrade-mode jwt. + #[clap( + long, + group = "jwt-signing-keys", + env = "NYM_CREDENTIAL_PROXY_JWT_SIGNING_KEY" + )] + jwt_signing_key: Option, + + /// Path to PEM file containing ed25519 private key used for signing upgrade-mode jwt. + #[clap( + long, + group = "jwt-signing-keys", + env = "NYM_CREDENTIAL_PROXY_JWT_SIGNING_KEY_PATH" + )] + jwt_signing_key_path: Option, +} + +impl JwtSigningKeysArgs { + pub(crate) fn signing_keys(self) -> Result { + if let Some(key) = self.jwt_signing_key { + // SAFETY: the arc has never been cloned + #[allow(clippy::unwrap_used)] + return Ok(Arc::into_inner(key.0).unwrap().into()); + } + + // SAFETY: due to clap group, clap ensures only one value here is set + #[allow(clippy::unwrap_used)] + let key_path = self.jwt_signing_key_path.unwrap(); + + let key: ed25519::PrivateKey = nym_pemstore::load_key(&key_path).map_err(|err| { + CredentialProxyError::JWTSigningKeyLoadFailure { + path: key_path.to_str().map(|s| s.to_owned()).unwrap_or_default(), + err, + } + })?; + Ok(key.into()) + } +} + // if needed this could be split into subcommands #[derive(Parser, Debug)] #[clap(author = "Nymtech", version, about, long_version = pretty_build_info_static())] @@ -27,6 +85,12 @@ pub struct Cli { #[clap(flatten)] pub(crate) webhook: ZkNymWebHookConfig, + #[clap(flatten)] + pub(crate) upgrade_mode: UpgradeModeConfig, + + #[clap(flatten)] + pub(crate) jwt_signing_keys: JwtSigningKeysArgs, + /// Path pointing to an env file that configures the binary. #[clap(short, long)] pub(crate) config_env_file: Option, @@ -89,6 +153,40 @@ pub struct Cli { pub(crate) persistent_storage_path: Option, } +#[derive(Args, Debug, Clone)] +pub struct UpgradeModeConfig { + /// URL for polling for upgrade mode changes. + #[clap(long, env = "NYM_CREDENTIAL_PROXY_ATTESTATION_CHECK_URL")] + pub(crate) attestation_check_url: Option, + + /// Default polling interval of the upgrade mode endpoint. + #[clap( + long, + value_parser = humantime::parse_duration, + env = "NYM_CREDENTIAL_PROXY_ATTESTATION_CHECK_REGULAR_POLLING_INTERVAL", + default_value = "5m", + )] + pub(crate) attestation_check_regular_polling_interval: Duration, + + /// Expedited polling interval of the upgrade mode endpoint if the UM is enabled. + #[clap( + long, + value_parser = humantime::parse_duration, + env = "NYM_CREDENTIAL_PROXY_ATTESTATION_CHECK_EXPEDITED_POLLING_INTERVAL", + default_value = "1m", + )] + pub(crate) attestation_check_expedited_polling_interval: Duration, + + /// Validity duration of the issued JWT during upgrade mode. + #[clap( + long, + value_parser = humantime::parse_duration, + env = "NYM_CREDENTIAL_PROXY_UPGRADE_MODE_JWT_VALIDITY", + default_value = "1h", + )] + pub(crate) upgrade_mode_jwt_validity: Duration, +} + #[derive(Args, Debug, Clone)] pub struct ZkNymWebHookConfig { #[clap(long, env = "WEBHOOK_ZK_NYMS_URL")] diff --git a/nym-credential-proxy/nym-credential-proxy/src/helpers.rs b/nym-credential-proxy/nym-credential-proxy/src/helpers.rs index 41e474cf23..cd061d8962 100644 --- a/nym-credential-proxy/nym-credential-proxy/src/helpers.rs +++ b/nym-credential-proxy/nym-credential-proxy/src/helpers.rs @@ -1,11 +1,15 @@ // Copyright 2024 Nym Technologies SA // SPDX-License-Identifier: GPL-3.0-only +use crate::attestation_watcher::AttestationWatcher; +use crate::http::state::ApiState; use crate::{cli::Cli, http::HttpServer}; use nym_bin_common::bin_info; use nym_credential_proxy_lib::error::CredentialProxyError; use nym_credential_proxy_lib::storage::CredentialProxyStorage; use nym_credential_proxy_lib::ticketbook_manager::TicketbookManager; +use nym_network_defaults::var_names; +use nym_network_defaults::var_names::CONFIGURED; use tracing::{error, info}; pub async fn wait_for_signal() { @@ -51,6 +55,29 @@ pub(crate) async fn run_api(cli: Cli) -> Result<(), CredentialProxyError> { let mnemonic = cli.mnemonic; let auth_token = cli.http_auth_token; let webhook_cfg = cli.webhook; + let jwt_signing_keys = cli.jwt_signing_keys.signing_keys()?; + + let upgrade_mode_attestation_check_url = match cli.upgrade_mode.attestation_check_url { + Some(url) => url, + None => { + // argument hasn't been provided and env is not configured + if std::env::var(CONFIGURED).is_err() { + return Err(CredentialProxyError::AttestationCheckUrlNotSet); + } + // argument hasn't been provided and the relevant env value hasn't been set + // (technically this shouldn't be possible) + let Ok(env_url) = std::env::var(var_names::UPGRADE_MODE_ATTESTATION_URL) else { + return Err(CredentialProxyError::AttestationCheckUrlNotSet); + }; + + match env_url.parse() { + Ok(url) => url, + Err(err) => { + return Err(CredentialProxyError::MalformedAttestationCheckUrl { source: err }); + } + } + } + }; let ticketbook_manager = TicketbookManager::new( build_sha_short(), @@ -63,7 +90,24 @@ pub(crate) async fn run_api(cli: Cli) -> Result<(), CredentialProxyError> { ) .await?; - let http_server = HttpServer::new(bind_address, ticketbook_manager.clone(), auth_token); + let attestation_watcher = AttestationWatcher::new( + cli.upgrade_mode.attestation_check_regular_polling_interval, + cli.upgrade_mode + .attestation_check_expedited_polling_interval, + upgrade_mode_attestation_check_url, + jwt_signing_keys, + cli.upgrade_mode.upgrade_mode_jwt_validity, + ); + + let api_state = ApiState::new( + ticketbook_manager.clone(), + attestation_watcher.shared_state(), + ); + + // spawn the attestation watcher as a separate task + api_state.try_spawn_in_background(attestation_watcher.run_forever(api_state.shutdown_token())); + + let http_server = HttpServer::new(bind_address, api_state, auth_token); // spawn the http server as a separate task / thread(-ish) http_server.spawn_as_task(); diff --git a/nym-credential-proxy/nym-credential-proxy/src/http/mod.rs b/nym-credential-proxy/nym-credential-proxy/src/http/mod.rs index de37dbba58..c66239ddeb 100644 --- a/nym-credential-proxy/nym-credential-proxy/src/http/mod.rs +++ b/nym-credential-proxy/nym-credential-proxy/src/http/mod.rs @@ -2,8 +2,8 @@ // SPDX-License-Identifier: GPL-3.0-only use crate::http::router::build_router; +use crate::http::state::ApiState; use nym_credential_proxy_lib::error::CredentialProxyError; -use nym_credential_proxy_lib::ticketbook_manager::TicketbookManager; use std::net::SocketAddr; use tracing::info; @@ -12,30 +12,28 @@ pub mod state; pub struct HttpServer { bind_address: SocketAddr, - ticketbook_manager: TicketbookManager, + state: ApiState, auth_token: String, } impl HttpServer { - pub fn new( - bind_address: SocketAddr, - ticketbook_manager: TicketbookManager, - auth_token: String, - ) -> Self { + pub fn new(bind_address: SocketAddr, state: ApiState, auth_token: String) -> Self { HttpServer { bind_address, - ticketbook_manager, + state, auth_token, } } pub fn spawn_as_task(self) { - let cancellation = self.ticketbook_manager.shutdown_token(); + let cancellation = self.state.ticketbooks().shutdown_token(); - let ticketbook_manager = self.ticketbook_manager.clone(); + // not the best name, but that's due to the branch rotting, + // where refactoring would be counter-productive + let ticketbook_manager = self.state.ticketbooks().clone(); ticketbook_manager.try_spawn_in_background(async move { let address = self.bind_address; - let router = build_router(self.ticketbook_manager, self.auth_token); + let router = build_router(self.state, self.auth_token); info!("starting the http server on http://{address}"); let listener = tokio::net::TcpListener::bind(address) diff --git a/nym-credential-proxy/nym-credential-proxy/src/http/router/api/v1/ticketbook/mod.rs b/nym-credential-proxy/nym-credential-proxy/src/http/router/api/v1/ticketbook/mod.rs index e09531af1e..0ccf4633c9 100644 --- a/nym-credential-proxy/nym-credential-proxy/src/http/router/api/v1/ticketbook/mod.rs +++ b/nym-credential-proxy/nym-credential-proxy/src/http/router/api/v1/ticketbook/mod.rs @@ -9,8 +9,8 @@ use nym_credential_proxy_lib::helpers::random_uuid; use nym_credential_proxy_lib::http_helpers::RequestError; use nym_credential_proxy_requests::api::v1::ticketbook::models::{ CurrentEpochResponse, DepositResponse, MasterVerificationKeyResponse, - PartialVerificationKeysResponse, TicketbookAsyncRequest, TicketbookObtainQueryParams, - TicketbookRequest, TicketbookWalletSharesAsyncResponse, TicketbookWalletSharesResponse, + ObtainTicketBookSharesAsyncResponse, PartialVerificationKeysResponse, TicketbookAsyncRequest, + TicketbookObtainQueryParams, TicketbookRequest, TicketbookWalletSharesResponse, }; use nym_credential_proxy_requests::routes::api::v1::ticketbook; use nym_http_api_common::{FormattedResponse, OutputParams}; @@ -25,7 +25,7 @@ pub type FormattedPartialVerificationKeysResponse = pub type FormattedTicketbookWalletSharesResponse = FormattedResponse; pub type FormattedTicketbookWalletSharesAsyncResponse = - FormattedResponse; + FormattedResponse; /// Attempt to obtain blinded shares of an ecash ticketbook wallet #[utoipa::path( @@ -63,7 +63,7 @@ pub(crate) async fn obtain_ticketbook_shares( let output = params.output.unwrap_or_default(); let response = state - .inner_state() + .ticketbooks() .obtain_ticketbook_shares(uuid, payload, params.obtain_params.global) .await .map_err(|err| RequestError::new_server_error(err, uuid))?; @@ -84,8 +84,8 @@ pub(crate) async fn obtain_ticketbook_shares( ), responses( (status = 200, content( - (TicketbookWalletSharesAsyncResponse = "application/json"), - (TicketbookWalletSharesAsyncResponse = "application/yaml"), + (ObtainTicketBookSharesAsyncResponse = "application/json"), + (ObtainTicketBookSharesAsyncResponse = "application/yaml"), )), (status = 400, description = "the provided request hasn't been created against correct attributes"), (status = 401, description = "authentication token is missing or is invalid"), @@ -107,8 +107,13 @@ pub(crate) async fn obtain_ticketbook_shares_async( let uuid = random_uuid(); let output = params.output.unwrap_or_default(); + // 0. check if we're in 'upgrade-mode' - if so, just return the attestation and associated jwt + if let Some(upgrade_mode_response) = state.upgrade_mode_response().await { + return Ok(output.to_response(upgrade_mode_response.into())); + } + let response = state - .inner_state() + .ticketbooks() .obtain_ticketbook_shares_async(uuid, payload, params.obtain_params) .await .map_err(|err| RequestError::new_server_error(err, uuid))?; @@ -142,7 +147,7 @@ pub(crate) async fn current_deposit( let output = output.output.unwrap_or_default(); let response = state - .inner_state() + .ticketbooks() .current_deposit() .await .map_err(RequestError::new_plain_error)?; @@ -177,7 +182,7 @@ pub(crate) async fn partial_verification_keys( let output = output.output.unwrap_or_default(); let response = state - .inner_state() + .ticketbooks() .partial_verification_keys() .await .map_err(RequestError::new_plain_error)?; @@ -212,7 +217,7 @@ pub(crate) async fn master_verification_key( let output = output.output.unwrap_or_default(); let response = state - .inner_state() + .ticketbooks() .master_verification_key() .await .map_err(RequestError::new_plain_error)?; @@ -248,7 +253,7 @@ pub(crate) async fn current_epoch( let output = output.output.unwrap_or_default(); let response = state - .inner_state() + .ticketbooks() .current_epoch() .await .map_err(RequestError::new_plain_error)?; diff --git a/nym-credential-proxy/nym-credential-proxy/src/http/router/api/v1/ticketbook/shares.rs b/nym-credential-proxy/nym-credential-proxy/src/http/router/api/v1/ticketbook/shares.rs index ba460a1ac1..0dd2a8efe2 100644 --- a/nym-credential-proxy/nym-credential-proxy/src/http/router/api/v1/ticketbook/shares.rs +++ b/nym-credential-proxy/nym-credential-proxy/src/http/router/api/v1/ticketbook/shares.rs @@ -43,7 +43,7 @@ pub(crate) async fn query_for_shares_by_id( let output = params.output.unwrap_or_default(); let response = state - .inner_state() + .ticketbooks() .query_for_shares_by_id(uuid, params.global, share_id) .await .map_err(|err| RequestError::new_server_error(err, uuid))?; @@ -80,7 +80,7 @@ pub(crate) async fn query_for_shares_by_device_id_and_credential_id( let output = params.output.unwrap_or_default(); let response = state - .inner_state() + .ticketbooks() .query_for_shares_by_device_id_and_credential_id( uuid, params.global, diff --git a/nym-credential-proxy/nym-credential-proxy/src/http/router/mod.rs b/nym-credential-proxy/nym-credential-proxy/src/http/router/mod.rs index 8b23bbab42..8d8f89dcff 100644 --- a/nym-credential-proxy/nym-credential-proxy/src/http/router/mod.rs +++ b/nym-credential-proxy/nym-credential-proxy/src/http/router/mod.rs @@ -18,7 +18,7 @@ fn swagger_redirect() -> MethodRouter { get(|| async { Redirect::to("/api/v1/swagger/") }) } -pub fn build_router(state: impl Into, auth_token: String) -> Router { +pub fn build_router(state: ApiState, auth_token: String) -> Router { // let auth_layer = from_extractor::(); let auth_middleware = AuthLayer::new(Arc::new(Zeroizing::new(auth_token))); @@ -32,7 +32,7 @@ pub fn build_router(state: impl Into, auth_token: String) -> Router { // we don't have to be using middleware, but we already had that code // we might want something like: https://github.com/tokio-rs/axum/blob/main/examples/tracing-aka-logging/src/main.rs#L44 instead .layer(axum::middleware::from_fn(logging::log_request_info)) - .with_state(state.into()); + .with_state(state); cfg_if::cfg_if! { if #[cfg(feature = "cors")] { diff --git a/nym-credential-proxy/nym-credential-proxy/src/http/state/mod.rs b/nym-credential-proxy/nym-credential-proxy/src/http/state/mod.rs index a7c1b5b2b5..7c2c015ef5 100644 --- a/nym-credential-proxy/nym-credential-proxy/src/http/state/mod.rs +++ b/nym-credential-proxy/nym-credential-proxy/src/http/state/mod.rs @@ -1,21 +1,50 @@ // Copyright 2024 Nym Technologies SA // SPDX-License-Identifier: GPL-3.0-only +use crate::http::state::nyx_upgrade_mode::UpgradeModeState; use nym_credential_proxy_lib::ticketbook_manager::TicketbookManager; +use nym_credential_proxy_requests::api::v1::ticketbook::models::UpgradeModeResponse; +use std::future::Future; +use tokio::task::JoinHandle; +use tokio_util::sync::CancellationToken; + +pub(crate) mod nyx_upgrade_mode; #[derive(Clone)] pub struct ApiState { - inner: TicketbookManager, -} - -impl From for ApiState { - fn from(inner: TicketbookManager) -> Self { - Self { inner } - } + ticketbooks: TicketbookManager, + upgrade_mode: UpgradeModeState, } impl ApiState { - pub(crate) fn inner_state(&self) -> &TicketbookManager { - &self.inner + pub(crate) fn new(ticketbooks: TicketbookManager, upgrade_mode: UpgradeModeState) -> Self { + Self { + ticketbooks, + upgrade_mode, + } + } + + pub(crate) fn ticketbooks(&self) -> &TicketbookManager { + &self.ticketbooks + } + + pub fn shutdown_token(&self) -> CancellationToken { + self.ticketbooks.shutdown_token() + } + + pub(crate) fn try_spawn_in_background(&self, task: F) -> Option> + where + F: Future + Send + 'static, + F::Output: Send + 'static, + { + self.ticketbooks().try_spawn_in_background(task) + } + + pub(crate) async fn upgrade_mode_response(&self) -> Option { + let (upgrade_mode_attestation, jwt) = self.upgrade_mode.attestation_with_jwt().await?; + Some(UpgradeModeResponse { + upgrade_mode_attestation, + jwt, + }) } } diff --git a/nym-credential-proxy/nym-credential-proxy/src/http/state/nyx_upgrade_mode.rs b/nym-credential-proxy/nym-credential-proxy/src/http/state/nyx_upgrade_mode.rs new file mode 100644 index 0000000000..80c94a055f --- /dev/null +++ b/nym-credential-proxy/nym-credential-proxy/src/http/state/nyx_upgrade_mode.rs @@ -0,0 +1,144 @@ +// Copyright 2025 - Nym Technologies SA +// SPDX-License-Identifier: GPL-3.0-only + +use nym_credential_proxy_requests::CREDENTIAL_PROXY_JWT_ISSUER; +use nym_credential_proxy_requests::api::v1::ticketbook::models::UpgradeModeAttestation; +use nym_crypto::asymmetric::ed25519; +use nym_upgrade_mode_check::generate_jwt_for_upgrade_mode_attestation; +use std::sync::Arc; +use std::time::Duration; +use time::OffsetDateTime; +use tokio::sync::RwLock; + +#[derive(Debug, Clone)] +pub(crate) struct UpgradeModeState { + pub(crate) inner: Arc>>, +} + +impl UpgradeModeState { + pub(crate) async fn has_attestation(&self) -> bool { + self.inner.read().await.is_some() + } + + pub(crate) async fn update( + &self, + retrieved_attestation: Option, + jwt_signing_keys: &ed25519::KeyPair, + jwt_validity: Duration, + ) { + let mut guard = self.inner.write().await; + let Some(attestation) = retrieved_attestation else { + *guard = None; + return; + }; + + match guard.as_mut() { + None => { + // no existing state - it's the first time we're going into upgrade mode, + // so generate the jwt + *guard = Some(UpgradeModeStateInner::new_fresh( + attestation, + jwt_signing_keys, + jwt_validity, + )); + } + Some(current_state) => { + let mut should_refresh = false; + // update the jwt if we have issued one and: + // - either the attestation has changed + // - or the existing jwt is close to expiry + if current_state.attestation != attestation { + should_refresh = true; + } + + if let Some(issued_jwt) = current_state.jwt.as_ref() + && issued_jwt.close_to_expiry() + { + should_refresh = true; + } + + if should_refresh { + current_state.attestation = attestation; + current_state.refresh_jwt(jwt_signing_keys, jwt_validity); + } + } + } + } + + pub(crate) async fn attestation_with_jwt( + &self, + ) -> Option<(UpgradeModeAttestation, Option)> { + let guard = self.inner.read().await; + let inner = guard.as_ref()?; + Some(( + inner.attestation.clone(), + inner.jwt.as_ref().map(|jwt| jwt.token.clone()), + )) + } +} + +#[derive(Debug)] +pub(crate) struct UpgradeModeStateInner { + pub(crate) attestation: UpgradeModeAttestation, + pub(crate) jwt: Option, +} + +impl UpgradeModeStateInner { + fn try_generate_jwt( + attestation: &UpgradeModeAttestation, + jwt_signing_keys: &ed25519::KeyPair, + jwt_validity: Duration, + ) -> Option { + if attestation.authorised_to_issue_jwt(jwt_signing_keys.public_key()) { + Some(Jwt::generate(attestation, jwt_signing_keys, jwt_validity)) + } else { + None + } + } + + fn new_fresh( + attestation: UpgradeModeAttestation, + jwt_signing_keys: &ed25519::KeyPair, + jwt_validity: Duration, + ) -> Self { + let jwt = Self::try_generate_jwt(&attestation, jwt_signing_keys, jwt_validity); + UpgradeModeStateInner { attestation, jwt } + } + + fn refresh_jwt(&mut self, keys: &ed25519::KeyPair, validity: Duration) { + self.jwt = Self::try_generate_jwt(&self.attestation, keys, validity); + } +} + +#[derive(Debug)] +pub(crate) struct Jwt { + pub(crate) issued_at: OffsetDateTime, + pub(crate) issued_for: Duration, + pub(crate) token: String, +} + +impl Jwt { + fn generate( + upgrade_mode_attestation: &UpgradeModeAttestation, + keys: &ed25519::KeyPair, + validity: Duration, + ) -> Self { + Jwt { + issued_at: OffsetDateTime::now_utc(), + issued_for: validity, + token: generate_jwt_for_upgrade_mode_attestation( + upgrade_mode_attestation.clone(), + validity, + keys, + Some(CREDENTIAL_PROXY_JWT_ISSUER), + ), + } + } + + fn close_to_expiry(&self) -> bool { + // less than 20% of validity left + let now = OffsetDateTime::now_utc(); + let validity_threshold = Duration::from_secs_f32(self.issued_for.as_secs_f32() * 0.8); + now - self.issued_at >= validity_threshold + } +} diff --git a/nym-credential-proxy/nym-credential-proxy/src/main.rs b/nym-credential-proxy/nym-credential-proxy/src/main.rs index 8b85fef400..87b6440ab9 100644 --- a/nym-credential-proxy/nym-credential-proxy/src/main.rs +++ b/nym-credential-proxy/nym-credential-proxy/src/main.rs @@ -14,6 +14,7 @@ cfg_if::cfg_if! { pub mod config; pub mod helpers; pub mod http; + pub mod attestation_watcher; } } @@ -40,6 +41,7 @@ async fn main() -> anyhow::Result<()> { #[cfg(not(unix))] #[tokio::main] +#[allow(clippy::exit)] async fn main() -> anyhow::Result<()> { eprintln!("This tool is only supported on Unix systems"); #[allow(clippy::exit)] diff --git a/nym-gateway-probe/Cargo.toml b/nym-gateway-probe/Cargo.toml index 74f547ee53..5c91e35078 100644 --- a/nym-gateway-probe/Cargo.toml +++ b/nym-gateway-probe/Cargo.toml @@ -56,7 +56,7 @@ nym-ip-packet-requests = { path = "../common/ip-packet-requests" } nym-sdk = { path = "../sdk/rust/nym-sdk" } nym-validator-client = { path = "../common/client-libs/validator-client" } nym-credentials = { path = "../common/credentials" } -nym-http-api-client-macro = { path = "../common/http-api-client-macro", features = ["debug-inventory"] } +nym-http-api-client-macro = { path = "../common/http-api-client-macro" } nym-http-api-client = { path = "../common/http-api-client" } nym-node-status-client = { path = "../nym-node-status-api/nym-node-status-client" } diff --git a/nym-node/Cargo.toml b/nym-node/Cargo.toml index 6d43b0aa97..d02fcc06f4 100644 --- a/nym-node/Cargo.toml +++ b/nym-node/Cargo.toml @@ -3,7 +3,7 @@ [package] name = "nym-node" -version = "1.21.0" +version = "1.22.0" authors.workspace = true repository.workspace = true homepage.workspace = true diff --git a/nym-registration-client/src/error.rs b/nym-registration-client/src/error.rs index ed3b09c220..822d44dcae 100644 --- a/nym-registration-client/src/error.rs +++ b/nym-registration-client/src/error.rs @@ -35,19 +35,85 @@ pub enum RegistrationClientError { #[error("timeout connecting the mixnet client")] Timeout(#[from] tokio::time::error::Elapsed), - #[error("failed to register wireguard with the gateway for {gateway_id}")] - EntryGatewayRegisterWireguard { + #[error( + "failed to register wireguard with the gateway for {gateway_id}, no credential was sent" + )] + WireguardEntryRegistration { gateway_id: String, authenticator_address: Box, #[source] - source: Box, + source: Box, }, - #[error("failed to register wireguard with the gateway for {gateway_id}")] - ExitGatewayRegisterWireguard { + #[error( + "failed to register wireguard with the gateway for {gateway_id}, no credential was sent" + )] + WireguardExitRegistration { gateway_id: String, authenticator_address: Box, #[source] - source: Box, + source: Box, + }, + + #[error( + "failed to register wireguard with the gateway for {gateway_id}, a credential was sent" + )] + WireguardEntryRegistrationCredentialSent { + gateway_id: String, + authenticator_address: Box, + #[source] + source: Box, + }, + + #[error( + "failed to register wireguard with the gateway for {gateway_id}, a credential was sent" + )] + WireguardExitRegistrationCredentialSent { + gateway_id: String, + authenticator_address: Box, + #[source] + source: Box, }, } + +impl RegistrationClientError { + pub fn from_authenticator_error( + error: nym_authenticator_client::RegistrationError, + gateway_id: String, + authenticator_address: nym_sdk::mixnet::Recipient, + entry: bool, + ) -> Self { + match error { + nym_authenticator_client::RegistrationError::NoCredentialSent(source) => { + if entry { + Self::WireguardEntryRegistration { + gateway_id, + authenticator_address: Box::new(authenticator_address), + source: Box::new(source), + } + } else { + Self::WireguardExitRegistration { + gateway_id, + authenticator_address: Box::new(authenticator_address), + source: Box::new(source), + } + } + } + nym_authenticator_client::RegistrationError::CredentialSent { source } => { + if entry { + Self::WireguardEntryRegistrationCredentialSent { + gateway_id, + authenticator_address: Box::new(authenticator_address), + source: Box::new(source), + } + } else { + Self::WireguardExitRegistrationCredentialSent { + gateway_id, + authenticator_address: Box::new(authenticator_address), + source: Box::new(source), + } + } + } + } + } +} diff --git a/nym-registration-client/src/lib.rs b/nym-registration-client/src/lib.rs index ece0e6fd64..7b37a6d5a4 100644 --- a/nym-registration-client/src/lib.rs +++ b/nym-registration-client/src/lib.rs @@ -3,7 +3,9 @@ use tokio_util::sync::CancellationToken; -use nym_authenticator_client::{AuthClientMixnetListener, AuthenticatorClient}; +use nym_authenticator_client::{ + AuthClientMixnetListener, AuthClientMixnetListenerHandle, AuthenticatorClient, +}; use nym_bandwidth_controller::BandwidthTicketProvider; use nym_credentials_interface::TicketType; use nym_ip_packet_client::IprClientConnect; @@ -35,9 +37,22 @@ pub struct RegistrationClient { event_rx: EventReceiver, } +enum MixnetClientHandle { + Authenticator(AuthClientMixnetListenerHandle), + Sdk(Box), +} + +impl MixnetClientHandle { + async fn stop(self) { + match self { + Self::Authenticator(handle) => handle.stop().await, + Self::Sdk(handle) => handle.disconnect().await, + } + } +} // Bundle of an actual error and the underlying mixnet client so it can be shutdown correctly if needed struct RegistrationError { - mixnet_client: Option, + mixnet_client_handle: MixnetClientHandle, source: crate::RegistrationClientError, } @@ -49,7 +64,7 @@ impl RegistrationClient { let Some(ipr_address) = self.config.exit.node.ipr_address else { return Err(RegistrationError { - mixnet_client: Some(self.mixnet_client), + mixnet_client_handle: MixnetClientHandle::Sdk(Box::new(self.mixnet_client)), source: RegistrationClientError::NoIpPacketRouterAddress { node_id: self.config.exit.node.identity.to_base58_string(), }, @@ -67,13 +82,17 @@ impl RegistrationClient { Some(Ok(addr)) => addr, Some(Err(e)) => { return Err(RegistrationError { - mixnet_client: Some(ipr_client.into_mixnet_client()), + mixnet_client_handle: MixnetClientHandle::Sdk(Box::new( + ipr_client.into_mixnet_client(), + )), source: RegistrationClientError::ConnectToIpPacketRouter(e), }); } None => { return Err(RegistrationError { - mixnet_client: Some(ipr_client.into_mixnet_client()), + mixnet_client_handle: MixnetClientHandle::Sdk(Box::new( + ipr_client.into_mixnet_client(), + )), source: RegistrationClientError::Cancelled, }); } @@ -97,7 +116,7 @@ impl RegistrationClient { async fn register_wg(self) -> Result { let Some(entry_auth_address) = self.config.entry.node.authenticator_address else { return Err(RegistrationError { - mixnet_client: Some(self.mixnet_client), + mixnet_client_handle: MixnetClientHandle::Sdk(Box::new(self.mixnet_client)), source: RegistrationClientError::AuthenticationNotPossible { node_id: self.config.entry.node.identity.to_base58_string(), }, @@ -106,7 +125,7 @@ impl RegistrationClient { let Some(exit_auth_address) = self.config.exit.node.authenticator_address else { return Err(RegistrationError { - mixnet_client: Some(self.mixnet_client), + mixnet_client_handle: MixnetClientHandle::Sdk(Box::new(self.mixnet_client)), source: RegistrationClientError::AuthenticationNotPossible { node_id: self.config.exit.node.identity.to_base58_string(), }, @@ -150,33 +169,50 @@ impl RegistrationClient { let exit_fut = exit_auth_client .register_wireguard(&*self.bandwidth_controller, TicketType::V1WireguardExit); - let (entry, exit) = Box::pin( + let (entry, exit) = match Box::pin( self.cancel_token .run_until_cancelled(async { tokio::join!(entry_fut, exit_fut) }), ) .await - .ok_or(RegistrationError { - mixnet_client: None, - source: RegistrationClientError::Cancelled, - })?; + { + Some((entry, exit)) => (entry, exit), + None => { + return Err(RegistrationError { + mixnet_client_handle: MixnetClientHandle::Authenticator(mixnet_listener), + source: RegistrationClientError::Cancelled, + }); + } + }; - let entry = entry.map_err(|source| RegistrationError { - mixnet_client: None, - source: RegistrationClientError::EntryGatewayRegisterWireguard { - gateway_id: self.config.entry.node.identity.to_base58_string(), - authenticator_address: Box::new(entry_auth_address), - source: Box::new(source), - }, - })?; + let entry = match entry { + Ok(entry) => entry, + Err(source) => { + return Err(RegistrationError { + mixnet_client_handle: MixnetClientHandle::Authenticator(mixnet_listener), + source: RegistrationClientError::from_authenticator_error( + source, + self.config.entry.node.identity.to_base58_string(), + entry_auth_address, + true, + ), + }); + } + }; - let exit = exit.map_err(|source| RegistrationError { - mixnet_client: None, - source: RegistrationClientError::EntryGatewayRegisterWireguard { - gateway_id: self.config.exit.node.identity.to_base58_string(), - authenticator_address: Box::new(exit_auth_address), - source: Box::new(source), - }, - })?; + let exit = match exit { + Ok(exit) => exit, + Err(source) => { + return Err(RegistrationError { + mixnet_client_handle: MixnetClientHandle::Authenticator(mixnet_listener), + source: RegistrationClientError::from_authenticator_error( + source, + self.config.exit.node.identity.to_base58_string(), + exit_auth_address, + false, + ), + }); + } + }; Ok(RegistrationResult::Wireguard(Box::new( WireguardRegistrationResult { @@ -197,15 +233,14 @@ impl RegistrationClient { self.register_mix_exit().await }; - // If we failed to register, and we were the owner of the mixnet client, shut it down + // If we failed to register, shut down the mixnet client and wait for it to exit match registration_result { Ok(result) => Ok(result), Err(error) => { debug!("Registration failed"); - if let Some(mixnet_client) = error.mixnet_client { - debug!("Shutting down mixnet client"); - mixnet_client.disconnect().await; - } + debug!("Shutting down mixnet client"); + error.mixnet_client_handle.stop().await; + debug!("Mixnet client stopped"); Err(error.source) } } diff --git a/nym-wallet/Cargo.lock b/nym-wallet/Cargo.lock index 546ee6409d..26df1b52e6 100644 --- a/nym-wallet/Cargo.lock +++ b/nym-wallet/Cargo.lock @@ -4219,6 +4219,7 @@ dependencies = [ "serde_plain", "serde_yaml", "thiserror 2.0.12", + "tokio", "tracing", "url", "wasmtimer", diff --git a/nym-wallet/package.json b/nym-wallet/package.json index 6702636f1c..190dadbc1a 100644 --- a/nym-wallet/package.json +++ b/nym-wallet/package.json @@ -32,7 +32,7 @@ "@mui/styles": "^5.2.2", "@mui/utils": "^5.7.0", "@nymproject/mui-theme": "^1.0.0", - "@nymproject/node-tester": "^1.2.3", + "@nymproject/node-tester": "^1.3.1", "@nymproject/react": "^1.0.0", "@nymproject/types": "^1.0.0", "@storybook/react": "^6.5.15", @@ -80,6 +80,7 @@ "@types/big.js": "^6.1.6", "@types/bs58": "^4.0.1", "@types/jest": "^27.0.1", + "@types/minimatch": "5.1.2", "@types/node": "^16.7.13", "@types/qrcode.react": "^1.0.2", "@types/react": "^18.0.26", @@ -131,5 +132,8 @@ "webpack-favicons": "^1.3.8", "webpack-merge": "^5.8.0" }, + "resolutions": { + "@types/minimatch": "5.1.2" + }, "private": false } \ No newline at end of file diff --git a/nym-wallet/src/components/Buy/Tutorial.tsx b/nym-wallet/src/components/Buy/Tutorial.tsx index d3e0a11fce..4db45f6844 100644 --- a/nym-wallet/src/components/Buy/Tutorial.tsx +++ b/nym-wallet/src/components/Buy/Tutorial.tsx @@ -1,32 +1,32 @@ import React from 'react'; import { Box, Typography, Grid, Link, Card, CardContent, Stack } from '@mui/material'; -import { NymCard } from '..'; import BitfinexIcon from 'src/svg-icons/bitfinex.svg'; import KrakenIcon from 'src/svg-icons/kraken.svg'; import BybitIcon from 'src/svg-icons/bybit.svg'; import GateIcon from 'src/svg-icons/gate22.svg'; import HTXIcon from 'src/svg-icons/htx.svg'; +import { NymCard } from '..'; -const ExchangeCard = ({ - name, - tokenType, - url, - IconComponent +const ExchangeCard = ({ + name, + tokenType, + url, + IconComponent, }: { name: string; tokenType: string; url: string; IconComponent: React.FunctionComponent>; }) => ( - @@ -51,17 +51,17 @@ const ExchangeCard = ({ {tokenType} - GET NYM @@ -78,44 +78,40 @@ export const Tutorial = () => { name: 'Bitfinex', tokenType: 'Native NYM, ERC-20', url: 'https://www.bitfinex.com/', - IconComponent: BitfinexIcon + IconComponent: BitfinexIcon, }, { name: 'Kraken', tokenType: 'Native NYM', url: 'https://www.kraken.com/', - IconComponent: KrakenIcon + IconComponent: KrakenIcon, }, { name: 'Bybit', tokenType: 'ERC-20', url: 'https://www.bybit.com/en/', - IconComponent: BybitIcon + IconComponent: BybitIcon, }, { name: 'Gate.io', tokenType: 'ERC-20', url: 'https://www.gate.io/', - IconComponent: GateIcon + IconComponent: GateIcon, }, { name: 'HTX', tokenType: 'ERC-20', url: 'https://www.htx.com/', - IconComponent: HTXIcon + IconComponent: HTXIcon, }, ]; return ( - + You can get NYM tokens from these exchanges - + {exchanges.map((exchange) => ( diff --git a/package.json b/package.json index 0170158389..febd76c583 100644 --- a/package.json +++ b/package.json @@ -1,66 +1,67 @@ { "name": "@nymproject/nymsphere", - "version": "1.0.0", - "private": true, + "version": "1.0.1", "license": "Apache 2.0", - "workspaces": [ - "sdk/typescript/packages/**", - "sdk/typescript/examples/**", - "ts-packages/*", - "nym-wallet", - "explorer-nextjs", - "explorer-v2", - "types", - "clients/validator", - "sdk/typescript/packages/**", - "sdk/typescript/examples/**", - "sdk/typescript/codegen/**" - ], "scripts": { - "nuke": "npx rimraf **/node_modules node_modules", - "scrub": "npx rimraf **/dist dist", - "clean": "lerna run clean", + "audit:fix": "npm_config_yes=true npx yarn-audit-fix -- --dry-run", "build": "run-s build:types build:packages", - "build:wasm": "make sdk-wasm-build", - "build:types": "lerna run --scope @nymproject/types build --stream", - "build:packages": "run-s build:packages:theme build:packages:react", - "build:packages:theme": "lerna run --scope @nymproject/mui-theme build", - "build:packages:react": "lerna run --scope @nymproject/react build", - "build:playground": "lerna run --scope @nymproject/react storybook:build --stream", + "build:ci": "run-s build:types build:packages build:wasm build:ci:sdk", + "build:ci:sdk": "lerna run --scope '{@nymproject/sdk,@nymproject/node-tester,@nymproject/sdk-react,@nymproject/mix-fetch,@nymproject/nodejs-client,@nymproject/mix-fetch-node}' build --stream", "build:ci:storybook": "yarn build && yarn dev:on && run-p build:playground && yarn build:ci:storybook:collect-artifacts ", "build:ci:storybook:collect-artifacts": "mkdir -p ts-packages/dist && mv sdk/typescript/packages/react-components/storybook-static ts-packages/dist/storybook ", - "prebuild:ci": "yarn dev:on && yarn", - "build:ci": "run-s build:types build:packages build:wasm build:ci:sdk", - "postbuild:ci": "yarn dev:off", - "build:ci:sdk": "lerna run --scope '{@nymproject/sdk,@nymproject/node-tester,@nymproject/sdk-react,@nymproject/mix-fetch,@nymproject/nodejs-client,@nymproject/mix-fetch-node}' build --stream", + "build:packages": "run-s build:packages:theme build:packages:react", + "build:packages:react": "lerna run --scope @nymproject/react build", + "build:packages:theme": "lerna run --scope @nymproject/mui-theme build", + "build:playground": "lerna run --scope @nymproject/react storybook:build --stream", + "build:types": "lerna run --scope @nymproject/types build --stream", + "build:wasm": "make sdk-wasm-build", + "clean": "lerna run clean", + "dev:off": "node sdk/typescript/scripts/dev-mode-remove.mjs", + "dev:on": "node sdk/typescript/scripts/dev-mode-add.mjs", "docs:prod:build": "run-s docs:prod:build:ws", "docs:prod:build:ws": "lerna run docs:prod:build --stream", - "sdk:build": "./sdk/typescript/scripts/build-prod-sdk.sh", - "sdk:publish": "./sdk/typescript/scripts/publish.sh", "lint": "lerna run lint --stream", "lint:fix": "lerna run lint:fix --stream", + "nuke": "npx rimraf **/node_modules node_modules", + "postbuild:ci": "yarn dev:off", + "prebuild:ci": "yarn dev:on && yarn", + "scrub": "npx rimraf **/dist dist", + "sdk:build": "./sdk/typescript/scripts/build-prod-sdk.sh", + "sdk:publish": "./sdk/typescript/scripts/publish.sh", + "sdk:versions:add-rc": "cargo run -p sdk-version-bump --pre-release", + "sdk:versions:bump": "cargo run -p sdk-version-bump bump-version", + "sdk:versions:remove-rc": "cargo run -p sdk-version-bump remove-suffix", "tsc": "lerna run tsc --stream", - "types:lint:fix": "lerna run lint:fix --scope @nymproject/types --scope @nymproject/nym-wallet-app", - "audit:fix": "npm_config_yes=true npx yarn-audit-fix -- --dry-run", - "dev:on": "node sdk/typescript/scripts/dev-mode-add.mjs", - "dev:off": "node sdk/typescript/scripts/dev-mode-remove.mjs" + "types:lint:fix": "lerna run lint:fix --scope @nymproject/types --scope @nymproject/nym-wallet-app" + }, + "dependencies": { + "lucide-react": "^0.453.0" }, "devDependencies": { "@npmcli/node-gyp": "^3.0.0", - "@types/minimatch": "^6.0.0", + "@types/minimatch": "5.1.2", "lerna": "^7.3.0", "node-gyp": "^9.3.1", "npm-run-all": "^4.1.5", "tslog": "3.3.3" }, - "dependencies": { - "lucide-react": "^0.453.0" - }, + "private": true, "resolutions": { "@cosmjs/amino": "^0.32.4", + "@cosmjs/cosmwasm-stargate": "^0.32.4", "@cosmjs/proto-signing": "^0.32.4", "@cosmjs/stargate": "^0.32.4", - "@cosmjs/cosmwasm-stargate": "^0.32.4", - "cosmjs-types": "^0.9.0" - } -} + "cosmjs-types": "^0.9.0", + "@types/minimatch": "5.1.2" + }, + "workspaces": [ + "ts-packages/*", + "nym-wallet", + "explorer-nextjs", + "explorer-v2", + "types", + "sdk/typescript/packages/mix-fetch/internal-dev", + "sdk/typescript/packages/react-components", + "sdk/typescript/packages/mui-theme" + ] +} \ No newline at end of file diff --git a/scripts/nym-node-setup/quic_bridge_deployment.sh b/scripts/nym-node-setup/quic_bridge_deployment.sh index 0694fca81a..f7dc60e0f9 100644 --- a/scripts/nym-node-setup/quic_bridge_deployment.sh +++ b/scripts/nym-node-setup/quic_bridge_deployment.sh @@ -37,7 +37,7 @@ add_log_redirection() { add_log_redirection # Constants / Paths -REQUIRED_CMDS=(ip jq curl openssl wg dpkg) +REQUIRED_CMDS=(ip jq curl openssl dpkg) BRIDGE_BIN="/usr/local/bin/nym-bridge" BRIDGE_CFG_BIN="/usr/local/bin/bridge-cfg" @@ -67,13 +67,9 @@ press_enter() { read -r -p "$1"; } # Helper: detect dpkg dependency failure for libc6>=2.34 deb_depends_libc_too_old() { - # Grep dpkg -i output in log or run a dry call to dpkg -i with --unpack to observe code - # Simpler heuristic: check installed libc6 version local v v="$(dpkg-query -W -f='${Version}\n' libc6 2>/dev/null || true)" - # If no libc6, say "too old" to trigger source build if [[ -z "$v" ]]; then return 0; fi - # Compare minimalistically: 2.34 vs current (2.31 typical on Debian 11) dpkg --compare-versions "$v" ge "2.34" && return 1 || return 0 } @@ -113,25 +109,19 @@ build_from_source_latest() { cargo build --release -p nym-bridge cargo build --release -p bridge-cfg ) - - # After build, binaries are typically in workspace target dir: - # /tmp/nym-bridges/target/release/nym-bridge - # /tmp/nym-bridges/target/release/bridge-cfg } -# Helper: robustly locate and install a built binary from /tmp/nym-bridges +# Helper: robustly locate and install a built binary install_built_binary() { - local name="$1" # e.g., bridge-cfg or nym-bridge + local name="$1" local preferred="/tmp/nym-bridges/target/release/$name" - # Prefer the common workspace path first: if [[ -x "$preferred" ]]; then install -m 0755 "$preferred" "/usr/local/bin/$name" ok "Installed $name from $preferred to /usr/local/bin/$name" return 0 fi - # Try expected crate subpaths: local alt1="/tmp/nym-bridges/$name/target/release/$name" if [[ -x "$alt1" ]]; then install -m 0755 "$alt1" "/usr/local/bin/$name" @@ -139,7 +129,6 @@ install_built_binary() { return 0 fi - # Broader search within 8 levels: local found found="$(find /tmp/nym-bridges -maxdepth 8 -type f -name "$name" -perm -111 2>/dev/null | head -n1 || true)" if [[ -n "$found" ]]; then @@ -169,8 +158,14 @@ verify_bridge_prerequisites() { else ok "✓ iptables-persistent installed" fi - echo "" + # Ensure /etc/nym exists and has correct permissions for Ubuntu 24+ + mkdir -p "$NYM_ETC_DIR" + chgrp nym "$NYM_ETC_DIR" 2>/dev/null || true + chmod 750 "$NYM_ETC_DIR" + ok "✓ Ensured /etc/nym exists with group 'nym' and mode 750" + + echo "" local v4=$(cat /proc/sys/net/ipv4/ip_forward 2>/dev/null || echo 0) local v6=$(cat /proc/sys/net/ipv6/conf/all/forwarding 2>/dev/null || echo 0) [[ "$v4" == "1" ]] && ok "✓ IPv4 forwarding enabled" || warn "IPv4 forwarding disabled" @@ -194,6 +189,13 @@ adjust_ip_forwarding() { install_bridge_binary() { title "Installing nym-bridge Binary" + # Handle Ubuntu 24+ case: system-installed path + if [[ -x /usr/bin/nym-bridge && ! -x /usr/local/bin/nym-bridge ]]; then + cp /usr/bin/nym-bridge /usr/local/bin/nym-bridge + chmod +x /usr/local/bin/nym-bridge + ok "Copied nym-bridge from /usr/bin to /usr/local/bin/" + fi + info "Fetching latest nym-bridge .deb from GitHub..." local deb_url deb_url="$(curl -fsSL https://api.github.com/repos/nymtech/nym-bridges/releases/latest \ @@ -234,12 +236,25 @@ install_bridge_binary() { build_from_source_latest install_built_binary "nym-bridge" fi + + # Detect alternate binary location (Ubuntu 24+) + if [[ -x /usr/bin/nym-bridge ]]; then + BRIDGE_BIN="/usr/bin/nym-bridge" + ok "Detected nym-bridge binary in /usr/bin" + fi } # Install bridge-cfg install_bridge_cfg_tool() { title "Installing bridge-cfg Tool" + # Fix for Ubuntu 24+ + if [[ -x /usr/bin/bridge-cfg && ! -x /usr/local/bin/bridge-cfg ]]; then + cp /usr/bin/bridge-cfg /usr/local/bin/bridge-cfg + chmod +x /usr/local/bin/bridge-cfg + ok "Copied bridge-cfg from /usr/bin to /usr/local/bin/" + fi + info "Attempting to fetch latest bridge-cfg from GitHub..." local cfg_url cfg_url="$(curl -fsSL https://api.github.com/repos/nymtech/nym-bridges/releases/latest \ @@ -263,21 +278,23 @@ install_bridge_cfg_tool() { warn "Failed to download bridge-cfg; building locally..." fi - # Build from source and install robustly ensure_rustup build_from_source_latest install_built_binary "bridge-cfg" + + if [[ -x /usr/bin/bridge-cfg ]]; then + BRIDGE_CFG_BIN="/usr/bin/bridge-cfg" + ok "Detected bridge-cfg binary in /usr/bin" + fi } # Generate config via bridge-cfg (with backup) run_bridge_cfg_generate() { title "Generating Bridge Configuration with bridge-cfg" - # Detect a likely nym-node configuration path local HOME_DIR="${HOME:-/root}" local NODE_CFG NODE_CFG="$(find "$HOME_DIR/.nym/nym-nodes" -type f -name config.toml 2>/dev/null | head -n1 || true)" - if [[ -z "$NODE_CFG" ]]; then NODE_CFG="$HOME_DIR/.nym/nym-nodes/default-nym-node/config/config.toml" fi @@ -291,7 +308,6 @@ run_bridge_cfg_generate() { exit 1 fi - # Backup before modification local NODE_ID NODE_ID="$(basename "$(dirname "$(dirname "$NODE_CFG")")")" local BACKUP_DIR="$HOME/.nym/backup/$NODE_ID/config" @@ -302,17 +318,15 @@ run_bridge_cfg_generate() { cp "$NODE_CFG" "$BACKUP_FILE" ok "Backup created: $BACKUP_FILE" - # Ensure directories exist before running bridge-cfg to prevent "os error 2" mkdir -p "$NYM_ETC_DIR" "$NYM_ETC_KEYS_DIR" - mkdir -p "$(dirname "$NYM_ETC_CLIENT_PARAMS_DEFAULT")" - chmod 700 "$NYM_ETC_DIR" "$NYM_ETC_KEYS_DIR" + chgrp nym "$NYM_ETC_DIR" 2>/dev/null || true + chmod 750 "$NYM_ETC_DIR" + chmod 700 "$NYM_ETC_KEYS_DIR" touch "$NYM_ETC_CLIENT_PARAMS_DEFAULT" || true info "Running: bridge-cfg --gen -n \"$NODE_CFG\" -d \"$NYM_ETC_DIR\" -o \"$NYM_ETC_BRIDGES\"" set +e "$BRIDGE_CFG_BIN" --gen -n "$NODE_CFG" -d "$NYM_ETC_DIR" -o "$NYM_ETC_BRIDGES" - - local rc=$? set -e if [[ $rc -ne 0 ]]; then @@ -337,7 +351,6 @@ run_bridge_cfg_generate() { create_bridge_service() { title "Creating nym-bridge systemd Service" - # Respect a service provided by .deb postinst if present if systemctl list-unit-files | grep -q '^nym-bridge\.service'; then warn "Detected existing nym-bridge service (likely from .deb). Not overwriting." systemctl daemon-reload || true @@ -394,7 +407,7 @@ configure_dns_and_icmp() { ok "ICMP and DNS rules applied." } -# Full interactive setup (safe exit + backup notice) +# Full interactive setup full_bridge_setup() { title "Nym QUIC Bridge - Full Setup" @@ -538,3 +551,4 @@ case "${1:-}" in esac echo "Operation '${1:-help}' completed." + diff --git a/sdk/typescript/codegen/contract-clients/build.mjs b/sdk/typescript/codegen/contract-clients/build.mjs index 5a6b6220f6..ffc5cd4005 100644 --- a/sdk/typescript/codegen/contract-clients/build.mjs +++ b/sdk/typescript/codegen/contract-clients/build.mjs @@ -3,13 +3,11 @@ import codegen from '@cosmwasm/ts-codegen'; codegen .default({ contracts: [ - { name: 'coconut-bandwidth', dir: '../../../../contracts/coconut-bandwidth' }, + { name: 'ecash', dir: '../../../../contracts/ecash' }, { name: 'coconut-dkg', dir: '../../../../contracts/coconut-dkg' }, { name: 'mixnet', dir: '../../../../contracts/mixnet' }, { name: 'cw3-flex-multisig', dir: '../../../../contracts/multisig/cw3-flex-multisig' }, { name: 'cw4-group', dir: '../../../../contracts/multisig/cw4-group' }, - { name: 'name-service', dir: '../../../../contracts/name-service' }, - { name: 'service-provider-directory', dir: '../../../../contracts/service-provider-directory' }, { name: 'vesting', dir: '../../../../contracts/vesting' }, ], outPath: './src', diff --git a/sdk/typescript/codegen/contract-clients/package.json b/sdk/typescript/codegen/contract-clients/package.json index f429659cbb..3be66eff66 100644 --- a/sdk/typescript/codegen/contract-clients/package.json +++ b/sdk/typescript/codegen/contract-clients/package.json @@ -1,6 +1,6 @@ { "name": "@nymproject/contract-clients", - "version": "1.3.0-rc.0", + "version": "1.3.1-rc0", "description": "A client for all Nym smart contracts", "license": "Apache-2.0", "author": "Nym Technologies SA", @@ -18,7 +18,7 @@ "docs:watch": "nodemon --ext ts --watch './src/**/*' --watch './typedoc.json' --exec \"yarn docs:generate\"" }, "devDependencies": { - "@cosmwasm/ts-codegen": "^0.35.3", + "@cosmwasm/ts-codegen": "^1.13.3", "nodemon": "3.0.1", "npm-run-all": "^4.1.5", "reload": "^3.2.1", @@ -27,4 +27,4 @@ }, "private": false, "types": "./dist/index.d.ts" -} \ No newline at end of file +} diff --git a/sdk/typescript/codegen/contract-clients/src/CoconutDkg.client.ts b/sdk/typescript/codegen/contract-clients/src/CoconutDkg.client.ts index c86b48d22c..cb960c87c0 100644 --- a/sdk/typescript/codegen/contract-clients/src/CoconutDkg.client.ts +++ b/sdk/typescript/codegen/contract-clients/src/CoconutDkg.client.ts @@ -1,23 +1,58 @@ /** -* This file was automatically generated by @cosmwasm/ts-codegen@0.35.3. +* This file was automatically generated by @cosmwasm/ts-codegen@1.13.3. * DO NOT MODIFY IT BY HAND. Instead, modify the source JSONSchema file, * and run the @cosmwasm/ts-codegen generate command to regenerate this file. */ -import { CosmWasmClient, SigningCosmWasmClient, ExecuteResult } from "@cosmjs/cosmwasm-stargate"; -import { Coin, StdFee } from "@cosmjs/amino"; -import { InstantiateMsg, TimeConfiguration, ExecuteMsg, ContractSafeBytes, Addr, QueryMsg, MigrateMsg, PagedDealerResponse, DealerDetails, Timestamp, Uint64, EpochState, Epoch, DealerType, DealerDetailsResponse, PagedDealingsResponse, ContractDealing, NullableInitialReplacementData, InitialReplacementData, PagedVKSharesResponse, ContractVKShare } from "./CoconutDkg.types"; - +import { ICosmWasmClient, ISigningCosmWasmClient } from "./baseClient"; +import { Coin, StdFee } from "@interchainjs/types"; +import { InstantiateMsg, TimeConfiguration, ExecuteMsg, ContractSafeBytes, DealingChunkInfo, PartialContractDealing, QueryMsg, MigrateMsg, EpochState, Timestamp, Uint64, StateAdvanceResponse, StateProgress, ContractVersion, Addr, PagedDealerResponse, DealerDetails, Epoch, DealerDealingsStatusResponse, DealerType, DealerDetailsResponse, PagedDealerIndexResponse, DealingChunkResponse, DealingChunkStatusResponse, ChunkSubmissionStatus, DealingStatusResponse, DealingStatus, DealingMetadataResponse, DealingMetadata, PagedDealerAddressesResponse, NullableEpoch, RegisteredDealerDetails, DealerRegistrationDetails, Cw4Contract, State, VkShareResponse, ContractVKShare, PagedVKSharesResponse } from "./CoconutDkg.types"; export interface CoconutDkgReadOnlyInterface { contractAddress: string; + getState: () => Promise; getCurrentEpochState: () => Promise; + getEpochStateAtHeight: ({ + height + }: { + height: number; + }) => Promise; getCurrentEpochThreshold: () => Promise; - getInitialDealers: () => Promise; + getEpochThreshold: ({ + epochId + }: { + epochId: number; + }) => Promise; + canAdvanceState: () => Promise; + getRegisteredDealer: ({ + dealerAddress, + epochId + }: { + dealerAddress: string; + epochId?: number; + }) => Promise; getDealerDetails: ({ dealerAddress }: { dealerAddress: string; }) => Promise; + getEpochDealersAddresses: ({ + epochId, + limit, + startAfter + }: { + epochId: number; + limit?: number; + startAfter?: string; + }) => Promise; + getEpochDealers: ({ + epochId, + limit, + startAfter + }: { + epochId: number; + limit?: number; + startAfter?: string; + }) => Promise; getCurrentDealers: ({ limit, startAfter @@ -25,22 +60,67 @@ export interface CoconutDkgReadOnlyInterface { limit?: number; startAfter?: string; }) => Promise; - getPastDealers: ({ + getDealerIndices: ({ limit, startAfter }: { limit?: number; startAfter?: string; - }) => Promise; - getDealing: ({ - idx, - limit, - startAfter + }) => Promise; + getDealingsMetadata: ({ + dealer, + dealingIndex, + epochId }: { - idx: number; - limit?: number; - startAfter?: string; - }) => Promise; + dealer: string; + dealingIndex: number; + epochId: number; + }) => Promise; + getDealerDealingsStatus: ({ + dealer, + epochId + }: { + dealer: string; + epochId: number; + }) => Promise; + getDealingStatus: ({ + dealer, + dealingIndex, + epochId + }: { + dealer: string; + dealingIndex: number; + epochId: number; + }) => Promise; + getDealingChunkStatus: ({ + chunkIndex, + dealer, + dealingIndex, + epochId + }: { + chunkIndex: number; + dealer: string; + dealingIndex: number; + epochId: number; + }) => Promise; + getDealingChunk: ({ + chunkIndex, + dealer, + dealingIndex, + epochId + }: { + chunkIndex: number; + dealer: string; + dealingIndex: number; + epochId: number; + }) => Promise; + getVerificationKey: ({ + epochId, + owner + }: { + epochId: number; + owner: string; + }) => Promise; getVerificationKeys: ({ epochId, limit, @@ -50,37 +130,89 @@ export interface CoconutDkgReadOnlyInterface { limit?: number; startAfter?: string; }) => Promise; + getCw2ContractVersion: () => Promise; } export class CoconutDkgQueryClient implements CoconutDkgReadOnlyInterface { - client: CosmWasmClient; + client: ICosmWasmClient; contractAddress: string; - - constructor(client: CosmWasmClient, contractAddress: string) { + constructor(client: ICosmWasmClient, contractAddress: string) { this.client = client; this.contractAddress = contractAddress; + this.getState = this.getState.bind(this); this.getCurrentEpochState = this.getCurrentEpochState.bind(this); + this.getEpochStateAtHeight = this.getEpochStateAtHeight.bind(this); this.getCurrentEpochThreshold = this.getCurrentEpochThreshold.bind(this); - this.getInitialDealers = this.getInitialDealers.bind(this); + this.getEpochThreshold = this.getEpochThreshold.bind(this); + this.canAdvanceState = this.canAdvanceState.bind(this); + this.getRegisteredDealer = this.getRegisteredDealer.bind(this); this.getDealerDetails = this.getDealerDetails.bind(this); + this.getEpochDealersAddresses = this.getEpochDealersAddresses.bind(this); + this.getEpochDealers = this.getEpochDealers.bind(this); this.getCurrentDealers = this.getCurrentDealers.bind(this); - this.getPastDealers = this.getPastDealers.bind(this); - this.getDealing = this.getDealing.bind(this); + this.getDealerIndices = this.getDealerIndices.bind(this); + this.getDealingsMetadata = this.getDealingsMetadata.bind(this); + this.getDealerDealingsStatus = this.getDealerDealingsStatus.bind(this); + this.getDealingStatus = this.getDealingStatus.bind(this); + this.getDealingChunkStatus = this.getDealingChunkStatus.bind(this); + this.getDealingChunk = this.getDealingChunk.bind(this); + this.getVerificationKey = this.getVerificationKey.bind(this); this.getVerificationKeys = this.getVerificationKeys.bind(this); + this.getCw2ContractVersion = this.getCw2ContractVersion.bind(this); } - + getState = async (): Promise => { + return this.client.queryContractSmart(this.contractAddress, { + get_state: {} + }); + }; getCurrentEpochState = async (): Promise => { return this.client.queryContractSmart(this.contractAddress, { get_current_epoch_state: {} }); }; + getEpochStateAtHeight = async ({ + height + }: { + height: number; + }): Promise => { + return this.client.queryContractSmart(this.contractAddress, { + get_epoch_state_at_height: { + height + } + }); + }; getCurrentEpochThreshold = async (): Promise => { return this.client.queryContractSmart(this.contractAddress, { get_current_epoch_threshold: {} }); }; - getInitialDealers = async (): Promise => { + getEpochThreshold = async ({ + epochId + }: { + epochId: number; + }): Promise => { return this.client.queryContractSmart(this.contractAddress, { - get_initial_dealers: {} + get_epoch_threshold: { + epoch_id: epochId + } + }); + }; + canAdvanceState = async (): Promise => { + return this.client.queryContractSmart(this.contractAddress, { + can_advance_state: {} + }); + }; + getRegisteredDealer = async ({ + dealerAddress, + epochId + }: { + dealerAddress: string; + epochId?: number; + }): Promise => { + return this.client.queryContractSmart(this.contractAddress, { + get_registered_dealer: { + dealer_address: dealerAddress, + epoch_id: epochId + } }); }; getDealerDetails = async ({ @@ -94,6 +226,40 @@ export class CoconutDkgQueryClient implements CoconutDkgReadOnlyInterface { } }); }; + getEpochDealersAddresses = async ({ + epochId, + limit, + startAfter + }: { + epochId: number; + limit?: number; + startAfter?: string; + }): Promise => { + return this.client.queryContractSmart(this.contractAddress, { + get_epoch_dealers_addresses: { + epoch_id: epochId, + limit, + start_after: startAfter + } + }); + }; + getEpochDealers = async ({ + epochId, + limit, + startAfter + }: { + epochId: number; + limit?: number; + startAfter?: string; + }): Promise => { + return this.client.queryContractSmart(this.contractAddress, { + get_epoch_dealers: { + epoch_id: epochId, + limit, + start_after: startAfter + } + }); + }; getCurrentDealers = async ({ limit, startAfter @@ -108,34 +274,119 @@ export class CoconutDkgQueryClient implements CoconutDkgReadOnlyInterface { } }); }; - getPastDealers = async ({ + getDealerIndices = async ({ limit, startAfter }: { limit?: number; startAfter?: string; - }): Promise => { + }): Promise => { return this.client.queryContractSmart(this.contractAddress, { - get_past_dealers: { + get_dealer_indices: { limit, start_after: startAfter } }); }; - getDealing = async ({ - idx, - limit, - startAfter + getDealingsMetadata = async ({ + dealer, + dealingIndex, + epochId }: { - idx: number; - limit?: number; - startAfter?: string; - }): Promise => { + dealer: string; + dealingIndex: number; + epochId: number; + }): Promise => { return this.client.queryContractSmart(this.contractAddress, { - get_dealing: { - idx, - limit, - start_after: startAfter + get_dealings_metadata: { + dealer, + dealing_index: dealingIndex, + epoch_id: epochId + } + }); + }; + getDealerDealingsStatus = async ({ + dealer, + epochId + }: { + dealer: string; + epochId: number; + }): Promise => { + return this.client.queryContractSmart(this.contractAddress, { + get_dealer_dealings_status: { + dealer, + epoch_id: epochId + } + }); + }; + getDealingStatus = async ({ + dealer, + dealingIndex, + epochId + }: { + dealer: string; + dealingIndex: number; + epochId: number; + }): Promise => { + return this.client.queryContractSmart(this.contractAddress, { + get_dealing_status: { + dealer, + dealing_index: dealingIndex, + epoch_id: epochId + } + }); + }; + getDealingChunkStatus = async ({ + chunkIndex, + dealer, + dealingIndex, + epochId + }: { + chunkIndex: number; + dealer: string; + dealingIndex: number; + epochId: number; + }): Promise => { + return this.client.queryContractSmart(this.contractAddress, { + get_dealing_chunk_status: { + chunk_index: chunkIndex, + dealer, + dealing_index: dealingIndex, + epoch_id: epochId + } + }); + }; + getDealingChunk = async ({ + chunkIndex, + dealer, + dealingIndex, + epochId + }: { + chunkIndex: number; + dealer: string; + dealingIndex: number; + epochId: number; + }): Promise => { + return this.client.queryContractSmart(this.contractAddress, { + get_dealing_chunk: { + chunk_index: chunkIndex, + dealer, + dealing_index: dealingIndex, + epoch_id: epochId + } + }); + }; + getVerificationKey = async ({ + epochId, + owner + }: { + epochId: number; + owner: string; + }): Promise => { + return this.client.queryContractSmart(this.contractAddress, { + get_verification_key: { + epoch_id: epochId, + owner } }); }; @@ -156,91 +407,142 @@ export class CoconutDkgQueryClient implements CoconutDkgReadOnlyInterface { } }); }; + getCw2ContractVersion = async (): Promise => { + return this.client.queryContractSmart(this.contractAddress, { + get_cw2_contract_version: {} + }); + }; } export interface CoconutDkgInterface extends CoconutDkgReadOnlyInterface { contractAddress: string; sender: string; + initiateDkg: (fee_?: number | StdFee | "auto", memo_?: string, funds_?: Coin[]) => Promise; registerDealer: ({ announceAddress, bteKeyWithProof, + identityKey, resharing }: { announceAddress: string; bteKeyWithProof: string; + identityKey: string; resharing: boolean; - }, fee?: number | StdFee | "auto", memo?: string, _funds?: Coin[]) => Promise; - commitDealing: ({ - dealingBytes, + }, fee_?: number | StdFee | "auto", memo_?: string, funds_?: Coin[]) => Promise; + commitDealingsMetadata: ({ + chunks, + dealingIndex, resharing }: { - dealingBytes: ContractSafeBytes; + chunks: DealingChunkInfo[]; + dealingIndex: number; resharing: boolean; - }, fee?: number | StdFee | "auto", memo?: string, _funds?: Coin[]) => Promise; + }, fee_?: number | StdFee | "auto", memo_?: string, funds_?: Coin[]) => Promise; + commitDealingsChunk: ({ + chunk + }: { + chunk: PartialContractDealing; + }, fee_?: number | StdFee | "auto", memo_?: string, funds_?: Coin[]) => Promise; commitVerificationKeyShare: ({ resharing, share }: { resharing: boolean; share: string; - }, fee?: number | StdFee | "auto", memo?: string, _funds?: Coin[]) => Promise; + }, fee_?: number | StdFee | "auto", memo_?: string, funds_?: Coin[]) => Promise; verifyVerificationKeyShare: ({ owner, resharing }: { - owner: Addr; + owner: string; resharing: boolean; - }, fee?: number | StdFee | "auto", memo?: string, _funds?: Coin[]) => Promise; - surpassedThreshold: (fee?: number | StdFee | "auto", memo?: string, _funds?: Coin[]) => Promise; - advanceEpochState: (fee?: number | StdFee | "auto", memo?: string, _funds?: Coin[]) => Promise; + }, fee_?: number | StdFee | "auto", memo_?: string, funds_?: Coin[]) => Promise; + advanceEpochState: (fee_?: number | StdFee | "auto", memo_?: string, funds_?: Coin[]) => Promise; + triggerReset: (fee_?: number | StdFee | "auto", memo_?: string, funds_?: Coin[]) => Promise; + triggerResharing: (fee_?: number | StdFee | "auto", memo_?: string, funds_?: Coin[]) => Promise; + transferOwnership: ({ + transferTo + }: { + transferTo: string; + }, fee_?: number | StdFee | "auto", memo_?: string, funds_?: Coin[]) => Promise; + updateAnnounceAddress: ({ + newAddress + }: { + newAddress: string; + }, fee_?: number | StdFee | "auto", memo_?: string, funds_?: Coin[]) => Promise; } export class CoconutDkgClient extends CoconutDkgQueryClient implements CoconutDkgInterface { - client: SigningCosmWasmClient; + client: ISigningCosmWasmClient; sender: string; contractAddress: string; - - constructor(client: SigningCosmWasmClient, sender: string, contractAddress: string) { + constructor(client: ISigningCosmWasmClient, sender: string, contractAddress: string) { super(client, contractAddress); this.client = client; this.sender = sender; this.contractAddress = contractAddress; + this.initiateDkg = this.initiateDkg.bind(this); this.registerDealer = this.registerDealer.bind(this); - this.commitDealing = this.commitDealing.bind(this); + this.commitDealingsMetadata = this.commitDealingsMetadata.bind(this); + this.commitDealingsChunk = this.commitDealingsChunk.bind(this); this.commitVerificationKeyShare = this.commitVerificationKeyShare.bind(this); this.verifyVerificationKeyShare = this.verifyVerificationKeyShare.bind(this); - this.surpassedThreshold = this.surpassedThreshold.bind(this); this.advanceEpochState = this.advanceEpochState.bind(this); + this.triggerReset = this.triggerReset.bind(this); + this.triggerResharing = this.triggerResharing.bind(this); + this.transferOwnership = this.transferOwnership.bind(this); + this.updateAnnounceAddress = this.updateAnnounceAddress.bind(this); } - + initiateDkg = async (fee_: number | StdFee | "auto" = "auto", memo_?: string, funds_?: Coin[]): Promise => { + return await this.client.execute(this.sender, this.contractAddress, { + initiate_dkg: {} + }, fee_, memo_, funds_); + }; registerDealer = async ({ announceAddress, bteKeyWithProof, + identityKey, resharing }: { announceAddress: string; bteKeyWithProof: string; + identityKey: string; resharing: boolean; - }, fee: number | StdFee | "auto" = "auto", memo?: string, _funds?: Coin[]): Promise => { + }, fee_: number | StdFee | "auto" = "auto", memo_?: string, funds_?: Coin[]): Promise => { return await this.client.execute(this.sender, this.contractAddress, { register_dealer: { announce_address: announceAddress, bte_key_with_proof: bteKeyWithProof, + identity_key: identityKey, resharing } - }, fee, memo, _funds); + }, fee_, memo_, funds_); }; - commitDealing = async ({ - dealingBytes, + commitDealingsMetadata = async ({ + chunks, + dealingIndex, resharing }: { - dealingBytes: ContractSafeBytes; + chunks: DealingChunkInfo[]; + dealingIndex: number; resharing: boolean; - }, fee: number | StdFee | "auto" = "auto", memo?: string, _funds?: Coin[]): Promise => { + }, fee_: number | StdFee | "auto" = "auto", memo_?: string, funds_?: Coin[]): Promise => { return await this.client.execute(this.sender, this.contractAddress, { - commit_dealing: { - dealing_bytes: dealingBytes, + commit_dealings_metadata: { + chunks, + dealing_index: dealingIndex, resharing } - }, fee, memo, _funds); + }, fee_, memo_, funds_); + }; + commitDealingsChunk = async ({ + chunk + }: { + chunk: PartialContractDealing; + }, fee_: number | StdFee | "auto" = "auto", memo_?: string, funds_?: Coin[]): Promise => { + return await this.client.execute(this.sender, this.contractAddress, { + commit_dealings_chunk: { + chunk + } + }, fee_, memo_, funds_); }; commitVerificationKeyShare = async ({ resharing, @@ -248,36 +550,63 @@ export class CoconutDkgClient extends CoconutDkgQueryClient implements CoconutDk }: { resharing: boolean; share: string; - }, fee: number | StdFee | "auto" = "auto", memo?: string, _funds?: Coin[]): Promise => { + }, fee_: number | StdFee | "auto" = "auto", memo_?: string, funds_?: Coin[]): Promise => { return await this.client.execute(this.sender, this.contractAddress, { commit_verification_key_share: { resharing, share } - }, fee, memo, _funds); + }, fee_, memo_, funds_); }; verifyVerificationKeyShare = async ({ owner, resharing }: { - owner: Addr; + owner: string; resharing: boolean; - }, fee: number | StdFee | "auto" = "auto", memo?: string, _funds?: Coin[]): Promise => { + }, fee_: number | StdFee | "auto" = "auto", memo_?: string, funds_?: Coin[]): Promise => { return await this.client.execute(this.sender, this.contractAddress, { verify_verification_key_share: { owner, resharing } - }, fee, memo, _funds); + }, fee_, memo_, funds_); }; - surpassedThreshold = async (fee: number | StdFee | "auto" = "auto", memo?: string, _funds?: Coin[]): Promise => { - return await this.client.execute(this.sender, this.contractAddress, { - surpassed_threshold: {} - }, fee, memo, _funds); - }; - advanceEpochState = async (fee: number | StdFee | "auto" = "auto", memo?: string, _funds?: Coin[]): Promise => { + advanceEpochState = async (fee_: number | StdFee | "auto" = "auto", memo_?: string, funds_?: Coin[]): Promise => { return await this.client.execute(this.sender, this.contractAddress, { advance_epoch_state: {} - }, fee, memo, _funds); + }, fee_, memo_, funds_); }; -} + triggerReset = async (fee_: number | StdFee | "auto" = "auto", memo_?: string, funds_?: Coin[]): Promise => { + return await this.client.execute(this.sender, this.contractAddress, { + trigger_reset: {} + }, fee_, memo_, funds_); + }; + triggerResharing = async (fee_: number | StdFee | "auto" = "auto", memo_?: string, funds_?: Coin[]): Promise => { + return await this.client.execute(this.sender, this.contractAddress, { + trigger_resharing: {} + }, fee_, memo_, funds_); + }; + transferOwnership = async ({ + transferTo + }: { + transferTo: string; + }, fee_: number | StdFee | "auto" = "auto", memo_?: string, funds_?: Coin[]): Promise => { + return await this.client.execute(this.sender, this.contractAddress, { + transfer_ownership: { + transfer_to: transferTo + } + }, fee_, memo_, funds_); + }; + updateAnnounceAddress = async ({ + newAddress + }: { + newAddress: string; + }, fee_: number | StdFee | "auto" = "auto", memo_?: string, funds_?: Coin[]): Promise => { + return await this.client.execute(this.sender, this.contractAddress, { + update_announce_address: { + new_address: newAddress + } + }, fee_, memo_, funds_); + }; +} \ No newline at end of file diff --git a/sdk/typescript/codegen/contract-clients/src/CoconutDkg.types.ts b/sdk/typescript/codegen/contract-clients/src/CoconutDkg.types.ts index 1f90bc5ed3..36483df717 100644 --- a/sdk/typescript/codegen/contract-clients/src/CoconutDkg.types.ts +++ b/sdk/typescript/codegen/contract-clients/src/CoconutDkg.types.ts @@ -1,11 +1,12 @@ /** -* This file was automatically generated by @cosmwasm/ts-codegen@0.35.3. +* This file was automatically generated by @cosmwasm/ts-codegen@1.13.3. * DO NOT MODIFY IT BY HAND. Instead, modify the source JSONSchema file, * and run the @cosmwasm/ts-codegen generate command to regenerate this file. */ export interface InstantiateMsg { group_addr: string; + key_size: number; mix_denom: string; multisig_addr: string; time_configuration?: TimeConfiguration | null; @@ -19,16 +20,24 @@ export interface TimeConfiguration { verification_key_validation_time_secs: number; } export type ExecuteMsg = { + initiate_dkg: {}; +} | { register_dealer: { announce_address: string; bte_key_with_proof: string; + identity_key: string; resharing: boolean; }; } | { - commit_dealing: { - dealing_bytes: ContractSafeBytes; + commit_dealings_metadata: { + chunks: DealingChunkInfo[]; + dealing_index: number; resharing: boolean; }; +} | { + commit_dealings_chunk: { + chunk: PartialContractDealing; + }; } | { commit_verification_key_share: { resharing: boolean; @@ -36,41 +45,115 @@ export type ExecuteMsg = { }; } | { verify_verification_key_share: { - owner: Addr; + owner: string; resharing: boolean; }; -} | { - surpassed_threshold: {}; } | { advance_epoch_state: {}; +} | { + trigger_reset: {}; +} | { + trigger_resharing: {}; +} | { + transfer_ownership: { + transfer_to: string; + }; +} | { + update_announce_address: { + new_address: string; + }; }; export type ContractSafeBytes = number[]; -export type Addr = string; +export interface DealingChunkInfo { + size: number; +} +export interface PartialContractDealing { + chunk_index: number; + data: ContractSafeBytes; + dealing_index: number; +} export type QueryMsg = { + get_state: {}; +} | { get_current_epoch_state: {}; +} | { + get_epoch_state_at_height: { + height: number; + }; } | { get_current_epoch_threshold: {}; } | { - get_initial_dealers: {}; + get_epoch_threshold: { + epoch_id: number; + }; +} | { + can_advance_state: {}; +} | { + get_registered_dealer: { + dealer_address: string; + epoch_id?: number | null; + }; } | { get_dealer_details: { dealer_address: string; }; +} | { + get_epoch_dealers_addresses: { + epoch_id: number; + limit?: number | null; + start_after?: string | null; + }; +} | { + get_epoch_dealers: { + epoch_id: number; + limit?: number | null; + start_after?: string | null; + }; } | { get_current_dealers: { limit?: number | null; start_after?: string | null; }; } | { - get_past_dealers: { + get_dealer_indices: { limit?: number | null; start_after?: string | null; }; } | { - get_dealing: { - idx: number; - limit?: number | null; - start_after?: string | null; + get_dealings_metadata: { + dealer: string; + dealing_index: number; + epoch_id: number; + }; +} | { + get_dealer_dealings_status: { + dealer: string; + epoch_id: number; + }; +} | { + get_dealing_status: { + dealer: string; + dealing_index: number; + epoch_id: number; + }; +} | { + get_dealing_chunk_status: { + chunk_index: number; + dealer: string; + dealing_index: number; + epoch_id: number; + }; +} | { + get_dealing_chunk: { + chunk_index: number; + dealer: string; + dealing_index: number; + epoch_id: number; + }; +} | { + get_verification_key: { + epoch_id: number; + owner: string; }; } | { get_verification_keys: { @@ -78,22 +161,11 @@ export type QueryMsg = { limit?: number | null; start_after?: string | null; }; +} | { + get_cw2_contract_version: {}; }; export interface MigrateMsg {} -export interface PagedDealerResponse { - dealers: DealerDetails[]; - per_page: number; - start_next_after?: Addr | null; -} -export interface DealerDetails { - address: Addr; - announce_address: string; - assigned_index: number; - bte_public_key_with_proof: string; -} -export type Timestamp = Uint64; -export type Uint64 = number; -export type EpochState = "in_progress" | { +export type EpochState = ("waiting_initialisation" | "in_progress") | { public_key_submission: { resharing: boolean; }; @@ -114,36 +186,132 @@ export type EpochState = "in_progress" | { resharing: boolean; }; }; +export type Timestamp = Uint64; +export type Uint64 = number; +export interface StateAdvanceResponse { + current_state: EpochState; + deadline?: Timestamp | null; + is_complete: boolean; + progress: StateProgress; + reached_deadline: boolean; +} +export interface StateProgress { + registered_dealers: number; + registered_resharing_dealers: number; + submitted_dealings: number; + submitted_key_shares: number; + verified_keys: number; +} +export interface ContractVersion { + contract: string; + version: string; +} +export type Addr = string; +export interface PagedDealerResponse { + dealers: DealerDetails[]; + per_page: number; + start_next_after?: Addr | null; +} +export interface DealerDetails { + address: Addr; + announce_address: string; + assigned_index: number; + bte_public_key_with_proof: string; + ed25519_identity: string; +} export interface Epoch { + deadline?: Timestamp | null; epoch_id: number; - finish_timestamp: Timestamp; state: EpochState; + state_progress: StateProgress; time_configuration: TimeConfiguration; } -export type DealerType = "current" | "past" | "unknown"; +export interface DealerDealingsStatusResponse { + all_dealings_fully_submitted: boolean; + dealer: Addr; + dealing_submission_status: {}; + epoch_id: number; +} +export type DealerType = "unknown" | { + current: { + assigned_index: number; + }; +} | { + past: { + assigned_index: number; + }; +}; export interface DealerDetailsResponse { dealer_type: DealerType; details?: DealerDetails | null; } -export interface PagedDealingsResponse { - dealings: ContractDealing[]; - per_page: number; +export interface PagedDealerIndexResponse { + indices: [Addr, number][]; start_next_after?: Addr | null; } -export interface ContractDealing { +export interface DealingChunkResponse { + chunk?: ContractSafeBytes | null; + chunk_index: number; dealer: Addr; - dealing: ContractSafeBytes; + dealing_index: number; + epoch_id: number; } -export type NullableInitialReplacementData = InitialReplacementData | null; -export interface InitialReplacementData { - initial_dealers: Addr[]; - initial_height: number; +export interface DealingChunkStatusResponse { + chunk_index: number; + dealer: Addr; + dealing_index: number; + epoch_id: number; + status: ChunkSubmissionStatus; } -export interface PagedVKSharesResponse { - per_page: number; - shares: ContractVKShare[]; +export interface ChunkSubmissionStatus { + submission_height?: number | null; +} +export interface DealingStatusResponse { + dealer: Addr; + dealing_index: number; + epoch_id: number; + status: DealingStatus; +} +export interface DealingStatus { + chunk_submission_status: {}; + fully_submitted: boolean; + has_metadata: boolean; +} +export interface DealingMetadataResponse { + dealer: Addr; + dealing_index: number; + epoch_id: number; + metadata?: DealingMetadata | null; +} +export interface DealingMetadata { + dealing_index: number; + submitted_chunks: {}; +} +export interface PagedDealerAddressesResponse { + dealers: Addr[]; start_next_after?: Addr | null; } +export type NullableEpoch = Epoch | null; +export interface RegisteredDealerDetails { + details?: DealerRegistrationDetails | null; +} +export interface DealerRegistrationDetails { + announce_address: string; + bte_public_key_with_proof: string; + ed25519_identity: string; +} +export type Cw4Contract = Addr; +export interface State { + group_addr: Cw4Contract; + key_size: number; + mix_denom: string; + multisig_addr: Addr; +} +export interface VkShareResponse { + epoch_id: number; + owner: Addr; + share?: ContractVKShare | null; +} export interface ContractVKShare { announce_address: string; epoch_id: number; @@ -151,4 +319,9 @@ export interface ContractVKShare { owner: Addr; share: string; verified: boolean; +} +export interface PagedVKSharesResponse { + per_page: number; + shares: ContractVKShare[]; + start_next_after?: Addr | null; } \ No newline at end of file diff --git a/sdk/typescript/codegen/contract-clients/src/Cw3FlexMultisig.client.ts b/sdk/typescript/codegen/contract-clients/src/Cw3FlexMultisig.client.ts index cfe3b9f76f..cae76780ea 100644 --- a/sdk/typescript/codegen/contract-clients/src/Cw3FlexMultisig.client.ts +++ b/sdk/typescript/codegen/contract-clients/src/Cw3FlexMultisig.client.ts @@ -1,13 +1,12 @@ /** -* This file was automatically generated by @cosmwasm/ts-codegen@0.35.3. +* This file was automatically generated by @cosmwasm/ts-codegen@1.13.3. * DO NOT MODIFY IT BY HAND. Instead, modify the source JSONSchema file, * and run the @cosmwasm/ts-codegen generate command to regenerate this file. */ -import { CosmWasmClient, SigningCosmWasmClient, ExecuteResult } from "@cosmjs/cosmwasm-stargate"; -import { StdFee } from "@cosmjs/amino"; -import { Executor, Addr, Duration, Uint128, UncheckedDenom, Threshold, Decimal, InstantiateMsg, UncheckedDepositInfo, ExecuteMsg, Expiration, Timestamp, Uint64, CosmosMsgForEmpty, BankMsg, StakingMsg, DistributionMsg, Binary, IbcMsg, WasmMsg, GovMsg, VoteOption, Vote, Coin, Empty, IbcTimeout, IbcTimeoutBlock, MemberChangedHookMsg, MemberDiff, QueryMsg, MigrateMsg, Cw4Contract, Denom, Config, DepositInfo, Status, ThresholdResponse, ProposalListResponseForEmpty, ProposalResponseForEmpty, VoterListResponse, VoterDetail, VoteListResponse, VoteInfo, VoteResponse, VoterResponse } from "./Cw3FlexMultisig.types"; - +import { ICosmWasmClient, ISigningCosmWasmClient } from "./baseClient"; +import { StdFee } from "@interchainjs/types"; +import { Executor, Addr, Duration, Uint128, UncheckedDenom, Threshold, Decimal, InstantiateMsg, UncheckedDepositInfo, ExecuteMsg, Expiration, Timestamp, Uint64, CosmosMsgForEmpty, BankMsg, WasmMsg, Binary, Vote, Coin, Empty, MemberChangedHookMsg, MemberDiff, QueryMsg, MigrateMsg, Cw4Contract, Denom, Config, DepositInfo, Status, ThresholdResponse, ProposalListResponseForEmpty, ProposalResponseForEmpty, VoterListResponse, VoterDetail, VoteListResponse, VoteInfo, VoteResponse, VoterResponse } from "./Cw3FlexMultisig.types"; export interface Cw3FlexMultisigReadOnlyInterface { contractAddress: string; threshold: () => Promise; @@ -61,10 +60,9 @@ export interface Cw3FlexMultisigReadOnlyInterface { config: () => Promise; } export class Cw3FlexMultisigQueryClient implements Cw3FlexMultisigReadOnlyInterface { - client: CosmWasmClient; + client: ICosmWasmClient; contractAddress: string; - - constructor(client: CosmWasmClient, contractAddress: string) { + constructor(client: ICosmWasmClient, contractAddress: string) { this.client = client; this.contractAddress = contractAddress; this.threshold = this.threshold.bind(this); @@ -77,7 +75,6 @@ export class Cw3FlexMultisigQueryClient implements Cw3FlexMultisigReadOnlyInterf this.listVoters = this.listVoters.bind(this); this.config = this.config.bind(this); } - threshold = async (): Promise => { return this.client.queryContractSmart(this.contractAddress, { threshold: {} @@ -197,36 +194,35 @@ export interface Cw3FlexMultisigInterface extends Cw3FlexMultisigReadOnlyInterfa latest?: Expiration; msgs: CosmosMsgForEmpty[]; title: string; - }, fee?: number | StdFee | "auto", memo?: string, _funds?: Coin[]) => Promise; - // vote: ({ - // proposalId, - // vote - // }: { - // proposalId: number; - // vote: Vote; - // }, fee?: number | StdFee | "auto", memo?: string, _funds?: Coin[]) => Promise; + }, fee_?: number | StdFee | "auto", memo_?: string, funds_?: Coin[]) => Promise; + vote: ({ + proposalId, + vote + }: { + proposalId: number; + vote: Vote; + }, fee_?: number | StdFee | "auto", memo_?: string, funds_?: Coin[]) => Promise; execute: ({ proposalId }: { proposalId: number; - }, fee?: number | StdFee | "auto", memo?: string, _funds?: Coin[]) => Promise; + }, fee_?: number | StdFee | "auto", memo_?: string, funds_?: Coin[]) => Promise; close: ({ proposalId }: { proposalId: number; - }, fee?: number | StdFee | "auto", memo?: string, _funds?: Coin[]) => Promise; + }, fee_?: number | StdFee | "auto", memo_?: string, funds_?: Coin[]) => Promise; memberChangedHook: ({ diffs }: { diffs: MemberDiff[]; - }, fee?: number | StdFee | "auto", memo?: string, _funds?: Coin[]) => Promise; + }, fee_?: number | StdFee | "auto", memo_?: string, funds_?: Coin[]) => Promise; } export class Cw3FlexMultisigClient extends Cw3FlexMultisigQueryClient implements Cw3FlexMultisigInterface { - client: SigningCosmWasmClient; + client: ISigningCosmWasmClient; sender: string; contractAddress: string; - - constructor(client: SigningCosmWasmClient, sender: string, contractAddress: string) { + constructor(client: ISigningCosmWasmClient, sender: string, contractAddress: string) { super(client, contractAddress); this.client = client; this.sender = sender; @@ -237,7 +233,6 @@ export class Cw3FlexMultisigClient extends Cw3FlexMultisigQueryClient implements this.close = this.close.bind(this); this.memberChangedHook = this.memberChangedHook.bind(this); } - propose = async ({ description, latest, @@ -248,7 +243,7 @@ export class Cw3FlexMultisigClient extends Cw3FlexMultisigQueryClient implements latest?: Expiration; msgs: CosmosMsgForEmpty[]; title: string; - }, fee: number | StdFee | "auto" = "auto", memo?: string, _funds?: Coin[]): Promise => { + }, fee_: number | StdFee | "auto" = "auto", memo_?: string, funds_?: Coin[]): Promise => { return await this.client.execute(this.sender, this.contractAddress, { propose: { description, @@ -256,53 +251,53 @@ export class Cw3FlexMultisigClient extends Cw3FlexMultisigQueryClient implements msgs, title } - }, fee, memo, _funds); + }, fee_, memo_, funds_); + }; + vote = async ({ + proposalId, + vote + }: { + proposalId: number; + vote: Vote; + }, fee_: number | StdFee | "auto" = "auto", memo_?: string, funds_?: Coin[]): Promise => { + return await this.client.execute(this.sender, this.contractAddress, { + vote: { + proposal_id: proposalId, + vote + } + }, fee_, memo_, funds_); }; - // vote = async ({ - // proposalId, - // vote - // }: { - // proposalId: number; - // vote: Vote; - // }, fee: number | StdFee | "auto" = "auto", memo?: string, _funds?: Coin[]): Promise => { - // return await this.client.execute(this.sender, this.contractAddress, { - // vote: { - // proposal_id: proposalId, - // vote - // } - // }, fee, memo, _funds); - // }; execute = async ({ proposalId }: { proposalId: number; - }, fee: number | StdFee | "auto" = "auto", memo?: string, _funds?: Coin[]): Promise => { + }, fee_: number | StdFee | "auto" = "auto", memo_?: string, funds_?: Coin[]): Promise => { return await this.client.execute(this.sender, this.contractAddress, { execute: { proposal_id: proposalId } - }, fee, memo, _funds); + }, fee_, memo_, funds_); }; close = async ({ proposalId }: { proposalId: number; - }, fee: number | StdFee | "auto" = "auto", memo?: string, _funds?: Coin[]): Promise => { + }, fee_: number | StdFee | "auto" = "auto", memo_?: string, funds_?: Coin[]): Promise => { return await this.client.execute(this.sender, this.contractAddress, { close: { proposal_id: proposalId } - }, fee, memo, _funds); + }, fee_, memo_, funds_); }; memberChangedHook = async ({ diffs }: { diffs: MemberDiff[]; - }, fee: number | StdFee | "auto" = "auto", memo?: string, _funds?: Coin[]): Promise => { + }, fee_: number | StdFee | "auto" = "auto", memo_?: string, funds_?: Coin[]): Promise => { return await this.client.execute(this.sender, this.contractAddress, { member_changed_hook: { diffs } - }, fee, memo, _funds); + }, fee_, memo_, funds_); }; -} +} \ No newline at end of file diff --git a/sdk/typescript/codegen/contract-clients/src/Cw3FlexMultisig.types.ts b/sdk/typescript/codegen/contract-clients/src/Cw3FlexMultisig.types.ts index 570e09b83d..d5fd3376cf 100644 --- a/sdk/typescript/codegen/contract-clients/src/Cw3FlexMultisig.types.ts +++ b/sdk/typescript/codegen/contract-clients/src/Cw3FlexMultisig.types.ts @@ -1,5 +1,5 @@ /** -* This file was automatically generated by @cosmwasm/ts-codegen@0.35.3. +* This file was automatically generated by @cosmwasm/ts-codegen@1.13.3. * DO NOT MODIFY IT BY HAND. Instead, modify the source JSONSchema file, * and run the @cosmwasm/ts-codegen generate command to regenerate this file. */ @@ -84,86 +84,17 @@ export type CosmosMsgForEmpty = { bank: BankMsg; } | { custom: Empty; -} | { - staking: StakingMsg; -} | { - distribution: DistributionMsg; -} | { - stargate: { - type_url: string; - value: Binary; - [k: string]: unknown; - }; -} | { - ibc: IbcMsg; } | { wasm: WasmMsg; -} | { - gov: GovMsg; }; export type BankMsg = { send: { amount: Coin[]; to_address: string; - [k: string]: unknown; }; } | { burn: { amount: Coin[]; - [k: string]: unknown; - }; -}; -export type StakingMsg = { - delegate: { - amount: Coin; - validator: string; - [k: string]: unknown; - }; -} | { - undelegate: { - amount: Coin; - validator: string; - [k: string]: unknown; - }; -} | { - redelegate: { - amount: Coin; - dst_validator: string; - src_validator: string; - [k: string]: unknown; - }; -}; -export type DistributionMsg = { - set_withdraw_address: { - address: string; - [k: string]: unknown; - }; -} | { - withdraw_delegator_reward: { - validator: string; - [k: string]: unknown; - }; -}; -export type Binary = string; -export type IbcMsg = { - transfer: { - amount: Coin; - channel_id: string; - timeout: IbcTimeout; - to_address: string; - [k: string]: unknown; - }; -} | { - send_packet: { - channel_id: string; - data: Binary; - timeout: IbcTimeout; - [k: string]: unknown; - }; -} | { - close_channel: { - channel_id: string; - [k: string]: unknown; }; }; export type WasmMsg = { @@ -171,7 +102,6 @@ export type WasmMsg = { contract_addr: string; funds: Coin[]; msg: Binary; - [k: string]: unknown; }; } | { instantiate: { @@ -180,54 +110,30 @@ export type WasmMsg = { funds: Coin[]; label: string; msg: Binary; - [k: string]: unknown; }; } | { migrate: { contract_addr: string; msg: Binary; new_code_id: number; - [k: string]: unknown; }; } | { update_admin: { admin: string; contract_addr: string; - [k: string]: unknown; }; } | { clear_admin: { contract_addr: string; - [k: string]: unknown; }; }; -export type GovMsg = { - vote: { - proposal_id: number; - vote: VoteOption; - [k: string]: unknown; - }; -}; -export type VoteOption = "yes" | "no" | "abstain" | "no_with_veto"; +export type Binary = string; export type Vote = "yes" | "no" | "abstain" | "veto"; export interface Coin { amount: Uint128; denom: string; - [k: string]: unknown; -} -export interface Empty { - [k: string]: unknown; -} -export interface IbcTimeout { - block?: IbcTimeoutBlock | null; - timestamp?: Timestamp | null; - [k: string]: unknown; -} -export interface IbcTimeoutBlock { - height: number; - revision: number; - [k: string]: unknown; } +export interface Empty {} export interface MemberChangedHookMsg { diffs: MemberDiff[]; } diff --git a/sdk/typescript/codegen/contract-clients/src/Cw4Group.client.ts b/sdk/typescript/codegen/contract-clients/src/Cw4Group.client.ts index 42482b9aba..2e1bfb2c01 100644 --- a/sdk/typescript/codegen/contract-clients/src/Cw4Group.client.ts +++ b/sdk/typescript/codegen/contract-clients/src/Cw4Group.client.ts @@ -1,13 +1,12 @@ /** -* This file was automatically generated by @cosmwasm/ts-codegen@0.35.3. +* This file was automatically generated by @cosmwasm/ts-codegen@1.13.3. * DO NOT MODIFY IT BY HAND. Instead, modify the source JSONSchema file, * and run the @cosmwasm/ts-codegen generate command to regenerate this file. */ -import { CosmWasmClient, SigningCosmWasmClient, ExecuteResult } from "@cosmjs/cosmwasm-stargate"; -import { Coin, StdFee } from "@cosmjs/amino"; +import { ICosmWasmClient, ISigningCosmWasmClient } from "./baseClient"; +import { Coin, StdFee } from "@interchainjs/types"; import { InstantiateMsg, Member, ExecuteMsg, QueryMsg, MigrateMsg, AdminResponse, HooksResponse, MemberListResponse, MemberResponse, TotalWeightResponse } from "./Cw4Group.types"; - export interface Cw4GroupReadOnlyInterface { contractAddress: string; admin: () => Promise; @@ -33,10 +32,9 @@ export interface Cw4GroupReadOnlyInterface { hooks: () => Promise; } export class Cw4GroupQueryClient implements Cw4GroupReadOnlyInterface { - client: CosmWasmClient; + client: ICosmWasmClient; contractAddress: string; - - constructor(client: CosmWasmClient, contractAddress: string) { + constructor(client: ICosmWasmClient, contractAddress: string) { this.client = client; this.contractAddress = contractAddress; this.admin = this.admin.bind(this); @@ -45,7 +43,6 @@ export class Cw4GroupQueryClient implements Cw4GroupReadOnlyInterface { this.member = this.member.bind(this); this.hooks = this.hooks.bind(this); } - admin = async (): Promise => { return this.client.queryContractSmart(this.contractAddress, { admin: {} @@ -103,31 +100,30 @@ export interface Cw4GroupInterface extends Cw4GroupReadOnlyInterface { admin }: { admin?: string; - }, fee?: number | StdFee | "auto", memo?: string, _funds?: Coin[]) => Promise; + }, fee_?: number | StdFee | "auto", memo_?: string, funds_?: Coin[]) => Promise; updateMembers: ({ add, remove }: { add: Member[]; remove: string[]; - }, fee?: number | StdFee | "auto", memo?: string, _funds?: Coin[]) => Promise; + }, fee_?: number | StdFee | "auto", memo_?: string, funds_?: Coin[]) => Promise; addHook: ({ addr }: { addr: string; - }, fee?: number | StdFee | "auto", memo?: string, _funds?: Coin[]) => Promise; + }, fee_?: number | StdFee | "auto", memo_?: string, funds_?: Coin[]) => Promise; removeHook: ({ addr }: { addr: string; - }, fee?: number | StdFee | "auto", memo?: string, _funds?: Coin[]) => Promise; + }, fee_?: number | StdFee | "auto", memo_?: string, funds_?: Coin[]) => Promise; } export class Cw4GroupClient extends Cw4GroupQueryClient implements Cw4GroupInterface { - client: SigningCosmWasmClient; + client: ISigningCosmWasmClient; sender: string; contractAddress: string; - - constructor(client: SigningCosmWasmClient, sender: string, contractAddress: string) { + constructor(client: ISigningCosmWasmClient, sender: string, contractAddress: string) { super(client, contractAddress); this.client = client; this.sender = sender; @@ -137,17 +133,16 @@ export class Cw4GroupClient extends Cw4GroupQueryClient implements Cw4GroupInter this.addHook = this.addHook.bind(this); this.removeHook = this.removeHook.bind(this); } - updateAdmin = async ({ admin }: { admin?: string; - }, fee: number | StdFee | "auto" = "auto", memo?: string, _funds?: Coin[]): Promise => { + }, fee_: number | StdFee | "auto" = "auto", memo_?: string, funds_?: Coin[]): Promise => { return await this.client.execute(this.sender, this.contractAddress, { update_admin: { admin } - }, fee, memo, _funds); + }, fee_, memo_, funds_); }; updateMembers = async ({ add, @@ -155,34 +150,34 @@ export class Cw4GroupClient extends Cw4GroupQueryClient implements Cw4GroupInter }: { add: Member[]; remove: string[]; - }, fee: number | StdFee | "auto" = "auto", memo?: string, _funds?: Coin[]): Promise => { + }, fee_: number | StdFee | "auto" = "auto", memo_?: string, funds_?: Coin[]): Promise => { return await this.client.execute(this.sender, this.contractAddress, { update_members: { add, remove } - }, fee, memo, _funds); + }, fee_, memo_, funds_); }; addHook = async ({ addr }: { addr: string; - }, fee: number | StdFee | "auto" = "auto", memo?: string, _funds?: Coin[]): Promise => { + }, fee_: number | StdFee | "auto" = "auto", memo_?: string, funds_?: Coin[]): Promise => { return await this.client.execute(this.sender, this.contractAddress, { add_hook: { addr } - }, fee, memo, _funds); + }, fee_, memo_, funds_); }; removeHook = async ({ addr }: { addr: string; - }, fee: number | StdFee | "auto" = "auto", memo?: string, _funds?: Coin[]): Promise => { + }, fee_: number | StdFee | "auto" = "auto", memo_?: string, funds_?: Coin[]): Promise => { return await this.client.execute(this.sender, this.contractAddress, { remove_hook: { addr } - }, fee, memo, _funds); + }, fee_, memo_, funds_); }; -} +} \ No newline at end of file diff --git a/sdk/typescript/codegen/contract-clients/src/Cw4Group.types.ts b/sdk/typescript/codegen/contract-clients/src/Cw4Group.types.ts index 6fe03352a2..836a46846c 100644 --- a/sdk/typescript/codegen/contract-clients/src/Cw4Group.types.ts +++ b/sdk/typescript/codegen/contract-clients/src/Cw4Group.types.ts @@ -1,5 +1,5 @@ /** -* This file was automatically generated by @cosmwasm/ts-codegen@0.35.3. +* This file was automatically generated by @cosmwasm/ts-codegen@1.13.3. * DO NOT MODIFY IT BY HAND. Instead, modify the source JSONSchema file, * and run the @cosmwasm/ts-codegen generate command to regenerate this file. */ diff --git a/sdk/typescript/codegen/contract-clients/src/Ecash.client.ts b/sdk/typescript/codegen/contract-clients/src/Ecash.client.ts new file mode 100644 index 0000000000..e2dd496d3b --- /dev/null +++ b/sdk/typescript/codegen/contract-clients/src/Ecash.client.ts @@ -0,0 +1,256 @@ +/** +* This file was automatically generated by @cosmwasm/ts-codegen@1.13.3. +* DO NOT MODIFY IT BY HAND. Instead, modify the source JSONSchema file, +* and run the @cosmwasm/ts-codegen generate command to regenerate this file. +*/ + +import { ICosmWasmClient, ISigningCosmWasmClient } from "./baseClient"; +import { StdFee } from "@interchainjs/types"; +import { Uint128, InstantiateMsg, Coin, ExecuteMsg, QueryMsg, MigrateMsg, PagedBlacklistedAccountResponse, BlacklistedAccount, Blacklisting, BlacklistedAccountResponse, DepositResponse, Deposit, PagedDepositsResponse, DepositData, LatestDepositResponse } from "./Ecash.types"; +export interface EcashReadOnlyInterface { + contractAddress: string; + getBlacklistedAccount: ({ + publicKey + }: { + publicKey: string; + }) => Promise; + getBlacklistPaged: ({ + limit, + startAfter + }: { + limit?: number; + startAfter?: string; + }) => Promise; + getRequiredDepositAmount: () => Promise; + getDeposit: ({ + depositId + }: { + depositId: number; + }) => Promise; + getLatestDeposit: () => Promise; + getDepositsPaged: ({ + limit, + startAfter + }: { + limit?: number; + startAfter?: number; + }) => Promise; +} +export class EcashQueryClient implements EcashReadOnlyInterface { + client: ICosmWasmClient; + contractAddress: string; + constructor(client: ICosmWasmClient, contractAddress: string) { + this.client = client; + this.contractAddress = contractAddress; + this.getBlacklistedAccount = this.getBlacklistedAccount.bind(this); + this.getBlacklistPaged = this.getBlacklistPaged.bind(this); + this.getRequiredDepositAmount = this.getRequiredDepositAmount.bind(this); + this.getDeposit = this.getDeposit.bind(this); + this.getLatestDeposit = this.getLatestDeposit.bind(this); + this.getDepositsPaged = this.getDepositsPaged.bind(this); + } + getBlacklistedAccount = async ({ + publicKey + }: { + publicKey: string; + }): Promise => { + return this.client.queryContractSmart(this.contractAddress, { + get_blacklisted_account: { + public_key: publicKey + } + }); + }; + getBlacklistPaged = async ({ + limit, + startAfter + }: { + limit?: number; + startAfter?: string; + }): Promise => { + return this.client.queryContractSmart(this.contractAddress, { + get_blacklist_paged: { + limit, + start_after: startAfter + } + }); + }; + getRequiredDepositAmount = async (): Promise => { + return this.client.queryContractSmart(this.contractAddress, { + get_required_deposit_amount: {} + }); + }; + getDeposit = async ({ + depositId + }: { + depositId: number; + }): Promise => { + return this.client.queryContractSmart(this.contractAddress, { + get_deposit: { + deposit_id: depositId + } + }); + }; + getLatestDeposit = async (): Promise => { + return this.client.queryContractSmart(this.contractAddress, { + get_latest_deposit: {} + }); + }; + getDepositsPaged = async ({ + limit, + startAfter + }: { + limit?: number; + startAfter?: number; + }): Promise => { + return this.client.queryContractSmart(this.contractAddress, { + get_deposits_paged: { + limit, + start_after: startAfter + } + }); + }; +} +export interface EcashInterface extends EcashReadOnlyInterface { + contractAddress: string; + sender: string; + depositTicketBookFunds: ({ + identityKey + }: { + identityKey: string; + }, fee_?: number | StdFee | "auto", memo_?: string, funds_?: Coin[]) => Promise; + requestRedemption: ({ + commitmentBs58, + numberOfTickets + }: { + commitmentBs58: string; + numberOfTickets: number; + }, fee_?: number | StdFee | "auto", memo_?: string, funds_?: Coin[]) => Promise; + redeemTickets: ({ + gw, + n + }: { + gw: string; + n: number; + }, fee_?: number | StdFee | "auto", memo_?: string, funds_?: Coin[]) => Promise; + updateAdmin: ({ + admin + }: { + admin: string; + }, fee_?: number | StdFee | "auto", memo_?: string, funds_?: Coin[]) => Promise; + updateDepositValue: ({ + newDeposit + }: { + newDeposit: Coin; + }, fee_?: number | StdFee | "auto", memo_?: string, funds_?: Coin[]) => Promise; + proposeToBlacklist: ({ + publicKey + }: { + publicKey: string; + }, fee_?: number | StdFee | "auto", memo_?: string, funds_?: Coin[]) => Promise; + addToBlacklist: ({ + publicKey + }: { + publicKey: string; + }, fee_?: number | StdFee | "auto", memo_?: string, funds_?: Coin[]) => Promise; +} +export class EcashClient extends EcashQueryClient implements EcashInterface { + client: ISigningCosmWasmClient; + sender: string; + contractAddress: string; + constructor(client: ISigningCosmWasmClient, sender: string, contractAddress: string) { + super(client, contractAddress); + this.client = client; + this.sender = sender; + this.contractAddress = contractAddress; + this.depositTicketBookFunds = this.depositTicketBookFunds.bind(this); + this.requestRedemption = this.requestRedemption.bind(this); + this.redeemTickets = this.redeemTickets.bind(this); + this.updateAdmin = this.updateAdmin.bind(this); + this.updateDepositValue = this.updateDepositValue.bind(this); + this.proposeToBlacklist = this.proposeToBlacklist.bind(this); + this.addToBlacklist = this.addToBlacklist.bind(this); + } + depositTicketBookFunds = async ({ + identityKey + }: { + identityKey: string; + }, fee_: number | StdFee | "auto" = "auto", memo_?: string, funds_?: Coin[]): Promise => { + return await this.client.execute(this.sender, this.contractAddress, { + deposit_ticket_book_funds: { + identity_key: identityKey + } + }, fee_, memo_, funds_); + }; + requestRedemption = async ({ + commitmentBs58, + numberOfTickets + }: { + commitmentBs58: string; + numberOfTickets: number; + }, fee_: number | StdFee | "auto" = "auto", memo_?: string, funds_?: Coin[]): Promise => { + return await this.client.execute(this.sender, this.contractAddress, { + request_redemption: { + commitment_bs58: commitmentBs58, + number_of_tickets: numberOfTickets + } + }, fee_, memo_, funds_); + }; + redeemTickets = async ({ + gw, + n + }: { + gw: string; + n: number; + }, fee_: number | StdFee | "auto" = "auto", memo_?: string, funds_?: Coin[]): Promise => { + return await this.client.execute(this.sender, this.contractAddress, { + redeem_tickets: { + gw, + n + } + }, fee_, memo_, funds_); + }; + updateAdmin = async ({ + admin + }: { + admin: string; + }, fee_: number | StdFee | "auto" = "auto", memo_?: string, funds_?: Coin[]): Promise => { + return await this.client.execute(this.sender, this.contractAddress, { + update_admin: { + admin + } + }, fee_, memo_, funds_); + }; + updateDepositValue = async ({ + newDeposit + }: { + newDeposit: Coin; + }, fee_: number | StdFee | "auto" = "auto", memo_?: string, funds_?: Coin[]): Promise => { + return await this.client.execute(this.sender, this.contractAddress, { + update_deposit_value: { + new_deposit: newDeposit + } + }, fee_, memo_, funds_); + }; + proposeToBlacklist = async ({ + publicKey + }: { + publicKey: string; + }, fee_: number | StdFee | "auto" = "auto", memo_?: string, funds_?: Coin[]): Promise => { + return await this.client.execute(this.sender, this.contractAddress, { + propose_to_blacklist: { + public_key: publicKey + } + }, fee_, memo_, funds_); + }; + addToBlacklist = async ({ + publicKey + }: { + publicKey: string; + }, fee_: number | StdFee | "auto" = "auto", memo_?: string, funds_?: Coin[]): Promise => { + return await this.client.execute(this.sender, this.contractAddress, { + add_to_blacklist: { + public_key: publicKey + } + }, fee_, memo_, funds_); + }; +} \ No newline at end of file diff --git a/sdk/typescript/codegen/contract-clients/src/Ecash.types.ts b/sdk/typescript/codegen/contract-clients/src/Ecash.types.ts new file mode 100644 index 0000000000..e7deb4ee28 --- /dev/null +++ b/sdk/typescript/codegen/contract-clients/src/Ecash.types.ts @@ -0,0 +1,106 @@ +/** +* This file was automatically generated by @cosmwasm/ts-codegen@1.13.3. +* DO NOT MODIFY IT BY HAND. Instead, modify the source JSONSchema file, +* and run the @cosmwasm/ts-codegen generate command to regenerate this file. +*/ + +export type Uint128 = string; +export interface InstantiateMsg { + deposit_amount: Coin; + group_addr: string; + holding_account: string; + multisig_addr: string; +} +export interface Coin { + amount: Uint128; + denom: string; +} +export type ExecuteMsg = { + deposit_ticket_book_funds: { + identity_key: string; + }; +} | { + request_redemption: { + commitment_bs58: string; + number_of_tickets: number; + }; +} | { + redeem_tickets: { + gw: string; + n: number; + }; +} | { + update_admin: { + admin: string; + }; +} | { + update_deposit_value: { + new_deposit: Coin; + }; +} | { + propose_to_blacklist: { + public_key: string; + }; +} | { + add_to_blacklist: { + public_key: string; + }; +}; +export type QueryMsg = { + get_blacklisted_account: { + public_key: string; + }; +} | { + get_blacklist_paged: { + limit?: number | null; + start_after?: string | null; + }; +} | { + get_required_deposit_amount: {}; +} | { + get_deposit: { + deposit_id: number; + }; +} | { + get_latest_deposit: {}; +} | { + get_deposits_paged: { + limit?: number | null; + start_after?: number | null; + }; +}; +export interface MigrateMsg {} +export interface PagedBlacklistedAccountResponse { + accounts: BlacklistedAccount[]; + per_page: number; + start_next_after?: string | null; +} +export interface BlacklistedAccount { + info: Blacklisting; + public_key: string; +} +export interface Blacklisting { + finalized_at_height?: number | null; + proposal_id: number; +} +export interface BlacklistedAccountResponse { + account?: Blacklisting | null; +} +export interface DepositResponse { + deposit?: Deposit | null; + id: number; +} +export interface Deposit { + bs58_encoded_ed25519_pubkey: string; +} +export interface PagedDepositsResponse { + deposits: DepositData[]; + start_next_after?: number | null; +} +export interface DepositData { + deposit: Deposit; + id: number; +} +export interface LatestDepositResponse { + deposit?: DepositData | null; +} \ No newline at end of file diff --git a/sdk/typescript/codegen/contract-clients/src/Mixnet.client.ts b/sdk/typescript/codegen/contract-clients/src/Mixnet.client.ts index c775e31a3d..7d068a8a71 100644 --- a/sdk/typescript/codegen/contract-clients/src/Mixnet.client.ts +++ b/sdk/typescript/codegen/contract-clients/src/Mixnet.client.ts @@ -1,64 +1,31 @@ /** -* This file was automatically generated by @cosmwasm/ts-codegen@0.35.3. +* This file was automatically generated by @cosmwasm/ts-codegen@1.13.3. * DO NOT MODIFY IT BY HAND. Instead, modify the source JSONSchema file, * and run the @cosmwasm/ts-codegen generate command to regenerate this file. */ -import { CosmWasmClient, SigningCosmWasmClient, ExecuteResult } from "@cosmjs/cosmwasm-stargate"; -import { StdFee } from "@cosmjs/amino"; -import { Decimal, Percent, InstantiateMsg, Duration, InitialRewardingParams, ExecuteMsg, Layer, FamilyHead, MessageSignature, Uint128, ContractStateParams, Coin, IntervalRewardingParamsUpdate, LayerAssignment, MixNodeCostParams, MixNode, MixNodeConfigUpdate, Gateway, GatewayConfigUpdate, QueryMsg, MigrateMsg, Addr, PagedAllDelegationsResponse, Delegation, PagedFamiliesResponse, Family, PagedMembersResponse, MixnodeDetailsByIdentityResponse, MixNodeDetails, MixNodeBond, PendingMixNodeChanges, MixNodeRewarding, ContractVersion, ContractBuildInformation, CurrentIntervalResponse, Interval, MixNodeDelegationResponse, PagedDelegatorDelegationsResponse, EpochState, EpochStatus, EstimatedCurrentEpochRewardResponse, FamilyByHeadResponse, FamilyByLabelResponse, FamilyMembersByHeadResponse, FamilyMembersByLabelResponse, GatewayBondResponse, GatewayBond, PagedGatewayResponse, LayerDistribution, PagedMixnodeBondsResponse, PagedMixnodesDetailsResponse, PagedMixNodeDelegationsResponse, MixnodeDetailsResponse, MixnodeRewardingDetailsResponse, NumberOfPendingEventsResponse, GatewayOwnershipResponse, MixOwnershipResponse, PendingRewardResponse, PendingEpochEventKind, PendingEpochEventResponse, PendingEpochEventData, PendingEpochEventsResponse, PendingEpochEvent, PendingIntervalEventKind, PendingIntervalEventResponse, PendingIntervalEventData, PendingIntervalEventsResponse, PendingIntervalEvent, RewardedSetNodeStatus, PagedRewardedSetResponse, RewardingParams, IntervalRewardParams, String, Uint32, StakeSaturationResponse, ContractState, UnbondedMixnodeResponse, UnbondedMixnode, PagedUnbondedMixnodesResponse } from "./Mixnet.types"; -import { GetCw2ContractVersionResponse } from './types'; +import { ICosmWasmClient, ISigningCosmWasmClient } from "./baseClient"; +import { StdFee } from "@interchainjs/types"; +import { Decimal, Percent, Uint128, InstantiateMsg, Duration, InitialRewardingParams, RewardedSetParams, RangedValueForUint128, RangedValueForPercent, VersionScoreFormulaParams, OutdatedVersionWeights, ExecuteMsg, Role, MessageSignature, ContractStateParamsUpdate, ConfigScoreParamsUpdate, DelegationsParams, Coin, OperatorsParamsUpdate, ActiveSetUpdate, IntervalRewardingParamsUpdate, RoleAssignment, NodeCostParams, MixNode, MixNodeConfigUpdate, Gateway, GatewayConfigUpdate, NymNode, NodeConfigUpdate, NodeRewardingParameters, QueryMsg, MigrateMsg, AdminResponse, Addr, PagedAllDelegationsResponse, Delegation, MixnodeDetailsByIdentityResponse, MixNodeDetails, MixNodeBond, PendingMixNodeChanges, NodeRewarding, ContractVersion, ContractBuildInformation, CurrentIntervalResponse, Interval, CurrentNymNodeVersionResponse, HistoricalNymNodeVersionEntry, HistoricalNymNodeVersion, TotalVersionDifference, NodeDelegationResponse, PagedDelegatorDelegationsResponse, EpochState, EpochStatus, EstimatedCurrentEpochRewardResponse, GatewayBondResponse, GatewayBond, PagedGatewayResponse, KeyRotationIdResponse, KeyRotationState, PagedMixnodeBondsResponse, PagedMixnodesDetailsResponse, MixnodeDetailsResponse, MixnodeRewardingDetailsResponse, PagedNodeDelegationsResponse, NodeRewardingDetailsResponse, StakeSaturationResponse, NumberOfPendingEventsResponse, PagedNymNodeBondsResponse, NymNodeBond, NodeDetailsResponse, NymNodeDetails, PendingNodeChanges, NodeDetailsByIdentityResponse, NymNodeVersionHistoryResponse, PagedNymNodeDetailsResponse, GatewayOwnershipResponse, MixOwnershipResponse, NodeOwnershipResponse, PendingRewardResponse, PendingEpochEventKind, PendingEpochEventResponse, PendingEpochEventData, PendingEpochEventsResponse, PendingEpochEvent, PendingIntervalEventKind, PendingIntervalEventResponse, PendingIntervalEventData, PendingIntervalEventsResponse, PendingIntervalEvent, PreassignedGatewayIdsResponse, PreassignedId, RolesMetadataResponse, RewardedSetMetadata, RoleMetadata, RewardingParams, IntervalRewardParams, String, EpochAssignmentResponse, Uint32, MixStakeSaturationResponse, ContractState, ContractStateParams, ConfigScoreParams, OperatorsParams, UnbondedMixnodeResponse, UnbondedMixnode, PagedUnbondedMixnodesResponse, UnbondedNodeResponse, UnbondedNymNode, PagedUnbondedNymNodesResponse } from "./Mixnet.types"; export interface MixnetReadOnlyInterface { contractAddress: string; - getAllFamiliesPaged: ({ - limit, - startAfter - }: { - limit?: number; - startAfter?: string; - }) => Promise; - getAllMembersPaged: ({ - limit, - startAfter - }: { - limit?: number; - startAfter?: string; - }) => Promise; - getFamilyByHead: ({ - head - }: { - head: string; - }) => Promise; - getFamilyByLabel: ({ - label - }: { - label: string; - }) => Promise; - getFamilyMembersByHead: ({ - head - }: { - head: string; - }) => Promise; - getFamilyMembersByLabel: ({ - label - }: { - label: string; - }) => Promise; + admin: () => Promise; getContractVersion: () => Promise; getCw2ContractVersion: () => Promise; getRewardingValidatorAddress: () => Promise; getStateParams: () => Promise; getState: () => Promise; - getRewardingParams: () => Promise; - getEpochStatus: () => Promise; - getCurrentIntervalDetails: () => Promise; - getRewardedSet: ({ + getCurrentNymNodeVersion: () => Promise; + getNymNodeVersionHistory: ({ limit, startAfter }: { limit?: number; startAfter?: number; - }) => Promise; + }) => Promise; + getRewardingParams: () => Promise; + getEpochStatus: () => Promise; + getCurrentIntervalDetails: () => Promise; getMixNodeBonds: ({ limit, startAfter @@ -117,7 +84,7 @@ export interface MixnetReadOnlyInterface { mixId }: { mixId: number; - }) => Promise; + }) => Promise; getUnbondedMixNodeInformation: ({ mixId }: { @@ -128,7 +95,6 @@ export interface MixnetReadOnlyInterface { }: { mixIdentity: string; }) => Promise; - getLayerDistribution: () => Promise; getGateways: ({ limit, startAfter @@ -146,15 +112,97 @@ export interface MixnetReadOnlyInterface { }: { address: string; }) => Promise; - getMixnodeDelegations: ({ + getPreassignedGatewayIds: ({ limit, - mixId, startAfter }: { limit?: number; - mixId: number; startAfter?: string; - }) => Promise; + }) => Promise; + getNymNodeBondsPaged: ({ + limit, + startAfter + }: { + limit?: number; + startAfter?: number; + }) => Promise; + getNymNodesDetailedPaged: ({ + limit, + startAfter + }: { + limit?: number; + startAfter?: number; + }) => Promise; + getUnbondedNymNode: ({ + nodeId + }: { + nodeId: number; + }) => Promise; + getUnbondedNymNodesPaged: ({ + limit, + startAfter + }: { + limit?: number; + startAfter?: number; + }) => Promise; + getUnbondedNymNodesByOwnerPaged: ({ + limit, + owner, + startAfter + }: { + limit?: number; + owner: string; + startAfter?: number; + }) => Promise; + getUnbondedNymNodesByIdentityKeyPaged: ({ + identityKey, + limit, + startAfter + }: { + identityKey: string; + limit?: number; + startAfter?: number; + }) => Promise; + getOwnedNymNode: ({ + address + }: { + address: string; + }) => Promise; + getNymNodeDetails: ({ + nodeId + }: { + nodeId: number; + }) => Promise; + getNymNodeDetailsByIdentityKey: ({ + nodeIdentity + }: { + nodeIdentity: string; + }) => Promise; + getNodeRewardingDetails: ({ + nodeId + }: { + nodeId: number; + }) => Promise; + getNodeStakeSaturation: ({ + nodeId + }: { + nodeId: number; + }) => Promise; + getRoleAssignment: ({ + role + }: { + role: Role; + }) => Promise; + getRewardedSetMetadata: () => Promise; + getNodeDelegations: ({ + limit, + nodeId, + startAfter + }: { + limit?: number; + nodeId: number; + startAfter?: string; + }) => Promise; getDelegatorDelegations: ({ delegator, limit, @@ -166,13 +214,13 @@ export interface MixnetReadOnlyInterface { }) => Promise; getDelegationDetails: ({ delegator, - mixId, + nodeId, proxy }: { delegator: string; - mixId: number; + nodeId: number; proxy?: string; - }) => Promise; + }) => Promise; getAllDelegations: ({ limit, startAfter @@ -185,37 +233,39 @@ export interface MixnetReadOnlyInterface { }: { address: string; }) => Promise; - getPendingMixNodeOperatorReward: ({ - mixId + getPendingNodeOperatorReward: ({ + nodeId }: { - mixId: number; + nodeId: number; }) => Promise; getPendingDelegatorReward: ({ address, - mixId, + nodeId, proxy }: { address: string; - mixId: number; + nodeId: number; proxy?: string; }) => Promise; getEstimatedCurrentEpochOperatorReward: ({ estimatedPerformance, - mixId + estimatedWork, + nodeId }: { estimatedPerformance: Percent; - mixId: number; + estimatedWork?: Decimal; + nodeId: number; }) => Promise; getEstimatedCurrentEpochDelegatorReward: ({ address, estimatedPerformance, - mixId, - proxy + estimatedWork, + nodeId }: { address: string; estimatedPerformance: Percent; - mixId: number; - proxy?: string; + estimatedWork?: Decimal; + nodeId: number; }) => Promise; getPendingEpochEvents: ({ limit, @@ -247,29 +297,26 @@ export interface MixnetReadOnlyInterface { }: { address: string; }) => Promise; + getKeyRotationState: () => Promise; + getKeyRotationId: () => Promise; } export class MixnetQueryClient implements MixnetReadOnlyInterface { - client: CosmWasmClient; + client: ICosmWasmClient; contractAddress: string; - - constructor(client: CosmWasmClient, contractAddress: string) { + constructor(client: ICosmWasmClient, contractAddress: string) { this.client = client; this.contractAddress = contractAddress; - this.getAllFamiliesPaged = this.getAllFamiliesPaged.bind(this); - this.getAllMembersPaged = this.getAllMembersPaged.bind(this); - this.getFamilyByHead = this.getFamilyByHead.bind(this); - this.getFamilyByLabel = this.getFamilyByLabel.bind(this); - this.getFamilyMembersByHead = this.getFamilyMembersByHead.bind(this); - this.getFamilyMembersByLabel = this.getFamilyMembersByLabel.bind(this); + this.admin = this.admin.bind(this); this.getContractVersion = this.getContractVersion.bind(this); this.getCw2ContractVersion = this.getCw2ContractVersion.bind(this); this.getRewardingValidatorAddress = this.getRewardingValidatorAddress.bind(this); this.getStateParams = this.getStateParams.bind(this); this.getState = this.getState.bind(this); + this.getCurrentNymNodeVersion = this.getCurrentNymNodeVersion.bind(this); + this.getNymNodeVersionHistory = this.getNymNodeVersionHistory.bind(this); this.getRewardingParams = this.getRewardingParams.bind(this); this.getEpochStatus = this.getEpochStatus.bind(this); this.getCurrentIntervalDetails = this.getCurrentIntervalDetails.bind(this); - this.getRewardedSet = this.getRewardedSet.bind(this); this.getMixNodeBonds = this.getMixNodeBonds.bind(this); this.getMixNodesDetailed = this.getMixNodesDetailed.bind(this); this.getUnbondedMixNodes = this.getUnbondedMixNodes.bind(this); @@ -281,16 +328,29 @@ export class MixnetQueryClient implements MixnetReadOnlyInterface { this.getStakeSaturation = this.getStakeSaturation.bind(this); this.getUnbondedMixNodeInformation = this.getUnbondedMixNodeInformation.bind(this); this.getBondedMixnodeDetailsByIdentity = this.getBondedMixnodeDetailsByIdentity.bind(this); - this.getLayerDistribution = this.getLayerDistribution.bind(this); this.getGateways = this.getGateways.bind(this); this.getGatewayBond = this.getGatewayBond.bind(this); this.getOwnedGateway = this.getOwnedGateway.bind(this); - this.getMixnodeDelegations = this.getMixnodeDelegations.bind(this); + this.getPreassignedGatewayIds = this.getPreassignedGatewayIds.bind(this); + this.getNymNodeBondsPaged = this.getNymNodeBondsPaged.bind(this); + this.getNymNodesDetailedPaged = this.getNymNodesDetailedPaged.bind(this); + this.getUnbondedNymNode = this.getUnbondedNymNode.bind(this); + this.getUnbondedNymNodesPaged = this.getUnbondedNymNodesPaged.bind(this); + this.getUnbondedNymNodesByOwnerPaged = this.getUnbondedNymNodesByOwnerPaged.bind(this); + this.getUnbondedNymNodesByIdentityKeyPaged = this.getUnbondedNymNodesByIdentityKeyPaged.bind(this); + this.getOwnedNymNode = this.getOwnedNymNode.bind(this); + this.getNymNodeDetails = this.getNymNodeDetails.bind(this); + this.getNymNodeDetailsByIdentityKey = this.getNymNodeDetailsByIdentityKey.bind(this); + this.getNodeRewardingDetails = this.getNodeRewardingDetails.bind(this); + this.getNodeStakeSaturation = this.getNodeStakeSaturation.bind(this); + this.getRoleAssignment = this.getRoleAssignment.bind(this); + this.getRewardedSetMetadata = this.getRewardedSetMetadata.bind(this); + this.getNodeDelegations = this.getNodeDelegations.bind(this); this.getDelegatorDelegations = this.getDelegatorDelegations.bind(this); this.getDelegationDetails = this.getDelegationDetails.bind(this); this.getAllDelegations = this.getAllDelegations.bind(this); this.getPendingOperatorReward = this.getPendingOperatorReward.bind(this); - this.getPendingMixNodeOperatorReward = this.getPendingMixNodeOperatorReward.bind(this); + this.getPendingNodeOperatorReward = this.getPendingNodeOperatorReward.bind(this); this.getPendingDelegatorReward = this.getPendingDelegatorReward.bind(this); this.getEstimatedCurrentEpochOperatorReward = this.getEstimatedCurrentEpochOperatorReward.bind(this); this.getEstimatedCurrentEpochDelegatorReward = this.getEstimatedCurrentEpochDelegatorReward.bind(this); @@ -300,78 +360,12 @@ export class MixnetQueryClient implements MixnetReadOnlyInterface { this.getPendingIntervalEvent = this.getPendingIntervalEvent.bind(this); this.getNumberOfPendingEvents = this.getNumberOfPendingEvents.bind(this); this.getSigningNonce = this.getSigningNonce.bind(this); + this.getKeyRotationState = this.getKeyRotationState.bind(this); + this.getKeyRotationId = this.getKeyRotationId.bind(this); } - - getAllFamiliesPaged = async ({ - limit, - startAfter - }: { - limit?: number; - startAfter?: string; - }): Promise => { + admin = async (): Promise => { return this.client.queryContractSmart(this.contractAddress, { - get_all_families_paged: { - limit, - start_after: startAfter - } - }); - }; - getAllMembersPaged = async ({ - limit, - startAfter - }: { - limit?: number; - startAfter?: string; - }): Promise => { - return this.client.queryContractSmart(this.contractAddress, { - get_all_members_paged: { - limit, - start_after: startAfter - } - }); - }; - getFamilyByHead = async ({ - head - }: { - head: string; - }): Promise => { - return this.client.queryContractSmart(this.contractAddress, { - get_family_by_head: { - head - } - }); - }; - getFamilyByLabel = async ({ - label - }: { - label: string; - }): Promise => { - return this.client.queryContractSmart(this.contractAddress, { - get_family_by_label: { - label - } - }); - }; - getFamilyMembersByHead = async ({ - head - }: { - head: string; - }): Promise => { - return this.client.queryContractSmart(this.contractAddress, { - get_family_members_by_head: { - head - } - }); - }; - getFamilyMembersByLabel = async ({ - label - }: { - label: string; - }): Promise => { - return this.client.queryContractSmart(this.contractAddress, { - get_family_members_by_label: { - label - } + admin: {} }); }; getContractVersion = async (): Promise => { @@ -399,6 +393,25 @@ export class MixnetQueryClient implements MixnetReadOnlyInterface { get_state: {} }); }; + getCurrentNymNodeVersion = async (): Promise => { + return this.client.queryContractSmart(this.contractAddress, { + get_current_nym_node_version: {} + }); + }; + getNymNodeVersionHistory = async ({ + limit, + startAfter + }: { + limit?: number; + startAfter?: number; + }): Promise => { + return this.client.queryContractSmart(this.contractAddress, { + get_nym_node_version_history: { + limit, + start_after: startAfter + } + }); + }; getRewardingParams = async (): Promise => { return this.client.queryContractSmart(this.contractAddress, { get_rewarding_params: {} @@ -414,20 +427,6 @@ export class MixnetQueryClient implements MixnetReadOnlyInterface { get_current_interval_details: {} }); }; - getRewardedSet = async ({ - limit, - startAfter - }: { - limit?: number; - startAfter?: number; - }): Promise => { - return this.client.queryContractSmart(this.contractAddress, { - get_rewarded_set: { - limit, - start_after: startAfter - } - }); - }; getMixNodeBonds = async ({ limit, startAfter @@ -541,7 +540,7 @@ export class MixnetQueryClient implements MixnetReadOnlyInterface { mixId }: { mixId: number; - }): Promise => { + }): Promise => { return this.client.queryContractSmart(this.contractAddress, { get_stake_saturation: { mix_id: mixId @@ -570,11 +569,6 @@ export class MixnetQueryClient implements MixnetReadOnlyInterface { } }); }; - getLayerDistribution = async (): Promise => { - return this.client.queryContractSmart(this.contractAddress, { - get_layer_distribution: {} - }); - }; getGateways = async ({ limit, startAfter @@ -611,19 +605,191 @@ export class MixnetQueryClient implements MixnetReadOnlyInterface { } }); }; - getMixnodeDelegations = async ({ + getPreassignedGatewayIds = async ({ limit, - mixId, startAfter }: { limit?: number; - mixId: number; startAfter?: string; - }): Promise => { + }): Promise => { return this.client.queryContractSmart(this.contractAddress, { - get_mixnode_delegations: { + get_preassigned_gateway_ids: { limit, - mix_id: mixId, + start_after: startAfter + } + }); + }; + getNymNodeBondsPaged = async ({ + limit, + startAfter + }: { + limit?: number; + startAfter?: number; + }): Promise => { + return this.client.queryContractSmart(this.contractAddress, { + get_nym_node_bonds_paged: { + limit, + start_after: startAfter + } + }); + }; + getNymNodesDetailedPaged = async ({ + limit, + startAfter + }: { + limit?: number; + startAfter?: number; + }): Promise => { + return this.client.queryContractSmart(this.contractAddress, { + get_nym_nodes_detailed_paged: { + limit, + start_after: startAfter + } + }); + }; + getUnbondedNymNode = async ({ + nodeId + }: { + nodeId: number; + }): Promise => { + return this.client.queryContractSmart(this.contractAddress, { + get_unbonded_nym_node: { + node_id: nodeId + } + }); + }; + getUnbondedNymNodesPaged = async ({ + limit, + startAfter + }: { + limit?: number; + startAfter?: number; + }): Promise => { + return this.client.queryContractSmart(this.contractAddress, { + get_unbonded_nym_nodes_paged: { + limit, + start_after: startAfter + } + }); + }; + getUnbondedNymNodesByOwnerPaged = async ({ + limit, + owner, + startAfter + }: { + limit?: number; + owner: string; + startAfter?: number; + }): Promise => { + return this.client.queryContractSmart(this.contractAddress, { + get_unbonded_nym_nodes_by_owner_paged: { + limit, + owner, + start_after: startAfter + } + }); + }; + getUnbondedNymNodesByIdentityKeyPaged = async ({ + identityKey, + limit, + startAfter + }: { + identityKey: string; + limit?: number; + startAfter?: number; + }): Promise => { + return this.client.queryContractSmart(this.contractAddress, { + get_unbonded_nym_nodes_by_identity_key_paged: { + identity_key: identityKey, + limit, + start_after: startAfter + } + }); + }; + getOwnedNymNode = async ({ + address + }: { + address: string; + }): Promise => { + return this.client.queryContractSmart(this.contractAddress, { + get_owned_nym_node: { + address + } + }); + }; + getNymNodeDetails = async ({ + nodeId + }: { + nodeId: number; + }): Promise => { + return this.client.queryContractSmart(this.contractAddress, { + get_nym_node_details: { + node_id: nodeId + } + }); + }; + getNymNodeDetailsByIdentityKey = async ({ + nodeIdentity + }: { + nodeIdentity: string; + }): Promise => { + return this.client.queryContractSmart(this.contractAddress, { + get_nym_node_details_by_identity_key: { + node_identity: nodeIdentity + } + }); + }; + getNodeRewardingDetails = async ({ + nodeId + }: { + nodeId: number; + }): Promise => { + return this.client.queryContractSmart(this.contractAddress, { + get_node_rewarding_details: { + node_id: nodeId + } + }); + }; + getNodeStakeSaturation = async ({ + nodeId + }: { + nodeId: number; + }): Promise => { + return this.client.queryContractSmart(this.contractAddress, { + get_node_stake_saturation: { + node_id: nodeId + } + }); + }; + getRoleAssignment = async ({ + role + }: { + role: Role; + }): Promise => { + return this.client.queryContractSmart(this.contractAddress, { + get_role_assignment: { + role + } + }); + }; + getRewardedSetMetadata = async (): Promise => { + return this.client.queryContractSmart(this.contractAddress, { + get_rewarded_set_metadata: {} + }); + }; + getNodeDelegations = async ({ + limit, + nodeId, + startAfter + }: { + limit?: number; + nodeId: number; + startAfter?: string; + }): Promise => { + return this.client.queryContractSmart(this.contractAddress, { + get_node_delegations: { + limit, + node_id: nodeId, start_after: startAfter } }); @@ -647,17 +813,17 @@ export class MixnetQueryClient implements MixnetReadOnlyInterface { }; getDelegationDetails = async ({ delegator, - mixId, + nodeId, proxy }: { delegator: string; - mixId: number; + nodeId: number; proxy?: string; - }): Promise => { + }): Promise => { return this.client.queryContractSmart(this.contractAddress, { get_delegation_details: { delegator, - mix_id: mixId, + node_id: nodeId, proxy } }); @@ -687,65 +853,68 @@ export class MixnetQueryClient implements MixnetReadOnlyInterface { } }); }; - getPendingMixNodeOperatorReward = async ({ - mixId + getPendingNodeOperatorReward = async ({ + nodeId }: { - mixId: number; + nodeId: number; }): Promise => { return this.client.queryContractSmart(this.contractAddress, { - get_pending_mix_node_operator_reward: { - mix_id: mixId + get_pending_node_operator_reward: { + node_id: nodeId } }); }; getPendingDelegatorReward = async ({ address, - mixId, + nodeId, proxy }: { address: string; - mixId: number; + nodeId: number; proxy?: string; }): Promise => { return this.client.queryContractSmart(this.contractAddress, { get_pending_delegator_reward: { address, - mix_id: mixId, + node_id: nodeId, proxy } }); }; getEstimatedCurrentEpochOperatorReward = async ({ estimatedPerformance, - mixId + estimatedWork, + nodeId }: { estimatedPerformance: Percent; - mixId: number; + estimatedWork?: Decimal; + nodeId: number; }): Promise => { return this.client.queryContractSmart(this.contractAddress, { get_estimated_current_epoch_operator_reward: { estimated_performance: estimatedPerformance, - mix_id: mixId + estimated_work: estimatedWork, + node_id: nodeId } }); }; getEstimatedCurrentEpochDelegatorReward = async ({ address, estimatedPerformance, - mixId, - proxy + estimatedWork, + nodeId }: { address: string; estimatedPerformance: Percent; - mixId: number; - proxy?: string; + estimatedWork?: Decimal; + nodeId: number; }): Promise => { return this.client.queryContractSmart(this.contractAddress, { get_estimated_current_epoch_delegator_reward: { address, estimated_performance: estimatedPerformance, - mix_id: mixId, - proxy + estimated_work: estimatedWork, + node_id: nodeId } }); }; @@ -815,93 +984,54 @@ export class MixnetQueryClient implements MixnetReadOnlyInterface { } }); }; + getKeyRotationState = async (): Promise => { + return this.client.queryContractSmart(this.contractAddress, { + get_key_rotation_state: {} + }); + }; + getKeyRotationId = async (): Promise => { + return this.client.queryContractSmart(this.contractAddress, { + get_key_rotation_id: {} + }); + }; } export interface MixnetInterface extends MixnetReadOnlyInterface { contractAddress: string; sender: string; - assignNodeLayer: ({ - layer, - mixId + updateAdmin: ({ + admin }: { - layer: Layer; - mixId: number; - }, fee?: number | StdFee | "auto", memo?: string, _funds?: Coin[]) => Promise; - createFamily: ({ - label - }: { - label: string; - }, fee?: number | StdFee | "auto", memo?: string, _funds?: Coin[]) => Promise; - joinFamily: ({ - familyHead, - joinPermit - }: { - familyHead: FamilyHead; - joinPermit: MessageSignature; - }, fee?: number | StdFee | "auto", memo?: string, _funds?: Coin[]) => Promise; - leaveFamily: ({ - familyHead - }: { - familyHead: FamilyHead; - }, fee?: number | StdFee | "auto", memo?: string, _funds?: Coin[]) => Promise; - kickFamilyMember: ({ - member - }: { - member: string; - }, fee?: number | StdFee | "auto", memo?: string, _funds?: Coin[]) => Promise; - createFamilyOnBehalf: ({ - label, - ownerAddress - }: { - label: string; - ownerAddress: string; - }, fee?: number | StdFee | "auto", memo?: string, _funds?: Coin[]) => Promise; - joinFamilyOnBehalf: ({ - familyHead, - joinPermit, - memberAddress - }: { - familyHead: FamilyHead; - joinPermit: MessageSignature; - memberAddress: string; - }, fee?: number | StdFee | "auto", memo?: string, _funds?: Coin[]) => Promise; - leaveFamilyOnBehalf: ({ - familyHead, - memberAddress - }: { - familyHead: FamilyHead; - memberAddress: string; - }, fee?: number | StdFee | "auto", memo?: string, _funds?: Coin[]) => Promise; - kickFamilyMemberOnBehalf: ({ - headAddress, - member - }: { - headAddress: string; - member: string; - }, fee?: number | StdFee | "auto", memo?: string, _funds?: Coin[]) => Promise; + admin: string; + }, fee_?: number | StdFee | "auto", memo_?: string, funds_?: Coin[]) => Promise; updateRewardingValidatorAddress: ({ address }: { address: string; - }, fee?: number | StdFee | "auto", memo?: string, _funds?: Coin[]) => Promise; + }, fee_?: number | StdFee | "auto", memo_?: string, funds_?: Coin[]) => Promise; updateContractStateParams: ({ - updatedParameters + update }: { - updatedParameters: ContractStateParams; - }, fee?: number | StdFee | "auto", memo?: string, _funds?: Coin[]) => Promise; - updateActiveSetSize: ({ - activeSetSize, - forceImmediately + update: ContractStateParamsUpdate; + }, fee_?: number | StdFee | "auto", memo_?: string, funds_?: Coin[]) => Promise; + updateCurrentNymNodeSemver: ({ + currentVersion + }: { + currentVersion: string; + }, fee_?: number | StdFee | "auto", memo_?: string, funds_?: Coin[]) => Promise; + updateActiveSetDistribution: ({ + forceImmediately, + update }: { - activeSetSize: number; forceImmediately: boolean; - }, fee?: number | StdFee | "auto", memo?: string, _funds?: Coin[]) => Promise; + update: ActiveSetUpdate; + }, fee_?: number | StdFee | "auto", memo_?: string, funds_?: Coin[]) => Promise; updateRewardingParams: ({ forceImmediately, updatedParams }: { forceImmediately: boolean; updatedParams: IntervalRewardingParamsUpdate; - }, fee?: number | StdFee | "auto", memo?: string, _funds?: Coin[]) => Promise; + }, fee_?: number | StdFee | "auto", memo_?: string, funds_?: Coin[]) => Promise; updateIntervalConfig: ({ epochDurationSecs, epochsInInterval, @@ -910,95 +1040,94 @@ export interface MixnetInterface extends MixnetReadOnlyInterface { epochDurationSecs: number; epochsInInterval: number; forceImmediately: boolean; - }, fee?: number | StdFee | "auto", memo?: string, _funds?: Coin[]) => Promise; - beginEpochTransition: (fee?: number | StdFee | "auto", memo?: string, _funds?: Coin[]) => Promise; - advanceCurrentEpoch: ({ - expectedActiveSetSize, - newRewardedSet - }: { - expectedActiveSetSize: number; - newRewardedSet: LayerAssignment[]; - }, fee?: number | StdFee | "auto", memo?: string, _funds?: Coin[]) => Promise; + }, fee_?: number | StdFee | "auto", memo_?: string, funds_?: Coin[]) => Promise; + beginEpochTransition: (fee_?: number | StdFee | "auto", memo_?: string, funds_?: Coin[]) => Promise; reconcileEpochEvents: ({ limit }: { limit?: number; - }, fee?: number | StdFee | "auto", memo?: string, _funds?: Coin[]) => Promise; + }, fee_?: number | StdFee | "auto", memo_?: string, funds_?: Coin[]) => Promise; + assignRoles: ({ + assignment + }: { + assignment: RoleAssignment; + }, fee_?: number | StdFee | "auto", memo_?: string, funds_?: Coin[]) => Promise; bondMixnode: ({ costParams, mixNode, ownerSignature }: { - costParams: MixNodeCostParams; + costParams: NodeCostParams; mixNode: MixNode; ownerSignature: MessageSignature; - }, fee?: number | StdFee | "auto", memo?: string, _funds?: Coin[]) => Promise; + }, fee_?: number | StdFee | "auto", memo_?: string, funds_?: Coin[]) => Promise; bondMixnodeOnBehalf: ({ costParams, mixNode, owner, ownerSignature }: { - costParams: MixNodeCostParams; + costParams: NodeCostParams; mixNode: MixNode; owner: string; ownerSignature: MessageSignature; - }, fee?: number | StdFee | "auto", memo?: string, _funds?: Coin[]) => Promise; - pledgeMore: (fee?: number | StdFee | "auto", memo?: string, _funds?: Coin[]) => Promise; + }, fee_?: number | StdFee | "auto", memo_?: string, funds_?: Coin[]) => Promise; + pledgeMore: (fee_?: number | StdFee | "auto", memo_?: string, funds_?: Coin[]) => Promise; pledgeMoreOnBehalf: ({ owner }: { owner: string; - }, fee?: number | StdFee | "auto", memo?: string, _funds?: Coin[]) => Promise; + }, fee_?: number | StdFee | "auto", memo_?: string, funds_?: Coin[]) => Promise; decreasePledge: ({ decreaseBy }: { decreaseBy: Coin; - }, fee?: number | StdFee | "auto", memo?: string, _funds?: Coin[]) => Promise; + }, fee_?: number | StdFee | "auto", memo_?: string, funds_?: Coin[]) => Promise; decreasePledgeOnBehalf: ({ decreaseBy, owner }: { decreaseBy: Coin; owner: string; - }, fee?: number | StdFee | "auto", memo?: string, _funds?: Coin[]) => Promise; - unbondMixnode: (fee?: number | StdFee | "auto", memo?: string, _funds?: Coin[]) => Promise; + }, fee_?: number | StdFee | "auto", memo_?: string, funds_?: Coin[]) => Promise; + unbondMixnode: (fee_?: number | StdFee | "auto", memo_?: string, funds_?: Coin[]) => Promise; unbondMixnodeOnBehalf: ({ owner }: { owner: string; - }, fee?: number | StdFee | "auto", memo?: string, _funds?: Coin[]) => Promise; - updateMixnodeCostParams: ({ + }, fee_?: number | StdFee | "auto", memo_?: string, funds_?: Coin[]) => Promise; + updateCostParams: ({ newCosts }: { - newCosts: MixNodeCostParams; - }, fee?: number | StdFee | "auto", memo?: string, _funds?: Coin[]) => Promise; + newCosts: NodeCostParams; + }, fee_?: number | StdFee | "auto", memo_?: string, funds_?: Coin[]) => Promise; updateMixnodeCostParamsOnBehalf: ({ newCosts, owner }: { - newCosts: MixNodeCostParams; + newCosts: NodeCostParams; owner: string; - }, fee?: number | StdFee | "auto", memo?: string, _funds?: Coin[]) => Promise; + }, fee_?: number | StdFee | "auto", memo_?: string, funds_?: Coin[]) => Promise; updateMixnodeConfig: ({ newConfig }: { newConfig: MixNodeConfigUpdate; - }, fee?: number | StdFee | "auto", memo?: string, _funds?: Coin[]) => Promise; + }, fee_?: number | StdFee | "auto", memo_?: string, funds_?: Coin[]) => Promise; updateMixnodeConfigOnBehalf: ({ newConfig, owner }: { newConfig: MixNodeConfigUpdate; owner: string; - }, fee?: number | StdFee | "auto", memo?: string, _funds?: Coin[]) => Promise; + }, fee_?: number | StdFee | "auto", memo_?: string, funds_?: Coin[]) => Promise; + migrateMixnode: (fee_?: number | StdFee | "auto", memo_?: string, funds_?: Coin[]) => Promise; bondGateway: ({ gateway, ownerSignature }: { gateway: Gateway; ownerSignature: MessageSignature; - }, fee?: number | StdFee | "auto", memo?: string, _funds?: Coin[]) => Promise; + }, fee_?: number | StdFee | "auto", memo_?: string, funds_?: Coin[]) => Promise; bondGatewayOnBehalf: ({ gateway, owner, @@ -1007,102 +1136,120 @@ export interface MixnetInterface extends MixnetReadOnlyInterface { gateway: Gateway; owner: string; ownerSignature: MessageSignature; - }, fee?: number | StdFee | "auto", memo?: string, _funds?: Coin[]) => Promise; - unbondGateway: (fee?: number | StdFee | "auto", memo?: string, _funds?: Coin[]) => Promise; + }, fee_?: number | StdFee | "auto", memo_?: string, funds_?: Coin[]) => Promise; + unbondGateway: (fee_?: number | StdFee | "auto", memo_?: string, funds_?: Coin[]) => Promise; unbondGatewayOnBehalf: ({ owner }: { owner: string; - }, fee?: number | StdFee | "auto", memo?: string, _funds?: Coin[]) => Promise; + }, fee_?: number | StdFee | "auto", memo_?: string, funds_?: Coin[]) => Promise; updateGatewayConfig: ({ newConfig }: { newConfig: GatewayConfigUpdate; - }, fee?: number | StdFee | "auto", memo?: string, _funds?: Coin[]) => Promise; + }, fee_?: number | StdFee | "auto", memo_?: string, funds_?: Coin[]) => Promise; updateGatewayConfigOnBehalf: ({ newConfig, owner }: { newConfig: GatewayConfigUpdate; owner: string; - }, fee?: number | StdFee | "auto", memo?: string, _funds?: Coin[]) => Promise; - delegateToMixnode: ({ - mixId + }, fee_?: number | StdFee | "auto", memo_?: string, funds_?: Coin[]) => Promise; + migrateGateway: ({ + costParams }: { - mixId: number; - }, fee?: number | StdFee | "auto", memo?: string, _funds?: Coin[]) => Promise; + costParams?: NodeCostParams; + }, fee_?: number | StdFee | "auto", memo_?: string, funds_?: Coin[]) => Promise; + bondNymNode: ({ + costParams, + node, + ownerSignature + }: { + costParams: NodeCostParams; + node: NymNode; + ownerSignature: MessageSignature; + }, fee_?: number | StdFee | "auto", memo_?: string, funds_?: Coin[]) => Promise; + unbondNymNode: (fee_?: number | StdFee | "auto", memo_?: string, funds_?: Coin[]) => Promise; + updateNodeConfig: ({ + update + }: { + update: NodeConfigUpdate; + }, fee_?: number | StdFee | "auto", memo_?: string, funds_?: Coin[]) => Promise; + delegate: ({ + nodeId + }: { + nodeId: number; + }, fee_?: number | StdFee | "auto", memo_?: string, funds_?: Coin[]) => Promise; delegateToMixnodeOnBehalf: ({ delegate, mixId }: { delegate: string; mixId: number; - }, fee?: number | StdFee | "auto", memo?: string, _funds?: Coin[]) => Promise; - undelegateFromMixnode: ({ - mixId + }, fee_?: number | StdFee | "auto", memo_?: string, funds_?: Coin[]) => Promise; + undelegate: ({ + nodeId }: { - mixId: number; - }, fee?: number | StdFee | "auto", memo?: string, _funds?: Coin[]) => Promise; + nodeId: number; + }, fee_?: number | StdFee | "auto", memo_?: string, funds_?: Coin[]) => Promise; undelegateFromMixnodeOnBehalf: ({ delegate, mixId }: { delegate: string; mixId: number; - }, fee?: number | StdFee | "auto", memo?: string, _funds?: Coin[]) => Promise; - rewardMixnode: ({ - mixId, - performance + }, fee_?: number | StdFee | "auto", memo_?: string, funds_?: Coin[]) => Promise; + rewardNode: ({ + nodeId, + params }: { - mixId: number; - performance: Percent; - }, fee?: number | StdFee | "auto", memo?: string, _funds?: Coin[]) => Promise; - withdrawOperatorReward: (fee?: number | StdFee | "auto", memo?: string, _funds?: Coin[]) => Promise; + nodeId: number; + params: NodeRewardingParameters; + }, fee_?: number | StdFee | "auto", memo_?: string, funds_?: Coin[]) => Promise; + withdrawOperatorReward: (fee_?: number | StdFee | "auto", memo_?: string, funds_?: Coin[]) => Promise; withdrawOperatorRewardOnBehalf: ({ owner }: { owner: string; - }, fee?: number | StdFee | "auto", memo?: string, _funds?: Coin[]) => Promise; + }, fee_?: number | StdFee | "auto", memo_?: string, funds_?: Coin[]) => Promise; withdrawDelegatorReward: ({ - mixId + nodeId }: { - mixId: number; - }, fee?: number | StdFee | "auto", memo?: string, _funds?: Coin[]) => Promise; + nodeId: number; + }, fee_?: number | StdFee | "auto", memo_?: string, funds_?: Coin[]) => Promise; withdrawDelegatorRewardOnBehalf: ({ mixId, owner }: { mixId: number; owner: string; - }, fee?: number | StdFee | "auto", memo?: string, _funds?: Coin[]) => Promise; + }, fee_?: number | StdFee | "auto", memo_?: string, funds_?: Coin[]) => Promise; + migrateVestedMixNode: (fee_?: number | StdFee | "auto", memo_?: string, funds_?: Coin[]) => Promise; + migrateVestedDelegation: ({ + mixId + }: { + mixId: number; + }, fee_?: number | StdFee | "auto", memo_?: string, funds_?: Coin[]) => Promise; } export class MixnetClient extends MixnetQueryClient implements MixnetInterface { - client: SigningCosmWasmClient; + client: ISigningCosmWasmClient; sender: string; contractAddress: string; - - constructor(client: SigningCosmWasmClient, sender: string, contractAddress: string) { + constructor(client: ISigningCosmWasmClient, sender: string, contractAddress: string) { super(client, contractAddress); this.client = client; this.sender = sender; this.contractAddress = contractAddress; - this.assignNodeLayer = this.assignNodeLayer.bind(this); - this.createFamily = this.createFamily.bind(this); - this.joinFamily = this.joinFamily.bind(this); - this.leaveFamily = this.leaveFamily.bind(this); - this.kickFamilyMember = this.kickFamilyMember.bind(this); - this.createFamilyOnBehalf = this.createFamilyOnBehalf.bind(this); - this.joinFamilyOnBehalf = this.joinFamilyOnBehalf.bind(this); - this.leaveFamilyOnBehalf = this.leaveFamilyOnBehalf.bind(this); - this.kickFamilyMemberOnBehalf = this.kickFamilyMemberOnBehalf.bind(this); + this.updateAdmin = this.updateAdmin.bind(this); this.updateRewardingValidatorAddress = this.updateRewardingValidatorAddress.bind(this); this.updateContractStateParams = this.updateContractStateParams.bind(this); - this.updateActiveSetSize = this.updateActiveSetSize.bind(this); + this.updateCurrentNymNodeSemver = this.updateCurrentNymNodeSemver.bind(this); + this.updateActiveSetDistribution = this.updateActiveSetDistribution.bind(this); this.updateRewardingParams = this.updateRewardingParams.bind(this); this.updateIntervalConfig = this.updateIntervalConfig.bind(this); this.beginEpochTransition = this.beginEpochTransition.bind(this); - this.advanceCurrentEpoch = this.advanceCurrentEpoch.bind(this); this.reconcileEpochEvents = this.reconcileEpochEvents.bind(this); + this.assignRoles = this.assignRoles.bind(this); this.bondMixnode = this.bondMixnode.bind(this); this.bondMixnodeOnBehalf = this.bondMixnodeOnBehalf.bind(this); this.pledgeMore = this.pledgeMore.bind(this); @@ -1111,182 +1258,90 @@ export class MixnetClient extends MixnetQueryClient implements MixnetInterface { this.decreasePledgeOnBehalf = this.decreasePledgeOnBehalf.bind(this); this.unbondMixnode = this.unbondMixnode.bind(this); this.unbondMixnodeOnBehalf = this.unbondMixnodeOnBehalf.bind(this); - this.updateMixnodeCostParams = this.updateMixnodeCostParams.bind(this); + this.updateCostParams = this.updateCostParams.bind(this); this.updateMixnodeCostParamsOnBehalf = this.updateMixnodeCostParamsOnBehalf.bind(this); this.updateMixnodeConfig = this.updateMixnodeConfig.bind(this); this.updateMixnodeConfigOnBehalf = this.updateMixnodeConfigOnBehalf.bind(this); + this.migrateMixnode = this.migrateMixnode.bind(this); this.bondGateway = this.bondGateway.bind(this); this.bondGatewayOnBehalf = this.bondGatewayOnBehalf.bind(this); this.unbondGateway = this.unbondGateway.bind(this); this.unbondGatewayOnBehalf = this.unbondGatewayOnBehalf.bind(this); this.updateGatewayConfig = this.updateGatewayConfig.bind(this); this.updateGatewayConfigOnBehalf = this.updateGatewayConfigOnBehalf.bind(this); - this.delegateToMixnode = this.delegateToMixnode.bind(this); + this.migrateGateway = this.migrateGateway.bind(this); + this.bondNymNode = this.bondNymNode.bind(this); + this.unbondNymNode = this.unbondNymNode.bind(this); + this.updateNodeConfig = this.updateNodeConfig.bind(this); + this.delegate = this.delegate.bind(this); this.delegateToMixnodeOnBehalf = this.delegateToMixnodeOnBehalf.bind(this); - this.undelegateFromMixnode = this.undelegateFromMixnode.bind(this); + this.undelegate = this.undelegate.bind(this); this.undelegateFromMixnodeOnBehalf = this.undelegateFromMixnodeOnBehalf.bind(this); - this.rewardMixnode = this.rewardMixnode.bind(this); + this.rewardNode = this.rewardNode.bind(this); this.withdrawOperatorReward = this.withdrawOperatorReward.bind(this); this.withdrawOperatorRewardOnBehalf = this.withdrawOperatorRewardOnBehalf.bind(this); this.withdrawDelegatorReward = this.withdrawDelegatorReward.bind(this); this.withdrawDelegatorRewardOnBehalf = this.withdrawDelegatorRewardOnBehalf.bind(this); + this.migrateVestedMixNode = this.migrateVestedMixNode.bind(this); + this.migrateVestedDelegation = this.migrateVestedDelegation.bind(this); } - - assignNodeLayer = async ({ - layer, - mixId + updateAdmin = async ({ + admin }: { - layer: Layer; - mixId: number; - }, fee: number | StdFee | "auto" = "auto", memo?: string, _funds?: Coin[]): Promise => { + admin: string; + }, fee_: number | StdFee | "auto" = "auto", memo_?: string, funds_?: Coin[]): Promise => { return await this.client.execute(this.sender, this.contractAddress, { - assign_node_layer: { - layer, - mix_id: mixId + update_admin: { + admin } - }, fee, memo, _funds); - }; - createFamily = async ({ - label - }: { - label: string; - }, fee: number | StdFee | "auto" = "auto", memo?: string, _funds?: Coin[]): Promise => { - return await this.client.execute(this.sender, this.contractAddress, { - create_family: { - label - } - }, fee, memo, _funds); - }; - joinFamily = async ({ - familyHead, - joinPermit - }: { - familyHead: FamilyHead; - joinPermit: MessageSignature; - }, fee: number | StdFee | "auto" = "auto", memo?: string, _funds?: Coin[]): Promise => { - return await this.client.execute(this.sender, this.contractAddress, { - join_family: { - family_head: familyHead, - join_permit: joinPermit - } - }, fee, memo, _funds); - }; - leaveFamily = async ({ - familyHead - }: { - familyHead: FamilyHead; - }, fee: number | StdFee | "auto" = "auto", memo?: string, _funds?: Coin[]): Promise => { - return await this.client.execute(this.sender, this.contractAddress, { - leave_family: { - family_head: familyHead - } - }, fee, memo, _funds); - }; - kickFamilyMember = async ({ - member - }: { - member: string; - }, fee: number | StdFee | "auto" = "auto", memo?: string, _funds?: Coin[]): Promise => { - return await this.client.execute(this.sender, this.contractAddress, { - kick_family_member: { - member - } - }, fee, memo, _funds); - }; - createFamilyOnBehalf = async ({ - label, - ownerAddress - }: { - label: string; - ownerAddress: string; - }, fee: number | StdFee | "auto" = "auto", memo?: string, _funds?: Coin[]): Promise => { - return await this.client.execute(this.sender, this.contractAddress, { - create_family_on_behalf: { - label, - owner_address: ownerAddress - } - }, fee, memo, _funds); - }; - joinFamilyOnBehalf = async ({ - familyHead, - joinPermit, - memberAddress - }: { - familyHead: FamilyHead; - joinPermit: MessageSignature; - memberAddress: string; - }, fee: number | StdFee | "auto" = "auto", memo?: string, _funds?: Coin[]): Promise => { - return await this.client.execute(this.sender, this.contractAddress, { - join_family_on_behalf: { - family_head: familyHead, - join_permit: joinPermit, - member_address: memberAddress - } - }, fee, memo, _funds); - }; - leaveFamilyOnBehalf = async ({ - familyHead, - memberAddress - }: { - familyHead: FamilyHead; - memberAddress: string; - }, fee: number | StdFee | "auto" = "auto", memo?: string, _funds?: Coin[]): Promise => { - return await this.client.execute(this.sender, this.contractAddress, { - leave_family_on_behalf: { - family_head: familyHead, - member_address: memberAddress - } - }, fee, memo, _funds); - }; - kickFamilyMemberOnBehalf = async ({ - headAddress, - member - }: { - headAddress: string; - member: string; - }, fee: number | StdFee | "auto" = "auto", memo?: string, _funds?: Coin[]): Promise => { - return await this.client.execute(this.sender, this.contractAddress, { - kick_family_member_on_behalf: { - head_address: headAddress, - member - } - }, fee, memo, _funds); + }, fee_, memo_, funds_); }; updateRewardingValidatorAddress = async ({ address }: { address: string; - }, fee: number | StdFee | "auto" = "auto", memo?: string, _funds?: Coin[]): Promise => { + }, fee_: number | StdFee | "auto" = "auto", memo_?: string, funds_?: Coin[]): Promise => { return await this.client.execute(this.sender, this.contractAddress, { update_rewarding_validator_address: { address } - }, fee, memo, _funds); + }, fee_, memo_, funds_); }; updateContractStateParams = async ({ - updatedParameters + update }: { - updatedParameters: ContractStateParams; - }, fee: number | StdFee | "auto" = "auto", memo?: string, _funds?: Coin[]): Promise => { + update: ContractStateParamsUpdate; + }, fee_: number | StdFee | "auto" = "auto", memo_?: string, funds_?: Coin[]): Promise => { return await this.client.execute(this.sender, this.contractAddress, { update_contract_state_params: { - updated_parameters: updatedParameters + update } - }, fee, memo, _funds); + }, fee_, memo_, funds_); }; - updateActiveSetSize = async ({ - activeSetSize, - forceImmediately + updateCurrentNymNodeSemver = async ({ + currentVersion }: { - activeSetSize: number; - forceImmediately: boolean; - }, fee: number | StdFee | "auto" = "auto", memo?: string, _funds?: Coin[]): Promise => { + currentVersion: string; + }, fee_: number | StdFee | "auto" = "auto", memo_?: string, funds_?: Coin[]): Promise => { return await this.client.execute(this.sender, this.contractAddress, { - update_active_set_size: { - active_set_size: activeSetSize, - force_immediately: forceImmediately + update_current_nym_node_semver: { + current_version: currentVersion } - }, fee, memo, _funds); + }, fee_, memo_, funds_); + }; + updateActiveSetDistribution = async ({ + forceImmediately, + update + }: { + forceImmediately: boolean; + update: ActiveSetUpdate; + }, fee_: number | StdFee | "auto" = "auto", memo_?: string, funds_?: Coin[]): Promise => { + return await this.client.execute(this.sender, this.contractAddress, { + update_active_set_distribution: { + force_immediately: forceImmediately, + update + } + }, fee_, memo_, funds_); }; updateRewardingParams = async ({ forceImmediately, @@ -1294,13 +1349,13 @@ export class MixnetClient extends MixnetQueryClient implements MixnetInterface { }: { forceImmediately: boolean; updatedParams: IntervalRewardingParamsUpdate; - }, fee: number | StdFee | "auto" = "auto", memo?: string, _funds?: Coin[]): Promise => { + }, fee_: number | StdFee | "auto" = "auto", memo_?: string, funds_?: Coin[]): Promise => { return await this.client.execute(this.sender, this.contractAddress, { update_rewarding_params: { force_immediately: forceImmediately, updated_params: updatedParams } - }, fee, memo, _funds); + }, fee_, memo_, funds_); }; updateIntervalConfig = async ({ epochDurationSecs, @@ -1310,61 +1365,58 @@ export class MixnetClient extends MixnetQueryClient implements MixnetInterface { epochDurationSecs: number; epochsInInterval: number; forceImmediately: boolean; - }, fee: number | StdFee | "auto" = "auto", memo?: string, _funds?: Coin[]): Promise => { + }, fee_: number | StdFee | "auto" = "auto", memo_?: string, funds_?: Coin[]): Promise => { return await this.client.execute(this.sender, this.contractAddress, { update_interval_config: { epoch_duration_secs: epochDurationSecs, epochs_in_interval: epochsInInterval, force_immediately: forceImmediately } - }, fee, memo, _funds); + }, fee_, memo_, funds_); }; - beginEpochTransition = async (fee: number | StdFee | "auto" = "auto", memo?: string, _funds?: Coin[]): Promise => { + beginEpochTransition = async (fee_: number | StdFee | "auto" = "auto", memo_?: string, funds_?: Coin[]): Promise => { return await this.client.execute(this.sender, this.contractAddress, { begin_epoch_transition: {} - }, fee, memo, _funds); - }; - advanceCurrentEpoch = async ({ - expectedActiveSetSize, - newRewardedSet - }: { - expectedActiveSetSize: number; - newRewardedSet: LayerAssignment[]; - }, fee: number | StdFee | "auto" = "auto", memo?: string, _funds?: Coin[]): Promise => { - return await this.client.execute(this.sender, this.contractAddress, { - advance_current_epoch: { - expected_active_set_size: expectedActiveSetSize, - new_rewarded_set: newRewardedSet - } - }, fee, memo, _funds); + }, fee_, memo_, funds_); }; reconcileEpochEvents = async ({ limit }: { limit?: number; - }, fee: number | StdFee | "auto" = "auto", memo?: string, _funds?: Coin[]): Promise => { + }, fee_: number | StdFee | "auto" = "auto", memo_?: string, funds_?: Coin[]): Promise => { return await this.client.execute(this.sender, this.contractAddress, { reconcile_epoch_events: { limit } - }, fee, memo, _funds); + }, fee_, memo_, funds_); + }; + assignRoles = async ({ + assignment + }: { + assignment: RoleAssignment; + }, fee_: number | StdFee | "auto" = "auto", memo_?: string, funds_?: Coin[]): Promise => { + return await this.client.execute(this.sender, this.contractAddress, { + assign_roles: { + assignment + } + }, fee_, memo_, funds_); }; bondMixnode = async ({ costParams, mixNode, ownerSignature }: { - costParams: MixNodeCostParams; + costParams: NodeCostParams; mixNode: MixNode; ownerSignature: MessageSignature; - }, fee: number | StdFee | "auto" = "auto", memo?: string, _funds?: Coin[]): Promise => { + }, fee_: number | StdFee | "auto" = "auto", memo_?: string, funds_?: Coin[]): Promise => { return await this.client.execute(this.sender, this.contractAddress, { bond_mixnode: { cost_params: costParams, mix_node: mixNode, owner_signature: ownerSignature } - }, fee, memo, _funds); + }, fee_, memo_, funds_); }; bondMixnodeOnBehalf = async ({ costParams, @@ -1372,11 +1424,11 @@ export class MixnetClient extends MixnetQueryClient implements MixnetInterface { owner, ownerSignature }: { - costParams: MixNodeCostParams; + costParams: NodeCostParams; mixNode: MixNode; owner: string; ownerSignature: MessageSignature; - }, fee: number | StdFee | "auto" = "auto", memo?: string, _funds?: Coin[]): Promise => { + }, fee_: number | StdFee | "auto" = "auto", memo_?: string, funds_?: Coin[]): Promise => { return await this.client.execute(this.sender, this.contractAddress, { bond_mixnode_on_behalf: { cost_params: costParams, @@ -1384,34 +1436,34 @@ export class MixnetClient extends MixnetQueryClient implements MixnetInterface { owner, owner_signature: ownerSignature } - }, fee, memo, _funds); + }, fee_, memo_, funds_); }; - pledgeMore = async (fee: number | StdFee | "auto" = "auto", memo?: string, _funds?: Coin[]): Promise => { + pledgeMore = async (fee_: number | StdFee | "auto" = "auto", memo_?: string, funds_?: Coin[]): Promise => { return await this.client.execute(this.sender, this.contractAddress, { pledge_more: {} - }, fee, memo, _funds); + }, fee_, memo_, funds_); }; pledgeMoreOnBehalf = async ({ owner }: { owner: string; - }, fee: number | StdFee | "auto" = "auto", memo?: string, _funds?: Coin[]): Promise => { + }, fee_: number | StdFee | "auto" = "auto", memo_?: string, funds_?: Coin[]): Promise => { return await this.client.execute(this.sender, this.contractAddress, { pledge_more_on_behalf: { owner } - }, fee, memo, _funds); + }, fee_, memo_, funds_); }; decreasePledge = async ({ decreaseBy }: { decreaseBy: Coin; - }, fee: number | StdFee | "auto" = "auto", memo?: string, _funds?: Coin[]): Promise => { + }, fee_: number | StdFee | "auto" = "auto", memo_?: string, funds_?: Coin[]): Promise => { return await this.client.execute(this.sender, this.contractAddress, { decrease_pledge: { decrease_by: decreaseBy } - }, fee, memo, _funds); + }, fee_, memo_, funds_); }; decreasePledgeOnBehalf = async ({ decreaseBy, @@ -1419,65 +1471,65 @@ export class MixnetClient extends MixnetQueryClient implements MixnetInterface { }: { decreaseBy: Coin; owner: string; - }, fee: number | StdFee | "auto" = "auto", memo?: string, _funds?: Coin[]): Promise => { + }, fee_: number | StdFee | "auto" = "auto", memo_?: string, funds_?: Coin[]): Promise => { return await this.client.execute(this.sender, this.contractAddress, { decrease_pledge_on_behalf: { decrease_by: decreaseBy, owner } - }, fee, memo, _funds); + }, fee_, memo_, funds_); }; - unbondMixnode = async (fee: number | StdFee | "auto" = "auto", memo?: string, _funds?: Coin[]): Promise => { + unbondMixnode = async (fee_: number | StdFee | "auto" = "auto", memo_?: string, funds_?: Coin[]): Promise => { return await this.client.execute(this.sender, this.contractAddress, { unbond_mixnode: {} - }, fee, memo, _funds); + }, fee_, memo_, funds_); }; unbondMixnodeOnBehalf = async ({ owner }: { owner: string; - }, fee: number | StdFee | "auto" = "auto", memo?: string, _funds?: Coin[]): Promise => { + }, fee_: number | StdFee | "auto" = "auto", memo_?: string, funds_?: Coin[]): Promise => { return await this.client.execute(this.sender, this.contractAddress, { unbond_mixnode_on_behalf: { owner } - }, fee, memo, _funds); + }, fee_, memo_, funds_); }; - updateMixnodeCostParams = async ({ + updateCostParams = async ({ newCosts }: { - newCosts: MixNodeCostParams; - }, fee: number | StdFee | "auto" = "auto", memo?: string, _funds?: Coin[]): Promise => { + newCosts: NodeCostParams; + }, fee_: number | StdFee | "auto" = "auto", memo_?: string, funds_?: Coin[]): Promise => { return await this.client.execute(this.sender, this.contractAddress, { - update_mixnode_cost_params: { + update_cost_params: { new_costs: newCosts } - }, fee, memo, _funds); + }, fee_, memo_, funds_); }; updateMixnodeCostParamsOnBehalf = async ({ newCosts, owner }: { - newCosts: MixNodeCostParams; + newCosts: NodeCostParams; owner: string; - }, fee: number | StdFee | "auto" = "auto", memo?: string, _funds?: Coin[]): Promise => { + }, fee_: number | StdFee | "auto" = "auto", memo_?: string, funds_?: Coin[]): Promise => { return await this.client.execute(this.sender, this.contractAddress, { update_mixnode_cost_params_on_behalf: { new_costs: newCosts, owner } - }, fee, memo, _funds); + }, fee_, memo_, funds_); }; updateMixnodeConfig = async ({ newConfig }: { newConfig: MixNodeConfigUpdate; - }, fee: number | StdFee | "auto" = "auto", memo?: string, _funds?: Coin[]): Promise => { + }, fee_: number | StdFee | "auto" = "auto", memo_?: string, funds_?: Coin[]): Promise => { return await this.client.execute(this.sender, this.contractAddress, { update_mixnode_config: { new_config: newConfig } - }, fee, memo, _funds); + }, fee_, memo_, funds_); }; updateMixnodeConfigOnBehalf = async ({ newConfig, @@ -1485,13 +1537,18 @@ export class MixnetClient extends MixnetQueryClient implements MixnetInterface { }: { newConfig: MixNodeConfigUpdate; owner: string; - }, fee: number | StdFee | "auto" = "auto", memo?: string, _funds?: Coin[]): Promise => { + }, fee_: number | StdFee | "auto" = "auto", memo_?: string, funds_?: Coin[]): Promise => { return await this.client.execute(this.sender, this.contractAddress, { update_mixnode_config_on_behalf: { new_config: newConfig, owner } - }, fee, memo, _funds); + }, fee_, memo_, funds_); + }; + migrateMixnode = async (fee_: number | StdFee | "auto" = "auto", memo_?: string, funds_?: Coin[]): Promise => { + return await this.client.execute(this.sender, this.contractAddress, { + migrate_mixnode: {} + }, fee_, memo_, funds_); }; bondGateway = async ({ gateway, @@ -1499,13 +1556,13 @@ export class MixnetClient extends MixnetQueryClient implements MixnetInterface { }: { gateway: Gateway; ownerSignature: MessageSignature; - }, fee: number | StdFee | "auto" = "auto", memo?: string, _funds?: Coin[]): Promise => { + }, fee_: number | StdFee | "auto" = "auto", memo_?: string, funds_?: Coin[]): Promise => { return await this.client.execute(this.sender, this.contractAddress, { bond_gateway: { gateway, owner_signature: ownerSignature } - }, fee, memo, _funds); + }, fee_, memo_, funds_); }; bondGatewayOnBehalf = async ({ gateway, @@ -1515,41 +1572,41 @@ export class MixnetClient extends MixnetQueryClient implements MixnetInterface { gateway: Gateway; owner: string; ownerSignature: MessageSignature; - }, fee: number | StdFee | "auto" = "auto", memo?: string, _funds?: Coin[]): Promise => { + }, fee_: number | StdFee | "auto" = "auto", memo_?: string, funds_?: Coin[]): Promise => { return await this.client.execute(this.sender, this.contractAddress, { bond_gateway_on_behalf: { gateway, owner, owner_signature: ownerSignature } - }, fee, memo, _funds); + }, fee_, memo_, funds_); }; - unbondGateway = async (fee: number | StdFee | "auto" = "auto", memo?: string, _funds?: Coin[]): Promise => { + unbondGateway = async (fee_: number | StdFee | "auto" = "auto", memo_?: string, funds_?: Coin[]): Promise => { return await this.client.execute(this.sender, this.contractAddress, { unbond_gateway: {} - }, fee, memo, _funds); + }, fee_, memo_, funds_); }; unbondGatewayOnBehalf = async ({ owner }: { owner: string; - }, fee: number | StdFee | "auto" = "auto", memo?: string, _funds?: Coin[]): Promise => { + }, fee_: number | StdFee | "auto" = "auto", memo_?: string, funds_?: Coin[]): Promise => { return await this.client.execute(this.sender, this.contractAddress, { unbond_gateway_on_behalf: { owner } - }, fee, memo, _funds); + }, fee_, memo_, funds_); }; updateGatewayConfig = async ({ newConfig }: { newConfig: GatewayConfigUpdate; - }, fee: number | StdFee | "auto" = "auto", memo?: string, _funds?: Coin[]): Promise => { + }, fee_: number | StdFee | "auto" = "auto", memo_?: string, funds_?: Coin[]): Promise => { return await this.client.execute(this.sender, this.contractAddress, { update_gateway_config: { new_config: newConfig } - }, fee, memo, _funds); + }, fee_, memo_, funds_); }; updateGatewayConfigOnBehalf = async ({ newConfig, @@ -1557,24 +1614,68 @@ export class MixnetClient extends MixnetQueryClient implements MixnetInterface { }: { newConfig: GatewayConfigUpdate; owner: string; - }, fee: number | StdFee | "auto" = "auto", memo?: string, _funds?: Coin[]): Promise => { + }, fee_: number | StdFee | "auto" = "auto", memo_?: string, funds_?: Coin[]): Promise => { return await this.client.execute(this.sender, this.contractAddress, { update_gateway_config_on_behalf: { new_config: newConfig, owner } - }, fee, memo, _funds); + }, fee_, memo_, funds_); }; - delegateToMixnode = async ({ - mixId + migrateGateway = async ({ + costParams }: { - mixId: number; - }, fee: number | StdFee | "auto" = "auto", memo?: string, _funds?: Coin[]): Promise => { + costParams?: NodeCostParams; + }, fee_: number | StdFee | "auto" = "auto", memo_?: string, funds_?: Coin[]): Promise => { return await this.client.execute(this.sender, this.contractAddress, { - delegate_to_mixnode: { - mix_id: mixId + migrate_gateway: { + cost_params: costParams } - }, fee, memo, _funds); + }, fee_, memo_, funds_); + }; + bondNymNode = async ({ + costParams, + node, + ownerSignature + }: { + costParams: NodeCostParams; + node: NymNode; + ownerSignature: MessageSignature; + }, fee_: number | StdFee | "auto" = "auto", memo_?: string, funds_?: Coin[]): Promise => { + return await this.client.execute(this.sender, this.contractAddress, { + bond_nym_node: { + cost_params: costParams, + node, + owner_signature: ownerSignature + } + }, fee_, memo_, funds_); + }; + unbondNymNode = async (fee_: number | StdFee | "auto" = "auto", memo_?: string, funds_?: Coin[]): Promise => { + return await this.client.execute(this.sender, this.contractAddress, { + unbond_nym_node: {} + }, fee_, memo_, funds_); + }; + updateNodeConfig = async ({ + update + }: { + update: NodeConfigUpdate; + }, fee_: number | StdFee | "auto" = "auto", memo_?: string, funds_?: Coin[]): Promise => { + return await this.client.execute(this.sender, this.contractAddress, { + update_node_config: { + update + } + }, fee_, memo_, funds_); + }; + delegate = async ({ + nodeId + }: { + nodeId: number; + }, fee_: number | StdFee | "auto" = "auto", memo_?: string, funds_?: Coin[]): Promise => { + return await this.client.execute(this.sender, this.contractAddress, { + delegate: { + node_id: nodeId + } + }, fee_, memo_, funds_); }; delegateToMixnodeOnBehalf = async ({ delegate, @@ -1582,24 +1683,24 @@ export class MixnetClient extends MixnetQueryClient implements MixnetInterface { }: { delegate: string; mixId: number; - }, fee: number | StdFee | "auto" = "auto", memo?: string, _funds?: Coin[]): Promise => { + }, fee_: number | StdFee | "auto" = "auto", memo_?: string, funds_?: Coin[]): Promise => { return await this.client.execute(this.sender, this.contractAddress, { delegate_to_mixnode_on_behalf: { delegate, mix_id: mixId } - }, fee, memo, _funds); + }, fee_, memo_, funds_); }; - undelegateFromMixnode = async ({ - mixId + undelegate = async ({ + nodeId }: { - mixId: number; - }, fee: number | StdFee | "auto" = "auto", memo?: string, _funds?: Coin[]): Promise => { + nodeId: number; + }, fee_: number | StdFee | "auto" = "auto", memo_?: string, funds_?: Coin[]): Promise => { return await this.client.execute(this.sender, this.contractAddress, { - undelegate_from_mixnode: { - mix_id: mixId + undelegate: { + node_id: nodeId } - }, fee, memo, _funds); + }, fee_, memo_, funds_); }; undelegateFromMixnodeOnBehalf = async ({ delegate, @@ -1607,54 +1708,54 @@ export class MixnetClient extends MixnetQueryClient implements MixnetInterface { }: { delegate: string; mixId: number; - }, fee: number | StdFee | "auto" = "auto", memo?: string, _funds?: Coin[]): Promise => { + }, fee_: number | StdFee | "auto" = "auto", memo_?: string, funds_?: Coin[]): Promise => { return await this.client.execute(this.sender, this.contractAddress, { undelegate_from_mixnode_on_behalf: { delegate, mix_id: mixId } - }, fee, memo, _funds); + }, fee_, memo_, funds_); }; - rewardMixnode = async ({ - mixId, - performance + rewardNode = async ({ + nodeId, + params }: { - mixId: number; - performance: Percent; - }, fee: number | StdFee | "auto" = "auto", memo?: string, _funds?: Coin[]): Promise => { + nodeId: number; + params: NodeRewardingParameters; + }, fee_: number | StdFee | "auto" = "auto", memo_?: string, funds_?: Coin[]): Promise => { return await this.client.execute(this.sender, this.contractAddress, { - reward_mixnode: { - mix_id: mixId, - performance + reward_node: { + node_id: nodeId, + params } - }, fee, memo, _funds); + }, fee_, memo_, funds_); }; - withdrawOperatorReward = async (fee: number | StdFee | "auto" = "auto", memo?: string, _funds?: Coin[]): Promise => { + withdrawOperatorReward = async (fee_: number | StdFee | "auto" = "auto", memo_?: string, funds_?: Coin[]): Promise => { return await this.client.execute(this.sender, this.contractAddress, { withdraw_operator_reward: {} - }, fee, memo, _funds); + }, fee_, memo_, funds_); }; withdrawOperatorRewardOnBehalf = async ({ owner }: { owner: string; - }, fee: number | StdFee | "auto" = "auto", memo?: string, _funds?: Coin[]): Promise => { + }, fee_: number | StdFee | "auto" = "auto", memo_?: string, funds_?: Coin[]): Promise => { return await this.client.execute(this.sender, this.contractAddress, { withdraw_operator_reward_on_behalf: { owner } - }, fee, memo, _funds); + }, fee_, memo_, funds_); }; withdrawDelegatorReward = async ({ - mixId + nodeId }: { - mixId: number; - }, fee: number | StdFee | "auto" = "auto", memo?: string, _funds?: Coin[]): Promise => { + nodeId: number; + }, fee_: number | StdFee | "auto" = "auto", memo_?: string, funds_?: Coin[]): Promise => { return await this.client.execute(this.sender, this.contractAddress, { withdraw_delegator_reward: { - mix_id: mixId + node_id: nodeId } - }, fee, memo, _funds); + }, fee_, memo_, funds_); }; withdrawDelegatorRewardOnBehalf = async ({ mixId, @@ -1662,12 +1763,28 @@ export class MixnetClient extends MixnetQueryClient implements MixnetInterface { }: { mixId: number; owner: string; - }, fee: number | StdFee | "auto" = "auto", memo?: string, _funds?: Coin[]): Promise => { + }, fee_: number | StdFee | "auto" = "auto", memo_?: string, funds_?: Coin[]): Promise => { return await this.client.execute(this.sender, this.contractAddress, { withdraw_delegator_reward_on_behalf: { mix_id: mixId, owner } - }, fee, memo, _funds); + }, fee_, memo_, funds_); }; -} + migrateVestedMixNode = async (fee_: number | StdFee | "auto" = "auto", memo_?: string, funds_?: Coin[]): Promise => { + return await this.client.execute(this.sender, this.contractAddress, { + migrate_vested_mix_node: {} + }, fee_, memo_, funds_); + }; + migrateVestedDelegation = async ({ + mixId + }: { + mixId: number; + }, fee_: number | StdFee | "auto" = "auto", memo_?: string, funds_?: Coin[]): Promise => { + return await this.client.execute(this.sender, this.contractAddress, { + migrate_vested_delegation: { + mix_id: mixId + } + }, fee_, memo_, funds_); + }; +} \ No newline at end of file diff --git a/sdk/typescript/codegen/contract-clients/src/Mixnet.types.ts b/sdk/typescript/codegen/contract-clients/src/Mixnet.types.ts index f0630f673f..9f38ec385c 100644 --- a/sdk/typescript/codegen/contract-clients/src/Mixnet.types.ts +++ b/sdk/typescript/codegen/contract-clients/src/Mixnet.types.ts @@ -1,80 +1,66 @@ /** -* This file was automatically generated by @cosmwasm/ts-codegen@0.35.3. +* This file was automatically generated by @cosmwasm/ts-codegen@1.13.3. * DO NOT MODIFY IT BY HAND. Instead, modify the source JSONSchema file, * and run the @cosmwasm/ts-codegen generate command to regenerate this file. */ export type Decimal = string; export type Percent = Decimal; - -/** - * This instantiates the contract. - */ +export type Uint128 = string; export interface InstantiateMsg { + current_nym_node_version: string; epoch_duration: Duration; epochs_in_interval: number; initial_rewarding_params: InitialRewardingParams; + interval_operating_cost?: RangedValueForUint128; + key_validity_in_epochs?: number | null; + profit_margin?: RangedValueForPercent; rewarding_denom: string; rewarding_validator_address: string; + version_score_params?: VersionScoreFormulaParams; + version_score_weights?: OutdatedVersionWeights; vesting_contract_address: string; } export interface Duration { nanos: number; secs: number; - [k: string]: unknown; } export interface InitialRewardingParams { - active_set_size: number; active_set_work_factor: Decimal; initial_reward_pool: Decimal; initial_staking_supply: Decimal; interval_pool_emission: Percent; - rewarded_set_size: number; + rewarded_set_params: RewardedSetParams; staking_supply_scale_factor: Percent; sybil_resistance: Percent; } +export interface RewardedSetParams { + entry_gateways: number; + exit_gateways: number; + mixnodes: number; + standby: number; +} +export interface RangedValueForUint128 { + maximum: Uint128; + minimum: Uint128; +} +export interface RangedValueForPercent { + maximum: Percent; + minimum: Percent; +} +export interface VersionScoreFormulaParams { + penalty: Decimal; + penalty_scaling: Decimal; +} +export interface OutdatedVersionWeights { + major: number; + minor: number; + patch: number; + prerelease: number; +} export type ExecuteMsg = { - assign_node_layer: { - layer: Layer; - mix_id: number; - }; -} | { - create_family: { - label: string; - }; -} | { - join_family: { - family_head: FamilyHead; - join_permit: MessageSignature; - }; -} | { - leave_family: { - family_head: FamilyHead; - }; -} | { - kick_family_member: { - member: string; - }; -} | { - create_family_on_behalf: { - label: string; - owner_address: string; - }; -} | { - join_family_on_behalf: { - family_head: FamilyHead; - join_permit: MessageSignature; - member_address: string; - }; -} | { - leave_family_on_behalf: { - family_head: FamilyHead; - member_address: string; - }; -} | { - kick_family_member_on_behalf: { - head_address: string; - member: string; + update_admin: { + admin: string; }; } | { update_rewarding_validator_address: { @@ -82,12 +68,16 @@ export type ExecuteMsg = { }; } | { update_contract_state_params: { - updated_parameters: ContractStateParams; + update: ContractStateParamsUpdate; }; } | { - update_active_set_size: { - active_set_size: number; + update_current_nym_node_semver: { + current_version: string; + }; +} | { + update_active_set_distribution: { force_immediately: boolean; + update: ActiveSetUpdate; }; } | { update_rewarding_params: { @@ -102,24 +92,23 @@ export type ExecuteMsg = { }; } | { begin_epoch_transition: {}; -} | { - advance_current_epoch: { - expected_active_set_size: number; - new_rewarded_set: LayerAssignment[]; - }; } | { reconcile_epoch_events: { limit?: number | null; }; +} | { + assign_roles: { + assignment: RoleAssignment; + }; } | { bond_mixnode: { - cost_params: MixNodeCostParams; + cost_params: NodeCostParams; mix_node: MixNode; owner_signature: MessageSignature; }; } | { bond_mixnode_on_behalf: { - cost_params: MixNodeCostParams; + cost_params: NodeCostParams; mix_node: MixNode; owner: string; owner_signature: MessageSignature; @@ -146,12 +135,12 @@ export type ExecuteMsg = { owner: string; }; } | { - update_mixnode_cost_params: { - new_costs: MixNodeCostParams; + update_cost_params: { + new_costs: NodeCostParams; }; } | { update_mixnode_cost_params_on_behalf: { - new_costs: MixNodeCostParams; + new_costs: NodeCostParams; owner: string; }; } | { @@ -163,6 +152,8 @@ export type ExecuteMsg = { new_config: MixNodeConfigUpdate; owner: string; }; +} | { + migrate_mixnode: {}; } | { bond_gateway: { gateway: Gateway; @@ -190,8 +181,24 @@ export type ExecuteMsg = { owner: string; }; } | { - delegate_to_mixnode: { - mix_id: number; + migrate_gateway: { + cost_params?: NodeCostParams | null; + }; +} | { + bond_nym_node: { + cost_params: NodeCostParams; + node: NymNode; + owner_signature: MessageSignature; + }; +} | { + unbond_nym_node: {}; +} | { + update_node_config: { + update: NodeConfigUpdate; + }; +} | { + delegate: { + node_id: number; }; } | { delegate_to_mixnode_on_behalf: { @@ -199,8 +206,8 @@ export type ExecuteMsg = { mix_id: number; }; } | { - undelegate_from_mixnode: { - mix_id: number; + undelegate: { + node_id: number; }; } | { undelegate_from_mixnode_on_behalf: { @@ -208,9 +215,9 @@ export type ExecuteMsg = { mix_id: number; }; } | { - reward_mixnode: { - mix_id: number; - performance: Percent; + reward_node: { + node_id: number; + params: NodeRewardingParameters; }; } | { withdraw_operator_reward: {}; @@ -220,42 +227,62 @@ export type ExecuteMsg = { }; } | { withdraw_delegator_reward: { - mix_id: number; + node_id: number; }; } | { withdraw_delegator_reward_on_behalf: { mix_id: number; owner: string; }; +} | { + migrate_vested_mix_node: {}; +} | { + migrate_vested_delegation: { + mix_id: number; + }; }; -export type Layer = "One" | "Two" | "Three"; -export type FamilyHead = string; +export type Role = "eg" | "l1" | "l2" | "l3" | "xg" | "stb"; export type MessageSignature = number[]; -export type Uint128 = string; -export interface ContractStateParams { - minimum_gateway_pledge: Coin; - minimum_mixnode_delegation?: Coin | null; - minimum_mixnode_pledge: Coin; +export interface ContractStateParamsUpdate { + config_score_params?: ConfigScoreParamsUpdate | null; + delegations_params?: DelegationsParams | null; + operators_params?: OperatorsParamsUpdate | null; +} +export interface ConfigScoreParamsUpdate { + version_score_formula_params?: VersionScoreFormulaParams | null; + version_weights?: OutdatedVersionWeights | null; +} +export interface DelegationsParams { + minimum_delegation?: Coin | null; } export interface Coin { amount: Uint128; denom: string; - [k: string]: unknown; +} +export interface OperatorsParamsUpdate { + interval_operating_cost?: RangedValueForUint128 | null; + minimum_pledge?: Coin | null; + profit_margin?: RangedValueForPercent | null; +} +export interface ActiveSetUpdate { + entry_gateways: number; + exit_gateways: number; + mixnodes: number; } export interface IntervalRewardingParamsUpdate { active_set_work_factor?: Decimal | null; interval_pool_emission?: Percent | null; reward_pool?: Decimal | null; - rewarded_set_size?: number | null; + rewarded_set_params?: RewardedSetParams | null; staking_supply?: Decimal | null; staking_supply_scale_factor?: Percent | null; sybil_resistance_percent?: Percent | null; } -export interface LayerAssignment { - layer: Layer; - mix_id: number; +export interface RoleAssignment { + nodes: number[]; + role: Role; } -export interface MixNodeCostParams { +export interface NodeCostParams { interval_operating_cost: Coin; profit_margin_percent: Percent; } @@ -291,32 +318,22 @@ export interface GatewayConfigUpdate { mix_port: number; version: string; } +export interface NymNode { + custom_http_port?: number | null; + host: string; + identity_key: string; +} +export interface NodeConfigUpdate { + custom_http_port?: number | null; + host?: string | null; + restore_default_http_port?: boolean; +} +export interface NodeRewardingParameters { + performance: Percent; + work_factor: Decimal; +} export type QueryMsg = { - get_all_families_paged: { - limit?: number | null; - start_after?: string | null; - }; -} | { - get_all_members_paged: { - limit?: number | null; - start_after?: string | null; - }; -} | { - get_family_by_head: { - head: string; - }; -} | { - get_family_by_label: { - label: string; - }; -} | { - get_family_members_by_head: { - head: string; - }; -} | { - get_family_members_by_label: { - label: string; - }; + admin: {}; } | { get_contract_version: {}; } | { @@ -327,17 +344,19 @@ export type QueryMsg = { get_state_params: {}; } | { get_state: {}; +} | { + get_current_nym_node_version: {}; +} | { + get_nym_node_version_history: { + limit?: number | null; + start_after?: number | null; + }; } | { get_rewarding_params: {}; } | { get_epoch_status: {}; } | { get_current_interval_details: {}; -} | { - get_rewarded_set: { - limit?: number | null; - start_after?: number | null; - }; } | { get_mix_node_bonds: { limit?: number | null; @@ -389,8 +408,6 @@ export type QueryMsg = { get_bonded_mixnode_details_by_identity: { mix_identity: string; }; -} | { - get_layer_distribution: {}; } | { get_gateways: { limit?: number | null; @@ -405,9 +422,71 @@ export type QueryMsg = { address: string; }; } | { - get_mixnode_delegations: { + get_preassigned_gateway_ids: { limit?: number | null; - mix_id: number; + start_after?: string | null; + }; +} | { + get_nym_node_bonds_paged: { + limit?: number | null; + start_after?: number | null; + }; +} | { + get_nym_nodes_detailed_paged: { + limit?: number | null; + start_after?: number | null; + }; +} | { + get_unbonded_nym_node: { + node_id: number; + }; +} | { + get_unbonded_nym_nodes_paged: { + limit?: number | null; + start_after?: number | null; + }; +} | { + get_unbonded_nym_nodes_by_owner_paged: { + limit?: number | null; + owner: string; + start_after?: number | null; + }; +} | { + get_unbonded_nym_nodes_by_identity_key_paged: { + identity_key: string; + limit?: number | null; + start_after?: number | null; + }; +} | { + get_owned_nym_node: { + address: string; + }; +} | { + get_nym_node_details: { + node_id: number; + }; +} | { + get_nym_node_details_by_identity_key: { + node_identity: string; + }; +} | { + get_node_rewarding_details: { + node_id: number; + }; +} | { + get_node_stake_saturation: { + node_id: number; + }; +} | { + get_role_assignment: { + role: Role; + }; +} | { + get_rewarded_set_metadata: {}; +} | { + get_node_delegations: { + limit?: number | null; + node_id: number; start_after?: string | null; }; } | { @@ -419,7 +498,7 @@ export type QueryMsg = { } | { get_delegation_details: { delegator: string; - mix_id: number; + node_id: number; proxy?: string | null; }; } | { @@ -432,26 +511,27 @@ export type QueryMsg = { address: string; }; } | { - get_pending_mix_node_operator_reward: { - mix_id: number; + get_pending_node_operator_reward: { + node_id: number; }; } | { get_pending_delegator_reward: { address: string; - mix_id: number; + node_id: number; proxy?: string | null; }; } | { get_estimated_current_epoch_operator_reward: { estimated_performance: Percent; - mix_id: number; + estimated_work?: Decimal | null; + node_id: number; }; } | { get_estimated_current_epoch_delegator_reward: { address: string; estimated_performance: Percent; - mix_id: number; - proxy?: string | null; + estimated_work?: Decimal | null; + node_id: number; }; } | { get_pending_epoch_events: { @@ -477,10 +557,18 @@ export type QueryMsg = { get_signing_nonce: { address: string; }; +} | { + get_key_rotation_state: {}; +} | { + get_key_rotation_id: {}; }; export interface MigrateMsg { + unsafe_skip_state_updates?: boolean | null; vesting_contract_address?: string | null; } +export interface AdminResponse { + admin?: string | null; +} export type Addr = string; export interface PagedAllDelegationsResponse { delegations: Delegation[]; @@ -490,23 +578,10 @@ export interface Delegation { amount: Coin; cumulative_reward_ratio: Decimal; height: number; - mix_id: number; + node_id: number; owner: Addr; proxy?: Addr | null; } -export interface PagedFamiliesResponse { - families: Family[]; - start_next_after?: string | null; -} -export interface Family { - head: FamilyHead; - label: string; - proxy?: string | null; -} -export interface PagedMembersResponse { - members: [string, FamilyHead][]; - start_next_after?: string | null; -} export interface MixnodeDetailsByIdentityResponse { identity_key: string; mixnode_details?: MixNodeDetails | null; @@ -514,12 +589,11 @@ export interface MixnodeDetailsByIdentityResponse { export interface MixNodeDetails { bond_information: MixNodeBond; pending_changes?: PendingMixNodeChanges; - rewarding_details: MixNodeRewarding; + rewarding_details: NodeRewarding; } export interface MixNodeBond { bonding_height: number; is_unbonding: boolean; - layer: Layer; mix_id: number; mix_node: MixNode; original_pledge: Coin; @@ -527,10 +601,11 @@ export interface MixNodeBond { proxy?: Addr | null; } export interface PendingMixNodeChanges { + cost_params_change?: number | null; pledge_change?: number | null; } -export interface MixNodeRewarding { - cost_params: MixNodeCostParams; +export interface NodeRewarding { + cost_params: NodeCostParams; delegates: Decimal; last_rewarded_epoch: number; operator: Decimal; @@ -545,9 +620,12 @@ export interface ContractVersion { export interface ContractBuildInformation { build_timestamp: string; build_version: string; + cargo_debug?: string; + cargo_opt_level?: string; commit_branch: string; commit_sha: string; commit_timestamp: string; + contract_name?: string; rustc_version: string; } export interface CurrentIntervalResponse { @@ -563,11 +641,29 @@ export interface Interval { epochs_in_interval: number; id: number; total_elapsed_epochs: number; - [k: string]: unknown; } -export interface MixNodeDelegationResponse { +export interface CurrentNymNodeVersionResponse { + version?: HistoricalNymNodeVersionEntry | null; +} +export interface HistoricalNymNodeVersionEntry { + id: number; + version_information: HistoricalNymNodeVersion; +} +export interface HistoricalNymNodeVersion { + difference_since_genesis: TotalVersionDifference; + introduced_at_height: number; + semver: string; +} +export interface TotalVersionDifference { + major: number; + minor: number; + patch: number; + prerelease: number; +} +export interface NodeDelegationResponse { delegation?: Delegation | null; mixnode_still_bonded: boolean; + node_still_bonded: boolean; } export interface PagedDelegatorDelegationsResponse { delegations: Delegation[]; @@ -578,7 +674,11 @@ export type EpochState = "in_progress" | { final_node_id: number; last_rewarded: number; }; -} | "reconciling_events" | "advancing_epoch"; +} | "reconciling_events" | { + role_assignment: { + next: Role; + }; +}; export interface EpochStatus { being_advanced_by: Addr; state: EpochState; @@ -590,22 +690,6 @@ export interface EstimatedCurrentEpochRewardResponse { estimation?: Coin | null; original_stake?: Coin | null; } -export interface FamilyByHeadResponse { - family?: Family | null; - head: FamilyHead; -} -export interface FamilyByLabelResponse { - family?: Family | null; - label: string; -} -export interface FamilyMembersByHeadResponse { - head: FamilyHead; - members: string[]; -} -export interface FamilyMembersByLabelResponse { - label: string; - members: string[]; -} export interface GatewayBondResponse { gateway?: GatewayBond | null; identity: string; @@ -622,10 +706,12 @@ export interface PagedGatewayResponse { per_page: number; start_next_after?: string | null; } -export interface LayerDistribution { - layer1: number; - layer2: number; - layer3: number; +export interface KeyRotationIdResponse { + rotation_id: number; +} +export interface KeyRotationState { + initial_epoch_id: number; + validity_epochs: number; } export interface PagedMixnodeBondsResponse { nodes: MixNodeBond[]; @@ -637,22 +723,68 @@ export interface PagedMixnodesDetailsResponse { per_page: number; start_next_after?: number | null; } -export interface PagedMixNodeDelegationsResponse { - delegations: Delegation[]; - start_next_after?: string | null; -} export interface MixnodeDetailsResponse { mix_id: number; mixnode_details?: MixNodeDetails | null; } export interface MixnodeRewardingDetailsResponse { mix_id: number; - rewarding_details?: MixNodeRewarding | null; + rewarding_details?: NodeRewarding | null; +} +export interface PagedNodeDelegationsResponse { + delegations: Delegation[]; + start_next_after?: string | null; +} +export interface NodeRewardingDetailsResponse { + node_id: number; + rewarding_details?: NodeRewarding | null; +} +export interface StakeSaturationResponse { + current_saturation?: Decimal | null; + node_id: number; + uncapped_saturation?: Decimal | null; } export interface NumberOfPendingEventsResponse { epoch_events: number; interval_events: number; } +export interface PagedNymNodeBondsResponse { + nodes: NymNodeBond[]; + start_next_after?: number | null; +} +export interface NymNodeBond { + bonding_height: number; + is_unbonding: boolean; + node: NymNode; + node_id: number; + original_pledge: Coin; + owner: Addr; +} +export interface NodeDetailsResponse { + details?: NymNodeDetails | null; + node_id: number; +} +export interface NymNodeDetails { + bond_information: NymNodeBond; + pending_changes: PendingNodeChanges; + rewarding_details: NodeRewarding; +} +export interface PendingNodeChanges { + cost_params_change?: number | null; + pledge_change?: number | null; +} +export interface NodeDetailsByIdentityResponse { + details?: NymNodeDetails | null; + identity_key: string; +} +export interface NymNodeVersionHistoryResponse { + history: HistoricalNymNodeVersionEntry[]; + start_next_after?: number | null; +} +export interface PagedNymNodeDetailsResponse { + nodes: NymNodeDetails[]; + start_next_after?: number | null; +} export interface GatewayOwnershipResponse { address: Addr; gateway?: GatewayBond | null; @@ -661,32 +793,47 @@ export interface MixOwnershipResponse { address: Addr; mixnode_details?: MixNodeDetails | null; } +export interface NodeOwnershipResponse { + address: Addr; + details?: NymNodeDetails | null; +} export interface PendingRewardResponse { amount_earned?: Coin | null; amount_earned_detailed?: Decimal | null; amount_staked?: Coin | null; mixnode_still_fully_bonded: boolean; + node_still_fully_bonded: boolean; } export type PendingEpochEventKind = { delegate: { amount: Coin; - mix_id: number; + node_id: number; owner: Addr; proxy?: Addr | null; }; } | { undelegate: { - mix_id: number; + node_id: number; owner: Addr; proxy?: Addr | null; }; } | { - pledge_more: { + nym_node_pledge_more: { + amount: Coin; + node_id: number; + }; +} | { + mixnode_pledge_more: { amount: Coin; mix_id: number; }; } | { - decrease_pledge: { + nym_node_decrease_pledge: { + decrease_by: Coin; + node_id: number; + }; +} | { + mixnode_decrease_pledge: { decrease_by: Coin; mix_id: number; }; @@ -695,8 +842,12 @@ export type PendingEpochEventKind = { mix_id: number; }; } | { - update_active_set_size: { - new_size: number; + unbond_nym_node: { + node_id: number; + }; +} | { + update_active_set: { + update: ActiveSetUpdate; }; }; export interface PendingEpochEventResponse { @@ -719,7 +870,12 @@ export interface PendingEpochEvent { export type PendingIntervalEventKind = { change_mix_cost_params: { mix_id: number; - new_costs: MixNodeCostParams; + new_costs: NodeCostParams; + }; +} | { + change_nym_node_cost_params: { + new_costs: NodeCostParams; + node_id: number; }; } | { update_rewarding_params: { @@ -748,15 +904,34 @@ export interface PendingIntervalEvent { event: PendingIntervalEventData; id: number; } -export type RewardedSetNodeStatus = "active" | "standby"; -export interface PagedRewardedSetResponse { - nodes: [number, RewardedSetNodeStatus][]; - start_next_after?: number | null; +export interface PreassignedGatewayIdsResponse { + ids: PreassignedId[]; + start_next_after?: string | null; +} +export interface PreassignedId { + identity: string; + node_id: number; +} +export interface RolesMetadataResponse { + metadata: RewardedSetMetadata; +} +export interface RewardedSetMetadata { + entry_gateway_metadata: RoleMetadata; + epoch_id: number; + exit_gateway_metadata: RoleMetadata; + fully_assigned: boolean; + layer1_metadata: RoleMetadata; + layer2_metadata: RoleMetadata; + layer3_metadata: RoleMetadata; + standby_metadata: RoleMetadata; +} +export interface RoleMetadata { + highest_id: number; + num_nodes: number; } export interface RewardingParams { - active_set_size: number; interval: IntervalRewardParams; - rewarded_set_size: number; + rewarded_set: RewardedSetParams; } export interface IntervalRewardParams { active_set_work_factor: Decimal; @@ -769,19 +944,37 @@ export interface IntervalRewardParams { sybil_resistance: Percent; } export type String = string; +export interface EpochAssignmentResponse { + epoch_id: number; + nodes: number[]; +} export type Uint32 = number; -export interface StakeSaturationResponse { +export interface MixStakeSaturationResponse { current_saturation?: Decimal | null; mix_id: number; uncapped_saturation?: Decimal | null; } export interface ContractState { - owner: Addr; + owner?: Addr | null; params: ContractStateParams; rewarding_denom: string; rewarding_validator_address: Addr; vesting_contract_address: Addr; } +export interface ContractStateParams { + config_score_params: ConfigScoreParams; + delegations_params: DelegationsParams; + operators_params: OperatorsParams; +} +export interface ConfigScoreParams { + version_score_formula_params: VersionScoreFormulaParams; + version_weights: OutdatedVersionWeights; +} +export interface OperatorsParams { + interval_operating_cost: RangedValueForUint128; + minimum_pledge: Coin; + profit_margin: RangedValueForPercent; +} export interface UnbondedMixnodeResponse { mix_id: number; unbonded_info?: UnbondedMixnode | null; @@ -797,3 +990,17 @@ export interface PagedUnbondedMixnodesResponse { per_page: number; start_next_after?: number | null; } +export interface UnbondedNodeResponse { + details?: UnbondedNymNode | null; + node_id: number; +} +export interface UnbondedNymNode { + identity_key: string; + node_id: number; + owner: Addr; + unbonding_height: number; +} +export interface PagedUnbondedNymNodesResponse { + nodes: UnbondedNymNode[]; + start_next_after?: number | null; +} \ No newline at end of file diff --git a/sdk/typescript/codegen/contract-clients/src/Vesting.client.ts b/sdk/typescript/codegen/contract-clients/src/Vesting.client.ts index 57e08e327a..187fc80b08 100644 --- a/sdk/typescript/codegen/contract-clients/src/Vesting.client.ts +++ b/sdk/typescript/codegen/contract-clients/src/Vesting.client.ts @@ -1,13 +1,12 @@ /** -* This file was automatically generated by @cosmwasm/ts-codegen@0.35.3. +* This file was automatically generated by @cosmwasm/ts-codegen@1.13.3. * DO NOT MODIFY IT BY HAND. Instead, modify the source JSONSchema file, * and run the @cosmwasm/ts-codegen generate command to regenerate this file. */ -import { CosmWasmClient, SigningCosmWasmClient, ExecuteResult } from "@cosmjs/cosmwasm-stargate"; -import { StdFee } from "@cosmjs/amino"; -import { InstantiateMsg, ExecuteMsg, FamilyHead, MessageSignature, Uint128, Percent, Decimal, PledgeCap, Coin, MixNodeCostParams, MixNodeConfigUpdate, VestingSpecification, MixNode, Gateway, GatewayConfigUpdate, QueryMsg, Timestamp, Uint64, MigrateMsg, Addr, Account, VestingPeriod, AccountsResponse, BaseVestingAccountInfo, VestingCoinsResponse, AccountVestingCoins, AllDelegationsResponse, VestingDelegation, ContractVersion, ContractBuildInformation, Period, DelegationTimesResponse, NullablePledgeData, PledgeData, OriginalVestingResponse } from "./Vesting.types"; -import { GetCw2ContractVersionResponse } from './types'; +import { ICosmWasmClient, ISigningCosmWasmClient } from "./baseClient"; +import { StdFee } from "@interchainjs/types"; +import { InstantiateMsg, ExecuteMsg, Uint128, Percent, Decimal, PledgeCap, MessageSignature, Coin, NodeCostParams, MixNodeConfigUpdate, VestingSpecification, MixNode, Gateway, GatewayConfigUpdate, QueryMsg, Timestamp, Uint64, MigrateMsg, Addr, Account, VestingPeriod, AccountsResponse, BaseVestingAccountInfo, VestingCoinsResponse, AccountVestingCoins, AllDelegationsResponse, VestingDelegation, ContractVersion, ContractBuildInformation, Period, DelegationTimesResponse, NullablePledgeData, PledgeData, OriginalVestingResponse } from "./Vesting.types"; export interface VestingReadOnlyInterface { contractAddress: string; getContractVersion: () => Promise; @@ -156,10 +155,9 @@ export interface VestingReadOnlyInterface { }) => Promise; } export class VestingQueryClient implements VestingReadOnlyInterface { - client: CosmWasmClient; + client: ICosmWasmClient; contractAddress: string; - - constructor(client: CosmWasmClient, contractAddress: string) { + constructor(client: ICosmWasmClient, contractAddress: string) { this.client = client; this.contractAddress = contractAddress; this.getContractVersion = this.getContractVersion.bind(this); @@ -189,7 +187,6 @@ export class VestingQueryClient implements VestingReadOnlyInterface { this.getDelegationTimes = this.getDelegationTimes.bind(this); this.getAllDelegations = this.getAllDelegations.bind(this); } - getContractVersion = async (): Promise => { return this.client.queryContractSmart(this.contractAddress, { get_contract_version: {} @@ -501,56 +498,34 @@ export class VestingQueryClient implements VestingReadOnlyInterface { export interface VestingInterface extends VestingReadOnlyInterface { contractAddress: string; sender: string; - createFamily: ({ - label - }: { - label: string; - }, fee?: number | StdFee | "auto", memo?: string, _funds?: Coin[]) => Promise; - joinFamily: ({ - familyHead, - joinPermit - }: { - familyHead: FamilyHead; - joinPermit: MessageSignature; - }, fee?: number | StdFee | "auto", memo?: string, _funds?: Coin[]) => Promise; - leaveFamily: ({ - familyHead - }: { - familyHead: FamilyHead; - }, fee?: number | StdFee | "auto", memo?: string, _funds?: Coin[]) => Promise; - kickFamilyMember: ({ - member - }: { - member: string; - }, fee?: number | StdFee | "auto", memo?: string, _funds?: Coin[]) => Promise; trackReward: ({ address, amount }: { address: string; amount: Coin; - }, fee?: number | StdFee | "auto", memo?: string, _funds?: Coin[]) => Promise; - claimOperatorReward: (fee?: number | StdFee | "auto", memo?: string, _funds?: Coin[]) => Promise; + }, fee_?: number | StdFee | "auto", memo_?: string, funds_?: Coin[]) => Promise; + claimOperatorReward: (fee_?: number | StdFee | "auto", memo_?: string, funds_?: Coin[]) => Promise; claimDelegatorReward: ({ mixId }: { mixId: number; - }, fee?: number | StdFee | "auto", memo?: string, _funds?: Coin[]) => Promise; + }, fee_?: number | StdFee | "auto", memo_?: string, funds_?: Coin[]) => Promise; updateMixnodeCostParams: ({ newCosts }: { - newCosts: MixNodeCostParams; - }, fee?: number | StdFee | "auto", memo?: string, _funds?: Coin[]) => Promise; + newCosts: NodeCostParams; + }, fee_?: number | StdFee | "auto", memo_?: string, funds_?: Coin[]) => Promise; updateMixnodeConfig: ({ newConfig }: { newConfig: MixNodeConfigUpdate; - }, fee?: number | StdFee | "auto", memo?: string, _funds?: Coin[]) => Promise; + }, fee_?: number | StdFee | "auto", memo_?: string, funds_?: Coin[]) => Promise; updateMixnetAddress: ({ address }: { address: string; - }, fee?: number | StdFee | "auto", memo?: string, _funds?: Coin[]) => Promise; + }, fee_?: number | StdFee | "auto", memo_?: string, funds_?: Coin[]) => Promise; delegateToMixnode: ({ amount, mixId, @@ -559,14 +534,14 @@ export interface VestingInterface extends VestingReadOnlyInterface { amount: Coin; mixId: number; onBehalfOf?: string; - }, fee?: number | StdFee | "auto", memo?: string, _funds?: Coin[]) => Promise; + }, fee_?: number | StdFee | "auto", memo_?: string, funds_?: Coin[]) => Promise; undelegateFromMixnode: ({ mixId, onBehalfOf }: { mixId: number; onBehalfOf?: string; - }, fee?: number | StdFee | "auto", memo?: string, _funds?: Coin[]) => Promise; + }, fee_?: number | StdFee | "auto", memo_?: string, funds_?: Coin[]) => Promise; createAccount: ({ cap, ownerAddress, @@ -577,12 +552,12 @@ export interface VestingInterface extends VestingReadOnlyInterface { ownerAddress: string; stakingAddress?: string; vestingSpec?: VestingSpecification; - }, fee?: number | StdFee | "auto", memo?: string, _funds?: Coin[]) => Promise; + }, fee_?: number | StdFee | "auto", memo_?: string, funds_?: Coin[]) => Promise; withdrawVestedCoins: ({ amount }: { amount: Coin; - }, fee?: number | StdFee | "auto", memo?: string, _funds?: Coin[]) => Promise; + }, fee_?: number | StdFee | "auto", memo_?: string, funds_?: Coin[]) => Promise; trackUndelegation: ({ amount, mixId, @@ -591,7 +566,7 @@ export interface VestingInterface extends VestingReadOnlyInterface { amount: Coin; mixId: number; owner: string; - }, fee?: number | StdFee | "auto", memo?: string, _funds?: Coin[]) => Promise; + }, fee_?: number | StdFee | "auto", memo_?: string, funds_?: Coin[]) => Promise; bondMixnode: ({ amount, costParams, @@ -599,35 +574,35 @@ export interface VestingInterface extends VestingReadOnlyInterface { ownerSignature }: { amount: Coin; - costParams: MixNodeCostParams; + costParams: NodeCostParams; mixNode: MixNode; ownerSignature: MessageSignature; - }, fee?: number | StdFee | "auto", memo?: string, _funds?: Coin[]) => Promise; + }, fee_?: number | StdFee | "auto", memo_?: string, funds_?: Coin[]) => Promise; pledgeMore: ({ amount }: { amount: Coin; - }, fee?: number | StdFee | "auto", memo?: string, _funds?: Coin[]) => Promise; + }, fee_?: number | StdFee | "auto", memo_?: string, funds_?: Coin[]) => Promise; decreasePledge: ({ amount }: { amount: Coin; - }, fee?: number | StdFee | "auto", memo?: string, _funds?: Coin[]) => Promise; - unbondMixnode: (fee?: number | StdFee | "auto", memo?: string, _funds?: Coin[]) => Promise; + }, fee_?: number | StdFee | "auto", memo_?: string, funds_?: Coin[]) => Promise; + unbondMixnode: (fee_?: number | StdFee | "auto", memo_?: string, funds_?: Coin[]) => Promise; trackUnbondMixnode: ({ amount, owner }: { amount: Coin; owner: string; - }, fee?: number | StdFee | "auto", memo?: string, _funds?: Coin[]) => Promise; + }, fee_?: number | StdFee | "auto", memo_?: string, funds_?: Coin[]) => Promise; trackDecreasePledge: ({ amount, owner }: { amount: Coin; owner: string; - }, fee?: number | StdFee | "auto", memo?: string, _funds?: Coin[]) => Promise; + }, fee_?: number | StdFee | "auto", memo_?: string, funds_?: Coin[]) => Promise; bondGateway: ({ amount, gateway, @@ -636,52 +611,59 @@ export interface VestingInterface extends VestingReadOnlyInterface { amount: Coin; gateway: Gateway; ownerSignature: MessageSignature; - }, fee?: number | StdFee | "auto", memo?: string, _funds?: Coin[]) => Promise; - unbondGateway: (fee?: number | StdFee | "auto", memo?: string, _funds?: Coin[]) => Promise; + }, fee_?: number | StdFee | "auto", memo_?: string, funds_?: Coin[]) => Promise; + unbondGateway: (fee_?: number | StdFee | "auto", memo_?: string, funds_?: Coin[]) => Promise; trackUnbondGateway: ({ amount, owner }: { amount: Coin; owner: string; - }, fee?: number | StdFee | "auto", memo?: string, _funds?: Coin[]) => Promise; + }, fee_?: number | StdFee | "auto", memo_?: string, funds_?: Coin[]) => Promise; updateGatewayConfig: ({ newConfig }: { newConfig: GatewayConfigUpdate; - }, fee?: number | StdFee | "auto", memo?: string, _funds?: Coin[]) => Promise; + }, fee_?: number | StdFee | "auto", memo_?: string, funds_?: Coin[]) => Promise; transferOwnership: ({ toAddress }: { toAddress: string; - }, fee?: number | StdFee | "auto", memo?: string, _funds?: Coin[]) => Promise; + }, fee_?: number | StdFee | "auto", memo_?: string, funds_?: Coin[]) => Promise; updateStakingAddress: ({ toAddress }: { toAddress?: string; - }, fee?: number | StdFee | "auto", memo?: string, _funds?: Coin[]) => Promise; + }, fee_?: number | StdFee | "auto", memo_?: string, funds_?: Coin[]) => Promise; updateLockedPledgeCap: ({ address, cap }: { address: string; cap: PledgeCap; - }, fee?: number | StdFee | "auto", memo?: string, _funds?: Coin[]) => Promise; + }, fee_?: number | StdFee | "auto", memo_?: string, funds_?: Coin[]) => Promise; + trackMigratedMixnode: ({ + owner + }: { + owner: string; + }, fee_?: number | StdFee | "auto", memo_?: string, funds_?: Coin[]) => Promise; + trackMigratedDelegation: ({ + mixId, + owner + }: { + mixId: number; + owner: string; + }, fee_?: number | StdFee | "auto", memo_?: string, funds_?: Coin[]) => Promise; } export class VestingClient extends VestingQueryClient implements VestingInterface { - client: SigningCosmWasmClient; + client: ISigningCosmWasmClient; sender: string; contractAddress: string; - - constructor(client: SigningCosmWasmClient, sender: string, contractAddress: string) { + constructor(client: ISigningCosmWasmClient, sender: string, contractAddress: string) { super(client, contractAddress); this.client = client; this.sender = sender; this.contractAddress = contractAddress; - this.createFamily = this.createFamily.bind(this); - this.joinFamily = this.joinFamily.bind(this); - this.leaveFamily = this.leaveFamily.bind(this); - this.kickFamilyMember = this.kickFamilyMember.bind(this); this.trackReward = this.trackReward.bind(this); this.claimOperatorReward = this.claimOperatorReward.bind(this); this.claimDelegatorReward = this.claimDelegatorReward.bind(this); @@ -706,117 +688,71 @@ export class VestingClient extends VestingQueryClient implements VestingInterfac this.transferOwnership = this.transferOwnership.bind(this); this.updateStakingAddress = this.updateStakingAddress.bind(this); this.updateLockedPledgeCap = this.updateLockedPledgeCap.bind(this); + this.trackMigratedMixnode = this.trackMigratedMixnode.bind(this); + this.trackMigratedDelegation = this.trackMigratedDelegation.bind(this); } - - createFamily = async ({ - label - }: { - label: string; - }, fee: number | StdFee | "auto" = "auto", memo?: string, _funds?: Coin[]): Promise => { - return await this.client.execute(this.sender, this.contractAddress, { - create_family: { - label - } - }, fee, memo, _funds); - }; - joinFamily = async ({ - familyHead, - joinPermit - }: { - familyHead: FamilyHead; - joinPermit: MessageSignature; - }, fee: number | StdFee | "auto" = "auto", memo?: string, _funds?: Coin[]): Promise => { - return await this.client.execute(this.sender, this.contractAddress, { - join_family: { - family_head: familyHead, - join_permit: joinPermit - } - }, fee, memo, _funds); - }; - leaveFamily = async ({ - familyHead - }: { - familyHead: FamilyHead; - }, fee: number | StdFee | "auto" = "auto", memo?: string, _funds?: Coin[]): Promise => { - return await this.client.execute(this.sender, this.contractAddress, { - leave_family: { - family_head: familyHead - } - }, fee, memo, _funds); - }; - kickFamilyMember = async ({ - member - }: { - member: string; - }, fee: number | StdFee | "auto" = "auto", memo?: string, _funds?: Coin[]): Promise => { - return await this.client.execute(this.sender, this.contractAddress, { - kick_family_member: { - member - } - }, fee, memo, _funds); - }; trackReward = async ({ address, amount }: { address: string; amount: Coin; - }, fee: number | StdFee | "auto" = "auto", memo?: string, _funds?: Coin[]): Promise => { + }, fee_: number | StdFee | "auto" = "auto", memo_?: string, funds_?: Coin[]): Promise => { return await this.client.execute(this.sender, this.contractAddress, { track_reward: { address, amount } - }, fee, memo, _funds); + }, fee_, memo_, funds_); }; - claimOperatorReward = async (fee: number | StdFee | "auto" = "auto", memo?: string, _funds?: Coin[]): Promise => { + claimOperatorReward = async (fee_: number | StdFee | "auto" = "auto", memo_?: string, funds_?: Coin[]): Promise => { return await this.client.execute(this.sender, this.contractAddress, { claim_operator_reward: {} - }, fee, memo, _funds); + }, fee_, memo_, funds_); }; claimDelegatorReward = async ({ mixId }: { mixId: number; - }, fee: number | StdFee | "auto" = "auto", memo?: string, _funds?: Coin[]): Promise => { + }, fee_: number | StdFee | "auto" = "auto", memo_?: string, funds_?: Coin[]): Promise => { return await this.client.execute(this.sender, this.contractAddress, { claim_delegator_reward: { mix_id: mixId } - }, fee, memo, _funds); + }, fee_, memo_, funds_); }; updateMixnodeCostParams = async ({ newCosts }: { - newCosts: MixNodeCostParams; - }, fee: number | StdFee | "auto" = "auto", memo?: string, _funds?: Coin[]): Promise => { + newCosts: NodeCostParams; + }, fee_: number | StdFee | "auto" = "auto", memo_?: string, funds_?: Coin[]): Promise => { return await this.client.execute(this.sender, this.contractAddress, { update_mixnode_cost_params: { new_costs: newCosts } - }, fee, memo, _funds); + }, fee_, memo_, funds_); }; updateMixnodeConfig = async ({ newConfig }: { newConfig: MixNodeConfigUpdate; - }, fee: number | StdFee | "auto" = "auto", memo?: string, _funds?: Coin[]): Promise => { + }, fee_: number | StdFee | "auto" = "auto", memo_?: string, funds_?: Coin[]): Promise => { return await this.client.execute(this.sender, this.contractAddress, { update_mixnode_config: { new_config: newConfig } - }, fee, memo, _funds); + }, fee_, memo_, funds_); }; updateMixnetAddress = async ({ address }: { address: string; - }, fee: number | StdFee | "auto" = "auto", memo?: string, _funds?: Coin[]): Promise => { + }, fee_: number | StdFee | "auto" = "auto", memo_?: string, funds_?: Coin[]): Promise => { return await this.client.execute(this.sender, this.contractAddress, { update_mixnet_address: { address } - }, fee, memo, _funds); + }, fee_, memo_, funds_); }; delegateToMixnode = async ({ amount, @@ -826,14 +762,14 @@ export class VestingClient extends VestingQueryClient implements VestingInterfac amount: Coin; mixId: number; onBehalfOf?: string; - }, fee: number | StdFee | "auto" = "auto", memo?: string, _funds?: Coin[]): Promise => { + }, fee_: number | StdFee | "auto" = "auto", memo_?: string, funds_?: Coin[]): Promise => { return await this.client.execute(this.sender, this.contractAddress, { delegate_to_mixnode: { amount, mix_id: mixId, on_behalf_of: onBehalfOf } - }, fee, memo, _funds); + }, fee_, memo_, funds_); }; undelegateFromMixnode = async ({ mixId, @@ -841,13 +777,13 @@ export class VestingClient extends VestingQueryClient implements VestingInterfac }: { mixId: number; onBehalfOf?: string; - }, fee: number | StdFee | "auto" = "auto", memo?: string, _funds?: Coin[]): Promise => { + }, fee_: number | StdFee | "auto" = "auto", memo_?: string, funds_?: Coin[]): Promise => { return await this.client.execute(this.sender, this.contractAddress, { undelegate_from_mixnode: { mix_id: mixId, on_behalf_of: onBehalfOf } - }, fee, memo, _funds); + }, fee_, memo_, funds_); }; createAccount = async ({ cap, @@ -859,7 +795,7 @@ export class VestingClient extends VestingQueryClient implements VestingInterfac ownerAddress: string; stakingAddress?: string; vestingSpec?: VestingSpecification; - }, fee: number | StdFee | "auto" = "auto", memo?: string, _funds?: Coin[]): Promise => { + }, fee_: number | StdFee | "auto" = "auto", memo_?: string, funds_?: Coin[]): Promise => { return await this.client.execute(this.sender, this.contractAddress, { create_account: { cap, @@ -867,18 +803,18 @@ export class VestingClient extends VestingQueryClient implements VestingInterfac staking_address: stakingAddress, vesting_spec: vestingSpec } - }, fee, memo, _funds); + }, fee_, memo_, funds_); }; withdrawVestedCoins = async ({ amount }: { amount: Coin; - }, fee: number | StdFee | "auto" = "auto", memo?: string, _funds?: Coin[]): Promise => { + }, fee_: number | StdFee | "auto" = "auto", memo_?: string, funds_?: Coin[]): Promise => { return await this.client.execute(this.sender, this.contractAddress, { withdraw_vested_coins: { amount } - }, fee, memo, _funds); + }, fee_, memo_, funds_); }; trackUndelegation = async ({ amount, @@ -888,14 +824,14 @@ export class VestingClient extends VestingQueryClient implements VestingInterfac amount: Coin; mixId: number; owner: string; - }, fee: number | StdFee | "auto" = "auto", memo?: string, _funds?: Coin[]): Promise => { + }, fee_: number | StdFee | "auto" = "auto", memo_?: string, funds_?: Coin[]): Promise => { return await this.client.execute(this.sender, this.contractAddress, { track_undelegation: { amount, mix_id: mixId, owner } - }, fee, memo, _funds); + }, fee_, memo_, funds_); }; bondMixnode = async ({ amount, @@ -904,10 +840,10 @@ export class VestingClient extends VestingQueryClient implements VestingInterfac ownerSignature }: { amount: Coin; - costParams: MixNodeCostParams; + costParams: NodeCostParams; mixNode: MixNode; ownerSignature: MessageSignature; - }, fee: number | StdFee | "auto" = "auto", memo?: string, _funds?: Coin[]): Promise => { + }, fee_: number | StdFee | "auto" = "auto", memo_?: string, funds_?: Coin[]): Promise => { return await this.client.execute(this.sender, this.contractAddress, { bond_mixnode: { amount, @@ -915,34 +851,34 @@ export class VestingClient extends VestingQueryClient implements VestingInterfac mix_node: mixNode, owner_signature: ownerSignature } - }, fee, memo, _funds); + }, fee_, memo_, funds_); }; pledgeMore = async ({ amount }: { amount: Coin; - }, fee: number | StdFee | "auto" = "auto", memo?: string, _funds?: Coin[]): Promise => { + }, fee_: number | StdFee | "auto" = "auto", memo_?: string, funds_?: Coin[]): Promise => { return await this.client.execute(this.sender, this.contractAddress, { pledge_more: { amount } - }, fee, memo, _funds); + }, fee_, memo_, funds_); }; decreasePledge = async ({ amount }: { amount: Coin; - }, fee: number | StdFee | "auto" = "auto", memo?: string, _funds?: Coin[]): Promise => { + }, fee_: number | StdFee | "auto" = "auto", memo_?: string, funds_?: Coin[]): Promise => { return await this.client.execute(this.sender, this.contractAddress, { decrease_pledge: { amount } - }, fee, memo, _funds); + }, fee_, memo_, funds_); }; - unbondMixnode = async (fee: number | StdFee | "auto" = "auto", memo?: string, _funds?: Coin[]): Promise => { + unbondMixnode = async (fee_: number | StdFee | "auto" = "auto", memo_?: string, funds_?: Coin[]): Promise => { return await this.client.execute(this.sender, this.contractAddress, { unbond_mixnode: {} - }, fee, memo, _funds); + }, fee_, memo_, funds_); }; trackUnbondMixnode = async ({ amount, @@ -950,13 +886,13 @@ export class VestingClient extends VestingQueryClient implements VestingInterfac }: { amount: Coin; owner: string; - }, fee: number | StdFee | "auto" = "auto", memo?: string, _funds?: Coin[]): Promise => { + }, fee_: number | StdFee | "auto" = "auto", memo_?: string, funds_?: Coin[]): Promise => { return await this.client.execute(this.sender, this.contractAddress, { track_unbond_mixnode: { amount, owner } - }, fee, memo, _funds); + }, fee_, memo_, funds_); }; trackDecreasePledge = async ({ amount, @@ -964,13 +900,13 @@ export class VestingClient extends VestingQueryClient implements VestingInterfac }: { amount: Coin; owner: string; - }, fee: number | StdFee | "auto" = "auto", memo?: string, _funds?: Coin[]): Promise => { + }, fee_: number | StdFee | "auto" = "auto", memo_?: string, funds_?: Coin[]): Promise => { return await this.client.execute(this.sender, this.contractAddress, { track_decrease_pledge: { amount, owner } - }, fee, memo, _funds); + }, fee_, memo_, funds_); }; bondGateway = async ({ amount, @@ -980,19 +916,19 @@ export class VestingClient extends VestingQueryClient implements VestingInterfac amount: Coin; gateway: Gateway; ownerSignature: MessageSignature; - }, fee: number | StdFee | "auto" = "auto", memo?: string, _funds?: Coin[]): Promise => { + }, fee_: number | StdFee | "auto" = "auto", memo_?: string, funds_?: Coin[]): Promise => { return await this.client.execute(this.sender, this.contractAddress, { bond_gateway: { amount, gateway, owner_signature: ownerSignature } - }, fee, memo, _funds); + }, fee_, memo_, funds_); }; - unbondGateway = async (fee: number | StdFee | "auto" = "auto", memo?: string, _funds?: Coin[]): Promise => { + unbondGateway = async (fee_: number | StdFee | "auto" = "auto", memo_?: string, funds_?: Coin[]): Promise => { return await this.client.execute(this.sender, this.contractAddress, { unbond_gateway: {} - }, fee, memo, _funds); + }, fee_, memo_, funds_); }; trackUnbondGateway = async ({ amount, @@ -1000,46 +936,46 @@ export class VestingClient extends VestingQueryClient implements VestingInterfac }: { amount: Coin; owner: string; - }, fee: number | StdFee | "auto" = "auto", memo?: string, _funds?: Coin[]): Promise => { + }, fee_: number | StdFee | "auto" = "auto", memo_?: string, funds_?: Coin[]): Promise => { return await this.client.execute(this.sender, this.contractAddress, { track_unbond_gateway: { amount, owner } - }, fee, memo, _funds); + }, fee_, memo_, funds_); }; updateGatewayConfig = async ({ newConfig }: { newConfig: GatewayConfigUpdate; - }, fee: number | StdFee | "auto" = "auto", memo?: string, _funds?: Coin[]): Promise => { + }, fee_: number | StdFee | "auto" = "auto", memo_?: string, funds_?: Coin[]): Promise => { return await this.client.execute(this.sender, this.contractAddress, { update_gateway_config: { new_config: newConfig } - }, fee, memo, _funds); + }, fee_, memo_, funds_); }; transferOwnership = async ({ toAddress }: { toAddress: string; - }, fee: number | StdFee | "auto" = "auto", memo?: string, _funds?: Coin[]): Promise => { + }, fee_: number | StdFee | "auto" = "auto", memo_?: string, funds_?: Coin[]): Promise => { return await this.client.execute(this.sender, this.contractAddress, { transfer_ownership: { to_address: toAddress } - }, fee, memo, _funds); + }, fee_, memo_, funds_); }; updateStakingAddress = async ({ toAddress }: { toAddress?: string; - }, fee: number | StdFee | "auto" = "auto", memo?: string, _funds?: Coin[]): Promise => { + }, fee_: number | StdFee | "auto" = "auto", memo_?: string, funds_?: Coin[]): Promise => { return await this.client.execute(this.sender, this.contractAddress, { update_staking_address: { to_address: toAddress } - }, fee, memo, _funds); + }, fee_, memo_, funds_); }; updateLockedPledgeCap = async ({ address, @@ -1047,12 +983,37 @@ export class VestingClient extends VestingQueryClient implements VestingInterfac }: { address: string; cap: PledgeCap; - }, fee: number | StdFee | "auto" = "auto", memo?: string, _funds?: Coin[]): Promise => { + }, fee_: number | StdFee | "auto" = "auto", memo_?: string, funds_?: Coin[]): Promise => { return await this.client.execute(this.sender, this.contractAddress, { update_locked_pledge_cap: { address, cap } - }, fee, memo, _funds); + }, fee_, memo_, funds_); }; -} + trackMigratedMixnode = async ({ + owner + }: { + owner: string; + }, fee_: number | StdFee | "auto" = "auto", memo_?: string, funds_?: Coin[]): Promise => { + return await this.client.execute(this.sender, this.contractAddress, { + track_migrated_mixnode: { + owner + } + }, fee_, memo_, funds_); + }; + trackMigratedDelegation = async ({ + mixId, + owner + }: { + mixId: number; + owner: string; + }, fee_: number | StdFee | "auto" = "auto", memo_?: string, funds_?: Coin[]): Promise => { + return await this.client.execute(this.sender, this.contractAddress, { + track_migrated_delegation: { + mix_id: mixId, + owner + } + }, fee_, memo_, funds_); + }; +} \ No newline at end of file diff --git a/sdk/typescript/codegen/contract-clients/src/Vesting.types.ts b/sdk/typescript/codegen/contract-clients/src/Vesting.types.ts index a07a32a242..8adbc94a8a 100644 --- a/sdk/typescript/codegen/contract-clients/src/Vesting.types.ts +++ b/sdk/typescript/codegen/contract-clients/src/Vesting.types.ts @@ -1,5 +1,5 @@ /** -* This file was automatically generated by @cosmwasm/ts-codegen@0.35.3. +* This file was automatically generated by @cosmwasm/ts-codegen@1.13.3. * DO NOT MODIFY IT BY HAND. Instead, modify the source JSONSchema file, * and run the @cosmwasm/ts-codegen generate command to regenerate this file. */ @@ -9,23 +9,6 @@ export interface InstantiateMsg { mixnet_contract_address: string; } export type ExecuteMsg = { - create_family: { - label: string; - }; -} | { - join_family: { - family_head: FamilyHead; - join_permit: MessageSignature; - }; -} | { - leave_family: { - family_head: FamilyHead; - }; -} | { - kick_family_member: { - member: string; - }; -} | { track_reward: { address: string; amount: Coin; @@ -38,7 +21,7 @@ export type ExecuteMsg = { }; } | { update_mixnode_cost_params: { - new_costs: MixNodeCostParams; + new_costs: NodeCostParams; }; } | { update_mixnode_config: { @@ -79,7 +62,7 @@ export type ExecuteMsg = { } | { bond_mixnode: { amount: Coin; - cost_params: MixNodeCostParams; + cost_params: NodeCostParams; mix_node: MixNode; owner_signature: MessageSignature; }; @@ -133,9 +116,16 @@ export type ExecuteMsg = { address: string; cap: PledgeCap; }; +} | { + track_migrated_mixnode: { + owner: string; + }; +} | { + track_migrated_delegation: { + mix_id: number; + owner: string; + }; }; -export type FamilyHead = string; -export type MessageSignature = number[]; export type Uint128 = string; export type Percent = Decimal; export type Decimal = string; @@ -144,12 +134,12 @@ export type PledgeCap = { } | { absolute: Uint128; }; +export type MessageSignature = number[]; export interface Coin { amount: Uint128; denom: string; - [k: string]: unknown; } -export interface MixNodeCostParams { +export interface NodeCostParams { interval_operating_cost: Coin; profit_margin_percent: Percent; } @@ -353,9 +343,12 @@ export interface ContractVersion { export interface ContractBuildInformation { build_timestamp: string; build_version: string; + cargo_debug?: string; + cargo_opt_level?: string; commit_branch: string; commit_sha: string; commit_timestamp: string; + contract_name?: string; rustc_version: string; } export type Period = "before" | { diff --git a/sdk/typescript/codegen/contract-clients/src/baseClient.ts b/sdk/typescript/codegen/contract-clients/src/baseClient.ts new file mode 100644 index 0000000000..c6a93a557e --- /dev/null +++ b/sdk/typescript/codegen/contract-clients/src/baseClient.ts @@ -0,0 +1,200 @@ +/** +* This file was automatically generated by @cosmwasm/ts-codegen@1.13.3. +* DO NOT MODIFY IT BY HAND. Instead, modify the source JSONSchema file, +* and run the @cosmwasm/ts-codegen generate command to regenerate this file. +*/ + + +import { StdFee, Coin } from '@interchainjs/types'; +import { DirectSigner } from '@interchainjs/cosmos'; +import { getSmartContractState } from 'interchainjs/cosmwasm/wasm/v1/query.rpc.func'; +import { executeContract } from 'interchainjs/cosmwasm/wasm/v1/tx.rpc.func'; +import { QuerySmartContractStateRequest, QuerySmartContractStateResponse } from 'interchainjs/cosmwasm/wasm/v1/query'; +import { MsgExecuteContract } from 'interchainjs/cosmwasm/wasm/v1/tx'; +import { Chain } from '@chain-registry/v2-types'; + +// Encoding utility functions +const fromUint8Array = (uint8Array: Uint8Array): T => { + const text = new TextDecoder().decode(uint8Array); + return JSON.parse(text); +}; + +const toUint8Array = (obj: any): Uint8Array => { + const text = JSON.stringify(obj); + return new TextEncoder().encode(text); +}; + +// Chain registry configuration +// The amount under gasPrice represents gas price per unit +export interface ChainConfig { + chain?: Chain; + gasPrice?: { + denom: string; + amount: string; + }; +} + +// Gas fee calculation utilities +export const calculateGasFromChain = (chain: Chain, gasAmount: string): StdFee => { + try { + const feeTokens = chain.fees?.feeTokens; + + if (feeTokens && feeTokens.length > 0) { + const primaryToken = feeTokens[0]; + // v2 chain-registry uses camelCase: averageGasPrice, lowGasPrice, fixedMinGasPrice + const gasPrice = primaryToken.averageGasPrice || primaryToken.lowGasPrice || primaryToken.fixedMinGasPrice || 0.025; + const gasAmountNum = parseInt(gasAmount); + const feeAmount = Math.ceil(gasAmountNum * gasPrice).toString(); + + return { + amount: [{ + denom: primaryToken.denom, + amount: feeAmount + }], + gas: gasAmount + }; + } + } catch (error) { + console.warn('Failed to calculate gas from chain registry:', error); + } + + // Fallback to default + return { amount: [], gas: gasAmount }; +}; + +// Default gas amount - users can easily change this +export let DEFAULT_GAS_AMOUNT = '200000'; + +// Allow users to set their preferred default gas amount +export const setDefaultGasAmount = (gasAmount: string): void => { + DEFAULT_GAS_AMOUNT = gasAmount; +}; + +// Get current default gas amount +export const getDefaultGasAmount = (): string => DEFAULT_GAS_AMOUNT; + +export const getAutoGasFee = (chainConfig?: ChainConfig): StdFee => { + const gasAmount = DEFAULT_GAS_AMOUNT; + + if (chainConfig?.chain) { + return calculateGasFromChain(chainConfig.chain, gasAmount); + } + + if (chainConfig?.gasPrice) { + const gasAmountNum = parseInt(gasAmount); + const gasPriceNum = parseFloat(chainConfig.gasPrice.amount); + const feeAmount = Math.ceil(gasAmountNum * gasPriceNum).toString(); + + return { + amount: [{ + denom: chainConfig.gasPrice.denom, + amount: feeAmount + }], + gas: gasAmount + }; + } + + // Fallback: no fee tokens, just gas amount + return { amount: [], gas: gasAmount }; +}; + +// InterchainJS interfaces for CosmWasm clients +export interface ICosmWasmClient { + queryContractSmart(contractAddr: string, query: any): Promise; +} + +export interface ISigningCosmWasmClient extends ICosmWasmClient { + execute( + sender: string, + contractAddress: string, + msg: any, + fee?: number | StdFee | "auto", + memo?: string, + funds?: Coin[], + chainConfig?: ChainConfig + ): Promise; +} + +export interface ISigningClient { + signAndBroadcast( + signerAddress: string, + messages: any[], + fee: number | StdFee | "auto", + memo?: string + ): Promise; +} + +// Helper functions to create InterchainJS clients +export function getCosmWasmClient(rpcEndpoint: string): ICosmWasmClient { + return { + queryContractSmart: async (contractAddr: string, query: any) => { + // Create the request object + const request: QuerySmartContractStateRequest = { + address: contractAddr, + queryData: toUint8Array(query) + }; + + // Execute the query using InterchainJS + const response: QuerySmartContractStateResponse = await getSmartContractState(rpcEndpoint, request); + + // Parse and return the result + return fromUint8Array(response.data); + }, + }; +} + +export function getSigningCosmWasmClient(signingClient: DirectSigner, rpcEndpoint?: string): ISigningCosmWasmClient { + return { + queryContractSmart: async (contractAddr: string, query: any) => { + if (!rpcEndpoint) { + throw new Error('rpcEndpoint is required for queryContractSmart in signing client'); + } + const request: QuerySmartContractStateRequest = { + address: contractAddr, + queryData: toUint8Array(query) + }; + const response: QuerySmartContractStateResponse = await getSmartContractState(rpcEndpoint, request); + return fromUint8Array(response.data); + }, + execute: async ( + sender: string, + contractAddress: string, + msg: any, + fee?: number | StdFee | "auto", + memo?: string, + funds?: Coin[], + chainConfig?: ChainConfig + ) => { + // Handle fee conversion + let finalFee: StdFee; + if (typeof fee === 'number') { + finalFee = { amount: [], gas: fee.toString() }; + } else if (fee === 'auto') { + finalFee = getAutoGasFee(chainConfig); + } else if (fee) { + finalFee = fee; + } else { + finalFee = getAutoGasFee(chainConfig); + } + + // Create the message object + const message: MsgExecuteContract = { + sender, + contract: contractAddress, + msg: toUint8Array(msg), + funds: funds || [] + }; + + // Execute the transaction using InterchainJS + const result = await executeContract( + signingClient as any, + sender, + message, + finalFee, + memo || '' + ); + + return result; + }, + }; +} diff --git a/sdk/typescript/codegen/contract-clients/src/index.ts b/sdk/typescript/codegen/contract-clients/src/index.ts index 530b718908..45d5479875 100644 --- a/sdk/typescript/codegen/contract-clients/src/index.ts +++ b/sdk/typescript/codegen/contract-clients/src/index.ts @@ -1,35 +1,48 @@ /** - * This file was automatically generated by @cosmwasm/ts-codegen@0.35.3. - * DO NOT MODIFY IT BY HAND. Instead, modify the source JSONSchema file, - * and run the @cosmwasm/ts-codegen generate command to regenerate this file. - */ +* This file was automatically generated by @cosmwasm/ts-codegen@1.13.3. +* DO NOT MODIFY IT BY HAND. Instead, modify the source JSONSchema file, +* and run the @cosmwasm/ts-codegen generate command to regenerate this file. +*/ -import * as _0 from './CoconutBandwidth.types'; -import * as _1 from './CoconutBandwidth.client'; -import * as _2 from './CoconutDkg.types'; -import * as _3 from './CoconutDkg.client'; -import * as _4 from './Mixnet.types'; -import * as _5 from './Mixnet.client'; -import * as _6 from './Cw3FlexMultisig.types'; -import * as _7 from './Cw3FlexMultisig.client'; -import * as _8 from './Cw4Group.types'; -import * as _9 from './Cw4Group.client'; -import * as _10 from './NameService.types'; -import * as _11 from './NameService.client'; -import * as _12 from './ServiceProviderDirectory.types'; -import * as _13 from './ServiceProviderDirectory.client'; -import * as _14 from './Vesting.types'; -import * as _15 from './Vesting.client'; -export * from './types'; - -/** @namespace */ +import * as _0 from "./Ecash.types"; +import * as _1 from "./Ecash.client"; +import * as _2 from "./CoconutDkg.types"; +import * as _3 from "./CoconutDkg.client"; +import * as _4 from "./Mixnet.types"; +import * as _5 from "./Mixnet.client"; +import * as _6 from "./Cw3FlexMultisig.types"; +import * as _7 from "./Cw3FlexMultisig.client"; +import * as _8 from "./Cw4Group.types"; +import * as _9 from "./Cw4Group.client"; +import * as _10 from "./Vesting.types"; +import * as _11 from "./Vesting.client"; +import * as _12 from "./baseClient"; export namespace contracts { - export const CoconutBandwidth = { ..._0, ..._1 }; - export const CoconutDkg = { ..._2, ..._3 }; - export const Mixnet = { ..._4, ..._5 }; - export const Cw3FlexMultisig = { ..._6, ..._7 }; - export const Cw4Group = { ..._8, ..._9 }; - export const NameService = { ..._10, ..._11 }; - export const ServiceProviderDirectory = { ..._12, ..._13 }; - export const Vesting = { ..._14, ..._15 }; -} + export const Ecash = { + ..._0, + ..._1 + }; + export const CoconutDkg = { + ..._2, + ..._3 + }; + export const Mixnet = { + ..._4, + ..._5 + }; + export const Cw3FlexMultisig = { + ..._6, + ..._7 + }; + export const Cw4Group = { + ..._8, + ..._9 + }; + export const Vesting = { + ..._10, + ..._11 + }; + export const baseClient = { + ..._12 + }; +} \ No newline at end of file diff --git a/sdk/typescript/examples/chat-app/parcel/package.json b/sdk/typescript/examples/chat-app/parcel/package.json index 0f9dbebffd..7a4d2a2751 100644 --- a/sdk/typescript/examples/chat-app/parcel/package.json +++ b/sdk/typescript/examples/chat-app/parcel/package.json @@ -1,6 +1,6 @@ { "name": "@nymproject/sdk-example-plain-html-parcel", - "version": "1.0.4-rc.2", + "version": "1.0.5", "description": "An example project that uses WASM and plain HTML bundled with Parcel v2", "license": "Apache-2.0", "scripts": { @@ -15,7 +15,7 @@ "tsc:watch": "tsc --watch" }, "dependencies": { - "@nymproject/sdk": ">=1.2.2-rc.0 || ^1" + "@nymproject/sdk": ">=1.4.1-rc1 || ^1" }, "devDependencies": { "@types/jest": "^27.0.1", @@ -41,4 +41,4 @@ "private": false, "browserslist": "> 0.5%, last 2 versions, not dead", "source": "src/index.html" -} \ No newline at end of file +} diff --git a/sdk/typescript/examples/chat-app/plain-html/package.json b/sdk/typescript/examples/chat-app/plain-html/package.json index 4d3915855c..c6fe9695b5 100644 --- a/sdk/typescript/examples/chat-app/plain-html/package.json +++ b/sdk/typescript/examples/chat-app/plain-html/package.json @@ -1,6 +1,6 @@ { "name": "@nymproject/sdk-example-plain-html", - "version": "1.0.4-rc.2", + "version": "1.0.5", "description": "An example project that uses WASM and plain HTML", "license": "Apache-2.0", "scripts": { @@ -16,7 +16,7 @@ "tsc:watch": "tsc --watch" }, "dependencies": { - "@nymproject/sdk": ">=1.2.2-rc.0 || ^1" + "@nymproject/sdk": ">=1.4.1-rc1 || ^1" }, "devDependencies": { "@babel/core": "^7.15.0", @@ -62,4 +62,4 @@ "webpack-merge": "^5.8.0" }, "private": false -} \ No newline at end of file +} diff --git a/sdk/typescript/examples/chat-app/react-webpack-with-theme-example/package.json b/sdk/typescript/examples/chat-app/react-webpack-with-theme-example/package.json index 6deb168308..0ba3cc677d 100644 --- a/sdk/typescript/examples/chat-app/react-webpack-with-theme-example/package.json +++ b/sdk/typescript/examples/chat-app/react-webpack-with-theme-example/package.json @@ -1,6 +1,6 @@ { "name": "@nymproject/sdk-example-react-webpack-wasm", - "version": "1.0.4-rc.2", + "version": "1.0.5", "description": "An example project that uses WASM, React, Webpack, Typescript and the Nym theme + components library", "license": "Apache-2.0", "scripts": { @@ -20,7 +20,7 @@ "@mui/lab": "^5.0.0-alpha.72", "@mui/material": "^5.0.1", "@mui/styles": "^5.0.1", - "@nymproject/sdk": ">=1.2.2-rc.0 || ^1", + "@nymproject/sdk": ">=1.4.1-rc1 || ^1", "react": "^18.2.0", "react-dom": "^18.2.0", "react-dropzone": "^14.2.3", @@ -90,4 +90,4 @@ "react": "^18.2.0", "react-dom": "^18.2.0" } -} \ No newline at end of file +} diff --git a/sdk/typescript/examples/chrome-extension/package.json b/sdk/typescript/examples/chrome-extension/package.json index 4a3759680a..8fd5a619af 100644 --- a/sdk/typescript/examples/chrome-extension/package.json +++ b/sdk/typescript/examples/chrome-extension/package.json @@ -1,6 +1,6 @@ { "name": "@nymproject/sdk-example-chrome-extension", - "version": "1.0.4-rc.2", + "version": "1.0.5", "description": "This is an example of how Nym can be used within the context of a Chrome extension.", "license": "ISC", "author": "", @@ -9,7 +9,7 @@ "build": "webpack" }, "dependencies": { - "@nymproject/sdk": ">=1.2.2-rc.0 || ^1" + "@nymproject/sdk": ">=1.4.1-rc1 || ^1" }, "devDependencies": { "clean-webpack-plugin": "^4.0.0", @@ -18,4 +18,4 @@ "webpack-cli": "^5.1.4" }, "private": false -} \ No newline at end of file +} diff --git a/sdk/typescript/examples/firefox-extension/package.json b/sdk/typescript/examples/firefox-extension/package.json index 9ca8a5111b..36974a7856 100644 --- a/sdk/typescript/examples/firefox-extension/package.json +++ b/sdk/typescript/examples/firefox-extension/package.json @@ -1,6 +1,6 @@ { "name": "@nymproject/sdk-example-firefox-extension", - "version": "1.0.4-rc.2", + "version": "1.0.5", "description": "This is an example of how Nym can be used within the context of a Firefox extension.", "license": "ISC", "author": "", @@ -9,7 +9,7 @@ "build": "yarn webpack" }, "dependencies": { - "@nymproject/sdk": ">=1.2.2-rc.0 || ^1" + "@nymproject/sdk": ">=1.4.1-rc1 || ^1" }, "devDependencies": { "copy-webpack-plugin": "^11.0.0", @@ -18,4 +18,4 @@ "worker-loader": "^3.0.8" }, "private": false -} \ No newline at end of file +} diff --git a/sdk/typescript/examples/mix-fetch/browser/package.json b/sdk/typescript/examples/mix-fetch/browser/package.json index c5e4ffbdcd..d0f4efad9e 100644 --- a/sdk/typescript/examples/mix-fetch/browser/package.json +++ b/sdk/typescript/examples/mix-fetch/browser/package.json @@ -1,6 +1,6 @@ { "name": "@nymproject/mix-fetch-example-parcel", - "version": "1.0.4-rc.2", + "version": "1.0.5", "license": "Apache-2.0", "scripts": { "build": "parcel build --no-cache --no-content-hash", @@ -8,9 +8,9 @@ "start": "parcel --no-cache" }, "dependencies": { - "@nymproject/mix-fetch": ">=1.2.2-rc.0 || ^1", + "@nymproject/mix-fetch": ">=1.4.1-rc1 || ^1", "parcel": "^2.9.3" }, "private": false, "source": "src/index.html" -} \ No newline at end of file +} diff --git a/sdk/typescript/examples/node-tester/parcel/package.json b/sdk/typescript/examples/node-tester/parcel/package.json index 12dc69acf7..e344d7ba1a 100644 --- a/sdk/typescript/examples/node-tester/parcel/package.json +++ b/sdk/typescript/examples/node-tester/parcel/package.json @@ -1,6 +1,6 @@ { "name": "@nymproject/sdk-example-node-tester-plain-html-parcel", - "version": "1.0.4-rc.2", + "version": "1.0.5", "description": "An example project that uses WASM and plain HTML bundled with Parcel v2", "license": "Apache-2.0", "scripts": { @@ -15,7 +15,7 @@ "tsc:watch": "tsc --watch" }, "dependencies": { - "@nymproject/sdk": ">=1.2.2-rc.0 || ^1" + "@nymproject/sdk": ">=1.4.1-rc1 || ^1" }, "devDependencies": { "@types/jest": "^27.0.1", @@ -41,4 +41,4 @@ "private": false, "browserslist": "> 0.5%, last 2 versions, not dead", "source": "src/index.html" -} \ No newline at end of file +} diff --git a/sdk/typescript/examples/node-tester/plain-html/package.json b/sdk/typescript/examples/node-tester/plain-html/package.json index 4fe5e3b7be..06c9b27c24 100644 --- a/sdk/typescript/examples/node-tester/plain-html/package.json +++ b/sdk/typescript/examples/node-tester/plain-html/package.json @@ -1,6 +1,6 @@ { "name": "@nymproject/sdk-example-node-tester-plain-html", - "version": "1.0.4-rc.2", + "version": "1.0.5", "description": "An example project that uses WASM node tester and plain HTML", "license": "Apache-2.0", "scripts": { @@ -16,7 +16,7 @@ "tsc:watch": "tsc --watch" }, "dependencies": { - "@nymproject/sdk": ">=1.2.2-rc.0 || ^1" + "@nymproject/sdk": ">=1.4.1-rc1 || ^1" }, "devDependencies": { "@babel/core": "^7.15.0", @@ -62,4 +62,4 @@ "webpack-merge": "^5.8.0" }, "private": false -} \ No newline at end of file +} diff --git a/sdk/typescript/examples/node-tester/react/package.json b/sdk/typescript/examples/node-tester/react/package.json index db804c92fa..2320367bc5 100644 --- a/sdk/typescript/examples/node-tester/react/package.json +++ b/sdk/typescript/examples/node-tester/react/package.json @@ -1,6 +1,6 @@ { "name": "@nymproject/sdk-example-node-tester-react", - "version": "1.0.4-rc.2", + "version": "1.0.5", "description": "An example project that uses WASM node tester and React", "license": "Apache-2.0", "scripts": { @@ -11,10 +11,10 @@ "@emotion/styled": "^11.11.0", "@mui/icons-material": "^5.14.0", "@mui/material": "^5.14.0", - "@nymproject/sdk": ">=1.2.2-rc.0 || ^1", + "@nymproject/sdk": ">=1.4.1-rc1 || ^1", "parcel": "^2.9.3", "react": "^18.2.0", "react-dom": "^18.2.0" }, "private": false -} \ No newline at end of file +} diff --git a/sdk/typescript/packages/mix-fetch-node/package.json b/sdk/typescript/packages/mix-fetch-node/package.json index 11cdcb3453..6956bd22c0 100644 --- a/sdk/typescript/packages/mix-fetch-node/package.json +++ b/sdk/typescript/packages/mix-fetch-node/package.json @@ -1,6 +1,6 @@ { "name": "@nymproject/mix-fetch-node", - "version": "1.4.0-rc.0", + "version": "1.4.1", "description": "This package is a drop-in replacement for `fetch` in NodeJS to send HTTP requests over the Nym Mixnet.", "license": "Apache-2.0", "author": "Nym Technologies SA", @@ -28,7 +28,7 @@ "tsc": "tsc --noEmit true" }, "dependencies": { - "@nymproject/mix-fetch-wasm-node": ">=1.2.4-rc.2 || ^1", + "@nymproject/mix-fetch-wasm-node": ">=1.4.1-rc.3 || ^1", "comlink": "^4.3.1", "fake-indexeddb": "^5.0.0", "node-fetch": "^3.3.2", diff --git a/sdk/typescript/packages/mix-fetch/internal-dev/package.json b/sdk/typescript/packages/mix-fetch/internal-dev/package.json index 8c97273244..b8a8d713da 100644 --- a/sdk/typescript/packages/mix-fetch/internal-dev/package.json +++ b/sdk/typescript/packages/mix-fetch/internal-dev/package.json @@ -1,6 +1,6 @@ { "name": "@nymproject/mix-fetch-tester-webpack", - "version": "1.0.4-rc.2", + "version": "1.0.5", "license": "Apache-2.0", "scripts": { "build": "webpack build --progress --config webpack.prod.js", @@ -8,7 +8,7 @@ "start": "webpack serve --progress --port 3000" }, "dependencies": { - "@nymproject/mix-fetch": ">=1.2.2-rc.0 || ^1" + "@nymproject/mix-fetch": ">=1.4.1-rc1 || ^1" }, "devDependencies": { "@babel/core": "^7.22.10", @@ -55,4 +55,4 @@ "webpack-merge": "^5.9.0" }, "private": false -} \ No newline at end of file +} diff --git a/sdk/typescript/packages/mix-fetch/internal-dev/parcel/package.json b/sdk/typescript/packages/mix-fetch/internal-dev/parcel/package.json index 1aa9dc375d..0da37628f4 100644 --- a/sdk/typescript/packages/mix-fetch/internal-dev/parcel/package.json +++ b/sdk/typescript/packages/mix-fetch/internal-dev/parcel/package.json @@ -1,6 +1,6 @@ { "name": "@nymproject/mix-fetch-tester-parcel", - "version": "1.0.4-rc.2", + "version": "1.0.5", "license": "Apache-2.0", "scripts": { "build": "npx parcel build --no-cache --no-content-hash", @@ -8,8 +8,8 @@ "start": "npx parcel --no-cache" }, "dependencies": { - "@nymproject/mix-fetch": ">=1.2.2-rc.0 || ^1" + "@nymproject/mix-fetch": ">=1.4.1-rc1 || ^1" }, "private": false, "source": "../src/index.html" -} \ No newline at end of file +} diff --git a/sdk/typescript/packages/mix-fetch/internal-dev/src/index.ts b/sdk/typescript/packages/mix-fetch/internal-dev/src/index.ts index d6c3795331..fb256688fa 100644 --- a/sdk/typescript/packages/mix-fetch/internal-dev/src/index.ts +++ b/sdk/typescript/packages/mix-fetch/internal-dev/src/index.ts @@ -21,6 +21,7 @@ async function main() { // const addr = // 'EVdJ66jqpoVzmktVecy5UJxsTCEWo5gMn5zDZR7Hm8jy.GXNpoX7RcYcxKvBkV3dSHqC78WaPuWieweRPWzYqNhh5@GAjhJcrd6f1edaqUkfWCff6zdHoqo756qYrc2TfPuCXJ'; + // const addr = '7Y9eyF1p1JmzHnd7TVZufnQHkh93ASc9sRBCFY57ZGr8.F8KPyVMVqFQ5yJC3LqeP2ZC7fukzj9a1T426rjo432yT@q2A2cbooyC16YJzvdYaSMH9X3cSiieZNtfBr8cE8Fi1'; const addr = undefined; appendOutput('About to set up mixFetch...'); @@ -54,12 +55,12 @@ async function main() { appendOutput(JSON.stringify(resp, null, 2)); appendOutput(JSON.stringify({ text }, null, 2)); - console.log('disconnecting'); - await disconnectMixFetch(); - console.log('disconnected! all further usages should fail'); + // console.log('disconnecting'); + // await disconnectMixFetch(); + // console.log('disconnected! all further usages should fail'); // get an image - url = 'https://nymtech.net/favicon.svg'; + url = 'https://matrix.org/assets/frontpage/github-mark.svg'; resp = await mixFetch(url, args); console.log({ resp }); const buffer = await resp.arrayBuffer(); diff --git a/sdk/typescript/packages/mix-fetch/internal-dev/webpack.common.js b/sdk/typescript/packages/mix-fetch/internal-dev/webpack.common.js index 200d2ab28e..ec41ca26ca 100644 --- a/sdk/typescript/packages/mix-fetch/internal-dev/webpack.common.js +++ b/sdk/typescript/packages/mix-fetch/internal-dev/webpack.common.js @@ -35,7 +35,8 @@ module.exports = mergeWithRules({ { // copy the WASM files, because webpack doesn't do this automatically even though there are // `new URL(..., import.meta.url)` statements in the web worker - from: path.resolve(path.dirname(require.resolve('@nymproject/mix-fetch/package.json')), 'dist/esm/*.wasm'), +// from: path.resolve(path.dirname(require.resolve('@nymproject/mix-fetch/package.json')), 'dist/esm/*.wasm'), + from: path.resolve(path.dirname(require.resolve('@nymproject/mix-fetch/package.json')), '*.wasm'), to: '[name][ext]', }, ], diff --git a/sdk/typescript/packages/mix-fetch/internal-dev/webpack.config.js b/sdk/typescript/packages/mix-fetch/internal-dev/webpack.config.js index 085b2eac55..2a9cd30bb8 100644 --- a/sdk/typescript/packages/mix-fetch/internal-dev/webpack.config.js +++ b/sdk/typescript/packages/mix-fetch/internal-dev/webpack.config.js @@ -1,7 +1,5 @@ const { mergeWithRules } = require('webpack-merge'); const webpack = require('webpack'); -const ReactRefreshWebpackPlugin = require('@pmmmwh/react-refresh-webpack-plugin'); -const ReactRefreshTypeScript = require('react-refresh-typescript'); const commonConfig = require('./webpack.common'); module.exports = mergeWithRules({ @@ -22,7 +20,7 @@ module.exports = mergeWithRules({ exclude: /node_modules/, options: { getCustomTransformers: () => ({ - before: [ReactRefreshTypeScript()], + before: [], }), // `ts-loader` does not work with HMR unless `transpileOnly` is used. // If you need type checking, `ForkTsCheckerWebpackPlugin` is an alternative. @@ -36,8 +34,6 @@ module.exports = mergeWithRules({ ], }, plugins: [ - new ReactRefreshWebpackPlugin(), - // this can be included automatically by the dev server, however build mode fails if missing new webpack.HotModuleReplacementPlugin(), ], diff --git a/sdk/typescript/packages/mix-fetch/package.json b/sdk/typescript/packages/mix-fetch/package.json index 131ea24cd9..41969de717 100644 --- a/sdk/typescript/packages/mix-fetch/package.json +++ b/sdk/typescript/packages/mix-fetch/package.json @@ -1,6 +1,6 @@ { "name": "@nymproject/mix-fetch", - "version": "1.4.0-rc.0", + "version": "1.4.1", "description": "This package is a drop-in replacement for `fetch` to send HTTP requests over the Nym Mixnet.", "license": "Apache-2.0", "author": "Nym Technologies SA", @@ -34,7 +34,7 @@ "tsc": "tsc --noEmit true" }, "dependencies": { - "@nymproject/mix-fetch-wasm": ">=1.2.4-rc.2 || ^1", + "@nymproject/mix-fetch-wasm": ">=1.4.1-rc.3 || ^1", "comlink": "^4.3.1" }, "devDependencies": { diff --git a/sdk/typescript/packages/node-tester/package.json b/sdk/typescript/packages/node-tester/package.json index de487b0729..4ca5b2fedf 100644 --- a/sdk/typescript/packages/node-tester/package.json +++ b/sdk/typescript/packages/node-tester/package.json @@ -1,6 +1,6 @@ { "name": "@nymproject/node-tester", - "version": "1.3.0-rc.0", + "version": "1.3.1", "description": "This package provides a tester that can send test packets to mixnode that is part of the Nym Mixnet.", "license": "Apache-2.0", "author": "Nym Technologies SA", @@ -25,7 +25,7 @@ "tsc": "tsc --noEmit true" }, "dependencies": { - "@nymproject/nym-node-tester-wasm": ">=1.2.4-rc.2 || ^1", + "@nymproject/nym-node-tester-wasm": ">=1.3.1-rc.0 || ^1", "comlink": "^4.3.1" }, "devDependencies": { diff --git a/sdk/typescript/packages/nodejs-client/package.json b/sdk/typescript/packages/nodejs-client/package.json index 143836943c..4b03632cd2 100644 --- a/sdk/typescript/packages/nodejs-client/package.json +++ b/sdk/typescript/packages/nodejs-client/package.json @@ -1,6 +1,6 @@ { "name": "@nymproject/nodejs-client", - "version": "1.4.0-rc.0", + "version": "1.4.1", "license": "Apache-2.0", "author": "Nym Technologies SA", "files": [ @@ -25,7 +25,7 @@ "tsc": "tsc --noEmit true" }, "dependencies": { - "@nymproject/nym-client-wasm-node": ">=1.2.4-rc.2 || ^1", + "@nymproject/nym-client-wasm-node": ">=1.4.1-rc.3 || ^1", "comlink": "^4.3.1", "fake-indexeddb": "^4.0.2", "rollup-plugin-polyfill": "^4.2.0", diff --git a/sdk/typescript/packages/nodejs-client/src/worker.ts b/sdk/typescript/packages/nodejs-client/src/worker.ts index a4e4eaeaf5..d96d6318e2 100644 --- a/sdk/typescript/packages/nodejs-client/src/worker.ts +++ b/sdk/typescript/packages/nodejs-client/src/worker.ts @@ -67,7 +67,7 @@ class ClientWrapper { console.error('Client has not been initialised. Please call `init` first.'); return undefined; } - return this.client.self_address(); + return this.client.selfAddress(); }; /** diff --git a/sdk/typescript/packages/sdk-react/package.json b/sdk/typescript/packages/sdk-react/package.json index c92cc99537..1144cf1563 100644 --- a/sdk/typescript/packages/sdk-react/package.json +++ b/sdk/typescript/packages/sdk-react/package.json @@ -1,6 +1,6 @@ { "name": "@nymproject/sdk-react", - "version": "1.4.0-rc.0", + "version": "1.4.1", "license": "Apache-2.0", "author": "Nym Technologies SA", "files": [ @@ -20,7 +20,7 @@ "tsc": "tsc --noEmit true" }, "dependencies": { - "@nymproject/sdk": ">=1.2.2-rc.0 || ^1" + "@nymproject/sdk": ">=1.4.1-rc.3 || ^1" }, "devDependencies": { "@babel/core": "^7.17.5", @@ -67,4 +67,4 @@ "private": false, "type": "module", "types": "./dist/index.d.ts" -} \ No newline at end of file +} diff --git a/sdk/typescript/packages/sdk/package.json b/sdk/typescript/packages/sdk/package.json index 1c420c84e0..0f2effe91d 100644 --- a/sdk/typescript/packages/sdk/package.json +++ b/sdk/typescript/packages/sdk/package.json @@ -1,6 +1,6 @@ { "name": "@nymproject/sdk", - "version": "1.4.0-rc.0", + "version": "1.4.1", "license": "Apache-2.0", "author": "Nym Technologies SA", "files": [ @@ -30,11 +30,8 @@ "test": "node --experimental-vm-modules --no-warnings node_modules/jest/bin/jest.js -c=jest.config.mjs --no-cache", "tsc": "tsc --noEmit true" }, - "typeRoots": [ - "./node_modules/@types/*" - ], "dependencies": { - "@nymproject/nym-client-wasm": ">=1.2.4-rc.2 || ^1", + "@nymproject/nym-client-wasm": ">=1.4.1-rc.3 || ^1", "comlink": "^4.3.1" }, "devDependencies": { @@ -54,6 +51,7 @@ "@rollup/plugin-url": "^8.0.1", "@rollup/plugin-wasm": "^6.1.1", "@types/jest": "^27.0.1", + "@types/minimatch": "5.1.2", "@types/node": "^16.7.13", "@typescript-eslint/eslint-plugin": "^5.13.0", "@typescript-eslint/parser": "^5.13.0", @@ -81,7 +79,13 @@ "typedoc": "^0.24.8", "typescript": "^4.8.4" }, + "resolutions": { + "@types/minimatch": "5.1.2" + }, "private": false, "type": "module", + "typeRoots": [ + "./node_modules/@types/*" + ], "types": "./dist/esm/index.d.ts" } diff --git a/sdk/typescript/packages/sdk/src/mixnet/wasm/worker.ts b/sdk/typescript/packages/sdk/src/mixnet/wasm/worker.ts index 0c65d27d79..ea96f73fae 100644 --- a/sdk/typescript/packages/sdk/src/mixnet/wasm/worker.ts +++ b/sdk/typescript/packages/sdk/src/mixnet/wasm/worker.ts @@ -79,7 +79,7 @@ class ClientWrapper { return undefined; } - return this.client.self_address(); + return this.client.selfAddress(); }; /** diff --git a/sdk/typescript/packages/validator-client/package.json b/sdk/typescript/packages/validator-client/package.json index 3c11b77a0f..d21a994b6d 100644 --- a/sdk/typescript/packages/validator-client/package.json +++ b/sdk/typescript/packages/validator-client/package.json @@ -39,7 +39,7 @@ "@rollup/plugin-json": "^6.0.0", "@rollup/plugin-node-resolve": "^15.0.1", "@rollup/plugin-typescript": "^11.0.0", - "@types/minimatch": "^6.0.0", + "@types/minimatch": "5.1.2", "@typescript-eslint/eslint-plugin": "^5.7.0", "@typescript-eslint/parser": "^5.7.0", "axios": "^1.3.3", diff --git a/sdk/typescript/scripts/build-prod-sdk.sh b/sdk/typescript/scripts/build-prod-sdk.sh index 3b3b5dcf9e..12e68c3264 100755 --- a/sdk/typescript/scripts/build-prod-sdk.sh +++ b/sdk/typescript/scripts/build-prod-sdk.sh @@ -21,7 +21,7 @@ yarn yarn build:ci:sdk # build documentation -yarn docs:prod:build +#yarn docs:prod:build # turn dev mode off yarn dev:off diff --git a/sdk/typescript/scripts/dev-mode-add.mjs b/sdk/typescript/scripts/dev-mode-add.mjs index edecdae96b..df00f685d7 100644 --- a/sdk/typescript/scripts/dev-mode-add.mjs +++ b/sdk/typescript/scripts/dev-mode-add.mjs @@ -2,7 +2,12 @@ import fs from 'fs'; const packageJson = JSON.parse(fs.readFileSync('package.json').toString()); -const devWorkspace = ['sdk/typescript/packages/**', 'sdk/typescript/examples/**', 'sdk/typescript/codegen/**']; +const devWorkspace = [ + 'dist/**', + 'sdk/typescript/packages/**', + 'sdk/typescript/examples/**', + 'sdk/typescript/codegen/**', +]; if (!packageJson.workspaces.includes(devWorkspace)) { // add packageJson.workspaces.push(...devWorkspace); diff --git a/sdk/typescript/scripts/dev-mode-remove.mjs b/sdk/typescript/scripts/dev-mode-remove.mjs index ce897efbd0..cf0041823e 100644 --- a/sdk/typescript/scripts/dev-mode-remove.mjs +++ b/sdk/typescript/scripts/dev-mode-remove.mjs @@ -2,7 +2,12 @@ import fs from 'fs'; const packageJson = JSON.parse(fs.readFileSync('package.json').toString()); -const devWorkspace = ['sdk/typescript/packages/**', 'sdk/typescript/examples/**', 'sdk/typescript/codegen/**']; +const devWorkspace = [ + 'dist/**', + 'sdk/typescript/packages/**', + 'sdk/typescript/examples/**', + 'sdk/typescript/codegen/**', +]; // remove packageJson.workspaces = packageJson.workspaces.filter((w) => !devWorkspace.includes(w)); diff --git a/sdk/typescript/scripts/publish.sh b/sdk/typescript/scripts/publish.sh index 3c59953776..d03fe73942 100755 --- a/sdk/typescript/scripts/publish.sh +++ b/sdk/typescript/scripts/publish.sh @@ -29,7 +29,7 @@ packages=( "wasm/extension-storage" "node/wasm/client" -"node/wasm/mix-fetch" +#"node/wasm/mix-fetch" "ts/sdk/mix-fetch/cjs" "ts/sdk/mix-fetch/cjs-full-fat" @@ -49,7 +49,7 @@ packages=( "ts/sdk/sdk/esm" "ts/sdk/sdk/esm-full-fat" -"ts/sdk/contract-clients" +#"ts/sdk/contract-clients" ) pushd () { @@ -66,7 +66,7 @@ for item in "${packages[@]}" do pushd "$item" jq -r '. | "📦 " + .version + " " +.name' < package.json - popd + popd done echo "" diff --git a/service-providers/network-requester/Cargo.toml b/service-providers/network-requester/Cargo.toml index bbddd16187..1731d38bef 100644 --- a/service-providers/network-requester/Cargo.toml +++ b/service-providers/network-requester/Cargo.toml @@ -4,7 +4,7 @@ [package] name = "nym-network-requester" license = "GPL-3.0" -version = "1.1.67" +version = "1.1.68" authors.workspace = true edition.workspace = true rust-version = "1.85" diff --git a/tools/internal/sdk-version-bump/src/helpers.rs b/tools/internal/sdk-version-bump/src/helpers.rs index 5d3a5d4e75..a5f31e1ae9 100644 --- a/tools/internal/sdk-version-bump/src/helpers.rs +++ b/tools/internal/sdk-version-bump/src/helpers.rs @@ -1,7 +1,7 @@ // Copyright 2023 - Nym Technologies SA // SPDX-License-Identifier: Apache-2.0 -use anyhow::{bail, Context}; +use anyhow::{Context, bail}; use semver::{Prerelease, Version}; use std::collections::HashSet; use std::path::Path; @@ -72,7 +72,9 @@ pub(crate) fn try_bump_raw_prerelease(raw: &str) -> anyhow::Result { impl VersionBumpExt for Version { fn try_bump_prerelease(&self) -> anyhow::Result { if self.pre.is_empty() { - bail!("the current version ({self}) does not have pre-release data set - are you sure you followed the release process correctly?") + bail!( + "the current version ({self}) does not have pre-release data set - are you sure you followed the release process correctly?" + ) } Ok(Version { @@ -86,7 +88,9 @@ impl VersionBumpExt for Version { fn try_bump_patch_without_pre(&self) -> anyhow::Result { if !self.pre.is_empty() { - bail!("the current version ({self}) has pre-release data set - are you sure you followed the release process correctly?") + bail!( + "the current version ({self}) has pre-release data set - are you sure you followed the release process correctly?" + ) } let mut updated = self.clone(); @@ -96,7 +100,9 @@ impl VersionBumpExt for Version { fn set_initial_release_candidate(&self) -> anyhow::Result { if !self.pre.is_empty() { - bail!("the current version ({self}) has pre-release data set - are you sure you followed the release process correctly?") + bail!( + "the current version ({self}) has pre-release data set - are you sure you followed the release process correctly?" + ) } Ok(Version { major: self.major, @@ -109,7 +115,9 @@ impl VersionBumpExt for Version { fn try_remove_prerelease(&self) -> anyhow::Result { if self.pre.is_empty() { - bail!("the current version ({self}) does not have pre-release data set - are you sure you followed the release process correctly?") + bail!( + "the current version ({self}) does not have pre-release data set - are you sure you followed the release process correctly?" + ) } Ok(Version { major: self.major, diff --git a/tools/internal/sdk-version-bump/src/json.rs b/tools/internal/sdk-version-bump/src/json.rs index 5c6816bf7c..f4894db834 100644 --- a/tools/internal/sdk-version-bump/src/json.rs +++ b/tools/internal/sdk-version-bump/src/json.rs @@ -3,8 +3,8 @@ use crate::helpers::try_bump_raw_prerelease; use crate::json_types::DepsSet; -use crate::{json_types, ReleasePackage}; -use anyhow::{bail, Context}; +use crate::{ReleasePackage, json_types}; +use anyhow::{Context, bail}; use semver::{Comparator, Prerelease, Version, VersionReq}; use std::collections::HashSet; use std::path::{Path, PathBuf}; diff --git a/tools/nym-cli/Cargo.toml b/tools/nym-cli/Cargo.toml index 41f0d2964e..79edd2de27 100644 --- a/tools/nym-cli/Cargo.toml +++ b/tools/nym-cli/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "nym-cli" -version = "1.1.66" +version = "1.1.67" authors.workspace = true edition = "2021" license.workspace = true diff --git a/tools/nymvisor/Cargo.toml b/tools/nymvisor/Cargo.toml index a4fc38d2fa..738a50a88e 100644 --- a/tools/nymvisor/Cargo.toml +++ b/tools/nymvisor/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "nymvisor" -version = "0.1.31" +version = "0.1.32" authors.workspace = true repository.workspace = true homepage.workspace = true diff --git a/wasm/client/Cargo.toml b/wasm/client/Cargo.toml index 6ded8ee2d5..4b5d7d19e9 100644 --- a/wasm/client/Cargo.toml +++ b/wasm/client/Cargo.toml @@ -4,7 +4,7 @@ authors = [ "Dave Hrycyszyn ", "Jedrzej Stuczynski ", ] -version = "1.4.0-rc.0" +version = "1.4.1" edition = "2021" keywords = ["nym", "sphinx", "wasm", "webassembly", "privacy"] license = "Apache-2.0" diff --git a/wasm/client/Makefile b/wasm/client/Makefile index 0fefb56503..049108e8d1 100644 --- a/wasm/client/Makefile +++ b/wasm/client/Makefile @@ -1,18 +1,23 @@ all: build build-node -build: - wasm-pack build --scope nymproject --target web --out-dir ../../dist/wasm/client - wasm-opt -Oz -o ../../dist/wasm/client/nym_client_wasm_bg.wasm ../../dist/wasm/client/nym_client_wasm_bg.wasm +build: test build-wasm + +build-wasm: + taskset -c 0-11 wasm-pack build --scope nymproject --target web --out-dir ../../dist/wasm/client + taskset -c 0-11 wasm-opt -Oz -o ../../dist/wasm/client/nym_client_wasm_bg.wasm ../../dist/wasm/client/nym_client_wasm_bg.wasm build-debug-dev: wasm-pack build --debug --scope nymproject --target no-modules build-rust-node: - wasm-pack build --scope nymproject --target nodejs --out-dir ../../dist/node/wasm/client - wasm-opt -Oz -o ../../dist/node/wasm/client/nym_client_wasm_bg.wasm ../../dist/node/wasm/client/nym_client_wasm_bg.wasm + taskset -c 0-11 wasm-pack build --scope nymproject --target nodejs --out-dir ../../dist/node/wasm/client + taskset -c 0-11 wasm-opt -Oz -o ../../dist/node/wasm/client/nym_client_wasm_bg.wasm ../../dist/node/wasm/client/nym_client_wasm_bg.wasm build-package-json-node: node build-node.mjs build-node: build-rust-node build-package-json-node + +test: + wasm-pack test --node diff --git a/wasm/client/src/encoded_payload_helper.rs b/wasm/client/src/encoded_payload_helper.rs index 8f2099425f..77294f624c 100644 --- a/wasm/client/src/encoded_payload_helper.rs +++ b/wasm/client/src/encoded_payload_helper.rs @@ -58,7 +58,25 @@ pub fn encode_payload_with_headers( Ok(metadata) => { let metadata = metadata.as_bytes().to_vec(); let size = (metadata.len() as u64).to_be_bytes().to_vec(); - Ok([size, metadata, payload].concat()) + if size.len() != 8 { + return Err(JsValue::from(JsError::new( + format!("Size as big endian u8 is {} instead of 8", size.len()).as_str(), + ))); + } + let metadata_length = metadata.len(); + let payload_length = payload.len(); + let encoded = [size, metadata, payload].concat(); + if encoded.len() != (8 + metadata_length + payload_length) { + return Err(JsValue::from(JsError::new( + format!( + "Total size {} != {} (8 + {metadata_length} + {payload_length})", + encoded.len(), + 8 + metadata_length + payload_length + ) + .as_str(), + ))); + } + Ok(encoded) } Err(e) => Err(JsValue::from(JsError::new( format!("Could not encode message: {e}").as_str(), @@ -90,7 +108,7 @@ pub fn decode_payload(message: Vec) -> Result { } pub(crate) fn parse_payload(message: &[u8]) -> anyhow::Result<(EncodedPayloadMetadata, &[u8])> { - // 1st 8 bytes are the size (as u64 big endian) + // 1st 8 bytes are the size of the metadata field (as u64 big endian) let mut size = [0u8; 8]; if message.len() < 8 { bail!("Message is too short to contain size information") @@ -98,10 +116,23 @@ pub(crate) fn parse_payload(message: &[u8]) -> anyhow::Result<(EncodedPayloadMet size.clone_from_slice(&message[0..8]); let metadata_size = u64::from_be_bytes(size) as usize; - if metadata_size + 8 != message.len() { + if metadata_size + 8 > message.len() { return Err(anyhow::anyhow!(format!( - "Metadata size: {}, exceeds message with length of: {}", + "Metadata size: {} bytes + 8 bytes ({} bytes) > {} bytes, message length. Did you pass the entire message for decoding?", metadata_size, + metadata_size + 8, + message.len() + ),)); + } + + let payload_size = message.len() - (8 + metadata_size); + + if payload_size + metadata_size + 8 != message.len() { + return Err(anyhow::anyhow!(format!( + "Payload size {} + Metadata size {} + 8 ({}) != {} message length", + payload_size, + metadata_size, + payload_size + metadata_size + 8, message.len() ),)); } @@ -275,7 +306,7 @@ mod tests { let error = result.unwrap_err(); assert_eq!( error.to_string(), - "Metadata size: 20, exceeds message with length of: 18" + "Metadata size: 20 bytes + 8 bytes (28 bytes) > 18 bytes, message length. Did you pass the entire message for decoding?" ); } @@ -294,6 +325,14 @@ mod tests { message.extend_from_slice(serialized_metadata.as_bytes()); message.extend_from_slice(&payload_data); + wasm_utils::console_log!("message length: {}", message.len()); + wasm_utils::console_log!("metadata length: {}", metadata_length); + wasm_utils::console_log!("payload length: {}", payload_data.len()); + wasm_utils::console_log!( + "8 + metadata_length + payload_length = {}", + payload_data.len() + metadata_length as usize + 8 + ); + let (parsed_metadata, parsed_payload) = parse_payload(&message).unwrap(); assert_eq!(parsed_metadata.mime_type, metadata.mime_type); diff --git a/wasm/client/src/lib.rs b/wasm/client/src/lib.rs index 6e5adb2306..ee5ff5a1ba 100644 --- a/wasm/client/src/lib.rs +++ b/wasm/client/src/lib.rs @@ -20,7 +20,7 @@ use wasm_utils::set_panic_hook; #[wasm_bindgen(start)] #[cfg(target_arch = "wasm32")] -pub fn main() { +pub fn main_js() { wasm_utils::console_log!("[rust main]: setting panic hook"); set_panic_hook(); wasm_utils::console_log!("[rust main]: rust module loaded"); diff --git a/wasm/full-nym-wasm/Makefile b/wasm/full-nym-wasm/Makefile index 0bd65e03a9..fa2467d10c 100644 --- a/wasm/full-nym-wasm/Makefile +++ b/wasm/full-nym-wasm/Makefile @@ -1,5 +1,5 @@ all: build-full build-full: - wasm-pack build --all-features --scope nymproject --target web --out-dir ../../dist/wasm/full-nym-wasm - wasm-opt -Oz -o ../../dist/wasm/full-nym-wasm/nym_wasm_sdk_bg.wasm ../../dist/wasm/full-nym-wasm/nym_wasm_sdk_bg.wasm + taskset -c 0-11 wasm-pack build --all-features --scope nymproject --target web --out-dir ../../dist/wasm/full-nym-wasm + taskset -c 0-11 wasm-opt -Oz -o ../../dist/wasm/full-nym-wasm/nym_wasm_sdk_bg.wasm ../../dist/wasm/full-nym-wasm/nym_wasm_sdk_bg.wasm diff --git a/wasm/mix-fetch/Cargo.toml b/wasm/mix-fetch/Cargo.toml index d50239241c..00d91b2e25 100644 --- a/wasm/mix-fetch/Cargo.toml +++ b/wasm/mix-fetch/Cargo.toml @@ -1,7 +1,7 @@ [package] name = "mix-fetch-wasm" authors = ["Jedrzej Stuczynski "] -version = "1.4.0-rc.0" +version = "1.4.1" edition = "2021" keywords = ["nym", "fetch", "wasm", "webassembly", "privacy"] license = "Apache-2.0" @@ -32,6 +32,7 @@ nym-http-api-client = { path = "../../common/http-api-client" } nym-socks5-requests = { path = "../../common/socks5/requests" } nym-ordered-buffer = { path = "../../common/socks5/ordered-buffer" } nym-service-providers-common = { path = "../../service-providers/common" } +nym-validator-client = { path = "../../common/client-libs/validator-client", default-features = false } wasm-client-core = { path = "../../common/wasm/client-core" } wasm-utils = { path = "../../common/wasm/utils" } diff --git a/wasm/mix-fetch/Makefile b/wasm/mix-fetch/Makefile index 0c5e72fad5..1d6f1d01ab 100644 --- a/wasm/mix-fetch/Makefile +++ b/wasm/mix-fetch/Makefile @@ -9,8 +9,8 @@ build-go-opt: $(MAKE) -C go-mix-conn build-go-opt build-rust: - wasm-pack build --scope nymproject --target web --out-dir ../../dist/wasm/mix-fetch - wasm-opt -Oz -o ../../dist/wasm/mix-fetch/mix_fetch_wasm_bg.wasm ../../dist/wasm/mix-fetch/mix_fetch_wasm_bg.wasm + taskset -c 0-11 wasm-pack build --scope nymproject --target web --out-dir ../../dist/wasm/mix-fetch + taskset -c 0-11 wasm-opt -Oz -o ../../dist/wasm/mix-fetch/mix_fetch_wasm_bg.wasm ../../dist/wasm/mix-fetch/mix_fetch_wasm_bg.wasm build-rust-debug: wasm-pack build --debug --scope nymproject --target no-modules @@ -23,4 +23,4 @@ check-fmt-go: check-fmt-rust: cargo fmt --check - cargo clippy --target wasm32-unknown-unknown -- -Dwarnings \ No newline at end of file + cargo clippy --target wasm32-unknown-unknown -- -Dwarnings diff --git a/wasm/mix-fetch/go-mix-conn/go.mod b/wasm/mix-fetch/go-mix-conn/go.mod index 6adec2ce08..52d9f2bed5 100644 --- a/wasm/mix-fetch/go-mix-conn/go.mod +++ b/wasm/mix-fetch/go-mix-conn/go.mod @@ -1,9 +1,7 @@ module go-mix-conn -go 1.23.0 +go 1.24.0 -toolchain go1.23.3 +require golang.org/x/net v0.46.0 -require golang.org/x/net v0.38.0 - -require golang.org/x/text v0.23.0 // indirect +require golang.org/x/text v0.30.0 // indirect diff --git a/wasm/mix-fetch/go-mix-conn/go.sum b/wasm/mix-fetch/go-mix-conn/go.sum index d5b7c23864..ee08c3c4fd 100644 --- a/wasm/mix-fetch/go-mix-conn/go.sum +++ b/wasm/mix-fetch/go-mix-conn/go.sum @@ -1,4 +1,8 @@ golang.org/x/net v0.38.0 h1:vRMAPTMaeGqVhG5QyLJHqNDwecKTomGeqbnfZyKlBI8= golang.org/x/net v0.38.0/go.mod h1:ivrbrMbzFq5J41QOQh0siUuly180yBYtLp+CKbEaFx8= +golang.org/x/net v0.46.0 h1:giFlY12I07fugqwPuWJi68oOnpfqFnJIJzaIIm2JVV4= +golang.org/x/net v0.46.0/go.mod h1:Q9BGdFy1y4nkUwiLvT5qtyhAnEHgnQ/zd8PfU6nc210= golang.org/x/text v0.23.0 h1:D71I7dUrlY+VX0gQShAThNGHFxZ13dGLBHQLVl1mJlY= golang.org/x/text v0.23.0/go.mod h1:/BLNzu4aZCJ1+kcD0DNRotWKage4q2rGVAg4o22unh4= +golang.org/x/text v0.30.0 h1:yznKA/E9zq54KzlzBEAWn1NXSQ8DIp/NYMy88xJjl4k= +golang.org/x/text v0.30.0/go.mod h1:yDdHFIX9t+tORqspjENWgzaCVXgk0yYnYuSZ8UzzBVM= diff --git a/wasm/mix-fetch/src/error.rs b/wasm/mix-fetch/src/error.rs index ab15d7e61a..c3347acddf 100644 --- a/wasm/mix-fetch/src/error.rs +++ b/wasm/mix-fetch/src/error.rs @@ -1,10 +1,10 @@ // Copyright 2023 - Nym Technologies SA // SPDX-License-Identifier: Apache-2.0 -use crate::harbourmaster::HarbourMasterApiError; use crate::RequestId; use nym_ordered_buffer::OrderedMessageError; use nym_socks5_requests::ConnectionError; +use nym_validator_client::nym_api::error::NymAPIError; use thiserror::Error; use wasm_client_core::error::WasmCoreError; use wasm_client_core::ClientCoreError; @@ -22,9 +22,9 @@ pub enum MixFetchError { NoNetworkRequesters, #[error("could not query for the service providers: {source}")] - HarbourmasterError { + ValidatorClientError { #[from] - source: HarbourMasterApiError, + source: NymAPIError, }, #[error("failed to parse mix fetch config options: {source}")] diff --git a/wasm/mix-fetch/src/fetch.rs b/wasm/mix-fetch/src/fetch.rs index 8df0142490..83d7caaff1 100644 --- a/wasm/mix-fetch/src/fetch.rs +++ b/wasm/mix-fetch/src/fetch.rs @@ -94,10 +94,12 @@ pub fn setup_mix_fetch(opts: MixFetchOpts) -> Promise { } future_to_promise(async move { - let network_requester_address = - get_network_requester(opts.base.preferred_network_requester.clone()) - .await - .map_promise_err()?; + let network_requester_address = get_network_requester( + opts.nym_api_url.clone(), + opts.base.preferred_network_requester.clone(), + ) + .await + .map_promise_err()?; console_log!("going to use {network_requester_address} network requester"); diff --git a/wasm/mix-fetch/src/harbourmaster.rs b/wasm/mix-fetch/src/harbourmaster.rs deleted file mode 100644 index 7b525384ba..0000000000 --- a/wasm/mix-fetch/src/harbourmaster.rs +++ /dev/null @@ -1,59 +0,0 @@ -// Copyright 2023 - Nym Technologies SA -// SPDX-License-Identifier: Apache-2.0 - -// this exists inside mix-fetch rather than being made into repo-wide library since it's a temporary solution -// until the API is finalised and endpoints are moved to nym-api - -use async_trait::async_trait; -use nym_http_api_client::{ApiClient, HttpClientError, NO_PARAMS}; -use serde::Deserialize; - -pub use nym_http_api_client::Client; - -pub type HarbourMasterApiError = HttpClientError; - -mod routes { - pub const API_VERSION: &str = "v1"; - - pub const SERVICES: &str = "services"; - - pub const NEW: &str = "new"; -} - -#[cfg_attr(target_arch = "wasm32", async_trait(?Send))] -#[cfg_attr(not(target_arch = "wasm32"), async_trait)] -pub trait HarbourMasterApiClientExt: ApiClient { - // since it's a temporary thing don't worry about paging. - async fn get_services_new(&self) -> Result, HarbourMasterApiError> { - self.get_json( - &[routes::API_VERSION, routes::SERVICES, routes::NEW], - NO_PARAMS, - ) - .await - } -} - -#[cfg_attr(target_arch = "wasm32", async_trait(?Send))] -#[cfg_attr(not(target_arch = "wasm32"), async_trait)] -impl HarbourMasterApiClientExt for Client {} - -// https://gitlab.nymte.ch/nym/shipyard-test-and-earn/-/blob/main/harbour-master/src/http/mod.rs#L13 -#[allow(dead_code)] -#[derive(Debug, Deserialize)] -pub struct PagedResult { - pub page: u32, - pub size: u32, - pub total: i32, - pub items: Vec, -} - -// https://gitlab.nymte.ch/nym/shipyard-test-and-earn/-/blob/main/harbour-master/src/http/services.rs#L32 -#[allow(dead_code)] -#[derive(Debug, Deserialize)] -pub struct ServiceNew { - pub service_provider_client_id: String, - pub ip_address: String, - pub last_successful_ping_utc: String, - pub last_updated_utc: String, - pub routing_score: f32, -} diff --git a/wasm/mix-fetch/src/helpers.rs b/wasm/mix-fetch/src/helpers.rs index e675c7d005..4f6daf85b1 100644 --- a/wasm/mix-fetch/src/helpers.rs +++ b/wasm/mix-fetch/src/helpers.rs @@ -2,36 +2,48 @@ // SPDX-License-Identifier: Apache-2.0 use crate::error::MixFetchError; -use crate::harbourmaster; -use crate::harbourmaster::HarbourMasterApiClientExt; +use crate::error::MixFetchError::NoNetworkRequesters; +use nym_http_api_client::Client; +use nym_validator_client::nym_api::NymApiClientExt; use rand::seq::SliceRandom; use rand::thread_rng; use wasm_utils::console_log; // since this client is temporary (and will be properly integrated into nym-api eventually), // we're using hardcoded URL for mainnet -const HARBOUR_MASTER: &str = "https://harbourmaster.nymtech.net"; +const NYM_API_URL: &str = "https://validator.nymtech.net/api/"; pub(crate) async fn get_network_requester( + nym_api_url: Option, preferred: Option, ) -> Result { if let Some(sp) = preferred { return Ok(sp); } - let client = harbourmaster::Client::new_url(HARBOUR_MASTER, None)?; - let providers = client.get_services_new().await?; + let client = Client::new( + url::Url::parse(&nym_api_url.unwrap_or(NYM_API_URL.to_string()))?, + None, + ); + let nodes = client.get_all_described_nodes().await?; + let providers: Vec<_> = nodes + .iter() + .filter_map(|node| { + node.description + .network_requester + .clone() + .map(|n| n.address) + }) + .collect(); console_log!( "obtained list of {} service providers on the network", - providers.items.len() + providers.len() ); // this will only return a `None` if the list is empty let mut rng = thread_rng(); providers - .items .choose(&mut rng) - .map(|service| &service.service_provider_client_id) + .ok_or(NoNetworkRequesters) .cloned() - .ok_or(MixFetchError::NoNetworkRequesters) } diff --git a/wasm/mix-fetch/src/lib.rs b/wasm/mix-fetch/src/lib.rs index b02780f3ab..cbb9d151d4 100644 --- a/wasm/mix-fetch/src/lib.rs +++ b/wasm/mix-fetch/src/lib.rs @@ -14,8 +14,6 @@ mod fetch; #[cfg(target_arch = "wasm32")] mod go_bridge; #[cfg(target_arch = "wasm32")] -mod harbourmaster; -#[cfg(target_arch = "wasm32")] mod helpers; #[cfg(target_arch = "wasm32")] mod request_writer; diff --git a/wasm/node-tester/Cargo.toml b/wasm/node-tester/Cargo.toml index 05411e164f..dd1fb9fded 100644 --- a/wasm/node-tester/Cargo.toml +++ b/wasm/node-tester/Cargo.toml @@ -1,7 +1,7 @@ [package] name = "nym-node-tester-wasm" authors = ["Jedrzej Stuczynski "] -version = "1.3.0-rc.0" +version = "1.3.1" edition = "2021" keywords = ["nym", "sphinx", "webassembly", "privacy", "tester"] license = "Apache-2.0" diff --git a/yarn.lock b/yarn.lock index 8e99306240..246c016a46 100644 --- a/yarn.lock +++ b/yarn.lock @@ -7,14 +7,6 @@ resolved "https://registry.yarnpkg.com/@adobe/css-tools/-/css-tools-4.4.4.tgz#2856c55443d3d461693f32d2b96fb6ea92e1ffa9" integrity sha512-Elp+iwUx5rN5+Y8xLt5/GRoG20WGoDCQ/1Fb+1LiGtvwbDavuSk0jhD/eZdckHAuzcDzccnkv+rEjyWfRx18gg== -"@ampproject/remapping@^2.1.0": - version "2.3.0" - resolved "https://registry.yarnpkg.com/@ampproject/remapping/-/remapping-2.3.0.tgz#ed441b6fa600072520ce18b43d2c8cc8caecc7f4" - integrity sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw== - dependencies: - "@jridgewell/gen-mapping" "^0.3.5" - "@jridgewell/trace-mapping" "^0.3.24" - "@asamuzakjp/css-color@^4.0.3": version "4.0.5" resolved "https://registry.yarnpkg.com/@asamuzakjp/css-color/-/css-color-4.0.5.tgz#cc533095241d8a56c49614591955280ab8c4bb02" @@ -26,10 +18,10 @@ "@csstools/css-tokenizer" "^3.0.4" lru-cache "^11.2.1" -"@asamuzakjp/dom-selector@^6.5.4": - version "6.5.7" - resolved "https://registry.yarnpkg.com/@asamuzakjp/dom-selector/-/dom-selector-6.5.7.tgz#d4dd57957e4b699266cc75a690190b3d1b5258bf" - integrity sha512-cvdTPsi2qC1c22UppvuVmx/PDwuc6+QQkwt9OnwQD6Uotbh//tb2XDF0OoK2V0F4b8d02LIwNp3BieaDMAhIhA== +"@asamuzakjp/dom-selector@^6.7.2": + version "6.7.2" + resolved "https://registry.yarnpkg.com/@asamuzakjp/dom-selector/-/dom-selector-6.7.2.tgz#bce7e730e969610ce8574b98ff3dd69db6ac9e6a" + integrity sha512-ccKogJI+0aiDhOahdjANIc9SDixSud1gbwdVrhn7kMopAtLXqsz9MKmQQtIl6Y5aC2IYq+j4dz/oedL2AVMmVQ== dependencies: "@asamuzakjp/nwsapi" "^2.3.9" bidi-js "^1.0.3" @@ -42,14 +34,7 @@ resolved "https://registry.yarnpkg.com/@asamuzakjp/nwsapi/-/nwsapi-2.3.9.tgz#ad5549322dfe9d153d4b4dd6f7ff2ae234b06e24" integrity sha512-n8GuYSrI9bF7FFZ/SjhwevlHc8xaVlb/7HmHelnc/PZXBD2ZR49NnN9sMMuDdEGPeeRQ5d0hqlSlEpgCX3Wl0Q== -"@babel/code-frame@7.12.11": - version "7.12.11" - resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.12.11.tgz#f4ad435aa263db935b8f10f2c552d23fb716a63f" - integrity sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw== - dependencies: - "@babel/highlight" "^7.10.4" - -"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.10.4", "@babel/code-frame@^7.12.13", "@babel/code-frame@^7.16.7", "@babel/code-frame@^7.18.6", "@babel/code-frame@^7.22.5", "@babel/code-frame@^7.27.1", "@babel/code-frame@^7.5.5", "@babel/code-frame@^7.8.3": +"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.10.4", "@babel/code-frame@^7.12.13", "@babel/code-frame@^7.16.7", "@babel/code-frame@^7.27.1", "@babel/code-frame@^7.5.5", "@babel/code-frame@^7.8.3": version "7.27.1" resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.27.1.tgz#200f715e66d52a23b221a9435534a91cc13ad5be" integrity sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg== @@ -58,10 +43,10 @@ js-tokens "^4.0.0" picocolors "^1.1.1" -"@babel/compat-data@^7.17.7", "@babel/compat-data@^7.18.8", "@babel/compat-data@^7.20.5", "@babel/compat-data@^7.27.2", "@babel/compat-data@^7.27.7", "@babel/compat-data@^7.28.0": - version "7.28.4" - resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.28.4.tgz#96fdf1af1b8859c8474ab39c295312bfb7c24b04" - integrity sha512-YsmSKC29MJwf0gF8Rjjrg5LQCmyh+j/nD8/eP7f+BeoQTKYqs9RoWbjGOdy0+1Ekr68RJZMUOPVQaQisnIo4Rw== +"@babel/compat-data@^7.20.5", "@babel/compat-data@^7.27.2", "@babel/compat-data@^7.27.7", "@babel/compat-data@^7.28.5": + version "7.28.5" + resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.28.5.tgz#a8a4962e1567121ac0b3b487f52107443b455c7f" + integrity sha512-6uFXyCayocRbqhZOB+6XcuZbkMNimwfVGFji8CTZnCzOHVGvDqzvitu1re2AU5LROliz7eQPhB8CpAMvnx9EjA== "@babel/core@7.12.9": version "7.12.9" @@ -85,41 +70,20 @@ semver "^5.4.1" source-map "^0.5.0" -"@babel/core@7.18.10": - version "7.18.10" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.18.10.tgz#39ad504991d77f1f3da91be0b8b949a5bc466fb8" - integrity sha512-JQM6k6ENcBFKVtWvLavlvi/mPcpYZ3+R+2EySDEMSMbp7Mn4FexlbbJVrx2R7Ijhr01T8gyqrOaABWIOgxeUyw== - dependencies: - "@ampproject/remapping" "^2.1.0" - "@babel/code-frame" "^7.18.6" - "@babel/generator" "^7.18.10" - "@babel/helper-compilation-targets" "^7.18.9" - "@babel/helper-module-transforms" "^7.18.9" - "@babel/helpers" "^7.18.9" - "@babel/parser" "^7.18.10" - "@babel/template" "^7.18.10" - "@babel/traverse" "^7.18.10" - "@babel/types" "^7.18.10" - convert-source-map "^1.7.0" - debug "^4.1.0" - gensync "^1.0.0-beta.2" - json5 "^2.2.1" - semver "^6.3.0" - -"@babel/core@^7.1.0", "@babel/core@^7.11.6", "@babel/core@^7.12.10", "@babel/core@^7.12.3", "@babel/core@^7.15.0", "@babel/core@^7.17.5", "@babel/core@^7.19.6", "@babel/core@^7.22.10", "@babel/core@^7.23.9", "@babel/core@^7.7.2", "@babel/core@^7.7.5", "@babel/core@^7.8.0": - version "7.28.4" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.28.4.tgz#12a550b8794452df4c8b084f95003bce1742d496" - integrity sha512-2BCOP7TN8M+gVDj7/ht3hsaO/B/n5oDbiAyyvnRlNOs+u1o+JWNYTQrmpuNp1/Wq2gcFrI01JAW+paEKDMx/CA== +"@babel/core@^7.1.0", "@babel/core@^7.12.10", "@babel/core@^7.12.3", "@babel/core@^7.15.0", "@babel/core@^7.17.5", "@babel/core@^7.19.6", "@babel/core@^7.22.10", "@babel/core@^7.7.2", "@babel/core@^7.7.5", "@babel/core@^7.8.0": + version "7.28.5" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.28.5.tgz#4c81b35e51e1b734f510c99b07dfbc7bbbb48f7e" + integrity sha512-e7jT4DxYvIDLk1ZHmU/m/mB19rex9sv0c2ftBtjSBv+kVM/902eh0fINUzD7UwLLNR+jU585GxUJ8/EBfAM5fw== dependencies: "@babel/code-frame" "^7.27.1" - "@babel/generator" "^7.28.3" + "@babel/generator" "^7.28.5" "@babel/helper-compilation-targets" "^7.27.2" "@babel/helper-module-transforms" "^7.28.3" "@babel/helpers" "^7.28.4" - "@babel/parser" "^7.28.4" + "@babel/parser" "^7.28.5" "@babel/template" "^7.27.2" - "@babel/traverse" "^7.28.4" - "@babel/types" "^7.28.4" + "@babel/traverse" "^7.28.5" + "@babel/types" "^7.28.5" "@jridgewell/remapping" "^2.3.5" convert-source-map "^2.0.0" debug "^4.1.0" @@ -127,22 +91,13 @@ json5 "^2.2.3" semver "^6.3.1" -"@babel/generator@7.18.12": - version "7.18.12" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.18.12.tgz#fa58daa303757bd6f5e4bbca91b342040463d9f4" - integrity sha512-dfQ8ebCN98SvyL7IxNMCUtZQSq5R7kxgN+r8qYTGDmmSion1hX2C0zq2yo1bsCDhXixokv1SAWTZUMYbO/V5zg== +"@babel/generator@^7.12.11", "@babel/generator@^7.12.5", "@babel/generator@^7.28.5", "@babel/generator@^7.7.2": + version "7.28.5" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.28.5.tgz#712722d5e50f44d07bc7ac9fe84438742dd61298" + integrity sha512-3EwLFhZ38J4VyIP6WNtt2kUdW9dokXA9Cr4IVIFHuCpZ3H8/YFOl5JjZHisrn1fATPBmKKqXzDFvh9fUwHz6CQ== dependencies: - "@babel/types" "^7.18.10" - "@jridgewell/gen-mapping" "^0.3.2" - jsesc "^2.5.1" - -"@babel/generator@^7.12.11", "@babel/generator@^7.12.5", "@babel/generator@^7.18.10", "@babel/generator@^7.28.3", "@babel/generator@^7.7.2": - version "7.28.3" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.28.3.tgz#9626c1741c650cbac39121694a0f2d7451b8ef3e" - integrity sha512-3lSpxGgvnmZznmBkCRnVREPUFJv2wrv9iAoFDvADJc0ypmdOxdUtcLeBgBJ6zE0PMeTKnxeQzyk0xTBq4Ep7zw== - dependencies: - "@babel/parser" "^7.28.3" - "@babel/types" "^7.28.2" + "@babel/parser" "^7.28.5" + "@babel/types" "^7.28.5" "@jridgewell/gen-mapping" "^0.3.12" "@jridgewell/trace-mapping" "^0.3.28" jsesc "^3.0.2" @@ -154,7 +109,7 @@ dependencies: "@babel/types" "^7.27.3" -"@babel/helper-compilation-targets@^7.13.0", "@babel/helper-compilation-targets@^7.17.7", "@babel/helper-compilation-targets@^7.18.9", "@babel/helper-compilation-targets@^7.20.7", "@babel/helper-compilation-targets@^7.27.1", "@babel/helper-compilation-targets@^7.27.2": +"@babel/helper-compilation-targets@^7.13.0", "@babel/helper-compilation-targets@^7.20.7", "@babel/helper-compilation-targets@^7.27.1", "@babel/helper-compilation-targets@^7.27.2": version "7.27.2" resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.27.2.tgz#46a0f6efab808d51d29ce96858dd10ce8732733d" integrity sha512-2+1thGUUWWjLTYTHZWK1n8Yga0ijBz1XAhUXcKy81rd5g6yh7hGqMp45v7cadSbEHc9G3OTv45SyneRN3ps4DQ== @@ -165,26 +120,26 @@ lru-cache "^5.1.1" semver "^6.3.1" -"@babel/helper-create-class-features-plugin@^7.18.6", "@babel/helper-create-class-features-plugin@^7.21.0", "@babel/helper-create-class-features-plugin@^7.27.1", "@babel/helper-create-class-features-plugin@^7.28.3": - version "7.28.3" - resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.28.3.tgz#3e747434ea007910c320c4d39a6b46f20f371d46" - integrity sha512-V9f6ZFIYSLNEbuGA/92uOvYsGCJNsuA8ESZ4ldc09bWk/j8H8TKiPw8Mk1eG6olpnO0ALHJmYfZvF4MEE4gajg== +"@babel/helper-create-class-features-plugin@^7.18.6", "@babel/helper-create-class-features-plugin@^7.21.0", "@babel/helper-create-class-features-plugin@^7.27.1", "@babel/helper-create-class-features-plugin@^7.28.3", "@babel/helper-create-class-features-plugin@^7.28.5": + version "7.28.5" + resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.28.5.tgz#472d0c28028850968979ad89f173594a6995da46" + integrity sha512-q3WC4JfdODypvxArsJQROfupPBq9+lMwjKq7C33GhbFYJsufD0yd/ziwD+hJucLeWsnFPWZjsU2DNFqBPE7jwQ== dependencies: "@babel/helper-annotate-as-pure" "^7.27.3" - "@babel/helper-member-expression-to-functions" "^7.27.1" + "@babel/helper-member-expression-to-functions" "^7.28.5" "@babel/helper-optimise-call-expression" "^7.27.1" "@babel/helper-replace-supers" "^7.27.1" "@babel/helper-skip-transparent-expression-wrappers" "^7.27.1" - "@babel/traverse" "^7.28.3" + "@babel/traverse" "^7.28.5" semver "^6.3.1" "@babel/helper-create-regexp-features-plugin@^7.18.6", "@babel/helper-create-regexp-features-plugin@^7.27.1": - version "7.27.1" - resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.27.1.tgz#05b0882d97ba1d4d03519e4bce615d70afa18c53" - integrity sha512-uVDC72XVf8UbrH5qQTc18Agb8emwjTiZrQE11Nv3CuBEZmVvTwwE9CBUEvHku06gQCAyYf8Nv6ja1IN+6LMbxQ== + version "7.28.5" + resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.28.5.tgz#7c1ddd64b2065c7f78034b25b43346a7e19ed997" + integrity sha512-N1EhvLtHzOvj7QQOUCCS3NrPJP8c5W6ZXCHDn7Yialuy1iu4r5EmIYkXlKNqT99Ciw+W0mDqWoR6HWMZlFP3hw== dependencies: - "@babel/helper-annotate-as-pure" "^7.27.1" - regexpu-core "^6.2.0" + "@babel/helper-annotate-as-pure" "^7.27.3" + regexpu-core "^6.3.1" semver "^6.3.1" "@babel/helper-define-polyfill-provider@^0.1.5": @@ -201,18 +156,6 @@ resolve "^1.14.2" semver "^6.1.2" -"@babel/helper-define-polyfill-provider@^0.3.2", "@babel/helper-define-polyfill-provider@^0.3.3": - version "0.3.3" - resolved "https://registry.yarnpkg.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.3.3.tgz#8612e55be5d51f0cd1f36b4a5a83924e89884b7a" - integrity sha512-z5aQKU4IzbqCC1XH0nAqfsFLMVSo22SBKUc0BxGrLkolTdPTructy0ToNnlO2zA4j9Q/7pjMZf0DSY+DSTYzww== - dependencies: - "@babel/helper-compilation-targets" "^7.17.7" - "@babel/helper-plugin-utils" "^7.16.7" - debug "^4.1.1" - lodash.debounce "^4.0.8" - resolve "^1.14.2" - semver "^6.1.2" - "@babel/helper-define-polyfill-provider@^0.6.5": version "0.6.5" resolved "https://registry.yarnpkg.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.6.5.tgz#742ccf1cb003c07b48859fc9fa2c1bbe40e5f753" @@ -224,42 +167,20 @@ lodash.debounce "^4.0.8" resolve "^1.22.10" -"@babel/helper-environment-visitor@^7.18.9": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.24.7.tgz#4b31ba9551d1f90781ba83491dd59cf9b269f7d9" - integrity sha512-DoiN84+4Gnd0ncbBOM9AZENV4a5ZiL39HYMyZJGZ/AZEykHYdJw0wW3kdcsh9/Kn+BRXHLkkklZ51ecPKmI1CQ== - dependencies: - "@babel/types" "^7.24.7" - -"@babel/helper-function-name@^7.18.9": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.24.7.tgz#75f1e1725742f39ac6584ee0b16d94513da38dd2" - integrity sha512-FyoJTsj/PEUWu1/TYRiXTIHc8lbw+TDYkZuoE43opPS5TrI7MyONBE1oNvfguEXAD9yhQRrVBnXdXzSLQl9XnA== - dependencies: - "@babel/template" "^7.24.7" - "@babel/types" "^7.24.7" - "@babel/helper-globals@^7.28.0": version "7.28.0" resolved "https://registry.yarnpkg.com/@babel/helper-globals/-/helper-globals-7.28.0.tgz#b9430df2aa4e17bc28665eadeae8aa1d985e6674" integrity sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw== -"@babel/helper-hoist-variables@^7.18.6": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.24.7.tgz#b4ede1cde2fd89436397f30dc9376ee06b0f25ee" - integrity sha512-MJJwhkoGy5c4ehfoRyrJ/owKeMl19U54h27YYftT0o2teQ3FJ3nQUf/I3LlJsX4l3qlw7WRXUmiyajvHXoTubQ== +"@babel/helper-member-expression-to-functions@^7.27.1", "@babel/helper-member-expression-to-functions@^7.28.5": + version "7.28.5" + resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.28.5.tgz#f3e07a10be37ed7a63461c63e6929575945a6150" + integrity sha512-cwM7SBRZcPCLgl8a7cY0soT1SptSzAlMH39vwiRpOQkJlh53r5hdHwLSCZpQdVLT39sZt+CRpNwYG4Y2v77atg== dependencies: - "@babel/types" "^7.24.7" + "@babel/traverse" "^7.28.5" + "@babel/types" "^7.28.5" -"@babel/helper-member-expression-to-functions@^7.27.1": - version "7.27.1" - resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.27.1.tgz#ea1211276be93e798ce19037da6f06fbb994fa44" - integrity sha512-E5chM8eWjTp/aNoVpcbfM7mLxu9XGLWYise2eBKGQomAk/Mb4XoxyqXTZbuTohbsl8EKqdlMhnDI2CCLfcs9wA== - dependencies: - "@babel/traverse" "^7.27.1" - "@babel/types" "^7.27.1" - -"@babel/helper-module-imports@^7.12.13", "@babel/helper-module-imports@^7.16.7", "@babel/helper-module-imports@^7.18.6", "@babel/helper-module-imports@^7.27.1": +"@babel/helper-module-imports@^7.12.13", "@babel/helper-module-imports@^7.16.7", "@babel/helper-module-imports@^7.27.1": version "7.27.1" resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.27.1.tgz#7ef769a323e2655e126673bb6d2d6913bbead204" integrity sha512-0gSFWUPNXNopqtIPQvlD5WgXYI5GY2kP2cCvoT8kczjbfcfuIljTbcWrulD1CIPIX2gt1wghbDy08yE1p+/r3w== @@ -267,7 +188,7 @@ "@babel/traverse" "^7.27.1" "@babel/types" "^7.27.1" -"@babel/helper-module-transforms@^7.12.1", "@babel/helper-module-transforms@^7.18.9", "@babel/helper-module-transforms@^7.27.1", "@babel/helper-module-transforms@^7.28.3": +"@babel/helper-module-transforms@^7.12.1", "@babel/helper-module-transforms@^7.27.1", "@babel/helper-module-transforms@^7.28.3": version "7.28.3" resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.28.3.tgz#a2b37d3da3b2344fe085dab234426f2b9a2fa5f6" integrity sha512-gytXUbs8k2sXS9PnQptz5o0QnpLL51SwASIORY6XaBKF88nsOT0Zw9szLqlSGQDP/4TljBAD5y98p2U1fqkdsw== @@ -288,12 +209,12 @@ resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz#2f75a831269d4f677de49986dff59927533cf375" integrity sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg== -"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.13.0", "@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.16.7", "@babel/helper-plugin-utils@^7.18.6", "@babel/helper-plugin-utils@^7.18.9", "@babel/helper-plugin-utils@^7.20.2", "@babel/helper-plugin-utils@^7.27.1", "@babel/helper-plugin-utils@^7.8.0", "@babel/helper-plugin-utils@^7.8.3": +"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.13.0", "@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.18.6", "@babel/helper-plugin-utils@^7.20.2", "@babel/helper-plugin-utils@^7.27.1", "@babel/helper-plugin-utils@^7.8.0": version "7.27.1" resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.27.1.tgz#ddb2f876534ff8013e6c2b299bf4d39b3c51d44c" integrity sha512-1gn1Up5YXka3YYAHGKpbideQ5Yjf1tDa9qYcgysz+cNCXukyLl6DjPXhD3VRwSb8c0J9tA4b2+rHEZtc6R0tlw== -"@babel/helper-remap-async-to-generator@^7.18.9", "@babel/helper-remap-async-to-generator@^7.27.1": +"@babel/helper-remap-async-to-generator@^7.27.1": version "7.27.1" resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.27.1.tgz#4601d5c7ce2eb2aea58328d43725523fcd362ce6" integrity sha512-7fiA521aVw8lSPeI4ZOD3vRFkoqkJcS+z4hFo82bFSH/2tNd6eJ5qCVMS5OzDmZh/kaHQeBaeyxK6wljcPtveA== @@ -327,24 +248,17 @@ "@babel/traverse" "^7.27.1" "@babel/types" "^7.27.1" -"@babel/helper-split-export-declaration@^7.18.6": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.24.7.tgz#83949436890e07fa3d6873c61a96e3bbf692d856" - integrity sha512-oy5V7pD+UvfkEATUKvIjvIAH/xCzfsFVw7ygW2SI6NClZzquT+mwdTfgfdbUiceh6iQO0CHtCPsyze/MZ2YbAA== - dependencies: - "@babel/types" "^7.24.7" - -"@babel/helper-string-parser@^7.18.10", "@babel/helper-string-parser@^7.27.1": +"@babel/helper-string-parser@^7.27.1": version "7.27.1" resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz#54da796097ab19ce67ed9f88b47bb2ec49367687" integrity sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA== -"@babel/helper-validator-identifier@^7.18.6", "@babel/helper-validator-identifier@^7.25.9", "@babel/helper-validator-identifier@^7.27.1": - version "7.27.1" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.27.1.tgz#a7054dcc145a967dd4dc8fee845a57c1316c9df8" - integrity sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow== +"@babel/helper-validator-identifier@^7.27.1", "@babel/helper-validator-identifier@^7.28.5": + version "7.28.5" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.28.5.tgz#010b6938fab7cb7df74aa2bbc06aa503b8fe5fb4" + integrity sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q== -"@babel/helper-validator-option@^7.18.6", "@babel/helper-validator-option@^7.27.1": +"@babel/helper-validator-option@^7.27.1": version "7.27.1" resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.27.1.tgz#fa52f5b1e7db1ab049445b421c4471303897702f" integrity sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg== @@ -358,7 +272,7 @@ "@babel/traverse" "^7.28.3" "@babel/types" "^7.28.2" -"@babel/helpers@^7.12.5", "@babel/helpers@^7.18.9", "@babel/helpers@^7.28.4": +"@babel/helpers@^7.12.5", "@babel/helpers@^7.28.4": version "7.28.4" resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.28.4.tgz#fe07274742e95bdf7cf1443593eeb8926ab63827" integrity sha512-HFN59MmQXGHVyYadKLVumYsA9dBFun/ldYxipEjzA4196jpLZd8UjEEBLkbEkvfYreDqJhZxYAWFPtrfhNpj4w== @@ -366,35 +280,20 @@ "@babel/template" "^7.27.2" "@babel/types" "^7.28.4" -"@babel/highlight@^7.10.4": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.25.9.tgz#8141ce68fc73757946f983b343f1231f4691acc6" - integrity sha512-llL88JShoCsth8fF8R4SJnIn+WLvR6ccFxu1H3FlMhDontdcmZWf2HgIZ7AIqV3Xcck1idlohrN4EUBQz6klbw== +"@babel/parser@^7.1.0", "@babel/parser@^7.12.11", "@babel/parser@^7.12.7", "@babel/parser@^7.14.7", "@babel/parser@^7.20.7", "@babel/parser@^7.27.2", "@babel/parser@^7.28.5": + version "7.28.5" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.28.5.tgz#0b0225ee90362f030efd644e8034c99468893b08" + integrity sha512-KKBU1VGYR7ORr3At5HAtUQ+TV3SzRCXmA/8OdDZiLDBIZxVyzXuztPjfLd3BV1PRAQGCMWWSHYhL0F8d5uHBDQ== dependencies: - "@babel/helper-validator-identifier" "^7.25.9" - chalk "^2.4.2" - js-tokens "^4.0.0" - picocolors "^1.0.0" + "@babel/types" "^7.28.5" -"@babel/parser@7.18.11": - version "7.18.11" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.18.11.tgz#68bb07ab3d380affa9a3f96728df07969645d2d9" - integrity sha512-9JKn5vN+hDt0Hdqn1PiJ2guflwP+B6Ga8qbDuoF0PzzVhrzsKIJo8yGqVk6CmMHiMei9w1C1Bp9IMJSIK+HPIQ== - -"@babel/parser@^7.1.0", "@babel/parser@^7.12.11", "@babel/parser@^7.12.7", "@babel/parser@^7.14.7", "@babel/parser@^7.18.10", "@babel/parser@^7.18.11", "@babel/parser@^7.20.7", "@babel/parser@^7.23.9", "@babel/parser@^7.27.2", "@babel/parser@^7.28.3", "@babel/parser@^7.28.4": - version "7.28.4" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.28.4.tgz#da25d4643532890932cc03f7705fe19637e03fa8" - integrity sha512-yZbBqeM6TkpP9du/I2pUZnJsRMGGvOuIrhjzC1AwHwW+6he4mni6Bp/m8ijn0iOuZuPI2BfkCoSRunpyjnrQKg== - dependencies: - "@babel/types" "^7.28.4" - -"@babel/plugin-bugfix-firefox-class-in-computed-class-key@^7.27.1": - version "7.27.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-firefox-class-in-computed-class-key/-/plugin-bugfix-firefox-class-in-computed-class-key-7.27.1.tgz#61dd8a8e61f7eb568268d1b5f129da3eee364bf9" - integrity sha512-QPG3C9cCVRQLxAVwmefEmwdTanECuUBMQZ/ym5kiw3XKCGA7qkuQLcjWWHcrD/GKbn/WmJwaezfuuAOcyKlRPA== +"@babel/plugin-bugfix-firefox-class-in-computed-class-key@^7.28.5": + version "7.28.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-firefox-class-in-computed-class-key/-/plugin-bugfix-firefox-class-in-computed-class-key-7.28.5.tgz#fbde57974707bbfa0376d34d425ff4fa6c732421" + integrity sha512-87GDMS3tsmMSi/3bWOte1UblL+YUTFMV8SZPZ2eSEL17s74Cw/l63rR6NmGVKMYW2GYi85nE+/d6Hw5N0bEk2Q== dependencies: "@babel/helper-plugin-utils" "^7.27.1" - "@babel/traverse" "^7.27.1" + "@babel/traverse" "^7.28.5" "@babel/plugin-bugfix-safari-class-field-initializer-scope@^7.27.1": version "7.27.1" @@ -403,14 +302,14 @@ dependencies: "@babel/helper-plugin-utils" "^7.27.1" -"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@^7.18.6", "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@^7.27.1": +"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@^7.27.1": version "7.27.1" resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.27.1.tgz#beb623bd573b8b6f3047bd04c32506adc3e58a72" integrity sha512-g4L7OYun04N1WyqMNjldFwlfPCLVkgB54A/YCXICZYBsvJJE3kByKv9c9+R/nAfmIfjl2rKYLNyMHboYbZaWaA== dependencies: "@babel/helper-plugin-utils" "^7.27.1" -"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@^7.18.9", "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@^7.27.1": +"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@^7.27.1": version "7.27.1" resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.27.1.tgz#e134a5479eb2ba9c02714e8c1ebf1ec9076124fd" integrity sha512-oO02gcONcD5O1iTLi/6frMJBIwWEHceWGSGqrpCmEL8nogiS6J9PBlE48CaK20/Jx1LuRml9aDftLgdjXT8+Cw== @@ -427,17 +326,7 @@ "@babel/helper-plugin-utils" "^7.27.1" "@babel/traverse" "^7.28.3" -"@babel/plugin-proposal-async-generator-functions@^7.18.10": - version "7.20.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.20.7.tgz#bfb7276d2d573cb67ba379984a2334e262ba5326" - integrity sha512-xMbiLsn/8RK7Wq7VeVytytS2L6qE69bXPB10YCmMdDZbKF4okCqY74pI/jJQ/8U0b/F6NrT2+14b8/P9/3AMGA== - dependencies: - "@babel/helper-environment-visitor" "^7.18.9" - "@babel/helper-plugin-utils" "^7.20.2" - "@babel/helper-remap-async-to-generator" "^7.18.9" - "@babel/plugin-syntax-async-generators" "^7.8.4" - -"@babel/plugin-proposal-class-properties@7.18.6", "@babel/plugin-proposal-class-properties@^7.12.1", "@babel/plugin-proposal-class-properties@^7.18.6": +"@babel/plugin-proposal-class-properties@^7.12.1": version "7.18.6" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.18.6.tgz#b110f59741895f7ec21a6fff696ec46265c446a3" integrity sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ== @@ -445,15 +334,6 @@ "@babel/helper-create-class-features-plugin" "^7.18.6" "@babel/helper-plugin-utils" "^7.18.6" -"@babel/plugin-proposal-class-static-block@^7.18.6": - version "7.21.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.21.0.tgz#77bdd66fb7b605f3a61302d224bdfacf5547977d" - integrity sha512-XP5G9MWNUskFuP30IfFSEFB0Z6HzLIUcjYM4bYOPHXl7eiJ9HFv8tWj6TXTN5QODiEhDZAeI4hLok2iHFFV4hw== - dependencies: - "@babel/helper-create-class-features-plugin" "^7.21.0" - "@babel/helper-plugin-utils" "^7.20.2" - "@babel/plugin-syntax-class-static-block" "^7.14.5" - "@babel/plugin-proposal-decorators@^7.12.12": version "7.28.0" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.28.0.tgz#419c8acc31088e05a774344c021800f7ddc39bf0" @@ -463,22 +343,6 @@ "@babel/helper-plugin-utils" "^7.27.1" "@babel/plugin-syntax-decorators" "^7.27.1" -"@babel/plugin-proposal-dynamic-import@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.18.6.tgz#72bcf8d408799f547d759298c3c27c7e7faa4d94" - integrity sha512-1auuwmK+Rz13SJj36R+jqFPMJWyKEDd7lLSdOj4oJK0UTgGueSAtkrCvz9ewmgyU/P941Rv2fQwZJN8s6QruXw== - dependencies: - "@babel/helper-plugin-utils" "^7.18.6" - "@babel/plugin-syntax-dynamic-import" "^7.8.3" - -"@babel/plugin-proposal-export-default-from@7.18.10": - version "7.18.10" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-export-default-from/-/plugin-proposal-export-default-from-7.18.10.tgz#091f4794dbce4027c03cf4ebc64d3fb96b75c206" - integrity sha512-5H2N3R2aQFxkV4PIBUR/i7PUSwgTZjouJKzI8eKswfIjT0PhvzkPn0t0wIS5zn6maQuvtT0t1oHtMUz61LOuow== - dependencies: - "@babel/helper-plugin-utils" "^7.18.9" - "@babel/plugin-syntax-export-default-from" "^7.18.6" - "@babel/plugin-proposal-export-default-from@^7.12.1": version "7.27.1" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-export-default-from/-/plugin-proposal-export-default-from-7.27.1.tgz#59b050b0e5fdc366162ab01af4fcbac06ea40919" @@ -486,31 +350,7 @@ dependencies: "@babel/helper-plugin-utils" "^7.27.1" -"@babel/plugin-proposal-export-namespace-from@^7.18.9": - version "7.18.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.18.9.tgz#5f7313ab348cdb19d590145f9247540e94761203" - integrity sha512-k1NtHyOMvlDDFeb9G5PhUXuGj8m/wiwojgQVEhJ/fsVsMCpLyOP4h0uGEjYJKrRI+EVPlb5Jk+Gt9P97lOGwtA== - dependencies: - "@babel/helper-plugin-utils" "^7.18.9" - "@babel/plugin-syntax-export-namespace-from" "^7.8.3" - -"@babel/plugin-proposal-json-strings@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.18.6.tgz#7e8788c1811c393aff762817e7dbf1ebd0c05f0b" - integrity sha512-lr1peyn9kOdbYc0xr0OdHTZ5FMqS6Di+H0Fz2I/JwMzGmzJETNeOFq2pBySw6X/KFL5EWDjlJuMsUGRFb8fQgQ== - dependencies: - "@babel/helper-plugin-utils" "^7.18.6" - "@babel/plugin-syntax-json-strings" "^7.8.3" - -"@babel/plugin-proposal-logical-assignment-operators@^7.18.9": - version "7.20.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.20.7.tgz#dfbcaa8f7b4d37b51e8bfb46d94a5aea2bb89d83" - integrity sha512-y7C7cZgpMIjWlKE5T7eJwp+tnRYM89HmRvWM5EQuB5BoHEONjmQ8lSNmBUwOyy/GFRsohJED51YBF79hE1djug== - dependencies: - "@babel/helper-plugin-utils" "^7.20.2" - "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" - -"@babel/plugin-proposal-nullish-coalescing-operator@^7.12.1", "@babel/plugin-proposal-nullish-coalescing-operator@^7.18.6": +"@babel/plugin-proposal-nullish-coalescing-operator@^7.12.1": version "7.18.6" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.18.6.tgz#fdd940a99a740e577d6c753ab6fbb43fdb9467e1" integrity sha512-wQxQzxYeJqHcfppzBDnm1yAY0jSRkUXR2z8RePZYrKwMKgMlE8+Z6LUno+bd6LvbGh8Gltvy74+9pIYkr+XkKA== @@ -518,14 +358,6 @@ "@babel/helper-plugin-utils" "^7.18.6" "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" -"@babel/plugin-proposal-numeric-separator@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.18.6.tgz#899b14fbafe87f053d2c5ff05b36029c62e13c75" - integrity sha512-ozlZFogPqoLm8WBr5Z8UckIoE4YQ5KESVcNudyXOR8uqIkliTEgJ3RoketfG6pmzLdeZF0H/wjE9/cCEitBl7Q== - dependencies: - "@babel/helper-plugin-utils" "^7.18.6" - "@babel/plugin-syntax-numeric-separator" "^7.10.4" - "@babel/plugin-proposal-object-rest-spread@7.12.1": version "7.12.1" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.12.1.tgz#def9bd03cea0f9b72283dac0ec22d289c7691069" @@ -535,18 +367,7 @@ "@babel/plugin-syntax-object-rest-spread" "^7.8.0" "@babel/plugin-transform-parameters" "^7.12.1" -"@babel/plugin-proposal-object-rest-spread@7.18.9": - version "7.18.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.18.9.tgz#f9434f6beb2c8cae9dfcf97d2a5941bbbf9ad4e7" - integrity sha512-kDDHQ5rflIeY5xl69CEqGEZ0KY369ehsCIEbTGb4siHG5BE9sga/T0r0OUwyZNLMmZE79E1kbsqAjwFCW4ds6Q== - dependencies: - "@babel/compat-data" "^7.18.8" - "@babel/helper-compilation-targets" "^7.18.9" - "@babel/helper-plugin-utils" "^7.18.9" - "@babel/plugin-syntax-object-rest-spread" "^7.8.3" - "@babel/plugin-transform-parameters" "^7.18.8" - -"@babel/plugin-proposal-object-rest-spread@^7.12.1", "@babel/plugin-proposal-object-rest-spread@^7.18.9": +"@babel/plugin-proposal-object-rest-spread@^7.12.1": version "7.20.7" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.20.7.tgz#aa662940ef425779c75534a5c41e9d936edc390a" integrity sha512-d2S98yCiLxDVmBmE8UjGcfPvNEUbA1U5q5WxaWFUGRzJSVAZqm5W6MbPct0jxnegUZ0niLeNX+IOzEs7wYg9Dg== @@ -557,15 +378,7 @@ "@babel/plugin-syntax-object-rest-spread" "^7.8.3" "@babel/plugin-transform-parameters" "^7.20.7" -"@babel/plugin-proposal-optional-catch-binding@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.18.6.tgz#f9400d0e6a3ea93ba9ef70b09e72dd6da638a2cb" - integrity sha512-Q40HEhs9DJQyaZfUjjn6vE8Cv4GmMHCYuMGIWUnlxH6400VGxOuwWsPt4FxXxJkC/5eOzgn0z21M9gMT4MOhbw== - dependencies: - "@babel/helper-plugin-utils" "^7.18.6" - "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" - -"@babel/plugin-proposal-optional-chaining@^7.12.7", "@babel/plugin-proposal-optional-chaining@^7.18.9": +"@babel/plugin-proposal-optional-chaining@^7.12.7": version "7.21.0" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.21.0.tgz#886f5c8978deb7d30f678b2e24346b287234d3ea" integrity sha512-p4zeefM72gpmEe2fkUr/OnOXpWEf8nAgk7ZYVqqfFiyIG7oFfVZcCrU64hWn5xp4tQ9LkV4bTIa5rD0KANpKNA== @@ -574,7 +387,7 @@ "@babel/helper-skip-transparent-expression-wrappers" "^7.20.0" "@babel/plugin-syntax-optional-chaining" "^7.8.3" -"@babel/plugin-proposal-private-methods@^7.12.1", "@babel/plugin-proposal-private-methods@^7.18.6": +"@babel/plugin-proposal-private-methods@^7.12.1": version "7.18.6" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.18.6.tgz#5209de7d213457548a98436fa2882f52f4be6bea" integrity sha512-nutsvktDItsNn4rpGItSNV2sz1XwS+nfU0Rg8aCx3W3NOKVzdMjJRu0O5OkgDp3ZGICSTbgRpxZoWsxoKRvbeA== @@ -587,7 +400,7 @@ resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0-placeholder-for-preset-env.2.tgz#7844f9289546efa9febac2de4cfe358a050bd703" integrity sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w== -"@babel/plugin-proposal-private-property-in-object@^7.12.1", "@babel/plugin-proposal-private-property-in-object@^7.18.6": +"@babel/plugin-proposal-private-property-in-object@^7.12.1": version "7.21.11" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.11.tgz#69d597086b6760c4126525cfa154f34631ff272c" integrity sha512-0QZ8qP/3RLDVBwBFoWAwCtgcDZJVwA5LUJRZU8x2YFfKNuFq161wK3cuGrALu5yiPu+vzwTAg/sMWVNeWeNyaw== @@ -597,14 +410,6 @@ "@babel/helper-plugin-utils" "^7.20.2" "@babel/plugin-syntax-private-property-in-object" "^7.14.5" -"@babel/plugin-proposal-unicode-property-regex@^7.18.6", "@babel/plugin-proposal-unicode-property-regex@^7.4.4": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.18.6.tgz#af613d2cd5e643643b65cded64207b15c85cb78e" - integrity sha512-2BShG/d5yoZyXZfVePH91urL5wTG6ASZU9M4o03lKK8u8UW1y08OMttBSOADTcJrnPMpvDXRG3G8fyLh4ovs8w== - dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.18.6" - "@babel/helper-plugin-utils" "^7.18.6" - "@babel/plugin-syntax-async-generators@^7.8.4": version "7.8.4" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz#a983fb1aeb2ec3f6ed042a210f640e90e786fe0d" @@ -647,20 +452,6 @@ dependencies: "@babel/helper-plugin-utils" "^7.8.0" -"@babel/plugin-syntax-export-default-from@^7.18.6": - version "7.27.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-export-default-from/-/plugin-syntax-export-default-from-7.27.1.tgz#8efed172e79ab657c7fa4d599224798212fb7e18" - integrity sha512-eBC/3KSekshx19+N40MzjWqJd7KTEdOoLesAfa4IDFI8eRz5a47i5Oszus6zG/cwIXN63YhgLOMSSNJx49sENg== - dependencies: - "@babel/helper-plugin-utils" "^7.27.1" - -"@babel/plugin-syntax-export-namespace-from@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz#028964a9ba80dbc094c915c487ad7c4e7a66465a" - integrity sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q== - dependencies: - "@babel/helper-plugin-utils" "^7.8.3" - "@babel/plugin-syntax-flow@^7.27.1": version "7.27.1" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.27.1.tgz#6c83cf0d7d635b716827284b7ecd5aead9237662" @@ -668,7 +459,7 @@ dependencies: "@babel/helper-plugin-utils" "^7.27.1" -"@babel/plugin-syntax-import-assertions@^7.18.6", "@babel/plugin-syntax-import-assertions@^7.27.1": +"@babel/plugin-syntax-import-assertions@^7.27.1": version "7.27.1" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.27.1.tgz#88894aefd2b03b5ee6ad1562a7c8e1587496aecd" integrity sha512-UT/Jrhw57xg4ILHLFnzFpPDlMbcdEicaAtjPQpbj9wa8T4r5KVWCimHcL/460g8Ht0DMxDyjsLgiWSkVjnwPFg== @@ -703,7 +494,7 @@ dependencies: "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-syntax-jsx@^7.27.1", "@babel/plugin-syntax-jsx@^7.7.2": +"@babel/plugin-syntax-jsx@^7.27.1": version "7.27.1" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.27.1.tgz#2f9beb5eff30fa507c5532d107daac7b888fa34c" integrity sha512-y8YTNIeKoyhGd9O0Jiyzyyqk8gdjnumGTQPsz0xOZOQ2RmkVJeZ1vmmfIvFEKqucBG6axJGBZDE/7iI5suUI/w== @@ -781,7 +572,7 @@ "@babel/helper-create-regexp-features-plugin" "^7.18.6" "@babel/helper-plugin-utils" "^7.18.6" -"@babel/plugin-transform-arrow-functions@^7.12.1", "@babel/plugin-transform-arrow-functions@^7.18.6", "@babel/plugin-transform-arrow-functions@^7.27.1": +"@babel/plugin-transform-arrow-functions@^7.12.1", "@babel/plugin-transform-arrow-functions@^7.27.1": version "7.27.1" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.27.1.tgz#6e2061067ba3ab0266d834a9f94811196f2aba9a" integrity sha512-8Z4TGic6xW70FKThA5HYEKKyBpOOsucTOD1DjU3fZxDg+K3zBJcXMFnt/4yQiZnf5+MiOMSXQ9PaEK/Ilh1DeA== @@ -797,7 +588,7 @@ "@babel/helper-remap-async-to-generator" "^7.27.1" "@babel/traverse" "^7.28.0" -"@babel/plugin-transform-async-to-generator@^7.14.5", "@babel/plugin-transform-async-to-generator@^7.18.6", "@babel/plugin-transform-async-to-generator@^7.22.5", "@babel/plugin-transform-async-to-generator@^7.27.1": +"@babel/plugin-transform-async-to-generator@^7.14.5", "@babel/plugin-transform-async-to-generator@^7.22.5", "@babel/plugin-transform-async-to-generator@^7.27.1": version "7.27.1" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.27.1.tgz#9a93893b9379b39466c74474f55af03de78c66e7" integrity sha512-NREkZsZVJS4xmTr8qzE5y8AfIPqsdQfRuUiLRTEzb7Qii8iFWCyDKaUV2c0rCuh4ljDZ98ALHP/PetiBV2nddA== @@ -806,17 +597,17 @@ "@babel/helper-plugin-utils" "^7.27.1" "@babel/helper-remap-async-to-generator" "^7.27.1" -"@babel/plugin-transform-block-scoped-functions@^7.18.6", "@babel/plugin-transform-block-scoped-functions@^7.27.1": +"@babel/plugin-transform-block-scoped-functions@^7.27.1": version "7.27.1" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.27.1.tgz#558a9d6e24cf72802dd3b62a4b51e0d62c0f57f9" integrity sha512-cnqkuOtZLapWYZUYM5rVIdv1nXYuFVIltZ6ZJ7nIj585QsjKM5dhL2Fu/lICXZ1OyIAFc7Qy+bvDAtTXqGrlhg== dependencies: "@babel/helper-plugin-utils" "^7.27.1" -"@babel/plugin-transform-block-scoping@^7.12.12", "@babel/plugin-transform-block-scoping@^7.18.9", "@babel/plugin-transform-block-scoping@^7.28.0": - version "7.28.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.28.4.tgz#e19ac4ddb8b7858bac1fd5c1be98a994d9726410" - integrity sha512-1yxmvN0MJHOhPVmAsmoW5liWwoILobu/d/ShymZmj867bAdxGbehIrew1DuLpw2Ukv+qDSSPQdYW1dLNE7t11A== +"@babel/plugin-transform-block-scoping@^7.12.12", "@babel/plugin-transform-block-scoping@^7.28.5": + version "7.28.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.28.5.tgz#e0d3af63bd8c80de2e567e690a54e84d85eb16f6" + integrity sha512-45DmULpySVvmq9Pj3X9B+62Xe+DJGov27QravQJU1LLcapR6/10i+gYVAucGGJpHBp5mYxIMK4nDAT/QDLr47g== dependencies: "@babel/helper-plugin-utils" "^7.27.1" @@ -836,7 +627,7 @@ "@babel/helper-create-class-features-plugin" "^7.28.3" "@babel/helper-plugin-utils" "^7.27.1" -"@babel/plugin-transform-classes@^7.12.1", "@babel/plugin-transform-classes@^7.18.9", "@babel/plugin-transform-classes@^7.28.3": +"@babel/plugin-transform-classes@^7.12.1", "@babel/plugin-transform-classes@^7.28.4": version "7.28.4" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.28.4.tgz#75d66175486788c56728a73424d67cbc7473495c" integrity sha512-cFOlhIYPBv/iBoc+KS3M6et2XPtbT2HiCRfBXWtfpc9OAyostldxIf9YAYB6ypURBBbx+Qv6nyrLzASfJe+hBA== @@ -848,7 +639,7 @@ "@babel/helper-replace-supers" "^7.27.1" "@babel/traverse" "^7.28.4" -"@babel/plugin-transform-computed-properties@^7.18.9", "@babel/plugin-transform-computed-properties@^7.27.1": +"@babel/plugin-transform-computed-properties@^7.27.1": version "7.27.1" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.27.1.tgz#81662e78bf5e734a97982c2b7f0a793288ef3caa" integrity sha512-lj9PGWvMTVksbWiDT2tW68zGS/cyo4AkZ/QTp0sQT0mjPopCmrSkzxeXkznjqBxzDI6TclZhOJbBmbBLjuOZUw== @@ -856,15 +647,15 @@ "@babel/helper-plugin-utils" "^7.27.1" "@babel/template" "^7.27.1" -"@babel/plugin-transform-destructuring@^7.12.1", "@babel/plugin-transform-destructuring@^7.18.9", "@babel/plugin-transform-destructuring@^7.28.0": - version "7.28.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.28.0.tgz#0f156588f69c596089b7d5b06f5af83d9aa7f97a" - integrity sha512-v1nrSMBiKcodhsyJ4Gf+Z0U/yawmJDBOTpEB3mcQY52r9RIyPneGyAS/yM6seP/8I+mWI3elOMtT5dB8GJVs+A== +"@babel/plugin-transform-destructuring@^7.12.1", "@babel/plugin-transform-destructuring@^7.28.0", "@babel/plugin-transform-destructuring@^7.28.5": + version "7.28.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.28.5.tgz#b8402764df96179a2070bb7b501a1586cf8ad7a7" + integrity sha512-Kl9Bc6D0zTUcFUvkNuQh4eGXPKKNDOJQXVyyM4ZAQPMveniJdxi8XMJwLo+xSoW3MIq81bD33lcUe9kZpl0MCw== dependencies: "@babel/helper-plugin-utils" "^7.27.1" - "@babel/traverse" "^7.28.0" + "@babel/traverse" "^7.28.5" -"@babel/plugin-transform-dotall-regex@^7.18.6", "@babel/plugin-transform-dotall-regex@^7.27.1", "@babel/plugin-transform-dotall-regex@^7.4.4": +"@babel/plugin-transform-dotall-regex@^7.27.1": version "7.27.1" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.27.1.tgz#aa6821de864c528b1fecf286f0a174e38e826f4d" integrity sha512-gEbkDVGRvjj7+T1ivxrfgygpT7GUd4vmODtYpbs0gZATdkX8/iSnOtZSxiZnsgm1YjTgjI6VKBGSJJevkrclzw== @@ -872,7 +663,7 @@ "@babel/helper-create-regexp-features-plugin" "^7.27.1" "@babel/helper-plugin-utils" "^7.27.1" -"@babel/plugin-transform-duplicate-keys@^7.18.9", "@babel/plugin-transform-duplicate-keys@^7.27.1": +"@babel/plugin-transform-duplicate-keys@^7.27.1": version "7.27.1" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.27.1.tgz#f1fbf628ece18e12e7b32b175940e68358f546d1" integrity sha512-MTyJk98sHvSs+cvZ4nOauwTTG1JeonDjSGvGGUNHreGQns+Mpt6WX/dVzWBHgg+dYZhkC4X+zTDfkTU+Vy9y7Q== @@ -902,10 +693,10 @@ "@babel/helper-plugin-utils" "^7.27.1" "@babel/plugin-transform-destructuring" "^7.28.0" -"@babel/plugin-transform-exponentiation-operator@^7.18.6", "@babel/plugin-transform-exponentiation-operator@^7.27.1": - version "7.27.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.27.1.tgz#fc497b12d8277e559747f5a3ed868dd8064f83e1" - integrity sha512-uspvXnhHvGKf2r4VVtBpeFnuDWsJLQ6MF6lGJLC89jBR1uoVeqM416AZtTuhTezOfgHicpJQmoD5YUakO/YmXQ== +"@babel/plugin-transform-exponentiation-operator@^7.28.5": + version "7.28.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.28.5.tgz#7cc90a8170e83532676cfa505278e147056e94fe" + integrity sha512-D4WIMaFtwa2NizOp+dnoFjRez/ClKiC2BqqImwKd1X28nqBtZEyCYJ2ozQrrzlxAFrcrjxo39S6khe9RNDlGzw== dependencies: "@babel/helper-plugin-utils" "^7.27.1" @@ -924,7 +715,7 @@ "@babel/helper-plugin-utils" "^7.27.1" "@babel/plugin-syntax-flow" "^7.27.1" -"@babel/plugin-transform-for-of@^7.12.1", "@babel/plugin-transform-for-of@^7.18.8", "@babel/plugin-transform-for-of@^7.27.1": +"@babel/plugin-transform-for-of@^7.12.1", "@babel/plugin-transform-for-of@^7.27.1": version "7.27.1" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.27.1.tgz#bc24f7080e9ff721b63a70ac7b2564ca15b6c40a" integrity sha512-BfbWFFEJFQzLCQ5N8VocnCtA8J1CLkNTe2Ms2wocj75dd6VpiqS5Z5quTYcUoo4Yq+DN0rtikODccuv7RU81sw== @@ -932,7 +723,7 @@ "@babel/helper-plugin-utils" "^7.27.1" "@babel/helper-skip-transparent-expression-wrappers" "^7.27.1" -"@babel/plugin-transform-function-name@^7.18.9", "@babel/plugin-transform-function-name@^7.27.1": +"@babel/plugin-transform-function-name@^7.27.1": version "7.27.1" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.27.1.tgz#4d0bf307720e4dce6d7c30fcb1fd6ca77bdeb3a7" integrity sha512-1bQeydJF9Nr1eBCMMbC+hdwmRlsv5XYOMu03YSWFwNs0HsAmtSxxF1fyuYPqemVldVyFmlCU7w8UE14LupUSZQ== @@ -948,28 +739,28 @@ dependencies: "@babel/helper-plugin-utils" "^7.27.1" -"@babel/plugin-transform-literals@^7.18.9", "@babel/plugin-transform-literals@^7.27.1": +"@babel/plugin-transform-literals@^7.27.1": version "7.27.1" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.27.1.tgz#baaefa4d10a1d4206f9dcdda50d7d5827bb70b24" integrity sha512-0HCFSepIpLTkLcsi86GG3mTUzxV5jpmbv97hTETW3yzrAij8aqlD36toB1D0daVFJM8NK6GvKO0gslVQmm+zZA== dependencies: "@babel/helper-plugin-utils" "^7.27.1" -"@babel/plugin-transform-logical-assignment-operators@^7.27.1": - version "7.27.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.27.1.tgz#890cb20e0270e0e5bebe3f025b434841c32d5baa" - integrity sha512-SJvDs5dXxiae4FbSL1aBJlG4wvl594N6YEVVn9e3JGulwioy6z3oPjx/sQBO3Y4NwUu5HNix6KJ3wBZoewcdbw== +"@babel/plugin-transform-logical-assignment-operators@^7.28.5": + version "7.28.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.28.5.tgz#d028fd6db8c081dee4abebc812c2325e24a85b0e" + integrity sha512-axUuqnUTBuXyHGcJEVVh9pORaN6wC5bYfE7FGzPiaWa3syib9m7g+/IT/4VgCOe2Upef43PHzeAvcrVek6QuuA== dependencies: "@babel/helper-plugin-utils" "^7.27.1" -"@babel/plugin-transform-member-expression-literals@^7.18.6", "@babel/plugin-transform-member-expression-literals@^7.27.1": +"@babel/plugin-transform-member-expression-literals@^7.27.1": version "7.27.1" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.27.1.tgz#37b88ba594d852418e99536f5612f795f23aeaf9" integrity sha512-hqoBX4dcZ1I33jCSWcXrP+1Ku7kdqXf1oeah7ooKOIiAdKQ+uqftgCFNOSzA5AMS2XIHEYeGFg4cKRCdpxzVOQ== dependencies: "@babel/helper-plugin-utils" "^7.27.1" -"@babel/plugin-transform-modules-amd@^7.18.6", "@babel/plugin-transform-modules-amd@^7.27.1": +"@babel/plugin-transform-modules-amd@^7.27.1": version "7.27.1" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.27.1.tgz#a4145f9d87c2291fe2d05f994b65dba4e3e7196f" integrity sha512-iCsytMg/N9/oFq6n+gFTvUYDZQOMK5kEdeYxmxt91fcJGycfxVP9CnrxoliM0oumFERba2i8ZtwRUCMhvP1LnA== @@ -977,7 +768,7 @@ "@babel/helper-module-transforms" "^7.27.1" "@babel/helper-plugin-utils" "^7.27.1" -"@babel/plugin-transform-modules-commonjs@^7.18.6", "@babel/plugin-transform-modules-commonjs@^7.27.1": +"@babel/plugin-transform-modules-commonjs@^7.27.1": version "7.27.1" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.27.1.tgz#8e44ed37c2787ecc23bdc367f49977476614e832" integrity sha512-OJguuwlTYlN0gBZFRPqwOGNWssZjfIUdS7HMYtN8c1KmwpwHFBwTeFZrg9XZa+DFTitWOW5iTAG7tyCUPsCCyw== @@ -985,17 +776,17 @@ "@babel/helper-module-transforms" "^7.27.1" "@babel/helper-plugin-utils" "^7.27.1" -"@babel/plugin-transform-modules-systemjs@^7.18.9", "@babel/plugin-transform-modules-systemjs@^7.27.1": - version "7.27.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.27.1.tgz#00e05b61863070d0f3292a00126c16c0e024c4ed" - integrity sha512-w5N1XzsRbc0PQStASMksmUeqECuzKuTJer7kFagK8AXgpCMkeDMO5S+aaFb7A51ZYDF7XI34qsTX+fkHiIm5yA== +"@babel/plugin-transform-modules-systemjs@^7.28.5": + version "7.28.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.28.5.tgz#7439e592a92d7670dfcb95d0cbc04bd3e64801d2" + integrity sha512-vn5Jma98LCOeBy/KpeQhXcV2WZgaRUtjwQmjoBuLNlOmkg0fB5pdvYVeWRYI69wWKwK2cD1QbMiUQnoujWvrew== dependencies: - "@babel/helper-module-transforms" "^7.27.1" + "@babel/helper-module-transforms" "^7.28.3" "@babel/helper-plugin-utils" "^7.27.1" - "@babel/helper-validator-identifier" "^7.27.1" - "@babel/traverse" "^7.27.1" + "@babel/helper-validator-identifier" "^7.28.5" + "@babel/traverse" "^7.28.5" -"@babel/plugin-transform-modules-umd@^7.18.6", "@babel/plugin-transform-modules-umd@^7.27.1": +"@babel/plugin-transform-modules-umd@^7.27.1": version "7.27.1" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.27.1.tgz#63f2cf4f6dc15debc12f694e44714863d34cd334" integrity sha512-iQBE/xC5BV1OxJbp6WG7jq9IWiD+xxlZhLrdwpPkTX3ydmXdvoCpyfJN7acaIBZaOqTfr76pgzqBJflNbeRK+w== @@ -1003,7 +794,7 @@ "@babel/helper-module-transforms" "^7.27.1" "@babel/helper-plugin-utils" "^7.27.1" -"@babel/plugin-transform-named-capturing-groups-regex@^7.18.6", "@babel/plugin-transform-named-capturing-groups-regex@^7.27.1": +"@babel/plugin-transform-named-capturing-groups-regex@^7.27.1": version "7.27.1" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.27.1.tgz#f32b8f7818d8fc0cc46ee20a8ef75f071af976e1" integrity sha512-SstR5JYy8ddZvD6MhV0tM/j16Qds4mIpJTOd1Yu9J9pJjH93bxHECF7pgtc28XvkzTD6Pxcm/0Z73Hvk7kb3Ng== @@ -1011,7 +802,7 @@ "@babel/helper-create-regexp-features-plugin" "^7.27.1" "@babel/helper-plugin-utils" "^7.27.1" -"@babel/plugin-transform-new-target@^7.18.6", "@babel/plugin-transform-new-target@^7.27.1": +"@babel/plugin-transform-new-target@^7.27.1": version "7.27.1" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.27.1.tgz#259c43939728cad1706ac17351b7e6a7bea1abeb" integrity sha512-f6PiYeqXQ05lYq3TIfIDu/MtliKUbNwkGApPUvyo6+tc7uaR4cPjPe7DFPr15Uyycg2lZU6btZ575CuQoYh7MQ== @@ -1032,7 +823,7 @@ dependencies: "@babel/helper-plugin-utils" "^7.27.1" -"@babel/plugin-transform-object-rest-spread@^7.28.0": +"@babel/plugin-transform-object-rest-spread@^7.28.4": version "7.28.4" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.28.4.tgz#9ee1ceca80b3e6c4bac9247b2149e36958f7f98d" integrity sha512-373KA2HQzKhQCYiRVIRr+3MjpCObqzDlyrM6u4I201wL8Mp2wHf7uB8GhDwis03k2ti8Zr65Zyyqs1xOxUF/Ew== @@ -1043,7 +834,7 @@ "@babel/plugin-transform-parameters" "^7.27.7" "@babel/traverse" "^7.28.4" -"@babel/plugin-transform-object-super@^7.18.6", "@babel/plugin-transform-object-super@^7.27.1": +"@babel/plugin-transform-object-super@^7.27.1": version "7.27.1" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.27.1.tgz#1c932cd27bf3874c43a5cac4f43ebf970c9871b5" integrity sha512-SFy8S9plRPbIcxlJ8A6mT/CxFdJx/c04JEctz4jf8YZaVS2px34j7NXRrlGlHkN/M2gnpL37ZpGRGVFLd3l8Ng== @@ -1058,15 +849,15 @@ dependencies: "@babel/helper-plugin-utils" "^7.27.1" -"@babel/plugin-transform-optional-chaining@^7.27.1": - version "7.27.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.27.1.tgz#874ce3c4f06b7780592e946026eb76a32830454f" - integrity sha512-BQmKPPIuc8EkZgNKsv0X4bPmOoayeu4F1YCwx2/CfmDSXDbp7GnzlUH+/ul5VGfRg1AoFPsrIThlEBj2xb4CAg== +"@babel/plugin-transform-optional-chaining@^7.27.1", "@babel/plugin-transform-optional-chaining@^7.28.5": + version "7.28.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.28.5.tgz#8238c785f9d5c1c515a90bf196efb50d075a4b26" + integrity sha512-N6fut9IZlPnjPwgiQkXNhb+cT8wQKFlJNqcZkWlcTqkcqx6/kU4ynGmLFoa4LViBSirn05YAwk+sQBbPfxtYzQ== dependencies: "@babel/helper-plugin-utils" "^7.27.1" "@babel/helper-skip-transparent-expression-wrappers" "^7.27.1" -"@babel/plugin-transform-parameters@^7.12.1", "@babel/plugin-transform-parameters@^7.18.8", "@babel/plugin-transform-parameters@^7.20.7", "@babel/plugin-transform-parameters@^7.27.7": +"@babel/plugin-transform-parameters@^7.12.1", "@babel/plugin-transform-parameters@^7.20.7", "@babel/plugin-transform-parameters@^7.27.7": version "7.27.7" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.27.7.tgz#1fd2febb7c74e7d21cf3b05f7aebc907940af53a" integrity sha512-qBkYTYCb76RRxUM6CcZA5KRu8K4SM8ajzVeUgVdMVO9NN9uI/GaVmBg/WKJJGnNokV9SY8FxNOVWGXzqzUidBg== @@ -1090,7 +881,7 @@ "@babel/helper-create-class-features-plugin" "^7.27.1" "@babel/helper-plugin-utils" "^7.27.1" -"@babel/plugin-transform-property-literals@^7.18.6", "@babel/plugin-transform-property-literals@^7.27.1": +"@babel/plugin-transform-property-literals@^7.27.1": version "7.27.1" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.27.1.tgz#07eafd618800591e88073a0af1b940d9a42c6424" integrity sha512-oThy3BCuCha8kDZ8ZkgOg2exvPYUlprMukKQXI1r1pJ47NCvxfkEy8vK+r/hT9nF0Aa4H1WUPZZjHTFtAhGfmQ== @@ -1104,7 +895,7 @@ dependencies: "@babel/helper-plugin-utils" "^7.27.1" -"@babel/plugin-transform-react-display-name@^7.27.1": +"@babel/plugin-transform-react-display-name@^7.28.0": version "7.28.0" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.28.0.tgz#6f20a7295fea7df42eb42fed8f896813f5b934de" integrity sha512-D6Eujc2zMxKjfa4Zxl4GHMsmhKKZ9VpcqIchJLvwTxad9zWIYulwYItBovpDOoNLISpcZSXoDJ5gaGbQUDqViA== @@ -1137,7 +928,7 @@ "@babel/helper-annotate-as-pure" "^7.27.1" "@babel/helper-plugin-utils" "^7.27.1" -"@babel/plugin-transform-regenerator@^7.18.6", "@babel/plugin-transform-regenerator@^7.28.3": +"@babel/plugin-transform-regenerator@^7.28.4": version "7.28.4" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.28.4.tgz#9d3fa3bebb48ddd0091ce5729139cd99c67cea51" integrity sha512-+ZEdQlBoRg9m2NnzvEeLgtvBMO4tkFBw5SQIUgLICgTrumLoU7lr+Oghi6km2PFj+dbUt2u1oby2w3BDO9YQnA== @@ -1152,33 +943,21 @@ "@babel/helper-create-regexp-features-plugin" "^7.27.1" "@babel/helper-plugin-utils" "^7.27.1" -"@babel/plugin-transform-reserved-words@^7.18.6", "@babel/plugin-transform-reserved-words@^7.27.1": +"@babel/plugin-transform-reserved-words@^7.27.1": version "7.27.1" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.27.1.tgz#40fba4878ccbd1c56605a4479a3a891ac0274bb4" integrity sha512-V2ABPHIJX4kC7HegLkYoDpfg9PVmuWy/i6vUM5eGK22bx4YVFD3M5F0QQnWQoDs6AGsUWTVOopBiMFQgHaSkVw== dependencies: "@babel/helper-plugin-utils" "^7.27.1" -"@babel/plugin-transform-runtime@7.18.10": - version "7.18.10" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.18.10.tgz#37d14d1fa810a368fd635d4d1476c0154144a96f" - integrity sha512-q5mMeYAdfEbpBAgzl7tBre/la3LeCxmDO1+wMXRdPWbcoMjR3GiXlCLk7JBZVVye0bqTGNMbt0yYVXX1B1jEWQ== - dependencies: - "@babel/helper-module-imports" "^7.18.6" - "@babel/helper-plugin-utils" "^7.18.9" - babel-plugin-polyfill-corejs2 "^0.3.2" - babel-plugin-polyfill-corejs3 "^0.5.3" - babel-plugin-polyfill-regenerator "^0.4.0" - semver "^6.3.0" - -"@babel/plugin-transform-shorthand-properties@^7.12.1", "@babel/plugin-transform-shorthand-properties@^7.18.6", "@babel/plugin-transform-shorthand-properties@^7.27.1": +"@babel/plugin-transform-shorthand-properties@^7.12.1", "@babel/plugin-transform-shorthand-properties@^7.27.1": version "7.27.1" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.27.1.tgz#532abdacdec87bfee1e0ef8e2fcdee543fe32b90" integrity sha512-N/wH1vcn4oYawbJ13Y/FxcQrWk63jhfNa7jef0ih7PHSIHX2LB7GWE1rkPrOnka9kwMxb6hMl19p7lidA+EHmQ== dependencies: "@babel/helper-plugin-utils" "^7.27.1" -"@babel/plugin-transform-spread@^7.12.1", "@babel/plugin-transform-spread@^7.18.9", "@babel/plugin-transform-spread@^7.27.1": +"@babel/plugin-transform-spread@^7.12.1", "@babel/plugin-transform-spread@^7.27.1": version "7.27.1" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.27.1.tgz#1a264d5fc12750918f50e3fe3e24e437178abb08" integrity sha512-kpb3HUqaILBJcRFVhFUs6Trdd4mkrzcGXss+6/mxUd273PfbWqSDHRzMT2234gIg2QYfAjvXLSquP1xECSg09Q== @@ -1186,39 +965,39 @@ "@babel/helper-plugin-utils" "^7.27.1" "@babel/helper-skip-transparent-expression-wrappers" "^7.27.1" -"@babel/plugin-transform-sticky-regex@^7.18.6", "@babel/plugin-transform-sticky-regex@^7.27.1": +"@babel/plugin-transform-sticky-regex@^7.27.1": version "7.27.1" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.27.1.tgz#18984935d9d2296843a491d78a014939f7dcd280" integrity sha512-lhInBO5bi/Kowe2/aLdBAawijx+q1pQzicSgnkB6dUPc1+RC8QmJHKf2OjvU+NZWitguJHEaEmbV6VWEouT58g== dependencies: "@babel/helper-plugin-utils" "^7.27.1" -"@babel/plugin-transform-template-literals@^7.12.1", "@babel/plugin-transform-template-literals@^7.18.9", "@babel/plugin-transform-template-literals@^7.27.1": +"@babel/plugin-transform-template-literals@^7.12.1", "@babel/plugin-transform-template-literals@^7.27.1": version "7.27.1" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.27.1.tgz#1a0eb35d8bb3e6efc06c9fd40eb0bcef548328b8" integrity sha512-fBJKiV7F2DxZUkg5EtHKXQdbsbURW3DZKQUWphDum0uRP6eHGGa/He9mc0mypL680pb+e/lDIthRohlv8NCHkg== dependencies: "@babel/helper-plugin-utils" "^7.27.1" -"@babel/plugin-transform-typeof-symbol@^7.18.9", "@babel/plugin-transform-typeof-symbol@^7.27.1": +"@babel/plugin-transform-typeof-symbol@^7.27.1": version "7.27.1" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.27.1.tgz#70e966bb492e03509cf37eafa6dcc3051f844369" integrity sha512-RiSILC+nRJM7FY5srIyc4/fGIwUhyDuuBSdWn4y6yT6gm652DpCHZjIipgn6B7MQ1ITOUnAKWixEUjQRIBIcLw== dependencies: "@babel/helper-plugin-utils" "^7.27.1" -"@babel/plugin-transform-typescript@^7.27.1": - version "7.28.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.28.0.tgz#796cbd249ab56c18168b49e3e1d341b72af04a6b" - integrity sha512-4AEiDEBPIZvLQaWlc9liCavE0xRM0dNca41WtBeM3jgFptfUOSG9z0uteLhq6+3rq+WB6jIvUwKDTpXEHPJ2Vg== +"@babel/plugin-transform-typescript@^7.28.5": + version "7.28.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.28.5.tgz#441c5f9a4a1315039516c6c612fc66d5f4594e72" + integrity sha512-x2Qa+v/CuEoX7Dr31iAfr0IhInrVOWZU/2vJMJ00FOR/2nM0BcBEclpaf9sWCDc+v5e9dMrhSH8/atq/kX7+bA== dependencies: "@babel/helper-annotate-as-pure" "^7.27.3" - "@babel/helper-create-class-features-plugin" "^7.27.1" + "@babel/helper-create-class-features-plugin" "^7.28.5" "@babel/helper-plugin-utils" "^7.27.1" "@babel/helper-skip-transparent-expression-wrappers" "^7.27.1" "@babel/plugin-syntax-typescript" "^7.27.1" -"@babel/plugin-transform-unicode-escapes@^7.18.10", "@babel/plugin-transform-unicode-escapes@^7.27.1": +"@babel/plugin-transform-unicode-escapes@^7.27.1": version "7.27.1" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.27.1.tgz#3e3143f8438aef842de28816ece58780190cf806" integrity sha512-Ysg4v6AmF26k9vpfFuTZg8HRfVWzsh1kVfowA23y9j/Gu6dOuahdUVhkLqpObp3JIv27MLSii6noRnuKN8H0Mg== @@ -1233,7 +1012,7 @@ "@babel/helper-create-regexp-features-plugin" "^7.27.1" "@babel/helper-plugin-utils" "^7.27.1" -"@babel/plugin-transform-unicode-regex@^7.18.6", "@babel/plugin-transform-unicode-regex@^7.27.1": +"@babel/plugin-transform-unicode-regex@^7.27.1": version "7.27.1" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.27.1.tgz#25948f5c395db15f609028e370667ed8bae9af97" integrity sha512-xvINq24TRojDuyt6JGtHmkVkrfVV3FPT16uytxImLeBZqW3/H52yN+kM1MGuyPkIQxrzKwPHs5U/MP3qKyzkGw== @@ -1249,97 +1028,16 @@ "@babel/helper-create-regexp-features-plugin" "^7.27.1" "@babel/helper-plugin-utils" "^7.27.1" -"@babel/preset-env@7.18.10": - version "7.18.10" - resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.18.10.tgz#83b8dfe70d7eea1aae5a10635ab0a5fe60dfc0f4" - integrity sha512-wVxs1yjFdW3Z/XkNfXKoblxoHgbtUF7/l3PvvP4m02Qz9TZ6uZGxRVYjSQeR87oQmHco9zWitW5J82DJ7sCjvA== - dependencies: - "@babel/compat-data" "^7.18.8" - "@babel/helper-compilation-targets" "^7.18.9" - "@babel/helper-plugin-utils" "^7.18.9" - "@babel/helper-validator-option" "^7.18.6" - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression" "^7.18.6" - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining" "^7.18.9" - "@babel/plugin-proposal-async-generator-functions" "^7.18.10" - "@babel/plugin-proposal-class-properties" "^7.18.6" - "@babel/plugin-proposal-class-static-block" "^7.18.6" - "@babel/plugin-proposal-dynamic-import" "^7.18.6" - "@babel/plugin-proposal-export-namespace-from" "^7.18.9" - "@babel/plugin-proposal-json-strings" "^7.18.6" - "@babel/plugin-proposal-logical-assignment-operators" "^7.18.9" - "@babel/plugin-proposal-nullish-coalescing-operator" "^7.18.6" - "@babel/plugin-proposal-numeric-separator" "^7.18.6" - "@babel/plugin-proposal-object-rest-spread" "^7.18.9" - "@babel/plugin-proposal-optional-catch-binding" "^7.18.6" - "@babel/plugin-proposal-optional-chaining" "^7.18.9" - "@babel/plugin-proposal-private-methods" "^7.18.6" - "@babel/plugin-proposal-private-property-in-object" "^7.18.6" - "@babel/plugin-proposal-unicode-property-regex" "^7.18.6" - "@babel/plugin-syntax-async-generators" "^7.8.4" - "@babel/plugin-syntax-class-properties" "^7.12.13" - "@babel/plugin-syntax-class-static-block" "^7.14.5" - "@babel/plugin-syntax-dynamic-import" "^7.8.3" - "@babel/plugin-syntax-export-namespace-from" "^7.8.3" - "@babel/plugin-syntax-import-assertions" "^7.18.6" - "@babel/plugin-syntax-json-strings" "^7.8.3" - "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" - "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" - "@babel/plugin-syntax-numeric-separator" "^7.10.4" - "@babel/plugin-syntax-object-rest-spread" "^7.8.3" - "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" - "@babel/plugin-syntax-optional-chaining" "^7.8.3" - "@babel/plugin-syntax-private-property-in-object" "^7.14.5" - "@babel/plugin-syntax-top-level-await" "^7.14.5" - "@babel/plugin-transform-arrow-functions" "^7.18.6" - "@babel/plugin-transform-async-to-generator" "^7.18.6" - "@babel/plugin-transform-block-scoped-functions" "^7.18.6" - "@babel/plugin-transform-block-scoping" "^7.18.9" - "@babel/plugin-transform-classes" "^7.18.9" - "@babel/plugin-transform-computed-properties" "^7.18.9" - "@babel/plugin-transform-destructuring" "^7.18.9" - "@babel/plugin-transform-dotall-regex" "^7.18.6" - "@babel/plugin-transform-duplicate-keys" "^7.18.9" - "@babel/plugin-transform-exponentiation-operator" "^7.18.6" - "@babel/plugin-transform-for-of" "^7.18.8" - "@babel/plugin-transform-function-name" "^7.18.9" - "@babel/plugin-transform-literals" "^7.18.9" - "@babel/plugin-transform-member-expression-literals" "^7.18.6" - "@babel/plugin-transform-modules-amd" "^7.18.6" - "@babel/plugin-transform-modules-commonjs" "^7.18.6" - "@babel/plugin-transform-modules-systemjs" "^7.18.9" - "@babel/plugin-transform-modules-umd" "^7.18.6" - "@babel/plugin-transform-named-capturing-groups-regex" "^7.18.6" - "@babel/plugin-transform-new-target" "^7.18.6" - "@babel/plugin-transform-object-super" "^7.18.6" - "@babel/plugin-transform-parameters" "^7.18.8" - "@babel/plugin-transform-property-literals" "^7.18.6" - "@babel/plugin-transform-regenerator" "^7.18.6" - "@babel/plugin-transform-reserved-words" "^7.18.6" - "@babel/plugin-transform-shorthand-properties" "^7.18.6" - "@babel/plugin-transform-spread" "^7.18.9" - "@babel/plugin-transform-sticky-regex" "^7.18.6" - "@babel/plugin-transform-template-literals" "^7.18.9" - "@babel/plugin-transform-typeof-symbol" "^7.18.9" - "@babel/plugin-transform-unicode-escapes" "^7.18.10" - "@babel/plugin-transform-unicode-regex" "^7.18.6" - "@babel/preset-modules" "^0.1.5" - "@babel/types" "^7.18.10" - babel-plugin-polyfill-corejs2 "^0.3.2" - babel-plugin-polyfill-corejs3 "^0.5.3" - babel-plugin-polyfill-regenerator "^0.4.0" - core-js-compat "^3.22.1" - semver "^6.3.0" - "@babel/preset-env@^7.12.11", "@babel/preset-env@^7.15.0", "@babel/preset-env@^7.19.4", "@babel/preset-env@^7.22.10": - version "7.28.3" - resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.28.3.tgz#2b18d9aff9e69643789057ae4b942b1654f88187" - integrity sha512-ROiDcM+GbYVPYBOeCR6uBXKkQpBExLl8k9HO1ygXEyds39j+vCCsjmj7S8GOniZQlEs81QlkdJZe76IpLSiqpg== + version "7.28.5" + resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.28.5.tgz#82dd159d1563f219a1ce94324b3071eb89e280b0" + integrity sha512-S36mOoi1Sb6Fz98fBfE+UZSpYw5mJm0NUHtIKrOuNcqeFauy1J6dIvXm2KRVKobOSaGq4t/hBXdN4HGU3wL9Wg== dependencies: - "@babel/compat-data" "^7.28.0" + "@babel/compat-data" "^7.28.5" "@babel/helper-compilation-targets" "^7.27.2" "@babel/helper-plugin-utils" "^7.27.1" "@babel/helper-validator-option" "^7.27.1" - "@babel/plugin-bugfix-firefox-class-in-computed-class-key" "^7.27.1" + "@babel/plugin-bugfix-firefox-class-in-computed-class-key" "^7.28.5" "@babel/plugin-bugfix-safari-class-field-initializer-scope" "^7.27.1" "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression" "^7.27.1" "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining" "^7.27.1" @@ -1352,42 +1050,42 @@ "@babel/plugin-transform-async-generator-functions" "^7.28.0" "@babel/plugin-transform-async-to-generator" "^7.27.1" "@babel/plugin-transform-block-scoped-functions" "^7.27.1" - "@babel/plugin-transform-block-scoping" "^7.28.0" + "@babel/plugin-transform-block-scoping" "^7.28.5" "@babel/plugin-transform-class-properties" "^7.27.1" "@babel/plugin-transform-class-static-block" "^7.28.3" - "@babel/plugin-transform-classes" "^7.28.3" + "@babel/plugin-transform-classes" "^7.28.4" "@babel/plugin-transform-computed-properties" "^7.27.1" - "@babel/plugin-transform-destructuring" "^7.28.0" + "@babel/plugin-transform-destructuring" "^7.28.5" "@babel/plugin-transform-dotall-regex" "^7.27.1" "@babel/plugin-transform-duplicate-keys" "^7.27.1" "@babel/plugin-transform-duplicate-named-capturing-groups-regex" "^7.27.1" "@babel/plugin-transform-dynamic-import" "^7.27.1" "@babel/plugin-transform-explicit-resource-management" "^7.28.0" - "@babel/plugin-transform-exponentiation-operator" "^7.27.1" + "@babel/plugin-transform-exponentiation-operator" "^7.28.5" "@babel/plugin-transform-export-namespace-from" "^7.27.1" "@babel/plugin-transform-for-of" "^7.27.1" "@babel/plugin-transform-function-name" "^7.27.1" "@babel/plugin-transform-json-strings" "^7.27.1" "@babel/plugin-transform-literals" "^7.27.1" - "@babel/plugin-transform-logical-assignment-operators" "^7.27.1" + "@babel/plugin-transform-logical-assignment-operators" "^7.28.5" "@babel/plugin-transform-member-expression-literals" "^7.27.1" "@babel/plugin-transform-modules-amd" "^7.27.1" "@babel/plugin-transform-modules-commonjs" "^7.27.1" - "@babel/plugin-transform-modules-systemjs" "^7.27.1" + "@babel/plugin-transform-modules-systemjs" "^7.28.5" "@babel/plugin-transform-modules-umd" "^7.27.1" "@babel/plugin-transform-named-capturing-groups-regex" "^7.27.1" "@babel/plugin-transform-new-target" "^7.27.1" "@babel/plugin-transform-nullish-coalescing-operator" "^7.27.1" "@babel/plugin-transform-numeric-separator" "^7.27.1" - "@babel/plugin-transform-object-rest-spread" "^7.28.0" + "@babel/plugin-transform-object-rest-spread" "^7.28.4" "@babel/plugin-transform-object-super" "^7.27.1" "@babel/plugin-transform-optional-catch-binding" "^7.27.1" - "@babel/plugin-transform-optional-chaining" "^7.27.1" + "@babel/plugin-transform-optional-chaining" "^7.28.5" "@babel/plugin-transform-parameters" "^7.27.7" "@babel/plugin-transform-private-methods" "^7.27.1" "@babel/plugin-transform-private-property-in-object" "^7.27.1" "@babel/plugin-transform-property-literals" "^7.27.1" - "@babel/plugin-transform-regenerator" "^7.28.3" + "@babel/plugin-transform-regenerator" "^7.28.4" "@babel/plugin-transform-regexp-modifiers" "^7.27.1" "@babel/plugin-transform-reserved-words" "^7.27.1" "@babel/plugin-transform-shorthand-properties" "^7.27.1" @@ -1424,39 +1122,28 @@ "@babel/types" "^7.4.4" esutils "^2.0.2" -"@babel/preset-modules@^0.1.5": - version "0.1.6" - resolved "https://registry.yarnpkg.com/@babel/preset-modules/-/preset-modules-0.1.6.tgz#31bcdd8f19538437339d17af00d177d854d9d458" - integrity sha512-ID2yj6K/4lKfhuU3+EX4UvNbIt7eACFbHmNUjzA+ep+B5971CknnA/9DEWKbRokfbbtblxxxXFJJrH47UEAMVg== - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/plugin-proposal-unicode-property-regex" "^7.4.4" - "@babel/plugin-transform-dotall-regex" "^7.4.4" - "@babel/types" "^7.4.4" - esutils "^2.0.2" - "@babel/preset-react@^7.12.10", "@babel/preset-react@^7.14.5", "@babel/preset-react@^7.18.6": - version "7.27.1" - resolved "https://registry.yarnpkg.com/@babel/preset-react/-/preset-react-7.27.1.tgz#86ea0a5ca3984663f744be2fd26cb6747c3fd0ec" - integrity sha512-oJHWh2gLhU9dW9HHr42q0cI0/iHHXTLGe39qvpAZZzagHy0MzYLCnCVV0symeRvzmjHyVU7mw2K06E6u/JwbhA== + version "7.28.5" + resolved "https://registry.yarnpkg.com/@babel/preset-react/-/preset-react-7.28.5.tgz#6fcc0400fa79698433d653092c3919bb4b0878d9" + integrity sha512-Z3J8vhRq7CeLjdC58jLv4lnZ5RKFUJWqH5emvxmv9Hv3BD1T9R/Im713R4MTKwvFaV74ejZ3sM01LyEKk4ugNQ== dependencies: "@babel/helper-plugin-utils" "^7.27.1" "@babel/helper-validator-option" "^7.27.1" - "@babel/plugin-transform-react-display-name" "^7.27.1" + "@babel/plugin-transform-react-display-name" "^7.28.0" "@babel/plugin-transform-react-jsx" "^7.27.1" "@babel/plugin-transform-react-jsx-development" "^7.27.1" "@babel/plugin-transform-react-pure-annotations" "^7.27.1" "@babel/preset-typescript@^7.12.7", "@babel/preset-typescript@^7.15.0", "@babel/preset-typescript@^7.18.6", "@babel/preset-typescript@^7.22.5": - version "7.27.1" - resolved "https://registry.yarnpkg.com/@babel/preset-typescript/-/preset-typescript-7.27.1.tgz#190742a6428d282306648a55b0529b561484f912" - integrity sha512-l7WfQfX0WK4M0v2RudjuQK4u99BS6yLHYEmdtVPP7lKV013zr9DygFuWNlnbvQ9LR+LS0Egz/XAvGx5U9MX0fQ== + version "7.28.5" + resolved "https://registry.yarnpkg.com/@babel/preset-typescript/-/preset-typescript-7.28.5.tgz#540359efa3028236958466342967522fd8f2a60c" + integrity sha512-+bQy5WOI2V6LJZpPVxY+yp66XdZ2yifu0Mc1aP5CQKgjn4QM5IN2i5fAZ4xKop47pr8rpVhiAeu+nDQa12C8+g== dependencies: "@babel/helper-plugin-utils" "^7.27.1" "@babel/helper-validator-option" "^7.27.1" "@babel/plugin-syntax-jsx" "^7.27.1" "@babel/plugin-transform-modules-commonjs" "^7.27.1" - "@babel/plugin-transform-typescript" "^7.27.1" + "@babel/plugin-transform-typescript" "^7.28.5" "@babel/register@^7.12.1": version "7.28.3" @@ -1476,7 +1163,7 @@ dependencies: regenerator-runtime "^0.13.2" -"@babel/runtime@^7.0.0", "@babel/runtime@^7.11.2", "@babel/runtime@^7.12.5", "@babel/runtime@^7.15.4", "@babel/runtime@^7.17.8", "@babel/runtime@^7.18.3", "@babel/runtime@^7.18.9", "@babel/runtime@^7.21.0", "@babel/runtime@^7.23.2", "@babel/runtime@^7.23.9", "@babel/runtime@^7.25.7", "@babel/runtime@^7.26.0", "@babel/runtime@^7.26.10", "@babel/runtime@^7.27.6", "@babel/runtime@^7.28.4", "@babel/runtime@^7.3.1", "@babel/runtime@^7.4.4", "@babel/runtime@^7.5.0", "@babel/runtime@^7.5.5", "@babel/runtime@^7.7.6", "@babel/runtime@^7.8.3", "@babel/runtime@^7.8.7", "@babel/runtime@^7.9.2": +"@babel/runtime@^7.0.0", "@babel/runtime@^7.11.2", "@babel/runtime@^7.12.5", "@babel/runtime@^7.15.4", "@babel/runtime@^7.17.8", "@babel/runtime@^7.18.3", "@babel/runtime@^7.21.0", "@babel/runtime@^7.23.2", "@babel/runtime@^7.23.9", "@babel/runtime@^7.25.7", "@babel/runtime@^7.26.0", "@babel/runtime@^7.26.10", "@babel/runtime@^7.27.6", "@babel/runtime@^7.28.4", "@babel/runtime@^7.3.1", "@babel/runtime@^7.5.0", "@babel/runtime@^7.5.5", "@babel/runtime@^7.7.6", "@babel/runtime@^7.8.3", "@babel/runtime@^7.8.7", "@babel/runtime@^7.9.2": version "7.28.4" resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.28.4.tgz#a70226016fabe25c5783b2f22d3e1c9bc5ca3326" integrity sha512-Q/N6JNWvIvPnLDvjlE1OUBLPQHH6l3CltCEsHIujp45zQUSSh8K+gHnaEX45yAT1nyngnINhvWtzN+Nb9D8RAQ== @@ -1488,7 +1175,7 @@ dependencies: regenerator-runtime "^0.13.2" -"@babel/template@^7.12.7", "@babel/template@^7.18.10", "@babel/template@^7.24.7", "@babel/template@^7.27.1", "@babel/template@^7.27.2", "@babel/template@^7.3.3": +"@babel/template@^7.12.7", "@babel/template@^7.27.1", "@babel/template@^7.27.2", "@babel/template@^7.3.3": version "7.27.2" resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.27.2.tgz#fa78ceed3c4e7b63ebf6cb39e5852fca45f6809d" integrity sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw== @@ -1497,51 +1184,26 @@ "@babel/parser" "^7.27.2" "@babel/types" "^7.27.1" -"@babel/traverse@7.18.11": - version "7.18.11" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.18.11.tgz#3d51f2afbd83ecf9912bcbb5c4d94e3d2ddaa16f" - integrity sha512-TG9PiM2R/cWCAy6BPJKeHzNbu4lPzOSZpeMfeNErskGpTJx6trEvFaVCbDvpcxwy49BKWmEPwiW8mrysNiDvIQ== - dependencies: - "@babel/code-frame" "^7.18.6" - "@babel/generator" "^7.18.10" - "@babel/helper-environment-visitor" "^7.18.9" - "@babel/helper-function-name" "^7.18.9" - "@babel/helper-hoist-variables" "^7.18.6" - "@babel/helper-split-export-declaration" "^7.18.6" - "@babel/parser" "^7.18.11" - "@babel/types" "^7.18.10" - debug "^4.1.0" - globals "^11.1.0" - -"@babel/traverse@^7.1.6", "@babel/traverse@^7.12.11", "@babel/traverse@^7.12.9", "@babel/traverse@^7.13.0", "@babel/traverse@^7.18.10", "@babel/traverse@^7.27.1", "@babel/traverse@^7.28.0", "@babel/traverse@^7.28.3", "@babel/traverse@^7.28.4", "@babel/traverse@^7.7.2": - version "7.28.4" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.28.4.tgz#8d456101b96ab175d487249f60680221692b958b" - integrity sha512-YEzuboP2qvQavAcjgQNVgsvHIDv6ZpwXvcvjmyySP2DIMuByS/6ioU5G9pYrWHM6T2YDfc7xga9iNzYOs12CFQ== +"@babel/traverse@^7.1.6", "@babel/traverse@^7.12.11", "@babel/traverse@^7.12.9", "@babel/traverse@^7.13.0", "@babel/traverse@^7.27.1", "@babel/traverse@^7.28.0", "@babel/traverse@^7.28.3", "@babel/traverse@^7.28.4", "@babel/traverse@^7.28.5", "@babel/traverse@^7.7.2": + version "7.28.5" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.28.5.tgz#450cab9135d21a7a2ca9d2d35aa05c20e68c360b" + integrity sha512-TCCj4t55U90khlYkVV/0TfkJkAkUg3jZFA3Neb7unZT8CPok7iiRfaX0F+WnqWqt7OxhOn0uBKXCw4lbL8W0aQ== dependencies: "@babel/code-frame" "^7.27.1" - "@babel/generator" "^7.28.3" + "@babel/generator" "^7.28.5" "@babel/helper-globals" "^7.28.0" - "@babel/parser" "^7.28.4" + "@babel/parser" "^7.28.5" "@babel/template" "^7.27.2" - "@babel/types" "^7.28.4" + "@babel/types" "^7.28.5" debug "^4.3.1" -"@babel/types@7.18.10": - version "7.18.10" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.18.10.tgz#4908e81b6b339ca7c6b7a555a5fc29446f26dde6" - integrity sha512-MJvnbEiiNkpjo+LknnmRrqbY1GPUUggjv+wQVjetM/AONoupqRALB7I6jGqNUAZsKcRIEu2J6FRFvsczljjsaQ== - dependencies: - "@babel/helper-string-parser" "^7.18.10" - "@babel/helper-validator-identifier" "^7.18.6" - to-fast-properties "^2.0.0" - -"@babel/types@^7.0.0", "@babel/types@^7.12.11", "@babel/types@^7.12.7", "@babel/types@^7.18.10", "@babel/types@^7.2.0", "@babel/types@^7.20.0", "@babel/types@^7.20.7", "@babel/types@^7.24.7", "@babel/types@^7.27.1", "@babel/types@^7.27.3", "@babel/types@^7.28.2", "@babel/types@^7.28.4", "@babel/types@^7.3.3", "@babel/types@^7.4.4": - version "7.28.4" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.28.4.tgz#0a4e618f4c60a7cd6c11cb2d48060e4dbe38ac3a" - integrity sha512-bkFqkLhh3pMBUQQkpVgWDWq/lqzc2678eUyDlTBhRqhCHFguYYGM0Efga7tYk4TogG/3x0EEl66/OQ+WGbWB/Q== +"@babel/types@^7.0.0", "@babel/types@^7.12.11", "@babel/types@^7.12.7", "@babel/types@^7.2.0", "@babel/types@^7.20.0", "@babel/types@^7.20.7", "@babel/types@^7.27.1", "@babel/types@^7.27.3", "@babel/types@^7.28.2", "@babel/types@^7.28.4", "@babel/types@^7.28.5", "@babel/types@^7.3.3", "@babel/types@^7.4.4": + version "7.28.5" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.28.5.tgz#10fc405f60897c35f07e85493c932c7b5ca0592b" + integrity sha512-qQ5m48eI/MFLQ5PxQj4PFaprjyCTLI37ElWMmNs0K8Lk3dVeOdNpB3ks8jc7yM5CDmVC73eMVk/trk3fgmrUpA== dependencies: "@babel/helper-string-parser" "^7.27.1" - "@babel/helper-validator-identifier" "^7.27.1" + "@babel/helper-validator-identifier" "^7.28.5" "@base2/pretty-print-object@1.0.1": version "1.0.1" @@ -1608,21 +1270,21 @@ integrity sha512-8Y5wMhVIPaWe6jw2H+KlEm4wP/f7EW3810ZLmDlrEEy5KvBsb9ECEfu/kMWD484ijfQ8+nIi0giMgu9g1UAuuA== "@chain-registry/client@^1.49.11": - version "1.53.221" - resolved "https://registry.yarnpkg.com/@chain-registry/client/-/client-1.53.221.tgz#9cb00a3af66efd8d7e77c38b22ed816d9d151f13" - integrity sha512-wWL5UL0Pvj0V7uy0MUY0SQpmMUWC0Vwj+/WIXM0h3aJPN7OZyh6s/iAETWiu7SN6IJT9ualrY3YV+LsXL1Zi7w== + version "1.53.238" + resolved "https://registry.yarnpkg.com/@chain-registry/client/-/client-1.53.238.tgz#9083121817b3c2e1ed18866b381b932f9a4fe2cc" + integrity sha512-BN8sD4xlmkt4i6HU+/u5EFc8yhnfufX024euKhlp5prEmfL3ZtD91cJCH03tQ8q/4LPPSsdrHTJbdAfUlm94tQ== dependencies: - "@chain-registry/types" "^0.50.221" - "@chain-registry/utils" "^1.51.221" + "@chain-registry/types" "^0.50.238" + "@chain-registry/utils" "^1.51.238" bfs-path "^1.0.2" cross-fetch "^3.1.5" "@chain-registry/keplr@^1.69.13": - version "1.74.356" - resolved "https://registry.yarnpkg.com/@chain-registry/keplr/-/keplr-1.74.356.tgz#7b85e71fc5f916b9c16bb19e0823ffa21c6e0813" - integrity sha512-qxtW1bH/NfV+O8IIV8Dr87Z1ymLwZ1G5oxM/t4ZRCpC+SeppWPW/hhMwKTmlzJaqxvskHzLiXcbO42Cz514bXQ== + version "1.74.378" + resolved "https://registry.yarnpkg.com/@chain-registry/keplr/-/keplr-1.74.378.tgz#ad8af0d715a84831adb7a693f60e55f3ddc54662" + integrity sha512-XNSVFki72PNOCszB4VDttqVcemW//1kYrHFDJtOKWAmERwbLpig3AiwjMkC0obsZPFrZGtxo+Ff0zkBMGTJHfg== dependencies: - "@chain-registry/types" "^0.50.221" + "@chain-registry/types" "^0.50.238" "@keplr-wallet/cosmos" "0.12.28" "@keplr-wallet/crypto" "0.12.28" semver "^7.5.0" @@ -1632,17 +1294,17 @@ resolved "https://registry.yarnpkg.com/@chain-registry/types/-/types-0.46.15.tgz#f4c0219fb7060d97cb224b55f349adb1d436aac9" integrity sha512-gzf+pkAbEZ7fKuTuwmrEAEcx1K/BNrKuCnB9s+WwSo9Ad/3s+GV5LOXcOOxjjHh9Mrs9kvnxKvzKjOwWu8gDJw== -"@chain-registry/types@^0.50.221", "@chain-registry/types@^0.50.36": - version "0.50.221" - resolved "https://registry.yarnpkg.com/@chain-registry/types/-/types-0.50.221.tgz#bb453fad29336e55fd9a9e6035c6b2a56dd0ae18" - integrity sha512-kpuhMcGz0K9UZ7Ne77PL/v8rCeji4nm0DcfbPSIXgLZhNV5TL+TURbUl8L9BUvD8PfyCWTRXbte7Kj+IBT1cbQ== +"@chain-registry/types@^0.50.238", "@chain-registry/types@^0.50.36": + version "0.50.238" + resolved "https://registry.yarnpkg.com/@chain-registry/types/-/types-0.50.238.tgz#0d9f5e5e65e1f8ab6ef8a6aea34b3c9a11a961f2" + integrity sha512-NJL9n5ND3SAro08jR/NjEBs8trVQ9YqBGIpeZZQJV5ACPU11PzzO1n+TWGcv2302VnI8L1BBaEaEaQq4AJKkng== -"@chain-registry/utils@^1.51.221": - version "1.51.221" - resolved "https://registry.yarnpkg.com/@chain-registry/utils/-/utils-1.51.221.tgz#7a2cd42b87c25138616d8131433242363b1e4f66" - integrity sha512-zqaveIswfyI+/X391ZoAG4hDNlCZHfRuvuCy8ujptytP6s/upPOABYtelJ8RTVHKjHeolNelYr0DH6c7Ho6emw== +"@chain-registry/utils@^1.51.238": + version "1.51.238" + resolved "https://registry.yarnpkg.com/@chain-registry/utils/-/utils-1.51.238.tgz#f6a808f55839f5163f035c28025e6d00771e5e0f" + integrity sha512-+80RunNYd9xnkiMEdTE2iNi0NMnDzmubyQtVXVv0z2EcK83+0CCsSaMB7/WlDrx/n1P9bvu62hKmZIV2bG6KlA== dependencies: - "@chain-registry/types" "^0.50.221" + "@chain-registry/types" "^0.50.238" bignumber.js "9.1.2" sha.js "^2.4.11" @@ -1667,16 +1329,6 @@ "@noble/hashes" "^1.0.0" protobufjs "^6.8.8" -"@cosmjs/amino@^0.29.5": - version "0.29.5" - resolved "https://registry.yarnpkg.com/@cosmjs/amino/-/amino-0.29.5.tgz#053b4739a90b15b9e2b781ccd484faf64bd49aec" - integrity sha512-Qo8jpC0BiziTSUqpkNatBcwtKNhCovUnFul9SlT/74JUCdLYaeG5hxr3q1cssQt++l4LvlcpF+OUXL48XjNjLw== - dependencies: - "@cosmjs/crypto" "^0.29.5" - "@cosmjs/encoding" "^0.29.5" - "@cosmjs/math" "^0.29.5" - "@cosmjs/utils" "^0.29.5" - "@cosmjs/amino@^0.32.3", "@cosmjs/amino@^0.32.4": version "0.32.4" resolved "https://registry.yarnpkg.com/@cosmjs/amino/-/amino-0.32.4.tgz#3908946c0394e6d431694c8992c5147079a1c860" @@ -1687,24 +1339,7 @@ "@cosmjs/math" "^0.32.4" "@cosmjs/utils" "^0.32.4" -"@cosmjs/cosmwasm-stargate@^0.29.5": - version "0.29.5" - resolved "https://registry.yarnpkg.com/@cosmjs/cosmwasm-stargate/-/cosmwasm-stargate-0.29.5.tgz#3f257da682658833e0f4eb9e8ff758e4d927663a" - integrity sha512-TNdSvm2tEE3XMCuxHxquzls56t40hC8qnLeYJWHsY2ECZmRK3KrnpRReEr7N7bLtODToK7X/riYrV0JaYxjrYA== - dependencies: - "@cosmjs/amino" "^0.29.5" - "@cosmjs/crypto" "^0.29.5" - "@cosmjs/encoding" "^0.29.5" - "@cosmjs/math" "^0.29.5" - "@cosmjs/proto-signing" "^0.29.5" - "@cosmjs/stargate" "^0.29.5" - "@cosmjs/tendermint-rpc" "^0.29.5" - "@cosmjs/utils" "^0.29.5" - cosmjs-types "^0.5.2" - long "^4.0.0" - pako "^2.0.2" - -"@cosmjs/cosmwasm-stargate@^0.32.3": +"@cosmjs/cosmwasm-stargate@^0.32.3", "@cosmjs/cosmwasm-stargate@^0.32.4": version "0.32.4" resolved "https://registry.yarnpkg.com/@cosmjs/cosmwasm-stargate/-/cosmwasm-stargate-0.32.4.tgz#2ee93f2cc0b1c146ac369b2bf8ef9ee2e159fd50" integrity sha512-Fuo9BGEiB+POJ5WeRyBGuhyKR1ordvxZGLPuPosFJOH9U0gKMgcjwKMCgAlWFkMlHaTB+tNdA8AifWiHrI7VgA== @@ -1720,19 +1355,6 @@ cosmjs-types "^0.9.0" pako "^2.0.2" -"@cosmjs/crypto@^0.29.5": - version "0.29.5" - resolved "https://registry.yarnpkg.com/@cosmjs/crypto/-/crypto-0.29.5.tgz#ab99fc382b93d8a8db075780cf07487a0f9519fd" - integrity sha512-2bKkaLGictaNL0UipQCL6C1afaisv6k8Wr/GCLx9FqiyFkh9ZgRHDyetD64ZsjnWV/N/D44s/esI+k6oPREaiQ== - dependencies: - "@cosmjs/encoding" "^0.29.5" - "@cosmjs/math" "^0.29.5" - "@cosmjs/utils" "^0.29.5" - "@noble/hashes" "^1" - bn.js "^5.2.0" - elliptic "^6.5.4" - libsodium-wrappers "^0.7.6" - "@cosmjs/crypto@^0.32.4": version "0.32.4" resolved "https://registry.yarnpkg.com/@cosmjs/crypto/-/crypto-0.32.4.tgz#5d29633b661eaf092ddb3e7ea6299cfd6f4507a2" @@ -1746,15 +1368,6 @@ elliptic "^6.5.4" libsodium-wrappers-sumo "^0.7.11" -"@cosmjs/encoding@^0.29.5": - version "0.29.5" - resolved "https://registry.yarnpkg.com/@cosmjs/encoding/-/encoding-0.29.5.tgz#009a4b1c596cdfd326f30ccfa79f5e56daa264f2" - integrity sha512-G4rGl/Jg4dMCw5u6PEZHZcoHnUBlukZODHbm/wcL4Uu91fkn5jVo5cXXZcvs4VCkArVGrEj/52eUgTZCmOBGWQ== - dependencies: - base64-js "^1.3.0" - bech32 "^1.1.4" - readonly-date "^1.0.0" - "@cosmjs/encoding@^0.32.4": version "0.32.4" resolved "https://registry.yarnpkg.com/@cosmjs/encoding/-/encoding-0.32.4.tgz#646e0e809f7f4f1414d8fa991fb0ffe6c633aede" @@ -1764,14 +1377,6 @@ bech32 "^1.1.4" readonly-date "^1.0.0" -"@cosmjs/json-rpc@^0.29.5": - version "0.29.5" - resolved "https://registry.yarnpkg.com/@cosmjs/json-rpc/-/json-rpc-0.29.5.tgz#5e483a9bd98a6270f935adf0dfd8a1e7eb777fe4" - integrity sha512-C78+X06l+r9xwdM1yFWIpGl03LhB9NdM1xvZpQHwgCOl0Ir/WV8pw48y3Ez2awAoUBRfTeejPe4KvrE6NoIi/w== - dependencies: - "@cosmjs/stream" "^0.29.5" - xstream "^11.14.0" - "@cosmjs/json-rpc@^0.32.4": version "0.32.4" resolved "https://registry.yarnpkg.com/@cosmjs/json-rpc/-/json-rpc-0.32.4.tgz#be91eb89ea78bd5dc02d0a9fa184dd6790790f0b" @@ -1780,13 +1385,6 @@ "@cosmjs/stream" "^0.32.4" xstream "^11.14.0" -"@cosmjs/math@^0.29.5": - version "0.29.5" - resolved "https://registry.yarnpkg.com/@cosmjs/math/-/math-0.29.5.tgz#722c96e080d6c2b62215ce9f4c70da7625b241b6" - integrity sha512-2GjKcv+A9f86MAWYLUkjhw1/WpRl2R1BTb3m9qPG7lzMA7ioYff9jY5SPCfafKdxM4TIQGxXQlYGewQL16O68Q== - dependencies: - bn.js "^5.2.0" - "@cosmjs/math@^0.32.4": version "0.32.4" resolved "https://registry.yarnpkg.com/@cosmjs/math/-/math-0.32.4.tgz#87ac9eadc06696e30a30bdb562a495974bfd0a1a" @@ -1794,19 +1392,6 @@ dependencies: bn.js "^5.2.0" -"@cosmjs/proto-signing@^0.29.5": - version "0.29.5" - resolved "https://registry.yarnpkg.com/@cosmjs/proto-signing/-/proto-signing-0.29.5.tgz#af3b62a46c2c2f1d2327d678b13b7262db1fe87c" - integrity sha512-QRrS7CiKaoETdgIqvi/7JC2qCwCR7lnWaUsTzh/XfRy3McLkEd+cXbKAW3cygykv7IN0VAEIhZd2lyIfT8KwNA== - dependencies: - "@cosmjs/amino" "^0.29.5" - "@cosmjs/crypto" "^0.29.5" - "@cosmjs/encoding" "^0.29.5" - "@cosmjs/math" "^0.29.5" - "@cosmjs/utils" "^0.29.5" - cosmjs-types "^0.5.2" - long "^4.0.0" - "@cosmjs/proto-signing@^0.32.3", "@cosmjs/proto-signing@^0.32.4": version "0.32.4" resolved "https://registry.yarnpkg.com/@cosmjs/proto-signing/-/proto-signing-0.32.4.tgz#5a06e087c6d677439c8c9b25b5223d5e72c4cd93" @@ -1819,16 +1404,6 @@ "@cosmjs/utils" "^0.32.4" cosmjs-types "^0.9.0" -"@cosmjs/socket@^0.29.5": - version "0.29.5" - resolved "https://registry.yarnpkg.com/@cosmjs/socket/-/socket-0.29.5.tgz#a48df6b4c45dc6a6ef8e47232725dd4aa556ac2d" - integrity sha512-5VYDupIWbIXq3ftPV1LkS5Ya/T7Ol/AzWVhNxZ79hPe/mBfv1bGau/LqIYOm2zxGlgm9hBHOTmWGqNYDwr9LNQ== - dependencies: - "@cosmjs/stream" "^0.29.5" - isomorphic-ws "^4.0.1" - ws "^7" - xstream "^11.14.0" - "@cosmjs/socket@^0.32.4": version "0.32.4" resolved "https://registry.yarnpkg.com/@cosmjs/socket/-/socket-0.32.4.tgz#86ab6adf3a442314774c0810b7a7cfcddf4f2082" @@ -1839,24 +1414,6 @@ ws "^7" xstream "^11.14.0" -"@cosmjs/stargate@^0.29.5": - version "0.29.5" - resolved "https://registry.yarnpkg.com/@cosmjs/stargate/-/stargate-0.29.5.tgz#d597af1c85a3c2af7b5bdbec34d5d40692cc09e4" - integrity sha512-hjEv8UUlJruLrYGJcUZXM/CziaINOKwfVm2BoSdUnNTMxGvY/jC1ABHKeZUYt9oXHxEJ1n9+pDqzbKc8pT0nBw== - dependencies: - "@confio/ics23" "^0.6.8" - "@cosmjs/amino" "^0.29.5" - "@cosmjs/encoding" "^0.29.5" - "@cosmjs/math" "^0.29.5" - "@cosmjs/proto-signing" "^0.29.5" - "@cosmjs/stream" "^0.29.5" - "@cosmjs/tendermint-rpc" "^0.29.5" - "@cosmjs/utils" "^0.29.5" - cosmjs-types "^0.5.2" - long "^4.0.0" - protobufjs "~6.11.3" - xstream "^11.14.0" - "@cosmjs/stargate@^0.32.3", "@cosmjs/stargate@^0.32.4": version "0.32.4" resolved "https://registry.yarnpkg.com/@cosmjs/stargate/-/stargate-0.32.4.tgz#bd0e4d3bf613b629addbf5f875d3d3b50f640af1" @@ -1873,13 +1430,6 @@ cosmjs-types "^0.9.0" xstream "^11.14.0" -"@cosmjs/stream@^0.29.5": - version "0.29.5" - resolved "https://registry.yarnpkg.com/@cosmjs/stream/-/stream-0.29.5.tgz#350981cac496d04939b92ee793b9b19f44bc1d4e" - integrity sha512-TToTDWyH1p05GBtF0Y8jFw2C+4783ueDCmDyxOMM6EU82IqpmIbfwcdMOCAm0JhnyMh+ocdebbFvnX/sGKzRAA== - dependencies: - xstream "^11.14.0" - "@cosmjs/stream@^0.32.4": version "0.32.4" resolved "https://registry.yarnpkg.com/@cosmjs/stream/-/stream-0.32.4.tgz#83e1f2285807467c56d9ea0e1113f79d9fa63802" @@ -1887,22 +1437,6 @@ dependencies: xstream "^11.14.0" -"@cosmjs/tendermint-rpc@^0.29.5": - version "0.29.5" - resolved "https://registry.yarnpkg.com/@cosmjs/tendermint-rpc/-/tendermint-rpc-0.29.5.tgz#f205c10464212bdf843f91bb2e4a093b618cb5c2" - integrity sha512-ar80twieuAxsy0x2za/aO3kBr2DFPAXDmk2ikDbmkda+qqfXgl35l9CVAAjKRqd9d+cRvbQyb5M4wy6XQpEV6w== - dependencies: - "@cosmjs/crypto" "^0.29.5" - "@cosmjs/encoding" "^0.29.5" - "@cosmjs/json-rpc" "^0.29.5" - "@cosmjs/math" "^0.29.5" - "@cosmjs/socket" "^0.29.5" - "@cosmjs/stream" "^0.29.5" - "@cosmjs/utils" "^0.29.5" - axios "^0.21.2" - readonly-date "^1.0.0" - xstream "^11.14.0" - "@cosmjs/tendermint-rpc@^0.32.4": version "0.32.4" resolved "https://registry.yarnpkg.com/@cosmjs/tendermint-rpc/-/tendermint-rpc-0.32.4.tgz#b36f9ec657498e42c97e21bb7368798ef6279752" @@ -1919,20 +1453,15 @@ readonly-date "^1.0.0" xstream "^11.14.0" -"@cosmjs/utils@^0.29.5": - version "0.29.5" - resolved "https://registry.yarnpkg.com/@cosmjs/utils/-/utils-0.29.5.tgz#3fed1b3528ae8c5f1eb5d29b68755bebfd3294ee" - integrity sha512-m7h+RXDUxOzEOGt4P+3OVPX7PuakZT3GBmaM/Y2u+abN3xZkziykD/NvedYFvvCCdQo714XcGl33bwifS9FZPQ== - "@cosmjs/utils@^0.32.4": version "0.32.4" resolved "https://registry.yarnpkg.com/@cosmjs/utils/-/utils-0.32.4.tgz#a9a717c9fd7b1984d9cefdd0ef6c6f254060c671" integrity sha512-D1Yc+Zy8oL/hkUkFUL/bwxvuDBzRGpc4cF7/SkdhxX4iHpSLgdOuTt1mhCh9+kl6NQREy9t7SYZ6xeW5gFe60w== -"@cosmos-kit/core@^2.16.3": - version "2.16.3" - resolved "https://registry.yarnpkg.com/@cosmos-kit/core/-/core-2.16.3.tgz#587e6b3be8214402a57ea13292af6e43c0ac7fdd" - integrity sha512-tmLJYlE/94iv69Uz6HqPm9GUZSNW+9Ftiq3rXXMcQTVBS64dASJlS4PEWN7QZNr7nsYxQcyzlYxzsrc9g13Dqg== +"@cosmos-kit/core@^2.16.6": + version "2.16.6" + resolved "https://registry.yarnpkg.com/@cosmos-kit/core/-/core-2.16.6.tgz#329b502a37005eaee141bce5941b894e6a1f2d55" + integrity sha512-/mqCxzGE10/tJlDKzTVrpVIhM64llGDvifh6dHDneZFYdi8FKxhvzCIPXN7Blci4UfOtk0SVZvAQxN/ei+fqXg== dependencies: "@chain-registry/client" "^1.49.11" "@chain-registry/keplr" "^1.69.13" @@ -1950,67 +1479,34 @@ uuid "^9.0.1" "@cosmos-kit/keplr-extension@^2.14.0": - version "2.15.3" - resolved "https://registry.yarnpkg.com/@cosmos-kit/keplr-extension/-/keplr-extension-2.15.3.tgz#8325d77f99904008430f7e7a0712c6019b6efa1a" - integrity sha512-nKCJQIGVMHI+ZTEmeWsrQ89O0uMAfqEVJxmkaMWPJSgUmUOSso8miylo7oStHBqq3JAv+i7sZShei2lGRllNAA== + version "2.15.7" + resolved "https://registry.yarnpkg.com/@cosmos-kit/keplr-extension/-/keplr-extension-2.15.7.tgz#3d8058d29615492be687567999a0a7f9bbd0f55e" + integrity sha512-0PvrXelwWG4GTEuVTcRX/RT2TaQRGlY3H4LNpQrjIg4UgDuKA6zphw5bDq6/OsdsAbbdWSq1/MUYoc7TQjcf+A== dependencies: "@chain-registry/keplr" "^1.69.13" - "@cosmos-kit/core" "^2.16.3" + "@cosmos-kit/core" "^2.16.6" "@keplr-wallet/provider-extension" "^0.12.95" "@keplr-wallet/types" "^0.12.95" -"@cosmos-kit/react-lite@^2.16.3": - version "2.16.3" - resolved "https://registry.yarnpkg.com/@cosmos-kit/react-lite/-/react-lite-2.16.3.tgz#f1e214a582825424cefcecbf77a8d324f463ba29" - integrity sha512-v7rQvLZjjHtEL7eHwvoRpnXPS+dlmFXFaKJkX2HX1Xqo1gD3tQ+ULBxWLRX4fZiFAdbC1dTnJmP5e7UpEs6hhQ== +"@cosmos-kit/react-lite@^2.16.6": + version "2.16.6" + resolved "https://registry.yarnpkg.com/@cosmos-kit/react-lite/-/react-lite-2.16.6.tgz#ec89b00aa69e672a5592fc38b6b0a609fa368cbf" + integrity sha512-2B8fsYGmO1ZM1mBC2pQtSe/7gTxnoG55VePZ7ZeK0vAc19gjk0RQyMW5FhvLiMhikwUdTZzXopNHAx/XuQo5Vw== dependencies: "@chain-registry/types" "^0.46.11" - "@cosmos-kit/core" "^2.16.3" + "@cosmos-kit/core" "^2.16.6" "@dao-dao/cosmiframe" "^1.0.0" "@cosmos-kit/react@^2.20.1": - version "2.22.3" - resolved "https://registry.yarnpkg.com/@cosmos-kit/react/-/react-2.22.3.tgz#521ba3f7347f00d4d8c8e2642e395df4571022e2" - integrity sha512-rcSTmXzjGzDElA5ZsRnHs7CXZUu34ssRudw/Q3TgrqwWBmRTCWLPy+E5/6+y5Dz3vriVMxBUGE4u3RW+MDjiSg== + version "2.22.6" + resolved "https://registry.yarnpkg.com/@cosmos-kit/react/-/react-2.22.6.tgz#23afc83cd1a46afcb4635d1b2d920abea03b06b9" + integrity sha512-FdhGRempqw+/VKi7vxZAqwRsHlCWzBkSksgjNnay3swmHB6t6PY7b+pLlvIDmb9Br5A7JxthE4wthTRr87zEFw== dependencies: "@chain-registry/types" "^0.46.11" - "@cosmos-kit/core" "^2.16.3" - "@cosmos-kit/react-lite" "^2.16.3" + "@cosmos-kit/core" "^2.16.6" + "@cosmos-kit/react-lite" "^2.16.6" "@react-icons/all-files" "^4.1.0" -"@cosmwasm/ts-codegen@^0.35.3": - version "0.35.7" - resolved "https://registry.yarnpkg.com/@cosmwasm/ts-codegen/-/ts-codegen-0.35.7.tgz#b88c03b732824113fc765d560504516faca6f23b" - integrity sha512-qbOAYJPe5O5AjoWytZcsVvM0SBA39sMpiqnVIIgjJiqp4G4D5GjR2/UV3ePpygnIxxKZWMnOpPPUvLMjflblCw== - dependencies: - "@babel/core" "7.18.10" - "@babel/generator" "7.18.12" - "@babel/parser" "7.18.11" - "@babel/plugin-proposal-class-properties" "7.18.6" - "@babel/plugin-proposal-export-default-from" "7.18.10" - "@babel/plugin-proposal-object-rest-spread" "7.18.9" - "@babel/plugin-transform-runtime" "7.18.10" - "@babel/preset-env" "7.18.10" - "@babel/preset-typescript" "^7.18.6" - "@babel/runtime" "^7.18.9" - "@babel/traverse" "7.18.11" - "@babel/types" "7.18.10" - "@pyramation/json-schema-to-typescript" " 11.0.4" - case "1.6.3" - dargs "7.0.0" - deepmerge "4.2.2" - dotty "0.1.2" - fuzzy "0.1.3" - glob "8.0.3" - inquirerer "0.1.3" - long "^5.2.0" - minimist "1.2.6" - mkdirp "1.0.4" - parse-package-name "1.0.0" - rimraf "3.0.2" - shelljs "0.8.5" - wasm-ast-types "^0.26.4" - "@csstools/color-helpers@^5.1.0": version "5.1.0" resolved "https://registry.yarnpkg.com/@csstools/color-helpers/-/color-helpers-5.1.0.tgz#106c54c808cabfd1ab4c602d8505ee584c2996ef" @@ -2103,17 +1599,17 @@ integrity sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw== "@emnapi/core@^1.4.3": - version "1.5.0" - resolved "https://registry.yarnpkg.com/@emnapi/core/-/core-1.5.0.tgz#85cd84537ec989cebb2343606a1ee663ce4edaf0" - integrity sha512-sbP8GzB1WDzacS8fgNPpHlp6C9VZe+SJP3F90W9rLemaQj2PzIuTEl1qDOYQf58YIpyjViI24y9aPWCjEzY2cg== + version "1.6.0" + resolved "https://registry.yarnpkg.com/@emnapi/core/-/core-1.6.0.tgz#517f65d1c8270d5d5aa1aad660d5acb897430dca" + integrity sha512-zq/ay+9fNIJJtJiZxdTnXS20PllcYMX3OE23ESc4HK/bdYu3cOWYVhsOhVnXALfU/uqJIxn5NBPd9z4v+SfoSg== dependencies: "@emnapi/wasi-threads" "1.1.0" tslib "^2.4.0" "@emnapi/runtime@^1.2.0", "@emnapi/runtime@^1.4.3": - version "1.5.0" - resolved "https://registry.yarnpkg.com/@emnapi/runtime/-/runtime-1.5.0.tgz#9aebfcb9b17195dce3ab53c86787a6b7d058db73" - integrity sha512-97/BJ3iXHww3djw6hYIfErCZFee7qCtrneuLa20UXFCOTCfBM2cvQHjWJ2EG0s0MtdNwInarqCTz35i4wWXHsQ== + version "1.6.0" + resolved "https://registry.yarnpkg.com/@emnapi/runtime/-/runtime-1.6.0.tgz#8fe297e0090f6e89a57a1f31f1c440bdbc3c01d8" + integrity sha512-obtUmAHTMjll499P+D9A3axeJFlhdjOWdKUNs/U6QIGT7V5RjcUW1xToAzjvmgTSQhDbYn/NwfTRoJcQ2rNBxA== dependencies: tslib "^2.4.0" @@ -2169,7 +1665,7 @@ resolved "https://registry.yarnpkg.com/@emotion/memoize/-/memoize-0.9.0.tgz#745969d649977776b43fc7648c556aaa462b4102" integrity sha512-30FAj7/EoJ5mwVPOWhAyCX+FPfMDrVecJAM+Iw9NRoSl4BBAQeqj4cApHHUXOVvIPgLVDsCFoz/hGD+5QQD1GQ== -"@emotion/react@^11.11.1", "@emotion/react@^11.13.5", "@emotion/react@^11.7.0": +"@emotion/react@^11.13.5", "@emotion/react@^11.7.0": version "11.14.0" resolved "https://registry.yarnpkg.com/@emotion/react/-/react-11.14.0.tgz#cfaae35ebc67dd9ef4ea2e9acc6cd29e157dd05d" integrity sha512-O000MLDBDdk/EohJPFUqvnp4qnHeYkVP5B0xEG0D/L7cOKP9kefu2DXn8dj74cQfsEzUqh+sr1RzFqiL1o+PpA== @@ -2199,7 +1695,7 @@ resolved "https://registry.yarnpkg.com/@emotion/sheet/-/sheet-1.4.0.tgz#c9299c34d248bc26e82563735f78953d2efca83c" integrity sha512-fTBW9/8r2w3dXWYM4HCB1Rdp8NLibOw2+XELH5m5+AkWiL/KqYX6dc0kKYlaYyKjrQ6ds33MCdMPEwgs2z1rqg== -"@emotion/styled@^11.11.0", "@emotion/styled@^11.13.5", "@emotion/styled@^11.6.0": +"@emotion/styled@^11.13.5", "@emotion/styled@^11.6.0": version "11.14.1" resolved "https://registry.yarnpkg.com/@emotion/styled/-/styled-11.14.1.tgz#8c34bed2948e83e1980370305614c20955aacd1c" integrity sha512-qEEJt42DuToa3gurlH4Qqc1kVpNq8wO8cJtDzU46TjlzWjDlsVyevtYCRijVq3SrHsROS+gVQ8Fnea108GnKzw== @@ -2239,24 +1735,9 @@ eslint-visitor-keys "^3.4.3" "@eslint-community/regexpp@^4.10.0", "@eslint-community/regexpp@^4.4.0", "@eslint-community/regexpp@^4.6.1": - version "4.12.1" - resolved "https://registry.yarnpkg.com/@eslint-community/regexpp/-/regexpp-4.12.1.tgz#cfc6cffe39df390a3841cde2abccf92eaa7ae0e0" - integrity sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ== - -"@eslint/eslintrc@^0.4.3": - version "0.4.3" - resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-0.4.3.tgz#9e42981ef035beb3dd49add17acb96e8ff6f394c" - integrity sha512-J6KFFz5QCYUJq3pf0mjEcCJVERbzv71PUIDczuh9JkwGEzced6CO5ADLHB1rbf/+oPBtoPfMYNOpGDzCANlbXw== - dependencies: - ajv "^6.12.4" - debug "^4.1.1" - espree "^7.3.0" - globals "^13.9.0" - ignore "^4.0.6" - import-fresh "^3.2.1" - js-yaml "^3.13.1" - minimatch "^3.0.4" - strip-json-comments "^3.1.1" + version "4.12.2" + resolved "https://registry.yarnpkg.com/@eslint-community/regexpp/-/regexpp-4.12.2.tgz#bccdf615bcf7b6e8db830ec0b8d21c9a25de597b" + integrity sha512-EriSTlt5OC9/7SXkRSCAhfSxxoSUgBm33OH+IkwbdpgoqsSsUg7y3uh+IICI/Qg4BBWr3U2i39RpmycbxMq4ew== "@eslint/eslintrc@^2.1.4": version "2.1.4" @@ -2326,19 +1807,6 @@ "@ethersproject/bytes" "^5.8.0" "@ethersproject/logger" "^5.8.0" -"@favware/rollup-type-bundler@^2.0.0": - version "2.0.0" - resolved "https://registry.yarnpkg.com/@favware/rollup-type-bundler/-/rollup-type-bundler-2.0.0.tgz#5594ee64b40dc64eb02eb68a30943ff4255d25dd" - integrity sha512-RTMvx6v3b4D9V9iXHTogYjHa5fCmcUR3Bu0pFreo+80v2tD+7MSJm24nR1P/SkeTCy+zHKC1JOFQa04fcWZozg== - dependencies: - "@sapphire/utilities" "^3.11.0" - colorette "^2.0.19" - commander "^9.4.1" - js-yaml "^4.1.0" - rollup "^3.2.1" - rollup-plugin-dts "^5.0.0" - typescript "^4.8.4" - "@floating-ui/core@^1.6.7", "@floating-ui/core@^1.7.3": version "1.7.3" resolved "https://registry.yarnpkg.com/@floating-ui/core/-/core-1.7.3.tgz#462d722f001e23e46d86fd2bd0d21b7693ccb8b7" @@ -2375,13 +1843,13 @@ resolved "https://registry.yarnpkg.com/@floating-ui/utils/-/utils-0.2.10.tgz#a2a1e3812d14525f725d011a73eceb41fef5bc1c" integrity sha512-aGTxbpbg8/b5JfU1HXSrbH3wXZuLPJcNEcZQFMxLs3oSzgtVu6nFPkbbGGUvBcUjKV2YyB9Wxxabo+HEH9tcRQ== -"@formatjs/ecma402-abstract@2.3.4": - version "2.3.4" - resolved "https://registry.yarnpkg.com/@formatjs/ecma402-abstract/-/ecma402-abstract-2.3.4.tgz#e90c5a846ba2b33d92bc400fdd709da588280fbc" - integrity sha512-qrycXDeaORzIqNhBOx0btnhpD1c+/qFIHAN9znofuMJX6QBwtbrmlpWfD4oiUUD2vJUOIYFA/gYtg2KAMGG7sA== +"@formatjs/ecma402-abstract@2.3.6": + version "2.3.6" + resolved "https://registry.yarnpkg.com/@formatjs/ecma402-abstract/-/ecma402-abstract-2.3.6.tgz#d6ca9d3579054fe1e1a0a0b5e872e0d64922e4e1" + integrity sha512-HJnTFeRM2kVFVr5gr5kH1XP6K0JcJtE7Lzvtr3FS/so5f1kpsqqqxy5JF+FRaO6H2qmcMfAUIox7AJteieRtVw== dependencies: "@formatjs/fast-memoize" "2.2.7" - "@formatjs/intl-localematcher" "0.6.1" + "@formatjs/intl-localematcher" "0.6.2" decimal.js "^10.4.3" tslib "^2.8.0" @@ -2392,27 +1860,27 @@ dependencies: tslib "^2.8.0" -"@formatjs/icu-messageformat-parser@2.11.2": - version "2.11.2" - resolved "https://registry.yarnpkg.com/@formatjs/icu-messageformat-parser/-/icu-messageformat-parser-2.11.2.tgz#85aea211bea40aa81ee1d44ac7accc3cf5500a73" - integrity sha512-AfiMi5NOSo2TQImsYAg8UYddsNJ/vUEv/HaNqiFjnI3ZFfWihUtD5QtuX6kHl8+H+d3qvnE/3HZrfzgdWpsLNA== +"@formatjs/icu-messageformat-parser@2.11.4": + version "2.11.4" + resolved "https://registry.yarnpkg.com/@formatjs/icu-messageformat-parser/-/icu-messageformat-parser-2.11.4.tgz#63bd2cd82d08ae2bef55adeeb86486df68826f32" + integrity sha512-7kR78cRrPNB4fjGFZg3Rmj5aah8rQj9KPzuLsmcSn4ipLXQvC04keycTI1F7kJYDwIXtT2+7IDEto842CfZBtw== dependencies: - "@formatjs/ecma402-abstract" "2.3.4" - "@formatjs/icu-skeleton-parser" "1.8.14" + "@formatjs/ecma402-abstract" "2.3.6" + "@formatjs/icu-skeleton-parser" "1.8.16" tslib "^2.8.0" -"@formatjs/icu-skeleton-parser@1.8.14": - version "1.8.14" - resolved "https://registry.yarnpkg.com/@formatjs/icu-skeleton-parser/-/icu-skeleton-parser-1.8.14.tgz#b9581d00363908efb29817fdffc32b79f41dabe5" - integrity sha512-i4q4V4qslThK4Ig8SxyD76cp3+QJ3sAqr7f6q9VVfeGtxG9OhiAk3y9XF6Q41OymsKzsGQ6OQQoJNY4/lI8TcQ== +"@formatjs/icu-skeleton-parser@1.8.16": + version "1.8.16" + resolved "https://registry.yarnpkg.com/@formatjs/icu-skeleton-parser/-/icu-skeleton-parser-1.8.16.tgz#13f81f6845c7cf6599623006aacaf7d6b4ad2970" + integrity sha512-H13E9Xl+PxBd8D5/6TVUluSpxGNvFSlN/b3coUp0e0JpuWXXnQDiavIpY3NnvSp4xhEMoXyyBvVfdFX8jglOHQ== dependencies: - "@formatjs/ecma402-abstract" "2.3.4" + "@formatjs/ecma402-abstract" "2.3.6" tslib "^2.8.0" -"@formatjs/intl-localematcher@0.6.1": - version "0.6.1" - resolved "https://registry.yarnpkg.com/@formatjs/intl-localematcher/-/intl-localematcher-0.6.1.tgz#25dc30675320bf65a9d7f73876fc1e4064c0e299" - integrity sha512-ePEgLgVCqi2BBFnTMWPfIghu6FkbZnnBVhO2sSxvLfrdFw7wCHAHiDoM2h4NRgjbaY7+B7HgOLZGkK187pZTZg== +"@formatjs/intl-localematcher@0.6.2": + version "0.6.2" + resolved "https://registry.yarnpkg.com/@formatjs/intl-localematcher/-/intl-localematcher-0.6.2.tgz#e9ebe0b4082d7d48e5b2d753579fb7ece4eaefea" + integrity sha512-XOMO2Hupl0wdd172Y06h6kLpBz6Dv+J4okPLl4LPtzbr8f66WbIoy4ev98EBuZ6ZK4h5ydTN6XneT4QVpD7cdA== dependencies: tslib "^2.8.0" @@ -2452,25 +1920,11 @@ debug "^4.3.1" minimatch "^3.0.5" -"@humanwhocodes/config-array@^0.5.0": - version "0.5.0" - resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.5.0.tgz#1407967d4c6eecd7388f83acf1eaf4d0c6e58ef9" - integrity sha512-FagtKFz74XrTl7y6HCzQpwDfXP0yhxe9lHLD1UZxjvZIcbyRz8zTFF/yYNfSfzU414eDwZ1SrO0Qvtyf+wFMQg== - dependencies: - "@humanwhocodes/object-schema" "^1.2.0" - debug "^4.1.1" - minimatch "^3.0.4" - "@humanwhocodes/module-importer@^1.0.1": version "1.0.1" resolved "https://registry.yarnpkg.com/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz#af5b2691a22b44be847b0ca81641c5fb6ad0172c" integrity sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA== -"@humanwhocodes/object-schema@^1.2.0": - version "1.2.1" - resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz#b520529ec21d8e5945a1851dfd1c32e94e39ff45" - integrity sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA== - "@humanwhocodes/object-schema@^2.0.3": version "2.0.3" resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz#4a2868d75d6d6963e423bcf90b7fd1be343409d3" @@ -2634,10 +2088,10 @@ react-stately "^3.32.2" zustand "^4.5.5" -"@internationalized/date@^3.9.0": - version "3.9.0" - resolved "https://registry.yarnpkg.com/@internationalized/date/-/date-3.9.0.tgz#cf241989b5dd07a2a9f1c91aabd2ad93968a0cc3" - integrity sha512-yaN3brAnHRD+4KyyOsJyk49XUvj2wtbNACSqg0bz3u8t2VuzhC8Q5dfRnrSxjnnbDb+ienBnkn1TzQfE154vyg== +"@internationalized/date@^3.10.0": + version "3.10.0" + resolved "https://registry.yarnpkg.com/@internationalized/date/-/date-3.10.0.tgz#056db64a4facdf48c6937ad498a882a8151d640a" + integrity sha512-oxDR/NTEJ1k+UFVQElaNIk65E/Z83HK1z1WI3lQyhTtnNg4R5oVXaPzK3jcpKG8UHKDVuDQHzn+wsxSz8RP3aw== dependencies: "@swc/helpers" "^0.5.0" @@ -2715,18 +2169,6 @@ jest-util "^27.5.1" slash "^3.0.0" -"@jest/console@^29.7.0": - version "29.7.0" - resolved "https://registry.yarnpkg.com/@jest/console/-/console-29.7.0.tgz#cd4822dbdb84529265c5a2bdb529a3c9cc950ffc" - integrity sha512-5Ni4CU7XHQi32IJ398EEP4RrB8eV09sXP2ROqD4bksHrnTree52PsxvX8tpL8LvTZ3pFzXyPbNQReSN41CAhOg== - dependencies: - "@jest/types" "^29.6.3" - "@types/node" "*" - chalk "^4.0.0" - jest-message-util "^29.7.0" - jest-util "^29.7.0" - slash "^3.0.0" - "@jest/core@^27.5.1": version "27.5.1" resolved "https://registry.yarnpkg.com/@jest/core/-/core-27.5.1.tgz#267ac5f704e09dc52de2922cbf3af9edcd64b626" @@ -2761,40 +2203,6 @@ slash "^3.0.0" strip-ansi "^6.0.0" -"@jest/core@^29.7.0": - version "29.7.0" - resolved "https://registry.yarnpkg.com/@jest/core/-/core-29.7.0.tgz#b6cccc239f30ff36609658c5a5e2291757ce448f" - integrity sha512-n7aeXWKMnGtDA48y8TLWJPJmLmmZ642Ceo78cYWEpiD7FzDgmNDV/GCVRorPABdXLJZ/9wzzgZAlHjXjxDHGsg== - dependencies: - "@jest/console" "^29.7.0" - "@jest/reporters" "^29.7.0" - "@jest/test-result" "^29.7.0" - "@jest/transform" "^29.7.0" - "@jest/types" "^29.6.3" - "@types/node" "*" - ansi-escapes "^4.2.1" - chalk "^4.0.0" - ci-info "^3.2.0" - exit "^0.1.2" - graceful-fs "^4.2.9" - jest-changed-files "^29.7.0" - jest-config "^29.7.0" - jest-haste-map "^29.7.0" - jest-message-util "^29.7.0" - jest-regex-util "^29.6.3" - jest-resolve "^29.7.0" - jest-resolve-dependencies "^29.7.0" - jest-runner "^29.7.0" - jest-runtime "^29.7.0" - jest-snapshot "^29.7.0" - jest-util "^29.7.0" - jest-validate "^29.7.0" - jest-watcher "^29.7.0" - micromatch "^4.0.4" - pretty-format "^29.7.0" - slash "^3.0.0" - strip-ansi "^6.0.0" - "@jest/diff-sequences@30.0.1": version "30.0.1" resolved "https://registry.yarnpkg.com/@jest/diff-sequences/-/diff-sequences-30.0.1.tgz#0ededeae4d071f5c8ffe3678d15f3a1be09156be" @@ -2810,16 +2218,6 @@ "@types/node" "*" jest-mock "^27.5.1" -"@jest/environment@^29.7.0": - version "29.7.0" - resolved "https://registry.yarnpkg.com/@jest/environment/-/environment-29.7.0.tgz#24d61f54ff1f786f3cd4073b4b94416383baf2a7" - integrity sha512-aQIfHDq33ExsN4jP1NWGXhxgQ/wixs60gDiKO+XVMd8Mn0NWPWgc34ZQDTb2jKaUWQ7MuwoitXAsN2XVXNMpAw== - dependencies: - "@jest/fake-timers" "^29.7.0" - "@jest/types" "^29.6.3" - "@types/node" "*" - jest-mock "^29.7.0" - "@jest/expect-utils@30.2.0": version "30.2.0" resolved "https://registry.yarnpkg.com/@jest/expect-utils/-/expect-utils-30.2.0.tgz#4f95413d4748454fdb17404bf1141827d15e6011" @@ -2827,28 +2225,6 @@ dependencies: "@jest/get-type" "30.1.0" -"@jest/expect-utils@^28.1.3": - version "28.1.3" - resolved "https://registry.yarnpkg.com/@jest/expect-utils/-/expect-utils-28.1.3.tgz#58561ce5db7cd253a7edddbc051fb39dda50f525" - integrity sha512-wvbi9LUrHJLn3NlDW6wF2hvIMtd4JUl2QNVrjq+IBSHirgfrR3o9RnVtxzdEGO2n9JyIWwHnLfby5KzqBGg2YA== - dependencies: - jest-get-type "^28.0.2" - -"@jest/expect-utils@^29.7.0": - version "29.7.0" - resolved "https://registry.yarnpkg.com/@jest/expect-utils/-/expect-utils-29.7.0.tgz#023efe5d26a8a70f21677d0a1afc0f0a44e3a1c6" - integrity sha512-GlsNBWiFQFCVi9QVSx7f5AgMeLxe9YCCs5PuP2O2LdjDAA8Jh9eX7lA1Jq/xdXw3Wb3hyvlFNfZIfcRetSzYcA== - dependencies: - jest-get-type "^29.6.3" - -"@jest/expect@^29.7.0": - version "29.7.0" - resolved "https://registry.yarnpkg.com/@jest/expect/-/expect-29.7.0.tgz#76a3edb0cb753b70dfbfe23283510d3d45432bf2" - integrity sha512-8uMeAMycttpva3P1lBHB8VciS9V0XAr3GymPpipdyQXbBcuhkLQOSe8E/p92RyAdToS6ZD1tFkX+CkhoECE0dQ== - dependencies: - expect "^29.7.0" - jest-snapshot "^29.7.0" - "@jest/fake-timers@^27.5.1": version "27.5.1" resolved "https://registry.yarnpkg.com/@jest/fake-timers/-/fake-timers-27.5.1.tgz#76979745ce0579c8a94a4678af7a748eda8ada74" @@ -2861,18 +2237,6 @@ jest-mock "^27.5.1" jest-util "^27.5.1" -"@jest/fake-timers@^29.7.0": - version "29.7.0" - resolved "https://registry.yarnpkg.com/@jest/fake-timers/-/fake-timers-29.7.0.tgz#fd91bf1fffb16d7d0d24a426ab1a47a49881a565" - integrity sha512-q4DH1Ha4TTFPdxLsqDXK1d3+ioSL7yL5oCMJZgDYm6i+6CygW5E5xVr/D1HdsGxjt1ZWSfUAs9OxSB/BNelWrQ== - dependencies: - "@jest/types" "^29.6.3" - "@sinonjs/fake-timers" "^10.0.2" - "@types/node" "*" - jest-message-util "^29.7.0" - jest-mock "^29.7.0" - jest-util "^29.7.0" - "@jest/get-type@30.1.0": version "30.1.0" resolved "https://registry.yarnpkg.com/@jest/get-type/-/get-type-30.1.0.tgz#4fcb4dc2ebcf0811be1c04fd1cb79c2dba431cbc" @@ -2887,16 +2251,6 @@ "@jest/types" "^27.5.1" expect "^27.5.1" -"@jest/globals@^29.7.0": - version "29.7.0" - resolved "https://registry.yarnpkg.com/@jest/globals/-/globals-29.7.0.tgz#8d9290f9ec47ff772607fa864ca1d5a2efae1d4d" - integrity sha512-mpiz3dutLbkW2MNFubUGUEVLkTGiqW6yLVTA+JbP6fI6J5iL9Y0Nlg8k95pcF8ctKwCS7WVxteBs29hhfAotzQ== - dependencies: - "@jest/environment" "^29.7.0" - "@jest/expect" "^29.7.0" - "@jest/types" "^29.6.3" - jest-mock "^29.7.0" - "@jest/pattern@30.0.1": version "30.0.1" resolved "https://registry.yarnpkg.com/@jest/pattern/-/pattern-30.0.1.tgz#d5304147f49a052900b4b853dedb111d080e199f" @@ -2936,36 +2290,6 @@ terminal-link "^2.0.0" v8-to-istanbul "^8.1.0" -"@jest/reporters@^29.7.0": - version "29.7.0" - resolved "https://registry.yarnpkg.com/@jest/reporters/-/reporters-29.7.0.tgz#04b262ecb3b8faa83b0b3d321623972393e8f4c7" - integrity sha512-DApq0KJbJOEzAFYjHADNNxAE3KbhxQB1y5Kplb5Waqw6zVbuWatSnMjE5gs8FUgEPmNsnZA3NCWl9NG0ia04Pg== - dependencies: - "@bcoe/v8-coverage" "^0.2.3" - "@jest/console" "^29.7.0" - "@jest/test-result" "^29.7.0" - "@jest/transform" "^29.7.0" - "@jest/types" "^29.6.3" - "@jridgewell/trace-mapping" "^0.3.18" - "@types/node" "*" - chalk "^4.0.0" - collect-v8-coverage "^1.0.0" - exit "^0.1.2" - glob "^7.1.3" - graceful-fs "^4.2.9" - istanbul-lib-coverage "^3.0.0" - istanbul-lib-instrument "^6.0.0" - istanbul-lib-report "^3.0.0" - istanbul-lib-source-maps "^4.0.0" - istanbul-reports "^3.1.3" - jest-message-util "^29.7.0" - jest-util "^29.7.0" - jest-worker "^29.7.0" - slash "^3.0.0" - string-length "^4.0.1" - strip-ansi "^6.0.0" - v8-to-istanbul "^9.0.1" - "@jest/schemas@30.0.5": version "30.0.5" resolved "https://registry.yarnpkg.com/@jest/schemas/-/schemas-30.0.5.tgz#7bdf69fc5a368a5abdb49fd91036c55225846473" @@ -2973,13 +2297,6 @@ dependencies: "@sinclair/typebox" "^0.34.0" -"@jest/schemas@^28.1.3": - version "28.1.3" - resolved "https://registry.yarnpkg.com/@jest/schemas/-/schemas-28.1.3.tgz#ad8b86a66f11f33619e3d7e1dcddd7f2d40ff905" - integrity sha512-/l/VWsdt/aBXgjshLWOFyFt3IVdYypu5y2Wn2rOO1un6nkqIn8SLXzgIMYXFyYsRWDyF5EthmKJMIdJvk08grg== - dependencies: - "@sinclair/typebox" "^0.24.1" - "@jest/schemas@^29.6.3": version "29.6.3" resolved "https://registry.yarnpkg.com/@jest/schemas/-/schemas-29.6.3.tgz#430b5ce8a4e0044a7e3819663305a7b3091c8e03" @@ -2996,15 +2313,6 @@ graceful-fs "^4.2.9" source-map "^0.6.0" -"@jest/source-map@^29.6.3": - version "29.6.3" - resolved "https://registry.yarnpkg.com/@jest/source-map/-/source-map-29.6.3.tgz#d90ba772095cf37a34a5eb9413f1b562a08554c4" - integrity sha512-MHjT95QuipcPrpLM+8JMSzFx6eHp5Bm+4XeFDJlwsvVBjmKNiIAvasGK2fxz2WbGRlnvqehFbh07MMa7n3YJnw== - dependencies: - "@jridgewell/trace-mapping" "^0.3.18" - callsites "^3.0.0" - graceful-fs "^4.2.9" - "@jest/test-result@^27.5.1": version "27.5.1" resolved "https://registry.yarnpkg.com/@jest/test-result/-/test-result-27.5.1.tgz#56a6585fa80f7cdab72b8c5fc2e871d03832f5bb" @@ -3015,16 +2323,6 @@ "@types/istanbul-lib-coverage" "^2.0.0" collect-v8-coverage "^1.0.0" -"@jest/test-result@^29.7.0": - version "29.7.0" - resolved "https://registry.yarnpkg.com/@jest/test-result/-/test-result-29.7.0.tgz#8db9a80aa1a097bb2262572686734baed9b1657c" - integrity sha512-Fdx+tv6x1zlkJPcWXmMDAG2HBnaR9XPSd5aDWQVsfrZmLVT3lU1cwyxLgRmXR9yrq4NBoEm9BMsfgFzTQAbJYA== - dependencies: - "@jest/console" "^29.7.0" - "@jest/types" "^29.6.3" - "@types/istanbul-lib-coverage" "^2.0.0" - collect-v8-coverage "^1.0.0" - "@jest/test-sequencer@^27.5.1": version "27.5.1" resolved "https://registry.yarnpkg.com/@jest/test-sequencer/-/test-sequencer-27.5.1.tgz#4057e0e9cea4439e544c6353c6affe58d095745b" @@ -3035,37 +2333,6 @@ jest-haste-map "^27.5.1" jest-runtime "^27.5.1" -"@jest/test-sequencer@^29.7.0": - version "29.7.0" - resolved "https://registry.yarnpkg.com/@jest/test-sequencer/-/test-sequencer-29.7.0.tgz#6cef977ce1d39834a3aea887a1726628a6f072ce" - integrity sha512-GQwJ5WZVrKnOJuiYiAF52UNUJXgTZx1NHjFSEB0qEMmSZKAkdMoIzw/Cj6x6NF4AvV23AUqDpFzQkN/eYCYTxw== - dependencies: - "@jest/test-result" "^29.7.0" - graceful-fs "^4.2.9" - jest-haste-map "^29.7.0" - slash "^3.0.0" - -"@jest/transform@28.1.3": - version "28.1.3" - resolved "https://registry.yarnpkg.com/@jest/transform/-/transform-28.1.3.tgz#59d8098e50ab07950e0f2fc0fc7ec462371281b0" - integrity sha512-u5dT5di+oFI6hfcLOHGTAfmUxFRrjK+vnaP0kkVow9Md/M7V/MxqQMOz/VV25UZO8pzeA9PjfTpOu6BDuwSPQA== - dependencies: - "@babel/core" "^7.11.6" - "@jest/types" "^28.1.3" - "@jridgewell/trace-mapping" "^0.3.13" - babel-plugin-istanbul "^6.1.1" - chalk "^4.0.0" - convert-source-map "^1.4.0" - fast-json-stable-stringify "^2.0.0" - graceful-fs "^4.2.9" - jest-haste-map "^28.1.3" - jest-regex-util "^28.0.2" - jest-util "^28.1.3" - micromatch "^4.0.4" - pirates "^4.0.4" - slash "^3.0.0" - write-file-atomic "^4.0.1" - "@jest/transform@^26.6.2": version "26.6.2" resolved "https://registry.yarnpkg.com/@jest/transform/-/transform-26.6.2.tgz#5ac57c5fa1ad17b2aae83e73e45813894dcf2e4b" @@ -3108,27 +2375,6 @@ source-map "^0.6.1" write-file-atomic "^3.0.0" -"@jest/transform@^29.7.0": - version "29.7.0" - resolved "https://registry.yarnpkg.com/@jest/transform/-/transform-29.7.0.tgz#df2dd9c346c7d7768b8a06639994640c642e284c" - integrity sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw== - dependencies: - "@babel/core" "^7.11.6" - "@jest/types" "^29.6.3" - "@jridgewell/trace-mapping" "^0.3.18" - babel-plugin-istanbul "^6.1.1" - chalk "^4.0.0" - convert-source-map "^2.0.0" - fast-json-stable-stringify "^2.1.0" - graceful-fs "^4.2.9" - jest-haste-map "^29.7.0" - jest-regex-util "^29.6.3" - jest-util "^29.7.0" - micromatch "^4.0.4" - pirates "^4.0.4" - slash "^3.0.0" - write-file-atomic "^4.0.2" - "@jest/types@30.2.0": version "30.2.0" resolved "https://registry.yarnpkg.com/@jest/types/-/types-30.2.0.tgz#1c678a7924b8f59eafd4c77d56b6d0ba976d62b8" @@ -3164,18 +2410,6 @@ "@types/yargs" "^16.0.0" chalk "^4.0.0" -"@jest/types@^28.1.3": - version "28.1.3" - resolved "https://registry.yarnpkg.com/@jest/types/-/types-28.1.3.tgz#b05de80996ff12512bc5ceb1d208285a7d11748b" - integrity sha512-RyjiyMUZrKz/c+zlMFO1pm70DcIlST8AeWTkoUdZevew44wcNZQHsEVOiCVtgVnlFFD82FPaXycys58cf2muVQ== - dependencies: - "@jest/schemas" "^28.1.3" - "@types/istanbul-lib-coverage" "^2.0.0" - "@types/istanbul-reports" "^3.0.0" - "@types/node" "*" - "@types/yargs" "^17.0.8" - chalk "^4.0.0" - "@jest/types@^29.6.3": version "29.6.3" resolved "https://registry.yarnpkg.com/@jest/types/-/types-29.6.3.tgz#1131f8cf634e7e84c5e77bab12f052af585fba59" @@ -3188,7 +2422,7 @@ "@types/yargs" "^17.0.8" chalk "^4.0.0" -"@jridgewell/gen-mapping@^0.3.12", "@jridgewell/gen-mapping@^0.3.2", "@jridgewell/gen-mapping@^0.3.5": +"@jridgewell/gen-mapping@^0.3.12", "@jridgewell/gen-mapping@^0.3.5": version "0.3.13" resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz#6342a19f44347518c93e43b1ac69deb3c4656a1f" integrity sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA== @@ -3217,12 +2451,12 @@ "@jridgewell/gen-mapping" "^0.3.5" "@jridgewell/trace-mapping" "^0.3.25" -"@jridgewell/sourcemap-codec@^1.4.13", "@jridgewell/sourcemap-codec@^1.4.14", "@jridgewell/sourcemap-codec@^1.5.0", "@jridgewell/sourcemap-codec@^1.5.5": +"@jridgewell/sourcemap-codec@^1.4.14", "@jridgewell/sourcemap-codec@^1.5.0": version "1.5.5" resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz#6912b00d2c631c0d15ce1a7ab57cd657f2a8f8ba" integrity sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og== -"@jridgewell/trace-mapping@^0.3.12", "@jridgewell/trace-mapping@^0.3.13", "@jridgewell/trace-mapping@^0.3.18", "@jridgewell/trace-mapping@^0.3.24", "@jridgewell/trace-mapping@^0.3.25", "@jridgewell/trace-mapping@^0.3.28": +"@jridgewell/trace-mapping@^0.3.12", "@jridgewell/trace-mapping@^0.3.18", "@jridgewell/trace-mapping@^0.3.24", "@jridgewell/trace-mapping@^0.3.25", "@jridgewell/trace-mapping@^0.3.28": version "0.3.31" resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz#db15d6781c931f3a251a3dac39501c98a6082fd0" integrity sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw== @@ -3230,11 +2464,6 @@ "@jridgewell/resolve-uri" "^3.1.0" "@jridgewell/sourcemap-codec" "^1.4.14" -"@jsdevtools/ono@^7.1.3": - version "7.1.3" - resolved "https://registry.yarnpkg.com/@jsdevtools/ono/-/ono-7.1.3.tgz#9df03bbd7c696a5c58885c34aa06da41c8543796" - integrity sha512-4JQNk+3mVzK3xh2rqd6RB4J46qUR19azEHBneZyTZM+c456qOrbbM/5xcR8huNCCcbVt7+UmizG6GuUvPvKUYg== - "@keplr-wallet/common@0.12.28": version "0.12.28" resolved "https://registry.yarnpkg.com/@keplr-wallet/common/-/common-0.12.28.tgz#1d5d985070aced31a34a6426c9ac4b775081acca" @@ -3286,11 +2515,11 @@ protobufjs "^6.11.2" "@keplr-wallet/provider-extension@^0.12.95": - version "0.12.279" - resolved "https://registry.yarnpkg.com/@keplr-wallet/provider-extension/-/provider-extension-0.12.279.tgz#dfafd5b16c30fcf6bba4a73dbdf20f4699e43f20" - integrity sha512-OouzJ3ME9qlB27IE/OBKxkCPrQ2F2hZ0uBbtzIEwrIAShEtCq1wM3nZSSmAoufd5SZppnZzmdKmEle6I/PTTGQ== + version "0.12.282" + resolved "https://registry.yarnpkg.com/@keplr-wallet/provider-extension/-/provider-extension-0.12.282.tgz#e24b3bcd929249b153fc4f5e06285c788955eed2" + integrity sha512-X93arcvqh1Ep1pOc5XgQOs9cg1fqDU7lYhtNf4lyGv5Jv80qhtuWWIoduRzqWenXaWpsNSOGXrWiTRzDl4foqg== dependencies: - "@keplr-wallet/types" "0.12.279" + "@keplr-wallet/types" "0.12.282" deepmerge "^4.2.2" long "^4.0.0" uuid "^11.1.0" @@ -3300,13 +2529,6 @@ resolved "https://registry.yarnpkg.com/@keplr-wallet/simple-fetch/-/simple-fetch-0.12.28.tgz#44225df5b329c823076280df1ec9930a21b1373e" integrity sha512-T2CiKS2B5n0ZA7CWw0CA6qIAH0XYI1siE50MP+i+V0ZniCGBeL+BMcDw64vFJUcEH+1L5X4sDAzV37fQxGwllA== -"@keplr-wallet/types@0.12.279", "@keplr-wallet/types@^0.12.211", "@keplr-wallet/types@^0.12.95": - version "0.12.279" - resolved "https://registry.yarnpkg.com/@keplr-wallet/types/-/types-0.12.279.tgz#1a35453c71e9d68ea28a3532ea1f2fd0d19d37e7" - integrity sha512-MZuSzpFT5Bqr3BAjnWEIcVnvi9rEJtSONteCS7c3CBhMvCMmwJ96X+g+PKfwI4WodZdNXbUJa1+eat+3hgeoaw== - dependencies: - long "^4.0.0" - "@keplr-wallet/types@0.12.28": version "0.12.28" resolved "https://registry.yarnpkg.com/@keplr-wallet/types/-/types-0.12.28.tgz#eac3c2c9d4560856c5c403a87e67925992a04fbf" @@ -3314,6 +2536,13 @@ dependencies: long "^4.0.0" +"@keplr-wallet/types@0.12.282", "@keplr-wallet/types@^0.12.211", "@keplr-wallet/types@^0.12.95": + version "0.12.282" + resolved "https://registry.yarnpkg.com/@keplr-wallet/types/-/types-0.12.282.tgz#e761a60d443acaf90ca372ac18c139b2701f3c6a" + integrity sha512-ygbzBwyLKdQNpW1UijQfpC6prwGUsS+aYoF/X5bJl4R8mmFa6/E4SH2deBWYDCK2J88iERlKDon+Mxmu1eVskw== + dependencies: + long "^4.0.0" + "@keplr-wallet/unit@0.12.28": version "0.12.28" resolved "https://registry.yarnpkg.com/@keplr-wallet/unit/-/unit-0.12.28.tgz#907c7fa0b49a729cda207fca14fc0a38871cc6c4" @@ -3408,48 +2637,6 @@ yargs "16.2.0" yargs-parser "20.2.4" -"@lezer/common@^1.0.0": - version "1.2.3" - resolved "https://registry.yarnpkg.com/@lezer/common/-/common-1.2.3.tgz#138fcddab157d83da557554851017c6c1e5667fd" - integrity sha512-w7ojc8ejBqr2REPsWxJjrMFsA/ysDCFICn8zEOR9mrqzOu2amhITYuLD8ag6XZf0CFXDrhKqw7+tW8cX66NaDA== - -"@lezer/lr@^1.0.0": - version "1.4.2" - resolved "https://registry.yarnpkg.com/@lezer/lr/-/lr-1.4.2.tgz#931ea3dea8e9de84e90781001dae30dea9ff1727" - integrity sha512-pu0K1jCIdnQ12aWNaAVU5bzi7Bd1w54J3ECgANPmYLtQKP0HBj2cE/5coBD66MT10xbtIuUr7tg0Shbsvk0mDA== - dependencies: - "@lezer/common" "^1.0.0" - -"@lmdb/lmdb-darwin-arm64@2.8.5": - version "2.8.5" - resolved "https://registry.yarnpkg.com/@lmdb/lmdb-darwin-arm64/-/lmdb-darwin-arm64-2.8.5.tgz#895d8cb16a9d709ce5fedd8b60022903b875e08e" - integrity sha512-KPDeVScZgA1oq0CiPBcOa3kHIqU+pTOwRFDIhxvmf8CTNvqdZQYp5cCKW0bUk69VygB2PuTiINFWbY78aR2pQw== - -"@lmdb/lmdb-darwin-x64@2.8.5": - version "2.8.5" - resolved "https://registry.yarnpkg.com/@lmdb/lmdb-darwin-x64/-/lmdb-darwin-x64-2.8.5.tgz#ca243534c8b37d5516c557e4624256d18dd63184" - integrity sha512-w/sLhN4T7MW1nB3R/U8WK5BgQLz904wh+/SmA2jD8NnF7BLLoUgflCNxOeSPOWp8geP6nP/+VjWzZVip7rZ1ug== - -"@lmdb/lmdb-linux-arm64@2.8.5": - version "2.8.5" - resolved "https://registry.yarnpkg.com/@lmdb/lmdb-linux-arm64/-/lmdb-linux-arm64-2.8.5.tgz#b44a8023057e21512eefb9f6120096843b531c1e" - integrity sha512-vtbZRHH5UDlL01TT5jB576Zox3+hdyogvpcbvVJlmU5PdL3c5V7cj1EODdh1CHPksRl+cws/58ugEHi8bcj4Ww== - -"@lmdb/lmdb-linux-arm@2.8.5": - version "2.8.5" - resolved "https://registry.yarnpkg.com/@lmdb/lmdb-linux-arm/-/lmdb-linux-arm-2.8.5.tgz#17bd54740779c3e4324e78e8f747c21416a84b3d" - integrity sha512-c0TGMbm2M55pwTDIfkDLB6BpIsgxV4PjYck2HiOX+cy/JWiBXz32lYbarPqejKs9Flm7YVAKSILUducU9g2RVg== - -"@lmdb/lmdb-linux-x64@2.8.5": - version "2.8.5" - resolved "https://registry.yarnpkg.com/@lmdb/lmdb-linux-x64/-/lmdb-linux-x64-2.8.5.tgz#6c61835b6cc58efdf79dbd5e8c72a38300a90302" - integrity sha512-Xkc8IUx9aEhP0zvgeKy7IQ3ReX2N8N1L0WPcQwnZweWmOuKfwpS3GRIYqLtK5za/w3E60zhFfNdS+3pBZPytqQ== - -"@lmdb/lmdb-win32-x64@2.8.5": - version "2.8.5" - resolved "https://registry.yarnpkg.com/@lmdb/lmdb-win32-x64/-/lmdb-win32-x64-2.8.5.tgz#8233e8762440b0f4632c47a09b1b6f23de8b934c" - integrity sha512-4wvrf5BgnR8RpogHhtpCPJMKBmvyZPhhUtEwMJbXh0ni2BucpfF07jlmyM11zRqQ2XIq6PbC2j7W7UCCcm1rRQ== - "@mdx-js/mdx@^1.6.22": version "1.6.22" resolved "https://registry.yarnpkg.com/@mdx-js/mdx/-/mdx-1.6.22.tgz#8a723157bf90e78f17dc0f27995398e6c731f1ba" @@ -3485,15 +2672,6 @@ resolved "https://registry.yarnpkg.com/@mdx-js/util/-/util-1.6.22.tgz#219dfd89ae5b97a8801f015323ffa4b62f45718b" integrity sha512-H1rQc1ZOHANWBvPcW+JpGwr+juXSxM8Q8YCkm3GhZd8REu1fHR3z99CErO1p9pkcfcxZnMdIZdIsXkOHY0NilA== -"@mischnic/json-sourcemap@^0.1.1": - version "0.1.1" - resolved "https://registry.yarnpkg.com/@mischnic/json-sourcemap/-/json-sourcemap-0.1.1.tgz#0ef9b015a8f575dd9a8720d9a6b4dbc988425906" - integrity sha512-iA7+tyVqfrATAIsIRWQG+a7ZLLD0VaOCKV2Wd/v4mqIU3J9c4jx9p7S0nw1XH3gJCKNBOOwACOPYYSUu9pgT+w== - dependencies: - "@lezer/common" "^1.0.0" - "@lezer/lr" "^1.0.0" - json5 "^2.2.1" - "@mrmlnc/readdir-enhanced@^2.2.1": version "2.2.1" resolved "https://registry.yarnpkg.com/@mrmlnc/readdir-enhanced/-/readdir-enhanced-2.2.1.tgz#524af240d1a360527b730475ecfa1344aa540dde" @@ -3502,36 +2680,6 @@ call-me-maybe "^1.0.1" glob-to-regexp "^0.3.0" -"@msgpackr-extract/msgpackr-extract-darwin-arm64@3.0.3": - version "3.0.3" - resolved "https://registry.yarnpkg.com/@msgpackr-extract/msgpackr-extract-darwin-arm64/-/msgpackr-extract-darwin-arm64-3.0.3.tgz#9edec61b22c3082018a79f6d1c30289ddf3d9d11" - integrity sha512-QZHtlVgbAdy2zAqNA9Gu1UpIuI8Xvsd1v8ic6B2pZmeFnFcMWiPLfWXh7TVw4eGEZ/C9TH281KwhVoeQUKbyjw== - -"@msgpackr-extract/msgpackr-extract-darwin-x64@3.0.3": - version "3.0.3" - resolved "https://registry.yarnpkg.com/@msgpackr-extract/msgpackr-extract-darwin-x64/-/msgpackr-extract-darwin-x64-3.0.3.tgz#33677a275204898ad8acbf62734fc4dc0b6a4855" - integrity sha512-mdzd3AVzYKuUmiWOQ8GNhl64/IoFGol569zNRdkLReh6LRLHOXxU4U8eq0JwaD8iFHdVGqSy4IjFL4reoWCDFw== - -"@msgpackr-extract/msgpackr-extract-linux-arm64@3.0.3": - version "3.0.3" - resolved "https://registry.yarnpkg.com/@msgpackr-extract/msgpackr-extract-linux-arm64/-/msgpackr-extract-linux-arm64-3.0.3.tgz#19edf7cdc2e7063ee328403c1d895a86dd28f4bb" - integrity sha512-YxQL+ax0XqBJDZiKimS2XQaf+2wDGVa1enVRGzEvLLVFeqa5kx2bWbtcSXgsxjQB7nRqqIGFIcLteF/sHeVtQg== - -"@msgpackr-extract/msgpackr-extract-linux-arm@3.0.3": - version "3.0.3" - resolved "https://registry.yarnpkg.com/@msgpackr-extract/msgpackr-extract-linux-arm/-/msgpackr-extract-linux-arm-3.0.3.tgz#94fb0543ba2e28766c3fc439cabbe0440ae70159" - integrity sha512-fg0uy/dG/nZEXfYilKoRe7yALaNmHoYeIoJuJ7KJ+YyU2bvY8vPv27f7UKhGRpY6euFYqEVhxCFZgAUNQBM3nw== - -"@msgpackr-extract/msgpackr-extract-linux-x64@3.0.3": - version "3.0.3" - resolved "https://registry.yarnpkg.com/@msgpackr-extract/msgpackr-extract-linux-x64/-/msgpackr-extract-linux-x64-3.0.3.tgz#4a0609ab5fe44d07c9c60a11e4484d3c38bbd6e3" - integrity sha512-cvwNfbP07pKUfq1uH+S6KJ7dT9K8WOE4ZiAcsrSes+UY55E/0jLYc+vq+DO7jlmqRb5zAggExKm0H7O/CBaesg== - -"@msgpackr-extract/msgpackr-extract-win32-x64@3.0.3": - version "3.0.3" - resolved "https://registry.yarnpkg.com/@msgpackr-extract/msgpackr-extract-win32-x64/-/msgpackr-extract-win32-x64-3.0.3.tgz#0aa5502d547b57abfc4ac492de68e2006e417242" - integrity sha512-x0fWaQtYp4E6sktbsdAqnehxDgEc/VwM7uLsRCYWaiGu0ykYdZPiS8zCWdnjHwyiumousxfBm4SO31eXqwEZhQ== - "@mui/base@5.0.0-beta.40": version "5.0.0-beta.40" resolved "https://registry.yarnpkg.com/@mui/base/-/base-5.0.0-beta.40.tgz#1f8a782f1fbf3f84a961e954c8176b187de3dae2" @@ -3545,19 +2693,6 @@ clsx "^2.1.0" prop-types "^15.8.1" -"@mui/base@5.0.0-beta.40-1": - version "5.0.0-beta.40-1" - resolved "https://registry.yarnpkg.com/@mui/base/-/base-5.0.0-beta.40-1.tgz#6da6229e5e675e811f319149f6e29d7a77522851" - integrity sha512-agKXuNNy0bHUmeU7pNmoZwNFr7Hiyhojkb9+2PVyDG5+6RafYuyMgbrav8CndsB7KUc/U51JAw9vKNDLYBzaUA== - dependencies: - "@babel/runtime" "^7.23.9" - "@floating-ui/react-dom" "^2.0.8" - "@mui/types" "~7.2.15" - "@mui/utils" "^5.17.1" - "@popperjs/core" "^2.11.8" - clsx "^2.1.0" - prop-types "^15.8.1" - "@mui/core-downloads-tracker@^5.18.0": version "5.18.0" resolved "https://registry.yarnpkg.com/@mui/core-downloads-tracker/-/core-downloads-tracker-5.18.0.tgz#85019a8704b0f63305fc5600635ee663810f2b66" @@ -3568,7 +2703,7 @@ resolved "https://registry.yarnpkg.com/@mui/core-downloads-tracker/-/core-downloads-tracker-6.5.0.tgz#e9f7049d7e7bb1ee05839f7a0ce813755f137432" integrity sha512-LGb8t8i6M2ZtS3Drn3GbTI1DVhDY6FJ9crEey2lZ0aN2EMZo8IZBZj9wRf4vqbZHaWjsYgtbOnJw5V8UWbmK2Q== -"@mui/icons-material@^5.14.0", "@mui/icons-material@^5.16.11", "@mui/icons-material@^5.2.0", "@mui/icons-material@^5.5.0": +"@mui/icons-material@^5.16.11", "@mui/icons-material@^5.2.0": version "5.18.0" resolved "https://registry.yarnpkg.com/@mui/icons-material/-/icons-material-5.18.0.tgz#97d87f1b7bee5fa7b9ba844518631de3112c1e57" integrity sha512-1s0vEZj5XFXDMmz3Arl/R7IncFqJ+WQ95LDp1roHWGDE2oCO3IS4/hmiOv1/8SD9r6B7tv9GLiqVZYHo+6PkTg== @@ -3588,19 +2723,6 @@ clsx "^2.1.0" prop-types "^15.8.1" -"@mui/lab@^5.0.0-alpha.72": - version "5.0.0-alpha.177" - resolved "https://registry.yarnpkg.com/@mui/lab/-/lab-5.0.0-alpha.177.tgz#a02f43b36d7e204166706f2c27640f378e3d7c88" - integrity sha512-bdCxxtNjlWAgN9rtrwlmFydJ1qxA3IIbb6OlomGFsIXw0zGoHomLyjvh72q/R3yUAC0kvSef18cHY1UalLylyQ== - dependencies: - "@babel/runtime" "^7.23.9" - "@mui/base" "5.0.0-beta.40-1" - "@mui/system" "^5.18.0" - "@mui/types" "~7.2.15" - "@mui/utils" "^5.17.1" - clsx "^2.1.0" - prop-types "^15.8.1" - "@mui/material-nextjs@^6.1.9": version "6.5.0" resolved "https://registry.yarnpkg.com/@mui/material-nextjs/-/material-nextjs-6.5.0.tgz#740993e8175c27e4dd7bd8cec2c1a17e49081d5e" @@ -3608,7 +2730,7 @@ dependencies: "@babel/runtime" "^7.26.0" -"@mui/material@^5.0.1", "@mui/material@^5.14.0", "@mui/material@^5.2.2": +"@mui/material@^5.2.2": version "5.18.0" resolved "https://registry.yarnpkg.com/@mui/material/-/material-5.18.0.tgz#71e72d52338252edc6f8d9461e04fdf0d61905cd" integrity sha512-bbH/HaJZpFtXGvWg3TsBWG4eyt3gah3E7nCNU8GLyRjVoWcA91Vm/T+sjHfUcwgJSw9iLtucfHBoq+qW/T30aA== @@ -3685,7 +2807,7 @@ csstype "^3.1.3" prop-types "^15.8.1" -"@mui/styles@^5.0.1", "@mui/styles@^5.2.2": +"@mui/styles@^5.2.2": version "5.18.0" resolved "https://registry.yarnpkg.com/@mui/styles/-/styles-5.18.0.tgz#e70330282e2c64880cc5f36f3fd9fa94257177d5" integrity sha512-GDgFUfl2MMN8iGrYTuhJ0hHRoja2kVOlXnHb5d3BBQCHFxOBaAPDKQxaNkoAwRf/vBhhwXWDsJA2XlkNHUPBgA== @@ -4203,64 +3325,15 @@ resolved "https://registry.yarnpkg.com/@nymproject/contract-clients/-/contract-clients-1.4.1.tgz#ae2644387b518eb13e8825fa8021d4c81ffe7852" integrity sha512-HuJZ4Hv+Rl6ZZEtCHKgurNLJapM+QQRJlGkevFH2a4UdqUqF9omUkUi3AVes4679dPoSFgvA7plyVSDBdbgV6w== -"@nymproject/contract-clients@file:sdk/typescript/codegen/contract-clients": - version "1.3.0-rc.0" +"@nymproject/mix-fetch@>=1.4.1-rc1 || ^1": + version "1.4.1" + resolved "https://registry.yarnpkg.com/@nymproject/mix-fetch/-/mix-fetch-1.4.1.tgz#6a923b40e09c4a571fb947297a3afd41cd2d5ea6" + integrity sha512-FN5UeCkje6fauCt2pd8kFGFYXj2kaNewEJVKRLWzI2/suxD+J2bmg/YvXBGLWMWglXNA3+YFHA/1Vjh6OGtgig== -"@nymproject/mix-fetch-node-commonjs@^1.2.1-rc.2": - version "1.2.3" - resolved "https://registry.yarnpkg.com/@nymproject/mix-fetch-node-commonjs/-/mix-fetch-node-commonjs-1.2.3.tgz#9c917cafb6c3d0dcc87a427e1d1c7193a12fb986" - integrity sha512-3U4XGWExDcG6J1RO57zvdqlWEtN5JO5ZQO2L+cBlJIWLJPo/tbNkgp1yT3Yp25AiVqXMFzyTByn6kMsAPASD0A== - -"@nymproject/mix-fetch-wasm-node@>=1.2.4-rc.2 || ^1": - version "1.2.3" - resolved "https://registry.yarnpkg.com/@nymproject/mix-fetch-wasm-node/-/mix-fetch-wasm-node-1.2.3.tgz#f600df714782e6eb691faa14683e44c2507a8e53" - integrity sha512-J9mj52WSpsGpuCeW65zEj8RWJ3GvWG0VqVWIDD6w1RK4SesXiGb7ghD7F1rChRMlSbl9rP9reYkmAHz63Sb6Cw== - -"@nymproject/mix-fetch-wasm@>=1.2.4-rc.2 || ^1": - version "1.2.3" - resolved "https://registry.yarnpkg.com/@nymproject/mix-fetch-wasm/-/mix-fetch-wasm-1.2.3.tgz#5ac168896483331bcbe342738534dd8b1da4364f" - integrity sha512-LQ19t2MmaV2kaPXjzXYbLn0KCIdn4G1UWDE8p+oS2MI0cxw5cdwrqAJu91NV6Bl/B7ViqHRZH+XqvlM/xG1iHQ== - -"@nymproject/mix-fetch@>=1.2.2-rc.0 || ^1": - version "1.2.3" - resolved "https://registry.yarnpkg.com/@nymproject/mix-fetch/-/mix-fetch-1.2.3.tgz#50eaf3243fc383758f3438fecf640650c722b641" - integrity sha512-SuzsO9p+DIXIwiBSLEXoYw8Dpmxjpc7MINE/2O2l9nHasUulYN4Ea1h8jJMX7i6jG0KSyqc5Hf5fFWxpLmUPyw== - -"@nymproject/node-tester@^1.2.3": - version "1.2.3" - resolved "https://registry.yarnpkg.com/@nymproject/node-tester/-/node-tester-1.2.3.tgz#79fbde8b69e2d1180eed897557c4610a1aa1038f" - integrity sha512-VDFdH2ddIcXXamwkMbeHA88Xa/S2iPWh9QxkFggppvHS1d6gmnNHAZxXm3Uuhx7pCpzKldA0OT7qohMg9GW9xg== - -"@nymproject/nym-client-wasm-node@>=1.2.4-rc.2 || ^1": - version "1.2.3" - resolved "https://registry.yarnpkg.com/@nymproject/nym-client-wasm-node/-/nym-client-wasm-node-1.2.3.tgz#e75e234714494fafffb86115cdee6759dcede366" - integrity sha512-fUGld4MJOgnvyqk5/KIpFePIXn8Nsl/7T/jh9a9WdTWntECnnJ/DBqoO+6NzDkyXaLYhByqR7reO8ZApNR0YCw== - -"@nymproject/nym-client-wasm@>=1.2.4-rc.2 || ^1": - version "1.2.3" - resolved "https://registry.yarnpkg.com/@nymproject/nym-client-wasm/-/nym-client-wasm-1.2.3.tgz#cf5f74dfa012befc3bd661867ba9c721955d70a5" - integrity sha512-EqUxOhgpGXKQs8oUCpezOvpt0d/g/kMzOcOBp8Z2/yTNFK8Zkf9qTmhecpR/gmMPeTRdtRq/YE1iQdeOTDW/MQ== - -"@nymproject/nym-node-tester-wasm@>=1.2.4-rc.2 || ^1": - version "1.2.3" - resolved "https://registry.yarnpkg.com/@nymproject/nym-node-tester-wasm/-/nym-node-tester-wasm-1.2.3.tgz#c7bfe705afca51bed59de22ed9c411c35e85ea6c" - integrity sha512-V6jomTQKEfFOeiht+nD/UzCUVouFrDLGBaYg+zXcISE4JE3Hg7dNKRXOMxImjdsb3gRGSZkPGtPGst6tKBKyHg== - -"@nymproject/sdk-react@file:sdk/typescript/packages/sdk-react": - version "1.4.0-rc.0" - dependencies: - "@nymproject/sdk" ">=1.2.2-rc.0 || ^1" - -"@nymproject/sdk@>=1.2.2-rc.0 || ^1": - version "1.2.3" - resolved "https://registry.yarnpkg.com/@nymproject/sdk/-/sdk-1.2.3.tgz#b7a0abc478b124a362a11960d16c62312153c823" - integrity sha512-HTxwTD1O4TT+C+Uz/JOmXmORnPen7R2upIxoYiohIDICt3OnhtOrMHHfIBRrq2dliKbysaKoxy19PJZRuJ4N+Q== - -"@nymproject/sdk@file:sdk/typescript/packages/sdk": - version "1.4.0-rc.0" - dependencies: - "@nymproject/nym-client-wasm" ">=1.2.4-rc.2 || ^1" - comlink "^4.3.1" +"@nymproject/node-tester@^1.3.1": + version "1.3.1" + resolved "https://registry.yarnpkg.com/@nymproject/node-tester/-/node-tester-1.3.1.tgz#605a82c4a3c251a45279043f20fef5583de6c84b" + integrity sha512-JDFsNF84737cynclIYu8y6/MawrLFSiauHeh3dlyJCnY0FBTBRxq/8tN/2QtuaJQf/CvtcfKRH5QoYnCmg+wpQ== "@octokit/auth-token@^3.0.0": version "3.0.4" @@ -4378,697 +3451,6 @@ dependencies: "@octokit/openapi-types" "^18.0.0" -"@parcel/bundler-default@2.16.0": - version "2.16.0" - resolved "https://registry.yarnpkg.com/@parcel/bundler-default/-/bundler-default-2.16.0.tgz#e4cad2143891f85a874e001736348a66b08d71c5" - integrity sha512-8kY+TUhir7qm+TgSMeMd8CP2PVoZjXamiZ8+mbXws4jKw6IrIVDQf8TkBZKGk7ncKJEteiX4ybbmiPjho8cHuA== - dependencies: - "@parcel/diagnostic" "2.16.0" - "@parcel/graph" "3.6.0" - "@parcel/plugin" "2.16.0" - "@parcel/rust" "2.16.0" - "@parcel/utils" "2.16.0" - nullthrows "^1.1.1" - -"@parcel/cache@2.16.0": - version "2.16.0" - resolved "https://registry.yarnpkg.com/@parcel/cache/-/cache-2.16.0.tgz#15d94f879167191736345f6838f17c4d6deab6f2" - integrity sha512-stBGOio+z2qjnSJNl1vJTNqjgLyzDFp+tUOKgaLJ8Vmn67jYccoGLTNApw2mhB3HtQuoz/5eudGHSvhqMpMyTg== - dependencies: - "@parcel/fs" "2.16.0" - "@parcel/logger" "2.16.0" - "@parcel/utils" "2.16.0" - lmdb "2.8.5" - -"@parcel/codeframe@2.16.0": - version "2.16.0" - resolved "https://registry.yarnpkg.com/@parcel/codeframe/-/codeframe-2.16.0.tgz#0e00004565f7a572fc6a1b42d3aa9e40852fa0f1" - integrity sha512-wXpHOOE5o0c55AiUMCwkIrVCFeJzBfZpjhn07WQUUk57gGts5R67bMsoeoizvBhI748l6iSU7rPZSSrXc8NoRg== - dependencies: - chalk "^4.1.2" - -"@parcel/compressor-raw@2.16.0": - version "2.16.0" - resolved "https://registry.yarnpkg.com/@parcel/compressor-raw/-/compressor-raw-2.16.0.tgz#7375f1e2e41605b55fdca491a8a5d4b4348507da" - integrity sha512-tl8/iCPlInfD3YLo1s/kA9/o7XdrYNBuGsAj4VOFqplH+2FINb48XPzp7Z4VGOB2q8qokt2gohTGfuNPGIX2pw== - dependencies: - "@parcel/plugin" "2.16.0" - -"@parcel/config-default@2.16.0": - version "2.16.0" - resolved "https://registry.yarnpkg.com/@parcel/config-default/-/config-default-2.16.0.tgz#fbebfe5176a839c8388a69a9d615ba8b3a714782" - integrity sha512-az5gWXyztHekV1Dpz3nNT3iz5SqHh2924XCb2w+VyNDtnLhLNQ+X7NJd0na+EbWd9KBJYEdVYDPVDy1bEei0lQ== - dependencies: - "@parcel/bundler-default" "2.16.0" - "@parcel/compressor-raw" "2.16.0" - "@parcel/namer-default" "2.16.0" - "@parcel/optimizer-css" "2.16.0" - "@parcel/optimizer-html" "2.16.0" - "@parcel/optimizer-image" "2.16.0" - "@parcel/optimizer-svg" "2.16.0" - "@parcel/optimizer-swc" "2.16.0" - "@parcel/packager-css" "2.16.0" - "@parcel/packager-html" "2.16.0" - "@parcel/packager-js" "2.16.0" - "@parcel/packager-raw" "2.16.0" - "@parcel/packager-svg" "2.16.0" - "@parcel/packager-wasm" "2.16.0" - "@parcel/reporter-dev-server" "2.16.0" - "@parcel/resolver-default" "2.16.0" - "@parcel/runtime-browser-hmr" "2.16.0" - "@parcel/runtime-js" "2.16.0" - "@parcel/runtime-rsc" "2.16.0" - "@parcel/runtime-service-worker" "2.16.0" - "@parcel/transformer-babel" "2.16.0" - "@parcel/transformer-css" "2.16.0" - "@parcel/transformer-html" "2.16.0" - "@parcel/transformer-image" "2.16.0" - "@parcel/transformer-js" "2.16.0" - "@parcel/transformer-json" "2.16.0" - "@parcel/transformer-node" "2.16.0" - "@parcel/transformer-postcss" "2.16.0" - "@parcel/transformer-posthtml" "2.16.0" - "@parcel/transformer-raw" "2.16.0" - "@parcel/transformer-react-refresh-wrap" "2.16.0" - "@parcel/transformer-svg" "2.16.0" - -"@parcel/core@2.16.0": - version "2.16.0" - resolved "https://registry.yarnpkg.com/@parcel/core/-/core-2.16.0.tgz#8704402887017e41754879174d2af65f94655f26" - integrity sha512-erH9GdLe8Boie0mCO8hXn8Qt/pCACsOFlKp8UHNMlPaizUtCDkCOQqwmSi+VyrJ3dMMCOc/qBwTSGAJaJE8/Kw== - dependencies: - "@mischnic/json-sourcemap" "^0.1.1" - "@parcel/cache" "2.16.0" - "@parcel/diagnostic" "2.16.0" - "@parcel/events" "2.16.0" - "@parcel/feature-flags" "2.16.0" - "@parcel/fs" "2.16.0" - "@parcel/graph" "3.6.0" - "@parcel/logger" "2.16.0" - "@parcel/package-manager" "2.16.0" - "@parcel/plugin" "2.16.0" - "@parcel/profiler" "2.16.0" - "@parcel/rust" "2.16.0" - "@parcel/source-map" "^2.1.1" - "@parcel/types" "2.16.0" - "@parcel/utils" "2.16.0" - "@parcel/workers" "2.16.0" - base-x "^3.0.11" - browserslist "^4.24.5" - clone "^2.1.2" - dotenv "^16.5.0" - dotenv-expand "^11.0.7" - json5 "^2.2.3" - msgpackr "^1.11.2" - nullthrows "^1.1.1" - semver "^7.7.1" - -"@parcel/diagnostic@2.16.0": - version "2.16.0" - resolved "https://registry.yarnpkg.com/@parcel/diagnostic/-/diagnostic-2.16.0.tgz#313e7a94ec0d2d856e604c96fa5c48c6b04fb0dc" - integrity sha512-z5MeMwFegaA23wseltLykVV9OxsKkY3BiEje/Dt7ttVivwNWFKHDuXB8vbZTDArUooixUH3s/RJhTFI46VJc2A== - dependencies: - "@mischnic/json-sourcemap" "^0.1.1" - nullthrows "^1.1.1" - -"@parcel/error-overlay@2.16.0": - version "2.16.0" - resolved "https://registry.yarnpkg.com/@parcel/error-overlay/-/error-overlay-2.16.0.tgz#66d50062f432bd8213b51615ecc778cecbf8f855" - integrity sha512-ZcXOZc548Tjms0z7uaE4iUKHul32CpX5dCnEdum9PExxCLNCCxm4JgoO+dWeZXjNQDi8Opz9N3GU4wnF7WVzhg== - -"@parcel/events@2.16.0": - version "2.16.0" - resolved "https://registry.yarnpkg.com/@parcel/events/-/events-2.16.0.tgz#a1f17bfa4402b84d732bd21b408a3d9ee1e968b3" - integrity sha512-PI7dryJLPYCe4jNzo7XWAzbUPUuD50Nd76GTdzaHhmcQfZnPrtWAu73UmP3yYqpbv97TtWSiCJyrJWPTDU/REA== - -"@parcel/feature-flags@2.16.0": - version "2.16.0" - resolved "https://registry.yarnpkg.com/@parcel/feature-flags/-/feature-flags-2.16.0.tgz#76e0bd00ef7faa7ebf1eb52ed41b08bb1b3637ea" - integrity sha512-GiRpLx0x8dZdWCpftk6OE0lp0Cc8oUyBssPiobigpSA8vgxrCz/zLbs83R/K70p+wPBb+ye4eEiR67+KCwcSXg== - -"@parcel/fs@2.16.0": - version "2.16.0" - resolved "https://registry.yarnpkg.com/@parcel/fs/-/fs-2.16.0.tgz#ea9c2c4ef90005fdb5ead69be596af489a9cb18e" - integrity sha512-nRp4BhJm1V8tPu68WjRvu5kbBjTwWXYzqwpGoWwHFmZQQ2J1/Ye28x1NY3awxSVGyXsEy2sEO4s7rLyd0EW2pA== - dependencies: - "@parcel/feature-flags" "2.16.0" - "@parcel/rust" "2.16.0" - "@parcel/types-internal" "2.16.0" - "@parcel/utils" "2.16.0" - "@parcel/watcher" "^2.0.7" - "@parcel/workers" "2.16.0" - -"@parcel/graph@3.6.0": - version "3.6.0" - resolved "https://registry.yarnpkg.com/@parcel/graph/-/graph-3.6.0.tgz#1211bdd7edf860bebc7e1d2aad9f54d15ae2bae4" - integrity sha512-ShxOzS0FdyXJ7gwit7CSPuQCbU0bXkB+kZyrXgj0UmgIDYDMYO02T+UIlH4AReEzqcZq3An+sDOx+UKRM8j8Uw== - dependencies: - "@parcel/feature-flags" "2.16.0" - nullthrows "^1.1.1" - -"@parcel/logger@2.16.0": - version "2.16.0" - resolved "https://registry.yarnpkg.com/@parcel/logger/-/logger-2.16.0.tgz#bde4615d869a581de5acd5ccec275456b3541a54" - integrity sha512-/K6UVVCtS1KOkH9xxuH9u2xV3348mb+Fb33K/OUs5wnpfmo0TtrzodjLyMpQG6KrofmYKSNzA5petp7+cf3aug== - dependencies: - "@parcel/diagnostic" "2.16.0" - "@parcel/events" "2.16.0" - -"@parcel/markdown-ansi@2.16.0": - version "2.16.0" - resolved "https://registry.yarnpkg.com/@parcel/markdown-ansi/-/markdown-ansi-2.16.0.tgz#37c9826a67390d6b0bb8d04091d8ce5b03d32629" - integrity sha512-NxlmF/JAmsq9Yf/8q2+WEHFkcQ/cDoVOUx6ETDM8icDaQ8kXJbZSKAMOWnsB1EF0757UST77kX9zw/V6tyXqnw== - dependencies: - chalk "^4.1.2" - -"@parcel/namer-default@2.16.0": - version "2.16.0" - resolved "https://registry.yarnpkg.com/@parcel/namer-default/-/namer-default-2.16.0.tgz#c4c6a6153b24722ae30a3dacdcecacd67ffc15ad" - integrity sha512-pRb6Bz32Xl65CZ1LzKAa8ADGyPyrJ724tq2IToqH5JQ8bFGNXF7Tg/qrv582CjHS5dJb/HB7LizfWaliHiG5DA== - dependencies: - "@parcel/diagnostic" "2.16.0" - "@parcel/plugin" "2.16.0" - nullthrows "^1.1.1" - -"@parcel/node-resolver-core@3.7.0": - version "3.7.0" - resolved "https://registry.yarnpkg.com/@parcel/node-resolver-core/-/node-resolver-core-3.7.0.tgz#ac76d222dc0a570ca142c4ee0c1d61a6f92104c9" - integrity sha512-YIK7wtjO7biRoXNRdFR0uSYPY0FwvCA77xlJCOTX1+jeACj8BPwLKOMFJKCA89pBr7iHyTNzZ3ppVGsX8flMag== - dependencies: - "@mischnic/json-sourcemap" "^0.1.1" - "@parcel/diagnostic" "2.16.0" - "@parcel/fs" "2.16.0" - "@parcel/rust" "2.16.0" - "@parcel/utils" "2.16.0" - nullthrows "^1.1.1" - semver "^7.7.1" - -"@parcel/optimizer-css@2.16.0": - version "2.16.0" - resolved "https://registry.yarnpkg.com/@parcel/optimizer-css/-/optimizer-css-2.16.0.tgz#63b3ffe09da5ed17875d816efb1635994b4c3eef" - integrity sha512-QTrMOVknU4DmKzmnTxQx69ZZxoDYyTIWhpflDLSvUaLSXk2yi0SMBMcsEdA0W4bhORn6nj8toGwi04vbGVuQtA== - dependencies: - "@parcel/diagnostic" "2.16.0" - "@parcel/plugin" "2.16.0" - "@parcel/source-map" "^2.1.1" - "@parcel/utils" "2.16.0" - browserslist "^4.24.5" - lightningcss "^1.30.1" - nullthrows "^1.1.1" - -"@parcel/optimizer-html@2.16.0": - version "2.16.0" - resolved "https://registry.yarnpkg.com/@parcel/optimizer-html/-/optimizer-html-2.16.0.tgz#36d99ba3d142996aa92711e12a388c2271f6fb4c" - integrity sha512-T8VvsdCwLb/l3a/eHF2lJfeGO6Z4znKjvnBAvtyLwtFVVNnJasJLo9Cuan4bcnVM8etzbxjg1Qs/9c1hzWsBYg== - dependencies: - "@parcel/plugin" "2.16.0" - "@parcel/rust" "2.16.0" - "@parcel/utils" "2.16.0" - -"@parcel/optimizer-image@2.16.0": - version "2.16.0" - resolved "https://registry.yarnpkg.com/@parcel/optimizer-image/-/optimizer-image-2.16.0.tgz#38ebe9e2ce12cb14b352692185dcde1884bf260f" - integrity sha512-CVAitXbtKfVxxmOjieeI/YSwSFKx+In3MjP4jFpuYwgDT0TsgsyweBkADQMfEcBjeIPiCXLzzf/GSVIDY7hgwA== - dependencies: - "@parcel/diagnostic" "2.16.0" - "@parcel/plugin" "2.16.0" - "@parcel/rust" "2.16.0" - "@parcel/utils" "2.16.0" - "@parcel/workers" "2.16.0" - -"@parcel/optimizer-svg@2.16.0": - version "2.16.0" - resolved "https://registry.yarnpkg.com/@parcel/optimizer-svg/-/optimizer-svg-2.16.0.tgz#cc313395043e5e701a949230583e52c8d8f6072f" - integrity sha512-fx9VK28bXaFz0dWs3rIOQM0t8nAWXE62o4JIcIAZND5/6ij1y4/Fap791agvH4SKxNPFu/a/KEmF50SRfcSwkw== - dependencies: - "@parcel/plugin" "2.16.0" - "@parcel/rust" "2.16.0" - "@parcel/utils" "2.16.0" - -"@parcel/optimizer-swc@2.16.0": - version "2.16.0" - resolved "https://registry.yarnpkg.com/@parcel/optimizer-swc/-/optimizer-swc-2.16.0.tgz#c002218c319f209d22ebd91490bcad6caefe27b7" - integrity sha512-AwakRkMBzDWNrXbm5eJtuBvjCSyp6J730MCltZtiSWLtFbvkXMCt1BQ6Ug91NHq/zA2HTo3RYh96wTMRSRQa2w== - dependencies: - "@parcel/diagnostic" "2.16.0" - "@parcel/plugin" "2.16.0" - "@parcel/source-map" "^2.1.1" - "@parcel/utils" "2.16.0" - "@swc/core" "^1.11.24" - nullthrows "^1.1.1" - -"@parcel/package-manager@2.16.0": - version "2.16.0" - resolved "https://registry.yarnpkg.com/@parcel/package-manager/-/package-manager-2.16.0.tgz#0d7f21a9a6e920753858703123217047aef56f8a" - integrity sha512-YDOLTcDFYJn3VeEYktO8Yrpw+kaWsLGHOUhPPrw3uaQsqNPi4wIRMsuhcFa9fAL5OlFX56I9iD/yciUiULOFXw== - dependencies: - "@parcel/diagnostic" "2.16.0" - "@parcel/fs" "2.16.0" - "@parcel/logger" "2.16.0" - "@parcel/node-resolver-core" "3.7.0" - "@parcel/types" "2.16.0" - "@parcel/utils" "2.16.0" - "@parcel/workers" "2.16.0" - "@swc/core" "^1.11.24" - semver "^7.7.1" - -"@parcel/packager-css@2.16.0": - version "2.16.0" - resolved "https://registry.yarnpkg.com/@parcel/packager-css/-/packager-css-2.16.0.tgz#92f1228770750e9798e08e6cd880cc8f4c7b36c7" - integrity sha512-T36uCm/RUZ6h33O8NsjOoTH0if/FWyXuBWenVeQgQZrlYR+wZBsZSV8CElBMCmrFJ5BdSG1RybXPwvkATpJeig== - dependencies: - "@parcel/diagnostic" "2.16.0" - "@parcel/plugin" "2.16.0" - "@parcel/source-map" "^2.1.1" - "@parcel/utils" "2.16.0" - lightningcss "^1.30.1" - nullthrows "^1.1.1" - -"@parcel/packager-html@2.16.0": - version "2.16.0" - resolved "https://registry.yarnpkg.com/@parcel/packager-html/-/packager-html-2.16.0.tgz#70d453adfb3aaaf9a0d0504aec275ad7b97d34a6" - integrity sha512-d9NBtvJAGM8shnLfwDwF0VMP5P2F5Euvjbrv4FaqbivypzDBhjalE+EnC6eGtLNTCTg9o1CxxZmsTC/FVdu2yQ== - dependencies: - "@parcel/plugin" "2.16.0" - "@parcel/rust" "2.16.0" - "@parcel/types" "2.16.0" - "@parcel/utils" "2.16.0" - -"@parcel/packager-js@2.16.0": - version "2.16.0" - resolved "https://registry.yarnpkg.com/@parcel/packager-js/-/packager-js-2.16.0.tgz#3e72d4adc1906ea09c17e9f15cad64a6b6594294" - integrity sha512-2YHeFFFsh8KSqlfMfGVlAsDjwHZkGp99GRN+WnGAHlYzmDODve92yb94d5Zs22cDRzP6v/E5NMTYWu1dlUg/Wg== - dependencies: - "@parcel/diagnostic" "2.16.0" - "@parcel/plugin" "2.16.0" - "@parcel/rust" "2.16.0" - "@parcel/source-map" "^2.1.1" - "@parcel/types" "2.16.0" - "@parcel/utils" "2.16.0" - globals "^13.24.0" - nullthrows "^1.1.1" - -"@parcel/packager-raw@2.16.0": - version "2.16.0" - resolved "https://registry.yarnpkg.com/@parcel/packager-raw/-/packager-raw-2.16.0.tgz#07e6c36c9ca05cde02a45f2fa4b943355c418593" - integrity sha512-jY/t/PXpNTK6EwLBSTJPGTB8FYmhqHtj4Am/JVQkJkxgB8h8diivxsReZYNfDt9J9pVxSk+lcZCdOZXf1ZtmWw== - dependencies: - "@parcel/plugin" "2.16.0" - -"@parcel/packager-svg@2.16.0": - version "2.16.0" - resolved "https://registry.yarnpkg.com/@parcel/packager-svg/-/packager-svg-2.16.0.tgz#a5ba481921c91af0acb4a79eda6dbe199aabb37c" - integrity sha512-NVmpVjRe2Lr7htrxsscy4ExSRUN+YiMvPmxp9ZxoDnrGerqa66B5/Rh7HOhx7Vo9wuH5LCpFAWYhgkhXH6qrqQ== - dependencies: - "@parcel/plugin" "2.16.0" - "@parcel/rust" "2.16.0" - "@parcel/types" "2.16.0" - "@parcel/utils" "2.16.0" - -"@parcel/packager-wasm@2.16.0": - version "2.16.0" - resolved "https://registry.yarnpkg.com/@parcel/packager-wasm/-/packager-wasm-2.16.0.tgz#ad9deee4869eeaa647c27391ac61eefe44f9b743" - integrity sha512-r+oCqaFfUB1f6CEQyWbkAjwfGrt2flNA3JguBJ8zCyDrx3fWI+isYufg2CP92ZJyOBTIU63iCi88YgcMLynL1g== - dependencies: - "@parcel/plugin" "2.16.0" - -"@parcel/plugin@2.16.0": - version "2.16.0" - resolved "https://registry.yarnpkg.com/@parcel/plugin/-/plugin-2.16.0.tgz#7e80d2c5d562daf7a938f1006d4f2d34498bc0c8" - integrity sha512-Rdk5e/VGmMp6s2DmC0AbjWYmea3Vv8Tx1SC5ln+lf+qRlhndrbFV9o5QKirTY9C8GWd20qH1ZqOxPDEzK/YSGA== - dependencies: - "@parcel/types" "2.16.0" - -"@parcel/profiler@2.16.0": - version "2.16.0" - resolved "https://registry.yarnpkg.com/@parcel/profiler/-/profiler-2.16.0.tgz#a408e9fd38ddcfaeec258e5cc77850a029859386" - integrity sha512-xm6fVTA1V/Co7JuJfkNtZJsKsvq0RSpoE7JjiNtKLCMh+Lim6w7dxc6CEBqGImhR/9YbwteY6/gVFwkvCdLvLg== - dependencies: - "@parcel/diagnostic" "2.16.0" - "@parcel/events" "2.16.0" - "@parcel/types-internal" "2.16.0" - chrome-trace-event "^1.0.2" - -"@parcel/reporter-cli@2.16.0": - version "2.16.0" - resolved "https://registry.yarnpkg.com/@parcel/reporter-cli/-/reporter-cli-2.16.0.tgz#603ad4287646cf1b6c8603648baf9bf4e15c5769" - integrity sha512-76U06/aSGTO8UTEBJb+tIvNAH/2aOfWVTsP4QQym//Lf8fmXJnLaCDsJmiNAXjW44rnzjNQ7qzRrbwH7W5u7FA== - dependencies: - "@parcel/plugin" "2.16.0" - "@parcel/types" "2.16.0" - "@parcel/utils" "2.16.0" - chalk "^4.1.2" - term-size "^2.2.1" - -"@parcel/reporter-dev-server@2.16.0": - version "2.16.0" - resolved "https://registry.yarnpkg.com/@parcel/reporter-dev-server/-/reporter-dev-server-2.16.0.tgz#3838fcce3aaa32ad0fa03f7475f5a044354dbbb7" - integrity sha512-n5XXh1S/oMQ8ItSm/nG5sPFb+1WBZPGtvDUd8gxvmO8lfZ7fo53l0TS5KshMvNqx0F208Erwi+/II78piqCrYA== - dependencies: - "@parcel/codeframe" "2.16.0" - "@parcel/plugin" "2.16.0" - "@parcel/source-map" "^2.1.1" - "@parcel/utils" "2.16.0" - -"@parcel/reporter-tracer@2.16.0": - version "2.16.0" - resolved "https://registry.yarnpkg.com/@parcel/reporter-tracer/-/reporter-tracer-2.16.0.tgz#7814324c53d664b26f042921db3a2d3aed6c03e8" - integrity sha512-OHNQiz9c2F7nak8ztkuK+9ui9e5f9Qz5uEYPNHssyEIj4zLeenhnFEVSzUVXJdrqY0A3+xE8bFuQLi+PS+nbFQ== - dependencies: - "@parcel/plugin" "2.16.0" - "@parcel/utils" "2.16.0" - chrome-trace-event "^1.0.3" - nullthrows "^1.1.1" - -"@parcel/resolver-default@2.16.0": - version "2.16.0" - resolved "https://registry.yarnpkg.com/@parcel/resolver-default/-/resolver-default-2.16.0.tgz#10f39144bfdf5f08890ac0f64998e91bd63706b7" - integrity sha512-HvzVXPn8j/ElbNkqAHa7wHOzqCWTwAEv4pWJVnguuqL9m7ZC2INDsp3XJR1LOA5UqBYRhkBrvWK69v4sA21a9w== - dependencies: - "@parcel/node-resolver-core" "3.7.0" - "@parcel/plugin" "2.16.0" - -"@parcel/runtime-browser-hmr@2.16.0": - version "2.16.0" - resolved "https://registry.yarnpkg.com/@parcel/runtime-browser-hmr/-/runtime-browser-hmr-2.16.0.tgz#a79605f93345ee193dce83c267577ad456501bc4" - integrity sha512-tRPoFwUVtzE7ufOtIr1CHdh8SH3772FI1JlFCV0//tEWbj9iSk1bcK0g05Yj4dW4hW2SjqTcVo59Kw50Zeh7/Q== - dependencies: - "@parcel/plugin" "2.16.0" - "@parcel/utils" "2.16.0" - -"@parcel/runtime-js@2.16.0": - version "2.16.0" - resolved "https://registry.yarnpkg.com/@parcel/runtime-js/-/runtime-js-2.16.0.tgz#aabed946200721af85a47381a2e6f7736733b396" - integrity sha512-othbtwC7AG3SnDkzGpRXEwsY2/+INydJXSORogTEN/GSUQyci606pTfuU/eF9D22wVDdaVSYUhhJPTDdxksu9w== - dependencies: - "@parcel/diagnostic" "2.16.0" - "@parcel/plugin" "2.16.0" - "@parcel/utils" "2.16.0" - nullthrows "^1.1.1" - -"@parcel/runtime-rsc@2.16.0": - version "2.16.0" - resolved "https://registry.yarnpkg.com/@parcel/runtime-rsc/-/runtime-rsc-2.16.0.tgz#f24378eda61b16b00b0fda1ca632ac3f3a5b4d4c" - integrity sha512-5T+mNRrsA9zxkbdaV4rxqRc7CJP77/oNpajDPWcBWDELM8q42be0Sr5zYoAG28jcnQBf88u2rqPVpNtNxoM/ZA== - dependencies: - "@parcel/plugin" "2.16.0" - "@parcel/rust" "2.16.0" - "@parcel/utils" "2.16.0" - nullthrows "^1.1.1" - -"@parcel/runtime-service-worker@2.16.0": - version "2.16.0" - resolved "https://registry.yarnpkg.com/@parcel/runtime-service-worker/-/runtime-service-worker-2.16.0.tgz#ddf3546faa1ef5ab235d2efc5d1686f4c6f37376" - integrity sha512-YOkWJbY08IiUXUSudPwJXJKn7CycTCSzsfbhdG+bhvVdPWGv7DpMoPDSq3IL9/99JZe7iXcOnibxCmoJqZA6WQ== - dependencies: - "@parcel/plugin" "2.16.0" - "@parcel/utils" "2.16.0" - nullthrows "^1.1.1" - -"@parcel/rust-darwin-arm64@2.16.0": - version "2.16.0" - resolved "https://registry.yarnpkg.com/@parcel/rust-darwin-arm64/-/rust-darwin-arm64-2.16.0.tgz#e624187ef241c4b3f9a41fc42f289d5de08ead3f" - integrity sha512-rdNl1jq34VflBzduQjcOH9SBJPW+Dy1w5XL7hQ5OEAOkRTP1/3mvh98iVYeB3e+RMjRNE/Ipn/rz2KXXku6e6g== - -"@parcel/rust-darwin-x64@2.16.0": - version "2.16.0" - resolved "https://registry.yarnpkg.com/@parcel/rust-darwin-x64/-/rust-darwin-x64-2.16.0.tgz#546f4a3d43f9fdda6331590c22d7681d90f29540" - integrity sha512-tozUnjBPfnCjk6HVZCUKNdgFWw4WsLRTJdnsTYBIERrfj858VN0rdOGlVesLFYNSUquoAO+aHtRdT/JqYW7ozA== - -"@parcel/rust-linux-arm-gnueabihf@2.16.0": - version "2.16.0" - resolved "https://registry.yarnpkg.com/@parcel/rust-linux-arm-gnueabihf/-/rust-linux-arm-gnueabihf-2.16.0.tgz#a1f63d5ef852d11b8a6053a287c33a2bb17e315a" - integrity sha512-FX/XrQm5BkLfHHBsUA1t7tYGTkNN4vr/t9ZuADUQCWng+m8g7BB78zWxkjoqayn5zTJAfjjQp42lSZzahtT59A== - -"@parcel/rust-linux-arm64-gnu@2.16.0": - version "2.16.0" - resolved "https://registry.yarnpkg.com/@parcel/rust-linux-arm64-gnu/-/rust-linux-arm64-gnu-2.16.0.tgz#b1e5e06491cf00e7a9e219e1e6975c7dd5480eda" - integrity sha512-zmnWuclEQDQMhbB8jQw9f1VbnSs6EB2RApg16qs5Co/dhZVozMwJngdkZ6mq5aW8ut+PKYrxIPcVsm7WtVOOfg== - -"@parcel/rust-linux-arm64-musl@2.16.0": - version "2.16.0" - resolved "https://registry.yarnpkg.com/@parcel/rust-linux-arm64-musl/-/rust-linux-arm64-musl-2.16.0.tgz#7d5b05708737ed24260fd5d1688c04ee1ccc240c" - integrity sha512-bL3PzFEg0azmdFaf34yHAXukk2MjNSuiITPVOj9Cq65qAk7lb4+9nuGIwrCMr1+R1yCamrL31GgG61qp0X97xg== - -"@parcel/rust-linux-x64-gnu@2.16.0": - version "2.16.0" - resolved "https://registry.yarnpkg.com/@parcel/rust-linux-x64-gnu/-/rust-linux-x64-gnu-2.16.0.tgz#329d85282dd7d26da89bd8c3737b263ca025b7c6" - integrity sha512-yvuDTyuhMtwZjB1xGFmCC/UsZjEpMTAanJHAVX9b+tJnn7ArG7Q75Az/JpZsru6KAXiTo1krI54vTE87zzwkIg== - -"@parcel/rust-linux-x64-musl@2.16.0": - version "2.16.0" - resolved "https://registry.yarnpkg.com/@parcel/rust-linux-x64-musl/-/rust-linux-x64-musl-2.16.0.tgz#868636e6c4b5f0e3ed9876a6b022f6bfcd72e9bc" - integrity sha512-0q6ESCVe9uHVuQWuEGGDMJwjezliTsEWMcqn7oeQoKXaZJZQpW0UAuzNcNmpiHmeJdifYT9XuxVOo/a8IgOXhg== - -"@parcel/rust-win32-x64-msvc@2.16.0": - version "2.16.0" - resolved "https://registry.yarnpkg.com/@parcel/rust-win32-x64-msvc/-/rust-win32-x64-msvc-2.16.0.tgz#9b623ee20e69c67c22b4148e1be6aaa7bd5fc428" - integrity sha512-IVWpXF1VY+Xgi6ylXaZttAF5+WjazPyxRJUZlC31taYwpfZ4LzmsV8NYlj5ehjTL8d28SKDBoAnOQJwDRe8z8Q== - -"@parcel/rust@2.16.0": - version "2.16.0" - resolved "https://registry.yarnpkg.com/@parcel/rust/-/rust-2.16.0.tgz#4a336bc826cf3a5cf97ad03897856ed7ec5e8a2b" - integrity sha512-9ZBiwCCm9OYa2f1rjkXtPUIa0qbKPmpdTqtNHC+5ieRxClvk+m/mxsO1Ag+GbNJrJ8qFYliL3Ha0ZK4d1BrVKw== - optionalDependencies: - "@parcel/rust-darwin-arm64" "2.16.0" - "@parcel/rust-darwin-x64" "2.16.0" - "@parcel/rust-linux-arm-gnueabihf" "2.16.0" - "@parcel/rust-linux-arm64-gnu" "2.16.0" - "@parcel/rust-linux-arm64-musl" "2.16.0" - "@parcel/rust-linux-x64-gnu" "2.16.0" - "@parcel/rust-linux-x64-musl" "2.16.0" - "@parcel/rust-win32-x64-msvc" "2.16.0" - -"@parcel/source-map@^2.1.1": - version "2.1.1" - resolved "https://registry.yarnpkg.com/@parcel/source-map/-/source-map-2.1.1.tgz#fb193b82dba6dd62cc7a76b326f57bb35000a782" - integrity sha512-Ejx1P/mj+kMjQb8/y5XxDUn4reGdr+WyKYloBljpppUy8gs42T+BNoEOuRYqDVdgPc6NxduzIDoJS9pOFfV5Ew== - dependencies: - detect-libc "^1.0.3" - -"@parcel/transformer-babel@2.16.0": - version "2.16.0" - resolved "https://registry.yarnpkg.com/@parcel/transformer-babel/-/transformer-babel-2.16.0.tgz#18eaa7e8b0af0a83623b92b3a791e97c2e18ff3f" - integrity sha512-jlaFyGlRKFbAI8370bcuEzmsZENqdw9ATCowpB/XkKgUlYe6iplMlKLy4EquqSR6axqfxBRMoSCcKFkROuLI9g== - dependencies: - "@parcel/diagnostic" "2.16.0" - "@parcel/plugin" "2.16.0" - "@parcel/source-map" "^2.1.1" - "@parcel/utils" "2.16.0" - browserslist "^4.24.5" - json5 "^2.2.3" - nullthrows "^1.1.1" - semver "^7.7.1" - -"@parcel/transformer-css@2.16.0": - version "2.16.0" - resolved "https://registry.yarnpkg.com/@parcel/transformer-css/-/transformer-css-2.16.0.tgz#a42c87f03dc194bc813fb3ecf584f570c3ee7bec" - integrity sha512-WSUITzJl2/2uU04WnCLAwhZJ8RAaRvNQ64fMr4LauWa72gzqXgh3+1egddBiAT7e5IndVJ0AYFywLBVegwKOOA== - dependencies: - "@parcel/diagnostic" "2.16.0" - "@parcel/plugin" "2.16.0" - "@parcel/source-map" "^2.1.1" - "@parcel/utils" "2.16.0" - browserslist "^4.24.5" - lightningcss "^1.30.1" - nullthrows "^1.1.1" - -"@parcel/transformer-html@2.16.0": - version "2.16.0" - resolved "https://registry.yarnpkg.com/@parcel/transformer-html/-/transformer-html-2.16.0.tgz#c09d9852da4a1b6cfaeb1ac9ed2462680c242a81" - integrity sha512-CKAoB5yOovL3GyZlnm7lRUa3IfaSS/bEjjTy6F6RU7G4sMRgJu16AQfI4/uTJAA6iuW1ugNyza2DhWQ9xfbhaw== - dependencies: - "@parcel/diagnostic" "2.16.0" - "@parcel/plugin" "2.16.0" - "@parcel/rust" "2.16.0" - -"@parcel/transformer-image@2.16.0": - version "2.16.0" - resolved "https://registry.yarnpkg.com/@parcel/transformer-image/-/transformer-image-2.16.0.tgz#0f863bf9328464eb04d766cb3dded83f9e1975b9" - integrity sha512-sW4CM6P2YMUyAICCMocTLvVVqnxmlBwkP+SrIZvNElDUu0CygOa92cA3rdepHi+tF1GN6ZvNwNyQbZGAIKVxgw== - dependencies: - "@parcel/plugin" "2.16.0" - "@parcel/utils" "2.16.0" - "@parcel/workers" "2.16.0" - nullthrows "^1.1.1" - -"@parcel/transformer-js@2.16.0": - version "2.16.0" - resolved "https://registry.yarnpkg.com/@parcel/transformer-js/-/transformer-js-2.16.0.tgz#eb7e210e382b1950cf41e3ed8c580e380fe8a494" - integrity sha512-VRTFEJ/N13MFvwJPwilPET6gHJ0ZdFbCK26uO7uyL1eMGMvWStTXEQXvhLqtMfvDcQPnwkF5XGJL5JsGpcBFFA== - dependencies: - "@parcel/diagnostic" "2.16.0" - "@parcel/plugin" "2.16.0" - "@parcel/rust" "2.16.0" - "@parcel/source-map" "^2.1.1" - "@parcel/utils" "2.16.0" - "@parcel/workers" "2.16.0" - "@swc/helpers" "^0.5.0" - browserslist "^4.24.5" - nullthrows "^1.1.1" - regenerator-runtime "^0.14.1" - semver "^7.7.1" - -"@parcel/transformer-json@2.16.0": - version "2.16.0" - resolved "https://registry.yarnpkg.com/@parcel/transformer-json/-/transformer-json-2.16.0.tgz#e176541ec5910926e5e2731f9104ed169f871287" - integrity sha512-qX6Zg+j7HezY+W2TNjJ+VPUsIviNdTuMn39W9M0YEd0WLKh0x7XD4oprVivvgD0Vbm04FUcTQEN1jAF3CAVeGw== - dependencies: - "@parcel/plugin" "2.16.0" - json5 "^2.2.3" - -"@parcel/transformer-node@2.16.0": - version "2.16.0" - resolved "https://registry.yarnpkg.com/@parcel/transformer-node/-/transformer-node-2.16.0.tgz#9e2c32ea9f9e1ca14e4cbdedd2404b3f2c5254b5" - integrity sha512-Mavmjj6SfP0Lhu751G47EFtExZIJyD+V2C5PzdATTaT+cw0MzQgfLH8s4p0CI27MAuyFesm8WTA0lgUtcfzMSw== - dependencies: - "@parcel/plugin" "2.16.0" - -"@parcel/transformer-postcss@2.16.0": - version "2.16.0" - resolved "https://registry.yarnpkg.com/@parcel/transformer-postcss/-/transformer-postcss-2.16.0.tgz#48d6da4394198091b5a530d8661e630e9f78907e" - integrity sha512-h+Qnn49UE5RywpuXMHN8Iufjvc7MMqHQc0sPNvwoLBXJXJcb3ul7WEY+DGXs90KsUY1B6JAqKtz9+pzqXZMwIg== - dependencies: - "@parcel/diagnostic" "2.16.0" - "@parcel/plugin" "2.16.0" - "@parcel/rust" "2.16.0" - "@parcel/utils" "2.16.0" - clone "^2.1.2" - nullthrows "^1.1.1" - postcss-value-parser "^4.2.0" - semver "^7.7.1" - -"@parcel/transformer-posthtml@2.16.0": - version "2.16.0" - resolved "https://registry.yarnpkg.com/@parcel/transformer-posthtml/-/transformer-posthtml-2.16.0.tgz#bf624b578d7e877c724c0930aa299ec757641c44" - integrity sha512-mvHQNzFO1xPq+/7McjxF7+Zb2zAgksNbSXKi8/OuMRiNO3eDD/r1jWRWKNQZHWUkSx/vS7JJ5Y1ACI5INLxWww== - dependencies: - "@parcel/plugin" "2.16.0" - "@parcel/utils" "2.16.0" - -"@parcel/transformer-raw@2.16.0": - version "2.16.0" - resolved "https://registry.yarnpkg.com/@parcel/transformer-raw/-/transformer-raw-2.16.0.tgz#757546aeb0d50a2727a46c6f85cc7d0b6a50072c" - integrity sha512-LJXwH2rQAo6mOU6uG0IGQIN7KLC2sS8bl6aqf1YMcKk6ZEvylQkP0hUvRYja2IRzPoxjpdcAP5WC4e/Z8S1Vzg== - dependencies: - "@parcel/plugin" "2.16.0" - -"@parcel/transformer-react-refresh-wrap@2.16.0": - version "2.16.0" - resolved "https://registry.yarnpkg.com/@parcel/transformer-react-refresh-wrap/-/transformer-react-refresh-wrap-2.16.0.tgz#8c14c7dbdfaf528c9ebd71a4d077142c5626e2d7" - integrity sha512-s6O5oJ0pUtZey6unI0mz2WIOpAVLCn5+hlou4YH7FXOiMvSJ2PU2rakk+EZk6K/R+TStYM0hQKSwJkiiN0m7Rg== - dependencies: - "@parcel/error-overlay" "2.16.0" - "@parcel/plugin" "2.16.0" - "@parcel/utils" "2.16.0" - react-refresh "^0.16.0" - -"@parcel/transformer-svg@2.16.0": - version "2.16.0" - resolved "https://registry.yarnpkg.com/@parcel/transformer-svg/-/transformer-svg-2.16.0.tgz#f17e4905053de7a5b0b242e9317f70049aa39f76" - integrity sha512-c4KpIqqbsvsh/ZxLTo0d7/IEVa/jR/+LZ1kFzBWXKvMBzbvqo63J6s3VGk61gPFV9JkSW3UI5LAMbJn/HDXycw== - dependencies: - "@parcel/diagnostic" "2.16.0" - "@parcel/plugin" "2.16.0" - "@parcel/rust" "2.16.0" - -"@parcel/types-internal@2.16.0": - version "2.16.0" - resolved "https://registry.yarnpkg.com/@parcel/types-internal/-/types-internal-2.16.0.tgz#0476cfdcc80ab53bae0ab660ba1932e0c6943d0a" - integrity sha512-tibAjOY8iyMDzFp5B9jEZPfHYlNvXpw7/msUVebAE6gZ7A8ymWXG8YzMvin6gvWIVTCsYoOkkRsZARvpRcSspQ== - dependencies: - "@parcel/diagnostic" "2.16.0" - "@parcel/feature-flags" "2.16.0" - "@parcel/source-map" "^2.1.1" - utility-types "^3.11.0" - -"@parcel/types@2.16.0": - version "2.16.0" - resolved "https://registry.yarnpkg.com/@parcel/types/-/types-2.16.0.tgz#aa0877b3c3c4df2eed700f04238df0534c1d1ce2" - integrity sha512-EKsMTqqfiutQIiYKHEJHHeugIymPqM+D+CphhyewAIjxVLk6PTjEQW0ytIbbdOXGAgnK60OFiIKqZAxZ5Hf2dw== - dependencies: - "@parcel/types-internal" "2.16.0" - "@parcel/workers" "2.16.0" - -"@parcel/utils@2.16.0": - version "2.16.0" - resolved "https://registry.yarnpkg.com/@parcel/utils/-/utils-2.16.0.tgz#97fe4023cb68b915173379bf8da05ad1f81ae7f5" - integrity sha512-Jc5npvJ5T45goEIbDwsQKX3AtfhLIF2t6G496XhbjcH3aeFLrnIbg1iaitQWvgxdjrt73h8PPNphDkREZ/H7WA== - dependencies: - "@parcel/codeframe" "2.16.0" - "@parcel/diagnostic" "2.16.0" - "@parcel/logger" "2.16.0" - "@parcel/markdown-ansi" "2.16.0" - "@parcel/rust" "2.16.0" - "@parcel/source-map" "^2.1.1" - chalk "^4.1.2" - nullthrows "^1.1.1" - -"@parcel/watcher-android-arm64@2.5.1": - version "2.5.1" - resolved "https://registry.yarnpkg.com/@parcel/watcher-android-arm64/-/watcher-android-arm64-2.5.1.tgz#507f836d7e2042f798c7d07ad19c3546f9848ac1" - integrity sha512-KF8+j9nNbUN8vzOFDpRMsaKBHZ/mcjEjMToVMJOhTozkDonQFFrRcfdLWn6yWKCmJKmdVxSgHiYvTCef4/qcBA== - -"@parcel/watcher-darwin-arm64@2.5.1": - version "2.5.1" - resolved "https://registry.yarnpkg.com/@parcel/watcher-darwin-arm64/-/watcher-darwin-arm64-2.5.1.tgz#3d26dce38de6590ef79c47ec2c55793c06ad4f67" - integrity sha512-eAzPv5osDmZyBhou8PoF4i6RQXAfeKL9tjb3QzYuccXFMQU0ruIc/POh30ePnaOyD1UXdlKguHBmsTs53tVoPw== - -"@parcel/watcher-darwin-x64@2.5.1": - version "2.5.1" - resolved "https://registry.yarnpkg.com/@parcel/watcher-darwin-x64/-/watcher-darwin-x64-2.5.1.tgz#99f3af3869069ccf774e4ddfccf7e64fd2311ef8" - integrity sha512-1ZXDthrnNmwv10A0/3AJNZ9JGlzrF82i3gNQcWOzd7nJ8aj+ILyW1MTxVk35Db0u91oD5Nlk9MBiujMlwmeXZg== - -"@parcel/watcher-freebsd-x64@2.5.1": - version "2.5.1" - resolved "https://registry.yarnpkg.com/@parcel/watcher-freebsd-x64/-/watcher-freebsd-x64-2.5.1.tgz#14d6857741a9f51dfe51d5b08b7c8afdbc73ad9b" - integrity sha512-SI4eljM7Flp9yPuKi8W0ird8TI/JK6CSxju3NojVI6BjHsTyK7zxA9urjVjEKJ5MBYC+bLmMcbAWlZ+rFkLpJQ== - -"@parcel/watcher-linux-arm-glibc@2.5.1": - version "2.5.1" - resolved "https://registry.yarnpkg.com/@parcel/watcher-linux-arm-glibc/-/watcher-linux-arm-glibc-2.5.1.tgz#43c3246d6892381db473bb4f663229ad20b609a1" - integrity sha512-RCdZlEyTs8geyBkkcnPWvtXLY44BCeZKmGYRtSgtwwnHR4dxfHRG3gR99XdMEdQ7KeiDdasJwwvNSF5jKtDwdA== - -"@parcel/watcher-linux-arm-musl@2.5.1": - version "2.5.1" - resolved "https://registry.yarnpkg.com/@parcel/watcher-linux-arm-musl/-/watcher-linux-arm-musl-2.5.1.tgz#663750f7090bb6278d2210de643eb8a3f780d08e" - integrity sha512-6E+m/Mm1t1yhB8X412stiKFG3XykmgdIOqhjWj+VL8oHkKABfu/gjFj8DvLrYVHSBNC+/u5PeNrujiSQ1zwd1Q== - -"@parcel/watcher-linux-arm64-glibc@2.5.1": - version "2.5.1" - resolved "https://registry.yarnpkg.com/@parcel/watcher-linux-arm64-glibc/-/watcher-linux-arm64-glibc-2.5.1.tgz#ba60e1f56977f7e47cd7e31ad65d15fdcbd07e30" - integrity sha512-LrGp+f02yU3BN9A+DGuY3v3bmnFUggAITBGriZHUREfNEzZh/GO06FF5u2kx8x+GBEUYfyTGamol4j3m9ANe8w== - -"@parcel/watcher-linux-arm64-musl@2.5.1": - version "2.5.1" - resolved "https://registry.yarnpkg.com/@parcel/watcher-linux-arm64-musl/-/watcher-linux-arm64-musl-2.5.1.tgz#f7fbcdff2f04c526f96eac01f97419a6a99855d2" - integrity sha512-cFOjABi92pMYRXS7AcQv9/M1YuKRw8SZniCDw0ssQb/noPkRzA+HBDkwmyOJYp5wXcsTrhxO0zq1U11cK9jsFg== - -"@parcel/watcher-linux-x64-glibc@2.5.1": - version "2.5.1" - resolved "https://registry.yarnpkg.com/@parcel/watcher-linux-x64-glibc/-/watcher-linux-x64-glibc-2.5.1.tgz#4d2ea0f633eb1917d83d483392ce6181b6a92e4e" - integrity sha512-GcESn8NZySmfwlTsIur+49yDqSny2IhPeZfXunQi48DMugKeZ7uy1FX83pO0X22sHntJ4Ub+9k34XQCX+oHt2A== - -"@parcel/watcher-linux-x64-musl@2.5.1": - version "2.5.1" - resolved "https://registry.yarnpkg.com/@parcel/watcher-linux-x64-musl/-/watcher-linux-x64-musl-2.5.1.tgz#277b346b05db54f55657301dd77bdf99d63606ee" - integrity sha512-n0E2EQbatQ3bXhcH2D1XIAANAcTZkQICBPVaxMeaCVBtOpBZpWJuf7LwyWPSBDITb7In8mqQgJ7gH8CILCURXg== - -"@parcel/watcher-win32-arm64@2.5.1": - version "2.5.1" - resolved "https://registry.yarnpkg.com/@parcel/watcher-win32-arm64/-/watcher-win32-arm64-2.5.1.tgz#7e9e02a26784d47503de1d10e8eab6cceb524243" - integrity sha512-RFzklRvmc3PkjKjry3hLF9wD7ppR4AKcWNzH7kXR7GUe0Igb3Nz8fyPwtZCSquGrhU5HhUNDr/mKBqj7tqA2Vw== - -"@parcel/watcher-win32-ia32@2.5.1": - version "2.5.1" - resolved "https://registry.yarnpkg.com/@parcel/watcher-win32-ia32/-/watcher-win32-ia32-2.5.1.tgz#2d0f94fa59a873cdc584bf7f6b1dc628ddf976e6" - integrity sha512-c2KkcVN+NJmuA7CGlaGD1qJh1cLfDnQsHjE89E60vUEMlqduHGCdCLJCID5geFVM0dOtA3ZiIO8BoEQmzQVfpQ== - -"@parcel/watcher-win32-x64@2.5.1": - version "2.5.1" - resolved "https://registry.yarnpkg.com/@parcel/watcher-win32-x64/-/watcher-win32-x64-2.5.1.tgz#ae52693259664ba6f2228fa61d7ee44b64ea0947" - integrity sha512-9lHBdJITeNR++EvSQVUcaZoWupyHfXe1jZvGZ06O/5MflPcuPLtEphScIBL+AiCWBO46tDSHzWyD0uDmmZqsgA== - "@parcel/watcher@2.0.4": version "2.0.4" resolved "https://registry.yarnpkg.com/@parcel/watcher/-/watcher-2.0.4.tgz#f300fef4cc38008ff4b8c29d92588eced3ce014b" @@ -5077,42 +3459,6 @@ node-addon-api "^3.2.1" node-gyp-build "^4.3.0" -"@parcel/watcher@^2.0.7": - version "2.5.1" - resolved "https://registry.yarnpkg.com/@parcel/watcher/-/watcher-2.5.1.tgz#342507a9cfaaf172479a882309def1e991fb1200" - integrity sha512-dfUnCxiN9H4ap84DvD2ubjw+3vUNpstxa0TneY/Paat8a3R4uQZDLSvWjmznAY/DoahqTHl9V46HF/Zs3F29pg== - dependencies: - detect-libc "^1.0.3" - is-glob "^4.0.3" - micromatch "^4.0.5" - node-addon-api "^7.0.0" - optionalDependencies: - "@parcel/watcher-android-arm64" "2.5.1" - "@parcel/watcher-darwin-arm64" "2.5.1" - "@parcel/watcher-darwin-x64" "2.5.1" - "@parcel/watcher-freebsd-x64" "2.5.1" - "@parcel/watcher-linux-arm-glibc" "2.5.1" - "@parcel/watcher-linux-arm-musl" "2.5.1" - "@parcel/watcher-linux-arm64-glibc" "2.5.1" - "@parcel/watcher-linux-arm64-musl" "2.5.1" - "@parcel/watcher-linux-x64-glibc" "2.5.1" - "@parcel/watcher-linux-x64-musl" "2.5.1" - "@parcel/watcher-win32-arm64" "2.5.1" - "@parcel/watcher-win32-ia32" "2.5.1" - "@parcel/watcher-win32-x64" "2.5.1" - -"@parcel/workers@2.16.0": - version "2.16.0" - resolved "https://registry.yarnpkg.com/@parcel/workers/-/workers-2.16.0.tgz#bbc8d5a365a6001a7a51173667610cece65cb16c" - integrity sha512-JVdAtTWRONbP4X8Me1qRE5sMGIkSKAcUb8fZdjCUPJxsBwcJwzYicYFuahxVVGj2sYzjLi0TzlvmXMK7tVvffA== - dependencies: - "@parcel/diagnostic" "2.16.0" - "@parcel/logger" "2.16.0" - "@parcel/profiler" "2.16.0" - "@parcel/types-internal" "2.16.0" - "@parcel/utils" "2.16.0" - nullthrows "^1.1.1" - "@pkgjs/parseargs@^0.11.0": version "0.11.0" resolved "https://registry.yarnpkg.com/@pkgjs/parseargs/-/parseargs-0.11.0.tgz#a77ea742fab25775145434eb1d2328cf5013ac33" @@ -5189,323 +3535,294 @@ resolved "https://registry.yarnpkg.com/@protobufjs/utf8/-/utf8-1.1.0.tgz#a777360b5b39a1a2e5106f8e858f2fd2d060c570" integrity sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw== -"@pyramation/json-schema-ref-parser@9.0.6": - version "9.0.6" - resolved "https://registry.yarnpkg.com/@pyramation/json-schema-ref-parser/-/json-schema-ref-parser-9.0.6.tgz#556e416ce7dcc15a3c1afd04d6a059e03ed09aeb" - integrity sha512-L5kToHAEc1Q87R8ZwWFaNa4tPHr8Hnm+U+DRdUVq3tUtk+EX4pCqSd34Z6EMxNi/bjTzt1syAG9J2Oo1YFlqSg== +"@react-aria/breadcrumbs@^3.5.29": + version "3.5.29" + resolved "https://registry.yarnpkg.com/@react-aria/breadcrumbs/-/breadcrumbs-3.5.29.tgz#bfc1e953eccd7393bd457f1c9698a928142f0fc7" + integrity sha512-rKS0dryllaZJqrr3f/EAf2liz8CBEfmL5XACj+Z1TAig6GIYe1QuA3BtkX0cV9OkMugXdX8e3cbA7nD10ORRqg== dependencies: - "@jsdevtools/ono" "^7.1.3" - call-me-maybe "^1.0.1" - js-yaml "^3.13.1" - -"@pyramation/json-schema-to-typescript@ 11.0.4": - version "11.0.4" - resolved "https://registry.yarnpkg.com/@pyramation/json-schema-to-typescript/-/json-schema-to-typescript-11.0.4.tgz#959bdb631dad336e1fdbf608a9b5908ab0da1d6b" - integrity sha512-+aSzXDLhMHOEdV2cJ7Tjg/9YenjHU5BCmClVygzwxJZ1R16NOfEn7lTAwVzb/2jivOSnhjHzMJbnSf8b6rd1zg== - dependencies: - "@pyramation/json-schema-ref-parser" "9.0.6" - "@types/json-schema" "^7.0.11" - "@types/lodash" "^4.14.182" - "@types/prettier" "^2.6.1" - cli-color "^2.0.2" - get-stdin "^8.0.0" - glob "^7.1.6" - glob-promise "^4.2.2" - is-glob "^4.0.3" - lodash "^4.17.21" - minimist "^1.2.6" - mkdirp "^1.0.4" - mz "^2.7.0" - prettier "^2.6.2" - -"@react-aria/breadcrumbs@^3.5.28": - version "3.5.28" - resolved "https://registry.yarnpkg.com/@react-aria/breadcrumbs/-/breadcrumbs-3.5.28.tgz#746c769f1a2266d8b8a50494e25dc581579f70d9" - integrity sha512-6S3QelpajodEzN7bm49XXW5gGoZksK++cl191W0sexq/E5hZHAEA9+CFC8pL3px13ji7qHGqKAxOP4IUVBdVpQ== - dependencies: - "@react-aria/i18n" "^3.12.12" - "@react-aria/link" "^3.8.5" - "@react-aria/utils" "^3.30.1" - "@react-types/breadcrumbs" "^3.7.16" - "@react-types/shared" "^3.32.0" + "@react-aria/i18n" "^3.12.13" + "@react-aria/link" "^3.8.6" + "@react-aria/utils" "^3.31.0" + "@react-types/breadcrumbs" "^3.7.17" + "@react-types/shared" "^3.32.1" "@swc/helpers" "^0.5.0" -"@react-aria/button@^3.14.1": - version "3.14.1" - resolved "https://registry.yarnpkg.com/@react-aria/button/-/button-3.14.1.tgz#97475f770f0ad8fe928f2fa97227ef01f729901b" - integrity sha512-Ug06unKEYVG3OF6zKmpVR7VfLzpj7eJVuFo3TCUxwFJG7DI28pZi2TaGWnhm7qjkxfl1oz0avQiHVfDC99gSuw== +"@react-aria/button@^3.14.2": + version "3.14.2" + resolved "https://registry.yarnpkg.com/@react-aria/button/-/button-3.14.2.tgz#9dcd2fa53e7968a563b4898ace3360c85ccc22f5" + integrity sha512-VbLIA+Kd6f/MDjd+TJBUg2+vNDw66pnvsj2E4RLomjI9dfBuN7d+Yo2UnsqKVyhePjCUZ6xxa2yDuD63IOSIYA== dependencies: - "@react-aria/interactions" "^3.25.5" - "@react-aria/toolbar" "3.0.0-beta.20" - "@react-aria/utils" "^3.30.1" - "@react-stately/toggle" "^3.9.1" - "@react-types/button" "^3.14.0" - "@react-types/shared" "^3.32.0" + "@react-aria/interactions" "^3.25.6" + "@react-aria/toolbar" "3.0.0-beta.21" + "@react-aria/utils" "^3.31.0" + "@react-stately/toggle" "^3.9.2" + "@react-types/button" "^3.14.1" + "@react-types/shared" "^3.32.1" "@swc/helpers" "^0.5.0" -"@react-aria/calendar@^3.9.1": - version "3.9.1" - resolved "https://registry.yarnpkg.com/@react-aria/calendar/-/calendar-3.9.1.tgz#2b32284b33919571557ba8d220f5a889d1b118c5" - integrity sha512-dCJliRIi3x3VmAZkJDNTZddq0+QoUX9NS7GgdqPPYcJIMbVPbyLWL61//0SrcCr3MuSRCoI1eQZ8PkQe/2PJZQ== +"@react-aria/calendar@^3.9.2": + version "3.9.2" + resolved "https://registry.yarnpkg.com/@react-aria/calendar/-/calendar-3.9.2.tgz#4b6e428ee3fb81f5729cb80193b9d4ba9b26d5f1" + integrity sha512-uSLxLgOPRnEU4Jg59lAhUVA+uDx/55NBg4lpfsP2ynazyiJ5LCXmYceJi+VuOqMml7d9W0dB87OldOeLdIxYVA== dependencies: - "@internationalized/date" "^3.9.0" - "@react-aria/i18n" "^3.12.12" - "@react-aria/interactions" "^3.25.5" + "@internationalized/date" "^3.10.0" + "@react-aria/i18n" "^3.12.13" + "@react-aria/interactions" "^3.25.6" "@react-aria/live-announcer" "^3.4.4" - "@react-aria/utils" "^3.30.1" - "@react-stately/calendar" "^3.8.4" - "@react-types/button" "^3.14.0" - "@react-types/calendar" "^3.7.4" - "@react-types/shared" "^3.32.0" + "@react-aria/utils" "^3.31.0" + "@react-stately/calendar" "^3.9.0" + "@react-types/button" "^3.14.1" + "@react-types/calendar" "^3.8.0" + "@react-types/shared" "^3.32.1" "@swc/helpers" "^0.5.0" -"@react-aria/checkbox@^3.16.1": - version "3.16.1" - resolved "https://registry.yarnpkg.com/@react-aria/checkbox/-/checkbox-3.16.1.tgz#18e5b36e1e3c07358b0283d7696806e5fd7b57a5" - integrity sha512-YcG3QhuGIwqPHo4GVGVmwxPM5Ayq9CqYfZjla/KTfJILPquAJ12J7LSMpqS/Z5TlMNgIIqZ3ZdrYmjQlUY7eUg== +"@react-aria/checkbox@^3.16.2": + version "3.16.2" + resolved "https://registry.yarnpkg.com/@react-aria/checkbox/-/checkbox-3.16.2.tgz#b1a3310d327826fe354625c332f3b80acb025a39" + integrity sha512-29Mj9ZqXioJ0bcMnNGooHztnTau5pikZqX3qCRj5bYR3by/ZFFavYoMroh9F7s/MbFm/tsKX+Sf02lYFEdXRjA== dependencies: - "@react-aria/form" "^3.1.1" - "@react-aria/interactions" "^3.25.5" - "@react-aria/label" "^3.7.21" - "@react-aria/toggle" "^3.12.1" - "@react-aria/utils" "^3.30.1" - "@react-stately/checkbox" "^3.7.1" - "@react-stately/form" "^3.2.1" - "@react-stately/toggle" "^3.9.1" - "@react-types/checkbox" "^3.10.1" - "@react-types/shared" "^3.32.0" + "@react-aria/form" "^3.1.2" + "@react-aria/interactions" "^3.25.6" + "@react-aria/label" "^3.7.22" + "@react-aria/toggle" "^3.12.2" + "@react-aria/utils" "^3.31.0" + "@react-stately/checkbox" "^3.7.2" + "@react-stately/form" "^3.2.2" + "@react-stately/toggle" "^3.9.2" + "@react-types/checkbox" "^3.10.2" + "@react-types/shared" "^3.32.1" "@swc/helpers" "^0.5.0" -"@react-aria/color@^3.1.1": - version "3.1.1" - resolved "https://registry.yarnpkg.com/@react-aria/color/-/color-3.1.1.tgz#5d3e169e86a247cf78eb71e6344bebaf409dfb7a" - integrity sha512-4+woybtn4kh5ytggWQ06bqqWsoucOrxwNrwW1XP6EmvcjIcsfVW+VwFwM5ZYa2LGF+fHiW3dM4bjRqVa7i9PVg== +"@react-aria/color@^3.1.2": + version "3.1.2" + resolved "https://registry.yarnpkg.com/@react-aria/color/-/color-3.1.2.tgz#9ee2a86e4cf4622ca8ff78bddd34a2bf1bdcdd34" + integrity sha512-jCC+Q7rAQGLQBkHjkPAeDuGYuMbc4neifjlNRiyZ9as1z4gg63H8MteoWYYk6K4vCKKxSixgt8MfI29XWMOWPQ== dependencies: - "@react-aria/i18n" "^3.12.12" - "@react-aria/interactions" "^3.25.5" - "@react-aria/numberfield" "^3.12.1" - "@react-aria/slider" "^3.8.1" - "@react-aria/spinbutton" "^3.6.18" - "@react-aria/textfield" "^3.18.1" - "@react-aria/utils" "^3.30.1" - "@react-aria/visually-hidden" "^3.8.27" - "@react-stately/color" "^3.9.1" - "@react-stately/form" "^3.2.1" - "@react-types/color" "^3.1.1" - "@react-types/shared" "^3.32.0" + "@react-aria/i18n" "^3.12.13" + "@react-aria/interactions" "^3.25.6" + "@react-aria/numberfield" "^3.12.2" + "@react-aria/slider" "^3.8.2" + "@react-aria/spinbutton" "^3.6.19" + "@react-aria/textfield" "^3.18.2" + "@react-aria/utils" "^3.31.0" + "@react-aria/visually-hidden" "^3.8.28" + "@react-stately/color" "^3.9.2" + "@react-stately/form" "^3.2.2" + "@react-types/color" "^3.1.2" + "@react-types/shared" "^3.32.1" "@swc/helpers" "^0.5.0" -"@react-aria/combobox@^3.13.2": - version "3.13.2" - resolved "https://registry.yarnpkg.com/@react-aria/combobox/-/combobox-3.13.2.tgz#b309dc60f2918227dd52c551d9380a028de24cad" - integrity sha512-PNyqlaM19A+lKX9hwqkKTXvWDilCKaRH2RdrB/C5AfmGi3bh/IKsu66c8ohgadXB2AIdJB36EOOm3hNh8G9DqQ== +"@react-aria/combobox@^3.14.0": + version "3.14.0" + resolved "https://registry.yarnpkg.com/@react-aria/combobox/-/combobox-3.14.0.tgz#1e6c55a319d367d6a0a9e19f2bd68d3a9a0c8b9a" + integrity sha512-z4ro0Hma//p4nL2IJx5iUa7NwxeXbzSoZ0se5uTYjG1rUUMszg+wqQh/AQoL+eiULn7rs18JY9wwNbVIkRNKWA== dependencies: - "@react-aria/focus" "^3.21.1" - "@react-aria/i18n" "^3.12.12" - "@react-aria/listbox" "^3.14.8" + "@react-aria/focus" "^3.21.2" + "@react-aria/i18n" "^3.12.13" + "@react-aria/listbox" "^3.15.0" "@react-aria/live-announcer" "^3.4.4" - "@react-aria/menu" "^3.19.2" - "@react-aria/overlays" "^3.29.1" - "@react-aria/selection" "^3.25.1" - "@react-aria/textfield" "^3.18.1" - "@react-aria/utils" "^3.30.1" - "@react-stately/collections" "^3.12.7" - "@react-stately/combobox" "^3.11.1" - "@react-stately/form" "^3.2.1" - "@react-types/button" "^3.14.0" - "@react-types/combobox" "^3.13.8" - "@react-types/shared" "^3.32.0" + "@react-aria/menu" "^3.19.3" + "@react-aria/overlays" "^3.30.0" + "@react-aria/selection" "^3.26.0" + "@react-aria/textfield" "^3.18.2" + "@react-aria/utils" "^3.31.0" + "@react-stately/collections" "^3.12.8" + "@react-stately/combobox" "^3.12.0" + "@react-stately/form" "^3.2.2" + "@react-types/button" "^3.14.1" + "@react-types/combobox" "^3.13.9" + "@react-types/shared" "^3.32.1" "@swc/helpers" "^0.5.0" -"@react-aria/datepicker@^3.15.1": - version "3.15.1" - resolved "https://registry.yarnpkg.com/@react-aria/datepicker/-/datepicker-3.15.1.tgz#df128ee61bdfaabd24a387e22dcc24b4bf2f036f" - integrity sha512-RfUOvsupON6E5ZELpBgb9qxsilkbqwzsZ78iqCDTVio+5kc5G9jVeHEIQOyHnavi/TmJoAnbmmVpEbE6M9lYJQ== +"@react-aria/datepicker@^3.15.2": + version "3.15.2" + resolved "https://registry.yarnpkg.com/@react-aria/datepicker/-/datepicker-3.15.2.tgz#22bca8cfdd00e32a42f8e53b35e5ba7e886f047d" + integrity sha512-th078hyNqPf4P2K10su/y32zPDjs3lOYVdHvsL9/+5K1dnTvLHCK5vgUyLuyn8FchhF7cmHV49D+LZVv65PEpQ== dependencies: - "@internationalized/date" "^3.9.0" + "@internationalized/date" "^3.10.0" "@internationalized/number" "^3.6.5" "@internationalized/string" "^3.2.7" - "@react-aria/focus" "^3.21.1" - "@react-aria/form" "^3.1.1" - "@react-aria/i18n" "^3.12.12" - "@react-aria/interactions" "^3.25.5" - "@react-aria/label" "^3.7.21" - "@react-aria/spinbutton" "^3.6.18" - "@react-aria/utils" "^3.30.1" - "@react-stately/datepicker" "^3.15.1" - "@react-stately/form" "^3.2.1" - "@react-types/button" "^3.14.0" - "@react-types/calendar" "^3.7.4" - "@react-types/datepicker" "^3.13.1" - "@react-types/dialog" "^3.5.21" - "@react-types/shared" "^3.32.0" + "@react-aria/focus" "^3.21.2" + "@react-aria/form" "^3.1.2" + "@react-aria/i18n" "^3.12.13" + "@react-aria/interactions" "^3.25.6" + "@react-aria/label" "^3.7.22" + "@react-aria/spinbutton" "^3.6.19" + "@react-aria/utils" "^3.31.0" + "@react-stately/datepicker" "^3.15.2" + "@react-stately/form" "^3.2.2" + "@react-types/button" "^3.14.1" + "@react-types/calendar" "^3.8.0" + "@react-types/datepicker" "^3.13.2" + "@react-types/dialog" "^3.5.22" + "@react-types/shared" "^3.32.1" "@swc/helpers" "^0.5.0" -"@react-aria/dialog@^3.5.30": - version "3.5.30" - resolved "https://registry.yarnpkg.com/@react-aria/dialog/-/dialog-3.5.30.tgz#e7e7080dec37bf4e98cb98430b931d5bd7fa7c66" - integrity sha512-fiodaeMSTiC4qKNwnCLbNykyvfcxuz/PiU/pBNhWYd4lUrX1TauBQb0++o5/K6OHt8iB+A7/LSHRbPtyOSWE9g== +"@react-aria/dialog@^3.5.31": + version "3.5.31" + resolved "https://registry.yarnpkg.com/@react-aria/dialog/-/dialog-3.5.31.tgz#1c1682a89dd6a4c6bc7bb0e58ea78eb6f2750a65" + integrity sha512-inxQMyrzX0UBW9Mhraq0nZ4HjHdygQvllzloT1E/RlDd61lr3RbmJR6pLsrbKOTtSvDIBJpCso1xEdHCFNmA0Q== dependencies: - "@react-aria/interactions" "^3.25.5" - "@react-aria/overlays" "^3.29.1" - "@react-aria/utils" "^3.30.1" - "@react-types/dialog" "^3.5.21" - "@react-types/shared" "^3.32.0" + "@react-aria/interactions" "^3.25.6" + "@react-aria/overlays" "^3.30.0" + "@react-aria/utils" "^3.31.0" + "@react-types/dialog" "^3.5.22" + "@react-types/shared" "^3.32.1" "@swc/helpers" "^0.5.0" -"@react-aria/disclosure@^3.0.8": - version "3.0.8" - resolved "https://registry.yarnpkg.com/@react-aria/disclosure/-/disclosure-3.0.8.tgz#a5b2ed7eec552beab2c95241f7c91a1c9a1ff9bf" - integrity sha512-Q2v6czm3ViMTw7J+GCWdXw3rZ5Fgmy97gpSQjpEoxSyqA1UfpRRvNa+XYoXmbpaY1MGhtUX3m2GgZ4IuhhMHVQ== +"@react-aria/disclosure@^3.1.0": + version "3.1.0" + resolved "https://registry.yarnpkg.com/@react-aria/disclosure/-/disclosure-3.1.0.tgz#c08a0f9696fa80ca69de78f37c8bf0b65a7a9397" + integrity sha512-5996BeBpnj+yKXYysz+UuhFQxGFPvaZZ3zNBd052wz/i+TVFVGSqqYJ6cwZyO1AfBR8zOT0ZIiK4EC3ETwSvtQ== dependencies: "@react-aria/ssr" "^3.9.10" - "@react-aria/utils" "^3.30.1" - "@react-stately/disclosure" "^3.0.7" - "@react-types/button" "^3.14.0" + "@react-aria/utils" "^3.31.0" + "@react-stately/disclosure" "^3.0.8" + "@react-types/button" "^3.14.1" "@swc/helpers" "^0.5.0" -"@react-aria/dnd@^3.11.2": - version "3.11.2" - resolved "https://registry.yarnpkg.com/@react-aria/dnd/-/dnd-3.11.2.tgz#619741f547487e53e5ced858269e134d76dbe790" - integrity sha512-xaIUV0zPtUTLIBoE7qlGFPfRTfyDJT78fDzawYq6FwZcjgrl8X408UDCUaKk6xSJRh9UjNn78hil1WDYTLFNWA== +"@react-aria/dnd@^3.11.3": + version "3.11.3" + resolved "https://registry.yarnpkg.com/@react-aria/dnd/-/dnd-3.11.3.tgz#438b4603ef9b2560775ea02b64ea3dcdf15bf474" + integrity sha512-MyTziciik1Owz3rqDghu0K3ZtTFvmj/R2ZsLDwbU9N4hKqGX/BKnrI8SytTn8RDqVv5LmA/GhApLngiupTAsXw== dependencies: "@internationalized/string" "^3.2.7" - "@react-aria/i18n" "^3.12.12" - "@react-aria/interactions" "^3.25.5" + "@react-aria/i18n" "^3.12.13" + "@react-aria/interactions" "^3.25.6" "@react-aria/live-announcer" "^3.4.4" - "@react-aria/overlays" "^3.29.1" - "@react-aria/utils" "^3.30.1" - "@react-stately/collections" "^3.12.7" - "@react-stately/dnd" "^3.7.0" - "@react-types/button" "^3.14.0" - "@react-types/shared" "^3.32.0" + "@react-aria/overlays" "^3.30.0" + "@react-aria/utils" "^3.31.0" + "@react-stately/collections" "^3.12.8" + "@react-stately/dnd" "^3.7.1" + "@react-types/button" "^3.14.1" + "@react-types/shared" "^3.32.1" "@swc/helpers" "^0.5.0" -"@react-aria/focus@^3.21.1": - version "3.21.1" - resolved "https://registry.yarnpkg.com/@react-aria/focus/-/focus-3.21.1.tgz#fad9d0803e0e4423bb6e14ed3208fffd694e5e42" - integrity sha512-hmH1IhHlcQ2lSIxmki1biWzMbGgnhdxJUM0MFfzc71Rv6YAzhlx4kX3GYn4VNcjCeb6cdPv4RZ5vunV4kgMZYQ== +"@react-aria/focus@^3.21.2": + version "3.21.2" + resolved "https://registry.yarnpkg.com/@react-aria/focus/-/focus-3.21.2.tgz#3ce90450c3ee69f11c0647b4717c26d10941231c" + integrity sha512-JWaCR7wJVggj+ldmM/cb/DXFg47CXR55lznJhZBh4XVqJjMKwaOOqpT5vNN7kpC1wUpXicGNuDnJDN1S/+6dhQ== dependencies: - "@react-aria/interactions" "^3.25.5" - "@react-aria/utils" "^3.30.1" - "@react-types/shared" "^3.32.0" + "@react-aria/interactions" "^3.25.6" + "@react-aria/utils" "^3.31.0" + "@react-types/shared" "^3.32.1" "@swc/helpers" "^0.5.0" clsx "^2.0.0" -"@react-aria/form@^3.1.1": - version "3.1.1" - resolved "https://registry.yarnpkg.com/@react-aria/form/-/form-3.1.1.tgz#76b3eb4a6985fb27b1d437db89b5a69c54be292f" - integrity sha512-PjZC25UgH5orit9p56Ymbbo288F3eaDd3JUvD8SG+xgx302HhlFAOYsQLLAb4k4H03bp0gWtlUEkfX6KYcE1Tw== +"@react-aria/form@^3.1.2": + version "3.1.2" + resolved "https://registry.yarnpkg.com/@react-aria/form/-/form-3.1.2.tgz#e0aeb608d309594a59f12a7b05eb7374f2033a07" + integrity sha512-R3i7L7Ci61PqZQvOrnL9xJeWEbh28UkTVgkj72EvBBn39y4h7ReH++0stv7rRs8p5ozETSKezBbGfu4UsBewWw== dependencies: - "@react-aria/interactions" "^3.25.5" - "@react-aria/utils" "^3.30.1" - "@react-stately/form" "^3.2.1" - "@react-types/shared" "^3.32.0" + "@react-aria/interactions" "^3.25.6" + "@react-aria/utils" "^3.31.0" + "@react-stately/form" "^3.2.2" + "@react-types/shared" "^3.32.1" "@swc/helpers" "^0.5.0" -"@react-aria/grid@^3.14.4": - version "3.14.4" - resolved "https://registry.yarnpkg.com/@react-aria/grid/-/grid-3.14.4.tgz#0511ae807fe7ff6df03b96edfb0e23624f137804" - integrity sha512-l1FLQNKnoHpY4UClUTPUV0AqJ5bfAULEE0ErY86KznWLd+Hqzo7mHLqqDV02CDa/8mIUcdoax/MrYYIbPDlOZA== +"@react-aria/grid@^3.14.5": + version "3.14.5" + resolved "https://registry.yarnpkg.com/@react-aria/grid/-/grid-3.14.5.tgz#fccd1e3b64cdad7b17aff0dada6da64df0cd1d8c" + integrity sha512-XHw6rgjlTqc85e3zjsWo3U0EVwjN5MOYtrolCKc/lc2ItNdcY3OlMhpsU9+6jHwg/U3VCSWkGvwAz9hg7krd8Q== dependencies: - "@react-aria/focus" "^3.21.1" - "@react-aria/i18n" "^3.12.12" - "@react-aria/interactions" "^3.25.5" + "@react-aria/focus" "^3.21.2" + "@react-aria/i18n" "^3.12.13" + "@react-aria/interactions" "^3.25.6" "@react-aria/live-announcer" "^3.4.4" - "@react-aria/selection" "^3.25.1" - "@react-aria/utils" "^3.30.1" - "@react-stately/collections" "^3.12.7" - "@react-stately/grid" "^3.11.5" - "@react-stately/selection" "^3.20.5" - "@react-types/checkbox" "^3.10.1" - "@react-types/grid" "^3.3.5" - "@react-types/shared" "^3.32.0" + "@react-aria/selection" "^3.26.0" + "@react-aria/utils" "^3.31.0" + "@react-stately/collections" "^3.12.8" + "@react-stately/grid" "^3.11.6" + "@react-stately/selection" "^3.20.6" + "@react-types/checkbox" "^3.10.2" + "@react-types/grid" "^3.3.6" + "@react-types/shared" "^3.32.1" "@swc/helpers" "^0.5.0" -"@react-aria/gridlist@^3.14.0": - version "3.14.0" - resolved "https://registry.yarnpkg.com/@react-aria/gridlist/-/gridlist-3.14.0.tgz#cf4454e94ca9ca99dd21adad421420ff2e572f7a" - integrity sha512-8NWDaUbPe6ujI+kSvDqr2onPYWlBXiaLCQ6nfYOo+GFKxeVCsv4a2I5HAAoGf9THNQ5b8b8kJa+M0xyL1Z71XA== +"@react-aria/gridlist@^3.14.1": + version "3.14.1" + resolved "https://registry.yarnpkg.com/@react-aria/gridlist/-/gridlist-3.14.1.tgz#4aa636ad1342f859dc5ce1a350211535ae5ae424" + integrity sha512-keS03Am07aOn7RuNaRsMOyh0jscyhDn95asCVy4lxhl9A9TFk1Jw0o2L6q6cWRj1gFiKeacj/otG5H8ZKQQ2Wg== dependencies: - "@react-aria/focus" "^3.21.1" - "@react-aria/grid" "^3.14.4" - "@react-aria/i18n" "^3.12.12" - "@react-aria/interactions" "^3.25.5" - "@react-aria/selection" "^3.25.1" - "@react-aria/utils" "^3.30.1" - "@react-stately/list" "^3.13.0" - "@react-stately/tree" "^3.9.2" - "@react-types/shared" "^3.32.0" + "@react-aria/focus" "^3.21.2" + "@react-aria/grid" "^3.14.5" + "@react-aria/i18n" "^3.12.13" + "@react-aria/interactions" "^3.25.6" + "@react-aria/selection" "^3.26.0" + "@react-aria/utils" "^3.31.0" + "@react-stately/list" "^3.13.1" + "@react-stately/tree" "^3.9.3" + "@react-types/shared" "^3.32.1" "@swc/helpers" "^0.5.0" -"@react-aria/i18n@^3.12.12": - version "3.12.12" - resolved "https://registry.yarnpkg.com/@react-aria/i18n/-/i18n-3.12.12.tgz#186eadf0c5dd3c38eb31c40b7c0191df07cef185" - integrity sha512-JN6p+Xc6Pu/qddGRoeYY6ARsrk2Oz7UiQc9nLEPOt3Ch+blJZKWwDjcpo/p6/wVZdD/2BgXS7El6q6+eMg7ibw== +"@react-aria/i18n@^3.12.13": + version "3.12.13" + resolved "https://registry.yarnpkg.com/@react-aria/i18n/-/i18n-3.12.13.tgz#7c920d131cd07d4d5af21bd33ea7a5da0ce2ad11" + integrity sha512-YTM2BPg0v1RvmP8keHenJBmlx8FXUKsdYIEX7x6QWRd1hKlcDwphfjzvt0InX9wiLiPHsT5EoBTpuUk8SXc0Mg== dependencies: - "@internationalized/date" "^3.9.0" + "@internationalized/date" "^3.10.0" "@internationalized/message" "^3.1.8" "@internationalized/number" "^3.6.5" "@internationalized/string" "^3.2.7" "@react-aria/ssr" "^3.9.10" - "@react-aria/utils" "^3.30.1" - "@react-types/shared" "^3.32.0" + "@react-aria/utils" "^3.31.0" + "@react-types/shared" "^3.32.1" "@swc/helpers" "^0.5.0" -"@react-aria/interactions@^3.25.5": - version "3.25.5" - resolved "https://registry.yarnpkg.com/@react-aria/interactions/-/interactions-3.25.5.tgz#f7f69467c899f9673460c3401fcaac08d2dcac7d" - integrity sha512-EweYHOEvMwef/wsiEqV73KurX/OqnmbzKQa2fLxdULbec5+yDj6wVGaRHIzM4NiijIDe+bldEl5DG05CAKOAHA== +"@react-aria/interactions@^3.25.6": + version "3.25.6" + resolved "https://registry.yarnpkg.com/@react-aria/interactions/-/interactions-3.25.6.tgz#6fdf287337c5e4285045c35cf94b2ec8ae3b3a49" + integrity sha512-5UgwZmohpixwNMVkMvn9K1ceJe6TzlRlAfuYoQDUuOkk62/JVJNDLAPKIf5YMRc7d2B0rmfgaZLMtbREb0Zvkw== dependencies: "@react-aria/ssr" "^3.9.10" - "@react-aria/utils" "^3.30.1" + "@react-aria/utils" "^3.31.0" "@react-stately/flags" "^3.1.2" - "@react-types/shared" "^3.32.0" + "@react-types/shared" "^3.32.1" "@swc/helpers" "^0.5.0" -"@react-aria/label@^3.7.21": - version "3.7.21" - resolved "https://registry.yarnpkg.com/@react-aria/label/-/label-3.7.21.tgz#1deeb3886bc5110f76659137c3e21811fa1606d1" - integrity sha512-8G+059/GZahgQbrhMcCcVcrjm7W+pfzrypH/Qkjo7C1yqPGt6geeFwWeOIbiUZoI0HD9t9QvQPryd6m46UC7Tg== +"@react-aria/label@^3.7.22": + version "3.7.22" + resolved "https://registry.yarnpkg.com/@react-aria/label/-/label-3.7.22.tgz#13fbf1d568c37becca4652e5c5d0b490c29e5e52" + integrity sha512-jLquJeA5ZNqDT64UpTc9XJ7kQYltUlNcgxZ37/v4mHe0UZ7QohCKdKQhXHONb0h2jjNUpp2HOZI8J9++jOpzxA== dependencies: - "@react-aria/utils" "^3.30.1" - "@react-types/shared" "^3.32.0" + "@react-aria/utils" "^3.31.0" + "@react-types/shared" "^3.32.1" "@swc/helpers" "^0.5.0" -"@react-aria/landmark@^3.0.6": - version "3.0.6" - resolved "https://registry.yarnpkg.com/@react-aria/landmark/-/landmark-3.0.6.tgz#60805b4c4191525d843ac8d8a28f01ff6195096b" - integrity sha512-dMPBqJWTDAr3Lj5hA+XYDH2PWqtFghYy+y7iq7K5sK/96cub8hZEUjhwn+HGgHsLerPp0dWt293nKupAJnf4Vw== +"@react-aria/landmark@^3.0.7": + version "3.0.7" + resolved "https://registry.yarnpkg.com/@react-aria/landmark/-/landmark-3.0.7.tgz#6ffc06c870018f6ead456f6f67cccebd655910f0" + integrity sha512-t8c610b8hPLS6Vwv+rbuSyljZosI1s5+Tosfa0Fk4q7d+Ex6Yj7hLfUFy59GxZAufhUYfGX396fT0gPqAbU1tg== dependencies: - "@react-aria/utils" "^3.30.1" - "@react-types/shared" "^3.32.0" + "@react-aria/utils" "^3.31.0" + "@react-types/shared" "^3.32.1" "@swc/helpers" "^0.5.0" use-sync-external-store "^1.4.0" -"@react-aria/link@^3.8.5": - version "3.8.5" - resolved "https://registry.yarnpkg.com/@react-aria/link/-/link-3.8.5.tgz#d8bade7e3f1012c77a1e147942310520796e7b0b" - integrity sha512-klhV4roPp5MLRXJv1N+7SXOj82vx4gzVpuwQa3vouA+YI1my46oNzwgtkLGSTvE9OvDqYzPDj2YxFYhMywrkuw== +"@react-aria/link@^3.8.6": + version "3.8.6" + resolved "https://registry.yarnpkg.com/@react-aria/link/-/link-3.8.6.tgz#522c246b9fcf62fbe75f9c07d056d6b984523143" + integrity sha512-7F7UDJnwbU9IjfoAdl6f3Hho5/WB7rwcydUOjUux0p7YVWh/fTjIFjfAGyIir7MJhPapun1D0t97QQ3+8jXVcg== dependencies: - "@react-aria/interactions" "^3.25.5" - "@react-aria/utils" "^3.30.1" - "@react-types/link" "^3.6.4" - "@react-types/shared" "^3.32.0" + "@react-aria/interactions" "^3.25.6" + "@react-aria/utils" "^3.31.0" + "@react-types/link" "^3.6.5" + "@react-types/shared" "^3.32.1" "@swc/helpers" "^0.5.0" -"@react-aria/listbox@^3.13.3", "@react-aria/listbox@^3.14.8": - version "3.14.8" - resolved "https://registry.yarnpkg.com/@react-aria/listbox/-/listbox-3.14.8.tgz#c46d79ba3f2d389a95cad4eba8bdbf0a53c4a0b6" - integrity sha512-uRgbuD9afFv0PDhQ/VXCmAwlYctIyKRzxztkqp1p/1yz/tn/hs+bG9kew9AI02PtlRO1mSc+32O+mMDXDer8hA== +"@react-aria/listbox@^3.13.3", "@react-aria/listbox@^3.15.0": + version "3.15.0" + resolved "https://registry.yarnpkg.com/@react-aria/listbox/-/listbox-3.15.0.tgz#4218e24c20ec68069f51175c57fa2bf55b1acc46" + integrity sha512-Ub1Wu79R9sgxM7h4HeEdjOgOKDHwduvYcnDqsSddGXgpkL8ADjsy2YUQ0hHY5VnzA4BxK36bLp4mzSna8Qvj1w== dependencies: - "@react-aria/interactions" "^3.25.5" - "@react-aria/label" "^3.7.21" - "@react-aria/selection" "^3.25.1" - "@react-aria/utils" "^3.30.1" - "@react-stately/collections" "^3.12.7" - "@react-stately/list" "^3.13.0" - "@react-types/listbox" "^3.7.3" - "@react-types/shared" "^3.32.0" + "@react-aria/interactions" "^3.25.6" + "@react-aria/label" "^3.7.22" + "@react-aria/selection" "^3.26.0" + "@react-aria/utils" "^3.31.0" + "@react-stately/collections" "^3.12.8" + "@react-stately/list" "^3.13.1" + "@react-types/listbox" "^3.7.4" + "@react-types/shared" "^3.32.1" "@swc/helpers" "^0.5.0" "@react-aria/live-announcer@^3.4.4": @@ -5515,178 +3832,178 @@ dependencies: "@swc/helpers" "^0.5.0" -"@react-aria/menu@^3.19.2": - version "3.19.2" - resolved "https://registry.yarnpkg.com/@react-aria/menu/-/menu-3.19.2.tgz#a506d0cd4443f4ddfb89df341937fc77ed77b47d" - integrity sha512-WzDLW2MotL0L5/LEwc5oGgISf2ODuw4FnRpF0Zk+J4tKFfC88odvKz848ubBvThRXuXEvL0BHY+WqtM+j9fn3g== +"@react-aria/menu@^3.19.3": + version "3.19.3" + resolved "https://registry.yarnpkg.com/@react-aria/menu/-/menu-3.19.3.tgz#65a6dc14b27648be611bf28ab4bbcd2823b612a8" + integrity sha512-52fh8y8b2776R2VrfZPpUBJYC9oTP7XDy+zZuZTxPEd7Ywk0JNUl5F92y6ru22yPkS13sdhrNM/Op+V/KulmAg== dependencies: - "@react-aria/focus" "^3.21.1" - "@react-aria/i18n" "^3.12.12" - "@react-aria/interactions" "^3.25.5" - "@react-aria/overlays" "^3.29.1" - "@react-aria/selection" "^3.25.1" - "@react-aria/utils" "^3.30.1" - "@react-stately/collections" "^3.12.7" - "@react-stately/menu" "^3.9.7" - "@react-stately/selection" "^3.20.5" - "@react-stately/tree" "^3.9.2" - "@react-types/button" "^3.14.0" - "@react-types/menu" "^3.10.4" - "@react-types/shared" "^3.32.0" + "@react-aria/focus" "^3.21.2" + "@react-aria/i18n" "^3.12.13" + "@react-aria/interactions" "^3.25.6" + "@react-aria/overlays" "^3.30.0" + "@react-aria/selection" "^3.26.0" + "@react-aria/utils" "^3.31.0" + "@react-stately/collections" "^3.12.8" + "@react-stately/menu" "^3.9.8" + "@react-stately/selection" "^3.20.6" + "@react-stately/tree" "^3.9.3" + "@react-types/button" "^3.14.1" + "@react-types/menu" "^3.10.5" + "@react-types/shared" "^3.32.1" "@swc/helpers" "^0.5.0" -"@react-aria/meter@^3.4.26": - version "3.4.26" - resolved "https://registry.yarnpkg.com/@react-aria/meter/-/meter-3.4.26.tgz#99df9192ebf0db71acc300d05145ba8951982c8d" - integrity sha512-BI+Ri0dkhx9jjf6yPbOLl69M6808Fi08KNEmserMEapy++5usB/8krh9ARuR0GZYUPFOcny0Ml0or/HqamyFvw== +"@react-aria/meter@^3.4.27": + version "3.4.27" + resolved "https://registry.yarnpkg.com/@react-aria/meter/-/meter-3.4.27.tgz#01cf9bbd12f05bd0515e048960690b017b0b9dd2" + integrity sha512-andOOdJkgRJF9vBi5VWRmFodK+GT+5X1lLeNUmb4qOX8/MVfX/RbK72LDeIhd7xC7rSCFHj3WvZ198rK4q0k3w== dependencies: - "@react-aria/progress" "^3.4.26" - "@react-types/meter" "^3.4.12" - "@react-types/shared" "^3.32.0" + "@react-aria/progress" "^3.4.27" + "@react-types/meter" "^3.4.13" + "@react-types/shared" "^3.32.1" "@swc/helpers" "^0.5.0" -"@react-aria/numberfield@^3.12.1": - version "3.12.1" - resolved "https://registry.yarnpkg.com/@react-aria/numberfield/-/numberfield-3.12.1.tgz#97ca905f1b72fa275711b98e426d15095fc82ae4" - integrity sha512-3KjxGgWiF4GRvIyqrE3nCndkkEJ68v86y0nx89TpAjdzg7gCgdXgU2Lr4BhC/xImrmlqCusw0IBUMhsEq9EQWA== +"@react-aria/numberfield@^3.12.2": + version "3.12.2" + resolved "https://registry.yarnpkg.com/@react-aria/numberfield/-/numberfield-3.12.2.tgz#c219ecfba2076865e891cb2435c6bad558d6eabf" + integrity sha512-M2b+z0HIXiXpGAWOQkO2kpIjaLNUXJ5Q3/GMa3Fkr+B1piFX0VuOynYrtddKVrmXCe+r5t+XcGb0KS29uqv7nQ== dependencies: - "@react-aria/i18n" "^3.12.12" - "@react-aria/interactions" "^3.25.5" - "@react-aria/spinbutton" "^3.6.18" - "@react-aria/textfield" "^3.18.1" - "@react-aria/utils" "^3.30.1" - "@react-stately/form" "^3.2.1" - "@react-stately/numberfield" "^3.10.1" - "@react-types/button" "^3.14.0" - "@react-types/numberfield" "^3.8.14" - "@react-types/shared" "^3.32.0" + "@react-aria/i18n" "^3.12.13" + "@react-aria/interactions" "^3.25.6" + "@react-aria/spinbutton" "^3.6.19" + "@react-aria/textfield" "^3.18.2" + "@react-aria/utils" "^3.31.0" + "@react-stately/form" "^3.2.2" + "@react-stately/numberfield" "^3.10.2" + "@react-types/button" "^3.14.1" + "@react-types/numberfield" "^3.8.15" + "@react-types/shared" "^3.32.1" "@swc/helpers" "^0.5.0" -"@react-aria/overlays@^3.23.2", "@react-aria/overlays@^3.29.1": - version "3.29.1" - resolved "https://registry.yarnpkg.com/@react-aria/overlays/-/overlays-3.29.1.tgz#1a43a29709ad10971116b3d77de4e9b02107193d" - integrity sha512-Yz92XNPnbrTnxrvNrY/fXJ3iWaYNrj0q24ddvZNNKDcWak0S1/mQeUwNb+PwS2AryhFU5VQqKz5rNsM96TKmPQ== +"@react-aria/overlays@^3.23.2", "@react-aria/overlays@^3.30.0": + version "3.30.0" + resolved "https://registry.yarnpkg.com/@react-aria/overlays/-/overlays-3.30.0.tgz#e19f804c7fb9d99b25e33230cc3c155ed0b3cefb" + integrity sha512-UpjqSjYZx5FAhceWCRVsW6fX1sEwya1fQ/TKkL53FAlLFR8QKuoKqFlmiL43YUFTcGK3UdEOy3cWTleLQwdSmQ== dependencies: - "@react-aria/focus" "^3.21.1" - "@react-aria/i18n" "^3.12.12" - "@react-aria/interactions" "^3.25.5" + "@react-aria/focus" "^3.21.2" + "@react-aria/i18n" "^3.12.13" + "@react-aria/interactions" "^3.25.6" "@react-aria/ssr" "^3.9.10" - "@react-aria/utils" "^3.30.1" - "@react-aria/visually-hidden" "^3.8.27" - "@react-stately/overlays" "^3.6.19" - "@react-types/button" "^3.14.0" - "@react-types/overlays" "^3.9.1" - "@react-types/shared" "^3.32.0" + "@react-aria/utils" "^3.31.0" + "@react-aria/visually-hidden" "^3.8.28" + "@react-stately/overlays" "^3.6.20" + "@react-types/button" "^3.14.1" + "@react-types/overlays" "^3.9.2" + "@react-types/shared" "^3.32.1" "@swc/helpers" "^0.5.0" -"@react-aria/progress@^3.4.26": - version "3.4.26" - resolved "https://registry.yarnpkg.com/@react-aria/progress/-/progress-3.4.26.tgz#6e3429499b16297d3029a1a71e84b570d765ee48" - integrity sha512-EJBzbE0IjXrJ19ofSyNKDnqC70flUM0Z+9heMRPLi6Uz01o6Uuz9tjyzmoPnd9Q1jnTT7dCl7ydhdYTGsWFcUg== +"@react-aria/progress@^3.4.27": + version "3.4.27" + resolved "https://registry.yarnpkg.com/@react-aria/progress/-/progress-3.4.27.tgz#bdc968f133ddd33e5feaf2903d43aa34435dad51" + integrity sha512-0OA1shs1575g1zmO8+rWozdbTnxThFFhOfuoL1m7UV5Dley6FHpueoKB1ECv7B+Qm4dQt6DoEqLg7wsbbQDhmg== dependencies: - "@react-aria/i18n" "^3.12.12" - "@react-aria/label" "^3.7.21" - "@react-aria/utils" "^3.30.1" - "@react-types/progress" "^3.5.15" - "@react-types/shared" "^3.32.0" + "@react-aria/i18n" "^3.12.13" + "@react-aria/label" "^3.7.22" + "@react-aria/utils" "^3.31.0" + "@react-types/progress" "^3.5.16" + "@react-types/shared" "^3.32.1" "@swc/helpers" "^0.5.0" -"@react-aria/radio@^3.12.1": - version "3.12.1" - resolved "https://registry.yarnpkg.com/@react-aria/radio/-/radio-3.12.1.tgz#6330e7da6458a9b50cf1626805304a57f719c4fc" - integrity sha512-feZdMJyNp+UX03seIX0W6gdUk8xayTY+U0Ct61eci6YXzyyZoL2PVh49ojkbyZ2UZA/eXeygpdF5sgQrKILHCA== +"@react-aria/radio@^3.12.2": + version "3.12.2" + resolved "https://registry.yarnpkg.com/@react-aria/radio/-/radio-3.12.2.tgz#48ae0e9ba93e5c29e998fa3b64155a324a87f63e" + integrity sha512-I11f6I90neCh56rT/6ieAs3XyDKvEfbj/QmbU5cX3p+SJpRRPN0vxQi5D1hkh0uxDpeClxygSr31NmZsd4sqfg== dependencies: - "@react-aria/focus" "^3.21.1" - "@react-aria/form" "^3.1.1" - "@react-aria/i18n" "^3.12.12" - "@react-aria/interactions" "^3.25.5" - "@react-aria/label" "^3.7.21" - "@react-aria/utils" "^3.30.1" - "@react-stately/radio" "^3.11.1" - "@react-types/radio" "^3.9.1" - "@react-types/shared" "^3.32.0" + "@react-aria/focus" "^3.21.2" + "@react-aria/form" "^3.1.2" + "@react-aria/i18n" "^3.12.13" + "@react-aria/interactions" "^3.25.6" + "@react-aria/label" "^3.7.22" + "@react-aria/utils" "^3.31.0" + "@react-stately/radio" "^3.11.2" + "@react-types/radio" "^3.9.2" + "@react-types/shared" "^3.32.1" "@swc/helpers" "^0.5.0" -"@react-aria/searchfield@^3.8.8": - version "3.8.8" - resolved "https://registry.yarnpkg.com/@react-aria/searchfield/-/searchfield-3.8.8.tgz#1504b20d257981b4586d4f10b44398a2c48cde0c" - integrity sha512-Yn6esCYEym3Cwrh/OZt6o/RFzsG2zyCAEZf7BhWk6NWUvP6aPwHgoSDVSjDN6YnnPn4yMqkqPnZulHV4+MvE/w== +"@react-aria/searchfield@^3.8.9": + version "3.8.9" + resolved "https://registry.yarnpkg.com/@react-aria/searchfield/-/searchfield-3.8.9.tgz#faa82c976bf3ef6c678bf9a2f9ae9bea9d4d3096" + integrity sha512-Yt2pj8Wb5/XsUr2T0DQqFv+DlFpzzWIWnNr9cJATUcWV/xw6ok7YFEg9+7EHtBmsCQxFFJtock1QfZzBw6qLtQ== dependencies: - "@react-aria/i18n" "^3.12.12" - "@react-aria/textfield" "^3.18.1" - "@react-aria/utils" "^3.30.1" - "@react-stately/searchfield" "^3.5.15" - "@react-types/button" "^3.14.0" - "@react-types/searchfield" "^3.6.5" - "@react-types/shared" "^3.32.0" + "@react-aria/i18n" "^3.12.13" + "@react-aria/textfield" "^3.18.2" + "@react-aria/utils" "^3.31.0" + "@react-stately/searchfield" "^3.5.16" + "@react-types/button" "^3.14.1" + "@react-types/searchfield" "^3.6.6" + "@react-types/shared" "^3.32.1" "@swc/helpers" "^0.5.0" -"@react-aria/select@^3.16.2": - version "3.16.2" - resolved "https://registry.yarnpkg.com/@react-aria/select/-/select-3.16.2.tgz#61850011221a62b9680a1ccfd4d2dfab25604e2d" - integrity sha512-MwsOJ6FfPxzrLP6spnYg2SUeGKNm4m5vyH6GebecLxTO1ee7/YyTNP1xkrQTqPMP9xx6uqhzFLFuCym2b6ripA== +"@react-aria/select@^3.17.0": + version "3.17.0" + resolved "https://registry.yarnpkg.com/@react-aria/select/-/select-3.17.0.tgz#d96933daca43939f4d59518f843c87a4f600426f" + integrity sha512-q5ZuyAn5jSOeI0Ys99951TaGcF4O7u1SSBVxPMwVVXOU8ZhToCNx+WG3n/JDYHEjqdo7sbsVRaPA7LkBzBGf5w== dependencies: - "@react-aria/form" "^3.1.1" - "@react-aria/i18n" "^3.12.12" - "@react-aria/interactions" "^3.25.5" - "@react-aria/label" "^3.7.21" - "@react-aria/listbox" "^3.14.8" - "@react-aria/menu" "^3.19.2" - "@react-aria/selection" "^3.25.1" - "@react-aria/utils" "^3.30.1" - "@react-aria/visually-hidden" "^3.8.27" - "@react-stately/select" "^3.7.1" - "@react-types/button" "^3.14.0" - "@react-types/select" "^3.10.1" - "@react-types/shared" "^3.32.0" + "@react-aria/form" "^3.1.2" + "@react-aria/i18n" "^3.12.13" + "@react-aria/interactions" "^3.25.6" + "@react-aria/label" "^3.7.22" + "@react-aria/listbox" "^3.15.0" + "@react-aria/menu" "^3.19.3" + "@react-aria/selection" "^3.26.0" + "@react-aria/utils" "^3.31.0" + "@react-aria/visually-hidden" "^3.8.28" + "@react-stately/select" "^3.8.0" + "@react-types/button" "^3.14.1" + "@react-types/select" "^3.11.0" + "@react-types/shared" "^3.32.1" "@swc/helpers" "^0.5.0" -"@react-aria/selection@^3.25.1": - version "3.25.1" - resolved "https://registry.yarnpkg.com/@react-aria/selection/-/selection-3.25.1.tgz#fdd7724bd251ee72082d3b62aa891ce8957d4e8a" - integrity sha512-HG+k3rDjuhnXPdVyv9CKiebee2XNkFYeYZBxEGlK3/pFVBzndnc8BXNVrXSgtCHLs2d090JBVKl1k912BPbj0Q== +"@react-aria/selection@^3.26.0": + version "3.26.0" + resolved "https://registry.yarnpkg.com/@react-aria/selection/-/selection-3.26.0.tgz#dc5906aa732b0dbd54d26dd6a5f1dc793055e29c" + integrity sha512-ZBH3EfWZ+RfhTj01dH8L17uT7iNbXWS8u77/fUpHgtrm0pwNVhx0TYVnLU1YpazQ/3WVpvWhmBB8sWwD1FlD/g== dependencies: - "@react-aria/focus" "^3.21.1" - "@react-aria/i18n" "^3.12.12" - "@react-aria/interactions" "^3.25.5" - "@react-aria/utils" "^3.30.1" - "@react-stately/selection" "^3.20.5" - "@react-types/shared" "^3.32.0" + "@react-aria/focus" "^3.21.2" + "@react-aria/i18n" "^3.12.13" + "@react-aria/interactions" "^3.25.6" + "@react-aria/utils" "^3.31.0" + "@react-stately/selection" "^3.20.6" + "@react-types/shared" "^3.32.1" "@swc/helpers" "^0.5.0" -"@react-aria/separator@^3.4.12": - version "3.4.12" - resolved "https://registry.yarnpkg.com/@react-aria/separator/-/separator-3.4.12.tgz#4d6ccdf011dfb04fba2da9fdab8b70c2c7e77fbb" - integrity sha512-rvFCPdOPMQKY/Bpv2jNzXtetCuBLYSRCvpzam1LpMaEgwau5yECbId66+M2UX/cscPccKNU537SM6ei2j7RGog== +"@react-aria/separator@^3.4.13": + version "3.4.13" + resolved "https://registry.yarnpkg.com/@react-aria/separator/-/separator-3.4.13.tgz#6eea332c68b67d1081f4d8c2af8198c6bc46bfb4" + integrity sha512-0NlcrdBfQbcjWEXdHl3+uSY1272n2ljT1gWL2RIf6aQsQWTZ0gz0rTgRHy0MTXN+y+tICItUERJT4vmTLtIzVg== dependencies: - "@react-aria/utils" "^3.30.1" - "@react-types/shared" "^3.32.0" + "@react-aria/utils" "^3.31.0" + "@react-types/shared" "^3.32.1" "@swc/helpers" "^0.5.0" -"@react-aria/slider@^3.8.1": - version "3.8.1" - resolved "https://registry.yarnpkg.com/@react-aria/slider/-/slider-3.8.1.tgz#26cb2dee6c19c72e859bcd76f2e8973dcbe9a29a" - integrity sha512-uPgwZQrcuqHaLU2prJtPEPIyN9ugZ7qGgi0SB2U8tvoODNVwuPvOaSsvR98Mn6jiAzMFNoWMydeIi+J1OjvWsQ== +"@react-aria/slider@^3.8.2": + version "3.8.2" + resolved "https://registry.yarnpkg.com/@react-aria/slider/-/slider-3.8.2.tgz#a075205b06fa714733e3aabfdbc63d11f5c67be7" + integrity sha512-6KyUGaVzRE4xAz1LKHbNh1q5wzxe58pdTHFSnxNe6nk1SCoHw7NfI4h2s2m6LgJ0megFxsT0Ir8aHaFyyxmbgg== dependencies: - "@react-aria/i18n" "^3.12.12" - "@react-aria/interactions" "^3.25.5" - "@react-aria/label" "^3.7.21" - "@react-aria/utils" "^3.30.1" - "@react-stately/slider" "^3.7.1" - "@react-types/shared" "^3.32.0" - "@react-types/slider" "^3.8.1" + "@react-aria/i18n" "^3.12.13" + "@react-aria/interactions" "^3.25.6" + "@react-aria/label" "^3.7.22" + "@react-aria/utils" "^3.31.0" + "@react-stately/slider" "^3.7.2" + "@react-types/shared" "^3.32.1" + "@react-types/slider" "^3.8.2" "@swc/helpers" "^0.5.0" -"@react-aria/spinbutton@^3.6.18": - version "3.6.18" - resolved "https://registry.yarnpkg.com/@react-aria/spinbutton/-/spinbutton-3.6.18.tgz#cabc24687fab7c311b97c490faeced41688e43e2" - integrity sha512-dnmh7sNsprhYTpqCJhcuc9QJ9C/IG/o9TkgW5a9qcd2vS+dzEgqAiJKIMbJFG9kiJymv2NwIPysF12IWix+J3A== +"@react-aria/spinbutton@^3.6.19": + version "3.6.19" + resolved "https://registry.yarnpkg.com/@react-aria/spinbutton/-/spinbutton-3.6.19.tgz#fd0253b95b88e9fb12ff406b722b4fd1e1c8c836" + integrity sha512-xOIXegDpts9t3RSHdIN0iYQpdts0FZ3LbpYJIYVvdEHo9OpDS+ElnDzCGtwZLguvZlwc5s1LAKuKopDUsAEMkw== dependencies: - "@react-aria/i18n" "^3.12.12" + "@react-aria/i18n" "^3.12.13" "@react-aria/live-announcer" "^3.4.4" - "@react-aria/utils" "^3.30.1" - "@react-types/button" "^3.14.0" - "@react-types/shared" "^3.32.0" + "@react-aria/utils" "^3.31.0" + "@react-types/button" "^3.14.1" + "@react-types/shared" "^3.32.1" "@swc/helpers" "^0.5.0" "@react-aria/ssr@^3.9.10": @@ -5696,166 +4013,166 @@ dependencies: "@swc/helpers" "^0.5.0" -"@react-aria/switch@^3.7.7": - version "3.7.7" - resolved "https://registry.yarnpkg.com/@react-aria/switch/-/switch-3.7.7.tgz#10a800d059e887411ffde7b185616f83a75357a7" - integrity sha512-auV3g1qh+d/AZk7Idw2BOcYeXfCD9iDaiGmlcLJb9Eaz4nkq8vOkQxIXQFrn9Xhb+PfQzmQYKkt5N6P2ZNsw/g== +"@react-aria/switch@^3.7.8": + version "3.7.8" + resolved "https://registry.yarnpkg.com/@react-aria/switch/-/switch-3.7.8.tgz#e0a14f5eeda6017ae4d2b1cd236270d45c03e5ca" + integrity sha512-AfsUq1/YiuoprhcBUD9vDPyWaigAwctQNW1fMb8dROL+i/12B+Zekj8Ml+jbU69/kIVtfL0Jl7/0Bo9KK3X0xQ== dependencies: - "@react-aria/toggle" "^3.12.1" - "@react-stately/toggle" "^3.9.1" - "@react-types/shared" "^3.32.0" - "@react-types/switch" "^3.5.14" + "@react-aria/toggle" "^3.12.2" + "@react-stately/toggle" "^3.9.2" + "@react-types/shared" "^3.32.1" + "@react-types/switch" "^3.5.15" "@swc/helpers" "^0.5.0" -"@react-aria/table@^3.17.7": - version "3.17.7" - resolved "https://registry.yarnpkg.com/@react-aria/table/-/table-3.17.7.tgz#492bbdd6e815ce4a988824c83f6816250400c384" - integrity sha512-FxXryGTxePgh8plIxlOMwXdleGWjK52vsmbRoqz66lTIHMUMLTmmm+Y0V3lBOIoaW1rxvKcolYgS79ROnbDYBw== +"@react-aria/table@^3.17.8": + version "3.17.8" + resolved "https://registry.yarnpkg.com/@react-aria/table/-/table-3.17.8.tgz#bf9c72cfe13775d6ad6934855f21456d73844ef0" + integrity sha512-bXiZoxTMbsqUJsYDhHPzKc3jw0HFJ/xMsJ49a0f7mp5r9zACxNLeIU0wJ4Uvx37dnYOHKzGliG+rj5l4sph7MA== dependencies: - "@react-aria/focus" "^3.21.1" - "@react-aria/grid" "^3.14.4" - "@react-aria/i18n" "^3.12.12" - "@react-aria/interactions" "^3.25.5" + "@react-aria/focus" "^3.21.2" + "@react-aria/grid" "^3.14.5" + "@react-aria/i18n" "^3.12.13" + "@react-aria/interactions" "^3.25.6" "@react-aria/live-announcer" "^3.4.4" - "@react-aria/utils" "^3.30.1" - "@react-aria/visually-hidden" "^3.8.27" - "@react-stately/collections" "^3.12.7" + "@react-aria/utils" "^3.31.0" + "@react-aria/visually-hidden" "^3.8.28" + "@react-stately/collections" "^3.12.8" "@react-stately/flags" "^3.1.2" - "@react-stately/table" "^3.15.0" - "@react-types/checkbox" "^3.10.1" - "@react-types/grid" "^3.3.5" - "@react-types/shared" "^3.32.0" - "@react-types/table" "^3.13.3" + "@react-stately/table" "^3.15.1" + "@react-types/checkbox" "^3.10.2" + "@react-types/grid" "^3.3.6" + "@react-types/shared" "^3.32.1" + "@react-types/table" "^3.13.4" "@swc/helpers" "^0.5.0" -"@react-aria/tabs@^3.10.7": - version "3.10.7" - resolved "https://registry.yarnpkg.com/@react-aria/tabs/-/tabs-3.10.7.tgz#0ff066fa3252af78af24e98690c7aa9e1b2ebfce" - integrity sha512-iA1M6H+N+9GggsEy/6MmxpMpeOocwYgFy2EoEl3it24RVccY6iZT4AweJq96s5IYga5PILpn7VVcpssvhkPgeA== +"@react-aria/tabs@^3.10.8": + version "3.10.8" + resolved "https://registry.yarnpkg.com/@react-aria/tabs/-/tabs-3.10.8.tgz#95c76badd8a9c9583449d0c765ab9289627847bc" + integrity sha512-sPPJyTyoAqsBh76JinBAxStOcbjZvyWFYKpJ9Uqw+XT0ObshAPPFSGeh8DiQemPs02RwJdrfARPMhyqiX8t59A== dependencies: - "@react-aria/focus" "^3.21.1" - "@react-aria/i18n" "^3.12.12" - "@react-aria/selection" "^3.25.1" - "@react-aria/utils" "^3.30.1" - "@react-stately/tabs" "^3.8.5" - "@react-types/shared" "^3.32.0" - "@react-types/tabs" "^3.3.18" + "@react-aria/focus" "^3.21.2" + "@react-aria/i18n" "^3.12.13" + "@react-aria/selection" "^3.26.0" + "@react-aria/utils" "^3.31.0" + "@react-stately/tabs" "^3.8.6" + "@react-types/shared" "^3.32.1" + "@react-types/tabs" "^3.3.19" "@swc/helpers" "^0.5.0" -"@react-aria/tag@^3.7.1": - version "3.7.1" - resolved "https://registry.yarnpkg.com/@react-aria/tag/-/tag-3.7.1.tgz#b9f018f345e54e5ab99008c2c2c2104c91e31c0b" - integrity sha512-VpF26ez+QmEzTK8E9tXZ4cofa1wocjnIo/Bd1LCXgLCytnHAkYGxeIRm5QbznJ0aF/9UgR1QtMqhyRrCZg9QqA== +"@react-aria/tag@^3.7.2": + version "3.7.2" + resolved "https://registry.yarnpkg.com/@react-aria/tag/-/tag-3.7.2.tgz#5a655640deaf1705b8001abd636a7b96ae2250e9" + integrity sha512-JV679P5r4DftbqyNBRt7Nw9mP7dxaKPfikjyQuvUoEOa06wBLbM/hU9RJUPRvqK+Un6lgBDAmXD9NNf4N2xpdw== dependencies: - "@react-aria/gridlist" "^3.14.0" - "@react-aria/i18n" "^3.12.12" - "@react-aria/interactions" "^3.25.5" - "@react-aria/label" "^3.7.21" - "@react-aria/selection" "^3.25.1" - "@react-aria/utils" "^3.30.1" - "@react-stately/list" "^3.13.0" - "@react-types/button" "^3.14.0" - "@react-types/shared" "^3.32.0" + "@react-aria/gridlist" "^3.14.1" + "@react-aria/i18n" "^3.12.13" + "@react-aria/interactions" "^3.25.6" + "@react-aria/label" "^3.7.22" + "@react-aria/selection" "^3.26.0" + "@react-aria/utils" "^3.31.0" + "@react-stately/list" "^3.13.1" + "@react-types/button" "^3.14.1" + "@react-types/shared" "^3.32.1" "@swc/helpers" "^0.5.0" -"@react-aria/textfield@^3.18.1": - version "3.18.1" - resolved "https://registry.yarnpkg.com/@react-aria/textfield/-/textfield-3.18.1.tgz#73f40b30b2e5c09af9c2970473397035e315da72" - integrity sha512-8yCoirnQzbbQgdk5J5bqimEu3GhHZ9FXeMHez1OF+H+lpTwyTYQ9XgioEN3HKnVUBNEufG4lYkQMxTKJdq1v9g== +"@react-aria/textfield@^3.18.2": + version "3.18.2" + resolved "https://registry.yarnpkg.com/@react-aria/textfield/-/textfield-3.18.2.tgz#d0198ac9833396f3b831e7e3c4cbe751979a4014" + integrity sha512-G+lM8VYSor6g9Yptc6hLZ6BF+0cq0pYol1z6wdQUQgJN8tg4HPtzq75lsZtlCSIznL3amgRAxJtd0dUrsAnvaQ== dependencies: - "@react-aria/form" "^3.1.1" - "@react-aria/interactions" "^3.25.5" - "@react-aria/label" "^3.7.21" - "@react-aria/utils" "^3.30.1" - "@react-stately/form" "^3.2.1" + "@react-aria/form" "^3.1.2" + "@react-aria/interactions" "^3.25.6" + "@react-aria/label" "^3.7.22" + "@react-aria/utils" "^3.31.0" + "@react-stately/form" "^3.2.2" "@react-stately/utils" "^3.10.8" - "@react-types/shared" "^3.32.0" - "@react-types/textfield" "^3.12.5" + "@react-types/shared" "^3.32.1" + "@react-types/textfield" "^3.12.6" "@swc/helpers" "^0.5.0" -"@react-aria/toast@^3.0.7": - version "3.0.7" - resolved "https://registry.yarnpkg.com/@react-aria/toast/-/toast-3.0.7.tgz#bf72a7ef266affbb3a23e073c8e5afc1a4326aad" - integrity sha512-nuxPQ7wcSTg9UNMhXl9Uwyc5you/D1RfwymI3VDa5OGTZdJOmV2j94nyjBfMO2168EYMZjw+wEovvOZphs2Pbw== +"@react-aria/toast@^3.0.8": + version "3.0.8" + resolved "https://registry.yarnpkg.com/@react-aria/toast/-/toast-3.0.8.tgz#50a751654a4f4917649a2a411f1e28418dc60dd1" + integrity sha512-rfJIms6AkMyQ7ZgKrMZgGfPwGcB/t1JoEwbc1PAmXcAvFI/hzF6YF7ZFDXiq38ucFsP9PnHmbXIzM9w4ccl18A== dependencies: - "@react-aria/i18n" "^3.12.12" - "@react-aria/interactions" "^3.25.5" - "@react-aria/landmark" "^3.0.6" - "@react-aria/utils" "^3.30.1" + "@react-aria/i18n" "^3.12.13" + "@react-aria/interactions" "^3.25.6" + "@react-aria/landmark" "^3.0.7" + "@react-aria/utils" "^3.31.0" "@react-stately/toast" "^3.1.2" - "@react-types/button" "^3.14.0" - "@react-types/shared" "^3.32.0" + "@react-types/button" "^3.14.1" + "@react-types/shared" "^3.32.1" "@swc/helpers" "^0.5.0" -"@react-aria/toggle@^3.12.1": - version "3.12.1" - resolved "https://registry.yarnpkg.com/@react-aria/toggle/-/toggle-3.12.1.tgz#2a32b7e8e2cbc0a8494350ba4981000093af882e" - integrity sha512-XaFiRs1KEcIT6bTtVY/KTQxw4kinemj/UwXw2iJTu9XS43hhJ/9cvj8KzNGrKGqaxTpOYj62TnSHZbSiFViHDA== +"@react-aria/toggle@^3.12.2": + version "3.12.2" + resolved "https://registry.yarnpkg.com/@react-aria/toggle/-/toggle-3.12.2.tgz#909c7c8b9bbeb2cc93a18297363eebb46354b0d4" + integrity sha512-g25XLYqJuJpt0/YoYz2Rab8ax+hBfbssllcEFh0v0jiwfk2gwTWfRU9KAZUvxIqbV8Nm8EBmrYychDpDcvW1kw== dependencies: - "@react-aria/interactions" "^3.25.5" - "@react-aria/utils" "^3.30.1" - "@react-stately/toggle" "^3.9.1" - "@react-types/checkbox" "^3.10.1" - "@react-types/shared" "^3.32.0" + "@react-aria/interactions" "^3.25.6" + "@react-aria/utils" "^3.31.0" + "@react-stately/toggle" "^3.9.2" + "@react-types/checkbox" "^3.10.2" + "@react-types/shared" "^3.32.1" "@swc/helpers" "^0.5.0" -"@react-aria/toolbar@3.0.0-beta.20": - version "3.0.0-beta.20" - resolved "https://registry.yarnpkg.com/@react-aria/toolbar/-/toolbar-3.0.0-beta.20.tgz#e1b56dde51c59dc331d93783869505fb225786f4" - integrity sha512-Kxvqw+TpVOE/eSi8RAQ9xjBQ2uXe8KkRvlRNQWQsrzkZDkXhzqGfQuJnBmozFxqpzSLwaVqQajHFUSvPAScT8Q== +"@react-aria/toolbar@3.0.0-beta.21": + version "3.0.0-beta.21" + resolved "https://registry.yarnpkg.com/@react-aria/toolbar/-/toolbar-3.0.0-beta.21.tgz#936929637fb89b1ba562aeeeeeaae6253a952bdd" + integrity sha512-yRCk/GD8g+BhdDgxd3I0a0c8Ni4Wyo6ERzfSoBkPkwQ4X2E2nkopmraM9D0fXw4UcIr4bnmvADzkHXtBN0XrBg== dependencies: - "@react-aria/focus" "^3.21.1" - "@react-aria/i18n" "^3.12.12" - "@react-aria/utils" "^3.30.1" - "@react-types/shared" "^3.32.0" + "@react-aria/focus" "^3.21.2" + "@react-aria/i18n" "^3.12.13" + "@react-aria/utils" "^3.31.0" + "@react-types/shared" "^3.32.1" "@swc/helpers" "^0.5.0" -"@react-aria/tooltip@^3.8.7": - version "3.8.7" - resolved "https://registry.yarnpkg.com/@react-aria/tooltip/-/tooltip-3.8.7.tgz#69138ba63ca4ecec903e13d99c9cbf74980e2280" - integrity sha512-Aj7DPJYGZ9/+2ZfhkvbN7YMeA5qu4oy4LVQiMCpqNwcFzvhTAVhN7J7cS6KjA64fhd1shKm3BZ693Ez6lSpqwg== +"@react-aria/tooltip@^3.8.8": + version "3.8.8" + resolved "https://registry.yarnpkg.com/@react-aria/tooltip/-/tooltip-3.8.8.tgz#a9320dd5edc953fbf7a24b9c30312408730e9743" + integrity sha512-CmHUqtXtFWmG4AHMEr9hIVex+oscK6xcM2V47gq9ijNInxe3M6UBu/dBdkgGP/jYv9N7tzCAjTR8nNIHQXwvWw== dependencies: - "@react-aria/interactions" "^3.25.5" - "@react-aria/utils" "^3.30.1" - "@react-stately/tooltip" "^3.5.7" - "@react-types/shared" "^3.32.0" - "@react-types/tooltip" "^3.4.20" + "@react-aria/interactions" "^3.25.6" + "@react-aria/utils" "^3.31.0" + "@react-stately/tooltip" "^3.5.8" + "@react-types/shared" "^3.32.1" + "@react-types/tooltip" "^3.4.21" "@swc/helpers" "^0.5.0" -"@react-aria/tree@^3.1.3": - version "3.1.3" - resolved "https://registry.yarnpkg.com/@react-aria/tree/-/tree-3.1.3.tgz#061f87c07709e3810de7e3b2ec6f70596e54f6ac" - integrity sha512-CWjIvJS540Kzzxs1f4fF0ajPUfYoeptcA6MmXHBlCKE2euRSvKW6F1ZhvLVq81YsYWuAfBKnG2/JsTgBZnGPVQ== +"@react-aria/tree@^3.1.4": + version "3.1.4" + resolved "https://registry.yarnpkg.com/@react-aria/tree/-/tree-3.1.4.tgz#d264355534c4af5203a6b6f3a659681504e31f00" + integrity sha512-6pbFeN0dAsCOrFGUKU39CNjft20zCAjLfMqfkRWisL+JkUHI2nq6odUJF5jJTsU1C+1951+3oFOmVxPX+K+akQ== dependencies: - "@react-aria/gridlist" "^3.14.0" - "@react-aria/i18n" "^3.12.12" - "@react-aria/selection" "^3.25.1" - "@react-aria/utils" "^3.30.1" - "@react-stately/tree" "^3.9.2" - "@react-types/button" "^3.14.0" - "@react-types/shared" "^3.32.0" + "@react-aria/gridlist" "^3.14.1" + "@react-aria/i18n" "^3.12.13" + "@react-aria/selection" "^3.26.0" + "@react-aria/utils" "^3.31.0" + "@react-stately/tree" "^3.9.3" + "@react-types/button" "^3.14.1" + "@react-types/shared" "^3.32.1" "@swc/helpers" "^0.5.0" -"@react-aria/utils@^3.25.2", "@react-aria/utils@^3.30.1": - version "3.30.1" - resolved "https://registry.yarnpkg.com/@react-aria/utils/-/utils-3.30.1.tgz#9eb704d4193674816e1e0eab758b12c2d69d7b0b" - integrity sha512-zETcbDd6Vf9GbLndO6RiWJadIZsBU2MMm23rBACXLmpRztkrIqPEb2RVdlLaq1+GklDx0Ii6PfveVjx+8S5U6A== +"@react-aria/utils@^3.25.2", "@react-aria/utils@^3.31.0": + version "3.31.0" + resolved "https://registry.yarnpkg.com/@react-aria/utils/-/utils-3.31.0.tgz#4710e35bf658234cf4b53eec9742f25e51637b12" + integrity sha512-ABOzCsZrWzf78ysswmguJbx3McQUja7yeGj6/vZo4JVsZNlxAN+E9rs381ExBRI0KzVo6iBTeX5De8eMZPJXig== dependencies: "@react-aria/ssr" "^3.9.10" "@react-stately/flags" "^3.1.2" "@react-stately/utils" "^3.10.8" - "@react-types/shared" "^3.32.0" + "@react-types/shared" "^3.32.1" "@swc/helpers" "^0.5.0" clsx "^2.0.0" -"@react-aria/visually-hidden@^3.8.27": - version "3.8.27" - resolved "https://registry.yarnpkg.com/@react-aria/visually-hidden/-/visually-hidden-3.8.27.tgz#5e73b761b2ea932b30f818f88c9b290e6437f991" - integrity sha512-hD1DbL3WnjPnCdlQjwe19bQVRAGJyN0Aaup+s7NNtvZUn7AjoEH78jo8TE+L8yM7z/OZUQF26laCfYqeIwWn4g== +"@react-aria/visually-hidden@^3.8.28": + version "3.8.28" + resolved "https://registry.yarnpkg.com/@react-aria/visually-hidden/-/visually-hidden-3.8.28.tgz#61fc99c2d2662e7347abe25a421d138a3a81db46" + integrity sha512-KRRjbVVob2CeBidF24dzufMxBveEUtUu7IM+hpdZKB+gxVROoh4XRLPv9SFmaH89Z7D9To3QoykVZoWD0lan6Q== dependencies: - "@react-aria/interactions" "^3.25.5" - "@react-aria/utils" "^3.30.1" - "@react-types/shared" "^3.32.0" + "@react-aria/interactions" "^3.25.6" + "@react-aria/utils" "^3.31.0" + "@react-types/shared" "^3.32.1" "@swc/helpers" "^0.5.0" "@react-icons/all-files@^4.1.0": @@ -5908,104 +4225,103 @@ "@react-spring/shared" "~9.7.5" "@react-spring/types" "~9.7.5" -"@react-stately/calendar@^3.8.4": - version "3.8.4" - resolved "https://registry.yarnpkg.com/@react-stately/calendar/-/calendar-3.8.4.tgz#c64b29010dc0aba78592cb9a85a09b3ee5a49e17" - integrity sha512-q9mq0ydOLS5vJoHLnYfSCS/vppfjbg0XHJlAoPR+w+WpYZF4wPP453SrlX9T1DbxCEYFTpcxcMk/O8SDW3miAw== +"@react-stately/calendar@^3.9.0": + version "3.9.0" + resolved "https://registry.yarnpkg.com/@react-stately/calendar/-/calendar-3.9.0.tgz#22da3b99692eabf53f94a58df7768d2135664c91" + integrity sha512-U5Nf2kx9gDhJRxdDUm5gjfyUlt/uUfOvM1vDW2UA62cA6+2k2cavMLc2wNlXOb/twFtl6p0joYKHG7T4xnEFkg== dependencies: - "@internationalized/date" "^3.9.0" + "@internationalized/date" "^3.10.0" "@react-stately/utils" "^3.10.8" - "@react-types/calendar" "^3.7.4" - "@react-types/shared" "^3.32.0" + "@react-types/calendar" "^3.8.0" + "@react-types/shared" "^3.32.1" "@swc/helpers" "^0.5.0" -"@react-stately/checkbox@^3.7.1": - version "3.7.1" - resolved "https://registry.yarnpkg.com/@react-stately/checkbox/-/checkbox-3.7.1.tgz#7a0a42f94705acc21ca702ad14b067a69cef4d47" - integrity sha512-ezfKRJsDuRCLtNoNOi9JXCp6PjffZWLZ/vENW/gbRDL8i46RKC/HpfJrJhvTPmsLYazxPC99Me9iq3v0VoNCsw== +"@react-stately/checkbox@^3.7.2": + version "3.7.2" + resolved "https://registry.yarnpkg.com/@react-stately/checkbox/-/checkbox-3.7.2.tgz#0a2293e7b97a366f94b7830d3deb2c0e9876c829" + integrity sha512-j1ycUVz5JmqhaL6mDZgDNZqBilOB8PBW096sDPFaTtuYreDx2HOd1igxiIvwlvPESZwsJP7FVM3mYnaoXtpKPA== dependencies: - "@react-stately/form" "^3.2.1" + "@react-stately/form" "^3.2.2" "@react-stately/utils" "^3.10.8" - "@react-types/checkbox" "^3.10.1" - "@react-types/shared" "^3.32.0" + "@react-types/checkbox" "^3.10.2" + "@react-types/shared" "^3.32.1" "@swc/helpers" "^0.5.0" -"@react-stately/collections@^3.12.7": - version "3.12.7" - resolved "https://registry.yarnpkg.com/@react-stately/collections/-/collections-3.12.7.tgz#6e01a8988696e62301690eb7cd1497568236f222" - integrity sha512-0kQc0mI986GOCQHvRy4L0JQiotIK/KmEhR9Mu/6V0GoSdqg5QeUe4kyoNWj3bl03uQXme80v0L2jLHt+fOHHjA== +"@react-stately/collections@^3.12.8": + version "3.12.8" + resolved "https://registry.yarnpkg.com/@react-stately/collections/-/collections-3.12.8.tgz#f38692fb9c6384fb91d1c50052a40e595d3efa2c" + integrity sha512-AceJYLLXt1Y2XIcOPi6LEJSs4G/ubeYW3LqOCQbhfIgMaNqKfQMIfagDnPeJX9FVmPFSlgoCBxb1pTJW2vjCAQ== dependencies: - "@react-types/shared" "^3.32.0" + "@react-types/shared" "^3.32.1" "@swc/helpers" "^0.5.0" -"@react-stately/color@^3.9.1": - version "3.9.1" - resolved "https://registry.yarnpkg.com/@react-stately/color/-/color-3.9.1.tgz#268d1ac94c0d5b67398ae62f2fefcd86846b9267" - integrity sha512-fCj7fFamyuQbL++MOcf4W4d4aFWXYWJ2UI1dKhrXdqVz/ly9CBVjy/MHKQ6xZX2tEiuoPX5NexfxzKKiozE50Q== +"@react-stately/color@^3.9.2": + version "3.9.2" + resolved "https://registry.yarnpkg.com/@react-stately/color/-/color-3.9.2.tgz#87ac8461a01478208c302efa47582e872ff78c65" + integrity sha512-F+6Do8W3yu/4n7MpzZtbXwVukcLTFYYDIUtpoR+Jl52UmAr9Hf1CQgkyTI2azv1ZMzj1mVrTBhpBL0q27kFZig== dependencies: "@internationalized/number" "^3.6.5" "@internationalized/string" "^3.2.7" - "@react-stately/form" "^3.2.1" - "@react-stately/numberfield" "^3.10.1" - "@react-stately/slider" "^3.7.1" + "@react-stately/form" "^3.2.2" + "@react-stately/numberfield" "^3.10.2" + "@react-stately/slider" "^3.7.2" "@react-stately/utils" "^3.10.8" - "@react-types/color" "^3.1.1" - "@react-types/shared" "^3.32.0" + "@react-types/color" "^3.1.2" + "@react-types/shared" "^3.32.1" "@swc/helpers" "^0.5.0" -"@react-stately/combobox@^3.11.1": - version "3.11.1" - resolved "https://registry.yarnpkg.com/@react-stately/combobox/-/combobox-3.11.1.tgz#8bc48b9e9725db3382c6d1afa3946394fc097a20" - integrity sha512-ZZh+SaAmddoY+MeJr470oDYA0nGaJm4xoHCBapaBA0JNakGC/wTzF/IRz3tKQT2VYK4rumr1BJLZQydGp7zzeg== +"@react-stately/combobox@^3.12.0": + version "3.12.0" + resolved "https://registry.yarnpkg.com/@react-stately/combobox/-/combobox-3.12.0.tgz#71e6c9a8ee2f75edc1d233df7b6d7a0b7aeb6fbe" + integrity sha512-A6q9R/7cEa/qoQsBkdslXWvD7ztNLLQ9AhBhVN9QvzrmrH5B4ymUwcTU8lWl22ykH7RRwfonLeLXJL4C+/L2oQ== dependencies: - "@react-stately/collections" "^3.12.7" - "@react-stately/form" "^3.2.1" - "@react-stately/list" "^3.13.0" - "@react-stately/overlays" "^3.6.19" - "@react-stately/select" "^3.7.1" + "@react-stately/collections" "^3.12.8" + "@react-stately/form" "^3.2.2" + "@react-stately/list" "^3.13.1" + "@react-stately/overlays" "^3.6.20" "@react-stately/utils" "^3.10.8" - "@react-types/combobox" "^3.13.8" - "@react-types/shared" "^3.32.0" + "@react-types/combobox" "^3.13.9" + "@react-types/shared" "^3.32.1" "@swc/helpers" "^0.5.0" -"@react-stately/data@^3.14.0": - version "3.14.0" - resolved "https://registry.yarnpkg.com/@react-stately/data/-/data-3.14.0.tgz#224d1aca726cad79b05f32ee37356ce931b1356d" - integrity sha512-3GUsOXatYohBX2wTQHnJKVQlFfYXnt7IoDDuIaUeM8kXlF+dRSFAOAfPUSGAph6lJz2ht4dq1SEl6ZL/u+dRlQ== +"@react-stately/data@^3.14.1": + version "3.14.1" + resolved "https://registry.yarnpkg.com/@react-stately/data/-/data-3.14.1.tgz#ba5550dee9d0d8ba10a4f6c763c3251631f73582" + integrity sha512-lDNc4gZ6kVZcrABeeQZPTTnP+1ykNylSvFzAC/Hq1fs8+s54xLRvoENWIyG+yK19N9TIGEoA0AOFG8PoAun43g== dependencies: - "@react-types/shared" "^3.32.0" + "@react-types/shared" "^3.32.1" "@swc/helpers" "^0.5.0" -"@react-stately/datepicker@^3.15.1": - version "3.15.1" - resolved "https://registry.yarnpkg.com/@react-stately/datepicker/-/datepicker-3.15.1.tgz#ca18ba954c1c1e083fb31a00c3ea76f1ed7bafab" - integrity sha512-t64iYPms9y+MEQgOAu0XUHccbEXWVUWBHJWnYvAmILCHY8ZAOeSPAT1g4v9nzyiApcflSNXgpsvbs9BBEsrWww== +"@react-stately/datepicker@^3.15.2": + version "3.15.2" + resolved "https://registry.yarnpkg.com/@react-stately/datepicker/-/datepicker-3.15.2.tgz#e873aecb5ec037b2da21b267c365c52443437dcb" + integrity sha512-S5GL+W37chvV8knv9v0JRv0L6hKo732qqabCCHXzOpYxkLIkV4f/y3cHdEzFWzpZ0O0Gkg7WgeYo160xOdBKYg== dependencies: - "@internationalized/date" "^3.9.0" + "@internationalized/date" "^3.10.0" "@internationalized/string" "^3.2.7" - "@react-stately/form" "^3.2.1" - "@react-stately/overlays" "^3.6.19" + "@react-stately/form" "^3.2.2" + "@react-stately/overlays" "^3.6.20" "@react-stately/utils" "^3.10.8" - "@react-types/datepicker" "^3.13.1" - "@react-types/shared" "^3.32.0" + "@react-types/datepicker" "^3.13.2" + "@react-types/shared" "^3.32.1" "@swc/helpers" "^0.5.0" -"@react-stately/disclosure@^3.0.7": - version "3.0.7" - resolved "https://registry.yarnpkg.com/@react-stately/disclosure/-/disclosure-3.0.7.tgz#dd1d4451fb6368cbc1d7a7f6679599f1585a518d" - integrity sha512-ogM2y02uhpGfSOaBKIDz+hEha8qBH6WIRHRkoqdF4sEaR1kfq8LvBWdP1e/OcqHAhuRr28P2Rf0TDicnAnN7uA== +"@react-stately/disclosure@^3.0.8": + version "3.0.8" + resolved "https://registry.yarnpkg.com/@react-stately/disclosure/-/disclosure-3.0.8.tgz#ff6a3cc61993d25881cb8d6a82fcf829f139e02a" + integrity sha512-/Ce/Z76y85eSBZiemfU/uEyXkBBa1RdfLRaKD13rnfUV7/nS3ae1VtNlsXgmwQjWv2pmAiSuEKYMbZfVL7q/lQ== dependencies: "@react-stately/utils" "^3.10.8" - "@react-types/shared" "^3.32.0" + "@react-types/shared" "^3.32.1" "@swc/helpers" "^0.5.0" -"@react-stately/dnd@^3.7.0": - version "3.7.0" - resolved "https://registry.yarnpkg.com/@react-stately/dnd/-/dnd-3.7.0.tgz#2607fad45e32ed40e40623b8b9cc7a2a1f265bfe" - integrity sha512-DddpCVkqt6vUPHLqe/2FHxW/gkR4tEt7W0MbFcCeCLbc9lmvzOClPwNpjmU/3UnU+vPQnwGGUeF3HvaxduUq2Q== +"@react-stately/dnd@^3.7.1": + version "3.7.1" + resolved "https://registry.yarnpkg.com/@react-stately/dnd/-/dnd-3.7.1.tgz#23b2425553fc1cbc76821c96b30ecca1c9d16013" + integrity sha512-O1JBJ4HI1rVNKuoa5NXiC5FCrCEkr9KVBoKNlTZU8/cnQselhbEsUfMglAakO2EuwIaM1tIXoNF5J/N5P+6lTA== dependencies: - "@react-stately/selection" "^3.20.5" - "@react-types/shared" "^3.32.0" + "@react-stately/selection" "^3.20.6" + "@react-types/shared" "^3.32.1" "@swc/helpers" "^0.5.0" "@react-stately/flags@^3.1.2": @@ -6015,141 +4331,142 @@ dependencies: "@swc/helpers" "^0.5.0" -"@react-stately/form@^3.2.1": - version "3.2.1" - resolved "https://registry.yarnpkg.com/@react-stately/form/-/form-3.2.1.tgz#5c8caad11ea952f0fa1835ae31da67c208e96a54" - integrity sha512-btgOPXkwvd6fdWKoepy5Ue43o2932OSkQxozsR7US1ffFLcQc3SNlADHaRChIXSG8ffPo9t0/Sl4eRzaKu3RgQ== +"@react-stately/form@^3.2.2": + version "3.2.2" + resolved "https://registry.yarnpkg.com/@react-stately/form/-/form-3.2.2.tgz#c1ae1264a414dd5e3e8ae0f21baf4814588d8c53" + integrity sha512-soAheOd7oaTO6eNs6LXnfn0tTqvOoe3zN9FvtIhhrErKz9XPc5sUmh3QWwR45+zKbitOi1HOjfA/gifKhZcfWw== dependencies: - "@react-types/shared" "^3.32.0" + "@react-types/shared" "^3.32.1" "@swc/helpers" "^0.5.0" -"@react-stately/grid@^3.11.5": - version "3.11.5" - resolved "https://registry.yarnpkg.com/@react-stately/grid/-/grid-3.11.5.tgz#1e523cee3048cee0a812050fd5383c4eb3e0c0e3" - integrity sha512-4cNjGYaNkcVS2wZoNHUrMRICBpkHStYw57EVemP7MjiWEVu53kzPgR1Iwmti2WFCpi1Lwu0qWNeCfzKpXW4BTg== +"@react-stately/grid@^3.11.6": + version "3.11.6" + resolved "https://registry.yarnpkg.com/@react-stately/grid/-/grid-3.11.6.tgz#2993450ec5d0602e794f731fd49b3475f57e5547" + integrity sha512-vWPAkzpeTIsrurHfMubzMuqEw7vKzFhIJeEK5sEcLunyr1rlADwTzeWrHNbPMl66NAIAi70Dr1yNq+kahQyvMA== dependencies: - "@react-stately/collections" "^3.12.7" - "@react-stately/selection" "^3.20.5" - "@react-types/grid" "^3.3.5" - "@react-types/shared" "^3.32.0" + "@react-stately/collections" "^3.12.8" + "@react-stately/selection" "^3.20.6" + "@react-types/grid" "^3.3.6" + "@react-types/shared" "^3.32.1" "@swc/helpers" "^0.5.0" -"@react-stately/list@^3.13.0": - version "3.13.0" - resolved "https://registry.yarnpkg.com/@react-stately/list/-/list-3.13.0.tgz#0429c212cbb674d585ec68a3d440300f60021c73" - integrity sha512-Panv8TmaY8lAl3R7CRhyUadhf2yid6VKsRDBCBB1FHQOOeL7lqIraz/oskvpabZincuaIUWqQhqYslC4a6dvuA== +"@react-stately/list@^3.13.1": + version "3.13.1" + resolved "https://registry.yarnpkg.com/@react-stately/list/-/list-3.13.1.tgz#4afd36a87c8fd991a4447d28cc76d51fffddb837" + integrity sha512-eHaoauh21twbcl0kkwULhVJ+CzYcy1jUjMikNVMHOQdhr4WIBdExf7PmSgKHKqsSPhpGg6IpTCY2dUX3RycjDg== dependencies: - "@react-stately/collections" "^3.12.7" - "@react-stately/selection" "^3.20.5" + "@react-stately/collections" "^3.12.8" + "@react-stately/selection" "^3.20.6" "@react-stately/utils" "^3.10.8" - "@react-types/shared" "^3.32.0" + "@react-types/shared" "^3.32.1" "@swc/helpers" "^0.5.0" -"@react-stately/menu@^3.9.7": - version "3.9.7" - resolved "https://registry.yarnpkg.com/@react-stately/menu/-/menu-3.9.7.tgz#f7bab58d8ced5a2e4d960efbaf18dd27b13ac510" - integrity sha512-mfz1YoCgtje61AGxVdQaAFLlOXt9vV5dd1lQljYUPRafA/qu5Ursz4fNVlcavWW9GscebzFQErx+y0oSP7EUtQ== +"@react-stately/menu@^3.9.8": + version "3.9.8" + resolved "https://registry.yarnpkg.com/@react-stately/menu/-/menu-3.9.8.tgz#5c2e781dadc3331bc5b3735fe30bf62616f9145f" + integrity sha512-bo0NOhofnTHLESiYfsSSw6gyXiPVJJ0UlN2igUXtJk5PmyhWjFzUzTzcnd7B028OB0si9w3LIWM3stqz5271Eg== dependencies: - "@react-stately/overlays" "^3.6.19" - "@react-types/menu" "^3.10.4" - "@react-types/shared" "^3.32.0" + "@react-stately/overlays" "^3.6.20" + "@react-types/menu" "^3.10.5" + "@react-types/shared" "^3.32.1" "@swc/helpers" "^0.5.0" -"@react-stately/numberfield@^3.10.1": - version "3.10.1" - resolved "https://registry.yarnpkg.com/@react-stately/numberfield/-/numberfield-3.10.1.tgz#df6c790e56670ede8132e194ddb26a6fc4743bfe" - integrity sha512-lXABmcTneVvXYMGTgZvTCr4E+upOi7VRLL50ZzTMJqHwB/qlEQPAam3dmddQRwIsuCM3MEnL7bSZFFlSYAtkEw== +"@react-stately/numberfield@^3.10.2": + version "3.10.2" + resolved "https://registry.yarnpkg.com/@react-stately/numberfield/-/numberfield-3.10.2.tgz#aa1fcaec84cd441ea5e847dd3e9eca784045be21" + integrity sha512-jlKVFYaH3RX5KvQ7a+SAMQuPccZCzxLkeYkBE64u1Zvi7YhJ8hkTMHG/fmZMbk1rHlseE2wfBdk0Rlya3MvoNQ== dependencies: "@internationalized/number" "^3.6.5" - "@react-stately/form" "^3.2.1" + "@react-stately/form" "^3.2.2" "@react-stately/utils" "^3.10.8" - "@react-types/numberfield" "^3.8.14" + "@react-types/numberfield" "^3.8.15" "@swc/helpers" "^0.5.0" -"@react-stately/overlays@^3.6.19": - version "3.6.19" - resolved "https://registry.yarnpkg.com/@react-stately/overlays/-/overlays-3.6.19.tgz#8c5fbe20cc56c594a13ad19ae1a1ef424e67c954" - integrity sha512-swZXfDvxTYd7tKEpijEHBFFaEmbbnCvEhGlmrAz4K72cuRR9O5u+lcla8y1veGBbBSzrIdKNdBoIIJ+qQH+1TQ== +"@react-stately/overlays@^3.6.20": + version "3.6.20" + resolved "https://registry.yarnpkg.com/@react-stately/overlays/-/overlays-3.6.20.tgz#e638ad0e073b6cf1d27f018aa41a4ce0fbae5f5b" + integrity sha512-YAIe+uI8GUXX8F/0Pzr53YeC5c/bjqbzDFlV8NKfdlCPa6+Jp4B/IlYVjIooBj9+94QvbQdjylegvYWK/iPwlg== dependencies: "@react-stately/utils" "^3.10.8" - "@react-types/overlays" "^3.9.1" + "@react-types/overlays" "^3.9.2" "@swc/helpers" "^0.5.0" -"@react-stately/radio@^3.11.1": - version "3.11.1" - resolved "https://registry.yarnpkg.com/@react-stately/radio/-/radio-3.11.1.tgz#a4c2eb9296699fed7040b97ccdf088d3d6355f66" - integrity sha512-ld9KWztI64gssg7zSZi9li21sG85Exb+wFPXtCim1TtpnEpmRtB05pXDDS3xkkIU/qOL4eMEnnLO7xlNm0CRIA== +"@react-stately/radio@^3.11.2": + version "3.11.2" + resolved "https://registry.yarnpkg.com/@react-stately/radio/-/radio-3.11.2.tgz#a149fb9448dc258441662893f83a70e88e4d4aea" + integrity sha512-UM7L6AW+k8edhSBUEPZAqiWNRNadfOKK7BrCXyBiG79zTz0zPcXRR+N+gzkDn7EMSawDeyK1SHYUuoSltTactg== dependencies: - "@react-stately/form" "^3.2.1" + "@react-stately/form" "^3.2.2" "@react-stately/utils" "^3.10.8" - "@react-types/radio" "^3.9.1" - "@react-types/shared" "^3.32.0" + "@react-types/radio" "^3.9.2" + "@react-types/shared" "^3.32.1" "@swc/helpers" "^0.5.0" -"@react-stately/searchfield@^3.5.15": - version "3.5.15" - resolved "https://registry.yarnpkg.com/@react-stately/searchfield/-/searchfield-3.5.15.tgz#683b1f8a5726e0637a7c8f19fbe6c0f270bfb75e" - integrity sha512-6LVVvm6Z60fetYLLa4B2Q/BIY+fSSknLTw8sjlV+iDEPAknj7MqWtoLz2gSQRTFKvyO7ZCjJoar8ZU/JEqcm+w== +"@react-stately/searchfield@^3.5.16": + version "3.5.16" + resolved "https://registry.yarnpkg.com/@react-stately/searchfield/-/searchfield-3.5.16.tgz#3b768870d08fa2ef7747513d02d167717961d548" + integrity sha512-MRfqT1lZ24r94GuFNcGJXsfijZoWjSMySCT60T6NXtbOzVPuAF3K+pL70Rayq/EWLJjS2NPHND11VTs0VdcE0Q== dependencies: "@react-stately/utils" "^3.10.8" - "@react-types/searchfield" "^3.6.5" + "@react-types/searchfield" "^3.6.6" "@swc/helpers" "^0.5.0" -"@react-stately/select@^3.7.1": - version "3.7.1" - resolved "https://registry.yarnpkg.com/@react-stately/select/-/select-3.7.1.tgz#2bb1a52f345b301a3073aa62dba4934697b5bf0c" - integrity sha512-vZt4j9yVyOTWWJoP9plXmYaPZH2uMxbjcGMDbiShwsFiK8C2m9b3Cvy44TZehfzCWzpMVR/DYxEYuonEIGA82Q== +"@react-stately/select@^3.8.0": + version "3.8.0" + resolved "https://registry.yarnpkg.com/@react-stately/select/-/select-3.8.0.tgz#ccb1b7d6d0f40b166444f3df27273892854ff23e" + integrity sha512-A721nlt0DSCDit0wKvhcrXFTG5Vv1qkEVkeKvobmETZy6piKvwh0aaN8iQno5AFuZaj1iOZeNjZ/20TsDJR/4A== dependencies: - "@react-stately/form" "^3.2.1" - "@react-stately/list" "^3.13.0" - "@react-stately/overlays" "^3.6.19" - "@react-types/select" "^3.10.1" - "@react-types/shared" "^3.32.0" - "@swc/helpers" "^0.5.0" - -"@react-stately/selection@^3.20.5": - version "3.20.5" - resolved "https://registry.yarnpkg.com/@react-stately/selection/-/selection-3.20.5.tgz#11f4fae7b6038ca167a9bd1513a57c353d308bbd" - integrity sha512-YezWUNEn2pz5mQlbhmngiX9HqQsruLSXlkrAzB1DD6aliGrUvPKufTTGCixOaB8KVeCamdiFAgx1WomNplzdQA== - dependencies: - "@react-stately/collections" "^3.12.7" + "@react-stately/form" "^3.2.2" + "@react-stately/list" "^3.13.1" + "@react-stately/overlays" "^3.6.20" "@react-stately/utils" "^3.10.8" - "@react-types/shared" "^3.32.0" + "@react-types/select" "^3.11.0" + "@react-types/shared" "^3.32.1" "@swc/helpers" "^0.5.0" -"@react-stately/slider@^3.7.1": - version "3.7.1" - resolved "https://registry.yarnpkg.com/@react-stately/slider/-/slider-3.7.1.tgz#14f7b995eec95c3b25baa270480547afd4d62d51" - integrity sha512-J+G18m1bZBCNQSXhxGd4GNGDUVonv4Sg7fZL+uLhXUy1x71xeJfFdKaviVvZcggtl0/q5InW41PXho7EouMDEg== +"@react-stately/selection@^3.20.6": + version "3.20.6" + resolved "https://registry.yarnpkg.com/@react-stately/selection/-/selection-3.20.6.tgz#17d4d4553403de6ab690172a8d36e0423a5173fb" + integrity sha512-a0bjuP2pJYPKEiedz2Us1W1aSz0iHRuyeQEdBOyL6Z6VUa6hIMq9H60kvseir2T85cOa4QggizuRV7mcO6bU5w== + dependencies: + "@react-stately/collections" "^3.12.8" + "@react-stately/utils" "^3.10.8" + "@react-types/shared" "^3.32.1" + "@swc/helpers" "^0.5.0" + +"@react-stately/slider@^3.7.2": + version "3.7.2" + resolved "https://registry.yarnpkg.com/@react-stately/slider/-/slider-3.7.2.tgz#9dfe6f7e74397f717b1623bc06ba8e375510d056" + integrity sha512-EVBHUdUYwj++XqAEiQg2fGi8Reccznba0uyQ3gPejF0pAc390Q/J5aqiTEDfiCM7uJ6WHxTM6lcCqHQBISk2dQ== dependencies: "@react-stately/utils" "^3.10.8" - "@react-types/shared" "^3.32.0" - "@react-types/slider" "^3.8.1" + "@react-types/shared" "^3.32.1" + "@react-types/slider" "^3.8.2" "@swc/helpers" "^0.5.0" -"@react-stately/table@^3.15.0": - version "3.15.0" - resolved "https://registry.yarnpkg.com/@react-stately/table/-/table-3.15.0.tgz#eb84fcf530140fb2e269c22cef21bd3c3b1da1e2" - integrity sha512-KbvkrVF3sb25IPwyte9JcG5/4J7TgjHSsw7D61d/T/oUFMYPYVeolW9/2y+6u48WPkDJE8HJsurme+HbTN0FQA== +"@react-stately/table@^3.15.1": + version "3.15.1" + resolved "https://registry.yarnpkg.com/@react-stately/table/-/table-3.15.1.tgz#3a2f5ca0788cea200c4c96858604fb4c0139f8b0" + integrity sha512-MhMAgE/LgAzHcAn1P3p/nQErzJ6DiixSJ1AOt2JlnAKEb5YJg4ATKWCb2IjBLwywt9ZCzfm3KMUzkctZqAoxwA== dependencies: - "@react-stately/collections" "^3.12.7" + "@react-stately/collections" "^3.12.8" "@react-stately/flags" "^3.1.2" - "@react-stately/grid" "^3.11.5" - "@react-stately/selection" "^3.20.5" + "@react-stately/grid" "^3.11.6" + "@react-stately/selection" "^3.20.6" "@react-stately/utils" "^3.10.8" - "@react-types/grid" "^3.3.5" - "@react-types/shared" "^3.32.0" - "@react-types/table" "^3.13.3" + "@react-types/grid" "^3.3.6" + "@react-types/shared" "^3.32.1" + "@react-types/table" "^3.13.4" "@swc/helpers" "^0.5.0" -"@react-stately/tabs@^3.8.5": - version "3.8.5" - resolved "https://registry.yarnpkg.com/@react-stately/tabs/-/tabs-3.8.5.tgz#2447fd3aba1ea05ce9536f3626f9bdafb97bfd67" - integrity sha512-gdeI+NUH3hfqrxkJQSZkt+Zw4G2DrYJRloq/SGxu/9Bu5QD/U0psU2uqxQNtavW5qTChFK+D30rCPXpKlslWAA== +"@react-stately/tabs@^3.8.6": + version "3.8.6" + resolved "https://registry.yarnpkg.com/@react-stately/tabs/-/tabs-3.8.6.tgz#c71e3ed2462d89ad9c06fb78c69b2069625c68fd" + integrity sha512-9RYxmgjVIxUpIsGKPIF7uRoHWOEz8muwaYiStCVeyiYBPmarvZoIYtTXcwSMN/vEs7heVN5uGCL6/bfdY4+WiA== dependencies: - "@react-stately/list" "^3.13.0" - "@react-types/shared" "^3.32.0" - "@react-types/tabs" "^3.3.18" + "@react-stately/list" "^3.13.1" + "@react-types/shared" "^3.32.1" + "@react-types/tabs" "^3.3.19" "@swc/helpers" "^0.5.0" "@react-stately/toast@^3.1.2": @@ -6160,34 +4477,34 @@ "@swc/helpers" "^0.5.0" use-sync-external-store "^1.4.0" -"@react-stately/toggle@^3.9.1": - version "3.9.1" - resolved "https://registry.yarnpkg.com/@react-stately/toggle/-/toggle-3.9.1.tgz#ae706abfebce11989ea370cdf54e821b70b6672f" - integrity sha512-L6yUdE8xZfQhw4aEFZduF8u4v0VrpYrwWEA4Tu/4qwGIPukH0wd2W21Zpw+vAiLOaDKnxel1nXX68MWnm4QXpw== - dependencies: - "@react-stately/utils" "^3.10.8" - "@react-types/checkbox" "^3.10.1" - "@react-types/shared" "^3.32.0" - "@swc/helpers" "^0.5.0" - -"@react-stately/tooltip@^3.5.7": - version "3.5.7" - resolved "https://registry.yarnpkg.com/@react-stately/tooltip/-/tooltip-3.5.7.tgz#7c86942a8b5ee2fad890c09e01718a4939694e7f" - integrity sha512-GYh764BcYZz+Lclyutyir5I3elNo+vVNYzeNOKmPGZCE3p5B+/8lgZAHKxnRc9qmBlxvofnhMcuQxAPlBhoEkw== - dependencies: - "@react-stately/overlays" "^3.6.19" - "@react-types/tooltip" "^3.4.20" - "@swc/helpers" "^0.5.0" - -"@react-stately/tree@^3.9.2": +"@react-stately/toggle@^3.9.2": version "3.9.2" - resolved "https://registry.yarnpkg.com/@react-stately/tree/-/tree-3.9.2.tgz#f9960d7e6a5418a637ad9ea17e607308fcd393e5" - integrity sha512-jsT1WZZhb7GRmg1iqoib9bULsilIK5KhbE8WrcfIml8NYr4usP4DJMcIYfRuiRtPLhKtUvHSoZ5CMbinPp8PUQ== + resolved "https://registry.yarnpkg.com/@react-stately/toggle/-/toggle-3.9.2.tgz#8a50def68efdcefa268a870deda8bb65e5f054a8" + integrity sha512-dOxs9wrVXHUmA7lc8l+N9NbTJMAaXcYsnNGsMwfXIXQ3rdq+IjWGNYJ52UmNQyRYFcg0jrzRrU16TyGbNjOdNQ== dependencies: - "@react-stately/collections" "^3.12.7" - "@react-stately/selection" "^3.20.5" "@react-stately/utils" "^3.10.8" - "@react-types/shared" "^3.32.0" + "@react-types/checkbox" "^3.10.2" + "@react-types/shared" "^3.32.1" + "@swc/helpers" "^0.5.0" + +"@react-stately/tooltip@^3.5.8": + version "3.5.8" + resolved "https://registry.yarnpkg.com/@react-stately/tooltip/-/tooltip-3.5.8.tgz#c4a329c63294e8ccae3d9ee7853d40c2fb93ce73" + integrity sha512-gkcUx2ROhCiGNAYd2BaTejakXUUNLPnnoJ5+V/mN480pN+OrO8/2V9pqb/IQmpqxLsso93zkM3A4wFHHLBBmPQ== + dependencies: + "@react-stately/overlays" "^3.6.20" + "@react-types/tooltip" "^3.4.21" + "@swc/helpers" "^0.5.0" + +"@react-stately/tree@^3.9.3": + version "3.9.3" + resolved "https://registry.yarnpkg.com/@react-stately/tree/-/tree-3.9.3.tgz#398de3406d2a06477bb0af2bdb2a0021265eeade" + integrity sha512-ZngG79nLFxE/GYmpwX6E/Rma2MMkzdoJPRI3iWk3dgqnGMMzpPnUp/cvjDsU3UHF7xDVusC5BT6pjWN0uxCIFQ== + dependencies: + "@react-stately/collections" "^3.12.8" + "@react-stately/selection" "^3.20.6" + "@react-stately/utils" "^3.10.8" + "@react-types/shared" "^3.32.1" "@swc/helpers" "^0.5.0" "@react-stately/utils@^3.10.8": @@ -6197,322 +4514,211 @@ dependencies: "@swc/helpers" "^0.5.0" -"@react-types/breadcrumbs@^3.7.16": - version "3.7.16" - resolved "https://registry.yarnpkg.com/@react-types/breadcrumbs/-/breadcrumbs-3.7.16.tgz#f9842047a1e7b4eac9d2ea911fd35e221d2a192f" - integrity sha512-4J+7b9y6z8QGZqvsBSWQfebx6aIbc+1unQqnZCAlJl9EGzlI6SGdXRsURGkOUGJCV2GqY8bSocc8AZbRXpQ0XQ== +"@react-types/breadcrumbs@^3.7.17": + version "3.7.17" + resolved "https://registry.yarnpkg.com/@react-types/breadcrumbs/-/breadcrumbs-3.7.17.tgz#e584352cc4f79e638e20774af04f28064cd9b66b" + integrity sha512-IhvVTcfli5o/UDlGACXxjlor2afGlMQA8pNR3faH0bBUay1Fmm3IWktVw9Xwmk+KraV2RTAg9e+E6p8DOQZfiw== dependencies: - "@react-types/link" "^3.6.4" - "@react-types/shared" "^3.32.0" + "@react-types/link" "^3.6.5" + "@react-types/shared" "^3.32.1" -"@react-types/button@^3.14.0": - version "3.14.0" - resolved "https://registry.yarnpkg.com/@react-types/button/-/button-3.14.0.tgz#8b7d1387960bd81ff2c0aa5565d3fb407f6a59b2" - integrity sha512-pXt1a+ElxiZyWpX0uznyjy5Z6EHhYxPcaXpccZXyn6coUo9jmCbgg14xR7Odo+JcbfaaISzZTDO7oGLVTcHnpA== +"@react-types/button@^3.14.1": + version "3.14.1" + resolved "https://registry.yarnpkg.com/@react-types/button/-/button-3.14.1.tgz#41c25f7c7dd1b31a359a6af9cbec5bed5dbb5aa1" + integrity sha512-D8C4IEwKB7zEtiWYVJ3WE/5HDcWlze9mLWQ5hfsBfpePyWCgO3bT/+wjb/7pJvcAocrkXo90QrMm85LcpBtrpg== dependencies: - "@react-types/shared" "^3.32.0" + "@react-types/shared" "^3.32.1" -"@react-types/calendar@^3.7.4": - version "3.7.4" - resolved "https://registry.yarnpkg.com/@react-types/calendar/-/calendar-3.7.4.tgz#8a630b75ce081bb656620ec64204a2b0b27ba84d" - integrity sha512-MZDyXtvdHl8CKQGYBkjYwc4ABBq6Mb4Fu7k/4boQAmMQ5Rtz29ouBCJrAs0BpR14B8ZMGzoNIolxS5RLKBmFSA== +"@react-types/calendar@^3.8.0": + version "3.8.0" + resolved "https://registry.yarnpkg.com/@react-types/calendar/-/calendar-3.8.0.tgz#51dad3445586f1c22886c35499cfcc872462a30f" + integrity sha512-ZDZgfZgbz1ydWOFs1mH7QFfX3ioJrmb3Y/lkoubQE0HWXLZzyYNvhhKyFJRS1QJ40IofLSBHriwbQb/tsUnGlw== dependencies: - "@internationalized/date" "^3.9.0" - "@react-types/shared" "^3.32.0" + "@internationalized/date" "^3.10.0" + "@react-types/shared" "^3.32.1" -"@react-types/checkbox@^3.10.1": - version "3.10.1" - resolved "https://registry.yarnpkg.com/@react-types/checkbox/-/checkbox-3.10.1.tgz#6cd2e7dd4e27ba017593b8140d0571afcf2b7114" - integrity sha512-8ZqBoGBxtn6U/znpmyutGtBBaafUzcZnbuvYjwyRSONTrqQ0IhUq6jI/jbnE9r9SslIkbMB8IS1xRh2e63qmEQ== +"@react-types/checkbox@^3.10.2": + version "3.10.2" + resolved "https://registry.yarnpkg.com/@react-types/checkbox/-/checkbox-3.10.2.tgz#0190c9690e3649348a4d7045b168cbda657ce9de" + integrity sha512-ktPkl6ZfIdGS1tIaGSU/2S5Agf2NvXI9qAgtdMDNva0oLyAZ4RLQb6WecPvofw1J7YKXu0VA5Mu7nlX+FM2weQ== dependencies: - "@react-types/shared" "^3.32.0" + "@react-types/shared" "^3.32.1" -"@react-types/color@^3.1.1": - version "3.1.1" - resolved "https://registry.yarnpkg.com/@react-types/color/-/color-3.1.1.tgz#18b4d809703bb37efbf96f0b11b2335a3c252edd" - integrity sha512-zBF1Op4AO3mlygUq2gFhEoK3gZp2HgwCMUKkCzoDbrvcaahhVbDbfhRxgXKM/2dg7WkgsqhokdkjYV2mGQadRQ== +"@react-types/color@^3.1.2": + version "3.1.2" + resolved "https://registry.yarnpkg.com/@react-types/color/-/color-3.1.2.tgz#06a0e81b463f3a8d4553e7cd535b2881d721e231" + integrity sha512-NP0TAY3j4tlMztOp/bBfMlPwC9AQKTjSiTFmc2oQNkx5M4sl3QpPqFPosdt7jZ8M4nItvfCWZrlZGjST4SB83A== dependencies: - "@react-types/shared" "^3.32.0" - "@react-types/slider" "^3.8.1" + "@react-types/shared" "^3.32.1" + "@react-types/slider" "^3.8.2" -"@react-types/combobox@^3.13.8": - version "3.13.8" - resolved "https://registry.yarnpkg.com/@react-types/combobox/-/combobox-3.13.8.tgz#de88e8eb51ec057f5004630668f910e1afd11c96" - integrity sha512-HGC3X9hmDRsjSZcFiflvJ7vbIgQ2gX/ZDxo1HVtvQqUDbgQCVakCcCdrB44aYgHFnyDiO6hyp7Y7jXtDBaEIIA== +"@react-types/combobox@^3.13.9": + version "3.13.9" + resolved "https://registry.yarnpkg.com/@react-types/combobox/-/combobox-3.13.9.tgz#58bc5c39ca1d7bdbb4beebf79d2ba11b337e927f" + integrity sha512-G6GmLbzVkLW6VScxPAr/RtliEyPhBClfYaIllK1IZv+Z42SVnOpKzhnoe79BpmiFqy1AaC3+LjZX783mrsHCwA== dependencies: - "@react-types/shared" "^3.32.0" + "@react-types/shared" "^3.32.1" -"@react-types/datepicker@^3.13.1": - version "3.13.1" - resolved "https://registry.yarnpkg.com/@react-types/datepicker/-/datepicker-3.13.1.tgz#488989d4ff7605cf80af6fb0d31cb227456201d2" - integrity sha512-ub+g5pS3WOo5P/3FRNsQSwvlb9CuLl2m6v6KBkRXc5xqKhFd7UjvVpL6Oi/1zwwfow4itvD1t7l1XxgCo7wZ6Q== +"@react-types/datepicker@^3.13.2": + version "3.13.2" + resolved "https://registry.yarnpkg.com/@react-types/datepicker/-/datepicker-3.13.2.tgz#775e43b6edcb8d3d5968e0a35cfacd14be3c847c" + integrity sha512-+M6UZxJnejYY8kz0spbY/hP08QJ5rsZ3aNarRQQHc48xV2oelFLX5MhAqizfLEsvyfb0JYrhWoh4z1xZtAmYCg== dependencies: - "@internationalized/date" "^3.9.0" - "@react-types/calendar" "^3.7.4" - "@react-types/overlays" "^3.9.1" - "@react-types/shared" "^3.32.0" + "@internationalized/date" "^3.10.0" + "@react-types/calendar" "^3.8.0" + "@react-types/overlays" "^3.9.2" + "@react-types/shared" "^3.32.1" -"@react-types/dialog@^3.5.21": - version "3.5.21" - resolved "https://registry.yarnpkg.com/@react-types/dialog/-/dialog-3.5.21.tgz#f47302e0a15e75dfe57e868f3496f5c0a0cecd7b" - integrity sha512-jF1gN4bvwYamsLjefaFDnaSKxTa3Wtvn5f7WLjNVZ8ICVoiMBMdUJXTlPQHAL4YWqtCj4hK/3uimR1E+Pwd7Xw== +"@react-types/dialog@^3.5.22": + version "3.5.22" + resolved "https://registry.yarnpkg.com/@react-types/dialog/-/dialog-3.5.22.tgz#ed772c303042c6ee5e8a9bc9e58b5b9d08ed634b" + integrity sha512-smSvzOcqKE196rWk0oqJDnz+ox5JM5+OT0PmmJXiUD4q7P5g32O6W5Bg7hMIFUI9clBtngo8kLaX2iMg+GqAzg== dependencies: - "@react-types/overlays" "^3.9.1" - "@react-types/shared" "^3.32.0" + "@react-types/overlays" "^3.9.2" + "@react-types/shared" "^3.32.1" -"@react-types/grid@^3.3.5": - version "3.3.5" - resolved "https://registry.yarnpkg.com/@react-types/grid/-/grid-3.3.5.tgz#5764d4fed4a7f2a721bd77d1043e27686c5dbeee" - integrity sha512-hG6J2KDfmOHitkWoCa/9DvY1nTO2wgMIApcFoqLv7AWJr9CzvVqo5tIhZZCXiT1AvU2kafJxu9e7sr5GxAT2YA== +"@react-types/grid@^3.3.6": + version "3.3.6" + resolved "https://registry.yarnpkg.com/@react-types/grid/-/grid-3.3.6.tgz#9fc60f5baa8a1668bb2257a981dd514dd64706c3" + integrity sha512-vIZJlYTii2n1We9nAugXwM2wpcpsC6JigJFBd6vGhStRdRWRoU4yv1Gc98Usbx0FQ/J7GLVIgeG8+1VMTKBdxw== dependencies: - "@react-types/shared" "^3.32.0" + "@react-types/shared" "^3.32.1" -"@react-types/link@^3.6.4": - version "3.6.4" - resolved "https://registry.yarnpkg.com/@react-types/link/-/link-3.6.4.tgz#99d6cc04e0d5e768c51dc1261fceeecf47557234" - integrity sha512-eLpIgOPf7GW4DpdMq8UqiRJkriend1kWglz5O9qU+/FM6COtvRnQkEeRhHICUaU2NZUvMRQ30KaGUo3eeZ6b+g== - dependencies: - "@react-types/shared" "^3.32.0" - -"@react-types/listbox@^3.7.3": - version "3.7.3" - resolved "https://registry.yarnpkg.com/@react-types/listbox/-/listbox-3.7.3.tgz#20946c0fd253be35e83180b21bd27676553ad0a3" - integrity sha512-ONgror9uyGmIer5XxpRRNcc8QFVWiOzINrMKyaS8G4l3aP52ZwYpRfwMAVtra8lkVNvXDmO7hthPZkB6RYdNOA== - dependencies: - "@react-types/shared" "^3.32.0" - -"@react-types/menu@^3.10.4": - version "3.10.4" - resolved "https://registry.yarnpkg.com/@react-types/menu/-/menu-3.10.4.tgz#57c0259b149f80fde9230cc1a494d6ac581d09b4" - integrity sha512-jCFVShLq3eASiuznenjoKBv3j0Jy2KQilAjBxdEp56WkZ5D338y/oY5zR6d25u9M0QslpI0DgwC8BwU7MCsPnw== - dependencies: - "@react-types/overlays" "^3.9.1" - "@react-types/shared" "^3.32.0" - -"@react-types/meter@^3.4.12": - version "3.4.12" - resolved "https://registry.yarnpkg.com/@react-types/meter/-/meter-3.4.12.tgz#86d08d7ce462eb57127f562280b7a26ce0efa1a4" - integrity sha512-rx+yrwdesSabPworWRMpQnuT69gm8xt58cAfTDV9eSY1Jo+lO5OPp0OIyKb+U0q/whf60wnn2hsVnXm2fBXKhA== - dependencies: - "@react-types/progress" "^3.5.15" - -"@react-types/numberfield@^3.8.14": - version "3.8.14" - resolved "https://registry.yarnpkg.com/@react-types/numberfield/-/numberfield-3.8.14.tgz#5a71fed846853176b262c4192025fd18157257dc" - integrity sha512-tlGEHJyeQSMlUoO4g9ekoELGJcqsjc/+/FAxo6YQMhQSkuIdkUKZg3UEBKzif4hLw787u80e1D0SxPUi3KO2oA== - dependencies: - "@react-types/shared" "^3.32.0" - -"@react-types/overlays@^3.9.1": - version "3.9.1" - resolved "https://registry.yarnpkg.com/@react-types/overlays/-/overlays-3.9.1.tgz#b6e750d6e4bcf3aaf38fa8a5f69a817f37840934" - integrity sha512-UCG3TOu8FLk4j0Pr1nlhv0opcwMoqbGEOUvsSr6ITN6Qs2y0j+KYSYQ7a4+04m3dN//8+9Wjkkid8k+V1dV2CA== - dependencies: - "@react-types/shared" "^3.32.0" - -"@react-types/progress@^3.5.15": - version "3.5.15" - resolved "https://registry.yarnpkg.com/@react-types/progress/-/progress-3.5.15.tgz#f676d003b9595d216a831eed58966ed91ceb305c" - integrity sha512-3SYvEyRt7vq7w0sc6wBYmkPqLMZbhH8FI3Lrnn9r3y8+69/efRjVmmJvwjm1z+c6rukszc2gCjUGTsMPQxVk2w== - dependencies: - "@react-types/shared" "^3.32.0" - -"@react-types/radio@^3.9.1": - version "3.9.1" - resolved "https://registry.yarnpkg.com/@react-types/radio/-/radio-3.9.1.tgz#4d37e935cd3cc482a5dfaf92cf51068f07e70750" - integrity sha512-DUCN3msm8QZ0MJrP55FmqMONaadYq6JTxihYFGMLP+NoKRnkxvXqNZ2PlkAOLGy3y4RHOnOF8O1LuJqFCCuxDw== - dependencies: - "@react-types/shared" "^3.32.0" - -"@react-types/searchfield@^3.6.5": +"@react-types/link@^3.6.5": version "3.6.5" - resolved "https://registry.yarnpkg.com/@react-types/searchfield/-/searchfield-3.6.5.tgz#de43905d990104d640cc507c728e5e12cd1013cf" - integrity sha512-5hI+Hb1U0bSxrJLvEwFEQfk7n3S+GO4c5W/0WZBG00YlYDY9asr1V0oU1WRmKPJJlRpyfG6PkMHDC3jhdj89ew== + resolved "https://registry.yarnpkg.com/@react-types/link/-/link-3.6.5.tgz#28cf2b90f69e83af7ff507021eec0449f148eb45" + integrity sha512-+I2s3XWBEvLrzts0GnNeA84mUkwo+a7kLUWoaJkW0TOBDG7my95HFYxF9WnqKye7NgpOkCqz4s3oW96xPdIniQ== dependencies: - "@react-types/shared" "^3.32.0" - "@react-types/textfield" "^3.12.5" + "@react-types/shared" "^3.32.1" -"@react-types/select@^3.10.1": - version "3.10.1" - resolved "https://registry.yarnpkg.com/@react-types/select/-/select-3.10.1.tgz#4c19deb68250233d1acffc929b0beb1b04de2dd0" - integrity sha512-teANUr1byOzGsS/r2j7PatV470JrOhKP8En9lscfnqW5CeUghr+0NxkALnPkiEhCObi/Vu8GIcPareD0HNhtFA== +"@react-types/listbox@^3.7.4": + version "3.7.4" + resolved "https://registry.yarnpkg.com/@react-types/listbox/-/listbox-3.7.4.tgz#712329de62c0fddf44c062bb18c51135309c9fe8" + integrity sha512-p4YEpTl/VQGrqVE8GIfqTS5LkT5jtjDTbVeZgrkPnX/fiPhsfbTPiZ6g0FNap4+aOGJFGEEZUv2q4vx+rCORww== dependencies: - "@react-types/shared" "^3.32.0" + "@react-types/shared" "^3.32.1" -"@react-types/shared@^3.32.0": - version "3.32.0" - resolved "https://registry.yarnpkg.com/@react-types/shared/-/shared-3.32.0.tgz#6c105ef05e1bd84ab04531e707074dc2a0b3ce07" - integrity sha512-t+cligIJsZYFMSPFMvsJMjzlzde06tZMOIOFa1OV5Z0BcMowrb2g4mB57j/9nP28iJIRYn10xCniQts+qadrqQ== - -"@react-types/slider@^3.8.1": - version "3.8.1" - resolved "https://registry.yarnpkg.com/@react-types/slider/-/slider-3.8.1.tgz#e2b1a11491cb6957584dc725513e574eddde4105" - integrity sha512-WxiQWj6iQr5Uft0/KcB9XSr361XnyTmL6eREZZacngA9CjPhRWYP3BRDPcCTuP7fj9Yi4QKMrryyjHqMHP8OKQ== +"@react-types/menu@^3.10.5": + version "3.10.5" + resolved "https://registry.yarnpkg.com/@react-types/menu/-/menu-3.10.5.tgz#0e3a66aab3c636dc3ef965529640bb678b13a431" + integrity sha512-HBTrKll2hm0VKJNM4ubIv1L9MNo8JuOnm2G3M+wXvb6EYIyDNxxJkhjsqsGpUXJdAOSkacHBDcNh2HsZABNX4A== dependencies: - "@react-types/shared" "^3.32.0" + "@react-types/overlays" "^3.9.2" + "@react-types/shared" "^3.32.1" -"@react-types/switch@^3.5.14": - version "3.5.14" - resolved "https://registry.yarnpkg.com/@react-types/switch/-/switch-3.5.14.tgz#827e841b5f8948569650f7bac1784c685a7ab21e" - integrity sha512-M8kIv97i+ejCel4Ho+Y7tDbpOehymGwPA4ChxibeyD32+deyxu5B6BXxgKiL3l+oTLQ8ihLo3sRESdPFw8vpQg== +"@react-types/meter@^3.4.13": + version "3.4.13" + resolved "https://registry.yarnpkg.com/@react-types/meter/-/meter-3.4.13.tgz#ddd54e1d56a9af79646d832a3cf4a8979e473ead" + integrity sha512-EiarfbpHcvmeyXvXcr6XLaHkNHuGc4g7fBVEiDPwssFJKKfbUzqnnknDxPjyspqUVRcXC08CokS98J1jYobqDg== dependencies: - "@react-types/shared" "^3.32.0" + "@react-types/progress" "^3.5.16" -"@react-types/table@^3.13.3": - version "3.13.3" - resolved "https://registry.yarnpkg.com/@react-types/table/-/table-3.13.3.tgz#83fb11c63e71e726a63246dd3d12caa7c97e90d7" - integrity sha512-/kY/VlXN+8l9saySd6igcsDQ3x8pOVFJAWyMh6gOaOVN7HOJkTMIchmqS+ATa4nege8jZqcdzyGeAmv7mN655A== +"@react-types/numberfield@^3.8.15": + version "3.8.15" + resolved "https://registry.yarnpkg.com/@react-types/numberfield/-/numberfield-3.8.15.tgz#0fcd77217bae5d7a2bf35d41c7eb61d8ae52bc03" + integrity sha512-97r92D23GKCOjGIGMeW9nt+/KlfM3GeWH39Czcmd2/D5y3k6z4j0avbsfx2OttCtJszrnENjw3GraYGYI2KosQ== dependencies: - "@react-types/grid" "^3.3.5" - "@react-types/shared" "^3.32.0" + "@react-types/shared" "^3.32.1" -"@react-types/tabs@^3.3.18": - version "3.3.18" - resolved "https://registry.yarnpkg.com/@react-types/tabs/-/tabs-3.3.18.tgz#c84bf3d113d606d2af8ba52f5465e8b6bb61b707" - integrity sha512-yX/AVlGS7VXCuy2LSm8y8nxUrKVBgnLv+FrtkLqf6jUMtD4KP3k1c4+GPHeScR0HcYzCQF7gCF3Skba1RdYoug== +"@react-types/overlays@^3.9.2": + version "3.9.2" + resolved "https://registry.yarnpkg.com/@react-types/overlays/-/overlays-3.9.2.tgz#721dc248afcb42db988391037a6386bb61556cd4" + integrity sha512-Q0cRPcBGzNGmC8dBuHyoPR7N3057KTS5g+vZfQ53k8WwmilXBtemFJPLsogJbspuewQ/QJ3o2HYsp2pne7/iNw== dependencies: - "@react-types/shared" "^3.32.0" + "@react-types/shared" "^3.32.1" -"@react-types/textfield@^3.12.5": - version "3.12.5" - resolved "https://registry.yarnpkg.com/@react-types/textfield/-/textfield-3.12.5.tgz#b9b4cd1b8f8b907d756c8323fb7fc2ac5b39a225" - integrity sha512-VXez8KIcop87EgIy00r+tb30xokA309TfJ32Qv5qOYB5SMqoHnb6SYvWL8Ih2PDqCo5eBiiGesSaWYrHnRIL8Q== +"@react-types/progress@^3.5.16": + version "3.5.16" + resolved "https://registry.yarnpkg.com/@react-types/progress/-/progress-3.5.16.tgz#f40e1b674e630276d6412297a92eb0dd3761d426" + integrity sha512-I9tSdCFfvQ7gHJtm90VAKgwdTWXQgVNvLRStEc0z9h+bXBxdvZb+QuiRPERChwFQ9VkK4p4rDqaFo69nDqWkpw== dependencies: - "@react-types/shared" "^3.32.0" + "@react-types/shared" "^3.32.1" -"@react-types/tooltip@^3.4.20": - version "3.4.20" - resolved "https://registry.yarnpkg.com/@react-types/tooltip/-/tooltip-3.4.20.tgz#af71dde12afb8a33a7b5bb3d8ff0cda6c4ee3999" - integrity sha512-tF1yThwvgSgW8Gu/CLL0p92AUldHR6szlwhwW+ewT318sQlfabMGO4xlCNFdxJYtqTpEXk2rlaVrBuaC//du0w== +"@react-types/radio@^3.9.2": + version "3.9.2" + resolved "https://registry.yarnpkg.com/@react-types/radio/-/radio-3.9.2.tgz#c6ac396b49cc03334e4bb63a96f366effce3a615" + integrity sha512-3UcJXu37JrTkRyP4GJPDBU7NmDTInrEdOe+bVzA1j4EegzdkJmLBkLg5cLDAbpiEHB+xIsvbJdx6dxeMuc+H3g== dependencies: - "@react-types/overlays" "^3.9.1" - "@react-types/shared" "^3.32.0" + "@react-types/shared" "^3.32.1" + +"@react-types/searchfield@^3.6.6": + version "3.6.6" + resolved "https://registry.yarnpkg.com/@react-types/searchfield/-/searchfield-3.6.6.tgz#fd41bd78246789ac4284462abe222b6f85d191b2" + integrity sha512-cl3itr/fk7wbIQc2Gz5Ie8aVeUmPjVX/mRGS5/EXlmzycAKNYTvqf2mlxwObLndtLISmt7IgNjRRhbUUDI8Ang== + dependencies: + "@react-types/shared" "^3.32.1" + "@react-types/textfield" "^3.12.6" + +"@react-types/select@^3.11.0": + version "3.11.0" + resolved "https://registry.yarnpkg.com/@react-types/select/-/select-3.11.0.tgz#808aec480f0cc20075953af9717ca38d1eb15b8d" + integrity sha512-SzIsMFVPCbXE1Z1TLfpdfiwJ1xnIkcL1/CjGilmUKkNk5uT7rYX1xCJqWCjXI0vAU1xM4Qn+T3n8de4fw6HRBg== + dependencies: + "@react-types/shared" "^3.32.1" + +"@react-types/shared@^3.32.1": + version "3.32.1" + resolved "https://registry.yarnpkg.com/@react-types/shared/-/shared-3.32.1.tgz#abfeb839d65d0abe923576f34ac08342c25dfa55" + integrity sha512-famxyD5emrGGpFuUlgOP6fVW2h/ZaF405G5KDi3zPHzyjAWys/8W6NAVJtNbkCkhedmvL0xOhvt8feGXyXaw5w== + +"@react-types/slider@^3.8.2": + version "3.8.2" + resolved "https://registry.yarnpkg.com/@react-types/slider/-/slider-3.8.2.tgz#37e02c42514aca842954c715082d1ae06a661ee4" + integrity sha512-MQYZP76OEOYe7/yA2To+Dl0LNb0cKKnvh5JtvNvDnAvEprn1RuLiay8Oi/rTtXmc2KmBa4VdTcsXsmkbbkeN2Q== + dependencies: + "@react-types/shared" "^3.32.1" + +"@react-types/switch@^3.5.15": + version "3.5.15" + resolved "https://registry.yarnpkg.com/@react-types/switch/-/switch-3.5.15.tgz#43806d6e7034d1d07e20c89ec9618e607fef9e62" + integrity sha512-r/ouGWQmIeHyYSP1e5luET+oiR7N7cLrAlWsrAfYRWHxqXOSNQloQnZJ3PLHrKFT02fsrQhx2rHaK2LfKeyN3A== + dependencies: + "@react-types/shared" "^3.32.1" + +"@react-types/table@^3.13.4": + version "3.13.4" + resolved "https://registry.yarnpkg.com/@react-types/table/-/table-3.13.4.tgz#c3d5952d4bd2a04992255850538856829b12c99a" + integrity sha512-I/DYiZQl6aNbMmjk90J9SOhkzVDZvyA3Vn3wMWCiajkMNjvubFhTfda5DDf2SgFP5l0Yh6TGGH5XumRv9LqL5Q== + dependencies: + "@react-types/grid" "^3.3.6" + "@react-types/shared" "^3.32.1" + +"@react-types/tabs@^3.3.19": + version "3.3.19" + resolved "https://registry.yarnpkg.com/@react-types/tabs/-/tabs-3.3.19.tgz#344a22bd15400b738aebc26918cf96dacde1ffef" + integrity sha512-fE+qI43yR5pAMpeqPxGqQq9jDHXEPqXskuxNHERMW0PYMdPyem2Cw6goc5F4qeZO3Hf6uPZgHkvJz2OAq7TbBw== + dependencies: + "@react-types/shared" "^3.32.1" + +"@react-types/textfield@^3.12.6": + version "3.12.6" + resolved "https://registry.yarnpkg.com/@react-types/textfield/-/textfield-3.12.6.tgz#0f90a4108c8d75e7c2c26753e760cd580339be12" + integrity sha512-hpEVKE+M3uUkTjw2WrX1NrH/B3rqDJFUa+ViNK2eVranLY4ZwFqbqaYXSzHupOF3ecSjJJv2C103JrwFvx6TPQ== + dependencies: + "@react-types/shared" "^3.32.1" + +"@react-types/tooltip@^3.4.21": + version "3.4.21" + resolved "https://registry.yarnpkg.com/@react-types/tooltip/-/tooltip-3.4.21.tgz#63596cf87d7166499656bc15f212c75c9ffa8991" + integrity sha512-ugGHOZU6WbOdeTdbjnaEc+Ms7/WhsUCg+T3PCOIeOT9FG02Ce189yJ/+hd7oqL/tVwIhEMYJIqSCgSELFox+QA== + dependencies: + "@react-types/overlays" "^3.9.2" + "@react-types/shared" "^3.32.1" "@remix-run/router@1.23.0": version "1.23.0" resolved "https://registry.yarnpkg.com/@remix-run/router/-/router-1.23.0.tgz#35390d0e7779626c026b11376da6789eb8389242" integrity sha512-O3rHJzAQKamUz1fvE0Qaw0xSFqsA/yafi2iqeE0pvdFtCO1viYx8QL6f3Ln/aCCTLxs68SLf0KPM9eSeM8yBnA== -"@rollup/plugin-commonjs@^24.0.1": - version "24.1.0" - resolved "https://registry.yarnpkg.com/@rollup/plugin-commonjs/-/plugin-commonjs-24.1.0.tgz#79e54bd83bb64396761431eee6c44152ef322100" - integrity sha512-eSL45hjhCWI0jCCXcNtLVqM5N1JlBGvlFfY0m6oOYnLCJ6N0qEXoZql4sY2MOUArzhH4SA/qBpTxvvZp2Sc+DQ== - dependencies: - "@rollup/pluginutils" "^5.0.1" - commondir "^1.0.1" - estree-walker "^2.0.2" - glob "^8.0.3" - is-reference "1.2.1" - magic-string "^0.27.0" - -"@rollup/plugin-inject@^5.0.3": - version "5.0.5" - resolved "https://registry.yarnpkg.com/@rollup/plugin-inject/-/plugin-inject-5.0.5.tgz#616f3a73fe075765f91c5bec90176608bed277a3" - integrity sha512-2+DEJbNBoPROPkgTDNe8/1YXWcqxbN5DTjASVIOx8HS+pITXushyNiBV56RB08zuptzz8gT3YfkqriTBVycepg== - dependencies: - "@rollup/pluginutils" "^5.0.1" - estree-walker "^2.0.2" - magic-string "^0.30.3" - -"@rollup/plugin-json@^6.0.0": - version "6.1.0" - resolved "https://registry.yarnpkg.com/@rollup/plugin-json/-/plugin-json-6.1.0.tgz#fbe784e29682e9bb6dee28ea75a1a83702e7b805" - integrity sha512-EGI2te5ENk1coGeADSIwZ7G2Q8CJS2sF120T7jLw4xFw9n7wIOXHo+kIYRAoVpJAN+kmqZSoO3Fp4JtoNF4ReA== - dependencies: - "@rollup/pluginutils" "^5.1.0" - -"@rollup/plugin-node-resolve@^15.0.1": - version "15.3.1" - resolved "https://registry.yarnpkg.com/@rollup/plugin-node-resolve/-/plugin-node-resolve-15.3.1.tgz#66008953c2524be786aa319d49e32f2128296a78" - integrity sha512-tgg6b91pAybXHJQMAAwW9VuWBO6Thi+q7BCNARLwSqlmsHz0XYURtGvh/AuwSADXSI4h/2uHbs7s4FzlZDGSGA== - dependencies: - "@rollup/pluginutils" "^5.0.1" - "@types/resolve" "1.20.2" - deepmerge "^4.2.2" - is-module "^1.0.0" - resolve "^1.22.1" - -"@rollup/plugin-replace@^5.0.2": - version "5.0.7" - resolved "https://registry.yarnpkg.com/@rollup/plugin-replace/-/plugin-replace-5.0.7.tgz#150c9ee9db8031d9e4580a61a0edeaaed3d37687" - integrity sha512-PqxSfuorkHz/SPpyngLyg5GCEkOcee9M1bkxiVDr41Pd61mqP1PLOoDPbpl44SB2mQGKwV/In74gqQmGITOhEQ== - dependencies: - "@rollup/pluginutils" "^5.0.1" - magic-string "^0.30.3" - -"@rollup/plugin-terser@^0.2.1": - version "0.2.1" - resolved "https://registry.yarnpkg.com/@rollup/plugin-terser/-/plugin-terser-0.2.1.tgz#dcf0b163216dafb64611b170a7667e76a7f03d2b" - integrity sha512-hV52c8Oo6/cXZZxVVoRNBb4zh+EKSHS4I1sedWV5pf0O+hTLSkrf6w86/V0AZutYtwBguB6HLKwz89WDBfwGOA== - dependencies: - serialize-javascript "^6.0.0" - smob "^0.0.6" - terser "^5.15.1" - -"@rollup/plugin-typescript@^10.0.1": - version "10.0.1" - resolved "https://registry.yarnpkg.com/@rollup/plugin-typescript/-/plugin-typescript-10.0.1.tgz#270b515b116ea28320e6bb62451c4767d49072d6" - integrity sha512-wBykxRLlX7EzL8BmUqMqk5zpx2onnmRMSw/l9M1sVfkJvdwfxogZQVNUM9gVMJbjRLDR5H6U0OMOrlDGmIV45A== - dependencies: - "@rollup/pluginutils" "^5.0.1" - resolve "^1.22.1" - -"@rollup/plugin-typescript@^11.0.0": - version "11.1.6" - resolved "https://registry.yarnpkg.com/@rollup/plugin-typescript/-/plugin-typescript-11.1.6.tgz#724237d5ec12609ec01429f619d2a3e7d4d1b22b" - integrity sha512-R92yOmIACgYdJ7dJ97p4K69I8gg6IEHt8M7dUBxN3W6nrO8uUxX5ixl0yU/N3aZTi8WhPuICvOHXQvF6FaykAA== - dependencies: - "@rollup/pluginutils" "^5.1.0" - resolve "^1.22.1" - -"@rollup/plugin-url@^8.0.1": - version "8.0.2" - resolved "https://registry.yarnpkg.com/@rollup/plugin-url/-/plugin-url-8.0.2.tgz#aab4e209e9e012f65582bd99eb80b3bbdfe15afb" - integrity sha512-5yW2LP5NBEgkvIRSSEdJkmxe5cUNZKG3eenKtfJvSkxVm/xTTu7w+ayBtNwhozl1ZnTUCU0xFaRQR+cBl2H7TQ== - dependencies: - "@rollup/pluginutils" "^5.0.1" - make-dir "^3.1.0" - mime "^3.0.0" - -"@rollup/plugin-wasm@^6.1.1": - version "6.2.2" - resolved "https://registry.yarnpkg.com/@rollup/plugin-wasm/-/plugin-wasm-6.2.2.tgz#ea75fd8cc5ddba1e30bdc22e07cdbaf8d6d160bf" - integrity sha512-gpC4R1G9Ni92ZIRTexqbhX7U+9estZrbhP+9SRb0DW9xpB9g7j34r+J2hqrcW/lRI7dJaU84MxZM0Rt82tqYPQ== - dependencies: - "@rollup/pluginutils" "^5.0.2" - -"@rollup/pluginutils@^3.1.0": - version "3.1.0" - resolved "https://registry.yarnpkg.com/@rollup/pluginutils/-/pluginutils-3.1.0.tgz#706b4524ee6dc8b103b3c995533e5ad680c02b9b" - integrity sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg== - dependencies: - "@types/estree" "0.0.39" - estree-walker "^1.0.1" - picomatch "^2.2.2" - -"@rollup/pluginutils@^5.0.1", "@rollup/pluginutils@^5.0.2", "@rollup/pluginutils@^5.1.0": - version "5.3.0" - resolved "https://registry.yarnpkg.com/@rollup/pluginutils/-/pluginutils-5.3.0.tgz#57ba1b0cbda8e7a3c597a4853c807b156e21a7b4" - integrity sha512-5EdhGZtnu3V88ces7s53hhfK5KSASnJZv8Lulpc04cWO3REESroJXg73DFsOmgbU2BhwV0E20bu2IDZb3VKW4Q== - dependencies: - "@types/estree" "^1.0.0" - estree-walker "^2.0.2" - picomatch "^4.0.2" - "@rtsao/scc@^1.1.0": version "1.1.0" resolved "https://registry.yarnpkg.com/@rtsao/scc/-/scc-1.1.0.tgz#927dd2fae9bc3361403ac2c7a00c32ddce9ad7e8" integrity sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g== "@rushstack/eslint-patch@^1.10.3": - version "1.12.0" - resolved "https://registry.yarnpkg.com/@rushstack/eslint-patch/-/eslint-patch-1.12.0.tgz#326a7b46f6d4cfa54ae25bb888551697873069b4" - integrity sha512-5EwMtOqvJMMa3HbmxLlF74e+3/HhwBTMcvt3nqVJgGCozO6hzIPOBlwm8mGVNR9SN2IJpxSnlxczyDjcn7qIyw== - -"@sapphire/utilities@^3.11.0": - version "3.18.2" - resolved "https://registry.yarnpkg.com/@sapphire/utilities/-/utilities-3.18.2.tgz#42f1cec0b9bc5fac411b21f40893bed5770d4a0b" - integrity sha512-QGLdC9+pT74Zd7aaObqn0EUfq40c4dyTL65pFnkM6WO1QYN7Yg/s4CdH+CXmx0Zcu6wcfCWILSftXPMosJHP5A== + version "1.14.1" + resolved "https://registry.yarnpkg.com/@rushstack/eslint-patch/-/eslint-patch-1.14.1.tgz#5f7c5c335643cff62ad8e6a9432d708a9c51e98c" + integrity sha512-jGTk8UD/RdjsNZW8qq10r0RBvxL8OWtoT+kImlzPDFilmozzM+9QmIJsmze9UiSBrFU45ZxhTYBypn9q9z/VfQ== "@sideway/address@^4.1.5": version "4.1.5" @@ -6560,11 +4766,6 @@ "@sigstore/protobuf-specs" "^0.2.0" tuf-js "^1.1.7" -"@sinclair/typebox@^0.24.1": - version "0.24.51" - resolved "https://registry.yarnpkg.com/@sinclair/typebox/-/typebox-0.24.51.tgz#645f33fe4e02defe26f2f5c0410e1c094eac7f5f" - integrity sha512-1P1OROm/rdubP5aFDSZQILU0vrLCJ4fvHt6EoqHEM+2D/G5MK3bIaymUKLit8Js9gbns5UyJnkP/TZROLw4tUA== - "@sinclair/typebox@^0.27.8": version "0.27.8" resolved "https://registry.yarnpkg.com/@sinclair/typebox/-/typebox-0.27.8.tgz#6667fac16c436b5434a387a34dedb013198f6e6e" @@ -6582,20 +4783,6 @@ dependencies: type-detect "4.0.8" -"@sinonjs/commons@^3.0.0": - version "3.0.1" - resolved "https://registry.yarnpkg.com/@sinonjs/commons/-/commons-3.0.1.tgz#1029357e44ca901a615585f6d27738dbc89084cd" - integrity sha512-K3mCHKQ9sVh8o1C9cxkwxaOmXoAMlDxC1mYyHrjqOWEcBjYr76t96zL2zlj5dUGZ3HSw240X1qgH3Mjf1yJWpQ== - dependencies: - type-detect "4.0.8" - -"@sinonjs/fake-timers@^10.0.2": - version "10.3.0" - resolved "https://registry.yarnpkg.com/@sinonjs/fake-timers/-/fake-timers-10.3.0.tgz#55fdff1ecab9f354019129daf4df0dd4d923ea66" - integrity sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA== - dependencies: - "@sinonjs/commons" "^3.0.0" - "@sinonjs/fake-timers@^8.0.1": version "8.1.0" resolved "https://registry.yarnpkg.com/@sinonjs/fake-timers/-/fake-timers-8.1.0.tgz#3fdc2b6cb58935b21bfb8d1625eb1300484316e7" @@ -7672,75 +5859,6 @@ "@svgr/plugin-jsx" "^6.5.1" "@svgr/plugin-svgo" "^6.5.1" -"@swc/core-darwin-arm64@1.13.5": - version "1.13.5" - resolved "https://registry.yarnpkg.com/@swc/core-darwin-arm64/-/core-darwin-arm64-1.13.5.tgz#7638c073946f9297753ed9a2eb198d07b2336a24" - integrity sha512-lKNv7SujeXvKn16gvQqUQI5DdyY8v7xcoO3k06/FJbHJS90zEwZdQiMNRiqpYw/orU543tPaWgz7cIYWhbopiQ== - -"@swc/core-darwin-x64@1.13.5": - version "1.13.5" - resolved "https://registry.yarnpkg.com/@swc/core-darwin-x64/-/core-darwin-x64-1.13.5.tgz#18061167378f0fb285e17818494bc6c89dd07551" - integrity sha512-ILd38Fg/w23vHb0yVjlWvQBoE37ZJTdlLHa8LRCFDdX4WKfnVBiblsCU9ar4QTMNdeTBEX9iUF4IrbNWhaF1Ng== - -"@swc/core-linux-arm-gnueabihf@1.13.5": - version "1.13.5" - resolved "https://registry.yarnpkg.com/@swc/core-linux-arm-gnueabihf/-/core-linux-arm-gnueabihf-1.13.5.tgz#4c8062bd598049b5b9b0beb762e075e76b4c23c3" - integrity sha512-Q6eS3Pt8GLkXxqz9TAw+AUk9HpVJt8Uzm54MvPsqp2yuGmY0/sNaPPNVqctCX9fu/Nu8eaWUen0si6iEiCsazQ== - -"@swc/core-linux-arm64-gnu@1.13.5": - version "1.13.5" - resolved "https://registry.yarnpkg.com/@swc/core-linux-arm64-gnu/-/core-linux-arm64-gnu-1.13.5.tgz#7222d321197ea9304e387933e87d775849fc1ae6" - integrity sha512-aNDfeN+9af+y+M2MYfxCzCy/VDq7Z5YIbMqRI739o8Ganz6ST+27kjQFd8Y/57JN/hcnUEa9xqdS3XY7WaVtSw== - -"@swc/core-linux-arm64-musl@1.13.5": - version "1.13.5" - resolved "https://registry.yarnpkg.com/@swc/core-linux-arm64-musl/-/core-linux-arm64-musl-1.13.5.tgz#51e7958deaf37edc212bd9dc0ea1476f151d2bea" - integrity sha512-9+ZxFN5GJag4CnYnq6apKTnnezpfJhCumyz0504/JbHLo+Ue+ZtJnf3RhyA9W9TINtLE0bC4hKpWi8ZKoETyOQ== - -"@swc/core-linux-x64-gnu@1.13.5": - version "1.13.5" - resolved "https://registry.yarnpkg.com/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.13.5.tgz#3476beab93ab03e92844d955ca9d9289aa4a5993" - integrity sha512-WD530qvHrki8Ywt/PloKUjaRKgstQqNGvmZl54g06kA+hqtSE2FTG9gngXr3UJxYu/cNAjJYiBifm7+w4nbHbA== - -"@swc/core-linux-x64-musl@1.13.5": - version "1.13.5" - resolved "https://registry.yarnpkg.com/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.13.5.tgz#f4934b1e77e2a297909bb3ab977836205c36e5e0" - integrity sha512-Luj8y4OFYx4DHNQTWjdIuKTq2f5k6uSXICqx+FSabnXptaOBAbJHNbHT/06JZh6NRUouaf0mYXN0mcsqvkhd7Q== - -"@swc/core-win32-arm64-msvc@1.13.5": - version "1.13.5" - resolved "https://registry.yarnpkg.com/@swc/core-win32-arm64-msvc/-/core-win32-arm64-msvc-1.13.5.tgz#5084c107435cfc82d4d901bfb388dc319d38a236" - integrity sha512-cZ6UpumhF9SDJvv4DA2fo9WIzlNFuKSkZpZmPG1c+4PFSEMy5DFOjBSllCvnqihCabzXzpn6ykCwBmHpy31vQw== - -"@swc/core-win32-ia32-msvc@1.13.5": - version "1.13.5" - resolved "https://registry.yarnpkg.com/@swc/core-win32-ia32-msvc/-/core-win32-ia32-msvc-1.13.5.tgz#f8b2e28bc51b30467e316ed736a130c1324b9880" - integrity sha512-C5Yi/xIikrFUzZcyGj9L3RpKljFvKiDMtyDzPKzlsDrKIw2EYY+bF88gB6oGY5RGmv4DAX8dbnpRAqgFD0FMEw== - -"@swc/core-win32-x64-msvc@1.13.5": - version "1.13.5" - resolved "https://registry.yarnpkg.com/@swc/core-win32-x64-msvc/-/core-win32-x64-msvc-1.13.5.tgz#13883cf3c63bf11b787e28dcdf75ca0cc49efa83" - integrity sha512-YrKdMVxbYmlfybCSbRtrilc6UA8GF5aPmGKBdPvjrarvsmf4i7ZHGCEnLtfOMd3Lwbs2WUZq3WdMbozYeLU93Q== - -"@swc/core@^1.11.24": - version "1.13.5" - resolved "https://registry.yarnpkg.com/@swc/core/-/core-1.13.5.tgz#93874b831d3bd121560e6fcd688972b7fc7baa26" - integrity sha512-WezcBo8a0Dg2rnR82zhwoR6aRNxeTGfK5QCD6TQ+kg3xx/zNT02s/0o+81h/3zhvFSB24NtqEr8FTw88O5W/JQ== - dependencies: - "@swc/counter" "^0.1.3" - "@swc/types" "^0.1.24" - optionalDependencies: - "@swc/core-darwin-arm64" "1.13.5" - "@swc/core-darwin-x64" "1.13.5" - "@swc/core-linux-arm-gnueabihf" "1.13.5" - "@swc/core-linux-arm64-gnu" "1.13.5" - "@swc/core-linux-arm64-musl" "1.13.5" - "@swc/core-linux-x64-gnu" "1.13.5" - "@swc/core-linux-x64-musl" "1.13.5" - "@swc/core-win32-arm64-msvc" "1.13.5" - "@swc/core-win32-ia32-msvc" "1.13.5" - "@swc/core-win32-x64-msvc" "1.13.5" - "@swc/counter@^0.1.3": version "0.1.3" resolved "https://registry.yarnpkg.com/@swc/counter/-/counter-0.1.3.tgz#cc7463bd02949611c6329596fccd2b0ec782b0e9" @@ -7761,13 +5879,6 @@ dependencies: tslib "^2.8.0" -"@swc/types@^0.1.24": - version "0.1.25" - resolved "https://registry.yarnpkg.com/@swc/types/-/types-0.1.25.tgz#b517b2a60feb37dd933e542d93093719e4cf1078" - integrity sha512-iAoY/qRhNH8a/hBvm3zKj9qQ4oc2+3w1unPJa2XvTK3XjeLXtzcCingVPw/9e5mn1+0yPqxcBGp9Jf0pkfMb1g== - dependencies: - "@swc/counter" "^0.1.3" - "@tanstack/match-sorter-utils@8.19.4": version "8.19.4" resolved "https://registry.yarnpkg.com/@tanstack/match-sorter-utils/-/match-sorter-utils-8.19.4.tgz#dacf772b5d94f4684f10dbeb2518cf72dccab8a5" @@ -7775,10 +5886,10 @@ dependencies: remove-accents "0.5.0" -"@tanstack/query-core@5.90.2": - version "5.90.2" - resolved "https://registry.yarnpkg.com/@tanstack/query-core/-/query-core-5.90.2.tgz#ac5d0d0f19a38071db2d21d758b5c35a85d9c1d8" - integrity sha512-k/TcR3YalnzibscALLwxeiLUub6jN5EDLwKDiO7q5f4ICEoptJ+n9+7vcEFy5/x/i6Q+Lb/tXrsKCggf5uQJXQ== +"@tanstack/query-core@5.90.5": + version "5.90.5" + resolved "https://registry.yarnpkg.com/@tanstack/query-core/-/query-core-5.90.5.tgz#0175f9f517514906db8ab379589ed3f96694ecc4" + integrity sha512-wLamYp7FaDq6ZnNehypKI5fNvxHPfTYylE0m/ZpuuzJfJqhR5Pxg9gvGBHZx4n7J+V5Rg5mZxHHTlv25Zt5u+w== "@tanstack/query-devtools@5.90.1": version "5.90.1" @@ -7798,11 +5909,11 @@ integrity sha512-f7vJ9SHRO5GjiTBIpaSdLTczPlDybu6OzLG2thcNev55Qi69JkYsSOyUVWKpa3tGgufyJx1kDAO5lJjv4jF/bw== "@tanstack/react-query@^5.64.2": - version "5.90.2" - resolved "https://registry.yarnpkg.com/@tanstack/react-query/-/react-query-5.90.2.tgz#2f045931b7d44bef02c5261fedba75ef1a418726" - integrity sha512-CLABiR+h5PYfOWr/z+vWFt5VsOA2ekQeRQBFSKlcoW6Ndx/f8rfyVmq4LbgOM4GG2qtxAxjLYLOpCNTYm4uKzw== + version "5.90.5" + resolved "https://registry.yarnpkg.com/@tanstack/react-query/-/react-query-5.90.5.tgz#545e61282c787bd87ac5785da9a4943462f78ef6" + integrity sha512-pN+8UWpxZkEJ/Rnnj2v2Sxpx1WFlaa9L6a4UO89p6tTQbeo+m0MS8oYDjbggrR8QcTyjKoYWKS3xJQGr3ExT8Q== dependencies: - "@tanstack/query-core" "5.90.2" + "@tanstack/query-core" "5.90.5" "@tanstack/react-table@8.20.6": version "8.20.6" @@ -7853,81 +5964,81 @@ integrity sha512-1YBOJfRHV4sXUmWsFSf5rQor4Ss82G8dQWLRbnk3GA4jeP8hQt1hxXh0tmflpC0dz3VgEv/1+qwPyLeWkQuPFA== "@tauri-apps/api@^2.4.0", "@tauri-apps/api@^2.6.0", "@tauri-apps/api@^2.8.0": - version "2.8.0" - resolved "https://registry.yarnpkg.com/@tauri-apps/api/-/api-2.8.0.tgz#0348a2b3ba5982ec67a7d569f329b4a55d7d5f1e" - integrity sha512-ga7zdhbS2GXOMTIZRT0mYjKJtR9fivsXzsyq5U3vjDL0s6DTMwYRm0UHNjzTY5dh4+LSC68Sm/7WEiimbQNYlw== + version "2.9.0" + resolved "https://registry.yarnpkg.com/@tauri-apps/api/-/api-2.9.0.tgz#047fcbfec05a719b0cec997eee244cee453fb2fc" + integrity sha512-qD5tMjh7utwBk9/5PrTA/aGr3i5QaJ/Mlt7p8NilQ45WgbifUNPyKWsA63iQ8YfQq6R8ajMapU+/Q8nMcPRLNw== -"@tauri-apps/cli-darwin-arm64@2.8.4": - version "2.8.4" - resolved "https://registry.yarnpkg.com/@tauri-apps/cli-darwin-arm64/-/cli-darwin-arm64-2.8.4.tgz#ec09c0673dd1816e89910cf31ddc7d94c5cf077f" - integrity sha512-BKu8HRkYV01SMTa7r4fLx+wjgtRK8Vep7lmBdHDioP6b8XH3q2KgsAyPWfEZaZIkZ2LY4SqqGARaE9oilNe0oA== +"@tauri-apps/cli-darwin-arm64@2.9.1": + version "2.9.1" + resolved "https://registry.yarnpkg.com/@tauri-apps/cli-darwin-arm64/-/cli-darwin-arm64-2.9.1.tgz#60bbf0a34098c1feb865d7483433c6e4a0208142" + integrity sha512-sdwhtsE/6njD0AjgfYEj1JyxZH4SBmCJSXpRm6Ph5fQeuZD6MyjzjdVOrrtFguyREVQ7xn0Ujkwvbo01ULthNg== -"@tauri-apps/cli-darwin-x64@2.8.4": - version "2.8.4" - resolved "https://registry.yarnpkg.com/@tauri-apps/cli-darwin-x64/-/cli-darwin-x64-2.8.4.tgz#b9c274fedce570da1910559add68657d264019db" - integrity sha512-imb9PfSd/7G6VAO7v1bQ2A3ZH4NOCbhGJFLchxzepGcXf9NKkfun157JH9mko29K6sqAwuJ88qtzbKCbWJTH9g== +"@tauri-apps/cli-darwin-x64@2.9.1": + version "2.9.1" + resolved "https://registry.yarnpkg.com/@tauri-apps/cli-darwin-x64/-/cli-darwin-x64-2.9.1.tgz#e0bdb2e29201dd0b46bffa61cc7dccb5f0c6ae29" + integrity sha512-c86g+67wTdI4TUCD7CaSd/13+oYuLQxVST4ZNJ5C+6i1kdnU3Us1L68N9MvbDLDQGJc9eo0pvuK6sCWkee+BzA== -"@tauri-apps/cli-linux-arm-gnueabihf@2.8.4": - version "2.8.4" - resolved "https://registry.yarnpkg.com/@tauri-apps/cli-linux-arm-gnueabihf/-/cli-linux-arm-gnueabihf-2.8.4.tgz#657131a05f422b9141277f0668d370e8d671bdc0" - integrity sha512-Ml215UnDdl7/fpOrF1CNovym/KjtUbCuPgrcZ4IhqUCnhZdXuphud/JT3E8X97Y03TZ40Sjz8raXYI2ET0exzw== +"@tauri-apps/cli-linux-arm-gnueabihf@2.9.1": + version "2.9.1" + resolved "https://registry.yarnpkg.com/@tauri-apps/cli-linux-arm-gnueabihf/-/cli-linux-arm-gnueabihf-2.9.1.tgz#15ad573c32b8941d10c2ebd2ecfe399ea85ed023" + integrity sha512-IrB3gFQmueQKJjjisOcMktW/Gh6gxgqYO419doA3YZ7yIV5rbE8ZW52Q3I4AO+SlFEyVYer5kpi066p0JBlLGw== -"@tauri-apps/cli-linux-arm64-gnu@2.8.4": - version "2.8.4" - resolved "https://registry.yarnpkg.com/@tauri-apps/cli-linux-arm64-gnu/-/cli-linux-arm64-gnu-2.8.4.tgz#35a14541e09b6548b811626d1a5d2574932116ef" - integrity sha512-pbcgBpMyI90C83CxE5REZ9ODyIlmmAPkkJXtV398X3SgZEIYy5TACYqlyyv2z5yKgD8F8WH4/2fek7+jH+ZXAw== +"@tauri-apps/cli-linux-arm64-gnu@2.9.1": + version "2.9.1" + resolved "https://registry.yarnpkg.com/@tauri-apps/cli-linux-arm64-gnu/-/cli-linux-arm64-gnu-2.9.1.tgz#f7a5dd6f46c5a2b52f20a61308cd61dd04694435" + integrity sha512-Ke7TyXvu6HbWSkmVkFbbH19D3cLsd117YtXP/u9NIvSpYwKeFtnbpirrIUfPm44Q+PZFZ2Hvg8X9qoUiAK0zKw== -"@tauri-apps/cli-linux-arm64-musl@2.8.4": - version "2.8.4" - resolved "https://registry.yarnpkg.com/@tauri-apps/cli-linux-arm64-musl/-/cli-linux-arm64-musl-2.8.4.tgz#bdd9deea17e0c2e4edf511a071c87670616af8a3" - integrity sha512-zumFeaU1Ws5Ay872FTyIm7z8kfzEHu8NcIn8M6TxbJs0a7GRV21KBdpW1zNj2qy7HynnpQCqjAYXTUUmm9JAOw== +"@tauri-apps/cli-linux-arm64-musl@2.9.1": + version "2.9.1" + resolved "https://registry.yarnpkg.com/@tauri-apps/cli-linux-arm64-musl/-/cli-linux-arm64-musl-2.9.1.tgz#011caad0d6222f5c18221d7b413e1b4750eef5f4" + integrity sha512-sGvy75sv55oeMulR5ArwPD28DsDQxqTzLhXCrpU9/nbFg/JImmI7k994YE9fr3V0qE3Cjk5gjLldRNv7I9sjwQ== -"@tauri-apps/cli-linux-riscv64-gnu@2.8.4": - version "2.8.4" - resolved "https://registry.yarnpkg.com/@tauri-apps/cli-linux-riscv64-gnu/-/cli-linux-riscv64-gnu-2.8.4.tgz#ac3c751ce5727fbd1da280f0aa2fb444fcd706b5" - integrity sha512-qiqbB3Zz6IyO201f+1ojxLj65WYj8mixL5cOMo63nlg8CIzsP23cPYUrx1YaDPsCLszKZo7tVs14pc7BWf+/aQ== +"@tauri-apps/cli-linux-riscv64-gnu@2.9.1": + version "2.9.1" + resolved "https://registry.yarnpkg.com/@tauri-apps/cli-linux-riscv64-gnu/-/cli-linux-riscv64-gnu-2.9.1.tgz#0328624bf798d653c49bc0455d1cc111e631846b" + integrity sha512-tEKbJydV3BdIxpAx8aGHW6VDg1xW4LlQuRD/QeFZdZNTreHJpMbJEcdvAcI+Hg6vgQpVpaoEldR9W4F6dYSLqQ== -"@tauri-apps/cli-linux-x64-gnu@2.8.4": - version "2.8.4" - resolved "https://registry.yarnpkg.com/@tauri-apps/cli-linux-x64-gnu/-/cli-linux-x64-gnu-2.8.4.tgz#7b2000b5e6597dc62f48cb67ee98f61b54493a19" - integrity sha512-TaqaDd9Oy6k45Hotx3pOf+pkbsxLaApv4rGd9mLuRM1k6YS/aw81YrsMryYPThrxrScEIUcmNIHaHsLiU4GMkw== +"@tauri-apps/cli-linux-x64-gnu@2.9.1": + version "2.9.1" + resolved "https://registry.yarnpkg.com/@tauri-apps/cli-linux-x64-gnu/-/cli-linux-x64-gnu-2.9.1.tgz#25e0f95615ddede953af4d29ad1c0d1f7c160c3f" + integrity sha512-mg5msXHagtHpyCVWgI01M26JeSrgE/otWyGdYcuTwyRYZYEJRTbcNt7hscOkdNlPBe7isScW7PVKbxmAjJJl4g== -"@tauri-apps/cli-linux-x64-musl@2.8.4": - version "2.8.4" - resolved "https://registry.yarnpkg.com/@tauri-apps/cli-linux-x64-musl/-/cli-linux-x64-musl-2.8.4.tgz#5dd9f6e666e004e00313d86a5d71480f7ac1269a" - integrity sha512-ot9STAwyezN8w+bBHZ+bqSQIJ0qPZFlz/AyscpGqB/JnJQVDFQcRDmUPFEaAtt2UUHSWzN3GoTJ5ypqLBp2WQA== +"@tauri-apps/cli-linux-x64-musl@2.9.1": + version "2.9.1" + resolved "https://registry.yarnpkg.com/@tauri-apps/cli-linux-x64-musl/-/cli-linux-x64-musl-2.9.1.tgz#ccb819101a225947f42ebb4f1f6902514aa902e3" + integrity sha512-lFZEXkpDreUe3zKilvnMsrnKP9gwQudaEjDnOz/GMzbzNceIuPfFZz0cR/ky1Aoq4eSvZonPKHhROq4owz4fzg== -"@tauri-apps/cli-win32-arm64-msvc@2.8.4": - version "2.8.4" - resolved "https://registry.yarnpkg.com/@tauri-apps/cli-win32-arm64-msvc/-/cli-win32-arm64-msvc-2.8.4.tgz#75eadbad9ae5726cc53139bbeae4c4a8fc4a92be" - integrity sha512-+2aJ/g90dhLiOLFSD1PbElXX3SoMdpO7HFPAZB+xot3CWlAZD1tReUFy7xe0L5GAR16ZmrxpIDM9v9gn5xRy/w== +"@tauri-apps/cli-win32-arm64-msvc@2.9.1": + version "2.9.1" + resolved "https://registry.yarnpkg.com/@tauri-apps/cli-win32-arm64-msvc/-/cli-win32-arm64-msvc-2.9.1.tgz#c0be0555d2b3686d4b3ea702039d41ed6017e4eb" + integrity sha512-ejc5RAp/Lm1Aj0EQHaT+Wdt5PHfdgQV5hIDV00MV6HNbIb5W4ZUFxMDaRkAg65gl9MvY2fH396riePW3RoKXDw== -"@tauri-apps/cli-win32-ia32-msvc@2.8.4": - version "2.8.4" - resolved "https://registry.yarnpkg.com/@tauri-apps/cli-win32-ia32-msvc/-/cli-win32-ia32-msvc-2.8.4.tgz#60e6cdad4fb59d91a194652581742d08c952f0a7" - integrity sha512-yj7WDxkL1t9Uzr2gufQ1Hl7hrHuFKTNEOyascbc109EoiAqCp0tgZ2IykQqOZmZOHU884UAWI1pVMqBhS/BfhA== +"@tauri-apps/cli-win32-ia32-msvc@2.9.1": + version "2.9.1" + resolved "https://registry.yarnpkg.com/@tauri-apps/cli-win32-ia32-msvc/-/cli-win32-ia32-msvc-2.9.1.tgz#b637cd436f129ef3ff6e83a4095c37b85f308a27" + integrity sha512-fSATtJDc0fNjVB6ystyi8NbwhNFk8i8E05h6KrsC8Fio5eaJIJvPCbC9pdrPl6kkxN1X7fj25ErBbgfqgcK8Fg== -"@tauri-apps/cli-win32-x64-msvc@2.8.4": - version "2.8.4" - resolved "https://registry.yarnpkg.com/@tauri-apps/cli-win32-x64-msvc/-/cli-win32-x64-msvc-2.8.4.tgz#44461625197c531537ccba84b64c804a0d7228ae" - integrity sha512-XuvGB4ehBdd7QhMZ9qbj/8icGEatDuBNxyYHbLKsTYh90ggUlPa/AtaqcC1Fo69lGkTmq9BOKrs1aWSi7xDonA== +"@tauri-apps/cli-win32-x64-msvc@2.9.1": + version "2.9.1" + resolved "https://registry.yarnpkg.com/@tauri-apps/cli-win32-x64-msvc/-/cli-win32-x64-msvc-2.9.1.tgz#d7c8512dd70f9aa8203f2011322542ec11f76b66" + integrity sha512-/JHlOzpUDhjBOO9w167bcYxfJbcMQv7ykS/Y07xjtcga8np0rzUzVGWYmLMH7orKcDMC7wjhheEW1x8cbGma/Q== "@tauri-apps/cli@^2.4.0": - version "2.8.4" - resolved "https://registry.yarnpkg.com/@tauri-apps/cli/-/cli-2.8.4.tgz#ff8347e43164f73922356c10ba5cdbaf567ffe98" - integrity sha512-ejUZBzuQRcjFV+v/gdj/DcbyX/6T4unZQjMSBZwLzP/CymEjKcc2+Fc8xTORThebHDUvqoXMdsCZt8r+hyN15g== + version "2.9.1" + resolved "https://registry.yarnpkg.com/@tauri-apps/cli/-/cli-2.9.1.tgz#cdc1cc6a005fef017b2a8f1a96d32537afc74579" + integrity sha512-kKi2/WWsNXKoMdatBl4xrT7e1Ce27JvsetBVfWuIb6D3ep/Y0WO5SIr70yarXOSWam8NyDur4ipzjZkg6m7VDg== optionalDependencies: - "@tauri-apps/cli-darwin-arm64" "2.8.4" - "@tauri-apps/cli-darwin-x64" "2.8.4" - "@tauri-apps/cli-linux-arm-gnueabihf" "2.8.4" - "@tauri-apps/cli-linux-arm64-gnu" "2.8.4" - "@tauri-apps/cli-linux-arm64-musl" "2.8.4" - "@tauri-apps/cli-linux-riscv64-gnu" "2.8.4" - "@tauri-apps/cli-linux-x64-gnu" "2.8.4" - "@tauri-apps/cli-linux-x64-musl" "2.8.4" - "@tauri-apps/cli-win32-arm64-msvc" "2.8.4" - "@tauri-apps/cli-win32-ia32-msvc" "2.8.4" - "@tauri-apps/cli-win32-x64-msvc" "2.8.4" + "@tauri-apps/cli-darwin-arm64" "2.9.1" + "@tauri-apps/cli-darwin-x64" "2.9.1" + "@tauri-apps/cli-linux-arm-gnueabihf" "2.9.1" + "@tauri-apps/cli-linux-arm64-gnu" "2.9.1" + "@tauri-apps/cli-linux-arm64-musl" "2.9.1" + "@tauri-apps/cli-linux-riscv64-gnu" "2.9.1" + "@tauri-apps/cli-linux-x64-gnu" "2.9.1" + "@tauri-apps/cli-linux-x64-musl" "2.9.1" + "@tauri-apps/cli-win32-arm64-msvc" "2.9.1" + "@tauri-apps/cli-win32-ia32-msvc" "2.9.1" + "@tauri-apps/cli-win32-x64-msvc" "2.9.1" "@tauri-apps/plugin-clipboard-manager@^2.2.2": version "2.3.0" @@ -8244,20 +6355,15 @@ resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.8.tgz#958b91c991b1867ced318bedea0e215ee050726e" integrity sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w== -"@types/estree@0.0.39": - version "0.0.39" - resolved "https://registry.yarnpkg.com/@types/estree/-/estree-0.0.39.tgz#e177e699ee1b8c22d23174caaa7422644389509f" - integrity sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw== - "@types/estree@^0.0.51": version "0.0.51" resolved "https://registry.yarnpkg.com/@types/estree/-/estree-0.0.51.tgz#cfd70924a25a3fd32b218e5e420e6897e1ac4f40" integrity sha512-CuPgU6f3eT/XgKKPqKd/gLZV1Xmvf1a2R5POBOGQa6uv82xpls89HU5zKeVoyR8XzHd1RGNOlQlvUe3CFkjWNQ== "@types/express-serve-static-core@*", "@types/express-serve-static-core@^5.0.0": - version "5.0.7" - resolved "https://registry.yarnpkg.com/@types/express-serve-static-core/-/express-serve-static-core-5.0.7.tgz#2fa94879c9d46b11a5df4c74ac75befd6b283de6" - integrity sha512-R+33OsgWw7rOhD1emjU7dzCDHucJrgJXMA5PYCzJxVil0dsyx5iBEPHqpPfiKNJQb7lZ1vxwoLR4Z87bBUpeGQ== + version "5.1.0" + resolved "https://registry.yarnpkg.com/@types/express-serve-static-core/-/express-serve-static-core-5.1.0.tgz#74f47555b3d804b54cb7030e6f9aa0c7485cfc5b" + integrity sha512-jnHMsrd0Mwa9Cf4IdOzbz543y4XJepXrbia2T4b6+spXC2We3t1y6K44D3mR8XMFSXMCf3/l7rCgddfx7UNVBA== dependencies: "@types/node" "*" "@types/qs" "*" @@ -8265,9 +6371,9 @@ "@types/send" "*" "@types/express-serve-static-core@^4.17.33": - version "4.19.6" - resolved "https://registry.yarnpkg.com/@types/express-serve-static-core/-/express-serve-static-core-4.19.6.tgz#e01324c2a024ff367d92c66f48553ced0ab50267" - integrity sha512-N4LZ2xG7DatVqhCZzOGb1Yi5lMbXSZcmdLDe9EzSndPV2HpWYWzRbaerl2n27irrm94EPpprqa8KpskPT085+A== + version "4.19.7" + resolved "https://registry.yarnpkg.com/@types/express-serve-static-core/-/express-serve-static-core-4.19.7.tgz#f1d306dcc03b1aafbfb6b4fe684cce8a31cffc10" + integrity sha512-FvPtiIf1LfhzsaIXhv/PHan/2FeQBbtBDtfX2QfvPxdUelMDEckK08SM6nqo1MIZY3RUlfA+HV8+hFUSio78qg== dependencies: "@types/node" "*" "@types/qs" "*" @@ -8275,18 +6381,18 @@ "@types/send" "*" "@types/express@*": - version "5.0.3" - resolved "https://registry.yarnpkg.com/@types/express/-/express-5.0.3.tgz#6c4bc6acddc2e2a587142e1d8be0bce20757e956" - integrity sha512-wGA0NX93b19/dZC1J18tKWVIYWyyF2ZjT9vin/NRu0qzzvfVzWjs04iq2rQ3H65vCTQYlRqs3YHfY7zjdV+9Kw== + version "5.0.4" + resolved "https://registry.yarnpkg.com/@types/express/-/express-5.0.4.tgz#975e7fc1097066a83b992fd2bb8a4819622e8bae" + integrity sha512-g64dbryHk7loCIrsa0R3shBnEu5p6LPJ09bu9NG58+jz+cRUjFrc3Bz0kNQ7j9bXeCsrRDvNET1G54P/GJkAyA== dependencies: "@types/body-parser" "*" "@types/express-serve-static-core" "^5.0.0" "@types/serve-static" "*" "@types/express@^4.17.13": - version "4.17.23" - resolved "https://registry.yarnpkg.com/@types/express/-/express-4.17.23.tgz#35af3193c640bfd4d7fe77191cd0ed411a433bef" - integrity sha512-Crp6WY9aTYP3qPi2wGDo9iUe/rceX01UMhnF1jmwDcKCFM6cx7YhGP/Mpr3y9AASpfHixIG0E6azCcL5OcDHsQ== + version "4.17.24" + resolved "https://registry.yarnpkg.com/@types/express/-/express-4.17.24.tgz#7d4be463143e9f2f146ef805a619076ce4aaec26" + integrity sha512-Mbrt4SRlXSTWryOnHAh2d4UQ/E7n9lZyGSi6KgX+4hkuL9soYbLOVXVhnk/ODp12YsGc95f4pOvqywJ6kngUwg== dependencies: "@types/body-parser" "*" "@types/express-serve-static-core" "^4.17.33" @@ -8312,7 +6418,7 @@ dependencies: glob "*" -"@types/glob@^7.1.1", "@types/glob@^7.1.3": +"@types/glob@^7.1.1": version "7.2.0" resolved "https://registry.yarnpkg.com/@types/glob/-/glob-7.2.0.tgz#bc1b5bf3aa92f25bd5dd39f35c57361bdce5b2eb" integrity sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA== @@ -8320,7 +6426,7 @@ "@types/minimatch" "*" "@types/node" "*" -"@types/graceful-fs@^4.1.2", "@types/graceful-fs@^4.1.3": +"@types/graceful-fs@^4.1.2": version "4.1.9" resolved "https://registry.yarnpkg.com/@types/graceful-fs/-/graceful-fs-4.1.9.tgz#2a06bc0f68a20ab37b3e36aa238be6abdf49e8b4" integrity sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ== @@ -8357,9 +6463,9 @@ integrity sha512-r8Tayk8HJnX0FztbZN7oVqGccWgw98T/0neJphO91KkmOzug1KkofZURD4UaD5uH8AqcFLfdPErnBod0u71/qg== "@types/http-proxy@^1.17.8": - version "1.17.16" - resolved "https://registry.yarnpkg.com/@types/http-proxy/-/http-proxy-1.17.16.tgz#dee360707b35b3cc85afcde89ffeebff7d7f9240" - integrity sha512-sdWoUajOB1cd0A8cRRQ1cfyWNbmFKLAqBB89Y8x5iYyG/mkJHc0YUH8pdWBy2omi9qtCpiIgGjuwO0dQST2l5w== + version "1.17.17" + resolved "https://registry.yarnpkg.com/@types/http-proxy/-/http-proxy-1.17.17.tgz#d9e2c4571fe3507343cb210cd41790375e59a533" + integrity sha512-ED6LB+Z1AVylNTu7hdzuBqOgMnvG/ld6wGCG8wFnAzKX5uyW2K3WD52v0gnLCTK/VLpXtKckgWuyScYK6cSPaw== dependencies: "@types/node" "*" @@ -8403,7 +6509,7 @@ jest-matcher-utils "^27.0.0" pretty-format "^27.0.0" -"@types/json-schema@*", "@types/json-schema@^7.0.11", "@types/json-schema@^7.0.15", "@types/json-schema@^7.0.4", "@types/json-schema@^7.0.5", "@types/json-schema@^7.0.8", "@types/json-schema@^7.0.9": +"@types/json-schema@*", "@types/json-schema@^7.0.15", "@types/json-schema@^7.0.4", "@types/json-schema@^7.0.5", "@types/json-schema@^7.0.8", "@types/json-schema@^7.0.9": version "7.0.15" resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.15.tgz#596a1747233694d50f6ad8a7869fcb6f56cf5841" integrity sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA== @@ -8413,7 +6519,7 @@ resolved "https://registry.yarnpkg.com/@types/json5/-/json5-0.0.29.tgz#ee28707ae94e11d2b827bcbe5270bcea7f3e71ee" integrity sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ== -"@types/lodash@^4.14.167", "@types/lodash@^4.14.175", "@types/lodash@^4.14.182": +"@types/lodash@^4.14.167", "@types/lodash@^4.14.175": version "4.17.20" resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.17.20.tgz#1ca77361d7363432d29f5e55950d9ec1e1c6ea93" integrity sha512-H3MHACvFUEiujabxhaI/ImO6gUrd8oOurg7LQtS7mbwIXA/cUqWrvBsaeJ23aZEPk1TAYkurjfMbSELfoCXlGA== @@ -8442,17 +6548,10 @@ resolved "https://registry.yarnpkg.com/@types/mime/-/mime-1.3.5.tgz#1ef302e01cf7d2b5a0fa526790c9123bf1d06690" integrity sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w== -"@types/minimatch@*", "@types/minimatch@^6.0.0": - version "6.0.0" - resolved "https://registry.yarnpkg.com/@types/minimatch/-/minimatch-6.0.0.tgz#4d207b1cc941367bdcd195a3a781a7e4fc3b1e03" - integrity sha512-zmPitbQ8+6zNutpwgcQuLcsEpn/Cj54Kbn7L5pX0Os5kdWplB7xPgEh/g+SWOB/qmows2gpuCaPyduq8ZZRnxA== - dependencies: - minimatch "*" - -"@types/minimatch@^3.0.3": - version "3.0.5" - resolved "https://registry.yarnpkg.com/@types/minimatch/-/minimatch-3.0.5.tgz#1001cc5e6a3704b83c236027e77f2f58ea010f40" - integrity sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ== +"@types/minimatch@*", "@types/minimatch@5.1.2", "@types/minimatch@^3.0.3": + version "5.1.2" + resolved "https://registry.yarnpkg.com/@types/minimatch/-/minimatch-5.1.2.tgz#07508b45797cb81ec3f273011b054cd0755eddca" + integrity sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA== "@types/minimist@^1.2.0": version "1.2.5" @@ -8480,11 +6579,11 @@ "@types/node" "*" "@types/node@*", "@types/node@>=13.7.0": - version "24.6.2" - resolved "https://registry.yarnpkg.com/@types/node/-/node-24.6.2.tgz#59b99878b6fed17e698e7d09e51c729c5877736a" - integrity sha512-d2L25Y4j+W3ZlNAeMKcy7yDsK425ibcAOO2t7aPTz6gNMH0z2GThtwENCDc0d/Pw9wgyRqE5Px1wkV7naz8ang== + version "24.9.1" + resolved "https://registry.yarnpkg.com/@types/node/-/node-24.9.1.tgz#b7360b3c789089e57e192695a855aa4f6981a53c" + integrity sha512-QoiaXANRkSXK6p0Duvt56W208du4P9Uye9hWLWgGMDTEoKPhuenzNcC4vGUmrNkiOKTlIrBoyNQYNpSwfEZXSg== dependencies: - undici-types "~7.13.0" + undici-types "~7.16.0" "@types/node@10.12.18": version "10.12.18" @@ -8497,9 +6596,9 @@ integrity sha512-OTcgaiwfGFBKacvfwuHzzn1KLxH/er8mluiy8/uM3sGXHaRe73RrSIj01jow9t4kJEW633Ov+cOexXeiApTyAw== "@types/node@^20": - version "20.19.19" - resolved "https://registry.yarnpkg.com/@types/node/-/node-20.19.19.tgz#18c8982becd5728f92e5f1939f2f3dc85604abcd" - integrity sha512-pb1Uqj5WJP7wrcbLU7Ru4QtA0+3kAXrkutGiD26wUKzSMgNNaPARTUDQmElUXp64kh3cWdou3Q0C7qwwxqSFmg== + version "20.19.23" + resolved "https://registry.yarnpkg.com/@types/node/-/node-20.19.23.tgz#7de99389c814071cca78656a3243f224fed7453d" + integrity sha512-yIdlVVVHXpmqRhtyovZAcSy0MiPcYWGkoO4CGe/+jpP0hmNuihm4XhHbADpK++MsiLHP5MVlv+bcgdF99kSiFQ== dependencies: undici-types "~6.21.0" @@ -8525,7 +6624,7 @@ resolved "https://registry.yarnpkg.com/@types/parse5/-/parse5-5.0.3.tgz#e7b5aebbac150f8b5fdd4a46e7f0bd8e65e19109" integrity sha512-kUNnecmtkunAoQ3CnjmMkzNU/gtxG8guhi+Fk2U/kOpIKjIMKnXGp4IJCgQJrXSgMsWYimYG4TGjz/UzbGEBTw== -"@types/prettier@^2.1.5", "@types/prettier@^2.6.1": +"@types/prettier@^2.1.5": version "2.7.3" resolved "https://registry.yarnpkg.com/@types/prettier/-/prettier-2.7.3.tgz#3e51a17e291d01d17d3fc61422015a933af7a08f" integrity sha512-+68kP9yzs4LMp7VNh8gdzMSPZFL44MLGqiHWvttYJe+6qnuVr4Ek9wSBQoveqY/r+LwjCcU29kNVkidwim+kYA== @@ -8573,25 +6672,20 @@ integrity sha512-8TV6R3h2j7a91c+1DXdJi3Syo69zzIZbz7Lg5tORM5LEJG7X/E6a1V3drRyBRZq7/utz7A+c4OgYLiLcYGHG6w== "@types/react@*": - version "19.2.0" - resolved "https://registry.yarnpkg.com/@types/react/-/react-19.2.0.tgz#8412946e7e1efb0de9bb59b3aa87676d96add385" - integrity sha512-1LOH8xovvsKsCBq1wnT4ntDUdCJKmnEakhsuoUSy6ExlHCkGP2hqnatagYTgFk6oeL0VU31u7SNjunPN+GchtA== + version "19.2.2" + resolved "https://registry.yarnpkg.com/@types/react/-/react-19.2.2.tgz#ba123a75d4c2a51158697160a4ea2ff70aa6bf36" + integrity sha512-6mDvHUFSjyT2B2yeNx2nUgMxh9LtOWvkhIU3uePn2I2oyNymUAX1NIsdgviM4CH+JSrp2D2hsMvJOkxY+0wNRA== dependencies: csstype "^3.0.2" "@types/react@^18", "@types/react@^18.0.26": - version "18.3.25" - resolved "https://registry.yarnpkg.com/@types/react/-/react-18.3.25.tgz#b37e3b05b6762b49f3944760f3bce3d5b6afa19b" - integrity sha512-oSVZmGtDPmRZtVDqvdKUi/qgCsWp5IDY29wp8na8Bj4B3cc99hfNzvNhlMkVVxctkAOGUA3Km7MMpBHAnWfcIA== + version "18.3.26" + resolved "https://registry.yarnpkg.com/@types/react/-/react-18.3.26.tgz#4c5970878d30db3d2a0bca1e4eb5f258e391bbeb" + integrity sha512-RFA/bURkcKzx/X9oumPG9Vp3D3JUgus/d0b67KB0t5S/raciymilkOa66olh78MUI92QLbEJevO7rvqU/kjwKA== dependencies: "@types/prop-types" "*" csstype "^3.0.2" -"@types/resolve@1.20.2": - version "1.20.2" - resolved "https://registry.yarnpkg.com/@types/resolve/-/resolve-1.20.2.tgz#97d26e00cd4a0423b4af620abecf3e6f442b7975" - integrity sha512-60BCwRFOZCQhDncwQdxxeOEEkbc5dIMccYLwbxsS4TUNeVECQ/pBJ0j09mrHOl/JJvpRPGwO9SvE4nR2Nb/a4Q== - "@types/retry@0.12.0": version "0.12.0" resolved "https://registry.yarnpkg.com/@types/retry/-/retry-0.12.0.tgz#2b35eccfcee7d38cd72ad99232fbd58bffb3c84d" @@ -8603,9 +6697,16 @@ integrity sha512-FmgJfu+MOcQ370SD0ev7EI8TlCAfKYU+B4m5T3yXc1CiRN94g/SZPtsCkk506aUDtlMnFZvasDwHHUcZUEaYuA== "@types/send@*": - version "0.17.5" - resolved "https://registry.yarnpkg.com/@types/send/-/send-0.17.5.tgz#d991d4f2b16f2b1ef497131f00a9114290791e74" - integrity sha512-z6F2D3cOStZvuk2SaP6YrwkNO65iTZcwA2ZkSABegdkAh/lf+Aa/YQndZVfmEXT5vgAp6zv06VQ3ejSVjAny4w== + version "1.2.1" + resolved "https://registry.yarnpkg.com/@types/send/-/send-1.2.1.tgz#6a784e45543c18c774c049bff6d3dbaf045c9c74" + integrity sha512-arsCikDvlU99zl1g69TcAB3mzZPpxgw0UQnaHeC1Nwb015xp8bknZv5rIfri9xTOcMuaVgvabfIRA7PSZVuZIQ== + dependencies: + "@types/node" "*" + +"@types/send@<1": + version "0.17.6" + resolved "https://registry.yarnpkg.com/@types/send/-/send-0.17.6.tgz#aeb5385be62ff58a52cd5459daa509ae91651d25" + integrity sha512-Uqt8rPBE8SY0RK8JB1EzVOIZ32uqy8HwdxCnoCOsYrvnswqmFZ/k+9Ikidlk/ImhsdvBsloHbAlewb2IEBV/Og== dependencies: "@types/mime" "^1" "@types/node" "*" @@ -8618,13 +6719,13 @@ "@types/express" "*" "@types/serve-static@*", "@types/serve-static@^1.13.10": - version "1.15.8" - resolved "https://registry.yarnpkg.com/@types/serve-static/-/serve-static-1.15.8.tgz#8180c3fbe4a70e8f00b9f70b9ba7f08f35987877" - integrity sha512-roei0UY3LhpOJvjbIP6ZZFngyLKl5dskOtDhxY5THRSpO+ZI+nzJ+m5yUMzGrp89YRa7lvknKkMYjqQFGwA7Sg== + version "1.15.10" + resolved "https://registry.yarnpkg.com/@types/serve-static/-/serve-static-1.15.10.tgz#768169145a778f8f5dfcb6360aead414a3994fee" + integrity sha512-tRs1dB+g8Itk72rlSI2ZrW6vZg0YrLI81iQSTkMmOqnqCaNr/8Ek4VwWcN5vZgCYWbg/JJSGBlUaYGAOP73qBw== dependencies: "@types/http-errors" "*" "@types/node" "*" - "@types/send" "*" + "@types/send" "<1" "@types/sockjs@^0.3.33": version "0.3.36" @@ -8728,16 +6829,16 @@ "@types/yargs-parser" "*" "@types/yargs@^16.0.0": - version "16.0.9" - resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-16.0.9.tgz#ba506215e45f7707e6cbcaf386981155b7ab956e" - integrity sha512-tHhzvkFXZQeTECenFoRljLBYPZJ7jAVxqqtEI0qTLOmuultnFp4I9yKE17vTuhf7BkhCu7I4XuemPgikDVuYqA== + version "16.0.10" + resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-16.0.10.tgz#2376eed83bc9dbda3d7253a44e18328fc0854477" + integrity sha512-0xbOE6Ht/oj0MTVVXCCdEZzUk7adwW3YB1Tg1ZBm95jrkrUMI0VA4sf3SgxC1TG8p5aKkn3jxT9A2BDw1mM/TQ== dependencies: "@types/yargs-parser" "*" "@types/yargs@^17.0.33", "@types/yargs@^17.0.8": - version "17.0.33" - resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-17.0.33.tgz#8c32303da83eec050a84b3c7ae7b9f922d13e32d" - integrity sha512-WpxBCKWPLr4xSsHgz511rFJAM+wS28w2zEO1QDNY5zM/S8ok70NNfztH0xwhqKyaK0OHCbN98LDAZuy1ctxDkA== + version "17.0.34" + resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-17.0.34.tgz#1c2f9635b71d5401827373a01ce2e8a7670ea839" + integrity sha512-KExbHVa92aJpw9WDQvzBaGVE2/Pz+pLZQloT2hjL8IqsZnV62rlPOYvNnLmf/L2dyllfVUOVBj64M0z/46eR2A== dependencies: "@types/yargs-parser" "*" @@ -8746,7 +6847,7 @@ resolved "https://registry.yarnpkg.com/@types/zxcvbn/-/zxcvbn-4.4.5.tgz#8ce8623ed7a36e3a76d1c0b539708dfb2e859bc0" integrity sha512-FZJgC5Bxuqg7Rhsm/bx6gAruHHhDQ55r+s0JhDh8CQ16fD7NsJJ+p8YMMQDhSQoIrSmjpqqYWA96oQVMNkjRyA== -"@typescript-eslint/eslint-plugin@^5.13.0", "@typescript-eslint/eslint-plugin@^5.7.0": +"@typescript-eslint/eslint-plugin@^5.13.0": version "5.62.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.62.0.tgz#aeef0328d172b9e37d9bab6dbc13b87ed88977db" integrity sha512-TiZzBSJja/LbhNPvk6yc0JrX9XqhQ0hdh6M2svYfsHGejaKFIAGd9MQ+ERIMzLGlN/kZoYIgdxFV0PuljTKXag== @@ -8763,15 +6864,15 @@ tsutils "^3.21.0" "@typescript-eslint/eslint-plugin@^5.4.2 || ^6.0.0 || ^7.0.0 || ^8.0.0": - version "8.45.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.45.0.tgz#9f251d4e85ec5089e7cccb09257ce93dbf0d7744" - integrity sha512-HC3y9CVuevvWCl/oyZuI47dOeDF9ztdMEfMH8/DW/Mhwa9cCLnK1oD7JoTVGW/u7kFzNZUKUoyJEqkaJh5y3Wg== + version "8.46.2" + resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.46.2.tgz#dc4ab93ee3d7e6c8e38820a0d6c7c93c7183e2dc" + integrity sha512-ZGBMToy857/NIPaaCucIUQgqueOiq7HeAKkhlvqVV4lm089zUFW6ikRySx2v+cAhKeUCPuWVHeimyk6Dw1iY3w== dependencies: "@eslint-community/regexpp" "^4.10.0" - "@typescript-eslint/scope-manager" "8.45.0" - "@typescript-eslint/type-utils" "8.45.0" - "@typescript-eslint/utils" "8.45.0" - "@typescript-eslint/visitor-keys" "8.45.0" + "@typescript-eslint/scope-manager" "8.46.2" + "@typescript-eslint/type-utils" "8.46.2" + "@typescript-eslint/utils" "8.46.2" + "@typescript-eslint/visitor-keys" "8.46.2" graphemer "^1.4.0" ignore "^7.0.0" natural-compare "^1.4.0" @@ -8784,7 +6885,7 @@ dependencies: "@typescript-eslint/utils" "5.62.0" -"@typescript-eslint/parser@^5.13.0", "@typescript-eslint/parser@^5.7.0": +"@typescript-eslint/parser@^5.13.0": version "5.62.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-5.62.0.tgz#1b63d082d849a2fcae8a569248fbe2ee1b8a56c7" integrity sha512-VlJEV0fOQ7BExOsHYAGrgbEiZoi8D+Bl2+f6V2RrXerRSylnp+ZBHmPvaIa8cz0Ajx7WO7Z5RqfgYg7ED1nRhA== @@ -8795,23 +6896,23 @@ debug "^4.3.4" "@typescript-eslint/parser@^5.4.2 || ^6.0.0 || ^7.0.0 || ^8.0.0": - version "8.45.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-8.45.0.tgz#571660c98824aefb4a6ec3b3766655d1348520a4" - integrity sha512-TGf22kon8KW+DeKaUmOibKWktRY8b2NSAZNdtWh798COm1NWx8+xJ6iFBtk3IvLdv6+LGLJLRlyhrhEDZWargQ== + version "8.46.2" + resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-8.46.2.tgz#dd938d45d581ac8ffa9d8a418a50282b306f7ebf" + integrity sha512-BnOroVl1SgrPLywqxyqdJ4l3S2MsKVLDVxZvjI1Eoe8ev2r3kGDo+PcMihNmDE+6/KjkTubSJnmqGZZjQSBq/g== dependencies: - "@typescript-eslint/scope-manager" "8.45.0" - "@typescript-eslint/types" "8.45.0" - "@typescript-eslint/typescript-estree" "8.45.0" - "@typescript-eslint/visitor-keys" "8.45.0" + "@typescript-eslint/scope-manager" "8.46.2" + "@typescript-eslint/types" "8.46.2" + "@typescript-eslint/typescript-estree" "8.46.2" + "@typescript-eslint/visitor-keys" "8.46.2" debug "^4.3.4" -"@typescript-eslint/project-service@8.45.0": - version "8.45.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/project-service/-/project-service-8.45.0.tgz#f83dda1bca31dae2fd6821f9131daf1edebfd46c" - integrity sha512-3pcVHwMG/iA8afdGLMuTibGR7pDsn9RjDev6CCB+naRsSYs2pns5QbinF4Xqw6YC/Sj3lMrm/Im0eMfaa61WUg== +"@typescript-eslint/project-service@8.46.2": + version "8.46.2" + resolved "https://registry.yarnpkg.com/@typescript-eslint/project-service/-/project-service-8.46.2.tgz#ab2f02a0de4da6a7eeb885af5e059be57819d608" + integrity sha512-PULOLZ9iqwI7hXcmL4fVfIsBi6AN9YxRc0frbvmg8f+4hQAjQ5GYNKK0DIArNo+rOKmR/iBYwkpBmnIwin4wBg== dependencies: - "@typescript-eslint/tsconfig-utils" "^8.45.0" - "@typescript-eslint/types" "^8.45.0" + "@typescript-eslint/tsconfig-utils" "^8.46.2" + "@typescript-eslint/types" "^8.46.2" debug "^4.3.4" "@typescript-eslint/scope-manager@5.62.0": @@ -8822,18 +6923,18 @@ "@typescript-eslint/types" "5.62.0" "@typescript-eslint/visitor-keys" "5.62.0" -"@typescript-eslint/scope-manager@8.45.0": - version "8.45.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-8.45.0.tgz#59615ba506a9e3479d1efb0d09d6ab52f2a19142" - integrity sha512-clmm8XSNj/1dGvJeO6VGH7EUSeA0FMs+5au/u3lrA3KfG8iJ4u8ym9/j2tTEoacAffdW1TVUzXO30W1JTJS7dA== +"@typescript-eslint/scope-manager@8.46.2": + version "8.46.2" + resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-8.46.2.tgz#7d37df2493c404450589acb3b5d0c69cc0670a88" + integrity sha512-LF4b/NmGvdWEHD2H4MsHD8ny6JpiVNDzrSZr3CsckEgCbAGZbYM4Cqxvi9L+WqDMT+51Ozy7lt2M+d0JLEuBqA== dependencies: - "@typescript-eslint/types" "8.45.0" - "@typescript-eslint/visitor-keys" "8.45.0" + "@typescript-eslint/types" "8.46.2" + "@typescript-eslint/visitor-keys" "8.46.2" -"@typescript-eslint/tsconfig-utils@8.45.0", "@typescript-eslint/tsconfig-utils@^8.45.0": - version "8.45.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.45.0.tgz#63d38282790a2566c571bad423e7c1cad1f3d64c" - integrity sha512-aFdr+c37sc+jqNMGhH+ajxPXwjv9UtFZk79k8pLoJ6p4y0snmYpPA52GuWHgt2ZF4gRRW6odsEj41uZLojDt5w== +"@typescript-eslint/tsconfig-utils@8.46.2", "@typescript-eslint/tsconfig-utils@^8.46.2": + version "8.46.2" + resolved "https://registry.yarnpkg.com/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.46.2.tgz#d110451cb93bbd189865206ea37ef677c196828c" + integrity sha512-a7QH6fw4S57+F5y2FIxxSDyi5M4UfGF+Jl1bCGd7+L4KsaUY80GsiF/t0UoRFDHAguKlBaACWJRmdrc6Xfkkag== "@typescript-eslint/type-utils@5.62.0": version "5.62.0" @@ -8845,14 +6946,14 @@ debug "^4.3.4" tsutils "^3.21.0" -"@typescript-eslint/type-utils@8.45.0": - version "8.45.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-8.45.0.tgz#04004bdf2598844faa29fb936fb6b0ee10d6d3f3" - integrity sha512-bpjepLlHceKgyMEPglAeULX1vixJDgaKocp0RVJ5u4wLJIMNuKtUXIczpJCPcn2waII0yuvks/5m5/h3ZQKs0A== +"@typescript-eslint/type-utils@8.46.2": + version "8.46.2" + resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-8.46.2.tgz#802d027864e6fb752e65425ed09f3e089fb4d384" + integrity sha512-HbPM4LbaAAt/DjxXaG9yiS9brOOz6fabal4uvUmaUYe6l3K1phQDMQKBRUrr06BQkxkvIZVVHttqiybM9nJsLA== dependencies: - "@typescript-eslint/types" "8.45.0" - "@typescript-eslint/typescript-estree" "8.45.0" - "@typescript-eslint/utils" "8.45.0" + "@typescript-eslint/types" "8.46.2" + "@typescript-eslint/typescript-estree" "8.46.2" + "@typescript-eslint/utils" "8.46.2" debug "^4.3.4" ts-api-utils "^2.1.0" @@ -8861,10 +6962,10 @@ resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.62.0.tgz#258607e60effa309f067608931c3df6fed41fd2f" integrity sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ== -"@typescript-eslint/types@8.45.0", "@typescript-eslint/types@^8.45.0": - version "8.45.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-8.45.0.tgz#fc01cd2a4690b9713b02f895e82fb43f7d960684" - integrity sha512-WugXLuOIq67BMgQInIxxnsSyRLFxdkJEJu8r4ngLR56q/4Q5LrbfkFRH27vMTjxEK8Pyz7QfzuZe/G15qQnVRA== +"@typescript-eslint/types@8.46.2", "@typescript-eslint/types@^8.46.2": + version "8.46.2" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-8.46.2.tgz#2bad7348511b31e6e42579820e62b73145635763" + integrity sha512-lNCWCbq7rpg7qDsQrd3D6NyWYu+gkTENkG5IKYhUIcxSb59SQC/hEQ+MrG4sTgBVghTonNWq42bA/d4yYumldQ== "@typescript-eslint/typescript-estree@5.62.0": version "5.62.0" @@ -8879,15 +6980,15 @@ semver "^7.3.7" tsutils "^3.21.0" -"@typescript-eslint/typescript-estree@8.45.0": - version "8.45.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-8.45.0.tgz#3498500f109a89b104d2770497c707e56dfe062d" - integrity sha512-GfE1NfVbLam6XQ0LcERKwdTTPlLvHvXXhOeUGC1OXi4eQBoyy1iVsW+uzJ/J9jtCz6/7GCQ9MtrQ0fml/jWCnA== +"@typescript-eslint/typescript-estree@8.46.2": + version "8.46.2" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-8.46.2.tgz#ab547a27e4222bb6a3281cb7e98705272e2c7d08" + integrity sha512-f7rW7LJ2b7Uh2EiQ+7sza6RDZnajbNbemn54Ob6fRwQbgcIn+GWfyuHDHRYgRoZu1P4AayVScrRW+YfbTvPQoQ== dependencies: - "@typescript-eslint/project-service" "8.45.0" - "@typescript-eslint/tsconfig-utils" "8.45.0" - "@typescript-eslint/types" "8.45.0" - "@typescript-eslint/visitor-keys" "8.45.0" + "@typescript-eslint/project-service" "8.46.2" + "@typescript-eslint/tsconfig-utils" "8.46.2" + "@typescript-eslint/types" "8.46.2" + "@typescript-eslint/visitor-keys" "8.46.2" debug "^4.3.4" fast-glob "^3.3.2" is-glob "^4.0.3" @@ -8909,15 +7010,15 @@ eslint-scope "^5.1.1" semver "^7.3.7" -"@typescript-eslint/utils@8.45.0": - version "8.45.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-8.45.0.tgz#6e68e92d99019fdf56018d0e6664c76a70470c95" - integrity sha512-bxi1ht+tLYg4+XV2knz/F7RVhU0k6VrSMc9sb8DQ6fyCTrGQLHfo7lDtN0QJjZjKkLA2ThrKuCdHEvLReqtIGg== +"@typescript-eslint/utils@8.46.2": + version "8.46.2" + resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-8.46.2.tgz#b313d33d67f9918583af205bd7bcebf20f231732" + integrity sha512-sExxzucx0Tud5tE0XqR0lT0psBQvEpnpiul9XbGUB1QwpWJJAps1O/Z7hJxLGiZLBKMCutjTzDgmd1muEhBnVg== dependencies: "@eslint-community/eslint-utils" "^4.7.0" - "@typescript-eslint/scope-manager" "8.45.0" - "@typescript-eslint/types" "8.45.0" - "@typescript-eslint/typescript-estree" "8.45.0" + "@typescript-eslint/scope-manager" "8.46.2" + "@typescript-eslint/types" "8.46.2" + "@typescript-eslint/typescript-estree" "8.46.2" "@typescript-eslint/visitor-keys@5.62.0": version "5.62.0" @@ -8927,12 +7028,12 @@ "@typescript-eslint/types" "5.62.0" eslint-visitor-keys "^3.3.0" -"@typescript-eslint/visitor-keys@8.45.0": - version "8.45.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-8.45.0.tgz#4e3bcc55da64ac61069ebfe62ca240567ac7d784" - integrity sha512-qsaFBA3e09MIDAGFUrTk+dzqtfv1XPVz8t8d1f0ybTzrCY7BKiMC5cjrl1O/P7UmHsNyW90EYSkU/ZWpmXelag== +"@typescript-eslint/visitor-keys@8.46.2": + version "8.46.2" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-8.46.2.tgz#803fa298948c39acf810af21bdce6f8babfa9738" + integrity sha512-tUFMXI4gxzzMXt4xpGJEsBsTox0XbNQ1y94EwlD/CuZwFcQP79xfQqMhau9HsRc/J0cAPA/HZt1dZPtGn9V/7w== dependencies: - "@typescript-eslint/types" "8.45.0" + "@typescript-eslint/types" "8.46.2" eslint-visitor-keys "^4.2.1" "@uidotdev/usehooks@^2.4.1": @@ -9133,9 +7234,9 @@ unstorage "^1.9.0" "@walletconnect/logger@^2.0.1": - version "2.1.2" - resolved "https://registry.yarnpkg.com/@walletconnect/logger/-/logger-2.1.2.tgz#813c9af61b96323a99f16c10089bfeb525e2a272" - integrity sha512-aAb28I3S6pYXZHQm5ESB+V6rDqIYfsnHaQyzFbwUUBFY4H0OXx/YtTl8lvhUNhMMfb9UxbwEBS253TlXUYJWSw== + version "2.1.3" + resolved "https://registry.yarnpkg.com/@walletconnect/logger/-/logger-2.1.3.tgz#f7b2ba46652a960fb731839cad271a94a0523a08" + integrity sha512-wRsD0eDQSajj8YMM/jpxoH1yeSLyS7FPkh0VKCQ1BWrERTy1Z7/DmOE8FYm/gmd7Cg6BNXVWiymhGq6wnmlq8w== dependencies: "@walletconnect/safe-json" "^1.0.2" pino "7.11.0" @@ -9548,7 +7649,7 @@ acorn@^6.4.1: resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.4.2.tgz#35866fd710528e92de10cf06016498e47e39e1e6" integrity sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ== -acorn@^7.1.1, acorn@^7.4.0, acorn@^7.4.1: +acorn@^7.1.1, acorn@^7.4.1: version "7.4.1" resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.4.1.tgz#feaed255973d2e77555b83dbc08851a6c63520fa" integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A== @@ -9642,7 +7743,7 @@ ajv-keywords@^5.1.0: dependencies: fast-deep-equal "^3.1.3" -ajv@^6.1.0, ajv@^6.10.0, ajv@^6.10.2, ajv@^6.12.2, ajv@^6.12.4, ajv@^6.12.5: +ajv@^6.1.0, ajv@^6.10.2, ajv@^6.12.2, ajv@^6.12.4, ajv@^6.12.5: version "6.12.6" resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== @@ -9652,7 +7753,7 @@ ajv@^6.1.0, ajv@^6.10.0, ajv@^6.10.2, ajv@^6.12.2, ajv@^6.12.4, ajv@^6.12.5: json-schema-traverse "^0.4.1" uri-js "^4.2.2" -ajv@^8.0.0, ajv@^8.0.1, ajv@^8.9.0: +ajv@^8.0.0, ajv@^8.9.0: version "8.17.1" resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.17.1.tgz#37d9a5c776af6bc92d7f4f9510eba4c0a60d11a6" integrity sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g== @@ -9679,21 +7780,11 @@ ansi-colors@^3.0.0: resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-3.2.4.tgz#e3a3da4bfbae6c86a9c285625de124a234026fbf" integrity sha512-hHUXGagefjN2iRrID63xckIvotOXOojhQKWIPUZ4mNUZ9nLZW+7FMNoE1lOkEhNWYsx/7ysGIuJYCiMAA9FnrA== -ansi-colors@^4.1.1, ansi-colors@^4.1.3: +ansi-colors@^4.1.1: version "4.1.3" resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.3.tgz#37611340eb2243e70cc604cad35d63270d48781b" integrity sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw== -ansi-escapes@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-2.0.0.tgz#5bae52be424878dd9783e8910e3fc2922e83c81b" - integrity sha512-tH/fSoQp4DrEodDK3QpdiWiZTSe7sBJ9eOqcQBZ0o9HTM+5M/viSEn+sPMoTuPjQQ8n++w3QJoPEjt8LVPcrCg== - -ansi-escapes@^3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-3.2.0.tgz#8780b98ff9dbf5638152d1f1fe5c1d7b4442976b" - integrity sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ== - ansi-escapes@^4.2.1: version "4.3.2" resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-4.3.2.tgz#6b2291d1db7d98b6521d5f1efa42d0f3a9feb65e" @@ -9716,16 +7807,6 @@ ansi-regex@^2.0.0: resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" integrity sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA== -ansi-regex@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.1.tgz#123d6479e92ad45ad897d4054e3c7ca7db4944e1" - integrity sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw== - -ansi-regex@^4.1.0: - version "4.1.1" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-4.1.1.tgz#164daac87ab2d6f6db3a29875e2d1766582dabed" - integrity sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g== - ansi-regex@^5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" @@ -9736,16 +7817,6 @@ ansi-regex@^6.0.1: resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-6.2.2.tgz#60216eea464d864597ce2832000738a0589650c1" integrity sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg== -ansi-sequence-parser@^1.1.0: - version "1.1.3" - resolved "https://registry.yarnpkg.com/ansi-sequence-parser/-/ansi-sequence-parser-1.1.3.tgz#f2cefb8b681aeb72b7cd50aebc00d509eba64d4c" - integrity sha512-+fksAx9eG3Ab6LDnLs3ZqZa8KVJ/jYnX+D4Qe1azX+LFGFAXqynCQLOdLpNYN/l9e7l6hMWwZbrnctqr6eSQSw== - -ansi-styles@^2.2.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe" - integrity sha512-kmCevFghRiWM7HB5zTPULl4r9bVFSWjz62MhqizDGUrq2NWuNMQyuv4tHHoKJHs69M/MF64lEcHdYIocrdWQYA== - ansi-styles@^3.2.1: version "3.2.1" resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" @@ -9777,11 +7848,6 @@ ansi-to-html@^0.6.11: dependencies: entities "^2.0.0" -any-promise@^1.0.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/any-promise/-/any-promise-1.3.0.tgz#abc6afeedcea52e809cdc0376aed3ce39635d17f" - integrity sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A== - anymatch@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-2.0.0.tgz#bcb24b4f37934d9aa7ac17b4adaf89e7c76ef2eb" @@ -10028,7 +8094,7 @@ arraybuffer.prototype.slice@^1.0.4: get-intrinsic "^1.2.6" is-array-buffer "^3.0.4" -arrify@^1.0.0, arrify@^1.0.1: +arrify@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d" integrity sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA== @@ -10060,13 +8126,6 @@ assign-symbols@^1.0.0: resolved "https://registry.yarnpkg.com/assign-symbols/-/assign-symbols-1.0.0.tgz#59667f41fadd4f20ccbc2bb96b8d4f7f78ec0367" integrity sha512-Q+JC7Whu8HhmTdBph/Tq59IoRtoy6KAm5zzPv00WdujX82lbAL8K7WVjne7vdCsAmbF4AYaDOPyO3k0kl8qIrw== -ast-stringify@0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/ast-stringify/-/ast-stringify-0.1.0.tgz#5c6439fbfb4513dcc26c7d34464ccd084ed91cb7" - integrity sha512-J1PgFYV3RG6r37+M6ySZJH406hR82okwGvFM9hLXpOvdx4WC4GEW8/qiw6pi1hKTrqcRvoHP8a7mp87egYr6iA== - dependencies: - "@babel/runtime" "^7.11.2" - ast-types-flow@^0.0.8: version "0.0.8" resolved "https://registry.yarnpkg.com/ast-types-flow/-/ast-types-flow-0.0.8.tgz#0a85e1c92695769ac13a428bb653e7538bea27d6" @@ -10079,11 +8138,6 @@ ast-types@^0.14.2: dependencies: tslib "^2.0.1" -astral-regex@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-2.0.0.tgz#483143c567aeed4785759c0865786dc77d7d2e31" - integrity sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ== - async-each@^1.0.1: version "1.0.6" resolved "https://registry.yarnpkg.com/async-each/-/async-each-1.0.6.tgz#52f1d9403818c179b7561e11a5d1b77eb2160e77" @@ -10119,11 +8173,6 @@ atomic-sleep@^1.0.0: resolved "https://registry.yarnpkg.com/atomic-sleep/-/atomic-sleep-1.0.0.tgz#eb85b77a601fc932cfe432c5acd364a9e2c9075b" integrity sha512-kNOjDqAh7px0XWNI+4QbzoiR/nTkHAWNud2uvnJquD1/x5a7EQZMJT0AczqK0Qn67oY/TTQ1LbUKajZpp3I9tQ== -attr-accept@^2.0.0, attr-accept@^2.2.4: - version "2.2.5" - resolved "https://registry.yarnpkg.com/attr-accept/-/attr-accept-2.2.5.tgz#d7061d958e6d4f97bf8665c68b75851a0713ab5e" - integrity sha512-0bDNnY/u6pPwHDMoF0FieU354oBi0a8rD9FcsLwzcGWbc8KS8KPIi7y+s13OlVY+gMWc/9xEMUgNE6Qm8ZllYQ== - author-regex@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/author-regex/-/author-regex-1.0.0.tgz#d08885be6b9bbf9439fe087c76287245f0a81450" @@ -10150,18 +8199,11 @@ available-typed-arrays@^1.0.7: possible-typed-array-names "^1.0.0" axe-core@^4.10.0: - version "4.10.3" - resolved "https://registry.yarnpkg.com/axe-core/-/axe-core-4.10.3.tgz#04145965ac7894faddbac30861e5d8f11bfd14fc" - integrity sha512-Xm7bpRXnDSX2YE2YFfBk2FnF0ep6tmG7xPh8iHee8MIcrgq762Nkce856dYtJYLkuIoYZvGfTs/PbZhideTcEg== + version "4.11.0" + resolved "https://registry.yarnpkg.com/axe-core/-/axe-core-4.11.0.tgz#16f74d6482e343ff263d4f4503829e9ee91a86b6" + integrity sha512-ilYanEU8vxxBexpJd8cWM4ElSQq4QctCLKih0TSfjIfCQTeyH/6zVrmIJfLPrKTKJRbiG+cfnZbQIjAlJmF1jQ== -axios@^0.21.2: - version "0.21.4" - resolved "https://registry.yarnpkg.com/axios/-/axios-0.21.4.tgz#c67b90dc0568e5c1cf2b0b858c43ba28e2eda575" - integrity sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg== - dependencies: - follow-redirects "^1.14.0" - -axios@^1.0.0, axios@^1.3.3, axios@^1.6.0: +axios@^1.0.0, axios@^1.6.0: version "1.12.2" resolved "https://registry.yarnpkg.com/axios/-/axios-1.12.2.tgz#6c307390136cf7a2278d09cec63b136dfc6e6da7" integrity sha512-vMJzPewAlRyOgxV2dU0Cuz2O8zzzx9VYtbJOaBgXFeLc4IV/Eg50n4LowmehOOR61S8ZMpc2K5Sa7g6A4jfkUw== @@ -10189,19 +8231,6 @@ babel-jest@^27.5.1: graceful-fs "^4.2.9" slash "^3.0.0" -babel-jest@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-29.7.0.tgz#f4369919225b684c56085998ac63dbd05be020d5" - integrity sha512-BrvGY3xZSwEcCzKvKsCi2GgHqDqsYkOP4/by5xCgIwGXQxIEh+8ew3gmrE1y7XRR6LHZIj6yLYnUi/mm2KXKBg== - dependencies: - "@jest/transform" "^29.7.0" - "@types/babel__core" "^7.1.14" - babel-plugin-istanbul "^6.1.1" - babel-preset-jest "^29.6.3" - chalk "^4.0.0" - graceful-fs "^4.2.9" - slash "^3.0.0" - babel-loader@^8.0.0, babel-loader@^8.2.3, babel-loader@^8.3.0: version "8.4.1" resolved "https://registry.yarnpkg.com/babel-loader/-/babel-loader-8.4.1.tgz#6ccb75c66e62c3b144e1c5f2eaec5b8f6c08c675" @@ -10261,16 +8290,6 @@ babel-plugin-jest-hoist@^27.5.1: "@types/babel__core" "^7.0.0" "@types/babel__traverse" "^7.0.6" -babel-plugin-jest-hoist@^29.6.3: - version "29.6.3" - resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-29.6.3.tgz#aadbe943464182a8922c3c927c3067ff40d24626" - integrity sha512-ESAc/RJvGTFEzRwOTT4+lNDk/GNHMkKbNzsvT0qKRfDyyYTskxB5rnU2njIDYVxXCBHHEI1c0YwHob3WaYujOg== - dependencies: - "@babel/template" "^7.3.3" - "@babel/types" "^7.3.3" - "@types/babel__core" "^7.1.14" - "@types/babel__traverse" "^7.0.6" - babel-plugin-macros@^3.0.1, babel-plugin-macros@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/babel-plugin-macros/-/babel-plugin-macros-3.1.0.tgz#9ef6dc74deb934b4db344dc973ee851d148c50c1" @@ -10285,15 +8304,6 @@ babel-plugin-named-exports-order@^0.0.2: resolved "https://registry.yarnpkg.com/babel-plugin-named-exports-order/-/babel-plugin-named-exports-order-0.0.2.tgz#ae14909521cf9606094a2048239d69847540cb09" integrity sha512-OgOYHOLoRK+/mvXU9imKHlG6GkPLYrUCvFXG/CM93R/aNNO8pOOF4aS+S8CCHMDQoNSeiOYEZb/G6RwL95Jktw== -babel-plugin-polyfill-corejs2@^0.3.2: - version "0.3.3" - resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.3.tgz#5d1bd3836d0a19e1b84bbf2d9640ccb6f951c122" - integrity sha512-8hOdmFYFSZhqg2C/JgLUQ+t52o5nirNwaWM2B9LWteozwIvM14VSwdsCAUET10qT+kmySAlseadmfeeSWFCy+Q== - dependencies: - "@babel/compat-data" "^7.17.7" - "@babel/helper-define-polyfill-provider" "^0.3.3" - semver "^6.1.1" - babel-plugin-polyfill-corejs2@^0.4.14: version "0.4.14" resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.14.tgz#8101b82b769c568835611542488d463395c2ef8f" @@ -10319,21 +8329,6 @@ babel-plugin-polyfill-corejs3@^0.13.0: "@babel/helper-define-polyfill-provider" "^0.6.5" core-js-compat "^3.43.0" -babel-plugin-polyfill-corejs3@^0.5.3: - version "0.5.3" - resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.5.3.tgz#d7e09c9a899079d71a8b670c6181af56ec19c5c7" - integrity sha512-zKsXDh0XjnrUEW0mxIHLfjBfnXSMr5Q/goMe/fxpQnLm07mcOZiIZHBNWCMx60HmdvjxfXcalac0tfFg0wqxyw== - dependencies: - "@babel/helper-define-polyfill-provider" "^0.3.2" - core-js-compat "^3.21.0" - -babel-plugin-polyfill-regenerator@^0.4.0: - version "0.4.1" - resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.4.1.tgz#390f91c38d90473592ed43351e801a9d3e0fd747" - integrity sha512-NtQGmyQDXjQqQ+IzRkBVwEOz9lQ4zxAQZgoAYEtU9dJjnl1Oc98qnN7jcp+bE7O7aYzVpavXE3/VKXNzUbh7aw== - dependencies: - "@babel/helper-define-polyfill-provider" "^0.3.3" - babel-plugin-polyfill-regenerator@^0.6.5: version "0.6.5" resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.6.5.tgz#32752e38ab6f6767b92650347bf26a31b16ae8c5" @@ -10393,14 +8388,6 @@ babel-preset-jest@^27.5.1: babel-plugin-jest-hoist "^27.5.1" babel-preset-current-node-syntax "^1.0.0" -babel-preset-jest@^29.6.3: - version "29.6.3" - resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-29.6.3.tgz#fa05fa510e7d493896d7b0dd2033601c840f171c" - integrity sha512-0B3bhxR6snWXJZtR/RliHTDPRgn1sNHOR0yVtq/IiQFyuOVjFS+wuio/R4gSNkyYmKmJB4wGZv2NZanmKmTnNA== - dependencies: - babel-plugin-jest-hoist "^29.6.3" - babel-preset-current-node-syntax "^1.0.0" - bail@^1.0.0: version "1.0.5" resolved "https://registry.yarnpkg.com/bail/-/bail-1.0.5.tgz#b6fa133404a392cbc1f8c4bf63f5953351e7a776" @@ -10416,18 +8403,13 @@ balanced-match@^1.0.0: resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== -base-x@^3.0.11, base-x@^3.0.2, base-x@^3.0.6: +base-x@^3.0.2, base-x@^3.0.6: version "3.0.11" resolved "https://registry.yarnpkg.com/base-x/-/base-x-3.0.11.tgz#40d80e2a1aeacba29792ccc6c5354806421287ff" integrity sha512-xz7wQ8xDhdyP7tQxwdteLYeFfS68tSMNCZ/Y37WJ4bhGfKPpqEIlmIyueQHqOyoPhE6xNUqjzRr8ra0eF9VRvA== dependencies: safe-buffer "^5.0.1" -base64-arraybuffer-es6@^0.7.0: - version "0.7.0" - resolved "https://registry.yarnpkg.com/base64-arraybuffer-es6/-/base64-arraybuffer-es6-0.7.0.tgz#dbe1e6c87b1bf1ca2875904461a7de40f21abc86" - integrity sha512-ESyU/U1CFZDJUdr+neHRhNozeCv72Y7Vm0m1DCbjX3KBjT6eYocvAJlSk6+8+HkVwXlT1FNxhGW6q3UKAlCvvw== - base64-js@^1.0.2, base64-js@^1.3.0, base64-js@^1.3.1: version "1.5.1" resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" @@ -10446,10 +8428,10 @@ base@^0.11.1: mixin-deep "^1.2.0" pascalcase "^0.1.1" -baseline-browser-mapping@^2.8.9: - version "2.8.10" - resolved "https://registry.yarnpkg.com/baseline-browser-mapping/-/baseline-browser-mapping-2.8.10.tgz#32eb5e253d633fa3fa3ffb1685fabf41680d9e8a" - integrity sha512-uLfgBi+7IBNay8ECBO2mVMGZAc1VgZWEChxm4lv+TobGdG82LnXMjuNGo/BSSZZL4UmkWhxEHP2f5ziLNwGWMA== +baseline-browser-mapping@^2.8.19: + version "2.8.20" + resolved "https://registry.yarnpkg.com/baseline-browser-mapping/-/baseline-browser-mapping-2.8.20.tgz#6766cf270f3668d20b6712b9c54cc911b87da714" + integrity sha512-JMWsdF+O8Orq3EMukbUN1QfbLK9mX2CkUmQBcW2T0s8OmdAUL5LLM/6wFwSrqXzlXB13yhyK9gTKS1rIizOduQ== batch@0.6.1: version "0.6.1" @@ -10681,11 +8663,6 @@ browser-process-hrtime@^1.0.0: resolved "https://registry.yarnpkg.com/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz#3c9b4b7d782c8121e56f10106d84c0d0ffc94626" integrity sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow== -browser-stdout@^1.3.1: - version "1.3.1" - resolved "https://registry.yarnpkg.com/browser-stdout/-/browser-stdout-1.3.1.tgz#baa559ee14ced73452229bad7326467c61fabd60" - integrity sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw== - browserify-aes@^1.0.4, browserify-aes@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/browserify-aes/-/browserify-aes-1.2.0.tgz#326734642f403dabc3003209853bb70ad428ef48" @@ -10748,18 +8725,18 @@ browserify-zlib@^0.2.0: dependencies: pako "~1.0.5" -browserslist@^4.0.0, browserslist@^4.12.0, browserslist@^4.21.4, browserslist@^4.23.0, browserslist@^4.24.0, browserslist@^4.24.5, browserslist@^4.25.3: - version "4.26.3" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.26.3.tgz#40fbfe2d1cd420281ce5b1caa8840049c79afb56" - integrity sha512-lAUU+02RFBuCKQPj/P6NgjlbCnLBMp4UtgTx7vNHd3XSIJF87s9a5rA3aH2yw3GS9DqZAUbOtZdCCiZeVRqt0w== +browserslist@^4.0.0, browserslist@^4.12.0, browserslist@^4.21.4, browserslist@^4.23.0, browserslist@^4.24.0, browserslist@^4.26.3: + version "4.27.0" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.27.0.tgz#755654744feae978fbb123718b2f139bc0fa6697" + integrity sha512-AXVQwdhot1eqLihwasPElhX2tAZiBjWdJ9i/Zcj2S6QYIjkx62OKSfnobkriB81C3l4w0rVy3Nt4jaTBltYEpw== dependencies: - baseline-browser-mapping "^2.8.9" - caniuse-lite "^1.0.30001746" - electron-to-chromium "^1.5.227" - node-releases "^2.0.21" - update-browserslist-db "^1.1.3" + baseline-browser-mapping "^2.8.19" + caniuse-lite "^1.0.30001751" + electron-to-chromium "^1.5.238" + node-releases "^2.0.26" + update-browserslist-db "^1.1.4" -bs-logger@0.x, bs-logger@^0.2.6: +bs-logger@0.x: version "0.2.6" resolved "https://registry.yarnpkg.com/bs-logger/-/bs-logger-0.2.6.tgz#eb7d365307a72cf974cc6cda76b68354ad336bd8" integrity sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog== @@ -10789,7 +8766,7 @@ bser@2.1.1: dependencies: node-int64 "^0.4.0" -buffer-from@^1.0.0, buffer-from@^1.1.0: +buffer-from@^1.0.0: version "1.1.2" resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5" integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ== @@ -10841,13 +8818,6 @@ builtins@^5.0.0: dependencies: semver "^7.0.0" -bundle-name@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/bundle-name/-/bundle-name-4.1.0.tgz#f3b96b34160d6431a19d7688135af7cfb8797889" - integrity sha512-tjwM5exMg6BGRI+kNmTntNsvdZS1X8BFYS6tnJ2hdH0kVxM6/eVZ2xy+FqStSWvYmtfFMDLIxurorHwDKfDz5Q== - dependencies: - run-applescript "^7.0.0" - busboy@1.6.0: version "1.6.0" resolved "https://registry.yarnpkg.com/busboy/-/busboy-1.6.0.tgz#966ea36a9502e43cdb9146962523b92f531f6893" @@ -11061,7 +9031,7 @@ camelcase@^5.3.1: resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== -camelcase@^6.0.0, camelcase@^6.2.0: +camelcase@^6.2.0: version "6.3.0" resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.3.0.tgz#5685b95eb209ac9c0c177467778c9c84df58ba9a" integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA== @@ -11076,10 +9046,10 @@ caniuse-api@^3.0.0: lodash.memoize "^4.1.2" lodash.uniq "^4.5.0" -caniuse-lite@^1.0.0, caniuse-lite@^1.0.30001109, caniuse-lite@^1.0.30001579, caniuse-lite@^1.0.30001746: - version "1.0.30001746" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001746.tgz#199d20f04f5369825e00ff7067d45d5dfa03aee7" - integrity sha512-eA7Ys/DGw+pnkWWSE/id29f2IcPHVoE8wxtvE5JdvD2V28VTDPy1yEeo11Guz0sJ4ZeGRcm3uaTcAqK1LXaphA== +caniuse-lite@^1.0.0, caniuse-lite@^1.0.30001109, caniuse-lite@^1.0.30001579, caniuse-lite@^1.0.30001751: + version "1.0.30001751" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001751.tgz#dacd5d9f4baeea841641640139d2b2a4df4226ad" + integrity sha512-A0QJhug0Ly64Ii3eIqHu5X51ebln3k4yTUkY1j8drqpWHVreg/VLijN48cZ1bYPiqOQuqpkIKnzr/Ul8V+p6Cw== capture-exit@^2.0.0: version "2.0.0" @@ -11093,11 +9063,6 @@ case-sensitive-paths-webpack-plugin@^2.3.0: resolved "https://registry.yarnpkg.com/case-sensitive-paths-webpack-plugin/-/case-sensitive-paths-webpack-plugin-2.4.0.tgz#db64066c6422eed2e08cc14b986ca43796dbc6d4" integrity sha512-roIFONhcxog0JSSWbvVAh3OocukmSgpqOH6YpMkCvav/ySIV3JKg4Dc8vYtQjYi/UxpNE36r/9v+VqTQqgkYmw== -case@1.6.3: - version "1.6.3" - resolved "https://registry.yarnpkg.com/case/-/case-1.6.3.tgz#0a4386e3e9825351ca2e6216c60467ff5f1ea1c9" - integrity sha512-mzDSXIPaFwVDvZAHqZ9VlbyF4yyXRuX6IvB06WvPYkqJVO24kX1PPhv9bfpKNFZyxYFmmgo03HUiD8iklmJYRQ== - ccount@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/ccount/-/ccount-1.1.0.tgz#246687debb6014735131be8abab2d93898f8d043" @@ -11109,11 +9074,11 @@ ccount@^2.0.0: integrity sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg== chain-registry@^1.69.64: - version "1.69.356" - resolved "https://registry.yarnpkg.com/chain-registry/-/chain-registry-1.69.356.tgz#e75ac2f46bd104fdc4fb0b0ad6e56f2e23d87b28" - integrity sha512-dE1CPa+6b4AXsxODO17MOwPExBk8BBO27GO1xeGR2J3jmukCl0aTzpe6sB4D36gOiDNETchdrGyIA4sqnJYMoQ== + version "1.69.378" + resolved "https://registry.yarnpkg.com/chain-registry/-/chain-registry-1.69.378.tgz#7184fe44d19d50082abb460e890abb1fbeec8390" + integrity sha512-jDSpxQsp0X+jPISKHAoY+ysxjlzh7jjkYRrvFE5bmdpRxrZyjCdgqdZM15qwvbZKoBwlVmxfZ2KnDSODX4raCQ== dependencies: - "@chain-registry/types" "^0.50.221" + "@chain-registry/types" "^0.50.238" chalk@4.1.0: version "4.1.0" @@ -11123,18 +9088,7 @@ chalk@4.1.0: ansi-styles "^4.1.0" supports-color "^7.1.0" -chalk@^1.0.0, chalk@^1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98" - integrity sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A== - dependencies: - ansi-styles "^2.2.1" - escape-string-regexp "^1.0.2" - has-ansi "^2.0.0" - strip-ansi "^3.0.0" - supports-color "^2.0.0" - -chalk@^2.4.1, chalk@^2.4.2: +chalk@^2.4.1: version "2.4.2" resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== @@ -11199,16 +9153,6 @@ character-reference-invalid@^2.0.0: resolved "https://registry.yarnpkg.com/character-reference-invalid/-/character-reference-invalid-2.0.1.tgz#85c66b041e43b47210faf401278abf808ac45cb9" integrity sha512-iBZ4F4wRbyORVsu0jPV7gXkOsGYjGHPmAyv+HiHG8gi5PtC9KI2j1+v8/tlibRvjoWX027ypmG/n0HtO5t7unw== -chardet@^0.4.0: - version "0.4.2" - resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.4.2.tgz#b5473b33dc97c424e5d98dc87d55d4d8a29c8bf2" - integrity sha512-j/Toj7f1z98Hh2cYo2BVr85EpIRWqUi7rtRSGxh/cqUjqrnJe9l9UE7IUGd2vQ2p+kSHLkSzObQPZPLUC6TQwg== - -chardet@^0.7.0: - version "0.7.0" - resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.7.0.tgz#90094849f0937f2eedc2425d0d28a9e5f0cbad9e" - integrity sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA== - chardet@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/chardet/-/chardet-2.1.0.tgz#1007f441a1ae9f9199a4a67f6e978fb0aa9aa3fe" @@ -11233,7 +9177,7 @@ chokidar@^2.1.8: optionalDependencies: fsevents "^1.2.7" -chokidar@^3.4.1, chokidar@^3.4.2, chokidar@^3.5.2, chokidar@^3.5.3: +chokidar@^3.4.1, chokidar@^3.4.2, chokidar@^3.5.3: version "3.6.0" resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.6.0.tgz#197c6cc669ef2a8dc5e7b4d97ee4e092c3eb0d5b" integrity sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw== @@ -11265,7 +9209,7 @@ chownr@^2.0.0: resolved "https://registry.yarnpkg.com/chownr/-/chownr-2.0.0.tgz#15bfbe53d2eab4cf70f18a8cd68ebe5b3cb1dece" integrity sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ== -chrome-trace-event@^1.0.2, chrome-trace-event@^1.0.3: +chrome-trace-event@^1.0.2: version "1.0.4" resolved "https://registry.yarnpkg.com/chrome-trace-event/-/chrome-trace-event-1.0.4.tgz#05bffd7ff928465093314708c93bdfa9bd1f0f5b" integrity sha512-rNjApaLzuwaOTjCiT8lSDdGN1APCiqkChLMJxJPWLunPAt5fy8xgU9/jNOchV84wfIxrA0lRQB7oCT8jrn/wrQ== @@ -11281,9 +9225,9 @@ ci-info@^3.2.0, ci-info@^3.6.1: integrity sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ== ci-info@^4.2.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-4.3.0.tgz#c39b1013f8fdbd28cd78e62318357d02da160cd7" - integrity sha512-l+2bNRMiQgcfILUi33labAZYIWlH1kWDp+ecNo5iisRKrbm0xcRyCww71/YU0Fkw0mAFpz9bJayXPjey6vkmaQ== + version "4.3.1" + resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-4.3.1.tgz#355ad571920810b5623e11d40232f443f16f1daa" + integrity sha512-Wdy2Igu8OcBpI2pZePZ5oWjPC38tmDVx5WKUXKwlLYkA0ozo85sLsLvkBbBn/sZaSCMFOGZJ14fvW9t5/d7kdA== cipher-base@^1.0.0, cipher-base@^1.0.1, cipher-base@^1.0.3: version "1.0.7" @@ -11345,17 +9289,6 @@ cli-boxes@^2.2.1: resolved "https://registry.yarnpkg.com/cli-boxes/-/cli-boxes-2.2.1.tgz#ddd5035d25094fce220e9cab40a45840a440318f" integrity sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw== -cli-color@^2.0.2, cli-color@~2.0.0: - version "2.0.4" - resolved "https://registry.yarnpkg.com/cli-color/-/cli-color-2.0.4.tgz#d658080290968816b322248b7306fad2346fb2c8" - integrity sha512-zlnpg0jNcibNrO7GG9IeHH7maWFeCz+Ja1wx/7tZNU5ASSSSZ+/qZciM0/LHCYxSdqv5h2sdbQ/PXYdOuetXvA== - dependencies: - d "^1.0.1" - es5-ext "^0.10.64" - es6-iterator "^2.0.3" - memoizee "^0.4.15" - timers-ext "^0.1.7" - cli-cursor@3.1.0, cli-cursor@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-3.1.0.tgz#264305a7ae490d1d03bf0c9ba7c925d1753af307" @@ -11363,13 +9296,6 @@ cli-cursor@3.1.0, cli-cursor@^3.1.0: dependencies: restore-cursor "^3.1.0" -cli-cursor@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-2.1.0.tgz#b35dac376479facc3e94747d41d0d0f5238ffcb5" - integrity sha512-8lgKz8LmCRYZZQDpRyT2m5rKJ08TnU4tR9FFFW2rxpxR1FzWi4PQ/NfyODchAatHaUgnSPVcx/R5w6NuTBzFiw== - dependencies: - restore-cursor "^2.0.0" - cli-spinners@2.6.1: version "2.6.1" resolved "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-2.6.1.tgz#adc954ebe281c37a6319bfa401e6dd2488ffb70d" @@ -11389,11 +9315,6 @@ cli-table3@^0.6.1: optionalDependencies: "@colors/colors" "1.5.0" -cli-width@^2.0.0: - version "2.2.1" - resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-2.2.1.tgz#b0433d0b4e9c847ef18868a4ef16fd5fc8271c48" - integrity sha512-GRMWDxpOB6Dgk2E5Uo+3eEBvtOOlimMmpbFiKuLFnQzYDavtLFY3K5ona41jgN/WdRZtG7utuVSVTL4HbZHGkw== - cli-width@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-3.0.0.tgz#a2f48437a2caa9a22436e794bf071ec9e61cedf6" @@ -11441,17 +9362,12 @@ clone@^1.0.2: resolved "https://registry.yarnpkg.com/clone/-/clone-1.0.4.tgz#da309cc263df15994c688ca902179ca3c7cd7c7e" integrity sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg== -clone@^2.1.2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/clone/-/clone-2.1.2.tgz#1b7f4b9f591f1e8f83670401600345a02887435f" - integrity sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w== - clsx@1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/clsx/-/clsx-1.1.0.tgz#62937c6adfea771247c34b54d320fb99624f5702" integrity sha512-3avwM37fSK5oP6M5rQ9CNe99lwxhXDOeSWVPAOYF6OazUTgZCMb0yWlJpmdD74REy1gkEaFiub2ULv4fq9GUhA== -clsx@^1.0.2, clsx@^1.0.4, clsx@^1.1.0, clsx@^1.1.1: +clsx@^1.0.4, clsx@^1.1.0, clsx@^1.1.1: version "1.2.1" resolved "https://registry.yarnpkg.com/clsx/-/clsx-1.2.1.tgz#0ddc4a20a549b59c93a4116bb26f5294ca17dc12" integrity sha512-EcR6r5a8bj6pu3ycsa/E/cKVGuTgZJZdsyUYHOksG/UHIiKfjxzRxYJpyVBwYaQeOvghal9fcc4PidlgzugAQg== @@ -11477,9 +9393,9 @@ collapse-white-space@^1.0.2: integrity sha512-jEovNnrhMuqyCcjfEJA56v0Xq8SkIoPKDyaHahwo3POf4qcSXqMYuwNcOTzp74vTsR9Tn08z4MxWqAhcekogkQ== collect-v8-coverage@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/collect-v8-coverage/-/collect-v8-coverage-1.0.2.tgz#c0b29bcd33bcd0779a1344c2136051e6afd3d9e9" - integrity sha512-lHl4d5/ONEbLlJvaJNtsF/Lz+WvB07u2ycqTYbdrq7UypDXailES4valYb2eWiJFxZlVmpGekfqoxQhzyFdT4Q== + version "1.0.3" + resolved "https://registry.yarnpkg.com/collect-v8-coverage/-/collect-v8-coverage-1.0.3.tgz#cc1f01eb8d02298cbc9a437c74c70ab4e5210b80" + integrity sha512-1L5aqIkwPfiodaMgQunkF1zRhNqifHBmtbbbxcr6yVxxBnliw4TDOW6NxpO8DJLgJ16OT+Y4ztZqP6p/FtXnAw== collection-visit@^1.0.0: version "1.0.0" @@ -11544,7 +9460,7 @@ colorette@^1.2.2: resolved "https://registry.yarnpkg.com/colorette/-/colorette-1.4.0.tgz#5190fbb87276259a86ad700bff2c6d6faa3fca40" integrity sha512-Y2oEozpomLn7Q3HFP7dpww7AtMJplbM9lGZP6RDfHqmbeRjiwRg4n6VM6j4KLmRke85uWEI7JqF17f3pqdRA0g== -colorette@^2.0.10, colorette@^2.0.14, colorette@^2.0.19: +colorette@^2.0.10, colorette@^2.0.14: version "2.0.20" resolved "https://registry.yarnpkg.com/colorette/-/colorette-2.0.20.tgz#9eb793e6833067f7235902fcd3b09917a000a95a" integrity sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w== @@ -11554,11 +9470,6 @@ colornames@^1.1.1: resolved "https://registry.yarnpkg.com/colornames/-/colornames-1.1.1.tgz#f8889030685c7c4ff9e2a559f5077eb76a816f96" integrity sha512-/pyV40IrsdulWv+wFPmERh9k/mjsPZ64yUMDmWrtj/k1nmgrzzIENWKdaVKyBbvFdQWqkcaRxr+polCo3VMe7A== -colors@^1.1.2: - version "1.4.0" - resolved "https://registry.yarnpkg.com/colors/-/colors-1.4.0.tgz#c50491479d4c1bdaed2c9ced32cf7c7dc2360f78" - integrity sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA== - columnify@1.6.0: version "1.6.0" resolved "https://registry.yarnpkg.com/columnify/-/columnify-1.6.0.tgz#6989531713c9008bb29735e61e37acf5bd553cf3" @@ -11574,11 +9485,6 @@ combined-stream@^1.0.8: dependencies: delayed-stream "~1.0.0" -comlink@^4.3.1: - version "4.4.2" - resolved "https://registry.yarnpkg.com/comlink/-/comlink-4.4.2.tgz#cbbcd82742fbebc06489c28a183eedc5c60a2bca" - integrity sha512-OxGdvBmJuNKSCMO4NTl1L47VRp6xn2wG4F/2hYzB6tiCb709otOxtEYCSvK80PtjODfXXZu8ds+Nw5kVCjqd2g== - comma-separated-tokens@^1.0.0: version "1.0.8" resolved "https://registry.yarnpkg.com/comma-separated-tokens/-/comma-separated-tokens-1.0.8.tgz#632b80b6117867a158f1080ad498b2fbe7e3f5ea" @@ -11594,11 +9500,6 @@ commander@^10.0.1: resolved "https://registry.yarnpkg.com/commander/-/commander-10.0.1.tgz#881ee46b4f77d1c1dccc5823433aa39b022cbe06" integrity sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug== -commander@^12.1.0: - version "12.1.0" - resolved "https://registry.yarnpkg.com/commander/-/commander-12.1.0.tgz#01423b36f501259fdaac4d0e4d60c96c991585d3" - integrity sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA== - commander@^2.19.0, commander@^2.20.0: version "2.20.3" resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" @@ -11624,16 +9525,6 @@ commander@^8.3.0: resolved "https://registry.yarnpkg.com/commander/-/commander-8.3.0.tgz#4837ea1b2da67b9c616a67afbb0fafee567bca66" integrity sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww== -commander@^9.4.1: - version "9.5.0" - resolved "https://registry.yarnpkg.com/commander/-/commander-9.5.0.tgz#bc08d1eb5cedf7ccb797a96199d41c7bc3e60d30" - integrity sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ== - -commander@~14.0.0: - version "14.0.1" - resolved "https://registry.yarnpkg.com/commander/-/commander-14.0.1.tgz#2f9225c19e6ebd0dc4404dd45821b2caa17ea09b" - integrity sha512-2JkV3gUZUVrbNA+1sjBOYLsMZ5cEEl8GTFP2a4AVz5hvasAMCQ1D2l2le/cX+pV4N6ZU17zjUahLpIXRrnWL8A== - common-path-prefix@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/common-path-prefix/-/common-path-prefix-3.0.0.tgz#7d007a7e07c58c4b4d5f433131a19141b29f11e0" @@ -11873,22 +9764,22 @@ copy-webpack-plugin@^11.0.0: schema-utils "^4.0.0" serialize-javascript "^6.0.0" -core-js-compat@^3.21.0, core-js-compat@^3.22.1, core-js-compat@^3.43.0, core-js-compat@^3.8.1: - version "3.45.1" - resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.45.1.tgz#424f3f4af30bf676fd1b67a579465104f64e9c7a" - integrity sha512-tqTt5T4PzsMIZ430XGviK4vzYSoeNJ6CXODi6c/voxOT6IZqBht5/EKaSNnYiEjjRYxjVz7DQIsOsY0XNi8PIA== +core-js-compat@^3.43.0, core-js-compat@^3.8.1: + version "3.46.0" + resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.46.0.tgz#0c87126a19a1af00371e12b02a2b088a40f3c6f7" + integrity sha512-p9hObIIEENxSV8xIu+V68JjSeARg6UVMG5mR+JEUguG3sI6MsiS1njz2jHmyJDvA+8jX/sytkBHup6kxhM9law== dependencies: - browserslist "^4.25.3" + browserslist "^4.26.3" core-js-pure@^3.23.3: - version "3.45.1" - resolved "https://registry.yarnpkg.com/core-js-pure/-/core-js-pure-3.45.1.tgz#b129d86a5f7f8380378577c7eaee83608570a05a" - integrity sha512-OHnWFKgTUshEU8MK+lOs1H8kC8GkTi9Z1tvNkxrCcw9wl3MJIO7q2ld77wjWn4/xuGrVu2X+nME1iIIPBSdyEQ== + version "3.46.0" + resolved "https://registry.yarnpkg.com/core-js-pure/-/core-js-pure-3.46.0.tgz#9bb80248584c6334bb54cd381b0f41c619ef1b43" + integrity sha512-NMCW30bHNofuhwLhYPt66OLOKTMbOhgTTatKVbaQC3KRHpTCiRIBYvtshr+NBYSnBxwAFhjW/RfJ0XbIjS16rw== core-js@^3.0.4, core-js@^3.6.5, core-js@^3.8.2: - version "3.45.1" - resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.45.1.tgz#5810e04a1b4e9bc5ddaa4dd12e702ff67300634d" - integrity sha512-L4NPsJlCfZsPeXukyzHFlg/i7IIVwHSItR0wg0FLNqYClJ4MQYTYLbC7EkjKYRLZF2iof2MUgN0EGy7MdQFChg== + version "3.46.0" + resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.46.0.tgz#323a092b96381a9184d0cd49ee9083b2f93373bb" + integrity sha512-vDMm9B0xnqqZ8uSBpZ8sNtRtOdmfShrvT6h2TuQGLs0Is+cR0DYbj/KWP6ALVNbWPpqA/qPLoOuppJN07humpA== core-util-is@~1.0.0: version "1.0.3" @@ -11927,22 +9818,6 @@ cosmiconfig@^8.2.0: parse-json "^5.2.0" path-type "^4.0.0" -cosmjs-types@^0.4.1: - version "0.4.1" - resolved "https://registry.yarnpkg.com/cosmjs-types/-/cosmjs-types-0.4.1.tgz#3b2a53ba60d33159dd075596ce8267cfa7027063" - integrity sha512-I7E/cHkIgoJzMNQdFF0YVqPlaTqrqKHrskuSTIqlEyxfB5Lf3WKCajSXVK2yHOfOFfSux/RxEdpMzw/eO4DIog== - dependencies: - long "^4.0.0" - protobufjs "~6.11.2" - -cosmjs-types@^0.5.2: - version "0.5.2" - resolved "https://registry.yarnpkg.com/cosmjs-types/-/cosmjs-types-0.5.2.tgz#2d42b354946f330dfb5c90a87fdc2a36f97b965d" - integrity sha512-zxCtIJj8v3Di7s39uN4LNcN3HIE1z0B9Z0SPE8ZNQR0oSzsuSe1ACgxoFkvhkS7WBasCAFcglS11G2hyfd5tPg== - dependencies: - long "^4.0.0" - protobufjs "~6.11.2" - cosmjs-types@^0.9.0: version "0.9.0" resolved "https://registry.yarnpkg.com/cosmjs-types/-/cosmjs-types-0.9.0.tgz#c3bc482d28c7dfa25d1445093fdb2d9da1f6cfcc" @@ -12004,19 +9879,6 @@ create-hmac@^1.1.7: safe-buffer "^5.0.1" sha.js "^2.4.8" -create-jest@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/create-jest/-/create-jest-29.7.0.tgz#a355c5b3cb1e1af02ba177fe7afd7feee49a5320" - integrity sha512-Adz2bdH0Vq3F53KEMJOoftQFutWCukm6J24wbPWRO4k1kMY7gS7ds/uoJkNuV8wDCtWWnuwGcJwpWcih+zEW1Q== - dependencies: - "@jest/types" "^29.6.3" - chalk "^4.0.0" - exit "^0.1.2" - graceful-fs "^4.2.9" - jest-config "^29.7.0" - jest-util "^29.7.0" - prompts "^2.0.1" - cross-fetch@^3.1.5: version "3.2.0" resolved "https://registry.yarnpkg.com/cross-fetch/-/cross-fetch-3.2.0.tgz#34e9192f53bc757d6614304d9e5e6fb4edb782e3" @@ -12363,7 +10225,7 @@ cssstyle@^2.3.0: dependencies: cssom "~0.3.6" -cssstyle@^5.3.0: +cssstyle@^5.3.1: version "5.3.1" resolved "https://registry.yarnpkg.com/cssstyle/-/cssstyle-5.3.1.tgz#f55a9cc73d12705da8a341261d5e85003fe3a441" integrity sha512-g5PC9Aiph9eiczFpcgUhd9S4UUO3F+LHGRIi5NUMZ+4xtoIYbHNZwZnWA2JsFGe8OU8nl4WyaEFiZuGuxlutJQ== @@ -12506,29 +10368,16 @@ d3-timer@^3.0.1: resolved "https://registry.yarnpkg.com/d3-timer/-/d3-timer-3.0.1.tgz#6284d2a2708285b1abb7e201eda4380af35e63b0" integrity sha512-ndfJ/JxxMd3nw31uyKoY2naivF+r29V+Lc0svZxe1JvvIRmi8hUsrMvdOwgS1o6uBHmiz91geQ0ylPP0aj1VUA== -d@1, d@^1.0.1, d@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/d/-/d-1.0.2.tgz#2aefd554b81981e7dccf72d6842ae725cb17e5de" - integrity sha512-MOqHvMWF9/9MX6nza0KgvFH4HpMU0EF5uUDXqX/BtxtU8NfB0QzRtJ8Oe/6SuS4kbhyzVJwjd97EA4PKrzJ8bw== - dependencies: - es5-ext "^0.10.64" - type "^2.7.2" - damerau-levenshtein@^1.0.8: version "1.0.8" resolved "https://registry.yarnpkg.com/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz#b43d286ccbd36bc5b2f7ed41caf2d0aba1f8a6e7" integrity sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA== -dargs@7.0.0, dargs@^7.0.0: +dargs@^7.0.0: version "7.0.0" resolved "https://registry.yarnpkg.com/dargs/-/dargs-7.0.0.tgz#04015c41de0bcb69ec84050f3d9be0caf8d6d5cc" integrity sha512-2iy1EkLdlBzQGvbweYRFxmFath8+K7+AKB0TlhHWkNuH+TmovaMH/Wp7V7R4u7f4SnX3OgLsU9t1NI9ioDnUpg== -data-uri-to-buffer@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/data-uri-to-buffer/-/data-uri-to-buffer-4.0.1.tgz#d8feb2b2881e6a4f58c2e08acfd0e2834e26222e" - integrity sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A== - data-urls@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/data-urls/-/data-urls-2.0.0.tgz#156485a72963a970f5d5821aaf642bef2bf2db9b" @@ -12597,7 +10446,7 @@ debug@2.6.9, debug@^2.2.0, debug@^2.3.3: dependencies: ms "2.0.0" -debug@4, debug@^4, debug@^4.0.0, debug@^4.0.1, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@^4.3.2, debug@^4.3.3, debug@^4.3.4, debug@^4.3.5, debug@^4.4.0, debug@^4.4.1: +debug@4, debug@^4.0.0, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@^4.3.2, debug@^4.3.3, debug@^4.3.4, debug@^4.4.0, debug@^4.4.1: version "4.4.3" resolved "https://registry.yarnpkg.com/debug/-/debug-4.4.3.tgz#c6ae432d9bd9662582fce08709b038c58e9e3d6a" integrity sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA== @@ -12624,17 +10473,12 @@ decamelize@^1.1.0, decamelize@^1.1.2: resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" integrity sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA== -decamelize@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-4.0.0.tgz#aa472d7bf660eb15f3494efd531cab7f2a709837" - integrity sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ== - decimal.js-light@^2.4.1: version "2.5.1" resolved "https://registry.yarnpkg.com/decimal.js-light/-/decimal.js-light-2.5.1.tgz#134fd32508f19e208f4fb2f8dac0d2626a867934" integrity sha512-qIMFpTMZmny+MMIitAB6D7iVPEorVw6YQRWkvarTkT4tBeSLLiHzcwj6q0MmYSFCiVpiqPJTJEYIrpcPzVEIvg== -decimal.js@^10.2.1, decimal.js@^10.4.3, decimal.js@^10.5.0: +decimal.js@^10.2.1, decimal.js@^10.4.3, decimal.js@^10.6.0: version "10.6.0" resolved "https://registry.yarnpkg.com/decimal.js/-/decimal.js-10.6.0.tgz#e649a43e3ab953a72192ff5983865e509f37ed9a" integrity sha512-YpgQiITW3JXGntzdUmyUR1V812Hn8T1YVXhCu+wO3OpS4eU9l4YdD3qjyiKdV6mvV29zapkMeD390UVEf2lkUg== @@ -12656,7 +10500,7 @@ dedent@0.7.0, dedent@^0.7.0: resolved "https://registry.yarnpkg.com/dedent/-/dedent-0.7.0.tgz#2495ddbaf6eb874abb0e1be9df22d2e5a544326c" integrity sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA== -dedent@^1.0.0, dedent@^1.5.3: +dedent@^1.5.3: version "1.7.0" resolved "https://registry.yarnpkg.com/dedent/-/dedent-1.7.0.tgz#c1f9445335f0175a96587be245a282ff451446ca" integrity sha512-HGFtf8yhuhGhqO07SV79tRp+br4MnbdjeVxotpn1QBl30pcLLCQjX5b2295ll0fv8RKDKsmWYrl05usHM9CewQ== @@ -12695,11 +10539,6 @@ deep-object-diff@^1.1.9: resolved "https://registry.yarnpkg.com/deep-object-diff/-/deep-object-diff-1.1.9.tgz#6df7ef035ad6a0caa44479c536ed7b02570f4595" integrity sha512-Rn+RuwkmkDwCi2/oXOFS9Gsr5lJZu/yTGpK7wAaAIE75CC+LCGEZHpY6VQJa/RoJcrmaA/docWJZvYohlNkWPA== -deepmerge@4.2.2: - version "4.2.2" - resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.2.2.tgz#44d2ea3679b8f4d4ffba33f03d865fc1e7bf4955" - integrity sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg== - deepmerge@^4.2.2: version "4.3.1" resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.3.1.tgz#44b5f2147cd3b00d4b56137685966f26fd25dd4a" @@ -12714,19 +10553,6 @@ default-browser-id@^1.0.4: meow "^3.1.0" untildify "^2.0.0" -default-browser-id@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/default-browser-id/-/default-browser-id-5.0.0.tgz#a1d98bf960c15082d8a3fa69e83150ccccc3af26" - integrity sha512-A6p/pu/6fyBcA1TRz/GqWYPViplrftcW2gZC9q79ngNCKAeR/X3gcEdXQHl4KNXV+3wgIJ1CPkJQ3IHM6lcsyA== - -default-browser@^5.2.1: - version "5.2.1" - resolved "https://registry.yarnpkg.com/default-browser/-/default-browser-5.2.1.tgz#7b7ba61204ff3e425b556869ae6d3e9d9f1712cf" - integrity sha512-WY/3TUME0x3KPYdRRxEJJvXRHV4PyPoUsxtZa78lwItwRQRHhd2U9xOscaT/YTf8uCXIAjeJOFBVEh/7FtD8Xg== - dependencies: - bundle-name "^4.1.0" - default-browser-id "^5.0.0" - default-gateway@^6.0.3: version "6.0.3" resolved "https://registry.yarnpkg.com/default-gateway/-/default-gateway-6.0.3.tgz#819494c888053bdb743edbf343d6cdf7f2943a71" @@ -12755,11 +10581,6 @@ define-lazy-prop@^2.0.0: resolved "https://registry.yarnpkg.com/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz#3f7ae421129bcaaac9bc74905c98a0009ec9ee7f" integrity sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og== -define-lazy-prop@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/define-lazy-prop/-/define-lazy-prop-3.0.0.tgz#dbb19adfb746d7fc6d734a06b72f4a00d021255f" - integrity sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg== - define-properties@^1.1.2, define-properties@^1.1.3, define-properties@^1.2.0, define-properties@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.2.1.tgz#10781cc616eb951a80a034bafcaa7377f6af2b6c" @@ -12881,15 +10702,10 @@ detect-indent@^5.0.0: resolved "https://registry.yarnpkg.com/detect-indent/-/detect-indent-5.0.0.tgz#3871cc0a6a002e8c3e5b3cf7f336264675f06b9d" integrity sha512-rlpvsxUtM0PQvy9iZe640/IWwWYyBsTApREbA1pHOpmOUIl9MkP/U4z7vTtg4Oaojvqhxt7sdufnT0EzGaR31g== -detect-libc@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-1.0.3.tgz#fa137c4bd698edf55cd5cd02ac559f91a4c4ba9b" - integrity sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg== - -detect-libc@^2.0.1, detect-libc@^2.0.3: - version "2.1.1" - resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-2.1.1.tgz#9f1e511ace6bb525efea4651345beac424dac7b9" - integrity sha512-ecqj/sy1jcK1uWrwpR67UhYrIFQ+5WlGxth34WquCbamhFA6hkkwiu37o6J5xCHdo1oixJRfVRw+ywV+Hq/0Aw== +detect-libc@^2.0.3: + version "2.1.2" + resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-2.1.2.tgz#689c5dcdc1900ef5583a4cb9f6d7b473742074ad" + integrity sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ== detect-newline@^3.0.0: version "3.1.0" @@ -12928,26 +10744,11 @@ diff-sequences@^27.5.1: resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-27.5.1.tgz#eaecc0d327fd68c8d9672a1e64ab8dccb2ef5327" integrity sha512-k1gCAXAsNgLwEL+Y8Wvl+M6oEFj5bgazfZULpS5CneoPPXRaCCW7dm+q21Ky2VEE5X+VeRDBVg1Pcvvsr4TtNQ== -diff-sequences@^28.1.1: - version "28.1.1" - resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-28.1.1.tgz#9989dc731266dc2903457a70e996f3a041913ac6" - integrity sha512-FU0iFaH/E23a+a718l8Qa/19bF9p06kgE0KipMOMadwa3SjnaElKzPaUC0vnibs6/B/9ni97s61mcejk8W1fQw== - diff-sequences@^29.6.3: version "29.6.3" resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-29.6.3.tgz#4deaf894d11407c51efc8418012f9e70b84ea921" integrity sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q== -diff@^3.1.0: - version "3.5.0" - resolved "https://registry.yarnpkg.com/diff/-/diff-3.5.0.tgz#800c0dd1e0a8bfbc95835c202ad220fe317e5a12" - integrity sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA== - -diff@^5.2.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/diff/-/diff-5.2.0.tgz#26ded047cd1179b78b9537d5ef725503ce1ae531" - integrity sha512-uIFDxqpRZGZ6ThOk84hEfqWoHx2devRFvpTZcTHur85vImfaxUbTW9Ryh4CpCuDnToOP1CEtXKIgytHBPVff5A== - diffie-hellman@^5.0.3: version "5.0.3" resolved "https://registry.yarnpkg.com/diffie-hellman/-/diffie-hellman-5.0.3.tgz#40e8ee98f55a2149607146921c63e1ae5f3d2875" @@ -13045,13 +10846,6 @@ domelementtype@^2.0.1, domelementtype@^2.2.0, domelementtype@^2.3.0: resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-2.3.0.tgz#5c45e8e869952626331d7aab326d01daf65d589d" integrity sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw== -domexception@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/domexception/-/domexception-1.0.1.tgz#937442644ca6a31261ef36e3ec677fe805582c90" - integrity sha512-raigMkn7CJNNo6Ihro1fzG7wr3fHuYVytzquZKX5n0yizGsTcYgzdIUwj1X9pK0VvjeihV+XiclP+DjwbsSKug== - dependencies: - webidl-conversions "^4.0.2" - domexception@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/domexception/-/domexception-2.0.1.tgz#fb44aefba793e1574b0af6aed2801d057529f304" @@ -13073,10 +10867,10 @@ domhandler@^5.0.2, domhandler@^5.0.3: dependencies: domelementtype "^2.3.0" -dompurify@^3.2.7: - version "3.2.7" - resolved "https://registry.yarnpkg.com/dompurify/-/dompurify-3.2.7.tgz#721d63913db5111dd6dfda8d3a748cfd7982d44a" - integrity sha512-WhL/YuveyGXJaerVlMYGWhvQswa7myDG17P7Vu65EWC05o8vfeNbvNf4d/BOvH99+ZW+LlQsc1GDKMa1vNK6dw== +dompurify@^3.3.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/dompurify/-/dompurify-3.3.0.tgz#aaaadbb83d87e1c2fbb066452416359e5b62ec97" + integrity sha512-r+f6MYR1gGN1eJv0TVQbhA7if/U7P87cdPl3HN5rikqaBSBxLiCb/b9O+2eG0cxz0ghyU+mU1QkbsOwERMYlWQ== optionalDependencies: "@types/trusted-types" "^2.0.7" @@ -13120,13 +10914,6 @@ dotenv-defaults@^2.0.2: dependencies: dotenv "^8.2.0" -dotenv-expand@^11.0.7: - version "11.0.7" - resolved "https://registry.yarnpkg.com/dotenv-expand/-/dotenv-expand-11.0.7.tgz#af695aea007d6fdc84c86cd8d0ad7beb40a0bd08" - integrity sha512-zIHwmZPRshsCdpMDyVsqGmgyP0yT8GAgXUnkdAoJisxvf33k7yO6OuoKmcTGuXPWSsm8Oh88nZicRLA9Y0rUeA== - dependencies: - dotenv "^16.4.5" - dotenv-expand@^5.1.0: version "5.1.0" resolved "https://registry.yarnpkg.com/dotenv-expand/-/dotenv-expand-5.1.0.tgz#3fbaf020bfd794884072ea26b1e9791d45a629f0" @@ -13151,11 +10938,6 @@ dotenv-webpack@^8.0.1: dependencies: dotenv-defaults "^2.0.2" -dotenv@^16.0.3, dotenv@^16.4.5, dotenv@^16.5.0: - version "16.6.1" - resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-16.6.1.tgz#773f0e69527a8315c7285d5ee73c4459d20a8020" - integrity sha512-uBq4egWHTcTt33a72vpSG0z3HnPuIl6NqYcTrKEg2azoEyl2hpW0zqlxysq2pK9HlDIHyHyakeYaYnSAwd8bow== - dotenv@^8.0.0, dotenv@^8.2.0: version "8.6.0" resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-8.6.0.tgz#061af664d19f7f4d8fc6e4ff9b584ce237adcb8b" @@ -13166,11 +10948,6 @@ dotenv@~16.3.1: resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-16.3.2.tgz#3cb611ce5a63002dbabf7c281bc331f69d28f03f" integrity sha512-HTlk5nmhkm8F6JcdXvHIzaorzCoziNQT9mGxLPVXW8wJF1TiGSL60ZGB4gHWabHOaMmWmhvk2/lPHfnBiT78AQ== -dotty@0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/dotty/-/dotty-0.1.2.tgz#512d44cc4111a724931226259297f235e8484f6f" - integrity sha512-V0EWmKeH3DEhMwAZ+8ZB2Ao4OK6p++Z0hsDtZq3N0+0ZMVqkzrcEGROvOnZpLnvBg5PTNG23JEDLAm64gPaotQ== - dunder-proto@^1.0.0, dunder-proto@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/dunder-proto/-/dunder-proto-1.0.1.tgz#d7ae667e1dc83482f8b70fd0f6eefc50da30f58a" @@ -13222,10 +10999,10 @@ ejs@^3.1.7: dependencies: jake "^10.8.5" -electron-to-chromium@^1.5.227: - version "1.5.228" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.5.228.tgz#38b849bc8714bd21fb64f5ad56bf8cfd8638e1e9" - integrity sha512-nxkiyuqAn4MJ1QbobwqJILiDtu/jk14hEAWaMiJmNPh1Z+jqoFlBFZjdXwLWGeVSeu9hGLg6+2G9yJaW8rBIFA== +electron-to-chromium@^1.5.238: + version "1.5.240" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.5.240.tgz#bfd946570a723aa3754370065d02e23e30824774" + integrity sha512-OBwbZjWgrCOH+g6uJsA2/7Twpas2OlepS9uvByJjR2datRDuKGYeD+nP8lBBks2qnB7bGJNHDUx7c/YLaT3QMQ== elliptic@^6.4.0, elliptic@^6.5.3, elliptic@^6.5.4, elliptic@^6.6.1: version "6.6.1" @@ -13240,11 +11017,6 @@ elliptic@^6.4.0, elliptic@^6.5.3, elliptic@^6.5.4, elliptic@^6.6.1: minimalistic-assert "^1.0.1" minimalistic-crypto-utils "^1.0.1" -emittery@^0.13.1: - version "0.13.1" - resolved "https://registry.yarnpkg.com/emittery/-/emittery-0.13.1.tgz#c04b8c3457490e0847ae51fced3af52d338e3dad" - integrity sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ== - emittery@^0.8.1: version "0.8.1" resolved "https://registry.yarnpkg.com/emittery/-/emittery-0.8.1.tgz#bb23cc86d03b30aa75a7f734819dee2e1ba70860" @@ -13265,16 +11037,16 @@ emojis-list@^3.0.0: resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-3.0.0.tgz#5570662046ad29e2e916e71aae260abdff4f6a78" integrity sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q== -encodeurl@^2.0.0, encodeurl@~2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-2.0.0.tgz#7b8ea898077d7e409d3ac45474ea38eaf0857a58" - integrity sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg== - encodeurl@~1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" integrity sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w== +encodeurl@~2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-2.0.0.tgz#7b8ea898077d7e409d3ac45474ea38eaf0857a58" + integrity sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg== + encoding@^0.1.13: version "0.1.13" resolved "https://registry.yarnpkg.com/encoding/-/encoding-0.1.13.tgz#56574afdd791f54a8e9b2785c0582a2d26210fa9" @@ -13315,14 +11087,6 @@ enhanced-resolve@^5.0.0, enhanced-resolve@^5.17.3, enhanced-resolve@^5.7.0: graceful-fs "^4.2.4" tapable "^2.2.0" -enquirer@^2.3.5: - version "2.4.1" - resolved "https://registry.yarnpkg.com/enquirer/-/enquirer-2.4.1.tgz#93334b3fbd74fc7097b224ab4a8fb7e40bf4ae56" - integrity sha512-rRqJg/6gd538VHvR3PSrdRBb/1Vy2YfzHqzvbhGIQpDRKIa4FgV/54b5Q1xYSxOOwKvjXweS26E0Q+nAMwp2pQ== - dependencies: - ansi-colors "^4.1.1" - strip-ansi "^6.0.1" - enquirer@~2.3.6: version "2.3.6" resolved "https://registry.yarnpkg.com/enquirer/-/enquirer-2.3.6.tgz#2a7fe5dd634a1e4125a975ec994ff5456dc3734d" @@ -13356,9 +11120,9 @@ envinfo@7.8.1: integrity sha512-/o+BXHmB7ocbHEAs6F2EnG0ogybVVUdkRunTT2glZU9XAaGmhqskrvKwqXuDfNjEO0LZKWdejEEpnq8aM0tOaw== envinfo@^7.7.3: - version "7.15.0" - resolved "https://registry.yarnpkg.com/envinfo/-/envinfo-7.15.0.tgz#7d5a6d464df38708ee5ac135289c88f0c9bffa7e" - integrity sha512-chR+t7exF6y59kelhXw5I3849nTy7KIRO+ePdLMhCD+JRP/JvmkenDWP7QSFGlsHX+kxGxdDutOPrmj5j1HR6g== + version "7.19.0" + resolved "https://registry.yarnpkg.com/envinfo/-/envinfo-7.19.0.tgz#b4b4507a27e9900b0175f556167fd3a95f8623f1" + integrity sha512-DoSM9VyG6O3vqBf+p3Gjgr/Q52HYBBtO3v+4koAxt1MnWr+zEnxE+nke/yXS4lt2P4SYCHQ4V3f1i88LQVOpAw== err-code@^2.0.2: version "2.0.3" @@ -13536,53 +11300,16 @@ es-to-primitive@^1.3.0: is-date-object "^1.0.5" is-symbol "^1.0.4" -es5-ext@^0.10.35, es5-ext@^0.10.46, es5-ext@^0.10.62, es5-ext@^0.10.64, es5-ext@~0.10.14, es5-ext@~0.10.2: - version "0.10.64" - resolved "https://registry.yarnpkg.com/es5-ext/-/es5-ext-0.10.64.tgz#12e4ffb48f1ba2ea777f1fcdd1918ef73ea21714" - integrity sha512-p2snDhiLaXe6dahss1LddxqEm+SkuDvV8dnIQG0MWjyHpcMNfXKPE+/Cc0y+PhxJX3A4xGNeFCj5oc0BUh6deg== - dependencies: - es6-iterator "^2.0.3" - es6-symbol "^3.1.3" - esniff "^2.0.1" - next-tick "^1.1.0" - es5-shim@^4.5.13: version "4.6.7" resolved "https://registry.yarnpkg.com/es5-shim/-/es5-shim-4.6.7.tgz#bc67ae0fc3dd520636e0a1601cc73b450ad3e955" 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: version "0.35.8" resolved "https://registry.yarnpkg.com/es6-shim/-/es6-shim-0.35.8.tgz#89216f6fbf8bacba3f897c8c0e814d2a41c05fb7" integrity sha512-Twf7I2v4/1tLoIXMT8HlqaBSS5H2wQTs2wx3MNYCI8K1R1/clXyCazrcVCPm/FuO9cyV8+leEaZOWD5C253NDg== -es6-symbol@^3.1.1, es6-symbol@^3.1.3: - version "3.1.4" - resolved "https://registry.yarnpkg.com/es6-symbol/-/es6-symbol-3.1.4.tgz#f4e7d28013770b4208ecbf3e0bf14d3bcb557b8c" - integrity sha512-U9bFFjX8tFiATgtkJ1zg25+KviIXpgRvRHS8sau3GfhVzThRQrOeksPeT0BWW2MNZs1OEWJ1DPXOQMn0KKRkvg== - dependencies: - d "^1.0.2" - ext "^1.7.0" - -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.2.0: version "3.2.0" resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.2.0.tgz#011a3f69856ba189dffa7dc8fcce99d2a87903e5" @@ -13593,7 +11320,7 @@ escape-html@^1.0.3, escape-html@~1.0.3: resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" integrity sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow== -escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5: +escape-string-regexp@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" integrity sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg== @@ -13636,7 +11363,7 @@ eslint-config-airbnb-typescript@^16.1.0: dependencies: eslint-config-airbnb-base "^15.0.0" -eslint-config-airbnb@^19.0.2, eslint-config-airbnb@^19.0.4: +eslint-config-airbnb@^19.0.4: version "19.0.4" resolved "https://registry.yarnpkg.com/eslint-config-airbnb/-/eslint-config-airbnb-19.0.4.tgz#84d4c3490ad70a0ffa571138ebcdea6ab085fdc3" integrity sha512-T75QYQVQX57jiNgpF9r1KegMICE94VYwoFQyMGhrvc+lB8YF2E/M/PYDaQe1AJcWaEgqLE+ErXV1Og/+6Vyzew== @@ -13661,7 +11388,7 @@ eslint-config-next@15.0.3: eslint-plugin-react "^7.35.0" eslint-plugin-react-hooks "^5.0.0" -eslint-config-prettier@^8.3.0, eslint-config-prettier@^8.5.0: +eslint-config-prettier@^8.5.0: version "8.10.2" resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-8.10.2.tgz#0642e53625ebc62c31c24726b0f050df6bd97a2e" integrity sha512-/IGJ6+Dka158JnP5n5YFMOszjDWrXggGz1LaK/guZq9vZTmniaKlHcsscvkAhn9y4U+BU3JuUdYvtAMcv30y4A== @@ -13756,15 +11483,6 @@ eslint-plugin-jsx-a11y@^6.10.0, eslint-plugin-jsx-a11y@^6.5.1: safe-regex-test "^1.0.3" string.prototype.includes "^2.0.1" -eslint-plugin-mocha@^10.0.3: - version "10.5.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-mocha/-/eslint-plugin-mocha-10.5.0.tgz#0aca8d709e7cddef566e0dc252f6b02e307a2b7e" - integrity sha512-F2ALmQVPT1GoP27O1JTZGrV9Pqg8k79OeIuvw63UxMtQKREZtmkK1NFgkZQ2TW7L2JSSFKHFPTtHu5z8R9QNRw== - dependencies: - eslint-utils "^3.0.0" - globals "^13.24.0" - rambda "^7.4.0" - eslint-plugin-prettier@^4.0.0: version "4.2.5" resolved "https://registry.yarnpkg.com/eslint-plugin-prettier/-/eslint-plugin-prettier-4.2.5.tgz#91ca3f2f01a84f1272cce04e9717550494c0fe06" @@ -13839,30 +11557,6 @@ eslint-scope@^7.2.2: esrecurse "^4.3.0" estraverse "^5.2.0" -eslint-utils@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-2.1.0.tgz#d2de5e03424e707dc10c74068ddedae708741b27" - integrity sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg== - dependencies: - eslint-visitor-keys "^1.1.0" - -eslint-utils@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-3.0.0.tgz#8aebaface7345bb33559db0a1f13a1d2d48c3672" - integrity sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA== - dependencies: - eslint-visitor-keys "^2.0.0" - -eslint-visitor-keys@^1.1.0, eslint-visitor-keys@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz#30ebd1ef7c2fdff01c3a4f151044af25fab0523e" - integrity sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ== - -eslint-visitor-keys@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz#f65328259305927392c938ed44eb0a5c9b2bd303" - integrity sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw== - eslint-visitor-keys@^3.3.0, eslint-visitor-keys@^3.4.1, eslint-visitor-keys@^3.4.3: version "3.4.3" resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz#0cd72fe8550e3c2eae156a96a4dddcd1c8ac5800" @@ -13873,52 +11567,6 @@ eslint-visitor-keys@^4.2.1: resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz#4cfea60fe7dd0ad8e816e1ed026c1d5251b512c1" integrity sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ== -eslint@^7.18.0: - version "7.32.0" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-7.32.0.tgz#c6d328a14be3fb08c8d1d21e12c02fdb7a2a812d" - integrity sha512-VHZ8gX+EDfz+97jGcgyGCyRia/dPOd6Xh9yPv8Bl1+SoaIwD+a/vlrOmGRUyOYu7MwUhc7CxqeaDZU13S4+EpA== - dependencies: - "@babel/code-frame" "7.12.11" - "@eslint/eslintrc" "^0.4.3" - "@humanwhocodes/config-array" "^0.5.0" - ajv "^6.10.0" - chalk "^4.0.0" - cross-spawn "^7.0.2" - debug "^4.0.1" - doctrine "^3.0.0" - enquirer "^2.3.5" - escape-string-regexp "^4.0.0" - eslint-scope "^5.1.1" - eslint-utils "^2.1.0" - eslint-visitor-keys "^2.0.0" - espree "^7.3.1" - esquery "^1.4.0" - esutils "^2.0.2" - fast-deep-equal "^3.1.3" - file-entry-cache "^6.0.1" - functional-red-black-tree "^1.0.1" - glob-parent "^5.1.2" - globals "^13.6.0" - ignore "^4.0.6" - import-fresh "^3.0.0" - imurmurhash "^0.1.4" - is-glob "^4.0.0" - js-yaml "^3.13.1" - json-stable-stringify-without-jsonify "^1.0.1" - levn "^0.4.1" - lodash.merge "^4.6.2" - minimatch "^3.0.4" - natural-compare "^1.4.0" - optionator "^0.9.1" - progress "^2.0.0" - regexpp "^3.1.0" - semver "^7.2.1" - strip-ansi "^6.0.0" - strip-json-comments "^3.1.0" - table "^6.0.9" - text-table "^0.2.0" - v8-compile-cache "^2.0.3" - eslint@^8, eslint@^8.10.0: version "8.57.1" resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.57.1.tgz#7df109654aba7e3bbe5c8eae533c5e461d3c6ca9" @@ -13963,25 +11611,6 @@ eslint@^8, eslint@^8.10.0: strip-ansi "^6.0.1" text-table "^0.2.0" -esniff@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/esniff/-/esniff-2.0.1.tgz#a4d4b43a5c71c7ec51c51098c1d8a29081f9b308" - integrity sha512-kTUIGKQ/mDPFoJ0oVfcmyJn4iBDRptjNVIzwIFR7tqWXdVI9xfA2RMwY/gbSpJG3lkdWNEjLap/NqVHZiJsdfg== - dependencies: - d "^1.0.1" - es5-ext "^0.10.62" - event-emitter "^0.3.5" - type "^2.7.2" - -espree@^7.3.0, espree@^7.3.1: - version "7.3.1" - resolved "https://registry.yarnpkg.com/espree/-/espree-7.3.1.tgz#f2df330b752c6f55019f8bd89b7660039c1bbbb6" - integrity sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g== - dependencies: - acorn "^7.4.0" - acorn-jsx "^5.3.1" - eslint-visitor-keys "^1.3.0" - espree@^9.6.0, espree@^9.6.1: version "9.6.1" resolved "https://registry.yarnpkg.com/espree/-/espree-9.6.1.tgz#a2a17b8e434690a5432f2f8018ce71d331a48c6f" @@ -13996,7 +11625,7 @@ esprima@^4.0.0, esprima@^4.0.1: resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== -esquery@^1.4.0, esquery@^1.4.2: +esquery@^1.4.2: version "1.6.0" resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.6.0.tgz#91419234f804d852a82dceec3e16cdc22cf9dae7" integrity sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg== @@ -14034,39 +11663,16 @@ estree-util-is-identifier-name@^3.0.0: resolved "https://registry.yarnpkg.com/estree-util-is-identifier-name/-/estree-util-is-identifier-name-3.0.0.tgz#0b5ef4c4ff13508b34dcd01ecfa945f61fce5dbd" integrity sha512-hFtqIDZTIUZ9BXLb8y4pYGyk6+wekIivNVTcmvk8NoOh+VeRn5y6cEHzbURrWbfp1fIqdVipilzj+lfaadNZmg== -estree-walker@^0.6.1: - version "0.6.1" - resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-0.6.1.tgz#53049143f40c6eb918b23671d1fe3219f3a1b362" - integrity sha512-SqmZANLWS0mnatqbSfRP5g8OXZC12Fgg1IwNtLsyHDzJizORW4khDfjPqJZsemPWBB2uqykUah5YpQ6epsqC/w== - -estree-walker@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-1.0.1.tgz#31bc5d612c96b704106b477e6dd5d8aa138cb700" - integrity sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg== - -estree-walker@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-2.0.2.tgz#52f010178c2a4c117a7757cfe942adb7d2da4cac" - integrity sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w== - esutils@^2.0.2: version "2.0.3" resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== -etag@^1.8.1, etag@~1.8.1: +etag@~1.8.1: version "1.8.1" resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" 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" - eventemitter3@^4.0.0, eventemitter3@^4.0.1, eventemitter3@^4.0.4: version "4.0.7" resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.7.tgz#2de9b68f6528d5644ef5c59526a1b4a07306169f" @@ -14161,28 +11767,6 @@ expect@^27.5.1: jest-matcher-utils "^27.5.1" jest-message-util "^27.5.1" -expect@^28.1.3: - version "28.1.3" - resolved "https://registry.yarnpkg.com/expect/-/expect-28.1.3.tgz#90a7c1a124f1824133dd4533cce2d2bdcb6603ec" - integrity sha512-eEh0xn8HlsuOBxFgIss+2mX85VAS4Qy3OSkjV7rlBWljtA4oWH37glVGyOZSZvErDT/yBywZdPGwCXuTvSG85g== - dependencies: - "@jest/expect-utils" "^28.1.3" - jest-get-type "^28.0.2" - jest-matcher-utils "^28.1.3" - jest-message-util "^28.1.3" - jest-util "^28.1.3" - -expect@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/expect/-/expect-29.7.0.tgz#578874590dcb3214514084c08115d8aee61e11bc" - integrity sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw== - dependencies: - "@jest/expect-utils" "^29.7.0" - jest-get-type "^29.6.3" - jest-matcher-utils "^29.7.0" - jest-message-util "^29.7.0" - jest-util "^29.7.0" - expect@^30.0.0: version "30.2.0" resolved "https://registry.yarnpkg.com/expect/-/expect-30.2.0.tgz#d4013bed267013c14bc1199cec8aa57cee9b5869" @@ -14196,9 +11780,9 @@ expect@^30.0.0: jest-util "30.2.0" exponential-backoff@^3.1.1: - version "3.1.2" - resolved "https://registry.yarnpkg.com/exponential-backoff/-/exponential-backoff-3.1.2.tgz#a8f26adb96bf78e8cd8ad1037928d5e5c0679d91" - integrity sha512-8QxYTVXUkuy7fIIoitQkPwGonB8F3Zj8eEO8Sqg9Zv/bkI7RJAzowee4gr81Hak/dUTpA2Z7VfQgoijjPNlUZA== + version "3.1.3" + resolved "https://registry.yarnpkg.com/exponential-backoff/-/exponential-backoff-3.1.3.tgz#51cf92c1c0493c766053f9d3abee4434c244d2f6" + integrity sha512-ZgEeZXj30q+I0EN+CbSSpIyPaJ5HVQD18Z1m+u1FXbAeT94mr1zw50q4q6jiiC447Nl/YTcIYSAftiGqetwXCA== express@^4.17.1, express@^4.17.3: version "4.21.2" @@ -14237,13 +11821,6 @@ express@^4.17.1, express@^4.17.3: utils-merge "1.0.1" vary "~1.1.2" -ext@^1.7.0: - 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: version "2.0.1" resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-2.0.1.tgz#51af7d614ad9a9f610ea1bafbb989d6b1c56890f" @@ -14264,24 +11841,6 @@ extend@^3.0.0: resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g== -external-editor@^2.0.4: - version "2.2.0" - resolved "https://registry.yarnpkg.com/external-editor/-/external-editor-2.2.0.tgz#045511cfd8d133f3846673d1047c154e214ad3d5" - integrity sha512-bSn6gvGxKt+b7+6TKEv1ZycHleA7aHhRHyAqJyp5pbUFuYYNIzpZnQDk7AsYckyWdEnTeAnay0aCy2aV6iTk9A== - dependencies: - chardet "^0.4.0" - iconv-lite "^0.4.17" - tmp "^0.0.33" - -external-editor@^3.0.3: - version "3.1.0" - resolved "https://registry.yarnpkg.com/external-editor/-/external-editor-3.1.0.tgz#cb03f740befae03ea4d283caed2741a83f335495" - integrity sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew== - dependencies: - chardet "^0.7.0" - iconv-lite "^0.4.24" - tmp "^0.0.33" - extglob@^2.0.4: version "2.0.4" resolved "https://registry.yarnpkg.com/extglob/-/extglob-2.0.4.tgz#ad00fe4dc612a9232e8718711dc5cb5ab0285543" @@ -14296,18 +11855,6 @@ extglob@^2.0.4: snapdragon "^0.8.1" to-regex "^3.0.1" -fake-indexeddb@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/fake-indexeddb/-/fake-indexeddb-4.0.2.tgz#e7a884158fa576e00f03e973b9874619947013e4" - integrity sha512-SdTwEhnakbgazc7W3WUXOJfGmhH0YfG4d+dRPOFoYDRTL6U5t8tvrmkf2W/C3W1jk2ylV7Wrnj44RASqpX/lEw== - dependencies: - realistic-structured-clone "^3.0.0" - -fake-indexeddb@^5.0.0: - version "5.0.2" - resolved "https://registry.yarnpkg.com/fake-indexeddb/-/fake-indexeddb-5.0.2.tgz#8e0b6c75c6dc6639cbb50c1aa948772147d7c93e" - integrity sha512-cB507r5T3D55DfclY01GLkninZLfU7HXV/mhVRTnTRm5k2u+fY7Fof2dBkr80p5t7G7dlA/G5dI87QiMdPpMCQ== - fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: version "3.1.3" resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" @@ -14362,7 +11909,7 @@ fast-json-parse@^1.0.3: resolved "https://registry.yarnpkg.com/fast-json-parse/-/fast-json-parse-1.0.3.tgz#43e5c61ee4efa9265633046b770fb682a7577c4d" integrity sha512-FRWsaZRWEJ1ESVNbDWmsAlqDk96gPQezzLghafp5J4GUKjbCz3OkAHuZs5TuPEtkbVQERysLp9xv6c24fBm8Aw== -fast-json-stable-stringify@2.x, fast-json-stable-stringify@^2.0.0, fast-json-stable-stringify@^2.1.0: +fast-json-stable-stringify@2.x, fast-json-stable-stringify@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== @@ -14434,14 +11981,6 @@ fdir@^6.5.0: resolved "https://registry.yarnpkg.com/fdir/-/fdir-6.5.0.tgz#ed2ab967a331ade62f18d077dae192684d50d350" integrity sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg== -fetch-blob@^3.1.2, fetch-blob@^3.1.4: - version "3.2.0" - resolved "https://registry.yarnpkg.com/fetch-blob/-/fetch-blob-3.2.0.tgz#f09b8d4bbd45adc6f0c20b7e787e793e309dcce9" - integrity sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ== - dependencies: - node-domexception "^1.0.0" - web-streams-polyfill "^3.0.3" - fetch-retry@^5.0.2: version "5.0.6" resolved "https://registry.yarnpkg.com/fetch-retry/-/fetch-retry-5.0.6.tgz#17d0bc90423405b7a88b74355bf364acd2a7fa56" @@ -14459,13 +11998,6 @@ figures@3.2.0, figures@^3.0.0: dependencies: escape-string-regexp "^1.0.5" -figures@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/figures/-/figures-2.0.0.tgz#3ab1a2d2a62c8bfb431a0c94cb797a2fce27c962" - integrity sha512-Oa2M9atig69ZkfwiApY8F2Yy+tzMbazyvqv21R0NsSC8floSOC09BbT1ITWAdoMGQvJ/aZnR1KMwdx9tvHnTNA== - dependencies: - escape-string-regexp "^1.0.5" - file-entry-cache@^6.0.1: version "6.0.1" resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-6.0.1.tgz#211b2dd9659cb0394b073e7323ac3c933d522027" @@ -14481,20 +12013,6 @@ file-loader@^6.2.0: loader-utils "^2.0.0" schema-utils "^3.0.0" -file-selector@^0.1.12: - version "0.1.19" - resolved "https://registry.yarnpkg.com/file-selector/-/file-selector-0.1.19.tgz#8ecc9d069a6f544f2e4a096b64a8052e70ec8abf" - integrity sha512-kCWw3+Aai8Uox+5tHCNgMFaUdgidxvMnLWO6fM5sZ0hA2wlHP5/DHGF0ECe84BiB95qdJbKNEJhWKVDvMN+JDQ== - dependencies: - tslib "^2.0.1" - -file-selector@^2.1.0: - version "2.1.2" - resolved "https://registry.yarnpkg.com/file-selector/-/file-selector-2.1.2.tgz#fe7c7ee9e550952dfbc863d73b14dc740d7de8b4" - integrity sha512-QgXo+mXTe8ljeqUFaX3QVHc5osSItJ/Km+xpocx0aSqWGMSCf6qYs/VnzZgS864Pjn5iceMRFigeAV7AfTlaig== - dependencies: - tslib "^2.7.0" - file-system-cache@^1.0.5: version "1.1.0" resolved "https://registry.yarnpkg.com/file-system-cache/-/file-system-cache-1.1.0.tgz#984de17b976b75a77a27e08d6828137c1aa80fa1" @@ -14545,18 +12063,6 @@ finalhandler@1.3.1: statuses "2.0.1" unpipe "~1.0.0" -finalhandler@~2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-2.1.0.tgz#72306373aa89d05a8242ed569ed86a1bff7c561f" - integrity sha512-/t88Ty3d5JWQbWYgaOGCCYfXRwV1+be02WqYYlL6h0lEiUAMPM8o8qKGO01YIkOHzka2up08wvgYD0mDiI+q3Q== - dependencies: - debug "^4.4.0" - encodeurl "^2.0.0" - escape-html "^1.0.3" - on-finished "^2.4.1" - parseurl "^1.3.3" - statuses "^2.0.1" - find-cache-dir@^2.0.0, find-cache-dir@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-2.1.0.tgz#8d0f94cd13fe43c6c7c261a0d86115ca918c05f7" @@ -14668,7 +12174,7 @@ focus-lock@^0.8.0: dependencies: tslib "^1.9.3" -follow-redirects@^1.0.0, follow-redirects@^1.14.0, follow-redirects@^1.15.6: +follow-redirects@^1.0.0, follow-redirects@^1.15.6: version "1.15.11" resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.11.tgz#777d73d72a92f8ec4d2e410eb47352a56b8e8340" integrity sha512-deG2P0JfjrTxl50XGCDyfI97ZGVCxIpfKYmfyrQ54n5FO/0gfIES8C/Psl6kWVDolizcaaxZJnTS0QSMxvnsBQ== @@ -14791,13 +12297,6 @@ form-data@^4.0.4: hasown "^2.0.2" mime-types "^2.1.12" -formdata-polyfill@^4.0.10: - version "4.0.10" - resolved "https://registry.yarnpkg.com/formdata-polyfill/-/formdata-polyfill-4.0.10.tgz#24807c31c9d402e002ab3d8c720144ceb8848423" - integrity sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g== - dependencies: - fetch-blob "^3.1.2" - forwarded@0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.2.0.tgz#2269936428aad4c15c7ebe9779a84bf0b2a81811" @@ -14815,11 +12314,6 @@ fresh@0.5.2, fresh@~0.5.2: resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" integrity sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q== -fresh@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/fresh/-/fresh-2.0.0.tgz#8dd7df6a1b3a1b3a5cf186c05a5dd267622635a4" - integrity sha512-Rx/WycZ60HOaqLKAi6cHRKKI7zxWbJ31MhntmtwMoaTeF7XFH9hhBp8vITaMidfljRQ6eYWCKkaTK+ykVJHP2A== - from2@^2.1.0: version "2.3.0" resolved "https://registry.yarnpkg.com/from2/-/from2-2.3.0.tgz#8bfb5502bde4a4d36cfdeea007fcca21d7e382af" @@ -14925,21 +12419,11 @@ function.prototype.name@^1.1.0, function.prototype.name@^1.1.6, function.prototy hasown "^2.0.2" is-callable "^1.2.7" -functional-red-black-tree@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327" - integrity sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g== - functions-have-names@^1.2.3: version "1.2.3" resolved "https://registry.yarnpkg.com/functions-have-names/-/functions-have-names-1.2.3.tgz#0404fe4ee2ba2f607f0e0ec3c80bae994133b834" integrity sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ== -fuzzy@0.1.3: - version "0.1.3" - resolved "https://registry.yarnpkg.com/fuzzy/-/fuzzy-0.1.3.tgz#4c76ec2ff0ac1a36a9dccf9a00df8623078d4ed8" - integrity sha512-/gZffu4ykarLrCiP3Ygsa86UAo1E5vEVlvTrpkKywXSbP9Xhln3oSp9QSV57gEq3JFFpGJ4GZ+5zdEp3FcUh4w== - gauge@^3.0.0: version "3.0.2" resolved "https://registry.yarnpkg.com/gauge/-/gauge-3.0.2.tgz#03bf4441c044383908bcfa0656ad91803259b395" @@ -15020,11 +12504,6 @@ get-port@5.1.1: resolved "https://registry.yarnpkg.com/get-port/-/get-port-5.1.1.tgz#0469ed07563479de6efb986baf053dcd7d4e3193" integrity sha512-g/Q1aTSDOxFpchXC4i8ZWvxA1lnPqx/JHqcpIw0/LX9T8x/GBbi6YnlN5nhaKIFkT8oFsscUKgDJYxfwfS6QsQ== -get-port@^4.2.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/get-port/-/get-port-4.2.0.tgz#e37368b1e863b7629c43c5a323625f95cf24b119" - integrity sha512-/b3jarXkH8KJoOMQc3uVGHASwGLPq3gSFJ7tgJm2diza+bydJPTGOibin2steecKeOylE8oY2JERlVWkAJO6yw== - get-proto@^1.0.0, get-proto@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/get-proto/-/get-proto-1.0.1.tgz#150b3f2743869ef3e851ec0c49d15b1d14d00ee1" @@ -15038,11 +12517,6 @@ get-stdin@^4.0.1: resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-4.0.1.tgz#b968c6b0a04384324902e8bf1a5df32579a450fe" integrity sha512-F5aQMywwJ2n85s4hJPTT9RPxGmubonuB10MNYo17/xph174n2MIR33HRguhzVag10O/npM7SPk73LMZNP+FaWw== -get-stdin@^8.0.0: - version "8.0.0" - resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-8.0.0.tgz#cbad6a73feb75f6eeb22ba9e01f89aa28aa97a53" - integrity sha512-sY22aA6xchAzprjyqmSEQv4UbAAzRN0L2dQB0NlN5acTTK9Don6nhoc3eAbUnpZiCANAMfd/+40kVdKfFygohg== - get-stream@6.0.0: version "6.0.0" resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-6.0.0.tgz#3e0012cb6827319da2706e601a1583e8629a6718" @@ -15070,9 +12544,9 @@ get-symbol-description@^1.0.2, get-symbol-description@^1.1.0: get-intrinsic "^1.2.6" get-tsconfig@^4.10.0: - version "4.10.1" - resolved "https://registry.yarnpkg.com/get-tsconfig/-/get-tsconfig-4.10.1.tgz#d34c1c01f47d65a606c37aa7a177bc3e56ab4b2e" - integrity sha512-auHyJ4AgMz7vgS8Hp3N6HXSmlMdUyhSUrfBF16w153rxtLIEOE+HGqaBppczZvnHLqQJfiHotCYpNhl0lUROFQ== + version "4.13.0" + resolved "https://registry.yarnpkg.com/get-tsconfig/-/get-tsconfig-4.13.0.tgz#fcdd991e6d22ab9a600f00e91c318707a5d9a0d7" + integrity sha512-1VKTZJCwBrvbd+Wn3AOgQP/2Av+TfTCOlE4AcRJE72W1ksZXbAx8PPBR9RzgTeSPzlPMHrbANMH3LbltH73wxQ== dependencies: resolve-pkg-maps "^1.0.0" @@ -15162,13 +12636,6 @@ glob-promise@^3.4.0: dependencies: "@types/glob" "*" -glob-promise@^4.2.2: - version "4.2.2" - resolved "https://registry.yarnpkg.com/glob-promise/-/glob-promise-4.2.2.tgz#15f44bcba0e14219cd93af36da6bb905ff007877" - integrity sha512-xcUzJ8NWN5bktoTIX7eOclO1Npxd/dyVqUJxlLIDasT4C7KZyqlPIwkdJ0Ypiy3p2ZKahTjK4M9uC3sNSfNMzw== - dependencies: - "@types/glob" "^7.1.3" - glob-to-regexp@^0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/glob-to-regexp/-/glob-to-regexp-0.3.0.tgz#8c5a1494d2066c570cc3bfe4496175acc4d502ab" @@ -15203,17 +12670,6 @@ glob@7.1.4: once "^1.3.0" path-is-absolute "^1.0.0" -glob@8.0.3: - version "8.0.3" - resolved "https://registry.yarnpkg.com/glob/-/glob-8.0.3.tgz#415c6eb2deed9e502c68fa44a272e6da6eeca42e" - integrity sha512-ull455NHSHI/Y1FqGaaYFaLGkNMMJbavMrEGFXG/PGrg6y7sutWHUHrz6gy6WEBH6akM1M414dWKCNs+IhKdiQ== - dependencies: - fs.realpath "^1.0.0" - inflight "^1.0.4" - inherits "2" - minimatch "^5.0.1" - once "^1.3.0" - glob@^10.2.2: version "10.4.5" resolved "https://registry.yarnpkg.com/glob/-/glob-10.4.5.tgz#f4d9f0b90ffdbab09c9d77f5f29b4262517b0956" @@ -15226,7 +12682,7 @@ glob@^10.2.2: package-json-from-dist "^1.0.0" path-scurry "^1.11.1" -glob@^7.0.0, glob@^7.0.3, glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4, glob@^7.1.6: +glob@^7.0.3, glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4, glob@^7.1.6: version "7.2.3" resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== @@ -15238,7 +12694,7 @@ glob@^7.0.0, glob@^7.0.3, glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4, gl once "^1.3.0" path-is-absolute "^1.0.0" -glob@^8.0.1, glob@^8.0.3, glob@^8.1.0: +glob@^8.0.1: version "8.1.0" resolved "https://registry.yarnpkg.com/glob/-/glob-8.1.0.tgz#d388f656593ef708ee3e34640fdfb99a9fd1c33e" integrity sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ== @@ -15267,12 +12723,7 @@ global@^4.4.0: min-document "^2.19.0" process "^0.11.10" -globals@^11.1.0: - version "11.12.0" - resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" - integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== - -globals@^13.19.0, globals@^13.24.0, globals@^13.6.0, globals@^13.9.0: +globals@^13.19.0: version "13.24.0" resolved "https://registry.yarnpkg.com/globals/-/globals-13.24.0.tgz#8432a19d78ce0c1e833949c36adb345400bb1171" integrity sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ== @@ -15370,7 +12821,7 @@ handle-thing@^2.0.0: resolved "https://registry.yarnpkg.com/handle-thing/-/handle-thing-2.0.1.tgz#857f79ce359580c340d43081cc648970d0bb234e" integrity sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg== -handlebars@^4.7.7, handlebars@^4.7.8: +handlebars@^4.7.7: version "4.7.8" resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.7.8.tgz#41c42c18b1be2365439188c77c6afae71c0cd9e9" integrity sha512-vafaFqs8MZkRrSX7sFVUdo3ap/eNiLnb4IakshzvP56X5Nr1iGKAIqdX6tMlm6HcNRIkr6AxO5jFEoJzzpT8aQ== @@ -15387,13 +12838,6 @@ hard-rejection@^2.1.0: resolved "https://registry.yarnpkg.com/hard-rejection/-/hard-rejection-2.1.0.tgz#1c6eda5c1685c63942766d79bb40ae773cecd883" integrity sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA== -has-ansi@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/has-ansi/-/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91" - integrity sha512-C8vBJ8DwUCx19vhm7urhTuUsr4/IyP6l4VzNQDv+ryHQObW3TTTp9yB68WpYgRe2bbaGuZ/se74IqFeVnMnLZg== - dependencies: - ansi-regex "^2.0.0" - has-bigints@^1.0.2: version "1.1.0" resolved "https://registry.yarnpkg.com/has-bigints/-/has-bigints-1.1.0.tgz#28607e965ac967e03cd2a2c70a2636a1edad49fe" @@ -15792,7 +13236,7 @@ http-deceiver@^1.2.7: resolved "https://registry.yarnpkg.com/http-deceiver/-/http-deceiver-1.2.7.tgz#fa7168944ab9a519d337cb0bec7284dc3e723d87" integrity sha512-LmpOGxTfbpgtGVxJrj5k7asXHCgNZp5nLfp+hWc8QQRqtb7fUy6kRY3BO1h9ddF6yIPYUARgxGOwB42DnxIaNw== -http-errors@2.0.0, http-errors@^2.0.0: +http-errors@2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-2.0.0.tgz#b7774a1486ef73cf7667ac9ae0858c012c57b9d3" integrity sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ== @@ -15916,7 +13360,7 @@ i18next@^24.2.2: dependencies: "@babel/runtime" "^7.26.10" -iconv-lite@0.4.24, iconv-lite@^0.4.17, iconv-lite@^0.4.24: +iconv-lite@0.4.24: version "0.4.24" resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== @@ -15964,11 +13408,6 @@ iferr@^0.1.5: resolved "https://registry.yarnpkg.com/iferr/-/iferr-0.1.5.tgz#c60eed69e6d8fdb6b3104a1fcbca1c192dc5b501" integrity sha512-DUNFN5j7Tln0D+TxzloUjKB+CtVu6myn0JEFak6dG18mNt9YkQ6lzGCdafwofISZ1lLF3xRHJ98VKy9ynkcFaA== -ignore-by-default@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/ignore-by-default/-/ignore-by-default-1.0.1.tgz#48ca6d72f6c6a3af00a9ad4ae6876be3889e2b09" - integrity sha512-Ius2VYcGNk7T90CppJqcIkS5ooHUZyIQK+ClZfMfMNFEF9VSE73Fq+906u/CWu92x4gzZMWOwfFYckPObzdEbA== - ignore-walk@^5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/ignore-walk/-/ignore-walk-5.0.1.tgz#5f199e23e1288f518d90358d461387788a154776" @@ -15983,7 +13422,7 @@ ignore-walk@^6.0.0: dependencies: minimatch "^9.0.0" -ignore@^4.0.3, ignore@^4.0.6: +ignore@^4.0.3: version "4.0.6" resolved "https://registry.yarnpkg.com/ignore/-/ignore-4.0.6.tgz#750e3db5862087b4737ebac8207ffd1ef27b25fc" integrity sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg== @@ -16008,7 +13447,7 @@ immer@^10.1.1: resolved "https://registry.yarnpkg.com/immer/-/immer-10.1.3.tgz#e38a0b97db59949d31d9b381b04c2e441b1c3747" integrity sha512-tmjF/k8QDKydUlm3mZU+tjM6zeq9/fFpPqH9SzWmBnVVKsPBg/V66qsMwb3/Bo90cgUN+ghdVBess+hPsxUyRw== -import-fresh@^3.0.0, import-fresh@^3.1.0, import-fresh@^3.2.1, import-fresh@^3.3.0: +import-fresh@^3.1.0, import-fresh@^3.2.1, import-fresh@^3.3.0: version "3.3.1" resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.1.tgz#9cecb56503c0ada1f2741dbbd6546e4b13b57ccf" integrity sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ== @@ -16100,58 +13539,6 @@ inline-style-parser@0.2.4: resolved "https://registry.yarnpkg.com/inline-style-parser/-/inline-style-parser-0.2.4.tgz#f4af5fe72e612839fcd453d989a586566d695f22" integrity sha512-0aO8FkhNZlj/ZIbNi7Lxxr12obT7cL1moPfE4tg1LkX7LlLfC6DeX4l2ZEud1ukP9jNQyNnfzQVqwbwmAATY4Q== -inquirer-autocomplete-prompt@^0.11.1: - version "0.11.1" - resolved "https://registry.yarnpkg.com/inquirer-autocomplete-prompt/-/inquirer-autocomplete-prompt-0.11.1.tgz#f90ca9510a4c489882e9be294934bd8c2e575e09" - integrity sha512-VM4eNiyRD4CeUc2cyKni+F8qgHwL9WC4LdOr+mEC85qP/QNsDV+ysVqUrJYhw1TmDQu1QVhc8hbaL7wfk8SJxw== - dependencies: - ansi-escapes "^2.0.0" - chalk "^1.1.3" - figures "^2.0.0" - inquirer "3.1.1" - lodash "^4.17.4" - run-async "^2.3.0" - util "^0.10.3" - -inquirer@3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-3.1.1.tgz#87621c4fba4072f48a8dd71c9f9df6f100b2d534" - integrity sha512-H50sHQwgvvaTBd3HpKMVtL/u6LoHDvYym51gd7bGQe/+9HkCE+J0/3N5FJLfd6O6oz44hHewC2Pc2LodzWVafQ== - dependencies: - ansi-escapes "^2.0.0" - chalk "^1.0.0" - cli-cursor "^2.1.0" - cli-width "^2.0.0" - external-editor "^2.0.4" - figures "^2.0.0" - lodash "^4.3.0" - mute-stream "0.0.7" - run-async "^2.2.0" - rx-lite "^4.0.8" - rx-lite-aggregates "^4.0.8" - string-width "^2.0.0" - strip-ansi "^3.0.0" - through "^2.3.6" - -inquirer@^6.0.0: - version "6.5.2" - resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-6.5.2.tgz#ad50942375d036d327ff528c08bd5fab089928ca" - integrity sha512-cntlB5ghuB0iuO65Ovoi8ogLHiWGs/5yNrtUcKjFhSSiVeAIVpD7koaSU9RM8mpXw5YDi9RdYXGQMaOURB7ycQ== - dependencies: - ansi-escapes "^3.2.0" - chalk "^2.4.2" - cli-cursor "^2.1.0" - cli-width "^2.0.0" - external-editor "^3.0.3" - figures "^2.0.0" - lodash "^4.17.12" - mute-stream "0.0.7" - run-async "^2.2.0" - rxjs "^6.4.0" - string-width "^2.1.0" - strip-ansi "^5.1.0" - through "^2.3.6" - inquirer@^8.2.4: version "8.2.7" resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-8.2.7.tgz#62f6b931a9b7f8735dc42db927316d8fb6f71de8" @@ -16173,15 +13560,6 @@ inquirer@^8.2.4: through "^2.3.6" wrap-ansi "^6.0.1" -inquirerer@0.1.3: - version "0.1.3" - resolved "https://registry.yarnpkg.com/inquirerer/-/inquirerer-0.1.3.tgz#ecf91dc672b3bf45211d7f64bf5e8d5e171fd2ad" - integrity sha512-yGgLUOqPxTsINBjZNZeLi3cv2zgxXtw9feaAOSJf2j6AqIT5Uxs5ZOqOrfAf+xP65Sicla1FD3iDxa3D6TsCAQ== - dependencies: - colors "^1.1.2" - inquirer "^6.0.0" - inquirer-autocomplete-prompt "^0.11.1" - internal-slot@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.1.0.tgz#1eac91762947d2f7056bc838d93e13b2e9604961" @@ -16201,11 +13579,6 @@ internmap@^1.0.0: resolved "https://registry.yarnpkg.com/internmap/-/internmap-1.0.1.tgz#0017cc8a3b99605f0302f2b198d272e015e5df95" integrity sha512-lDB5YccMydFBtasVtxnZ3MRBHuaoE8GKsppq+EchKL2U4nK/DmEpPHNH8MZe5HkMtpSiTSOZwfN0tzYjO/lJEw== -interpret@^1.0.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.4.0.tgz#665ab8bc4da27a774a40584e812e3e0fa45b1a1e" - integrity sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA== - interpret@^2.2.0: version "2.2.0" resolved "https://registry.yarnpkg.com/interpret/-/interpret-2.2.0.tgz#1a78a0b5965c40a5416d007ad6f50ad27c417df9" @@ -16217,13 +13590,13 @@ interpret@^3.1.1: integrity sha512-6xwYfHbajpoF0xLW+iwLkhwgvLoZDfjYfoFNu8ftMoXINzwuymNLd9u/KmwtdT2GbR+/Cz66otEGEVVUHX9QLQ== intl-messageformat@^10.1.0: - version "10.7.16" - resolved "https://registry.yarnpkg.com/intl-messageformat/-/intl-messageformat-10.7.16.tgz#d909f9f9f4ab857fbe681d559b958dd4dd9f665a" - integrity sha512-UmdmHUmp5CIKKjSoE10la5yfU+AYJAaiYLsodbjL4lji83JNvgOQUjGaGhGrpFCb0Uh7sl7qfP1IyILa8Z40ug== + version "10.7.18" + resolved "https://registry.yarnpkg.com/intl-messageformat/-/intl-messageformat-10.7.18.tgz#51a6f387afbca9b0f881b2ec081566db8c540b0d" + integrity sha512-m3Ofv/X/tV8Y3tHXLohcuVuhWKo7BBq62cqY15etqmLxg2DZ34AGGgQDeR+SCta2+zICb1NX83af0GJmbQ1++g== dependencies: - "@formatjs/ecma402-abstract" "2.3.4" + "@formatjs/ecma402-abstract" "2.3.6" "@formatjs/fast-memoize" "2.2.7" - "@formatjs/icu-messageformat-parser" "2.11.2" + "@formatjs/icu-messageformat-parser" "2.11.4" tslib "^2.8.0" ip-address@^10.0.1: @@ -16392,7 +13765,7 @@ is-ci@^2.0.0: dependencies: ci-info "^2.0.0" -is-core-module@^2.13.0, is-core-module@^2.16.0, is-core-module@^2.16.1, is-core-module@^2.5.0, is-core-module@^2.8.1: +is-core-module@^2.13.0, is-core-module@^2.16.1, is-core-module@^2.5.0, is-core-module@^2.8.1: version "2.16.1" resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.16.1.tgz#2a98801a849f43e2add644fbb6bc6229b19a4ef4" integrity sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w== @@ -16454,11 +13827,6 @@ is-docker@^2.0.0, is-docker@^2.1.1: resolved "https://registry.yarnpkg.com/is-docker/-/is-docker-2.2.1.tgz#33eeabe23cfe86f14bde4408a02c0cfb853acdaa" integrity sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ== -is-docker@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/is-docker/-/is-docker-3.0.0.tgz#90093aa3106277d8a77a5910dbae71747e15a200" - integrity sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ== - is-dom@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/is-dom/-/is-dom-1.1.0.tgz#af1fced292742443bb59ca3f76ab5e80907b4e8a" @@ -16496,11 +13864,6 @@ is-finite@^1.0.0: resolved "https://registry.yarnpkg.com/is-finite/-/is-finite-1.1.0.tgz#904135c77fb42c0641d6aa1bcdbc4daa8da082f3" integrity sha512-cdyMtqX/BOqqNBBiKlIVkytNHm49MtMlYyn1zxzvJKWmFMlGzm+ry5BBfYyeY9YmNKbRSo/o7OX9w9ale0wg3w== -is-fullwidth-code-point@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" - integrity sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w== - is-fullwidth-code-point@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" @@ -16556,13 +13919,6 @@ is-in-browser@^1.0.2, is-in-browser@^1.1.3: resolved "https://registry.yarnpkg.com/is-in-browser/-/is-in-browser-1.1.3.tgz#56ff4db683a078c6082eb95dad7dc62e1d04f835" integrity sha512-FeXIBgG/CPGd/WUxuEyvgGTEfwiG9Z4EKGxjNMRqviiIIfsmgrpnHLffEDdwUHqNva1VEW91o3xBT/m8Elgl9g== -is-inside-container@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-inside-container/-/is-inside-container-1.0.0.tgz#e81fba699662eb31dbdaf26766a61d4814717ea4" - integrity sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA== - dependencies: - is-docker "^3.0.0" - is-interactive@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-interactive/-/is-interactive-1.0.0.tgz#cea6e6ae5c870a7b0a0004070b7b587e0252912e" @@ -16578,11 +13934,6 @@ is-map@^2.0.2, is-map@^2.0.3: resolved "https://registry.yarnpkg.com/is-map/-/is-map-2.0.3.tgz#ede96b7fe1e270b3c4465e3a465658764926d62e" integrity sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw== -is-module@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-module/-/is-module-1.0.0.tgz#3258fb69f78c14d5b815d664336b4cffb6441591" - integrity sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g== - is-negative-zero@^2.0.3: version "2.0.3" resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.3.tgz#ced903a027aca6381b777a5743069d7376a49747" @@ -16647,7 +13998,7 @@ is-plain-obj@^1.0.0, is-plain-obj@^1.1.0: resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-1.1.0.tgz#71a50c8429dfca773c92a390a4a03b39fcd51d3e" integrity sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg== -is-plain-obj@^2.0.0, is-plain-obj@^2.1.0: +is-plain-obj@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-2.1.0.tgz#45e42e37fccf1f40da8e5f76ee21515840c09287" integrity sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA== @@ -16679,18 +14030,6 @@ 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" 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: - version "1.2.1" - resolved "https://registry.yarnpkg.com/is-reference/-/is-reference-1.2.1.tgz#8b2dac0b371f4bc994fdeaba9eb542d03002d0b7" - integrity sha512-U82MsXXiFIrjCK4otLT+o2NA2Cd2g5MLoOVXUZjIOhLurrRxpEXzI8O0KZHr3IjLvlAH1kTPYSuqer5T9ZVBKQ== - dependencies: - "@types/estree" "*" - is-regex@^1.1.2, is-regex@^1.1.4, is-regex@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.2.1.tgz#76d70a3ed10ef9be48eb577887d74205bf0cad22" @@ -16833,13 +14172,6 @@ is-wsl@^2.1.1, is-wsl@^2.2.0: dependencies: is-docker "^2.0.0" -is-wsl@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-3.1.0.tgz#e1c657e39c10090afcbedec61720f6b924c3cbd2" - integrity sha512-UcVfVfaK4Sc4m7X3dUSoHoozQGBEFeDC+zVo06t98xe8CzHSZZBekNXH+tu0NalHolcJ/QAGqS46Hef7QXBIMw== - dependencies: - is-inside-container "^1.0.0" - isarray@1.0.0, isarray@^1.0.0, isarray@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" @@ -16873,12 +14205,12 @@ isobject@^4.0.0: integrity sha512-S/2fF5wH8SJA/kmwr6HYhK/RI/OkhD84k8ntalo0iJjZikgq1XFvR5M8NPT1x5F7fBwCG3qHfnzeP/Vh/ZxCUA== isomorphic-dompurify@^2.21.0: - version "2.28.0" - resolved "https://registry.yarnpkg.com/isomorphic-dompurify/-/isomorphic-dompurify-2.28.0.tgz#e34367c92e31dc664a97b1389527b844bf43587e" - integrity sha512-9G5v8g4tYoix5odskjG704Khm1zNrqqqOC4YjCwEUhx0OvuaijRCprAV2GwJ9iw/01c6H1R+rs/2AXPZLlgDaQ== + version "2.30.1" + resolved "https://registry.yarnpkg.com/isomorphic-dompurify/-/isomorphic-dompurify-2.30.1.tgz#4b54854ad9d1fb8e63dd6571f8ffba2606441f46" + integrity sha512-VJFbthRrns7BE+q3qSUJ5zxGNjuq4FqiaWXKCwnMoJbumnoQJoeOeOzP/oejKLPPtENckLWoDxGQiv5OkEFC+Q== dependencies: - dompurify "^3.2.7" - jsdom "^27.0.0" + dompurify "^3.3.0" + jsdom "^27.0.1" isomorphic-unfetch@^3.1.0: version "3.1.0" @@ -16909,17 +14241,6 @@ istanbul-lib-instrument@^5.0.4, istanbul-lib-instrument@^5.1.0: istanbul-lib-coverage "^3.2.0" semver "^6.3.0" -istanbul-lib-instrument@^6.0.0: - version "6.0.3" - resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-6.0.3.tgz#fa15401df6c15874bcb2105f773325d78c666765" - integrity sha512-Vtgk7L/R2JHyyGW07spoFlB8/lpjiOLTjMdms6AFMraYt3BaJauod/NGrfnVG/y4Ix1JEuMRPDPEj2ua+zz1/Q== - dependencies: - "@babel/core" "^7.23.9" - "@babel/parser" "^7.23.9" - "@istanbuljs/schema" "^0.1.3" - istanbul-lib-coverage "^3.2.0" - semver "^7.5.4" - istanbul-lib-report@^3.0.0: version "3.0.1" resolved "https://registry.yarnpkg.com/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz#908305bac9a5bd175ac6a74489eafd0fc2445a7d" @@ -17005,15 +14326,6 @@ jest-changed-files@^27.5.1: execa "^5.0.0" throat "^6.0.1" -jest-changed-files@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-29.7.0.tgz#1c06d07e77c78e1585d020424dedc10d6e17ac3a" - integrity sha512-fEArFiwf1BpQ+4bXSprcDc3/x4HSzL4al2tozwVpDFpsxALjLYdyiIK4e5Vz66GQJIbXJ82+35PtysofptNX2w== - dependencies: - execa "^5.0.0" - jest-util "^29.7.0" - p-limit "^3.1.0" - jest-circus@^27.5.1: version "27.5.1" resolved "https://registry.yarnpkg.com/jest-circus/-/jest-circus-27.5.1.tgz#37a5a4459b7bf4406e53d637b49d22c65d125ecc" @@ -17039,32 +14351,6 @@ jest-circus@^27.5.1: stack-utils "^2.0.3" throat "^6.0.1" -jest-circus@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/jest-circus/-/jest-circus-29.7.0.tgz#b6817a45fcc835d8b16d5962d0c026473ee3668a" - integrity sha512-3E1nCMgipcTkCocFwM90XXQab9bS+GMsjdpmPrlelaxwD93Ad8iVEjX/vvHPdLPnFf+L40u+5+iutRdA1N9myw== - dependencies: - "@jest/environment" "^29.7.0" - "@jest/expect" "^29.7.0" - "@jest/test-result" "^29.7.0" - "@jest/types" "^29.6.3" - "@types/node" "*" - chalk "^4.0.0" - co "^4.6.0" - dedent "^1.0.0" - is-generator-fn "^2.0.0" - jest-each "^29.7.0" - jest-matcher-utils "^29.7.0" - jest-message-util "^29.7.0" - jest-runtime "^29.7.0" - jest-snapshot "^29.7.0" - jest-util "^29.7.0" - p-limit "^3.1.0" - pretty-format "^29.7.0" - pure-rand "^6.0.0" - slash "^3.0.0" - stack-utils "^2.0.3" - jest-cli@^27.5.1: version "27.5.1" resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-27.5.1.tgz#278794a6e6458ea8029547e6c6cbf673bd30b145" @@ -17083,23 +14369,6 @@ jest-cli@^27.5.1: prompts "^2.0.1" yargs "^16.2.0" -jest-cli@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-29.7.0.tgz#5592c940798e0cae677eec169264f2d839a37995" - integrity sha512-OVVobw2IubN/GSYsxETi+gOe7Ka59EFMR/twOU3Jb2GnKKeMGJB5SGUUrEz3SFVmJASUdZUzy83sLNNQ2gZslg== - dependencies: - "@jest/core" "^29.7.0" - "@jest/test-result" "^29.7.0" - "@jest/types" "^29.6.3" - chalk "^4.0.0" - create-jest "^29.7.0" - exit "^0.1.2" - import-local "^3.0.2" - jest-config "^29.7.0" - jest-util "^29.7.0" - jest-validate "^29.7.0" - yargs "^17.3.1" - jest-config@^27.5.1: version "27.5.1" resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-27.5.1.tgz#5c387de33dca3f99ad6357ddeccd91bf3a0e4a41" @@ -17130,34 +14399,6 @@ jest-config@^27.5.1: slash "^3.0.0" strip-json-comments "^3.1.1" -jest-config@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-29.7.0.tgz#bcbda8806dbcc01b1e316a46bb74085a84b0245f" - integrity sha512-uXbpfeQ7R6TZBqI3/TxCU4q4ttk3u0PJeC+E0zbfSoSjq6bJ7buBPxzQPL0ifrkY4DNu4JUdk0ImlBUYi840eQ== - dependencies: - "@babel/core" "^7.11.6" - "@jest/test-sequencer" "^29.7.0" - "@jest/types" "^29.6.3" - babel-jest "^29.7.0" - chalk "^4.0.0" - ci-info "^3.2.0" - deepmerge "^4.2.2" - glob "^7.1.3" - graceful-fs "^4.2.9" - jest-circus "^29.7.0" - jest-environment-node "^29.7.0" - jest-get-type "^29.6.3" - jest-regex-util "^29.6.3" - jest-resolve "^29.7.0" - jest-runner "^29.7.0" - jest-util "^29.7.0" - jest-validate "^29.7.0" - micromatch "^4.0.4" - parse-json "^5.2.0" - pretty-format "^29.7.0" - slash "^3.0.0" - strip-json-comments "^3.1.1" - jest-diff@30.2.0: version "30.2.0" resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-30.2.0.tgz#e3ec3a6ea5c5747f605c9e874f83d756cba36825" @@ -17168,7 +14409,7 @@ jest-diff@30.2.0: chalk "^4.1.2" pretty-format "30.2.0" -"jest-diff@>=29.4.3 < 30", jest-diff@^29.4.1, jest-diff@^29.7.0: +"jest-diff@>=29.4.3 < 30", jest-diff@^29.4.1: version "29.7.0" resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-29.7.0.tgz#017934a66ebb7ecf6f205e84699be10afd70458a" integrity sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw== @@ -17188,16 +14429,6 @@ jest-diff@^27.5.1: jest-get-type "^27.5.1" pretty-format "^27.5.1" -jest-diff@^28.1.3: - version "28.1.3" - resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-28.1.3.tgz#948a192d86f4e7a64c5264ad4da4877133d8792f" - integrity sha512-8RqP1B/OXzjjTWkqMX67iqgwBVJRgCyKD3L9nq+6ZqJMdvjE8RgHktqZ6jNrkdMT+dJuYNI3rhQpxaz7drJHfw== - dependencies: - chalk "^4.0.0" - diff-sequences "^28.1.1" - jest-get-type "^28.0.2" - pretty-format "^28.1.3" - jest-docblock@^27.5.1: version "27.5.1" resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-27.5.1.tgz#14092f364a42c6108d42c33c8cf30e058e25f6c0" @@ -17205,13 +14436,6 @@ jest-docblock@^27.5.1: dependencies: detect-newline "^3.0.0" -jest-docblock@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-29.7.0.tgz#8fddb6adc3cdc955c93e2a87f61cfd350d5d119a" - integrity sha512-q617Auw3A612guyaFgsbFeYpNP5t2aoUNLwBUbc/0kD1R4t9ixDbyFTHd1nok4epoVFpr7PmeWHrhvuV3XaJ4g== - dependencies: - detect-newline "^3.0.0" - jest-each@^27.5.1: version "27.5.1" resolved "https://registry.yarnpkg.com/jest-each/-/jest-each-27.5.1.tgz#5bc87016f45ed9507fed6e4702a5b468a5b2c44e" @@ -17223,17 +14447,6 @@ jest-each@^27.5.1: jest-util "^27.5.1" pretty-format "^27.5.1" -jest-each@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/jest-each/-/jest-each-29.7.0.tgz#162a9b3f2328bdd991beaabffbb74745e56577d1" - integrity sha512-gns+Er14+ZrEoC5fhOfYCY1LOHHr0TI+rQUHZS8Ttw2l7gl+80eHc/gFf2Ktkw0+SIACDTeWvpFcv3B04VembQ== - dependencies: - "@jest/types" "^29.6.3" - chalk "^4.0.0" - jest-get-type "^29.6.3" - jest-util "^29.7.0" - pretty-format "^29.7.0" - jest-environment-jsdom@^27.5.1: version "27.5.1" resolved "https://registry.yarnpkg.com/jest-environment-jsdom/-/jest-environment-jsdom-27.5.1.tgz#ea9ccd1fc610209655a77898f86b2b559516a546" @@ -17259,28 +14472,11 @@ jest-environment-node@^27.5.1: jest-mock "^27.5.1" jest-util "^27.5.1" -jest-environment-node@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-29.7.0.tgz#0b93e111dda8ec120bc8300e6d1fb9576e164376" - integrity sha512-DOSwCRqXirTOyheM+4d5YZOrWcdu0LNZ87ewUoywbcb2XR4wKgqiG8vNeYwhjFMbEkfju7wx2GYH0P2gevGvFw== - dependencies: - "@jest/environment" "^29.7.0" - "@jest/fake-timers" "^29.7.0" - "@jest/types" "^29.6.3" - "@types/node" "*" - jest-mock "^29.7.0" - jest-util "^29.7.0" - jest-get-type@^27.5.1: version "27.5.1" resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-27.5.1.tgz#3cd613c507b0f7ace013df407a1c1cd578bcb4f1" integrity sha512-2KY95ksYSaK7DMBWQn6dQz3kqAf3BB64y2udeG+hv4KfSOb9qwcYQstTJc1KCbsix+wLZWZYN8t7nwX3GOBLRw== -jest-get-type@^28.0.2: - version "28.0.2" - resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-28.0.2.tgz#34622e628e4fdcd793d46db8a242227901fcf203" - integrity sha512-ioj2w9/DxSYHfOm5lJKCdcAmPJzQXmbM/Url3rhlghrPvT3tt+7a/+oXc9azkKmLvoiXjtV83bEWqi+vs5nlPA== - jest-get-type@^29.6.3: version "29.6.3" resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-29.6.3.tgz#36f499fdcea197c1045a127319c0481723908fd1" @@ -17327,44 +14523,6 @@ jest-haste-map@^27.5.1: optionalDependencies: fsevents "^2.3.2" -jest-haste-map@^28.1.3: - version "28.1.3" - resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-28.1.3.tgz#abd5451129a38d9841049644f34b034308944e2b" - integrity sha512-3S+RQWDXccXDKSWnkHa/dPwt+2qwA8CJzR61w3FoYCvoo3Pn8tvGcysmMF0Bj0EX5RYvAI2EIvC57OmotfdtKA== - dependencies: - "@jest/types" "^28.1.3" - "@types/graceful-fs" "^4.1.3" - "@types/node" "*" - anymatch "^3.0.3" - fb-watchman "^2.0.0" - graceful-fs "^4.2.9" - jest-regex-util "^28.0.2" - jest-util "^28.1.3" - jest-worker "^28.1.3" - micromatch "^4.0.4" - walker "^1.0.8" - optionalDependencies: - fsevents "^2.3.2" - -jest-haste-map@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-29.7.0.tgz#3c2396524482f5a0506376e6c858c3bbcc17b104" - integrity sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA== - dependencies: - "@jest/types" "^29.6.3" - "@types/graceful-fs" "^4.1.3" - "@types/node" "*" - anymatch "^3.0.3" - fb-watchman "^2.0.0" - graceful-fs "^4.2.9" - jest-regex-util "^29.6.3" - jest-util "^29.7.0" - jest-worker "^29.7.0" - micromatch "^4.0.4" - walker "^1.0.8" - optionalDependencies: - fsevents "^2.3.2" - jest-jasmine2@^27.5.1: version "27.5.1" resolved "https://registry.yarnpkg.com/jest-jasmine2/-/jest-jasmine2-27.5.1.tgz#a037b0034ef49a9f3d71c4375a796f3b230d1ac4" @@ -17396,14 +14554,6 @@ jest-leak-detector@^27.5.1: jest-get-type "^27.5.1" pretty-format "^27.5.1" -jest-leak-detector@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/jest-leak-detector/-/jest-leak-detector-29.7.0.tgz#5b7ec0dadfdfec0ca383dc9aa016d36b5ea4c728" - integrity sha512-kYA8IJcSYtST2BY9I+SMC32nDpBT3J2NvWJx8+JCuCdl/CR1I4EKUJROiP8XtCcxqgTTBGJNdbB1A8XRKbTetw== - dependencies: - jest-get-type "^29.6.3" - pretty-format "^29.7.0" - jest-matcher-utils@30.2.0: version "30.2.0" resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-30.2.0.tgz#69a0d4c271066559ec8b0d8174829adc3f23a783" @@ -17424,26 +14574,6 @@ jest-matcher-utils@^27.0.0, jest-matcher-utils@^27.5.1: jest-get-type "^27.5.1" pretty-format "^27.5.1" -jest-matcher-utils@^28.1.3: - version "28.1.3" - resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-28.1.3.tgz#5a77f1c129dd5ba3b4d7fc20728806c78893146e" - integrity sha512-kQeJ7qHemKfbzKoGjHHrRKH6atgxMk8Enkk2iPQ3XwO6oE/KYD8lMYOziCkeSB9G4adPM4nR1DE8Tf5JeWH6Bw== - dependencies: - chalk "^4.0.0" - jest-diff "^28.1.3" - jest-get-type "^28.0.2" - pretty-format "^28.1.3" - -jest-matcher-utils@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-29.7.0.tgz#ae8fec79ff249fd592ce80e3ee474e83a6c44f12" - integrity sha512-sBkD+Xi9DtcChsI3L3u0+N0opgPYnCRPtGcQYrgXmR+hmt/fYfWAL0xRXYU8eWOdfuLgBe0YCW3AFtnRLagq/g== - dependencies: - chalk "^4.0.0" - jest-diff "^29.7.0" - jest-get-type "^29.6.3" - pretty-format "^29.7.0" - jest-message-util@30.2.0: version "30.2.0" resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-30.2.0.tgz#fc97bf90d11f118b31e6131e2b67fc4f39f92152" @@ -17474,36 +14604,6 @@ jest-message-util@^27.5.1: slash "^3.0.0" stack-utils "^2.0.3" -jest-message-util@^28.1.3: - version "28.1.3" - resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-28.1.3.tgz#232def7f2e333f1eecc90649b5b94b0055e7c43d" - integrity sha512-PFdn9Iewbt575zKPf1286Ht9EPoJmYT7P0kY+RibeYZ2XtOr53pDLEFoTWXbd1h4JiGiWpTBC84fc8xMXQMb7g== - dependencies: - "@babel/code-frame" "^7.12.13" - "@jest/types" "^28.1.3" - "@types/stack-utils" "^2.0.0" - chalk "^4.0.0" - graceful-fs "^4.2.9" - micromatch "^4.0.4" - pretty-format "^28.1.3" - slash "^3.0.0" - stack-utils "^2.0.3" - -jest-message-util@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-29.7.0.tgz#8bc392e204e95dfe7564abbe72a404e28e51f7f3" - integrity sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w== - dependencies: - "@babel/code-frame" "^7.12.13" - "@jest/types" "^29.6.3" - "@types/stack-utils" "^2.0.0" - chalk "^4.0.0" - graceful-fs "^4.2.9" - micromatch "^4.0.4" - pretty-format "^29.7.0" - slash "^3.0.0" - stack-utils "^2.0.3" - jest-mock@30.2.0: version "30.2.0" resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-30.2.0.tgz#69f991614eeb4060189459d3584f710845bff45e" @@ -17521,15 +14621,6 @@ jest-mock@^27.0.6, jest-mock@^27.5.1: "@jest/types" "^27.5.1" "@types/node" "*" -jest-mock@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-29.7.0.tgz#4e836cf60e99c6fcfabe9f99d017f3fdd50a6347" - integrity sha512-ITOMZn+UkYS4ZFh83xYAOzWStloNzJFO2s8DWrE4lhtGD+AorgnbkiKERe4wQVBydIGPx059g6riW5Btp6Llnw== - dependencies: - "@jest/types" "^29.6.3" - "@types/node" "*" - jest-util "^29.7.0" - jest-pnp-resolver@^1.2.2: version "1.2.3" resolved "https://registry.yarnpkg.com/jest-pnp-resolver/-/jest-pnp-resolver-1.2.3.tgz#930b1546164d4ad5937d5540e711d4d38d4cad2e" @@ -17550,16 +14641,6 @@ jest-regex-util@^27.5.1: resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-27.5.1.tgz#4da143f7e9fd1e542d4aa69617b38e4a78365b95" integrity sha512-4bfKq2zie+x16okqDXjXn9ql2B0dScQu+vcwe4TvFVhkVyuWLqpZrZtXxLLWoXYgn0E87I6r6GRYHF7wFZBUvg== -jest-regex-util@^28.0.2: - version "28.0.2" - resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-28.0.2.tgz#afdc377a3b25fb6e80825adcf76c854e5bf47ead" - integrity sha512-4s0IgyNIy0y9FK+cjoVYoxamT7Zeo7MhzqRGx7YDYmaQn1wucY9rotiGkBzzcMXTtjrCAP/f7f+E0F7+fxPNdw== - -jest-regex-util@^29.6.3: - version "29.6.3" - resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-29.6.3.tgz#4a556d9c776af68e1c5f48194f4d0327d24e8a52" - integrity sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg== - jest-resolve-dependencies@^27.5.1: version "27.5.1" resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-27.5.1.tgz#d811ecc8305e731cc86dd79741ee98fed06f1da8" @@ -17569,14 +14650,6 @@ jest-resolve-dependencies@^27.5.1: jest-regex-util "^27.5.1" jest-snapshot "^27.5.1" -jest-resolve-dependencies@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-29.7.0.tgz#1b04f2c095f37fc776ff40803dc92921b1e88428" - integrity sha512-un0zD/6qxJ+S0et7WxeI3H5XSe9lTBBR7bOHCHXkKR6luG5mwDDlIzVQ0V5cZCuoTgEdcdwzTghYkTWfubi+nA== - dependencies: - jest-regex-util "^29.6.3" - jest-snapshot "^29.7.0" - jest-resolve@^27.5.1: version "27.5.1" resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-27.5.1.tgz#a2f1c5a0796ec18fe9eb1536ac3814c23617b384" @@ -17593,21 +14666,6 @@ jest-resolve@^27.5.1: resolve.exports "^1.1.0" slash "^3.0.0" -jest-resolve@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-29.7.0.tgz#64d6a8992dd26f635ab0c01e5eef4399c6bcbc30" - integrity sha512-IOVhZSrg+UvVAshDSDtHyFCCBUl/Q3AAJv8iZ6ZjnZ74xzvwuzLXid9IIIPgTnY62SJjfuupMKZsZQRsCvxEgA== - dependencies: - chalk "^4.0.0" - graceful-fs "^4.2.9" - jest-haste-map "^29.7.0" - jest-pnp-resolver "^1.2.2" - jest-util "^29.7.0" - jest-validate "^29.7.0" - resolve "^1.20.0" - resolve.exports "^2.0.0" - slash "^3.0.0" - jest-runner@^27.5.1: version "27.5.1" resolved "https://registry.yarnpkg.com/jest-runner/-/jest-runner-27.5.1.tgz#071b27c1fa30d90540805c5645a0ec167c7b62e5" @@ -17635,33 +14693,6 @@ jest-runner@^27.5.1: source-map-support "^0.5.6" throat "^6.0.1" -jest-runner@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/jest-runner/-/jest-runner-29.7.0.tgz#809af072d408a53dcfd2e849a4c976d3132f718e" - integrity sha512-fsc4N6cPCAahybGBfTRcq5wFR6fpLznMg47sY5aDpsoejOcVYFb07AHuSnR0liMcPTgBsA3ZJL6kFOjPdoNipQ== - dependencies: - "@jest/console" "^29.7.0" - "@jest/environment" "^29.7.0" - "@jest/test-result" "^29.7.0" - "@jest/transform" "^29.7.0" - "@jest/types" "^29.6.3" - "@types/node" "*" - chalk "^4.0.0" - emittery "^0.13.1" - graceful-fs "^4.2.9" - jest-docblock "^29.7.0" - jest-environment-node "^29.7.0" - jest-haste-map "^29.7.0" - jest-leak-detector "^29.7.0" - jest-message-util "^29.7.0" - jest-resolve "^29.7.0" - jest-runtime "^29.7.0" - jest-util "^29.7.0" - jest-watcher "^29.7.0" - jest-worker "^29.7.0" - p-limit "^3.1.0" - source-map-support "0.5.13" - jest-runtime@^27.5.1: version "27.5.1" resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-27.5.1.tgz#4896003d7a334f7e8e4a53ba93fb9bcd3db0a1af" @@ -17690,34 +14721,6 @@ jest-runtime@^27.5.1: slash "^3.0.0" strip-bom "^4.0.0" -jest-runtime@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-29.7.0.tgz#efecb3141cf7d3767a3a0cc8f7c9990587d3d817" - integrity sha512-gUnLjgwdGqW7B4LvOIkbKs9WGbn+QLqRQQ9juC6HndeDiezIwhDP+mhMwHWCEcfQ5RUXa6OPnFF8BJh5xegwwQ== - dependencies: - "@jest/environment" "^29.7.0" - "@jest/fake-timers" "^29.7.0" - "@jest/globals" "^29.7.0" - "@jest/source-map" "^29.6.3" - "@jest/test-result" "^29.7.0" - "@jest/transform" "^29.7.0" - "@jest/types" "^29.6.3" - "@types/node" "*" - chalk "^4.0.0" - cjs-module-lexer "^1.0.0" - collect-v8-coverage "^1.0.0" - glob "^7.1.3" - graceful-fs "^4.2.9" - jest-haste-map "^29.7.0" - jest-message-util "^29.7.0" - jest-mock "^29.7.0" - jest-regex-util "^29.6.3" - jest-resolve "^29.7.0" - jest-snapshot "^29.7.0" - jest-util "^29.7.0" - slash "^3.0.0" - strip-bom "^4.0.0" - jest-serializer@^26.6.2: version "26.6.2" resolved "https://registry.yarnpkg.com/jest-serializer/-/jest-serializer-26.6.2.tgz#d139aafd46957d3a448f3a6cdabe2919ba0742d1" @@ -17762,32 +14765,6 @@ jest-snapshot@^27.5.1: pretty-format "^27.5.1" semver "^7.3.2" -jest-snapshot@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-29.7.0.tgz#c2c574c3f51865da1bb329036778a69bf88a6be5" - integrity sha512-Rm0BMWtxBcioHr1/OX5YCP8Uov4riHvKPknOGs804Zg9JGZgmIBkbtlxJC/7Z4msKYVbIJtfU+tKb8xlYNfdkw== - dependencies: - "@babel/core" "^7.11.6" - "@babel/generator" "^7.7.2" - "@babel/plugin-syntax-jsx" "^7.7.2" - "@babel/plugin-syntax-typescript" "^7.7.2" - "@babel/types" "^7.3.3" - "@jest/expect-utils" "^29.7.0" - "@jest/transform" "^29.7.0" - "@jest/types" "^29.6.3" - babel-preset-current-node-syntax "^1.0.0" - chalk "^4.0.0" - expect "^29.7.0" - graceful-fs "^4.2.9" - jest-diff "^29.7.0" - jest-get-type "^29.6.3" - jest-matcher-utils "^29.7.0" - jest-message-util "^29.7.0" - jest-util "^29.7.0" - natural-compare "^1.4.0" - pretty-format "^29.7.0" - semver "^7.5.3" - jest-util@30.2.0: version "30.2.0" resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-30.2.0.tgz#5142adbcad6f4e53c2776c067a4db3c14f913705" @@ -17824,18 +14801,6 @@ jest-util@^27.0.0, jest-util@^27.5.1: graceful-fs "^4.2.9" picomatch "^2.2.3" -jest-util@^28.1.3: - version "28.1.3" - resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-28.1.3.tgz#f4f932aa0074f0679943220ff9cbba7e497028b0" - integrity sha512-XdqfpHwpcSRko/C35uLYFM2emRAltIIKZiJ9eAmhjsj0CqZMa0p1ib0R5fWIqGhn1a103DebTbpqIaP1qCQ6tQ== - dependencies: - "@jest/types" "^28.1.3" - "@types/node" "*" - chalk "^4.0.0" - ci-info "^3.2.0" - graceful-fs "^4.2.9" - picomatch "^2.2.3" - jest-util@^29.7.0: version "29.7.0" resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-29.7.0.tgz#23c2b62bfb22be82b44de98055802ff3710fc0bc" @@ -17860,18 +14825,6 @@ jest-validate@^27.5.1: leven "^3.1.0" pretty-format "^27.5.1" -jest-validate@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-29.7.0.tgz#7bf705511c64da591d46b15fce41400d52147d9c" - integrity sha512-ZB7wHqaRGVw/9hST/OuFUReG7M8vKeq0/J2egIGLdvjHCmYqGARhzXmtgi+gVeZ5uXFF219aOc3Ls2yLg27tkw== - dependencies: - "@jest/types" "^29.6.3" - camelcase "^6.2.0" - chalk "^4.0.0" - jest-get-type "^29.6.3" - leven "^3.1.0" - pretty-format "^29.7.0" - jest-watcher@^27.5.1: version "27.5.1" resolved "https://registry.yarnpkg.com/jest-watcher/-/jest-watcher-27.5.1.tgz#71bd85fb9bde3a2c2ec4dc353437971c43c642a2" @@ -17885,20 +14838,6 @@ jest-watcher@^27.5.1: jest-util "^27.5.1" string-length "^4.0.1" -jest-watcher@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/jest-watcher/-/jest-watcher-29.7.0.tgz#7810d30d619c3a62093223ce6bb359ca1b28a2f2" - integrity sha512-49Fg7WXkU3Vl2h6LbLtMQ/HyB6rXSIX7SqvBLQmssRBGN9I0PNvPmAmCWSOY6SOvrjhI/F7/bGAv9RtnsPA03g== - dependencies: - "@jest/test-result" "^29.7.0" - "@jest/types" "^29.6.3" - "@types/node" "*" - ansi-escapes "^4.2.1" - chalk "^4.0.0" - emittery "^0.13.1" - jest-util "^29.7.0" - string-length "^4.0.1" - jest-worker@^26.5.0, jest-worker@^26.6.2: version "26.6.2" resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-26.6.2.tgz#7f72cbc4d643c365e27b9fd775f9d0eaa9c7a8ed" @@ -17917,16 +14856,7 @@ jest-worker@^27.0.2, jest-worker@^27.4.5, jest-worker@^27.5.1: merge-stream "^2.0.0" supports-color "^8.0.0" -jest-worker@^28.1.3: - version "28.1.3" - resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-28.1.3.tgz#7e3c4ce3fa23d1bb6accb169e7f396f98ed4bb98" - integrity sha512-CqRA220YV/6jCo8VWvAt1KKx6eek1VIHMPeLEbpcfSfkEeWyBNppynM/o6q+Wmw+sOhos2ml34wZbSX3G13//g== - dependencies: - "@types/node" "*" - merge-stream "^2.0.0" - supports-color "^8.0.0" - -jest-worker@^29.4.3, jest-worker@^29.7.0: +jest-worker@^29.4.3: version "29.7.0" resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-29.7.0.tgz#acad073acbbaeb7262bd5389e1bcf43e10058d4a" integrity sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw== @@ -17945,16 +14875,6 @@ jest@^27.1.0: import-local "^3.0.2" jest-cli "^27.5.1" -jest@^29.5.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/jest/-/jest-29.7.0.tgz#994676fc24177f088f1c5e3737f5697204ff2613" - integrity sha512-NIy3oAFp9shda19hy4HK0HRTWKtPJmGdnvywu01nOqNC2vZg+Z+fvJDxpMQA88eb2I9EcafcdjYgsDthnYTvGw== - dependencies: - "@jest/core" "^29.7.0" - "@jest/types" "^29.6.3" - import-local "^3.0.2" - jest-cli "^29.7.0" - joi@^17.11.0: version "17.13.3" resolved "https://registry.yarnpkg.com/joi/-/joi-17.13.3.tgz#0f5cc1169c999b30d344366d384b12d92558bcec" @@ -18029,20 +14949,20 @@ jsdom@^16.6.0: ws "^7.4.6" xml-name-validator "^3.0.0" -jsdom@^27.0.0: - version "27.0.0" - resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-27.0.0.tgz#831fb76bcfde14b0d92aec1c2bfd8ea462f17eb9" - integrity sha512-lIHeR1qlIRrIN5VMccd8tI2Sgw6ieYXSVktcSHaNe3Z5nE/tcPQYQWOq00wxMvYOsz+73eAkNenVvmPC6bba9A== +jsdom@^27.0.1: + version "27.0.1" + resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-27.0.1.tgz#72f3ff263ccc128da40d8526943a7df253eeea93" + integrity sha512-SNSQteBL1IlV2zqhwwolaG9CwhIhTvVHWg3kTss/cLE7H/X4644mtPQqYvCfsSrGQWt9hSZcgOXX8bOZaMN+kA== dependencies: - "@asamuzakjp/dom-selector" "^6.5.4" - cssstyle "^5.3.0" + "@asamuzakjp/dom-selector" "^6.7.2" + cssstyle "^5.3.1" data-urls "^6.0.0" - decimal.js "^10.5.0" + decimal.js "^10.6.0" html-encoding-sniffer "^4.0.0" http-proxy-agent "^7.0.2" https-proxy-agent "^7.0.6" is-potential-custom-element-name "^1.0.1" - parse5 "^7.3.0" + parse5 "^8.0.0" rrweb-cssom "^0.8.0" saxes "^6.0.0" symbol-tree "^3.2.4" @@ -18051,15 +14971,10 @@ jsdom@^27.0.0: webidl-conversions "^8.0.0" whatwg-encoding "^3.1.1" whatwg-mimetype "^4.0.0" - whatwg-url "^15.0.0" - ws "^8.18.2" + whatwg-url "^15.1.0" + ws "^8.18.3" xml-name-validator "^5.0.0" -jsesc@^2.5.1: - version "2.5.2" - resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4" - integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA== - jsesc@^3.0.2, jsesc@~3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-3.1.0.tgz#74d335a234f67ed19907fdadfac7ccf9d409825d" @@ -18105,7 +15020,7 @@ json-stringify-safe@^5.0.1: resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" integrity sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA== -json5@2.x, json5@^2.1.0, json5@^2.1.2, json5@^2.2.1, json5@^2.2.2, json5@^2.2.3: +json5@2.x, json5@^2.1.0, json5@^2.1.2, json5@^2.2.2, json5@^2.2.3: version "2.2.3" resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.3.tgz#78cd6f1a19bdc12b73db5ad0c61efd66c1e29283" integrity sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg== @@ -18122,11 +15037,6 @@ jsonc-parser@3.2.0: resolved "https://registry.yarnpkg.com/jsonc-parser/-/jsonc-parser-3.2.0.tgz#31ff3f4c2b9793f89c67212627c51c6394f88e76" integrity sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w== -jsonc-parser@^3.0.0, jsonc-parser@^3.2.0: - version "3.3.1" - resolved "https://registry.yarnpkg.com/jsonc-parser/-/jsonc-parser-3.3.1.tgz#f2a524b4f7fd11e3d791e559977ad60b98b798b4" - integrity sha512-HUgH65KyejrUFPvHFPbqOY0rsFip3Bo5wb4ngvdi1EpCYWUQDC5V+Y7mZws+DLkr4M//zQJoanu1SP+87Dv1oQ== - jsonfile@^6.0.1: version "6.2.0" resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-6.2.0.tgz#7c265bd1b65de6977478300087c99f1c84383f62" @@ -18492,18 +15402,6 @@ libsodium-wrappers-sumo@^0.7.11: dependencies: libsodium-sumo "^0.7.15" -libsodium-wrappers@^0.7.6: - version "0.7.15" - resolved "https://registry.yarnpkg.com/libsodium-wrappers/-/libsodium-wrappers-0.7.15.tgz#53f13e483820272a3d55b23be2e34402ac988055" - integrity sha512-E4anqJQwcfiC6+Yrl01C1m8p99wEhLmJSs0VQqST66SbQXXBoaJY0pF4BNjRYa/sOQAxx6lXAaAFIlx+15tXJQ== - dependencies: - libsodium "^0.7.15" - -libsodium@^0.7.15: - version "0.7.15" - resolved "https://registry.yarnpkg.com/libsodium/-/libsodium-0.7.15.tgz#ac284e3dcb1c29ae9526c5581cdada6a072f6d20" - integrity sha512-sZwRknt/tUpE2AwzHq3jEyUU5uvIZHtSssktXq7owd++3CSgn8RGrv6UZJJBpP7+iBghBqe7Z06/2M31rI2NKw== - lie@3.1.1: version "3.1.1" resolved "https://registry.yarnpkg.com/lie/-/lie-3.1.1.tgz#9a436b2cc7746ca59de7a41fa469b3efb76bd87e" @@ -18511,80 +15409,6 @@ lie@3.1.1: dependencies: immediate "~3.0.5" -lightningcss-android-arm64@1.30.2: - version "1.30.2" - resolved "https://registry.yarnpkg.com/lightningcss-android-arm64/-/lightningcss-android-arm64-1.30.2.tgz#6966b7024d39c94994008b548b71ab360eb3a307" - integrity sha512-BH9sEdOCahSgmkVhBLeU7Hc9DWeZ1Eb6wNS6Da8igvUwAe0sqROHddIlvU06q3WyXVEOYDZ6ykBZQnjTbmo4+A== - -lightningcss-darwin-arm64@1.30.2: - version "1.30.2" - resolved "https://registry.yarnpkg.com/lightningcss-darwin-arm64/-/lightningcss-darwin-arm64-1.30.2.tgz#a5fa946d27c029e48c7ff929e6e724a7de46eb2c" - integrity sha512-ylTcDJBN3Hp21TdhRT5zBOIi73P6/W0qwvlFEk22fkdXchtNTOU4Qc37SkzV+EKYxLouZ6M4LG9NfZ1qkhhBWA== - -lightningcss-darwin-x64@1.30.2: - version "1.30.2" - resolved "https://registry.yarnpkg.com/lightningcss-darwin-x64/-/lightningcss-darwin-x64-1.30.2.tgz#5ce87e9cd7c4f2dcc1b713f5e8ee185c88d9b7cd" - integrity sha512-oBZgKchomuDYxr7ilwLcyms6BCyLn0z8J0+ZZmfpjwg9fRVZIR5/GMXd7r9RH94iDhld3UmSjBM6nXWM2TfZTQ== - -lightningcss-freebsd-x64@1.30.2: - version "1.30.2" - resolved "https://registry.yarnpkg.com/lightningcss-freebsd-x64/-/lightningcss-freebsd-x64-1.30.2.tgz#6ae1d5e773c97961df5cff57b851807ef33692a5" - integrity sha512-c2bH6xTrf4BDpK8MoGG4Bd6zAMZDAXS569UxCAGcA7IKbHNMlhGQ89eRmvpIUGfKWNVdbhSbkQaWhEoMGmGslA== - -lightningcss-linux-arm-gnueabihf@1.30.2: - version "1.30.2" - resolved "https://registry.yarnpkg.com/lightningcss-linux-arm-gnueabihf/-/lightningcss-linux-arm-gnueabihf-1.30.2.tgz#62c489610c0424151a6121fa99d77731536cdaeb" - integrity sha512-eVdpxh4wYcm0PofJIZVuYuLiqBIakQ9uFZmipf6LF/HRj5Bgm0eb3qL/mr1smyXIS1twwOxNWndd8z0E374hiA== - -lightningcss-linux-arm64-gnu@1.30.2: - version "1.30.2" - resolved "https://registry.yarnpkg.com/lightningcss-linux-arm64-gnu/-/lightningcss-linux-arm64-gnu-1.30.2.tgz#2a3661b56fe95a0cafae90be026fe0590d089298" - integrity sha512-UK65WJAbwIJbiBFXpxrbTNArtfuznvxAJw4Q2ZGlU8kPeDIWEX1dg3rn2veBVUylA2Ezg89ktszWbaQnxD/e3A== - -lightningcss-linux-arm64-musl@1.30.2: - version "1.30.2" - resolved "https://registry.yarnpkg.com/lightningcss-linux-arm64-musl/-/lightningcss-linux-arm64-musl-1.30.2.tgz#d7ddd6b26959245e026bc1ad9eb6aa983aa90e6b" - integrity sha512-5Vh9dGeblpTxWHpOx8iauV02popZDsCYMPIgiuw97OJ5uaDsL86cnqSFs5LZkG3ghHoX5isLgWzMs+eD1YzrnA== - -lightningcss-linux-x64-gnu@1.30.2: - version "1.30.2" - resolved "https://registry.yarnpkg.com/lightningcss-linux-x64-gnu/-/lightningcss-linux-x64-gnu-1.30.2.tgz#5a89814c8e63213a5965c3d166dff83c36152b1a" - integrity sha512-Cfd46gdmj1vQ+lR6VRTTadNHu6ALuw2pKR9lYq4FnhvgBc4zWY1EtZcAc6EffShbb1MFrIPfLDXD6Xprbnni4w== - -lightningcss-linux-x64-musl@1.30.2: - version "1.30.2" - resolved "https://registry.yarnpkg.com/lightningcss-linux-x64-musl/-/lightningcss-linux-x64-musl-1.30.2.tgz#808c2e91ce0bf5d0af0e867c6152e5378c049728" - integrity sha512-XJaLUUFXb6/QG2lGIW6aIk6jKdtjtcffUT0NKvIqhSBY3hh9Ch+1LCeH80dR9q9LBjG3ewbDjnumefsLsP6aiA== - -lightningcss-win32-arm64-msvc@1.30.2: - version "1.30.2" - resolved "https://registry.yarnpkg.com/lightningcss-win32-arm64-msvc/-/lightningcss-win32-arm64-msvc-1.30.2.tgz#ab4a8a8a2e6a82a4531e8bbb6bf0ff161ee6625a" - integrity sha512-FZn+vaj7zLv//D/192WFFVA0RgHawIcHqLX9xuWiQt7P0PtdFEVaxgF9rjM/IRYHQXNnk61/H/gb2Ei+kUQ4xQ== - -lightningcss-win32-x64-msvc@1.30.2: - version "1.30.2" - resolved "https://registry.yarnpkg.com/lightningcss-win32-x64-msvc/-/lightningcss-win32-x64-msvc-1.30.2.tgz#f01f382c8e0a27e1c018b0bee316d210eac43b6e" - integrity sha512-5g1yc73p+iAkid5phb4oVFMB45417DkRevRbt/El/gKXJk4jid+vPFF/AXbxn05Aky8PapwzZrdJShv5C0avjw== - -lightningcss@^1.30.1: - version "1.30.2" - resolved "https://registry.yarnpkg.com/lightningcss/-/lightningcss-1.30.2.tgz#4ade295f25d140f487d37256f4cd40dc607696d0" - integrity sha512-utfs7Pr5uJyyvDETitgsaqSyjCb2qNRAtuqUeWIAKztsOYdcACf2KtARYXg2pSvhkt+9NfoaNY7fxjl6nuMjIQ== - dependencies: - detect-libc "^2.0.3" - optionalDependencies: - lightningcss-android-arm64 "1.30.2" - lightningcss-darwin-arm64 "1.30.2" - lightningcss-darwin-x64 "1.30.2" - lightningcss-freebsd-x64 "1.30.2" - lightningcss-linux-arm-gnueabihf "1.30.2" - lightningcss-linux-arm64-gnu "1.30.2" - lightningcss-linux-arm64-musl "1.30.2" - lightningcss-linux-x64-gnu "1.30.2" - lightningcss-linux-x64-musl "1.30.2" - lightningcss-win32-arm64-msvc "1.30.2" - lightningcss-win32-x64-msvc "1.30.2" - lilconfig@^2.0.3: version "2.1.0" resolved "https://registry.yarnpkg.com/lilconfig/-/lilconfig-2.1.0.tgz#78e23ac89ebb7e1bfbf25b18043de756548e7f52" @@ -18605,24 +15429,6 @@ lines-and-columns@~2.0.3: resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-2.0.4.tgz#d00318855905d2660d8c0822e3f5a4715855fc42" integrity sha512-wM1+Z03eypVAVUCE7QdSqpVIvelbOakn1M0bPDoA4SGWPx3sNDVUiMo3L6To6WWGClB7VyXnhQ4Sn7gxiJbE6A== -lmdb@2.8.5: - version "2.8.5" - resolved "https://registry.yarnpkg.com/lmdb/-/lmdb-2.8.5.tgz#ce191110c755c0951caa062722e300c703973837" - integrity sha512-9bMdFfc80S+vSldBmG3HOuLVHnxRdNTlpzR6QDnzqCQtCzGUEAGTzBKYMeIM+I/sU4oZfgbcbS7X7F65/z/oxQ== - dependencies: - msgpackr "^1.9.5" - node-addon-api "^6.1.0" - node-gyp-build-optional-packages "5.1.1" - ordered-binary "^1.4.1" - weak-lru-cache "^1.2.2" - optionalDependencies: - "@lmdb/lmdb-darwin-arm64" "2.8.5" - "@lmdb/lmdb-darwin-x64" "2.8.5" - "@lmdb/lmdb-linux-arm" "2.8.5" - "@lmdb/lmdb-linux-arm64" "2.8.5" - "@lmdb/lmdb-linux-x64" "2.8.5" - "@lmdb/lmdb-win32-x64" "2.8.5" - load-json-file@6.2.0: version "6.2.0" resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-6.2.0.tgz#5c7770b42cafa97074ca2848707c61662f4251a1" @@ -18660,9 +15466,9 @@ loader-runner@^2.4.0: integrity sha512-Jsmr89RcXGIwivFY21FcRrisYZfvLMTWx5kOLc+JTxtpBOG6xML0vzbc6SEQG2FO9/4Fc3wW4LVcB5DmGflaRw== loader-runner@^4.1.0, loader-runner@^4.2.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/loader-runner/-/loader-runner-4.3.0.tgz#c1b4a163b99f614830353b16755e7149ac2314e1" - integrity sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg== + version "4.3.1" + resolved "https://registry.yarnpkg.com/loader-runner/-/loader-runner-4.3.1.tgz#6c76ed29b0ccce9af379208299f07f876de737e3" + integrity sha512-IWqP2SCPhyVFTBtRcgMHdzlf9ul25NwaFx4wCEH/KjAXuuHY4yNjvPXsBokp8jCB936PyWRaPKUNh8NvylLp2Q== loader-utils@^1.2.3: version "1.4.2" @@ -18761,11 +15567,6 @@ lodash.trimstart@^4.5.1: resolved "https://registry.yarnpkg.com/lodash.trimstart/-/lodash.trimstart-4.5.1.tgz#8ff4dec532d82486af59573c39445914e944a7f1" integrity sha512-b/+D6La8tU76L/61/aN0jULWHkT0EeJCmVstPBn/K9MtD2qBW83AsBNrr63dKuWYwVMO7ucv13QNO/Ek/2RKaQ== -lodash.truncate@^4.4.2: - version "4.4.2" - resolved "https://registry.yarnpkg.com/lodash.truncate/-/lodash.truncate-4.4.2.tgz#5a350da0b1113b837ecfffd5812cbe58d6eae193" - integrity sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw== - lodash.uniq@4.5.0, lodash.uniq@^4.5.0: version "4.5.0" resolved "https://registry.yarnpkg.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773" @@ -18776,7 +15577,7 @@ lodash.words@^4.2.0: resolved "https://registry.yarnpkg.com/lodash.words/-/lodash.words-4.2.0.tgz#5ecfeaf8ecf8acaa8e0c8386295f1993c9cf4036" integrity sha512-mXxqd8Yx9BGPij3lZKFSdOsjOTbL4krbCCp9slEozaN4EMppA2dFmK/f8HeohodprY6W0vOdiQ5WFgPaTI75xQ== -lodash@^4.17.12, lodash@^4.17.15, lodash@^4.17.19, lodash@^4.17.20, lodash@^4.17.21, lodash@^4.17.4, lodash@^4.3.0, lodash@^4.7.0: +lodash@^4.17.15, lodash@^4.17.19, lodash@^4.17.20, lodash@^4.17.21, lodash@^4.7.0: version "4.17.21" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== @@ -18794,11 +15595,6 @@ long@^4.0.0: resolved "https://registry.yarnpkg.com/long/-/long-4.0.0.tgz#9a7b71cfb7d361a194ea555241c92f7468d5bf28" integrity sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA== -long@^5.2.0: - version "5.3.2" - resolved "https://registry.yarnpkg.com/long/-/long-5.3.2.tgz#1d84463095999262d7d7b7f8bfd4a8cc55167f83" - integrity sha512-mNAgZ1GmyNhD7AuqnTG3/VQ26o760+ZYBPKjPvugO8+nLbYfX6TVpJPseBvopbdY+qpZ/lKUnmEc1LeZYS3QAA== - longest-streak@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/longest-streak/-/longest-streak-3.1.0.tgz#62fa67cd958742a1574af9f39866364102d90cd4" @@ -18860,56 +15656,16 @@ lru-cache@^7.4.4, lru-cache@^7.5.1, lru-cache@^7.7.1: resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-7.18.3.tgz#f793896e0fd0e954a59dfdd82f0773808df6aa89" integrity sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA== -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" - lucide-react@^0.453.0: version "0.453.0" resolved "https://registry.yarnpkg.com/lucide-react/-/lucide-react-0.453.0.tgz#d37909a45a29d89680383a202ee861224b05ba6a" integrity sha512-kL+RGZCcJi9BvJtzg2kshO192Ddy9hv3ij+cPrVPWSRzgCWCVazoQJxOjAwgK53NomL07HB7GPHW120FimjNhQ== -lunr@^2.3.9: - version "2.3.9" - resolved "https://registry.yarnpkg.com/lunr/-/lunr-2.3.9.tgz#18b123142832337dd6e964df1a5a7707b25d35e1" - integrity sha512-zTU3DaZaF3Rt9rhN3uBMGQD3dD2/vFQqnvZCDv4dl5iOzq2IZQqTxu90r4E5J+nP70J3ilqVCrbho2eWaeW8Ow== - lz-string@^1.5.0: version "1.5.0" resolved "https://registry.yarnpkg.com/lz-string/-/lz-string-1.5.0.tgz#c1ab50f77887b712621201ba9fd4e3a6ed099941" integrity sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ== -magic-string@0.25.2: - version "0.25.2" - resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.25.2.tgz#139c3a729515ec55e96e69e82a11fe890a293ad9" - integrity sha512-iLs9mPjh9IuTtRsqqhNGYcZXGei0Nh/A4xirrsqW7c+QhKVFL2vm7U09ru6cHRD22azaP/wMDgI+HCqbETMTtg== - dependencies: - sourcemap-codec "^1.4.4" - -magic-string@^0.25.3: - version "0.25.9" - resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.25.9.tgz#de7f9faf91ef8a1c91d02c2e5314c8277dbcdd1c" - integrity sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ== - dependencies: - sourcemap-codec "^1.4.8" - -magic-string@^0.27.0: - version "0.27.0" - resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.27.0.tgz#e4a3413b4bab6d98d2becffd48b4a257effdbbf3" - integrity sha512-8UnnX2PeRAPZuN12svgR9j7M1uWMovg/CEnIwIG0LFkXSJJe4PdfUGiTGl8V9bsBHFUtfVINcSyYxd7q+kx9fA== - dependencies: - "@jridgewell/sourcemap-codec" "^1.4.13" - -magic-string@^0.30.2, magic-string@^0.30.3: - version "0.30.19" - resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.30.19.tgz#cebe9f104e565602e5d2098c5f2e79a77cc86da9" - integrity sha512-2N21sPY9Ws53PZvsEpVtNuSW+ScYbQdp4b9qUaL+9QkHUrGFKo56Lg9Emg5s9V/qrtNBmiR01sYhUOwu3H+VOw== - dependencies: - "@jridgewell/sourcemap-codec" "^1.5.5" - make-dir@4.0.0, make-dir@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-4.0.0.tgz#c3c2307a771277cd9638305f915c29ae741b614e" @@ -18932,7 +15688,7 @@ make-dir@^3.0.0, make-dir@^3.0.2, make-dir@^3.1.0: dependencies: semver "^6.0.0" -make-error@1.x, make-error@^1.1.1, make-error@^1.3.6: +make-error@1.x: version "1.3.6" resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.6.tgz#2eb2e37ea9b67c4891f684a1394799af484cf7a2" integrity sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw== @@ -19026,11 +15782,6 @@ markdown-escapes@^1.0.0: resolved "https://registry.yarnpkg.com/markdown-escapes/-/markdown-escapes-1.0.4.tgz#c95415ef451499d7602b91095f3c8e8975f78535" integrity sha512-8z4efJYk43E0upd0NbVXwgSTQs6cT3T06etieCMEg7dRbzCbxUCK/GHlX8mhHRDcp+OLlHkPKsvqQTCvsRl2cg== -marked@^4.0.16, marked@^4.3.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/marked/-/marked-4.3.0.tgz#796362821b019f734054582038b116481b456cf3" - integrity sha512-PRsaiG84bK+AMvxziE/lCFss8juXjNaWzVbN5tXAm4XjeaS9NAHhop+PjQxz2A9h8Q4M/xGmzP8vqNwy6JeK0A== - material-react-table@^3.0.3: version "3.2.1" resolved "https://registry.yarnpkg.com/material-react-table/-/material-react-table-3.2.1.tgz#56f595755cab3b669b399999fed9eb305fbb6dd7" @@ -19245,20 +15996,6 @@ memfs@^3.1.2, memfs@^3.2.2, memfs@^3.4.1, memfs@^3.4.3: dependencies: fs-monkey "^1.0.4" -memoizee@^0.4.15: - version "0.4.17" - resolved "https://registry.yarnpkg.com/memoizee/-/memoizee-0.4.17.tgz#942a5f8acee281fa6fb9c620bddc57e3b7382949" - integrity sha512-DGqD7Hjpi/1or4F/aYAspXKNm5Yili0QDAFAY4QYvpqpgiY6+1jOfqpmByzjxbWd/T9mChbCArXAbDAsTm5oXA== - dependencies: - d "^1.0.2" - es5-ext "^0.10.64" - 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: version "1.11.3" resolved "https://registry.yarnpkg.com/memoizerific/-/memoizerific-1.11.3.tgz#7c87a4646444c32d75438570905f2dbd1b1a805a" @@ -19558,7 +16295,7 @@ micromatch@^3.1.10, micromatch@^3.1.4: snapdragon "^0.8.1" to-regex "^3.0.2" -micromatch@^4.0.0, micromatch@^4.0.2, micromatch@^4.0.4, micromatch@^4.0.5, micromatch@^4.0.8: +micromatch@^4.0.0, micromatch@^4.0.2, micromatch@^4.0.4, micromatch@^4.0.8: version "4.0.8" resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.8.tgz#d66fa18f3a47076789320b9b1af32bd86d9fa202" integrity sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA== @@ -19579,7 +16316,7 @@ mime-db@1.52.0: resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70" integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== -"mime-db@>= 1.43.0 < 2", mime-db@^1.54.0: +"mime-db@>= 1.43.0 < 2": version "1.54.0" resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.54.0.tgz#cddb3ee4f9c64530dff640236661d42cb6a314f5" integrity sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ== @@ -19591,13 +16328,6 @@ mime-types@^2.1.12, mime-types@^2.1.27, mime-types@^2.1.30, mime-types@^2.1.31, dependencies: mime-db "1.52.0" -mime-types@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-3.0.1.tgz#b1d94d6997a9b32fd69ebaed0db73de8acb519ce" - integrity sha512-xRc4oEhT6eaBpU1XF7AjpOFD+xQmXNB5OVKwp4tqCuBpHLS/ZbBDrc07mYTDqVMg6PfxUjjNp85O6Cd2Z/5HWA== - dependencies: - mime-db "^1.54.0" - mime@1.6.0: version "1.6.0" resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" @@ -19608,16 +16338,6 @@ mime@^2.4.4: resolved "https://registry.yarnpkg.com/mime/-/mime-2.6.0.tgz#a2a682a95cd4d0cb1d6257e28f83da7e35800367" integrity sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg== -mime@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/mime/-/mime-3.0.0.tgz#b374550dca3a0c18443b0c950a6a58f1931cf7a7" - integrity sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A== - -mimic-fn@^1.0.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-1.2.0.tgz#820c86a39334640e99516928bd03fca88057d022" - integrity sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ== - mimic-fn@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" @@ -19658,13 +16378,6 @@ minimalistic-crypto-utils@^1.0.1: resolved "https://registry.yarnpkg.com/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz#f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a" integrity sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg== -minimatch@*, minimatch@^10.0.3: - version "10.0.3" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-10.0.3.tgz#cf7a0314a16c4d9ab73a7730a0e8e3c3502d47aa" - integrity sha512-IPZ167aShDZZUMdRk66cyQAW3qr0WzbHkPdMYa8bzZhlHhO3jALbKdxcaak7W9FfT2rZNpQuUu4Od7ILEpXSaw== - dependencies: - "@isaacs/brace-expansion" "^5.0.0" - minimatch@3.0.5: version "3.0.5" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.5.tgz#4da8f1290ee0f0f8e83d60ca69f8f134068604a3" @@ -19672,6 +16385,13 @@ minimatch@3.0.5: dependencies: brace-expansion "^1.1.7" +minimatch@^10.0.3: + version "10.0.3" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-10.0.3.tgz#cf7a0314a16c4d9ab73a7730a0e8e3c3502d47aa" + integrity sha512-IPZ167aShDZZUMdRk66cyQAW3qr0WzbHkPdMYa8bzZhlHhO3jALbKdxcaak7W9FfT2rZNpQuUu4Od7ILEpXSaw== + dependencies: + "@isaacs/brace-expansion" "^5.0.0" + minimatch@^3.0.2, minimatch@^3.0.4, minimatch@^3.0.5, minimatch@^3.1.1, minimatch@^3.1.2: version "3.1.2" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" @@ -19679,7 +16399,7 @@ minimatch@^3.0.2, minimatch@^3.0.4, minimatch@^3.0.5, minimatch@^3.1.1, minimatc dependencies: brace-expansion "^1.1.7" -minimatch@^5.0.1, minimatch@^5.1.0, minimatch@^5.1.6: +minimatch@^5.0.1: version "5.1.6" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-5.1.6.tgz#1cfcb8cf5522ea69952cd2af95ae09477f122a96" integrity sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g== @@ -19709,12 +16429,7 @@ minimist-options@4.1.0: is-plain-obj "^1.1.0" kind-of "^6.0.3" -minimist@1.2.6: - version "1.2.6" - resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.6.tgz#8637a5b759ea0d6e98702cfb3a9283323c93af44" - integrity sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q== - -minimist@^1.1.1, minimist@^1.1.3, minimist@^1.2.0, minimist@^1.2.5, minimist@^1.2.6, minimist@~1.2.0: +minimist@^1.1.1, minimist@^1.1.3, minimist@^1.2.0, minimist@^1.2.5, minimist@^1.2.6: version "1.2.8" resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c" integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA== @@ -19831,11 +16546,6 @@ mixin-deep@^1.2.0: for-in "^1.0.2" is-extendable "^1.0.1" -mkdirp@1.0.4, mkdirp@^1.0.3, mkdirp@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e" - integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== - mkdirp@^0.5.1, mkdirp@^0.5.3: version "0.5.6" resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.6.tgz#7def03d2432dcae4ba1d611445c48396062255f6" @@ -19843,37 +16553,16 @@ mkdirp@^0.5.1, mkdirp@^0.5.3: dependencies: minimist "^1.2.6" +mkdirp@^1.0.3, mkdirp@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e" + integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== + mobx@^6.1.7: version "6.15.0" resolved "https://registry.yarnpkg.com/mobx/-/mobx-6.15.0.tgz#78b9b82d383724eebb4b6e50c2eb4ae2da861cb5" integrity sha512-UczzB+0nnwGotYSgllfARAqWCJ5e/skuV2K/l+Zyck/H6pJIhLXuBnz+6vn2i211o7DtbE78HQtsYEKICHGI+g== -mocha@^10.0.0: - version "10.8.2" - resolved "https://registry.yarnpkg.com/mocha/-/mocha-10.8.2.tgz#8d8342d016ed411b12a429eb731b825f961afb96" - integrity sha512-VZlYo/WE8t1tstuRmqgeyBgCbJc/lEdopaa+axcKzTBJ+UIdlAB9XnmvTCAH4pwR4ElNInaedhEBmZD8iCSVEg== - dependencies: - ansi-colors "^4.1.3" - browser-stdout "^1.3.1" - chokidar "^3.5.3" - debug "^4.3.5" - diff "^5.2.0" - escape-string-regexp "^4.0.0" - find-up "^5.0.0" - glob "^8.1.0" - he "^1.2.0" - js-yaml "^4.1.0" - log-symbols "^4.1.0" - minimatch "^5.1.6" - ms "^2.1.3" - serialize-javascript "^6.0.2" - strip-json-comments "^3.1.1" - supports-color "^8.1.1" - workerpool "^6.5.1" - yargs "^16.2.0" - yargs-parser "^20.2.9" - yargs-unparser "^2.0.0" - modern-ahocorasick@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/modern-ahocorasick/-/modern-ahocorasick-1.1.0.tgz#9b1fa15d4f654be20a2ad7ecc44ec9d7645bb420" @@ -19884,13 +16573,6 @@ modify-values@^1.0.1: resolved "https://registry.yarnpkg.com/modify-values/-/modify-values-1.0.1.tgz#b3939fa605546474e3e3e3c63d64bd43b4ee6022" integrity sha512-xV2bxeN6F7oYjZWTe/YPAy6MN2M+sL4u/Rlm2AHCIVGfo2p1yGmBHQ6vHehl4bRTZBdHu3TSkWdYgkwpYzAGSw== -moq.ts@^7.3.4: - version "7.4.1" - resolved "https://registry.yarnpkg.com/moq.ts/-/moq.ts-7.4.1.tgz#1bb7e808324dc5b0143fa8b1a94f539203d475cb" - integrity sha512-P97MjGUkkMKQrAHbNScyJvSv3S7pMxnuxd3HgaOrPuoC6okwPqru3ZX8W/mTdU7Ms74622MeeWHqoDaGyYKonw== - dependencies: - tslib "2.1.0" - move-concurrently@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/move-concurrently/-/move-concurrently-1.0.1.tgz#be2c005fda32e0b29af1f05d7c4b33214c701f92" @@ -19913,27 +16595,6 @@ ms@2.1.3, ms@^2.0.0, ms@^2.1.1, ms@^2.1.3, ms@~2.1.3: resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== -msgpackr-extract@^3.0.2: - version "3.0.3" - resolved "https://registry.yarnpkg.com/msgpackr-extract/-/msgpackr-extract-3.0.3.tgz#e9d87023de39ce714872f9e9504e3c1996d61012" - integrity sha512-P0efT1C9jIdVRefqjzOQ9Xml57zpOXnIuS+csaB4MdZbTdmGDLo8XhzBG1N7aO11gKDDkJvBLULeFTo46wwreA== - dependencies: - node-gyp-build-optional-packages "5.2.2" - optionalDependencies: - "@msgpackr-extract/msgpackr-extract-darwin-arm64" "3.0.3" - "@msgpackr-extract/msgpackr-extract-darwin-x64" "3.0.3" - "@msgpackr-extract/msgpackr-extract-linux-arm" "3.0.3" - "@msgpackr-extract/msgpackr-extract-linux-arm64" "3.0.3" - "@msgpackr-extract/msgpackr-extract-linux-x64" "3.0.3" - "@msgpackr-extract/msgpackr-extract-win32-x64" "3.0.3" - -msgpackr@^1.11.2, msgpackr@^1.9.5: - version "1.11.5" - resolved "https://registry.yarnpkg.com/msgpackr/-/msgpackr-1.11.5.tgz#edf0b9d9cb7d8ed6897dd0e42cfb865a2f4b602e" - integrity sha512-UjkUHN0yqp9RWKy0Lplhh+wlpdt9oQBYgULZOiFhV3VclSF1JnSQWZ5r9gORQlNYaUKQoR8itv7g7z1xDDuACA== - optionalDependencies: - msgpackr-extract "^3.0.2" - multicast-dns@^7.2.5: version "7.2.5" resolved "https://registry.yarnpkg.com/multicast-dns/-/multicast-dns-7.2.5.tgz#77eb46057f4d7adbd16d9290fa7299f6fa64cced" @@ -19953,11 +16614,6 @@ multimatch@5.0.0: arrify "^2.0.1" minimatch "^3.0.4" -mute-stream@0.0.7: - version "0.0.7" - resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.7.tgz#3075ce93bc21b8fab43e1bc4da7e8115ed1e7bab" - integrity sha512-r65nCZhrbXXb6dXOACihYApHw2Q6pV0M3V0PSxd74N0+D8nzAdEAITq2oAjA1jVnKI+tGvEBUpqiMh0+rW6zDQ== - mute-stream@0.0.8: version "0.0.8" resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.8.tgz#1630c42b2251ff81e2a283de96a5497ea92e5e0d" @@ -19968,15 +16624,6 @@ mute-stream@^1.0.0, mute-stream@~1.0.0: resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-1.0.0.tgz#e31bd9fe62f0aed23520aa4324ea6671531e013e" integrity sha512-avsJQhyd+680gKXyG/sQc0nXaC6rBkPOfyHYcFb9+hdkqQkR9bdnkJ0AMZhke0oesPqIO+mFFJ+IdBc7mst4IA== -mz@^2.7.0: - version "2.7.0" - resolved "https://registry.yarnpkg.com/mz/-/mz-2.7.0.tgz#95008057a56cafadc2bc63dde7f9ff6955948e32" - integrity sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q== - dependencies: - any-promise "^1.0.0" - object-assign "^4.0.1" - thenify-all "^1.0.0" - nan@^2.12.1, nan@^2.13.2: version "2.23.0" resolved "https://registry.yarnpkg.com/nan/-/nan-2.23.0.tgz#24aa4ddffcc37613a2d2935b97683c1ec96093c6" @@ -20010,9 +16657,9 @@ nanomatch@^1.2.9: to-regex "^3.0.1" napi-postinstall@^0.3.0: - version "0.3.3" - resolved "https://registry.yarnpkg.com/napi-postinstall/-/napi-postinstall-0.3.3.tgz#93d045c6b576803ead126711d3093995198c6eb9" - integrity sha512-uTp172LLXSxuSYHv/kou+f6KW3SMppU9ivthaVTXian9sOt3XM/zHYHpRZiLgQoxeWfYUnslNWQHF1+G71xcow== + version "0.3.4" + resolved "https://registry.yarnpkg.com/napi-postinstall/-/napi-postinstall-0.3.4.tgz#7af256d6588b5f8e952b9190965d6b019653bbb9" + integrity sha512-PHI5f1O0EP5xJ9gQmFGMS6IZcrVvTjpXjz7Na41gTE7eE2hK11lg04CECCYEEjdc17EV4DO+fkGEtt7TpTaTiQ== natural-compare-lite@^1.4.0: version "1.4.0" @@ -20044,11 +16691,6 @@ 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" integrity sha512-9iN1ka/9zmX1ZvLV9ewJYEk9h7RyRRtqdK0woXcqohu8EWIerfPUjYJPg0ULy0UqP7cslmdGc8xKDJcojlKiaw== -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== - next@^14.2.26: version "14.2.33" resolved "https://registry.yarnpkg.com/next/-/next-14.2.33.tgz#284bc3de43d9319b7b41d4b69ec9a0ff0905a9e3" @@ -20104,16 +16746,6 @@ node-addon-api@^3.2.1: resolved "https://registry.yarnpkg.com/node-addon-api/-/node-addon-api-3.2.1.tgz#81325e0a2117789c0128dab65e7e38f07ceba161" integrity sha512-mmcei9JghVNDYydghQmeDX8KoAm0FAiYyIcUt/N4nhyAipB17pllZQDOJD2fotxABnt4Mdz+dKTO7eftLg4d0A== -node-addon-api@^6.1.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/node-addon-api/-/node-addon-api-6.1.0.tgz#ac8470034e58e67d0c6f1204a18ae6995d9c0d76" - integrity sha512-+eawOlIgy680F0kBzPUNFhMZGtJ1YmqM6l4+Crf4IkImjYrO/mqPwRMh352g23uIaQKFItcQ64I7KMaJxHgAVA== - -node-addon-api@^7.0.0: - version "7.1.1" - resolved "https://registry.yarnpkg.com/node-addon-api/-/node-addon-api-7.1.1.tgz#1aba6693b0f255258a049d621329329322aad558" - integrity sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ== - node-dir@^0.1.10: version "0.1.17" resolved "https://registry.yarnpkg.com/node-dir/-/node-dir-0.1.17.tgz#5f5665d93351335caabef8f1c554516cf5f1e4e5" @@ -20121,11 +16753,6 @@ node-dir@^0.1.10: dependencies: minimatch "^3.0.2" -node-domexception@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/node-domexception/-/node-domexception-1.0.0.tgz#6888db46a1f71c0b76b3f7555016b63fe64766e5" - integrity sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ== - node-fetch-native@^1.6.4, node-fetch-native@^1.6.7: version "1.6.7" resolved "https://registry.yarnpkg.com/node-fetch-native/-/node-fetch-native-1.6.7.tgz#9d09ca63066cc48423211ed4caf5d70075d76a71" @@ -20145,34 +16772,11 @@ node-fetch@^2.6.1, node-fetch@^2.6.7, node-fetch@^2.7.0: dependencies: whatwg-url "^5.0.0" -node-fetch@^3.3.2: - version "3.3.2" - resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-3.3.2.tgz#d1e889bacdf733b4ff3b2b243eb7a12866a0b78b" - integrity sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA== - dependencies: - data-uri-to-buffer "^4.0.0" - fetch-blob "^3.1.4" - formdata-polyfill "^4.0.10" - node-forge@^1: version "1.3.1" resolved "https://registry.yarnpkg.com/node-forge/-/node-forge-1.3.1.tgz#be8da2af243b2417d5f646a770663a92b7e9ded3" integrity sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA== -node-gyp-build-optional-packages@5.1.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/node-gyp-build-optional-packages/-/node-gyp-build-optional-packages-5.1.1.tgz#52b143b9dd77b7669073cbfe39e3f4118bfc603c" - integrity sha512-+P72GAjVAbTxjjwUmwjVrqrdZROD4nf8KgpBoDxqXXTiYZZt/ud60dE5yvCSr9lRO8e8yv6kgJIC0K0PfZFVQw== - dependencies: - detect-libc "^2.0.1" - -node-gyp-build-optional-packages@5.2.2: - version "5.2.2" - resolved "https://registry.yarnpkg.com/node-gyp-build-optional-packages/-/node-gyp-build-optional-packages-5.2.2.tgz#522f50c2d53134d7f3a76cd7255de4ab6c96a3a4" - integrity sha512-s+w+rBWnpTMwSFbaE0UXsRlg7hU4FjekKU4eyAih5T8nJuNZT1nNsskXpxmeqSK9UzkBl6UgRlnKc8hz8IEqOw== - dependencies: - detect-libc "^2.0.1" - node-gyp-build@^4.3.0: version "4.8.4" resolved "https://registry.yarnpkg.com/node-gyp-build/-/node-gyp-build-4.8.4.tgz#8a70ee85464ae52327772a90d66c6077a900cfc8" @@ -20239,58 +16843,10 @@ node-mock-http@^1.0.2: resolved "https://registry.yarnpkg.com/node-mock-http/-/node-mock-http-1.0.3.tgz#4e55e093267a3b910cded7354389ce2d02c89e77" integrity sha512-jN8dK25fsfnMrVsEhluUTPkBFY+6ybu7jSB1n+ri/vOGjJxU8J9CZhpSGkHXSkFjtUhbmoncG/YG9ta5Ludqog== -node-releases@^2.0.21: - version "2.0.21" - resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.21.tgz#f59b018bc0048044be2d4c4c04e4c8b18160894c" - integrity sha512-5b0pgg78U3hwXkCM8Z9b2FJdPZlr9Psr9V2gQPESdGHqbntyFJKFW4r5TeWGFzafGY3hzs1JC62VEQMbl1JFkw== - -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: - version "2.0.22" - resolved "https://registry.yarnpkg.com/nodemon/-/nodemon-2.0.22.tgz#182c45c3a78da486f673d6c1702e00728daf5258" - integrity sha512-B8YqaKMmyuCO7BowF1Z1/mkPqLk6cs/l63Ojtd6otKjMx47Dq1utxfRxcavH1I7VSaL8n5BUaoutadnsX3AAVQ== - 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 "^5.7.1" - simple-update-notifier "^1.0.7" - supports-color "^5.5.0" - touch "^3.1.0" - undefsafe "^2.0.5" - -nodemon@~3.1.4: - version "3.1.10" - resolved "https://registry.yarnpkg.com/nodemon/-/nodemon-3.1.10.tgz#5015c5eb4fffcb24d98cf9454df14f4fecec9bc1" - integrity sha512-WDjw3pJ0/0jMFmyNDp3gvY2YizjLmmOUQo6DEBY+JgdvW/yQ9mEeSw6H5ythl5Ny2ytb7f9C2nIbjSxMNzbJXw== - dependencies: - chokidar "^3.5.2" - debug "^4" - 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" +node-releases@^2.0.26: + version "2.0.26" + resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.26.tgz#fdfa272f2718a1309489d18aef4ef5ba7f5dfb52" + integrity sha512-S2M9YimhSjBSvYnlr5/+umAnPHE++ODwt5e2Ij6FoX45HA/s4vHdkDx1eax2pAPeAOqu4s9b7ppahsyEFdVqQA== nopt@^6.0.0: version "6.0.0" @@ -20505,11 +17061,6 @@ nth-check@^2.0.1: dependencies: boolbase "^1.0.0" -nullthrows@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/nullthrows/-/nullthrows-1.1.1.tgz#7818258843856ae971eae4208ad7d7eb19a431b1" - integrity sha512-2vPPEi+Z7WqML2jZYddDIfy5Dqb0r2fze2zTxNNknZaFpVHU3mFB3R+DWeJWGVx0ecvttSGlJTI+WG+8Z4cDWw== - num2fraction@^1.2.2: version "1.2.2" resolved "https://registry.yarnpkg.com/num2fraction/-/num2fraction-1.2.2.tgz#6f682b6a027a4e9ddfa4564cd2589d1d4e669ede" @@ -20707,7 +17258,7 @@ on-exit-leak-free@^0.2.0: resolved "https://registry.yarnpkg.com/on-exit-leak-free/-/on-exit-leak-free-0.2.0.tgz#b39c9e3bf7690d890f4861558b0d7b90a442d209" integrity sha512-dqaz3u44QbRXQooZLTUKU41ZrzYrcvLISVgbrzbyCMxpmSLJvZ3ZamIJIZ29P6OhZIkNIQKosdeM6t1LYbA9hg== -on-finished@2.4.1, on-finished@^2.4.1: +on-finished@2.4.1: version "2.4.1" resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.4.1.tgz#58c8c44116e54845ad57f14ab10b03533184ac3f" integrity sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg== @@ -20726,13 +17277,6 @@ once@^1.3.0, once@^1.3.1, once@^1.4.0: dependencies: wrappy "1" -onetime@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/onetime/-/onetime-2.0.1.tgz#067428230fd67443b2794b22bba528b6867962d4" - integrity sha512-oyyPpiMaKARvvcgip+JV+7zci5L8D1W9RZIz2l1o08AM3pfspitVWnPt3mzHcBPp12oYMTy0pqrFs/C+m3EwsQ== - dependencies: - mimic-fn "^1.0.0" - onetime@^5.1.0, onetime@^5.1.2: version "5.1.2" resolved "https://registry.yarnpkg.com/onetime/-/onetime-5.1.2.tgz#d0e96ebb56b07476df1dd9c4806e5237985ca45e" @@ -20740,16 +17284,6 @@ onetime@^5.1.0, onetime@^5.1.2: dependencies: mimic-fn "^2.1.0" -open@^10.0.0: - version "10.2.0" - resolved "https://registry.yarnpkg.com/open/-/open-10.2.0.tgz#b9d855be007620e80b6fb05fac98141fe62db73c" - integrity sha512-YgBpdJHPyQ2UE5x+hlSXcnejzAvD0b22U2OuAP+8OnlJT+PjWPxtgmGqKKc+RgTM63U9gN0YzrYc71R2WT/hTA== - dependencies: - default-browser "^5.2.1" - define-lazy-prop "^3.0.0" - is-inside-container "^1.0.0" - wsl-utils "^0.1.0" - open@^7.0.3: version "7.4.2" resolved "https://registry.yarnpkg.com/open/-/open-7.4.2.tgz#b8147e26dcf3e426316c730089fd71edd29c2321" @@ -20779,7 +17313,7 @@ openapi-typescript-helpers@^0.0.15: resolved "https://registry.yarnpkg.com/openapi-typescript-helpers/-/openapi-typescript-helpers-0.0.15.tgz#96ffa762a5e01ef66a661b163d5f1109ed1967ed" integrity sha512-opyTPaunsklCBpTK8JGef6mfPhLSnyy5a0IN9vKtx3+4aExf+KxEqYwIy3hqkedXIB97u357uLMJsOnm3GVjsw== -optionator@^0.9.1, optionator@^0.9.3: +optionator@^0.9.3: version "0.9.4" resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.4.tgz#7ea1c1a5d91d764fb282139c88fe11e182a3a734" integrity sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g== @@ -20806,11 +17340,6 @@ ora@^5.4.1: strip-ansi "^6.0.0" wcwidth "^1.0.1" -ordered-binary@^1.4.1: - version "1.6.0" - resolved "https://registry.yarnpkg.com/ordered-binary/-/ordered-binary-1.6.0.tgz#9c490dadc0b1336ca6917d8d41dd474b8c0bff32" - integrity sha512-IQh2aMfMIDbPjI/8a3Edr+PiOpcsB7yo8NdW7aHWVaoR/pcDldunMvnnwbk/auPGqmKeAdxtZl7MHX/QmPwhvQ== - os-browserify@^0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/os-browserify/-/os-browserify-0.3.0.tgz#854373c7f5c2315914fc9bfc6bd8238fdda1ec27" @@ -20821,18 +17350,6 @@ os-homedir@^1.0.0: resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3" integrity sha512-B5JU3cabzk8c67mRRd3ECmROafjYMXbuzlwtqdM8IbS8ktlTix8aFGb2bAGKrSRIlnfKwovGUUr72JUPyOb6kQ== -os-tmpdir@~1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" - integrity sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g== - -ospec@3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/ospec/-/ospec-3.1.0.tgz#d36b8e10110f58f63a463df2390a7a73fe9579a8" - integrity sha512-+nGtjV3vlADp+UGfL51miAh/hB4awPBkQrArhcgG4trAaoA2gKt5bf9w0m9ch9zOr555cHWaCHZEDiBOkNZSxw== - dependencies: - glob "^7.1.3" - own-keys@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/own-keys/-/own-keys-1.0.1.tgz#e4006910a2bf913585289676eebd6f390cf51358" @@ -20887,7 +17404,7 @@ p-limit@^2.0.0, p-limit@^2.2.0: dependencies: p-try "^2.0.0" -p-limit@^3.0.2, p-limit@^3.1.0: +p-limit@^3.0.2: version "3.1.0" resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b" integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== @@ -21066,27 +17583,6 @@ param-case@^3.0.3, param-case@^3.0.4: dot-case "^3.0.4" tslib "^2.0.3" -parcel@^2.9.3: - version "2.16.0" - resolved "https://registry.yarnpkg.com/parcel/-/parcel-2.16.0.tgz#f5c65f1d56b6d4271939caf10df29ab911d140be" - integrity sha512-4sgnoYixTR6Qq6265tjmufXQj7wxvZo4VJHrYfbnfWQWfW5CgF80IiM+dy050pYgtBAMvh+8vJDDYiSto1YPUA== - dependencies: - "@parcel/config-default" "2.16.0" - "@parcel/core" "2.16.0" - "@parcel/diagnostic" "2.16.0" - "@parcel/events" "2.16.0" - "@parcel/feature-flags" "2.16.0" - "@parcel/fs" "2.16.0" - "@parcel/logger" "2.16.0" - "@parcel/package-manager" "2.16.0" - "@parcel/reporter-cli" "2.16.0" - "@parcel/reporter-dev-server" "2.16.0" - "@parcel/reporter-tracer" "2.16.0" - "@parcel/utils" "2.16.0" - chalk "^4.1.2" - commander "^12.1.0" - get-port "^4.2.0" - parent-module@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2" @@ -21162,11 +17658,6 @@ parse-json@^5.0.0, parse-json@^5.2.0: json-parse-even-better-errors "^2.3.0" lines-and-columns "^1.1.6" -parse-package-name@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/parse-package-name/-/parse-package-name-1.0.0.tgz#1a108757e4ffc6889d5e78bcc4932a97c097a5a7" - integrity sha512-kBeTUtcj+SkyfaW4+KBe0HtsloBJ/mKTPoxpVdA57GZiPerREsUWJOhVj9anXweFiJkm5y8FG1sxFZkZ0SN6wg== - parse-path@^7.0.0: version "7.1.0" resolved "https://registry.yarnpkg.com/parse-path/-/parse-path-7.1.0.tgz#41fb513cb122831807a4c7b29c8727947a09d8c6" @@ -21186,14 +17677,14 @@ parse5@6.0.1, parse5@^6.0.0, parse5@^6.0.1: resolved "https://registry.yarnpkg.com/parse5/-/parse5-6.0.1.tgz#e1a1c085c569b3dc08321184f19a39cc27f7c30b" integrity sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw== -parse5@^7.3.0: - version "7.3.0" - resolved "https://registry.yarnpkg.com/parse5/-/parse5-7.3.0.tgz#d7e224fa72399c7a175099f45fc2ad024b05ec05" - integrity sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw== +parse5@^8.0.0: + version "8.0.0" + resolved "https://registry.yarnpkg.com/parse5/-/parse5-8.0.0.tgz#aceb267f6b15f9b6e6ba9e35bfdd481fc2167b12" + integrity sha512-9m4m5GSgXjL4AjumKzq1Fgfp3Z8rsvjRNbnkVwfu2ImRqE5D0LnY2QfDen18FSY9C573YU5XxSapdHZTZ2WolA== dependencies: entities "^6.0.0" -parseurl@^1.3.3, parseurl@~1.3.2, parseurl@~1.3.3: +parseurl@~1.3.2, parseurl@~1.3.3: version "1.3.3" resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4" integrity sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ== @@ -21337,7 +17828,7 @@ picocolors@^1.0.0, picocolors@^1.1.1: resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.1.1.tgz#3d321af3eab939b083c8f929a1d12cda81c26b6b" integrity sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA== -picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.2.2, picomatch@^2.2.3, picomatch@^2.3.0, picomatch@^2.3.1: +picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.2.3, picomatch@^2.3.0, picomatch@^2.3.1: version "2.3.1" resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== @@ -22007,7 +18498,7 @@ prettier-linter-helpers@^1.0.0: resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.3.0.tgz#b6a5bf1284026ae640f17f7ff5658a7567fc0d18" integrity sha512-kXtO4s0Lz/DW/IJ9QdWhAf7/NmPWQXkFr/r/WkR3vyI+0v8amTDxiaQSLzs8NBlytfLWX/7uQUMIW677yLKl4w== -prettier@^2.6.2, prettier@^2.8.7: +prettier@^2.8.7: version "2.8.8" resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.8.8.tgz#e8c5d7e98a4305ffe3de2e1fc4aca1a71c28b1da" integrity sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q== @@ -22046,16 +18537,6 @@ pretty-format@^27.0.0, pretty-format@^27.0.2, pretty-format@^27.5.1: ansi-styles "^5.0.0" react-is "^17.0.1" -pretty-format@^28.1.3: - version "28.1.3" - resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-28.1.3.tgz#c9fba8cedf99ce50963a11b27d982a9ae90970d5" - integrity sha512-8gFb/To0OmxHR9+ZTb14Df2vNxdGCX8g1xWGUTqUw5TiZvcQf5sHKObd5UcPyLLyowNwDAMTF3XWOG1B6mxl1Q== - dependencies: - "@jest/schemas" "^28.1.3" - ansi-regex "^5.0.1" - ansi-styles "^5.0.0" - react-is "^18.0.0" - pretty-format@^29.7.0: version "29.7.0" resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-29.7.0.tgz#ca42c758310f365bfa71a0bda0a807160b776812" @@ -22090,11 +18571,6 @@ process@^0.11.10: resolved "https://registry.yarnpkg.com/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182" integrity sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A== -progress@^2.0.0: - version "2.0.3" - resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8" - integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA== - promise-inflight@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/promise-inflight/-/promise-inflight-1.0.1.tgz#98472870bf228132fcbdd868129bad12c3c029e3" @@ -22177,7 +18653,7 @@ property-information@^7.0.0: resolved "https://registry.yarnpkg.com/property-information/-/property-information-7.1.0.tgz#b622e8646e02b580205415586b40804d3e8bfd5d" integrity sha512-TwEZ+X+yCJmYfL7TPUOcvBZ4QfoT5YenQiJuX//0th53DE6w0xxLEtfK3iyryQFddXuvkIk51EEgrJQ0WJkOmQ== -protobufjs@^6.11.2, protobufjs@^6.8.8, protobufjs@~6.11.2, protobufjs@~6.11.3: +protobufjs@^6.11.2, protobufjs@^6.8.8: version "6.11.4" resolved "https://registry.yarnpkg.com/protobufjs/-/protobufjs-6.11.4.tgz#29a412c38bf70d89e537b6d02d904a6f448173aa" integrity sha512-5kQWPaJHi1WoCpjTGszzQ32PG2F4+wRY6BmAT4Vfw56Q2FZ4YZzK20xUYQH4YkfehY1e6QSICrJquM6xXZNcrw== @@ -22226,11 +18702,6 @@ psl@^1.1.33: dependencies: punycode "^2.3.1" -pstree.remy@^1.1.8: - version "1.1.8" - resolved "https://registry.yarnpkg.com/pstree.remy/-/pstree.remy-1.1.8.tgz#c242224f4a67c21f686839bbdb4ac282b8373d3a" - integrity sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w== - public-encrypt@^4.0.3: version "4.0.3" resolved "https://registry.yarnpkg.com/public-encrypt/-/public-encrypt-4.0.3.tgz#4fcc9d77a07e48ba7527e7cbe0de33d0701331e0" @@ -22278,11 +18749,6 @@ punycode@^2.1.0, punycode@^2.1.1, punycode@^2.3.1: resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.3.1.tgz#027422e2faec0b25e1549c3e1bd8309b9133b6e5" integrity sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg== -pure-rand@^6.0.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/pure-rand/-/pure-rand-6.1.0.tgz#d173cf23258231976ccbdb05247c9787957604f2" - integrity sha512-bVWawvoZoBYpp6yIoQtQXHZjmz35RSVHnUOTefl8Vcjr8snTPY1wnpSPMWekcFwbxI6gtmT7rSYPFvz71ldiOA== - qr.js@0.0.0: version "0.0.0" resolved "https://registry.yarnpkg.com/qr.js/-/qr.js-0.0.0.tgz#cace86386f59a0db8050fa90d9b6b0e88a1e364f" @@ -22351,11 +18817,6 @@ rainbow-sprinkles@^0.17.3: resolved "https://registry.yarnpkg.com/rainbow-sprinkles/-/rainbow-sprinkles-0.17.3.tgz#0b4a712a6b06247728e2ae6ac8d4805fdc530e3b" integrity sha512-tu00bbDozceDz/ajL8YzDn5L0mf0uVHR93v2tfGKKbemKeuPk8R4mXUokleKsA24vzrPiw26iMK53HdRy6HLag== -rambda@^7.4.0: - version "7.5.0" - resolved "https://registry.yarnpkg.com/rambda/-/rambda-7.5.0.tgz#1865044c59bc0b16f63026c6e5a97e4b1bbe98fe" - integrity sha512-y/M9weqWAH4iopRd7EHDEQQvpFPHj1AA3oHozE9tfITHUtTR7Z9PSlIRRG2l1GuW7sefC1cXFfIcF+cgnShdBA== - ramda@^0.26.1: version "0.26.1" resolved "https://registry.yarnpkg.com/ramda/-/ramda-0.26.1.tgz#8d41351eb8111c55353617fc3bbffad8e4d35d06" @@ -22405,52 +18866,52 @@ raw-loader@^4.0.2: schema-utils "^3.0.0" react-aria@^3.34.3: - version "3.43.2" - resolved "https://registry.yarnpkg.com/react-aria/-/react-aria-3.43.2.tgz#cbe883341378e37cfbb34a070e032e048d3ed7e2" - integrity sha512-CfaXi3S69SeOkpp6pGc1w5FH8OvGPFphiMrO2tNSlqpYIecgk3gKoXjkqaAr6N+O1gasLMfAAF9sxtvS141qWg== + version "3.44.0" + resolved "https://registry.yarnpkg.com/react-aria/-/react-aria-3.44.0.tgz#6b694c704c0d438feb1baad23ab32cc7e8edb68f" + integrity sha512-2Pq3GQxBgM4/2BlpKYXeaZ47a3tdIcYSW/AYvKgypE3XipxOdQMDG5Sr/NBn7zuJq+thzmtfRb0lB9bTbsmaRw== dependencies: "@internationalized/string" "^3.2.7" - "@react-aria/breadcrumbs" "^3.5.28" - "@react-aria/button" "^3.14.1" - "@react-aria/calendar" "^3.9.1" - "@react-aria/checkbox" "^3.16.1" - "@react-aria/color" "^3.1.1" - "@react-aria/combobox" "^3.13.2" - "@react-aria/datepicker" "^3.15.1" - "@react-aria/dialog" "^3.5.30" - "@react-aria/disclosure" "^3.0.8" - "@react-aria/dnd" "^3.11.2" - "@react-aria/focus" "^3.21.1" - "@react-aria/gridlist" "^3.14.0" - "@react-aria/i18n" "^3.12.12" - "@react-aria/interactions" "^3.25.5" - "@react-aria/label" "^3.7.21" - "@react-aria/landmark" "^3.0.6" - "@react-aria/link" "^3.8.5" - "@react-aria/listbox" "^3.14.8" - "@react-aria/menu" "^3.19.2" - "@react-aria/meter" "^3.4.26" - "@react-aria/numberfield" "^3.12.1" - "@react-aria/overlays" "^3.29.1" - "@react-aria/progress" "^3.4.26" - "@react-aria/radio" "^3.12.1" - "@react-aria/searchfield" "^3.8.8" - "@react-aria/select" "^3.16.2" - "@react-aria/selection" "^3.25.1" - "@react-aria/separator" "^3.4.12" - "@react-aria/slider" "^3.8.1" + "@react-aria/breadcrumbs" "^3.5.29" + "@react-aria/button" "^3.14.2" + "@react-aria/calendar" "^3.9.2" + "@react-aria/checkbox" "^3.16.2" + "@react-aria/color" "^3.1.2" + "@react-aria/combobox" "^3.14.0" + "@react-aria/datepicker" "^3.15.2" + "@react-aria/dialog" "^3.5.31" + "@react-aria/disclosure" "^3.1.0" + "@react-aria/dnd" "^3.11.3" + "@react-aria/focus" "^3.21.2" + "@react-aria/gridlist" "^3.14.1" + "@react-aria/i18n" "^3.12.13" + "@react-aria/interactions" "^3.25.6" + "@react-aria/label" "^3.7.22" + "@react-aria/landmark" "^3.0.7" + "@react-aria/link" "^3.8.6" + "@react-aria/listbox" "^3.15.0" + "@react-aria/menu" "^3.19.3" + "@react-aria/meter" "^3.4.27" + "@react-aria/numberfield" "^3.12.2" + "@react-aria/overlays" "^3.30.0" + "@react-aria/progress" "^3.4.27" + "@react-aria/radio" "^3.12.2" + "@react-aria/searchfield" "^3.8.9" + "@react-aria/select" "^3.17.0" + "@react-aria/selection" "^3.26.0" + "@react-aria/separator" "^3.4.13" + "@react-aria/slider" "^3.8.2" "@react-aria/ssr" "^3.9.10" - "@react-aria/switch" "^3.7.7" - "@react-aria/table" "^3.17.7" - "@react-aria/tabs" "^3.10.7" - "@react-aria/tag" "^3.7.1" - "@react-aria/textfield" "^3.18.1" - "@react-aria/toast" "^3.0.7" - "@react-aria/tooltip" "^3.8.7" - "@react-aria/tree" "^3.1.3" - "@react-aria/utils" "^3.30.1" - "@react-aria/visually-hidden" "^3.8.27" - "@react-types/shared" "^3.32.0" + "@react-aria/switch" "^3.7.8" + "@react-aria/table" "^3.17.8" + "@react-aria/tabs" "^3.10.8" + "@react-aria/tag" "^3.7.2" + "@react-aria/textfield" "^3.18.2" + "@react-aria/toast" "^3.0.8" + "@react-aria/tooltip" "^3.8.8" + "@react-aria/tree" "^3.1.4" + "@react-aria/utils" "^3.31.0" + "@react-aria/visually-hidden" "^3.8.28" + "@react-types/shared" "^3.32.1" react-docgen-typescript@^2.1.1: version "2.4.0" @@ -22481,24 +18942,6 @@ react-dom@^18.0.0, react-dom@^18.2.0: loose-envify "^1.1.0" scheduler "^0.23.2" -react-dropzone@^10.2.1: - version "10.2.2" - resolved "https://registry.yarnpkg.com/react-dropzone/-/react-dropzone-10.2.2.tgz#67b4db7459589a42c3b891a82eaf9ade7650b815" - integrity sha512-U5EKckXVt6IrEyhMMsgmHQiWTGLudhajPPG77KFSvgsMqNEHSyGpqWvOMc5+DhEah/vH4E1n+J5weBNLd5VtyA== - dependencies: - attr-accept "^2.0.0" - file-selector "^0.1.12" - prop-types "^15.7.2" - -react-dropzone@^14.2.3: - version "14.3.8" - resolved "https://registry.yarnpkg.com/react-dropzone/-/react-dropzone-14.3.8.tgz#a7eab118f8a452fe3f8b162d64454e81ba830582" - integrity sha512-sBgODnq+lcA4P296DY4wacOZz3JFpD99fp+hb//iBO2HHnyeZU3FwWyXJ6salNpqQdsZrgMrotuko/BdJMV8Ug== - dependencies: - attr-accept "^2.2.4" - file-selector "^2.1.0" - prop-types "^15.8.1" - react-element-to-jsx-string@^14.3.4: version "14.3.4" resolved "https://registry.yarnpkg.com/react-element-to-jsx-string/-/react-element-to-jsx-string-14.3.4.tgz#709125bc72f06800b68f9f4db485f2c7d31218a8" @@ -22516,9 +18959,9 @@ react-error-boundary@^3.1.3: "@babel/runtime" "^7.12.5" react-hook-form@^7.14.2: - version "7.63.0" - resolved "https://registry.yarnpkg.com/react-hook-form/-/react-hook-form-7.63.0.tgz#ff601754989bdd5cfc19fcbb02a3c0d4fbb29284" - integrity sha512-ZwueDMvUeucovM2VjkCf7zIHcs1aAlDimZu2Hvel5C5907gUzMpm4xCrQXtRzCvsBqFjonB4m3x4LzCFI1ZKWA== + version "7.65.0" + resolved "https://registry.yarnpkg.com/react-hook-form/-/react-hook-form-7.65.0.tgz#6139dac77ed1081d0178b6830dc6f5ff6ff86361" + integrity sha512-xtOzDz063WcXvGWaHgLNrNzlsdFgtUWcb32E6WFaGTd7kPZG3EeDusjdZfUsPwKCKVXy1ZlntifaHZ4l8pAsmw== react-i18next@^15.4.0: version "15.7.4" @@ -22579,24 +19022,15 @@ react-merge-refs@^1.0.0: resolved "https://registry.yarnpkg.com/react-merge-refs/-/react-merge-refs-1.1.0.tgz#73d88b892c6c68cbb7a66e0800faa374f4c38b06" integrity sha512-alTKsjEL0dKH/ru1Iyn7vliS2QRcBp9zZPGoWxUOvRGWPUYgjo+V01is7p04It6KhgrzhJGnIj9GgX8W4bZoCQ== -react-mui-dropzone@^4.0.6: - version "4.0.7" - resolved "https://registry.yarnpkg.com/react-mui-dropzone/-/react-mui-dropzone-4.0.7.tgz#85221fe36844d799d30a33466f99fe4b5ffc8274" - integrity sha512-9OPZZ9CxHq+rTZf8aKLDZPaGzWDhAUZ9+6aIUE8ub5fgcXFqXkHuI8GsUPRaIF7WXPaa79HFz00/Xd5ev8I5Kg== - dependencies: - "@babel/runtime" "^7.4.4" - clsx "^1.0.2" - react-dropzone "^10.2.1" - react-random-avatars@^1.3.1: version "1.3.1" resolved "https://registry.yarnpkg.com/react-random-avatars/-/react-random-avatars-1.3.1.tgz#cfea11dd80262939656e4134438fa76eb2d95371" integrity sha512-HyMGoWniK2D5CRthoA1he4c6LVFIX/yBjp4qarEXN/DsgJ+1R6M5gJwYhTBoATO+3itrGCAGnKZNqimG1sDjAA== -react-refresh-typescript@^2.0.2, react-refresh-typescript@^2.0.3: - version "2.0.10" - resolved "https://registry.yarnpkg.com/react-refresh-typescript/-/react-refresh-typescript-2.0.10.tgz#8dfe40d2a51866926d97fb7150d139e70d649eb2" - integrity sha512-Cj8ZKTPEEdSoxiopFq0tB0rq/Wl90yWzAX1LEp9CGvzvauDUmC4BHIQXzcuT8/61naq/KmkR3A9VzqdZ9c6j1g== +react-refresh-typescript@^2.0.2: + version "2.0.11" + resolved "https://registry.yarnpkg.com/react-refresh-typescript/-/react-refresh-typescript-2.0.11.tgz#85496b9b9e52d26f90aa226f81cd7bb6288af6b3" + integrity sha512-u6afET6t6NDNcxD67wSVlgazX/CiRuC7qSqALZueMckjmPQnOBajmwibJr2TTU6MtttDNPjBhD8K3AB8i0opJg== react-refresh@^0.10.0: version "0.10.0" @@ -22608,11 +19042,6 @@ react-refresh@^0.11.0: resolved "https://registry.yarnpkg.com/react-refresh/-/react-refresh-0.11.0.tgz#77198b944733f0f1f1a90e791de4541f9f074046" integrity sha512-F27qZr8uUqwhWZboondsPx8tnC3Ct3SxZA3V5WyEvujRyyNv0VYPhoBg1gZ8/MV5tubQp76Trw8lTv9hzRBa+A== -react-refresh@^0.16.0: - version "0.16.0" - resolved "https://registry.yarnpkg.com/react-refresh/-/react-refresh-0.16.0.tgz#e7d45625f05c9709466d09348a25d22f79b2ad23" - integrity sha512-FPvF2XxTSikpJxcr+bHut2H4gJ17+18Uy20D5/F+SKzFap62R3cM5wH6b8WN3LyGSYeQilLEcJcR1fjBSI2S1A== - react-router-dom@6: version "6.30.1" resolved "https://registry.yarnpkg.com/react-router-dom/-/react-router-dom-6.30.1.tgz#da2580c272ddb61325e435478566be9563a4a237" @@ -22638,36 +19067,36 @@ react-smooth@^4.0.4: react-transition-group "^4.4.5" react-stately@^3.32.2: - version "3.41.0" - resolved "https://registry.yarnpkg.com/react-stately/-/react-stately-3.41.0.tgz#e8239f520cf2cbaa037c0fd9ddf274a9a6bcb3bd" - integrity sha512-Fe8PaZPm9Ue9kDXVa8KaOz6gzbmZPuzftxeVQwKVX3u/kyFhbRkr/LeAFvgP7a+EeX+Bjmdht/9ixDsBXj4qbQ== + version "3.42.0" + resolved "https://registry.yarnpkg.com/react-stately/-/react-stately-3.42.0.tgz#f309e9cb729374cc187c688529a2aa0572ab9408" + integrity sha512-lYt2o1dd6dK8Bb4GRh08RG/2u64bSA1cqtRqtw4jEMgxC7Q17RFcIumBbChErndSdLzafEG/UBwV6shOfig6yw== dependencies: - "@react-stately/calendar" "^3.8.4" - "@react-stately/checkbox" "^3.7.1" - "@react-stately/collections" "^3.12.7" - "@react-stately/color" "^3.9.1" - "@react-stately/combobox" "^3.11.1" - "@react-stately/data" "^3.14.0" - "@react-stately/datepicker" "^3.15.1" - "@react-stately/disclosure" "^3.0.7" - "@react-stately/dnd" "^3.7.0" - "@react-stately/form" "^3.2.1" - "@react-stately/list" "^3.13.0" - "@react-stately/menu" "^3.9.7" - "@react-stately/numberfield" "^3.10.1" - "@react-stately/overlays" "^3.6.19" - "@react-stately/radio" "^3.11.1" - "@react-stately/searchfield" "^3.5.15" - "@react-stately/select" "^3.7.1" - "@react-stately/selection" "^3.20.5" - "@react-stately/slider" "^3.7.1" - "@react-stately/table" "^3.15.0" - "@react-stately/tabs" "^3.8.5" + "@react-stately/calendar" "^3.9.0" + "@react-stately/checkbox" "^3.7.2" + "@react-stately/collections" "^3.12.8" + "@react-stately/color" "^3.9.2" + "@react-stately/combobox" "^3.12.0" + "@react-stately/data" "^3.14.1" + "@react-stately/datepicker" "^3.15.2" + "@react-stately/disclosure" "^3.0.8" + "@react-stately/dnd" "^3.7.1" + "@react-stately/form" "^3.2.2" + "@react-stately/list" "^3.13.1" + "@react-stately/menu" "^3.9.8" + "@react-stately/numberfield" "^3.10.2" + "@react-stately/overlays" "^3.6.20" + "@react-stately/radio" "^3.11.2" + "@react-stately/searchfield" "^3.5.16" + "@react-stately/select" "^3.8.0" + "@react-stately/selection" "^3.20.6" + "@react-stately/slider" "^3.7.2" + "@react-stately/table" "^3.15.1" + "@react-stately/tabs" "^3.8.6" "@react-stately/toast" "^3.1.2" - "@react-stately/toggle" "^3.9.1" - "@react-stately/tooltip" "^3.5.7" - "@react-stately/tree" "^3.9.2" - "@react-types/shared" "^3.32.0" + "@react-stately/toggle" "^3.9.2" + "@react-stately/tooltip" "^3.5.8" + "@react-stately/tree" "^3.9.3" + "@react-types/shared" "^3.32.1" react-transition-group@^4.4.5: version "4.4.5" @@ -22838,15 +19267,6 @@ real-require@^0.1.0: resolved "https://registry.yarnpkg.com/real-require/-/real-require-0.1.0.tgz#736ac214caa20632847b7ca8c1056a0767df9381" integrity sha512-r/H9MzAWtrv8aSVjPCMFpDMl5q66GqtmmRkRjpHTsp4zBAa+snZyiQNlMONiUmEJcsnaw0wCauJ2GWODr/aFkg== -realistic-structured-clone@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/realistic-structured-clone/-/realistic-structured-clone-3.0.0.tgz#7b518049ce2dad41ac32b421cd297075b00e3e35" - integrity sha512-rOjh4nuWkAqf9PWu6JVpOWD4ndI+JHfgiZeMmujYcPi+fvILUu7g6l26TC1K5aBIp34nV+jE1cDO75EKOfHC5Q== - dependencies: - domexception "^1.0.1" - typeson "^6.1.0" - typeson-registry "^1.0.0-alpha.20" - recharts-scale@^0.4.4: version "0.4.5" resolved "https://registry.yarnpkg.com/recharts-scale/-/recharts-scale-0.4.5.tgz#0969271f14e732e642fcc5bd4ab270d6e87dd1d9" @@ -22868,13 +19288,6 @@ recharts@^2.1.13: tiny-invariant "^1.3.1" victory-vendor "^36.6.8" -rechoir@^0.6.2: - version "0.6.2" - resolved "https://registry.yarnpkg.com/rechoir/-/rechoir-0.6.2.tgz#85204b54dba82d5742e28c96756ef43af50e3384" - integrity sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw== - dependencies: - resolve "^1.1.6" - rechoir@^0.7.0: version "0.7.1" resolved "https://registry.yarnpkg.com/rechoir/-/rechoir-0.7.1.tgz#9478a96a1ca135b5e88fc027f03ee92d6c645686" @@ -22936,11 +19349,6 @@ regenerator-runtime@^0.13.2, regenerator-runtime@^0.13.7: resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz#f6dca3e7ceec20590d07ada785636a90cdca17f9" integrity sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg== -regenerator-runtime@^0.14.1: - version "0.14.1" - resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz#356ade10263f685dda125100cd862c1db895327f" - integrity sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw== - regex-not@^1.0.0, regex-not@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/regex-not/-/regex-not-1.0.2.tgz#1f4ece27e00b0b65e0247a6810e6a85d83a5752c" @@ -22961,12 +19369,7 @@ regexp.prototype.flags@^1.5.1, regexp.prototype.flags@^1.5.3, regexp.prototype.f gopd "^1.2.0" set-function-name "^2.0.2" -regexpp@^3.1.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-3.2.0.tgz#0425a2768d8f23bad70ca4b90461fa2f1213e1b2" - integrity sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg== - -regexpu-core@^6.2.0: +regexpu-core@^6.3.1: version "6.4.0" resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-6.4.0.tgz#3580ce0c4faedef599eccb146612436b62a176e5" integrity sha512-0ghuzq67LI9bLXpOX/ISfve/Mq33a4aFRzoQYhnnok1JOFpmE/A2TBGkNVenOGEeSBCjIiWcc6MVOG5HEQv0sA== @@ -22995,20 +19398,6 @@ relateurl@^0.2.7: resolved "https://registry.yarnpkg.com/relateurl/-/relateurl-0.2.7.tgz#54dbf377e51440aca90a4cd274600d3ff2d888a9" integrity sha512-G08Dxvm4iDN3MLM0EsP62EDV9IuhXPR6blNz6Utcp7zyV3tr4HVNINt6MpaRWbxoOHT3Q7YN2P+jaHX8vUbgog== -reload@^3.2.1: - version "3.4.2" - resolved "https://registry.yarnpkg.com/reload/-/reload-3.4.2.tgz#3bf9090ccaf017ffa4c6f1a1515670e389d5f451" - integrity sha512-Z638+jVT5ADG4BAyrF3wYXdhBRuk1YL2M/D5JbE695h8Z5BgVfwUxKxduGMPPGTg8fOYDxMVIk56YSKpP5G9kQ== - dependencies: - cli-color "~2.0.0" - commander "~14.0.0" - finalhandler "~2.1.0" - minimist "~1.2.0" - nodemon "~3.1.4" - open "^10.0.0" - serve-static "~2.2.0" - ws "~8.18.0" - remark-external-links@^8.0.0: version "8.0.0" resolved "https://registry.yarnpkg.com/remark-external-links/-/remark-external-links-8.0.0.tgz#308de69482958b5d1cd3692bc9b725ce0240f345" @@ -23199,17 +19588,12 @@ resolve.exports@^1.1.0: resolved "https://registry.yarnpkg.com/resolve.exports/-/resolve.exports-1.1.1.tgz#05cfd5b3edf641571fd46fa608b610dda9ead999" integrity sha512-/NtpHNDN7jWhAaQ9BvBUYZ6YTXsRBgfqWFWP7BZBaoMJO/I3G5OFzvTuWNlZC3aPjins1F+TNrLKsGbH4rfsRQ== -resolve.exports@^2.0.0: - version "2.0.3" - resolved "https://registry.yarnpkg.com/resolve.exports/-/resolve.exports-2.0.3.tgz#41955e6f1b4013b7586f873749a635dea07ebe3f" - integrity sha512-OcXjMsGdhL4XnbShKpAcSqPMzQoYkYyhbEaeSko47MjRP9NfEQMhZkXL1DoFlt9LWQn4YttrdnV6X2OiyzBi+A== - -resolve@^1.1.6, resolve@^1.10.0, resolve@^1.14.2, resolve@^1.19.0, resolve@^1.20.0, resolve@^1.22.1, resolve@^1.22.10, resolve@^1.22.4, resolve@^1.3.2, resolve@^1.9.0: - version "1.22.10" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.10.tgz#b663e83ffb09bbf2386944736baae803029b8b39" - integrity sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w== +resolve@^1.10.0, resolve@^1.14.2, resolve@^1.19.0, resolve@^1.20.0, resolve@^1.22.10, resolve@^1.22.4, resolve@^1.3.2, resolve@^1.9.0: + version "1.22.11" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.11.tgz#aad857ce1ffb8bfa9b0b1ac29f1156383f68c262" + integrity sha512-RfqAvLnMl313r7c9oclB1HhUEAezcpLjz95wFH4LVuhk9JF/r22qmVP9AMmOU4vMX7Q8pN8jwNg/CSpdFnMjTQ== dependencies: - is-core-module "^2.16.0" + is-core-module "^2.16.1" path-parse "^1.0.7" supports-preserve-symlinks-flag "^1.0.0" @@ -23222,14 +19606,6 @@ resolve@^2.0.0-next.5: path-parse "^1.0.7" supports-preserve-symlinks-flag "^1.0.0" -restore-cursor@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-2.0.0.tgz#9f7ee287f82fd326d4fd162923d62129eee0dfaf" - integrity sha512-6IzJLuGi4+R14vwagDHX+JrXmPVtPpn4mffDJ1UdR7/Edm87fl6yi8mMBIVvFtJaNTUvjughmW4hwLhRG7gC1Q== - dependencies: - onetime "^2.0.0" - signal-exit "^3.0.2" - restore-cursor@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-3.1.0.tgz#39f67c54b3a7a58cea5236d95cf0034239631f7e" @@ -23263,13 +19639,6 @@ rgb-hex@^3.0.0: resolved "https://registry.yarnpkg.com/rgb-hex/-/rgb-hex-3.0.0.tgz#eab0168cc1279563b18a14605315389142e2e487" integrity sha512-8h7ZcwxCBDKvchSWbWngJuSCqJGQ6nDuLLg+QcRyQDbX9jMWt+PpPeXAhSla0GOooEomk3lCprUpGkMdsLjKyg== -rimraf@3.0.2, rimraf@^3.0.0, rimraf@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" - integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== - dependencies: - glob "^7.1.3" - rimraf@^2.5.4, rimraf@^2.6.3: version "2.7.1" resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec" @@ -23277,6 +19646,13 @@ rimraf@^2.5.4, rimraf@^2.6.3: dependencies: glob "^7.1.3" +rimraf@^3.0.0, rimraf@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" + integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== + dependencies: + glob "^7.1.3" + rimraf@^4.4.1: version "4.4.1" resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-4.4.1.tgz#bd33364f67021c5b79e93d7f4fa0568c7c21b755" @@ -23297,70 +19673,6 @@ robust-predicates@^3.0.2: resolved "https://registry.yarnpkg.com/robust-predicates/-/robust-predicates-3.0.2.tgz#d5b28528c4824d20fc48df1928d41d9efa1ad771" integrity sha512-IXgzBWvWQwE6PrDI05OvmXUIruQTcoMDzRsOd5CDvHCVLcLHMTSYvOK5Cm46kWqlV3yAbuSpBZdJ5oP5OUoStg== -rollup-plugin-base64@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/rollup-plugin-base64/-/rollup-plugin-base64-1.0.1.tgz#b3529b94d23baeb66e1e3bffd04477fa792985eb" - integrity sha512-IbdX8fjuXO/Op3hYmRPjVo0VwcSenwsQDaDTFdoe+70B5ZGoLMtr96L2yhHXCfxv7HwZVvxZqLsuWj6VwzRt3g== - dependencies: - "@rollup/pluginutils" "^3.1.0" - -rollup-plugin-dts@^5.0.0, rollup-plugin-dts@^5.2.0: - version "5.3.1" - resolved "https://registry.yarnpkg.com/rollup-plugin-dts/-/rollup-plugin-dts-5.3.1.tgz#c2841269a3a5cb986b7791b0328e6a178eba108f" - integrity sha512-gusMi+Z4gY/JaEQeXnB0RUdU82h1kF0WYzCWgVmV4p3hWXqelaKuCvcJawfeg+EKn2T1Ie+YWF2OiN1/L8bTVg== - dependencies: - magic-string "^0.30.2" - optionalDependencies: - "@babel/code-frame" "^7.22.5" - -rollup-plugin-inject@^3.0.0: - version "3.0.2" - resolved "https://registry.yarnpkg.com/rollup-plugin-inject/-/rollup-plugin-inject-3.0.2.tgz#e4233855bfba6c0c12a312fd6649dff9a13ee9f4" - integrity sha512-ptg9PQwzs3orn4jkgXJ74bfs5vYz1NCZlSQMBUA0wKcGp5i5pA1AO3fOUEte8enhGUC+iapTCzEWw2jEFFUO/w== - dependencies: - estree-walker "^0.6.1" - magic-string "^0.25.3" - rollup-pluginutils "^2.8.1" - -rollup-plugin-modify@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/rollup-plugin-modify/-/rollup-plugin-modify-3.0.0.tgz#5326e11dfec247e8bbdd9507f3da1da1e5c7818b" - integrity sha512-p/ffs0Y2jz2dEnWjq1oVC7SY37tuS+aP7whoNaQz1EAAOPg+k3vKJo8cMMWx6xpdd0NzhX4y2YF9o/NPu5YR0Q== - dependencies: - magic-string "0.25.2" - ospec "3.1.0" - -rollup-plugin-node-polyfills@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/rollup-plugin-node-polyfills/-/rollup-plugin-node-polyfills-0.2.1.tgz#53092a2744837164d5b8a28812ba5f3ff61109fd" - integrity sha512-4kCrKPTJ6sK4/gLL/U5QzVT8cxJcofO0OU74tnB19F40cmuAKSzH5/siithxlofFEjwvw1YAhPmbvGNA6jEroA== - dependencies: - rollup-plugin-inject "^3.0.0" - -rollup-plugin-polyfill@^4.2.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/rollup-plugin-polyfill/-/rollup-plugin-polyfill-4.2.0.tgz#414c7ffca0557bf29a8f4e073b8eb7f4d02dac42" - integrity sha512-6eeOyn7nr2/xUOtB+MhydvqLrNKcSybGneOuWA+t8Q4rR9NQyeapzwuu5n6nX8OFfY1WI1sHconAofaC44IpuA== - -rollup-plugin-web-worker-loader@^1.6.1: - version "1.7.0" - resolved "https://registry.yarnpkg.com/rollup-plugin-web-worker-loader/-/rollup-plugin-web-worker-loader-1.7.0.tgz#4973469f5f711c4f85c012c4fecb81fecc524580" - integrity sha512-msfN4FpdoTtfSCbeTZ8yPYmfi2/66Q53gQGmvOrEz/UfqZgCkSkGjaxsZt7TQ1V0s0tLJAe6HL+EdA7IBaUF6w== - -rollup-pluginutils@^2.8.1: - version "2.8.2" - resolved "https://registry.yarnpkg.com/rollup-pluginutils/-/rollup-pluginutils-2.8.2.tgz#72f2af0748b592364dbd3389e600e5a9444a351e" - integrity sha512-EEp9NhnUkwY8aif6bxgovPHMoMoNr2FulJziTndpt5H9RdwC47GSGuII9XxpSdzVGM0GWrNPHV6ie1LTNJPaLQ== - dependencies: - estree-walker "^0.6.1" - -rollup@^3.17.2, rollup@^3.2.1, rollup@^3.9.1: - version "3.29.5" - resolved "https://registry.yarnpkg.com/rollup/-/rollup-3.29.5.tgz#8a2e477a758b520fb78daf04bca4c522c1da8a54" - integrity sha512-GVsDdsbJzzy4S/v3dqWPJ7EfvZJfCHiDqe80IyrF59LYuP+e6U1LJoUqeuqRbwAWoMNoXivMNeNAOf5E22VA1w== - optionalDependencies: - fsevents "~2.3.2" - rrweb-cssom@^0.8.0: version "0.8.0" resolved "https://registry.yarnpkg.com/rrweb-cssom/-/rrweb-cssom-0.8.0.tgz#3021d1b4352fbf3b614aaeed0bc0d5739abe0bc2" @@ -23371,12 +19683,7 @@ rsvp@^4.8.4: resolved "https://registry.yarnpkg.com/rsvp/-/rsvp-4.8.5.tgz#c8f155311d167f68f21e168df71ec5b083113734" integrity sha512-nfMOlASu9OnRJo1mbEk2cz0D56a1MBNrJ7orjRZQG10XDyuvwksKbuXNp6qa+kbn839HwjwhBzhFmdsaEAfauA== -run-applescript@^7.0.0: - version "7.1.0" - resolved "https://registry.yarnpkg.com/run-applescript/-/run-applescript-7.1.0.tgz#2e9e54c4664ec3106c5b5630e249d3d6595c4911" - integrity sha512-DPe5pVFaAsinSaV6QjQ6gdiedWDcRCbUuiQfQa2wmWV7+xC9bGulGI8+TdRmoFkAPaBXk8CrAbnlY2ISniJ47Q== - -run-async@^2.2.0, run-async@^2.3.0, run-async@^2.4.0: +run-async@^2.4.0: version "2.4.1" resolved "https://registry.yarnpkg.com/run-async/-/run-async-2.4.1.tgz#8440eccf99ea3e70bd409d49aab88e10c189a455" integrity sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ== @@ -23395,25 +19702,6 @@ run-queue@^1.0.0, run-queue@^1.0.3: dependencies: aproba "^1.1.1" -rx-lite-aggregates@^4.0.8: - version "4.0.8" - resolved "https://registry.yarnpkg.com/rx-lite-aggregates/-/rx-lite-aggregates-4.0.8.tgz#753b87a89a11c95467c4ac1626c4efc4e05c67be" - integrity sha512-3xPNZGW93oCjiO7PtKxRK6iOVYBWBvtf9QHDfU23Oc+dLIQmAV//UnyXV/yihv81VS/UqoQPk4NegS8EFi55Hg== - dependencies: - rx-lite "*" - -rx-lite@*, rx-lite@^4.0.8: - version "4.0.8" - resolved "https://registry.yarnpkg.com/rx-lite/-/rx-lite-4.0.8.tgz#0b1e11af8bc44836f04a6407e92da42467b79444" - integrity sha512-Cun9QucwK6MIrp3mry/Y7hqD1oFqTYLQ4pGxaHTjIdaFDWRGGLikqp6u8LcWJnzpoALg9hap+JGk8sFIUuEGNA== - -rxjs@^6.4.0: - version "6.6.7" - resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.6.7.tgz#90ac018acabf491bf65044235d5863c4dab804c9" - integrity sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ== - dependencies: - tslib "^1.9.0" - rxjs@^7.5.5: version "7.8.2" resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-7.8.2.tgz#955bc473ed8af11a002a2be52071bf475638607b" @@ -23553,7 +19841,7 @@ schema-utils@^3.0.0, schema-utils@^3.1.1: ajv "^6.12.5" ajv-keywords "^3.5.2" -schema-utils@^4.0.0, schema-utils@^4.0.1, schema-utils@^4.2.0, schema-utils@^4.3.0, schema-utils@^4.3.2: +schema-utils@^4.0.0, schema-utils@^4.0.1, schema-utils@^4.2.0, schema-utils@^4.3.0, schema-utils@^4.3.3: version "4.3.3" resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-4.3.3.tgz#5b1850912fa31df90716963d45d9121fdfc09f46" integrity sha512-eflK8wEtyOE6+hsaRVPxvUKYCpRgzLqDTb8krvAsRIwOGlHoSgYLgBXoubGgLd2fT41/OUYdb48v4k4WWHQurA== @@ -23576,7 +19864,7 @@ selfsigned@^2.1.1: "@types/node-forge" "^1.3.0" node-forge "^1" -"semver@2 || 3 || 4 || 5", semver@^5.4.1, semver@^5.5.0, semver@^5.6.0, semver@^5.7.1: +"semver@2 || 3 || 4 || 5", semver@^5.4.1, semver@^5.5.0, semver@^5.6.0: version "5.7.2" resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.2.tgz#48d55db737c3287cd4835e17fa13feace1c41ef8" integrity sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g== @@ -23588,21 +19876,16 @@ semver@7.5.3: dependencies: lru-cache "^6.0.0" -semver@7.x, semver@^7.0.0, semver@^7.1.1, semver@^7.2.1, semver@^7.3.2, semver@^7.3.4, semver@^7.3.5, semver@^7.3.7, semver@^7.3.8, semver@^7.5.0, semver@^7.5.3, semver@^7.5.4, semver@^7.6.0, semver@^7.6.3, semver@^7.7.1, semver@^7.7.2: - version "7.7.2" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.7.2.tgz#67d99fdcd35cec21e6f8b87a7fd515a33f982b58" - integrity sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA== +semver@7.x, semver@^7.0.0, semver@^7.1.1, semver@^7.3.2, semver@^7.3.4, semver@^7.3.5, semver@^7.3.7, semver@^7.3.8, semver@^7.5.0, semver@^7.5.3, semver@^7.5.4, semver@^7.6.0, semver@^7.6.3, semver@^7.7.1: + version "7.7.3" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.7.3.tgz#4b5f4143d007633a8dc671cd0a6ef9147b8bb946" + integrity sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q== -semver@^6.0.0, semver@^6.1.1, semver@^6.1.2, semver@^6.3.0, semver@^6.3.1: +semver@^6.0.0, semver@^6.1.2, semver@^6.3.0, semver@^6.3.1: version "6.3.1" resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4" integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== -semver@~7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.0.0.tgz#5f3ca35761e47e05b206c6daff2cf814f0316b8e" - integrity sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A== - send@0.19.0: version "0.19.0" resolved "https://registry.yarnpkg.com/send/-/send-0.19.0.tgz#bbc5a388c8ea6c048967049dbeac0e4a3f09d7f8" @@ -23622,23 +19905,6 @@ send@0.19.0: range-parser "~1.2.1" statuses "2.0.1" -send@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/send/-/send-1.2.0.tgz#32a7554fb777b831dfa828370f773a3808d37212" - integrity sha512-uaW0WwXKpL9blXE2o0bRhoL2EGXIrZxQ2ZQ4mgcfoBxdFmQold+qWsD2jLrfZ0trjKL6vOw0j//eAwcALFjKSw== - dependencies: - debug "^4.3.5" - encodeurl "^2.0.0" - escape-html "^1.0.3" - etag "^1.8.1" - fresh "^2.0.0" - http-errors "^2.0.0" - mime-types "^3.0.1" - ms "^2.1.3" - on-finished "^2.4.1" - range-parser "^1.2.1" - statuses "^2.0.1" - serialize-javascript@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-4.0.0.tgz#b525e1238489a5ecfc42afacc3fe99e666f4b1aa" @@ -23694,16 +19960,6 @@ serve-static@1.16.2: parseurl "~1.3.3" send "0.19.0" -serve-static@~2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-2.2.0.tgz#9c02564ee259bdd2251b82d659a2e7e1938d66f9" - integrity sha512-61g9pCh0Vnh7IutZjtLGGpTA355+OPn2TyDv/6ivP2h/AdAVX9azsoxmg2/M6nZeQZNYBEwIcsne1mJd9oQItQ== - dependencies: - encodeurl "^2.0.0" - escape-html "^1.0.3" - parseurl "^1.3.3" - send "^1.2.0" - set-blocking@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" @@ -23839,34 +20095,6 @@ shell-quote@^1.6.1, shell-quote@^1.8.3: resolved "https://registry.yarnpkg.com/shell-quote/-/shell-quote-1.8.3.tgz#55e40ef33cf5c689902353a3d8cd1a6725f08b4b" integrity sha512-ObmnIF4hXNg1BqhnHmgbDETF8dLPCggZWBjkQfhZpbszZnYur5DUljTcCHii5LC3J5E0yeO/1LIMyH+UvHQgyw== -shelljs@0.8.5: - version "0.8.5" - resolved "https://registry.yarnpkg.com/shelljs/-/shelljs-0.8.5.tgz#de055408d8361bed66c669d2f000538ced8ee20c" - integrity sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow== - dependencies: - glob "^7.0.0" - interpret "^1.0.0" - rechoir "^0.6.2" - -shiki@^0.10.1: - version "0.10.1" - resolved "https://registry.yarnpkg.com/shiki/-/shiki-0.10.1.tgz#6f9a16205a823b56c072d0f1a0bcd0f2646bef14" - integrity sha512-VsY7QJVzU51j5o1+DguUd+6vmCmZ5v/6gYu4vyYAhzjuNQU6P/vmSy4uQaOhvje031qQMiW0d2BwgMH52vqMng== - dependencies: - jsonc-parser "^3.0.0" - vscode-oniguruma "^1.6.1" - vscode-textmate "5.2.0" - -shiki@^0.14.1: - version "0.14.7" - resolved "https://registry.yarnpkg.com/shiki/-/shiki-0.14.7.tgz#c3c9e1853e9737845f1d2ef81b31bcfb07056d4e" - integrity sha512-dNPAPrxSc87ua2sKJ3H5dQ/6ZaY8RNnaAqK+t0eG7p0Soi2ydiqbGOTaZCqaYvA/uZYfS1LJnemt3Q+mSfcPCg== - dependencies: - ansi-sequence-parser "^1.1.0" - jsonc-parser "^3.2.0" - vscode-oniguruma "^1.7.0" - vscode-textmate "^8.0.0" - side-channel-list@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/side-channel-list/-/side-channel-list-1.0.0.tgz#10cb5984263115d3b7a0e336591e290a830af8ad" @@ -23935,20 +20163,6 @@ simple-swizzle@^0.2.2: dependencies: is-arrayish "^0.3.1" -simple-update-notifier@^1.0.7: - version "1.1.0" - resolved "https://registry.yarnpkg.com/simple-update-notifier/-/simple-update-notifier-1.1.0.tgz#67694c121de354af592b347cdba798463ed49c82" - integrity sha512-VpsrsJSUcJEseSbMHkrsrAVSdvVS5I96Qo1QAQ4FxQ9wXFcB+pjj7FB7/us9+GcgfW4ziHtYMc1J0PLczb55mg== - dependencies: - 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: version "1.0.5" resolved "https://registry.yarnpkg.com/sisteransi/-/sisteransi-1.0.5.tgz#134d681297756437cc05ca01370d3a7a571075ed" @@ -23974,25 +20188,11 @@ slash@^4.0.0: resolved "https://registry.yarnpkg.com/slash/-/slash-4.0.0.tgz#2422372176c4c6c5addb5e2ada885af984b396a7" integrity sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew== -slice-ansi@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-4.0.0.tgz#500e8dd0fd55b05815086255b3195adf2a45fe6b" - integrity sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ== - dependencies: - ansi-styles "^4.0.0" - astral-regex "^2.0.0" - is-fullwidth-code-point "^3.0.0" - smart-buffer@^4.2.0: version "4.2.0" resolved "https://registry.yarnpkg.com/smart-buffer/-/smart-buffer-4.2.0.tgz#6e1d71fa4f18c05f7d0ff216dd16a481d0e8d9ae" integrity sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg== -smob@^0.0.6: - version "0.0.6" - resolved "https://registry.yarnpkg.com/smob/-/smob-0.0.6.tgz#09b268fea916158a2781c152044c6155adbb8aa1" - integrity sha512-V21+XeNni+tTyiST1MHsa84AQhT1aFZipzPpOFAVB8DkHzwJyjjAmt9bgwnuZiZWnIbMo2duE29wybxv/7HWUw== - snapdragon-node@^2.0.1: version "2.1.1" resolved "https://registry.yarnpkg.com/snapdragon-node/-/snapdragon-node-2.1.1.tgz#6c175f86ff14bdb0724563e8f3c1b021a286853b" @@ -24084,14 +20284,6 @@ source-map-resolve@^0.5.0: source-map-url "^0.4.0" urix "^0.1.0" -source-map-support@0.5.13: - version "0.5.13" - resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.13.tgz#31b24a9c2e73c2de85066c0feb7d44767ed52932" - integrity sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w== - dependencies: - buffer-from "^1.0.0" - source-map "^0.6.0" - source-map-support@^0.5.16, source-map-support@^0.5.21, source-map-support@^0.5.6, source-map-support@~0.5.12, source-map-support@~0.5.20: version "0.5.21" resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.21.tgz#04fe7c7f9e1ed2d662233c28cb2b35b9f63f6e4f" @@ -24120,11 +20312,6 @@ source-map@^0.7.3, source-map@^0.7.4: resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.7.6.tgz#a3658ab87e5b6429c8a1f3ba0083d4c61ca3ef02" integrity sha512-i5uvt8C3ikiWeNZSVZNWcfZPItFQOsYTUAOkcUPGd8DqDy1uOUikjt5dG+uRlwyvR108Fb9DOd4GvXfT0N2/uQ== -sourcemap-codec@^1.4.4, sourcemap-codec@^1.4.8: - version "1.4.8" - resolved "https://registry.yarnpkg.com/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz#ea804bd94857402e6992d05a38ef1ae35a9ab4c4" - integrity sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA== - space-separated-tokens@^1.0.0: version "1.1.5" resolved "https://registry.yarnpkg.com/space-separated-tokens/-/space-separated-tokens-1.1.5.tgz#85f32c3d10d9682007e917414ddc5c26d1aa6899" @@ -24288,11 +20475,6 @@ statuses@2.0.1: resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c" integrity sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA== -statuses@^2.0.1: - version "2.0.2" - resolved "https://registry.yarnpkg.com/statuses/-/statuses-2.0.2.tgz#8f75eecef765b5e1cfcdc080da59409ed424e382" - integrity sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw== - stop-iteration-iterator@^1.0.0, stop-iteration-iterator@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/stop-iteration-iterator/-/stop-iteration-iterator-1.1.0.tgz#f481ff70a548f6124d0312c3aa14cbfa7aa542ad" @@ -24381,14 +20563,6 @@ string-to-color@^2.2.2: is-fullwidth-code-point "^3.0.0" strip-ansi "^6.0.1" -string-width@^2.0.0, string-width@^2.1.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e" - integrity sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw== - dependencies: - is-fullwidth-code-point "^2.0.0" - strip-ansi "^4.0.0" - string-width@^5.0.1, string-width@^5.1.2: version "5.1.2" resolved "https://registry.yarnpkg.com/string-width/-/string-width-5.1.2.tgz#14f8daec6d81e7221d2a357e668cab73bdbca794" @@ -24516,27 +20690,13 @@ stringify-entities@^4.0.0: dependencies: ansi-regex "^5.0.1" -strip-ansi@^3.0.0, strip-ansi@^3.0.1: +strip-ansi@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" integrity sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg== dependencies: ansi-regex "^2.0.0" -strip-ansi@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f" - integrity sha512-4XaJ2zQdCzROZDivEVIDPkcQn8LMFSa8kj8Gxb/Lnwzv9A8VctNZ+lfivC/sV3ivW8ElJTERXZoPBRrZKkNKow== - dependencies: - ansi-regex "^3.0.0" - -strip-ansi@^5.1.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-5.2.0.tgz#8c9a536feb6afc962bdfa5b104a5091c1ad9c0ae" - integrity sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA== - dependencies: - ansi-regex "^4.1.0" - strip-ansi@^6.0.0, strip-ansi@^6.0.1: version "6.0.1" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" @@ -24592,7 +20752,7 @@ strip-indent@^3.0.0: dependencies: min-indent "^1.0.0" -strip-json-comments@^3.1.0, strip-json-comments@^3.1.1: +strip-json-comments@^3.1.1: version "3.1.1" resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== @@ -24628,11 +20788,11 @@ style-loader@^3.3.1, style-loader@^3.3.3: integrity sha512-0WqXzrsMTyb8yjZJHDqwmnwRJvhALK9LfRtRc6B4UTWe8AijYLZYZ9thuJTZc2VfQWINADW/j+LiJnfy2RoC1w== style-to-js@^1.0.0: - version "1.1.17" - resolved "https://registry.yarnpkg.com/style-to-js/-/style-to-js-1.1.17.tgz#488b1558a8c1fd05352943f088cc3ce376813d83" - integrity sha512-xQcBGDxJb6jjFCTzvQtfiPn6YvvP2O8U1MDIPNfJQlWMYfktPy+iGsHE7cssjs7y84d9fQaK4UF3RIJaAHSoYA== + version "1.1.18" + resolved "https://registry.yarnpkg.com/style-to-js/-/style-to-js-1.1.18.tgz#3e6c13bd4c4db079bd2c2c94571cce5c758bc2ff" + integrity sha512-JFPn62D4kJaPTnhFUI244MThx+FEGbi+9dw1b9yBBQ+1CZpV7QAT8kUtJ7b7EUNdHajjF/0x8fT+16oLJoojLg== dependencies: - style-to-object "1.0.9" + style-to-object "1.0.11" style-to-object@0.3.0, style-to-object@^0.3.0: version "0.3.0" @@ -24641,10 +20801,10 @@ style-to-object@0.3.0, style-to-object@^0.3.0: dependencies: inline-style-parser "0.1.1" -style-to-object@1.0.9: - version "1.0.9" - resolved "https://registry.yarnpkg.com/style-to-object/-/style-to-object-1.0.9.tgz#35c65b713f4a6dba22d3d0c61435f965423653f0" - integrity sha512-G4qppLgKu/k6FwRpHiGiKPaPTFcG3g4wNVX/Qsfu+RqQM30E7Tyu/TEgxcL9PNLF5pdRLwQdE3YKKf+KF2Dzlw== +style-to-object@1.0.11: + version "1.0.11" + resolved "https://registry.yarnpkg.com/style-to-object/-/style-to-object-1.0.11.tgz#cf252c4051758b7acb18a5efb296f91fb79bb9c4" + integrity sha512-5A560JmXr7wDyGLK12Nq/EYS38VkGlglVzkis1JEdbGWSnbQIEhZzTJhzURXN5/8WwwFCs/f/VVcmkTppbXLow== dependencies: inline-style-parser "0.2.4" @@ -24676,12 +20836,7 @@ stylis@4.2.0: resolved "https://registry.yarnpkg.com/stylis/-/stylis-4.2.0.tgz#79daee0208964c8fe695a42fcffcac633a211a51" integrity sha512-Orov6g6BB1sDfYgzWfTHDOxamtX1bE/zo104Dh9e6fqJ3PooipYyfJ0pUmrZO2wAvO8YbEyeFrkV91XTsGMSrw== -supports-color@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" - integrity sha512-KKNVtd6pCYgPIKU4cp2733HWYCpplQhddZLBUryaAHou723x+FRzQ5Df824Fj+IyyuiQTRoub4SnIFfIcrp70g== - -supports-color@^5.3.0, supports-color@^5.5.0: +supports-color@^5.3.0: version "5.5.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== @@ -24695,7 +20850,7 @@ supports-color@^7.0.0, supports-color@^7.1.0: dependencies: has-flag "^4.0.0" -supports-color@^8.0.0, supports-color@^8.1.1: +supports-color@^8.0.0: version "8.1.1" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-8.1.1.tgz#cd6fc17e28500cff56c1b86c0a7fd4a54a73005c" integrity sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q== @@ -24780,27 +20935,16 @@ synchronous-promise@^2.0.15: integrity sha512-AsS729u2RHUfEra9xJrE39peJcc2stq2+poBXX8bcM08Y6g9j/i/PUzwNQqkaJde7Ntg1TO7bSREbR5sdosQ+g== tabbable@^6.0.0: - version "6.2.0" - resolved "https://registry.yarnpkg.com/tabbable/-/tabbable-6.2.0.tgz#732fb62bc0175cfcec257330be187dcfba1f3b97" - integrity sha512-Cat63mxsVJlzYvN51JmVXIgNoUokrIaT2zLclCXjRd8boZ0004U4KCs/sToJ75C6sdlByWxpYnb5Boif1VSFew== - -table@^6.0.9: - version "6.9.0" - resolved "https://registry.yarnpkg.com/table/-/table-6.9.0.tgz#50040afa6264141c7566b3b81d4d82c47a8668f5" - integrity sha512-9kY+CygyYM6j02t5YFHbNz2FN5QmYGv9zAjVp4lCDjlCw7amdckXlEt/bjMhUIfj4ThGRE4gCUH5+yGnNuPo5A== - dependencies: - ajv "^8.0.1" - lodash.truncate "^4.4.2" - slice-ansi "^4.0.0" - string-width "^4.2.3" - strip-ansi "^6.0.1" + version "6.3.0" + resolved "https://registry.yarnpkg.com/tabbable/-/tabbable-6.3.0.tgz#2e0e6163935387cdeacd44e9334616ca0115a8d3" + integrity sha512-EIHvdY5bPLuWForiR/AN2Bxngzpuwn1is4asboytXtpTgsArc+WmSJKVLlhdh71u7jFcryDqB2A8lQvj78MkyQ== tapable@^1.0.0, tapable@^1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/tapable/-/tapable-1.1.3.tgz#a1fccc06b58db61fd7a45da2da44f5f3a3e67ba2" integrity sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA== -tapable@^2.0.0, tapable@^2.2.0, tapable@^2.2.1, tapable@^2.2.3: +tapable@^2.0.0, tapable@^2.2.0, tapable@^2.2.1, tapable@^2.3.0: version "2.3.0" resolved "https://registry.yarnpkg.com/tapable/-/tapable-2.3.0.tgz#7e3ea6d5ca31ba8e078b560f0d83ce9a14aa8be6" integrity sha512-g9ljZiwki/LfxmQADO3dEY1CbpmXT5Hm2fJ+QaGKwSXUylMybePR7/67YW7jOrrvjEgL1Fmz5kzyAjWVWLlucg== @@ -24859,11 +21003,6 @@ temp-dir@1.0.0: resolved "https://registry.yarnpkg.com/temp-dir/-/temp-dir-1.0.0.tgz#0a7c0ea26d3a39afa7e0ebea9c1fc0bc4daa011d" integrity sha512-xZFXEGbG7SNC3itwBzI3RYjq/cEhBkx2hJuKGIUOcEULmkQExXiHat2z/qkISYsuR+IKumhEfKKbV5qXmhICFQ== -term-size@^2.2.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/term-size/-/term-size-2.2.1.tgz#2a6a54840432c2fb6320fea0f415531e90189f54" - integrity sha512-wK0Ri4fOGjv/XPy8SBHZChl8CM7uMc5VML7SqiQ0zG7+J5Vr+RMQDoHa2CNT6KHUnTGIXH34UDMkPzAUyapBZg== - terminal-link@^2.0.0: version "2.1.1" resolved "https://registry.yarnpkg.com/terminal-link/-/terminal-link-2.1.1.tgz#14a64a27ab3c0df933ea546fba55f2d078edc994" @@ -24922,7 +21061,7 @@ terser@^4.1.2, terser@^4.6.3: source-map "~0.6.1" source-map-support "~0.5.12" -terser@^5.10.0, terser@^5.15.1, terser@^5.3.4, terser@^5.31.1: +terser@^5.10.0, terser@^5.3.4, terser@^5.31.1: version "5.44.0" resolved "https://registry.yarnpkg.com/terser/-/terser-5.44.0.tgz#ebefb8e5b8579d93111bfdfc39d2cf63879f4a82" integrity sha512-nIVck8DK+GM/0Frwd+nIhZ84pR/BX7rmXMfYwyg+Sri5oGVE99/E3KvXqpC2xHFxyqXyGHTKBSioxxplrO4I4w== @@ -24951,20 +21090,6 @@ text-table@^0.2.0: resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" integrity sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw== -thenify-all@^1.0.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/thenify-all/-/thenify-all-1.6.0.tgz#1a1918d402d8fc3f98fbf234db0bcc8cc10e9726" - integrity sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA== - dependencies: - thenify ">= 3.1.0 < 4" - -"thenify@>= 3.1.0 < 4": - version "3.3.1" - resolved "https://registry.yarnpkg.com/thenify/-/thenify-3.3.1.tgz#8932e686a4066038a016dd9e2ca46add9838a95f" - integrity sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw== - dependencies: - any-promise "^1.0.0" - thread-loader@^3.0.4: version "3.0.4" resolved "https://registry.yarnpkg.com/thread-loader/-/thread-loader-3.0.4.tgz#c392e4c0241fbc80430eb680e4886819b504a31b" @@ -25023,14 +21148,6 @@ timers-browserify@^2.0.4: dependencies: setimmediate "^1.0.4" -timers-ext@^0.1.7: - version "0.1.8" - resolved "https://registry.yarnpkg.com/timers-ext/-/timers-ext-0.1.8.tgz#b4e442f10b7624a29dd2aa42c295e257150cf16c" - integrity sha512-wFH7+SEAcKfJpfLPkrgMPvvwnEtj8W4IurvEyrKsDleXnKLCDw71w8jltvfLa8Rm4qQxxT4jmDBYbJG/z7qoww== - dependencies: - es5-ext "^0.10.64" - next-tick "^1.1.0" - tiny-invariant@^1.3.1: version "1.3.3" resolved "https://registry.yarnpkg.com/tiny-invariant/-/tiny-invariant-1.3.3.tgz#46680b7a873a0d5d10005995eb90a70d74d60127" @@ -25065,24 +21182,17 @@ tinyrainbow@^1.2.0: resolved "https://registry.yarnpkg.com/tinyrainbow/-/tinyrainbow-1.2.0.tgz#5c57d2fc0fb3d1afd78465c33ca885d04f02abb5" integrity sha512-weEDEq7Z5eTHPDh4xjX789+fHfF+P8boiFB+0vbWzpbnbsEr/GRaohi/uMKxg8RZMXnl1ItAi/IUHWMsjDV7kQ== -tldts-core@^7.0.16: - version "7.0.16" - resolved "https://registry.yarnpkg.com/tldts-core/-/tldts-core-7.0.16.tgz#f94a42b1f571ee7e4d5c58a4a3486d557b093c14" - integrity sha512-XHhPmHxphLi+LGbH0G/O7dmUH9V65OY20R7vH8gETHsp5AZCjBk9l8sqmRKLaGOxnETU7XNSDUPtewAy/K6jbA== +tldts-core@^7.0.17: + version "7.0.17" + resolved "https://registry.yarnpkg.com/tldts-core/-/tldts-core-7.0.17.tgz#dadfee3750dd272ed219d7367beb7cbb2ff29eb8" + integrity sha512-DieYoGrP78PWKsrXr8MZwtQ7GLCUeLxihtjC1jZsW1DnvSMdKPitJSe8OSYDM2u5H6g3kWJZpePqkp43TfLh0g== tldts@^7.0.5: - version "7.0.16" - resolved "https://registry.yarnpkg.com/tldts/-/tldts-7.0.16.tgz#8eecb4c15608a23e5b360d64d74f937fb9dbe6aa" - integrity sha512-5bdPHSwbKTeHmXrgecID4Ljff8rQjv7g8zKQPkCozRo2HWWni+p310FSn5ImI+9kWw9kK4lzOB5q/a6iv0IJsw== + version "7.0.17" + resolved "https://registry.yarnpkg.com/tldts/-/tldts-7.0.17.tgz#a6cdc067b9e80ea05f3be471c0ea410688cc78b2" + integrity sha512-Y1KQBgDd/NUc+LfOtKS6mNsC9CCaH+m2P1RoIZy7RAPo3C3/t8X45+zgut31cRZtZ3xKPjfn3TkGTrctC2TQIQ== dependencies: - tldts-core "^7.0.16" - -tmp@^0.0.33: - version "0.0.33" - resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9" - integrity sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw== - dependencies: - os-tmpdir "~1.0.2" + tldts-core "^7.0.17" tmp@~0.2.1: version "0.2.5" @@ -25108,11 +21218,6 @@ to-buffer@^1.2.0, to-buffer@^1.2.1, to-buffer@^1.2.2: safe-buffer "^5.2.1" typed-array-buffer "^1.0.3" -to-fast-properties@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e" - integrity sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog== - to-object-path@^0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/to-object-path/-/to-object-path-0.3.0.tgz#297588b7b0e7e0ac08e04e672f85c1f4999e17af" @@ -25160,11 +21265,6 @@ toposort@^2.0.2: resolved "https://registry.yarnpkg.com/toposort/-/toposort-2.0.2.tgz#ae21768175d1559d48bef35420b2f4962f09c330" integrity sha512-0a5EOkAUp8D4moMi2W8ZF8jcga7BgZd91O/yabJCFY8az+XSzeGyTKs0Aoo897iV1Nj6guFq8orWDS96z91oGg== -touch@^3.1.0: - version "3.1.1" - resolved "https://registry.yarnpkg.com/touch/-/touch-3.1.1.tgz#097a23d7b161476435e5c1344a95c0f75b4a5694" - integrity sha512-r0eojU4bI8MnHr8c5bNo7lJDdI2qXlWWJk6a9EAFG7vbhTjElYhBVS3/miuE0uOuoLdb8Mc/rVfsmm6eo5o9GA== - tough-cookie@^4.0.0: version "4.1.4" resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-4.1.4.tgz#945f1461b45b5a8c76821c33ea49c3ac192c1b36" @@ -25260,21 +21360,6 @@ ts-jest@^27.0.5: semver "7.x" yargs-parser "20.x" -ts-jest@^29.1.0: - version "29.4.4" - resolved "https://registry.yarnpkg.com/ts-jest/-/ts-jest-29.4.4.tgz#fc6fefe28652ed81b8e1381ef8391901d9f81417" - integrity sha512-ccVcRABct5ZELCT5U0+DZwkXMCcOCLi2doHRrKy1nK/s7J7bch6TzJMsrY09WxgUUIP/ITfmcDS8D2yl63rnXw== - dependencies: - bs-logger "^0.2.6" - fast-json-stable-stringify "^2.1.0" - handlebars "^4.7.8" - json5 "^2.2.3" - lodash.memoize "^4.1.2" - make-error "^1.3.6" - semver "^7.7.2" - type-fest "^4.41.0" - yargs-parser "^21.1.1" - ts-loader@^9.4.2, ts-loader@^9.4.4: version "9.5.4" resolved "https://registry.yarnpkg.com/ts-loader/-/ts-loader-9.5.4.tgz#44b571165c10fb5a90744aa5b7e119233c4f4585" @@ -25286,29 +21371,6 @@ ts-loader@^9.4.2, ts-loader@^9.4.4: semver "^7.3.4" source-map "^0.7.4" -ts-mocha@^10.0.0: - version "10.1.0" - resolved "https://registry.yarnpkg.com/ts-mocha/-/ts-mocha-10.1.0.tgz#17a1c055f5f7733fd82447c4420740db87221bc8" - integrity sha512-T0C0Xm3/WqCuF2tpa0GNGESTBoKZaiqdUP8guNv4ZY316AFXlyidnrzQ1LUrCT0Wb1i3J0zFTgOh/55Un44WdA== - dependencies: - ts-node "7.0.1" - optionalDependencies: - tsconfig-paths "^3.5.0" - -ts-node@7.0.1: - version "7.0.1" - resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-7.0.1.tgz#9562dc2d1e6d248d24bc55f773e3f614337d9baf" - integrity sha512-BVwVbPJRspzNh2yfslyT1PSbl5uIk03EZlb493RKHN4qej/D06n1cEhjlOJG69oFsE7OT8XjpTUcYf6pKTLMhw== - dependencies: - arrify "^1.0.0" - buffer-from "^1.1.0" - diff "^3.1.0" - make-error "^1.1.1" - minimist "^1.2.0" - mkdirp "^0.5.1" - source-map-support "^0.5.6" - yn "^2.0.0" - ts-pnp@^1.1.6: version "1.2.0" resolved "https://registry.yarnpkg.com/ts-pnp/-/ts-pnp-1.2.0.tgz#a500ad084b0798f1c3071af391e65912c86bca92" @@ -25333,7 +21395,7 @@ tsconfig-paths-webpack-plugin@^4.1.0: tapable "^2.2.1" tsconfig-paths "^4.1.2" -tsconfig-paths@^3.15.0, tsconfig-paths@^3.5.0, tsconfig-paths@^3.9.0: +tsconfig-paths@^3.15.0, tsconfig-paths@^3.9.0: version "3.15.0" resolved "https://registry.yarnpkg.com/tsconfig-paths/-/tsconfig-paths-3.15.0.tgz#5299ec605e55b1abb23ec939ef15edaf483070d4" integrity sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg== @@ -25352,17 +21414,12 @@ tsconfig-paths@^4.1.2: minimist "^1.2.6" strip-bom "^3.0.0" -tslib@1.14.1, tslib@^1.8.1, tslib@^1.9.0, tslib@^1.9.3: +tslib@1.14.1, tslib@^1.8.1, tslib@^1.9.3: version "1.14.1" resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== -tslib@2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.1.0.tgz#da60860f1c2ecaa5703ab7d39bc05b6bf988b97a" - integrity sha512-hcVC3wYEziELGGmEEXue7D75zbwIIVUMWAVbHItGPx0ziyXxrOMQx4rQEVEV45Ut/1IotuEvwqPopzIOkDMf0A== - -tslib@^2.0.0, tslib@^2.0.1, tslib@^2.0.3, tslib@^2.1.0, tslib@^2.3.0, tslib@^2.4.0, tslib@^2.7.0, tslib@^2.8.0: +tslib@^2.0.0, tslib@^2.0.1, tslib@^2.0.3, tslib@^2.1.0, tslib@^2.3.0, tslib@^2.4.0, tslib@^2.8.0: version "2.8.1" resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.8.1.tgz#612efe4ed235d567e8aba5f2a5fab70280ade83f" integrity sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w== @@ -25447,11 +21504,6 @@ type-fest@^0.8.1: resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.8.1.tgz#09e249ebde851d3b1e48d27c105444667f17b83d" integrity sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA== -type-fest@^4.41.0: - version "4.41.0" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-4.41.0.tgz#6ae1c8e5731273c2bf1f58ad39cbae2c91a46c58" - integrity sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA== - type-is@~1.6.18: version "1.6.18" resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.18.tgz#4e552cd05df09467dcbc4ef739de89f2cf37c131" @@ -25460,11 +21512,6 @@ type-is@~1.6.18: media-typer "0.3.0" mime-types "~2.1.24" -type@^2.7.2: - version "2.7.3" - resolved "https://registry.yarnpkg.com/type/-/type-2.7.3.tgz#436981652129285cc3ba94f392886c2637ea0486" - integrity sha512-8j+1QmAbPvLZow5Qpi6NCaN8FB60p/6x8/vfNqOk/hC+HuvFZhL4+WfekuhQLiqFZXOgQdrs3B+XxEmCc6b3FQ== - typed-array-buffer@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/typed-array-buffer/-/typed-array-buffer-1.0.3.tgz#a72395450a4869ec033fd549371b47af3a2ee536" @@ -25522,27 +21569,6 @@ typedarray@^0.0.6: resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" integrity sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA== -typedoc@^0.22.13: - version "0.22.18" - resolved "https://registry.yarnpkg.com/typedoc/-/typedoc-0.22.18.tgz#1d000c33b66b88fd8cdfea14a26113a83b7e6591" - integrity sha512-NK9RlLhRUGMvc6Rw5USEYgT4DVAUFk7IF7Q6MYfpJ88KnTZP7EneEa4RcP+tX1auAcz7QT1Iy0bUSZBYYHdoyA== - dependencies: - glob "^8.0.3" - lunr "^2.3.9" - marked "^4.0.16" - minimatch "^5.1.0" - 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" - typeforce@^1.11.5: version "1.18.0" resolved "https://registry.yarnpkg.com/typeforce/-/typeforce-1.18.0.tgz#d7416a2c5845e085034d70fcc5b6cc4a90edbfdc" @@ -25553,25 +21579,11 @@ typeforce@^1.11.5: resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.9.3.tgz#5b4f59e15310ab17a216f5d6cf53ee476ede670f" integrity sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw== -typescript@^4.6.2, typescript@^4.8.4: +typescript@^4.6.2: version "4.9.5" resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.9.5.tgz#095979f9bcc0d09da324d58d03ce8f8374cbe65a" integrity sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g== -typeson-registry@^1.0.0-alpha.20: - version "1.0.0-alpha.39" - resolved "https://registry.yarnpkg.com/typeson-registry/-/typeson-registry-1.0.0-alpha.39.tgz#9e0f5aabd5eebfcffd65a796487541196f4b1211" - integrity sha512-NeGDEquhw+yfwNhguLPcZ9Oj0fzbADiX4R0WxvoY8nGhy98IbzQy1sezjoEFWOywOboj/DWehI+/aUlRVrJnnw== - dependencies: - base64-arraybuffer-es6 "^0.7.0" - typeson "^6.0.0" - whatwg-url "^8.4.0" - -typeson@^6.0.0, typeson@^6.1.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/typeson/-/typeson-6.1.0.tgz#5b2a53705a5f58ff4d6f82f965917cabd0d7448b" - integrity sha512-6FTtyGr8ldU0pfbvW/eOZrEtEkczHRUtduBnA90Jh9kMPCiFNnXIon3vF41N0S4tV1HHQt4Hk1j4srpESziCaA== - ufo@^1.5.4, ufo@^1.6.1: version "1.6.1" resolved "https://registry.yarnpkg.com/ufo/-/ufo-1.6.1.tgz#ac2db1d54614d1b22c1d603e3aef44a85d8f146b" @@ -25597,20 +21609,15 @@ uncrypto@^0.1.3: resolved "https://registry.yarnpkg.com/uncrypto/-/uncrypto-0.1.3.tgz#e1288d609226f2d02d8d69ee861fa20d8348ef2b" integrity sha512-Ql87qFHB3s/De2ClA9e0gsnS6zXG27SkTiSJwjCc9MebbfapQfuPzumMIUMi38ezPZVNFcHI9sUIepeQfw8J8Q== -undefsafe@^2.0.5: - version "2.0.5" - resolved "https://registry.yarnpkg.com/undefsafe/-/undefsafe-2.0.5.tgz#38733b9327bdcd226db889fb723a6efd162e6e2c" - integrity sha512-WxONCrssBM8TSPRqN5EmsjVrsv4A8X12J4ArBiiayv3DyyG3ZlIg6yysuuSYdZsVz3TKcTg2fd//Ujd4CHV1iA== - undici-types@~6.21.0: version "6.21.0" resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-6.21.0.tgz#691d00af3909be93a7faa13be61b3a5b50ef12cb" integrity sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ== -undici-types@~7.13.0: - version "7.13.0" - resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-7.13.0.tgz#a20ba7c0a2be0c97bd55c308069d29d167466bff" - integrity sha512-Ov2Rr9Sx+fRgagJ5AX0qvItZG/JKKoBRAVITs1zk7IqZGTJUwgUr7qoYBpWwakpWilTZFM98rG/AFRocu10iIQ== +undici-types@~7.16.0: + version "7.16.0" + resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-7.16.0.tgz#ffccdff36aea4884cbfce9a750a0580224f58a46" + integrity sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw== unfetch@^4.2.0: version "4.2.0" @@ -25741,9 +21748,9 @@ unist-util-is@^4.0.0: integrity sha512-ZOQSsnce92GrxSqlnEEseX0gi7GH9zTJZ0p9dtu87WRb/37mMPO2Ilx1s/t9vBHrFhbgweUwb+t7cIn5dxPhZg== unist-util-is@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/unist-util-is/-/unist-util-is-6.0.0.tgz#b775956486aff107a9ded971d996c173374be424" - integrity sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw== + version "6.0.1" + resolved "https://registry.yarnpkg.com/unist-util-is/-/unist-util-is-6.0.1.tgz#d0a3f86f2dd0db7acd7d8c2478080b5c67f9c6a9" + integrity sha512-LsiILbtBETkDz8I9p1dQ0uyRUWuaQzd/cuEeS1hoRSyW5E5XGmTzlwY1OrNzzakGowI9Dr/I8HVaw4hTtnxy8g== dependencies: "@types/unist" "^3.0.0" @@ -25796,9 +21803,9 @@ unist-util-visit-parents@^3.0.0: unist-util-is "^4.0.0" unist-util-visit-parents@^6.0.0: - version "6.0.1" - resolved "https://registry.yarnpkg.com/unist-util-visit-parents/-/unist-util-visit-parents-6.0.1.tgz#4d5f85755c3b8f0dc69e21eca5d6d82d22162815" - integrity sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw== + version "6.0.2" + resolved "https://registry.yarnpkg.com/unist-util-visit-parents/-/unist-util-visit-parents-6.0.2.tgz#777df7fb98652ce16b4b7cd999d0a1a40efa3a02" + integrity sha512-goh1s1TBrqSqukSc8wrjwWhL0hiJxgA8m4kFxGlQ+8FYQ3C/m11FcTs4YYem7V664AhHVvgoQLk890Ssdsr2IQ== dependencies: "@types/unist" "^3.0.0" unist-util-is "^6.0.0" @@ -25907,10 +21914,10 @@ upath@^1.1.1: resolved "https://registry.yarnpkg.com/upath/-/upath-1.2.0.tgz#8f66dbcd55a883acdae4408af8b035a5044c1894" integrity sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg== -update-browserslist-db@^1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.1.3.tgz#348377dd245216f9e7060ff50b15a1b740b75420" - integrity sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw== +update-browserslist-db@^1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.1.4.tgz#7802aa2ae91477f255b86e0e46dbc787a206ad4a" + integrity sha512-q0SPT4xyU84saUX+tomz1WLkxUbuaJnR1xWt17M7fJtEJigJeWUNGUqrauFXsHnqev9y9JTRGwk13tFBuKby4A== dependencies: escalade "^3.2.0" picocolors "^1.1.1" @@ -25982,7 +21989,7 @@ util.promisify@1.0.0: define-properties "^1.1.2" object.getownpropertydescriptors "^2.0.3" -util@^0.10.3, util@^0.10.4: +util@^0.10.4: version "0.10.4" resolved "https://registry.yarnpkg.com/util/-/util-0.10.4.tgz#3aa0125bfe668a4672de58857d3ace27ecb76901" integrity sha512-0Pm9hTQ3se5ll1XihRic3FDIku70C+iHUdT/W926rSgHV5QgXsYbKZN8MSC3tJtSkhuROzvsQjAaFENRXr+19A== @@ -26001,7 +22008,7 @@ utila@~0.4: resolved "https://registry.yarnpkg.com/utila/-/utila-0.4.0.tgz#8a16a05d445657a3aea5eecc5b12a4fa5379772c" integrity sha512-Z0DbgELS9/L/75wZbro8xAnT50pBVFQZ+hUEueGDU5FN51YSCYM+jdxsfCiHjwNP/4LCDD0i/graKpeBnOXKRA== -utility-types@^3.10.0, utility-types@^3.11.0: +utility-types@^3.10.0: version "3.11.0" resolved "https://registry.yarnpkg.com/utility-types/-/utility-types-3.11.0.tgz#607c40edb4f258915e901ea7995607fdf319424c" integrity sha512-6Z7Ma2aVEWisaL6TvBCy7P8rm2LQoPv6dJ7ecIaIixHcwfbJ0x7mWdbcwlIM5IGQxPZSFYeqRCqlOOeKoJYMkw== @@ -26041,11 +22048,6 @@ v8-compile-cache@2.3.0: resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz#2de19618c66dc247dcfb6f99338035d8245a2cee" integrity sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA== -v8-compile-cache@^2.0.3: - version "2.4.0" - resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.4.0.tgz#cdada8bec61e15865f05d097c5f4fd30e94dc128" - integrity sha512-ocyWc3bAHBB/guyqJQVI5o4BZkPhznPYUG2ea80Gond/BgNWpap8TOmLSeeQG7bnh2KMISxskdADG59j7zruhw== - v8-to-istanbul@^8.1.0: version "8.1.1" resolved "https://registry.yarnpkg.com/v8-to-istanbul/-/v8-to-istanbul-8.1.1.tgz#77b752fd3975e31bbcef938f85e9bd1c7a8d60ed" @@ -26055,7 +22057,7 @@ v8-to-istanbul@^8.1.0: convert-source-map "^1.6.0" source-map "^0.7.3" -v8-to-istanbul@^9.0.0, v8-to-istanbul@^9.0.1: +v8-to-istanbul@^9.0.0: version "9.3.0" resolved "https://registry.yarnpkg.com/v8-to-istanbul/-/v8-to-istanbul-9.3.0.tgz#b9572abfa62bd556c16d75fdebc1a411d5ff3175" integrity sha512-kiGUalWN+rgBJ/1OHZsBtU4rXZOfj/7rKQxULKlIzwzQSvMJUUNgPwJEEh7gU6xEVxC0ahoOBvN2YI8GH6FNgA== @@ -26165,21 +22167,6 @@ void-elements@3.1.0: resolved "https://registry.yarnpkg.com/void-elements/-/void-elements-3.1.0.tgz#614f7fbf8d801f0bb5f0661f5b2f5785750e4f09" integrity sha512-Dhxzh5HZuiHQhbvTW9AMetFfBHDMYpo23Uo9btPXgdYP+3T5S+p+jgNy7spra+veYhBP2dCSgxR/i2Y02h5/6w== -vscode-oniguruma@^1.6.1, vscode-oniguruma@^1.7.0: - version "1.7.0" - resolved "https://registry.yarnpkg.com/vscode-oniguruma/-/vscode-oniguruma-1.7.0.tgz#439bfad8fe71abd7798338d1cd3dc53a8beea94b" - integrity sha512-L9WMGRfrjOhgHSdOYgCt/yRMsXzLDJSL7BPrOZt73gU0iWO4mpqzqQzOz5srxqTvMBaR0XZTSrVWo4j55Rc6cA== - -vscode-textmate@5.2.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/vscode-textmate/-/vscode-textmate-5.2.0.tgz#01f01760a391e8222fe4f33fbccbd1ad71aed74e" - 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: version "1.0.2" resolved "https://registry.yarnpkg.com/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz#0a89cdf5cc15822df9c360543676963e0cc308cd" @@ -26201,25 +22188,13 @@ w3c-xmlserializer@^5.0.0: dependencies: xml-name-validator "^5.0.0" -walker@^1.0.7, walker@^1.0.8, walker@~1.0.5: +walker@^1.0.7, walker@~1.0.5: version "1.0.8" resolved "https://registry.yarnpkg.com/walker/-/walker-1.0.8.tgz#bd498db477afe573dc04185f011d3ab8a8d7653f" integrity sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ== dependencies: makeerror "1.0.12" -wasm-ast-types@^0.26.4: - version "0.26.4" - resolved "https://registry.yarnpkg.com/wasm-ast-types/-/wasm-ast-types-0.26.4.tgz#cade0616c7158a0d05df8d6b8cac5cc098385fd1" - integrity sha512-bMxkQzc/+e7s5W+EBfurl/Y7KnTm0YPeg/cXjyio3PHULKWQULMREgyuJXJWaIa+8sKI1+OI61YeFSJBilm9YQ== - dependencies: - "@babel/runtime" "^7.18.9" - "@babel/types" "7.18.10" - "@jest/transform" "28.1.3" - ast-stringify "0.1.0" - case "1.6.3" - deepmerge "4.2.2" - watchpack-chokidar2@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/watchpack-chokidar2/-/watchpack-chokidar2-2.0.1.tgz#38500072ee6ece66f3769936950ea1771be1c957" @@ -26260,31 +22235,16 @@ wcwidth@^1.0.0, wcwidth@^1.0.1: dependencies: defaults "^1.0.3" -weak-lru-cache@^1.2.2: - version "1.2.2" - resolved "https://registry.yarnpkg.com/weak-lru-cache/-/weak-lru-cache-1.2.2.tgz#fdbb6741f36bae9540d12f480ce8254060dccd19" - integrity sha512-DEAoo25RfSYMuTGc9vPJzZcZullwIqRDSI9LOy+fkCJPi6hykCnfKaXTuPBDuXAUcqHXyOgFtHNp/kB2FjYHbw== - web-namespaces@^1.0.0: version "1.1.4" resolved "https://registry.yarnpkg.com/web-namespaces/-/web-namespaces-1.1.4.tgz#bc98a3de60dadd7faefc403d1076d529f5e030ec" integrity sha512-wYxSGajtmoP4WxfejAPIr4l0fVh+jeMXZb08wNc0tMg6xsfZXj3cECqIK0G7ZAqUq0PP8WlMDtaOGVBTAWztNw== -web-streams-polyfill@^3.0.3: - version "3.3.3" - resolved "https://registry.yarnpkg.com/web-streams-polyfill/-/web-streams-polyfill-3.3.3.tgz#2073b91a2fdb1fbfbd401e7de0ac9f8214cecb4b" - integrity sha512-d2JWLCivmZYTSIoge9MsgFCZrt571BikcWGYkjC1khllbTeDlGqZ2D8vD8E/lJa8WGWbb7Plm8/XJYV7IJHZZw== - webidl-conversions@^3.0.0: version "3.0.1" resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871" integrity sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ== -webidl-conversions@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-4.0.2.tgz#a855980b1f0b6b359ba1d5d9fb39ae941faa63ad" - integrity sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg== - webidl-conversions@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-5.0.0.tgz#ae59c8a00b121543a2acc65c0434f57b0fc11aff" @@ -26499,10 +22459,10 @@ webpack@4: watchpack "^1.7.4" webpack-sources "^1.4.1" -"webpack@>=4.43.0 <6.0.0", webpack@^5.75.0, webpack@^5.88.1, webpack@^5.88.2, webpack@^5.9.0: - version "5.102.0" - resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.102.0.tgz#7a2416e6da356c35f1fb35333d2f5cee0133e953" - integrity sha512-hUtqAR3ZLVEYDEABdBioQCIqSoguHbFn1K7WlPPWSuXmx0031BD73PSE35jKyftdSh4YLDoQNgK4pqBt5Q82MA== +"webpack@>=4.43.0 <6.0.0", webpack@^5.75.0, webpack@^5.88.2, webpack@^5.9.0: + version "5.102.1" + resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.102.1.tgz#1003a3024741a96ba99c37431938bf61aad3d988" + integrity sha512-7h/weGm9d/ywQ6qzJ+Xy+r9n/3qgp/thalBbpOi5i223dPXKi04IBtqPN9nTd+jBc7QKfvDbaBnFipYp4sJAUQ== dependencies: "@types/eslint-scope" "^3.7.7" "@types/estree" "^1.0.8" @@ -26512,7 +22472,7 @@ webpack@4: "@webassemblyjs/wasm-parser" "^1.14.1" acorn "^8.15.0" acorn-import-phases "^1.0.3" - browserslist "^4.24.5" + browserslist "^4.26.3" chrome-trace-event "^1.0.2" enhanced-resolve "^5.17.3" es-module-lexer "^1.2.1" @@ -26524,8 +22484,8 @@ webpack@4: loader-runner "^4.2.0" mime-types "^2.1.27" neo-async "^2.6.2" - schema-utils "^4.3.2" - tapable "^2.2.3" + schema-utils "^4.3.3" + tapable "^2.3.0" terser-webpack-plugin "^5.3.11" watchpack "^2.4.4" webpack-sources "^3.3.3" @@ -26568,7 +22528,7 @@ whatwg-mimetype@^4.0.0: resolved "https://registry.yarnpkg.com/whatwg-mimetype/-/whatwg-mimetype-4.0.0.tgz#bc1bf94a985dc50388d54a9258ac405c3ca2fc0a" integrity sha512-QaKxh0eNIi2mE9p2vEdzfagOKHCcj1pJ56EEHGQOVxp8r9/iszLUUV7v89x9O1p/T+NlTM5W7jW6+cz4Fq1YVg== -whatwg-url@^15.0.0: +whatwg-url@^15.0.0, whatwg-url@^15.1.0: version "15.1.0" resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-15.1.0.tgz#5c433439b9a5789eeb3806bbd0da89a8bd40b8d7" integrity sha512-2ytDk0kiEj/yu90JOAp44PVPUkO9+jVhyf+SybKlRHSDlvOOZhdPIrr7xTH64l4WixO2cP+wQIcgujkGBPPz6g== @@ -26584,7 +22544,7 @@ whatwg-url@^5.0.0: tr46 "~0.0.3" webidl-conversions "^3.0.0" -whatwg-url@^8.0.0, whatwg-url@^8.4.0, whatwg-url@^8.5.0: +whatwg-url@^8.0.0, whatwg-url@^8.5.0: version "8.7.0" resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-8.7.0.tgz#656a78e510ff8f3937bc0bcbe9f5c0ac35941b77" integrity sha512-gAojqb/m9Q8a5IV96E3fHJM70AzCkgt4uXYX2O7EmuyOnLrViCQlsEBmF9UQIu3/aeAIp2U17rtbpZWNntQqdg== @@ -26710,14 +22670,6 @@ worker-farm@^1.7.0: dependencies: errno "~0.1.7" -worker-loader@^3.0.8: - version "3.0.8" - resolved "https://registry.yarnpkg.com/worker-loader/-/worker-loader-3.0.8.tgz#5fc5cda4a3d3163d9c274a4e3a811ce8b60dbb37" - integrity sha512-XQyQkIFeRVC7f7uRhFdNMe/iJOdO6zxAaR3EWbDp45v3mDhrTi+++oswKNxShUNjPC/1xUp5DB29YKLhFo129g== - dependencies: - loader-utils "^2.0.0" - schema-utils "^3.0.0" - worker-rpc@^0.1.0: version "0.1.1" resolved "https://registry.yarnpkg.com/worker-rpc/-/worker-rpc-0.1.1.tgz#cb565bd6d7071a8f16660686051e969ad32f54d5" @@ -26725,11 +22677,6 @@ worker-rpc@^0.1.0: dependencies: microevent.ts "~0.1.1" -workerpool@^6.5.1: - version "6.5.1" - resolved "https://registry.yarnpkg.com/workerpool/-/workerpool-6.5.1.tgz#060f73b39d0caf97c6db64da004cd01b4c099544" - integrity sha512-Fs4dNYcsdpYSAfVxhnl1L5zTksjvOJxtC5hzMNl+1t9B8hTJTdKDyZ5ju7ztgPy+ft9tBFXoOlDNiOT9WUXZlA== - world-countries@^5.0.0: version "5.1.0" resolved "https://registry.yarnpkg.com/world-countries/-/world-countries-5.1.0.tgz#ea6b6156d9ef80c9ae6ff1e238d11b7ebd90351f" @@ -26803,14 +22750,6 @@ write-file-atomic@^3.0.0: signal-exit "^3.0.2" typedarray-to-buffer "^3.1.5" -write-file-atomic@^4.0.1, write-file-atomic@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-4.0.2.tgz#a9df01ae5b77858a027fd2e80768ee433555fcfd" - integrity sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg== - dependencies: - imurmurhash "^0.1.4" - signal-exit "^3.0.7" - write-json-file@^3.2.0: version "3.2.0" resolved "https://registry.yarnpkg.com/write-json-file/-/write-json-file-3.2.0.tgz#65bbdc9ecd8a1458e15952770ccbadfcff5fe62a" @@ -26837,18 +22776,11 @@ ws@^7, ws@^7.4.6: resolved "https://registry.yarnpkg.com/ws/-/ws-7.5.10.tgz#58b5c20dc281633f6c19113f39b349bd8bd558d9" integrity sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ== -ws@^8.13.0, ws@^8.14.2, ws@^8.17.1, ws@^8.18.2, ws@^8.2.3, ws@~8.18.0: +ws@^8.13.0, ws@^8.18.3, ws@^8.2.3: version "8.18.3" resolved "https://registry.yarnpkg.com/ws/-/ws-8.18.3.tgz#b56b88abffde62791c639170400c93dcb0c95472" integrity sha512-PEIGCY5tSlUt50cqyMXfCzX+oOPqN0vuGqWzbcJ2xvnkzkq46oOpz7dQaTDBdfICb4N14+GARUDw2XV2N4tvzg== -wsl-utils@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/wsl-utils/-/wsl-utils-0.1.0.tgz#8783d4df671d4d50365be2ee4c71917a0557baab" - integrity sha512-h3Fbisa2nKGPxCpm89Hk33lBLsnaGBvctQopaBSOW/uIs6FTe1ATyAnKFJrzVs9vpGdsTe73WF3V4lIsk4Gacw== - dependencies: - is-wsl "^3.1.0" - x-default-browser@^0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/x-default-browser/-/x-default-browser-0.4.0.tgz#70cf0da85da7c0ab5cb0f15a897f2322a6bdd481" @@ -26937,16 +22869,6 @@ yargs-parser@21.1.1, yargs-parser@^21.1.1: resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-21.1.1.tgz#9096bceebf990d21bb31fa9516e0ede294a77d35" integrity sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw== -yargs-unparser@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/yargs-unparser/-/yargs-unparser-2.0.0.tgz#f131f9226911ae5d9ad38c432fe809366c2325eb" - integrity sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA== - dependencies: - camelcase "^6.0.0" - decamelize "^4.0.0" - flat "^5.0.2" - is-plain-obj "^2.1.0" - yargs@16.2.0, yargs@^16.2.0: version "16.2.0" resolved "https://registry.yarnpkg.com/yargs/-/yargs-16.2.0.tgz#1c82bf0f6b6a66eafce7ef30e376f49a12477f66" @@ -26960,7 +22882,7 @@ yargs@16.2.0, yargs@^16.2.0: y18n "^5.0.5" yargs-parser "^20.2.2" -yargs@^17.3.1, yargs@^17.6.2: +yargs@^17.6.2: version "17.7.2" resolved "https://registry.yarnpkg.com/yargs/-/yargs-17.7.2.tgz#991df39aca675a192b816e1e0363f9d75d2aa269" integrity sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w== @@ -26973,11 +22895,6 @@ yargs@^17.3.1, yargs@^17.6.2: y18n "^5.0.5" yargs-parser "^21.1.1" -yn@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/yn/-/yn-2.0.0.tgz#e5adabc8acf408f6385fc76495684c88e6af689a" - integrity sha512-uTv8J/wiWTgUTg+9vLTi//leUl5vDQS6uii/emeTb2ssY7vl6QWf2fFbIIGjnhjvbdKlU0ed7QPgY1htTC86jQ== - yocto-queue@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b"