From 2146a78c0c3033652e06c50764259258c1e9b81a Mon Sep 17 00:00:00 2001 From: Thibault Martinez Date: Fri, 20 Oct 2023 18:20:43 +0200 Subject: [PATCH 01/91] Fix some cargo docs issues (#1477) --- sdk/src/client/mod.rs | 2 +- sdk/src/client/secret/mod.rs | 4 ++-- sdk/src/types/block/output/alias.rs | 2 +- sdk/src/types/block/output/basic.rs | 2 +- sdk/src/types/block/output/foundry.rs | 2 +- sdk/src/types/block/output/nft.rs | 2 +- 6 files changed, 7 insertions(+), 7 deletions(-) diff --git a/sdk/src/client/mod.rs b/sdk/src/client/mod.rs index 7f6d79f8a3..b759247f98 100644 --- a/sdk/src/client/mod.rs +++ b/sdk/src/client/mod.rs @@ -3,7 +3,7 @@ //! A general purpose IOTA client for interaction with the IOTA network (Tangle) //! -//! High-level functions are accessible via the [`Client`][client::Client]. +//! High-level functions are accessible via the [`Client`]. //! //! ## Sending a block without a payload //! ```no_run diff --git a/sdk/src/client/secret/mod.rs b/sdk/src/client/secret/mod.rs index 25f3738c2b..fbbc311def 100644 --- a/sdk/src/client/secret/mod.rs +++ b/sdk/src/client/secret/mod.rs @@ -86,10 +86,10 @@ pub trait SecretManage: Send + Sync { options: impl Into> + Send, ) -> Result, Self::Error>; - /// Signs msg using the given [`Chain`] using Ed25519. + /// Signs msg using the given [`Bip44`] using Ed25519. async fn sign_ed25519(&self, msg: &[u8], chain: Bip44) -> Result; - /// Signs msg using the given [`Chain`] using Secp256k1. + /// Signs msg using the given [`Bip44`] using Secp256k1. async fn sign_secp256k1_ecdsa( &self, msg: &[u8], diff --git a/sdk/src/types/block/output/alias.rs b/sdk/src/types/block/output/alias.rs index fb2cdb10a4..5315fffe53 100644 --- a/sdk/src/types/block/output/alias.rs +++ b/sdk/src/types/block/output/alias.rs @@ -350,7 +350,7 @@ pub struct AliasOutput { } impl AliasOutput { - /// The [`Output`](crate::types::block::output::Output) kind of an [`AliasOutput`]. + /// The [`Output`] kind of an [`AliasOutput`]. pub const KIND: u8 = 4; /// Maximum possible length in bytes of the state metadata. pub const STATE_METADATA_LENGTH_MAX: u16 = 8192; diff --git a/sdk/src/types/block/output/basic.rs b/sdk/src/types/block/output/basic.rs index 899f9a6002..1fa16b1c25 100644 --- a/sdk/src/types/block/output/basic.rs +++ b/sdk/src/types/block/output/basic.rs @@ -215,7 +215,7 @@ pub struct BasicOutput { } impl BasicOutput { - /// The [`Output`](crate::types::block::output::Output) kind of an [`BasicOutput`]. + /// The [`Output`] kind of an [`BasicOutput`]. pub const KIND: u8 = 3; /// The set of allowed [`UnlockCondition`]s for an [`BasicOutput`]. diff --git a/sdk/src/types/block/output/foundry.rs b/sdk/src/types/block/output/foundry.rs index dfca41bec1..2bfee23893 100644 --- a/sdk/src/types/block/output/foundry.rs +++ b/sdk/src/types/block/output/foundry.rs @@ -291,7 +291,7 @@ pub struct FoundryOutput { } impl FoundryOutput { - /// The [`Output`](crate::types::block::output::Output) kind of a [`FoundryOutput`]. + /// The [`Output`] kind of a [`FoundryOutput`]. pub const KIND: u8 = 5; /// The set of allowed [`UnlockCondition`]s for a [`FoundryOutput`]. pub const ALLOWED_UNLOCK_CONDITIONS: UnlockConditionFlags = UnlockConditionFlags::IMMUTABLE_ALIAS_ADDRESS; diff --git a/sdk/src/types/block/output/nft.rs b/sdk/src/types/block/output/nft.rs index d7f085e3bc..de92ae877a 100644 --- a/sdk/src/types/block/output/nft.rs +++ b/sdk/src/types/block/output/nft.rs @@ -262,7 +262,7 @@ pub struct NftOutput { } impl NftOutput { - /// The [`Output`](crate::types::block::output::Output) kind of an [`NftOutput`]. + /// The [`Output`] kind of an [`NftOutput`]. pub const KIND: u8 = 6; /// The set of allowed [`UnlockCondition`]s for an [`NftOutput`]. pub const ALLOWED_UNLOCK_CONDITIONS: UnlockConditionFlags = UnlockConditionFlags::ADDRESS From cb2e6f91162e7c3c6a0253c81c1ca44275350693 Mon Sep 17 00:00:00 2001 From: Thibault Martinez Date: Fri, 20 Oct 2023 19:43:06 +0200 Subject: [PATCH 02/91] Fix python env gitignore (#1480) * Add python env to .gitignore * Fix --- bindings/python/.gitignore | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bindings/python/.gitignore b/bindings/python/.gitignore index a0569d6c2b..8794ff83d7 100644 --- a/bindings/python/.gitignore +++ b/bindings/python/.gitignore @@ -2,4 +2,4 @@ build dist iota_sdk.egg-info .tox -iota_sdk_venv \ No newline at end of file +env \ No newline at end of file From 3a5f642a22bba4ad87d8f1e56d3771bc3e36b6ab Mon Sep 17 00:00:00 2001 From: DaughterOfMars Date: Fri, 20 Oct 2023 13:49:39 -0400 Subject: [PATCH 03/91] Add doc CI lint (#1479) * add doc lint * needs libudev apparently * fix all docs --- .github/workflows/lint.yml | 24 +++++++++++++++++++ .../input_selection/automatic.rs | 2 +- .../block_builder/input_selection/manual.rs | 2 +- sdk/src/client/stronghold/secret.rs | 17 +++++++------ .../payload/milestone/option/receipt/mod.rs | 2 +- sdk/src/types/block/rand/output/mod.rs | 10 ++++---- .../operations/syncing/addresses/mod.rs | 2 +- 7 files changed, 43 insertions(+), 16 deletions(-) diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml index 360adc3fde..26848ba200 100644 --- a/.github/workflows/lint.yml +++ b/.github/workflows/lint.yml @@ -119,6 +119,30 @@ jobs: - name: Run cargo-license-template run: cargo ci-license + check-docs: + name: Check Documentation + runs-on: ubuntu-latest + env: + RUSTDOCFLAGS: -D warnings + + steps: + - name: Checkout the Source Code + uses: actions/checkout@v3 + + - name: Set up Rust + uses: ./.github/actions/setup-rust + with: + toolchain: nightly + components: rustfmt + + - name: Install Required Dependencies + run: | + sudo apt-get update + sudo apt-get install libudev-dev libusb-1.0-0-dev + + - name: Run cargo-doc + run: cargo ci-doc + audit: name: Perform Security Audit runs-on: ubuntu-latest diff --git a/sdk/src/client/api/block_builder/input_selection/automatic.rs b/sdk/src/client/api/block_builder/input_selection/automatic.rs index 53f0606b45..3c3adebcd0 100644 --- a/sdk/src/client/api/block_builder/input_selection/automatic.rs +++ b/sdk/src/client/api/block_builder/input_selection/automatic.rs @@ -61,7 +61,7 @@ impl<'a> ClientBlockBuilder<'a> { } /// Searches inputs for provided outputs, by requesting the outputs from the account addresses or for - /// alias/foundry/nft outputs get the latest state with their alias/nft id. Forwards to [try_select_inputs()]. + /// alias/foundry/nft outputs get the latest state with their alias/nft id. Forwards to input selection. pub(crate) async fn get_inputs(&self, protocol_parameters: &ProtocolParameters) -> Result { log::debug!("[get_inputs]"); diff --git a/sdk/src/client/api/block_builder/input_selection/manual.rs b/sdk/src/client/api/block_builder/input_selection/manual.rs index d2ad690d2a..62288b45d0 100644 --- a/sdk/src/client/api/block_builder/input_selection/manual.rs +++ b/sdk/src/client/api/block_builder/input_selection/manual.rs @@ -24,7 +24,7 @@ use crate::{ impl<'a> ClientBlockBuilder<'a> { /// If custom inputs are provided we check if they are unspent, get the balance and search the Ed25519 addresses for /// them with the provided input_range so we can later sign them. - /// Forwards to [try_select_inputs()] with all inputs in `mandatory_inputs`, so they will all be included in the + /// Forwards to input selection with all inputs in `mandatory_inputs`, so they will all be included in the /// transaction, even if not required for the provided outputs. pub(crate) async fn get_custom_inputs( &self, diff --git a/sdk/src/client/stronghold/secret.rs b/sdk/src/client/stronghold/secret.rs index bbba7e84cc..d0e19d4190 100644 --- a/sdk/src/client/stronghold/secret.rs +++ b/sdk/src/client/stronghold/secret.rs @@ -324,7 +324,8 @@ impl SecretManagerConfig for StrongholdAdapter { /// Private methods for the secret manager implementation. impl StrongholdAdapter { - /// Execute [Procedure::BIP39Recover] in Stronghold to put a mnemonic into the Stronghold vault. + /// Execute [BIP39Recover](procedures::BIP39Recover) procedure in Stronghold to put a mnemonic into the Stronghold + /// vault. async fn bip39_recover(&self, mnemonic: Mnemonic, passphrase: Passphrase, output: Location) -> Result<(), Error> { self.stronghold .lock() @@ -339,7 +340,8 @@ impl StrongholdAdapter { Ok(()) } - /// Execute [Procedure::SLIP10Derive] in Stronghold to derive a SLIP-10 private key in the Stronghold vault. + /// Execute [Slip10Derive](procedures::Slip10Derive) procedure in Stronghold to derive a SLIP-10 private key in the + /// Stronghold vault. async fn slip10_derive( &self, curve: Curve, @@ -386,7 +388,7 @@ impl StrongholdAdapter { Ok(()) } - /// Execute [Procedure::PublicKey] in Stronghold to get an Ed25519 public key from the SLIP-10 + /// Execute [PublicKey](procedures::PublicKey) procedure in Stronghold to get an Ed25519 public key from the SLIP-10 /// private key located in `private_key`. async fn ed25519_public_key(&self, private_key: Location) -> Result { Ok(ed25519::PublicKey::try_from_bytes( @@ -403,7 +405,8 @@ impl StrongholdAdapter { )?) } - /// Execute [Procedure::Ed25519Sign] in Stronghold to sign `msg` with `private_key` stored in the Stronghold vault. + /// Execute [Ed25519Sign](procedures::Ed25519Sign) procedure in Stronghold to sign `msg` with `private_key` stored + /// in the Stronghold vault. async fn ed25519_sign(&self, private_key: Location, msg: &[u8]) -> Result { Ok(ed25519::Signature::from_bytes( self.stronghold @@ -417,8 +420,8 @@ impl StrongholdAdapter { )) } - /// Execute [Procedure::Secp256k1EcdsaSign] in Stronghold to sign `msg` with `private_key` stored in the Stronghold - /// vault. + /// Execute [Secp256k1EcdsaSign](procedures::Secp256k1EcdsaSign) procedure in Stronghold to sign `msg` with + /// `private_key` stored in the Stronghold vault. async fn secp256k1_ecdsa_sign( &self, private_key: Location, @@ -438,7 +441,7 @@ impl StrongholdAdapter { )?) } - /// Execute [Procedure::PublicKey] in Stronghold to get a Secp256k1Ecdsa public key from the + /// Execute [PublicKey](procedures::PublicKey) procedure in Stronghold to get a Secp256k1Ecdsa public key from the /// SLIP-10 private key located in `private_key`. async fn secp256k1_ecdsa_public_key(&self, private_key: Location) -> Result { let bytes = self diff --git a/sdk/src/types/block/payload/milestone/option/receipt/mod.rs b/sdk/src/types/block/payload/milestone/option/receipt/mod.rs index 3cc4bbd21f..166ed6b066 100644 --- a/sdk/src/types/block/payload/milestone/option/receipt/mod.rs +++ b/sdk/src/types/block/payload/milestone/option/receipt/mod.rs @@ -81,7 +81,7 @@ impl ReceiptMilestoneOption { &self.funds } - /// The [`TreasuryTransactionPayload`](crate::types::block::payload::treasury_transaction::TreasuryTransactionPayload) used + /// The [`TreasuryTransactionPayload`] used /// to fund the funds of a [`ReceiptMilestoneOption`]. pub fn transaction(&self) -> &TreasuryTransactionPayload { if let Payload::TreasuryTransaction(ref transaction) = self.transaction { diff --git a/sdk/src/types/block/rand/output/mod.rs b/sdk/src/types/block/rand/output/mod.rs index fd7dfff44a..12e8ed76e1 100644 --- a/sdk/src/types/block/rand/output/mod.rs +++ b/sdk/src/types/block/rand/output/mod.rs @@ -43,7 +43,7 @@ pub fn rand_treasury_output(token_supply: u64) -> TreasuryOutput { TreasuryOutput::new(rand_number_range(0..token_supply), token_supply).unwrap() } -/// Generates a random [`BasicOutput`](BasicOutput). +/// Generates a random [`BasicOutput`]. pub fn rand_basic_output(token_supply: u64) -> BasicOutput { // TODO: Add `NativeTokens` BasicOutput::build_with_amount(rand_number_range(Output::AMOUNT_MIN..token_supply)) @@ -53,12 +53,12 @@ pub fn rand_basic_output(token_supply: u64) -> BasicOutput { .unwrap() } -/// Generates a random [`AliasId`](AliasId). +/// Generates a random [`AliasId`]. pub fn rand_alias_id() -> AliasId { AliasId::from(rand_bytes_array()) } -/// Generates a random [`AliasOutput`](AliasOutput). +/// Generates a random [`AliasOutput`]. pub fn rand_alias_output(token_supply: u64) -> AliasOutput { // We need to make sure that `AliasId` and `Address` don't match. let alias_id = rand_alias_id(); @@ -80,7 +80,7 @@ pub fn rand_token_scheme() -> TokenScheme { TokenScheme::Simple(SimpleTokenScheme::new(minted, melted, max).unwrap()) } -/// Generates a random [`FoundryOutput`](FoundryOutput). +/// Generates a random [`FoundryOutput`]. pub fn rand_foundry_output(token_supply: u64) -> FoundryOutput { FoundryOutput::build_with_amount( rand_number_range(Output::AMOUNT_MIN..token_supply), @@ -93,7 +93,7 @@ pub fn rand_foundry_output(token_supply: u64) -> FoundryOutput { .unwrap() } -/// Generates a random [`NftOutput`](NftOutput). +/// Generates a random [`NftOutput`]. pub fn rand_nft_output(token_supply: u64) -> NftOutput { // We need to make sure that `NftId` and `Address` don't match. let nft_id = NftId::from(rand_bytes_array()); diff --git a/sdk/src/wallet/account/operations/syncing/addresses/mod.rs b/sdk/src/wallet/account/operations/syncing/addresses/mod.rs index 3fbbf187e1..73606086bd 100644 --- a/sdk/src/wallet/account/operations/syncing/addresses/mod.rs +++ b/sdk/src/wallet/account/operations/syncing/addresses/mod.rs @@ -17,7 +17,7 @@ where { /// Get the addresses that should be synced with the current known unspent output ids /// Also adds alias and nft addresses from unspent alias or nft outputs that have no Timelock, Expiration or - /// StorageDepositReturn [`UnlockCondition`] + /// StorageDepositReturn [`UnlockCondition`](crate::types::block::output::UnlockCondition) pub(crate) async fn get_addresses_to_sync( &self, options: &SyncOptions, From 1095894bcba5a536a0ee8d44b0a459ca2573d00d Mon Sep 17 00:00:00 2001 From: Thibault Martinez Date: Mon, 23 Oct 2023 09:19:19 +0200 Subject: [PATCH 04/91] Some clippy fixes (#1485) --- bindings/python/src/error.rs | 16 +++++------ bindings/wasm/src/wallet.rs | 27 +++++++++++++------ cli/Cargo.toml | 3 +++ cli/src/command/wallet.rs | 6 ++--- cli/src/error.rs | 2 +- cli/src/helper.rs | 2 +- sdk/examples/client/07_mqtt.rs | 2 +- .../offline_signing/0_address_generation.rs | 2 +- .../1_transaction_preparation.rs | 4 +-- .../offline_signing/2_transaction_signing.rs | 6 +++-- .../client/offline_signing/3_send_block.rs | 2 +- .../client/output/build_alias_output.rs | 4 +-- .../client/output/build_basic_output.rs | 2 +- .../client/output/build_nft_output.rs | 2 +- sdk/examples/client/output/native_tokens.rs | 6 ++--- sdk/src/client/node_api/mqtt/types.rs | 4 --- sdk/src/client/secret/mod.rs | 1 - sdk/src/wallet/account/mod.rs | 6 ++--- sdk/tests/client/common/mod.rs | 3 ++- sdk/tests/client/signing/alias.rs | 6 ++--- sdk/tests/client/signing/basic.rs | 6 ++--- sdk/tests/client/signing/mod.rs | 2 +- sdk/tests/client/signing/nft.rs | 2 +- sdk/tests/types/unlock/mod.rs | 2 +- sdk/tests/wallet/accounts.rs | 4 +-- sdk/tests/wallet/common/mod.rs | 2 +- sdk/tests/wallet/wallet_storage.rs | 4 +-- 27 files changed, 70 insertions(+), 58 deletions(-) diff --git a/bindings/python/src/error.rs b/bindings/python/src/error.rs index 21698c988a..83e35b6685 100644 --- a/bindings/python/src/error.rs +++ b/bindings/python/src/error.rs @@ -17,7 +17,7 @@ pub struct Error { impl From for Error { fn from(err: serde_json::Error) -> Self { - Error { + Self { error: PyErr::new::(err.to_string()), } } @@ -31,7 +31,7 @@ impl From for PyErr { impl From for Error { fn from(err: std::io::Error) -> Self { - Error { + Self { error: PyErr::new::(err.to_string()), } } @@ -39,7 +39,7 @@ impl From for Error { impl From for Error { fn from(err: iota_sdk_bindings_core::iota_sdk::types::block::Error) -> Self { - Error { + Self { error: PyErr::new::(err.to_string()), } } @@ -47,7 +47,7 @@ impl From for Error { impl From for Error { fn from(err: iota_sdk_bindings_core::Error) -> Self { - Error { + Self { error: PyErr::new::(err.to_string()), } } @@ -55,7 +55,7 @@ impl From for Error { impl From for Error { fn from(err: iota_sdk_bindings_core::iota_sdk::client::Error) -> Self { - Error { + Self { error: PyErr::new::(err.to_string()), } } @@ -63,7 +63,7 @@ impl From for Error { impl From for Error { fn from(err: iota_sdk_bindings_core::iota_sdk::client::mqtt::Error) -> Self { - Error { + Self { error: PyErr::new::(err.to_string()), } } @@ -71,7 +71,7 @@ impl From for Error { impl From for Error { fn from(err: iota_sdk_bindings_core::iota_sdk::wallet::Error) -> Self { - Error { + Self { error: PyErr::new::(err.to_string()), } } @@ -79,7 +79,7 @@ impl From for Error { impl From for Error { fn from(err: Infallible) -> Self { - Error { + Self { error: PyErr::new::(err.to_string()), } } diff --git a/bindings/wasm/src/wallet.rs b/bindings/wasm/src/wallet.rs index 0f4890af73..874f03042d 100644 --- a/bindings/wasm/src/wallet.rs +++ b/bindings/wasm/src/wallet.rs @@ -50,9 +50,10 @@ pub async fn destroy_wallet(method_handler: &WalletMethodHandler) -> Result<(), #[wasm_bindgen(js_name = getClientFromWallet)] pub async fn get_client(method_handler: &WalletMethodHandler) -> Result { - let wallet = method_handler.wallet.lock().await; - - let client = wallet + let client = method_handler + .wallet + .lock() + .await .as_ref() .ok_or_else(|| "wallet got destroyed".to_string())? .client() @@ -63,9 +64,10 @@ pub async fn get_client(method_handler: &WalletMethodHandler) -> Result Result { - let wallet = method_handler.wallet.lock().await; - - let secret_manager = wallet + let secret_manager = method_handler + .wallet + .lock() + .await .as_ref() .ok_or_else(|| "wallet got destroyed".to_string())? .get_secret_manager() @@ -79,10 +81,19 @@ pub async fn get_secret_manager(method_handler: &WalletMethodHandler) -> Result< /// Returns an error if the response itself is an error or panic. #[wasm_bindgen(js_name = callWalletMethodAsync)] pub async fn call_wallet_method_async(method: String, method_handler: &WalletMethodHandler) -> Result { - let wallet = method_handler.wallet.lock().await; let method: WalletMethod = serde_json::from_str(&method).map_err(|err| err.to_string())?; - let response = call_wallet_method(wallet.as_ref().expect("wallet got destroyed"), method).await; + let response = call_wallet_method( + method_handler + .wallet + .lock() + .await + .as_ref() + .expect("wallet got destroyed"), + method, + ) + .await; + match response { Response::Error(e) => Err(e.to_string().into()), Response::Panic(p) => Err(p.into()), diff --git a/cli/Cargo.toml b/cli/Cargo.toml index 6b5a52052c..41b234cd57 100644 --- a/cli/Cargo.toml +++ b/cli/Cargo.toml @@ -4,8 +4,11 @@ version = "1.1.0" authors = ["IOTA Stiftung"] edition = "2021" homepage = "https://iota.org" +repository = "https://github.com/iotaledger/iota-sdk" description = "Command line interface wallet application based on the IOTA SDK" license = "Apache-2.0" +keywords = ["iota", "tangle", "sdk", "cli", "wallet"] +categories = ["cryptography::cryptocurrencies"] [[bin]] name = "wallet" diff --git a/cli/src/command/wallet.rs b/cli/src/command/wallet.rs index 7d4c26f5a5..b9781880b5 100644 --- a/cli/src/command/wallet.rs +++ b/cli/src/command/wallet.rs @@ -256,7 +256,7 @@ pub async fn restore_command(storage_path: &Path, snapshot_path: &Path, backup_p let password = get_password("Stronghold password", false)?; let secret_manager = SecretManager::Stronghold( StrongholdSecretManager::builder() - .password(password.clone()) + .password(password) .build(snapshot_path)?, ); builder = builder.with_secret_manager(secret_manager); @@ -321,8 +321,8 @@ pub async fn sync_command(storage_path: &Path, snapshot_path: &Path) -> Result>, - password: impl Into>, + snapshot_path: impl Into> + Send, + password: impl Into> + Send, ) -> Result { let secret_manager = if let Some(password) = password.into() { let snapshot_path = snapshot_path.into(); diff --git a/cli/src/error.rs b/cli/src/error.rs index 6c6887a293..4d94fd45ff 100644 --- a/cli/src/error.rs +++ b/cli/src/error.rs @@ -35,7 +35,7 @@ pub enum Error { impl From for Error { fn from(error: ClientError) -> Self { - Error::Client(Box::new(error)) + Self::Client(Box::new(error)) } } diff --git a/cli/src/helper.rs b/cli/src/helper.rs index 5be5970080..0a0fe7b936 100644 --- a/cli/src/helper.rs +++ b/cli/src/helper.rs @@ -146,7 +146,7 @@ pub async fn generate_mnemonic( println!("{}", mnemonic.as_ref()); } if [1, 2].contains(&selected_choice) { - let file_path = output_file_name.unwrap_or(DEFAULT_MNEMONIC_FILE_PATH.to_string()); + let file_path = output_file_name.unwrap_or_else(|| DEFAULT_MNEMONIC_FILE_PATH.to_string()); write_mnemonic_to_file(&file_path, &mnemonic).await?; println_log_info!("Mnemonic has been written to '{file_path}'."); diff --git a/sdk/examples/client/07_mqtt.rs b/sdk/examples/client/07_mqtt.rs index eadff775ba..feea2da895 100644 --- a/sdk/examples/client/07_mqtt.rs +++ b/sdk/examples/client/07_mqtt.rs @@ -23,7 +23,7 @@ async fn main() -> Result<()> { let address: Bech32Address = std::env::args() .nth(2) - .unwrap_or("atoi1qzt0nhsf38nh6rs4p6zs5knqp6psgha9wsv74uajqgjmwc75ugupx3y7x0r".to_string()) + .unwrap_or_else(|| "atoi1qzt0nhsf38nh6rs4p6zs5knqp6psgha9wsv74uajqgjmwc75ugupx3y7x0r".to_string()) .parse()?; // Create a node client. diff --git a/sdk/examples/client/offline_signing/0_address_generation.rs b/sdk/examples/client/offline_signing/0_address_generation.rs index 1262e95a12..783224ff42 100644 --- a/sdk/examples/client/offline_signing/0_address_generation.rs +++ b/sdk/examples/client/offline_signing/0_address_generation.rs @@ -37,7 +37,7 @@ async fn main() -> Result<()> { Ok(()) } -async fn write_address_to_file(path: impl AsRef, address: &[Bech32Address]) -> Result<()> { +async fn write_address_to_file(path: impl AsRef + Send, address: &[Bech32Address]) -> Result<()> { use tokio::io::AsyncWriteExt; let json = serde_json::to_string_pretty(&address)?; diff --git a/sdk/examples/client/offline_signing/1_transaction_preparation.rs b/sdk/examples/client/offline_signing/1_transaction_preparation.rs index 81b9cedf55..bd5ed8cb70 100644 --- a/sdk/examples/client/offline_signing/1_transaction_preparation.rs +++ b/sdk/examples/client/offline_signing/1_transaction_preparation.rs @@ -67,7 +67,7 @@ async fn main() -> Result<()> { Ok(()) } -async fn read_addresses_from_file(path: impl AsRef) -> Result> { +async fn read_addresses_from_file(path: impl AsRef + Send) -> Result> { use tokio::io::AsyncReadExt; let mut file = tokio::fs::File::open(&path).await.expect("failed to open file"); @@ -78,7 +78,7 @@ async fn read_addresses_from_file(path: impl AsRef) -> Result, + path: impl AsRef + Send, prepared_transaction: &PreparedTransactionData, ) -> Result<()> { use tokio::io::AsyncWriteExt; diff --git a/sdk/examples/client/offline_signing/2_transaction_signing.rs b/sdk/examples/client/offline_signing/2_transaction_signing.rs index 74519986dd..fae203b491 100644 --- a/sdk/examples/client/offline_signing/2_transaction_signing.rs +++ b/sdk/examples/client/offline_signing/2_transaction_signing.rs @@ -49,7 +49,9 @@ async fn main() -> Result<()> { Ok(()) } -async fn read_prepared_transaction_from_file(path: impl AsRef) -> Result { +async fn read_prepared_transaction_from_file( + path: impl AsRef + Send, +) -> Result { use tokio::io::AsyncReadExt; let mut file = tokio::fs::File::open(&path).await.expect("failed to open file"); @@ -62,7 +64,7 @@ async fn read_prepared_transaction_from_file(path: impl AsRef) } async fn write_signed_transaction_to_file( - path: impl AsRef, + path: impl AsRef + Send, signed_transaction_data: &SignedTransactionData, ) -> Result<()> { use tokio::io::AsyncWriteExt; diff --git a/sdk/examples/client/offline_signing/3_send_block.rs b/sdk/examples/client/offline_signing/3_send_block.rs index b452bd8ec6..9f31b1c265 100644 --- a/sdk/examples/client/offline_signing/3_send_block.rs +++ b/sdk/examples/client/offline_signing/3_send_block.rs @@ -64,7 +64,7 @@ async fn main() -> Result<()> { Ok(()) } -async fn read_signed_transaction_from_file(path: impl AsRef) -> Result { +async fn read_signed_transaction_from_file(path: impl AsRef + Send) -> Result { use tokio::io::AsyncReadExt; let mut file = tokio::fs::File::open(path).await.expect("failed to open file"); diff --git a/sdk/examples/client/output/build_alias_output.rs b/sdk/examples/client/output/build_alias_output.rs index 727097cca7..27d31f1ed4 100644 --- a/sdk/examples/client/output/build_alias_output.rs +++ b/sdk/examples/client/output/build_alias_output.rs @@ -25,7 +25,7 @@ async fn main() -> Result<()> { // This example uses secrets in environment variables for simplicity which should not be done in production. dotenvy::dotenv().ok(); - let metadata = std::env::args().nth(1).unwrap_or("hello".to_string()); + let metadata = std::env::args().nth(1).unwrap_or_else(|| "hello".to_string()); let metadata = metadata.as_bytes(); // Create a node client. @@ -39,7 +39,7 @@ async fn main() -> Result<()> { let address = std::env::args() .nth(1) - .unwrap_or("rms1qpllaj0pyveqfkwxmnngz2c488hfdtmfrj3wfkgxtk4gtyrax0jaxzt70zy".to_string()); + .unwrap_or_else(|| "rms1qpllaj0pyveqfkwxmnngz2c488hfdtmfrj3wfkgxtk4gtyrax0jaxzt70zy".to_string()); let address = Address::try_from_bech32(address)?; // Alias id needs to be null the first time diff --git a/sdk/examples/client/output/build_basic_output.rs b/sdk/examples/client/output/build_basic_output.rs index 900cadfa19..f4ac4680d6 100644 --- a/sdk/examples/client/output/build_basic_output.rs +++ b/sdk/examples/client/output/build_basic_output.rs @@ -40,7 +40,7 @@ async fn main() -> Result<()> { let address = std::env::args() .nth(1) - .unwrap_or("rms1qpllaj0pyveqfkwxmnngz2c488hfdtmfrj3wfkgxtk4gtyrax0jaxzt70zy".to_string()); + .unwrap_or_else(|| "rms1qpllaj0pyveqfkwxmnngz2c488hfdtmfrj3wfkgxtk4gtyrax0jaxzt70zy".to_string()); let address = Address::try_from_bech32(address)?; let basic_output_builder = diff --git a/sdk/examples/client/output/build_nft_output.rs b/sdk/examples/client/output/build_nft_output.rs index e75aa942ba..2b5a9a6c53 100644 --- a/sdk/examples/client/output/build_nft_output.rs +++ b/sdk/examples/client/output/build_nft_output.rs @@ -39,7 +39,7 @@ async fn main() -> Result<()> { let address = std::env::args() .nth(1) - .unwrap_or("rms1qpllaj0pyveqfkwxmnngz2c488hfdtmfrj3wfkgxtk4gtyrax0jaxzt70zy".to_string()); + .unwrap_or_else(|| "rms1qpllaj0pyveqfkwxmnngz2c488hfdtmfrj3wfkgxtk4gtyrax0jaxzt70zy".to_string()); let address = Address::try_from_bech32(address)?; // IOTA NFT Standard - IRC27: https://github.com/iotaledger/tips/blob/main/tips/TIP-0027/tip-0027.md diff --git a/sdk/examples/client/output/native_tokens.rs b/sdk/examples/client/output/native_tokens.rs index 18c0828bb2..5a02f5dff7 100644 --- a/sdk/examples/client/output/native_tokens.rs +++ b/sdk/examples/client/output/native_tokens.rs @@ -55,9 +55,9 @@ async fn main() -> Result<()> { .unwrap(); // Replace with the token ID of native tokens you own. - let token_id = std::env::args() - .nth(1) - .unwrap_or("0x08e68f7616cd4948efebc6a77c4f935eaed770ac53869cba56d104f2b472a8836d0100000000".to_string()); + let token_id = std::env::args().nth(1).unwrap_or_else(|| { + "0x08e68f7616cd4948efebc6a77c4f935eaed770ac53869cba56d104f2b472a8836d0100000000".to_string() + }); let token_id: [u8; 38] = prefix_hex::decode(token_id)?; let outputs = [ diff --git a/sdk/src/client/node_api/mqtt/types.rs b/sdk/src/client/node_api/mqtt/types.rs index 960750b258..2acba99c6e 100644 --- a/sdk/src/client/node_api/mqtt/types.rs +++ b/sdk/src/client/node_api/mqtt/types.rs @@ -20,7 +20,6 @@ type TopicHandler = Box; pub(crate) type TopicHandlerMap = HashMap>>; /// An event from a MQTT topic. - #[derive(Debug, Clone, Eq, PartialEq, Serialize, Deserialize)] pub struct TopicEvent { /// the MQTT topic. @@ -30,7 +29,6 @@ pub struct TopicEvent { } /// The payload of an `TopicEvent`. - #[derive(Debug, Clone, Eq, PartialEq, Serialize, Deserialize)] #[non_exhaustive] pub enum MqttPayload { @@ -45,7 +43,6 @@ pub enum MqttPayload { } /// Mqtt events. - #[derive(Debug, Clone, PartialEq, Eq)] pub enum MqttEvent { /// Client was connected. @@ -55,7 +52,6 @@ pub enum MqttEvent { } /// The MQTT broker options. - #[derive(Copy, Debug, Clone, serde::Deserialize, serde::Serialize, PartialEq, Eq)] #[serde(rename_all = "camelCase")] #[must_use] diff --git a/sdk/src/client/secret/mod.rs b/sdk/src/client/secret/mod.rs index fbbc311def..8881f93c71 100644 --- a/sdk/src/client/secret/mod.rs +++ b/sdk/src/client/secret/mod.rs @@ -127,7 +127,6 @@ pub trait SecretManagerConfig: SecretManage { } /// Supported secret managers - #[non_exhaustive] pub enum SecretManager { /// Secret manager that uses [`iota_stronghold`] as the backing storage. diff --git a/sdk/src/wallet/account/mod.rs b/sdk/src/wallet/account/mod.rs index e071a2d75d..e938d54394 100644 --- a/sdk/src/wallet/account/mod.rs +++ b/sdk/src/wallet/account/mod.rs @@ -397,7 +397,7 @@ impl AccountInner { ..Default::default() }) .await - .map(|res| res.get(0).cloned()) + .map(|res| res.first().cloned()) } /// Gets the unspent foundry output matching the given ID. @@ -407,7 +407,7 @@ impl AccountInner { ..Default::default() }) .await - .map(|res| res.get(0).cloned()) + .map(|res| res.first().cloned()) } /// Gets the unspent nft output matching the given ID. @@ -417,7 +417,7 @@ impl AccountInner { ..Default::default() }) .await - .map(|res| res.get(0).cloned()) + .map(|res| res.first().cloned()) } /// Returns all incoming transactions of the account diff --git a/sdk/tests/client/common/mod.rs b/sdk/tests/client/common/mod.rs index 5a0ff66a34..44466e80a1 100644 --- a/sdk/tests/client/common/mod.rs +++ b/sdk/tests/client/common/mod.rs @@ -29,7 +29,8 @@ pub async fn create_client_and_secret_manager_with_funds( ) -> Result<(Client, SecretManager)> { let client = Client::builder().with_node(NODE_LOCAL)?.finish().await?; - let secret_manager = SecretManager::try_from_mnemonic(mnemonic.unwrap_or(Client::generate_mnemonic().unwrap()))?; + let secret_manager = + SecretManager::try_from_mnemonic(mnemonic.unwrap_or_else(|| Client::generate_mnemonic().unwrap()))?; let address = secret_manager .generate_ed25519_addresses( diff --git a/sdk/tests/client/signing/alias.rs b/sdk/tests/client/signing/alias.rs index 883cf78f58..2a9a9564a5 100644 --- a/sdk/tests/client/signing/alias.rs +++ b/sdk/tests/client/signing/alias.rs @@ -109,7 +109,7 @@ async fn sign_alias_state_transition() -> Result<()> { .await?; assert_eq!(unlocks.len(), 1); - assert_eq!((*unlocks).get(0).unwrap().kind(), SignatureUnlock::KIND); + assert_eq!((*unlocks).first().unwrap().kind(), SignatureUnlock::KIND); let tx_payload = TransactionPayload::new(prepared_transaction_data.essence.clone(), unlocks)?; @@ -200,7 +200,7 @@ async fn sign_alias_governance_transition() -> Result<()> { .await?; assert_eq!(unlocks.len(), 1); - assert_eq!((*unlocks).get(0).unwrap().kind(), SignatureUnlock::KIND); + assert_eq!((*unlocks).first().unwrap().kind(), SignatureUnlock::KIND); let tx_payload = TransactionPayload::new(prepared_transaction_data.essence.clone(), unlocks)?; @@ -330,7 +330,7 @@ async fn alias_reference_unlocks() -> Result<()> { .await?; assert_eq!(unlocks.len(), 3); - assert_eq!((*unlocks).get(0).unwrap().kind(), SignatureUnlock::KIND); + assert_eq!((*unlocks).first().unwrap().kind(), SignatureUnlock::KIND); match (*unlocks).get(1).unwrap() { Unlock::Alias(a) => { assert_eq!(a.index(), 0); diff --git a/sdk/tests/client/signing/basic.rs b/sdk/tests/client/signing/basic.rs index be2252ac78..d48d39817e 100644 --- a/sdk/tests/client/signing/basic.rs +++ b/sdk/tests/client/signing/basic.rs @@ -92,7 +92,7 @@ async fn single_ed25519_unlock() -> Result<()> { .await?; assert_eq!(unlocks.len(), 1); - assert_eq!((*unlocks).get(0).unwrap().kind(), SignatureUnlock::KIND); + assert_eq!((*unlocks).first().unwrap().kind(), SignatureUnlock::KIND); let tx_payload = TransactionPayload::new(prepared_transaction_data.essence.clone(), unlocks)?; @@ -194,7 +194,7 @@ async fn ed25519_reference_unlocks() -> Result<()> { .await?; assert_eq!(unlocks.len(), 3); - assert_eq!((*unlocks).get(0).unwrap().kind(), SignatureUnlock::KIND); + assert_eq!((*unlocks).first().unwrap().kind(), SignatureUnlock::KIND); match (*unlocks).get(1).unwrap() { Unlock::Reference(r) => { assert_eq!(r.index(), 0); @@ -306,7 +306,7 @@ async fn two_signature_unlocks() -> Result<()> { .await?; assert_eq!(unlocks.len(), 2); - assert_eq!((*unlocks).get(0).unwrap().kind(), SignatureUnlock::KIND); + assert_eq!((*unlocks).first().unwrap().kind(), SignatureUnlock::KIND); assert_eq!((*unlocks).get(1).unwrap().kind(), SignatureUnlock::KIND); let tx_payload = TransactionPayload::new(prepared_transaction_data.essence.clone(), unlocks)?; diff --git a/sdk/tests/client/signing/mod.rs b/sdk/tests/client/signing/mod.rs index 3a9e58bad7..6dfcefd1f8 100644 --- a/sdk/tests/client/signing/mod.rs +++ b/sdk/tests/client/signing/mod.rs @@ -395,7 +395,7 @@ async fn all_combined() -> Result<()> { .await?; assert_eq!(unlocks.len(), 15); - assert_eq!((*unlocks).get(0).unwrap().kind(), SignatureUnlock::KIND); + assert_eq!((*unlocks).first().unwrap().kind(), SignatureUnlock::KIND); match (*unlocks).get(1).unwrap() { Unlock::Reference(a) => { assert_eq!(a.index(), 0); diff --git a/sdk/tests/client/signing/nft.rs b/sdk/tests/client/signing/nft.rs index 2498bfbef0..e02a873c9f 100644 --- a/sdk/tests/client/signing/nft.rs +++ b/sdk/tests/client/signing/nft.rs @@ -138,7 +138,7 @@ async fn nft_reference_unlocks() -> Result<()> { .await?; assert_eq!(unlocks.len(), 3); - assert_eq!((*unlocks).get(0).unwrap().kind(), SignatureUnlock::KIND); + assert_eq!((*unlocks).first().unwrap().kind(), SignatureUnlock::KIND); match (*unlocks).get(1).unwrap() { Unlock::Nft(a) => { assert_eq!(a.index(), 0); diff --git a/sdk/tests/types/unlock/mod.rs b/sdk/tests/types/unlock/mod.rs index 51a2ef91e0..ef14c76b4b 100644 --- a/sdk/tests/types/unlock/mod.rs +++ b/sdk/tests/types/unlock/mod.rs @@ -128,7 +128,7 @@ fn get_none() { fn get_signature() { let signature = Unlock::from(SignatureUnlock::from(rand_signature())); - assert_eq!(Unlocks::new([signature.clone()]).unwrap().get(0), Some(&signature)); + assert_eq!(Unlocks::new([signature.clone()]).unwrap().first(), Some(&signature)); } #[test] diff --git a/sdk/tests/wallet/accounts.rs b/sdk/tests/wallet/accounts.rs index 1b4b329d47..3d06ee0cbc 100644 --- a/sdk/tests/wallet/accounts.rs +++ b/sdk/tests/wallet/accounts.rs @@ -54,7 +54,7 @@ async fn remove_latest_account() -> Result<()> { let accounts = wallet.get_accounts().await.unwrap(); assert!(accounts.len() == 1); assert_eq!( - *accounts.get(0).unwrap().details().await.index(), + *accounts.first().unwrap().details().await.index(), *first_account.details().await.index() ); @@ -94,7 +94,7 @@ async fn remove_latest_account() -> Result<()> { // Check if accounts with `recreated_account_index` exist. assert_eq!(accounts.len(), 1); assert_eq!( - *accounts.get(0).unwrap().details().await.index(), + *accounts.first().unwrap().details().await.index(), recreated_account_index ); diff --git a/sdk/tests/wallet/common/mod.rs b/sdk/tests/wallet/common/mod.rs index 394e99b900..afeb40ace8 100644 --- a/sdk/tests/wallet/common/mod.rs +++ b/sdk/tests/wallet/common/mod.rs @@ -32,7 +32,7 @@ pub use self::constants::*; pub(crate) async fn make_wallet(storage_path: &str, mnemonic: Option, node: Option<&str>) -> Result { let client_options = ClientOptions::new().with_node(node.unwrap_or(NODE_LOCAL))?; let secret_manager = - MnemonicSecretManager::try_from_mnemonic(mnemonic.unwrap_or(Client::generate_mnemonic().unwrap()))?; + MnemonicSecretManager::try_from_mnemonic(mnemonic.unwrap_or_else(|| Client::generate_mnemonic().unwrap()))?; #[allow(unused_mut)] let mut wallet_builder = Wallet::builder() diff --git a/sdk/tests/wallet/wallet_storage.rs b/sdk/tests/wallet/wallet_storage.rs index 82a0e863f2..6d8bb93022 100644 --- a/sdk/tests/wallet/wallet_storage.rs +++ b/sdk/tests/wallet/wallet_storage.rs @@ -195,8 +195,8 @@ async fn check_existing_db_2() -> Result<()> { if let iota_sdk::types::block::payload::Payload::TaggedData(tagged_data_payload) = tx.payload.essence().as_regular().payload().unwrap() { - assert_eq!(tagged_data_payload.tag(), "Stardust".as_bytes()); - assert_eq!(tagged_data_payload.data(), "Stardust".as_bytes()); + assert_eq!(tagged_data_payload.tag(), b"Stardust"); + assert_eq!(tagged_data_payload.data(), b"Stardust"); } else { panic!("expected tagged data payload") } From 5ce3a04488166a9231058896d4d29374225fe80f Mon Sep 17 00:00:00 2001 From: Thibault Martinez Date: Mon, 23 Oct 2023 09:19:32 +0200 Subject: [PATCH 05/91] impl From<&OutputId> for {AliasAddress, NftAddress} (#1488) --- sdk/CHANGELOG.md | 4 ++++ sdk/src/types/block/address/alias.rs | 11 ++++++++++- sdk/src/types/block/address/nft.rs | 11 ++++++++++- 3 files changed, 24 insertions(+), 2 deletions(-) diff --git a/sdk/CHANGELOG.md b/sdk/CHANGELOG.md index f3471ecfab..13f2cafaec 100644 --- a/sdk/CHANGELOG.md +++ b/sdk/CHANGELOG.md @@ -21,6 +21,10 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## 1.1.2 - 2023-MM-DD +### Added + +- `impl From<&OutputId> for {AliasAddress, NftAddress}`; + ### Fixed - `Account::claim_outputs()` if an input has less amount than min storage deposit; diff --git a/sdk/src/types/block/address/alias.rs b/sdk/src/types/block/address/alias.rs index 3e3208ffa8..ec26c48d6d 100644 --- a/sdk/src/types/block/address/alias.rs +++ b/sdk/src/types/block/address/alias.rs @@ -5,7 +5,10 @@ use core::str::FromStr; use derive_more::{AsRef, Deref, From}; -use crate::types::block::{output::AliasId, Error}; +use crate::types::block::{ + output::{AliasId, OutputId}, + Error, +}; /// An alias address. #[derive(Clone, Copy, Eq, PartialEq, Ord, PartialOrd, Hash, From, AsRef, Deref, packable::Packable)] @@ -48,6 +51,12 @@ impl FromStr for AliasAddress { } } +impl From<&OutputId> for AliasAddress { + fn from(output_id: &OutputId) -> Self { + Self(AliasId::from(output_id)) + } +} + impl core::fmt::Display for AliasAddress { fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result { write!(f, "{}", self.0) diff --git a/sdk/src/types/block/address/nft.rs b/sdk/src/types/block/address/nft.rs index 0b0bbfe8d8..c316904f6e 100644 --- a/sdk/src/types/block/address/nft.rs +++ b/sdk/src/types/block/address/nft.rs @@ -5,7 +5,10 @@ use core::str::FromStr; use derive_more::{AsRef, Deref, From}; -use crate::types::block::{output::NftId, Error}; +use crate::types::block::{ + output::{NftId, OutputId}, + Error, +}; /// An NFT address. #[derive(Clone, Copy, Eq, PartialEq, Ord, PartialOrd, Hash, From, AsRef, Deref, packable::Packable)] @@ -48,6 +51,12 @@ impl FromStr for NftAddress { } } +impl From<&OutputId> for NftAddress { + fn from(output_id: &OutputId) -> Self { + Self(NftId::from(output_id)) + } +} + impl core::fmt::Display for NftAddress { fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result { write!(f, "{}", self.0) From 565498964fb72d658e75ea1b9a8270c24055e31c Mon Sep 17 00:00:00 2001 From: Dr-Electron Date: Mon, 23 Oct 2023 11:47:09 +0200 Subject: [PATCH 06/91] Add first draft of upload workflow (#1412) * Add first draft of upload workflow * Update action * Add check for supported languages * Update .gitignore * Remove caching --------- Co-authored-by: Thibault Martinez --- .github/workflows/upload-docs.yml | 80 ++++++++++++++++++++++++++++++ .gitignore | 3 ++ bindings/python/pydoc-markdown.yml | 4 +- 3 files changed, 85 insertions(+), 2 deletions(-) create mode 100644 .github/workflows/upload-docs.yml diff --git a/.github/workflows/upload-docs.yml b/.github/workflows/upload-docs.yml new file mode 100644 index 0000000000..cd4d521b57 --- /dev/null +++ b/.github/workflows/upload-docs.yml @@ -0,0 +1,80 @@ +name: Build and upload API docs + +on: + release: + types: [published] + +env: + GH_TOKEN: ${{ github.token }} + +permissions: + actions: 'write' + +jobs: + build: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + + - name: Get release language + id: get_release_language + run: | + if [[ ${{ github.ref }} == *"python"* ]]; then + echo LANGUAGE="python" >> $GITHUB_OUTPUT + fi + if [[ ${{ github.ref }} == *"nodejs"* ]]; then + echo LANGUAGE="nodejs" >> $GITHUB_OUTPUT + fi + + - name: Check if release language is supported + if: steps.get_release_language.outputs.LANGUAGE != 'python' && steps.get_release_language.outputs.LANGUAGE != 'nodejs' + run: gh run cancel ${{ github.run_id }} + + - name: Set up Rust + uses: ./.github/actions/setup-rust + + - name: Set Up Node.js 18 and Yarn Cache + uses: actions/setup-node@v3 + with: + node-version: "18" + + - name: Install Required Dependencies (Ubuntu) + run: | + sudo apt-get update + sudo apt-get install libudev-dev libusb-1.0-0-dev + + - name: Get release version + id: get_release_version + run: | + VERSION=$(echo ${{ github.ref }} | sed -e 's/.*v\([0-9]*\.[0-9]*\).*/\1/') + echo VERSION=$VERSION >> $GITHUB_OUTPUT + + - name: Build python docs + if: steps.get_release_language.outputs.LANGUAGE == 'python' + run: | + cd bindings/python + pip install -r requirements-dev.txt + PYTHONPATH=. pydoc-markdown + cd - + + - name: Build nodejs docs + if: steps.get_release_language.outputs.LANGUAGE == 'nodejs' + run: | + cd bindings/nodejs + # The SDK still uses yarn classic: https://github.com/iotaledger/iota-sdk/issues/433 + yarn set version classic + yarn + yarn create-api-docs --out ../../docs/nodejs + cd - + + - name: Compress generated docs + run: | + tar czvf ${{ steps.get_release_language.outputs.LANGUAGE }}.tar.gz docs/* + + - name: Upload docs to AWS S3 + env: + AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID_IOTA_WIKI }} + AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY_IOTA_WIKI }} + AWS_DEFAULT_REGION: "eu-central-1" + run: | + aws s3 cp ${{ steps.get_release_language.outputs.LANGUAGE }}.tar.gz s3://files.iota.org/iota-wiki/iota-sdk/${{ steps.get_release_version.outputs.VERSION }}/ --acl public-read diff --git a/.gitignore b/.gitignore index 5fa9b9b946..13a6908577 100644 --- a/.gitignore +++ b/.gitignore @@ -30,3 +30,6 @@ address.json .DS_Store book .venv* + +# Temporary documentation +docs diff --git a/bindings/python/pydoc-markdown.yml b/bindings/python/pydoc-markdown.yml index a68672a764..b4d9242ef0 100644 --- a/bindings/python/pydoc-markdown.yml +++ b/bindings/python/pydoc-markdown.yml @@ -8,8 +8,8 @@ processors: - type: crossref renderer: type: docusaurus - docs_base_path: ./docs/ - relative_output_path: references/python + docs_base_path: ../../docs/ + relative_output_path: python markdown: use_fixed_header_levels: true From bb14a615b75f630d7fe30a81e2f880e61ec86790 Mon Sep 17 00:00:00 2001 From: Thoralf-M <46689931+Thoralf-M@users.noreply.github.com> Date: Mon, 23 Oct 2023 15:12:59 +0200 Subject: [PATCH 07/91] Don't truncate URLs after the host (#1476) Co-authored-by: Thibault Martinez Co-authored-by: DaughterOfMars --- sdk/CHANGELOG.md | 1 + sdk/src/client/node_api/core/routes.rs | 6 +++++- sdk/src/client/node_api/mqtt/mod.rs | 9 +++++++-- sdk/src/client/node_manager/mod.rs | 6 +++++- 4 files changed, 18 insertions(+), 4 deletions(-) diff --git a/sdk/CHANGELOG.md b/sdk/CHANGELOG.md index 13f2cafaec..ac26dafe3b 100644 --- a/sdk/CHANGELOG.md +++ b/sdk/CHANGELOG.md @@ -28,6 +28,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Fixed - `Account::claim_outputs()` if an input has less amount than min storage deposit; +- URLs aren't truncated after the hostname anymore; ## 1.1.1 - 2023-10-11 diff --git a/sdk/src/client/node_api/core/routes.rs b/sdk/src/client/node_api/core/routes.rs index 091365838c..060246d926 100644 --- a/sdk/src/client/node_api/core/routes.rs +++ b/sdk/src/client/node_api/core/routes.rs @@ -430,7 +430,11 @@ impl Client { } } let path = "api/core/v2/info"; - url.set_path(path); + if url.path().ends_with('/') { + url.set_path(&format!("{}{}", url.path(), path)); + } else { + url.set_path(&format!("{}/{}", url.path(), path)); + } let resp: InfoResponse = crate::client::node_manager::http_client::HttpClient::new(DEFAULT_USER_AGENT.to_string()) diff --git a/sdk/src/client/node_api/mqtt/mod.rs b/sdk/src/client/node_api/mqtt/mod.rs index 5a449768b6..3c1f3da1b1 100644 --- a/sdk/src/client/node_api/mqtt/mod.rs +++ b/sdk/src/client/node_api/mqtt/mod.rs @@ -86,10 +86,15 @@ async fn set_mqtt_client(client: &Client) -> Result<(), Error> { let port = broker_options.port; let secure = node.url.scheme() == "https"; let mqtt_options = if broker_options.use_ws { + let path = if node.url.path().ends_with('/') { + &node.url.path()[0..node.url.path().len() - 1] + } else { + node.url.path() + }; let uri = format!( - "{}://{host}:{}/api/mqtt/v1", + "{}://{host}:{}{path}/api/mqtt/v1", if secure { "wss" } else { "ws" }, - node.url.port_or_known_default().unwrap_or(port) + node.url.port_or_known_default().unwrap_or(port), ); let mut mqtt_options = MqttOptions::new(id, uri, port); if secure { diff --git a/sdk/src/client/node_manager/mod.rs b/sdk/src/client/node_manager/mod.rs index f6468e2bfd..97968af6c7 100644 --- a/sdk/src/client/node_manager/mod.rs +++ b/sdk/src/client/node_manager/mod.rs @@ -189,7 +189,11 @@ impl NodeManager { // Set path and query parameters for node in &mut nodes_with_modified_url { - node.url.set_path(path); + if node.url.path().ends_with('/') { + node.url.set_path(&format!("{}{}", node.url.path(), path)); + } else { + node.url.set_path(&format!("{}/{}", node.url.path(), path)); + } node.url.set_query(query); if let Some(auth) = &node.auth { if let Some((name, password)) = &auth.basic_auth_name_pwd { From 9b25c6a6d9b7e2e068173fbc005eaa065bd3b029 Mon Sep 17 00:00:00 2001 From: Thibault Martinez Date: Mon, 23 Oct 2023 20:23:32 +0200 Subject: [PATCH 08/91] Fix some audits (#1492) --- Cargo.lock | 209 +- bindings/nodejs/examples/package.json | 3 + bindings/nodejs/examples/yarn.lock | 37 +- bindings/nodejs/package-lock.json | 2519 ++------- bindings/nodejs/package.json | 5 +- bindings/nodejs/yarn.lock | 808 +-- bindings/package-lock.json | 6 + bindings/python/Cargo.toml | 2 +- bindings/wasm/package-lock.json | 357 +- bindings/wasm/package.json | 5 +- bindings/wasm/yarn.lock | 6837 +++++++++++++------------ 11 files changed, 4560 insertions(+), 6228 deletions(-) create mode 100644 bindings/package-lock.json diff --git a/Cargo.lock b/Cargo.lock index e26c2ecf3e..b7099d2f71 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -54,13 +54,14 @@ dependencies = [ [[package]] name = "ahash" -version = "0.8.3" +version = "0.8.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2c99f64d1e06488f620f932677e24bc6e2897582980441ae90a671415bd7ec2f" +checksum = "72832d73be48bac96a5d7944568f305d829ed55b0ce3b483647089dfaf6cf704" dependencies = [ "cfg-if", "once_cell", "version_check", + "zerocopy", ] [[package]] @@ -152,9 +153,9 @@ checksum = "96d30a06541fbafbc7f82ed10c06164cfbd2c401138f6addd8404629c4b16711" [[package]] name = "async-trait" -version = "0.1.73" +version = "0.1.74" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bc00ceb34980c03614e35a3a4e218276a0a824e911d07651cd0d858a51e8c0f0" +checksum = "a66537f1bb974b254c98ed142ff995236e81b9d0fe4db0575f46612cb15eb0f9" dependencies = [ "proc-macro2", "quote", @@ -224,9 +225,9 @@ checksum = "9e1b586273c5702936fe7b7d6896644d8be71e6314cfe09d3167c95f712589e8" [[package]] name = "base64" -version = "0.21.4" +version = "0.21.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ba43ea6f343b788c8764558649e08df62f86c6ef251fdaeb1ffd010a9ae50a2" +checksum = "35636a1494ede3b646cc98f74f8e62c773a38a659ebc777a2cf26b9b74171df9" [[package]] name = "base64ct" @@ -284,9 +285,9 @@ checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" [[package]] name = "bitflags" -version = "2.4.0" +version = "2.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b4682ae6287fcf752ecaabbfcc7b6f9b72aa33933dc23a554d853aea8eea8635" +checksum = "327762f6e5a765692301e5bb513e0d9fef63be86bbc14528052b1cd3e6f03e07" [[package]] name = "bitvec" @@ -626,9 +627,9 @@ checksum = "e496a50fda8aacccc86d7529e2c1e0892dbd0f898a6b5645b5561b89c3210efa" [[package]] name = "cpufeatures" -version = "0.2.9" +version = "0.2.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a17b76ff3a4162b0b27f354a0c87015ddad39d35f9c0c36607a3bdd175dde1f1" +checksum = "3fbc60abd742b35f2492f808e1abbb83d45f72db402e14c55057edc9c7b1e9e4" dependencies = [ "libc", ] @@ -739,10 +740,11 @@ dependencies = [ [[package]] name = "deranged" -version = "0.3.8" +version = "0.3.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f2696e8a945f658fd14dc3b87242e6b80cd0f36ff04ea560fa39082368847946" +checksum = "0f32d04922c60427da6f9fef14d042d9edddef64cb9d4ce0d64d0685fbeb1fd3" dependencies = [ + "powerfmt", "serde", ] @@ -877,9 +879,9 @@ dependencies = [ [[package]] name = "ed25519" -version = "2.2.2" +version = "2.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "60f6d271ca33075c88028be6f04d502853d63a5ece419d269c15315d4fc1cf1d" +checksum = "115531babc129696a58c64a4fef0a8bf9e9698629fb97e9e40767d235cfbcd53" dependencies = [ "serde", "signature", @@ -893,7 +895,7 @@ checksum = "7d9ce6874da5d4415896cd45ffbc4d1cfc0c4f9c079427bd870742c30f2f65a9" dependencies = [ "curve25519-dalek 4.1.1", "ed25519", - "hashbrown 0.14.1", + "hashbrown 0.14.2", "hex", "rand_core 0.6.4", "serde", @@ -1325,9 +1327,9 @@ checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" [[package]] name = "hashbrown" -version = "0.14.1" +version = "0.14.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7dfda62a12f55daeae5015f81b0baea145391cb4520f86c248fc615d72640d12" +checksum = "f93e7192158dbcda357bdec5fb5788eebf8bbac027f3f33e719d29135ae84156" dependencies = [ "ahash", "allocator-api2", @@ -1448,7 +1450,7 @@ dependencies = [ "httpdate", "itoa", "pin-project-lite", - "socket2 0.4.9", + "socket2 0.4.10", "tokio", "tower-service", "tracing", @@ -1525,14 +1527,14 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8adf3ddd720272c6ea8bf59463c04e0f93d0bbf7c5439b691bca2987e0270897" dependencies = [ "equivalent", - "hashbrown 0.14.1", + "hashbrown 0.14.2", ] [[package]] name = "indoc" -version = "1.0.9" +version = "2.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bfa799dd5ed20a7e349f3b4639aa80d74549c81716d9ec4f994c9b5815598306" +checksum = "1e186cfbae8084e513daff4240b4797e342f988cecda4fb6c939150f96315fd8" [[package]] name = "inout" @@ -1566,7 +1568,7 @@ dependencies = [ "aes", "aes-gcm", "autocfg", - "base64 0.21.4", + "base64 0.21.5", "blake2", "chacha20poly1305", "cipher", @@ -1619,7 +1621,7 @@ dependencies = [ "anymap", "async-trait", "bech32 0.9.1", - "bitflags 2.4.0", + "bitflags 2.4.1", "bs58", "bytemuck", "derive_more", @@ -1629,7 +1631,7 @@ dependencies = [ "getset", "gloo-storage", "gloo-timers", - "hashbrown 0.14.1", + "hashbrown 0.14.2", "heck", "hex", "instant", @@ -1746,9 +1748,9 @@ dependencies = [ [[package]] name = "ipnet" -version = "2.8.0" +version = "2.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "28b29a3cd74f0f4598934efe3aeba42bae0eb4680554128851ebbecb02af14e6" +checksum = "8f518f335dce6725a761382244631d86cf0ccb2863413590b31338feb467f9c3" [[package]] name = "is-terminal" @@ -1935,9 +1937,9 @@ checksum = "da2479e8c062e40bf0066ffa0bc823de0a9368974af99c9f6df941d2c231e03f" [[package]] name = "lock_api" -version = "0.4.10" +version = "0.4.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c1cc9717a20b1bb222f333e6a92fd32f7d8a18ddc5a3191a11af45dcbf4dcd16" +checksum = "3c168f8615b12bc01f9c17e2eb0cc07dcae1940121185446edc3744920e8ef45" dependencies = [ "autocfg", "scopeguard", @@ -2009,9 +2011,9 @@ dependencies = [ [[package]] name = "mio" -version = "0.8.8" +version = "0.8.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "927a765cd3fc26206e66b296465fa9d3e5ab003e651c1b3c060e7956d96b19d2" +checksum = "3dce281c5e46beae905d4de1870d8b1509a9142b62eedf18b443b011ca8343d0" dependencies = [ "libc", "wasi", @@ -2225,13 +2227,13 @@ dependencies = [ [[package]] name = "parking_lot_core" -version = "0.9.8" +version = "0.9.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "93f00c865fe7cabf650081affecd3871070f26767e7b2070a3ffae14c654b447" +checksum = "4c42a9226546d68acdd9c0a280d17ce19bfe27a46bf68784e4066115788d008e" dependencies = [ "cfg-if", "libc", - "redox_syscall 0.3.5", + "redox_syscall 0.4.1", "smallvec", "windows-targets 0.48.5", ] @@ -2340,6 +2342,12 @@ dependencies = [ "universal-hash", ] +[[package]] +name = "powerfmt" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391" + [[package]] name = "ppv-lite86" version = "0.2.17" @@ -2434,9 +2442,9 @@ dependencies = [ [[package]] name = "pyo3" -version = "0.19.2" +version = "0.20.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e681a6cfdc4adcc93b4d3cf993749a4552018ee0a9b65fc0ccfad74352c72a38" +checksum = "04e8453b658fe480c3e70c8ed4e3d3ec33eb74988bd186561b0cc66b85c3bc4b" dependencies = [ "cfg-if", "indoc", @@ -2451,9 +2459,9 @@ dependencies = [ [[package]] name = "pyo3-build-config" -version = "0.19.2" +version = "0.20.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "076c73d0bc438f7a4ef6fdd0c3bb4732149136abd952b110ac93e4edb13a6ba5" +checksum = "a96fe70b176a89cff78f2fa7b3c930081e163d5379b4dcdf993e3ae29ca662e5" dependencies = [ "once_cell", "target-lexicon", @@ -2461,9 +2469,9 @@ dependencies = [ [[package]] name = "pyo3-ffi" -version = "0.19.2" +version = "0.20.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e53cee42e77ebe256066ba8aa77eff722b3bb91f3419177cf4cd0f304d3284d9" +checksum = "214929900fd25e6604661ed9cf349727c8920d47deff196c4e28165a6ef2a96b" dependencies = [ "libc", "pyo3-build-config", @@ -2471,25 +2479,26 @@ dependencies = [ [[package]] name = "pyo3-macros" -version = "0.19.2" +version = "0.20.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dfeb4c99597e136528c6dd7d5e3de5434d1ceaf487436a3f03b2d56b6fc9efd1" +checksum = "dac53072f717aa1bfa4db832b39de8c875b7c7af4f4a6fe93cdbf9264cf8383b" dependencies = [ "proc-macro2", "pyo3-macros-backend", "quote", - "syn 1.0.109", + "syn 2.0.38", ] [[package]] name = "pyo3-macros-backend" -version = "0.19.2" +version = "0.20.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "947dc12175c254889edc0c02e399476c2f652b4b9ebd123aa655c224de259536" +checksum = "7774b5a8282bd4f25f803b1f0d945120be959a36c72e08e7cd031c792fdfd424" dependencies = [ + "heck", "proc-macro2", "quote", - "syn 1.0.109", + "syn 2.0.38", ] [[package]] @@ -2564,9 +2573,9 @@ dependencies = [ [[package]] name = "redox_syscall" -version = "0.3.5" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "567664f262709473930a4bf9e51bf2ebf3348f2e748ccc50dea20646858f8f29" +checksum = "4722d768eff46b75989dd134e5c353f0d6296e5aaa3132e776cbdb56be7731aa" dependencies = [ "bitflags 1.3.2", ] @@ -2584,9 +2593,9 @@ dependencies = [ [[package]] name = "regex" -version = "1.10.0" +version = "1.10.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d119d7c7ca818f8a53c300863d4f87566aac09943aef5b355bb83969dae75d87" +checksum = "380b951a9c5e80ddfd6136919eef32310721aa4aacd4889a8d39124b026ab343" dependencies = [ "aho-corasick", "memchr", @@ -2596,9 +2605,9 @@ dependencies = [ [[package]] name = "regex-automata" -version = "0.4.1" +version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "465c6fc0621e4abc4187a2bda0937bfd4f722c2730b29562e19689ea796c9a4b" +checksum = "5f804c7828047e88b2d32e2d7fe5a105da8ee3264f01902f796c8e067dc2483f" dependencies = [ "aho-corasick", "memchr", @@ -2607,9 +2616,9 @@ dependencies = [ [[package]] name = "regex-syntax" -version = "0.8.0" +version = "0.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3cbb081b9784b07cceb8824c8583f86db4814d172ab043f3c23f7dc600bf83d" +checksum = "c08c74e62047bb2de4ff487b251e4a92e24f48745648451635cec7d591162d9f" [[package]] name = "reqwest" @@ -2617,7 +2626,7 @@ version = "0.11.22" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "046cd98826c46c2ac8ddecae268eb5c2e58628688a5fc7a2643704a73faba95b" dependencies = [ - "base64 0.21.4", + "base64 0.21.5", "bytes", "encoding_rs", "futures-core", @@ -2748,11 +2757,11 @@ dependencies = [ [[package]] name = "rustix" -version = "0.38.18" +version = "0.38.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5a74ee2d7c2581cd139b42447d7d9389b889bdaad3a73f1ebb16f2a3237bb19c" +checksum = "67ce50cb2e16c2903e30d1cbccfd8387a74b9d4c938b6a4c5ec6cc7556f7a8a0" dependencies = [ - "bitflags 2.4.0", + "bitflags 2.4.1", "errno", "libc", "linux-raw-sys", @@ -2789,7 +2798,7 @@ version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2d3987094b1d07b653b7dfdc3f70ce9a1da9c51ac18c1b06b662e4f9a0e9f4b2" dependencies = [ - "base64 0.21.4", + "base64 0.21.5", ] [[package]] @@ -2808,7 +2817,7 @@ version = "12.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "994eca4bca05c87e86e15d90fc7a91d1be64b4482b38cb2d27474568fe7c9db9" dependencies = [ - "bitflags 2.4.0", + "bitflags 2.4.1", "cfg-if", "clipboard-win", "fd-lock", @@ -2958,18 +2967,18 @@ checksum = "388a1df253eca08550bef6c72392cfe7c30914bf41df5269b68cbd6ff8f570a3" [[package]] name = "serde" -version = "1.0.188" +version = "1.0.189" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cf9e0fcba69a370eed61bcf2b728575f726b50b55cba78064753d708ddc7549e" +checksum = "8e422a44e74ad4001bdc8eede9a4570ab52f71190e9c076d14369f38b9200537" dependencies = [ "serde_derive", ] [[package]] name = "serde_derive" -version = "1.0.188" +version = "1.0.189" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4eca7ac642d82aa35b60049a6eccb4be6be75e599bd2e9adb5f875a737654af2" +checksum = "1e48d1f918009ce3145511378cf68d613e3b3d9137d67272562080d68a2b32d5" dependencies = [ "proc-macro2", "quote", @@ -3103,9 +3112,9 @@ dependencies = [ [[package]] name = "socket2" -version = "0.4.9" +version = "0.4.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "64a4a911eed85daf18834cfaa86a79b7d266ff93ff5ba14005426219480ed662" +checksum = "9f7916fc008ca5542385b89a3d3ce689953c143e9304a9bf8beec1de48994c0d" dependencies = [ "libc", "winapi", @@ -3113,9 +3122,9 @@ dependencies = [ [[package]] name = "socket2" -version = "0.5.4" +version = "0.5.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4031e820eb552adee9295814c0ced9e5cf38ddf1e8b7d566d6de8e2538ea989e" +checksum = "7b5fac59a5cb5dd637972e5fca70daf0523c9067fcdc4842f053dae04a18f8e9" dependencies = [ "libc", "windows-sys 0.48.0", @@ -3290,24 +3299,24 @@ checksum = "55937e1799185b12863d447f42597ed69d9928686b8d88a1df17376a097d8369" [[package]] name = "target-lexicon" -version = "0.12.11" +version = "0.12.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9d0e916b1148c8e263850e1ebcbd046f333e0683c724876bb0da63ea4373dc8a" +checksum = "14c39fd04924ca3a864207c66fc2cd7d22d7c016007f9ce846cbb9326331930a" [[package]] name = "thiserror" -version = "1.0.49" +version = "1.0.50" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1177e8c6d7ede7afde3585fd2513e611227efd6481bd78d2e82ba1ce16557ed4" +checksum = "f9a7210f5c9a7156bb50aa36aed4c95afb51df0df00713949448cf9e97d382d2" dependencies = [ "thiserror-impl", ] [[package]] name = "thiserror-impl" -version = "1.0.49" +version = "1.0.50" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "10712f02019e9288794769fba95cd6847df9874d49d871d062172f9dd41bc4cc" +checksum = "266b2e40bc00e5a6c09c3584011e08b06f123c00362c92b975ba9843aaaa14b8" dependencies = [ "proc-macro2", "quote", @@ -3316,14 +3325,15 @@ dependencies = [ [[package]] name = "time" -version = "0.3.29" +version = "0.3.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "426f806f4089c493dcac0d24c29c01e2c38baf8e30f1b716ee37e83d200b18fe" +checksum = "c4a34ab300f2dee6e562c10a046fc05e358b29f9bf92277f30c3c8d82275f6f5" dependencies = [ "deranged", "itoa", "libc", "num_threads", + "powerfmt", "serde", "time-core", "time-macros", @@ -3389,7 +3399,7 @@ dependencies = [ "mio", "num_cpus", "pin-project-lite", - "socket2 0.5.4", + "socket2 0.5.5", "tokio-macros", "windows-sys 0.48.0", ] @@ -3431,9 +3441,9 @@ dependencies = [ [[package]] name = "toml_datetime" -version = "0.6.3" +version = "0.6.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7cda73e2f1397b1262d6dfdcef8aafae14d1de7748d66822d3bfeeb6d03e5e4b" +checksum = "51cc078118ed25af325985ff674c00c8416b0f962be67da4946854ebfc99f334" [[package]] name = "toml_edit" @@ -3454,11 +3464,10 @@ checksum = "b6bc1c9ce2b5135ac7f93c72918fc37feb872bdc6a5533a8b85eb4b86bfdae52" [[package]] name = "tracing" -version = "0.1.37" +version = "0.1.40" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ce8c33a8d48bd45d624a6e523445fd21ec13d3653cd51f681abf67418f54eb8" +checksum = "c3523ab5a71916ccf420eebdf5521fcef02141234bbc0b8a49f2fdc4544364ef" dependencies = [ - "cfg-if", "pin-project-lite", "tracing-attributes", "tracing-core", @@ -3466,9 +3475,9 @@ dependencies = [ [[package]] name = "tracing-attributes" -version = "0.1.26" +version = "0.1.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f4f31f56159e98206da9efd823404b79b6ef3143b4a7ab76e67b1751b25a4ab" +checksum = "34704c8d6ebcbc939824180af020566b01a7c01f80641264eba0999f6c2b6be7" dependencies = [ "proc-macro2", "quote", @@ -3477,9 +3486,9 @@ dependencies = [ [[package]] name = "tracing-core" -version = "0.1.31" +version = "0.1.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0955b8137a1df6f1a2e9a37d8a6656291ff0297c1a97c24e0d8425fe2312f79a" +checksum = "c06d3da6113f116aaee68e4d601191614c9053067f9ab7f6edbcb161237daa54" dependencies = [ "once_cell", ] @@ -3574,9 +3583,9 @@ checksum = "e51733f11c9c4f72aa0c160008246859e340b00807569a0da0e7a1079b27ba85" [[package]] name = "unindent" -version = "0.1.11" +version = "0.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e1766d682d402817b5ac4490b3c3002d91dfa0d22812f341609f97b08757359c" +checksum = "c7de7d73e1754487cb58364ee906a499937a0dfabd86bcb980fa99ec8c8fa2ce" [[package]] name = "universal-hash" @@ -3976,9 +3985,9 @@ checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538" [[package]] name = "winnow" -version = "0.5.16" +version = "0.5.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "037711d82167854aff2018dfd193aa0fef5370f456732f0d5a0c59b0f1b4b907" +checksum = "a3b801d0e0a6726477cc207f60162da452f3a95adb368399bef20a946e06f65c" dependencies = [ "memchr", ] @@ -4001,7 +4010,7 @@ checksum = "e283cc794a890f5bdc01e358ad7c34535025f79ba83c1b5c7e01e5d6c60b336d" dependencies = [ "async-tungstenite", "async_io_stream", - "bitflags 2.4.0", + "bitflags 2.4.1", "futures-core", "futures-io", "futures-sink", @@ -4039,6 +4048,26 @@ version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "09041cd90cf85f7f8b2df60c646f853b7f535ce68f85244eb6731cf89fa498ec" +[[package]] +name = "zerocopy" +version = "0.7.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4c19fae0c8a9efc6a8281f2e623db8af1db9e57852e04cde3e754dd2dc29340f" +dependencies = [ + "zerocopy-derive", +] + +[[package]] +name = "zerocopy-derive" +version = "0.7.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fc56589e9ddd1f1c28d4b4b5c773ce232910a6bb67a70133d61c9e347585efe9" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.38", +] + [[package]] name = "zeroize" version = "1.6.0" diff --git a/bindings/nodejs/examples/package.json b/bindings/nodejs/examples/package.json index 0f440e4a2e..0aabe8b208 100644 --- a/bindings/nodejs/examples/package.json +++ b/bindings/nodejs/examples/package.json @@ -21,5 +21,8 @@ "@types/": "ethereumjs/rlp", "typescript": "^4.6.3", "web3": "^1.10.0" + }, + "resolutions": { + "tough-cookie": "^4.1.3" } } diff --git a/bindings/nodejs/examples/yarn.lock b/bindings/nodejs/examples/yarn.lock index e784520517..0eaab482e1 100644 --- a/bindings/nodejs/examples/yarn.lock +++ b/bindings/nodejs/examples/yarn.lock @@ -1941,7 +1941,7 @@ proxy-addr@~2.0.7: forwarded "0.2.0" ipaddr.js "1.9.1" -psl@^1.1.28: +psl@^1.1.33: version "1.9.0" resolved "https://registry.yarnpkg.com/psl/-/psl-1.9.0.tgz#d0df2a137f00794565fcaf3b2c00cd09f8d5a5a7" integrity sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag== @@ -1985,6 +1985,11 @@ query-string@^5.0.1: object-assign "^4.1.0" strict-uri-encode "^1.0.0" +querystringify@^2.1.1: + version "2.2.0" + resolved "https://registry.yarnpkg.com/querystringify/-/querystringify-2.2.0.tgz#3345941b4153cb9d082d8eee4cda2016a9aef7f6" + integrity sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ== + quick-lru@^5.1.1: version "5.1.1" resolved "https://registry.yarnpkg.com/quick-lru/-/quick-lru-5.1.1.tgz#366493e6b3e42a3a6885e2e99d18f80fb7a8c932" @@ -2072,6 +2077,11 @@ request@^2.79.0: tunnel-agent "^0.6.0" uuid "^3.3.2" +requires-port@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff" + integrity sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ== + resolve-alpn@^1.0.0, resolve-alpn@^1.2.0: version "1.2.1" resolved "https://registry.yarnpkg.com/resolve-alpn/-/resolve-alpn-1.2.1.tgz#b7adbdac3546aaaec20b45e7d8265927072726f9" @@ -2330,13 +2340,15 @@ toidentifier@1.0.1: resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.1.tgz#3be34321a88a820ed1bd80dfaa33e479fbb8dd35" integrity sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA== -tough-cookie@~2.5.0: - version "2.5.0" - resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.5.0.tgz#cd9fb2a0aa1d5a12b473bd9fb96fa3dcff65ade2" - integrity sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g== +tough-cookie@^4.1.3, tough-cookie@~2.5.0: + version "4.1.3" + resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-4.1.3.tgz#97b9adb0728b42280aa3d814b6b999b2ff0318bf" + integrity sha512-aX/y5pVRkfRnfmuX+OdbSdXvPe6ieKX/G2s7e98f4poJHnqH3281gDPm/metm6E/WRamfx7WC4HUqkWHfQHprw== dependencies: - psl "^1.1.28" + psl "^1.1.33" punycode "^2.1.1" + universalify "^0.2.0" + url-parse "^1.5.3" tr46@~0.0.3: version "0.0.3" @@ -2414,6 +2426,11 @@ universalify@^0.1.0: resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66" integrity sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg== +universalify@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.2.0.tgz#6451760566fa857534745ab1dde952d1b1761be0" + integrity sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg== + unpipe@1.0.0, unpipe@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" @@ -2426,6 +2443,14 @@ uri-js@^4.2.2: dependencies: punycode "^2.1.0" +url-parse@^1.5.3: + version "1.5.10" + resolved "https://registry.yarnpkg.com/url-parse/-/url-parse-1.5.10.tgz#9d3c2f736c1d75dd3bd2be507dcc111f1e2ea9c1" + integrity sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ== + dependencies: + querystringify "^2.1.1" + requires-port "^1.0.0" + url-set-query@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/url-set-query/-/url-set-query-1.0.0.tgz#016e8cfd7c20ee05cafe7795e892bd0702faa339" diff --git a/bindings/nodejs/package-lock.json b/bindings/nodejs/package-lock.json index d3b6f1ac8b..5b5246bbb0 100644 --- a/bindings/nodejs/package-lock.json +++ b/bindings/nodejs/package-lock.json @@ -1,12 +1,12 @@ { "name": "@iota/sdk", - "version": "1.1.0", + "version": "1.1.1", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "@iota/sdk", - "version": "1.1.0", + "version": "1.1.1", "hasInstallScript": true, "license": "Apache-2.0", "dependencies": { @@ -27,7 +27,7 @@ "eslint-config-prettier": "^8.5.0", "jest": "^29.4.2", "jest-matcher-utils": "^29.5.0", - "prebuild": "^11.0.4", + "prebuild": "^3.0.3", "prettier": "^2.8.3", "ts-jest": "^29.0.5", "typedoc": "^0.24.6", @@ -59,12 +59,12 @@ } }, "node_modules/@babel/code-frame": { - "version": "7.22.10", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.22.10.tgz", - "integrity": "sha512-/KKIMG4UEL35WmI9OlvMhurwtytjvXoFcGNrOvyG9zIzA8YmPjVtIZUf7b05+TPO7G7/GEmLHDaoCgACHl9hhA==", + "version": "7.22.13", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.22.13.tgz", + "integrity": "sha512-XktuhWlJ5g+3TJXc5upd9Ks1HutSArik6jf2eAjYFyIOf4ej3RN+184cZbzDvbPnuTJIUhPKKJE3cIsYTiAT3w==", "dev": true, "dependencies": { - "@babel/highlight": "^7.22.10", + "@babel/highlight": "^7.22.13", "chalk": "^2.4.2" }, "engines": { @@ -197,12 +197,12 @@ } }, "node_modules/@babel/generator": { - "version": "7.22.10", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.22.10.tgz", - "integrity": "sha512-79KIf7YiWjjdZ81JnLujDRApWtl7BxTqWD88+FFdQEIOG8LJ0etDOM7CXuIgGJa55sGOwZVwuEsaLEm0PJ5/+A==", + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.23.0.tgz", + "integrity": "sha512-lN85QRR+5IbYrMWM6Y4pE/noaQtg4pNiqeNGX60eqOfo6gtEj6uw/JagelB8vVztSd7R6M5n1+PQkDbHbBRU4g==", "dev": true, "dependencies": { - "@babel/types": "^7.22.10", + "@babel/types": "^7.23.0", "@jridgewell/gen-mapping": "^0.3.2", "@jridgewell/trace-mapping": "^0.3.17", "jsesc": "^2.5.1" @@ -237,22 +237,22 @@ } }, "node_modules/@babel/helper-environment-visitor": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.5.tgz", - "integrity": "sha512-XGmhECfVA/5sAt+H+xpSg0mfrHq6FzNr9Oxh7PSEBBRUb/mL7Kz3NICXb194rCqAEdxkhPT1a88teizAFyvk8Q==", + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz", + "integrity": "sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==", "dev": true, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-function-name": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.22.5.tgz", - "integrity": "sha512-wtHSq6jMRE3uF2otvfuD3DIvVhOsSNshQl0Qrd7qC9oQJzHvOL4qQXlQn2916+CXGywIjpGuIkoyZRRxHPiNQQ==", + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz", + "integrity": "sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==", "dev": true, "dependencies": { - "@babel/template": "^7.22.5", - "@babel/types": "^7.22.5" + "@babel/template": "^7.22.15", + "@babel/types": "^7.23.0" }, "engines": { "node": ">=6.9.0" @@ -344,9 +344,9 @@ } }, "node_modules/@babel/helper-validator-identifier": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.5.tgz", - "integrity": "sha512-aJXu+6lErq8ltp+JhkJUfk1MTGyuA4v7f3pA+BJ5HLfNC6nAQ0Cpi9uOquUj8Hehg0aUiHzWQbOVJGao6ztBAQ==", + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz", + "integrity": "sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==", "dev": true, "engines": { "node": ">=6.9.0" @@ -376,12 +376,12 @@ } }, "node_modules/@babel/highlight": { - "version": "7.22.10", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.22.10.tgz", - "integrity": "sha512-78aUtVcT7MUscr0K5mIEnkwxPE0MaxkR5RxRwuHaQ+JuU5AmTPhY+do2mdzVTnIJJpyBglql2pehuBIWHug+WQ==", + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.22.20.tgz", + "integrity": "sha512-dkdMCN3py0+ksCgYmGG8jKeGA/8Tk+gJwSYYlFGxG5lmhfKNoAy004YpLxpS1W2J8m/EK2Ew+yOs9pVRwO89mg==", "dev": true, "dependencies": { - "@babel/helper-validator-identifier": "^7.22.5", + "@babel/helper-validator-identifier": "^7.22.20", "chalk": "^2.4.2", "js-tokens": "^4.0.0" }, @@ -461,9 +461,9 @@ } }, "node_modules/@babel/parser": { - "version": "7.22.10", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.22.10.tgz", - "integrity": "sha512-lNbdGsQb9ekfsnjFGhEiF4hfFqGgfOP3H3d27re3n+CGhNuTSUEQdfWk556sTLNTloczcdM5TYF2LhzmDQKyvQ==", + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.23.0.tgz", + "integrity": "sha512-vvPKKdMemU85V9WE/l5wZEmImpCtLqbnTvqDS2U1fJ96KrxoW7KrXhNsNCblQlg8Ck4b85yxdTyelsMUgFUXiw==", "dev": true, "bin": { "parser": "bin/babel-parser.js" @@ -650,33 +650,33 @@ } }, "node_modules/@babel/template": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.5.tgz", - "integrity": "sha512-X7yV7eiwAxdj9k94NEylvbVHLiVG1nvzCV2EAowhxLTwODV1jl9UzZ48leOC0sH7OnuHrIkllaBgneUykIcZaw==", + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.15.tgz", + "integrity": "sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w==", "dev": true, "dependencies": { - "@babel/code-frame": "^7.22.5", - "@babel/parser": "^7.22.5", - "@babel/types": "^7.22.5" + "@babel/code-frame": "^7.22.13", + "@babel/parser": "^7.22.15", + "@babel/types": "^7.22.15" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/traverse": { - "version": "7.22.10", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.22.10.tgz", - "integrity": "sha512-Q/urqV4pRByiNNpb/f5OSv28ZlGJiFiiTh+GAHktbIrkPhPbl90+uW6SmpoLyZqutrg9AEaEf3Q/ZBRHBXgxig==", + "version": "7.23.2", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.23.2.tgz", + "integrity": "sha512-azpe59SQ48qG6nu2CzcMLbxUudtN+dOM9kDbUqGq3HXUJRlo7i8fvPoxQUzYgLZ4cMVmuZgm8vvBpNeRhd6XSw==", "dev": true, "dependencies": { - "@babel/code-frame": "^7.22.10", - "@babel/generator": "^7.22.10", - "@babel/helper-environment-visitor": "^7.22.5", - "@babel/helper-function-name": "^7.22.5", + "@babel/code-frame": "^7.22.13", + "@babel/generator": "^7.23.0", + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-function-name": "^7.23.0", "@babel/helper-hoist-variables": "^7.22.5", "@babel/helper-split-export-declaration": "^7.22.6", - "@babel/parser": "^7.22.10", - "@babel/types": "^7.22.10", + "@babel/parser": "^7.23.0", + "@babel/types": "^7.23.0", "debug": "^4.1.0", "globals": "^11.1.0" }, @@ -694,13 +694,13 @@ } }, "node_modules/@babel/types": { - "version": "7.22.10", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.22.10.tgz", - "integrity": "sha512-obaoigiLrlDZ7TUQln/8m4mSqIW2QFeOrCQc9r+xsaHGNoplVNYlRVpsfE8Vj35GEm2ZH4ZhrNYogs/3fj85kg==", + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.23.0.tgz", + "integrity": "sha512-0oIyUfKoI3mSqMvsxBdclDwxXKXAUA8v/apZbc+iSyARYou1o8ZGDxbUYyLFoW2arqS2jDGqJuZvv1d/io1axg==", "dev": true, "dependencies": { "@babel/helper-string-parser": "^7.22.5", - "@babel/helper-validator-identifier": "^7.22.5", + "@babel/helper-validator-identifier": "^7.22.20", "to-fast-properties": "^2.0.0" }, "engines": { @@ -1919,15 +1919,6 @@ "ajv": "^6.9.1" } }, - "node_modules/amdefine": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz", - "integrity": "sha512-S2Hw0TtNkMJhIabBwIojKL9YHO5T0n5eNqWJ7Lrlel/zDbftQpxpapi8tZs3X1HWa+u+QeydGmzzNU0m09+Rcg==", - "dev": true, - "engines": { - "node": ">=0.4.2" - } - }, "node_modules/ansi": { "version": "0.3.1", "resolved": "https://registry.npmjs.org/ansi/-/ansi-0.3.1.tgz", @@ -2056,34 +2047,6 @@ "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", "dev": true }, - "node_modules/array-index": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/array-index/-/array-index-1.0.0.tgz", - "integrity": "sha512-jesyNbBkLQgGZMSwA1FanaFjalb1mZUGxGeUEkSDidzgrbjBGhvizJkaItdhkt8eIHFOJC7nDsrXk+BaehTdRw==", - "dev": true, - "dependencies": { - "debug": "^2.2.0", - "es6-symbol": "^3.0.2" - }, - "engines": { - "node": "*" - } - }, - "node_modules/array-index/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/array-index/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true - }, "node_modules/array-union": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", @@ -2111,6 +2074,12 @@ "node": ">=0.8" } }, + "node_modules/async": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", + "integrity": "sha512-nSVgobk4rv61R9PUSDtYt7mPVB2olxNR5RWJcAsH676/ef11bUZwvu7+RGYrYauVdDPcO519v68wRhXQtxsV9w==", + "dev": true + }, "node_modules/asynckit": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", @@ -2257,28 +2226,6 @@ "tweetnacl": "^0.14.3" } }, - "node_modules/big-integer": { - "version": "1.6.51", - "resolved": "https://registry.npmjs.org/big-integer/-/big-integer-1.6.51.tgz", - "integrity": "sha512-GPEid2Y9QU1Exl1rpO9B2IPJGHPSupF5GnVIP0blYvNOMer2bTvSWs1jGOUg04hTmu67nmLsQ9TBo1puaotBHg==", - "dev": true, - "engines": { - "node": ">=0.6" - } - }, - "node_modules/binary": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/binary/-/binary-0.3.0.tgz", - "integrity": "sha512-D4H1y5KYwpJgK8wk1Cue5LLPgmwHKYSChkbspQg5JtVuR5ulGckxfR62H3AE9UDkdMC8yyXlqYihuz3Aqg2XZg==", - "dev": true, - "dependencies": { - "buffers": "~0.1.1", - "chainsaw": "~0.1.0" - }, - "engines": { - "node": "*" - } - }, "node_modules/bl": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/bl/-/bl-3.0.1.tgz", @@ -2288,12 +2235,6 @@ "readable-stream": "^3.0.1" } }, - "node_modules/bluebird": { - "version": "3.7.2", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", - "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==", - "dev": true - }, "node_modules/brace-expansion": { "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", @@ -2392,35 +2333,33 @@ "ieee754": "^1.1.13" } }, - "node_modules/buffer-from": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-0.1.2.tgz", - "integrity": "sha512-RiWIenusJsmI2KcvqQABB83tLxCByE3upSP8QU3rJDMVFGPWLvPQJt/O1Su9moRWeH7d+Q2HYb68f6+v+tw2vg==", - "dev": true - }, - "node_modules/buffer-indexof-polyfill": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/buffer-indexof-polyfill/-/buffer-indexof-polyfill-1.0.2.tgz", - "integrity": "sha512-I7wzHwA3t1/lwXQh+A5PbNvJxgfo5r3xulgpYDB5zckTu/Z9oUK9biouBKQUjEqzaz3HnAT6TYoovmE+GqSf7A==", + "node_modules/buffer-alloc": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/buffer-alloc/-/buffer-alloc-1.2.0.tgz", + "integrity": "sha512-CFsHQgjtW1UChdXgbyJGtnm+O/uLQeZdtbDo8mfUgYXCHSM1wgrVxXm6bSyrUuErEb+4sYVGCzASBRot7zyrow==", "dev": true, - "engines": { - "node": ">=0.10" + "dependencies": { + "buffer-alloc-unsafe": "^1.1.0", + "buffer-fill": "^1.0.0" } }, - "node_modules/buffer-shims": { + "node_modules/buffer-alloc-unsafe": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz", + "integrity": "sha512-TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg==", + "dev": true + }, + "node_modules/buffer-fill": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/buffer-shims/-/buffer-shims-1.0.0.tgz", - "integrity": "sha512-Zy8ZXMyxIT6RMTeY7OP/bDndfj6bwCan7SS98CEndS6deHwWPpseeHlwarNcBim+etXnF9HBc1non5JgDaJU1g==", + "resolved": "https://registry.npmjs.org/buffer-fill/-/buffer-fill-1.0.0.tgz", + "integrity": "sha512-T7zexNBwiiaCOGDg9xNX9PBmjrubblRkENuptryuI64URkXDFum9il/JGL8Lm8wYfAXpredVXXZz7eMHilimiQ==", "dev": true }, - "node_modules/buffers": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/buffers/-/buffers-0.1.1.tgz", - "integrity": "sha512-9q/rDEGSb/Qsvv2qvzIzdluL5k7AaJOTrw23z9reQthrbF7is4CtlT0DXyO1oei2DCp4uojjzQ7igaSHp1kAEQ==", - "dev": true, - "engines": { - "node": ">=0.2.0" - } + "node_modules/buffer-from": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-0.1.2.tgz", + "integrity": "sha512-RiWIenusJsmI2KcvqQABB83tLxCByE3upSP8QU3rJDMVFGPWLvPQJt/O1Su9moRWeH7d+Q2HYb68f6+v+tw2vg==", + "dev": true }, "node_modules/callsites": { "version": "3.1.0", @@ -2474,18 +2413,6 @@ "integrity": "sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==", "dev": true }, - "node_modules/chainsaw": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/chainsaw/-/chainsaw-0.1.0.tgz", - "integrity": "sha512-75kWfWt6MEKNC8xYXIdRpDehRYY/tNSgwKaJq+dbbDcxORuVrrQ+SEHoWsniVn9XPYfP4gmdWIeDk/4YNp1rNQ==", - "dev": true, - "dependencies": { - "traverse": ">=0.3.0 <0.4" - }, - "engines": { - "node": "*" - } - }, "node_modules/chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", @@ -2602,197 +2529,6 @@ "node": ">=6" } }, - "node_modules/cmake-js": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/cmake-js/-/cmake-js-5.2.0.tgz", - "integrity": "sha512-/HLhzoBEOLKGdE1FLwH5ggzRt67AWTb4IErg4rm+bTC+R0DKUobojDyp17dSswDVPosdoPmHXjKxbJiyBZfQeg==", - "dev": true, - "dependencies": { - "bluebird": "^3", - "debug": "^4", - "fs-extra": "^5.0.0", - "is-iojs": "^1.0.1", - "lodash": "^4", - "memory-stream": "0", - "npmlog": "^1.2.0", - "rc": "^1.2.7", - "request": "^2.54.0", - "semver": "^5.0.3", - "splitargs": "0", - "tar": "^4", - "traceur": "0.0.x", - "unzipper": "^0.8.13", - "url-join": "0", - "which": "^1.0.9", - "yargs": "^3.6.0" - }, - "bin": { - "cmake-js": "bin/cmake-js" - }, - "engines": { - "node": ">= 4.0.0" - } - }, - "node_modules/cmake-js/node_modules/ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/cmake-js/node_modules/are-we-there-yet": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.0.6.tgz", - "integrity": "sha512-Zfw6bteqM9gQXZ1BIWOgM8xEwMrUGoyL8nW13+O+OOgNX3YhuDN1GDgg1NzdTlmm3j+9sHy7uBZ12r+z9lXnZQ==", - "dev": true, - "dependencies": { - "delegates": "^1.0.0", - "readable-stream": "^2.0.0 || ^1.1.13" - } - }, - "node_modules/cmake-js/node_modules/camelcase": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz", - "integrity": "sha512-DLIsRzJVBQu72meAKPkWQOLcujdXT32hwdfnkI1frSiSRMK1MofjKHf+MEx0SB6fjEFXL8fBDv1dKymBlOp4Qw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/cmake-js/node_modules/cliui": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz", - "integrity": "sha512-0yayqDxWQbqk3ojkYqUKqaAQ6AfNKeKWRNA8kR0WXzAsdHpP4BIaOmMAG87JGuO6qcobyW4GjxHd9PmhEd+T9w==", - "dev": true, - "dependencies": { - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1", - "wrap-ansi": "^2.0.0" - } - }, - "node_modules/cmake-js/node_modules/gauge": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/gauge/-/gauge-1.2.7.tgz", - "integrity": "sha512-fVbU2wRE91yDvKUnrIaQlHKAWKY5e08PmztCrwuH5YVQ+Z/p3d0ny2T48o6uvAAXHIUnfaQdHkmxYbQft1eHVA==", - "dev": true, - "dependencies": { - "ansi": "^0.3.0", - "has-unicode": "^2.0.0", - "lodash.pad": "^4.1.0", - "lodash.padend": "^4.1.0", - "lodash.padstart": "^4.1.0" - } - }, - "node_modules/cmake-js/node_modules/npmlog": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-1.2.1.tgz", - "integrity": "sha512-1J5KqSRvESP6XbjPaXt2H6qDzgizLTM7x0y1cXIjP2PpvdCqyNC7TO3cPRKsuYlElbi/DwkzRRdG2zpmE0IktQ==", - "dev": true, - "dependencies": { - "ansi": "~0.3.0", - "are-we-there-yet": "~1.0.0", - "gauge": "~1.2.0" - } - }, - "node_modules/cmake-js/node_modules/readable-stream": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", - "dev": true, - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "node_modules/cmake-js/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, - "node_modules/cmake-js/node_modules/semver": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", - "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", - "dev": true, - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/cmake-js/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, - "node_modules/cmake-js/node_modules/strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==", - "dev": true, - "dependencies": { - "ansi-regex": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/cmake-js/node_modules/which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "dev": true, - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "which": "bin/which" - } - }, - "node_modules/cmake-js/node_modules/wrap-ansi": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", - "integrity": "sha512-vAaEaDM946gbNpH5pLVNR+vX2ht6n0Bt3GXwVB1AuAqZosOvHNF3P7wDnh8KLkSqgUh0uh77le7Owgoz+Z9XBw==", - "dev": true, - "dependencies": { - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/cmake-js/node_modules/y18n": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.2.tgz", - "integrity": "sha512-uGZHXkHnhF0XeeAPgnKfPv1bgKAYyVvmNL1xlKsPYZPaIHxGti2hHqvOCQv71XMsLxu1QjergkqogUnms5D3YQ==", - "dev": true - }, - "node_modules/cmake-js/node_modules/yargs": { - "version": "3.32.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-3.32.0.tgz", - "integrity": "sha512-ONJZiimStfZzhKamYvR/xvmgW3uEkAUFSP91y2caTEPhzF6uP2JfPiVZcq66b/YR0C3uitxSV7+T1x8p5bkmMg==", - "dev": true, - "dependencies": { - "camelcase": "^2.0.1", - "cliui": "^3.0.3", - "decamelize": "^1.1.1", - "os-locale": "^1.4.0", - "string-width": "^1.0.1", - "window-size": "^0.1.4", - "y18n": "^3.2.0" - } - }, "node_modules/co": { "version": "4.6.0", "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", @@ -2898,16 +2634,6 @@ "node": ">= 8" } }, - "node_modules/d": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/d/-/d-1.0.1.tgz", - "integrity": "sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==", - "dev": true, - "dependencies": { - "es5-ext": "^0.10.50", - "type": "^1.0.1" - } - }, "node_modules/dashdash": { "version": "1.14.1", "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", @@ -2937,15 +2663,6 @@ } } }, - "node_modules/decamelize": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/decompress-response": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", @@ -3107,15 +2824,6 @@ "integrity": "sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ==", "dev": true }, - "node_modules/each-series-async": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/each-series-async/-/each-series-async-1.0.1.tgz", - "integrity": "sha512-G4zip/Ewpwr6JQxW7+2RNgkPd09h/UNec5UlvA/xKwl4qf5blyBNK6a/zjQc3MojgsxaOb93B9v3T92QU6IMVg==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/ecc-jsbn": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", @@ -3184,15 +2892,6 @@ "node": ">=10.13.0" } }, - "node_modules/env-paths": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", - "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", - "dev": true, - "engines": { - "node": ">=6" - } - }, "node_modules/envinfo": { "version": "7.10.0", "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.10.0.tgz", @@ -3220,42 +2919,6 @@ "integrity": "sha512-JUFAyicQV9mXc3YRxPnDlrfBKpqt6hUYzz9/boprUJHs4e4KVr3XwOF70doO6gwXUor6EWZJAyWAfKki84t20Q==", "dev": true }, - "node_modules/es5-ext": { - "version": "0.10.62", - "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.62.tgz", - "integrity": "sha512-BHLqn0klhEpnOKSrzn/Xsz2UIW8j+cGmo9JLzr8BiUapV8hPL9+FliFqjwr9ngW7jWdnxv6eO+/LqyhJVqgrjA==", - "dev": true, - "hasInstallScript": true, - "dependencies": { - "es6-iterator": "^2.0.3", - "es6-symbol": "^3.1.3", - "next-tick": "^1.1.0" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/es6-iterator": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", - "integrity": "sha512-zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g==", - "dev": true, - "dependencies": { - "d": "1", - "es5-ext": "^0.10.35", - "es6-symbol": "^3.1.1" - } - }, - "node_modules/es6-symbol": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.3.tgz", - "integrity": "sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA==", - "dev": true, - "dependencies": { - "d": "^1.0.1", - "ext": "^1.1.2" - } - }, "node_modules/escalade": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", @@ -3515,15 +3178,6 @@ "url": "https://github.com/sindresorhus/execa?sponsor=1" } }, - "node_modules/execspawn": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/execspawn/-/execspawn-1.0.1.tgz", - "integrity": "sha512-s2k06Jy9i8CUkYe0+DxRlvtkZoOkwwfhB+Xxo5HGUtrISVW2m98jO2tr67DGRFxZwkjQqloA3v/tNtjhBRBieg==", - "dev": true, - "dependencies": { - "util-extend": "^1.0.1" - } - }, "node_modules/exit": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", @@ -3558,21 +3212,6 @@ "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/ext": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/ext/-/ext-1.7.0.tgz", - "integrity": "sha512-6hxeJYaL110a9b5TEJSj0gojyHQAmA2ch5Os+ySCiA1QGdS697XWY1pzsrSjqA9LDEEgdB/KypIlR59RcLuHYw==", - "dev": true, - "dependencies": { - "type": "^2.7.2" - } - }, - "node_modules/ext/node_modules/type": { - "version": "2.7.2", - "resolved": "https://registry.npmjs.org/type/-/type-2.7.2.tgz", - "integrity": "sha512-dzlvlNlt6AXU7EBSfpAscydQ7gXB+pPGsPnfJnZpiNJBDj7IaJzQlBZYGdEi4R9HmPdBv2XmWJ6YUtoTa7lmCw==", - "dev": true - }, "node_modules/extend": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", @@ -3748,17 +3387,6 @@ "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==" }, - "node_modules/fs-extra": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-5.0.0.tgz", - "integrity": "sha512-66Pm4RYbjzdyeuqudYqhFiNBbCIuI9kgRqLPSHIlXHidW8NIQtVdkM1yeZ4lXwuhbTETv3EUGMNHAAw6hiundQ==", - "dev": true, - "dependencies": { - "graceful-fs": "^4.1.2", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - } - }, "node_modules/fs-minipass": { "version": "1.2.7", "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-1.2.7.tgz", @@ -3907,20 +3535,17 @@ } }, "node_modules/ghreleases": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/ghreleases/-/ghreleases-3.0.2.tgz", - "integrity": "sha512-QiR9mIYvRG7hd8JuQYoxeBNOelVuTp2DpdiByRywbCDBSJufK9Vq7VuhD8B+5uviMxZx2AEkCzye61Us9gYgnw==", + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/ghreleases/-/ghreleases-1.0.7.tgz", + "integrity": "sha512-1lFGyLLF38Q6cFCDyebN5vzQ2P9DEaAgxPIDLmQwQDVDmUe2Wgv+6dhAIoHeA+My4HLpaJ+dKF73xtuykN2cbQ==", "dev": true, "dependencies": { "after": "~0.8.1", "ghrepos": "~2.1.0", "ghutils": "~3.2.0", - "lodash.uniq": "^4.5.0", "simple-mime": "~0.1.0", - "url-template": "~2.0.6" - }, - "engines": { - "node": ">=6" + "url-template": "~2.0.6", + "xtend": "~4.0.0" } }, "node_modules/ghrepos": { @@ -4026,12 +3651,6 @@ "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", "dev": true }, - "node_modules/graceful-readlink": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/graceful-readlink/-/graceful-readlink-1.0.1.tgz", - "integrity": "sha512-8tLu60LgxF6XpdbK8OW3FA+IfTNBn1ZHGHKF4KQbEeSkajYw5PlYJcKluntgegDPTg8UkHjpet1T82vk6TQ68w==", - "dev": true - }, "node_modules/graphemer": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", @@ -4251,15 +3870,6 @@ "node": ">=10.13.0" } }, - "node_modules/invert-kv": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz", - "integrity": "sha512-xgs2NH9AE66ucSq4cNG1nhSFghr5l6tdL15Pk+jl46bmmBapgoaY/AacXyaDznAqmGL99TiLSQgO/XazFSKYeQ==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/is-arrayish": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", @@ -4320,12 +3930,6 @@ "node": ">=0.10.0" } }, - "node_modules/is-iojs": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-iojs/-/is-iojs-1.1.0.tgz", - "integrity": "sha512-tLn1j3wYSL6DkvEI+V/j0pKohpa5jk+ER74v6S4SgCXnjS0WA+DoZbwZBrrhgwksMvtuwndyGeG5F8YMsoBzSA==", - "dev": true - }, "node_modules/is-number": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", @@ -5115,15 +4719,6 @@ "integrity": "sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w==", "dev": true }, - "node_modules/jsonfile": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", - "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", - "dev": true, - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, "node_modules/jsonist": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/jsonist/-/jsonist-2.1.2.tgz", @@ -5169,18 +4764,6 @@ "node": ">=6" } }, - "node_modules/lcid": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz", - "integrity": "sha512-YiGkH6EnGrDGqLMITnGjXtGmNtjoXw9SVUzcaos8RBi7Ps0VBylkq+vOcY9QE5poLasPCR849ucFUkl0UzUyOw==", - "dev": true, - "dependencies": { - "invert-kv": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/leven": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", @@ -5209,12 +4792,6 @@ "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", "dev": true }, - "node_modules/listenercount": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/listenercount/-/listenercount-1.0.1.tgz", - "integrity": "sha512-3mk/Zag0+IJxeDrxSgaDPy4zZ3w05PRZeJNnlWhzFz5OkX49J4krc+A8X2d2M69vGMBEX0uyl8M+W+8gH+kBqQ==", - "dev": true - }, "node_modules/loader-runner": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz", @@ -5239,12 +4816,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "dev": true - }, "node_modules/lodash.memoize": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", @@ -5275,12 +4846,6 @@ "integrity": "sha512-sW73O6S8+Tg66eY56DBk85aQzzUJDtpoXFBgELMd5P/SotAguo+1kYO6RuYgXxA4HJH3LFTFPASX6ET6bjfriw==", "dev": true }, - "node_modules/lodash.uniq": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", - "integrity": "sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==", - "dev": true - }, "node_modules/lru-cache": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", @@ -5338,39 +4903,6 @@ "node": ">= 12" } }, - "node_modules/memory-stream": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/memory-stream/-/memory-stream-0.0.3.tgz", - "integrity": "sha512-q0D3m846qY6ZkIt+19ZemU5vH56lpOZZwoJc3AICARKh/menBuayQUjAGPrqtHQQMUYERSdOrej92J9kz7LgYA==", - "dev": true, - "dependencies": { - "readable-stream": "~1.0.26-2" - } - }, - "node_modules/memory-stream/node_modules/isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==", - "dev": true - }, - "node_modules/memory-stream/node_modules/readable-stream": { - "version": "1.0.34", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", - "integrity": "sha512-ok1qVCJuRkNmvebYikljxJA/UEsKwLl2nI1OmaqAu4/UE+h0wKCHok4XkL/gvi39OacXvw59RJUOFUkDib2rHg==", - "dev": true, - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "0.0.1", - "string_decoder": "~0.10.x" - } - }, - "node_modules/memory-stream/node_modules/string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ==", - "dev": true - }, "node_modules/merge-stream": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", @@ -5525,12 +5057,6 @@ "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", "dev": true }, - "node_modules/next-tick": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.1.0.tgz", - "integrity": "sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==", - "dev": true - }, "node_modules/node-abi": { "version": "3.46.0", "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-3.46.0.tgz", @@ -5543,28 +5069,29 @@ } }, "node_modules/node-gyp": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-6.1.0.tgz", - "integrity": "sha512-h4A2zDlOujeeaaTx06r4Vy+8MZ1679lU+wbCKDS4ZtvY2A37DESo37oejIw0mtmR3+rvNwts5B6Kpt1KrNYdNw==", + "version": "3.8.0", + "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-3.8.0.tgz", + "integrity": "sha512-3g8lYefrRRzvGeSowdJKAKyks8oUpLEd/DyPV4eMhVlhJ0aNaZqIrNUIPuEWWTAoPqyFkfGrM67MC69baqn6vA==", "dev": true, "dependencies": { - "env-paths": "^2.2.0", - "glob": "^7.1.4", - "graceful-fs": "^4.2.2", - "mkdirp": "^0.5.1", - "nopt": "^4.0.1", - "npmlog": "^4.1.2", - "request": "^2.88.0", - "rimraf": "^2.6.3", - "semver": "^5.7.1", - "tar": "^4.4.12", - "which": "^1.3.1" + "fstream": "^1.0.0", + "glob": "^7.0.3", + "graceful-fs": "^4.1.2", + "mkdirp": "^0.5.0", + "nopt": "2 || 3", + "npmlog": "0 || 1 || 2 || 3 || 4", + "osenv": "0", + "request": "^2.87.0", + "rimraf": "2", + "semver": "~5.3.0", + "tar": "^2.0.0", + "which": "1" }, "bin": { "node-gyp": "bin/node-gyp.js" }, "engines": { - "node": ">= 6.0.0" + "node": ">= 0.8.0" } }, "node_modules/node-gyp/node_modules/rimraf": { @@ -5580,9 +5107,9 @@ } }, "node_modules/node-gyp/node_modules/semver": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", - "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.3.0.tgz", + "integrity": "sha512-mfmm3/H9+67MCVix1h+IXTpDwL6710LyHuk7+cWC9T1mE0qz4iHhh6r4hU2wrIT9iTsAAC2XQRvfblL028cpLw==", "dev": true, "bin": { "semver": "bin/semver" @@ -5606,103 +5133,6 @@ "integrity": "sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==", "dev": true }, - "node_modules/node-ninja": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/node-ninja/-/node-ninja-1.0.2.tgz", - "integrity": "sha512-wMtWsG2QZI1Z5V7GciX9OI2DVT0PuDRIDQfe3L3rJsQ1qN1Gm3QQhoNtb4PMRi7gq4ByvEIYtPwHC7YbEf5yxw==", - "dev": true, - "dependencies": { - "fstream": "^1.0.0", - "glob": "3 || 4 || 5 || 6 || 7", - "graceful-fs": "^4.1.2", - "minimatch": "3", - "mkdirp": "^0.5.0", - "nopt": "2 || 3", - "npmlog": "0 || 1 || 2", - "osenv": "0", - "path-array": "^1.0.0", - "request": "2", - "rimraf": "2", - "semver": "2.x || 3.x || 4 || 5", - "tar": "^2.0.0", - "which": "1" - }, - "bin": { - "node-ninja": "bin/node-ninja.js" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/node-ninja/node_modules/gauge": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/gauge/-/gauge-1.2.7.tgz", - "integrity": "sha512-fVbU2wRE91yDvKUnrIaQlHKAWKY5e08PmztCrwuH5YVQ+Z/p3d0ny2T48o6uvAAXHIUnfaQdHkmxYbQft1eHVA==", - "dev": true, - "dependencies": { - "ansi": "^0.3.0", - "has-unicode": "^2.0.0", - "lodash.pad": "^4.1.0", - "lodash.padend": "^4.1.0", - "lodash.padstart": "^4.1.0" - } - }, - "node_modules/node-ninja/node_modules/nopt": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz", - "integrity": "sha512-4GUt3kSEYmk4ITxzB/b9vaIDfUVWN/Ml1Fwl11IlnIG2iaJ9O6WXZ9SrYM9NLI8OCBieN2Y8SWC2oJV0RQ7qYg==", - "dev": true, - "dependencies": { - "abbrev": "1" - }, - "bin": { - "nopt": "bin/nopt.js" - } - }, - "node_modules/node-ninja/node_modules/npmlog": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-2.0.4.tgz", - "integrity": "sha512-DaL6RTb8Qh4tMe2ttPT1qWccETy2Vi5/8p+htMpLBeXJTr2CAqnF5WQtSP2eFpvaNbhLZ5uilDb98mRm4Q+lZQ==", - "dev": true, - "dependencies": { - "ansi": "~0.3.1", - "are-we-there-yet": "~1.1.2", - "gauge": "~1.2.5" - } - }, - "node_modules/node-ninja/node_modules/rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", - "dev": true, - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - } - }, - "node_modules/node-ninja/node_modules/semver": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", - "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", - "dev": true, - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/node-ninja/node_modules/which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "dev": true, - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "which": "bin/which" - } - }, "node_modules/node-releases": { "version": "2.0.13", "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.13.tgz", @@ -5716,13 +5146,12 @@ "dev": true }, "node_modules/nopt": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-4.0.3.tgz", - "integrity": "sha512-CvaGwVMztSMJLOeXPrez7fyfObdZqNUK1cPAEzLHrTybIua9pMdmmPR5YwtfNftIOMv3DPUhFaxsZMNTQO20Kg==", + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz", + "integrity": "sha512-4GUt3kSEYmk4ITxzB/b9vaIDfUVWN/Ml1Fwl11IlnIG2iaJ9O6WXZ9SrYM9NLI8OCBieN2Y8SWC2oJV0RQ7qYg==", "dev": true, "dependencies": { - "abbrev": "1", - "osenv": "^0.1.4" + "abbrev": "1" }, "bin": { "nopt": "bin/nopt.js" @@ -5737,33 +5166,6 @@ "node": ">=0.10.0" } }, - "node_modules/npm-path": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/npm-path/-/npm-path-2.0.4.tgz", - "integrity": "sha512-IFsj0R9C7ZdR5cP+ET342q77uSRdtWOlWpih5eC+lu29tIDbNEgDbzgVJ5UFvYHWhxDZ5TFkJafFioO0pPQjCw==", - "dev": true, - "dependencies": { - "which": "^1.2.10" - }, - "bin": { - "npm-path": "bin/npm-path" - }, - "engines": { - "node": ">=0.8" - } - }, - "node_modules/npm-path/node_modules/which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "dev": true, - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "which": "bin/which" - } - }, "node_modules/npm-run-path": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", @@ -5776,35 +5178,6 @@ "node": ">=8" } }, - "node_modules/npm-which": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/npm-which/-/npm-which-3.0.1.tgz", - "integrity": "sha512-CM8vMpeFQ7MAPin0U3wzDhSGV0hMHNwHU0wjo402IVizPDrs45jSfSuoC+wThevY88LQti8VvaAnqYAeVy3I1A==", - "dev": true, - "dependencies": { - "commander": "^2.9.0", - "npm-path": "^2.0.2", - "which": "^1.2.10" - }, - "bin": { - "npm-which": "bin/npm-which.js" - }, - "engines": { - "node": ">=4.2.0" - } - }, - "node_modules/npm-which/node_modules/which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "dev": true, - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "which": "bin/which" - } - }, "node_modules/npmlog": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz", @@ -5826,91 +5199,19 @@ "node": ">=0.10.0" } }, - "node_modules/nw-gyp": { - "version": "3.6.6", - "resolved": "https://registry.npmjs.org/nw-gyp/-/nw-gyp-3.6.6.tgz", - "integrity": "sha512-FeMnpFQWtEEMJ1BrSfK3T62CjuxaNl0mNHqdrxFcIF5XQdC3gaZYW4n+77lQLk8PE3Upfknkl9VRo6gDKJIHuA==", + "node_modules/oauth-sign": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", + "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==", "dev": true, - "dependencies": { - "fstream": "^1.0.0", - "glob": "^7.0.3", - "graceful-fs": "^4.1.2", - "minimatch": "^3.0.2", - "mkdirp": "^0.5.0", - "nopt": "2 || 3", - "npmlog": "0 || 1 || 2 || 3 || 4", - "osenv": "0", - "request": "2", - "rimraf": "2", - "semver": "~5.3.0", - "tar": "^2.0.0", - "which": "1" - }, - "bin": { - "nw-gyp": "bin/nw-gyp.js" - }, "engines": { - "node": ">= 0.8.0" + "node": "*" } }, - "node_modules/nw-gyp/node_modules/nopt": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz", - "integrity": "sha512-4GUt3kSEYmk4ITxzB/b9vaIDfUVWN/Ml1Fwl11IlnIG2iaJ9O6WXZ9SrYM9NLI8OCBieN2Y8SWC2oJV0RQ7qYg==", - "dev": true, - "dependencies": { - "abbrev": "1" - }, - "bin": { - "nopt": "bin/nopt.js" - } - }, - "node_modules/nw-gyp/node_modules/rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", - "dev": true, - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - } - }, - "node_modules/nw-gyp/node_modules/semver": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.3.0.tgz", - "integrity": "sha512-mfmm3/H9+67MCVix1h+IXTpDwL6710LyHuk7+cWC9T1mE0qz4iHhh6r4hU2wrIT9iTsAAC2XQRvfblL028cpLw==", - "dev": true, - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/nw-gyp/node_modules/which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "dev": true, - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "which": "bin/which" - } - }, - "node_modules/oauth-sign": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", - "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==", - "dev": true, - "engines": { - "node": "*" - } - }, - "node_modules/object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", "dev": true, "engines": { "node": ">=0.10.0" @@ -5965,18 +5266,6 @@ "node": ">=0.10.0" } }, - "node_modules/os-locale": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz", - "integrity": "sha512-PRT7ZORmwu2MEFt4/fv3Q+mEfN4zetKxufQrkShY2oGvUms9r8otu5HfdyIFHkYXjO7laNsoVGmM2MANfuTA8g==", - "dev": true, - "dependencies": { - "lcid": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/os-tmpdir": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", @@ -6065,15 +5354,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/path-array": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-array/-/path-array-1.0.1.tgz", - "integrity": "sha512-teWG2rJTJJZi2kINKOsHcdIuHP7jy3D7pAsVgdhxMq8kaL2RnS5sg7YTlrClMVCIItcVbPTPI6eMBEoNxYahLA==", - "dev": true, - "dependencies": { - "array-index": "^1.0.0" - } - }, "node_modules/path-exists": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", @@ -6214,37 +5494,30 @@ } }, "node_modules/prebuild": { - "version": "11.0.4", - "resolved": "https://registry.npmjs.org/prebuild/-/prebuild-11.0.4.tgz", - "integrity": "sha512-n23Rzql2m8ldFpwcFyouGUrg9VByEF2IroEZlNvPLiQwTJWucTNxIaZEoyVe2AxPRzQb6Eph2ytObxVWm4FA7Q==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/prebuild/-/prebuild-3.0.3.tgz", + "integrity": "sha512-QGZMWEfs2zjsQ1Y9Lv4dwZ4EoE93E5UDxHKGc1iSBW8TvT4nM6Dc2DbhInDNlDJ/oGtFpoLwkQKivaoBXs+40g==", "dev": true, "dependencies": { - "cmake-js": "~5.2.0", - "detect-libc": "^2.0.0", - "each-series-async": "^1.0.1", - "execspawn": "^1.0.1", - "ghreleases": "^3.0.2", + "async": "^1.4.0", + "expand-template": "^1.0.0", + "ghreleases": "^1.0.2", "github-from-package": "0.0.0", - "glob": "^7.1.6", "minimist": "^1.1.2", "mkdirp": "^0.5.1", - "napi-build-utils": "^1.0.1", - "node-abi": "^3.0.0", - "node-gyp": "^6.0.1", - "node-ninja": "^1.0.1", + "node-gyp": "^3.0.3", "noop-logger": "^0.1.0", - "npm-which": "^3.0.1", - "npmlog": "^4.0.1", - "nw-gyp": "^3.6.3", + "npmlog": "^2.0.0", + "os-homedir": "^1.0.1", + "pump": "^1.0.0", "rc": "^1.0.3", - "run-waterfall": "^1.1.6", - "tar-stream": "^2.1.0" + "simple-get": "^1.4.2", + "tar-fs": "^1.7.0", + "tar-stream": "^1.2.1", + "xtend": "^4.0.1" }, "bin": { "prebuild": "bin.js" - }, - "engines": { - "node": ">=10" } }, "node_modules/prebuild-install": { @@ -6272,6 +5545,148 @@ "node": ">=10" } }, + "node_modules/prebuild/node_modules/bl": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/bl/-/bl-1.2.3.tgz", + "integrity": "sha512-pvcNpa0UU69UT341rO6AYy4FVAIkUHuZXRIWbq+zHnsVcRzDDjIAhGuuYoi0d//cwIwtt4pkpKycWEfjdV+vww==", + "dev": true, + "dependencies": { + "readable-stream": "^2.3.5", + "safe-buffer": "^5.1.1" + } + }, + "node_modules/prebuild/node_modules/decompress-response": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz", + "integrity": "sha512-BzRPQuY1ip+qDonAOz42gRm/pg9F768C+npV/4JOsxRC2sq+Rlk+Q4ZCAsOhnIaMrgarILY+RMUIvMmmX1qAEA==", + "dev": true, + "dependencies": { + "mimic-response": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/prebuild/node_modules/expand-template": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/expand-template/-/expand-template-1.1.1.tgz", + "integrity": "sha512-cebqLtV8KOZfw0UI8TEFWxtczxxC1jvyUvx6H4fyp1K1FN7A4Q+uggVUlOsI1K8AGU0rwOGqP8nCapdrw8CYQg==", + "dev": true + }, + "node_modules/prebuild/node_modules/gauge": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/gauge/-/gauge-1.2.7.tgz", + "integrity": "sha512-fVbU2wRE91yDvKUnrIaQlHKAWKY5e08PmztCrwuH5YVQ+Z/p3d0ny2T48o6uvAAXHIUnfaQdHkmxYbQft1eHVA==", + "dev": true, + "dependencies": { + "ansi": "^0.3.0", + "has-unicode": "^2.0.0", + "lodash.pad": "^4.1.0", + "lodash.padend": "^4.1.0", + "lodash.padstart": "^4.1.0" + } + }, + "node_modules/prebuild/node_modules/mimic-response": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", + "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/prebuild/node_modules/npmlog": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-2.0.4.tgz", + "integrity": "sha512-DaL6RTb8Qh4tMe2ttPT1qWccETy2Vi5/8p+htMpLBeXJTr2CAqnF5WQtSP2eFpvaNbhLZ5uilDb98mRm4Q+lZQ==", + "dev": true, + "dependencies": { + "ansi": "~0.3.1", + "are-we-there-yet": "~1.1.2", + "gauge": "~1.2.5" + } + }, + "node_modules/prebuild/node_modules/pump": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/pump/-/pump-1.0.3.tgz", + "integrity": "sha512-8k0JupWme55+9tCVE+FS5ULT3K6AbgqrGa58lTT49RpyfwwcGedHqaC5LlQNdEAumn/wFsu6aPwkuPMioy8kqw==", + "dev": true, + "dependencies": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "node_modules/prebuild/node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "dev": true, + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/prebuild/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "node_modules/prebuild/node_modules/simple-get": { + "version": "2.8.2", + "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-2.8.2.tgz", + "integrity": "sha512-Ijd/rV5o+mSBBs4F/x9oDPtTx9Zb6X9brmnXvMW4J7IR15ngi9q5xxqWBKU744jTZiaXtxaPL7uHG6vtN8kUkw==", + "dev": true, + "dependencies": { + "decompress-response": "^3.3.0", + "once": "^1.3.1", + "simple-concat": "^1.0.0" + } + }, + "node_modules/prebuild/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/prebuild/node_modules/tar-fs": { + "version": "1.16.3", + "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-1.16.3.tgz", + "integrity": "sha512-NvCeXpYx7OsmOh8zIOP/ebG55zZmxLE0etfWRbWok+q2Qo8x/vOR/IJT1taADXPe+jsiu9axDb3X4B+iIgNlKw==", + "dev": true, + "dependencies": { + "chownr": "^1.0.1", + "mkdirp": "^0.5.1", + "pump": "^1.0.0", + "tar-stream": "^1.1.2" + } + }, + "node_modules/prebuild/node_modules/tar-stream": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-1.6.2.tgz", + "integrity": "sha512-rzS0heiNf8Xn7/mpdSVVSMAWAoy9bfb1WOTYC78Z0UQKeKa/CWS8FOq0lKGNa8DWKAn9gxjCvMLYc5PGXYlK2A==", + "dev": true, + "dependencies": { + "bl": "^1.0.0", + "buffer-alloc": "^1.2.0", + "end-of-stream": "^1.0.0", + "fs-constants": "^1.0.0", + "readable-stream": "^2.3.0", + "to-buffer": "^1.1.1", + "xtend": "^4.0.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, "node_modules/prelude-ls": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", @@ -6599,15 +6014,6 @@ "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/rsvp": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/rsvp/-/rsvp-3.6.2.tgz", - "integrity": "sha512-OfWGQTb9vnwRjwtA2QwpG2ICclHC3pgXZO5xt8H2EfgDquO0qVdSb5T88L4qJVAEugbS56pAuV4XZM58UX8ulw==", - "dev": true, - "engines": { - "node": "0.12.* || 4.* || 6.* || >= 7.*" - } - }, "node_modules/run-parallel": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", @@ -6631,26 +6037,6 @@ "queue-microtask": "^1.2.2" } }, - "node_modules/run-waterfall": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/run-waterfall/-/run-waterfall-1.1.7.tgz", - "integrity": "sha512-iFPgh7SatHXOG1ClcpdwHI63geV3Hc/iL6crGSyBlH2PY7Rm/za+zoKz6FfY/Qlw5K7JwSol8pseO8fN6CMhhQ==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, "node_modules/safe-buffer": { "version": "5.2.1", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", @@ -6739,12 +6125,6 @@ "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==", "dev": true }, - "node_modules/setimmediate": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", - "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==", - "dev": true - }, "node_modules/shallow-clone": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", @@ -6888,12 +6268,6 @@ "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", "dev": true }, - "node_modules/splitargs": { - "version": "0.0.7", - "resolved": "https://registry.npmjs.org/splitargs/-/splitargs-0.0.7.tgz", - "integrity": "sha512-UUFYD2oWbNwULH6WoVtLUOw8ch586B+HUqcsAjjjeoBQAM1bD4wZRXu01koaxyd8UeYpybWqW4h+lO1Okv40Tg==", - "dev": true - }, "node_modules/sprintf-js": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", @@ -7288,6 +6662,12 @@ "integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==", "dev": true }, + "node_modules/to-buffer": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/to-buffer/-/to-buffer-1.1.1.tgz", + "integrity": "sha512-lx9B5iv7msuFYE3dytT+KE5tap+rNYw+K4jVkb9R/asAb+pbBSM17jtunHplhBe6RRJdZx3Pn2Jph24O32mOVg==", + "dev": true + }, "node_modules/to-fast-properties": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", @@ -7322,92 +6702,6 @@ "node": ">=0.8" } }, - "node_modules/traceur": { - "version": "0.0.111", - "resolved": "https://registry.npmjs.org/traceur/-/traceur-0.0.111.tgz", - "integrity": "sha512-Zy0NCrl3+k1VZvDrZGQJHjLM4Hwz7XHSedhVTdsbV3RNWVtgw/GUP44Rl5WqqcctLkzyQ60eTU2jxfLrlrjWZQ==", - "dev": true, - "dependencies": { - "commander": "2.9.x", - "glob": "5.0.x", - "rsvp": "^3.0.13", - "semver": "^4.3.3", - "source-map-support": "~0.2.8" - }, - "bin": { - "traceur": "traceur" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/traceur/node_modules/commander": { - "version": "2.9.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.9.0.tgz", - "integrity": "sha512-bmkUukX8wAOjHdN26xj5c4ctEV22TQ7dQYhSmuckKhToXrkUn0iIaolHdIxYYqD55nhpSPA9zPQ1yP57GdXP2A==", - "dev": true, - "dependencies": { - "graceful-readlink": ">= 1.0.0" - }, - "engines": { - "node": ">= 0.6.x" - } - }, - "node_modules/traceur/node_modules/glob": { - "version": "5.0.15", - "resolved": "https://registry.npmjs.org/glob/-/glob-5.0.15.tgz", - "integrity": "sha512-c9IPMazfRITpmAAKi22dK1VKxGDX9ehhqfABDriL/lzO92xcUKEJPQHrVA/2YHSNFB4iFlykVmWvwo48nr3OxA==", - "dev": true, - "dependencies": { - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "2 || 3", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - } - }, - "node_modules/traceur/node_modules/semver": { - "version": "4.3.6", - "resolved": "https://registry.npmjs.org/semver/-/semver-4.3.6.tgz", - "integrity": "sha512-IrpJ+yoG4EOH8DFWuVg+8H1kW1Oaof0Wxe7cPcXW3x9BjkN/eVo54F15LyqemnDIUYskQWr9qvl/RihmSy6+xQ==", - "dev": true, - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/traceur/node_modules/source-map": { - "version": "0.1.32", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.1.32.tgz", - "integrity": "sha512-htQyLrrRLkQ87Zfrir4/yN+vAUd6DNjVayEjTSHXu29AYQJw57I4/xEL/M6p6E/woPNJwvZt6rVlzc7gFEJccQ==", - "dev": true, - "dependencies": { - "amdefine": ">=0.0.4" - }, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/traceur/node_modules/source-map-support": { - "version": "0.2.10", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.2.10.tgz", - "integrity": "sha512-gGKOSat73z0V8wBKo9AGxZZyekczBireh1hHktbt+kb9acsCB5OfVCF2DCWlztcQ3r5oNN7f2BL0B2xOcoJ/DQ==", - "dev": true, - "dependencies": { - "source-map": "0.1.32" - } - }, - "node_modules/traverse": { - "version": "0.3.9", - "resolved": "https://registry.npmjs.org/traverse/-/traverse-0.3.9.tgz", - "integrity": "sha512-iawgk0hLP3SxGKDfnDJf8wTz4p2qImnyihM5Hh/sGvQ3K37dPi/w8sRhdNIxYA1TwFwc5mDhIJq+O0RsvXBKdQ==", - "dev": true, - "engines": { - "node": "*" - } - }, "node_modules/ts-jest": { "version": "29.1.1", "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-29.1.1.tgz", @@ -7489,12 +6783,6 @@ "integrity": "sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==", "dev": true }, - "node_modules/type": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/type/-/type-1.2.0.tgz", - "integrity": "sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==", - "dev": true - }, "node_modules/type-check": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", @@ -7610,78 +6898,10 @@ "node": ">=0.8.0" } }, - "node_modules/universalify": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", - "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", - "dev": true, - "engines": { - "node": ">= 4.0.0" - } - }, - "node_modules/unzipper": { - "version": "0.8.14", - "resolved": "https://registry.npmjs.org/unzipper/-/unzipper-0.8.14.tgz", - "integrity": "sha512-8rFtE7EP5ssOwGpN2dt1Q4njl0N1hUXJ7sSPz0leU2hRdq6+pra57z4YPBlVqm40vcgv6ooKZEAx48fMTv9x4w==", - "dev": true, - "dependencies": { - "big-integer": "^1.6.17", - "binary": "~0.3.0", - "bluebird": "~3.4.1", - "buffer-indexof-polyfill": "~1.0.0", - "duplexer2": "~0.1.4", - "fstream": "~1.0.10", - "listenercount": "~1.0.1", - "readable-stream": "~2.1.5", - "setimmediate": "~1.0.4" - } - }, - "node_modules/unzipper/node_modules/bluebird": { - "version": "3.4.7", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.4.7.tgz", - "integrity": "sha512-iD3898SR7sWVRHbiQv+sHUtHnMvC1o3nW5rAcqnq3uOn07DSAppZYUkIGslDz6gXC7HfunPe7YVBgoEJASPcHA==", - "dev": true - }, - "node_modules/unzipper/node_modules/duplexer2": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.1.4.tgz", - "integrity": "sha512-asLFVfWWtJ90ZyOUHMqk7/S2w2guQKxUI2itj3d92ADHhxUSbCMGi1f1cBcJ7xM1To+pE/Khbwo1yuNbMEPKeA==", - "dev": true, - "dependencies": { - "readable-stream": "^2.0.2" - } - }, - "node_modules/unzipper/node_modules/process-nextick-args": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz", - "integrity": "sha512-yN0WQmuCX63LP/TMvAg31nvT6m4vDqJEiiv2CAZqWOGNWutc9DfDk1NPYYmKUFmaVM2UwDowH4u5AHWYP/jxKw==", - "dev": true - }, - "node_modules/unzipper/node_modules/readable-stream": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.1.5.tgz", - "integrity": "sha512-NkXT2AER7VKXeXtJNSaWLpWIhmtSE3K2PguaLEeWr4JILghcIKqoLt1A3wHrnpDC5+ekf8gfk1GKWkFXe4odMw==", - "dev": true, - "dependencies": { - "buffer-shims": "^1.0.0", - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "~1.0.0", - "process-nextick-args": "~1.0.6", - "string_decoder": "~0.10.x", - "util-deprecate": "~1.0.1" - } - }, - "node_modules/unzipper/node_modules/string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ==", - "dev": true - }, - "node_modules/update-browserslist-db": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.11.tgz", - "integrity": "sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA==", + "node_modules/update-browserslist-db": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.11.tgz", + "integrity": "sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA==", "dev": true, "funding": [ { @@ -7717,12 +6937,6 @@ "punycode": "^2.1.0" } }, - "node_modules/url-join": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/url-join/-/url-join-0.0.1.tgz", - "integrity": "sha512-H6dnQ/yPAAVzMQRvEvyz01hhfQL5qRWSEt7BX8t9DqnPw9BjMb64fjIRq76Uvf1hkHp+mTZvEVJ5guXOT0Xqaw==", - "dev": true - }, "node_modules/url-template": { "version": "2.0.8", "resolved": "https://registry.npmjs.org/url-template/-/url-template-2.0.8.tgz", @@ -7734,12 +6948,6 @@ "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" }, - "node_modules/util-extend": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/util-extend/-/util-extend-1.0.3.tgz", - "integrity": "sha512-mLs5zAK+ctllYBj+iAQvlDCwoxU/WDOUaJkcFudeiAX6OajC6BKXJUa9a+tbtkC11dz2Ufb7h0lyvIOVn4LADA==", - "dev": true - }, "node_modules/uuid": { "version": "3.4.0", "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", @@ -7971,18 +7179,6 @@ "integrity": "sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ==", "dev": true }, - "node_modules/window-size": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/window-size/-/window-size-0.1.4.tgz", - "integrity": "sha512-2thx4pB0cV3h+Bw7QmMXcEbdmOzv9t0HFplJH/Lz6yu60hXYy5RT8rUu+wlIreVxWsGN20mo+MHeCSfUpQBwPw==", - "dev": true, - "bin": { - "window-size": "cli.js" - }, - "engines": { - "node": ">= 0.10.0" - } - }, "node_modules/wordwrap": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", @@ -8152,12 +7348,12 @@ } }, "@babel/code-frame": { - "version": "7.22.10", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.22.10.tgz", - "integrity": "sha512-/KKIMG4UEL35WmI9OlvMhurwtytjvXoFcGNrOvyG9zIzA8YmPjVtIZUf7b05+TPO7G7/GEmLHDaoCgACHl9hhA==", + "version": "7.22.13", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.22.13.tgz", + "integrity": "sha512-XktuhWlJ5g+3TJXc5upd9Ks1HutSArik6jf2eAjYFyIOf4ej3RN+184cZbzDvbPnuTJIUhPKKJE3cIsYTiAT3w==", "dev": true, "requires": { - "@babel/highlight": "^7.22.10", + "@babel/highlight": "^7.22.13", "chalk": "^2.4.2" }, "dependencies": { @@ -8263,12 +7459,12 @@ } }, "@babel/generator": { - "version": "7.22.10", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.22.10.tgz", - "integrity": "sha512-79KIf7YiWjjdZ81JnLujDRApWtl7BxTqWD88+FFdQEIOG8LJ0etDOM7CXuIgGJa55sGOwZVwuEsaLEm0PJ5/+A==", + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.23.0.tgz", + "integrity": "sha512-lN85QRR+5IbYrMWM6Y4pE/noaQtg4pNiqeNGX60eqOfo6gtEj6uw/JagelB8vVztSd7R6M5n1+PQkDbHbBRU4g==", "dev": true, "requires": { - "@babel/types": "^7.22.10", + "@babel/types": "^7.23.0", "@jridgewell/gen-mapping": "^0.3.2", "@jridgewell/trace-mapping": "^0.3.17", "jsesc": "^2.5.1" @@ -8296,19 +7492,19 @@ } }, "@babel/helper-environment-visitor": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.5.tgz", - "integrity": "sha512-XGmhECfVA/5sAt+H+xpSg0mfrHq6FzNr9Oxh7PSEBBRUb/mL7Kz3NICXb194rCqAEdxkhPT1a88teizAFyvk8Q==", + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz", + "integrity": "sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==", "dev": true }, "@babel/helper-function-name": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.22.5.tgz", - "integrity": "sha512-wtHSq6jMRE3uF2otvfuD3DIvVhOsSNshQl0Qrd7qC9oQJzHvOL4qQXlQn2916+CXGywIjpGuIkoyZRRxHPiNQQ==", + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz", + "integrity": "sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==", "dev": true, "requires": { - "@babel/template": "^7.22.5", - "@babel/types": "^7.22.5" + "@babel/template": "^7.22.15", + "@babel/types": "^7.23.0" } }, "@babel/helper-hoist-variables": { @@ -8373,9 +7569,9 @@ "dev": true }, "@babel/helper-validator-identifier": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.5.tgz", - "integrity": "sha512-aJXu+6lErq8ltp+JhkJUfk1MTGyuA4v7f3pA+BJ5HLfNC6nAQ0Cpi9uOquUj8Hehg0aUiHzWQbOVJGao6ztBAQ==", + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz", + "integrity": "sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==", "dev": true }, "@babel/helper-validator-option": { @@ -8396,12 +7592,12 @@ } }, "@babel/highlight": { - "version": "7.22.10", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.22.10.tgz", - "integrity": "sha512-78aUtVcT7MUscr0K5mIEnkwxPE0MaxkR5RxRwuHaQ+JuU5AmTPhY+do2mdzVTnIJJpyBglql2pehuBIWHug+WQ==", + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.22.20.tgz", + "integrity": "sha512-dkdMCN3py0+ksCgYmGG8jKeGA/8Tk+gJwSYYlFGxG5lmhfKNoAy004YpLxpS1W2J8m/EK2Ew+yOs9pVRwO89mg==", "dev": true, "requires": { - "@babel/helper-validator-identifier": "^7.22.5", + "@babel/helper-validator-identifier": "^7.22.20", "chalk": "^2.4.2", "js-tokens": "^4.0.0" }, @@ -8465,9 +7661,9 @@ } }, "@babel/parser": { - "version": "7.22.10", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.22.10.tgz", - "integrity": "sha512-lNbdGsQb9ekfsnjFGhEiF4hfFqGgfOP3H3d27re3n+CGhNuTSUEQdfWk556sTLNTloczcdM5TYF2LhzmDQKyvQ==", + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.23.0.tgz", + "integrity": "sha512-vvPKKdMemU85V9WE/l5wZEmImpCtLqbnTvqDS2U1fJ96KrxoW7KrXhNsNCblQlg8Ck4b85yxdTyelsMUgFUXiw==", "dev": true }, "@babel/plugin-syntax-async-generators": { @@ -8597,30 +7793,30 @@ } }, "@babel/template": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.5.tgz", - "integrity": "sha512-X7yV7eiwAxdj9k94NEylvbVHLiVG1nvzCV2EAowhxLTwODV1jl9UzZ48leOC0sH7OnuHrIkllaBgneUykIcZaw==", + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.15.tgz", + "integrity": "sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w==", "dev": true, "requires": { - "@babel/code-frame": "^7.22.5", - "@babel/parser": "^7.22.5", - "@babel/types": "^7.22.5" + "@babel/code-frame": "^7.22.13", + "@babel/parser": "^7.22.15", + "@babel/types": "^7.22.15" } }, "@babel/traverse": { - "version": "7.22.10", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.22.10.tgz", - "integrity": "sha512-Q/urqV4pRByiNNpb/f5OSv28ZlGJiFiiTh+GAHktbIrkPhPbl90+uW6SmpoLyZqutrg9AEaEf3Q/ZBRHBXgxig==", + "version": "7.23.2", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.23.2.tgz", + "integrity": "sha512-azpe59SQ48qG6nu2CzcMLbxUudtN+dOM9kDbUqGq3HXUJRlo7i8fvPoxQUzYgLZ4cMVmuZgm8vvBpNeRhd6XSw==", "dev": true, "requires": { - "@babel/code-frame": "^7.22.10", - "@babel/generator": "^7.22.10", - "@babel/helper-environment-visitor": "^7.22.5", - "@babel/helper-function-name": "^7.22.5", + "@babel/code-frame": "^7.22.13", + "@babel/generator": "^7.23.0", + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-function-name": "^7.23.0", "@babel/helper-hoist-variables": "^7.22.5", "@babel/helper-split-export-declaration": "^7.22.6", - "@babel/parser": "^7.22.10", - "@babel/types": "^7.22.10", + "@babel/parser": "^7.23.0", + "@babel/types": "^7.23.0", "debug": "^4.1.0", "globals": "^11.1.0" }, @@ -8634,13 +7830,13 @@ } }, "@babel/types": { - "version": "7.22.10", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.22.10.tgz", - "integrity": "sha512-obaoigiLrlDZ7TUQln/8m4mSqIW2QFeOrCQc9r+xsaHGNoplVNYlRVpsfE8Vj35GEm2ZH4ZhrNYogs/3fj85kg==", + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.23.0.tgz", + "integrity": "sha512-0oIyUfKoI3mSqMvsxBdclDwxXKXAUA8v/apZbc+iSyARYou1o8ZGDxbUYyLFoW2arqS2jDGqJuZvv1d/io1axg==", "dev": true, "requires": { "@babel/helper-string-parser": "^7.22.5", - "@babel/helper-validator-identifier": "^7.22.5", + "@babel/helper-validator-identifier": "^7.22.20", "to-fast-properties": "^2.0.0" } }, @@ -9596,12 +8792,6 @@ "dev": true, "requires": {} }, - "amdefine": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz", - "integrity": "sha512-S2Hw0TtNkMJhIabBwIojKL9YHO5T0n5eNqWJ7Lrlel/zDbftQpxpapi8tZs3X1HWa+u+QeydGmzzNU0m09+Rcg==", - "dev": true - }, "ansi": { "version": "0.3.1", "resolved": "https://registry.npmjs.org/ansi/-/ansi-0.3.1.tgz", @@ -9710,33 +8900,6 @@ "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", "dev": true }, - "array-index": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/array-index/-/array-index-1.0.0.tgz", - "integrity": "sha512-jesyNbBkLQgGZMSwA1FanaFjalb1mZUGxGeUEkSDidzgrbjBGhvizJkaItdhkt8eIHFOJC7nDsrXk+BaehTdRw==", - "dev": true, - "requires": { - "debug": "^2.2.0", - "es6-symbol": "^3.0.2" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true - } - } - }, "array-union": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", @@ -9758,6 +8921,12 @@ "integrity": "sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==", "dev": true }, + "async": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", + "integrity": "sha512-nSVgobk4rv61R9PUSDtYt7mPVB2olxNR5RWJcAsH676/ef11bUZwvu7+RGYrYauVdDPcO519v68wRhXQtxsV9w==", + "dev": true + }, "asynckit": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", @@ -9866,22 +9035,6 @@ "tweetnacl": "^0.14.3" } }, - "big-integer": { - "version": "1.6.51", - "resolved": "https://registry.npmjs.org/big-integer/-/big-integer-1.6.51.tgz", - "integrity": "sha512-GPEid2Y9QU1Exl1rpO9B2IPJGHPSupF5GnVIP0blYvNOMer2bTvSWs1jGOUg04hTmu67nmLsQ9TBo1puaotBHg==", - "dev": true - }, - "binary": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/binary/-/binary-0.3.0.tgz", - "integrity": "sha512-D4H1y5KYwpJgK8wk1Cue5LLPgmwHKYSChkbspQg5JtVuR5ulGckxfR62H3AE9UDkdMC8yyXlqYihuz3Aqg2XZg==", - "dev": true, - "requires": { - "buffers": "~0.1.1", - "chainsaw": "~0.1.0" - } - }, "bl": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/bl/-/bl-3.0.1.tgz", @@ -9891,12 +9044,6 @@ "readable-stream": "^3.0.1" } }, - "bluebird": { - "version": "3.7.2", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", - "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==", - "dev": true - }, "brace-expansion": { "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", @@ -9955,28 +9102,32 @@ "ieee754": "^1.1.13" } }, - "buffer-from": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-0.1.2.tgz", - "integrity": "sha512-RiWIenusJsmI2KcvqQABB83tLxCByE3upSP8QU3rJDMVFGPWLvPQJt/O1Su9moRWeH7d+Q2HYb68f6+v+tw2vg==", - "dev": true + "buffer-alloc": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/buffer-alloc/-/buffer-alloc-1.2.0.tgz", + "integrity": "sha512-CFsHQgjtW1UChdXgbyJGtnm+O/uLQeZdtbDo8mfUgYXCHSM1wgrVxXm6bSyrUuErEb+4sYVGCzASBRot7zyrow==", + "dev": true, + "requires": { + "buffer-alloc-unsafe": "^1.1.0", + "buffer-fill": "^1.0.0" + } }, - "buffer-indexof-polyfill": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/buffer-indexof-polyfill/-/buffer-indexof-polyfill-1.0.2.tgz", - "integrity": "sha512-I7wzHwA3t1/lwXQh+A5PbNvJxgfo5r3xulgpYDB5zckTu/Z9oUK9biouBKQUjEqzaz3HnAT6TYoovmE+GqSf7A==", + "buffer-alloc-unsafe": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz", + "integrity": "sha512-TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg==", "dev": true }, - "buffer-shims": { + "buffer-fill": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/buffer-shims/-/buffer-shims-1.0.0.tgz", - "integrity": "sha512-Zy8ZXMyxIT6RMTeY7OP/bDndfj6bwCan7SS98CEndS6deHwWPpseeHlwarNcBim+etXnF9HBc1non5JgDaJU1g==", + "resolved": "https://registry.npmjs.org/buffer-fill/-/buffer-fill-1.0.0.tgz", + "integrity": "sha512-T7zexNBwiiaCOGDg9xNX9PBmjrubblRkENuptryuI64URkXDFum9il/JGL8Lm8wYfAXpredVXXZz7eMHilimiQ==", "dev": true }, - "buffers": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/buffers/-/buffers-0.1.1.tgz", - "integrity": "sha512-9q/rDEGSb/Qsvv2qvzIzdluL5k7AaJOTrw23z9reQthrbF7is4CtlT0DXyO1oei2DCp4uojjzQ7igaSHp1kAEQ==", + "buffer-from": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-0.1.2.tgz", + "integrity": "sha512-RiWIenusJsmI2KcvqQABB83tLxCByE3upSP8QU3rJDMVFGPWLvPQJt/O1Su9moRWeH7d+Q2HYb68f6+v+tw2vg==", "dev": true }, "callsites": { @@ -10008,15 +9159,6 @@ "integrity": "sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==", "dev": true }, - "chainsaw": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/chainsaw/-/chainsaw-0.1.0.tgz", - "integrity": "sha512-75kWfWt6MEKNC8xYXIdRpDehRYY/tNSgwKaJq+dbbDcxORuVrrQ+SEHoWsniVn9XPYfP4gmdWIeDk/4YNp1rNQ==", - "dev": true, - "requires": { - "traverse": ">=0.3.0 <0.4" - } - }, "chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", @@ -10102,175 +9244,6 @@ "shallow-clone": "^3.0.0" } }, - "cmake-js": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/cmake-js/-/cmake-js-5.2.0.tgz", - "integrity": "sha512-/HLhzoBEOLKGdE1FLwH5ggzRt67AWTb4IErg4rm+bTC+R0DKUobojDyp17dSswDVPosdoPmHXjKxbJiyBZfQeg==", - "dev": true, - "requires": { - "bluebird": "^3", - "debug": "^4", - "fs-extra": "^5.0.0", - "is-iojs": "^1.0.1", - "lodash": "^4", - "memory-stream": "0", - "npmlog": "^1.2.0", - "rc": "^1.2.7", - "request": "^2.54.0", - "semver": "^5.0.3", - "splitargs": "0", - "tar": "^4.4.19", - "traceur": "0.0.x", - "unzipper": "^0.8.13", - "url-join": "0", - "which": "^1.0.9", - "yargs": "^3.6.0" - }, - "dependencies": { - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==", - "dev": true - }, - "are-we-there-yet": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.0.6.tgz", - "integrity": "sha512-Zfw6bteqM9gQXZ1BIWOgM8xEwMrUGoyL8nW13+O+OOgNX3YhuDN1GDgg1NzdTlmm3j+9sHy7uBZ12r+z9lXnZQ==", - "dev": true, - "requires": { - "delegates": "^1.0.0", - "readable-stream": "^2.0.0 || ^1.1.13" - } - }, - "camelcase": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz", - "integrity": "sha512-DLIsRzJVBQu72meAKPkWQOLcujdXT32hwdfnkI1frSiSRMK1MofjKHf+MEx0SB6fjEFXL8fBDv1dKymBlOp4Qw==", - "dev": true - }, - "cliui": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz", - "integrity": "sha512-0yayqDxWQbqk3ojkYqUKqaAQ6AfNKeKWRNA8kR0WXzAsdHpP4BIaOmMAG87JGuO6qcobyW4GjxHd9PmhEd+T9w==", - "dev": true, - "requires": { - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1", - "wrap-ansi": "^2.0.0" - } - }, - "gauge": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/gauge/-/gauge-1.2.7.tgz", - "integrity": "sha512-fVbU2wRE91yDvKUnrIaQlHKAWKY5e08PmztCrwuH5YVQ+Z/p3d0ny2T48o6uvAAXHIUnfaQdHkmxYbQft1eHVA==", - "dev": true, - "requires": { - "ansi": "^0.3.0", - "has-unicode": "^2.0.0", - "lodash.pad": "^4.1.0", - "lodash.padend": "^4.1.0", - "lodash.padstart": "^4.1.0" - } - }, - "npmlog": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-1.2.1.tgz", - "integrity": "sha512-1J5KqSRvESP6XbjPaXt2H6qDzgizLTM7x0y1cXIjP2PpvdCqyNC7TO3cPRKsuYlElbi/DwkzRRdG2zpmE0IktQ==", - "dev": true, - "requires": { - "ansi": "~0.3.0", - "are-we-there-yet": "~1.0.0", - "gauge": "~1.2.0" - } - }, - "readable-stream": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, - "semver": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", - "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", - "dev": true - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.0" - } - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==", - "dev": true, - "requires": { - "ansi-regex": "^2.0.0" - } - }, - "which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "dev": true, - "requires": { - "isexe": "^2.0.0" - } - }, - "wrap-ansi": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", - "integrity": "sha512-vAaEaDM946gbNpH5pLVNR+vX2ht6n0Bt3GXwVB1AuAqZosOvHNF3P7wDnh8KLkSqgUh0uh77le7Owgoz+Z9XBw==", - "dev": true, - "requires": { - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1" - } - }, - "y18n": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.2.tgz", - "integrity": "sha512-uGZHXkHnhF0XeeAPgnKfPv1bgKAYyVvmNL1xlKsPYZPaIHxGti2hHqvOCQv71XMsLxu1QjergkqogUnms5D3YQ==", - "dev": true - }, - "yargs": { - "version": "3.32.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-3.32.0.tgz", - "integrity": "sha512-ONJZiimStfZzhKamYvR/xvmgW3uEkAUFSP91y2caTEPhzF6uP2JfPiVZcq66b/YR0C3uitxSV7+T1x8p5bkmMg==", - "dev": true, - "requires": { - "camelcase": "^2.0.1", - "cliui": "^3.0.3", - "decamelize": "^1.1.1", - "os-locale": "^1.4.0", - "string-width": "^1.0.1", - "window-size": "^0.1.4", - "y18n": "^3.2.0" - } - } - } - }, "co": { "version": "4.6.0", "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", @@ -10360,16 +9333,6 @@ "which": "^2.0.1" } }, - "d": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/d/-/d-1.0.1.tgz", - "integrity": "sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==", - "dev": true, - "requires": { - "es5-ext": "^0.10.50", - "type": "^1.0.1" - } - }, "dashdash": { "version": "1.14.1", "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", @@ -10388,12 +9351,6 @@ "ms": "2.1.2" } }, - "decamelize": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==", - "dev": true - }, "decompress-response": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", @@ -10514,12 +9471,6 @@ } } }, - "each-series-async": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/each-series-async/-/each-series-async-1.0.1.tgz", - "integrity": "sha512-G4zip/Ewpwr6JQxW7+2RNgkPd09h/UNec5UlvA/xKwl4qf5blyBNK6a/zjQc3MojgsxaOb93B9v3T92QU6IMVg==", - "dev": true - }, "ecc-jsbn": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", @@ -10576,12 +9527,6 @@ "tapable": "^2.2.0" } }, - "env-paths": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", - "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", - "dev": true - }, "envinfo": { "version": "7.10.0", "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.10.0.tgz", @@ -10603,38 +9548,6 @@ "integrity": "sha512-JUFAyicQV9mXc3YRxPnDlrfBKpqt6hUYzz9/boprUJHs4e4KVr3XwOF70doO6gwXUor6EWZJAyWAfKki84t20Q==", "dev": true }, - "es5-ext": { - "version": "0.10.62", - "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.62.tgz", - "integrity": "sha512-BHLqn0klhEpnOKSrzn/Xsz2UIW8j+cGmo9JLzr8BiUapV8hPL9+FliFqjwr9ngW7jWdnxv6eO+/LqyhJVqgrjA==", - "dev": true, - "requires": { - "es6-iterator": "^2.0.3", - "es6-symbol": "^3.1.3", - "next-tick": "^1.1.0" - } - }, - "es6-iterator": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", - "integrity": "sha512-zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g==", - "dev": true, - "requires": { - "d": "1", - "es5-ext": "^0.10.35", - "es6-symbol": "^3.1.1" - } - }, - "es6-symbol": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.3.tgz", - "integrity": "sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA==", - "dev": true, - "requires": { - "d": "^1.0.1", - "ext": "^1.1.2" - } - }, "escalade": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", @@ -10819,15 +9732,6 @@ "strip-final-newline": "^2.0.0" } }, - "execspawn": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/execspawn/-/execspawn-1.0.1.tgz", - "integrity": "sha512-s2k06Jy9i8CUkYe0+DxRlvtkZoOkwwfhB+Xxo5HGUtrISVW2m98jO2tr67DGRFxZwkjQqloA3v/tNtjhBRBieg==", - "dev": true, - "requires": { - "util-extend": "^1.0.1" - } - }, "exit": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", @@ -10853,23 +9757,6 @@ "jest-util": "^29.6.2" } }, - "ext": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/ext/-/ext-1.7.0.tgz", - "integrity": "sha512-6hxeJYaL110a9b5TEJSj0gojyHQAmA2ch5Os+ySCiA1QGdS697XWY1pzsrSjqA9LDEEgdB/KypIlR59RcLuHYw==", - "dev": true, - "requires": { - "type": "^2.7.2" - }, - "dependencies": { - "type": { - "version": "2.7.2", - "resolved": "https://registry.npmjs.org/type/-/type-2.7.2.tgz", - "integrity": "sha512-dzlvlNlt6AXU7EBSfpAscydQ7gXB+pPGsPnfJnZpiNJBDj7IaJzQlBZYGdEi4R9HmPdBv2XmWJ6YUtoTa7lmCw==", - "dev": true - } - } - }, "extend": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", @@ -11014,17 +9901,6 @@ "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==" }, - "fs-extra": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-5.0.0.tgz", - "integrity": "sha512-66Pm4RYbjzdyeuqudYqhFiNBbCIuI9kgRqLPSHIlXHidW8NIQtVdkM1yeZ4lXwuhbTETv3EUGMNHAAw6hiundQ==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - } - }, "fs-minipass": { "version": "1.2.7", "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-1.2.7.tgz", @@ -11143,17 +10019,17 @@ } }, "ghreleases": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/ghreleases/-/ghreleases-3.0.2.tgz", - "integrity": "sha512-QiR9mIYvRG7hd8JuQYoxeBNOelVuTp2DpdiByRywbCDBSJufK9Vq7VuhD8B+5uviMxZx2AEkCzye61Us9gYgnw==", + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/ghreleases/-/ghreleases-1.0.7.tgz", + "integrity": "sha512-1lFGyLLF38Q6cFCDyebN5vzQ2P9DEaAgxPIDLmQwQDVDmUe2Wgv+6dhAIoHeA+My4HLpaJ+dKF73xtuykN2cbQ==", "dev": true, "requires": { "after": "~0.8.1", "ghrepos": "~2.1.0", "ghutils": "~3.2.0", - "lodash.uniq": "^4.5.0", "simple-mime": "~0.1.0", - "url-template": "~2.0.6" + "url-template": "~2.0.6", + "xtend": "~4.0.0" } }, "ghrepos": { @@ -11238,12 +10114,6 @@ "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", "dev": true }, - "graceful-readlink": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/graceful-readlink/-/graceful-readlink-1.0.1.tgz", - "integrity": "sha512-8tLu60LgxF6XpdbK8OW3FA+IfTNBn1ZHGHKF4KQbEeSkajYw5PlYJcKluntgegDPTg8UkHjpet1T82vk6TQ68w==", - "dev": true - }, "graphemer": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", @@ -11397,12 +10267,6 @@ "integrity": "sha512-6xwYfHbajpoF0xLW+iwLkhwgvLoZDfjYfoFNu8ftMoXINzwuymNLd9u/KmwtdT2GbR+/Cz66otEGEVVUHX9QLQ==", "dev": true }, - "invert-kv": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz", - "integrity": "sha512-xgs2NH9AE66ucSq4cNG1nhSFghr5l6tdL15Pk+jl46bmmBapgoaY/AacXyaDznAqmGL99TiLSQgO/XazFSKYeQ==", - "dev": true - }, "is-arrayish": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", @@ -11448,12 +10312,6 @@ "is-extglob": "^2.1.1" } }, - "is-iojs": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-iojs/-/is-iojs-1.1.0.tgz", - "integrity": "sha512-tLn1j3wYSL6DkvEI+V/j0pKohpa5jk+ER74v6S4SgCXnjS0WA+DoZbwZBrrhgwksMvtuwndyGeG5F8YMsoBzSA==", - "dev": true - }, "is-number": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", @@ -12065,15 +10923,6 @@ "integrity": "sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w==", "dev": true }, - "jsonfile": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", - "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.6" - } - }, "jsonist": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/jsonist/-/jsonist-2.1.2.tgz", @@ -12110,15 +10959,6 @@ "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", "dev": true }, - "lcid": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz", - "integrity": "sha512-YiGkH6EnGrDGqLMITnGjXtGmNtjoXw9SVUzcaos8RBi7Ps0VBylkq+vOcY9QE5poLasPCR849ucFUkl0UzUyOw==", - "dev": true, - "requires": { - "invert-kv": "^1.0.0" - } - }, "leven": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", @@ -12141,12 +10981,6 @@ "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", "dev": true }, - "listenercount": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/listenercount/-/listenercount-1.0.1.tgz", - "integrity": "sha512-3mk/Zag0+IJxeDrxSgaDPy4zZ3w05PRZeJNnlWhzFz5OkX49J4krc+A8X2d2M69vGMBEX0uyl8M+W+8gH+kBqQ==", - "dev": true - }, "loader-runner": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz", @@ -12162,12 +10996,6 @@ "p-locate": "^5.0.0" } }, - "lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "dev": true - }, "lodash.memoize": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", @@ -12198,12 +11026,6 @@ "integrity": "sha512-sW73O6S8+Tg66eY56DBk85aQzzUJDtpoXFBgELMd5P/SotAguo+1kYO6RuYgXxA4HJH3LFTFPASX6ET6bjfriw==", "dev": true }, - "lodash.uniq": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", - "integrity": "sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==", - "dev": true - }, "lru-cache": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", @@ -12249,41 +11071,6 @@ "integrity": "sha512-PRsaiG84bK+AMvxziE/lCFss8juXjNaWzVbN5tXAm4XjeaS9NAHhop+PjQxz2A9h8Q4M/xGmzP8vqNwy6JeK0A==", "dev": true }, - "memory-stream": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/memory-stream/-/memory-stream-0.0.3.tgz", - "integrity": "sha512-q0D3m846qY6ZkIt+19ZemU5vH56lpOZZwoJc3AICARKh/menBuayQUjAGPrqtHQQMUYERSdOrej92J9kz7LgYA==", - "dev": true, - "requires": { - "readable-stream": "~1.0.26-2" - }, - "dependencies": { - "isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==", - "dev": true - }, - "readable-stream": { - "version": "1.0.34", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", - "integrity": "sha512-ok1qVCJuRkNmvebYikljxJA/UEsKwLl2nI1OmaqAu4/UE+h0wKCHok4XkL/gvi39OacXvw59RJUOFUkDib2rHg==", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "0.0.1", - "string_decoder": "~0.10.x" - } - }, - "string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ==", - "dev": true - } - } - }, "merge-stream": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", @@ -12408,12 +11195,6 @@ "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", "dev": true }, - "next-tick": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.1.0.tgz", - "integrity": "sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==", - "dev": true - }, "node-abi": { "version": "3.46.0", "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-3.46.0.tgz", @@ -12423,111 +11204,25 @@ } }, "node-gyp": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-6.1.0.tgz", - "integrity": "sha512-h4A2zDlOujeeaaTx06r4Vy+8MZ1679lU+wbCKDS4ZtvY2A37DESo37oejIw0mtmR3+rvNwts5B6Kpt1KrNYdNw==", - "dev": true, - "requires": { - "env-paths": "^2.2.0", - "glob": "^7.1.4", - "graceful-fs": "^4.2.2", - "mkdirp": "^0.5.1", - "nopt": "^4.0.1", - "npmlog": "^4.1.2", - "request": "^2.88.0", - "rimraf": "^2.6.3", - "semver": "^5.7.1", - "tar": "^4.4.19", - "which": "^1.3.1" - }, - "dependencies": { - "rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", - "dev": true, - "requires": { - "glob": "^7.1.3" - } - }, - "semver": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", - "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", - "dev": true - }, - "which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "dev": true, - "requires": { - "isexe": "^2.0.0" - } - } - } - }, - "node-int64": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", - "integrity": "sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==", - "dev": true - }, - "node-ninja": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/node-ninja/-/node-ninja-1.0.2.tgz", - "integrity": "sha512-wMtWsG2QZI1Z5V7GciX9OI2DVT0PuDRIDQfe3L3rJsQ1qN1Gm3QQhoNtb4PMRi7gq4ByvEIYtPwHC7YbEf5yxw==", + "version": "3.8.0", + "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-3.8.0.tgz", + "integrity": "sha512-3g8lYefrRRzvGeSowdJKAKyks8oUpLEd/DyPV4eMhVlhJ0aNaZqIrNUIPuEWWTAoPqyFkfGrM67MC69baqn6vA==", "dev": true, "requires": { "fstream": "^1.0.0", - "glob": "3 || 4 || 5 || 6 || 7", + "glob": "^7.0.3", "graceful-fs": "^4.1.2", - "minimatch": "3", "mkdirp": "^0.5.0", "nopt": "2 || 3", - "npmlog": "0 || 1 || 2", + "npmlog": "0 || 1 || 2 || 3 || 4", "osenv": "0", - "path-array": "^1.0.0", - "request": "2", + "request": "^2.87.0", "rimraf": "2", - "semver": "2.x || 3.x || 4 || 5", + "semver": "~5.3.0", "tar": "^4.4.19", "which": "1" }, "dependencies": { - "gauge": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/gauge/-/gauge-1.2.7.tgz", - "integrity": "sha512-fVbU2wRE91yDvKUnrIaQlHKAWKY5e08PmztCrwuH5YVQ+Z/p3d0ny2T48o6uvAAXHIUnfaQdHkmxYbQft1eHVA==", - "dev": true, - "requires": { - "ansi": "^0.3.0", - "has-unicode": "^2.0.0", - "lodash.pad": "^4.1.0", - "lodash.padend": "^4.1.0", - "lodash.padstart": "^4.1.0" - } - }, - "nopt": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz", - "integrity": "sha512-4GUt3kSEYmk4ITxzB/b9vaIDfUVWN/Ml1Fwl11IlnIG2iaJ9O6WXZ9SrYM9NLI8OCBieN2Y8SWC2oJV0RQ7qYg==", - "dev": true, - "requires": { - "abbrev": "1" - } - }, - "npmlog": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-2.0.4.tgz", - "integrity": "sha512-DaL6RTb8Qh4tMe2ttPT1qWccETy2Vi5/8p+htMpLBeXJTr2CAqnF5WQtSP2eFpvaNbhLZ5uilDb98mRm4Q+lZQ==", - "dev": true, - "requires": { - "ansi": "~0.3.1", - "are-we-there-yet": "~1.1.2", - "gauge": "~1.2.5" - } - }, "rimraf": { "version": "2.7.1", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", @@ -12538,9 +11233,9 @@ } }, "semver": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", - "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.3.0.tgz", + "integrity": "sha512-mfmm3/H9+67MCVix1h+IXTpDwL6710LyHuk7+cWC9T1mE0qz4iHhh6r4hU2wrIT9iTsAAC2XQRvfblL028cpLw==", "dev": true }, "which": { @@ -12554,6 +11249,12 @@ } } }, + "node-int64": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", + "integrity": "sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==", + "dev": true + }, "node-releases": { "version": "2.0.13", "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.13.tgz", @@ -12567,13 +11268,12 @@ "dev": true }, "nopt": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-4.0.3.tgz", - "integrity": "sha512-CvaGwVMztSMJLOeXPrez7fyfObdZqNUK1cPAEzLHrTybIua9pMdmmPR5YwtfNftIOMv3DPUhFaxsZMNTQO20Kg==", + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz", + "integrity": "sha512-4GUt3kSEYmk4ITxzB/b9vaIDfUVWN/Ml1Fwl11IlnIG2iaJ9O6WXZ9SrYM9NLI8OCBieN2Y8SWC2oJV0RQ7qYg==", "dev": true, "requires": { - "abbrev": "1", - "osenv": "^0.1.4" + "abbrev": "1" } }, "normalize-path": { @@ -12582,26 +11282,6 @@ "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", "dev": true }, - "npm-path": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/npm-path/-/npm-path-2.0.4.tgz", - "integrity": "sha512-IFsj0R9C7ZdR5cP+ET342q77uSRdtWOlWpih5eC+lu29tIDbNEgDbzgVJ5UFvYHWhxDZ5TFkJafFioO0pPQjCw==", - "dev": true, - "requires": { - "which": "^1.2.10" - }, - "dependencies": { - "which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "dev": true, - "requires": { - "isexe": "^2.0.0" - } - } - } - }, "npm-run-path": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", @@ -12611,28 +11291,6 @@ "path-key": "^3.0.0" } }, - "npm-which": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/npm-which/-/npm-which-3.0.1.tgz", - "integrity": "sha512-CM8vMpeFQ7MAPin0U3wzDhSGV0hMHNwHU0wjo402IVizPDrs45jSfSuoC+wThevY88LQti8VvaAnqYAeVy3I1A==", - "dev": true, - "requires": { - "commander": "^2.9.0", - "npm-path": "^2.0.2", - "which": "^1.2.10" - }, - "dependencies": { - "which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "dev": true, - "requires": { - "isexe": "^2.0.0" - } - } - } - }, "npmlog": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz", @@ -12651,62 +11309,6 @@ "integrity": "sha512-4jbtZXNAsfZbAHiiqjLPBiCl16dES1zI4Hpzzxw61Tk+loF+sBDBKx1ICKKKwIqQ7M0mFn1TmkN7euSncWgHiQ==", "dev": true }, - "nw-gyp": { - "version": "3.6.6", - "resolved": "https://registry.npmjs.org/nw-gyp/-/nw-gyp-3.6.6.tgz", - "integrity": "sha512-FeMnpFQWtEEMJ1BrSfK3T62CjuxaNl0mNHqdrxFcIF5XQdC3gaZYW4n+77lQLk8PE3Upfknkl9VRo6gDKJIHuA==", - "dev": true, - "requires": { - "fstream": "^1.0.0", - "glob": "^7.0.3", - "graceful-fs": "^4.1.2", - "minimatch": "^3.0.2", - "mkdirp": "^0.5.0", - "nopt": "2 || 3", - "npmlog": "0 || 1 || 2 || 3 || 4", - "osenv": "0", - "request": "2", - "rimraf": "2", - "semver": "~5.3.0", - "tar": "^4.4.19", - "which": "1" - }, - "dependencies": { - "nopt": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz", - "integrity": "sha512-4GUt3kSEYmk4ITxzB/b9vaIDfUVWN/Ml1Fwl11IlnIG2iaJ9O6WXZ9SrYM9NLI8OCBieN2Y8SWC2oJV0RQ7qYg==", - "dev": true, - "requires": { - "abbrev": "1" - } - }, - "rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", - "dev": true, - "requires": { - "glob": "^7.1.3" - } - }, - "semver": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.3.0.tgz", - "integrity": "sha512-mfmm3/H9+67MCVix1h+IXTpDwL6710LyHuk7+cWC9T1mE0qz4iHhh6r4hU2wrIT9iTsAAC2XQRvfblL028cpLw==", - "dev": true - }, - "which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "dev": true, - "requires": { - "isexe": "^2.0.0" - } - } - } - }, "oauth-sign": { "version": "0.9.0", "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", @@ -12756,15 +11358,6 @@ "integrity": "sha512-B5JU3cabzk8c67mRRd3ECmROafjYMXbuzlwtqdM8IbS8ktlTix8aFGb2bAGKrSRIlnfKwovGUUr72JUPyOb6kQ==", "dev": true }, - "os-locale": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz", - "integrity": "sha512-PRT7ZORmwu2MEFt4/fv3Q+mEfN4zetKxufQrkShY2oGvUms9r8otu5HfdyIFHkYXjO7laNsoVGmM2MANfuTA8g==", - "dev": true, - "requires": { - "lcid": "^1.0.0" - } - }, "os-tmpdir": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", @@ -12826,15 +11419,6 @@ "lines-and-columns": "^1.1.6" } }, - "path-array": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-array/-/path-array-1.0.1.tgz", - "integrity": "sha512-teWG2rJTJJZi2kINKOsHcdIuHP7jy3D7pAsVgdhxMq8kaL2RnS5sg7YTlrClMVCIItcVbPTPI6eMBEoNxYahLA==", - "dev": true, - "requires": { - "array-index": "^1.0.0" - } - }, "path-exists": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", @@ -12938,31 +11522,162 @@ } }, "prebuild": { - "version": "11.0.4", - "resolved": "https://registry.npmjs.org/prebuild/-/prebuild-11.0.4.tgz", - "integrity": "sha512-n23Rzql2m8ldFpwcFyouGUrg9VByEF2IroEZlNvPLiQwTJWucTNxIaZEoyVe2AxPRzQb6Eph2ytObxVWm4FA7Q==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/prebuild/-/prebuild-3.0.3.tgz", + "integrity": "sha512-QGZMWEfs2zjsQ1Y9Lv4dwZ4EoE93E5UDxHKGc1iSBW8TvT4nM6Dc2DbhInDNlDJ/oGtFpoLwkQKivaoBXs+40g==", "dev": true, "requires": { - "cmake-js": "~5.2.0", - "detect-libc": "^2.0.0", - "each-series-async": "^1.0.1", - "execspawn": "^1.0.1", - "ghreleases": "^3.0.2", + "async": "^1.4.0", + "expand-template": "^1.0.0", + "ghreleases": "^1.0.2", "github-from-package": "0.0.0", - "glob": "^7.1.6", "minimist": "^1.1.2", "mkdirp": "^0.5.1", - "napi-build-utils": "^1.0.1", - "node-abi": "^3.0.0", - "node-gyp": "^6.0.1", - "node-ninja": "^1.0.1", + "node-gyp": "^3.0.3", "noop-logger": "^0.1.0", - "npm-which": "^3.0.1", - "npmlog": "^4.0.1", - "nw-gyp": "^3.6.3", + "npmlog": "^2.0.0", + "os-homedir": "^1.0.1", + "pump": "^1.0.0", "rc": "^1.0.3", - "run-waterfall": "^1.1.6", - "tar-stream": "^2.1.0" + "simple-get": "^2.8.2", + "tar-fs": "^1.7.0", + "tar-stream": "^1.2.1", + "xtend": "^4.0.1" + }, + "dependencies": { + "bl": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/bl/-/bl-1.2.3.tgz", + "integrity": "sha512-pvcNpa0UU69UT341rO6AYy4FVAIkUHuZXRIWbq+zHnsVcRzDDjIAhGuuYoi0d//cwIwtt4pkpKycWEfjdV+vww==", + "dev": true, + "requires": { + "readable-stream": "^2.3.5", + "safe-buffer": "^5.1.1" + } + }, + "decompress-response": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz", + "integrity": "sha512-BzRPQuY1ip+qDonAOz42gRm/pg9F768C+npV/4JOsxRC2sq+Rlk+Q4ZCAsOhnIaMrgarILY+RMUIvMmmX1qAEA==", + "dev": true, + "requires": { + "mimic-response": "^1.0.0" + } + }, + "expand-template": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/expand-template/-/expand-template-1.1.1.tgz", + "integrity": "sha512-cebqLtV8KOZfw0UI8TEFWxtczxxC1jvyUvx6H4fyp1K1FN7A4Q+uggVUlOsI1K8AGU0rwOGqP8nCapdrw8CYQg==", + "dev": true + }, + "gauge": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/gauge/-/gauge-1.2.7.tgz", + "integrity": "sha512-fVbU2wRE91yDvKUnrIaQlHKAWKY5e08PmztCrwuH5YVQ+Z/p3d0ny2T48o6uvAAXHIUnfaQdHkmxYbQft1eHVA==", + "dev": true, + "requires": { + "ansi": "^0.3.0", + "has-unicode": "^2.0.0", + "lodash.pad": "^4.1.0", + "lodash.padend": "^4.1.0", + "lodash.padstart": "^4.1.0" + } + }, + "mimic-response": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", + "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==", + "dev": true + }, + "npmlog": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-2.0.4.tgz", + "integrity": "sha512-DaL6RTb8Qh4tMe2ttPT1qWccETy2Vi5/8p+htMpLBeXJTr2CAqnF5WQtSP2eFpvaNbhLZ5uilDb98mRm4Q+lZQ==", + "dev": true, + "requires": { + "ansi": "~0.3.1", + "are-we-there-yet": "~1.1.2", + "gauge": "~1.2.5" + } + }, + "pump": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/pump/-/pump-1.0.3.tgz", + "integrity": "sha512-8k0JupWme55+9tCVE+FS5ULT3K6AbgqrGa58lTT49RpyfwwcGedHqaC5LlQNdEAumn/wFsu6aPwkuPMioy8kqw==", + "dev": true, + "requires": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "dev": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "simple-get": { + "version": "2.8.2", + "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-2.8.2.tgz", + "integrity": "sha512-Ijd/rV5o+mSBBs4F/x9oDPtTx9Zb6X9brmnXvMW4J7IR15ngi9q5xxqWBKU744jTZiaXtxaPL7uHG6vtN8kUkw==", + "dev": true, + "requires": { + "decompress-response": "^3.3.0", + "once": "^1.3.1", + "simple-concat": "^1.0.0" + } + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "requires": { + "safe-buffer": "~5.1.0" + } + }, + "tar-fs": { + "version": "1.16.3", + "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-1.16.3.tgz", + "integrity": "sha512-NvCeXpYx7OsmOh8zIOP/ebG55zZmxLE0etfWRbWok+q2Qo8x/vOR/IJT1taADXPe+jsiu9axDb3X4B+iIgNlKw==", + "dev": true, + "requires": { + "chownr": "^1.0.1", + "mkdirp": "^0.5.1", + "pump": "^1.0.0", + "tar-stream": "^1.1.2" + } + }, + "tar-stream": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-1.6.2.tgz", + "integrity": "sha512-rzS0heiNf8Xn7/mpdSVVSMAWAoy9bfb1WOTYC78Z0UQKeKa/CWS8FOq0lKGNa8DWKAn9gxjCvMLYc5PGXYlK2A==", + "dev": true, + "requires": { + "bl": "^1.0.0", + "buffer-alloc": "^1.2.0", + "end-of-stream": "^1.0.0", + "fs-constants": "^1.0.0", + "readable-stream": "^2.3.0", + "to-buffer": "^1.1.1", + "xtend": "^4.0.0" + } + } } }, "prebuild-install": { @@ -13216,12 +11931,6 @@ "glob": "^7.1.3" } }, - "rsvp": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/rsvp/-/rsvp-3.6.2.tgz", - "integrity": "sha512-OfWGQTb9vnwRjwtA2QwpG2ICclHC3pgXZO5xt8H2EfgDquO0qVdSb5T88L4qJVAEugbS56pAuV4XZM58UX8ulw==", - "dev": true - }, "run-parallel": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", @@ -13231,12 +11940,6 @@ "queue-microtask": "^1.2.2" } }, - "run-waterfall": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/run-waterfall/-/run-waterfall-1.1.7.tgz", - "integrity": "sha512-iFPgh7SatHXOG1ClcpdwHI63geV3Hc/iL6crGSyBlH2PY7Rm/za+zoKz6FfY/Qlw5K7JwSol8pseO8fN6CMhhQ==", - "dev": true - }, "safe-buffer": { "version": "5.2.1", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", @@ -13297,12 +12000,6 @@ "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==", "dev": true }, - "setimmediate": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", - "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==", - "dev": true - }, "shallow-clone": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", @@ -13402,12 +12099,6 @@ } } }, - "splitargs": { - "version": "0.0.7", - "resolved": "https://registry.npmjs.org/splitargs/-/splitargs-0.0.7.tgz", - "integrity": "sha512-UUFYD2oWbNwULH6WoVtLUOw8ch586B+HUqcsAjjjeoBQAM1bD4wZRXu01koaxyd8UeYpybWqW4h+lO1Okv40Tg==", - "dev": true - }, "sprintf-js": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", @@ -13716,6 +12407,12 @@ "integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==", "dev": true }, + "to-buffer": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/to-buffer/-/to-buffer-1.1.1.tgz", + "integrity": "sha512-lx9B5iv7msuFYE3dytT+KE5tap+rNYw+K4jVkb9R/asAb+pbBSM17jtunHplhBe6RRJdZx3Pn2Jph24O32mOVg==", + "dev": true + }, "to-fast-properties": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", @@ -13741,73 +12438,6 @@ "punycode": "^2.1.1" } }, - "traceur": { - "version": "0.0.111", - "resolved": "https://registry.npmjs.org/traceur/-/traceur-0.0.111.tgz", - "integrity": "sha512-Zy0NCrl3+k1VZvDrZGQJHjLM4Hwz7XHSedhVTdsbV3RNWVtgw/GUP44Rl5WqqcctLkzyQ60eTU2jxfLrlrjWZQ==", - "dev": true, - "requires": { - "commander": "2.9.x", - "glob": "5.0.x", - "rsvp": "^3.0.13", - "semver": "^4.3.3", - "source-map-support": "~0.2.8" - }, - "dependencies": { - "commander": { - "version": "2.9.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.9.0.tgz", - "integrity": "sha512-bmkUukX8wAOjHdN26xj5c4ctEV22TQ7dQYhSmuckKhToXrkUn0iIaolHdIxYYqD55nhpSPA9zPQ1yP57GdXP2A==", - "dev": true, - "requires": { - "graceful-readlink": ">= 1.0.0" - } - }, - "glob": { - "version": "5.0.15", - "resolved": "https://registry.npmjs.org/glob/-/glob-5.0.15.tgz", - "integrity": "sha512-c9IPMazfRITpmAAKi22dK1VKxGDX9ehhqfABDriL/lzO92xcUKEJPQHrVA/2YHSNFB4iFlykVmWvwo48nr3OxA==", - "dev": true, - "requires": { - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "2 || 3", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "semver": { - "version": "4.3.6", - "resolved": "https://registry.npmjs.org/semver/-/semver-4.3.6.tgz", - "integrity": "sha512-IrpJ+yoG4EOH8DFWuVg+8H1kW1Oaof0Wxe7cPcXW3x9BjkN/eVo54F15LyqemnDIUYskQWr9qvl/RihmSy6+xQ==", - "dev": true - }, - "source-map": { - "version": "0.1.32", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.1.32.tgz", - "integrity": "sha512-htQyLrrRLkQ87Zfrir4/yN+vAUd6DNjVayEjTSHXu29AYQJw57I4/xEL/M6p6E/woPNJwvZt6rVlzc7gFEJccQ==", - "dev": true, - "requires": { - "amdefine": ">=0.0.4" - } - }, - "source-map-support": { - "version": "0.2.10", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.2.10.tgz", - "integrity": "sha512-gGKOSat73z0V8wBKo9AGxZZyekczBireh1hHktbt+kb9acsCB5OfVCF2DCWlztcQ3r5oNN7f2BL0B2xOcoJ/DQ==", - "dev": true, - "requires": { - "source-map": "0.1.32" - } - } - } - }, - "traverse": { - "version": "0.3.9", - "resolved": "https://registry.npmjs.org/traverse/-/traverse-0.3.9.tgz", - "integrity": "sha512-iawgk0hLP3SxGKDfnDJf8wTz4p2qImnyihM5Hh/sGvQ3K37dPi/w8sRhdNIxYA1TwFwc5mDhIJq+O0RsvXBKdQ==", - "dev": true - }, "ts-jest": { "version": "29.1.1", "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-29.1.1.tgz", @@ -13853,12 +12483,6 @@ "integrity": "sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==", "dev": true }, - "type": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/type/-/type-1.2.0.tgz", - "integrity": "sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==", - "dev": true - }, "type-check": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", @@ -13933,73 +12557,6 @@ "dev": true, "optional": true }, - "universalify": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", - "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", - "dev": true - }, - "unzipper": { - "version": "0.8.14", - "resolved": "https://registry.npmjs.org/unzipper/-/unzipper-0.8.14.tgz", - "integrity": "sha512-8rFtE7EP5ssOwGpN2dt1Q4njl0N1hUXJ7sSPz0leU2hRdq6+pra57z4YPBlVqm40vcgv6ooKZEAx48fMTv9x4w==", - "dev": true, - "requires": { - "big-integer": "^1.6.17", - "binary": "~0.3.0", - "bluebird": "~3.4.1", - "buffer-indexof-polyfill": "~1.0.0", - "duplexer2": "~0.1.4", - "fstream": "~1.0.10", - "listenercount": "~1.0.1", - "readable-stream": "~2.1.5", - "setimmediate": "~1.0.4" - }, - "dependencies": { - "bluebird": { - "version": "3.4.7", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.4.7.tgz", - "integrity": "sha512-iD3898SR7sWVRHbiQv+sHUtHnMvC1o3nW5rAcqnq3uOn07DSAppZYUkIGslDz6gXC7HfunPe7YVBgoEJASPcHA==", - "dev": true - }, - "duplexer2": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.1.4.tgz", - "integrity": "sha512-asLFVfWWtJ90ZyOUHMqk7/S2w2guQKxUI2itj3d92ADHhxUSbCMGi1f1cBcJ7xM1To+pE/Khbwo1yuNbMEPKeA==", - "dev": true, - "requires": { - "readable-stream": "^2.0.2" - } - }, - "process-nextick-args": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz", - "integrity": "sha512-yN0WQmuCX63LP/TMvAg31nvT6m4vDqJEiiv2CAZqWOGNWutc9DfDk1NPYYmKUFmaVM2UwDowH4u5AHWYP/jxKw==", - "dev": true - }, - "readable-stream": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.1.5.tgz", - "integrity": "sha512-NkXT2AER7VKXeXtJNSaWLpWIhmtSE3K2PguaLEeWr4JILghcIKqoLt1A3wHrnpDC5+ekf8gfk1GKWkFXe4odMw==", - "dev": true, - "requires": { - "buffer-shims": "^1.0.0", - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "~1.0.0", - "process-nextick-args": "~1.0.6", - "string_decoder": "~0.10.x", - "util-deprecate": "~1.0.1" - } - }, - "string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ==", - "dev": true - } - } - }, "update-browserslist-db": { "version": "1.0.11", "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.11.tgz", @@ -14019,12 +12576,6 @@ "punycode": "^2.1.0" } }, - "url-join": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/url-join/-/url-join-0.0.1.tgz", - "integrity": "sha512-H6dnQ/yPAAVzMQRvEvyz01hhfQL5qRWSEt7BX8t9DqnPw9BjMb64fjIRq76Uvf1hkHp+mTZvEVJ5guXOT0Xqaw==", - "dev": true - }, "url-template": { "version": "2.0.8", "resolved": "https://registry.npmjs.org/url-template/-/url-template-2.0.8.tgz", @@ -14036,12 +12587,6 @@ "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" }, - "util-extend": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/util-extend/-/util-extend-1.0.3.tgz", - "integrity": "sha512-mLs5zAK+ctllYBj+iAQvlDCwoxU/WDOUaJkcFudeiAX6OajC6BKXJUa9a+tbtkC11dz2Ufb7h0lyvIOVn4LADA==", - "dev": true - }, "uuid": { "version": "3.4.0", "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", @@ -14210,12 +12755,6 @@ "integrity": "sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ==", "dev": true }, - "window-size": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/window-size/-/window-size-0.1.4.tgz", - "integrity": "sha512-2thx4pB0cV3h+Bw7QmMXcEbdmOzv9t0HFplJH/Lz6yu60hXYy5RT8rUu+wlIreVxWsGN20mo+MHeCSfUpQBwPw==", - "dev": true - }, "wordwrap": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", diff --git a/bindings/nodejs/package.json b/bindings/nodejs/package.json index 0983e95fea..778818d180 100644 --- a/bindings/nodejs/package.json +++ b/bindings/nodejs/package.json @@ -43,7 +43,7 @@ "eslint-config-prettier": "^8.5.0", "jest": "^29.4.2", "jest-matcher-utils": "^29.5.0", - "prebuild": "^11.0.4", + "prebuild": "^3.0.3", "prettier": "^2.8.3", "ts-jest": "^29.0.5", "typedoc": "^0.24.6", @@ -61,7 +61,8 @@ "simple-get": "^2.8.2", "semver": "^7.5.2", "tough-cookie": "^4.1.3", - "word-wrap": "^1.2.4" + "word-wrap": "^1.2.4", + "@babel/traverse": "^7.23.2" }, "repository": { "type": "git", diff --git a/bindings/nodejs/yarn.lock b/bindings/nodejs/yarn.lock index c6deb85081..99c8a5fcfb 100644 --- a/bindings/nodejs/yarn.lock +++ b/bindings/nodejs/yarn.lock @@ -15,12 +15,12 @@ "@jridgewell/gen-mapping" "^0.3.0" "@jridgewell/trace-mapping" "^0.3.9" -"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.12.13", "@babel/code-frame@^7.22.10", "@babel/code-frame@^7.22.5": - version "7.22.10" - resolved "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.22.10.tgz" - integrity sha512-/KKIMG4UEL35WmI9OlvMhurwtytjvXoFcGNrOvyG9zIzA8YmPjVtIZUf7b05+TPO7G7/GEmLHDaoCgACHl9hhA== +"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.12.13", "@babel/code-frame@^7.22.10", "@babel/code-frame@^7.22.13": + version "7.22.13" + resolved "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.22.13.tgz" + integrity sha512-XktuhWlJ5g+3TJXc5upd9Ks1HutSArik6jf2eAjYFyIOf4ej3RN+184cZbzDvbPnuTJIUhPKKJE3cIsYTiAT3w== dependencies: - "@babel/highlight" "^7.22.10" + "@babel/highlight" "^7.22.13" chalk "^2.4.2" "@babel/compat-data@^7.22.9": @@ -49,12 +49,12 @@ json5 "^2.2.2" semver "^6.3.1" -"@babel/generator@^7.22.10", "@babel/generator@^7.7.2": - version "7.22.10" - resolved "https://registry.npmjs.org/@babel/generator/-/generator-7.22.10.tgz" - integrity sha512-79KIf7YiWjjdZ81JnLujDRApWtl7BxTqWD88+FFdQEIOG8LJ0etDOM7CXuIgGJa55sGOwZVwuEsaLEm0PJ5/+A== +"@babel/generator@^7.22.10", "@babel/generator@^7.23.0", "@babel/generator@^7.7.2": + version "7.23.0" + resolved "https://registry.npmjs.org/@babel/generator/-/generator-7.23.0.tgz" + integrity sha512-lN85QRR+5IbYrMWM6Y4pE/noaQtg4pNiqeNGX60eqOfo6gtEj6uw/JagelB8vVztSd7R6M5n1+PQkDbHbBRU4g== dependencies: - "@babel/types" "^7.22.10" + "@babel/types" "^7.23.0" "@jridgewell/gen-mapping" "^0.3.2" "@jridgewell/trace-mapping" "^0.3.17" jsesc "^2.5.1" @@ -70,18 +70,18 @@ lru-cache "^5.1.1" semver "^6.3.1" -"@babel/helper-environment-visitor@^7.22.5": - version "7.22.5" - resolved "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.5.tgz" - integrity sha512-XGmhECfVA/5sAt+H+xpSg0mfrHq6FzNr9Oxh7PSEBBRUb/mL7Kz3NICXb194rCqAEdxkhPT1a88teizAFyvk8Q== +"@babel/helper-environment-visitor@^7.22.20", "@babel/helper-environment-visitor@^7.22.5": + version "7.22.20" + resolved "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz" + integrity sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA== -"@babel/helper-function-name@^7.22.5": - version "7.22.5" - resolved "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.22.5.tgz" - integrity sha512-wtHSq6jMRE3uF2otvfuD3DIvVhOsSNshQl0Qrd7qC9oQJzHvOL4qQXlQn2916+CXGywIjpGuIkoyZRRxHPiNQQ== +"@babel/helper-function-name@^7.23.0": + version "7.23.0" + resolved "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz" + integrity sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw== dependencies: - "@babel/template" "^7.22.5" - "@babel/types" "^7.22.5" + "@babel/template" "^7.22.15" + "@babel/types" "^7.23.0" "@babel/helper-hoist-variables@^7.22.5": version "7.22.5" @@ -132,10 +132,10 @@ resolved "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz" integrity sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw== -"@babel/helper-validator-identifier@^7.22.5": - version "7.22.5" - resolved "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.5.tgz" - integrity sha512-aJXu+6lErq8ltp+JhkJUfk1MTGyuA4v7f3pA+BJ5HLfNC6nAQ0Cpi9uOquUj8Hehg0aUiHzWQbOVJGao6ztBAQ== +"@babel/helper-validator-identifier@^7.22.20", "@babel/helper-validator-identifier@^7.22.5": + version "7.22.20" + resolved "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz" + integrity sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A== "@babel/helper-validator-option@^7.22.5": version "7.22.5" @@ -151,19 +151,19 @@ "@babel/traverse" "^7.22.10" "@babel/types" "^7.22.10" -"@babel/highlight@^7.22.10": - version "7.22.10" - resolved "https://registry.npmjs.org/@babel/highlight/-/highlight-7.22.10.tgz" - integrity sha512-78aUtVcT7MUscr0K5mIEnkwxPE0MaxkR5RxRwuHaQ+JuU5AmTPhY+do2mdzVTnIJJpyBglql2pehuBIWHug+WQ== +"@babel/highlight@^7.22.13": + version "7.22.20" + resolved "https://registry.npmjs.org/@babel/highlight/-/highlight-7.22.20.tgz" + integrity sha512-dkdMCN3py0+ksCgYmGG8jKeGA/8Tk+gJwSYYlFGxG5lmhfKNoAy004YpLxpS1W2J8m/EK2Ew+yOs9pVRwO89mg== dependencies: - "@babel/helper-validator-identifier" "^7.22.5" + "@babel/helper-validator-identifier" "^7.22.20" chalk "^2.4.2" js-tokens "^4.0.0" -"@babel/parser@^7.1.0", "@babel/parser@^7.14.7", "@babel/parser@^7.20.7", "@babel/parser@^7.22.10", "@babel/parser@^7.22.5": - version "7.22.10" - resolved "https://registry.npmjs.org/@babel/parser/-/parser-7.22.10.tgz" - integrity sha512-lNbdGsQb9ekfsnjFGhEiF4hfFqGgfOP3H3d27re3n+CGhNuTSUEQdfWk556sTLNTloczcdM5TYF2LhzmDQKyvQ== +"@babel/parser@^7.1.0", "@babel/parser@^7.14.7", "@babel/parser@^7.20.7", "@babel/parser@^7.22.10", "@babel/parser@^7.22.15", "@babel/parser@^7.23.0": + version "7.23.0" + resolved "https://registry.npmjs.org/@babel/parser/-/parser-7.23.0.tgz" + integrity sha512-vvPKKdMemU85V9WE/l5wZEmImpCtLqbnTvqDS2U1fJ96KrxoW7KrXhNsNCblQlg8Ck4b85yxdTyelsMUgFUXiw== "@babel/plugin-syntax-async-generators@^7.8.4": version "7.8.4" @@ -263,38 +263,38 @@ dependencies: "@babel/helper-plugin-utils" "^7.22.5" -"@babel/template@^7.22.5", "@babel/template@^7.3.3": - version "7.22.5" - resolved "https://registry.npmjs.org/@babel/template/-/template-7.22.5.tgz" - integrity sha512-X7yV7eiwAxdj9k94NEylvbVHLiVG1nvzCV2EAowhxLTwODV1jl9UzZ48leOC0sH7OnuHrIkllaBgneUykIcZaw== +"@babel/template@^7.22.15", "@babel/template@^7.22.5", "@babel/template@^7.3.3": + version "7.22.15" + resolved "https://registry.npmjs.org/@babel/template/-/template-7.22.15.tgz" + integrity sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w== dependencies: - "@babel/code-frame" "^7.22.5" - "@babel/parser" "^7.22.5" - "@babel/types" "^7.22.5" + "@babel/code-frame" "^7.22.13" + "@babel/parser" "^7.22.15" + "@babel/types" "^7.22.15" -"@babel/traverse@^7.22.10": - version "7.22.10" - resolved "https://registry.npmjs.org/@babel/traverse/-/traverse-7.22.10.tgz" - integrity sha512-Q/urqV4pRByiNNpb/f5OSv28ZlGJiFiiTh+GAHktbIrkPhPbl90+uW6SmpoLyZqutrg9AEaEf3Q/ZBRHBXgxig== +"@babel/traverse@^7.22.10", "@babel/traverse@^7.23.2": + version "7.23.2" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.23.2.tgz#329c7a06735e144a506bdb2cad0268b7f46f4ad8" + integrity sha512-azpe59SQ48qG6nu2CzcMLbxUudtN+dOM9kDbUqGq3HXUJRlo7i8fvPoxQUzYgLZ4cMVmuZgm8vvBpNeRhd6XSw== dependencies: - "@babel/code-frame" "^7.22.10" - "@babel/generator" "^7.22.10" - "@babel/helper-environment-visitor" "^7.22.5" - "@babel/helper-function-name" "^7.22.5" + "@babel/code-frame" "^7.22.13" + "@babel/generator" "^7.23.0" + "@babel/helper-environment-visitor" "^7.22.20" + "@babel/helper-function-name" "^7.23.0" "@babel/helper-hoist-variables" "^7.22.5" "@babel/helper-split-export-declaration" "^7.22.6" - "@babel/parser" "^7.22.10" - "@babel/types" "^7.22.10" + "@babel/parser" "^7.23.0" + "@babel/types" "^7.23.0" debug "^4.1.0" globals "^11.1.0" -"@babel/types@^7.0.0", "@babel/types@^7.20.7", "@babel/types@^7.22.10", "@babel/types@^7.22.5", "@babel/types@^7.3.3": - version "7.22.10" - resolved "https://registry.npmjs.org/@babel/types/-/types-7.22.10.tgz" - integrity sha512-obaoigiLrlDZ7TUQln/8m4mSqIW2QFeOrCQc9r+xsaHGNoplVNYlRVpsfE8Vj35GEm2ZH4ZhrNYogs/3fj85kg== +"@babel/types@^7.0.0", "@babel/types@^7.20.7", "@babel/types@^7.22.10", "@babel/types@^7.22.15", "@babel/types@^7.22.5", "@babel/types@^7.23.0", "@babel/types@^7.3.3": + version "7.23.0" + resolved "https://registry.npmjs.org/@babel/types/-/types-7.23.0.tgz" + integrity sha512-0oIyUfKoI3mSqMvsxBdclDwxXKXAUA8v/apZbc+iSyARYou1o8ZGDxbUYyLFoW2arqS2jDGqJuZvv1d/io1axg== dependencies: "@babel/helper-string-parser" "^7.22.5" - "@babel/helper-validator-identifier" "^7.22.5" + "@babel/helper-validator-identifier" "^7.22.20" to-fast-properties "^2.0.0" "@bcoe/v8-coverage@^0.2.3": @@ -1036,11 +1036,6 @@ ajv@^6.12.3, ajv@^6.12.4, ajv@^6.12.5: json-schema-traverse "^0.4.1" uri-js "^4.2.2" -amdefine@>=0.0.4: - version "1.0.1" - resolved "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz" - integrity sha512-S2Hw0TtNkMJhIabBwIojKL9YHO5T0n5eNqWJ7Lrlel/zDbftQpxpapi8tZs3X1HWa+u+QeydGmzzNU0m09+Rcg== - ansi-escapes@^4.2.1: version "4.3.2" resolved "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz" @@ -1082,7 +1077,7 @@ ansi-styles@^5.0.0: resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz" integrity sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA== -ansi@^0.3.0, ansi@~0.3.0, ansi@~0.3.1: +ansi@^0.3.0, ansi@~0.3.1: version "0.3.1" resolved "https://registry.npmjs.org/ansi/-/ansi-0.3.1.tgz" integrity sha512-iFY7JCgHbepc0b82yLaw4IMortylNb6wG4kL+4R0C3iv6i+RHGHux/yUX5BTiRvSX/shMnngjR1YyNMnXEFh5A== @@ -1100,14 +1095,6 @@ aproba@^1.0.3: resolved "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz" integrity sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw== -are-we-there-yet@~1.0.0: - version "1.0.6" - resolved "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.0.6.tgz" - integrity sha512-Zfw6bteqM9gQXZ1BIWOgM8xEwMrUGoyL8nW13+O+OOgNX3YhuDN1GDgg1NzdTlmm3j+9sHy7uBZ12r+z9lXnZQ== - dependencies: - delegates "^1.0.0" - readable-stream "^2.0.0 || ^1.1.13" - are-we-there-yet@~1.1.2: version "1.1.7" resolved "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.7.tgz" @@ -1128,14 +1115,6 @@ argparse@^2.0.1: resolved "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz" integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== -array-index@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/array-index/-/array-index-1.0.0.tgz" - integrity sha512-jesyNbBkLQgGZMSwA1FanaFjalb1mZUGxGeUEkSDidzgrbjBGhvizJkaItdhkt8eIHFOJC7nDsrXk+BaehTdRw== - dependencies: - debug "^2.2.0" - es6-symbol "^3.0.2" - array-union@^2.1.0: version "2.1.0" resolved "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz" @@ -1153,6 +1132,11 @@ assert-plus@1.0.0, assert-plus@^1.0.0: resolved "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz" integrity sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw== +async@^1.4.0: + version "1.5.2" + resolved "https://registry.npmjs.org/async/-/async-1.5.2.tgz" + integrity sha512-nSVgobk4rv61R9PUSDtYt7mPVB2olxNR5RWJcAsH676/ef11bUZwvu7+RGYrYauVdDPcO519v68wRhXQtxsV9w== + asynckit@^0.4.0: version "0.4.0" resolved "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz" @@ -1245,18 +1229,13 @@ bcrypt-pbkdf@^1.0.0: dependencies: tweetnacl "^0.14.3" -big-integer@^1.6.17: - version "1.6.51" - resolved "https://registry.npmjs.org/big-integer/-/big-integer-1.6.51.tgz" - integrity sha512-GPEid2Y9QU1Exl1rpO9B2IPJGHPSupF5GnVIP0blYvNOMer2bTvSWs1jGOUg04hTmu67nmLsQ9TBo1puaotBHg== - -binary@~0.3.0: - version "0.3.0" - resolved "https://registry.npmjs.org/binary/-/binary-0.3.0.tgz" - integrity sha512-D4H1y5KYwpJgK8wk1Cue5LLPgmwHKYSChkbspQg5JtVuR5ulGckxfR62H3AE9UDkdMC8yyXlqYihuz3Aqg2XZg== +bl@^1.0.0: + version "1.2.3" + resolved "https://registry.npmjs.org/bl/-/bl-1.2.3.tgz" + integrity sha512-pvcNpa0UU69UT341rO6AYy4FVAIkUHuZXRIWbq+zHnsVcRzDDjIAhGuuYoi0d//cwIwtt4pkpKycWEfjdV+vww== dependencies: - buffers "~0.1.1" - chainsaw "~0.1.0" + readable-stream "^2.3.5" + safe-buffer "^5.1.1" bl@^4.0.3: version "4.1.0" @@ -1274,16 +1253,6 @@ bl@~3.0.0: dependencies: readable-stream "^3.0.1" -bluebird@^3: - version "3.7.2" - resolved "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz" - integrity sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg== - -bluebird@~3.4.1: - version "3.4.7" - resolved "https://registry.npmjs.org/bluebird/-/bluebird-3.4.7.tgz" - integrity sha512-iD3898SR7sWVRHbiQv+sHUtHnMvC1o3nW5rAcqnq3uOn07DSAppZYUkIGslDz6gXC7HfunPe7YVBgoEJASPcHA== - brace-expansion@^1.1.7: version "1.1.11" resolved "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz" @@ -1330,6 +1299,24 @@ bser@2.1.1: dependencies: node-int64 "^0.4.0" +buffer-alloc-unsafe@^1.1.0: + version "1.1.0" + resolved "https://registry.npmjs.org/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz" + integrity sha512-TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg== + +buffer-alloc@^1.2.0: + version "1.2.0" + resolved "https://registry.npmjs.org/buffer-alloc/-/buffer-alloc-1.2.0.tgz" + integrity sha512-CFsHQgjtW1UChdXgbyJGtnm+O/uLQeZdtbDo8mfUgYXCHSM1wgrVxXm6bSyrUuErEb+4sYVGCzASBRot7zyrow== + dependencies: + buffer-alloc-unsafe "^1.1.0" + buffer-fill "^1.0.0" + +buffer-fill@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/buffer-fill/-/buffer-fill-1.0.0.tgz" + integrity sha512-T7zexNBwiiaCOGDg9xNX9PBmjrubblRkENuptryuI64URkXDFum9il/JGL8Lm8wYfAXpredVXXZz7eMHilimiQ== + buffer-from@^0.1.1: version "0.1.2" resolved "https://registry.npmjs.org/buffer-from/-/buffer-from-0.1.2.tgz" @@ -1340,16 +1327,6 @@ buffer-from@^1.0.0: resolved "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz" integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ== -buffer-indexof-polyfill@~1.0.0: - version "1.0.2" - resolved "https://registry.npmjs.org/buffer-indexof-polyfill/-/buffer-indexof-polyfill-1.0.2.tgz" - integrity sha512-I7wzHwA3t1/lwXQh+A5PbNvJxgfo5r3xulgpYDB5zckTu/Z9oUK9biouBKQUjEqzaz3HnAT6TYoovmE+GqSf7A== - -buffer-shims@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/buffer-shims/-/buffer-shims-1.0.0.tgz" - integrity sha512-Zy8ZXMyxIT6RMTeY7OP/bDndfj6bwCan7SS98CEndS6deHwWPpseeHlwarNcBim+etXnF9HBc1non5JgDaJU1g== - buffer@^5.5.0: version "5.7.1" resolved "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz" @@ -1358,21 +1335,11 @@ buffer@^5.5.0: base64-js "^1.3.1" ieee754 "^1.1.13" -buffers@~0.1.1: - version "0.1.1" - resolved "https://registry.npmjs.org/buffers/-/buffers-0.1.1.tgz" - integrity sha512-9q/rDEGSb/Qsvv2qvzIzdluL5k7AaJOTrw23z9reQthrbF7is4CtlT0DXyO1oei2DCp4uojjzQ7igaSHp1kAEQ== - callsites@^3.0.0: version "3.1.0" resolved "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz" integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== -camelcase@^2.0.1: - version "2.1.1" - resolved "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz" - integrity sha512-DLIsRzJVBQu72meAKPkWQOLcujdXT32hwdfnkI1frSiSRMK1MofjKHf+MEx0SB6fjEFXL8fBDv1dKymBlOp4Qw== - camelcase@^5.3.1: version "5.3.1" resolved "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz" @@ -1398,13 +1365,6 @@ caseless@~0.12.0: resolved "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz" integrity sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw== -chainsaw@~0.1.0: - version "0.1.0" - resolved "https://registry.npmjs.org/chainsaw/-/chainsaw-0.1.0.tgz" - integrity sha512-75kWfWt6MEKNC8xYXIdRpDehRYY/tNSgwKaJq+dbbDcxORuVrrQ+SEHoWsniVn9XPYfP4gmdWIeDk/4YNp1rNQ== - dependencies: - traverse ">=0.3.0 <0.4" - chalk@^2.4.2: version "2.4.2" resolved "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz" @@ -1427,7 +1387,7 @@ char-regex@^1.0.2: resolved "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz" integrity sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw== -chownr@^1.1.1, chownr@^1.1.4: +chownr@^1.0.1, chownr@^1.1.1, chownr@^1.1.4: version "1.1.4" resolved "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz" integrity sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg== @@ -1452,15 +1412,6 @@ class-transformer@^0.5.1: resolved "https://registry.npmjs.org/class-transformer/-/class-transformer-0.5.1.tgz" integrity sha512-SQa1Ws6hUbfC98vKGxZH3KFY0Y1lm5Zm0SY8XX9zbK7FJCyVEac3ATW0RIpwzW+oOfmHE5PMPufDG9hCfoEOMw== -cliui@^3.0.3: - version "3.2.0" - resolved "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz" - integrity sha512-0yayqDxWQbqk3ojkYqUKqaAQ6AfNKeKWRNA8kR0WXzAsdHpP4BIaOmMAG87JGuO6qcobyW4GjxHd9PmhEd+T9w== - dependencies: - string-width "^1.0.1" - strip-ansi "^3.0.1" - wrap-ansi "^2.0.0" - cliui@^8.0.1: version "8.0.1" resolved "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz" @@ -1479,29 +1430,6 @@ clone-deep@^4.0.1: kind-of "^6.0.2" shallow-clone "^3.0.0" -cmake-js@~5.2.0: - version "5.2.0" - resolved "https://registry.npmjs.org/cmake-js/-/cmake-js-5.2.0.tgz" - integrity sha512-/HLhzoBEOLKGdE1FLwH5ggzRt67AWTb4IErg4rm+bTC+R0DKUobojDyp17dSswDVPosdoPmHXjKxbJiyBZfQeg== - dependencies: - bluebird "^3" - debug "^4" - fs-extra "^5.0.0" - is-iojs "^1.0.1" - lodash "^4" - memory-stream "0" - npmlog "^1.2.0" - rc "^1.2.7" - request "^2.54.0" - semver "^5.0.3" - splitargs "0" - tar "^4" - traceur "0.0.x" - unzipper "^0.8.13" - url-join "0" - which "^1.0.9" - yargs "^3.6.0" - co@^4.6.0: version "4.6.0" resolved "https://registry.npmjs.org/co/-/co-4.6.0.tgz" @@ -1553,13 +1481,6 @@ combined-stream@^1.0.6, combined-stream@~1.0.6: dependencies: delayed-stream "~1.0.0" -commander@2.9.x: - version "2.9.0" - resolved "https://registry.npmjs.org/commander/-/commander-2.9.0.tgz" - integrity sha512-bmkUukX8wAOjHdN26xj5c4ctEV22TQ7dQYhSmuckKhToXrkUn0iIaolHdIxYYqD55nhpSPA9zPQ1yP57GdXP2A== - dependencies: - graceful-readlink ">= 1.0.0" - commander@^10.0.1: version "10.0.1" resolved "https://registry.npmjs.org/commander/-/commander-10.0.1.tgz" @@ -1604,14 +1525,6 @@ cross-spawn@^7.0.2, cross-spawn@^7.0.3: shebang-command "^2.0.0" which "^2.0.1" -d@1, d@^1.0.1: - version "1.0.1" - resolved "https://registry.npmjs.org/d/-/d-1.0.1.tgz" - integrity sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA== - dependencies: - es5-ext "^0.10.50" - type "^1.0.1" - dashdash@^1.12.0: version "1.14.1" resolved "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz" @@ -1619,28 +1532,16 @@ dashdash@^1.12.0: dependencies: assert-plus "^1.0.0" -debug@^2.2.0: - version "2.6.9" - resolved "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz" - integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== - dependencies: - ms "2.0.0" - -debug@^4, debug@^4.1.0, debug@^4.1.1, debug@^4.3.2, debug@^4.3.4: +debug@^4.1.0, debug@^4.1.1, debug@^4.3.2, debug@^4.3.4: version "4.3.4" resolved "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz" integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== dependencies: ms "2.1.2" -decamelize@^1.1.1: - version "1.2.0" - resolved "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz" - integrity sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA== - decompress-response@^3.3.0: version "3.3.0" - resolved "https://registry.yarnpkg.com/decompress-response/-/decompress-response-3.3.0.tgz#80a4dd323748384bfa248083622aedec982adff3" + resolved "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz" integrity sha512-BzRPQuY1ip+qDonAOz42gRm/pg9F768C+npV/4JOsxRC2sq+Rlk+Q4ZCAsOhnIaMrgarILY+RMUIvMmmX1qAEA== dependencies: mimic-response "^1.0.0" @@ -1716,18 +1617,6 @@ duplexer2@~0.0.2: dependencies: readable-stream "~1.1.9" -duplexer2@~0.1.4: - version "0.1.4" - resolved "https://registry.npmjs.org/duplexer2/-/duplexer2-0.1.4.tgz" - integrity sha512-asLFVfWWtJ90ZyOUHMqk7/S2w2guQKxUI2itj3d92ADHhxUSbCMGi1f1cBcJ7xM1To+pE/Khbwo1yuNbMEPKeA== - dependencies: - readable-stream "^2.0.2" - -each-series-async@^1.0.1: - version "1.0.1" - resolved "https://registry.npmjs.org/each-series-async/-/each-series-async-1.0.1.tgz" - integrity sha512-G4zip/Ewpwr6JQxW7+2RNgkPd09h/UNec5UlvA/xKwl4qf5blyBNK6a/zjQc3MojgsxaOb93B9v3T92QU6IMVg== - ecc-jsbn@~0.1.1: version "0.1.2" resolved "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz" @@ -1759,7 +1648,7 @@ emoji-regex@^8.0.0: resolved "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz" integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== -end-of-stream@^1.1.0, end-of-stream@^1.4.1: +end-of-stream@^1.0.0, end-of-stream@^1.1.0, end-of-stream@^1.4.1: version "1.4.4" resolved "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz" integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q== @@ -1774,11 +1663,6 @@ enhanced-resolve@^5.15.0: graceful-fs "^4.2.4" tapable "^2.2.0" -env-paths@^2.2.0: - version "2.2.1" - resolved "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz" - integrity sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A== - envinfo@^7.7.3: version "7.10.0" resolved "https://registry.npmjs.org/envinfo/-/envinfo-7.10.0.tgz" @@ -1796,32 +1680,6 @@ es-module-lexer@^1.2.1: resolved "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.3.1.tgz" integrity sha512-JUFAyicQV9mXc3YRxPnDlrfBKpqt6hUYzz9/boprUJHs4e4KVr3XwOF70doO6gwXUor6EWZJAyWAfKki84t20Q== -es5-ext@^0.10.35, es5-ext@^0.10.50: - version "0.10.62" - resolved "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.62.tgz" - integrity sha512-BHLqn0klhEpnOKSrzn/Xsz2UIW8j+cGmo9JLzr8BiUapV8hPL9+FliFqjwr9ngW7jWdnxv6eO+/LqyhJVqgrjA== - dependencies: - es6-iterator "^2.0.3" - es6-symbol "^3.1.3" - next-tick "^1.1.0" - -es6-iterator@^2.0.3: - version "2.0.3" - resolved "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz" - integrity sha512-zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g== - dependencies: - d "1" - es5-ext "^0.10.35" - es6-symbol "^3.1.1" - -es6-symbol@^3.0.2, es6-symbol@^3.1.1, es6-symbol@^3.1.3: - version "3.1.3" - resolved "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.3.tgz" - integrity sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA== - dependencies: - d "^1.0.1" - ext "^1.1.2" - escalade@^3.1.1: version "3.1.1" resolved "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz" @@ -1974,18 +1832,16 @@ execa@^5.0.0: signal-exit "^3.0.3" strip-final-newline "^2.0.0" -execspawn@^1.0.1: - version "1.0.1" - resolved "https://registry.npmjs.org/execspawn/-/execspawn-1.0.1.tgz" - integrity sha512-s2k06Jy9i8CUkYe0+DxRlvtkZoOkwwfhB+Xxo5HGUtrISVW2m98jO2tr67DGRFxZwkjQqloA3v/tNtjhBRBieg== - dependencies: - util-extend "^1.0.1" - exit@^0.1.2: version "0.1.2" resolved "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz" integrity sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ== +expand-template@^1.0.0: + version "1.1.1" + resolved "https://registry.npmjs.org/expand-template/-/expand-template-1.1.1.tgz" + integrity sha512-cebqLtV8KOZfw0UI8TEFWxtczxxC1jvyUvx6H4fyp1K1FN7A4Q+uggVUlOsI1K8AGU0rwOGqP8nCapdrw8CYQg== + expand-template@^2.0.3: version "2.0.3" resolved "https://registry.npmjs.org/expand-template/-/expand-template-2.0.3.tgz" @@ -2003,13 +1859,6 @@ expect@^29.0.0, expect@^29.6.2: jest-message-util "^29.6.2" jest-util "^29.6.2" -ext@^1.1.2: - version "1.7.0" - resolved "https://registry.npmjs.org/ext/-/ext-1.7.0.tgz" - integrity sha512-6hxeJYaL110a9b5TEJSj0gojyHQAmA2ch5Os+ySCiA1QGdS697XWY1pzsrSjqA9LDEEgdB/KypIlR59RcLuHYw== - dependencies: - type "^2.7.2" - extend@~3.0.2: version "3.0.2" resolved "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz" @@ -2127,15 +1976,6 @@ fs-constants@^1.0.0: resolved "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz" integrity sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow== -fs-extra@^5.0.0: - version "5.0.0" - resolved "https://registry.npmjs.org/fs-extra/-/fs-extra-5.0.0.tgz" - integrity sha512-66Pm4RYbjzdyeuqudYqhFiNBbCIuI9kgRqLPSHIlXHidW8NIQtVdkM1yeZ4lXwuhbTETv3EUGMNHAAw6hiundQ== - dependencies: - graceful-fs "^4.1.2" - jsonfile "^4.0.0" - universalify "^0.1.0" - fs-minipass@^1.2.7: version "1.2.7" resolved "https://registry.npmjs.org/fs-minipass/-/fs-minipass-1.2.7.tgz" @@ -2153,7 +1993,7 @@ fsevents@^2.3.2: resolved "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz" integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== -fstream@^1.0.0, fstream@~1.0.10: +fstream@^1.0.0: version "1.0.12" resolved "https://registry.npmjs.org/fstream/-/fstream-1.0.12.tgz" integrity sha512-WvJ193OHa0GHPEL+AycEJgxvBEwyfRkN1vhjca23OaPVMCaLCXTd5qAu82AjTcgP1UJmytkOKb63Ypde7raDIg== @@ -2168,7 +2008,7 @@ function-bind@^1.1.1: resolved "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz" integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== -gauge@~1.2.0, gauge@~1.2.5: +gauge@~1.2.5: version "1.2.7" resolved "https://registry.npmjs.org/gauge/-/gauge-1.2.7.tgz" integrity sha512-fVbU2wRE91yDvKUnrIaQlHKAWKY5e08PmztCrwuH5YVQ+Z/p3d0ny2T48o6uvAAXHIUnfaQdHkmxYbQft1eHVA== @@ -2220,17 +2060,17 @@ getpass@^0.1.1: dependencies: assert-plus "^1.0.0" -ghreleases@^3.0.2: - version "3.0.2" - resolved "https://registry.npmjs.org/ghreleases/-/ghreleases-3.0.2.tgz" - integrity sha512-QiR9mIYvRG7hd8JuQYoxeBNOelVuTp2DpdiByRywbCDBSJufK9Vq7VuhD8B+5uviMxZx2AEkCzye61Us9gYgnw== +ghreleases@^1.0.2: + version "1.0.7" + resolved "https://registry.npmjs.org/ghreleases/-/ghreleases-1.0.7.tgz" + integrity sha512-1lFGyLLF38Q6cFCDyebN5vzQ2P9DEaAgxPIDLmQwQDVDmUe2Wgv+6dhAIoHeA+My4HLpaJ+dKF73xtuykN2cbQ== dependencies: after "~0.8.1" ghrepos "~2.1.0" ghutils "~3.2.0" - lodash.uniq "^4.5.0" simple-mime "~0.1.0" url-template "~2.0.6" + xtend "~4.0.0" ghrepos@~2.1.0: version "2.1.0" @@ -2271,7 +2111,7 @@ glob-to-regexp@^0.4.1: resolved "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz" integrity sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw== -"glob@3 || 4 || 5 || 6 || 7", glob@^7.0.3, glob@^7.1.3, glob@^7.1.4, glob@^7.1.6: +glob@^7.0.3, glob@^7.1.3, glob@^7.1.4: version "7.2.3" resolved "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz" integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== @@ -2283,17 +2123,6 @@ glob-to-regexp@^0.4.1: once "^1.3.0" path-is-absolute "^1.0.0" -glob@5.0.x: - version "5.0.15" - resolved "https://registry.npmjs.org/glob/-/glob-5.0.15.tgz" - integrity sha512-c9IPMazfRITpmAAKi22dK1VKxGDX9ehhqfABDriL/lzO92xcUKEJPQHrVA/2YHSNFB4iFlykVmWvwo48nr3OxA== - dependencies: - inflight "^1.0.4" - inherits "2" - minimatch "2 || 3" - once "^1.3.0" - path-is-absolute "^1.0.0" - globals@^11.1.0: version "11.12.0" resolved "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz" @@ -2318,16 +2147,11 @@ globby@^11.1.0: merge2 "^1.4.1" slash "^3.0.0" -graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.2, graceful-fs@^4.2.4, graceful-fs@^4.2.9: +graceful-fs@^4.1.2, graceful-fs@^4.2.4, graceful-fs@^4.2.9: version "4.2.11" resolved "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz" integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ== -"graceful-readlink@>= 1.0.0": - version "1.0.1" - resolved "https://registry.npmjs.org/graceful-readlink/-/graceful-readlink-1.0.1.tgz" - integrity sha512-8tLu60LgxF6XpdbK8OW3FA+IfTNBn1ZHGHKF4KQbEeSkajYw5PlYJcKluntgegDPTg8UkHjpet1T82vk6TQ68w== - graphemer@^1.4.0: version "1.4.0" resolved "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz" @@ -2462,11 +2286,6 @@ interpret@^3.1.1: resolved "https://registry.npmjs.org/interpret/-/interpret-3.1.1.tgz" integrity sha512-6xwYfHbajpoF0xLW+iwLkhwgvLoZDfjYfoFNu8ftMoXINzwuymNLd9u/KmwtdT2GbR+/Cz66otEGEVVUHX9QLQ== -invert-kv@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz" - integrity sha512-xgs2NH9AE66ucSq4cNG1nhSFghr5l6tdL15Pk+jl46bmmBapgoaY/AacXyaDznAqmGL99TiLSQgO/XazFSKYeQ== - is-arrayish@^0.2.1: version "0.2.1" resolved "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz" @@ -2508,11 +2327,6 @@ is-glob@^4.0.0, is-glob@^4.0.1, is-glob@^4.0.3: dependencies: is-extglob "^2.1.1" -is-iojs@^1.0.1: - version "1.1.0" - resolved "https://registry.npmjs.org/is-iojs/-/is-iojs-1.1.0.tgz" - integrity sha512-tLn1j3wYSL6DkvEI+V/j0pKohpa5jk+ER74v6S4SgCXnjS0WA+DoZbwZBrrhgwksMvtuwndyGeG5F8YMsoBzSA== - is-number@^7.0.0: version "7.0.0" resolved "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz" @@ -3039,13 +2853,6 @@ jsonc-parser@^3.2.0: resolved "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.2.0.tgz" integrity sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w== -jsonfile@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz" - integrity sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg== - optionalDependencies: - graceful-fs "^4.1.6" - jsonist@~2.1.0: version "2.1.2" resolved "https://registry.npmjs.org/jsonist/-/jsonist-2.1.2.tgz" @@ -3076,13 +2883,6 @@ kleur@^3.0.3: resolved "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz" integrity sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w== -lcid@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz" - integrity sha512-YiGkH6EnGrDGqLMITnGjXtGmNtjoXw9SVUzcaos8RBi7Ps0VBylkq+vOcY9QE5poLasPCR849ucFUkl0UzUyOw== - dependencies: - invert-kv "^1.0.0" - leven@^3.1.0: version "3.1.0" resolved "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz" @@ -3101,11 +2901,6 @@ lines-and-columns@^1.1.6: resolved "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz" integrity sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg== -listenercount@~1.0.1: - version "1.0.1" - resolved "https://registry.npmjs.org/listenercount/-/listenercount-1.0.1.tgz" - integrity sha512-3mk/Zag0+IJxeDrxSgaDPy4zZ3w05PRZeJNnlWhzFz5OkX49J4krc+A8X2d2M69vGMBEX0uyl8M+W+8gH+kBqQ== - loader-runner@^4.2.0: version "4.3.0" resolved "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz" @@ -3150,16 +2945,6 @@ lodash.padstart@^4.1.0: resolved "https://registry.npmjs.org/lodash.padstart/-/lodash.padstart-4.6.1.tgz" integrity sha512-sW73O6S8+Tg66eY56DBk85aQzzUJDtpoXFBgELMd5P/SotAguo+1kYO6RuYgXxA4HJH3LFTFPASX6ET6bjfriw== -lodash.uniq@^4.5.0: - version "4.5.0" - resolved "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz" - integrity sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ== - -lodash@^4: - version "4.17.21" - resolved "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz" - integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== - lru-cache@^5.1.1: version "5.1.1" resolved "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz" @@ -3203,13 +2988,6 @@ marked@^4.3.0: resolved "https://registry.npmjs.org/marked/-/marked-4.3.0.tgz" integrity sha512-PRsaiG84bK+AMvxziE/lCFss8juXjNaWzVbN5tXAm4XjeaS9NAHhop+PjQxz2A9h8Q4M/xGmzP8vqNwy6JeK0A== -memory-stream@0: - version "0.0.3" - resolved "https://registry.npmjs.org/memory-stream/-/memory-stream-0.0.3.tgz" - integrity sha512-q0D3m846qY6ZkIt+19ZemU5vH56lpOZZwoJc3AICARKh/menBuayQUjAGPrqtHQQMUYERSdOrej92J9kz7LgYA== - dependencies: - readable-stream "~1.0.26-2" - merge-stream@^2.0.0: version "2.0.0" resolved "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz" @@ -3247,10 +3025,10 @@ mimic-fn@^2.1.0: mimic-response@^1.0.0: version "1.0.1" - resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-1.0.1.tgz#4923538878eef42063cb8a3e3b0798781487ab1b" + resolved "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz" integrity sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ== -"minimatch@2 || 3", minimatch@3, minimatch@^3.0.2, minimatch@^3.0.4, minimatch@^3.0.5, minimatch@^3.1.1, minimatch@^3.1.2: +minimatch@^3.0.4, minimatch@^3.0.5, minimatch@^3.1.1, minimatch@^3.1.2: version "3.1.2" resolved "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz" integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== @@ -3296,11 +3074,6 @@ mkdirp-classic@^0.5.2, mkdirp-classic@^0.5.3: dependencies: minimist "^1.2.6" -ms@2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz" - integrity sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A== - ms@2.1.2: version "2.1.2" resolved "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz" @@ -3326,60 +3099,36 @@ neo-async@^2.6.2: resolved "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz" integrity sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw== -next-tick@^1.1.0: - version "1.1.0" - resolved "https://registry.npmjs.org/next-tick/-/next-tick-1.1.0.tgz" - integrity sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ== - -node-abi@^3.0.0, node-abi@^3.3.0: +node-abi@^3.3.0: version "3.46.0" resolved "https://registry.npmjs.org/node-abi/-/node-abi-3.46.0.tgz" integrity sha512-LXvP3AqTIrtvH/jllXjkNVbYifpRbt9ThTtymSMSuHmhugQLAWr99QQFTm+ZRht9ziUvdGOgB+esme1C6iE6Lg== dependencies: semver "^7.3.5" -node-gyp@^6.0.1: - version "6.1.0" - resolved "https://registry.npmjs.org/node-gyp/-/node-gyp-6.1.0.tgz" - integrity sha512-h4A2zDlOujeeaaTx06r4Vy+8MZ1679lU+wbCKDS4ZtvY2A37DESo37oejIw0mtmR3+rvNwts5B6Kpt1KrNYdNw== - dependencies: - env-paths "^2.2.0" - glob "^7.1.4" - graceful-fs "^4.2.2" - mkdirp "^0.5.1" - nopt "^4.0.1" - npmlog "^4.1.2" - request "^2.88.0" - rimraf "^2.6.3" - semver "^5.7.1" - tar "^4.4.12" - which "^1.3.1" - -node-int64@^0.4.0: - version "0.4.0" - resolved "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz" - integrity sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw== - -node-ninja@^1.0.1: - version "1.0.2" - resolved "https://registry.npmjs.org/node-ninja/-/node-ninja-1.0.2.tgz" - integrity sha512-wMtWsG2QZI1Z5V7GciX9OI2DVT0PuDRIDQfe3L3rJsQ1qN1Gm3QQhoNtb4PMRi7gq4ByvEIYtPwHC7YbEf5yxw== +node-gyp@^3.0.3: + version "3.8.0" + resolved "https://registry.npmjs.org/node-gyp/-/node-gyp-3.8.0.tgz" + integrity sha512-3g8lYefrRRzvGeSowdJKAKyks8oUpLEd/DyPV4eMhVlhJ0aNaZqIrNUIPuEWWTAoPqyFkfGrM67MC69baqn6vA== dependencies: fstream "^1.0.0" - glob "3 || 4 || 5 || 6 || 7" + glob "^7.0.3" graceful-fs "^4.1.2" - minimatch "3" mkdirp "^0.5.0" nopt "2 || 3" - npmlog "0 || 1 || 2" + npmlog "0 || 1 || 2 || 3 || 4" osenv "0" - path-array "^1.0.0" - request "2" + request "^2.87.0" rimraf "2" - semver "2.x || 3.x || 4 || 5" + semver "~5.3.0" tar "^2.0.0" which "1" +node-int64@^0.4.0: + version "0.4.0" + resolved "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz" + integrity sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw== + node-releases@^2.0.13: version "2.0.13" resolved "https://registry.npmjs.org/node-releases/-/node-releases-2.0.13.tgz" @@ -3397,26 +3146,11 @@ noop-logger@^0.1.0: dependencies: abbrev "1" -nopt@^4.0.1: - version "4.0.3" - resolved "https://registry.npmjs.org/nopt/-/nopt-4.0.3.tgz" - integrity sha512-CvaGwVMztSMJLOeXPrez7fyfObdZqNUK1cPAEzLHrTybIua9pMdmmPR5YwtfNftIOMv3DPUhFaxsZMNTQO20Kg== - dependencies: - abbrev "1" - osenv "^0.1.4" - normalize-path@^3.0.0: version "3.0.0" resolved "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz" integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== -npm-path@^2.0.2: - version "2.0.4" - resolved "https://registry.npmjs.org/npm-path/-/npm-path-2.0.4.tgz" - integrity sha512-IFsj0R9C7ZdR5cP+ET342q77uSRdtWOlWpih5eC+lu29tIDbNEgDbzgVJ5UFvYHWhxDZ5TFkJafFioO0pPQjCw== - dependencies: - which "^1.2.10" - npm-run-path@^4.0.1: version "4.0.1" resolved "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz" @@ -3424,25 +3158,7 @@ npm-run-path@^4.0.1: dependencies: path-key "^3.0.0" -npm-which@^3.0.1: - version "3.0.1" - resolved "https://registry.npmjs.org/npm-which/-/npm-which-3.0.1.tgz" - integrity sha512-CM8vMpeFQ7MAPin0U3wzDhSGV0hMHNwHU0wjo402IVizPDrs45jSfSuoC+wThevY88LQti8VvaAnqYAeVy3I1A== - dependencies: - commander "^2.9.0" - npm-path "^2.0.2" - which "^1.2.10" - -"npmlog@0 || 1 || 2": - version "2.0.4" - resolved "https://registry.npmjs.org/npmlog/-/npmlog-2.0.4.tgz" - integrity sha512-DaL6RTb8Qh4tMe2ttPT1qWccETy2Vi5/8p+htMpLBeXJTr2CAqnF5WQtSP2eFpvaNbhLZ5uilDb98mRm4Q+lZQ== - dependencies: - ansi "~0.3.1" - are-we-there-yet "~1.1.2" - gauge "~1.2.5" - -"npmlog@0 || 1 || 2 || 3 || 4", npmlog@^4.0.1, npmlog@^4.1.2: +"npmlog@0 || 1 || 2 || 3 || 4": version "4.1.2" resolved "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz" integrity sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg== @@ -3452,39 +3168,20 @@ npm-which@^3.0.1: gauge "~2.7.3" set-blocking "~2.0.0" -npmlog@^1.2.0: - version "1.2.1" - resolved "https://registry.npmjs.org/npmlog/-/npmlog-1.2.1.tgz" - integrity sha512-1J5KqSRvESP6XbjPaXt2H6qDzgizLTM7x0y1cXIjP2PpvdCqyNC7TO3cPRKsuYlElbi/DwkzRRdG2zpmE0IktQ== +npmlog@^2.0.0: + version "2.0.4" + resolved "https://registry.npmjs.org/npmlog/-/npmlog-2.0.4.tgz" + integrity sha512-DaL6RTb8Qh4tMe2ttPT1qWccETy2Vi5/8p+htMpLBeXJTr2CAqnF5WQtSP2eFpvaNbhLZ5uilDb98mRm4Q+lZQ== dependencies: - ansi "~0.3.0" - are-we-there-yet "~1.0.0" - gauge "~1.2.0" + ansi "~0.3.1" + are-we-there-yet "~1.1.2" + gauge "~1.2.5" number-is-nan@^1.0.0: version "1.0.1" resolved "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz" integrity sha512-4jbtZXNAsfZbAHiiqjLPBiCl16dES1zI4Hpzzxw61Tk+loF+sBDBKx1ICKKKwIqQ7M0mFn1TmkN7euSncWgHiQ== -nw-gyp@^3.6.3: - version "3.6.6" - resolved "https://registry.npmjs.org/nw-gyp/-/nw-gyp-3.6.6.tgz" - integrity sha512-FeMnpFQWtEEMJ1BrSfK3T62CjuxaNl0mNHqdrxFcIF5XQdC3gaZYW4n+77lQLk8PE3Upfknkl9VRo6gDKJIHuA== - dependencies: - fstream "^1.0.0" - glob "^7.0.3" - graceful-fs "^4.1.2" - minimatch "^3.0.2" - mkdirp "^0.5.0" - nopt "2 || 3" - npmlog "0 || 1 || 2 || 3 || 4" - osenv "0" - request "2" - rimraf "2" - semver "~5.3.0" - tar "^2.0.0" - which "1" - oauth-sign@~0.9.0: version "0.9.0" resolved "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz" @@ -3521,24 +3218,17 @@ optionator@^0.9.3: prelude-ls "^1.2.1" type-check "^0.4.0" -os-homedir@^1.0.0: +os-homedir@^1.0.0, os-homedir@^1.0.1: version "1.0.2" resolved "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz" integrity sha512-B5JU3cabzk8c67mRRd3ECmROafjYMXbuzlwtqdM8IbS8ktlTix8aFGb2bAGKrSRIlnfKwovGUUr72JUPyOb6kQ== -os-locale@^1.4.0: - version "1.4.0" - resolved "https://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz" - integrity sha512-PRT7ZORmwu2MEFt4/fv3Q+mEfN4zetKxufQrkShY2oGvUms9r8otu5HfdyIFHkYXjO7laNsoVGmM2MANfuTA8g== - dependencies: - lcid "^1.0.0" - os-tmpdir@^1.0.0: version "1.0.2" resolved "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz" integrity sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g== -osenv@0, osenv@^0.1.4: +osenv@0: version "0.1.5" resolved "https://registry.npmjs.org/osenv/-/osenv-0.1.5.tgz" integrity sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g== @@ -3596,13 +3286,6 @@ parse-json@^5.2.0: json-parse-even-better-errors "^2.3.0" lines-and-columns "^1.1.6" -path-array@^1.0.0: - version "1.0.1" - resolved "https://registry.npmjs.org/path-array/-/path-array-1.0.1.tgz" - integrity sha512-teWG2rJTJJZi2kINKOsHcdIuHP7jy3D7pAsVgdhxMq8kaL2RnS5sg7YTlrClMVCIItcVbPTPI6eMBEoNxYahLA== - dependencies: - array-index "^1.0.0" - path-exists@^4.0.0: version "4.0.0" resolved "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz" @@ -3673,31 +3356,27 @@ prebuild-install@^7.1.1: tar-fs "^2.0.0" tunnel-agent "^0.6.0" -prebuild@^11.0.4: - version "11.0.4" - resolved "https://registry.npmjs.org/prebuild/-/prebuild-11.0.4.tgz" - integrity sha512-n23Rzql2m8ldFpwcFyouGUrg9VByEF2IroEZlNvPLiQwTJWucTNxIaZEoyVe2AxPRzQb6Eph2ytObxVWm4FA7Q== +prebuild@^3.0.3: + version "3.0.3" + resolved "https://registry.npmjs.org/prebuild/-/prebuild-3.0.3.tgz" + integrity sha512-QGZMWEfs2zjsQ1Y9Lv4dwZ4EoE93E5UDxHKGc1iSBW8TvT4nM6Dc2DbhInDNlDJ/oGtFpoLwkQKivaoBXs+40g== dependencies: - cmake-js "~5.2.0" - detect-libc "^2.0.0" - each-series-async "^1.0.1" - execspawn "^1.0.1" - ghreleases "^3.0.2" + async "^1.4.0" + expand-template "^1.0.0" + ghreleases "^1.0.2" github-from-package "0.0.0" - glob "^7.1.6" minimist "^1.1.2" mkdirp "^0.5.1" - napi-build-utils "^1.0.1" - node-abi "^3.0.0" - node-gyp "^6.0.1" - node-ninja "^1.0.1" + node-gyp "^3.0.3" noop-logger "^0.1.0" - npm-which "^3.0.1" - npmlog "^4.0.1" - nw-gyp "^3.6.3" + npmlog "^2.0.0" + os-homedir "^1.0.1" + pump "^1.0.0" rc "^1.0.3" - run-waterfall "^1.1.6" - tar-stream "^2.1.0" + simple-get "^1.4.2" + tar-fs "^1.7.0" + tar-stream "^1.2.1" + xtend "^4.0.1" prelude-ls@^1.2.1: version "1.2.1" @@ -3718,11 +3397,6 @@ pretty-format@^29.0.0, pretty-format@^29.6.2: ansi-styles "^5.0.0" react-is "^18.0.0" -process-nextick-args@~1.0.6: - version "1.0.7" - resolved "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz" - integrity sha512-yN0WQmuCX63LP/TMvAg31nvT6m4vDqJEiiv2CAZqWOGNWutc9DfDk1NPYYmKUFmaVM2UwDowH4u5AHWYP/jxKw== - process-nextick-args@~2.0.0: version "2.0.1" resolved "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz" @@ -3741,6 +3415,14 @@ psl@^1.1.33: resolved "https://registry.yarnpkg.com/psl/-/psl-1.9.0.tgz#d0df2a137f00794565fcaf3b2c00cd09f8d5a5a7" integrity sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag== +pump@^1.0.0: + version "1.0.3" + resolved "https://registry.npmjs.org/pump/-/pump-1.0.3.tgz" + integrity sha512-8k0JupWme55+9tCVE+FS5ULT3K6AbgqrGa58lTT49RpyfwwcGedHqaC5LlQNdEAumn/wFsu6aPwkuPMioy8kqw== + dependencies: + end-of-stream "^1.1.0" + once "^1.3.1" + pump@^3.0.0: version "3.0.0" resolved "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz" @@ -3796,7 +3478,7 @@ react-is@^18.0.0: resolved "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz" integrity sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w== -"readable-stream@>=1.0.33-1 <1.1.0-0", readable-stream@~1.0.26-2: +"readable-stream@>=1.0.33-1 <1.1.0-0": version "1.0.34" resolved "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz" integrity sha512-ok1qVCJuRkNmvebYikljxJA/UEsKwLl2nI1OmaqAu4/UE+h0wKCHok4XkL/gvi39OacXvw59RJUOFUkDib2rHg== @@ -3806,7 +3488,7 @@ react-is@^18.0.0: isarray "0.0.1" string_decoder "~0.10.x" -"readable-stream@^2.0.0 || ^1.1.13", readable-stream@^2.0.6: +readable-stream@^2.0.6, readable-stream@^2.3.0, readable-stream@^2.3.5: version "2.3.8" resolved "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz" integrity sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA== @@ -3819,19 +3501,6 @@ react-is@^18.0.0: string_decoder "~1.1.1" util-deprecate "~1.0.1" -readable-stream@^2.0.2, readable-stream@~2.1.5: - version "2.1.5" - resolved "https://registry.npmjs.org/readable-stream/-/readable-stream-2.1.5.tgz" - integrity sha512-NkXT2AER7VKXeXtJNSaWLpWIhmtSE3K2PguaLEeWr4JILghcIKqoLt1A3wHrnpDC5+ekf8gfk1GKWkFXe4odMw== - dependencies: - buffer-shims "^1.0.0" - core-util-is "~1.0.0" - inherits "~2.0.1" - isarray "~1.0.0" - process-nextick-args "~1.0.6" - string_decoder "~0.10.x" - util-deprecate "~1.0.1" - readable-stream@^3.0.1, readable-stream@^3.1.1, readable-stream@^3.4.0: version "3.6.2" resolved "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz" @@ -3863,7 +3532,7 @@ reflect-metadata@^0.1.13: resolved "https://registry.npmjs.org/reflect-metadata/-/reflect-metadata-0.1.13.tgz" integrity sha512-Ts1Y/anZELhSsjMcU605fU9RE4Oi3p5ORujwbIKXfWa+0Zxs510Qrmrce5/Jowq3cHSZSJqBjypxmHarc+vEWg== -request@2, request@^2.54.0, request@^2.88.0: +request@^2.87.0: version "2.88.2" resolved "https://registry.npmjs.org/request/-/request-2.88.2.tgz" integrity sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw== @@ -3935,7 +3604,7 @@ reusify@^1.0.4: resolved "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz" integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== -rimraf@2, rimraf@^2.6.3: +rimraf@2: version "2.7.1" resolved "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz" integrity sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w== @@ -3949,11 +3618,6 @@ rimraf@^3.0.2: dependencies: glob "^7.1.3" -rsvp@^3.0.13: - version "3.6.2" - resolved "https://registry.npmjs.org/rsvp/-/rsvp-3.6.2.tgz" - integrity sha512-OfWGQTb9vnwRjwtA2QwpG2ICclHC3pgXZO5xt8H2EfgDquO0qVdSb5T88L4qJVAEugbS56pAuV4XZM58UX8ulw== - run-parallel@^1.1.9: version "1.2.0" resolved "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz" @@ -3961,17 +3625,12 @@ run-parallel@^1.1.9: dependencies: queue-microtask "^1.2.2" -run-waterfall@^1.1.6: - version "1.1.7" - resolved "https://registry.npmjs.org/run-waterfall/-/run-waterfall-1.1.7.tgz" - integrity sha512-iFPgh7SatHXOG1ClcpdwHI63geV3Hc/iL6crGSyBlH2PY7Rm/za+zoKz6FfY/Qlw5K7JwSol8pseO8fN6CMhhQ== - safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.2, safe-buffer@^5.2.1, safe-buffer@~5.2.0: version "5.2.1" resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz" integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== -safe-buffer@~5.1.0, safe-buffer@~5.1.1: +safe-buffer@^5.1.1, safe-buffer@~5.1.0, safe-buffer@~5.1.1: version "5.1.2" resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz" integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== @@ -3990,7 +3649,7 @@ schema-utils@^3.1.1, schema-utils@^3.2.0: ajv "^6.12.5" ajv-keywords "^3.5.2" -"semver@2.x || 3.x || 4 || 5", semver@^4.3.3, semver@^5.0.3, semver@^5.7.1, semver@^6.3.0, semver@^6.3.1, semver@^7.3.5, semver@^7.3.7, semver@^7.5.2, semver@^7.5.3, semver@~5.3.0: +semver@^6.3.0, semver@^6.3.1, semver@^7.3.5, semver@^7.3.7, semver@^7.5.2, semver@^7.5.3, semver@~5.3.0: version "7.5.4" resolved "https://registry.yarnpkg.com/semver/-/semver-7.5.4.tgz#483986ec4ed38e1c6c48c34894a9182dbff68a6e" integrity sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA== @@ -4009,11 +3668,6 @@ set-blocking@~2.0.0: resolved "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz" integrity sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw== -setimmediate@~1.0.4: - version "1.0.5" - resolved "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz" - integrity sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA== - shallow-clone@^3.0.0: version "3.0.1" resolved "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz" @@ -4053,9 +3707,9 @@ simple-concat@^1.0.0: resolved "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz" integrity sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q== -simple-get@^2.8.2, simple-get@^4.0.0: +simple-get@^1.4.2, simple-get@^2.8.2, simple-get@^4.0.0: version "2.8.2" - resolved "https://registry.yarnpkg.com/simple-get/-/simple-get-2.8.2.tgz#5708fb0919d440657326cd5fe7d2599d07705019" + resolved "https://registry.npmjs.org/simple-get/-/simple-get-2.8.2.tgz" integrity sha512-Ijd/rV5o+mSBBs4F/x9oDPtTx9Zb6X9brmnXvMW4J7IR15ngi9q5xxqWBKU744jTZiaXtxaPL7uHG6vtN8kUkw== dependencies: decompress-response "^3.3.0" @@ -4085,13 +3739,6 @@ source-map-support@0.5.13: buffer-from "^1.0.0" source-map "^0.6.0" -source-map-support@~0.2.8: - version "0.2.10" - resolved "https://registry.npmjs.org/source-map-support/-/source-map-support-0.2.10.tgz" - integrity sha512-gGKOSat73z0V8wBKo9AGxZZyekczBireh1hHktbt+kb9acsCB5OfVCF2DCWlztcQ3r5oNN7f2BL0B2xOcoJ/DQ== - dependencies: - source-map "0.1.32" - source-map-support@~0.5.20: version "0.5.21" resolved "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz" @@ -4100,23 +3747,11 @@ source-map-support@~0.5.20: buffer-from "^1.0.0" source-map "^0.6.0" -source-map@0.1.32: - version "0.1.32" - resolved "https://registry.npmjs.org/source-map/-/source-map-0.1.32.tgz" - integrity sha512-htQyLrrRLkQ87Zfrir4/yN+vAUd6DNjVayEjTSHXu29AYQJw57I4/xEL/M6p6E/woPNJwvZt6rVlzc7gFEJccQ== - dependencies: - amdefine ">=0.0.4" - source-map@^0.6.0, source-map@^0.6.1: version "0.6.1" resolved "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz" integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== -splitargs@0: - version "0.0.7" - resolved "https://registry.npmjs.org/splitargs/-/splitargs-0.0.7.tgz" - integrity sha512-UUFYD2oWbNwULH6WoVtLUOw8ch586B+HUqcsAjjjeoBQAM1bD4wZRXu01koaxyd8UeYpybWqW4h+lO1Okv40Tg== - sprintf-js@~1.0.2: version "1.0.3" resolved "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz" @@ -4254,6 +3889,16 @@ tapable@^2.1.1, tapable@^2.2.0: resolved "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz" integrity sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ== +tar-fs@^1.7.0: + version "1.16.3" + resolved "https://registry.npmjs.org/tar-fs/-/tar-fs-1.16.3.tgz" + integrity sha512-NvCeXpYx7OsmOh8zIOP/ebG55zZmxLE0etfWRbWok+q2Qo8x/vOR/IJT1taADXPe+jsiu9axDb3X4B+iIgNlKw== + dependencies: + chownr "^1.0.1" + mkdirp "^0.5.1" + pump "^1.0.0" + tar-stream "^1.1.2" + tar-fs@^2.0.0: version "2.1.1" resolved "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.1.tgz" @@ -4264,7 +3909,20 @@ tar-fs@^2.0.0: pump "^3.0.0" tar-stream "^2.1.4" -tar-stream@^2.1.0, tar-stream@^2.1.4: +tar-stream@^1.1.2, tar-stream@^1.2.1: + version "1.6.2" + resolved "https://registry.npmjs.org/tar-stream/-/tar-stream-1.6.2.tgz" + integrity sha512-rzS0heiNf8Xn7/mpdSVVSMAWAoy9bfb1WOTYC78Z0UQKeKa/CWS8FOq0lKGNa8DWKAn9gxjCvMLYc5PGXYlK2A== + dependencies: + bl "^1.0.0" + buffer-alloc "^1.2.0" + end-of-stream "^1.0.0" + fs-constants "^1.0.0" + readable-stream "^2.3.0" + to-buffer "^1.1.1" + xtend "^4.0.0" + +tar-stream@^2.1.4: version "2.2.0" resolved "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz" integrity sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ== @@ -4275,7 +3933,7 @@ tar-stream@^2.1.0, tar-stream@^2.1.4: inherits "^2.0.3" readable-stream "^3.1.1" -tar@^2.0.0, tar@^4, tar@^4.4.12, tar@^4.4.19: +tar@^2.0.0, tar@^4.4.19: version "4.4.19" resolved "https://registry.npmjs.org/tar/-/tar-4.4.19.tgz" integrity sha512-a20gEsvHnWe0ygBY8JbxoM4w3SJdhc7ZAuxkLqh+nvNQN2IOt0B5lLgM490X5Hl8FF0dl0tOf2ewFYAlIFgzVA== @@ -4336,6 +3994,11 @@ tmpl@1.0.5: resolved "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz" integrity sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw== +to-buffer@^1.1.1: + version "1.1.1" + resolved "https://registry.npmjs.org/to-buffer/-/to-buffer-1.1.1.tgz" + integrity sha512-lx9B5iv7msuFYE3dytT+KE5tap+rNYw+K4jVkb9R/asAb+pbBSM17jtunHplhBe6RRJdZx3Pn2Jph24O32mOVg== + to-fast-properties@^2.0.0: version "2.0.0" resolved "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz" @@ -4358,22 +4021,6 @@ tough-cookie@^4.1.3, tough-cookie@~2.5.0: universalify "^0.2.0" url-parse "^1.5.3" -traceur@0.0.x: - version "0.0.111" - resolved "https://registry.npmjs.org/traceur/-/traceur-0.0.111.tgz" - integrity sha512-Zy0NCrl3+k1VZvDrZGQJHjLM4Hwz7XHSedhVTdsbV3RNWVtgw/GUP44Rl5WqqcctLkzyQ60eTU2jxfLrlrjWZQ== - dependencies: - commander "2.9.x" - glob "5.0.x" - rsvp "^3.0.13" - semver "^4.3.3" - source-map-support "~0.2.8" - -"traverse@>=0.3.0 <0.4": - version "0.3.9" - resolved "https://registry.npmjs.org/traverse/-/traverse-0.3.9.tgz" - integrity sha512-iawgk0hLP3SxGKDfnDJf8wTz4p2qImnyihM5Hh/sGvQ3K37dPi/w8sRhdNIxYA1TwFwc5mDhIJq+O0RsvXBKdQ== - ts-jest@^29.0.5: version "29.1.1" resolved "https://registry.npmjs.org/ts-jest/-/ts-jest-29.1.1.tgz" @@ -4434,16 +4081,6 @@ type-fest@^0.21.3: resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz" integrity sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w== -type@^1.0.1: - version "1.2.0" - resolved "https://registry.npmjs.org/type/-/type-1.2.0.tgz" - integrity sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg== - -type@^2.7.2: - version "2.7.2" - resolved "https://registry.npmjs.org/type/-/type-2.7.2.tgz" - integrity sha512-dzlvlNlt6AXU7EBSfpAscydQ7gXB+pPGsPnfJnZpiNJBDj7IaJzQlBZYGdEi4R9HmPdBv2XmWJ6YUtoTa7lmCw== - typedoc-plugin-markdown@^3.14.0: version "3.15.4" resolved "https://registry.npmjs.org/typedoc-plugin-markdown/-/typedoc-plugin-markdown-3.15.4.tgz" @@ -4471,31 +4108,11 @@ uglify-js@^3.1.4: resolved "https://registry.npmjs.org/uglify-js/-/uglify-js-3.17.4.tgz" integrity sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g== -universalify@^0.1.0: - version "0.1.2" - resolved "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz" - integrity sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg== - universalify@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.2.0.tgz#6451760566fa857534745ab1dde952d1b1761be0" integrity sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg== -unzipper@^0.8.13: - version "0.8.14" - resolved "https://registry.npmjs.org/unzipper/-/unzipper-0.8.14.tgz" - integrity sha512-8rFtE7EP5ssOwGpN2dt1Q4njl0N1hUXJ7sSPz0leU2hRdq6+pra57z4YPBlVqm40vcgv6ooKZEAx48fMTv9x4w== - dependencies: - big-integer "^1.6.17" - binary "~0.3.0" - bluebird "~3.4.1" - buffer-indexof-polyfill "~1.0.0" - duplexer2 "~0.1.4" - fstream "~1.0.10" - listenercount "~1.0.1" - readable-stream "~2.1.5" - setimmediate "~1.0.4" - update-browserslist-db@^1.0.11: version "1.0.11" resolved "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.11.tgz" @@ -4511,11 +4128,6 @@ uri-js@^4.2.2: dependencies: punycode "^2.1.0" -url-join@0: - version "0.0.1" - resolved "https://registry.npmjs.org/url-join/-/url-join-0.0.1.tgz" - integrity sha512-H6dnQ/yPAAVzMQRvEvyz01hhfQL5qRWSEt7BX8t9DqnPw9BjMb64fjIRq76Uvf1hkHp+mTZvEVJ5guXOT0Xqaw== - url-parse@^1.5.3: version "1.5.10" resolved "https://registry.yarnpkg.com/url-parse/-/url-parse-1.5.10.tgz#9d3c2f736c1d75dd3bd2be507dcc111f1e2ea9c1" @@ -4534,11 +4146,6 @@ util-deprecate@^1.0.1, util-deprecate@~1.0.1: resolved "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz" integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw== -util-extend@^1.0.1: - version "1.0.3" - resolved "https://registry.npmjs.org/util-extend/-/util-extend-1.0.3.tgz" - integrity sha512-mLs5zAK+ctllYBj+iAQvlDCwoxU/WDOUaJkcFudeiAX6OajC6BKXJUa9a+tbtkC11dz2Ufb7h0lyvIOVn4LADA== - uuid@^3.3.2: version "3.4.0" resolved "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz" @@ -4649,7 +4256,7 @@ webpack@^5.88.2: watchpack "^2.4.0" webpack-sources "^3.2.3" -which@1, which@^1.0.9, which@^1.2.10, which@^1.3.1: +which@1: version "1.3.1" resolved "https://registry.npmjs.org/which/-/which-1.3.1.tgz" integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ== @@ -4675,11 +4282,6 @@ wildcard@^2.0.0: resolved "https://registry.npmjs.org/wildcard/-/wildcard-2.0.1.tgz" integrity sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ== -window-size@^0.1.4: - version "0.1.4" - resolved "https://registry.npmjs.org/window-size/-/window-size-0.1.4.tgz" - integrity sha512-2thx4pB0cV3h+Bw7QmMXcEbdmOzv9t0HFplJH/Lz6yu60hXYy5RT8rUu+wlIreVxWsGN20mo+MHeCSfUpQBwPw== - word-wrap@^1.2.4: version "1.2.5" resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.5.tgz#d2c45c6dd4fbce621a66f136cbe328afd0410b34" @@ -4690,14 +4292,6 @@ wordwrap@^1.0.0: resolved "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz" integrity sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q== -wrap-ansi@^2.0.0: - version "2.1.0" - resolved "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz" - integrity sha512-vAaEaDM946gbNpH5pLVNR+vX2ht6n0Bt3GXwVB1AuAqZosOvHNF3P7wDnh8KLkSqgUh0uh77le7Owgoz+Z9XBw== - dependencies: - string-width "^1.0.1" - strip-ansi "^3.0.1" - wrap-ansi@^7.0.0: version "7.0.0" resolved "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz" @@ -4720,16 +4314,11 @@ write-file-atomic@^4.0.2: imurmurhash "^0.1.4" signal-exit "^3.0.7" -"xtend@>=4.0.0 <4.1.0-0", xtend@~4.0.1: +"xtend@>=4.0.0 <4.1.0-0", xtend@^4.0.0, xtend@^4.0.1, xtend@~4.0.0, xtend@~4.0.1: version "4.0.2" resolved "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz" integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ== -y18n@^3.2.0: - version "3.2.2" - resolved "https://registry.npmjs.org/y18n/-/y18n-3.2.2.tgz" - integrity sha512-uGZHXkHnhF0XeeAPgnKfPv1bgKAYyVvmNL1xlKsPYZPaIHxGti2hHqvOCQv71XMsLxu1QjergkqogUnms5D3YQ== - y18n@^5.0.5: version "5.0.8" resolved "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz" @@ -4763,19 +4352,6 @@ yargs@^17.3.1: y18n "^5.0.5" yargs-parser "^21.1.1" -yargs@^3.6.0: - version "3.32.0" - resolved "https://registry.npmjs.org/yargs/-/yargs-3.32.0.tgz" - integrity sha512-ONJZiimStfZzhKamYvR/xvmgW3uEkAUFSP91y2caTEPhzF6uP2JfPiVZcq66b/YR0C3uitxSV7+T1x8p5bkmMg== - dependencies: - camelcase "^2.0.1" - cliui "^3.0.3" - decamelize "^1.1.1" - os-locale "^1.4.0" - string-width "^1.0.1" - window-size "^0.1.4" - y18n "^3.2.0" - yocto-queue@^0.1.0: version "0.1.0" resolved "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz" diff --git a/bindings/package-lock.json b/bindings/package-lock.json new file mode 100644 index 0000000000..01602fd1b2 --- /dev/null +++ b/bindings/package-lock.json @@ -0,0 +1,6 @@ +{ + "name": "bindings", + "lockfileVersion": 2, + "requires": true, + "packages": {} +} diff --git a/bindings/python/Cargo.toml b/bindings/python/Cargo.toml index e955aab154..aacc47184b 100644 --- a/bindings/python/Cargo.toml +++ b/bindings/python/Cargo.toml @@ -29,7 +29,7 @@ iota-sdk-bindings-core = { path = "../core", default-features = false, features futures = { version = "0.3.28", default-features = false } once_cell = { version = "1.18.0", default-features = false } -pyo3 = { version = "0.19.2", default-features = false, features = [ +pyo3 = { version = "0.20.0", default-features = false, features = [ "macros", "extension-module", ] } diff --git a/bindings/wasm/package-lock.json b/bindings/wasm/package-lock.json index ddd857d8d6..7284382806 100644 --- a/bindings/wasm/package-lock.json +++ b/bindings/wasm/package-lock.json @@ -1,12 +1,12 @@ { "name": "@iota/sdk-wasm", - "version": "1.0.1", + "version": "1.1.1", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "@iota/sdk-wasm", - "version": "1.0.1", + "version": "1.1.1", "license": "Apache-2.0", "dependencies": { "class-transformer": "^0.5.1", @@ -30,7 +30,7 @@ "prettier": "^2.7.1", "ts-jest": "^27.1.5", "ts-node": "^10.9.1", - "typedoc": "^0.23.9", + "typedoc": "^0.24.0", "typedoc-plugin-markdown": "^3.13.4", "typescript": "^4.7.4", "wasm-opt": "^1.3.0" @@ -65,17 +65,89 @@ } }, "node_modules/@babel/code-frame": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.22.5.tgz", - "integrity": "sha512-Xmwn266vad+6DAqEB2A6V/CcZVp62BbwVmcOJc2RPuwih1kw02TjQvWVWlcKGbBPd+8/0V5DEkOcizRGYsspYQ==", + "version": "7.22.13", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.22.13.tgz", + "integrity": "sha512-XktuhWlJ5g+3TJXc5upd9Ks1HutSArik6jf2eAjYFyIOf4ej3RN+184cZbzDvbPnuTJIUhPKKJE3cIsYTiAT3w==", "dev": true, "dependencies": { - "@babel/highlight": "^7.22.5" + "@babel/highlight": "^7.22.13", + "chalk": "^2.4.2" }, "engines": { "node": ">=6.9.0" } }, + "node_modules/@babel/code-frame/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/code-frame/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/code-frame/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/@babel/code-frame/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "dev": true + }, + "node_modules/@babel/code-frame/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/@babel/code-frame/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/code-frame/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, "node_modules/@babel/compat-data": { "version": "7.22.9", "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.22.9.tgz", @@ -125,12 +197,12 @@ } }, "node_modules/@babel/generator": { - "version": "7.22.9", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.22.9.tgz", - "integrity": "sha512-KtLMbmicyuK2Ak/FTCJVbDnkN1SlT8/kceFTiuDiiRUUSMnHMidxSCdG4ndkTOHHpoomWe/4xkvHkEOncwjYIw==", + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.23.0.tgz", + "integrity": "sha512-lN85QRR+5IbYrMWM6Y4pE/noaQtg4pNiqeNGX60eqOfo6gtEj6uw/JagelB8vVztSd7R6M5n1+PQkDbHbBRU4g==", "dev": true, "dependencies": { - "@babel/types": "^7.22.5", + "@babel/types": "^7.23.0", "@jridgewell/gen-mapping": "^0.3.2", "@jridgewell/trace-mapping": "^0.3.17", "jsesc": "^2.5.1" @@ -168,22 +240,22 @@ } }, "node_modules/@babel/helper-environment-visitor": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.5.tgz", - "integrity": "sha512-XGmhECfVA/5sAt+H+xpSg0mfrHq6FzNr9Oxh7PSEBBRUb/mL7Kz3NICXb194rCqAEdxkhPT1a88teizAFyvk8Q==", + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz", + "integrity": "sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==", "dev": true, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-function-name": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.22.5.tgz", - "integrity": "sha512-wtHSq6jMRE3uF2otvfuD3DIvVhOsSNshQl0Qrd7qC9oQJzHvOL4qQXlQn2916+CXGywIjpGuIkoyZRRxHPiNQQ==", + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz", + "integrity": "sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==", "dev": true, "dependencies": { - "@babel/template": "^7.22.5", - "@babel/types": "^7.22.5" + "@babel/template": "^7.22.15", + "@babel/types": "^7.23.0" }, "engines": { "node": ">=6.9.0" @@ -275,9 +347,9 @@ } }, "node_modules/@babel/helper-validator-identifier": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.5.tgz", - "integrity": "sha512-aJXu+6lErq8ltp+JhkJUfk1MTGyuA4v7f3pA+BJ5HLfNC6nAQ0Cpi9uOquUj8Hehg0aUiHzWQbOVJGao6ztBAQ==", + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz", + "integrity": "sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==", "dev": true, "engines": { "node": ">=6.9.0" @@ -307,13 +379,13 @@ } }, "node_modules/@babel/highlight": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.22.5.tgz", - "integrity": "sha512-BSKlD1hgnedS5XRnGOljZawtag7H1yPfQp0tdNJCHoH6AZ+Pcm9VvkrK59/Yy593Ypg0zMxH2BxD1VPYUQ7UIw==", + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.22.20.tgz", + "integrity": "sha512-dkdMCN3py0+ksCgYmGG8jKeGA/8Tk+gJwSYYlFGxG5lmhfKNoAy004YpLxpS1W2J8m/EK2Ew+yOs9pVRwO89mg==", "dev": true, "dependencies": { - "@babel/helper-validator-identifier": "^7.22.5", - "chalk": "^2.0.0", + "@babel/helper-validator-identifier": "^7.22.20", + "chalk": "^2.4.2", "js-tokens": "^4.0.0" }, "engines": { @@ -392,9 +464,9 @@ } }, "node_modules/@babel/parser": { - "version": "7.22.7", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.22.7.tgz", - "integrity": "sha512-7NF8pOkHP5o2vpmGgNGcfAeCvOYhGLyA3Z4eBQkT1RJlWu47n63bCs93QfJ2hIAFCil7L5P2IWhs1oToVgrL0Q==", + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.23.0.tgz", + "integrity": "sha512-vvPKKdMemU85V9WE/l5wZEmImpCtLqbnTvqDS2U1fJ96KrxoW7KrXhNsNCblQlg8Ck4b85yxdTyelsMUgFUXiw==", "dev": true, "bin": { "parser": "bin/babel-parser.js" @@ -566,33 +638,33 @@ } }, "node_modules/@babel/template": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.5.tgz", - "integrity": "sha512-X7yV7eiwAxdj9k94NEylvbVHLiVG1nvzCV2EAowhxLTwODV1jl9UzZ48leOC0sH7OnuHrIkllaBgneUykIcZaw==", + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.15.tgz", + "integrity": "sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w==", "dev": true, "dependencies": { - "@babel/code-frame": "^7.22.5", - "@babel/parser": "^7.22.5", - "@babel/types": "^7.22.5" + "@babel/code-frame": "^7.22.13", + "@babel/parser": "^7.22.15", + "@babel/types": "^7.22.15" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/traverse": { - "version": "7.22.8", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.22.8.tgz", - "integrity": "sha512-y6LPR+wpM2I3qJrsheCTwhIinzkETbplIgPBbwvqPKc+uljeA5gP+3nP8irdYt1mjQaDnlIcG+dw8OjAco4GXw==", + "version": "7.23.2", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.23.2.tgz", + "integrity": "sha512-azpe59SQ48qG6nu2CzcMLbxUudtN+dOM9kDbUqGq3HXUJRlo7i8fvPoxQUzYgLZ4cMVmuZgm8vvBpNeRhd6XSw==", "dev": true, "dependencies": { - "@babel/code-frame": "^7.22.5", - "@babel/generator": "^7.22.7", - "@babel/helper-environment-visitor": "^7.22.5", - "@babel/helper-function-name": "^7.22.5", + "@babel/code-frame": "^7.22.13", + "@babel/generator": "^7.23.0", + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-function-name": "^7.23.0", "@babel/helper-hoist-variables": "^7.22.5", "@babel/helper-split-export-declaration": "^7.22.6", - "@babel/parser": "^7.22.7", - "@babel/types": "^7.22.5", + "@babel/parser": "^7.23.0", + "@babel/types": "^7.23.0", "debug": "^4.1.0", "globals": "^11.1.0" }, @@ -610,13 +682,13 @@ } }, "node_modules/@babel/types": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.22.5.tgz", - "integrity": "sha512-zo3MIHGOkPOfoRXitsgHLjEXmlDaD/5KU1Uzuc9GNiZPhSqVxVRtxuPaSBZDsYZ9qV88AjtMtWW7ww98loJ9KA==", + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.23.0.tgz", + "integrity": "sha512-0oIyUfKoI3mSqMvsxBdclDwxXKXAUA8v/apZbc+iSyARYou1o8ZGDxbUYyLFoW2arqS2jDGqJuZvv1d/io1axg==", "dev": true, "dependencies": { "@babel/helper-string-parser": "^7.22.5", - "@babel/helper-validator-identifier": "^7.22.5", + "@babel/helper-validator-identifier": "^7.22.20", "to-fast-properties": "^2.0.0" }, "engines": { @@ -6389,14 +6461,14 @@ } }, "node_modules/typedoc": { - "version": "0.23.28", - "resolved": "https://registry.npmjs.org/typedoc/-/typedoc-0.23.28.tgz", - "integrity": "sha512-9x1+hZWTHEQcGoP7qFmlo4unUoVJLB0H/8vfO/7wqTnZxg4kPuji9y3uRzEu0ZKez63OJAUmiGhUrtukC6Uj3w==", + "version": "0.24.8", + "resolved": "https://registry.npmjs.org/typedoc/-/typedoc-0.24.8.tgz", + "integrity": "sha512-ahJ6Cpcvxwaxfu4KtjA8qZNqS43wYt6JL27wYiIgl1vd38WW/KWX11YuAeZhuz9v+ttrutSsgK+XO1CjL1kA3w==", "dev": true, "dependencies": { "lunr": "^2.3.9", - "marked": "^4.2.12", - "minimatch": "^7.1.3", + "marked": "^4.3.0", + "minimatch": "^9.0.0", "shiki": "^0.14.1" }, "bin": { @@ -6406,7 +6478,7 @@ "node": ">= 14.14" }, "peerDependencies": { - "typescript": "4.6.x || 4.7.x || 4.8.x || 4.9.x || 5.0.x" + "typescript": "4.6.x || 4.7.x || 4.8.x || 4.9.x || 5.0.x || 5.1.x" } }, "node_modules/typedoc-plugin-markdown": { @@ -6431,15 +6503,15 @@ } }, "node_modules/typedoc/node_modules/minimatch": { - "version": "7.4.6", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-7.4.6.tgz", - "integrity": "sha512-sBz8G/YjVniEz6lKPNpKxXwazJe4c19fEfV2GDMX6AjFz+MX9uDWIZW8XreVhkFW3fkIdTv/gxWr/Kks5FFAVw==", + "version": "9.0.3", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", + "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", "dev": true, "dependencies": { "brace-expansion": "^2.0.1" }, "engines": { - "node": ">=10" + "node": ">=16 || 14 >=14.17" }, "funding": { "url": "https://github.com/sponsors/isaacs" @@ -6915,12 +6987,71 @@ } }, "@babel/code-frame": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.22.5.tgz", - "integrity": "sha512-Xmwn266vad+6DAqEB2A6V/CcZVp62BbwVmcOJc2RPuwih1kw02TjQvWVWlcKGbBPd+8/0V5DEkOcizRGYsspYQ==", + "version": "7.22.13", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.22.13.tgz", + "integrity": "sha512-XktuhWlJ5g+3TJXc5upd9Ks1HutSArik6jf2eAjYFyIOf4ej3RN+184cZbzDvbPnuTJIUhPKKJE3cIsYTiAT3w==", "dev": true, "requires": { - "@babel/highlight": "^7.22.5" + "@babel/highlight": "^7.22.13", + "chalk": "^2.4.2" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "dev": true + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } } }, "@babel/compat-data": { @@ -6961,12 +7092,12 @@ } }, "@babel/generator": { - "version": "7.22.9", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.22.9.tgz", - "integrity": "sha512-KtLMbmicyuK2Ak/FTCJVbDnkN1SlT8/kceFTiuDiiRUUSMnHMidxSCdG4ndkTOHHpoomWe/4xkvHkEOncwjYIw==", + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.23.0.tgz", + "integrity": "sha512-lN85QRR+5IbYrMWM6Y4pE/noaQtg4pNiqeNGX60eqOfo6gtEj6uw/JagelB8vVztSd7R6M5n1+PQkDbHbBRU4g==", "dev": true, "requires": { - "@babel/types": "^7.22.5", + "@babel/types": "^7.23.0", "@jridgewell/gen-mapping": "^0.3.2", "@jridgewell/trace-mapping": "^0.3.17", "jsesc": "^2.5.1" @@ -6994,19 +7125,19 @@ } }, "@babel/helper-environment-visitor": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.5.tgz", - "integrity": "sha512-XGmhECfVA/5sAt+H+xpSg0mfrHq6FzNr9Oxh7PSEBBRUb/mL7Kz3NICXb194rCqAEdxkhPT1a88teizAFyvk8Q==", + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz", + "integrity": "sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==", "dev": true }, "@babel/helper-function-name": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.22.5.tgz", - "integrity": "sha512-wtHSq6jMRE3uF2otvfuD3DIvVhOsSNshQl0Qrd7qC9oQJzHvOL4qQXlQn2916+CXGywIjpGuIkoyZRRxHPiNQQ==", + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz", + "integrity": "sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==", "dev": true, "requires": { - "@babel/template": "^7.22.5", - "@babel/types": "^7.22.5" + "@babel/template": "^7.22.15", + "@babel/types": "^7.23.0" } }, "@babel/helper-hoist-variables": { @@ -7071,9 +7202,9 @@ "dev": true }, "@babel/helper-validator-identifier": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.5.tgz", - "integrity": "sha512-aJXu+6lErq8ltp+JhkJUfk1MTGyuA4v7f3pA+BJ5HLfNC6nAQ0Cpi9uOquUj8Hehg0aUiHzWQbOVJGao6ztBAQ==", + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz", + "integrity": "sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==", "dev": true }, "@babel/helper-validator-option": { @@ -7094,13 +7225,13 @@ } }, "@babel/highlight": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.22.5.tgz", - "integrity": "sha512-BSKlD1hgnedS5XRnGOljZawtag7H1yPfQp0tdNJCHoH6AZ+Pcm9VvkrK59/Yy593Ypg0zMxH2BxD1VPYUQ7UIw==", + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.22.20.tgz", + "integrity": "sha512-dkdMCN3py0+ksCgYmGG8jKeGA/8Tk+gJwSYYlFGxG5lmhfKNoAy004YpLxpS1W2J8m/EK2Ew+yOs9pVRwO89mg==", "dev": true, "requires": { - "@babel/helper-validator-identifier": "^7.22.5", - "chalk": "^2.0.0", + "@babel/helper-validator-identifier": "^7.22.20", + "chalk": "^2.4.2", "js-tokens": "^4.0.0" }, "dependencies": { @@ -7163,9 +7294,9 @@ } }, "@babel/parser": { - "version": "7.22.7", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.22.7.tgz", - "integrity": "sha512-7NF8pOkHP5o2vpmGgNGcfAeCvOYhGLyA3Z4eBQkT1RJlWu47n63bCs93QfJ2hIAFCil7L5P2IWhs1oToVgrL0Q==", + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.23.0.tgz", + "integrity": "sha512-vvPKKdMemU85V9WE/l5wZEmImpCtLqbnTvqDS2U1fJ96KrxoW7KrXhNsNCblQlg8Ck4b85yxdTyelsMUgFUXiw==", "dev": true }, "@babel/plugin-syntax-async-generators": { @@ -7286,30 +7417,30 @@ } }, "@babel/template": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.5.tgz", - "integrity": "sha512-X7yV7eiwAxdj9k94NEylvbVHLiVG1nvzCV2EAowhxLTwODV1jl9UzZ48leOC0sH7OnuHrIkllaBgneUykIcZaw==", + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.15.tgz", + "integrity": "sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w==", "dev": true, "requires": { - "@babel/code-frame": "^7.22.5", - "@babel/parser": "^7.22.5", - "@babel/types": "^7.22.5" + "@babel/code-frame": "^7.22.13", + "@babel/parser": "^7.22.15", + "@babel/types": "^7.22.15" } }, "@babel/traverse": { - "version": "7.22.8", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.22.8.tgz", - "integrity": "sha512-y6LPR+wpM2I3qJrsheCTwhIinzkETbplIgPBbwvqPKc+uljeA5gP+3nP8irdYt1mjQaDnlIcG+dw8OjAco4GXw==", + "version": "7.23.2", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.23.2.tgz", + "integrity": "sha512-azpe59SQ48qG6nu2CzcMLbxUudtN+dOM9kDbUqGq3HXUJRlo7i8fvPoxQUzYgLZ4cMVmuZgm8vvBpNeRhd6XSw==", "dev": true, "requires": { - "@babel/code-frame": "^7.22.5", - "@babel/generator": "^7.22.7", - "@babel/helper-environment-visitor": "^7.22.5", - "@babel/helper-function-name": "^7.22.5", + "@babel/code-frame": "^7.22.13", + "@babel/generator": "^7.23.0", + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-function-name": "^7.23.0", "@babel/helper-hoist-variables": "^7.22.5", "@babel/helper-split-export-declaration": "^7.22.6", - "@babel/parser": "^7.22.7", - "@babel/types": "^7.22.5", + "@babel/parser": "^7.23.0", + "@babel/types": "^7.23.0", "debug": "^4.1.0", "globals": "^11.1.0" }, @@ -7323,13 +7454,13 @@ } }, "@babel/types": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.22.5.tgz", - "integrity": "sha512-zo3MIHGOkPOfoRXitsgHLjEXmlDaD/5KU1Uzuc9GNiZPhSqVxVRtxuPaSBZDsYZ9qV88AjtMtWW7ww98loJ9KA==", + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.23.0.tgz", + "integrity": "sha512-0oIyUfKoI3mSqMvsxBdclDwxXKXAUA8v/apZbc+iSyARYou1o8ZGDxbUYyLFoW2arqS2jDGqJuZvv1d/io1axg==", "dev": true, "requires": { "@babel/helper-string-parser": "^7.22.5", - "@babel/helper-validator-identifier": "^7.22.5", + "@babel/helper-validator-identifier": "^7.22.20", "to-fast-properties": "^2.0.0" } }, @@ -11698,14 +11829,14 @@ } }, "typedoc": { - "version": "0.23.28", - "resolved": "https://registry.npmjs.org/typedoc/-/typedoc-0.23.28.tgz", - "integrity": "sha512-9x1+hZWTHEQcGoP7qFmlo4unUoVJLB0H/8vfO/7wqTnZxg4kPuji9y3uRzEu0ZKez63OJAUmiGhUrtukC6Uj3w==", + "version": "0.24.8", + "resolved": "https://registry.npmjs.org/typedoc/-/typedoc-0.24.8.tgz", + "integrity": "sha512-ahJ6Cpcvxwaxfu4KtjA8qZNqS43wYt6JL27wYiIgl1vd38WW/KWX11YuAeZhuz9v+ttrutSsgK+XO1CjL1kA3w==", "dev": true, "requires": { "lunr": "^2.3.9", - "marked": "^4.2.12", - "minimatch": "^7.1.3", + "marked": "^4.3.0", + "minimatch": "^9.0.0", "shiki": "^0.14.1" }, "dependencies": { @@ -11719,9 +11850,9 @@ } }, "minimatch": { - "version": "7.4.6", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-7.4.6.tgz", - "integrity": "sha512-sBz8G/YjVniEz6lKPNpKxXwazJe4c19fEfV2GDMX6AjFz+MX9uDWIZW8XreVhkFW3fkIdTv/gxWr/Kks5FFAVw==", + "version": "9.0.3", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", + "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", "dev": true, "requires": { "brace-expansion": "^2.0.1" diff --git a/bindings/wasm/package.json b/bindings/wasm/package.json index 3bad341bb4..18dae558bf 100644 --- a/bindings/wasm/package.json +++ b/bindings/wasm/package.json @@ -54,7 +54,7 @@ "prettier": "^2.7.1", "ts-jest": "^27.1.5", "ts-node": "^10.9.1", - "typedoc": "^0.23.9", + "typedoc": "^0.24.0", "typedoc-plugin-markdown": "^3.13.4", "typescript": "^4.7.4", "wasm-opt": "^1.3.0" @@ -67,7 +67,8 @@ "json5": "^2.2.2", "semver": "^7.5.2", "tough-cookie": "^4.1.3", - "word-wrap": "^1.2.4" + "word-wrap": "^1.2.4", + "@babel/traverse": "^7.23.2" }, "engines": { "node": ">=16" diff --git a/bindings/wasm/yarn.lock b/bindings/wasm/yarn.lock index 400e669070..e236a62e98 100644 --- a/bindings/wasm/yarn.lock +++ b/bindings/wasm/yarn.lock @@ -3,34 +3,35 @@ "@aashutoshrathi/word-wrap@^1.2.3": - version "1.2.6" - resolved "https://registry.npmjs.org/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz" - integrity sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA== + "integrity" "sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==" + "resolved" "https://registry.npmjs.org/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz" + "version" "1.2.6" "@ampproject/remapping@^2.2.0": - version "2.2.1" - resolved "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.1.tgz" - integrity sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg== + "integrity" "sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==" + "resolved" "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.1.tgz" + "version" "2.2.1" dependencies: "@jridgewell/gen-mapping" "^0.3.0" "@jridgewell/trace-mapping" "^0.3.9" -"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.12.13", "@babel/code-frame@^7.22.5": - version "7.22.5" - resolved "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.22.5.tgz" - integrity sha512-Xmwn266vad+6DAqEB2A6V/CcZVp62BbwVmcOJc2RPuwih1kw02TjQvWVWlcKGbBPd+8/0V5DEkOcizRGYsspYQ== +"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.12.13", "@babel/code-frame@^7.22.13", "@babel/code-frame@^7.22.5": + "integrity" "sha512-XktuhWlJ5g+3TJXc5upd9Ks1HutSArik6jf2eAjYFyIOf4ej3RN+184cZbzDvbPnuTJIUhPKKJE3cIsYTiAT3w==" + "resolved" "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.22.13.tgz" + "version" "7.22.13" dependencies: - "@babel/highlight" "^7.22.5" + "@babel/highlight" "^7.22.13" + "chalk" "^2.4.2" "@babel/compat-data@^7.22.9": - version "7.22.9" - resolved "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.22.9.tgz" - integrity sha512-5UamI7xkUcJ3i9qVDS+KFDEK8/7oJ55/sJMB1Ge7IEapr7KfdfV/HErR+koZwOfd+SgtFKOKRhRakdg++DcJpQ== + "integrity" "sha512-5UamI7xkUcJ3i9qVDS+KFDEK8/7oJ55/sJMB1Ge7IEapr7KfdfV/HErR+koZwOfd+SgtFKOKRhRakdg++DcJpQ==" + "resolved" "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.22.9.tgz" + "version" "7.22.9" -"@babel/core@^7.1.0", "@babel/core@^7.12.3", "@babel/core@^7.7.2", "@babel/core@^7.8.0": - version "7.22.9" - resolved "https://registry.npmjs.org/@babel/core/-/core-7.22.9.tgz" - integrity sha512-G2EgeufBcYw27U4hhoIwFcgc1XU7TlXJ3mv04oOv1WCuo900U/anZSPzEqNjwdjgffkk2Gs0AN0dW1CKVLcG7w== +"@babel/core@^7.0.0", "@babel/core@^7.0.0-0", "@babel/core@^7.1.0", "@babel/core@^7.12.3", "@babel/core@^7.7.2", "@babel/core@^7.8.0", "@babel/core@>=7.0.0-beta.0 <8": + "integrity" "sha512-G2EgeufBcYw27U4hhoIwFcgc1XU7TlXJ3mv04oOv1WCuo900U/anZSPzEqNjwdjgffkk2Gs0AN0dW1CKVLcG7w==" + "resolved" "https://registry.npmjs.org/@babel/core/-/core-7.22.9.tgz" + "version" "7.22.9" dependencies: "@ampproject/remapping" "^2.2.0" "@babel/code-frame" "^7.22.5" @@ -42,64 +43,64 @@ "@babel/template" "^7.22.5" "@babel/traverse" "^7.22.8" "@babel/types" "^7.22.5" - convert-source-map "^1.7.0" - debug "^4.1.0" - gensync "^1.0.0-beta.2" - json5 "^2.2.2" - semver "^6.3.1" - -"@babel/generator@^7.22.7", "@babel/generator@^7.22.9", "@babel/generator@^7.7.2": - version "7.22.9" - resolved "https://registry.npmjs.org/@babel/generator/-/generator-7.22.9.tgz" - integrity sha512-KtLMbmicyuK2Ak/FTCJVbDnkN1SlT8/kceFTiuDiiRUUSMnHMidxSCdG4ndkTOHHpoomWe/4xkvHkEOncwjYIw== - dependencies: - "@babel/types" "^7.22.5" + "convert-source-map" "^1.7.0" + "debug" "^4.1.0" + "gensync" "^1.0.0-beta.2" + "json5" "^2.2.2" + "semver" "^6.3.1" + +"@babel/generator@^7.22.9", "@babel/generator@^7.23.0", "@babel/generator@^7.7.2": + "integrity" "sha512-lN85QRR+5IbYrMWM6Y4pE/noaQtg4pNiqeNGX60eqOfo6gtEj6uw/JagelB8vVztSd7R6M5n1+PQkDbHbBRU4g==" + "resolved" "https://registry.npmjs.org/@babel/generator/-/generator-7.23.0.tgz" + "version" "7.23.0" + dependencies: + "@babel/types" "^7.23.0" "@jridgewell/gen-mapping" "^0.3.2" "@jridgewell/trace-mapping" "^0.3.17" - jsesc "^2.5.1" + "jsesc" "^2.5.1" "@babel/helper-compilation-targets@^7.22.9": - version "7.22.9" - resolved "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.9.tgz" - integrity sha512-7qYrNM6HjpnPHJbopxmb8hSPoZ0gsX8IvUS32JGVoy+pU9e5N0nLr1VjJoR6kA4d9dmGLxNYOjeB8sUDal2WMw== + "integrity" "sha512-7qYrNM6HjpnPHJbopxmb8hSPoZ0gsX8IvUS32JGVoy+pU9e5N0nLr1VjJoR6kA4d9dmGLxNYOjeB8sUDal2WMw==" + "resolved" "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.9.tgz" + "version" "7.22.9" dependencies: "@babel/compat-data" "^7.22.9" "@babel/helper-validator-option" "^7.22.5" - browserslist "^4.21.9" - lru-cache "^5.1.1" - semver "^6.3.1" + "browserslist" "^4.21.9" + "lru-cache" "^5.1.1" + "semver" "^6.3.1" -"@babel/helper-environment-visitor@^7.22.5": - version "7.22.5" - resolved "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.5.tgz" - integrity sha512-XGmhECfVA/5sAt+H+xpSg0mfrHq6FzNr9Oxh7PSEBBRUb/mL7Kz3NICXb194rCqAEdxkhPT1a88teizAFyvk8Q== +"@babel/helper-environment-visitor@^7.22.20", "@babel/helper-environment-visitor@^7.22.5": + "integrity" "sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==" + "resolved" "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz" + "version" "7.22.20" -"@babel/helper-function-name@^7.22.5": - version "7.22.5" - resolved "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.22.5.tgz" - integrity sha512-wtHSq6jMRE3uF2otvfuD3DIvVhOsSNshQl0Qrd7qC9oQJzHvOL4qQXlQn2916+CXGywIjpGuIkoyZRRxHPiNQQ== +"@babel/helper-function-name@^7.23.0": + "integrity" "sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==" + "resolved" "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz" + "version" "7.23.0" dependencies: - "@babel/template" "^7.22.5" - "@babel/types" "^7.22.5" + "@babel/template" "^7.22.15" + "@babel/types" "^7.23.0" "@babel/helper-hoist-variables@^7.22.5": - version "7.22.5" - resolved "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz" - integrity sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw== + "integrity" "sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==" + "resolved" "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz" + "version" "7.22.5" dependencies: "@babel/types" "^7.22.5" "@babel/helper-module-imports@^7.22.5": - version "7.22.5" - resolved "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.22.5.tgz" - integrity sha512-8Dl6+HD/cKifutF5qGd/8ZJi84QeAKh+CEe1sBzz8UayBBGg1dAIJrdHOcOM5b2MpzWL2yuotJTtGjETq0qjXg== + "integrity" "sha512-8Dl6+HD/cKifutF5qGd/8ZJi84QeAKh+CEe1sBzz8UayBBGg1dAIJrdHOcOM5b2MpzWL2yuotJTtGjETq0qjXg==" + "resolved" "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.22.5.tgz" + "version" "7.22.5" dependencies: "@babel/types" "^7.22.5" "@babel/helper-module-transforms@^7.22.9": - version "7.22.9" - resolved "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.22.9.tgz" - integrity sha512-t+WA2Xn5K+rTeGtC8jCsdAH52bjggG5TKRuRrAGNM/mjIbO4GxvlLMFOEz9wXY5I2XQ60PMFsAG2WIcG82dQMQ== + "integrity" "sha512-t+WA2Xn5K+rTeGtC8jCsdAH52bjggG5TKRuRrAGNM/mjIbO4GxvlLMFOEz9wXY5I2XQ60PMFsAG2WIcG82dQMQ==" + "resolved" "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.22.9.tgz" + "version" "7.22.9" dependencies: "@babel/helper-environment-visitor" "^7.22.5" "@babel/helper-module-imports" "^7.22.5" @@ -108,282 +109,282 @@ "@babel/helper-validator-identifier" "^7.22.5" "@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.14.5", "@babel/helper-plugin-utils@^7.22.5", "@babel/helper-plugin-utils@^7.8.0": - version "7.22.5" - resolved "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz" - integrity sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg== + "integrity" "sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==" + "resolved" "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz" + "version" "7.22.5" "@babel/helper-simple-access@^7.22.5": - version "7.22.5" - resolved "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz" - integrity sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w== + "integrity" "sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==" + "resolved" "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz" + "version" "7.22.5" dependencies: "@babel/types" "^7.22.5" "@babel/helper-split-export-declaration@^7.22.6": - version "7.22.6" - resolved "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz" - integrity sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g== + "integrity" "sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==" + "resolved" "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz" + "version" "7.22.6" dependencies: "@babel/types" "^7.22.5" "@babel/helper-string-parser@^7.22.5": - version "7.22.5" - resolved "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz" - integrity sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw== + "integrity" "sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==" + "resolved" "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz" + "version" "7.22.5" -"@babel/helper-validator-identifier@^7.22.5": - version "7.22.5" - resolved "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.5.tgz" - integrity sha512-aJXu+6lErq8ltp+JhkJUfk1MTGyuA4v7f3pA+BJ5HLfNC6nAQ0Cpi9uOquUj8Hehg0aUiHzWQbOVJGao6ztBAQ== +"@babel/helper-validator-identifier@^7.22.20", "@babel/helper-validator-identifier@^7.22.5": + "integrity" "sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==" + "resolved" "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz" + "version" "7.22.20" "@babel/helper-validator-option@^7.22.5": - version "7.22.5" - resolved "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.22.5.tgz" - integrity sha512-R3oB6xlIVKUnxNUxbmgq7pKjxpru24zlimpE8WK47fACIlM0II/Hm1RS8IaOI7NgCr6LNS+jl5l75m20npAziw== + "integrity" "sha512-R3oB6xlIVKUnxNUxbmgq7pKjxpru24zlimpE8WK47fACIlM0II/Hm1RS8IaOI7NgCr6LNS+jl5l75m20npAziw==" + "resolved" "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.22.5.tgz" + "version" "7.22.5" "@babel/helpers@^7.22.6": - version "7.22.6" - resolved "https://registry.npmjs.org/@babel/helpers/-/helpers-7.22.6.tgz" - integrity sha512-YjDs6y/fVOYFV8hAf1rxd1QvR9wJe1pDBZ2AREKq/SDayfPzgk0PBnVuTCE5X1acEpMMNOVUqoe+OwiZGJ+OaA== + "integrity" "sha512-YjDs6y/fVOYFV8hAf1rxd1QvR9wJe1pDBZ2AREKq/SDayfPzgk0PBnVuTCE5X1acEpMMNOVUqoe+OwiZGJ+OaA==" + "resolved" "https://registry.npmjs.org/@babel/helpers/-/helpers-7.22.6.tgz" + "version" "7.22.6" dependencies: "@babel/template" "^7.22.5" "@babel/traverse" "^7.22.6" "@babel/types" "^7.22.5" -"@babel/highlight@^7.22.5": - version "7.22.5" - resolved "https://registry.npmjs.org/@babel/highlight/-/highlight-7.22.5.tgz" - integrity sha512-BSKlD1hgnedS5XRnGOljZawtag7H1yPfQp0tdNJCHoH6AZ+Pcm9VvkrK59/Yy593Ypg0zMxH2BxD1VPYUQ7UIw== +"@babel/highlight@^7.22.13": + "integrity" "sha512-dkdMCN3py0+ksCgYmGG8jKeGA/8Tk+gJwSYYlFGxG5lmhfKNoAy004YpLxpS1W2J8m/EK2Ew+yOs9pVRwO89mg==" + "resolved" "https://registry.npmjs.org/@babel/highlight/-/highlight-7.22.20.tgz" + "version" "7.22.20" dependencies: - "@babel/helper-validator-identifier" "^7.22.5" - chalk "^2.0.0" - js-tokens "^4.0.0" + "@babel/helper-validator-identifier" "^7.22.20" + "chalk" "^2.4.2" + "js-tokens" "^4.0.0" -"@babel/parser@^7.1.0", "@babel/parser@^7.14.7", "@babel/parser@^7.20.7", "@babel/parser@^7.22.5", "@babel/parser@^7.22.7": - version "7.22.7" - resolved "https://registry.npmjs.org/@babel/parser/-/parser-7.22.7.tgz" - integrity sha512-7NF8pOkHP5o2vpmGgNGcfAeCvOYhGLyA3Z4eBQkT1RJlWu47n63bCs93QfJ2hIAFCil7L5P2IWhs1oToVgrL0Q== +"@babel/parser@^7.1.0", "@babel/parser@^7.14.7", "@babel/parser@^7.20.7", "@babel/parser@^7.22.15", "@babel/parser@^7.22.7", "@babel/parser@^7.23.0": + "integrity" "sha512-vvPKKdMemU85V9WE/l5wZEmImpCtLqbnTvqDS2U1fJ96KrxoW7KrXhNsNCblQlg8Ck4b85yxdTyelsMUgFUXiw==" + "resolved" "https://registry.npmjs.org/@babel/parser/-/parser-7.23.0.tgz" + "version" "7.23.0" "@babel/plugin-syntax-async-generators@^7.8.4": - version "7.8.4" - resolved "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz" - integrity sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw== + "integrity" "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==" + "resolved" "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz" + "version" "7.8.4" dependencies: "@babel/helper-plugin-utils" "^7.8.0" "@babel/plugin-syntax-bigint@^7.8.3": - version "7.8.3" - resolved "https://registry.npmjs.org/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz" - integrity sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg== + "integrity" "sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==" + "resolved" "https://registry.npmjs.org/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz" + "version" "7.8.3" dependencies: "@babel/helper-plugin-utils" "^7.8.0" "@babel/plugin-syntax-class-properties@^7.8.3": - version "7.12.13" - resolved "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz" - integrity sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA== + "integrity" "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==" + "resolved" "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz" + "version" "7.12.13" dependencies: "@babel/helper-plugin-utils" "^7.12.13" "@babel/plugin-syntax-import-meta@^7.8.3": - version "7.10.4" - resolved "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz" - integrity sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g== + "integrity" "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==" + "resolved" "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz" + "version" "7.10.4" dependencies: "@babel/helper-plugin-utils" "^7.10.4" "@babel/plugin-syntax-json-strings@^7.8.3": - version "7.8.3" - resolved "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz" - integrity sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA== + "integrity" "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==" + "resolved" "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz" + "version" "7.8.3" dependencies: "@babel/helper-plugin-utils" "^7.8.0" "@babel/plugin-syntax-logical-assignment-operators@^7.8.3": - version "7.10.4" - resolved "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz" - integrity sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig== + "integrity" "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==" + "resolved" "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz" + "version" "7.10.4" dependencies: "@babel/helper-plugin-utils" "^7.10.4" "@babel/plugin-syntax-nullish-coalescing-operator@^7.8.3": - version "7.8.3" - resolved "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz" - integrity sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ== + "integrity" "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==" + "resolved" "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz" + "version" "7.8.3" dependencies: "@babel/helper-plugin-utils" "^7.8.0" "@babel/plugin-syntax-numeric-separator@^7.8.3": - version "7.10.4" - resolved "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz" - integrity sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug== + "integrity" "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==" + "resolved" "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz" + "version" "7.10.4" dependencies: "@babel/helper-plugin-utils" "^7.10.4" "@babel/plugin-syntax-object-rest-spread@^7.8.3": - version "7.8.3" - resolved "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz" - integrity sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA== + "integrity" "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==" + "resolved" "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz" + "version" "7.8.3" dependencies: "@babel/helper-plugin-utils" "^7.8.0" "@babel/plugin-syntax-optional-catch-binding@^7.8.3": - version "7.8.3" - resolved "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz" - integrity sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q== + "integrity" "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==" + "resolved" "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz" + "version" "7.8.3" dependencies: "@babel/helper-plugin-utils" "^7.8.0" "@babel/plugin-syntax-optional-chaining@^7.8.3": - version "7.8.3" - resolved "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz" - integrity sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg== + "integrity" "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==" + "resolved" "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz" + "version" "7.8.3" dependencies: "@babel/helper-plugin-utils" "^7.8.0" "@babel/plugin-syntax-top-level-await@^7.8.3": - version "7.14.5" - resolved "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz" - integrity sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw== + "integrity" "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==" + "resolved" "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz" + "version" "7.14.5" dependencies: "@babel/helper-plugin-utils" "^7.14.5" "@babel/plugin-syntax-typescript@^7.7.2": - version "7.22.5" - resolved "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.22.5.tgz" - integrity sha512-1mS2o03i7t1c6VzH6fdQ3OA8tcEIxwG18zIPRp+UY1Ihv6W+XZzBCVxExF9upussPXJ0xE9XRHwMoNs1ep/nRQ== + "integrity" "sha512-1mS2o03i7t1c6VzH6fdQ3OA8tcEIxwG18zIPRp+UY1Ihv6W+XZzBCVxExF9upussPXJ0xE9XRHwMoNs1ep/nRQ==" + "resolved" "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.22.5.tgz" + "version" "7.22.5" dependencies: "@babel/helper-plugin-utils" "^7.22.5" -"@babel/template@^7.22.5", "@babel/template@^7.3.3": - version "7.22.5" - resolved "https://registry.npmjs.org/@babel/template/-/template-7.22.5.tgz" - integrity sha512-X7yV7eiwAxdj9k94NEylvbVHLiVG1nvzCV2EAowhxLTwODV1jl9UzZ48leOC0sH7OnuHrIkllaBgneUykIcZaw== +"@babel/template@^7.22.15", "@babel/template@^7.22.5", "@babel/template@^7.3.3": + "integrity" "sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w==" + "resolved" "https://registry.npmjs.org/@babel/template/-/template-7.22.15.tgz" + "version" "7.22.15" dependencies: - "@babel/code-frame" "^7.22.5" - "@babel/parser" "^7.22.5" - "@babel/types" "^7.22.5" + "@babel/code-frame" "^7.22.13" + "@babel/parser" "^7.22.15" + "@babel/types" "^7.22.15" "@babel/traverse@^7.22.6", "@babel/traverse@^7.22.8", "@babel/traverse@^7.7.2": - version "7.22.8" - resolved "https://registry.npmjs.org/@babel/traverse/-/traverse-7.22.8.tgz" - integrity sha512-y6LPR+wpM2I3qJrsheCTwhIinzkETbplIgPBbwvqPKc+uljeA5gP+3nP8irdYt1mjQaDnlIcG+dw8OjAco4GXw== - dependencies: - "@babel/code-frame" "^7.22.5" - "@babel/generator" "^7.22.7" - "@babel/helper-environment-visitor" "^7.22.5" - "@babel/helper-function-name" "^7.22.5" + "integrity" "sha512-azpe59SQ48qG6nu2CzcMLbxUudtN+dOM9kDbUqGq3HXUJRlo7i8fvPoxQUzYgLZ4cMVmuZgm8vvBpNeRhd6XSw==" + "resolved" "https://registry.npmjs.org/@babel/traverse/-/traverse-7.23.2.tgz" + "version" "7.23.2" + dependencies: + "@babel/code-frame" "^7.22.13" + "@babel/generator" "^7.23.0" + "@babel/helper-environment-visitor" "^7.22.20" + "@babel/helper-function-name" "^7.23.0" "@babel/helper-hoist-variables" "^7.22.5" "@babel/helper-split-export-declaration" "^7.22.6" - "@babel/parser" "^7.22.7" - "@babel/types" "^7.22.5" - debug "^4.1.0" - globals "^11.1.0" + "@babel/parser" "^7.23.0" + "@babel/types" "^7.23.0" + "debug" "^4.1.0" + "globals" "^11.1.0" -"@babel/types@^7.0.0", "@babel/types@^7.20.7", "@babel/types@^7.22.5", "@babel/types@^7.3.3": - version "7.22.5" - resolved "https://registry.npmjs.org/@babel/types/-/types-7.22.5.tgz" - integrity sha512-zo3MIHGOkPOfoRXitsgHLjEXmlDaD/5KU1Uzuc9GNiZPhSqVxVRtxuPaSBZDsYZ9qV88AjtMtWW7ww98loJ9KA== +"@babel/types@^7.0.0", "@babel/types@^7.20.7", "@babel/types@^7.22.15", "@babel/types@^7.22.5", "@babel/types@^7.23.0", "@babel/types@^7.3.3": + "integrity" "sha512-0oIyUfKoI3mSqMvsxBdclDwxXKXAUA8v/apZbc+iSyARYou1o8ZGDxbUYyLFoW2arqS2jDGqJuZvv1d/io1axg==" + "resolved" "https://registry.npmjs.org/@babel/types/-/types-7.23.0.tgz" + "version" "7.23.0" dependencies: "@babel/helper-string-parser" "^7.22.5" - "@babel/helper-validator-identifier" "^7.22.5" - to-fast-properties "^2.0.0" + "@babel/helper-validator-identifier" "^7.22.20" + "to-fast-properties" "^2.0.0" "@bcoe/v8-coverage@^0.2.3": - version "0.2.3" - resolved "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz" - integrity sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw== + "integrity" "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==" + "resolved" "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz" + "version" "0.2.3" "@cspotcode/source-map-support@^0.8.0": - version "0.8.1" - resolved "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz" - integrity sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw== + "integrity" "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==" + "resolved" "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz" + "version" "0.8.1" dependencies: "@jridgewell/trace-mapping" "0.3.9" "@eslint-community/eslint-utils@^4.2.0": - version "4.4.0" - resolved "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz" - integrity sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA== + "integrity" "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==" + "resolved" "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz" + "version" "4.4.0" dependencies: - eslint-visitor-keys "^3.3.0" + "eslint-visitor-keys" "^3.3.0" "@eslint-community/regexpp@^4.4.0": - version "4.5.1" - resolved "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.5.1.tgz" - integrity sha512-Z5ba73P98O1KUYCCJTUeVpja9RcGoMdncZ6T49FCUl2lN38JtCJ+3WgIDBv0AuY4WChU5PmtJmOCTlN6FZTFKQ== + "integrity" "sha512-Z5ba73P98O1KUYCCJTUeVpja9RcGoMdncZ6T49FCUl2lN38JtCJ+3WgIDBv0AuY4WChU5PmtJmOCTlN6FZTFKQ==" + "resolved" "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.5.1.tgz" + "version" "4.5.1" "@eslint/eslintrc@^2.1.0": - version "2.1.0" - resolved "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.0.tgz" - integrity sha512-Lj7DECXqIVCqnqjjHMPna4vn6GJcMgul/wuS0je9OZ9gsL0zzDpKPVtcG1HaDVc+9y+qgXneTeUMbCqXJNpH1A== - dependencies: - ajv "^6.12.4" - debug "^4.3.2" - espree "^9.6.0" - globals "^13.19.0" - ignore "^5.2.0" - import-fresh "^3.2.1" - js-yaml "^4.1.0" - minimatch "^3.1.2" - strip-json-comments "^3.1.1" + "integrity" "sha512-Lj7DECXqIVCqnqjjHMPna4vn6GJcMgul/wuS0je9OZ9gsL0zzDpKPVtcG1HaDVc+9y+qgXneTeUMbCqXJNpH1A==" + "resolved" "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.0.tgz" + "version" "2.1.0" + dependencies: + "ajv" "^6.12.4" + "debug" "^4.3.2" + "espree" "^9.6.0" + "globals" "^13.19.0" + "ignore" "^5.2.0" + "import-fresh" "^3.2.1" + "js-yaml" "^4.1.0" + "minimatch" "^3.1.2" + "strip-json-comments" "^3.1.1" "@eslint/js@8.44.0": - version "8.44.0" - resolved "https://registry.npmjs.org/@eslint/js/-/js-8.44.0.tgz" - integrity sha512-Ag+9YM4ocKQx9AarydN0KY2j0ErMHNIocPDrVo8zAE44xLTjEtz81OdR68/cydGtk6m6jDb5Za3r2useMzYmSw== + "integrity" "sha512-Ag+9YM4ocKQx9AarydN0KY2j0ErMHNIocPDrVo8zAE44xLTjEtz81OdR68/cydGtk6m6jDb5Za3r2useMzYmSw==" + "resolved" "https://registry.npmjs.org/@eslint/js/-/js-8.44.0.tgz" + "version" "8.44.0" "@humanwhocodes/config-array@^0.11.10": - version "0.11.10" - resolved "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.10.tgz" - integrity sha512-KVVjQmNUepDVGXNuoRRdmmEjruj0KfiGSbS8LVc12LMsWDQzRXJ0qdhN8L8uUigKpfEHRhlaQFY0ib1tnUbNeQ== + "integrity" "sha512-KVVjQmNUepDVGXNuoRRdmmEjruj0KfiGSbS8LVc12LMsWDQzRXJ0qdhN8L8uUigKpfEHRhlaQFY0ib1tnUbNeQ==" + "resolved" "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.10.tgz" + "version" "0.11.10" dependencies: "@humanwhocodes/object-schema" "^1.2.1" - debug "^4.1.1" - minimatch "^3.0.5" + "debug" "^4.1.1" + "minimatch" "^3.0.5" "@humanwhocodes/module-importer@^1.0.1": - version "1.0.1" - resolved "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz" - integrity sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA== + "integrity" "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==" + "resolved" "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz" + "version" "1.0.1" "@humanwhocodes/object-schema@^1.2.1": - version "1.2.1" - resolved "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz" - integrity sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA== + "integrity" "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==" + "resolved" "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz" + "version" "1.2.1" "@istanbuljs/load-nyc-config@^1.0.0": - version "1.1.0" - resolved "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz" - integrity sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ== + "integrity" "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==" + "resolved" "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz" + "version" "1.1.0" dependencies: - camelcase "^5.3.1" - find-up "^4.1.0" - get-package-type "^0.1.0" - js-yaml "^3.13.1" - resolve-from "^5.0.0" + "camelcase" "^5.3.1" + "find-up" "^4.1.0" + "get-package-type" "^0.1.0" + "js-yaml" "^3.13.1" + "resolve-from" "^5.0.0" "@istanbuljs/schema@^0.1.2": - version "0.1.3" - resolved "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz" - integrity sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA== + "integrity" "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==" + "resolved" "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz" + "version" "0.1.3" "@jest/console@^27.5.1": - version "27.5.1" - resolved "https://registry.npmjs.org/@jest/console/-/console-27.5.1.tgz" - integrity sha512-kZ/tNpS3NXn0mlXXXPNuDZnb4c0oZ20r4K5eemM2k30ZC3G0T02nXUvyhf5YdbXWHPEJLc9qGLxEZ216MdL+Zg== + "integrity" "sha512-kZ/tNpS3NXn0mlXXXPNuDZnb4c0oZ20r4K5eemM2k30ZC3G0T02nXUvyhf5YdbXWHPEJLc9qGLxEZ216MdL+Zg==" + "resolved" "https://registry.npmjs.org/@jest/console/-/console-27.5.1.tgz" + "version" "27.5.1" dependencies: "@jest/types" "^27.5.1" "@types/node" "*" - chalk "^4.0.0" - jest-message-util "^27.5.1" - jest-util "^27.5.1" - slash "^3.0.0" + "chalk" "^4.0.0" + "jest-message-util" "^27.5.1" + "jest-util" "^27.5.1" + "slash" "^3.0.0" "@jest/core@^27.5.1": - version "27.5.1" - resolved "https://registry.npmjs.org/@jest/core/-/core-27.5.1.tgz" - integrity sha512-AK6/UTrvQD0Cd24NSqmIA6rKsu0tKIxfiCducZvqxYdmMisOYAsdItspT+fQDQYARPf8XgjAFZi0ogW2agH5nQ== + "integrity" "sha512-AK6/UTrvQD0Cd24NSqmIA6rKsu0tKIxfiCducZvqxYdmMisOYAsdItspT+fQDQYARPf8XgjAFZi0ogW2agH5nQ==" + "resolved" "https://registry.npmjs.org/@jest/core/-/core-27.5.1.tgz" + "version" "27.5.1" dependencies: "@jest/console" "^27.5.1" "@jest/reporters" "^27.5.1" @@ -391,64 +392,64 @@ "@jest/transform" "^27.5.1" "@jest/types" "^27.5.1" "@types/node" "*" - ansi-escapes "^4.2.1" - chalk "^4.0.0" - emittery "^0.8.1" - exit "^0.1.2" - graceful-fs "^4.2.9" - jest-changed-files "^27.5.1" - jest-config "^27.5.1" - jest-haste-map "^27.5.1" - jest-message-util "^27.5.1" - jest-regex-util "^27.5.1" - jest-resolve "^27.5.1" - jest-resolve-dependencies "^27.5.1" - jest-runner "^27.5.1" - jest-runtime "^27.5.1" - jest-snapshot "^27.5.1" - jest-util "^27.5.1" - jest-validate "^27.5.1" - jest-watcher "^27.5.1" - micromatch "^4.0.4" - rimraf "^3.0.0" - slash "^3.0.0" - strip-ansi "^6.0.0" + "ansi-escapes" "^4.2.1" + "chalk" "^4.0.0" + "emittery" "^0.8.1" + "exit" "^0.1.2" + "graceful-fs" "^4.2.9" + "jest-changed-files" "^27.5.1" + "jest-config" "^27.5.1" + "jest-haste-map" "^27.5.1" + "jest-message-util" "^27.5.1" + "jest-regex-util" "^27.5.1" + "jest-resolve" "^27.5.1" + "jest-resolve-dependencies" "^27.5.1" + "jest-runner" "^27.5.1" + "jest-runtime" "^27.5.1" + "jest-snapshot" "^27.5.1" + "jest-util" "^27.5.1" + "jest-validate" "^27.5.1" + "jest-watcher" "^27.5.1" + "micromatch" "^4.0.4" + "rimraf" "^3.0.0" + "slash" "^3.0.0" + "strip-ansi" "^6.0.0" "@jest/environment@^27.5.1": - version "27.5.1" - resolved "https://registry.npmjs.org/@jest/environment/-/environment-27.5.1.tgz" - integrity sha512-/WQjhPJe3/ghaol/4Bq480JKXV/Rfw8nQdN7f41fM8VDHLcxKXou6QyXAh3EFr9/bVG3x74z1NWDkP87EiY8gA== + "integrity" "sha512-/WQjhPJe3/ghaol/4Bq480JKXV/Rfw8nQdN7f41fM8VDHLcxKXou6QyXAh3EFr9/bVG3x74z1NWDkP87EiY8gA==" + "resolved" "https://registry.npmjs.org/@jest/environment/-/environment-27.5.1.tgz" + "version" "27.5.1" dependencies: "@jest/fake-timers" "^27.5.1" "@jest/types" "^27.5.1" "@types/node" "*" - jest-mock "^27.5.1" + "jest-mock" "^27.5.1" "@jest/fake-timers@^27.5.1": - version "27.5.1" - resolved "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-27.5.1.tgz" - integrity sha512-/aPowoolwa07k7/oM3aASneNeBGCmGQsc3ugN4u6s4C/+s5M64MFo/+djTdiwcbQlRfFElGuDXWzaWj6QgKObQ== + "integrity" "sha512-/aPowoolwa07k7/oM3aASneNeBGCmGQsc3ugN4u6s4C/+s5M64MFo/+djTdiwcbQlRfFElGuDXWzaWj6QgKObQ==" + "resolved" "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-27.5.1.tgz" + "version" "27.5.1" dependencies: "@jest/types" "^27.5.1" "@sinonjs/fake-timers" "^8.0.1" "@types/node" "*" - jest-message-util "^27.5.1" - jest-mock "^27.5.1" - jest-util "^27.5.1" + "jest-message-util" "^27.5.1" + "jest-mock" "^27.5.1" + "jest-util" "^27.5.1" "@jest/globals@^27.5.1": - version "27.5.1" - resolved "https://registry.npmjs.org/@jest/globals/-/globals-27.5.1.tgz" - integrity sha512-ZEJNB41OBQQgGzgyInAv0UUfDDj3upmHydjieSxFvTRuZElrx7tXg/uVQ5hYVEwiXs3+aMsAeEc9X7xiSKCm4Q== + "integrity" "sha512-ZEJNB41OBQQgGzgyInAv0UUfDDj3upmHydjieSxFvTRuZElrx7tXg/uVQ5hYVEwiXs3+aMsAeEc9X7xiSKCm4Q==" + "resolved" "https://registry.npmjs.org/@jest/globals/-/globals-27.5.1.tgz" + "version" "27.5.1" dependencies: "@jest/environment" "^27.5.1" "@jest/types" "^27.5.1" - expect "^27.5.1" + "expect" "^27.5.1" "@jest/reporters@^27.5.1": - version "27.5.1" - resolved "https://registry.npmjs.org/@jest/reporters/-/reporters-27.5.1.tgz" - integrity sha512-cPXh9hWIlVJMQkVk84aIvXuBB4uQQmFqZiacloFuGiP3ah1sbCxCosidXFDfqG8+6fO1oR2dTJTlsOy4VFmUfw== + "integrity" "sha512-cPXh9hWIlVJMQkVk84aIvXuBB4uQQmFqZiacloFuGiP3ah1sbCxCosidXFDfqG8+6fO1oR2dTJTlsOy4VFmUfw==" + "resolved" "https://registry.npmjs.org/@jest/reporters/-/reporters-27.5.1.tgz" + "version" "27.5.1" dependencies: "@bcoe/v8-coverage" "^0.2.3" "@jest/console" "^27.5.1" @@ -456,208 +457,216 @@ "@jest/transform" "^27.5.1" "@jest/types" "^27.5.1" "@types/node" "*" - chalk "^4.0.0" - collect-v8-coverage "^1.0.0" - exit "^0.1.2" - glob "^7.1.2" - graceful-fs "^4.2.9" - istanbul-lib-coverage "^3.0.0" - istanbul-lib-instrument "^5.1.0" - istanbul-lib-report "^3.0.0" - istanbul-lib-source-maps "^4.0.0" - istanbul-reports "^3.1.3" - jest-haste-map "^27.5.1" - jest-resolve "^27.5.1" - jest-util "^27.5.1" - jest-worker "^27.5.1" - slash "^3.0.0" - source-map "^0.6.0" - string-length "^4.0.1" - terminal-link "^2.0.0" - v8-to-istanbul "^8.1.0" + "chalk" "^4.0.0" + "collect-v8-coverage" "^1.0.0" + "exit" "^0.1.2" + "glob" "^7.1.2" + "graceful-fs" "^4.2.9" + "istanbul-lib-coverage" "^3.0.0" + "istanbul-lib-instrument" "^5.1.0" + "istanbul-lib-report" "^3.0.0" + "istanbul-lib-source-maps" "^4.0.0" + "istanbul-reports" "^3.1.3" + "jest-haste-map" "^27.5.1" + "jest-resolve" "^27.5.1" + "jest-util" "^27.5.1" + "jest-worker" "^27.5.1" + "slash" "^3.0.0" + "source-map" "^0.6.0" + "string-length" "^4.0.1" + "terminal-link" "^2.0.0" + "v8-to-istanbul" "^8.1.0" "@jest/schemas@^28.1.3": - version "28.1.3" - resolved "https://registry.npmjs.org/@jest/schemas/-/schemas-28.1.3.tgz" - integrity sha512-/l/VWsdt/aBXgjshLWOFyFt3IVdYypu5y2Wn2rOO1un6nkqIn8SLXzgIMYXFyYsRWDyF5EthmKJMIdJvk08grg== + "integrity" "sha512-/l/VWsdt/aBXgjshLWOFyFt3IVdYypu5y2Wn2rOO1un6nkqIn8SLXzgIMYXFyYsRWDyF5EthmKJMIdJvk08grg==" + "resolved" "https://registry.npmjs.org/@jest/schemas/-/schemas-28.1.3.tgz" + "version" "28.1.3" dependencies: "@sinclair/typebox" "^0.24.1" "@jest/source-map@^27.5.1": - version "27.5.1" - resolved "https://registry.npmjs.org/@jest/source-map/-/source-map-27.5.1.tgz" - integrity sha512-y9NIHUYF3PJRlHk98NdC/N1gl88BL08aQQgu4k4ZopQkCw9t9cV8mtl3TV8b/YCB8XaVTFrmUTAJvjsntDireg== + "integrity" "sha512-y9NIHUYF3PJRlHk98NdC/N1gl88BL08aQQgu4k4ZopQkCw9t9cV8mtl3TV8b/YCB8XaVTFrmUTAJvjsntDireg==" + "resolved" "https://registry.npmjs.org/@jest/source-map/-/source-map-27.5.1.tgz" + "version" "27.5.1" dependencies: - callsites "^3.0.0" - graceful-fs "^4.2.9" - source-map "^0.6.0" + "callsites" "^3.0.0" + "graceful-fs" "^4.2.9" + "source-map" "^0.6.0" "@jest/test-result@^27.5.1": - version "27.5.1" - resolved "https://registry.npmjs.org/@jest/test-result/-/test-result-27.5.1.tgz" - integrity sha512-EW35l2RYFUcUQxFJz5Cv5MTOxlJIQs4I7gxzi2zVU7PJhOwfYq1MdC5nhSmYjX1gmMmLPvB3sIaC+BkcHRBfag== + "integrity" "sha512-EW35l2RYFUcUQxFJz5Cv5MTOxlJIQs4I7gxzi2zVU7PJhOwfYq1MdC5nhSmYjX1gmMmLPvB3sIaC+BkcHRBfag==" + "resolved" "https://registry.npmjs.org/@jest/test-result/-/test-result-27.5.1.tgz" + "version" "27.5.1" dependencies: "@jest/console" "^27.5.1" "@jest/types" "^27.5.1" "@types/istanbul-lib-coverage" "^2.0.0" - collect-v8-coverage "^1.0.0" + "collect-v8-coverage" "^1.0.0" "@jest/test-sequencer@^27.5.1": - version "27.5.1" - resolved "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-27.5.1.tgz" - integrity sha512-LCheJF7WB2+9JuCS7VB/EmGIdQuhtqjRNI9A43idHv3E4KltCTsPsLxvdaubFHSYwY/fNjMWjl6vNRhDiN7vpQ== + "integrity" "sha512-LCheJF7WB2+9JuCS7VB/EmGIdQuhtqjRNI9A43idHv3E4KltCTsPsLxvdaubFHSYwY/fNjMWjl6vNRhDiN7vpQ==" + "resolved" "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-27.5.1.tgz" + "version" "27.5.1" dependencies: "@jest/test-result" "^27.5.1" - graceful-fs "^4.2.9" - jest-haste-map "^27.5.1" - jest-runtime "^27.5.1" + "graceful-fs" "^4.2.9" + "jest-haste-map" "^27.5.1" + "jest-runtime" "^27.5.1" "@jest/transform@^27.5.1": - version "27.5.1" - resolved "https://registry.npmjs.org/@jest/transform/-/transform-27.5.1.tgz" - integrity sha512-ipON6WtYgl/1329g5AIJVbUuEh0wZVbdpGwC99Jw4LwuoBNS95MVphU6zOeD9pDkon+LLbFL7lOQRapbB8SCHw== + "integrity" "sha512-ipON6WtYgl/1329g5AIJVbUuEh0wZVbdpGwC99Jw4LwuoBNS95MVphU6zOeD9pDkon+LLbFL7lOQRapbB8SCHw==" + "resolved" "https://registry.npmjs.org/@jest/transform/-/transform-27.5.1.tgz" + "version" "27.5.1" dependencies: "@babel/core" "^7.1.0" "@jest/types" "^27.5.1" - 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 "^27.5.1" - jest-regex-util "^27.5.1" - jest-util "^27.5.1" - micromatch "^4.0.4" - pirates "^4.0.4" - slash "^3.0.0" - source-map "^0.6.1" - write-file-atomic "^3.0.0" + "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" "^27.5.1" + "jest-regex-util" "^27.5.1" + "jest-util" "^27.5.1" + "micromatch" "^4.0.4" + "pirates" "^4.0.4" + "slash" "^3.0.0" + "source-map" "^0.6.1" + "write-file-atomic" "^3.0.0" "@jest/types@^27.5.1": - version "27.5.1" - resolved "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz" - integrity sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw== + "integrity" "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==" + "resolved" "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz" + "version" "27.5.1" dependencies: "@types/istanbul-lib-coverage" "^2.0.0" "@types/istanbul-reports" "^3.0.0" "@types/node" "*" "@types/yargs" "^16.0.0" - chalk "^4.0.0" + "chalk" "^4.0.0" "@jridgewell/gen-mapping@^0.3.0", "@jridgewell/gen-mapping@^0.3.2": - version "0.3.3" - resolved "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz" - integrity sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ== + "integrity" "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==" + "resolved" "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz" + "version" "0.3.3" dependencies: "@jridgewell/set-array" "^1.0.1" "@jridgewell/sourcemap-codec" "^1.4.10" "@jridgewell/trace-mapping" "^0.3.9" -"@jridgewell/resolve-uri@3.1.0", "@jridgewell/resolve-uri@^3.0.3": - version "3.1.0" - resolved "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz" - integrity sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w== +"@jridgewell/resolve-uri@^3.0.3", "@jridgewell/resolve-uri@3.1.0": + "integrity" "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==" + "resolved" "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz" + "version" "3.1.0" "@jridgewell/set-array@^1.0.1": - version "1.1.2" - resolved "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz" - integrity sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw== + "integrity" "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==" + "resolved" "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz" + "version" "1.1.2" -"@jridgewell/sourcemap-codec@1.4.14": - version "1.4.14" - resolved "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz" - integrity sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw== +"@jridgewell/source-map@^0.3.3": + "integrity" "sha512-UTYAUj/wviwdsMfzoSJspJxbkH5o1snzwX0//0ENX1u/55kkZZkcTZP6u9bwKGkv+dkk9at4m1Cpt0uY80kcpQ==" + "resolved" "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.5.tgz" + "version" "0.3.5" + dependencies: + "@jridgewell/gen-mapping" "^0.3.0" + "@jridgewell/trace-mapping" "^0.3.9" "@jridgewell/sourcemap-codec@^1.4.10": - version "1.4.15" - resolved "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz" - integrity sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg== + "integrity" "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==" + "resolved" "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz" + "version" "1.4.15" -"@jridgewell/trace-mapping@0.3.9": - version "0.3.9" - resolved "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz" - integrity sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ== - dependencies: - "@jridgewell/resolve-uri" "^3.0.3" - "@jridgewell/sourcemap-codec" "^1.4.10" +"@jridgewell/sourcemap-codec@1.4.14": + "integrity" "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==" + "resolved" "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz" + "version" "1.4.14" "@jridgewell/trace-mapping@^0.3.17", "@jridgewell/trace-mapping@^0.3.9": - version "0.3.18" - resolved "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.18.tgz" - integrity sha512-w+niJYzMHdd7USdiH2U6869nqhD2nbfZXND5Yp93qIbEmnDNk7PD48o+YchRVpzMU7M6jVCbenTR7PA1FLQ9pA== + "integrity" "sha512-w+niJYzMHdd7USdiH2U6869nqhD2nbfZXND5Yp93qIbEmnDNk7PD48o+YchRVpzMU7M6jVCbenTR7PA1FLQ9pA==" + "resolved" "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.18.tgz" + "version" "0.3.18" dependencies: "@jridgewell/resolve-uri" "3.1.0" "@jridgewell/sourcemap-codec" "1.4.14" +"@jridgewell/trace-mapping@0.3.9": + "integrity" "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==" + "resolved" "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz" + "version" "0.3.9" + dependencies: + "@jridgewell/resolve-uri" "^3.0.3" + "@jridgewell/sourcemap-codec" "^1.4.10" + "@nodelib/fs.scandir@2.1.5": - version "2.1.5" - resolved "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz" - integrity sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g== + "integrity" "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==" + "resolved" "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz" + "version" "2.1.5" dependencies: "@nodelib/fs.stat" "2.0.5" - run-parallel "^1.1.9" + "run-parallel" "^1.1.9" -"@nodelib/fs.stat@2.0.5", "@nodelib/fs.stat@^2.0.2": - version "2.0.5" - resolved "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz" - integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A== +"@nodelib/fs.stat@^2.0.2", "@nodelib/fs.stat@2.0.5": + "integrity" "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==" + "resolved" "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz" + "version" "2.0.5" "@nodelib/fs.walk@^1.2.3", "@nodelib/fs.walk@^1.2.8": - version "1.2.8" - resolved "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz" - integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg== + "integrity" "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==" + "resolved" "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz" + "version" "1.2.8" dependencies: "@nodelib/fs.scandir" "2.1.5" - fastq "^1.6.0" + "fastq" "^1.6.0" "@sinclair/typebox@^0.24.1": - version "0.24.51" - resolved "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.24.51.tgz" - integrity sha512-1P1OROm/rdubP5aFDSZQILU0vrLCJ4fvHt6EoqHEM+2D/G5MK3bIaymUKLit8Js9gbns5UyJnkP/TZROLw4tUA== + "integrity" "sha512-1P1OROm/rdubP5aFDSZQILU0vrLCJ4fvHt6EoqHEM+2D/G5MK3bIaymUKLit8Js9gbns5UyJnkP/TZROLw4tUA==" + "resolved" "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.24.51.tgz" + "version" "0.24.51" "@sinonjs/commons@^1.7.0": - version "1.8.6" - resolved "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.6.tgz" - integrity sha512-Ky+XkAkqPZSm3NLBeUng77EBQl3cmeJhITaGHdYH8kjVB+aun3S4XBRti2zt17mtt0mIUDiNxYeoJm6drVvBJQ== + "integrity" "sha512-Ky+XkAkqPZSm3NLBeUng77EBQl3cmeJhITaGHdYH8kjVB+aun3S4XBRti2zt17mtt0mIUDiNxYeoJm6drVvBJQ==" + "resolved" "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.6.tgz" + "version" "1.8.6" dependencies: - type-detect "4.0.8" + "type-detect" "4.0.8" "@sinonjs/fake-timers@^8.0.1": - version "8.1.0" - resolved "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-8.1.0.tgz" - integrity sha512-OAPJUAtgeINhh/TAlUID4QTs53Njm7xzddaVlEs/SXwgtiD1tW22zAB/W1wdqfrpmikgaWQ9Fw6Ws+hsiRm5Vg== + "integrity" "sha512-OAPJUAtgeINhh/TAlUID4QTs53Njm7xzddaVlEs/SXwgtiD1tW22zAB/W1wdqfrpmikgaWQ9Fw6Ws+hsiRm5Vg==" + "resolved" "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-8.1.0.tgz" + "version" "8.1.0" dependencies: "@sinonjs/commons" "^1.7.0" "@tootallnate/once@1": - version "1.1.2" - resolved "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz" - integrity sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw== + "integrity" "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==" + "resolved" "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz" + "version" "1.1.2" "@tsconfig/node10@^1.0.7": - version "1.0.9" - resolved "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.9.tgz" - integrity sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA== + "integrity" "sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==" + "resolved" "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.9.tgz" + "version" "1.0.9" "@tsconfig/node12@^1.0.7": - version "1.0.11" - resolved "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz" - integrity sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag== + "integrity" "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==" + "resolved" "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz" + "version" "1.0.11" "@tsconfig/node14@^1.0.0": - version "1.0.3" - resolved "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz" - integrity sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow== + "integrity" "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==" + "resolved" "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz" + "version" "1.0.3" "@tsconfig/node16@^1.0.2": - version "1.0.4" - resolved "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.4.tgz" - integrity sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA== + "integrity" "sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==" + "resolved" "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.4.tgz" + "version" "1.0.4" "@types/babel__core@^7.0.0", "@types/babel__core@^7.1.14": - version "7.20.1" - resolved "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.1.tgz" - integrity sha512-aACu/U/omhdk15O4Nfb+fHgH/z3QsfQzpnvRZhYhThms83ZnAOZz7zZAWO7mn2yyNQaA4xTO8GLK3uqFU4bYYw== + "integrity" "sha512-aACu/U/omhdk15O4Nfb+fHgH/z3QsfQzpnvRZhYhThms83ZnAOZz7zZAWO7mn2yyNQaA4xTO8GLK3uqFU4bYYw==" + "resolved" "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.1.tgz" + "version" "7.20.1" dependencies: "@babel/parser" "^7.20.7" "@babel/types" "^7.20.7" @@ -666,164 +675,185 @@ "@types/babel__traverse" "*" "@types/babel__generator@*": - version "7.6.4" - resolved "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.4.tgz" - integrity sha512-tFkciB9j2K755yrTALxD44McOrk+gfpIpvC3sxHjRawj6PfnQxrse4Clq5y/Rq+G3mrBurMax/lG8Qn2t9mSsg== + "integrity" "sha512-tFkciB9j2K755yrTALxD44McOrk+gfpIpvC3sxHjRawj6PfnQxrse4Clq5y/Rq+G3mrBurMax/lG8Qn2t9mSsg==" + "resolved" "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.4.tgz" + "version" "7.6.4" dependencies: "@babel/types" "^7.0.0" "@types/babel__template@*": - version "7.4.1" - resolved "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.1.tgz" - integrity sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g== + "integrity" "sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g==" + "resolved" "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.1.tgz" + "version" "7.4.1" dependencies: "@babel/parser" "^7.1.0" "@babel/types" "^7.0.0" "@types/babel__traverse@*", "@types/babel__traverse@^7.0.4", "@types/babel__traverse@^7.0.6": - version "7.20.1" - resolved "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.1.tgz" - integrity sha512-MitHFXnhtgwsGZWtT68URpOvLN4EREih1u3QtQiN4VdAxWKRVvGCSvw/Qth0M0Qq3pJpnGOu5JaM/ydK7OGbqg== + "integrity" "sha512-MitHFXnhtgwsGZWtT68URpOvLN4EREih1u3QtQiN4VdAxWKRVvGCSvw/Qth0M0Qq3pJpnGOu5JaM/ydK7OGbqg==" + "resolved" "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.1.tgz" + "version" "7.20.1" dependencies: "@babel/types" "^7.20.7" +"@types/eslint-scope@^3.7.3": + "integrity" "sha512-9K4zoImiZc3HlIp6AVUDE4CWYx22a+lhSZMYNpbjW04+YF0KWj4pJXnEMjdnFTiQibFFmElcsasJXDbdI/EPhA==" + "resolved" "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.4.tgz" + "version" "3.7.4" + dependencies: + "@types/eslint" "*" + "@types/estree" "*" + +"@types/eslint@*": + "integrity" "sha512-gsF+c/0XOguWgaOgvFs+xnnRqt9GwgTvIks36WpE6ueeI4KCEHHd8K/CKHqhOqrJKsYH8m27kRzQEvWXAwXUTw==" + "resolved" "https://registry.npmjs.org/@types/eslint/-/eslint-8.44.0.tgz" + "version" "8.44.0" + dependencies: + "@types/estree" "*" + "@types/json-schema" "*" + +"@types/estree@*", "@types/estree@^1.0.0": + "integrity" "sha512-LG4opVs2ANWZ1TJoKc937iMmNstM/d0ae1vNbnBvBhqCSezgVUOzcLCqbI5elV8Vy6WKwKjaqR+zO9VKirBBCA==" + "resolved" "https://registry.npmjs.org/@types/estree/-/estree-1.0.1.tgz" + "version" "1.0.1" + "@types/graceful-fs@^4.1.2": - version "4.1.6" - resolved "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.6.tgz" - integrity sha512-Sig0SNORX9fdW+bQuTEovKj3uHcUL6LQKbCrrqb1X7J6/ReAbhCXRAhc+SMejhLELFj2QcyuxmUooZ4bt5ReSw== + "integrity" "sha512-Sig0SNORX9fdW+bQuTEovKj3uHcUL6LQKbCrrqb1X7J6/ReAbhCXRAhc+SMejhLELFj2QcyuxmUooZ4bt5ReSw==" + "resolved" "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.6.tgz" + "version" "4.1.6" dependencies: "@types/node" "*" "@types/istanbul-lib-coverage@*", "@types/istanbul-lib-coverage@^2.0.0", "@types/istanbul-lib-coverage@^2.0.1": - version "2.0.4" - resolved "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz" - integrity sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g== + "integrity" "sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g==" + "resolved" "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz" + "version" "2.0.4" "@types/istanbul-lib-report@*": - version "3.0.0" - resolved "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz" - integrity sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg== + "integrity" "sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==" + "resolved" "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz" + "version" "3.0.0" dependencies: "@types/istanbul-lib-coverage" "*" "@types/istanbul-reports@^3.0.0": - version "3.0.1" - resolved "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz" - integrity sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw== + "integrity" "sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==" + "resolved" "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz" + "version" "3.0.1" dependencies: "@types/istanbul-lib-report" "*" -"@types/jest@^27.5.2": - version "27.5.2" - resolved "https://registry.npmjs.org/@types/jest/-/jest-27.5.2.tgz" - integrity sha512-mpT8LJJ4CMeeahobofYWIjFo0xonRS/HfxnVEPMPFSQdGUt1uHCnoPT7Zhb+sjDU2wz0oKV0OLUR0WzrHNgfeA== +"@types/jest@^27.0.0", "@types/jest@^27.5.2": + "integrity" "sha512-mpT8LJJ4CMeeahobofYWIjFo0xonRS/HfxnVEPMPFSQdGUt1uHCnoPT7Zhb+sjDU2wz0oKV0OLUR0WzrHNgfeA==" + "resolved" "https://registry.npmjs.org/@types/jest/-/jest-27.5.2.tgz" + "version" "27.5.2" dependencies: - jest-matcher-utils "^27.0.0" - pretty-format "^27.0.0" + "jest-matcher-utils" "^27.0.0" + "pretty-format" "^27.0.0" -"@types/json-schema@^7.0.9": - version "7.0.12" - resolved "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.12.tgz" - integrity sha512-Hr5Jfhc9eYOQNPYO5WLDq/n4jqijdHNlDXjuAQkkt+mWdQR+XJToOHrsD4cPaMXpn6KO7y2+wM8AZEs8VpBLVA== +"@types/json-schema@*", "@types/json-schema@^7.0.8", "@types/json-schema@^7.0.9": + "integrity" "sha512-Hr5Jfhc9eYOQNPYO5WLDq/n4jqijdHNlDXjuAQkkt+mWdQR+XJToOHrsD4cPaMXpn6KO7y2+wM8AZEs8VpBLVA==" + "resolved" "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.12.tgz" + "version" "7.0.12" "@types/node@*": - version "20.4.2" - resolved "https://registry.npmjs.org/@types/node/-/node-20.4.2.tgz" - integrity sha512-Dd0BYtWgnWJKwO1jkmTrzofjK2QXXcai0dmtzvIBhcA+RsG5h8R3xlyta0kGOZRNfL9GuRtb1knmPEhQrePCEw== + "integrity" "sha512-Dd0BYtWgnWJKwO1jkmTrzofjK2QXXcai0dmtzvIBhcA+RsG5h8R3xlyta0kGOZRNfL9GuRtb1knmPEhQrePCEw==" + "resolved" "https://registry.npmjs.org/@types/node/-/node-20.4.2.tgz" + "version" "20.4.2" "@types/prettier@^2.1.5": - version "2.7.3" - resolved "https://registry.npmjs.org/@types/prettier/-/prettier-2.7.3.tgz" - integrity sha512-+68kP9yzs4LMp7VNh8gdzMSPZFL44MLGqiHWvttYJe+6qnuVr4Ek9wSBQoveqY/r+LwjCcU29kNVkidwim+kYA== + "integrity" "sha512-+68kP9yzs4LMp7VNh8gdzMSPZFL44MLGqiHWvttYJe+6qnuVr4Ek9wSBQoveqY/r+LwjCcU29kNVkidwim+kYA==" + "resolved" "https://registry.npmjs.org/@types/prettier/-/prettier-2.7.3.tgz" + "version" "2.7.3" "@types/semver@^7.3.12": - version "7.5.0" - resolved "https://registry.npmjs.org/@types/semver/-/semver-7.5.0.tgz" - integrity sha512-G8hZ6XJiHnuhQKR7ZmysCeJWE08o8T0AXtk5darsCaTVsYZhhgUrq53jizaR2FvsoeCwJhlmwTjkXBY5Pn/ZHw== + "integrity" "sha512-G8hZ6XJiHnuhQKR7ZmysCeJWE08o8T0AXtk5darsCaTVsYZhhgUrq53jizaR2FvsoeCwJhlmwTjkXBY5Pn/ZHw==" + "resolved" "https://registry.npmjs.org/@types/semver/-/semver-7.5.0.tgz" + "version" "7.5.0" "@types/stack-utils@^2.0.0": - version "2.0.1" - resolved "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.1.tgz" - integrity sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw== + "integrity" "sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw==" + "resolved" "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.1.tgz" + "version" "2.0.1" "@types/yargs-parser@*": - version "21.0.0" - resolved "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.0.tgz" - integrity sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA== + "integrity" "sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA==" + "resolved" "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.0.tgz" + "version" "21.0.0" "@types/yargs@^16.0.0": - version "16.0.5" - resolved "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.5.tgz" - integrity sha512-AxO/ADJOBFJScHbWhq2xAhlWP24rY4aCEG/NFaMvbT3X2MgRsLjhjQwsn0Zi5zn0LG9jUhCCZMeX9Dkuw6k+vQ== + "integrity" "sha512-AxO/ADJOBFJScHbWhq2xAhlWP24rY4aCEG/NFaMvbT3X2MgRsLjhjQwsn0Zi5zn0LG9jUhCCZMeX9Dkuw6k+vQ==" + "resolved" "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.5.tgz" + "version" "16.0.5" dependencies: "@types/yargs-parser" "*" "@typescript-eslint/eslint-plugin@^5.31.0": - version "5.62.0" - resolved "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.62.0.tgz" - integrity sha512-TiZzBSJja/LbhNPvk6yc0JrX9XqhQ0hdh6M2svYfsHGejaKFIAGd9MQ+ERIMzLGlN/kZoYIgdxFV0PuljTKXag== + "integrity" "sha512-TiZzBSJja/LbhNPvk6yc0JrX9XqhQ0hdh6M2svYfsHGejaKFIAGd9MQ+ERIMzLGlN/kZoYIgdxFV0PuljTKXag==" + "resolved" "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.62.0.tgz" + "version" "5.62.0" dependencies: "@eslint-community/regexpp" "^4.4.0" "@typescript-eslint/scope-manager" "5.62.0" "@typescript-eslint/type-utils" "5.62.0" "@typescript-eslint/utils" "5.62.0" - debug "^4.3.4" - graphemer "^1.4.0" - ignore "^5.2.0" - natural-compare-lite "^1.4.0" - semver "^7.3.7" - tsutils "^3.21.0" - -"@typescript-eslint/parser@^5.31.0": - version "5.62.0" - resolved "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.62.0.tgz" - integrity sha512-VlJEV0fOQ7BExOsHYAGrgbEiZoi8D+Bl2+f6V2RrXerRSylnp+ZBHmPvaIa8cz0Ajx7WO7Z5RqfgYg7ED1nRhA== + "debug" "^4.3.4" + "graphemer" "^1.4.0" + "ignore" "^5.2.0" + "natural-compare-lite" "^1.4.0" + "semver" "^7.3.7" + "tsutils" "^3.21.0" + +"@typescript-eslint/parser@^5.0.0", "@typescript-eslint/parser@^5.31.0": + "integrity" "sha512-VlJEV0fOQ7BExOsHYAGrgbEiZoi8D+Bl2+f6V2RrXerRSylnp+ZBHmPvaIa8cz0Ajx7WO7Z5RqfgYg7ED1nRhA==" + "resolved" "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.62.0.tgz" + "version" "5.62.0" dependencies: "@typescript-eslint/scope-manager" "5.62.0" "@typescript-eslint/types" "5.62.0" "@typescript-eslint/typescript-estree" "5.62.0" - debug "^4.3.4" + "debug" "^4.3.4" "@typescript-eslint/scope-manager@5.62.0": - version "5.62.0" - resolved "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.62.0.tgz" - integrity sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w== + "integrity" "sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w==" + "resolved" "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.62.0.tgz" + "version" "5.62.0" dependencies: "@typescript-eslint/types" "5.62.0" "@typescript-eslint/visitor-keys" "5.62.0" "@typescript-eslint/type-utils@5.62.0": - version "5.62.0" - resolved "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.62.0.tgz" - integrity sha512-xsSQreu+VnfbqQpW5vnCJdq1Z3Q0U31qiWmRhr98ONQmcp/yhiPJFPq8MXiJVLiksmOKSjIldZzkebzHuCGzew== + "integrity" "sha512-xsSQreu+VnfbqQpW5vnCJdq1Z3Q0U31qiWmRhr98ONQmcp/yhiPJFPq8MXiJVLiksmOKSjIldZzkebzHuCGzew==" + "resolved" "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.62.0.tgz" + "version" "5.62.0" dependencies: "@typescript-eslint/typescript-estree" "5.62.0" "@typescript-eslint/utils" "5.62.0" - debug "^4.3.4" - tsutils "^3.21.0" + "debug" "^4.3.4" + "tsutils" "^3.21.0" "@typescript-eslint/types@5.62.0": - version "5.62.0" - resolved "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.62.0.tgz" - integrity sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ== + "integrity" "sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ==" + "resolved" "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.62.0.tgz" + "version" "5.62.0" "@typescript-eslint/typescript-estree@5.62.0": - version "5.62.0" - resolved "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.62.0.tgz" - integrity sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA== + "integrity" "sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA==" + "resolved" "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.62.0.tgz" + "version" "5.62.0" dependencies: "@typescript-eslint/types" "5.62.0" "@typescript-eslint/visitor-keys" "5.62.0" - debug "^4.3.4" - globby "^11.1.0" - is-glob "^4.0.3" - semver "^7.3.7" - tsutils "^3.21.0" + "debug" "^4.3.4" + "globby" "^11.1.0" + "is-glob" "^4.0.3" + "semver" "^7.3.7" + "tsutils" "^3.21.0" "@typescript-eslint/utils@5.62.0": - version "5.62.0" - resolved "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.62.0.tgz" - integrity sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ== + "integrity" "sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ==" + "resolved" "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.62.0.tgz" + "version" "5.62.0" dependencies: "@eslint-community/eslint-utils" "^4.2.0" "@types/json-schema" "^7.0.9" @@ -831,219 +861,357 @@ "@typescript-eslint/scope-manager" "5.62.0" "@typescript-eslint/types" "5.62.0" "@typescript-eslint/typescript-estree" "5.62.0" - eslint-scope "^5.1.1" - semver "^7.3.7" + "eslint-scope" "^5.1.1" + "semver" "^7.3.7" "@typescript-eslint/visitor-keys@5.62.0": - version "5.62.0" - resolved "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.62.0.tgz" - integrity sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw== + "integrity" "sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw==" + "resolved" "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.62.0.tgz" + "version" "5.62.0" dependencies: "@typescript-eslint/types" "5.62.0" - eslint-visitor-keys "^3.3.0" - -abab@^2.0.3, abab@^2.0.5: - version "2.0.6" - resolved "https://registry.npmjs.org/abab/-/abab-2.0.6.tgz" - integrity sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA== - -accepts@~1.3.8: - version "1.3.8" - resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.8.tgz#0bf0be125b67014adcb0b0921e62db7bffe16b2e" - integrity sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw== - dependencies: - mime-types "~2.1.34" - negotiator "0.6.3" - -acorn-globals@^6.0.0: - version "6.0.0" - resolved "https://registry.npmjs.org/acorn-globals/-/acorn-globals-6.0.0.tgz" - integrity sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg== - dependencies: - acorn "^7.1.1" - acorn-walk "^7.1.1" - -acorn-jsx@^5.3.2: - version "5.3.2" - resolved "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz" - integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== - -acorn-walk@^7.1.1: - version "7.2.0" - resolved "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz" - integrity sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA== - -acorn-walk@^8.1.1: - version "8.2.0" - resolved "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz" - integrity sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA== - -acorn@^7.1.1: - version "7.4.1" - resolved "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz" - integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A== - -acorn@^8.2.4, acorn@^8.4.1, acorn@^8.9.0: - version "8.10.0" - resolved "https://registry.npmjs.org/acorn/-/acorn-8.10.0.tgz" - integrity sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw== - -agent-base@6: - version "6.0.2" - resolved "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz" - integrity sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ== - dependencies: - debug "4" - -ajv-formats@^2.1.1: - version "2.1.1" - resolved "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz" - integrity sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA== - dependencies: - ajv "^8.0.0" - -ajv-keywords@^5.1.0: - version "5.1.0" - resolved "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz" - integrity sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw== - dependencies: - fast-deep-equal "^3.1.3" - -ajv@^6.10.0, ajv@^6.12.4: - version "6.12.6" - resolved "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz" - integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== - dependencies: - fast-deep-equal "^3.1.1" - fast-json-stable-stringify "^2.0.0" - json-schema-traverse "^0.4.1" - uri-js "^4.2.2" - -ajv@^8.0.0, ajv@^8.9.0: - version "8.12.0" - resolved "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz" - integrity sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA== - dependencies: - fast-deep-equal "^3.1.1" - json-schema-traverse "^1.0.0" - require-from-string "^2.0.2" - uri-js "^4.2.2" - -ansi-escapes@^4.2.1: - version "4.3.2" - resolved "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz" - integrity sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ== - dependencies: - type-fest "^0.21.3" - -ansi-regex@^5.0.1: - version "5.0.1" - resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz" - integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== - -ansi-sequence-parser@^1.1.0: - version "1.1.0" - resolved "https://registry.npmjs.org/ansi-sequence-parser/-/ansi-sequence-parser-1.1.0.tgz" - integrity sha512-lEm8mt52to2fT8GhciPCGeCXACSz2UwIN4X2e2LJSnZ5uAbn2/dsYdOmUXq0AtWS5cpAupysIneExOgH0Vd2TQ== - -ansi-styles@^3.2.1: - version "3.2.1" - resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz" - integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== - dependencies: - color-convert "^1.9.0" - -ansi-styles@^4.0.0, ansi-styles@^4.1.0: - version "4.3.0" - resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz" - integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== - dependencies: - color-convert "^2.0.1" - -ansi-styles@^5.0.0: - version "5.2.0" - resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz" - integrity sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA== - -anymatch@^3.0.3: - version "3.1.3" - resolved "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz" - integrity sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw== - dependencies: - normalize-path "^3.0.0" - picomatch "^2.0.4" - -arg@^4.1.0: - version "4.1.3" - resolved "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz" - integrity sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA== - -argparse@^1.0.7: - version "1.0.10" - resolved "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz" - integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg== - dependencies: - sprintf-js "~1.0.2" - -argparse@^2.0.1: - version "2.0.1" - resolved "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz" - integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== - -array-flatten@1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2" - integrity sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg== - -array-union@^2.1.0: - version "2.1.0" - resolved "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz" - integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== - -asynckit@^0.4.0: - version "0.4.0" - resolved "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz" - integrity sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q== - -babel-jest@^27.5.1: - version "27.5.1" - resolved "https://registry.npmjs.org/babel-jest/-/babel-jest-27.5.1.tgz" - integrity sha512-cdQ5dXjGRd0IBRATiQ4mZGlGlRE8kJpjPOixdNRdT+m3UcNqmYWN6rK6nvtXYfY3D76cb8s/O1Ss8ea24PIwcg== + "eslint-visitor-keys" "^3.3.0" + +"@webassemblyjs/ast@^1.11.5", "@webassemblyjs/ast@1.11.6": + "integrity" "sha512-IN1xI7PwOvLPgjcf180gC1bqn3q/QaOCwYUahIOhbYUu8KA/3tw2RT/T0Gidi1l7Hhj5D/INhJxiICObqpMu4Q==" + "resolved" "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.6.tgz" + "version" "1.11.6" + dependencies: + "@webassemblyjs/helper-numbers" "1.11.6" + "@webassemblyjs/helper-wasm-bytecode" "1.11.6" + +"@webassemblyjs/floating-point-hex-parser@1.11.6": + "integrity" "sha512-ejAj9hfRJ2XMsNHk/v6Fu2dGS+i4UaXBXGemOfQ/JfQ6mdQg/WXtwleQRLLS4OvfDhv8rYnVwH27YJLMyYsxhw==" + "resolved" "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.6.tgz" + "version" "1.11.6" + +"@webassemblyjs/helper-api-error@1.11.6": + "integrity" "sha512-o0YkoP4pVu4rN8aTJgAyj9hC2Sv5UlkzCHhxqWj8butaLvnpdc2jOwh4ewE6CX0txSfLn/UYaV/pheS2Txg//Q==" + "resolved" "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.6.tgz" + "version" "1.11.6" + +"@webassemblyjs/helper-buffer@1.11.6": + "integrity" "sha512-z3nFzdcp1mb8nEOFFk8DrYLpHvhKC3grJD2ardfKOzmbmJvEf/tPIqCY+sNcwZIY8ZD7IkB2l7/pqhUhqm7hLA==" + "resolved" "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.6.tgz" + "version" "1.11.6" + +"@webassemblyjs/helper-numbers@1.11.6": + "integrity" "sha512-vUIhZ8LZoIWHBohiEObxVm6hwP034jwmc9kuq5GdHZH0wiLVLIPcMCdpJzG4C11cHoQ25TFIQj9kaVADVX7N3g==" + "resolved" "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.6.tgz" + "version" "1.11.6" + dependencies: + "@webassemblyjs/floating-point-hex-parser" "1.11.6" + "@webassemblyjs/helper-api-error" "1.11.6" + "@xtuc/long" "4.2.2" + +"@webassemblyjs/helper-wasm-bytecode@1.11.6": + "integrity" "sha512-sFFHKwcmBprO9e7Icf0+gddyWYDViL8bpPjJJl0WHxCdETktXdmtWLGVzoHbqUcY4Be1LkNfwTmXOJUFZYSJdA==" + "resolved" "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.6.tgz" + "version" "1.11.6" + +"@webassemblyjs/helper-wasm-section@1.11.6": + "integrity" "sha512-LPpZbSOwTpEC2cgn4hTydySy1Ke+XEu+ETXuoyvuyezHO3Kjdu90KK95Sh9xTbmjrCsUwvWwCOQQNta37VrS9g==" + "resolved" "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.6.tgz" + "version" "1.11.6" + dependencies: + "@webassemblyjs/ast" "1.11.6" + "@webassemblyjs/helper-buffer" "1.11.6" + "@webassemblyjs/helper-wasm-bytecode" "1.11.6" + "@webassemblyjs/wasm-gen" "1.11.6" + +"@webassemblyjs/ieee754@1.11.6": + "integrity" "sha512-LM4p2csPNvbij6U1f19v6WR56QZ8JcHg3QIJTlSwzFcmx6WSORicYj6I63f9yU1kEUtrpG+kjkiIAkevHpDXrg==" + "resolved" "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.6.tgz" + "version" "1.11.6" + dependencies: + "@xtuc/ieee754" "^1.2.0" + +"@webassemblyjs/leb128@1.11.6": + "integrity" "sha512-m7a0FhE67DQXgouf1tbN5XQcdWoNgaAuoULHIfGFIEVKA6tu/edls6XnIlkmS6FrXAquJRPni3ZZKjw6FSPjPQ==" + "resolved" "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.6.tgz" + "version" "1.11.6" + dependencies: + "@xtuc/long" "4.2.2" + +"@webassemblyjs/utf8@1.11.6": + "integrity" "sha512-vtXf2wTQ3+up9Zsg8sa2yWiQpzSsMyXj0qViVP6xKGCUT8p8YJ6HqI7l5eCnWx1T/FYdsv07HQs2wTFbbof/RA==" + "resolved" "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.6.tgz" + "version" "1.11.6" + +"@webassemblyjs/wasm-edit@^1.11.5": + "integrity" "sha512-Ybn2I6fnfIGuCR+Faaz7YcvtBKxvoLV3Lebn1tM4o/IAJzmi9AWYIPWpyBfU8cC+JxAO57bk4+zdsTjJR+VTOw==" + "resolved" "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.6.tgz" + "version" "1.11.6" + dependencies: + "@webassemblyjs/ast" "1.11.6" + "@webassemblyjs/helper-buffer" "1.11.6" + "@webassemblyjs/helper-wasm-bytecode" "1.11.6" + "@webassemblyjs/helper-wasm-section" "1.11.6" + "@webassemblyjs/wasm-gen" "1.11.6" + "@webassemblyjs/wasm-opt" "1.11.6" + "@webassemblyjs/wasm-parser" "1.11.6" + "@webassemblyjs/wast-printer" "1.11.6" + +"@webassemblyjs/wasm-gen@1.11.6": + "integrity" "sha512-3XOqkZP/y6B4F0PBAXvI1/bky7GryoogUtfwExeP/v7Nzwo1QLcq5oQmpKlftZLbT+ERUOAZVQjuNVak6UXjPA==" + "resolved" "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.6.tgz" + "version" "1.11.6" + dependencies: + "@webassemblyjs/ast" "1.11.6" + "@webassemblyjs/helper-wasm-bytecode" "1.11.6" + "@webassemblyjs/ieee754" "1.11.6" + "@webassemblyjs/leb128" "1.11.6" + "@webassemblyjs/utf8" "1.11.6" + +"@webassemblyjs/wasm-opt@1.11.6": + "integrity" "sha512-cOrKuLRE7PCe6AsOVl7WasYf3wbSo4CeOk6PkrjS7g57MFfVUF9u6ysQBBODX0LdgSvQqRiGz3CXvIDKcPNy4g==" + "resolved" "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.6.tgz" + "version" "1.11.6" + dependencies: + "@webassemblyjs/ast" "1.11.6" + "@webassemblyjs/helper-buffer" "1.11.6" + "@webassemblyjs/wasm-gen" "1.11.6" + "@webassemblyjs/wasm-parser" "1.11.6" + +"@webassemblyjs/wasm-parser@^1.11.5", "@webassemblyjs/wasm-parser@1.11.6": + "integrity" "sha512-6ZwPeGzMJM3Dqp3hCsLgESxBGtT/OeCvCZ4TA1JUPYgmhAx38tTPR9JaKy0S5H3evQpO/h2uWs2j6Yc/fjkpTQ==" + "resolved" "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.6.tgz" + "version" "1.11.6" + dependencies: + "@webassemblyjs/ast" "1.11.6" + "@webassemblyjs/helper-api-error" "1.11.6" + "@webassemblyjs/helper-wasm-bytecode" "1.11.6" + "@webassemblyjs/ieee754" "1.11.6" + "@webassemblyjs/leb128" "1.11.6" + "@webassemblyjs/utf8" "1.11.6" + +"@webassemblyjs/wast-printer@1.11.6": + "integrity" "sha512-JM7AhRcE+yW2GWYaKeHL5vt4xqee5N2WcezptmgyhNS+ScggqcT1OtXykhAb13Sn5Yas0j2uv9tHgrjwvzAP4A==" + "resolved" "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.6.tgz" + "version" "1.11.6" + dependencies: + "@webassemblyjs/ast" "1.11.6" + "@xtuc/long" "4.2.2" + +"@xtuc/ieee754@^1.2.0": + "integrity" "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==" + "resolved" "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz" + "version" "1.2.0" + +"@xtuc/long@4.2.2": + "integrity" "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==" + "resolved" "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz" + "version" "4.2.2" + +"abab@^2.0.3", "abab@^2.0.5": + "integrity" "sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==" + "resolved" "https://registry.npmjs.org/abab/-/abab-2.0.6.tgz" + "version" "2.0.6" + +"acorn-globals@^6.0.0": + "integrity" "sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg==" + "resolved" "https://registry.npmjs.org/acorn-globals/-/acorn-globals-6.0.0.tgz" + "version" "6.0.0" + dependencies: + "acorn" "^7.1.1" + "acorn-walk" "^7.1.1" + +"acorn-import-assertions@^1.9.0": + "integrity" "sha512-cmMwop9x+8KFhxvKrKfPYmN6/pKTYYHBqLa0DfvVZcKMJWNyWLnaqND7dx/qn66R7ewM1UX5XMaDVP5wlVTaVA==" + "resolved" "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.9.0.tgz" + "version" "1.9.0" + +"acorn-jsx@^5.3.2": + "integrity" "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==" + "resolved" "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz" + "version" "5.3.2" + +"acorn-walk@^7.1.1": + "integrity" "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==" + "resolved" "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz" + "version" "7.2.0" + +"acorn-walk@^8.1.1": + "integrity" "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==" + "resolved" "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz" + "version" "8.2.0" + +"acorn@^6.0.0 || ^7.0.0 || ^8.0.0", "acorn@^8", "acorn@^8.2.4", "acorn@^8.4.1", "acorn@^8.7.1", "acorn@^8.8.2", "acorn@^8.9.0": + "integrity" "sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==" + "resolved" "https://registry.npmjs.org/acorn/-/acorn-8.10.0.tgz" + "version" "8.10.0" + +"acorn@^7.1.1": + "integrity" "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==" + "resolved" "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz" + "version" "7.4.1" + +"agent-base@6": + "integrity" "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==" + "resolved" "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz" + "version" "6.0.2" + dependencies: + "debug" "4" + +"ajv-formats@^2.1.1": + "integrity" "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==" + "resolved" "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz" + "version" "2.1.1" + dependencies: + "ajv" "^8.0.0" + +"ajv-keywords@^3.5.2": + "integrity" "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==" + "resolved" "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz" + "version" "3.5.2" + +"ajv-keywords@^5.1.0": + "integrity" "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==" + "resolved" "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz" + "version" "5.1.0" + dependencies: + "fast-deep-equal" "^3.1.3" + +"ajv@^6.10.0", "ajv@^6.12.4", "ajv@^6.12.5", "ajv@^6.9.1": + "integrity" "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==" + "resolved" "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz" + "version" "6.12.6" + dependencies: + "fast-deep-equal" "^3.1.1" + "fast-json-stable-stringify" "^2.0.0" + "json-schema-traverse" "^0.4.1" + "uri-js" "^4.2.2" + +"ajv@^8.0.0": + "integrity" "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==" + "resolved" "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz" + "version" "8.12.0" + dependencies: + "fast-deep-equal" "^3.1.1" + "json-schema-traverse" "^1.0.0" + "require-from-string" "^2.0.2" + "uri-js" "^4.2.2" + +"ajv@^8.8.2", "ajv@^8.9.0": + "integrity" "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==" + "resolved" "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz" + "version" "8.12.0" + dependencies: + "fast-deep-equal" "^3.1.1" + "json-schema-traverse" "^1.0.0" + "require-from-string" "^2.0.2" + "uri-js" "^4.2.2" + +"ansi-escapes@^4.2.1": + "integrity" "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==" + "resolved" "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz" + "version" "4.3.2" + dependencies: + "type-fest" "^0.21.3" + +"ansi-regex@^5.0.1": + "integrity" "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==" + "resolved" "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz" + "version" "5.0.1" + +"ansi-sequence-parser@^1.1.0": + "integrity" "sha512-lEm8mt52to2fT8GhciPCGeCXACSz2UwIN4X2e2LJSnZ5uAbn2/dsYdOmUXq0AtWS5cpAupysIneExOgH0Vd2TQ==" + "resolved" "https://registry.npmjs.org/ansi-sequence-parser/-/ansi-sequence-parser-1.1.0.tgz" + "version" "1.1.0" + +"ansi-styles@^3.2.1": + "integrity" "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==" + "resolved" "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz" + "version" "3.2.1" + dependencies: + "color-convert" "^1.9.0" + +"ansi-styles@^4.0.0", "ansi-styles@^4.1.0": + "integrity" "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==" + "resolved" "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz" + "version" "4.3.0" + dependencies: + "color-convert" "^2.0.1" + +"ansi-styles@^5.0.0": + "integrity" "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==" + "resolved" "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz" + "version" "5.2.0" + +"anymatch@^3.0.3": + "integrity" "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==" + "resolved" "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz" + "version" "3.1.3" + dependencies: + "normalize-path" "^3.0.0" + "picomatch" "^2.0.4" + +"arg@^4.1.0": + "integrity" "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==" + "resolved" "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz" + "version" "4.1.3" + +"argparse@^1.0.7": + "integrity" "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==" + "resolved" "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz" + "version" "1.0.10" + dependencies: + "sprintf-js" "~1.0.2" + +"argparse@^2.0.1": + "integrity" "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" + "resolved" "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz" + "version" "2.0.1" + +"array-union@^2.1.0": + "integrity" "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==" + "resolved" "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz" + "version" "2.1.0" + +"asynckit@^0.4.0": + "integrity" "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" + "resolved" "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz" + "version" "0.4.0" + +"babel-jest@^27.5.1", "babel-jest@>=27.0.0 <28": + "integrity" "sha512-cdQ5dXjGRd0IBRATiQ4mZGlGlRE8kJpjPOixdNRdT+m3UcNqmYWN6rK6nvtXYfY3D76cb8s/O1Ss8ea24PIwcg==" + "resolved" "https://registry.npmjs.org/babel-jest/-/babel-jest-27.5.1.tgz" + "version" "27.5.1" dependencies: "@jest/transform" "^27.5.1" "@jest/types" "^27.5.1" "@types/babel__core" "^7.1.14" - babel-plugin-istanbul "^6.1.1" - babel-preset-jest "^27.5.1" - chalk "^4.0.0" - graceful-fs "^4.2.9" - slash "^3.0.0" + "babel-plugin-istanbul" "^6.1.1" + "babel-preset-jest" "^27.5.1" + "chalk" "^4.0.0" + "graceful-fs" "^4.2.9" + "slash" "^3.0.0" -babel-plugin-istanbul@^6.1.1: - version "6.1.1" - resolved "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz" - integrity sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA== +"babel-plugin-istanbul@^6.1.1": + "integrity" "sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==" + "resolved" "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz" + "version" "6.1.1" dependencies: "@babel/helper-plugin-utils" "^7.0.0" "@istanbuljs/load-nyc-config" "^1.0.0" "@istanbuljs/schema" "^0.1.2" - istanbul-lib-instrument "^5.0.4" - test-exclude "^6.0.0" + "istanbul-lib-instrument" "^5.0.4" + "test-exclude" "^6.0.0" -babel-plugin-jest-hoist@^27.5.1: - version "27.5.1" - resolved "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-27.5.1.tgz" - integrity sha512-50wCwD5EMNW4aRpOwtqzyZHIewTYNxLA4nhB+09d8BIssfNfzBRhkBIHiaPv1Si226TQSvp8gxAJm2iY2qs2hQ== +"babel-plugin-jest-hoist@^27.5.1": + "integrity" "sha512-50wCwD5EMNW4aRpOwtqzyZHIewTYNxLA4nhB+09d8BIssfNfzBRhkBIHiaPv1Si226TQSvp8gxAJm2iY2qs2hQ==" + "resolved" "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-27.5.1.tgz" + "version" "27.5.1" dependencies: "@babel/template" "^7.3.3" "@babel/types" "^7.3.3" "@types/babel__core" "^7.0.0" "@types/babel__traverse" "^7.0.6" -babel-preset-current-node-syntax@^1.0.0: - version "1.0.1" - resolved "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz" - integrity sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ== +"babel-preset-current-node-syntax@^1.0.0": + "integrity" "sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==" + "resolved" "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz" + "version" "1.0.1" dependencies: "@babel/plugin-syntax-async-generators" "^7.8.4" "@babel/plugin-syntax-bigint" "^7.8.3" @@ -1058,500 +1226,441 @@ babel-preset-current-node-syntax@^1.0.0: "@babel/plugin-syntax-optional-chaining" "^7.8.3" "@babel/plugin-syntax-top-level-await" "^7.8.3" -babel-preset-jest@^27.5.1: - version "27.5.1" - resolved "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-27.5.1.tgz" - integrity sha512-Nptf2FzlPCWYuJg41HBqXVT8ym6bXOevuCTbhxlUpjwtysGaIWFvDEjp4y+G7fl13FgOdjs7P/DmErqH7da0Ag== - dependencies: - babel-plugin-jest-hoist "^27.5.1" - babel-preset-current-node-syntax "^1.0.0" - -balanced-match@^1.0.0: - version "1.0.2" - resolved "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz" - integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== - -body-parser@1.20.1: - version "1.20.1" - resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.20.1.tgz#b1812a8912c195cd371a3ee5e66faa2338a5c668" - integrity sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw== - dependencies: - bytes "3.1.2" - content-type "~1.0.4" - debug "2.6.9" - depd "2.0.0" - destroy "1.2.0" - http-errors "2.0.0" - iconv-lite "0.4.24" - on-finished "2.4.1" - qs "6.11.0" - raw-body "2.5.1" - type-is "~1.6.18" - unpipe "1.0.0" - -brace-expansion@^1.1.7: - version "1.1.11" - resolved "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz" - integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== - dependencies: - balanced-match "^1.0.0" - concat-map "0.0.1" - -brace-expansion@^2.0.1: - version "2.0.1" - resolved "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz" - integrity sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA== - dependencies: - balanced-match "^1.0.0" - -braces@^3.0.2: - version "3.0.2" - resolved "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz" - integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== - dependencies: - fill-range "^7.0.1" - -browser-process-hrtime@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz" - integrity sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow== - -browserslist@^4.21.9: - version "4.21.9" - resolved "https://registry.npmjs.org/browserslist/-/browserslist-4.21.9.tgz" - integrity sha512-M0MFoZzbUrRU4KNfCrDLnvyE7gub+peetoTid3TBIqtunaDJyXlwhakT+/VkvSXcfIzFfK/nkCs4nmyTmxdNSg== - dependencies: - caniuse-lite "^1.0.30001503" - electron-to-chromium "^1.4.431" - node-releases "^2.0.12" - update-browserslist-db "^1.0.11" - -bs-logger@0.x: - version "0.2.6" - resolved "https://registry.npmjs.org/bs-logger/-/bs-logger-0.2.6.tgz" - integrity sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog== - dependencies: - fast-json-stable-stringify "2.x" - -bser@2.1.1: - version "2.1.1" - resolved "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz" - integrity sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ== - dependencies: - node-int64 "^0.4.0" - -buffer-from@^1.0.0: - version "1.1.2" - resolved "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz" - integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ== - -bytes@3.1.2: - version "3.1.2" - resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.2.tgz#8b0beeb98605adf1b128fa4386403c009e0221a5" - integrity sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg== - -call-bind@^1.0.0: - version "1.0.2" - resolved "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz" - integrity sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA== - dependencies: - function-bind "^1.1.1" - get-intrinsic "^1.0.2" - -callsites@^3.0.0: - version "3.1.0" - resolved "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz" - integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== - -camelcase@^5.3.1: - version "5.3.1" - resolved "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz" - integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== - -camelcase@^6.2.0: - version "6.3.0" - resolved "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz" - integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA== - -caniuse-lite@^1.0.30001503: - version "1.0.30001517" - resolved "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001517.tgz" - integrity sha512-Vdhm5S11DaFVLlyiKu4hiUTkpZu+y1KA/rZZqVQfOD5YdDT/eQKlkt7NaE0WGOFgX32diqt9MiP9CAiFeRklaA== - -chalk@^2.0.0: - version "2.4.2" - resolved "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz" - integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== - dependencies: - ansi-styles "^3.2.1" - escape-string-regexp "^1.0.5" - supports-color "^5.3.0" - -chalk@^4.0.0: - version "4.1.2" - resolved "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz" - integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== - dependencies: - ansi-styles "^4.1.0" - supports-color "^7.1.0" - -char-regex@^1.0.2: - version "1.0.2" - resolved "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz" - integrity sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw== - -chownr@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz" - integrity sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ== - -ci-info@^3.2.0: - version "3.8.0" - resolved "https://registry.npmjs.org/ci-info/-/ci-info-3.8.0.tgz" - integrity sha512-eXTggHWSooYhq49F2opQhuHWgzucfF2YgODK4e1566GQs5BIfP30B0oenwBJHfWxAs2fyPB1s7Mg949zLf61Yw== - -cjs-module-lexer@^1.0.0: - version "1.2.3" - resolved "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.2.3.tgz" - integrity sha512-0TNiGstbQmCFwt4akjjBg5pLRTSyj/PkWQ1ZoO2zntmg9yLqSRxwEa4iCfQLGjqhiqBfOJa7W/E8wfGrTDmlZQ== - -class-transformer@^0.5.1: - version "0.5.1" - resolved "https://registry.npmjs.org/class-transformer/-/class-transformer-0.5.1.tgz" - integrity sha512-SQa1Ws6hUbfC98vKGxZH3KFY0Y1lm5Zm0SY8XX9zbK7FJCyVEac3ATW0RIpwzW+oOfmHE5PMPufDG9hCfoEOMw== - -cliui@^7.0.2: - version "7.0.4" - resolved "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz" - integrity sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ== - dependencies: - string-width "^4.2.0" - strip-ansi "^6.0.0" - wrap-ansi "^7.0.0" - -co@^4.6.0: - version "4.6.0" - resolved "https://registry.npmjs.org/co/-/co-4.6.0.tgz" - integrity sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ== - -collect-v8-coverage@^1.0.0: - version "1.0.2" - resolved "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.2.tgz" - integrity sha512-lHl4d5/ONEbLlJvaJNtsF/Lz+WvB07u2ycqTYbdrq7UypDXailES4valYb2eWiJFxZlVmpGekfqoxQhzyFdT4Q== - -color-convert@^1.9.0: - version "1.9.3" - resolved "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz" - integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== - dependencies: - color-name "1.1.3" - -color-convert@^2.0.1: - version "2.0.1" - resolved "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz" - integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== - dependencies: - color-name "~1.1.4" - -color-name@1.1.3: - version "1.1.3" - resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz" - integrity sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw== - -color-name@~1.1.4: - version "1.1.4" - resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz" - integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== - -combined-stream@^1.0.8: - version "1.0.8" - resolved "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz" - integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== - dependencies: - delayed-stream "~1.0.0" - -concat-map@0.0.1: - version "0.0.1" - resolved "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz" - integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== - -content-disposition@0.5.4: - version "0.5.4" - resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.4.tgz#8b82b4efac82512a02bb0b1dcec9d2c5e8eb5bfe" - integrity sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ== - dependencies: - safe-buffer "5.2.1" - -content-type@~1.0.4: - version "1.0.5" - resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.5.tgz#8b773162656d1d1086784c8f23a54ce6d73d7918" - integrity sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA== - -convert-source-map@^1.4.0, convert-source-map@^1.6.0, convert-source-map@^1.7.0: - version "1.9.0" - resolved "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz" - integrity sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A== - -cookie-signature@1.0.6: - version "1.0.6" - resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c" - integrity sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ== - -cookie@0.5.0: - version "0.5.0" - resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.5.0.tgz#d1f5d71adec6558c58f389987c366aa47e994f8b" - integrity sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw== - -copy-webpack-plugin@^11.0.0: - version "11.0.0" - resolved "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-11.0.0.tgz" - integrity sha512-fX2MWpamkW0hZxMEg0+mYnA40LTosOSa5TqZ9GYIBzyJa9C3QUaMPSE2xAi/buNr8u89SfD9wHSQVBzrRa/SOQ== - dependencies: - fast-glob "^3.2.11" - glob-parent "^6.0.1" - globby "^13.1.1" - normalize-path "^3.0.0" - schema-utils "^4.0.0" - serialize-javascript "^6.0.0" - -create-require@^1.1.0: - version "1.1.1" - resolved "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz" - integrity sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ== - -cross-spawn@^7.0.2, cross-spawn@^7.0.3: - version "7.0.3" - resolved "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz" - integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== - dependencies: - path-key "^3.1.0" - shebang-command "^2.0.0" - which "^2.0.1" - -cssom@^0.4.4: - version "0.4.4" - resolved "https://registry.npmjs.org/cssom/-/cssom-0.4.4.tgz" - integrity sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw== - -cssom@~0.3.6: - version "0.3.8" - resolved "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz" - integrity sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg== - -cssstyle@^2.3.0: - version "2.3.0" - resolved "https://registry.npmjs.org/cssstyle/-/cssstyle-2.3.0.tgz" - integrity sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A== - dependencies: - cssom "~0.3.6" - -data-urls@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/data-urls/-/data-urls-2.0.0.tgz" - integrity sha512-X5eWTSXO/BJmpdIKCRuKUgSCgAN0OwliVK3yPKbwIWU1Tdw5BRajxlzMidvh+gwko9AfQ9zIj52pzF91Q3YAvQ== - dependencies: - abab "^2.0.3" - whatwg-mimetype "^2.3.0" - whatwg-url "^8.0.0" - -debug@2.6.9: - version "2.6.9" - resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" - integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== - dependencies: - ms "2.0.0" - -debug@4, debug@^4.1.0, debug@^4.1.1, debug@^4.3.2, debug@^4.3.4: - version "4.3.4" - resolved "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz" - integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== - dependencies: - ms "2.1.2" - -decimal.js@^10.2.1: - version "10.4.3" - resolved "https://registry.npmjs.org/decimal.js/-/decimal.js-10.4.3.tgz" - integrity sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA== - -decode-uri-component@^0.2.1: - version "0.2.2" - resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.2.tgz#e69dbe25d37941171dd540e024c444cd5188e1e9" - integrity sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ== - -dedent@^0.7.0: - version "0.7.0" - resolved "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz" - integrity sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA== - -deep-is@^0.1.3: - version "0.1.4" - resolved "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz" - integrity sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ== - -deepmerge@^4.2.2: - version "4.3.1" - resolved "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz" - integrity sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A== - -delayed-stream@~1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz" - integrity sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ== - -depd@2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/depd/-/depd-2.0.0.tgz#b696163cc757560d09cf22cc8fad1571b79e76df" - integrity sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw== - -destroy@1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.2.0.tgz#4803735509ad8be552934c67df614f94e66fa015" - integrity sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg== - -detect-newline@^3.0.0: - version "3.1.0" - resolved "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz" - integrity sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA== - -diff-sequences@^27.5.1: - version "27.5.1" - resolved "https://registry.npmjs.org/diff-sequences/-/diff-sequences-27.5.1.tgz" - integrity sha512-k1gCAXAsNgLwEL+Y8Wvl+M6oEFj5bgazfZULpS5CneoPPXRaCCW7dm+q21Ky2VEE5X+VeRDBVg1Pcvvsr4TtNQ== - -diff-sequences@^28.1.1: - version "28.1.1" - resolved "https://registry.npmjs.org/diff-sequences/-/diff-sequences-28.1.1.tgz" - integrity sha512-FU0iFaH/E23a+a718l8Qa/19bF9p06kgE0KipMOMadwa3SjnaElKzPaUC0vnibs6/B/9ni97s61mcejk8W1fQw== - -diff@^4.0.1: - version "4.0.2" - resolved "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz" - integrity sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A== - -dir-glob@^3.0.1: - version "3.0.1" - resolved "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz" - integrity sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA== - dependencies: - path-type "^4.0.0" - -doctrine@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz" - integrity sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w== - dependencies: - esutils "^2.0.2" - -domexception@^2.0.1: - version "2.0.1" - resolved "https://registry.npmjs.org/domexception/-/domexception-2.0.1.tgz" - integrity sha512-yxJ2mFy/sibVQlu5qHjOkf9J3K6zgmCxgJ94u2EdvDOV09H+32LtRswEcUsmUWN72pVLOEnTSRaIVVzVQgS0dg== - dependencies: - webidl-conversions "^5.0.0" - -dotenv@^16.0.1: - version "16.3.1" - resolved "https://registry.npmjs.org/dotenv/-/dotenv-16.3.1.tgz" - integrity sha512-IPzF4w4/Rd94bA9imS68tZBaYyBWSCE47V1RGuMrB94iyTOIEwRmVL2x/4An+6mETpLrKJ5hQkB8W4kFAadeIQ== - -ee-first@1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" - integrity sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow== - -electron-to-chromium@^1.4.431: - version "1.4.464" - resolved "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.464.tgz" - integrity sha512-guZ84yoou4+ILNdj0XEbmGs6DEWj6zpVOWYpY09GU66yEb0DSYvP/biBPzHn0GuW/3RC/pnaYNUWlQE1fJYtgA== - -emittery@^0.8.1: - version "0.8.1" - resolved "https://registry.npmjs.org/emittery/-/emittery-0.8.1.tgz" - integrity sha512-uDfvUjVrfGJJhymx/kz6prltenw1u7WrCg1oa94zYY8xxVpLLUu045LAT0dhDZdXG58/EpPL/5kA180fQ/qudg== - -emoji-regex@^8.0.0: - version "8.0.0" - resolved "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz" - integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== - -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== - -error-ex@^1.3.1: - version "1.3.2" - resolved "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz" - integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g== - dependencies: - is-arrayish "^0.2.1" - -escalade@^3.1.1: - version "3.1.1" - resolved "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz" - integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw== - -escape-html@~1.0.3: - version "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.5: - version "1.0.5" - resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz" - integrity sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg== - -escape-string-regexp@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz" - integrity sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w== - -escape-string-regexp@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz" - integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== - -escodegen@^2.0.0: - version "2.1.0" - resolved "https://registry.npmjs.org/escodegen/-/escodegen-2.1.0.tgz" - integrity sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w== - dependencies: - esprima "^4.0.1" - estraverse "^5.2.0" - esutils "^2.0.2" +"babel-preset-jest@^27.5.1": + "integrity" "sha512-Nptf2FzlPCWYuJg41HBqXVT8ym6bXOevuCTbhxlUpjwtysGaIWFvDEjp4y+G7fl13FgOdjs7P/DmErqH7da0Ag==" + "resolved" "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-27.5.1.tgz" + "version" "27.5.1" + dependencies: + "babel-plugin-jest-hoist" "^27.5.1" + "babel-preset-current-node-syntax" "^1.0.0" + +"balanced-match@^1.0.0": + "integrity" "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" + "resolved" "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz" + "version" "1.0.2" + +"brace-expansion@^1.1.7": + "integrity" "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==" + "resolved" "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz" + "version" "1.1.11" + dependencies: + "balanced-match" "^1.0.0" + "concat-map" "0.0.1" + +"brace-expansion@^2.0.1": + "integrity" "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==" + "resolved" "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz" + "version" "2.0.1" + dependencies: + "balanced-match" "^1.0.0" + +"braces@^3.0.2": + "integrity" "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==" + "resolved" "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz" + "version" "3.0.2" + dependencies: + "fill-range" "^7.0.1" + +"browser-process-hrtime@^1.0.0": + "integrity" "sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==" + "resolved" "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz" + "version" "1.0.0" + +"browserslist@^4.14.5", "browserslist@^4.21.9", "browserslist@>= 4.21.0": + "integrity" "sha512-M0MFoZzbUrRU4KNfCrDLnvyE7gub+peetoTid3TBIqtunaDJyXlwhakT+/VkvSXcfIzFfK/nkCs4nmyTmxdNSg==" + "resolved" "https://registry.npmjs.org/browserslist/-/browserslist-4.21.9.tgz" + "version" "4.21.9" + dependencies: + "caniuse-lite" "^1.0.30001503" + "electron-to-chromium" "^1.4.431" + "node-releases" "^2.0.12" + "update-browserslist-db" "^1.0.11" + +"bs-logger@0.x": + "integrity" "sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog==" + "resolved" "https://registry.npmjs.org/bs-logger/-/bs-logger-0.2.6.tgz" + "version" "0.2.6" + dependencies: + "fast-json-stable-stringify" "2.x" + +"bser@2.1.1": + "integrity" "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==" + "resolved" "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz" + "version" "2.1.1" + dependencies: + "node-int64" "^0.4.0" + +"buffer-from@^1.0.0": + "integrity" "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==" + "resolved" "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz" + "version" "1.1.2" + +"call-bind@^1.0.0": + "integrity" "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==" + "resolved" "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz" + "version" "1.0.2" + dependencies: + "function-bind" "^1.1.1" + "get-intrinsic" "^1.0.2" + +"callsites@^3.0.0": + "integrity" "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==" + "resolved" "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz" + "version" "3.1.0" + +"camelcase@^5.3.1": + "integrity" "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==" + "resolved" "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz" + "version" "5.3.1" + +"camelcase@^6.2.0": + "integrity" "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==" + "resolved" "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz" + "version" "6.3.0" + +"caniuse-lite@^1.0.30001503": + "integrity" "sha512-Vdhm5S11DaFVLlyiKu4hiUTkpZu+y1KA/rZZqVQfOD5YdDT/eQKlkt7NaE0WGOFgX32diqt9MiP9CAiFeRklaA==" + "resolved" "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001517.tgz" + "version" "1.0.30001517" + +"chalk@^2.4.2": + "integrity" "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==" + "resolved" "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz" + "version" "2.4.2" + dependencies: + "ansi-styles" "^3.2.1" + "escape-string-regexp" "^1.0.5" + "supports-color" "^5.3.0" + +"chalk@^4.0.0": + "integrity" "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==" + "resolved" "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz" + "version" "4.1.2" + dependencies: + "ansi-styles" "^4.1.0" + "supports-color" "^7.1.0" + +"char-regex@^1.0.2": + "integrity" "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==" + "resolved" "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz" + "version" "1.0.2" + +"chownr@^2.0.0": + "integrity" "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==" + "resolved" "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz" + "version" "2.0.0" + +"chrome-trace-event@^1.0.2": + "integrity" "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==" + "resolved" "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz" + "version" "1.0.3" + +"ci-info@^3.2.0": + "integrity" "sha512-eXTggHWSooYhq49F2opQhuHWgzucfF2YgODK4e1566GQs5BIfP30B0oenwBJHfWxAs2fyPB1s7Mg949zLf61Yw==" + "resolved" "https://registry.npmjs.org/ci-info/-/ci-info-3.8.0.tgz" + "version" "3.8.0" + +"cjs-module-lexer@^1.0.0": + "integrity" "sha512-0TNiGstbQmCFwt4akjjBg5pLRTSyj/PkWQ1ZoO2zntmg9yLqSRxwEa4iCfQLGjqhiqBfOJa7W/E8wfGrTDmlZQ==" + "resolved" "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.2.3.tgz" + "version" "1.2.3" + +"class-transformer@^0.5.1": + "integrity" "sha512-SQa1Ws6hUbfC98vKGxZH3KFY0Y1lm5Zm0SY8XX9zbK7FJCyVEac3ATW0RIpwzW+oOfmHE5PMPufDG9hCfoEOMw==" + "resolved" "https://registry.npmjs.org/class-transformer/-/class-transformer-0.5.1.tgz" + "version" "0.5.1" + +"cliui@^7.0.2": + "integrity" "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==" + "resolved" "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz" + "version" "7.0.4" + dependencies: + "string-width" "^4.2.0" + "strip-ansi" "^6.0.0" + "wrap-ansi" "^7.0.0" + +"co@^4.6.0": + "integrity" "sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==" + "resolved" "https://registry.npmjs.org/co/-/co-4.6.0.tgz" + "version" "4.6.0" + +"collect-v8-coverage@^1.0.0": + "integrity" "sha512-lHl4d5/ONEbLlJvaJNtsF/Lz+WvB07u2ycqTYbdrq7UypDXailES4valYb2eWiJFxZlVmpGekfqoxQhzyFdT4Q==" + "resolved" "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.2.tgz" + "version" "1.0.2" + +"color-convert@^1.9.0": + "integrity" "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==" + "resolved" "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz" + "version" "1.9.3" + dependencies: + "color-name" "1.1.3" + +"color-convert@^2.0.1": + "integrity" "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==" + "resolved" "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz" + "version" "2.0.1" + dependencies: + "color-name" "~1.1.4" + +"color-name@~1.1.4": + "integrity" "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + "resolved" "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz" + "version" "1.1.4" + +"color-name@1.1.3": + "integrity" "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" + "resolved" "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz" + "version" "1.1.3" + +"combined-stream@^1.0.8": + "integrity" "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==" + "resolved" "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz" + "version" "1.0.8" + dependencies: + "delayed-stream" "~1.0.0" + +"commander@^2.20.0": + "integrity" "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" + "resolved" "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz" + "version" "2.20.3" + +"concat-map@0.0.1": + "integrity" "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" + "resolved" "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz" + "version" "0.0.1" + +"convert-source-map@^1.4.0", "convert-source-map@^1.6.0", "convert-source-map@^1.7.0": + "integrity" "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==" + "resolved" "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz" + "version" "1.9.0" + +"copy-webpack-plugin@^11.0.0": + "integrity" "sha512-fX2MWpamkW0hZxMEg0+mYnA40LTosOSa5TqZ9GYIBzyJa9C3QUaMPSE2xAi/buNr8u89SfD9wHSQVBzrRa/SOQ==" + "resolved" "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-11.0.0.tgz" + "version" "11.0.0" + dependencies: + "fast-glob" "^3.2.11" + "glob-parent" "^6.0.1" + "globby" "^13.1.1" + "normalize-path" "^3.0.0" + "schema-utils" "^4.0.0" + "serialize-javascript" "^6.0.0" + +"create-require@^1.1.0": + "integrity" "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==" + "resolved" "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz" + "version" "1.1.1" + +"cross-spawn@^7.0.2", "cross-spawn@^7.0.3": + "integrity" "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==" + "resolved" "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz" + "version" "7.0.3" + dependencies: + "path-key" "^3.1.0" + "shebang-command" "^2.0.0" + "which" "^2.0.1" + +"cssom@^0.4.4": + "integrity" "sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw==" + "resolved" "https://registry.npmjs.org/cssom/-/cssom-0.4.4.tgz" + "version" "0.4.4" + +"cssom@~0.3.6": + "integrity" "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==" + "resolved" "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz" + "version" "0.3.8" + +"cssstyle@^2.3.0": + "integrity" "sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==" + "resolved" "https://registry.npmjs.org/cssstyle/-/cssstyle-2.3.0.tgz" + "version" "2.3.0" + dependencies: + "cssom" "~0.3.6" + +"data-urls@^2.0.0": + "integrity" "sha512-X5eWTSXO/BJmpdIKCRuKUgSCgAN0OwliVK3yPKbwIWU1Tdw5BRajxlzMidvh+gwko9AfQ9zIj52pzF91Q3YAvQ==" + "resolved" "https://registry.npmjs.org/data-urls/-/data-urls-2.0.0.tgz" + "version" "2.0.0" + dependencies: + "abab" "^2.0.3" + "whatwg-mimetype" "^2.3.0" + "whatwg-url" "^8.0.0" + +"debug@^4.1.0", "debug@^4.1.1", "debug@^4.3.2", "debug@^4.3.4", "debug@4": + "integrity" "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==" + "resolved" "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz" + "version" "4.3.4" + dependencies: + "ms" "2.1.2" + +"decimal.js@^10.2.1": + "integrity" "sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA==" + "resolved" "https://registry.npmjs.org/decimal.js/-/decimal.js-10.4.3.tgz" + "version" "10.4.3" + +"dedent@^0.7.0": + "integrity" "sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA==" + "resolved" "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz" + "version" "0.7.0" + +"deep-is@^0.1.3": + "integrity" "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==" + "resolved" "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz" + "version" "0.1.4" + +"deepmerge@^4.2.2": + "integrity" "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==" + "resolved" "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz" + "version" "4.3.1" + +"delayed-stream@~1.0.0": + "integrity" "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==" + "resolved" "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz" + "version" "1.0.0" + +"detect-newline@^3.0.0": + "integrity" "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==" + "resolved" "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz" + "version" "3.1.0" + +"diff-sequences@^27.5.1": + "integrity" "sha512-k1gCAXAsNgLwEL+Y8Wvl+M6oEFj5bgazfZULpS5CneoPPXRaCCW7dm+q21Ky2VEE5X+VeRDBVg1Pcvvsr4TtNQ==" + "resolved" "https://registry.npmjs.org/diff-sequences/-/diff-sequences-27.5.1.tgz" + "version" "27.5.1" + +"diff-sequences@^28.1.1": + "integrity" "sha512-FU0iFaH/E23a+a718l8Qa/19bF9p06kgE0KipMOMadwa3SjnaElKzPaUC0vnibs6/B/9ni97s61mcejk8W1fQw==" + "resolved" "https://registry.npmjs.org/diff-sequences/-/diff-sequences-28.1.1.tgz" + "version" "28.1.1" + +"diff@^4.0.1": + "integrity" "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==" + "resolved" "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz" + "version" "4.0.2" + +"dir-glob@^3.0.1": + "integrity" "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==" + "resolved" "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz" + "version" "3.0.1" + dependencies: + "path-type" "^4.0.0" + +"doctrine@^3.0.0": + "integrity" "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==" + "resolved" "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz" + "version" "3.0.0" + dependencies: + "esutils" "^2.0.2" + +"domexception@^2.0.1": + "integrity" "sha512-yxJ2mFy/sibVQlu5qHjOkf9J3K6zgmCxgJ94u2EdvDOV09H+32LtRswEcUsmUWN72pVLOEnTSRaIVVzVQgS0dg==" + "resolved" "https://registry.npmjs.org/domexception/-/domexception-2.0.1.tgz" + "version" "2.0.1" + dependencies: + "webidl-conversions" "^5.0.0" + +"dotenv@^16.0.1": + "integrity" "sha512-IPzF4w4/Rd94bA9imS68tZBaYyBWSCE47V1RGuMrB94iyTOIEwRmVL2x/4An+6mETpLrKJ5hQkB8W4kFAadeIQ==" + "resolved" "https://registry.npmjs.org/dotenv/-/dotenv-16.3.1.tgz" + "version" "16.3.1" + +"electron-to-chromium@^1.4.431": + "integrity" "sha512-guZ84yoou4+ILNdj0XEbmGs6DEWj6zpVOWYpY09GU66yEb0DSYvP/biBPzHn0GuW/3RC/pnaYNUWlQE1fJYtgA==" + "resolved" "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.464.tgz" + "version" "1.4.464" + +"emittery@^0.8.1": + "integrity" "sha512-uDfvUjVrfGJJhymx/kz6prltenw1u7WrCg1oa94zYY8xxVpLLUu045LAT0dhDZdXG58/EpPL/5kA180fQ/qudg==" + "resolved" "https://registry.npmjs.org/emittery/-/emittery-0.8.1.tgz" + "version" "0.8.1" + +"emoji-regex@^8.0.0": + "integrity" "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + "resolved" "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz" + "version" "8.0.0" + +"enhanced-resolve@^5.15.0": + "integrity" "sha512-LXYT42KJ7lpIKECr2mAXIaMldcNCh/7E0KBKOu4KSfkHmP+mZmSs+8V5gBAqisWBy0OO4W5Oyys0GO1Y8KtdKg==" + "resolved" "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.15.0.tgz" + "version" "5.15.0" + dependencies: + "graceful-fs" "^4.2.4" + "tapable" "^2.2.0" + +"error-ex@^1.3.1": + "integrity" "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==" + "resolved" "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz" + "version" "1.3.2" + dependencies: + "is-arrayish" "^0.2.1" + +"es-module-lexer@^1.2.1": + "integrity" "sha512-vZK7T0N2CBmBOixhmjdqx2gWVbFZ4DXZ/NyRMZVlJXPa7CyFS+/a4QQsDGDQy9ZfEzxFuNEsMLeQJnKP2p5/JA==" + "resolved" "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.3.0.tgz" + "version" "1.3.0" + +"escalade@^3.1.1": + "integrity" "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==" + "resolved" "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz" + "version" "3.1.1" + +"escape-string-regexp@^1.0.5": + "integrity" "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==" + "resolved" "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz" + "version" "1.0.5" + +"escape-string-regexp@^2.0.0": + "integrity" "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==" + "resolved" "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz" + "version" "2.0.0" + +"escape-string-regexp@^4.0.0": + "integrity" "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==" + "resolved" "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz" + "version" "4.0.0" + +"escodegen@^2.0.0": + "integrity" "sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==" + "resolved" "https://registry.npmjs.org/escodegen/-/escodegen-2.1.0.tgz" + "version" "2.1.0" + dependencies: + "esprima" "^4.0.1" + "estraverse" "^5.2.0" + "esutils" "^2.0.2" optionalDependencies: - source-map "~0.6.1" + "source-map" "~0.6.1" -eslint-config-prettier@^8.5.0: - version "8.8.0" - resolved "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.8.0.tgz" - integrity sha512-wLbQiFre3tdGgpDv67NQKnJuTlcUVYHas3k+DZCc2U2BadthoEY4B7hLPvAxaqdyOGCzuLfii2fqGph10va7oA== +"eslint-config-prettier@^8.5.0": + "integrity" "sha512-wLbQiFre3tdGgpDv67NQKnJuTlcUVYHas3k+DZCc2U2BadthoEY4B7hLPvAxaqdyOGCzuLfii2fqGph10va7oA==" + "resolved" "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.8.0.tgz" + "version" "8.8.0" -eslint-scope@^5.1.1: - version "5.1.1" - resolved "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz" - integrity sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw== +"eslint-scope@^5.1.1", "eslint-scope@5.1.1": + "integrity" "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==" + "resolved" "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz" + "version" "5.1.1" dependencies: - esrecurse "^4.3.0" - estraverse "^4.1.1" + "esrecurse" "^4.3.0" + "estraverse" "^4.1.1" -eslint-scope@^7.2.0: - version "7.2.1" - resolved "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.1.tgz" - integrity sha512-CvefSOsDdaYYvxChovdrPo/ZGt8d5lrJWleAc1diXRKhHGiTYEI26cvo8Kle/wGnsizoCJjK73FMg1/IkIwiNA== +"eslint-scope@^7.2.0": + "integrity" "sha512-CvefSOsDdaYYvxChovdrPo/ZGt8d5lrJWleAc1diXRKhHGiTYEI26cvo8Kle/wGnsizoCJjK73FMg1/IkIwiNA==" + "resolved" "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.1.tgz" + "version" "7.2.1" dependencies: - esrecurse "^4.3.0" - estraverse "^5.2.0" + "esrecurse" "^4.3.0" + "estraverse" "^5.2.0" -eslint-visitor-keys@^3.3.0, eslint-visitor-keys@^3.4.1: - version "3.4.1" - resolved "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.1.tgz" - integrity sha512-pZnmmLwYzf+kWaM/Qgrvpen51upAktaaiI01nsJD/Yr3lMOdNtq0cxkrrg16w64VtisN6okbs7Q8AfGqj4c9fA== +"eslint-visitor-keys@^3.3.0", "eslint-visitor-keys@^3.4.1": + "integrity" "sha512-pZnmmLwYzf+kWaM/Qgrvpen51upAktaaiI01nsJD/Yr3lMOdNtq0cxkrrg16w64VtisN6okbs7Q8AfGqj4c9fA==" + "resolved" "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.1.tgz" + "version" "3.4.1" -eslint@^8.20.0: - version "8.45.0" - resolved "https://registry.npmjs.org/eslint/-/eslint-8.45.0.tgz" - integrity sha512-pd8KSxiQpdYRfYa9Wufvdoct3ZPQQuVuU5O6scNgMuOMYuxvH0IGaYK0wUFjo4UYYQQCUndlXiMbnxopwvvTiw== +"eslint@*", "eslint@^6.0.0 || ^7.0.0 || ^8.0.0", "eslint@^6.0.0 || ^7.0.0 || >=8.0.0", "eslint@^8.20.0", "eslint@>=7.0.0": + "integrity" "sha512-pd8KSxiQpdYRfYa9Wufvdoct3ZPQQuVuU5O6scNgMuOMYuxvH0IGaYK0wUFjo4UYYQQCUndlXiMbnxopwvvTiw==" + "resolved" "https://registry.npmjs.org/eslint/-/eslint-8.45.0.tgz" + "version" "8.45.0" dependencies: "@eslint-community/eslint-utils" "^4.2.0" "@eslint-community/regexpp" "^4.4.0" @@ -1560,928 +1669,880 @@ eslint@^8.20.0: "@humanwhocodes/config-array" "^0.11.10" "@humanwhocodes/module-importer" "^1.0.1" "@nodelib/fs.walk" "^1.2.8" - ajv "^6.10.0" - chalk "^4.0.0" - cross-spawn "^7.0.2" - debug "^4.3.2" - doctrine "^3.0.0" - escape-string-regexp "^4.0.0" - eslint-scope "^7.2.0" - eslint-visitor-keys "^3.4.1" - espree "^9.6.0" - esquery "^1.4.2" - esutils "^2.0.2" - fast-deep-equal "^3.1.3" - file-entry-cache "^6.0.1" - find-up "^5.0.0" - glob-parent "^6.0.2" - globals "^13.19.0" - graphemer "^1.4.0" - ignore "^5.2.0" - imurmurhash "^0.1.4" - is-glob "^4.0.0" - is-path-inside "^3.0.3" - js-yaml "^4.1.0" - json-stable-stringify-without-jsonify "^1.0.1" - levn "^0.4.1" - lodash.merge "^4.6.2" - minimatch "^3.1.2" - natural-compare "^1.4.0" - optionator "^0.9.3" - strip-ansi "^6.0.1" - text-table "^0.2.0" - -espree@^9.6.0: - version "9.6.1" - resolved "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz" - integrity sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ== - dependencies: - acorn "^8.9.0" - acorn-jsx "^5.3.2" - eslint-visitor-keys "^3.4.1" - -esprima@^4.0.0, esprima@^4.0.1: - version "4.0.1" - resolved "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz" - integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== - -esquery@^1.4.2: - version "1.5.0" - resolved "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz" - integrity sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg== - dependencies: - estraverse "^5.1.0" - -esrecurse@^4.3.0: - version "4.3.0" - resolved "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz" - integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag== - dependencies: - estraverse "^5.2.0" - -estraverse@^4.1.1: - version "4.3.0" - resolved "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz" - integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== - -estraverse@^5.1.0, estraverse@^5.2.0: - version "5.3.0" - resolved "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz" - integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA== - -esutils@^2.0.2: - version "2.0.3" - resolved "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz" - integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== - -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== - -execa@^5.0.0: - version "5.1.1" - resolved "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz" - integrity sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg== - dependencies: - cross-spawn "^7.0.3" - get-stream "^6.0.0" - human-signals "^2.1.0" - is-stream "^2.0.0" - merge-stream "^2.0.0" - npm-run-path "^4.0.1" - onetime "^5.1.2" - signal-exit "^3.0.3" - strip-final-newline "^2.0.0" - -exit@^0.1.2: - version "0.1.2" - resolved "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz" - integrity sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ== - -expect@^27.5.1: - version "27.5.1" - resolved "https://registry.npmjs.org/expect/-/expect-27.5.1.tgz" - integrity sha512-E1q5hSUG2AmYQwQJ041nvgpkODHQvB+RKlB4IYdru6uJsyFTRyZAP463M+1lINorwbqAmUggi6+WwkD8lCS/Dw== + "ajv" "^6.10.0" + "chalk" "^4.0.0" + "cross-spawn" "^7.0.2" + "debug" "^4.3.2" + "doctrine" "^3.0.0" + "escape-string-regexp" "^4.0.0" + "eslint-scope" "^7.2.0" + "eslint-visitor-keys" "^3.4.1" + "espree" "^9.6.0" + "esquery" "^1.4.2" + "esutils" "^2.0.2" + "fast-deep-equal" "^3.1.3" + "file-entry-cache" "^6.0.1" + "find-up" "^5.0.0" + "glob-parent" "^6.0.2" + "globals" "^13.19.0" + "graphemer" "^1.4.0" + "ignore" "^5.2.0" + "imurmurhash" "^0.1.4" + "is-glob" "^4.0.0" + "is-path-inside" "^3.0.3" + "js-yaml" "^4.1.0" + "json-stable-stringify-without-jsonify" "^1.0.1" + "levn" "^0.4.1" + "lodash.merge" "^4.6.2" + "minimatch" "^3.1.2" + "natural-compare" "^1.4.0" + "optionator" "^0.9.3" + "strip-ansi" "^6.0.1" + "text-table" "^0.2.0" + +"espree@^9.6.0": + "integrity" "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==" + "resolved" "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz" + "version" "9.6.1" + dependencies: + "acorn" "^8.9.0" + "acorn-jsx" "^5.3.2" + "eslint-visitor-keys" "^3.4.1" + +"esprima@^4.0.0", "esprima@^4.0.1": + "integrity" "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==" + "resolved" "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz" + "version" "4.0.1" + +"esquery@^1.4.2": + "integrity" "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==" + "resolved" "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz" + "version" "1.5.0" + dependencies: + "estraverse" "^5.1.0" + +"esrecurse@^4.3.0": + "integrity" "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==" + "resolved" "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz" + "version" "4.3.0" + dependencies: + "estraverse" "^5.2.0" + +"estraverse@^4.1.1": + "integrity" "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==" + "resolved" "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz" + "version" "4.3.0" + +"estraverse@^5.1.0": + "integrity" "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==" + "resolved" "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz" + "version" "5.3.0" + +"estraverse@^5.2.0": + "integrity" "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==" + "resolved" "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz" + "version" "5.3.0" + +"esutils@^2.0.2": + "integrity" "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==" + "resolved" "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz" + "version" "2.0.3" + +"events@^3.2.0": + "integrity" "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==" + "resolved" "https://registry.npmjs.org/events/-/events-3.3.0.tgz" + "version" "3.3.0" + +"execa@^5.0.0": + "integrity" "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==" + "resolved" "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz" + "version" "5.1.1" + dependencies: + "cross-spawn" "^7.0.3" + "get-stream" "^6.0.0" + "human-signals" "^2.1.0" + "is-stream" "^2.0.0" + "merge-stream" "^2.0.0" + "npm-run-path" "^4.0.1" + "onetime" "^5.1.2" + "signal-exit" "^3.0.3" + "strip-final-newline" "^2.0.0" + +"exit@^0.1.2": + "integrity" "sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==" + "resolved" "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz" + "version" "0.1.2" + +"expect@^27.5.1": + "integrity" "sha512-E1q5hSUG2AmYQwQJ041nvgpkODHQvB+RKlB4IYdru6uJsyFTRyZAP463M+1lINorwbqAmUggi6+WwkD8lCS/Dw==" + "resolved" "https://registry.npmjs.org/expect/-/expect-27.5.1.tgz" + "version" "27.5.1" dependencies: "@jest/types" "^27.5.1" - jest-get-type "^27.5.1" - jest-matcher-utils "^27.5.1" - jest-message-util "^27.5.1" - -express@^4.17.3: - version "4.18.2" - resolved "https://registry.yarnpkg.com/express/-/express-4.18.2.tgz#3fabe08296e930c796c19e3c516979386ba9fd59" - integrity sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ== - dependencies: - accepts "~1.3.8" - array-flatten "1.1.1" - body-parser "1.20.1" - content-disposition "0.5.4" - content-type "~1.0.4" - cookie "0.5.0" - cookie-signature "1.0.6" - debug "2.6.9" - depd "2.0.0" - encodeurl "~1.0.2" - escape-html "~1.0.3" - etag "~1.8.1" - finalhandler "1.2.0" - fresh "0.5.2" - http-errors "2.0.0" - merge-descriptors "1.0.1" - methods "~1.1.2" - on-finished "2.4.1" - parseurl "~1.3.3" - path-to-regexp "0.1.7" - proxy-addr "~2.0.7" - qs "6.11.0" - range-parser "~1.2.1" - safe-buffer "5.2.1" - send "0.18.0" - serve-static "1.15.0" - setprototypeof "1.2.0" - statuses "2.0.1" - type-is "~1.6.18" - utils-merge "1.0.1" - vary "~1.1.2" - -fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: - version "3.1.3" - resolved "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz" - integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== - -fast-glob@^3.2.11, fast-glob@^3.2.9, fast-glob@^3.3.0: - version "3.3.0" - resolved "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.0.tgz" - integrity sha512-ChDuvbOypPuNjO8yIDf36x7BlZX1smcUMTTcyoIjycexOxd6DFsKsg21qVBzEmr3G7fUKIRy2/psii+CIUt7FA== + "jest-get-type" "^27.5.1" + "jest-matcher-utils" "^27.5.1" + "jest-message-util" "^27.5.1" + +"fast-deep-equal@^3.1.1", "fast-deep-equal@^3.1.3": + "integrity" "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" + "resolved" "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz" + "version" "3.1.3" + +"fast-glob@^3.2.11", "fast-glob@^3.2.9", "fast-glob@^3.3.0": + "integrity" "sha512-ChDuvbOypPuNjO8yIDf36x7BlZX1smcUMTTcyoIjycexOxd6DFsKsg21qVBzEmr3G7fUKIRy2/psii+CIUt7FA==" + "resolved" "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.0.tgz" + "version" "3.3.0" dependencies: "@nodelib/fs.stat" "^2.0.2" "@nodelib/fs.walk" "^1.2.3" - glob-parent "^5.1.2" - merge2 "^1.3.0" - micromatch "^4.0.4" - -fast-json-stable-stringify@2.x, fast-json-stable-stringify@^2.0.0: - version "2.1.0" - resolved "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz" - integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== - -fast-levenshtein@^2.0.6: - version "2.0.6" - resolved "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz" - integrity sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw== - -fastq@^1.6.0: - version "1.15.0" - resolved "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz" - integrity sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw== - dependencies: - reusify "^1.0.4" - -fb-watchman@^2.0.0: - version "2.0.2" - resolved "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.2.tgz" - integrity sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA== - dependencies: - bser "2.1.1" - -file-entry-cache@^6.0.1: - version "6.0.1" - resolved "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz" - integrity sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg== - dependencies: - flat-cache "^3.0.4" - -fill-range@^7.0.1: - version "7.0.1" - resolved "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz" - integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== - dependencies: - to-regex-range "^5.0.1" - -finalhandler@1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.2.0.tgz#7d23fe5731b207b4640e4fcd00aec1f9207a7b32" - integrity sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg== - dependencies: - debug "2.6.9" - encodeurl "~1.0.2" - escape-html "~1.0.3" - on-finished "2.4.1" - parseurl "~1.3.3" - statuses "2.0.1" - unpipe "~1.0.0" - -find-up@^4.0.0, find-up@^4.1.0: - version "4.1.0" - resolved "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz" - integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw== - dependencies: - locate-path "^5.0.0" - path-exists "^4.0.0" - -find-up@^5.0.0: - version "5.0.0" - resolved "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz" - integrity sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng== - dependencies: - locate-path "^6.0.0" - path-exists "^4.0.0" - -flat-cache@^3.0.4: - version "3.0.4" - resolved "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz" - integrity sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg== - dependencies: - flatted "^3.1.0" - rimraf "^3.0.2" - -flatted@^3.1.0: - version "3.2.7" - resolved "https://registry.npmjs.org/flatted/-/flatted-3.2.7.tgz" - integrity sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ== - -form-data@^3.0.0: - version "3.0.1" - resolved "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz" - integrity sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg== - dependencies: - asynckit "^0.4.0" - combined-stream "^1.0.8" - mime-types "^2.1.12" - -forwarded@0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.2.0.tgz#2269936428aad4c15c7ebe9779a84bf0b2a81811" - integrity sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow== - -fresh@0.5.2: - version "0.5.2" - resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" - integrity sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q== - -fs-extra@^10.1.0: - version "10.1.0" - resolved "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz" - integrity sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ== - dependencies: - graceful-fs "^4.2.0" - jsonfile "^6.0.1" - universalify "^2.0.0" - -fs-minipass@^2.0.0: - version "2.1.0" - resolved "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz" - integrity sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg== - dependencies: - minipass "^3.0.0" - -fs.realpath@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz" - integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== - -fsevents@^2.3.2: - version "2.3.2" - resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a" - integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== - -function-bind@^1.1.1: - version "1.1.1" - resolved "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz" - integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== - -gensync@^1.0.0-beta.2: - version "1.0.0-beta.2" - resolved "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz" - integrity sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg== - -get-caller-file@^2.0.5: - version "2.0.5" - resolved "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz" - integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== - -get-intrinsic@^1.0.2: - version "1.2.1" - resolved "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.1.tgz" - integrity sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw== - dependencies: - function-bind "^1.1.1" - has "^1.0.3" - has-proto "^1.0.1" - has-symbols "^1.0.3" - -get-package-type@^0.1.0: - version "0.1.0" - resolved "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz" - integrity sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q== - -get-stream@^6.0.0: - version "6.0.1" - resolved "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz" - integrity sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg== - -glob-parent@^5.1.2: - version "5.1.2" - resolved "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz" - integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== - dependencies: - is-glob "^4.0.1" - -glob-parent@^6.0.1, glob-parent@^6.0.2: - version "6.0.2" - resolved "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz" - integrity sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A== - dependencies: - is-glob "^4.0.3" - -glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4: - version "7.2.3" - resolved "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz" - integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== - dependencies: - fs.realpath "^1.0.0" - inflight "^1.0.4" - inherits "2" - minimatch "^3.1.1" - once "^1.3.0" - path-is-absolute "^1.0.0" - -globals@^11.1.0: - version "11.12.0" - resolved "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz" - integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== - -globals@^13.19.0: - version "13.20.0" - resolved "https://registry.npmjs.org/globals/-/globals-13.20.0.tgz" - integrity sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ== - dependencies: - type-fest "^0.20.2" - -globby@^11.1.0: - version "11.1.0" - resolved "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz" - integrity sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g== - dependencies: - array-union "^2.1.0" - dir-glob "^3.0.1" - fast-glob "^3.2.9" - ignore "^5.2.0" - merge2 "^1.4.1" - slash "^3.0.0" - -globby@^13.1.1: - version "13.2.2" - resolved "https://registry.npmjs.org/globby/-/globby-13.2.2.tgz" - integrity sha512-Y1zNGV+pzQdh7H39l9zgB4PJqjRNqydvdYCDG4HFXM4XuvSaQQlEc91IU1yALL8gUTDomgBAfz3XJdmUS+oo0w== - dependencies: - dir-glob "^3.0.1" - fast-glob "^3.3.0" - ignore "^5.2.4" - merge2 "^1.4.1" - slash "^4.0.0" - -graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.9: - version "4.2.11" - resolved "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz" - integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ== - -graphemer@^1.4.0: - version "1.4.0" - resolved "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz" - integrity sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag== - -handlebars@^4.7.7: - version "4.7.7" - resolved "https://registry.npmjs.org/handlebars/-/handlebars-4.7.7.tgz" - integrity sha512-aAcXm5OAfE/8IXkcZvCepKU3VzW1/39Fb5ZuqMtgI/hT8X2YgoMvBY5dLhq/cpOvw7Lk1nK/UF71aLG/ZnVYRA== - dependencies: - minimist "^1.2.5" - neo-async "^2.6.0" - source-map "^0.6.1" - wordwrap "^1.0.0" + "glob-parent" "^5.1.2" + "merge2" "^1.3.0" + "micromatch" "^4.0.4" + +"fast-json-stable-stringify@^2.0.0", "fast-json-stable-stringify@2.x": + "integrity" "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==" + "resolved" "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz" + "version" "2.1.0" + +"fast-levenshtein@^2.0.6": + "integrity" "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==" + "resolved" "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz" + "version" "2.0.6" + +"fastq@^1.6.0": + "integrity" "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==" + "resolved" "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz" + "version" "1.15.0" + dependencies: + "reusify" "^1.0.4" + +"fb-watchman@^2.0.0": + "integrity" "sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==" + "resolved" "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.2.tgz" + "version" "2.0.2" + dependencies: + "bser" "2.1.1" + +"file-entry-cache@^6.0.1": + "integrity" "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==" + "resolved" "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz" + "version" "6.0.1" + dependencies: + "flat-cache" "^3.0.4" + +"fill-range@^7.0.1": + "integrity" "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==" + "resolved" "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz" + "version" "7.0.1" + dependencies: + "to-regex-range" "^5.0.1" + +"find-up@^4.0.0": + "integrity" "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==" + "resolved" "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz" + "version" "4.1.0" + dependencies: + "locate-path" "^5.0.0" + "path-exists" "^4.0.0" + +"find-up@^4.1.0": + "integrity" "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==" + "resolved" "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz" + "version" "4.1.0" + dependencies: + "locate-path" "^5.0.0" + "path-exists" "^4.0.0" + +"find-up@^5.0.0": + "integrity" "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==" + "resolved" "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz" + "version" "5.0.0" + dependencies: + "locate-path" "^6.0.0" + "path-exists" "^4.0.0" + +"flat-cache@^3.0.4": + "integrity" "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==" + "resolved" "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz" + "version" "3.0.4" + dependencies: + "flatted" "^3.1.0" + "rimraf" "^3.0.2" + +"flatted@^3.1.0": + "integrity" "sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==" + "resolved" "https://registry.npmjs.org/flatted/-/flatted-3.2.7.tgz" + "version" "3.2.7" + +"form-data@^3.0.0": + "integrity" "sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==" + "resolved" "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz" + "version" "3.0.1" + dependencies: + "asynckit" "^0.4.0" + "combined-stream" "^1.0.8" + "mime-types" "^2.1.12" + +"fs-extra@^10.1.0": + "integrity" "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==" + "resolved" "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz" + "version" "10.1.0" + dependencies: + "graceful-fs" "^4.2.0" + "jsonfile" "^6.0.1" + "universalify" "^2.0.0" + +"fs-minipass@^2.0.0": + "integrity" "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==" + "resolved" "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz" + "version" "2.1.0" + dependencies: + "minipass" "^3.0.0" + +"fs.realpath@^1.0.0": + "integrity" "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" + "resolved" "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz" + "version" "1.0.0" + +"fsevents@^2.3.2": + "integrity" "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==" + "resolved" "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz" + "version" "2.3.2" + +"function-bind@^1.1.1": + "integrity" "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" + "resolved" "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz" + "version" "1.1.1" + +"gensync@^1.0.0-beta.2": + "integrity" "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==" + "resolved" "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz" + "version" "1.0.0-beta.2" + +"get-caller-file@^2.0.5": + "integrity" "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==" + "resolved" "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz" + "version" "2.0.5" + +"get-intrinsic@^1.0.2": + "integrity" "sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==" + "resolved" "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.1.tgz" + "version" "1.2.1" + dependencies: + "function-bind" "^1.1.1" + "has" "^1.0.3" + "has-proto" "^1.0.1" + "has-symbols" "^1.0.3" + +"get-package-type@^0.1.0": + "integrity" "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==" + "resolved" "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz" + "version" "0.1.0" + +"get-stream@^6.0.0": + "integrity" "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==" + "resolved" "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz" + "version" "6.0.1" + +"glob-parent@^5.1.2": + "integrity" "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==" + "resolved" "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz" + "version" "5.1.2" + dependencies: + "is-glob" "^4.0.1" + +"glob-parent@^6.0.1", "glob-parent@^6.0.2": + "integrity" "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==" + "resolved" "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz" + "version" "6.0.2" + dependencies: + "is-glob" "^4.0.3" + +"glob-to-regexp@^0.4.1": + "integrity" "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==" + "resolved" "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz" + "version" "0.4.1" + +"glob@^7.1.1", "glob@^7.1.2", "glob@^7.1.3", "glob@^7.1.4": + "integrity" "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==" + "resolved" "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz" + "version" "7.2.3" + dependencies: + "fs.realpath" "^1.0.0" + "inflight" "^1.0.4" + "inherits" "2" + "minimatch" "^3.1.1" + "once" "^1.3.0" + "path-is-absolute" "^1.0.0" + +"globals@^11.1.0": + "integrity" "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==" + "resolved" "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz" + "version" "11.12.0" + +"globals@^13.19.0": + "integrity" "sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==" + "resolved" "https://registry.npmjs.org/globals/-/globals-13.20.0.tgz" + "version" "13.20.0" + dependencies: + "type-fest" "^0.20.2" + +"globby@^11.1.0": + "integrity" "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==" + "resolved" "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz" + "version" "11.1.0" + dependencies: + "array-union" "^2.1.0" + "dir-glob" "^3.0.1" + "fast-glob" "^3.2.9" + "ignore" "^5.2.0" + "merge2" "^1.4.1" + "slash" "^3.0.0" + +"globby@^13.1.1": + "integrity" "sha512-Y1zNGV+pzQdh7H39l9zgB4PJqjRNqydvdYCDG4HFXM4XuvSaQQlEc91IU1yALL8gUTDomgBAfz3XJdmUS+oo0w==" + "resolved" "https://registry.npmjs.org/globby/-/globby-13.2.2.tgz" + "version" "13.2.2" + dependencies: + "dir-glob" "^3.0.1" + "fast-glob" "^3.3.0" + "ignore" "^5.2.4" + "merge2" "^1.4.1" + "slash" "^4.0.0" + +"graceful-fs@^4.1.2", "graceful-fs@^4.1.6", "graceful-fs@^4.2.0", "graceful-fs@^4.2.4", "graceful-fs@^4.2.9": + "integrity" "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==" + "resolved" "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz" + "version" "4.2.11" + +"graphemer@^1.4.0": + "integrity" "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==" + "resolved" "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz" + "version" "1.4.0" + +"handlebars@^4.7.7": + "integrity" "sha512-aAcXm5OAfE/8IXkcZvCepKU3VzW1/39Fb5ZuqMtgI/hT8X2YgoMvBY5dLhq/cpOvw7Lk1nK/UF71aLG/ZnVYRA==" + "resolved" "https://registry.npmjs.org/handlebars/-/handlebars-4.7.7.tgz" + "version" "4.7.7" + dependencies: + "minimist" "^1.2.5" + "neo-async" "^2.6.0" + "source-map" "^0.6.1" + "wordwrap" "^1.0.0" optionalDependencies: - uglify-js "^3.1.4" - -has-flag@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz" - integrity sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw== - -has-flag@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz" - integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== - -has-proto@^1.0.1: - version "1.0.1" - resolved "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz" - integrity sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg== - -has-symbols@^1.0.3: - version "1.0.3" - resolved "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz" - integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A== - -has@^1.0.3: - version "1.0.3" - resolved "https://registry.npmjs.org/has/-/has-1.0.3.tgz" - integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== - dependencies: - function-bind "^1.1.1" - -html-encoding-sniffer@^2.0.1: - version "2.0.1" - resolved "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-2.0.1.tgz" - integrity sha512-D5JbOMBIR/TVZkubHT+OyT2705QvogUW4IBn6nHd756OwieSF9aDYFj4dv6HHEVGYbHaLETa3WggZYWWMyy3ZQ== - dependencies: - whatwg-encoding "^1.0.5" - -html-escaper@^2.0.0: - version "2.0.2" - resolved "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz" - integrity sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg== - -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== - dependencies: - depd "2.0.0" - inherits "2.0.4" - setprototypeof "1.2.0" - statuses "2.0.1" - toidentifier "1.0.1" - -http-proxy-agent@^4.0.1: - version "4.0.1" - resolved "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz" - integrity sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg== + "uglify-js" "^3.1.4" + +"has-flag@^3.0.0": + "integrity" "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==" + "resolved" "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz" + "version" "3.0.0" + +"has-flag@^4.0.0": + "integrity" "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + "resolved" "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz" + "version" "4.0.0" + +"has-proto@^1.0.1": + "integrity" "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==" + "resolved" "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz" + "version" "1.0.1" + +"has-symbols@^1.0.3": + "integrity" "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==" + "resolved" "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz" + "version" "1.0.3" + +"has@^1.0.3": + "integrity" "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==" + "resolved" "https://registry.npmjs.org/has/-/has-1.0.3.tgz" + "version" "1.0.3" + dependencies: + "function-bind" "^1.1.1" + +"html-encoding-sniffer@^2.0.1": + "integrity" "sha512-D5JbOMBIR/TVZkubHT+OyT2705QvogUW4IBn6nHd756OwieSF9aDYFj4dv6HHEVGYbHaLETa3WggZYWWMyy3ZQ==" + "resolved" "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-2.0.1.tgz" + "version" "2.0.1" + dependencies: + "whatwg-encoding" "^1.0.5" + +"html-escaper@^2.0.0": + "integrity" "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==" + "resolved" "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz" + "version" "2.0.2" + +"http-proxy-agent@^4.0.1": + "integrity" "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==" + "resolved" "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz" + "version" "4.0.1" dependencies: "@tootallnate/once" "1" - agent-base "6" - debug "4" - -https-proxy-agent@^5.0.0: - version "5.0.1" - resolved "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz" - integrity sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA== - dependencies: - agent-base "6" - debug "4" - -human-signals@^2.1.0: - version "2.1.0" - resolved "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz" - integrity sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw== - -iconv-lite@0.4.24: - version "0.4.24" - resolved "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz" - integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== - dependencies: - safer-buffer ">= 2.1.2 < 3" - -ignore@^5.2.0, ignore@^5.2.4: - version "5.2.4" - resolved "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz" - integrity sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ== - -import-fresh@^3.2.1: - version "3.3.0" - resolved "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz" - integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw== - dependencies: - parent-module "^1.0.0" - resolve-from "^4.0.0" - -import-local@^3.0.2: - version "3.1.0" - resolved "https://registry.npmjs.org/import-local/-/import-local-3.1.0.tgz" - integrity sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg== - dependencies: - pkg-dir "^4.2.0" - resolve-cwd "^3.0.0" - -imurmurhash@^0.1.4: - version "0.1.4" - resolved "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz" - integrity sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA== - -inflight@^1.0.4: - version "1.0.6" - resolved "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz" - integrity sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA== - dependencies: - once "^1.3.0" - wrappy "1" - -inherits@2, inherits@2.0.4: - version "2.0.4" - resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" - integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== - -ipaddr.js@1.9.1: - version "1.9.1" - resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.9.1.tgz#bff38543eeb8984825079ff3a2a8e6cbd46781b3" - integrity sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g== - -is-arrayish@^0.2.1: - version "0.2.1" - resolved "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz" - integrity sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg== - -is-core-module@^2.11.0: - version "2.12.1" - resolved "https://registry.npmjs.org/is-core-module/-/is-core-module-2.12.1.tgz" - integrity sha512-Q4ZuBAe2FUsKtyQJoQHlvP8OvBERxO3jEmy1I7hcRXcJBGGHFh/aJBswbXuS9sgrDH2QUO8ilkwNPHvHMd8clg== - dependencies: - has "^1.0.3" - -is-extglob@^2.1.1: - version "2.1.1" - resolved "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz" - integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== - -is-fullwidth-code-point@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz" - integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== - -is-generator-fn@^2.0.0: - version "2.1.0" - resolved "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz" - integrity sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ== - -is-glob@^4.0.0, is-glob@^4.0.1, is-glob@^4.0.3: - version "4.0.3" - resolved "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz" - integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== - dependencies: - is-extglob "^2.1.1" - -is-number@^7.0.0: - version "7.0.0" - resolved "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz" - integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== - -is-path-inside@^3.0.3: - version "3.0.3" - resolved "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz" - integrity sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ== - -is-potential-custom-element-name@^1.0.1: - version "1.0.1" - resolved "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz" - integrity sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ== - -is-stream@^2.0.0: - version "2.0.1" - resolved "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz" - integrity sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg== - -is-typedarray@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz" - integrity sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA== - -isexe@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz" - integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== - -istanbul-lib-coverage@^3.0.0, istanbul-lib-coverage@^3.2.0: - version "3.2.0" - resolved "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz" - integrity sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw== - -istanbul-lib-instrument@^5.0.4, istanbul-lib-instrument@^5.1.0: - version "5.2.1" - resolved "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz" - integrity sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg== + "agent-base" "6" + "debug" "4" + +"https-proxy-agent@^5.0.0": + "integrity" "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==" + "resolved" "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz" + "version" "5.0.1" + dependencies: + "agent-base" "6" + "debug" "4" + +"human-signals@^2.1.0": + "integrity" "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==" + "resolved" "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz" + "version" "2.1.0" + +"iconv-lite@0.4.24": + "integrity" "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==" + "resolved" "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz" + "version" "0.4.24" + dependencies: + "safer-buffer" ">= 2.1.2 < 3" + +"ignore@^5.2.0", "ignore@^5.2.4": + "integrity" "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==" + "resolved" "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz" + "version" "5.2.4" + +"import-fresh@^3.2.1": + "integrity" "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==" + "resolved" "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz" + "version" "3.3.0" + dependencies: + "parent-module" "^1.0.0" + "resolve-from" "^4.0.0" + +"import-local@^3.0.2": + "integrity" "sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==" + "resolved" "https://registry.npmjs.org/import-local/-/import-local-3.1.0.tgz" + "version" "3.1.0" + dependencies: + "pkg-dir" "^4.2.0" + "resolve-cwd" "^3.0.0" + +"imurmurhash@^0.1.4": + "integrity" "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==" + "resolved" "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz" + "version" "0.1.4" + +"inflight@^1.0.4": + "integrity" "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==" + "resolved" "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz" + "version" "1.0.6" + dependencies: + "once" "^1.3.0" + "wrappy" "1" + +"inherits@2": + "integrity" "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + "resolved" "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz" + "version" "2.0.4" + +"is-arrayish@^0.2.1": + "integrity" "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==" + "resolved" "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz" + "version" "0.2.1" + +"is-core-module@^2.11.0": + "integrity" "sha512-Q4ZuBAe2FUsKtyQJoQHlvP8OvBERxO3jEmy1I7hcRXcJBGGHFh/aJBswbXuS9sgrDH2QUO8ilkwNPHvHMd8clg==" + "resolved" "https://registry.npmjs.org/is-core-module/-/is-core-module-2.12.1.tgz" + "version" "2.12.1" + dependencies: + "has" "^1.0.3" + +"is-extglob@^2.1.1": + "integrity" "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==" + "resolved" "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz" + "version" "2.1.1" + +"is-fullwidth-code-point@^3.0.0": + "integrity" "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" + "resolved" "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz" + "version" "3.0.0" + +"is-generator-fn@^2.0.0": + "integrity" "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==" + "resolved" "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz" + "version" "2.1.0" + +"is-glob@^4.0.0", "is-glob@^4.0.1", "is-glob@^4.0.3": + "integrity" "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==" + "resolved" "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz" + "version" "4.0.3" + dependencies: + "is-extglob" "^2.1.1" + +"is-number@^7.0.0": + "integrity" "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==" + "resolved" "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz" + "version" "7.0.0" + +"is-path-inside@^3.0.3": + "integrity" "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==" + "resolved" "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz" + "version" "3.0.3" + +"is-potential-custom-element-name@^1.0.1": + "integrity" "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==" + "resolved" "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz" + "version" "1.0.1" + +"is-stream@^2.0.0": + "integrity" "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==" + "resolved" "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz" + "version" "2.0.1" + +"is-typedarray@^1.0.0": + "integrity" "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==" + "resolved" "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz" + "version" "1.0.0" + +"isexe@^2.0.0": + "integrity" "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" + "resolved" "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz" + "version" "2.0.0" + +"istanbul-lib-coverage@^3.0.0", "istanbul-lib-coverage@^3.2.0": + "integrity" "sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==" + "resolved" "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz" + "version" "3.2.0" + +"istanbul-lib-instrument@^5.0.4", "istanbul-lib-instrument@^5.1.0": + "integrity" "sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==" + "resolved" "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz" + "version" "5.2.1" dependencies: "@babel/core" "^7.12.3" "@babel/parser" "^7.14.7" "@istanbuljs/schema" "^0.1.2" - istanbul-lib-coverage "^3.2.0" - semver "^6.3.0" + "istanbul-lib-coverage" "^3.2.0" + "semver" "^6.3.0" -istanbul-lib-report@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz" - integrity sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw== +"istanbul-lib-report@^3.0.0": + "integrity" "sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==" + "resolved" "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz" + "version" "3.0.0" dependencies: - istanbul-lib-coverage "^3.0.0" - make-dir "^3.0.0" - supports-color "^7.1.0" + "istanbul-lib-coverage" "^3.0.0" + "make-dir" "^3.0.0" + "supports-color" "^7.1.0" -istanbul-lib-source-maps@^4.0.0: - version "4.0.1" - resolved "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz" - integrity sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw== +"istanbul-lib-source-maps@^4.0.0": + "integrity" "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==" + "resolved" "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz" + "version" "4.0.1" dependencies: - debug "^4.1.1" - istanbul-lib-coverage "^3.0.0" - source-map "^0.6.1" + "debug" "^4.1.1" + "istanbul-lib-coverage" "^3.0.0" + "source-map" "^0.6.1" -istanbul-reports@^3.1.3: - version "3.1.5" - resolved "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.5.tgz" - integrity sha512-nUsEMa9pBt/NOHqbcbeJEgqIlY/K7rVWUX6Lql2orY5e9roQOthbR3vtY4zzf2orPELg80fnxxk9zUyPlgwD1w== +"istanbul-reports@^3.1.3": + "integrity" "sha512-nUsEMa9pBt/NOHqbcbeJEgqIlY/K7rVWUX6Lql2orY5e9roQOthbR3vtY4zzf2orPELg80fnxxk9zUyPlgwD1w==" + "resolved" "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.5.tgz" + "version" "3.1.5" dependencies: - html-escaper "^2.0.0" - istanbul-lib-report "^3.0.0" + "html-escaper" "^2.0.0" + "istanbul-lib-report" "^3.0.0" -jest-changed-files@^27.5.1: - version "27.5.1" - resolved "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-27.5.1.tgz" - integrity sha512-buBLMiByfWGCoMsLLzGUUSpAmIAGnbR2KJoMN10ziLhOLvP4e0SlypHnAel8iqQXTrcbmfEY9sSqae5sgUsTvw== +"jest-changed-files@^27.5.1": + "integrity" "sha512-buBLMiByfWGCoMsLLzGUUSpAmIAGnbR2KJoMN10ziLhOLvP4e0SlypHnAel8iqQXTrcbmfEY9sSqae5sgUsTvw==" + "resolved" "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-27.5.1.tgz" + "version" "27.5.1" dependencies: "@jest/types" "^27.5.1" - execa "^5.0.0" - throat "^6.0.1" + "execa" "^5.0.0" + "throat" "^6.0.1" -jest-circus@^27.5.1: - version "27.5.1" - resolved "https://registry.npmjs.org/jest-circus/-/jest-circus-27.5.1.tgz" - integrity sha512-D95R7x5UtlMA5iBYsOHFFbMD/GVA4R/Kdq15f7xYWUfWHBto9NYRsOvnSauTgdF+ogCpJ4tyKOXhUifxS65gdw== +"jest-circus@^27.5.1": + "integrity" "sha512-D95R7x5UtlMA5iBYsOHFFbMD/GVA4R/Kdq15f7xYWUfWHBto9NYRsOvnSauTgdF+ogCpJ4tyKOXhUifxS65gdw==" + "resolved" "https://registry.npmjs.org/jest-circus/-/jest-circus-27.5.1.tgz" + "version" "27.5.1" dependencies: "@jest/environment" "^27.5.1" "@jest/test-result" "^27.5.1" "@jest/types" "^27.5.1" "@types/node" "*" - chalk "^4.0.0" - co "^4.6.0" - dedent "^0.7.0" - expect "^27.5.1" - is-generator-fn "^2.0.0" - jest-each "^27.5.1" - jest-matcher-utils "^27.5.1" - jest-message-util "^27.5.1" - jest-runtime "^27.5.1" - jest-snapshot "^27.5.1" - jest-util "^27.5.1" - pretty-format "^27.5.1" - slash "^3.0.0" - stack-utils "^2.0.3" - throat "^6.0.1" - -jest-cli@^27.5.1: - version "27.5.1" - resolved "https://registry.npmjs.org/jest-cli/-/jest-cli-27.5.1.tgz" - integrity sha512-Hc6HOOwYq4/74/c62dEE3r5elx8wjYqxY0r0G/nFrLDPMFRu6RA/u8qINOIkvhxG7mMQ5EJsOGfRpI8L6eFUVw== + "chalk" "^4.0.0" + "co" "^4.6.0" + "dedent" "^0.7.0" + "expect" "^27.5.1" + "is-generator-fn" "^2.0.0" + "jest-each" "^27.5.1" + "jest-matcher-utils" "^27.5.1" + "jest-message-util" "^27.5.1" + "jest-runtime" "^27.5.1" + "jest-snapshot" "^27.5.1" + "jest-util" "^27.5.1" + "pretty-format" "^27.5.1" + "slash" "^3.0.0" + "stack-utils" "^2.0.3" + "throat" "^6.0.1" + +"jest-cli@^27.5.1": + "integrity" "sha512-Hc6HOOwYq4/74/c62dEE3r5elx8wjYqxY0r0G/nFrLDPMFRu6RA/u8qINOIkvhxG7mMQ5EJsOGfRpI8L6eFUVw==" + "resolved" "https://registry.npmjs.org/jest-cli/-/jest-cli-27.5.1.tgz" + "version" "27.5.1" dependencies: "@jest/core" "^27.5.1" "@jest/test-result" "^27.5.1" "@jest/types" "^27.5.1" - chalk "^4.0.0" - exit "^0.1.2" - graceful-fs "^4.2.9" - import-local "^3.0.2" - jest-config "^27.5.1" - jest-util "^27.5.1" - jest-validate "^27.5.1" - prompts "^2.0.1" - yargs "^16.2.0" - -jest-config@^27.5.1: - version "27.5.1" - resolved "https://registry.npmjs.org/jest-config/-/jest-config-27.5.1.tgz" - integrity sha512-5sAsjm6tGdsVbW9ahcChPAFCk4IlkQUknH5AvKjuLTSlcO/wCZKyFdn7Rg0EkC+OGgWODEy2hDpWB1PgzH0JNA== + "chalk" "^4.0.0" + "exit" "^0.1.2" + "graceful-fs" "^4.2.9" + "import-local" "^3.0.2" + "jest-config" "^27.5.1" + "jest-util" "^27.5.1" + "jest-validate" "^27.5.1" + "prompts" "^2.0.1" + "yargs" "^16.2.0" + +"jest-config@^27.5.1": + "integrity" "sha512-5sAsjm6tGdsVbW9ahcChPAFCk4IlkQUknH5AvKjuLTSlcO/wCZKyFdn7Rg0EkC+OGgWODEy2hDpWB1PgzH0JNA==" + "resolved" "https://registry.npmjs.org/jest-config/-/jest-config-27.5.1.tgz" + "version" "27.5.1" dependencies: "@babel/core" "^7.8.0" "@jest/test-sequencer" "^27.5.1" "@jest/types" "^27.5.1" - babel-jest "^27.5.1" - chalk "^4.0.0" - ci-info "^3.2.0" - deepmerge "^4.2.2" - glob "^7.1.1" - graceful-fs "^4.2.9" - jest-circus "^27.5.1" - jest-environment-jsdom "^27.5.1" - jest-environment-node "^27.5.1" - jest-get-type "^27.5.1" - jest-jasmine2 "^27.5.1" - jest-regex-util "^27.5.1" - jest-resolve "^27.5.1" - jest-runner "^27.5.1" - jest-util "^27.5.1" - jest-validate "^27.5.1" - micromatch "^4.0.4" - parse-json "^5.2.0" - pretty-format "^27.5.1" - slash "^3.0.0" - strip-json-comments "^3.1.1" - -jest-diff@^27.5.1: - version "27.5.1" - resolved "https://registry.npmjs.org/jest-diff/-/jest-diff-27.5.1.tgz" - integrity sha512-m0NvkX55LDt9T4mctTEgnZk3fmEg3NRYutvMPWM/0iPnkFj2wIeF45O1718cMSOFO1vINkqmxqD8vE37uTEbqw== - dependencies: - chalk "^4.0.0" - diff-sequences "^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.npmjs.org/jest-diff/-/jest-diff-28.1.3.tgz" - 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.npmjs.org/jest-docblock/-/jest-docblock-27.5.1.tgz" - integrity sha512-rl7hlABeTsRYxKiUfpHrQrG4e2obOiTQWfMEH3PxPjOtdsfLQO4ReWSZaQ7DETm4xu07rl4q/h4zcKXyU0/OzQ== - dependencies: - detect-newline "^3.0.0" - -jest-each@^27.5.1: - version "27.5.1" - resolved "https://registry.npmjs.org/jest-each/-/jest-each-27.5.1.tgz" - integrity sha512-1Ff6p+FbhT/bXQnEouYy00bkNSY7OUpfIcmdl8vZ31A1UUaurOLPA8a8BbJOF2RDUElwJhmeaV7LnagI+5UwNQ== + "babel-jest" "^27.5.1" + "chalk" "^4.0.0" + "ci-info" "^3.2.0" + "deepmerge" "^4.2.2" + "glob" "^7.1.1" + "graceful-fs" "^4.2.9" + "jest-circus" "^27.5.1" + "jest-environment-jsdom" "^27.5.1" + "jest-environment-node" "^27.5.1" + "jest-get-type" "^27.5.1" + "jest-jasmine2" "^27.5.1" + "jest-regex-util" "^27.5.1" + "jest-resolve" "^27.5.1" + "jest-runner" "^27.5.1" + "jest-util" "^27.5.1" + "jest-validate" "^27.5.1" + "micromatch" "^4.0.4" + "parse-json" "^5.2.0" + "pretty-format" "^27.5.1" + "slash" "^3.0.0" + "strip-json-comments" "^3.1.1" + +"jest-diff@^27.5.1": + "integrity" "sha512-m0NvkX55LDt9T4mctTEgnZk3fmEg3NRYutvMPWM/0iPnkFj2wIeF45O1718cMSOFO1vINkqmxqD8vE37uTEbqw==" + "resolved" "https://registry.npmjs.org/jest-diff/-/jest-diff-27.5.1.tgz" + "version" "27.5.1" + dependencies: + "chalk" "^4.0.0" + "diff-sequences" "^27.5.1" + "jest-get-type" "^27.5.1" + "pretty-format" "^27.5.1" + +"jest-diff@^28.1.3": + "integrity" "sha512-8RqP1B/OXzjjTWkqMX67iqgwBVJRgCyKD3L9nq+6ZqJMdvjE8RgHktqZ6jNrkdMT+dJuYNI3rhQpxaz7drJHfw==" + "resolved" "https://registry.npmjs.org/jest-diff/-/jest-diff-28.1.3.tgz" + "version" "28.1.3" + 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": + "integrity" "sha512-rl7hlABeTsRYxKiUfpHrQrG4e2obOiTQWfMEH3PxPjOtdsfLQO4ReWSZaQ7DETm4xu07rl4q/h4zcKXyU0/OzQ==" + "resolved" "https://registry.npmjs.org/jest-docblock/-/jest-docblock-27.5.1.tgz" + "version" "27.5.1" + dependencies: + "detect-newline" "^3.0.0" + +"jest-each@^27.5.1": + "integrity" "sha512-1Ff6p+FbhT/bXQnEouYy00bkNSY7OUpfIcmdl8vZ31A1UUaurOLPA8a8BbJOF2RDUElwJhmeaV7LnagI+5UwNQ==" + "resolved" "https://registry.npmjs.org/jest-each/-/jest-each-27.5.1.tgz" + "version" "27.5.1" dependencies: "@jest/types" "^27.5.1" - chalk "^4.0.0" - jest-get-type "^27.5.1" - jest-util "^27.5.1" - pretty-format "^27.5.1" + "chalk" "^4.0.0" + "jest-get-type" "^27.5.1" + "jest-util" "^27.5.1" + "pretty-format" "^27.5.1" -jest-environment-jsdom@^27.5.1: - version "27.5.1" - resolved "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-27.5.1.tgz" - integrity sha512-TFBvkTC1Hnnnrka/fUb56atfDtJ9VMZ94JkjTbggl1PEpwrYtUBKMezB3inLmWqQsXYLcMwNoDQwoBTAvFfsfw== +"jest-environment-jsdom@^27.5.1": + "integrity" "sha512-TFBvkTC1Hnnnrka/fUb56atfDtJ9VMZ94JkjTbggl1PEpwrYtUBKMezB3inLmWqQsXYLcMwNoDQwoBTAvFfsfw==" + "resolved" "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-27.5.1.tgz" + "version" "27.5.1" dependencies: "@jest/environment" "^27.5.1" "@jest/fake-timers" "^27.5.1" "@jest/types" "^27.5.1" "@types/node" "*" - jest-mock "^27.5.1" - jest-util "^27.5.1" - jsdom "^16.6.0" + "jest-mock" "^27.5.1" + "jest-util" "^27.5.1" + "jsdom" "^16.6.0" -jest-environment-node@^27.5.1: - version "27.5.1" - resolved "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-27.5.1.tgz" - integrity sha512-Jt4ZUnxdOsTGwSRAfKEnE6BcwsSPNOijjwifq5sDFSA2kesnXTvNqKHYgM0hDq3549Uf/KzdXNYn4wMZJPlFLw== +"jest-environment-node@^27.5.1": + "integrity" "sha512-Jt4ZUnxdOsTGwSRAfKEnE6BcwsSPNOijjwifq5sDFSA2kesnXTvNqKHYgM0hDq3549Uf/KzdXNYn4wMZJPlFLw==" + "resolved" "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-27.5.1.tgz" + "version" "27.5.1" dependencies: "@jest/environment" "^27.5.1" "@jest/fake-timers" "^27.5.1" "@jest/types" "^27.5.1" "@types/node" "*" - jest-mock "^27.5.1" - jest-util "^27.5.1" + "jest-mock" "^27.5.1" + "jest-util" "^27.5.1" -jest-get-type@^27.5.1: - version "27.5.1" - resolved "https://registry.npmjs.org/jest-get-type/-/jest-get-type-27.5.1.tgz" - integrity sha512-2KY95ksYSaK7DMBWQn6dQz3kqAf3BB64y2udeG+hv4KfSOb9qwcYQstTJc1KCbsix+wLZWZYN8t7nwX3GOBLRw== +"jest-get-type@^27.5.1": + "integrity" "sha512-2KY95ksYSaK7DMBWQn6dQz3kqAf3BB64y2udeG+hv4KfSOb9qwcYQstTJc1KCbsix+wLZWZYN8t7nwX3GOBLRw==" + "resolved" "https://registry.npmjs.org/jest-get-type/-/jest-get-type-27.5.1.tgz" + "version" "27.5.1" -jest-get-type@^28.0.2: - version "28.0.2" - resolved "https://registry.npmjs.org/jest-get-type/-/jest-get-type-28.0.2.tgz" - integrity sha512-ioj2w9/DxSYHfOm5lJKCdcAmPJzQXmbM/Url3rhlghrPvT3tt+7a/+oXc9azkKmLvoiXjtV83bEWqi+vs5nlPA== +"jest-get-type@^28.0.2": + "integrity" "sha512-ioj2w9/DxSYHfOm5lJKCdcAmPJzQXmbM/Url3rhlghrPvT3tt+7a/+oXc9azkKmLvoiXjtV83bEWqi+vs5nlPA==" + "resolved" "https://registry.npmjs.org/jest-get-type/-/jest-get-type-28.0.2.tgz" + "version" "28.0.2" -jest-haste-map@^27.5.1: - version "27.5.1" - resolved "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-27.5.1.tgz" - integrity sha512-7GgkZ4Fw4NFbMSDSpZwXeBiIbx+t/46nJ2QitkOjvwPYyZmqttu2TDSimMHP1EkPOi4xUZAN1doE5Vd25H4Jng== +"jest-haste-map@^27.5.1": + "integrity" "sha512-7GgkZ4Fw4NFbMSDSpZwXeBiIbx+t/46nJ2QitkOjvwPYyZmqttu2TDSimMHP1EkPOi4xUZAN1doE5Vd25H4Jng==" + "resolved" "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-27.5.1.tgz" + "version" "27.5.1" dependencies: "@jest/types" "^27.5.1" "@types/graceful-fs" "^4.1.2" "@types/node" "*" - anymatch "^3.0.3" - fb-watchman "^2.0.0" - graceful-fs "^4.2.9" - jest-regex-util "^27.5.1" - jest-serializer "^27.5.1" - jest-util "^27.5.1" - jest-worker "^27.5.1" - micromatch "^4.0.4" - walker "^1.0.7" + "anymatch" "^3.0.3" + "fb-watchman" "^2.0.0" + "graceful-fs" "^4.2.9" + "jest-regex-util" "^27.5.1" + "jest-serializer" "^27.5.1" + "jest-util" "^27.5.1" + "jest-worker" "^27.5.1" + "micromatch" "^4.0.4" + "walker" "^1.0.7" optionalDependencies: - fsevents "^2.3.2" + "fsevents" "^2.3.2" -jest-jasmine2@^27.5.1: - version "27.5.1" - resolved "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-27.5.1.tgz" - integrity sha512-jtq7VVyG8SqAorDpApwiJJImd0V2wv1xzdheGHRGyuT7gZm6gG47QEskOlzsN1PG/6WNaCo5pmwMHDf3AkG2pQ== +"jest-jasmine2@^27.5.1": + "integrity" "sha512-jtq7VVyG8SqAorDpApwiJJImd0V2wv1xzdheGHRGyuT7gZm6gG47QEskOlzsN1PG/6WNaCo5pmwMHDf3AkG2pQ==" + "resolved" "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-27.5.1.tgz" + "version" "27.5.1" dependencies: "@jest/environment" "^27.5.1" "@jest/source-map" "^27.5.1" "@jest/test-result" "^27.5.1" "@jest/types" "^27.5.1" "@types/node" "*" - chalk "^4.0.0" - co "^4.6.0" - expect "^27.5.1" - is-generator-fn "^2.0.0" - jest-each "^27.5.1" - jest-matcher-utils "^27.5.1" - jest-message-util "^27.5.1" - jest-runtime "^27.5.1" - jest-snapshot "^27.5.1" - jest-util "^27.5.1" - pretty-format "^27.5.1" - throat "^6.0.1" - -jest-leak-detector@^27.5.1: - version "27.5.1" - resolved "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-27.5.1.tgz" - integrity sha512-POXfWAMvfU6WMUXftV4HolnJfnPOGEu10fscNCA76KBpRRhcMN2c8d3iT2pxQS3HLbA+5X4sOUPzYO2NUyIlHQ== - dependencies: - jest-get-type "^27.5.1" - pretty-format "^27.5.1" - -jest-matcher-utils@^27.0.0, jest-matcher-utils@^27.5.1: - version "27.5.1" - resolved "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-27.5.1.tgz" - integrity sha512-z2uTx/T6LBaCoNWNFWwChLBKYxTMcGBRjAt+2SbP929/Fflb9aa5LGma654Rz8z9HLxsrUaYzxE9T/EFIL/PAw== - dependencies: - chalk "^4.0.0" - jest-diff "^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.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-28.1.3.tgz" - 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-message-util@^27.5.1: - version "27.5.1" - resolved "https://registry.npmjs.org/jest-message-util/-/jest-message-util-27.5.1.tgz" - integrity sha512-rMyFe1+jnyAAf+NHwTclDz0eAaLkVDdKVHHBFWsBWHnnh5YeJMNWWsv7AbFYXfK3oTqvL7VTWkhNLu1jX24D+g== + "chalk" "^4.0.0" + "co" "^4.6.0" + "expect" "^27.5.1" + "is-generator-fn" "^2.0.0" + "jest-each" "^27.5.1" + "jest-matcher-utils" "^27.5.1" + "jest-message-util" "^27.5.1" + "jest-runtime" "^27.5.1" + "jest-snapshot" "^27.5.1" + "jest-util" "^27.5.1" + "pretty-format" "^27.5.1" + "throat" "^6.0.1" + +"jest-leak-detector@^27.5.1": + "integrity" "sha512-POXfWAMvfU6WMUXftV4HolnJfnPOGEu10fscNCA76KBpRRhcMN2c8d3iT2pxQS3HLbA+5X4sOUPzYO2NUyIlHQ==" + "resolved" "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-27.5.1.tgz" + "version" "27.5.1" + dependencies: + "jest-get-type" "^27.5.1" + "pretty-format" "^27.5.1" + +"jest-matcher-utils@^27.0.0": + "integrity" "sha512-z2uTx/T6LBaCoNWNFWwChLBKYxTMcGBRjAt+2SbP929/Fflb9aa5LGma654Rz8z9HLxsrUaYzxE9T/EFIL/PAw==" + "resolved" "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-27.5.1.tgz" + "version" "27.5.1" + dependencies: + "chalk" "^4.0.0" + "jest-diff" "^27.5.1" + "jest-get-type" "^27.5.1" + "pretty-format" "^27.5.1" + +"jest-matcher-utils@^27.5.1": + "integrity" "sha512-z2uTx/T6LBaCoNWNFWwChLBKYxTMcGBRjAt+2SbP929/Fflb9aa5LGma654Rz8z9HLxsrUaYzxE9T/EFIL/PAw==" + "resolved" "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-27.5.1.tgz" + "version" "27.5.1" + dependencies: + "chalk" "^4.0.0" + "jest-diff" "^27.5.1" + "jest-get-type" "^27.5.1" + "pretty-format" "^27.5.1" + +"jest-matcher-utils@^28.1.3": + "integrity" "sha512-kQeJ7qHemKfbzKoGjHHrRKH6atgxMk8Enkk2iPQ3XwO6oE/KYD8lMYOziCkeSB9G4adPM4nR1DE8Tf5JeWH6Bw==" + "resolved" "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-28.1.3.tgz" + "version" "28.1.3" + dependencies: + "chalk" "^4.0.0" + "jest-diff" "^28.1.3" + "jest-get-type" "^28.0.2" + "pretty-format" "^28.1.3" + +"jest-message-util@^27.5.1": + "integrity" "sha512-rMyFe1+jnyAAf+NHwTclDz0eAaLkVDdKVHHBFWsBWHnnh5YeJMNWWsv7AbFYXfK3oTqvL7VTWkhNLu1jX24D+g==" + "resolved" "https://registry.npmjs.org/jest-message-util/-/jest-message-util-27.5.1.tgz" + "version" "27.5.1" dependencies: "@babel/code-frame" "^7.12.13" "@jest/types" "^27.5.1" "@types/stack-utils" "^2.0.0" - chalk "^4.0.0" - graceful-fs "^4.2.9" - micromatch "^4.0.4" - pretty-format "^27.5.1" - slash "^3.0.0" - stack-utils "^2.0.3" - -jest-mock@^27.5.1: - version "27.5.1" - resolved "https://registry.npmjs.org/jest-mock/-/jest-mock-27.5.1.tgz" - integrity sha512-K4jKbY1d4ENhbrG2zuPWaQBvDly+iZ2yAW+T1fATN78hc0sInwn7wZB8XtlNnvHug5RMwV897Xm4LqmPM4e2Og== + "chalk" "^4.0.0" + "graceful-fs" "^4.2.9" + "micromatch" "^4.0.4" + "pretty-format" "^27.5.1" + "slash" "^3.0.0" + "stack-utils" "^2.0.3" + +"jest-mock@^27.5.1": + "integrity" "sha512-K4jKbY1d4ENhbrG2zuPWaQBvDly+iZ2yAW+T1fATN78hc0sInwn7wZB8XtlNnvHug5RMwV897Xm4LqmPM4e2Og==" + "resolved" "https://registry.npmjs.org/jest-mock/-/jest-mock-27.5.1.tgz" + "version" "27.5.1" dependencies: "@jest/types" "^27.5.1" "@types/node" "*" -jest-pnp-resolver@^1.2.2: - version "1.2.3" - resolved "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.3.tgz" - integrity sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w== +"jest-pnp-resolver@^1.2.2": + "integrity" "sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==" + "resolved" "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.3.tgz" + "version" "1.2.3" -jest-regex-util@^27.5.1: - version "27.5.1" - resolved "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-27.5.1.tgz" - integrity sha512-4bfKq2zie+x16okqDXjXn9ql2B0dScQu+vcwe4TvFVhkVyuWLqpZrZtXxLLWoXYgn0E87I6r6GRYHF7wFZBUvg== +"jest-regex-util@^27.5.1": + "integrity" "sha512-4bfKq2zie+x16okqDXjXn9ql2B0dScQu+vcwe4TvFVhkVyuWLqpZrZtXxLLWoXYgn0E87I6r6GRYHF7wFZBUvg==" + "resolved" "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-27.5.1.tgz" + "version" "27.5.1" -jest-resolve-dependencies@^27.5.1: - version "27.5.1" - resolved "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-27.5.1.tgz" - integrity sha512-QQOOdY4PE39iawDn5rzbIePNigfe5B9Z91GDD1ae/xNDlu9kaat8QQ5EKnNmVWPV54hUdxCVwwj6YMgR2O7IOg== +"jest-resolve-dependencies@^27.5.1": + "integrity" "sha512-QQOOdY4PE39iawDn5rzbIePNigfe5B9Z91GDD1ae/xNDlu9kaat8QQ5EKnNmVWPV54hUdxCVwwj6YMgR2O7IOg==" + "resolved" "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-27.5.1.tgz" + "version" "27.5.1" dependencies: "@jest/types" "^27.5.1" - jest-regex-util "^27.5.1" - jest-snapshot "^27.5.1" + "jest-regex-util" "^27.5.1" + "jest-snapshot" "^27.5.1" -jest-resolve@^27.5.1: - version "27.5.1" - resolved "https://registry.npmjs.org/jest-resolve/-/jest-resolve-27.5.1.tgz" - integrity sha512-FFDy8/9E6CV83IMbDpcjOhumAQPDyETnU2KZ1O98DwTnz8AOBsW/Xv3GySr1mOZdItLR+zDZ7I/UdTFbgSOVCw== +"jest-resolve@*", "jest-resolve@^27.5.1": + "integrity" "sha512-FFDy8/9E6CV83IMbDpcjOhumAQPDyETnU2KZ1O98DwTnz8AOBsW/Xv3GySr1mOZdItLR+zDZ7I/UdTFbgSOVCw==" + "resolved" "https://registry.npmjs.org/jest-resolve/-/jest-resolve-27.5.1.tgz" + "version" "27.5.1" dependencies: "@jest/types" "^27.5.1" - chalk "^4.0.0" - graceful-fs "^4.2.9" - jest-haste-map "^27.5.1" - jest-pnp-resolver "^1.2.2" - jest-util "^27.5.1" - jest-validate "^27.5.1" - resolve "^1.20.0" - resolve.exports "^1.1.0" - slash "^3.0.0" - -jest-runner@^27.5.1: - version "27.5.1" - resolved "https://registry.npmjs.org/jest-runner/-/jest-runner-27.5.1.tgz" - integrity sha512-g4NPsM4mFCOwFKXO4p/H/kWGdJp9V8kURY2lX8Me2drgXqG7rrZAx5kv+5H7wtt/cdFIjhqYx1HrlqWHaOvDaQ== + "chalk" "^4.0.0" + "graceful-fs" "^4.2.9" + "jest-haste-map" "^27.5.1" + "jest-pnp-resolver" "^1.2.2" + "jest-util" "^27.5.1" + "jest-validate" "^27.5.1" + "resolve" "^1.20.0" + "resolve.exports" "^1.1.0" + "slash" "^3.0.0" + +"jest-runner@^27.5.1": + "integrity" "sha512-g4NPsM4mFCOwFKXO4p/H/kWGdJp9V8kURY2lX8Me2drgXqG7rrZAx5kv+5H7wtt/cdFIjhqYx1HrlqWHaOvDaQ==" + "resolved" "https://registry.npmjs.org/jest-runner/-/jest-runner-27.5.1.tgz" + "version" "27.5.1" dependencies: "@jest/console" "^27.5.1" "@jest/environment" "^27.5.1" @@ -2489,26 +2550,26 @@ jest-runner@^27.5.1: "@jest/transform" "^27.5.1" "@jest/types" "^27.5.1" "@types/node" "*" - chalk "^4.0.0" - emittery "^0.8.1" - graceful-fs "^4.2.9" - jest-docblock "^27.5.1" - jest-environment-jsdom "^27.5.1" - jest-environment-node "^27.5.1" - jest-haste-map "^27.5.1" - jest-leak-detector "^27.5.1" - jest-message-util "^27.5.1" - jest-resolve "^27.5.1" - jest-runtime "^27.5.1" - jest-util "^27.5.1" - jest-worker "^27.5.1" - source-map-support "^0.5.6" - throat "^6.0.1" - -jest-runtime@^27.5.1: - version "27.5.1" - resolved "https://registry.npmjs.org/jest-runtime/-/jest-runtime-27.5.1.tgz" - integrity sha512-o7gxw3Gf+H2IGt8fv0RiyE1+r83FJBRruoA+FXrlHw6xEyBsU8ugA6IPfTdVyA0w8HClpbK+DGJxH59UrNMx8A== + "chalk" "^4.0.0" + "emittery" "^0.8.1" + "graceful-fs" "^4.2.9" + "jest-docblock" "^27.5.1" + "jest-environment-jsdom" "^27.5.1" + "jest-environment-node" "^27.5.1" + "jest-haste-map" "^27.5.1" + "jest-leak-detector" "^27.5.1" + "jest-message-util" "^27.5.1" + "jest-resolve" "^27.5.1" + "jest-runtime" "^27.5.1" + "jest-util" "^27.5.1" + "jest-worker" "^27.5.1" + "source-map-support" "^0.5.6" + "throat" "^6.0.1" + +"jest-runtime@^27.5.1": + "integrity" "sha512-o7gxw3Gf+H2IGt8fv0RiyE1+r83FJBRruoA+FXrlHw6xEyBsU8ugA6IPfTdVyA0w8HClpbK+DGJxH59UrNMx8A==" + "resolved" "https://registry.npmjs.org/jest-runtime/-/jest-runtime-27.5.1.tgz" + "version" "27.5.1" dependencies: "@jest/environment" "^27.5.1" "@jest/fake-timers" "^27.5.1" @@ -2517,34 +2578,34 @@ jest-runtime@^27.5.1: "@jest/test-result" "^27.5.1" "@jest/transform" "^27.5.1" "@jest/types" "^27.5.1" - chalk "^4.0.0" - cjs-module-lexer "^1.0.0" - collect-v8-coverage "^1.0.0" - execa "^5.0.0" - glob "^7.1.3" - graceful-fs "^4.2.9" - jest-haste-map "^27.5.1" - jest-message-util "^27.5.1" - jest-mock "^27.5.1" - jest-regex-util "^27.5.1" - jest-resolve "^27.5.1" - jest-snapshot "^27.5.1" - jest-util "^27.5.1" - slash "^3.0.0" - strip-bom "^4.0.0" - -jest-serializer@^27.5.1: - version "27.5.1" - resolved "https://registry.npmjs.org/jest-serializer/-/jest-serializer-27.5.1.tgz" - integrity sha512-jZCyo6iIxO1aqUxpuBlwTDMkzOAJS4a3eYz3YzgxxVQFwLeSA7Jfq5cbqCY+JLvTDrWirgusI/0KwxKMgrdf7w== + "chalk" "^4.0.0" + "cjs-module-lexer" "^1.0.0" + "collect-v8-coverage" "^1.0.0" + "execa" "^5.0.0" + "glob" "^7.1.3" + "graceful-fs" "^4.2.9" + "jest-haste-map" "^27.5.1" + "jest-message-util" "^27.5.1" + "jest-mock" "^27.5.1" + "jest-regex-util" "^27.5.1" + "jest-resolve" "^27.5.1" + "jest-snapshot" "^27.5.1" + "jest-util" "^27.5.1" + "slash" "^3.0.0" + "strip-bom" "^4.0.0" + +"jest-serializer@^27.5.1": + "integrity" "sha512-jZCyo6iIxO1aqUxpuBlwTDMkzOAJS4a3eYz3YzgxxVQFwLeSA7Jfq5cbqCY+JLvTDrWirgusI/0KwxKMgrdf7w==" + "resolved" "https://registry.npmjs.org/jest-serializer/-/jest-serializer-27.5.1.tgz" + "version" "27.5.1" dependencies: "@types/node" "*" - graceful-fs "^4.2.9" + "graceful-fs" "^4.2.9" -jest-snapshot@^27.5.1: - version "27.5.1" - resolved "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-27.5.1.tgz" - integrity sha512-yYykXI5a0I31xX67mgeLw1DZ0bJB+gpq5IpSuCAoyDi0+BhgU/RIrL+RTzDmkNTchvDFWKP8lp+w/42Z3us5sA== +"jest-snapshot@^27.5.1": + "integrity" "sha512-yYykXI5a0I31xX67mgeLw1DZ0bJB+gpq5IpSuCAoyDi0+BhgU/RIrL+RTzDmkNTchvDFWKP8lp+w/42Z3us5sA==" + "resolved" "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-27.5.1.tgz" + "version" "27.5.1" dependencies: "@babel/core" "^7.7.2" "@babel/generator" "^7.7.2" @@ -2555,1435 +2616,1395 @@ jest-snapshot@^27.5.1: "@jest/types" "^27.5.1" "@types/babel__traverse" "^7.0.4" "@types/prettier" "^2.1.5" - babel-preset-current-node-syntax "^1.0.0" - chalk "^4.0.0" - expect "^27.5.1" - graceful-fs "^4.2.9" - jest-diff "^27.5.1" - jest-get-type "^27.5.1" - jest-haste-map "^27.5.1" - jest-matcher-utils "^27.5.1" - jest-message-util "^27.5.1" - jest-util "^27.5.1" - natural-compare "^1.4.0" - pretty-format "^27.5.1" - semver "^7.3.2" - -jest-util@^27.0.0, jest-util@^27.5.1: - version "27.5.1" - resolved "https://registry.npmjs.org/jest-util/-/jest-util-27.5.1.tgz" - integrity sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw== + "babel-preset-current-node-syntax" "^1.0.0" + "chalk" "^4.0.0" + "expect" "^27.5.1" + "graceful-fs" "^4.2.9" + "jest-diff" "^27.5.1" + "jest-get-type" "^27.5.1" + "jest-haste-map" "^27.5.1" + "jest-matcher-utils" "^27.5.1" + "jest-message-util" "^27.5.1" + "jest-util" "^27.5.1" + "natural-compare" "^1.4.0" + "pretty-format" "^27.5.1" + "semver" "^7.3.2" + +"jest-util@^27.0.0", "jest-util@^27.5.1": + "integrity" "sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw==" + "resolved" "https://registry.npmjs.org/jest-util/-/jest-util-27.5.1.tgz" + "version" "27.5.1" dependencies: "@jest/types" "^27.5.1" "@types/node" "*" - chalk "^4.0.0" - ci-info "^3.2.0" - graceful-fs "^4.2.9" - picomatch "^2.2.3" + "chalk" "^4.0.0" + "ci-info" "^3.2.0" + "graceful-fs" "^4.2.9" + "picomatch" "^2.2.3" -jest-validate@^27.5.1: - version "27.5.1" - resolved "https://registry.npmjs.org/jest-validate/-/jest-validate-27.5.1.tgz" - integrity sha512-thkNli0LYTmOI1tDB3FI1S1RTp/Bqyd9pTarJwL87OIBFuqEb5Apv5EaApEudYg4g86e3CT6kM0RowkhtEnCBQ== +"jest-validate@^27.5.1": + "integrity" "sha512-thkNli0LYTmOI1tDB3FI1S1RTp/Bqyd9pTarJwL87OIBFuqEb5Apv5EaApEudYg4g86e3CT6kM0RowkhtEnCBQ==" + "resolved" "https://registry.npmjs.org/jest-validate/-/jest-validate-27.5.1.tgz" + "version" "27.5.1" dependencies: "@jest/types" "^27.5.1" - camelcase "^6.2.0" - chalk "^4.0.0" - jest-get-type "^27.5.1" - leven "^3.1.0" - pretty-format "^27.5.1" + "camelcase" "^6.2.0" + "chalk" "^4.0.0" + "jest-get-type" "^27.5.1" + "leven" "^3.1.0" + "pretty-format" "^27.5.1" -jest-watcher@^27.5.1: - version "27.5.1" - resolved "https://registry.npmjs.org/jest-watcher/-/jest-watcher-27.5.1.tgz" - integrity sha512-z676SuD6Z8o8qbmEGhoEUFOM1+jfEiL3DXHK/xgEiG2EyNYfFG60jluWcupY6dATjfEsKQuibReS1djInQnoVw== +"jest-watcher@^27.5.1": + "integrity" "sha512-z676SuD6Z8o8qbmEGhoEUFOM1+jfEiL3DXHK/xgEiG2EyNYfFG60jluWcupY6dATjfEsKQuibReS1djInQnoVw==" + "resolved" "https://registry.npmjs.org/jest-watcher/-/jest-watcher-27.5.1.tgz" + "version" "27.5.1" dependencies: "@jest/test-result" "^27.5.1" "@jest/types" "^27.5.1" "@types/node" "*" - ansi-escapes "^4.2.1" - chalk "^4.0.0" - jest-util "^27.5.1" - string-length "^4.0.1" + "ansi-escapes" "^4.2.1" + "chalk" "^4.0.0" + "jest-util" "^27.5.1" + "string-length" "^4.0.1" -jest-worker@^27.5.1: - version "27.5.1" - resolved "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz" - integrity sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg== +"jest-worker@^27.4.5", "jest-worker@^27.5.1": + "integrity" "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==" + "resolved" "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz" + "version" "27.5.1" dependencies: "@types/node" "*" - merge-stream "^2.0.0" - supports-color "^8.0.0" + "merge-stream" "^2.0.0" + "supports-color" "^8.0.0" -jest@^27.5.1: - version "27.5.1" - resolved "https://registry.npmjs.org/jest/-/jest-27.5.1.tgz" - integrity sha512-Yn0mADZB89zTtjkPJEXwrac3LHudkQMR+Paqa8uxJHCBr9agxztUifWCyiYrjhMPBoUVBjyny0I7XH6ozDr7QQ== +"jest@^27.0.0", "jest@^27.5.1": + "integrity" "sha512-Yn0mADZB89zTtjkPJEXwrac3LHudkQMR+Paqa8uxJHCBr9agxztUifWCyiYrjhMPBoUVBjyny0I7XH6ozDr7QQ==" + "resolved" "https://registry.npmjs.org/jest/-/jest-27.5.1.tgz" + "version" "27.5.1" dependencies: "@jest/core" "^27.5.1" - import-local "^3.0.2" - jest-cli "^27.5.1" - -js-tokens@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz" - integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== - -js-yaml@^3.13.1: - version "3.14.1" - resolved "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz" - integrity sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g== - dependencies: - argparse "^1.0.7" - esprima "^4.0.0" - -js-yaml@^4.1.0: - version "4.1.0" - resolved "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz" - integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA== - dependencies: - argparse "^2.0.1" - -jsdom@^16.6.0: - version "16.7.0" - resolved "https://registry.npmjs.org/jsdom/-/jsdom-16.7.0.tgz" - integrity sha512-u9Smc2G1USStM+s/x1ru5Sxrl6mPYCbByG1U/hUmqaVsm4tbNyS7CicOSRyuGQYZhTu0h84qkZZQ/I+dzizSVw== - dependencies: - abab "^2.0.5" - acorn "^8.2.4" - acorn-globals "^6.0.0" - cssom "^0.4.4" - cssstyle "^2.3.0" - data-urls "^2.0.0" - decimal.js "^10.2.1" - domexception "^2.0.1" - escodegen "^2.0.0" - form-data "^3.0.0" - html-encoding-sniffer "^2.0.1" - http-proxy-agent "^4.0.1" - https-proxy-agent "^5.0.0" - is-potential-custom-element-name "^1.0.1" - nwsapi "^2.2.0" - parse5 "6.0.1" - saxes "^5.0.1" - symbol-tree "^3.2.4" - tough-cookie "^4.0.0" - w3c-hr-time "^1.0.2" - w3c-xmlserializer "^2.0.0" - webidl-conversions "^6.1.0" - whatwg-encoding "^1.0.5" - whatwg-mimetype "^2.3.0" - whatwg-url "^8.5.0" - ws "^7.4.6" - xml-name-validator "^3.0.0" - -jsesc@^2.5.1: - version "2.5.2" - resolved "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz" - integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA== - -json-parse-even-better-errors@^2.3.0: - version "2.3.1" - resolved "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz" - integrity sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w== - -json-schema-traverse@^0.4.1: - version "0.4.1" - resolved "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz" - integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== - -json-schema-traverse@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz" - integrity sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug== - -json-stable-stringify-without-jsonify@^1.0.1: - version "1.0.1" - resolved "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz" - integrity sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw== - -json5@2.x, json5@^2.2.2: - version "2.2.3" - resolved "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz" - integrity sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg== - -jsonc-parser@^3.2.0: - version "3.2.0" - resolved "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.2.0.tgz" - integrity sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w== - -jsonfile@^6.0.1: - version "6.1.0" - resolved "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz" - integrity sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ== - dependencies: - universalify "^2.0.0" + "import-local" "^3.0.2" + "jest-cli" "^27.5.1" + +"js-tokens@^4.0.0": + "integrity" "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" + "resolved" "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz" + "version" "4.0.0" + +"js-yaml@^3.13.1": + "integrity" "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==" + "resolved" "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz" + "version" "3.14.1" + dependencies: + "argparse" "^1.0.7" + "esprima" "^4.0.0" + +"js-yaml@^4.1.0": + "integrity" "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==" + "resolved" "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz" + "version" "4.1.0" + dependencies: + "argparse" "^2.0.1" + +"jsdom@^16.6.0": + "integrity" "sha512-u9Smc2G1USStM+s/x1ru5Sxrl6mPYCbByG1U/hUmqaVsm4tbNyS7CicOSRyuGQYZhTu0h84qkZZQ/I+dzizSVw==" + "resolved" "https://registry.npmjs.org/jsdom/-/jsdom-16.7.0.tgz" + "version" "16.7.0" + dependencies: + "abab" "^2.0.5" + "acorn" "^8.2.4" + "acorn-globals" "^6.0.0" + "cssom" "^0.4.4" + "cssstyle" "^2.3.0" + "data-urls" "^2.0.0" + "decimal.js" "^10.2.1" + "domexception" "^2.0.1" + "escodegen" "^2.0.0" + "form-data" "^3.0.0" + "html-encoding-sniffer" "^2.0.1" + "http-proxy-agent" "^4.0.1" + "https-proxy-agent" "^5.0.0" + "is-potential-custom-element-name" "^1.0.1" + "nwsapi" "^2.2.0" + "parse5" "6.0.1" + "saxes" "^5.0.1" + "symbol-tree" "^3.2.4" + "tough-cookie" "^4.0.0" + "w3c-hr-time" "^1.0.2" + "w3c-xmlserializer" "^2.0.0" + "webidl-conversions" "^6.1.0" + "whatwg-encoding" "^1.0.5" + "whatwg-mimetype" "^2.3.0" + "whatwg-url" "^8.5.0" + "ws" "^7.4.6" + "xml-name-validator" "^3.0.0" + +"jsesc@^2.5.1": + "integrity" "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==" + "resolved" "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz" + "version" "2.5.2" + +"json-parse-even-better-errors@^2.3.0", "json-parse-even-better-errors@^2.3.1": + "integrity" "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==" + "resolved" "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz" + "version" "2.3.1" + +"json-schema-traverse@^0.4.1": + "integrity" "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" + "resolved" "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz" + "version" "0.4.1" + +"json-schema-traverse@^1.0.0": + "integrity" "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" + "resolved" "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz" + "version" "1.0.0" + +"json-stable-stringify-without-jsonify@^1.0.1": + "integrity" "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==" + "resolved" "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz" + "version" "1.0.1" + +"json5@^2.2.2", "json5@2.x": + "integrity" "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==" + "resolved" "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz" + "version" "2.2.3" + +"jsonc-parser@^3.2.0": + "integrity" "sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w==" + "resolved" "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.2.0.tgz" + "version" "3.2.0" + +"jsonfile@^6.0.1": + "integrity" "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==" + "resolved" "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz" + "version" "6.1.0" + dependencies: + "universalify" "^2.0.0" optionalDependencies: - graceful-fs "^4.1.6" + "graceful-fs" "^4.1.6" + +"kleur@^3.0.3": + "integrity" "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==" + "resolved" "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz" + "version" "3.0.3" -kleur@^3.0.3: - version "3.0.3" - resolved "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz" - integrity sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w== +"leven@^3.1.0": + "integrity" "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==" + "resolved" "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz" + "version" "3.1.0" + +"levn@^0.4.1": + "integrity" "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==" + "resolved" "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz" + "version" "0.4.1" + dependencies: + "prelude-ls" "^1.2.1" + "type-check" "~0.4.0" + +"lines-and-columns@^1.1.6": + "integrity" "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==" + "resolved" "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz" + "version" "1.2.4" + +"loader-runner@^4.2.0": + "integrity" "sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==" + "resolved" "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz" + "version" "4.3.0" + +"locate-path@^5.0.0": + "integrity" "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==" + "resolved" "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz" + "version" "5.0.0" + dependencies: + "p-locate" "^4.1.0" + +"locate-path@^6.0.0": + "integrity" "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==" + "resolved" "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz" + "version" "6.0.0" + dependencies: + "p-locate" "^5.0.0" + +"lodash.memoize@4.x": + "integrity" "sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==" + "resolved" "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz" + "version" "4.1.2" + +"lodash.merge@^4.6.2": + "integrity" "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==" + "resolved" "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz" + "version" "4.6.2" + +"lodash@^4.7.0": + "integrity" "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" + "resolved" "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz" + "version" "4.17.21" + +"lru-cache@^5.1.1": + "integrity" "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==" + "resolved" "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz" + "version" "5.1.1" + dependencies: + "yallist" "^3.0.2" + +"lru-cache@^6.0.0": + "integrity" "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==" + "resolved" "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz" + "version" "6.0.0" + dependencies: + "yallist" "^4.0.0" + +"lunr@^2.3.9": + "integrity" "sha512-zTU3DaZaF3Rt9rhN3uBMGQD3dD2/vFQqnvZCDv4dl5iOzq2IZQqTxu90r4E5J+nP70J3ilqVCrbho2eWaeW8Ow==" + "resolved" "https://registry.npmjs.org/lunr/-/lunr-2.3.9.tgz" + "version" "2.3.9" + +"make-dir@^3.0.0": + "integrity" "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==" + "resolved" "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz" + "version" "3.1.0" + dependencies: + "semver" "^6.0.0" + +"make-error@^1.1.1", "make-error@1.x": + "integrity" "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==" + "resolved" "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz" + "version" "1.3.6" + +"makeerror@1.0.12": + "integrity" "sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==" + "resolved" "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz" + "version" "1.0.12" + dependencies: + "tmpl" "1.0.5" + +"marked@^4.3.0": + "integrity" "sha512-PRsaiG84bK+AMvxziE/lCFss8juXjNaWzVbN5tXAm4XjeaS9NAHhop+PjQxz2A9h8Q4M/xGmzP8vqNwy6JeK0A==" + "resolved" "https://registry.npmjs.org/marked/-/marked-4.3.0.tgz" + "version" "4.3.0" + +"merge-stream@^2.0.0": + "integrity" "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==" + "resolved" "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz" + "version" "2.0.0" + +"merge2@^1.3.0", "merge2@^1.4.1": + "integrity" "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==" + "resolved" "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz" + "version" "1.4.1" + +"micromatch@^4.0.4": + "integrity" "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==" + "resolved" "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz" + "version" "4.0.5" + dependencies: + "braces" "^3.0.2" + "picomatch" "^2.3.1" + +"mime-db@1.52.0": + "integrity" "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==" + "resolved" "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz" + "version" "1.52.0" + +"mime-types@^2.1.12", "mime-types@^2.1.27": + "integrity" "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==" + "resolved" "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz" + "version" "2.1.35" + dependencies: + "mime-db" "1.52.0" + +"mimic-fn@^2.1.0": + "integrity" "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==" + "resolved" "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz" + "version" "2.1.0" + +"minimatch@^3.0.4", "minimatch@^3.0.5", "minimatch@^3.1.1", "minimatch@^3.1.2": + "integrity" "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==" + "resolved" "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz" + "version" "3.1.2" + dependencies: + "brace-expansion" "^1.1.7" + +"minimatch@^9.0.0": + "integrity" "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==" + "resolved" "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz" + "version" "9.0.3" + dependencies: + "brace-expansion" "^2.0.1" + +"minimist@^1.2.5": + "integrity" "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==" + "resolved" "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz" + "version" "1.2.8" + +"minipass@^3.0.0": + "integrity" "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==" + "resolved" "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz" + "version" "3.3.6" + dependencies: + "yallist" "^4.0.0" + +"minipass@^5.0.0": + "integrity" "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==" + "resolved" "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz" + "version" "5.0.0" + +"minizlib@^2.1.1": + "integrity" "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==" + "resolved" "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz" + "version" "2.1.2" + dependencies: + "minipass" "^3.0.0" + "yallist" "^4.0.0" + +"mkdirp@^1.0.3": + "integrity" "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==" + "resolved" "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz" + "version" "1.0.4" + +"ms@2.1.2": + "integrity" "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + "resolved" "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz" + "version" "2.1.2" + +"natural-compare-lite@^1.4.0": + "integrity" "sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==" + "resolved" "https://registry.npmjs.org/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz" + "version" "1.4.0" + +"natural-compare@^1.4.0": + "integrity" "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==" + "resolved" "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz" + "version" "1.4.0" + +"neo-async@^2.6.0", "neo-async@^2.6.2": + "integrity" "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==" + "resolved" "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz" + "version" "2.6.2" + +"node-fetch@^2.6.7", "node-fetch@^2.6.9": + "integrity" "sha512-C/fGU2E8ToujUivIO0H+tpQ6HWo4eEmchoPIoXtxCrVghxdKq+QOHqEZW7tuP3KlV3bC8FRMO5nMCC7Zm1VP6g==" + "resolved" "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.12.tgz" + "version" "2.6.12" + dependencies: + "whatwg-url" "^5.0.0" + +"node-int64@^0.4.0": + "integrity" "sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==" + "resolved" "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz" + "version" "0.4.0" + +"node-releases@^2.0.12": + "integrity" "sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ==" + "resolved" "https://registry.npmjs.org/node-releases/-/node-releases-2.0.13.tgz" + "version" "2.0.13" + +"normalize-path@^3.0.0": + "integrity" "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==" + "resolved" "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz" + "version" "3.0.0" + +"npm-run-path@^4.0.1": + "integrity" "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==" + "resolved" "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz" + "version" "4.0.1" + dependencies: + "path-key" "^3.0.0" -leven@^3.1.0: - version "3.1.0" - resolved "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz" - integrity sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A== - -levn@^0.4.1: - version "0.4.1" - resolved "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz" - integrity sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ== - dependencies: - prelude-ls "^1.2.1" - type-check "~0.4.0" - -lines-and-columns@^1.1.6: - version "1.2.4" - resolved "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz" - integrity sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg== - -locate-path@^5.0.0: - version "5.0.0" - resolved "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz" - integrity sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g== - dependencies: - p-locate "^4.1.0" - -locate-path@^6.0.0: - version "6.0.0" - resolved "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz" - integrity sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw== - dependencies: - p-locate "^5.0.0" - -lodash.memoize@4.x: - version "4.1.2" - resolved "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz" - integrity sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag== - -lodash.merge@^4.6.2: - version "4.6.2" - resolved "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz" - integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ== - -lodash@^4.7.0: - version "4.17.21" - resolved "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz" - integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== - -lru-cache@^5.1.1: - version "5.1.1" - resolved "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz" - integrity sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w== - dependencies: - yallist "^3.0.2" - -lru-cache@^6.0.0: - version "6.0.0" - resolved "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz" - integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== - dependencies: - yallist "^4.0.0" - -lunr@^2.3.9: - version "2.3.9" - resolved "https://registry.npmjs.org/lunr/-/lunr-2.3.9.tgz" - integrity sha512-zTU3DaZaF3Rt9rhN3uBMGQD3dD2/vFQqnvZCDv4dl5iOzq2IZQqTxu90r4E5J+nP70J3ilqVCrbho2eWaeW8Ow== - -make-dir@^3.0.0: - version "3.1.0" - resolved "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz" - integrity sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw== - dependencies: - semver "^6.0.0" - -make-error@1.x, make-error@^1.1.1: - version "1.3.6" - resolved "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz" - integrity sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw== - -makeerror@1.0.12: - version "1.0.12" - resolved "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz" - integrity sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg== - dependencies: - tmpl "1.0.5" - -marked@^4.2.12: - version "4.3.0" - resolved "https://registry.npmjs.org/marked/-/marked-4.3.0.tgz" - integrity sha512-PRsaiG84bK+AMvxziE/lCFss8juXjNaWzVbN5tXAm4XjeaS9NAHhop+PjQxz2A9h8Q4M/xGmzP8vqNwy6JeK0A== - -media-typer@0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" - integrity sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ== - -merge-descriptors@1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61" - integrity sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w== - -merge-stream@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz" - integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== - -merge2@^1.3.0, merge2@^1.4.1: - version "1.4.1" - resolved "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz" - integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== - -methods@~1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" - integrity sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w== - -micromatch@^4.0.4: - version "4.0.5" - resolved "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz" - integrity sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA== - dependencies: - braces "^3.0.2" - picomatch "^2.3.1" - -mime-db@1.52.0: - version "1.52.0" - resolved "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz" - integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== - -mime-types@^2.1.12, mime-types@~2.1.24, mime-types@~2.1.34: - version "2.1.35" - resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a" - integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== - dependencies: - mime-db "1.52.0" - -mime@1.6.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" - integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg== - -mimic-fn@^2.1.0: - version "2.1.0" - resolved "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz" - integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== - -minimatch@^3.0.4, minimatch@^3.0.5, minimatch@^3.1.1, minimatch@^3.1.2: - version "3.1.2" - resolved "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz" - integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== - dependencies: - brace-expansion "^1.1.7" - -minimatch@^7.1.3: - version "7.4.6" - resolved "https://registry.npmjs.org/minimatch/-/minimatch-7.4.6.tgz" - integrity sha512-sBz8G/YjVniEz6lKPNpKxXwazJe4c19fEfV2GDMX6AjFz+MX9uDWIZW8XreVhkFW3fkIdTv/gxWr/Kks5FFAVw== - dependencies: - brace-expansion "^2.0.1" - -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== - -minipass@^3.0.0: - version "3.3.6" - resolved "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz" - integrity sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw== - dependencies: - yallist "^4.0.0" - -minipass@^5.0.0: - version "5.0.0" - resolved "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz" - integrity sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ== - -minizlib@^2.1.1: - version "2.1.2" - resolved "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz" - integrity sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg== - dependencies: - minipass "^3.0.0" - yallist "^4.0.0" - -mkdirp@^1.0.3: - version "1.0.4" - resolved "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz" - integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== - -ms@2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" - integrity sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A== - -ms@2.1.2: - version "2.1.2" - resolved "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz" - integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== - -ms@2.1.3: - version "2.1.3" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" - integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== - -natural-compare-lite@^1.4.0: - version "1.4.0" - resolved "https://registry.npmjs.org/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz" - integrity sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g== - -natural-compare@^1.4.0: - version "1.4.0" - resolved "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz" - integrity sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw== - -negotiator@0.6.3: - version "0.6.3" - resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.3.tgz#58e323a72fedc0d6f9cd4d31fe49f51479590ccd" - integrity sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg== - -neo-async@^2.6.0: - version "2.6.2" - resolved "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz" - integrity sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw== - -node-fetch@^2.6.7, node-fetch@^2.6.9: - version "2.6.12" - resolved "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.12.tgz" - integrity sha512-C/fGU2E8ToujUivIO0H+tpQ6HWo4eEmchoPIoXtxCrVghxdKq+QOHqEZW7tuP3KlV3bC8FRMO5nMCC7Zm1VP6g== - dependencies: - whatwg-url "^5.0.0" - -node-int64@^0.4.0: - version "0.4.0" - resolved "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz" - integrity sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw== - -node-releases@^2.0.12: - version "2.0.13" - resolved "https://registry.npmjs.org/node-releases/-/node-releases-2.0.13.tgz" - integrity sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ== - -normalize-path@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz" - integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== - -npm-run-path@^4.0.1: - version "4.0.1" - resolved "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz" - integrity sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw== - dependencies: - path-key "^3.0.0" - -nwsapi@^2.2.0: - version "2.2.7" - resolved "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.7.tgz" - integrity sha512-ub5E4+FBPKwAZx0UwIQOjYWGHTEq5sPqHQNRN8Z9e4A7u3Tj1weLJsL59yH9vmvqEtBHaOmT6cYQKIZOxp35FQ== - -object-inspect@^1.9.0: - version "1.12.3" - resolved "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz" - integrity sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g== - -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== - dependencies: - ee-first "1.1.1" - -once@^1.3.0: - version "1.4.0" - resolved "https://registry.npmjs.org/once/-/once-1.4.0.tgz" - integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w== - dependencies: - wrappy "1" - -onetime@^5.1.2: - version "5.1.2" - resolved "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz" - integrity sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg== - dependencies: - mimic-fn "^2.1.0" - -optionator@^0.9.3: - version "0.9.3" - resolved "https://registry.npmjs.org/optionator/-/optionator-0.9.3.tgz" - integrity sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg== +"nwsapi@^2.2.0": + "integrity" "sha512-ub5E4+FBPKwAZx0UwIQOjYWGHTEq5sPqHQNRN8Z9e4A7u3Tj1weLJsL59yH9vmvqEtBHaOmT6cYQKIZOxp35FQ==" + "resolved" "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.7.tgz" + "version" "2.2.7" + +"object-inspect@^1.9.0": + "integrity" "sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==" + "resolved" "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz" + "version" "1.12.3" + +"once@^1.3.0": + "integrity" "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==" + "resolved" "https://registry.npmjs.org/once/-/once-1.4.0.tgz" + "version" "1.4.0" + dependencies: + "wrappy" "1" + +"onetime@^5.1.2": + "integrity" "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==" + "resolved" "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz" + "version" "5.1.2" + dependencies: + "mimic-fn" "^2.1.0" + +"optionator@^0.9.3": + "integrity" "sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==" + "resolved" "https://registry.npmjs.org/optionator/-/optionator-0.9.3.tgz" + "version" "0.9.3" dependencies: "@aashutoshrathi/word-wrap" "^1.2.3" - deep-is "^0.1.3" - fast-levenshtein "^2.0.6" - levn "^0.4.1" - prelude-ls "^1.2.1" - type-check "^0.4.0" + "deep-is" "^0.1.3" + "fast-levenshtein" "^2.0.6" + "levn" "^0.4.1" + "prelude-ls" "^1.2.1" + "type-check" "^0.4.0" -p-limit@^2.2.0: - version "2.3.0" - resolved "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz" - integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w== +"p-limit@^2.2.0": + "integrity" "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==" + "resolved" "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz" + "version" "2.3.0" dependencies: - p-try "^2.0.0" + "p-try" "^2.0.0" -p-limit@^3.0.2: - version "3.1.0" - resolved "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz" - integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== +"p-limit@^3.0.2": + "integrity" "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==" + "resolved" "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz" + "version" "3.1.0" dependencies: - yocto-queue "^0.1.0" + "yocto-queue" "^0.1.0" -p-locate@^4.1.0: - version "4.1.0" - resolved "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz" - integrity sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A== +"p-locate@^4.1.0": + "integrity" "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==" + "resolved" "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz" + "version" "4.1.0" dependencies: - p-limit "^2.2.0" + "p-limit" "^2.2.0" -p-locate@^5.0.0: - version "5.0.0" - resolved "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz" - integrity sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw== +"p-locate@^5.0.0": + "integrity" "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==" + "resolved" "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz" + "version" "5.0.0" dependencies: - p-limit "^3.0.2" + "p-limit" "^3.0.2" -p-try@^2.0.0: - version "2.2.0" - resolved "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz" - integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== +"p-try@^2.0.0": + "integrity" "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==" + "resolved" "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz" + "version" "2.2.0" -parent-module@^1.0.0: - version "1.0.1" - resolved "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz" - integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g== +"parent-module@^1.0.0": + "integrity" "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==" + "resolved" "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz" + "version" "1.0.1" dependencies: - callsites "^3.0.0" + "callsites" "^3.0.0" -parse-json@^5.2.0: - version "5.2.0" - resolved "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz" - integrity sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg== +"parse-json@^5.2.0": + "integrity" "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==" + "resolved" "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz" + "version" "5.2.0" dependencies: "@babel/code-frame" "^7.0.0" - error-ex "^1.3.1" - json-parse-even-better-errors "^2.3.0" - lines-and-columns "^1.1.6" - -parse5@6.0.1: - version "6.0.1" - resolved "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz" - integrity sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw== - -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== - -path-exists@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz" - integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== - -path-is-absolute@^1.0.0: - version "1.0.1" - resolved "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz" - integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg== - -path-key@^3.0.0, path-key@^3.1.0: - version "3.1.1" - resolved "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz" - integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== - -path-parse@^1.0.7: - version "1.0.7" - resolved "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz" - integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== - -path-to-regexp@0.1.7: - version "0.1.7" - resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c" - integrity sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ== - -path-type@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz" - integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== - -picocolors@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz" - integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ== - -picomatch@^2.0.4, picomatch@^2.2.3, picomatch@^2.3.1: - version "2.3.1" - resolved "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz" - integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== - -pirates@^4.0.4: - version "4.0.6" - resolved "https://registry.npmjs.org/pirates/-/pirates-4.0.6.tgz" - integrity sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg== - -pkg-dir@^4.2.0: - version "4.2.0" - resolved "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz" - integrity sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ== - dependencies: - find-up "^4.0.0" - -prelude-ls@^1.2.1: - version "1.2.1" - resolved "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz" - integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g== - -prettier@^2.7.1: - version "2.8.8" - resolved "https://registry.npmjs.org/prettier/-/prettier-2.8.8.tgz" - integrity sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q== - -pretty-format@^27.0.0, pretty-format@^27.5.1: - version "27.5.1" - resolved "https://registry.npmjs.org/pretty-format/-/pretty-format-27.5.1.tgz" - integrity sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ== - dependencies: - ansi-regex "^5.0.1" - ansi-styles "^5.0.0" - react-is "^17.0.1" - -pretty-format@^28.1.3: - version "28.1.3" - resolved "https://registry.npmjs.org/pretty-format/-/pretty-format-28.1.3.tgz" - integrity sha512-8gFb/To0OmxHR9+ZTb14Df2vNxdGCX8g1xWGUTqUw5TiZvcQf5sHKObd5UcPyLLyowNwDAMTF3XWOG1B6mxl1Q== + "error-ex" "^1.3.1" + "json-parse-even-better-errors" "^2.3.0" + "lines-and-columns" "^1.1.6" + +"parse5@6.0.1": + "integrity" "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==" + "resolved" "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz" + "version" "6.0.1" + +"path-exists@^4.0.0": + "integrity" "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==" + "resolved" "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz" + "version" "4.0.0" + +"path-is-absolute@^1.0.0": + "integrity" "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==" + "resolved" "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz" + "version" "1.0.1" + +"path-key@^3.0.0", "path-key@^3.1.0": + "integrity" "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==" + "resolved" "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz" + "version" "3.1.1" + +"path-parse@^1.0.7": + "integrity" "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" + "resolved" "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz" + "version" "1.0.7" + +"path-type@^4.0.0": + "integrity" "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==" + "resolved" "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz" + "version" "4.0.0" + +"picocolors@^1.0.0": + "integrity" "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" + "resolved" "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz" + "version" "1.0.0" + +"picomatch@^2.0.4", "picomatch@^2.2.3", "picomatch@^2.3.1": + "integrity" "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==" + "resolved" "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz" + "version" "2.3.1" + +"pirates@^4.0.4": + "integrity" "sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==" + "resolved" "https://registry.npmjs.org/pirates/-/pirates-4.0.6.tgz" + "version" "4.0.6" + +"pkg-dir@^4.2.0": + "integrity" "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==" + "resolved" "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz" + "version" "4.2.0" + dependencies: + "find-up" "^4.0.0" + +"prelude-ls@^1.2.1": + "integrity" "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==" + "resolved" "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz" + "version" "1.2.1" + +"prettier@^2.7.1": + "integrity" "sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==" + "resolved" "https://registry.npmjs.org/prettier/-/prettier-2.8.8.tgz" + "version" "2.8.8" + +"pretty-format@^27.0.0", "pretty-format@^27.5.1": + "integrity" "sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==" + "resolved" "https://registry.npmjs.org/pretty-format/-/pretty-format-27.5.1.tgz" + "version" "27.5.1" + dependencies: + "ansi-regex" "^5.0.1" + "ansi-styles" "^5.0.0" + "react-is" "^17.0.1" + +"pretty-format@^28.1.3": + "integrity" "sha512-8gFb/To0OmxHR9+ZTb14Df2vNxdGCX8g1xWGUTqUw5TiZvcQf5sHKObd5UcPyLLyowNwDAMTF3XWOG1B6mxl1Q==" + "resolved" "https://registry.npmjs.org/pretty-format/-/pretty-format-28.1.3.tgz" + "version" "28.1.3" dependencies: "@jest/schemas" "^28.1.3" - ansi-regex "^5.0.1" - ansi-styles "^5.0.0" - react-is "^18.0.0" - -prompts@^2.0.1: - version "2.4.2" - resolved "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz" - integrity sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q== - dependencies: - kleur "^3.0.3" - sisteransi "^1.0.5" - -proxy-addr@~2.0.7: - version "2.0.7" - resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.7.tgz#f19fe69ceab311eeb94b42e70e8c2070f9ba1025" - integrity sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg== - dependencies: - forwarded "0.2.0" - ipaddr.js "1.9.1" - -psl@^1.1.33: - version "1.9.0" - resolved "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz" - integrity sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag== - -punycode@^2.1.0, punycode@^2.1.1: - version "2.3.0" - resolved "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz" - integrity sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA== - -qs@6.11.0, qs@^6.9.7: - version "6.11.2" - resolved "https://registry.npmjs.org/qs/-/qs-6.11.2.tgz" - integrity sha512-tDNIz22aBzCDxLtVH++VnTfzxlfeK5CbqohpSqpJgj1Wg/cQbStNAz3NuqCs5vV+pjBsK4x4pN9HlVh7rcYRiA== - dependencies: - side-channel "^1.0.4" - -querystringify@^2.1.1: - version "2.2.0" - resolved "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz" - integrity sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ== - -queue-microtask@^1.2.2: - version "1.2.3" - resolved "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz" - integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== - -randombytes@^2.1.0: - version "2.1.0" - resolved "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz" - integrity sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ== - dependencies: - safe-buffer "^5.1.0" - -range-parser@~1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031" - integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg== - -raw-body@2.5.1: - version "2.5.1" - resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.5.1.tgz#fe1b1628b181b700215e5fd42389f98b71392857" - integrity sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig== - dependencies: - bytes "3.1.2" - http-errors "2.0.0" - iconv-lite "0.4.24" - unpipe "1.0.0" - -react-is@^17.0.1: - version "17.0.2" - resolved "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz" - integrity sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w== - -react-is@^18.0.0: - version "18.2.0" - resolved "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz" - integrity sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w== - -reflect-metadata@^0.1.13: - version "0.1.13" - resolved "https://registry.npmjs.org/reflect-metadata/-/reflect-metadata-0.1.13.tgz" - integrity sha512-Ts1Y/anZELhSsjMcU605fU9RE4Oi3p5ORujwbIKXfWa+0Zxs510Qrmrce5/Jowq3cHSZSJqBjypxmHarc+vEWg== - -require-directory@^2.1.1: - version "2.1.1" - resolved "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz" - integrity sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q== - -require-from-string@^2.0.2: - version "2.0.2" - resolved "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz" - integrity sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw== - -requires-port@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz" - integrity sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ== - -resolve-cwd@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz" - integrity sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg== - dependencies: - resolve-from "^5.0.0" - -resolve-from@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz" - integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== - -resolve-from@^5.0.0: - version "5.0.0" - resolved "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz" - integrity sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw== - -resolve.exports@^1.1.0: - version "1.1.1" - resolved "https://registry.npmjs.org/resolve.exports/-/resolve.exports-1.1.1.tgz" - integrity sha512-/NtpHNDN7jWhAaQ9BvBUYZ6YTXsRBgfqWFWP7BZBaoMJO/I3G5OFzvTuWNlZC3aPjins1F+TNrLKsGbH4rfsRQ== - -resolve@^1.20.0: - version "1.22.2" - resolved "https://registry.npmjs.org/resolve/-/resolve-1.22.2.tgz" - integrity sha512-Sb+mjNHOULsBv818T40qSPeRiuWLyaGMa5ewydRLFimneixmVy2zdivRl+AF6jaYPC8ERxGDmFSiqui6SfPd+g== - dependencies: - is-core-module "^2.11.0" - path-parse "^1.0.7" - supports-preserve-symlinks-flag "^1.0.0" - -reusify@^1.0.4: - version "1.0.4" - resolved "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz" - integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== - -rimraf@^3.0.0, rimraf@^3.0.2: - version "3.0.2" - resolved "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz" - integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== - dependencies: - glob "^7.1.3" - -run-parallel@^1.1.9: - version "1.2.0" - resolved "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz" - integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA== - dependencies: - queue-microtask "^1.2.2" - -safe-buffer@5.2.1, safe-buffer@^5.1.0: - version "5.2.1" - resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" - integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== + "ansi-regex" "^5.0.1" + "ansi-styles" "^5.0.0" + "react-is" "^18.0.0" + +"prompts@^2.0.1": + "integrity" "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==" + "resolved" "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz" + "version" "2.4.2" + dependencies: + "kleur" "^3.0.3" + "sisteransi" "^1.0.5" + +"psl@^1.1.33": + "integrity" "sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==" + "resolved" "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz" + "version" "1.9.0" + +"punycode@^2.1.0", "punycode@^2.1.1": + "integrity" "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==" + "resolved" "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz" + "version" "2.3.0" + +"qs@^6.9.7": + "integrity" "sha512-tDNIz22aBzCDxLtVH++VnTfzxlfeK5CbqohpSqpJgj1Wg/cQbStNAz3NuqCs5vV+pjBsK4x4pN9HlVh7rcYRiA==" + "resolved" "https://registry.npmjs.org/qs/-/qs-6.11.2.tgz" + "version" "6.11.2" + dependencies: + "side-channel" "^1.0.4" + +"querystringify@^2.1.1": + "integrity" "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==" + "resolved" "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz" + "version" "2.2.0" + +"queue-microtask@^1.2.2": + "integrity" "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==" + "resolved" "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz" + "version" "1.2.3" + +"randombytes@^2.1.0": + "integrity" "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==" + "resolved" "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz" + "version" "2.1.0" + dependencies: + "safe-buffer" "^5.1.0" + +"react-is@^17.0.1": + "integrity" "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==" + "resolved" "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz" + "version" "17.0.2" + +"react-is@^18.0.0": + "integrity" "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==" + "resolved" "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz" + "version" "18.2.0" + +"reflect-metadata@^0.1.13": + "integrity" "sha512-Ts1Y/anZELhSsjMcU605fU9RE4Oi3p5ORujwbIKXfWa+0Zxs510Qrmrce5/Jowq3cHSZSJqBjypxmHarc+vEWg==" + "resolved" "https://registry.npmjs.org/reflect-metadata/-/reflect-metadata-0.1.13.tgz" + "version" "0.1.13" + +"require-directory@^2.1.1": + "integrity" "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==" + "resolved" "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz" + "version" "2.1.1" + +"require-from-string@^2.0.2": + "integrity" "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==" + "resolved" "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz" + "version" "2.0.2" + +"requires-port@^1.0.0": + "integrity" "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==" + "resolved" "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz" + "version" "1.0.0" + +"resolve-cwd@^3.0.0": + "integrity" "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==" + "resolved" "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz" + "version" "3.0.0" + dependencies: + "resolve-from" "^5.0.0" + +"resolve-from@^4.0.0": + "integrity" "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==" + "resolved" "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz" + "version" "4.0.0" + +"resolve-from@^5.0.0": + "integrity" "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==" + "resolved" "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz" + "version" "5.0.0" + +"resolve.exports@^1.1.0": + "integrity" "sha512-/NtpHNDN7jWhAaQ9BvBUYZ6YTXsRBgfqWFWP7BZBaoMJO/I3G5OFzvTuWNlZC3aPjins1F+TNrLKsGbH4rfsRQ==" + "resolved" "https://registry.npmjs.org/resolve.exports/-/resolve.exports-1.1.1.tgz" + "version" "1.1.1" + +"resolve@^1.20.0": + "integrity" "sha512-Sb+mjNHOULsBv818T40qSPeRiuWLyaGMa5ewydRLFimneixmVy2zdivRl+AF6jaYPC8ERxGDmFSiqui6SfPd+g==" + "resolved" "https://registry.npmjs.org/resolve/-/resolve-1.22.2.tgz" + "version" "1.22.2" + dependencies: + "is-core-module" "^2.11.0" + "path-parse" "^1.0.7" + "supports-preserve-symlinks-flag" "^1.0.0" + +"reusify@^1.0.4": + "integrity" "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==" + "resolved" "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz" + "version" "1.0.4" + +"rimraf@^3.0.0", "rimraf@^3.0.2": + "integrity" "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==" + "resolved" "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz" + "version" "3.0.2" + dependencies: + "glob" "^7.1.3" + +"run-parallel@^1.1.9": + "integrity" "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==" + "resolved" "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz" + "version" "1.2.0" + dependencies: + "queue-microtask" "^1.2.2" + +"safe-buffer@^5.1.0": + "integrity" "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" + "resolved" "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz" + "version" "5.2.1" "safer-buffer@>= 2.1.2 < 3": - version "2.1.2" - resolved "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz" - integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== + "integrity" "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + "resolved" "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz" + "version" "2.1.2" -saxes@^5.0.1: - version "5.0.1" - resolved "https://registry.npmjs.org/saxes/-/saxes-5.0.1.tgz" - integrity sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw== +"saxes@^5.0.1": + "integrity" "sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw==" + "resolved" "https://registry.npmjs.org/saxes/-/saxes-5.0.1.tgz" + "version" "5.0.1" dependencies: - xmlchars "^2.2.0" + "xmlchars" "^2.2.0" -schema-utils@^4.0.0: - version "4.2.0" - resolved "https://registry.npmjs.org/schema-utils/-/schema-utils-4.2.0.tgz" - integrity sha512-L0jRsrPpjdckP3oPug3/VxNKt2trR8TcabrM6FOAAlvC/9Phcmm+cuAgTlxBqdBR1WJx7Naj9WHw+aOmheSVbw== +"schema-utils@^3.1.1": + "integrity" "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==" + "resolved" "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz" + "version" "3.3.0" + dependencies: + "@types/json-schema" "^7.0.8" + "ajv" "^6.12.5" + "ajv-keywords" "^3.5.2" + +"schema-utils@^3.2.0": + "integrity" "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==" + "resolved" "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz" + "version" "3.3.0" + dependencies: + "@types/json-schema" "^7.0.8" + "ajv" "^6.12.5" + "ajv-keywords" "^3.5.2" + +"schema-utils@^4.0.0": + "integrity" "sha512-L0jRsrPpjdckP3oPug3/VxNKt2trR8TcabrM6FOAAlvC/9Phcmm+cuAgTlxBqdBR1WJx7Naj9WHw+aOmheSVbw==" + "resolved" "https://registry.npmjs.org/schema-utils/-/schema-utils-4.2.0.tgz" + "version" "4.2.0" dependencies: "@types/json-schema" "^7.0.9" - ajv "^8.9.0" - ajv-formats "^2.1.1" - ajv-keywords "^5.1.0" - -semver@7.x, semver@^6.0.0, semver@^6.3.0, semver@^6.3.1, semver@^7.3.2, semver@^7.3.7, semver@^7.5.2: - version "7.5.4" - resolved "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz" - integrity sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA== - dependencies: - lru-cache "^6.0.0" - -send@0.18.0: - version "0.18.0" - resolved "https://registry.yarnpkg.com/send/-/send-0.18.0.tgz#670167cc654b05f5aa4a767f9113bb371bc706be" - integrity sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg== - dependencies: - debug "2.6.9" - depd "2.0.0" - destroy "1.2.0" - encodeurl "~1.0.2" - escape-html "~1.0.3" - etag "~1.8.1" - fresh "0.5.2" - http-errors "2.0.0" - mime "1.6.0" - ms "2.1.3" - on-finished "2.4.1" - range-parser "~1.2.1" - statuses "2.0.1" - -serialize-javascript@^6.0.0: - version "6.0.1" - resolved "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.1.tgz" - integrity sha512-owoXEFjWRllis8/M1Q+Cw5k8ZH40e3zhp/ovX+Xr/vi1qj6QesbyXXViFbpNvWvPNAD62SutwEXavefrLJWj7w== - dependencies: - randombytes "^2.1.0" - -serve-static@1.15.0: - version "1.15.0" - resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.15.0.tgz#faaef08cffe0a1a62f60cad0c4e513cff0ac9540" - integrity sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g== - dependencies: - encodeurl "~1.0.2" - escape-html "~1.0.3" - parseurl "~1.3.3" - send "0.18.0" - -setprototypeof@1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.2.0.tgz#66c9a24a73f9fc28cbe66b09fed3d33dcaf1b424" - integrity sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw== - -shebang-command@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz" - integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== - dependencies: - shebang-regex "^3.0.0" - -shebang-regex@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz" - integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== - -shiki@^0.14.1: - version "0.14.3" - resolved "https://registry.npmjs.org/shiki/-/shiki-0.14.3.tgz" - integrity sha512-U3S/a+b0KS+UkTyMjoNojvTgrBHjgp7L6ovhFVZsXmBGnVdQ4K4U9oK0z63w538S91ATngv1vXigHCSWOwnr+g== - dependencies: - ansi-sequence-parser "^1.1.0" - jsonc-parser "^3.2.0" - vscode-oniguruma "^1.7.0" - vscode-textmate "^8.0.0" - -side-channel@^1.0.4: - version "1.0.4" - resolved "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz" - integrity sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw== - dependencies: - call-bind "^1.0.0" - get-intrinsic "^1.0.2" - object-inspect "^1.9.0" - -signal-exit@^3.0.2, signal-exit@^3.0.3: - version "3.0.7" - resolved "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz" - integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== - -sisteransi@^1.0.5: - version "1.0.5" - resolved "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz" - integrity sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg== - -slash@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz" - integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== - -slash@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/slash/-/slash-4.0.0.tgz" - integrity sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew== - -source-map-support@^0.5.6: - version "0.5.21" - resolved "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz" - integrity sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w== - dependencies: - buffer-from "^1.0.0" - source-map "^0.6.0" - -source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.1: - version "0.6.1" - resolved "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz" - integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== - -source-map@^0.7.3: - version "0.7.4" - resolved "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz" - integrity sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA== - -sprintf-js@~1.0.2: - version "1.0.3" - resolved "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz" - integrity sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g== - -stack-utils@^2.0.3: - version "2.0.6" - resolved "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz" - integrity sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ== - dependencies: - escape-string-regexp "^2.0.0" - -statuses@2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/statuses/-/statuses-2.0.1.tgz#55cb000ccf1d48728bd23c685a063998cf1a1b63" - integrity sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ== - -string-length@^4.0.1: - version "4.0.2" - resolved "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz" - integrity sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ== - dependencies: - char-regex "^1.0.2" - strip-ansi "^6.0.0" - -string-width@^4.1.0, string-width@^4.2.0: - version "4.2.3" - resolved "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz" - integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== - dependencies: - emoji-regex "^8.0.0" - is-fullwidth-code-point "^3.0.0" - strip-ansi "^6.0.1" - -strip-ansi@^6.0.0, strip-ansi@^6.0.1: - version "6.0.1" - resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz" - integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== - dependencies: - ansi-regex "^5.0.1" - -strip-bom@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz" - integrity sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w== - -strip-final-newline@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz" - integrity sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA== - -strip-json-comments@^3.1.1: - version "3.1.1" - resolved "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz" - integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== - -supports-color@^5.3.0: - version "5.5.0" - resolved "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz" - integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== - dependencies: - has-flag "^3.0.0" - -supports-color@^7.0.0, supports-color@^7.1.0: - version "7.2.0" - resolved "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz" - integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== - dependencies: - has-flag "^4.0.0" - -supports-color@^8.0.0: - version "8.1.1" - resolved "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz" - integrity sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q== - dependencies: - has-flag "^4.0.0" - -supports-hyperlinks@^2.0.0: - version "2.3.0" - resolved "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-2.3.0.tgz" - integrity sha512-RpsAZlpWcDwOPQA22aCH4J0t7L8JmAvsCxfOSEwm7cQs3LshN36QaTkwd70DnBOXDWGssw2eUoc8CaRWT0XunA== - dependencies: - has-flag "^4.0.0" - supports-color "^7.0.0" - -supports-preserve-symlinks-flag@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz" - integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== - -symbol-tree@^3.2.4: - version "3.2.4" - resolved "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz" - integrity sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw== - -tar@^6.1.13: - version "6.1.15" - resolved "https://registry.npmjs.org/tar/-/tar-6.1.15.tgz" - integrity sha512-/zKt9UyngnxIT/EAGYuxaMYgOIJiP81ab9ZfkILq4oNLPFX50qyYmu7jRj9qeXoxmJHjGlbH0+cm2uy1WCs10A== - dependencies: - chownr "^2.0.0" - fs-minipass "^2.0.0" - minipass "^5.0.0" - minizlib "^2.1.1" - mkdirp "^1.0.3" - yallist "^4.0.0" - -terminal-link@^2.0.0: - version "2.1.1" - resolved "https://registry.npmjs.org/terminal-link/-/terminal-link-2.1.1.tgz" - integrity sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ== - dependencies: - ansi-escapes "^4.2.1" - supports-hyperlinks "^2.0.0" - -test-exclude@^6.0.0: - version "6.0.0" - resolved "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz" - integrity sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w== + "ajv" "^8.9.0" + "ajv-formats" "^2.1.1" + "ajv-keywords" "^5.1.0" + +"semver@^6.0.0": + "integrity" "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==" + "resolved" "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz" + "version" "6.3.1" + +"semver@^6.3.0": + "integrity" "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==" + "resolved" "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz" + "version" "6.3.1" + +"semver@^6.3.1": + "integrity" "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==" + "resolved" "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz" + "version" "6.3.1" + +"semver@^7.3.2", "semver@^7.3.7", "semver@^7.5.2", "semver@7.x": + "integrity" "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==" + "resolved" "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz" + "version" "7.5.4" + dependencies: + "lru-cache" "^6.0.0" + +"serialize-javascript@^6.0.0", "serialize-javascript@^6.0.1": + "integrity" "sha512-owoXEFjWRllis8/M1Q+Cw5k8ZH40e3zhp/ovX+Xr/vi1qj6QesbyXXViFbpNvWvPNAD62SutwEXavefrLJWj7w==" + "resolved" "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.1.tgz" + "version" "6.0.1" + dependencies: + "randombytes" "^2.1.0" + +"shebang-command@^2.0.0": + "integrity" "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==" + "resolved" "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz" + "version" "2.0.0" + dependencies: + "shebang-regex" "^3.0.0" + +"shebang-regex@^3.0.0": + "integrity" "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==" + "resolved" "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz" + "version" "3.0.0" + +"shiki@^0.14.1": + "integrity" "sha512-U3S/a+b0KS+UkTyMjoNojvTgrBHjgp7L6ovhFVZsXmBGnVdQ4K4U9oK0z63w538S91ATngv1vXigHCSWOwnr+g==" + "resolved" "https://registry.npmjs.org/shiki/-/shiki-0.14.3.tgz" + "version" "0.14.3" + dependencies: + "ansi-sequence-parser" "^1.1.0" + "jsonc-parser" "^3.2.0" + "vscode-oniguruma" "^1.7.0" + "vscode-textmate" "^8.0.0" + +"side-channel@^1.0.4": + "integrity" "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==" + "resolved" "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz" + "version" "1.0.4" + dependencies: + "call-bind" "^1.0.0" + "get-intrinsic" "^1.0.2" + "object-inspect" "^1.9.0" + +"signal-exit@^3.0.2", "signal-exit@^3.0.3": + "integrity" "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==" + "resolved" "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz" + "version" "3.0.7" + +"sisteransi@^1.0.5": + "integrity" "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==" + "resolved" "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz" + "version" "1.0.5" + +"slash@^3.0.0": + "integrity" "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==" + "resolved" "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz" + "version" "3.0.0" + +"slash@^4.0.0": + "integrity" "sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==" + "resolved" "https://registry.npmjs.org/slash/-/slash-4.0.0.tgz" + "version" "4.0.0" + +"source-map-support@^0.5.6", "source-map-support@~0.5.20": + "integrity" "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==" + "resolved" "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz" + "version" "0.5.21" + dependencies: + "buffer-from" "^1.0.0" + "source-map" "^0.6.0" + +"source-map@^0.6.0", "source-map@^0.6.1", "source-map@~0.6.1": + "integrity" "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + "resolved" "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz" + "version" "0.6.1" + +"source-map@^0.7.3": + "integrity" "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==" + "resolved" "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz" + "version" "0.7.4" + +"sprintf-js@~1.0.2": + "integrity" "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==" + "resolved" "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz" + "version" "1.0.3" + +"stack-utils@^2.0.3": + "integrity" "sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==" + "resolved" "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz" + "version" "2.0.6" + dependencies: + "escape-string-regexp" "^2.0.0" + +"string-length@^4.0.1": + "integrity" "sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==" + "resolved" "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz" + "version" "4.0.2" + dependencies: + "char-regex" "^1.0.2" + "strip-ansi" "^6.0.0" + +"string-width@^4.1.0", "string-width@^4.2.0": + "integrity" "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==" + "resolved" "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz" + "version" "4.2.3" + dependencies: + "emoji-regex" "^8.0.0" + "is-fullwidth-code-point" "^3.0.0" + "strip-ansi" "^6.0.1" + +"strip-ansi@^6.0.0", "strip-ansi@^6.0.1": + "integrity" "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==" + "resolved" "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz" + "version" "6.0.1" + dependencies: + "ansi-regex" "^5.0.1" + +"strip-bom@^4.0.0": + "integrity" "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==" + "resolved" "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz" + "version" "4.0.0" + +"strip-final-newline@^2.0.0": + "integrity" "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==" + "resolved" "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz" + "version" "2.0.0" + +"strip-json-comments@^3.1.1": + "integrity" "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==" + "resolved" "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz" + "version" "3.1.1" + +"supports-color@^5.3.0": + "integrity" "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==" + "resolved" "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz" + "version" "5.5.0" + dependencies: + "has-flag" "^3.0.0" + +"supports-color@^7.0.0", "supports-color@^7.1.0": + "integrity" "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==" + "resolved" "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz" + "version" "7.2.0" + dependencies: + "has-flag" "^4.0.0" + +"supports-color@^8.0.0": + "integrity" "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==" + "resolved" "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz" + "version" "8.1.1" + dependencies: + "has-flag" "^4.0.0" + +"supports-hyperlinks@^2.0.0": + "integrity" "sha512-RpsAZlpWcDwOPQA22aCH4J0t7L8JmAvsCxfOSEwm7cQs3LshN36QaTkwd70DnBOXDWGssw2eUoc8CaRWT0XunA==" + "resolved" "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-2.3.0.tgz" + "version" "2.3.0" + dependencies: + "has-flag" "^4.0.0" + "supports-color" "^7.0.0" + +"supports-preserve-symlinks-flag@^1.0.0": + "integrity" "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==" + "resolved" "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz" + "version" "1.0.0" + +"symbol-tree@^3.2.4": + "integrity" "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==" + "resolved" "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz" + "version" "3.2.4" + +"tapable@^2.1.1", "tapable@^2.2.0": + "integrity" "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==" + "resolved" "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz" + "version" "2.2.1" + +"tar@^6.1.13": + "integrity" "sha512-/zKt9UyngnxIT/EAGYuxaMYgOIJiP81ab9ZfkILq4oNLPFX50qyYmu7jRj9qeXoxmJHjGlbH0+cm2uy1WCs10A==" + "resolved" "https://registry.npmjs.org/tar/-/tar-6.1.15.tgz" + "version" "6.1.15" + dependencies: + "chownr" "^2.0.0" + "fs-minipass" "^2.0.0" + "minipass" "^5.0.0" + "minizlib" "^2.1.1" + "mkdirp" "^1.0.3" + "yallist" "^4.0.0" + +"terminal-link@^2.0.0": + "integrity" "sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ==" + "resolved" "https://registry.npmjs.org/terminal-link/-/terminal-link-2.1.1.tgz" + "version" "2.1.1" + dependencies: + "ansi-escapes" "^4.2.1" + "supports-hyperlinks" "^2.0.0" + +"terser-webpack-plugin@^5.3.7": + "integrity" "sha512-ZuXsqE07EcggTWQjXUj+Aot/OMcD0bMKGgF63f7UxYcu5/AJF53aIpK1YoP5xR9l6s/Hy2b+t1AM0bLNPRuhwA==" + "resolved" "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.9.tgz" + "version" "5.3.9" + dependencies: + "@jridgewell/trace-mapping" "^0.3.17" + "jest-worker" "^27.4.5" + "schema-utils" "^3.1.1" + "serialize-javascript" "^6.0.1" + "terser" "^5.16.8" + +"terser@^5.16.8": + "integrity" "sha512-27hxBUVdV6GoNg1pKQ7Z5cbR6V9txPVyBA+FQw3BaZ1Wuzvztce5p156DaP0NVZNrMZZ+6iG9Syf7WgMNKDg2Q==" + "resolved" "https://registry.npmjs.org/terser/-/terser-5.19.1.tgz" + "version" "5.19.1" + dependencies: + "@jridgewell/source-map" "^0.3.3" + "acorn" "^8.8.2" + "commander" "^2.20.0" + "source-map-support" "~0.5.20" + +"test-exclude@^6.0.0": + "integrity" "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==" + "resolved" "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz" + "version" "6.0.0" dependencies: "@istanbuljs/schema" "^0.1.2" - glob "^7.1.4" - minimatch "^3.0.4" - -text-encoding@^0.7.0: - version "0.7.0" - resolved "https://registry.npmjs.org/text-encoding/-/text-encoding-0.7.0.tgz" - integrity sha512-oJQ3f1hrOnbRLOcwKz0Liq2IcrvDeZRHXhd9RgLrsT+DjWY/nty1Hi7v3dtkaEYbPYe0mUoOfzRrMwfXXwgPUA== - -text-table@^0.2.0: - version "0.2.0" - resolved "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz" - integrity sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw== - -throat@^6.0.1: - version "6.0.2" - resolved "https://registry.npmjs.org/throat/-/throat-6.0.2.tgz" - integrity sha512-WKexMoJj3vEuK0yFEapj8y64V0A6xcuPuK9Gt1d0R+dzCSJc0lHqQytAbSB4cDAK0dWh4T0E2ETkoLE2WZ41OQ== - -tmpl@1.0.5: - version "1.0.5" - resolved "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz" - integrity sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw== - -to-fast-properties@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz" - integrity sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog== - -to-regex-range@^5.0.1: - version "5.0.1" - resolved "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz" - integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== - dependencies: - is-number "^7.0.0" - -toidentifier@1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.1.tgz#3be34321a88a820ed1bd80dfaa33e479fbb8dd35" - integrity sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA== - -tough-cookie@^4.0.0, tough-cookie@^4.1.3: - version "4.1.3" - resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-4.1.3.tgz#97b9adb0728b42280aa3d814b6b999b2ff0318bf" - integrity sha512-aX/y5pVRkfRnfmuX+OdbSdXvPe6ieKX/G2s7e98f4poJHnqH3281gDPm/metm6E/WRamfx7WC4HUqkWHfQHprw== - dependencies: - psl "^1.1.33" - punycode "^2.1.1" - universalify "^0.2.0" - url-parse "^1.5.3" - -tr46@^2.1.0: - version "2.1.0" - resolved "https://registry.npmjs.org/tr46/-/tr46-2.1.0.tgz" - integrity sha512-15Ih7phfcdP5YxqiB+iDtLoaTz4Nd35+IiAv0kQ5FNKHzXgdWqPoTIqEDDJmXceQt4JZk6lVPT8lnDlPpGDppw== - dependencies: - punycode "^2.1.1" - -tr46@~0.0.3: - version "0.0.3" - resolved "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz" - integrity sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw== - -ts-jest@^27.1.5: - version "27.1.5" - resolved "https://registry.npmjs.org/ts-jest/-/ts-jest-27.1.5.tgz" - integrity sha512-Xv6jBQPoBEvBq/5i2TeSG9tt/nqkbpcurrEG1b+2yfBrcJelOZF9Ml6dmyMh7bcW9JyFbRYpR5rxROSlBLTZHA== - dependencies: - bs-logger "0.x" - fast-json-stable-stringify "2.x" - jest-util "^27.0.0" - json5 "2.x" - lodash.memoize "4.x" - make-error "1.x" - semver "7.x" - yargs-parser "20.x" - -ts-node@^10.9.1: - version "10.9.1" - resolved "https://registry.npmjs.org/ts-node/-/ts-node-10.9.1.tgz" - integrity sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw== + "glob" "^7.1.4" + "minimatch" "^3.0.4" + +"text-encoding@^0.7.0": + "integrity" "sha512-oJQ3f1hrOnbRLOcwKz0Liq2IcrvDeZRHXhd9RgLrsT+DjWY/nty1Hi7v3dtkaEYbPYe0mUoOfzRrMwfXXwgPUA==" + "resolved" "https://registry.npmjs.org/text-encoding/-/text-encoding-0.7.0.tgz" + "version" "0.7.0" + +"text-table@^0.2.0": + "integrity" "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==" + "resolved" "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz" + "version" "0.2.0" + +"throat@^6.0.1": + "integrity" "sha512-WKexMoJj3vEuK0yFEapj8y64V0A6xcuPuK9Gt1d0R+dzCSJc0lHqQytAbSB4cDAK0dWh4T0E2ETkoLE2WZ41OQ==" + "resolved" "https://registry.npmjs.org/throat/-/throat-6.0.2.tgz" + "version" "6.0.2" + +"tmpl@1.0.5": + "integrity" "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==" + "resolved" "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz" + "version" "1.0.5" + +"to-fast-properties@^2.0.0": + "integrity" "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==" + "resolved" "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz" + "version" "2.0.0" + +"to-regex-range@^5.0.1": + "integrity" "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==" + "resolved" "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz" + "version" "5.0.1" + dependencies: + "is-number" "^7.0.0" + +"tough-cookie@^4.0.0": + "integrity" "sha512-aX/y5pVRkfRnfmuX+OdbSdXvPe6ieKX/G2s7e98f4poJHnqH3281gDPm/metm6E/WRamfx7WC4HUqkWHfQHprw==" + "resolved" "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.3.tgz" + "version" "4.1.3" + dependencies: + "psl" "^1.1.33" + "punycode" "^2.1.1" + "universalify" "^0.2.0" + "url-parse" "^1.5.3" + +"tr46@^2.1.0": + "integrity" "sha512-15Ih7phfcdP5YxqiB+iDtLoaTz4Nd35+IiAv0kQ5FNKHzXgdWqPoTIqEDDJmXceQt4JZk6lVPT8lnDlPpGDppw==" + "resolved" "https://registry.npmjs.org/tr46/-/tr46-2.1.0.tgz" + "version" "2.1.0" + dependencies: + "punycode" "^2.1.1" + +"tr46@~0.0.3": + "integrity" "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" + "resolved" "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz" + "version" "0.0.3" + +"ts-jest@^27.1.5": + "integrity" "sha512-Xv6jBQPoBEvBq/5i2TeSG9tt/nqkbpcurrEG1b+2yfBrcJelOZF9Ml6dmyMh7bcW9JyFbRYpR5rxROSlBLTZHA==" + "resolved" "https://registry.npmjs.org/ts-jest/-/ts-jest-27.1.5.tgz" + "version" "27.1.5" + dependencies: + "bs-logger" "0.x" + "fast-json-stable-stringify" "2.x" + "jest-util" "^27.0.0" + "json5" "2.x" + "lodash.memoize" "4.x" + "make-error" "1.x" + "semver" "7.x" + "yargs-parser" "20.x" + +"ts-node@^10.9.1", "ts-node@>=9.0.0": + "integrity" "sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==" + "resolved" "https://registry.npmjs.org/ts-node/-/ts-node-10.9.1.tgz" + "version" "10.9.1" dependencies: "@cspotcode/source-map-support" "^0.8.0" "@tsconfig/node10" "^1.0.7" "@tsconfig/node12" "^1.0.7" "@tsconfig/node14" "^1.0.0" "@tsconfig/node16" "^1.0.2" - acorn "^8.4.1" - acorn-walk "^8.1.1" - arg "^4.1.0" - create-require "^1.1.0" - diff "^4.0.1" - make-error "^1.1.1" - v8-compile-cache-lib "^3.0.1" - yn "3.1.1" - -tslib@^1.8.1: - version "1.14.1" - resolved "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz" - integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== - -tsutils@^3.21.0: - version "3.21.0" - resolved "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz" - integrity sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA== - dependencies: - tslib "^1.8.1" - -type-check@^0.4.0, type-check@~0.4.0: - version "0.4.0" - resolved "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz" - integrity sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew== - dependencies: - prelude-ls "^1.2.1" - -type-detect@4.0.8: - version "4.0.8" - resolved "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz" - integrity sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g== - -type-fest@^0.20.2: - version "0.20.2" - resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz" - integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ== - -type-fest@^0.21.3: - version "0.21.3" - resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz" - integrity sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w== - -type-is@~1.6.18: - version "1.6.18" - resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.18.tgz#4e552cd05df09467dcbc4ef739de89f2cf37c131" - integrity sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g== - dependencies: - media-typer "0.3.0" - mime-types "~2.1.24" - -typedarray-to-buffer@^3.1.5: - version "3.1.5" - resolved "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz" - integrity sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q== - dependencies: - is-typedarray "^1.0.0" - -typedoc-plugin-markdown@^3.13.4: - version "3.15.3" - resolved "https://registry.npmjs.org/typedoc-plugin-markdown/-/typedoc-plugin-markdown-3.15.3.tgz" - integrity sha512-idntFYu3vfaY3eaD+w9DeRd0PmNGqGuNLKihPU9poxFGnATJYGn9dPtEhn2QrTdishFMg7jPXAhos+2T6YCWRQ== - dependencies: - handlebars "^4.7.7" - -typedoc@^0.23.9: - version "0.23.28" - resolved "https://registry.npmjs.org/typedoc/-/typedoc-0.23.28.tgz" - integrity sha512-9x1+hZWTHEQcGoP7qFmlo4unUoVJLB0H/8vfO/7wqTnZxg4kPuji9y3uRzEu0ZKez63OJAUmiGhUrtukC6Uj3w== - dependencies: - lunr "^2.3.9" - marked "^4.2.12" - minimatch "^7.1.3" - shiki "^0.14.1" - -typescript@^4.7.4: - version "4.9.5" - resolved "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz" - integrity sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g== - -uglify-js@^3.1.4: - version "3.17.4" - resolved "https://registry.npmjs.org/uglify-js/-/uglify-js-3.17.4.tgz" - integrity sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g== - -universalify@^0.2.0: - version "0.2.0" - resolved "https://registry.npmjs.org/universalify/-/universalify-0.2.0.tgz" - integrity sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg== - -universalify@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz" - integrity sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ== - -unpipe@1.0.0, unpipe@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" - integrity sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ== - -update-browserslist-db@^1.0.11: - version "1.0.11" - resolved "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.11.tgz" - integrity sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA== - dependencies: - escalade "^3.1.1" - picocolors "^1.0.0" - -uri-js@^4.2.2: - version "4.4.1" - resolved "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz" - integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg== - dependencies: - punycode "^2.1.0" - -url-parse@^1.5.3: - version "1.5.10" - resolved "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz" - integrity sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ== - dependencies: - querystringify "^2.1.1" - requires-port "^1.0.0" - -utils-merge@1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" - integrity sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA== - -v8-compile-cache-lib@^3.0.1: - version "3.0.1" - resolved "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz" - integrity sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg== - -v8-to-istanbul@^8.1.0: - version "8.1.1" - resolved "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-8.1.1.tgz" - integrity sha512-FGtKtv3xIpR6BYhvgH8MI/y78oT7d8Au3ww4QIxymrCtZEh5b8gCw2siywE+puhEmuWKDtmfrvF5UlB298ut3w== + "acorn" "^8.4.1" + "acorn-walk" "^8.1.1" + "arg" "^4.1.0" + "create-require" "^1.1.0" + "diff" "^4.0.1" + "make-error" "^1.1.1" + "v8-compile-cache-lib" "^3.0.1" + "yn" "3.1.1" + +"tslib@^1.8.1": + "integrity" "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + "resolved" "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz" + "version" "1.14.1" + +"tsutils@^3.21.0": + "integrity" "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==" + "resolved" "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz" + "version" "3.21.0" + dependencies: + "tslib" "^1.8.1" + +"type-check@^0.4.0", "type-check@~0.4.0": + "integrity" "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==" + "resolved" "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz" + "version" "0.4.0" + dependencies: + "prelude-ls" "^1.2.1" + +"type-detect@4.0.8": + "integrity" "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==" + "resolved" "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz" + "version" "4.0.8" + +"type-fest@^0.20.2": + "integrity" "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==" + "resolved" "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz" + "version" "0.20.2" + +"type-fest@^0.21.3": + "integrity" "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==" + "resolved" "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz" + "version" "0.21.3" + +"typedarray-to-buffer@^3.1.5": + "integrity" "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==" + "resolved" "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz" + "version" "3.1.5" + dependencies: + "is-typedarray" "^1.0.0" + +"typedoc-plugin-markdown@^3.13.4": + "integrity" "sha512-idntFYu3vfaY3eaD+w9DeRd0PmNGqGuNLKihPU9poxFGnATJYGn9dPtEhn2QrTdishFMg7jPXAhos+2T6YCWRQ==" + "resolved" "https://registry.npmjs.org/typedoc-plugin-markdown/-/typedoc-plugin-markdown-3.15.3.tgz" + "version" "3.15.3" + dependencies: + "handlebars" "^4.7.7" + +"typedoc@^0.24.0", "typedoc@>=0.24.0": + "integrity" "sha512-ahJ6Cpcvxwaxfu4KtjA8qZNqS43wYt6JL27wYiIgl1vd38WW/KWX11YuAeZhuz9v+ttrutSsgK+XO1CjL1kA3w==" + "resolved" "https://registry.npmjs.org/typedoc/-/typedoc-0.24.8.tgz" + "version" "0.24.8" + dependencies: + "lunr" "^2.3.9" + "marked" "^4.3.0" + "minimatch" "^9.0.0" + "shiki" "^0.14.1" + +"typescript@^4.7.4", "typescript@>=2.7", "typescript@>=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta", "typescript@>=3.8 <5.0", "typescript@4.6.x || 4.7.x || 4.8.x || 4.9.x || 5.0.x || 5.1.x": + "integrity" "sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==" + "resolved" "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz" + "version" "4.9.5" + +"uglify-js@^3.1.4": + "integrity" "sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g==" + "resolved" "https://registry.npmjs.org/uglify-js/-/uglify-js-3.17.4.tgz" + "version" "3.17.4" + +"universalify@^0.2.0": + "integrity" "sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==" + "resolved" "https://registry.npmjs.org/universalify/-/universalify-0.2.0.tgz" + "version" "0.2.0" + +"universalify@^2.0.0": + "integrity" "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==" + "resolved" "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz" + "version" "2.0.0" + +"update-browserslist-db@^1.0.11": + "integrity" "sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA==" + "resolved" "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.11.tgz" + "version" "1.0.11" + dependencies: + "escalade" "^3.1.1" + "picocolors" "^1.0.0" + +"uri-js@^4.2.2": + "integrity" "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==" + "resolved" "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz" + "version" "4.4.1" + dependencies: + "punycode" "^2.1.0" + +"url-parse@^1.5.3": + "integrity" "sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==" + "resolved" "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz" + "version" "1.5.10" + dependencies: + "querystringify" "^2.1.1" + "requires-port" "^1.0.0" + +"v8-compile-cache-lib@^3.0.1": + "integrity" "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==" + "resolved" "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz" + "version" "3.0.1" + +"v8-to-istanbul@^8.1.0": + "integrity" "sha512-FGtKtv3xIpR6BYhvgH8MI/y78oT7d8Au3ww4QIxymrCtZEh5b8gCw2siywE+puhEmuWKDtmfrvF5UlB298ut3w==" + "resolved" "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-8.1.1.tgz" + "version" "8.1.1" dependencies: "@types/istanbul-lib-coverage" "^2.0.1" - convert-source-map "^1.6.0" - source-map "^0.7.3" - -vary@~1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" - integrity sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg== - -vscode-oniguruma@^1.7.0: - version "1.7.0" - resolved "https://registry.npmjs.org/vscode-oniguruma/-/vscode-oniguruma-1.7.0.tgz" - integrity sha512-L9WMGRfrjOhgHSdOYgCt/yRMsXzLDJSL7BPrOZt73gU0iWO4mpqzqQzOz5srxqTvMBaR0XZTSrVWo4j55Rc6cA== - -vscode-textmate@^8.0.0: - version "8.0.0" - resolved "https://registry.npmjs.org/vscode-textmate/-/vscode-textmate-8.0.0.tgz" - integrity sha512-AFbieoL7a5LMqcnOF04ji+rpXadgOXnZsxQr//r83kLPr7biP7am3g9zbaZIaBGwBRWeSvoMD4mgPdX3e4NWBg== - -w3c-hr-time@^1.0.2: - version "1.0.2" - resolved "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz" - integrity sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ== - dependencies: - browser-process-hrtime "^1.0.0" - -w3c-xmlserializer@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-2.0.0.tgz" - integrity sha512-4tzD0mF8iSiMiNs30BiLO3EpfGLZUT2MSX/G+o7ZywDzliWQ3OPtTZ0PTC3B3ca1UAf4cJMHB+2Bf56EriJuRA== - dependencies: - xml-name-validator "^3.0.0" - -walker@^1.0.7: - version "1.0.8" - resolved "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz" - integrity sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ== - dependencies: - makeerror "1.0.12" - -wasm-opt@^1.3.0: - version "1.4.0" - resolved "https://registry.npmjs.org/wasm-opt/-/wasm-opt-1.4.0.tgz" - integrity sha512-wIsxxp0/FOSphokH4VOONy1zPkVREQfALN+/JTvJPK8gFSKbsmrcfECu2hT7OowqPfb4WEMSMceHgNL0ipFRyw== - dependencies: - node-fetch "^2.6.9" - tar "^6.1.13" - -webidl-conversions@^3.0.0: - version "3.0.1" - resolved "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz" - integrity sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ== - -webidl-conversions@^5.0.0: - version "5.0.0" - resolved "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-5.0.0.tgz" - integrity sha512-VlZwKPCkYKxQgeSbH5EyngOmRp7Ww7I9rQLERETtf5ofd9pGeswWiOtogpEO850jziPRarreGxn5QIiTqpb2wA== - -webidl-conversions@^6.1.0: - version "6.1.0" - resolved "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-6.1.0.tgz" - integrity sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w== - -whatwg-encoding@^1.0.5: - version "1.0.5" - resolved "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz" - integrity sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw== - dependencies: - iconv-lite "0.4.24" - -whatwg-mimetype@^2.3.0: - version "2.3.0" - resolved "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz" - integrity sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g== - -whatwg-url@^5.0.0: - version "5.0.0" - resolved "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz" - integrity sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw== - dependencies: - tr46 "~0.0.3" - webidl-conversions "^3.0.0" - -whatwg-url@^8.0.0, whatwg-url@^8.5.0: - version "8.7.0" - resolved "https://registry.npmjs.org/whatwg-url/-/whatwg-url-8.7.0.tgz" - integrity sha512-gAojqb/m9Q8a5IV96E3fHJM70AzCkgt4uXYX2O7EmuyOnLrViCQlsEBmF9UQIu3/aeAIp2U17rtbpZWNntQqdg== - dependencies: - lodash "^4.7.0" - tr46 "^2.1.0" - webidl-conversions "^6.1.0" - -which@^2.0.1: - version "2.0.2" - resolved "https://registry.npmjs.org/which/-/which-2.0.2.tgz" - integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== - dependencies: - isexe "^2.0.0" - -word-wrap@^1.2.4: - version "1.2.5" - resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.5.tgz#d2c45c6dd4fbce621a66f136cbe328afd0410b34" - integrity sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA== - -wordwrap@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz" - integrity sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q== - -wrap-ansi@^7.0.0: - version "7.0.0" - resolved "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz" - integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== - dependencies: - ansi-styles "^4.0.0" - string-width "^4.1.0" - strip-ansi "^6.0.0" - -wrappy@1: - version "1.0.2" - resolved "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz" - integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== - -write-file-atomic@^3.0.0: - version "3.0.3" - resolved "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz" - integrity sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q== - dependencies: - imurmurhash "^0.1.4" - is-typedarray "^1.0.0" - signal-exit "^3.0.2" - typedarray-to-buffer "^3.1.5" - -ws@^7.4.6: - version "7.5.9" - resolved "https://registry.npmjs.org/ws/-/ws-7.5.9.tgz" - integrity sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q== - -xml-name-validator@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-3.0.0.tgz" - integrity sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw== - -xmlchars@^2.2.0: - version "2.2.0" - resolved "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz" - integrity sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw== - -y18n@^5.0.5: - version "5.0.8" - resolved "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz" - integrity sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA== - -yallist@^3.0.2: - version "3.1.1" - resolved "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz" - integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g== - -yallist@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz" - integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== - -yargs-parser@20.x, yargs-parser@^20.2.2: - version "20.2.9" - resolved "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz" - integrity sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w== - -yargs@^16.2.0: - version "16.2.0" - resolved "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz" - integrity sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw== - dependencies: - cliui "^7.0.2" - escalade "^3.1.1" - get-caller-file "^2.0.5" - require-directory "^2.1.1" - string-width "^4.2.0" - y18n "^5.0.5" - yargs-parser "^20.2.2" - -yn@3.1.1: - version "3.1.1" - resolved "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz" - integrity sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q== - -yocto-queue@^0.1.0: - version "0.1.0" - resolved "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz" - integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== + "convert-source-map" "^1.6.0" + "source-map" "^0.7.3" + +"vscode-oniguruma@^1.7.0": + "integrity" "sha512-L9WMGRfrjOhgHSdOYgCt/yRMsXzLDJSL7BPrOZt73gU0iWO4mpqzqQzOz5srxqTvMBaR0XZTSrVWo4j55Rc6cA==" + "resolved" "https://registry.npmjs.org/vscode-oniguruma/-/vscode-oniguruma-1.7.0.tgz" + "version" "1.7.0" + +"vscode-textmate@^8.0.0": + "integrity" "sha512-AFbieoL7a5LMqcnOF04ji+rpXadgOXnZsxQr//r83kLPr7biP7am3g9zbaZIaBGwBRWeSvoMD4mgPdX3e4NWBg==" + "resolved" "https://registry.npmjs.org/vscode-textmate/-/vscode-textmate-8.0.0.tgz" + "version" "8.0.0" + +"w3c-hr-time@^1.0.2": + "integrity" "sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ==" + "resolved" "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz" + "version" "1.0.2" + dependencies: + "browser-process-hrtime" "^1.0.0" + +"w3c-xmlserializer@^2.0.0": + "integrity" "sha512-4tzD0mF8iSiMiNs30BiLO3EpfGLZUT2MSX/G+o7ZywDzliWQ3OPtTZ0PTC3B3ca1UAf4cJMHB+2Bf56EriJuRA==" + "resolved" "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-2.0.0.tgz" + "version" "2.0.0" + dependencies: + "xml-name-validator" "^3.0.0" + +"walker@^1.0.7": + "integrity" "sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==" + "resolved" "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz" + "version" "1.0.8" + dependencies: + "makeerror" "1.0.12" + +"wasm-opt@^1.3.0": + "integrity" "sha512-wIsxxp0/FOSphokH4VOONy1zPkVREQfALN+/JTvJPK8gFSKbsmrcfECu2hT7OowqPfb4WEMSMceHgNL0ipFRyw==" + "resolved" "https://registry.npmjs.org/wasm-opt/-/wasm-opt-1.4.0.tgz" + "version" "1.4.0" + dependencies: + "node-fetch" "^2.6.9" + "tar" "^6.1.13" + +"watchpack@^2.4.0": + "integrity" "sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg==" + "resolved" "https://registry.npmjs.org/watchpack/-/watchpack-2.4.0.tgz" + "version" "2.4.0" + dependencies: + "glob-to-regexp" "^0.4.1" + "graceful-fs" "^4.1.2" + +"webidl-conversions@^3.0.0": + "integrity" "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" + "resolved" "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz" + "version" "3.0.1" + +"webidl-conversions@^5.0.0": + "integrity" "sha512-VlZwKPCkYKxQgeSbH5EyngOmRp7Ww7I9rQLERETtf5ofd9pGeswWiOtogpEO850jziPRarreGxn5QIiTqpb2wA==" + "resolved" "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-5.0.0.tgz" + "version" "5.0.0" + +"webidl-conversions@^6.1.0": + "integrity" "sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w==" + "resolved" "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-6.1.0.tgz" + "version" "6.1.0" + +"webpack-sources@^3.2.3": + "integrity" "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==" + "resolved" "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz" + "version" "3.2.3" + +"webpack@^5.1.0": + "integrity" "sha512-JmcgNZ1iKj+aiR0OvTYtWQqJwq37Pf683dY9bVORwVbUrDhLhdn/PlO2sHsFHPkj7sHNQF3JwaAkp49V+Sq1tQ==" + "resolved" "https://registry.npmjs.org/webpack/-/webpack-5.88.2.tgz" + "version" "5.88.2" + dependencies: + "@types/eslint-scope" "^3.7.3" + "@types/estree" "^1.0.0" + "@webassemblyjs/ast" "^1.11.5" + "@webassemblyjs/wasm-edit" "^1.11.5" + "@webassemblyjs/wasm-parser" "^1.11.5" + "acorn" "^8.7.1" + "acorn-import-assertions" "^1.9.0" + "browserslist" "^4.14.5" + "chrome-trace-event" "^1.0.2" + "enhanced-resolve" "^5.15.0" + "es-module-lexer" "^1.2.1" + "eslint-scope" "5.1.1" + "events" "^3.2.0" + "glob-to-regexp" "^0.4.1" + "graceful-fs" "^4.2.9" + "json-parse-even-better-errors" "^2.3.1" + "loader-runner" "^4.2.0" + "mime-types" "^2.1.27" + "neo-async" "^2.6.2" + "schema-utils" "^3.2.0" + "tapable" "^2.1.1" + "terser-webpack-plugin" "^5.3.7" + "watchpack" "^2.4.0" + "webpack-sources" "^3.2.3" + +"whatwg-encoding@^1.0.5": + "integrity" "sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw==" + "resolved" "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz" + "version" "1.0.5" + dependencies: + "iconv-lite" "0.4.24" + +"whatwg-mimetype@^2.3.0": + "integrity" "sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g==" + "resolved" "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz" + "version" "2.3.0" + +"whatwg-url@^5.0.0": + "integrity" "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==" + "resolved" "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz" + "version" "5.0.0" + dependencies: + "tr46" "~0.0.3" + "webidl-conversions" "^3.0.0" + +"whatwg-url@^8.0.0", "whatwg-url@^8.5.0": + "integrity" "sha512-gAojqb/m9Q8a5IV96E3fHJM70AzCkgt4uXYX2O7EmuyOnLrViCQlsEBmF9UQIu3/aeAIp2U17rtbpZWNntQqdg==" + "resolved" "https://registry.npmjs.org/whatwg-url/-/whatwg-url-8.7.0.tgz" + "version" "8.7.0" + dependencies: + "lodash" "^4.7.0" + "tr46" "^2.1.0" + "webidl-conversions" "^6.1.0" + +"which@^2.0.1": + "integrity" "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==" + "resolved" "https://registry.npmjs.org/which/-/which-2.0.2.tgz" + "version" "2.0.2" + dependencies: + "isexe" "^2.0.0" + +"wordwrap@^1.0.0": + "integrity" "sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==" + "resolved" "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz" + "version" "1.0.0" + +"wrap-ansi@^7.0.0": + "integrity" "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==" + "resolved" "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz" + "version" "7.0.0" + dependencies: + "ansi-styles" "^4.0.0" + "string-width" "^4.1.0" + "strip-ansi" "^6.0.0" + +"wrappy@1": + "integrity" "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" + "resolved" "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz" + "version" "1.0.2" + +"write-file-atomic@^3.0.0": + "integrity" "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==" + "resolved" "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz" + "version" "3.0.3" + dependencies: + "imurmurhash" "^0.1.4" + "is-typedarray" "^1.0.0" + "signal-exit" "^3.0.2" + "typedarray-to-buffer" "^3.1.5" + +"ws@^7.4.6": + "integrity" "sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==" + "resolved" "https://registry.npmjs.org/ws/-/ws-7.5.9.tgz" + "version" "7.5.9" + +"xml-name-validator@^3.0.0": + "integrity" "sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==" + "resolved" "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-3.0.0.tgz" + "version" "3.0.0" + +"xmlchars@^2.2.0": + "integrity" "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==" + "resolved" "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz" + "version" "2.2.0" + +"y18n@^5.0.5": + "integrity" "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==" + "resolved" "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz" + "version" "5.0.8" + +"yallist@^3.0.2": + "integrity" "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==" + "resolved" "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz" + "version" "3.1.1" + +"yallist@^4.0.0": + "integrity" "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + "resolved" "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz" + "version" "4.0.0" + +"yargs-parser@^20.2.2", "yargs-parser@20.x": + "integrity" "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==" + "resolved" "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz" + "version" "20.2.9" + +"yargs@^16.2.0": + "integrity" "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==" + "resolved" "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz" + "version" "16.2.0" + dependencies: + "cliui" "^7.0.2" + "escalade" "^3.1.1" + "get-caller-file" "^2.0.5" + "require-directory" "^2.1.1" + "string-width" "^4.2.0" + "y18n" "^5.0.5" + "yargs-parser" "^20.2.2" + +"yn@3.1.1": + "integrity" "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==" + "resolved" "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz" + "version" "3.1.1" + +"yocto-queue@^0.1.0": + "integrity" "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==" + "resolved" "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz" + "version" "0.1.0" From 02be942eb0a45bc9f82e4efab0fb1fe2f1690b88 Mon Sep 17 00:00:00 2001 From: Ben Shaver Date: Tue, 24 Oct 2023 06:32:53 -0400 Subject: [PATCH 09/91] chore: adding py.typed file to iota_sdk python package (#1495) * chore: adding py.typed file to iota_sdk python package This signals to static type checkers like mypy to use the type hints included in the source code Signed-off-by: Ben Shaver * Changelog entry --------- Signed-off-by: Ben Shaver Co-authored-by: Thibault Martinez --- bindings/python/CHANGELOG.md | 1 + bindings/python/iota_sdk/py.typed | 0 bindings/python/setup.py | 1 + 3 files changed, 2 insertions(+) create mode 100644 bindings/python/iota_sdk/py.typed diff --git a/bindings/python/CHANGELOG.md b/bindings/python/CHANGELOG.md index 93da736851..4b7c5c1881 100644 --- a/bindings/python/CHANGELOG.md +++ b/bindings/python/CHANGELOG.md @@ -24,6 +24,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Added - `Utils:transaction_id()`; +- `py.typed` file to the package; ## 1.1.0 - 2023-09-29 diff --git a/bindings/python/iota_sdk/py.typed b/bindings/python/iota_sdk/py.typed new file mode 100644 index 0000000000..e69de29bb2 diff --git a/bindings/python/setup.py b/bindings/python/setup.py index 54041680e6..baf74f8a72 100644 --- a/bindings/python/setup.py +++ b/bindings/python/setup.py @@ -42,4 +42,5 @@ def get_py_version_cfgs(): include_package_data=True, zip_safe=False, install_requires=["dacite >= 1.8.1 ; pyhumps >= 3.8.0"], + package_data={"iota_sdk": ["py.typed"]} ) From 474b1bacdbd30287cab0abc77e41051cd600f0c4 Mon Sep 17 00:00:00 2001 From: Thibault Martinez Date: Tue, 24 Oct 2023 16:50:50 +0200 Subject: [PATCH 10/91] Fix ledger nano remainder finder (#1496) * Fix ledger nano remainder finder * Changelog * Fix comment * Fmt * Nit * Remove label * Reword --- sdk/CHANGELOG.md | 1 + sdk/src/client/secret/ledger_nano.rs | 65 +++++++++++++--------------- 2 files changed, 30 insertions(+), 36 deletions(-) diff --git a/sdk/CHANGELOG.md b/sdk/CHANGELOG.md index ac26dafe3b..795a0521aa 100644 --- a/sdk/CHANGELOG.md +++ b/sdk/CHANGELOG.md @@ -29,6 +29,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - `Account::claim_outputs()` if an input has less amount than min storage deposit; - URLs aren't truncated after the hostname anymore; +- Ledger nano potentially failing to identify the correct remainder output; ## 1.1.1 - 2023-10-11 diff --git a/sdk/src/client/secret/ledger_nano.rs b/sdk/src/client/secret/ledger_nano.rs index 3a46b40dd9..9b67239f5f 100644 --- a/sdk/src/client/secret/ledger_nano.rs +++ b/sdk/src/client/secret/ledger_nano.rs @@ -294,53 +294,46 @@ impl SecretManage for LedgerSecretManager { .prepare_blind_signing(input_bip32_indices, essence_hash) .map_err(Error::from)?; } else { - // figure out the remainder address and bip32 index (if there is one) + // figure out the remainder output and bip32 index (if there is one) #[allow(clippy::option_if_let_else)] - let (remainder_address, remainder_bip32): (Option<&Address>, LedgerBIP32Index) = - match &prepared_transaction.remainder { - Some(a) => { - if let Some(chain) = a.chain { - ( - Some(&a.address), - LedgerBIP32Index { - bip32_change: chain.change.harden().into(), - bip32_index: chain.address_index.harden().into(), - }, - ) - } else { - (None, LedgerBIP32Index::default()) - } + let (remainder_output, remainder_bip32) = match &prepared_transaction.remainder { + Some(remainder) => { + if let Some(chain) = remainder.chain { + ( + Some(&remainder.output), + LedgerBIP32Index { + bip32_change: chain.change.harden().into(), + bip32_index: chain.address_index.harden().into(), + }, + ) + } else { + (None, LedgerBIP32Index::default()) } - None => (None, LedgerBIP32Index::default()), - }; + } + None => (None, LedgerBIP32Index::default()), + }; let mut remainder_index = 0u16; - if let Some(remainder_address) = remainder_address { + if let Some(remainder_output) = remainder_output { match &prepared_transaction.essence { TransactionEssence::Regular(essence) => { - // find the index of the remainder in the essence - // this has to be done because outputs in essences are sorted - // lexically and therefore the remainder is not always the last output. - // The index within the essence and the bip32 index will be validated - // by the hardware wallet. - // The outputs in the essence already are sorted - // at this place, so we can rely on their order and don't have to sort it again. - 'essence_outputs: for output in essence.outputs().iter() { - if let Output::Basic(s) = output { - if let Some(address) = s.unlock_conditions().address() { - if *remainder_address == *address.address() { - break 'essence_outputs; - } - } - } else { + // Find the index of the remainder in the transaction because it is not always the last output. + // The index within the transaction and the bip32 index will be validated by the hardware + // wallet. + for output in essence.outputs().iter() { + if !output.is_basic() { log::debug!("[LEDGER] unsupported output"); return Err(Error::MiscError.into()); } + if remainder_output == output { + break; + } + remainder_index += 1; } - // was index found? + // Was index found? if remainder_index as usize == essence.outputs().len() { log::debug!("[LEDGER] remainder_index not found"); return Err(Error::MiscError.into()); @@ -355,7 +348,7 @@ impl SecretManage for LedgerSecretManager { "[LEDGER] {:?} {:02x?} {} {} {:?}", input_bip32_indices, essence_bytes, - remainder_address.is_some(), + remainder_output.is_some(), remainder_index, remainder_bip32 ); @@ -363,7 +356,7 @@ impl SecretManage for LedgerSecretManager { .prepare_signing( input_bip32_indices, essence_bytes, - remainder_address.is_some(), + remainder_output.is_some(), remainder_index, remainder_bip32, ) From eb99fb97de09cff20a7ad72bca9480a12c068083 Mon Sep 17 00:00:00 2001 From: Thibault Martinez Date: Wed, 25 Oct 2023 10:17:51 +0200 Subject: [PATCH 11/91] CLI: add rustyline to target_exclusions (#1505) --- cli/src/main.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cli/src/main.rs b/cli/src/main.rs index ea0336e05b..1100b419d2 100644 --- a/cli/src/main.rs +++ b/cli/src/main.rs @@ -36,7 +36,7 @@ fn logger_init(cli: &WalletCli) -> Result<(), Error> { let archive = LoggerOutputConfigBuilder::default() .name("archive.log") .level_filter(cli.log_level) - .target_exclusions(&["rustls"]) + .target_exclusions(&["rustls", "rustyline"]) .color_enabled(false); let config = LoggerConfigBuilder::default().with_output(archive).finish(); From 8f57f0c50f555b5e62f78ebf0177fc71b78f0396 Mon Sep 17 00:00:00 2001 From: Brord van Wierst Date: Wed, 25 Oct 2023 15:03:14 +0200 Subject: [PATCH 12/91] feat/python: Lint sdk develop (#1411) * moved pylint to root * feat/Python: Add pylint to code (#1315) * moved pylint to root * lints * pylint fixes * final fixes * autopep format * fixes for irc and delegation * changed to better ABC layout * some gh actions only error?? --------- Co-authored-by: Thoralf-M <46689931+Thoralf-M@users.noreply.github.com> * fixes for develop * reverts * lint * reverted range * docs * format * comment * some more doc fix * todo comment on disable * changed docs * Update bindings/python/iota_sdk/wallet/account.py Co-authored-by: Thoralf-M <46689931+Thoralf-M@users.noreply.github.com> * 2 review comments * format * pep again? * fmt x2 * final lints * removed test * review * revert * 1 more * Update bindings/python/iota_sdk/types/unlock.py * Update bindings/python/iota_sdk/types/irc_30.py * changelog --------- Co-authored-by: Thoralf-M <46689931+Thoralf-M@users.noreply.github.com> Co-authored-by: Thibault Martinez Co-authored-by: Thibault Martinez --- .github/workflows/bindings-python.yml | 5 + bindings/python/.pylintrc | 10 +- bindings/python/CHANGELOG.md | 5 + .../consolidate_outputs.py | 20 +--- bindings/python/iota_sdk/__init__.py | 4 +- .../python/iota_sdk/client/_high_level_api.py | 40 +++++-- .../python/iota_sdk/client/_node_core_api.py | 29 ++++- .../iota_sdk/client/_node_indexer_api.py | 106 +++++++++++------- bindings/python/iota_sdk/client/_utils.py | 29 ++++- bindings/python/iota_sdk/client/client.py | 22 ++-- bindings/python/iota_sdk/external.py | 5 + .../iota_sdk/secret_manager/secret_manager.py | 23 ++-- bindings/python/iota_sdk/types/address.py | 4 +- bindings/python/iota_sdk/types/balance.py | 4 +- bindings/python/iota_sdk/types/block.py | 48 +++++--- bindings/python/iota_sdk/types/burn.py | 2 + .../python/iota_sdk/types/client_options.py | 4 + bindings/python/iota_sdk/types/common.py | 4 + bindings/python/iota_sdk/types/event.py | 12 +- bindings/python/iota_sdk/types/feature.py | 8 +- bindings/python/iota_sdk/types/irc_27.py | 17 ++- bindings/python/iota_sdk/types/irc_30.py | 15 ++- .../python/iota_sdk/types/native_token.py | 2 +- bindings/python/iota_sdk/types/output.py | 24 +++- bindings/python/iota_sdk/types/payload.py | 25 ++++- bindings/python/iota_sdk/types/send_params.py | 6 + .../python/iota_sdk/types/token_scheme.py | 2 + bindings/python/iota_sdk/types/transaction.py | 5 +- .../python/iota_sdk/types/transaction_data.py | 8 ++ .../iota_sdk/types/transaction_options.py | 14 ++- bindings/python/iota_sdk/types/unlock.py | 11 +- .../python/iota_sdk/types/unlock_condition.py | 4 +- .../python/iota_sdk/types/utxo_changes.py | 2 +- bindings/python/iota_sdk/utils.py | 16 +-- bindings/python/iota_sdk/wallet/account.py | 7 +- bindings/python/iota_sdk/wallet/common.py | 43 +++---- .../iota_sdk/wallet/prepared_transaction.py | 22 +--- .../python/iota_sdk/wallet/sync_options.py | 5 + bindings/python/iota_sdk/wallet/wallet.py | 16 ++- bindings/python/tox.ini | 9 ++ 40 files changed, 441 insertions(+), 196 deletions(-) create mode 100644 bindings/python/iota_sdk/external.py diff --git a/.github/workflows/bindings-python.yml b/.github/workflows/bindings-python.yml index 370979fdcf..cf2502415d 100644 --- a/.github/workflows/bindings-python.yml +++ b/.github/workflows/bindings-python.yml @@ -112,6 +112,11 @@ jobs: sudo apt-get update sudo apt-get install libudev-dev libusb-1.0-0-dev + - name: Run linter for iota_sdk + if: ${{ startsWith(matrix.os, 'ubuntu-latest') }} + working-directory: bindings/python + run: tox -e lint-sdk + - name: Run linter for examples if: ${{ startsWith(matrix.os, 'ubuntu-latest') }} working-directory: bindings/python diff --git a/bindings/python/.pylintrc b/bindings/python/.pylintrc index b87e66105a..93a41e29e3 100644 --- a/bindings/python/.pylintrc +++ b/bindings/python/.pylintrc @@ -5,6 +5,12 @@ disable=missing-module-docstring, invalid-name, # files that starts with number duplicate-code, consider-using-with, - consider-using-f-string - + fixme, # TODOS + too-many-instance-attributes, + too-many-arguments, + too-many-public-methods, + too-few-public-methods, + too-many-locals +[TYPECHECK] +generated-members=from_dict,to_dict,to_json # Made from @json diff --git a/bindings/python/CHANGELOG.md b/bindings/python/CHANGELOG.md index 4b7c5c1881..08c4e256f1 100644 --- a/bindings/python/CHANGELOG.md +++ b/bindings/python/CHANGELOG.md @@ -26,6 +26,11 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - `Utils:transaction_id()`; - `py.typed` file to the package; +### Fixed + +- `Range` type instead of `range` method in `GenerateAddressesOptions` init; +- `Dict` type instead of `dict` method in `Irc27Metadata` init; + ## 1.1.0 - 2023-09-29 Stable release. diff --git a/bindings/python/examples/how_tos/accounts_and_addresses/consolidate_outputs.py b/bindings/python/examples/how_tos/accounts_and_addresses/consolidate_outputs.py index 674602e73a..38810b71dd 100644 --- a/bindings/python/examples/how_tos/accounts_and_addresses/consolidate_outputs.py +++ b/bindings/python/examples/how_tos/accounts_and_addresses/consolidate_outputs.py @@ -34,13 +34,9 @@ for i, output_data in enumerate(outputs): print(f'OUTPUT #{i}') - print( - '- address: {}\n- amount: {}\n- native tokens: {}'.format( - Utils.hex_to_bech32(output_data.address.pubKeyHash, 'rms'), - output_data.output.amount, - output_data.output.nativeTokens - ) - ) + print(f'- address: #{Utils.hex_to_bech32(output_data.address.pubKeyHash, "rms")}') + print(f'- amount: #{output_data.output.amount}') + print(f'- native tokens: #{output_data.output.nativeTokens}') print('Sending consolidation transaction...') @@ -66,10 +62,6 @@ print('Outputs AFTER consolidation:') for i, output_data in enumerate(outputs): print(f'OUTPUT #{i}') - print( - '- address: {}\n- amount: {}\n- native tokens: {}'.format( - Utils.hex_to_bech32(output_data.address.pubKeyHash, 'rms'), - output_data.output.amount, - output_data.output.nativeTokens - ) - ) + print(f'- address: #{Utils.hex_to_bech32(output_data.address.pubKeyHash, "rms")}') + print(f'- amount: #{output_data.output.amount}') + print(f'- native tokens: #{output_data.output.nativeTokens}') diff --git a/bindings/python/iota_sdk/__init__.py b/bindings/python/iota_sdk/__init__.py index a443d691d7..664259d9a1 100644 --- a/bindings/python/iota_sdk/__init__.py +++ b/bindings/python/iota_sdk/__init__.py @@ -1,13 +1,13 @@ # Copyright 2023 IOTA Stiftung # SPDX-License-Identifier: Apache-2.0 -from .iota_sdk import * from .client.client import Client, NodeIndexerAPI, ClientError from .client._high_level_api import GenerateAddressesOptions, GenerateAddressOptions +from .external import * from .utils import Utils from .wallet.wallet import Wallet, Account from .wallet.common import WalletError -from .wallet.sync_options import AccountSyncOptions, AliasSyncOptions, NftSyncOptions, SyncOptions +from .wallet.sync_options import AccountSyncOptions, NftSyncOptions, AliasSyncOptions, SyncOptions from .secret_manager.secret_manager import * from .prefix_hex import * from .types.address import * diff --git a/bindings/python/iota_sdk/client/_high_level_api.py b/bindings/python/iota_sdk/client/_high_level_api.py index a5d3e99289..b8129ff5da 100644 --- a/bindings/python/iota_sdk/client/_high_level_api.py +++ b/bindings/python/iota_sdk/client/_high_level_api.py @@ -1,14 +1,14 @@ # Copyright 2023 IOTA Stiftung # SPDX-License-Identifier: Apache-2.0 -from iota_sdk.secret_manager.secret_manager import LedgerNanoSecretManager, MnemonicSecretManager, StrongholdSecretManager, SeedSecretManager +from typing import List, Optional, Union +from abc import ABCMeta, abstractmethod +from dacite import from_dict from iota_sdk.types.block import Block -from iota_sdk.types.common import HexStr +from iota_sdk.types.common import CoinType, HexStr from iota_sdk.types.output import OutputWithMetadata from iota_sdk.types.output_id import OutputId -from iota_sdk.types.common import CoinType -from typing import List, Optional, Union -from dacite import from_dict +from iota_sdk.secret_manager.secret_manager import LedgerNanoSecretManager, MnemonicSecretManager, StrongholdSecretManager, SeedSecretManager class Range: @@ -50,8 +50,9 @@ class GenerateAddressesOptions(): options: An instance of `GenerateAddressOptions`. """ + # pylint: disable=redefined-builtin def __init__(self, coinType: CoinType, - range: range, + range: Range, bech32Hrp: str, accountIndex: Optional[int] = None, options: Optional[GenerateAddressOptions] = None): @@ -65,12 +66,14 @@ def __init__(self, coinType: CoinType, options: An instance of `GenerateAddressOptions`. """ self.coinType = coinType - self.range = Range(range.start, range.stop) + self.range = range self.bech32Hrp = bech32Hrp self.accountIndex = accountIndex self.options = options def as_dict(self): + """Converts this object to a dict. + """ config = {k: v for k, v in self.__dict__.items() if v is not None} config["range"] = config["range"].__dict__ @@ -79,10 +82,31 @@ def as_dict(self): return config -class HighLevelAPI(): +class HighLevelAPI(metaclass=ABCMeta): """High level API. """ + @abstractmethod + def _call_method(self, name, data=None): + """ + Sends a message to the Rust library and returns the response. + It is abstract here as its implementation is located in `client.py`, which is a composite class. + + Arguments: + + * `name`: The `name` parameter is a string that represents the name of the method to be called. + It is used to identify the specific method to be executed in the Rust library. + * `data`: The `data` parameter is an optional parameter that represents additional data to be + sent along with the method call. It is a dictionary that contains key-value pairs of data. If + the `data` parameter is provided, it will be included in the `message` dictionary as the 'data' + key. + + Returns: + + The method returns either the payload from the JSON response or the entire response if there is + no payload. + """ + def get_outputs( self, output_ids: List[OutputId]) -> List[OutputWithMetadata]: """Fetch OutputWithMetadata from provided OutputIds (requests are sent in parallel). diff --git a/bindings/python/iota_sdk/client/_node_core_api.py b/bindings/python/iota_sdk/client/_node_core_api.py index 987052e2ed..dc72f90778 100644 --- a/bindings/python/iota_sdk/client/_node_core_api.py +++ b/bindings/python/iota_sdk/client/_node_core_api.py @@ -1,6 +1,10 @@ # Copyright 2023 IOTA Stiftung # SPDX-License-Identifier: Apache-2.0 +from typing import List, Union +from abc import ABCMeta, abstractmethod +from dacite import from_dict + from iota_sdk.types.block import Block, BlockMetadata from iota_sdk.types.common import HexStr from iota_sdk.types.node_info import NodeInfo, NodeInfoWrapper @@ -8,14 +12,33 @@ from iota_sdk.types.output_id import OutputId from iota_sdk.types.payload import MilestonePayload from iota_sdk.types.utxo_changes import UtxoChanges -from typing import List, Union -from dacite import from_dict -class NodeCoreAPI(): +class NodeCoreAPI(metaclass=ABCMeta): """Node core API. """ + @abstractmethod + def _call_method(self, name, data=None): + """ + Sends a message to the Rust library and returns the response. + It is abstract here as its implementation is located in `client.py`, which is a composite class. + + Arguments: + + * `name`: The `name` parameter is a string that represents the name of the method to be called. + It is used to identify the specific method to be executed in the Rust library. + * `data`: The `data` parameter is an optional parameter that represents additional data to be + sent along with the method call. It is a dictionary that contains key-value pairs of data. If + the `data` parameter is provided, it will be included in the `message` dictionary as the 'data' + key. + + Returns: + + The method returns either the payload from the JSON response or the entire response if there is + no payload. + """ + def get_health(self, url: str): """ Get node health. diff --git a/bindings/python/iota_sdk/client/_node_indexer_api.py b/bindings/python/iota_sdk/client/_node_indexer_api.py index a65a22b194..51c4b6c381 100644 --- a/bindings/python/iota_sdk/client/_node_indexer_api.py +++ b/bindings/python/iota_sdk/client/_node_indexer_api.py @@ -1,14 +1,32 @@ # Copyright 2023 IOTA Stiftung # SPDX-License-Identifier: Apache-2.0 -from iota_sdk.types.common import HexStr -from iota_sdk.types.output_id import OutputId from dataclasses import dataclass from typing import Dict, Optional +from abc import ABCMeta, abstractmethod import humps +from iota_sdk.types.common import HexStr +from iota_sdk.types.output_id import OutputId + + +class OutputIdsResponse: + """Response type for output IDs. + + Attributes: + ledger_index: The ledger index for which the response is valid. + cursor: The cursor to the next page of results. + items: The query results. + """ + + def __init__(self, output_dict: Dict): + self.ledgerIndex = output_dict["ledgerIndex"] + self.cursor = output_dict["cursor"] + self.items = [OutputId.from_string( + output_id) for output_id in output_dict["items"]] + -class NodeIndexerAPI(): +class NodeIndexerAPI(metaclass=ABCMeta): """Node indexer API. """ @@ -23,48 +41,48 @@ class QueryParameters: Filter foundry outputs based on bech32-encoded address of the controlling alias. created_after : Returns outputs that were created after a certain Unix timestamp. - created_before : + created_before : Returns outputs that were created before a certain Unix timestamp. - cursor : + cursor : Starts the search from the cursor (confirmationMS+outputId.pageSize). - expiration_return_address : + expiration_return_address : Filters outputs based on the presence of a specific Bech32-encoded return address in the expiration unlock condition. - expires_after : + expires_after : Returns outputs that expire after a certain Unix timestamp. - expires_before : + expires_before : Returns outputs that expire before a certain Unix timestamp. - governor : + governor : Filters outputs based on bech32-encoded governor (governance controller) address. - has_expiration : + has_expiration : Filters outputs based on the presence of expiration unlock condition. - has_native_tokens : + has_native_tokens : Filters outputs based on the presence of native tokens. - has_storage_deposit_return : + has_storage_deposit_return : Filters outputs based on the presence of storage deposit return unlock condition. - has_timelock : + has_timelock : Filters outputs based on the presence of timelock unlock condition. - issuer: + issuer: Filters outputs based on bech32-encoded issuer address. - max_native_token_count : + max_native_token_count : Filters outputs that have at most a certain number of distinct native tokens. - min_native_token_count : + min_native_token_count : Filters outputs that have at least a certain number of distinct native tokens. - page_size : + page_size : The maximum amount of items returned in one call. If there are more items, a cursor to the next page is returned too. The parameter is ignored when pageSize is defined via the cursor parameter. - sender : + sender : Filters outputs based on the presence of validated Sender (bech32 encoded). - state_controller : + state_controller : Filters outputs based on bech32-encoded state controller address. - storage_deposit_return_address : + storage_deposit_return_address : Filters outputs based on the presence of a specific return address in the storage deposit return unlock condition. - tag : + tag : Filters outputs based on matching Tag Block. - timelocked_after : + timelocked_after : Returns outputs that are timelocked after a certain Unix timestamp. - timelocked_before : + timelocked_before : Returns outputs that are timelocked before a certain Unix timestamp. unlockable_by_address : Returns outputs that are unlockable by the bech32 address. @@ -95,23 +113,31 @@ class QueryParameters: unlockable_by_address: Optional[str] = None def as_dict(self): + """Converts this object to a dict. + """ return humps.camelize( [{k: v} for k, v in self.__dict__.items() if v is not None]) - class OutputIdsResponse: - """Response type for output IDs. - - Attributes: - ledger_index: The ledger index for which the response is valid. - cursor: The cursor to the next page of results. - items: The query results. + @abstractmethod + def _call_method(self, name, data=None): """ + Sends a message to the Rust library and returns the response. + It is abstract here as its implementation is located in `client.py`, which is a composite class. + + Arguments: - def __init__(self, dict: Dict): - self.ledgerIndex = dict["ledgerIndex"] - self.cursor = dict["cursor"] - self.items = [OutputId.from_string( - output_id) for output_id in dict["items"]] + * `name`: The `name` parameter is a string that represents the name of the method to be called. + It is used to identify the specific method to be executed in the Rust library. + * `data`: The `data` parameter is an optional parameter that represents additional data to be + sent along with the method call. It is a dictionary that contains key-value pairs of data. If + the `data` parameter is provided, it will be included in the `message` dictionary as the 'data' + key. + + Returns: + + The method returns either the payload from the JSON response or the entire response if there is + no payload. + """ def output_ids( self, query_parameters: QueryParameters) -> OutputIdsResponse: @@ -127,7 +153,7 @@ def output_ids( response = self._call_method('outputIds', { 'queryParameters': query_parameters_camelized, }) - return self.OutputIdsResponse(response) + return OutputIdsResponse(response) def basic_output_ids( self, query_parameters: QueryParameters) -> OutputIdsResponse: @@ -142,7 +168,7 @@ def basic_output_ids( response = self._call_method('basicOutputIds', { 'queryParameters': query_parameters_camelized, }) - return self.OutputIdsResponse(response) + return OutputIdsResponse(response) def alias_output_ids( self, query_parameters: QueryParameters) -> OutputIdsResponse: @@ -157,7 +183,7 @@ def alias_output_ids( response = self._call_method('aliasOutputIds', { 'queryParameters': query_parameters_camelized, }) - return self.OutputIdsResponse(response) + return OutputIdsResponse(response) def alias_output_id(self, alias_id: HexStr) -> OutputId: """Fetch alias output ID from the given alias ID. @@ -182,7 +208,7 @@ def nft_output_ids( response = self._call_method('nftOutputIds', { 'queryParameters': query_parameters_camelized, }) - return self.OutputIdsResponse(response) + return OutputIdsResponse(response) def nft_output_id(self, nft_id: HexStr) -> OutputId: """Fetch NFT output ID from the given NFT ID. @@ -207,7 +233,7 @@ def foundry_output_ids( response = self._call_method('foundryOutputIds', { 'queryParameters': query_parameters_camelized, }) - return self.OutputIdsResponse(response) + return OutputIdsResponse(response) def foundry_output_id(self, foundry_id: HexStr) -> OutputId: """Fetch foundry Output ID from the given foundry ID. diff --git a/bindings/python/iota_sdk/client/_utils.py b/bindings/python/iota_sdk/client/_utils.py index 5a2779c51b..37cee416dd 100644 --- a/bindings/python/iota_sdk/client/_utils.py +++ b/bindings/python/iota_sdk/client/_utils.py @@ -1,15 +1,39 @@ # Copyright 2023 IOTA Stiftung # SPDX-License-Identifier: Apache-2.0 +from typing import Optional +from abc import ABCMeta, abstractmethod + from iota_sdk.types.common import HexStr from iota_sdk.types.output import Output -from typing import Optional -class ClientUtils(): +class ClientUtils(metaclass=ABCMeta): """Client utility functions. """ + @abstractmethod + def _call_method(self, name, data=None): + """ + Sends a message to the Rust library and returns the response. + It is abstract here as its implementation is located in `client.py`, which is a composite class. + + Arguments: + + * `name`: The `name` parameter is a string that represents the name of the method to be called. + It is used to identify the specific method to be executed in the Rust library. + * `data`: The `data` parameter is an optional parameter that represents additional data to be + sent along with the method call. It is a dictionary that contains key-value pairs of data. If + the `data` parameter is provided, it will be included in the `message` dictionary as the 'data' + key. + + Returns: + + The method returns either the payload from the JSON response or the entire response if there is + no payload. + """ + + # pylint: disable=redefined-builtin def hex_to_bech32(self, hex: HexStr, bech32_hrp: str) -> str: """Transforms a hex encoded address to a bech32 encoded address. """ @@ -34,6 +58,7 @@ def nft_id_to_bech32(self, nft_id: HexStr, bech32_hrp: str) -> str: 'bech32Hrp': bech32_hrp }) + # pylint: disable=redefined-builtin def hex_public_key_to_bech32_address( self, hex: HexStr, bech32_hrp: Optional[str] = None) -> str: """Transforms a hex encoded public key to a bech32 encoded address. diff --git a/bindings/python/iota_sdk/client/client.py b/bindings/python/iota_sdk/client/client.py index 8ad954a740..22538a715a 100644 --- a/bindings/python/iota_sdk/client/client.py +++ b/bindings/python/iota_sdk/client/client.py @@ -1,8 +1,13 @@ # Copyright 2023 IOTA Stiftung # SPDX-License-Identifier: Apache-2.0 -import iota_sdk -from iota_sdk import call_client_method, listen_mqtt +from json import dumps, loads +from datetime import timedelta +from typing import Any, Dict, List, Optional, Union +import humps +from dacite import from_dict + +from iota_sdk.external import create_client, call_client_method, listen_mqtt from iota_sdk.client._node_core_api import NodeCoreAPI from iota_sdk.client._node_indexer_api import NodeIndexerAPI from iota_sdk.client._high_level_api import HighLevelAPI @@ -18,16 +23,10 @@ from iota_sdk.types.token_scheme import SimpleTokenScheme from iota_sdk.types.unlock_condition import UnlockCondition from iota_sdk.types.transaction_data import PreparedTransactionData -from json import dumps, loads -import humps -from datetime import timedelta -from typing import Any, Dict, List, Optional, Union -from dacite import from_dict class ClientError(Exception): """Represents a client error.""" - pass class Client(NodeCoreAPI, NodeIndexerAPI, HighLevelAPI, ClientUtils): @@ -37,6 +36,7 @@ class Client(NodeCoreAPI, NodeIndexerAPI, HighLevelAPI, ClientUtils): handle: The handle to the inner client object. """ + # pylint: disable=unused-argument def __init__( self, nodes: Optional[Union[str, List[str]]] = None, @@ -135,7 +135,7 @@ def get_remaining_nano_seconds(duration: timedelta): # Create the message handler if client_handle is None: - self.handle = iota_sdk.create_client(client_config_str) + self.handle = create_client(client_config_str) else: self.handle = client_handle @@ -160,8 +160,7 @@ def _call_method(self, name, data=None): if "payload" in json_response: return json_response['payload'] - else: - return response + return response def get_handle(self): """Get the client handle. @@ -358,6 +357,7 @@ def build_nft_output(self, 'immutableFeatures': immutable_features })) + # pylint: disable=unused-argument def build_and_post_block(self, secret_manager: Optional[Union[LedgerNanoSecretManager, MnemonicSecretManager, SeedSecretManager, StrongholdSecretManager]] = None, diff --git a/bindings/python/iota_sdk/external.py b/bindings/python/iota_sdk/external.py new file mode 100644 index 0000000000..2df235d0d0 --- /dev/null +++ b/bindings/python/iota_sdk/external.py @@ -0,0 +1,5 @@ +# Copyright 2023 IOTA Stiftung +# SPDX-License-Identifier: Apache-2.0 + +# pylint: disable=import-error, unused-import +from .iota_sdk import call_utils_method, call_secret_manager_method, create_secret_manager, destroy_wallet, create_client, create_wallet, listen_wallet, get_client_from_wallet, get_secret_manager_from_wallet, call_wallet_method, call_client_method, listen_mqtt diff --git a/bindings/python/iota_sdk/secret_manager/secret_manager.py b/bindings/python/iota_sdk/secret_manager/secret_manager.py index ebf56eab25..50374cff84 100644 --- a/bindings/python/iota_sdk/secret_manager/secret_manager.py +++ b/bindings/python/iota_sdk/secret_manager/secret_manager.py @@ -1,15 +1,16 @@ # Copyright 2023 IOTA Stiftung # SPDX-License-Identifier: Apache-2.0 -from iota_sdk import create_secret_manager, call_secret_manager_method +from json import dumps, loads +from typing import Optional, Union +from dacite import from_dict +import humps + +from iota_sdk.external import create_secret_manager, call_secret_manager_method from iota_sdk.types.common import HexStr from iota_sdk.types.signature import Ed25519Signature, Bip44 from iota_sdk.types.transaction_data import PreparedTransactionData from iota_sdk.types.payload import TransactionPayload -from json import dumps, loads -import humps -from typing import Optional, Union -from dacite import from_dict class LedgerNanoSecretManager(dict): @@ -71,6 +72,9 @@ def __init__(self, snapshot_path, password): snapshot_path, password)) class Inner(dict): + """Inner storage for stronghold configuration information. + """ + def __init__(self, snapshot_path, password): dict.__init__(self, password=password, snapshotPath=snapshot_path) @@ -78,10 +82,12 @@ def __init__(self, snapshot_path, password): class SecretManagerError(Exception): """Secret manager error. """ - pass class SecretManager(): + """Secret manager wrapper. + """ + def __init__(self, secret_manager: Optional[Union[LedgerNanoSecretManager, MnemonicSecretManager, SeedSecretManager, StrongholdSecretManager]] = None, secret_manager_handle=None): """Initialize a secret manager. @@ -117,9 +123,9 @@ def _call_method(self, name, data=None): if "payload" in json_response: return json_response['payload'] - else: - return response + return response + # pylint: disable=unused-argument def generate_ed25519_addresses(self, account_index: Optional[int] = None, start: Optional[int] = None, @@ -173,6 +179,7 @@ def generate_ed25519_addresses(self, 'options': options }) + # pylint: disable=unused-argument def generate_evm_addresses(self, account_index: Optional[int] = None, start: Optional[int] = None, diff --git a/bindings/python/iota_sdk/types/address.py b/bindings/python/iota_sdk/types/address.py index 3c37041f59..0cbeacd704 100644 --- a/bindings/python/iota_sdk/types/address.py +++ b/bindings/python/iota_sdk/types/address.py @@ -1,9 +1,9 @@ # Copyright 2023 IOTA Stiftung # SPDX-License-Identifier: Apache-2.0 -from iota_sdk.types.common import HexStr from dataclasses import dataclass, field from enum import IntEnum +from iota_sdk.types.common import HexStr class AddressType(IntEnum): @@ -26,6 +26,8 @@ class Address(): type: int def as_dict(self): + """Converts this object to a dict. + """ return {k: v for k, v in self.__dict__.items() if v is not None} diff --git a/bindings/python/iota_sdk/types/balance.py b/bindings/python/iota_sdk/types/balance.py index 06561fcbbd..e36337999b 100644 --- a/bindings/python/iota_sdk/types/balance.py +++ b/bindings/python/iota_sdk/types/balance.py @@ -73,7 +73,9 @@ class Balance: potentiallyLockedOutputs: dict[HexStr, bool] def as_dict(self): - config = {k: v for k, v in self.__dict__.items()} + """Converts this object to a dict. + """ + config = self.__dict__ config['baseCoin'] = config['baseCoin'].__dict__ config['requiredStorageDeposit'] = config['requiredStorageDeposit'].__dict__ diff --git a/bindings/python/iota_sdk/types/block.py b/bindings/python/iota_sdk/types/block.py index b766ce11b9..22ac15dadd 100644 --- a/bindings/python/iota_sdk/types/block.py +++ b/bindings/python/iota_sdk/types/block.py @@ -3,12 +3,12 @@ from __future__ import annotations from dataclasses import dataclass -from typing import Dict, List, Optional, Union +from typing import List, Optional, Union, Dict +from enum import Enum +from dacite import from_dict from iota_sdk.types.common import HexStr from iota_sdk.types.payload import TaggedDataPayload, TransactionPayload, MilestonePayload from iota_sdk.utils import Utils -from enum import Enum -from dacite import from_dict @dataclass @@ -30,12 +30,24 @@ class Block: @classmethod def from_dict(cls, block_dict: Dict) -> Block: + """ + Takes a dictionary that contains the data needed to + create an instance of the `Block` class. + + Returns: + + An instance of the `Block` class. + """ return from_dict(Block, block_dict) def id(self) -> HexStr: + """Returns the block ID as a hexadecimal string. + """ return Utils.block_id(self) def as_dict(self): + """Converts this object to a dict. + """ config = {k: v for k, v in self.__dict__.items() if v is not None} if 'payload' in config: @@ -76,20 +88,20 @@ class ConflictReason(Enum): invalidChainState (12): The chain state is invalid. semanticValidationFailed (255): The semantic validation failed. """ - none = 0, - inputUTXOAlreadySpent = 1, - inputUTXOAlreadySpentInThisMilestone = 2, - inputUTXONotFound = 3, - inputOutputSumMismatch = 4, - invalidSignature = 5, - invalidTimelock = 6, - invalidNativeTokens = 7, - returnAmountMismatch = 8, - invalidInputUnlock = 9, - invalidInputsCommitment = 10, - invalidSender = 11, - invalidChainState = 12, - semanticValidationFailed = 255, + none = 0 + inputUTXOAlreadySpent = 1 + inputUTXOAlreadySpentInThisMilestone = 2 + inputUTXONotFound = 3 + inputOutputSumMismatch = 4 + invalidSignature = 5 + invalidTimelock = 6 + invalidNativeTokens = 7 + returnAmountMismatch = 8 + invalidInputUnlock = 9 + invalidInputsCommitment = 10 + invalidSender = 11 + invalidChainState = 12 + semanticValidationFailed = 255 CONFLICT_REASON_STRINGS = { @@ -137,6 +149,8 @@ class BlockMetadata: @classmethod def from_dict(cls, block_metadata_dict: Dict) -> BlockMetadata: + """Converts a dict to a BlockMetadata + """ obj = cls.__new__(cls) super(BlockMetadata, obj).__init__() for k, v in block_metadata_dict.items(): diff --git a/bindings/python/iota_sdk/types/burn.py b/bindings/python/iota_sdk/types/burn.py index 01f7b66d39..35a93dda05 100644 --- a/bindings/python/iota_sdk/types/burn.py +++ b/bindings/python/iota_sdk/types/burn.py @@ -58,6 +58,8 @@ def add_native_token(self, native_token: NativeToken) -> Burn: return self def as_dict(self) -> Dict[str, Any]: + """Converts this object to a dict. + """ config = {k: v for k, v in self.__dict__.items() if v is not None} if "nativeTokens" in config: diff --git a/bindings/python/iota_sdk/types/client_options.py b/bindings/python/iota_sdk/types/client_options.py index dd2631507b..646d786bc5 100644 --- a/bindings/python/iota_sdk/types/client_options.py +++ b/bindings/python/iota_sdk/types/client_options.py @@ -38,6 +38,8 @@ class MqttBrokerOptions: maxReconnectionAttempts: Optional[int] = None def as_dict(self): + """Converts this object to a dict. + """ return {k: v for k, v in self.__dict__.items() if v is not None} @@ -108,6 +110,8 @@ class ClientOptions: maxParallelApiRequests: Optional[int] = None def as_dict(self): + """Converts this object to a dict. + """ config = {k: v for k, v in self.__dict__.items() if v is not None} if 'brokerOptions' in config: diff --git a/bindings/python/iota_sdk/types/common.py b/bindings/python/iota_sdk/types/common.py index 83c90fe1b5..492943fa9f 100644 --- a/bindings/python/iota_sdk/types/common.py +++ b/bindings/python/iota_sdk/types/common.py @@ -45,6 +45,8 @@ def __init__(self, url=None, jwt=None, username=None, self.disabled = disabled def as_dict(self): + """Converts this object to a dict. + """ config = {k: v for k, v in self.__dict__.items() if v is not None} if 'jwt' in config or 'username' in config or 'password' in config: @@ -76,6 +78,8 @@ def __init__(self, amount: int, address: str): self.address = address def as_dict(self): + """Converts this object to a dict. + """ config = {k: v for k, v in self.__dict__.items() if v is not None} if 'amount' in config: diff --git a/bindings/python/iota_sdk/types/event.py b/bindings/python/iota_sdk/types/event.py index 54c1556e6b..9e378dea09 100644 --- a/bindings/python/iota_sdk/types/event.py +++ b/bindings/python/iota_sdk/types/event.py @@ -15,9 +15,9 @@ class WalletEventType(IntEnum): TransactionInclusion (4): A transaction was included into the ledger. TransactionProgress (5): A progress update while submitting a transaction. """ - ConsolidationRequired = 0, - LedgerAddressGeneration = 1, - NewOutput = 2, - SpentOutput = 3, - TransactionInclusion = 4, - TransactionProgress = 5, + ConsolidationRequired = 0 + LedgerAddressGeneration = 1 + NewOutput = 2 + SpentOutput = 3 + TransactionInclusion = 4 + TransactionProgress = 5 diff --git a/bindings/python/iota_sdk/types/feature.py b/bindings/python/iota_sdk/types/feature.py index 3c70726e60..f15b784a2d 100644 --- a/bindings/python/iota_sdk/types/feature.py +++ b/bindings/python/iota_sdk/types/feature.py @@ -1,11 +1,11 @@ # Copyright 2023 IOTA Stiftung # SPDX-License-Identifier: Apache-2.0 -from iota_sdk.types.address import Ed25519Address, AliasAddress, NFTAddress -from iota_sdk.types.common import HexStr -from dataclasses import dataclass, field from enum import IntEnum from typing import Union +from dataclasses import dataclass, field +from iota_sdk.types.address import Ed25519Address, AliasAddress, NFTAddress +from iota_sdk.types.common import HexStr class FeatureType(IntEnum): @@ -30,6 +30,8 @@ class Feature(): type: int def as_dict(self): + """Converts this object to a dict. + """ res = {k: v for k, v in self.__dict__.items() if v is not None} if 'address' in res: res['address'] = res['address'].as_dict() diff --git a/bindings/python/iota_sdk/types/irc_27.py b/bindings/python/iota_sdk/types/irc_27.py index a589a7748a..e66de06bb1 100644 --- a/bindings/python/iota_sdk/types/irc_27.py +++ b/bindings/python/iota_sdk/types/irc_27.py @@ -2,10 +2,10 @@ # SPDX-License-Identifier: Apache-2.0 import json -from iota_sdk import utf8_to_hex, MetadataFeature -from dataclasses import dataclass, field -from typing import Optional, List, Any +from dataclasses import dataclass, field, asdict +from typing import Optional, List, Any, Dict from dacite import from_dict +from iota_sdk import utf8_to_hex, MetadataFeature @dataclass @@ -50,17 +50,24 @@ class Irc27Metadata: uri: str name: str collectionName: Optional[str] = None - royalties: dict[str, float] = field(default_factory=dict) + royalties: Dict[str, float] = field(default_factory=dict) issuerName: Optional[str] = None description: Optional[str] = None attributes: List[Attribute] = field(default_factory=list) @staticmethod def from_dict(metadata_dict: dict): + """ + Takes a dictionary as input and returns an instance of the `Irc27Metadata` class. + """ return from_dict(Irc27Metadata, metadata_dict) def as_hex(self): - utf8_to_hex(json.dumps(self.as_dict(), separators=(",", ":"))) + """Turns this schema into a hex encoded string + """ + utf8_to_hex(json.dumps(asdict(self), separators=(",", ":"))) def as_feature(self): + """Turns this schema into a MetadataFeature type + """ MetadataFeature(self.as_hex()) diff --git a/bindings/python/iota_sdk/types/irc_30.py b/bindings/python/iota_sdk/types/irc_30.py index ebb958fbdb..3c3341f435 100644 --- a/bindings/python/iota_sdk/types/irc_30.py +++ b/bindings/python/iota_sdk/types/irc_30.py @@ -2,11 +2,11 @@ # SPDX-License-Identifier: Apache-2.0 import json -from iota_sdk.types.common import HexStr -from iota_sdk import utf8_to_hex, MetadataFeature -from dataclasses import dataclass, field +from dataclasses import dataclass, field, asdict from typing import Optional from dacite import from_dict +from iota_sdk.types.common import HexStr +from iota_sdk import utf8_to_hex, MetadataFeature @dataclass @@ -34,10 +34,17 @@ class Irc30Metadata: @staticmethod def from_dict(metadata_dict: dict): + """ + Takes a dictionary as input and returns an instance of the `Irc30Metadata` class. + """ return from_dict(Irc30Metadata, metadata_dict) def as_hex(self): - utf8_to_hex(json.dumps(self.as_dict(), separators=(",", ":"))) + """Turns this schema into a hex encoded string + """ + utf8_to_hex(json.dumps(asdict(self), separators=(",", ":"))) def as_feature(self): + """Turns this schema into a MetadataFeature type + """ MetadataFeature(self.as_hex()) diff --git a/bindings/python/iota_sdk/types/native_token.py b/bindings/python/iota_sdk/types/native_token.py index 816e802e47..19828dc45b 100644 --- a/bindings/python/iota_sdk/types/native_token.py +++ b/bindings/python/iota_sdk/types/native_token.py @@ -1,8 +1,8 @@ # Copyright 2023 IOTA Stiftung # SPDX-License-Identifier: Apache-2.0 -from iota_sdk.types.common import HexStr from dataclasses import dataclass +from iota_sdk.types.common import HexStr @dataclass diff --git a/bindings/python/iota_sdk/types/output.py b/bindings/python/iota_sdk/types/output.py index cbad3509b0..a151466366 100644 --- a/bindings/python/iota_sdk/types/output.py +++ b/bindings/python/iota_sdk/types/output.py @@ -37,6 +37,8 @@ class Output(): type: int def as_dict(self): + """Converts this object to a dict. + """ config = {k: v for k, v in self.__dict__.items() if v is not None} if 'unlockConditions' in config: @@ -235,8 +237,11 @@ class OutputMetadata: milestoneTimestampSpent: Optional[int] = None transactionIdSpent: Optional[HexStr] = None + # pylint: disable=redefined-builtin @classmethod def from_dict(cls, dict: Dict) -> OutputMetadata: + """Converts a dict to a OutputMetadata + """ obj = cls.__new__(cls) super(OutputMetadata, obj).__init__() for k, v in dict.items(): @@ -244,6 +249,8 @@ def from_dict(cls, dict: Dict) -> OutputMetadata: return obj def as_dict(self): + """Converts this object to a dict. + """ return {k: v for k, v in self.__dict__.items() if v is not None} @@ -259,8 +266,11 @@ class OutputWithMetadata: metadata: OutputMetadata output: Union[AliasOutput, FoundryOutput, NftOutput, BasicOutput] + # pylint: disable=redefined-builtin @classmethod def from_dict(cls, dict: Dict) -> OutputWithMetadata: + """Creates an output with metadata instance from the dict object. + """ obj = cls.__new__(cls) super(OutputWithMetadata, obj).__init__() for k, v in dict.items(): @@ -268,7 +278,9 @@ def from_dict(cls, dict: Dict) -> OutputWithMetadata: return obj def as_dict(self): - config = dict() + """Converts this object to a dict. + """ + config = {} config['metadata'] = self.metadata.__dict__ config['output'] = self.output.as_dict() @@ -278,6 +290,16 @@ def as_dict(self): def output_from_dict( output: Dict[str, any]) -> Union[TreasuryOutput, BasicOutput, AliasOutput, FoundryOutput, NftOutput, Output]: + """ + Takes a dictionary as input and returns an instance of a specific + output class based on the value of the 'type' key in the dictionary. + + Arguments: + + * `output`: The `output` parameter is a dictionary that contains information about the output. It is + expected to have a key called 'type' which specifies the type of the output. The value of 'type' + should be one of the values defined in the `OutputType` enum. + """ output_type = OutputType(output['type']) if output_type == OutputType.Treasury: diff --git a/bindings/python/iota_sdk/types/payload.py b/bindings/python/iota_sdk/types/payload.py index b314bf6d26..c479bf1844 100644 --- a/bindings/python/iota_sdk/types/payload.py +++ b/bindings/python/iota_sdk/types/payload.py @@ -2,15 +2,15 @@ # SPDX-License-Identifier: Apache-2.0 from __future__ import annotations +from dataclasses import dataclass, field +from enum import IntEnum +from typing import Any, Optional, List, Union +from dacite import from_dict from iota_sdk.types.common import HexStr from iota_sdk.types.output import BasicOutput, AliasOutput, FoundryOutput, NftOutput from iota_sdk.types.input import UtxoInput from iota_sdk.types.signature import Ed25519Signature from iota_sdk.types.unlock import SignatureUnlock, ReferenceUnlock -from dacite import from_dict -from dataclasses import dataclass, field -from enum import IntEnum -from typing import Any, Optional, List, Union class PayloadType(IntEnum): @@ -30,11 +30,22 @@ class PayloadType(IntEnum): @dataclass class TransactionEssence: + """ Base essence class + """ type: int @dataclass class RegularTransactionEssence(TransactionEssence): + """Describes the essence data making up a transaction by defining its inputs, outputs, and an optional payload. + + Attributes: + networkId: The unique value denoting whether the block was meant for mainnet, shimmer, testnet, or a private network. + inputsCommitment: BLAKE2b-256 hash serving as a commitment to the serialized outputs referenced by Inputs. + inputs: The inputs to consume in order to fund the outputs of the Transaction Payload. + outputs: The outputs that are created by the Transaction Payload + payload: An optional tagged data payload + """ networkId: str inputsCommitment: HexStr inputs: List[UtxoInput] @@ -43,6 +54,8 @@ class RegularTransactionEssence(TransactionEssence): type: int = field(default_factory=lambda: 1, init=False) def as_dict(self): + """Converts this object to a dict. + """ config = {k: v for k, v in self.__dict__.items() if v is not None} if 'payload' in config: @@ -64,6 +77,8 @@ class Payload(): type: int def as_dict(self): + """Converts this object to a dict. + """ config = {k: v for k, v in self.__dict__.items() if v is not None} if 'essence' in config: @@ -115,6 +130,8 @@ class MilestonePayload(Payload): @classmethod def from_dict(cls, milestone_dict) -> MilestonePayload: + """Converts a dict to a MilestonePayload + """ return from_dict(MilestonePayload, milestone_dict) diff --git a/bindings/python/iota_sdk/types/send_params.py b/bindings/python/iota_sdk/types/send_params.py index d2af0f603e..442eb460e7 100644 --- a/bindings/python/iota_sdk/types/send_params.py +++ b/bindings/python/iota_sdk/types/send_params.py @@ -26,6 +26,8 @@ class SendParams(): expiration: Optional[int] = None def as_dict(self): + """Converts this object to a dict. + """ config = {k: v for k, v in self.__dict__.items() if v is not None} config['amount'] = str(config['amount']) @@ -49,6 +51,8 @@ class SendNativeTokensParams(): expiration: Optional[int] = None def as_dict(self): + """Converts this object to a dict. + """ return {k: v for k, v in self.__dict__.items() if v is not None} @@ -80,6 +84,8 @@ class CreateNativeTokenParams(): aliasId: Optional[str] = None def as_dict(self): + """Converts this object to a dict. + """ config = {k: v for k, v in self.__dict__.items() if v is not None} config['circulatingSupply'] = hex(config['circulatingSupply']) diff --git a/bindings/python/iota_sdk/types/token_scheme.py b/bindings/python/iota_sdk/types/token_scheme.py index 78aca01a07..ed7914fa44 100644 --- a/bindings/python/iota_sdk/types/token_scheme.py +++ b/bindings/python/iota_sdk/types/token_scheme.py @@ -28,6 +28,8 @@ class SimpleTokenScheme(TokenScheme): type: int = field(default_factory=lambda: 0, init=False) def as_dict(self): + """Converts this object to a dict. + """ config = dict(self.__dict__) if isinstance(config['mintedTokens'], int): diff --git a/bindings/python/iota_sdk/types/transaction.py b/bindings/python/iota_sdk/types/transaction.py index 6ae0f08565..bcfcbd2985 100644 --- a/bindings/python/iota_sdk/types/transaction.py +++ b/bindings/python/iota_sdk/types/transaction.py @@ -4,10 +4,10 @@ from __future__ import annotations from dataclasses import dataclass from typing import Dict, List, Optional +from enum import Enum from iota_sdk.types.common import HexStr from iota_sdk.types.output import OutputWithMetadata from iota_sdk.types.payload import TransactionPayload -from enum import Enum class InclusionState(str, Enum): @@ -50,8 +50,11 @@ class Transaction: note: Optional[str] = None blockId: Optional[HexStr] = None + # pylint: disable=redefined-builtin @classmethod def from_dict(cls, dict: Dict) -> Transaction: + """Converts a dict to a Transaction + """ obj = cls.__new__(cls) super(Transaction, obj).__init__() for k, v in dict.items(): diff --git a/bindings/python/iota_sdk/types/transaction_data.py b/bindings/python/iota_sdk/types/transaction_data.py index 33ca98d4e4..823a2d084e 100644 --- a/bindings/python/iota_sdk/types/transaction_data.py +++ b/bindings/python/iota_sdk/types/transaction_data.py @@ -24,6 +24,8 @@ class InputSigningData: chain: Optional[Bip44] = None def as_dict(self): + """Converts this object to a dict. + """ config = {k: v for k, v in self.__dict__.items() if v is not None} config['output'] = config['output'].as_dict() @@ -48,6 +50,8 @@ class RemainderData: chain: Optional[Bip44] = None def as_dict(self): + """Converts this object to a dict. + """ config = {k: v for k, v in self.__dict__.items() if v is not None} config['output'] = config['output'].as_dict() @@ -72,6 +76,8 @@ class PreparedTransactionData: remainder: Optional[RemainderData] = None def as_dict(self): + """Converts this object to a dict. + """ config = {k: v for k, v in self.__dict__.items() if v is not None} config['essence'] = config['essence'].as_dict() @@ -97,6 +103,8 @@ class SignedTransactionData: inputsData: List[InputSigningData] def as_dict(self): + """Converts this object to a dict. + """ config = {k: v for k, v in self.__dict__.items() if v is not None} config['transactionPayload'] = config['transactionPayload'].as_dict() diff --git a/bindings/python/iota_sdk/types/transaction_options.py b/bindings/python/iota_sdk/types/transaction_options.py index b44cc3ade5..2c38cf33dc 100644 --- a/bindings/python/iota_sdk/types/transaction_options.py +++ b/bindings/python/iota_sdk/types/transaction_options.py @@ -1,11 +1,11 @@ # Copyright 2023 IOTA Stiftung # SPDX-License-Identifier: Apache-2.0 +from enum import Enum +from typing import Optional, List, Union from iota_sdk.types.burn import Burn from iota_sdk.types.output_id import OutputId from iota_sdk.types.payload import TaggedDataPayload -from enum import Enum -from typing import Optional, List, Union class RemainderValueStrategyCustomAddress: @@ -29,6 +29,8 @@ def __init__(self, self.used = used def as_dict(self): + """Converts this object to a dict. + """ return dict({"strategy": "CustomAddress", "value": self.__dict__}) @@ -39,10 +41,12 @@ class RemainderValueStrategy(Enum): ChangeAddress: Allows to move the remainder value to a change address. ReuseAddress: Allows to keep the remainder value on the source address. """ - ChangeAddress = None, - ReuseAddress = None, + ChangeAddress = None + ReuseAddress = None def as_dict(self): + """Converts this object to a dict. + """ return dict({"strategy": self.name, "value": self.value[0]}) @@ -77,4 +81,6 @@ def __init__(self, remainder_value_strategy: Optional[Union[RemainderValueStrate self.allow_micro_amount = allow_micro_amount def as_dict(self): + """Converts this object to a dict. + """ return dict(self.__dict__) diff --git a/bindings/python/iota_sdk/types/unlock.py b/bindings/python/iota_sdk/types/unlock.py index 0ed69ad0b0..8cc072b705 100644 --- a/bindings/python/iota_sdk/types/unlock.py +++ b/bindings/python/iota_sdk/types/unlock.py @@ -4,11 +4,18 @@ from __future__ import annotations from dataclasses import dataclass, field from enum import IntEnum -from typing import Optional from iota_sdk.types.signature import Ed25519Signature class UnlockType(IntEnum): + """Unlock variants. + + Attributes: + Signature (0): An unlock holding a signature unlocking one or more inputs. + Reference (1): An unlock which must reference a previous unlock which unlocks also the input at the same index as this Reference Unlock. + Alias (2): An unlock which must reference a previous unlock which unlocks the alias that the input is locked to. + Nft (3): An unlock which must reference a previous unlock which unlocks the NFT that the input is locked to. + """ Signature = 0 Reference = 1 Alias = 2 @@ -22,6 +29,8 @@ class Unlock: type: int def as_dict(self): + """Converts this object to a dict. + """ config = {k: v for k, v in self.__dict__.items() if v is not None} if 'signature' in config: diff --git a/bindings/python/iota_sdk/types/unlock_condition.py b/bindings/python/iota_sdk/types/unlock_condition.py index 8c237f7844..ea2ca2164b 100644 --- a/bindings/python/iota_sdk/types/unlock_condition.py +++ b/bindings/python/iota_sdk/types/unlock_condition.py @@ -1,10 +1,10 @@ # Copyright 2023 IOTA Stiftung # SPDX-License-Identifier: Apache-2.0 -from iota_sdk.types.address import Ed25519Address, AliasAddress, NFTAddress from enum import IntEnum from dataclasses import dataclass, field from typing import Union +from iota_sdk.types.address import Ed25519Address, AliasAddress, NFTAddress class UnlockConditionType(IntEnum): @@ -35,6 +35,8 @@ class UnlockCondition(): type: int def as_dict(self): + """Converts this object to a dict. + """ config = {k: v for k, v in self.__dict__.items() if v is not None} if 'amount' in config: diff --git a/bindings/python/iota_sdk/types/utxo_changes.py b/bindings/python/iota_sdk/types/utxo_changes.py index 342e36f7ae..90668cab4d 100644 --- a/bindings/python/iota_sdk/types/utxo_changes.py +++ b/bindings/python/iota_sdk/types/utxo_changes.py @@ -1,9 +1,9 @@ # Copyright 2023 IOTA Stiftung # SPDX-License-Identifier: Apache-2.0 -from iota_sdk.types.common import HexStr from typing import List from dataclasses import dataclass +from iota_sdk.types.common import HexStr @dataclass diff --git a/bindings/python/iota_sdk/utils.py b/bindings/python/iota_sdk/utils.py index ee0a1f40e9..8c18f3e7e4 100644 --- a/bindings/python/iota_sdk/utils.py +++ b/bindings/python/iota_sdk/utils.py @@ -2,16 +2,17 @@ # SPDX-License-Identifier: Apache-2.0 from __future__ import annotations -from iota_sdk import call_utils_method +from json import dumps, loads +from typing import TYPE_CHECKING, List +from dacite import from_dict + from iota_sdk.types.signature import Ed25519Signature from iota_sdk.types.address import Address, AddressType, Ed25519Address, AliasAddress, NFTAddress from iota_sdk.types.common import HexStr from iota_sdk.types.output_id import OutputId from iota_sdk.types.output import Output +from iota_sdk.external import call_utils_method from iota_sdk.types.payload import TransactionPayload -from json import dumps, loads -from typing import TYPE_CHECKING, List -from dacite import from_dict # Required to prevent circular import if TYPE_CHECKING: @@ -30,6 +31,7 @@ def bech32_to_hex(bech32: str) -> HexStr: 'bech32': bech32 }) + # pylint: disable=redefined-builtin @staticmethod def hex_to_bech32(hex: HexStr, bech32_hrp: str) -> str: """Convert a hex encoded address to a Bech32 encoded address. @@ -57,6 +59,7 @@ def nft_id_to_bech32(nft_id: HexStr, bech32_hrp: str) -> str: 'bech32Hrp': bech32_hrp }) + # pylint: disable=redefined-builtin @staticmethod def hex_public_key_to_bech32_address(hex: HexStr, bech32_hrp: str) -> str: """Convert a hex encoded public key to a Bech32 encoded address. @@ -82,6 +85,7 @@ def parse_bech32_address(address: str) -> Address: return from_dict(AliasAddress, response) if address_type == AddressType.NFT: return from_dict(NFTAddress, response) + return from_dict(Address, response) @staticmethod def is_address_valid(address: str) -> bool: @@ -217,7 +221,6 @@ def verify_secp256k1_ecdsa_signature( class UtilsError(Exception): """A utils error.""" - pass def _call_method(name: str, data=None): @@ -241,5 +244,4 @@ def _call_method(name: str, data=None): if "payload" in json_response: return json_response['payload'] - else: - return response + return response diff --git a/bindings/python/iota_sdk/wallet/account.py b/bindings/python/iota_sdk/wallet/account.py index 8ae298cd83..61acf7fa70 100644 --- a/bindings/python/iota_sdk/wallet/account.py +++ b/bindings/python/iota_sdk/wallet/account.py @@ -1,6 +1,9 @@ # Copyright 2023 IOTA Stiftung # SPDX-License-Identifier: Apache-2.0 +from typing import List, Optional, Union +from dataclasses import dataclass +from dacite import from_dict from iota_sdk.wallet.common import _call_method_routine from iota_sdk.wallet.prepared_transaction import PreparedTransaction, PreparedCreateTokenTransaction from iota_sdk.wallet.sync_options import SyncOptions @@ -19,9 +22,6 @@ from iota_sdk.types.transaction import Transaction from iota_sdk.types.transaction_options import TransactionOptions from iota_sdk.types.consolidation_params import ConsolidationParams -from typing import List, Optional, Union -from dacite import from_dict -from dataclasses import dataclass @dataclass @@ -38,6 +38,7 @@ class AccountMetadata: index: int +# pylint: disable=too-many-public-methods class Account: """A wallet account. diff --git a/bindings/python/iota_sdk/wallet/common.py b/bindings/python/iota_sdk/wallet/common.py index a3a7d3f34d..0187874425 100644 --- a/bindings/python/iota_sdk/wallet/common.py +++ b/bindings/python/iota_sdk/wallet/common.py @@ -1,11 +1,11 @@ # Copyright 2023 IOTA Stiftung # SPDX-License-Identifier: Apache-2.0 -from iota_sdk import call_wallet_method -import humps import json from json import dumps, JSONEncoder from enum import Enum +import humps +from iota_sdk import call_wallet_method def _call_method_routine(func): @@ -13,18 +13,22 @@ def _call_method_routine(func): """ def wrapper(*args, **kwargs): class MyEncoder(JSONEncoder): - def default(self, obj): - as_dict_method = getattr(obj, "as_dict", None) - if callable(as_dict_method): - return obj.as_dict() - if isinstance(obj, str): - return obj - if isinstance(obj, Enum): - return obj.__dict__ - if isinstance(obj, dict): - return obj - if hasattr(obj, "__dict__"): - obj_dict = obj.__dict__ + """Custom encoder + """ + + # pylint: disable=too-many-return-statements + def default(self, o): + to_dict_method = getattr(o, "to_dict", None) + if callable(to_dict_method): + return o.to_dict() + if isinstance(o, str): + return o + if isinstance(o, Enum): + return o.__dict__ + if isinstance(o, dict): + return o + if hasattr(o, "__dict__"): + obj_dict = o.__dict__ items_method = getattr(self, "items", None) if callable(items_method): @@ -32,7 +36,7 @@ def default(self, obj): obj_dict[k] = dumps(v, cls=MyEncoder) return obj_dict return obj_dict - return obj + return o message = func(*args, **kwargs) for k, v in message.items(): @@ -42,11 +46,10 @@ def default(self, obj): def remove_none(obj): if isinstance(obj, (list, tuple, set)): return type(obj)(remove_none(x) for x in obj if x is not None) - elif isinstance(obj, dict): + if isinstance(obj, dict): return type(obj)((remove_none(k), remove_none(v)) for k, v in obj.items() if k is not None and v is not None) - else: - return obj + return obj message_null_filtered = remove_none(message) message = dumps(humps.camelize(message_null_filtered)) # Send message to the Rust library @@ -60,11 +63,9 @@ def remove_none(obj): if "payload" in json_response: return json_response['payload'] - else: - return response + return response return wrapper class WalletError(Exception): """A wallet error.""" - pass diff --git a/bindings/python/iota_sdk/wallet/prepared_transaction.py b/bindings/python/iota_sdk/wallet/prepared_transaction.py index 5f163a5a90..9231683c22 100644 --- a/bindings/python/iota_sdk/wallet/prepared_transaction.py +++ b/bindings/python/iota_sdk/wallet/prepared_transaction.py @@ -2,10 +2,10 @@ # SPDX-License-Identifier: Apache-2.0 from __future__ import annotations +from typing import TYPE_CHECKING, Dict, Union +from dacite import from_dict from iota_sdk.types.transaction import Transaction from iota_sdk.types.transaction_data import PreparedTransactionData -from dacite import from_dict -from typing import TYPE_CHECKING, Dict, Union # Required to prevent circular import if TYPE_CHECKING: from iota_sdk.wallet.wallet import Account @@ -29,25 +29,12 @@ def __init__( self.account = account self.prepared_transaction_data_dto = prepared_transaction_data - """ - The function returns the prepared transaction data. - - :returns: The method prepared_transaction_data() is returning an object of type PreparedTransaction - """ - def prepared_transaction_data(self) -> PreparedTransactionData: - """Get the prepared transaction data. + """Returns the prepared transaction data. """ return self.prepared_transaction_data_dto if isinstance( self.prepared_transaction_data_dto, PreparedTransactionData) else from_dict(PreparedTransactionData, self.prepared_transaction_data_dto) - """ - The send function returns a promise that resolves to a Transaction object after signing - and submitting the transaction. Internally just calls sign_and_submit_transaction. - - :returns: The send() method is returning a Transaction object after it has been signed and submitted. - """ - def send(self) -> Transaction: """Send a transaction. Internally just calls `sign_and_submit_transaction`. @@ -76,7 +63,6 @@ def sign_and_submit_transaction(self) -> Transaction: class PreparedCreateTokenTransaction(PreparedTransaction): """A prepared transaction for creating a native token. - The function returns the token_id as a string. Returns: The token id of the PreparedCreateTokenTransaction. """ @@ -87,7 +73,7 @@ def token_id(self): return self.prepared_transaction_data_dto["tokenId"] def prepared_transaction_data(self): - """The function returns the prepared transaction data. + """Returns the prepared transaction data. """ return from_dict(PreparedTransactionData, self.prepared_transaction_data_dto["transaction"]) diff --git a/bindings/python/iota_sdk/wallet/sync_options.py b/bindings/python/iota_sdk/wallet/sync_options.py index 6671048f70..8d75073f0d 100644 --- a/bindings/python/iota_sdk/wallet/sync_options.py +++ b/bindings/python/iota_sdk/wallet/sync_options.py @@ -1,3 +1,6 @@ +# Copyright 2023 IOTA Stiftung +# SPDX-License-Identifier: Apache-2.0 + from typing import List, Optional @@ -129,4 +132,6 @@ def __init__(self, self.syncNativeTokenFoundries = sync_native_token_foundries def as_dict(self): + """Converts this object to a dict. + """ return dict(self.__dict__) diff --git a/bindings/python/iota_sdk/wallet/wallet.py b/bindings/python/iota_sdk/wallet/wallet.py index 1b2a0d458c..dd44f4c71f 100644 --- a/bindings/python/iota_sdk/wallet/wallet.py +++ b/bindings/python/iota_sdk/wallet/wallet.py @@ -1,14 +1,15 @@ # Copyright 2023 IOTA Stiftung # SPDX-License-Identifier: Apache-2.0 +from json import dumps +from typing import Any, Dict, List, Optional, Union from iota_sdk import destroy_wallet, create_wallet, listen_wallet, get_client_from_wallet, get_secret_manager_from_wallet, Client from iota_sdk.secret_manager.secret_manager import LedgerNanoSecretManager, MnemonicSecretManager, StrongholdSecretManager, SeedSecretManager, SecretManager -from iota_sdk.types.client_options import ClientOptions from iota_sdk.types.address import AccountAddress from iota_sdk.wallet.account import Account, _call_method_routine from iota_sdk.wallet.sync_options import SyncOptions -from json import dumps -from typing import Any, Dict, List, Optional, Union + +# pylint: disable=too-many-public-methods class Wallet(): @@ -18,7 +19,10 @@ class Wallet(): handle: The wallet handle. """ - def __init__(self, storage_path: Optional[str] = None, client_options: Optional[Dict[str, Any]] = None, coin_type: Optional[int] = None, + def __init__(self, + storage_path: Optional[str] = None, + client_options: Optional[Dict[str, Any]] = None, + coin_type: Optional[int] = None, secret_manager: Optional[Union[LedgerNanoSecretManager, MnemonicSecretManager, SeedSecretManager, StrongholdSecretManager]] = None): """Initialize `self`. """ @@ -273,9 +277,9 @@ def destroy(self): """ return destroy_wallet(self.handle) + # pylint: disable=redefined-builtin @staticmethod def __return_str_or_none(str): if str: return str - else: - return None + return None diff --git a/bindings/python/tox.ini b/bindings/python/tox.ini index d436391bfe..6bde2729d1 100644 --- a/bindings/python/tox.ini +++ b/bindings/python/tox.ini @@ -23,6 +23,15 @@ deps = autopep8 commands = autopep8 --exclude .venv --diff --recursive --aggressive --max-line-length 120 --exit-code . +[testenv:lint-sdk] +description = Run pylint {basepython} on iota_sdk +deps = + -r requirements-dev.txt + pylint +commands = + pip install . + pylint --rcfile=.pylintrc iota_sdk/**/*.py + [testenv:lint-examples] description = Run pylint {basepython} on examples deps = From 5ac5153c06ed1b5c15d1f65cd8e00f317b26af13 Mon Sep 17 00:00:00 2001 From: /alex/ Date: Thu, 26 Oct 2023 16:31:14 +0200 Subject: [PATCH 13/91] CLI print NFT and Alias addresses (#1426) * add addresses as bech32 * Some changes * Display derive_more * print address overhaul * remove foundry print * address selector, generalize print address * formatting details * conditional print * cleanup 'request_outputs_recursively' fn * drain * print addresses sorted * PR suggestions * remove breaking change * remove todo * cli changelog * change filter unspent outputs * use writeln macro * clippy * import Write * print * Changelog * Chain account addresses NFt/Alias addresses * More efficient filtering * Clippy * Some format change * Remove TODO * Remove unspent_outputs filter * Fix * Nits * Bring back push_str * Update changelog date --------- Co-authored-by: Thibault Martinez Co-authored-by: Alex Coats --- cli/CHANGELOG.md | 5 +- cli/src/account.rs | 18 +- cli/src/command/account.rs | 245 ++++++++++++------ cli/src/command/account_completion.rs | 1 + sdk/CHANGELOG.md | 2 + sdk/Cargo.toml | 1 + sdk/src/types/block/address/mod.rs | 13 +- .../wallet/account/operations/syncing/mod.rs | 89 +++---- 8 files changed, 237 insertions(+), 137 deletions(-) diff --git a/cli/CHANGELOG.md b/cli/CHANGELOG.md index e1011e2107..cbfff54e27 100644 --- a/cli/CHANGELOG.md +++ b/cli/CHANGELOG.md @@ -19,17 +19,20 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Security --> -## 1.2.0 - 2023-xx-xx +## 1.2.0 - 2023-10-26 ### Added - `outputs` and `unspent_outputs` print the booked milestone timestamps and sort by them; - `outputs` and `unspent_outputs` include spent/unspent information; - `UTC` suffix to the formatted date of `transactions`; +- `addresses` handles NFT and Alias addresses; +- `AccountCommand::Address` command that accepts either a list index or a `Bech32Address`; ### Changed - `AccountCommand::Output` accepts either a list index or an `OutputId`; +- `addresses` prints an indexed list of addresses and their type instead of address details; ### Fixed diff --git a/cli/src/account.rs b/cli/src/account.rs index 84c13ad870..474774fa2a 100644 --- a/cli/src/account.rs +++ b/cli/src/account.rs @@ -9,14 +9,15 @@ use rustyline::{error::ReadlineError, history::MemHistory, Config, Editor}; use crate::{ command::{ account::{ - addresses_command, balance_command, burn_native_token_command, burn_nft_command, claim_command, - claimable_outputs_command, consolidate_command, create_alias_outputs_command, create_native_token_command, - decrease_voting_power_command, destroy_alias_command, destroy_foundry_command, faucet_command, - increase_voting_power_command, melt_native_token_command, mint_native_token, mint_nft_command, - new_address_command, node_info_command, output_command, outputs_command, participation_overview_command, - send_command, send_native_token_command, send_nft_command, stop_participating_command, sync_command, - transaction_command, transactions_command, unspent_outputs_command, vote_command, voting_output_command, - voting_power_command, AccountCli, AccountCommand, + address_command, addresses_command, balance_command, burn_native_token_command, burn_nft_command, + claim_command, claimable_outputs_command, consolidate_command, create_alias_outputs_command, + create_native_token_command, decrease_voting_power_command, destroy_alias_command, destroy_foundry_command, + faucet_command, increase_voting_power_command, melt_native_token_command, mint_native_token, + mint_nft_command, new_address_command, node_info_command, output_command, outputs_command, + participation_overview_command, send_command, send_native_token_command, send_nft_command, + stop_participating_command, sync_command, transaction_command, transactions_command, + unspent_outputs_command, vote_command, voting_output_command, voting_power_command, AccountCli, + AccountCommand, }, account_completion::AccountPromptHelper, }, @@ -105,6 +106,7 @@ pub async fn account_prompt_internal( } }; match account_cli.command { + AccountCommand::Address { selector } => address_command(account, selector).await, AccountCommand::Addresses => addresses_command(account).await, AccountCommand::Balance { addresses } => balance_command(account, addresses).await, AccountCommand::BurnNativeToken { token_id, amount } => { diff --git a/cli/src/command/account.rs b/cli/src/command/account.rs index 337a660537..cadf96aba0 100644 --- a/cli/src/command/account.rs +++ b/cli/src/command/account.rs @@ -1,4 +1,4 @@ -// Copyright 2020-2022 IOTA Stiftung +// Copyright 2023 IOTA Stiftung // SPDX-License-Identifier: Apache-2.0 use std::str::FromStr; @@ -9,10 +9,10 @@ use iota_sdk::{ types::{ api::plugins::participation::types::ParticipationEventId, block::{ - address::Bech32Address, + address::{Address, Bech32Address, ToBech32Ext}, output::{ - unlock_condition::AddressUnlockCondition, AliasId, BasicOutputBuilder, FoundryId, NativeToken, - NativeTokensBuilder, NftId, Output, OutputId, TokenId, + unlock_condition::AddressUnlockCondition, AliasId, AliasOutput, BasicOutputBuilder, FoundryId, + NativeToken, NativeTokensBuilder, NftId, NftOutput, Output, OutputId, TokenId, }, payload::transaction::TransactionId, ConvertTo, @@ -20,8 +20,8 @@ use iota_sdk::{ }, wallet::{ account::{ - types::{AccountAddress, AccountIdentifier, OutputData, Transaction}, - Account, ConsolidationParams, OutputsToClaim, SyncOptions, TransactionOptions, + types::{AccountIdentifier, OutputData, Transaction}, + Account, ConsolidationParams, FilterOptions, OutputsToClaim, SyncOptions, TransactionOptions, }, CreateNativeTokenParams, MintNftParams, SendNativeTokensParams, SendNftParams, SendParams, }, @@ -47,6 +47,12 @@ impl AccountCli { #[derive(Debug, Subcommand)] #[allow(clippy::large_enum_variant)] pub enum AccountCommand { + /// Show the details of an address. + Address { + /// Selector for address. + /// Either by address (e.g. rms1qqtj7pvnl3lj9n9n6e9lc47mfutjfhjyprmprxtzz2g0uck8tr3gurtp7tq) or index. + selector: AddressSelector, + }, /// List the account addresses. Addresses, /// Print the account balance. @@ -301,17 +307,47 @@ impl FromStr for OutputSelector { } } -/// `addresses` command -pub async fn addresses_command(account: &Account) -> Result<(), Error> { - let addresses = account.addresses().await?; +/// Select by Bech32 address or list index +#[derive(Debug, Copy, Clone)] +pub enum AddressSelector { + Address(Bech32Address), + Index(usize), +} - if addresses.is_empty() { - println_log_info!("No addresses found"); - } else { - for address in addresses { +impl FromStr for AddressSelector { + type Err = Error; + + fn from_str(s: &str) -> Result { + Ok(if let Ok(index) = s.parse() { + Self::Index(index) + } else { + Self::Address(s.parse()?) + }) + } +} + +/// `address` command +pub async fn address_command(account: &Account, selector: AddressSelector) -> Result<(), Error> { + match selector { + AddressSelector::Address(address) => { print_address(account, &address).await?; } - } + AddressSelector::Index(index) => { + let addresses = get_addresses_sorted(account).await?; + if let Some(address) = addresses.get(index) { + print_address(account, address).await?; + } else { + println_log_info!("No address found at index {index}"); + } + } + }; + + Ok(()) +} + +/// `addresses` command +pub async fn addresses_command(account: &Account) -> Result<(), Error> { + print_addresses(get_addresses_sorted(account).await?)?; Ok(()) } @@ -649,7 +685,7 @@ pub async fn mint_nft_command( pub async fn new_address_command(account: &Account) -> Result<(), Error> { let address = account.generate_ed25519_addresses(1, None).await?; - print_address(account, &address[0]).await?; + print_address(account, address[0].address()).await?; Ok(()) } @@ -920,81 +956,109 @@ pub async fn voting_output_command(account: &Account) -> Result<(), Error> { Ok(()) } -async fn print_address(account: &Account, address: &AccountAddress) -> Result<(), Error> { - let mut log = format!( - "Address: {}\n{:<9}{}\n{:<9}{:?}", - address.key_index(), - "Bech32:", - address.address(), - "Hex:", - address.address().inner() - ); +async fn print_address(account: &Account, address: &Bech32Address) -> Result<(), Error> { + let mut formatted_string = String::new(); - if *address.internal() { - log = format!("{log}\nChange address"); - } + formatted_string.push_str(&format!("{:<11}{}\n", "Bech32:", address)); + formatted_string.push_str(&format!("{:<11}{}\n", "Hex:", address.inner())); + formatted_string.push_str(&format!("{:<11}{}\n", "Type:", address.inner().kind_str())); - let addresses = account.addresses_with_unspent_outputs().await?; + let unspent_outputs = account.unspent_outputs(None).await?; let current_time = iota_sdk::utils::unix_timestamp_now().as_secs() as u32; - let mut output_ids: &[OutputId] = &[]; + let mut outputs = Vec::new(); let mut amount = 0; let mut native_tokens = NativeTokensBuilder::new(); let mut nfts = Vec::new(); let mut aliases = Vec::new(); - let mut foundries = Vec::new(); - if let Some(address) = addresses - .iter() - .find(|a| a.key_index() == address.key_index() && a.internal() == address.internal()) - { - output_ids = address.output_ids().as_slice(); - - for output_id in output_ids { - if let Some(output_data) = account.get_output(output_id).await { - // Output might be associated with the address, but can't be unlocked by it, so we check that here. - // Panic: cannot fail for outputs belonging to an account. - let (required_address, _) = output_data - .output - .required_and_unlocked_address(current_time, output_id, None) - .unwrap(); - - if address.address().as_ref() == &required_address { - if let Some(nts) = output_data.output.native_tokens() { - native_tokens.add_native_tokens(nts.clone())?; - } - match &output_data.output { - Output::Nft(nft) => nfts.push(nft.nft_id_non_null(output_id)), - Output::Alias(alias) => aliases.push(alias.alias_id_non_null(output_id)), - Output::Foundry(foundry) => foundries.push(foundry.id()), - Output::Basic(_) | Output::Treasury(_) => {} - } - let unlock_conditions = output_data - .output - .unlock_conditions() - .expect("output must have unlock conditions"); - let sdr_amount = unlock_conditions - .storage_deposit_return() - .map(|sdr| sdr.amount()) - .unwrap_or(0); - - amount += output_data.output.amount() - sdr_amount; - } + for output_data in unspent_outputs.into_iter() { + // Panic: cannot fail for outputs belonging to an account. + let required_address = output_data + .output + .required_and_unlocked_address(current_time, &output_data.output_id, None) + .unwrap() + .0; + + if address.inner() == &required_address { + outputs.push((output_data.output_id, output_data.output.kind_str().to_string())); + + if let Some(nts) = output_data.output.native_tokens() { + native_tokens.add_native_tokens(nts.clone())?; + } + + match &output_data.output { + Output::Alias(alias) => aliases.push(alias.alias_id_non_null(&output_data.output_id)), + Output::Nft(nft) => nfts.push(nft.nft_id_non_null(&output_data.output_id)), + Output::Basic(_) | Output::Foundry(_) | Output::Treasury(_) => {} } + + let sdr_amount = output_data + .output + .unlock_conditions() + .unwrap() + .storage_deposit_return() + .map(|sdr| sdr.amount()) + .unwrap_or(0); + + amount += output_data.output.amount() - sdr_amount; } } - log = format!( - "{log}\nOutputs: {:#?}\nBase coin amount: {}\nNative Tokens: {:#?}\nNFTs: {:#?}\nAliases: {:#?}\nFoundries: {:#?}\n", - output_ids, - amount, - native_tokens.finish_vec()?, - nfts, - aliases, - foundries, - ); + // Coins table + formatted_string.push_str(&format!("{:<11}{}\n", "Coins:", amount)); + + // Outputs table + if !outputs.is_empty() { + formatted_string.push_str("Outputs:\n"); + for (id, kind) in outputs { + formatted_string.push_str(&format!(" {id}\t{kind}\n")); + } + } - println_log_info!("{log}"); + // Native tokens table + let native_tokens = native_tokens.finish_vec()?; + if !native_tokens.is_empty() { + formatted_string.push_str("Native Tokens:\n"); + for (id, amount) in native_tokens + .into_iter() + .map(|nt| (*nt.token_id(), nt.amount().to_string())) + { + formatted_string.push_str(&format!(" {id}\t{amount}\n")); + } + } + + // NFT table + if !nfts.is_empty() { + formatted_string.push_str("NFTs:\n"); + for id in nfts.into_iter() { + formatted_string.push_str(&format!(" {id}\n")); + } + } + + // Aliases table + if !aliases.is_empty() { + formatted_string.push_str("Aliases:\n"); + for id in aliases.into_iter() { + formatted_string.push_str(&format!(" {id}\n")); + } + } + + println_log_info!("{formatted_string}"); + + Ok(()) +} + +fn print_addresses(mut addresses: Vec) -> Result<(), Error> { + if addresses.is_empty() { + println_log_info!("No addresses found"); + } else { + addresses.sort_unstable(); + + for (i, addr) in addresses.into_iter().enumerate() { + println_log_info!("{:<5}{}\t{}", i, addr, addr.kind_str()); + } + } Ok(()) } @@ -1031,3 +1095,32 @@ fn outputs_ordering(a: &OutputData, b: &OutputData) -> std::cmp::Ordering { fn transactions_ordering(a: &Transaction, b: &Transaction) -> std::cmp::Ordering { b.timestamp.cmp(&a.timestamp) } + +async fn get_addresses_sorted(account: &Account) -> Result, Error> { + let hrp = account.client().get_bech32_hrp().await?; + let mut addresses = account + .addresses() + .await? + .into_iter() + .map(|address| address.into_bech32()) + .chain( + account + .unspent_outputs(FilterOptions { + output_types: Some(vec![AliasOutput::KIND, NftOutput::KIND]), + ..Default::default() + }) + .await? + .into_iter() + .filter_map(|data| match data.output { + Output::Alias(alias) => Some(Address::Alias(alias.alias_address(&data.output_id))), + Output::Nft(nft) => Some(Address::Nft(nft.nft_address(&data.output_id))), + _ => None, + }) + .map(|address| address.to_bech32_unchecked(hrp)), + ) + .collect::>(); + + addresses.sort_unstable(); + + Ok(addresses) +} diff --git a/cli/src/command/account_completion.rs b/cli/src/command/account_completion.rs index 53a78c1261..932ac4cf35 100644 --- a/cli/src/command/account_completion.rs +++ b/cli/src/command/account_completion.rs @@ -13,6 +13,7 @@ pub struct AccountCompleter; const ACCOUNT_COMMANDS: &[&str] = &[ "accounts", + "address", "addresses", "balance", "burn-native-token", diff --git a/sdk/CHANGELOG.md b/sdk/CHANGELOG.md index 795a0521aa..902376c243 100644 --- a/sdk/CHANGELOG.md +++ b/sdk/CHANGELOG.md @@ -24,6 +24,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Added - `impl From<&OutputId> for {AliasAddress, NftAddress}`; +- `Address::kind_str` method; +- `Display` for `Address`; ### Fixed diff --git a/sdk/Cargo.toml b/sdk/Cargo.toml index ef553381d5..4edfac9bf7 100644 --- a/sdk/Cargo.toml +++ b/sdk/Cargo.toml @@ -26,6 +26,7 @@ derive_more = { version = "0.99.17", default-features = false, features = [ "as_ref", "deref", "deref_mut", + "display" ] } getset = { version = "0.1.2", default-features = false } hashbrown = { version = "0.14.1", default-features = false, features = [ diff --git a/sdk/src/types/block/address/mod.rs b/sdk/src/types/block/address/mod.rs index 0f6bc9b80d..9f33d76d5c 100644 --- a/sdk/src/types/block/address/mod.rs +++ b/sdk/src/types/block/address/mod.rs @@ -6,7 +6,7 @@ mod bech32; mod ed25519; mod nft; -use derive_more::From; +use derive_more::{Display, From}; pub use self::{ alias::AliasAddress, @@ -23,7 +23,7 @@ use crate::types::block::{ }; /// A generic address supporting different address kinds. -#[derive(Clone, Copy, Eq, PartialEq, Ord, PartialOrd, Hash, From, packable::Packable)] +#[derive(Clone, Copy, Eq, PartialEq, Ord, PartialOrd, Hash, From, Display, packable::Packable)] #[packable(tag_type = u8, with_error = Error::InvalidAddressKind)] #[packable(unpack_error = Error)] pub enum Address { @@ -58,6 +58,15 @@ impl Address { } } + /// Returns the address kind of an [`Address`] as a string. + pub fn kind_str(&self) -> &str { + match self { + Self::Ed25519(_) => "Ed25519", + Self::Alias(_) => "Alias", + Self::Nft(_) => "Nft", + } + } + /// Checks whether the address is an [`Ed25519Address`]. pub fn is_ed25519(&self) -> bool { matches!(self, Self::Ed25519(_)) diff --git a/sdk/src/wallet/account/operations/syncing/mod.rs b/sdk/src/wallet/account/operations/syncing/mod.rs index 3333971cf7..5c07fb26aa 100644 --- a/sdk/src/wallet/account/operations/syncing/mod.rs +++ b/sdk/src/wallet/account/operations/syncing/mod.rs @@ -13,7 +13,7 @@ pub use self::options::SyncOptions; use crate::{ client::secret::SecretManage, types::block::{ - address::{Address, AliasAddress, NftAddress, ToBech32Ext}, + address::{Address, ToBech32Ext}, output::{FoundryId, Output, OutputId, OutputMetadata}, }, wallet::account::{ @@ -162,66 +162,34 @@ where addresses_to_sync: Vec, options: &SyncOptions, ) -> crate::wallet::Result<(Vec, Vec, Vec)> { + // Get outputs for addresses and add them also to the `addresses_with_unspent_outputs` + let (addresses_with_output_ids, mut spent_or_not_synced_output_ids) = self + .get_output_ids_for_addresses(options, addresses_to_sync.clone()) + .await?; + + let (mut addresses_with_unspent_outputs, mut outputs_data) = self + .get_outputs_from_address_output_ids(addresses_with_output_ids) + .await?; + // Cache the alias and nft address with the related ed2559 address, so we can update the account address with // the new output ids let mut new_alias_and_nft_addresses = HashMap::new(); - let (mut spent_or_not_synced_output_ids, mut addresses_with_unspent_outputs, mut outputs_data) = - (Vec::new(), Vec::new(), Vec::new()); - loop { - let new_outputs_data = if new_alias_and_nft_addresses.is_empty() { - // Get outputs for addresses and add them also the the addresses_with_unspent_outputs - let (addresses_with_output_ids, spent_or_not_synced_output_ids_inner) = self - .get_output_ids_for_addresses(options, addresses_to_sync.clone()) - .await?; - spent_or_not_synced_output_ids = spent_or_not_synced_output_ids_inner; - // Get outputs for addresses and add them also the the addresses_with_unspent_outputs - let (addresses_with_unspent_outputs_inner, outputs_data_inner) = self - .get_outputs_from_address_output_ids(addresses_with_output_ids) - .await?; - addresses_with_unspent_outputs = addresses_with_unspent_outputs_inner; - outputs_data.extend(outputs_data_inner.clone()); - outputs_data_inner - } else { - let bech32_hrp = self.client().get_bech32_hrp().await?; - let mut new_outputs_data = Vec::new(); - for (alias_or_nft_address, ed25519_address) in new_alias_and_nft_addresses { - let output_ids = self.get_output_ids_for_address(alias_or_nft_address, options).await?; - - // Update address with unspent outputs - let address_with_unspent_outputs = addresses_with_unspent_outputs - .iter_mut() - .find(|a| a.address.inner == ed25519_address) - .ok_or_else(|| { - crate::wallet::Error::AddressNotFoundInAccount(ed25519_address.to_bech32(bech32_hrp)) - })?; - address_with_unspent_outputs.output_ids.extend(output_ids.clone()); - - let new_outputs_data_inner = self.get_outputs(output_ids).await?; - - let outputs_data_inner = self - .output_response_to_output_data(new_outputs_data_inner, address_with_unspent_outputs) - .await?; - - outputs_data.extend(outputs_data_inner.clone()); - new_outputs_data.extend(outputs_data_inner); - } - new_outputs_data - }; + let bech32_hrp = self.client().get_bech32_hrp().await?; - // Clear, so we only get new addresses - new_alias_and_nft_addresses = HashMap::new(); + let mut new_outputs_data = outputs_data.clone(); + + loop { // Add new alias and nft addresses - for output_data in new_outputs_data.iter() { + #[allow(clippy::iter_with_drain)] + for output_data in new_outputs_data.drain(..) { match &output_data.output { Output::Alias(alias_output) => { - let alias_address = AliasAddress::from(alias_output.alias_id_non_null(&output_data.output_id)); - + let alias_address = alias_output.alias_address(&output_data.output_id); new_alias_and_nft_addresses.insert(Address::Alias(alias_address), output_data.address); } Output::Nft(nft_output) => { - let nft_address = NftAddress::from(nft_output.nft_id_non_null(&output_data.output_id)); - + let nft_address = nft_output.nft_address(&output_data.output_id); new_alias_and_nft_addresses.insert(Address::Nft(nft_address), output_data.address); } _ => {} @@ -232,6 +200,27 @@ where if new_alias_and_nft_addresses.is_empty() { break; } + + for (alias_or_nft_address, ed25519_address) in new_alias_and_nft_addresses.drain() { + let output_ids = self.get_output_ids_for_address(alias_or_nft_address, options).await?; + + // Update address with unspent outputs + let address_with_unspent_outputs = addresses_with_unspent_outputs + .iter_mut() + .find(|a| a.address.inner == ed25519_address) + .ok_or_else(|| { + crate::wallet::Error::AddressNotFoundInAccount(ed25519_address.to_bech32(bech32_hrp)) + })?; + address_with_unspent_outputs.output_ids.extend(output_ids.clone()); + + let new_outputs_data_inner = self.get_outputs(output_ids).await?; + let outputs_data_inner = self + .output_response_to_output_data(new_outputs_data_inner, address_with_unspent_outputs) + .await?; + + outputs_data.extend(outputs_data_inner.clone()); + new_outputs_data.extend(outputs_data_inner); + } } // get_output_ids_for_addresses() will return recursively owned outputs not anymore, sine they will only get From eddac2620a5b6a28133262e815b9c8b77ea69084 Mon Sep 17 00:00:00 2001 From: Thoralf-M <46689931+Thoralf-M@users.noreply.github.com> Date: Thu, 26 Oct 2023 18:59:23 +0200 Subject: [PATCH 14/91] Improve syncing and fix deadlock (#1510) * Improve syncing * Fix potential deadlock * format * Update changelog and version * Remove more self.reads() * addresses() on AccountDetails * Logs --------- Co-authored-by: Thibault Martinez --- Cargo.lock | 2 +- bindings/nodejs/CHANGELOG.md | 7 +++ bindings/nodejs/package.json | 2 +- sdk/CHANGELOG.md | 4 +- sdk/Cargo.toml | 2 +- sdk/src/wallet/account/mod.rs | 13 +++-- sdk/src/wallet/account/operations/balance.rs | 12 +++-- .../account/operations/output_claiming.rs | 49 +++++++++++++------ .../account/operations/participation/mod.rs | 26 ++++++---- 9 files changed, 80 insertions(+), 37 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index b7099d2f71..5585bea127 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1616,7 +1616,7 @@ dependencies = [ [[package]] name = "iota-sdk" -version = "1.1.1" +version = "1.1.2" dependencies = [ "anymap", "async-trait", diff --git a/bindings/nodejs/CHANGELOG.md b/bindings/nodejs/CHANGELOG.md index 67686b21a5..a9f11477c9 100644 --- a/bindings/nodejs/CHANGELOG.md +++ b/bindings/nodejs/CHANGELOG.md @@ -19,6 +19,13 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Security --> +## 1.1.2 - 2023-10-26 + +### Fixed + +- Slow syncing with many claimable outputs; +- Potential deadlock in syncing; + ## 1.1.1 - 2023-10-11 ### Added diff --git a/bindings/nodejs/package.json b/bindings/nodejs/package.json index 778818d180..f2cdc767da 100644 --- a/bindings/nodejs/package.json +++ b/bindings/nodejs/package.json @@ -1,6 +1,6 @@ { "name": "@iota/sdk", - "version": "1.1.1", + "version": "1.1.2", "description": "Node.js binding to the IOTA SDK library", "main": "out/index.js", "types": "out/index.d.ts", diff --git a/sdk/CHANGELOG.md b/sdk/CHANGELOG.md index 902376c243..f6cd51ec84 100644 --- a/sdk/CHANGELOG.md +++ b/sdk/CHANGELOG.md @@ -19,7 +19,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Security --> -## 1.1.2 - 2023-MM-DD +## 1.1.2 - 2023-10-26 ### Added @@ -32,6 +32,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - `Account::claim_outputs()` if an input has less amount than min storage deposit; - URLs aren't truncated after the hostname anymore; - Ledger nano potentially failing to identify the correct remainder output; +- Slow syncing with many claimable outputs; +- Potential deadlock in syncing; ## 1.1.1 - 2023-10-11 diff --git a/sdk/Cargo.toml b/sdk/Cargo.toml index 4edfac9bf7..8a77cdec8e 100644 --- a/sdk/Cargo.toml +++ b/sdk/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "iota-sdk" -version = "1.1.1" +version = "1.1.2" authors = ["IOTA Stiftung"] edition = "2021" description = "The IOTA SDK provides developers with a seamless experience to develop on IOTA by providing account abstractions and clients to interact with node APIs." diff --git a/sdk/src/wallet/account/mod.rs b/sdk/src/wallet/account/mod.rs index e938d54394..e717b9207b 100644 --- a/sdk/src/wallet/account/mod.rs +++ b/sdk/src/wallet/account/mod.rs @@ -294,9 +294,7 @@ impl AccountInner { /// Returns all addresses of the account pub async fn addresses(&self) -> Result> { let account_details = self.details().await; - let mut all_addresses = account_details.public_addresses().clone(); - all_addresses.extend(account_details.internal_addresses().clone()); - Ok(all_addresses.to_vec()) + Ok(account_details.addresses()) } /// Returns all public addresses of the account @@ -445,6 +443,15 @@ impl AccountInner { } } +impl AccountDetails { + /// Returns all addresses of the account + pub(crate) fn addresses(&self) -> Vec { + let mut all_addresses = self.public_addresses().clone(); + all_addresses.extend(self.internal_addresses().clone()); + all_addresses.to_vec() + } +} + pub(crate) fn build_transaction_from_payload_and_inputs( tx_id: TransactionId, tx_payload: TransactionPayload, diff --git a/sdk/src/wallet/account/operations/balance.rs b/sdk/src/wallet/account/operations/balance.rs index 0b52770a77..2a9b18f955 100644 --- a/sdk/src/wallet/account/operations/balance.rs +++ b/sdk/src/wallet/account/operations/balance.rs @@ -63,12 +63,17 @@ where ) -> Result { let network_id = self.client().get_network_id().await?; let rent_structure = self.client().get_rent_structure().await?; + let local_time = self.client().get_time_checked().await?; let mut balance = Balance::default(); let mut total_rent_amount = 0; let mut total_native_tokens = NativeTokensBuilder::default(); #[cfg(feature = "participation")] - let voting_output = self.get_voting_output().await?; + let voting_output = account_details.get_voting_output()?; + + let account_addresses = account_details.addresses(); + + let claimable_outputs = account_details.claimable_outputs(OutputsToClaim::All, local_time)?; for address_with_unspent_outputs in addresses_with_unspent_outputs { #[cfg(feature = "participation")] @@ -163,10 +168,7 @@ where // if we have multiple unlock conditions for basic or nft outputs, then we might can't // spend the balance at the moment or in the future - let account_addresses = self.addresses().await?; - let local_time = self.client().get_time_checked().await?; - let is_claimable = - self.claimable_outputs(OutputsToClaim::All).await?.contains(output_id); + let is_claimable = claimable_outputs.contains(output_id); // For outputs that are expired or have a timelock unlock condition, but no expiration // unlock condition and we then can unlock them, then diff --git a/sdk/src/wallet/account/operations/output_claiming.rs b/sdk/src/wallet/account/operations/output_claiming.rs index 37ea891d15..f958837b2a 100644 --- a/sdk/src/wallet/account/operations/output_claiming.rs +++ b/sdk/src/wallet/account/operations/output_claiming.rs @@ -16,7 +16,7 @@ use crate::{ }, }, wallet::account::{ - operations::helpers::time::can_output_be_unlocked_now, types::Transaction, Account, OutputData, + operations::helpers::time::can_output_be_unlocked_now, types::Transaction, Account, AccountDetails, OutputData, TransactionOptions, }, }; @@ -32,31 +32,29 @@ pub enum OutputsToClaim { All, } -impl Account -where - crate::wallet::Error: From, -{ +impl AccountDetails { /// Get basic and nft outputs that have /// [`ExpirationUnlockCondition`](crate::types::block::output::unlock_condition::ExpirationUnlockCondition), /// [`StorageDepositReturnUnlockCondition`] or /// [`TimelockUnlockCondition`](crate::types::block::output::unlock_condition::TimelockUnlockCondition) and can be /// unlocked now and also get basic outputs with only an [`AddressUnlockCondition`] unlock condition, for /// additional inputs - pub async fn claimable_outputs(&self, outputs_to_claim: OutputsToClaim) -> crate::wallet::Result> { - log::debug!("[OUTPUT_CLAIMING] claimable_outputs"); - let account_details = self.details().await; - - let local_time = self.client().get_time_checked().await?; + pub(crate) fn claimable_outputs( + &self, + outputs_to_claim: OutputsToClaim, + time: u32, + ) -> crate::wallet::Result> { + log::debug!("[AccountDetails] claimable_outputs"); // Get outputs for the claim let mut output_ids_to_claim: HashSet = HashSet::new(); - for (output_id, output_data) in account_details + for (output_id, output_data) in self .unspent_outputs .iter() .filter(|(_, o)| o.output.is_basic() || o.output.is_nft()) { // Don't use outputs that are locked for other transactions - if !account_details.locked_outputs.contains(output_id) && account_details.outputs.contains_key(output_id) { + if !self.locked_outputs.contains(output_id) && self.outputs.contains_key(output_id) { if let Some(unlock_conditions) = output_data.output.unlock_conditions() { // If there is a single [UnlockCondition], then it's an // [AddressUnlockCondition] and we own it already without @@ -65,11 +63,11 @@ where && can_output_be_unlocked_now( // We use the addresses with unspent outputs, because other addresses of the // account without unspent outputs can't be related to this output - &account_details.addresses_with_unspent_outputs, + &self.addresses_with_unspent_outputs, // outputs controlled by an alias or nft are currently not considered &[], output_data, - local_time, + time, // Not relevant without alias addresses None, )? @@ -78,7 +76,7 @@ where OutputsToClaim::MicroTransactions => { if let Some(sdr) = unlock_conditions.storage_deposit_return() { // If expired, it's not a micro transaction anymore - if unlock_conditions.is_expired(local_time) { + if unlock_conditions.is_expired(time) { continue; } // Only micro transaction if not the same @@ -99,7 +97,7 @@ where } OutputsToClaim::Amount => { let mut claimable_amount = output_data.output.amount(); - if !unlock_conditions.is_expired(local_time) { + if !unlock_conditions.is_expired(time) { claimable_amount -= unlock_conditions .storage_deposit_return() .map(|s| s.amount()) @@ -123,6 +121,25 @@ where ); Ok(output_ids_to_claim.into_iter().collect()) } +} + +impl Account +where + crate::wallet::Error: From, +{ + /// Get basic and nft outputs that have + /// [`ExpirationUnlockCondition`](crate::types::block::output::unlock_condition::ExpirationUnlockCondition), + /// [`StorageDepositReturnUnlockCondition`] or + /// [`TimelockUnlockCondition`](crate::types::block::output::unlock_condition::TimelockUnlockCondition) and can be + /// unlocked now and also get basic outputs with only an [`AddressUnlockCondition`] unlock condition, for + /// additional inputs + pub async fn claimable_outputs(&self, outputs_to_claim: OutputsToClaim) -> crate::wallet::Result> { + let account_details = self.details().await; + + let local_time = self.client().get_time_checked().await?; + + account_details.claimable_outputs(outputs_to_claim, local_time) + } /// Get basic outputs that have only one unlock condition which is [AddressUnlockCondition], so they can be used as /// additional inputs diff --git a/sdk/src/wallet/account/operations/participation/mod.rs b/sdk/src/wallet/account/operations/participation/mod.rs index 4939ddf933..1637d84b65 100644 --- a/sdk/src/wallet/account/operations/participation/mod.rs +++ b/sdk/src/wallet/account/operations/participation/mod.rs @@ -26,7 +26,7 @@ use crate::{ block::output::{unlock_condition::UnlockCondition, Output, OutputId}, }, wallet::{ - account::{Account, OutputData}, + account::{Account, AccountDetails, OutputData}, task, Result, }, }; @@ -231,14 +231,7 @@ where /// /// If multiple outputs with this tag exist, the one with the largest amount will be returned. pub async fn get_voting_output(&self) -> Result> { - log::debug!("[get_voting_output]"); - Ok(self - .unspent_outputs(None) - .await? - .iter() - .filter(|output_data| is_valid_participation_output(&output_data.output)) - .max_by_key(|output_data| output_data.output.amount()) - .cloned()) + self.details().await.get_voting_output() } /// Gets client for an event. @@ -303,6 +296,21 @@ where } } +impl AccountDetails { + /// Returns the voting output ("PARTICIPATION" tag). + /// + /// If multiple outputs with this tag exist, the one with the largest amount will be returned. + pub(crate) fn get_voting_output(&self) -> Result> { + log::debug!("[get_voting_output]"); + Ok(self + .unspent_outputs + .values() + .filter(|output_data| is_valid_participation_output(&output_data.output)) + .max_by_key(|output_data| output_data.output.amount()) + .cloned()) + } +} + fn is_valid_participation_output(output: &Output) -> bool { // Only basic outputs can be participation outputs. if let Output::Basic(basic_output) = &output { From af960a87b5e2b4d32c608a9bdb71456efe2808d1 Mon Sep 17 00:00:00 2001 From: Thibault Martinez Date: Thu, 26 Oct 2023 19:57:09 +0200 Subject: [PATCH 15/91] CLI: release 1.2.0 (#1517) --- Cargo.lock | 2 +- cli/Cargo.toml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 5585bea127..63b07a693c 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -508,7 +508,7 @@ checksum = "cd7cc57abe963c6d3b9d8be5b06ba7c8957a930305ca90304f24ef040aa6f961" [[package]] name = "cli-wallet" -version = "1.1.0" +version = "1.2.0" dependencies = [ "chrono", "clap", diff --git a/cli/Cargo.toml b/cli/Cargo.toml index 41b234cd57..358491801c 100644 --- a/cli/Cargo.toml +++ b/cli/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "cli-wallet" -version = "1.1.0" +version = "1.2.0" authors = ["IOTA Stiftung"] edition = "2021" homepage = "https://iota.org" From fdd43d384d12dd586499b9886ff9cdba7985ff64 Mon Sep 17 00:00:00 2001 From: Thoralf-M <46689931+Thoralf-M@users.noreply.github.com> Date: Fri, 27 Oct 2023 10:48:52 +0200 Subject: [PATCH 16/91] Update prebuild version (#1520) --- bindings/nodejs/CHANGELOG.md | 6 + bindings/nodejs/package.json | 4 +- bindings/nodejs/yarn.lock | 1086 +++++++++++++++++++++++++++++----- 3 files changed, 939 insertions(+), 157 deletions(-) diff --git a/bindings/nodejs/CHANGELOG.md b/bindings/nodejs/CHANGELOG.md index a9f11477c9..11938f9b15 100644 --- a/bindings/nodejs/CHANGELOG.md +++ b/bindings/nodejs/CHANGELOG.md @@ -19,6 +19,12 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Security --> +## 1.1.3 - 2023-10-27 + +### Fixed + +- Prebuild binaries; + ## 1.1.2 - 2023-10-26 ### Fixed diff --git a/bindings/nodejs/package.json b/bindings/nodejs/package.json index f2cdc767da..b0551e095a 100644 --- a/bindings/nodejs/package.json +++ b/bindings/nodejs/package.json @@ -1,6 +1,6 @@ { "name": "@iota/sdk", - "version": "1.1.2", + "version": "1.1.3", "description": "Node.js binding to the IOTA SDK library", "main": "out/index.js", "types": "out/index.d.ts", @@ -43,7 +43,7 @@ "eslint-config-prettier": "^8.5.0", "jest": "^29.4.2", "jest-matcher-utils": "^29.5.0", - "prebuild": "^3.0.3", + "prebuild": "^12.1.0", "prettier": "^2.8.3", "ts-jest": "^29.0.5", "typedoc": "^0.24.6", diff --git a/bindings/nodejs/yarn.lock b/bindings/nodejs/yarn.lock index 99c8a5fcfb..1cec6bf2b1 100644 --- a/bindings/nodejs/yarn.lock +++ b/bindings/nodejs/yarn.lock @@ -358,6 +358,18 @@ resolved "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz" integrity sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA== +"@isaacs/cliui@^8.0.2": + version "8.0.2" + resolved "https://registry.yarnpkg.com/@isaacs/cliui/-/cliui-8.0.2.tgz#b37667b7bc181c168782259bab42474fbf52b550" + integrity sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA== + dependencies: + string-width "^5.1.2" + string-width-cjs "npm:string-width@^4.2.0" + strip-ansi "^7.0.1" + strip-ansi-cjs "npm:strip-ansi@^6.0.1" + wrap-ansi "^8.1.0" + wrap-ansi-cjs "npm:wrap-ansi@^7.0.0" + "@istanbuljs/load-nyc-config@^1.0.0": version "1.1.0" resolved "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz" @@ -627,6 +639,18 @@ "@nodelib/fs.scandir" "2.1.5" fastq "^1.6.0" +"@npmcli/fs@^3.1.0": + version "3.1.0" + resolved "https://registry.yarnpkg.com/@npmcli/fs/-/fs-3.1.0.tgz#233d43a25a91d68c3a863ba0da6a3f00924a173e" + integrity sha512-7kZUAaLscfgbwBQRbvdMYaZOWyMEcPTH/tJjnyAWJ/dvvs9Ef+CERx/qJb9GExJpl1qipaDGn7KqHnFGGixd0w== + dependencies: + semver "^7.3.5" + +"@pkgjs/parseargs@^0.11.0": + version "0.11.0" + resolved "https://registry.yarnpkg.com/@pkgjs/parseargs/-/parseargs-0.11.0.tgz#a77ea742fab25775145434eb1d2328cf5013ac33" + integrity sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg== + "@sinclair/typebox@^0.27.8": version "0.27.8" resolved "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz" @@ -646,6 +670,11 @@ dependencies: "@sinonjs/commons" "^3.0.0" +"@tootallnate/once@2": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@tootallnate/once/-/once-2.0.0.tgz#f544a148d3ab35801c1f633a7441fd87c2e484bf" + integrity sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A== + "@types/babel__core@^7.1.14": version "7.20.1" resolved "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.1.tgz" @@ -996,11 +1025,18 @@ resolved "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz" integrity sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ== -abbrev@1: +abbrev@1, abbrev@^1.0.0: version "1.1.1" resolved "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz" integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q== +abort-controller@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/abort-controller/-/abort-controller-3.0.0.tgz#eaf54d53b62bae4138e809ca225c8439a6efb392" + integrity sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg== + dependencies: + event-target-shim "^5.0.0" + acorn-import-assertions@^1.9.0: version "1.9.0" resolved "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.9.0.tgz" @@ -1021,6 +1057,28 @@ after@~0.8.1: resolved "https://registry.npmjs.org/after/-/after-0.8.2.tgz" integrity sha512-QbJ0NTQ/I9DI3uSJA4cbexiwQeRAfjPScqIbSjUDd9TOrcg6pTkdgziesOqxBMBzit8vFCTwrP27t13vFOORRA== +agent-base@6, agent-base@^6.0.2: + version "6.0.2" + resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-6.0.2.tgz#49fff58577cfee3f37176feab4c22e00f86d7f77" + integrity sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ== + dependencies: + debug "4" + +agentkeepalive@^4.2.1: + version "4.5.0" + resolved "https://registry.yarnpkg.com/agentkeepalive/-/agentkeepalive-4.5.0.tgz#2673ad1389b3c418c5a20c5d7364f93ca04be923" + integrity sha512-5GG/5IbQQpC9FpkRGsSvZI5QYeSCzlJHdpBQntCsuTOxhKD8lqKhrleg2Yi7yvMIf82Ycmmqln9U8V9qwEiJew== + dependencies: + humanize-ms "^1.2.1" + +aggregate-error@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/aggregate-error/-/aggregate-error-3.1.0.tgz#92670ff50f5359bdb7a3e0d40d0ec30c5737687a" + integrity sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA== + dependencies: + clean-stack "^2.0.0" + indent-string "^4.0.0" + ajv-keywords@^3.5.2: version "3.5.2" resolved "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz" @@ -1053,6 +1111,11 @@ ansi-regex@^5.0.1: resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz" integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== +ansi-regex@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-6.0.1.tgz#3183e38fae9a65d7cb5e53945cd5897d0260a06a" + integrity sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA== + ansi-sequence-parser@^1.1.0: version "1.1.1" resolved "https://registry.npmjs.org/ansi-sequence-parser/-/ansi-sequence-parser-1.1.1.tgz" @@ -1077,6 +1140,11 @@ ansi-styles@^5.0.0: resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz" integrity sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA== +ansi-styles@^6.1.0: + version "6.2.1" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-6.2.1.tgz#0e62320cf99c21afff3b3012192546aacbfb05c5" + integrity sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug== + ansi@^0.3.0, ansi@~0.3.1: version "0.3.1" resolved "https://registry.npmjs.org/ansi/-/ansi-0.3.1.tgz" @@ -1095,6 +1163,27 @@ aproba@^1.0.3: resolved "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz" integrity sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw== +"aproba@^1.0.3 || ^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/aproba/-/aproba-2.0.0.tgz#52520b8ae5b569215b354efc0caa3fe1e45a8adc" + integrity sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ== + +are-we-there-yet@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-3.0.1.tgz#679df222b278c64f2cdba1175cdc00b0d96164bd" + integrity sha512-QZW4EDmGwlYur0Yyf/b2uGucHQMa8aFUP7eu9ddR73vvhFyt4V0Vl3QHPcTNJ8l6qYOBdxgXdnBXQrHilfRQBg== + dependencies: + delegates "^1.0.0" + readable-stream "^3.6.0" + +are-we-there-yet@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-4.0.1.tgz#05a6fc0e5f70771b673e82b0f915616e0ace8fd3" + integrity sha512-2zuA+jpOYBRgoBCfa+fB87Rk0oGJjDX6pxGzqH6f33NzUhG25Xur6R0u0Z9VVAq8Z5JvQpQI6j6rtonuivC8QA== + dependencies: + delegates "^1.0.0" + readable-stream "^4.1.0" + are-we-there-yet@~1.1.2: version "1.1.7" resolved "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.7.tgz" @@ -1115,6 +1204,14 @@ argparse@^2.0.1: resolved "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz" integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== +array-index@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/array-index/-/array-index-1.0.0.tgz#ec56a749ee103e4e08c790b9c353df16055b97f9" + integrity sha512-jesyNbBkLQgGZMSwA1FanaFjalb1mZUGxGeUEkSDidzgrbjBGhvizJkaItdhkt8eIHFOJC7nDsrXk+BaehTdRw== + dependencies: + debug "^2.2.0" + es6-symbol "^3.0.2" + array-union@^2.1.0: version "2.1.0" resolved "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz" @@ -1132,11 +1229,6 @@ assert-plus@1.0.0, assert-plus@^1.0.0: resolved "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz" integrity sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw== -async@^1.4.0: - version "1.5.2" - resolved "https://registry.npmjs.org/async/-/async-1.5.2.tgz" - integrity sha512-nSVgobk4rv61R9PUSDtYt7mPVB2olxNR5RWJcAsH676/ef11bUZwvu7+RGYrYauVdDPcO519v68wRhXQtxsV9w== - asynckit@^0.4.0: version "0.4.0" resolved "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz" @@ -1152,6 +1244,20 @@ aws4@^1.8.0: resolved "https://registry.npmjs.org/aws4/-/aws4-1.12.0.tgz" integrity sha512-NmWvPnx0F1SfrQbYwOi7OeaNGokp9XhzNioJ/CSBs8Qa4vxug81mhJEAVZwxXuBmYB5KDRfMq/F3RR0BIU7sWg== +axios@^1.3.2: + version "1.6.0" + resolved "https://registry.yarnpkg.com/axios/-/axios-1.6.0.tgz#f1e5292f26b2fd5c2e66876adc5b06cdbd7d2102" + integrity sha512-EZ1DYihju9pwVB+jg67ogm+Tmqc6JmhamRN6I4Zt8DfZu5lbcQGw3ozH9lFejSJgs/ibaef3A9PMXPLeefFGJg== + dependencies: + follow-redirects "^1.15.0" + form-data "^4.0.0" + proxy-from-env "^1.1.0" + +b4a@^1.6.4: + version "1.6.4" + resolved "https://registry.yarnpkg.com/b4a/-/b4a-1.6.4.tgz#ef1c1422cae5ce6535ec191baeed7567443f36c9" + integrity sha512-fpWrvyVHEKyeEvbKZTVOeZF3VSKKWtJxFIxX/jaVPf+cLbGUSitjb49pHLqPV2BUNNZ0LcoeEGfE/YCpyDYHIw== + babel-jest@^29.6.2: version "29.6.2" resolved "https://registry.npmjs.org/babel-jest/-/babel-jest-29.6.2.tgz" @@ -1229,14 +1335,6 @@ bcrypt-pbkdf@^1.0.0: dependencies: tweetnacl "^0.14.3" -bl@^1.0.0: - version "1.2.3" - resolved "https://registry.npmjs.org/bl/-/bl-1.2.3.tgz" - integrity sha512-pvcNpa0UU69UT341rO6AYy4FVAIkUHuZXRIWbq+zHnsVcRzDDjIAhGuuYoi0d//cwIwtt4pkpKycWEfjdV+vww== - dependencies: - readable-stream "^2.3.5" - safe-buffer "^5.1.1" - bl@^4.0.3: version "4.1.0" resolved "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz" @@ -1299,24 +1397,6 @@ bser@2.1.1: dependencies: node-int64 "^0.4.0" -buffer-alloc-unsafe@^1.1.0: - version "1.1.0" - resolved "https://registry.npmjs.org/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz" - integrity sha512-TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg== - -buffer-alloc@^1.2.0: - version "1.2.0" - resolved "https://registry.npmjs.org/buffer-alloc/-/buffer-alloc-1.2.0.tgz" - integrity sha512-CFsHQgjtW1UChdXgbyJGtnm+O/uLQeZdtbDo8mfUgYXCHSM1wgrVxXm6bSyrUuErEb+4sYVGCzASBRot7zyrow== - dependencies: - buffer-alloc-unsafe "^1.1.0" - buffer-fill "^1.0.0" - -buffer-fill@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/buffer-fill/-/buffer-fill-1.0.0.tgz" - integrity sha512-T7zexNBwiiaCOGDg9xNX9PBmjrubblRkENuptryuI64URkXDFum9il/JGL8Lm8wYfAXpredVXXZz7eMHilimiQ== - buffer-from@^0.1.1: version "0.1.2" resolved "https://registry.npmjs.org/buffer-from/-/buffer-from-0.1.2.tgz" @@ -1335,6 +1415,32 @@ buffer@^5.5.0: base64-js "^1.3.1" ieee754 "^1.1.13" +buffer@^6.0.3: + version "6.0.3" + resolved "https://registry.yarnpkg.com/buffer/-/buffer-6.0.3.tgz#2ace578459cc8fbe2a70aaa8f52ee63b6a74c6c6" + integrity sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA== + dependencies: + base64-js "^1.3.1" + ieee754 "^1.2.1" + +cacache@^17.0.0: + version "17.1.4" + resolved "https://registry.yarnpkg.com/cacache/-/cacache-17.1.4.tgz#b3ff381580b47e85c6e64f801101508e26604b35" + integrity sha512-/aJwG2l3ZMJ1xNAnqbMpA40of9dj/pIH3QfiuQSqjfPJF747VR0J/bHn+/KdNnHKc6XQcWt/AfRSBft82W1d2A== + dependencies: + "@npmcli/fs" "^3.1.0" + fs-minipass "^3.0.0" + glob "^10.2.2" + lru-cache "^7.7.1" + minipass "^7.0.3" + minipass-collect "^1.0.2" + minipass-flush "^1.0.5" + minipass-pipeline "^1.2.4" + p-map "^4.0.0" + ssri "^10.0.0" + tar "^6.1.11" + unique-filename "^3.0.0" + callsites@^3.0.0: version "3.1.0" resolved "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz" @@ -1387,7 +1493,7 @@ char-regex@^1.0.2: resolved "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz" integrity sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw== -chownr@^1.0.1, chownr@^1.1.1, chownr@^1.1.4: +chownr@^1.1.1, chownr@^1.1.4: version "1.1.4" resolved "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz" integrity sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg== @@ -1412,6 +1518,11 @@ class-transformer@^0.5.1: resolved "https://registry.npmjs.org/class-transformer/-/class-transformer-0.5.1.tgz" integrity sha512-SQa1Ws6hUbfC98vKGxZH3KFY0Y1lm5Zm0SY8XX9zbK7FJCyVEac3ATW0RIpwzW+oOfmHE5PMPufDG9hCfoEOMw== +clean-stack@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/clean-stack/-/clean-stack-2.2.0.tgz#ee8472dbb129e727b31e8a10a427dee9dfe4008b" + integrity sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A== + cliui@^8.0.1: version "8.0.1" resolved "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz" @@ -1430,6 +1541,25 @@ clone-deep@^4.0.1: kind-of "^6.0.2" shallow-clone "^3.0.0" +cmake-js@^7.2.1: + version "7.2.1" + resolved "https://registry.yarnpkg.com/cmake-js/-/cmake-js-7.2.1.tgz#757c0d39994121b084bab96290baf115ee7712cd" + integrity sha512-AdPSz9cSIJWdKvm0aJgVu3X8i0U3mNTswJkSHzZISqmYVjZk7Td4oDFg0mCBA383wO+9pG5Ix7pEP1CZH9x2BA== + dependencies: + axios "^1.3.2" + debug "^4" + fs-extra "^10.1.0" + lodash.isplainobject "^4.0.6" + memory-stream "^1.0.0" + node-api-headers "^0.0.2" + npmlog "^6.0.2" + rc "^1.2.7" + semver "^7.3.8" + tar "^6.1.11" + url-join "^4.0.1" + which "^2.0.2" + yargs "^17.6.0" + co@^4.6.0: version "4.6.0" resolved "https://registry.npmjs.org/co/-/co-4.6.0.tgz" @@ -1469,12 +1599,17 @@ color-name@~1.1.4: resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz" integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== +color-support@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/color-support/-/color-support-1.1.3.tgz#93834379a1cc9a0c61f82f52f0d04322251bd5a2" + integrity sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg== + colorette@^2.0.14: version "2.0.20" resolved "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz" integrity sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w== -combined-stream@^1.0.6, combined-stream@~1.0.6: +combined-stream@^1.0.6, combined-stream@^1.0.8, combined-stream@~1.0.6: version "1.0.8" resolved "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz" integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== @@ -1496,7 +1631,7 @@ concat-map@0.0.1: resolved "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz" integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== -console-control-strings@^1.0.0, console-control-strings@~1.1.0: +console-control-strings@^1.0.0, console-control-strings@^1.1.0, console-control-strings@~1.1.0: version "1.1.0" resolved "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz" integrity sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ== @@ -1516,7 +1651,7 @@ core-util-is@1.0.2, core-util-is@~1.0.0: resolved "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz" integrity sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ== -cross-spawn@^7.0.2, cross-spawn@^7.0.3: +cross-spawn@^7.0.0, cross-spawn@^7.0.2, cross-spawn@^7.0.3: version "7.0.3" resolved "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz" integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== @@ -1525,6 +1660,14 @@ cross-spawn@^7.0.2, cross-spawn@^7.0.3: shebang-command "^2.0.0" which "^2.0.1" +d@1, d@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/d/-/d-1.0.1.tgz#8698095372d58dbee346ffd0c7093f99f8f9eb5a" + integrity sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA== + dependencies: + es5-ext "^0.10.50" + type "^1.0.1" + dashdash@^1.12.0: version "1.14.1" resolved "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz" @@ -1532,13 +1675,20 @@ dashdash@^1.12.0: dependencies: assert-plus "^1.0.0" -debug@^4.1.0, debug@^4.1.1, debug@^4.3.2, debug@^4.3.4: +debug@4, debug@^4, debug@^4.1.0, debug@^4.1.1, debug@^4.3.2, debug@^4.3.3, debug@^4.3.4: version "4.3.4" resolved "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz" integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== dependencies: ms "2.1.2" +debug@^2.2.0: + version "2.6.9" + resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" + integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== + dependencies: + ms "2.0.0" + decompress-response@^3.3.0: version "3.3.0" resolved "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz" @@ -1576,7 +1726,7 @@ delegates@^1.0.0: resolved "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz" integrity sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ== -detect-libc@^2.0.0: +detect-libc@^2.0.0, detect-libc@^2.0.2: version "2.0.2" resolved "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.2.tgz" integrity sha512-UX6sGumvvqSaXgdKGUsgZWqcUyIXZ/vZTrlRT/iobiKhGL0zL4d3osHj3uqllWJK+i+sixDS/3COVEOFbupFyw== @@ -1617,6 +1767,16 @@ duplexer2@~0.0.2: dependencies: readable-stream "~1.1.9" +each-series-async@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/each-series-async/-/each-series-async-1.0.1.tgz#7e3f8dfa5af934663960e5a17561362909b34328" + integrity sha512-G4zip/Ewpwr6JQxW7+2RNgkPd09h/UNec5UlvA/xKwl4qf5blyBNK6a/zjQc3MojgsxaOb93B9v3T92QU6IMVg== + +eastasianwidth@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/eastasianwidth/-/eastasianwidth-0.2.0.tgz#696ce2ec0aa0e6ea93a397ffcf24aa7840c827cb" + integrity sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA== + ecc-jsbn@~0.1.1: version "0.1.2" resolved "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz" @@ -1648,7 +1808,19 @@ emoji-regex@^8.0.0: resolved "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz" integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== -end-of-stream@^1.0.0, end-of-stream@^1.1.0, end-of-stream@^1.4.1: +emoji-regex@^9.2.2: + version "9.2.2" + resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-9.2.2.tgz#840c8803b0d8047f4ff0cf963176b32d4ef3ed72" + integrity sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg== + +encoding@^0.1.13: + version "0.1.13" + resolved "https://registry.yarnpkg.com/encoding/-/encoding-0.1.13.tgz#56574afdd791f54a8e9b2785c0582a2d26210fa9" + integrity sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A== + dependencies: + iconv-lite "^0.6.2" + +end-of-stream@^1.1.0, end-of-stream@^1.4.1: version "1.4.4" resolved "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz" integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q== @@ -1663,11 +1835,21 @@ enhanced-resolve@^5.15.0: graceful-fs "^4.2.4" tapable "^2.2.0" +env-paths@^2.2.0: + version "2.2.1" + resolved "https://registry.yarnpkg.com/env-paths/-/env-paths-2.2.1.tgz#420399d416ce1fbe9bc0a07c62fa68d67fd0f8f2" + integrity sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A== + envinfo@^7.7.3: version "7.10.0" resolved "https://registry.npmjs.org/envinfo/-/envinfo-7.10.0.tgz" integrity sha512-ZtUjZO6l5mwTHvc1L9+1q5p/R3wTopcfqMW8r5t8SJSKqeVI/LtajORwRFEKpEFuekjD0VBjwu1HMxL4UalIRw== +err-code@^2.0.2: + version "2.0.3" + resolved "https://registry.yarnpkg.com/err-code/-/err-code-2.0.3.tgz#23c2f3b756ffdfc608d30e27c9a941024807e7f9" + integrity sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA== + error-ex@^1.3.1: version "1.3.2" resolved "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz" @@ -1680,6 +1862,32 @@ es-module-lexer@^1.2.1: resolved "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.3.1.tgz" integrity sha512-JUFAyicQV9mXc3YRxPnDlrfBKpqt6hUYzz9/boprUJHs4e4KVr3XwOF70doO6gwXUor6EWZJAyWAfKki84t20Q== +es5-ext@^0.10.35, es5-ext@^0.10.50: + version "0.10.62" + resolved "https://registry.yarnpkg.com/es5-ext/-/es5-ext-0.10.62.tgz#5e6adc19a6da524bf3d1e02bbc8960e5eb49a9a5" + integrity sha512-BHLqn0klhEpnOKSrzn/Xsz2UIW8j+cGmo9JLzr8BiUapV8hPL9+FliFqjwr9ngW7jWdnxv6eO+/LqyhJVqgrjA== + dependencies: + es6-iterator "^2.0.3" + es6-symbol "^3.1.3" + next-tick "^1.1.0" + +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-symbol@^3.0.2, es6-symbol@^3.1.1, es6-symbol@^3.1.3: + version "3.1.3" + resolved "https://registry.yarnpkg.com/es6-symbol/-/es6-symbol-3.1.3.tgz#bad5d3c1bcdac28269f4cb331e431c78ac705d18" + integrity sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA== + dependencies: + d "^1.0.1" + ext "^1.1.2" + escalade@^3.1.1: version "3.1.1" resolved "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz" @@ -1812,9 +2020,14 @@ esutils@^2.0.2: resolved "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz" integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== -events@^3.2.0: +event-target-shim@^5.0.0: + version "5.0.1" + resolved "https://registry.yarnpkg.com/event-target-shim/-/event-target-shim-5.0.1.tgz#5d4d3ebdf9583d63a5333ce2deb7480ab2b05789" + integrity sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ== + +events@^3.2.0, events@^3.3.0: version "3.3.0" - resolved "https://registry.npmjs.org/events/-/events-3.3.0.tgz" + resolved "https://registry.yarnpkg.com/events/-/events-3.3.0.tgz#31a95ad0a924e2d2c419a813aeb2c4e878ea7400" integrity sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q== execa@^5.0.0: @@ -1832,16 +2045,18 @@ execa@^5.0.0: signal-exit "^3.0.3" strip-final-newline "^2.0.0" +execspawn@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/execspawn/-/execspawn-1.0.1.tgz#8286f9dde7cecde7905fbdc04e24f368f23f8da6" + integrity sha512-s2k06Jy9i8CUkYe0+DxRlvtkZoOkwwfhB+Xxo5HGUtrISVW2m98jO2tr67DGRFxZwkjQqloA3v/tNtjhBRBieg== + dependencies: + util-extend "^1.0.1" + exit@^0.1.2: version "0.1.2" resolved "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz" integrity sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ== -expand-template@^1.0.0: - version "1.1.1" - resolved "https://registry.npmjs.org/expand-template/-/expand-template-1.1.1.tgz" - integrity sha512-cebqLtV8KOZfw0UI8TEFWxtczxxC1jvyUvx6H4fyp1K1FN7A4Q+uggVUlOsI1K8AGU0rwOGqP8nCapdrw8CYQg== - expand-template@^2.0.3: version "2.0.3" resolved "https://registry.npmjs.org/expand-template/-/expand-template-2.0.3.tgz" @@ -1859,6 +2074,18 @@ expect@^29.0.0, expect@^29.6.2: jest-message-util "^29.6.2" jest-util "^29.6.2" +exponential-backoff@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/exponential-backoff/-/exponential-backoff-3.1.1.tgz#64ac7526fe341ab18a39016cd22c787d01e00bf6" + integrity sha512-dX7e/LHVJ6W3DE1MHWi9S1EYzDESENfLrYohG2G++ovZrYOkm4Knwa0mc1cn84xJOR4KEU0WSchhLbd0UklbHw== + +ext@^1.1.2: + version "1.7.0" + resolved "https://registry.yarnpkg.com/ext/-/ext-1.7.0.tgz#0ea4383c0103d60e70be99e9a7f11027a33c4f5f" + integrity sha512-6hxeJYaL110a9b5TEJSj0gojyHQAmA2ch5Os+ySCiA1QGdS697XWY1pzsrSjqA9LDEEgdB/KypIlR59RcLuHYw== + dependencies: + type "^2.7.2" + extend@~3.0.2: version "3.0.2" resolved "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz" @@ -1874,6 +2101,11 @@ fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: resolved "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz" integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== +fast-fifo@^1.1.0, fast-fifo@^1.2.0: + version "1.3.2" + resolved "https://registry.yarnpkg.com/fast-fifo/-/fast-fifo-1.3.2.tgz#286e31de96eb96d38a97899815740ba2a4f3640c" + integrity sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ== + fast-glob@^3.2.9: version "3.3.1" resolved "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.1.tgz" @@ -1957,11 +2189,33 @@ flatted@^3.1.0: resolved "https://registry.npmjs.org/flatted/-/flatted-3.2.7.tgz" integrity sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ== +follow-redirects@^1.15.0: + version "1.15.3" + resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.3.tgz#fe2f3ef2690afce7e82ed0b44db08165b207123a" + integrity sha512-1VzOtuEM8pC9SFU1E+8KfTjZyMztRsgEfwQl44z8A25uy13jSzTj6dyK2Df52iV0vgHCfBwLhDWevLn95w5v6Q== + +foreground-child@^3.1.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/foreground-child/-/foreground-child-3.1.1.tgz#1d173e776d75d2772fed08efe4a0de1ea1b12d0d" + integrity sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg== + dependencies: + cross-spawn "^7.0.0" + signal-exit "^4.0.1" + forever-agent@~0.6.1: version "0.6.1" resolved "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz" integrity sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw== +form-data@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/form-data/-/form-data-4.0.0.tgz#93919daeaf361ee529584b9b31664dc12c9fa452" + integrity sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww== + dependencies: + asynckit "^0.4.0" + combined-stream "^1.0.8" + mime-types "^2.1.12" + form-data@~2.3.2: version "2.3.3" resolved "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz" @@ -1976,6 +2230,15 @@ fs-constants@^1.0.0: resolved "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz" integrity sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow== +fs-extra@^10.1.0: + version "10.1.0" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-10.1.0.tgz#02873cfbc4084dde127eaa5f9905eef2325d1abf" + integrity sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ== + dependencies: + graceful-fs "^4.2.0" + jsonfile "^6.0.1" + universalify "^2.0.0" + fs-minipass@^1.2.7: version "1.2.7" resolved "https://registry.npmjs.org/fs-minipass/-/fs-minipass-1.2.7.tgz" @@ -1983,6 +2246,13 @@ fs-minipass@^1.2.7: dependencies: minipass "^2.6.0" +fs-minipass@^3.0.0: + version "3.0.3" + resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-3.0.3.tgz#79a85981c4dc120065e96f62086bf6f9dc26cc54" + integrity sha512-XUBA9XClHbnJWSfBzjkm6RvPsyg3sryZt06BEQoXcF7EK/xpGaQYJgQKDJSUH5SGZ76Y7pFx1QBnXz09rU5Fbw== + dependencies: + minipass "^7.0.3" + fs.realpath@^1.0.0: version "1.0.0" resolved "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz" @@ -2008,6 +2278,34 @@ function-bind@^1.1.1: resolved "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz" integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== +gauge@^4.0.3: + version "4.0.4" + resolved "https://registry.yarnpkg.com/gauge/-/gauge-4.0.4.tgz#52ff0652f2bbf607a989793d53b751bef2328dce" + integrity sha512-f9m+BEN5jkg6a0fZjleidjN51VE1X+mPFQ2DJ0uv1V39oCLCbsGe6yjbBnp7eK7z/+GAon99a3nHuqbuuthyPg== + dependencies: + aproba "^1.0.3 || ^2.0.0" + color-support "^1.1.3" + console-control-strings "^1.1.0" + has-unicode "^2.0.1" + signal-exit "^3.0.7" + string-width "^4.2.3" + strip-ansi "^6.0.1" + wide-align "^1.1.5" + +gauge@^5.0.0: + version "5.0.1" + resolved "https://registry.yarnpkg.com/gauge/-/gauge-5.0.1.tgz#1efc801b8ff076b86ef3e9a7a280a975df572112" + integrity sha512-CmykPMJGuNan/3S4kZOpvvPYSNqSHANiWnh9XcMU2pSjtBfF0XzZ2p1bFAxTbnFxyBuPxQYHhzwaoOmUdqzvxQ== + dependencies: + aproba "^1.0.3 || ^2.0.0" + color-support "^1.1.3" + console-control-strings "^1.1.0" + has-unicode "^2.0.1" + signal-exit "^4.0.1" + string-width "^4.2.3" + strip-ansi "^6.0.1" + wide-align "^1.1.5" + gauge@~1.2.5: version "1.2.7" resolved "https://registry.npmjs.org/gauge/-/gauge-1.2.7.tgz" @@ -2060,17 +2358,17 @@ getpass@^0.1.1: dependencies: assert-plus "^1.0.0" -ghreleases@^1.0.2: - version "1.0.7" - resolved "https://registry.npmjs.org/ghreleases/-/ghreleases-1.0.7.tgz" - integrity sha512-1lFGyLLF38Q6cFCDyebN5vzQ2P9DEaAgxPIDLmQwQDVDmUe2Wgv+6dhAIoHeA+My4HLpaJ+dKF73xtuykN2cbQ== +ghreleases@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/ghreleases/-/ghreleases-3.0.2.tgz#1bdb6d31ec03a24a0d80f58f5e9a84a4db725818" + integrity sha512-QiR9mIYvRG7hd8JuQYoxeBNOelVuTp2DpdiByRywbCDBSJufK9Vq7VuhD8B+5uviMxZx2AEkCzye61Us9gYgnw== dependencies: after "~0.8.1" ghrepos "~2.1.0" ghutils "~3.2.0" + lodash.uniq "^4.5.0" simple-mime "~0.1.0" url-template "~2.0.6" - xtend "~4.0.0" ghrepos@~2.1.0: version "2.1.0" @@ -2111,7 +2409,7 @@ glob-to-regexp@^0.4.1: resolved "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz" integrity sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw== -glob@^7.0.3, glob@^7.1.3, glob@^7.1.4: +"glob@3 || 4 || 5 || 6 || 7", glob@^7.0.3, glob@^7.1.3, glob@^7.1.4, glob@^7.2.3: version "7.2.3" resolved "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz" integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== @@ -2123,6 +2421,17 @@ glob@^7.0.3, glob@^7.1.3, glob@^7.1.4: once "^1.3.0" path-is-absolute "^1.0.0" +glob@^10.2.2: + version "10.3.10" + resolved "https://registry.yarnpkg.com/glob/-/glob-10.3.10.tgz#0351ebb809fd187fe421ab96af83d3a70715df4b" + integrity sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g== + dependencies: + foreground-child "^3.1.0" + jackspeak "^2.3.5" + minimatch "^9.0.1" + minipass "^5.0.0 || ^6.0.2 || ^7.0.0" + path-scurry "^1.10.1" + globals@^11.1.0: version "11.12.0" resolved "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz" @@ -2147,7 +2456,7 @@ globby@^11.1.0: merge2 "^1.4.1" slash "^3.0.0" -graceful-fs@^4.1.2, graceful-fs@^4.2.4, graceful-fs@^4.2.9: +graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.4, graceful-fs@^4.2.6, graceful-fs@^4.2.9: version "4.2.11" resolved "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz" integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ== @@ -2192,7 +2501,7 @@ has-flag@^4.0.0: resolved "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz" integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== -has-unicode@^2.0.0: +has-unicode@^2.0.0, has-unicode@^2.0.1: version "2.0.1" resolved "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz" integrity sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ== @@ -2209,6 +2518,20 @@ html-escaper@^2.0.0: resolved "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz" integrity sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg== +http-cache-semantics@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz#abe02fcb2985460bf0323be664436ec3476a6d5a" + integrity sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ== + +http-proxy-agent@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz#5129800203520d434f142bc78ff3c170800f2b43" + integrity sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w== + dependencies: + "@tootallnate/once" "2" + agent-base "6" + debug "4" + http-signature@~1.2.0: version "1.2.0" resolved "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz" @@ -2218,11 +2541,26 @@ http-signature@~1.2.0: jsprim "^1.2.2" sshpk "^1.7.0" +https-proxy-agent@^5.0.0: + version "5.0.1" + resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz#c59ef224a04fe8b754f3db0063a25ea30d0005d6" + integrity sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA== + dependencies: + agent-base "6" + debug "4" + human-signals@^2.1.0: version "2.1.0" resolved "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz" integrity sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw== +humanize-ms@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/humanize-ms/-/humanize-ms-1.2.1.tgz#c46e3159a293f6b896da29316d8b6fe8bb79bbed" + integrity sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ== + dependencies: + ms "^2.0.0" + hyperquest@~2.1.3: version "2.1.3" resolved "https://registry.npmjs.org/hyperquest/-/hyperquest-2.1.3.tgz" @@ -2232,7 +2570,14 @@ hyperquest@~2.1.3: duplexer2 "~0.0.2" through2 "~0.6.3" -ieee754@^1.1.13: +iconv-lite@^0.6.2: + version "0.6.3" + resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.6.3.tgz#a52f80bf38da1952eb5c681790719871a1a72501" + integrity sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw== + dependencies: + safer-buffer ">= 2.1.2 < 3.0.0" + +ieee754@^1.1.13, ieee754@^1.2.1: version "1.2.1" resolved "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz" integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== @@ -2263,6 +2608,11 @@ imurmurhash@^0.1.4: resolved "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz" integrity sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA== +indent-string@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-4.0.0.tgz#624f8f4497d619b2d9768531d58f4122854d7251" + integrity sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg== + inflight@^1.0.4: version "1.0.6" resolved "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz" @@ -2286,6 +2636,11 @@ interpret@^3.1.1: resolved "https://registry.npmjs.org/interpret/-/interpret-3.1.1.tgz" integrity sha512-6xwYfHbajpoF0xLW+iwLkhwgvLoZDfjYfoFNu8ftMoXINzwuymNLd9u/KmwtdT2GbR+/Cz66otEGEVVUHX9QLQ== +ip@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/ip/-/ip-2.0.0.tgz#4cf4ab182fee2314c75ede1276f8c80b479936da" + integrity sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ== + is-arrayish@^0.2.1: version "0.2.1" resolved "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz" @@ -2327,6 +2682,11 @@ is-glob@^4.0.0, is-glob@^4.0.1, is-glob@^4.0.3: dependencies: is-extglob "^2.1.1" +is-lambda@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-lambda/-/is-lambda-1.0.1.tgz#3d9877899e6a53efc0160504cde15f82e6f061d5" + integrity sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ== + is-number@^7.0.0: version "7.0.0" resolved "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz" @@ -2421,6 +2781,15 @@ istanbul-reports@^3.1.3: html-escaper "^2.0.0" istanbul-lib-report "^3.0.0" +jackspeak@^2.3.5: + version "2.3.6" + resolved "https://registry.yarnpkg.com/jackspeak/-/jackspeak-2.3.6.tgz#647ecc472238aee4b06ac0e461acc21a8c505ca8" + integrity sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ== + dependencies: + "@isaacs/cliui" "^8.0.2" + optionalDependencies: + "@pkgjs/parseargs" "^0.11.0" + jest-changed-files@^29.5.0: version "29.5.0" resolved "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-29.5.0.tgz" @@ -2853,6 +3222,15 @@ jsonc-parser@^3.2.0: resolved "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.2.0.tgz" integrity sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w== +jsonfile@^6.0.1: + version "6.1.0" + resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-6.1.0.tgz#bc55b2634793c679ec6403094eb13698a6ec0aae" + integrity sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ== + dependencies: + universalify "^2.0.0" + optionalDependencies: + graceful-fs "^4.1.6" + jsonist@~2.1.0: version "2.1.2" resolved "https://registry.npmjs.org/jsonist/-/jsonist-2.1.2.tgz" @@ -2920,6 +3298,11 @@ locate-path@^6.0.0: dependencies: p-locate "^5.0.0" +lodash.isplainobject@^4.0.6: + version "4.0.6" + resolved "https://registry.yarnpkg.com/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz#7c526a52d89b45c45cc690b88163be0497f550cb" + integrity sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA== + lodash.memoize@4.x: version "4.1.2" resolved "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz" @@ -2945,6 +3328,11 @@ lodash.padstart@^4.1.0: resolved "https://registry.npmjs.org/lodash.padstart/-/lodash.padstart-4.6.1.tgz" integrity sha512-sW73O6S8+Tg66eY56DBk85aQzzUJDtpoXFBgELMd5P/SotAguo+1kYO6RuYgXxA4HJH3LFTFPASX6ET6bjfriw== +lodash.uniq@^4.5.0: + version "4.5.0" + resolved "https://registry.yarnpkg.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773" + integrity sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ== + lru-cache@^5.1.1: version "5.1.1" resolved "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz" @@ -2959,6 +3347,16 @@ lru-cache@^6.0.0: dependencies: yallist "^4.0.0" +lru-cache@^7.7.1: + version "7.18.3" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-7.18.3.tgz#f793896e0fd0e954a59dfdd82f0773808df6aa89" + integrity sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA== + +"lru-cache@^9.1.1 || ^10.0.0": + version "10.0.1" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-10.0.1.tgz#0a3be479df549cca0e5d693ac402ff19537a6b7a" + integrity sha512-IJ4uwUTi2qCccrioU6g9g/5rvvVl13bsdczUUcqbciD9iLr095yj8DQKdObriEvuNSx325N1rV1O0sJFszx75g== + lunr@^2.3.9: version "2.3.9" resolved "https://registry.npmjs.org/lunr/-/lunr-2.3.9.tgz" @@ -2976,6 +3374,27 @@ make-error@1.x: resolved "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz" integrity sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw== +make-fetch-happen@^11.0.3: + version "11.1.1" + resolved "https://registry.yarnpkg.com/make-fetch-happen/-/make-fetch-happen-11.1.1.tgz#85ceb98079584a9523d4bf71d32996e7e208549f" + integrity sha512-rLWS7GCSTcEujjVBs2YqG7Y4643u8ucvCJeSRqiLYhesrDuzeuFIk37xREzAsfQaqzl8b9rNCE4m6J8tvX4Q8w== + dependencies: + agentkeepalive "^4.2.1" + cacache "^17.0.0" + http-cache-semantics "^4.1.1" + http-proxy-agent "^5.0.0" + https-proxy-agent "^5.0.0" + is-lambda "^1.0.1" + lru-cache "^7.7.1" + minipass "^5.0.0" + minipass-fetch "^3.0.0" + minipass-flush "^1.0.5" + minipass-pipeline "^1.2.4" + negotiator "^0.6.3" + promise-retry "^2.0.1" + socks-proxy-agent "^7.0.0" + ssri "^10.0.0" + makeerror@1.0.12: version "1.0.12" resolved "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz" @@ -2988,6 +3407,13 @@ marked@^4.3.0: resolved "https://registry.npmjs.org/marked/-/marked-4.3.0.tgz" integrity sha512-PRsaiG84bK+AMvxziE/lCFss8juXjNaWzVbN5tXAm4XjeaS9NAHhop+PjQxz2A9h8Q4M/xGmzP8vqNwy6JeK0A== +memory-stream@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/memory-stream/-/memory-stream-1.0.0.tgz#481dfd259ccdf57b03ec2c9632960044180e73c2" + integrity sha512-Wm13VcsPIMdG96dzILfij09PvuS3APtcKNh7M28FsCA/w6+1mjR7hhPmfFNoilX9xU7wTdhsH5lJAm6XNzdtww== + dependencies: + readable-stream "^3.4.0" + merge-stream@^2.0.0: version "2.0.0" resolved "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz" @@ -3028,25 +3454,64 @@ mimic-response@^1.0.0: resolved "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz" integrity sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ== -minimatch@^3.0.4, minimatch@^3.0.5, minimatch@^3.1.1, minimatch@^3.1.2: +minimatch@3, 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.npmjs.org/minimatch/-/minimatch-3.1.2.tgz" integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== dependencies: brace-expansion "^1.1.7" -minimatch@^9.0.0: +minimatch@^9.0.0, minimatch@^9.0.1: version "9.0.3" - resolved "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-9.0.3.tgz#a6e00c3de44c3a542bfaae70abfc22420a6da825" integrity sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg== dependencies: brace-expansion "^2.0.1" -minimist@^1.1.2, minimist@^1.2.0, minimist@^1.2.3, minimist@^1.2.5, minimist@^1.2.6: +minimist@^1.2.0, minimist@^1.2.3, minimist@^1.2.5, minimist@^1.2.6, minimist@^1.2.8: version "1.2.8" resolved "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz" integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA== +minipass-collect@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/minipass-collect/-/minipass-collect-1.0.2.tgz#22b813bf745dc6edba2576b940022ad6edc8c617" + integrity sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA== + dependencies: + minipass "^3.0.0" + +minipass-fetch@^3.0.0: + version "3.0.4" + resolved "https://registry.yarnpkg.com/minipass-fetch/-/minipass-fetch-3.0.4.tgz#4d4d9b9f34053af6c6e597a64be8e66e42bf45b7" + integrity sha512-jHAqnA728uUpIaFm7NWsCnqKT6UqZz7GcI/bDpPATuwYyKwJwW0remxSCxUlKiEty+eopHGa3oc8WxgQ1FFJqg== + dependencies: + minipass "^7.0.3" + minipass-sized "^1.0.3" + minizlib "^2.1.2" + optionalDependencies: + encoding "^0.1.13" + +minipass-flush@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/minipass-flush/-/minipass-flush-1.0.5.tgz#82e7135d7e89a50ffe64610a787953c4c4cbb373" + integrity sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw== + dependencies: + minipass "^3.0.0" + +minipass-pipeline@^1.2.4: + version "1.2.4" + resolved "https://registry.yarnpkg.com/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz#68472f79711c084657c067c5c6ad93cddea8214c" + integrity sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A== + dependencies: + minipass "^3.0.0" + +minipass-sized@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/minipass-sized/-/minipass-sized-1.0.3.tgz#70ee5a7c5052070afacfbc22977ea79def353b70" + integrity sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g== + dependencies: + minipass "^3.0.0" + minipass@^2.6.0, minipass@^2.9.0: version "2.9.0" resolved "https://registry.npmjs.org/minipass/-/minipass-2.9.0.tgz" @@ -3055,6 +3520,23 @@ minipass@^2.6.0, minipass@^2.9.0: safe-buffer "^5.1.2" yallist "^3.0.0" +minipass@^3.0.0: + version "3.3.6" + resolved "https://registry.yarnpkg.com/minipass/-/minipass-3.3.6.tgz#7bba384db3a1520d18c9c0e5251c3444e95dd94a" + integrity sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw== + dependencies: + yallist "^4.0.0" + +minipass@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/minipass/-/minipass-5.0.0.tgz#3e9788ffb90b694a5d0ec94479a45b5d8738133d" + integrity sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ== + +"minipass@^5.0.0 || ^6.0.2 || ^7.0.0", minipass@^7.0.3: + version "7.0.4" + resolved "https://registry.yarnpkg.com/minipass/-/minipass-7.0.4.tgz#dbce03740f50a4786ba994c1fb908844d27b038c" + integrity sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ== + minizlib@^1.3.3: version "1.3.3" resolved "https://registry.npmjs.org/minizlib/-/minizlib-1.3.3.tgz" @@ -3062,6 +3544,14 @@ minizlib@^1.3.3: dependencies: minipass "^2.9.0" +minizlib@^2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-2.1.2.tgz#e90d3466ba209b932451508a11ce3d3632145931" + integrity sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg== + dependencies: + minipass "^3.0.0" + yallist "^4.0.0" + mkdirp-classic@^0.5.2, mkdirp-classic@^0.5.3: version "0.5.3" resolved "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz" @@ -3074,12 +3564,22 @@ mkdirp-classic@^0.5.2, mkdirp-classic@^0.5.3: dependencies: minimist "^1.2.6" +ms@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" + integrity sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A== + ms@2.1.2: version "2.1.2" resolved "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz" integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== -napi-build-utils@^1.0.1: +ms@^2.0.0: + version "2.1.3" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" + integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== + +napi-build-utils@^1.0.1, napi-build-utils@^1.0.2: version "1.0.2" resolved "https://registry.npmjs.org/napi-build-utils/-/napi-build-utils-1.0.2.tgz" integrity sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg== @@ -3094,11 +3594,21 @@ natural-compare@^1.4.0: resolved "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz" integrity sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw== +negotiator@^0.6.3: + version "0.6.3" + resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.3.tgz#58e323a72fedc0d6f9cd4d31fe49f51479590ccd" + integrity sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg== + neo-async@^2.6.2: version "2.6.2" resolved "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz" integrity sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw== +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== + node-abi@^3.3.0: version "3.46.0" resolved "https://registry.npmjs.org/node-abi/-/node-abi-3.46.0.tgz" @@ -3106,37 +3616,68 @@ node-abi@^3.3.0: dependencies: semver "^7.3.5" -node-gyp@^3.0.3: - version "3.8.0" - resolved "https://registry.npmjs.org/node-gyp/-/node-gyp-3.8.0.tgz" - integrity sha512-3g8lYefrRRzvGeSowdJKAKyks8oUpLEd/DyPV4eMhVlhJ0aNaZqIrNUIPuEWWTAoPqyFkfGrM67MC69baqn6vA== +node-abi@^3.47.0: + version "3.51.0" + resolved "https://registry.yarnpkg.com/node-abi/-/node-abi-3.51.0.tgz#970bf595ef5a26a271307f8a4befa02823d4e87d" + integrity sha512-SQkEP4hmNWjlniS5zdnfIXTk1x7Ome85RDzHlTbBtzE97Gfwz/Ipw4v/Ryk20DWIy3yCNVLVlGKApCnmvYoJbA== + dependencies: + semver "^7.3.5" + +node-api-headers@^0.0.2: + version "0.0.2" + resolved "https://registry.yarnpkg.com/node-api-headers/-/node-api-headers-0.0.2.tgz#31f4c6c2750b63e598128e76a60aefca6d76ac5d" + integrity sha512-YsjmaKGPDkmhoNKIpkChtCsPVaRE0a274IdERKnuc/E8K1UJdBZ4/mvI006OijlQZHCfpRNOH3dfHQs92se8gg== + +node-gyp@^9.4.0: + version "9.4.0" + resolved "https://registry.yarnpkg.com/node-gyp/-/node-gyp-9.4.0.tgz#2a7a91c7cba4eccfd95e949369f27c9ba704f369" + integrity sha512-dMXsYP6gc9rRbejLXmTbVRYjAHw7ppswsKyMxuxJxxOHzluIO1rGp9TOQgjFJ+2MCqcOcQTOPB/8Xwhr+7s4Eg== + dependencies: + env-paths "^2.2.0" + exponential-backoff "^3.1.1" + glob "^7.1.4" + graceful-fs "^4.2.6" + make-fetch-happen "^11.0.3" + nopt "^6.0.0" + npmlog "^6.0.0" + rimraf "^3.0.2" + semver "^7.3.5" + tar "^6.1.2" + which "^2.0.2" + +node-int64@^0.4.0: + version "0.4.0" + resolved "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz" + integrity sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw== + +node-ninja@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/node-ninja/-/node-ninja-1.0.2.tgz#20a09e57b92e2df591993d4bf098ac3e727062b6" + integrity sha512-wMtWsG2QZI1Z5V7GciX9OI2DVT0PuDRIDQfe3L3rJsQ1qN1Gm3QQhoNtb4PMRi7gq4ByvEIYtPwHC7YbEf5yxw== dependencies: fstream "^1.0.0" - glob "^7.0.3" + glob "3 || 4 || 5 || 6 || 7" graceful-fs "^4.1.2" + minimatch "3" mkdirp "^0.5.0" nopt "2 || 3" - npmlog "0 || 1 || 2 || 3 || 4" + npmlog "0 || 1 || 2" osenv "0" - request "^2.87.0" + path-array "^1.0.0" + request "2" rimraf "2" - semver "~5.3.0" + semver "2.x || 3.x || 4 || 5" tar "^2.0.0" which "1" -node-int64@^0.4.0: - version "0.4.0" - resolved "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz" - integrity sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw== - node-releases@^2.0.13: version "2.0.13" resolved "https://registry.npmjs.org/node-releases/-/node-releases-2.0.13.tgz" integrity sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ== -noop-logger@^0.1.0: +noop-logger@^0.1.1: version "0.1.1" - resolved "https://registry.npmjs.org/noop-logger/-/noop-logger-0.1.1.tgz" + resolved "https://registry.yarnpkg.com/noop-logger/-/noop-logger-0.1.1.tgz#94a2b1633c4f1317553007d8966fd0e841b6a4c2" integrity sha512-6kM8CLXvuW5crTxsAtva2YLrRrDaiTIkIePWs9moLHqbFWT94WpNFjwS/5dfLfECg5i/lkmw3aoqVidxt23TEQ== "nopt@2 || 3": @@ -3146,11 +3687,25 @@ noop-logger@^0.1.0: dependencies: abbrev "1" +nopt@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/nopt/-/nopt-6.0.0.tgz#245801d8ebf409c6df22ab9d95b65e1309cdb16d" + integrity sha512-ZwLpbTgdhuZUnZzjd7nb1ZV+4DoiC6/sfiVKok72ym/4Tlf+DFdlHYmT2JPmcNNWV6Pi3SDf1kT+A4r9RTuT9g== + dependencies: + abbrev "^1.0.0" + normalize-path@^3.0.0: version "3.0.0" resolved "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz" integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== +npm-path@^2.0.2: + version "2.0.4" + resolved "https://registry.yarnpkg.com/npm-path/-/npm-path-2.0.4.tgz#c641347a5ff9d6a09e4d9bce5580c4f505278e64" + integrity sha512-IFsj0R9C7ZdR5cP+ET342q77uSRdtWOlWpih5eC+lu29tIDbNEgDbzgVJ5UFvYHWhxDZ5TFkJafFioO0pPQjCw== + dependencies: + which "^1.2.10" + npm-run-path@^4.0.1: version "4.0.1" resolved "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz" @@ -3158,6 +3713,24 @@ npm-run-path@^4.0.1: dependencies: path-key "^3.0.0" +npm-which@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/npm-which/-/npm-which-3.0.1.tgz#9225f26ec3a285c209cae67c3b11a6b4ab7140aa" + integrity sha512-CM8vMpeFQ7MAPin0U3wzDhSGV0hMHNwHU0wjo402IVizPDrs45jSfSuoC+wThevY88LQti8VvaAnqYAeVy3I1A== + dependencies: + commander "^2.9.0" + npm-path "^2.0.2" + which "^1.2.10" + +"npmlog@0 || 1 || 2": + version "2.0.4" + resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-2.0.4.tgz#98b52530f2514ca90d09ec5b22c8846722375692" + integrity sha512-DaL6RTb8Qh4tMe2ttPT1qWccETy2Vi5/8p+htMpLBeXJTr2CAqnF5WQtSP2eFpvaNbhLZ5uilDb98mRm4Q+lZQ== + dependencies: + ansi "~0.3.1" + are-we-there-yet "~1.1.2" + gauge "~1.2.5" + "npmlog@0 || 1 || 2 || 3 || 4": version "4.1.2" resolved "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz" @@ -3168,20 +3741,50 @@ npm-run-path@^4.0.1: gauge "~2.7.3" set-blocking "~2.0.0" -npmlog@^2.0.0: - version "2.0.4" - resolved "https://registry.npmjs.org/npmlog/-/npmlog-2.0.4.tgz" - integrity sha512-DaL6RTb8Qh4tMe2ttPT1qWccETy2Vi5/8p+htMpLBeXJTr2CAqnF5WQtSP2eFpvaNbhLZ5uilDb98mRm4Q+lZQ== +npmlog@^6.0.0, npmlog@^6.0.2: + version "6.0.2" + resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-6.0.2.tgz#c8166017a42f2dea92d6453168dd865186a70830" + integrity sha512-/vBvz5Jfr9dT/aFWd0FIRf+T/Q2WBsLENygUaFUqstqsycmZAP/t5BvFJTK0viFmSUxiUKTUplWy5vt+rvKIxg== dependencies: - ansi "~0.3.1" - are-we-there-yet "~1.1.2" - gauge "~1.2.5" + are-we-there-yet "^3.0.0" + console-control-strings "^1.1.0" + gauge "^4.0.3" + set-blocking "^2.0.0" + +npmlog@^7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-7.0.1.tgz#7372151a01ccb095c47d8bf1d0771a4ff1f53ac8" + integrity sha512-uJ0YFk/mCQpLBt+bxN88AKd+gyqZvZDbtiNxk6Waqcj2aPRyfVx8ITawkyQynxUagInjdYT1+qj4NfA5KJJUxg== + dependencies: + are-we-there-yet "^4.0.0" + console-control-strings "^1.1.0" + gauge "^5.0.0" + set-blocking "^2.0.0" number-is-nan@^1.0.0: version "1.0.1" resolved "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz" integrity sha512-4jbtZXNAsfZbAHiiqjLPBiCl16dES1zI4Hpzzxw61Tk+loF+sBDBKx1ICKKKwIqQ7M0mFn1TmkN7euSncWgHiQ== +nw-gyp@^3.6.6: + version "3.6.6" + resolved "https://registry.yarnpkg.com/nw-gyp/-/nw-gyp-3.6.6.tgz#0231d603d09665053ea48843d6888d13a4b92fb1" + integrity sha512-FeMnpFQWtEEMJ1BrSfK3T62CjuxaNl0mNHqdrxFcIF5XQdC3gaZYW4n+77lQLk8PE3Upfknkl9VRo6gDKJIHuA== + dependencies: + fstream "^1.0.0" + glob "^7.0.3" + graceful-fs "^4.1.2" + minimatch "^3.0.2" + mkdirp "^0.5.0" + nopt "2 || 3" + npmlog "0 || 1 || 2 || 3 || 4" + osenv "0" + request "2" + rimraf "2" + semver "~5.3.0" + tar "^2.0.0" + which "1" + oauth-sign@~0.9.0: version "0.9.0" resolved "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz" @@ -3218,7 +3821,7 @@ optionator@^0.9.3: prelude-ls "^1.2.1" type-check "^0.4.0" -os-homedir@^1.0.0, os-homedir@^1.0.1: +os-homedir@^1.0.0: version "1.0.2" resolved "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz" integrity sha512-B5JU3cabzk8c67mRRd3ECmROafjYMXbuzlwtqdM8IbS8ktlTix8aFGb2bAGKrSRIlnfKwovGUUr72JUPyOb6kQ== @@ -3264,6 +3867,13 @@ p-locate@^5.0.0: dependencies: p-limit "^3.0.2" +p-map@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/p-map/-/p-map-4.0.0.tgz#bb2f95a5eda2ec168ec9274e06a747c3e2904d2b" + integrity sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ== + dependencies: + aggregate-error "^3.0.0" + p-try@^2.0.0: version "2.2.0" resolved "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz" @@ -3286,6 +3896,13 @@ parse-json@^5.2.0: json-parse-even-better-errors "^2.3.0" lines-and-columns "^1.1.6" +path-array@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/path-array/-/path-array-1.0.1.tgz#7e2f0f35f07a2015122b868b7eac0eb2c4fec271" + integrity sha512-teWG2rJTJJZi2kINKOsHcdIuHP7jy3D7pAsVgdhxMq8kaL2RnS5sg7YTlrClMVCIItcVbPTPI6eMBEoNxYahLA== + dependencies: + array-index "^1.0.0" + path-exists@^4.0.0: version "4.0.0" resolved "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz" @@ -3306,6 +3923,14 @@ path-parse@^1.0.7: resolved "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz" integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== +path-scurry@^1.10.1: + version "1.10.1" + resolved "https://registry.yarnpkg.com/path-scurry/-/path-scurry-1.10.1.tgz#9ba6bf5aa8500fe9fd67df4f0d9483b2b0bfc698" + integrity sha512-MkhCqzzBEpPvxxQ71Md0b1Kk51W01lrYvlMzSUaIzNsODdd7mqhiimSZlr+VegAz5Z6Vzt9Xg2ttE//XBhH3EQ== + dependencies: + lru-cache "^9.1.1 || ^10.0.0" + minipass "^5.0.0 || ^6.0.2 || ^7.0.0" + path-type@^4.0.0: version "4.0.0" resolved "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz" @@ -3356,27 +3981,30 @@ prebuild-install@^7.1.1: tar-fs "^2.0.0" tunnel-agent "^0.6.0" -prebuild@^3.0.3: - version "3.0.3" - resolved "https://registry.npmjs.org/prebuild/-/prebuild-3.0.3.tgz" - integrity sha512-QGZMWEfs2zjsQ1Y9Lv4dwZ4EoE93E5UDxHKGc1iSBW8TvT4nM6Dc2DbhInDNlDJ/oGtFpoLwkQKivaoBXs+40g== +prebuild@^12.1.0: + version "12.1.0" + resolved "https://registry.yarnpkg.com/prebuild/-/prebuild-12.1.0.tgz#c3c8f74406a1c33c0e86fd329182c3bbc85ef4d9" + integrity sha512-7VxOp28zmb68lVMAqNMYr8jyIIHdRp52MSki01jAsdgDlnQYsVNhRpC9nHoax2wVhV/fnbyUUb1u57qUjrbbEg== dependencies: - async "^1.4.0" - expand-template "^1.0.0" - ghreleases "^1.0.2" + cmake-js "^7.2.1" + detect-libc "^2.0.2" + each-series-async "^1.0.1" + execspawn "^1.0.1" + ghreleases "^3.0.2" github-from-package "0.0.0" - minimist "^1.1.2" - mkdirp "^0.5.1" - node-gyp "^3.0.3" - noop-logger "^0.1.0" - npmlog "^2.0.0" - os-homedir "^1.0.1" - pump "^1.0.0" - rc "^1.0.3" - simple-get "^1.4.2" - tar-fs "^1.7.0" - tar-stream "^1.2.1" - xtend "^4.0.1" + glob "^7.2.3" + minimist "^1.2.8" + napi-build-utils "^1.0.2" + node-abi "^3.47.0" + node-gyp "^9.4.0" + node-ninja "^1.0.2" + noop-logger "^0.1.1" + npm-which "^3.0.1" + npmlog "^7.0.1" + nw-gyp "^3.6.6" + rc "^1.2.8" + run-waterfall "^1.1.7" + tar-stream "^3.1.6" prelude-ls@^1.2.1: version "1.2.1" @@ -3402,6 +4030,19 @@ process-nextick-args@~2.0.0: resolved "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz" integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== +process@^0.11.10: + version "0.11.10" + resolved "https://registry.yarnpkg.com/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182" + integrity sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A== + +promise-retry@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/promise-retry/-/promise-retry-2.0.1.tgz#ff747a13620ab57ba688f5fc67855410c370da22" + integrity sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g== + dependencies: + err-code "^2.0.2" + retry "^0.12.0" + prompts@^2.0.1: version "2.4.2" resolved "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz" @@ -3410,19 +4051,16 @@ prompts@^2.0.1: kleur "^3.0.3" sisteransi "^1.0.5" +proxy-from-env@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/proxy-from-env/-/proxy-from-env-1.1.0.tgz#e102f16ca355424865755d2c9e8ea4f24d58c3e2" + integrity sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg== + psl@^1.1.33: version "1.9.0" resolved "https://registry.yarnpkg.com/psl/-/psl-1.9.0.tgz#d0df2a137f00794565fcaf3b2c00cd09f8d5a5a7" integrity sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag== -pump@^1.0.0: - version "1.0.3" - resolved "https://registry.npmjs.org/pump/-/pump-1.0.3.tgz" - integrity sha512-8k0JupWme55+9tCVE+FS5ULT3K6AbgqrGa58lTT49RpyfwwcGedHqaC5LlQNdEAumn/wFsu6aPwkuPMioy8kqw== - dependencies: - end-of-stream "^1.1.0" - once "^1.3.1" - pump@^3.0.0: version "3.0.0" resolved "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz" @@ -3456,6 +4094,11 @@ queue-microtask@^1.2.2: resolved "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz" integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== +queue-tick@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/queue-tick/-/queue-tick-1.0.1.tgz#f6f07ac82c1fd60f82e098b417a80e52f1f4c142" + integrity sha512-kJt5qhMxoszgU/62PLP1CJytzd2NKetjSRnyuj31fDd3Rlcz3fzlFdFLD1SItunPwyqEOkca6GbV612BWfaBag== + randombytes@^2.1.0: version "2.1.0" resolved "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz" @@ -3463,7 +4106,7 @@ randombytes@^2.1.0: dependencies: safe-buffer "^5.1.0" -rc@^1.0.3, rc@^1.2.7: +rc@^1.2.7, rc@^1.2.8: version "1.2.8" resolved "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz" integrity sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw== @@ -3488,7 +4131,7 @@ react-is@^18.0.0: isarray "0.0.1" string_decoder "~0.10.x" -readable-stream@^2.0.6, readable-stream@^2.3.0, readable-stream@^2.3.5: +readable-stream@^2.0.6: version "2.3.8" resolved "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz" integrity sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA== @@ -3501,7 +4144,7 @@ readable-stream@^2.0.6, readable-stream@^2.3.0, readable-stream@^2.3.5: string_decoder "~1.1.1" util-deprecate "~1.0.1" -readable-stream@^3.0.1, readable-stream@^3.1.1, readable-stream@^3.4.0: +readable-stream@^3.0.1, readable-stream@^3.1.1, readable-stream@^3.4.0, readable-stream@^3.6.0: version "3.6.2" resolved "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz" integrity sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA== @@ -3510,6 +4153,17 @@ readable-stream@^3.0.1, readable-stream@^3.1.1, readable-stream@^3.4.0: string_decoder "^1.1.1" util-deprecate "^1.0.1" +readable-stream@^4.1.0: + version "4.4.2" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-4.4.2.tgz#e6aced27ad3b9d726d8308515b9a1b98dc1b9d13" + integrity sha512-Lk/fICSyIhodxy1IDK2HazkeGjSmezAWX2egdtJnYhtzKEsBPJowlI6F6LPb5tqIQILrMbx22S5o3GuJavPusA== + dependencies: + abort-controller "^3.0.0" + buffer "^6.0.3" + events "^3.3.0" + process "^0.11.10" + string_decoder "^1.3.0" + readable-stream@~1.1.9: version "1.1.14" resolved "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz" @@ -3532,9 +4186,9 @@ reflect-metadata@^0.1.13: resolved "https://registry.npmjs.org/reflect-metadata/-/reflect-metadata-0.1.13.tgz" integrity sha512-Ts1Y/anZELhSsjMcU605fU9RE4Oi3p5ORujwbIKXfWa+0Zxs510Qrmrce5/Jowq3cHSZSJqBjypxmHarc+vEWg== -request@^2.87.0: +request@2: version "2.88.2" - resolved "https://registry.npmjs.org/request/-/request-2.88.2.tgz" + resolved "https://registry.yarnpkg.com/request/-/request-2.88.2.tgz#d73c918731cb5a87da047e207234146f664d12b3" integrity sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw== dependencies: aws-sign2 "~0.7.0" @@ -3599,6 +4253,11 @@ resolve@^1.20.0: path-parse "^1.0.7" supports-preserve-symlinks-flag "^1.0.0" +retry@^0.12.0: + version "0.12.0" + resolved "https://registry.yarnpkg.com/retry/-/retry-0.12.0.tgz#1b42a6266a21f07421d1b0b54b7dc167b01c013b" + integrity sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow== + reusify@^1.0.4: version "1.0.4" resolved "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz" @@ -3625,17 +4284,22 @@ run-parallel@^1.1.9: dependencies: queue-microtask "^1.2.2" +run-waterfall@^1.1.7: + version "1.1.7" + resolved "https://registry.yarnpkg.com/run-waterfall/-/run-waterfall-1.1.7.tgz#ae368b549b2f5171f86c2924492cab3352a6e9c5" + integrity sha512-iFPgh7SatHXOG1ClcpdwHI63geV3Hc/iL6crGSyBlH2PY7Rm/za+zoKz6FfY/Qlw5K7JwSol8pseO8fN6CMhhQ== + safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.2, safe-buffer@^5.2.1, safe-buffer@~5.2.0: version "5.2.1" resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz" integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== -safe-buffer@^5.1.1, safe-buffer@~5.1.0, safe-buffer@~5.1.1: +safe-buffer@~5.1.0, safe-buffer@~5.1.1: version "5.1.2" resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz" integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== -safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@~2.1.0: +"safer-buffer@>= 2.1.2 < 3.0.0", safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@~2.1.0: version "2.1.2" resolved "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz" integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== @@ -3649,7 +4313,7 @@ schema-utils@^3.1.1, schema-utils@^3.2.0: ajv "^6.12.5" ajv-keywords "^3.5.2" -semver@^6.3.0, semver@^6.3.1, semver@^7.3.5, semver@^7.3.7, semver@^7.5.2, semver@^7.5.3, semver@~5.3.0: +"semver@2.x || 3.x || 4 || 5", semver@^6.3.0, semver@^6.3.1, semver@^7.3.5, semver@^7.3.7, semver@^7.3.8, semver@^7.5.2, semver@^7.5.3, semver@~5.3.0: version "7.5.4" resolved "https://registry.yarnpkg.com/semver/-/semver-7.5.4.tgz#483986ec4ed38e1c6c48c34894a9182dbff68a6e" integrity sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA== @@ -3663,7 +4327,7 @@ serialize-javascript@^6.0.1: dependencies: randombytes "^2.1.0" -set-blocking@~2.0.0: +set-blocking@^2.0.0, set-blocking@~2.0.0: version "2.0.0" resolved "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz" integrity sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw== @@ -3702,12 +4366,17 @@ signal-exit@^3.0.0, signal-exit@^3.0.3, signal-exit@^3.0.7: resolved "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz" integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== +signal-exit@^4.0.1: + version "4.1.0" + resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-4.1.0.tgz#952188c1cbd546070e2dd20d0f41c0ae0530cb04" + integrity sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw== + simple-concat@^1.0.0: version "1.0.1" resolved "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz" integrity sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q== -simple-get@^1.4.2, simple-get@^2.8.2, simple-get@^4.0.0: +simple-get@^2.8.2, simple-get@^4.0.0: version "2.8.2" resolved "https://registry.npmjs.org/simple-get/-/simple-get-2.8.2.tgz" integrity sha512-Ijd/rV5o+mSBBs4F/x9oDPtTx9Zb6X9brmnXvMW4J7IR15ngi9q5xxqWBKU744jTZiaXtxaPL7uHG6vtN8kUkw== @@ -3731,6 +4400,28 @@ slash@^3.0.0: resolved "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz" integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== +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== + +socks-proxy-agent@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/socks-proxy-agent/-/socks-proxy-agent-7.0.0.tgz#dc069ecf34436621acb41e3efa66ca1b5fed15b6" + integrity sha512-Fgl0YPZ902wEsAyiQ+idGd1A7rSFx/ayC1CQVMw5P+EQx2V0SgpGtf6OKFhVjPflPUl9YMmEOnmfjCdMUsygww== + dependencies: + agent-base "^6.0.2" + debug "^4.3.3" + socks "^2.6.2" + +socks@^2.6.2: + version "2.7.1" + resolved "https://registry.yarnpkg.com/socks/-/socks-2.7.1.tgz#d8e651247178fde79c0663043e07240196857d55" + integrity sha512-7maUZy1N7uo6+WVEX6psASxtNlKaNVMlGQKkG/63nEDdLOWNbiUMoLK7X4uYoLhQstau72mLgfEWcXcwsaHbYQ== + dependencies: + ip "^2.0.0" + smart-buffer "^4.2.0" + source-map-support@0.5.13: version "0.5.13" resolved "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.13.tgz" @@ -3772,6 +4463,13 @@ sshpk@^1.7.0: safer-buffer "^2.0.2" tweetnacl "~0.14.0" +ssri@^10.0.0: + version "10.0.5" + resolved "https://registry.yarnpkg.com/ssri/-/ssri-10.0.5.tgz#e49efcd6e36385196cb515d3a2ad6c3f0265ef8c" + integrity sha512-bSf16tAFkGeRlUNDjXu8FzaMQt6g2HZJrun7mtMbIPOddxt3GLMSz5VWUWcqTJUPfLEaDIepGxv+bYQW49596A== + dependencies: + minipass "^7.0.3" + stack-utils@^2.0.3: version "2.0.6" resolved "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz" @@ -3779,6 +4477,14 @@ stack-utils@^2.0.3: dependencies: escape-string-regexp "^2.0.0" +streamx@^2.15.0: + version "2.15.1" + resolved "https://registry.yarnpkg.com/streamx/-/streamx-2.15.1.tgz#396ad286d8bc3eeef8f5cea3f029e81237c024c6" + integrity sha512-fQMzy2O/Q47rgwErk/eGeLu/roaFWV0jVsogDmrszM9uIw8L5OA+t+V93MgYlufNptfjmYR1tOMWhei/Eh7TQA== + dependencies: + fast-fifo "^1.1.0" + queue-tick "^1.0.1" + string-length@^4.0.1: version "4.0.2" resolved "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz" @@ -3787,6 +4493,15 @@ string-length@^4.0.1: char-regex "^1.0.2" strip-ansi "^6.0.0" +"string-width-cjs@npm:string-width@^4.2.0": + version "4.2.3" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" + integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== + dependencies: + emoji-regex "^8.0.0" + is-fullwidth-code-point "^3.0.0" + strip-ansi "^6.0.1" + string-width@^1.0.1, "string-width@^1.0.2 || 2 || 3 || 4": version "1.0.2" resolved "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz" @@ -3805,7 +4520,16 @@ string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: is-fullwidth-code-point "^3.0.0" strip-ansi "^6.0.1" -string_decoder@^1.1.1: +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" + integrity sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA== + dependencies: + eastasianwidth "^0.2.0" + emoji-regex "^9.2.2" + strip-ansi "^7.0.1" + +string_decoder@^1.1.1, string_decoder@^1.3.0: version "1.3.0" resolved "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz" integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== @@ -3824,6 +4548,13 @@ string_decoder@~1.1.1: dependencies: safe-buffer "~5.1.0" +"strip-ansi-cjs@npm:strip-ansi@^6.0.1": + version "6.0.1" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" + integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== + dependencies: + ansi-regex "^5.0.1" + strip-ansi@^3.0.0, strip-ansi@^3.0.1: version "3.0.1" resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz" @@ -3838,6 +4569,13 @@ strip-ansi@^6.0.0, strip-ansi@^6.0.1: dependencies: ansi-regex "^5.0.1" +strip-ansi@^7.0.1: + version "7.1.0" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-7.1.0.tgz#d5b6568ca689d8561370b0707685d22434faff45" + integrity sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ== + dependencies: + ansi-regex "^6.0.1" + strip-bom@^4.0.0: version "4.0.0" resolved "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz" @@ -3889,16 +4627,6 @@ tapable@^2.1.1, tapable@^2.2.0: resolved "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz" integrity sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ== -tar-fs@^1.7.0: - version "1.16.3" - resolved "https://registry.npmjs.org/tar-fs/-/tar-fs-1.16.3.tgz" - integrity sha512-NvCeXpYx7OsmOh8zIOP/ebG55zZmxLE0etfWRbWok+q2Qo8x/vOR/IJT1taADXPe+jsiu9axDb3X4B+iIgNlKw== - dependencies: - chownr "^1.0.1" - mkdirp "^0.5.1" - pump "^1.0.0" - tar-stream "^1.1.2" - tar-fs@^2.0.0: version "2.1.1" resolved "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.1.tgz" @@ -3909,19 +4637,6 @@ tar-fs@^2.0.0: pump "^3.0.0" tar-stream "^2.1.4" -tar-stream@^1.1.2, tar-stream@^1.2.1: - version "1.6.2" - resolved "https://registry.npmjs.org/tar-stream/-/tar-stream-1.6.2.tgz" - integrity sha512-rzS0heiNf8Xn7/mpdSVVSMAWAoy9bfb1WOTYC78Z0UQKeKa/CWS8FOq0lKGNa8DWKAn9gxjCvMLYc5PGXYlK2A== - dependencies: - bl "^1.0.0" - buffer-alloc "^1.2.0" - end-of-stream "^1.0.0" - fs-constants "^1.0.0" - readable-stream "^2.3.0" - to-buffer "^1.1.1" - xtend "^4.0.0" - tar-stream@^2.1.4: version "2.2.0" resolved "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz" @@ -3933,7 +4648,16 @@ tar-stream@^2.1.4: inherits "^2.0.3" readable-stream "^3.1.1" -tar@^2.0.0, tar@^4.4.19: +tar-stream@^3.1.6: + version "3.1.6" + resolved "https://registry.yarnpkg.com/tar-stream/-/tar-stream-3.1.6.tgz#6520607b55a06f4a2e2e04db360ba7d338cc5bab" + integrity sha512-B/UyjYwPpMBv+PaFSWAmtYjwdrlEaZQEhMIBFNC5oEG8lpiW8XjcSdmEaClj28ArfKScKHs2nshz3k2le6crsg== + dependencies: + b4a "^1.6.4" + fast-fifo "^1.2.0" + streamx "^2.15.0" + +tar@^2.0.0, tar@^4.4.19, tar@^6.1.11, tar@^6.1.2: version "4.4.19" resolved "https://registry.npmjs.org/tar/-/tar-4.4.19.tgz" integrity sha512-a20gEsvHnWe0ygBY8JbxoM4w3SJdhc7ZAuxkLqh+nvNQN2IOt0B5lLgM490X5Hl8FF0dl0tOf2ewFYAlIFgzVA== @@ -3994,11 +4718,6 @@ tmpl@1.0.5: resolved "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz" integrity sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw== -to-buffer@^1.1.1: - version "1.1.1" - resolved "https://registry.npmjs.org/to-buffer/-/to-buffer-1.1.1.tgz" - integrity sha512-lx9B5iv7msuFYE3dytT+KE5tap+rNYw+K4jVkb9R/asAb+pbBSM17jtunHplhBe6RRJdZx3Pn2Jph24O32mOVg== - to-fast-properties@^2.0.0: version "2.0.0" resolved "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz" @@ -4081,6 +4800,16 @@ type-fest@^0.21.3: resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz" integrity sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w== +type@^1.0.1: + version "1.2.0" + resolved "https://registry.yarnpkg.com/type/-/type-1.2.0.tgz#848dd7698dafa3e54a6c479e759c4bc3f18847a0" + integrity sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg== + +type@^2.7.2: + version "2.7.2" + resolved "https://registry.yarnpkg.com/type/-/type-2.7.2.tgz#2376a15a3a28b1efa0f5350dcf72d24df6ef98d0" + integrity sha512-dzlvlNlt6AXU7EBSfpAscydQ7gXB+pPGsPnfJnZpiNJBDj7IaJzQlBZYGdEi4R9HmPdBv2XmWJ6YUtoTa7lmCw== + typedoc-plugin-markdown@^3.14.0: version "3.15.4" resolved "https://registry.npmjs.org/typedoc-plugin-markdown/-/typedoc-plugin-markdown-3.15.4.tgz" @@ -4108,11 +4837,30 @@ uglify-js@^3.1.4: resolved "https://registry.npmjs.org/uglify-js/-/uglify-js-3.17.4.tgz" integrity sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g== +unique-filename@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/unique-filename/-/unique-filename-3.0.0.tgz#48ba7a5a16849f5080d26c760c86cf5cf05770ea" + integrity sha512-afXhuC55wkAmZ0P18QsVE6kp8JaxrEokN2HGIoIVv2ijHQd419H0+6EigAFcIzXeMIkcIkNBpB3L/DXB3cTS/g== + dependencies: + unique-slug "^4.0.0" + +unique-slug@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/unique-slug/-/unique-slug-4.0.0.tgz#6bae6bb16be91351badd24cdce741f892a6532e3" + integrity sha512-WrcA6AyEfqDX5bWige/4NQfPZMtASNVxdmWR76WESYQVAACSgWcR6e9i0mofqqBxYFtL4oAxPIptY73/0YE1DQ== + dependencies: + imurmurhash "^0.1.4" + universalify@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.2.0.tgz#6451760566fa857534745ab1dde952d1b1761be0" integrity sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg== +universalify@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/universalify/-/universalify-2.0.0.tgz#75a4984efedc4b08975c5aeb73f530d02df25717" + integrity sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ== + update-browserslist-db@^1.0.11: version "1.0.11" resolved "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.11.tgz" @@ -4128,6 +4876,11 @@ uri-js@^4.2.2: dependencies: punycode "^2.1.0" +url-join@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/url-join/-/url-join-4.0.1.tgz#b642e21a2646808ffa178c4c5fda39844e12cde7" + integrity sha512-jk1+QP6ZJqyOiuEI9AEWQfju/nB2Pw466kbA0LEZljHwKeMgd9WrAEgEGxjPDD2+TNbbb37rTyhEfrCXfuKXnA== + url-parse@^1.5.3: version "1.5.10" resolved "https://registry.yarnpkg.com/url-parse/-/url-parse-1.5.10.tgz#9d3c2f736c1d75dd3bd2be507dcc111f1e2ea9c1" @@ -4146,6 +4899,11 @@ util-deprecate@^1.0.1, util-deprecate@~1.0.1: resolved "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz" integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw== +util-extend@^1.0.1: + version "1.0.3" + resolved "https://registry.yarnpkg.com/util-extend/-/util-extend-1.0.3.tgz#a7c216d267545169637b3b6edc6ca9119e2ff93f" + integrity sha512-mLs5zAK+ctllYBj+iAQvlDCwoxU/WDOUaJkcFudeiAX6OajC6BKXJUa9a+tbtkC11dz2Ufb7h0lyvIOVn4LADA== + uuid@^3.3.2: version "3.4.0" resolved "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz" @@ -4256,21 +5014,21 @@ webpack@^5.88.2: watchpack "^2.4.0" webpack-sources "^3.2.3" -which@1: +which@1, which@^1.2.10: version "1.3.1" resolved "https://registry.npmjs.org/which/-/which-1.3.1.tgz" integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ== dependencies: isexe "^2.0.0" -which@^2.0.1: +which@^2.0.1, which@^2.0.2: version "2.0.2" resolved "https://registry.npmjs.org/which/-/which-2.0.2.tgz" integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== dependencies: isexe "^2.0.0" -wide-align@^1.1.0: +wide-align@^1.1.0, wide-align@^1.1.5: version "1.1.5" resolved "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz" integrity sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg== @@ -4292,6 +5050,15 @@ wordwrap@^1.0.0: resolved "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz" integrity sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q== +"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" + integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== + dependencies: + ansi-styles "^4.0.0" + string-width "^4.1.0" + strip-ansi "^6.0.0" + wrap-ansi@^7.0.0: version "7.0.0" resolved "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz" @@ -4301,6 +5068,15 @@ wrap-ansi@^7.0.0: string-width "^4.1.0" strip-ansi "^6.0.0" +wrap-ansi@^8.1.0: + version "8.1.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-8.1.0.tgz#56dc22368ee570face1b49819975d9b9a5ead214" + integrity sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ== + dependencies: + ansi-styles "^6.1.0" + string-width "^5.0.1" + strip-ansi "^7.0.1" + wrappy@1: version "1.0.2" resolved "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz" @@ -4314,7 +5090,7 @@ write-file-atomic@^4.0.2: imurmurhash "^0.1.4" signal-exit "^3.0.7" -"xtend@>=4.0.0 <4.1.0-0", xtend@^4.0.0, xtend@^4.0.1, xtend@~4.0.0, xtend@~4.0.1: +"xtend@>=4.0.0 <4.1.0-0", xtend@~4.0.1: version "4.0.2" resolved "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz" integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ== @@ -4339,7 +5115,7 @@ yargs-parser@^21.0.1, yargs-parser@^21.1.1: resolved "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz" integrity sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw== -yargs@^17.3.1: +yargs@^17.3.1, yargs@^17.6.0: version "17.7.2" resolved "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz" integrity sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w== From f923f3f8f8b0cd9ae3f27416ea330ced87186375 Mon Sep 17 00:00:00 2001 From: Thibault Martinez Date: Sun, 29 Oct 2023 14:59:07 +0100 Subject: [PATCH 17/91] Bump deps to fix a dependency clippy error (#1522) --- Cargo.lock | 131 ++++++++++++++++++------------------- bindings/core/Cargo.toml | 10 +-- bindings/core/src/error.rs | 2 - bindings/python/Cargo.toml | 2 +- cli/Cargo.toml | 4 +- sdk/Cargo.toml | 22 ++++--- 6 files changed, 83 insertions(+), 88 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 63b07a693c..9dc7fc03de 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -54,9 +54,9 @@ dependencies = [ [[package]] name = "ahash" -version = "0.8.4" +version = "0.8.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "72832d73be48bac96a5d7944568f305d829ed55b0ce3b483647089dfaf6cf704" +checksum = "91429305e9f0a25f6205c5b8e0d2db09e0708a7a6df0f42212bb56c32c8ac97a" dependencies = [ "cfg-if", "once_cell", @@ -468,9 +468,9 @@ dependencies = [ [[package]] name = "clap" -version = "4.4.6" +version = "4.4.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d04704f56c2cde07f43e8e2c154b43f216dc5c92fc98ada720177362f953b956" +checksum = "ac495e00dcec98c83465d5ad66c5c4fabd652fd6686e7c6269b117e729a6f17b" dependencies = [ "clap_builder", "clap_derive", @@ -478,9 +478,9 @@ dependencies = [ [[package]] name = "clap_builder" -version = "4.4.6" +version = "4.4.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0e231faeaca65ebd1ea3c737966bf858971cd38c3849107aa3ea7de90a804e45" +checksum = "c77ed9a32a62e6ca27175d00d29d05ca32e396ea1eb5fb01d8256b669cec7663" dependencies = [ "anstream", "anstyle", @@ -490,9 +490,9 @@ dependencies = [ [[package]] name = "clap_derive" -version = "4.4.2" +version = "4.4.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0862016ff20d69b84ef8247369fabf5c008a7417002411897d40ee1f4532b873" +checksum = "cf9804afaaf59a91e75b022a30fb7229a7901f60c755489cc61c9b423b836442" dependencies = [ "heck", "proc-macro2", @@ -502,9 +502,9 @@ dependencies = [ [[package]] name = "clap_lex" -version = "0.5.1" +version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cd7cc57abe963c6d3b9d8be5b06ba7c8957a930305ca90304f24ef040aa6f961" +checksum = "702fc72eb24e5a1e48ce58027a675bc24edd52096d5397d4aea7c6dd9eca0bd1" [[package]] name = "cli-wallet" @@ -627,9 +627,9 @@ checksum = "e496a50fda8aacccc86d7529e2c1e0892dbd0f898a6b5645b5561b89c3210efa" [[package]] name = "cpufeatures" -version = "0.2.10" +version = "0.2.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3fbc60abd742b35f2492f808e1abbb83d45f72db402e14c55057edc9c7b1e9e4" +checksum = "ce420fe07aecd3e67c5f910618fe65e94158f6dcc0adf44e00d69ce2bdfe0fd0" dependencies = [ "libc", ] @@ -1043,9 +1043,9 @@ dependencies = [ [[package]] name = "fiat-crypto" -version = "0.2.1" +version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d0870c84016d4b481be5c9f323c24f65e31e901ae618f0e80f4308fb00de1d2d" +checksum = "a481586acf778f1b1455424c343f71124b048ffa5f4fc3f8f6ae9dc432dcb3c7" [[package]] name = "field-offset" @@ -1077,7 +1077,7 @@ checksum = "55ac459de2512911e4b674ce33cf20befaba382d05b62b008afc1c8b57cbf181" dependencies = [ "futures-core", "futures-sink", - "spin 0.9.8", + "spin", ] [[package]] @@ -1103,9 +1103,9 @@ checksum = "e6d5a32815ae3f33302d95fdcb2ce17862f8c65363dcfd29360480ba1001fc9c" [[package]] name = "futures" -version = "0.3.28" +version = "0.3.29" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "23342abe12aba583913b2e62f22225ff9c950774065e4bfb61a19cd9770fec40" +checksum = "da0290714b38af9b4a7b094b8a37086d1b4e61f2df9122c3cad2577669145335" dependencies = [ "futures-channel", "futures-core", @@ -1118,9 +1118,9 @@ dependencies = [ [[package]] name = "futures-channel" -version = "0.3.28" +version = "0.3.29" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "955518d47e09b25bbebc7a18df10b81f0c766eaf4c4f1cccef2fca5f2a4fb5f2" +checksum = "ff4dd66668b557604244583e3e1e1eada8c5c2e96a6d0d6653ede395b78bbacb" dependencies = [ "futures-core", "futures-sink", @@ -1128,15 +1128,15 @@ dependencies = [ [[package]] name = "futures-core" -version = "0.3.28" +version = "0.3.29" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4bca583b7e26f571124fe5b7561d49cb2868d79116cfa0eefce955557c6fee8c" +checksum = "eb1d22c66e66d9d72e1758f0bd7d4fd0bee04cad842ee34587d68c07e45d088c" [[package]] name = "futures-executor" -version = "0.3.28" +version = "0.3.29" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ccecee823288125bd88b4d7f565c9e58e41858e47ab72e8ea2d64e93624386e0" +checksum = "0f4fb8693db0cf099eadcca0efe2a5a22e4550f98ed16aba6c48700da29597bc" dependencies = [ "futures-core", "futures-task", @@ -1146,15 +1146,15 @@ dependencies = [ [[package]] name = "futures-io" -version = "0.3.28" +version = "0.3.29" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4fff74096e71ed47f8e023204cfd0aa1289cd54ae5430a9523be060cdb849964" +checksum = "8bf34a163b5c4c52d0478a4d757da8fb65cabef42ba90515efee0f6f9fa45aaa" [[package]] name = "futures-macro" -version = "0.3.28" +version = "0.3.29" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "89ca545a94061b6365f2c7355b4b32bd20df3ff95f02da9329b34ccc3bd6ee72" +checksum = "53b153fd91e4b0147f4aced87be237c98248656bb01050b96bf3ee89220a8ddb" dependencies = [ "proc-macro2", "quote", @@ -1163,21 +1163,21 @@ dependencies = [ [[package]] name = "futures-sink" -version = "0.3.28" +version = "0.3.29" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f43be4fe21a13b9781a69afa4985b0f6ee0e1afab2c6f454a8cf30e2b2237b6e" +checksum = "e36d3378ee38c2a36ad710c5d30c2911d752cb941c00c72dbabfb786a7970817" [[package]] name = "futures-task" -version = "0.3.28" +version = "0.3.29" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "76d3d132be6c0e6aa1534069c705a74a5997a356c0dc2f86a47765e5617c5b65" +checksum = "efd193069b0ddadc69c46389b740bbccdd97203899b48d09c5f7969591d6bae2" [[package]] name = "futures-util" -version = "0.3.28" +version = "0.3.29" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26b01e40b772d54cf6c6d721c1d1abd0647a0106a12ecaa1c186273392a69533" +checksum = "a19526d624e703a3179b3d322efec918b6246ea0fa51d41124525f00f1cc8104" dependencies = [ "futures-channel", "futures-core", @@ -1459,9 +1459,9 @@ dependencies = [ [[package]] name = "hyper-rustls" -version = "0.24.1" +version = "0.24.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8d78e1e73ec14cf7375674f74d7dde185c8206fd9dea6fb6295e8a98098aaa97" +checksum = "ec3efd23720e2049821a693cbc7e65ea87c72f1c58ff2f9522ff332b1491e590" dependencies = [ "futures-util", "http", @@ -2672,17 +2672,16 @@ dependencies = [ [[package]] name = "ring" -version = "0.16.20" +version = "0.17.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3053cf52e236a3ed746dfc745aa9cacf1b791d846bdaf412f60a8d7d6e17c8fc" +checksum = "fb0205304757e5d899b9c2e448b867ffd03ae7f988002e47cd24954391394d0b" dependencies = [ "cc", + "getrandom", "libc", - "once_cell", - "spin 0.5.2", + "spin", "untrusted", - "web-sys", - "winapi", + "windows-sys 0.48.0", ] [[package]] @@ -2757,9 +2756,9 @@ dependencies = [ [[package]] name = "rustix" -version = "0.38.20" +version = "0.38.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "67ce50cb2e16c2903e30d1cbccfd8387a74b9d4c938b6a4c5ec6cc7556f7a8a0" +checksum = "2b426b0506e5d50a7d8dafcf2e81471400deb602392c7dd110815afb4eaf02a3" dependencies = [ "bitflags 2.4.1", "errno", @@ -2770,9 +2769,9 @@ dependencies = [ [[package]] name = "rustls" -version = "0.21.7" +version = "0.21.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cd8d6c9f025a446bc4d18ad9632e69aec8f287aa84499ee335599fabd20c3fd8" +checksum = "446e14c5cda4f3f30fe71863c34ec70f5ac79d6087097ad0bb433e1be5edf04c" dependencies = [ "log", "ring", @@ -2803,9 +2802,9 @@ dependencies = [ [[package]] name = "rustls-webpki" -version = "0.101.6" +version = "0.101.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c7d5dece342910d9ba34d259310cae3e0154b873b35408b787b59bce53d34fe" +checksum = "8b6275d1ee7a1cd780b64aca7726599a1dbc893b1e64144529e55c3c2f745765" dependencies = [ "ring", "untrusted", @@ -2898,9 +2897,9 @@ dependencies = [ [[package]] name = "sct" -version = "0.7.0" +version = "0.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d53dcdb7c9f8158937a7981b48accfd39a43af418591a5d008c7b22b5e1b7ca4" +checksum = "da046153aa2352493d6cb7da4b6e5c0c057d8a1d0a9aa8560baffdd945acd414" dependencies = [ "ring", "untrusted", @@ -2967,18 +2966,18 @@ checksum = "388a1df253eca08550bef6c72392cfe7c30914bf41df5269b68cbd6ff8f570a3" [[package]] name = "serde" -version = "1.0.189" +version = "1.0.190" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e422a44e74ad4001bdc8eede9a4570ab52f71190e9c076d14369f38b9200537" +checksum = "91d3c334ca1ee894a2c6f6ad698fe8c435b76d504b13d436f0685d648d6d96f7" dependencies = [ "serde_derive", ] [[package]] name = "serde_derive" -version = "1.0.189" +version = "1.0.190" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e48d1f918009ce3145511378cf68d613e3b3d9137d67272562080d68a2b32d5" +checksum = "67c5609f394e5c2bd7fc51efda478004ea80ef42fee983d5c67a65e34f32c0e3" dependencies = [ "proc-macro2", "quote", @@ -3130,12 +3129,6 @@ dependencies = [ "windows-sys 0.48.0", ] -[[package]] -name = "spin" -version = "0.5.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6e63cff320ae2c57904679ba7cb63280a3dc4613885beafb148ee7bf9aa9042d" - [[package]] name = "spin" version = "0.9.8" @@ -3427,9 +3420,9 @@ dependencies = [ [[package]] name = "tokio-util" -version = "0.7.9" +version = "0.7.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d68074620f57a0b21594d9735eb2e98ab38b17f80d3fcb189fca266771ca60d" +checksum = "5419f34732d9eb6ee4c3578b7989078579b7f039cbbb9ca2c4da015749371e15" dependencies = [ "bytes", "futures-core", @@ -3441,9 +3434,9 @@ dependencies = [ [[package]] name = "toml_datetime" -version = "0.6.4" +version = "0.6.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "51cc078118ed25af325985ff674c00c8416b0f962be67da4946854ebfc99f334" +checksum = "3550f4e9685620ac18a50ed434eb3aec30db8ba93b0287467bca5826ea25baf1" [[package]] name = "toml_edit" @@ -3599,9 +3592,9 @@ dependencies = [ [[package]] name = "untrusted" -version = "0.7.1" +version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a156c684c91ea7d62626509bce3cb4e1d9ed5c4d978f7b4352658f96a4c26b4a" +checksum = "8ecb6da28b8a351d773b68d5825ac39017e680750f980f3a1a85cd8dd28a47c1" [[package]] name = "url" @@ -4050,18 +4043,18 @@ checksum = "09041cd90cf85f7f8b2df60c646f853b7f535ce68f85244eb6731cf89fa498ec" [[package]] name = "zerocopy" -version = "0.7.11" +version = "0.7.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c19fae0c8a9efc6a8281f2e623db8af1db9e57852e04cde3e754dd2dc29340f" +checksum = "ede7d7c7970ca2215b8c1ccf4d4f354c4733201dfaaba72d44ae5b37472e4901" dependencies = [ "zerocopy-derive", ] [[package]] name = "zerocopy-derive" -version = "0.7.11" +version = "0.7.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fc56589e9ddd1f1c28d4b4b5c773ce232910a6bb67a70133d61c9e347585efe9" +checksum = "4b27b1bb92570f989aac0ab7e9cbfbacdd65973f7ee920d9f0e71ebac878fd0b" dependencies = [ "proc-macro2", "quote", diff --git a/bindings/core/Cargo.toml b/bindings/core/Cargo.toml index ba1a8b4f9e..1937dfc8ae 100644 --- a/bindings/core/Cargo.toml +++ b/bindings/core/Cargo.toml @@ -17,7 +17,7 @@ iota-sdk = { path = "../../sdk", default-features = false, features = [ backtrace = { version = "0.3.69", default-features = false, features = ["std"] } derivative = { version = "2.2.0", default-features = false } fern-logger = { version = "0.5.0", default-features = false } -futures = { version = "0.3.28", default-features = false } +futures = { version = "0.3.29", default-features = false } iota-crypto = { version = "0.23.0", default-features = false, features = [ "slip10", "bip44", @@ -26,14 +26,16 @@ log = { version = "0.4.20", default-features = false } packable = { version = "0.8.3", default-features = false } prefix-hex = { version = "0.7.1", default-features = false } primitive-types = { version = "0.12.2", default-features = false } -serde = { version = "1.0.188", default-features = false } +serde = { version = "1.0.190", default-features = false } serde_json = { version = "1.0.107", default-features = false } -thiserror = { version = "1.0.49", default-features = false } +thiserror = { version = "1.0.50", default-features = false } tokio = { version = "1.33.0", default-features = false } zeroize = { version = "1.6.0", default-features = false } [dev-dependencies] -pretty_assertions = { version = "1.4.0", default-features = false, features = [ "alloc" ] } +pretty_assertions = { version = "1.4.0", default-features = false, features = [ + "alloc", +] } [features] events = ["iota-sdk/events"] diff --git a/bindings/core/src/error.rs b/bindings/core/src/error.rs index 08b54e8adf..0f57d0447d 100644 --- a/bindings/core/src/error.rs +++ b/bindings/core/src/error.rs @@ -4,8 +4,6 @@ use packable::error::UnexpectedEOF; use serde::{ser::SerializeMap, Serialize, Serializer}; -pub use super::{method::AccountMethod, response::Response}; - /// Result type of the bindings core crate. pub type Result = std::result::Result; diff --git a/bindings/python/Cargo.toml b/bindings/python/Cargo.toml index aacc47184b..ec7a538621 100644 --- a/bindings/python/Cargo.toml +++ b/bindings/python/Cargo.toml @@ -27,7 +27,7 @@ iota-sdk-bindings-core = { path = "../core", default-features = false, features "mqtt", ] } -futures = { version = "0.3.28", default-features = false } +futures = { version = "0.3.29", default-features = false } once_cell = { version = "1.18.0", default-features = false } pyo3 = { version = "0.20.0", default-features = false, features = [ "macros", diff --git a/cli/Cargo.toml b/cli/Cargo.toml index 358491801c..e27642ec2b 100644 --- a/cli/Cargo.toml +++ b/cli/Cargo.toml @@ -25,7 +25,7 @@ iota-sdk = { path = "../sdk", default-features = false, features = [ ] } chrono = { version = "0.4.31", default-features = false, features = ["std"] } -clap = { version = "4.4.6", default-features = false, features = [ +clap = { version = "4.4.7", default-features = false, features = [ "std", "color", "help", @@ -46,7 +46,7 @@ log = { version = "0.4.20", default-features = false } prefix-hex = { version = "0.7.1", default-features = false, features = ["std"] } rustyline = { version = "12.0.0", features = ["derive"] } serde_json = { version = "1.0.107", default-features = false } -thiserror = { version = "1.0.49", default-features = false } +thiserror = { version = "1.0.50", default-features = false } tokio = { version = "1.33.0", default-features = false, features = ["fs"] } zeroize = { version = "1.6.0", default-features = false } diff --git a/sdk/Cargo.toml b/sdk/Cargo.toml index 8a77cdec8e..684cf7d554 100644 --- a/sdk/Cargo.toml +++ b/sdk/Cargo.toml @@ -19,17 +19,17 @@ rustdoc-args = ["--cfg", "docsrs"] [dependencies] # Mandatory dependencies bech32 = { version = "0.9.1", default-features = false } -bitflags = { version = "2.4.0", default-features = false } +bitflags = { version = "2.4.1", default-features = false } bytemuck = { version = "1.14.0", default-features = false } derive_more = { version = "0.99.17", default-features = false, features = [ "from", "as_ref", "deref", "deref_mut", - "display" + "display", ] } getset = { version = "0.1.2", default-features = false } -hashbrown = { version = "0.14.1", default-features = false, features = [ +hashbrown = { version = "0.14.2", default-features = false, features = [ "ahash", "inline-more", ] } @@ -51,17 +51,17 @@ prefix-hex = { version = "0.7.1", default-features = false, features = [ "primitive-types", ] } primitive-types = { version = "0.12.2", default-features = false } -serde = { version = "1.0.188", default-features = false, features = ["derive"] } +serde = { version = "1.0.190", default-features = false, features = ["derive"] } serde_json = { version = "1.0.107", default-features = false, features = [ "alloc", ] } # Optional dependencies anymap = { version = "0.12.1", default-features = false, optional = true } -async-trait = { version = "0.1.73", default-features = false, optional = true } +async-trait = { version = "0.1.74", default-features = false, optional = true } bs58 = { version = "0.5.0", default-features = false, optional = true } fern-logger = { version = "0.5.0", default-features = false, optional = true } -futures = { version = "0.3.28", default-features = false, features = [ +futures = { version = "0.3.29", default-features = false, features = [ "thread-pool", ], optional = true } heck = { version = "0.4.1", default-features = false, optional = true } @@ -74,7 +74,7 @@ once_cell = { version = "1.18.0", default-features = false, optional = true } rand = { version = "0.8.5", default-features = false, features = [ "min_const_gen", ], optional = true } -regex = { version = "1.10.0", default-features = false, features = [ +regex = { version = "1.10.2", default-features = false, features = [ "unicode-perl", ], optional = true } reqwest = { version = "0.11.22", default-features = false, features = [ @@ -87,8 +87,8 @@ rumqttc = { version = "0.23.0", default-features = false, features = [ "websocket", ], optional = true } serde_repr = { version = "0.1.16", default-features = false, optional = true } -thiserror = { version = "1.0.49", default-features = false, optional = true } -time = { version = "0.3.29", default-features = false, features = [ +thiserror = { version = "1.0.50", default-features = false, optional = true } +time = { version = "0.3.30", default-features = false, features = [ "serde", "macros", ], optional = true } @@ -126,7 +126,9 @@ wasm-bindgen-futures = { version = "0.4.37", default-features = false, optional [dev-dependencies] iota-sdk = { path = ".", default-features = false, features = ["rand"] } -pretty_assertions = { version = "1.4.0", default-features = false, features = [ "alloc" ] } +pretty_assertions = { version = "1.4.0", default-features = false, features = [ + "alloc", +] } dotenvy = { version = "0.15.7", default-features = false } fern-logger = { version = "0.5.0", default-features = false } From e0d6841dc79c2d3c88b3db94fb37b7ca97c9d922 Mon Sep 17 00:00:00 2001 From: Thibault Martinez Date: Mon, 30 Oct 2023 12:26:16 +0100 Subject: [PATCH 18/91] Fix `StateMetadataOutput`'s constructor not setting the `stateMetadata` field (#1535) * Fix `StateMetadataOutput`'s constructor not setting the `stateMetadata` field * Fmt --- bindings/nodejs/CHANGELOG.md | 6 ++++++ bindings/nodejs/lib/types/block/output/output.ts | 10 +++++++++- 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/bindings/nodejs/CHANGELOG.md b/bindings/nodejs/CHANGELOG.md index 11938f9b15..20f8b39bf0 100644 --- a/bindings/nodejs/CHANGELOG.md +++ b/bindings/nodejs/CHANGELOG.md @@ -19,6 +19,12 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Security --> +## 1.1.4 - 2023-MM-DD + +### Fixed + +- `StateMetadataOutput`'s constructor not setting the `stateMetadata` field; + ## 1.1.3 - 2023-10-27 ### Fixed diff --git a/bindings/nodejs/lib/types/block/output/output.ts b/bindings/nodejs/lib/types/block/output/output.ts index 15d9e1c26b..dfc6f6d214 100644 --- a/bindings/nodejs/lib/types/block/output/output.ts +++ b/bindings/nodejs/lib/types/block/output/output.ts @@ -205,19 +205,25 @@ abstract class ImmutableFeaturesOutput extends CommonOutput { * Base class for state metadata outputs. */ abstract class StateMetadataOutput extends ImmutableFeaturesOutput /*implements IBasicOutput*/ { + /** + * Metadata that can only be changed by the state controller. + */ readonly stateMetadata?: HexEncodedString; /** * @param type The type of output. * @param amount The amount of the output. * @param unlockConditions The unlock conditions for the output. + * @param stateMetadata Metadata that can only be changed by the state controller. */ constructor( type: OutputType, amount: bigint, unlockConditions: UnlockCondition[], + stateMetadata?: HexEncodedString, ) { super(type, amount, unlockConditions); + this.stateMetadata = stateMetadata; } /** * Metadata that can only be changed by the state controller. @@ -251,6 +257,7 @@ class AliasOutput extends StateMetadataOutput /*implements IAliasOutput*/ { * @param aliasId The Alias ID as hex-encoded string. * @param stateIndex A counter that must increase by 1 every time the alias is state transitioned. * @param foundryCounter A counter that denotes the number of foundries created by this alias account. + * @param stateMetadata Metadata that can only be changed by the state controller. */ constructor( unlockConditions: UnlockCondition[], @@ -258,8 +265,9 @@ class AliasOutput extends StateMetadataOutput /*implements IAliasOutput*/ { aliasId: HexEncodedString, stateIndex: number, foundryCounter: number, + stateMetadata?: HexEncodedString, ) { - super(OutputType.Alias, amount, unlockConditions); + super(OutputType.Alias, amount, unlockConditions, stateMetadata); this.aliasId = aliasId; this.stateIndex = stateIndex; this.foundryCounter = foundryCounter; From 8b55ee58ff725864e78ec8c1ddc154b95f54c9de Mon Sep 17 00:00:00 2001 From: Thoralf-M <46689931+Thoralf-M@users.noreply.github.com> Date: Tue, 31 Oct 2023 09:54:00 +0100 Subject: [PATCH 19/91] Prepare Python 1.1.1 release (#1539) --- Cargo.lock | 2 +- bindings/python/CHANGELOG.md | 2 +- bindings/python/Cargo.toml | 2 +- bindings/python/setup.py | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 9dc7fc03de..14b616f85d 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1701,7 +1701,7 @@ dependencies = [ [[package]] name = "iota-sdk-python" -version = "1.1.0" +version = "1.1.1" dependencies = [ "futures", "iota-sdk-bindings-core", diff --git a/bindings/python/CHANGELOG.md b/bindings/python/CHANGELOG.md index 08c4e256f1..cc2fe08cf3 100644 --- a/bindings/python/CHANGELOG.md +++ b/bindings/python/CHANGELOG.md @@ -19,7 +19,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Security --> -## 1.1.1 - 2023-MM-DD +## 1.1.1 - 2023-10-31 ### Added diff --git a/bindings/python/Cargo.toml b/bindings/python/Cargo.toml index ec7a538621..eae8434b01 100644 --- a/bindings/python/Cargo.toml +++ b/bindings/python/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "iota-sdk-python" -version = "1.1.0" +version = "1.1.1" authors = ["IOTA Stiftung"] edition = "2021" description = "Python bindings for the IOTA SDK library" diff --git a/bindings/python/setup.py b/bindings/python/setup.py index baf74f8a72..6d9b0958cf 100644 --- a/bindings/python/setup.py +++ b/bindings/python/setup.py @@ -22,7 +22,7 @@ def get_py_version_cfgs(): setup( name="iota_sdk", - version="1.1.0", + version="1.1.1", classifiers=[ "License :: SPDX-License-Identifier :: Apache-2.0", "Intended Audience :: Developers", From 2734248fba95ffb1700a4f015cff3e26c9462f30 Mon Sep 17 00:00:00 2001 From: Rajiv Shah Date: Thu, 2 Nov 2023 11:59:42 -0400 Subject: [PATCH 20/91] chore: Update `gon` for CLI on macOS (#1546) --- .github/workflows/cli-publish.yml | 9 +++++++-- cli/gon-config.json | 2 +- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/.github/workflows/cli-publish.yml b/.github/workflows/cli-publish.yml index aea483b561..afa18e5ba5 100644 --- a/.github/workflows/cli-publish.yml +++ b/.github/workflows/cli-publish.yml @@ -67,8 +67,13 @@ jobs: sudo apt-get install libudev-dev libusb-1.0-0-dev - name: Install gon (macOS) - # https://github.com/mitchellh/gon - run: brew install mitchellh/gon/gon + # Fork of https://github.com/mitchellh/gon + # https://github.com/Bearer/gon + # Since we're dealing with code signing secrets we want to pin the version of gon + run: | + wget https://raw.githubusercontent.com/Bearer/homebrew-tap/366bc999e14a8d04e07e24f9387bcbaf89c1bc53/Formula/gon.rb + brew install --formula gon.rb + rm gon.rb if: matrix.os == 'macos-latest' - name: Install LLVM and Clang (Windows) # required for bindgen to work, see https://github.com/rust-lang/rust-bindgen/issues/1797 diff --git a/cli/gon-config.json b/cli/gon-config.json index 6891b07d4c..b23e28a605 100644 --- a/cli/gon-config.json +++ b/cli/gon-config.json @@ -2,7 +2,7 @@ "source": ["../target/production/wallet"], "bundle_id": "org.iota.cli-wallet", "apple_id": { - "password": "@env:AC_PASSWORD" + "provider": "UG77RJKZHH" }, "sign": { "application_identity": "Developer ID Application: IOTA Stiftung (UG77RJKZHH)" From a492ad6b3bde2815db01cf650139a04564b5a966 Mon Sep 17 00:00:00 2001 From: Thibault Martinez Date: Wed, 8 Nov 2023 10:35:01 +0100 Subject: [PATCH 21/91] Address new clippy lints (#1595) --- sdk/src/client/api/high_level.rs | 3 +-- sdk/src/client/secret/mnemonic.rs | 4 +--- sdk/src/client/secret/private_key.rs | 4 +--- sdk/src/client/utils.rs | 5 +---- sdk/src/wallet/migration/chrysalis.rs | 8 ++++---- 5 files changed, 8 insertions(+), 16 deletions(-) diff --git a/sdk/src/client/api/high_level.rs b/sdk/src/client/api/high_level.rs index 6fb23cf63c..3338cd02b3 100644 --- a/sdk/src/client/api/high_level.rs +++ b/sdk/src/client/api/high_level.rs @@ -202,11 +202,10 @@ impl Client { let mut total_already_spent = 0; let mut selected_inputs = Vec::new(); - for (_offset, output_wrapper) in basic_outputs + for output_wrapper in basic_outputs .into_iter() // Max inputs is 128 .take(INPUT_COUNT_MAX.into()) - .enumerate() { // Break if we have enough funds and don't create dust for the remainder if total_already_spent == amount || total_already_spent >= amount { diff --git a/sdk/src/client/secret/mnemonic.rs b/sdk/src/client/secret/mnemonic.rs index 8638e8b122..29a7e91734 100644 --- a/sdk/src/client/secret/mnemonic.rs +++ b/sdk/src/client/secret/mnemonic.rs @@ -62,9 +62,7 @@ impl SecretManage for MnemonicSecretManager { .to_bytes(); // Hash the public key to get the address - let result = Blake2b256::digest(public_key).try_into().map_err(|_e| { - crate::client::Error::Blake2b256("hashing the public key while generating the address failed.") - })?; + let result = Blake2b256::digest(public_key).into(); crate::client::Result::Ok(Ed25519Address::new(result)) }) diff --git a/sdk/src/client/secret/private_key.rs b/sdk/src/client/secret/private_key.rs index 7b11ab0ce9..89cf77fd91 100644 --- a/sdk/src/client/secret/private_key.rs +++ b/sdk/src/client/secret/private_key.rs @@ -47,9 +47,7 @@ impl SecretManage for PrivateKeySecretManager { let public_key = self.0.public_key().to_bytes(); // Hash the public key to get the address - let result = Blake2b256::digest(public_key).try_into().map_err(|_e| { - crate::client::Error::Blake2b256("hashing the public key while generating the address failed.") - })?; + let result = Blake2b256::digest(public_key).into(); crate::client::Result::Ok(vec![Ed25519Address::new(result)]) } diff --git a/sdk/src/client/utils.rs b/sdk/src/client/utils.rs index 2500b5e48f..73e1d21dc1 100644 --- a/sdk/src/client/utils.rs +++ b/sdk/src/client/utils.rs @@ -43,11 +43,8 @@ pub fn hex_to_bech32(hex: &str, bech32_hrp: impl ConvertTo) -> Result) -> Result { let public_key: [u8; Ed25519Address::LENGTH] = prefix_hex::decode(hex)?; + let address = Ed25519Address::new(Blake2b256::digest(public_key).into()); - let address = Blake2b256::digest(public_key) - .try_into() - .map_err(|_e| Error::Blake2b256("hashing the public key failed."))?; - let address: Ed25519Address = Ed25519Address::new(address); Ok(Address::Ed25519(address).try_to_bech32(bech32_hrp)?) } diff --git a/sdk/src/wallet/migration/chrysalis.rs b/sdk/src/wallet/migration/chrysalis.rs index 41ff1e934f..5543ca4c30 100644 --- a/sdk/src/wallet/migration/chrysalis.rs +++ b/sdk/src/wallet/migration/chrysalis.rs @@ -179,12 +179,12 @@ fn decrypt_record(record_bytes: Vec, encryption_key: &[u8; 32]) -> crate::wa let mut pt = vec![0; ct.len()]; // we can unwrap here since we know the lengths are valid XChaCha20Poly1305::decrypt( - encryption_key.try_into().unwrap(), - &nonce.try_into().unwrap(), + encryption_key.into(), + &nonce.into(), &[], &mut pt, &ct, - tag.as_slice().try_into().unwrap(), + tag.as_slice().into(), ) .map_err(|e| Error::Migration(format!("{:?}", e)))?; @@ -200,7 +200,7 @@ pub(crate) fn to_chrysalis_key(key: &[u8], stronghold: bool) -> Vec { let (id, _) = buf.split_at(24); - id.try_into().unwrap() + id.into() } else { key.into() } From aaa778d51c2cabb010b9c3ca1039cf36c074f28e Mon Sep 17 00:00:00 2001 From: Thibault Martinez Date: Mon, 13 Nov 2023 14:29:37 +0100 Subject: [PATCH 22/91] Move ConvertTo to utils (#1603) --- cli/src/wallet_cli/mod.rs | 2 +- sdk/src/client/api/address.rs | 6 ++---- sdk/src/client/node_api/participation.rs | 3 ++- sdk/src/client/utils.rs | 3 ++- sdk/src/types/block/address/bech32.rs | 9 ++++++--- sdk/src/types/block/address/mod.rs | 15 +++++++++------ sdk/src/types/block/macro.rs | 8 ++++---- sdk/src/types/block/mod.rs | 2 -- sdk/src/types/block/protocol.rs | 5 ++++- sdk/src/{types/block => utils}/convert.rs | 0 sdk/src/utils/mod.rs | 4 ++++ .../addresses/output_ids/account_foundry.rs | 2 +- .../syncing/addresses/output_ids/basic.rs | 3 ++- .../syncing/addresses/output_ids/nft.rs | 3 ++- .../transaction/high_level/minting/mint_nfts.rs | 2 +- .../operations/transaction/high_level/send.rs | 3 +-- .../transaction/high_level/send_native_tokens.rs | 2 +- .../operations/transaction/high_level/send_nft.rs | 2 +- sdk/src/wallet/types/address.rs | 9 ++++++--- 19 files changed, 49 insertions(+), 34 deletions(-) rename sdk/src/{types/block => utils}/convert.rs (100%) diff --git a/cli/src/wallet_cli/mod.rs b/cli/src/wallet_cli/mod.rs index 62dfbaec12..f534b2e41b 100644 --- a/cli/src/wallet_cli/mod.rs +++ b/cli/src/wallet_cli/mod.rs @@ -19,9 +19,9 @@ use iota_sdk::{ }, payload::signed_transaction::TransactionId, slot::SlotIndex, - ConvertTo, }, }, + utils::ConvertTo, wallet::{ types::{OutputData, TransactionWithMetadata}, ConsolidationParams, CreateNativeTokenParams, MintNftParams, OutputsToClaim, SendNativeTokensParams, diff --git a/sdk/src/client/api/address.rs b/sdk/src/client/api/address.rs index 173de7289f..6d5501d4d7 100644 --- a/sdk/src/client/api/address.rs +++ b/sdk/src/client/api/address.rs @@ -12,10 +12,8 @@ use crate::{ secret::{GenerateAddressOptions, SecretManage, SecretManager}, Client, Result, }, - types::block::{ - address::{Address, Bech32Address, Hrp, ToBech32Ext}, - ConvertTo, - }, + types::block::address::{Address, Bech32Address, Hrp, ToBech32Ext}, + utils::ConvertTo, }; #[derive(Clone, Debug, Serialize, Deserialize)] diff --git a/sdk/src/client/node_api/participation.rs b/sdk/src/client/node_api/participation.rs index 68c721fa2f..5f9dddc4a4 100644 --- a/sdk/src/client/node_api/participation.rs +++ b/sdk/src/client/node_api/participation.rs @@ -15,8 +15,9 @@ use crate::{ ParticipationEventType, }, }, - block::{address::Bech32Address, output::OutputId, ConvertTo}, + block::{address::Bech32Address, output::OutputId}, }, + utils::ConvertTo, }; impl ClientInner { diff --git a/sdk/src/client/utils.rs b/sdk/src/client/utils.rs index da07957425..ba2f0056aa 100644 --- a/sdk/src/client/utils.rs +++ b/sdk/src/client/utils.rs @@ -21,8 +21,9 @@ use crate::{ address::{Address, Bech32Address, Ed25519Address, Hrp, ToBech32Ext}, output::{AccountId, NftId}, payload::TaggedDataPayload, - BlockId, ConvertTo, SignedBlock, + BlockId, SignedBlock, }, + utils::ConvertTo, }; /// Transforms bech32 to hex diff --git a/sdk/src/types/block/address/bech32.rs b/sdk/src/types/block/address/bech32.rs index cbc8d26d5b..36cbe7bbea 100644 --- a/sdk/src/types/block/address/bech32.rs +++ b/sdk/src/types/block/address/bech32.rs @@ -16,9 +16,12 @@ use packable::{ Packable, PackableExt, }; -use crate::types::block::{ - address::{Address, MultiAddress}, - ConvertTo, Error, +use crate::{ + types::block::{ + address::{Address, MultiAddress}, + Error, + }, + utils::ConvertTo, }; #[derive(Copy, Clone, Eq, PartialEq, Ord, PartialOrd, Hash, Deref, Display)] diff --git a/sdk/src/types/block/address/mod.rs b/sdk/src/types/block/address/mod.rs index 4857bf4093..4a8021ad8e 100644 --- a/sdk/src/types/block/address/mod.rs +++ b/sdk/src/types/block/address/mod.rs @@ -26,12 +26,15 @@ pub use self::{ nft::NftAddress, restricted::{AddressCapabilities, AddressCapabilityFlag, RestrictedAddress}, }; -use crate::types::block::{ - output::Output, - semantic::{SemanticValidationContext, TransactionFailureReason}, - signature::Signature, - unlock::Unlock, - ConvertTo, Error, +use crate::{ + types::block::{ + output::Output, + semantic::{SemanticValidationContext, TransactionFailureReason}, + signature::Signature, + unlock::Unlock, + Error, + }, + utils::ConvertTo, }; /// A generic address supporting different address kinds. diff --git a/sdk/src/types/block/macro.rs b/sdk/src/types/block/macro.rs index d4783a93cd..b7a5b6695a 100644 --- a/sdk/src/types/block/macro.rs +++ b/sdk/src/types/block/macro.rs @@ -75,13 +75,13 @@ macro_rules! impl_id { } } - impl $crate::types::block::ConvertTo<$hash_name> for &alloc::string::String { + impl $crate::utils::ConvertTo<$hash_name> for &alloc::string::String { fn convert(self) -> Result<$hash_name, $crate::types::block::Error> { self.try_into() } } - impl $crate::types::block::ConvertTo<$hash_name> for &str { + impl $crate::utils::ConvertTo<$hash_name> for &str { fn convert(self) -> Result<$hash_name, $crate::types::block::Error> { self.try_into() } @@ -205,13 +205,13 @@ macro_rules! impl_id { } } - impl $crate::types::block::ConvertTo<$id_name> for &alloc::string::String { + impl $crate::utils::ConvertTo<$id_name> for &alloc::string::String { fn convert(self) -> Result<$id_name, $crate::types::block::Error> { self.try_into() } } - impl $crate::types::block::ConvertTo<$id_name> for &str { + impl $crate::utils::ConvertTo<$id_name> for &str { fn convert(self) -> Result<$id_name, $crate::types::block::Error> { self.try_into() } diff --git a/sdk/src/types/block/mod.rs b/sdk/src/types/block/mod.rs index d010281bab..df210e8224 100644 --- a/sdk/src/types/block/mod.rs +++ b/sdk/src/types/block/mod.rs @@ -4,7 +4,6 @@ //! Core data types for blocks in the tangle. mod block_id; -mod convert; mod error; mod issuer_id; mod r#macro; @@ -46,7 +45,6 @@ pub use self::core::dto::{BlockDto, SignedBlockDto, UnsignedBlockDto}; pub(crate) use self::r#macro::*; pub use self::{ block_id::{BlockHash, BlockId}, - convert::ConvertTo, core::{Block, SignedBlock, UnsignedBlock}, error::Error, issuer_id::IssuerId, diff --git a/sdk/src/types/block/protocol.rs b/sdk/src/types/block/protocol.rs index 25556c4fd2..30ecf8e94f 100644 --- a/sdk/src/types/block/protocol.rs +++ b/sdk/src/types/block/protocol.rs @@ -13,7 +13,10 @@ use super::{ mana::{ManaParameters, RewardsParameters}, slot::{EpochIndex, SlotIndex}, }; -use crate::types::block::{helper::network_name_to_id, output::RentStructure, ConvertTo, Error, PROTOCOL_VERSION}; +use crate::{ + types::block::{helper::network_name_to_id, output::RentStructure, Error, PROTOCOL_VERSION}, + utils::ConvertTo, +}; /// Defines the parameters of the protocol at a particular version. #[derive(Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Packable, Getters, CopyGetters)] diff --git a/sdk/src/types/block/convert.rs b/sdk/src/utils/convert.rs similarity index 100% rename from sdk/src/types/block/convert.rs rename to sdk/src/utils/convert.rs diff --git a/sdk/src/utils/mod.rs b/sdk/src/utils/mod.rs index 9671dfe13d..1341ced35a 100644 --- a/sdk/src/utils/mod.rs +++ b/sdk/src/utils/mod.rs @@ -1,6 +1,10 @@ // Copyright 2023 IOTA Stiftung // SPDX-License-Identifier: Apache-2.0 +mod convert; + pub mod merkle_hasher; #[cfg(feature = "serde")] pub mod serde; + +pub use convert::ConvertTo; diff --git a/sdk/src/wallet/operations/syncing/addresses/output_ids/account_foundry.rs b/sdk/src/wallet/operations/syncing/addresses/output_ids/account_foundry.rs index 76246b9b14..779227f649 100644 --- a/sdk/src/wallet/operations/syncing/addresses/output_ids/account_foundry.rs +++ b/sdk/src/wallet/operations/syncing/addresses/output_ids/account_foundry.rs @@ -13,9 +13,9 @@ use crate::{ block::{ address::{AccountAddress, Bech32Address, ToBech32Ext}, output::{Output, OutputId}, - ConvertTo, }, }, + utils::ConvertTo, wallet::{operations::syncing::SyncOptions, task, Wallet}, }; diff --git a/sdk/src/wallet/operations/syncing/addresses/output_ids/basic.rs b/sdk/src/wallet/operations/syncing/addresses/output_ids/basic.rs index d709c49a22..4374d0c859 100644 --- a/sdk/src/wallet/operations/syncing/addresses/output_ids/basic.rs +++ b/sdk/src/wallet/operations/syncing/addresses/output_ids/basic.rs @@ -3,7 +3,8 @@ use crate::{ client::{node_api::indexer::query_parameters::BasicOutputQueryParameters, secret::SecretManage}, - types::block::{address::Bech32Address, output::OutputId, ConvertTo}, + types::block::{address::Bech32Address, output::OutputId}, + utils::ConvertTo, wallet::Wallet, }; diff --git a/sdk/src/wallet/operations/syncing/addresses/output_ids/nft.rs b/sdk/src/wallet/operations/syncing/addresses/output_ids/nft.rs index b445d4dfd1..5430bcb009 100644 --- a/sdk/src/wallet/operations/syncing/addresses/output_ids/nft.rs +++ b/sdk/src/wallet/operations/syncing/addresses/output_ids/nft.rs @@ -3,7 +3,8 @@ use crate::{ client::{node_api::indexer::query_parameters::NftOutputQueryParameters, secret::SecretManage}, - types::block::{address::Bech32Address, output::OutputId, ConvertTo}, + types::block::{address::Bech32Address, output::OutputId}, + utils::ConvertTo, wallet::Wallet, }; diff --git a/sdk/src/wallet/operations/transaction/high_level/minting/mint_nfts.rs b/sdk/src/wallet/operations/transaction/high_level/minting/mint_nfts.rs index c9c4400023..b5eb4a945e 100644 --- a/sdk/src/wallet/operations/transaction/high_level/minting/mint_nfts.rs +++ b/sdk/src/wallet/operations/transaction/high_level/minting/mint_nfts.rs @@ -13,8 +13,8 @@ use crate::{ unlock_condition::AddressUnlockCondition, NftId, NftOutputBuilder, }, - ConvertTo, }, + utils::ConvertTo, wallet::{ operations::transaction::{TransactionOptions, TransactionWithMetadata}, Wallet, diff --git a/sdk/src/wallet/operations/transaction/high_level/send.rs b/sdk/src/wallet/operations/transaction/high_level/send.rs index 235572f0e7..dadc527e4b 100644 --- a/sdk/src/wallet/operations/transaction/high_level/send.rs +++ b/sdk/src/wallet/operations/transaction/high_level/send.rs @@ -15,9 +15,8 @@ use crate::{ BasicOutputBuilder, MinimumStorageDepositBasicOutput, }, slot::SlotIndex, - ConvertTo, }, - utils::serde::string, + utils::{serde::string, ConvertTo}, wallet::{ constants::DEFAULT_EXPIRATION_SLOTS, operations::transaction::{TransactionOptions, TransactionWithMetadata}, diff --git a/sdk/src/wallet/operations/transaction/high_level/send_native_tokens.rs b/sdk/src/wallet/operations/transaction/high_level/send_native_tokens.rs index bf02fd7797..3f77ad9e19 100644 --- a/sdk/src/wallet/operations/transaction/high_level/send_native_tokens.rs +++ b/sdk/src/wallet/operations/transaction/high_level/send_native_tokens.rs @@ -16,8 +16,8 @@ use crate::{ BasicOutputBuilder, MinimumStorageDepositBasicOutput, NativeToken, NativeTokens, TokenId, }, slot::SlotIndex, - ConvertTo, }, + utils::ConvertTo, wallet::{ constants::DEFAULT_EXPIRATION_SLOTS, operations::transaction::{TransactionOptions, TransactionWithMetadata}, diff --git a/sdk/src/wallet/operations/transaction/high_level/send_nft.rs b/sdk/src/wallet/operations/transaction/high_level/send_nft.rs index 1eb3dc31f6..33212d22a5 100644 --- a/sdk/src/wallet/operations/transaction/high_level/send_nft.rs +++ b/sdk/src/wallet/operations/transaction/high_level/send_nft.rs @@ -9,8 +9,8 @@ use crate::{ types::block::{ address::Bech32Address, output::{unlock_condition::AddressUnlockCondition, NftId, NftOutputBuilder, Output}, - ConvertTo, }, + utils::ConvertTo, wallet::{ operations::transaction::{TransactionOptions, TransactionWithMetadata}, Wallet, diff --git a/sdk/src/wallet/types/address.rs b/sdk/src/wallet/types/address.rs index a1539ad157..2eced539d4 100644 --- a/sdk/src/wallet/types/address.rs +++ b/sdk/src/wallet/types/address.rs @@ -6,9 +6,12 @@ use std::hash::Hash; use getset::{Getters, Setters}; use serde::{Deserialize, Serialize}; -use crate::types::{ - self, - block::{address::Bech32Address, output::OutputId, ConvertTo}, +use crate::{ + types::{ + self, + block::{address::Bech32Address, output::OutputId}, + }, + utils::ConvertTo, }; /// A BIP44 address. From 69873a99fa6b5d3d9c169a85a2fa3fbd80dcdb1e Mon Sep 17 00:00:00 2001 From: Thibault Martinez Date: Mon, 13 Nov 2023 14:34:48 +0100 Subject: [PATCH 23/91] Fix some errors when compiling types only (#1611) --- sdk/src/types/block/output/account.rs | 35 +++++++++++------------- sdk/src/types/block/output/anchor.rs | 31 +++++++++------------ sdk/src/types/block/output/basic.rs | 29 ++++++++------------ sdk/src/types/block/output/delegation.rs | 31 +++++++++------------ sdk/src/types/block/output/foundry.rs | 35 ++++++++++-------------- sdk/src/types/block/output/nft.rs | 31 +++++++++------------ sdk/src/types/block/unlock/account.rs | 1 + sdk/src/types/block/unlock/anchor.rs | 1 + sdk/src/types/block/unlock/empty.rs | 1 + sdk/src/types/block/unlock/multi.rs | 5 +++- 10 files changed, 89 insertions(+), 111 deletions(-) diff --git a/sdk/src/types/block/output/account.rs b/sdk/src/types/block/output/account.rs index 3dee4b05f3..e389d899c8 100644 --- a/sdk/src/types/block/output/account.rs +++ b/sdk/src/types/block/output/account.rs @@ -1,7 +1,7 @@ // Copyright 2021 IOTA Stiftung // SPDX-License-Identifier: Apache-2.0 -use alloc::{collections::BTreeSet, vec::Vec}; +use alloc::collections::BTreeSet; use hashbrown::HashMap; use packable::{ @@ -11,24 +11,19 @@ use packable::{ Packable, }; -use crate::types::{ - block::{ - address::{AccountAddress, Address}, - output::{ - feature::{verify_allowed_features, Feature, FeatureFlags, Features}, - unlock_condition::{ - verify_allowed_unlock_conditions, UnlockCondition, UnlockConditionFlags, UnlockConditions, - }, - verify_output_amount_min, verify_output_amount_packable, ChainId, NativeToken, NativeTokens, Output, - OutputBuilderAmount, OutputId, Rent, RentStructure, StateTransitionError, StateTransitionVerifier, - }, - payload::signed_transaction::TransactionCapabilityFlag, - protocol::ProtocolParameters, - semantic::{SemanticValidationContext, TransactionFailureReason}, - unlock::Unlock, - Error, +use crate::types::block::{ + address::{AccountAddress, Address}, + output::{ + feature::{verify_allowed_features, Feature, FeatureFlags, Features}, + unlock_condition::{verify_allowed_unlock_conditions, UnlockCondition, UnlockConditionFlags, UnlockConditions}, + verify_output_amount_min, verify_output_amount_packable, ChainId, NativeToken, NativeTokens, Output, + OutputBuilderAmount, OutputId, Rent, RentStructure, StateTransitionError, StateTransitionVerifier, }, - ValidationParams, + payload::signed_transaction::TransactionCapabilityFlag, + protocol::ProtocolParameters, + semantic::{SemanticValidationContext, TransactionFailureReason}, + unlock::Unlock, + Error, }; crate::impl_id!( @@ -623,13 +618,15 @@ fn verify_unlock_conditions(unlock_conditions: &UnlockConditions, account_id: &A #[cfg(feature = "serde")] pub(crate) mod dto { + use alloc::vec::Vec; + use serde::{Deserialize, Serialize}; use super::*; use crate::{ types::{ block::{output::unlock_condition::dto::UnlockConditionDto, Error}, - TryFromDto, + TryFromDto, ValidationParams, }, utils::serde::string, }; diff --git a/sdk/src/types/block/output/anchor.rs b/sdk/src/types/block/output/anchor.rs index 8dccff6276..e6d5c03e8d 100644 --- a/sdk/src/types/block/output/anchor.rs +++ b/sdk/src/types/block/output/anchor.rs @@ -13,24 +13,19 @@ use packable::{ Packable, }; -use crate::types::{ - block::{ - address::{Address, AnchorAddress}, - output::{ - feature::{verify_allowed_features, Feature, FeatureFlags, Features}, - unlock_condition::{ - verify_allowed_unlock_conditions, UnlockCondition, UnlockConditionFlags, UnlockConditions, - }, - verify_output_amount_min, verify_output_amount_packable, ChainId, NativeToken, NativeTokens, Output, - OutputBuilderAmount, OutputId, Rent, RentStructure, StateTransitionError, StateTransitionVerifier, - }, - payload::signed_transaction::TransactionCapabilityFlag, - protocol::ProtocolParameters, - semantic::{SemanticValidationContext, TransactionFailureReason}, - unlock::Unlock, - Error, +use crate::types::block::{ + address::{Address, AnchorAddress}, + output::{ + feature::{verify_allowed_features, Feature, FeatureFlags, Features}, + unlock_condition::{verify_allowed_unlock_conditions, UnlockCondition, UnlockConditionFlags, UnlockConditions}, + verify_output_amount_min, verify_output_amount_packable, ChainId, NativeToken, NativeTokens, Output, + OutputBuilderAmount, OutputId, Rent, RentStructure, StateTransitionError, StateTransitionVerifier, }, - ValidationParams, + payload::signed_transaction::TransactionCapabilityFlag, + protocol::ProtocolParameters, + semantic::{SemanticValidationContext, TransactionFailureReason}, + unlock::Unlock, + Error, }; crate::impl_id!( @@ -711,7 +706,7 @@ pub(crate) mod dto { use crate::{ types::{ block::{output::unlock_condition::dto::UnlockConditionDto, Error}, - TryFromDto, + TryFromDto, ValidationParams, }, utils::serde::{prefix_hex_bytes, string}, }; diff --git a/sdk/src/types/block/output/basic.rs b/sdk/src/types/block/output/basic.rs index 7b99c1c574..9b104a4022 100644 --- a/sdk/src/types/block/output/basic.rs +++ b/sdk/src/types/block/output/basic.rs @@ -5,23 +5,18 @@ use alloc::collections::BTreeSet; use packable::Packable; -use crate::types::{ - block::{ - address::Address, - output::{ - feature::{verify_allowed_features, Feature, FeatureFlags, Features}, - unlock_condition::{ - verify_allowed_unlock_conditions, UnlockCondition, UnlockConditionFlags, UnlockConditions, - }, - verify_output_amount_min, verify_output_amount_packable, NativeToken, NativeTokens, Output, - OutputBuilderAmount, OutputId, Rent, RentStructure, - }, - protocol::ProtocolParameters, - semantic::{SemanticValidationContext, TransactionFailureReason}, - unlock::Unlock, - Error, +use crate::types::block::{ + address::Address, + output::{ + feature::{verify_allowed_features, Feature, FeatureFlags, Features}, + unlock_condition::{verify_allowed_unlock_conditions, UnlockCondition, UnlockConditionFlags, UnlockConditions}, + verify_output_amount_min, verify_output_amount_packable, NativeToken, NativeTokens, Output, + OutputBuilderAmount, OutputId, Rent, RentStructure, }, - ValidationParams, + protocol::ProtocolParameters, + semantic::{SemanticValidationContext, TransactionFailureReason}, + unlock::Unlock, + Error, }; /// Builder for a [`BasicOutput`]. @@ -361,7 +356,7 @@ pub(crate) mod dto { use crate::{ types::{ block::{output::unlock_condition::dto::UnlockConditionDto, Error}, - TryFromDto, + TryFromDto, ValidationParams, }, utils::serde::string, }; diff --git a/sdk/src/types/block/output/delegation.rs b/sdk/src/types/block/output/delegation.rs index 0097d54dc4..1562a35169 100644 --- a/sdk/src/types/block/output/delegation.rs +++ b/sdk/src/types/block/output/delegation.rs @@ -5,24 +5,19 @@ use alloc::collections::BTreeSet; use packable::Packable; -use crate::types::{ - block::{ - address::{AccountAddress, Address}, - output::{ - chain_id::ChainId, - unlock_condition::{ - verify_allowed_unlock_conditions, UnlockCondition, UnlockConditionFlags, UnlockConditions, - }, - verify_output_amount_min, verify_output_amount_packable, Output, OutputBuilderAmount, OutputId, Rent, - RentStructure, StateTransitionError, StateTransitionVerifier, - }, - protocol::ProtocolParameters, - semantic::{SemanticValidationContext, TransactionFailureReason}, - slot::EpochIndex, - unlock::Unlock, - Error, +use crate::types::block::{ + address::{AccountAddress, Address}, + output::{ + chain_id::ChainId, + unlock_condition::{verify_allowed_unlock_conditions, UnlockCondition, UnlockConditionFlags, UnlockConditions}, + verify_output_amount_min, verify_output_amount_packable, Output, OutputBuilderAmount, OutputId, Rent, + RentStructure, StateTransitionError, StateTransitionVerifier, }, - ValidationParams, + protocol::ProtocolParameters, + semantic::{SemanticValidationContext, TransactionFailureReason}, + slot::EpochIndex, + unlock::Unlock, + Error, }; crate::impl_id!( @@ -442,7 +437,7 @@ pub(crate) mod dto { output::{unlock_condition::dto::UnlockConditionDto, OutputBuilderAmount}, Error, }, - TryFromDto, + TryFromDto, ValidationParams, }, utils::serde::string, }; diff --git a/sdk/src/types/block/output/foundry.rs b/sdk/src/types/block/output/foundry.rs index f979bc1a5d..f918872ca5 100644 --- a/sdk/src/types/block/output/foundry.rs +++ b/sdk/src/types/block/output/foundry.rs @@ -12,26 +12,21 @@ use packable::{ }; use primitive_types::U256; -use crate::types::{ - block::{ - address::{AccountAddress, Address}, - output::{ - account::AccountId, - feature::{verify_allowed_features, Feature, FeatureFlags, Features}, - unlock_condition::{ - verify_allowed_unlock_conditions, UnlockCondition, UnlockConditionFlags, UnlockConditions, - }, - verify_output_amount_min, verify_output_amount_packable, ChainId, NativeToken, NativeTokens, Output, - OutputBuilderAmount, OutputId, Rent, RentStructure, StateTransitionError, StateTransitionVerifier, TokenId, - TokenScheme, - }, - payload::signed_transaction::{TransactionCapabilities, TransactionCapabilityFlag}, - protocol::ProtocolParameters, - semantic::{SemanticValidationContext, TransactionFailureReason}, - unlock::Unlock, - Error, +use crate::types::block::{ + address::{AccountAddress, Address}, + output::{ + account::AccountId, + feature::{verify_allowed_features, Feature, FeatureFlags, Features}, + unlock_condition::{verify_allowed_unlock_conditions, UnlockCondition, UnlockConditionFlags, UnlockConditions}, + verify_output_amount_min, verify_output_amount_packable, ChainId, NativeToken, NativeTokens, Output, + OutputBuilderAmount, OutputId, Rent, RentStructure, StateTransitionError, StateTransitionVerifier, TokenId, + TokenScheme, }, - ValidationParams, + payload::signed_transaction::{TransactionCapabilities, TransactionCapabilityFlag}, + protocol::ProtocolParameters, + semantic::{SemanticValidationContext, TransactionFailureReason}, + unlock::Unlock, + Error, }; crate::impl_id!( @@ -679,7 +674,7 @@ pub(crate) mod dto { use crate::{ types::{ block::{output::unlock_condition::dto::UnlockConditionDto, Error}, - TryFromDto, + TryFromDto, ValidationParams, }, utils::serde::string, }; diff --git a/sdk/src/types/block/output/nft.rs b/sdk/src/types/block/output/nft.rs index 28c32ff138..599d451d07 100644 --- a/sdk/src/types/block/output/nft.rs +++ b/sdk/src/types/block/output/nft.rs @@ -10,24 +10,19 @@ use packable::{ Packable, }; -use crate::types::{ - block::{ - address::{Address, NftAddress}, - output::{ - feature::{verify_allowed_features, Feature, FeatureFlags, Features}, - unlock_condition::{ - verify_allowed_unlock_conditions, UnlockCondition, UnlockConditionFlags, UnlockConditions, - }, - verify_output_amount_min, verify_output_amount_packable, ChainId, NativeToken, NativeTokens, Output, - OutputBuilderAmount, OutputId, Rent, RentStructure, StateTransitionError, StateTransitionVerifier, - }, - payload::signed_transaction::TransactionCapabilityFlag, - protocol::ProtocolParameters, - semantic::{SemanticValidationContext, TransactionFailureReason}, - unlock::Unlock, - Error, +use crate::types::block::{ + address::{Address, NftAddress}, + output::{ + feature::{verify_allowed_features, Feature, FeatureFlags, Features}, + unlock_condition::{verify_allowed_unlock_conditions, UnlockCondition, UnlockConditionFlags, UnlockConditions}, + verify_output_amount_min, verify_output_amount_packable, ChainId, NativeToken, NativeTokens, Output, + OutputBuilderAmount, OutputId, Rent, RentStructure, StateTransitionError, StateTransitionVerifier, }, - ValidationParams, + payload::signed_transaction::TransactionCapabilityFlag, + protocol::ProtocolParameters, + semantic::{SemanticValidationContext, TransactionFailureReason}, + unlock::Unlock, + Error, }; crate::impl_id!( @@ -541,7 +536,7 @@ pub(crate) mod dto { use crate::{ types::{ block::{output::unlock_condition::dto::UnlockConditionDto, Error}, - TryFromDto, + TryFromDto, ValidationParams, }, utils::serde::string, }; diff --git a/sdk/src/types/block/unlock/account.rs b/sdk/src/types/block/unlock/account.rs index 25ade32fcd..f8f7872ac3 100644 --- a/sdk/src/types/block/unlock/account.rs +++ b/sdk/src/types/block/unlock/account.rs @@ -36,6 +36,7 @@ impl AccountUnlock { } } +#[cfg(feature = "serde")] mod dto { use serde::{Deserialize, Serialize}; diff --git a/sdk/src/types/block/unlock/anchor.rs b/sdk/src/types/block/unlock/anchor.rs index cc9f6d9e64..aad3c49b78 100644 --- a/sdk/src/types/block/unlock/anchor.rs +++ b/sdk/src/types/block/unlock/anchor.rs @@ -36,6 +36,7 @@ impl AnchorUnlock { } } +#[cfg(feature = "serde")] mod dto { use serde::{Deserialize, Serialize}; diff --git a/sdk/src/types/block/unlock/empty.rs b/sdk/src/types/block/unlock/empty.rs index a4b89ff15a..2449e7668f 100644 --- a/sdk/src/types/block/unlock/empty.rs +++ b/sdk/src/types/block/unlock/empty.rs @@ -11,6 +11,7 @@ impl EmptyUnlock { pub const KIND: u8 = 6; } +#[cfg(feature = "serde")] mod dto { use serde::{Deserialize, Serialize}; diff --git a/sdk/src/types/block/unlock/multi.rs b/sdk/src/types/block/unlock/multi.rs index 024a9d8c88..99a2f2f0fd 100644 --- a/sdk/src/types/block/unlock/multi.rs +++ b/sdk/src/types/block/unlock/multi.rs @@ -1,7 +1,7 @@ // Copyright 2023 IOTA Stiftung // SPDX-License-Identifier: Apache-2.0 -use alloc::{boxed::Box, vec::Vec}; +use alloc::boxed::Box; use derive_more::Deref; use packable::{prefix::BoxedSlicePrefix, Packable}; @@ -46,7 +46,10 @@ fn verify_unlocks(unlocks: &[Unlock], _visitor: &()) -> Resu } } +#[cfg(feature = "serde")] mod dto { + use alloc::vec::Vec; + use serde::{Deserialize, Serialize}; use super::*; From 1ff3657da434402928ab9ee0e4295fcb75b27193 Mon Sep 17 00:00:00 2001 From: Thoralf-M <46689931+Thoralf-M@users.noreply.github.com> Date: Mon, 13 Nov 2023 14:36:26 +0100 Subject: [PATCH 24/91] Python add NativeTokenFeature (#1605) * Python add NativeTokenFeature * format * Fix where feature can be * Fix NativeTokenFeature type * Update examples * .type --- .../examples/client/05_get_address_balance.py | 8 +++-- .../consolidate_outputs.py | 8 +++-- bindings/python/iota_sdk/client/client.py | 29 ---------------- bindings/python/iota_sdk/types/feature.py | 32 +++++++++++++---- bindings/python/iota_sdk/types/output.py | 34 +++++-------------- bindings/python/iota_sdk/wallet/account.py | 4 +-- 6 files changed, 47 insertions(+), 68 deletions(-) diff --git a/bindings/python/examples/client/05_get_address_balance.py b/bindings/python/examples/client/05_get_address_balance.py index be1745f320..d849fd69ea 100644 --- a/bindings/python/examples/client/05_get_address_balance.py +++ b/bindings/python/examples/client/05_get_address_balance.py @@ -2,7 +2,7 @@ from dotenv import load_dotenv -from iota_sdk import Client, NodeIndexerAPI +from iota_sdk import Client, NodeIndexerAPI, FeatureType load_dotenv() @@ -35,8 +35,10 @@ for output_with_metadata in outputs: output = output_with_metadata.output total_amount += output.amount - if output.native_tokens: - native_tokens.append(output.native_tokens) + native_token = [feature for feature in output.features if feature.type + == FeatureType.NativeToken] + if native_token: + native_tokens.append(native_token) print( f'Outputs controlled by {ADDRESS} have {total_amount} glow and native tokens: {native_tokens}') diff --git a/bindings/python/examples/how_tos/accounts_and_addresses/consolidate_outputs.py b/bindings/python/examples/how_tos/accounts_and_addresses/consolidate_outputs.py index 129a53de1e..6bf89a6d0c 100644 --- a/bindings/python/examples/how_tos/accounts_and_addresses/consolidate_outputs.py +++ b/bindings/python/examples/how_tos/accounts_and_addresses/consolidate_outputs.py @@ -2,7 +2,7 @@ from dotenv import load_dotenv -from iota_sdk import ConsolidationParams, Utils, Wallet +from iota_sdk import ConsolidationParams, Utils, Wallet, FeatureType # In this example we will consolidate basic outputs from an account with only an AddressUnlockCondition by sending # them to the same address again. @@ -38,7 +38,8 @@ '- address: {}\n- amount: {}\n- native tokens: {}'.format( Utils.hex_to_bech32(output_data.address.pub_key_hash, 'rms'), output_data.output.amount, - output_data.output.native_tokens + [feature for feature in output_data.output.features if feature.type + == FeatureType.NativeToken] ) ) @@ -71,6 +72,7 @@ '- address: {}\n- amount: {}\n- native tokens: {}'.format( Utils.hex_to_bech32(output_data.address.pub_key_hash, 'rms'), output_data.output.amount, - output_data.output.native_tokens + [feature for feature in output_data.output.features if feature.type + == FeatureType.NativeToken] ) ) diff --git a/bindings/python/iota_sdk/client/client.py b/bindings/python/iota_sdk/client/client.py index fbcd621509..06e38a42cc 100644 --- a/bindings/python/iota_sdk/client/client.py +++ b/bindings/python/iota_sdk/client/client.py @@ -14,7 +14,6 @@ from iota_sdk.types.block.signed_block import UnsignedBlock from iota_sdk.types.common import HexStr, Node from iota_sdk.types.feature import Feature -from iota_sdk.types.native_token import NativeToken from iota_sdk.types.network_info import NetworkInfo from iota_sdk.types.output import AccountOutput, BasicOutput, FoundryOutput, NftOutput, deserialize_output from iota_sdk.types.payload import Payload @@ -151,7 +150,6 @@ def build_account_output(self, unlock_conditions: List[UnlockCondition], amount: Optional[int] = None, mana: Optional[int] = None, - native_tokens: Optional[List[NativeToken]] = None, foundry_counter: Optional[int] = None, features: Optional[List[Feature]] = None, immutable_features: Optional[List[Feature]] = None) -> AccountOutput: @@ -162,7 +160,6 @@ def build_account_output(self, unlock_conditions: The unlock conditions for the new output. amount: The amount of base coins in the new output. mana: Amount of stored Mana held by this output. - native_tokens: Native tokens added to the new output. foundry_counter: A counter that denotes the number of foundries created by this account output. features: A list of features. immutable_features: A list of immutable features. @@ -174,10 +171,6 @@ def build_account_output(self, unlock_conditions = [unlock_condition.to_dict() for unlock_condition in unlock_conditions] - if native_tokens: - native_tokens = [native_token.to_dict() - for native_token in native_tokens] - if features: features = [feature.to_dict() for feature in features] if immutable_features: @@ -195,7 +188,6 @@ def build_account_output(self, 'unlockConditions': unlock_conditions, 'amount': amount, 'mana': mana, - 'nativeTokens': native_tokens, 'foundryCounter': foundry_counter, 'features': features, 'immutableFeatures': immutable_features @@ -205,7 +197,6 @@ def build_basic_output(self, unlock_conditions: List[UnlockCondition], amount: Optional[int] = None, mana: Optional[int] = None, - native_tokens: Optional[List[NativeToken]] = None, features: Optional[List[Feature]] = None) -> BasicOutput: """Build a BasicOutput. @@ -213,7 +204,6 @@ def build_basic_output(self, unlock_conditions: The unlock conditions for the new output. amount: The amount of base coins in the new output. mana: Amount of stored Mana held by this output. - native_tokens: Native tokens added to the new output. features: Features that add utility to the output but do not impose unlocking conditions. Returns: @@ -223,10 +213,6 @@ def build_basic_output(self, unlock_conditions = [unlock_condition.to_dict() for unlock_condition in unlock_conditions] - if native_tokens: - native_tokens = [native_token.to_dict() - for native_token in native_tokens] - if features: features = [feature.to_dict() for feature in features] @@ -240,7 +226,6 @@ def build_basic_output(self, 'unlockConditions': unlock_conditions, 'amount': amount, 'mana': mana, - 'nativeTokens': native_tokens, 'features': features, })) @@ -249,7 +234,6 @@ def build_foundry_output(self, token_scheme: SimpleTokenScheme, unlock_conditions: List[UnlockCondition], amount: Optional[int] = None, - native_tokens: Optional[List[NativeToken]] = None, features: Optional[List[Feature]] = None, immutable_features: Optional[List[Feature]] = None) -> FoundryOutput: """Build a FoundryOutput. @@ -259,7 +243,6 @@ def build_foundry_output(self, token_scheme: Defines the supply control scheme of the tokens controlled by the foundry. Currently only a simple scheme is supported. unlock_conditions: The unlock conditions for the new output. amount: The amount of base coins in the new output. - native_tokens: Native tokens added to the new output. features: Features that add utility to the output but do not impose unlocking conditions. immutable_features: Features that add utility to the output but do not impose unlocking conditions. These features need to be kept in future transitions of the UTXO state machine. @@ -270,10 +253,6 @@ def build_foundry_output(self, unlock_conditions = [unlock_condition.to_dict() for unlock_condition in unlock_conditions] - if native_tokens: - native_tokens = [native_token.__dict__ - for native_token in native_tokens] - if features: features = [feature.to_dict() for feature in features] if immutable_features: @@ -288,7 +267,6 @@ def build_foundry_output(self, 'tokenScheme': token_scheme.to_dict(), 'unlockConditions': unlock_conditions, 'amount': amount, - 'nativeTokens': native_tokens, 'features': features, 'immutableFeatures': immutable_features })) @@ -298,7 +276,6 @@ def build_nft_output(self, unlock_conditions: List[UnlockCondition], amount: Optional[int] = None, mana: Optional[int] = None, - native_tokens: Optional[List[NativeToken]] = None, features: Optional[List[Feature]] = None, immutable_features: Optional[List[Feature]] = None) -> NftOutput: """Build an NftOutput. @@ -308,7 +285,6 @@ def build_nft_output(self, unlock_conditions: The unlock conditions for the new output. amount: The amount of base coins in the new output. mana: Amount of stored Mana held by this output. - native_tokens: Native tokens added to the new output. features: Features that add utility to the output but do not impose unlocking conditions. immutable_features: Features that add utility to the output but do not impose unlocking conditions. These features need to be kept in future transitions of the UTXO state machine. @@ -319,10 +295,6 @@ def build_nft_output(self, unlock_conditions = [unlock_condition.to_dict() for unlock_condition in unlock_conditions] - if native_tokens: - native_tokens = [native_token.__dict__ - for native_token in native_tokens] - if features: features = [feature.to_dict() for feature in features] if immutable_features: @@ -340,7 +312,6 @@ def build_nft_output(self, 'unlockConditions': unlock_conditions, 'amount': amount, 'mana': mana, - 'nativeTokens': native_tokens, 'features': features, 'immutableFeatures': immutable_features })) diff --git a/bindings/python/iota_sdk/types/feature.py b/bindings/python/iota_sdk/types/feature.py index 7b392f2ca1..cb4064f4ac 100644 --- a/bindings/python/iota_sdk/types/feature.py +++ b/bindings/python/iota_sdk/types/feature.py @@ -7,7 +7,7 @@ from dataclasses_json import config from iota_sdk.types.address import Address, deserialize_address from iota_sdk.types.block_issuer_key import BlockIssuerKey -from iota_sdk.types.common import EpochIndex, HexStr, json, SlotIndex +from iota_sdk.types.common import EpochIndex, HexStr, hex_str_decoder, json, SlotIndex class FeatureType(IntEnum): @@ -18,15 +18,17 @@ class FeatureType(IntEnum): Issuer (1): The issuer feature. Metadata (2): The metadata feature. Tag (3): The tag feature. - BlockIssuer (4): The block issuer feature. - Staking (5): The staking feature. + NativeToken (4): The native token feature. + BlockIssuer (5): The block issuer feature. + Staking (6): The staking feature. """ Sender = 0 Issuer = 1 Metadata = 2 Tag = 3 - BlockIssuer = 4 - Staking = 5 + NativeToken = 4 + BlockIssuer = 5 + Staking = 6 @json @@ -88,6 +90,22 @@ class TagFeature: type: int = field(default_factory=lambda: int(FeatureType.Tag), init=False) +@json +@dataclass +class NativeTokenFeature: + """Contains a native token. + id: The unique identifier of the native token. + amount: The amount of native tokens. + """ + id: HexStr + amount: int = field(metadata=config( + encoder=hex, + decoder=hex_str_decoder, + )) + type: int = field(default_factory=lambda: int( + FeatureType.NativeToken), init=False) + + @json @dataclass class BlockIssuerFeature: @@ -129,7 +147,7 @@ class StakingFeature: Feature: TypeAlias = Union[SenderFeature, IssuerFeature, - MetadataFeature, TagFeature, BlockIssuerFeature, StakingFeature] + MetadataFeature, TagFeature, NativeTokenFeature, BlockIssuerFeature, StakingFeature] def deserialize_feature(d: Dict[str, Any]) -> Feature: @@ -148,6 +166,8 @@ def deserialize_feature(d: Dict[str, Any]) -> Feature: return MetadataFeature.from_dict(d) if feature_type == FeatureType.Tag: return TagFeature.from_dict(d) + if feature_type == FeatureType.NativeToken: + return NativeTokenFeature.from_dict(d) if feature_type == FeatureType.BlockIssuer: return BlockIssuerFeature.from_dict(d) if feature_type == FeatureType.Staking: diff --git a/bindings/python/iota_sdk/types/output.py b/bindings/python/iota_sdk/types/output.py index 92769c780a..345bd73fab 100644 --- a/bindings/python/iota_sdk/types/output.py +++ b/bindings/python/iota_sdk/types/output.py @@ -7,8 +7,7 @@ from dataclasses import dataclass, field from dataclasses_json import config from iota_sdk.types.common import HexStr, json, EpochIndex -from iota_sdk.types.feature import deserialize_features, SenderFeature, IssuerFeature, MetadataFeature, TagFeature -from iota_sdk.types.native_token import NativeToken +from iota_sdk.types.feature import deserialize_features, SenderFeature, IssuerFeature, MetadataFeature, TagFeature, NativeTokenFeature from iota_sdk.types.token_scheme import SimpleTokenScheme from iota_sdk.types.unlock_condition import deserialize_unlock_conditions, AddressUnlockCondition, StateControllerAddressUnlockCondition, GovernorAddressUnlockCondition, StorageDepositReturnUnlockCondition, TimelockUnlockCondition, ExpirationUnlockCondition, ImmutableAccountAddressUnlockCondition @@ -46,8 +45,6 @@ class BasicOutput: The conditions to unlock the output. features : Features that add utility to the output but do not impose unlocking conditions. - native_tokens : - Native tokens added to the new output. type : The type of output. """ @@ -62,11 +59,10 @@ class BasicOutput: decoder=deserialize_unlock_conditions )) features: Optional[List[Union[SenderFeature, - MetadataFeature, TagFeature]]] = field(default=None, - metadata=config( - decoder=deserialize_features - )) - native_tokens: Optional[List[NativeToken]] = None + MetadataFeature, TagFeature, NativeTokenFeature]]] = field(default=None, + metadata=config( + decoder=deserialize_features + )) type: int = field( default_factory=lambda: int( OutputType.Basic), @@ -90,8 +86,6 @@ class AccountOutput: A counter that denotes the number of foundries created by this account output. features : Features that add utility to the output but do not impose unlocking conditions. - native_tokens : - Native tokens added to the new output. immutable_features : Features that add utility to the output but do not impose unlocking conditions. These features need to be kept in future transitions of the UTXO state machine. type : @@ -119,7 +113,6 @@ class AccountOutput: metadata=config( decoder=deserialize_features )) - native_tokens: Optional[List[NativeToken]] = None type: int = field( default_factory=lambda: int( OutputType.Account), @@ -147,8 +140,6 @@ class AnchorOutput: Features that add utility to the output but do not impose unlocking conditions. These features need to be kept in future transitions of the UTXO state machine. state_metadata : Metadata that can only be changed by the state controller. - native_tokens : - Native tokens added to the new output. type : The type of output. """ @@ -176,7 +167,6 @@ class AnchorOutput: decoder=deserialize_features )) state_metadata: Optional[HexStr] = None - native_tokens: Optional[List[NativeToken]] = None type: int = field( default_factory=lambda: int( OutputType.Anchor), @@ -194,8 +184,6 @@ class FoundryOutput: The conditions to unlock the output. features : Features that add utility to the output but do not impose unlocking conditions. - native_tokens : - Native tokens added to the new output. immutable_features : Features that add utility to the output but do not impose unlocking conditions. These features need to be kept in future transitions of the UTXO state machine. serial_number : @@ -211,15 +199,14 @@ class FoundryOutput: serial_number: int token_scheme: SimpleTokenScheme unlock_conditions: List[ImmutableAccountAddressUnlockCondition] - features: Optional[List[MetadataFeature]] = field(default=None, - metadata=config( - decoder=deserialize_features - )) + features: Optional[List[Union[MetadataFeature, NativeTokenFeature]]] = field(default=None, + metadata=config( + decoder=deserialize_features + )) immutable_features: Optional[List[MetadataFeature]] = field(default=None, metadata=config( decoder=deserialize_features )) - native_tokens: Optional[List[NativeToken]] = None type: int = field( default_factory=lambda: int( OutputType.Foundry), @@ -241,8 +228,6 @@ class NftOutput: The NFT ID if it's an NFT output. features : Features that add utility to the output but do not impose unlocking conditions. - native_tokens : - Native tokens added to the new output. immutable_features : Features that add utility to the output but do not impose unlocking conditions. These features need to be kept in future transitions of the UTXO state machine. type : @@ -270,7 +255,6 @@ class NftOutput: metadata=config( decoder=deserialize_features )) - native_tokens: Optional[List[NativeToken]] = None type: int = field(default_factory=lambda: int(OutputType.Nft), init=False) diff --git a/bindings/python/iota_sdk/wallet/account.py b/bindings/python/iota_sdk/wallet/account.py index 7219e560e9..1d0a463097 100644 --- a/bindings/python/iota_sdk/wallet/account.py +++ b/bindings/python/iota_sdk/wallet/account.py @@ -283,7 +283,7 @@ def accounts(self) -> List[OutputData]: """ outputs = self._call_account_method( 'accounts' - ) + ) return [from_dict(OutputData, o) for o in outputs] def implicit_accounts(self) -> List[OutputData]: @@ -291,7 +291,7 @@ def implicit_accounts(self) -> List[OutputData]: """ outputs = self._call_account_method( 'implicitAccounts' - ) + ) return [from_dict(OutputData, o) for o in outputs] def incoming_transactions(self) -> List[TransactionWithMetadata]: From 5ca64a3ed754ae9e6fad69273cf0535a9c691bec Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tadeusz=20So=C5=9Bnierz?= Date: Mon, 13 Nov 2023 15:08:11 +0100 Subject: [PATCH 25/91] Allow more features and native tokens in implicit account outputs (#1612) Co-authored-by: Thibault Martinez --- sdk/src/types/block/output/basic.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sdk/src/types/block/output/basic.rs b/sdk/src/types/block/output/basic.rs index 9b104a4022..0eb2281963 100644 --- a/sdk/src/types/block/output/basic.rs +++ b/sdk/src/types/block/output/basic.rs @@ -308,7 +308,7 @@ impl BasicOutput { /// Checks whether the basic output is an implicit account. pub fn is_implicit_account(&self) -> bool { if let [UnlockCondition::Address(uc)] = self.unlock_conditions().as_ref() { - uc.address().is_implicit_account_creation() && self.native_tokens.is_empty() && self.features.is_empty() + uc.address().is_implicit_account_creation() } else { false } From 097f22ebf8ac3647ce7d17dcb07e731ab3185f04 Mon Sep 17 00:00:00 2001 From: Thoralf-M <46689931+Thoralf-M@users.noreply.github.com> Date: Mon, 13 Nov 2023 15:16:08 +0100 Subject: [PATCH 26/91] Add VerifySemantic to bindings (#1608) * Add verify semantic to bindings * VerifyTransactionSemantic * Fix return type --- bindings/core/src/method/utils.rs | 29 ++++++++++++------- bindings/core/src/method_handler/utils.rs | 20 ++++++++++++- bindings/core/src/response.rs | 3 ++ bindings/nodejs/CHANGELOG.md | 4 +++ .../nodejs/lib/types/utils/bridge/index.ts | 4 ++- .../nodejs/lib/types/utils/bridge/utils.ts | 10 +++++++ bindings/nodejs/lib/utils/utils.ts | 25 ++++++++++++++++ bindings/python/CHANGELOG.md | 6 ++++ bindings/python/iota_sdk/utils.py | 12 ++++++++ bindings/wasm/CHANGELOG.md | 4 +++ 10 files changed, 105 insertions(+), 12 deletions(-) diff --git a/bindings/core/src/method/utils.rs b/bindings/core/src/method/utils.rs index 8ebf932b81..fc4ba5c0c6 100644 --- a/bindings/core/src/method/utils.rs +++ b/bindings/core/src/method/utils.rs @@ -2,18 +2,21 @@ // SPDX-License-Identifier: Apache-2.0 use derivative::Derivative; -use iota_sdk::types::block::{ - address::{Bech32Address, Hrp}, - output::{dto::OutputDto, AliasId, NftId, OutputId, RentStructure}, - payload::{ - dto::MilestonePayloadDto, - transaction::{ - dto::{TransactionEssenceDto, TransactionPayloadDto}, - TransactionId, +use iota_sdk::{ + client::secret::types::InputSigningDataDto, + types::block::{ + address::{Bech32Address, Hrp}, + output::{dto::OutputDto, AliasId, NftId, OutputId, RentStructure}, + payload::{ + dto::MilestonePayloadDto, + transaction::{ + dto::{TransactionEssenceDto, TransactionPayloadDto}, + TransactionId, + }, }, + signature::dto::Ed25519SignatureDto, + BlockDto, }, - signature::dto::Ed25519SignatureDto, - BlockDto, }; use serde::{Deserialize, Serialize}; @@ -159,4 +162,10 @@ pub enum UtilsMethod { /// Returns the hex representation of the serialized output bytes. #[serde(rename_all = "camelCase")] OutputHexBytes { output: OutputDto }, + /// Verifies the semantic of a transaction. + VerifyTransactionSemantic { + inputs: Vec, + transaction: TransactionPayloadDto, + time: u32, + }, } diff --git a/bindings/core/src/method_handler/utils.rs b/bindings/core/src/method_handler/utils.rs index cc316bae05..70a93d1ec4 100644 --- a/bindings/core/src/method_handler/utils.rs +++ b/bindings/core/src/method_handler/utils.rs @@ -3,7 +3,10 @@ use crypto::keys::bip39::Mnemonic; use iota_sdk::{ - client::{hex_public_key_to_bech32_address, hex_to_bech32, verify_mnemonic, Client}, + client::{ + api::verify_semantic, hex_public_key_to_bech32_address, hex_to_bech32, secret::types::InputSigningData, + verify_mnemonic, Client, + }, types::{ block::{ address::{dto::AddressDto, Address, AliasAddress, ToBech32Ext}, @@ -114,6 +117,21 @@ pub(crate) fn call_utils_method_internal(method: UtilsMethod) -> Result { + let conflict = verify_semantic( + &inputs + .into_iter() + .map(InputSigningData::try_from_dto) + .collect::>>()?, + &TransactionPayload::try_from_dto(transaction)?, + time, + )?; + Response::ConflictReason(conflict) + } }; Ok(response) } diff --git a/bindings/core/src/response.rs b/bindings/core/src/response.rs index c5d2b6f05e..69022b0d56 100644 --- a/bindings/core/src/response.rs +++ b/bindings/core/src/response.rs @@ -32,6 +32,7 @@ use iota_sdk::{ transaction::TransactionId, }, protocol::ProtocolParameters, + semantic::ConflictReason, signature::dto::Ed25519SignatureDto, unlock::dto::UnlockDto, BlockDto, BlockId, @@ -232,6 +233,8 @@ pub enum Response { HexBytes(String), /// Response for [`CallPluginRoute`](crate::method::ClientMethod::CallPluginRoute) CustomJson(serde_json::Value), + /// Response for [`VerifyTransactionSemantic`](crate::method::UtilsMethod::VerifyTransactionSemantic). + ConflictReason(ConflictReason), // Responses in client and wallet /// Response for: diff --git a/bindings/nodejs/CHANGELOG.md b/bindings/nodejs/CHANGELOG.md index 20f8b39bf0..262b03f24b 100644 --- a/bindings/nodejs/CHANGELOG.md +++ b/bindings/nodejs/CHANGELOG.md @@ -21,6 +21,10 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## 1.1.4 - 2023-MM-DD +### Added + +- `Utils:verifyTransactionSemantic()`; + ### Fixed - `StateMetadataOutput`'s constructor not setting the `stateMetadata` field; diff --git a/bindings/nodejs/lib/types/utils/bridge/index.ts b/bindings/nodejs/lib/types/utils/bridge/index.ts index fd3574dbe7..989a73c4a4 100644 --- a/bindings/nodejs/lib/types/utils/bridge/index.ts +++ b/bindings/nodejs/lib/types/utils/bridge/index.ts @@ -25,6 +25,7 @@ import type { __FaucetMethod__, __OutputIdToUtxoInput__, __OutputHexBytes__, + __VerifyTransactionSemantic__, } from './utils'; export type __UtilsMethods__ = @@ -53,4 +54,5 @@ export type __UtilsMethods__ = | __VerifyMnemonicMethod__ | __FaucetMethod__ | __OutputIdToUtxoInput__ - | __OutputHexBytes__; + | __OutputHexBytes__ + | __VerifyTransactionSemantic__; diff --git a/bindings/nodejs/lib/types/utils/bridge/utils.ts b/bindings/nodejs/lib/types/utils/bridge/utils.ts index 6eff28d30e..e14b747f41 100644 --- a/bindings/nodejs/lib/types/utils/bridge/utils.ts +++ b/bindings/nodejs/lib/types/utils/bridge/utils.ts @@ -14,6 +14,7 @@ import { Bech32Address, } from '../../'; import { AliasId } from '../../block/id'; +import { InputSigningData } from '../../client'; export interface __GenerateMnemonicMethod__ { name: 'generateMnemonic'; @@ -205,3 +206,12 @@ export interface __OutputHexBytes__ { output: Output; }; } + +export interface __VerifyTransactionSemantic__ { + name: 'verifyTransactionSemantic'; + data: { + inputs: InputSigningData[]; + transaction: TransactionPayload; + time: number; + }; +} diff --git a/bindings/nodejs/lib/utils/utils.ts b/bindings/nodejs/lib/utils/utils.ts index c4cfc62ec8..22c10a322a 100644 --- a/bindings/nodejs/lib/utils/utils.ts +++ b/bindings/nodejs/lib/utils/utils.ts @@ -17,6 +17,7 @@ import { IRent, OutputId, Bech32Address, + InputSigningData, } from '../types'; import { AliasId, BlockId, FoundryId, NftId, TokenId } from '../types/block/id'; @@ -420,4 +421,28 @@ export class Utils { }); return hexBytes; } + + /** + * Verifies the semantic of a transaction. + * + * @param inputs The inputs data. + * @param transaction The transaction payload. + * @param time The unix time for which to do the validation, should be roughly the one of the milestone that will reference the transaction. + * @returns The conflict reason. + */ + static verifyTransactionSemantic( + inputs: InputSigningData[], + transaction: TransactionPayload, + time: number, + ): string { + const conflictReason = callUtilsMethod({ + name: 'verifyTransactionSemantic', + data: { + inputs, + transaction, + time, + }, + }); + return conflictReason; + } } diff --git a/bindings/python/CHANGELOG.md b/bindings/python/CHANGELOG.md index cc2fe08cf3..2e4d292eb3 100644 --- a/bindings/python/CHANGELOG.md +++ b/bindings/python/CHANGELOG.md @@ -19,6 +19,12 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Security --> +## 1.1.2 - 2023-MM-DD + +### Added + +- `Utils:verify_transaction_semantic()`; + ## 1.1.1 - 2023-10-31 ### Added diff --git a/bindings/python/iota_sdk/utils.py b/bindings/python/iota_sdk/utils.py index 8c18f3e7e4..531654e5df 100644 --- a/bindings/python/iota_sdk/utils.py +++ b/bindings/python/iota_sdk/utils.py @@ -11,6 +11,7 @@ from iota_sdk.types.common import HexStr from iota_sdk.types.output_id import OutputId from iota_sdk.types.output import Output +from iota_sdk.types.transaction_data import InputSigningData from iota_sdk.external import call_utils_method from iota_sdk.types.payload import TransactionPayload @@ -218,6 +219,17 @@ def verify_secp256k1_ecdsa_signature( 'message': message, }) + @staticmethod + def verify_transaction_semantic( + inputs: List[InputSigningData], transaction: TransactionPayload, time: int) -> str: + """Verifies the semantic of a transaction. + """ + return _call_method('verifyTransactionSemantic', { + 'inputs': [i.as_dict() for i in inputs], + 'transaction': transaction.as_dict(), + 'time': time, + }) + class UtilsError(Exception): """A utils error.""" diff --git a/bindings/wasm/CHANGELOG.md b/bindings/wasm/CHANGELOG.md index 89082904b7..2f0865665c 100644 --- a/bindings/wasm/CHANGELOG.md +++ b/bindings/wasm/CHANGELOG.md @@ -19,6 +19,10 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Security --> +## 1.1.2 - 2023-MM-DD + +Same changes as https://github.com/iotaledger/iota-sdk/blob/develop/bindings/nodejs/CHANGELOG.md. + ## 1.1.1 - 2023-10-16 ### Fixed From 6b227880073094df7ccb52c6aecfc3e4fd51a6b3 Mon Sep 17 00:00:00 2001 From: Thoralf-M <46689931+Thoralf-M@users.noreply.github.com> Date: Mon, 13 Nov 2023 18:04:21 +0100 Subject: [PATCH 27/91] Nodejs update examples to single account wallet (#1596) * Nodejs single account wallet examples * Address review comments * Update bindings/python/examples/how_tos/accounts_and_addresses/consolidate_outputs.py Co-authored-by: Thibault Martinez * Format * More rename * Add missing awaits --------- Co-authored-by: Thibault Martinez Co-authored-by: Thibault Martinez --- bindings/nodejs/README.md | 6 +- .../examples/exchange/1-create-account.ts | 61 -------- .../examples/exchange/1-create-wallet.ts | 74 ++++++++++ .../examples/exchange/2-generate-address.ts | 40 ------ .../examples/exchange/3-check-balance.ts | 10 +- .../examples/exchange/4-listen-events.ts | 8 +- .../nodejs/examples/exchange/5-send-amount.ts | 7 +- .../examples/how_tos/account_output/create.ts | 15 +- .../how_tos/account_output/destroy.ts | 15 +- .../how_tos/account_wallet/request-funds.ts | 9 +- .../how_tos/account_wallet/transaction.ts | 14 +- .../accounts_and_addresses/check-balance.ts | 6 +- .../consolidate-outputs.ts | 24 ++-- .../accounts_and_addresses/create-address.ts | 38 ----- .../accounts_and_addresses/create-wallet.ts | 4 +- .../accounts_and_addresses/list-accounts.ts | 7 +- .../accounts_and_addresses/list-addresses.ts | 33 ----- .../accounts_and_addresses/list-outputs.ts | 10 +- .../list-transactions.ts | 10 +- .../advanced_transaction.ts | 8 +- .../claim_transaction.ts | 12 +- .../send_micro_transaction.ts | 8 +- .../examples/how_tos/native_tokens/burn.ts | 19 ++- .../examples/how_tos/native_tokens/create.ts | 25 ++-- .../how_tos/native_tokens/destroy-foundry.ts | 21 ++- .../examples/how_tos/native_tokens/melt.ts | 19 ++- .../examples/how_tos/native_tokens/mint.ts | 19 ++- .../examples/how_tos/native_tokens/send.ts | 19 ++- .../nft_collection/00_mint_issuer_nft.ts | 13 +- .../nft_collection/01_mint_collection_nft.ts | 16 +-- .../nodejs/examples/how_tos/nfts/burn_nft.ts | 19 +-- .../nodejs/examples/how_tos/nfts/mint_nft.ts | 20 ++- .../nodejs/examples/how_tos/nfts/send_nft.ts | 17 +-- .../simple_transaction/request-funds.ts | 5 +- .../simple_transaction/simple-transaction.ts | 6 +- .../wallet/06-send-micro-transaction.ts | 13 +- .../wallet/17-check-unlock-conditions.ts | 27 ++-- bindings/nodejs/examples/wallet/common.ts | 12 +- bindings/nodejs/examples/wallet/events.ts | 7 +- .../nodejs/examples/wallet/getting-started.ts | 64 +++++---- .../migrate-stronghold-snapshot-v2-to-v3.ts | 40 +----- bindings/nodejs/lib/types/wallet/address.ts | 4 +- .../lib/types/wallet/transaction-options.ts | 4 +- bindings/nodejs/lib/types/wallet/wallet.ts | 2 +- bindings/nodejs/lib/wallet/wallet.ts | 18 +-- bindings/nodejs/tests/wallet/wallet.spec.ts | 136 +++++++----------- .../examples/exchange/1_create_account.py | 2 +- .../consolidate_outputs.py | 2 +- .../accounts_and_addresses/create_account.py | 2 +- bindings/python/examples/wallet/backup.py | 2 +- bindings/python/examples/wallet/logger.py | 2 +- bindings/python/iota_sdk/types/send_params.py | 4 +- bindings/wasm/examples/node.js | 39 +++-- bindings/wasm/test/account.spec.ts | 2 +- .../high_level/minting/mint_nfts.rs | 2 +- .../operations/transaction/high_level/send.rs | 2 +- .../high_level/send_native_tokens.rs | 2 +- 57 files changed, 401 insertions(+), 624 deletions(-) delete mode 100644 bindings/nodejs/examples/exchange/1-create-account.ts create mode 100644 bindings/nodejs/examples/exchange/1-create-wallet.ts delete mode 100644 bindings/nodejs/examples/exchange/2-generate-address.ts delete mode 100644 bindings/nodejs/examples/how_tos/accounts_and_addresses/create-address.ts delete mode 100644 bindings/nodejs/examples/how_tos/accounts_and_addresses/list-addresses.ts diff --git a/bindings/nodejs/README.md b/bindings/nodejs/README.md index 1c560ab0d4..abac727e55 100644 --- a/bindings/nodejs/README.md +++ b/bindings/nodejs/README.md @@ -108,7 +108,7 @@ run().then(() => process.exit()); ## Wallet Usage The following example will create a -new [`Wallet`](https://wiki.iota.org/shimmer/iota-sdk/references/nodejs/classes/Wallet/) [`Account`](https://wiki.iota.org/shimmer/iota-sdk/references/nodejs/classes/Account/) +new [`Wallet`](https://wiki.iota.org/shimmer/iota-sdk/references/nodejs/classes/Wallet/) that connects to the [Shimmer Testnet](https://api.testnet.shimmer.network) using the [`StrongholdSecretManager`](https://wiki.iota.org/shimmer/iota-sdk/references/python/iota_sdk/secret_manager/#strongholdsecretmanager-objects). @@ -116,7 +116,7 @@ that connects to the [Shimmer Testnet](https://api.testnet.shimmer.network) usin import { Wallet, CoinType, WalletOptions } from '@iota/sdk'; const walletOptions: WalletOptions = { - storagePath: `Alice`, // A name to associate with the created account. + storagePath: `Alice`, // A name to associate with the created wallet. clientOptions: { nodes: ['https://api.testnet.shimmer.network'], // The node to connect to. }, @@ -124,7 +124,7 @@ const walletOptions: WalletOptions = { secretManager: { // Setup Stronghold secret manager stronghold: { - snapshotPath: 'vault.stronghold', // The path to store the account snapshot. + snapshotPath: 'vault.stronghold', // The path to store the wallet snapshot. password: 'a-secure-password', // A password to encrypt the stored data. WARNING: Never hardcode passwords in production code. }, }, diff --git a/bindings/nodejs/examples/exchange/1-create-account.ts b/bindings/nodejs/examples/exchange/1-create-account.ts deleted file mode 100644 index c48bf4f490..0000000000 --- a/bindings/nodejs/examples/exchange/1-create-account.ts +++ /dev/null @@ -1,61 +0,0 @@ -// Copyright 2023 IOTA Stiftung -// SPDX-License-Identifier: Apache-2.0 - -// This example creates a new database and account. -// Run with command: -// yarn run-example ./exchange/1-create-account.ts - -import { Wallet, WalletOptions, CoinType } from '@iota/sdk'; - -// This example uses secrets in environment variables for simplicity which should not be done in production. -require('dotenv').config({ path: '.env' }); - -async function run() { - try { - for (const envVar of [ - 'WALLET_DB_PATH', - 'NODE_URL', - 'STRONGHOLD_SNAPSHOT_PATH', - 'STRONGHOLD_PASSWORD', - 'MNEMONIC', - ]) - if (!(envVar in process.env)) { - throw new Error( - `.env ${envVar} is undefined, see .env.example`, - ); - } - - const walletOptions: WalletOptions = { - storagePath: process.env.WALLET_DB_PATH, - clientOptions: { - nodes: [process.env.NODE_URL as string], - }, - coinType: CoinType.IOTA, - secretManager: { - stronghold: { - snapshotPath: process.env.STRONGHOLD_SNAPSHOT_PATH, - password: process.env.STRONGHOLD_PASSWORD, - }, - }, - }; - - const wallet = new Wallet(walletOptions); - - // Mnemonic only needs to be set the first time. - await wallet.storeMnemonic(process.env.MNEMONIC as string); - - const account = await wallet.createAccount({ - alias: 'Alice', - }); - - // Set syncOnlyMostBasicOutputs to true if not interested in outputs that are timelocked, - // have a storage deposit return, expiration or are nft/account/foundry outputs. - account.setDefaultSyncOptions({ syncOnlyMostBasicOutputs: true }); - - console.log(account); - } catch (error) { - console.error(error); - } -} - -run().then(() => process.exit()); diff --git a/bindings/nodejs/examples/exchange/1-create-wallet.ts b/bindings/nodejs/examples/exchange/1-create-wallet.ts new file mode 100644 index 0000000000..a7266456f9 --- /dev/null +++ b/bindings/nodejs/examples/exchange/1-create-wallet.ts @@ -0,0 +1,74 @@ +// Copyright 2023 IOTA Stiftung +// SPDX-License-Identifier: Apache-2.0 + +// This example creates a new database and wallet. +// Run with command: +// yarn run-example ./exchange/1-create-wallet.ts + +import { Wallet, WalletOptions, CoinType, SecretManager } from '@iota/sdk'; + +// This example uses secrets in environment variables for simplicity which should not be done in production. +require('dotenv').config({ path: '.env' }); + +async function run() { + try { + for (const envVar of [ + 'WALLET_DB_PATH', + 'NODE_URL', + 'STRONGHOLD_SNAPSHOT_PATH', + 'STRONGHOLD_PASSWORD', + 'MNEMONIC', + ]) + if (!(envVar in process.env)) { + throw new Error( + `.env ${envVar} is undefined, see .env.example`, + ); + } + + const strongholdSecretManager = { + stronghold: { + snapshotPath: process.env.STRONGHOLD_SNAPSHOT_PATH, + password: process.env.STRONGHOLD_PASSWORD, + }, + }; + + const secretManager = new SecretManager(strongholdSecretManager); + + // A mnemonic can be generated with `Utils.generateMnemonic()`. + // Store the mnemonic in the Stronghold snapshot, this needs to be done only the first time. + // The mnemonic can't be retrieved from the Stronghold file, so make a backup in a secure place! + await secretManager.storeMnemonic(process.env.MNEMONIC as string); + + const walletAddress = await secretManager.generateEd25519Addresses({ + coinType: CoinType.IOTA, + accountIndex: 0, + range: { + start: 0, + end: 1, + }, + bech32Hrp: 'tst', + }); + + const walletOptions: WalletOptions = { + address: walletAddress[0], + storagePath: process.env.WALLET_DB_PATH, + clientOptions: { + nodes: [process.env.NODE_URL as string], + }, + bipPath: { + coinType: CoinType.IOTA, + }, + secretManager: strongholdSecretManager, + }; + + const wallet = new Wallet(walletOptions); + + // Set syncOnlyMostBasicOutputs to true if not interested in outputs that are timelocked, + // have a storage deposit return, expiration or are nft/account/foundry outputs. + wallet.setDefaultSyncOptions({ syncOnlyMostBasicOutputs: true }); + } catch (error) { + console.error(error); + } +} + +run().then(() => process.exit()); diff --git a/bindings/nodejs/examples/exchange/2-generate-address.ts b/bindings/nodejs/examples/exchange/2-generate-address.ts deleted file mode 100644 index 6ad4ac8b32..0000000000 --- a/bindings/nodejs/examples/exchange/2-generate-address.ts +++ /dev/null @@ -1,40 +0,0 @@ -// Copyright 2023 IOTA Stiftung -// SPDX-License-Identifier: Apache-2.0 - -// This example generates an address for an account. -// Run with command: -// yarn run-example ./exchange/2-generate-address.ts - -import { Wallet } from '@iota/sdk'; - -// This example uses secrets in environment variables for simplicity which should not be done in production. -require('dotenv').config({ path: '.env' }); - -async function run() { - try { - for (const envVar of ['WALLET_DB_PATH', 'STRONGHOLD_PASSWORD']) - if (!(envVar in process.env)) { - throw new Error( - `.env ${envVar} is undefined, see .env.example`, - ); - } - - const wallet = new Wallet({ - storagePath: process.env.WALLET_DB_PATH, - }); - - await wallet.setStrongholdPassword( - process.env.STRONGHOLD_PASSWORD as string, - ); - - const account = await wallet.getAccount('Alice'); - - const address = (await account.generateEd25519Addresses(1))[0]; - - console.log('Address:', address); - } catch (error) { - console.error(error); - } -} - -run().then(() => process.exit()); diff --git a/bindings/nodejs/examples/exchange/3-check-balance.ts b/bindings/nodejs/examples/exchange/3-check-balance.ts index 53d43b6093..ed9346243a 100644 --- a/bindings/nodejs/examples/exchange/3-check-balance.ts +++ b/bindings/nodejs/examples/exchange/3-check-balance.ts @@ -1,7 +1,7 @@ // Copyright 2023 IOTA Stiftung // SPDX-License-Identifier: Apache-2.0 -// This example gets the balance of an account. +// This example gets the balance of a wallet. // Run with command: // yarn run-example ./exchange/3-check-balance.ts @@ -21,15 +21,13 @@ async function run() { const wallet = new Wallet({ storagePath: process.env.WALLET_DB_PATH, }); + const address = await wallet.address(); - const account = await wallet.getAccount('Alice'); - const addresses = await account.addresses(); - - console.log('Addresses:', addresses); + console.log('Address:', address); // Set syncOnlyMostBasicOutputs to true if not interested in outputs that are timelocked, // have a storage deposit return, expiration or are nft/account/foundry outputs. - const balance = await account.sync({ syncOnlyMostBasicOutputs: true }); + const balance = await wallet.sync({ syncOnlyMostBasicOutputs: true }); console.log('Balance', balance); diff --git a/bindings/nodejs/examples/exchange/4-listen-events.ts b/bindings/nodejs/examples/exchange/4-listen-events.ts index ac1cd83838..88a6a58d7a 100644 --- a/bindings/nodejs/examples/exchange/4-listen-events.ts +++ b/bindings/nodejs/examples/exchange/4-listen-events.ts @@ -33,15 +33,13 @@ async function run() { // Only interested in new outputs here. await wallet.listen([WalletEventType.NewOutput], callback); - const account = await wallet.getAccount('Alice'); - // Use the faucet to send testnet tokens to your address. console.log( 'Fill your address with the faucet: https://faucet.testnet.shimmer.network/', ); - const addresses = await account.addresses(); - console.log('Send funds to:', addresses[0].address); + const address = await wallet.address(); + console.log('Send funds to:', address); // Sync every 5 seconds until the faucet transaction gets confirmed. for (let i = 0; i < 100; i++) { @@ -50,7 +48,7 @@ async function run() { // Sync to detect new outputs // Set syncOnlyMostBasicOutputs to true if not interested in outputs that are timelocked, // have a storage deposit return, expiration or are nft/account/foundry outputs. - await account.sync({ syncOnlyMostBasicOutputs: true }); + await wallet.sync({ syncOnlyMostBasicOutputs: true }); } } catch (error) { console.error(error); diff --git a/bindings/nodejs/examples/exchange/5-send-amount.ts b/bindings/nodejs/examples/exchange/5-send-amount.ts index 1c09592ee8..e387f1587a 100644 --- a/bindings/nodejs/examples/exchange/5-send-amount.ts +++ b/bindings/nodejs/examples/exchange/5-send-amount.ts @@ -31,14 +31,11 @@ async function run() { process.env.STRONGHOLD_PASSWORD as string, ); - const account = await wallet.getAccount('Alice'); - console.log('Account:', account); - // Set syncOnlyMostBasicOutputs to true if not interested in outputs that are timelocked, // have a storage deposit return, expiration or are nft/account/foundry outputs. - await account.sync({ syncOnlyMostBasicOutputs: true }); + await wallet.sync({ syncOnlyMostBasicOutputs: true }); - const response = await account.send( + const response = await wallet.send( BigInt(1000000), // Replace with the address of your choice! 'rms1qrrv7flg6lz5cssvzv2lsdt8c673khad060l4quev6q09tkm9mgtupgf0h0', diff --git a/bindings/nodejs/examples/how_tos/account_output/create.ts b/bindings/nodejs/examples/how_tos/account_output/create.ts index d5872abc0b..335b3884ba 100644 --- a/bindings/nodejs/examples/how_tos/account_output/create.ts +++ b/bindings/nodejs/examples/how_tos/account_output/create.ts @@ -6,7 +6,7 @@ import { Wallet, initLogger } from '@iota/sdk'; // This example uses secrets in environment variables for simplicity which should not be done in production. // // Make sure that `example.stronghold` and `example.walletdb` already exist by -// running the `how_tos/accounts_and_addresses/create-account` example! +// running the `how_tos/accounts_and_addresses/create-wallet` example! // require('dotenv').config({ path: '.env' }); @@ -31,11 +31,8 @@ async function run() { storagePath: process.env.WALLET_DB_PATH, }); - // Get the account we generated with `01-create-wallet` - const account = await wallet.getAccount('Alice'); - - // May want to ensure the account is synced before sending a transaction. - let balance = await account.sync(); + // May want to ensure the wallet is synced before sending a transaction. + let balance = await wallet.sync(); console.log(`Accounts BEFORE:\n`, balance.accounts); @@ -47,19 +44,19 @@ async function run() { console.log('Sending the create-account transaction...'); // Create an account output - const transaction = await account.createAccountOutput(); + const transaction = await wallet.createAccountOutput(); console.log(`Transaction sent: ${transaction.transactionId}`); // Wait for transaction to get included - const blockId = await account.reissueTransactionUntilIncluded( + const blockId = await wallet.reissueTransactionUntilIncluded( transaction.transactionId, ); console.log( `Block included: ${process.env.EXPLORER_URL}/block/${blockId}`, ); - balance = await account.sync(); + balance = await wallet.sync(); console.log(`Accounts AFTER:\n`, balance.accounts); } catch (error) { console.log('Error: ', error); diff --git a/bindings/nodejs/examples/how_tos/account_output/destroy.ts b/bindings/nodejs/examples/how_tos/account_output/destroy.ts index 78d369b0f2..b5f6eb23d9 100644 --- a/bindings/nodejs/examples/how_tos/account_output/destroy.ts +++ b/bindings/nodejs/examples/how_tos/account_output/destroy.ts @@ -27,17 +27,14 @@ async function run() { storagePath: process.env.WALLET_DB_PATH, }); - // Get the account we generated with `01-create-wallet` - const account = await wallet.getAccount('Alice'); - - // May want to ensure the account is synced before sending a transaction. - let balance = await account.sync(); + // May want to ensure the wallet is synced before sending a transaction. + let balance = await wallet.sync(); if (balance.accounts.length == 0) { throw new Error(`No Account output available in account 'Alice'`); } - // We try to destroy the first account output in the account + // We try to destroy the first account output in the wallet const accountId = balance.accounts[0]; console.log( @@ -53,14 +50,14 @@ async function run() { console.log('Sending the destroy-account transaction...'); // Destroy an account output - const transaction = await account + const transaction = await wallet .prepareDestroyAccount(accountId) .then((prepared) => prepared.send()); console.log(`Transaction sent: ${transaction.transactionId}`); // Wait for transaction to get included - const blockId = await account.reissueTransactionUntilIncluded( + const blockId = await wallet.reissueTransactionUntilIncluded( transaction.transactionId, ); console.log( @@ -68,7 +65,7 @@ async function run() { ); console.log(`Destroyed account output ${accountId}`); - balance = await account.sync(); + balance = await wallet.sync(); console.log( `Accounts AFTER destroying (${balance.accounts.length}):\n`, balance.accounts, diff --git a/bindings/nodejs/examples/how_tos/account_wallet/request-funds.ts b/bindings/nodejs/examples/how_tos/account_wallet/request-funds.ts index f754bd1e3e..3e1ec12583 100644 --- a/bindings/nodejs/examples/how_tos/account_wallet/request-funds.ts +++ b/bindings/nodejs/examples/how_tos/account_wallet/request-funds.ts @@ -6,7 +6,7 @@ import { Utils, Wallet, initLogger } from '@iota/sdk'; // This example uses secrets in environment variables for simplicity which should not be done in production. // // Make sure that `example.stronghold` and `example.walletdb` already exist by -// running the `how_tos/accounts_and_addresses/create-account` example! +// running the `how_tos/accounts_and_addresses/create-wallet` example! // require('dotenv').config({ path: '.env' }); @@ -27,10 +27,7 @@ async function run() { storagePath: process.env.WALLET_DB_PATH, }); - // Get the account we generated with `create_wallet` - const account = await wallet.getAccount('Alice'); - - const balance = await account.sync(); + const balance = await wallet.sync(); const totalBaseTokenBalance = balance.baseCoin.total; console.log( @@ -57,7 +54,7 @@ async function run() { basicOutputs: true, }, }; - const totalBaseTokenBalanceAfter = (await account.sync(syncOptions)) + const totalBaseTokenBalanceAfter = (await wallet.sync(syncOptions)) .baseCoin.total; console.log( `Balance after requesting funds on account address: ${totalBaseTokenBalanceAfter}`, diff --git a/bindings/nodejs/examples/how_tos/account_wallet/transaction.ts b/bindings/nodejs/examples/how_tos/account_wallet/transaction.ts index aa7176e992..8fe6b32a4b 100644 --- a/bindings/nodejs/examples/how_tos/account_wallet/transaction.ts +++ b/bindings/nodejs/examples/how_tos/account_wallet/transaction.ts @@ -6,7 +6,7 @@ import { Wallet, initLogger, Utils } from '@iota/sdk'; // This example uses secrets in environment variables for simplicity which should not be done in production. // // Make sure that `example.stronghold` and `example.walletdb` already exist by -// running the `how_tos/accounts_and_addresses/create-account` example! +// running the `how_tos/accounts_and_addresses/create-wallet` example! // require('dotenv').config({ path: '.env' }); @@ -33,11 +33,9 @@ async function run() { storagePath: process.env.WALLET_DB_PATH, }); - const account = await wallet.getAccount('Alice'); - await wallet.setStrongholdPassword(process.env.STRONGHOLD_PASSWORD); - const balance = await account.sync(syncOptions); + const balance = await wallet.sync(syncOptions); const totalBaseTokenBalance = balance.baseCoin.total; console.log( @@ -72,15 +70,13 @@ async function run() { mandatoryInputs: [input], allowMicroAmount: false, }; - const transaction = await account.sendWithParams(params, options); - await account.reissueTransactionUntilIncluded( - transaction.transactionId, - ); + const transaction = await wallet.sendWithParams(params, options); + await wallet.reissueTransactionUntilIncluded(transaction.transactionId); console.log( `Transaction with custom input: https://explorer.iota.org/testnet/transaction/${transaction.transactionId}`, ); - const totalBaseTokenBalanceAfter = (await account.sync(syncOptions)) + const totalBaseTokenBalanceAfter = (await wallet.sync(syncOptions)) .baseCoin.total; console.log( `Balance after sending funds from account: ${totalBaseTokenBalanceAfter}`, diff --git a/bindings/nodejs/examples/how_tos/accounts_and_addresses/check-balance.ts b/bindings/nodejs/examples/how_tos/accounts_and_addresses/check-balance.ts index 042db1296a..af11654fb0 100644 --- a/bindings/nodejs/examples/how_tos/accounts_and_addresses/check-balance.ts +++ b/bindings/nodejs/examples/how_tos/accounts_and_addresses/check-balance.ts @@ -20,14 +20,12 @@ async function run() { storagePath: process.env.WALLET_DB_PATH, }); - const account = await wallet.getAccount('Alice'); - // Sync new outputs from the node. // eslint-disable-next-line @typescript-eslint/no-unused-vars - const _syncBalance = await account.sync(); + const _syncBalance = await wallet.sync(); // After syncing the balance can also be computed with the local data - const balance = await account.getBalance(); + const balance = await wallet.getBalance(); console.log('Balance', balance); } catch (error) { console.error('Error: ', error); diff --git a/bindings/nodejs/examples/how_tos/accounts_and_addresses/consolidate-outputs.ts b/bindings/nodejs/examples/how_tos/accounts_and_addresses/consolidate-outputs.ts index 50c1e3c330..e7619c3288 100644 --- a/bindings/nodejs/examples/how_tos/accounts_and_addresses/consolidate-outputs.ts +++ b/bindings/nodejs/examples/how_tos/accounts_and_addresses/consolidate-outputs.ts @@ -9,7 +9,7 @@ require('dotenv').config({ path: '.env' }); // Run with command: // yarn run-example ./how_tos/accounts_and_addresses/consolidate-outputs.ts -// In this example we will consolidate basic outputs from an account with only an AddressUnlockCondition by sending +// In this example we will consolidate basic outputs from an wallet with only an AddressUnlockCondition by sending // them to the same address again. async function run() { initLogger(); @@ -29,23 +29,21 @@ async function run() { storagePath: process.env.WALLET_DB_PATH, }); - const account = await wallet.getAccount('Alice'); - // To create an address we need to unlock stronghold. await wallet.setStrongholdPassword( process.env.STRONGHOLD_PASSWORD as string, ); - // Sync account to make sure account is updated with outputs from previous examples - account.sync(); - console.log('Account synced'); + // Sync wallet to make sure wallet is updated with outputs from previous examples + await wallet.sync(); + console.log('Wallet synced'); // List unspent outputs before consolidation. // The output we created with example `request_funds` and the basic output from `mint` have only one // unlock condition and it is an `AddressUnlockCondition`, and so they are valid for consolidation. They have the - // same `AddressUnlockCondition`(the first address of the account), so they will be consolidated into one + // same `AddressUnlockCondition`(the address of the wallet), so they will be consolidated into one // output. - const outputs = await account.unspentOutputs(); + const outputs = await wallet.unspentOutputs(); console.log('Outputs BEFORE consolidation:'); outputs.forEach(({ output, address }, i) => { @@ -64,13 +62,13 @@ async function run() { // Consolidate unspent outputs and print the consolidation transaction ID // Set `force` to true to force the consolidation even though the `output_threshold` isn't reached - const transaction = await account.consolidateOutputs({ + const transaction = await wallet.consolidateOutputs({ force: true, }); console.log('Transaction sent: %s', transaction.transactionId); // Wait for the consolidation transaction to get confirmed - const blockId = account.reissueTransactionUntilIncluded( + const blockId = wallet.reissueTransactionUntilIncluded( transaction.transactionId, ); @@ -80,9 +78,9 @@ async function run() { blockId, ); - // Sync account - account.sync(); - console.log('Account synced'); + // Sync wallet + await wallet.sync(); + console.log('Wallet synced'); // Outputs after consolidation console.log('Outputs AFTER consolidation:'); diff --git a/bindings/nodejs/examples/how_tos/accounts_and_addresses/create-address.ts b/bindings/nodejs/examples/how_tos/accounts_and_addresses/create-address.ts deleted file mode 100644 index c525a4e16f..0000000000 --- a/bindings/nodejs/examples/how_tos/accounts_and_addresses/create-address.ts +++ /dev/null @@ -1,38 +0,0 @@ -// Copyright 2023 IOTA Stiftung -// SPDX-License-Identifier: Apache-2.0 - -import { Wallet, initLogger } from '@iota/sdk'; -require('dotenv').config({ path: '.env' }); - -// Run with command: -// yarn run-example ./how_tos/accounts_and_addresses/create-address.ts - -// This example creates an address -async function run() { - initLogger(); - for (const envVar of ['WALLET_DB_PATH', 'STRONGHOLD_PASSWORD']) - if (!(envVar in process.env)) { - throw new Error(`.env ${envVar} is undefined, see .env.example`); - } - - try { - const wallet = new Wallet({ - storagePath: process.env.WALLET_DB_PATH, - }); - - const account = await wallet.getAccount('Alice'); - - // To create an address we need to unlock stronghold. - await wallet.setStrongholdPassword( - process.env.STRONGHOLD_PASSWORD as string, - ); - - const address = (await account.generateEd25519Addresses(1))[0]; - - console.log(`Generated address:`, address.address); - } catch (error) { - console.error('Error: ', error); - } -} - -run().then(() => process.exit()); diff --git a/bindings/nodejs/examples/how_tos/accounts_and_addresses/create-wallet.ts b/bindings/nodejs/examples/how_tos/accounts_and_addresses/create-wallet.ts index d6fdfa4553..e713c26fb3 100644 --- a/bindings/nodejs/examples/how_tos/accounts_and_addresses/create-wallet.ts +++ b/bindings/nodejs/examples/how_tos/accounts_and_addresses/create-wallet.ts @@ -44,7 +44,7 @@ async function run() { // The mnemonic can't be retrieved from the Stronghold file, so make a backup in a secure place! await secretManager.storeMnemonic(process.env.MNEMONIC as string); - const wallet_address = await secretManager.generateEd25519Addresses({ + const walletAddress = await secretManager.generateEd25519Addresses({ coinType: CoinType.IOTA, accountIndex: 0, range: { @@ -55,7 +55,7 @@ async function run() { }); const walletOptions: WalletOptions = { - address: wallet_address[0], + address: walletAddress[0], storagePath: process.env.WALLET_DB_PATH, clientOptions: { nodes: [process.env.NODE_URL as string], diff --git a/bindings/nodejs/examples/how_tos/accounts_and_addresses/list-accounts.ts b/bindings/nodejs/examples/how_tos/accounts_and_addresses/list-accounts.ts index f3e5662372..2ba9ac7942 100644 --- a/bindings/nodejs/examples/how_tos/accounts_and_addresses/list-accounts.ts +++ b/bindings/nodejs/examples/how_tos/accounts_and_addresses/list-accounts.ts @@ -9,7 +9,7 @@ require('dotenv').config({ path: '.env' }); // Run with command: // yarn run-example ./how_tos/accounts_and_addresses/list-accounts.ts -// This example lists all accounts in the wallet. +// This example lists all account outputs in the wallet. async function run() { initLogger(); if (!process.env.WALLET_DB_PATH) { @@ -20,10 +20,9 @@ async function run() { storagePath: process.env.WALLET_DB_PATH, }); - const accounts = await wallet.getAccounts(); + const accounts = await wallet.accounts(); - for (const account of accounts) - console.log(account.getMetadata().alias); + for (const account of accounts) console.log(account); } catch (error) { console.error('Error: ', error); } diff --git a/bindings/nodejs/examples/how_tos/accounts_and_addresses/list-addresses.ts b/bindings/nodejs/examples/how_tos/accounts_and_addresses/list-addresses.ts deleted file mode 100644 index 02e56eb9b5..0000000000 --- a/bindings/nodejs/examples/how_tos/accounts_and_addresses/list-addresses.ts +++ /dev/null @@ -1,33 +0,0 @@ -// Copyright 2023 IOTA Stiftung -// SPDX-License-Identifier: Apache-2.0 - -import { Wallet, initLogger } from '@iota/sdk'; - -// This example uses secrets in environment variables for simplicity which should not be done in production. -require('dotenv').config({ path: '.env' }); - -// Run with command: -// yarn run-example ./how_tos/accounts_and_addresses/list-addresses.ts - -// This example lists all addresses in the account. -async function run() { - initLogger(); - if (!process.env.WALLET_DB_PATH) { - throw new Error('.env WALLET_DB_PATH is undefined, see .env.example'); - } - try { - const wallet = new Wallet({ - storagePath: process.env.WALLET_DB_PATH, - }); - - const account = await wallet.getAccount('Alice'); - - const addresses = await account.addresses(); - - for (const address of addresses) console.log(address.address); - } catch (error) { - console.error('Error: ', error); - } -} - -run().then(() => process.exit()); diff --git a/bindings/nodejs/examples/how_tos/accounts_and_addresses/list-outputs.ts b/bindings/nodejs/examples/how_tos/accounts_and_addresses/list-outputs.ts index a3fe14be53..a25192d276 100644 --- a/bindings/nodejs/examples/how_tos/accounts_and_addresses/list-outputs.ts +++ b/bindings/nodejs/examples/how_tos/accounts_and_addresses/list-outputs.ts @@ -9,7 +9,7 @@ require('dotenv').config({ path: '.env' }); // Run with command: // yarn run-example ./how_tos/accounts_and_addresses/list-outputs.ts -// This example lists all outputs in the account. +// This example lists all outputs in the wallet. async function run() { initLogger(); if (!process.env.WALLET_DB_PATH) { @@ -20,16 +20,14 @@ async function run() { storagePath: process.env.WALLET_DB_PATH, }); - const account = await wallet.getAccount('Alice'); + await wallet.sync(); - await account.sync(); - - const outputs = await account.outputs(); + const outputs = await wallet.outputs(); console.log('Output ids:'); for (const output of outputs) console.log(output.outputId); - const unspentOutputs = await account.unspentOutputs(); + const unspentOutputs = await wallet.unspentOutputs(); console.log('Unspent output ids:'); for (const output of unspentOutputs) console.log(output.outputId); diff --git a/bindings/nodejs/examples/how_tos/accounts_and_addresses/list-transactions.ts b/bindings/nodejs/examples/how_tos/accounts_and_addresses/list-transactions.ts index 0cfd55dd81..feb53b0898 100644 --- a/bindings/nodejs/examples/how_tos/accounts_and_addresses/list-transactions.ts +++ b/bindings/nodejs/examples/how_tos/accounts_and_addresses/list-transactions.ts @@ -9,7 +9,7 @@ require('dotenv').config({ path: '.env' }); // Run with command: // yarn run-example ./how_tos/accounts_and_addresses/list-transactions.ts -// This example lists all transactions in the account. +// This example lists all transactions in the wallet. async function run() { initLogger(); if (!process.env.WALLET_DB_PATH) { @@ -19,16 +19,14 @@ async function run() { const wallet = new Wallet({ storagePath: process.env.WALLET_DB_PATH, }); + await wallet.sync({ syncIncomingTransactions: true }); - const account = await wallet.getAccount('Alice'); - await account.sync({ syncIncomingTransactions: true }); - - const transactions = await account.transactions(); + const transactions = await wallet.transactions(); console.log('Sent transactions:'); for (const transaction of transactions) console.log(transaction.transactionId); - const incomingTransactions = await account.incomingTransactions(); + const incomingTransactions = await wallet.incomingTransactions(); console.log('Incoming transactions:'); for (const transaction of incomingTransactions) { console.log(transaction.transactionId); diff --git a/bindings/nodejs/examples/how_tos/advanced_transactions/advanced_transaction.ts b/bindings/nodejs/examples/how_tos/advanced_transactions/advanced_transaction.ts index 13d22cd700..199fab2471 100644 --- a/bindings/nodejs/examples/how_tos/advanced_transactions/advanced_transaction.ts +++ b/bindings/nodejs/examples/how_tos/advanced_transactions/advanced_transaction.ts @@ -28,9 +28,7 @@ async function run() { storagePath: process.env.WALLET_DB_PATH, }); - const account = await wallet.getAccount('Alice'); - - await account.sync(); + await wallet.sync(); // To sign a transaction we need to unlock stronghold. await wallet.setStrongholdPassword(process.env.STRONGHOLD_PASSWORD); @@ -53,11 +51,11 @@ async function run() { ], }); - const transaction = await account.sendOutputs([basicOutput]); + const transaction = await wallet.sendOutputs([basicOutput]); console.log(`Transaction sent: ${transaction.transactionId}`); console.log('Waiting until included in block...'); - const blockId = await account.reissueTransactionUntilIncluded( + const blockId = await wallet.reissueTransactionUntilIncluded( transaction.transactionId, ); console.log(`Block sent: ${process.env.EXPLORER_URL}/block/${blockId}`); diff --git a/bindings/nodejs/examples/how_tos/advanced_transactions/claim_transaction.ts b/bindings/nodejs/examples/how_tos/advanced_transactions/claim_transaction.ts index 5d586875ed..67a1fb7b53 100644 --- a/bindings/nodejs/examples/how_tos/advanced_transactions/claim_transaction.ts +++ b/bindings/nodejs/examples/how_tos/advanced_transactions/claim_transaction.ts @@ -7,7 +7,7 @@ require('dotenv').config({ path: '.env' }); // Run with command: // yarn run-example ./how_tos/advanced_transactions/claim_transaction.ts -// This example claims all claimable outputs in the account. +// This example claims all claimable outputs in the wallet. async function run() { initLogger(); try { @@ -21,24 +21,22 @@ async function run() { storagePath: process.env.WALLET_DB_PATH, }); - const account = await wallet.getAccount('Alice'); - - await account.sync(); + await wallet.sync(); // To sign a transaction we need to unlock stronghold. await wallet.setStrongholdPassword(process.env.STRONGHOLD_PASSWORD); // Get all claimable outputs - const output_ids = await account.claimableOutputs(OutputsToClaim.All); + const output_ids = await wallet.claimableOutputs(OutputsToClaim.All); console.log(`Available outputs to claim:`); for (const output_id of output_ids) { console.log(output_id); } - const transaction = await account.claimOutputs(output_ids); + const transaction = await wallet.claimOutputs(output_ids); console.log(`Transaction sent: ${transaction.transactionId}`); - const blockId = await account.reissueTransactionUntilIncluded( + const blockId = await wallet.reissueTransactionUntilIncluded( transaction.transactionId, ); console.log(`Block sent: ${process.env.EXPLORER_URL}/block/${blockId}`); diff --git a/bindings/nodejs/examples/how_tos/advanced_transactions/send_micro_transaction.ts b/bindings/nodejs/examples/how_tos/advanced_transactions/send_micro_transaction.ts index 22da16ac31..6cb5e31db1 100644 --- a/bindings/nodejs/examples/how_tos/advanced_transactions/send_micro_transaction.ts +++ b/bindings/nodejs/examples/how_tos/advanced_transactions/send_micro_transaction.ts @@ -21,9 +21,7 @@ async function run() { storagePath: process.env.WALLET_DB_PATH, }); - const account = await wallet.getAccount('Alice'); - - await account.sync(); + await wallet.sync(); // To sign a transaction we need to unlock stronghold. await wallet.setStrongholdPassword(process.env.STRONGHOLD_PASSWORD); @@ -33,13 +31,13 @@ async function run() { 'rms1qpszqzadsym6wpppd6z037dvlejmjuke7s24hm95s9fg9vpua7vluaw60xu'; const amount = BigInt(1); - const transaction = await account.send(amount, address, { + const transaction = await wallet.send(amount, address, { allowMicroAmount: true, }); console.log(`Transaction sent: ${transaction.transactionId}`); - const blockId = await account.reissueTransactionUntilIncluded( + const blockId = await wallet.reissueTransactionUntilIncluded( transaction.transactionId, ); diff --git a/bindings/nodejs/examples/how_tos/native_tokens/burn.ts b/bindings/nodejs/examples/how_tos/native_tokens/burn.ts index 5f68f0fa76..432895eae3 100644 --- a/bindings/nodejs/examples/how_tos/native_tokens/burn.ts +++ b/bindings/nodejs/examples/how_tos/native_tokens/burn.ts @@ -3,7 +3,7 @@ import { getUnlockedWallet } from '../../wallet/common'; -// The minimum available native token amount to search for in the account. +// The minimum available native token amount to search for in the wallet. const MIN_AVAILABLE_AMOUNT = BigInt(11); // The amount of the native token to burn. const BURN_AMOUNT = BigInt(1); @@ -13,7 +13,7 @@ const BURN_AMOUNT = BigInt(1); // output that minted it. // // Make sure that `STRONGHOLD_SNAPSHOT_PATH` and `WALLET_DB_PATH` already exist by -// running the `how_tos/accounts_and_addresses/create-account` example! +// running the `how_tos/accounts_and_addresses/create-wallet` example! // // Rename `.env.example` to `.env` first, then run // yarn run-example ./how_tos/native_tokens/burn.ts @@ -22,11 +22,8 @@ async function run() { // Create the wallet const wallet = await getUnlockedWallet(); - // Get the account we generated with `01-create-wallet` - const account = await wallet.getAccount('Alice'); - - // May want to ensure the account is synced before sending a transaction. - let balance = await account.sync(); + // May want to ensure the wallet is synced before sending a transaction. + let balance = await wallet.sync(); // Get a token with sufficient balance const tokenId = balance.nativeTokens.find( @@ -42,21 +39,21 @@ async function run() { throw new Error( `Native token '${tokenId}' doesn't exist or there's not at least '${Number( MIN_AVAILABLE_AMOUNT, - )}' tokens of it in account 'Alice'`, + )}' tokens of it in the wallet`, ); } console.log(`Balance before burning: ${token.available}`); // Burn a native token - const transaction = await account + const transaction = await wallet .prepareBurnNativeToken(token.tokenId, BURN_AMOUNT) .then((prepared) => prepared.send()); console.log(`Transaction sent: ${transaction.transactionId}`); // Wait for transaction to get included - const blockId = await account.reissueTransactionUntilIncluded( + const blockId = await wallet.reissueTransactionUntilIncluded( transaction.transactionId, ); @@ -64,7 +61,7 @@ async function run() { `Block included: ${process.env.EXPLORER_URL}/block/${blockId}`, ); - balance = await account.sync(); + balance = await wallet.sync(); token = balance.nativeTokens.find( (nativeToken) => nativeToken.tokenId == tokenId, diff --git a/bindings/nodejs/examples/how_tos/native_tokens/create.ts b/bindings/nodejs/examples/how_tos/native_tokens/create.ts index 6011237381..81035d82e1 100644 --- a/bindings/nodejs/examples/how_tos/native_tokens/create.ts +++ b/bindings/nodejs/examples/how_tos/native_tokens/create.ts @@ -13,7 +13,7 @@ const MAXIMUM_SUPPLY = BigInt(100); // In this example we will create a native token. // // Make sure that `example.stronghold` and `example.walletdb` already exist by -// running the `how_tos/accounts_and_addresses/create-account` example! +// running the `how_tos/accounts_and_addresses/create-wallet` example! // // Rename `.env.example` to `.env` first, then run // yarn run-example ./how_tos/native_tokens/create.ts @@ -22,22 +22,19 @@ async function run() { // Create the wallet const wallet = await getUnlockedWallet(); - // Get the account we generated with `01-create-wallet` - const account = await wallet.getAccount('Alice'); - - const balance = await account.sync(); + const balance = await wallet.sync(); // We can first check if we already have an account output in our account, because an account output can have // many foundry outputs and therefore we can reuse an existing one if (balance.accounts.length == 0) { // If we don't have an account output, we need to create one - const transaction = await account + const transaction = await wallet .prepareCreateAccountOutput() .then((prepared) => prepared.send()); console.log(`Transaction sent: ${transaction.transactionId}`); // Wait for transaction to get included - const blockId = await account.reissueTransactionUntilIncluded( + const blockId = await wallet.reissueTransactionUntilIncluded( transaction.transactionId, ); @@ -45,8 +42,8 @@ async function run() { `Block included: ${process.env.EXPLORER_URL}/block/${blockId}`, ); - await account.sync(); - console.log('Account synced'); + await wallet.sync(); + console.log('Wallet synced'); } console.log('Preparing transaction to create native token...'); @@ -57,20 +54,20 @@ async function run() { 10, ).withDescription('A native token to test the iota-sdk.'); - // If we omit the AccountAddress field the first address of the account is used by default + // If we omit the AccountAddress field the wallet address is used by default const params: CreateNativeTokenParams = { circulatingSupply: CIRCULATING_SUPPLY, maximumSupply: MAXIMUM_SUPPLY, foundryMetadata: metadata.asHex(), }; - const prepared = await account.prepareCreateNativeToken(params); + const prepared = await wallet.prepareCreateNativeToken(params); const transaction = await prepared.send(); console.log(`Transaction sent: ${transaction.transactionId}`); // Wait for transaction to get included - const blockId = await account.reissueTransactionUntilIncluded( + const blockId = await wallet.reissueTransactionUntilIncluded( transaction.transactionId, ); @@ -81,8 +78,8 @@ async function run() { console.log(`Created token: ${prepared.tokenId()}`); // Ensure the account is synced after creating the native token. - await account.sync(); - console.log('Account synced'); + await wallet.sync(); + console.log('Wallet synced'); } catch (error) { console.log('Error: ', error); } diff --git a/bindings/nodejs/examples/how_tos/native_tokens/destroy-foundry.ts b/bindings/nodejs/examples/how_tos/native_tokens/destroy-foundry.ts index 50ac1e83fe..90c557b856 100644 --- a/bindings/nodejs/examples/how_tos/native_tokens/destroy-foundry.ts +++ b/bindings/nodejs/examples/how_tos/native_tokens/destroy-foundry.ts @@ -3,11 +3,11 @@ import { getUnlockedWallet } from '../../wallet/common'; -// In this example we will try to destroy the first foundry there is in the account. This is only possible if its +// In this example we will try to destroy the first foundry there is in the wallet. This is only possible if its // circulating supply is 0 and no native tokens were burned. // // Make sure that `STRONGHOLD_SNAPSHOT_PATH` and `WALLET_DB_PATH` already exist by -// running the `how_tos/accounts_and_addresses/create-account` example! +// running the `how_tos/accounts_and_addresses/create-wallet` example! // // Rename `.env.example` to `.env` first, then run // yarn run-example ./how_tos/native_tokens/destroy-foundry.ts @@ -16,37 +16,34 @@ async function run() { // Create the wallet const wallet = await getUnlockedWallet(); - // Get the account we generated with `01-create-wallet` - const account = await wallet.getAccount('Alice'); - - // May want to ensure the account is synced before sending a transaction. - let balance = await account.sync(); + // May want to ensure the wallet is synced before sending a transaction. + let balance = await wallet.sync(); if (balance.foundries.length == 0) { - throw new Error(`No Foundry available in account 'Alice'`); + throw new Error(`No Foundry available in the wallet`); } - // We try to destroy the first foundry in the account + // We try to destroy the first foundry in the wallet const foundry = balance.foundries[0]; console.log(`Foundries before destroying: ${balance.foundries.length}`); // Burn a foundry - const transaction = await account + const transaction = await wallet .prepareDestroyFoundry(foundry) .then((prepared) => prepared.send()); console.log(`Transaction sent: ${transaction.transactionId}`); // Wait for transaction to get included - const blockId = await account.reissueTransactionUntilIncluded( + const blockId = await wallet.reissueTransactionUntilIncluded( transaction.transactionId, ); console.log( `Block included: ${process.env.EXPLORER_URL}/block/${blockId}`, ); - balance = await account.sync(); + balance = await wallet.sync(); console.log(`Foundries after destroying: ${balance.foundries.length}`); } catch (error) { console.log('Error: ', error); diff --git a/bindings/nodejs/examples/how_tos/native_tokens/melt.ts b/bindings/nodejs/examples/how_tos/native_tokens/melt.ts index d2381f0888..5826a1c851 100644 --- a/bindings/nodejs/examples/how_tos/native_tokens/melt.ts +++ b/bindings/nodejs/examples/how_tos/native_tokens/melt.ts @@ -9,7 +9,7 @@ const MELT_AMOUNT = BigInt(10); // In this example we will melt an existing native token with its foundry. // // Make sure that `STRONGHOLD_SNAPSHOT_PATH` and `WALLET_DB_PATH` already exist by -// running the `how_tos/accounts_and_addresses/create-account` example! +// running the `how_tos/accounts_and_addresses/create-wallet` example! // // Rename `.env.example` to `.env` first, then run // yarn run-example ./how_tos/native_tokens/melt.ts @@ -18,11 +18,8 @@ async function run() { // Create the wallet const wallet = await getUnlockedWallet(); - // Get the account we generated with `01-create-wallet` - const account = await wallet.getAccount('Alice'); - - // May want to ensure the account is synced before sending a transaction. - let balance = await account.sync(); + // May want to ensure the wallet is synced before sending a transaction. + let balance = await wallet.sync(); if (balance.foundries.length == 0) { throw new Error(`No Foundry available in account 'Alice'`); @@ -36,14 +33,14 @@ async function run() { ); if (token == null) { throw new Error( - `Couldn't find native token '${tokenId}' in the account`, + `Couldn't find native token '${tokenId}' in the wallet`, ); } console.log(`Balance before melting: ${token.available}`); // Melt some of the circulating supply - const transaction = await account.meltNativeToken( + const transaction = await wallet.meltNativeToken( token.tokenId, MELT_AMOUNT, ); @@ -51,7 +48,7 @@ async function run() { console.log(`Transaction sent: ${transaction.transactionId}`); // Wait for transaction to get included - const blockId = await account.reissueTransactionUntilIncluded( + const blockId = await wallet.reissueTransactionUntilIncluded( transaction.transactionId, ); @@ -59,13 +56,13 @@ async function run() { `Block included: ${process.env.EXPLORER_URL}/block/${blockId}`, ); - balance = await account.sync(); + balance = await wallet.sync(); token = balance.nativeTokens.find( (nativeToken) => nativeToken.tokenId == tokenId, ); if (token == null) { throw new Error( - `Couldn't find native token '${tokenId}' in the account`, + `Couldn't find native token '${tokenId}' in the wallet`, ); } console.log(`Balance after melting: ${token.available}`); diff --git a/bindings/nodejs/examples/how_tos/native_tokens/mint.ts b/bindings/nodejs/examples/how_tos/native_tokens/mint.ts index 6fa0aead4b..56a7362824 100644 --- a/bindings/nodejs/examples/how_tos/native_tokens/mint.ts +++ b/bindings/nodejs/examples/how_tos/native_tokens/mint.ts @@ -9,7 +9,7 @@ const MINT_AMOUNT = BigInt(10); // In this example we will mint an existing native token with its foundry. // // Make sure that `STRONGHOLD_SNAPSHOT_PATH` and `WALLET_DB_PATH` already exist by -// running the `how_tos/accounts_and_addresses/create-account` example! +// running the `how_tos/accounts_and_addresses/create-wallet` example! // // Rename `.env.example` to `.env` first, then run // yarn run-example ./how_tos/native_tokens/mint.ts @@ -18,11 +18,8 @@ async function run() { // Create the wallet const wallet = await getUnlockedWallet(); - // Get the account we generated with `01-create-wallet` - const account = await wallet.getAccount('Alice'); - - // May want to ensure the account is synced before sending a transaction. - let balance = await account.sync(); + // May want to ensure the wallet is synced before sending a transaction. + let balance = await wallet.sync(); if (balance.foundries.length == 0) { throw new Error(`No Foundry available in account 'Alice'`); @@ -36,20 +33,20 @@ async function run() { ); if (token == null) { throw new Error( - `Couldn't find native token '${tokenId}' in the account`, + `Couldn't find native token '${tokenId}' in the wallet`, ); } console.log(`Balance before minting: ${token.available}`); // Mint some more native tokens - const transaction = await account + const transaction = await wallet .prepareMintNativeToken(token.tokenId, MINT_AMOUNT) .then((prepared) => prepared.send()); console.log(`Transaction sent: ${transaction.transactionId}`); // Wait for transaction to get included - const blockId = await account.reissueTransactionUntilIncluded( + const blockId = await wallet.reissueTransactionUntilIncluded( transaction.transactionId, ); @@ -57,13 +54,13 @@ async function run() { `Block included: ${process.env.EXPLORER_URL}/block/${blockId}`, ); - balance = await account.sync(); + balance = await wallet.sync(); token = balance.nativeTokens.find( (nativeToken) => nativeToken.tokenId == tokenId, ); if (token == null) { throw new Error( - `Couldn't find native token '${tokenId}' in the account`, + `Couldn't find native token '${tokenId}' in the wallet`, ); } console.log(`Balance after minting: ${token.available}`); diff --git a/bindings/nodejs/examples/how_tos/native_tokens/send.ts b/bindings/nodejs/examples/how_tos/native_tokens/send.ts index 4b3824eec8..a42a1459b4 100644 --- a/bindings/nodejs/examples/how_tos/native_tokens/send.ts +++ b/bindings/nodejs/examples/how_tos/native_tokens/send.ts @@ -14,7 +14,7 @@ const RECV_ADDRESS = // In this example we will send native tokens. // // Make sure that `STRONGHOLD_SNAPSHOT_PATH` and `WALLET_DB_PATH` already exist by -// running the `how_tos/accounts_and_addresses/create-account` example! +// running the `how_tos/accounts_and_addresses/create-wallet` example! // // Rename `.env.example` to `.env` first, then run // yarn run-example ./how_tos/native_tokens/send.ts @@ -23,11 +23,8 @@ async function run() { // Create the wallet const wallet = await getUnlockedWallet(); - // Get the account we generated with `01-create-wallet` - const account = await wallet.getAccount('Alice'); - - // May want to ensure the account is synced before sending a transaction. - let balance = await account.sync(); + // May want to ensure the wallet is synced before sending a transaction. + let balance = await wallet.sync(); // Get a token with sufficient balance const tokenId = balance.nativeTokens.find( @@ -47,17 +44,17 @@ async function run() { ); if (token == null) { throw new Error( - `Couldn't find native token '${tokenId}' in the account`, + `Couldn't find native token '${tokenId}' in the wallet`, ); } console.log(`Balance before sending: ${token.available}`); - const transaction = await account.sendNativeTokens(outputs); + const transaction = await wallet.sendNativeTokens(outputs); console.log(`Transaction sent: ${transaction.transactionId}`); // Wait for transaction to get included - const blockId = await account.reissueTransactionUntilIncluded( + const blockId = await wallet.reissueTransactionUntilIncluded( transaction.transactionId, ); @@ -65,13 +62,13 @@ async function run() { `Block included: ${process.env.EXPLORER_URL}/block/${blockId}`, ); - balance = await account.sync(); + balance = await wallet.sync(); token = balance.nativeTokens.find( (nativeToken) => nativeToken.tokenId == tokenId, ); if (token == null) { throw new Error( - `Couldn't find native token '${tokenId}' in the account`, + `Couldn't find native token '${tokenId}' in the wallet`, ); } console.log(`Balance after sending: ${token.available}`); diff --git a/bindings/nodejs/examples/how_tos/nft_collection/00_mint_issuer_nft.ts b/bindings/nodejs/examples/how_tos/nft_collection/00_mint_issuer_nft.ts index 9850ec2e81..1106c6ecbd 100644 --- a/bindings/nodejs/examples/how_tos/nft_collection/00_mint_issuer_nft.ts +++ b/bindings/nodejs/examples/how_tos/nft_collection/00_mint_issuer_nft.ts @@ -14,7 +14,7 @@ require('dotenv').config({ path: '.env' }); // In this example we will mint the issuer NFT for the NFT collection. // // Make sure that `STRONGHOLD_SNAPSHOT_PATH` and `WALLET_DB_PATH` already exist by -// running the `how_tos/accounts_and_addresses/create-account` example! +// running the `how_tos/accounts_and_addresses/create-wallet` example! // // Rename `.env.example` to `.env` first, then run // yarn run-example ./how_tos/nft_collection/00_mint_issuer_nft.ts @@ -34,11 +34,8 @@ async function run() { // To sign a transaction we need to unlock stronghold. await wallet.setStrongholdPassword(process.env.STRONGHOLD_PASSWORD); - // Get the account we generated with `01-create-wallet` - const account = await wallet.getAccount('Alice'); - - await account.sync(); - console.log(`Account synced!`); + await wallet.sync(); + console.log(`Wallet synced!`); // Issue the minting transaction and wait for its inclusion console.log(`Sending NFT minting transaction...`); @@ -47,10 +44,10 @@ async function run() { 'This NFT will be the issuer from the awesome NFT collection', ), }; - const transaction = await account.mintNfts([params]); + const transaction = await wallet.mintNfts([params]); // Wait for transaction to get included - const blockId = await account.reissueTransactionUntilIncluded( + const blockId = await wallet.reissueTransactionUntilIncluded( transaction.transactionId, ); console.log( diff --git a/bindings/nodejs/examples/how_tos/nft_collection/01_mint_collection_nft.ts b/bindings/nodejs/examples/how_tos/nft_collection/01_mint_collection_nft.ts index f5f607ce3b..6f7a6034ea 100644 --- a/bindings/nodejs/examples/how_tos/nft_collection/01_mint_collection_nft.ts +++ b/bindings/nodejs/examples/how_tos/nft_collection/01_mint_collection_nft.ts @@ -12,7 +12,7 @@ const NUM_NFTS_MINTED_PER_TRANSACTION = 50; // In this example we will mint the issuer NFT for the NFT collection. // // Make sure that `STRONGHOLD_SNAPSHOT_PATH` and `WALLET_DB_PATH` already exist by -// running the `how_tos/accounts_and_addresses/create-account` example! +// running the `how_tos/accounts_and_addresses/create-wallet` example! // // Rename `.env.example` to `.env` first, then run // yarn run-example ./how_tos/nfts/01_mint_collection_nft.ts @@ -32,11 +32,9 @@ async function run() { // To sign a transaction we need to unlock stronghold. await wallet.setStrongholdPassword(process.env.STRONGHOLD_PASSWORD); - // Get the account we generated with `how_tos/accounts_and_addresses/create-account` - const account = await wallet.getAccount('Alice'); - - await account.sync(); - console.log(`Account synced!`); + // Get the wallet we generated with `how_tos/accounts_and_addresses/create-wallet` + await wallet.sync(); + console.log(`Wallet synced!`); // Get the id we generated with `00_mint_issuer_nft` const issuerNftId: NftId = process.argv[2]; @@ -70,10 +68,10 @@ async function run() { i + chunk.length }/${NFT_COLLECTION_SIZE})`, ); - const transaction = await account.mintNfts(chunk); + const transaction = await wallet.mintNfts(chunk); // Wait for transaction to get included - const blockId = await account.reissueTransactionUntilIncluded( + const blockId = await wallet.reissueTransactionUntilIncluded( transaction.transactionId, ); console.log( @@ -81,7 +79,7 @@ async function run() { ); // Sync so the new outputs are available again for new transactions - await account.sync(); + await wallet.sync(); } // After the NFTs are minted, the issuer nft can be sent to the so called "null address" diff --git a/bindings/nodejs/examples/how_tos/nfts/burn_nft.ts b/bindings/nodejs/examples/how_tos/nfts/burn_nft.ts index c9ac0ef987..d72d9dba05 100644 --- a/bindings/nodejs/examples/how_tos/nfts/burn_nft.ts +++ b/bindings/nodejs/examples/how_tos/nfts/burn_nft.ts @@ -7,7 +7,7 @@ require('dotenv').config({ path: '.env' }); // In this example we will burn an existing nft output. // // Make sure that `STRONGHOLD_SNAPSHOT_PATH` and `WALLET_DB_PATH` already exist by -// running the `how_tos/accounts_and_addresses/create-account` example! +// running the `how_tos/accounts_and_addresses/create-wallet` example! // // Rename `.env.example` to `.env` first, then run // yarn run-example ./how_tos/nfts/burn_nft.ts @@ -24,19 +24,14 @@ async function run() { storagePath: process.env.WALLET_DB_PATH, }); - // Get the account we generated with `01-create-wallet` - const account = await wallet.getAccount('Alice'); - // We need to unlock stronghold. await wallet.setStrongholdPassword(process.env.STRONGHOLD_PASSWORD); - // May want to ensure the account is synced before sending a transaction. - let balance = await account.sync(); + // May want to ensure the wallet is synced before sending a transaction. + let balance = await wallet.sync(); if (balance.nfts.length == 0) { - throw new Error( - `No NFT available in account '${process.env.ACCOUNT_ALIAS_1}'`, - ); + throw new Error(`No NFT available in the wallet`); } // Get the first nft const nftId = balance.nfts[0]; @@ -44,14 +39,14 @@ async function run() { console.log(`Balance BEFORE burning:\n`, balance); // Burn an NFT - const transaction = await account + const transaction = await wallet .prepareBurnNft(nftId) .then((prepared) => prepared.send()); console.log(`Transaction sent: ${transaction.transactionId}`); // Wait for transaction to get included - const blockId = await account.reissueTransactionUntilIncluded( + const blockId = await wallet.reissueTransactionUntilIncluded( transaction.transactionId, ); console.log( @@ -59,7 +54,7 @@ async function run() { ); console.log(`Burned NFT ${nftId}`); - balance = await account.sync(); + balance = await wallet.sync(); console.log(`Balance AFTER burning:\n`, balance); } catch (error) { console.log('Error: ', error); diff --git a/bindings/nodejs/examples/how_tos/nfts/mint_nft.ts b/bindings/nodejs/examples/how_tos/nfts/mint_nft.ts index de78ab4d04..98378daacf 100644 --- a/bindings/nodejs/examples/how_tos/nfts/mint_nft.ts +++ b/bindings/nodejs/examples/how_tos/nfts/mint_nft.ts @@ -27,7 +27,7 @@ const NFT2_AMOUNT = '1000000'; // In this example we will mint a new nft. // // Make sure that `STRONGHOLD_SNAPSHOT_PATH` and `WALLET_DB_PATH` already exist by -// running the `how_tos/accounts_and_addresses/create-account` example! +// running the `how_tos/accounts_and_addresses/create-wallet` example! // // Rename `.env.example` to `.env` first, then run // yarn run-example ./how_tos/nfts/mint_nft.ts @@ -43,10 +43,8 @@ async function run() { storagePath: process.env.WALLET_DB_PATH, }); - const account = await wallet.getAccount('Alice'); - - // We send from the first address in the account. - const senderAddress = (await account.addresses())[0].address; + // We send from the address in the wallet. + const senderAddress = await wallet.address(); // We need to unlock stronghold. await wallet.setStrongholdPassword(process.env.STRONGHOLD_PASSWORD); @@ -65,11 +63,11 @@ async function run() { issuer: senderAddress, immutableMetadata: metadata.asHex(), }; - let transaction = await account.mintNfts([params]); + let transaction = await wallet.mintNfts([params]); console.log(`Transaction sent: ${transaction.transactionId}`); // Wait for transaction to get included - let blockId = await account.reissueTransactionUntilIncluded( + let blockId = await wallet.reissueTransactionUntilIncluded( transaction.transactionId, ); @@ -96,11 +94,11 @@ async function run() { features: [new SenderFeature(new Ed25519Address(hexAddress))], }); - transaction = await account.sendOutputs([output]); + transaction = await wallet.sendOutputs([output]); console.log(`Transaction sent: ${transaction.transactionId}`); // Wait for transaction to get included - blockId = await account.reissueTransactionUntilIncluded( + blockId = await wallet.reissueTransactionUntilIncluded( transaction.transactionId, ); @@ -110,8 +108,8 @@ async function run() { console.log('Minted NFT 2'); - // Ensure the account is synced after minting. - await account.sync(); + // Ensure the wallet is synced after minting. + await wallet.sync(); } catch (error) { console.error('Error: ', error); } diff --git a/bindings/nodejs/examples/how_tos/nfts/send_nft.ts b/bindings/nodejs/examples/how_tos/nfts/send_nft.ts index 77097345c2..907efaa23c 100644 --- a/bindings/nodejs/examples/how_tos/nfts/send_nft.ts +++ b/bindings/nodejs/examples/how_tos/nfts/send_nft.ts @@ -11,7 +11,7 @@ const RECV_ADDRESS = // In this example we will send an NFT (Non-fungible token). // // Make sure that `STRONGHOLD_SNAPSHOT_PATH` and `WALLET_DB_PATH` already exist by -// running the `how_tos/accounts_and_addresses/create-account` example! +// running the `how_tos/accounts_and_addresses/create-wallet` example! // // Rename `.env.example` to `.env` first, then run // yarn run-example ./how_tos/nfts/send_nft.ts @@ -27,14 +27,11 @@ async function run() { storagePath: process.env.WALLET_DB_PATH, }); - // Get the account we generated with `01-create-wallet` - const account = await wallet.getAccount('Alice'); - // We need to unlock stronghold. await wallet.setStrongholdPassword(process.env.STRONGHOLD_PASSWORD); - // May want to ensure the account is synced before sending a transaction. - const balance = await account.sync(); + // May want to ensure the wallet is synced before sending a transaction. + const balance = await wallet.sync(); if (balance.nfts.length == 0) { throw new Error('No available NFTs'); @@ -50,12 +47,12 @@ async function run() { ]; // Send the full NFT output to the specified address - const transaction = await account.sendNft(outputs); + const transaction = await wallet.sendNft(outputs); console.log(`Transaction sent: ${transaction.transactionId}`); // Wait for transaction to get included - const blockId = await account.reissueTransactionUntilIncluded( + const blockId = await wallet.reissueTransactionUntilIncluded( transaction.transactionId, ); @@ -64,7 +61,7 @@ async function run() { ); // To send an NFT with expiration unlock condition prepareOutput() can be used like this: - // const output = await account.prepareOutput({ + // const output = await wallet.prepareOutput({ // recipientAddress: 'rms1qz6aj69rumk3qu0ra5ag6p6kk8ga3j8rfjlaym3wefugs3mmxgzfwa6kw3l', // amount: "47000", // unlocks: { @@ -76,7 +73,7 @@ async function run() { // storageDeposit: { returnStrategy: 'Gift' } // }); - // const transaction = await account.sendOutputs([output]); + // const transaction = await wallet.sendOutputs([output]); } catch (error) { console.log('Error: ', error); } diff --git a/bindings/nodejs/examples/how_tos/simple_transaction/request-funds.ts b/bindings/nodejs/examples/how_tos/simple_transaction/request-funds.ts index 2a86b934ef..8236e5d3dc 100644 --- a/bindings/nodejs/examples/how_tos/simple_transaction/request-funds.ts +++ b/bindings/nodejs/examples/how_tos/simple_transaction/request-funds.ts @@ -23,10 +23,7 @@ async function run() { storagePath: process.env.WALLET_DB_PATH, }); - // Get the account we generated with `create-account` - const account = await wallet.getAccount('Alice'); - - const address = (await account.addresses())[0].address; + const address = await wallet.address(); console.log(address); const faucetResponse = await ( diff --git a/bindings/nodejs/examples/how_tos/simple_transaction/simple-transaction.ts b/bindings/nodejs/examples/how_tos/simple_transaction/simple-transaction.ts index 78c4079e5b..ec1249840b 100644 --- a/bindings/nodejs/examples/how_tos/simple_transaction/simple-transaction.ts +++ b/bindings/nodejs/examples/how_tos/simple_transaction/simple-transaction.ts @@ -23,9 +23,7 @@ async function run() { storagePath: process.env.WALLET_DB_PATH, }); - const account = await wallet.getAccount('Alice'); - - await account.sync(); + await wallet.sync(); // To sign a transaction we need to unlock stronghold. await wallet.setStrongholdPassword(process.env.STRONGHOLD_PASSWORD); @@ -35,7 +33,7 @@ async function run() { 'rms1qrrv7flg6lz5cssvzv2lsdt8c673khad060l4quev6q09tkm9mgtupgf0h0'; const amount = BigInt(1000000); - const response = await account.send(amount, address); + const response = await wallet.send(amount, address); console.log( `Block sent: ${process.env.EXPLORER_URL}/block/${response.blockId}`, diff --git a/bindings/nodejs/examples/wallet/06-send-micro-transaction.ts b/bindings/nodejs/examples/wallet/06-send-micro-transaction.ts index d466cd282e..ff839d0746 100644 --- a/bindings/nodejs/examples/wallet/06-send-micro-transaction.ts +++ b/bindings/nodejs/examples/wallet/06-send-micro-transaction.ts @@ -14,7 +14,7 @@ const RECV_ADDRESS = // In this example we will send an amount below the minimum storage deposit. // // Make sure that `STRONGHOLD_SNAPSHOT_PATH` and `WALLET_DB_PATH` already exist by -// running the `how_tos/accounts_and_addresses/create-account` example! +// running the `how_tos/accounts_and_addresses/create-wallet` example! // // Rename `.env.example` to `.env` first, then run // yarn run-example ./wallet/06-send-micro-transaction.ts @@ -23,11 +23,8 @@ async function run() { // Create the wallet const wallet = await getUnlockedWallet(); - // Get the account we generated with `01-create-wallet` - const account = await wallet.getAccount('Alice'); - - // May want to ensure the account is synced before sending a transaction. - await account.sync(); + // May want to ensure the wallet is synced before sending a transaction. + await wallet.sync(); console.log( `Sending '${SEND_MICRO_AMOUNT}' coin(s) to '${RECV_ADDRESS}'...`, @@ -36,13 +33,13 @@ async function run() { { address: RECV_ADDRESS, amount: SEND_MICRO_AMOUNT }, ]; - const transaction = await account.sendWithParams(params, { + const transaction = await wallet.sendWithParams(params, { allowMicroAmount: true, }); console.log(`Transaction sent: ${transaction.transactionId}`); // Wait for transaction to get included - const blockId = await account.reissueTransactionUntilIncluded( + const blockId = await wallet.reissueTransactionUntilIncluded( transaction.transactionId, ); diff --git a/bindings/nodejs/examples/wallet/17-check-unlock-conditions.ts b/bindings/nodejs/examples/wallet/17-check-unlock-conditions.ts index 0b48964e74..2e1faa23e5 100644 --- a/bindings/nodejs/examples/wallet/17-check-unlock-conditions.ts +++ b/bindings/nodejs/examples/wallet/17-check-unlock-conditions.ts @@ -8,10 +8,10 @@ import { getUnlockedWallet } from './common'; // The amount to build the basic output with const AMOUNT = BigInt(1000000); -// In this example we check if an output has only an address unlock condition and that the address is from the account. +// In this example we check if an output has only an address unlock condition and that the address is from the wallet. // // Make sure that `STRONGHOLD_SNAPSHOT_PATH` and `WALLET_DB_PATH` already exist by -// running the `how_tos/accounts_and_addresses/create-account` example! +// running the `how_tos/accounts_and_addresses/create-wallet` example! // // Rename `.env.example` to `.env` first, then run // yarn run-example ./wallet/17-check-unlock-conditions.ts @@ -20,40 +20,35 @@ async function run() { // Create the wallet const wallet = await getUnlockedWallet(); - // Get the account we generated with `01-create-wallet` - const account = await wallet.getAccount('Alice'); + const walletAddress = await wallet.address(); - const accountAddresses = await account.addresses(); - - const output: Output = await account.prepareOutput({ - recipientAddress: accountAddresses[0].address, + const output: Output = await wallet.prepareOutput({ + recipientAddress: walletAddress, amount: AMOUNT, }); - const hexEncodedAccountAddresses = accountAddresses.map((a) => - Utils.bech32ToHex(a.address), - ); + const hexEncodedwalletAddress = Utils.bech32ToHex(walletAddress); if (output instanceof BasicOutput) { const basicOutput = output as BasicOutput; - let controlledByAccount = false; + let controlledByWallet = false; if ( basicOutput.unlockConditions.length === 1 && basicOutput.unlockConditions[0] instanceof AddressUnlockCondition && - hexEncodedAccountAddresses.includes( + hexEncodedwalletAddress.includes( ( basicOutput .unlockConditions[0] as AddressUnlockCondition ).address.toString(), ) ) { - controlledByAccount = true; + controlledByWallet = true; } console.log( - 'The output has only an address unlock condition and the address is from the account: ' + - controlledByAccount, + 'The output has only an address unlock condition and the address is from the wallet: ' + + controlledByWallet, ); } } catch (error) { diff --git a/bindings/nodejs/examples/wallet/common.ts b/bindings/nodejs/examples/wallet/common.ts index 642d28ff88..4479a2a00f 100644 --- a/bindings/nodejs/examples/wallet/common.ts +++ b/bindings/nodejs/examples/wallet/common.ts @@ -1,7 +1,7 @@ // Copyright 2023 IOTA Stiftung // SPDX-License-Identifier: Apache-2.0 -import { initLogger, Wallet, CoinType, WalletOptions } from '@iota/sdk'; +import { initLogger, Wallet, WalletOptions } from '@iota/sdk'; // This example uses secrets in environment variables for simplicity which should not be done in production. require('dotenv').config({ path: '.env' }); @@ -21,16 +21,6 @@ async function getUnlockedWallet() { const walletOptions: WalletOptions = { storagePath: process.env.WALLET_DB_PATH, - clientOptions: { - nodes: [process.env.NODE_URL as string], - }, - coinType: CoinType.Shimmer, - secretManager: { - stronghold: { - snapshotPath: process.env.STRONGHOLD_SNAPSHOT_PATH, - password: process.env.STRONGHOLD_PASSWORD, - }, - }, }; const wallet = new Wallet(walletOptions); diff --git a/bindings/nodejs/examples/wallet/events.ts b/bindings/nodejs/examples/wallet/events.ts index 0657f4c831..13e7663064 100644 --- a/bindings/nodejs/examples/wallet/events.ts +++ b/bindings/nodejs/examples/wallet/events.ts @@ -25,12 +25,7 @@ async function run() { const wallet = await getUnlockedWallet(); const callback = function (err: any, event: Event) { - console.log( - 'AccountIndex:', - event.accountIndex, - ', Event:', - event.event, - ); + console.log('Event:', event); }; await wallet.listen([], callback); diff --git a/bindings/nodejs/examples/wallet/getting-started.ts b/bindings/nodejs/examples/wallet/getting-started.ts index 1913122e68..541020e59b 100644 --- a/bindings/nodejs/examples/wallet/getting-started.ts +++ b/bindings/nodejs/examples/wallet/getting-started.ts @@ -1,7 +1,13 @@ // Copyright 2023 IOTA Stiftung // SPDX-License-Identifier: Apache-2.0 -import { Wallet, CoinType, WalletOptions, Utils } from '@iota/sdk'; +import { + Wallet, + CoinType, + WalletOptions, + Utils, + SecretManager, +} from '@iota/sdk'; // Run with command: // yarn run-example ./wallet/getting-started.ts @@ -9,9 +15,6 @@ import { Wallet, CoinType, WalletOptions, Utils } from '@iota/sdk'; // The database path. const WALLET_DB_PATH = 'getting-started-db'; -// A name to associate with the created account. -const ACCOUNT_ALIAS = 'Alice'; - // The node to connect to. const NODE_URL = 'https://api.testnet.shimmer.network'; @@ -19,40 +22,53 @@ const NODE_URL = 'https://api.testnet.shimmer.network'; // WARNING: Never hardcode passwords in production code. const STRONGHOLD_PASSWORD = 'a-secure-password'; -// The path to store the account snapshot. +// The path to store the wallet snapshot. const STRONGHOLD_SNAPSHOT_PATH = 'vault.stronghold'; async function main() { - const walletOptions: WalletOptions = { - storagePath: WALLET_DB_PATH, - clientOptions: { - nodes: [NODE_URL], - }, - coinType: CoinType.Shimmer, - secretManager: { - stronghold: { - snapshotPath: STRONGHOLD_SNAPSHOT_PATH, - password: STRONGHOLD_PASSWORD, - }, + const strongholdSecretManager = { + stronghold: { + snapshotPath: STRONGHOLD_SNAPSHOT_PATH, + password: STRONGHOLD_PASSWORD, }, }; - const wallet = new Wallet(walletOptions); + const secretManager = new SecretManager(strongholdSecretManager); // Generate a mnemonic and store its seed in the Stronghold vault. // INFO: It is best practice to back up the mnemonic somewhere secure. const mnemonic = Utils.generateMnemonic(); console.log('Mnemonic:' + mnemonic); - await wallet.storeMnemonic(mnemonic); - // Create an account. - const account = await wallet.createAccount({ - alias: ACCOUNT_ALIAS, + // Store the mnemonic in the Stronghold snapshot, this needs to be done only the first time. + // The mnemonic can't be retrieved from the Stronghold file, so make a backup in a secure place! + await secretManager.storeMnemonic(mnemonic); + + const wallet_address = await secretManager.generateEd25519Addresses({ + coinType: CoinType.IOTA, + accountIndex: 0, + range: { + start: 0, + end: 1, + }, + bech32Hrp: 'tst', }); - // Get the first address and print it. - const address = (await account.addresses())[0]; - console.log(`Address: ${address.address}\n`); + const walletOptions: WalletOptions = { + address: wallet_address[0], + storagePath: WALLET_DB_PATH, + clientOptions: { + nodes: [NODE_URL as string], + }, + bipPath: { + coinType: CoinType.IOTA, + }, + secretManager: strongholdSecretManager, + }; + + const wallet = new Wallet(walletOptions); + + console.log('Generated wallet with address: ' + (await wallet.address())); process.exit(0); } diff --git a/bindings/nodejs/examples/wallet/migrate-stronghold-snapshot-v2-to-v3.ts b/bindings/nodejs/examples/wallet/migrate-stronghold-snapshot-v2-to-v3.ts index 0a3663a269..04d67eb36c 100644 --- a/bindings/nodejs/examples/wallet/migrate-stronghold-snapshot-v2-to-v3.ts +++ b/bindings/nodejs/examples/wallet/migrate-stronghold-snapshot-v2-to-v3.ts @@ -1,12 +1,7 @@ // Copyright 2023 IOTA Stiftung // SPDX-License-Identifier: Apache-2.0 -import { - CoinType, - WalletOptions, - Wallet, - migrateStrongholdSnapshotV2ToV3, -} from '@iota/sdk'; +import { migrateStrongholdSnapshotV2ToV3, SecretManager } from '@iota/sdk'; require('dotenv').config({ path: '.env' }); const v2Path = '../../../sdk/tests/wallet/fixtures/v2.stronghold'; @@ -21,23 +16,16 @@ async function run() { throw new Error(`.env ${envVar} is undefined, see .env.example`); } - let walletOptions: WalletOptions = { - storagePath: process.env.WALLET_DB_PATH, - clientOptions: { - nodes: [process.env.NODE_URL as string], - }, - coinType: CoinType.Shimmer, - secretManager: { - stronghold: { - snapshotPath: v2Path, - password: 'current_password', - }, + const strongholdSecretManager = { + stronghold: { + snapshotPath: process.env.STRONGHOLD_SNAPSHOT_PATH, + password: process.env.STRONGHOLD_PASSWORD, }, }; try { // This should fail with error, migration required. - new Wallet(walletOptions); + new SecretManager(strongholdSecretManager); } catch (error) { console.error(error); } @@ -51,22 +39,8 @@ async function run() { 'new_password', ); - walletOptions = { - storagePath: process.env.WALLET_DB_PATH, - clientOptions: { - nodes: [process.env.NODE_URL as string], - }, - coinType: CoinType.Shimmer, - secretManager: { - stronghold: { - snapshotPath: v3Path, - password: 'new_password', - }, - }, - }; - // This shouldn't fail anymore as snapshot has been migrated. - new Wallet(walletOptions); + new SecretManager(strongholdSecretManager); } run().then(() => process.exit()); diff --git a/bindings/nodejs/lib/types/wallet/address.ts b/bindings/nodejs/lib/types/wallet/address.ts index 04bc9b84b0..c88fbf5fde 100644 --- a/bindings/nodejs/lib/types/wallet/address.ts +++ b/bindings/nodejs/lib/types/wallet/address.ts @@ -24,7 +24,7 @@ export interface SendParams { /** * Bech32 encoded address, to which the storage deposit will be returned if one is necessary * given the provided amount. If a storage deposit is needed and a return address is not provided, it will - * default to the first address of the account. + * default to the address of the wallet. */ returnAddress?: string; /** @@ -43,7 +43,7 @@ export interface SendNativeTokensParams { nativeTokens: [TokenId, u256][]; /** * Bech32 encoded address, to which the storage deposit will be returned. - * Default will use the first address of the account. + * Default will use the address of the wallet. */ returnAddress?: Bech32Address; /** diff --git a/bindings/nodejs/lib/types/wallet/transaction-options.ts b/bindings/nodejs/lib/types/wallet/transaction-options.ts index eebf1c2e2c..5184335c61 100644 --- a/bindings/nodejs/lib/types/wallet/transaction-options.ts +++ b/bindings/nodejs/lib/types/wallet/transaction-options.ts @@ -77,7 +77,7 @@ export interface CreateNativeTokenParams { /** Options for minting NFTs. */ export interface MintNftParams { /** Bech32 encoded address to which the Nft will be minted. Default will use the - * first address of the account + * address of the wallet. */ address?: Bech32Address; /** Bech32 encoded sender address **/ @@ -95,7 +95,7 @@ export interface MintNftParams { /** Options for the account output creation */ export interface AccountOutputParams { /** Bech32 encoded address to which the Nft will be minted. Default will use the - * first address of the account + * address of the wallet. */ address?: Bech32Address; /** Hex encoded bytes */ diff --git a/bindings/nodejs/lib/types/wallet/wallet.ts b/bindings/nodejs/lib/types/wallet/wallet.ts index e40cc53203..85e2d77d92 100644 --- a/bindings/nodejs/lib/types/wallet/wallet.ts +++ b/bindings/nodejs/lib/types/wallet/wallet.ts @@ -78,7 +78,7 @@ export interface NativeTokenBalance { available: u256; } -/** Sync options for an account */ +/** Sync options for a wallet */ export interface SyncOptions { /** * Usually syncing is skipped if it's called in between 200ms, because there can only be new changes every diff --git a/bindings/nodejs/lib/wallet/wallet.ts b/bindings/nodejs/lib/wallet/wallet.ts index c4f70b9683..545d7e7fa3 100644 --- a/bindings/nodejs/lib/wallet/wallet.ts +++ b/bindings/nodejs/lib/wallet/wallet.ts @@ -399,7 +399,7 @@ export class Wallet { /** * Claim basic or nft outputs that have additional unlock conditions - * to their `AddressUnlockCondition` from the account. + * to their `AddressUnlockCondition` from the wallet. * @param outputIds The outputs to claim. * @returns The resulting transaction. */ @@ -419,7 +419,7 @@ export class Wallet { } /** - * Consolidate basic outputs with only an `AddressUnlockCondition` from an account + * Consolidate basic outputs with only an `AddressUnlockCondition` from a wallet * by sending them to an own address again if the output amount is greater or * equal to the output consolidation threshold. * @param params Consolidation options. @@ -432,7 +432,7 @@ export class Wallet { } /** - * Consolidate basic outputs with only an `AddressUnlockCondition` from an account + * Consolidate basic outputs with only an `AddressUnlockCondition` from a wallet * by sending them to an own address again if the output amount is greater or * equal to the output consolidation threshold. * @param params Consolidation options. @@ -757,7 +757,7 @@ export class Wallet { /** * Get a `FoundryOutput` by native token ID. It will try to get the foundry from - * the account, if it isn't in the account it will try to get it from the node. + * the account, if it isn't in the wallet it will try to get it from the node. * * @param tokenId The native token ID to get the foundry for. * @returns The `FoundryOutput` that minted the token. @@ -789,7 +789,7 @@ export class Wallet { } /** - * Get a transaction stored in the account. + * Get a transaction stored in the wallet. * * @param transactionId The ID of the transaction to get. * @returns The transaction. @@ -810,7 +810,7 @@ export class Wallet { } /** - * Get the transaction with inputs of an incoming transaction stored in the account + * Get the transaction with inputs of an incoming transaction stored in the wallet * List might not be complete, if the node pruned the data already * * @param transactionId The ID of the transaction to get. @@ -1229,7 +1229,7 @@ export class Wallet { } /** - * Reissues a transaction sent from the account for a provided transaction id until it's + * Reissues a transaction sent from the wallet for a provided transaction id until it's * included (referenced by a milestone). Returns the included block id. */ async reissueTransactionUntilIncluded( @@ -1493,7 +1493,7 @@ export class Wallet { } /** - * Validate the transaction, submit it to a node and store it in the account. + * Validate the transaction, submit it to a node and store it in the wallet. * * @param signedTransactionData A signed transaction to submit and store. * @returns The sent transaction. @@ -1584,7 +1584,7 @@ export class Wallet { } /** - * Calculates the voting overview of an account. + * Calculates the voting overview of a wallet. * * @param eventIds Optional, filters participations only for provided events. * @returns An instance of `ParticipationOverview` diff --git a/bindings/nodejs/tests/wallet/wallet.spec.ts b/bindings/nodejs/tests/wallet/wallet.spec.ts index 09e1d48784..427d374559 100644 --- a/bindings/nodejs/tests/wallet/wallet.spec.ts +++ b/bindings/nodejs/tests/wallet/wallet.spec.ts @@ -4,119 +4,93 @@ import 'reflect-metadata'; import { describe, it, expect } from '@jest/globals'; -import { Wallet, CoinType, WalletOptions } from '../../lib/'; +import { Wallet, CoinType, WalletOptions, SecretManager } from '../../lib/'; describe('Wallet', () => { - it('create account', async () => { - let storagePath = 'test-create-account'; + it('create wallet', async () => { + let storagePath = 'test-create-wallet'; removeDir(storagePath); - const walletOptions = { - storagePath: './test-create-account', - clientOptions: { - nodes: ['https://api.testnet.shimmer.network'], - }, - coinType: CoinType.Shimmer, - secretManager: { - stronghold: { - snapshotPath: `./${storagePath}/wallet.stronghold`, - password: `A12345678*`, - }, + const strongholdSecretManager = { + stronghold: { + snapshotPath: `./${storagePath}/wallet.stronghold`, + password: `A12345678*`, }, }; - const wallet = new Wallet(walletOptions); - await wallet.storeMnemonic( - 'vital give early extra blind skin eight discover scissors there globe deal goat fat load robot return rate fragile recycle select live ordinary claim', - ); - - const account = await wallet.createAccount({ - alias: 'Alice', - }); - - expect(account.getMetadata().index).toStrictEqual(0); + const secretManager = new SecretManager(strongholdSecretManager); - await wallet.destroy() - removeDir(storagePath) - }, 8000); + await secretManager.storeMnemonic('vital give early extra blind skin eight discover scissors there globe deal goat fat load robot return rate fragile recycle select live ordinary claim',); - it('generate address', async () => { - let storagePath = 'test-generate-address'; - removeDir(storagePath); + const wallet_address = await secretManager.generateEd25519Addresses({ + coinType: CoinType.IOTA, + accountIndex: 0, + range: { + start: 0, + end: 1, + }, + bech32Hrp: 'tst', + }); const walletOptions: WalletOptions = { - storagePath, + address: wallet_address[0], + storagePath: './test-create-wallet', clientOptions: { nodes: ['https://api.testnet.shimmer.network'], }, - coinType: CoinType.Shimmer, - secretManager: { - stronghold: { - snapshotPath: `./${storagePath}/wallet.stronghold`, - password: `A12345678*`, - }, + bipPath: { + coinType: CoinType.IOTA, }, + secretManager: strongholdSecretManager, }; + const wallet = new Wallet(walletOptions); - await wallet.storeMnemonic( - 'vital give early extra blind skin eight discover scissors there globe deal goat fat load robot return rate fragile recycle select live ordinary claim', - ); - - const address = await wallet.generateEd25519Address( - 0, - 0, - { internal: false, ledgerNanoPrompt: false }, - 'rms', - ); - - expect(address).toStrictEqual( - 'rms1qpqzgvcehafmlxh87zrf9w8ck8q2kw5070ztf68ylhzk89en9a4fy5jqrg8', - ); - - const anotherAddress = await wallet.generateEd25519Address( - 10, - 10, - { internal: true, ledgerNanoPrompt: false }, - 'tst', - ); - - expect(anotherAddress).toStrictEqual( - 'tst1qzp37j45rkfmqn05fapq66vyw0vkmz5zqhmeuey5fked0wt4ry43jeqp2wv', - ); await wallet.destroy() removeDir(storagePath) }, 8000); + it('recreate wallet', async () => { let storagePath = 'test-recreate-wallet'; removeDir(storagePath); - const walletOptions = { - storagePath, + const strongholdSecretManager = { + stronghold: { + snapshotPath: `./${storagePath}/wallet.stronghold`, + password: `A12345678*`, + }, + }; + + const secretManager = new SecretManager(strongholdSecretManager); + + await secretManager.storeMnemonic('vital give early extra blind skin eight discover scissors there globe deal goat fat load robot return rate fragile recycle select live ordinary claim',); + + const wallet_address = await secretManager.generateEd25519Addresses({ + coinType: CoinType.IOTA, + accountIndex: 0, + range: { + start: 0, + end: 1, + }, + bech32Hrp: 'tst', + }); + + const walletOptions: WalletOptions = { + address: wallet_address[0], + storagePath: './test-recreate-wallet', clientOptions: { nodes: ['https://api.testnet.shimmer.network'], }, - coinType: CoinType.Shimmer, - secretManager: { - stronghold: { - snapshotPath: `./${storagePath}/wallet.stronghold`, - password: `A12345678*`, - }, + bipPath: { + coinType: CoinType.IOTA, }, + secretManager: strongholdSecretManager, }; - const wallet = new Wallet(walletOptions); - await wallet.storeMnemonic( - 'vital give early extra blind skin eight discover scissors there globe deal goat fat load robot return rate fragile recycle select live ordinary claim', - ); - const account = await wallet.createAccount({ - alias: 'Alice', - }); - - expect(account.getMetadata().index).toStrictEqual(0); + const wallet = new Wallet(walletOptions); const client = await wallet.getClient(); const hrp = await client.getBech32Hrp(); @@ -124,9 +98,7 @@ describe('Wallet', () => { await wallet.destroy(); - const recreatedWallet = new Wallet(walletOptions); - const accounts = await recreatedWallet.getAccounts(); - expect(accounts.length).toStrictEqual(1); + const recreatedWallet = new Wallet({ storagePath: './test-recreate-wallet' }); await recreatedWallet.destroy() removeDir(storagePath) diff --git a/bindings/python/examples/exchange/1_create_account.py b/bindings/python/examples/exchange/1_create_account.py index 6146522fe0..d870accd6d 100644 --- a/bindings/python/examples/exchange/1_create_account.py +++ b/bindings/python/examples/exchange/1_create_account.py @@ -1,7 +1,7 @@ # Copyright 2023 IOTA Stiftung # SPDX-License-Identifier: Apache-2.0 -# This example creates a new database and account. +# This example creates a new database and wallet. import os diff --git a/bindings/python/examples/how_tos/accounts_and_addresses/consolidate_outputs.py b/bindings/python/examples/how_tos/accounts_and_addresses/consolidate_outputs.py index 6bf89a6d0c..261446ff26 100644 --- a/bindings/python/examples/how_tos/accounts_and_addresses/consolidate_outputs.py +++ b/bindings/python/examples/how_tos/accounts_and_addresses/consolidate_outputs.py @@ -27,7 +27,7 @@ # List unspent outputs before consolidation. # The output we created with example `request_funds` and the basic output from `mint` have only one # unlock condition and it is an `AddressUnlockCondition`, and so they are valid for consolidation. They have the -# same `AddressUnlockCondition`(the first address of the account), so they will be consolidated into one +# same `AddressUnlockCondition`(the address of the wallet), so they will be consolidated into one # output. outputs = account.unspent_outputs() print('Outputs BEFORE consolidation:') diff --git a/bindings/python/examples/how_tos/accounts_and_addresses/create_account.py b/bindings/python/examples/how_tos/accounts_and_addresses/create_account.py index 55dbc1abb0..09758a6c23 100644 --- a/bindings/python/examples/how_tos/accounts_and_addresses/create_account.py +++ b/bindings/python/examples/how_tos/accounts_and_addresses/create_account.py @@ -6,7 +6,7 @@ load_dotenv() -# This example creates a new database and account +# This example creates a new database and wallet node_url = os.environ.get('NODE_URL', 'https://api.testnet.shimmer.network') client_options = ClientOptions(nodes=[node_url]) diff --git a/bindings/python/examples/wallet/backup.py b/bindings/python/examples/wallet/backup.py index b34ad45433..b5302bb3df 100644 --- a/bindings/python/examples/wallet/backup.py +++ b/bindings/python/examples/wallet/backup.py @@ -6,7 +6,7 @@ load_dotenv() -# This example creates a new database and account +# This example creates a new database and wallet node_url = os.environ.get('NODE_URL', 'https://api.testnet.shimmer.network') client_options = ClientOptions(nodes=[node_url]) diff --git a/bindings/python/examples/wallet/logger.py b/bindings/python/examples/wallet/logger.py index c10b2aa806..30c0019a14 100644 --- a/bindings/python/examples/wallet/logger.py +++ b/bindings/python/examples/wallet/logger.py @@ -9,7 +9,7 @@ load_dotenv() -# This example creates a new database and account and write debug logs in +# This example creates a new database and wallet and write debug logs in # `wallet.log`. log_config = { diff --git a/bindings/python/iota_sdk/types/send_params.py b/bindings/python/iota_sdk/types/send_params.py index cd3e404472..c8f47f5e0d 100644 --- a/bindings/python/iota_sdk/types/send_params.py +++ b/bindings/python/iota_sdk/types/send_params.py @@ -89,7 +89,7 @@ class MintNftParams(): """Parameters for minting NFTs. Attributes: - address: A Bech32 encoded address to which the NFT will be minted. Default will use the first address of the account. + address: A Bech32 encoded address to which the NFT will be minted. Default will use the address of the wallet. sender: An NFT sender feature. metadata: An NFT metadata feature. tag: An NFT tag feature. @@ -110,7 +110,7 @@ class CreateAccountOutputParams(): """Parameters for creating accounts. Attributes: - address: A Bech32 encoded address which will control the account. Default will use the first address of the account. + address: A Bech32 encoded address which will control the account. Default will use the address of the wallet. immutable_metadata: Immutable account metadata. metadata: Account metadata. """ diff --git a/bindings/wasm/examples/node.js b/bindings/wasm/examples/node.js index 6a779abebb..57489f2303 100644 --- a/bindings/wasm/examples/node.js +++ b/bindings/wasm/examples/node.js @@ -3,7 +3,7 @@ const console = require('console'); const fs = require('fs'); -const { Wallet, CoinType, initLogger } = require('../node/lib'); +const { Wallet, CoinType, initLogger, SecretManager } = require('../node/lib'); async function run() { try { @@ -19,27 +19,36 @@ async function run() { colorEnabled: true, }); + const mnemonicSecretManager = { + mnemonic: + 'inhale gorilla deny three celery song category owner lottery rent author wealth penalty crawl hobby obtain glad warm early rain clutch slab august bleak', + }; + + const secretManager = new SecretManager(mnemonicSecretManager); + + const walletAddress = await secretManager.generateEd25519Addresses({ + coinType: CoinType.IOTA, + accountIndex: 0, + range: { + start: 0, + end: 1, + }, + bech32Hrp: 'tst', + }); + const wallet = new Wallet({ + address: walletAddress[0], storagePath: './alice-database', - coinType: CoinType.Shimmer, + bipPath: { + coinType: CoinType.IOTA, + }, clientOptions: { nodes: ['https://api.testnet.shimmer.network'], }, - secretManager: { - mnemonic: - 'inhale gorilla deny three celery song category owner lottery rent author wealth penalty crawl hobby obtain glad warm early rain clutch slab august bleak', - }, + secretManager: mnemonicSecretManager, }); - const account = await wallet.createAccount({ - alias: 'Alice', - bech32Hrp: 'rms', - }); - - console.log('Account created:', account); - account.setAlias('new alias'); - - const balance = await account.sync(); + const balance = await wallet.sync(); console.log(balance); } diff --git a/bindings/wasm/test/account.spec.ts b/bindings/wasm/test/account.spec.ts index 37ac3ef02b..56a206d467 100644 --- a/bindings/wasm/test/account.spec.ts +++ b/bindings/wasm/test/account.spec.ts @@ -29,7 +29,7 @@ async function run() { expect(account.getMetadata().alias).toBe('Alice'); - const balance: Balance = await account.sync(); + const balance: Balance = await wallet.sync(); expect(balance.baseCoin.available).not.toBeNaN(); await account.setAlias('new alias'); diff --git a/sdk/src/wallet/operations/transaction/high_level/minting/mint_nfts.rs b/sdk/src/wallet/operations/transaction/high_level/minting/mint_nfts.rs index b5eb4a945e..3bef7fc38d 100644 --- a/sdk/src/wallet/operations/transaction/high_level/minting/mint_nfts.rs +++ b/sdk/src/wallet/operations/transaction/high_level/minting/mint_nfts.rs @@ -26,7 +26,7 @@ use crate::{ #[serde(rename_all = "camelCase")] pub struct MintNftParams { /// Bech32 encoded address to which the NFT will be minted. Default will use the - /// first address of the account. + /// address of the wallet. #[getset(get = "pub")] address: Option, /// NFT sender feature. diff --git a/sdk/src/wallet/operations/transaction/high_level/send.rs b/sdk/src/wallet/operations/transaction/high_level/send.rs index dadc527e4b..e1e36f24b7 100644 --- a/sdk/src/wallet/operations/transaction/high_level/send.rs +++ b/sdk/src/wallet/operations/transaction/high_level/send.rs @@ -36,7 +36,7 @@ pub struct SendParams { address: Bech32Address, /// Bech32 encoded return address, to which the storage deposit will be returned if one is necessary /// given the provided amount. If a storage deposit is needed and a return address is not provided, it will - /// default to the first address of the account. + /// default to the address of the wallet. #[getset(get = "pub")] return_address: Option, /// Expiration in slot indices, after which the output will be available for the sender again, if not spent by the diff --git a/sdk/src/wallet/operations/transaction/high_level/send_native_tokens.rs b/sdk/src/wallet/operations/transaction/high_level/send_native_tokens.rs index 3f77ad9e19..c487b043a9 100644 --- a/sdk/src/wallet/operations/transaction/high_level/send_native_tokens.rs +++ b/sdk/src/wallet/operations/transaction/high_level/send_native_tokens.rs @@ -36,7 +36,7 @@ pub struct SendNativeTokensParams { #[getset(get = "pub")] native_tokens: Vec<(TokenId, U256)>, /// Bech32 encoded address return address, to which the storage deposit will be returned. Default will use the - /// first address of the account + /// address of the wallet. #[getset(get = "pub")] return_address: Option, /// Expiration in slot indices, after which the output will be available for the sender again, if not spent by the From 3f451d4cefe2ce3ca867bb5d30da18ec09ac1142 Mon Sep 17 00:00:00 2001 From: Thibault Martinez Date: Tue, 14 Nov 2023 14:41:21 +0100 Subject: [PATCH 28/91] Add slot index query param to rewards API (#1615) --- sdk/src/client/node_api/core/routes.rs | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/sdk/src/client/node_api/core/routes.rs b/sdk/src/client/node_api/core/routes.rs index 462338bdd9..05379506ab 100644 --- a/sdk/src/client/node_api/core/routes.rs +++ b/sdk/src/client/node_api/core/routes.rs @@ -102,10 +102,16 @@ impl ClientInner { /// future rewards for those epochs. `epochStart` and `epochEnd` indicates the actual range for which reward value /// is returned and decayed for. /// GET /api/core/v3/rewards/{outputId} - pub async fn get_output_mana_rewards(&self, output_id: &OutputId) -> Result { + pub async fn get_output_mana_rewards( + &self, + output_id: &OutputId, + slot_index: impl Into> + Send, + ) -> Result { let path = &format!("api/core/v3/rewards/{output_id}"); - self.get_request(path, None, false, false).await + let query = query_tuples_to_query_string([slot_index.into().map(|i| ("slotIndex", i.to_string()))]); + + self.get_request(path, query.as_deref(), false, false).await } // Committee routes. From 147406447cad3460533c0461d34b55e328fb4454 Mon Sep 17 00:00:00 2001 From: DaughterOfMars Date: Wed, 15 Nov 2023 02:51:03 -0500 Subject: [PATCH 29/91] Refactor rent cost traits (#1065) * Refactor rent cost traits * remove pub'd field * Fix sufficient storage deposit calculation * Reduce sufficient SDR amount * Update comment * Hopefully last fix and better comments * Add delegation and staking byte costs, clippy * block issuer key byte factor * clippy and fix claiming calc * Revert check * cleanup, renames, and add test * Remove static rent * more cleanup * fix merge * revert claiming calculations * refactor rent parameters * Rename min_deposit fn to better reflect usage * rename rent * no_std * PR suggestions * weird comment * refactor with overhead * review * fix builder storage cost * comment out tests * impl StorageScore for MultiAddress {} * Add missing serde(with = "crate::utils::serde::string")) * Merge imports * Rename nits * Merge some more imports * More renames * Add TODO * rename output builder amount variant * Remove excess * Some renames lost in the merge * nit * suggestions * cleanup imports * fix implicit storage score * update terminology and separate trait * nit * suggestions * I did change that * blame the sickness * cleanup * Nits * Return is a BasicOutputBuilder * fmt --------- Co-authored-by: Thibault Martinez --- bindings/core/src/method/client.rs | 14 +- bindings/core/src/method/utils.rs | 10 +- bindings/core/src/method_handler/client.rs | 19 +- bindings/core/src/method_handler/utils.rs | 9 +- bindings/core/src/response.rs | 7 +- .../wallet/06-send-micro-transaction.ts | 2 +- bindings/nodejs/lib/client/client.ts | 8 +- .../nodejs/lib/types/client/bridge/client.ts | 4 +- .../nodejs/lib/types/client/bridge/index.ts | 4 +- .../basic-output-params.ts | 2 +- .../nodejs/lib/types/wallet/output-params.ts | 6 +- .../send_micro_transaction.py | 2 +- bindings/python/iota_sdk/client/_utils.py | 6 +- cli/src/wallet_cli/mod.rs | 4 +- .../client/output/build_account_output.rs | 4 +- .../client/output/build_nft_output.rs | 4 +- .../send_micro_transaction.rs | 2 +- sdk/examples/how_tos/outputs/features.rs | 4 +- .../how_tos/outputs/unlock_conditions.rs | 7 +- .../input_selection/remainder.rs | 4 +- .../input_selection/requirement/amount.rs | 12 +- sdk/src/client/core.rs | 12 +- sdk/src/types/block/address/account.rs | 7 +- sdk/src/types/block/address/anchor.rs | 4 +- sdk/src/types/block/address/ed25519.rs | 12 +- .../address/implicit_account_creation.rs | 11 +- sdk/src/types/block/address/mod.rs | 16 +- sdk/src/types/block/address/multi.rs | 4 +- sdk/src/types/block/address/nft.rs | 7 +- sdk/src/types/block/address/restricted.rs | 7 + sdk/src/types/block/error.rs | 2 +- sdk/src/types/block/output/account.rs | 59 +++-- sdk/src/types/block/output/anchor.rs | 94 ++++---- sdk/src/types/block/output/basic.rs | 163 +++++++++++-- sdk/src/types/block/output/delegation.rs | 71 +++--- .../block/output/feature/block_issuer.rs | 37 ++- sdk/src/types/block/output/feature/issuer.rs | 13 +- .../types/block/output/feature/metadata.rs | 4 +- sdk/src/types/block/output/feature/mod.rs | 25 +- sdk/src/types/block/output/feature/sender.rs | 13 +- sdk/src/types/block/output/feature/staking.rs | 13 +- sdk/src/types/block/output/feature/tag.rs | 4 +- sdk/src/types/block/output/foundry.rs | 67 +++--- sdk/src/types/block/output/mod.rs | 58 ++--- sdk/src/types/block/output/native_token.rs | 8 +- sdk/src/types/block/output/nft.rs | 114 +++++++-- sdk/src/types/block/output/rent.rs | 224 ------------------ sdk/src/types/block/output/storage_score.rs | 181 ++++++++++++++ .../block/output/unlock_condition/address.rs | 11 +- .../output/unlock_condition/expiration.rs | 13 +- .../unlock_condition/governor_address.rs | 11 +- .../immutable_account_address.rs | 11 +- .../block/output/unlock_condition/mod.rs | 29 ++- .../state_controller_address.rs | 11 +- .../storage_deposit_return.rs | 16 +- .../block/output/unlock_condition/timelock.rs | 4 +- .../payload/signed_transaction/transaction.rs | 2 +- sdk/src/types/block/protocol.rs | 26 +- sdk/src/types/block/rand/output/mod.rs | 22 +- sdk/src/wallet/core/mod.rs | 4 +- sdk/src/wallet/operations/balance.rs | 52 ++-- sdk/src/wallet/operations/output_claiming.rs | 34 +-- .../transaction/high_level/create_account.rs | 4 +- .../high_level/minting/create_native_token.rs | 6 +- .../high_level/minting/mint_nfts.rs | 4 +- .../operations/transaction/high_level/send.rs | 53 ++--- .../high_level/send_native_tokens.rs | 34 +-- sdk/src/wallet/operations/transaction/mod.rs | 2 +- .../operations/transaction/prepare_output.rs | 68 +++--- .../transaction/prepare_transaction.rs | 4 +- .../client/input_selection/basic_outputs.rs | 73 +++--- .../client/input_selection/nft_outputs.rs | 17 +- sdk/tests/client/node_api/indexer.rs | 6 +- sdk/tests/types/block_id.rs | 2 +- sdk/tests/types/mod.rs | 2 +- sdk/tests/types/output/account.rs | 6 +- sdk/tests/types/output/basic.rs | 6 +- sdk/tests/types/output/foundry.rs | 8 +- sdk/tests/types/output/nft.rs | 6 +- sdk/tests/types/{rent.rs => storage_score.rs} | 2 +- sdk/tests/wallet/claim_outputs.rs | 10 +- sdk/tests/wallet/output_preparation.rs | 38 ++- 82 files changed, 1165 insertions(+), 796 deletions(-) delete mode 100644 sdk/src/types/block/output/rent.rs create mode 100644 sdk/src/types/block/output/storage_score.rs rename sdk/tests/types/{rent.rs => storage_score.rs} (94%) diff --git a/bindings/core/src/method/client.rs b/bindings/core/src/method/client.rs index c13efc2ae9..d9705da248 100644 --- a/bindings/core/src/method/client.rs +++ b/bindings/core/src/method/client.rs @@ -37,7 +37,7 @@ pub enum ClientMethod { #[allow(missing_docs)] #[serde(rename_all = "camelCase")] BuildAccountOutput { - // If not provided, minimum storage deposit will be used + // If not provided, minimum amount will be used #[serde(default, with = "option_string")] amount: Option, // TODO: Determine if `default` is wanted here @@ -55,7 +55,7 @@ pub enum ClientMethod { #[allow(missing_docs)] #[serde(rename_all = "camelCase")] BuildBasicOutput { - // If not provided, minimum storage deposit will be used + // If not provided, minimum amount will be used #[serde(default, with = "option_string")] amount: Option, // TODO: Determine if `default` is wanted here @@ -70,7 +70,7 @@ pub enum ClientMethod { #[allow(missing_docs)] #[serde(rename_all = "camelCase")] BuildFoundryOutput { - // If not provided, minimum storage deposit will be used + // If not provided, minimum amount will be used #[serde(default, with = "option_string")] amount: Option, native_tokens: Option>, @@ -85,7 +85,7 @@ pub enum ClientMethod { #[allow(missing_docs)] #[serde(rename_all = "camelCase")] BuildNftOutput { - // If not provided, minimum storage deposit will be used + // If not provided, minimum amount will be used #[serde(default, with = "option_string")] amount: Option, // TODO: Determine if `default` is wanted here @@ -351,10 +351,10 @@ pub enum ClientMethod { /// Human readable part bech32_hrp: Option, }, - /// Calculate the minimum required storage deposit for an output. + /// Calculate the minimum required amount for an output. /// Expected response: - /// [`MinimumRequiredStorageDeposit`](crate::Response::MinimumRequiredStorageDeposit) - MinimumRequiredStorageDeposit { output: OutputDto }, + /// [`OutputAmount`](crate::Response::OutputAmount) + ComputeMinimumOutputAmount { output: OutputDto }, /// Requests funds for a given address from the faucet, for example `https://faucet.testnet.shimmer.network/api/enqueue` or `http://localhost:8091/api/enqueue`. RequestFundsFromFaucet { /// Faucet URL diff --git a/bindings/core/src/method/utils.rs b/bindings/core/src/method/utils.rs index 71047d504d..e3e07d06af 100644 --- a/bindings/core/src/method/utils.rs +++ b/bindings/core/src/method/utils.rs @@ -4,7 +4,7 @@ use derivative::Derivative; use iota_sdk::types::block::{ address::{Bech32Address, Hrp}, - output::{dto::OutputDto, AccountId, NftId, OutputId, RentStructure}, + output::{dto::OutputDto, AccountId, NftId, OutputId, StorageScoreParameters}, payload::signed_transaction::{ dto::{SignedTransactionPayloadDto, TransactionDto}, TransactionId, @@ -128,8 +128,12 @@ pub enum UtilsMethod { /// The transaction. transaction: TransactionDto, }, - /// Computes the required storage deposit of an output. - ComputeStorageDeposit { output: OutputDto, rent: RentStructure }, + /// Computes the minimum required amount of an output. + #[serde(rename_all = "camelCase")] + ComputeMinimumOutputAmount { + output: OutputDto, + storage_score_parameters: StorageScoreParameters, + }, /// Checks if the given mnemonic is valid. /// Expected response: [`Ok`](crate::Response::Ok) VerifyMnemonic { diff --git a/bindings/core/src/method_handler/client.rs b/bindings/core/src/method_handler/client.rs index a5e99d5990..e1be21057c 100644 --- a/bindings/core/src/method_handler/client.rs +++ b/bindings/core/src/method_handler/client.rs @@ -9,7 +9,8 @@ use iota_sdk::{ api::core::OutputWithMetadataResponse, block::{ output::{ - dto::OutputDto, AccountOutput, BasicOutput, FoundryOutput, NftOutput, Output, OutputBuilderAmount, Rent, + dto::OutputDto, AccountOutput, BasicOutput, FoundryOutput, MinimumOutputAmount, NftOutput, Output, + OutputBuilderAmount, }, payload::Payload, SignedBlock, SignedBlockDto, UnsignedBlockDto, @@ -69,7 +70,7 @@ pub(crate) async fn call_client_method_internal(client: &Client, method: ClientM if let Some(amount) = amount { OutputBuilderAmount::Amount(amount) } else { - OutputBuilderAmount::MinimumStorageDeposit(client.get_rent_structure().await?) + OutputBuilderAmount::MinimumAmount(client.get_storage_score_parameters().await?) }, mana, native_tokens, @@ -94,7 +95,7 @@ pub(crate) async fn call_client_method_internal(client: &Client, method: ClientM if let Some(amount) = amount { OutputBuilderAmount::Amount(amount) } else { - OutputBuilderAmount::MinimumStorageDeposit(client.get_rent_structure().await?) + OutputBuilderAmount::MinimumAmount(client.get_storage_score_parameters().await?) }, mana, native_tokens, @@ -118,7 +119,7 @@ pub(crate) async fn call_client_method_internal(client: &Client, method: ClientM if let Some(amount) = amount { OutputBuilderAmount::Amount(amount) } else { - OutputBuilderAmount::MinimumStorageDeposit(client.get_rent_structure().await?) + OutputBuilderAmount::MinimumAmount(client.get_storage_score_parameters().await?) }, native_tokens, serial_number, @@ -144,7 +145,7 @@ pub(crate) async fn call_client_method_internal(client: &Client, method: ClientM if let Some(amount) = amount { OutputBuilderAmount::Amount(amount) } else { - OutputBuilderAmount::MinimumStorageDeposit(client.get_rent_structure().await?) + OutputBuilderAmount::MinimumAmount(client.get_storage_score_parameters().await?) }, mana, native_tokens, @@ -294,13 +295,11 @@ pub(crate) async fn call_client_method_internal(client: &Client, method: ClientM ClientMethod::HexPublicKeyToBech32Address { hex, bech32_hrp } => { Response::Bech32Address(client.hex_public_key_to_bech32_address(&hex, bech32_hrp).await?) } - ClientMethod::MinimumRequiredStorageDeposit { output } => { + ClientMethod::ComputeMinimumOutputAmount { output } => { let output = Output::try_from_dto_with_params(output, client.get_token_supply().await?)?; - let rent_structure = client.get_rent_structure().await?; + let storage_score_params = client.get_storage_score_parameters().await?; - let minimum_storage_deposit = output.rent_cost(rent_structure); - - Response::MinimumRequiredStorageDeposit(minimum_storage_deposit.to_string()) + Response::OutputAmount(output.minimum_amount(storage_score_params)) } ClientMethod::RequestFundsFromFaucet { url, address } => { Response::Faucet(request_funds_from_faucet(&url, &address).await?) diff --git a/bindings/core/src/method_handler/utils.rs b/bindings/core/src/method_handler/utils.rs index 4a0432cfec..ae1d3f8131 100644 --- a/bindings/core/src/method_handler/utils.rs +++ b/bindings/core/src/method_handler/utils.rs @@ -8,7 +8,7 @@ use iota_sdk::{ block::{ address::{AccountAddress, Address, ToBech32Ext}, input::UtxoInput, - output::{AccountId, FoundryId, NftId, Output, OutputId, Rent, TokenId}, + output::{AccountId, FoundryId, MinimumOutputAmount, NftId, Output, OutputId, TokenId}, payload::{signed_transaction::Transaction, SignedTransactionPayload}, SignedBlock, }, @@ -72,9 +72,12 @@ pub(crate) fn call_utils_method_internal(method: UtilsMethod) -> Result { Response::Hash(Transaction::try_from_dto(transaction)?.signing_hash().to_string()) } - UtilsMethod::ComputeStorageDeposit { output, rent } => { + UtilsMethod::ComputeMinimumOutputAmount { + output, + storage_score_parameters: storage_params, + } => { let out = Output::try_from_dto(output)?; - Response::MinimumRequiredStorageDeposit(out.rent_cost(rent).to_string()) + Response::OutputAmount(out.minimum_amount(storage_params)) } UtilsMethod::VerifyMnemonic { mnemonic } => { let mnemonic = Mnemonic::from(mnemonic); diff --git a/bindings/core/src/response.rs b/bindings/core/src/response.rs index da8d25c5d2..5db10c788e 100644 --- a/bindings/core/src/response.rs +++ b/bindings/core/src/response.rs @@ -33,6 +33,7 @@ use iota_sdk::{ BlockId, SignedBlockDto, UnsignedBlockDto, }, }, + utils::serde::string, wallet::{ types::{Balance, OutputDataDto, TransactionWithMetadataDto}, PreparedCreateNativeTokenTransactionDto, @@ -256,9 +257,9 @@ pub enum Response { /// - [`GetAddress`](crate::method::WalletMethod::GetAddress) Address(Bech32Address), /// Response for: - /// - [`MinimumRequiredStorageDeposit`](crate::method::ClientMethod::MinimumRequiredStorageDeposit) - /// - [`ComputeStorageDeposit`](crate::method::UtilsMethod::ComputeStorageDeposit) - MinimumRequiredStorageDeposit(String), + /// - [`ClientMethod::ComputeMinimumOutputAmount`](crate::method::ClientMethod::ComputeMinimumOutputAmount) + /// - [`UtilsMethod::ComputeMinimumOutputAmount`](crate::method::UtilsMethod::ComputeMinimumOutputAmount) + OutputAmount(#[serde(with = "string")] u64), /// Response for: /// - [`ClaimableOutputs`](crate::method::WalletMethod::ClaimableOutputs) OutputIds(Vec), diff --git a/bindings/nodejs/examples/wallet/06-send-micro-transaction.ts b/bindings/nodejs/examples/wallet/06-send-micro-transaction.ts index ff839d0746..5efb231547 100644 --- a/bindings/nodejs/examples/wallet/06-send-micro-transaction.ts +++ b/bindings/nodejs/examples/wallet/06-send-micro-transaction.ts @@ -11,7 +11,7 @@ const SEND_MICRO_AMOUNT = BigInt(1); const RECV_ADDRESS = 'rms1qpszqzadsym6wpppd6z037dvlejmjuke7s24hm95s9fg9vpua7vluaw60xu'; -// In this example we will send an amount below the minimum storage deposit. +// In this example we will send an amount below the minimum output amount. // // Make sure that `STRONGHOLD_SNAPSHOT_PATH` and `WALLET_DB_PATH` already exist by // running the `how_tos/accounts_and_addresses/create-wallet` example! diff --git a/bindings/nodejs/lib/client/client.ts b/bindings/nodejs/lib/client/client.ts index 26e4eb1213..31f73c0ccf 100644 --- a/bindings/nodejs/lib/client/client.ts +++ b/bindings/nodejs/lib/client/client.ts @@ -692,14 +692,14 @@ export class Client { } /** - * Calculate the minimum required storage deposit for an output. + * Calculate the minimum required amount for an output. * - * @param output The output to calculate the minimum deposit amount for. + * @param output The output to calculate the minimum amount for. * @returns The minimum required amount. */ - async minimumRequiredStorageDeposit(output: Output): Promise { + async computeMinimumOutputAmount(output: Output): Promise { const response = await this.methodHandler.callMethod({ - name: 'minimumRequiredStorageDeposit', + name: 'computeMinimumOutputAmount', data: { output, }, diff --git a/bindings/nodejs/lib/types/client/bridge/client.ts b/bindings/nodejs/lib/types/client/bridge/client.ts index 913a5500f9..786ed7cb4e 100644 --- a/bindings/nodejs/lib/types/client/bridge/client.ts +++ b/bindings/nodejs/lib/types/client/bridge/client.ts @@ -256,8 +256,8 @@ export interface __ClearListenersMethod__ { }; } -export type __MinimumRequiredStorageDepositMethod__ = { - name: 'minimumRequiredStorageDeposit'; +export type __ComputeMinimumOutputAmountMethod__ = { + name: 'computeMinimumOutputAmount'; data: { output: Output; }; diff --git a/bindings/nodejs/lib/types/client/bridge/index.ts b/bindings/nodejs/lib/types/client/bridge/index.ts index 591a2f1645..8535e6086d 100644 --- a/bindings/nodejs/lib/types/client/bridge/index.ts +++ b/bindings/nodejs/lib/types/client/bridge/index.ts @@ -49,7 +49,7 @@ import type { __BuildNftOutputMethod__, __ClearListenersMethod__, __SignatureUnlockMethod__, - __MinimumRequiredStorageDepositMethod__, + __ComputeMinimumOutputAmountMethod__, __RequestFundsFromFaucetMethod__, __CallPluginRouteMethod__, } from './client'; @@ -102,6 +102,6 @@ export type __ClientMethods__ = | __BuildFoundryOutputMethod__ | __BuildNftOutputMethod__ | __ClearListenersMethod__ - | __MinimumRequiredStorageDepositMethod__ + | __ComputeMinimumOutputAmountMethod__ | __RequestFundsFromFaucetMethod__ | __CallPluginRouteMethod__; diff --git a/bindings/nodejs/lib/types/client/output_builder_params/basic-output-params.ts b/bindings/nodejs/lib/types/client/output_builder_params/basic-output-params.ts index 96668662be..0ec7993f93 100644 --- a/bindings/nodejs/lib/types/client/output_builder_params/basic-output-params.ts +++ b/bindings/nodejs/lib/types/client/output_builder_params/basic-output-params.ts @@ -14,7 +14,7 @@ import { */ export interface BasicOutputBuilderParams { /** - * If not provided, minimum storage deposit will be used + * If not provided, minimum amount will be used */ amount?: u64 | NumericString; /** diff --git a/bindings/nodejs/lib/types/wallet/output-params.ts b/bindings/nodejs/lib/types/wallet/output-params.ts index 0474a24bba..1e9be9073d 100644 --- a/bindings/nodejs/lib/types/wallet/output-params.ts +++ b/bindings/nodejs/lib/types/wallet/output-params.ts @@ -58,7 +58,7 @@ export interface StorageDeposit { returnStrategy?: ReturnStrategy; /** * Determines whether the storage deposit will automatically add excess small funds when necessary. - * For example, given an account has 20 tokens and wants to send 15 tokens, and the minimum storage deposit + * For example, given an account has 20 tokens and wants to send 15 tokens, and the minimum amount * is 10 tokens, it wouldn't be possible to create an output with the 5 token remainder. If this flag is enabled, * the 5 tokens will be added to the output automatically. */ @@ -67,8 +67,8 @@ export interface StorageDeposit { /** Return strategy for the storage deposit. */ export enum ReturnStrategy { - /** A storage deposit return unlock condition will be added with the required minimum storage deposit. */ + /** A storage deposit return unlock condition will be added with the additional amount needed to satisfy storage costs. */ Return = 'Return', - /** The recipient address will get the additional amount to reach the minimum storage deposit gifted. */ + /** The recipient address will receive the additional amount needed to satisfy storage costs. */ Gift = 'Gift', } diff --git a/bindings/python/examples/how_tos/advanced_transactions/send_micro_transaction.py b/bindings/python/examples/how_tos/advanced_transactions/send_micro_transaction.py index ae6975fe7f..2c6af5ee3e 100644 --- a/bindings/python/examples/how_tos/advanced_transactions/send_micro_transaction.py +++ b/bindings/python/examples/how_tos/advanced_transactions/send_micro_transaction.py @@ -6,7 +6,7 @@ load_dotenv() -# In this example we will send an amount below the minimum storage deposit +# In this example we will send an amount below the minimum amount wallet = Wallet(os.environ['WALLET_DB_PATH']) diff --git a/bindings/python/iota_sdk/client/_utils.py b/bindings/python/iota_sdk/client/_utils.py index d38d867e80..29678c6d46 100644 --- a/bindings/python/iota_sdk/client/_utils.py +++ b/bindings/python/iota_sdk/client/_utils.py @@ -49,11 +49,11 @@ def hex_public_key_to_bech32_address( 'bech32Hrp': bech32_hrp }) - def minimum_required_storage_deposit(self, output: Output) -> int: - """Minimum required storage deposit. + def computer_minimum_output_amount(self, output: Output) -> int: + """Minimum required output amount. """ return int(self._call_method( - 'minimumRequiredStorageDeposit', { + 'computeMinimumOutputAmount', { 'output': output.to_dict() } )) diff --git a/cli/src/wallet_cli/mod.rs b/cli/src/wallet_cli/mod.rs index f534b2e41b..05c14320d3 100644 --- a/cli/src/wallet_cli/mod.rs +++ b/cli/src/wallet_cli/mod.rs @@ -730,11 +730,11 @@ pub async fn send_native_token_command( let address = address.convert()?; let transaction = if gift_storage_deposit.unwrap_or(false) { // Send native tokens together with the required storage deposit - let rent_structure = wallet.client().get_rent_structure().await?; + let storage_params = wallet.client().get_storage_score_parameters().await?; wallet.client().bech32_hrp_matches(address.hrp()).await?; - let outputs = [BasicOutputBuilder::new_with_minimum_storage_deposit(rent_structure) + let outputs = [BasicOutputBuilder::new_with_minimum_amount(storage_params) .add_unlock_condition(AddressUnlockCondition::new(address)) .with_native_tokens([NativeToken::new( TokenId::from_str(&token_id)?, diff --git a/sdk/examples/client/output/build_account_output.rs b/sdk/examples/client/output/build_account_output.rs index 6e5f8ed133..b29486db14 100644 --- a/sdk/examples/client/output/build_account_output.rs +++ b/sdk/examples/client/output/build_account_output.rs @@ -34,7 +34,7 @@ async fn main() -> Result<()> { .finish() .await?; - let rent_structure = client.get_rent_structure().await?; + let storage_score_params = client.get_storage_score_parameters().await?; let address = std::env::args() .nth(1) @@ -42,7 +42,7 @@ async fn main() -> Result<()> { let address = Address::try_from_bech32(address)?; // Account id needs to be null the first time - let account_output = AccountOutputBuilder::new_with_minimum_storage_deposit(rent_structure, AccountId::null()) + let account_output = AccountOutputBuilder::new_with_minimum_amount(storage_score_params, AccountId::null()) .add_feature(SenderFeature::new(address.clone())) .add_feature(MetadataFeature::new(metadata)?) .add_immutable_feature(IssuerFeature::new(address.clone())) diff --git a/sdk/examples/client/output/build_nft_output.rs b/sdk/examples/client/output/build_nft_output.rs index 149ee6c284..208f662a09 100644 --- a/sdk/examples/client/output/build_nft_output.rs +++ b/sdk/examples/client/output/build_nft_output.rs @@ -34,7 +34,7 @@ async fn main() -> Result<()> { .finish() .await?; - let rent_structure = client.get_rent_structure().await?; + let storage_score_params = client.get_storage_score_parameters().await?; let address = std::env::args() .nth(1) @@ -55,7 +55,7 @@ async fn main() -> Result<()> { .to_string(); // NftId needs to be null the first time - let nft_output = NftOutputBuilder::new_with_minimum_storage_deposit(rent_structure, NftId::null()) + let nft_output = NftOutputBuilder::new_with_minimum_amount(storage_score_params, NftId::null()) .add_unlock_condition(AddressUnlockCondition::new(address.clone())) .add_feature(SenderFeature::new(address.clone())) .add_feature(MetadataFeature::new(MUTABLE_METADATA)?) diff --git a/sdk/examples/how_tos/advanced_transactions/send_micro_transaction.rs b/sdk/examples/how_tos/advanced_transactions/send_micro_transaction.rs index ff511714df..a4ddb1db9e 100644 --- a/sdk/examples/how_tos/advanced_transactions/send_micro_transaction.rs +++ b/sdk/examples/how_tos/advanced_transactions/send_micro_transaction.rs @@ -1,7 +1,7 @@ // Copyright 2023 IOTA Stiftung // SPDX-License-Identifier: Apache-2.0 -//! In this example we will send an amount below the minimum storage deposit. +//! In this example we will send an amount below the minimum amount. //! //! Make sure that `STRONGHOLD_SNAPSHOT_PATH` and `WALLET_DB_PATH` already exist by //! running the `./how_tos/accounts_and_addresses/create_wallet.rs` example! diff --git a/sdk/examples/how_tos/outputs/features.rs b/sdk/examples/how_tos/outputs/features.rs index 95a7b2284d..414ffe092e 100644 --- a/sdk/examples/how_tos/outputs/features.rs +++ b/sdk/examples/how_tos/outputs/features.rs @@ -31,11 +31,11 @@ async fn main() -> Result<()> { // Create a client instance. let client = Client::builder().with_node(&node_url)?.finish().await?; - let rent_structure = client.get_rent_structure().await?; + let storage_score_params = client.get_storage_score_parameters().await?; let address = Address::try_from_bech32("rms1qpllaj0pyveqfkwxmnngz2c488hfdtmfrj3wfkgxtk4gtyrax0jaxzt70zy")?; - let nft_output_builder = NftOutputBuilder::new_with_minimum_storage_deposit(rent_structure, NftId::null()) + let nft_output_builder = NftOutputBuilder::new_with_minimum_amount(storage_score_params, NftId::null()) .add_unlock_condition(AddressUnlockCondition::new(address.clone())); let outputs = [ diff --git a/sdk/examples/how_tos/outputs/unlock_conditions.rs b/sdk/examples/how_tos/outputs/unlock_conditions.rs index 60f566af70..e926e9fde8 100644 --- a/sdk/examples/how_tos/outputs/unlock_conditions.rs +++ b/sdk/examples/how_tos/outputs/unlock_conditions.rs @@ -34,17 +34,16 @@ async fn main() -> Result<()> { let client = Client::builder().with_node(&node_url)?.finish().await?; let token_supply = client.get_token_supply().await?; - let rent_structure = client.get_rent_structure().await?; + let storage_score_params = client.get_storage_score_parameters().await?; let address = Address::try_from_bech32("rms1qpllaj0pyveqfkwxmnngz2c488hfdtmfrj3wfkgxtk4gtyrax0jaxzt70zy")?; let account_address = Address::try_from_bech32("rms1pr59qm43mjtvhcajfmupqf23x29llam88yecn6pyul80rx099krmv2fnnux")?; let token_scheme = TokenScheme::Simple(SimpleTokenScheme::new(50, 0, 100)?); - let basic_output_builder = BasicOutputBuilder::new_with_minimum_storage_deposit(rent_structure) + let basic_output_builder = BasicOutputBuilder::new_with_minimum_amount(storage_score_params) .add_unlock_condition(AddressUnlockCondition::new(address.clone())); - let foundry_output_builder = - FoundryOutputBuilder::new_with_minimum_storage_deposit(rent_structure, 1, token_scheme); + let foundry_output_builder = FoundryOutputBuilder::new_with_minimum_amount(storage_score_params, 1, token_scheme); let outputs = [ //// most simple output diff --git a/sdk/src/client/api/block_builder/input_selection/remainder.rs b/sdk/src/client/api/block_builder/input_selection/remainder.rs index e7442dcdd0..0dae140a3e 100644 --- a/sdk/src/client/api/block_builder/input_selection/remainder.rs +++ b/sdk/src/client/api/block_builder/input_selection/remainder.rs @@ -66,7 +66,7 @@ impl InputSelection { let native_tokens_remainder = native_tokens_diff.is_some(); let mut remainder_builder = - BasicOutputBuilder::new_with_minimum_storage_deposit(self.protocol_parameters.rent_structure()) + BasicOutputBuilder::new_with_minimum_amount(self.protocol_parameters.storage_score_parameters()) .add_unlock_condition(AddressUnlockCondition::new(Address::from(Ed25519Address::from( [0; 32], )))); @@ -140,7 +140,7 @@ impl InputSelection { log::debug!("Created remainder output of {diff} for {remainder_address:?}"); - remainder.verify_storage_deposit(self.protocol_parameters.rent_structure())?; + remainder.verify_storage_deposit(self.protocol_parameters.storage_score_parameters())?; Ok(( Some(RemainderData { diff --git a/sdk/src/client/api/block_builder/input_selection/requirement/amount.rs b/sdk/src/client/api/block_builder/input_selection/requirement/amount.rs index de78c4aaa9..9a08208936 100644 --- a/sdk/src/client/api/block_builder/input_selection/requirement/amount.rs +++ b/sdk/src/client/api/block_builder/input_selection/requirement/amount.rs @@ -11,7 +11,7 @@ use crate::{ input::INPUT_COUNT_MAX, output::{ unlock_condition::StorageDepositReturnUnlockCondition, AccountOutputBuilder, FoundryOutputBuilder, - NftOutputBuilder, Output, OutputId, Rent, + MinimumOutputAmount, NftOutputBuilder, Output, OutputId, }, slot::SlotIndex, }, @@ -233,11 +233,15 @@ impl InputSelection { for output in outputs { let diff = amount_selection.missing_amount(); let amount = output.amount(); - let rent = output.rent_cost(self.protocol_parameters.rent_structure()); + let minimum_amount = output.minimum_amount(self.protocol_parameters.storage_score_parameters()); - let new_amount = if amount >= diff + rent { amount - diff } else { rent }; + let new_amount = if amount >= diff + minimum_amount { + amount - diff + } else { + minimum_amount + }; - // TODO check that new_amount is enough for the rent + // TODO check that new_amount is enough for the storage cost // PANIC: unwrap is fine as non-chain outputs have been filtered out already. log::debug!( diff --git a/sdk/src/client/core.rs b/sdk/src/client/core.rs index e2ca71c2f4..e1e623e7d8 100644 --- a/sdk/src/client/core.rs +++ b/sdk/src/client/core.rs @@ -24,7 +24,7 @@ use crate::{ node_manager::NodeManager, Error, }, - types::block::{address::Hrp, output::RentStructure, protocol::ProtocolParameters}, + types::block::{address::Hrp, output::StorageScoreParameters, protocol::ProtocolParameters}, }; /// An IOTA node client. @@ -152,9 +152,13 @@ impl ClientInner { Ok(self.get_network_info().await?.protocol_parameters.bech32_hrp()) } - /// Gets the rent structure of the node we're connecting to. - pub async fn get_rent_structure(&self) -> Result { - Ok(self.get_network_info().await?.protocol_parameters.rent_structure()) + /// Gets the storage score parameters of the node we're connecting to. + pub async fn get_storage_score_parameters(&self) -> Result { + Ok(self + .get_network_info() + .await? + .protocol_parameters + .storage_score_parameters()) } /// Gets the token supply of the node we're connecting to. diff --git a/sdk/src/types/block/address/account.rs b/sdk/src/types/block/address/account.rs index 915c83eb29..4c9816798f 100644 --- a/sdk/src/types/block/address/account.rs +++ b/sdk/src/types/block/address/account.rs @@ -5,7 +5,10 @@ use core::str::FromStr; use derive_more::{AsRef, Deref, Display, From}; -use crate::types::block::{output::AccountId, Error}; +use crate::types::block::{ + output::{AccountId, StorageScore}, + Error, +}; /// An account address. #[derive(Clone, Copy, Eq, PartialEq, Ord, PartialOrd, Hash, From, AsRef, Deref, Display, packable::Packable)] @@ -37,6 +40,8 @@ impl AccountAddress { } } +impl StorageScore for AccountAddress {} + impl FromStr for AccountAddress { type Err = Error; diff --git a/sdk/src/types/block/address/anchor.rs b/sdk/src/types/block/address/anchor.rs index d15af00f0e..613bd83248 100644 --- a/sdk/src/types/block/address/anchor.rs +++ b/sdk/src/types/block/address/anchor.rs @@ -6,7 +6,7 @@ use core::str::FromStr; use derive_more::{AsRef, Deref, Display, From}; use crate::types::block::{ - output::{AnchorId, OutputId}, + output::{AnchorId, OutputId, StorageScore}, Error, }; @@ -40,6 +40,8 @@ impl AnchorAddress { } } +impl StorageScore for AnchorAddress {} + impl FromStr for AnchorAddress { type Err = Error; diff --git a/sdk/src/types/block/address/ed25519.rs b/sdk/src/types/block/address/ed25519.rs index 2aa4880b19..4d44b1e5e9 100644 --- a/sdk/src/types/block/address/ed25519.rs +++ b/sdk/src/types/block/address/ed25519.rs @@ -10,7 +10,7 @@ use crypto::{ use derive_more::{AsRef, Deref, From}; use packable::Packable; -use crate::types::block::Error; +use crate::types::block::{output::StorageScore, Error}; /// An Ed25519 address. #[derive(Clone, Copy, Eq, PartialEq, Ord, PartialOrd, Hash, From, AsRef, Deref, Packable)] @@ -25,8 +25,12 @@ impl Ed25519Address { /// Creates a new [`Ed25519Address`]. #[inline(always)] - pub fn new(address: [u8; Self::LENGTH]) -> Self { - Self::from(address) + pub const fn new(address: [u8; Self::LENGTH]) -> Self { + Self(address) + } + + pub(crate) const fn null() -> Self { + Self([0; Self::LENGTH]) } /// Creates a new [`Ed25519Address`] from the bytes of a [`PublicKey`]. @@ -35,6 +39,8 @@ impl Ed25519Address { } } +impl StorageScore for Ed25519Address {} + impl FromStr for Ed25519Address { type Err = Error; diff --git a/sdk/src/types/block/address/implicit_account_creation.rs b/sdk/src/types/block/address/implicit_account_creation.rs index 2d27681af5..21e3f3e877 100644 --- a/sdk/src/types/block/address/implicit_account_creation.rs +++ b/sdk/src/types/block/address/implicit_account_creation.rs @@ -4,7 +4,10 @@ use derive_more::{AsRef, Deref, Display, From, FromStr}; use packable::Packable; -use crate::types::block::address::Ed25519Address; +use crate::types::block::{ + address::Ed25519Address, + output::{StorageScore, StorageScoreParameters}, +}; /// An implicit account creation address that can be used to convert a /// [`BasicOutput`](crate::types::block::output::BasicOutput) to an @@ -31,6 +34,12 @@ impl ImplicitAccountCreationAddress { } } +impl StorageScore for ImplicitAccountCreationAddress { + fn storage_score(&self, params: StorageScoreParameters) -> u64 { + params.implicit_account_creation_address_offset() + } +} + impl core::fmt::Debug for ImplicitAccountCreationAddress { fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result { write!(f, "ImplicitAccountCreationAddress({self})") diff --git a/sdk/src/types/block/address/mod.rs b/sdk/src/types/block/address/mod.rs index 4a8021ad8e..58fd1587aa 100644 --- a/sdk/src/types/block/address/mod.rs +++ b/sdk/src/types/block/address/mod.rs @@ -28,7 +28,7 @@ pub use self::{ }; use crate::{ types::block::{ - output::Output, + output::{Output, StorageScore, StorageScoreParameters}, semantic::{SemanticValidationContext, TransactionFailureReason}, signature::Signature, unlock::Unlock, @@ -199,6 +199,20 @@ impl Address { } } +impl StorageScore for Address { + fn storage_score(&self, params: StorageScoreParameters) -> u64 { + match self { + Address::Ed25519(address) => address.storage_score(params), + Address::Account(address) => address.storage_score(params), + Address::Nft(address) => address.storage_score(params), + Address::Anchor(address) => address.storage_score(params), + Address::ImplicitAccountCreation(address) => address.storage_score(params), + Address::Multi(address) => address.storage_score(params), + Address::Restricted(address) => address.storage_score(params), + } + } +} + pub trait ToBech32Ext: Sized { /// Try to encode this address to a bech32 string with the given Human Readable Part as prefix. fn try_to_bech32(self, hrp: impl ConvertTo) -> Result; diff --git a/sdk/src/types/block/address/multi.rs b/sdk/src/types/block/address/multi.rs index 36fdc297a0..e66da44416 100644 --- a/sdk/src/types/block/address/multi.rs +++ b/sdk/src/types/block/address/multi.rs @@ -15,7 +15,7 @@ use packable::{ Packable, }; -use crate::types::block::{address::Address, Error}; +use crate::types::block::{address::Address, output::StorageScore, Error}; pub(crate) type WeightedAddressCount = BoundedU8<{ *MultiAddress::ADDRESSES_COUNT.start() }, { *MultiAddress::ADDRESSES_COUNT.end() }>; @@ -187,6 +187,8 @@ fn verify_cumulative_weight( Ok(()) } +impl StorageScore for MultiAddress {} + impl fmt::Display for MultiAddress { fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { write!( diff --git a/sdk/src/types/block/address/nft.rs b/sdk/src/types/block/address/nft.rs index 5bb31750be..995256960e 100644 --- a/sdk/src/types/block/address/nft.rs +++ b/sdk/src/types/block/address/nft.rs @@ -5,7 +5,10 @@ use core::str::FromStr; use derive_more::{AsRef, Deref, Display, From}; -use crate::types::block::{output::NftId, Error}; +use crate::types::block::{ + output::{NftId, StorageScore}, + Error, +}; /// An NFT address. #[derive(Clone, Copy, Eq, PartialEq, Ord, PartialOrd, Hash, From, AsRef, Deref, Display, packable::Packable)] @@ -37,6 +40,8 @@ impl NftAddress { } } +impl StorageScore for NftAddress {} + impl FromStr for NftAddress { type Err = Error; diff --git a/sdk/src/types/block/address/restricted.rs b/sdk/src/types/block/address/restricted.rs index c2bd73cc3a..0d6a2c7da4 100644 --- a/sdk/src/types/block/address/restricted.rs +++ b/sdk/src/types/block/address/restricted.rs @@ -7,6 +7,7 @@ use packable::{Packable, PackableExt}; use super::Address; use crate::types::block::{ capabilities::{Capabilities, CapabilityFlag}, + output::{StorageScore, StorageScoreParameters}, Error, }; @@ -54,6 +55,12 @@ impl RestrictedAddress { } } +impl StorageScore for RestrictedAddress { + fn storage_score(&self, params: StorageScoreParameters) -> u64 { + self.address.storage_score(params) + } +} + impl TryFrom
for RestrictedAddress { type Error = Error; diff --git a/sdk/src/types/block/error.rs b/sdk/src/types/block/error.rs index 7fb39b3728..1382f6a562 100644 --- a/sdk/src/types/block/error.rs +++ b/sdk/src/types/block/error.rs @@ -264,7 +264,7 @@ impl fmt::Display for Error { Self::InsufficientStorageDepositReturnAmount { deposit, required } => { write!( f, - "the return deposit ({deposit}) must be greater than the minimum storage deposit ({required})" + "the return deposit ({deposit}) must be greater than the minimum output amount ({required})" ) } Self::StorageDepositReturnExceedsOutputAmount { deposit, amount } => write!( diff --git a/sdk/src/types/block/output/account.rs b/sdk/src/types/block/output/account.rs index e389d899c8..1a65c4f833 100644 --- a/sdk/src/types/block/output/account.rs +++ b/sdk/src/types/block/output/account.rs @@ -8,7 +8,7 @@ use packable::{ error::{UnpackError, UnpackErrorExt}, packer::Packer, unpacker::Unpacker, - Packable, + Packable, PackableExt, }; use crate::types::block::{ @@ -16,8 +16,9 @@ use crate::types::block::{ output::{ feature::{verify_allowed_features, Feature, FeatureFlags, Features}, unlock_condition::{verify_allowed_unlock_conditions, UnlockCondition, UnlockConditionFlags, UnlockConditions}, - verify_output_amount_min, verify_output_amount_packable, ChainId, NativeToken, NativeTokens, Output, - OutputBuilderAmount, OutputId, Rent, RentStructure, StateTransitionError, StateTransitionVerifier, + verify_output_amount_packable, ChainId, MinimumOutputAmount, NativeToken, NativeTokens, Output, + OutputBuilderAmount, OutputId, StateTransitionError, StateTransitionVerifier, StorageScore, + StorageScoreParameters, }, payload::signed_transaction::TransactionCapabilityFlag, protocol::ProtocolParameters, @@ -72,10 +73,10 @@ impl AccountOutputBuilder { Self::new(OutputBuilderAmount::Amount(amount), account_id) } - /// Creates an [`AccountOutputBuilder`] with a provided rent structure. - /// The amount will be set to the minimum storage deposit. - pub fn new_with_minimum_storage_deposit(rent_structure: RentStructure, account_id: AccountId) -> Self { - Self::new(OutputBuilderAmount::MinimumStorageDeposit(rent_structure), account_id) + /// Creates an [`AccountOutputBuilder`] with provided storage score parameters. + /// The amount will be set to the minimum required amount of the resulting output. + pub fn new_with_minimum_amount(params: StorageScoreParameters, account_id: AccountId) -> Self { + Self::new(OutputBuilderAmount::MinimumAmount(params), account_id) } fn new(amount: OutputBuilderAmount, account_id: AccountId) -> Self { @@ -98,10 +99,10 @@ impl AccountOutputBuilder { self } - /// Sets the amount to the minimum storage deposit. + /// Sets the amount to the minimum required amount. #[inline(always)] - pub fn with_minimum_storage_deposit(mut self, rent_structure: RentStructure) -> Self { - self.amount = OutputBuilderAmount::MinimumStorageDeposit(rent_structure); + pub fn with_minimum_amount(mut self, params: StorageScoreParameters) -> Self { + self.amount = OutputBuilderAmount::MinimumAmount(params); self } @@ -243,7 +244,7 @@ impl AccountOutputBuilder { verify_allowed_features(&immutable_features, AccountOutput::ALLOWED_IMMUTABLE_FEATURES)?; let mut output = AccountOutput { - amount: 1, + amount: 0, mana: self.mana, native_tokens: NativeTokens::from_set(self.native_tokens)?, account_id: self.account_id, @@ -255,13 +256,9 @@ impl AccountOutputBuilder { output.amount = match self.amount { OutputBuilderAmount::Amount(amount) => amount, - OutputBuilderAmount::MinimumStorageDeposit(rent_structure) => { - Output::Account(output.clone()).rent_cost(rent_structure) - } + OutputBuilderAmount::MinimumAmount(params) => output.minimum_amount(params), }; - verify_output_amount_min(output.amount)?; - Ok(output) } @@ -321,14 +318,11 @@ impl AccountOutput { AccountOutputBuilder::new_with_amount(amount, account_id) } - /// Creates a new [`AccountOutputBuilder`] with a provided rent structure. - /// The amount will be set to the minimum storage deposit. + /// Creates a new [`AccountOutputBuilder`] with provided storage score parameters. + /// The amount will be set to the minimum required amount. #[inline(always)] - pub fn build_with_minimum_storage_deposit( - rent_structure: RentStructure, - account_id: AccountId, - ) -> AccountOutputBuilder { - AccountOutputBuilder::new_with_minimum_storage_deposit(rent_structure, account_id) + pub fn build_with_minimum_amount(params: StorageScoreParameters, account_id: AccountId) -> AccountOutputBuilder { + AccountOutputBuilder::new_with_minimum_amount(params, account_id) } /// @@ -525,6 +519,19 @@ impl StateTransitionVerifier for AccountOutput { } } +impl StorageScore for AccountOutput { + fn storage_score(&self, params: StorageScoreParameters) -> u64 { + params.output_offset() + // Type byte + + (1 + self.packed_len() as u64) * params.data_factor() as u64 + + self.unlock_conditions.storage_score(params) + + self.features.storage_score(params) + + self.immutable_features.storage_score(params) + } +} + +impl MinimumOutputAmount for AccountOutput {} + impl Packable for AccountOutput { type UnpackError = Error; type UnpackVisitor = ProtocolParameters; @@ -704,8 +711,8 @@ pub(crate) mod dto { let params = params.into(); let mut builder = match amount { OutputBuilderAmount::Amount(amount) => AccountOutputBuilder::new_with_amount(amount, *account_id), - OutputBuilderAmount::MinimumStorageDeposit(rent_structure) => { - AccountOutputBuilder::new_with_minimum_storage_deposit(rent_structure, *account_id) + OutputBuilderAmount::MinimumAmount(params) => { + AccountOutputBuilder::new_with_minimum_amount(params, *account_id) } } .with_mana(mana); @@ -809,7 +816,7 @@ mod tests { test_split_dto(builder); let builder = - AccountOutput::build_with_minimum_storage_deposit(protocol_parameters.rent_structure(), account_id) + AccountOutput::build_with_minimum_amount(protocol_parameters.storage_score_parameters(), account_id) .add_native_token(NativeToken::new(TokenId::from(foundry_id), 1000).unwrap()) .add_unlock_condition(address) .with_features(rand_allowed_features(AccountOutput::ALLOWED_FEATURES)) diff --git a/sdk/src/types/block/output/anchor.rs b/sdk/src/types/block/output/anchor.rs index e6d5c03e8d..3646ea4e32 100644 --- a/sdk/src/types/block/output/anchor.rs +++ b/sdk/src/types/block/output/anchor.rs @@ -10,7 +10,7 @@ use packable::{ packer::Packer, prefix::BoxedSlicePrefix, unpacker::Unpacker, - Packable, + Packable, PackableExt, }; use crate::types::block::{ @@ -18,8 +18,9 @@ use crate::types::block::{ output::{ feature::{verify_allowed_features, Feature, FeatureFlags, Features}, unlock_condition::{verify_allowed_unlock_conditions, UnlockCondition, UnlockConditionFlags, UnlockConditions}, - verify_output_amount_min, verify_output_amount_packable, ChainId, NativeToken, NativeTokens, Output, - OutputBuilderAmount, OutputId, Rent, RentStructure, StateTransitionError, StateTransitionVerifier, + verify_output_amount_packable, ChainId, MinimumOutputAmount, NativeToken, NativeTokens, Output, + OutputBuilderAmount, OutputId, StateTransitionError, StateTransitionVerifier, StorageScore, + StorageScoreParameters, }, payload::signed_transaction::TransactionCapabilityFlag, protocol::ProtocolParameters, @@ -93,7 +94,7 @@ pub struct AnchorOutputBuilder { mana: u64, native_tokens: BTreeSet, anchor_id: AnchorId, - state_index: Option, + state_index: u32, state_metadata: Vec, unlock_conditions: BTreeSet, features: BTreeSet, @@ -106,10 +107,11 @@ impl AnchorOutputBuilder { Self::new(OutputBuilderAmount::Amount(amount), anchor_id) } - /// Creates an [`AnchorOutputBuilder`] with a provided rent structure. - /// The amount will be set to the minimum storage deposit. - pub fn new_with_minimum_storage_deposit(rent_structure: RentStructure, anchor_id: AnchorId) -> Self { - Self::new(OutputBuilderAmount::MinimumStorageDeposit(rent_structure), anchor_id) + /// Creates an [`AnchorOutputBuilder`] with provided storage score parameters. + /// The amount will be set to the minimum required amount of the resulting output. + #[inline(always)] + pub fn new_with_minimum_amount(params: StorageScoreParameters, anchor_id: AnchorId) -> Self { + Self::new(OutputBuilderAmount::MinimumAmount(params), anchor_id) } fn new(amount: OutputBuilderAmount, anchor_id: AnchorId) -> Self { @@ -118,7 +120,7 @@ impl AnchorOutputBuilder { mana: Default::default(), native_tokens: BTreeSet::new(), anchor_id, - state_index: None, + state_index: 0, state_metadata: Vec::new(), unlock_conditions: BTreeSet::new(), features: BTreeSet::new(), @@ -133,10 +135,10 @@ impl AnchorOutputBuilder { self } - /// Sets the amount to the minimum storage deposit. + /// Sets the amount to the minimum required amount. #[inline(always)] - pub fn with_minimum_storage_deposit(mut self, rent_structure: RentStructure) -> Self { - self.amount = OutputBuilderAmount::MinimumStorageDeposit(rent_structure); + pub fn with_minimum_amount(mut self, params: StorageScoreParameters) -> Self { + self.amount = OutputBuilderAmount::MinimumAmount(params); self } @@ -170,8 +172,8 @@ impl AnchorOutputBuilder { /// #[inline(always)] - pub fn with_state_index(mut self, state_index: impl Into>) -> Self { - self.state_index = state_index.into(); + pub fn with_state_index(mut self, state_index: u32) -> Self { + self.state_index = state_index; self } @@ -268,15 +270,13 @@ impl AnchorOutputBuilder { /// pub fn finish(self) -> Result { - let state_index = self.state_index.unwrap_or(0); - let state_metadata = self .state_metadata .into_boxed_slice() .try_into() .map_err(Error::InvalidStateMetadataLength)?; - verify_index_counter(&self.anchor_id, state_index)?; + verify_index_counter(&self.anchor_id, self.state_index)?; let unlock_conditions = UnlockConditions::from_set(self.unlock_conditions)?; @@ -291,11 +291,11 @@ impl AnchorOutputBuilder { verify_allowed_features(&immutable_features, AnchorOutput::ALLOWED_IMMUTABLE_FEATURES)?; let mut output = AnchorOutput { - amount: 1, + amount: 0, mana: self.mana, native_tokens: NativeTokens::from_set(self.native_tokens)?, anchor_id: self.anchor_id, - state_index, + state_index: self.state_index, state_metadata, unlock_conditions, features, @@ -304,13 +304,9 @@ impl AnchorOutputBuilder { output.amount = match self.amount { OutputBuilderAmount::Amount(amount) => amount, - OutputBuilderAmount::MinimumStorageDeposit(rent_structure) => { - Output::Anchor(output.clone()).rent_cost(rent_structure) - } + OutputBuilderAmount::MinimumAmount(params) => output.minimum_amount(params), }; - verify_output_amount_min(output.amount)?; - Ok(output) } @@ -327,7 +323,7 @@ impl From<&AnchorOutput> for AnchorOutputBuilder { mana: output.mana, native_tokens: output.native_tokens.iter().copied().collect(), anchor_id: output.anchor_id, - state_index: Some(output.state_index), + state_index: output.state_index, state_metadata: output.state_metadata.to_vec(), unlock_conditions: output.unlock_conditions.iter().cloned().collect(), features: output.features.iter().cloned().collect(), @@ -379,14 +375,11 @@ impl AnchorOutput { AnchorOutputBuilder::new_with_amount(amount, anchor_id) } - /// Creates a new [`AnchorOutputBuilder`] with a provided rent structure. - /// The amount will be set to the minimum storage deposit. + /// Creates a new [`AnchorOutputBuilder`] with provided storage score parameters. + /// The amount will be set to the minimum required amount. #[inline(always)] - pub fn build_with_minimum_storage_deposit( - rent_structure: RentStructure, - anchor_id: AnchorId, - ) -> AnchorOutputBuilder { - AnchorOutputBuilder::new_with_minimum_storage_deposit(rent_structure, anchor_id) + pub fn build_with_minimum_amount(params: StorageScoreParameters, anchor_id: AnchorId) -> AnchorOutputBuilder { + AnchorOutputBuilder::new_with_minimum_amount(params, anchor_id) } /// @@ -552,6 +545,19 @@ impl AnchorOutput { } } +impl StorageScore for AnchorOutput { + fn storage_score(&self, params: StorageScoreParameters) -> u64 { + params.output_offset() + // Type byte + + (1 + self.packed_len() as u64) * params.data_factor() as u64 + + self.unlock_conditions.storage_score(params) + + self.features.storage_score(params) + + self.immutable_features.storage_score(params) + } +} + +impl MinimumOutputAmount for AnchorOutput {} + impl StateTransitionVerifier for AnchorOutput { fn creation(next_state: &Self, context: &SemanticValidationContext<'_>) -> Result<(), StateTransitionError> { if !next_state.anchor_id.is_null() { @@ -779,7 +785,7 @@ pub(crate) mod dto { mana: u64, native_tokens: Option>, anchor_id: &AnchorId, - state_index: Option, + state_index: u32, state_metadata: Option>, unlock_conditions: Vec, features: Option>, @@ -789,20 +795,17 @@ pub(crate) mod dto { let params = params.into(); let mut builder = match amount { OutputBuilderAmount::Amount(amount) => AnchorOutputBuilder::new_with_amount(amount, *anchor_id), - OutputBuilderAmount::MinimumStorageDeposit(rent_structure) => { - AnchorOutputBuilder::new_with_minimum_storage_deposit(rent_structure, *anchor_id) + OutputBuilderAmount::MinimumAmount(params) => { + AnchorOutputBuilder::new_with_minimum_amount(params, *anchor_id) } } - .with_mana(mana); + .with_mana(mana) + .with_state_index(state_index); if let Some(native_tokens) = native_tokens { builder = builder.with_native_tokens(native_tokens); } - if let Some(state_index) = state_index { - builder = builder.with_state_index(state_index); - } - if let Some(state_metadata) = state_metadata { builder = builder.with_state_metadata(state_metadata); } @@ -898,11 +901,12 @@ mod tests { .with_immutable_features(rand_allowed_features(AnchorOutput::ALLOWED_IMMUTABLE_FEATURES)); test_split_dto(builder); - let builder = AnchorOutput::build_with_minimum_storage_deposit(protocol_parameters.rent_structure(), anchor_id) - .add_unlock_condition(gov_address) - .add_unlock_condition(state_address) - .with_features(rand_allowed_features(AnchorOutput::ALLOWED_FEATURES)) - .with_immutable_features(rand_allowed_features(AnchorOutput::ALLOWED_IMMUTABLE_FEATURES)); + let builder = + AnchorOutput::build_with_minimum_amount(protocol_parameters.storage_score_parameters(), anchor_id) + .add_unlock_condition(gov_address) + .add_unlock_condition(state_address) + .with_features(rand_allowed_features(AnchorOutput::ALLOWED_FEATURES)) + .with_immutable_features(rand_allowed_features(AnchorOutput::ALLOWED_IMMUTABLE_FEATURES)); test_split_dto(builder); } } diff --git a/sdk/src/types/block/output/basic.rs b/sdk/src/types/block/output/basic.rs index 0eb2281963..6290dbd9e4 100644 --- a/sdk/src/types/block/output/basic.rs +++ b/sdk/src/types/block/output/basic.rs @@ -3,15 +3,18 @@ use alloc::collections::BTreeSet; -use packable::Packable; +use packable::{Packable, PackableExt}; use crate::types::block::{ address::Address, output::{ feature::{verify_allowed_features, Feature, FeatureFlags, Features}, - unlock_condition::{verify_allowed_unlock_conditions, UnlockCondition, UnlockConditionFlags, UnlockConditions}, - verify_output_amount_min, verify_output_amount_packable, NativeToken, NativeTokens, Output, - OutputBuilderAmount, OutputId, Rent, RentStructure, + unlock_condition::{ + verify_allowed_unlock_conditions, AddressUnlockCondition, StorageDepositReturnUnlockCondition, + UnlockCondition, UnlockConditionFlags, UnlockConditions, + }, + verify_output_amount_packable, MinimumOutputAmount, NativeToken, NativeTokens, Output, OutputBuilderAmount, + OutputId, StorageScore, StorageScoreParameters, }, protocol::ProtocolParameters, semantic::{SemanticValidationContext, TransactionFailureReason}, @@ -37,11 +40,11 @@ impl BasicOutputBuilder { Self::new(OutputBuilderAmount::Amount(amount)) } - /// Creates an [`BasicOutputBuilder`] with a provided rent structure. - /// The amount will be set to the minimum storage deposit. + /// Creates an [`BasicOutputBuilder`] with provided storage score parameters. + /// The amount will be set to the minimum required amount of the resulting output. #[inline(always)] - pub fn new_with_minimum_storage_deposit(rent_structure: RentStructure) -> Self { - Self::new(OutputBuilderAmount::MinimumStorageDeposit(rent_structure)) + pub fn new_with_minimum_amount(params: StorageScoreParameters) -> Self { + Self::new(OutputBuilderAmount::MinimumAmount(params)) } fn new(amount: OutputBuilderAmount) -> Self { @@ -61,10 +64,10 @@ impl BasicOutputBuilder { self } - /// Sets the amount to the minimum storage deposit. + /// Sets the amount to the minimum required amount. #[inline(always)] - pub fn with_minimum_storage_deposit(mut self, rent_structure: RentStructure) -> Self { - self.amount = OutputBuilderAmount::MinimumStorageDeposit(rent_structure); + pub fn with_minimum_amount(mut self, params: StorageScoreParameters) -> Self { + self.amount = OutputBuilderAmount::MinimumAmount(params); self } @@ -146,6 +149,59 @@ impl BasicOutputBuilder { self } + /// Adds a storage deposit return unlock condition if one is needed to cover the current amount + /// (i.e. `amount < minimum_amount`). This will increase the total amount to satisfy the `minimum_amount` with + /// the additional unlock condition that will return the remainder to the provided `return_address`. + pub fn with_sufficient_storage_deposit( + mut self, + return_address: impl Into
, + params: StorageScoreParameters, + token_supply: u64, + ) -> Result { + Ok(match self.amount { + OutputBuilderAmount::Amount(amount) => { + let return_address = return_address.into(); + // Get the current storage requirement + let minimum_amount = self.clone().finish()?.minimum_amount(params); + // Check whether we already have enough funds to cover it + if amount < minimum_amount { + // Get the projected minimum amount of the return output + let return_min_amount = Self::new_with_minimum_amount(params) + .add_unlock_condition(AddressUnlockCondition::new(return_address.clone())) + .finish()? + .amount(); + // Add a temporary storage deposit unlock condition so the new storage requirement can be calculated + self = self.add_unlock_condition(StorageDepositReturnUnlockCondition::new( + return_address.clone(), + 1, + token_supply, + )?); + // Get the min amount of the output with the added storage deposit return unlock condition + let min_amount_with_sdruc = self.clone().finish()?.minimum_amount(params); + // If the return storage cost and amount are less than the required min + let (amount, sdruc_amount) = if min_amount_with_sdruc >= return_min_amount + amount { + // Then sending storage_cost_with_sdruc covers both minimum requirements + (min_amount_with_sdruc, min_amount_with_sdruc - amount) + } else { + // Otherwise we must use the total of the return minimum and the original amount + // which is unfortunately more than the storage_cost_with_sdruc + (return_min_amount + amount, return_min_amount) + }; + // Add the required storage deposit unlock condition and the additional storage amount + self.with_amount(amount) + .replace_unlock_condition(StorageDepositReturnUnlockCondition::new( + return_address, + sdruc_amount, + token_supply, + )?) + } else { + self + } + } + OutputBuilderAmount::MinimumAmount(_) => self, + }) + } + /// pub fn finish(self) -> Result { let unlock_conditions = UnlockConditions::from_set(self.unlock_conditions)?; @@ -157,7 +213,7 @@ impl BasicOutputBuilder { verify_features::(&features)?; let mut output = BasicOutput { - amount: 1u64, + amount: 0, mana: self.mana, native_tokens: NativeTokens::from_set(self.native_tokens)?, unlock_conditions, @@ -166,13 +222,9 @@ impl BasicOutputBuilder { output.amount = match self.amount { OutputBuilderAmount::Amount(amount) => amount, - OutputBuilderAmount::MinimumStorageDeposit(rent_structure) => { - Output::Basic(output.clone()).rent_cost(rent_structure) - } + OutputBuilderAmount::MinimumAmount(params) => output.minimum_amount(params), }; - verify_output_amount_min(output.amount)?; - Ok(output) } @@ -234,11 +286,11 @@ impl BasicOutput { BasicOutputBuilder::new_with_amount(amount) } - /// Creates a new [`BasicOutputBuilder`] with a provided rent structure. - /// The amount will be set to the minimum storage deposit. + /// Creates a new [`BasicOutputBuilder`] with provided storage score parameters. + /// The amount will be set to the minimum required amount. #[inline(always)] - pub fn build_with_minimum_storage_deposit(rent_structure: RentStructure) -> BasicOutputBuilder { - BasicOutputBuilder::new_with_minimum_storage_deposit(rent_structure) + pub fn build_with_minimum_amount(params: StorageScoreParameters) -> BasicOutputBuilder { + BasicOutputBuilder::new_with_minimum_amount(params) } /// @@ -313,8 +365,31 @@ impl BasicOutput { false } } + + /// Computes the minimum amount of the most Basic Output. + pub fn minimum_amount(address: &Address, params: StorageScoreParameters) -> u64 { + // PANIC: This can never fail because the amount will always be within the valid range. Also, the actual value + // is not important, we are only interested in the storage requirements of the type. + BasicOutputBuilder::new_with_minimum_amount(params) + .add_unlock_condition(AddressUnlockCondition::new(address.clone())) + .finish() + .unwrap() + .amount() + } +} + +impl StorageScore for BasicOutput { + fn storage_score(&self, params: StorageScoreParameters) -> u64 { + params.output_offset() + // Type byte + + (1 + self.packed_len() as u64) * params.data_factor() as u64 + + self.unlock_conditions.storage_score(params) + + self.features.storage_score(params) + } } +impl MinimumOutputAmount for BasicOutput {} + fn verify_unlock_conditions(unlock_conditions: &UnlockConditions) -> Result<(), Error> { if VERIFY { if unlock_conditions.address().is_none() { @@ -420,9 +495,7 @@ pub(crate) mod dto { let params = params.into(); let mut builder = match amount { OutputBuilderAmount::Amount(amount) => BasicOutputBuilder::new_with_amount(amount), - OutputBuilderAmount::MinimumStorageDeposit(rent_structure) => { - BasicOutputBuilder::new_with_minimum_storage_deposit(rent_structure) - } + OutputBuilderAmount::MinimumAmount(params) => BasicOutputBuilder::new_with_minimum_amount(params), } .with_mana(mana); @@ -507,10 +580,50 @@ mod tests { .with_features(rand_allowed_features(BasicOutput::ALLOWED_FEATURES)); test_split_dto(builder); - let builder = BasicOutput::build_with_minimum_storage_deposit(protocol_parameters.rent_structure()) + let builder = BasicOutput::build_with_minimum_amount(protocol_parameters.storage_score_parameters()) .add_native_token(NativeToken::new(TokenId::from(foundry_id), 1000).unwrap()) .add_unlock_condition(address) .with_features(rand_allowed_features(BasicOutput::ALLOWED_FEATURES)); test_split_dto(builder); } + + // TODO: re-enable when rent is figured out + // #[test] + // fn storage_deposit() { + // let protocol_parameters = protocol_parameters(); + // let address_unlock = rand_address_unlock_condition(); + // let return_address = rand_address(); + + // let builder_1 = BasicOutput::build_with_amount(1).add_unlock_condition(address_unlock.clone()); + + // let builder_2 = BasicOutput::build_with_minimum_amount(protocol_parameters.storage_score_parameters()) + // .add_unlock_condition(address_unlock); + + // assert_eq!( + // builder_1.storage_cost(protocol_parameters.storage_score_parameters()), + // builder_2.amount() + // ); + // assert_eq!( + // builder_1.clone().finish_output(&protocol_parameters), + // Err(Error::InsufficientStorageDepositAmount { + // amount: 1, + // required: builder_1.storage_cost(protocol_parameters.storage_score_parameters()) + // }) + // ); + + // let builder_1 = builder_1 + // .with_sufficient_storage_deposit( + // return_address.clone(), + // protocol_parameters.storage_score_parameters(), + // protocol_parameters.token_supply(), + // ) + // .unwrap(); + + // let sdruc_cost = + // StorageDepositReturnUnlockCondition::new(return_address, 1, protocol_parameters.token_supply()) + // .unwrap() + // .storage_cost(protocol_parameters.storage_score_parameters()); + + // assert_eq!(builder_1.amount(), builder_2.amount() + sdruc_cost); + // } } diff --git a/sdk/src/types/block/output/delegation.rs b/sdk/src/types/block/output/delegation.rs index 1562a35169..ad3c765150 100644 --- a/sdk/src/types/block/output/delegation.rs +++ b/sdk/src/types/block/output/delegation.rs @@ -3,15 +3,15 @@ use alloc::collections::BTreeSet; -use packable::Packable; +use packable::{Packable, PackableExt}; use crate::types::block::{ address::{AccountAddress, Address}, output::{ chain_id::ChainId, unlock_condition::{verify_allowed_unlock_conditions, UnlockCondition, UnlockConditionFlags, UnlockConditions}, - verify_output_amount_min, verify_output_amount_packable, Output, OutputBuilderAmount, OutputId, Rent, - RentStructure, StateTransitionError, StateTransitionVerifier, + verify_output_amount_packable, MinimumOutputAmount, Output, OutputBuilderAmount, OutputId, + StateTransitionError, StateTransitionVerifier, StorageScore, StorageScoreParameters, }, protocol::ProtocolParameters, semantic::{SemanticValidationContext, TransactionFailureReason}, @@ -69,16 +69,16 @@ impl DelegationOutputBuilder { ) } - /// Creates a [`DelegationOutputBuilder`] with a provided rent structure. - /// The amount will be set to the minimum storage deposit. - pub fn new_with_minimum_storage_deposit( - rent_structure: RentStructure, + /// Creates a [`DelegationOutputBuilder`] with provided storage score parameters. + /// The amount will be set to the minimum required amount of the resulting output. + pub fn new_with_minimum_amount( + params: StorageScoreParameters, delegated_amount: u64, delegation_id: DelegationId, validator_address: AccountAddress, ) -> Self { Self::new( - OutputBuilderAmount::MinimumStorageDeposit(rent_structure), + OutputBuilderAmount::MinimumAmount(params), delegated_amount, delegation_id, validator_address, @@ -108,9 +108,9 @@ impl DelegationOutputBuilder { self } - /// Sets the amount to the minimum storage deposit. - pub fn with_minimum_storage_deposit(mut self, rent_structure: RentStructure) -> Self { - self.amount = OutputBuilderAmount::MinimumStorageDeposit(rent_structure); + /// Sets the amount to the minimum required amount. + pub fn with_minimum_amount(mut self, params: StorageScoreParameters) -> Self { + self.amount = OutputBuilderAmount::MinimumAmount(params); self } @@ -174,7 +174,7 @@ impl DelegationOutputBuilder { verify_unlock_conditions::(&unlock_conditions)?; let mut output = DelegationOutput { - amount: 1u64, + amount: 0, delegated_amount: self.delegated_amount, delegation_id: self.delegation_id, validator_address: self.validator_address, @@ -185,13 +185,9 @@ impl DelegationOutputBuilder { output.amount = match self.amount { OutputBuilderAmount::Amount(amount) => amount, - OutputBuilderAmount::MinimumStorageDeposit(rent_structure) => { - Output::Delegation(output.clone()).rent_cost(rent_structure) - } + OutputBuilderAmount::MinimumAmount(params) => output.minimum_amount(params), }; - verify_output_amount_min(output.amount)?; - Ok(output) } @@ -255,20 +251,15 @@ impl DelegationOutput { DelegationOutputBuilder::new_with_amount(amount, delegated_amount, delegation_id, validator_address) } - /// Creates a new [`DelegationOutputBuilder`] with a provided rent structure. - /// The amount will be set to the minimum storage deposit. - pub fn build_with_minimum_storage_deposit( - rent_structure: RentStructure, + /// Creates a new [`DelegationOutputBuilder`] with provided storage score parameters. + /// The amount will be set to the minimum required amount. + pub fn build_with_minimum_amount( + params: StorageScoreParameters, delegated_amount: u64, delegation_id: DelegationId, validator_address: AccountAddress, ) -> DelegationOutputBuilder { - DelegationOutputBuilder::new_with_minimum_storage_deposit( - rent_structure, - delegated_amount, - delegation_id, - validator_address, - ) + DelegationOutputBuilder::new_with_minimum_amount(params, delegated_amount, delegation_id, validator_address) } /// Returns the amount of the [`DelegationOutput`]. @@ -390,6 +381,18 @@ impl StateTransitionVerifier for DelegationOutput { } } +impl StorageScore for DelegationOutput { + fn storage_score(&self, params: StorageScoreParameters) -> u64 { + params.output_offset() + // Type byte + + (1 + self.packed_len() as u64) * params.data_factor() as u64 + + params.delegation_offset() + + self.unlock_conditions.storage_score(params) + } +} + +impl MinimumOutputAmount for DelegationOutput {} + fn verify_validator_address(validator_address: &AccountAddress) -> Result<(), Error> { if VERIFY && validator_address.is_null() { Err(Error::NullDelegationValidatorId) @@ -518,14 +521,12 @@ pub(crate) mod dto { *delegation_id, *validator_address, ), - OutputBuilderAmount::MinimumStorageDeposit(rent_structure) => { - DelegationOutputBuilder::new_with_minimum_storage_deposit( - rent_structure, - delegated_amount, - *delegation_id, - *validator_address, - ) - } + OutputBuilderAmount::MinimumAmount(params) => DelegationOutputBuilder::new_with_minimum_amount( + params, + delegated_amount, + *delegation_id, + *validator_address, + ), } .with_start_epoch(start_epoch) .with_end_epoch(end_epoch); diff --git a/sdk/src/types/block/output/feature/block_issuer.rs b/sdk/src/types/block/output/feature/block_issuer.rs index dde9271ab8..e948559958 100644 --- a/sdk/src/types/block/output/feature/block_issuer.rs +++ b/sdk/src/types/block/output/feature/block_issuer.rs @@ -16,7 +16,11 @@ use packable::{ Packable, }; -use crate::types::block::{slot::SlotIndex, Error}; +use crate::types::block::{ + output::{StorageScore, StorageScoreParameters}, + slot::SlotIndex, + Error, +}; #[derive(Clone, Eq, PartialEq, Ord, PartialOrd, Hash, From, packable::Packable)] #[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize), serde(untagged))] @@ -47,6 +51,14 @@ impl BlockIssuerKey { crate::def_is_as_opt!(BlockIssuerKey: Ed25519); } +impl StorageScore for BlockIssuerKey { + fn storage_score(&self, params: StorageScoreParameters) -> u64 { + match self { + BlockIssuerKey::Ed25519(e) => e.storage_score(params), + } + } +} + /// An Ed25519 block issuer key. #[derive(Copy, Clone, Eq, PartialEq, Ord, PartialOrd, Hash, Deref, AsRef, From)] #[as_ref(forward)] @@ -63,6 +75,17 @@ impl Ed25519BlockIssuerKey { pub fn try_from_bytes(bytes: [u8; Self::LENGTH]) -> Result { Ok(Self(ed25519::PublicKey::try_from_bytes(bytes)?)) } + + pub(crate) fn null() -> Self { + // Unwrap: we provide a valid byte array + Self::try_from_bytes([0; Self::LENGTH]).unwrap() + } +} + +impl StorageScore for Ed25519BlockIssuerKey { + fn storage_score(&self, params: StorageScoreParameters) -> u64 { + params.ed25519_block_issuer_key_offset() + } } impl core::fmt::Debug for Ed25519BlockIssuerKey { @@ -171,6 +194,12 @@ impl BlockIssuerKeys { } } +impl StorageScore for BlockIssuerKeys { + fn storage_score(&self, params: StorageScoreParameters) -> u64 { + self.iter().map(|b| b.storage_score(params)).sum::() + } +} + /// This feature defines the block issuer keys with which a signature from the containing /// account's Block Issuance Credit can be verified in order to burn Mana. #[derive(Clone, Debug, Eq, PartialEq, Hash, packable::Packable)] @@ -212,6 +241,12 @@ impl BlockIssuerFeature { } } +impl StorageScore for BlockIssuerFeature { + fn storage_score(&self, params: StorageScoreParameters) -> u64 { + self.block_issuer_keys.storage_score(params) + } +} + #[cfg(feature = "serde")] mod dto { use alloc::{string::String, vec::Vec}; diff --git a/sdk/src/types/block/output/feature/issuer.rs b/sdk/src/types/block/output/feature/issuer.rs index 087470538b..fe96f195f0 100644 --- a/sdk/src/types/block/output/feature/issuer.rs +++ b/sdk/src/types/block/output/feature/issuer.rs @@ -3,7 +3,10 @@ use derive_more::From; -use crate::types::block::address::Address; +use crate::types::block::{ + address::Address, + output::{StorageScore, StorageScoreParameters}, +}; /// Identifies the validated issuer of the UTXO state machine. #[derive(Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash, From, packable::Packable)] @@ -26,8 +29,14 @@ impl IssuerFeature { } } +impl StorageScore for IssuerFeature { + fn storage_score(&self, params: StorageScoreParameters) -> u64 { + self.address().storage_score(params) + } +} + #[cfg(feature = "serde")] -pub(crate) mod dto { +mod dto { use serde::{Deserialize, Serialize}; use super::*; diff --git a/sdk/src/types/block/output/feature/metadata.rs b/sdk/src/types/block/output/feature/metadata.rs index c9dbfb3ee1..b198e8c9f2 100644 --- a/sdk/src/types/block/output/feature/metadata.rs +++ b/sdk/src/types/block/output/feature/metadata.rs @@ -6,7 +6,7 @@ use core::{ops::RangeInclusive, str::FromStr}; use packable::{bounded::BoundedU16, prefix::BoxedSlicePrefix}; -use crate::types::block::Error; +use crate::types::block::{output::StorageScore, Error}; pub(crate) type MetadataFeatureLength = BoundedU16<{ *MetadataFeature::LENGTH_RANGE.start() }, { *MetadataFeature::LENGTH_RANGE.end() }>; @@ -19,6 +19,8 @@ pub struct MetadataFeature( pub(crate) BoxedSlicePrefix, ); +impl StorageScore for MetadataFeature {} + macro_rules! impl_from_vec { ($type:ty) => { impl TryFrom<$type> for MetadataFeature { diff --git a/sdk/src/types/block/output/feature/mod.rs b/sdk/src/types/block/output/feature/mod.rs index 897db63ef9..e3d0e49982 100644 --- a/sdk/src/types/block/output/feature/mod.rs +++ b/sdk/src/types/block/output/feature/mod.rs @@ -28,7 +28,11 @@ pub use self::{ staking::StakingFeature, tag::TagFeature, }; -use crate::types::block::{create_bitflags, Error}; +use crate::types::block::{ + create_bitflags, + output::{StorageScore, StorageScoreParameters}, + Error, +}; /// #[derive(Clone, Eq, PartialEq, Hash, From, Packable)] @@ -68,6 +72,19 @@ impl Ord for Feature { } } +impl StorageScore for Feature { + fn storage_score(&self, params: StorageScoreParameters) -> u64 { + match self { + Self::Sender(feature) => feature.storage_score(params), + Self::Issuer(feature) => feature.storage_score(params), + Self::Metadata(feature) => feature.storage_score(params), + Self::Tag(feature) => feature.storage_score(params), + Self::BlockIssuer(feature) => feature.storage_score(params), + Self::Staking(feature) => feature.storage_score(params), + } + } +} + impl core::fmt::Debug for Feature { fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result { match self { @@ -225,6 +242,12 @@ impl Features { } } +impl StorageScore for Features { + fn storage_score(&self, params: StorageScoreParameters) -> u64 { + self.iter().map(|f| f.storage_score(params)).sum::() + } +} + #[inline] fn verify_unique_sorted(features: &[Feature], _: &()) -> Result<(), Error> { if VERIFY && !is_unique_sorted(features.iter().map(Feature::kind)) { diff --git a/sdk/src/types/block/output/feature/sender.rs b/sdk/src/types/block/output/feature/sender.rs index a481fa4a03..f25ab1d97c 100644 --- a/sdk/src/types/block/output/feature/sender.rs +++ b/sdk/src/types/block/output/feature/sender.rs @@ -3,7 +3,10 @@ use derive_more::From; -use crate::types::block::address::Address; +use crate::types::block::{ + address::Address, + output::{storage_score::StorageScoreParameters, StorageScore}, +}; /// Identifies the validated sender of an output. #[derive(Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash, From, packable::Packable)] @@ -26,8 +29,14 @@ impl SenderFeature { } } +impl StorageScore for SenderFeature { + fn storage_score(&self, params: StorageScoreParameters) -> u64 { + self.address().storage_score(params) + } +} + #[cfg(feature = "serde")] -pub(crate) mod dto { +mod dto { use serde::{Deserialize, Serialize}; use super::*; diff --git a/sdk/src/types/block/output/feature/staking.rs b/sdk/src/types/block/output/feature/staking.rs index a94b2634fe..ee4c8d1fd5 100644 --- a/sdk/src/types/block/output/feature/staking.rs +++ b/sdk/src/types/block/output/feature/staking.rs @@ -1,7 +1,10 @@ // Copyright 2023 IOTA Stiftung // SPDX-License-Identifier: Apache-2.0 -use crate::types::block::slot::EpochIndex; +use crate::types::block::{ + output::{StorageScore, StorageScoreParameters}, + slot::EpochIndex, +}; /// Stakes coins to become eligible for committee selection, validate the network and receive Mana rewards. #[derive(Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash, packable::Packable)] @@ -56,8 +59,14 @@ impl StakingFeature { } } +impl StorageScore for StakingFeature { + fn storage_score(&self, params: StorageScoreParameters) -> u64 { + params.staking_feature_offset() + } +} + #[cfg(feature = "serde")] -pub(crate) mod dto { +mod dto { use serde::{Deserialize, Serialize}; use super::*; diff --git a/sdk/src/types/block/output/feature/tag.rs b/sdk/src/types/block/output/feature/tag.rs index 1a53dcb375..d062da26bf 100644 --- a/sdk/src/types/block/output/feature/tag.rs +++ b/sdk/src/types/block/output/feature/tag.rs @@ -6,7 +6,7 @@ use core::ops::RangeInclusive; use packable::{bounded::BoundedU8, prefix::BoxedSlicePrefix}; -use crate::types::block::Error; +use crate::types::block::{output::StorageScore, Error}; pub(crate) type TagFeatureLength = BoundedU8<{ *TagFeature::LENGTH_RANGE.start() }, { *TagFeature::LENGTH_RANGE.end() }>; @@ -19,6 +19,8 @@ pub struct TagFeature( pub(crate) BoxedSlicePrefix, ); +impl StorageScore for TagFeature {} + impl TryFrom> for TagFeature { type Error = Error; diff --git a/sdk/src/types/block/output/foundry.rs b/sdk/src/types/block/output/foundry.rs index f918872ca5..da514eb580 100644 --- a/sdk/src/types/block/output/foundry.rs +++ b/sdk/src/types/block/output/foundry.rs @@ -8,7 +8,7 @@ use packable::{ error::{UnpackError, UnpackErrorExt}, packer::{Packer, SlicePacker}, unpacker::Unpacker, - Packable, + Packable, PackableExt, }; use primitive_types::U256; @@ -18,9 +18,9 @@ use crate::types::block::{ account::AccountId, feature::{verify_allowed_features, Feature, FeatureFlags, Features}, unlock_condition::{verify_allowed_unlock_conditions, UnlockCondition, UnlockConditionFlags, UnlockConditions}, - verify_output_amount_min, verify_output_amount_packable, ChainId, NativeToken, NativeTokens, Output, - OutputBuilderAmount, OutputId, Rent, RentStructure, StateTransitionError, StateTransitionVerifier, TokenId, - TokenScheme, + verify_output_amount_packable, ChainId, MinimumOutputAmount, NativeToken, NativeTokens, Output, + OutputBuilderAmount, OutputId, StateTransitionError, StateTransitionVerifier, StorageScore, + StorageScoreParameters, TokenId, TokenScheme, }, payload::signed_transaction::{TransactionCapabilities, TransactionCapabilityFlag}, protocol::ProtocolParameters, @@ -99,18 +99,14 @@ impl FoundryOutputBuilder { Self::new(OutputBuilderAmount::Amount(amount), serial_number, token_scheme) } - /// Creates a [`FoundryOutputBuilder`] with a provided rent structure. - /// The amount will be set to the minimum storage deposit. - pub fn new_with_minimum_storage_deposit( - rent_structure: RentStructure, + /// Creates a [`FoundryOutputBuilder`] with provided storage score parameters. + /// The amount will be set to the minimum required amount of the resulting output. + pub fn new_with_minimum_amount( + params: StorageScoreParameters, serial_number: u32, token_scheme: TokenScheme, ) -> Self { - Self::new( - OutputBuilderAmount::MinimumStorageDeposit(rent_structure), - serial_number, - token_scheme, - ) + Self::new(OutputBuilderAmount::MinimumAmount(params), serial_number, token_scheme) } fn new(amount: OutputBuilderAmount, serial_number: u32, token_scheme: TokenScheme) -> Self { @@ -132,10 +128,10 @@ impl FoundryOutputBuilder { self } - /// Sets the amount to the minimum storage deposit. + /// Sets the amount to the minimum required amount. #[inline(always)] - pub fn with_minimum_storage_deposit(mut self, rent_structure: RentStructure) -> Self { - self.amount = OutputBuilderAmount::MinimumStorageDeposit(rent_structure); + pub fn with_minimum_amount(mut self, params: StorageScoreParameters) -> Self { + self.amount = OutputBuilderAmount::MinimumAmount(params); self } @@ -270,7 +266,7 @@ impl FoundryOutputBuilder { verify_allowed_features(&immutable_features, FoundryOutput::ALLOWED_IMMUTABLE_FEATURES)?; let mut output = FoundryOutput { - amount: 1u64, + amount: 0, native_tokens: NativeTokens::from_set(self.native_tokens)?, serial_number: self.serial_number, token_scheme: self.token_scheme, @@ -281,13 +277,9 @@ impl FoundryOutputBuilder { output.amount = match self.amount { OutputBuilderAmount::Amount(amount) => amount, - OutputBuilderAmount::MinimumStorageDeposit(rent_structure) => { - Output::Foundry(output.clone()).rent_cost(rent_structure) - } + OutputBuilderAmount::MinimumAmount(params) => output.minimum_amount(params), }; - verify_output_amount_min(output.amount)?; - Ok(output) } @@ -346,15 +338,15 @@ impl FoundryOutput { FoundryOutputBuilder::new_with_amount(amount, serial_number, token_scheme) } - /// Creates a new [`FoundryOutputBuilder`] with a provided rent structure. - /// The amount will be set to the minimum storage deposit. + /// Creates a new [`FoundryOutputBuilder`] with provided storage score parameters. + /// The amount will be set to the minimum required amount of the resulting output. #[inline(always)] - pub fn build_with_minimum_storage_deposit( - rent_structure: RentStructure, + pub fn build_with_minimum_amount( + params: StorageScoreParameters, serial_number: u32, token_scheme: TokenScheme, ) -> FoundryOutputBuilder { - FoundryOutputBuilder::new_with_minimum_storage_deposit(rent_structure, serial_number, token_scheme) + FoundryOutputBuilder::new_with_minimum_amount(params, serial_number, token_scheme) } /// @@ -522,6 +514,19 @@ impl FoundryOutput { } } +impl StorageScore for FoundryOutput { + fn storage_score(&self, params: StorageScoreParameters) -> u64 { + params.output_offset() + // Type byte + + (1 + self.packed_len() as u64) * params.data_factor() as u64 + + self.unlock_conditions.storage_score(params) + + self.features.storage_score(params) + + self.immutable_features.storage_score(params) + } +} + +impl MinimumOutputAmount for FoundryOutput {} + impl StateTransitionVerifier for FoundryOutput { fn creation(next_state: &Self, context: &SemanticValidationContext<'_>) -> Result<(), StateTransitionError> { let account_chain_id = ChainId::from(*next_state.account_address().account_id()); @@ -757,8 +762,8 @@ pub(crate) mod dto { OutputBuilderAmount::Amount(amount) => { FoundryOutputBuilder::new_with_amount(amount, serial_number, token_scheme) } - OutputBuilderAmount::MinimumStorageDeposit(rent_structure) => { - FoundryOutputBuilder::new_with_minimum_storage_deposit(rent_structure, serial_number, token_scheme) + OutputBuilderAmount::MinimumAmount(params) => { + FoundryOutputBuilder::new_with_minimum_amount(params, serial_number, token_scheme) } }; @@ -842,8 +847,8 @@ mod tests { .with_features(rand_allowed_features(FoundryOutput::ALLOWED_FEATURES)); test_split_dto(builder); - let builder = FoundryOutput::build_with_minimum_storage_deposit( - protocol_parameters.rent_structure(), + let builder = FoundryOutput::build_with_minimum_amount( + protocol_parameters.storage_score_parameters(), 123, rand_token_scheme(), ) diff --git a/sdk/src/types/block/output/mod.rs b/sdk/src/types/block/output/mod.rs index 74e285bba3..a44416d268 100644 --- a/sdk/src/types/block/output/mod.rs +++ b/sdk/src/types/block/output/mod.rs @@ -7,8 +7,8 @@ mod delegation; mod metadata; mod native_token; mod output_id; -mod rent; mod state_transition; +mod storage_score; mod token_scheme; /// @@ -31,7 +31,7 @@ use packable::{ error::{UnpackError, UnpackErrorExt}, packer::Packer, unpacker::Unpacker, - Packable, PackableExt, + Packable, }; pub use self::{ @@ -46,8 +46,8 @@ pub use self::{ native_token::{NativeToken, NativeTokens, NativeTokensBuilder, TokenId}, nft::{NftId, NftOutput, NftOutputBuilder}, output_id::OutputId, - rent::{MinimumStorageDepositBasicOutput, Rent, RentStructure}, state_transition::{StateTransitionError, StateTransitionVerifier}, + storage_score::{StorageScore, StorageScoreParameters}, token_scheme::{SimpleTokenScheme, TokenScheme}, unlock_condition::{UnlockCondition, UnlockConditions}, }; @@ -73,7 +73,7 @@ pub const OUTPUT_INDEX_RANGE: RangeInclusive = 0..=OUTPUT_INDEX_MAX; // [0. #[derive(Copy, Clone)] pub enum OutputBuilderAmount { Amount(u64), - MinimumStorageDeposit(RentStructure), + MinimumAmount(StorageScoreParameters), } /// Contains the generic [`Output`] with associated [`OutputMetadata`]. @@ -141,9 +141,6 @@ impl core::fmt::Debug for Output { } impl Output { - /// Minimum amount for an output. - pub const AMOUNT_MIN: u64 = 1; - /// Return the output kind of an [`Output`]. pub fn kind(&self) -> u8 { match self { @@ -344,11 +341,11 @@ impl Output { } /// Verifies if a valid storage deposit was made. Each [`Output`] has to have an amount that covers its associated - /// byte cost, given by [`RentStructure`]. + /// byte cost, given by [`StorageScoreParameters`]. /// If there is a [`StorageDepositReturnUnlockCondition`](unlock_condition::StorageDepositReturnUnlockCondition), /// its amount is also checked. - pub fn verify_storage_deposit(&self, rent_structure: RentStructure) -> Result<(), Error> { - let required_output_amount = self.rent_cost(rent_structure); + pub fn verify_storage_deposit(&self, params: StorageScoreParameters) -> Result<(), Error> { + let required_output_amount = self.minimum_amount(params); if self.amount() < required_output_amount { return Err(Error::InsufficientStorageDepositAmount { @@ -370,7 +367,7 @@ impl Output { }); } - let minimum_deposit = minimum_storage_deposit(return_condition.return_address(), rent_structure); + let minimum_deposit = BasicOutput::minimum_amount(return_condition.return_address(), params); // `Minimum Storage Deposit` ≤ `Return Amount` if return_condition.amount() < minimum_deposit { @@ -436,19 +433,20 @@ impl Packable for Output { } } -impl Rent for Output { - fn weighted_bytes(&self, rent_structure: RentStructure) -> u64 { - self.packed_len() as u64 * rent_structure.byte_factor_data() as u64 +impl StorageScore for Output { + fn storage_score(&self, params: StorageScoreParameters) -> u64 { + match self { + Self::Basic(o) => o.storage_score(params), + Self::Account(o) => o.storage_score(params), + Self::Anchor(o) => o.storage_score(params), + Self::Foundry(o) => o.storage_score(params), + Self::Nft(o) => o.storage_score(params), + Self::Delegation(o) => o.storage_score(params), + } } } -pub(crate) fn verify_output_amount_min(amount: u64) -> Result<(), Error> { - if amount < Output::AMOUNT_MIN { - Err(Error::InvalidOutputAmount(amount)) - } else { - Ok(()) - } -} +impl MinimumOutputAmount for Output {} pub(crate) fn verify_output_amount_supply(amount: u64, token_supply: u64) -> Result<(), Error> { if amount > token_supply { @@ -459,7 +457,6 @@ pub(crate) fn verify_output_amount_supply(amount: u64, token_supply: u64) -> Res } pub(crate) fn verify_output_amount(amount: u64, token_supply: u64) -> Result<(), Error> { - verify_output_amount_min(amount)?; verify_output_amount_supply(amount, token_supply) } @@ -473,16 +470,13 @@ pub(crate) fn verify_output_amount_packable( Ok(()) } -/// Computes the minimum amount that a storage deposit has to match to allow creating a return [`Output`] back to the -/// sender [`Address`]. -fn minimum_storage_deposit(address: &Address, rent_structure: RentStructure) -> u64 { - // PANIC: This can never fail because the amount will always be within the valid range. Also, the actual value is - // not important, we are only interested in the storage requirements of the type. - BasicOutputBuilder::new_with_minimum_storage_deposit(rent_structure) - .add_unlock_condition(AddressUnlockCondition::new(address.clone())) - .finish() - .unwrap() - .amount() +/// A trait that is shared by all output types, which is used to calculate the minimum amount the output +/// must contain to satisfy its storage cost. +pub trait MinimumOutputAmount: StorageScore { + /// Computes the minimum amount of this output given [`StorageScoreParameters`]. + fn minimum_amount(&self, params: StorageScoreParameters) -> u64 { + params.storage_cost() * self.storage_score(params) + } } #[cfg(feature = "serde")] diff --git a/sdk/src/types/block/output/native_token.rs b/sdk/src/types/block/output/native_token.rs index c0af04976d..767f4dce39 100644 --- a/sdk/src/types/block/output/native_token.rs +++ b/sdk/src/types/block/output/native_token.rs @@ -12,7 +12,10 @@ use iterator_sorted::is_unique_sorted; use packable::{bounded::BoundedU8, prefix::BoxedSlicePrefix, Packable}; use primitive_types::U256; -use crate::types::block::{output::foundry::FoundryId, Error}; +use crate::types::block::{ + output::{FoundryId, StorageScore}, + Error, +}; crate::impl_id!( /// Unique identifier of a [`NativeToken`](crate::types::block::output::NativeToken). @@ -77,6 +80,9 @@ impl Ord for NativeToken { } } +// TODO remove when NT are a feature +impl StorageScore for NativeToken {} + #[inline] fn verify_amount(amount: &U256, _: &()) -> Result<(), Error> { if VERIFY && amount.is_zero() { diff --git a/sdk/src/types/block/output/nft.rs b/sdk/src/types/block/output/nft.rs index 599d451d07..1a1656df4f 100644 --- a/sdk/src/types/block/output/nft.rs +++ b/sdk/src/types/block/output/nft.rs @@ -7,16 +7,20 @@ use packable::{ error::{UnpackError, UnpackErrorExt}, packer::Packer, unpacker::Unpacker, - Packable, + Packable, PackableExt, }; use crate::types::block::{ address::{Address, NftAddress}, output::{ feature::{verify_allowed_features, Feature, FeatureFlags, Features}, - unlock_condition::{verify_allowed_unlock_conditions, UnlockCondition, UnlockConditionFlags, UnlockConditions}, - verify_output_amount_min, verify_output_amount_packable, ChainId, NativeToken, NativeTokens, Output, - OutputBuilderAmount, OutputId, Rent, RentStructure, StateTransitionError, StateTransitionVerifier, + unlock_condition::{ + verify_allowed_unlock_conditions, AddressUnlockCondition, StorageDepositReturnUnlockCondition, + UnlockCondition, UnlockConditionFlags, UnlockConditions, + }, + verify_output_amount_packable, BasicOutputBuilder, ChainId, MinimumOutputAmount, NativeToken, NativeTokens, + Output, OutputBuilderAmount, OutputId, StateTransitionError, StateTransitionVerifier, StorageScore, + StorageScoreParameters, }, payload::signed_transaction::TransactionCapabilityFlag, protocol::ProtocolParameters, @@ -71,10 +75,10 @@ impl NftOutputBuilder { Self::new(OutputBuilderAmount::Amount(amount), nft_id) } - /// Creates an [`NftOutputBuilder`] with a provided rent structure. - /// The amount will be set to the minimum storage deposit. - pub fn new_with_minimum_storage_deposit(rent_structure: RentStructure, nft_id: NftId) -> Self { - Self::new(OutputBuilderAmount::MinimumStorageDeposit(rent_structure), nft_id) + /// Creates an [`NftOutputBuilder`] with provided storage score parameters. + /// The amount will be set to the minimum required amount of the resulting output. + pub fn new_with_minimum_amount(params: StorageScoreParameters, nft_id: NftId) -> Self { + Self::new(OutputBuilderAmount::MinimumAmount(params), nft_id) } fn new(amount: OutputBuilderAmount, nft_id: NftId) -> Self { @@ -96,10 +100,10 @@ impl NftOutputBuilder { self } - /// Sets the amount to the minimum storage deposit. + /// Sets the amount to the minimum required amount. #[inline(always)] - pub fn with_minimum_storage_deposit(mut self, rent_structure: RentStructure) -> Self { - self.amount = OutputBuilderAmount::MinimumStorageDeposit(rent_structure); + pub fn with_minimum_amount(mut self, params: StorageScoreParameters) -> Self { + self.amount = OutputBuilderAmount::MinimumAmount(params); self } @@ -215,6 +219,59 @@ impl NftOutputBuilder { self } + /// Adds a storage deposit return unlock condition if one is needed to cover the current amount + /// (i.e. `amount < minimum_amount`). This will increase the total amount to satisfy the `minimum_amount` with + /// the additional unlock condition that will return the remainder to the provided `return_address`. + pub fn with_sufficient_storage_deposit( + mut self, + return_address: impl Into
, + params: StorageScoreParameters, + token_supply: u64, + ) -> Result { + Ok(match self.amount { + OutputBuilderAmount::Amount(amount) => { + let return_address = return_address.into(); + // Get the current storage requirement + let minimum_amount = self.clone().finish()?.minimum_amount(params); + // Check whether we already have enough funds to cover it + if amount < minimum_amount { + // Get the projected minimum amount of the return output + let return_min_amount = BasicOutputBuilder::new_with_minimum_amount(params) + .add_unlock_condition(AddressUnlockCondition::new(return_address.clone())) + .finish()? + .amount(); + // Add a temporary storage deposit unlock condition so the new storage requirement can be calculated + self = self.add_unlock_condition(StorageDepositReturnUnlockCondition::new( + return_address.clone(), + 1, + token_supply, + )?); + // Get the min amount of the output with the added storage deposit return unlock condition + let min_amount_with_sdruc = self.clone().finish()?.minimum_amount(params); + // If the return storage cost and amount are less than the required min + let (amount, sdruc_amount) = if min_amount_with_sdruc >= return_min_amount + amount { + // Then sending storage_cost_with_sdruc covers both minimum requirements + (min_amount_with_sdruc, min_amount_with_sdruc - amount) + } else { + // Otherwise we must use the total of the return minimum and the original amount + // which is unfortunately more than the storage_cost_with_sdruc + (return_min_amount + amount, return_min_amount) + }; + // Add the required storage deposit unlock condition and the additional storage amount + self.with_amount(amount) + .replace_unlock_condition(StorageDepositReturnUnlockCondition::new( + return_address, + sdruc_amount, + token_supply, + )?) + } else { + self + } + } + OutputBuilderAmount::MinimumAmount(_) => self, + }) + } + /// pub fn finish(self) -> Result { let unlock_conditions = UnlockConditions::from_set(self.unlock_conditions)?; @@ -230,7 +287,7 @@ impl NftOutputBuilder { verify_allowed_features(&immutable_features, NftOutput::ALLOWED_IMMUTABLE_FEATURES)?; let mut output = NftOutput { - amount: 1u64, + amount: 0, mana: self.mana, native_tokens: NativeTokens::from_set(self.native_tokens)?, nft_id: self.nft_id, @@ -241,13 +298,9 @@ impl NftOutputBuilder { output.amount = match self.amount { OutputBuilderAmount::Amount(amount) => amount, - OutputBuilderAmount::MinimumStorageDeposit(rent_structure) => { - Output::Nft(output.clone()).rent_cost(rent_structure) - } + OutputBuilderAmount::MinimumAmount(params) => output.minimum_amount(params), }; - verify_output_amount_min(output.amount)?; - Ok(output) } @@ -311,11 +364,11 @@ impl NftOutput { NftOutputBuilder::new_with_amount(amount, nft_id) } - /// Creates a new [`NftOutputBuilder`] with a provided rent structure. - /// The amount will be set to the minimum storage deposit. + /// Creates a new [`NftOutputBuilder`] with provided storage score parameters. + /// The amount will be set to the minimum required amount of the resulting output. #[inline(always)] - pub fn build_with_minimum_storage_deposit(rent_structure: RentStructure, nft_id: NftId) -> NftOutputBuilder { - NftOutputBuilder::new_with_minimum_storage_deposit(rent_structure, nft_id) + pub fn build_with_minimum_amount(params: StorageScoreParameters, nft_id: NftId) -> NftOutputBuilder { + NftOutputBuilder::new_with_minimum_amount(params, nft_id) } /// @@ -419,6 +472,19 @@ impl NftOutput { } } +impl StorageScore for NftOutput { + fn storage_score(&self, params: StorageScoreParameters) -> u64 { + params.output_offset() + // Type byte + + (1 + self.packed_len() as u64) * params.data_factor() as u64 + + self.unlock_conditions.storage_score(params) + + self.features.storage_score(params) + + self.immutable_features.storage_score(params) + } +} + +impl MinimumOutputAmount for NftOutput {} + impl StateTransitionVerifier for NftOutput { fn creation(next_state: &Self, context: &SemanticValidationContext<'_>) -> Result<(), StateTransitionError> { if !next_state.nft_id.is_null() { @@ -609,8 +675,8 @@ pub(crate) mod dto { let params = params.into(); let mut builder = match amount { OutputBuilderAmount::Amount(amount) => NftOutputBuilder::new_with_amount(amount, *nft_id), - OutputBuilderAmount::MinimumStorageDeposit(rent_structure) => { - NftOutputBuilder::new_with_minimum_storage_deposit(rent_structure, *nft_id) + OutputBuilderAmount::MinimumAmount(params) => { + NftOutputBuilder::new_with_minimum_amount(params, *nft_id) } } .with_mana(mana); @@ -705,7 +771,7 @@ mod tests { test_split_dto(builder); let builder = - NftOutput::build_with_minimum_storage_deposit(protocol_parameters.rent_structure(), NftId::null()) + NftOutput::build_with_minimum_amount(protocol_parameters.storage_score_parameters(), NftId::null()) .add_native_token(NativeToken::new(TokenId::from(foundry_id), 1000).unwrap()) .add_unlock_condition(rand_address_unlock_condition()) .with_features(rand_allowed_features(NftOutput::ALLOWED_FEATURES)) diff --git a/sdk/src/types/block/output/rent.rs b/sdk/src/types/block/output/rent.rs deleted file mode 100644 index f3df1617ac..0000000000 --- a/sdk/src/types/block/output/rent.rs +++ /dev/null @@ -1,224 +0,0 @@ -// Copyright 2022 IOTA Stiftung -// SPDX-License-Identifier: Apache-2.0 - -use core::mem::size_of; - -use packable::Packable; - -use crate::types::block::{ - address::{Address, Ed25519Address}, - output::{ - unlock_condition::{AddressUnlockCondition, ExpirationUnlockCondition, StorageDepositReturnUnlockCondition}, - BasicOutputBuilder, NativeTokens, Output, OutputId, - }, - slot::SlotIndex, - BlockId, Error, -}; - -const DEFAULT_BYTE_COST: u32 = 100; -const DEFAULT_BYTE_COST_FACTOR_KEY: u8 = 10; -const DEFAULT_BYTE_COST_FACTOR_DATA: u8 = 1; -// TODO: fill in the real values -const DEFAULT_BYTE_COST_FACTOR_DELEGATION: u8 = 1; -const DEFAULT_BYTE_COST_FACTOR_STAKING_FEATURE: u8 = 1; -const DEFAULT_BYTE_COST_FACTOR_BLOCK_ISSUER_KEY: u8 = 1; - -/// Specifies the current parameters for the byte cost computation. -#[derive(Copy, Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Packable)] -#[cfg_attr( - feature = "serde", - derive(serde::Serialize, serde::Deserialize), - serde(rename_all = "camelCase") -)] -pub struct RentStructure { - /// Cost in tokens per virtual byte. - v_byte_cost: u32, - /// The weight factor used for data fields in the outputs. - v_byte_factor_data: u8, - /// The weight factor used for key fields in the outputs. - v_byte_factor_key: u8, - /// The weight factor used for block issuer key fields in the outputs. - v_byte_factor_block_issuer_key: u8, - /// The weight factor used for staking fields in the outputs. - v_byte_factor_staking_feature: u8, - /// The weight factor used for delegation fields in the outputs. - v_byte_factor_delegation: u8, -} - -impl Default for RentStructure { - fn default() -> Self { - Self { - v_byte_cost: DEFAULT_BYTE_COST, - v_byte_factor_data: DEFAULT_BYTE_COST_FACTOR_DATA, - v_byte_factor_key: DEFAULT_BYTE_COST_FACTOR_KEY, - v_byte_factor_block_issuer_key: DEFAULT_BYTE_COST_FACTOR_BLOCK_ISSUER_KEY, - v_byte_factor_staking_feature: DEFAULT_BYTE_COST_FACTOR_STAKING_FEATURE, - v_byte_factor_delegation: DEFAULT_BYTE_COST_FACTOR_DELEGATION, - } - } -} - -impl RentStructure { - /// Creates a new [`RentStructure`]. - pub fn new( - byte_cost: u32, - byte_factor_data: u8, - byte_factor_key: u8, - byte_factor_block_issuer_key: u8, - byte_factor_staking_feature: u8, - byte_factor_delegation: u8, - ) -> Self { - Self { - v_byte_cost: byte_cost, - v_byte_factor_data: byte_factor_data, - v_byte_factor_key: byte_factor_key, - v_byte_factor_block_issuer_key: byte_factor_block_issuer_key, - v_byte_factor_staking_feature: byte_factor_staking_feature, - v_byte_factor_delegation: byte_factor_delegation, - } - } - - /// Sets the byte cost for the storage deposit. - pub fn with_byte_cost(mut self, byte_cost: u32) -> Self { - self.v_byte_cost = byte_cost; - self - } - - /// Sets the virtual byte weight for the data fields. - pub fn with_byte_factor_data(mut self, byte_factor_data: u8) -> Self { - self.v_byte_factor_data = byte_factor_data; - self - } - - /// Sets the virtual byte weight for the key fields. - pub fn with_byte_factor_key(mut self, byte_factor_key: u8) -> Self { - self.v_byte_factor_key = byte_factor_key; - self - } - - /// Sets the virtual byte weight for the block issuer key fields. - pub fn with_byte_factor_block_issuer_key(mut self, byte_factor_block_issuer_key: u8) -> Self { - self.v_byte_factor_block_issuer_key = byte_factor_block_issuer_key; - self - } - - /// Sets the virtual byte weight for the staking fields. - pub fn with_byte_factor_staking_feature(mut self, byte_factor_staking_feature: u8) -> Self { - self.v_byte_factor_staking_feature = byte_factor_staking_feature; - self - } - - /// Sets the virtual byte weight for the delegation fields. - pub fn with_byte_factor_delegation(mut self, byte_factor_delegation: u8) -> Self { - self.v_byte_factor_delegation = byte_factor_delegation; - self - } - - /// Returns the byte cost of the [`RentStructure`]. - pub const fn byte_cost(&self) -> u32 { - self.v_byte_cost - } - - /// Returns the byte factor data of the [`RentStructure`]. - pub const fn byte_factor_data(&self) -> u8 { - self.v_byte_factor_data - } - - /// Returns the byte factor key of the [`RentStructure`]. - pub const fn byte_factor_key(&self) -> u8 { - self.v_byte_factor_key - } - - /// Returns the block issuer key byte factor of the [`RentStructure`]. - pub const fn byte_factor_block_issuer_key(&self) -> u8 { - self.v_byte_factor_block_issuer_key - } - - /// Returns the staking byte factor of the [`RentStructure`]. - pub const fn byte_factor_staking_feature(&self) -> u8 { - self.v_byte_factor_staking_feature - } - - /// Returns the delegation byte factor of the [`RentStructure`]. - pub const fn byte_factor_delegation(&self) -> u8 { - self.v_byte_factor_delegation - } -} - -/// A trait to facilitate the computation of the byte cost of block outputs, which is central to dust protection. -pub trait Rent { - /// Computes the byte offset given a [`RentStructure`]. - fn byte_offset(&self, rent_structure: RentStructure) -> u32 { - // The ID of the output. - size_of::() as u32 * rent_structure.v_byte_factor_key as u32 - // The ID of the block in which the transaction payload that created this output was included. - + size_of::() as u32 * rent_structure.v_byte_factor_data as u32 - // The index of the slot in which the transaction that created it was booked. - + size_of::() as u32 * rent_structure.v_byte_factor_data as u32 - // The index of the slot in which the transaction was created. - + size_of::() as u32 * rent_structure.v_byte_factor_data as u32 - } - - /// Different fields in a type lead to different storage requirements for the ledger state. - fn weighted_bytes(&self, config: RentStructure) -> u64; - - /// Computes the rent cost given a [`RentStructure`]. - fn rent_cost(&self, rent_structure: RentStructure) -> u64 { - rent_structure.v_byte_cost as u64 - * (self.weighted_bytes(rent_structure) + self.byte_offset(rent_structure) as u64) - } -} - -impl Rent for [T; N] { - fn weighted_bytes(&self, config: RentStructure) -> u64 { - self.iter().map(|elem| elem.weighted_bytes(config)).sum() - } -} - -pub struct MinimumStorageDepositBasicOutput { - config: RentStructure, - token_supply: u64, - builder: BasicOutputBuilder, -} - -impl MinimumStorageDepositBasicOutput { - pub fn new(config: RentStructure, token_supply: u64) -> Self { - Self { - config, - token_supply, - builder: BasicOutputBuilder::new_with_amount(Output::AMOUNT_MIN).add_unlock_condition( - AddressUnlockCondition::new(Address::from(Ed25519Address::from([0; Ed25519Address::LENGTH]))), - ), - } - } - - pub fn with_native_tokens(mut self, native_tokens: impl Into>) -> Self { - if let Some(native_tokens) = native_tokens.into() { - self.builder = self.builder.with_native_tokens(native_tokens); - } - self - } - - pub fn with_storage_deposit_return(mut self) -> Result { - self.builder = self - .builder - .add_unlock_condition(StorageDepositReturnUnlockCondition::new( - Address::from(Ed25519Address::from([0; Ed25519Address::LENGTH])), - Output::AMOUNT_MIN, - self.token_supply, - )?); - Ok(self) - } - - pub fn with_expiration(mut self) -> Result { - self.builder = self.builder.add_unlock_condition(ExpirationUnlockCondition::new( - Address::from(Ed25519Address::from([0; Ed25519Address::LENGTH])), - 1, - )?); - Ok(self) - } - - pub fn finish(self) -> Result { - Ok(self.builder.finish_output()?.rent_cost(self.config)) - } -} diff --git a/sdk/src/types/block/output/storage_score.rs b/sdk/src/types/block/output/storage_score.rs new file mode 100644 index 0000000000..02d6b09be4 --- /dev/null +++ b/sdk/src/types/block/output/storage_score.rs @@ -0,0 +1,181 @@ +// Copyright 2022 IOTA Stiftung +// SPDX-License-Identifier: Apache-2.0 + +use packable::Packable; + +use crate::types::block::{ + address::Ed25519Address, + output::{ + feature::{BlockIssuerFeature, BlockIssuerKey, Ed25519BlockIssuerKey}, + AccountId, AccountOutputBuilder, AddressUnlockCondition, BasicOutputBuilder, OutputId, + }, + slot::SlotIndex, + BlockId, +}; + +const DEFAULT_STORAGE_COST: u64 = 500; +const DEFAULT_FACTOR_DATA: u8 = 1; +const DEFAULT_OFFSET_OUTPUT_OVERHEAD: u64 = 10; +const DEFAULT_OFFSET_ED25519_BLOCK_ISSUER_KEY: u64 = 50; +const DEFAULT_OFFSET_STAKING_FEATURE: u64 = 100; +const DEFAULT_OFFSET_DELEGATION: u64 = 100; + +// Defines the parameters of storage score calculations on objects which take node resources. +// This structure defines the minimum base token deposit required on an object. This deposit does not +// generate Mana, which serves as a payment in Mana for storing the object. +#[derive(Copy, Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Packable)] +#[cfg_attr( + feature = "serde", + derive(serde::Serialize, serde::Deserialize), + serde(rename_all = "camelCase") +)] +pub struct StorageScoreParameters { + /// Defines the number of IOTA tokens required per unit of storage score. + #[cfg_attr(feature = "serde", serde(with = "crate::utils::serde::string"))] + storage_cost: u64, + /// Defines the factor to be used for data only fields. + factor_data: u8, + /// Defines the offset to be applied to all outputs for the overhead of handling them in storage. + #[cfg_attr(feature = "serde", serde(with = "crate::utils::serde::string"))] + offset_output_overhead: u64, + /// Defines the offset to be used for block issuer feature public keys. + #[cfg_attr(feature = "serde", serde(with = "crate::utils::serde::string"))] + offset_ed25519_block_issuer_key: u64, + /// Defines the offset to be used for staking feature. + #[cfg_attr(feature = "serde", serde(with = "crate::utils::serde::string"))] + offset_staking_feature: u64, + /// Defines the offset to be used for delegation output. + #[cfg_attr(feature = "serde", serde(with = "crate::utils::serde::string"))] + offset_delegation: u64, +} + +impl Default for StorageScoreParameters { + fn default() -> Self { + Self { + storage_cost: DEFAULT_STORAGE_COST, + factor_data: DEFAULT_FACTOR_DATA, + offset_output_overhead: DEFAULT_OFFSET_OUTPUT_OVERHEAD, + offset_ed25519_block_issuer_key: DEFAULT_OFFSET_ED25519_BLOCK_ISSUER_KEY, + offset_staking_feature: DEFAULT_OFFSET_STAKING_FEATURE, + offset_delegation: DEFAULT_OFFSET_DELEGATION, + } + } +} + +impl StorageScoreParameters { + /// Creates a new [`StorageScoreParameters`]. + pub fn new( + storage_cost: u64, + data_factor: u8, + output_overhead_offset: u64, + ed25519_block_issuer_key_offset: u64, + staking_feature_offset: u64, + delegation_offset: u64, + ) -> Self { + Self { + storage_cost, + factor_data: data_factor, + offset_output_overhead: output_overhead_offset, + offset_ed25519_block_issuer_key: ed25519_block_issuer_key_offset, + offset_staking_feature: staking_feature_offset, + offset_delegation: delegation_offset, + } + } + + /// Sets the storage cost per unit of storage score. + pub fn with_storage_cost(mut self, storage_cost: u64) -> Self { + self.storage_cost = storage_cost; + self + } + + /// Sets the storage score factor for data fields. + pub fn with_data_factor(mut self, factor: u8) -> Self { + self.factor_data = factor; + self + } + + /// Sets the storage score offset overhead per output. + pub fn with_output_overhead_offset(mut self, offset: u64) -> Self { + self.offset_output_overhead = offset; + self + } + + /// Sets the storage score offset for Ed25519 block issuer key fields. + pub fn with_ed25519_block_issuer_key_offset(mut self, offset: u64) -> Self { + self.offset_ed25519_block_issuer_key = offset; + self + } + + /// Sets the storage score offset for staking fields. + pub fn with_staking_feature_offset(mut self, offset: u64) -> Self { + self.offset_staking_feature = offset; + self + } + + /// Sets the storage score offset for delegation fields. + pub fn with_delegation_offset(mut self, offset: u64) -> Self { + self.offset_delegation = offset; + self + } + + /// Returns the storage cost per unit of storage score. + pub fn storage_cost(&self) -> u64 { + self.storage_cost + } + + /// Returns the storage score factor for data fields. + pub fn data_factor(&self) -> u8 { + self.factor_data + } + + /// Returns the storage score offset overhead per output. + pub fn output_overhead_offset(&self) -> u64 { + self.offset_output_overhead + } + + /// Returns the storage score offset for Ed25519 block issuer key fields. + pub fn ed25519_block_issuer_key_offset(&self) -> u64 { + self.offset_ed25519_block_issuer_key + } + + /// Returns the storage score offset for staking fields. + pub fn staking_feature_offset(&self) -> u64 { + self.offset_staking_feature + } + + /// Returns the storage score offset for delegation fields. + pub fn delegation_offset(&self) -> u64 { + self.offset_delegation + } + + /// Returns the storage score offset per output. + pub fn output_offset(&self) -> u64 { + self.output_overhead_offset() + + (self.data_factor() as usize * (OutputId::LENGTH + BlockId::LENGTH + core::mem::size_of::())) + as u64 + } + + /// Returns the storage score offset for implicit account creation address fields. + pub fn implicit_account_creation_address_offset(&self) -> u64 { + let null_address = Ed25519Address::null(); + let basic_output_score = BasicOutputBuilder::new_with_amount(0) + .add_unlock_condition(AddressUnlockCondition::new(null_address)) + .finish() + .unwrap() + .storage_score(*self); + let account_output_score = AccountOutputBuilder::new_with_amount(0, AccountId::null()) + .add_unlock_condition(AddressUnlockCondition::new(null_address)) + .add_feature(BlockIssuerFeature::new(0, [BlockIssuerKey::Ed25519(Ed25519BlockIssuerKey::null())]).unwrap()) + .finish() + .unwrap() + .storage_score(*self); + account_output_score - basic_output_score + null_address.storage_score(*self) + } +} + +/// A trait to facilitate the computation of the byte cost of block outputs, which is central to dust protection. +pub trait StorageScore { + fn storage_score(&self, _params: StorageScoreParameters) -> u64 { + 0 + } +} diff --git a/sdk/src/types/block/output/unlock_condition/address.rs b/sdk/src/types/block/output/unlock_condition/address.rs index f4ab9bfcd7..9a89bfc2bb 100644 --- a/sdk/src/types/block/output/unlock_condition/address.rs +++ b/sdk/src/types/block/output/unlock_condition/address.rs @@ -3,7 +3,10 @@ use derive_more::From; -use crate::types::block::address::Address; +use crate::types::block::{ + address::Address, + output::{storage_score::StorageScoreParameters, StorageScore}, +}; /// Defines the Address that owns this output, that is, it can unlock it with the proper Unlock in a transaction. #[derive(Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash, From, packable::Packable)] @@ -26,6 +29,12 @@ impl AddressUnlockCondition { } } +impl StorageScore for AddressUnlockCondition { + fn storage_score(&self, params: StorageScoreParameters) -> u64 { + self.address().storage_score(params) + } +} + #[cfg(feature = "serde")] pub(crate) mod dto { use serde::{Deserialize, Serialize}; diff --git a/sdk/src/types/block/output/unlock_condition/expiration.rs b/sdk/src/types/block/output/unlock_condition/expiration.rs index 73860f81cc..41563f41c4 100644 --- a/sdk/src/types/block/output/unlock_condition/expiration.rs +++ b/sdk/src/types/block/output/unlock_condition/expiration.rs @@ -3,7 +3,12 @@ use derive_more::From; -use crate::types::block::{address::Address, slot::SlotIndex, Error}; +use crate::types::block::{ + address::Address, + output::{StorageScore, StorageScoreParameters}, + slot::SlotIndex, + Error, +}; /// Defines an expiration slot index. Before the slot index is reached, only the Address defined in the Address /// Unlock Condition is allowed to unlock the output. Afterward, only the Return Address can unlock it. @@ -55,6 +60,12 @@ impl ExpirationUnlockCondition { } } +impl StorageScore for ExpirationUnlockCondition { + fn storage_score(&self, params: StorageScoreParameters) -> u64 { + self.return_address().storage_score(params) + } +} + #[inline] fn verify_slot_index(slot_index: &SlotIndex, _: &()) -> Result<(), Error> { if VERIFY && *slot_index == 0 { diff --git a/sdk/src/types/block/output/unlock_condition/governor_address.rs b/sdk/src/types/block/output/unlock_condition/governor_address.rs index e2c351e5cc..eb71ef1c7b 100644 --- a/sdk/src/types/block/output/unlock_condition/governor_address.rs +++ b/sdk/src/types/block/output/unlock_condition/governor_address.rs @@ -3,7 +3,10 @@ use derive_more::From; -use crate::types::block::address::Address; +use crate::types::block::{ + address::Address, + output::{StorageScore, StorageScoreParameters}, +}; /// Defines the Governor Address that owns this output, that is, it can unlock it with the proper Unlock in a /// transaction that governance transitions the anchor output. @@ -28,6 +31,12 @@ impl GovernorAddressUnlockCondition { } } +impl StorageScore for GovernorAddressUnlockCondition { + fn storage_score(&self, params: StorageScoreParameters) -> u64 { + self.address().storage_score(params) + } +} + #[cfg(feature = "serde")] pub(crate) mod dto { use serde::{Deserialize, Serialize}; diff --git a/sdk/src/types/block/output/unlock_condition/immutable_account_address.rs b/sdk/src/types/block/output/unlock_condition/immutable_account_address.rs index e6ce94c437..936aeac41d 100644 --- a/sdk/src/types/block/output/unlock_condition/immutable_account_address.rs +++ b/sdk/src/types/block/output/unlock_condition/immutable_account_address.rs @@ -3,7 +3,10 @@ use derive_more::From; -use crate::types::block::address::AccountAddress; +use crate::types::block::{ + address::AccountAddress, + output::{StorageScore, StorageScoreParameters}, +}; /// Defines the permanent [`AccountAddress`] that owns this output. #[derive(Copy, Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash, From, packable::Packable)] @@ -26,6 +29,12 @@ impl ImmutableAccountAddressUnlockCondition { } } +impl StorageScore for ImmutableAccountAddressUnlockCondition { + fn storage_score(&self, params: StorageScoreParameters) -> u64 { + self.address().storage_score(params) + } +} + #[cfg(feature = "serde")] mod dto { use serde::{Deserialize, Serialize}; diff --git a/sdk/src/types/block/output/unlock_condition/mod.rs b/sdk/src/types/block/output/unlock_condition/mod.rs index e11f6d36a0..6a6c9688f2 100644 --- a/sdk/src/types/block/output/unlock_condition/mod.rs +++ b/sdk/src/types/block/output/unlock_condition/mod.rs @@ -30,7 +30,14 @@ pub use self::{ state_controller_address::StateControllerAddressUnlockCondition, storage_deposit_return::StorageDepositReturnUnlockCondition, timelock::TimelockUnlockCondition, }; -use crate::types::block::{address::Address, create_bitflags, protocol::ProtocolParameters, slot::SlotIndex, Error}; +use crate::types::block::{ + address::Address, + create_bitflags, + output::{StorageScore, StorageScoreParameters}, + protocol::ProtocolParameters, + slot::SlotIndex, + Error, +}; /// #[derive(Clone, Eq, PartialEq, Hash, From)] @@ -62,6 +69,20 @@ impl Ord for UnlockCondition { } } +impl StorageScore for UnlockCondition { + fn storage_score(&self, params: StorageScoreParameters) -> u64 { + match self { + Self::Address(uc) => uc.storage_score(params), + Self::StorageDepositReturn(uc) => uc.storage_score(params), + Self::Timelock(uc) => uc.storage_score(params), + Self::Expiration(uc) => uc.storage_score(params), + Self::StateControllerAddress(uc) => uc.storage_score(params), + Self::GovernorAddress(uc) => uc.storage_score(params), + Self::ImmutableAccountAddress(uc) => uc.storage_score(params), + } + } +} + impl core::fmt::Debug for UnlockCondition { fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result { match self { @@ -349,6 +370,12 @@ impl UnlockConditions { } } +impl StorageScore for UnlockConditions { + fn storage_score(&self, params: StorageScoreParameters) -> u64 { + self.iter().map(|uc| uc.storage_score(params)).sum::() + } +} + #[inline] fn verify_unique_sorted(unlock_conditions: &[UnlockCondition]) -> Result<(), Error> { if VERIFY && !is_unique_sorted(unlock_conditions.iter().map(UnlockCondition::kind)) { diff --git a/sdk/src/types/block/output/unlock_condition/state_controller_address.rs b/sdk/src/types/block/output/unlock_condition/state_controller_address.rs index 759a55f3f6..41c2015536 100644 --- a/sdk/src/types/block/output/unlock_condition/state_controller_address.rs +++ b/sdk/src/types/block/output/unlock_condition/state_controller_address.rs @@ -3,7 +3,10 @@ use derive_more::From; -use crate::types::block::address::Address; +use crate::types::block::{ + address::Address, + output::{storage_score::StorageScore, StorageScoreParameters}, +}; /// Defines the State Controller Address that owns this output, that is, it can unlock it with the proper Unlock in a /// transaction that state transitions the anchor output. @@ -28,6 +31,12 @@ impl StateControllerAddressUnlockCondition { } } +impl StorageScore for StateControllerAddressUnlockCondition { + fn storage_score(&self, params: StorageScoreParameters) -> u64 { + self.address().storage_score(params) + } +} + #[cfg(feature = "serde")] pub(crate) mod dto { use serde::{Deserialize, Serialize}; diff --git a/sdk/src/types/block/output/unlock_condition/storage_deposit_return.rs b/sdk/src/types/block/output/unlock_condition/storage_deposit_return.rs index f10022849f..fb937a0e05 100644 --- a/sdk/src/types/block/output/unlock_condition/storage_deposit_return.rs +++ b/sdk/src/types/block/output/unlock_condition/storage_deposit_return.rs @@ -1,7 +1,15 @@ // Copyright 2021 IOTA Stiftung // SPDX-License-Identifier: Apache-2.0 -use crate::types::block::{address::Address, output::verify_output_amount, protocol::ProtocolParameters, Error}; +use crate::types::block::{ + address::Address, + output::{ + storage_score::{StorageScore, StorageScoreParameters}, + verify_output_amount, + }, + protocol::ProtocolParameters, + Error, +}; /// Defines the amount of IOTAs used as storage deposit that have to be returned to the return [`Address`]. #[derive(Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash, packable::Packable)] @@ -43,6 +51,12 @@ impl StorageDepositReturnUnlockCondition { } } +impl StorageScore for StorageDepositReturnUnlockCondition { + fn storage_score(&self, params: StorageScoreParameters) -> u64 { + self.return_address().storage_score(params) + } +} + fn verify_amount(amount: u64, token_supply: u64) -> Result<(), Error> { if VERIFY { verify_output_amount(amount, token_supply).map_err(|_| Error::InvalidStorageDepositAmount(amount))?; diff --git a/sdk/src/types/block/output/unlock_condition/timelock.rs b/sdk/src/types/block/output/unlock_condition/timelock.rs index aeffb7ab5d..a01faa6faf 100644 --- a/sdk/src/types/block/output/unlock_condition/timelock.rs +++ b/sdk/src/types/block/output/unlock_condition/timelock.rs @@ -3,7 +3,7 @@ use derive_more::From; -use crate::types::block::{slot::SlotIndex, Error}; +use crate::types::block::{output::StorageScore, slot::SlotIndex, Error}; /// Defines a slot index until which the output can not be unlocked. #[derive(Copy, Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash, From, packable::Packable)] @@ -31,6 +31,8 @@ impl TimelockUnlockCondition { } } +impl StorageScore for TimelockUnlockCondition {} + #[inline] fn verify_slot_index(slot_index: &SlotIndex, _: &()) -> Result<(), Error> { if VERIFY && *slot_index == 0 { diff --git a/sdk/src/types/block/payload/signed_transaction/transaction.rs b/sdk/src/types/block/payload/signed_transaction/transaction.rs index e8b05e5565..f211230ddf 100644 --- a/sdk/src/types/block/payload/signed_transaction/transaction.rs +++ b/sdk/src/types/block/payload/signed_transaction/transaction.rs @@ -463,7 +463,7 @@ fn verify_outputs(outputs: &[Output], visitor: &ProtocolPara } } - output.verify_storage_deposit(visitor.rent_structure())?; + output.verify_storage_deposit(visitor.storage_score_parameters())?; } } diff --git a/sdk/src/types/block/protocol.rs b/sdk/src/types/block/protocol.rs index 30ecf8e94f..ffefe16550 100644 --- a/sdk/src/types/block/protocol.rs +++ b/sdk/src/types/block/protocol.rs @@ -8,13 +8,15 @@ use crypto::hashes::{blake2b::Blake2b256, Digest}; use getset::{CopyGetters, Getters}; use packable::{prefix::StringPrefix, Packable, PackableExt}; -use super::{ - address::Hrp, - mana::{ManaParameters, RewardsParameters}, - slot::{EpochIndex, SlotIndex}, -}; use crate::{ - types::block::{helper::network_name_to_id, output::RentStructure, Error, PROTOCOL_VERSION}, + types::block::{ + address::Hrp, + helper::network_name_to_id, + mana::{ManaParameters, RewardsParameters}, + output::StorageScoreParameters, + slot::{EpochIndex, SlotIndex}, + Error, PROTOCOL_VERSION, + }, utils::ConvertTo, }; @@ -40,8 +42,8 @@ pub struct ProtocolParameters { pub(crate) network_name: StringPrefix, /// The HRP prefix used for Bech32 addresses in the network. pub(crate) bech32_hrp: Hrp, - /// The rent structure used by given node/network. - pub(crate) rent_structure: RentStructure, + /// The storage score parameters used by given node/network. + pub(crate) storage_score_parameters: StorageScoreParameters, /// The work score parameters used by the node/network. pub(crate) work_score_parameters: WorkScoreParameters, /// The parameters used for mana calculations. @@ -101,7 +103,7 @@ impl Default for ProtocolParameters { // Unwrap: Known to be valid network_name: String::from("iota-core-testnet").try_into().unwrap(), bech32_hrp: Hrp::from_str_unchecked("smr"), - rent_structure: Default::default(), + storage_score_parameters: Default::default(), work_score_parameters: Default::default(), token_supply: 1_813_620_509_061_365, genesis_unix_timestamp: 1582328545, @@ -131,7 +133,7 @@ impl ProtocolParameters { version: u8, network_name: impl Into, bech32_hrp: impl ConvertTo, - rent_structure: RentStructure, + storage_score_parameters: StorageScoreParameters, token_supply: u64, genesis_unix_timestamp: u64, slot_duration_in_seconds: u8, @@ -141,7 +143,7 @@ impl ProtocolParameters { version, network_name: >::try_from(network_name.into()).map_err(Error::InvalidStringPrefix)?, bech32_hrp: bech32_hrp.convert()?, - rent_structure, + storage_score_parameters, token_supply, genesis_unix_timestamp, slot_duration_in_seconds, @@ -330,7 +332,7 @@ pub fn protocol_parameters() -> ProtocolParameters { 2, "testnet", "rms", - crate::types::block::output::RentStructure::new(500, 1, 10, 1, 1, 1), + crate::types::block::output::StorageScoreParameters::new(500, 1, 10, 1, 1, 1), 1_813_620_509_061_365, 1582328545, 10, diff --git a/sdk/src/types/block/rand/output/mod.rs b/sdk/src/types/block/rand/output/mod.rs index 71f8a2a934..53b81781c7 100644 --- a/sdk/src/types/block/rand/output/mod.rs +++ b/sdk/src/types/block/rand/output/mod.rs @@ -42,7 +42,7 @@ pub fn rand_output_id() -> OutputId { /// Generates a random [`BasicOutput`](BasicOutput). pub fn rand_basic_output(token_supply: u64) -> BasicOutput { // TODO: Add `NativeTokens` - BasicOutput::build_with_amount(rand_number_range(Output::AMOUNT_MIN..token_supply)) + BasicOutput::build_with_amount(rand_number_range(0..token_supply)) .with_features(rand_allowed_features(BasicOutput::ALLOWED_FEATURES)) .add_unlock_condition(rand_address_unlock_condition()) .finish() @@ -64,7 +64,7 @@ pub fn rand_account_output(token_supply: u64) -> AccountOutput { // We need to make sure that `AccountId` and `Address` don't match. let account_id = rand_account_id(); - AccountOutput::build_with_amount(rand_number_range(Output::AMOUNT_MIN..token_supply), account_id) + AccountOutput::build_with_amount(rand_number_range(0..token_supply), account_id) .with_features(rand_allowed_features(AccountOutput::ALLOWED_FEATURES)) .add_unlock_condition(rand_address_unlock_condition_different_from_account_id(&account_id)) .finish() @@ -76,7 +76,7 @@ pub fn rand_anchor_output(token_supply: u64) -> AnchorOutput { // We need to make sure that `AnchorId` and `Address` don't match. let anchor_id = rand_anchor_id(); - AnchorOutput::build_with_amount(rand_number_range(Output::AMOUNT_MIN..token_supply), anchor_id) + AnchorOutput::build_with_amount(rand_number_range(0..token_supply), anchor_id) .with_features(rand_allowed_features(AnchorOutput::ALLOWED_FEATURES)) .add_unlock_condition(rand_state_controller_address_unlock_condition_different_from( &anchor_id, @@ -100,15 +100,11 @@ pub fn rand_token_scheme() -> TokenScheme { /// Generates a random [`FoundryOutput`](FoundryOutput). pub fn rand_foundry_output(token_supply: u64) -> FoundryOutput { - FoundryOutput::build_with_amount( - rand_number_range(Output::AMOUNT_MIN..token_supply), - rand_number(), - rand_token_scheme(), - ) - .with_features(rand_allowed_features(FoundryOutput::ALLOWED_FEATURES)) - .add_unlock_condition(ImmutableAccountAddressUnlockCondition::new(rand_account_address())) - .finish() - .unwrap() + FoundryOutput::build_with_amount(rand_number_range(0..token_supply), rand_number(), rand_token_scheme()) + .with_features(rand_allowed_features(FoundryOutput::ALLOWED_FEATURES)) + .add_unlock_condition(ImmutableAccountAddressUnlockCondition::new(rand_account_address())) + .finish() + .unwrap() } /// Generates a random [`NftOutput`](NftOutput). @@ -116,7 +112,7 @@ pub fn rand_nft_output(token_supply: u64) -> NftOutput { // We need to make sure that `NftId` and `Address` don't match. let nft_id = NftId::from(rand_bytes_array()); - NftOutput::build_with_amount(rand_number_range(Output::AMOUNT_MIN..token_supply), nft_id) + NftOutput::build_with_amount(rand_number_range(0..token_supply), nft_id) .with_features(rand_allowed_features(NftOutput::ALLOWED_FEATURES)) .add_unlock_condition(rand_address_unlock_condition_different_from(&nft_id)) .finish() diff --git a/sdk/src/wallet/core/mod.rs b/sdk/src/wallet/core/mod.rs index d594b63ba4..a39f4516b0 100644 --- a/sdk/src/wallet/core/mod.rs +++ b/sdk/src/wallet/core/mod.rs @@ -670,7 +670,7 @@ mod test { types::block::{ address::{Address, Ed25519Address}, input::{Input, UtxoInput}, - output::{AddressUnlockCondition, BasicOutput, Output}, + output::{AddressUnlockCondition, BasicOutput, Output, StorageScoreParameters}, payload::signed_transaction::{SignedTransactionPayload, Transaction, TransactionId}, protocol::ProtocolParameters, rand::mana::rand_mana_allotment, @@ -691,7 +691,7 @@ mod test { 2, "testnet", "rms", - crate::types::block::output::RentStructure::new(500, 1, 10, 1, 1, 1), + StorageScoreParameters::new(500, 1, 10, 1, 1, 1), 1_813_620_509_061_365, 1582328545, 10, diff --git a/sdk/src/wallet/operations/balance.rs b/sdk/src/wallet/operations/balance.rs index 7551a6d537..1bd8e93d95 100644 --- a/sdk/src/wallet/operations/balance.rs +++ b/sdk/src/wallet/operations/balance.rs @@ -5,7 +5,9 @@ use primitive_types::U256; use crate::{ client::secret::SecretManage, - types::block::output::{unlock_condition::UnlockCondition, FoundryId, NativeTokensBuilder, Output, Rent}, + types::block::output::{ + unlock_condition::UnlockCondition, FoundryId, MinimumOutputAmount, NativeTokensBuilder, Output, + }, wallet::{ core::WalletData, operations::{helpers::time::can_output_be_unlocked_forever_from_now_on, output_claiming::OutputsToClaim}, @@ -34,9 +36,9 @@ where wallet_data: &WalletData, ) -> Result { let network_id = self.client().get_network_id().await?; - let rent_structure = self.client().get_rent_structure().await?; + let storage_score_params = self.client().get_storage_score_parameters().await?; let mut balance = Balance::default(); - let mut total_rent_amount = 0; + let mut total_storage_cost = 0; let mut total_native_tokens = NativeTokensBuilder::default(); #[cfg(feature = "participation")] @@ -58,7 +60,7 @@ where } let output = &output_data.output; - let rent = output.rent_cost(rent_structure); + let storage_cost = output.minimum_amount(storage_score_params); // Add account and foundry outputs here because they can't have a // [`StorageDepositReturnUnlockCondition`] or time related unlock conditions @@ -67,9 +69,9 @@ where // Add amount balance.base_coin.total += output.amount(); // Add storage deposit - balance.required_storage_deposit.account += rent; + balance.required_storage_deposit.account += storage_cost; if !wallet_data.locked_outputs.contains(output_id) { - total_rent_amount += rent; + total_storage_cost += storage_cost; } // Add native tokens total_native_tokens.add_native_tokens(output.native_tokens().clone())?; @@ -81,9 +83,9 @@ where // Add amount balance.base_coin.total += output.amount(); // Add storage deposit - balance.required_storage_deposit.foundry += rent; + balance.required_storage_deposit.foundry += storage_cost; if !wallet_data.locked_outputs.contains(output_id) { - total_rent_amount += rent; + total_storage_cost += storage_cost; } // Add native tokens total_native_tokens.add_native_tokens(output.native_tokens().clone())?; @@ -109,19 +111,19 @@ where // Add storage deposit if output.is_basic() { - balance.required_storage_deposit.basic += rent; + balance.required_storage_deposit.basic += storage_cost; if output .native_tokens() .map(|native_tokens| !native_tokens.is_empty()) .unwrap_or(false) && !wallet_data.locked_outputs.contains(output_id) { - total_rent_amount += rent; + total_storage_cost += storage_cost; } } else if output.is_nft() { - balance.required_storage_deposit.nft += rent; + balance.required_storage_deposit.nft += storage_cost; if !wallet_data.locked_outputs.contains(output_id) { - total_rent_amount += rent; + total_storage_cost += storage_cost; } } @@ -184,8 +186,8 @@ where // Add storage deposit if output.is_basic() { - balance.required_storage_deposit.basic += rent; - // Amount for basic outputs isn't added to total_rent_amount if there aren't + balance.required_storage_deposit.basic += storage_cost; + // Amount for basic outputs isn't added to total storage cost if there aren't // native tokens, since we can // spend it without burning. if output @@ -194,12 +196,12 @@ where .unwrap_or(false) && !wallet_data.locked_outputs.contains(output_id) { - total_rent_amount += rent; + total_storage_cost += storage_cost; } } else if output.is_nft() { - balance.required_storage_deposit.nft += rent; + balance.required_storage_deposit.nft += storage_cost; if !wallet_data.locked_outputs.contains(output_id) { - total_rent_amount += rent; + total_storage_cost += storage_cost; } } @@ -233,7 +235,13 @@ where } // } - self.finish(balance, wallet_data, network_id, total_rent_amount, total_native_tokens) + self.finish( + balance, + wallet_data, + network_id, + total_storage_cost, + total_native_tokens, + ) } fn finish( @@ -241,7 +249,7 @@ where mut balance: Balance, wallet_data: &WalletData, network_id: u64, - total_rent_amount: u64, + total_storage_cost: u64, total_native_tokens: NativeTokensBuilder, ) -> Result { // for `available` get locked_outputs, sum outputs amount and subtract from total_amount @@ -267,13 +275,13 @@ where } log::debug!( - "[BALANCE] total_amount: {}, locked_amount: {}, total_rent_amount: {}", + "[BALANCE] total_amount: {}, locked_amount: {}, total_storage_cost: {}", balance.base_coin.total, locked_amount, - total_rent_amount, + total_storage_cost, ); - locked_amount += total_rent_amount; + locked_amount += total_storage_cost; for native_token in total_native_tokens.finish_set()? { // Check if some amount is currently locked diff --git a/sdk/src/wallet/operations/output_claiming.rs b/sdk/src/wallet/operations/output_claiming.rs index b6db006558..a5d27a32f3 100644 --- a/sdk/src/wallet/operations/output_claiming.rs +++ b/sdk/src/wallet/operations/output_claiming.rs @@ -8,11 +8,10 @@ use serde::{Deserialize, Serialize}; use crate::{ client::secret::SecretManage, types::block::{ - address::Address, + address::{Address, Ed25519Address}, output::{ unlock_condition::{AddressUnlockCondition, StorageDepositReturnUnlockCondition}, - BasicOutputBuilder, MinimumStorageDepositBasicOutput, NativeTokens, NativeTokensBuilder, NftOutputBuilder, - Output, OutputId, + BasicOutput, BasicOutputBuilder, NativeTokens, NativeTokensBuilder, NftOutputBuilder, Output, OutputId, }, slot::SlotIndex, }, @@ -201,8 +200,7 @@ where log::debug!("[OUTPUT_CLAIMING] claim_outputs_internal"); let slot_index = self.client().get_slot_index().await?; - let rent_structure = self.client().get_rent_structure().await?; - let token_supply = self.client().get_token_supply().await?; + let storage_score_params = self.client().get_storage_score_parameters().await?; let wallet_data = self.data().await; @@ -244,7 +242,7 @@ where .iter() .map(|i| i.output.amount()) .sum::() - >= MinimumStorageDepositBasicOutput::new(rent_structure, token_supply).finish()?; + >= BasicOutput::minimum_amount(&Address::from(Ed25519Address::null()), storage_score_params); // check native tokens for output_data in &outputs_to_claim { @@ -274,14 +272,14 @@ where let nft_output = if !enough_amount_for_basic_output { // Only update address and nft id if we have no additional inputs which can provide the storage - // deposit for the remaining amount and possible NTs + // deposit for the remaining amount and possible native tokens NftOutputBuilder::from(nft_output) .with_nft_id(nft_output.nft_id_non_null(&output_data.output_id)) .with_unlock_conditions([AddressUnlockCondition::new(wallet_address.clone())]) .finish_output()? } else { NftOutputBuilder::from(nft_output) - .with_minimum_storage_deposit(rent_structure) + .with_minimum_amount(storage_score_params) .with_nft_id(nft_output.nft_id_non_null(&output_data.output_id)) .with_unlock_conditions([AddressUnlockCondition::new(wallet_address.clone())]) // Set native tokens empty, we will collect them from all inputs later @@ -295,25 +293,29 @@ where } } + // TODO: rework native tokens let option_native_token = if new_native_tokens.is_empty() { None } else { Some(new_native_tokens.clone().finish()?) }; - // Check if the new amount is enough for the storage deposit, otherwise increase it to this + // Check if the new amount is enough for the storage deposit, otherwise increase it with a minimal basic output + // amount let mut required_amount = if !enough_amount_for_basic_output { required_amount_for_nfts } else { required_amount_for_nfts - + MinimumStorageDepositBasicOutput::new(rent_structure, token_supply) - .with_native_tokens(option_native_token) + + BasicOutputBuilder::new_with_minimum_amount(storage_score_params) + .add_unlock_condition(AddressUnlockCondition::new(Ed25519Address::null())) + .with_native_tokens(option_native_token.into_iter().flatten()) .finish()? + .amount() }; let mut additional_inputs = Vec::new(); if available_amount < required_amount { - // Sort by amount so we use as less as possible + // Sort by amount so we use as little as possible possible_additional_inputs.sort_by_key(|o| o.output.amount()); // add more inputs @@ -326,9 +328,11 @@ where // Recalculate every time, because new inputs can also add more native tokens, which would increase // the required storage deposit required_amount = required_amount_for_nfts - + MinimumStorageDepositBasicOutput::new(rent_structure, token_supply) - .with_native_tokens(option_native_token) - .finish()?; + + BasicOutputBuilder::new_with_minimum_amount(storage_score_params) + .add_unlock_condition(AddressUnlockCondition::new(Ed25519Address::null())) + .with_native_tokens(option_native_token.into_iter().flatten()) + .finish()? + .amount(); if available_amount < required_amount { if !additional_inputs_used.contains(&output_data.output_id) { diff --git a/sdk/src/wallet/operations/transaction/high_level/create_account.rs b/sdk/src/wallet/operations/transaction/high_level/create_account.rs index 9a9f69355c..bc8b1d5134 100644 --- a/sdk/src/wallet/operations/transaction/high_level/create_account.rs +++ b/sdk/src/wallet/operations/transaction/high_level/create_account.rs @@ -74,7 +74,7 @@ where options: impl Into> + Send, ) -> crate::wallet::Result { log::debug!("[TRANSACTION] prepare_create_account_output"); - let rent_structure = self.client().get_rent_structure().await?; + let storage_score_params = self.client().get_storage_score_parameters().await?; let address = match params.as_ref().and_then(|options| options.address.as_ref()) { Some(bech32_address) => { @@ -85,7 +85,7 @@ where }; let mut account_output_builder = - AccountOutputBuilder::new_with_minimum_storage_deposit(rent_structure, AccountId::null()) + AccountOutputBuilder::new_with_minimum_amount(storage_score_params, AccountId::null()) .with_foundry_counter(0) .add_unlock_condition(AddressUnlockCondition::new(address.clone())); if let Some(CreateAccountParams { diff --git a/sdk/src/wallet/operations/transaction/high_level/minting/create_native_token.rs b/sdk/src/wallet/operations/transaction/high_level/minting/create_native_token.rs index 93e2bb89f6..479e291aaf 100644 --- a/sdk/src/wallet/operations/transaction/high_level/minting/create_native_token.rs +++ b/sdk/src/wallet/operations/transaction/high_level/minting/create_native_token.rs @@ -133,7 +133,7 @@ where options: impl Into> + Send, ) -> crate::wallet::Result { log::debug!("[TRANSACTION] create_native_token"); - let rent_structure = self.client().get_rent_structure().await?; + let storage_score_params = self.client().get_storage_score_parameters().await?; let (account_id, account_output) = self .get_account_output(params.account_id) @@ -157,8 +157,8 @@ where let outputs = [ new_account_output_builder.finish_output()?, { - let mut foundry_builder = FoundryOutputBuilder::new_with_minimum_storage_deposit( - rent_structure, + let mut foundry_builder = FoundryOutputBuilder::new_with_minimum_amount( + storage_score_params, account_output.foundry_counter() + 1, TokenScheme::Simple(SimpleTokenScheme::new( params.circulating_supply, diff --git a/sdk/src/wallet/operations/transaction/high_level/minting/mint_nfts.rs b/sdk/src/wallet/operations/transaction/high_level/minting/mint_nfts.rs index 3bef7fc38d..0ed8a2cb89 100644 --- a/sdk/src/wallet/operations/transaction/high_level/minting/mint_nfts.rs +++ b/sdk/src/wallet/operations/transaction/high_level/minting/mint_nfts.rs @@ -161,7 +161,7 @@ where I::IntoIter: Send, { log::debug!("[TRANSACTION] prepare_mint_nfts"); - let rent_structure = self.client().get_rent_structure().await?; + let storage_score_params = self.client().get_storage_score_parameters().await?; let wallet_address = self.address().await.into_inner(); let mut outputs = Vec::new(); @@ -183,7 +183,7 @@ where }; // NftId needs to be set to 0 for the creation - let mut nft_builder = NftOutputBuilder::new_with_minimum_storage_deposit(rent_structure, NftId::null()) + let mut nft_builder = NftOutputBuilder::new_with_minimum_amount(storage_score_params, NftId::null()) // Address which will own the nft .add_unlock_condition(AddressUnlockCondition::new(address)); diff --git a/sdk/src/wallet/operations/transaction/high_level/send.rs b/sdk/src/wallet/operations/transaction/high_level/send.rs index e1e36f24b7..6c43bcd0e7 100644 --- a/sdk/src/wallet/operations/transaction/high_level/send.rs +++ b/sdk/src/wallet/operations/transaction/high_level/send.rs @@ -9,10 +9,8 @@ use crate::{ types::block::{ address::{Bech32Address, ToBech32Ext}, output::{ - unlock_condition::{ - AddressUnlockCondition, ExpirationUnlockCondition, StorageDepositReturnUnlockCondition, - }, - BasicOutputBuilder, MinimumStorageDepositBasicOutput, + unlock_condition::{AddressUnlockCondition, ExpirationUnlockCondition}, + BasicOutputBuilder, MinimumOutputAmount, }, slot::SlotIndex, }, @@ -138,7 +136,7 @@ where { log::debug!("[TRANSACTION] prepare_send"); let options = options.into(); - let rent_structure = self.client().get_rent_structure().await?; + let storage_score_params = self.client().get_storage_score_parameters().await?; let token_supply = self.client().get_token_supply().await?; let wallet_address = self.address().await; @@ -170,16 +168,12 @@ where .unwrap_or_else(|| default_return_address.clone()); // Get the minimum required amount for an output assuming it does not need a storage deposit. - let output = BasicOutputBuilder::new_with_minimum_storage_deposit(rent_structure) + let output = BasicOutputBuilder::new_with_amount(amount) .add_unlock_condition(AddressUnlockCondition::new(address)) - .finish_output()?; - - if amount >= output.amount() { - outputs.push( - BasicOutputBuilder::from(output.as_basic()) - .with_amount(amount) - .finish_output()?, - ) + .finish()?; + + if amount >= output.minimum_amount(storage_score_params) { + outputs.push(output.into()) } else { let expiration_slot_index = expiration .map_or(slot_index + DEFAULT_EXPIRATION_SLOTS, |expiration_slot_index| { @@ -187,35 +181,22 @@ where }); // Since it does need a storage deposit, calculate how much that should be - let storage_deposit_amount = MinimumStorageDepositBasicOutput::new(rent_structure, token_supply) - .with_storage_deposit_return()? - .with_expiration()? - .finish()?; + let output = BasicOutputBuilder::from(&output) + .add_unlock_condition(ExpirationUnlockCondition::new( + return_address.clone(), + expiration_slot_index, + )?) + .with_sufficient_storage_deposit(return_address, storage_score_params, token_supply)? + .finish_output()?; if !options.as_ref().map(|o| o.allow_micro_amount).unwrap_or_default() { return Err(Error::InsufficientFunds { available: amount, - required: amount + storage_deposit_amount, + required: output.amount(), }); } - outputs.push( - // Add address_and_amount.amount+storage_deposit_amount, so receiver can get - // address_and_amount.amount - BasicOutputBuilder::from(output.as_basic()) - .with_amount(amount + storage_deposit_amount) - .add_unlock_condition( - // We send the storage_deposit_amount back to the sender, so only the additional amount is - // sent - StorageDepositReturnUnlockCondition::new( - return_address.clone(), - storage_deposit_amount, - token_supply, - )?, - ) - .add_unlock_condition(ExpirationUnlockCondition::new(return_address, expiration_slot_index)?) - .finish_output()?, - ) + outputs.push(output) } } diff --git a/sdk/src/wallet/operations/transaction/high_level/send_native_tokens.rs b/sdk/src/wallet/operations/transaction/high_level/send_native_tokens.rs index c487b043a9..67fac19420 100644 --- a/sdk/src/wallet/operations/transaction/high_level/send_native_tokens.rs +++ b/sdk/src/wallet/operations/transaction/high_level/send_native_tokens.rs @@ -10,10 +10,8 @@ use crate::{ types::block::{ address::{Bech32Address, ToBech32Ext}, output::{ - unlock_condition::{ - AddressUnlockCondition, ExpirationUnlockCondition, StorageDepositReturnUnlockCondition, - }, - BasicOutputBuilder, MinimumStorageDepositBasicOutput, NativeToken, NativeTokens, TokenId, + unlock_condition::{AddressUnlockCondition, ExpirationUnlockCondition}, + BasicOutputBuilder, NativeToken, NativeTokens, TokenId, }, slot::SlotIndex, }, @@ -129,7 +127,7 @@ where I::IntoIter: Send, { log::debug!("[TRANSACTION] prepare_send_native_tokens"); - let rent_structure = self.client().get_rent_structure().await?; + let storage_score_params = self.client().get_storage_score_parameters().await?; let token_supply = self.client().get_token_supply().await?; let wallet_address = self.address().await; @@ -168,34 +166,20 @@ where .collect::>>()?, )?; - // get minimum required amount for such an output, so we don't lock more than required - // We have to check it for every output individually, because different address types and amount of - // different native tokens require a different storage deposit - let storage_deposit_amount = MinimumStorageDepositBasicOutput::new(rent_structure, token_supply) - .with_native_tokens(native_tokens.clone()) - .with_storage_deposit_return()? - .with_expiration()? - .finish()?; - let expiration_slot_index = expiration .map_or(slot_index + DEFAULT_EXPIRATION_SLOTS, |expiration_slot_index| { slot_index + expiration_slot_index }); outputs.push( - BasicOutputBuilder::new_with_amount(storage_deposit_amount) + BasicOutputBuilder::new_with_amount(0) .with_native_tokens(native_tokens) .add_unlock_condition(AddressUnlockCondition::new(address)) - .add_unlock_condition( - // We send the full storage_deposit_amount back to the sender, so only the native tokens are - // sent - StorageDepositReturnUnlockCondition::new( - return_address.clone(), - storage_deposit_amount, - token_supply, - )?, - ) - .add_unlock_condition(ExpirationUnlockCondition::new(return_address, expiration_slot_index)?) + .add_unlock_condition(ExpirationUnlockCondition::new( + return_address.clone(), + expiration_slot_index, + )?) + .with_sufficient_storage_deposit(return_address, storage_score_params, token_supply)? .finish_output()?, ) } diff --git a/sdk/src/wallet/operations/transaction/mod.rs b/sdk/src/wallet/operations/transaction/mod.rs index b3d49d954a..78cfcdfbf7 100644 --- a/sdk/src/wallet/operations/transaction/mod.rs +++ b/sdk/src/wallet/operations/transaction/mod.rs @@ -73,7 +73,7 @@ where // Check if the outputs have enough amount to cover the storage deposit for output in &outputs { - output.verify_storage_deposit(protocol_parameters.rent_structure())?; + output.verify_storage_deposit(protocol_parameters.storage_score_parameters())?; } self.finish_transaction(outputs, options).await diff --git a/sdk/src/wallet/operations/transaction/prepare_output.rs b/sdk/src/wallet/operations/transaction/prepare_output.rs index 95c04aa37d..ae9e822e7d 100644 --- a/sdk/src/wallet/operations/transaction/prepare_output.rs +++ b/sdk/src/wallet/operations/transaction/prepare_output.rs @@ -6,15 +6,15 @@ use serde::{Deserialize, Serialize}; use crate::{ client::secret::SecretManage, types::block::{ - address::{Address, Bech32Address}, + address::{Address, Bech32Address, Ed25519Address}, output::{ feature::{IssuerFeature, MetadataFeature, SenderFeature, TagFeature}, unlock_condition::{ AddressUnlockCondition, ExpirationUnlockCondition, StorageDepositReturnUnlockCondition, TimelockUnlockCondition, }, - BasicOutputBuilder, MinimumStorageDepositBasicOutput, NativeToken, NftId, NftOutputBuilder, Output, Rent, - RentStructure, UnlockCondition, + BasicOutput, BasicOutputBuilder, MinimumOutputAmount, NativeToken, NftId, NftOutputBuilder, Output, + StorageScoreParameters, UnlockCondition, }, slot::SlotIndex, Error, @@ -49,12 +49,12 @@ where self.client().bech32_hrp_matches(params.recipient_address.hrp()).await?; - let rent_structure = self.client().get_rent_structure().await?; + let storage_score_params = self.client().get_storage_score_parameters().await?; let nft_id = params.assets.as_ref().and_then(|a| a.nft_id); let (mut first_output_builder, existing_nft_output_data) = self - .create_initial_output_builder(params.recipient_address, nft_id, rent_structure) + .create_initial_output_builder(params.recipient_address, nft_id, storage_score_params) .await?; if let Some(assets) = ¶ms.assets { @@ -105,8 +105,8 @@ where // Build output with minimum required storage deposit so we can use the amount in the next step let first_output = first_output_builder - .with_minimum_storage_deposit(rent_structure) - .finish_output(token_supply)?; + .with_minimum_amount(storage_score_params) + .finish_output()?; let mut second_output_builder = if nft_id.is_some() { OutputBuilder::Nft(NftOutputBuilder::from(first_output.as_nft())) @@ -114,10 +114,11 @@ where OutputBuilder::Basic(BasicOutputBuilder::from(first_output.as_basic())) }; - let min_storage_deposit_basic_output = - MinimumStorageDepositBasicOutput::new(rent_structure, token_supply).finish()?; + // TODO: Probably not good to use ed25519 always here, even if technically it's the same for now.. + let min_amount_basic_output = + BasicOutput::minimum_amount(&Address::from(Ed25519Address::null()), storage_score_params); - let min_required_storage_deposit = first_output.rent_cost(rent_structure); + let min_required_storage_deposit = first_output.minimum_amount(storage_score_params); if params.amount > min_required_storage_deposit { second_output_builder = second_output_builder.with_amount(params.amount); @@ -138,19 +139,19 @@ where second_output_builder = second_output_builder.add_unlock_condition(StorageDepositReturnUnlockCondition::new( remainder_address.clone(), - // Return minimum storage deposit - min_storage_deposit_basic_output, + // Return minimum amount + min_amount_basic_output, token_supply, )?); // Update output amount, so recipient still gets the provided amount - let new_amount = params.amount + min_storage_deposit_basic_output; + let new_amount = params.amount + min_amount_basic_output; // new_amount could be not enough because we added the storage deposit return unlock condition, so we // need to check the min required storage deposit again let min_storage_deposit_new_amount = second_output_builder .clone() - .with_minimum_storage_deposit(rent_structure) - .finish_output(token_supply)? + .with_minimum_amount(storage_score_params) + .finish_output()? .amount(); if new_amount < min_storage_deposit_new_amount { @@ -160,8 +161,8 @@ where second_output_builder = second_output_builder.replace_unlock_condition(StorageDepositReturnUnlockCondition::new( remainder_address.clone(), - // Return minimum storage deposit - min_storage_deposit_basic_output + additional_required_amount, + // Return minimum amount + min_amount_basic_output + additional_required_amount, token_supply, )?); } else { @@ -171,7 +172,7 @@ where } } - let third_output = second_output_builder.clone().finish_output(token_supply)?; + let third_output = second_output_builder.clone().finish_output()?; let mut final_amount = third_output.amount(); // Now we have to make sure that our output also works with our available balance, without leaving < // min_storage_deposit_basic_output for a remainder (if not 0) @@ -179,7 +180,7 @@ where // If we're sending an existing NFT, its minimum required storage deposit is not part of the available base_coin // balance, so we add it here if let Some(existing_nft_output_data) = existing_nft_output_data { - available_base_coin += existing_nft_output_data.output.rent_cost(rent_structure); + available_base_coin += existing_nft_output_data.output.minimum_amount(storage_score_params); } if final_amount > available_base_coin { @@ -194,7 +195,7 @@ where if final_amount < available_base_coin { let remaining_balance = available_base_coin - final_amount; - if remaining_balance < min_storage_deposit_basic_output { + if remaining_balance < min_amount_basic_output { // not enough for remainder if params .storage_deposit @@ -216,7 +217,7 @@ where second_output_builder = second_output_builder.replace_unlock_condition(StorageDepositReturnUnlockCondition::new( remainder_address, - // Return minimum storage deposit + // Return minimum amount new_sdr_amount, token_supply, )?); @@ -225,13 +226,13 @@ where // Would leave dust behind, so return what's required for a remainder return Err(crate::wallet::Error::InsufficientFunds { available: available_base_coin, - required: available_base_coin + min_storage_deposit_basic_output - remaining_balance, + required: available_base_coin + min_amount_basic_output - remaining_balance, }); } } } - Ok(second_output_builder.finish_output(token_supply)?) + Ok(second_output_builder.finish_output()?) } // Create the initial output builder for prepare_output() @@ -239,16 +240,13 @@ where &self, recipient_address: Bech32Address, nft_id: Option, - rent_structure: RentStructure, + params: StorageScoreParameters, ) -> crate::wallet::Result<(OutputBuilder, Option)> { let (mut first_output_builder, existing_nft_output_data) = if let Some(nft_id) = &nft_id { if nft_id.is_null() { // Mint a new NFT output ( - OutputBuilder::Nft(NftOutputBuilder::new_with_minimum_storage_deposit( - rent_structure, - *nft_id, - )), + OutputBuilder::Nft(NftOutputBuilder::new_with_minimum_amount(params, *nft_id)), None, ) } else { @@ -269,7 +267,7 @@ where } } else { ( - OutputBuilder::Basic(BasicOutputBuilder::new_with_minimum_storage_deposit(rent_structure)), + OutputBuilder::Basic(BasicOutputBuilder::new_with_minimum_amount(params)), None, ) }; @@ -349,10 +347,10 @@ pub struct StorageDeposit { #[derive(Debug, Default, Clone, Copy, Eq, PartialEq, Serialize, Deserialize)] #[non_exhaustive] pub enum ReturnStrategy { - // A storage deposit return unlock condition will be added with the required minimum storage deposit + // A storage deposit return unlock condition will be added with the required minimum amount #[default] Return, - // The recipient address will get the additional amount to reach the minimum storage deposit gifted + // The recipient address will get the additional amount to reach the minimum amount gifted Gift, } @@ -413,13 +411,13 @@ impl OutputBuilder { } self } - fn with_minimum_storage_deposit(mut self, rent_structure: RentStructure) -> Self { + fn with_minimum_amount(mut self, params: StorageScoreParameters) -> Self { match self { Self::Basic(b) => { - self = Self::Basic(b.with_minimum_storage_deposit(rent_structure)); + self = Self::Basic(b.with_minimum_amount(params)); } Self::Nft(b) => { - self = Self::Nft(b.with_minimum_storage_deposit(rent_structure)); + self = Self::Nft(b.with_minimum_amount(params)); } } self @@ -435,7 +433,7 @@ impl OutputBuilder { } self } - fn finish_output(self, token_supply: u64) -> Result { + fn finish_output(self) -> Result { match self { Self::Basic(b) => b.finish_output(), Self::Nft(b) => b.finish_output(), diff --git a/sdk/src/wallet/operations/transaction/prepare_transaction.rs b/sdk/src/wallet/operations/transaction/prepare_transaction.rs index 0b1906eddf..fcf9a1f96d 100644 --- a/sdk/src/wallet/operations/transaction/prepare_transaction.rs +++ b/sdk/src/wallet/operations/transaction/prepare_transaction.rs @@ -35,11 +35,11 @@ where let options = options.into(); let outputs = outputs.into(); let prepare_transaction_start_time = Instant::now(); - let rent_structure = self.client().get_rent_structure().await?; + let storage_score_params = self.client().get_storage_score_parameters().await?; // Check if the outputs have enough amount to cover the storage deposit for output in &outputs { - output.verify_storage_deposit(rent_structure)?; + output.verify_storage_deposit(storage_score_params)?; } let is_burn_present = options.as_ref().map(|options| options.burn.is_some()).unwrap_or(false); diff --git a/sdk/tests/client/input_selection/basic_outputs.rs b/sdk/tests/client/input_selection/basic_outputs.rs index 8eedd759ac..712a6588b2 100644 --- a/sdk/tests/client/input_selection/basic_outputs.rs +++ b/sdk/tests/client/input_selection/basic_outputs.rs @@ -1123,44 +1123,45 @@ fn two_inputs_remainder_3() { }); } -#[test] -fn another_input_required_to_cover_remainder_rent() { - let protocol_parameters = protocol_parameters(); - - let inputs = build_inputs([ - Basic(500_000, BECH32_ADDRESS_ED25519_0, None, None, None, None, None, None), - Basic(600_000, BECH32_ADDRESS_ED25519_0, None, None, None, None, None, None), - Basic(700_000, BECH32_ADDRESS_ED25519_0, None, None, None, None, None, None), - ]); - let outputs = build_outputs([Basic( - 1_000_000, - BECH32_ADDRESS_ED25519_0, - None, - None, - None, - None, - None, - None, - )]); +// TODO: re-enabled when rent is figured out +// #[test] +// fn another_input_required_to_cover_remainder_rent() { +// let protocol_parameters = protocol_parameters(); - let selected = InputSelection::new( - inputs.clone(), - outputs.clone(), - addresses([BECH32_ADDRESS_ED25519_0]), - protocol_parameters, - ) - .select() - .unwrap(); +// let inputs = build_inputs([ +// Basic(500_000, BECH32_ADDRESS_ED25519_0, None, None, None, None, None, None), +// Basic(600_000, BECH32_ADDRESS_ED25519_0, None, None, None, None, None, None), +// Basic(700_000, BECH32_ADDRESS_ED25519_0, None, None, None, None, None, None), +// ]); +// let outputs = build_outputs([Basic( +// 1_000_000, +// BECH32_ADDRESS_ED25519_0, +// None, +// None, +// None, +// None, +// None, +// None, +// )]); - assert!(unsorted_eq(&selected.inputs, &inputs)); - assert_eq!(selected.outputs.len(), 2); - assert!(selected.outputs.contains(&outputs[0])); - selected.outputs.iter().for_each(|output| { - if !outputs.contains(output) { - assert!(is_remainder_or_return(output, 800_000, BECH32_ADDRESS_ED25519_0, None)); - } - }); -} +// let selected = InputSelection::new( +// inputs.clone(), +// outputs.clone(), +// addresses([BECH32_ADDRESS_ED25519_0]), +// protocol_parameters, +// ) +// .select() +// .unwrap(); + +// assert!(unsorted_eq(&selected.inputs, &inputs)); +// assert_eq!(selected.outputs.len(), 2); +// assert!(selected.outputs.contains(&outputs[0])); +// selected.outputs.iter().for_each(|output| { +// if !outputs.contains(output) { +// assert!(is_remainder_or_return(output, 800_000, BECH32_ADDRESS_ED25519_0, None)); +// } +// }); +// } #[test] fn sender_already_selected() { diff --git a/sdk/tests/client/input_selection/nft_outputs.rs b/sdk/tests/client/input_selection/nft_outputs.rs index 5212407e81..909024f6f2 100644 --- a/sdk/tests/client/input_selection/nft_outputs.rs +++ b/sdk/tests/client/input_selection/nft_outputs.rs @@ -1198,13 +1198,14 @@ fn changed_immutable_metadata() { #[cfg(not(feature = "irc_27"))] let metadata = [1, 2, 3]; - let nft_output = NftOutputBuilder::new_with_minimum_storage_deposit(protocol_parameters.rent_structure(), nft_id_1) - .with_immutable_features(MetadataFeature::try_from(metadata)) - .add_unlock_condition(AddressUnlockCondition::new( - Address::try_from_bech32(BECH32_ADDRESS_ED25519_0).unwrap(), - )) - .finish_output() - .unwrap(); + let nft_output = + NftOutputBuilder::new_with_minimum_amount(protocol_parameters.storage_score_parameters(), nft_id_1) + .with_immutable_features(MetadataFeature::try_from(metadata)) + .add_unlock_condition(AddressUnlockCondition::new( + Address::try_from_bech32(BECH32_ADDRESS_ED25519_0).unwrap(), + )) + .finish_output() + .unwrap(); let inputs = [InputSigningData { output: nft_output.clone(), @@ -1224,7 +1225,7 @@ fn changed_immutable_metadata() { // New nft output with changed immutable metadata feature let updated_nft_output = NftOutputBuilder::from(nft_output.as_nft()) - .with_minimum_storage_deposit(protocol_parameters.rent_structure()) + .with_minimum_amount(protocol_parameters.storage_score_parameters()) .with_immutable_features(MetadataFeature::try_from(metadata)) .finish_output() .unwrap(); diff --git a/sdk/tests/client/node_api/indexer.rs b/sdk/tests/client/node_api/indexer.rs index 1ab8a7ae4d..d873f1400e 100644 --- a/sdk/tests/client/node_api/indexer.rs +++ b/sdk/tests/client/node_api/indexer.rs @@ -64,8 +64,8 @@ // .await?[0]; // let nft_output = -// NftOutputBuilder::new_with_minimum_storage_deposit(*protocol_parameters.rent_structure(), NftId::null()) -// .with_unlock_conditions([UnlockCondition::Address(AddressUnlockCondition::new(address))]) +// NftOutputBuilder::new_with_minimum_storage_deposit(*protocol_parameters.storage_score_parameters(), +// NftId::null()) .with_unlock_conditions([UnlockCondition::Address(AddressUnlockCondition::new(address))]) // .finish_output(protocol_parameters.token_supply())?; // let block = client @@ -121,7 +121,7 @@ // ); // let foundry_output = FoundryOutputBuilder::new_with_minimum_storage_deposit( -// *protocol_parameters.rent_structure(), +// *protocol_parameters.storage_score_parameters(), // alias_output_0.as_alias().foundry_counter() + 1, // TokenScheme::Simple(SimpleTokenScheme::new(100, 0, 500)?), // ) diff --git a/sdk/tests/types/block_id.rs b/sdk/tests/types/block_id.rs index 87152765ca..b788f4cd29 100644 --- a/sdk/tests/types/block_id.rs +++ b/sdk/tests/types/block_id.rs @@ -62,7 +62,7 @@ fn memory_layout() { // TODO: re-enable below tests when source is updated // fn protocol_parameters() -> ProtocolParameters { -// ProtocolParameters::new(3, "test", "rms", RentStructure::default(), 0, 1695275822, 10, 0).unwrap() +// ProtocolParameters::new(3, "test", "rms", StorageScoreParameters::default(), 0, 1695275822, 10, 0).unwrap() // } // #[test] diff --git a/sdk/tests/types/mod.rs b/sdk/tests/types/mod.rs index 0faf8400da..66bf093d08 100644 --- a/sdk/tests/types/mod.rs +++ b/sdk/tests/types/mod.rs @@ -13,9 +13,9 @@ mod output_id; mod parents; mod payload; mod protocol; -mod rent; mod signed_transaction_payload; mod slot; +mod storage_score; mod tagged_data_payload; mod transaction; mod transaction_id; diff --git a/sdk/tests/types/output/account.rs b/sdk/tests/types/output/account.rs index 2b6f7e84f0..c7c3b9bf9e 100644 --- a/sdk/tests/types/output/account.rs +++ b/sdk/tests/types/output/account.rs @@ -3,7 +3,7 @@ use iota_sdk::types::block::{ address::AccountAddress, - output::{AccountOutput, Feature, FoundryId, NativeToken, Output, Rent, SimpleTokenScheme, TokenId}, + output::{AccountOutput, Feature, FoundryId, MinimumOutputAmount, NativeToken, Output, SimpleTokenScheme, TokenId}, protocol::protocol_parameters, rand::output::{ feature::{rand_issuer_feature, rand_metadata_feature, rand_sender_feature}, @@ -54,7 +54,7 @@ fn builder() { let metadata = rand_metadata_feature(); let output = builder - .with_minimum_storage_deposit(protocol_parameters.rent_structure()) + .with_minimum_amount(protocol_parameters.storage_score_parameters()) .add_unlock_condition(rand_address_unlock_condition_different_from_account_id(&account_id)) .with_features([Feature::from(metadata.clone()), sender_1.clone().into()]) .with_immutable_features([Feature::from(metadata.clone()), issuer_1.clone().into()]) @@ -63,7 +63,7 @@ fn builder() { assert_eq!( output.amount(), - Output::Account(output.clone()).rent_cost(protocol_parameters.rent_structure()) + output.minimum_amount(protocol_parameters.storage_score_parameters()) ); assert_eq!(output.features().metadata(), Some(&metadata)); assert_eq!(output.features().sender(), Some(&sender_1)); diff --git a/sdk/tests/types/output/basic.rs b/sdk/tests/types/output/basic.rs index 24f81e4051..59967e4c01 100644 --- a/sdk/tests/types/output/basic.rs +++ b/sdk/tests/types/output/basic.rs @@ -2,7 +2,7 @@ // SPDX-License-Identifier: Apache-2.0 use iota_sdk::types::block::{ - output::{BasicOutput, Feature, FoundryId, NativeToken, Output, Rent, SimpleTokenScheme, TokenId}, + output::{BasicOutput, Feature, FoundryId, MinimumOutputAmount, NativeToken, Output, SimpleTokenScheme, TokenId}, protocol::protocol_parameters, rand::{ address::rand_account_address, @@ -48,7 +48,7 @@ fn builder() { let metadata = rand_metadata_feature(); let output = builder - .with_minimum_storage_deposit(protocol_parameters.rent_structure()) + .with_minimum_amount(protocol_parameters.storage_score_parameters()) .add_unlock_condition(rand_address_unlock_condition()) .with_features([Feature::from(metadata.clone()), sender_1.clone().into()]) .finish() @@ -56,7 +56,7 @@ fn builder() { assert_eq!( output.amount(), - Output::Basic(output.clone()).rent_cost(protocol_parameters.rent_structure()) + output.minimum_amount(protocol_parameters.storage_score_parameters()) ); assert_eq!(output.features().metadata(), Some(&metadata)); assert_eq!(output.features().sender(), Some(&sender_1)); diff --git a/sdk/tests/types/output/foundry.rs b/sdk/tests/types/output/foundry.rs index 66859d0da2..68b1a23ff2 100644 --- a/sdk/tests/types/output/foundry.rs +++ b/sdk/tests/types/output/foundry.rs @@ -3,8 +3,8 @@ use iota_sdk::types::block::{ output::{ - unlock_condition::ImmutableAccountAddressUnlockCondition, FoundryId, FoundryOutput, NativeToken, Output, Rent, - SimpleTokenScheme, TokenId, + unlock_condition::ImmutableAccountAddressUnlockCondition, FoundryId, FoundryOutput, MinimumOutputAmount, + NativeToken, Output, SimpleTokenScheme, TokenId, }, protocol::protocol_parameters, rand::{ @@ -52,14 +52,14 @@ fn builder() { assert!(output.immutable_features().is_empty()); let output = builder - .with_minimum_storage_deposit(protocol_parameters.rent_structure()) + .with_minimum_amount(protocol_parameters.storage_score_parameters()) .add_unlock_condition(ImmutableAccountAddressUnlockCondition::new(rand_account_address())) .finish() .unwrap(); assert_eq!( output.amount(), - Output::Foundry(output).rent_cost(protocol_parameters.rent_structure()) + output.minimum_amount(protocol_parameters.storage_score_parameters()) ); } diff --git a/sdk/tests/types/output/nft.rs b/sdk/tests/types/output/nft.rs index 437ae9fcf0..edf526aee2 100644 --- a/sdk/tests/types/output/nft.rs +++ b/sdk/tests/types/output/nft.rs @@ -2,7 +2,7 @@ // SPDX-License-Identifier: Apache-2.0 use iota_sdk::types::block::{ - output::{FoundryId, NativeToken, NftId, NftOutput, Output, Rent, SimpleTokenScheme, TokenId}, + output::{FoundryId, MinimumOutputAmount, NativeToken, NftId, NftOutput, Output, SimpleTokenScheme, TokenId}, protocol::protocol_parameters, rand::{ address::rand_account_address, @@ -53,14 +53,14 @@ fn builder() { assert!(output.immutable_features().is_empty()); let output = builder - .with_minimum_storage_deposit(protocol_parameters.rent_structure()) + .with_minimum_amount(protocol_parameters.storage_score_parameters()) .add_unlock_condition(rand_address_unlock_condition()) .finish() .unwrap(); assert_eq!( output.amount(), - Output::Nft(output).rent_cost(protocol_parameters.rent_structure()) + output.minimum_amount(protocol_parameters.storage_score_parameters()) ); } diff --git a/sdk/tests/types/rent.rs b/sdk/tests/types/storage_score.rs similarity index 94% rename from sdk/tests/types/rent.rs rename to sdk/tests/types/storage_score.rs index 3d86541aa5..94e2db354b 100644 --- a/sdk/tests/types/rent.rs +++ b/sdk/tests/types/storage_score.rs @@ -1,7 +1,7 @@ // Copyright 2022 IOTA Stiftung // SPDX-License-Identifier: Apache-2.0 -// TODO: Re-enable when rent is figured out +// TODO: Re-enable when storage score is figured out // use iota_sdk::types::block::{ // output::{Output, Rent}, diff --git a/sdk/tests/wallet/claim_outputs.rs b/sdk/tests/wallet/claim_outputs.rs index bc0366cff0..ae52af1961 100644 --- a/sdk/tests/wallet/claim_outputs.rs +++ b/sdk/tests/wallet/claim_outputs.rs @@ -140,11 +140,11 @@ async fn claim_2_basic_outputs_no_outputs_in_claim_account() -> Result<()> { request_funds(&wallet_0).await?; - let rent_structure = wallet_0.client().get_rent_structure().await?; + let storage_score_params = wallet_0.client().get_storage_score_parameters().await?; // TODO more fitting value let expiration_slot = wallet_0.client().get_slot_index().await? + 86400; - let output = BasicOutputBuilder::new_with_minimum_storage_deposit(rent_structure) + let output = BasicOutputBuilder::new_with_minimum_amount(storage_score_params) .add_unlock_condition(AddressUnlockCondition::new(wallet_1.address().await)) .add_unlock_condition(ExpirationUnlockCondition::new( wallet_0.address().await, @@ -336,12 +336,12 @@ async fn claim_2_native_tokens_no_outputs_in_claim_account() -> Result<()> { .await?; wallet_0.sync(None).await?; - let rent_structure = wallet_0.client().get_rent_structure().await?; + let storage_score_params = wallet_0.client().get_storage_score_parameters().await?; let tx = wallet_0 .send_outputs( [ - BasicOutputBuilder::new_with_minimum_storage_deposit(rent_structure) + BasicOutputBuilder::new_with_minimum_amount(storage_score_params) .add_unlock_condition(AddressUnlockCondition::new(wallet_1.address().await)) .add_unlock_condition(ExpirationUnlockCondition::new( wallet_0.address().await, @@ -349,7 +349,7 @@ async fn claim_2_native_tokens_no_outputs_in_claim_account() -> Result<()> { )?) .add_native_token(NativeToken::new(create_tx_0.token_id, native_token_amount)?) .finish_output()?, - BasicOutputBuilder::new_with_minimum_storage_deposit(rent_structure) + BasicOutputBuilder::new_with_minimum_amount(storage_score_params) .add_unlock_condition(AddressUnlockCondition::new(wallet_1.address().await)) .add_unlock_condition(ExpirationUnlockCondition::new( wallet_0.address().await, diff --git a/sdk/tests/wallet/output_preparation.rs b/sdk/tests/wallet/output_preparation.rs index 314d3558fa..8a2e294a03 100644 --- a/sdk/tests/wallet/output_preparation.rs +++ b/sdk/tests/wallet/output_preparation.rs @@ -6,7 +6,7 @@ use std::str::FromStr; use iota_sdk::{ types::block::{ address::{Address, Bech32Address, ToBech32Ext}, - output::{MinimumStorageDepositBasicOutput, NativeToken, NftId, Output, Rent, TokenId}, + output::{BasicOutput, MinimumOutputAmount, NativeToken, NftId, TokenId}, slot::SlotIndex, }, wallet::{Assets, Features, MintNftParams, OutputParams, Result, ReturnStrategy, StorageDeposit, Unlocks}, @@ -404,9 +404,9 @@ async fn output_preparation() -> Result<()> { None, ) .await?; - let rent_structure = wallet.client().get_rent_structure().await?; - let minimum_storage_deposit = output.rent_cost(rent_structure); - assert_eq!(output.amount(), minimum_storage_deposit); + let storage_score_params = wallet.client().get_storage_score_parameters().await?; + let minimum_amount = output.minimum_amount(storage_score_params); + assert_eq!(output.amount(), minimum_amount); assert_eq!(output.amount(), 187900); let sdr = output.unlock_conditions().unwrap().storage_deposit_return().unwrap(); assert_eq!(sdr.amount(), 145300); @@ -428,7 +428,7 @@ async fn output_preparation_sdr() -> Result<()> { let wallet = make_wallet(storage_path, None, None).await?; request_funds(&wallet).await?; - let rent_structure = wallet.client().get_rent_structure().await?; + let storage_score_params = wallet.client().get_storage_score_parameters().await?; let recipient_address_bech32 = String::from("rms1qpszqzadsym6wpppd6z037dvlejmjuke7s24hm95s9fg9vpua7vluaw60xu"); // Roundtrip to get the correct bech32 HRP @@ -449,7 +449,7 @@ async fn output_preparation_sdr() -> Result<()> { ) .await?; // Check if the output has enough amount to cover the storage deposit - output.verify_storage_deposit(rent_structure)?; + output.verify_storage_deposit(storage_score_params)?; assert_eq!(output.amount(), 50601); // address and sdr unlock condition assert_eq!(output.unlock_conditions().unwrap().len(), 2); @@ -470,7 +470,7 @@ async fn output_preparation_sdr() -> Result<()> { ) .await?; // Check if the output has enough amount to cover the storage deposit - output.verify_storage_deposit(rent_structure)?; + output.verify_storage_deposit(storage_score_params)?; assert_eq!(output.amount(), 85199); // address and sdr unlock condition assert_eq!(output.unlock_conditions().unwrap().len(), 2); @@ -495,7 +495,7 @@ async fn output_preparation_sdr() -> Result<()> { ) .await?; // Check if the output has enough amount to cover the storage deposit - output.verify_storage_deposit(rent_structure)?; + output.verify_storage_deposit(storage_score_params)?; assert_eq!(output.amount(), 85199); // address and sdr unlock condition assert_eq!(output.unlock_conditions().unwrap().len(), 2); @@ -520,7 +520,7 @@ async fn output_preparation_sdr() -> Result<()> { ) .await?; // Check if the output has enough amount to cover the storage deposit - output.verify_storage_deposit(rent_structure)?; + output.verify_storage_deposit(storage_score_params)?; // The additional 1 amount will be added, because the storage deposit should be gifted and not returned assert_eq!(output.amount(), 42600); // storage deposit gifted, only address unlock condition @@ -608,12 +608,10 @@ async fn prepare_output_remainder_dust() -> Result<()> { request_funds(&wallet_0).await?; request_funds(&wallet_1).await?; - let rent_structure = wallet_0.client().get_rent_structure().await?; - let token_supply = wallet_0.client().get_token_supply().await?; + let storage_score_params = wallet_0.client().get_storage_score_parameters().await?; let balance = wallet_0.sync(None).await?; - let minimum_required_storage_deposit = - MinimumStorageDepositBasicOutput::new(rent_structure, token_supply).finish()?; + let minimum_amount = BasicOutput::minimum_amount(&*wallet_1.address().await, storage_score_params); // Send away most balance so we can test with leaving dust let output = wallet_0 @@ -640,7 +638,7 @@ async fn prepare_output_remainder_dust() -> Result<()> { .prepare_output( OutputParams { recipient_address: wallet_1.address().await, - amount: minimum_required_storage_deposit - 1, // Leave less than min. deposit + amount: minimum_amount - 1, // Leave less than min. deposit assets: None, features: None, unlocks: None, @@ -654,7 +652,7 @@ async fn prepare_output_remainder_dust() -> Result<()> { .await?; // Check if the output has enough amount to cover the storage deposit - output.verify_storage_deposit(rent_structure)?; + output.verify_storage_deposit(storage_score_params)?; // The left over 21299 is too small to keep, so we donate it assert_eq!(output.amount(), balance.base_coin().available()); // storage deposit gifted, only address unlock condition @@ -664,7 +662,7 @@ async fn prepare_output_remainder_dust() -> Result<()> { .prepare_output( OutputParams { recipient_address: wallet_1.address().await, - amount: minimum_required_storage_deposit - 1, // Leave less than min. deposit + amount: minimum_amount - 1, // Leave less than min. deposit assets: None, features: None, unlocks: None, @@ -698,7 +696,7 @@ async fn prepare_output_remainder_dust() -> Result<()> { .await?; // Check if the output has enough amount to cover the storage deposit - output.verify_storage_deposit(rent_structure)?; + output.verify_storage_deposit(storage_score_params)?; // We use excess if leftover is too small, so amount == all available balance assert_eq!(output.amount(), 63900); // storage deposit gifted, only address unlock condition @@ -722,7 +720,7 @@ async fn prepare_output_remainder_dust() -> Result<()> { .await?; // Check if the output has enough amount to cover the storage deposit - output.verify_storage_deposit(rent_structure)?; + output.verify_storage_deposit(storage_score_params)?; // We use excess if leftover is too small, so amount == all available balance assert_eq!(output.amount(), 63900); // storage deposit returned, address and SDR unlock condition @@ -851,8 +849,8 @@ async fn prepare_existing_nft_output_gift() -> Result<()> { .as_nft() .clone(); - let rent_structure = wallet.client().get_rent_structure().await?; - let minimum_storage_deposit = Output::Nft(nft.clone()).rent_cost(rent_structure); + let storage_score_params = wallet.client().get_storage_score_parameters().await?; + let minimum_storage_deposit = nft.minimum_amount(storage_score_params); assert_eq!(nft.amount(), minimum_storage_deposit); assert_eq!(nft.amount(), 52300); From 010d70a083ba98b6c3f5469c09d72a3a247b5586 Mon Sep 17 00:00:00 2001 From: Thibault Martinez Date: Wed, 15 Nov 2023 09:37:46 +0100 Subject: [PATCH 30/91] Remove verify_output_amount_packable (#1618) --- sdk/src/types/block/output/account.rs | 7 ++----- sdk/src/types/block/output/anchor.rs | 7 ++----- sdk/src/types/block/output/basic.rs | 7 +++---- sdk/src/types/block/output/delegation.rs | 5 ++--- sdk/src/types/block/output/foundry.rs | 7 ++----- sdk/src/types/block/output/mod.rs | 10 ---------- sdk/src/types/block/output/nft.rs | 7 ++----- 7 files changed, 13 insertions(+), 37 deletions(-) diff --git a/sdk/src/types/block/output/account.rs b/sdk/src/types/block/output/account.rs index 1a65c4f833..ddb2ec9501 100644 --- a/sdk/src/types/block/output/account.rs +++ b/sdk/src/types/block/output/account.rs @@ -16,9 +16,8 @@ use crate::types::block::{ output::{ feature::{verify_allowed_features, Feature, FeatureFlags, Features}, unlock_condition::{verify_allowed_unlock_conditions, UnlockCondition, UnlockConditionFlags, UnlockConditions}, - verify_output_amount_packable, ChainId, MinimumOutputAmount, NativeToken, NativeTokens, Output, - OutputBuilderAmount, OutputId, StateTransitionError, StateTransitionVerifier, StorageScore, - StorageScoreParameters, + ChainId, MinimumOutputAmount, NativeToken, NativeTokens, Output, OutputBuilderAmount, OutputId, + StateTransitionError, StateTransitionVerifier, StorageScore, StorageScoreParameters, }, payload::signed_transaction::TransactionCapabilityFlag, protocol::ProtocolParameters, @@ -555,8 +554,6 @@ impl Packable for AccountOutput { ) -> Result> { let amount = u64::unpack::<_, VERIFY>(unpacker, &()).coerce()?; - verify_output_amount_packable::(&amount, visitor).map_err(UnpackError::Packable)?; - let mana = u64::unpack::<_, VERIFY>(unpacker, &()).coerce()?; let native_tokens = NativeTokens::unpack::<_, VERIFY>(unpacker, &())?; diff --git a/sdk/src/types/block/output/anchor.rs b/sdk/src/types/block/output/anchor.rs index 3646ea4e32..60ae4bada5 100644 --- a/sdk/src/types/block/output/anchor.rs +++ b/sdk/src/types/block/output/anchor.rs @@ -18,9 +18,8 @@ use crate::types::block::{ output::{ feature::{verify_allowed_features, Feature, FeatureFlags, Features}, unlock_condition::{verify_allowed_unlock_conditions, UnlockCondition, UnlockConditionFlags, UnlockConditions}, - verify_output_amount_packable, ChainId, MinimumOutputAmount, NativeToken, NativeTokens, Output, - OutputBuilderAmount, OutputId, StateTransitionError, StateTransitionVerifier, StorageScore, - StorageScoreParameters, + ChainId, MinimumOutputAmount, NativeToken, NativeTokens, Output, OutputBuilderAmount, OutputId, + StateTransitionError, StateTransitionVerifier, StorageScore, StorageScoreParameters, }, payload::signed_transaction::TransactionCapabilityFlag, protocol::ProtocolParameters, @@ -622,8 +621,6 @@ impl Packable for AnchorOutput { ) -> Result> { let amount = u64::unpack::<_, VERIFY>(unpacker, &()).coerce()?; - verify_output_amount_packable::(&amount, visitor).map_err(UnpackError::Packable)?; - let mana = u64::unpack::<_, VERIFY>(unpacker, &()).coerce()?; let native_tokens = NativeTokens::unpack::<_, VERIFY>(unpacker, &())?; diff --git a/sdk/src/types/block/output/basic.rs b/sdk/src/types/block/output/basic.rs index 6290dbd9e4..4407b942d7 100644 --- a/sdk/src/types/block/output/basic.rs +++ b/sdk/src/types/block/output/basic.rs @@ -13,8 +13,8 @@ use crate::types::block::{ verify_allowed_unlock_conditions, AddressUnlockCondition, StorageDepositReturnUnlockCondition, UnlockCondition, UnlockConditionFlags, UnlockConditions, }, - verify_output_amount_packable, MinimumOutputAmount, NativeToken, NativeTokens, Output, OutputBuilderAmount, - OutputId, StorageScore, StorageScoreParameters, + MinimumOutputAmount, NativeToken, NativeTokens, Output, OutputBuilderAmount, OutputId, StorageScore, + StorageScoreParameters, }, protocol::ProtocolParameters, semantic::{SemanticValidationContext, TransactionFailureReason}, @@ -252,7 +252,6 @@ impl From<&BasicOutput> for BasicOutputBuilder { #[packable(unpack_visitor = ProtocolParameters)] pub struct BasicOutput { /// Amount of IOTA coins to deposit with this output. - #[packable(verify_with = verify_output_amount_packable)] amount: u64, /// Amount of stored Mana held by this output. mana: u64, @@ -261,8 +260,8 @@ pub struct BasicOutput { /// Define how the output can be unlocked in a transaction. #[packable(verify_with = verify_unlock_conditions_packable)] unlock_conditions: UnlockConditions, - #[packable(verify_with = verify_features_packable)] /// Features of the output. + #[packable(verify_with = verify_features_packable)] features: Features, } diff --git a/sdk/src/types/block/output/delegation.rs b/sdk/src/types/block/output/delegation.rs index ad3c765150..b4683aa063 100644 --- a/sdk/src/types/block/output/delegation.rs +++ b/sdk/src/types/block/output/delegation.rs @@ -10,8 +10,8 @@ use crate::types::block::{ output::{ chain_id::ChainId, unlock_condition::{verify_allowed_unlock_conditions, UnlockCondition, UnlockConditionFlags, UnlockConditions}, - verify_output_amount_packable, MinimumOutputAmount, Output, OutputBuilderAmount, OutputId, - StateTransitionError, StateTransitionVerifier, StorageScore, StorageScoreParameters, + MinimumOutputAmount, Output, OutputBuilderAmount, OutputId, StateTransitionError, StateTransitionVerifier, + StorageScore, StorageScoreParameters, }, protocol::ProtocolParameters, semantic::{SemanticValidationContext, TransactionFailureReason}, @@ -217,7 +217,6 @@ impl From<&DelegationOutput> for DelegationOutputBuilder { #[packable(unpack_visitor = ProtocolParameters)] pub struct DelegationOutput { /// Amount of IOTA coins to deposit with this output. - #[packable(verify_with = verify_output_amount_packable)] amount: u64, /// Amount of delegated IOTA coins. delegated_amount: u64, diff --git a/sdk/src/types/block/output/foundry.rs b/sdk/src/types/block/output/foundry.rs index da514eb580..cc4f9b59d9 100644 --- a/sdk/src/types/block/output/foundry.rs +++ b/sdk/src/types/block/output/foundry.rs @@ -18,9 +18,8 @@ use crate::types::block::{ account::AccountId, feature::{verify_allowed_features, Feature, FeatureFlags, Features}, unlock_condition::{verify_allowed_unlock_conditions, UnlockCondition, UnlockConditionFlags, UnlockConditions}, - verify_output_amount_packable, ChainId, MinimumOutputAmount, NativeToken, NativeTokens, Output, - OutputBuilderAmount, OutputId, StateTransitionError, StateTransitionVerifier, StorageScore, - StorageScoreParameters, TokenId, TokenScheme, + ChainId, MinimumOutputAmount, NativeToken, NativeTokens, Output, OutputBuilderAmount, OutputId, + StateTransitionError, StateTransitionVerifier, StorageScore, StorageScoreParameters, TokenId, TokenScheme, }, payload::signed_transaction::{TransactionCapabilities, TransactionCapabilityFlag}, protocol::ProtocolParameters, @@ -624,8 +623,6 @@ impl Packable for FoundryOutput { ) -> Result> { let amount = u64::unpack::<_, VERIFY>(unpacker, &()).coerce()?; - verify_output_amount_packable::(&amount, visitor).map_err(UnpackError::Packable)?; - let native_tokens = NativeTokens::unpack::<_, VERIFY>(unpacker, &())?; let serial_number = u32::unpack::<_, VERIFY>(unpacker, &()).coerce()?; let token_scheme = TokenScheme::unpack::<_, VERIFY>(unpacker, &())?; diff --git a/sdk/src/types/block/output/mod.rs b/sdk/src/types/block/output/mod.rs index a44416d268..53095f9ee5 100644 --- a/sdk/src/types/block/output/mod.rs +++ b/sdk/src/types/block/output/mod.rs @@ -460,16 +460,6 @@ pub(crate) fn verify_output_amount(amount: u64, token_supply: u64) -> Result<(), verify_output_amount_supply(amount, token_supply) } -pub(crate) fn verify_output_amount_packable( - amount: &u64, - protocol_parameters: &ProtocolParameters, -) -> Result<(), Error> { - if VERIFY { - verify_output_amount(*amount, protocol_parameters.token_supply())?; - } - Ok(()) -} - /// A trait that is shared by all output types, which is used to calculate the minimum amount the output /// must contain to satisfy its storage cost. pub trait MinimumOutputAmount: StorageScore { diff --git a/sdk/src/types/block/output/nft.rs b/sdk/src/types/block/output/nft.rs index 1a1656df4f..11b758d456 100644 --- a/sdk/src/types/block/output/nft.rs +++ b/sdk/src/types/block/output/nft.rs @@ -18,9 +18,8 @@ use crate::types::block::{ verify_allowed_unlock_conditions, AddressUnlockCondition, StorageDepositReturnUnlockCondition, UnlockCondition, UnlockConditionFlags, UnlockConditions, }, - verify_output_amount_packable, BasicOutputBuilder, ChainId, MinimumOutputAmount, NativeToken, NativeTokens, - Output, OutputBuilderAmount, OutputId, StateTransitionError, StateTransitionVerifier, StorageScore, - StorageScoreParameters, + BasicOutputBuilder, ChainId, MinimumOutputAmount, NativeToken, NativeTokens, Output, OutputBuilderAmount, + OutputId, StateTransitionError, StateTransitionVerifier, StorageScore, StorageScoreParameters, }, payload::signed_transaction::TransactionCapabilityFlag, protocol::ProtocolParameters, @@ -541,8 +540,6 @@ impl Packable for NftOutput { ) -> Result> { let amount = u64::unpack::<_, VERIFY>(unpacker, &()).coerce()?; - verify_output_amount_packable::(&amount, visitor).map_err(UnpackError::Packable)?; - let mana = u64::unpack::<_, VERIFY>(unpacker, &()).coerce()?; let native_tokens = NativeTokens::unpack::<_, VERIFY>(unpacker, &())?; From a557b9d07bcdbd32afed76b0729e768c7467edb4 Mon Sep 17 00:00:00 2001 From: Thibault Martinez Date: Thu, 16 Nov 2023 09:25:01 +0100 Subject: [PATCH 31/91] Add genesis_slot to ProtocolParameters (#1625) --- sdk/src/types/block/protocol.rs | 3 +++ 1 file changed, 3 insertions(+) diff --git a/sdk/src/types/block/protocol.rs b/sdk/src/types/block/protocol.rs index ffefe16550..4577a31b94 100644 --- a/sdk/src/types/block/protocol.rs +++ b/sdk/src/types/block/protocol.rs @@ -52,6 +52,8 @@ pub struct ProtocolParameters { /// TokenSupply defines the current token supply on the network. #[cfg_attr(feature = "serde", serde(with = "crate::utils::serde::string"))] pub(crate) token_supply: u64, + /// Defines the slot of the genesis. + pub(crate) genesis_slot: u32, /// Genesis timestamp at which the slots start to count. #[cfg_attr(feature = "serde", serde(with = "crate::utils::serde::string"))] pub(crate) genesis_unix_timestamp: u64, @@ -106,6 +108,7 @@ impl Default for ProtocolParameters { storage_score_parameters: Default::default(), work_score_parameters: Default::default(), token_supply: 1_813_620_509_061_365, + genesis_slot: 0, genesis_unix_timestamp: 1582328545, slot_duration_in_seconds: 10, epoch_nearing_threshold: 20, From 1a2af398c6f9bcaa4064aee58b804021424f8b1c Mon Sep 17 00:00:00 2001 From: Thibault Martinez Date: Thu, 16 Nov 2023 09:25:31 +0100 Subject: [PATCH 32/91] Harmonize macro usage (#1623) --- sdk/src/types/api/plugins/participation/types.rs | 4 ++-- sdk/src/types/block/macro.rs | 2 -- sdk/src/types/block/output/feature/mod.rs | 3 +-- sdk/src/types/block/output/unlock_condition/mod.rs | 3 +-- 4 files changed, 4 insertions(+), 8 deletions(-) diff --git a/sdk/src/types/api/plugins/participation/types.rs b/sdk/src/types/api/plugins/participation/types.rs index 88c9f35a84..cfab17c7c3 100644 --- a/sdk/src/types/api/plugins/participation/types.rs +++ b/sdk/src/types/api/plugins/participation/types.rs @@ -12,7 +12,7 @@ use getset::Getters; use hashbrown::HashMap; use packable::PackableExt; -use crate::types::{api::plugins::participation::error::Error, block::impl_id}; +use crate::types::api::plugins::participation::error::Error; /// Participation tag. pub const PARTICIPATION_TAG: &str = "PARTICIPATE"; @@ -51,7 +51,7 @@ pub struct ParticipationEvent { pub data: ParticipationEventData, } -impl_id!( +crate::impl_id!( /// A participation event id. pub ParticipationEventId { pub const LENGTH: usize = 32; diff --git a/sdk/src/types/block/macro.rs b/sdk/src/types/block/macro.rs index b7a5b6695a..74b74a6ec8 100644 --- a/sdk/src/types/block/macro.rs +++ b/sdk/src/types/block/macro.rs @@ -229,7 +229,6 @@ macro_rules! impl_id { )? }; } -pub(crate) use impl_id; /// Convenience macro to serialize types to string via serde. #[cfg(feature = "serde")] @@ -297,7 +296,6 @@ macro_rules! create_bitflags { } }; } -pub(crate) use create_bitflags; #[macro_export] macro_rules! impl_serde_typed_dto { diff --git a/sdk/src/types/block/output/feature/mod.rs b/sdk/src/types/block/output/feature/mod.rs index e3d0e49982..ef936e372b 100644 --- a/sdk/src/types/block/output/feature/mod.rs +++ b/sdk/src/types/block/output/feature/mod.rs @@ -29,7 +29,6 @@ pub use self::{ tag::TagFeature, }; use crate::types::block::{ - create_bitflags, output::{StorageScore, StorageScoreParameters}, Error, }; @@ -126,7 +125,7 @@ impl Feature { crate::def_is_as_opt!(Feature: Sender, Issuer, Metadata, Tag, BlockIssuer, Staking); } -create_bitflags!( +crate::create_bitflags!( /// A bitflags-based representation of the set of active [`Feature`]s. pub FeatureFlags, u16, diff --git a/sdk/src/types/block/output/unlock_condition/mod.rs b/sdk/src/types/block/output/unlock_condition/mod.rs index 6a6c9688f2..030fd5be67 100644 --- a/sdk/src/types/block/output/unlock_condition/mod.rs +++ b/sdk/src/types/block/output/unlock_condition/mod.rs @@ -32,7 +32,6 @@ pub use self::{ }; use crate::types::block::{ address::Address, - create_bitflags, output::{StorageScore, StorageScoreParameters}, protocol::ProtocolParameters, slot::SlotIndex, @@ -135,7 +134,7 @@ impl UnlockCondition { ); } -create_bitflags!( +crate::create_bitflags!( /// A bitflags-based representation of the set of active [`UnlockCondition`]s. pub UnlockConditionFlags, u16, From 967b45f8de2a0dfb01f83da5489c4bd2d9696279 Mon Sep 17 00:00:00 2001 From: Thibault Martinez Date: Thu, 16 Nov 2023 09:26:49 +0100 Subject: [PATCH 33/91] Fix private tangle action (#1617) --- .github/actions/private-tangle/setup/action.yml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/actions/private-tangle/setup/action.yml b/.github/actions/private-tangle/setup/action.yml index 31d5797112..f0b7c4b08d 100644 --- a/.github/actions/private-tangle/setup/action.yml +++ b/.github/actions/private-tangle/setup/action.yml @@ -18,13 +18,13 @@ runs: # remove the last 5 lines and add docker compose with `-d` to run it in the background sed -i -n -e :a -e '1,5!{P;N;D;};N;ba' run.sh - echo "docker compose -f \$DOCKER_COMPOSE_FILE up -d" >> run.sh + echo "docker compose -f docker-compose.yml up -d" >> run.sh working-directory: iota-core/tools/docker-network # Copied from https://github.com/iotaledger/iota-core/blob/926bf11b5fb6dc46b25482770e0ccf1e048b97c9/.github/workflows/unit-test.yml#L16-L19 - uses: actions/setup-go@v4 with: - go-version-file: 'iota-core/go.mod' + go-version-file: "iota-core/go.mod" cache: false - name: Setup private tangle @@ -40,5 +40,5 @@ runs: run: wget -qO- https://raw.githubusercontent.com/eficode/wait-for/v2.2.4/wait-for | sh -s -- -t 120 http://localhost:8080/health -- echo "Tangle is up" # TODO enable, maybe need another URL # - name: Wait for faucet to start - # shell: bash - # run: wget -qO- https://raw.githubusercontent.com/eficode/wait-for/v2.2.4/wait-for | sh -s -- -t 120 http://localhost:8081/api/info -- echo "Faucet is up" + # shell: bash + # run: wget -qO- https://raw.githubusercontent.com/eficode/wait-for/v2.2.4/wait-for | sh -s -- -t 120 http://localhost:8081/api/info -- echo "Faucet is up" From cb1568a14dc9b7a51859fc02788034218756df72 Mon Sep 17 00:00:00 2001 From: Thibault Martinez Date: Thu, 16 Nov 2023 09:33:09 +0100 Subject: [PATCH 34/91] Remove sender from anchor allowed features (#1624) --- sdk/src/types/block/output/anchor.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sdk/src/types/block/output/anchor.rs b/sdk/src/types/block/output/anchor.rs index 60ae4bada5..a59ab43c4c 100644 --- a/sdk/src/types/block/output/anchor.rs +++ b/sdk/src/types/block/output/anchor.rs @@ -364,7 +364,7 @@ impl AnchorOutput { pub const ALLOWED_UNLOCK_CONDITIONS: UnlockConditionFlags = UnlockConditionFlags::STATE_CONTROLLER_ADDRESS.union(UnlockConditionFlags::GOVERNOR_ADDRESS); /// The set of allowed [`Feature`]s for an [`AnchorOutput`]. - pub const ALLOWED_FEATURES: FeatureFlags = FeatureFlags::SENDER.union(FeatureFlags::METADATA); + pub const ALLOWED_FEATURES: FeatureFlags = FeatureFlags::METADATA; /// The set of allowed immutable [`Feature`]s for an [`AnchorOutput`]. pub const ALLOWED_IMMUTABLE_FEATURES: FeatureFlags = FeatureFlags::ISSUER.union(FeatureFlags::METADATA); From bf705a0c603cad132bf608bcc1bbb898e0bbcee7 Mon Sep 17 00:00:00 2001 From: Thibault Martinez Date: Thu, 16 Nov 2023 11:14:50 +0100 Subject: [PATCH 35/91] Remove SDRUC supply check (#1619) * Remove SDRUC supply check * Remove commented code * Remove some try_from_dto_with_params * Nit * sad clippy noises --- bindings/core/src/method_handler/client.rs | 6 +- bindings/core/src/method_handler/utils.rs | 4 +- bindings/core/src/method_handler/wallet.rs | 14 ++-- .../client/output/build_basic_output.rs | 16 +---- .../how_tos/outputs/unlock_conditions.rs | 7 +- sdk/src/client/api/types.rs | 18 +++-- sdk/src/client/node_api/core/routes.rs | 7 +- sdk/src/client/secret/types.rs | 12 ++-- sdk/src/types/block/output/account.rs | 43 +++++------- sdk/src/types/block/output/anchor.rs | 45 +++++------- sdk/src/types/block/output/basic.rs | 52 +++++--------- sdk/src/types/block/output/delegation.rs | 25 +++---- sdk/src/types/block/output/foundry.rs | 50 ++++++-------- sdk/src/types/block/output/mod.rs | 32 +++------ sdk/src/types/block/output/nft.rs | 52 +++++--------- .../block/output/unlock_condition/mod.rs | 21 ++---- .../storage_deposit_return.rs | 69 +++++-------------- .../payload/signed_transaction/transaction.rs | 2 +- sdk/src/wallet/core/mod.rs | 6 +- .../operations/transaction/high_level/send.rs | 3 +- .../high_level/send_native_tokens.rs | 3 +- .../operations/transaction/prepare_output.rs | 10 +-- sdk/src/wallet/types/mod.rs | 10 +-- sdk/tests/client/input_signing_data.rs | 24 +++---- sdk/tests/client/mod.rs | 7 +- 25 files changed, 178 insertions(+), 360 deletions(-) diff --git a/bindings/core/src/method_handler/client.rs b/bindings/core/src/method_handler/client.rs index e1be21057c..22bb79bb2f 100644 --- a/bindings/core/src/method_handler/client.rs +++ b/bindings/core/src/method_handler/client.rs @@ -79,7 +79,6 @@ pub(crate) async fn call_client_method_internal(client: &Client, method: ClientM unlock_conditions, features, immutable_features, - client.get_token_supply().await?, )?); Response::Output(OutputDto::from(&output)) @@ -101,7 +100,6 @@ pub(crate) async fn call_client_method_internal(client: &Client, method: ClientM native_tokens, unlock_conditions, features, - client.get_token_supply().await?, )?); Response::Output(OutputDto::from(&output)) @@ -127,7 +125,6 @@ pub(crate) async fn call_client_method_internal(client: &Client, method: ClientM unlock_conditions, features, immutable_features, - client.get_token_supply().await?, )?); Response::Output(OutputDto::from(&output)) @@ -153,7 +150,6 @@ pub(crate) async fn call_client_method_internal(client: &Client, method: ClientM unlock_conditions, features, immutable_features, - client.get_token_supply().await?, )?); Response::Output(OutputDto::from(&output)) @@ -296,7 +292,7 @@ pub(crate) async fn call_client_method_internal(client: &Client, method: ClientM Response::Bech32Address(client.hex_public_key_to_bech32_address(&hex, bech32_hrp).await?) } ClientMethod::ComputeMinimumOutputAmount { output } => { - let output = Output::try_from_dto_with_params(output, client.get_token_supply().await?)?; + let output = Output::try_from(output)?; let storage_score_params = client.get_storage_score_parameters().await?; Response::OutputAmount(output.minimum_amount(storage_score_params)) diff --git a/bindings/core/src/method_handler/utils.rs b/bindings/core/src/method_handler/utils.rs index ae1d3f8131..89a25e8424 100644 --- a/bindings/core/src/method_handler/utils.rs +++ b/bindings/core/src/method_handler/utils.rs @@ -76,7 +76,7 @@ pub(crate) fn call_utils_method_internal(method: UtilsMethod) -> Result { - let out = Output::try_from_dto(output)?; + let out = Output::try_from(output)?; Response::OutputAmount(out.minimum_amount(storage_params)) } UtilsMethod::VerifyMnemonic { mnemonic } => { @@ -105,7 +105,7 @@ pub(crate) fn call_utils_method_internal(method: UtilsMethod) -> Result Response::Input(UtxoInput::from(output_id)), UtilsMethod::ComputeSlotCommitmentId { slot_commitment } => Response::SlotCommitmentId(slot_commitment.id()), UtilsMethod::OutputHexBytes { output } => { - let output = Output::try_from_dto(output)?; + let output = Output::try_from(output)?; Response::HexBytes(prefix_hex::encode(output.pack_to_vec())) } }; diff --git a/bindings/core/src/method_handler/wallet.rs b/bindings/core/src/method_handler/wallet.rs index ee8102677d..6825dc72e0 100644 --- a/bindings/core/src/method_handler/wallet.rs +++ b/bindings/core/src/method_handler/wallet.rs @@ -17,10 +17,10 @@ use iota_sdk::{ wallet::{types::TransactionWithMetadataDto, OutputDataDto, PreparedCreateNativeTokenTransactionDto, Wallet}, }; -use crate::{method::WalletMethod, response::Response, Result}; +use crate::{method::WalletMethod, response::Response}; /// Call a wallet method. -pub(crate) async fn call_wallet_method_internal(wallet: &Wallet, method: WalletMethod) -> Result { +pub(crate) async fn call_wallet_method_internal(wallet: &Wallet, method: WalletMethod) -> crate::Result { let response = match method { WalletMethod::Accounts => { let accounts = wallet.accounts().await; @@ -297,13 +297,12 @@ pub(crate) async fn call_wallet_method_internal(wallet: &Wallet, method: WalletM Response::PreparedTransaction(PreparedTransactionDataDto::from(&data)) } WalletMethod::PrepareTransaction { outputs, options } => { - let token_supply = wallet.client().get_token_supply().await?; let data = wallet .prepare_transaction( outputs .into_iter() - .map(|o| Ok(Output::try_from_dto_with_params(o, token_supply)?)) - .collect::>>()?, + .map(Output::try_from) + .collect::, _>>()?, options, ) .await?; @@ -342,13 +341,12 @@ pub(crate) async fn call_wallet_method_internal(wallet: &Wallet, method: WalletM Response::SentTransaction(TransactionWithMetadataDto::from(&transaction)) } WalletMethod::SendOutputs { outputs, options } => { - let token_supply = wallet.client().get_token_supply().await?; let transaction = wallet .send_outputs( outputs .into_iter() - .map(|o| Ok(Output::try_from_dto_with_params(o, token_supply)?)) - .collect::>>()?, + .map(Output::try_from) + .collect::, _>>()?, options, ) .await?; diff --git a/sdk/examples/client/output/build_basic_output.rs b/sdk/examples/client/output/build_basic_output.rs index 5f92114e56..c7ef6391ac 100644 --- a/sdk/examples/client/output/build_basic_output.rs +++ b/sdk/examples/client/output/build_basic_output.rs @@ -9,7 +9,7 @@ //! ``` use iota_sdk::{ - client::{Client, Result}, + client::Result, types::block::{ address::Address, output::{ @@ -30,14 +30,6 @@ async fn main() -> Result<()> { // This example uses secrets in environment variables for simplicity which should not be done in production. dotenvy::dotenv().ok(); - // Create a node client. - let client = Client::builder() - .with_node(&std::env::var("NODE_URL").unwrap())? - .finish() - .await?; - - let token_supply = client.get_token_supply().await?; - let address = std::env::args() .nth(1) .unwrap_or("rms1qpllaj0pyveqfkwxmnngz2c488hfdtmfrj3wfkgxtk4gtyrax0jaxzt70zy".to_string()); @@ -57,11 +49,7 @@ async fn main() -> Result<()> { // with storage deposit return basic_output_builder .clone() - .add_unlock_condition(StorageDepositReturnUnlockCondition::new( - address.clone(), - 1_000_000, - token_supply, - )?) + .add_unlock_condition(StorageDepositReturnUnlockCondition::new(address.clone(), 1_000_000)) .finish_output()?, // with expiration basic_output_builder diff --git a/sdk/examples/how_tos/outputs/unlock_conditions.rs b/sdk/examples/how_tos/outputs/unlock_conditions.rs index e926e9fde8..94cb8ce779 100644 --- a/sdk/examples/how_tos/outputs/unlock_conditions.rs +++ b/sdk/examples/how_tos/outputs/unlock_conditions.rs @@ -33,7 +33,6 @@ async fn main() -> Result<()> { // Create a client instance. let client = Client::builder().with_node(&node_url)?.finish().await?; - let token_supply = client.get_token_supply().await?; let storage_score_params = client.get_storage_score_parameters().await?; let address = Address::try_from_bech32("rms1qpllaj0pyveqfkwxmnngz2c488hfdtmfrj3wfkgxtk4gtyrax0jaxzt70zy")?; @@ -51,11 +50,7 @@ async fn main() -> Result<()> { // with storage deposit return unlock condition basic_output_builder .clone() - .add_unlock_condition(StorageDepositReturnUnlockCondition::new( - address.clone(), - 1000000, - token_supply, - )?) + .add_unlock_condition(StorageDepositReturnUnlockCondition::new(address.clone(), 1000000)) .finish_output()?, // with timeout unlock condition basic_output_builder diff --git a/sdk/src/client/api/types.rs b/sdk/src/client/api/types.rs index 3e73780289..c81dc1b691 100644 --- a/sdk/src/client/api/types.rs +++ b/sdk/src/client/api/types.rs @@ -68,14 +68,13 @@ impl TryFromDto for PreparedTransactionData { inputs_data: dto .inputs_data .into_iter() - .map(|i| InputSigningData::try_from_dto_with_params(i, ¶ms)) + .map(|i| InputSigningData::try_from(i)) .collect::>>() .map_err(|_| Error::InvalidField("input_data"))?, remainder: match dto.remainder { - Some(remainder) => Some( - RemainderData::try_from_dto_with_params(remainder, ¶ms) - .map_err(|_| Error::InvalidField("remainder"))?, - ), + Some(remainder) => { + Some(RemainderData::try_from(remainder).map_err(|_| Error::InvalidField("remainder"))?) + } None => None, }, }) @@ -121,7 +120,7 @@ impl TryFromDto for SignedTransactionData { inputs_data: dto .inputs_data .into_iter() - .map(|i| InputSigningData::try_from_dto_with_params(i, ¶ms)) + .map(|i| InputSigningData::try_from(i)) .collect::>>() .map_err(|_| Error::InvalidField("inputs_data"))?, }) @@ -151,13 +150,12 @@ pub struct RemainderDataDto { pub address: Address, } -impl TryFromDto for RemainderData { - type Dto = RemainderDataDto; +impl TryFrom for RemainderData { type Error = Error; - fn try_from_dto_with_params_inner(dto: Self::Dto, params: ValidationParams<'_>) -> Result { + fn try_from(dto: RemainderDataDto) -> Result { Ok(Self { - output: Output::try_from_dto_with_params_inner(dto.output, params)?, + output: Output::try_from(dto.output)?, chain: dto.chain, address: dto.address, }) diff --git a/sdk/src/client/node_api/core/routes.rs b/sdk/src/client/node_api/core/routes.rs index 05379506ab..191ec80130 100644 --- a/sdk/src/client/node_api/core/routes.rs +++ b/sdk/src/client/node_api/core/routes.rs @@ -226,10 +226,9 @@ impl ClientInner { pub async fn get_output(&self, output_id: &OutputId) -> Result { let path = &format!("api/core/v3/outputs/{output_id}"); - let output = self.get_request::(path, None, false, true).await?; - let token_supply = self.get_token_supply().await?; - - Ok(Output::try_from_dto_with_params(output, token_supply)?) + Ok(Output::try_from( + self.get_request::(path, None, false, true).await?, + )?) } /// Finds an output by its ID and returns it as raw bytes. diff --git a/sdk/src/client/secret/types.rs b/sdk/src/client/secret/types.rs index 62cc0e5bac..352869b3ab 100644 --- a/sdk/src/client/secret/types.rs +++ b/sdk/src/client/secret/types.rs @@ -7,10 +7,7 @@ use crypto::keys::bip44::Bip44; use serde::{Deserialize, Serialize}; use crate::{ - types::{ - block::output::{dto::OutputDto, Output, OutputId, OutputMetadata}, - TryFromDto, ValidationParams, - }, + types::block::output::{dto::OutputDto, Output, OutputId, OutputMetadata}, utils::serde::bip44::option_bip44, }; @@ -167,13 +164,12 @@ pub struct InputSigningDataDto { pub chain: Option, } -impl TryFromDto for InputSigningData { - type Dto = InputSigningDataDto; +impl TryFrom for InputSigningData { type Error = crate::client::Error; - fn try_from_dto_with_params_inner(dto: Self::Dto, params: ValidationParams<'_>) -> Result { + fn try_from(dto: InputSigningDataDto) -> Result { Ok(Self { - output: Output::try_from_dto_with_params_inner(dto.output, params)?, + output: Output::try_from(dto.output)?, output_metadata: dto.output_metadata, chain: dto.chain, }) diff --git a/sdk/src/types/block/output/account.rs b/sdk/src/types/block/output/account.rs index ddb2ec9501..e6b8e8faa0 100644 --- a/sdk/src/types/block/output/account.rs +++ b/sdk/src/types/block/output/account.rs @@ -628,10 +628,7 @@ pub(crate) mod dto { use super::*; use crate::{ - types::{ - block::{output::unlock_condition::dto::UnlockConditionDto, Error}, - TryFromDto, ValidationParams, - }, + types::block::{output::unlock_condition::dto::UnlockConditionDto, Error}, utils::serde::string, }; @@ -672,11 +669,10 @@ pub(crate) mod dto { } } - impl TryFromDto for AccountOutput { - type Dto = AccountOutputDto; + impl TryFrom for AccountOutput { type Error = Error; - fn try_from_dto_with_params_inner(dto: Self::Dto, params: ValidationParams<'_>) -> Result { + fn try_from(dto: AccountOutputDto) -> Result { let mut builder = AccountOutputBuilder::new_with_amount(dto.amount, dto.account_id) .with_mana(dto.mana) .with_foundry_counter(dto.foundry_counter) @@ -685,7 +681,7 @@ pub(crate) mod dto { .with_immutable_features(dto.immutable_features); for u in dto.unlock_conditions { - builder = builder.add_unlock_condition(UnlockCondition::try_from_dto_with_params(u, ¶ms)?); + builder = builder.add_unlock_condition(UnlockCondition::from(u)); } builder.finish() @@ -703,9 +699,7 @@ pub(crate) mod dto { unlock_conditions: Vec, features: Option>, immutable_features: Option>, - params: impl Into> + Send, ) -> Result { - let params = params.into(); let mut builder = match amount { OutputBuilderAmount::Amount(amount) => AccountOutputBuilder::new_with_amount(amount, *account_id), OutputBuilderAmount::MinimumAmount(params) => { @@ -724,8 +718,8 @@ pub(crate) mod dto { let unlock_conditions = unlock_conditions .into_iter() - .map(|u| UnlockCondition::try_from_dto_with_params(u, ¶ms)) - .collect::, Error>>()?; + .map(UnlockCondition::from) + .collect::>(); builder = builder.with_unlock_conditions(unlock_conditions); if let Some(features) = features { @@ -746,19 +740,16 @@ mod tests { use pretty_assertions::assert_eq; use super::*; - use crate::types::{ - block::{ - output::{dto::OutputDto, FoundryId, SimpleTokenScheme, TokenId}, - protocol::protocol_parameters, - rand::{ - address::rand_account_address, - output::{ - feature::rand_allowed_features, rand_account_id, rand_account_output, - unlock_condition::rand_address_unlock_condition_different_from_account_id, - }, + use crate::types::block::{ + output::{dto::OutputDto, FoundryId, SimpleTokenScheme, TokenId}, + protocol::protocol_parameters, + rand::{ + address::rand_account_address, + output::{ + feature::rand_allowed_features, rand_account_id, rand_account_output, + unlock_condition::rand_address_unlock_condition_different_from_account_id, }, }, - TryFromDto, }; #[test] @@ -766,9 +757,9 @@ mod tests { let protocol_parameters = protocol_parameters(); let output = rand_account_output(protocol_parameters.token_supply()); let dto = OutputDto::Account((&output).into()); - let output_unver = Output::try_from_dto(dto.clone()).unwrap(); + let output_unver = Output::try_from(dto.clone()).unwrap(); assert_eq!(&output, output_unver.as_account()); - let output_ver = Output::try_from_dto_with_params(dto, &protocol_parameters).unwrap(); + let output_ver = Output::try_from(dto).unwrap(); assert_eq!(&output, output_ver.as_account()); let output_split = AccountOutput::try_from_dtos( @@ -780,7 +771,6 @@ mod tests { output.unlock_conditions().iter().map(Into::into).collect(), Some(output.features().to_vec()), Some(output.immutable_features().to_vec()), - &protocol_parameters, ) .unwrap(); assert_eq!(output, output_split); @@ -799,7 +789,6 @@ mod tests { builder.unlock_conditions.iter().map(Into::into).collect(), Some(builder.features.iter().cloned().collect()), Some(builder.immutable_features.iter().cloned().collect()), - &protocol_parameters, ) .unwrap(); assert_eq!(builder.finish().unwrap(), output_split); diff --git a/sdk/src/types/block/output/anchor.rs b/sdk/src/types/block/output/anchor.rs index a59ab43c4c..c21c77b149 100644 --- a/sdk/src/types/block/output/anchor.rs +++ b/sdk/src/types/block/output/anchor.rs @@ -707,10 +707,7 @@ pub(crate) mod dto { use super::*; use crate::{ - types::{ - block::{output::unlock_condition::dto::UnlockConditionDto, Error}, - TryFromDto, ValidationParams, - }, + types::block::{output::unlock_condition::dto::UnlockConditionDto, Error}, utils::serde::{prefix_hex_bytes, string}, }; @@ -754,11 +751,10 @@ pub(crate) mod dto { } } - impl TryFromDto for AnchorOutput { - type Dto = AnchorOutputDto; + impl TryFrom for AnchorOutput { type Error = Error; - fn try_from_dto_with_params_inner(dto: Self::Dto, params: ValidationParams<'_>) -> Result { + fn try_from(dto: AnchorOutputDto) -> Result { let mut builder = AnchorOutputBuilder::new_with_amount(dto.amount, dto.anchor_id) .with_mana(dto.mana) .with_state_index(dto.state_index) @@ -768,7 +764,7 @@ pub(crate) mod dto { .with_state_metadata(dto.state_metadata); for u in dto.unlock_conditions { - builder = builder.add_unlock_condition(UnlockCondition::try_from_dto_with_params(u, ¶ms)?); + builder = builder.add_unlock_condition(UnlockCondition::from(u)); } builder.finish() @@ -787,9 +783,7 @@ pub(crate) mod dto { unlock_conditions: Vec, features: Option>, immutable_features: Option>, - params: impl Into> + Send, ) -> Result { - let params = params.into(); let mut builder = match amount { OutputBuilderAmount::Amount(amount) => AnchorOutputBuilder::new_with_amount(amount, *anchor_id), OutputBuilderAmount::MinimumAmount(params) => { @@ -809,8 +803,8 @@ pub(crate) mod dto { let unlock_conditions = unlock_conditions .into_iter() - .map(|u| UnlockCondition::try_from_dto_with_params(u, ¶ms)) - .collect::, Error>>()?; + .map(UnlockCondition::from) + .collect::>(); builder = builder.with_unlock_conditions(unlock_conditions); if let Some(features) = features { @@ -829,20 +823,17 @@ pub(crate) mod dto { #[cfg(test)] mod tests { use super::*; - use crate::types::{ - block::{ - output::dto::OutputDto, - protocol::protocol_parameters, - rand::output::{ - feature::rand_allowed_features, - rand_anchor_id, rand_anchor_output, - unlock_condition::{ - rand_governor_address_unlock_condition_different_from, - rand_state_controller_address_unlock_condition_different_from, - }, + use crate::types::block::{ + output::dto::OutputDto, + protocol::protocol_parameters, + rand::output::{ + feature::rand_allowed_features, + rand_anchor_id, rand_anchor_output, + unlock_condition::{ + rand_governor_address_unlock_condition_different_from, + rand_state_controller_address_unlock_condition_different_from, }, }, - TryFromDto, }; #[test] @@ -850,9 +841,9 @@ mod tests { let protocol_parameters = protocol_parameters(); let output = rand_anchor_output(protocol_parameters.token_supply()); let dto = OutputDto::Anchor((&output).into()); - let output_unver = Output::try_from_dto(dto.clone()).unwrap(); + let output_unver = Output::try_from(dto.clone()).unwrap(); assert_eq!(&output, output_unver.as_anchor()); - let output_ver = Output::try_from_dto_with_params(dto, &protocol_parameters).unwrap(); + let output_ver = Output::try_from(dto).unwrap(); assert_eq!(&output, output_ver.as_anchor()); let output_split = AnchorOutput::try_from_dtos( @@ -865,7 +856,6 @@ mod tests { output.unlock_conditions().iter().map(Into::into).collect(), Some(output.features().to_vec()), Some(output.immutable_features().to_vec()), - &protocol_parameters, ) .unwrap(); assert_eq!(output, output_split); @@ -885,7 +875,6 @@ mod tests { builder.unlock_conditions.iter().map(Into::into).collect(), Some(builder.features.iter().cloned().collect()), Some(builder.immutable_features.iter().cloned().collect()), - &protocol_parameters, ) .unwrap(); assert_eq!(builder.finish().unwrap(), output_split); diff --git a/sdk/src/types/block/output/basic.rs b/sdk/src/types/block/output/basic.rs index 4407b942d7..ecc803410f 100644 --- a/sdk/src/types/block/output/basic.rs +++ b/sdk/src/types/block/output/basic.rs @@ -156,7 +156,6 @@ impl BasicOutputBuilder { mut self, return_address: impl Into
, params: StorageScoreParameters, - token_supply: u64, ) -> Result { Ok(match self.amount { OutputBuilderAmount::Amount(amount) => { @@ -171,11 +170,8 @@ impl BasicOutputBuilder { .finish()? .amount(); // Add a temporary storage deposit unlock condition so the new storage requirement can be calculated - self = self.add_unlock_condition(StorageDepositReturnUnlockCondition::new( - return_address.clone(), - 1, - token_supply, - )?); + self = + self.add_unlock_condition(StorageDepositReturnUnlockCondition::new(return_address.clone(), 1)); // Get the min amount of the output with the added storage deposit return unlock condition let min_amount_with_sdruc = self.clone().finish()?.minimum_amount(params); // If the return storage cost and amount are less than the required min @@ -192,8 +188,7 @@ impl BasicOutputBuilder { .replace_unlock_condition(StorageDepositReturnUnlockCondition::new( return_address, sdruc_amount, - token_supply, - )?) + )) } else { self } @@ -428,10 +423,7 @@ pub(crate) mod dto { use super::*; use crate::{ - types::{ - block::{output::unlock_condition::dto::UnlockConditionDto, Error}, - TryFromDto, ValidationParams, - }, + types::block::{output::unlock_condition::dto::UnlockConditionDto, Error}, utils::serde::string, }; @@ -464,18 +456,17 @@ pub(crate) mod dto { } } - impl TryFromDto for BasicOutput { - type Dto = BasicOutputDto; + impl TryFrom for BasicOutput { type Error = Error; - fn try_from_dto_with_params_inner(dto: Self::Dto, params: ValidationParams<'_>) -> Result { + fn try_from(dto: BasicOutputDto) -> Result { let mut builder = BasicOutputBuilder::new_with_amount(dto.amount) .with_native_tokens(dto.native_tokens) .with_mana(dto.mana) .with_features(dto.features); for u in dto.unlock_conditions { - builder = builder.add_unlock_condition(UnlockCondition::try_from_dto_with_params(u, ¶ms)?); + builder = builder.add_unlock_condition(UnlockCondition::from(u)); } builder.finish() @@ -489,9 +480,7 @@ pub(crate) mod dto { native_tokens: Option>, unlock_conditions: Vec, features: Option>, - params: impl Into> + Send, ) -> Result { - let params = params.into(); let mut builder = match amount { OutputBuilderAmount::Amount(amount) => BasicOutputBuilder::new_with_amount(amount), OutputBuilderAmount::MinimumAmount(params) => BasicOutputBuilder::new_with_minimum_amount(params), @@ -504,8 +493,8 @@ pub(crate) mod dto { let unlock_conditions = unlock_conditions .into_iter() - .map(|u| UnlockCondition::try_from_dto_with_params(u, ¶ms)) - .collect::, Error>>()?; + .map(UnlockCondition::from) + .collect::>(); builder = builder.with_unlock_conditions(unlock_conditions); if let Some(features) = features { @@ -522,18 +511,15 @@ mod tests { use pretty_assertions::assert_eq; use super::*; - use crate::types::{ - block::{ - output::{dto::OutputDto, FoundryId, SimpleTokenScheme, TokenId}, - protocol::protocol_parameters, - rand::{ - address::rand_account_address, - output::{ - feature::rand_allowed_features, rand_basic_output, unlock_condition::rand_address_unlock_condition, - }, + use crate::types::block::{ + output::{dto::OutputDto, FoundryId, SimpleTokenScheme, TokenId}, + protocol::protocol_parameters, + rand::{ + address::rand_account_address, + output::{ + feature::rand_allowed_features, rand_basic_output, unlock_condition::rand_address_unlock_condition, }, }, - TryFromDto, }; #[test] @@ -541,9 +527,9 @@ mod tests { let protocol_parameters = protocol_parameters(); let output = rand_basic_output(protocol_parameters.token_supply()); let dto = OutputDto::Basic((&output).into()); - let output_unver = Output::try_from_dto(dto.clone()).unwrap(); + let output_unver = Output::try_from(dto.clone()).unwrap(); assert_eq!(&output, output_unver.as_basic()); - let output_ver = Output::try_from_dto_with_params(dto, &protocol_parameters).unwrap(); + let output_ver = Output::try_from(dto).unwrap(); assert_eq!(&output, output_ver.as_basic()); let output_split = BasicOutput::try_from_dtos( @@ -552,7 +538,6 @@ mod tests { Some(output.native_tokens().to_vec()), output.unlock_conditions().iter().map(Into::into).collect(), Some(output.features().to_vec()), - protocol_parameters.token_supply(), ) .unwrap(); assert_eq!(output, output_split); @@ -567,7 +552,6 @@ mod tests { Some(builder.native_tokens.iter().copied().collect()), builder.unlock_conditions.iter().map(Into::into).collect(), Some(builder.features.iter().cloned().collect()), - protocol_parameters.token_supply(), ) .unwrap(); assert_eq!(builder.finish().unwrap(), output_split); diff --git a/sdk/src/types/block/output/delegation.rs b/sdk/src/types/block/output/delegation.rs index b4683aa063..b1b3049cb3 100644 --- a/sdk/src/types/block/output/delegation.rs +++ b/sdk/src/types/block/output/delegation.rs @@ -434,12 +434,9 @@ pub(crate) mod dto { use super::*; use crate::{ - types::{ - block::{ - output::{unlock_condition::dto::UnlockConditionDto, OutputBuilderAmount}, - Error, - }, - TryFromDto, ValidationParams, + types::block::{ + output::{unlock_condition::dto::UnlockConditionDto, OutputBuilderAmount}, + Error, }, utils::serde::string, }; @@ -475,14 +472,10 @@ pub(crate) mod dto { } } - impl TryFromDto for DelegationOutput { - type Dto = DelegationOutputDto; + impl TryFrom for DelegationOutput { type Error = Error; - fn try_from_dto_with_params_inner( - dto: Self::Dto, - params: crate::types::ValidationParams<'_>, - ) -> Result { + fn try_from(dto: DelegationOutputDto) -> Result { let mut builder = DelegationOutputBuilder::new_with_amount( dto.amount, dto.delegated_amount, @@ -493,7 +486,7 @@ pub(crate) mod dto { .with_end_epoch(dto.end_epoch); for u in dto.unlock_conditions { - builder = builder.add_unlock_condition(UnlockCondition::try_from_dto_with_params(u, ¶ms)?); + builder = builder.add_unlock_condition(UnlockCondition::from(u)); } builder.finish() @@ -510,9 +503,7 @@ pub(crate) mod dto { start_epoch: impl Into, end_epoch: impl Into, unlock_conditions: Vec, - params: impl Into> + Send, ) -> Result { - let params = params.into(); let mut builder = match amount { OutputBuilderAmount::Amount(amount) => DelegationOutputBuilder::new_with_amount( amount, @@ -532,8 +523,8 @@ pub(crate) mod dto { let unlock_conditions = unlock_conditions .into_iter() - .map(|u| UnlockCondition::try_from_dto_with_params(u, ¶ms)) - .collect::, Error>>()?; + .map(UnlockCondition::from) + .collect::>(); builder = builder.with_unlock_conditions(unlock_conditions); builder.finish() diff --git a/sdk/src/types/block/output/foundry.rs b/sdk/src/types/block/output/foundry.rs index cc4f9b59d9..8cafce7ace 100644 --- a/sdk/src/types/block/output/foundry.rs +++ b/sdk/src/types/block/output/foundry.rs @@ -674,10 +674,7 @@ pub(crate) mod dto { use super::*; use crate::{ - types::{ - block::{output::unlock_condition::dto::UnlockConditionDto, Error}, - TryFromDto, ValidationParams, - }, + types::block::{output::unlock_condition::dto::UnlockConditionDto, Error}, utils::serde::string, }; @@ -714,12 +711,12 @@ pub(crate) mod dto { } } - impl TryFromDto for FoundryOutput { - type Dto = FoundryOutputDto; + impl TryFrom for FoundryOutput { type Error = Error; - fn try_from_dto_with_params_inner(dto: Self::Dto, params: ValidationParams<'_>) -> Result { - let mut builder = FoundryOutputBuilder::new_with_amount(dto.amount, dto.serial_number, dto.token_scheme); + fn try_from(dto: FoundryOutputDto) -> Result { + let mut builder: FoundryOutputBuilder = + FoundryOutputBuilder::new_with_amount(dto.amount, dto.serial_number, dto.token_scheme); for t in dto.native_tokens { builder = builder.add_native_token(t); @@ -734,7 +731,7 @@ pub(crate) mod dto { } for u in dto.unlock_conditions { - builder = builder.add_unlock_condition(UnlockCondition::try_from_dto_with_params(u, ¶ms)?); + builder = builder.add_unlock_condition(UnlockCondition::from(u)); } builder.finish() @@ -751,10 +748,7 @@ pub(crate) mod dto { unlock_conditions: Vec, features: Option>, immutable_features: Option>, - params: impl Into> + Send, ) -> Result { - let params = params.into(); - let mut builder = match amount { OutputBuilderAmount::Amount(amount) => { FoundryOutputBuilder::new_with_amount(amount, serial_number, token_scheme) @@ -770,8 +764,8 @@ pub(crate) mod dto { let unlock_conditions = unlock_conditions .into_iter() - .map(|u| UnlockCondition::try_from_dto_with_params(u, ¶ms)) - .collect::, Error>>()?; + .map(UnlockCondition::from) + .collect::>(); builder = builder.with_unlock_conditions(unlock_conditions); if let Some(features) = features { @@ -792,22 +786,19 @@ mod tests { use pretty_assertions::assert_eq; use super::*; - use crate::types::{ - block::{ + use crate::types::block::{ + output::{ + dto::OutputDto, unlock_condition::ImmutableAccountAddressUnlockCondition, FoundryId, SimpleTokenScheme, + TokenId, + }, + protocol::protocol_parameters, + rand::{ + address::rand_account_address, output::{ - dto::OutputDto, unlock_condition::ImmutableAccountAddressUnlockCondition, FoundryId, SimpleTokenScheme, - TokenId, - }, - protocol::protocol_parameters, - rand::{ - address::rand_account_address, - output::{ - feature::{rand_allowed_features, rand_metadata_feature}, - rand_foundry_output, rand_token_scheme, - }, + feature::{rand_allowed_features, rand_metadata_feature}, + rand_foundry_output, rand_token_scheme, }, }, - TryFromDto, }; #[test] @@ -815,9 +806,9 @@ mod tests { let protocol_parameters = protocol_parameters(); let output = rand_foundry_output(protocol_parameters.token_supply()); let dto = OutputDto::Foundry((&output).into()); - let output_unver = Output::try_from_dto(dto.clone()).unwrap(); + let output_unver = Output::try_from(dto.clone()).unwrap(); assert_eq!(&output, output_unver.as_foundry()); - let output_ver = Output::try_from_dto_with_params(dto, &protocol_parameters).unwrap(); + let output_ver = Output::try_from(dto).unwrap(); assert_eq!(&output, output_ver.as_foundry()); let foundry_id = FoundryId::build(&rand_account_address(), 0, SimpleTokenScheme::KIND); @@ -831,7 +822,6 @@ mod tests { builder.unlock_conditions.iter().map(Into::into).collect(), Some(builder.features.iter().cloned().collect()), Some(builder.immutable_features.iter().cloned().collect()), - protocol_parameters.clone(), ) .unwrap(); assert_eq!(builder.finish().unwrap(), output_split); diff --git a/sdk/src/types/block/output/mod.rs b/sdk/src/types/block/output/mod.rs index 53095f9ee5..dd4de9391a 100644 --- a/sdk/src/types/block/output/mod.rs +++ b/sdk/src/types/block/output/mod.rs @@ -448,18 +448,6 @@ impl StorageScore for Output { impl MinimumOutputAmount for Output {} -pub(crate) fn verify_output_amount_supply(amount: u64, token_supply: u64) -> Result<(), Error> { - if amount > token_supply { - Err(Error::InvalidOutputAmount(amount)) - } else { - Ok(()) - } -} - -pub(crate) fn verify_output_amount(amount: u64, token_supply: u64) -> Result<(), Error> { - verify_output_amount_supply(amount, token_supply) -} - /// A trait that is shared by all output types, which is used to calculate the minimum amount the output /// must contain to satisfy its storage cost. pub trait MinimumOutputAmount: StorageScore { @@ -481,7 +469,6 @@ pub mod dto { account::dto::AccountOutputDto, anchor::dto::AnchorOutputDto, basic::dto::BasicOutputDto, delegation::dto::DelegationOutputDto, foundry::dto::FoundryOutputDto, nft::dto::NftOutputDto, }; - use crate::types::{block::Error, TryFromDto, ValidationParams}; /// Describes all the different output types. #[derive(Clone, Debug, Eq, PartialEq, From)] @@ -507,20 +494,17 @@ pub mod dto { } } - impl TryFromDto for Output { - type Dto = OutputDto; + impl TryFrom for Output { type Error = Error; - fn try_from_dto_with_params_inner(dto: Self::Dto, params: ValidationParams<'_>) -> Result { + fn try_from(dto: OutputDto) -> Result { Ok(match dto { - OutputDto::Basic(o) => Self::Basic(BasicOutput::try_from_dto_with_params_inner(o, params)?), - OutputDto::Account(o) => Self::Account(AccountOutput::try_from_dto_with_params_inner(o, params)?), - OutputDto::Anchor(o) => Self::Anchor(AnchorOutput::try_from_dto_with_params_inner(o, params)?), - OutputDto::Foundry(o) => Self::Foundry(FoundryOutput::try_from_dto_with_params_inner(o, params)?), - OutputDto::Nft(o) => Self::Nft(NftOutput::try_from_dto_with_params_inner(o, params)?), - OutputDto::Delegation(o) => { - Self::Delegation(DelegationOutput::try_from_dto_with_params_inner(o, params)?) - } + OutputDto::Basic(o) => Self::Basic(BasicOutput::try_from(o)?), + OutputDto::Account(o) => Self::Account(AccountOutput::try_from(o)?), + OutputDto::Anchor(o) => Self::Anchor(AnchorOutput::try_from(o)?), + OutputDto::Foundry(o) => Self::Foundry(FoundryOutput::try_from(o)?), + OutputDto::Nft(o) => Self::Nft(NftOutput::try_from(o)?), + OutputDto::Delegation(o) => Self::Delegation(DelegationOutput::try_from(o)?), }) } } diff --git a/sdk/src/types/block/output/nft.rs b/sdk/src/types/block/output/nft.rs index 11b758d456..4f6bd4f0af 100644 --- a/sdk/src/types/block/output/nft.rs +++ b/sdk/src/types/block/output/nft.rs @@ -225,7 +225,6 @@ impl NftOutputBuilder { mut self, return_address: impl Into
, params: StorageScoreParameters, - token_supply: u64, ) -> Result { Ok(match self.amount { OutputBuilderAmount::Amount(amount) => { @@ -240,11 +239,8 @@ impl NftOutputBuilder { .finish()? .amount(); // Add a temporary storage deposit unlock condition so the new storage requirement can be calculated - self = self.add_unlock_condition(StorageDepositReturnUnlockCondition::new( - return_address.clone(), - 1, - token_supply, - )?); + self = + self.add_unlock_condition(StorageDepositReturnUnlockCondition::new(return_address.clone(), 1)); // Get the min amount of the output with the added storage deposit return unlock condition let min_amount_with_sdruc = self.clone().finish()?.minimum_amount(params); // If the return storage cost and amount are less than the required min @@ -261,8 +257,7 @@ impl NftOutputBuilder { .replace_unlock_condition(StorageDepositReturnUnlockCondition::new( return_address, sdruc_amount, - token_supply, - )?) + )) } else { self } @@ -597,10 +592,7 @@ pub(crate) mod dto { use super::*; use crate::{ - types::{ - block::{output::unlock_condition::dto::UnlockConditionDto, Error}, - TryFromDto, ValidationParams, - }, + types::block::{output::unlock_condition::dto::UnlockConditionDto, Error}, utils::serde::string, }; @@ -638,11 +630,10 @@ pub(crate) mod dto { } } - impl TryFromDto for NftOutput { - type Dto = NftOutputDto; + impl TryFrom for NftOutput { type Error = Error; - fn try_from_dto_with_params_inner(dto: Self::Dto, params: ValidationParams<'_>) -> Result { + fn try_from(dto: NftOutputDto) -> Result { let mut builder = NftOutputBuilder::new_with_amount(dto.amount, dto.nft_id) .with_mana(dto.mana) .with_native_tokens(dto.native_tokens) @@ -650,7 +641,7 @@ pub(crate) mod dto { .with_immutable_features(dto.immutable_features); for u in dto.unlock_conditions { - builder = builder.add_unlock_condition(UnlockCondition::try_from_dto_with_params(u, ¶ms)?); + builder = builder.add_unlock_condition(UnlockCondition::from(u)); } builder.finish() @@ -667,9 +658,7 @@ pub(crate) mod dto { unlock_conditions: Vec, features: Option>, immutable_features: Option>, - params: impl Into> + Send, ) -> Result { - let params = params.into(); let mut builder = match amount { OutputBuilderAmount::Amount(amount) => NftOutputBuilder::new_with_amount(amount, *nft_id), OutputBuilderAmount::MinimumAmount(params) => { @@ -684,8 +673,8 @@ pub(crate) mod dto { let unlock_conditions = unlock_conditions .into_iter() - .map(|u| UnlockCondition::try_from_dto_with_params(u, ¶ms)) - .collect::, Error>>()?; + .map(UnlockCondition::from) + .collect::>(); builder = builder.with_unlock_conditions(unlock_conditions); if let Some(features) = features { @@ -706,18 +695,15 @@ mod tests { use pretty_assertions::assert_eq; use super::*; - use crate::types::{ - block::{ - output::{dto::OutputDto, FoundryId, SimpleTokenScheme, TokenId}, - protocol::protocol_parameters, - rand::{ - address::rand_account_address, - output::{ - feature::rand_allowed_features, rand_nft_output, unlock_condition::rand_address_unlock_condition, - }, + use crate::types::block::{ + output::{dto::OutputDto, FoundryId, SimpleTokenScheme, TokenId}, + protocol::protocol_parameters, + rand::{ + address::rand_account_address, + output::{ + feature::rand_allowed_features, rand_nft_output, unlock_condition::rand_address_unlock_condition, }, }, - TryFromDto, }; #[test] @@ -725,9 +711,9 @@ mod tests { let protocol_parameters = protocol_parameters(); let output = rand_nft_output(protocol_parameters.token_supply()); let dto = OutputDto::Nft((&output).into()); - let output_unver = Output::try_from_dto(dto.clone()).unwrap(); + let output_unver = Output::try_from(dto.clone()).unwrap(); assert_eq!(&output, output_unver.as_nft()); - let output_ver = Output::try_from_dto_with_params(dto, &protocol_parameters).unwrap(); + let output_ver = Output::try_from(dto).unwrap(); assert_eq!(&output, output_ver.as_nft()); let foundry_id = FoundryId::build(&rand_account_address(), 0, SimpleTokenScheme::KIND); @@ -740,7 +726,6 @@ mod tests { output.unlock_conditions().iter().map(Into::into).collect(), Some(output.features().to_vec()), Some(output.immutable_features().to_vec()), - &protocol_parameters, ) .unwrap(); assert_eq!(output, output_split); @@ -754,7 +739,6 @@ mod tests { builder.unlock_conditions.iter().map(Into::into).collect(), Some(builder.features.iter().cloned().collect()), Some(builder.immutable_features.iter().cloned().collect()), - &protocol_parameters, ) .unwrap(); assert_eq!(builder.finish().unwrap(), output_split); diff --git a/sdk/src/types/block/output/unlock_condition/mod.rs b/sdk/src/types/block/output/unlock_condition/mod.rs index 030fd5be67..ec53550580 100644 --- a/sdk/src/types/block/output/unlock_condition/mod.rs +++ b/sdk/src/types/block/output/unlock_condition/mod.rs @@ -435,9 +435,7 @@ mod test { pub mod dto { use serde::{Deserialize, Serialize}; - pub use self::storage_deposit_return::dto::StorageDepositReturnUnlockConditionDto; use super::*; - use crate::types::{block::Error, TryFromDto, ValidationParams}; #[derive(Clone, Debug, Eq, PartialEq, From, Serialize, Deserialize)] #[serde(untagged)] @@ -445,7 +443,7 @@ pub mod dto { /// An address unlock condition. Address(AddressUnlockCondition), /// A storage deposit return unlock condition. - StorageDepositReturn(StorageDepositReturnUnlockConditionDto), + StorageDepositReturn(StorageDepositReturnUnlockCondition), /// A timelock unlock condition. Timelock(TimelockUnlockCondition), /// An expiration unlock condition. @@ -462,7 +460,7 @@ pub mod dto { fn from(value: &UnlockCondition) -> Self { match value { UnlockCondition::Address(v) => Self::Address(v.clone()), - UnlockCondition::StorageDepositReturn(v) => Self::StorageDepositReturn(v.into()), + UnlockCondition::StorageDepositReturn(v) => Self::StorageDepositReturn(v.clone()), UnlockCondition::Timelock(v) => Self::Timelock(*v), UnlockCondition::Expiration(v) => Self::Expiration(v.clone()), UnlockCondition::StateControllerAddress(v) => Self::StateControllerAddress(v.clone()), @@ -472,22 +470,17 @@ pub mod dto { } } - impl TryFromDto for UnlockCondition { - type Dto = UnlockConditionDto; - type Error = Error; - - fn try_from_dto_with_params_inner(dto: Self::Dto, params: ValidationParams<'_>) -> Result { - Ok(match dto { + impl From for UnlockCondition { + fn from(dto: UnlockConditionDto) -> Self { + match dto { UnlockConditionDto::Address(v) => Self::Address(v), - UnlockConditionDto::StorageDepositReturn(v) => Self::StorageDepositReturn( - StorageDepositReturnUnlockCondition::try_from_dto_with_params_inner(v, params)?, - ), + UnlockConditionDto::StorageDepositReturn(v) => Self::StorageDepositReturn(v), UnlockConditionDto::Timelock(v) => Self::Timelock(v), UnlockConditionDto::Expiration(v) => Self::Expiration(v), UnlockConditionDto::StateControllerAddress(v) => Self::StateControllerAddress(v), UnlockConditionDto::GovernorAddress(v) => Self::GovernorAddress(v), UnlockConditionDto::ImmutableAccountAddress(v) => Self::ImmutableAccountAddress(v), - }) + } } } diff --git a/sdk/src/types/block/output/unlock_condition/storage_deposit_return.rs b/sdk/src/types/block/output/unlock_condition/storage_deposit_return.rs index fb937a0e05..6824e728ec 100644 --- a/sdk/src/types/block/output/unlock_condition/storage_deposit_return.rs +++ b/sdk/src/types/block/output/unlock_condition/storage_deposit_return.rs @@ -3,12 +3,8 @@ use crate::types::block::{ address::Address, - output::{ - storage_score::{StorageScore, StorageScoreParameters}, - verify_output_amount, - }, + output::storage_score::{StorageScore, StorageScoreParameters}, protocol::ProtocolParameters, - Error, }; /// Defines the amount of IOTAs used as storage deposit that have to be returned to the return [`Address`]. @@ -18,7 +14,6 @@ pub struct StorageDepositReturnUnlockCondition { // The [`Address`] to return the amount to. return_address: Address, // Amount of IOTA coins the consuming transaction should deposit to `return_address`. - #[packable(verify_with = verify_amount_packable)] amount: u64, } @@ -29,13 +24,11 @@ impl StorageDepositReturnUnlockCondition { /// Creates a new [`StorageDepositReturnUnlockCondition`]. #[inline(always)] - pub fn new(return_address: impl Into
, amount: u64, token_supply: u64) -> Result { - verify_amount::(amount, token_supply)?; - - Ok(Self { + pub fn new(return_address: impl Into
, amount: u64) -> Self { + Self { return_address: return_address.into(), amount, - }) + } } /// Returns the return address. @@ -57,32 +50,14 @@ impl StorageScore for StorageDepositReturnUnlockCondition { } } -fn verify_amount(amount: u64, token_supply: u64) -> Result<(), Error> { - if VERIFY { - verify_output_amount(amount, token_supply).map_err(|_| Error::InvalidStorageDepositAmount(amount))?; - } - - Ok(()) -} - -fn verify_amount_packable( - amount: &u64, - protocol_parameters: &ProtocolParameters, -) -> Result<(), Error> { - verify_amount::(*amount, protocol_parameters.token_supply()) -} - #[cfg(feature = "serde")] -pub(crate) mod dto { +mod dto { use alloc::format; use serde::{Deserialize, Serialize}; use super::*; - use crate::{ - types::{block::Error, TryFromDto, ValidationParams}, - utils::serde::string, - }; + use crate::utils::serde::string; #[derive(Clone, Debug, Eq, PartialEq, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] @@ -119,28 +94,18 @@ pub(crate) mod dto { } } - impl TryFromDto for StorageDepositReturnUnlockCondition { - type Dto = StorageDepositReturnUnlockConditionDto; - type Error = Error; - - fn try_from_dto_with_params_inner(dto: Self::Dto, params: ValidationParams<'_>) -> Result { - Ok(if let Some(token_supply) = params.token_supply() { - Self::new(dto.return_address, dto.amount, token_supply)? - } else { - Self { - return_address: dto.return_address, - amount: dto.amount, - } - }) + impl From for StorageDepositReturnUnlockCondition { + fn from(dto: StorageDepositReturnUnlockConditionDto) -> Self { + Self { + return_address: dto.return_address, + amount: dto.amount, + } } } - impl Serialize for StorageDepositReturnUnlockCondition { - fn serialize(&self, s: S) -> Result - where - S: serde::Serializer, - { - StorageDepositReturnUnlockConditionDto::from(self).serialize(s) - } - } + crate::impl_serde_typed_dto!( + StorageDepositReturnUnlockCondition, + StorageDepositReturnUnlockConditionDto, + "storage deposit return unlock condition" + ); } diff --git a/sdk/src/types/block/payload/signed_transaction/transaction.rs b/sdk/src/types/block/payload/signed_transaction/transaction.rs index f211230ddf..b9f085d3da 100644 --- a/sdk/src/types/block/payload/signed_transaction/transaction.rs +++ b/sdk/src/types/block/payload/signed_transaction/transaction.rs @@ -593,7 +593,7 @@ pub(crate) mod dto { let outputs = dto .outputs .into_iter() - .map(|o| Output::try_from_dto_with_params(o, ¶ms)) + .map(Output::try_from) .collect::, Error>>()?; let mut builder = Self::builder(network_id) diff --git a/sdk/src/wallet/core/mod.rs b/sdk/src/wallet/core/mod.rs index a39f4516b0..f9ee311fab 100644 --- a/sdk/src/wallet/core/mod.rs +++ b/sdk/src/wallet/core/mod.rs @@ -593,13 +593,13 @@ impl TryFromDto for WalletData { outputs: dto .outputs .into_iter() - .map(|(id, o)| Ok((id, OutputData::try_from_dto_with_params(o, ¶ms)?))) + .map(|(id, o)| Ok((id, OutputData::try_from(o)?))) .collect::>()?, locked_outputs: dto.locked_outputs, unspent_outputs: dto .unspent_outputs .into_iter() - .map(|(id, o)| Ok((id, OutputData::try_from_dto_with_params(o, ¶ms)?))) + .map(|(id, o)| Ok((id, OutputData::try_from(o)?))) .collect::>()?, transactions: dto .transactions @@ -616,7 +616,7 @@ impl TryFromDto for WalletData { native_token_foundries: dto .native_token_foundries .into_iter() - .map(|(id, o)| Ok((id, FoundryOutput::try_from_dto_with_params(o, ¶ms)?))) + .map(|(id, o)| Ok((id, FoundryOutput::try_from(o)?))) .collect::>()?, }) } diff --git a/sdk/src/wallet/operations/transaction/high_level/send.rs b/sdk/src/wallet/operations/transaction/high_level/send.rs index 6c43bcd0e7..accd247f79 100644 --- a/sdk/src/wallet/operations/transaction/high_level/send.rs +++ b/sdk/src/wallet/operations/transaction/high_level/send.rs @@ -137,7 +137,6 @@ where log::debug!("[TRANSACTION] prepare_send"); let options = options.into(); let storage_score_params = self.client().get_storage_score_parameters().await?; - let token_supply = self.client().get_token_supply().await?; let wallet_address = self.address().await; @@ -186,7 +185,7 @@ where return_address.clone(), expiration_slot_index, )?) - .with_sufficient_storage_deposit(return_address, storage_score_params, token_supply)? + .with_sufficient_storage_deposit(return_address, storage_score_params)? .finish_output()?; if !options.as_ref().map(|o| o.allow_micro_amount).unwrap_or_default() { diff --git a/sdk/src/wallet/operations/transaction/high_level/send_native_tokens.rs b/sdk/src/wallet/operations/transaction/high_level/send_native_tokens.rs index 67fac19420..a3dbc318b4 100644 --- a/sdk/src/wallet/operations/transaction/high_level/send_native_tokens.rs +++ b/sdk/src/wallet/operations/transaction/high_level/send_native_tokens.rs @@ -128,7 +128,6 @@ where { log::debug!("[TRANSACTION] prepare_send_native_tokens"); let storage_score_params = self.client().get_storage_score_parameters().await?; - let token_supply = self.client().get_token_supply().await?; let wallet_address = self.address().await; let default_return_address = wallet_address.to_bech32(self.client().get_bech32_hrp().await?); @@ -179,7 +178,7 @@ where return_address.clone(), expiration_slot_index, )?) - .with_sufficient_storage_deposit(return_address, storage_score_params, token_supply)? + .with_sufficient_storage_deposit(return_address, storage_score_params)? .finish_output()?, ) } diff --git a/sdk/src/wallet/operations/transaction/prepare_output.rs b/sdk/src/wallet/operations/transaction/prepare_output.rs index ae9e822e7d..afc93d3c2f 100644 --- a/sdk/src/wallet/operations/transaction/prepare_output.rs +++ b/sdk/src/wallet/operations/transaction/prepare_output.rs @@ -45,7 +45,6 @@ where ) -> crate::wallet::Result { log::debug!("[OUTPUT] prepare_output {params:?}"); let transaction_options = transaction_options.into(); - let token_supply = self.client().get_token_supply().await?; self.client().bech32_hrp_matches(params.recipient_address.hrp()).await?; @@ -141,8 +140,7 @@ where remainder_address.clone(), // Return minimum amount min_amount_basic_output, - token_supply, - )?); + )); // Update output amount, so recipient still gets the provided amount let new_amount = params.amount + min_amount_basic_output; @@ -163,8 +161,7 @@ where remainder_address.clone(), // Return minimum amount min_amount_basic_output + additional_required_amount, - token_supply, - )?); + )); } else { // new_amount is enough second_output_builder = second_output_builder.with_amount(new_amount); @@ -219,8 +216,7 @@ where remainder_address, // Return minimum amount new_sdr_amount, - token_supply, - )?); + )); } } else { // Would leave dust behind, so return what's required for a remainder diff --git a/sdk/src/wallet/types/mod.rs b/sdk/src/wallet/types/mod.rs index 4ecef57081..cc70a0a417 100644 --- a/sdk/src/wallet/types/mod.rs +++ b/sdk/src/wallet/types/mod.rs @@ -122,18 +122,14 @@ impl From<&OutputData> for OutputDataDto { } } -impl TryFromDto for OutputData { - type Dto = OutputDataDto; +impl TryFrom for OutputData { type Error = BlockError; - fn try_from_dto_with_params_inner( - dto: Self::Dto, - params: crate::types::ValidationParams<'_>, - ) -> Result { + fn try_from(dto: OutputDataDto) -> Result { Ok(Self { output_id: dto.output_id, metadata: dto.metadata, - output: Output::try_from_dto_with_params(dto.output, params)?, + output: Output::try_from(dto.output)?, is_spent: dto.is_spent, address: dto.address, network_id: dto diff --git a/sdk/tests/client/input_signing_data.rs b/sdk/tests/client/input_signing_data.rs index 3af8a84422..491cf180f5 100644 --- a/sdk/tests/client/input_signing_data.rs +++ b/sdk/tests/client/input_signing_data.rs @@ -9,24 +9,18 @@ use iota_sdk::{ constants::SHIMMER_COIN_TYPE, secret::types::{InputSigningData, InputSigningDataDto}, }, - types::{ - block::{ - address::Address, - output::{unlock_condition::AddressUnlockCondition, BasicOutput, OutputId, OutputMetadata}, - payload::signed_transaction::TransactionId, - protocol::protocol_parameters, - slot::SlotCommitmentId, - BlockId, - }, - TryFromDto, + types::block::{ + address::Address, + output::{unlock_condition::AddressUnlockCondition, BasicOutput, OutputId, OutputMetadata}, + payload::signed_transaction::TransactionId, + slot::SlotCommitmentId, + BlockId, }, }; use pretty_assertions::assert_eq; #[test] fn input_signing_data_conversion() { - let protocol_parameters = protocol_parameters(); - let bip44_chain = Bip44::new(SHIMMER_COIN_TYPE); let output = BasicOutput::build_with_amount(1_000_000) @@ -68,8 +62,7 @@ fn input_signing_data_conversion() { let input_signing_data_dto = InputSigningDataDto::from(&input_signing_data); assert_eq!(input_signing_data_dto.chain.as_ref(), Some(&bip44_chain)); - let restored_input_signing_data = - InputSigningData::try_from_dto_with_params(input_signing_data_dto.clone(), &protocol_parameters).unwrap(); + let restored_input_signing_data = InputSigningData::try_from(input_signing_data_dto.clone()).unwrap(); assert_eq!(input_signing_data, restored_input_signing_data); let input_signing_data_dto_json = serde_json::json!({ @@ -113,8 +106,7 @@ fn input_signing_data_conversion() { serde_json::from_value::(input_signing_data_dto_json).unwrap(); assert_eq!(restored_input_signing_data_dto.chain.as_ref(), Some(&bip44_chain)); - let restored_input_signing_data = - InputSigningData::try_from_dto_with_params(restored_input_signing_data_dto, &protocol_parameters).unwrap(); + let restored_input_signing_data = InputSigningData::try_from(restored_input_signing_data_dto).unwrap(); assert!(restored_input_signing_data.output.is_basic()); assert_eq!(restored_input_signing_data.chain, Some(bip44_chain)); } diff --git a/sdk/tests/client/mod.rs b/sdk/tests/client/mod.rs index 4d8db30740..d01b8a394c 100644 --- a/sdk/tests/client/mod.rs +++ b/sdk/tests/client/mod.rs @@ -39,7 +39,6 @@ use iota_sdk::{ }, }; -const TOKEN_SUPPLY: u64 = 1_813_620_509_061_365; const ACCOUNT_ID_0: &str = "0x0000000000000000000000000000000000000000000000000000000000000000"; const ACCOUNT_ID_1: &str = "0x1111111111111111111111111111111111111111111111111111111111111111"; const ACCOUNT_ID_2: &str = "0x2222222222222222222222222222222222222222222222222222222222222222"; @@ -119,8 +118,7 @@ fn build_basic_output( } if let Some((address, amount)) = sdruc { - builder = builder - .add_unlock_condition(StorageDepositReturnUnlockCondition::new(address, amount, TOKEN_SUPPLY).unwrap()); + builder = builder.add_unlock_condition(StorageDepositReturnUnlockCondition::new(address, amount)); } if let Some(timelock) = timelock { @@ -165,8 +163,7 @@ fn build_nft_output( } if let Some((address, amount)) = sdruc { - builder = builder - .add_unlock_condition(StorageDepositReturnUnlockCondition::new(address, amount, TOKEN_SUPPLY).unwrap()); + builder = builder.add_unlock_condition(StorageDepositReturnUnlockCondition::new(address, amount)); } if let Some((address, timestamp)) = expiration { From 383b8a7288ed9694ab84e0dda69e1a3cebb6e46f Mon Sep 17 00:00:00 2001 From: Thibault Martinez Date: Thu, 16 Nov 2023 13:19:17 +0100 Subject: [PATCH 36/91] Use packable struct-level verify-with (#1609) * Use packable struct-level verify-with * Derive packable for ManaAllotment * Derive packable for MultiAddress * Derive packable for SimpleTokenScheme * Derive packable for BasicBlock * Derive packable for Block * Derive packable for Payload * Use newly released packable * Use InvalidUnlockConditionKind * Nit * Missing VERIFY * Packable verify_protocol_parameters_hash --- Cargo.lock | 358 +++++++++--------- bindings/core/Cargo.toml | 10 +- sdk/Cargo.toml | 2 +- sdk/src/types/block/address/multi.rs | 66 +--- sdk/src/types/block/core/basic.rs | 57 +-- sdk/src/types/block/core/mod.rs | 45 +-- sdk/src/types/block/core/validation.rs | 88 ++--- sdk/src/types/block/mana/allotment.rs | 39 +- sdk/src/types/block/output/mod.rs | 69 +--- .../types/block/output/token_scheme/simple.rs | 70 ++-- .../block/output/unlock_condition/mod.rs | 91 +---- .../block/payload/candidacy_announcement.rs | 4 +- sdk/src/types/block/payload/mod.rs | 43 +-- sdk/src/types/fuzz/Cargo.toml | 2 +- 14 files changed, 310 insertions(+), 634 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 4151d6b2a2..5ad22abad6 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -54,9 +54,9 @@ dependencies = [ [[package]] name = "ahash" -version = "0.8.5" +version = "0.8.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cd7d5a2cecb58716e47d67d5703a249964b14c7be1ec3cad3affc295b2d1c35d" +checksum = "91429305e9f0a25f6205c5b8e0d2db09e0708a7a6df0f42212bb56c32c8ac97a" dependencies = [ "cfg-if", "once_cell", @@ -159,7 +159,7 @@ checksum = "a66537f1bb974b254c98ed142ff995236e81b9d0fe4db0575f46612cb15eb0f9" dependencies = [ "proc-macro2", "quote", - "syn 2.0.38", + "syn 2.0.39", ] [[package]] @@ -274,7 +274,7 @@ dependencies = [ "regex", "rustc-hash", "shlex", - "syn 2.0.38", + "syn 2.0.39", ] [[package]] @@ -382,11 +382,10 @@ dependencies = [ [[package]] name = "cc" -version = "1.0.83" +version = "1.0.84" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f1174fb0b6ec23863f8b971027804a42614e347eafb0a95bf0b12cdae21fc4d0" +checksum = "0f8e7c90afad890484a21653d08b6e209ae34770fb5ee298f9c699fcc1e5c856" dependencies = [ - "jobserver", "libc", ] @@ -457,14 +456,14 @@ checksum = "c688fc74432808e3eb684cae8830a86be1d66a2bd58e1f248ed0960a590baf6f" dependencies = [ "glob", "libc", - "libloading", + "libloading 0.7.4", ] [[package]] name = "clap" -version = "4.4.6" +version = "4.4.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d04704f56c2cde07f43e8e2c154b43f216dc5c92fc98ada720177362f953b956" +checksum = "2275f18819641850fa26c89acc84d465c1bf91ce57bc2748b28c420473352f64" dependencies = [ "clap_builder", "clap_derive", @@ -472,9 +471,9 @@ dependencies = [ [[package]] name = "clap_builder" -version = "4.4.6" +version = "4.4.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0e231faeaca65ebd1ea3c737966bf858971cd38c3849107aa3ea7de90a804e45" +checksum = "07cdf1b148b25c1e1f7a42225e30a0d99a615cd4637eae7365548dd4529b95bc" dependencies = [ "anstream", "anstyle", @@ -484,21 +483,21 @@ dependencies = [ [[package]] name = "clap_derive" -version = "4.4.2" +version = "4.4.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0862016ff20d69b84ef8247369fabf5c008a7417002411897d40ee1f4532b873" +checksum = "cf9804afaaf59a91e75b022a30fb7229a7901f60c755489cc61c9b423b836442" dependencies = [ "heck", "proc-macro2", "quote", - "syn 2.0.38", + "syn 2.0.39", ] [[package]] name = "clap_lex" -version = "0.5.1" +version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cd7cc57abe963c6d3b9d8be5b06ba7c8957a930305ca90304f24ef040aa6f961" +checksum = "702fc72eb24e5a1e48ce58027a675bc24edd52096d5397d4aea7c6dd9eca0bd1" [[package]] name = "cli-wallet" @@ -619,9 +618,9 @@ checksum = "e496a50fda8aacccc86d7529e2c1e0892dbd0f898a6b5645b5561b89c3210efa" [[package]] name = "cpufeatures" -version = "0.2.10" +version = "0.2.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3fbc60abd742b35f2492f808e1abbb83d45f72db402e14c55057edc9c7b1e9e4" +checksum = "ce420fe07aecd3e67c5f910618fe65e94158f6dcc0adf44e00d69ce2bdfe0fd0" dependencies = [ "libc", ] @@ -643,9 +642,9 @@ checksum = "7a81dae078cea95a014a339291cec439d2f232ebe854a9d672b796c6afafa9b7" [[package]] name = "crypto-bigint" -version = "0.5.3" +version = "0.5.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "740fe28e594155f10cfc383984cbefd529d7396050557148f79cb0f621204124" +checksum = "28f85c3514d2a6e64160359b45a3918c3b4178bcbf4ae5d03ab2d02e521c479a" dependencies = [ "generic-array", "rand_core 0.6.4", @@ -670,7 +669,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "37e366bff8cd32dd8754b0991fb66b279dc48f598c3a18914852a6673deef583" dependencies = [ "quote", - "syn 2.0.38", + "syn 2.0.39", ] [[package]] @@ -714,13 +713,13 @@ dependencies = [ [[package]] name = "curve25519-dalek-derive" -version = "0.1.0" +version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "83fdaf97f4804dcebfa5862639bc9ce4121e82140bec2a987ac5140294865b5b" +checksum = "f46882e17999c6cc590af592290432be3bce0428cb0d5f8b6715e4dc7b383eb3" dependencies = [ "proc-macro2", "quote", - "syn 2.0.38", + "syn 2.0.39", ] [[package]] @@ -744,7 +743,7 @@ dependencies = [ "proc-macro2", "quote", "strsim", - "syn 2.0.38", + "syn 2.0.39", ] [[package]] @@ -755,7 +754,7 @@ checksum = "836a9bbc7ad63342d6d6e7b815ccab164bc77a2d95d84bc3117a8c0d5c98e2d5" dependencies = [ "darling_core", "quote", - "syn 2.0.38", + "syn 2.0.39", ] [[package]] @@ -816,7 +815,7 @@ dependencies = [ "darling", "proc-macro2", "quote", - "syn 2.0.38", + "syn 2.0.39", ] [[package]] @@ -1022,9 +1021,9 @@ checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5" [[package]] name = "errno" -version = "0.3.5" +version = "0.3.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ac3e13f66a2f95e32a39eaa81f6b95d42878ca0e1db0c7543723dfe12557e860" +checksum = "7c18ee0ed65a5f1f81cac6b1d213b69c35fa47d4252ad41f1486dbd8226fe36e" dependencies = [ "libc", "windows-sys 0.48.0", @@ -1086,9 +1085,9 @@ dependencies = [ [[package]] name = "fiat-crypto" -version = "0.2.1" +version = "0.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d0870c84016d4b481be5c9f323c24f65e31e901ae618f0e80f4308fb00de1d2d" +checksum = "f69037fe1b785e84986b4f2cbcf647381876a00671d25ceef715d7812dd7e1dd" [[package]] name = "field-offset" @@ -1120,7 +1119,7 @@ checksum = "55ac459de2512911e4b674ce33cf20befaba382d05b62b008afc1c8b57cbf181" dependencies = [ "futures-core", "futures-sink", - "spin 0.9.8", + "spin", ] [[package]] @@ -1146,9 +1145,9 @@ checksum = "e6d5a32815ae3f33302d95fdcb2ce17862f8c65363dcfd29360480ba1001fc9c" [[package]] name = "futures" -version = "0.3.28" +version = "0.3.29" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "23342abe12aba583913b2e62f22225ff9c950774065e4bfb61a19cd9770fec40" +checksum = "da0290714b38af9b4a7b094b8a37086d1b4e61f2df9122c3cad2577669145335" dependencies = [ "futures-channel", "futures-core", @@ -1161,9 +1160,9 @@ dependencies = [ [[package]] name = "futures-channel" -version = "0.3.28" +version = "0.3.29" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "955518d47e09b25bbebc7a18df10b81f0c766eaf4c4f1cccef2fca5f2a4fb5f2" +checksum = "ff4dd66668b557604244583e3e1e1eada8c5c2e96a6d0d6653ede395b78bbacb" dependencies = [ "futures-core", "futures-sink", @@ -1171,15 +1170,15 @@ dependencies = [ [[package]] name = "futures-core" -version = "0.3.28" +version = "0.3.29" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4bca583b7e26f571124fe5b7561d49cb2868d79116cfa0eefce955557c6fee8c" +checksum = "eb1d22c66e66d9d72e1758f0bd7d4fd0bee04cad842ee34587d68c07e45d088c" [[package]] name = "futures-executor" -version = "0.3.28" +version = "0.3.29" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ccecee823288125bd88b4d7f565c9e58e41858e47ab72e8ea2d64e93624386e0" +checksum = "0f4fb8693db0cf099eadcca0efe2a5a22e4550f98ed16aba6c48700da29597bc" dependencies = [ "futures-core", "futures-task", @@ -1189,38 +1188,38 @@ dependencies = [ [[package]] name = "futures-io" -version = "0.3.28" +version = "0.3.29" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4fff74096e71ed47f8e023204cfd0aa1289cd54ae5430a9523be060cdb849964" +checksum = "8bf34a163b5c4c52d0478a4d757da8fb65cabef42ba90515efee0f6f9fa45aaa" [[package]] name = "futures-macro" -version = "0.3.28" +version = "0.3.29" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "89ca545a94061b6365f2c7355b4b32bd20df3ff95f02da9329b34ccc3bd6ee72" +checksum = "53b153fd91e4b0147f4aced87be237c98248656bb01050b96bf3ee89220a8ddb" dependencies = [ "proc-macro2", "quote", - "syn 2.0.38", + "syn 2.0.39", ] [[package]] name = "futures-sink" -version = "0.3.28" +version = "0.3.29" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f43be4fe21a13b9781a69afa4985b0f6ee0e1afab2c6f454a8cf30e2b2237b6e" +checksum = "e36d3378ee38c2a36ad710c5d30c2911d752cb941c00c72dbabfb786a7970817" [[package]] name = "futures-task" -version = "0.3.28" +version = "0.3.29" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "76d3d132be6c0e6aa1534069c705a74a5997a356c0dc2f86a47765e5617c5b65" +checksum = "efd193069b0ddadc69c46389b740bbccdd97203899b48d09c5f7969591d6bae2" [[package]] name = "futures-util" -version = "0.3.28" +version = "0.3.29" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26b01e40b772d54cf6c6d721c1d1abd0647a0106a12ecaa1c186273392a69533" +checksum = "a19526d624e703a3179b3d322efec918b6246ea0fa51d41124525f00f1cc8104" dependencies = [ "futures-channel", "futures-core", @@ -1247,9 +1246,9 @@ dependencies = [ [[package]] name = "getrandom" -version = "0.2.10" +version = "0.2.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "be4136b2a15dd319360be1c07d9933517ccf0be8f16bf62a3bee4f0d618df427" +checksum = "fe9006bed769170c11f845cf00c7c1e9092aeb3f268e007c3e760ac68008070f" dependencies = [ "cfg-if", "js-sys", @@ -1438,9 +1437,9 @@ dependencies = [ [[package]] name = "http" -version = "0.2.9" +version = "0.2.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bd6effc99afb63425aff9b05836f029929e345a6148a14b7ecd5ab67af944482" +checksum = "8947b1a6fad4393052c7ba1f4cd97bed3e953a95c79c92ad9b051a04611d9fbb" dependencies = [ "bytes", "fnv", @@ -1496,9 +1495,9 @@ dependencies = [ [[package]] name = "hyper-rustls" -version = "0.24.1" +version = "0.24.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8d78e1e73ec14cf7375674f74d7dde185c8206fd9dea6fb6295e8a98098aaa97" +checksum = "ec3efd23720e2049821a693cbc7e65ea87c72f1c58ff2f9522ff332b1491e590" dependencies = [ "futures-util", "http", @@ -1565,9 +1564,9 @@ dependencies = [ [[package]] name = "indexmap" -version = "2.0.2" +version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8adf3ddd720272c6ea8bf59463c04e0f93d0bbf7c5439b691bca2987e0270897" +checksum = "d530e1a18b1cb4c484e6e34556a0d948706958449fca0cab753d649f2bce3d1f" dependencies = [ "equivalent", "hashbrown 0.14.2", @@ -1786,20 +1785,11 @@ version = "1.0.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "af150ab688ff2122fcef229be89cb50dd66af9e01a4ff320cc137eecc9bacc38" -[[package]] -name = "jobserver" -version = "0.1.27" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8c37f63953c4c63420ed5fd3d6d398c719489b9f872b9fa683262f8edd363c7d" -dependencies = [ - "libc", -] - [[package]] name = "js-sys" -version = "0.3.64" +version = "0.3.65" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c5f195fe497f702db0f318b07fdd68edb16955aed830df8363d837542f8f935a" +checksum = "54c0c35952f67de54bb584e9fd912b3023117cbafc0a77d8f3dee1fb5f572fe8" dependencies = [ "wasm-bindgen", ] @@ -1869,9 +1859,9 @@ dependencies = [ [[package]] name = "libc" -version = "0.2.149" +version = "0.2.150" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a08173bc88b7955d1b3145aa561539096c421ac8debde8cbc3612ec635fee29b" +checksum = "89d92a4743f9a61002fae18374ed11e7973f530cb3a3255fb354818118b2203c" [[package]] name = "libloading" @@ -1883,6 +1873,27 @@ dependencies = [ "winapi", ] +[[package]] +name = "libloading" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c571b676ddfc9a8c12f1f3d3085a7b163966a8fd8098a90640953ce5f6170161" +dependencies = [ + "cfg-if", + "windows-sys 0.48.0", +] + +[[package]] +name = "libredox" +version = "0.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "85c833ca1e66078851dba29046874e38f08b2c883700aa29a03ddd3b23814ee8" +dependencies = [ + "bitflags 2.4.1", + "libc", + "redox_syscall", +] + [[package]] name = "librocksdb-sys" version = "0.11.0+8.1.1" @@ -1923,9 +1934,9 @@ dependencies = [ [[package]] name = "linux-raw-sys" -version = "0.4.10" +version = "0.4.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da2479e8c062e40bf0066ffa0bc823de0a9368974af99c9f6df941d2c231e03f" +checksum = "969488b55f8ac402214f3f5fd243ebb7206cf82de60d3172994707a4bcc2b829" [[package]] name = "lock_api" @@ -2014,9 +2025,9 @@ dependencies = [ [[package]] name = "napi" -version = "2.13.3" +version = "2.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fd063c93b900149304e3ba96ce5bf210cd4f81ef5eb80ded0d100df3e85a3ac0" +checksum = "f9d90182620f32fe34b6ac9b52cba898af26e94c7f5abc01eb4094c417ae2e6c" dependencies = [ "bitflags 2.4.1", "ctor", @@ -2028,15 +2039,15 @@ dependencies = [ [[package]] name = "napi-build" -version = "2.0.1" +version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "882a73d9ef23e8dc2ebbffb6a6ae2ef467c0f18ac10711e4cc59c5485d41df0e" +checksum = "d4b4532cf86bfef556348ac65e561e3123879f0e7566cca6d43a6ff5326f13df" [[package]] name = "napi-derive" -version = "2.13.0" +version = "2.14.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da1c6a8fa84d549aa8708fcd062372bf8ec6e849de39016ab921067d21bde367" +checksum = "3619fa472d23cd5af94d63a2bae454a77a8863251f40230fbf59ce20eafa8a86" dependencies = [ "cfg-if", "convert_case", @@ -2048,9 +2059,9 @@ dependencies = [ [[package]] name = "napi-derive-backend" -version = "1.0.52" +version = "1.0.54" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "20bbc7c69168d06a848f925ec5f0e0997f98e8c8d4f2cc30157f0da51c009e17" +checksum = "ecd3ea4b54020c73d591a49cd192f6334c5f37f71a63ead54dbc851fa991ef00" dependencies = [ "convert_case", "proc-macro2", @@ -2060,11 +2071,11 @@ dependencies = [ [[package]] name = "napi-sys" -version = "2.2.3" +version = "2.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "166b5ef52a3ab5575047a9fe8d4a030cdd0f63c96f071cd6907674453b07bae3" +checksum = "2503fa6af34dc83fb74888df8b22afe933b58d37daf7d80424b1c60c68196b8b" dependencies = [ - "libloading", + "libloading 0.8.1", ] [[package]] @@ -2172,9 +2183,9 @@ checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf" [[package]] name = "packable" -version = "0.8.3" +version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "11259b086696fc9256f790485d8f14f11f0fa60a60351af9693e3d49fd24fdb6" +checksum = "eee4180de5473e336f075507fea07003183e059bc0d35398b0b0039419747e76" dependencies = [ "autocfg", "packable-derive", @@ -2184,9 +2195,9 @@ dependencies = [ [[package]] name = "packable-derive" -version = "0.7.0" +version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e9567693dd2f9a4339cb0a54adfcc0cb431c0ac88b2e46c6ddfb5f5d11a1cc4f" +checksum = "26a5ee3cb4c60754a0b49a3b7a6f5067a191ff5ec9d90414f6c4cfd21ce9acff" dependencies = [ "proc-macro-crate", "proc-macro-error", @@ -2298,9 +2309,9 @@ checksum = "26072860ba924cbfa98ea39c8c19b4dd6a4a25423dbdf219c1eca91aa0cf6964" [[package]] name = "platforms" -version = "3.1.2" +version = "3.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4503fa043bf02cee09a9582e9554b4c6403b2ef55e4612e96561d294419429f8" +checksum = "14e6ab3f592e6fb464fc9712d8d6e6912de6473954635fd76a589d832cffcbb0" [[package]] name = "poly1305" @@ -2365,7 +2376,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ae005bd773ab59b4725093fd7df83fd7892f7d8eafb48dbd7de6e024e4215f9d" dependencies = [ "proc-macro2", - "syn 2.0.38", + "syn 2.0.39", ] [[package]] @@ -2486,21 +2497,21 @@ dependencies = [ [[package]] name = "redox_syscall" -version = "0.2.16" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fb5a58c1855b4b6819d59012155603f0b22ad30cad752600aadfcb695265519a" +checksum = "4722d768eff46b75989dd134e5c353f0d6296e5aaa3132e776cbdb56be7731aa" dependencies = [ "bitflags 1.3.2", ] [[package]] name = "redox_users" -version = "0.4.3" +version = "0.4.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b033d837a7cf162d7993aded9304e30a83213c648b6e389db233191f891e5c2b" +checksum = "a18479200779601e498ada4e8c1e1f50e3ee19deb0259c25825a98b5603b2cb4" dependencies = [ "getrandom", - "redox_syscall", + "libredox", "thiserror", ] @@ -2583,21 +2594,6 @@ dependencies = [ "subtle", ] -[[package]] -name = "ring" -version = "0.16.20" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3053cf52e236a3ed746dfc745aa9cacf1b791d846bdaf412f60a8d7d6e17c8fc" -dependencies = [ - "cc", - "libc", - "once_cell", - "spin 0.5.2", - "untrusted 0.7.1", - "web-sys", - "winapi", -] - [[package]] name = "ring" version = "0.17.5" @@ -2607,8 +2603,8 @@ dependencies = [ "cc", "getrandom", "libc", - "spin 0.9.8", - "untrusted 0.9.0", + "spin", + "untrusted", "windows-sys 0.48.0", ] @@ -2684,9 +2680,9 @@ dependencies = [ [[package]] name = "rustix" -version = "0.38.20" +version = "0.38.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "67ce50cb2e16c2903e30d1cbccfd8387a74b9d4c938b6a4c5ec6cc7556f7a8a0" +checksum = "80109a168d9bc0c7f483083244543a6eb0dba02295d33ca268145e6190d6df0c" dependencies = [ "bitflags 2.4.1", "errno", @@ -2702,7 +2698,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "446e14c5cda4f3f30fe71863c34ec70f5ac79d6087097ad0bb433e1be5edf04c" dependencies = [ "log", - "ring 0.17.5", + "ring", "rustls-webpki", "sct", ] @@ -2721,9 +2717,9 @@ dependencies = [ [[package]] name = "rustls-pemfile" -version = "1.0.3" +version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2d3987094b1d07b653b7dfdc3f70ce9a1da9c51ac18c1b06b662e4f9a0e9f4b2" +checksum = "1c74cae0a4cf6ccbbf5f359f08efdf8ee7e1dc532573bf0db71968cb56b1448c" dependencies = [ "base64 0.21.5", ] @@ -2734,8 +2730,8 @@ version = "0.101.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8b6275d1ee7a1cd780b64aca7726599a1dbc893b1e64144529e55c3c2f745765" dependencies = [ - "ring 0.17.5", - "untrusted 0.9.0", + "ring", + "untrusted", ] [[package]] @@ -2770,7 +2766,7 @@ checksum = "5a32af5427251d2e4be14fc151eabe18abb4a7aad5efee7044da9f096c906a43" dependencies = [ "proc-macro2", "quote", - "syn 2.0.38", + "syn 2.0.39", ] [[package]] @@ -2825,12 +2821,12 @@ dependencies = [ [[package]] name = "sct" -version = "0.7.0" +version = "0.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d53dcdb7c9f8158937a7981b48accfd39a43af418591a5d008c7b22b5e1b7ca4" +checksum = "da046153aa2352493d6cb7da4b6e5c0c057d8a1d0a9aa8560baffdd945acd414" dependencies = [ - "ring 0.16.20", - "untrusted 0.7.1", + "ring", + "untrusted", ] [[package]] @@ -2879,29 +2875,29 @@ checksum = "836fa6a3e1e547f9a2c4040802ec865b5d85f4014efe00555d7090a3dcaa1090" [[package]] name = "serde" -version = "1.0.189" +version = "1.0.192" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e422a44e74ad4001bdc8eede9a4570ab52f71190e9c076d14369f38b9200537" +checksum = "bca2a08484b285dcb282d0f67b26cadc0df8b19f8c12502c13d966bf9482f001" dependencies = [ "serde_derive", ] [[package]] name = "serde_derive" -version = "1.0.189" +version = "1.0.192" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e48d1f918009ce3145511378cf68d613e3b3d9137d67272562080d68a2b32d5" +checksum = "d6c7207fbec9faa48073f3e3074cbe553af6ea512d7c21ba46e434e70ea9fbc1" dependencies = [ "proc-macro2", "quote", - "syn 2.0.38", + "syn 2.0.39", ] [[package]] name = "serde_json" -version = "1.0.107" +version = "1.0.108" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6b420ce6e3d8bd882e9b243c6eed35dbc9a6110c9769e74b584e0d68d1f20c65" +checksum = "3d1c7e3eac408d115102c4c24ad393e0821bb3a5df4d506a80f85f7a742a526b" dependencies = [ "itoa", "ryu", @@ -2910,13 +2906,13 @@ dependencies = [ [[package]] name = "serde_repr" -version = "0.1.16" +version = "0.1.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8725e1dfadb3a50f7e5ce0b1a540466f6ed3fe7a0fca2ac2b8b831d31316bd00" +checksum = "3081f5ffbb02284dda55132aa26daecedd7372a42417bbbab6f14ab7d6bb9145" dependencies = [ "proc-macro2", "quote", - "syn 2.0.38", + "syn 2.0.39", ] [[package]] @@ -2996,9 +2992,9 @@ dependencies = [ [[package]] name = "smallvec" -version = "1.11.1" +version = "1.11.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "942b4a808e05215192e39f4ab80813e599068285906cc91aa64f923db842bd5a" +checksum = "4dccd0940a2dcdf68d092b8cbab7dc0ad8fa938bf95787e1b916b0e3d0e8e970" [[package]] name = "snafu" @@ -3042,12 +3038,6 @@ dependencies = [ "windows-sys 0.48.0", ] -[[package]] -name = "spin" -version = "0.5.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6e63cff320ae2c57904679ba7cb63280a3dc4613885beafb148ee7bf9aa9042d" - [[package]] name = "spin" version = "0.9.8" @@ -3162,9 +3152,9 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.38" +version = "2.0.39" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e96b79aaa137db8f61e26363a0c9b47d8b4ec75da28b7d1d614c2303e232408b" +checksum = "23e78b90f2fcf45d3e842032ce32e3f2d1545ba6636271dcbf24fa306d87be7a" dependencies = [ "proc-macro2", "quote", @@ -3215,7 +3205,7 @@ checksum = "266b2e40bc00e5a6c09c3584011e08b06f123c00362c92b975ba9843aaaa14b8" dependencies = [ "proc-macro2", "quote", - "syn 2.0.38", + "syn 2.0.39", ] [[package]] @@ -3284,9 +3274,9 @@ checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" [[package]] name = "tokio" -version = "1.33.0" +version = "1.34.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4f38200e3ef7995e5ef13baec2f432a6da0aa9ac495b2c0e8f3b7eec2c92d653" +checksum = "d0c014766411e834f7af5b8f4cf46257aab4036ca95e9d2c144a10f59ad6f5b9" dependencies = [ "backtrace", "bytes", @@ -3301,13 +3291,13 @@ dependencies = [ [[package]] name = "tokio-macros" -version = "2.1.0" +version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "630bdcf245f78637c13ec01ffae6187cca34625e8c63150d424b59e55af2675e" +checksum = "5b8a1e28f2deaa14e508979454cb3a223b10b938b45af148bc0986de36f1923b" dependencies = [ "proc-macro2", "quote", - "syn 2.0.38", + "syn 2.0.39", ] [[package]] @@ -3322,9 +3312,9 @@ dependencies = [ [[package]] name = "tokio-util" -version = "0.7.9" +version = "0.7.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d68074620f57a0b21594d9735eb2e98ab38b17f80d3fcb189fca266771ca60d" +checksum = "5419f34732d9eb6ee4c3578b7989078579b7f039cbbb9ca2c4da015749371e15" dependencies = [ "bytes", "futures-core", @@ -3346,7 +3336,7 @@ version = "0.19.15" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1b5bb770da30e5cbfde35a2d7b9b8a2c4b8ef89548a7a6aeab5c9a576e3e7421" dependencies = [ - "indexmap 2.0.2", + "indexmap 2.1.0", "toml_datetime", "winnow", ] @@ -3376,7 +3366,7 @@ checksum = "34704c8d6ebcbc939824180af020566b01a7c01f80641264eba0999f6c2b6be7" dependencies = [ "proc-macro2", "quote", - "syn 2.0.38", + "syn 2.0.39", ] [[package]] @@ -3486,12 +3476,6 @@ dependencies = [ "subtle", ] -[[package]] -name = "untrusted" -version = "0.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a156c684c91ea7d62626509bce3cb4e1d9ed5c4d978f7b4352658f96a4c26b4a" - [[package]] name = "untrusted" version = "0.9.0" @@ -3561,9 +3545,9 @@ checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" [[package]] name = "wasm-bindgen" -version = "0.2.87" +version = "0.2.88" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7706a72ab36d8cb1f80ffbf0e071533974a60d0a308d01a5d0375bf60499a342" +checksum = "7daec296f25a1bae309c0cd5c29c4b260e510e6d813c286b19eaadf409d40fce" dependencies = [ "cfg-if", "wasm-bindgen-macro", @@ -3571,24 +3555,24 @@ dependencies = [ [[package]] name = "wasm-bindgen-backend" -version = "0.2.87" +version = "0.2.88" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5ef2b6d3c510e9625e5fe6f509ab07d66a760f0885d858736483c32ed7809abd" +checksum = "e397f4664c0e4e428e8313a469aaa58310d302159845980fd23b0f22a847f217" dependencies = [ "bumpalo", "log", "once_cell", "proc-macro2", "quote", - "syn 2.0.38", + "syn 2.0.39", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-futures" -version = "0.4.37" +version = "0.4.38" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c02dbc21516f9f1f04f187958890d7e6026df8d16540b7ad9492bc34a67cea03" +checksum = "9afec9963e3d0994cac82455b2b3502b81a7f40f9a0d32181f7528d9f4b43e02" dependencies = [ "cfg-if", "js-sys", @@ -3598,9 +3582,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro" -version = "0.2.87" +version = "0.2.88" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dee495e55982a3bd48105a7b947fd2a9b4a8ae3010041b9e0faab3f9cd028f1d" +checksum = "5961017b3b08ad5f3fe39f1e79877f8ee7c23c5e5fd5eb80de95abc41f1f16b2" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -3608,28 +3592,28 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.87" +version = "0.2.88" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "54681b18a46765f095758388f2d0cf16eb8d4169b639ab575a8f5693af210c7b" +checksum = "c5353b8dab669f5e10f5bd76df26a9360c748f054f862ff5f3f8aae0c7fb3907" dependencies = [ "proc-macro2", "quote", - "syn 2.0.38", + "syn 2.0.39", "wasm-bindgen-backend", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-shared" -version = "0.2.87" +version = "0.2.88" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ca6ad05a4870b2bf5fe995117d3728437bd27d7cd5f06f13c17443ef369775a1" +checksum = "0d046c5d029ba91a1ed14da14dca44b68bf2f124cfbaf741c54151fdb3e0750b" [[package]] name = "web-sys" -version = "0.3.64" +version = "0.3.65" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9b85cbef8c220a6abc02aefd892dfc0fc23afb1c6a426316ec33253a3877249b" +checksum = "5db499c5f66323272151db0e666cd34f78617522fb0c1604d31a27c50c206a85" dependencies = [ "js-sys", "wasm-bindgen", @@ -3867,9 +3851,9 @@ checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538" [[package]] name = "winnow" -version = "0.5.17" +version = "0.5.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a3b801d0e0a6726477cc207f60162da452f3a95adb368399bef20a946e06f65c" +checksum = "829846f3e3db426d4cee4510841b71a8e58aa2a76b1132579487ae430ccd9c7b" dependencies = [ "memchr", ] @@ -3932,22 +3916,22 @@ checksum = "09041cd90cf85f7f8b2df60c646f853b7f535ce68f85244eb6731cf89fa498ec" [[package]] name = "zerocopy" -version = "0.7.11" +version = "0.7.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c19fae0c8a9efc6a8281f2e623db8af1db9e57852e04cde3e754dd2dc29340f" +checksum = "8cd369a67c0edfef15010f980c3cbe45d7f651deac2cd67ce097cd801de16557" dependencies = [ "zerocopy-derive", ] [[package]] name = "zerocopy-derive" -version = "0.7.11" +version = "0.7.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fc56589e9ddd1f1c28d4b4b5c773ce232910a6bb67a70133d61c9e347585efe9" +checksum = "c2f140bda219a26ccc0cdb03dba58af72590c53b22642577d88a927bc5c87d6b" dependencies = [ "proc-macro2", "quote", - "syn 2.0.38", + "syn 2.0.39", ] [[package]] @@ -3968,5 +3952,5 @@ checksum = "ce36e65b0d2999d2aafac989fb249189a141aee1f53c612c1f37d72631959f69" dependencies = [ "proc-macro2", "quote", - "syn 2.0.38", + "syn 2.0.39", ] diff --git a/bindings/core/Cargo.toml b/bindings/core/Cargo.toml index 761e579065..aaff827018 100644 --- a/bindings/core/Cargo.toml +++ b/bindings/core/Cargo.toml @@ -23,20 +23,20 @@ iota-crypto = { version = "0.23.0", default-features = false, features = [ "bip44", ] } log = { version = "0.4.20", default-features = false } -packable = { version = "0.8.3", default-features = false } +packable = { version = "0.9.0", default-features = false } prefix-hex = { version = "0.7.1", default-features = false } primitive-types = { version = "0.12.2", default-features = false } serde = { version = "1.0.188", default-features = false } serde_json = { version = "1.0.107", default-features = false } thiserror = { version = "1.0.49", default-features = false } tokio = { version = "1.33.0", default-features = false } -url = { version = "2.4.1", default-features = false, features = [ - "serde", -] } +url = { version = "2.4.1", default-features = false, features = ["serde"] } zeroize = { version = "1.6.0", default-features = false } [dev-dependencies] -pretty_assertions = { version = "1.4.0", default-features = false, features = [ "alloc" ] } +pretty_assertions = { version = "1.4.0", default-features = false, features = [ + "alloc", +] } [features] events = ["iota-sdk/events"] diff --git a/sdk/Cargo.toml b/sdk/Cargo.toml index 0a7e81eb33..b5471cd7a4 100644 --- a/sdk/Cargo.toml +++ b/sdk/Cargo.toml @@ -45,7 +45,7 @@ iota-crypto = { version = "0.23.0", default-features = false, features = [ "secp256k1", ] } iterator-sorted = { version = "0.1.0", default-features = false } -packable = { version = "0.8.3", default-features = false, features = [ +packable = { version = "0.9.0", default-features = false, features = [ "primitive-types", ] } paste = { version = "1.0.14", default-features = false } diff --git a/sdk/src/types/block/address/multi.rs b/sdk/src/types/block/address/multi.rs index e66da44416..b4f59e2284 100644 --- a/sdk/src/types/block/address/multi.rs +++ b/sdk/src/types/block/address/multi.rs @@ -6,14 +6,7 @@ use core::{fmt, ops::RangeInclusive}; use derive_more::{AsRef, Deref, Display, From}; use iterator_sorted::is_unique_sorted; -use packable::{ - bounded::BoundedU8, - error::{UnpackError, UnpackErrorExt}, - packer::Packer, - prefix::BoxedSlicePrefix, - unpacker::Unpacker, - Packable, -}; +use packable::{bounded::BoundedU8, prefix::BoxedSlicePrefix, Packable}; use crate::types::block::{address::Address, output::StorageScore, Error}; @@ -77,12 +70,17 @@ fn verify_weight(weight: &u8, _visitor: &()) -> Result<(), E /// An address that consists of addresses with weights and a threshold value. /// The Multi Address can be unlocked if the cumulative weight of all unlocked addresses is equal to or exceeds the /// threshold. -#[derive(Clone, Debug, Deref, Eq, PartialEq, Ord, PartialOrd, Hash)] +#[derive(Clone, Debug, Deref, Eq, PartialEq, Ord, PartialOrd, Hash, Packable)] +#[packable(unpack_error = Error)] +#[packable(verify_with = verify_multi_address)] pub struct MultiAddress { /// The weighted unlocked addresses. #[deref] + #[packable(verify_with = verify_addresses)] + #[packable(unpack_error_with = |e| e.unwrap_item_err_or_else(|p| Error::InvalidWeightedAddressCount(p.into())))] addresses: BoxedSlicePrefix, /// The threshold that needs to be reached by the unlocked addresses in order to unlock the multi address. + #[packable(verify_with = verify_threshold)] threshold: u16, } @@ -103,9 +101,11 @@ impl MultiAddress { let addresses = BoxedSlicePrefix::::try_from(addresses) .map_err(Error::InvalidWeightedAddressCount)?; - verify_cumulative_weight::(&addresses, &threshold, &())?; + let multi_address = Self { addresses, threshold }; - Ok(Self { addresses, threshold }) + verify_multi_address::(&multi_address, &())?; + + Ok(multi_address) } /// Returns the addresses of a [`MultiAddress`]. @@ -121,38 +121,6 @@ impl MultiAddress { } } -impl Packable for MultiAddress { - type UnpackError = Error; - type UnpackVisitor = (); - - #[inline] - fn pack(&self, packer: &mut P) -> Result<(), P::Error> { - self.addresses.pack(packer)?; - self.threshold.pack(packer)?; - - Ok(()) - } - - #[inline] - fn unpack( - unpacker: &mut U, - visitor: &Self::UnpackVisitor, - ) -> Result> { - let addresses = - BoxedSlicePrefix::::unpack::<_, VERIFY>(unpacker, visitor) - .map_packable_err(|e| e.unwrap_item_err_or_else(|e| Error::InvalidWeightedAddressCount(e.into())))?; - - verify_addresses::(&addresses, &()).map_err(UnpackError::Packable)?; - - let threshold = u16::unpack::<_, VERIFY>(unpacker, visitor).coerce()?; - - verify_threshold::(&threshold, &()).map_err(UnpackError::Packable)?; - verify_cumulative_weight::(&addresses, &threshold, &()).map_err(UnpackError::Packable)?; - - Ok(Self { addresses, threshold }) - } -} - fn verify_addresses(addresses: &[WeightedAddress], _visitor: &()) -> Result<(), Error> { if VERIFY && !is_unique_sorted(addresses.iter().map(WeightedAddress::address)) { return Err(Error::WeightedAddressesNotUniqueSorted); @@ -169,18 +137,14 @@ fn verify_threshold(threshold: &u16, _visitor: &()) -> Resul } } -fn verify_cumulative_weight( - addresses: &[WeightedAddress], - threshold: &u16, - _visitor: &(), -) -> Result<(), Error> { +fn verify_multi_address(address: &MultiAddress, _visitor: &()) -> Result<(), Error> { if VERIFY { - let cumulative_weight = addresses.iter().map(|address| address.weight as u16).sum::(); + let cumulative_weight = address.iter().map(|address| address.weight as u16).sum::(); - if cumulative_weight < *threshold { + if cumulative_weight < address.threshold { return Err(Error::InvalidMultiAddressCumulativeWeight { cumulative_weight, - threshold: *threshold, + threshold: address.threshold, }); } } diff --git a/sdk/src/types/block/core/basic.rs b/sdk/src/types/block/core/basic.rs index 5535c70075..1ce750986e 100644 --- a/sdk/src/types/block/core/basic.rs +++ b/sdk/src/types/block/core/basic.rs @@ -1,12 +1,7 @@ // Copyright 2023 IOTA Stiftung // SPDX-License-Identifier: Apache-2.0 -use packable::{ - error::{UnpackError, UnpackErrorExt}, - packer::Packer, - unpacker::Unpacker, - Packable, -}; +use packable::Packable; use crate::types::block::{ core::{parent::verify_parents_sets, Block, Parents}, @@ -107,7 +102,10 @@ impl From for BasicBlockBuilder { } } -#[derive(Clone, Debug, Eq, PartialEq)] +#[derive(Clone, Debug, Eq, PartialEq, Packable)] +#[packable(unpack_error = Error)] +#[packable(unpack_visitor = ProtocolParameters)] +#[packable(verify_with = verify_basic_block)] pub struct BasicBlock { /// Blocks that are strongly directly approved. strong_parents: StrongParents, @@ -156,45 +154,16 @@ impl BasicBlock { } } -impl Packable for BasicBlock { - type UnpackError = Error; - type UnpackVisitor = ProtocolParameters; - - fn pack(&self, packer: &mut P) -> Result<(), P::Error> { - self.strong_parents.pack(packer)?; - self.weak_parents.pack(packer)?; - self.shallow_like_parents.pack(packer)?; - self.payload.pack(packer)?; - self.max_burned_mana.pack(packer)?; - - Ok(()) +fn verify_basic_block(basic_block: &BasicBlock, _: &ProtocolParameters) -> Result<(), Error> { + if VERIFY { + verify_parents_sets( + &basic_block.strong_parents, + &basic_block.weak_parents, + &basic_block.shallow_like_parents, + )?; } - fn unpack( - unpacker: &mut U, - visitor: &Self::UnpackVisitor, - ) -> Result> { - let strong_parents = StrongParents::unpack::<_, VERIFY>(unpacker, &())?; - let weak_parents = WeakParents::unpack::<_, VERIFY>(unpacker, &())?; - let shallow_like_parents = ShallowLikeParents::unpack::<_, VERIFY>(unpacker, &())?; - - if VERIFY { - verify_parents_sets(&strong_parents, &weak_parents, &shallow_like_parents) - .map_err(UnpackError::Packable)?; - } - - let payload = OptionalPayload::unpack::<_, VERIFY>(unpacker, visitor)?; - - let max_burned_mana = u64::unpack::<_, VERIFY>(unpacker, &()).coerce()?; - - Ok(Self { - strong_parents, - weak_parents, - shallow_like_parents, - payload, - max_burned_mana, - }) - } + Ok(()) } #[cfg(feature = "serde")] diff --git a/sdk/src/types/block/core/mod.rs b/sdk/src/types/block/core/mod.rs index a6f8b6cd9d..c873d35dff 100644 --- a/sdk/src/types/block/core/mod.rs +++ b/sdk/src/types/block/core/mod.rs @@ -10,12 +10,7 @@ use alloc::boxed::Box; use crypto::hashes::{blake2b::Blake2b256, Digest}; use derive_more::From; -use packable::{ - error::{UnpackError, UnpackErrorExt}, - packer::Packer, - unpacker::Unpacker, - Packable, PackableExt, -}; +use packable::{Packable, PackableExt}; pub use self::{ basic::{BasicBlock, BasicBlockBuilder}, @@ -28,9 +23,14 @@ use crate::types::block::{ Error, }; -#[derive(Clone, Debug, Eq, PartialEq, From)] +#[derive(Clone, Debug, Eq, PartialEq, From, Packable)] +#[packable(unpack_error = Error)] +#[packable(unpack_visitor = ProtocolParameters)] +#[packable(tag_type = u8, with_error = Error::InvalidBlockKind)] pub enum Block { + #[packable(tag = BasicBlock::KIND)] Basic(Box), + #[packable(tag = ValidationBlock::KIND)] Validation(Box), } @@ -102,37 +102,6 @@ impl Block { } } -impl Packable for Block { - type UnpackError = Error; - type UnpackVisitor = ProtocolParameters; - - fn pack(&self, packer: &mut P) -> Result<(), P::Error> { - match self { - Self::Basic(block) => { - BasicBlock::KIND.pack(packer)?; - block.pack(packer) - } - Self::Validation(block) => { - ValidationBlock::KIND.pack(packer)?; - block.pack(packer) - } - }?; - - Ok(()) - } - - fn unpack( - unpacker: &mut U, - visitor: &Self::UnpackVisitor, - ) -> Result> { - Ok(match u8::unpack::<_, VERIFY>(unpacker, &()).coerce()? { - BasicBlock::KIND => Self::from(BasicBlock::unpack::<_, VERIFY>(unpacker, visitor).coerce()?), - ValidationBlock::KIND => Self::from(ValidationBlock::unpack::<_, VERIFY>(unpacker, visitor).coerce()?), - k => return Err(UnpackError::Packable(Error::InvalidBlockKind(k))), - }) - } -} - #[cfg(feature = "serde")] pub(crate) mod dto { use alloc::format; diff --git a/sdk/src/types/block/core/validation.rs b/sdk/src/types/block/core/validation.rs index f93970c41b..3e37275bc7 100644 --- a/sdk/src/types/block/core/validation.rs +++ b/sdk/src/types/block/core/validation.rs @@ -1,12 +1,7 @@ // Copyright 2023 IOTA Stiftung // SPDX-License-Identifier: Apache-2.0 -use packable::{ - error::{UnpackError, UnpackErrorExt}, - packer::Packer, - unpacker::Unpacker, - Packable, -}; +use packable::Packable; use crate::types::block::{ core::{parent::verify_parents_sets, Block, Parents}, @@ -113,7 +108,10 @@ impl From for ValidationBlockBuilder { /// A Validation Block is a special type of block used by validators to secure the network. It is recognized by the /// Congestion Control of the IOTA 2.0 protocol and can be issued without burning Mana within the constraints of the /// allowed validator throughput. It is allowed to reference more parent blocks than a normal Basic Block. -#[derive(Clone, Debug, Eq, PartialEq)] +#[derive(Clone, Debug, Eq, PartialEq, Packable)] +#[packable(unpack_error = Error)] +#[packable(unpack_visitor = ProtocolParameters)] +#[packable(verify_with = verify_validation_block)] pub struct ValidationBlock { /// Blocks that are strongly directly approved. strong_parents: StrongParents, @@ -124,6 +122,7 @@ pub struct ValidationBlock { /// The highest supported protocol version the issuer of this block supports. highest_supported_version: u8, /// The hash of the protocol parameters for the Highest Supported Version. + #[packable(verify_with = verify_protocol_parameters_hash)] protocol_parameters_hash: ProtocolParametersHash, } @@ -161,59 +160,34 @@ impl ValidationBlock { } } -impl Packable for ValidationBlock { - type UnpackError = Error; - type UnpackVisitor = ProtocolParameters; - - fn pack(&self, packer: &mut P) -> Result<(), P::Error> { - self.strong_parents.pack(packer)?; - self.weak_parents.pack(packer)?; - self.shallow_like_parents.pack(packer)?; - self.highest_supported_version.pack(packer)?; - self.protocol_parameters_hash.pack(packer)?; - - Ok(()) - } - - fn unpack( - unpacker: &mut U, - visitor: &Self::UnpackVisitor, - ) -> Result> { - let strong_parents = StrongParents::unpack::<_, VERIFY>(unpacker, &())?; - let weak_parents = WeakParents::unpack::<_, VERIFY>(unpacker, &())?; - let shallow_like_parents = ShallowLikeParents::unpack::<_, VERIFY>(unpacker, &())?; - - if VERIFY { - verify_parents_sets(&strong_parents, &weak_parents, &shallow_like_parents) - .map_err(UnpackError::Packable)?; - } - - let highest_supported_version = u8::unpack::<_, VERIFY>(unpacker, &()).coerce()?; - - let protocol_parameters_hash = ProtocolParametersHash::unpack::<_, VERIFY>(unpacker, &()).coerce()?; - - if VERIFY { - validate_protocol_params_hash(&protocol_parameters_hash, visitor).map_err(UnpackError::Packable)?; +fn verify_protocol_parameters_hash( + hash: &ProtocolParametersHash, + params: &ProtocolParameters, +) -> Result<(), Error> { + if VERIFY { + let params_hash = params.hash(); + + if hash != ¶ms_hash { + return Err(Error::InvalidProtocolParametersHash { + expected: params_hash, + actual: *hash, + }); } - - Ok(Self { - strong_parents, - weak_parents, - shallow_like_parents, - highest_supported_version, - protocol_parameters_hash, - }) } -} -fn validate_protocol_params_hash(hash: &ProtocolParametersHash, params: &ProtocolParameters) -> Result<(), Error> { - let params_hash = params.hash(); + Ok(()) +} - if hash != ¶ms_hash { - return Err(Error::InvalidProtocolParametersHash { - expected: params_hash, - actual: *hash, - }); +fn verify_validation_block( + validation_block: &ValidationBlock, + _: &ProtocolParameters, +) -> Result<(), Error> { + if VERIFY { + verify_parents_sets( + &validation_block.strong_parents, + &validation_block.weak_parents, + &validation_block.shallow_like_parents, + )?; } Ok(()) @@ -262,7 +236,7 @@ pub(crate) mod dto { fn try_from_dto_with_params_inner(dto: Self::Dto, params: ValidationParams<'_>) -> Result { if let Some(protocol_params) = params.protocol_parameters() { - validate_protocol_params_hash(&dto.protocol_parameters_hash, protocol_params)?; + verify_protocol_parameters_hash::(&dto.protocol_parameters_hash, protocol_params)?; } ValidationBlockBuilder::new( diff --git a/sdk/src/types/block/mana/allotment.rs b/sdk/src/types/block/mana/allotment.rs index 16ad2ff509..fbb319f4d2 100644 --- a/sdk/src/types/block/mana/allotment.rs +++ b/sdk/src/types/block/mana/allotment.rs @@ -1,20 +1,18 @@ // Copyright 2023 IOTA Stiftung // SPDX-License-Identifier: Apache-2.0 -use packable::{ - error::{UnpackError, UnpackErrorExt}, - packer::Packer, - unpacker::Unpacker, - Packable, -}; +use packable::Packable; use crate::types::block::{output::AccountId, protocol::ProtocolParameters, Error}; /// An allotment of Mana which will be added upon commitment of the slot in which the containing transaction was issued, /// in the form of Block Issuance Credits to the account. -#[derive(Copy, Clone, Debug, Eq, PartialEq)] +#[derive(Copy, Clone, Debug, Eq, PartialEq, Packable)] +#[packable(unpack_error = Error)] +#[packable(unpack_visitor = ProtocolParameters)] pub struct ManaAllotment { pub(crate) account_id: AccountId, + #[packable(verify_with = verify_mana)] pub(crate) mana: u64, } @@ -32,9 +30,8 @@ impl Ord for ManaAllotment { impl ManaAllotment { pub fn new(account_id: AccountId, mana: u64, protocol_params: &ProtocolParameters) -> Result { - if mana > protocol_params.mana_parameters().max_mana() { - return Err(Error::InvalidManaValue(mana)); - } + verify_mana::(&mana, protocol_params)?; + Ok(Self { account_id, mana }) } @@ -47,26 +44,12 @@ impl ManaAllotment { } } -impl Packable for ManaAllotment { - type UnpackError = Error; - type UnpackVisitor = ProtocolParameters; - - fn pack(&self, packer: &mut P) -> Result<(), P::Error> { - self.account_id.pack(packer)?; - self.mana.pack(packer)?; - - Ok(()) +fn verify_mana(mana: &u64, params: &ProtocolParameters) -> Result<(), Error> { + if VERIFY && *mana > params.mana_parameters().max_mana() { + return Err(Error::InvalidManaValue(*mana)); } - fn unpack( - unpacker: &mut U, - visitor: &Self::UnpackVisitor, - ) -> Result> { - let account_id = AccountId::unpack::<_, VERIFY>(unpacker, &()).coerce()?; - let mana = u64::unpack::<_, VERIFY>(unpacker, &()).coerce()?; - - Self::new(account_id, mana, visitor).map_err(UnpackError::Packable) - } + Ok(()) } #[cfg(feature = "serde")] diff --git a/sdk/src/types/block/output/mod.rs b/sdk/src/types/block/output/mod.rs index dd4de9391a..0bdc494244 100644 --- a/sdk/src/types/block/output/mod.rs +++ b/sdk/src/types/block/output/mod.rs @@ -27,12 +27,7 @@ pub mod unlock_condition; use core::ops::RangeInclusive; use derive_more::From; -use packable::{ - error::{UnpackError, UnpackErrorExt}, - packer::Packer, - unpacker::Unpacker, - Packable, -}; +use packable::Packable; pub use self::{ account::{AccountId, AccountOutput, AccountOutputBuilder}, @@ -111,19 +106,28 @@ impl OutputWithMetadata { } /// A generic output that can represent different types defining the deposit of funds. -#[derive(Clone, Eq, PartialEq, Ord, PartialOrd, Hash, From)] +#[derive(Clone, Eq, PartialEq, Ord, PartialOrd, Hash, From, Packable)] +#[packable(unpack_error = Error)] +#[packable(unpack_visitor = ProtocolParameters)] +#[packable(tag_type = u8, with_error = Error::InvalidOutputKind)] pub enum Output { /// A basic output. + #[packable(tag = BasicOutput::KIND)] Basic(BasicOutput), /// An account output. + #[packable(tag = AccountOutput::KIND)] Account(AccountOutput), /// An anchor output. + #[packable(tag = AnchorOutput::KIND)] Anchor(AnchorOutput), /// A foundry output. + #[packable(tag = FoundryOutput::KIND)] Foundry(FoundryOutput), /// An NFT output. + #[packable(tag = NftOutput::KIND)] Nft(NftOutput), /// A delegation output. + #[packable(tag = DelegationOutput::KIND)] Delegation(DelegationOutput), } @@ -382,57 +386,6 @@ impl Output { } } -impl Packable for Output { - type UnpackError = Error; - type UnpackVisitor = ProtocolParameters; - - fn pack(&self, packer: &mut P) -> Result<(), P::Error> { - match self { - Self::Basic(output) => { - BasicOutput::KIND.pack(packer)?; - output.pack(packer) - } - Self::Account(output) => { - AccountOutput::KIND.pack(packer)?; - output.pack(packer) - } - Self::Anchor(output) => { - AnchorOutput::KIND.pack(packer)?; - output.pack(packer) - } - Self::Foundry(output) => { - FoundryOutput::KIND.pack(packer)?; - output.pack(packer) - } - Self::Nft(output) => { - NftOutput::KIND.pack(packer)?; - output.pack(packer) - } - Self::Delegation(output) => { - DelegationOutput::KIND.pack(packer)?; - output.pack(packer) - } - }?; - - Ok(()) - } - - fn unpack( - unpacker: &mut U, - visitor: &Self::UnpackVisitor, - ) -> Result> { - Ok(match u8::unpack::<_, VERIFY>(unpacker, &()).coerce()? { - BasicOutput::KIND => Self::from(BasicOutput::unpack::<_, VERIFY>(unpacker, visitor).coerce()?), - AccountOutput::KIND => Self::from(AccountOutput::unpack::<_, VERIFY>(unpacker, visitor).coerce()?), - AnchorOutput::KIND => Self::from(AnchorOutput::unpack::<_, VERIFY>(unpacker, visitor).coerce()?), - FoundryOutput::KIND => Self::from(FoundryOutput::unpack::<_, VERIFY>(unpacker, visitor).coerce()?), - NftOutput::KIND => Self::from(NftOutput::unpack::<_, VERIFY>(unpacker, visitor).coerce()?), - DelegationOutput::KIND => Self::from(DelegationOutput::unpack::<_, VERIFY>(unpacker, visitor).coerce()?), - k => return Err(UnpackError::Packable(Error::InvalidOutputKind(k))), - }) - } -} - impl StorageScore for Output { fn storage_score(&self, params: StorageScoreParameters) -> u64 { match self { diff --git a/sdk/src/types/block/output/token_scheme/simple.rs b/sdk/src/types/block/output/token_scheme/simple.rs index 229ba6b905..b675bcbc69 100644 --- a/sdk/src/types/block/output/token_scheme/simple.rs +++ b/sdk/src/types/block/output/token_scheme/simple.rs @@ -1,18 +1,15 @@ // Copyright 2022 IOTA Stiftung // SPDX-License-Identifier: Apache-2.0 -use packable::{ - error::{UnpackError, UnpackErrorExt}, - packer::Packer, - unpacker::Unpacker, - Packable, -}; +use packable::Packable; use primitive_types::U256; use crate::types::block::Error; /// -#[derive(Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)] +#[derive(Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Packable)] +#[packable(unpack_error = Error)] +#[packable(verify_with = verify_simple_token_scheme)] pub struct SimpleTokenScheme { // Amount of tokens minted by a foundry. minted_tokens: U256, @@ -37,13 +34,15 @@ impl SimpleTokenScheme { let melted_tokens = melted_tokens.into(); let maximum_supply = maximum_supply.into(); - verify_supply(&minted_tokens, &melted_tokens, &maximum_supply)?; - - Ok(Self { + let token_scheme = Self { minted_tokens, melted_tokens, maximum_supply, - }) + }; + + verify_simple_token_scheme::(&token_scheme, &())?; + + Ok(token_scheme) } /// Returns the number of minted tokens of the [`SimpleTokenScheme`]. @@ -71,45 +70,20 @@ impl SimpleTokenScheme { } } -impl Packable for SimpleTokenScheme { - type UnpackError = Error; - type UnpackVisitor = (); - - fn pack(&self, packer: &mut P) -> Result<(), P::Error> { - self.minted_tokens.pack(packer)?; - self.melted_tokens.pack(packer)?; - self.maximum_supply.pack(packer)?; - - Ok(()) - } - - fn unpack( - unpacker: &mut U, - visitor: &Self::UnpackVisitor, - ) -> Result> { - let minted_tokens = U256::unpack::<_, VERIFY>(unpacker, visitor).coerce()?; - let melted_tokens = U256::unpack::<_, VERIFY>(unpacker, visitor).coerce()?; - let maximum_supply = U256::unpack::<_, VERIFY>(unpacker, visitor).coerce()?; - - if VERIFY { - verify_supply(&minted_tokens, &melted_tokens, &maximum_supply).map_err(UnpackError::Packable)?; - } - - Ok(Self { - minted_tokens, - melted_tokens, - maximum_supply, - }) - } -} - #[inline] -fn verify_supply(minted_tokens: &U256, melted_tokens: &U256, maximum_supply: &U256) -> Result<(), Error> { - if maximum_supply.is_zero() || melted_tokens > minted_tokens || minted_tokens - melted_tokens > *maximum_supply { +fn verify_simple_token_scheme( + token_scheme: &SimpleTokenScheme, + _visitor: &(), +) -> Result<(), Error> { + if VERIFY + && (token_scheme.maximum_supply.is_zero() + || token_scheme.melted_tokens > token_scheme.minted_tokens + || token_scheme.minted_tokens - token_scheme.melted_tokens > token_scheme.maximum_supply) + { return Err(Error::InvalidFoundryOutputSupply { - minted: *minted_tokens, - melted: *melted_tokens, - max: *maximum_supply, + minted: token_scheme.minted_tokens, + melted: token_scheme.melted_tokens, + max: token_scheme.maximum_supply, }); } diff --git a/sdk/src/types/block/output/unlock_condition/mod.rs b/sdk/src/types/block/output/unlock_condition/mod.rs index ec53550580..0c3e2d3d70 100644 --- a/sdk/src/types/block/output/unlock_condition/mod.rs +++ b/sdk/src/types/block/output/unlock_condition/mod.rs @@ -14,14 +14,7 @@ use alloc::{boxed::Box, collections::BTreeSet, vec::Vec}; use bitflags::bitflags; use derive_more::{Deref, From}; use iterator_sorted::is_unique_sorted; -use packable::{ - bounded::BoundedU8, - error::{UnpackError, UnpackErrorExt}, - packer::Packer, - prefix::BoxedSlicePrefix, - unpacker::Unpacker, - Packable, -}; +use packable::{bounded::BoundedU8, prefix::BoxedSlicePrefix, Packable}; pub use self::{ address::AddressUnlockCondition, expiration::ExpirationUnlockCondition, @@ -39,21 +32,31 @@ use crate::types::block::{ }; /// -#[derive(Clone, Eq, PartialEq, Hash, From)] +#[derive(Clone, Eq, PartialEq, Hash, From, Packable)] +#[packable(unpack_error = Error)] +#[packable(unpack_visitor = ProtocolParameters)] +#[packable(tag_type = u8, with_error = Error::InvalidUnlockConditionKind)] pub enum UnlockCondition { /// An address unlock condition. + #[packable(tag = AddressUnlockCondition::KIND)] Address(AddressUnlockCondition), /// A storage deposit return unlock condition. + #[packable(tag = StorageDepositReturnUnlockCondition::KIND)] StorageDepositReturn(StorageDepositReturnUnlockCondition), /// A timelock unlock condition. + #[packable(tag = TimelockUnlockCondition::KIND)] Timelock(TimelockUnlockCondition), /// An expiration unlock condition. + #[packable(tag = ExpirationUnlockCondition::KIND)] Expiration(ExpirationUnlockCondition), /// A state controller address unlock condition. + #[packable(tag = StateControllerAddressUnlockCondition::KIND)] StateControllerAddress(StateControllerAddressUnlockCondition), /// A governor address unlock condition. + #[packable(tag = GovernorAddressUnlockCondition::KIND)] GovernorAddress(GovernorAddressUnlockCondition), /// An immutable account address unlock condition. + #[packable(tag = ImmutableAccountAddressUnlockCondition::KIND)] ImmutableAccountAddress(ImmutableAccountAddressUnlockCondition), } @@ -149,76 +152,6 @@ crate::create_bitflags!( ] ); -impl Packable for UnlockCondition { - type UnpackError = Error; - type UnpackVisitor = ProtocolParameters; - - fn pack(&self, packer: &mut P) -> Result<(), P::Error> { - match self { - Self::Address(unlock_condition) => { - AddressUnlockCondition::KIND.pack(packer)?; - unlock_condition.pack(packer) - } - Self::StorageDepositReturn(unlock_condition) => { - StorageDepositReturnUnlockCondition::KIND.pack(packer)?; - unlock_condition.pack(packer) - } - Self::Timelock(unlock_condition) => { - TimelockUnlockCondition::KIND.pack(packer)?; - unlock_condition.pack(packer) - } - Self::Expiration(unlock_condition) => { - ExpirationUnlockCondition::KIND.pack(packer)?; - unlock_condition.pack(packer) - } - Self::StateControllerAddress(unlock_condition) => { - StateControllerAddressUnlockCondition::KIND.pack(packer)?; - unlock_condition.pack(packer) - } - Self::GovernorAddress(unlock_condition) => { - GovernorAddressUnlockCondition::KIND.pack(packer)?; - unlock_condition.pack(packer) - } - Self::ImmutableAccountAddress(unlock_condition) => { - ImmutableAccountAddressUnlockCondition::KIND.pack(packer)?; - unlock_condition.pack(packer) - } - }?; - - Ok(()) - } - - fn unpack( - unpacker: &mut U, - visitor: &Self::UnpackVisitor, - ) -> Result> { - Ok(match u8::unpack::<_, VERIFY>(unpacker, &()).coerce()? { - AddressUnlockCondition::KIND => { - Self::from(AddressUnlockCondition::unpack::<_, VERIFY>(unpacker, &()).coerce()?) - } - StorageDepositReturnUnlockCondition::KIND => { - Self::from(StorageDepositReturnUnlockCondition::unpack::<_, VERIFY>(unpacker, visitor).coerce()?) - } - TimelockUnlockCondition::KIND => { - Self::from(TimelockUnlockCondition::unpack::<_, VERIFY>(unpacker, &()).coerce()?) - } - ExpirationUnlockCondition::KIND => { - Self::from(ExpirationUnlockCondition::unpack::<_, VERIFY>(unpacker, &()).coerce()?) - } - StateControllerAddressUnlockCondition::KIND => { - Self::from(StateControllerAddressUnlockCondition::unpack::<_, VERIFY>(unpacker, &()).coerce()?) - } - GovernorAddressUnlockCondition::KIND => { - Self::from(GovernorAddressUnlockCondition::unpack::<_, VERIFY>(unpacker, &()).coerce()?) - } - ImmutableAccountAddressUnlockCondition::KIND => { - Self::from(ImmutableAccountAddressUnlockCondition::unpack::<_, VERIFY>(unpacker, &()).coerce()?) - } - k => return Err(UnpackError::Packable(Error::InvalidOutputKind(k))), - }) - } -} - pub(crate) type UnlockConditionCount = BoundedU8<0, { UnlockConditions::COUNT_MAX }>; /// diff --git a/sdk/src/types/block/payload/candidacy_announcement.rs b/sdk/src/types/block/payload/candidacy_announcement.rs index 0934e05cdd..b21916515b 100644 --- a/sdk/src/types/block/payload/candidacy_announcement.rs +++ b/sdk/src/types/block/payload/candidacy_announcement.rs @@ -1,8 +1,10 @@ // Copyright 2023 IOTA Stiftung // SPDX-License-Identifier: Apache-2.0 +use packable::Packable; + /// A payload which is used to indicate candidacy for committee selection for the next epoch. -#[derive(Clone, Debug, Eq, PartialEq)] +#[derive(Clone, Debug, Eq, PartialEq, Packable)] pub struct CandidacyAnnouncementPayload; impl CandidacyAnnouncementPayload { diff --git a/sdk/src/types/block/payload/mod.rs b/sdk/src/types/block/payload/mod.rs index 8a86eb63e4..c88fcad25f 100644 --- a/sdk/src/types/block/payload/mod.rs +++ b/sdk/src/types/block/payload/mod.rs @@ -29,13 +29,19 @@ pub(crate) use self::{ use crate::types::block::{protocol::ProtocolParameters, Error}; /// A generic payload that can represent different types defining block payloads. -#[derive(Clone, Eq, PartialEq, From)] +#[derive(Clone, Eq, PartialEq, From, Packable)] +#[packable(unpack_error = Error)] +#[packable(unpack_visitor = ProtocolParameters)] +#[packable(tag_type = u8, with_error = Error::InvalidPayloadKind)] pub enum Payload { /// A tagged data payload. + #[packable(tag = TaggedDataPayload::KIND)] TaggedData(Box), /// A signed transaction payload. + #[packable(tag = SignedTransactionPayload::KIND)] SignedTransaction(Box), /// A candidacy announcement payload. + #[packable(tag = CandidacyAnnouncementPayload::KIND)] CandidacyAnnouncement(CandidacyAnnouncementPayload), } @@ -74,41 +80,6 @@ impl Payload { crate::def_is_as_opt!(Payload: SignedTransaction, TaggedData); } -impl Packable for Payload { - type UnpackError = Error; - type UnpackVisitor = ProtocolParameters; - - fn pack(&self, packer: &mut P) -> Result<(), P::Error> { - match self { - Self::TaggedData(tagged_data) => { - TaggedDataPayload::KIND.pack(packer)?; - tagged_data.pack(packer) - } - Self::SignedTransaction(transaction) => { - SignedTransactionPayload::KIND.pack(packer)?; - transaction.pack(packer) - } - Self::CandidacyAnnouncement(_) => CandidacyAnnouncementPayload::KIND.pack(packer), - }?; - - Ok(()) - } - - fn unpack( - unpacker: &mut U, - visitor: &Self::UnpackVisitor, - ) -> Result> { - Ok(match u8::unpack::<_, VERIFY>(unpacker, &()).coerce()? { - TaggedDataPayload::KIND => Self::from(TaggedDataPayload::unpack::<_, VERIFY>(unpacker, &()).coerce()?), - SignedTransactionPayload::KIND => { - Self::from(SignedTransactionPayload::unpack::<_, VERIFY>(unpacker, visitor).coerce()?) - } - CandidacyAnnouncementPayload::KIND => Self::from(CandidacyAnnouncementPayload), - k => return Err(UnpackError::Packable(Error::InvalidPayloadKind(k))), - }) - } -} - /// Representation of an optional [`Payload`]. /// Essentially an `Option` with a different [`Packable`] implementation, to conform to specs. #[derive(Clone, Debug, Default, Eq, PartialEq)] diff --git a/sdk/src/types/fuzz/Cargo.toml b/sdk/src/types/fuzz/Cargo.toml index 44190bc39e..787a244911 100644 --- a/sdk/src/types/fuzz/Cargo.toml +++ b/sdk/src/types/fuzz/Cargo.toml @@ -12,7 +12,7 @@ cargo-fuzz = true iota-types = { path = "..", default-features = false } libfuzzer-sys = { version = "0.4.7", default-features = false } -packable = { version = "0.8.3", default-features = false } +packable = { version = "0.9.0", default-features = false } # Prevent this from interfering with workspaces [workspace] From b0231e103f7e7c9257dfc2ee9cc6df871a44f1bf Mon Sep 17 00:00:00 2001 From: Thoralf-M <46689931+Thoralf-M@users.noreply.github.com> Date: Thu, 16 Nov 2023 14:37:06 +0100 Subject: [PATCH 37/91] Fix running nodejs examples with npm (#1628) --- bindings/nodejs/examples/package-lock.json | 7644 ++++++++++++++++- bindings/nodejs/examples/package.json | 3 +- bindings/nodejs/examples/yarn.lock | 1208 +-- bindings/nodejs/package-lock.json | 3873 +++++++-- bindings/nodejs/yarn.lock | 8752 ++++++++++---------- 5 files changed, 15547 insertions(+), 5933 deletions(-) diff --git a/bindings/nodejs/examples/package-lock.json b/bindings/nodejs/examples/package-lock.json index aebd0a66e0..0a80dbd7ae 100644 --- a/bindings/nodejs/examples/package-lock.json +++ b/bindings/nodejs/examples/package-lock.json @@ -8,23 +8,31 @@ "name": "examples", "version": "1.0.0", "dependencies": { - "@iota/sdk": "../", - "dotenv": "^16.0.0" + "@iota/sdk": "file:../", + "class-transformer": "^0.5.1", + "dotenv": "^16.0.0", + "ts-node": "^10.9.1" }, "devDependencies": { - "@types/node": "^17.0.26", - "typescript": "^4.6.3" + "@ethereumjs/common": "^3.1.2", + "@ethereumjs/rlp": "^4.0.1", + "@ethereumjs/tx": "^4.1.2", + "@ethereumjs/util": "^8.0.6", + "typescript": "^4.6.3", + "web3": "^1.10.0" } }, "..": { - "version": "0.1.0", + "name": "@iota/sdk", + "version": "1.1.3", "hasInstallScript": true, "license": "Apache-2.0", "dependencies": { - "@iota/types": "^1.0.0-beta.15", "@types/node": "^18.15.12", "cargo-cp-artifact": "^0.1.6", + "class-transformer": "^0.5.1", "prebuild-install": "^7.1.1", + "reflect-metadata": "^0.1.13", "typescript": "^4.9.4" }, "devDependencies": { @@ -37,86 +45,7604 @@ "eslint-config-prettier": "^8.5.0", "jest": "^29.4.2", "jest-matcher-utils": "^29.5.0", - "prebuild": "^11.0.4", + "prebuild": "^12.1.0", "prettier": "^2.8.3", "ts-jest": "^29.0.5", "typedoc": "^0.24.6", - "typedoc-plugin-markdown": "^3.14.0" + "typedoc-plugin-markdown": "^3.14.0", + "webpack": "^5.88.2", + "webpack-cli": "^5.1.4" + } + }, + "node_modules/@cspotcode/source-map-support": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", + "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", + "dependencies": { + "@jridgewell/trace-mapping": "0.3.9" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@ethereumjs/common": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/@ethereumjs/common/-/common-3.2.0.tgz", + "integrity": "sha512-pksvzI0VyLgmuEF2FA/JR/4/y6hcPq8OUail3/AvycBaW1d5VSauOZzqGvJ3RTmR4MU35lWE8KseKOsEhrFRBA==", + "dev": true, + "dependencies": { + "@ethereumjs/util": "^8.1.0", + "crc-32": "^1.2.0" + } + }, + "node_modules/@ethereumjs/rlp": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@ethereumjs/rlp/-/rlp-4.0.1.tgz", + "integrity": "sha512-tqsQiBQDQdmPWE1xkkBq4rlSW5QZpLOUJ5RJh2/9fug+q9tnUhuZoVLk7s0scUIKTOzEtR72DFBXI4WiZcMpvw==", + "dev": true, + "bin": { + "rlp": "bin/rlp" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/@ethereumjs/tx": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@ethereumjs/tx/-/tx-4.2.0.tgz", + "integrity": "sha512-1nc6VO4jtFd172BbSnTnDQVr9IYBFl1y4xPzZdtkrkKIncBCkdbgfdRV+MiTkJYAtTxvV12GRZLqBFT1PNK6Yw==", + "dev": true, + "dependencies": { + "@ethereumjs/common": "^3.2.0", + "@ethereumjs/rlp": "^4.0.1", + "@ethereumjs/util": "^8.1.0", + "ethereum-cryptography": "^2.0.0" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/@ethereumjs/util": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/@ethereumjs/util/-/util-8.1.0.tgz", + "integrity": "sha512-zQ0IqbdX8FZ9aw11vP+dZkKDkS+kgIvQPHnSAXzP9pLu+Rfu3D3XEeLbicvoXJTYnhZiPmsZUxgdzXwNKxRPbA==", + "dev": true, + "dependencies": { + "@ethereumjs/rlp": "^4.0.1", + "ethereum-cryptography": "^2.0.0", + "micro-ftch": "^0.3.1" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/@ethersproject/abi": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/abi/-/abi-5.7.0.tgz", + "integrity": "sha512-351ktp42TiRcYB3H1OP8yajPeAQstMW/yCFokj/AthP9bLHzQFPlOrxOcwYEDkUAICmOHljvN4K39OMTMUa9RA==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { + "@ethersproject/address": "^5.7.0", + "@ethersproject/bignumber": "^5.7.0", + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/constants": "^5.7.0", + "@ethersproject/hash": "^5.7.0", + "@ethersproject/keccak256": "^5.7.0", + "@ethersproject/logger": "^5.7.0", + "@ethersproject/properties": "^5.7.0", + "@ethersproject/strings": "^5.7.0" + } + }, + "node_modules/@ethersproject/abstract-provider": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/abstract-provider/-/abstract-provider-5.7.0.tgz", + "integrity": "sha512-R41c9UkchKCpAqStMYUpdunjo3pkEvZC3FAwZn5S5MGbXoMQOHIdHItezTETxAO5bevtMApSyEhn9+CHcDsWBw==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { + "@ethersproject/bignumber": "^5.7.0", + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/logger": "^5.7.0", + "@ethersproject/networks": "^5.7.0", + "@ethersproject/properties": "^5.7.0", + "@ethersproject/transactions": "^5.7.0", + "@ethersproject/web": "^5.7.0" + } + }, + "node_modules/@ethersproject/abstract-signer": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/abstract-signer/-/abstract-signer-5.7.0.tgz", + "integrity": "sha512-a16V8bq1/Cz+TGCkE2OPMTOUDLS3grCpdjoJCYNnVBbdYEMSgKrU0+B90s8b6H+ByYTBZN7a3g76jdIJi7UfKQ==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { + "@ethersproject/abstract-provider": "^5.7.0", + "@ethersproject/bignumber": "^5.7.0", + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/logger": "^5.7.0", + "@ethersproject/properties": "^5.7.0" + } + }, + "node_modules/@ethersproject/address": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/address/-/address-5.7.0.tgz", + "integrity": "sha512-9wYhYt7aghVGo758POM5nqcOMaE168Q6aRLJZwUmiqSrAungkG74gSSeKEIR7ukixesdRZGPgVqme6vmxs1fkA==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { + "@ethersproject/bignumber": "^5.7.0", + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/keccak256": "^5.7.0", + "@ethersproject/logger": "^5.7.0", + "@ethersproject/rlp": "^5.7.0" + } + }, + "node_modules/@ethersproject/base64": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/base64/-/base64-5.7.0.tgz", + "integrity": "sha512-Dr8tcHt2mEbsZr/mwTPIQAf3Ai0Bks/7gTw9dSqk1mQvhW3XvRlmDJr/4n+wg1JmCl16NZue17CDh8xb/vZ0sQ==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { + "@ethersproject/bytes": "^5.7.0" + } + }, + "node_modules/@ethersproject/bignumber": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/bignumber/-/bignumber-5.7.0.tgz", + "integrity": "sha512-n1CAdIHRWjSucQO3MC1zPSVgV/6dy/fjL9pMrPP9peL+QxEg9wOsVqwD4+818B6LUEtaXzVHQiuivzRoxPxUGw==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/logger": "^5.7.0", + "bn.js": "^5.2.1" + } + }, + "node_modules/@ethersproject/bignumber/node_modules/bn.js": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz", + "integrity": "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==", + "dev": true + }, + "node_modules/@ethersproject/bytes": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/bytes/-/bytes-5.7.0.tgz", + "integrity": "sha512-nsbxwgFXWh9NyYWo+U8atvmMsSdKJprTcICAkvbBffT75qDocbuggBU0SJiVK2MuTrp0q+xvLkTnGMPK1+uA9A==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { + "@ethersproject/logger": "^5.7.0" + } + }, + "node_modules/@ethersproject/constants": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/constants/-/constants-5.7.0.tgz", + "integrity": "sha512-DHI+y5dBNvkpYUMiRQyxRBYBefZkJfo70VUkUAsRjcPs47muV9evftfZ0PJVCXYbAiCgght0DtcF9srFQmIgWA==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { + "@ethersproject/bignumber": "^5.7.0" + } + }, + "node_modules/@ethersproject/hash": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/hash/-/hash-5.7.0.tgz", + "integrity": "sha512-qX5WrQfnah1EFnO5zJv1v46a8HW0+E5xuBBDTwMFZLuVTx0tbU2kkx15NqdjxecrLGatQN9FGQKpb1FKdHCt+g==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { + "@ethersproject/abstract-signer": "^5.7.0", + "@ethersproject/address": "^5.7.0", + "@ethersproject/base64": "^5.7.0", + "@ethersproject/bignumber": "^5.7.0", + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/keccak256": "^5.7.0", + "@ethersproject/logger": "^5.7.0", + "@ethersproject/properties": "^5.7.0", + "@ethersproject/strings": "^5.7.0" + } + }, + "node_modules/@ethersproject/keccak256": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/keccak256/-/keccak256-5.7.0.tgz", + "integrity": "sha512-2UcPboeL/iW+pSg6vZ6ydF8tCnv3Iu/8tUmLLzWWGzxWKFFqOBQFLo6uLUv6BDrLgCDfN28RJ/wtByx+jZ4KBg==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { + "@ethersproject/bytes": "^5.7.0", + "js-sha3": "0.8.0" + } + }, + "node_modules/@ethersproject/logger": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/logger/-/logger-5.7.0.tgz", + "integrity": "sha512-0odtFdXu/XHtjQXJYA3u9G0G8btm0ND5Cu8M7i5vhEcE8/HmF4Lbdqanwyv4uQTr2tx6b7fQRmgLrsnpQlmnig==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ] + }, + "node_modules/@ethersproject/networks": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/@ethersproject/networks/-/networks-5.7.1.tgz", + "integrity": "sha512-n/MufjFYv3yFcUyfhnXotyDlNdFb7onmkSy8aQERi2PjNcnWQ66xXxa3XlS8nCcA8aJKJjIIMNJTC7tu80GwpQ==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { + "@ethersproject/logger": "^5.7.0" + } + }, + "node_modules/@ethersproject/properties": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/properties/-/properties-5.7.0.tgz", + "integrity": "sha512-J87jy8suntrAkIZtecpxEPxY//szqr1mlBaYlQ0r4RCaiD2hjheqF9s1LVE8vVuJCXisjIP+JgtK/Do54ej4Sw==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { + "@ethersproject/logger": "^5.7.0" + } + }, + "node_modules/@ethersproject/rlp": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/rlp/-/rlp-5.7.0.tgz", + "integrity": "sha512-rBxzX2vK8mVF7b0Tol44t5Tb8gomOHkj5guL+HhzQ1yBh/ydjGnpw6at+X6Iw0Kp3OzzzkcKp8N9r0W4kYSs9w==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/logger": "^5.7.0" + } + }, + "node_modules/@ethersproject/signing-key": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/signing-key/-/signing-key-5.7.0.tgz", + "integrity": "sha512-MZdy2nL3wO0u7gkB4nA/pEf8lu1TlFswPNmy8AiYkfKTdO6eXBJyUdmHO/ehm/htHw9K/qF8ujnTyUAD+Ry54Q==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/logger": "^5.7.0", + "@ethersproject/properties": "^5.7.0", + "bn.js": "^5.2.1", + "elliptic": "6.5.4", + "hash.js": "1.1.7" + } + }, + "node_modules/@ethersproject/signing-key/node_modules/bn.js": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz", + "integrity": "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==", + "dev": true + }, + "node_modules/@ethersproject/strings": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/strings/-/strings-5.7.0.tgz", + "integrity": "sha512-/9nu+lj0YswRNSH0NXYqrh8775XNyEdUQAuf3f+SmOrnVewcJ5SBNAjF7lpgehKi4abvNNXyf+HX86czCdJ8Mg==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/constants": "^5.7.0", + "@ethersproject/logger": "^5.7.0" + } + }, + "node_modules/@ethersproject/transactions": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/transactions/-/transactions-5.7.0.tgz", + "integrity": "sha512-kmcNicCp1lp8qanMTC3RIikGgoJ80ztTyvtsFvCYpSCfkjhD0jZ2LOrnbcuxuToLIUYYf+4XwD1rP+B/erDIhQ==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { + "@ethersproject/address": "^5.7.0", + "@ethersproject/bignumber": "^5.7.0", + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/constants": "^5.7.0", + "@ethersproject/keccak256": "^5.7.0", + "@ethersproject/logger": "^5.7.0", + "@ethersproject/properties": "^5.7.0", + "@ethersproject/rlp": "^5.7.0", + "@ethersproject/signing-key": "^5.7.0" + } + }, + "node_modules/@ethersproject/web": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/@ethersproject/web/-/web-5.7.1.tgz", + "integrity": "sha512-Gueu8lSvyjBWL4cYsWsjh6MtMwM0+H4HvqFPZfB6dV8ctbP9zFAO73VG1cMWae0FLPCtz0peKPpZY8/ugJJX2w==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { + "@ethersproject/base64": "^5.7.0", + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/logger": "^5.7.0", + "@ethersproject/properties": "^5.7.0", + "@ethersproject/strings": "^5.7.0" } }, "node_modules/@iota/sdk": { "resolved": "..", "link": true }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz", + "integrity": "sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.4.15", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", + "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==" + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", + "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", + "dependencies": { + "@jridgewell/resolve-uri": "^3.0.3", + "@jridgewell/sourcemap-codec": "^1.4.10" + } + }, + "node_modules/@noble/curves": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.1.0.tgz", + "integrity": "sha512-091oBExgENk/kGj3AZmtBDMpxQPDtxQABR2B9lb1JbVTs6ytdzZNwvhxQ4MWasRNEzlbEH8jCWFCwhF/Obj5AA==", + "dev": true, + "dependencies": { + "@noble/hashes": "1.3.1" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@noble/hashes": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.3.1.tgz", + "integrity": "sha512-EbqwksQwz9xDRGfDST86whPBgM65E0OH/pCgqW0GBVzO22bNE+NuIbeTb714+IfSjU3aRk47EUvXIb5bTsenKA==", + "dev": true, + "engines": { + "node": ">= 16" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@scure/base": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@scure/base/-/base-1.1.3.tgz", + "integrity": "sha512-/+SgoRjLq7Xlf0CWuLHq2LUZeL/w65kfzAPG5NH9pcmBhs+nunQTn4gvdwgMTIXnt9b2C/1SeL2XiysZEyIC9Q==", + "dev": true, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@scure/bip32": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/@scure/bip32/-/bip32-1.3.1.tgz", + "integrity": "sha512-osvveYtyzdEVbt3OfwwXFr4P2iVBL5u1Q3q4ONBfDY/UpOuXmOlbgwc1xECEboY8wIays8Yt6onaWMUdUbfl0A==", + "dev": true, + "dependencies": { + "@noble/curves": "~1.1.0", + "@noble/hashes": "~1.3.1", + "@scure/base": "~1.1.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@scure/bip39": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@scure/bip39/-/bip39-1.2.1.tgz", + "integrity": "sha512-Z3/Fsz1yr904dduJD0NpiyRHhRYHdcnyh73FZWiV+/qhWi83wNJ3NWolYqCEN+ZWsUz2TWwajJggcRE9r1zUYg==", + "dev": true, + "dependencies": { + "@noble/hashes": "~1.3.0", + "@scure/base": "~1.1.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@sindresorhus/is": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-4.6.0.tgz", + "integrity": "sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/is?sponsor=1" + } + }, + "node_modules/@szmarczak/http-timer": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-5.0.1.tgz", + "integrity": "sha512-+PmQX0PiAYPMeVYe237LJAYvOMYW1j2rH5YROyS3b4CTVJum34HfRvKvAzozHAQG0TnHNdUfY9nCeUyRAs//cw==", + "dev": true, + "dependencies": { + "defer-to-connect": "^2.0.1" + }, + "engines": { + "node": ">=14.16" + } + }, + "node_modules/@tsconfig/node10": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.9.tgz", + "integrity": "sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==" + }, + "node_modules/@tsconfig/node12": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz", + "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==" + }, + "node_modules/@tsconfig/node14": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz", + "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==" + }, + "node_modules/@tsconfig/node16": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.4.tgz", + "integrity": "sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==" + }, + "node_modules/@types/bn.js": { + "version": "5.1.5", + "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-5.1.5.tgz", + "integrity": "sha512-V46N0zwKRF5Q00AZ6hWtN0T8gGmDUaUzLWQvHFo5yThtVwK/VCenFY3wXVbOvNfajEpsTfQM4IN9k/d6gUVX3A==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/cacheable-request": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/@types/cacheable-request/-/cacheable-request-6.0.3.tgz", + "integrity": "sha512-IQ3EbTzGxIigb1I3qPZc1rWJnH0BmSKv5QYTalEwweFvyBDLSAe24zP0le/hyi7ecGfZVlIVAg4BZqb8WBwKqw==", + "dev": true, + "dependencies": { + "@types/http-cache-semantics": "*", + "@types/keyv": "^3.1.4", + "@types/node": "*", + "@types/responselike": "^1.0.0" + } + }, + "node_modules/@types/http-cache-semantics": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.0.4.tgz", + "integrity": "sha512-1m0bIFVc7eJWyve9S0RnuRgcQqF/Xd5QsUZAZeQFr1Q3/p9JWoQQEqmVy+DPTNpGXwhgIetAoYF8JSc33q29QA==", + "dev": true + }, + "node_modules/@types/keyv": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/@types/keyv/-/keyv-3.1.4.tgz", + "integrity": "sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, "node_modules/@types/node": { "version": "17.0.45", "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.45.tgz", - "integrity": "sha512-w+tIMs3rq2afQdsPJlODhoUEKzFP1ayaoyl1CcnwtIlsVe7K7bA1NGm4s3PraqTLlXnbIN84zuBlxBWo1u9BLw==", + "integrity": "sha512-w+tIMs3rq2afQdsPJlODhoUEKzFP1ayaoyl1CcnwtIlsVe7K7bA1NGm4s3PraqTLlXnbIN84zuBlxBWo1u9BLw==" + }, + "node_modules/@types/pbkdf2": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@types/pbkdf2/-/pbkdf2-3.1.2.tgz", + "integrity": "sha512-uRwJqmiXmh9++aSu1VNEn3iIxWOhd8AHXNSdlaLfdAAdSTY9jYVeGWnzejM3dvrkbqE3/hyQkQQ29IFATEGlew==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/responselike": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@types/responselike/-/responselike-1.0.3.tgz", + "integrity": "sha512-H/+L+UkTV33uf49PH5pCAUBVPNj2nDBXTN+qS1dOwyyg24l3CcicicCA7ca+HMvJBZcFgl5r8e+RR6elsb4Lyw==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/secp256k1": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/@types/secp256k1/-/secp256k1-4.0.6.tgz", + "integrity": "sha512-hHxJU6PAEUn0TP4S/ZOzuTUvJWuZ6eIKeNKb5RBpODvSl6hp1Wrw4s7ATY50rklRCScUDpHzVA/DQdSjJ3UoYQ==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/abortcontroller-polyfill": { + "version": "1.7.5", + "resolved": "https://registry.npmjs.org/abortcontroller-polyfill/-/abortcontroller-polyfill-1.7.5.tgz", + "integrity": "sha512-JMJ5soJWP18htbbxJjG7bG6yuI6pRhgJ0scHHTfkUjf6wjP912xZWvM+A4sJK3gqd9E8fcPbDnOefbA9Th/FIQ==", "dev": true }, - "node_modules/dotenv": { - "version": "16.0.3", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.0.3.tgz", - "integrity": "sha512-7GO6HghkA5fYG9TYnNxi14/7K9f5occMlp3zXAuSxn7CKCxt9xbNWG7yF8hTCSUchlfWSe3uLmlPfigevRItzQ==", + "node_modules/accepts": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", + "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", + "dev": true, + "dependencies": { + "mime-types": "~2.1.34", + "negotiator": "0.6.3" + }, "engines": { - "node": ">=12" + "node": ">= 0.6" } }, - "node_modules/typescript": { - "version": "4.9.5", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz", - "integrity": "sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==", - "dev": true, + "node_modules/acorn": { + "version": "8.11.2", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.2.tgz", + "integrity": "sha512-nc0Axzp/0FILLEVsm4fNwLCwMttvhEI263QtVPQcbpfZZ3ts0hLsZGOpE6czNlid7CJ9MlyH8reXkpsf3YUY4w==", "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" + "acorn": "bin/acorn" }, "engines": { - "node": ">=4.2.0" + "node": ">=0.4.0" } - } - }, - "dependencies": { - "@iota/sdk": { - "version": "file:..", - "requires": { - "@iota/types": "^1.0.0-beta.15", - "@types/jest": "^29.4.0", - "@types/node": "^18.15.12", - "@typescript-eslint/eslint-plugin": "^5.30.7", - "@typescript-eslint/parser": "^5.30.7", - "cargo-cp-artifact": "^0.1.6", - "dotenv": "^16.0.3", - "electron-build-env": "^0.2.0", - "eslint": "^8.20.0", - "eslint-config-prettier": "^8.5.0", - "jest": "^29.4.2", - "jest-matcher-utils": "^29.5.0", - "prebuild": "^11.0.4", - "prebuild-install": "^7.1.1", - "prettier": "^2.8.3", - "ts-jest": "^29.0.5", - "typedoc": "^0.24.6", - "typedoc-plugin-markdown": "^3.14.0", - "typescript": "^4.9.4" + }, + "node_modules/acorn-walk": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.0.tgz", + "integrity": "sha512-FS7hV565M5l1R08MXqo8odwMTB02C2UqzB17RVgu9EyuYFBqJZ3/ZY97sQD5FewVu1UyDFc1yztUDrAwT0EypA==", + "engines": { + "node": ">=0.4.0" } }, - "@types/node": { - "version": "17.0.45", - "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.45.tgz", - "integrity": "sha512-w+tIMs3rq2afQdsPJlODhoUEKzFP1ayaoyl1CcnwtIlsVe7K7bA1NGm4s3PraqTLlXnbIN84zuBlxBWo1u9BLw==", + "node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/arg": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", + "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==" + }, + "node_modules/array-flatten": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==", "dev": true }, - "dotenv": { - "version": "16.0.3", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.0.3.tgz", - "integrity": "sha512-7GO6HghkA5fYG9TYnNxi14/7K9f5occMlp3zXAuSxn7CKCxt9xbNWG7yF8hTCSUchlfWSe3uLmlPfigevRItzQ==" + "node_modules/asn1": { + "version": "0.2.6", + "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz", + "integrity": "sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==", + "dev": true, + "dependencies": { + "safer-buffer": "~2.1.0" + } }, - "typescript": { - "version": "4.9.5", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz", - "integrity": "sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==", + "node_modules/assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==", + "dev": true, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/async-limiter": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.1.tgz", + "integrity": "sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==", + "dev": true + }, + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", + "dev": true + }, + "node_modules/available-typed-arrays": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", + "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/aws-sign2": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", + "integrity": "sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA==", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/aws4": { + "version": "1.12.0", + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.12.0.tgz", + "integrity": "sha512-NmWvPnx0F1SfrQbYwOi7OeaNGokp9XhzNioJ/CSBs8Qa4vxug81mhJEAVZwxXuBmYB5KDRfMq/F3RR0BIU7sWg==", "dev": true + }, + "node_modules/base-x": { + "version": "3.0.9", + "resolved": "https://registry.npmjs.org/base-x/-/base-x-3.0.9.tgz", + "integrity": "sha512-H7JU6iBHTal1gp56aKoaa//YUxEaAOUiydvrV/pILqIHXTtqxSkATOnDA2u+jZ/61sD+L/412+7kzXRtWukhpQ==", + "dev": true, + "dependencies": { + "safe-buffer": "^5.0.1" + } + }, + "node_modules/base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/bcrypt-pbkdf": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", + "integrity": "sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==", + "dev": true, + "dependencies": { + "tweetnacl": "^0.14.3" + } + }, + "node_modules/bignumber.js": { + "version": "9.1.2", + "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.1.2.tgz", + "integrity": "sha512-2/mKyZH9K85bzOEfhXDBFZTGd1CTs+5IHpeFQo9luiBG7hghdC851Pj2WAhb6E3R6b9tZj/XKhbg4fum+Kepug==", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/blakejs": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/blakejs/-/blakejs-1.2.1.tgz", + "integrity": "sha512-QXUSXI3QVc/gJME0dBpXrag1kbzOqCjCX8/b54ntNyW6sjtoqxqRk3LTmXzaJoh71zMsDCjM+47jS7XiwN/+fQ==", + "dev": true + }, + "node_modules/bluebird": { + "version": "3.7.2", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", + "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==", + "dev": true + }, + "node_modules/bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", + "dev": true + }, + "node_modules/body-parser": { + "version": "1.20.2", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.2.tgz", + "integrity": "sha512-ml9pReCu3M61kGlqoTm2umSXTlRTuGTx0bfYj+uIUKKYycG5NtSbeetV3faSU6R7ajOPw0g/J1PvK4qNy7s5bA==", + "dev": true, + "dependencies": { + "bytes": "3.1.2", + "content-type": "~1.0.5", + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "on-finished": "2.4.1", + "qs": "6.11.0", + "raw-body": "2.5.2", + "type-is": "~1.6.18", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/brorand": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", + "integrity": "sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==", + "dev": true + }, + "node_modules/browserify-aes": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", + "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", + "dev": true, + "dependencies": { + "buffer-xor": "^1.0.3", + "cipher-base": "^1.0.0", + "create-hash": "^1.1.0", + "evp_bytestokey": "^1.0.3", + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "node_modules/bs58": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/bs58/-/bs58-4.0.1.tgz", + "integrity": "sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw==", + "dev": true, + "dependencies": { + "base-x": "^3.0.2" + } + }, + "node_modules/bs58check": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/bs58check/-/bs58check-2.1.2.tgz", + "integrity": "sha512-0TS1jicxdU09dwJMNZtVAfzPi6Q6QeN0pM1Fkzrjn+XYHvzMKPU3pHVpva+769iNVSfIYWf7LJ6WR+BuuMf8cA==", + "dev": true, + "dependencies": { + "bs58": "^4.0.0", + "create-hash": "^1.1.0", + "safe-buffer": "^5.1.2" + } + }, + "node_modules/buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + }, + "node_modules/buffer-to-arraybuffer": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/buffer-to-arraybuffer/-/buffer-to-arraybuffer-0.0.5.tgz", + "integrity": "sha512-3dthu5CYiVB1DEJp61FtApNnNndTckcqe4pFcLdvHtrpG+kcyekCJKg4MRiDcFW7A6AODnXB9U4dwQiCW5kzJQ==", + "dev": true + }, + "node_modules/buffer-xor": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", + "integrity": "sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ==", + "dev": true + }, + "node_modules/bufferutil": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/bufferutil/-/bufferutil-4.0.8.tgz", + "integrity": "sha512-4T53u4PdgsXqKaIctwF8ifXlRTTmEPJ8iEPWFdGZvcf7sbwYo6FKFEX9eNNAnzFZ7EzJAQ3CJeOtCRA4rDp7Pw==", + "dev": true, + "hasInstallScript": true, + "dependencies": { + "node-gyp-build": "^4.3.0" + }, + "engines": { + "node": ">=6.14.2" + } + }, + "node_modules/bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/cacheable-lookup": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-6.1.0.tgz", + "integrity": "sha512-KJ/Dmo1lDDhmW2XDPMo+9oiy/CeqosPguPCrgcVzKyZrL6pM1gU2GmPY/xo6OQPTUaA/c0kwHuywB4E6nmT9ww==", + "dev": true, + "engines": { + "node": ">=10.6.0" + } + }, + "node_modules/cacheable-request": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-7.0.4.tgz", + "integrity": "sha512-v+p6ongsrp0yTGbJXjgxPow2+DL93DASP4kXCDKb8/bwRtt9OEF3whggkkDkGNzgcWy2XaF4a8nZglC7uElscg==", + "dev": true, + "dependencies": { + "clone-response": "^1.0.2", + "get-stream": "^5.1.0", + "http-cache-semantics": "^4.0.0", + "keyv": "^4.0.0", + "lowercase-keys": "^2.0.0", + "normalize-url": "^6.0.1", + "responselike": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cacheable-request/node_modules/get-stream": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", + "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", + "dev": true, + "dependencies": { + "pump": "^3.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cacheable-request/node_modules/lowercase-keys": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", + "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/call-bind": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.5.tgz", + "integrity": "sha512-C3nQxfFZxFRVoJoGKKI8y3MOEo129NQ+FgQ08iye+Mk4zNZZGdjfs06bVTr+DBSlA66Q2VEcMki/cUCP4SercQ==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.1", + "set-function-length": "^1.1.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/caseless": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", + "integrity": "sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==", + "dev": true + }, + "node_modules/chownr": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", + "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", + "dev": true + }, + "node_modules/cids": { + "version": "0.7.5", + "resolved": "https://registry.npmjs.org/cids/-/cids-0.7.5.tgz", + "integrity": "sha512-zT7mPeghoWAu+ppn8+BS1tQ5qGmbMfB4AregnQjA/qHY3GC1m1ptI9GkWNlgeu38r7CuRdXB47uY2XgAYt6QVA==", + "deprecated": "This module has been superseded by the multiformats module", + "dev": true, + "dependencies": { + "buffer": "^5.5.0", + "class-is": "^1.1.0", + "multibase": "~0.6.0", + "multicodec": "^1.0.0", + "multihashes": "~0.4.15" + }, + "engines": { + "node": ">=4.0.0", + "npm": ">=3.0.0" + } + }, + "node_modules/cids/node_modules/multicodec": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/multicodec/-/multicodec-1.0.4.tgz", + "integrity": "sha512-NDd7FeS3QamVtbgfvu5h7fd1IlbaC4EQ0/pgU4zqE2vdHCmBGsUa0TiM8/TdSeG6BMPC92OOCf8F1ocE/Wkrrg==", + "deprecated": "This module has been superseded by the multiformats module", + "dev": true, + "dependencies": { + "buffer": "^5.6.0", + "varint": "^5.0.0" + } + }, + "node_modules/cipher-base": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", + "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", + "dev": true, + "dependencies": { + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "node_modules/class-is": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/class-is/-/class-is-1.1.0.tgz", + "integrity": "sha512-rhjH9AG1fvabIDoGRVH587413LPjTZgmDF9fOFCbFJQV4yuocX1mHxxvXI4g3cGwbVY9wAYIoKlg1N79frJKQw==", + "dev": true + }, + "node_modules/class-transformer": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/class-transformer/-/class-transformer-0.5.1.tgz", + "integrity": "sha512-SQa1Ws6hUbfC98vKGxZH3KFY0Y1lm5Zm0SY8XX9zbK7FJCyVEac3ATW0RIpwzW+oOfmHE5PMPufDG9hCfoEOMw==" + }, + "node_modules/clone-response": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.3.tgz", + "integrity": "sha512-ROoL94jJH2dUVML2Y/5PEDNaSHgeOdSDicUyS7izcF63G6sTc/FTjLub4b8Il9S8S0beOfYt0TaA5qvFK+w0wA==", + "dev": true, + "dependencies": { + "mimic-response": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "dev": true, + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/content-disposition": { + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", + "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", + "dev": true, + "dependencies": { + "safe-buffer": "5.2.1" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/content-hash": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/content-hash/-/content-hash-2.5.2.tgz", + "integrity": "sha512-FvIQKy0S1JaWV10sMsA7TRx8bpU+pqPkhbsfvOJAdjRXvYxEckAwQWGwtRjiaJfh+E0DvcWUGqcdjwMGFjsSdw==", + "dev": true, + "dependencies": { + "cids": "^0.7.1", + "multicodec": "^0.5.5", + "multihashes": "^0.4.15" + } + }, + "node_modules/content-type": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", + "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/cookie": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", + "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/cookie-signature": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==", + "dev": true + }, + "node_modules/core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==", + "dev": true + }, + "node_modules/cors": { + "version": "2.8.5", + "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", + "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", + "dev": true, + "dependencies": { + "object-assign": "^4", + "vary": "^1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/crc-32": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/crc-32/-/crc-32-1.2.2.tgz", + "integrity": "sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ==", + "dev": true, + "bin": { + "crc32": "bin/crc32.njs" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/create-hash": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", + "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", + "dev": true, + "dependencies": { + "cipher-base": "^1.0.1", + "inherits": "^2.0.1", + "md5.js": "^1.3.4", + "ripemd160": "^2.0.1", + "sha.js": "^2.4.0" + } + }, + "node_modules/create-hmac": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", + "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", + "dev": true, + "dependencies": { + "cipher-base": "^1.0.3", + "create-hash": "^1.1.0", + "inherits": "^2.0.1", + "ripemd160": "^2.0.0", + "safe-buffer": "^5.0.1", + "sha.js": "^2.4.8" + } + }, + "node_modules/create-require": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", + "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==" + }, + "node_modules/cross-fetch": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-4.0.0.tgz", + "integrity": "sha512-e4a5N8lVvuLgAWgnCrLr2PP0YyDOTHa9H/Rj54dirp61qXnNq46m82bRhNqIA5VccJtWBvPTFRV3TtvHUKPB1g==", + "dev": true, + "dependencies": { + "node-fetch": "^2.6.12" + } + }, + "node_modules/d": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/d/-/d-1.0.1.tgz", + "integrity": "sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==", + "dev": true, + "dependencies": { + "es5-ext": "^0.10.50", + "type": "^1.0.1" + } + }, + "node_modules/dashdash": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", + "integrity": "sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g==", + "dev": true, + "dependencies": { + "assert-plus": "^1.0.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/decode-uri-component": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.2.tgz", + "integrity": "sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ==", + "dev": true, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/decompress-response": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", + "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", + "dev": true, + "dependencies": { + "mimic-response": "^3.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/decompress-response/node_modules/mimic-response": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", + "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/defer-to-connect": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-2.0.1.tgz", + "integrity": "sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/define-data-property": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.1.tgz", + "integrity": "sha512-E7uGkTzkk1d0ByLeSc6ZsFS79Axg+m1P/VsgYsxHgiuc3tFSj+MjMIwe90FC4lOAZzNBdY7kkO2P2wKdsQ1vgQ==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.2.1", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "dev": true, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/destroy": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", + "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", + "dev": true, + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/diff": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", + "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", + "engines": { + "node": ">=0.3.1" + } + }, + "node_modules/dom-walk": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/dom-walk/-/dom-walk-0.1.2.tgz", + "integrity": "sha512-6QvTW9mrGeIegrFXdtQi9pk7O/nSK6lSdXW2eqUspN5LWD7UTji2Fqw5V2YLjBpHEoU9Xl/eUWNpDeZvoyOv2w==", + "dev": true + }, + "node_modules/dotenv": { + "version": "16.0.3", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.0.3.tgz", + "integrity": "sha512-7GO6HghkA5fYG9TYnNxi14/7K9f5occMlp3zXAuSxn7CKCxt9xbNWG7yF8hTCSUchlfWSe3uLmlPfigevRItzQ==", + "engines": { + "node": ">=12" + } + }, + "node_modules/ecc-jsbn": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", + "integrity": "sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw==", + "dev": true, + "dependencies": { + "jsbn": "~0.1.0", + "safer-buffer": "^2.1.0" + } + }, + "node_modules/ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", + "dev": true + }, + "node_modules/elliptic": { + "version": "6.5.4", + "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz", + "integrity": "sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==", + "dev": true, + "dependencies": { + "bn.js": "^4.11.9", + "brorand": "^1.1.0", + "hash.js": "^1.0.0", + "hmac-drbg": "^1.0.1", + "inherits": "^2.0.4", + "minimalistic-assert": "^1.0.1", + "minimalistic-crypto-utils": "^1.0.1" + } + }, + "node_modules/encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/end-of-stream": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", + "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "dev": true, + "dependencies": { + "once": "^1.4.0" + } + }, + "node_modules/es5-ext": { + "version": "0.10.62", + "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.62.tgz", + "integrity": "sha512-BHLqn0klhEpnOKSrzn/Xsz2UIW8j+cGmo9JLzr8BiUapV8hPL9+FliFqjwr9ngW7jWdnxv6eO+/LqyhJVqgrjA==", + "dev": true, + "hasInstallScript": true, + "dependencies": { + "es6-iterator": "^2.0.3", + "es6-symbol": "^3.1.3", + "next-tick": "^1.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/es6-iterator": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", + "integrity": "sha512-zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g==", + "dev": true, + "dependencies": { + "d": "1", + "es5-ext": "^0.10.35", + "es6-symbol": "^3.1.1" + } + }, + "node_modules/es6-promise": { + "version": "4.2.8", + "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.8.tgz", + "integrity": "sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==", + "dev": true + }, + "node_modules/es6-symbol": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.3.tgz", + "integrity": "sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA==", + "dev": true, + "dependencies": { + "d": "^1.0.1", + "ext": "^1.1.2" + } + }, + "node_modules/escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", + "dev": true + }, + "node_modules/etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/eth-ens-namehash": { + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/eth-ens-namehash/-/eth-ens-namehash-2.0.8.tgz", + "integrity": "sha512-VWEI1+KJfz4Km//dadyvBBoBeSQ0MHTXPvr8UIXiLW6IanxvAV+DmlZAijZwAyggqGUfwQBeHf7tc9wzc1piSw==", + "dev": true, + "dependencies": { + "idna-uts46-hx": "^2.3.1", + "js-sha3": "^0.5.7" + } + }, + "node_modules/eth-ens-namehash/node_modules/js-sha3": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.5.7.tgz", + "integrity": "sha512-GII20kjaPX0zJ8wzkTbNDYMY7msuZcTWk8S5UOh6806Jq/wz1J8/bnr8uGU0DAUmYDjj2Mr4X1cW8v/GLYnR+g==", + "dev": true + }, + "node_modules/eth-lib": { + "version": "0.1.29", + "resolved": "https://registry.npmjs.org/eth-lib/-/eth-lib-0.1.29.tgz", + "integrity": "sha512-bfttrr3/7gG4E02HoWTDUcDDslN003OlOoBxk9virpAZQ1ja/jDgwkWB8QfJF7ojuEowrqy+lzp9VcJG7/k5bQ==", + "dev": true, + "dependencies": { + "bn.js": "^4.11.6", + "elliptic": "^6.4.0", + "nano-json-stream-parser": "^0.1.2", + "servify": "^0.1.12", + "ws": "^3.0.0", + "xhr-request-promise": "^0.1.2" + } + }, + "node_modules/ethereum-bloom-filters": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/ethereum-bloom-filters/-/ethereum-bloom-filters-1.0.10.tgz", + "integrity": "sha512-rxJ5OFN3RwjQxDcFP2Z5+Q9ho4eIdEmSc2ht0fCu8Se9nbXjZ7/031uXoUYJ87KHCOdVeiUuwSnoS7hmYAGVHA==", + "dev": true, + "dependencies": { + "js-sha3": "^0.8.0" + } + }, + "node_modules/ethereum-cryptography": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-2.1.2.tgz", + "integrity": "sha512-Z5Ba0T0ImZ8fqXrJbpHcbpAvIswRte2wGNR/KePnu8GbbvgJ47lMxT/ZZPG6i9Jaht4azPDop4HaM00J0J59ug==", + "dev": true, + "dependencies": { + "@noble/curves": "1.1.0", + "@noble/hashes": "1.3.1", + "@scure/bip32": "1.3.1", + "@scure/bip39": "1.2.1" + } + }, + "node_modules/ethereumjs-util": { + "version": "7.1.5", + "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-7.1.5.tgz", + "integrity": "sha512-SDl5kKrQAudFBUe5OJM9Ac6WmMyYmXX/6sTmLZ3ffG2eY6ZIGBes3pEDxNN6V72WyOw4CPD5RomKdsa8DAAwLg==", + "dev": true, + "dependencies": { + "@types/bn.js": "^5.1.0", + "bn.js": "^5.1.2", + "create-hash": "^1.1.2", + "ethereum-cryptography": "^0.1.3", + "rlp": "^2.2.4" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/ethereumjs-util/node_modules/bn.js": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz", + "integrity": "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==", + "dev": true + }, + "node_modules/ethereumjs-util/node_modules/ethereum-cryptography": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz", + "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==", + "dev": true, + "dependencies": { + "@types/pbkdf2": "^3.0.0", + "@types/secp256k1": "^4.0.1", + "blakejs": "^1.1.0", + "browserify-aes": "^1.2.0", + "bs58check": "^2.1.2", + "create-hash": "^1.2.0", + "create-hmac": "^1.1.7", + "hash.js": "^1.1.7", + "keccak": "^3.0.0", + "pbkdf2": "^3.0.17", + "randombytes": "^2.1.0", + "safe-buffer": "^5.1.2", + "scrypt-js": "^3.0.0", + "secp256k1": "^4.0.1", + "setimmediate": "^1.0.5" + } + }, + "node_modules/ethjs-unit": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/ethjs-unit/-/ethjs-unit-0.1.6.tgz", + "integrity": "sha512-/Sn9Y0oKl0uqQuvgFk/zQgR7aw1g36qX/jzSQ5lSwlO0GigPymk4eGQfeNTD03w1dPOqfz8V77Cy43jH56pagw==", + "dev": true, + "dependencies": { + "bn.js": "4.11.6", + "number-to-bn": "1.7.0" + }, + "engines": { + "node": ">=6.5.0", + "npm": ">=3" + } + }, + "node_modules/ethjs-unit/node_modules/bn.js": { + "version": "4.11.6", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.6.tgz", + "integrity": "sha512-XWwnNNFCuuSQ0m3r3C4LE3EiORltHd9M05pq6FOlVeiophzRbMo50Sbz1ehl8K3Z+jw9+vmgnXefY1hz8X+2wA==", + "dev": true + }, + "node_modules/eventemitter3": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.4.tgz", + "integrity": "sha512-rlaVLnVxtxvoyLsQQFBx53YmXHDxRIzzTLbdfxqi4yocpSjAxXwkU0cScM5JgSKMqEhrZpnvQ2D9gjylR0AimQ==", + "dev": true + }, + "node_modules/evp_bytestokey": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", + "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", + "dev": true, + "dependencies": { + "md5.js": "^1.3.4", + "safe-buffer": "^5.1.1" + } + }, + "node_modules/express": { + "version": "4.18.2", + "resolved": "https://registry.npmjs.org/express/-/express-4.18.2.tgz", + "integrity": "sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==", + "dev": true, + "dependencies": { + "accepts": "~1.3.8", + "array-flatten": "1.1.1", + "body-parser": "1.20.1", + "content-disposition": "0.5.4", + "content-type": "~1.0.4", + "cookie": "0.5.0", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "2.0.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "1.2.0", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "merge-descriptors": "1.0.1", + "methods": "~1.1.2", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "path-to-regexp": "0.1.7", + "proxy-addr": "~2.0.7", + "qs": "6.11.0", + "range-parser": "~1.2.1", + "safe-buffer": "5.2.1", + "send": "0.18.0", + "serve-static": "1.15.0", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" + }, + "engines": { + "node": ">= 0.10.0" + } + }, + "node_modules/express/node_modules/body-parser": { + "version": "1.20.1", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.1.tgz", + "integrity": "sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==", + "dev": true, + "dependencies": { + "bytes": "3.1.2", + "content-type": "~1.0.4", + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "on-finished": "2.4.1", + "qs": "6.11.0", + "raw-body": "2.5.1", + "type-is": "~1.6.18", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/express/node_modules/raw-body": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", + "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", + "dev": true, + "dependencies": { + "bytes": "3.1.2", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/ext": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/ext/-/ext-1.7.0.tgz", + "integrity": "sha512-6hxeJYaL110a9b5TEJSj0gojyHQAmA2ch5Os+ySCiA1QGdS697XWY1pzsrSjqA9LDEEgdB/KypIlR59RcLuHYw==", + "dev": true, + "dependencies": { + "type": "^2.7.2" + } + }, + "node_modules/ext/node_modules/type": { + "version": "2.7.2", + "resolved": "https://registry.npmjs.org/type/-/type-2.7.2.tgz", + "integrity": "sha512-dzlvlNlt6AXU7EBSfpAscydQ7gXB+pPGsPnfJnZpiNJBDj7IaJzQlBZYGdEi4R9HmPdBv2XmWJ6YUtoTa7lmCw==", + "dev": true + }, + "node_modules/extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", + "dev": true + }, + "node_modules/extsprintf": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", + "integrity": "sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g==", + "dev": true, + "engines": [ + "node >=0.6.0" + ] + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true + }, + "node_modules/finalhandler": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", + "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", + "dev": true, + "dependencies": { + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "statuses": "2.0.1", + "unpipe": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/for-each": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", + "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", + "dev": true, + "dependencies": { + "is-callable": "^1.1.3" + } + }, + "node_modules/forever-agent": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", + "integrity": "sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw==", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/form-data": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", + "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", + "dev": true, + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.6", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 0.12" + } + }, + "node_modules/form-data-encoder": { + "version": "1.7.1", + "resolved": "https://registry.npmjs.org/form-data-encoder/-/form-data-encoder-1.7.1.tgz", + "integrity": "sha512-EFRDrsMm/kyqbTQocNvRXMLjc7Es2Vk+IQFx/YW7hkUH1eBl4J1fqiP34l74Yt0pFLCNpc06fkbVk00008mzjg==", + "dev": true + }, + "node_modules/forwarded": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", + "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fs-extra": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-4.0.3.tgz", + "integrity": "sha512-q6rbdDd1o2mAnQreO7YADIxf/Whx4AHBiRf6d+/cVT8h44ss+lHgxf1FemcqDnQt9X3ct4McHr+JMGlYSsK7Cg==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.1.2", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + } + }, + "node_modules/fs-minipass": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-1.2.7.tgz", + "integrity": "sha512-GWSSJGFy4e9GUeCcbIkED+bgAoFyj7XF1mV8rma3QW4NIqX9Kyx79N/PF61H5udOV3aY1IaMLs6pGbH71nlCTA==", + "dev": true, + "dependencies": { + "minipass": "^2.6.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-intrinsic": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.2.tgz", + "integrity": "sha512-0gSo4ml/0j98Y3lngkFEot/zhiCeWsbYIlZ+uZOVgzLyLaUw7wxUL+nCTP0XJvJg1AXulJRI3UJi8GsbDuxdGA==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.2", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3", + "hasown": "^2.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/getpass": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", + "integrity": "sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng==", + "dev": true, + "dependencies": { + "assert-plus": "^1.0.0" + } + }, + "node_modules/global": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/global/-/global-4.4.0.tgz", + "integrity": "sha512-wv/LAoHdRE3BeTGz53FAamhGlPLhlssK45usmGFThIi4XqnBmjKQ16u+RNbP7WvigRZDxUsM0J3gcQ5yicaL0w==", + "dev": true, + "dependencies": { + "min-document": "^2.19.0", + "process": "^0.11.10" + } + }, + "node_modules/gopd": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", + "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.1.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/got": { + "version": "12.1.0", + "resolved": "https://registry.npmjs.org/got/-/got-12.1.0.tgz", + "integrity": "sha512-hBv2ty9QN2RdbJJMK3hesmSkFTjVIHyIDDbssCKnSmq62edGgImJWD10Eb1k77TiV1bxloxqcFAVK8+9pkhOig==", + "dev": true, + "dependencies": { + "@sindresorhus/is": "^4.6.0", + "@szmarczak/http-timer": "^5.0.1", + "@types/cacheable-request": "^6.0.2", + "@types/responselike": "^1.0.0", + "cacheable-lookup": "^6.0.4", + "cacheable-request": "^7.0.2", + "decompress-response": "^6.0.0", + "form-data-encoder": "1.7.1", + "get-stream": "^6.0.1", + "http2-wrapper": "^2.1.10", + "lowercase-keys": "^3.0.0", + "p-cancelable": "^3.0.0", + "responselike": "^2.0.0" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sindresorhus/got?sponsor=1" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "dev": true + }, + "node_modules/har-schema": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", + "integrity": "sha512-Oqluz6zhGX8cyRaTQlFMPw80bSJVG2x/cFb8ZPhUILGgHka9SsokCCOQgpveePerqidZOrT14ipqfJb7ILcW5Q==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/har-validator": { + "version": "5.1.5", + "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz", + "integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==", + "deprecated": "this library is no longer supported", + "dev": true, + "dependencies": { + "ajv": "^6.12.3", + "har-schema": "^2.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/has-property-descriptors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.1.tgz", + "integrity": "sha512-VsX8eaIewvas0xnvinAe9bw4WfIeODpGYikiWYLH+dma0Jw6KHYqWiWfhQlgOVK8D6PvjubK5Uc4P0iIhIcNVg==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.2.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", + "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-tostringtag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", + "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", + "dev": true, + "dependencies": { + "has-symbols": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/hash-base": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.1.0.tgz", + "integrity": "sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==", + "dev": true, + "dependencies": { + "inherits": "^2.0.4", + "readable-stream": "^3.6.0", + "safe-buffer": "^5.2.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/hash.js": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", + "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", + "dev": true, + "dependencies": { + "inherits": "^2.0.3", + "minimalistic-assert": "^1.0.1" + } + }, + "node_modules/hasown": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.0.tgz", + "integrity": "sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/hmac-drbg": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", + "integrity": "sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg==", + "dev": true, + "dependencies": { + "hash.js": "^1.0.3", + "minimalistic-assert": "^1.0.0", + "minimalistic-crypto-utils": "^1.0.1" + } + }, + "node_modules/http-cache-semantics": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz", + "integrity": "sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==", + "dev": true + }, + "node_modules/http-errors": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", + "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", + "dev": true, + "dependencies": { + "depd": "2.0.0", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "toidentifier": "1.0.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/http-https": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/http-https/-/http-https-1.0.0.tgz", + "integrity": "sha512-o0PWwVCSp3O0wS6FvNr6xfBCHgt0m1tvPLFOCc2iFDKTRAXhB7m8klDf7ErowFH8POa6dVdGatKU5I1YYwzUyg==", + "dev": true + }, + "node_modules/http-signature": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", + "integrity": "sha512-CAbnr6Rz4CYQkLYUtSNXxQPUH2gK8f3iWexVlsnMeD+GjlsQ0Xsy1cOX+mN3dtxYomRy21CiOzU8Uhw6OwncEQ==", + "dev": true, + "dependencies": { + "assert-plus": "^1.0.0", + "jsprim": "^1.2.2", + "sshpk": "^1.7.0" + }, + "engines": { + "node": ">=0.8", + "npm": ">=1.3.7" + } + }, + "node_modules/http2-wrapper": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/http2-wrapper/-/http2-wrapper-2.2.1.tgz", + "integrity": "sha512-V5nVw1PAOgfI3Lmeaj2Exmeg7fenjhRUgz1lPSezy1CuhPYbgQtbQj4jZfEAEMlaL+vupsvhjqCyjzob0yxsmQ==", + "dev": true, + "dependencies": { + "quick-lru": "^5.1.1", + "resolve-alpn": "^1.2.0" + }, + "engines": { + "node": ">=10.19.0" + } + }, + "node_modules/iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dev": true, + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/idna-uts46-hx": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/idna-uts46-hx/-/idna-uts46-hx-2.3.1.tgz", + "integrity": "sha512-PWoF9Keq6laYdIRwwCdhTPl60xRqAloYNMQLiyUnG42VjT53oW07BXIRM+NK7eQjzXjAk2gUvX9caRxlnF9TAA==", + "dev": true, + "dependencies": { + "punycode": "2.1.0" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/idna-uts46-hx/node_modules/punycode": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.0.tgz", + "integrity": "sha512-Yxz2kRwT90aPiWEMHVYnEf4+rhwF1tBmmZ4KepCP+Wkium9JxtWnUm1nqGwpiAHr/tnTSeHqr3wb++jgSkXjhA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "node_modules/ipaddr.js": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", + "dev": true, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/is-arguments": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", + "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-callable": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", + "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-function": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-function/-/is-function-1.0.2.tgz", + "integrity": "sha512-lw7DUp0aWXYg+CBCN+JKkcE0Q2RayZnSvnZBlwgxHBQhqt5pZNVy4Ri7H9GmmXkdu7LUthszM+Tor1u/2iBcpQ==", + "dev": true + }, + "node_modules/is-generator-function": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.10.tgz", + "integrity": "sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==", + "dev": true, + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-hex-prefixed": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-hex-prefixed/-/is-hex-prefixed-1.0.0.tgz", + "integrity": "sha512-WvtOiug1VFrE9v1Cydwm+FnXd3+w9GaeVUss5W4v/SLy3UW00vP+6iNF2SdnfiBoLy4bTqVdkftNGTUeOFVsbA==", + "dev": true, + "engines": { + "node": ">=6.5.0", + "npm": ">=3" + } + }, + "node_modules/is-typed-array": { + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.12.tgz", + "integrity": "sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg==", + "dev": true, + "dependencies": { + "which-typed-array": "^1.1.11" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==", + "dev": true + }, + "node_modules/isstream": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", + "integrity": "sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g==", + "dev": true + }, + "node_modules/js-sha3": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.8.0.tgz", + "integrity": "sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q==", + "dev": true + }, + "node_modules/jsbn": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", + "integrity": "sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==", + "dev": true + }, + "node_modules/json-buffer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", + "dev": true + }, + "node_modules/json-schema": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz", + "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==", + "dev": true + }, + "node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + }, + "node_modules/json-stringify-safe": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", + "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==", + "dev": true + }, + "node_modules/jsonfile": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", + "dev": true, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/jsprim": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.2.tgz", + "integrity": "sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw==", + "dev": true, + "dependencies": { + "assert-plus": "1.0.0", + "extsprintf": "1.3.0", + "json-schema": "0.4.0", + "verror": "1.10.0" + }, + "engines": { + "node": ">=0.6.0" + } + }, + "node_modules/keccak": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/keccak/-/keccak-3.0.4.tgz", + "integrity": "sha512-3vKuW0jV8J3XNTzvfyicFR5qvxrSAGl7KIhvgOu5cmWwM7tZRj3fMbj/pfIf4be7aznbc+prBWGjywox/g2Y6Q==", + "dev": true, + "hasInstallScript": true, + "dependencies": { + "node-addon-api": "^2.0.0", + "node-gyp-build": "^4.2.0", + "readable-stream": "^3.6.0" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/keyv": { + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", + "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", + "dev": true, + "dependencies": { + "json-buffer": "3.0.1" + } + }, + "node_modules/lowercase-keys": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-3.0.0.tgz", + "integrity": "sha512-ozCC6gdQ+glXOQsveKD0YsDy8DSQFjDTz4zyzEHNV5+JP5D62LmfDZ6o1cycFx9ouG940M5dE8C8CTewdj2YWQ==", + "dev": true, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/make-error": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", + "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==" + }, + "node_modules/md5.js": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", + "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", + "dev": true, + "dependencies": { + "hash-base": "^3.0.0", + "inherits": "^2.0.1", + "safe-buffer": "^5.1.2" + } + }, + "node_modules/media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/merge-descriptors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", + "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==", + "dev": true + }, + "node_modules/methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/micro-ftch": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/micro-ftch/-/micro-ftch-0.3.1.tgz", + "integrity": "sha512-/0LLxhzP0tfiR5hcQebtudP56gUurs2CLkGarnCiB/OqEyUFQ6U3paQi/tgLv0hBJYt2rnr9MNpxz4fiiugstg==", + "dev": true + }, + "node_modules/mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "dev": true, + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "dev": true, + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mimic-response": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", + "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/min-document": { + "version": "2.19.0", + "resolved": "https://registry.npmjs.org/min-document/-/min-document-2.19.0.tgz", + "integrity": "sha512-9Wy1B3m3f66bPPmU5hdA4DR4PB2OfDU/+GS3yAB7IQozE3tqXaVv2zOjgla7MEGSRv95+ILmOuvhLkOK6wJtCQ==", + "dev": true, + "dependencies": { + "dom-walk": "^0.1.0" + } + }, + "node_modules/minimalistic-assert": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", + "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==", + "dev": true + }, + "node_modules/minimalistic-crypto-utils": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", + "integrity": "sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg==", + "dev": true + }, + "node_modules/minimist": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/minipass": { + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-2.9.0.tgz", + "integrity": "sha512-wxfUjg9WebH+CUDX/CdbRlh5SmfZiy/hpkxaRI16Y9W56Pa75sWgd/rvFilSgrauD9NyFymP/+JFV3KwzIsJeg==", + "dev": true, + "dependencies": { + "safe-buffer": "^5.1.2", + "yallist": "^3.0.0" + } + }, + "node_modules/minizlib": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-1.3.3.tgz", + "integrity": "sha512-6ZYMOEnmVsdCeTJVE0W9ZD+pVnE8h9Hma/iOwwRDsdQoePpoX56/8B6z3P9VNwppJuBKNRuFDRNRqRWexT9G9Q==", + "dev": true, + "dependencies": { + "minipass": "^2.9.0" + } + }, + "node_modules/mkdirp": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-3.0.1.tgz", + "integrity": "sha512-+NsyUUAZDmo6YVHzL/stxSu3t9YS1iljliy3BSDrXJ/dkn1KYdmtZODGGjLcc9XLgVVpH4KshHB8XmZgMhaBXg==", + "dev": true, + "bin": { + "mkdirp": "dist/cjs/src/bin.js" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/mkdirp-promise": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/mkdirp-promise/-/mkdirp-promise-5.0.1.tgz", + "integrity": "sha512-Hepn5kb1lJPtVW84RFT40YG1OddBNTOVUZR2bzQUHc+Z03en8/3uX0+060JDhcEzyO08HmipsN9DcnFMxhIL9w==", + "deprecated": "This package is broken and no longer maintained. 'mkdirp' itself supports promises now, please switch to that.", + "dev": true, + "dependencies": { + "mkdirp": "*" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/mock-fs": { + "version": "4.14.0", + "resolved": "https://registry.npmjs.org/mock-fs/-/mock-fs-4.14.0.tgz", + "integrity": "sha512-qYvlv/exQ4+svI3UOvPUpLDF0OMX5euvUH0Ny4N5QyRyhNdgAgUrVH3iUINSzEPLvx0kbo/Bp28GJKIqvE7URw==", + "dev": true + }, + "node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + }, + "node_modules/multibase": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/multibase/-/multibase-0.6.1.tgz", + "integrity": "sha512-pFfAwyTjbbQgNc3G7D48JkJxWtoJoBMaR4xQUOuB8RnCgRqaYmWNFeJTTvrJ2w51bjLq2zTby6Rqj9TQ9elSUw==", + "deprecated": "This module has been superseded by the multiformats module", + "dev": true, + "dependencies": { + "base-x": "^3.0.8", + "buffer": "^5.5.0" + } + }, + "node_modules/multicodec": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/multicodec/-/multicodec-0.5.7.tgz", + "integrity": "sha512-PscoRxm3f+88fAtELwUnZxGDkduE2HD9Q6GHUOywQLjOGT/HAdhjLDYNZ1e7VR0s0TP0EwZ16LNUTFpoBGivOA==", + "deprecated": "This module has been superseded by the multiformats module", + "dev": true, + "dependencies": { + "varint": "^5.0.0" + } + }, + "node_modules/multihashes": { + "version": "0.4.21", + "resolved": "https://registry.npmjs.org/multihashes/-/multihashes-0.4.21.tgz", + "integrity": "sha512-uVSvmeCWf36pU2nB4/1kzYZjsXD9vofZKpgudqkceYY5g2aZZXJ5r9lxuzoRLl1OAp28XljXsEJ/X/85ZsKmKw==", + "dev": true, + "dependencies": { + "buffer": "^5.5.0", + "multibase": "^0.7.0", + "varint": "^5.0.0" + } + }, + "node_modules/multihashes/node_modules/multibase": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/multibase/-/multibase-0.7.0.tgz", + "integrity": "sha512-TW8q03O0f6PNFTQDvh3xxH03c8CjGaaYrjkl9UQPG6rz53TQzzxJVCIWVjzcbN/Q5Y53Zd0IBQBMVktVgNx4Fg==", + "deprecated": "This module has been superseded by the multiformats module", + "dev": true, + "dependencies": { + "base-x": "^3.0.8", + "buffer": "^5.5.0" + } + }, + "node_modules/nano-json-stream-parser": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/nano-json-stream-parser/-/nano-json-stream-parser-0.1.2.tgz", + "integrity": "sha512-9MqxMH/BSJC7dnLsEMPyfN5Dvoo49IsPFYMcHw3Bcfc2kN0lpHRBSzlMSVx4HGyJ7s9B31CyBTVehWJoQ8Ctew==", + "dev": true + }, + "node_modules/negotiator": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", + "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/next-tick": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.1.0.tgz", + "integrity": "sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==", + "dev": true + }, + "node_modules/node-addon-api": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-2.0.2.tgz", + "integrity": "sha512-Ntyt4AIXyaLIuMHF6IOoTakB3K+RWxwtsHNRxllEoA6vPwP9o4866g6YWDLUdnucilZhmkxiHwHr11gAENw+QA==", + "dev": true + }, + "node_modules/node-fetch": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", + "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", + "dev": true, + "dependencies": { + "whatwg-url": "^5.0.0" + }, + "engines": { + "node": "4.x || >=6.0.0" + }, + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } + } + }, + "node_modules/node-gyp-build": { + "version": "4.6.1", + "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.6.1.tgz", + "integrity": "sha512-24vnklJmyRS8ViBNI8KbtK/r/DmXQMRiOMXTNz2nrTnAYUwjmEEbnnpB/+kt+yWRv73bPsSPRFddrcIbAxSiMQ==", + "dev": true, + "bin": { + "node-gyp-build": "bin.js", + "node-gyp-build-optional": "optional.js", + "node-gyp-build-test": "build-test.js" + } + }, + "node_modules/normalize-url": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz", + "integrity": "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/number-to-bn": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/number-to-bn/-/number-to-bn-1.7.0.tgz", + "integrity": "sha512-wsJ9gfSz1/s4ZsJN01lyonwuxA1tml6X1yBDnfpMglypcBRFZZkus26EdPSlqS5GJfYddVZa22p3VNb3z5m5Ig==", + "dev": true, + "dependencies": { + "bn.js": "4.11.6", + "strip-hex-prefix": "1.0.0" + }, + "engines": { + "node": ">=6.5.0", + "npm": ">=3" + } + }, + "node_modules/number-to-bn/node_modules/bn.js": { + "version": "4.11.6", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.6.tgz", + "integrity": "sha512-XWwnNNFCuuSQ0m3r3C4LE3EiORltHd9M05pq6FOlVeiophzRbMo50Sbz1ehl8K3Z+jw9+vmgnXefY1hz8X+2wA==", + "dev": true + }, + "node_modules/oauth-sign": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", + "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-inspect": { + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.1.tgz", + "integrity": "sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/oboe": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/oboe/-/oboe-2.1.5.tgz", + "integrity": "sha512-zRFWiF+FoicxEs3jNI/WYUrVEgA7DeET/InK0XQuudGHRg8iIob3cNPrJTKaz4004uaA9Pbe+Dwa8iluhjLZWA==", + "dev": true, + "dependencies": { + "http-https": "^1.0.0" + } + }, + "node_modules/on-finished": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", + "dev": true, + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "dev": true, + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/p-cancelable": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-3.0.0.tgz", + "integrity": "sha512-mlVgR3PGuzlo0MmTdk4cXqXWlwQDLnONTAg6sm62XkMJEiRxN3GL3SffkYvqwonbkJBcrI7Uvv5Zh9yjvn2iUw==", + "dev": true, + "engines": { + "node": ">=12.20" + } + }, + "node_modules/parse-headers": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/parse-headers/-/parse-headers-2.0.5.tgz", + "integrity": "sha512-ft3iAoLOB/MlwbNXgzy43SWGP6sQki2jQvAyBg/zDFAgr9bfNWZIUj42Kw2eJIl8kEi4PbgE6U1Zau/HwI75HA==", + "dev": true + }, + "node_modules/parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/path-to-regexp": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", + "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==", + "dev": true + }, + "node_modules/pbkdf2": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.2.tgz", + "integrity": "sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA==", + "dev": true, + "dependencies": { + "create-hash": "^1.1.2", + "create-hmac": "^1.1.4", + "ripemd160": "^2.0.1", + "safe-buffer": "^5.0.1", + "sha.js": "^2.4.8" + }, + "engines": { + "node": ">=0.12" + } + }, + "node_modules/performance-now": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", + "integrity": "sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==", + "dev": true + }, + "node_modules/process": { + "version": "0.11.10", + "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", + "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==", + "dev": true, + "engines": { + "node": ">= 0.6.0" + } + }, + "node_modules/proxy-addr": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", + "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", + "dev": true, + "dependencies": { + "forwarded": "0.2.0", + "ipaddr.js": "1.9.1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/psl": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz", + "integrity": "sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==", + "dev": true + }, + "node_modules/pump": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", + "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "dev": true, + "dependencies": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "node_modules/punycode": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/qs": { + "version": "6.11.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", + "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", + "dev": true, + "dependencies": { + "side-channel": "^1.0.4" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/query-string": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/query-string/-/query-string-5.1.1.tgz", + "integrity": "sha512-gjWOsm2SoGlgLEdAGt7a6slVOk9mGiXmPFMqrEhLQ68rhQuBnpfs3+EmlvqKyxnCo9/PPlF+9MtY02S1aFg+Jw==", + "dev": true, + "dependencies": { + "decode-uri-component": "^0.2.0", + "object-assign": "^4.1.0", + "strict-uri-encode": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/quick-lru": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz", + "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "dev": true, + "dependencies": { + "safe-buffer": "^5.1.0" + } + }, + "node_modules/range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/raw-body": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz", + "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==", + "dev": true, + "dependencies": { + "bytes": "3.1.2", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "dev": true, + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/request": { + "version": "2.88.2", + "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", + "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==", + "deprecated": "request has been deprecated, see https://github.com/request/request/issues/3142", + "dev": true, + "dependencies": { + "aws-sign2": "~0.7.0", + "aws4": "^1.8.0", + "caseless": "~0.12.0", + "combined-stream": "~1.0.6", + "extend": "~3.0.2", + "forever-agent": "~0.6.1", + "form-data": "~2.3.2", + "har-validator": "~5.1.3", + "http-signature": "~1.2.0", + "is-typedarray": "~1.0.0", + "isstream": "~0.1.2", + "json-stringify-safe": "~5.0.1", + "mime-types": "~2.1.19", + "oauth-sign": "~0.9.0", + "performance-now": "^2.1.0", + "qs": "~6.5.2", + "safe-buffer": "^5.1.2", + "tough-cookie": "~2.5.0", + "tunnel-agent": "^0.6.0", + "uuid": "^3.3.2" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/request/node_modules/qs": { + "version": "6.5.3", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.3.tgz", + "integrity": "sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA==", + "dev": true, + "engines": { + "node": ">=0.6" + } + }, + "node_modules/resolve-alpn": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/resolve-alpn/-/resolve-alpn-1.2.1.tgz", + "integrity": "sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==", + "dev": true + }, + "node_modules/responselike": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/responselike/-/responselike-2.0.1.tgz", + "integrity": "sha512-4gl03wn3hj1HP3yzgdI7d3lCkF95F21Pz4BPGvKHinyQzALR5CapwC8yIi0Rh58DEMQ/SguC03wFj2k0M/mHhw==", + "dev": true, + "dependencies": { + "lowercase-keys": "^2.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/responselike/node_modules/lowercase-keys": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", + "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/ripemd160": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz", + "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", + "dev": true, + "dependencies": { + "hash-base": "^3.0.0", + "inherits": "^2.0.1" + } + }, + "node_modules/rlp": { + "version": "2.2.7", + "resolved": "https://registry.npmjs.org/rlp/-/rlp-2.2.7.tgz", + "integrity": "sha512-d5gdPmgQ0Z+AklL2NVXr/IoSjNZFfTVvQWzL/AM2AOcSzYP2xjlb0AC8YyCLc41MSNf6P6QVtjgPdmVtzb+4lQ==", + "dev": true, + "dependencies": { + "bn.js": "^5.2.0" + }, + "bin": { + "rlp": "bin/rlp" + } + }, + "node_modules/rlp/node_modules/bn.js": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz", + "integrity": "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==", + "dev": true + }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "dev": true + }, + "node_modules/scrypt-js": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/scrypt-js/-/scrypt-js-3.0.1.tgz", + "integrity": "sha512-cdwTTnqPu0Hyvf5in5asVdZocVDTNRmR7XEcJuIzMjJeSHybHl7vpB66AzwTaIg6CLSbtjcxc8fqcySfnTkccA==", + "dev": true + }, + "node_modules/secp256k1": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/secp256k1/-/secp256k1-4.0.3.tgz", + "integrity": "sha512-NLZVf+ROMxwtEj3Xa562qgv2BK5e2WNmXPiOdVIPLgs6lyTzMvBq0aWTYMI5XCP9jZMVKOcqZLw/Wc4vDkuxhA==", + "dev": true, + "hasInstallScript": true, + "dependencies": { + "elliptic": "^6.5.4", + "node-addon-api": "^2.0.0", + "node-gyp-build": "^4.2.0" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/send": { + "version": "0.18.0", + "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", + "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", + "dev": true, + "dependencies": { + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "mime": "1.6.0", + "ms": "2.1.3", + "on-finished": "2.4.1", + "range-parser": "~1.2.1", + "statuses": "2.0.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/send/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true + }, + "node_modules/serve-static": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", + "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", + "dev": true, + "dependencies": { + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.18.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/servify": { + "version": "0.1.12", + "resolved": "https://registry.npmjs.org/servify/-/servify-0.1.12.tgz", + "integrity": "sha512-/xE6GvsKKqyo1BAY+KxOWXcLpPsUUyji7Qg3bVD7hh1eRze5bR1uYiuDA/k3Gof1s9BTzQZEJK8sNcNGFIzeWw==", + "dev": true, + "dependencies": { + "body-parser": "^1.16.0", + "cors": "^2.8.1", + "express": "^4.14.0", + "request": "^2.79.0", + "xhr": "^2.3.3" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/set-function-length": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.1.1.tgz", + "integrity": "sha512-VoaqjbBJKiWtg4yRcKBQ7g7wnGnLV3M8oLvVWwOk2PdYY6PEFegR1vezXR0tw6fZGF9csVakIRjrJiy2veSBFQ==", + "dev": true, + "dependencies": { + "define-data-property": "^1.1.1", + "get-intrinsic": "^1.2.1", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/setimmediate": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", + "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==", + "dev": true + }, + "node_modules/setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", + "dev": true + }, + "node_modules/sha.js": { + "version": "2.4.11", + "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", + "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", + "dev": true, + "dependencies": { + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + }, + "bin": { + "sha.js": "bin.js" + } + }, + "node_modules/side-channel": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", + "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.0", + "get-intrinsic": "^1.0.2", + "object-inspect": "^1.9.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/simple-concat": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz", + "integrity": "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/simple-get": { + "version": "2.8.2", + "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-2.8.2.tgz", + "integrity": "sha512-Ijd/rV5o+mSBBs4F/x9oDPtTx9Zb6X9brmnXvMW4J7IR15ngi9q5xxqWBKU744jTZiaXtxaPL7uHG6vtN8kUkw==", + "dev": true, + "dependencies": { + "decompress-response": "^3.3.0", + "once": "^1.3.1", + "simple-concat": "^1.0.0" + } + }, + "node_modules/simple-get/node_modules/decompress-response": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz", + "integrity": "sha512-BzRPQuY1ip+qDonAOz42gRm/pg9F768C+npV/4JOsxRC2sq+Rlk+Q4ZCAsOhnIaMrgarILY+RMUIvMmmX1qAEA==", + "dev": true, + "dependencies": { + "mimic-response": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/sshpk": { + "version": "1.18.0", + "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.18.0.tgz", + "integrity": "sha512-2p2KJZTSqQ/I3+HX42EpYOa2l3f8Erv8MWKsy2I9uf4wA7yFIkXRffYdsx86y6z4vHtV8u7g+pPlr8/4ouAxsQ==", + "dev": true, + "dependencies": { + "asn1": "~0.2.3", + "assert-plus": "^1.0.0", + "bcrypt-pbkdf": "^1.0.0", + "dashdash": "^1.12.0", + "ecc-jsbn": "~0.1.1", + "getpass": "^0.1.1", + "jsbn": "~0.1.0", + "safer-buffer": "^2.0.2", + "tweetnacl": "~0.14.0" + }, + "bin": { + "sshpk-conv": "bin/sshpk-conv", + "sshpk-sign": "bin/sshpk-sign", + "sshpk-verify": "bin/sshpk-verify" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/strict-uri-encode": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz", + "integrity": "sha512-R3f198pcvnB+5IpnBlRkphuE9n46WyVl8I39W/ZUTZLz4nqSP/oLYUrcnJrw462Ds8he4YKMov2efsTIw1BDGQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "dev": true, + "dependencies": { + "safe-buffer": "~5.2.0" + } + }, + "node_modules/strip-hex-prefix": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/strip-hex-prefix/-/strip-hex-prefix-1.0.0.tgz", + "integrity": "sha512-q8d4ue7JGEiVcypji1bALTos+0pWtyGlivAWyPuTkHzuTCJqrK9sWxYQZUq6Nq3cuyv3bm734IhHvHtGGURU6A==", + "dev": true, + "dependencies": { + "is-hex-prefixed": "1.0.0" + }, + "engines": { + "node": ">=6.5.0", + "npm": ">=3" + } + }, + "node_modules/swarm-js": { + "version": "0.1.42", + "resolved": "https://registry.npmjs.org/swarm-js/-/swarm-js-0.1.42.tgz", + "integrity": "sha512-BV7c/dVlA3R6ya1lMlSSNPLYrntt0LUq4YMgy3iwpCIc6rZnS5W2wUoctarZ5pXlpKtxDDf9hNziEkcfrxdhqQ==", + "dev": true, + "dependencies": { + "bluebird": "^3.5.0", + "buffer": "^5.0.5", + "eth-lib": "^0.1.26", + "fs-extra": "^4.0.2", + "got": "^11.8.5", + "mime-types": "^2.1.16", + "mkdirp-promise": "^5.0.1", + "mock-fs": "^4.1.0", + "setimmediate": "^1.0.5", + "tar": "^4.0.2", + "xhr-request": "^1.0.1" + } + }, + "node_modules/swarm-js/node_modules/@szmarczak/http-timer": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-4.0.6.tgz", + "integrity": "sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w==", + "dev": true, + "dependencies": { + "defer-to-connect": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/swarm-js/node_modules/cacheable-lookup": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-5.0.4.tgz", + "integrity": "sha512-2/kNscPhpcxrOigMZzbiWF7dz8ilhb/nIHU3EyZiXWXpeq/au8qJ8VhdftMkty3n7Gj6HIGalQG8oiBNB3AJgA==", + "dev": true, + "engines": { + "node": ">=10.6.0" + } + }, + "node_modules/swarm-js/node_modules/got": { + "version": "11.8.6", + "resolved": "https://registry.npmjs.org/got/-/got-11.8.6.tgz", + "integrity": "sha512-6tfZ91bOr7bOXnK7PRDCGBLa1H4U080YHNaAQ2KsMGlLEzRbk44nsZF2E1IeRc3vtJHPVbKCYgdFbaGO2ljd8g==", + "dev": true, + "dependencies": { + "@sindresorhus/is": "^4.0.0", + "@szmarczak/http-timer": "^4.0.5", + "@types/cacheable-request": "^6.0.1", + "@types/responselike": "^1.0.0", + "cacheable-lookup": "^5.0.3", + "cacheable-request": "^7.0.2", + "decompress-response": "^6.0.0", + "http2-wrapper": "^1.0.0-beta.5.2", + "lowercase-keys": "^2.0.0", + "p-cancelable": "^2.0.0", + "responselike": "^2.0.0" + }, + "engines": { + "node": ">=10.19.0" + }, + "funding": { + "url": "https://github.com/sindresorhus/got?sponsor=1" + } + }, + "node_modules/swarm-js/node_modules/http2-wrapper": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/http2-wrapper/-/http2-wrapper-1.0.3.tgz", + "integrity": "sha512-V+23sDMr12Wnz7iTcDeJr3O6AIxlnvT/bmaAAAP/Xda35C90p9599p0F1eHR/N1KILWSoWVAiOMFjBBXaXSMxg==", + "dev": true, + "dependencies": { + "quick-lru": "^5.1.1", + "resolve-alpn": "^1.0.0" + }, + "engines": { + "node": ">=10.19.0" + } + }, + "node_modules/swarm-js/node_modules/lowercase-keys": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", + "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/swarm-js/node_modules/p-cancelable": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-2.1.1.tgz", + "integrity": "sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/tar": { + "version": "4.4.19", + "resolved": "https://registry.npmjs.org/tar/-/tar-4.4.19.tgz", + "integrity": "sha512-a20gEsvHnWe0ygBY8JbxoM4w3SJdhc7ZAuxkLqh+nvNQN2IOt0B5lLgM490X5Hl8FF0dl0tOf2ewFYAlIFgzVA==", + "dev": true, + "dependencies": { + "chownr": "^1.1.4", + "fs-minipass": "^1.2.7", + "minipass": "^2.9.0", + "minizlib": "^1.3.3", + "mkdirp": "^0.5.5", + "safe-buffer": "^5.2.1", + "yallist": "^3.1.1" + }, + "engines": { + "node": ">=4.5" + } + }, + "node_modules/tar/node_modules/mkdirp": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", + "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", + "dev": true, + "dependencies": { + "minimist": "^1.2.6" + }, + "bin": { + "mkdirp": "bin/cmd.js" + } + }, + "node_modules/timed-out": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/timed-out/-/timed-out-4.0.1.tgz", + "integrity": "sha512-G7r3AhovYtr5YKOWQkta8RKAPb+J9IsO4uVmzjl8AZwfhs8UcUwTiD6gcJYSgOtzyjvQKrKYn41syHbUWMkafA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/toidentifier": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", + "dev": true, + "engines": { + "node": ">=0.6" + } + }, + "node_modules/tough-cookie": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", + "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", + "dev": true, + "dependencies": { + "psl": "^1.1.28", + "punycode": "^2.1.1" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", + "dev": true + }, + "node_modules/ts-node": { + "version": "10.9.1", + "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.1.tgz", + "integrity": "sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==", + "dependencies": { + "@cspotcode/source-map-support": "^0.8.0", + "@tsconfig/node10": "^1.0.7", + "@tsconfig/node12": "^1.0.7", + "@tsconfig/node14": "^1.0.0", + "@tsconfig/node16": "^1.0.2", + "acorn": "^8.4.1", + "acorn-walk": "^8.1.1", + "arg": "^4.1.0", + "create-require": "^1.1.0", + "diff": "^4.0.1", + "make-error": "^1.1.1", + "v8-compile-cache-lib": "^3.0.1", + "yn": "3.1.1" + }, + "bin": { + "ts-node": "dist/bin.js", + "ts-node-cwd": "dist/bin-cwd.js", + "ts-node-esm": "dist/bin-esm.js", + "ts-node-script": "dist/bin-script.js", + "ts-node-transpile-only": "dist/bin-transpile.js", + "ts-script": "dist/bin-script-deprecated.js" + }, + "peerDependencies": { + "@swc/core": ">=1.2.50", + "@swc/wasm": ">=1.2.50", + "@types/node": "*", + "typescript": ">=2.7" + }, + "peerDependenciesMeta": { + "@swc/core": { + "optional": true + }, + "@swc/wasm": { + "optional": true + } + } + }, + "node_modules/tunnel-agent": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", + "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==", + "dev": true, + "dependencies": { + "safe-buffer": "^5.0.1" + }, + "engines": { + "node": "*" + } + }, + "node_modules/tweetnacl": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", + "integrity": "sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==", + "dev": true + }, + "node_modules/type": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/type/-/type-1.2.0.tgz", + "integrity": "sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==", + "dev": true + }, + "node_modules/type-is": { + "version": "1.6.18", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "dev": true, + "dependencies": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/typedarray-to-buffer": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", + "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", + "dev": true, + "dependencies": { + "is-typedarray": "^1.0.0" + } + }, + "node_modules/typescript": { + "version": "4.9.5", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz", + "integrity": "sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=4.2.0" + } + }, + "node_modules/ultron": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ultron/-/ultron-1.1.1.tgz", + "integrity": "sha512-UIEXBNeYmKptWH6z8ZnqTeS8fV74zG0/eRU9VGkpzz+LIJNs8W/zM/L+7ctCkRrgbNnnR0xxw4bKOr0cW0N0Og==", + "dev": true + }, + "node_modules/universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "dev": true, + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/url-set-query": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/url-set-query/-/url-set-query-1.0.0.tgz", + "integrity": "sha512-3AChu4NiXquPfeckE5R5cGdiHCMWJx1dwCWOmWIL4KHAziJNOFIYJlpGFeKDvwLPHovZRCxK3cYlwzqI9Vp+Gg==", + "dev": true + }, + "node_modules/utf-8-validate": { + "version": "5.0.10", + "resolved": "https://registry.npmjs.org/utf-8-validate/-/utf-8-validate-5.0.10.tgz", + "integrity": "sha512-Z6czzLq4u8fPOyx7TU6X3dvUZVvoJmxSQ+IcrlmagKhilxlhZgxPK6C5Jqbkw1IDUmFTM+cz9QDnnLTwDz/2gQ==", + "dev": true, + "hasInstallScript": true, + "dependencies": { + "node-gyp-build": "^4.3.0" + }, + "engines": { + "node": ">=6.14.2" + } + }, + "node_modules/utf8": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/utf8/-/utf8-3.0.0.tgz", + "integrity": "sha512-E8VjFIQ/TyQgp+TZfS6l8yp/xWppSAHzidGiRrqe4bK4XP9pTRyKFgGJpO3SN7zdX4DeomTrwaseCHovfpFcqQ==", + "dev": true + }, + "node_modules/util": { + "version": "0.12.5", + "resolved": "https://registry.npmjs.org/util/-/util-0.12.5.tgz", + "integrity": "sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA==", + "dev": true, + "dependencies": { + "inherits": "^2.0.3", + "is-arguments": "^1.0.4", + "is-generator-function": "^1.0.7", + "is-typed-array": "^1.1.3", + "which-typed-array": "^1.1.2" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "dev": true + }, + "node_modules/utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", + "dev": true, + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/uuid": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", + "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", + "deprecated": "Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details.", + "dev": true, + "bin": { + "uuid": "bin/uuid" + } + }, + "node_modules/v8-compile-cache-lib": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", + "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==" + }, + "node_modules/varint": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/varint/-/varint-5.0.2.tgz", + "integrity": "sha512-lKxKYG6H03yCZUpAGOPOsMcGxd1RHCu1iKvEHYDPmTyq2HueGhD73ssNBqqQWfvYs04G9iUFRvmAVLW20Jw6ow==", + "dev": true + }, + "node_modules/vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/verror": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", + "integrity": "sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw==", + "dev": true, + "engines": [ + "node >=0.6.0" + ], + "dependencies": { + "assert-plus": "^1.0.0", + "core-util-is": "1.0.2", + "extsprintf": "^1.2.0" + } + }, + "node_modules/web3": { + "version": "1.10.3", + "resolved": "https://registry.npmjs.org/web3/-/web3-1.10.3.tgz", + "integrity": "sha512-DgUdOOqC/gTqW+VQl1EdPxrVRPB66xVNtuZ5KD4adVBtko87hkgM8BTZ0lZ8IbUfnQk6DyjcDujMiH3oszllAw==", + "dev": true, + "hasInstallScript": true, + "dependencies": { + "web3-bzz": "1.10.3", + "web3-core": "1.10.3", + "web3-eth": "1.10.3", + "web3-eth-personal": "1.10.3", + "web3-net": "1.10.3", + "web3-shh": "1.10.3", + "web3-utils": "1.10.3" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/web3-bzz": { + "version": "1.10.3", + "resolved": "https://registry.npmjs.org/web3-bzz/-/web3-bzz-1.10.3.tgz", + "integrity": "sha512-XDIRsTwekdBXtFytMpHBuun4cK4x0ZMIDXSoo1UVYp+oMyZj07c7gf7tNQY5qZ/sN+CJIas4ilhN25VJcjSijQ==", + "dev": true, + "hasInstallScript": true, + "dependencies": { + "@types/node": "^12.12.6", + "got": "12.1.0", + "swarm-js": "^0.1.40" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/web3-bzz/node_modules/@types/node": { + "version": "12.20.55", + "resolved": "https://registry.npmjs.org/@types/node/-/node-12.20.55.tgz", + "integrity": "sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==", + "dev": true + }, + "node_modules/web3-core": { + "version": "1.10.3", + "resolved": "https://registry.npmjs.org/web3-core/-/web3-core-1.10.3.tgz", + "integrity": "sha512-Vbk0/vUNZxJlz3RFjAhNNt7qTpX8yE3dn3uFxfX5OHbuon5u65YEOd3civ/aQNW745N0vGUlHFNxxmn+sG9DIw==", + "dev": true, + "dependencies": { + "@types/bn.js": "^5.1.1", + "@types/node": "^12.12.6", + "bignumber.js": "^9.0.0", + "web3-core-helpers": "1.10.3", + "web3-core-method": "1.10.3", + "web3-core-requestmanager": "1.10.3", + "web3-utils": "1.10.3" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/web3-core-helpers": { + "version": "1.10.3", + "resolved": "https://registry.npmjs.org/web3-core-helpers/-/web3-core-helpers-1.10.3.tgz", + "integrity": "sha512-Yv7dQC3B9ipOc5sWm3VAz1ys70Izfzb8n9rSiQYIPjpqtJM+3V4EeK6ghzNR6CO2es0+Yu9CtCkw0h8gQhrTxA==", + "dev": true, + "dependencies": { + "web3-eth-iban": "1.10.3", + "web3-utils": "1.10.3" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/web3-core-method": { + "version": "1.10.3", + "resolved": "https://registry.npmjs.org/web3-core-method/-/web3-core-method-1.10.3.tgz", + "integrity": "sha512-VZ/Dmml4NBmb0ep5PTSg9oqKoBtG0/YoMPei/bq/tUdlhB2dMB79sbeJPwx592uaV0Vpk7VltrrrBv5hTM1y4Q==", + "dev": true, + "dependencies": { + "@ethersproject/transactions": "^5.6.2", + "web3-core-helpers": "1.10.3", + "web3-core-promievent": "1.10.3", + "web3-core-subscriptions": "1.10.3", + "web3-utils": "1.10.3" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/web3-core-promievent": { + "version": "1.10.3", + "resolved": "https://registry.npmjs.org/web3-core-promievent/-/web3-core-promievent-1.10.3.tgz", + "integrity": "sha512-HgjY+TkuLm5uTwUtaAfkTgRx/NzMxvVradCi02gy17NxDVdg/p6svBHcp037vcNpkuGeFznFJgULP+s2hdVgUQ==", + "dev": true, + "dependencies": { + "eventemitter3": "4.0.4" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/web3-core-requestmanager": { + "version": "1.10.3", + "resolved": "https://registry.npmjs.org/web3-core-requestmanager/-/web3-core-requestmanager-1.10.3.tgz", + "integrity": "sha512-VT9sKJfgM2yBOIxOXeXiDuFMP4pxzF6FT+y8KTLqhDFHkbG3XRe42Vm97mB/IvLQCJOmokEjl3ps8yP1kbggyw==", + "dev": true, + "dependencies": { + "util": "^0.12.5", + "web3-core-helpers": "1.10.3", + "web3-providers-http": "1.10.3", + "web3-providers-ipc": "1.10.3", + "web3-providers-ws": "1.10.3" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/web3-core-subscriptions": { + "version": "1.10.3", + "resolved": "https://registry.npmjs.org/web3-core-subscriptions/-/web3-core-subscriptions-1.10.3.tgz", + "integrity": "sha512-KW0Mc8sgn70WadZu7RjQ4H5sNDJ5Lx8JMI3BWos+f2rW0foegOCyWhRu33W1s6ntXnqeBUw5rRCXZRlA3z+HNA==", + "dev": true, + "dependencies": { + "eventemitter3": "4.0.4", + "web3-core-helpers": "1.10.3" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/web3-core/node_modules/@types/node": { + "version": "12.20.55", + "resolved": "https://registry.npmjs.org/@types/node/-/node-12.20.55.tgz", + "integrity": "sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==", + "dev": true + }, + "node_modules/web3-eth": { + "version": "1.10.3", + "resolved": "https://registry.npmjs.org/web3-eth/-/web3-eth-1.10.3.tgz", + "integrity": "sha512-Uk1U2qGiif2mIG8iKu23/EQJ2ksB1BQXy3wF3RvFuyxt8Ft9OEpmGlO7wOtAyJdoKzD5vcul19bJpPcWSAYZhA==", + "dev": true, + "dependencies": { + "web3-core": "1.10.3", + "web3-core-helpers": "1.10.3", + "web3-core-method": "1.10.3", + "web3-core-subscriptions": "1.10.3", + "web3-eth-abi": "1.10.3", + "web3-eth-accounts": "1.10.3", + "web3-eth-contract": "1.10.3", + "web3-eth-ens": "1.10.3", + "web3-eth-iban": "1.10.3", + "web3-eth-personal": "1.10.3", + "web3-net": "1.10.3", + "web3-utils": "1.10.3" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/web3-eth-abi": { + "version": "1.10.3", + "resolved": "https://registry.npmjs.org/web3-eth-abi/-/web3-eth-abi-1.10.3.tgz", + "integrity": "sha512-O8EvV67uhq0OiCMekqYsDtb6FzfYzMXT7VMHowF8HV6qLZXCGTdB/NH4nJrEh2mFtEwVdS6AmLFJAQd2kVyoMQ==", + "dev": true, + "dependencies": { + "@ethersproject/abi": "^5.6.3", + "web3-utils": "1.10.3" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/web3-eth-accounts": { + "version": "1.10.3", + "resolved": "https://registry.npmjs.org/web3-eth-accounts/-/web3-eth-accounts-1.10.3.tgz", + "integrity": "sha512-8MipGgwusDVgn7NwKOmpeo3gxzzd+SmwcWeBdpXknuyDiZSQy9tXe+E9LeFGrmys/8mLLYP79n3jSbiTyv+6pQ==", + "dev": true, + "dependencies": { + "@ethereumjs/common": "2.6.5", + "@ethereumjs/tx": "3.5.2", + "@ethereumjs/util": "^8.1.0", + "eth-lib": "0.2.8", + "scrypt-js": "^3.0.1", + "uuid": "^9.0.0", + "web3-core": "1.10.3", + "web3-core-helpers": "1.10.3", + "web3-core-method": "1.10.3", + "web3-utils": "1.10.3" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/web3-eth-accounts/node_modules/@ethereumjs/common": { + "version": "2.6.5", + "resolved": "https://registry.npmjs.org/@ethereumjs/common/-/common-2.6.5.tgz", + "integrity": "sha512-lRyVQOeCDaIVtgfbowla32pzeDv2Obr8oR8Put5RdUBNRGr1VGPGQNGP6elWIpgK3YdpzqTOh4GyUGOureVeeA==", + "dev": true, + "dependencies": { + "crc-32": "^1.2.0", + "ethereumjs-util": "^7.1.5" + } + }, + "node_modules/web3-eth-accounts/node_modules/@ethereumjs/tx": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/@ethereumjs/tx/-/tx-3.5.2.tgz", + "integrity": "sha512-gQDNJWKrSDGu2w7w0PzVXVBNMzb7wwdDOmOqczmhNjqFxFuIbhVJDwiGEnxFNC2/b8ifcZzY7MLcluizohRzNw==", + "dev": true, + "dependencies": { + "@ethereumjs/common": "^2.6.4", + "ethereumjs-util": "^7.1.5" + } + }, + "node_modules/web3-eth-accounts/node_modules/eth-lib": { + "version": "0.2.8", + "resolved": "https://registry.npmjs.org/eth-lib/-/eth-lib-0.2.8.tgz", + "integrity": "sha512-ArJ7x1WcWOlSpzdoTBX8vkwlkSQ85CjjifSZtV4co64vWxSV8geWfPI9x4SVYu3DSxnX4yWFVTtGL+j9DUFLNw==", + "dev": true, + "dependencies": { + "bn.js": "^4.11.6", + "elliptic": "^6.4.0", + "xhr-request-promise": "^0.1.2" + } + }, + "node_modules/web3-eth-accounts/node_modules/uuid": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz", + "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==", + "dev": true, + "funding": [ + "https://github.com/sponsors/broofa", + "https://github.com/sponsors/ctavan" + ], + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/web3-eth-contract": { + "version": "1.10.3", + "resolved": "https://registry.npmjs.org/web3-eth-contract/-/web3-eth-contract-1.10.3.tgz", + "integrity": "sha512-Y2CW61dCCyY4IoUMD4JsEQWrILX4FJWDWC/Txx/pr3K/+fGsBGvS9kWQN5EsVXOp4g7HoFOfVh9Lf7BmVVSRmg==", + "dev": true, + "dependencies": { + "@types/bn.js": "^5.1.1", + "web3-core": "1.10.3", + "web3-core-helpers": "1.10.3", + "web3-core-method": "1.10.3", + "web3-core-promievent": "1.10.3", + "web3-core-subscriptions": "1.10.3", + "web3-eth-abi": "1.10.3", + "web3-utils": "1.10.3" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/web3-eth-ens": { + "version": "1.10.3", + "resolved": "https://registry.npmjs.org/web3-eth-ens/-/web3-eth-ens-1.10.3.tgz", + "integrity": "sha512-hR+odRDXGqKemw1GFniKBEXpjYwLgttTES+bc7BfTeoUyUZXbyDHe5ifC+h+vpzxh4oS0TnfcIoarK0Z9tFSiQ==", + "dev": true, + "dependencies": { + "content-hash": "^2.5.2", + "eth-ens-namehash": "2.0.8", + "web3-core": "1.10.3", + "web3-core-helpers": "1.10.3", + "web3-core-promievent": "1.10.3", + "web3-eth-abi": "1.10.3", + "web3-eth-contract": "1.10.3", + "web3-utils": "1.10.3" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/web3-eth-iban": { + "version": "1.10.3", + "resolved": "https://registry.npmjs.org/web3-eth-iban/-/web3-eth-iban-1.10.3.tgz", + "integrity": "sha512-ZCfOjYKAjaX2TGI8uif5ah+J3BYFuo+47JOIV1RIz2l7kD9VfnxvRH5UiQDRyMALQC7KFd2hUqIEtHklapNyKA==", + "dev": true, + "dependencies": { + "bn.js": "^5.2.1", + "web3-utils": "1.10.3" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/web3-eth-iban/node_modules/bn.js": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz", + "integrity": "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==", + "dev": true + }, + "node_modules/web3-eth-personal": { + "version": "1.10.3", + "resolved": "https://registry.npmjs.org/web3-eth-personal/-/web3-eth-personal-1.10.3.tgz", + "integrity": "sha512-avrQ6yWdADIvuNQcFZXmGLCEzulQa76hUOuVywN7O3cklB4nFc/Gp3yTvD3bOAaE7DhjLQfhUTCzXL7WMxVTsw==", + "dev": true, + "dependencies": { + "@types/node": "^12.12.6", + "web3-core": "1.10.3", + "web3-core-helpers": "1.10.3", + "web3-core-method": "1.10.3", + "web3-net": "1.10.3", + "web3-utils": "1.10.3" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/web3-eth-personal/node_modules/@types/node": { + "version": "12.20.55", + "resolved": "https://registry.npmjs.org/@types/node/-/node-12.20.55.tgz", + "integrity": "sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==", + "dev": true + }, + "node_modules/web3-net": { + "version": "1.10.3", + "resolved": "https://registry.npmjs.org/web3-net/-/web3-net-1.10.3.tgz", + "integrity": "sha512-IoSr33235qVoI1vtKssPUigJU9Fc/Ph0T9CgRi15sx+itysmvtlmXMNoyd6Xrgm9LuM4CIhxz7yDzH93B79IFg==", + "dev": true, + "dependencies": { + "web3-core": "1.10.3", + "web3-core-method": "1.10.3", + "web3-utils": "1.10.3" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/web3-providers-http": { + "version": "1.10.3", + "resolved": "https://registry.npmjs.org/web3-providers-http/-/web3-providers-http-1.10.3.tgz", + "integrity": "sha512-6dAgsHR3MxJ0Qyu3QLFlQEelTapVfWNTu5F45FYh8t7Y03T1/o+YAkVxsbY5AdmD+y5bXG/XPJ4q8tjL6MgZHw==", + "dev": true, + "dependencies": { + "abortcontroller-polyfill": "^1.7.5", + "cross-fetch": "^4.0.0", + "es6-promise": "^4.2.8", + "web3-core-helpers": "1.10.3" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/web3-providers-ipc": { + "version": "1.10.3", + "resolved": "https://registry.npmjs.org/web3-providers-ipc/-/web3-providers-ipc-1.10.3.tgz", + "integrity": "sha512-vP5WIGT8FLnGRfswTxNs9rMfS1vCbMezj/zHbBe/zB9GauBRTYVrUo2H/hVrhLg8Ut7AbsKZ+tCJ4mAwpKi2hA==", + "dev": true, + "dependencies": { + "oboe": "2.1.5", + "web3-core-helpers": "1.10.3" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/web3-providers-ws": { + "version": "1.10.3", + "resolved": "https://registry.npmjs.org/web3-providers-ws/-/web3-providers-ws-1.10.3.tgz", + "integrity": "sha512-/filBXRl48INxsh6AuCcsy4v5ndnTZ/p6bl67kmO9aK1wffv7CT++DrtclDtVMeDGCgB3van+hEf9xTAVXur7Q==", + "dev": true, + "dependencies": { + "eventemitter3": "4.0.4", + "web3-core-helpers": "1.10.3", + "websocket": "^1.0.32" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/web3-shh": { + "version": "1.10.3", + "resolved": "https://registry.npmjs.org/web3-shh/-/web3-shh-1.10.3.tgz", + "integrity": "sha512-cAZ60CPvs9azdwMSQ/PSUdyV4PEtaW5edAZhu3rCXf6XxQRliBboic+AvwUvB6j3eswY50VGa5FygfVmJ1JVng==", + "dev": true, + "hasInstallScript": true, + "dependencies": { + "web3-core": "1.10.3", + "web3-core-method": "1.10.3", + "web3-core-subscriptions": "1.10.3", + "web3-net": "1.10.3" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/web3-utils": { + "version": "1.10.3", + "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-1.10.3.tgz", + "integrity": "sha512-OqcUrEE16fDBbGoQtZXWdavsPzbGIDc5v3VrRTZ0XrIpefC/viZ1ZU9bGEemazyS0catk/3rkOOxpzTfY+XsyQ==", + "dev": true, + "dependencies": { + "@ethereumjs/util": "^8.1.0", + "bn.js": "^5.2.1", + "ethereum-bloom-filters": "^1.0.6", + "ethereum-cryptography": "^2.1.2", + "ethjs-unit": "0.1.6", + "number-to-bn": "1.7.0", + "randombytes": "^2.1.0", + "utf8": "3.0.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/web3-utils/node_modules/bn.js": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz", + "integrity": "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==", + "dev": true + }, + "node_modules/webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", + "dev": true + }, + "node_modules/websocket": { + "version": "1.0.34", + "resolved": "https://registry.npmjs.org/websocket/-/websocket-1.0.34.tgz", + "integrity": "sha512-PRDso2sGwF6kM75QykIesBijKSVceR6jL2G8NGYyq2XrItNC2P5/qL5XeR056GhA+Ly7JMFvJb9I312mJfmqnQ==", + "dev": true, + "dependencies": { + "bufferutil": "^4.0.1", + "debug": "^2.2.0", + "es5-ext": "^0.10.50", + "typedarray-to-buffer": "^3.1.5", + "utf-8-validate": "^5.0.2", + "yaeti": "^0.0.6" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", + "dev": true, + "dependencies": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + }, + "node_modules/which-typed-array": { + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.13.tgz", + "integrity": "sha512-P5Nra0qjSncduVPEAr7xhoF5guty49ArDTwzJ/yNuPIbZppyRxFQsRCWrocxIY+CnMVG+qfbU2FmDKyvSGClow==", + "dev": true, + "dependencies": { + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.4", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "dev": true + }, + "node_modules/ws": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/ws/-/ws-3.3.3.tgz", + "integrity": "sha512-nnWLa/NwZSt4KQJu51MYlCcSQ5g7INpOrOMt4XV8j4dqTXdmlUmSHQ8/oLC069ckre0fRsgfvsKwbTdtKLCDkA==", + "dev": true, + "dependencies": { + "async-limiter": "~1.0.0", + "safe-buffer": "~5.1.0", + "ultron": "~1.1.0" + } + }, + "node_modules/ws/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "node_modules/xhr": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/xhr/-/xhr-2.6.0.tgz", + "integrity": "sha512-/eCGLb5rxjx5e3mF1A7s+pLlR6CGyqWN91fv1JgER5mVWg1MZmlhBvy9kjcsOdRk8RrIujotWyJamfyrp+WIcA==", + "dev": true, + "dependencies": { + "global": "~4.4.0", + "is-function": "^1.0.1", + "parse-headers": "^2.0.0", + "xtend": "^4.0.0" + } + }, + "node_modules/xhr-request": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/xhr-request/-/xhr-request-1.1.0.tgz", + "integrity": "sha512-Y7qzEaR3FDtL3fP30k9wO/e+FBnBByZeybKOhASsGP30NIkRAAkKD/sCnLvgEfAIEC1rcmK7YG8f4oEnIrrWzA==", + "dev": true, + "dependencies": { + "buffer-to-arraybuffer": "^0.0.5", + "object-assign": "^4.1.1", + "query-string": "^5.0.1", + "simple-get": "^2.7.0", + "timed-out": "^4.0.1", + "url-set-query": "^1.0.0", + "xhr": "^2.0.4" + } + }, + "node_modules/xhr-request-promise": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/xhr-request-promise/-/xhr-request-promise-0.1.3.tgz", + "integrity": "sha512-YUBytBsuwgitWtdRzXDDkWAXzhdGB8bYm0sSzMPZT7Z2MBjMSTHFsyCT1yCRATY+XC69DUrQraRAEgcoCRaIPg==", + "dev": true, + "dependencies": { + "xhr-request": "^1.1.0" + } + }, + "node_modules/xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", + "dev": true, + "engines": { + "node": ">=0.4" + } + }, + "node_modules/yaeti": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/yaeti/-/yaeti-0.0.6.tgz", + "integrity": "sha512-MvQa//+KcZCUkBTIC9blM+CU9J2GzuTytsOUwf2lidtvkx/6gnEp1QvJv34t9vdjhFmha/mUiNDbN0D0mJWdug==", + "dev": true, + "engines": { + "node": ">=0.10.32" + } + }, + "node_modules/yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true + }, + "node_modules/yn": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", + "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", + "engines": { + "node": ">=6" + } + } + }, + "dependencies": { + "@cspotcode/source-map-support": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", + "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", + "requires": { + "@jridgewell/trace-mapping": "0.3.9" + } + }, + "@ethereumjs/common": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/@ethereumjs/common/-/common-3.2.0.tgz", + "integrity": "sha512-pksvzI0VyLgmuEF2FA/JR/4/y6hcPq8OUail3/AvycBaW1d5VSauOZzqGvJ3RTmR4MU35lWE8KseKOsEhrFRBA==", + "dev": true, + "requires": { + "@ethereumjs/util": "^8.1.0", + "crc-32": "^1.2.0" + } + }, + "@ethereumjs/rlp": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@ethereumjs/rlp/-/rlp-4.0.1.tgz", + "integrity": "sha512-tqsQiBQDQdmPWE1xkkBq4rlSW5QZpLOUJ5RJh2/9fug+q9tnUhuZoVLk7s0scUIKTOzEtR72DFBXI4WiZcMpvw==", + "dev": true + }, + "@ethereumjs/tx": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@ethereumjs/tx/-/tx-4.2.0.tgz", + "integrity": "sha512-1nc6VO4jtFd172BbSnTnDQVr9IYBFl1y4xPzZdtkrkKIncBCkdbgfdRV+MiTkJYAtTxvV12GRZLqBFT1PNK6Yw==", + "dev": true, + "requires": { + "@ethereumjs/common": "^3.2.0", + "@ethereumjs/rlp": "^4.0.1", + "@ethereumjs/util": "^8.1.0", + "ethereum-cryptography": "^2.0.0" + } + }, + "@ethereumjs/util": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/@ethereumjs/util/-/util-8.1.0.tgz", + "integrity": "sha512-zQ0IqbdX8FZ9aw11vP+dZkKDkS+kgIvQPHnSAXzP9pLu+Rfu3D3XEeLbicvoXJTYnhZiPmsZUxgdzXwNKxRPbA==", + "dev": true, + "requires": { + "@ethereumjs/rlp": "^4.0.1", + "ethereum-cryptography": "^2.0.0", + "micro-ftch": "^0.3.1" + } + }, + "@ethersproject/abi": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/abi/-/abi-5.7.0.tgz", + "integrity": "sha512-351ktp42TiRcYB3H1OP8yajPeAQstMW/yCFokj/AthP9bLHzQFPlOrxOcwYEDkUAICmOHljvN4K39OMTMUa9RA==", + "dev": true, + "requires": { + "@ethersproject/address": "^5.7.0", + "@ethersproject/bignumber": "^5.7.0", + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/constants": "^5.7.0", + "@ethersproject/hash": "^5.7.0", + "@ethersproject/keccak256": "^5.7.0", + "@ethersproject/logger": "^5.7.0", + "@ethersproject/properties": "^5.7.0", + "@ethersproject/strings": "^5.7.0" + } + }, + "@ethersproject/abstract-provider": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/abstract-provider/-/abstract-provider-5.7.0.tgz", + "integrity": "sha512-R41c9UkchKCpAqStMYUpdunjo3pkEvZC3FAwZn5S5MGbXoMQOHIdHItezTETxAO5bevtMApSyEhn9+CHcDsWBw==", + "dev": true, + "requires": { + "@ethersproject/bignumber": "^5.7.0", + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/logger": "^5.7.0", + "@ethersproject/networks": "^5.7.0", + "@ethersproject/properties": "^5.7.0", + "@ethersproject/transactions": "^5.7.0", + "@ethersproject/web": "^5.7.0" + } + }, + "@ethersproject/abstract-signer": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/abstract-signer/-/abstract-signer-5.7.0.tgz", + "integrity": "sha512-a16V8bq1/Cz+TGCkE2OPMTOUDLS3grCpdjoJCYNnVBbdYEMSgKrU0+B90s8b6H+ByYTBZN7a3g76jdIJi7UfKQ==", + "dev": true, + "requires": { + "@ethersproject/abstract-provider": "^5.7.0", + "@ethersproject/bignumber": "^5.7.0", + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/logger": "^5.7.0", + "@ethersproject/properties": "^5.7.0" + } + }, + "@ethersproject/address": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/address/-/address-5.7.0.tgz", + "integrity": "sha512-9wYhYt7aghVGo758POM5nqcOMaE168Q6aRLJZwUmiqSrAungkG74gSSeKEIR7ukixesdRZGPgVqme6vmxs1fkA==", + "dev": true, + "requires": { + "@ethersproject/bignumber": "^5.7.0", + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/keccak256": "^5.7.0", + "@ethersproject/logger": "^5.7.0", + "@ethersproject/rlp": "^5.7.0" + } + }, + "@ethersproject/base64": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/base64/-/base64-5.7.0.tgz", + "integrity": "sha512-Dr8tcHt2mEbsZr/mwTPIQAf3Ai0Bks/7gTw9dSqk1mQvhW3XvRlmDJr/4n+wg1JmCl16NZue17CDh8xb/vZ0sQ==", + "dev": true, + "requires": { + "@ethersproject/bytes": "^5.7.0" + } + }, + "@ethersproject/bignumber": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/bignumber/-/bignumber-5.7.0.tgz", + "integrity": "sha512-n1CAdIHRWjSucQO3MC1zPSVgV/6dy/fjL9pMrPP9peL+QxEg9wOsVqwD4+818B6LUEtaXzVHQiuivzRoxPxUGw==", + "dev": true, + "requires": { + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/logger": "^5.7.0", + "bn.js": "^5.2.1" + }, + "dependencies": { + "bn.js": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz", + "integrity": "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==", + "dev": true + } + } + }, + "@ethersproject/bytes": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/bytes/-/bytes-5.7.0.tgz", + "integrity": "sha512-nsbxwgFXWh9NyYWo+U8atvmMsSdKJprTcICAkvbBffT75qDocbuggBU0SJiVK2MuTrp0q+xvLkTnGMPK1+uA9A==", + "dev": true, + "requires": { + "@ethersproject/logger": "^5.7.0" + } + }, + "@ethersproject/constants": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/constants/-/constants-5.7.0.tgz", + "integrity": "sha512-DHI+y5dBNvkpYUMiRQyxRBYBefZkJfo70VUkUAsRjcPs47muV9evftfZ0PJVCXYbAiCgght0DtcF9srFQmIgWA==", + "dev": true, + "requires": { + "@ethersproject/bignumber": "^5.7.0" + } + }, + "@ethersproject/hash": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/hash/-/hash-5.7.0.tgz", + "integrity": "sha512-qX5WrQfnah1EFnO5zJv1v46a8HW0+E5xuBBDTwMFZLuVTx0tbU2kkx15NqdjxecrLGatQN9FGQKpb1FKdHCt+g==", + "dev": true, + "requires": { + "@ethersproject/abstract-signer": "^5.7.0", + "@ethersproject/address": "^5.7.0", + "@ethersproject/base64": "^5.7.0", + "@ethersproject/bignumber": "^5.7.0", + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/keccak256": "^5.7.0", + "@ethersproject/logger": "^5.7.0", + "@ethersproject/properties": "^5.7.0", + "@ethersproject/strings": "^5.7.0" + } + }, + "@ethersproject/keccak256": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/keccak256/-/keccak256-5.7.0.tgz", + "integrity": "sha512-2UcPboeL/iW+pSg6vZ6ydF8tCnv3Iu/8tUmLLzWWGzxWKFFqOBQFLo6uLUv6BDrLgCDfN28RJ/wtByx+jZ4KBg==", + "dev": true, + "requires": { + "@ethersproject/bytes": "^5.7.0", + "js-sha3": "0.8.0" + } + }, + "@ethersproject/logger": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/logger/-/logger-5.7.0.tgz", + "integrity": "sha512-0odtFdXu/XHtjQXJYA3u9G0G8btm0ND5Cu8M7i5vhEcE8/HmF4Lbdqanwyv4uQTr2tx6b7fQRmgLrsnpQlmnig==", + "dev": true + }, + "@ethersproject/networks": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/@ethersproject/networks/-/networks-5.7.1.tgz", + "integrity": "sha512-n/MufjFYv3yFcUyfhnXotyDlNdFb7onmkSy8aQERi2PjNcnWQ66xXxa3XlS8nCcA8aJKJjIIMNJTC7tu80GwpQ==", + "dev": true, + "requires": { + "@ethersproject/logger": "^5.7.0" + } + }, + "@ethersproject/properties": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/properties/-/properties-5.7.0.tgz", + "integrity": "sha512-J87jy8suntrAkIZtecpxEPxY//szqr1mlBaYlQ0r4RCaiD2hjheqF9s1LVE8vVuJCXisjIP+JgtK/Do54ej4Sw==", + "dev": true, + "requires": { + "@ethersproject/logger": "^5.7.0" + } + }, + "@ethersproject/rlp": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/rlp/-/rlp-5.7.0.tgz", + "integrity": "sha512-rBxzX2vK8mVF7b0Tol44t5Tb8gomOHkj5guL+HhzQ1yBh/ydjGnpw6at+X6Iw0Kp3OzzzkcKp8N9r0W4kYSs9w==", + "dev": true, + "requires": { + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/logger": "^5.7.0" + } + }, + "@ethersproject/signing-key": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/signing-key/-/signing-key-5.7.0.tgz", + "integrity": "sha512-MZdy2nL3wO0u7gkB4nA/pEf8lu1TlFswPNmy8AiYkfKTdO6eXBJyUdmHO/ehm/htHw9K/qF8ujnTyUAD+Ry54Q==", + "dev": true, + "requires": { + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/logger": "^5.7.0", + "@ethersproject/properties": "^5.7.0", + "bn.js": "^5.2.1", + "elliptic": "6.5.4", + "hash.js": "1.1.7" + }, + "dependencies": { + "bn.js": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz", + "integrity": "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==", + "dev": true + } + } + }, + "@ethersproject/strings": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/strings/-/strings-5.7.0.tgz", + "integrity": "sha512-/9nu+lj0YswRNSH0NXYqrh8775XNyEdUQAuf3f+SmOrnVewcJ5SBNAjF7lpgehKi4abvNNXyf+HX86czCdJ8Mg==", + "dev": true, + "requires": { + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/constants": "^5.7.0", + "@ethersproject/logger": "^5.7.0" + } + }, + "@ethersproject/transactions": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/transactions/-/transactions-5.7.0.tgz", + "integrity": "sha512-kmcNicCp1lp8qanMTC3RIikGgoJ80ztTyvtsFvCYpSCfkjhD0jZ2LOrnbcuxuToLIUYYf+4XwD1rP+B/erDIhQ==", + "dev": true, + "requires": { + "@ethersproject/address": "^5.7.0", + "@ethersproject/bignumber": "^5.7.0", + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/constants": "^5.7.0", + "@ethersproject/keccak256": "^5.7.0", + "@ethersproject/logger": "^5.7.0", + "@ethersproject/properties": "^5.7.0", + "@ethersproject/rlp": "^5.7.0", + "@ethersproject/signing-key": "^5.7.0" + } + }, + "@ethersproject/web": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/@ethersproject/web/-/web-5.7.1.tgz", + "integrity": "sha512-Gueu8lSvyjBWL4cYsWsjh6MtMwM0+H4HvqFPZfB6dV8ctbP9zFAO73VG1cMWae0FLPCtz0peKPpZY8/ugJJX2w==", + "dev": true, + "requires": { + "@ethersproject/base64": "^5.7.0", + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/logger": "^5.7.0", + "@ethersproject/properties": "^5.7.0", + "@ethersproject/strings": "^5.7.0" + } + }, + "@iota/sdk": { + "version": "file:..", + "requires": { + "@types/jest": "^29.4.0", + "@types/node": "^18.15.12", + "@typescript-eslint/eslint-plugin": "^5.30.7", + "@typescript-eslint/parser": "^5.30.7", + "cargo-cp-artifact": "^0.1.6", + "class-transformer": "^0.5.1", + "dotenv": "^16.0.3", + "electron-build-env": "^0.2.0", + "eslint": "^8.20.0", + "eslint-config-prettier": "^8.5.0", + "jest": "^29.4.2", + "jest-matcher-utils": "^29.5.0", + "prebuild": "^12.1.0", + "prebuild-install": "^7.1.1", + "prettier": "^2.8.3", + "reflect-metadata": "^0.1.13", + "ts-jest": "^29.0.5", + "typedoc": "^0.24.6", + "typedoc-plugin-markdown": "^3.14.0", + "typescript": "^4.9.4", + "webpack": "^5.88.2", + "webpack-cli": "^5.1.4" + } + }, + "@jridgewell/resolve-uri": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz", + "integrity": "sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==" + }, + "@jridgewell/sourcemap-codec": { + "version": "1.4.15", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", + "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==" + }, + "@jridgewell/trace-mapping": { + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", + "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", + "requires": { + "@jridgewell/resolve-uri": "^3.0.3", + "@jridgewell/sourcemap-codec": "^1.4.10" + } + }, + "@noble/curves": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.1.0.tgz", + "integrity": "sha512-091oBExgENk/kGj3AZmtBDMpxQPDtxQABR2B9lb1JbVTs6ytdzZNwvhxQ4MWasRNEzlbEH8jCWFCwhF/Obj5AA==", + "dev": true, + "requires": { + "@noble/hashes": "1.3.1" + } + }, + "@noble/hashes": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.3.1.tgz", + "integrity": "sha512-EbqwksQwz9xDRGfDST86whPBgM65E0OH/pCgqW0GBVzO22bNE+NuIbeTb714+IfSjU3aRk47EUvXIb5bTsenKA==", + "dev": true + }, + "@scure/base": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@scure/base/-/base-1.1.3.tgz", + "integrity": "sha512-/+SgoRjLq7Xlf0CWuLHq2LUZeL/w65kfzAPG5NH9pcmBhs+nunQTn4gvdwgMTIXnt9b2C/1SeL2XiysZEyIC9Q==", + "dev": true + }, + "@scure/bip32": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/@scure/bip32/-/bip32-1.3.1.tgz", + "integrity": "sha512-osvveYtyzdEVbt3OfwwXFr4P2iVBL5u1Q3q4ONBfDY/UpOuXmOlbgwc1xECEboY8wIays8Yt6onaWMUdUbfl0A==", + "dev": true, + "requires": { + "@noble/curves": "~1.1.0", + "@noble/hashes": "~1.3.1", + "@scure/base": "~1.1.0" + } + }, + "@scure/bip39": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@scure/bip39/-/bip39-1.2.1.tgz", + "integrity": "sha512-Z3/Fsz1yr904dduJD0NpiyRHhRYHdcnyh73FZWiV+/qhWi83wNJ3NWolYqCEN+ZWsUz2TWwajJggcRE9r1zUYg==", + "dev": true, + "requires": { + "@noble/hashes": "~1.3.0", + "@scure/base": "~1.1.0" + } + }, + "@sindresorhus/is": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-4.6.0.tgz", + "integrity": "sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw==", + "dev": true + }, + "@szmarczak/http-timer": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-5.0.1.tgz", + "integrity": "sha512-+PmQX0PiAYPMeVYe237LJAYvOMYW1j2rH5YROyS3b4CTVJum34HfRvKvAzozHAQG0TnHNdUfY9nCeUyRAs//cw==", + "dev": true, + "requires": { + "defer-to-connect": "^2.0.1" + } + }, + "@tsconfig/node10": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.9.tgz", + "integrity": "sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==" + }, + "@tsconfig/node12": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz", + "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==" + }, + "@tsconfig/node14": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz", + "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==" + }, + "@tsconfig/node16": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.4.tgz", + "integrity": "sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==" + }, + "@types/bn.js": { + "version": "5.1.5", + "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-5.1.5.tgz", + "integrity": "sha512-V46N0zwKRF5Q00AZ6hWtN0T8gGmDUaUzLWQvHFo5yThtVwK/VCenFY3wXVbOvNfajEpsTfQM4IN9k/d6gUVX3A==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, + "@types/cacheable-request": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/@types/cacheable-request/-/cacheable-request-6.0.3.tgz", + "integrity": "sha512-IQ3EbTzGxIigb1I3qPZc1rWJnH0BmSKv5QYTalEwweFvyBDLSAe24zP0le/hyi7ecGfZVlIVAg4BZqb8WBwKqw==", + "dev": true, + "requires": { + "@types/http-cache-semantics": "*", + "@types/keyv": "^3.1.4", + "@types/node": "*", + "@types/responselike": "^1.0.0" + } + }, + "@types/http-cache-semantics": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.0.4.tgz", + "integrity": "sha512-1m0bIFVc7eJWyve9S0RnuRgcQqF/Xd5QsUZAZeQFr1Q3/p9JWoQQEqmVy+DPTNpGXwhgIetAoYF8JSc33q29QA==", + "dev": true + }, + "@types/keyv": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/@types/keyv/-/keyv-3.1.4.tgz", + "integrity": "sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, + "@types/node": { + "version": "17.0.45", + "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.45.tgz", + "integrity": "sha512-w+tIMs3rq2afQdsPJlODhoUEKzFP1ayaoyl1CcnwtIlsVe7K7bA1NGm4s3PraqTLlXnbIN84zuBlxBWo1u9BLw==" + }, + "@types/pbkdf2": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@types/pbkdf2/-/pbkdf2-3.1.2.tgz", + "integrity": "sha512-uRwJqmiXmh9++aSu1VNEn3iIxWOhd8AHXNSdlaLfdAAdSTY9jYVeGWnzejM3dvrkbqE3/hyQkQQ29IFATEGlew==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, + "@types/responselike": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@types/responselike/-/responselike-1.0.3.tgz", + "integrity": "sha512-H/+L+UkTV33uf49PH5pCAUBVPNj2nDBXTN+qS1dOwyyg24l3CcicicCA7ca+HMvJBZcFgl5r8e+RR6elsb4Lyw==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, + "@types/secp256k1": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/@types/secp256k1/-/secp256k1-4.0.6.tgz", + "integrity": "sha512-hHxJU6PAEUn0TP4S/ZOzuTUvJWuZ6eIKeNKb5RBpODvSl6hp1Wrw4s7ATY50rklRCScUDpHzVA/DQdSjJ3UoYQ==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, + "abortcontroller-polyfill": { + "version": "1.7.5", + "resolved": "https://registry.npmjs.org/abortcontroller-polyfill/-/abortcontroller-polyfill-1.7.5.tgz", + "integrity": "sha512-JMJ5soJWP18htbbxJjG7bG6yuI6pRhgJ0scHHTfkUjf6wjP912xZWvM+A4sJK3gqd9E8fcPbDnOefbA9Th/FIQ==", + "dev": true + }, + "accepts": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", + "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", + "dev": true, + "requires": { + "mime-types": "~2.1.34", + "negotiator": "0.6.3" + } + }, + "acorn": { + "version": "8.11.2", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.2.tgz", + "integrity": "sha512-nc0Axzp/0FILLEVsm4fNwLCwMttvhEI263QtVPQcbpfZZ3ts0hLsZGOpE6czNlid7CJ9MlyH8reXkpsf3YUY4w==" + }, + "acorn-walk": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.0.tgz", + "integrity": "sha512-FS7hV565M5l1R08MXqo8odwMTB02C2UqzB17RVgu9EyuYFBqJZ3/ZY97sQD5FewVu1UyDFc1yztUDrAwT0EypA==" + }, + "ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, + "arg": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", + "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==" + }, + "array-flatten": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==", + "dev": true + }, + "asn1": { + "version": "0.2.6", + "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz", + "integrity": "sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==", + "dev": true, + "requires": { + "safer-buffer": "~2.1.0" + } + }, + "assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==", + "dev": true + }, + "async-limiter": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.1.tgz", + "integrity": "sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==", + "dev": true + }, + "asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", + "dev": true + }, + "available-typed-arrays": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", + "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==", + "dev": true + }, + "aws-sign2": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", + "integrity": "sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA==", + "dev": true + }, + "aws4": { + "version": "1.12.0", + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.12.0.tgz", + "integrity": "sha512-NmWvPnx0F1SfrQbYwOi7OeaNGokp9XhzNioJ/CSBs8Qa4vxug81mhJEAVZwxXuBmYB5KDRfMq/F3RR0BIU7sWg==", + "dev": true + }, + "base-x": { + "version": "3.0.9", + "resolved": "https://registry.npmjs.org/base-x/-/base-x-3.0.9.tgz", + "integrity": "sha512-H7JU6iBHTal1gp56aKoaa//YUxEaAOUiydvrV/pILqIHXTtqxSkATOnDA2u+jZ/61sD+L/412+7kzXRtWukhpQ==", + "dev": true, + "requires": { + "safe-buffer": "^5.0.1" + } + }, + "base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "dev": true + }, + "bcrypt-pbkdf": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", + "integrity": "sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==", + "dev": true, + "requires": { + "tweetnacl": "^0.14.3" + } + }, + "bignumber.js": { + "version": "9.1.2", + "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.1.2.tgz", + "integrity": "sha512-2/mKyZH9K85bzOEfhXDBFZTGd1CTs+5IHpeFQo9luiBG7hghdC851Pj2WAhb6E3R6b9tZj/XKhbg4fum+Kepug==", + "dev": true + }, + "blakejs": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/blakejs/-/blakejs-1.2.1.tgz", + "integrity": "sha512-QXUSXI3QVc/gJME0dBpXrag1kbzOqCjCX8/b54ntNyW6sjtoqxqRk3LTmXzaJoh71zMsDCjM+47jS7XiwN/+fQ==", + "dev": true + }, + "bluebird": { + "version": "3.7.2", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", + "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==", + "dev": true + }, + "bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", + "dev": true + }, + "body-parser": { + "version": "1.20.2", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.2.tgz", + "integrity": "sha512-ml9pReCu3M61kGlqoTm2umSXTlRTuGTx0bfYj+uIUKKYycG5NtSbeetV3faSU6R7ajOPw0g/J1PvK4qNy7s5bA==", + "dev": true, + "requires": { + "bytes": "3.1.2", + "content-type": "~1.0.5", + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "on-finished": "2.4.1", + "qs": "6.11.0", + "raw-body": "2.5.2", + "type-is": "~1.6.18", + "unpipe": "1.0.0" + } + }, + "brorand": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", + "integrity": "sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==", + "dev": true + }, + "browserify-aes": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", + "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", + "dev": true, + "requires": { + "buffer-xor": "^1.0.3", + "cipher-base": "^1.0.0", + "create-hash": "^1.1.0", + "evp_bytestokey": "^1.0.3", + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "bs58": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/bs58/-/bs58-4.0.1.tgz", + "integrity": "sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw==", + "dev": true, + "requires": { + "base-x": "^3.0.2" + } + }, + "bs58check": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/bs58check/-/bs58check-2.1.2.tgz", + "integrity": "sha512-0TS1jicxdU09dwJMNZtVAfzPi6Q6QeN0pM1Fkzrjn+XYHvzMKPU3pHVpva+769iNVSfIYWf7LJ6WR+BuuMf8cA==", + "dev": true, + "requires": { + "bs58": "^4.0.0", + "create-hash": "^1.1.0", + "safe-buffer": "^5.1.2" + } + }, + "buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "dev": true, + "requires": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + }, + "buffer-to-arraybuffer": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/buffer-to-arraybuffer/-/buffer-to-arraybuffer-0.0.5.tgz", + "integrity": "sha512-3dthu5CYiVB1DEJp61FtApNnNndTckcqe4pFcLdvHtrpG+kcyekCJKg4MRiDcFW7A6AODnXB9U4dwQiCW5kzJQ==", + "dev": true + }, + "buffer-xor": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", + "integrity": "sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ==", + "dev": true + }, + "bufferutil": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/bufferutil/-/bufferutil-4.0.8.tgz", + "integrity": "sha512-4T53u4PdgsXqKaIctwF8ifXlRTTmEPJ8iEPWFdGZvcf7sbwYo6FKFEX9eNNAnzFZ7EzJAQ3CJeOtCRA4rDp7Pw==", + "dev": true, + "requires": { + "node-gyp-build": "^4.3.0" + } + }, + "bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "dev": true + }, + "cacheable-lookup": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-6.1.0.tgz", + "integrity": "sha512-KJ/Dmo1lDDhmW2XDPMo+9oiy/CeqosPguPCrgcVzKyZrL6pM1gU2GmPY/xo6OQPTUaA/c0kwHuywB4E6nmT9ww==", + "dev": true + }, + "cacheable-request": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-7.0.4.tgz", + "integrity": "sha512-v+p6ongsrp0yTGbJXjgxPow2+DL93DASP4kXCDKb8/bwRtt9OEF3whggkkDkGNzgcWy2XaF4a8nZglC7uElscg==", + "dev": true, + "requires": { + "clone-response": "^1.0.2", + "get-stream": "^5.1.0", + "http-cache-semantics": "^4.0.0", + "keyv": "^4.0.0", + "lowercase-keys": "^2.0.0", + "normalize-url": "^6.0.1", + "responselike": "^2.0.0" + }, + "dependencies": { + "get-stream": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", + "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", + "dev": true, + "requires": { + "pump": "^3.0.0" + } + }, + "lowercase-keys": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", + "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==", + "dev": true + } + } + }, + "call-bind": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.5.tgz", + "integrity": "sha512-C3nQxfFZxFRVoJoGKKI8y3MOEo129NQ+FgQ08iye+Mk4zNZZGdjfs06bVTr+DBSlA66Q2VEcMki/cUCP4SercQ==", + "dev": true, + "requires": { + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.1", + "set-function-length": "^1.1.1" + } + }, + "caseless": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", + "integrity": "sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==", + "dev": true + }, + "chownr": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", + "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", + "dev": true + }, + "cids": { + "version": "0.7.5", + "resolved": "https://registry.npmjs.org/cids/-/cids-0.7.5.tgz", + "integrity": "sha512-zT7mPeghoWAu+ppn8+BS1tQ5qGmbMfB4AregnQjA/qHY3GC1m1ptI9GkWNlgeu38r7CuRdXB47uY2XgAYt6QVA==", + "dev": true, + "requires": { + "buffer": "^5.5.0", + "class-is": "^1.1.0", + "multibase": "~0.6.0", + "multicodec": "^1.0.0", + "multihashes": "~0.4.15" + }, + "dependencies": { + "multicodec": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/multicodec/-/multicodec-1.0.4.tgz", + "integrity": "sha512-NDd7FeS3QamVtbgfvu5h7fd1IlbaC4EQ0/pgU4zqE2vdHCmBGsUa0TiM8/TdSeG6BMPC92OOCf8F1ocE/Wkrrg==", + "dev": true, + "requires": { + "buffer": "^5.6.0", + "varint": "^5.0.0" + } + } + } + }, + "cipher-base": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", + "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", + "dev": true, + "requires": { + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "class-is": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/class-is/-/class-is-1.1.0.tgz", + "integrity": "sha512-rhjH9AG1fvabIDoGRVH587413LPjTZgmDF9fOFCbFJQV4yuocX1mHxxvXI4g3cGwbVY9wAYIoKlg1N79frJKQw==", + "dev": true + }, + "class-transformer": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/class-transformer/-/class-transformer-0.5.1.tgz", + "integrity": "sha512-SQa1Ws6hUbfC98vKGxZH3KFY0Y1lm5Zm0SY8XX9zbK7FJCyVEac3ATW0RIpwzW+oOfmHE5PMPufDG9hCfoEOMw==" + }, + "clone-response": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.3.tgz", + "integrity": "sha512-ROoL94jJH2dUVML2Y/5PEDNaSHgeOdSDicUyS7izcF63G6sTc/FTjLub4b8Il9S8S0beOfYt0TaA5qvFK+w0wA==", + "dev": true, + "requires": { + "mimic-response": "^1.0.0" + } + }, + "combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "dev": true, + "requires": { + "delayed-stream": "~1.0.0" + } + }, + "content-disposition": { + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", + "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", + "dev": true, + "requires": { + "safe-buffer": "5.2.1" + } + }, + "content-hash": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/content-hash/-/content-hash-2.5.2.tgz", + "integrity": "sha512-FvIQKy0S1JaWV10sMsA7TRx8bpU+pqPkhbsfvOJAdjRXvYxEckAwQWGwtRjiaJfh+E0DvcWUGqcdjwMGFjsSdw==", + "dev": true, + "requires": { + "cids": "^0.7.1", + "multicodec": "^0.5.5", + "multihashes": "^0.4.15" + } + }, + "content-type": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", + "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", + "dev": true + }, + "cookie": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", + "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==", + "dev": true + }, + "cookie-signature": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==", + "dev": true + }, + "core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==", + "dev": true + }, + "cors": { + "version": "2.8.5", + "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", + "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", + "dev": true, + "requires": { + "object-assign": "^4", + "vary": "^1" + } + }, + "crc-32": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/crc-32/-/crc-32-1.2.2.tgz", + "integrity": "sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ==", + "dev": true + }, + "create-hash": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", + "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", + "dev": true, + "requires": { + "cipher-base": "^1.0.1", + "inherits": "^2.0.1", + "md5.js": "^1.3.4", + "ripemd160": "^2.0.1", + "sha.js": "^2.4.0" + } + }, + "create-hmac": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", + "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", + "dev": true, + "requires": { + "cipher-base": "^1.0.3", + "create-hash": "^1.1.0", + "inherits": "^2.0.1", + "ripemd160": "^2.0.0", + "safe-buffer": "^5.0.1", + "sha.js": "^2.4.8" + } + }, + "create-require": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", + "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==" + }, + "cross-fetch": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-4.0.0.tgz", + "integrity": "sha512-e4a5N8lVvuLgAWgnCrLr2PP0YyDOTHa9H/Rj54dirp61qXnNq46m82bRhNqIA5VccJtWBvPTFRV3TtvHUKPB1g==", + "dev": true, + "requires": { + "node-fetch": "^2.6.12" + } + }, + "d": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/d/-/d-1.0.1.tgz", + "integrity": "sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==", + "dev": true, + "requires": { + "es5-ext": "^0.10.50", + "type": "^1.0.1" + } + }, + "dashdash": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", + "integrity": "sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g==", + "dev": true, + "requires": { + "assert-plus": "^1.0.0" + } + }, + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "decode-uri-component": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.2.tgz", + "integrity": "sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ==", + "dev": true + }, + "decompress-response": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", + "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", + "dev": true, + "requires": { + "mimic-response": "^3.1.0" + }, + "dependencies": { + "mimic-response": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", + "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==", + "dev": true + } + } + }, + "defer-to-connect": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-2.0.1.tgz", + "integrity": "sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==", + "dev": true + }, + "define-data-property": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.1.tgz", + "integrity": "sha512-E7uGkTzkk1d0ByLeSc6ZsFS79Axg+m1P/VsgYsxHgiuc3tFSj+MjMIwe90FC4lOAZzNBdY7kkO2P2wKdsQ1vgQ==", + "dev": true, + "requires": { + "get-intrinsic": "^1.2.1", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.0" + } + }, + "delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "dev": true + }, + "depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "dev": true + }, + "destroy": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", + "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", + "dev": true + }, + "diff": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", + "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==" + }, + "dom-walk": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/dom-walk/-/dom-walk-0.1.2.tgz", + "integrity": "sha512-6QvTW9mrGeIegrFXdtQi9pk7O/nSK6lSdXW2eqUspN5LWD7UTji2Fqw5V2YLjBpHEoU9Xl/eUWNpDeZvoyOv2w==", + "dev": true + }, + "dotenv": { + "version": "16.0.3", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.0.3.tgz", + "integrity": "sha512-7GO6HghkA5fYG9TYnNxi14/7K9f5occMlp3zXAuSxn7CKCxt9xbNWG7yF8hTCSUchlfWSe3uLmlPfigevRItzQ==" + }, + "ecc-jsbn": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", + "integrity": "sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw==", + "dev": true, + "requires": { + "jsbn": "~0.1.0", + "safer-buffer": "^2.1.0" + } + }, + "ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", + "dev": true + }, + "elliptic": { + "version": "6.5.4", + "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz", + "integrity": "sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==", + "dev": true, + "requires": { + "bn.js": "^4.11.9", + "brorand": "^1.1.0", + "hash.js": "^1.0.0", + "hmac-drbg": "^1.0.1", + "inherits": "^2.0.4", + "minimalistic-assert": "^1.0.1", + "minimalistic-crypto-utils": "^1.0.1" + } + }, + "encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", + "dev": true + }, + "end-of-stream": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", + "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "dev": true, + "requires": { + "once": "^1.4.0" + } + }, + "es5-ext": { + "version": "0.10.62", + "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.62.tgz", + "integrity": "sha512-BHLqn0klhEpnOKSrzn/Xsz2UIW8j+cGmo9JLzr8BiUapV8hPL9+FliFqjwr9ngW7jWdnxv6eO+/LqyhJVqgrjA==", + "dev": true, + "requires": { + "es6-iterator": "^2.0.3", + "es6-symbol": "^3.1.3", + "next-tick": "^1.1.0" + } + }, + "es6-iterator": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", + "integrity": "sha512-zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g==", + "dev": true, + "requires": { + "d": "1", + "es5-ext": "^0.10.35", + "es6-symbol": "^3.1.1" + } + }, + "es6-promise": { + "version": "4.2.8", + "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.8.tgz", + "integrity": "sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==", + "dev": true + }, + "es6-symbol": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.3.tgz", + "integrity": "sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA==", + "dev": true, + "requires": { + "d": "^1.0.1", + "ext": "^1.1.2" + } + }, + "escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", + "dev": true + }, + "etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", + "dev": true + }, + "eth-ens-namehash": { + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/eth-ens-namehash/-/eth-ens-namehash-2.0.8.tgz", + "integrity": "sha512-VWEI1+KJfz4Km//dadyvBBoBeSQ0MHTXPvr8UIXiLW6IanxvAV+DmlZAijZwAyggqGUfwQBeHf7tc9wzc1piSw==", + "dev": true, + "requires": { + "idna-uts46-hx": "^2.3.1", + "js-sha3": "^0.5.7" + }, + "dependencies": { + "js-sha3": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.5.7.tgz", + "integrity": "sha512-GII20kjaPX0zJ8wzkTbNDYMY7msuZcTWk8S5UOh6806Jq/wz1J8/bnr8uGU0DAUmYDjj2Mr4X1cW8v/GLYnR+g==", + "dev": true + } + } + }, + "eth-lib": { + "version": "0.1.29", + "resolved": "https://registry.npmjs.org/eth-lib/-/eth-lib-0.1.29.tgz", + "integrity": "sha512-bfttrr3/7gG4E02HoWTDUcDDslN003OlOoBxk9virpAZQ1ja/jDgwkWB8QfJF7ojuEowrqy+lzp9VcJG7/k5bQ==", + "dev": true, + "requires": { + "bn.js": "^4.11.6", + "elliptic": "^6.4.0", + "nano-json-stream-parser": "^0.1.2", + "servify": "^0.1.12", + "ws": "^3.0.0", + "xhr-request-promise": "^0.1.2" + } + }, + "ethereum-bloom-filters": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/ethereum-bloom-filters/-/ethereum-bloom-filters-1.0.10.tgz", + "integrity": "sha512-rxJ5OFN3RwjQxDcFP2Z5+Q9ho4eIdEmSc2ht0fCu8Se9nbXjZ7/031uXoUYJ87KHCOdVeiUuwSnoS7hmYAGVHA==", + "dev": true, + "requires": { + "js-sha3": "^0.8.0" + } + }, + "ethereum-cryptography": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-2.1.2.tgz", + "integrity": "sha512-Z5Ba0T0ImZ8fqXrJbpHcbpAvIswRte2wGNR/KePnu8GbbvgJ47lMxT/ZZPG6i9Jaht4azPDop4HaM00J0J59ug==", + "dev": true, + "requires": { + "@noble/curves": "1.1.0", + "@noble/hashes": "1.3.1", + "@scure/bip32": "1.3.1", + "@scure/bip39": "1.2.1" + } + }, + "ethereumjs-util": { + "version": "7.1.5", + "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-7.1.5.tgz", + "integrity": "sha512-SDl5kKrQAudFBUe5OJM9Ac6WmMyYmXX/6sTmLZ3ffG2eY6ZIGBes3pEDxNN6V72WyOw4CPD5RomKdsa8DAAwLg==", + "dev": true, + "requires": { + "@types/bn.js": "^5.1.0", + "bn.js": "^5.1.2", + "create-hash": "^1.1.2", + "ethereum-cryptography": "^0.1.3", + "rlp": "^2.2.4" + }, + "dependencies": { + "bn.js": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz", + "integrity": "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==", + "dev": true + }, + "ethereum-cryptography": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz", + "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==", + "dev": true, + "requires": { + "@types/pbkdf2": "^3.0.0", + "@types/secp256k1": "^4.0.1", + "blakejs": "^1.1.0", + "browserify-aes": "^1.2.0", + "bs58check": "^2.1.2", + "create-hash": "^1.2.0", + "create-hmac": "^1.1.7", + "hash.js": "^1.1.7", + "keccak": "^3.0.0", + "pbkdf2": "^3.0.17", + "randombytes": "^2.1.0", + "safe-buffer": "^5.1.2", + "scrypt-js": "^3.0.0", + "secp256k1": "^4.0.1", + "setimmediate": "^1.0.5" + } + } + } + }, + "ethjs-unit": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/ethjs-unit/-/ethjs-unit-0.1.6.tgz", + "integrity": "sha512-/Sn9Y0oKl0uqQuvgFk/zQgR7aw1g36qX/jzSQ5lSwlO0GigPymk4eGQfeNTD03w1dPOqfz8V77Cy43jH56pagw==", + "dev": true, + "requires": { + "bn.js": "4.11.6", + "number-to-bn": "1.7.0" + }, + "dependencies": { + "bn.js": { + "version": "4.11.6", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.6.tgz", + "integrity": "sha512-XWwnNNFCuuSQ0m3r3C4LE3EiORltHd9M05pq6FOlVeiophzRbMo50Sbz1ehl8K3Z+jw9+vmgnXefY1hz8X+2wA==", + "dev": true + } + } + }, + "eventemitter3": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.4.tgz", + "integrity": "sha512-rlaVLnVxtxvoyLsQQFBx53YmXHDxRIzzTLbdfxqi4yocpSjAxXwkU0cScM5JgSKMqEhrZpnvQ2D9gjylR0AimQ==", + "dev": true + }, + "evp_bytestokey": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", + "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", + "dev": true, + "requires": { + "md5.js": "^1.3.4", + "safe-buffer": "^5.1.1" + } + }, + "express": { + "version": "4.18.2", + "resolved": "https://registry.npmjs.org/express/-/express-4.18.2.tgz", + "integrity": "sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==", + "dev": true, + "requires": { + "accepts": "~1.3.8", + "array-flatten": "1.1.1", + "body-parser": "1.20.1", + "content-disposition": "0.5.4", + "content-type": "~1.0.4", + "cookie": "0.5.0", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "2.0.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "1.2.0", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "merge-descriptors": "1.0.1", + "methods": "~1.1.2", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "path-to-regexp": "0.1.7", + "proxy-addr": "~2.0.7", + "qs": "6.11.0", + "range-parser": "~1.2.1", + "safe-buffer": "5.2.1", + "send": "0.18.0", + "serve-static": "1.15.0", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" + }, + "dependencies": { + "body-parser": { + "version": "1.20.1", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.1.tgz", + "integrity": "sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==", + "dev": true, + "requires": { + "bytes": "3.1.2", + "content-type": "~1.0.4", + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "on-finished": "2.4.1", + "qs": "6.11.0", + "raw-body": "2.5.1", + "type-is": "~1.6.18", + "unpipe": "1.0.0" + } + }, + "raw-body": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", + "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", + "dev": true, + "requires": { + "bytes": "3.1.2", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + } + } + } + }, + "ext": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/ext/-/ext-1.7.0.tgz", + "integrity": "sha512-6hxeJYaL110a9b5TEJSj0gojyHQAmA2ch5Os+ySCiA1QGdS697XWY1pzsrSjqA9LDEEgdB/KypIlR59RcLuHYw==", + "dev": true, + "requires": { + "type": "^2.7.2" + }, + "dependencies": { + "type": { + "version": "2.7.2", + "resolved": "https://registry.npmjs.org/type/-/type-2.7.2.tgz", + "integrity": "sha512-dzlvlNlt6AXU7EBSfpAscydQ7gXB+pPGsPnfJnZpiNJBDj7IaJzQlBZYGdEi4R9HmPdBv2XmWJ6YUtoTa7lmCw==", + "dev": true + } + } + }, + "extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", + "dev": true + }, + "extsprintf": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", + "integrity": "sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g==", + "dev": true + }, + "fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true + }, + "fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true + }, + "finalhandler": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", + "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", + "dev": true, + "requires": { + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "statuses": "2.0.1", + "unpipe": "~1.0.0" + } + }, + "for-each": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", + "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", + "dev": true, + "requires": { + "is-callable": "^1.1.3" + } + }, + "forever-agent": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", + "integrity": "sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw==", + "dev": true + }, + "form-data": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", + "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", + "dev": true, + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.6", + "mime-types": "^2.1.12" + } + }, + "form-data-encoder": { + "version": "1.7.1", + "resolved": "https://registry.npmjs.org/form-data-encoder/-/form-data-encoder-1.7.1.tgz", + "integrity": "sha512-EFRDrsMm/kyqbTQocNvRXMLjc7Es2Vk+IQFx/YW7hkUH1eBl4J1fqiP34l74Yt0pFLCNpc06fkbVk00008mzjg==", + "dev": true + }, + "forwarded": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", + "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", + "dev": true + }, + "fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", + "dev": true + }, + "fs-extra": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-4.0.3.tgz", + "integrity": "sha512-q6rbdDd1o2mAnQreO7YADIxf/Whx4AHBiRf6d+/cVT8h44ss+lHgxf1FemcqDnQt9X3ct4McHr+JMGlYSsK7Cg==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + } + }, + "fs-minipass": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-1.2.7.tgz", + "integrity": "sha512-GWSSJGFy4e9GUeCcbIkED+bgAoFyj7XF1mV8rma3QW4NIqX9Kyx79N/PF61H5udOV3aY1IaMLs6pGbH71nlCTA==", + "dev": true, + "requires": { + "minipass": "^2.6.0" + } + }, + "function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "dev": true + }, + "get-intrinsic": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.2.tgz", + "integrity": "sha512-0gSo4ml/0j98Y3lngkFEot/zhiCeWsbYIlZ+uZOVgzLyLaUw7wxUL+nCTP0XJvJg1AXulJRI3UJi8GsbDuxdGA==", + "dev": true, + "requires": { + "function-bind": "^1.1.2", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3", + "hasown": "^2.0.0" + } + }, + "get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "dev": true + }, + "getpass": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", + "integrity": "sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng==", + "dev": true, + "requires": { + "assert-plus": "^1.0.0" + } + }, + "global": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/global/-/global-4.4.0.tgz", + "integrity": "sha512-wv/LAoHdRE3BeTGz53FAamhGlPLhlssK45usmGFThIi4XqnBmjKQ16u+RNbP7WvigRZDxUsM0J3gcQ5yicaL0w==", + "dev": true, + "requires": { + "min-document": "^2.19.0", + "process": "^0.11.10" + } + }, + "gopd": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", + "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", + "dev": true, + "requires": { + "get-intrinsic": "^1.1.3" + } + }, + "got": { + "version": "12.1.0", + "resolved": "https://registry.npmjs.org/got/-/got-12.1.0.tgz", + "integrity": "sha512-hBv2ty9QN2RdbJJMK3hesmSkFTjVIHyIDDbssCKnSmq62edGgImJWD10Eb1k77TiV1bxloxqcFAVK8+9pkhOig==", + "dev": true, + "requires": { + "@sindresorhus/is": "^4.6.0", + "@szmarczak/http-timer": "^5.0.1", + "@types/cacheable-request": "^6.0.2", + "@types/responselike": "^1.0.0", + "cacheable-lookup": "^6.0.4", + "cacheable-request": "^7.0.2", + "decompress-response": "^6.0.0", + "form-data-encoder": "1.7.1", + "get-stream": "^6.0.1", + "http2-wrapper": "^2.1.10", + "lowercase-keys": "^3.0.0", + "p-cancelable": "^3.0.0", + "responselike": "^2.0.0" + } + }, + "graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "dev": true + }, + "har-schema": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", + "integrity": "sha512-Oqluz6zhGX8cyRaTQlFMPw80bSJVG2x/cFb8ZPhUILGgHka9SsokCCOQgpveePerqidZOrT14ipqfJb7ILcW5Q==", + "dev": true + }, + "har-validator": { + "version": "5.1.5", + "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz", + "integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==", + "dev": true, + "requires": { + "ajv": "^6.12.3", + "har-schema": "^2.0.0" + } + }, + "has-property-descriptors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.1.tgz", + "integrity": "sha512-VsX8eaIewvas0xnvinAe9bw4WfIeODpGYikiWYLH+dma0Jw6KHYqWiWfhQlgOVK8D6PvjubK5Uc4P0iIhIcNVg==", + "dev": true, + "requires": { + "get-intrinsic": "^1.2.2" + } + }, + "has-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", + "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==", + "dev": true + }, + "has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "dev": true + }, + "has-tostringtag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", + "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", + "dev": true, + "requires": { + "has-symbols": "^1.0.2" + } + }, + "hash-base": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.1.0.tgz", + "integrity": "sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==", + "dev": true, + "requires": { + "inherits": "^2.0.4", + "readable-stream": "^3.6.0", + "safe-buffer": "^5.2.0" + } + }, + "hash.js": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", + "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "minimalistic-assert": "^1.0.1" + } + }, + "hasown": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.0.tgz", + "integrity": "sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==", + "dev": true, + "requires": { + "function-bind": "^1.1.2" + } + }, + "hmac-drbg": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", + "integrity": "sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg==", + "dev": true, + "requires": { + "hash.js": "^1.0.3", + "minimalistic-assert": "^1.0.0", + "minimalistic-crypto-utils": "^1.0.1" + } + }, + "http-cache-semantics": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz", + "integrity": "sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==", + "dev": true + }, + "http-errors": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", + "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", + "dev": true, + "requires": { + "depd": "2.0.0", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "toidentifier": "1.0.1" + } + }, + "http-https": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/http-https/-/http-https-1.0.0.tgz", + "integrity": "sha512-o0PWwVCSp3O0wS6FvNr6xfBCHgt0m1tvPLFOCc2iFDKTRAXhB7m8klDf7ErowFH8POa6dVdGatKU5I1YYwzUyg==", + "dev": true + }, + "http-signature": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", + "integrity": "sha512-CAbnr6Rz4CYQkLYUtSNXxQPUH2gK8f3iWexVlsnMeD+GjlsQ0Xsy1cOX+mN3dtxYomRy21CiOzU8Uhw6OwncEQ==", + "dev": true, + "requires": { + "assert-plus": "^1.0.0", + "jsprim": "^1.2.2", + "sshpk": "^1.7.0" + } + }, + "http2-wrapper": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/http2-wrapper/-/http2-wrapper-2.2.1.tgz", + "integrity": "sha512-V5nVw1PAOgfI3Lmeaj2Exmeg7fenjhRUgz1lPSezy1CuhPYbgQtbQj4jZfEAEMlaL+vupsvhjqCyjzob0yxsmQ==", + "dev": true, + "requires": { + "quick-lru": "^5.1.1", + "resolve-alpn": "^1.2.0" + } + }, + "iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dev": true, + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + }, + "idna-uts46-hx": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/idna-uts46-hx/-/idna-uts46-hx-2.3.1.tgz", + "integrity": "sha512-PWoF9Keq6laYdIRwwCdhTPl60xRqAloYNMQLiyUnG42VjT53oW07BXIRM+NK7eQjzXjAk2gUvX9caRxlnF9TAA==", + "dev": true, + "requires": { + "punycode": "2.1.0" + }, + "dependencies": { + "punycode": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.0.tgz", + "integrity": "sha512-Yxz2kRwT90aPiWEMHVYnEf4+rhwF1tBmmZ4KepCP+Wkium9JxtWnUm1nqGwpiAHr/tnTSeHqr3wb++jgSkXjhA==", + "dev": true + } + } + }, + "ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "dev": true + }, + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "ipaddr.js": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", + "dev": true + }, + "is-arguments": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", + "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + } + }, + "is-callable": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", + "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", + "dev": true + }, + "is-function": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-function/-/is-function-1.0.2.tgz", + "integrity": "sha512-lw7DUp0aWXYg+CBCN+JKkcE0Q2RayZnSvnZBlwgxHBQhqt5pZNVy4Ri7H9GmmXkdu7LUthszM+Tor1u/2iBcpQ==", + "dev": true + }, + "is-generator-function": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.10.tgz", + "integrity": "sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==", + "dev": true, + "requires": { + "has-tostringtag": "^1.0.0" + } + }, + "is-hex-prefixed": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-hex-prefixed/-/is-hex-prefixed-1.0.0.tgz", + "integrity": "sha512-WvtOiug1VFrE9v1Cydwm+FnXd3+w9GaeVUss5W4v/SLy3UW00vP+6iNF2SdnfiBoLy4bTqVdkftNGTUeOFVsbA==", + "dev": true + }, + "is-typed-array": { + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.12.tgz", + "integrity": "sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg==", + "dev": true, + "requires": { + "which-typed-array": "^1.1.11" + } + }, + "is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==", + "dev": true + }, + "isstream": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", + "integrity": "sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g==", + "dev": true + }, + "js-sha3": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.8.0.tgz", + "integrity": "sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q==", + "dev": true + }, + "jsbn": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", + "integrity": "sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==", + "dev": true + }, + "json-buffer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", + "dev": true + }, + "json-schema": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz", + "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==", + "dev": true + }, + "json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + }, + "json-stringify-safe": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", + "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==", + "dev": true + }, + "jsonfile": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.6" + } + }, + "jsprim": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.2.tgz", + "integrity": "sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw==", + "dev": true, + "requires": { + "assert-plus": "1.0.0", + "extsprintf": "1.3.0", + "json-schema": "0.4.0", + "verror": "1.10.0" + } + }, + "keccak": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/keccak/-/keccak-3.0.4.tgz", + "integrity": "sha512-3vKuW0jV8J3XNTzvfyicFR5qvxrSAGl7KIhvgOu5cmWwM7tZRj3fMbj/pfIf4be7aznbc+prBWGjywox/g2Y6Q==", + "dev": true, + "requires": { + "node-addon-api": "^2.0.0", + "node-gyp-build": "^4.2.0", + "readable-stream": "^3.6.0" + } + }, + "keyv": { + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", + "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", + "dev": true, + "requires": { + "json-buffer": "3.0.1" + } + }, + "lowercase-keys": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-3.0.0.tgz", + "integrity": "sha512-ozCC6gdQ+glXOQsveKD0YsDy8DSQFjDTz4zyzEHNV5+JP5D62LmfDZ6o1cycFx9ouG940M5dE8C8CTewdj2YWQ==", + "dev": true + }, + "make-error": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", + "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==" + }, + "md5.js": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", + "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", + "dev": true, + "requires": { + "hash-base": "^3.0.0", + "inherits": "^2.0.1", + "safe-buffer": "^5.1.2" + } + }, + "media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", + "dev": true + }, + "merge-descriptors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", + "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==", + "dev": true + }, + "methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", + "dev": true + }, + "micro-ftch": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/micro-ftch/-/micro-ftch-0.3.1.tgz", + "integrity": "sha512-/0LLxhzP0tfiR5hcQebtudP56gUurs2CLkGarnCiB/OqEyUFQ6U3paQi/tgLv0hBJYt2rnr9MNpxz4fiiugstg==", + "dev": true + }, + "mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "dev": true + }, + "mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "dev": true + }, + "mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "dev": true, + "requires": { + "mime-db": "1.52.0" + } + }, + "mimic-response": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", + "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==", + "dev": true + }, + "min-document": { + "version": "2.19.0", + "resolved": "https://registry.npmjs.org/min-document/-/min-document-2.19.0.tgz", + "integrity": "sha512-9Wy1B3m3f66bPPmU5hdA4DR4PB2OfDU/+GS3yAB7IQozE3tqXaVv2zOjgla7MEGSRv95+ILmOuvhLkOK6wJtCQ==", + "dev": true, + "requires": { + "dom-walk": "^0.1.0" + } + }, + "minimalistic-assert": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", + "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==", + "dev": true + }, + "minimalistic-crypto-utils": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", + "integrity": "sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg==", + "dev": true + }, + "minimist": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "dev": true + }, + "minipass": { + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-2.9.0.tgz", + "integrity": "sha512-wxfUjg9WebH+CUDX/CdbRlh5SmfZiy/hpkxaRI16Y9W56Pa75sWgd/rvFilSgrauD9NyFymP/+JFV3KwzIsJeg==", + "dev": true, + "requires": { + "safe-buffer": "^5.1.2", + "yallist": "^3.0.0" + } + }, + "minizlib": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-1.3.3.tgz", + "integrity": "sha512-6ZYMOEnmVsdCeTJVE0W9ZD+pVnE8h9Hma/iOwwRDsdQoePpoX56/8B6z3P9VNwppJuBKNRuFDRNRqRWexT9G9Q==", + "dev": true, + "requires": { + "minipass": "^2.9.0" + } + }, + "mkdirp": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-3.0.1.tgz", + "integrity": "sha512-+NsyUUAZDmo6YVHzL/stxSu3t9YS1iljliy3BSDrXJ/dkn1KYdmtZODGGjLcc9XLgVVpH4KshHB8XmZgMhaBXg==", + "dev": true + }, + "mkdirp-promise": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/mkdirp-promise/-/mkdirp-promise-5.0.1.tgz", + "integrity": "sha512-Hepn5kb1lJPtVW84RFT40YG1OddBNTOVUZR2bzQUHc+Z03en8/3uX0+060JDhcEzyO08HmipsN9DcnFMxhIL9w==", + "dev": true, + "requires": { + "mkdirp": "*" + } + }, + "mock-fs": { + "version": "4.14.0", + "resolved": "https://registry.npmjs.org/mock-fs/-/mock-fs-4.14.0.tgz", + "integrity": "sha512-qYvlv/exQ4+svI3UOvPUpLDF0OMX5euvUH0Ny4N5QyRyhNdgAgUrVH3iUINSzEPLvx0kbo/Bp28GJKIqvE7URw==", + "dev": true + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + }, + "multibase": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/multibase/-/multibase-0.6.1.tgz", + "integrity": "sha512-pFfAwyTjbbQgNc3G7D48JkJxWtoJoBMaR4xQUOuB8RnCgRqaYmWNFeJTTvrJ2w51bjLq2zTby6Rqj9TQ9elSUw==", + "dev": true, + "requires": { + "base-x": "^3.0.8", + "buffer": "^5.5.0" + } + }, + "multicodec": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/multicodec/-/multicodec-0.5.7.tgz", + "integrity": "sha512-PscoRxm3f+88fAtELwUnZxGDkduE2HD9Q6GHUOywQLjOGT/HAdhjLDYNZ1e7VR0s0TP0EwZ16LNUTFpoBGivOA==", + "dev": true, + "requires": { + "varint": "^5.0.0" + } + }, + "multihashes": { + "version": "0.4.21", + "resolved": "https://registry.npmjs.org/multihashes/-/multihashes-0.4.21.tgz", + "integrity": "sha512-uVSvmeCWf36pU2nB4/1kzYZjsXD9vofZKpgudqkceYY5g2aZZXJ5r9lxuzoRLl1OAp28XljXsEJ/X/85ZsKmKw==", + "dev": true, + "requires": { + "buffer": "^5.5.0", + "multibase": "^0.7.0", + "varint": "^5.0.0" + }, + "dependencies": { + "multibase": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/multibase/-/multibase-0.7.0.tgz", + "integrity": "sha512-TW8q03O0f6PNFTQDvh3xxH03c8CjGaaYrjkl9UQPG6rz53TQzzxJVCIWVjzcbN/Q5Y53Zd0IBQBMVktVgNx4Fg==", + "dev": true, + "requires": { + "base-x": "^3.0.8", + "buffer": "^5.5.0" + } + } + } + }, + "nano-json-stream-parser": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/nano-json-stream-parser/-/nano-json-stream-parser-0.1.2.tgz", + "integrity": "sha512-9MqxMH/BSJC7dnLsEMPyfN5Dvoo49IsPFYMcHw3Bcfc2kN0lpHRBSzlMSVx4HGyJ7s9B31CyBTVehWJoQ8Ctew==", + "dev": true + }, + "negotiator": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", + "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", + "dev": true + }, + "next-tick": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.1.0.tgz", + "integrity": "sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==", + "dev": true + }, + "node-addon-api": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-2.0.2.tgz", + "integrity": "sha512-Ntyt4AIXyaLIuMHF6IOoTakB3K+RWxwtsHNRxllEoA6vPwP9o4866g6YWDLUdnucilZhmkxiHwHr11gAENw+QA==", + "dev": true + }, + "node-fetch": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", + "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", + "dev": true, + "requires": { + "whatwg-url": "^5.0.0" + } + }, + "node-gyp-build": { + "version": "4.6.1", + "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.6.1.tgz", + "integrity": "sha512-24vnklJmyRS8ViBNI8KbtK/r/DmXQMRiOMXTNz2nrTnAYUwjmEEbnnpB/+kt+yWRv73bPsSPRFddrcIbAxSiMQ==", + "dev": true + }, + "normalize-url": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz", + "integrity": "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==", + "dev": true + }, + "number-to-bn": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/number-to-bn/-/number-to-bn-1.7.0.tgz", + "integrity": "sha512-wsJ9gfSz1/s4ZsJN01lyonwuxA1tml6X1yBDnfpMglypcBRFZZkus26EdPSlqS5GJfYddVZa22p3VNb3z5m5Ig==", + "dev": true, + "requires": { + "bn.js": "4.11.6", + "strip-hex-prefix": "1.0.0" + }, + "dependencies": { + "bn.js": { + "version": "4.11.6", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.6.tgz", + "integrity": "sha512-XWwnNNFCuuSQ0m3r3C4LE3EiORltHd9M05pq6FOlVeiophzRbMo50Sbz1ehl8K3Z+jw9+vmgnXefY1hz8X+2wA==", + "dev": true + } + } + }, + "oauth-sign": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", + "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==", + "dev": true + }, + "object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "dev": true + }, + "object-inspect": { + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.1.tgz", + "integrity": "sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==", + "dev": true + }, + "oboe": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/oboe/-/oboe-2.1.5.tgz", + "integrity": "sha512-zRFWiF+FoicxEs3jNI/WYUrVEgA7DeET/InK0XQuudGHRg8iIob3cNPrJTKaz4004uaA9Pbe+Dwa8iluhjLZWA==", + "dev": true, + "requires": { + "http-https": "^1.0.0" + } + }, + "on-finished": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", + "dev": true, + "requires": { + "ee-first": "1.1.1" + } + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "dev": true, + "requires": { + "wrappy": "1" + } + }, + "p-cancelable": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-3.0.0.tgz", + "integrity": "sha512-mlVgR3PGuzlo0MmTdk4cXqXWlwQDLnONTAg6sm62XkMJEiRxN3GL3SffkYvqwonbkJBcrI7Uvv5Zh9yjvn2iUw==", + "dev": true + }, + "parse-headers": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/parse-headers/-/parse-headers-2.0.5.tgz", + "integrity": "sha512-ft3iAoLOB/MlwbNXgzy43SWGP6sQki2jQvAyBg/zDFAgr9bfNWZIUj42Kw2eJIl8kEi4PbgE6U1Zau/HwI75HA==", + "dev": true + }, + "parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "dev": true + }, + "path-to-regexp": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", + "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==", + "dev": true + }, + "pbkdf2": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.2.tgz", + "integrity": "sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA==", + "dev": true, + "requires": { + "create-hash": "^1.1.2", + "create-hmac": "^1.1.4", + "ripemd160": "^2.0.1", + "safe-buffer": "^5.0.1", + "sha.js": "^2.4.8" + } + }, + "performance-now": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", + "integrity": "sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==", + "dev": true + }, + "process": { + "version": "0.11.10", + "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", + "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==", + "dev": true + }, + "proxy-addr": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", + "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", + "dev": true, + "requires": { + "forwarded": "0.2.0", + "ipaddr.js": "1.9.1" + } + }, + "psl": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz", + "integrity": "sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==", + "dev": true + }, + "pump": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", + "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "dev": true, + "requires": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "punycode": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "dev": true + }, + "qs": { + "version": "6.11.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", + "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", + "dev": true, + "requires": { + "side-channel": "^1.0.4" + } + }, + "query-string": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/query-string/-/query-string-5.1.1.tgz", + "integrity": "sha512-gjWOsm2SoGlgLEdAGt7a6slVOk9mGiXmPFMqrEhLQ68rhQuBnpfs3+EmlvqKyxnCo9/PPlF+9MtY02S1aFg+Jw==", + "dev": true, + "requires": { + "decode-uri-component": "^0.2.0", + "object-assign": "^4.1.0", + "strict-uri-encode": "^1.0.0" + } + }, + "quick-lru": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz", + "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==", + "dev": true + }, + "randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "dev": true, + "requires": { + "safe-buffer": "^5.1.0" + } + }, + "range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", + "dev": true + }, + "raw-body": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz", + "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==", + "dev": true, + "requires": { + "bytes": "3.1.2", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + } + }, + "readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + }, + "request": { + "version": "2.88.2", + "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", + "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==", + "dev": true, + "requires": { + "aws-sign2": "~0.7.0", + "aws4": "^1.8.0", + "caseless": "~0.12.0", + "combined-stream": "~1.0.6", + "extend": "~3.0.2", + "forever-agent": "~0.6.1", + "form-data": "~2.3.2", + "har-validator": "~5.1.3", + "http-signature": "~1.2.0", + "is-typedarray": "~1.0.0", + "isstream": "~0.1.2", + "json-stringify-safe": "~5.0.1", + "mime-types": "~2.1.19", + "oauth-sign": "~0.9.0", + "performance-now": "^2.1.0", + "qs": "~6.5.2", + "safe-buffer": "^5.1.2", + "tough-cookie": "~2.5.0", + "tunnel-agent": "^0.6.0", + "uuid": "^3.3.2" + }, + "dependencies": { + "qs": { + "version": "6.5.3", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.3.tgz", + "integrity": "sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA==", + "dev": true + } + } + }, + "resolve-alpn": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/resolve-alpn/-/resolve-alpn-1.2.1.tgz", + "integrity": "sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==", + "dev": true + }, + "responselike": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/responselike/-/responselike-2.0.1.tgz", + "integrity": "sha512-4gl03wn3hj1HP3yzgdI7d3lCkF95F21Pz4BPGvKHinyQzALR5CapwC8yIi0Rh58DEMQ/SguC03wFj2k0M/mHhw==", + "dev": true, + "requires": { + "lowercase-keys": "^2.0.0" + }, + "dependencies": { + "lowercase-keys": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", + "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==", + "dev": true + } + } + }, + "ripemd160": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz", + "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", + "dev": true, + "requires": { + "hash-base": "^3.0.0", + "inherits": "^2.0.1" + } + }, + "rlp": { + "version": "2.2.7", + "resolved": "https://registry.npmjs.org/rlp/-/rlp-2.2.7.tgz", + "integrity": "sha512-d5gdPmgQ0Z+AklL2NVXr/IoSjNZFfTVvQWzL/AM2AOcSzYP2xjlb0AC8YyCLc41MSNf6P6QVtjgPdmVtzb+4lQ==", + "dev": true, + "requires": { + "bn.js": "^5.2.0" + }, + "dependencies": { + "bn.js": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz", + "integrity": "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==", + "dev": true + } + } + }, + "safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true + }, + "safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "dev": true + }, + "scrypt-js": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/scrypt-js/-/scrypt-js-3.0.1.tgz", + "integrity": "sha512-cdwTTnqPu0Hyvf5in5asVdZocVDTNRmR7XEcJuIzMjJeSHybHl7vpB66AzwTaIg6CLSbtjcxc8fqcySfnTkccA==", + "dev": true + }, + "secp256k1": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/secp256k1/-/secp256k1-4.0.3.tgz", + "integrity": "sha512-NLZVf+ROMxwtEj3Xa562qgv2BK5e2WNmXPiOdVIPLgs6lyTzMvBq0aWTYMI5XCP9jZMVKOcqZLw/Wc4vDkuxhA==", + "dev": true, + "requires": { + "elliptic": "^6.5.4", + "node-addon-api": "^2.0.0", + "node-gyp-build": "^4.2.0" + } + }, + "send": { + "version": "0.18.0", + "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", + "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", + "dev": true, + "requires": { + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "mime": "1.6.0", + "ms": "2.1.3", + "on-finished": "2.4.1", + "range-parser": "~1.2.1", + "statuses": "2.0.1" + }, + "dependencies": { + "ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true + } + } + }, + "serve-static": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", + "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", + "dev": true, + "requires": { + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.18.0" + } + }, + "servify": { + "version": "0.1.12", + "resolved": "https://registry.npmjs.org/servify/-/servify-0.1.12.tgz", + "integrity": "sha512-/xE6GvsKKqyo1BAY+KxOWXcLpPsUUyji7Qg3bVD7hh1eRze5bR1uYiuDA/k3Gof1s9BTzQZEJK8sNcNGFIzeWw==", + "dev": true, + "requires": { + "body-parser": "^1.16.0", + "cors": "^2.8.1", + "express": "^4.14.0", + "request": "^2.79.0", + "xhr": "^2.3.3" + } + }, + "set-function-length": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.1.1.tgz", + "integrity": "sha512-VoaqjbBJKiWtg4yRcKBQ7g7wnGnLV3M8oLvVWwOk2PdYY6PEFegR1vezXR0tw6fZGF9csVakIRjrJiy2veSBFQ==", + "dev": true, + "requires": { + "define-data-property": "^1.1.1", + "get-intrinsic": "^1.2.1", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.0" + } + }, + "setimmediate": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", + "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==", + "dev": true + }, + "setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", + "dev": true + }, + "sha.js": { + "version": "2.4.11", + "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", + "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", + "dev": true, + "requires": { + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "side-channel": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", + "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "dev": true, + "requires": { + "call-bind": "^1.0.0", + "get-intrinsic": "^1.0.2", + "object-inspect": "^1.9.0" + } + }, + "simple-concat": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz", + "integrity": "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==", + "dev": true + }, + "simple-get": { + "version": "2.8.2", + "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-2.8.2.tgz", + "integrity": "sha512-Ijd/rV5o+mSBBs4F/x9oDPtTx9Zb6X9brmnXvMW4J7IR15ngi9q5xxqWBKU744jTZiaXtxaPL7uHG6vtN8kUkw==", + "dev": true, + "requires": { + "decompress-response": "^3.3.0", + "once": "^1.3.1", + "simple-concat": "^1.0.0" + }, + "dependencies": { + "decompress-response": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz", + "integrity": "sha512-BzRPQuY1ip+qDonAOz42gRm/pg9F768C+npV/4JOsxRC2sq+Rlk+Q4ZCAsOhnIaMrgarILY+RMUIvMmmX1qAEA==", + "dev": true, + "requires": { + "mimic-response": "^1.0.0" + } + } + } + }, + "sshpk": { + "version": "1.18.0", + "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.18.0.tgz", + "integrity": "sha512-2p2KJZTSqQ/I3+HX42EpYOa2l3f8Erv8MWKsy2I9uf4wA7yFIkXRffYdsx86y6z4vHtV8u7g+pPlr8/4ouAxsQ==", + "dev": true, + "requires": { + "asn1": "~0.2.3", + "assert-plus": "^1.0.0", + "bcrypt-pbkdf": "^1.0.0", + "dashdash": "^1.12.0", + "ecc-jsbn": "~0.1.1", + "getpass": "^0.1.1", + "jsbn": "~0.1.0", + "safer-buffer": "^2.0.2", + "tweetnacl": "~0.14.0" + } + }, + "statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "dev": true + }, + "strict-uri-encode": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz", + "integrity": "sha512-R3f198pcvnB+5IpnBlRkphuE9n46WyVl8I39W/ZUTZLz4nqSP/oLYUrcnJrw462Ds8he4YKMov2efsTIw1BDGQ==", + "dev": true + }, + "string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "dev": true, + "requires": { + "safe-buffer": "~5.2.0" + } + }, + "strip-hex-prefix": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/strip-hex-prefix/-/strip-hex-prefix-1.0.0.tgz", + "integrity": "sha512-q8d4ue7JGEiVcypji1bALTos+0pWtyGlivAWyPuTkHzuTCJqrK9sWxYQZUq6Nq3cuyv3bm734IhHvHtGGURU6A==", + "dev": true, + "requires": { + "is-hex-prefixed": "1.0.0" + } + }, + "swarm-js": { + "version": "0.1.42", + "resolved": "https://registry.npmjs.org/swarm-js/-/swarm-js-0.1.42.tgz", + "integrity": "sha512-BV7c/dVlA3R6ya1lMlSSNPLYrntt0LUq4YMgy3iwpCIc6rZnS5W2wUoctarZ5pXlpKtxDDf9hNziEkcfrxdhqQ==", + "dev": true, + "requires": { + "bluebird": "^3.5.0", + "buffer": "^5.0.5", + "eth-lib": "^0.1.26", + "fs-extra": "^4.0.2", + "got": "^11.8.5", + "mime-types": "^2.1.16", + "mkdirp-promise": "^5.0.1", + "mock-fs": "^4.1.0", + "setimmediate": "^1.0.5", + "tar": "^4.0.2", + "xhr-request": "^1.0.1" + }, + "dependencies": { + "@szmarczak/http-timer": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-4.0.6.tgz", + "integrity": "sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w==", + "dev": true, + "requires": { + "defer-to-connect": "^2.0.0" + } + }, + "cacheable-lookup": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-5.0.4.tgz", + "integrity": "sha512-2/kNscPhpcxrOigMZzbiWF7dz8ilhb/nIHU3EyZiXWXpeq/au8qJ8VhdftMkty3n7Gj6HIGalQG8oiBNB3AJgA==", + "dev": true + }, + "got": { + "version": "11.8.6", + "resolved": "https://registry.npmjs.org/got/-/got-11.8.6.tgz", + "integrity": "sha512-6tfZ91bOr7bOXnK7PRDCGBLa1H4U080YHNaAQ2KsMGlLEzRbk44nsZF2E1IeRc3vtJHPVbKCYgdFbaGO2ljd8g==", + "dev": true, + "requires": { + "@sindresorhus/is": "^4.0.0", + "@szmarczak/http-timer": "^4.0.5", + "@types/cacheable-request": "^6.0.1", + "@types/responselike": "^1.0.0", + "cacheable-lookup": "^5.0.3", + "cacheable-request": "^7.0.2", + "decompress-response": "^6.0.0", + "http2-wrapper": "^1.0.0-beta.5.2", + "lowercase-keys": "^2.0.0", + "p-cancelable": "^2.0.0", + "responselike": "^2.0.0" + } + }, + "http2-wrapper": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/http2-wrapper/-/http2-wrapper-1.0.3.tgz", + "integrity": "sha512-V+23sDMr12Wnz7iTcDeJr3O6AIxlnvT/bmaAAAP/Xda35C90p9599p0F1eHR/N1KILWSoWVAiOMFjBBXaXSMxg==", + "dev": true, + "requires": { + "quick-lru": "^5.1.1", + "resolve-alpn": "^1.0.0" + } + }, + "lowercase-keys": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", + "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==", + "dev": true + }, + "p-cancelable": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-2.1.1.tgz", + "integrity": "sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg==", + "dev": true + } + } + }, + "tar": { + "version": "4.4.19", + "resolved": "https://registry.npmjs.org/tar/-/tar-4.4.19.tgz", + "integrity": "sha512-a20gEsvHnWe0ygBY8JbxoM4w3SJdhc7ZAuxkLqh+nvNQN2IOt0B5lLgM490X5Hl8FF0dl0tOf2ewFYAlIFgzVA==", + "dev": true, + "requires": { + "chownr": "^1.1.4", + "fs-minipass": "^1.2.7", + "minipass": "^2.9.0", + "minizlib": "^1.3.3", + "mkdirp": "^0.5.5", + "safe-buffer": "^5.2.1", + "yallist": "^3.1.1" + }, + "dependencies": { + "mkdirp": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", + "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", + "dev": true, + "requires": { + "minimist": "^1.2.6" + } + } + } + }, + "timed-out": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/timed-out/-/timed-out-4.0.1.tgz", + "integrity": "sha512-G7r3AhovYtr5YKOWQkta8RKAPb+J9IsO4uVmzjl8AZwfhs8UcUwTiD6gcJYSgOtzyjvQKrKYn41syHbUWMkafA==", + "dev": true + }, + "toidentifier": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", + "dev": true + }, + "tough-cookie": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", + "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", + "dev": true, + "requires": { + "psl": "^1.1.28", + "punycode": "^2.1.1" + } + }, + "tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", + "dev": true + }, + "ts-node": { + "version": "10.9.1", + "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.1.tgz", + "integrity": "sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==", + "requires": { + "@cspotcode/source-map-support": "^0.8.0", + "@tsconfig/node10": "^1.0.7", + "@tsconfig/node12": "^1.0.7", + "@tsconfig/node14": "^1.0.0", + "@tsconfig/node16": "^1.0.2", + "acorn": "^8.4.1", + "acorn-walk": "^8.1.1", + "arg": "^4.1.0", + "create-require": "^1.1.0", + "diff": "^4.0.1", + "make-error": "^1.1.1", + "v8-compile-cache-lib": "^3.0.1", + "yn": "3.1.1" + } + }, + "tunnel-agent": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", + "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==", + "dev": true, + "requires": { + "safe-buffer": "^5.0.1" + } + }, + "tweetnacl": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", + "integrity": "sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==", + "dev": true + }, + "type": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/type/-/type-1.2.0.tgz", + "integrity": "sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==", + "dev": true + }, + "type-is": { + "version": "1.6.18", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "dev": true, + "requires": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + } + }, + "typedarray-to-buffer": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", + "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", + "dev": true, + "requires": { + "is-typedarray": "^1.0.0" + } + }, + "typescript": { + "version": "4.9.5", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz", + "integrity": "sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==" + }, + "ultron": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ultron/-/ultron-1.1.1.tgz", + "integrity": "sha512-UIEXBNeYmKptWH6z8ZnqTeS8fV74zG0/eRU9VGkpzz+LIJNs8W/zM/L+7ctCkRrgbNnnR0xxw4bKOr0cW0N0Og==", + "dev": true + }, + "universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "dev": true + }, + "unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", + "dev": true + }, + "uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "requires": { + "punycode": "^2.1.0" + } + }, + "url-set-query": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/url-set-query/-/url-set-query-1.0.0.tgz", + "integrity": "sha512-3AChu4NiXquPfeckE5R5cGdiHCMWJx1dwCWOmWIL4KHAziJNOFIYJlpGFeKDvwLPHovZRCxK3cYlwzqI9Vp+Gg==", + "dev": true + }, + "utf-8-validate": { + "version": "5.0.10", + "resolved": "https://registry.npmjs.org/utf-8-validate/-/utf-8-validate-5.0.10.tgz", + "integrity": "sha512-Z6czzLq4u8fPOyx7TU6X3dvUZVvoJmxSQ+IcrlmagKhilxlhZgxPK6C5Jqbkw1IDUmFTM+cz9QDnnLTwDz/2gQ==", + "dev": true, + "requires": { + "node-gyp-build": "^4.3.0" + } + }, + "utf8": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/utf8/-/utf8-3.0.0.tgz", + "integrity": "sha512-E8VjFIQ/TyQgp+TZfS6l8yp/xWppSAHzidGiRrqe4bK4XP9pTRyKFgGJpO3SN7zdX4DeomTrwaseCHovfpFcqQ==", + "dev": true + }, + "util": { + "version": "0.12.5", + "resolved": "https://registry.npmjs.org/util/-/util-0.12.5.tgz", + "integrity": "sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA==", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "is-arguments": "^1.0.4", + "is-generator-function": "^1.0.7", + "is-typed-array": "^1.1.3", + "which-typed-array": "^1.1.2" + } + }, + "util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "dev": true + }, + "utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", + "dev": true + }, + "uuid": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", + "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", + "dev": true + }, + "v8-compile-cache-lib": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", + "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==" + }, + "varint": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/varint/-/varint-5.0.2.tgz", + "integrity": "sha512-lKxKYG6H03yCZUpAGOPOsMcGxd1RHCu1iKvEHYDPmTyq2HueGhD73ssNBqqQWfvYs04G9iUFRvmAVLW20Jw6ow==", + "dev": true + }, + "vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", + "dev": true + }, + "verror": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", + "integrity": "sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw==", + "dev": true, + "requires": { + "assert-plus": "^1.0.0", + "core-util-is": "1.0.2", + "extsprintf": "^1.2.0" + } + }, + "web3": { + "version": "1.10.3", + "resolved": "https://registry.npmjs.org/web3/-/web3-1.10.3.tgz", + "integrity": "sha512-DgUdOOqC/gTqW+VQl1EdPxrVRPB66xVNtuZ5KD4adVBtko87hkgM8BTZ0lZ8IbUfnQk6DyjcDujMiH3oszllAw==", + "dev": true, + "requires": { + "web3-bzz": "1.10.3", + "web3-core": "1.10.3", + "web3-eth": "1.10.3", + "web3-eth-personal": "1.10.3", + "web3-net": "1.10.3", + "web3-shh": "1.10.3", + "web3-utils": "1.10.3" + } + }, + "web3-bzz": { + "version": "1.10.3", + "resolved": "https://registry.npmjs.org/web3-bzz/-/web3-bzz-1.10.3.tgz", + "integrity": "sha512-XDIRsTwekdBXtFytMpHBuun4cK4x0ZMIDXSoo1UVYp+oMyZj07c7gf7tNQY5qZ/sN+CJIas4ilhN25VJcjSijQ==", + "dev": true, + "requires": { + "@types/node": "^12.12.6", + "got": "12.1.0", + "swarm-js": "^0.1.40" + }, + "dependencies": { + "@types/node": { + "version": "12.20.55", + "resolved": "https://registry.npmjs.org/@types/node/-/node-12.20.55.tgz", + "integrity": "sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==", + "dev": true + } + } + }, + "web3-core": { + "version": "1.10.3", + "resolved": "https://registry.npmjs.org/web3-core/-/web3-core-1.10.3.tgz", + "integrity": "sha512-Vbk0/vUNZxJlz3RFjAhNNt7qTpX8yE3dn3uFxfX5OHbuon5u65YEOd3civ/aQNW745N0vGUlHFNxxmn+sG9DIw==", + "dev": true, + "requires": { + "@types/bn.js": "^5.1.1", + "@types/node": "^12.12.6", + "bignumber.js": "^9.0.0", + "web3-core-helpers": "1.10.3", + "web3-core-method": "1.10.3", + "web3-core-requestmanager": "1.10.3", + "web3-utils": "1.10.3" + }, + "dependencies": { + "@types/node": { + "version": "12.20.55", + "resolved": "https://registry.npmjs.org/@types/node/-/node-12.20.55.tgz", + "integrity": "sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==", + "dev": true + } + } + }, + "web3-core-helpers": { + "version": "1.10.3", + "resolved": "https://registry.npmjs.org/web3-core-helpers/-/web3-core-helpers-1.10.3.tgz", + "integrity": "sha512-Yv7dQC3B9ipOc5sWm3VAz1ys70Izfzb8n9rSiQYIPjpqtJM+3V4EeK6ghzNR6CO2es0+Yu9CtCkw0h8gQhrTxA==", + "dev": true, + "requires": { + "web3-eth-iban": "1.10.3", + "web3-utils": "1.10.3" + } + }, + "web3-core-method": { + "version": "1.10.3", + "resolved": "https://registry.npmjs.org/web3-core-method/-/web3-core-method-1.10.3.tgz", + "integrity": "sha512-VZ/Dmml4NBmb0ep5PTSg9oqKoBtG0/YoMPei/bq/tUdlhB2dMB79sbeJPwx592uaV0Vpk7VltrrrBv5hTM1y4Q==", + "dev": true, + "requires": { + "@ethersproject/transactions": "^5.6.2", + "web3-core-helpers": "1.10.3", + "web3-core-promievent": "1.10.3", + "web3-core-subscriptions": "1.10.3", + "web3-utils": "1.10.3" + } + }, + "web3-core-promievent": { + "version": "1.10.3", + "resolved": "https://registry.npmjs.org/web3-core-promievent/-/web3-core-promievent-1.10.3.tgz", + "integrity": "sha512-HgjY+TkuLm5uTwUtaAfkTgRx/NzMxvVradCi02gy17NxDVdg/p6svBHcp037vcNpkuGeFznFJgULP+s2hdVgUQ==", + "dev": true, + "requires": { + "eventemitter3": "4.0.4" + } + }, + "web3-core-requestmanager": { + "version": "1.10.3", + "resolved": "https://registry.npmjs.org/web3-core-requestmanager/-/web3-core-requestmanager-1.10.3.tgz", + "integrity": "sha512-VT9sKJfgM2yBOIxOXeXiDuFMP4pxzF6FT+y8KTLqhDFHkbG3XRe42Vm97mB/IvLQCJOmokEjl3ps8yP1kbggyw==", + "dev": true, + "requires": { + "util": "^0.12.5", + "web3-core-helpers": "1.10.3", + "web3-providers-http": "1.10.3", + "web3-providers-ipc": "1.10.3", + "web3-providers-ws": "1.10.3" + } + }, + "web3-core-subscriptions": { + "version": "1.10.3", + "resolved": "https://registry.npmjs.org/web3-core-subscriptions/-/web3-core-subscriptions-1.10.3.tgz", + "integrity": "sha512-KW0Mc8sgn70WadZu7RjQ4H5sNDJ5Lx8JMI3BWos+f2rW0foegOCyWhRu33W1s6ntXnqeBUw5rRCXZRlA3z+HNA==", + "dev": true, + "requires": { + "eventemitter3": "4.0.4", + "web3-core-helpers": "1.10.3" + } + }, + "web3-eth": { + "version": "1.10.3", + "resolved": "https://registry.npmjs.org/web3-eth/-/web3-eth-1.10.3.tgz", + "integrity": "sha512-Uk1U2qGiif2mIG8iKu23/EQJ2ksB1BQXy3wF3RvFuyxt8Ft9OEpmGlO7wOtAyJdoKzD5vcul19bJpPcWSAYZhA==", + "dev": true, + "requires": { + "web3-core": "1.10.3", + "web3-core-helpers": "1.10.3", + "web3-core-method": "1.10.3", + "web3-core-subscriptions": "1.10.3", + "web3-eth-abi": "1.10.3", + "web3-eth-accounts": "1.10.3", + "web3-eth-contract": "1.10.3", + "web3-eth-ens": "1.10.3", + "web3-eth-iban": "1.10.3", + "web3-eth-personal": "1.10.3", + "web3-net": "1.10.3", + "web3-utils": "1.10.3" + } + }, + "web3-eth-abi": { + "version": "1.10.3", + "resolved": "https://registry.npmjs.org/web3-eth-abi/-/web3-eth-abi-1.10.3.tgz", + "integrity": "sha512-O8EvV67uhq0OiCMekqYsDtb6FzfYzMXT7VMHowF8HV6qLZXCGTdB/NH4nJrEh2mFtEwVdS6AmLFJAQd2kVyoMQ==", + "dev": true, + "requires": { + "@ethersproject/abi": "^5.6.3", + "web3-utils": "1.10.3" + } + }, + "web3-eth-accounts": { + "version": "1.10.3", + "resolved": "https://registry.npmjs.org/web3-eth-accounts/-/web3-eth-accounts-1.10.3.tgz", + "integrity": "sha512-8MipGgwusDVgn7NwKOmpeo3gxzzd+SmwcWeBdpXknuyDiZSQy9tXe+E9LeFGrmys/8mLLYP79n3jSbiTyv+6pQ==", + "dev": true, + "requires": { + "@ethereumjs/common": "2.6.5", + "@ethereumjs/tx": "3.5.2", + "@ethereumjs/util": "^8.1.0", + "eth-lib": "0.2.8", + "scrypt-js": "^3.0.1", + "uuid": "^9.0.0", + "web3-core": "1.10.3", + "web3-core-helpers": "1.10.3", + "web3-core-method": "1.10.3", + "web3-utils": "1.10.3" + }, + "dependencies": { + "@ethereumjs/common": { + "version": "2.6.5", + "resolved": "https://registry.npmjs.org/@ethereumjs/common/-/common-2.6.5.tgz", + "integrity": "sha512-lRyVQOeCDaIVtgfbowla32pzeDv2Obr8oR8Put5RdUBNRGr1VGPGQNGP6elWIpgK3YdpzqTOh4GyUGOureVeeA==", + "dev": true, + "requires": { + "crc-32": "^1.2.0", + "ethereumjs-util": "^7.1.5" + } + }, + "@ethereumjs/tx": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/@ethereumjs/tx/-/tx-3.5.2.tgz", + "integrity": "sha512-gQDNJWKrSDGu2w7w0PzVXVBNMzb7wwdDOmOqczmhNjqFxFuIbhVJDwiGEnxFNC2/b8ifcZzY7MLcluizohRzNw==", + "dev": true, + "requires": { + "@ethereumjs/common": "^2.6.4", + "ethereumjs-util": "^7.1.5" + } + }, + "eth-lib": { + "version": "0.2.8", + "resolved": "https://registry.npmjs.org/eth-lib/-/eth-lib-0.2.8.tgz", + "integrity": "sha512-ArJ7x1WcWOlSpzdoTBX8vkwlkSQ85CjjifSZtV4co64vWxSV8geWfPI9x4SVYu3DSxnX4yWFVTtGL+j9DUFLNw==", + "dev": true, + "requires": { + "bn.js": "^4.11.6", + "elliptic": "^6.4.0", + "xhr-request-promise": "^0.1.2" + } + }, + "uuid": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz", + "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==", + "dev": true + } + } + }, + "web3-eth-contract": { + "version": "1.10.3", + "resolved": "https://registry.npmjs.org/web3-eth-contract/-/web3-eth-contract-1.10.3.tgz", + "integrity": "sha512-Y2CW61dCCyY4IoUMD4JsEQWrILX4FJWDWC/Txx/pr3K/+fGsBGvS9kWQN5EsVXOp4g7HoFOfVh9Lf7BmVVSRmg==", + "dev": true, + "requires": { + "@types/bn.js": "^5.1.1", + "web3-core": "1.10.3", + "web3-core-helpers": "1.10.3", + "web3-core-method": "1.10.3", + "web3-core-promievent": "1.10.3", + "web3-core-subscriptions": "1.10.3", + "web3-eth-abi": "1.10.3", + "web3-utils": "1.10.3" + } + }, + "web3-eth-ens": { + "version": "1.10.3", + "resolved": "https://registry.npmjs.org/web3-eth-ens/-/web3-eth-ens-1.10.3.tgz", + "integrity": "sha512-hR+odRDXGqKemw1GFniKBEXpjYwLgttTES+bc7BfTeoUyUZXbyDHe5ifC+h+vpzxh4oS0TnfcIoarK0Z9tFSiQ==", + "dev": true, + "requires": { + "content-hash": "^2.5.2", + "eth-ens-namehash": "2.0.8", + "web3-core": "1.10.3", + "web3-core-helpers": "1.10.3", + "web3-core-promievent": "1.10.3", + "web3-eth-abi": "1.10.3", + "web3-eth-contract": "1.10.3", + "web3-utils": "1.10.3" + } + }, + "web3-eth-iban": { + "version": "1.10.3", + "resolved": "https://registry.npmjs.org/web3-eth-iban/-/web3-eth-iban-1.10.3.tgz", + "integrity": "sha512-ZCfOjYKAjaX2TGI8uif5ah+J3BYFuo+47JOIV1RIz2l7kD9VfnxvRH5UiQDRyMALQC7KFd2hUqIEtHklapNyKA==", + "dev": true, + "requires": { + "bn.js": "^5.2.1", + "web3-utils": "1.10.3" + }, + "dependencies": { + "bn.js": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz", + "integrity": "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==", + "dev": true + } + } + }, + "web3-eth-personal": { + "version": "1.10.3", + "resolved": "https://registry.npmjs.org/web3-eth-personal/-/web3-eth-personal-1.10.3.tgz", + "integrity": "sha512-avrQ6yWdADIvuNQcFZXmGLCEzulQa76hUOuVywN7O3cklB4nFc/Gp3yTvD3bOAaE7DhjLQfhUTCzXL7WMxVTsw==", + "dev": true, + "requires": { + "@types/node": "^12.12.6", + "web3-core": "1.10.3", + "web3-core-helpers": "1.10.3", + "web3-core-method": "1.10.3", + "web3-net": "1.10.3", + "web3-utils": "1.10.3" + }, + "dependencies": { + "@types/node": { + "version": "12.20.55", + "resolved": "https://registry.npmjs.org/@types/node/-/node-12.20.55.tgz", + "integrity": "sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==", + "dev": true + } + } + }, + "web3-net": { + "version": "1.10.3", + "resolved": "https://registry.npmjs.org/web3-net/-/web3-net-1.10.3.tgz", + "integrity": "sha512-IoSr33235qVoI1vtKssPUigJU9Fc/Ph0T9CgRi15sx+itysmvtlmXMNoyd6Xrgm9LuM4CIhxz7yDzH93B79IFg==", + "dev": true, + "requires": { + "web3-core": "1.10.3", + "web3-core-method": "1.10.3", + "web3-utils": "1.10.3" + } + }, + "web3-providers-http": { + "version": "1.10.3", + "resolved": "https://registry.npmjs.org/web3-providers-http/-/web3-providers-http-1.10.3.tgz", + "integrity": "sha512-6dAgsHR3MxJ0Qyu3QLFlQEelTapVfWNTu5F45FYh8t7Y03T1/o+YAkVxsbY5AdmD+y5bXG/XPJ4q8tjL6MgZHw==", + "dev": true, + "requires": { + "abortcontroller-polyfill": "^1.7.5", + "cross-fetch": "^4.0.0", + "es6-promise": "^4.2.8", + "web3-core-helpers": "1.10.3" + } + }, + "web3-providers-ipc": { + "version": "1.10.3", + "resolved": "https://registry.npmjs.org/web3-providers-ipc/-/web3-providers-ipc-1.10.3.tgz", + "integrity": "sha512-vP5WIGT8FLnGRfswTxNs9rMfS1vCbMezj/zHbBe/zB9GauBRTYVrUo2H/hVrhLg8Ut7AbsKZ+tCJ4mAwpKi2hA==", + "dev": true, + "requires": { + "oboe": "2.1.5", + "web3-core-helpers": "1.10.3" + } + }, + "web3-providers-ws": { + "version": "1.10.3", + "resolved": "https://registry.npmjs.org/web3-providers-ws/-/web3-providers-ws-1.10.3.tgz", + "integrity": "sha512-/filBXRl48INxsh6AuCcsy4v5ndnTZ/p6bl67kmO9aK1wffv7CT++DrtclDtVMeDGCgB3van+hEf9xTAVXur7Q==", + "dev": true, + "requires": { + "eventemitter3": "4.0.4", + "web3-core-helpers": "1.10.3", + "websocket": "^1.0.32" + } + }, + "web3-shh": { + "version": "1.10.3", + "resolved": "https://registry.npmjs.org/web3-shh/-/web3-shh-1.10.3.tgz", + "integrity": "sha512-cAZ60CPvs9azdwMSQ/PSUdyV4PEtaW5edAZhu3rCXf6XxQRliBboic+AvwUvB6j3eswY50VGa5FygfVmJ1JVng==", + "dev": true, + "requires": { + "web3-core": "1.10.3", + "web3-core-method": "1.10.3", + "web3-core-subscriptions": "1.10.3", + "web3-net": "1.10.3" + } + }, + "web3-utils": { + "version": "1.10.3", + "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-1.10.3.tgz", + "integrity": "sha512-OqcUrEE16fDBbGoQtZXWdavsPzbGIDc5v3VrRTZ0XrIpefC/viZ1ZU9bGEemazyS0catk/3rkOOxpzTfY+XsyQ==", + "dev": true, + "requires": { + "@ethereumjs/util": "^8.1.0", + "bn.js": "^5.2.1", + "ethereum-bloom-filters": "^1.0.6", + "ethereum-cryptography": "^2.1.2", + "ethjs-unit": "0.1.6", + "number-to-bn": "1.7.0", + "randombytes": "^2.1.0", + "utf8": "3.0.0" + }, + "dependencies": { + "bn.js": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz", + "integrity": "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==", + "dev": true + } + } + }, + "webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", + "dev": true + }, + "websocket": { + "version": "1.0.34", + "resolved": "https://registry.npmjs.org/websocket/-/websocket-1.0.34.tgz", + "integrity": "sha512-PRDso2sGwF6kM75QykIesBijKSVceR6jL2G8NGYyq2XrItNC2P5/qL5XeR056GhA+Ly7JMFvJb9I312mJfmqnQ==", + "dev": true, + "requires": { + "bufferutil": "^4.0.1", + "debug": "^2.2.0", + "es5-ext": "^0.10.50", + "typedarray-to-buffer": "^3.1.5", + "utf-8-validate": "^5.0.2", + "yaeti": "^0.0.6" + } + }, + "whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", + "dev": true, + "requires": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + }, + "which-typed-array": { + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.13.tgz", + "integrity": "sha512-P5Nra0qjSncduVPEAr7xhoF5guty49ArDTwzJ/yNuPIbZppyRxFQsRCWrocxIY+CnMVG+qfbU2FmDKyvSGClow==", + "dev": true, + "requires": { + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.4", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-tostringtag": "^1.0.0" + } + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "dev": true + }, + "ws": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/ws/-/ws-3.3.3.tgz", + "integrity": "sha512-nnWLa/NwZSt4KQJu51MYlCcSQ5g7INpOrOMt4XV8j4dqTXdmlUmSHQ8/oLC069ckre0fRsgfvsKwbTdtKLCDkA==", + "dev": true, + "requires": { + "async-limiter": "~1.0.0", + "safe-buffer": "~5.1.0", + "ultron": "~1.1.0" + }, + "dependencies": { + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + } + } + }, + "xhr": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/xhr/-/xhr-2.6.0.tgz", + "integrity": "sha512-/eCGLb5rxjx5e3mF1A7s+pLlR6CGyqWN91fv1JgER5mVWg1MZmlhBvy9kjcsOdRk8RrIujotWyJamfyrp+WIcA==", + "dev": true, + "requires": { + "global": "~4.4.0", + "is-function": "^1.0.1", + "parse-headers": "^2.0.0", + "xtend": "^4.0.0" + } + }, + "xhr-request": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/xhr-request/-/xhr-request-1.1.0.tgz", + "integrity": "sha512-Y7qzEaR3FDtL3fP30k9wO/e+FBnBByZeybKOhASsGP30NIkRAAkKD/sCnLvgEfAIEC1rcmK7YG8f4oEnIrrWzA==", + "dev": true, + "requires": { + "buffer-to-arraybuffer": "^0.0.5", + "object-assign": "^4.1.1", + "query-string": "^5.0.1", + "simple-get": "^2.7.0", + "timed-out": "^4.0.1", + "url-set-query": "^1.0.0", + "xhr": "^2.0.4" + } + }, + "xhr-request-promise": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/xhr-request-promise/-/xhr-request-promise-0.1.3.tgz", + "integrity": "sha512-YUBytBsuwgitWtdRzXDDkWAXzhdGB8bYm0sSzMPZT7Z2MBjMSTHFsyCT1yCRATY+XC69DUrQraRAEgcoCRaIPg==", + "dev": true, + "requires": { + "xhr-request": "^1.1.0" + } + }, + "xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", + "dev": true + }, + "yaeti": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/yaeti/-/yaeti-0.0.6.tgz", + "integrity": "sha512-MvQa//+KcZCUkBTIC9blM+CU9J2GzuTytsOUwf2lidtvkx/6gnEp1QvJv34t9vdjhFmha/mUiNDbN0D0mJWdug==", + "dev": true + }, + "yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true + }, + "yn": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", + "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==" } } } diff --git a/bindings/nodejs/examples/package.json b/bindings/nodejs/examples/package.json index 0aabe8b208..a6b041d4d4 100644 --- a/bindings/nodejs/examples/package.json +++ b/bindings/nodejs/examples/package.json @@ -8,7 +8,7 @@ "run-example": "ts-node" }, "dependencies": { - "@iota/sdk": "link:../", + "@iota/sdk": "file:../", "class-transformer": "^0.5.1", "dotenv": "^16.0.0", "ts-node": "^10.9.1" @@ -18,7 +18,6 @@ "@ethereumjs/rlp": "^4.0.1", "@ethereumjs/tx": "^4.1.2", "@ethereumjs/util": "^8.0.6", - "@types/": "ethereumjs/rlp", "typescript": "^4.6.3", "web3": "^1.10.0" }, diff --git a/bindings/nodejs/examples/yarn.lock b/bindings/nodejs/examples/yarn.lock index 0eaab482e1..495cf22214 100644 --- a/bindings/nodejs/examples/yarn.lock +++ b/bindings/nodejs/examples/yarn.lock @@ -4,22 +4,14 @@ "@cspotcode/source-map-support@^0.8.0": version "0.8.1" - resolved "https://registry.yarnpkg.com/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz#00629c35a688e05a88b1cda684fb9d5e73f000a1" + resolved "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz" integrity sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw== dependencies: "@jridgewell/trace-mapping" "0.3.9" -"@ethereumjs/common@2.5.0": - version "2.5.0" - resolved "https://registry.yarnpkg.com/@ethereumjs/common/-/common-2.5.0.tgz#ec61551b31bef7a69d1dc634d8932468866a4268" - integrity sha512-DEHjW6e38o+JmB/NO3GZBpW4lpaiBpkFgXF6jLcJ6gETBYpEyaA5nTimsWBUJR3Vmtm/didUEbNjajskugZORg== - dependencies: - crc-32 "^1.2.0" - ethereumjs-util "^7.1.1" - -"@ethereumjs/common@^2.5.0": +"@ethereumjs/common@2.6.5", "@ethereumjs/common@^2.6.4": version "2.6.5" - resolved "https://registry.yarnpkg.com/@ethereumjs/common/-/common-2.6.5.tgz#0a75a22a046272579d91919cb12d84f2756e8d30" + resolved "https://registry.npmjs.org/@ethereumjs/common/-/common-2.6.5.tgz" integrity sha512-lRyVQOeCDaIVtgfbowla32pzeDv2Obr8oR8Put5RdUBNRGr1VGPGQNGP6elWIpgK3YdpzqTOh4GyUGOureVeeA== dependencies: crc-32 "^1.2.0" @@ -27,7 +19,7 @@ "@ethereumjs/common@^3.1.2", "@ethereumjs/common@^3.2.0": version "3.2.0" - resolved "https://registry.yarnpkg.com/@ethereumjs/common/-/common-3.2.0.tgz#b71df25845caf5456449163012074a55f048e0a0" + resolved "https://registry.npmjs.org/@ethereumjs/common/-/common-3.2.0.tgz" integrity sha512-pksvzI0VyLgmuEF2FA/JR/4/y6hcPq8OUail3/AvycBaW1d5VSauOZzqGvJ3RTmR4MU35lWE8KseKOsEhrFRBA== dependencies: "@ethereumjs/util" "^8.1.0" @@ -35,20 +27,20 @@ "@ethereumjs/rlp@^4.0.1": version "4.0.1" - resolved "https://registry.yarnpkg.com/@ethereumjs/rlp/-/rlp-4.0.1.tgz#626fabfd9081baab3d0a3074b0c7ecaf674aaa41" + resolved "https://registry.npmjs.org/@ethereumjs/rlp/-/rlp-4.0.1.tgz" integrity sha512-tqsQiBQDQdmPWE1xkkBq4rlSW5QZpLOUJ5RJh2/9fug+q9tnUhuZoVLk7s0scUIKTOzEtR72DFBXI4WiZcMpvw== -"@ethereumjs/tx@3.3.2": - version "3.3.2" - resolved "https://registry.yarnpkg.com/@ethereumjs/tx/-/tx-3.3.2.tgz#348d4624bf248aaab6c44fec2ae67265efe3db00" - integrity sha512-6AaJhwg4ucmwTvw/1qLaZUX5miWrwZ4nLOUsKyb/HtzS3BMw/CasKhdi1ims9mBKeK9sOJCH4qGKOBGyJCeeog== +"@ethereumjs/tx@3.5.2": + version "3.5.2" + resolved "https://registry.npmjs.org/@ethereumjs/tx/-/tx-3.5.2.tgz" + integrity sha512-gQDNJWKrSDGu2w7w0PzVXVBNMzb7wwdDOmOqczmhNjqFxFuIbhVJDwiGEnxFNC2/b8ifcZzY7MLcluizohRzNw== dependencies: - "@ethereumjs/common" "^2.5.0" - ethereumjs-util "^7.1.2" + "@ethereumjs/common" "^2.6.4" + ethereumjs-util "^7.1.5" "@ethereumjs/tx@^4.1.2": version "4.2.0" - resolved "https://registry.yarnpkg.com/@ethereumjs/tx/-/tx-4.2.0.tgz#5988ae15daf5a3b3c815493bc6b495e76009e853" + resolved "https://registry.npmjs.org/@ethereumjs/tx/-/tx-4.2.0.tgz" integrity sha512-1nc6VO4jtFd172BbSnTnDQVr9IYBFl1y4xPzZdtkrkKIncBCkdbgfdRV+MiTkJYAtTxvV12GRZLqBFT1PNK6Yw== dependencies: "@ethereumjs/common" "^3.2.0" @@ -58,7 +50,7 @@ "@ethereumjs/util@^8.0.6", "@ethereumjs/util@^8.1.0": version "8.1.0" - resolved "https://registry.yarnpkg.com/@ethereumjs/util/-/util-8.1.0.tgz#299df97fb6b034e0577ce9f94c7d9d1004409ed4" + resolved "https://registry.npmjs.org/@ethereumjs/util/-/util-8.1.0.tgz" integrity sha512-zQ0IqbdX8FZ9aw11vP+dZkKDkS+kgIvQPHnSAXzP9pLu+Rfu3D3XEeLbicvoXJTYnhZiPmsZUxgdzXwNKxRPbA== dependencies: "@ethereumjs/rlp" "^4.0.1" @@ -67,7 +59,7 @@ "@ethersproject/abi@^5.6.3": version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/abi/-/abi-5.7.0.tgz#b3f3e045bbbeed1af3947335c247ad625a44e449" + resolved "https://registry.npmjs.org/@ethersproject/abi/-/abi-5.7.0.tgz" integrity sha512-351ktp42TiRcYB3H1OP8yajPeAQstMW/yCFokj/AthP9bLHzQFPlOrxOcwYEDkUAICmOHljvN4K39OMTMUa9RA== dependencies: "@ethersproject/address" "^5.7.0" @@ -82,7 +74,7 @@ "@ethersproject/abstract-provider@^5.7.0": version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/abstract-provider/-/abstract-provider-5.7.0.tgz#b0a8550f88b6bf9d51f90e4795d48294630cb9ef" + resolved "https://registry.npmjs.org/@ethersproject/abstract-provider/-/abstract-provider-5.7.0.tgz" integrity sha512-R41c9UkchKCpAqStMYUpdunjo3pkEvZC3FAwZn5S5MGbXoMQOHIdHItezTETxAO5bevtMApSyEhn9+CHcDsWBw== dependencies: "@ethersproject/bignumber" "^5.7.0" @@ -95,7 +87,7 @@ "@ethersproject/abstract-signer@^5.7.0": version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/abstract-signer/-/abstract-signer-5.7.0.tgz#13f4f32117868452191a4649723cb086d2b596b2" + resolved "https://registry.npmjs.org/@ethersproject/abstract-signer/-/abstract-signer-5.7.0.tgz" integrity sha512-a16V8bq1/Cz+TGCkE2OPMTOUDLS3grCpdjoJCYNnVBbdYEMSgKrU0+B90s8b6H+ByYTBZN7a3g76jdIJi7UfKQ== dependencies: "@ethersproject/abstract-provider" "^5.7.0" @@ -106,7 +98,7 @@ "@ethersproject/address@^5.7.0": version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/address/-/address-5.7.0.tgz#19b56c4d74a3b0a46bfdbb6cfcc0a153fc697f37" + resolved "https://registry.npmjs.org/@ethersproject/address/-/address-5.7.0.tgz" integrity sha512-9wYhYt7aghVGo758POM5nqcOMaE168Q6aRLJZwUmiqSrAungkG74gSSeKEIR7ukixesdRZGPgVqme6vmxs1fkA== dependencies: "@ethersproject/bignumber" "^5.7.0" @@ -117,14 +109,14 @@ "@ethersproject/base64@^5.7.0": version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/base64/-/base64-5.7.0.tgz#ac4ee92aa36c1628173e221d0d01f53692059e1c" + resolved "https://registry.npmjs.org/@ethersproject/base64/-/base64-5.7.0.tgz" integrity sha512-Dr8tcHt2mEbsZr/mwTPIQAf3Ai0Bks/7gTw9dSqk1mQvhW3XvRlmDJr/4n+wg1JmCl16NZue17CDh8xb/vZ0sQ== dependencies: "@ethersproject/bytes" "^5.7.0" "@ethersproject/bignumber@^5.7.0": version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/bignumber/-/bignumber-5.7.0.tgz#e2f03837f268ba655ffba03a57853e18a18dc9c2" + resolved "https://registry.npmjs.org/@ethersproject/bignumber/-/bignumber-5.7.0.tgz" integrity sha512-n1CAdIHRWjSucQO3MC1zPSVgV/6dy/fjL9pMrPP9peL+QxEg9wOsVqwD4+818B6LUEtaXzVHQiuivzRoxPxUGw== dependencies: "@ethersproject/bytes" "^5.7.0" @@ -133,21 +125,21 @@ "@ethersproject/bytes@^5.7.0": version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/bytes/-/bytes-5.7.0.tgz#a00f6ea8d7e7534d6d87f47188af1148d71f155d" + resolved "https://registry.npmjs.org/@ethersproject/bytes/-/bytes-5.7.0.tgz" integrity sha512-nsbxwgFXWh9NyYWo+U8atvmMsSdKJprTcICAkvbBffT75qDocbuggBU0SJiVK2MuTrp0q+xvLkTnGMPK1+uA9A== dependencies: "@ethersproject/logger" "^5.7.0" "@ethersproject/constants@^5.7.0": version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/constants/-/constants-5.7.0.tgz#df80a9705a7e08984161f09014ea012d1c75295e" + resolved "https://registry.npmjs.org/@ethersproject/constants/-/constants-5.7.0.tgz" integrity sha512-DHI+y5dBNvkpYUMiRQyxRBYBefZkJfo70VUkUAsRjcPs47muV9evftfZ0PJVCXYbAiCgght0DtcF9srFQmIgWA== dependencies: "@ethersproject/bignumber" "^5.7.0" "@ethersproject/hash@^5.7.0": version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/hash/-/hash-5.7.0.tgz#eb7aca84a588508369562e16e514b539ba5240a7" + resolved "https://registry.npmjs.org/@ethersproject/hash/-/hash-5.7.0.tgz" integrity sha512-qX5WrQfnah1EFnO5zJv1v46a8HW0+E5xuBBDTwMFZLuVTx0tbU2kkx15NqdjxecrLGatQN9FGQKpb1FKdHCt+g== dependencies: "@ethersproject/abstract-signer" "^5.7.0" @@ -162,7 +154,7 @@ "@ethersproject/keccak256@^5.7.0": version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/keccak256/-/keccak256-5.7.0.tgz#3186350c6e1cd6aba7940384ec7d6d9db01f335a" + resolved "https://registry.npmjs.org/@ethersproject/keccak256/-/keccak256-5.7.0.tgz" integrity sha512-2UcPboeL/iW+pSg6vZ6ydF8tCnv3Iu/8tUmLLzWWGzxWKFFqOBQFLo6uLUv6BDrLgCDfN28RJ/wtByx+jZ4KBg== dependencies: "@ethersproject/bytes" "^5.7.0" @@ -170,26 +162,26 @@ "@ethersproject/logger@^5.7.0": version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/logger/-/logger-5.7.0.tgz#6ce9ae168e74fecf287be17062b590852c311892" + resolved "https://registry.npmjs.org/@ethersproject/logger/-/logger-5.7.0.tgz" integrity sha512-0odtFdXu/XHtjQXJYA3u9G0G8btm0ND5Cu8M7i5vhEcE8/HmF4Lbdqanwyv4uQTr2tx6b7fQRmgLrsnpQlmnig== "@ethersproject/networks@^5.7.0": version "5.7.1" - resolved "https://registry.yarnpkg.com/@ethersproject/networks/-/networks-5.7.1.tgz#118e1a981d757d45ccea6bb58d9fd3d9db14ead6" + resolved "https://registry.npmjs.org/@ethersproject/networks/-/networks-5.7.1.tgz" integrity sha512-n/MufjFYv3yFcUyfhnXotyDlNdFb7onmkSy8aQERi2PjNcnWQ66xXxa3XlS8nCcA8aJKJjIIMNJTC7tu80GwpQ== dependencies: "@ethersproject/logger" "^5.7.0" "@ethersproject/properties@^5.7.0": version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/properties/-/properties-5.7.0.tgz#a6e12cb0439b878aaf470f1902a176033067ed30" + resolved "https://registry.npmjs.org/@ethersproject/properties/-/properties-5.7.0.tgz" integrity sha512-J87jy8suntrAkIZtecpxEPxY//szqr1mlBaYlQ0r4RCaiD2hjheqF9s1LVE8vVuJCXisjIP+JgtK/Do54ej4Sw== dependencies: "@ethersproject/logger" "^5.7.0" "@ethersproject/rlp@^5.7.0": version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/rlp/-/rlp-5.7.0.tgz#de39e4d5918b9d74d46de93af80b7685a9c21304" + resolved "https://registry.npmjs.org/@ethersproject/rlp/-/rlp-5.7.0.tgz" integrity sha512-rBxzX2vK8mVF7b0Tol44t5Tb8gomOHkj5guL+HhzQ1yBh/ydjGnpw6at+X6Iw0Kp3OzzzkcKp8N9r0W4kYSs9w== dependencies: "@ethersproject/bytes" "^5.7.0" @@ -197,7 +189,7 @@ "@ethersproject/signing-key@^5.7.0": version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/signing-key/-/signing-key-5.7.0.tgz#06b2df39411b00bc57c7c09b01d1e41cf1b16ab3" + resolved "https://registry.npmjs.org/@ethersproject/signing-key/-/signing-key-5.7.0.tgz" integrity sha512-MZdy2nL3wO0u7gkB4nA/pEf8lu1TlFswPNmy8AiYkfKTdO6eXBJyUdmHO/ehm/htHw9K/qF8ujnTyUAD+Ry54Q== dependencies: "@ethersproject/bytes" "^5.7.0" @@ -209,7 +201,7 @@ "@ethersproject/strings@^5.7.0": version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/strings/-/strings-5.7.0.tgz#54c9d2a7c57ae8f1205c88a9d3a56471e14d5ed2" + resolved "https://registry.npmjs.org/@ethersproject/strings/-/strings-5.7.0.tgz" integrity sha512-/9nu+lj0YswRNSH0NXYqrh8775XNyEdUQAuf3f+SmOrnVewcJ5SBNAjF7lpgehKi4abvNNXyf+HX86czCdJ8Mg== dependencies: "@ethersproject/bytes" "^5.7.0" @@ -218,7 +210,7 @@ "@ethersproject/transactions@^5.6.2", "@ethersproject/transactions@^5.7.0": version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/transactions/-/transactions-5.7.0.tgz#91318fc24063e057885a6af13fdb703e1f993d3b" + resolved "https://registry.npmjs.org/@ethersproject/transactions/-/transactions-5.7.0.tgz" integrity sha512-kmcNicCp1lp8qanMTC3RIikGgoJ80ztTyvtsFvCYpSCfkjhD0jZ2LOrnbcuxuToLIUYYf+4XwD1rP+B/erDIhQ== dependencies: "@ethersproject/address" "^5.7.0" @@ -233,7 +225,7 @@ "@ethersproject/web@^5.7.0": version "5.7.1" - resolved "https://registry.yarnpkg.com/@ethersproject/web/-/web-5.7.1.tgz#de1f285b373149bee5928f4eb7bcb87ee5fbb4ae" + resolved "https://registry.npmjs.org/@ethersproject/web/-/web-5.7.1.tgz" integrity sha512-Gueu8lSvyjBWL4cYsWsjh6MtMwM0+H4HvqFPZfB6dV8ctbP9zFAO73VG1cMWae0FLPCtz0peKPpZY8/ugJJX2w== dependencies: "@ethersproject/base64" "^5.7.0" @@ -242,23 +234,29 @@ "@ethersproject/properties" "^5.7.0" "@ethersproject/strings" "^5.7.0" -"@iota/sdk@link:..": - version "0.0.0" - uid "" +"@iota/sdk@file:..": + version "1.1.3" + dependencies: + "@types/node" "^18.15.12" + cargo-cp-artifact "^0.1.6" + class-transformer "^0.5.1" + prebuild-install "^7.1.1" + reflect-metadata "^0.1.13" + typescript "^4.9.4" "@jridgewell/resolve-uri@^3.0.3": version "3.1.1" - resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz#c08679063f279615a3326583ba3a90d1d82cc721" + resolved "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz" integrity sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA== "@jridgewell/sourcemap-codec@^1.4.10": version "1.4.15" - resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz#d7c6e6755c78567a951e04ab52ef0fd26de59f32" + resolved "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz" integrity sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg== "@jridgewell/trace-mapping@0.3.9": version "0.3.9" - resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz#6534fd5933a53ba7cbf3a17615e273a0d1273ff9" + resolved "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz" integrity sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ== dependencies: "@jridgewell/resolve-uri" "^3.0.3" @@ -266,29 +264,24 @@ "@noble/curves@1.1.0", "@noble/curves@~1.1.0": version "1.1.0" - resolved "https://registry.yarnpkg.com/@noble/curves/-/curves-1.1.0.tgz#f13fc667c89184bc04cccb9b11e8e7bae27d8c3d" + resolved "https://registry.npmjs.org/@noble/curves/-/curves-1.1.0.tgz" integrity sha512-091oBExgENk/kGj3AZmtBDMpxQPDtxQABR2B9lb1JbVTs6ytdzZNwvhxQ4MWasRNEzlbEH8jCWFCwhF/Obj5AA== dependencies: "@noble/hashes" "1.3.1" -"@noble/hashes@1.3.1": +"@noble/hashes@1.3.1", "@noble/hashes@~1.3.0", "@noble/hashes@~1.3.1": version "1.3.1" - resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-1.3.1.tgz#8831ef002114670c603c458ab8b11328406953a9" + resolved "https://registry.npmjs.org/@noble/hashes/-/hashes-1.3.1.tgz" integrity sha512-EbqwksQwz9xDRGfDST86whPBgM65E0OH/pCgqW0GBVzO22bNE+NuIbeTb714+IfSjU3aRk47EUvXIb5bTsenKA== -"@noble/hashes@~1.3.0", "@noble/hashes@~1.3.1": - version "1.3.2" - resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-1.3.2.tgz#6f26dbc8fbc7205873ce3cee2f690eba0d421b39" - integrity sha512-MVC8EAQp7MvEcm30KWENFjgR+Mkmf+D189XJTkFIlwohU5hcBbn1ZkKq7KVTi2Hme3PMGF390DaL52beVrIihQ== - "@scure/base@~1.1.0": version "1.1.3" - resolved "https://registry.yarnpkg.com/@scure/base/-/base-1.1.3.tgz#8584115565228290a6c6c4961973e0903bb3df2f" + resolved "https://registry.npmjs.org/@scure/base/-/base-1.1.3.tgz" integrity sha512-/+SgoRjLq7Xlf0CWuLHq2LUZeL/w65kfzAPG5NH9pcmBhs+nunQTn4gvdwgMTIXnt9b2C/1SeL2XiysZEyIC9Q== "@scure/bip32@1.3.1": version "1.3.1" - resolved "https://registry.yarnpkg.com/@scure/bip32/-/bip32-1.3.1.tgz#7248aea723667f98160f593d621c47e208ccbb10" + resolved "https://registry.npmjs.org/@scure/bip32/-/bip32-1.3.1.tgz" integrity sha512-osvveYtyzdEVbt3OfwwXFr4P2iVBL5u1Q3q4ONBfDY/UpOuXmOlbgwc1xECEboY8wIays8Yt6onaWMUdUbfl0A== dependencies: "@noble/curves" "~1.1.0" @@ -297,7 +290,7 @@ "@scure/bip39@1.2.1": version "1.2.1" - resolved "https://registry.yarnpkg.com/@scure/bip39/-/bip39-1.2.1.tgz#5cee8978656b272a917b7871c981e0541ad6ac2a" + resolved "https://registry.npmjs.org/@scure/bip39/-/bip39-1.2.1.tgz" integrity sha512-Z3/Fsz1yr904dduJD0NpiyRHhRYHdcnyh73FZWiV+/qhWi83wNJ3NWolYqCEN+ZWsUz2TWwajJggcRE9r1zUYg== dependencies: "@noble/hashes" "~1.3.0" @@ -305,57 +298,53 @@ "@sindresorhus/is@^4.0.0", "@sindresorhus/is@^4.6.0": version "4.6.0" - resolved "https://registry.yarnpkg.com/@sindresorhus/is/-/is-4.6.0.tgz#3c7c9c46e678feefe7a2e5bb609d3dbd665ffb3f" + resolved "https://registry.npmjs.org/@sindresorhus/is/-/is-4.6.0.tgz" integrity sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw== "@szmarczak/http-timer@^4.0.5": version "4.0.6" - resolved "https://registry.yarnpkg.com/@szmarczak/http-timer/-/http-timer-4.0.6.tgz#b4a914bb62e7c272d4e5989fe4440f812ab1d807" + resolved "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-4.0.6.tgz" integrity sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w== dependencies: defer-to-connect "^2.0.0" "@szmarczak/http-timer@^5.0.1": version "5.0.1" - resolved "https://registry.yarnpkg.com/@szmarczak/http-timer/-/http-timer-5.0.1.tgz#c7c1bf1141cdd4751b0399c8fc7b8b664cd5be3a" + resolved "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-5.0.1.tgz" integrity sha512-+PmQX0PiAYPMeVYe237LJAYvOMYW1j2rH5YROyS3b4CTVJum34HfRvKvAzozHAQG0TnHNdUfY9nCeUyRAs//cw== dependencies: defer-to-connect "^2.0.1" "@tsconfig/node10@^1.0.7": version "1.0.9" - resolved "https://registry.yarnpkg.com/@tsconfig/node10/-/node10-1.0.9.tgz#df4907fc07a886922637b15e02d4cebc4c0021b2" + resolved "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.9.tgz" integrity sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA== "@tsconfig/node12@^1.0.7": version "1.0.11" - resolved "https://registry.yarnpkg.com/@tsconfig/node12/-/node12-1.0.11.tgz#ee3def1f27d9ed66dac6e46a295cffb0152e058d" + resolved "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz" integrity sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag== "@tsconfig/node14@^1.0.0": version "1.0.3" - resolved "https://registry.yarnpkg.com/@tsconfig/node14/-/node14-1.0.3.tgz#e4386316284f00b98435bf40f72f75a09dabf6c1" + resolved "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz" integrity sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow== "@tsconfig/node16@^1.0.2": version "1.0.4" - resolved "https://registry.yarnpkg.com/@tsconfig/node16/-/node16-1.0.4.tgz#0b92dcc0cc1c81f6f306a381f28e31b1a56536e9" + resolved "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.4.tgz" integrity sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA== -"@types/@ethereumjs/rlp": - version "3.0.0" - resolved "https://codeload.github.com/ethereumjs/rlp/tar.gz/e4b371dcfdf19c505fd23e53bbc2a3d73ea6f7fe" - "@types/bn.js@^5.1.0", "@types/bn.js@^5.1.1": - version "5.1.1" - resolved "https://registry.yarnpkg.com/@types/bn.js/-/bn.js-5.1.1.tgz#b51e1b55920a4ca26e9285ff79936bbdec910682" - integrity sha512-qNrYbZqMx0uJAfKnKclPh+dTwK33KfLHYqtyODwd5HnXOjnkhc4qgn3BrK6RWyGZm5+sIFE7Q7Vz6QQtJB7w7g== + version "5.1.5" + resolved "https://registry.npmjs.org/@types/bn.js/-/bn.js-5.1.5.tgz" + integrity sha512-V46N0zwKRF5Q00AZ6hWtN0T8gGmDUaUzLWQvHFo5yThtVwK/VCenFY3wXVbOvNfajEpsTfQM4IN9k/d6gUVX3A== dependencies: "@types/node" "*" "@types/cacheable-request@^6.0.1", "@types/cacheable-request@^6.0.2": version "6.0.3" - resolved "https://registry.yarnpkg.com/@types/cacheable-request/-/cacheable-request-6.0.3.tgz#a430b3260466ca7b5ca5bfd735693b36e7a9d183" + resolved "https://registry.npmjs.org/@types/cacheable-request/-/cacheable-request-6.0.3.tgz" integrity sha512-IQ3EbTzGxIigb1I3qPZc1rWJnH0BmSKv5QYTalEwweFvyBDLSAe24zP0le/hyi7ecGfZVlIVAg4BZqb8WBwKqw== dependencies: "@types/http-cache-semantics" "*" @@ -364,79 +353,81 @@ "@types/responselike" "^1.0.0" "@types/http-cache-semantics@*": - version "4.0.1" - resolved "https://registry.yarnpkg.com/@types/http-cache-semantics/-/http-cache-semantics-4.0.1.tgz#0ea7b61496902b95890dc4c3a116b60cb8dae812" - integrity sha512-SZs7ekbP8CN0txVG2xVRH6EgKmEm31BOxA07vkFaETzZz1xh+cbt8BcI0slpymvwhx5dlFnQG2rTlPVQn+iRPQ== + version "4.0.4" + resolved "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.0.4.tgz" + integrity sha512-1m0bIFVc7eJWyve9S0RnuRgcQqF/Xd5QsUZAZeQFr1Q3/p9JWoQQEqmVy+DPTNpGXwhgIetAoYF8JSc33q29QA== "@types/keyv@^3.1.4": version "3.1.4" - resolved "https://registry.yarnpkg.com/@types/keyv/-/keyv-3.1.4.tgz#3ccdb1c6751b0c7e52300bcdacd5bcbf8faa75b6" + resolved "https://registry.npmjs.org/@types/keyv/-/keyv-3.1.4.tgz" integrity sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg== dependencies: "@types/node" "*" "@types/node@*": - version "20.5.9" - resolved "https://registry.yarnpkg.com/@types/node/-/node-20.5.9.tgz#a70ec9d8fa0180a314c3ede0e20ea56ff71aed9a" - integrity sha512-PcGNd//40kHAS3sTlzKB9C9XL4K0sTup8nbG5lC14kzEteTNuAFh9u5nA0o5TWnSG2r/JNPRXFVcHJIIeRlmqQ== + version "17.0.45" + resolved "https://registry.npmjs.org/@types/node/-/node-17.0.45.tgz" + integrity sha512-w+tIMs3rq2afQdsPJlODhoUEKzFP1ayaoyl1CcnwtIlsVe7K7bA1NGm4s3PraqTLlXnbIN84zuBlxBWo1u9BLw== "@types/node@^12.12.6": version "12.20.55" - resolved "https://registry.yarnpkg.com/@types/node/-/node-12.20.55.tgz#c329cbd434c42164f846b909bd6f85b5537f6240" + resolved "https://registry.npmjs.org/@types/node/-/node-12.20.55.tgz" integrity sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ== "@types/node@^18.15.12": - version "18.16.18" - resolved "https://registry.yarnpkg.com/@types/node/-/node-18.16.18.tgz#85da09bafb66d4bc14f7c899185336d0c1736390" - integrity sha512-/aNaQZD0+iSBAGnvvN2Cx92HqE5sZCPZtx2TsK+4nvV23fFe09jVDvpArXr2j9DnYlzuU9WuoykDDc6wqvpNcw== + version "18.18.9" + resolved "https://registry.yarnpkg.com/@types/node/-/node-18.18.9.tgz#5527ea1832db3bba8eb8023ce8497b7d3f299592" + integrity sha512-0f5klcuImLnG4Qreu9hPj/rEfFq6YRc5n2mAjSsH+ec/mJL+3voBH0+8T7o8RpFjH7ovc+TRsL/c7OYIQsPTfQ== + dependencies: + undici-types "~5.26.4" "@types/pbkdf2@^3.0.0": - version "3.1.0" - resolved "https://registry.yarnpkg.com/@types/pbkdf2/-/pbkdf2-3.1.0.tgz#039a0e9b67da0cdc4ee5dab865caa6b267bb66b1" - integrity sha512-Cf63Rv7jCQ0LaL8tNXmEyqTHuIJxRdlS5vMh1mj5voN4+QFhVZnlZruezqpWYDiJ8UTzhP0VmeLXCmBk66YrMQ== + version "3.1.2" + resolved "https://registry.npmjs.org/@types/pbkdf2/-/pbkdf2-3.1.2.tgz" + integrity sha512-uRwJqmiXmh9++aSu1VNEn3iIxWOhd8AHXNSdlaLfdAAdSTY9jYVeGWnzejM3dvrkbqE3/hyQkQQ29IFATEGlew== dependencies: "@types/node" "*" "@types/responselike@^1.0.0": - version "1.0.0" - resolved "https://registry.yarnpkg.com/@types/responselike/-/responselike-1.0.0.tgz#251f4fe7d154d2bad125abe1b429b23afd262e29" - integrity sha512-85Y2BjiufFzaMIlvJDvTTB8Fxl2xfLo4HgmHzVBz08w4wDePCTjYw66PdrolO0kzli3yam/YCgRufyo1DdQVTA== + version "1.0.3" + resolved "https://registry.npmjs.org/@types/responselike/-/responselike-1.0.3.tgz" + integrity sha512-H/+L+UkTV33uf49PH5pCAUBVPNj2nDBXTN+qS1dOwyyg24l3CcicicCA7ca+HMvJBZcFgl5r8e+RR6elsb4Lyw== dependencies: "@types/node" "*" "@types/secp256k1@^4.0.1": - version "4.0.3" - resolved "https://registry.yarnpkg.com/@types/secp256k1/-/secp256k1-4.0.3.tgz#1b8e55d8e00f08ee7220b4d59a6abe89c37a901c" - integrity sha512-Da66lEIFeIz9ltsdMZcpQvmrmmoqrfju8pm1BH8WbYjZSwUgCwXLb9C+9XYogwBITnbsSaMdVPb2ekf7TV+03w== + version "4.0.6" + resolved "https://registry.npmjs.org/@types/secp256k1/-/secp256k1-4.0.6.tgz" + integrity sha512-hHxJU6PAEUn0TP4S/ZOzuTUvJWuZ6eIKeNKb5RBpODvSl6hp1Wrw4s7ATY50rklRCScUDpHzVA/DQdSjJ3UoYQ== dependencies: "@types/node" "*" abortcontroller-polyfill@^1.7.5: version "1.7.5" - resolved "https://registry.yarnpkg.com/abortcontroller-polyfill/-/abortcontroller-polyfill-1.7.5.tgz#6738495f4e901fbb57b6c0611d0c75f76c485bed" + resolved "https://registry.npmjs.org/abortcontroller-polyfill/-/abortcontroller-polyfill-1.7.5.tgz" integrity sha512-JMJ5soJWP18htbbxJjG7bG6yuI6pRhgJ0scHHTfkUjf6wjP912xZWvM+A4sJK3gqd9E8fcPbDnOefbA9Th/FIQ== accepts@~1.3.8: version "1.3.8" - resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.8.tgz#0bf0be125b67014adcb0b0921e62db7bffe16b2e" + resolved "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz" integrity sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw== dependencies: mime-types "~2.1.34" negotiator "0.6.3" acorn-walk@^8.1.1: - version "8.2.0" - resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-8.2.0.tgz#741210f2e2426454508853a2f44d0ab83b7f69c1" - integrity sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA== + version "8.3.0" + resolved "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.0.tgz" + integrity sha512-FS7hV565M5l1R08MXqo8odwMTB02C2UqzB17RVgu9EyuYFBqJZ3/ZY97sQD5FewVu1UyDFc1yztUDrAwT0EypA== acorn@^8.4.1: - version "8.9.0" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.9.0.tgz#78a16e3b2bcc198c10822786fa6679e245db5b59" - integrity sha512-jaVNAFBHNLXspO543WnNNPZFRtavh3skAkITqD0/2aeMkKZTN+254PyhwxFYrk3vQ1xfY+2wbesJMs/JC8/PwQ== + version "8.11.2" + resolved "https://registry.npmjs.org/acorn/-/acorn-8.11.2.tgz" + integrity sha512-nc0Axzp/0FILLEVsm4fNwLCwMttvhEI263QtVPQcbpfZZ3ts0hLsZGOpE6czNlid7CJ9MlyH8reXkpsf3YUY4w== ajv@^6.12.3: version "6.12.6" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" + resolved "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz" integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== dependencies: fast-deep-equal "^3.1.1" @@ -446,73 +437,73 @@ ajv@^6.12.3: arg@^4.1.0: version "4.1.3" - resolved "https://registry.yarnpkg.com/arg/-/arg-4.1.3.tgz#269fc7ad5b8e42cb63c896d5666017261c144089" + resolved "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz" integrity sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA== array-flatten@1.1.1: version "1.1.1" - resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2" + resolved "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz" integrity sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg== asn1@~0.2.3: version "0.2.6" - resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.6.tgz#0d3a7bb6e64e02a90c0303b31f292868ea09a08d" + resolved "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz" integrity sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ== dependencies: safer-buffer "~2.1.0" assert-plus@1.0.0, assert-plus@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525" + resolved "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz" integrity sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw== async-limiter@~1.0.0: version "1.0.1" - resolved "https://registry.yarnpkg.com/async-limiter/-/async-limiter-1.0.1.tgz#dd379e94f0db8310b08291f9d64c3209766617fd" + resolved "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.1.tgz" integrity sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ== asynckit@^0.4.0: version "0.4.0" - resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" + resolved "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz" integrity sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q== available-typed-arrays@^1.0.5: version "1.0.5" - resolved "https://registry.yarnpkg.com/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz#92f95616501069d07d10edb2fc37d3e1c65123b7" + resolved "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz" integrity sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw== aws-sign2@~0.7.0: version "0.7.0" - resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8" + resolved "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz" integrity sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA== aws4@^1.8.0: version "1.12.0" - resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.12.0.tgz#ce1c9d143389679e253b314241ea9aa5cec980d3" + resolved "https://registry.npmjs.org/aws4/-/aws4-1.12.0.tgz" integrity sha512-NmWvPnx0F1SfrQbYwOi7OeaNGokp9XhzNioJ/CSBs8Qa4vxug81mhJEAVZwxXuBmYB5KDRfMq/F3RR0BIU7sWg== base-x@^3.0.2, base-x@^3.0.8: version "3.0.9" - resolved "https://registry.yarnpkg.com/base-x/-/base-x-3.0.9.tgz#6349aaabb58526332de9f60995e548a53fe21320" + resolved "https://registry.npmjs.org/base-x/-/base-x-3.0.9.tgz" integrity sha512-H7JU6iBHTal1gp56aKoaa//YUxEaAOUiydvrV/pILqIHXTtqxSkATOnDA2u+jZ/61sD+L/412+7kzXRtWukhpQ== dependencies: safe-buffer "^5.0.1" base64-js@^1.3.1: version "1.5.1" - resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" + resolved "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz" integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== bcrypt-pbkdf@^1.0.0: version "1.0.2" - resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz#a4301d389b6a43f9b67ff3ca11a3f6637e360e9e" + resolved "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz" integrity sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w== dependencies: tweetnacl "^0.14.3" bignumber.js@^9.0.0: version "9.1.2" - resolved "https://registry.yarnpkg.com/bignumber.js/-/bignumber.js-9.1.2.tgz#b7c4242259c008903b13707983b5f4bbd31eda0c" + resolved "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.1.2.tgz" integrity sha512-2/mKyZH9K85bzOEfhXDBFZTGd1CTs+5IHpeFQo9luiBG7hghdC851Pj2WAhb6E3R6b9tZj/XKhbg4fum+Kepug== bl@^4.0.3: @@ -526,32 +517,32 @@ bl@^4.0.3: blakejs@^1.1.0: version "1.2.1" - resolved "https://registry.yarnpkg.com/blakejs/-/blakejs-1.2.1.tgz#5057e4206eadb4a97f7c0b6e197a505042fc3814" + resolved "https://registry.npmjs.org/blakejs/-/blakejs-1.2.1.tgz" integrity sha512-QXUSXI3QVc/gJME0dBpXrag1kbzOqCjCX8/b54ntNyW6sjtoqxqRk3LTmXzaJoh71zMsDCjM+47jS7XiwN/+fQ== bluebird@^3.5.0: version "3.7.2" - resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.7.2.tgz#9f229c15be272454ffa973ace0dbee79a1b0c36f" + resolved "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz" integrity sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg== bn.js@4.11.6: version "4.11.6" - resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.11.6.tgz#53344adb14617a13f6e8dd2ce28905d1c0ba3215" + resolved "https://registry.npmjs.org/bn.js/-/bn.js-4.11.6.tgz" integrity sha512-XWwnNNFCuuSQ0m3r3C4LE3EiORltHd9M05pq6FOlVeiophzRbMo50Sbz1ehl8K3Z+jw9+vmgnXefY1hz8X+2wA== bn.js@^4.11.6, bn.js@^4.11.9: version "4.12.0" - resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.12.0.tgz#775b3f278efbb9718eec7361f483fb36fbbfea88" + resolved "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz" integrity sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA== bn.js@^5.1.2, bn.js@^5.2.0, bn.js@^5.2.1: version "5.2.1" - resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-5.2.1.tgz#0bc527a6a0d18d0aa8d5b0538ce4a77dccfa7b70" + resolved "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz" integrity sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ== body-parser@1.20.1: version "1.20.1" - resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.20.1.tgz#b1812a8912c195cd371a3ee5e66faa2338a5c668" + resolved "https://registry.npmjs.org/body-parser/-/body-parser-1.20.1.tgz" integrity sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw== dependencies: bytes "3.1.2" @@ -569,7 +560,7 @@ body-parser@1.20.1: body-parser@^1.16.0: version "1.20.2" - resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.20.2.tgz#6feb0e21c4724d06de7ff38da36dad4f57a747fd" + resolved "https://registry.npmjs.org/body-parser/-/body-parser-1.20.2.tgz" integrity sha512-ml9pReCu3M61kGlqoTm2umSXTlRTuGTx0bfYj+uIUKKYycG5NtSbeetV3faSU6R7ajOPw0g/J1PvK4qNy7s5bA== dependencies: bytes "3.1.2" @@ -587,12 +578,12 @@ body-parser@^1.16.0: brorand@^1.1.0: version "1.1.0" - resolved "https://registry.yarnpkg.com/brorand/-/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f" + resolved "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz" integrity sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w== browserify-aes@^1.2.0: version "1.2.0" - resolved "https://registry.yarnpkg.com/browserify-aes/-/browserify-aes-1.2.0.tgz#326734642f403dabc3003209853bb70ad428ef48" + resolved "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz" integrity sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA== dependencies: buffer-xor "^1.0.3" @@ -604,14 +595,14 @@ browserify-aes@^1.2.0: bs58@^4.0.0: version "4.0.1" - resolved "https://registry.yarnpkg.com/bs58/-/bs58-4.0.1.tgz#be161e76c354f6f788ae4071f63f34e8c4f0a42a" + resolved "https://registry.npmjs.org/bs58/-/bs58-4.0.1.tgz" integrity sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw== dependencies: base-x "^3.0.2" bs58check@^2.1.2: version "2.1.2" - resolved "https://registry.yarnpkg.com/bs58check/-/bs58check-2.1.2.tgz#53b018291228d82a5aa08e7d796fdafda54aebfc" + resolved "https://registry.npmjs.org/bs58check/-/bs58check-2.1.2.tgz" integrity sha512-0TS1jicxdU09dwJMNZtVAfzPi6Q6QeN0pM1Fkzrjn+XYHvzMKPU3pHVpva+769iNVSfIYWf7LJ6WR+BuuMf8cA== dependencies: bs58 "^4.0.0" @@ -620,47 +611,47 @@ bs58check@^2.1.2: buffer-to-arraybuffer@^0.0.5: version "0.0.5" - resolved "https://registry.yarnpkg.com/buffer-to-arraybuffer/-/buffer-to-arraybuffer-0.0.5.tgz#6064a40fa76eb43c723aba9ef8f6e1216d10511a" + resolved "https://registry.npmjs.org/buffer-to-arraybuffer/-/buffer-to-arraybuffer-0.0.5.tgz" integrity sha512-3dthu5CYiVB1DEJp61FtApNnNndTckcqe4pFcLdvHtrpG+kcyekCJKg4MRiDcFW7A6AODnXB9U4dwQiCW5kzJQ== buffer-xor@^1.0.3: version "1.0.3" - resolved "https://registry.yarnpkg.com/buffer-xor/-/buffer-xor-1.0.3.tgz#26e61ed1422fb70dd42e6e36729ed51d855fe8d9" + resolved "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz" integrity sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ== buffer@^5.0.5, buffer@^5.5.0, buffer@^5.6.0: version "5.7.1" - resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.7.1.tgz#ba62e7c13133053582197160851a8f648e99eed0" + resolved "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz" integrity sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ== dependencies: base64-js "^1.3.1" ieee754 "^1.1.13" bufferutil@^4.0.1: - version "4.0.7" - resolved "https://registry.yarnpkg.com/bufferutil/-/bufferutil-4.0.7.tgz#60c0d19ba2c992dd8273d3f73772ffc894c153ad" - integrity sha512-kukuqc39WOHtdxtw4UScxF/WVnMFVSQVKhtx3AjZJzhd0RGZZldcrfSEbVsWWe6KNH253574cq5F+wpv0G9pJw== + version "4.0.8" + resolved "https://registry.npmjs.org/bufferutil/-/bufferutil-4.0.8.tgz" + integrity sha512-4T53u4PdgsXqKaIctwF8ifXlRTTmEPJ8iEPWFdGZvcf7sbwYo6FKFEX9eNNAnzFZ7EzJAQ3CJeOtCRA4rDp7Pw== dependencies: node-gyp-build "^4.3.0" bytes@3.1.2: version "3.1.2" - resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.2.tgz#8b0beeb98605adf1b128fa4386403c009e0221a5" + resolved "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz" integrity sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg== cacheable-lookup@^5.0.3: version "5.0.4" - resolved "https://registry.yarnpkg.com/cacheable-lookup/-/cacheable-lookup-5.0.4.tgz#5a6b865b2c44357be3d5ebc2a467b032719a7005" + resolved "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-5.0.4.tgz" integrity sha512-2/kNscPhpcxrOigMZzbiWF7dz8ilhb/nIHU3EyZiXWXpeq/au8qJ8VhdftMkty3n7Gj6HIGalQG8oiBNB3AJgA== cacheable-lookup@^6.0.4: version "6.1.0" - resolved "https://registry.yarnpkg.com/cacheable-lookup/-/cacheable-lookup-6.1.0.tgz#0330a543471c61faa4e9035db583aad753b36385" + resolved "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-6.1.0.tgz" integrity sha512-KJ/Dmo1lDDhmW2XDPMo+9oiy/CeqosPguPCrgcVzKyZrL6pM1gU2GmPY/xo6OQPTUaA/c0kwHuywB4E6nmT9ww== cacheable-request@^7.0.2: version "7.0.4" - resolved "https://registry.yarnpkg.com/cacheable-request/-/cacheable-request-7.0.4.tgz#7a33ebf08613178b403635be7b899d3e69bbe817" + resolved "https://registry.npmjs.org/cacheable-request/-/cacheable-request-7.0.4.tgz" integrity sha512-v+p6ongsrp0yTGbJXjgxPow2+DL93DASP4kXCDKb8/bwRtt9OEF3whggkkDkGNzgcWy2XaF4a8nZglC7uElscg== dependencies: clone-response "^1.0.2" @@ -671,13 +662,14 @@ cacheable-request@^7.0.2: normalize-url "^6.0.1" responselike "^2.0.0" -call-bind@^1.0.0, call-bind@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.2.tgz#b1d4e89e688119c3c9a903ad30abb2f6a919be3c" - integrity sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA== +call-bind@^1.0.0, call-bind@^1.0.2, call-bind@^1.0.4: + version "1.0.5" + resolved "https://registry.npmjs.org/call-bind/-/call-bind-1.0.5.tgz" + integrity sha512-C3nQxfFZxFRVoJoGKKI8y3MOEo129NQ+FgQ08iye+Mk4zNZZGdjfs06bVTr+DBSlA66Q2VEcMki/cUCP4SercQ== dependencies: - function-bind "^1.1.1" - get-intrinsic "^1.0.2" + function-bind "^1.1.2" + get-intrinsic "^1.2.1" + set-function-length "^1.1.1" cargo-cp-artifact@^0.1.6: version "0.1.8" @@ -686,7 +678,7 @@ cargo-cp-artifact@^0.1.6: caseless@~0.12.0: version "0.12.0" - resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" + resolved "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz" integrity sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw== chownr@^1.1.1, chownr@^1.1.4: @@ -696,7 +688,7 @@ chownr@^1.1.1, chownr@^1.1.4: cids@^0.7.1: version "0.7.5" - resolved "https://registry.yarnpkg.com/cids/-/cids-0.7.5.tgz#60a08138a99bfb69b6be4ceb63bfef7a396b28b2" + resolved "https://registry.npmjs.org/cids/-/cids-0.7.5.tgz" integrity sha512-zT7mPeghoWAu+ppn8+BS1tQ5qGmbMfB4AregnQjA/qHY3GC1m1ptI9GkWNlgeu38r7CuRdXB47uY2XgAYt6QVA== dependencies: buffer "^5.5.0" @@ -707,7 +699,7 @@ cids@^0.7.1: cipher-base@^1.0.0, cipher-base@^1.0.1, cipher-base@^1.0.3: version "1.0.4" - resolved "https://registry.yarnpkg.com/cipher-base/-/cipher-base-1.0.4.tgz#8760e4ecc272f4c363532f926d874aae2c1397de" + resolved "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz" integrity sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q== dependencies: inherits "^2.0.1" @@ -715,38 +707,38 @@ cipher-base@^1.0.0, cipher-base@^1.0.1, cipher-base@^1.0.3: class-is@^1.1.0: version "1.1.0" - resolved "https://registry.yarnpkg.com/class-is/-/class-is-1.1.0.tgz#9d3c0fba0440d211d843cec3dedfa48055005825" + resolved "https://registry.npmjs.org/class-is/-/class-is-1.1.0.tgz" integrity sha512-rhjH9AG1fvabIDoGRVH587413LPjTZgmDF9fOFCbFJQV4yuocX1mHxxvXI4g3cGwbVY9wAYIoKlg1N79frJKQw== class-transformer@^0.5.1: version "0.5.1" - resolved "https://registry.yarnpkg.com/class-transformer/-/class-transformer-0.5.1.tgz#24147d5dffd2a6cea930a3250a677addf96ab336" + resolved "https://registry.npmjs.org/class-transformer/-/class-transformer-0.5.1.tgz" integrity sha512-SQa1Ws6hUbfC98vKGxZH3KFY0Y1lm5Zm0SY8XX9zbK7FJCyVEac3ATW0RIpwzW+oOfmHE5PMPufDG9hCfoEOMw== clone-response@^1.0.2: version "1.0.3" - resolved "https://registry.yarnpkg.com/clone-response/-/clone-response-1.0.3.tgz#af2032aa47816399cf5f0a1d0db902f517abb8c3" + resolved "https://registry.npmjs.org/clone-response/-/clone-response-1.0.3.tgz" integrity sha512-ROoL94jJH2dUVML2Y/5PEDNaSHgeOdSDicUyS7izcF63G6sTc/FTjLub4b8Il9S8S0beOfYt0TaA5qvFK+w0wA== dependencies: mimic-response "^1.0.0" combined-stream@^1.0.6, combined-stream@~1.0.6: version "1.0.8" - resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" + resolved "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz" integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== dependencies: delayed-stream "~1.0.0" content-disposition@0.5.4: version "0.5.4" - resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.4.tgz#8b82b4efac82512a02bb0b1dcec9d2c5e8eb5bfe" + resolved "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz" integrity sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ== dependencies: safe-buffer "5.2.1" content-hash@^2.5.2: version "2.5.2" - resolved "https://registry.yarnpkg.com/content-hash/-/content-hash-2.5.2.tgz#bbc2655e7c21f14fd3bfc7b7d4bfe6e454c9e211" + resolved "https://registry.npmjs.org/content-hash/-/content-hash-2.5.2.tgz" integrity sha512-FvIQKy0S1JaWV10sMsA7TRx8bpU+pqPkhbsfvOJAdjRXvYxEckAwQWGwtRjiaJfh+E0DvcWUGqcdjwMGFjsSdw== dependencies: cids "^0.7.1" @@ -755,27 +747,27 @@ content-hash@^2.5.2: content-type@~1.0.4, content-type@~1.0.5: version "1.0.5" - resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.5.tgz#8b773162656d1d1086784c8f23a54ce6d73d7918" + resolved "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz" integrity sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA== cookie-signature@1.0.6: version "1.0.6" - resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c" + resolved "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz" integrity sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ== cookie@0.5.0: version "0.5.0" - resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.5.0.tgz#d1f5d71adec6558c58f389987c366aa47e994f8b" + resolved "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz" integrity sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw== core-util-is@1.0.2: version "1.0.2" - resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" + resolved "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz" integrity sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ== cors@^2.8.1: version "2.8.5" - resolved "https://registry.yarnpkg.com/cors/-/cors-2.8.5.tgz#eac11da51592dd86b9f06f6e7ac293b3df875d29" + resolved "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz" integrity sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g== dependencies: object-assign "^4" @@ -783,12 +775,12 @@ cors@^2.8.1: crc-32@^1.2.0: version "1.2.2" - resolved "https://registry.yarnpkg.com/crc-32/-/crc-32-1.2.2.tgz#3cad35a934b8bf71f25ca524b6da51fb7eace2ff" + resolved "https://registry.npmjs.org/crc-32/-/crc-32-1.2.2.tgz" integrity sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ== create-hash@^1.1.0, create-hash@^1.1.2, create-hash@^1.2.0: version "1.2.0" - resolved "https://registry.yarnpkg.com/create-hash/-/create-hash-1.2.0.tgz#889078af11a63756bcfb59bd221996be3a9ef196" + resolved "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz" integrity sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg== dependencies: cipher-base "^1.0.1" @@ -799,7 +791,7 @@ create-hash@^1.1.0, create-hash@^1.1.2, create-hash@^1.2.0: create-hmac@^1.1.4, create-hmac@^1.1.7: version "1.1.7" - resolved "https://registry.yarnpkg.com/create-hmac/-/create-hmac-1.1.7.tgz#69170c78b3ab957147b2b8b04572e47ead2243ff" + resolved "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz" integrity sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg== dependencies: cipher-base "^1.0.3" @@ -811,19 +803,19 @@ create-hmac@^1.1.4, create-hmac@^1.1.7: create-require@^1.1.0: version "1.1.1" - resolved "https://registry.yarnpkg.com/create-require/-/create-require-1.1.1.tgz#c1d7e8f1e5f6cfc9ff65f9cd352d37348756c333" + resolved "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz" integrity sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ== cross-fetch@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/cross-fetch/-/cross-fetch-4.0.0.tgz#f037aef1580bb3a1a35164ea2a848ba81b445983" + resolved "https://registry.npmjs.org/cross-fetch/-/cross-fetch-4.0.0.tgz" integrity sha512-e4a5N8lVvuLgAWgnCrLr2PP0YyDOTHa9H/Rj54dirp61qXnNq46m82bRhNqIA5VccJtWBvPTFRV3TtvHUKPB1g== dependencies: node-fetch "^2.6.12" d@1, d@^1.0.1: version "1.0.1" - resolved "https://registry.yarnpkg.com/d/-/d-1.0.1.tgz#8698095372d58dbee346ffd0c7093f99f8f9eb5a" + resolved "https://registry.npmjs.org/d/-/d-1.0.1.tgz" integrity sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA== dependencies: es5-ext "^0.10.50" @@ -831,33 +823,33 @@ d@1, d@^1.0.1: dashdash@^1.12.0: version "1.14.1" - resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0" + resolved "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz" integrity sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g== dependencies: assert-plus "^1.0.0" debug@2.6.9, debug@^2.2.0: version "2.6.9" - resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" + resolved "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz" integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== dependencies: ms "2.0.0" decode-uri-component@^0.2.0: version "0.2.2" - resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.2.tgz#e69dbe25d37941171dd540e024c444cd5188e1e9" + resolved "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.2.tgz" integrity sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ== decompress-response@^3.3.0: version "3.3.0" - resolved "https://registry.yarnpkg.com/decompress-response/-/decompress-response-3.3.0.tgz#80a4dd323748384bfa248083622aedec982adff3" + resolved "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz" integrity sha512-BzRPQuY1ip+qDonAOz42gRm/pg9F768C+npV/4JOsxRC2sq+Rlk+Q4ZCAsOhnIaMrgarILY+RMUIvMmmX1qAEA== dependencies: mimic-response "^1.0.0" decompress-response@^6.0.0: version "6.0.0" - resolved "https://registry.yarnpkg.com/decompress-response/-/decompress-response-6.0.0.tgz#ca387612ddb7e104bd16d85aab00d5ecf09c66fc" + resolved "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz" integrity sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ== dependencies: mimic-response "^3.1.0" @@ -869,47 +861,56 @@ deep-extend@^0.6.0: defer-to-connect@^2.0.0, defer-to-connect@^2.0.1: version "2.0.1" - resolved "https://registry.yarnpkg.com/defer-to-connect/-/defer-to-connect-2.0.1.tgz#8016bdb4143e4632b77a3449c6236277de520587" + resolved "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-2.0.1.tgz" integrity sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg== +define-data-property@^1.1.1: + version "1.1.1" + resolved "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.1.tgz" + integrity sha512-E7uGkTzkk1d0ByLeSc6ZsFS79Axg+m1P/VsgYsxHgiuc3tFSj+MjMIwe90FC4lOAZzNBdY7kkO2P2wKdsQ1vgQ== + dependencies: + get-intrinsic "^1.2.1" + gopd "^1.0.1" + has-property-descriptors "^1.0.0" + delayed-stream@~1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" + resolved "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz" integrity sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ== depd@2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/depd/-/depd-2.0.0.tgz#b696163cc757560d09cf22cc8fad1571b79e76df" + resolved "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz" integrity sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw== destroy@1.2.0: version "1.2.0" - resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.2.0.tgz#4803735509ad8be552934c67df614f94e66fa015" + resolved "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz" integrity sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg== detect-libc@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-2.0.1.tgz#e1897aa88fa6ad197862937fbc0441ef352ee0cd" - integrity sha512-463v3ZeIrcWtdgIg6vI6XUncguvr2TnGl4SzDXinkt9mSLpBJKXT3mW6xT3VQdDN11+WVs29pgvivTc4Lp8v+w== + version "2.0.2" + resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-2.0.2.tgz#8ccf2ba9315350e1241b88d0ac3b0e1fbd99605d" + integrity sha512-UX6sGumvvqSaXgdKGUsgZWqcUyIXZ/vZTrlRT/iobiKhGL0zL4d3osHj3uqllWJK+i+sixDS/3COVEOFbupFyw== diff@^4.0.1: version "4.0.2" - resolved "https://registry.yarnpkg.com/diff/-/diff-4.0.2.tgz#60f3aecb89d5fae520c11aa19efc2bb982aade7d" + resolved "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz" integrity sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A== dom-walk@^0.1.0: version "0.1.2" - resolved "https://registry.yarnpkg.com/dom-walk/-/dom-walk-0.1.2.tgz#0c548bef048f4d1f2a97249002236060daa3fd84" + resolved "https://registry.npmjs.org/dom-walk/-/dom-walk-0.1.2.tgz" integrity sha512-6QvTW9mrGeIegrFXdtQi9pk7O/nSK6lSdXW2eqUspN5LWD7UTji2Fqw5V2YLjBpHEoU9Xl/eUWNpDeZvoyOv2w== dotenv@^16.0.0: - version "16.3.1" - resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-16.3.1.tgz#369034de7d7e5b120972693352a3bf112172cc3e" - integrity sha512-IPzF4w4/Rd94bA9imS68tZBaYyBWSCE47V1RGuMrB94iyTOIEwRmVL2x/4An+6mETpLrKJ5hQkB8W4kFAadeIQ== + version "16.0.3" + resolved "https://registry.npmjs.org/dotenv/-/dotenv-16.0.3.tgz" + integrity sha512-7GO6HghkA5fYG9TYnNxi14/7K9f5occMlp3zXAuSxn7CKCxt9xbNWG7yF8hTCSUchlfWSe3uLmlPfigevRItzQ== ecc-jsbn@~0.1.1: version "0.1.2" - resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz#3a83a904e54353287874c564b7549386849a98c9" + resolved "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz" integrity sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw== dependencies: jsbn "~0.1.0" @@ -917,12 +918,12 @@ ecc-jsbn@~0.1.1: ee-first@1.1.1: version "1.1.1" - resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" + resolved "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz" integrity sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow== elliptic@6.5.4, elliptic@^6.4.0, elliptic@^6.5.4: version "6.5.4" - resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.5.4.tgz#da37cebd31e79a1367e941b592ed1fbebd58abbb" + resolved "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz" integrity sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ== dependencies: bn.js "^4.11.9" @@ -935,19 +936,19 @@ elliptic@6.5.4, elliptic@^6.4.0, elliptic@^6.5.4: encodeurl@~1.0.2: version "1.0.2" - resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" + resolved "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz" integrity sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w== end-of-stream@^1.1.0, end-of-stream@^1.4.1: version "1.4.4" - resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0" + resolved "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz" integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q== dependencies: once "^1.4.0" es5-ext@^0.10.35, es5-ext@^0.10.50: version "0.10.62" - resolved "https://registry.yarnpkg.com/es5-ext/-/es5-ext-0.10.62.tgz#5e6adc19a6da524bf3d1e02bbc8960e5eb49a9a5" + resolved "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.62.tgz" integrity sha512-BHLqn0klhEpnOKSrzn/Xsz2UIW8j+cGmo9JLzr8BiUapV8hPL9+FliFqjwr9ngW7jWdnxv6eO+/LqyhJVqgrjA== dependencies: es6-iterator "^2.0.3" @@ -956,7 +957,7 @@ es5-ext@^0.10.35, es5-ext@^0.10.50: es6-iterator@^2.0.3: version "2.0.3" - resolved "https://registry.yarnpkg.com/es6-iterator/-/es6-iterator-2.0.3.tgz#a7de889141a05a94b0854403b2d0a0fbfa98f3b7" + resolved "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz" integrity sha512-zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g== dependencies: d "1" @@ -965,12 +966,12 @@ es6-iterator@^2.0.3: es6-promise@^4.2.8: version "4.2.8" - resolved "https://registry.yarnpkg.com/es6-promise/-/es6-promise-4.2.8.tgz#4eb21594c972bc40553d276e510539143db53e0a" + resolved "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.8.tgz" integrity sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w== es6-symbol@^3.1.1, es6-symbol@^3.1.3: version "3.1.3" - resolved "https://registry.yarnpkg.com/es6-symbol/-/es6-symbol-3.1.3.tgz#bad5d3c1bcdac28269f4cb331e431c78ac705d18" + resolved "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.3.tgz" integrity sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA== dependencies: d "^1.0.1" @@ -978,17 +979,17 @@ es6-symbol@^3.1.1, es6-symbol@^3.1.3: escape-html@~1.0.3: version "1.0.3" - resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" + resolved "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz" integrity sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow== etag@~1.8.1: version "1.8.1" - resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" + resolved "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz" integrity sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg== eth-ens-namehash@2.0.8: version "2.0.8" - resolved "https://registry.yarnpkg.com/eth-ens-namehash/-/eth-ens-namehash-2.0.8.tgz#229ac46eca86d52e0c991e7cb2aef83ff0f68bcf" + resolved "https://registry.npmjs.org/eth-ens-namehash/-/eth-ens-namehash-2.0.8.tgz" integrity sha512-VWEI1+KJfz4Km//dadyvBBoBeSQ0MHTXPvr8UIXiLW6IanxvAV+DmlZAijZwAyggqGUfwQBeHf7tc9wzc1piSw== dependencies: idna-uts46-hx "^2.3.1" @@ -996,7 +997,7 @@ eth-ens-namehash@2.0.8: eth-lib@0.2.8: version "0.2.8" - resolved "https://registry.yarnpkg.com/eth-lib/-/eth-lib-0.2.8.tgz#b194058bef4b220ad12ea497431d6cb6aa0623c8" + resolved "https://registry.npmjs.org/eth-lib/-/eth-lib-0.2.8.tgz" integrity sha512-ArJ7x1WcWOlSpzdoTBX8vkwlkSQ85CjjifSZtV4co64vWxSV8geWfPI9x4SVYu3DSxnX4yWFVTtGL+j9DUFLNw== dependencies: bn.js "^4.11.6" @@ -1005,7 +1006,7 @@ eth-lib@0.2.8: eth-lib@^0.1.26: version "0.1.29" - resolved "https://registry.yarnpkg.com/eth-lib/-/eth-lib-0.1.29.tgz#0c11f5060d42da9f931eab6199084734f4dbd1d9" + resolved "https://registry.npmjs.org/eth-lib/-/eth-lib-0.1.29.tgz" integrity sha512-bfttrr3/7gG4E02HoWTDUcDDslN003OlOoBxk9virpAZQ1ja/jDgwkWB8QfJF7ojuEowrqy+lzp9VcJG7/k5bQ== dependencies: bn.js "^4.11.6" @@ -1017,14 +1018,14 @@ eth-lib@^0.1.26: ethereum-bloom-filters@^1.0.6: version "1.0.10" - resolved "https://registry.yarnpkg.com/ethereum-bloom-filters/-/ethereum-bloom-filters-1.0.10.tgz#3ca07f4aed698e75bd134584850260246a5fed8a" + resolved "https://registry.npmjs.org/ethereum-bloom-filters/-/ethereum-bloom-filters-1.0.10.tgz" integrity sha512-rxJ5OFN3RwjQxDcFP2Z5+Q9ho4eIdEmSc2ht0fCu8Se9nbXjZ7/031uXoUYJ87KHCOdVeiUuwSnoS7hmYAGVHA== dependencies: js-sha3 "^0.8.0" ethereum-cryptography@^0.1.3: version "0.1.3" - resolved "https://registry.yarnpkg.com/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz#8d6143cfc3d74bf79bbd8edecdf29e4ae20dd191" + resolved "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz" integrity sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ== dependencies: "@types/pbkdf2" "^3.0.0" @@ -1045,7 +1046,7 @@ ethereum-cryptography@^0.1.3: ethereum-cryptography@^2.0.0, ethereum-cryptography@^2.1.2: version "2.1.2" - resolved "https://registry.yarnpkg.com/ethereum-cryptography/-/ethereum-cryptography-2.1.2.tgz#18fa7108622e56481157a5cb7c01c0c6a672eb67" + resolved "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-2.1.2.tgz" integrity sha512-Z5Ba0T0ImZ8fqXrJbpHcbpAvIswRte2wGNR/KePnu8GbbvgJ47lMxT/ZZPG6i9Jaht4azPDop4HaM00J0J59ug== dependencies: "@noble/curves" "1.1.0" @@ -1053,9 +1054,9 @@ ethereum-cryptography@^2.0.0, ethereum-cryptography@^2.1.2: "@scure/bip32" "1.3.1" "@scure/bip39" "1.2.1" -ethereumjs-util@^7.1.1, ethereumjs-util@^7.1.2, ethereumjs-util@^7.1.5: +ethereumjs-util@^7.1.5: version "7.1.5" - resolved "https://registry.yarnpkg.com/ethereumjs-util/-/ethereumjs-util-7.1.5.tgz#9ecf04861e4fbbeed7465ece5f23317ad1129181" + resolved "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-7.1.5.tgz" integrity sha512-SDl5kKrQAudFBUe5OJM9Ac6WmMyYmXX/6sTmLZ3ffG2eY6ZIGBes3pEDxNN6V72WyOw4CPD5RomKdsa8DAAwLg== dependencies: "@types/bn.js" "^5.1.0" @@ -1066,7 +1067,7 @@ ethereumjs-util@^7.1.1, ethereumjs-util@^7.1.2, ethereumjs-util@^7.1.5: ethjs-unit@0.1.6: version "0.1.6" - resolved "https://registry.yarnpkg.com/ethjs-unit/-/ethjs-unit-0.1.6.tgz#c665921e476e87bce2a9d588a6fe0405b2c41699" + resolved "https://registry.npmjs.org/ethjs-unit/-/ethjs-unit-0.1.6.tgz" integrity sha512-/Sn9Y0oKl0uqQuvgFk/zQgR7aw1g36qX/jzSQ5lSwlO0GigPymk4eGQfeNTD03w1dPOqfz8V77Cy43jH56pagw== dependencies: bn.js "4.11.6" @@ -1074,12 +1075,12 @@ ethjs-unit@0.1.6: eventemitter3@4.0.4: version "4.0.4" - resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.4.tgz#b5463ace635a083d018bdc7c917b4c5f10a85384" + resolved "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.4.tgz" integrity sha512-rlaVLnVxtxvoyLsQQFBx53YmXHDxRIzzTLbdfxqi4yocpSjAxXwkU0cScM5JgSKMqEhrZpnvQ2D9gjylR0AimQ== evp_bytestokey@^1.0.3: version "1.0.3" - resolved "https://registry.yarnpkg.com/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz#7fcbdb198dc71959432efe13842684e0525acb02" + resolved "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz" integrity sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA== dependencies: md5.js "^1.3.4" @@ -1092,7 +1093,7 @@ expand-template@^2.0.3: express@^4.14.0: version "4.18.2" - resolved "https://registry.yarnpkg.com/express/-/express-4.18.2.tgz#3fabe08296e930c796c19e3c516979386ba9fd59" + resolved "https://registry.npmjs.org/express/-/express-4.18.2.tgz" integrity sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ== dependencies: accepts "~1.3.8" @@ -1129,39 +1130,34 @@ express@^4.14.0: ext@^1.1.2: version "1.7.0" - resolved "https://registry.yarnpkg.com/ext/-/ext-1.7.0.tgz#0ea4383c0103d60e70be99e9a7f11027a33c4f5f" + resolved "https://registry.npmjs.org/ext/-/ext-1.7.0.tgz" integrity sha512-6hxeJYaL110a9b5TEJSj0gojyHQAmA2ch5Os+ySCiA1QGdS697XWY1pzsrSjqA9LDEEgdB/KypIlR59RcLuHYw== dependencies: type "^2.7.2" extend@~3.0.2: version "3.0.2" - resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" + resolved "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz" integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g== -extsprintf@1.3.0: +extsprintf@1.3.0, extsprintf@^1.2.0: version "1.3.0" - resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05" + resolved "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz" integrity sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g== -extsprintf@^1.2.0: - version "1.4.1" - resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.4.1.tgz#8d172c064867f235c0c84a596806d279bf4bcc07" - integrity sha512-Wrk35e8ydCKDj/ArClo1VrPVmN8zph5V4AtHwIuHhvMXsKf73UT3BOD+azBIW+3wOJ4FhEH7zyaJCFvChjYvMA== - fast-deep-equal@^3.1.1: version "3.1.3" - resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" + resolved "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz" integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== 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" + resolved "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz" integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== finalhandler@1.2.0: version "1.2.0" - resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.2.0.tgz#7d23fe5731b207b4640e4fcd00aec1f9207a7b32" + resolved "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz" integrity sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg== dependencies: debug "2.6.9" @@ -1174,24 +1170,24 @@ finalhandler@1.2.0: for-each@^0.3.3: version "0.3.3" - resolved "https://registry.yarnpkg.com/for-each/-/for-each-0.3.3.tgz#69b447e88a0a5d32c3e7084f3f1710034b21376e" + resolved "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz" integrity sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw== dependencies: is-callable "^1.1.3" forever-agent@~0.6.1: version "0.6.1" - resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" + resolved "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz" integrity sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw== form-data-encoder@1.7.1: version "1.7.1" - resolved "https://registry.yarnpkg.com/form-data-encoder/-/form-data-encoder-1.7.1.tgz#ac80660e4f87ee0d3d3c3638b7da8278ddb8ec96" + resolved "https://registry.npmjs.org/form-data-encoder/-/form-data-encoder-1.7.1.tgz" integrity sha512-EFRDrsMm/kyqbTQocNvRXMLjc7Es2Vk+IQFx/YW7hkUH1eBl4J1fqiP34l74Yt0pFLCNpc06fkbVk00008mzjg== form-data@~2.3.2: version "2.3.3" - resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.3.3.tgz#dcce52c05f644f298c6a7ab936bd724ceffbf3a6" + resolved "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz" integrity sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ== dependencies: asynckit "^0.4.0" @@ -1200,12 +1196,12 @@ form-data@~2.3.2: forwarded@0.2.0: version "0.2.0" - resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.2.0.tgz#2269936428aad4c15c7ebe9779a84bf0b2a81811" + resolved "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz" integrity sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow== fresh@0.5.2: version "0.5.2" - resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" + resolved "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz" integrity sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q== fs-constants@^1.0.0: @@ -1215,7 +1211,7 @@ fs-constants@^1.0.0: fs-extra@^4.0.2: version "4.0.3" - resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-4.0.3.tgz#0d852122e5bc5beb453fb028e9c0c9bf36340c94" + resolved "https://registry.npmjs.org/fs-extra/-/fs-extra-4.0.3.tgz" integrity sha512-q6rbdDd1o2mAnQreO7YADIxf/Whx4AHBiRf6d+/cVT8h44ss+lHgxf1FemcqDnQt9X3ct4McHr+JMGlYSsK7Cg== dependencies: graceful-fs "^4.1.2" @@ -1224,41 +1220,41 @@ fs-extra@^4.0.2: fs-minipass@^1.2.7: version "1.2.7" - resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-1.2.7.tgz#ccff8570841e7fe4265693da88936c55aed7f7c7" + resolved "https://registry.npmjs.org/fs-minipass/-/fs-minipass-1.2.7.tgz" integrity sha512-GWSSJGFy4e9GUeCcbIkED+bgAoFyj7XF1mV8rma3QW4NIqX9Kyx79N/PF61H5udOV3aY1IaMLs6pGbH71nlCTA== dependencies: minipass "^2.6.0" -function-bind@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" - integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== +function-bind@^1.1.2: + version "1.1.2" + resolved "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz" + integrity sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA== -get-intrinsic@^1.0.2, get-intrinsic@^1.1.3: - version "1.2.1" - resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.2.1.tgz#d295644fed4505fc9cde952c37ee12b477a83d82" - integrity sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw== +get-intrinsic@^1.0.2, get-intrinsic@^1.1.3, get-intrinsic@^1.2.1, get-intrinsic@^1.2.2: + version "1.2.2" + resolved "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.2.tgz" + integrity sha512-0gSo4ml/0j98Y3lngkFEot/zhiCeWsbYIlZ+uZOVgzLyLaUw7wxUL+nCTP0XJvJg1AXulJRI3UJi8GsbDuxdGA== dependencies: - function-bind "^1.1.1" - has "^1.0.3" + function-bind "^1.1.2" has-proto "^1.0.1" has-symbols "^1.0.3" + hasown "^2.0.0" get-stream@^5.1.0: version "5.2.0" - resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-5.2.0.tgz#4966a1795ee5ace65e706c4b7beb71257d6e22d3" + resolved "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz" integrity sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA== dependencies: pump "^3.0.0" get-stream@^6.0.1: version "6.0.1" - resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-6.0.1.tgz#a262d8eef67aced57c2852ad6167526a43cbf7b7" + resolved "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz" integrity sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg== getpass@^0.1.1: version "0.1.7" - resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa" + resolved "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz" integrity sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng== dependencies: assert-plus "^1.0.0" @@ -1270,7 +1266,7 @@ github-from-package@0.0.0: global@~4.4.0: version "4.4.0" - resolved "https://registry.yarnpkg.com/global/-/global-4.4.0.tgz#3e7b105179006a323ed71aafca3e9c57a5cc6406" + resolved "https://registry.npmjs.org/global/-/global-4.4.0.tgz" integrity sha512-wv/LAoHdRE3BeTGz53FAamhGlPLhlssK45usmGFThIi4XqnBmjKQ16u+RNbP7WvigRZDxUsM0J3gcQ5yicaL0w== dependencies: min-document "^2.19.0" @@ -1278,14 +1274,14 @@ global@~4.4.0: gopd@^1.0.1: version "1.0.1" - resolved "https://registry.yarnpkg.com/gopd/-/gopd-1.0.1.tgz#29ff76de69dac7489b7c0918a5788e56477c332c" + resolved "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz" integrity sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA== dependencies: get-intrinsic "^1.1.3" got@12.1.0: version "12.1.0" - resolved "https://registry.yarnpkg.com/got/-/got-12.1.0.tgz#099f3815305c682be4fd6b0ee0726d8e4c6b0af4" + resolved "https://registry.npmjs.org/got/-/got-12.1.0.tgz" integrity sha512-hBv2ty9QN2RdbJJMK3hesmSkFTjVIHyIDDbssCKnSmq62edGgImJWD10Eb1k77TiV1bxloxqcFAVK8+9pkhOig== dependencies: "@sindresorhus/is" "^4.6.0" @@ -1304,7 +1300,7 @@ got@12.1.0: got@^11.8.5: version "11.8.6" - resolved "https://registry.yarnpkg.com/got/-/got-11.8.6.tgz#276e827ead8772eddbcfc97170590b841823233a" + resolved "https://registry.npmjs.org/got/-/got-11.8.6.tgz" integrity sha512-6tfZ91bOr7bOXnK7PRDCGBLa1H4U080YHNaAQ2KsMGlLEzRbk44nsZF2E1IeRc3vtJHPVbKCYgdFbaGO2ljd8g== dependencies: "@sindresorhus/is" "^4.0.0" @@ -1321,49 +1317,49 @@ got@^11.8.5: graceful-fs@^4.1.2, graceful-fs@^4.1.6: version "4.2.11" - resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3" + resolved "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz" integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ== har-schema@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-2.0.0.tgz#a94c2224ebcac04782a0d9035521f24735b7ec92" + resolved "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz" integrity sha512-Oqluz6zhGX8cyRaTQlFMPw80bSJVG2x/cFb8ZPhUILGgHka9SsokCCOQgpveePerqidZOrT14ipqfJb7ILcW5Q== har-validator@~5.1.3: version "5.1.5" - resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-5.1.5.tgz#1f0803b9f8cb20c0fa13822df1ecddb36bde1efd" + resolved "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz" integrity sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w== dependencies: ajv "^6.12.3" har-schema "^2.0.0" +has-property-descriptors@^1.0.0: + version "1.0.1" + resolved "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.1.tgz" + integrity sha512-VsX8eaIewvas0xnvinAe9bw4WfIeODpGYikiWYLH+dma0Jw6KHYqWiWfhQlgOVK8D6PvjubK5Uc4P0iIhIcNVg== + dependencies: + get-intrinsic "^1.2.2" + has-proto@^1.0.1: version "1.0.1" - resolved "https://registry.yarnpkg.com/has-proto/-/has-proto-1.0.1.tgz#1885c1305538958aff469fef37937c22795408e0" + resolved "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz" integrity sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg== has-symbols@^1.0.2, has-symbols@^1.0.3: version "1.0.3" - resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.3.tgz#bb7b2c4349251dce87b125f7bdf874aa7c8b39f8" + resolved "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz" integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A== has-tostringtag@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/has-tostringtag/-/has-tostringtag-1.0.0.tgz#7e133818a7d394734f941e73c3d3f9291e658b25" + resolved "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz" integrity sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ== dependencies: has-symbols "^1.0.2" -has@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" - integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== - dependencies: - function-bind "^1.1.1" - hash-base@^3.0.0: version "3.1.0" - resolved "https://registry.yarnpkg.com/hash-base/-/hash-base-3.1.0.tgz#55c381d9e06e1d2997a883b4a3fddfe7f0d3af33" + resolved "https://registry.npmjs.org/hash-base/-/hash-base-3.1.0.tgz" integrity sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA== dependencies: inherits "^2.0.4" @@ -1372,15 +1368,22 @@ hash-base@^3.0.0: hash.js@1.1.7, hash.js@^1.0.0, hash.js@^1.0.3, hash.js@^1.1.7: version "1.1.7" - resolved "https://registry.yarnpkg.com/hash.js/-/hash.js-1.1.7.tgz#0babca538e8d4ee4a0f8988d68866537a003cf42" + resolved "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz" integrity sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA== dependencies: inherits "^2.0.3" minimalistic-assert "^1.0.1" +hasown@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/hasown/-/hasown-2.0.0.tgz" + integrity sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA== + dependencies: + function-bind "^1.1.2" + hmac-drbg@^1.0.1: version "1.0.1" - resolved "https://registry.yarnpkg.com/hmac-drbg/-/hmac-drbg-1.0.1.tgz#d2745701025a6c775a6c545793ed502fc0c649a1" + resolved "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz" integrity sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg== dependencies: hash.js "^1.0.3" @@ -1389,12 +1392,12 @@ hmac-drbg@^1.0.1: http-cache-semantics@^4.0.0: version "4.1.1" - resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz#abe02fcb2985460bf0323be664436ec3476a6d5a" + resolved "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz" integrity sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ== http-errors@2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-2.0.0.tgz#b7774a1486ef73cf7667ac9ae0858c012c57b9d3" + resolved "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz" integrity sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ== dependencies: depd "2.0.0" @@ -1405,12 +1408,12 @@ http-errors@2.0.0: http-https@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/http-https/-/http-https-1.0.0.tgz#2f908dd5f1db4068c058cd6e6d4ce392c913389b" + resolved "https://registry.npmjs.org/http-https/-/http-https-1.0.0.tgz" integrity sha512-o0PWwVCSp3O0wS6FvNr6xfBCHgt0m1tvPLFOCc2iFDKTRAXhB7m8klDf7ErowFH8POa6dVdGatKU5I1YYwzUyg== http-signature@~1.2.0: version "1.2.0" - resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.2.0.tgz#9aecd925114772f3d95b65a60abb8f7c18fbace1" + resolved "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz" integrity sha512-CAbnr6Rz4CYQkLYUtSNXxQPUH2gK8f3iWexVlsnMeD+GjlsQ0Xsy1cOX+mN3dtxYomRy21CiOzU8Uhw6OwncEQ== dependencies: assert-plus "^1.0.0" @@ -1419,42 +1422,42 @@ http-signature@~1.2.0: http2-wrapper@^1.0.0-beta.5.2: version "1.0.3" - resolved "https://registry.yarnpkg.com/http2-wrapper/-/http2-wrapper-1.0.3.tgz#b8f55e0c1f25d4ebd08b3b0c2c079f9590800b3d" + resolved "https://registry.npmjs.org/http2-wrapper/-/http2-wrapper-1.0.3.tgz" integrity sha512-V+23sDMr12Wnz7iTcDeJr3O6AIxlnvT/bmaAAAP/Xda35C90p9599p0F1eHR/N1KILWSoWVAiOMFjBBXaXSMxg== dependencies: quick-lru "^5.1.1" resolve-alpn "^1.0.0" http2-wrapper@^2.1.10: - version "2.2.0" - resolved "https://registry.yarnpkg.com/http2-wrapper/-/http2-wrapper-2.2.0.tgz#b80ad199d216b7d3680195077bd7b9060fa9d7f3" - integrity sha512-kZB0wxMo0sh1PehyjJUWRFEd99KC5TLjZ2cULC4f9iqJBAmKQQXEICjxl5iPJRwP40dpeHFqqhm7tYCvODpqpQ== + version "2.2.1" + resolved "https://registry.npmjs.org/http2-wrapper/-/http2-wrapper-2.2.1.tgz" + integrity sha512-V5nVw1PAOgfI3Lmeaj2Exmeg7fenjhRUgz1lPSezy1CuhPYbgQtbQj4jZfEAEMlaL+vupsvhjqCyjzob0yxsmQ== dependencies: quick-lru "^5.1.1" resolve-alpn "^1.2.0" iconv-lite@0.4.24: version "0.4.24" - resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" + resolved "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz" integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== dependencies: safer-buffer ">= 2.1.2 < 3" idna-uts46-hx@^2.3.1: version "2.3.1" - resolved "https://registry.yarnpkg.com/idna-uts46-hx/-/idna-uts46-hx-2.3.1.tgz#a1dc5c4df37eee522bf66d969cc980e00e8711f9" + resolved "https://registry.npmjs.org/idna-uts46-hx/-/idna-uts46-hx-2.3.1.tgz" integrity sha512-PWoF9Keq6laYdIRwwCdhTPl60xRqAloYNMQLiyUnG42VjT53oW07BXIRM+NK7eQjzXjAk2gUvX9caRxlnF9TAA== dependencies: punycode "2.1.0" ieee754@^1.1.13: version "1.2.1" - resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" + resolved "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz" integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== inherits@2.0.4, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4: version "2.0.4" - resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" + resolved "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz" integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== ini@~1.3.0: @@ -1464,12 +1467,12 @@ ini@~1.3.0: ipaddr.js@1.9.1: version "1.9.1" - resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.9.1.tgz#bff38543eeb8984825079ff3a2a8e6cbd46781b3" + resolved "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz" integrity sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g== is-arguments@^1.0.4: version "1.1.1" - resolved "https://registry.yarnpkg.com/is-arguments/-/is-arguments-1.1.1.tgz#15b3f88fda01f2a97fec84ca761a560f123efa9b" + resolved "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz" integrity sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA== dependencies: call-bind "^1.0.2" @@ -1477,88 +1480,88 @@ is-arguments@^1.0.4: is-callable@^1.1.3: version "1.2.7" - resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.7.tgz#3bc2a85ea742d9e36205dcacdd72ca1fdc51b055" + resolved "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz" integrity sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA== is-function@^1.0.1: version "1.0.2" - resolved "https://registry.yarnpkg.com/is-function/-/is-function-1.0.2.tgz#4f097f30abf6efadac9833b17ca5dc03f8144e08" + resolved "https://registry.npmjs.org/is-function/-/is-function-1.0.2.tgz" integrity sha512-lw7DUp0aWXYg+CBCN+JKkcE0Q2RayZnSvnZBlwgxHBQhqt5pZNVy4Ri7H9GmmXkdu7LUthszM+Tor1u/2iBcpQ== is-generator-function@^1.0.7: version "1.0.10" - resolved "https://registry.yarnpkg.com/is-generator-function/-/is-generator-function-1.0.10.tgz#f1558baf1ac17e0deea7c0415c438351ff2b3c72" + resolved "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.10.tgz" integrity sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A== dependencies: has-tostringtag "^1.0.0" is-hex-prefixed@1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/is-hex-prefixed/-/is-hex-prefixed-1.0.0.tgz#7d8d37e6ad77e5d127148913c573e082d777f554" + resolved "https://registry.npmjs.org/is-hex-prefixed/-/is-hex-prefixed-1.0.0.tgz" integrity sha512-WvtOiug1VFrE9v1Cydwm+FnXd3+w9GaeVUss5W4v/SLy3UW00vP+6iNF2SdnfiBoLy4bTqVdkftNGTUeOFVsbA== is-typed-array@^1.1.3: version "1.1.12" - resolved "https://registry.yarnpkg.com/is-typed-array/-/is-typed-array-1.1.12.tgz#d0bab5686ef4a76f7a73097b95470ab199c57d4a" + resolved "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.12.tgz" integrity sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg== dependencies: which-typed-array "^1.1.11" is-typedarray@^1.0.0, is-typedarray@~1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" + resolved "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz" integrity sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA== isstream@~0.1.2: version "0.1.2" - resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" + resolved "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz" integrity sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g== js-sha3@0.8.0, js-sha3@^0.8.0: version "0.8.0" - resolved "https://registry.yarnpkg.com/js-sha3/-/js-sha3-0.8.0.tgz#b9b7a5da73afad7dedd0f8c463954cbde6818840" + resolved "https://registry.npmjs.org/js-sha3/-/js-sha3-0.8.0.tgz" integrity sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q== js-sha3@^0.5.7: version "0.5.7" - resolved "https://registry.yarnpkg.com/js-sha3/-/js-sha3-0.5.7.tgz#0d4ffd8002d5333aabaf4a23eed2f6374c9f28e7" + resolved "https://registry.npmjs.org/js-sha3/-/js-sha3-0.5.7.tgz" integrity sha512-GII20kjaPX0zJ8wzkTbNDYMY7msuZcTWk8S5UOh6806Jq/wz1J8/bnr8uGU0DAUmYDjj2Mr4X1cW8v/GLYnR+g== jsbn@~0.1.0: version "0.1.1" - resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" + resolved "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz" integrity sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg== json-buffer@3.0.1: version "3.0.1" - resolved "https://registry.yarnpkg.com/json-buffer/-/json-buffer-3.0.1.tgz#9338802a30d3b6605fbe0613e094008ca8c05a13" + resolved "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz" integrity sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ== json-schema-traverse@^0.4.1: version "0.4.1" - resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" + resolved "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz" integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== json-schema@0.4.0: version "0.4.0" - resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.4.0.tgz#f7de4cf6efab838ebaeb3236474cbba5a1930ab5" + resolved "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz" integrity sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA== json-stringify-safe@~5.0.1: version "5.0.1" - resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" + resolved "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz" integrity sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA== jsonfile@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-4.0.0.tgz#8771aae0799b64076b76640fca058f9c10e33ecb" + resolved "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz" integrity sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg== optionalDependencies: graceful-fs "^4.1.6" jsprim@^1.2.2: version "1.4.2" - resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.2.tgz#712c65533a15c878ba59e9ed5f0e26d5b77c5feb" + resolved "https://registry.npmjs.org/jsprim/-/jsprim-1.4.2.tgz" integrity sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw== dependencies: assert-plus "1.0.0" @@ -1567,29 +1570,29 @@ jsprim@^1.2.2: verror "1.10.0" keccak@^3.0.0: - version "3.0.3" - resolved "https://registry.yarnpkg.com/keccak/-/keccak-3.0.3.tgz#4bc35ad917be1ef54ff246f904c2bbbf9ac61276" - integrity sha512-JZrLIAJWuZxKbCilMpNz5Vj7Vtb4scDG3dMXLOsbzBmQGyjwE61BbW7bJkfKKCShXiQZt3T6sBgALRtmd+nZaQ== + version "3.0.4" + resolved "https://registry.npmjs.org/keccak/-/keccak-3.0.4.tgz" + integrity sha512-3vKuW0jV8J3XNTzvfyicFR5qvxrSAGl7KIhvgOu5cmWwM7tZRj3fMbj/pfIf4be7aznbc+prBWGjywox/g2Y6Q== dependencies: node-addon-api "^2.0.0" node-gyp-build "^4.2.0" readable-stream "^3.6.0" keyv@^4.0.0: - version "4.5.3" - resolved "https://registry.yarnpkg.com/keyv/-/keyv-4.5.3.tgz#00873d2b046df737963157bd04f294ca818c9c25" - integrity sha512-QCiSav9WaX1PgETJ+SpNnx2PRRapJ/oRSXM4VO5OGYGSjrxbKPVFVhB3l2OCbLCk329N8qyAtsJjSjvVBWzEug== + version "4.5.4" + resolved "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz" + integrity sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw== dependencies: json-buffer "3.0.1" lowercase-keys@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-2.0.0.tgz#2603e78b7b4b0006cbca2fbcc8a3202558ac9479" + resolved "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz" integrity sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA== lowercase-keys@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-3.0.0.tgz#c5e7d442e37ead247ae9db117a9d0a467c89d4f2" + resolved "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-3.0.0.tgz" integrity sha512-ozCC6gdQ+glXOQsveKD0YsDy8DSQFjDTz4zyzEHNV5+JP5D62LmfDZ6o1cycFx9ouG940M5dE8C8CTewdj2YWQ== lru-cache@^6.0.0: @@ -1601,12 +1604,12 @@ lru-cache@^6.0.0: make-error@^1.1.1: version "1.3.6" - resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.6.tgz#2eb2e37ea9b67c4891f684a1394799af484cf7a2" + resolved "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz" integrity sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw== md5.js@^1.3.4: version "1.3.5" - resolved "https://registry.yarnpkg.com/md5.js/-/md5.js-1.3.5.tgz#b5d07b8e3216e3e27cd728d72f70d1e6a342005f" + resolved "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz" integrity sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg== dependencies: hash-base "^3.0.0" @@ -1615,66 +1618,66 @@ md5.js@^1.3.4: media-typer@0.3.0: version "0.3.0" - resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" + resolved "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz" integrity sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ== merge-descriptors@1.0.1: version "1.0.1" - resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61" + resolved "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz" integrity sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w== methods@~1.1.2: version "1.1.2" - resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" + resolved "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz" integrity sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w== micro-ftch@^0.3.1: version "0.3.1" - resolved "https://registry.yarnpkg.com/micro-ftch/-/micro-ftch-0.3.1.tgz#6cb83388de4c1f279a034fb0cf96dfc050853c5f" + resolved "https://registry.npmjs.org/micro-ftch/-/micro-ftch-0.3.1.tgz" integrity sha512-/0LLxhzP0tfiR5hcQebtudP56gUurs2CLkGarnCiB/OqEyUFQ6U3paQi/tgLv0hBJYt2rnr9MNpxz4fiiugstg== mime-db@1.52.0: version "1.52.0" - resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70" + resolved "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz" integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== mime-types@^2.1.12, mime-types@^2.1.16, mime-types@~2.1.19, mime-types@~2.1.24, mime-types@~2.1.34: version "2.1.35" - resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a" + resolved "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz" integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== dependencies: mime-db "1.52.0" mime@1.6.0: version "1.6.0" - resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" + resolved "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz" integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg== mimic-response@^1.0.0: version "1.0.1" - resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-1.0.1.tgz#4923538878eef42063cb8a3e3b0798781487ab1b" + resolved "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz" integrity sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ== mimic-response@^3.1.0: version "3.1.0" - resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-3.1.0.tgz#2d1d59af9c1b129815accc2c46a022a5ce1fa3c9" + resolved "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz" integrity sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ== min-document@^2.19.0: version "2.19.0" - resolved "https://registry.yarnpkg.com/min-document/-/min-document-2.19.0.tgz#7bd282e3f5842ed295bb748cdd9f1ffa2c824685" + resolved "https://registry.npmjs.org/min-document/-/min-document-2.19.0.tgz" integrity sha512-9Wy1B3m3f66bPPmU5hdA4DR4PB2OfDU/+GS3yAB7IQozE3tqXaVv2zOjgla7MEGSRv95+ILmOuvhLkOK6wJtCQ== dependencies: dom-walk "^0.1.0" minimalistic-assert@^1.0.0, minimalistic-assert@^1.0.1: version "1.0.1" - resolved "https://registry.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz#2e194de044626d4a10e7f7fbc00ce73e83e4d5c7" + resolved "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz" integrity sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A== minimalistic-crypto-utils@^1.0.1: version "1.0.1" - resolved "https://registry.yarnpkg.com/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz#f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a" + resolved "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz" integrity sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg== minimist@^1.2.0, minimist@^1.2.3, minimist@^1.2.6: @@ -1684,7 +1687,7 @@ minimist@^1.2.0, minimist@^1.2.3, minimist@^1.2.6: minipass@^2.6.0, minipass@^2.9.0: version "2.9.0" - resolved "https://registry.yarnpkg.com/minipass/-/minipass-2.9.0.tgz#e713762e7d3e32fed803115cf93e04bca9fcc9a6" + resolved "https://registry.npmjs.org/minipass/-/minipass-2.9.0.tgz" integrity sha512-wxfUjg9WebH+CUDX/CdbRlh5SmfZiy/hpkxaRI16Y9W56Pa75sWgd/rvFilSgrauD9NyFymP/+JFV3KwzIsJeg== dependencies: safe-buffer "^5.1.2" @@ -1692,7 +1695,7 @@ minipass@^2.6.0, minipass@^2.9.0: minizlib@^1.3.3: version "1.3.3" - resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-1.3.3.tgz#2290de96818a34c29551c8a8d301216bd65a861d" + resolved "https://registry.npmjs.org/minizlib/-/minizlib-1.3.3.tgz" integrity sha512-6ZYMOEnmVsdCeTJVE0W9ZD+pVnE8h9Hma/iOwwRDsdQoePpoX56/8B6z3P9VNwppJuBKNRuFDRNRqRWexT9G9Q== dependencies: minipass "^2.9.0" @@ -1704,41 +1707,41 @@ mkdirp-classic@^0.5.2, mkdirp-classic@^0.5.3: mkdirp-promise@^5.0.1: version "5.0.1" - resolved "https://registry.yarnpkg.com/mkdirp-promise/-/mkdirp-promise-5.0.1.tgz#e9b8f68e552c68a9c1713b84883f7a1dd039b8a1" + resolved "https://registry.npmjs.org/mkdirp-promise/-/mkdirp-promise-5.0.1.tgz" integrity sha512-Hepn5kb1lJPtVW84RFT40YG1OddBNTOVUZR2bzQUHc+Z03en8/3uX0+060JDhcEzyO08HmipsN9DcnFMxhIL9w== dependencies: mkdirp "*" mkdirp@*: version "3.0.1" - resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-3.0.1.tgz#e44e4c5607fb279c168241713cc6e0fea9adcb50" + resolved "https://registry.npmjs.org/mkdirp/-/mkdirp-3.0.1.tgz" integrity sha512-+NsyUUAZDmo6YVHzL/stxSu3t9YS1iljliy3BSDrXJ/dkn1KYdmtZODGGjLcc9XLgVVpH4KshHB8XmZgMhaBXg== mkdirp@^0.5.5: version "0.5.6" - resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.6.tgz#7def03d2432dcae4ba1d611445c48396062255f6" + resolved "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz" integrity sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw== dependencies: minimist "^1.2.6" mock-fs@^4.1.0: version "4.14.0" - resolved "https://registry.yarnpkg.com/mock-fs/-/mock-fs-4.14.0.tgz#ce5124d2c601421255985e6e94da80a7357b1b18" + resolved "https://registry.npmjs.org/mock-fs/-/mock-fs-4.14.0.tgz" integrity sha512-qYvlv/exQ4+svI3UOvPUpLDF0OMX5euvUH0Ny4N5QyRyhNdgAgUrVH3iUINSzEPLvx0kbo/Bp28GJKIqvE7URw== ms@2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" + resolved "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz" integrity sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A== ms@2.1.3: version "2.1.3" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" + resolved "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz" integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== multibase@^0.7.0: version "0.7.0" - resolved "https://registry.yarnpkg.com/multibase/-/multibase-0.7.0.tgz#1adfc1c50abe05eefeb5091ac0c2728d6b84581b" + resolved "https://registry.npmjs.org/multibase/-/multibase-0.7.0.tgz" integrity sha512-TW8q03O0f6PNFTQDvh3xxH03c8CjGaaYrjkl9UQPG6rz53TQzzxJVCIWVjzcbN/Q5Y53Zd0IBQBMVktVgNx4Fg== dependencies: base-x "^3.0.8" @@ -1746,7 +1749,7 @@ multibase@^0.7.0: multibase@~0.6.0: version "0.6.1" - resolved "https://registry.yarnpkg.com/multibase/-/multibase-0.6.1.tgz#b76df6298536cc17b9f6a6db53ec88f85f8cc12b" + resolved "https://registry.npmjs.org/multibase/-/multibase-0.6.1.tgz" integrity sha512-pFfAwyTjbbQgNc3G7D48JkJxWtoJoBMaR4xQUOuB8RnCgRqaYmWNFeJTTvrJ2w51bjLq2zTby6Rqj9TQ9elSUw== dependencies: base-x "^3.0.8" @@ -1754,14 +1757,14 @@ multibase@~0.6.0: multicodec@^0.5.5: version "0.5.7" - resolved "https://registry.yarnpkg.com/multicodec/-/multicodec-0.5.7.tgz#1fb3f9dd866a10a55d226e194abba2dcc1ee9ffd" + resolved "https://registry.npmjs.org/multicodec/-/multicodec-0.5.7.tgz" integrity sha512-PscoRxm3f+88fAtELwUnZxGDkduE2HD9Q6GHUOywQLjOGT/HAdhjLDYNZ1e7VR0s0TP0EwZ16LNUTFpoBGivOA== dependencies: varint "^5.0.0" multicodec@^1.0.0: version "1.0.4" - resolved "https://registry.yarnpkg.com/multicodec/-/multicodec-1.0.4.tgz#46ac064657c40380c28367c90304d8ed175a714f" + resolved "https://registry.npmjs.org/multicodec/-/multicodec-1.0.4.tgz" integrity sha512-NDd7FeS3QamVtbgfvu5h7fd1IlbaC4EQ0/pgU4zqE2vdHCmBGsUa0TiM8/TdSeG6BMPC92OOCf8F1ocE/Wkrrg== dependencies: buffer "^5.6.0" @@ -1769,7 +1772,7 @@ multicodec@^1.0.0: multihashes@^0.4.15, multihashes@~0.4.15: version "0.4.21" - resolved "https://registry.yarnpkg.com/multihashes/-/multihashes-0.4.21.tgz#dc02d525579f334a7909ade8a122dabb58ccfcb5" + resolved "https://registry.npmjs.org/multihashes/-/multihashes-0.4.21.tgz" integrity sha512-uVSvmeCWf36pU2nB4/1kzYZjsXD9vofZKpgudqkceYY5g2aZZXJ5r9lxuzoRLl1OAp28XljXsEJ/X/85ZsKmKw== dependencies: buffer "^5.5.0" @@ -1778,7 +1781,7 @@ multihashes@^0.4.15, multihashes@~0.4.15: nano-json-stream-parser@^0.1.2: version "0.1.2" - resolved "https://registry.yarnpkg.com/nano-json-stream-parser/-/nano-json-stream-parser-0.1.2.tgz#0cc8f6d0e2b622b479c40d499c46d64b755c6f5f" + resolved "https://registry.npmjs.org/nano-json-stream-parser/-/nano-json-stream-parser-0.1.2.tgz" integrity sha512-9MqxMH/BSJC7dnLsEMPyfN5Dvoo49IsPFYMcHw3Bcfc2kN0lpHRBSzlMSVx4HGyJ7s9B31CyBTVehWJoQ8Ctew== napi-build-utils@^1.0.1: @@ -1788,46 +1791,46 @@ napi-build-utils@^1.0.1: negotiator@0.6.3: version "0.6.3" - resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.3.tgz#58e323a72fedc0d6f9cd4d31fe49f51479590ccd" + resolved "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz" integrity sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg== next-tick@^1.1.0: version "1.1.0" - resolved "https://registry.yarnpkg.com/next-tick/-/next-tick-1.1.0.tgz#1836ee30ad56d67ef281b22bd199f709449b35eb" + resolved "https://registry.npmjs.org/next-tick/-/next-tick-1.1.0.tgz" integrity sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ== node-abi@^3.3.0: - version "3.45.0" - resolved "https://registry.yarnpkg.com/node-abi/-/node-abi-3.45.0.tgz#f568f163a3bfca5aacfce1fbeee1fa2cc98441f5" - integrity sha512-iwXuFrMAcFVi/ZoZiqq8BzAdsLw9kxDfTC0HMyjXfSL/6CSDAGD5UmR7azrAgWV1zKYq7dUUMj4owusBWKLsiQ== + version "3.51.0" + resolved "https://registry.yarnpkg.com/node-abi/-/node-abi-3.51.0.tgz#970bf595ef5a26a271307f8a4befa02823d4e87d" + integrity sha512-SQkEP4hmNWjlniS5zdnfIXTk1x7Ome85RDzHlTbBtzE97Gfwz/Ipw4v/Ryk20DWIy3yCNVLVlGKApCnmvYoJbA== dependencies: semver "^7.3.5" node-addon-api@^2.0.0: version "2.0.2" - resolved "https://registry.yarnpkg.com/node-addon-api/-/node-addon-api-2.0.2.tgz#432cfa82962ce494b132e9d72a15b29f71ff5d32" + resolved "https://registry.npmjs.org/node-addon-api/-/node-addon-api-2.0.2.tgz" integrity sha512-Ntyt4AIXyaLIuMHF6IOoTakB3K+RWxwtsHNRxllEoA6vPwP9o4866g6YWDLUdnucilZhmkxiHwHr11gAENw+QA== node-fetch@^2.6.12: version "2.7.0" - resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.7.0.tgz#d0f0fa6e3e2dc1d27efcd8ad99d550bda94d187d" + resolved "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz" integrity sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A== dependencies: whatwg-url "^5.0.0" node-gyp-build@^4.2.0, node-gyp-build@^4.3.0: version "4.6.1" - resolved "https://registry.yarnpkg.com/node-gyp-build/-/node-gyp-build-4.6.1.tgz#24b6d075e5e391b8d5539d98c7fc5c210cac8a3e" + resolved "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.6.1.tgz" integrity sha512-24vnklJmyRS8ViBNI8KbtK/r/DmXQMRiOMXTNz2nrTnAYUwjmEEbnnpB/+kt+yWRv73bPsSPRFddrcIbAxSiMQ== normalize-url@^6.0.1: version "6.1.0" - resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-6.1.0.tgz#40d0885b535deffe3f3147bec877d05fe4c5668a" + resolved "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz" integrity sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A== number-to-bn@1.7.0: version "1.7.0" - resolved "https://registry.yarnpkg.com/number-to-bn/-/number-to-bn-1.7.0.tgz#bb3623592f7e5f9e0030b1977bd41a0c53fe1ea0" + resolved "https://registry.npmjs.org/number-to-bn/-/number-to-bn-1.7.0.tgz" integrity sha512-wsJ9gfSz1/s4ZsJN01lyonwuxA1tml6X1yBDnfpMglypcBRFZZkus26EdPSlqS5GJfYddVZa22p3VNb3z5m5Ig== dependencies: bn.js "4.11.6" @@ -1835,68 +1838,68 @@ number-to-bn@1.7.0: oauth-sign@~0.9.0: version "0.9.0" - resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.9.0.tgz#47a7b016baa68b5fa0ecf3dee08a85c679ac6455" + resolved "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz" integrity sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ== object-assign@^4, object-assign@^4.1.0, object-assign@^4.1.1: version "4.1.1" - resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" + resolved "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz" integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg== object-inspect@^1.9.0: - version "1.12.3" - resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.12.3.tgz#ba62dffd67ee256c8c086dfae69e016cd1f198b9" - integrity sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g== + version "1.13.1" + resolved "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.1.tgz" + integrity sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ== oboe@2.1.5: version "2.1.5" - resolved "https://registry.yarnpkg.com/oboe/-/oboe-2.1.5.tgz#5554284c543a2266d7a38f17e073821fbde393cd" + resolved "https://registry.npmjs.org/oboe/-/oboe-2.1.5.tgz" integrity sha512-zRFWiF+FoicxEs3jNI/WYUrVEgA7DeET/InK0XQuudGHRg8iIob3cNPrJTKaz4004uaA9Pbe+Dwa8iluhjLZWA== dependencies: http-https "^1.0.0" on-finished@2.4.1: version "2.4.1" - resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.4.1.tgz#58c8c44116e54845ad57f14ab10b03533184ac3f" + resolved "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz" integrity sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg== dependencies: ee-first "1.1.1" once@^1.3.1, once@^1.4.0: version "1.4.0" - resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" + resolved "https://registry.npmjs.org/once/-/once-1.4.0.tgz" integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w== dependencies: wrappy "1" p-cancelable@^2.0.0: version "2.1.1" - resolved "https://registry.yarnpkg.com/p-cancelable/-/p-cancelable-2.1.1.tgz#aab7fbd416582fa32a3db49859c122487c5ed2cf" + resolved "https://registry.npmjs.org/p-cancelable/-/p-cancelable-2.1.1.tgz" integrity sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg== p-cancelable@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/p-cancelable/-/p-cancelable-3.0.0.tgz#63826694b54d61ca1c20ebcb6d3ecf5e14cd8050" + resolved "https://registry.npmjs.org/p-cancelable/-/p-cancelable-3.0.0.tgz" integrity sha512-mlVgR3PGuzlo0MmTdk4cXqXWlwQDLnONTAg6sm62XkMJEiRxN3GL3SffkYvqwonbkJBcrI7Uvv5Zh9yjvn2iUw== parse-headers@^2.0.0: version "2.0.5" - resolved "https://registry.yarnpkg.com/parse-headers/-/parse-headers-2.0.5.tgz#069793f9356a54008571eb7f9761153e6c770da9" + resolved "https://registry.npmjs.org/parse-headers/-/parse-headers-2.0.5.tgz" integrity sha512-ft3iAoLOB/MlwbNXgzy43SWGP6sQki2jQvAyBg/zDFAgr9bfNWZIUj42Kw2eJIl8kEi4PbgE6U1Zau/HwI75HA== parseurl@~1.3.3: version "1.3.3" - resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4" + resolved "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz" integrity sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ== path-to-regexp@0.1.7: version "0.1.7" - resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c" + resolved "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz" integrity sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ== pbkdf2@^3.0.17: version "3.1.2" - resolved "https://registry.yarnpkg.com/pbkdf2/-/pbkdf2-3.1.2.tgz#dd822aa0887580e52f1a039dc3eda108efae3075" + resolved "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.2.tgz" integrity sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA== dependencies: create-hash "^1.1.2" @@ -1907,7 +1910,7 @@ pbkdf2@^3.0.17: performance-now@^2.1.0: version "2.1.0" - resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" + resolved "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz" integrity sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow== prebuild-install@^7.1.1: @@ -1930,12 +1933,12 @@ prebuild-install@^7.1.1: process@^0.11.10: version "0.11.10" - resolved "https://registry.yarnpkg.com/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182" + resolved "https://registry.npmjs.org/process/-/process-0.11.10.tgz" integrity sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A== proxy-addr@~2.0.7: version "2.0.7" - resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.7.tgz#f19fe69ceab311eeb94b42e70e8c2070f9ba1025" + resolved "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz" integrity sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg== dependencies: forwarded "0.2.0" @@ -1948,7 +1951,7 @@ psl@^1.1.33: pump@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64" + resolved "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz" integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww== dependencies: end-of-stream "^1.1.0" @@ -1956,29 +1959,29 @@ pump@^3.0.0: punycode@2.1.0: version "2.1.0" - resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.0.tgz#5f863edc89b96db09074bad7947bf09056ca4e7d" + resolved "https://registry.npmjs.org/punycode/-/punycode-2.1.0.tgz" integrity sha512-Yxz2kRwT90aPiWEMHVYnEf4+rhwF1tBmmZ4KepCP+Wkium9JxtWnUm1nqGwpiAHr/tnTSeHqr3wb++jgSkXjhA== punycode@^2.1.0, punycode@^2.1.1: - version "2.3.0" - resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.3.0.tgz#f67fa67c94da8f4d0cfff981aee4118064199b8f" - integrity sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA== + version "2.3.1" + resolved "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz" + integrity sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg== qs@6.11.0: version "6.11.0" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.11.0.tgz#fd0d963446f7a65e1367e01abd85429453f0c37a" + resolved "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz" integrity sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q== dependencies: side-channel "^1.0.4" qs@~6.5.2: version "6.5.3" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.3.tgz#3aeeffc91967ef6e35c0e488ef46fb296ab76aad" + resolved "https://registry.npmjs.org/qs/-/qs-6.5.3.tgz" integrity sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA== query-string@^5.0.1: version "5.1.1" - resolved "https://registry.yarnpkg.com/query-string/-/query-string-5.1.1.tgz#a78c012b71c17e05f2e3fa2319dd330682efb3cb" + resolved "https://registry.npmjs.org/query-string/-/query-string-5.1.1.tgz" integrity sha512-gjWOsm2SoGlgLEdAGt7a6slVOk9mGiXmPFMqrEhLQ68rhQuBnpfs3+EmlvqKyxnCo9/PPlF+9MtY02S1aFg+Jw== dependencies: decode-uri-component "^0.2.0" @@ -1992,24 +1995,24 @@ querystringify@^2.1.1: quick-lru@^5.1.1: version "5.1.1" - resolved "https://registry.yarnpkg.com/quick-lru/-/quick-lru-5.1.1.tgz#366493e6b3e42a3a6885e2e99d18f80fb7a8c932" + resolved "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz" integrity sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA== randombytes@^2.1.0: version "2.1.0" - resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a" + resolved "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz" integrity sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ== dependencies: safe-buffer "^5.1.0" range-parser@~1.2.1: version "1.2.1" - resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031" + resolved "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz" integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg== raw-body@2.5.1: version "2.5.1" - resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.5.1.tgz#fe1b1628b181b700215e5fd42389f98b71392857" + resolved "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz" integrity sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig== dependencies: bytes "3.1.2" @@ -2019,7 +2022,7 @@ raw-body@2.5.1: raw-body@2.5.2: version "2.5.2" - resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.5.2.tgz#99febd83b90e08975087e8f1f9419a149366b68a" + resolved "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz" integrity sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA== dependencies: bytes "3.1.2" @@ -2053,7 +2056,7 @@ reflect-metadata@^0.1.13: request@^2.79.0: version "2.88.2" - resolved "https://registry.yarnpkg.com/request/-/request-2.88.2.tgz#d73c918731cb5a87da047e207234146f664d12b3" + resolved "https://registry.npmjs.org/request/-/request-2.88.2.tgz" integrity sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw== dependencies: aws-sign2 "~0.7.0" @@ -2084,19 +2087,19 @@ requires-port@^1.0.0: resolve-alpn@^1.0.0, resolve-alpn@^1.2.0: version "1.2.1" - resolved "https://registry.yarnpkg.com/resolve-alpn/-/resolve-alpn-1.2.1.tgz#b7adbdac3546aaaec20b45e7d8265927072726f9" + resolved "https://registry.npmjs.org/resolve-alpn/-/resolve-alpn-1.2.1.tgz" integrity sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g== responselike@^2.0.0: version "2.0.1" - resolved "https://registry.yarnpkg.com/responselike/-/responselike-2.0.1.tgz#9a0bc8fdc252f3fb1cca68b016591059ba1422bc" + resolved "https://registry.npmjs.org/responselike/-/responselike-2.0.1.tgz" integrity sha512-4gl03wn3hj1HP3yzgdI7d3lCkF95F21Pz4BPGvKHinyQzALR5CapwC8yIi0Rh58DEMQ/SguC03wFj2k0M/mHhw== dependencies: lowercase-keys "^2.0.0" ripemd160@^2.0.0, ripemd160@^2.0.1: version "2.0.2" - resolved "https://registry.yarnpkg.com/ripemd160/-/ripemd160-2.0.2.tgz#a1c1a6f624751577ba5d07914cbc92850585890c" + resolved "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz" integrity sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA== dependencies: hash-base "^3.0.0" @@ -2104,34 +2107,34 @@ ripemd160@^2.0.0, ripemd160@^2.0.1: rlp@^2.2.4: version "2.2.7" - resolved "https://registry.yarnpkg.com/rlp/-/rlp-2.2.7.tgz#33f31c4afac81124ac4b283e2bd4d9720b30beaf" + resolved "https://registry.npmjs.org/rlp/-/rlp-2.2.7.tgz" integrity sha512-d5gdPmgQ0Z+AklL2NVXr/IoSjNZFfTVvQWzL/AM2AOcSzYP2xjlb0AC8YyCLc41MSNf6P6QVtjgPdmVtzb+4lQ== dependencies: bn.js "^5.2.0" safe-buffer@5.2.1, safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@^5.2.0, safe-buffer@^5.2.1, safe-buffer@~5.2.0: version "5.2.1" - resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" + resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz" integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== safe-buffer@~5.1.0: version "5.1.2" - resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" + resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz" integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== "safer-buffer@>= 2.1.2 < 3", safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@~2.1.0: version "2.1.2" - resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" + resolved "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz" integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== scrypt-js@^3.0.0, scrypt-js@^3.0.1: version "3.0.1" - resolved "https://registry.yarnpkg.com/scrypt-js/-/scrypt-js-3.0.1.tgz#d314a57c2aef69d1ad98a138a21fe9eafa9ee312" + resolved "https://registry.npmjs.org/scrypt-js/-/scrypt-js-3.0.1.tgz" integrity sha512-cdwTTnqPu0Hyvf5in5asVdZocVDTNRmR7XEcJuIzMjJeSHybHl7vpB66AzwTaIg6CLSbtjcxc8fqcySfnTkccA== secp256k1@^4.0.1: version "4.0.3" - resolved "https://registry.yarnpkg.com/secp256k1/-/secp256k1-4.0.3.tgz#c4559ecd1b8d3c1827ed2d1b94190d69ce267303" + resolved "https://registry.npmjs.org/secp256k1/-/secp256k1-4.0.3.tgz" integrity sha512-NLZVf+ROMxwtEj3Xa562qgv2BK5e2WNmXPiOdVIPLgs6lyTzMvBq0aWTYMI5XCP9jZMVKOcqZLw/Wc4vDkuxhA== dependencies: elliptic "^6.5.4" @@ -2139,15 +2142,15 @@ secp256k1@^4.0.1: node-gyp-build "^4.2.0" semver@^7.3.5: - version "7.5.2" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.5.2.tgz#5b851e66d1be07c1cdaf37dfc856f543325a2beb" - integrity sha512-SoftuTROv/cRjCze/scjGyiDtcUyxw1rgYQSZY7XTmtR5hX+dm76iDbTH8TkLPHCQmlbQVSSbNZCPM2hb0knnQ== + version "7.5.4" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.5.4.tgz#483986ec4ed38e1c6c48c34894a9182dbff68a6e" + integrity sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA== dependencies: lru-cache "^6.0.0" send@0.18.0: version "0.18.0" - resolved "https://registry.yarnpkg.com/send/-/send-0.18.0.tgz#670167cc654b05f5aa4a767f9113bb371bc706be" + resolved "https://registry.npmjs.org/send/-/send-0.18.0.tgz" integrity sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg== dependencies: debug "2.6.9" @@ -2166,7 +2169,7 @@ send@0.18.0: serve-static@1.15.0: version "1.15.0" - resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.15.0.tgz#faaef08cffe0a1a62f60cad0c4e513cff0ac9540" + resolved "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz" integrity sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g== dependencies: encodeurl "~1.0.2" @@ -2176,7 +2179,7 @@ serve-static@1.15.0: servify@^0.1.12: version "0.1.12" - resolved "https://registry.yarnpkg.com/servify/-/servify-0.1.12.tgz#142ab7bee1f1d033b66d0707086085b17c06db95" + resolved "https://registry.npmjs.org/servify/-/servify-0.1.12.tgz" integrity sha512-/xE6GvsKKqyo1BAY+KxOWXcLpPsUUyji7Qg3bVD7hh1eRze5bR1uYiuDA/k3Gof1s9BTzQZEJK8sNcNGFIzeWw== dependencies: body-parser "^1.16.0" @@ -2185,19 +2188,29 @@ servify@^0.1.12: request "^2.79.0" xhr "^2.3.3" +set-function-length@^1.1.1: + version "1.1.1" + resolved "https://registry.npmjs.org/set-function-length/-/set-function-length-1.1.1.tgz" + integrity sha512-VoaqjbBJKiWtg4yRcKBQ7g7wnGnLV3M8oLvVWwOk2PdYY6PEFegR1vezXR0tw6fZGF9csVakIRjrJiy2veSBFQ== + dependencies: + define-data-property "^1.1.1" + get-intrinsic "^1.2.1" + gopd "^1.0.1" + has-property-descriptors "^1.0.0" + setimmediate@^1.0.5: version "1.0.5" - resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285" + resolved "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz" integrity sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA== setprototypeof@1.2.0: version "1.2.0" - resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.2.0.tgz#66c9a24a73f9fc28cbe66b09fed3d33dcaf1b424" + resolved "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz" integrity sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw== sha.js@^2.4.0, sha.js@^2.4.8: version "2.4.11" - resolved "https://registry.yarnpkg.com/sha.js/-/sha.js-2.4.11.tgz#37a5cf0b81ecbc6943de109ba2960d1b26584ae7" + resolved "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz" integrity sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ== dependencies: inherits "^2.0.1" @@ -2205,7 +2218,7 @@ sha.js@^2.4.0, sha.js@^2.4.8: side-channel@^1.0.4: version "1.0.4" - resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.4.tgz#efce5c8fdc104ee751b25c58d4290011fa5ea2cf" + resolved "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz" integrity sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw== dependencies: call-bind "^1.0.0" @@ -2214,12 +2227,12 @@ side-channel@^1.0.4: simple-concat@^1.0.0: version "1.0.1" - resolved "https://registry.yarnpkg.com/simple-concat/-/simple-concat-1.0.1.tgz#f46976082ba35c2263f1c8ab5edfe26c41c9552f" + resolved "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz" integrity sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q== simple-get@^2.7.0: version "2.8.2" - resolved "https://registry.yarnpkg.com/simple-get/-/simple-get-2.8.2.tgz#5708fb0919d440657326cd5fe7d2599d07705019" + resolved "https://registry.npmjs.org/simple-get/-/simple-get-2.8.2.tgz" integrity sha512-Ijd/rV5o+mSBBs4F/x9oDPtTx9Zb6X9brmnXvMW4J7IR15ngi9q5xxqWBKU744jTZiaXtxaPL7uHG6vtN8kUkw== dependencies: decompress-response "^3.3.0" @@ -2236,9 +2249,9 @@ simple-get@^4.0.0: simple-concat "^1.0.0" sshpk@^1.7.0: - version "1.17.0" - resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.17.0.tgz#578082d92d4fe612b13007496e543fa0fbcbe4c5" - integrity sha512-/9HIEs1ZXGhSPE8X6Ccm7Nam1z8KcoCqPdI7ecm1N33EzAetWahvQWVqLZtaZQ+IDKX4IyA2o0gBzqIMkAagHQ== + version "1.18.0" + resolved "https://registry.npmjs.org/sshpk/-/sshpk-1.18.0.tgz" + integrity sha512-2p2KJZTSqQ/I3+HX42EpYOa2l3f8Erv8MWKsy2I9uf4wA7yFIkXRffYdsx86y6z4vHtV8u7g+pPlr8/4ouAxsQ== dependencies: asn1 "~0.2.3" assert-plus "^1.0.0" @@ -2252,24 +2265,24 @@ sshpk@^1.7.0: statuses@2.0.1: version "2.0.1" - resolved "https://registry.yarnpkg.com/statuses/-/statuses-2.0.1.tgz#55cb000ccf1d48728bd23c685a063998cf1a1b63" + resolved "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz" integrity sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ== strict-uri-encode@^1.0.0: version "1.1.0" - resolved "https://registry.yarnpkg.com/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz#279b225df1d582b1f54e65addd4352e18faa0713" + resolved "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz" integrity sha512-R3f198pcvnB+5IpnBlRkphuE9n46WyVl8I39W/ZUTZLz4nqSP/oLYUrcnJrw462Ds8he4YKMov2efsTIw1BDGQ== string_decoder@^1.1.1: version "1.3.0" - resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" + resolved "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz" integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== dependencies: safe-buffer "~5.2.0" strip-hex-prefix@1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/strip-hex-prefix/-/strip-hex-prefix-1.0.0.tgz#0c5f155fef1151373377de9dbb588da05500e36f" + resolved "https://registry.npmjs.org/strip-hex-prefix/-/strip-hex-prefix-1.0.0.tgz" integrity sha512-q8d4ue7JGEiVcypji1bALTos+0pWtyGlivAWyPuTkHzuTCJqrK9sWxYQZUq6Nq3cuyv3bm734IhHvHtGGURU6A== dependencies: is-hex-prefixed "1.0.0" @@ -2281,7 +2294,7 @@ strip-json-comments@~2.0.1: swarm-js@^0.1.40: version "0.1.42" - resolved "https://registry.yarnpkg.com/swarm-js/-/swarm-js-0.1.42.tgz#497995c62df6696f6e22372f457120e43e727979" + resolved "https://registry.npmjs.org/swarm-js/-/swarm-js-0.1.42.tgz" integrity sha512-BV7c/dVlA3R6ya1lMlSSNPLYrntt0LUq4YMgy3iwpCIc6rZnS5W2wUoctarZ5pXlpKtxDDf9hNziEkcfrxdhqQ== dependencies: bluebird "^3.5.0" @@ -2319,7 +2332,7 @@ tar-stream@^2.1.4: tar@^4.0.2: version "4.4.19" - resolved "https://registry.yarnpkg.com/tar/-/tar-4.4.19.tgz#2e4d7263df26f2b914dee10c825ab132123742f3" + resolved "https://registry.npmjs.org/tar/-/tar-4.4.19.tgz" integrity sha512-a20gEsvHnWe0ygBY8JbxoM4w3SJdhc7ZAuxkLqh+nvNQN2IOt0B5lLgM490X5Hl8FF0dl0tOf2ewFYAlIFgzVA== dependencies: chownr "^1.1.4" @@ -2332,12 +2345,12 @@ tar@^4.0.2: timed-out@^4.0.1: version "4.0.1" - resolved "https://registry.yarnpkg.com/timed-out/-/timed-out-4.0.1.tgz#f32eacac5a175bea25d7fab565ab3ed8741ef56f" + resolved "https://registry.npmjs.org/timed-out/-/timed-out-4.0.1.tgz" integrity sha512-G7r3AhovYtr5YKOWQkta8RKAPb+J9IsO4uVmzjl8AZwfhs8UcUwTiD6gcJYSgOtzyjvQKrKYn41syHbUWMkafA== toidentifier@1.0.1: version "1.0.1" - resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.1.tgz#3be34321a88a820ed1bd80dfaa33e479fbb8dd35" + resolved "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz" integrity sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA== tough-cookie@^4.1.3, tough-cookie@~2.5.0: @@ -2352,12 +2365,12 @@ tough-cookie@^4.1.3, tough-cookie@~2.5.0: tr46@~0.0.3: version "0.0.3" - resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a" + resolved "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz" integrity sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw== ts-node@^10.9.1: version "10.9.1" - resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-10.9.1.tgz#e73de9102958af9e1f0b168a6ff320e25adcff4b" + resolved "https://registry.npmjs.org/ts-node/-/ts-node-10.9.1.tgz" integrity sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw== dependencies: "@cspotcode/source-map-support" "^0.8.0" @@ -2376,19 +2389,19 @@ ts-node@^10.9.1: tunnel-agent@^0.6.0: version "0.6.0" - resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" + resolved "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz" integrity sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w== dependencies: safe-buffer "^5.0.1" tweetnacl@^0.14.3, tweetnacl@~0.14.0: version "0.14.5" - resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64" + resolved "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz" integrity sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA== type-is@~1.6.18: version "1.6.18" - resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.18.tgz#4e552cd05df09467dcbc4ef739de89f2cf37c131" + resolved "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz" integrity sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g== dependencies: media-typer "0.3.0" @@ -2396,17 +2409,17 @@ type-is@~1.6.18: type@^1.0.1: version "1.2.0" - resolved "https://registry.yarnpkg.com/type/-/type-1.2.0.tgz#848dd7698dafa3e54a6c479e759c4bc3f18847a0" + resolved "https://registry.npmjs.org/type/-/type-1.2.0.tgz" integrity sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg== type@^2.7.2: version "2.7.2" - resolved "https://registry.yarnpkg.com/type/-/type-2.7.2.tgz#2376a15a3a28b1efa0f5350dcf72d24df6ef98d0" + resolved "https://registry.npmjs.org/type/-/type-2.7.2.tgz" integrity sha512-dzlvlNlt6AXU7EBSfpAscydQ7gXB+pPGsPnfJnZpiNJBDj7IaJzQlBZYGdEi4R9HmPdBv2XmWJ6YUtoTa7lmCw== typedarray-to-buffer@^3.1.5: version "3.1.5" - resolved "https://registry.yarnpkg.com/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz#a97ee7a9ff42691b9f783ff1bc5112fe3fca9080" + resolved "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz" integrity sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q== dependencies: is-typedarray "^1.0.0" @@ -2418,12 +2431,17 @@ typescript@^4.6.3, typescript@^4.9.4: ultron@~1.1.0: version "1.1.1" - resolved "https://registry.yarnpkg.com/ultron/-/ultron-1.1.1.tgz#9fe1536a10a664a65266a1e3ccf85fd36302bc9c" + resolved "https://registry.npmjs.org/ultron/-/ultron-1.1.1.tgz" integrity sha512-UIEXBNeYmKptWH6z8ZnqTeS8fV74zG0/eRU9VGkpzz+LIJNs8W/zM/L+7ctCkRrgbNnnR0xxw4bKOr0cW0N0Og== +undici-types@~5.26.4: + version "5.26.5" + resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-5.26.5.tgz#bcd539893d00b56e964fd2657a4866b221a65617" + integrity sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA== + universalify@^0.1.0: version "0.1.2" - resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66" + resolved "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz" integrity sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg== universalify@^0.2.0: @@ -2433,12 +2451,12 @@ universalify@^0.2.0: unpipe@1.0.0, unpipe@~1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" + resolved "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz" integrity sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ== uri-js@^4.2.2: version "4.4.1" - resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e" + resolved "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz" integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg== dependencies: punycode "^2.1.0" @@ -2453,29 +2471,29 @@ url-parse@^1.5.3: url-set-query@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/url-set-query/-/url-set-query-1.0.0.tgz#016e8cfd7c20ee05cafe7795e892bd0702faa339" + resolved "https://registry.npmjs.org/url-set-query/-/url-set-query-1.0.0.tgz" integrity sha512-3AChu4NiXquPfeckE5R5cGdiHCMWJx1dwCWOmWIL4KHAziJNOFIYJlpGFeKDvwLPHovZRCxK3cYlwzqI9Vp+Gg== utf-8-validate@^5.0.2: version "5.0.10" - resolved "https://registry.yarnpkg.com/utf-8-validate/-/utf-8-validate-5.0.10.tgz#d7d10ea39318171ca982718b6b96a8d2442571a2" + resolved "https://registry.npmjs.org/utf-8-validate/-/utf-8-validate-5.0.10.tgz" integrity sha512-Z6czzLq4u8fPOyx7TU6X3dvUZVvoJmxSQ+IcrlmagKhilxlhZgxPK6C5Jqbkw1IDUmFTM+cz9QDnnLTwDz/2gQ== dependencies: node-gyp-build "^4.3.0" utf8@3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/utf8/-/utf8-3.0.0.tgz#f052eed1364d696e769ef058b183df88c87f69d1" + resolved "https://registry.npmjs.org/utf8/-/utf8-3.0.0.tgz" integrity sha512-E8VjFIQ/TyQgp+TZfS6l8yp/xWppSAHzidGiRrqe4bK4XP9pTRyKFgGJpO3SN7zdX4DeomTrwaseCHovfpFcqQ== util-deprecate@^1.0.1: version "1.0.2" - resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" + resolved "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz" integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw== util@^0.12.5: version "0.12.5" - resolved "https://registry.yarnpkg.com/util/-/util-0.12.5.tgz#5f17a6059b73db61a875668781a1c2b136bd6fbc" + resolved "https://registry.npmjs.org/util/-/util-0.12.5.tgz" integrity sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA== dependencies: inherits "^2.0.3" @@ -2486,250 +2504,250 @@ util@^0.12.5: utils-merge@1.0.1: version "1.0.1" - resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" + resolved "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz" integrity sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA== uuid@^3.3.2: version "3.4.0" - resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.4.0.tgz#b23e4358afa8a202fe7a100af1f5f883f02007ee" + resolved "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz" integrity sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A== uuid@^9.0.0: - version "9.0.0" - resolved "https://registry.yarnpkg.com/uuid/-/uuid-9.0.0.tgz#592f550650024a38ceb0c562f2f6aa435761efb5" - integrity sha512-MXcSTerfPa4uqyzStbRoTgt5XIe3x5+42+q1sDuy3R5MDk66URdLMOZe5aPX/SQd+kuYAh0FdP/pO28IkQyTeg== + version "9.0.1" + resolved "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz" + integrity sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA== v8-compile-cache-lib@^3.0.1: version "3.0.1" - resolved "https://registry.yarnpkg.com/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz#6336e8d71965cb3d35a1bbb7868445a7c05264bf" + resolved "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz" integrity sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg== varint@^5.0.0: version "5.0.2" - resolved "https://registry.yarnpkg.com/varint/-/varint-5.0.2.tgz#5b47f8a947eb668b848e034dcfa87d0ff8a7f7a4" + resolved "https://registry.npmjs.org/varint/-/varint-5.0.2.tgz" integrity sha512-lKxKYG6H03yCZUpAGOPOsMcGxd1RHCu1iKvEHYDPmTyq2HueGhD73ssNBqqQWfvYs04G9iUFRvmAVLW20Jw6ow== vary@^1, vary@~1.1.2: version "1.1.2" - resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" + resolved "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz" integrity sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg== verror@1.10.0: version "1.10.0" - resolved "https://registry.yarnpkg.com/verror/-/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400" + resolved "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz" integrity sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw== dependencies: assert-plus "^1.0.0" core-util-is "1.0.2" extsprintf "^1.2.0" -web3-bzz@1.10.2: - version "1.10.2" - resolved "https://registry.yarnpkg.com/web3-bzz/-/web3-bzz-1.10.2.tgz#482dfddcc5f65d5877b37cc20775725220b4ad87" - integrity sha512-vLOfDCj6198Qc7esDrCKeFA/M3ZLbowsaHQ0hIL4NmIHoq7lU8aSRTa5AI+JBh8cKN1gVryJsuW2ZCc5bM4I4Q== +web3-bzz@1.10.3: + version "1.10.3" + resolved "https://registry.npmjs.org/web3-bzz/-/web3-bzz-1.10.3.tgz" + integrity sha512-XDIRsTwekdBXtFytMpHBuun4cK4x0ZMIDXSoo1UVYp+oMyZj07c7gf7tNQY5qZ/sN+CJIas4ilhN25VJcjSijQ== dependencies: "@types/node" "^12.12.6" got "12.1.0" swarm-js "^0.1.40" -web3-core-helpers@1.10.2: - version "1.10.2" - resolved "https://registry.yarnpkg.com/web3-core-helpers/-/web3-core-helpers-1.10.2.tgz#bd47686c0e74ef4475713c581f9306a035ce8a74" - integrity sha512-1JfaNtox6/ZYJHNoI+QVc2ObgwEPeGF+YdxHZQ7aF5605BmlwM1Bk3A8xv6mg64jIRvEq1xX6k9oG6x7p1WgXQ== +web3-core-helpers@1.10.3: + version "1.10.3" + resolved "https://registry.npmjs.org/web3-core-helpers/-/web3-core-helpers-1.10.3.tgz" + integrity sha512-Yv7dQC3B9ipOc5sWm3VAz1ys70Izfzb8n9rSiQYIPjpqtJM+3V4EeK6ghzNR6CO2es0+Yu9CtCkw0h8gQhrTxA== dependencies: - web3-eth-iban "1.10.2" - web3-utils "1.10.2" + web3-eth-iban "1.10.3" + web3-utils "1.10.3" -web3-core-method@1.10.2: - version "1.10.2" - resolved "https://registry.yarnpkg.com/web3-core-method/-/web3-core-method-1.10.2.tgz#4adf3f8c8d0776f0f320e583b791955c41037971" - integrity sha512-gG6ES+LOuo01MJHML4gnEt702M8lcPGMYZoX8UjZzmEebGrPYOY9XccpCrsFgCeKgQzM12SVnlwwpMod1+lcLg== +web3-core-method@1.10.3: + version "1.10.3" + resolved "https://registry.npmjs.org/web3-core-method/-/web3-core-method-1.10.3.tgz" + integrity sha512-VZ/Dmml4NBmb0ep5PTSg9oqKoBtG0/YoMPei/bq/tUdlhB2dMB79sbeJPwx592uaV0Vpk7VltrrrBv5hTM1y4Q== dependencies: "@ethersproject/transactions" "^5.6.2" - web3-core-helpers "1.10.2" - web3-core-promievent "1.10.2" - web3-core-subscriptions "1.10.2" - web3-utils "1.10.2" + web3-core-helpers "1.10.3" + web3-core-promievent "1.10.3" + web3-core-subscriptions "1.10.3" + web3-utils "1.10.3" -web3-core-promievent@1.10.2: - version "1.10.2" - resolved "https://registry.yarnpkg.com/web3-core-promievent/-/web3-core-promievent-1.10.2.tgz#13b380b69ee05c5bf075836be64c2f3b8bdc1a5f" - integrity sha512-Qkkb1dCDOU8dZeORkcwJBQRAX+mdsjx8LqFBB+P4W9QgwMqyJ6LXda+y1XgyeEVeKEmY1RCeTq9Y94q1v62Sfw== +web3-core-promievent@1.10.3: + version "1.10.3" + resolved "https://registry.npmjs.org/web3-core-promievent/-/web3-core-promievent-1.10.3.tgz" + integrity sha512-HgjY+TkuLm5uTwUtaAfkTgRx/NzMxvVradCi02gy17NxDVdg/p6svBHcp037vcNpkuGeFznFJgULP+s2hdVgUQ== dependencies: eventemitter3 "4.0.4" -web3-core-requestmanager@1.10.2: - version "1.10.2" - resolved "https://registry.yarnpkg.com/web3-core-requestmanager/-/web3-core-requestmanager-1.10.2.tgz#f5b1264c6470c033f08e21210b0af0c23497c68a" - integrity sha512-nlLeNJUu6fR+ZbJr2k9Du/nN3VWwB4AJPY4r6nxUODAmykgJq57T21cLP/BEk6mbiFQYGE9TrrPhh4qWxQEtAw== +web3-core-requestmanager@1.10.3: + version "1.10.3" + resolved "https://registry.npmjs.org/web3-core-requestmanager/-/web3-core-requestmanager-1.10.3.tgz" + integrity sha512-VT9sKJfgM2yBOIxOXeXiDuFMP4pxzF6FT+y8KTLqhDFHkbG3XRe42Vm97mB/IvLQCJOmokEjl3ps8yP1kbggyw== dependencies: util "^0.12.5" - web3-core-helpers "1.10.2" - web3-providers-http "1.10.2" - web3-providers-ipc "1.10.2" - web3-providers-ws "1.10.2" + web3-core-helpers "1.10.3" + web3-providers-http "1.10.3" + web3-providers-ipc "1.10.3" + web3-providers-ws "1.10.3" -web3-core-subscriptions@1.10.2: - version "1.10.2" - resolved "https://registry.yarnpkg.com/web3-core-subscriptions/-/web3-core-subscriptions-1.10.2.tgz#d325483141ab1406241d6707b86fd6944e4b7ea6" - integrity sha512-MiWcKjz4tco793EPPPLc/YOJmYUV3zAfxeQH/UVTfBejMfnNvmfwKa2SBKfPIvKQHz/xI5bV2TF15uvJEucU7w== +web3-core-subscriptions@1.10.3: + version "1.10.3" + resolved "https://registry.npmjs.org/web3-core-subscriptions/-/web3-core-subscriptions-1.10.3.tgz" + integrity sha512-KW0Mc8sgn70WadZu7RjQ4H5sNDJ5Lx8JMI3BWos+f2rW0foegOCyWhRu33W1s6ntXnqeBUw5rRCXZRlA3z+HNA== dependencies: eventemitter3 "4.0.4" - web3-core-helpers "1.10.2" + web3-core-helpers "1.10.3" -web3-core@1.10.2: - version "1.10.2" - resolved "https://registry.yarnpkg.com/web3-core/-/web3-core-1.10.2.tgz#464a15335b3adecc4a1cdd53c89b995769059f03" - integrity sha512-qTn2UmtE8tvwMRsC5pXVdHxrQ4uZ6jiLgF5DRUVtdi7dPUmX18Dp9uxKfIfhGcA011EAn8P6+X7r3pvi2YRxBw== +web3-core@1.10.3: + version "1.10.3" + resolved "https://registry.npmjs.org/web3-core/-/web3-core-1.10.3.tgz" + integrity sha512-Vbk0/vUNZxJlz3RFjAhNNt7qTpX8yE3dn3uFxfX5OHbuon5u65YEOd3civ/aQNW745N0vGUlHFNxxmn+sG9DIw== dependencies: "@types/bn.js" "^5.1.1" "@types/node" "^12.12.6" bignumber.js "^9.0.0" - web3-core-helpers "1.10.2" - web3-core-method "1.10.2" - web3-core-requestmanager "1.10.2" - web3-utils "1.10.2" + web3-core-helpers "1.10.3" + web3-core-method "1.10.3" + web3-core-requestmanager "1.10.3" + web3-utils "1.10.3" -web3-eth-abi@1.10.2: - version "1.10.2" - resolved "https://registry.yarnpkg.com/web3-eth-abi/-/web3-eth-abi-1.10.2.tgz#65db4af1acb0b72cb9d10cd6f045a8bcdb270b1b" - integrity sha512-pY4fQUio7W7ZRSLf+vsYkaxJqaT/jHcALZjIxy+uBQaYAJ3t6zpQqMZkJB3Dw7HUODRJ1yI0NPEFGTnkYf/17A== +web3-eth-abi@1.10.3: + version "1.10.3" + resolved "https://registry.npmjs.org/web3-eth-abi/-/web3-eth-abi-1.10.3.tgz" + integrity sha512-O8EvV67uhq0OiCMekqYsDtb6FzfYzMXT7VMHowF8HV6qLZXCGTdB/NH4nJrEh2mFtEwVdS6AmLFJAQd2kVyoMQ== dependencies: "@ethersproject/abi" "^5.6.3" - web3-utils "1.10.2" + web3-utils "1.10.3" -web3-eth-accounts@1.10.2: - version "1.10.2" - resolved "https://registry.yarnpkg.com/web3-eth-accounts/-/web3-eth-accounts-1.10.2.tgz#5ce9e4de0f84a88e72801810b98cc25164956404" - integrity sha512-6/HhCBYAXN/f553/SyxS9gY62NbLgpD1zJpENcvRTDpJN3Znvli1cmpl5Q3ZIUJkvHnG//48EWfWh0cbb3fbKQ== +web3-eth-accounts@1.10.3: + version "1.10.3" + resolved "https://registry.npmjs.org/web3-eth-accounts/-/web3-eth-accounts-1.10.3.tgz" + integrity sha512-8MipGgwusDVgn7NwKOmpeo3gxzzd+SmwcWeBdpXknuyDiZSQy9tXe+E9LeFGrmys/8mLLYP79n3jSbiTyv+6pQ== dependencies: - "@ethereumjs/common" "2.5.0" - "@ethereumjs/tx" "3.3.2" + "@ethereumjs/common" "2.6.5" + "@ethereumjs/tx" "3.5.2" "@ethereumjs/util" "^8.1.0" eth-lib "0.2.8" scrypt-js "^3.0.1" uuid "^9.0.0" - web3-core "1.10.2" - web3-core-helpers "1.10.2" - web3-core-method "1.10.2" - web3-utils "1.10.2" + web3-core "1.10.3" + web3-core-helpers "1.10.3" + web3-core-method "1.10.3" + web3-utils "1.10.3" -web3-eth-contract@1.10.2: - version "1.10.2" - resolved "https://registry.yarnpkg.com/web3-eth-contract/-/web3-eth-contract-1.10.2.tgz#9114c52ba5ca5859f3403abea69a13f8678828ad" - integrity sha512-CZLKPQRmupP/+OZ5A/CBwWWkBiz5B/foOpARz0upMh1yjb0dEud4YzRW2gJaeNu0eGxDLsWVaXhUimJVGYprQw== +web3-eth-contract@1.10.3: + version "1.10.3" + resolved "https://registry.npmjs.org/web3-eth-contract/-/web3-eth-contract-1.10.3.tgz" + integrity sha512-Y2CW61dCCyY4IoUMD4JsEQWrILX4FJWDWC/Txx/pr3K/+fGsBGvS9kWQN5EsVXOp4g7HoFOfVh9Lf7BmVVSRmg== dependencies: "@types/bn.js" "^5.1.1" - web3-core "1.10.2" - web3-core-helpers "1.10.2" - web3-core-method "1.10.2" - web3-core-promievent "1.10.2" - web3-core-subscriptions "1.10.2" - web3-eth-abi "1.10.2" - web3-utils "1.10.2" - -web3-eth-ens@1.10.2: - version "1.10.2" - resolved "https://registry.yarnpkg.com/web3-eth-ens/-/web3-eth-ens-1.10.2.tgz#5708e1830ab261b139882cc43662afb3a733112e" - integrity sha512-kTQ42UdNHy4BQJHgWe97bHNMkc3zCMBKKY7t636XOMxdI/lkRdIjdE5nQzt97VjQvSVasgIWYKRAtd8aRaiZiQ== + web3-core "1.10.3" + web3-core-helpers "1.10.3" + web3-core-method "1.10.3" + web3-core-promievent "1.10.3" + web3-core-subscriptions "1.10.3" + web3-eth-abi "1.10.3" + web3-utils "1.10.3" + +web3-eth-ens@1.10.3: + version "1.10.3" + resolved "https://registry.npmjs.org/web3-eth-ens/-/web3-eth-ens-1.10.3.tgz" + integrity sha512-hR+odRDXGqKemw1GFniKBEXpjYwLgttTES+bc7BfTeoUyUZXbyDHe5ifC+h+vpzxh4oS0TnfcIoarK0Z9tFSiQ== dependencies: content-hash "^2.5.2" eth-ens-namehash "2.0.8" - web3-core "1.10.2" - web3-core-helpers "1.10.2" - web3-core-promievent "1.10.2" - web3-eth-abi "1.10.2" - web3-eth-contract "1.10.2" - web3-utils "1.10.2" - -web3-eth-iban@1.10.2: - version "1.10.2" - resolved "https://registry.yarnpkg.com/web3-eth-iban/-/web3-eth-iban-1.10.2.tgz#f8e668034834c5be038adeb14c39b923e9257558" - integrity sha512-y8+Ii2XXdyHQMFNL2NWpBnXe+TVJ4ryvPlzNhObRRnIo4O4nLIXS010olLDMayozDzoUlmzCmBZJYc9Eev1g7A== + web3-core "1.10.3" + web3-core-helpers "1.10.3" + web3-core-promievent "1.10.3" + web3-eth-abi "1.10.3" + web3-eth-contract "1.10.3" + web3-utils "1.10.3" + +web3-eth-iban@1.10.3: + version "1.10.3" + resolved "https://registry.npmjs.org/web3-eth-iban/-/web3-eth-iban-1.10.3.tgz" + integrity sha512-ZCfOjYKAjaX2TGI8uif5ah+J3BYFuo+47JOIV1RIz2l7kD9VfnxvRH5UiQDRyMALQC7KFd2hUqIEtHklapNyKA== dependencies: bn.js "^5.2.1" - web3-utils "1.10.2" + web3-utils "1.10.3" -web3-eth-personal@1.10.2: - version "1.10.2" - resolved "https://registry.yarnpkg.com/web3-eth-personal/-/web3-eth-personal-1.10.2.tgz#a281cc1cecb2f3243ac0467c075a1579fa562901" - integrity sha512-+vEbJsPUJc5J683y0c2aN645vXC+gPVlFVCQu4IjPvXzJrAtUfz26+IZ6AUOth4fDJPT0f1uSLS5W2yrUdw9BQ== +web3-eth-personal@1.10.3: + version "1.10.3" + resolved "https://registry.npmjs.org/web3-eth-personal/-/web3-eth-personal-1.10.3.tgz" + integrity sha512-avrQ6yWdADIvuNQcFZXmGLCEzulQa76hUOuVywN7O3cklB4nFc/Gp3yTvD3bOAaE7DhjLQfhUTCzXL7WMxVTsw== dependencies: "@types/node" "^12.12.6" - web3-core "1.10.2" - web3-core-helpers "1.10.2" - web3-core-method "1.10.2" - web3-net "1.10.2" - web3-utils "1.10.2" - -web3-eth@1.10.2: - version "1.10.2" - resolved "https://registry.yarnpkg.com/web3-eth/-/web3-eth-1.10.2.tgz#46baa0d8a1203b425f77ac2cf823fbb73666fcb9" - integrity sha512-s38rhrntyhGShmXC4R/aQtfkpcmev9c7iZwgb9CDIBFo7K8nrEJvqIOyajeZTxnDIiGzTJmrHxiKSadii5qTRg== - dependencies: - web3-core "1.10.2" - web3-core-helpers "1.10.2" - web3-core-method "1.10.2" - web3-core-subscriptions "1.10.2" - web3-eth-abi "1.10.2" - web3-eth-accounts "1.10.2" - web3-eth-contract "1.10.2" - web3-eth-ens "1.10.2" - web3-eth-iban "1.10.2" - web3-eth-personal "1.10.2" - web3-net "1.10.2" - web3-utils "1.10.2" - -web3-net@1.10.2: - version "1.10.2" - resolved "https://registry.yarnpkg.com/web3-net/-/web3-net-1.10.2.tgz#77f39dea930619035d3bf99969941870f2f0c550" - integrity sha512-w9i1t2z7dItagfskhaCKwpp6W3ylUR88gs68u820y5f8yfK5EbPmHc6c2lD8X9ZrTnmDoeOpIRCN/RFPtZCp+g== - dependencies: - web3-core "1.10.2" - web3-core-method "1.10.2" - web3-utils "1.10.2" - -web3-providers-http@1.10.2: - version "1.10.2" - resolved "https://registry.yarnpkg.com/web3-providers-http/-/web3-providers-http-1.10.2.tgz#8bd54b5bc5bcc50612fd52af65bd773f926045f7" - integrity sha512-G8abKtpkyKGpRVKvfjIF3I4O/epHP7mxXWN8mNMQLkQj1cjMFiZBZ13f+qI77lNJN7QOf6+LtNdKrhsTGU72TA== + web3-core "1.10.3" + web3-core-helpers "1.10.3" + web3-core-method "1.10.3" + web3-net "1.10.3" + web3-utils "1.10.3" + +web3-eth@1.10.3: + version "1.10.3" + resolved "https://registry.npmjs.org/web3-eth/-/web3-eth-1.10.3.tgz" + integrity sha512-Uk1U2qGiif2mIG8iKu23/EQJ2ksB1BQXy3wF3RvFuyxt8Ft9OEpmGlO7wOtAyJdoKzD5vcul19bJpPcWSAYZhA== + dependencies: + web3-core "1.10.3" + web3-core-helpers "1.10.3" + web3-core-method "1.10.3" + web3-core-subscriptions "1.10.3" + web3-eth-abi "1.10.3" + web3-eth-accounts "1.10.3" + web3-eth-contract "1.10.3" + web3-eth-ens "1.10.3" + web3-eth-iban "1.10.3" + web3-eth-personal "1.10.3" + web3-net "1.10.3" + web3-utils "1.10.3" + +web3-net@1.10.3: + version "1.10.3" + resolved "https://registry.npmjs.org/web3-net/-/web3-net-1.10.3.tgz" + integrity sha512-IoSr33235qVoI1vtKssPUigJU9Fc/Ph0T9CgRi15sx+itysmvtlmXMNoyd6Xrgm9LuM4CIhxz7yDzH93B79IFg== + dependencies: + web3-core "1.10.3" + web3-core-method "1.10.3" + web3-utils "1.10.3" + +web3-providers-http@1.10.3: + version "1.10.3" + resolved "https://registry.npmjs.org/web3-providers-http/-/web3-providers-http-1.10.3.tgz" + integrity sha512-6dAgsHR3MxJ0Qyu3QLFlQEelTapVfWNTu5F45FYh8t7Y03T1/o+YAkVxsbY5AdmD+y5bXG/XPJ4q8tjL6MgZHw== dependencies: abortcontroller-polyfill "^1.7.5" cross-fetch "^4.0.0" es6-promise "^4.2.8" - web3-core-helpers "1.10.2" + web3-core-helpers "1.10.3" -web3-providers-ipc@1.10.2: - version "1.10.2" - resolved "https://registry.yarnpkg.com/web3-providers-ipc/-/web3-providers-ipc-1.10.2.tgz#4314a04c1d68f5d1cb2d047d027db97c85f921f7" - integrity sha512-lWbn6c+SgvhLymU8u4Ea/WOVC0Gqs7OJUvauejWz+iLycxeF0xFNyXnHVAi42ZJDPVI3vnfZotafoxcNNL7Sug== +web3-providers-ipc@1.10.3: + version "1.10.3" + resolved "https://registry.npmjs.org/web3-providers-ipc/-/web3-providers-ipc-1.10.3.tgz" + integrity sha512-vP5WIGT8FLnGRfswTxNs9rMfS1vCbMezj/zHbBe/zB9GauBRTYVrUo2H/hVrhLg8Ut7AbsKZ+tCJ4mAwpKi2hA== dependencies: oboe "2.1.5" - web3-core-helpers "1.10.2" + web3-core-helpers "1.10.3" -web3-providers-ws@1.10.2: - version "1.10.2" - resolved "https://registry.yarnpkg.com/web3-providers-ws/-/web3-providers-ws-1.10.2.tgz#00bf6e00080dd82b8ad7fbed657a6d20ecc532de" - integrity sha512-3nYSiP6grI5GvpkSoehctSywfCTodU21VY8bUtXyFHK/IVfDooNtMpd5lVIMvXVAlaxwwrCfjebokaJtKH2Iag== +web3-providers-ws@1.10.3: + version "1.10.3" + resolved "https://registry.npmjs.org/web3-providers-ws/-/web3-providers-ws-1.10.3.tgz" + integrity sha512-/filBXRl48INxsh6AuCcsy4v5ndnTZ/p6bl67kmO9aK1wffv7CT++DrtclDtVMeDGCgB3van+hEf9xTAVXur7Q== dependencies: eventemitter3 "4.0.4" - web3-core-helpers "1.10.2" + web3-core-helpers "1.10.3" websocket "^1.0.32" -web3-shh@1.10.2: - version "1.10.2" - resolved "https://registry.yarnpkg.com/web3-shh/-/web3-shh-1.10.2.tgz#2a41e1a308de5320d1f17080765206b727aa669e" - integrity sha512-UP0Kc3pHv9uULFu0+LOVfPwKBSJ6B+sJ5KflF7NyBk6TvNRxlpF3hUhuaVDCjjB/dDUR6T0EQeg25FA2uzJbag== +web3-shh@1.10.3: + version "1.10.3" + resolved "https://registry.npmjs.org/web3-shh/-/web3-shh-1.10.3.tgz" + integrity sha512-cAZ60CPvs9azdwMSQ/PSUdyV4PEtaW5edAZhu3rCXf6XxQRliBboic+AvwUvB6j3eswY50VGa5FygfVmJ1JVng== dependencies: - web3-core "1.10.2" - web3-core-method "1.10.2" - web3-core-subscriptions "1.10.2" - web3-net "1.10.2" + web3-core "1.10.3" + web3-core-method "1.10.3" + web3-core-subscriptions "1.10.3" + web3-net "1.10.3" -web3-utils@1.10.2: - version "1.10.2" - resolved "https://registry.yarnpkg.com/web3-utils/-/web3-utils-1.10.2.tgz#361103d28a94d5e2a87ba15d776a62c33303eb44" - integrity sha512-TdApdzdse5YR+5GCX/b/vQnhhbj1KSAtfrDtRW7YS0kcWp1gkJsN62gw6GzCaNTeXookB7UrLtmDUuMv65qgow== +web3-utils@1.10.3: + version "1.10.3" + resolved "https://registry.npmjs.org/web3-utils/-/web3-utils-1.10.3.tgz" + integrity sha512-OqcUrEE16fDBbGoQtZXWdavsPzbGIDc5v3VrRTZ0XrIpefC/viZ1ZU9bGEemazyS0catk/3rkOOxpzTfY+XsyQ== dependencies: "@ethereumjs/util" "^8.1.0" bn.js "^5.2.1" @@ -2741,26 +2759,26 @@ web3-utils@1.10.2: utf8 "3.0.0" web3@^1.10.0: - version "1.10.2" - resolved "https://registry.yarnpkg.com/web3/-/web3-1.10.2.tgz#5b7e165b396fb0bea501cef4d5ce754aebad5b73" - integrity sha512-DAtZ3a3ruPziE80uZ3Ob0YDZxt6Vk2un/F5BcBrxO70owJ9Z1Y2+loZmbh1MoAmoLGjA/SUSHeUtid3fYmBaog== - dependencies: - web3-bzz "1.10.2" - web3-core "1.10.2" - web3-eth "1.10.2" - web3-eth-personal "1.10.2" - web3-net "1.10.2" - web3-shh "1.10.2" - web3-utils "1.10.2" + version "1.10.3" + resolved "https://registry.npmjs.org/web3/-/web3-1.10.3.tgz" + integrity sha512-DgUdOOqC/gTqW+VQl1EdPxrVRPB66xVNtuZ5KD4adVBtko87hkgM8BTZ0lZ8IbUfnQk6DyjcDujMiH3oszllAw== + dependencies: + web3-bzz "1.10.3" + web3-core "1.10.3" + web3-eth "1.10.3" + web3-eth-personal "1.10.3" + web3-net "1.10.3" + web3-shh "1.10.3" + web3-utils "1.10.3" webidl-conversions@^3.0.0: version "3.0.1" - resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871" + resolved "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz" integrity sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ== websocket@^1.0.32: version "1.0.34" - resolved "https://registry.yarnpkg.com/websocket/-/websocket-1.0.34.tgz#2bdc2602c08bf2c82253b730655c0ef7dcab3111" + resolved "https://registry.npmjs.org/websocket/-/websocket-1.0.34.tgz" integrity sha512-PRDso2sGwF6kM75QykIesBijKSVceR6jL2G8NGYyq2XrItNC2P5/qL5XeR056GhA+Ly7JMFvJb9I312mJfmqnQ== dependencies: bufferutil "^4.0.1" @@ -2772,31 +2790,31 @@ websocket@^1.0.32: whatwg-url@^5.0.0: version "5.0.0" - resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-5.0.0.tgz#966454e8765462e37644d3626f6742ce8b70965d" + resolved "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz" integrity sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw== dependencies: tr46 "~0.0.3" webidl-conversions "^3.0.0" which-typed-array@^1.1.11, which-typed-array@^1.1.2: - version "1.1.11" - resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.11.tgz#99d691f23c72aab6768680805a271b69761ed61a" - integrity sha512-qe9UWWpkeG5yzZ0tNYxDmd7vo58HDBc39mZ0xWWpolAGADdFOzkfamWLDxkOWcvHQKVmdTyQdLD4NOfjLWTKew== + version "1.1.13" + resolved "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.13.tgz" + integrity sha512-P5Nra0qjSncduVPEAr7xhoF5guty49ArDTwzJ/yNuPIbZppyRxFQsRCWrocxIY+CnMVG+qfbU2FmDKyvSGClow== dependencies: available-typed-arrays "^1.0.5" - call-bind "^1.0.2" + call-bind "^1.0.4" for-each "^0.3.3" gopd "^1.0.1" has-tostringtag "^1.0.0" wrappy@1: version "1.0.2" - resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" + resolved "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz" integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== ws@^3.0.0: version "3.3.3" - resolved "https://registry.yarnpkg.com/ws/-/ws-3.3.3.tgz#f1cf84fe2d5e901ebce94efaece785f187a228f2" + resolved "https://registry.npmjs.org/ws/-/ws-3.3.3.tgz" integrity sha512-nnWLa/NwZSt4KQJu51MYlCcSQ5g7INpOrOMt4XV8j4dqTXdmlUmSHQ8/oLC069ckre0fRsgfvsKwbTdtKLCDkA== dependencies: async-limiter "~1.0.0" @@ -2805,14 +2823,14 @@ ws@^3.0.0: xhr-request-promise@^0.1.2: version "0.1.3" - resolved "https://registry.yarnpkg.com/xhr-request-promise/-/xhr-request-promise-0.1.3.tgz#2d5f4b16d8c6c893be97f1a62b0ed4cf3ca5f96c" + resolved "https://registry.npmjs.org/xhr-request-promise/-/xhr-request-promise-0.1.3.tgz" integrity sha512-YUBytBsuwgitWtdRzXDDkWAXzhdGB8bYm0sSzMPZT7Z2MBjMSTHFsyCT1yCRATY+XC69DUrQraRAEgcoCRaIPg== dependencies: xhr-request "^1.1.0" xhr-request@^1.0.1, xhr-request@^1.1.0: version "1.1.0" - resolved "https://registry.yarnpkg.com/xhr-request/-/xhr-request-1.1.0.tgz#f4a7c1868b9f198723444d82dcae317643f2e2ed" + resolved "https://registry.npmjs.org/xhr-request/-/xhr-request-1.1.0.tgz" integrity sha512-Y7qzEaR3FDtL3fP30k9wO/e+FBnBByZeybKOhASsGP30NIkRAAkKD/sCnLvgEfAIEC1rcmK7YG8f4oEnIrrWzA== dependencies: buffer-to-arraybuffer "^0.0.5" @@ -2825,7 +2843,7 @@ xhr-request@^1.0.1, xhr-request@^1.1.0: xhr@^2.0.4, xhr@^2.3.3: version "2.6.0" - resolved "https://registry.yarnpkg.com/xhr/-/xhr-2.6.0.tgz#b69d4395e792b4173d6b7df077f0fc5e4e2b249d" + resolved "https://registry.npmjs.org/xhr/-/xhr-2.6.0.tgz" integrity sha512-/eCGLb5rxjx5e3mF1A7s+pLlR6CGyqWN91fv1JgER5mVWg1MZmlhBvy9kjcsOdRk8RrIujotWyJamfyrp+WIcA== dependencies: global "~4.4.0" @@ -2835,17 +2853,17 @@ xhr@^2.0.4, xhr@^2.3.3: xtend@^4.0.0: version "4.0.2" - resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" + resolved "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz" integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ== yaeti@^0.0.6: version "0.0.6" - resolved "https://registry.yarnpkg.com/yaeti/-/yaeti-0.0.6.tgz#f26f484d72684cf42bedfb76970aa1608fbf9577" + resolved "https://registry.npmjs.org/yaeti/-/yaeti-0.0.6.tgz" integrity sha512-MvQa//+KcZCUkBTIC9blM+CU9J2GzuTytsOUwf2lidtvkx/6gnEp1QvJv34t9vdjhFmha/mUiNDbN0D0mJWdug== yallist@^3.0.0, yallist@^3.1.1: version "3.1.1" - resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd" + resolved "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz" integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g== yallist@^4.0.0: @@ -2855,5 +2873,5 @@ yallist@^4.0.0: yn@3.1.1: version "3.1.1" - resolved "https://registry.yarnpkg.com/yn/-/yn-3.1.1.tgz#1e87401a09d767c1d5eab26a6e4c185182d2eb50" + resolved "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz" integrity sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q== diff --git a/bindings/nodejs/package-lock.json b/bindings/nodejs/package-lock.json index 5b5246bbb0..4bcb1047d0 100644 --- a/bindings/nodejs/package-lock.json +++ b/bindings/nodejs/package-lock.json @@ -1,12 +1,12 @@ { "name": "@iota/sdk", - "version": "1.1.1", + "version": "1.1.3", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "@iota/sdk", - "version": "1.1.1", + "version": "1.1.3", "hasInstallScript": true, "license": "Apache-2.0", "dependencies": { @@ -27,7 +27,7 @@ "eslint-config-prettier": "^8.5.0", "jest": "^29.4.2", "jest-matcher-utils": "^29.5.0", - "prebuild": "^3.0.3", + "prebuild": "^12.1.0", "prettier": "^2.8.3", "ts-jest": "^29.0.5", "typedoc": "^0.24.6", @@ -778,6 +778,12 @@ "node": "^12.22.0 || ^14.17.0 || >=16.0.0" } }, + "node_modules/@gar/promisify": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@gar/promisify/-/promisify-1.1.3.tgz", + "integrity": "sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw==", + "dev": true + }, "node_modules/@humanwhocodes/config-array": { "version": "0.11.10", "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.10.tgz", @@ -1290,6 +1296,45 @@ "node": ">= 8" } }, + "node_modules/@npmcli/fs": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-2.1.2.tgz", + "integrity": "sha512-yOJKRvohFOaLqipNtwYB9WugyZKhC/DZC4VYPmpaCzDBrA8YpK3qHZ8/HGscMnE4GqbkLNuVcCnxkeQEdGt6LQ==", + "dev": true, + "dependencies": { + "@gar/promisify": "^1.1.3", + "semver": "^7.3.5" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/@npmcli/move-file": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@npmcli/move-file/-/move-file-2.0.1.tgz", + "integrity": "sha512-mJd2Z5TjYWq/ttPLLGqArdtnC74J6bOzg4rMDnN+p1xTacZ2yPRCk2y0oSWQtygLR9YVQXgOcONrwtnk3JupxQ==", + "deprecated": "This functionality has been moved to @npmcli/fs", + "dev": true, + "dependencies": { + "mkdirp": "^1.0.4", + "rimraf": "^3.0.2" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/@npmcli/move-file/node_modules/mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "dev": true, + "bin": { + "mkdirp": "bin/cmd.js" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/@sinclair/typebox": { "version": "0.27.8", "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz", @@ -1314,6 +1359,15 @@ "@sinonjs/commons": "^3.0.0" } }, + "node_modules/@tootallnate/once": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz", + "integrity": "sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==", + "dev": true, + "engines": { + "node": ">= 10" + } + }, "node_modules/@types/babel__core": { "version": "7.20.1", "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.1.tgz", @@ -1858,6 +1912,18 @@ "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", "dev": true }, + "node_modules/abort-controller": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", + "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==", + "dev": true, + "dependencies": { + "event-target-shim": "^5.0.0" + }, + "engines": { + "node": ">=6.5" + } + }, "node_modules/acorn": { "version": "8.10.0", "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.10.0.tgz", @@ -1894,6 +1960,43 @@ "integrity": "sha512-QbJ0NTQ/I9DI3uSJA4cbexiwQeRAfjPScqIbSjUDd9TOrcg6pTkdgziesOqxBMBzit8vFCTwrP27t13vFOORRA==", "dev": true }, + "node_modules/agent-base": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "dev": true, + "dependencies": { + "debug": "4" + }, + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/agentkeepalive": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.5.0.tgz", + "integrity": "sha512-5GG/5IbQQpC9FpkRGsSvZI5QYeSCzlJHdpBQntCsuTOxhKD8lqKhrleg2Yi7yvMIf82Ycmmqln9U8V9qwEiJew==", + "dev": true, + "dependencies": { + "humanize-ms": "^1.2.1" + }, + "engines": { + "node": ">= 8.0.0" + } + }, + "node_modules/aggregate-error": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", + "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", + "dev": true, + "dependencies": { + "clean-stack": "^2.0.0", + "indent-string": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/ajv": { "version": "6.12.6", "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", @@ -1996,49 +2099,62 @@ } }, "node_modules/aproba": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", - "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/aproba/-/aproba-2.0.0.tgz", + "integrity": "sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==", "dev": true }, "node_modules/are-we-there-yet": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.7.tgz", - "integrity": "sha512-nxwy40TuMiUGqMyRHgCSWZ9FM4VAoRP4xUYSTv5ImRog+h9yISPbVH7H8fASCIzYn9wlEv4zvFL7uKDMCFQm3g==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-4.0.1.tgz", + "integrity": "sha512-2zuA+jpOYBRgoBCfa+fB87Rk0oGJjDX6pxGzqH6f33NzUhG25Xur6R0u0Z9VVAq8Z5JvQpQI6j6rtonuivC8QA==", "dev": true, "dependencies": { "delegates": "^1.0.0", - "readable-stream": "^2.0.6" + "readable-stream": "^4.1.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/are-we-there-yet/node_modules/readable-stream": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "node_modules/are-we-there-yet/node_modules/buffer": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", + "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" + "base64-js": "^1.3.1", + "ieee754": "^1.2.1" } }, - "node_modules/are-we-there-yet/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, - "node_modules/are-we-there-yet/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "node_modules/are-we-there-yet/node_modules/readable-stream": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-4.4.2.tgz", + "integrity": "sha512-Lk/fICSyIhodxy1IDK2HazkeGjSmezAWX2egdtJnYhtzKEsBPJowlI6F6LPb5tqIQILrMbx22S5o3GuJavPusA==", "dev": true, "dependencies": { - "safe-buffer": "~5.1.0" + "abort-controller": "^3.0.0", + "buffer": "^6.0.3", + "events": "^3.3.0", + "process": "^0.11.10", + "string_decoder": "^1.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" } }, "node_modules/argparse": { @@ -2047,6 +2163,34 @@ "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", "dev": true }, + "node_modules/array-index": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/array-index/-/array-index-1.0.0.tgz", + "integrity": "sha512-jesyNbBkLQgGZMSwA1FanaFjalb1mZUGxGeUEkSDidzgrbjBGhvizJkaItdhkt8eIHFOJC7nDsrXk+BaehTdRw==", + "dev": true, + "dependencies": { + "debug": "^2.2.0", + "es6-symbol": "^3.0.2" + }, + "engines": { + "node": "*" + } + }, + "node_modules/array-index/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/array-index/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + }, "node_modules/array-union": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", @@ -2074,12 +2218,6 @@ "node": ">=0.8" } }, - "node_modules/async": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", - "integrity": "sha512-nSVgobk4rv61R9PUSDtYt7mPVB2olxNR5RWJcAsH676/ef11bUZwvu7+RGYrYauVdDPcO519v68wRhXQtxsV9w==", - "dev": true - }, "node_modules/asynckit": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", @@ -2101,6 +2239,23 @@ "integrity": "sha512-NmWvPnx0F1SfrQbYwOi7OeaNGokp9XhzNioJ/CSBs8Qa4vxug81mhJEAVZwxXuBmYB5KDRfMq/F3RR0BIU7sWg==", "dev": true }, + "node_modules/axios": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.6.2.tgz", + "integrity": "sha512-7i24Ri4pmDRfJTR7LDBhsOTtcm+9kjX5WiY1X3wIisx6G9So3pfMkEiU7emUBe46oceVImccTEM3k6C5dbVW8A==", + "dev": true, + "dependencies": { + "follow-redirects": "^1.15.0", + "form-data": "^4.0.0", + "proxy-from-env": "^1.1.0" + } + }, + "node_modules/b4a": { + "version": "1.6.4", + "resolved": "https://registry.npmjs.org/b4a/-/b4a-1.6.4.tgz", + "integrity": "sha512-fpWrvyVHEKyeEvbKZTVOeZF3VSKKWtJxFIxX/jaVPf+cLbGUSitjb49pHLqPV2BUNNZ0LcoeEGfE/YCpyDYHIw==", + "dev": true + }, "node_modules/babel-jest": { "version": "29.6.2", "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-29.6.2.tgz", @@ -2235,6 +2390,18 @@ "readable-stream": "^3.0.1" } }, + "node_modules/block-stream": { + "version": "0.0.9", + "resolved": "https://registry.npmjs.org/block-stream/-/block-stream-0.0.9.tgz", + "integrity": "sha512-OorbnJVPII4DuUKbjARAe8u8EfqOmkEEaSFIyoQ7OjTHn6kafxWl0wLgoZ2rXaYd7MyLcDaU4TmhfxtwgcccMQ==", + "dev": true, + "dependencies": { + "inherits": "~2.0.0" + }, + "engines": { + "node": "0.4 || >=0.5.8" + } + }, "node_modules/brace-expansion": { "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", @@ -2333,33 +2500,110 @@ "ieee754": "^1.1.13" } }, - "node_modules/buffer-alloc": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/buffer-alloc/-/buffer-alloc-1.2.0.tgz", - "integrity": "sha512-CFsHQgjtW1UChdXgbyJGtnm+O/uLQeZdtbDo8mfUgYXCHSM1wgrVxXm6bSyrUuErEb+4sYVGCzASBRot7zyrow==", + "node_modules/buffer-from": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-0.1.2.tgz", + "integrity": "sha512-RiWIenusJsmI2KcvqQABB83tLxCByE3upSP8QU3rJDMVFGPWLvPQJt/O1Su9moRWeH7d+Q2HYb68f6+v+tw2vg==", + "dev": true + }, + "node_modules/cacache": { + "version": "16.1.3", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-16.1.3.tgz", + "integrity": "sha512-/+Emcj9DAXxX4cwlLmRI9c166RuL3w30zp4R7Joiv2cQTtTtA+jeuCAjH3ZlGnYS3tKENSrKhAzVVP9GVyzeYQ==", + "dev": true, + "dependencies": { + "@npmcli/fs": "^2.1.0", + "@npmcli/move-file": "^2.0.0", + "chownr": "^2.0.0", + "fs-minipass": "^2.1.0", + "glob": "^8.0.1", + "infer-owner": "^1.0.4", + "lru-cache": "^7.7.1", + "minipass": "^3.1.6", + "minipass-collect": "^1.0.2", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "mkdirp": "^1.0.4", + "p-map": "^4.0.0", + "promise-inflight": "^1.0.1", + "rimraf": "^3.0.2", + "ssri": "^9.0.0", + "tar": "^6.1.11", + "unique-filename": "^2.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/cacache/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", "dev": true, "dependencies": { - "buffer-alloc-unsafe": "^1.1.0", - "buffer-fill": "^1.0.0" + "balanced-match": "^1.0.0" } }, - "node_modules/buffer-alloc-unsafe": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz", - "integrity": "sha512-TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg==", - "dev": true + "node_modules/cacache/node_modules/chownr": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", + "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", + "dev": true, + "engines": { + "node": ">=10" + } }, - "node_modules/buffer-fill": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/buffer-fill/-/buffer-fill-1.0.0.tgz", - "integrity": "sha512-T7zexNBwiiaCOGDg9xNX9PBmjrubblRkENuptryuI64URkXDFum9il/JGL8Lm8wYfAXpredVXXZz7eMHilimiQ==", - "dev": true + "node_modules/cacache/node_modules/glob": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz", + "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^5.0.1", + "once": "^1.3.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } }, - "node_modules/buffer-from": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-0.1.2.tgz", - "integrity": "sha512-RiWIenusJsmI2KcvqQABB83tLxCByE3upSP8QU3rJDMVFGPWLvPQJt/O1Su9moRWeH7d+Q2HYb68f6+v+tw2vg==", - "dev": true + "node_modules/cacache/node_modules/lru-cache": { + "version": "7.18.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", + "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", + "dev": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/cacache/node_modules/minimatch": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/cacache/node_modules/mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "dev": true, + "bin": { + "mkdirp": "bin/cmd.js" + }, + "engines": { + "node": ">=10" + } }, "node_modules/callsites": { "version": "3.1.0", @@ -2478,6 +2722,15 @@ "resolved": "https://registry.npmjs.org/class-transformer/-/class-transformer-0.5.1.tgz", "integrity": "sha512-SQa1Ws6hUbfC98vKGxZH3KFY0Y1lm5Zm0SY8XX9zbK7FJCyVEac3ATW0RIpwzW+oOfmHE5PMPufDG9hCfoEOMw==" }, + "node_modules/clean-stack": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", + "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", + "dev": true, + "engines": { + "node": ">=6" + } + }, "node_modules/cliui": { "version": "8.0.1", "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", @@ -2492,29 +2745,6 @@ "node": ">=12" } }, - "node_modules/cliui/node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/cliui/node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/clone-deep": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", @@ -2529,23 +2759,97 @@ "node": ">=6" } }, - "node_modules/co": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", - "integrity": "sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==", + "node_modules/cmake-js": { + "version": "7.2.1", + "resolved": "https://registry.npmjs.org/cmake-js/-/cmake-js-7.2.1.tgz", + "integrity": "sha512-AdPSz9cSIJWdKvm0aJgVu3X8i0U3mNTswJkSHzZISqmYVjZk7Td4oDFg0mCBA383wO+9pG5Ix7pEP1CZH9x2BA==", "dev": true, + "dependencies": { + "axios": "^1.3.2", + "debug": "^4", + "fs-extra": "^10.1.0", + "lodash.isplainobject": "^4.0.6", + "memory-stream": "^1.0.0", + "node-api-headers": "^0.0.2", + "npmlog": "^6.0.2", + "rc": "^1.2.7", + "semver": "^7.3.8", + "tar": "^6.1.11", + "url-join": "^4.0.1", + "which": "^2.0.2", + "yargs": "^17.6.0" + }, + "bin": { + "cmake-js": "bin/cmake-js" + }, "engines": { - "iojs": ">= 1.0.0", - "node": ">= 0.12.0" + "node": ">= 14.15.0" } }, - "node_modules/code-point-at": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", - "integrity": "sha512-RpAVKQA5T63xEj6/giIbUEtZwJ4UFIc3ZtvEkiaUERylqe8xb5IvqcgOurZLahv93CLKfxcw5YI+DZcUBRyLXA==", + "node_modules/cmake-js/node_modules/are-we-there-yet": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-3.0.1.tgz", + "integrity": "sha512-QZW4EDmGwlYur0Yyf/b2uGucHQMa8aFUP7eu9ddR73vvhFyt4V0Vl3QHPcTNJ8l6qYOBdxgXdnBXQrHilfRQBg==", "dev": true, + "dependencies": { + "delegates": "^1.0.0", + "readable-stream": "^3.6.0" + }, "engines": { - "node": ">=0.10.0" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/cmake-js/node_modules/gauge": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/gauge/-/gauge-4.0.4.tgz", + "integrity": "sha512-f9m+BEN5jkg6a0fZjleidjN51VE1X+mPFQ2DJ0uv1V39oCLCbsGe6yjbBnp7eK7z/+GAon99a3nHuqbuuthyPg==", + "dev": true, + "dependencies": { + "aproba": "^1.0.3 || ^2.0.0", + "color-support": "^1.1.3", + "console-control-strings": "^1.1.0", + "has-unicode": "^2.0.1", + "signal-exit": "^3.0.7", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1", + "wide-align": "^1.1.5" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/cmake-js/node_modules/npmlog": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-6.0.2.tgz", + "integrity": "sha512-/vBvz5Jfr9dT/aFWd0FIRf+T/Q2WBsLENygUaFUqstqsycmZAP/t5BvFJTK0viFmSUxiUKTUplWy5vt+rvKIxg==", + "dev": true, + "dependencies": { + "are-we-there-yet": "^3.0.0", + "console-control-strings": "^1.1.0", + "gauge": "^4.0.3", + "set-blocking": "^2.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/co": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", + "integrity": "sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==", + "dev": true, + "engines": { + "iojs": ">= 1.0.0", + "node": ">= 0.12.0" + } + }, + "node_modules/code-point-at": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", + "integrity": "sha512-RpAVKQA5T63xEj6/giIbUEtZwJ4UFIc3ZtvEkiaUERylqe8xb5IvqcgOurZLahv93CLKfxcw5YI+DZcUBRyLXA==", + "dev": true, + "engines": { + "node": ">=0.10.0" } }, "node_modules/collect-v8-coverage": { @@ -2572,6 +2876,15 @@ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, + "node_modules/color-support": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", + "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==", + "dev": true, + "bin": { + "color-support": "bin.js" + } + }, "node_modules/colorette": { "version": "2.0.20", "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz", @@ -2634,6 +2947,16 @@ "node": ">= 8" } }, + "node_modules/d": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/d/-/d-1.0.1.tgz", + "integrity": "sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==", + "dev": true, + "dependencies": { + "es5-ext": "^0.10.50", + "type": "^1.0.1" + } + }, "node_modules/dashdash": { "version": "1.14.1", "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", @@ -2800,12 +3123,6 @@ "readable-stream": "~1.1.9" } }, - "node_modules/duplexer2/node_modules/isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==", - "dev": true - }, "node_modules/duplexer2/node_modules/readable-stream": { "version": "1.1.14", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", @@ -2824,6 +3141,15 @@ "integrity": "sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ==", "dev": true }, + "node_modules/each-series-async": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/each-series-async/-/each-series-async-1.0.1.tgz", + "integrity": "sha512-G4zip/Ewpwr6JQxW7+2RNgkPd09h/UNec5UlvA/xKwl4qf5blyBNK6a/zjQc3MojgsxaOb93B9v3T92QU6IMVg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/ecc-jsbn": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", @@ -2871,6 +3197,16 @@ "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", "dev": true }, + "node_modules/encoding": { + "version": "0.1.13", + "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz", + "integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==", + "dev": true, + "optional": true, + "dependencies": { + "iconv-lite": "^0.6.2" + } + }, "node_modules/end-of-stream": { "version": "1.4.4", "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", @@ -2892,6 +3228,15 @@ "node": ">=10.13.0" } }, + "node_modules/env-paths": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", + "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", + "dev": true, + "engines": { + "node": ">=6" + } + }, "node_modules/envinfo": { "version": "7.10.0", "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.10.0.tgz", @@ -2904,6 +3249,12 @@ "node": ">=4" } }, + "node_modules/err-code": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/err-code/-/err-code-2.0.3.tgz", + "integrity": "sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==", + "dev": true + }, "node_modules/error-ex": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", @@ -2919,6 +3270,42 @@ "integrity": "sha512-JUFAyicQV9mXc3YRxPnDlrfBKpqt6hUYzz9/boprUJHs4e4KVr3XwOF70doO6gwXUor6EWZJAyWAfKki84t20Q==", "dev": true }, + "node_modules/es5-ext": { + "version": "0.10.62", + "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.62.tgz", + "integrity": "sha512-BHLqn0klhEpnOKSrzn/Xsz2UIW8j+cGmo9JLzr8BiUapV8hPL9+FliFqjwr9ngW7jWdnxv6eO+/LqyhJVqgrjA==", + "dev": true, + "hasInstallScript": true, + "dependencies": { + "es6-iterator": "^2.0.3", + "es6-symbol": "^3.1.3", + "next-tick": "^1.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/es6-iterator": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", + "integrity": "sha512-zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g==", + "dev": true, + "dependencies": { + "d": "1", + "es5-ext": "^0.10.35", + "es6-symbol": "^3.1.1" + } + }, + "node_modules/es6-symbol": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.3.tgz", + "integrity": "sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA==", + "dev": true, + "dependencies": { + "d": "^1.0.1", + "ext": "^1.1.2" + } + }, "node_modules/escalade": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", @@ -3146,6 +3533,15 @@ "node": ">=0.10.0" } }, + "node_modules/event-target-shim": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz", + "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, "node_modules/events": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", @@ -3178,6 +3574,15 @@ "url": "https://github.com/sindresorhus/execa?sponsor=1" } }, + "node_modules/execspawn": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/execspawn/-/execspawn-1.0.1.tgz", + "integrity": "sha512-s2k06Jy9i8CUkYe0+DxRlvtkZoOkwwfhB+Xxo5HGUtrISVW2m98jO2tr67DGRFxZwkjQqloA3v/tNtjhBRBieg==", + "dev": true, + "dependencies": { + "util-extend": "^1.0.1" + } + }, "node_modules/exit": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", @@ -3212,6 +3617,27 @@ "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, + "node_modules/exponential-backoff": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/exponential-backoff/-/exponential-backoff-3.1.1.tgz", + "integrity": "sha512-dX7e/LHVJ6W3DE1MHWi9S1EYzDESENfLrYohG2G++ovZrYOkm4Knwa0mc1cn84xJOR4KEU0WSchhLbd0UklbHw==", + "dev": true + }, + "node_modules/ext": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/ext/-/ext-1.7.0.tgz", + "integrity": "sha512-6hxeJYaL110a9b5TEJSj0gojyHQAmA2ch5Os+ySCiA1QGdS697XWY1pzsrSjqA9LDEEgdB/KypIlR59RcLuHYw==", + "dev": true, + "dependencies": { + "type": "^2.7.2" + } + }, + "node_modules/ext/node_modules/type": { + "version": "2.7.2", + "resolved": "https://registry.npmjs.org/type/-/type-2.7.2.tgz", + "integrity": "sha512-dzlvlNlt6AXU7EBSfpAscydQ7gXB+pPGsPnfJnZpiNJBDj7IaJzQlBZYGdEi4R9HmPdBv2XmWJ6YUtoTa7lmCw==", + "dev": true + }, "node_modules/extend": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", @@ -3233,6 +3659,12 @@ "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", "dev": true }, + "node_modules/fast-fifo": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/fast-fifo/-/fast-fifo-1.3.2.tgz", + "integrity": "sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ==", + "dev": true + }, "node_modules/fast-glob": { "version": "3.3.1", "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.1.tgz", @@ -3359,6 +3791,26 @@ "integrity": "sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==", "dev": true }, + "node_modules/follow-redirects": { + "version": "1.15.3", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.3.tgz", + "integrity": "sha512-1VzOtuEM8pC9SFU1E+8KfTjZyMztRsgEfwQl44z8A25uy13jSzTj6dyK2Df52iV0vgHCfBwLhDWevLn95w5v6Q==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } + } + }, "node_modules/forever-agent": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", @@ -3369,17 +3821,17 @@ } }, "node_modules/form-data": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", - "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", + "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", "dev": true, "dependencies": { "asynckit": "^0.4.0", - "combined-stream": "^1.0.6", + "combined-stream": "^1.0.8", "mime-types": "^2.1.12" }, "engines": { - "node": ">= 0.12" + "node": ">= 6" } }, "node_modules/fs-constants": { @@ -3387,13 +3839,30 @@ "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==" }, + "node_modules/fs-extra": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", + "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=12" + } + }, "node_modules/fs-minipass": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-1.2.7.tgz", - "integrity": "sha512-GWSSJGFy4e9GUeCcbIkED+bgAoFyj7XF1mV8rma3QW4NIqX9Kyx79N/PF61H5udOV3aY1IaMLs6pGbH71nlCTA==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", + "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", "dev": true, "dependencies": { - "minipass": "^2.6.0" + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" } }, "node_modules/fs.realpath": { @@ -3450,40 +3919,34 @@ "dev": true }, "node_modules/gauge": { - "version": "2.7.4", - "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", - "integrity": "sha512-14x4kjc6lkD3ltw589k0NrPD6cCNTD6CWoVUNpB85+DrtONoZn+Rug6xZU5RvSC4+TZPxA5AnBibQYAvZn41Hg==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/gauge/-/gauge-5.0.1.tgz", + "integrity": "sha512-CmykPMJGuNan/3S4kZOpvvPYSNqSHANiWnh9XcMU2pSjtBfF0XzZ2p1bFAxTbnFxyBuPxQYHhzwaoOmUdqzvxQ==", "dev": true, "dependencies": { - "aproba": "^1.0.3", - "console-control-strings": "^1.0.0", - "has-unicode": "^2.0.0", - "object-assign": "^4.1.0", - "signal-exit": "^3.0.0", - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1", - "wide-align": "^1.1.0" - } - }, - "node_modules/gauge/node_modules/ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==", - "dev": true, + "aproba": "^1.0.3 || ^2.0.0", + "color-support": "^1.1.3", + "console-control-strings": "^1.1.0", + "has-unicode": "^2.0.1", + "signal-exit": "^4.0.1", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1", + "wide-align": "^1.1.5" + }, "engines": { - "node": ">=0.10.0" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/gauge/node_modules/strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==", + "node_modules/gauge/node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", "dev": true, - "dependencies": { - "ansi-regex": "^2.0.0" - }, "engines": { - "node": ">=0.10.0" + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, "node_modules/gensync": { @@ -3535,17 +3998,20 @@ } }, "node_modules/ghreleases": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/ghreleases/-/ghreleases-1.0.7.tgz", - "integrity": "sha512-1lFGyLLF38Q6cFCDyebN5vzQ2P9DEaAgxPIDLmQwQDVDmUe2Wgv+6dhAIoHeA+My4HLpaJ+dKF73xtuykN2cbQ==", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/ghreleases/-/ghreleases-3.0.2.tgz", + "integrity": "sha512-QiR9mIYvRG7hd8JuQYoxeBNOelVuTp2DpdiByRywbCDBSJufK9Vq7VuhD8B+5uviMxZx2AEkCzye61Us9gYgnw==", "dev": true, "dependencies": { "after": "~0.8.1", "ghrepos": "~2.1.0", "ghutils": "~3.2.0", + "lodash.uniq": "^4.5.0", "simple-mime": "~0.1.0", - "url-template": "~2.0.6", - "xtend": "~4.0.0" + "url-template": "~2.0.6" + }, + "engines": { + "node": ">=6" } }, "node_modules/ghrepos": { @@ -3734,6 +4200,26 @@ "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", "dev": true }, + "node_modules/http-cache-semantics": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz", + "integrity": "sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==", + "dev": true + }, + "node_modules/http-proxy-agent": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz", + "integrity": "sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==", + "dev": true, + "dependencies": { + "@tootallnate/once": "2", + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, "node_modules/http-signature": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", @@ -3749,6 +4235,19 @@ "npm": ">=1.3.7" } }, + "node_modules/https-proxy-agent": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", + "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", + "dev": true, + "dependencies": { + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, "node_modules/human-signals": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", @@ -3758,6 +4257,15 @@ "node": ">=10.17.0" } }, + "node_modules/humanize-ms": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz", + "integrity": "sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==", + "dev": true, + "dependencies": { + "ms": "^2.0.0" + } + }, "node_modules/hyperquest": { "version": "2.1.3", "resolved": "https://registry.npmjs.org/hyperquest/-/hyperquest-2.1.3.tgz", @@ -3769,6 +4277,19 @@ "through2": "~0.6.3" } }, + "node_modules/iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "dev": true, + "optional": true, + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/ieee754": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", @@ -3841,6 +4362,21 @@ "node": ">=0.8.19" } }, + "node_modules/indent-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", + "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/infer-owner": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/infer-owner/-/infer-owner-1.0.4.tgz", + "integrity": "sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==", + "dev": true + }, "node_modules/inflight": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", @@ -3870,6 +4406,12 @@ "node": ">=10.13.0" } }, + "node_modules/ip": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ip/-/ip-2.0.0.tgz", + "integrity": "sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ==", + "dev": true + }, "node_modules/is-arrayish": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", @@ -3898,15 +4440,12 @@ } }, "node_modules/is-fullwidth-code-point": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", - "integrity": "sha512-1pqUqRjkhPJ9miNq9SwMfdvi6lBJcd6eFxvfaivQhaH3SgisfiuudvFntdKOmxuee/77l+FPjKrQjWvmPjWrRw==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", "dev": true, - "dependencies": { - "number-is-nan": "^1.0.0" - }, "engines": { - "node": ">=0.10.0" + "node": ">=8" } }, "node_modules/is-generator-fn": { @@ -3930,6 +4469,12 @@ "node": ">=0.10.0" } }, + "node_modules/is-lambda": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-lambda/-/is-lambda-1.0.1.tgz", + "integrity": "sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ==", + "dev": true + }, "node_modules/is-number": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", @@ -3979,9 +4524,9 @@ "dev": true }, "node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==", "dev": true }, "node_modules/isexe": { @@ -4719,13 +5264,25 @@ "integrity": "sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w==", "dev": true }, - "node_modules/jsonist": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/jsonist/-/jsonist-2.1.2.tgz", - "integrity": "sha512-8yqmWJAC2VaYoSKQAbsfgCpGY5o/1etWzx6ZxaZrC4iGaHrHUZEo+a2MyF8w+2uTavTlHdLWaZUoR19UfBstxQ==", + "node_modules/jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", "dev": true, "dependencies": { - "bl": "~3.0.0", + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/jsonist": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/jsonist/-/jsonist-2.1.2.tgz", + "integrity": "sha512-8yqmWJAC2VaYoSKQAbsfgCpGY5o/1etWzx6ZxaZrC4iGaHrHUZEo+a2MyF8w+2uTavTlHdLWaZUoR19UfBstxQ==", + "dev": true, + "dependencies": { + "bl": "~3.0.0", "hyperquest": "~2.1.3", "json-stringify-safe": "~5.0.1", "xtend": "~4.0.1" @@ -4816,6 +5373,12 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/lodash.isplainobject": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", + "integrity": "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==", + "dev": true + }, "node_modules/lodash.memoize": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", @@ -4846,6 +5409,12 @@ "integrity": "sha512-sW73O6S8+Tg66eY56DBk85aQzzUJDtpoXFBgELMd5P/SotAguo+1kYO6RuYgXxA4HJH3LFTFPASX6ET6bjfriw==", "dev": true }, + "node_modules/lodash.uniq": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", + "integrity": "sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==", + "dev": true + }, "node_modules/lru-cache": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", @@ -4882,6 +5451,42 @@ "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", "dev": true }, + "node_modules/make-fetch-happen": { + "version": "10.2.1", + "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-10.2.1.tgz", + "integrity": "sha512-NgOPbRiaQM10DYXvN3/hhGVI2M5MtITFryzBGxHM5p4wnFxsVCbxkrBrDsk+EZ5OB4jEOT7AjDxtdF+KVEFT7w==", + "dev": true, + "dependencies": { + "agentkeepalive": "^4.2.1", + "cacache": "^16.1.0", + "http-cache-semantics": "^4.1.0", + "http-proxy-agent": "^5.0.0", + "https-proxy-agent": "^5.0.0", + "is-lambda": "^1.0.1", + "lru-cache": "^7.7.1", + "minipass": "^3.1.6", + "minipass-collect": "^1.0.2", + "minipass-fetch": "^2.0.3", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "negotiator": "^0.6.3", + "promise-retry": "^2.0.1", + "socks-proxy-agent": "^7.0.0", + "ssri": "^9.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/make-fetch-happen/node_modules/lru-cache": { + "version": "7.18.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", + "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", + "dev": true, + "engines": { + "node": ">=12" + } + }, "node_modules/makeerror": { "version": "1.0.12", "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz", @@ -4903,6 +5508,15 @@ "node": ">= 12" } }, + "node_modules/memory-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/memory-stream/-/memory-stream-1.0.0.tgz", + "integrity": "sha512-Wm13VcsPIMdG96dzILfij09PvuS3APtcKNh7M28FsCA/w6+1mjR7hhPmfFNoilX9xU7wTdhsH5lJAm6XNzdtww==", + "dev": true, + "dependencies": { + "readable-stream": "^3.4.0" + } + }, "node_modules/merge-stream": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", @@ -4993,24 +5607,107 @@ } }, "node_modules/minipass": { - "version": "2.9.0", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-2.9.0.tgz", - "integrity": "sha512-wxfUjg9WebH+CUDX/CdbRlh5SmfZiy/hpkxaRI16Y9W56Pa75sWgd/rvFilSgrauD9NyFymP/+JFV3KwzIsJeg==", + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", "dev": true, "dependencies": { - "safe-buffer": "^5.1.2", - "yallist": "^3.0.0" + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minipass-collect": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/minipass-collect/-/minipass-collect-1.0.2.tgz", + "integrity": "sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA==", + "dev": true, + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/minipass-fetch": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-2.1.2.tgz", + "integrity": "sha512-LT49Zi2/WMROHYoqGgdlQIZh8mLPZmOrN2NdJjMXxYe4nkN6FUyuPuOAOedNJDrx0IRGg9+4guZewtp8hE6TxA==", + "dev": true, + "dependencies": { + "minipass": "^3.1.6", + "minipass-sized": "^1.0.3", + "minizlib": "^2.1.2" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + }, + "optionalDependencies": { + "encoding": "^0.1.13" + } + }, + "node_modules/minipass-flush": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz", + "integrity": "sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==", + "dev": true, + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/minipass-pipeline": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz", + "integrity": "sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==", + "dev": true, + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minipass-sized": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/minipass-sized/-/minipass-sized-1.0.3.tgz", + "integrity": "sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g==", + "dev": true, + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">=8" } }, + "node_modules/minipass/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, "node_modules/minizlib": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-1.3.3.tgz", - "integrity": "sha512-6ZYMOEnmVsdCeTJVE0W9ZD+pVnE8h9Hma/iOwwRDsdQoePpoX56/8B6z3P9VNwppJuBKNRuFDRNRqRWexT9G9Q==", + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", + "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", "dev": true, "dependencies": { - "minipass": "^2.9.0" + "minipass": "^3.0.0", + "yallist": "^4.0.0" + }, + "engines": { + "node": ">= 8" } }, + "node_modules/minizlib/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, "node_modules/mkdirp": { "version": "0.5.6", "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", @@ -5051,16 +5748,31 @@ "integrity": "sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==", "dev": true }, + "node_modules/negotiator": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", + "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, "node_modules/neo-async": { "version": "2.6.2", "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", "dev": true }, + "node_modules/next-tick": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.1.0.tgz", + "integrity": "sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==", + "dev": true + }, "node_modules/node-abi": { - "version": "3.46.0", - "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-3.46.0.tgz", - "integrity": "sha512-LXvP3AqTIrtvH/jllXjkNVbYifpRbt9ThTtymSMSuHmhugQLAWr99QQFTm+ZRht9ziUvdGOgB+esme1C6iE6Lg==", + "version": "3.51.0", + "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-3.51.0.tgz", + "integrity": "sha512-SQkEP4hmNWjlniS5zdnfIXTk1x7Ome85RDzHlTbBtzE97Gfwz/Ipw4v/Ryk20DWIy3yCNVLVlGKApCnmvYoJbA==", "dependencies": { "semver": "^7.3.5" }, @@ -5068,33 +5780,186 @@ "node": ">=10" } }, + "node_modules/node-api-headers": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/node-api-headers/-/node-api-headers-0.0.2.tgz", + "integrity": "sha512-YsjmaKGPDkmhoNKIpkChtCsPVaRE0a274IdERKnuc/E8K1UJdBZ4/mvI006OijlQZHCfpRNOH3dfHQs92se8gg==", + "dev": true + }, "node_modules/node-gyp": { - "version": "3.8.0", - "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-3.8.0.tgz", - "integrity": "sha512-3g8lYefrRRzvGeSowdJKAKyks8oUpLEd/DyPV4eMhVlhJ0aNaZqIrNUIPuEWWTAoPqyFkfGrM67MC69baqn6vA==", + "version": "9.4.1", + "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-9.4.1.tgz", + "integrity": "sha512-OQkWKbjQKbGkMf/xqI1jjy3oCTgMKJac58G2+bjZb3fza6gW2YrCSdMQYaoTb70crvE//Gngr4f0AgVHmqHvBQ==", + "dev": true, + "dependencies": { + "env-paths": "^2.2.0", + "exponential-backoff": "^3.1.1", + "glob": "^7.1.4", + "graceful-fs": "^4.2.6", + "make-fetch-happen": "^10.0.3", + "nopt": "^6.0.0", + "npmlog": "^6.0.0", + "rimraf": "^3.0.2", + "semver": "^7.3.5", + "tar": "^6.1.2", + "which": "^2.0.2" + }, + "bin": { + "node-gyp": "bin/node-gyp.js" + }, + "engines": { + "node": "^12.13 || ^14.13 || >=16" + } + }, + "node_modules/node-gyp/node_modules/are-we-there-yet": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-3.0.1.tgz", + "integrity": "sha512-QZW4EDmGwlYur0Yyf/b2uGucHQMa8aFUP7eu9ddR73vvhFyt4V0Vl3QHPcTNJ8l6qYOBdxgXdnBXQrHilfRQBg==", + "dev": true, + "dependencies": { + "delegates": "^1.0.0", + "readable-stream": "^3.6.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/node-gyp/node_modules/gauge": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/gauge/-/gauge-4.0.4.tgz", + "integrity": "sha512-f9m+BEN5jkg6a0fZjleidjN51VE1X+mPFQ2DJ0uv1V39oCLCbsGe6yjbBnp7eK7z/+GAon99a3nHuqbuuthyPg==", + "dev": true, + "dependencies": { + "aproba": "^1.0.3 || ^2.0.0", + "color-support": "^1.1.3", + "console-control-strings": "^1.1.0", + "has-unicode": "^2.0.1", + "signal-exit": "^3.0.7", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1", + "wide-align": "^1.1.5" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/node-gyp/node_modules/npmlog": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-6.0.2.tgz", + "integrity": "sha512-/vBvz5Jfr9dT/aFWd0FIRf+T/Q2WBsLENygUaFUqstqsycmZAP/t5BvFJTK0viFmSUxiUKTUplWy5vt+rvKIxg==", + "dev": true, + "dependencies": { + "are-we-there-yet": "^3.0.0", + "console-control-strings": "^1.1.0", + "gauge": "^4.0.3", + "set-blocking": "^2.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/node-int64": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", + "integrity": "sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==", + "dev": true + }, + "node_modules/node-ninja": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/node-ninja/-/node-ninja-1.0.2.tgz", + "integrity": "sha512-wMtWsG2QZI1Z5V7GciX9OI2DVT0PuDRIDQfe3L3rJsQ1qN1Gm3QQhoNtb4PMRi7gq4ByvEIYtPwHC7YbEf5yxw==", "dev": true, "dependencies": { "fstream": "^1.0.0", - "glob": "^7.0.3", + "glob": "3 || 4 || 5 || 6 || 7", "graceful-fs": "^4.1.2", + "minimatch": "3", "mkdirp": "^0.5.0", "nopt": "2 || 3", - "npmlog": "0 || 1 || 2 || 3 || 4", + "npmlog": "0 || 1 || 2", "osenv": "0", - "request": "^2.87.0", + "path-array": "^1.0.0", + "request": "2", "rimraf": "2", - "semver": "~5.3.0", + "semver": "2.x || 3.x || 4 || 5", "tar": "^2.0.0", "which": "1" }, "bin": { - "node-gyp": "bin/node-gyp.js" + "node-ninja": "bin/node-ninja.js" }, "engines": { "node": ">= 0.8.0" } }, - "node_modules/node-gyp/node_modules/rimraf": { + "node_modules/node-ninja/node_modules/are-we-there-yet": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.7.tgz", + "integrity": "sha512-nxwy40TuMiUGqMyRHgCSWZ9FM4VAoRP4xUYSTv5ImRog+h9yISPbVH7H8fASCIzYn9wlEv4zvFL7uKDMCFQm3g==", + "dev": true, + "dependencies": { + "delegates": "^1.0.0", + "readable-stream": "^2.0.6" + } + }, + "node_modules/node-ninja/node_modules/gauge": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/gauge/-/gauge-1.2.7.tgz", + "integrity": "sha512-fVbU2wRE91yDvKUnrIaQlHKAWKY5e08PmztCrwuH5YVQ+Z/p3d0ny2T48o6uvAAXHIUnfaQdHkmxYbQft1eHVA==", + "dev": true, + "dependencies": { + "ansi": "^0.3.0", + "has-unicode": "^2.0.0", + "lodash.pad": "^4.1.0", + "lodash.padend": "^4.1.0", + "lodash.padstart": "^4.1.0" + } + }, + "node_modules/node-ninja/node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "dev": true + }, + "node_modules/node-ninja/node_modules/nopt": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz", + "integrity": "sha512-4GUt3kSEYmk4ITxzB/b9vaIDfUVWN/Ml1Fwl11IlnIG2iaJ9O6WXZ9SrYM9NLI8OCBieN2Y8SWC2oJV0RQ7qYg==", + "dev": true, + "dependencies": { + "abbrev": "1" + }, + "bin": { + "nopt": "bin/nopt.js" + } + }, + "node_modules/node-ninja/node_modules/npmlog": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-2.0.4.tgz", + "integrity": "sha512-DaL6RTb8Qh4tMe2ttPT1qWccETy2Vi5/8p+htMpLBeXJTr2CAqnF5WQtSP2eFpvaNbhLZ5uilDb98mRm4Q+lZQ==", + "dev": true, + "dependencies": { + "ansi": "~0.3.1", + "are-we-there-yet": "~1.1.2", + "gauge": "~1.2.5" + } + }, + "node_modules/node-ninja/node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "dev": true, + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/node-ninja/node_modules/rimraf": { "version": "2.7.1", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", @@ -5106,16 +5971,43 @@ "rimraf": "bin.js" } }, - "node_modules/node-gyp/node_modules/semver": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.3.0.tgz", - "integrity": "sha512-mfmm3/H9+67MCVix1h+IXTpDwL6710LyHuk7+cWC9T1mE0qz4iHhh6r4hU2wrIT9iTsAAC2XQRvfblL028cpLw==", + "node_modules/node-ninja/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "node_modules/node-ninja/node_modules/semver": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", "dev": true, "bin": { "semver": "bin/semver" } }, - "node_modules/node-gyp/node_modules/which": { + "node_modules/node-ninja/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/node-ninja/node_modules/tar": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/tar/-/tar-2.2.2.tgz", + "integrity": "sha512-FCEhQ/4rE1zYv9rYXJw/msRqsnmlje5jHP6huWeBZ704jUTy02c5AZyWujpMR1ax6mVw9NyJMfuK2CMDWVIfgA==", + "deprecated": "This version of tar is no longer supported, and will not receive security updates. Please upgrade asap.", + "dev": true, + "dependencies": { + "block-stream": "*", + "fstream": "^1.0.12", + "inherits": "2" + } + }, + "node_modules/node-ninja/node_modules/which": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", @@ -5127,12 +6019,6 @@ "which": "bin/which" } }, - "node_modules/node-int64": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", - "integrity": "sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==", - "dev": true - }, "node_modules/node-releases": { "version": "2.0.13", "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.13.tgz", @@ -5146,15 +6032,18 @@ "dev": true }, "node_modules/nopt": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz", - "integrity": "sha512-4GUt3kSEYmk4ITxzB/b9vaIDfUVWN/Ml1Fwl11IlnIG2iaJ9O6WXZ9SrYM9NLI8OCBieN2Y8SWC2oJV0RQ7qYg==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-6.0.0.tgz", + "integrity": "sha512-ZwLpbTgdhuZUnZzjd7nb1ZV+4DoiC6/sfiVKok72ym/4Tlf+DFdlHYmT2JPmcNNWV6Pi3SDf1kT+A4r9RTuT9g==", "dev": true, "dependencies": { - "abbrev": "1" + "abbrev": "^1.0.0" }, "bin": { "nopt": "bin/nopt.js" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, "node_modules/normalize-path": { @@ -5166,19 +6055,197 @@ "node": ">=0.10.0" } }, - "node_modules/npm-run-path": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", - "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "node_modules/npm-path": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/npm-path/-/npm-path-2.0.4.tgz", + "integrity": "sha512-IFsj0R9C7ZdR5cP+ET342q77uSRdtWOlWpih5eC+lu29tIDbNEgDbzgVJ5UFvYHWhxDZ5TFkJafFioO0pPQjCw==", "dev": true, "dependencies": { - "path-key": "^3.0.0" + "which": "^1.2.10" + }, + "bin": { + "npm-path": "bin/npm-path" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/npm-path/node_modules/which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "which": "bin/which" + } + }, + "node_modules/npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "dev": true, + "dependencies": { + "path-key": "^3.0.0" }, "engines": { "node": ">=8" } }, + "node_modules/npm-which": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/npm-which/-/npm-which-3.0.1.tgz", + "integrity": "sha512-CM8vMpeFQ7MAPin0U3wzDhSGV0hMHNwHU0wjo402IVizPDrs45jSfSuoC+wThevY88LQti8VvaAnqYAeVy3I1A==", + "dev": true, + "dependencies": { + "commander": "^2.9.0", + "npm-path": "^2.0.2", + "which": "^1.2.10" + }, + "bin": { + "npm-which": "bin/npm-which.js" + }, + "engines": { + "node": ">=4.2.0" + } + }, + "node_modules/npm-which/node_modules/which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "which": "bin/which" + } + }, "node_modules/npmlog": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-7.0.1.tgz", + "integrity": "sha512-uJ0YFk/mCQpLBt+bxN88AKd+gyqZvZDbtiNxk6Waqcj2aPRyfVx8ITawkyQynxUagInjdYT1+qj4NfA5KJJUxg==", + "dev": true, + "dependencies": { + "are-we-there-yet": "^4.0.0", + "console-control-strings": "^1.1.0", + "gauge": "^5.0.0", + "set-blocking": "^2.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/number-is-nan": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", + "integrity": "sha512-4jbtZXNAsfZbAHiiqjLPBiCl16dES1zI4Hpzzxw61Tk+loF+sBDBKx1ICKKKwIqQ7M0mFn1TmkN7euSncWgHiQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/nw-gyp": { + "version": "3.6.6", + "resolved": "https://registry.npmjs.org/nw-gyp/-/nw-gyp-3.6.6.tgz", + "integrity": "sha512-FeMnpFQWtEEMJ1BrSfK3T62CjuxaNl0mNHqdrxFcIF5XQdC3gaZYW4n+77lQLk8PE3Upfknkl9VRo6gDKJIHuA==", + "dev": true, + "dependencies": { + "fstream": "^1.0.0", + "glob": "^7.0.3", + "graceful-fs": "^4.1.2", + "minimatch": "^3.0.2", + "mkdirp": "^0.5.0", + "nopt": "2 || 3", + "npmlog": "0 || 1 || 2 || 3 || 4", + "osenv": "0", + "request": "2", + "rimraf": "2", + "semver": "~5.3.0", + "tar": "^2.0.0", + "which": "1" + }, + "bin": { + "nw-gyp": "bin/nw-gyp.js" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/nw-gyp/node_modules/ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/nw-gyp/node_modules/aproba": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", + "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==", + "dev": true + }, + "node_modules/nw-gyp/node_modules/are-we-there-yet": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.7.tgz", + "integrity": "sha512-nxwy40TuMiUGqMyRHgCSWZ9FM4VAoRP4xUYSTv5ImRog+h9yISPbVH7H8fASCIzYn9wlEv4zvFL7uKDMCFQm3g==", + "dev": true, + "dependencies": { + "delegates": "^1.0.0", + "readable-stream": "^2.0.6" + } + }, + "node_modules/nw-gyp/node_modules/gauge": { + "version": "2.7.4", + "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", + "integrity": "sha512-14x4kjc6lkD3ltw589k0NrPD6cCNTD6CWoVUNpB85+DrtONoZn+Rug6xZU5RvSC4+TZPxA5AnBibQYAvZn41Hg==", + "dev": true, + "dependencies": { + "aproba": "^1.0.3", + "console-control-strings": "^1.0.0", + "has-unicode": "^2.0.0", + "object-assign": "^4.1.0", + "signal-exit": "^3.0.0", + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1", + "wide-align": "^1.1.0" + } + }, + "node_modules/nw-gyp/node_modules/is-fullwidth-code-point": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", + "integrity": "sha512-1pqUqRjkhPJ9miNq9SwMfdvi6lBJcd6eFxvfaivQhaH3SgisfiuudvFntdKOmxuee/77l+FPjKrQjWvmPjWrRw==", + "dev": true, + "dependencies": { + "number-is-nan": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/nw-gyp/node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "dev": true + }, + "node_modules/nw-gyp/node_modules/nopt": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz", + "integrity": "sha512-4GUt3kSEYmk4ITxzB/b9vaIDfUVWN/Ml1Fwl11IlnIG2iaJ9O6WXZ9SrYM9NLI8OCBieN2Y8SWC2oJV0RQ7qYg==", + "dev": true, + "dependencies": { + "abbrev": "1" + }, + "bin": { + "nopt": "bin/nopt.js" + } + }, + "node_modules/nw-gyp/node_modules/npmlog": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz", "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==", @@ -5190,15 +6257,107 @@ "set-blocking": "~2.0.0" } }, - "node_modules/number-is-nan": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", - "integrity": "sha512-4jbtZXNAsfZbAHiiqjLPBiCl16dES1zI4Hpzzxw61Tk+loF+sBDBKx1ICKKKwIqQ7M0mFn1TmkN7euSncWgHiQ==", + "node_modules/nw-gyp/node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "dev": true, + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/nw-gyp/node_modules/rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "dev": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + } + }, + "node_modules/nw-gyp/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "node_modules/nw-gyp/node_modules/semver": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.3.0.tgz", + "integrity": "sha512-mfmm3/H9+67MCVix1h+IXTpDwL6710LyHuk7+cWC9T1mE0qz4iHhh6r4hU2wrIT9iTsAAC2XQRvfblL028cpLw==", + "dev": true, + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/nw-gyp/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/nw-gyp/node_modules/string-width": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha512-0XsVpQLnVCXHJfyEs8tC0zpTVIr5PKKsQtkT29IwupnPTjtPmQ3xT/4yCREF9hYkV/3M3kzcUTSAZT6a6h81tw==", + "dev": true, + "dependencies": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/nw-gyp/node_modules/strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==", "dev": true, + "dependencies": { + "ansi-regex": "^2.0.0" + }, "engines": { "node": ">=0.10.0" } }, + "node_modules/nw-gyp/node_modules/tar": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/tar/-/tar-2.2.2.tgz", + "integrity": "sha512-FCEhQ/4rE1zYv9rYXJw/msRqsnmlje5jHP6huWeBZ704jUTy02c5AZyWujpMR1ax6mVw9NyJMfuK2CMDWVIfgA==", + "deprecated": "This version of tar is no longer supported, and will not receive security updates. Please upgrade asap.", + "dev": true, + "dependencies": { + "block-stream": "*", + "fstream": "^1.0.12", + "inherits": "2" + } + }, + "node_modules/nw-gyp/node_modules/which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "which": "bin/which" + } + }, "node_modules/oauth-sign": { "version": "0.9.0", "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", @@ -5315,6 +6474,21 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/p-map": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", + "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", + "dev": true, + "dependencies": { + "aggregate-error": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/p-try": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", @@ -5354,6 +6528,15 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/path-array": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-array/-/path-array-1.0.1.tgz", + "integrity": "sha512-teWG2rJTJJZi2kINKOsHcdIuHP7jy3D7pAsVgdhxMq8kaL2RnS5sg7YTlrClMVCIItcVbPTPI6eMBEoNxYahLA==", + "dev": true, + "dependencies": { + "array-index": "^1.0.0" + } + }, "node_modules/path-exists": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", @@ -5494,30 +6677,36 @@ } }, "node_modules/prebuild": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/prebuild/-/prebuild-3.0.3.tgz", - "integrity": "sha512-QGZMWEfs2zjsQ1Y9Lv4dwZ4EoE93E5UDxHKGc1iSBW8TvT4nM6Dc2DbhInDNlDJ/oGtFpoLwkQKivaoBXs+40g==", + "version": "12.1.0", + "resolved": "https://registry.npmjs.org/prebuild/-/prebuild-12.1.0.tgz", + "integrity": "sha512-7VxOp28zmb68lVMAqNMYr8jyIIHdRp52MSki01jAsdgDlnQYsVNhRpC9nHoax2wVhV/fnbyUUb1u57qUjrbbEg==", "dev": true, "dependencies": { - "async": "^1.4.0", - "expand-template": "^1.0.0", - "ghreleases": "^1.0.2", + "cmake-js": "^7.2.1", + "detect-libc": "^2.0.2", + "each-series-async": "^1.0.1", + "execspawn": "^1.0.1", + "ghreleases": "^3.0.2", "github-from-package": "0.0.0", - "minimist": "^1.1.2", - "mkdirp": "^0.5.1", - "node-gyp": "^3.0.3", - "noop-logger": "^0.1.0", - "npmlog": "^2.0.0", - "os-homedir": "^1.0.1", - "pump": "^1.0.0", - "rc": "^1.0.3", - "simple-get": "^1.4.2", - "tar-fs": "^1.7.0", - "tar-stream": "^1.2.1", - "xtend": "^4.0.1" + "glob": "^7.2.3", + "minimist": "^1.2.8", + "napi-build-utils": "^1.0.2", + "node-abi": "^3.47.0", + "node-gyp": "^9.4.0", + "node-ninja": "^1.0.2", + "noop-logger": "^0.1.1", + "npm-which": "^3.0.1", + "npmlog": "^7.0.1", + "nw-gyp": "^3.6.6", + "rc": "^1.2.8", + "run-waterfall": "^1.1.7", + "tar-stream": "^3.1.6" }, "bin": { "prebuild": "bin.js" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, "node_modules/prebuild-install": { @@ -5545,152 +6734,21 @@ "node": ">=10" } }, - "node_modules/prebuild/node_modules/bl": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/bl/-/bl-1.2.3.tgz", - "integrity": "sha512-pvcNpa0UU69UT341rO6AYy4FVAIkUHuZXRIWbq+zHnsVcRzDDjIAhGuuYoi0d//cwIwtt4pkpKycWEfjdV+vww==", + "node_modules/prebuild/node_modules/tar-stream": { + "version": "3.1.6", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-3.1.6.tgz", + "integrity": "sha512-B/UyjYwPpMBv+PaFSWAmtYjwdrlEaZQEhMIBFNC5oEG8lpiW8XjcSdmEaClj28ArfKScKHs2nshz3k2le6crsg==", "dev": true, "dependencies": { - "readable-stream": "^2.3.5", - "safe-buffer": "^5.1.1" + "b4a": "^1.6.4", + "fast-fifo": "^1.2.0", + "streamx": "^2.15.0" } }, - "node_modules/prebuild/node_modules/decompress-response": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz", - "integrity": "sha512-BzRPQuY1ip+qDonAOz42gRm/pg9F768C+npV/4JOsxRC2sq+Rlk+Q4ZCAsOhnIaMrgarILY+RMUIvMmmX1qAEA==", - "dev": true, - "dependencies": { - "mimic-response": "^1.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/prebuild/node_modules/expand-template": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/expand-template/-/expand-template-1.1.1.tgz", - "integrity": "sha512-cebqLtV8KOZfw0UI8TEFWxtczxxC1jvyUvx6H4fyp1K1FN7A4Q+uggVUlOsI1K8AGU0rwOGqP8nCapdrw8CYQg==", - "dev": true - }, - "node_modules/prebuild/node_modules/gauge": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/gauge/-/gauge-1.2.7.tgz", - "integrity": "sha512-fVbU2wRE91yDvKUnrIaQlHKAWKY5e08PmztCrwuH5YVQ+Z/p3d0ny2T48o6uvAAXHIUnfaQdHkmxYbQft1eHVA==", - "dev": true, - "dependencies": { - "ansi": "^0.3.0", - "has-unicode": "^2.0.0", - "lodash.pad": "^4.1.0", - "lodash.padend": "^4.1.0", - "lodash.padstart": "^4.1.0" - } - }, - "node_modules/prebuild/node_modules/mimic-response": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", - "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/prebuild/node_modules/npmlog": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-2.0.4.tgz", - "integrity": "sha512-DaL6RTb8Qh4tMe2ttPT1qWccETy2Vi5/8p+htMpLBeXJTr2CAqnF5WQtSP2eFpvaNbhLZ5uilDb98mRm4Q+lZQ==", - "dev": true, - "dependencies": { - "ansi": "~0.3.1", - "are-we-there-yet": "~1.1.2", - "gauge": "~1.2.5" - } - }, - "node_modules/prebuild/node_modules/pump": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/pump/-/pump-1.0.3.tgz", - "integrity": "sha512-8k0JupWme55+9tCVE+FS5ULT3K6AbgqrGa58lTT49RpyfwwcGedHqaC5LlQNdEAumn/wFsu6aPwkuPMioy8kqw==", - "dev": true, - "dependencies": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, - "node_modules/prebuild/node_modules/readable-stream": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", - "dev": true, - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "node_modules/prebuild/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, - "node_modules/prebuild/node_modules/simple-get": { - "version": "2.8.2", - "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-2.8.2.tgz", - "integrity": "sha512-Ijd/rV5o+mSBBs4F/x9oDPtTx9Zb6X9brmnXvMW4J7IR15ngi9q5xxqWBKU744jTZiaXtxaPL7uHG6vtN8kUkw==", - "dev": true, - "dependencies": { - "decompress-response": "^3.3.0", - "once": "^1.3.1", - "simple-concat": "^1.0.0" - } - }, - "node_modules/prebuild/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, - "node_modules/prebuild/node_modules/tar-fs": { - "version": "1.16.3", - "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-1.16.3.tgz", - "integrity": "sha512-NvCeXpYx7OsmOh8zIOP/ebG55zZmxLE0etfWRbWok+q2Qo8x/vOR/IJT1taADXPe+jsiu9axDb3X4B+iIgNlKw==", - "dev": true, - "dependencies": { - "chownr": "^1.0.1", - "mkdirp": "^0.5.1", - "pump": "^1.0.0", - "tar-stream": "^1.1.2" - } - }, - "node_modules/prebuild/node_modules/tar-stream": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-1.6.2.tgz", - "integrity": "sha512-rzS0heiNf8Xn7/mpdSVVSMAWAoy9bfb1WOTYC78Z0UQKeKa/CWS8FOq0lKGNa8DWKAn9gxjCvMLYc5PGXYlK2A==", - "dev": true, - "dependencies": { - "bl": "^1.0.0", - "buffer-alloc": "^1.2.0", - "end-of-stream": "^1.0.0", - "fs-constants": "^1.0.0", - "readable-stream": "^2.3.0", - "to-buffer": "^1.1.1", - "xtend": "^4.0.0" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/prelude-ls": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", - "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "node_modules/prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", "dev": true, "engines": { "node": ">= 0.8.0" @@ -5737,12 +6795,40 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, + "node_modules/process": { + "version": "0.11.10", + "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", + "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==", + "dev": true, + "engines": { + "node": ">= 0.6.0" + } + }, "node_modules/process-nextick-args": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", "dev": true }, + "node_modules/promise-inflight": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", + "integrity": "sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g==", + "dev": true + }, + "node_modules/promise-retry": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/promise-retry/-/promise-retry-2.0.1.tgz", + "integrity": "sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==", + "dev": true, + "dependencies": { + "err-code": "^2.0.2", + "retry": "^0.12.0" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/prompts": { "version": "2.4.2", "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", @@ -5756,6 +6842,12 @@ "node": ">= 6" } }, + "node_modules/proxy-from-env": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", + "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", + "dev": true + }, "node_modules/psl": { "version": "1.9.0", "resolved": "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz", @@ -5825,6 +6917,12 @@ } ] }, + "node_modules/queue-tick": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/queue-tick/-/queue-tick-1.0.1.tgz", + "integrity": "sha512-kJt5qhMxoszgU/62PLP1CJytzd2NKetjSRnyuj31fDd3Rlcz3fzlFdFLD1SItunPwyqEOkca6GbV612BWfaBag==", + "dev": true + }, "node_modules/randombytes": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", @@ -5924,6 +7022,20 @@ "node": ">= 6" } }, + "node_modules/request/node_modules/form-data": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", + "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", + "dev": true, + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.6", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 0.12" + } + }, "node_modules/require-directory": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", @@ -5989,6 +7101,15 @@ "node": ">=10" } }, + "node_modules/retry": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", + "integrity": "sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, "node_modules/reusify": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", @@ -6037,6 +7158,26 @@ "queue-microtask": "^1.2.2" } }, + "node_modules/run-waterfall": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/run-waterfall/-/run-waterfall-1.1.7.tgz", + "integrity": "sha512-iFPgh7SatHXOG1ClcpdwHI63geV3Hc/iL6crGSyBlH2PY7Rm/za+zoKz6FfY/Qlw5K7JwSol8pseO8fN6CMhhQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, "node_modules/safe-buffer": { "version": "5.2.1", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", @@ -6243,6 +7384,44 @@ "node": ">=8" } }, + "node_modules/smart-buffer": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", + "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==", + "dev": true, + "engines": { + "node": ">= 6.0.0", + "npm": ">= 3.0.0" + } + }, + "node_modules/socks": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/socks/-/socks-2.7.1.tgz", + "integrity": "sha512-7maUZy1N7uo6+WVEX6psASxtNlKaNVMlGQKkG/63nEDdLOWNbiUMoLK7X4uYoLhQstau72mLgfEWcXcwsaHbYQ==", + "dev": true, + "dependencies": { + "ip": "^2.0.0", + "smart-buffer": "^4.2.0" + }, + "engines": { + "node": ">= 10.13.0", + "npm": ">= 3.0.0" + } + }, + "node_modules/socks-proxy-agent": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-7.0.0.tgz", + "integrity": "sha512-Fgl0YPZ902wEsAyiQ+idGd1A7rSFx/ayC1CQVMw5P+EQx2V0SgpGtf6OKFhVjPflPUl9YMmEOnmfjCdMUsygww==", + "dev": true, + "dependencies": { + "agent-base": "^6.0.2", + "debug": "^4.3.3", + "socks": "^2.6.2" + }, + "engines": { + "node": ">= 10" + } + }, "node_modules/source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", @@ -6275,9 +7454,9 @@ "dev": true }, "node_modules/sshpk": { - "version": "1.17.0", - "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.17.0.tgz", - "integrity": "sha512-/9HIEs1ZXGhSPE8X6Ccm7Nam1z8KcoCqPdI7ecm1N33EzAetWahvQWVqLZtaZQ+IDKX4IyA2o0gBzqIMkAagHQ==", + "version": "1.18.0", + "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.18.0.tgz", + "integrity": "sha512-2p2KJZTSqQ/I3+HX42EpYOa2l3f8Erv8MWKsy2I9uf4wA7yFIkXRffYdsx86y6z4vHtV8u7g+pPlr8/4ouAxsQ==", "dev": true, "dependencies": { "asn1": "~0.2.3", @@ -6299,6 +7478,18 @@ "node": ">=0.10.0" } }, + "node_modules/ssri": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-9.0.1.tgz", + "integrity": "sha512-o57Wcn66jMQvfHG1FlYbWeZWW/dHZhJXjpIcTfXldXEk5nz5lStPo3mK0OJQfGR3RbZUlbISexbljkJzuEj/8Q==", + "dev": true, + "dependencies": { + "minipass": "^3.1.1" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, "node_modules/stack-utils": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz", @@ -6320,6 +7511,16 @@ "node": ">=8" } }, + "node_modules/streamx": { + "version": "2.15.5", + "resolved": "https://registry.npmjs.org/streamx/-/streamx-2.15.5.tgz", + "integrity": "sha512-9thPGMkKC2GctCzyCUjME3yR03x2xNo0GPKGkRw2UMYN+gqWa9uqpyNWhmsNCutU5zHmkUum0LsCRQTXUgUCAg==", + "dev": true, + "dependencies": { + "fast-fifo": "^1.1.0", + "queue-tick": "^1.0.1" + } + }, "node_modules/string_decoder": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", @@ -6342,38 +7543,17 @@ } }, "node_modules/string-width": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha512-0XsVpQLnVCXHJfyEs8tC0zpTVIr5PKKsQtkT29IwupnPTjtPmQ3xT/4yCREF9hYkV/3M3kzcUTSAZT6a6h81tw==", - "dev": true, - "dependencies": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/string-width/node_modules/ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/string-width/node_modules/strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==", + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "dev": true, "dependencies": { - "ansi-regex": "^2.0.0" + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" }, "engines": { - "node": ">=0.10.0" + "node": ">=8" } }, "node_modules/strip-ansi": { @@ -6452,21 +7632,20 @@ } }, "node_modules/tar": { - "version": "4.4.19", - "resolved": "https://registry.npmjs.org/tar/-/tar-4.4.19.tgz", - "integrity": "sha512-a20gEsvHnWe0ygBY8JbxoM4w3SJdhc7ZAuxkLqh+nvNQN2IOt0B5lLgM490X5Hl8FF0dl0tOf2ewFYAlIFgzVA==", + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/tar/-/tar-6.2.0.tgz", + "integrity": "sha512-/Wo7DcT0u5HUV486xg675HtjNd3BXZ6xDbzsCUZPt5iw8bTQ63bP0Raut3mvro9u+CUyq7YQd8Cx55fsZXxqLQ==", "dev": true, "dependencies": { - "chownr": "^1.1.4", - "fs-minipass": "^1.2.7", - "minipass": "^2.9.0", - "minizlib": "^1.3.3", - "mkdirp": "^0.5.5", - "safe-buffer": "^5.2.1", - "yallist": "^3.1.1" + "chownr": "^2.0.0", + "fs-minipass": "^2.0.0", + "minipass": "^5.0.0", + "minizlib": "^2.1.1", + "mkdirp": "^1.0.3", + "yallist": "^4.0.0" }, "engines": { - "node": ">=4.5" + "node": ">=10" } }, "node_modules/tar-fs": { @@ -6505,6 +7684,42 @@ "readable-stream": "^3.4.0" } }, + "node_modules/tar/node_modules/chownr": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", + "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/tar/node_modules/minipass": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", + "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/tar/node_modules/mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "dev": true, + "bin": { + "mkdirp": "bin/cmd.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/tar/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, "node_modules/terser": { "version": "5.20.0", "resolved": "https://registry.npmjs.org/terser/-/terser-5.20.0.tgz", @@ -6632,12 +7847,6 @@ "xtend": ">=4.0.0 <4.1.0-0" } }, - "node_modules/through2/node_modules/isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==", - "dev": true - }, "node_modules/through2/node_modules/readable-stream": { "version": "1.0.34", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", @@ -6662,12 +7871,6 @@ "integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==", "dev": true }, - "node_modules/to-buffer": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/to-buffer/-/to-buffer-1.1.1.tgz", - "integrity": "sha512-lx9B5iv7msuFYE3dytT+KE5tap+rNYw+K4jVkb9R/asAb+pbBSM17jtunHplhBe6RRJdZx3Pn2Jph24O32mOVg==", - "dev": true - }, "node_modules/to-fast-properties": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", @@ -6783,6 +7986,12 @@ "integrity": "sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==", "dev": true }, + "node_modules/type": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/type/-/type-1.2.0.tgz", + "integrity": "sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==", + "dev": true + }, "node_modules/type-check": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", @@ -6898,7 +8107,40 @@ "node": ">=0.8.0" } }, - "node_modules/update-browserslist-db": { + "node_modules/unique-filename": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-2.0.1.tgz", + "integrity": "sha512-ODWHtkkdx3IAR+veKxFV+VBkUMcN+FaqzUUd7IZzt+0zhDZFPFxhlqwPF3YQvMHx1TD0tdgYl+kuPnJ8E6ql7A==", + "dev": true, + "dependencies": { + "unique-slug": "^3.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/unique-slug": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-3.0.0.tgz", + "integrity": "sha512-8EyMynh679x/0gqE9fT9oilG+qEt+ibFyqjuVTsZn1+CMxH+XLlpvr2UZx4nVcCwTpx81nICr2JQFkM+HPLq4w==", + "dev": true, + "dependencies": { + "imurmurhash": "^0.1.4" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/universalify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", + "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", + "dev": true, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/update-browserslist-db": { "version": "1.0.11", "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.11.tgz", "integrity": "sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA==", @@ -6937,6 +8179,12 @@ "punycode": "^2.1.0" } }, + "node_modules/url-join": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/url-join/-/url-join-4.0.1.tgz", + "integrity": "sha512-jk1+QP6ZJqyOiuEI9AEWQfju/nB2Pw466kbA0LEZljHwKeMgd9WrAEgEGxjPDD2+TNbbb37rTyhEfrCXfuKXnA==", + "dev": true + }, "node_modules/url-template": { "version": "2.0.8", "resolved": "https://registry.npmjs.org/url-template/-/url-template-2.0.8.tgz", @@ -6948,6 +8196,12 @@ "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" }, + "node_modules/util-extend": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/util-extend/-/util-extend-1.0.3.tgz", + "integrity": "sha512-mLs5zAK+ctllYBj+iAQvlDCwoxU/WDOUaJkcFudeiAX6OajC6BKXJUa9a+tbtkC11dz2Ufb7h0lyvIOVn4LADA==", + "dev": true + }, "node_modules/uuid": { "version": "3.4.0", "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", @@ -7202,29 +8456,6 @@ "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, - "node_modules/wrap-ansi/node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/wrap-ansi/node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", @@ -7294,29 +8525,6 @@ "node": ">=12" } }, - "node_modules/yargs/node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/yargs/node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/yocto-queue": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", @@ -7890,6 +9098,12 @@ "integrity": "sha512-P6omY1zv5MItm93kLM8s2vr1HICJH8v0dvddDhysbIuZ+vcjOHg5Zbkf1mTkcmi2JA9oBG2anOkRnW8WJTS8Og==", "dev": true }, + "@gar/promisify": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@gar/promisify/-/promisify-1.1.3.tgz", + "integrity": "sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw==", + "dev": true + }, "@humanwhocodes/config-array": { "version": "0.11.10", "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.10.tgz", @@ -8291,6 +9505,34 @@ "fastq": "^1.6.0" } }, + "@npmcli/fs": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-2.1.2.tgz", + "integrity": "sha512-yOJKRvohFOaLqipNtwYB9WugyZKhC/DZC4VYPmpaCzDBrA8YpK3qHZ8/HGscMnE4GqbkLNuVcCnxkeQEdGt6LQ==", + "dev": true, + "requires": { + "@gar/promisify": "^1.1.3", + "semver": "^7.3.5" + } + }, + "@npmcli/move-file": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@npmcli/move-file/-/move-file-2.0.1.tgz", + "integrity": "sha512-mJd2Z5TjYWq/ttPLLGqArdtnC74J6bOzg4rMDnN+p1xTacZ2yPRCk2y0oSWQtygLR9YVQXgOcONrwtnk3JupxQ==", + "dev": true, + "requires": { + "mkdirp": "^1.0.4", + "rimraf": "^3.0.2" + }, + "dependencies": { + "mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "dev": true + } + } + }, "@sinclair/typebox": { "version": "0.27.8", "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz", @@ -8315,6 +9557,12 @@ "@sinonjs/commons": "^3.0.0" } }, + "@tootallnate/once": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz", + "integrity": "sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==", + "dev": true + }, "@types/babel__core": { "version": "7.20.1", "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.1.tgz", @@ -8747,6 +9995,15 @@ "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", "dev": true }, + "abort-controller": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", + "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==", + "dev": true, + "requires": { + "event-target-shim": "^5.0.0" + } + }, "acorn": { "version": "8.10.0", "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.10.0.tgz", @@ -8773,6 +10030,34 @@ "integrity": "sha512-QbJ0NTQ/I9DI3uSJA4cbexiwQeRAfjPScqIbSjUDd9TOrcg6pTkdgziesOqxBMBzit8vFCTwrP27t13vFOORRA==", "dev": true }, + "agent-base": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "dev": true, + "requires": { + "debug": "4" + } + }, + "agentkeepalive": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.5.0.tgz", + "integrity": "sha512-5GG/5IbQQpC9FpkRGsSvZI5QYeSCzlJHdpBQntCsuTOxhKD8lqKhrleg2Yi7yvMIf82Ycmmqln9U8V9qwEiJew==", + "dev": true, + "requires": { + "humanize-ms": "^1.2.1" + } + }, + "aggregate-error": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", + "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", + "dev": true, + "requires": { + "clean-stack": "^2.0.0", + "indent-string": "^4.0.0" + } + }, "ajv": { "version": "6.12.6", "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", @@ -8847,49 +10132,42 @@ } }, "aproba": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", - "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/aproba/-/aproba-2.0.0.tgz", + "integrity": "sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==", "dev": true }, "are-we-there-yet": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.7.tgz", - "integrity": "sha512-nxwy40TuMiUGqMyRHgCSWZ9FM4VAoRP4xUYSTv5ImRog+h9yISPbVH7H8fASCIzYn9wlEv4zvFL7uKDMCFQm3g==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-4.0.1.tgz", + "integrity": "sha512-2zuA+jpOYBRgoBCfa+fB87Rk0oGJjDX6pxGzqH6f33NzUhG25Xur6R0u0Z9VVAq8Z5JvQpQI6j6rtonuivC8QA==", "dev": true, "requires": { "delegates": "^1.0.0", - "readable-stream": "^2.0.6" + "readable-stream": "^4.1.0" }, "dependencies": { - "readable-stream": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "buffer": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", + "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", "dev": true, "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" + "base64-js": "^1.3.1", + "ieee754": "^1.2.1" } }, - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "readable-stream": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-4.4.2.tgz", + "integrity": "sha512-Lk/fICSyIhodxy1IDK2HazkeGjSmezAWX2egdtJnYhtzKEsBPJowlI6F6LPb5tqIQILrMbx22S5o3GuJavPusA==", "dev": true, "requires": { - "safe-buffer": "~5.1.0" + "abort-controller": "^3.0.0", + "buffer": "^6.0.3", + "events": "^3.3.0", + "process": "^0.11.10", + "string_decoder": "^1.3.0" } } } @@ -8900,6 +10178,33 @@ "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", "dev": true }, + "array-index": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/array-index/-/array-index-1.0.0.tgz", + "integrity": "sha512-jesyNbBkLQgGZMSwA1FanaFjalb1mZUGxGeUEkSDidzgrbjBGhvizJkaItdhkt8eIHFOJC7nDsrXk+BaehTdRw==", + "dev": true, + "requires": { + "debug": "^2.2.0", + "es6-symbol": "^3.0.2" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + } + } + }, "array-union": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", @@ -8921,12 +10226,6 @@ "integrity": "sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==", "dev": true }, - "async": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", - "integrity": "sha512-nSVgobk4rv61R9PUSDtYt7mPVB2olxNR5RWJcAsH676/ef11bUZwvu7+RGYrYauVdDPcO519v68wRhXQtxsV9w==", - "dev": true - }, "asynckit": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", @@ -8945,6 +10244,23 @@ "integrity": "sha512-NmWvPnx0F1SfrQbYwOi7OeaNGokp9XhzNioJ/CSBs8Qa4vxug81mhJEAVZwxXuBmYB5KDRfMq/F3RR0BIU7sWg==", "dev": true }, + "axios": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.6.2.tgz", + "integrity": "sha512-7i24Ri4pmDRfJTR7LDBhsOTtcm+9kjX5WiY1X3wIisx6G9So3pfMkEiU7emUBe46oceVImccTEM3k6C5dbVW8A==", + "dev": true, + "requires": { + "follow-redirects": "^1.15.0", + "form-data": "^4.0.0", + "proxy-from-env": "^1.1.0" + } + }, + "b4a": { + "version": "1.6.4", + "resolved": "https://registry.npmjs.org/b4a/-/b4a-1.6.4.tgz", + "integrity": "sha512-fpWrvyVHEKyeEvbKZTVOeZF3VSKKWtJxFIxX/jaVPf+cLbGUSitjb49pHLqPV2BUNNZ0LcoeEGfE/YCpyDYHIw==", + "dev": true + }, "babel-jest": { "version": "29.6.2", "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-29.6.2.tgz", @@ -9044,6 +10360,15 @@ "readable-stream": "^3.0.1" } }, + "block-stream": { + "version": "0.0.9", + "resolved": "https://registry.npmjs.org/block-stream/-/block-stream-0.0.9.tgz", + "integrity": "sha512-OorbnJVPII4DuUKbjARAe8u8EfqOmkEEaSFIyoQ7OjTHn6kafxWl0wLgoZ2rXaYd7MyLcDaU4TmhfxtwgcccMQ==", + "dev": true, + "requires": { + "inherits": "~2.0.0" + } + }, "brace-expansion": { "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", @@ -9102,34 +10427,89 @@ "ieee754": "^1.1.13" } }, - "buffer-alloc": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/buffer-alloc/-/buffer-alloc-1.2.0.tgz", - "integrity": "sha512-CFsHQgjtW1UChdXgbyJGtnm+O/uLQeZdtbDo8mfUgYXCHSM1wgrVxXm6bSyrUuErEb+4sYVGCzASBRot7zyrow==", - "dev": true, - "requires": { - "buffer-alloc-unsafe": "^1.1.0", - "buffer-fill": "^1.0.0" - } - }, - "buffer-alloc-unsafe": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz", - "integrity": "sha512-TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg==", - "dev": true - }, - "buffer-fill": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/buffer-fill/-/buffer-fill-1.0.0.tgz", - "integrity": "sha512-T7zexNBwiiaCOGDg9xNX9PBmjrubblRkENuptryuI64URkXDFum9il/JGL8Lm8wYfAXpredVXXZz7eMHilimiQ==", - "dev": true - }, "buffer-from": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-0.1.2.tgz", "integrity": "sha512-RiWIenusJsmI2KcvqQABB83tLxCByE3upSP8QU3rJDMVFGPWLvPQJt/O1Su9moRWeH7d+Q2HYb68f6+v+tw2vg==", "dev": true }, + "cacache": { + "version": "16.1.3", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-16.1.3.tgz", + "integrity": "sha512-/+Emcj9DAXxX4cwlLmRI9c166RuL3w30zp4R7Joiv2cQTtTtA+jeuCAjH3ZlGnYS3tKENSrKhAzVVP9GVyzeYQ==", + "dev": true, + "requires": { + "@npmcli/fs": "^2.1.0", + "@npmcli/move-file": "^2.0.0", + "chownr": "^2.0.0", + "fs-minipass": "^2.1.0", + "glob": "^8.0.1", + "infer-owner": "^1.0.4", + "lru-cache": "^7.7.1", + "minipass": "^3.1.6", + "minipass-collect": "^1.0.2", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "mkdirp": "^1.0.4", + "p-map": "^4.0.0", + "promise-inflight": "^1.0.1", + "rimraf": "^3.0.2", + "ssri": "^9.0.0", + "tar": "^6.1.11", + "unique-filename": "^2.0.0" + }, + "dependencies": { + "brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "requires": { + "balanced-match": "^1.0.0" + } + }, + "chownr": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", + "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", + "dev": true + }, + "glob": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz", + "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^5.0.1", + "once": "^1.3.0" + } + }, + "lru-cache": { + "version": "7.18.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", + "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", + "dev": true + }, + "minimatch": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", + "dev": true, + "requires": { + "brace-expansion": "^2.0.1" + } + }, + "mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "dev": true + } + } + }, "callsites": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", @@ -9203,6 +10583,12 @@ "resolved": "https://registry.npmjs.org/class-transformer/-/class-transformer-0.5.1.tgz", "integrity": "sha512-SQa1Ws6hUbfC98vKGxZH3KFY0Y1lm5Zm0SY8XX9zbK7FJCyVEac3ATW0RIpwzW+oOfmHE5PMPufDG9hCfoEOMw==" }, + "clean-stack": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", + "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", + "dev": true + }, "cliui": { "version": "8.0.1", "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", @@ -9212,25 +10598,6 @@ "string-width": "^4.2.0", "strip-ansi": "^6.0.1", "wrap-ansi": "^7.0.0" - }, - "dependencies": { - "is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true - }, - "string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - } - } } }, "clone-deep": { @@ -9244,6 +10611,67 @@ "shallow-clone": "^3.0.0" } }, + "cmake-js": { + "version": "7.2.1", + "resolved": "https://registry.npmjs.org/cmake-js/-/cmake-js-7.2.1.tgz", + "integrity": "sha512-AdPSz9cSIJWdKvm0aJgVu3X8i0U3mNTswJkSHzZISqmYVjZk7Td4oDFg0mCBA383wO+9pG5Ix7pEP1CZH9x2BA==", + "dev": true, + "requires": { + "axios": "^1.3.2", + "debug": "^4", + "fs-extra": "^10.1.0", + "lodash.isplainobject": "^4.0.6", + "memory-stream": "^1.0.0", + "node-api-headers": "^0.0.2", + "npmlog": "^6.0.2", + "rc": "^1.2.7", + "semver": "^7.3.8", + "tar": "^6.1.11", + "url-join": "^4.0.1", + "which": "^2.0.2", + "yargs": "^17.6.0" + }, + "dependencies": { + "are-we-there-yet": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-3.0.1.tgz", + "integrity": "sha512-QZW4EDmGwlYur0Yyf/b2uGucHQMa8aFUP7eu9ddR73vvhFyt4V0Vl3QHPcTNJ8l6qYOBdxgXdnBXQrHilfRQBg==", + "dev": true, + "requires": { + "delegates": "^1.0.0", + "readable-stream": "^3.6.0" + } + }, + "gauge": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/gauge/-/gauge-4.0.4.tgz", + "integrity": "sha512-f9m+BEN5jkg6a0fZjleidjN51VE1X+mPFQ2DJ0uv1V39oCLCbsGe6yjbBnp7eK7z/+GAon99a3nHuqbuuthyPg==", + "dev": true, + "requires": { + "aproba": "^1.0.3 || ^2.0.0", + "color-support": "^1.1.3", + "console-control-strings": "^1.1.0", + "has-unicode": "^2.0.1", + "signal-exit": "^3.0.7", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1", + "wide-align": "^1.1.5" + } + }, + "npmlog": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-6.0.2.tgz", + "integrity": "sha512-/vBvz5Jfr9dT/aFWd0FIRf+T/Q2WBsLENygUaFUqstqsycmZAP/t5BvFJTK0viFmSUxiUKTUplWy5vt+rvKIxg==", + "dev": true, + "requires": { + "are-we-there-yet": "^3.0.0", + "console-control-strings": "^1.1.0", + "gauge": "^4.0.3", + "set-blocking": "^2.0.0" + } + } + } + }, "co": { "version": "4.6.0", "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", @@ -9277,6 +10705,12 @@ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, + "color-support": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", + "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==", + "dev": true + }, "colorette": { "version": "2.0.20", "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz", @@ -9333,6 +10767,16 @@ "which": "^2.0.1" } }, + "d": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/d/-/d-1.0.1.tgz", + "integrity": "sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==", + "dev": true, + "requires": { + "es5-ext": "^0.10.50", + "type": "^1.0.1" + } + }, "dashdash": { "version": "1.14.1", "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", @@ -9445,12 +10889,6 @@ "readable-stream": "~1.1.9" }, "dependencies": { - "isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==", - "dev": true - }, "readable-stream": { "version": "1.1.14", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", @@ -9471,6 +10909,12 @@ } } }, + "each-series-async": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/each-series-async/-/each-series-async-1.0.1.tgz", + "integrity": "sha512-G4zip/Ewpwr6JQxW7+2RNgkPd09h/UNec5UlvA/xKwl4qf5blyBNK6a/zjQc3MojgsxaOb93B9v3T92QU6IMVg==", + "dev": true + }, "ecc-jsbn": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", @@ -9509,6 +10953,16 @@ "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", "dev": true }, + "encoding": { + "version": "0.1.13", + "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz", + "integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==", + "dev": true, + "optional": true, + "requires": { + "iconv-lite": "^0.6.2" + } + }, "end-of-stream": { "version": "1.4.4", "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", @@ -9527,12 +10981,24 @@ "tapable": "^2.2.0" } }, + "env-paths": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", + "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", + "dev": true + }, "envinfo": { "version": "7.10.0", "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.10.0.tgz", "integrity": "sha512-ZtUjZO6l5mwTHvc1L9+1q5p/R3wTopcfqMW8r5t8SJSKqeVI/LtajORwRFEKpEFuekjD0VBjwu1HMxL4UalIRw==", "dev": true }, + "err-code": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/err-code/-/err-code-2.0.3.tgz", + "integrity": "sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==", + "dev": true + }, "error-ex": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", @@ -9548,6 +11014,38 @@ "integrity": "sha512-JUFAyicQV9mXc3YRxPnDlrfBKpqt6hUYzz9/boprUJHs4e4KVr3XwOF70doO6gwXUor6EWZJAyWAfKki84t20Q==", "dev": true }, + "es5-ext": { + "version": "0.10.62", + "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.62.tgz", + "integrity": "sha512-BHLqn0klhEpnOKSrzn/Xsz2UIW8j+cGmo9JLzr8BiUapV8hPL9+FliFqjwr9ngW7jWdnxv6eO+/LqyhJVqgrjA==", + "dev": true, + "requires": { + "es6-iterator": "^2.0.3", + "es6-symbol": "^3.1.3", + "next-tick": "^1.1.0" + } + }, + "es6-iterator": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", + "integrity": "sha512-zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g==", + "dev": true, + "requires": { + "d": "1", + "es5-ext": "^0.10.35", + "es6-symbol": "^3.1.1" + } + }, + "es6-symbol": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.3.tgz", + "integrity": "sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA==", + "dev": true, + "requires": { + "d": "^1.0.1", + "ext": "^1.1.2" + } + }, "escalade": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", @@ -9709,6 +11207,12 @@ "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", "dev": true }, + "event-target-shim": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz", + "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==", + "dev": true + }, "events": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", @@ -9732,6 +11236,15 @@ "strip-final-newline": "^2.0.0" } }, + "execspawn": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/execspawn/-/execspawn-1.0.1.tgz", + "integrity": "sha512-s2k06Jy9i8CUkYe0+DxRlvtkZoOkwwfhB+Xxo5HGUtrISVW2m98jO2tr67DGRFxZwkjQqloA3v/tNtjhBRBieg==", + "dev": true, + "requires": { + "util-extend": "^1.0.1" + } + }, "exit": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", @@ -9757,6 +11270,29 @@ "jest-util": "^29.6.2" } }, + "exponential-backoff": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/exponential-backoff/-/exponential-backoff-3.1.1.tgz", + "integrity": "sha512-dX7e/LHVJ6W3DE1MHWi9S1EYzDESENfLrYohG2G++ovZrYOkm4Knwa0mc1cn84xJOR4KEU0WSchhLbd0UklbHw==", + "dev": true + }, + "ext": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/ext/-/ext-1.7.0.tgz", + "integrity": "sha512-6hxeJYaL110a9b5TEJSj0gojyHQAmA2ch5Os+ySCiA1QGdS697XWY1pzsrSjqA9LDEEgdB/KypIlR59RcLuHYw==", + "dev": true, + "requires": { + "type": "^2.7.2" + }, + "dependencies": { + "type": { + "version": "2.7.2", + "resolved": "https://registry.npmjs.org/type/-/type-2.7.2.tgz", + "integrity": "sha512-dzlvlNlt6AXU7EBSfpAscydQ7gXB+pPGsPnfJnZpiNJBDj7IaJzQlBZYGdEi4R9HmPdBv2XmWJ6YUtoTa7lmCw==", + "dev": true + } + } + }, "extend": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", @@ -9775,6 +11311,12 @@ "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", "dev": true }, + "fast-fifo": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/fast-fifo/-/fast-fifo-1.3.2.tgz", + "integrity": "sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ==", + "dev": true + }, "fast-glob": { "version": "3.3.1", "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.1.tgz", @@ -9879,6 +11421,12 @@ "integrity": "sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==", "dev": true }, + "follow-redirects": { + "version": "1.15.3", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.3.tgz", + "integrity": "sha512-1VzOtuEM8pC9SFU1E+8KfTjZyMztRsgEfwQl44z8A25uy13jSzTj6dyK2Df52iV0vgHCfBwLhDWevLn95w5v6Q==", + "dev": true + }, "forever-agent": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", @@ -9886,13 +11434,13 @@ "dev": true }, "form-data": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", - "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", + "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", "dev": true, "requires": { "asynckit": "^0.4.0", - "combined-stream": "^1.0.6", + "combined-stream": "^1.0.8", "mime-types": "^2.1.12" } }, @@ -9901,13 +11449,24 @@ "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==" }, + "fs-extra": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", + "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", + "dev": true, + "requires": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + } + }, "fs-minipass": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-1.2.7.tgz", - "integrity": "sha512-GWSSJGFy4e9GUeCcbIkED+bgAoFyj7XF1mV8rma3QW4NIqX9Kyx79N/PF61H5udOV3aY1IaMLs6pGbH71nlCTA==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", + "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", "dev": true, "requires": { - "minipass": "^2.6.0" + "minipass": "^3.0.0" } }, "fs.realpath": { @@ -9953,35 +11512,26 @@ "dev": true }, "gauge": { - "version": "2.7.4", - "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", - "integrity": "sha512-14x4kjc6lkD3ltw589k0NrPD6cCNTD6CWoVUNpB85+DrtONoZn+Rug6xZU5RvSC4+TZPxA5AnBibQYAvZn41Hg==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/gauge/-/gauge-5.0.1.tgz", + "integrity": "sha512-CmykPMJGuNan/3S4kZOpvvPYSNqSHANiWnh9XcMU2pSjtBfF0XzZ2p1bFAxTbnFxyBuPxQYHhzwaoOmUdqzvxQ==", "dev": true, "requires": { - "aproba": "^1.0.3", - "console-control-strings": "^1.0.0", - "has-unicode": "^2.0.0", - "object-assign": "^4.1.0", - "signal-exit": "^3.0.0", - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1", - "wide-align": "^1.1.0" + "aproba": "^1.0.3 || ^2.0.0", + "color-support": "^1.1.3", + "console-control-strings": "^1.1.0", + "has-unicode": "^2.0.1", + "signal-exit": "^4.0.1", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1", + "wide-align": "^1.1.5" }, "dependencies": { - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==", + "signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", "dev": true - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==", - "dev": true, - "requires": { - "ansi-regex": "^2.0.0" - } } } }, @@ -10019,17 +11569,17 @@ } }, "ghreleases": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/ghreleases/-/ghreleases-1.0.7.tgz", - "integrity": "sha512-1lFGyLLF38Q6cFCDyebN5vzQ2P9DEaAgxPIDLmQwQDVDmUe2Wgv+6dhAIoHeA+My4HLpaJ+dKF73xtuykN2cbQ==", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/ghreleases/-/ghreleases-3.0.2.tgz", + "integrity": "sha512-QiR9mIYvRG7hd8JuQYoxeBNOelVuTp2DpdiByRywbCDBSJufK9Vq7VuhD8B+5uviMxZx2AEkCzye61Us9gYgnw==", "dev": true, "requires": { "after": "~0.8.1", "ghrepos": "~2.1.0", "ghutils": "~3.2.0", + "lodash.uniq": "^4.5.0", "simple-mime": "~0.1.0", - "url-template": "~2.0.6", - "xtend": "~4.0.0" + "url-template": "~2.0.6" } }, "ghrepos": { @@ -10176,6 +11726,23 @@ "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", "dev": true }, + "http-cache-semantics": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz", + "integrity": "sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==", + "dev": true + }, + "http-proxy-agent": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz", + "integrity": "sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==", + "dev": true, + "requires": { + "@tootallnate/once": "2", + "agent-base": "6", + "debug": "4" + } + }, "http-signature": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", @@ -10187,12 +11754,31 @@ "sshpk": "^1.7.0" } }, + "https-proxy-agent": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", + "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", + "dev": true, + "requires": { + "agent-base": "6", + "debug": "4" + } + }, "human-signals": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", "dev": true }, + "humanize-ms": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz", + "integrity": "sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==", + "dev": true, + "requires": { + "ms": "^2.0.0" + } + }, "hyperquest": { "version": "2.1.3", "resolved": "https://registry.npmjs.org/hyperquest/-/hyperquest-2.1.3.tgz", @@ -10204,6 +11790,16 @@ "through2": "~0.6.3" } }, + "iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "dev": true, + "optional": true, + "requires": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + } + }, "ieee754": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", @@ -10241,6 +11837,18 @@ "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", "dev": true }, + "indent-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", + "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", + "dev": true + }, + "infer-owner": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/infer-owner/-/infer-owner-1.0.4.tgz", + "integrity": "sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==", + "dev": true + }, "inflight": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", @@ -10267,6 +11875,12 @@ "integrity": "sha512-6xwYfHbajpoF0xLW+iwLkhwgvLoZDfjYfoFNu8ftMoXINzwuymNLd9u/KmwtdT2GbR+/Cz66otEGEVVUHX9QLQ==", "dev": true }, + "ip": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ip/-/ip-2.0.0.tgz", + "integrity": "sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ==", + "dev": true + }, "is-arrayish": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", @@ -10289,13 +11903,10 @@ "dev": true }, "is-fullwidth-code-point": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", - "integrity": "sha512-1pqUqRjkhPJ9miNq9SwMfdvi6lBJcd6eFxvfaivQhaH3SgisfiuudvFntdKOmxuee/77l+FPjKrQjWvmPjWrRw==", - "dev": true, - "requires": { - "number-is-nan": "^1.0.0" - } + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true }, "is-generator-fn": { "version": "2.1.0", @@ -10312,6 +11923,12 @@ "is-extglob": "^2.1.1" } }, + "is-lambda": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-lambda/-/is-lambda-1.0.1.tgz", + "integrity": "sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ==", + "dev": true + }, "is-number": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", @@ -10346,9 +11963,9 @@ "dev": true }, "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==", "dev": true }, "isexe": { @@ -10923,6 +12540,16 @@ "integrity": "sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w==", "dev": true }, + "jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.6", + "universalify": "^2.0.0" + } + }, "jsonist": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/jsonist/-/jsonist-2.1.2.tgz", @@ -10996,6 +12623,12 @@ "p-locate": "^5.0.0" } }, + "lodash.isplainobject": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", + "integrity": "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==", + "dev": true + }, "lodash.memoize": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", @@ -11026,6 +12659,12 @@ "integrity": "sha512-sW73O6S8+Tg66eY56DBk85aQzzUJDtpoXFBgELMd5P/SotAguo+1kYO6RuYgXxA4HJH3LFTFPASX6ET6bjfriw==", "dev": true }, + "lodash.uniq": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", + "integrity": "sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==", + "dev": true + }, "lru-cache": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", @@ -11056,6 +12695,38 @@ "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", "dev": true }, + "make-fetch-happen": { + "version": "10.2.1", + "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-10.2.1.tgz", + "integrity": "sha512-NgOPbRiaQM10DYXvN3/hhGVI2M5MtITFryzBGxHM5p4wnFxsVCbxkrBrDsk+EZ5OB4jEOT7AjDxtdF+KVEFT7w==", + "dev": true, + "requires": { + "agentkeepalive": "^4.2.1", + "cacache": "^16.1.0", + "http-cache-semantics": "^4.1.0", + "http-proxy-agent": "^5.0.0", + "https-proxy-agent": "^5.0.0", + "is-lambda": "^1.0.1", + "lru-cache": "^7.7.1", + "minipass": "^3.1.6", + "minipass-collect": "^1.0.2", + "minipass-fetch": "^2.0.3", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "negotiator": "^0.6.3", + "promise-retry": "^2.0.1", + "socks-proxy-agent": "^7.0.0", + "ssri": "^9.0.0" + }, + "dependencies": { + "lru-cache": { + "version": "7.18.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", + "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", + "dev": true + } + } + }, "makeerror": { "version": "1.0.12", "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz", @@ -11071,6 +12742,15 @@ "integrity": "sha512-PRsaiG84bK+AMvxziE/lCFss8juXjNaWzVbN5tXAm4XjeaS9NAHhop+PjQxz2A9h8Q4M/xGmzP8vqNwy6JeK0A==", "dev": true }, + "memory-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/memory-stream/-/memory-stream-1.0.0.tgz", + "integrity": "sha512-Wm13VcsPIMdG96dzILfij09PvuS3APtcKNh7M28FsCA/w6+1mjR7hhPmfFNoilX9xU7wTdhsH5lJAm6XNzdtww==", + "dev": true, + "requires": { + "readable-stream": "^3.4.0" + } + }, "merge-stream": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", @@ -11134,22 +12814,86 @@ "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==" }, "minipass": { - "version": "2.9.0", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-2.9.0.tgz", - "integrity": "sha512-wxfUjg9WebH+CUDX/CdbRlh5SmfZiy/hpkxaRI16Y9W56Pa75sWgd/rvFilSgrauD9NyFymP/+JFV3KwzIsJeg==", + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", "dev": true, "requires": { - "safe-buffer": "^5.1.2", - "yallist": "^3.0.0" + "yallist": "^4.0.0" + }, + "dependencies": { + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + } + } + }, + "minipass-collect": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/minipass-collect/-/minipass-collect-1.0.2.tgz", + "integrity": "sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA==", + "dev": true, + "requires": { + "minipass": "^3.0.0" + } + }, + "minipass-fetch": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-2.1.2.tgz", + "integrity": "sha512-LT49Zi2/WMROHYoqGgdlQIZh8mLPZmOrN2NdJjMXxYe4nkN6FUyuPuOAOedNJDrx0IRGg9+4guZewtp8hE6TxA==", + "dev": true, + "requires": { + "encoding": "^0.1.13", + "minipass": "^3.1.6", + "minipass-sized": "^1.0.3", + "minizlib": "^2.1.2" + } + }, + "minipass-flush": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz", + "integrity": "sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==", + "dev": true, + "requires": { + "minipass": "^3.0.0" + } + }, + "minipass-pipeline": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz", + "integrity": "sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==", + "dev": true, + "requires": { + "minipass": "^3.0.0" + } + }, + "minipass-sized": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/minipass-sized/-/minipass-sized-1.0.3.tgz", + "integrity": "sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g==", + "dev": true, + "requires": { + "minipass": "^3.0.0" } }, "minizlib": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-1.3.3.tgz", - "integrity": "sha512-6ZYMOEnmVsdCeTJVE0W9ZD+pVnE8h9Hma/iOwwRDsdQoePpoX56/8B6z3P9VNwppJuBKNRuFDRNRqRWexT9G9Q==", + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", + "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", "dev": true, "requires": { - "minipass": "^2.9.0" + "minipass": "^3.0.0", + "yallist": "^4.0.0" + }, + "dependencies": { + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + } } }, "mkdirp": { @@ -11189,40 +12933,189 @@ "integrity": "sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==", "dev": true }, + "negotiator": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", + "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", + "dev": true + }, "neo-async": { "version": "2.6.2", "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", "dev": true }, + "next-tick": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.1.0.tgz", + "integrity": "sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==", + "dev": true + }, "node-abi": { - "version": "3.46.0", - "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-3.46.0.tgz", - "integrity": "sha512-LXvP3AqTIrtvH/jllXjkNVbYifpRbt9ThTtymSMSuHmhugQLAWr99QQFTm+ZRht9ziUvdGOgB+esme1C6iE6Lg==", + "version": "3.51.0", + "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-3.51.0.tgz", + "integrity": "sha512-SQkEP4hmNWjlniS5zdnfIXTk1x7Ome85RDzHlTbBtzE97Gfwz/Ipw4v/Ryk20DWIy3yCNVLVlGKApCnmvYoJbA==", "requires": { "semver": "^7.3.5" } }, + "node-api-headers": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/node-api-headers/-/node-api-headers-0.0.2.tgz", + "integrity": "sha512-YsjmaKGPDkmhoNKIpkChtCsPVaRE0a274IdERKnuc/E8K1UJdBZ4/mvI006OijlQZHCfpRNOH3dfHQs92se8gg==", + "dev": true + }, "node-gyp": { - "version": "3.8.0", - "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-3.8.0.tgz", - "integrity": "sha512-3g8lYefrRRzvGeSowdJKAKyks8oUpLEd/DyPV4eMhVlhJ0aNaZqIrNUIPuEWWTAoPqyFkfGrM67MC69baqn6vA==", + "version": "9.4.1", + "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-9.4.1.tgz", + "integrity": "sha512-OQkWKbjQKbGkMf/xqI1jjy3oCTgMKJac58G2+bjZb3fza6gW2YrCSdMQYaoTb70crvE//Gngr4f0AgVHmqHvBQ==", + "dev": true, + "requires": { + "env-paths": "^2.2.0", + "exponential-backoff": "^3.1.1", + "glob": "^7.1.4", + "graceful-fs": "^4.2.6", + "make-fetch-happen": "^10.0.3", + "nopt": "^6.0.0", + "npmlog": "^6.0.0", + "rimraf": "^3.0.2", + "semver": "^7.3.5", + "tar": "^6.1.2", + "which": "^2.0.2" + }, + "dependencies": { + "are-we-there-yet": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-3.0.1.tgz", + "integrity": "sha512-QZW4EDmGwlYur0Yyf/b2uGucHQMa8aFUP7eu9ddR73vvhFyt4V0Vl3QHPcTNJ8l6qYOBdxgXdnBXQrHilfRQBg==", + "dev": true, + "requires": { + "delegates": "^1.0.0", + "readable-stream": "^3.6.0" + } + }, + "gauge": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/gauge/-/gauge-4.0.4.tgz", + "integrity": "sha512-f9m+BEN5jkg6a0fZjleidjN51VE1X+mPFQ2DJ0uv1V39oCLCbsGe6yjbBnp7eK7z/+GAon99a3nHuqbuuthyPg==", + "dev": true, + "requires": { + "aproba": "^1.0.3 || ^2.0.0", + "color-support": "^1.1.3", + "console-control-strings": "^1.1.0", + "has-unicode": "^2.0.1", + "signal-exit": "^3.0.7", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1", + "wide-align": "^1.1.5" + } + }, + "npmlog": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-6.0.2.tgz", + "integrity": "sha512-/vBvz5Jfr9dT/aFWd0FIRf+T/Q2WBsLENygUaFUqstqsycmZAP/t5BvFJTK0viFmSUxiUKTUplWy5vt+rvKIxg==", + "dev": true, + "requires": { + "are-we-there-yet": "^3.0.0", + "console-control-strings": "^1.1.0", + "gauge": "^4.0.3", + "set-blocking": "^2.0.0" + } + } + } + }, + "node-int64": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", + "integrity": "sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==", + "dev": true + }, + "node-ninja": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/node-ninja/-/node-ninja-1.0.2.tgz", + "integrity": "sha512-wMtWsG2QZI1Z5V7GciX9OI2DVT0PuDRIDQfe3L3rJsQ1qN1Gm3QQhoNtb4PMRi7gq4ByvEIYtPwHC7YbEf5yxw==", "dev": true, "requires": { "fstream": "^1.0.0", - "glob": "^7.0.3", + "glob": "3 || 4 || 5 || 6 || 7", "graceful-fs": "^4.1.2", + "minimatch": "3", "mkdirp": "^0.5.0", "nopt": "2 || 3", - "npmlog": "0 || 1 || 2 || 3 || 4", + "npmlog": "0 || 1 || 2", "osenv": "0", - "request": "^2.87.0", + "path-array": "^1.0.0", + "request": "2", "rimraf": "2", - "semver": "~5.3.0", + "semver": "2.x || 3.x || 4 || 5", "tar": "^4.4.19", "which": "1" }, "dependencies": { + "are-we-there-yet": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.7.tgz", + "integrity": "sha512-nxwy40TuMiUGqMyRHgCSWZ9FM4VAoRP4xUYSTv5ImRog+h9yISPbVH7H8fASCIzYn9wlEv4zvFL7uKDMCFQm3g==", + "dev": true, + "requires": { + "delegates": "^1.0.0", + "readable-stream": "^2.0.6" + } + }, + "gauge": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/gauge/-/gauge-1.2.7.tgz", + "integrity": "sha512-fVbU2wRE91yDvKUnrIaQlHKAWKY5e08PmztCrwuH5YVQ+Z/p3d0ny2T48o6uvAAXHIUnfaQdHkmxYbQft1eHVA==", + "dev": true, + "requires": { + "ansi": "^0.3.0", + "has-unicode": "^2.0.0", + "lodash.pad": "^4.1.0", + "lodash.padend": "^4.1.0", + "lodash.padstart": "^4.1.0" + } + }, + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "dev": true + }, + "nopt": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz", + "integrity": "sha512-4GUt3kSEYmk4ITxzB/b9vaIDfUVWN/Ml1Fwl11IlnIG2iaJ9O6WXZ9SrYM9NLI8OCBieN2Y8SWC2oJV0RQ7qYg==", + "dev": true, + "requires": { + "abbrev": "1" + } + }, + "npmlog": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-2.0.4.tgz", + "integrity": "sha512-DaL6RTb8Qh4tMe2ttPT1qWccETy2Vi5/8p+htMpLBeXJTr2CAqnF5WQtSP2eFpvaNbhLZ5uilDb98mRm4Q+lZQ==", + "dev": true, + "requires": { + "ansi": "~0.3.1", + "are-we-there-yet": "~1.1.2", + "gauge": "~1.2.5" + } + }, + "readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "dev": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, "rimraf": { "version": "2.7.1", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", @@ -11232,12 +13125,37 @@ "glob": "^7.1.3" } }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, "semver": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.3.0.tgz", - "integrity": "sha512-mfmm3/H9+67MCVix1h+IXTpDwL6710LyHuk7+cWC9T1mE0qz4iHhh6r4hU2wrIT9iTsAAC2XQRvfblL028cpLw==", + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", "dev": true }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "requires": { + "safe-buffer": "~5.1.0" + } + }, + "tar": { + "version": "https://registry.npmjs.org/tar/-/tar-2.2.2.tgz", + "integrity": "sha512-FCEhQ/4rE1zYv9rYXJw/msRqsnmlje5jHP6huWeBZ704jUTy02c5AZyWujpMR1ax6mVw9NyJMfuK2CMDWVIfgA==", + "dev": true, + "requires": { + "block-stream": "*", + "fstream": "^1.0.12", + "inherits": "2" + } + }, "which": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", @@ -11249,12 +13167,6 @@ } } }, - "node-int64": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", - "integrity": "sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==", - "dev": true - }, "node-releases": { "version": "2.0.13", "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.13.tgz", @@ -11268,12 +13180,12 @@ "dev": true }, "nopt": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz", - "integrity": "sha512-4GUt3kSEYmk4ITxzB/b9vaIDfUVWN/Ml1Fwl11IlnIG2iaJ9O6WXZ9SrYM9NLI8OCBieN2Y8SWC2oJV0RQ7qYg==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-6.0.0.tgz", + "integrity": "sha512-ZwLpbTgdhuZUnZzjd7nb1ZV+4DoiC6/sfiVKok72ym/4Tlf+DFdlHYmT2JPmcNNWV6Pi3SDf1kT+A4r9RTuT9g==", "dev": true, "requires": { - "abbrev": "1" + "abbrev": "^1.0.0" } }, "normalize-path": { @@ -11282,6 +13194,26 @@ "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", "dev": true }, + "npm-path": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/npm-path/-/npm-path-2.0.4.tgz", + "integrity": "sha512-IFsj0R9C7ZdR5cP+ET342q77uSRdtWOlWpih5eC+lu29tIDbNEgDbzgVJ5UFvYHWhxDZ5TFkJafFioO0pPQjCw==", + "dev": true, + "requires": { + "which": "^1.2.10" + }, + "dependencies": { + "which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + } + } + }, "npm-run-path": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", @@ -11291,24 +13223,227 @@ "path-key": "^3.0.0" } }, + "npm-which": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/npm-which/-/npm-which-3.0.1.tgz", + "integrity": "sha512-CM8vMpeFQ7MAPin0U3wzDhSGV0hMHNwHU0wjo402IVizPDrs45jSfSuoC+wThevY88LQti8VvaAnqYAeVy3I1A==", + "dev": true, + "requires": { + "commander": "^2.9.0", + "npm-path": "^2.0.2", + "which": "^1.2.10" + }, + "dependencies": { + "which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + } + } + }, "npmlog": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz", - "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==", + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-7.0.1.tgz", + "integrity": "sha512-uJ0YFk/mCQpLBt+bxN88AKd+gyqZvZDbtiNxk6Waqcj2aPRyfVx8ITawkyQynxUagInjdYT1+qj4NfA5KJJUxg==", "dev": true, "requires": { - "are-we-there-yet": "~1.1.2", - "console-control-strings": "~1.1.0", - "gauge": "~2.7.3", - "set-blocking": "~2.0.0" + "are-we-there-yet": "^4.0.0", + "console-control-strings": "^1.1.0", + "gauge": "^5.0.0", + "set-blocking": "^2.0.0" + } + }, + "number-is-nan": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", + "integrity": "sha512-4jbtZXNAsfZbAHiiqjLPBiCl16dES1zI4Hpzzxw61Tk+loF+sBDBKx1ICKKKwIqQ7M0mFn1TmkN7euSncWgHiQ==", + "dev": true + }, + "nw-gyp": { + "version": "3.6.6", + "resolved": "https://registry.npmjs.org/nw-gyp/-/nw-gyp-3.6.6.tgz", + "integrity": "sha512-FeMnpFQWtEEMJ1BrSfK3T62CjuxaNl0mNHqdrxFcIF5XQdC3gaZYW4n+77lQLk8PE3Upfknkl9VRo6gDKJIHuA==", + "dev": true, + "requires": { + "fstream": "^1.0.0", + "glob": "^7.0.3", + "graceful-fs": "^4.1.2", + "minimatch": "^3.0.2", + "mkdirp": "^0.5.0", + "nopt": "2 || 3", + "npmlog": "0 || 1 || 2 || 3 || 4", + "osenv": "0", + "request": "2", + "rimraf": "2", + "semver": "~5.3.0", + "tar": "^4.4.19", + "which": "1" + }, + "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==", + "dev": true + }, + "aproba": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", + "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==", + "dev": true + }, + "are-we-there-yet": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.7.tgz", + "integrity": "sha512-nxwy40TuMiUGqMyRHgCSWZ9FM4VAoRP4xUYSTv5ImRog+h9yISPbVH7H8fASCIzYn9wlEv4zvFL7uKDMCFQm3g==", + "dev": true, + "requires": { + "delegates": "^1.0.0", + "readable-stream": "^2.0.6" + } + }, + "gauge": { + "version": "2.7.4", + "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", + "integrity": "sha512-14x4kjc6lkD3ltw589k0NrPD6cCNTD6CWoVUNpB85+DrtONoZn+Rug6xZU5RvSC4+TZPxA5AnBibQYAvZn41Hg==", + "dev": true, + "requires": { + "aproba": "^1.0.3", + "console-control-strings": "^1.0.0", + "has-unicode": "^2.0.0", + "object-assign": "^4.1.0", + "signal-exit": "^3.0.0", + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1", + "wide-align": "^1.1.0" + } + }, + "is-fullwidth-code-point": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", + "integrity": "sha512-1pqUqRjkhPJ9miNq9SwMfdvi6lBJcd6eFxvfaivQhaH3SgisfiuudvFntdKOmxuee/77l+FPjKrQjWvmPjWrRw==", + "dev": true, + "requires": { + "number-is-nan": "^1.0.0" + } + }, + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "dev": true + }, + "nopt": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz", + "integrity": "sha512-4GUt3kSEYmk4ITxzB/b9vaIDfUVWN/Ml1Fwl11IlnIG2iaJ9O6WXZ9SrYM9NLI8OCBieN2Y8SWC2oJV0RQ7qYg==", + "dev": true, + "requires": { + "abbrev": "1" + } + }, + "npmlog": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz", + "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==", + "dev": true, + "requires": { + "are-we-there-yet": "~1.1.2", + "console-control-strings": "~1.1.0", + "gauge": "~2.7.3", + "set-blocking": "~2.0.0" + } + }, + "readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "dev": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "semver": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.3.0.tgz", + "integrity": "sha512-mfmm3/H9+67MCVix1h+IXTpDwL6710LyHuk7+cWC9T1mE0qz4iHhh6r4hU2wrIT9iTsAAC2XQRvfblL028cpLw==", + "dev": true + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "requires": { + "safe-buffer": "~5.1.0" + } + }, + "string-width": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha512-0XsVpQLnVCXHJfyEs8tC0zpTVIr5PKKsQtkT29IwupnPTjtPmQ3xT/4yCREF9hYkV/3M3kzcUTSAZT6a6h81tw==", + "dev": true, + "requires": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + } + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==", + "dev": true, + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "tar": { + "version": "https://registry.npmjs.org/tar/-/tar-2.2.2.tgz", + "integrity": "sha512-FCEhQ/4rE1zYv9rYXJw/msRqsnmlje5jHP6huWeBZ704jUTy02c5AZyWujpMR1ax6mVw9NyJMfuK2CMDWVIfgA==", + "dev": true, + "requires": { + "block-stream": "*", + "fstream": "^1.0.12", + "inherits": "2" + } + }, + "which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + } } }, - "number-is-nan": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", - "integrity": "sha512-4jbtZXNAsfZbAHiiqjLPBiCl16dES1zI4Hpzzxw61Tk+loF+sBDBKx1ICKKKwIqQ7M0mFn1TmkN7euSncWgHiQ==", - "dev": true - }, "oauth-sign": { "version": "0.9.0", "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", @@ -11392,6 +13527,15 @@ "p-limit": "^3.0.2" } }, + "p-map": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", + "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", + "dev": true, + "requires": { + "aggregate-error": "^3.0.0" + } + }, "p-try": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", @@ -11419,6 +13563,15 @@ "lines-and-columns": "^1.1.6" } }, + "path-array": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-array/-/path-array-1.0.1.tgz", + "integrity": "sha512-teWG2rJTJJZi2kINKOsHcdIuHP7jy3D7pAsVgdhxMq8kaL2RnS5sg7YTlrClMVCIItcVbPTPI6eMBEoNxYahLA==", + "dev": true, + "requires": { + "array-index": "^1.0.0" + } + }, "path-exists": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", @@ -11522,160 +13675,41 @@ } }, "prebuild": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/prebuild/-/prebuild-3.0.3.tgz", - "integrity": "sha512-QGZMWEfs2zjsQ1Y9Lv4dwZ4EoE93E5UDxHKGc1iSBW8TvT4nM6Dc2DbhInDNlDJ/oGtFpoLwkQKivaoBXs+40g==", + "version": "12.1.0", + "resolved": "https://registry.npmjs.org/prebuild/-/prebuild-12.1.0.tgz", + "integrity": "sha512-7VxOp28zmb68lVMAqNMYr8jyIIHdRp52MSki01jAsdgDlnQYsVNhRpC9nHoax2wVhV/fnbyUUb1u57qUjrbbEg==", "dev": true, "requires": { - "async": "^1.4.0", - "expand-template": "^1.0.0", - "ghreleases": "^1.0.2", + "cmake-js": "^7.2.1", + "detect-libc": "^2.0.2", + "each-series-async": "^1.0.1", + "execspawn": "^1.0.1", + "ghreleases": "^3.0.2", "github-from-package": "0.0.0", - "minimist": "^1.1.2", - "mkdirp": "^0.5.1", - "node-gyp": "^3.0.3", - "noop-logger": "^0.1.0", - "npmlog": "^2.0.0", - "os-homedir": "^1.0.1", - "pump": "^1.0.0", - "rc": "^1.0.3", - "simple-get": "^2.8.2", - "tar-fs": "^1.7.0", - "tar-stream": "^1.2.1", - "xtend": "^4.0.1" + "glob": "^7.2.3", + "minimist": "^1.2.8", + "napi-build-utils": "^1.0.2", + "node-abi": "^3.47.0", + "node-gyp": "^9.4.0", + "node-ninja": "^1.0.2", + "noop-logger": "^0.1.1", + "npm-which": "^3.0.1", + "npmlog": "^7.0.1", + "nw-gyp": "^3.6.6", + "rc": "^1.2.8", + "run-waterfall": "^1.1.7", + "tar-stream": "^3.1.6" }, "dependencies": { - "bl": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/bl/-/bl-1.2.3.tgz", - "integrity": "sha512-pvcNpa0UU69UT341rO6AYy4FVAIkUHuZXRIWbq+zHnsVcRzDDjIAhGuuYoi0d//cwIwtt4pkpKycWEfjdV+vww==", - "dev": true, - "requires": { - "readable-stream": "^2.3.5", - "safe-buffer": "^5.1.1" - } - }, - "decompress-response": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz", - "integrity": "sha512-BzRPQuY1ip+qDonAOz42gRm/pg9F768C+npV/4JOsxRC2sq+Rlk+Q4ZCAsOhnIaMrgarILY+RMUIvMmmX1qAEA==", - "dev": true, - "requires": { - "mimic-response": "^1.0.0" - } - }, - "expand-template": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/expand-template/-/expand-template-1.1.1.tgz", - "integrity": "sha512-cebqLtV8KOZfw0UI8TEFWxtczxxC1jvyUvx6H4fyp1K1FN7A4Q+uggVUlOsI1K8AGU0rwOGqP8nCapdrw8CYQg==", - "dev": true - }, - "gauge": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/gauge/-/gauge-1.2.7.tgz", - "integrity": "sha512-fVbU2wRE91yDvKUnrIaQlHKAWKY5e08PmztCrwuH5YVQ+Z/p3d0ny2T48o6uvAAXHIUnfaQdHkmxYbQft1eHVA==", - "dev": true, - "requires": { - "ansi": "^0.3.0", - "has-unicode": "^2.0.0", - "lodash.pad": "^4.1.0", - "lodash.padend": "^4.1.0", - "lodash.padstart": "^4.1.0" - } - }, - "mimic-response": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", - "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==", - "dev": true - }, - "npmlog": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-2.0.4.tgz", - "integrity": "sha512-DaL6RTb8Qh4tMe2ttPT1qWccETy2Vi5/8p+htMpLBeXJTr2CAqnF5WQtSP2eFpvaNbhLZ5uilDb98mRm4Q+lZQ==", - "dev": true, - "requires": { - "ansi": "~0.3.1", - "are-we-there-yet": "~1.1.2", - "gauge": "~1.2.5" - } - }, - "pump": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/pump/-/pump-1.0.3.tgz", - "integrity": "sha512-8k0JupWme55+9tCVE+FS5ULT3K6AbgqrGa58lTT49RpyfwwcGedHqaC5LlQNdEAumn/wFsu6aPwkuPMioy8kqw==", - "dev": true, - "requires": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, - "readable-stream": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, - "simple-get": { - "version": "2.8.2", - "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-2.8.2.tgz", - "integrity": "sha512-Ijd/rV5o+mSBBs4F/x9oDPtTx9Zb6X9brmnXvMW4J7IR15ngi9q5xxqWBKU744jTZiaXtxaPL7uHG6vtN8kUkw==", - "dev": true, - "requires": { - "decompress-response": "^3.3.0", - "once": "^1.3.1", - "simple-concat": "^1.0.0" - } - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.0" - } - }, - "tar-fs": { - "version": "1.16.3", - "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-1.16.3.tgz", - "integrity": "sha512-NvCeXpYx7OsmOh8zIOP/ebG55zZmxLE0etfWRbWok+q2Qo8x/vOR/IJT1taADXPe+jsiu9axDb3X4B+iIgNlKw==", - "dev": true, - "requires": { - "chownr": "^1.0.1", - "mkdirp": "^0.5.1", - "pump": "^1.0.0", - "tar-stream": "^1.1.2" - } - }, "tar-stream": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-1.6.2.tgz", - "integrity": "sha512-rzS0heiNf8Xn7/mpdSVVSMAWAoy9bfb1WOTYC78Z0UQKeKa/CWS8FOq0lKGNa8DWKAn9gxjCvMLYc5PGXYlK2A==", + "version": "3.1.6", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-3.1.6.tgz", + "integrity": "sha512-B/UyjYwPpMBv+PaFSWAmtYjwdrlEaZQEhMIBFNC5oEG8lpiW8XjcSdmEaClj28ArfKScKHs2nshz3k2le6crsg==", "dev": true, "requires": { - "bl": "^1.0.0", - "buffer-alloc": "^1.2.0", - "end-of-stream": "^1.0.0", - "fs-constants": "^1.0.0", - "readable-stream": "^2.3.0", - "to-buffer": "^1.1.1", - "xtend": "^4.0.0" + "b4a": "^1.6.4", + "fast-fifo": "^1.2.0", + "streamx": "^2.15.0" } } } @@ -11730,12 +13764,34 @@ } } }, + "process": { + "version": "0.11.10", + "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", + "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==", + "dev": true + }, "process-nextick-args": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", "dev": true }, + "promise-inflight": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", + "integrity": "sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g==", + "dev": true + }, + "promise-retry": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/promise-retry/-/promise-retry-2.0.1.tgz", + "integrity": "sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==", + "dev": true, + "requires": { + "err-code": "^2.0.2", + "retry": "^0.12.0" + } + }, "prompts": { "version": "2.4.2", "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", @@ -11746,6 +13802,12 @@ "sisteransi": "^1.0.5" } }, + "proxy-from-env": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", + "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", + "dev": true + }, "psl": { "version": "1.9.0", "resolved": "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz", @@ -11785,6 +13847,12 @@ "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", "dev": true }, + "queue-tick": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/queue-tick/-/queue-tick-1.0.1.tgz", + "integrity": "sha512-kJt5qhMxoszgU/62PLP1CJytzd2NKetjSRnyuj31fDd3Rlcz3fzlFdFLD1SItunPwyqEOkca6GbV612BWfaBag==", + "dev": true + }, "randombytes": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", @@ -11868,6 +13936,19 @@ "tough-cookie": "~2.5.0", "tunnel-agent": "^0.6.0", "uuid": "^3.3.2" + }, + "dependencies": { + "form-data": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", + "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", + "dev": true, + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.6", + "mime-types": "^2.1.12" + } + } } }, "require-directory": { @@ -11916,6 +13997,12 @@ "integrity": "sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg==", "dev": true }, + "retry": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", + "integrity": "sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==", + "dev": true + }, "reusify": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", @@ -11940,6 +14027,12 @@ "queue-microtask": "^1.2.2" } }, + "run-waterfall": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/run-waterfall/-/run-waterfall-1.1.7.tgz", + "integrity": "sha512-iFPgh7SatHXOG1ClcpdwHI63geV3Hc/iL6crGSyBlH2PY7Rm/za+zoKz6FfY/Qlw5K7JwSol8pseO8fN6CMhhQ==", + "dev": true + }, "safe-buffer": { "version": "5.2.1", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", @@ -12075,6 +14168,33 @@ "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", "dev": true }, + "smart-buffer": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", + "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==", + "dev": true + }, + "socks": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/socks/-/socks-2.7.1.tgz", + "integrity": "sha512-7maUZy1N7uo6+WVEX6psASxtNlKaNVMlGQKkG/63nEDdLOWNbiUMoLK7X4uYoLhQstau72mLgfEWcXcwsaHbYQ==", + "dev": true, + "requires": { + "ip": "^2.0.0", + "smart-buffer": "^4.2.0" + } + }, + "socks-proxy-agent": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-7.0.0.tgz", + "integrity": "sha512-Fgl0YPZ902wEsAyiQ+idGd1A7rSFx/ayC1CQVMw5P+EQx2V0SgpGtf6OKFhVjPflPUl9YMmEOnmfjCdMUsygww==", + "dev": true, + "requires": { + "agent-base": "^6.0.2", + "debug": "^4.3.3", + "socks": "^2.6.2" + } + }, "source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", @@ -12106,9 +14226,9 @@ "dev": true }, "sshpk": { - "version": "1.17.0", - "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.17.0.tgz", - "integrity": "sha512-/9HIEs1ZXGhSPE8X6Ccm7Nam1z8KcoCqPdI7ecm1N33EzAetWahvQWVqLZtaZQ+IDKX4IyA2o0gBzqIMkAagHQ==", + "version": "1.18.0", + "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.18.0.tgz", + "integrity": "sha512-2p2KJZTSqQ/I3+HX42EpYOa2l3f8Erv8MWKsy2I9uf4wA7yFIkXRffYdsx86y6z4vHtV8u7g+pPlr8/4ouAxsQ==", "dev": true, "requires": { "asn1": "~0.2.3", @@ -12122,6 +14242,15 @@ "tweetnacl": "~0.14.0" } }, + "ssri": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-9.0.1.tgz", + "integrity": "sha512-o57Wcn66jMQvfHG1FlYbWeZWW/dHZhJXjpIcTfXldXEk5nz5lStPo3mK0OJQfGR3RbZUlbISexbljkJzuEj/8Q==", + "dev": true, + "requires": { + "minipass": "^3.1.1" + } + }, "stack-utils": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz", @@ -12139,6 +14268,16 @@ } } }, + "streamx": { + "version": "2.15.5", + "resolved": "https://registry.npmjs.org/streamx/-/streamx-2.15.5.tgz", + "integrity": "sha512-9thPGMkKC2GctCzyCUjME3yR03x2xNo0GPKGkRw2UMYN+gqWa9uqpyNWhmsNCutU5zHmkUum0LsCRQTXUgUCAg==", + "dev": true, + "requires": { + "fast-fifo": "^1.1.0", + "queue-tick": "^1.0.1" + } + }, "string_decoder": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", @@ -12158,31 +14297,14 @@ } }, "string-width": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha512-0XsVpQLnVCXHJfyEs8tC0zpTVIr5PKKsQtkT29IwupnPTjtPmQ3xT/4yCREF9hYkV/3M3kzcUTSAZT6a6h81tw==", + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "dev": true, "requires": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==", - "dev": true - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==", - "dev": true, - "requires": { - "ansi-regex": "^2.0.0" - } - } + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" } }, "strip-ansi": { @@ -12234,18 +14356,43 @@ "dev": true }, "tar": { - "version": "4.4.19", - "resolved": "https://registry.npmjs.org/tar/-/tar-4.4.19.tgz", - "integrity": "sha512-a20gEsvHnWe0ygBY8JbxoM4w3SJdhc7ZAuxkLqh+nvNQN2IOt0B5lLgM490X5Hl8FF0dl0tOf2ewFYAlIFgzVA==", + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/tar/-/tar-6.2.0.tgz", + "integrity": "sha512-/Wo7DcT0u5HUV486xg675HtjNd3BXZ6xDbzsCUZPt5iw8bTQ63bP0Raut3mvro9u+CUyq7YQd8Cx55fsZXxqLQ==", "dev": true, "requires": { - "chownr": "^1.1.4", - "fs-minipass": "^1.2.7", - "minipass": "^2.9.0", - "minizlib": "^1.3.3", - "mkdirp": "^0.5.5", - "safe-buffer": "^5.2.1", - "yallist": "^3.1.1" + "chownr": "^2.0.0", + "fs-minipass": "^2.0.0", + "minipass": "^5.0.0", + "minizlib": "^2.1.1", + "mkdirp": "^1.0.3", + "yallist": "^4.0.0" + }, + "dependencies": { + "chownr": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", + "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", + "dev": true + }, + "minipass": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", + "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==", + "dev": true + }, + "mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "dev": true + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + } } }, "tar-fs": { @@ -12375,12 +14522,6 @@ "xtend": ">=4.0.0 <4.1.0-0" }, "dependencies": { - "isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==", - "dev": true - }, "readable-stream": { "version": "1.0.34", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", @@ -12407,12 +14548,6 @@ "integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==", "dev": true }, - "to-buffer": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/to-buffer/-/to-buffer-1.1.1.tgz", - "integrity": "sha512-lx9B5iv7msuFYE3dytT+KE5tap+rNYw+K4jVkb9R/asAb+pbBSM17jtunHplhBe6RRJdZx3Pn2Jph24O32mOVg==", - "dev": true - }, "to-fast-properties": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", @@ -12483,6 +14618,12 @@ "integrity": "sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==", "dev": true }, + "type": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/type/-/type-1.2.0.tgz", + "integrity": "sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==", + "dev": true + }, "type-check": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", @@ -12557,6 +14698,30 @@ "dev": true, "optional": true }, + "unique-filename": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-2.0.1.tgz", + "integrity": "sha512-ODWHtkkdx3IAR+veKxFV+VBkUMcN+FaqzUUd7IZzt+0zhDZFPFxhlqwPF3YQvMHx1TD0tdgYl+kuPnJ8E6ql7A==", + "dev": true, + "requires": { + "unique-slug": "^3.0.0" + } + }, + "unique-slug": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-3.0.0.tgz", + "integrity": "sha512-8EyMynh679x/0gqE9fT9oilG+qEt+ibFyqjuVTsZn1+CMxH+XLlpvr2UZx4nVcCwTpx81nICr2JQFkM+HPLq4w==", + "dev": true, + "requires": { + "imurmurhash": "^0.1.4" + } + }, + "universalify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", + "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", + "dev": true + }, "update-browserslist-db": { "version": "1.0.11", "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.11.tgz", @@ -12576,6 +14741,12 @@ "punycode": "^2.1.0" } }, + "url-join": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/url-join/-/url-join-4.0.1.tgz", + "integrity": "sha512-jk1+QP6ZJqyOiuEI9AEWQfju/nB2Pw466kbA0LEZljHwKeMgd9WrAEgEGxjPDD2+TNbbb37rTyhEfrCXfuKXnA==", + "dev": true + }, "url-template": { "version": "2.0.8", "resolved": "https://registry.npmjs.org/url-template/-/url-template-2.0.8.tgz", @@ -12587,6 +14758,12 @@ "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" }, + "util-extend": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/util-extend/-/util-extend-1.0.3.tgz", + "integrity": "sha512-mLs5zAK+ctllYBj+iAQvlDCwoxU/WDOUaJkcFudeiAX6OajC6BKXJUa9a+tbtkC11dz2Ufb7h0lyvIOVn4LADA==", + "dev": true + }, "uuid": { "version": "3.4.0", "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", @@ -12770,25 +14947,6 @@ "ansi-styles": "^4.0.0", "string-width": "^4.1.0", "strip-ansi": "^6.0.0" - }, - "dependencies": { - "is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true - }, - "string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - } - } } }, "wrappy": { @@ -12837,25 +14995,6 @@ "string-width": "^4.2.3", "y18n": "^5.0.5", "yargs-parser": "^21.1.1" - }, - "dependencies": { - "is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true - }, - "string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - } - } } }, "yargs-parser": { diff --git a/bindings/nodejs/yarn.lock b/bindings/nodejs/yarn.lock index 1cec6bf2b1..f88f9e515f 100644 --- a/bindings/nodejs/yarn.lock +++ b/bindings/nodejs/yarn.lock @@ -3,35 +3,35 @@ "@aashutoshrathi/word-wrap@^1.2.3": - version "1.2.6" - resolved "https://registry.npmjs.org/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz" - integrity sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA== + "integrity" "sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==" + "resolved" "https://registry.npmjs.org/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz" + "version" "1.2.6" "@ampproject/remapping@^2.2.0": - version "2.2.1" - resolved "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.1.tgz" - integrity sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg== + "integrity" "sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==" + "resolved" "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.1.tgz" + "version" "2.2.1" dependencies: "@jridgewell/gen-mapping" "^0.3.0" "@jridgewell/trace-mapping" "^0.3.9" "@babel/code-frame@^7.0.0", "@babel/code-frame@^7.12.13", "@babel/code-frame@^7.22.10", "@babel/code-frame@^7.22.13": - version "7.22.13" - resolved "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.22.13.tgz" - integrity sha512-XktuhWlJ5g+3TJXc5upd9Ks1HutSArik6jf2eAjYFyIOf4ej3RN+184cZbzDvbPnuTJIUhPKKJE3cIsYTiAT3w== + "integrity" "sha512-XktuhWlJ5g+3TJXc5upd9Ks1HutSArik6jf2eAjYFyIOf4ej3RN+184cZbzDvbPnuTJIUhPKKJE3cIsYTiAT3w==" + "resolved" "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.22.13.tgz" + "version" "7.22.13" dependencies: "@babel/highlight" "^7.22.13" - chalk "^2.4.2" + "chalk" "^2.4.2" "@babel/compat-data@^7.22.9": - version "7.22.9" - resolved "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.22.9.tgz" - integrity sha512-5UamI7xkUcJ3i9qVDS+KFDEK8/7oJ55/sJMB1Ge7IEapr7KfdfV/HErR+koZwOfd+SgtFKOKRhRakdg++DcJpQ== + "integrity" "sha512-5UamI7xkUcJ3i9qVDS+KFDEK8/7oJ55/sJMB1Ge7IEapr7KfdfV/HErR+koZwOfd+SgtFKOKRhRakdg++DcJpQ==" + "resolved" "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.22.9.tgz" + "version" "7.22.9" -"@babel/core@^7.11.6", "@babel/core@^7.12.3": - version "7.22.10" - resolved "https://registry.npmjs.org/@babel/core/-/core-7.22.10.tgz" - integrity sha512-fTmqbbUBAwCcre6zPzNngvsI0aNrPZe77AeqvDxWM9Nm+04RrJ3CAmGHA9f7lJQY6ZMhRztNemy4uslDxTX4Qw== +"@babel/core@^7.0.0", "@babel/core@^7.0.0-0", "@babel/core@^7.11.6", "@babel/core@^7.12.3", "@babel/core@^7.8.0", "@babel/core@>=7.0.0-beta.0 <8": + "integrity" "sha512-fTmqbbUBAwCcre6zPzNngvsI0aNrPZe77AeqvDxWM9Nm+04RrJ3CAmGHA9f7lJQY6ZMhRztNemy4uslDxTX4Qw==" + "resolved" "https://registry.npmjs.org/@babel/core/-/core-7.22.10.tgz" + "version" "7.22.10" dependencies: "@ampproject/remapping" "^2.2.0" "@babel/code-frame" "^7.22.10" @@ -43,64 +43,64 @@ "@babel/template" "^7.22.5" "@babel/traverse" "^7.22.10" "@babel/types" "^7.22.10" - convert-source-map "^1.7.0" - debug "^4.1.0" - gensync "^1.0.0-beta.2" - json5 "^2.2.2" - semver "^6.3.1" + "convert-source-map" "^1.7.0" + "debug" "^4.1.0" + "gensync" "^1.0.0-beta.2" + "json5" "^2.2.2" + "semver" "^6.3.1" "@babel/generator@^7.22.10", "@babel/generator@^7.23.0", "@babel/generator@^7.7.2": - version "7.23.0" - resolved "https://registry.npmjs.org/@babel/generator/-/generator-7.23.0.tgz" - integrity sha512-lN85QRR+5IbYrMWM6Y4pE/noaQtg4pNiqeNGX60eqOfo6gtEj6uw/JagelB8vVztSd7R6M5n1+PQkDbHbBRU4g== + "integrity" "sha512-lN85QRR+5IbYrMWM6Y4pE/noaQtg4pNiqeNGX60eqOfo6gtEj6uw/JagelB8vVztSd7R6M5n1+PQkDbHbBRU4g==" + "resolved" "https://registry.npmjs.org/@babel/generator/-/generator-7.23.0.tgz" + "version" "7.23.0" dependencies: "@babel/types" "^7.23.0" "@jridgewell/gen-mapping" "^0.3.2" "@jridgewell/trace-mapping" "^0.3.17" - jsesc "^2.5.1" + "jsesc" "^2.5.1" "@babel/helper-compilation-targets@^7.22.10": - version "7.22.10" - resolved "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.10.tgz" - integrity sha512-JMSwHD4J7SLod0idLq5PKgI+6g/hLD/iuWBq08ZX49xE14VpVEojJ5rHWptpirV2j020MvypRLAXAO50igCJ5Q== + "integrity" "sha512-JMSwHD4J7SLod0idLq5PKgI+6g/hLD/iuWBq08ZX49xE14VpVEojJ5rHWptpirV2j020MvypRLAXAO50igCJ5Q==" + "resolved" "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.10.tgz" + "version" "7.22.10" dependencies: "@babel/compat-data" "^7.22.9" "@babel/helper-validator-option" "^7.22.5" - browserslist "^4.21.9" - lru-cache "^5.1.1" - semver "^6.3.1" + "browserslist" "^4.21.9" + "lru-cache" "^5.1.1" + "semver" "^6.3.1" "@babel/helper-environment-visitor@^7.22.20", "@babel/helper-environment-visitor@^7.22.5": - version "7.22.20" - resolved "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz" - integrity sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA== + "integrity" "sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==" + "resolved" "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz" + "version" "7.22.20" "@babel/helper-function-name@^7.23.0": - version "7.23.0" - resolved "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz" - integrity sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw== + "integrity" "sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==" + "resolved" "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz" + "version" "7.23.0" dependencies: "@babel/template" "^7.22.15" "@babel/types" "^7.23.0" "@babel/helper-hoist-variables@^7.22.5": - version "7.22.5" - resolved "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz" - integrity sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw== + "integrity" "sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==" + "resolved" "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz" + "version" "7.22.5" dependencies: "@babel/types" "^7.22.5" "@babel/helper-module-imports@^7.22.5": - version "7.22.5" - resolved "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.22.5.tgz" - integrity sha512-8Dl6+HD/cKifutF5qGd/8ZJi84QeAKh+CEe1sBzz8UayBBGg1dAIJrdHOcOM5b2MpzWL2yuotJTtGjETq0qjXg== + "integrity" "sha512-8Dl6+HD/cKifutF5qGd/8ZJi84QeAKh+CEe1sBzz8UayBBGg1dAIJrdHOcOM5b2MpzWL2yuotJTtGjETq0qjXg==" + "resolved" "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.22.5.tgz" + "version" "7.22.5" dependencies: "@babel/types" "^7.22.5" "@babel/helper-module-transforms@^7.22.9": - version "7.22.9" - resolved "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.22.9.tgz" - integrity sha512-t+WA2Xn5K+rTeGtC8jCsdAH52bjggG5TKRuRrAGNM/mjIbO4GxvlLMFOEz9wXY5I2XQ60PMFsAG2WIcG82dQMQ== + "integrity" "sha512-t+WA2Xn5K+rTeGtC8jCsdAH52bjggG5TKRuRrAGNM/mjIbO4GxvlLMFOEz9wXY5I2XQ60PMFsAG2WIcG82dQMQ==" + "resolved" "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.22.9.tgz" + "version" "7.22.9" dependencies: "@babel/helper-environment-visitor" "^7.22.5" "@babel/helper-module-imports" "^7.22.5" @@ -109,173 +109,173 @@ "@babel/helper-validator-identifier" "^7.22.5" "@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.14.5", "@babel/helper-plugin-utils@^7.22.5", "@babel/helper-plugin-utils@^7.8.0": - version "7.22.5" - resolved "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz" - integrity sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg== + "integrity" "sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==" + "resolved" "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz" + "version" "7.22.5" "@babel/helper-simple-access@^7.22.5": - version "7.22.5" - resolved "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz" - integrity sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w== + "integrity" "sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==" + "resolved" "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz" + "version" "7.22.5" dependencies: "@babel/types" "^7.22.5" "@babel/helper-split-export-declaration@^7.22.6": - version "7.22.6" - resolved "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz" - integrity sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g== + "integrity" "sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==" + "resolved" "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz" + "version" "7.22.6" dependencies: "@babel/types" "^7.22.5" "@babel/helper-string-parser@^7.22.5": - version "7.22.5" - resolved "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz" - integrity sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw== + "integrity" "sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==" + "resolved" "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz" + "version" "7.22.5" "@babel/helper-validator-identifier@^7.22.20", "@babel/helper-validator-identifier@^7.22.5": - version "7.22.20" - resolved "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz" - integrity sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A== + "integrity" "sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==" + "resolved" "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz" + "version" "7.22.20" "@babel/helper-validator-option@^7.22.5": - version "7.22.5" - resolved "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.22.5.tgz" - integrity sha512-R3oB6xlIVKUnxNUxbmgq7pKjxpru24zlimpE8WK47fACIlM0II/Hm1RS8IaOI7NgCr6LNS+jl5l75m20npAziw== + "integrity" "sha512-R3oB6xlIVKUnxNUxbmgq7pKjxpru24zlimpE8WK47fACIlM0II/Hm1RS8IaOI7NgCr6LNS+jl5l75m20npAziw==" + "resolved" "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.22.5.tgz" + "version" "7.22.5" "@babel/helpers@^7.22.10": - version "7.22.10" - resolved "https://registry.npmjs.org/@babel/helpers/-/helpers-7.22.10.tgz" - integrity sha512-a41J4NW8HyZa1I1vAndrraTlPZ/eZoga2ZgS7fEr0tZJGVU4xqdE80CEm0CcNjha5EZ8fTBYLKHF0kqDUuAwQw== + "integrity" "sha512-a41J4NW8HyZa1I1vAndrraTlPZ/eZoga2ZgS7fEr0tZJGVU4xqdE80CEm0CcNjha5EZ8fTBYLKHF0kqDUuAwQw==" + "resolved" "https://registry.npmjs.org/@babel/helpers/-/helpers-7.22.10.tgz" + "version" "7.22.10" dependencies: "@babel/template" "^7.22.5" "@babel/traverse" "^7.22.10" "@babel/types" "^7.22.10" "@babel/highlight@^7.22.13": - version "7.22.20" - resolved "https://registry.npmjs.org/@babel/highlight/-/highlight-7.22.20.tgz" - integrity sha512-dkdMCN3py0+ksCgYmGG8jKeGA/8Tk+gJwSYYlFGxG5lmhfKNoAy004YpLxpS1W2J8m/EK2Ew+yOs9pVRwO89mg== + "integrity" "sha512-dkdMCN3py0+ksCgYmGG8jKeGA/8Tk+gJwSYYlFGxG5lmhfKNoAy004YpLxpS1W2J8m/EK2Ew+yOs9pVRwO89mg==" + "resolved" "https://registry.npmjs.org/@babel/highlight/-/highlight-7.22.20.tgz" + "version" "7.22.20" dependencies: "@babel/helper-validator-identifier" "^7.22.20" - chalk "^2.4.2" - js-tokens "^4.0.0" + "chalk" "^2.4.2" + "js-tokens" "^4.0.0" "@babel/parser@^7.1.0", "@babel/parser@^7.14.7", "@babel/parser@^7.20.7", "@babel/parser@^7.22.10", "@babel/parser@^7.22.15", "@babel/parser@^7.23.0": - version "7.23.0" - resolved "https://registry.npmjs.org/@babel/parser/-/parser-7.23.0.tgz" - integrity sha512-vvPKKdMemU85V9WE/l5wZEmImpCtLqbnTvqDS2U1fJ96KrxoW7KrXhNsNCblQlg8Ck4b85yxdTyelsMUgFUXiw== + "integrity" "sha512-vvPKKdMemU85V9WE/l5wZEmImpCtLqbnTvqDS2U1fJ96KrxoW7KrXhNsNCblQlg8Ck4b85yxdTyelsMUgFUXiw==" + "resolved" "https://registry.npmjs.org/@babel/parser/-/parser-7.23.0.tgz" + "version" "7.23.0" "@babel/plugin-syntax-async-generators@^7.8.4": - version "7.8.4" - resolved "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz" - integrity sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw== + "integrity" "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==" + "resolved" "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz" + "version" "7.8.4" dependencies: "@babel/helper-plugin-utils" "^7.8.0" "@babel/plugin-syntax-bigint@^7.8.3": - version "7.8.3" - resolved "https://registry.npmjs.org/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz" - integrity sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg== + "integrity" "sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==" + "resolved" "https://registry.npmjs.org/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz" + "version" "7.8.3" dependencies: "@babel/helper-plugin-utils" "^7.8.0" "@babel/plugin-syntax-class-properties@^7.8.3": - version "7.12.13" - resolved "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz" - integrity sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA== + "integrity" "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==" + "resolved" "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz" + "version" "7.12.13" dependencies: "@babel/helper-plugin-utils" "^7.12.13" "@babel/plugin-syntax-import-meta@^7.8.3": - version "7.10.4" - resolved "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz" - integrity sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g== + "integrity" "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==" + "resolved" "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz" + "version" "7.10.4" dependencies: "@babel/helper-plugin-utils" "^7.10.4" "@babel/plugin-syntax-json-strings@^7.8.3": - version "7.8.3" - resolved "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz" - integrity sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA== + "integrity" "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==" + "resolved" "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz" + "version" "7.8.3" dependencies: "@babel/helper-plugin-utils" "^7.8.0" "@babel/plugin-syntax-jsx@^7.7.2": - version "7.22.5" - resolved "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.22.5.tgz" - integrity sha512-gvyP4hZrgrs/wWMaocvxZ44Hw0b3W8Pe+cMxc8V1ULQ07oh8VNbIRaoD1LRZVTvD+0nieDKjfgKg89sD7rrKrg== + "integrity" "sha512-gvyP4hZrgrs/wWMaocvxZ44Hw0b3W8Pe+cMxc8V1ULQ07oh8VNbIRaoD1LRZVTvD+0nieDKjfgKg89sD7rrKrg==" + "resolved" "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.22.5.tgz" + "version" "7.22.5" dependencies: "@babel/helper-plugin-utils" "^7.22.5" "@babel/plugin-syntax-logical-assignment-operators@^7.8.3": - version "7.10.4" - resolved "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz" - integrity sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig== + "integrity" "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==" + "resolved" "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz" + "version" "7.10.4" dependencies: "@babel/helper-plugin-utils" "^7.10.4" "@babel/plugin-syntax-nullish-coalescing-operator@^7.8.3": - version "7.8.3" - resolved "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz" - integrity sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ== + "integrity" "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==" + "resolved" "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz" + "version" "7.8.3" dependencies: "@babel/helper-plugin-utils" "^7.8.0" "@babel/plugin-syntax-numeric-separator@^7.8.3": - version "7.10.4" - resolved "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz" - integrity sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug== + "integrity" "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==" + "resolved" "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz" + "version" "7.10.4" dependencies: "@babel/helper-plugin-utils" "^7.10.4" "@babel/plugin-syntax-object-rest-spread@^7.8.3": - version "7.8.3" - resolved "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz" - integrity sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA== + "integrity" "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==" + "resolved" "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz" + "version" "7.8.3" dependencies: "@babel/helper-plugin-utils" "^7.8.0" "@babel/plugin-syntax-optional-catch-binding@^7.8.3": - version "7.8.3" - resolved "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz" - integrity sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q== + "integrity" "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==" + "resolved" "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz" + "version" "7.8.3" dependencies: "@babel/helper-plugin-utils" "^7.8.0" "@babel/plugin-syntax-optional-chaining@^7.8.3": - version "7.8.3" - resolved "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz" - integrity sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg== + "integrity" "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==" + "resolved" "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz" + "version" "7.8.3" dependencies: "@babel/helper-plugin-utils" "^7.8.0" "@babel/plugin-syntax-top-level-await@^7.8.3": - version "7.14.5" - resolved "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz" - integrity sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw== + "integrity" "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==" + "resolved" "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz" + "version" "7.14.5" dependencies: "@babel/helper-plugin-utils" "^7.14.5" "@babel/plugin-syntax-typescript@^7.7.2": - version "7.22.5" - resolved "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.22.5.tgz" - integrity sha512-1mS2o03i7t1c6VzH6fdQ3OA8tcEIxwG18zIPRp+UY1Ihv6W+XZzBCVxExF9upussPXJ0xE9XRHwMoNs1ep/nRQ== + "integrity" "sha512-1mS2o03i7t1c6VzH6fdQ3OA8tcEIxwG18zIPRp+UY1Ihv6W+XZzBCVxExF9upussPXJ0xE9XRHwMoNs1ep/nRQ==" + "resolved" "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.22.5.tgz" + "version" "7.22.5" dependencies: "@babel/helper-plugin-utils" "^7.22.5" "@babel/template@^7.22.15", "@babel/template@^7.22.5", "@babel/template@^7.3.3": - version "7.22.15" - resolved "https://registry.npmjs.org/@babel/template/-/template-7.22.15.tgz" - integrity sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w== + "integrity" "sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w==" + "resolved" "https://registry.npmjs.org/@babel/template/-/template-7.22.15.tgz" + "version" "7.22.15" dependencies: "@babel/code-frame" "^7.22.13" "@babel/parser" "^7.22.15" "@babel/types" "^7.22.15" -"@babel/traverse@^7.22.10", "@babel/traverse@^7.23.2": - version "7.23.2" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.23.2.tgz#329c7a06735e144a506bdb2cad0268b7f46f4ad8" - integrity sha512-azpe59SQ48qG6nu2CzcMLbxUudtN+dOM9kDbUqGq3HXUJRlo7i8fvPoxQUzYgLZ4cMVmuZgm8vvBpNeRhd6XSw== +"@babel/traverse@^7.22.10": + "integrity" "sha512-azpe59SQ48qG6nu2CzcMLbxUudtN+dOM9kDbUqGq3HXUJRlo7i8fvPoxQUzYgLZ4cMVmuZgm8vvBpNeRhd6XSw==" + "resolved" "https://registry.npmjs.org/@babel/traverse/-/traverse-7.23.2.tgz" + "version" "7.23.2" dependencies: "@babel/code-frame" "^7.22.13" "@babel/generator" "^7.23.0" @@ -285,123 +285,116 @@ "@babel/helper-split-export-declaration" "^7.22.6" "@babel/parser" "^7.23.0" "@babel/types" "^7.23.0" - debug "^4.1.0" - globals "^11.1.0" + "debug" "^4.1.0" + "globals" "^11.1.0" "@babel/types@^7.0.0", "@babel/types@^7.20.7", "@babel/types@^7.22.10", "@babel/types@^7.22.15", "@babel/types@^7.22.5", "@babel/types@^7.23.0", "@babel/types@^7.3.3": - version "7.23.0" - resolved "https://registry.npmjs.org/@babel/types/-/types-7.23.0.tgz" - integrity sha512-0oIyUfKoI3mSqMvsxBdclDwxXKXAUA8v/apZbc+iSyARYou1o8ZGDxbUYyLFoW2arqS2jDGqJuZvv1d/io1axg== + "integrity" "sha512-0oIyUfKoI3mSqMvsxBdclDwxXKXAUA8v/apZbc+iSyARYou1o8ZGDxbUYyLFoW2arqS2jDGqJuZvv1d/io1axg==" + "resolved" "https://registry.npmjs.org/@babel/types/-/types-7.23.0.tgz" + "version" "7.23.0" dependencies: "@babel/helper-string-parser" "^7.22.5" "@babel/helper-validator-identifier" "^7.22.20" - to-fast-properties "^2.0.0" + "to-fast-properties" "^2.0.0" "@bcoe/v8-coverage@^0.2.3": - version "0.2.3" - resolved "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz" - integrity sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw== + "integrity" "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==" + "resolved" "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz" + "version" "0.2.3" "@discoveryjs/json-ext@^0.5.0": - version "0.5.7" - resolved "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz" - integrity sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw== + "integrity" "sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw==" + "resolved" "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz" + "version" "0.5.7" "@eslint-community/eslint-utils@^4.2.0": - version "4.4.0" - resolved "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz" - integrity sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA== + "integrity" "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==" + "resolved" "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz" + "version" "4.4.0" dependencies: - eslint-visitor-keys "^3.3.0" + "eslint-visitor-keys" "^3.3.0" "@eslint-community/regexpp@^4.4.0", "@eslint-community/regexpp@^4.6.1": - version "4.6.2" - resolved "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.6.2.tgz" - integrity sha512-pPTNuaAG3QMH+buKyBIGJs3g/S5y0caxw0ygM3YyE6yJFySwiGGSzA+mM3KJ8QQvzeLh3blwgSonkFjgQdxzMw== + "integrity" "sha512-pPTNuaAG3QMH+buKyBIGJs3g/S5y0caxw0ygM3YyE6yJFySwiGGSzA+mM3KJ8QQvzeLh3blwgSonkFjgQdxzMw==" + "resolved" "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.6.2.tgz" + "version" "4.6.2" "@eslint/eslintrc@^2.1.2": - version "2.1.2" - resolved "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.2.tgz" - integrity sha512-+wvgpDsrB1YqAMdEUCcnTlpfVBH7Vqn6A/NT3D8WVXFIaKMlErPIZT3oCIAVCOtarRpMtelZLqJeU3t7WY6X6g== - dependencies: - ajv "^6.12.4" - debug "^4.3.2" - espree "^9.6.0" - globals "^13.19.0" - ignore "^5.2.0" - import-fresh "^3.2.1" - js-yaml "^4.1.0" - minimatch "^3.1.2" - strip-json-comments "^3.1.1" + "integrity" "sha512-+wvgpDsrB1YqAMdEUCcnTlpfVBH7Vqn6A/NT3D8WVXFIaKMlErPIZT3oCIAVCOtarRpMtelZLqJeU3t7WY6X6g==" + "resolved" "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.2.tgz" + "version" "2.1.2" + dependencies: + "ajv" "^6.12.4" + "debug" "^4.3.2" + "espree" "^9.6.0" + "globals" "^13.19.0" + "ignore" "^5.2.0" + "import-fresh" "^3.2.1" + "js-yaml" "^4.1.0" + "minimatch" "^3.1.2" + "strip-json-comments" "^3.1.1" "@eslint/js@^8.47.0": - version "8.47.0" - resolved "https://registry.npmjs.org/@eslint/js/-/js-8.47.0.tgz" - integrity sha512-P6omY1zv5MItm93kLM8s2vr1HICJH8v0dvddDhysbIuZ+vcjOHg5Zbkf1mTkcmi2JA9oBG2anOkRnW8WJTS8Og== + "integrity" "sha512-P6omY1zv5MItm93kLM8s2vr1HICJH8v0dvddDhysbIuZ+vcjOHg5Zbkf1mTkcmi2JA9oBG2anOkRnW8WJTS8Og==" + "resolved" "https://registry.npmjs.org/@eslint/js/-/js-8.47.0.tgz" + "version" "8.47.0" + +"@gar/promisify@^1.1.3": + "integrity" "sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw==" + "resolved" "https://registry.npmjs.org/@gar/promisify/-/promisify-1.1.3.tgz" + "version" "1.1.3" "@humanwhocodes/config-array@^0.11.10": - version "0.11.10" - resolved "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.10.tgz" - integrity sha512-KVVjQmNUepDVGXNuoRRdmmEjruj0KfiGSbS8LVc12LMsWDQzRXJ0qdhN8L8uUigKpfEHRhlaQFY0ib1tnUbNeQ== + "integrity" "sha512-KVVjQmNUepDVGXNuoRRdmmEjruj0KfiGSbS8LVc12LMsWDQzRXJ0qdhN8L8uUigKpfEHRhlaQFY0ib1tnUbNeQ==" + "resolved" "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.10.tgz" + "version" "0.11.10" dependencies: "@humanwhocodes/object-schema" "^1.2.1" - debug "^4.1.1" - minimatch "^3.0.5" + "debug" "^4.1.1" + "minimatch" "^3.0.5" "@humanwhocodes/module-importer@^1.0.1": - version "1.0.1" - resolved "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz" - integrity sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA== + "integrity" "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==" + "resolved" "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz" + "version" "1.0.1" "@humanwhocodes/object-schema@^1.2.1": - version "1.2.1" - resolved "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz" - integrity sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA== - -"@isaacs/cliui@^8.0.2": - version "8.0.2" - resolved "https://registry.yarnpkg.com/@isaacs/cliui/-/cliui-8.0.2.tgz#b37667b7bc181c168782259bab42474fbf52b550" - integrity sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA== - dependencies: - string-width "^5.1.2" - string-width-cjs "npm:string-width@^4.2.0" - strip-ansi "^7.0.1" - strip-ansi-cjs "npm:strip-ansi@^6.0.1" - wrap-ansi "^8.1.0" - wrap-ansi-cjs "npm:wrap-ansi@^7.0.0" + "integrity" "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==" + "resolved" "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz" + "version" "1.2.1" "@istanbuljs/load-nyc-config@^1.0.0": - version "1.1.0" - resolved "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz" - integrity sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ== + "integrity" "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==" + "resolved" "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz" + "version" "1.1.0" dependencies: - camelcase "^5.3.1" - find-up "^4.1.0" - get-package-type "^0.1.0" - js-yaml "^3.13.1" - resolve-from "^5.0.0" + "camelcase" "^5.3.1" + "find-up" "^4.1.0" + "get-package-type" "^0.1.0" + "js-yaml" "^3.13.1" + "resolve-from" "^5.0.0" "@istanbuljs/schema@^0.1.2": - version "0.1.3" - resolved "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz" - integrity sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA== + "integrity" "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==" + "resolved" "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz" + "version" "0.1.3" "@jest/console@^29.6.2": - version "29.6.2" - resolved "https://registry.npmjs.org/@jest/console/-/console-29.6.2.tgz" - integrity sha512-0N0yZof5hi44HAR2pPS+ikJ3nzKNoZdVu8FffRf3wy47I7Dm7etk/3KetMdRUqzVd16V4O2m2ISpNTbnIuqy1w== + "integrity" "sha512-0N0yZof5hi44HAR2pPS+ikJ3nzKNoZdVu8FffRf3wy47I7Dm7etk/3KetMdRUqzVd16V4O2m2ISpNTbnIuqy1w==" + "resolved" "https://registry.npmjs.org/@jest/console/-/console-29.6.2.tgz" + "version" "29.6.2" dependencies: "@jest/types" "^29.6.1" "@types/node" "*" - chalk "^4.0.0" - jest-message-util "^29.6.2" - jest-util "^29.6.2" - slash "^3.0.0" + "chalk" "^4.0.0" + "jest-message-util" "^29.6.2" + "jest-util" "^29.6.2" + "slash" "^3.0.0" "@jest/core@^29.6.2": - version "29.6.2" - resolved "https://registry.npmjs.org/@jest/core/-/core-29.6.2.tgz" - integrity sha512-Oj+5B+sDMiMWLhPFF+4/DvHOf+U10rgvCLGPHP8Xlsy/7QxS51aU/eBngudHlJXnaWD5EohAgJ4js+T6pa+zOg== + "integrity" "sha512-Oj+5B+sDMiMWLhPFF+4/DvHOf+U10rgvCLGPHP8Xlsy/7QxS51aU/eBngudHlJXnaWD5EohAgJ4js+T6pa+zOg==" + "resolved" "https://registry.npmjs.org/@jest/core/-/core-29.6.2.tgz" + "version" "29.6.2" dependencies: "@jest/console" "^29.6.2" "@jest/reporters" "^29.6.2" @@ -409,80 +402,80 @@ "@jest/transform" "^29.6.2" "@jest/types" "^29.6.1" "@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.5.0" - jest-config "^29.6.2" - jest-haste-map "^29.6.2" - jest-message-util "^29.6.2" - jest-regex-util "^29.4.3" - jest-resolve "^29.6.2" - jest-resolve-dependencies "^29.6.2" - jest-runner "^29.6.2" - jest-runtime "^29.6.2" - jest-snapshot "^29.6.2" - jest-util "^29.6.2" - jest-validate "^29.6.2" - jest-watcher "^29.6.2" - micromatch "^4.0.4" - pretty-format "^29.6.2" - slash "^3.0.0" - strip-ansi "^6.0.0" + "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.5.0" + "jest-config" "^29.6.2" + "jest-haste-map" "^29.6.2" + "jest-message-util" "^29.6.2" + "jest-regex-util" "^29.4.3" + "jest-resolve" "^29.6.2" + "jest-resolve-dependencies" "^29.6.2" + "jest-runner" "^29.6.2" + "jest-runtime" "^29.6.2" + "jest-snapshot" "^29.6.2" + "jest-util" "^29.6.2" + "jest-validate" "^29.6.2" + "jest-watcher" "^29.6.2" + "micromatch" "^4.0.4" + "pretty-format" "^29.6.2" + "slash" "^3.0.0" + "strip-ansi" "^6.0.0" "@jest/environment@^29.6.2": - version "29.6.2" - resolved "https://registry.npmjs.org/@jest/environment/-/environment-29.6.2.tgz" - integrity sha512-AEcW43C7huGd/vogTddNNTDRpO6vQ2zaQNrttvWV18ArBx9Z56h7BIsXkNFJVOO4/kblWEQz30ckw0+L3izc+Q== + "integrity" "sha512-AEcW43C7huGd/vogTddNNTDRpO6vQ2zaQNrttvWV18ArBx9Z56h7BIsXkNFJVOO4/kblWEQz30ckw0+L3izc+Q==" + "resolved" "https://registry.npmjs.org/@jest/environment/-/environment-29.6.2.tgz" + "version" "29.6.2" dependencies: "@jest/fake-timers" "^29.6.2" "@jest/types" "^29.6.1" "@types/node" "*" - jest-mock "^29.6.2" + "jest-mock" "^29.6.2" "@jest/expect-utils@^29.6.2": - version "29.6.2" - resolved "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-29.6.2.tgz" - integrity sha512-6zIhM8go3RV2IG4aIZaZbxwpOzz3ZiM23oxAlkquOIole+G6TrbeXnykxWYlqF7kz2HlBjdKtca20x9atkEQYg== + "integrity" "sha512-6zIhM8go3RV2IG4aIZaZbxwpOzz3ZiM23oxAlkquOIole+G6TrbeXnykxWYlqF7kz2HlBjdKtca20x9atkEQYg==" + "resolved" "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-29.6.2.tgz" + "version" "29.6.2" dependencies: - jest-get-type "^29.4.3" + "jest-get-type" "^29.4.3" "@jest/expect@^29.6.2": - version "29.6.2" - resolved "https://registry.npmjs.org/@jest/expect/-/expect-29.6.2.tgz" - integrity sha512-m6DrEJxVKjkELTVAztTLyS/7C92Y2b0VYqmDROYKLLALHn8T/04yPs70NADUYPrV3ruI+H3J0iUIuhkjp7vkfg== + "integrity" "sha512-m6DrEJxVKjkELTVAztTLyS/7C92Y2b0VYqmDROYKLLALHn8T/04yPs70NADUYPrV3ruI+H3J0iUIuhkjp7vkfg==" + "resolved" "https://registry.npmjs.org/@jest/expect/-/expect-29.6.2.tgz" + "version" "29.6.2" dependencies: - expect "^29.6.2" - jest-snapshot "^29.6.2" + "expect" "^29.6.2" + "jest-snapshot" "^29.6.2" "@jest/fake-timers@^29.6.2": - version "29.6.2" - resolved "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-29.6.2.tgz" - integrity sha512-euZDmIlWjm1Z0lJ1D0f7a0/y5Kh/koLFMUBE5SUYWrmy8oNhJpbTBDAP6CxKnadcMLDoDf4waRYCe35cH6G6PA== + "integrity" "sha512-euZDmIlWjm1Z0lJ1D0f7a0/y5Kh/koLFMUBE5SUYWrmy8oNhJpbTBDAP6CxKnadcMLDoDf4waRYCe35cH6G6PA==" + "resolved" "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-29.6.2.tgz" + "version" "29.6.2" dependencies: "@jest/types" "^29.6.1" "@sinonjs/fake-timers" "^10.0.2" "@types/node" "*" - jest-message-util "^29.6.2" - jest-mock "^29.6.2" - jest-util "^29.6.2" + "jest-message-util" "^29.6.2" + "jest-mock" "^29.6.2" + "jest-util" "^29.6.2" "@jest/globals@^29.6.2": - version "29.6.2" - resolved "https://registry.npmjs.org/@jest/globals/-/globals-29.6.2.tgz" - integrity sha512-cjuJmNDjs6aMijCmSa1g2TNG4Lby/AeU7/02VtpW+SLcZXzOLK2GpN2nLqcFjmhy3B3AoPeQVx7BnyOf681bAw== + "integrity" "sha512-cjuJmNDjs6aMijCmSa1g2TNG4Lby/AeU7/02VtpW+SLcZXzOLK2GpN2nLqcFjmhy3B3AoPeQVx7BnyOf681bAw==" + "resolved" "https://registry.npmjs.org/@jest/globals/-/globals-29.6.2.tgz" + "version" "29.6.2" dependencies: "@jest/environment" "^29.6.2" "@jest/expect" "^29.6.2" "@jest/types" "^29.6.1" - jest-mock "^29.6.2" + "jest-mock" "^29.6.2" "@jest/reporters@^29.6.2": - version "29.6.2" - resolved "https://registry.npmjs.org/@jest/reporters/-/reporters-29.6.2.tgz" - integrity sha512-sWtijrvIav8LgfJZlrGCdN0nP2EWbakglJY49J1Y5QihcQLfy7ovyxxjJBRXMNltgt4uPtEcFmIMbVshEDfFWw== + "integrity" "sha512-sWtijrvIav8LgfJZlrGCdN0nP2EWbakglJY49J1Y5QihcQLfy7ovyxxjJBRXMNltgt4uPtEcFmIMbVshEDfFWw==" + "resolved" "https://registry.npmjs.org/@jest/reporters/-/reporters-29.6.2.tgz" + "version" "29.6.2" dependencies: "@bcoe/v8-coverage" "^0.2.3" "@jest/console" "^29.6.2" @@ -491,194 +484,198 @@ "@jest/types" "^29.6.1" "@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 "^5.1.0" - istanbul-lib-report "^3.0.0" - istanbul-lib-source-maps "^4.0.0" - istanbul-reports "^3.1.3" - jest-message-util "^29.6.2" - jest-util "^29.6.2" - jest-worker "^29.6.2" - slash "^3.0.0" - string-length "^4.0.1" - strip-ansi "^6.0.0" - v8-to-istanbul "^9.0.1" + "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" "^5.1.0" + "istanbul-lib-report" "^3.0.0" + "istanbul-lib-source-maps" "^4.0.0" + "istanbul-reports" "^3.1.3" + "jest-message-util" "^29.6.2" + "jest-util" "^29.6.2" + "jest-worker" "^29.6.2" + "slash" "^3.0.0" + "string-length" "^4.0.1" + "strip-ansi" "^6.0.0" + "v8-to-istanbul" "^9.0.1" "@jest/schemas@^29.6.0": - version "29.6.0" - resolved "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.0.tgz" - integrity sha512-rxLjXyJBTL4LQeJW3aKo0M/+GkCOXsO+8i9Iu7eDb6KwtP65ayoDsitrdPBtujxQ88k4wI2FNYfa6TOGwSn6cQ== + "integrity" "sha512-rxLjXyJBTL4LQeJW3aKo0M/+GkCOXsO+8i9Iu7eDb6KwtP65ayoDsitrdPBtujxQ88k4wI2FNYfa6TOGwSn6cQ==" + "resolved" "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.0.tgz" + "version" "29.6.0" dependencies: "@sinclair/typebox" "^0.27.8" "@jest/source-map@^29.6.0": - version "29.6.0" - resolved "https://registry.npmjs.org/@jest/source-map/-/source-map-29.6.0.tgz" - integrity sha512-oA+I2SHHQGxDCZpbrsCQSoMLb3Bz547JnM+jUr9qEbuw0vQlWZfpPS7CO9J7XiwKicEz9OFn/IYoLkkiUD7bzA== + "integrity" "sha512-oA+I2SHHQGxDCZpbrsCQSoMLb3Bz547JnM+jUr9qEbuw0vQlWZfpPS7CO9J7XiwKicEz9OFn/IYoLkkiUD7bzA==" + "resolved" "https://registry.npmjs.org/@jest/source-map/-/source-map-29.6.0.tgz" + "version" "29.6.0" dependencies: "@jridgewell/trace-mapping" "^0.3.18" - callsites "^3.0.0" - graceful-fs "^4.2.9" + "callsites" "^3.0.0" + "graceful-fs" "^4.2.9" "@jest/test-result@^29.6.2": - version "29.6.2" - resolved "https://registry.npmjs.org/@jest/test-result/-/test-result-29.6.2.tgz" - integrity sha512-3VKFXzcV42EYhMCsJQURptSqnyjqCGbtLuX5Xxb6Pm6gUf1wIRIl+mandIRGJyWKgNKYF9cnstti6Ls5ekduqw== + "integrity" "sha512-3VKFXzcV42EYhMCsJQURptSqnyjqCGbtLuX5Xxb6Pm6gUf1wIRIl+mandIRGJyWKgNKYF9cnstti6Ls5ekduqw==" + "resolved" "https://registry.npmjs.org/@jest/test-result/-/test-result-29.6.2.tgz" + "version" "29.6.2" dependencies: "@jest/console" "^29.6.2" "@jest/types" "^29.6.1" "@types/istanbul-lib-coverage" "^2.0.0" - collect-v8-coverage "^1.0.0" + "collect-v8-coverage" "^1.0.0" "@jest/test-sequencer@^29.6.2": - version "29.6.2" - resolved "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-29.6.2.tgz" - integrity sha512-GVYi6PfPwVejO7slw6IDO0qKVum5jtrJ3KoLGbgBWyr2qr4GaxFV6su+ZAjdTX75Sr1DkMFRk09r2ZVa+wtCGw== + "integrity" "sha512-GVYi6PfPwVejO7slw6IDO0qKVum5jtrJ3KoLGbgBWyr2qr4GaxFV6su+ZAjdTX75Sr1DkMFRk09r2ZVa+wtCGw==" + "resolved" "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-29.6.2.tgz" + "version" "29.6.2" dependencies: "@jest/test-result" "^29.6.2" - graceful-fs "^4.2.9" - jest-haste-map "^29.6.2" - slash "^3.0.0" + "graceful-fs" "^4.2.9" + "jest-haste-map" "^29.6.2" + "slash" "^3.0.0" "@jest/transform@^29.6.2": - version "29.6.2" - resolved "https://registry.npmjs.org/@jest/transform/-/transform-29.6.2.tgz" - integrity sha512-ZqCqEISr58Ce3U+buNFJYUktLJZOggfyvR+bZMaiV1e8B1SIvJbwZMrYz3gx/KAPn9EXmOmN+uB08yLCjWkQQg== + "integrity" "sha512-ZqCqEISr58Ce3U+buNFJYUktLJZOggfyvR+bZMaiV1e8B1SIvJbwZMrYz3gx/KAPn9EXmOmN+uB08yLCjWkQQg==" + "resolved" "https://registry.npmjs.org/@jest/transform/-/transform-29.6.2.tgz" + "version" "29.6.2" dependencies: "@babel/core" "^7.11.6" "@jest/types" "^29.6.1" "@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.6.2" - jest-regex-util "^29.4.3" - jest-util "^29.6.2" - micromatch "^4.0.4" - pirates "^4.0.4" - slash "^3.0.0" - write-file-atomic "^4.0.2" - -"@jest/types@^29.6.1": - version "29.6.1" - resolved "https://registry.npmjs.org/@jest/types/-/types-29.6.1.tgz" - integrity sha512-tPKQNMPuXgvdOn2/Lg9HNfUvjYVGolt04Hp03f5hAk878uwOLikN+JzeLY0HcVgKgFl9Hs3EIqpu3WX27XNhnw== + "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.6.2" + "jest-regex-util" "^29.4.3" + "jest-util" "^29.6.2" + "micromatch" "^4.0.4" + "pirates" "^4.0.4" + "slash" "^3.0.0" + "write-file-atomic" "^4.0.2" + +"@jest/types@^29.0.0", "@jest/types@^29.6.1": + "integrity" "sha512-tPKQNMPuXgvdOn2/Lg9HNfUvjYVGolt04Hp03f5hAk878uwOLikN+JzeLY0HcVgKgFl9Hs3EIqpu3WX27XNhnw==" + "resolved" "https://registry.npmjs.org/@jest/types/-/types-29.6.1.tgz" + "version" "29.6.1" dependencies: "@jest/schemas" "^29.6.0" "@types/istanbul-lib-coverage" "^2.0.0" "@types/istanbul-reports" "^3.0.0" "@types/node" "*" "@types/yargs" "^17.0.8" - chalk "^4.0.0" + "chalk" "^4.0.0" "@jridgewell/gen-mapping@^0.3.0", "@jridgewell/gen-mapping@^0.3.2": - version "0.3.3" - resolved "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz" - integrity sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ== + "integrity" "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==" + "resolved" "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz" + "version" "0.3.3" dependencies: "@jridgewell/set-array" "^1.0.1" "@jridgewell/sourcemap-codec" "^1.4.10" "@jridgewell/trace-mapping" "^0.3.9" "@jridgewell/resolve-uri@^3.1.0": - version "3.1.1" - resolved "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz" - integrity sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA== + "integrity" "sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==" + "resolved" "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz" + "version" "3.1.1" "@jridgewell/set-array@^1.0.1": - version "1.1.2" - resolved "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz" - integrity sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw== + "integrity" "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==" + "resolved" "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz" + "version" "1.1.2" "@jridgewell/source-map@^0.3.3": - version "0.3.5" - resolved "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.5.tgz" - integrity sha512-UTYAUj/wviwdsMfzoSJspJxbkH5o1snzwX0//0ENX1u/55kkZZkcTZP6u9bwKGkv+dkk9at4m1Cpt0uY80kcpQ== + "integrity" "sha512-UTYAUj/wviwdsMfzoSJspJxbkH5o1snzwX0//0ENX1u/55kkZZkcTZP6u9bwKGkv+dkk9at4m1Cpt0uY80kcpQ==" + "resolved" "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.5.tgz" + "version" "0.3.5" dependencies: "@jridgewell/gen-mapping" "^0.3.0" "@jridgewell/trace-mapping" "^0.3.9" "@jridgewell/sourcemap-codec@^1.4.10", "@jridgewell/sourcemap-codec@^1.4.14": - version "1.4.15" - resolved "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz" - integrity sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg== + "integrity" "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==" + "resolved" "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz" + "version" "1.4.15" "@jridgewell/trace-mapping@^0.3.12", "@jridgewell/trace-mapping@^0.3.17", "@jridgewell/trace-mapping@^0.3.18", "@jridgewell/trace-mapping@^0.3.9": - version "0.3.19" - resolved "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.19.tgz" - integrity sha512-kf37QtfW+Hwx/buWGMPcR60iF9ziHa6r/CZJIHbmcm4+0qrXiVdxegAH0F6yddEVQ7zdkjcGCgCzUu+BcbhQxw== + "integrity" "sha512-kf37QtfW+Hwx/buWGMPcR60iF9ziHa6r/CZJIHbmcm4+0qrXiVdxegAH0F6yddEVQ7zdkjcGCgCzUu+BcbhQxw==" + "resolved" "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.19.tgz" + "version" "0.3.19" dependencies: "@jridgewell/resolve-uri" "^3.1.0" "@jridgewell/sourcemap-codec" "^1.4.14" "@nodelib/fs.scandir@2.1.5": - version "2.1.5" - resolved "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz" - integrity sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g== + "integrity" "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==" + "resolved" "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz" + "version" "2.1.5" dependencies: "@nodelib/fs.stat" "2.0.5" - run-parallel "^1.1.9" + "run-parallel" "^1.1.9" -"@nodelib/fs.stat@2.0.5", "@nodelib/fs.stat@^2.0.2": - version "2.0.5" - resolved "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz" - integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A== +"@nodelib/fs.stat@^2.0.2", "@nodelib/fs.stat@2.0.5": + "integrity" "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==" + "resolved" "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz" + "version" "2.0.5" "@nodelib/fs.walk@^1.2.3", "@nodelib/fs.walk@^1.2.8": - version "1.2.8" - resolved "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz" - integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg== + "integrity" "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==" + "resolved" "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz" + "version" "1.2.8" dependencies: "@nodelib/fs.scandir" "2.1.5" - fastq "^1.6.0" + "fastq" "^1.6.0" -"@npmcli/fs@^3.1.0": - version "3.1.0" - resolved "https://registry.yarnpkg.com/@npmcli/fs/-/fs-3.1.0.tgz#233d43a25a91d68c3a863ba0da6a3f00924a173e" - integrity sha512-7kZUAaLscfgbwBQRbvdMYaZOWyMEcPTH/tJjnyAWJ/dvvs9Ef+CERx/qJb9GExJpl1qipaDGn7KqHnFGGixd0w== +"@npmcli/fs@^2.1.0": + "integrity" "sha512-yOJKRvohFOaLqipNtwYB9WugyZKhC/DZC4VYPmpaCzDBrA8YpK3qHZ8/HGscMnE4GqbkLNuVcCnxkeQEdGt6LQ==" + "resolved" "https://registry.npmjs.org/@npmcli/fs/-/fs-2.1.2.tgz" + "version" "2.1.2" dependencies: - semver "^7.3.5" + "@gar/promisify" "^1.1.3" + "semver" "^7.3.5" -"@pkgjs/parseargs@^0.11.0": - version "0.11.0" - resolved "https://registry.yarnpkg.com/@pkgjs/parseargs/-/parseargs-0.11.0.tgz#a77ea742fab25775145434eb1d2328cf5013ac33" - integrity sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg== +"@npmcli/move-file@^2.0.0": + "integrity" "sha512-mJd2Z5TjYWq/ttPLLGqArdtnC74J6bOzg4rMDnN+p1xTacZ2yPRCk2y0oSWQtygLR9YVQXgOcONrwtnk3JupxQ==" + "resolved" "https://registry.npmjs.org/@npmcli/move-file/-/move-file-2.0.1.tgz" + "version" "2.0.1" + dependencies: + "mkdirp" "^1.0.4" + "rimraf" "^3.0.2" "@sinclair/typebox@^0.27.8": - version "0.27.8" - resolved "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz" - integrity sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA== + "integrity" "sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==" + "resolved" "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz" + "version" "0.27.8" "@sinonjs/commons@^3.0.0": - version "3.0.0" - resolved "https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.0.tgz" - integrity sha512-jXBtWAF4vmdNmZgD5FoKsVLv3rPgDnLgPbU84LIJ3otV44vJlDRokVng5v8NFJdCf/da9legHcKaRuZs4L7faA== + "integrity" "sha512-jXBtWAF4vmdNmZgD5FoKsVLv3rPgDnLgPbU84LIJ3otV44vJlDRokVng5v8NFJdCf/da9legHcKaRuZs4L7faA==" + "resolved" "https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.0.tgz" + "version" "3.0.0" dependencies: - type-detect "4.0.8" + "type-detect" "4.0.8" "@sinonjs/fake-timers@^10.0.2": - version "10.3.0" - resolved "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-10.3.0.tgz" - integrity sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA== + "integrity" "sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==" + "resolved" "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-10.3.0.tgz" + "version" "10.3.0" dependencies: "@sinonjs/commons" "^3.0.0" "@tootallnate/once@2": - version "2.0.0" - resolved "https://registry.yarnpkg.com/@tootallnate/once/-/once-2.0.0.tgz#f544a148d3ab35801c1f633a7441fd87c2e484bf" - integrity sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A== + "integrity" "sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==" + "resolved" "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz" + "version" "2.0.0" "@types/babel__core@^7.1.14": - version "7.20.1" - resolved "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.1.tgz" - integrity sha512-aACu/U/omhdk15O4Nfb+fHgH/z3QsfQzpnvRZhYhThms83ZnAOZz7zZAWO7mn2yyNQaA4xTO8GLK3uqFU4bYYw== + "integrity" "sha512-aACu/U/omhdk15O4Nfb+fHgH/z3QsfQzpnvRZhYhThms83ZnAOZz7zZAWO7mn2yyNQaA4xTO8GLK3uqFU4bYYw==" + "resolved" "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.1.tgz" + "version" "7.20.1" dependencies: "@babel/parser" "^7.20.7" "@babel/types" "^7.20.7" @@ -687,180 +684,180 @@ "@types/babel__traverse" "*" "@types/babel__generator@*": - version "7.6.4" - resolved "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.4.tgz" - integrity sha512-tFkciB9j2K755yrTALxD44McOrk+gfpIpvC3sxHjRawj6PfnQxrse4Clq5y/Rq+G3mrBurMax/lG8Qn2t9mSsg== + "integrity" "sha512-tFkciB9j2K755yrTALxD44McOrk+gfpIpvC3sxHjRawj6PfnQxrse4Clq5y/Rq+G3mrBurMax/lG8Qn2t9mSsg==" + "resolved" "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.4.tgz" + "version" "7.6.4" dependencies: "@babel/types" "^7.0.0" "@types/babel__template@*": - version "7.4.1" - resolved "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.1.tgz" - integrity sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g== + "integrity" "sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g==" + "resolved" "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.1.tgz" + "version" "7.4.1" dependencies: "@babel/parser" "^7.1.0" "@babel/types" "^7.0.0" "@types/babel__traverse@*", "@types/babel__traverse@^7.0.6": - version "7.20.1" - resolved "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.1.tgz" - integrity sha512-MitHFXnhtgwsGZWtT68URpOvLN4EREih1u3QtQiN4VdAxWKRVvGCSvw/Qth0M0Qq3pJpnGOu5JaM/ydK7OGbqg== + "integrity" "sha512-MitHFXnhtgwsGZWtT68URpOvLN4EREih1u3QtQiN4VdAxWKRVvGCSvw/Qth0M0Qq3pJpnGOu5JaM/ydK7OGbqg==" + "resolved" "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.1.tgz" + "version" "7.20.1" dependencies: "@babel/types" "^7.20.7" "@types/eslint-scope@^3.7.3": - version "3.7.5" - resolved "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.5.tgz" - integrity sha512-JNvhIEyxVW6EoMIFIvj93ZOywYFatlpu9deeH6eSx6PE3WHYvHaQtmHmQeNw7aA81bYGBPPQqdtBm6b1SsQMmA== + "integrity" "sha512-JNvhIEyxVW6EoMIFIvj93ZOywYFatlpu9deeH6eSx6PE3WHYvHaQtmHmQeNw7aA81bYGBPPQqdtBm6b1SsQMmA==" + "resolved" "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.5.tgz" + "version" "3.7.5" dependencies: "@types/eslint" "*" "@types/estree" "*" "@types/eslint@*": - version "8.44.3" - resolved "https://registry.npmjs.org/@types/eslint/-/eslint-8.44.3.tgz" - integrity sha512-iM/WfkwAhwmPff3wZuPLYiHX18HI24jU8k1ZSH7P8FHwxTjZ2P6CoX2wnF43oprR+YXJM6UUxATkNvyv/JHd+g== + "integrity" "sha512-iM/WfkwAhwmPff3wZuPLYiHX18HI24jU8k1ZSH7P8FHwxTjZ2P6CoX2wnF43oprR+YXJM6UUxATkNvyv/JHd+g==" + "resolved" "https://registry.npmjs.org/@types/eslint/-/eslint-8.44.3.tgz" + "version" "8.44.3" dependencies: "@types/estree" "*" "@types/json-schema" "*" "@types/estree@*", "@types/estree@^1.0.0": - version "1.0.2" - resolved "https://registry.npmjs.org/@types/estree/-/estree-1.0.2.tgz" - integrity sha512-VeiPZ9MMwXjO32/Xu7+OwflfmeoRwkE/qzndw42gGtgJwZopBnzy2gD//NN1+go1mADzkDcqf/KnFRSjTJ8xJA== + "integrity" "sha512-VeiPZ9MMwXjO32/Xu7+OwflfmeoRwkE/qzndw42gGtgJwZopBnzy2gD//NN1+go1mADzkDcqf/KnFRSjTJ8xJA==" + "resolved" "https://registry.npmjs.org/@types/estree/-/estree-1.0.2.tgz" + "version" "1.0.2" "@types/graceful-fs@^4.1.3": - version "4.1.6" - resolved "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.6.tgz" - integrity sha512-Sig0SNORX9fdW+bQuTEovKj3uHcUL6LQKbCrrqb1X7J6/ReAbhCXRAhc+SMejhLELFj2QcyuxmUooZ4bt5ReSw== + "integrity" "sha512-Sig0SNORX9fdW+bQuTEovKj3uHcUL6LQKbCrrqb1X7J6/ReAbhCXRAhc+SMejhLELFj2QcyuxmUooZ4bt5ReSw==" + "resolved" "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.6.tgz" + "version" "4.1.6" dependencies: "@types/node" "*" "@types/istanbul-lib-coverage@*", "@types/istanbul-lib-coverage@^2.0.0", "@types/istanbul-lib-coverage@^2.0.1": - version "2.0.4" - resolved "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz" - integrity sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g== + "integrity" "sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g==" + "resolved" "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz" + "version" "2.0.4" "@types/istanbul-lib-report@*": - version "3.0.0" - resolved "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz" - integrity sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg== + "integrity" "sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==" + "resolved" "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz" + "version" "3.0.0" dependencies: "@types/istanbul-lib-coverage" "*" "@types/istanbul-reports@^3.0.0": - version "3.0.1" - resolved "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz" - integrity sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw== + "integrity" "sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==" + "resolved" "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz" + "version" "3.0.1" dependencies: "@types/istanbul-lib-report" "*" "@types/jest@^29.4.0": - version "29.5.3" - resolved "https://registry.npmjs.org/@types/jest/-/jest-29.5.3.tgz" - integrity sha512-1Nq7YrO/vJE/FYnqYyw0FS8LdrjExSgIiHyKg7xPpn+yi8Q4huZryKnkJatN1ZRH89Kw2v33/8ZMB7DuZeSLlA== + "integrity" "sha512-1Nq7YrO/vJE/FYnqYyw0FS8LdrjExSgIiHyKg7xPpn+yi8Q4huZryKnkJatN1ZRH89Kw2v33/8ZMB7DuZeSLlA==" + "resolved" "https://registry.npmjs.org/@types/jest/-/jest-29.5.3.tgz" + "version" "29.5.3" dependencies: - expect "^29.0.0" - pretty-format "^29.0.0" + "expect" "^29.0.0" + "pretty-format" "^29.0.0" "@types/json-schema@*", "@types/json-schema@^7.0.8", "@types/json-schema@^7.0.9": - version "7.0.12" - resolved "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.12.tgz" - integrity sha512-Hr5Jfhc9eYOQNPYO5WLDq/n4jqijdHNlDXjuAQkkt+mWdQR+XJToOHrsD4cPaMXpn6KO7y2+wM8AZEs8VpBLVA== + "integrity" "sha512-Hr5Jfhc9eYOQNPYO5WLDq/n4jqijdHNlDXjuAQkkt+mWdQR+XJToOHrsD4cPaMXpn6KO7y2+wM8AZEs8VpBLVA==" + "resolved" "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.12.tgz" + "version" "7.0.12" "@types/node@*", "@types/node@^18.15.12": - version "18.17.5" - resolved "https://registry.npmjs.org/@types/node/-/node-18.17.5.tgz" - integrity sha512-xNbS75FxH6P4UXTPUJp/zNPq6/xsfdJKussCWNOnz4aULWIRwMgP1LgaB5RiBnMX1DPCYenuqGZfnIAx5mbFLA== + "integrity" "sha512-xNbS75FxH6P4UXTPUJp/zNPq6/xsfdJKussCWNOnz4aULWIRwMgP1LgaB5RiBnMX1DPCYenuqGZfnIAx5mbFLA==" + "resolved" "https://registry.npmjs.org/@types/node/-/node-18.17.5.tgz" + "version" "18.17.5" "@types/semver@^7.3.12": - version "7.5.0" - resolved "https://registry.npmjs.org/@types/semver/-/semver-7.5.0.tgz" - integrity sha512-G8hZ6XJiHnuhQKR7ZmysCeJWE08o8T0AXtk5darsCaTVsYZhhgUrq53jizaR2FvsoeCwJhlmwTjkXBY5Pn/ZHw== + "integrity" "sha512-G8hZ6XJiHnuhQKR7ZmysCeJWE08o8T0AXtk5darsCaTVsYZhhgUrq53jizaR2FvsoeCwJhlmwTjkXBY5Pn/ZHw==" + "resolved" "https://registry.npmjs.org/@types/semver/-/semver-7.5.0.tgz" + "version" "7.5.0" "@types/stack-utils@^2.0.0": - version "2.0.1" - resolved "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.1.tgz" - integrity sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw== + "integrity" "sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw==" + "resolved" "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.1.tgz" + "version" "2.0.1" "@types/yargs-parser@*": - version "21.0.0" - resolved "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.0.tgz" - integrity sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA== + "integrity" "sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA==" + "resolved" "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.0.tgz" + "version" "21.0.0" "@types/yargs@^17.0.8": - version "17.0.24" - resolved "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.24.tgz" - integrity sha512-6i0aC7jV6QzQB8ne1joVZ0eSFIstHsCrobmOtghM11yGlH0j43FKL2UhWdELkyps0zuf7qVTUVCCR+tgSlyLLw== + "integrity" "sha512-6i0aC7jV6QzQB8ne1joVZ0eSFIstHsCrobmOtghM11yGlH0j43FKL2UhWdELkyps0zuf7qVTUVCCR+tgSlyLLw==" + "resolved" "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.24.tgz" + "version" "17.0.24" dependencies: "@types/yargs-parser" "*" "@typescript-eslint/eslint-plugin@^5.30.7": - version "5.62.0" - resolved "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.62.0.tgz" - integrity sha512-TiZzBSJja/LbhNPvk6yc0JrX9XqhQ0hdh6M2svYfsHGejaKFIAGd9MQ+ERIMzLGlN/kZoYIgdxFV0PuljTKXag== + "integrity" "sha512-TiZzBSJja/LbhNPvk6yc0JrX9XqhQ0hdh6M2svYfsHGejaKFIAGd9MQ+ERIMzLGlN/kZoYIgdxFV0PuljTKXag==" + "resolved" "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.62.0.tgz" + "version" "5.62.0" dependencies: "@eslint-community/regexpp" "^4.4.0" "@typescript-eslint/scope-manager" "5.62.0" "@typescript-eslint/type-utils" "5.62.0" "@typescript-eslint/utils" "5.62.0" - debug "^4.3.4" - graphemer "^1.4.0" - ignore "^5.2.0" - natural-compare-lite "^1.4.0" - semver "^7.3.7" - tsutils "^3.21.0" - -"@typescript-eslint/parser@^5.30.7": - version "5.62.0" - resolved "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.62.0.tgz" - integrity sha512-VlJEV0fOQ7BExOsHYAGrgbEiZoi8D+Bl2+f6V2RrXerRSylnp+ZBHmPvaIa8cz0Ajx7WO7Z5RqfgYg7ED1nRhA== + "debug" "^4.3.4" + "graphemer" "^1.4.0" + "ignore" "^5.2.0" + "natural-compare-lite" "^1.4.0" + "semver" "^7.3.7" + "tsutils" "^3.21.0" + +"@typescript-eslint/parser@^5.0.0", "@typescript-eslint/parser@^5.30.7": + "integrity" "sha512-VlJEV0fOQ7BExOsHYAGrgbEiZoi8D+Bl2+f6V2RrXerRSylnp+ZBHmPvaIa8cz0Ajx7WO7Z5RqfgYg7ED1nRhA==" + "resolved" "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.62.0.tgz" + "version" "5.62.0" dependencies: "@typescript-eslint/scope-manager" "5.62.0" "@typescript-eslint/types" "5.62.0" "@typescript-eslint/typescript-estree" "5.62.0" - debug "^4.3.4" + "debug" "^4.3.4" "@typescript-eslint/scope-manager@5.62.0": - version "5.62.0" - resolved "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.62.0.tgz" - integrity sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w== + "integrity" "sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w==" + "resolved" "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.62.0.tgz" + "version" "5.62.0" dependencies: "@typescript-eslint/types" "5.62.0" "@typescript-eslint/visitor-keys" "5.62.0" "@typescript-eslint/type-utils@5.62.0": - version "5.62.0" - resolved "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.62.0.tgz" - integrity sha512-xsSQreu+VnfbqQpW5vnCJdq1Z3Q0U31qiWmRhr98ONQmcp/yhiPJFPq8MXiJVLiksmOKSjIldZzkebzHuCGzew== + "integrity" "sha512-xsSQreu+VnfbqQpW5vnCJdq1Z3Q0U31qiWmRhr98ONQmcp/yhiPJFPq8MXiJVLiksmOKSjIldZzkebzHuCGzew==" + "resolved" "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.62.0.tgz" + "version" "5.62.0" dependencies: "@typescript-eslint/typescript-estree" "5.62.0" "@typescript-eslint/utils" "5.62.0" - debug "^4.3.4" - tsutils "^3.21.0" + "debug" "^4.3.4" + "tsutils" "^3.21.0" "@typescript-eslint/types@5.62.0": - version "5.62.0" - resolved "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.62.0.tgz" - integrity sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ== + "integrity" "sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ==" + "resolved" "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.62.0.tgz" + "version" "5.62.0" "@typescript-eslint/typescript-estree@5.62.0": - version "5.62.0" - resolved "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.62.0.tgz" - integrity sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA== + "integrity" "sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA==" + "resolved" "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.62.0.tgz" + "version" "5.62.0" dependencies: "@typescript-eslint/types" "5.62.0" "@typescript-eslint/visitor-keys" "5.62.0" - debug "^4.3.4" - globby "^11.1.0" - is-glob "^4.0.3" - semver "^7.3.7" - tsutils "^3.21.0" + "debug" "^4.3.4" + "globby" "^11.1.0" + "is-glob" "^4.0.3" + "semver" "^7.3.7" + "tsutils" "^3.21.0" "@typescript-eslint/utils@5.62.0": - version "5.62.0" - resolved "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.62.0.tgz" - integrity sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ== + "integrity" "sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ==" + "resolved" "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.62.0.tgz" + "version" "5.62.0" dependencies: "@eslint-community/eslint-utils" "^4.2.0" "@types/json-schema" "^7.0.9" @@ -868,58 +865,58 @@ "@typescript-eslint/scope-manager" "5.62.0" "@typescript-eslint/types" "5.62.0" "@typescript-eslint/typescript-estree" "5.62.0" - eslint-scope "^5.1.1" - semver "^7.3.7" + "eslint-scope" "^5.1.1" + "semver" "^7.3.7" "@typescript-eslint/visitor-keys@5.62.0": - version "5.62.0" - resolved "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.62.0.tgz" - integrity sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw== + "integrity" "sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw==" + "resolved" "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.62.0.tgz" + "version" "5.62.0" dependencies: "@typescript-eslint/types" "5.62.0" - eslint-visitor-keys "^3.3.0" + "eslint-visitor-keys" "^3.3.0" -"@webassemblyjs/ast@1.11.6", "@webassemblyjs/ast@^1.11.5": - version "1.11.6" - resolved "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.6.tgz" - integrity sha512-IN1xI7PwOvLPgjcf180gC1bqn3q/QaOCwYUahIOhbYUu8KA/3tw2RT/T0Gidi1l7Hhj5D/INhJxiICObqpMu4Q== +"@webassemblyjs/ast@^1.11.5", "@webassemblyjs/ast@1.11.6": + "integrity" "sha512-IN1xI7PwOvLPgjcf180gC1bqn3q/QaOCwYUahIOhbYUu8KA/3tw2RT/T0Gidi1l7Hhj5D/INhJxiICObqpMu4Q==" + "resolved" "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.6.tgz" + "version" "1.11.6" dependencies: "@webassemblyjs/helper-numbers" "1.11.6" "@webassemblyjs/helper-wasm-bytecode" "1.11.6" "@webassemblyjs/floating-point-hex-parser@1.11.6": - version "1.11.6" - resolved "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.6.tgz" - integrity sha512-ejAj9hfRJ2XMsNHk/v6Fu2dGS+i4UaXBXGemOfQ/JfQ6mdQg/WXtwleQRLLS4OvfDhv8rYnVwH27YJLMyYsxhw== + "integrity" "sha512-ejAj9hfRJ2XMsNHk/v6Fu2dGS+i4UaXBXGemOfQ/JfQ6mdQg/WXtwleQRLLS4OvfDhv8rYnVwH27YJLMyYsxhw==" + "resolved" "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.6.tgz" + "version" "1.11.6" "@webassemblyjs/helper-api-error@1.11.6": - version "1.11.6" - resolved "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.6.tgz" - integrity sha512-o0YkoP4pVu4rN8aTJgAyj9hC2Sv5UlkzCHhxqWj8butaLvnpdc2jOwh4ewE6CX0txSfLn/UYaV/pheS2Txg//Q== + "integrity" "sha512-o0YkoP4pVu4rN8aTJgAyj9hC2Sv5UlkzCHhxqWj8butaLvnpdc2jOwh4ewE6CX0txSfLn/UYaV/pheS2Txg//Q==" + "resolved" "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.6.tgz" + "version" "1.11.6" "@webassemblyjs/helper-buffer@1.11.6": - version "1.11.6" - resolved "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.6.tgz" - integrity sha512-z3nFzdcp1mb8nEOFFk8DrYLpHvhKC3grJD2ardfKOzmbmJvEf/tPIqCY+sNcwZIY8ZD7IkB2l7/pqhUhqm7hLA== + "integrity" "sha512-z3nFzdcp1mb8nEOFFk8DrYLpHvhKC3grJD2ardfKOzmbmJvEf/tPIqCY+sNcwZIY8ZD7IkB2l7/pqhUhqm7hLA==" + "resolved" "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.6.tgz" + "version" "1.11.6" "@webassemblyjs/helper-numbers@1.11.6": - version "1.11.6" - resolved "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.6.tgz" - integrity sha512-vUIhZ8LZoIWHBohiEObxVm6hwP034jwmc9kuq5GdHZH0wiLVLIPcMCdpJzG4C11cHoQ25TFIQj9kaVADVX7N3g== + "integrity" "sha512-vUIhZ8LZoIWHBohiEObxVm6hwP034jwmc9kuq5GdHZH0wiLVLIPcMCdpJzG4C11cHoQ25TFIQj9kaVADVX7N3g==" + "resolved" "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.6.tgz" + "version" "1.11.6" dependencies: "@webassemblyjs/floating-point-hex-parser" "1.11.6" "@webassemblyjs/helper-api-error" "1.11.6" "@xtuc/long" "4.2.2" "@webassemblyjs/helper-wasm-bytecode@1.11.6": - version "1.11.6" - resolved "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.6.tgz" - integrity sha512-sFFHKwcmBprO9e7Icf0+gddyWYDViL8bpPjJJl0WHxCdETktXdmtWLGVzoHbqUcY4Be1LkNfwTmXOJUFZYSJdA== + "integrity" "sha512-sFFHKwcmBprO9e7Icf0+gddyWYDViL8bpPjJJl0WHxCdETktXdmtWLGVzoHbqUcY4Be1LkNfwTmXOJUFZYSJdA==" + "resolved" "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.6.tgz" + "version" "1.11.6" "@webassemblyjs/helper-wasm-section@1.11.6": - version "1.11.6" - resolved "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.6.tgz" - integrity sha512-LPpZbSOwTpEC2cgn4hTydySy1Ke+XEu+ETXuoyvuyezHO3Kjdu90KK95Sh9xTbmjrCsUwvWwCOQQNta37VrS9g== + "integrity" "sha512-LPpZbSOwTpEC2cgn4hTydySy1Ke+XEu+ETXuoyvuyezHO3Kjdu90KK95Sh9xTbmjrCsUwvWwCOQQNta37VrS9g==" + "resolved" "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.6.tgz" + "version" "1.11.6" dependencies: "@webassemblyjs/ast" "1.11.6" "@webassemblyjs/helper-buffer" "1.11.6" @@ -927,28 +924,28 @@ "@webassemblyjs/wasm-gen" "1.11.6" "@webassemblyjs/ieee754@1.11.6": - version "1.11.6" - resolved "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.6.tgz" - integrity sha512-LM4p2csPNvbij6U1f19v6WR56QZ8JcHg3QIJTlSwzFcmx6WSORicYj6I63f9yU1kEUtrpG+kjkiIAkevHpDXrg== + "integrity" "sha512-LM4p2csPNvbij6U1f19v6WR56QZ8JcHg3QIJTlSwzFcmx6WSORicYj6I63f9yU1kEUtrpG+kjkiIAkevHpDXrg==" + "resolved" "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.6.tgz" + "version" "1.11.6" dependencies: "@xtuc/ieee754" "^1.2.0" "@webassemblyjs/leb128@1.11.6": - version "1.11.6" - resolved "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.6.tgz" - integrity sha512-m7a0FhE67DQXgouf1tbN5XQcdWoNgaAuoULHIfGFIEVKA6tu/edls6XnIlkmS6FrXAquJRPni3ZZKjw6FSPjPQ== + "integrity" "sha512-m7a0FhE67DQXgouf1tbN5XQcdWoNgaAuoULHIfGFIEVKA6tu/edls6XnIlkmS6FrXAquJRPni3ZZKjw6FSPjPQ==" + "resolved" "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.6.tgz" + "version" "1.11.6" dependencies: "@xtuc/long" "4.2.2" "@webassemblyjs/utf8@1.11.6": - version "1.11.6" - resolved "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.6.tgz" - integrity sha512-vtXf2wTQ3+up9Zsg8sa2yWiQpzSsMyXj0qViVP6xKGCUT8p8YJ6HqI7l5eCnWx1T/FYdsv07HQs2wTFbbof/RA== + "integrity" "sha512-vtXf2wTQ3+up9Zsg8sa2yWiQpzSsMyXj0qViVP6xKGCUT8p8YJ6HqI7l5eCnWx1T/FYdsv07HQs2wTFbbof/RA==" + "resolved" "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.6.tgz" + "version" "1.11.6" "@webassemblyjs/wasm-edit@^1.11.5": - version "1.11.6" - resolved "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.6.tgz" - integrity sha512-Ybn2I6fnfIGuCR+Faaz7YcvtBKxvoLV3Lebn1tM4o/IAJzmi9AWYIPWpyBfU8cC+JxAO57bk4+zdsTjJR+VTOw== + "integrity" "sha512-Ybn2I6fnfIGuCR+Faaz7YcvtBKxvoLV3Lebn1tM4o/IAJzmi9AWYIPWpyBfU8cC+JxAO57bk4+zdsTjJR+VTOw==" + "resolved" "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.6.tgz" + "version" "1.11.6" dependencies: "@webassemblyjs/ast" "1.11.6" "@webassemblyjs/helper-buffer" "1.11.6" @@ -960,9 +957,9 @@ "@webassemblyjs/wast-printer" "1.11.6" "@webassemblyjs/wasm-gen@1.11.6": - version "1.11.6" - resolved "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.6.tgz" - integrity sha512-3XOqkZP/y6B4F0PBAXvI1/bky7GryoogUtfwExeP/v7Nzwo1QLcq5oQmpKlftZLbT+ERUOAZVQjuNVak6UXjPA== + "integrity" "sha512-3XOqkZP/y6B4F0PBAXvI1/bky7GryoogUtfwExeP/v7Nzwo1QLcq5oQmpKlftZLbT+ERUOAZVQjuNVak6UXjPA==" + "resolved" "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.6.tgz" + "version" "1.11.6" dependencies: "@webassemblyjs/ast" "1.11.6" "@webassemblyjs/helper-wasm-bytecode" "1.11.6" @@ -971,19 +968,19 @@ "@webassemblyjs/utf8" "1.11.6" "@webassemblyjs/wasm-opt@1.11.6": - version "1.11.6" - resolved "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.6.tgz" - integrity sha512-cOrKuLRE7PCe6AsOVl7WasYf3wbSo4CeOk6PkrjS7g57MFfVUF9u6ysQBBODX0LdgSvQqRiGz3CXvIDKcPNy4g== + "integrity" "sha512-cOrKuLRE7PCe6AsOVl7WasYf3wbSo4CeOk6PkrjS7g57MFfVUF9u6ysQBBODX0LdgSvQqRiGz3CXvIDKcPNy4g==" + "resolved" "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.6.tgz" + "version" "1.11.6" dependencies: "@webassemblyjs/ast" "1.11.6" "@webassemblyjs/helper-buffer" "1.11.6" "@webassemblyjs/wasm-gen" "1.11.6" "@webassemblyjs/wasm-parser" "1.11.6" -"@webassemblyjs/wasm-parser@1.11.6", "@webassemblyjs/wasm-parser@^1.11.5": - version "1.11.6" - resolved "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.6.tgz" - integrity sha512-6ZwPeGzMJM3Dqp3hCsLgESxBGtT/OeCvCZ4TA1JUPYgmhAx38tTPR9JaKy0S5H3evQpO/h2uWs2j6Yc/fjkpTQ== +"@webassemblyjs/wasm-parser@^1.11.5", "@webassemblyjs/wasm-parser@1.11.6": + "integrity" "sha512-6ZwPeGzMJM3Dqp3hCsLgESxBGtT/OeCvCZ4TA1JUPYgmhAx38tTPR9JaKy0S5H3evQpO/h2uWs2j6Yc/fjkpTQ==" + "resolved" "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.6.tgz" + "version" "1.11.6" dependencies: "@webassemblyjs/ast" "1.11.6" "@webassemblyjs/helper-api-error" "1.11.6" @@ -993,309 +990,299 @@ "@webassemblyjs/utf8" "1.11.6" "@webassemblyjs/wast-printer@1.11.6": - version "1.11.6" - resolved "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.6.tgz" - integrity sha512-JM7AhRcE+yW2GWYaKeHL5vt4xqee5N2WcezptmgyhNS+ScggqcT1OtXykhAb13Sn5Yas0j2uv9tHgrjwvzAP4A== + "integrity" "sha512-JM7AhRcE+yW2GWYaKeHL5vt4xqee5N2WcezptmgyhNS+ScggqcT1OtXykhAb13Sn5Yas0j2uv9tHgrjwvzAP4A==" + "resolved" "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.6.tgz" + "version" "1.11.6" dependencies: "@webassemblyjs/ast" "1.11.6" "@xtuc/long" "4.2.2" "@webpack-cli/configtest@^2.1.1": - version "2.1.1" - resolved "https://registry.npmjs.org/@webpack-cli/configtest/-/configtest-2.1.1.tgz" - integrity sha512-wy0mglZpDSiSS0XHrVR+BAdId2+yxPSoJW8fsna3ZpYSlufjvxnP4YbKTCBZnNIcGN4r6ZPXV55X4mYExOfLmw== + "integrity" "sha512-wy0mglZpDSiSS0XHrVR+BAdId2+yxPSoJW8fsna3ZpYSlufjvxnP4YbKTCBZnNIcGN4r6ZPXV55X4mYExOfLmw==" + "resolved" "https://registry.npmjs.org/@webpack-cli/configtest/-/configtest-2.1.1.tgz" + "version" "2.1.1" "@webpack-cli/info@^2.0.2": - version "2.0.2" - resolved "https://registry.npmjs.org/@webpack-cli/info/-/info-2.0.2.tgz" - integrity sha512-zLHQdI/Qs1UyT5UBdWNqsARasIA+AaF8t+4u2aS2nEpBQh2mWIVb8qAklq0eUENnC5mOItrIB4LiS9xMtph18A== + "integrity" "sha512-zLHQdI/Qs1UyT5UBdWNqsARasIA+AaF8t+4u2aS2nEpBQh2mWIVb8qAklq0eUENnC5mOItrIB4LiS9xMtph18A==" + "resolved" "https://registry.npmjs.org/@webpack-cli/info/-/info-2.0.2.tgz" + "version" "2.0.2" "@webpack-cli/serve@^2.0.5": - version "2.0.5" - resolved "https://registry.npmjs.org/@webpack-cli/serve/-/serve-2.0.5.tgz" - integrity sha512-lqaoKnRYBdo1UgDX8uF24AfGMifWK19TxPmM5FHc2vAGxrJ/qtyUyFBWoY1tISZdelsQ5fBcOusifo5o5wSJxQ== + "integrity" "sha512-lqaoKnRYBdo1UgDX8uF24AfGMifWK19TxPmM5FHc2vAGxrJ/qtyUyFBWoY1tISZdelsQ5fBcOusifo5o5wSJxQ==" + "resolved" "https://registry.npmjs.org/@webpack-cli/serve/-/serve-2.0.5.tgz" + "version" "2.0.5" "@xtuc/ieee754@^1.2.0": - version "1.2.0" - resolved "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz" - integrity sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA== + "integrity" "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==" + "resolved" "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz" + "version" "1.2.0" "@xtuc/long@4.2.2": - version "4.2.2" - resolved "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz" - integrity sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ== - -abbrev@1, abbrev@^1.0.0: - version "1.1.1" - resolved "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz" - integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q== - -abort-controller@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/abort-controller/-/abort-controller-3.0.0.tgz#eaf54d53b62bae4138e809ca225c8439a6efb392" - integrity sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg== - dependencies: - event-target-shim "^5.0.0" - -acorn-import-assertions@^1.9.0: - version "1.9.0" - resolved "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.9.0.tgz" - integrity sha512-cmMwop9x+8KFhxvKrKfPYmN6/pKTYYHBqLa0DfvVZcKMJWNyWLnaqND7dx/qn66R7ewM1UX5XMaDVP5wlVTaVA== - -acorn-jsx@^5.3.2: - version "5.3.2" - resolved "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz" - integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== - -acorn@^8.7.1, acorn@^8.8.2, acorn@^8.9.0: - version "8.10.0" - resolved "https://registry.npmjs.org/acorn/-/acorn-8.10.0.tgz" - integrity sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw== - -after@~0.8.1: - version "0.8.2" - resolved "https://registry.npmjs.org/after/-/after-0.8.2.tgz" - integrity sha512-QbJ0NTQ/I9DI3uSJA4cbexiwQeRAfjPScqIbSjUDd9TOrcg6pTkdgziesOqxBMBzit8vFCTwrP27t13vFOORRA== - -agent-base@6, agent-base@^6.0.2: - version "6.0.2" - resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-6.0.2.tgz#49fff58577cfee3f37176feab4c22e00f86d7f77" - integrity sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ== - dependencies: - debug "4" - -agentkeepalive@^4.2.1: - version "4.5.0" - resolved "https://registry.yarnpkg.com/agentkeepalive/-/agentkeepalive-4.5.0.tgz#2673ad1389b3c418c5a20c5d7364f93ca04be923" - integrity sha512-5GG/5IbQQpC9FpkRGsSvZI5QYeSCzlJHdpBQntCsuTOxhKD8lqKhrleg2Yi7yvMIf82Ycmmqln9U8V9qwEiJew== - dependencies: - humanize-ms "^1.2.1" - -aggregate-error@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/aggregate-error/-/aggregate-error-3.1.0.tgz#92670ff50f5359bdb7a3e0d40d0ec30c5737687a" - integrity sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA== - dependencies: - clean-stack "^2.0.0" - indent-string "^4.0.0" - -ajv-keywords@^3.5.2: - version "3.5.2" - resolved "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz" - integrity sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ== - -ajv@^6.12.3, ajv@^6.12.4, ajv@^6.12.5: - version "6.12.6" - resolved "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz" - integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== - dependencies: - fast-deep-equal "^3.1.1" - fast-json-stable-stringify "^2.0.0" - json-schema-traverse "^0.4.1" - uri-js "^4.2.2" - -ansi-escapes@^4.2.1: - version "4.3.2" - resolved "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz" - integrity sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ== - dependencies: - type-fest "^0.21.3" - -ansi-regex@^2.0.0: - version "2.1.1" - resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz" - integrity sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA== - -ansi-regex@^5.0.1: - version "5.0.1" - resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz" - integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== - -ansi-regex@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-6.0.1.tgz#3183e38fae9a65d7cb5e53945cd5897d0260a06a" - integrity sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA== - -ansi-sequence-parser@^1.1.0: - version "1.1.1" - resolved "https://registry.npmjs.org/ansi-sequence-parser/-/ansi-sequence-parser-1.1.1.tgz" - integrity sha512-vJXt3yiaUL4UU546s3rPXlsry/RnM730G1+HkpKE012AN0sx1eOrxSu95oKDIonskeLTijMgqWZ3uDEe3NFvyg== - -ansi-styles@^3.2.1: - version "3.2.1" - resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz" - integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== - dependencies: - color-convert "^1.9.0" - -ansi-styles@^4.0.0, ansi-styles@^4.1.0: - version "4.3.0" - resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz" - integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== - dependencies: - color-convert "^2.0.1" - -ansi-styles@^5.0.0: - version "5.2.0" - resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz" - integrity sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA== - -ansi-styles@^6.1.0: - version "6.2.1" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-6.2.1.tgz#0e62320cf99c21afff3b3012192546aacbfb05c5" - integrity sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug== - -ansi@^0.3.0, ansi@~0.3.1: - version "0.3.1" - resolved "https://registry.npmjs.org/ansi/-/ansi-0.3.1.tgz" - integrity sha512-iFY7JCgHbepc0b82yLaw4IMortylNb6wG4kL+4R0C3iv6i+RHGHux/yUX5BTiRvSX/shMnngjR1YyNMnXEFh5A== - -anymatch@^3.0.3: - version "3.1.3" - resolved "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz" - integrity sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw== - dependencies: - normalize-path "^3.0.0" - picomatch "^2.0.4" - -aproba@^1.0.3: - version "1.2.0" - resolved "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz" - integrity sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw== + "integrity" "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==" + "resolved" "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz" + "version" "4.2.2" + +"abbrev@^1.0.0", "abbrev@1": + "integrity" "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==" + "resolved" "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz" + "version" "1.1.1" + +"abort-controller@^3.0.0": + "integrity" "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==" + "resolved" "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz" + "version" "3.0.0" + dependencies: + "event-target-shim" "^5.0.0" + +"acorn-import-assertions@^1.9.0": + "integrity" "sha512-cmMwop9x+8KFhxvKrKfPYmN6/pKTYYHBqLa0DfvVZcKMJWNyWLnaqND7dx/qn66R7ewM1UX5XMaDVP5wlVTaVA==" + "resolved" "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.9.0.tgz" + "version" "1.9.0" + +"acorn-jsx@^5.3.2": + "integrity" "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==" + "resolved" "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz" + "version" "5.3.2" + +"acorn@^6.0.0 || ^7.0.0 || ^8.0.0", "acorn@^8", "acorn@^8.7.1", "acorn@^8.8.2", "acorn@^8.9.0": + "integrity" "sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==" + "resolved" "https://registry.npmjs.org/acorn/-/acorn-8.10.0.tgz" + "version" "8.10.0" + +"after@~0.8.1": + "integrity" "sha512-QbJ0NTQ/I9DI3uSJA4cbexiwQeRAfjPScqIbSjUDd9TOrcg6pTkdgziesOqxBMBzit8vFCTwrP27t13vFOORRA==" + "resolved" "https://registry.npmjs.org/after/-/after-0.8.2.tgz" + "version" "0.8.2" + +"agent-base@^6.0.2", "agent-base@6": + "integrity" "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==" + "resolved" "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz" + "version" "6.0.2" + dependencies: + "debug" "4" + +"agentkeepalive@^4.2.1": + "integrity" "sha512-5GG/5IbQQpC9FpkRGsSvZI5QYeSCzlJHdpBQntCsuTOxhKD8lqKhrleg2Yi7yvMIf82Ycmmqln9U8V9qwEiJew==" + "resolved" "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.5.0.tgz" + "version" "4.5.0" + dependencies: + "humanize-ms" "^1.2.1" + +"aggregate-error@^3.0.0": + "integrity" "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==" + "resolved" "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz" + "version" "3.1.0" + dependencies: + "clean-stack" "^2.0.0" + "indent-string" "^4.0.0" + +"ajv-keywords@^3.5.2": + "integrity" "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==" + "resolved" "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz" + "version" "3.5.2" + +"ajv@^6.12.3", "ajv@^6.12.4", "ajv@^6.12.5", "ajv@^6.9.1": + "integrity" "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==" + "resolved" "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz" + "version" "6.12.6" + dependencies: + "fast-deep-equal" "^3.1.1" + "fast-json-stable-stringify" "^2.0.0" + "json-schema-traverse" "^0.4.1" + "uri-js" "^4.2.2" + +"ansi-escapes@^4.2.1": + "integrity" "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==" + "resolved" "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz" + "version" "4.3.2" + dependencies: + "type-fest" "^0.21.3" + +"ansi-regex@^2.0.0": + "integrity" "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==" + "resolved" "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz" + "version" "2.1.1" + +"ansi-regex@^5.0.1": + "integrity" "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==" + "resolved" "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz" + "version" "5.0.1" + +"ansi-sequence-parser@^1.1.0": + "integrity" "sha512-vJXt3yiaUL4UU546s3rPXlsry/RnM730G1+HkpKE012AN0sx1eOrxSu95oKDIonskeLTijMgqWZ3uDEe3NFvyg==" + "resolved" "https://registry.npmjs.org/ansi-sequence-parser/-/ansi-sequence-parser-1.1.1.tgz" + "version" "1.1.1" + +"ansi-styles@^3.2.1": + "integrity" "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==" + "resolved" "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz" + "version" "3.2.1" + dependencies: + "color-convert" "^1.9.0" + +"ansi-styles@^4.0.0", "ansi-styles@^4.1.0": + "integrity" "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==" + "resolved" "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz" + "version" "4.3.0" + dependencies: + "color-convert" "^2.0.1" + +"ansi-styles@^5.0.0": + "integrity" "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==" + "resolved" "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz" + "version" "5.2.0" + +"ansi@^0.3.0", "ansi@~0.3.1": + "integrity" "sha512-iFY7JCgHbepc0b82yLaw4IMortylNb6wG4kL+4R0C3iv6i+RHGHux/yUX5BTiRvSX/shMnngjR1YyNMnXEFh5A==" + "resolved" "https://registry.npmjs.org/ansi/-/ansi-0.3.1.tgz" + "version" "0.3.1" + +"anymatch@^3.0.3": + "integrity" "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==" + "resolved" "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz" + "version" "3.1.3" + dependencies: + "normalize-path" "^3.0.0" + "picomatch" "^2.0.4" "aproba@^1.0.3 || ^2.0.0": - version "2.0.0" - resolved "https://registry.yarnpkg.com/aproba/-/aproba-2.0.0.tgz#52520b8ae5b569215b354efc0caa3fe1e45a8adc" - integrity sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ== - -are-we-there-yet@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-3.0.1.tgz#679df222b278c64f2cdba1175cdc00b0d96164bd" - integrity sha512-QZW4EDmGwlYur0Yyf/b2uGucHQMa8aFUP7eu9ddR73vvhFyt4V0Vl3QHPcTNJ8l6qYOBdxgXdnBXQrHilfRQBg== - dependencies: - delegates "^1.0.0" - readable-stream "^3.6.0" - -are-we-there-yet@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-4.0.1.tgz#05a6fc0e5f70771b673e82b0f915616e0ace8fd3" - integrity sha512-2zuA+jpOYBRgoBCfa+fB87Rk0oGJjDX6pxGzqH6f33NzUhG25Xur6R0u0Z9VVAq8Z5JvQpQI6j6rtonuivC8QA== - dependencies: - delegates "^1.0.0" - readable-stream "^4.1.0" - -are-we-there-yet@~1.1.2: - version "1.1.7" - resolved "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.7.tgz" - integrity sha512-nxwy40TuMiUGqMyRHgCSWZ9FM4VAoRP4xUYSTv5ImRog+h9yISPbVH7H8fASCIzYn9wlEv4zvFL7uKDMCFQm3g== - dependencies: - delegates "^1.0.0" - readable-stream "^2.0.6" - -argparse@^1.0.7: - version "1.0.10" - resolved "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz" - integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg== - dependencies: - sprintf-js "~1.0.2" - -argparse@^2.0.1: - version "2.0.1" - resolved "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz" - integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== - -array-index@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/array-index/-/array-index-1.0.0.tgz#ec56a749ee103e4e08c790b9c353df16055b97f9" - integrity sha512-jesyNbBkLQgGZMSwA1FanaFjalb1mZUGxGeUEkSDidzgrbjBGhvizJkaItdhkt8eIHFOJC7nDsrXk+BaehTdRw== - dependencies: - debug "^2.2.0" - es6-symbol "^3.0.2" - -array-union@^2.1.0: - version "2.1.0" - resolved "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz" - integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== - -asn1@~0.2.3: - version "0.2.6" - resolved "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz" - integrity sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ== - dependencies: - safer-buffer "~2.1.0" - -assert-plus@1.0.0, assert-plus@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz" - integrity sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw== - -asynckit@^0.4.0: - version "0.4.0" - resolved "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz" - integrity sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q== - -aws-sign2@~0.7.0: - version "0.7.0" - resolved "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz" - integrity sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA== - -aws4@^1.8.0: - version "1.12.0" - resolved "https://registry.npmjs.org/aws4/-/aws4-1.12.0.tgz" - integrity sha512-NmWvPnx0F1SfrQbYwOi7OeaNGokp9XhzNioJ/CSBs8Qa4vxug81mhJEAVZwxXuBmYB5KDRfMq/F3RR0BIU7sWg== - -axios@^1.3.2: - version "1.6.0" - resolved "https://registry.yarnpkg.com/axios/-/axios-1.6.0.tgz#f1e5292f26b2fd5c2e66876adc5b06cdbd7d2102" - integrity sha512-EZ1DYihju9pwVB+jg67ogm+Tmqc6JmhamRN6I4Zt8DfZu5lbcQGw3ozH9lFejSJgs/ibaef3A9PMXPLeefFGJg== - dependencies: - follow-redirects "^1.15.0" - form-data "^4.0.0" - proxy-from-env "^1.1.0" - -b4a@^1.6.4: - version "1.6.4" - resolved "https://registry.yarnpkg.com/b4a/-/b4a-1.6.4.tgz#ef1c1422cae5ce6535ec191baeed7567443f36c9" - integrity sha512-fpWrvyVHEKyeEvbKZTVOeZF3VSKKWtJxFIxX/jaVPf+cLbGUSitjb49pHLqPV2BUNNZ0LcoeEGfE/YCpyDYHIw== - -babel-jest@^29.6.2: - version "29.6.2" - resolved "https://registry.npmjs.org/babel-jest/-/babel-jest-29.6.2.tgz" - integrity sha512-BYCzImLos6J3BH/+HvUCHG1dTf2MzmAB4jaVxHV+29RZLjR29XuYTmsf2sdDwkrb+FczkGo3kOhE7ga6sI0P4A== + "integrity" "sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==" + "resolved" "https://registry.npmjs.org/aproba/-/aproba-2.0.0.tgz" + "version" "2.0.0" + +"aproba@^1.0.3": + "integrity" "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==" + "resolved" "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz" + "version" "1.2.0" + +"are-we-there-yet@^3.0.0": + "integrity" "sha512-QZW4EDmGwlYur0Yyf/b2uGucHQMa8aFUP7eu9ddR73vvhFyt4V0Vl3QHPcTNJ8l6qYOBdxgXdnBXQrHilfRQBg==" + "resolved" "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-3.0.1.tgz" + "version" "3.0.1" + dependencies: + "delegates" "^1.0.0" + "readable-stream" "^3.6.0" + +"are-we-there-yet@^4.0.0": + "integrity" "sha512-2zuA+jpOYBRgoBCfa+fB87Rk0oGJjDX6pxGzqH6f33NzUhG25Xur6R0u0Z9VVAq8Z5JvQpQI6j6rtonuivC8QA==" + "resolved" "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-4.0.1.tgz" + "version" "4.0.1" + dependencies: + "delegates" "^1.0.0" + "readable-stream" "^4.1.0" + +"are-we-there-yet@~1.1.2": + "integrity" "sha512-nxwy40TuMiUGqMyRHgCSWZ9FM4VAoRP4xUYSTv5ImRog+h9yISPbVH7H8fASCIzYn9wlEv4zvFL7uKDMCFQm3g==" + "resolved" "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.7.tgz" + "version" "1.1.7" + dependencies: + "delegates" "^1.0.0" + "readable-stream" "^2.0.6" + +"argparse@^1.0.7": + "integrity" "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==" + "resolved" "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz" + "version" "1.0.10" + dependencies: + "sprintf-js" "~1.0.2" + +"argparse@^2.0.1": + "integrity" "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" + "resolved" "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz" + "version" "2.0.1" + +"array-index@^1.0.0": + "integrity" "sha512-jesyNbBkLQgGZMSwA1FanaFjalb1mZUGxGeUEkSDidzgrbjBGhvizJkaItdhkt8eIHFOJC7nDsrXk+BaehTdRw==" + "resolved" "https://registry.npmjs.org/array-index/-/array-index-1.0.0.tgz" + "version" "1.0.0" + dependencies: + "debug" "^2.2.0" + "es6-symbol" "^3.0.2" + +"array-union@^2.1.0": + "integrity" "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==" + "resolved" "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz" + "version" "2.1.0" + +"asn1@~0.2.3": + "integrity" "sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==" + "resolved" "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz" + "version" "0.2.6" + dependencies: + "safer-buffer" "~2.1.0" + +"assert-plus@^1.0.0", "assert-plus@1.0.0": + "integrity" "sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==" + "resolved" "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz" + "version" "1.0.0" + +"asynckit@^0.4.0": + "integrity" "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" + "resolved" "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz" + "version" "0.4.0" + +"aws-sign2@~0.7.0": + "integrity" "sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA==" + "resolved" "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz" + "version" "0.7.0" + +"aws4@^1.8.0": + "integrity" "sha512-NmWvPnx0F1SfrQbYwOi7OeaNGokp9XhzNioJ/CSBs8Qa4vxug81mhJEAVZwxXuBmYB5KDRfMq/F3RR0BIU7sWg==" + "resolved" "https://registry.npmjs.org/aws4/-/aws4-1.12.0.tgz" + "version" "1.12.0" + +"axios@^1.3.2": + "integrity" "sha512-7i24Ri4pmDRfJTR7LDBhsOTtcm+9kjX5WiY1X3wIisx6G9So3pfMkEiU7emUBe46oceVImccTEM3k6C5dbVW8A==" + "resolved" "https://registry.npmjs.org/axios/-/axios-1.6.2.tgz" + "version" "1.6.2" + dependencies: + "follow-redirects" "^1.15.0" + "form-data" "^4.0.0" + "proxy-from-env" "^1.1.0" + +"b4a@^1.6.4": + "integrity" "sha512-fpWrvyVHEKyeEvbKZTVOeZF3VSKKWtJxFIxX/jaVPf+cLbGUSitjb49pHLqPV2BUNNZ0LcoeEGfE/YCpyDYHIw==" + "resolved" "https://registry.npmjs.org/b4a/-/b4a-1.6.4.tgz" + "version" "1.6.4" + +"babel-jest@^29.0.0", "babel-jest@^29.6.2": + "integrity" "sha512-BYCzImLos6J3BH/+HvUCHG1dTf2MzmAB4jaVxHV+29RZLjR29XuYTmsf2sdDwkrb+FczkGo3kOhE7ga6sI0P4A==" + "resolved" "https://registry.npmjs.org/babel-jest/-/babel-jest-29.6.2.tgz" + "version" "29.6.2" dependencies: "@jest/transform" "^29.6.2" "@types/babel__core" "^7.1.14" - babel-plugin-istanbul "^6.1.1" - babel-preset-jest "^29.5.0" - chalk "^4.0.0" - graceful-fs "^4.2.9" - slash "^3.0.0" + "babel-plugin-istanbul" "^6.1.1" + "babel-preset-jest" "^29.5.0" + "chalk" "^4.0.0" + "graceful-fs" "^4.2.9" + "slash" "^3.0.0" -babel-plugin-istanbul@^6.1.1: - version "6.1.1" - resolved "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz" - integrity sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA== +"babel-plugin-istanbul@^6.1.1": + "integrity" "sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==" + "resolved" "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz" + "version" "6.1.1" dependencies: "@babel/helper-plugin-utils" "^7.0.0" "@istanbuljs/load-nyc-config" "^1.0.0" "@istanbuljs/schema" "^0.1.2" - istanbul-lib-instrument "^5.0.4" - test-exclude "^6.0.0" + "istanbul-lib-instrument" "^5.0.4" + "test-exclude" "^6.0.0" -babel-plugin-jest-hoist@^29.5.0: - version "29.5.0" - resolved "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-29.5.0.tgz" - integrity sha512-zSuuuAlTMT4mzLj2nPnUm6fsE6270vdOfnpbJ+RmruU75UhLFvL0N2NgI7xpeS7NaB6hGqmd5pVpGTDYvi4Q3w== +"babel-plugin-jest-hoist@^29.5.0": + "integrity" "sha512-zSuuuAlTMT4mzLj2nPnUm6fsE6270vdOfnpbJ+RmruU75UhLFvL0N2NgI7xpeS7NaB6hGqmd5pVpGTDYvi4Q3w==" + "resolved" "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-29.5.0.tgz" + "version" "29.5.0" dependencies: "@babel/template" "^7.3.3" "@babel/types" "^7.3.3" "@types/babel__core" "^7.1.14" "@types/babel__traverse" "^7.0.6" -babel-preset-current-node-syntax@^1.0.0: - version "1.0.1" - resolved "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz" - integrity sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ== +"babel-preset-current-node-syntax@^1.0.0": + "integrity" "sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==" + "resolved" "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz" + "version" "1.0.1" dependencies: "@babel/plugin-syntax-async-generators" "^7.8.4" "@babel/plugin-syntax-bigint" "^7.8.3" @@ -1310,634 +1297,647 @@ babel-preset-current-node-syntax@^1.0.0: "@babel/plugin-syntax-optional-chaining" "^7.8.3" "@babel/plugin-syntax-top-level-await" "^7.8.3" -babel-preset-jest@^29.5.0: - version "29.5.0" - resolved "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-29.5.0.tgz" - integrity sha512-JOMloxOqdiBSxMAzjRaH023/vvcaSaec49zvg+2LmNsktC7ei39LTJGw02J+9uUtTZUq6xbLyJ4dxe9sSmIuAg== +"babel-preset-jest@^29.5.0": + "integrity" "sha512-JOMloxOqdiBSxMAzjRaH023/vvcaSaec49zvg+2LmNsktC7ei39LTJGw02J+9uUtTZUq6xbLyJ4dxe9sSmIuAg==" + "resolved" "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-29.5.0.tgz" + "version" "29.5.0" dependencies: - babel-plugin-jest-hoist "^29.5.0" - babel-preset-current-node-syntax "^1.0.0" + "babel-plugin-jest-hoist" "^29.5.0" + "babel-preset-current-node-syntax" "^1.0.0" + +"balanced-match@^1.0.0": + "integrity" "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" + "resolved" "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz" + "version" "1.0.2" -balanced-match@^1.0.0: - version "1.0.2" - resolved "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz" - integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== +"base64-js@^1.3.1": + "integrity" "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==" + "resolved" "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz" + "version" "1.5.1" -base64-js@^1.3.1: - version "1.5.1" - resolved "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz" - integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== +"bcrypt-pbkdf@^1.0.0": + "integrity" "sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==" + "resolved" "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz" + "version" "1.0.2" + dependencies: + "tweetnacl" "^0.14.3" -bcrypt-pbkdf@^1.0.0: - version "1.0.2" - resolved "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz" - integrity sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w== - dependencies: - tweetnacl "^0.14.3" - -bl@^4.0.3: - version "4.1.0" - resolved "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz" - integrity sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w== - dependencies: - buffer "^5.5.0" - inherits "^2.0.4" - readable-stream "^3.4.0" - -bl@~3.0.0: - version "3.0.1" - resolved "https://registry.npmjs.org/bl/-/bl-3.0.1.tgz" - integrity sha512-jrCW5ZhfQ/Vt07WX1Ngs+yn9BDqPL/gw28S7s9H6QK/gupnizNzJAss5akW20ISgOrbLTlXOOCTJeNUQqruAWQ== - dependencies: - readable-stream "^3.0.1" - -brace-expansion@^1.1.7: - version "1.1.11" - resolved "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz" - integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== - dependencies: - balanced-match "^1.0.0" - concat-map "0.0.1" - -brace-expansion@^2.0.1: - version "2.0.1" - resolved "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz" - integrity sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA== - dependencies: - balanced-match "^1.0.0" - -braces@^3.0.2: - version "3.0.2" - resolved "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz" - integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== - dependencies: - fill-range "^7.0.1" - -browserslist@^4.14.5, browserslist@^4.21.9: - version "4.21.10" - resolved "https://registry.npmjs.org/browserslist/-/browserslist-4.21.10.tgz" - integrity sha512-bipEBdZfVH5/pwrvqc+Ub0kUPVfGUhlKxbvfD+z1BDnPEO/X98ruXGA1WP5ASpAFKan7Qr6j736IacbZQuAlKQ== - dependencies: - caniuse-lite "^1.0.30001517" - electron-to-chromium "^1.4.477" - node-releases "^2.0.13" - update-browserslist-db "^1.0.11" - -bs-logger@0.x: - version "0.2.6" - resolved "https://registry.npmjs.org/bs-logger/-/bs-logger-0.2.6.tgz" - integrity sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog== - dependencies: - fast-json-stable-stringify "2.x" - -bser@2.1.1: - version "2.1.1" - resolved "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz" - integrity sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ== - dependencies: - node-int64 "^0.4.0" - -buffer-from@^0.1.1: - version "0.1.2" - resolved "https://registry.npmjs.org/buffer-from/-/buffer-from-0.1.2.tgz" - integrity sha512-RiWIenusJsmI2KcvqQABB83tLxCByE3upSP8QU3rJDMVFGPWLvPQJt/O1Su9moRWeH7d+Q2HYb68f6+v+tw2vg== - -buffer-from@^1.0.0: - version "1.1.2" - resolved "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz" - integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ== - -buffer@^5.5.0: - version "5.7.1" - resolved "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz" - integrity sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ== - dependencies: - base64-js "^1.3.1" - ieee754 "^1.1.13" - -buffer@^6.0.3: - version "6.0.3" - resolved "https://registry.yarnpkg.com/buffer/-/buffer-6.0.3.tgz#2ace578459cc8fbe2a70aaa8f52ee63b6a74c6c6" - integrity sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA== - dependencies: - base64-js "^1.3.1" - ieee754 "^1.2.1" - -cacache@^17.0.0: - version "17.1.4" - resolved "https://registry.yarnpkg.com/cacache/-/cacache-17.1.4.tgz#b3ff381580b47e85c6e64f801101508e26604b35" - integrity sha512-/aJwG2l3ZMJ1xNAnqbMpA40of9dj/pIH3QfiuQSqjfPJF747VR0J/bHn+/KdNnHKc6XQcWt/AfRSBft82W1d2A== - dependencies: - "@npmcli/fs" "^3.1.0" - fs-minipass "^3.0.0" - glob "^10.2.2" - lru-cache "^7.7.1" - minipass "^7.0.3" - minipass-collect "^1.0.2" - minipass-flush "^1.0.5" - minipass-pipeline "^1.2.4" - p-map "^4.0.0" - ssri "^10.0.0" - tar "^6.1.11" - unique-filename "^3.0.0" - -callsites@^3.0.0: - version "3.1.0" - resolved "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz" - integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== - -camelcase@^5.3.1: - version "5.3.1" - resolved "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz" - integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== - -camelcase@^6.2.0: - version "6.3.0" - resolved "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz" - integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA== - -caniuse-lite@^1.0.30001517: - version "1.0.30001521" - resolved "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001521.tgz" - integrity sha512-fnx1grfpEOvDGH+V17eccmNjucGUnCbP6KL+l5KqBIerp26WK/+RQ7CIDE37KGJjaPyqWXXlFUyKiWmvdNNKmQ== - -cargo-cp-artifact@^0.1.6: - version "0.1.8" - resolved "https://registry.npmjs.org/cargo-cp-artifact/-/cargo-cp-artifact-0.1.8.tgz" - integrity sha512-3j4DaoTrsCD1MRkTF2Soacii0Nx7UHCce0EwUf4fHnggwiE4fbmF2AbnfzayR36DF8KGadfh7M/Yfy625kgPlA== - -caseless@~0.12.0: - version "0.12.0" - resolved "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz" - integrity sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw== - -chalk@^2.4.2: - version "2.4.2" - resolved "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz" - integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== - dependencies: - ansi-styles "^3.2.1" - escape-string-regexp "^1.0.5" - supports-color "^5.3.0" - -chalk@^4.0.0: - version "4.1.2" - resolved "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz" - integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== - dependencies: - ansi-styles "^4.1.0" - supports-color "^7.1.0" - -char-regex@^1.0.2: - version "1.0.2" - resolved "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz" - integrity sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw== - -chownr@^1.1.1, chownr@^1.1.4: - version "1.1.4" - resolved "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz" - integrity sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg== - -chrome-trace-event@^1.0.2: - version "1.0.3" - resolved "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz" - integrity sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg== - -ci-info@^3.2.0: - version "3.8.0" - resolved "https://registry.npmjs.org/ci-info/-/ci-info-3.8.0.tgz" - integrity sha512-eXTggHWSooYhq49F2opQhuHWgzucfF2YgODK4e1566GQs5BIfP30B0oenwBJHfWxAs2fyPB1s7Mg949zLf61Yw== - -cjs-module-lexer@^1.0.0: - version "1.2.3" - resolved "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.2.3.tgz" - integrity sha512-0TNiGstbQmCFwt4akjjBg5pLRTSyj/PkWQ1ZoO2zntmg9yLqSRxwEa4iCfQLGjqhiqBfOJa7W/E8wfGrTDmlZQ== - -class-transformer@^0.5.1: - version "0.5.1" - resolved "https://registry.npmjs.org/class-transformer/-/class-transformer-0.5.1.tgz" - integrity sha512-SQa1Ws6hUbfC98vKGxZH3KFY0Y1lm5Zm0SY8XX9zbK7FJCyVEac3ATW0RIpwzW+oOfmHE5PMPufDG9hCfoEOMw== - -clean-stack@^2.0.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/clean-stack/-/clean-stack-2.2.0.tgz#ee8472dbb129e727b31e8a10a427dee9dfe4008b" - integrity sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A== - -cliui@^8.0.1: - version "8.0.1" - resolved "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz" - integrity sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ== - dependencies: - string-width "^4.2.0" - strip-ansi "^6.0.1" - wrap-ansi "^7.0.0" - -clone-deep@^4.0.1: - version "4.0.1" - resolved "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz" - integrity sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ== - dependencies: - is-plain-object "^2.0.4" - kind-of "^6.0.2" - shallow-clone "^3.0.0" - -cmake-js@^7.2.1: - version "7.2.1" - resolved "https://registry.yarnpkg.com/cmake-js/-/cmake-js-7.2.1.tgz#757c0d39994121b084bab96290baf115ee7712cd" - integrity sha512-AdPSz9cSIJWdKvm0aJgVu3X8i0U3mNTswJkSHzZISqmYVjZk7Td4oDFg0mCBA383wO+9pG5Ix7pEP1CZH9x2BA== - dependencies: - axios "^1.3.2" - debug "^4" - fs-extra "^10.1.0" - lodash.isplainobject "^4.0.6" - memory-stream "^1.0.0" - node-api-headers "^0.0.2" - npmlog "^6.0.2" - rc "^1.2.7" - semver "^7.3.8" - tar "^6.1.11" - url-join "^4.0.1" - which "^2.0.2" - yargs "^17.6.0" - -co@^4.6.0: - version "4.6.0" - resolved "https://registry.npmjs.org/co/-/co-4.6.0.tgz" - integrity sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ== - -code-point-at@^1.0.0: - version "1.1.0" - resolved "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz" - integrity sha512-RpAVKQA5T63xEj6/giIbUEtZwJ4UFIc3ZtvEkiaUERylqe8xb5IvqcgOurZLahv93CLKfxcw5YI+DZcUBRyLXA== - -collect-v8-coverage@^1.0.0: - version "1.0.2" - resolved "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.2.tgz" - integrity sha512-lHl4d5/ONEbLlJvaJNtsF/Lz+WvB07u2ycqTYbdrq7UypDXailES4valYb2eWiJFxZlVmpGekfqoxQhzyFdT4Q== - -color-convert@^1.9.0: - version "1.9.3" - resolved "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz" - integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== - dependencies: - color-name "1.1.3" - -color-convert@^2.0.1: - version "2.0.1" - resolved "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz" - integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== - dependencies: - color-name "~1.1.4" - -color-name@1.1.3: - version "1.1.3" - resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz" - integrity sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw== - -color-name@~1.1.4: - version "1.1.4" - resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz" - integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== - -color-support@^1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/color-support/-/color-support-1.1.3.tgz#93834379a1cc9a0c61f82f52f0d04322251bd5a2" - integrity sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg== - -colorette@^2.0.14: - version "2.0.20" - resolved "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz" - integrity sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w== - -combined-stream@^1.0.6, combined-stream@^1.0.8, combined-stream@~1.0.6: - version "1.0.8" - resolved "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz" - integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== - dependencies: - delayed-stream "~1.0.0" - -commander@^10.0.1: - version "10.0.1" - resolved "https://registry.npmjs.org/commander/-/commander-10.0.1.tgz" - integrity sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug== - -commander@^2.20.0, commander@^2.9.0: - version "2.20.3" - resolved "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz" - integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== - -concat-map@0.0.1: - version "0.0.1" - resolved "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz" - integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== - -console-control-strings@^1.0.0, console-control-strings@^1.1.0, console-control-strings@~1.1.0: - version "1.1.0" - resolved "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz" - integrity sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ== - -convert-source-map@^1.6.0, convert-source-map@^1.7.0: - version "1.9.0" - resolved "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz" - integrity sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A== - -convert-source-map@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz" - integrity sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg== - -core-util-is@1.0.2, core-util-is@~1.0.0: - version "1.0.2" - resolved "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz" - integrity sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ== - -cross-spawn@^7.0.0, cross-spawn@^7.0.2, cross-spawn@^7.0.3: - version "7.0.3" - resolved "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz" - integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== - dependencies: - path-key "^3.1.0" - shebang-command "^2.0.0" - which "^2.0.1" - -d@1, d@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/d/-/d-1.0.1.tgz#8698095372d58dbee346ffd0c7093f99f8f9eb5a" - integrity sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA== - dependencies: - es5-ext "^0.10.50" - type "^1.0.1" - -dashdash@^1.12.0: - version "1.14.1" - resolved "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz" - integrity sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g== - dependencies: - assert-plus "^1.0.0" - -debug@4, debug@^4, debug@^4.1.0, debug@^4.1.1, debug@^4.3.2, debug@^4.3.3, debug@^4.3.4: - version "4.3.4" - resolved "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz" - integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== - dependencies: - ms "2.1.2" - -debug@^2.2.0: - version "2.6.9" - resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" - integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== - dependencies: - ms "2.0.0" - -decompress-response@^3.3.0: - version "3.3.0" - resolved "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz" - integrity sha512-BzRPQuY1ip+qDonAOz42gRm/pg9F768C+npV/4JOsxRC2sq+Rlk+Q4ZCAsOhnIaMrgarILY+RMUIvMmmX1qAEA== - dependencies: - mimic-response "^1.0.0" - -dedent@^1.0.0: - version "1.5.1" - resolved "https://registry.npmjs.org/dedent/-/dedent-1.5.1.tgz" - integrity sha512-+LxW+KLWxu3HW3M2w2ympwtqPrqYRzU8fqi6Fhd18fBALe15blJPI/I4+UHveMVG6lJqB4JNd4UG0S5cnVHwIg== - -deep-extend@^0.6.0: - version "0.6.0" - resolved "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz" - integrity sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA== - -deep-is@^0.1.3: - version "0.1.4" - resolved "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz" - integrity sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ== - -deepmerge@^4.2.2: - version "4.3.1" - resolved "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz" - integrity sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A== - -delayed-stream@~1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz" - integrity sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ== - -delegates@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz" - integrity sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ== - -detect-libc@^2.0.0, detect-libc@^2.0.2: - version "2.0.2" - resolved "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.2.tgz" - integrity sha512-UX6sGumvvqSaXgdKGUsgZWqcUyIXZ/vZTrlRT/iobiKhGL0zL4d3osHj3uqllWJK+i+sixDS/3COVEOFbupFyw== - -detect-newline@^3.0.0: - version "3.1.0" - resolved "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz" - integrity sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA== - -diff-sequences@^29.4.3: - version "29.4.3" - resolved "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.4.3.tgz" - integrity sha512-ofrBgwpPhCD85kMKtE9RYFFq6OC1A89oW2vvgWZNCwxrUpRUILopY7lsYyMDSjc8g6U6aiO0Qubg6r4Wgt5ZnA== - -dir-glob@^3.0.1: - version "3.0.1" - resolved "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz" - integrity sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA== - dependencies: - path-type "^4.0.0" - -doctrine@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz" - integrity sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w== - dependencies: - esutils "^2.0.2" - -dotenv@^16.0.3: - version "16.3.1" - resolved "https://registry.npmjs.org/dotenv/-/dotenv-16.3.1.tgz" - integrity sha512-IPzF4w4/Rd94bA9imS68tZBaYyBWSCE47V1RGuMrB94iyTOIEwRmVL2x/4An+6mETpLrKJ5hQkB8W4kFAadeIQ== - -duplexer2@~0.0.2: - version "0.0.2" - resolved "https://registry.npmjs.org/duplexer2/-/duplexer2-0.0.2.tgz" - integrity sha512-+AWBwjGadtksxjOQSFDhPNQbed7icNXApT4+2BNpsXzcCBiInq2H9XW0O8sfHFaPmnQRs7cg/P0fAr2IWQSW0g== - dependencies: - readable-stream "~1.1.9" - -each-series-async@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/each-series-async/-/each-series-async-1.0.1.tgz#7e3f8dfa5af934663960e5a17561362909b34328" - integrity sha512-G4zip/Ewpwr6JQxW7+2RNgkPd09h/UNec5UlvA/xKwl4qf5blyBNK6a/zjQc3MojgsxaOb93B9v3T92QU6IMVg== - -eastasianwidth@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/eastasianwidth/-/eastasianwidth-0.2.0.tgz#696ce2ec0aa0e6ea93a397ffcf24aa7840c827cb" - integrity sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA== - -ecc-jsbn@~0.1.1: - version "0.1.2" - resolved "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz" - integrity sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw== - dependencies: - jsbn "~0.1.0" - safer-buffer "^2.1.0" - -electron-build-env@^0.2.0: - version "0.2.0" - resolved "https://registry.npmjs.org/electron-build-env/-/electron-build-env-0.2.0.tgz" - integrity sha512-L431TbXtXe6iw3ko7ITr/qCu+jumVKLAhCDyhqfab6421LGlawVcT88Ws/DHR57+1lkLN1POQqwNOkjPwQJQmQ== - dependencies: - commander "^2.9.0" - mkdirp "^0.5.1" - -electron-to-chromium@^1.4.477: - version "1.4.492" - resolved "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.492.tgz" - integrity sha512-36K9b/6skMVwAIEsC7GiQ8I8N3soCALVSHqWHzNDtGemAcI9Xu8hP02cywWM0A794rTHm0b0zHPeLJHtgFVamQ== - -emittery@^0.13.1: - version "0.13.1" - resolved "https://registry.npmjs.org/emittery/-/emittery-0.13.1.tgz" - integrity sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ== - -emoji-regex@^8.0.0: - version "8.0.0" - resolved "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz" - integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== - -emoji-regex@^9.2.2: - version "9.2.2" - resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-9.2.2.tgz#840c8803b0d8047f4ff0cf963176b32d4ef3ed72" - integrity sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg== - -encoding@^0.1.13: - version "0.1.13" - resolved "https://registry.yarnpkg.com/encoding/-/encoding-0.1.13.tgz#56574afdd791f54a8e9b2785c0582a2d26210fa9" - integrity sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A== - dependencies: - iconv-lite "^0.6.2" - -end-of-stream@^1.1.0, end-of-stream@^1.4.1: - version "1.4.4" - resolved "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz" - integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q== - dependencies: - once "^1.4.0" - -enhanced-resolve@^5.15.0: - version "5.15.0" - resolved "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.15.0.tgz" - integrity sha512-LXYT42KJ7lpIKECr2mAXIaMldcNCh/7E0KBKOu4KSfkHmP+mZmSs+8V5gBAqisWBy0OO4W5Oyys0GO1Y8KtdKg== - dependencies: - graceful-fs "^4.2.4" - tapable "^2.2.0" - -env-paths@^2.2.0: - version "2.2.1" - resolved "https://registry.yarnpkg.com/env-paths/-/env-paths-2.2.1.tgz#420399d416ce1fbe9bc0a07c62fa68d67fd0f8f2" - integrity sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A== - -envinfo@^7.7.3: - version "7.10.0" - resolved "https://registry.npmjs.org/envinfo/-/envinfo-7.10.0.tgz" - integrity sha512-ZtUjZO6l5mwTHvc1L9+1q5p/R3wTopcfqMW8r5t8SJSKqeVI/LtajORwRFEKpEFuekjD0VBjwu1HMxL4UalIRw== - -err-code@^2.0.2: - version "2.0.3" - resolved "https://registry.yarnpkg.com/err-code/-/err-code-2.0.3.tgz#23c2f3b756ffdfc608d30e27c9a941024807e7f9" - integrity sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA== - -error-ex@^1.3.1: - version "1.3.2" - resolved "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz" - integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g== - dependencies: - is-arrayish "^0.2.1" - -es-module-lexer@^1.2.1: - version "1.3.1" - resolved "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.3.1.tgz" - integrity sha512-JUFAyicQV9mXc3YRxPnDlrfBKpqt6hUYzz9/boprUJHs4e4KVr3XwOF70doO6gwXUor6EWZJAyWAfKki84t20Q== - -es5-ext@^0.10.35, es5-ext@^0.10.50: - version "0.10.62" - resolved "https://registry.yarnpkg.com/es5-ext/-/es5-ext-0.10.62.tgz#5e6adc19a6da524bf3d1e02bbc8960e5eb49a9a5" - integrity sha512-BHLqn0klhEpnOKSrzn/Xsz2UIW8j+cGmo9JLzr8BiUapV8hPL9+FliFqjwr9ngW7jWdnxv6eO+/LqyhJVqgrjA== - dependencies: - es6-iterator "^2.0.3" - es6-symbol "^3.1.3" - next-tick "^1.1.0" - -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-symbol@^3.0.2, es6-symbol@^3.1.1, es6-symbol@^3.1.3: - version "3.1.3" - resolved "https://registry.yarnpkg.com/es6-symbol/-/es6-symbol-3.1.3.tgz#bad5d3c1bcdac28269f4cb331e431c78ac705d18" - integrity sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA== - dependencies: - d "^1.0.1" - ext "^1.1.2" - -escalade@^3.1.1: - version "3.1.1" - resolved "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz" - integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw== - -escape-string-regexp@^1.0.5: - version "1.0.5" - resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz" - integrity sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg== - -escape-string-regexp@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz" - integrity sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w== - -escape-string-regexp@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz" - integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== - -eslint-config-prettier@^8.5.0: - version "8.10.0" - resolved "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.10.0.tgz" - integrity sha512-SM8AMJdeQqRYT9O9zguiruQZaN7+z+E4eAP9oiLNGKMtomwaB1E9dcgUD6ZAn/eQAb52USbvezbiljfZUhbJcg== - -eslint-scope@5.1.1, eslint-scope@^5.1.1: - version "5.1.1" - resolved "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz" - integrity sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw== - dependencies: - esrecurse "^4.3.0" - estraverse "^4.1.1" - -eslint-scope@^7.2.2: - version "7.2.2" - resolved "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz" - integrity sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg== - dependencies: - esrecurse "^4.3.0" - estraverse "^5.2.0" - -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.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz" - integrity sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag== - -eslint@^8.20.0: - version "8.47.0" - resolved "https://registry.npmjs.org/eslint/-/eslint-8.47.0.tgz" - integrity sha512-spUQWrdPt+pRVP1TTJLmfRNJJHHZryFmptzcafwSvHsceV81djHOdnEeDmkdotZyLNjDhrOasNK8nikkoG1O8Q== +"bl@^4.0.3": + "integrity" "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==" + "resolved" "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz" + "version" "4.1.0" + dependencies: + "buffer" "^5.5.0" + "inherits" "^2.0.4" + "readable-stream" "^3.4.0" + +"bl@~3.0.0": + "integrity" "sha512-jrCW5ZhfQ/Vt07WX1Ngs+yn9BDqPL/gw28S7s9H6QK/gupnizNzJAss5akW20ISgOrbLTlXOOCTJeNUQqruAWQ==" + "resolved" "https://registry.npmjs.org/bl/-/bl-3.0.1.tgz" + "version" "3.0.1" + dependencies: + "readable-stream" "^3.0.1" + +"block-stream@*": + "integrity" "sha512-OorbnJVPII4DuUKbjARAe8u8EfqOmkEEaSFIyoQ7OjTHn6kafxWl0wLgoZ2rXaYd7MyLcDaU4TmhfxtwgcccMQ==" + "resolved" "https://registry.npmjs.org/block-stream/-/block-stream-0.0.9.tgz" + "version" "0.0.9" + dependencies: + "inherits" "~2.0.0" + +"brace-expansion@^1.1.7": + "integrity" "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==" + "resolved" "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz" + "version" "1.1.11" + dependencies: + "balanced-match" "^1.0.0" + "concat-map" "0.0.1" + +"brace-expansion@^2.0.1": + "integrity" "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==" + "resolved" "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz" + "version" "2.0.1" + dependencies: + "balanced-match" "^1.0.0" + +"braces@^3.0.2": + "integrity" "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==" + "resolved" "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz" + "version" "3.0.2" + dependencies: + "fill-range" "^7.0.1" + +"browserslist@^4.14.5", "browserslist@^4.21.9", "browserslist@>= 4.21.0": + "integrity" "sha512-bipEBdZfVH5/pwrvqc+Ub0kUPVfGUhlKxbvfD+z1BDnPEO/X98ruXGA1WP5ASpAFKan7Qr6j736IacbZQuAlKQ==" + "resolved" "https://registry.npmjs.org/browserslist/-/browserslist-4.21.10.tgz" + "version" "4.21.10" + dependencies: + "caniuse-lite" "^1.0.30001517" + "electron-to-chromium" "^1.4.477" + "node-releases" "^2.0.13" + "update-browserslist-db" "^1.0.11" + +"bs-logger@0.x": + "integrity" "sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog==" + "resolved" "https://registry.npmjs.org/bs-logger/-/bs-logger-0.2.6.tgz" + "version" "0.2.6" + dependencies: + "fast-json-stable-stringify" "2.x" + +"bser@2.1.1": + "integrity" "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==" + "resolved" "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz" + "version" "2.1.1" + dependencies: + "node-int64" "^0.4.0" + +"buffer-from@^0.1.1": + "integrity" "sha512-RiWIenusJsmI2KcvqQABB83tLxCByE3upSP8QU3rJDMVFGPWLvPQJt/O1Su9moRWeH7d+Q2HYb68f6+v+tw2vg==" + "resolved" "https://registry.npmjs.org/buffer-from/-/buffer-from-0.1.2.tgz" + "version" "0.1.2" + +"buffer-from@^1.0.0": + "integrity" "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==" + "resolved" "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz" + "version" "1.1.2" + +"buffer@^5.5.0": + "integrity" "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==" + "resolved" "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz" + "version" "5.7.1" + dependencies: + "base64-js" "^1.3.1" + "ieee754" "^1.1.13" + +"buffer@^6.0.3": + "integrity" "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==" + "resolved" "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz" + "version" "6.0.3" + dependencies: + "base64-js" "^1.3.1" + "ieee754" "^1.2.1" + +"cacache@^16.1.0": + "integrity" "sha512-/+Emcj9DAXxX4cwlLmRI9c166RuL3w30zp4R7Joiv2cQTtTtA+jeuCAjH3ZlGnYS3tKENSrKhAzVVP9GVyzeYQ==" + "resolved" "https://registry.npmjs.org/cacache/-/cacache-16.1.3.tgz" + "version" "16.1.3" + dependencies: + "@npmcli/fs" "^2.1.0" + "@npmcli/move-file" "^2.0.0" + "chownr" "^2.0.0" + "fs-minipass" "^2.1.0" + "glob" "^8.0.1" + "infer-owner" "^1.0.4" + "lru-cache" "^7.7.1" + "minipass" "^3.1.6" + "minipass-collect" "^1.0.2" + "minipass-flush" "^1.0.5" + "minipass-pipeline" "^1.2.4" + "mkdirp" "^1.0.4" + "p-map" "^4.0.0" + "promise-inflight" "^1.0.1" + "rimraf" "^3.0.2" + "ssri" "^9.0.0" + "tar" "^6.1.11" + "unique-filename" "^2.0.0" + +"callsites@^3.0.0": + "integrity" "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==" + "resolved" "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz" + "version" "3.1.0" + +"camelcase@^5.3.1": + "integrity" "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==" + "resolved" "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz" + "version" "5.3.1" + +"camelcase@^6.2.0": + "integrity" "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==" + "resolved" "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz" + "version" "6.3.0" + +"caniuse-lite@^1.0.30001517": + "integrity" "sha512-fnx1grfpEOvDGH+V17eccmNjucGUnCbP6KL+l5KqBIerp26WK/+RQ7CIDE37KGJjaPyqWXXlFUyKiWmvdNNKmQ==" + "resolved" "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001521.tgz" + "version" "1.0.30001521" + +"cargo-cp-artifact@^0.1.6": + "integrity" "sha512-3j4DaoTrsCD1MRkTF2Soacii0Nx7UHCce0EwUf4fHnggwiE4fbmF2AbnfzayR36DF8KGadfh7M/Yfy625kgPlA==" + "resolved" "https://registry.npmjs.org/cargo-cp-artifact/-/cargo-cp-artifact-0.1.8.tgz" + "version" "0.1.8" + +"caseless@~0.12.0": + "integrity" "sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==" + "resolved" "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz" + "version" "0.12.0" + +"chalk@^2.4.2": + "integrity" "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==" + "resolved" "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz" + "version" "2.4.2" + dependencies: + "ansi-styles" "^3.2.1" + "escape-string-regexp" "^1.0.5" + "supports-color" "^5.3.0" + +"chalk@^4.0.0": + "integrity" "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==" + "resolved" "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz" + "version" "4.1.2" + dependencies: + "ansi-styles" "^4.1.0" + "supports-color" "^7.1.0" + +"char-regex@^1.0.2": + "integrity" "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==" + "resolved" "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz" + "version" "1.0.2" + +"chownr@^1.1.1": + "integrity" "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==" + "resolved" "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz" + "version" "1.1.4" + +"chownr@^2.0.0": + "integrity" "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==" + "resolved" "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz" + "version" "2.0.0" + +"chrome-trace-event@^1.0.2": + "integrity" "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==" + "resolved" "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz" + "version" "1.0.3" + +"ci-info@^3.2.0": + "integrity" "sha512-eXTggHWSooYhq49F2opQhuHWgzucfF2YgODK4e1566GQs5BIfP30B0oenwBJHfWxAs2fyPB1s7Mg949zLf61Yw==" + "resolved" "https://registry.npmjs.org/ci-info/-/ci-info-3.8.0.tgz" + "version" "3.8.0" + +"cjs-module-lexer@^1.0.0": + "integrity" "sha512-0TNiGstbQmCFwt4akjjBg5pLRTSyj/PkWQ1ZoO2zntmg9yLqSRxwEa4iCfQLGjqhiqBfOJa7W/E8wfGrTDmlZQ==" + "resolved" "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.2.3.tgz" + "version" "1.2.3" + +"class-transformer@^0.5.1": + "integrity" "sha512-SQa1Ws6hUbfC98vKGxZH3KFY0Y1lm5Zm0SY8XX9zbK7FJCyVEac3ATW0RIpwzW+oOfmHE5PMPufDG9hCfoEOMw==" + "resolved" "https://registry.npmjs.org/class-transformer/-/class-transformer-0.5.1.tgz" + "version" "0.5.1" + +"clean-stack@^2.0.0": + "integrity" "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==" + "resolved" "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz" + "version" "2.2.0" + +"cliui@^8.0.1": + "integrity" "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==" + "resolved" "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz" + "version" "8.0.1" + dependencies: + "string-width" "^4.2.0" + "strip-ansi" "^6.0.1" + "wrap-ansi" "^7.0.0" + +"clone-deep@^4.0.1": + "integrity" "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==" + "resolved" "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz" + "version" "4.0.1" + dependencies: + "is-plain-object" "^2.0.4" + "kind-of" "^6.0.2" + "shallow-clone" "^3.0.0" + +"cmake-js@^7.2.1": + "integrity" "sha512-AdPSz9cSIJWdKvm0aJgVu3X8i0U3mNTswJkSHzZISqmYVjZk7Td4oDFg0mCBA383wO+9pG5Ix7pEP1CZH9x2BA==" + "resolved" "https://registry.npmjs.org/cmake-js/-/cmake-js-7.2.1.tgz" + "version" "7.2.1" + dependencies: + "axios" "^1.3.2" + "debug" "^4" + "fs-extra" "^10.1.0" + "lodash.isplainobject" "^4.0.6" + "memory-stream" "^1.0.0" + "node-api-headers" "^0.0.2" + "npmlog" "^6.0.2" + "rc" "^1.2.7" + "semver" "^7.3.8" + "tar" "^6.1.11" + "url-join" "^4.0.1" + "which" "^2.0.2" + "yargs" "^17.6.0" + +"co@^4.6.0": + "integrity" "sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==" + "resolved" "https://registry.npmjs.org/co/-/co-4.6.0.tgz" + "version" "4.6.0" + +"code-point-at@^1.0.0": + "integrity" "sha512-RpAVKQA5T63xEj6/giIbUEtZwJ4UFIc3ZtvEkiaUERylqe8xb5IvqcgOurZLahv93CLKfxcw5YI+DZcUBRyLXA==" + "resolved" "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz" + "version" "1.1.0" + +"collect-v8-coverage@^1.0.0": + "integrity" "sha512-lHl4d5/ONEbLlJvaJNtsF/Lz+WvB07u2ycqTYbdrq7UypDXailES4valYb2eWiJFxZlVmpGekfqoxQhzyFdT4Q==" + "resolved" "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.2.tgz" + "version" "1.0.2" + +"color-convert@^1.9.0": + "integrity" "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==" + "resolved" "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz" + "version" "1.9.3" + dependencies: + "color-name" "1.1.3" + +"color-convert@^2.0.1": + "integrity" "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==" + "resolved" "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz" + "version" "2.0.1" + dependencies: + "color-name" "~1.1.4" + +"color-name@~1.1.4": + "integrity" "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + "resolved" "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz" + "version" "1.1.4" + +"color-name@1.1.3": + "integrity" "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" + "resolved" "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz" + "version" "1.1.3" + +"color-support@^1.1.3": + "integrity" "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==" + "resolved" "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz" + "version" "1.1.3" + +"colorette@^2.0.14": + "integrity" "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==" + "resolved" "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz" + "version" "2.0.20" + +"combined-stream@^1.0.6", "combined-stream@^1.0.8", "combined-stream@~1.0.6": + "integrity" "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==" + "resolved" "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz" + "version" "1.0.8" + dependencies: + "delayed-stream" "~1.0.0" + +"commander@^10.0.1": + "integrity" "sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==" + "resolved" "https://registry.npmjs.org/commander/-/commander-10.0.1.tgz" + "version" "10.0.1" + +"commander@^2.20.0", "commander@^2.9.0": + "integrity" "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" + "resolved" "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz" + "version" "2.20.3" + +"concat-map@0.0.1": + "integrity" "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" + "resolved" "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz" + "version" "0.0.1" + +"console-control-strings@^1.0.0", "console-control-strings@^1.1.0", "console-control-strings@~1.1.0": + "integrity" "sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==" + "resolved" "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz" + "version" "1.1.0" + +"convert-source-map@^1.6.0": + "integrity" "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==" + "resolved" "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz" + "version" "1.9.0" + +"convert-source-map@^1.7.0": + "integrity" "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==" + "resolved" "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz" + "version" "1.9.0" + +"convert-source-map@^2.0.0": + "integrity" "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==" + "resolved" "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz" + "version" "2.0.0" + +"core-util-is@~1.0.0", "core-util-is@1.0.2": + "integrity" "sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==" + "resolved" "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz" + "version" "1.0.2" + +"cross-spawn@^7.0.2", "cross-spawn@^7.0.3": + "integrity" "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==" + "resolved" "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz" + "version" "7.0.3" + dependencies: + "path-key" "^3.1.0" + "shebang-command" "^2.0.0" + "which" "^2.0.1" + +"d@^1.0.1", "d@1": + "integrity" "sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==" + "resolved" "https://registry.npmjs.org/d/-/d-1.0.1.tgz" + "version" "1.0.1" + dependencies: + "es5-ext" "^0.10.50" + "type" "^1.0.1" + +"dashdash@^1.12.0": + "integrity" "sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g==" + "resolved" "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz" + "version" "1.14.1" + dependencies: + "assert-plus" "^1.0.0" + +"debug@^2.2.0": + "integrity" "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==" + "resolved" "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz" + "version" "2.6.9" + dependencies: + "ms" "2.0.0" + +"debug@^4", "debug@^4.1.0", "debug@^4.1.1", "debug@^4.3.2", "debug@^4.3.3", "debug@^4.3.4", "debug@4": + "integrity" "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==" + "resolved" "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz" + "version" "4.3.4" + dependencies: + "ms" "2.1.2" + +"decompress-response@^6.0.0": + "integrity" "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==" + "resolved" "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz" + "version" "6.0.0" + dependencies: + "mimic-response" "^3.1.0" + +"dedent@^1.0.0": + "integrity" "sha512-+LxW+KLWxu3HW3M2w2ympwtqPrqYRzU8fqi6Fhd18fBALe15blJPI/I4+UHveMVG6lJqB4JNd4UG0S5cnVHwIg==" + "resolved" "https://registry.npmjs.org/dedent/-/dedent-1.5.1.tgz" + "version" "1.5.1" + +"deep-extend@^0.6.0": + "integrity" "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==" + "resolved" "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz" + "version" "0.6.0" + +"deep-is@^0.1.3": + "integrity" "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==" + "resolved" "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz" + "version" "0.1.4" + +"deepmerge@^4.2.2": + "integrity" "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==" + "resolved" "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz" + "version" "4.3.1" + +"delayed-stream@~1.0.0": + "integrity" "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==" + "resolved" "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz" + "version" "1.0.0" + +"delegates@^1.0.0": + "integrity" "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==" + "resolved" "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz" + "version" "1.0.0" + +"detect-libc@^2.0.0", "detect-libc@^2.0.2": + "integrity" "sha512-UX6sGumvvqSaXgdKGUsgZWqcUyIXZ/vZTrlRT/iobiKhGL0zL4d3osHj3uqllWJK+i+sixDS/3COVEOFbupFyw==" + "resolved" "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.2.tgz" + "version" "2.0.2" + +"detect-newline@^3.0.0": + "integrity" "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==" + "resolved" "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz" + "version" "3.1.0" + +"diff-sequences@^29.4.3": + "integrity" "sha512-ofrBgwpPhCD85kMKtE9RYFFq6OC1A89oW2vvgWZNCwxrUpRUILopY7lsYyMDSjc8g6U6aiO0Qubg6r4Wgt5ZnA==" + "resolved" "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.4.3.tgz" + "version" "29.4.3" + +"dir-glob@^3.0.1": + "integrity" "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==" + "resolved" "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz" + "version" "3.0.1" + dependencies: + "path-type" "^4.0.0" + +"doctrine@^3.0.0": + "integrity" "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==" + "resolved" "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz" + "version" "3.0.0" + dependencies: + "esutils" "^2.0.2" + +"dotenv@^16.0.3": + "integrity" "sha512-IPzF4w4/Rd94bA9imS68tZBaYyBWSCE47V1RGuMrB94iyTOIEwRmVL2x/4An+6mETpLrKJ5hQkB8W4kFAadeIQ==" + "resolved" "https://registry.npmjs.org/dotenv/-/dotenv-16.3.1.tgz" + "version" "16.3.1" + +"duplexer2@~0.0.2": + "integrity" "sha512-+AWBwjGadtksxjOQSFDhPNQbed7icNXApT4+2BNpsXzcCBiInq2H9XW0O8sfHFaPmnQRs7cg/P0fAr2IWQSW0g==" + "resolved" "https://registry.npmjs.org/duplexer2/-/duplexer2-0.0.2.tgz" + "version" "0.0.2" + dependencies: + "readable-stream" "~1.1.9" + +"each-series-async@^1.0.1": + "integrity" "sha512-G4zip/Ewpwr6JQxW7+2RNgkPd09h/UNec5UlvA/xKwl4qf5blyBNK6a/zjQc3MojgsxaOb93B9v3T92QU6IMVg==" + "resolved" "https://registry.npmjs.org/each-series-async/-/each-series-async-1.0.1.tgz" + "version" "1.0.1" + +"ecc-jsbn@~0.1.1": + "integrity" "sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw==" + "resolved" "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz" + "version" "0.1.2" + dependencies: + "jsbn" "~0.1.0" + "safer-buffer" "^2.1.0" + +"electron-build-env@^0.2.0": + "integrity" "sha512-L431TbXtXe6iw3ko7ITr/qCu+jumVKLAhCDyhqfab6421LGlawVcT88Ws/DHR57+1lkLN1POQqwNOkjPwQJQmQ==" + "resolved" "https://registry.npmjs.org/electron-build-env/-/electron-build-env-0.2.0.tgz" + "version" "0.2.0" + dependencies: + "commander" "^2.9.0" + "mkdirp" "^0.5.1" + +"electron-to-chromium@^1.4.477": + "integrity" "sha512-36K9b/6skMVwAIEsC7GiQ8I8N3soCALVSHqWHzNDtGemAcI9Xu8hP02cywWM0A794rTHm0b0zHPeLJHtgFVamQ==" + "resolved" "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.492.tgz" + "version" "1.4.492" + +"emittery@^0.13.1": + "integrity" "sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==" + "resolved" "https://registry.npmjs.org/emittery/-/emittery-0.13.1.tgz" + "version" "0.13.1" + +"emoji-regex@^8.0.0": + "integrity" "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + "resolved" "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz" + "version" "8.0.0" + +"encoding@^0.1.13": + "integrity" "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==" + "resolved" "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz" + "version" "0.1.13" + dependencies: + "iconv-lite" "^0.6.2" + +"end-of-stream@^1.1.0", "end-of-stream@^1.4.1": + "integrity" "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==" + "resolved" "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz" + "version" "1.4.4" + dependencies: + "once" "^1.4.0" + +"enhanced-resolve@^5.15.0": + "integrity" "sha512-LXYT42KJ7lpIKECr2mAXIaMldcNCh/7E0KBKOu4KSfkHmP+mZmSs+8V5gBAqisWBy0OO4W5Oyys0GO1Y8KtdKg==" + "resolved" "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.15.0.tgz" + "version" "5.15.0" + dependencies: + "graceful-fs" "^4.2.4" + "tapable" "^2.2.0" + +"env-paths@^2.2.0": + "integrity" "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==" + "resolved" "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz" + "version" "2.2.1" + +"envinfo@^7.7.3": + "integrity" "sha512-ZtUjZO6l5mwTHvc1L9+1q5p/R3wTopcfqMW8r5t8SJSKqeVI/LtajORwRFEKpEFuekjD0VBjwu1HMxL4UalIRw==" + "resolved" "https://registry.npmjs.org/envinfo/-/envinfo-7.10.0.tgz" + "version" "7.10.0" + +"err-code@^2.0.2": + "integrity" "sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==" + "resolved" "https://registry.npmjs.org/err-code/-/err-code-2.0.3.tgz" + "version" "2.0.3" + +"error-ex@^1.3.1": + "integrity" "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==" + "resolved" "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz" + "version" "1.3.2" + dependencies: + "is-arrayish" "^0.2.1" + +"es-module-lexer@^1.2.1": + "integrity" "sha512-JUFAyicQV9mXc3YRxPnDlrfBKpqt6hUYzz9/boprUJHs4e4KVr3XwOF70doO6gwXUor6EWZJAyWAfKki84t20Q==" + "resolved" "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.3.1.tgz" + "version" "1.3.1" + +"es5-ext@^0.10.35", "es5-ext@^0.10.50": + "integrity" "sha512-BHLqn0klhEpnOKSrzn/Xsz2UIW8j+cGmo9JLzr8BiUapV8hPL9+FliFqjwr9ngW7jWdnxv6eO+/LqyhJVqgrjA==" + "resolved" "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.62.tgz" + "version" "0.10.62" + dependencies: + "es6-iterator" "^2.0.3" + "es6-symbol" "^3.1.3" + "next-tick" "^1.1.0" + +"es6-iterator@^2.0.3": + "integrity" "sha512-zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g==" + "resolved" "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz" + "version" "2.0.3" + dependencies: + "d" "1" + "es5-ext" "^0.10.35" + "es6-symbol" "^3.1.1" + +"es6-symbol@^3.0.2", "es6-symbol@^3.1.1", "es6-symbol@^3.1.3": + "integrity" "sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA==" + "resolved" "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.3.tgz" + "version" "3.1.3" + dependencies: + "d" "^1.0.1" + "ext" "^1.1.2" + +"escalade@^3.1.1": + "integrity" "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==" + "resolved" "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz" + "version" "3.1.1" + +"escape-string-regexp@^1.0.5": + "integrity" "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==" + "resolved" "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz" + "version" "1.0.5" + +"escape-string-regexp@^2.0.0": + "integrity" "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==" + "resolved" "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz" + "version" "2.0.0" + +"escape-string-regexp@^4.0.0": + "integrity" "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==" + "resolved" "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz" + "version" "4.0.0" + +"eslint-config-prettier@^8.5.0": + "integrity" "sha512-SM8AMJdeQqRYT9O9zguiruQZaN7+z+E4eAP9oiLNGKMtomwaB1E9dcgUD6ZAn/eQAb52USbvezbiljfZUhbJcg==" + "resolved" "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.10.0.tgz" + "version" "8.10.0" + +"eslint-scope@^5.1.1", "eslint-scope@5.1.1": + "integrity" "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==" + "resolved" "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz" + "version" "5.1.1" + dependencies: + "esrecurse" "^4.3.0" + "estraverse" "^4.1.1" + +"eslint-scope@^7.2.2": + "integrity" "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==" + "resolved" "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz" + "version" "7.2.2" + dependencies: + "esrecurse" "^4.3.0" + "estraverse" "^5.2.0" + +"eslint-visitor-keys@^3.3.0", "eslint-visitor-keys@^3.4.1", "eslint-visitor-keys@^3.4.3": + "integrity" "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==" + "resolved" "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz" + "version" "3.4.3" + +"eslint@*", "eslint@^6.0.0 || ^7.0.0 || ^8.0.0", "eslint@^6.0.0 || ^7.0.0 || >=8.0.0", "eslint@^8.20.0", "eslint@>=7.0.0": + "integrity" "sha512-spUQWrdPt+pRVP1TTJLmfRNJJHHZryFmptzcafwSvHsceV81djHOdnEeDmkdotZyLNjDhrOasNK8nikkoG1O8Q==" + "resolved" "https://registry.npmjs.org/eslint/-/eslint-8.47.0.tgz" + "version" "8.47.0" dependencies: "@eslint-community/eslint-utils" "^4.2.0" "@eslint-community/regexpp" "^4.6.1" @@ -1946,1073 +1946,1062 @@ eslint@^8.20.0: "@humanwhocodes/config-array" "^0.11.10" "@humanwhocodes/module-importer" "^1.0.1" "@nodelib/fs.walk" "^1.2.8" - ajv "^6.12.4" - chalk "^4.0.0" - cross-spawn "^7.0.2" - debug "^4.3.2" - doctrine "^3.0.0" - escape-string-regexp "^4.0.0" - eslint-scope "^7.2.2" - eslint-visitor-keys "^3.4.3" - espree "^9.6.1" - esquery "^1.4.2" - esutils "^2.0.2" - fast-deep-equal "^3.1.3" - file-entry-cache "^6.0.1" - find-up "^5.0.0" - glob-parent "^6.0.2" - globals "^13.19.0" - graphemer "^1.4.0" - ignore "^5.2.0" - imurmurhash "^0.1.4" - is-glob "^4.0.0" - is-path-inside "^3.0.3" - js-yaml "^4.1.0" - json-stable-stringify-without-jsonify "^1.0.1" - levn "^0.4.1" - lodash.merge "^4.6.2" - minimatch "^3.1.2" - natural-compare "^1.4.0" - optionator "^0.9.3" - strip-ansi "^6.0.1" - text-table "^0.2.0" - -espree@^9.6.0, espree@^9.6.1: - version "9.6.1" - resolved "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz" - integrity sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ== - dependencies: - acorn "^8.9.0" - acorn-jsx "^5.3.2" - eslint-visitor-keys "^3.4.1" - -esprima@^4.0.0: - version "4.0.1" - resolved "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz" - integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== - -esquery@^1.4.2: - version "1.5.0" - resolved "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz" - integrity sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg== - dependencies: - estraverse "^5.1.0" - -esrecurse@^4.3.0: - version "4.3.0" - resolved "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz" - integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag== - dependencies: - estraverse "^5.2.0" - -estraverse@^4.1.1: - version "4.3.0" - resolved "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz" - integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== - -estraverse@^5.1.0, estraverse@^5.2.0: - version "5.3.0" - resolved "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz" - integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA== - -esutils@^2.0.2: - version "2.0.3" - resolved "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz" - integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== - -event-target-shim@^5.0.0: - version "5.0.1" - resolved "https://registry.yarnpkg.com/event-target-shim/-/event-target-shim-5.0.1.tgz#5d4d3ebdf9583d63a5333ce2deb7480ab2b05789" - integrity sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ== - -events@^3.2.0, events@^3.3.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/events/-/events-3.3.0.tgz#31a95ad0a924e2d2c419a813aeb2c4e878ea7400" - integrity sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q== - -execa@^5.0.0: - version "5.1.1" - resolved "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz" - integrity sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg== - dependencies: - cross-spawn "^7.0.3" - get-stream "^6.0.0" - human-signals "^2.1.0" - is-stream "^2.0.0" - merge-stream "^2.0.0" - npm-run-path "^4.0.1" - onetime "^5.1.2" - signal-exit "^3.0.3" - strip-final-newline "^2.0.0" - -execspawn@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/execspawn/-/execspawn-1.0.1.tgz#8286f9dde7cecde7905fbdc04e24f368f23f8da6" - integrity sha512-s2k06Jy9i8CUkYe0+DxRlvtkZoOkwwfhB+Xxo5HGUtrISVW2m98jO2tr67DGRFxZwkjQqloA3v/tNtjhBRBieg== - dependencies: - util-extend "^1.0.1" - -exit@^0.1.2: - version "0.1.2" - resolved "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz" - integrity sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ== - -expand-template@^2.0.3: - version "2.0.3" - resolved "https://registry.npmjs.org/expand-template/-/expand-template-2.0.3.tgz" - integrity sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg== - -expect@^29.0.0, expect@^29.6.2: - version "29.6.2" - resolved "https://registry.npmjs.org/expect/-/expect-29.6.2.tgz" - integrity sha512-iAErsLxJ8C+S02QbLAwgSGSezLQK+XXRDt8IuFXFpwCNw2ECmzZSmjKcCaFVp5VRMk+WAvz6h6jokzEzBFZEuA== + "ajv" "^6.12.4" + "chalk" "^4.0.0" + "cross-spawn" "^7.0.2" + "debug" "^4.3.2" + "doctrine" "^3.0.0" + "escape-string-regexp" "^4.0.0" + "eslint-scope" "^7.2.2" + "eslint-visitor-keys" "^3.4.3" + "espree" "^9.6.1" + "esquery" "^1.4.2" + "esutils" "^2.0.2" + "fast-deep-equal" "^3.1.3" + "file-entry-cache" "^6.0.1" + "find-up" "^5.0.0" + "glob-parent" "^6.0.2" + "globals" "^13.19.0" + "graphemer" "^1.4.0" + "ignore" "^5.2.0" + "imurmurhash" "^0.1.4" + "is-glob" "^4.0.0" + "is-path-inside" "^3.0.3" + "js-yaml" "^4.1.0" + "json-stable-stringify-without-jsonify" "^1.0.1" + "levn" "^0.4.1" + "lodash.merge" "^4.6.2" + "minimatch" "^3.1.2" + "natural-compare" "^1.4.0" + "optionator" "^0.9.3" + "strip-ansi" "^6.0.1" + "text-table" "^0.2.0" + +"espree@^9.6.0", "espree@^9.6.1": + "integrity" "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==" + "resolved" "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz" + "version" "9.6.1" + dependencies: + "acorn" "^8.9.0" + "acorn-jsx" "^5.3.2" + "eslint-visitor-keys" "^3.4.1" + +"esprima@^4.0.0": + "integrity" "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==" + "resolved" "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz" + "version" "4.0.1" + +"esquery@^1.4.2": + "integrity" "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==" + "resolved" "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz" + "version" "1.5.0" + dependencies: + "estraverse" "^5.1.0" + +"esrecurse@^4.3.0": + "integrity" "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==" + "resolved" "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz" + "version" "4.3.0" + dependencies: + "estraverse" "^5.2.0" + +"estraverse@^4.1.1": + "integrity" "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==" + "resolved" "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz" + "version" "4.3.0" + +"estraverse@^5.1.0": + "integrity" "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==" + "resolved" "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz" + "version" "5.3.0" + +"estraverse@^5.2.0": + "integrity" "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==" + "resolved" "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz" + "version" "5.3.0" + +"esutils@^2.0.2": + "integrity" "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==" + "resolved" "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz" + "version" "2.0.3" + +"event-target-shim@^5.0.0": + "integrity" "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==" + "resolved" "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz" + "version" "5.0.1" + +"events@^3.2.0", "events@^3.3.0": + "integrity" "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==" + "resolved" "https://registry.npmjs.org/events/-/events-3.3.0.tgz" + "version" "3.3.0" + +"execa@^5.0.0": + "integrity" "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==" + "resolved" "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz" + "version" "5.1.1" + dependencies: + "cross-spawn" "^7.0.3" + "get-stream" "^6.0.0" + "human-signals" "^2.1.0" + "is-stream" "^2.0.0" + "merge-stream" "^2.0.0" + "npm-run-path" "^4.0.1" + "onetime" "^5.1.2" + "signal-exit" "^3.0.3" + "strip-final-newline" "^2.0.0" + +"execspawn@^1.0.1": + "integrity" "sha512-s2k06Jy9i8CUkYe0+DxRlvtkZoOkwwfhB+Xxo5HGUtrISVW2m98jO2tr67DGRFxZwkjQqloA3v/tNtjhBRBieg==" + "resolved" "https://registry.npmjs.org/execspawn/-/execspawn-1.0.1.tgz" + "version" "1.0.1" + dependencies: + "util-extend" "^1.0.1" + +"exit@^0.1.2": + "integrity" "sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==" + "resolved" "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz" + "version" "0.1.2" + +"expand-template@^2.0.3": + "integrity" "sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==" + "resolved" "https://registry.npmjs.org/expand-template/-/expand-template-2.0.3.tgz" + "version" "2.0.3" + +"expect@^29.0.0", "expect@^29.6.2": + "integrity" "sha512-iAErsLxJ8C+S02QbLAwgSGSezLQK+XXRDt8IuFXFpwCNw2ECmzZSmjKcCaFVp5VRMk+WAvz6h6jokzEzBFZEuA==" + "resolved" "https://registry.npmjs.org/expect/-/expect-29.6.2.tgz" + "version" "29.6.2" dependencies: "@jest/expect-utils" "^29.6.2" "@types/node" "*" - jest-get-type "^29.4.3" - jest-matcher-utils "^29.6.2" - jest-message-util "^29.6.2" - jest-util "^29.6.2" - -exponential-backoff@^3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/exponential-backoff/-/exponential-backoff-3.1.1.tgz#64ac7526fe341ab18a39016cd22c787d01e00bf6" - integrity sha512-dX7e/LHVJ6W3DE1MHWi9S1EYzDESENfLrYohG2G++ovZrYOkm4Knwa0mc1cn84xJOR4KEU0WSchhLbd0UklbHw== - -ext@^1.1.2: - version "1.7.0" - resolved "https://registry.yarnpkg.com/ext/-/ext-1.7.0.tgz#0ea4383c0103d60e70be99e9a7f11027a33c4f5f" - integrity sha512-6hxeJYaL110a9b5TEJSj0gojyHQAmA2ch5Os+ySCiA1QGdS697XWY1pzsrSjqA9LDEEgdB/KypIlR59RcLuHYw== - dependencies: - type "^2.7.2" - -extend@~3.0.2: - version "3.0.2" - resolved "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz" - integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g== - -extsprintf@1.3.0, extsprintf@^1.2.0: - version "1.3.0" - resolved "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz" - integrity sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g== - -fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: - version "3.1.3" - resolved "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz" - integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== - -fast-fifo@^1.1.0, fast-fifo@^1.2.0: - version "1.3.2" - resolved "https://registry.yarnpkg.com/fast-fifo/-/fast-fifo-1.3.2.tgz#286e31de96eb96d38a97899815740ba2a4f3640c" - integrity sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ== - -fast-glob@^3.2.9: - version "3.3.1" - resolved "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.1.tgz" - integrity sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg== + "jest-get-type" "^29.4.3" + "jest-matcher-utils" "^29.6.2" + "jest-message-util" "^29.6.2" + "jest-util" "^29.6.2" + +"exponential-backoff@^3.1.1": + "integrity" "sha512-dX7e/LHVJ6W3DE1MHWi9S1EYzDESENfLrYohG2G++ovZrYOkm4Knwa0mc1cn84xJOR4KEU0WSchhLbd0UklbHw==" + "resolved" "https://registry.npmjs.org/exponential-backoff/-/exponential-backoff-3.1.1.tgz" + "version" "3.1.1" + +"ext@^1.1.2": + "integrity" "sha512-6hxeJYaL110a9b5TEJSj0gojyHQAmA2ch5Os+ySCiA1QGdS697XWY1pzsrSjqA9LDEEgdB/KypIlR59RcLuHYw==" + "resolved" "https://registry.npmjs.org/ext/-/ext-1.7.0.tgz" + "version" "1.7.0" + dependencies: + "type" "^2.7.2" + +"extend@~3.0.2": + "integrity" "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" + "resolved" "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz" + "version" "3.0.2" + +"extsprintf@^1.2.0", "extsprintf@1.3.0": + "integrity" "sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g==" + "resolved" "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz" + "version" "1.3.0" + +"fast-deep-equal@^3.1.1", "fast-deep-equal@^3.1.3": + "integrity" "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" + "resolved" "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz" + "version" "3.1.3" + +"fast-fifo@^1.1.0", "fast-fifo@^1.2.0": + "integrity" "sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ==" + "resolved" "https://registry.npmjs.org/fast-fifo/-/fast-fifo-1.3.2.tgz" + "version" "1.3.2" + +"fast-glob@^3.2.9": + "integrity" "sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==" + "resolved" "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.1.tgz" + "version" "3.3.1" dependencies: "@nodelib/fs.stat" "^2.0.2" "@nodelib/fs.walk" "^1.2.3" - glob-parent "^5.1.2" - merge2 "^1.3.0" - micromatch "^4.0.4" - -fast-json-stable-stringify@2.x, fast-json-stable-stringify@^2.0.0, fast-json-stable-stringify@^2.1.0: - version "2.1.0" - resolved "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz" - integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== - -fast-levenshtein@^2.0.6: - version "2.0.6" - resolved "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz" - integrity sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw== - -fastest-levenshtein@^1.0.12: - version "1.0.16" - resolved "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.16.tgz" - integrity sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg== - -fastq@^1.6.0: - version "1.15.0" - resolved "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz" - integrity sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw== - dependencies: - reusify "^1.0.4" - -fb-watchman@^2.0.0: - version "2.0.2" - resolved "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.2.tgz" - integrity sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA== - dependencies: - bser "2.1.1" - -file-entry-cache@^6.0.1: - version "6.0.1" - resolved "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz" - integrity sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg== - dependencies: - flat-cache "^3.0.4" - -fill-range@^7.0.1: - version "7.0.1" - resolved "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz" - integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== - dependencies: - to-regex-range "^5.0.1" - -find-up@^4.0.0, find-up@^4.1.0: - version "4.1.0" - resolved "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz" - integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw== - dependencies: - locate-path "^5.0.0" - path-exists "^4.0.0" - -find-up@^5.0.0: - version "5.0.0" - resolved "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz" - integrity sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng== - dependencies: - locate-path "^6.0.0" - path-exists "^4.0.0" - -flat-cache@^3.0.4: - version "3.0.4" - resolved "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz" - integrity sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg== - dependencies: - flatted "^3.1.0" - rimraf "^3.0.2" - -flatted@^3.1.0: - version "3.2.7" - resolved "https://registry.npmjs.org/flatted/-/flatted-3.2.7.tgz" - integrity sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ== - -follow-redirects@^1.15.0: - version "1.15.3" - resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.3.tgz#fe2f3ef2690afce7e82ed0b44db08165b207123a" - integrity sha512-1VzOtuEM8pC9SFU1E+8KfTjZyMztRsgEfwQl44z8A25uy13jSzTj6dyK2Df52iV0vgHCfBwLhDWevLn95w5v6Q== - -foreground-child@^3.1.0: - version "3.1.1" - resolved "https://registry.yarnpkg.com/foreground-child/-/foreground-child-3.1.1.tgz#1d173e776d75d2772fed08efe4a0de1ea1b12d0d" - integrity sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg== - dependencies: - cross-spawn "^7.0.0" - signal-exit "^4.0.1" - -forever-agent@~0.6.1: - version "0.6.1" - resolved "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz" - integrity sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw== - -form-data@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/form-data/-/form-data-4.0.0.tgz#93919daeaf361ee529584b9b31664dc12c9fa452" - integrity sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww== - dependencies: - asynckit "^0.4.0" - combined-stream "^1.0.8" - mime-types "^2.1.12" - -form-data@~2.3.2: - version "2.3.3" - resolved "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz" - integrity sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ== - dependencies: - asynckit "^0.4.0" - combined-stream "^1.0.6" - mime-types "^2.1.12" - -fs-constants@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz" - integrity sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow== - -fs-extra@^10.1.0: - version "10.1.0" - resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-10.1.0.tgz#02873cfbc4084dde127eaa5f9905eef2325d1abf" - integrity sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ== - dependencies: - graceful-fs "^4.2.0" - jsonfile "^6.0.1" - universalify "^2.0.0" - -fs-minipass@^1.2.7: - version "1.2.7" - resolved "https://registry.npmjs.org/fs-minipass/-/fs-minipass-1.2.7.tgz" - integrity sha512-GWSSJGFy4e9GUeCcbIkED+bgAoFyj7XF1mV8rma3QW4NIqX9Kyx79N/PF61H5udOV3aY1IaMLs6pGbH71nlCTA== - dependencies: - minipass "^2.6.0" - -fs-minipass@^3.0.0: - version "3.0.3" - resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-3.0.3.tgz#79a85981c4dc120065e96f62086bf6f9dc26cc54" - integrity sha512-XUBA9XClHbnJWSfBzjkm6RvPsyg3sryZt06BEQoXcF7EK/xpGaQYJgQKDJSUH5SGZ76Y7pFx1QBnXz09rU5Fbw== - dependencies: - minipass "^7.0.3" - -fs.realpath@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz" - integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== - -fsevents@^2.3.2: - version "2.3.2" - resolved "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz" - integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== - -fstream@^1.0.0: - version "1.0.12" - resolved "https://registry.npmjs.org/fstream/-/fstream-1.0.12.tgz" - integrity sha512-WvJ193OHa0GHPEL+AycEJgxvBEwyfRkN1vhjca23OaPVMCaLCXTd5qAu82AjTcgP1UJmytkOKb63Ypde7raDIg== - dependencies: - graceful-fs "^4.1.2" - inherits "~2.0.0" - mkdirp ">=0.5 0" - rimraf "2" - -function-bind@^1.1.1: - version "1.1.1" - resolved "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz" - integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== - -gauge@^4.0.3: - version "4.0.4" - resolved "https://registry.yarnpkg.com/gauge/-/gauge-4.0.4.tgz#52ff0652f2bbf607a989793d53b751bef2328dce" - integrity sha512-f9m+BEN5jkg6a0fZjleidjN51VE1X+mPFQ2DJ0uv1V39oCLCbsGe6yjbBnp7eK7z/+GAon99a3nHuqbuuthyPg== - dependencies: - aproba "^1.0.3 || ^2.0.0" - color-support "^1.1.3" - console-control-strings "^1.1.0" - has-unicode "^2.0.1" - signal-exit "^3.0.7" - string-width "^4.2.3" - strip-ansi "^6.0.1" - wide-align "^1.1.5" - -gauge@^5.0.0: - version "5.0.1" - resolved "https://registry.yarnpkg.com/gauge/-/gauge-5.0.1.tgz#1efc801b8ff076b86ef3e9a7a280a975df572112" - integrity sha512-CmykPMJGuNan/3S4kZOpvvPYSNqSHANiWnh9XcMU2pSjtBfF0XzZ2p1bFAxTbnFxyBuPxQYHhzwaoOmUdqzvxQ== - dependencies: - aproba "^1.0.3 || ^2.0.0" - color-support "^1.1.3" - console-control-strings "^1.1.0" - has-unicode "^2.0.1" - signal-exit "^4.0.1" - string-width "^4.2.3" - strip-ansi "^6.0.1" - wide-align "^1.1.5" - -gauge@~1.2.5: - version "1.2.7" - resolved "https://registry.npmjs.org/gauge/-/gauge-1.2.7.tgz" - integrity sha512-fVbU2wRE91yDvKUnrIaQlHKAWKY5e08PmztCrwuH5YVQ+Z/p3d0ny2T48o6uvAAXHIUnfaQdHkmxYbQft1eHVA== - dependencies: - ansi "^0.3.0" - has-unicode "^2.0.0" - lodash.pad "^4.1.0" - lodash.padend "^4.1.0" - lodash.padstart "^4.1.0" - -gauge@~2.7.3: - version "2.7.4" - resolved "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz" - integrity sha512-14x4kjc6lkD3ltw589k0NrPD6cCNTD6CWoVUNpB85+DrtONoZn+Rug6xZU5RvSC4+TZPxA5AnBibQYAvZn41Hg== - dependencies: - aproba "^1.0.3" - console-control-strings "^1.0.0" - has-unicode "^2.0.0" - object-assign "^4.1.0" - signal-exit "^3.0.0" - string-width "^1.0.1" - strip-ansi "^3.0.1" - wide-align "^1.1.0" - -gensync@^1.0.0-beta.2: - version "1.0.0-beta.2" - resolved "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz" - integrity sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg== - -get-caller-file@^2.0.5: - version "2.0.5" - resolved "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz" - integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== - -get-package-type@^0.1.0: - version "0.1.0" - resolved "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz" - integrity sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q== - -get-stream@^6.0.0: - version "6.0.1" - resolved "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz" - integrity sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg== - -getpass@^0.1.1: - version "0.1.7" - resolved "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz" - integrity sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng== - dependencies: - assert-plus "^1.0.0" - -ghreleases@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/ghreleases/-/ghreleases-3.0.2.tgz#1bdb6d31ec03a24a0d80f58f5e9a84a4db725818" - integrity sha512-QiR9mIYvRG7hd8JuQYoxeBNOelVuTp2DpdiByRywbCDBSJufK9Vq7VuhD8B+5uviMxZx2AEkCzye61Us9gYgnw== - dependencies: - after "~0.8.1" - ghrepos "~2.1.0" - ghutils "~3.2.0" - lodash.uniq "^4.5.0" - simple-mime "~0.1.0" - url-template "~2.0.6" - -ghrepos@~2.1.0: - version "2.1.0" - resolved "https://registry.npmjs.org/ghrepos/-/ghrepos-2.1.0.tgz" - integrity sha512-6GM0ohSDTAv7xD6GsKfxJiV/CajoofRyUwu0E8l29d1o6lFAUxmmyMP/FH33afA20ZrXzxxcTtN6TsYvudMoAg== - dependencies: - ghutils "~3.2.0" - -ghutils@~3.2.0: - version "3.2.6" - resolved "https://registry.npmjs.org/ghutils/-/ghutils-3.2.6.tgz" - integrity sha512-WpYHgLQkqU7Cv147wKUEThyj6qKHCdnAG2CL9RRsRQImVdLGdVqblJ3JUnj3ToQwgm1ALPS+FXgR0448AgGPUg== - dependencies: - jsonist "~2.1.0" - xtend "~4.0.1" - -github-from-package@0.0.0: - version "0.0.0" - resolved "https://registry.npmjs.org/github-from-package/-/github-from-package-0.0.0.tgz" - integrity sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw== - -glob-parent@^5.1.2: - version "5.1.2" - resolved "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz" - integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== - dependencies: - is-glob "^4.0.1" - -glob-parent@^6.0.2: - version "6.0.2" - resolved "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz" - integrity sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A== - dependencies: - is-glob "^4.0.3" - -glob-to-regexp@^0.4.1: - version "0.4.1" - resolved "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz" - integrity sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw== - -"glob@3 || 4 || 5 || 6 || 7", glob@^7.0.3, glob@^7.1.3, glob@^7.1.4, glob@^7.2.3: - version "7.2.3" - resolved "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz" - integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== - dependencies: - fs.realpath "^1.0.0" - inflight "^1.0.4" - inherits "2" - minimatch "^3.1.1" - once "^1.3.0" - path-is-absolute "^1.0.0" - -glob@^10.2.2: - version "10.3.10" - resolved "https://registry.yarnpkg.com/glob/-/glob-10.3.10.tgz#0351ebb809fd187fe421ab96af83d3a70715df4b" - integrity sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g== - dependencies: - foreground-child "^3.1.0" - jackspeak "^2.3.5" - minimatch "^9.0.1" - minipass "^5.0.0 || ^6.0.2 || ^7.0.0" - path-scurry "^1.10.1" - -globals@^11.1.0: - version "11.12.0" - resolved "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz" - integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== - -globals@^13.19.0: - version "13.21.0" - resolved "https://registry.npmjs.org/globals/-/globals-13.21.0.tgz" - integrity sha512-ybyme3s4yy/t/3s35bewwXKOf7cvzfreG2lH0lZl0JB7I4GxRP2ghxOK/Nb9EkRXdbBXZLfq/p/0W2JUONB/Gg== - dependencies: - type-fest "^0.20.2" - -globby@^11.1.0: - version "11.1.0" - resolved "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz" - integrity sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g== - dependencies: - array-union "^2.1.0" - dir-glob "^3.0.1" - fast-glob "^3.2.9" - ignore "^5.2.0" - merge2 "^1.4.1" - slash "^3.0.0" - -graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.4, graceful-fs@^4.2.6, graceful-fs@^4.2.9: - version "4.2.11" - resolved "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz" - integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ== - -graphemer@^1.4.0: - version "1.4.0" - resolved "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz" - integrity sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag== - -handlebars@^4.7.7: - version "4.7.8" - resolved "https://registry.npmjs.org/handlebars/-/handlebars-4.7.8.tgz" - integrity sha512-vafaFqs8MZkRrSX7sFVUdo3ap/eNiLnb4IakshzvP56X5Nr1iGKAIqdX6tMlm6HcNRIkr6AxO5jFEoJzzpT8aQ== - dependencies: - minimist "^1.2.5" - neo-async "^2.6.2" - source-map "^0.6.1" - wordwrap "^1.0.0" + "glob-parent" "^5.1.2" + "merge2" "^1.3.0" + "micromatch" "^4.0.4" + +"fast-json-stable-stringify@^2.0.0", "fast-json-stable-stringify@^2.1.0", "fast-json-stable-stringify@2.x": + "integrity" "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==" + "resolved" "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz" + "version" "2.1.0" + +"fast-levenshtein@^2.0.6": + "integrity" "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==" + "resolved" "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz" + "version" "2.0.6" + +"fastest-levenshtein@^1.0.12": + "integrity" "sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg==" + "resolved" "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.16.tgz" + "version" "1.0.16" + +"fastq@^1.6.0": + "integrity" "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==" + "resolved" "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz" + "version" "1.15.0" + dependencies: + "reusify" "^1.0.4" + +"fb-watchman@^2.0.0": + "integrity" "sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==" + "resolved" "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.2.tgz" + "version" "2.0.2" + dependencies: + "bser" "2.1.1" + +"file-entry-cache@^6.0.1": + "integrity" "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==" + "resolved" "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz" + "version" "6.0.1" + dependencies: + "flat-cache" "^3.0.4" + +"fill-range@^7.0.1": + "integrity" "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==" + "resolved" "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz" + "version" "7.0.1" + dependencies: + "to-regex-range" "^5.0.1" + +"find-up@^4.0.0": + "integrity" "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==" + "resolved" "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz" + "version" "4.1.0" + dependencies: + "locate-path" "^5.0.0" + "path-exists" "^4.0.0" + +"find-up@^4.1.0": + "integrity" "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==" + "resolved" "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz" + "version" "4.1.0" + dependencies: + "locate-path" "^5.0.0" + "path-exists" "^4.0.0" + +"find-up@^5.0.0": + "integrity" "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==" + "resolved" "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz" + "version" "5.0.0" + dependencies: + "locate-path" "^6.0.0" + "path-exists" "^4.0.0" + +"flat-cache@^3.0.4": + "integrity" "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==" + "resolved" "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz" + "version" "3.0.4" + dependencies: + "flatted" "^3.1.0" + "rimraf" "^3.0.2" + +"flatted@^3.1.0": + "integrity" "sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==" + "resolved" "https://registry.npmjs.org/flatted/-/flatted-3.2.7.tgz" + "version" "3.2.7" + +"follow-redirects@^1.15.0": + "integrity" "sha512-1VzOtuEM8pC9SFU1E+8KfTjZyMztRsgEfwQl44z8A25uy13jSzTj6dyK2Df52iV0vgHCfBwLhDWevLn95w5v6Q==" + "resolved" "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.3.tgz" + "version" "1.15.3" + +"forever-agent@~0.6.1": + "integrity" "sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw==" + "resolved" "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz" + "version" "0.6.1" + +"form-data@^4.0.0": + "integrity" "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==" + "resolved" "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz" + "version" "4.0.0" + dependencies: + "asynckit" "^0.4.0" + "combined-stream" "^1.0.8" + "mime-types" "^2.1.12" + +"form-data@~2.3.2": + "integrity" "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==" + "resolved" "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz" + "version" "2.3.3" + dependencies: + "asynckit" "^0.4.0" + "combined-stream" "^1.0.6" + "mime-types" "^2.1.12" + +"fs-constants@^1.0.0": + "integrity" "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==" + "resolved" "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz" + "version" "1.0.0" + +"fs-extra@^10.1.0": + "integrity" "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==" + "resolved" "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz" + "version" "10.1.0" + dependencies: + "graceful-fs" "^4.2.0" + "jsonfile" "^6.0.1" + "universalify" "^2.0.0" + +"fs-minipass@^2.0.0", "fs-minipass@^2.1.0": + "integrity" "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==" + "resolved" "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz" + "version" "2.1.0" + dependencies: + "minipass" "^3.0.0" + +"fs.realpath@^1.0.0": + "integrity" "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" + "resolved" "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz" + "version" "1.0.0" + +"fstream@^1.0.0", "fstream@^1.0.12": + "integrity" "sha512-WvJ193OHa0GHPEL+AycEJgxvBEwyfRkN1vhjca23OaPVMCaLCXTd5qAu82AjTcgP1UJmytkOKb63Ypde7raDIg==" + "resolved" "https://registry.npmjs.org/fstream/-/fstream-1.0.12.tgz" + "version" "1.0.12" + dependencies: + "graceful-fs" "^4.1.2" + "inherits" "~2.0.0" + "mkdirp" ">=0.5 0" + "rimraf" "2" + +"function-bind@^1.1.1": + "integrity" "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" + "resolved" "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz" + "version" "1.1.1" + +"gauge@^4.0.3": + "integrity" "sha512-f9m+BEN5jkg6a0fZjleidjN51VE1X+mPFQ2DJ0uv1V39oCLCbsGe6yjbBnp7eK7z/+GAon99a3nHuqbuuthyPg==" + "resolved" "https://registry.npmjs.org/gauge/-/gauge-4.0.4.tgz" + "version" "4.0.4" + dependencies: + "aproba" "^1.0.3 || ^2.0.0" + "color-support" "^1.1.3" + "console-control-strings" "^1.1.0" + "has-unicode" "^2.0.1" + "signal-exit" "^3.0.7" + "string-width" "^4.2.3" + "strip-ansi" "^6.0.1" + "wide-align" "^1.1.5" + +"gauge@^5.0.0": + "integrity" "sha512-CmykPMJGuNan/3S4kZOpvvPYSNqSHANiWnh9XcMU2pSjtBfF0XzZ2p1bFAxTbnFxyBuPxQYHhzwaoOmUdqzvxQ==" + "resolved" "https://registry.npmjs.org/gauge/-/gauge-5.0.1.tgz" + "version" "5.0.1" + dependencies: + "aproba" "^1.0.3 || ^2.0.0" + "color-support" "^1.1.3" + "console-control-strings" "^1.1.0" + "has-unicode" "^2.0.1" + "signal-exit" "^4.0.1" + "string-width" "^4.2.3" + "strip-ansi" "^6.0.1" + "wide-align" "^1.1.5" + +"gauge@~1.2.5": + "integrity" "sha512-fVbU2wRE91yDvKUnrIaQlHKAWKY5e08PmztCrwuH5YVQ+Z/p3d0ny2T48o6uvAAXHIUnfaQdHkmxYbQft1eHVA==" + "resolved" "https://registry.npmjs.org/gauge/-/gauge-1.2.7.tgz" + "version" "1.2.7" + dependencies: + "ansi" "^0.3.0" + "has-unicode" "^2.0.0" + "lodash.pad" "^4.1.0" + "lodash.padend" "^4.1.0" + "lodash.padstart" "^4.1.0" + +"gauge@~2.7.3": + "integrity" "sha512-14x4kjc6lkD3ltw589k0NrPD6cCNTD6CWoVUNpB85+DrtONoZn+Rug6xZU5RvSC4+TZPxA5AnBibQYAvZn41Hg==" + "resolved" "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz" + "version" "2.7.4" + dependencies: + "aproba" "^1.0.3" + "console-control-strings" "^1.0.0" + "has-unicode" "^2.0.0" + "object-assign" "^4.1.0" + "signal-exit" "^3.0.0" + "string-width" "^1.0.1" + "strip-ansi" "^3.0.1" + "wide-align" "^1.1.0" + +"gensync@^1.0.0-beta.2": + "integrity" "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==" + "resolved" "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz" + "version" "1.0.0-beta.2" + +"get-caller-file@^2.0.5": + "integrity" "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==" + "resolved" "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz" + "version" "2.0.5" + +"get-package-type@^0.1.0": + "integrity" "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==" + "resolved" "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz" + "version" "0.1.0" + +"get-stream@^6.0.0": + "integrity" "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==" + "resolved" "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz" + "version" "6.0.1" + +"getpass@^0.1.1": + "integrity" "sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng==" + "resolved" "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz" + "version" "0.1.7" + dependencies: + "assert-plus" "^1.0.0" + +"ghreleases@^3.0.2": + "integrity" "sha512-QiR9mIYvRG7hd8JuQYoxeBNOelVuTp2DpdiByRywbCDBSJufK9Vq7VuhD8B+5uviMxZx2AEkCzye61Us9gYgnw==" + "resolved" "https://registry.npmjs.org/ghreleases/-/ghreleases-3.0.2.tgz" + "version" "3.0.2" + dependencies: + "after" "~0.8.1" + "ghrepos" "~2.1.0" + "ghutils" "~3.2.0" + "lodash.uniq" "^4.5.0" + "simple-mime" "~0.1.0" + "url-template" "~2.0.6" + +"ghrepos@~2.1.0": + "integrity" "sha512-6GM0ohSDTAv7xD6GsKfxJiV/CajoofRyUwu0E8l29d1o6lFAUxmmyMP/FH33afA20ZrXzxxcTtN6TsYvudMoAg==" + "resolved" "https://registry.npmjs.org/ghrepos/-/ghrepos-2.1.0.tgz" + "version" "2.1.0" + dependencies: + "ghutils" "~3.2.0" + +"ghutils@~3.2.0": + "integrity" "sha512-WpYHgLQkqU7Cv147wKUEThyj6qKHCdnAG2CL9RRsRQImVdLGdVqblJ3JUnj3ToQwgm1ALPS+FXgR0448AgGPUg==" + "resolved" "https://registry.npmjs.org/ghutils/-/ghutils-3.2.6.tgz" + "version" "3.2.6" + dependencies: + "jsonist" "~2.1.0" + "xtend" "~4.0.1" + +"github-from-package@0.0.0": + "integrity" "sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw==" + "resolved" "https://registry.npmjs.org/github-from-package/-/github-from-package-0.0.0.tgz" + "version" "0.0.0" + +"glob-parent@^5.1.2": + "integrity" "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==" + "resolved" "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz" + "version" "5.1.2" + dependencies: + "is-glob" "^4.0.1" + +"glob-parent@^6.0.2": + "integrity" "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==" + "resolved" "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz" + "version" "6.0.2" + dependencies: + "is-glob" "^4.0.3" + +"glob-to-regexp@^0.4.1": + "integrity" "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==" + "resolved" "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz" + "version" "0.4.1" + +"glob@^7.0.3", "glob@^7.1.3", "glob@^7.1.4", "glob@^7.2.3", "glob@3 || 4 || 5 || 6 || 7": + "integrity" "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==" + "resolved" "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz" + "version" "7.2.3" + dependencies: + "fs.realpath" "^1.0.0" + "inflight" "^1.0.4" + "inherits" "2" + "minimatch" "^3.1.1" + "once" "^1.3.0" + "path-is-absolute" "^1.0.0" + +"glob@^8.0.1": + "integrity" "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==" + "resolved" "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz" + "version" "8.1.0" + dependencies: + "fs.realpath" "^1.0.0" + "inflight" "^1.0.4" + "inherits" "2" + "minimatch" "^5.0.1" + "once" "^1.3.0" + +"globals@^11.1.0": + "integrity" "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==" + "resolved" "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz" + "version" "11.12.0" + +"globals@^13.19.0": + "integrity" "sha512-ybyme3s4yy/t/3s35bewwXKOf7cvzfreG2lH0lZl0JB7I4GxRP2ghxOK/Nb9EkRXdbBXZLfq/p/0W2JUONB/Gg==" + "resolved" "https://registry.npmjs.org/globals/-/globals-13.21.0.tgz" + "version" "13.21.0" + dependencies: + "type-fest" "^0.20.2" + +"globby@^11.1.0": + "integrity" "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==" + "resolved" "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz" + "version" "11.1.0" + dependencies: + "array-union" "^2.1.0" + "dir-glob" "^3.0.1" + "fast-glob" "^3.2.9" + "ignore" "^5.2.0" + "merge2" "^1.4.1" + "slash" "^3.0.0" + +"graceful-fs@^4.1.2", "graceful-fs@^4.1.6", "graceful-fs@^4.2.0", "graceful-fs@^4.2.4", "graceful-fs@^4.2.6", "graceful-fs@^4.2.9": + "integrity" "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==" + "resolved" "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz" + "version" "4.2.11" + +"graphemer@^1.4.0": + "integrity" "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==" + "resolved" "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz" + "version" "1.4.0" + +"handlebars@^4.7.7": + "integrity" "sha512-vafaFqs8MZkRrSX7sFVUdo3ap/eNiLnb4IakshzvP56X5Nr1iGKAIqdX6tMlm6HcNRIkr6AxO5jFEoJzzpT8aQ==" + "resolved" "https://registry.npmjs.org/handlebars/-/handlebars-4.7.8.tgz" + "version" "4.7.8" + dependencies: + "minimist" "^1.2.5" + "neo-async" "^2.6.2" + "source-map" "^0.6.1" + "wordwrap" "^1.0.0" optionalDependencies: - uglify-js "^3.1.4" - -har-schema@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz" - integrity sha512-Oqluz6zhGX8cyRaTQlFMPw80bSJVG2x/cFb8ZPhUILGgHka9SsokCCOQgpveePerqidZOrT14ipqfJb7ILcW5Q== - -har-validator@~5.1.3: - version "5.1.5" - resolved "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz" - integrity sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w== - dependencies: - ajv "^6.12.3" - har-schema "^2.0.0" - -has-flag@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz" - integrity sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw== - -has-flag@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz" - integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== - -has-unicode@^2.0.0, has-unicode@^2.0.1: - version "2.0.1" - resolved "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz" - integrity sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ== - -has@^1.0.3: - version "1.0.3" - resolved "https://registry.npmjs.org/has/-/has-1.0.3.tgz" - integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== - dependencies: - function-bind "^1.1.1" - -html-escaper@^2.0.0: - version "2.0.2" - resolved "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz" - integrity sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg== - -http-cache-semantics@^4.1.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz#abe02fcb2985460bf0323be664436ec3476a6d5a" - integrity sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ== - -http-proxy-agent@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz#5129800203520d434f142bc78ff3c170800f2b43" - integrity sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w== + "uglify-js" "^3.1.4" + +"har-schema@^2.0.0": + "integrity" "sha512-Oqluz6zhGX8cyRaTQlFMPw80bSJVG2x/cFb8ZPhUILGgHka9SsokCCOQgpveePerqidZOrT14ipqfJb7ILcW5Q==" + "resolved" "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz" + "version" "2.0.0" + +"har-validator@~5.1.3": + "integrity" "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==" + "resolved" "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz" + "version" "5.1.5" + dependencies: + "ajv" "^6.12.3" + "har-schema" "^2.0.0" + +"has-flag@^3.0.0": + "integrity" "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==" + "resolved" "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz" + "version" "3.0.0" + +"has-flag@^4.0.0": + "integrity" "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + "resolved" "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz" + "version" "4.0.0" + +"has-unicode@^2.0.0", "has-unicode@^2.0.1": + "integrity" "sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==" + "resolved" "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz" + "version" "2.0.1" + +"has@^1.0.3": + "integrity" "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==" + "resolved" "https://registry.npmjs.org/has/-/has-1.0.3.tgz" + "version" "1.0.3" + dependencies: + "function-bind" "^1.1.1" + +"html-escaper@^2.0.0": + "integrity" "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==" + "resolved" "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz" + "version" "2.0.2" + +"http-cache-semantics@^4.1.0": + "integrity" "sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==" + "resolved" "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz" + "version" "4.1.1" + +"http-proxy-agent@^5.0.0": + "integrity" "sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==" + "resolved" "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz" + "version" "5.0.0" dependencies: "@tootallnate/once" "2" - agent-base "6" - debug "4" - -http-signature@~1.2.0: - version "1.2.0" - resolved "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz" - integrity sha512-CAbnr6Rz4CYQkLYUtSNXxQPUH2gK8f3iWexVlsnMeD+GjlsQ0Xsy1cOX+mN3dtxYomRy21CiOzU8Uhw6OwncEQ== - dependencies: - assert-plus "^1.0.0" - jsprim "^1.2.2" - sshpk "^1.7.0" - -https-proxy-agent@^5.0.0: - version "5.0.1" - resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz#c59ef224a04fe8b754f3db0063a25ea30d0005d6" - integrity sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA== - dependencies: - agent-base "6" - debug "4" - -human-signals@^2.1.0: - version "2.1.0" - resolved "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz" - integrity sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw== - -humanize-ms@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/humanize-ms/-/humanize-ms-1.2.1.tgz#c46e3159a293f6b896da29316d8b6fe8bb79bbed" - integrity sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ== - dependencies: - ms "^2.0.0" - -hyperquest@~2.1.3: - version "2.1.3" - resolved "https://registry.npmjs.org/hyperquest/-/hyperquest-2.1.3.tgz" - integrity sha512-fUuDOrB47PqNK/BAMOS13v41UoaqIxqSLHX6CAbOD7OfT+/GCWO1/vPLfTNutOeXrv1ikuaZ3yux+33Z9vh+rw== - dependencies: - buffer-from "^0.1.1" - duplexer2 "~0.0.2" - through2 "~0.6.3" - -iconv-lite@^0.6.2: - version "0.6.3" - resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.6.3.tgz#a52f80bf38da1952eb5c681790719871a1a72501" - integrity sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw== - dependencies: - safer-buffer ">= 2.1.2 < 3.0.0" - -ieee754@^1.1.13, ieee754@^1.2.1: - version "1.2.1" - resolved "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz" - integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== - -ignore@^5.2.0: - version "5.2.4" - resolved "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz" - integrity sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ== - -import-fresh@^3.2.1: - version "3.3.0" - resolved "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz" - integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw== - dependencies: - parent-module "^1.0.0" - resolve-from "^4.0.0" - -import-local@^3.0.2: - version "3.1.0" - resolved "https://registry.npmjs.org/import-local/-/import-local-3.1.0.tgz" - integrity sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg== - dependencies: - pkg-dir "^4.2.0" - resolve-cwd "^3.0.0" - -imurmurhash@^0.1.4: - version "0.1.4" - resolved "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz" - integrity sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA== - -indent-string@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-4.0.0.tgz#624f8f4497d619b2d9768531d58f4122854d7251" - integrity sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg== - -inflight@^1.0.4: - version "1.0.6" - resolved "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz" - integrity sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA== - dependencies: - once "^1.3.0" - wrappy "1" - -inherits@2, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.0, inherits@~2.0.1, inherits@~2.0.3: - version "2.0.4" - resolved "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz" - integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== - -ini@~1.3.0: - version "1.3.8" - resolved "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz" - integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew== - -interpret@^3.1.1: - version "3.1.1" - resolved "https://registry.npmjs.org/interpret/-/interpret-3.1.1.tgz" - integrity sha512-6xwYfHbajpoF0xLW+iwLkhwgvLoZDfjYfoFNu8ftMoXINzwuymNLd9u/KmwtdT2GbR+/Cz66otEGEVVUHX9QLQ== - -ip@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/ip/-/ip-2.0.0.tgz#4cf4ab182fee2314c75ede1276f8c80b479936da" - integrity sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ== - -is-arrayish@^0.2.1: - version "0.2.1" - resolved "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz" - integrity sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg== - -is-core-module@^2.13.0: - version "2.13.0" - resolved "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.0.tgz" - integrity sha512-Z7dk6Qo8pOCp3l4tsX2C5ZVas4V+UxwQodwZhLopL91TX8UyyHEXafPcyoeeWuLrwzHcr3igO78wNLwHJHsMCQ== - dependencies: - has "^1.0.3" - -is-extglob@^2.1.1: - version "2.1.1" - resolved "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz" - integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== - -is-fullwidth-code-point@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz" - integrity sha512-1pqUqRjkhPJ9miNq9SwMfdvi6lBJcd6eFxvfaivQhaH3SgisfiuudvFntdKOmxuee/77l+FPjKrQjWvmPjWrRw== - dependencies: - number-is-nan "^1.0.0" - -is-fullwidth-code-point@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz" - integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== - -is-generator-fn@^2.0.0: - version "2.1.0" - resolved "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz" - integrity sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ== - -is-glob@^4.0.0, is-glob@^4.0.1, is-glob@^4.0.3: - version "4.0.3" - resolved "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz" - integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== - dependencies: - is-extglob "^2.1.1" - -is-lambda@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-lambda/-/is-lambda-1.0.1.tgz#3d9877899e6a53efc0160504cde15f82e6f061d5" - integrity sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ== - -is-number@^7.0.0: - version "7.0.0" - resolved "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz" - integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== - -is-path-inside@^3.0.3: - version "3.0.3" - resolved "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz" - integrity sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ== - -is-plain-object@^2.0.4: - version "2.0.4" - resolved "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz" - integrity sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og== - dependencies: - isobject "^3.0.1" - -is-stream@^2.0.0: - version "2.0.1" - resolved "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz" - integrity sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg== - -is-typedarray@~1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz" - integrity sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA== - -isarray@0.0.1: - version "0.0.1" - resolved "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz" - integrity sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ== - -isarray@~1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz" - integrity sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ== - -isexe@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz" - integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== - -isobject@^3.0.1: - version "3.0.1" - resolved "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz" - integrity sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg== - -isstream@~0.1.2: - version "0.1.2" - resolved "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz" - integrity sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g== - -istanbul-lib-coverage@^3.0.0, istanbul-lib-coverage@^3.2.0: - version "3.2.0" - resolved "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz" - integrity sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw== - -istanbul-lib-instrument@^5.0.4, istanbul-lib-instrument@^5.1.0: - version "5.2.1" - resolved "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz" - integrity sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg== + "agent-base" "6" + "debug" "4" + +"http-signature@~1.2.0": + "integrity" "sha512-CAbnr6Rz4CYQkLYUtSNXxQPUH2gK8f3iWexVlsnMeD+GjlsQ0Xsy1cOX+mN3dtxYomRy21CiOzU8Uhw6OwncEQ==" + "resolved" "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz" + "version" "1.2.0" + dependencies: + "assert-plus" "^1.0.0" + "jsprim" "^1.2.2" + "sshpk" "^1.7.0" + +"https-proxy-agent@^5.0.0": + "integrity" "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==" + "resolved" "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz" + "version" "5.0.1" + dependencies: + "agent-base" "6" + "debug" "4" + +"human-signals@^2.1.0": + "integrity" "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==" + "resolved" "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz" + "version" "2.1.0" + +"humanize-ms@^1.2.1": + "integrity" "sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==" + "resolved" "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz" + "version" "1.2.1" + dependencies: + "ms" "^2.0.0" + +"hyperquest@~2.1.3": + "integrity" "sha512-fUuDOrB47PqNK/BAMOS13v41UoaqIxqSLHX6CAbOD7OfT+/GCWO1/vPLfTNutOeXrv1ikuaZ3yux+33Z9vh+rw==" + "resolved" "https://registry.npmjs.org/hyperquest/-/hyperquest-2.1.3.tgz" + "version" "2.1.3" + dependencies: + "buffer-from" "^0.1.1" + "duplexer2" "~0.0.2" + "through2" "~0.6.3" + +"iconv-lite@^0.6.2": + "integrity" "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==" + "resolved" "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz" + "version" "0.6.3" + dependencies: + "safer-buffer" ">= 2.1.2 < 3.0.0" + +"ieee754@^1.1.13", "ieee754@^1.2.1": + "integrity" "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==" + "resolved" "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz" + "version" "1.2.1" + +"ignore@^5.2.0": + "integrity" "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==" + "resolved" "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz" + "version" "5.2.4" + +"import-fresh@^3.2.1": + "integrity" "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==" + "resolved" "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz" + "version" "3.3.0" + dependencies: + "parent-module" "^1.0.0" + "resolve-from" "^4.0.0" + +"import-local@^3.0.2": + "integrity" "sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==" + "resolved" "https://registry.npmjs.org/import-local/-/import-local-3.1.0.tgz" + "version" "3.1.0" + dependencies: + "pkg-dir" "^4.2.0" + "resolve-cwd" "^3.0.0" + +"imurmurhash@^0.1.4": + "integrity" "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==" + "resolved" "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz" + "version" "0.1.4" + +"indent-string@^4.0.0": + "integrity" "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==" + "resolved" "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz" + "version" "4.0.0" + +"infer-owner@^1.0.4": + "integrity" "sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==" + "resolved" "https://registry.npmjs.org/infer-owner/-/infer-owner-1.0.4.tgz" + "version" "1.0.4" + +"inflight@^1.0.4": + "integrity" "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==" + "resolved" "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz" + "version" "1.0.6" + dependencies: + "once" "^1.3.0" + "wrappy" "1" + +"inherits@^2.0.3", "inherits@^2.0.4", "inherits@~2.0.0", "inherits@~2.0.1", "inherits@~2.0.3", "inherits@2": + "integrity" "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + "resolved" "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz" + "version" "2.0.4" + +"ini@~1.3.0": + "integrity" "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==" + "resolved" "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz" + "version" "1.3.8" + +"interpret@^3.1.1": + "integrity" "sha512-6xwYfHbajpoF0xLW+iwLkhwgvLoZDfjYfoFNu8ftMoXINzwuymNLd9u/KmwtdT2GbR+/Cz66otEGEVVUHX9QLQ==" + "resolved" "https://registry.npmjs.org/interpret/-/interpret-3.1.1.tgz" + "version" "3.1.1" + +"ip@^2.0.0": + "integrity" "sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ==" + "resolved" "https://registry.npmjs.org/ip/-/ip-2.0.0.tgz" + "version" "2.0.0" + +"is-arrayish@^0.2.1": + "integrity" "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==" + "resolved" "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz" + "version" "0.2.1" + +"is-core-module@^2.13.0": + "integrity" "sha512-Z7dk6Qo8pOCp3l4tsX2C5ZVas4V+UxwQodwZhLopL91TX8UyyHEXafPcyoeeWuLrwzHcr3igO78wNLwHJHsMCQ==" + "resolved" "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.0.tgz" + "version" "2.13.0" + dependencies: + "has" "^1.0.3" + +"is-extglob@^2.1.1": + "integrity" "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==" + "resolved" "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz" + "version" "2.1.1" + +"is-fullwidth-code-point@^1.0.0": + "integrity" "sha512-1pqUqRjkhPJ9miNq9SwMfdvi6lBJcd6eFxvfaivQhaH3SgisfiuudvFntdKOmxuee/77l+FPjKrQjWvmPjWrRw==" + "resolved" "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz" + "version" "1.0.0" + dependencies: + "number-is-nan" "^1.0.0" + +"is-fullwidth-code-point@^3.0.0": + "integrity" "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" + "resolved" "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz" + "version" "3.0.0" + +"is-generator-fn@^2.0.0": + "integrity" "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==" + "resolved" "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz" + "version" "2.1.0" + +"is-glob@^4.0.0", "is-glob@^4.0.1", "is-glob@^4.0.3": + "integrity" "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==" + "resolved" "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz" + "version" "4.0.3" + dependencies: + "is-extglob" "^2.1.1" + +"is-lambda@^1.0.1": + "integrity" "sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ==" + "resolved" "https://registry.npmjs.org/is-lambda/-/is-lambda-1.0.1.tgz" + "version" "1.0.1" + +"is-number@^7.0.0": + "integrity" "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==" + "resolved" "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz" + "version" "7.0.0" + +"is-path-inside@^3.0.3": + "integrity" "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==" + "resolved" "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz" + "version" "3.0.3" + +"is-plain-object@^2.0.4": + "integrity" "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==" + "resolved" "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz" + "version" "2.0.4" + dependencies: + "isobject" "^3.0.1" + +"is-stream@^2.0.0": + "integrity" "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==" + "resolved" "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz" + "version" "2.0.1" + +"is-typedarray@~1.0.0": + "integrity" "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==" + "resolved" "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz" + "version" "1.0.0" + +"isarray@~1.0.0": + "integrity" "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==" + "resolved" "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz" + "version" "1.0.0" + +"isarray@0.0.1": + "integrity" "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==" + "resolved" "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz" + "version" "0.0.1" + +"isexe@^2.0.0": + "integrity" "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" + "resolved" "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz" + "version" "2.0.0" + +"isobject@^3.0.1": + "integrity" "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==" + "resolved" "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz" + "version" "3.0.1" + +"isstream@~0.1.2": + "integrity" "sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g==" + "resolved" "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz" + "version" "0.1.2" + +"istanbul-lib-coverage@^3.0.0", "istanbul-lib-coverage@^3.2.0": + "integrity" "sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==" + "resolved" "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz" + "version" "3.2.0" + +"istanbul-lib-instrument@^5.0.4", "istanbul-lib-instrument@^5.1.0": + "integrity" "sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==" + "resolved" "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz" + "version" "5.2.1" dependencies: "@babel/core" "^7.12.3" "@babel/parser" "^7.14.7" "@istanbuljs/schema" "^0.1.2" - istanbul-lib-coverage "^3.2.0" - semver "^6.3.0" - -istanbul-lib-report@^3.0.0: - version "3.0.1" - resolved "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz" - integrity sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw== - dependencies: - istanbul-lib-coverage "^3.0.0" - make-dir "^4.0.0" - supports-color "^7.1.0" + "istanbul-lib-coverage" "^3.2.0" + "semver" "^6.3.0" -istanbul-lib-source-maps@^4.0.0: - version "4.0.1" - resolved "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz" - integrity sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw== +"istanbul-lib-report@^3.0.0": + "integrity" "sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==" + "resolved" "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz" + "version" "3.0.1" dependencies: - debug "^4.1.1" - istanbul-lib-coverage "^3.0.0" - source-map "^0.6.1" + "istanbul-lib-coverage" "^3.0.0" + "make-dir" "^4.0.0" + "supports-color" "^7.1.0" -istanbul-reports@^3.1.3: - version "3.1.6" - resolved "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.6.tgz" - integrity sha512-TLgnMkKg3iTDsQ9PbPTdpfAK2DzjF9mqUG7RMgcQl8oFjad8ob4laGxv5XV5U9MAfx8D6tSJiUyuAwzLicaxlg== +"istanbul-lib-source-maps@^4.0.0": + "integrity" "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==" + "resolved" "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz" + "version" "4.0.1" dependencies: - html-escaper "^2.0.0" - istanbul-lib-report "^3.0.0" + "debug" "^4.1.1" + "istanbul-lib-coverage" "^3.0.0" + "source-map" "^0.6.1" -jackspeak@^2.3.5: - version "2.3.6" - resolved "https://registry.yarnpkg.com/jackspeak/-/jackspeak-2.3.6.tgz#647ecc472238aee4b06ac0e461acc21a8c505ca8" - integrity sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ== +"istanbul-reports@^3.1.3": + "integrity" "sha512-TLgnMkKg3iTDsQ9PbPTdpfAK2DzjF9mqUG7RMgcQl8oFjad8ob4laGxv5XV5U9MAfx8D6tSJiUyuAwzLicaxlg==" + "resolved" "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.6.tgz" + "version" "3.1.6" dependencies: - "@isaacs/cliui" "^8.0.2" - optionalDependencies: - "@pkgjs/parseargs" "^0.11.0" + "html-escaper" "^2.0.0" + "istanbul-lib-report" "^3.0.0" -jest-changed-files@^29.5.0: - version "29.5.0" - resolved "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-29.5.0.tgz" - integrity sha512-IFG34IUMUaNBIxjQXF/iu7g6EcdMrGRRxaUSw92I/2g2YC6vCdTltl4nHvt7Ci5nSJwXIkCu8Ka1DKF+X7Z1Ag== +"jest-changed-files@^29.5.0": + "integrity" "sha512-IFG34IUMUaNBIxjQXF/iu7g6EcdMrGRRxaUSw92I/2g2YC6vCdTltl4nHvt7Ci5nSJwXIkCu8Ka1DKF+X7Z1Ag==" + "resolved" "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-29.5.0.tgz" + "version" "29.5.0" dependencies: - execa "^5.0.0" - p-limit "^3.1.0" + "execa" "^5.0.0" + "p-limit" "^3.1.0" -jest-circus@^29.6.2: - version "29.6.2" - resolved "https://registry.npmjs.org/jest-circus/-/jest-circus-29.6.2.tgz" - integrity sha512-G9mN+KOYIUe2sB9kpJkO9Bk18J4dTDArNFPwoZ7WKHKel55eKIS/u2bLthxgojwlf9NLCVQfgzM/WsOVvoC6Fw== +"jest-circus@^29.6.2": + "integrity" "sha512-G9mN+KOYIUe2sB9kpJkO9Bk18J4dTDArNFPwoZ7WKHKel55eKIS/u2bLthxgojwlf9NLCVQfgzM/WsOVvoC6Fw==" + "resolved" "https://registry.npmjs.org/jest-circus/-/jest-circus-29.6.2.tgz" + "version" "29.6.2" dependencies: "@jest/environment" "^29.6.2" "@jest/expect" "^29.6.2" "@jest/test-result" "^29.6.2" "@jest/types" "^29.6.1" "@types/node" "*" - chalk "^4.0.0" - co "^4.6.0" - dedent "^1.0.0" - is-generator-fn "^2.0.0" - jest-each "^29.6.2" - jest-matcher-utils "^29.6.2" - jest-message-util "^29.6.2" - jest-runtime "^29.6.2" - jest-snapshot "^29.6.2" - jest-util "^29.6.2" - p-limit "^3.1.0" - pretty-format "^29.6.2" - pure-rand "^6.0.0" - slash "^3.0.0" - stack-utils "^2.0.3" - -jest-cli@^29.6.2: - version "29.6.2" - resolved "https://registry.npmjs.org/jest-cli/-/jest-cli-29.6.2.tgz" - integrity sha512-TT6O247v6dCEX2UGHGyflMpxhnrL0DNqP2fRTKYm3nJJpCTfXX3GCMQPGFjXDoj0i5/Blp3jriKXFgdfmbYB6Q== + "chalk" "^4.0.0" + "co" "^4.6.0" + "dedent" "^1.0.0" + "is-generator-fn" "^2.0.0" + "jest-each" "^29.6.2" + "jest-matcher-utils" "^29.6.2" + "jest-message-util" "^29.6.2" + "jest-runtime" "^29.6.2" + "jest-snapshot" "^29.6.2" + "jest-util" "^29.6.2" + "p-limit" "^3.1.0" + "pretty-format" "^29.6.2" + "pure-rand" "^6.0.0" + "slash" "^3.0.0" + "stack-utils" "^2.0.3" + +"jest-cli@^29.6.2": + "integrity" "sha512-TT6O247v6dCEX2UGHGyflMpxhnrL0DNqP2fRTKYm3nJJpCTfXX3GCMQPGFjXDoj0i5/Blp3jriKXFgdfmbYB6Q==" + "resolved" "https://registry.npmjs.org/jest-cli/-/jest-cli-29.6.2.tgz" + "version" "29.6.2" dependencies: "@jest/core" "^29.6.2" "@jest/test-result" "^29.6.2" "@jest/types" "^29.6.1" - chalk "^4.0.0" - exit "^0.1.2" - graceful-fs "^4.2.9" - import-local "^3.0.2" - jest-config "^29.6.2" - jest-util "^29.6.2" - jest-validate "^29.6.2" - prompts "^2.0.1" - yargs "^17.3.1" - -jest-config@^29.6.2: - version "29.6.2" - resolved "https://registry.npmjs.org/jest-config/-/jest-config-29.6.2.tgz" - integrity sha512-VxwFOC8gkiJbuodG9CPtMRjBUNZEHxwfQXmIudSTzFWxaci3Qub1ddTRbFNQlD/zUeaifLndh/eDccFX4wCMQw== + "chalk" "^4.0.0" + "exit" "^0.1.2" + "graceful-fs" "^4.2.9" + "import-local" "^3.0.2" + "jest-config" "^29.6.2" + "jest-util" "^29.6.2" + "jest-validate" "^29.6.2" + "prompts" "^2.0.1" + "yargs" "^17.3.1" + +"jest-config@^29.6.2": + "integrity" "sha512-VxwFOC8gkiJbuodG9CPtMRjBUNZEHxwfQXmIudSTzFWxaci3Qub1ddTRbFNQlD/zUeaifLndh/eDccFX4wCMQw==" + "resolved" "https://registry.npmjs.org/jest-config/-/jest-config-29.6.2.tgz" + "version" "29.6.2" dependencies: "@babel/core" "^7.11.6" "@jest/test-sequencer" "^29.6.2" "@jest/types" "^29.6.1" - babel-jest "^29.6.2" - 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.6.2" - jest-environment-node "^29.6.2" - jest-get-type "^29.4.3" - jest-regex-util "^29.4.3" - jest-resolve "^29.6.2" - jest-runner "^29.6.2" - jest-util "^29.6.2" - jest-validate "^29.6.2" - micromatch "^4.0.4" - parse-json "^5.2.0" - pretty-format "^29.6.2" - slash "^3.0.0" - strip-json-comments "^3.1.1" - -jest-diff@^29.6.2: - version "29.6.2" - resolved "https://registry.npmjs.org/jest-diff/-/jest-diff-29.6.2.tgz" - integrity sha512-t+ST7CB9GX5F2xKwhwCf0TAR17uNDiaPTZnVymP9lw0lssa9vG+AFyDZoeIHStU3WowFFwT+ky+er0WVl2yGhA== - dependencies: - chalk "^4.0.0" - diff-sequences "^29.4.3" - jest-get-type "^29.4.3" - pretty-format "^29.6.2" - -jest-docblock@^29.4.3: - version "29.4.3" - resolved "https://registry.npmjs.org/jest-docblock/-/jest-docblock-29.4.3.tgz" - integrity sha512-fzdTftThczeSD9nZ3fzA/4KkHtnmllawWrXO69vtI+L9WjEIuXWs4AmyME7lN5hU7dB0sHhuPfcKofRsUb/2Fg== - dependencies: - detect-newline "^3.0.0" - -jest-each@^29.6.2: - version "29.6.2" - resolved "https://registry.npmjs.org/jest-each/-/jest-each-29.6.2.tgz" - integrity sha512-MsrsqA0Ia99cIpABBc3izS1ZYoYfhIy0NNWqPSE0YXbQjwchyt6B1HD2khzyPe1WiJA7hbxXy77ZoUQxn8UlSw== + "babel-jest" "^29.6.2" + "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.6.2" + "jest-environment-node" "^29.6.2" + "jest-get-type" "^29.4.3" + "jest-regex-util" "^29.4.3" + "jest-resolve" "^29.6.2" + "jest-runner" "^29.6.2" + "jest-util" "^29.6.2" + "jest-validate" "^29.6.2" + "micromatch" "^4.0.4" + "parse-json" "^5.2.0" + "pretty-format" "^29.6.2" + "slash" "^3.0.0" + "strip-json-comments" "^3.1.1" + +"jest-diff@^29.6.2": + "integrity" "sha512-t+ST7CB9GX5F2xKwhwCf0TAR17uNDiaPTZnVymP9lw0lssa9vG+AFyDZoeIHStU3WowFFwT+ky+er0WVl2yGhA==" + "resolved" "https://registry.npmjs.org/jest-diff/-/jest-diff-29.6.2.tgz" + "version" "29.6.2" + dependencies: + "chalk" "^4.0.0" + "diff-sequences" "^29.4.3" + "jest-get-type" "^29.4.3" + "pretty-format" "^29.6.2" + +"jest-docblock@^29.4.3": + "integrity" "sha512-fzdTftThczeSD9nZ3fzA/4KkHtnmllawWrXO69vtI+L9WjEIuXWs4AmyME7lN5hU7dB0sHhuPfcKofRsUb/2Fg==" + "resolved" "https://registry.npmjs.org/jest-docblock/-/jest-docblock-29.4.3.tgz" + "version" "29.4.3" + dependencies: + "detect-newline" "^3.0.0" + +"jest-each@^29.6.2": + "integrity" "sha512-MsrsqA0Ia99cIpABBc3izS1ZYoYfhIy0NNWqPSE0YXbQjwchyt6B1HD2khzyPe1WiJA7hbxXy77ZoUQxn8UlSw==" + "resolved" "https://registry.npmjs.org/jest-each/-/jest-each-29.6.2.tgz" + "version" "29.6.2" dependencies: "@jest/types" "^29.6.1" - chalk "^4.0.0" - jest-get-type "^29.4.3" - jest-util "^29.6.2" - pretty-format "^29.6.2" + "chalk" "^4.0.0" + "jest-get-type" "^29.4.3" + "jest-util" "^29.6.2" + "pretty-format" "^29.6.2" -jest-environment-node@^29.6.2: - version "29.6.2" - resolved "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-29.6.2.tgz" - integrity sha512-YGdFeZ3T9a+/612c5mTQIllvWkddPbYcN2v95ZH24oWMbGA4GGS2XdIF92QMhUhvrjjuQWYgUGW2zawOyH63MQ== +"jest-environment-node@^29.6.2": + "integrity" "sha512-YGdFeZ3T9a+/612c5mTQIllvWkddPbYcN2v95ZH24oWMbGA4GGS2XdIF92QMhUhvrjjuQWYgUGW2zawOyH63MQ==" + "resolved" "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-29.6.2.tgz" + "version" "29.6.2" dependencies: "@jest/environment" "^29.6.2" "@jest/fake-timers" "^29.6.2" "@jest/types" "^29.6.1" "@types/node" "*" - jest-mock "^29.6.2" - jest-util "^29.6.2" + "jest-mock" "^29.6.2" + "jest-util" "^29.6.2" -jest-get-type@^29.4.3: - version "29.4.3" - resolved "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.4.3.tgz" - integrity sha512-J5Xez4nRRMjk8emnTpWrlkyb9pfRQQanDrvWHhsR1+VUfbwxi30eVcZFlcdGInRibU4G5LwHXpI7IRHU0CY+gg== +"jest-get-type@^29.4.3": + "integrity" "sha512-J5Xez4nRRMjk8emnTpWrlkyb9pfRQQanDrvWHhsR1+VUfbwxi30eVcZFlcdGInRibU4G5LwHXpI7IRHU0CY+gg==" + "resolved" "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.4.3.tgz" + "version" "29.4.3" -jest-haste-map@^29.6.2: - version "29.6.2" - resolved "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-29.6.2.tgz" - integrity sha512-+51XleTDAAysvU8rT6AnS1ZJ+WHVNqhj1k6nTvN2PYP+HjU3kqlaKQ1Lnw3NYW3bm2r8vq82X0Z1nDDHZMzHVA== +"jest-haste-map@^29.6.2": + "integrity" "sha512-+51XleTDAAysvU8rT6AnS1ZJ+WHVNqhj1k6nTvN2PYP+HjU3kqlaKQ1Lnw3NYW3bm2r8vq82X0Z1nDDHZMzHVA==" + "resolved" "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-29.6.2.tgz" + "version" "29.6.2" dependencies: "@jest/types" "^29.6.1" "@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.4.3" - jest-util "^29.6.2" - jest-worker "^29.6.2" - micromatch "^4.0.4" - walker "^1.0.8" + "anymatch" "^3.0.3" + "fb-watchman" "^2.0.0" + "graceful-fs" "^4.2.9" + "jest-regex-util" "^29.4.3" + "jest-util" "^29.6.2" + "jest-worker" "^29.6.2" + "micromatch" "^4.0.4" + "walker" "^1.0.8" optionalDependencies: - fsevents "^2.3.2" + "fsevents" "^2.3.2" -jest-leak-detector@^29.6.2: - version "29.6.2" - resolved "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-29.6.2.tgz" - integrity sha512-aNqYhfp5uYEO3tdWMb2bfWv6f0b4I0LOxVRpnRLAeque2uqOVVMLh6khnTcE2qJ5wAKop0HcreM1btoysD6bPQ== +"jest-leak-detector@^29.6.2": + "integrity" "sha512-aNqYhfp5uYEO3tdWMb2bfWv6f0b4I0LOxVRpnRLAeque2uqOVVMLh6khnTcE2qJ5wAKop0HcreM1btoysD6bPQ==" + "resolved" "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-29.6.2.tgz" + "version" "29.6.2" dependencies: - jest-get-type "^29.4.3" - pretty-format "^29.6.2" + "jest-get-type" "^29.4.3" + "pretty-format" "^29.6.2" -jest-matcher-utils@^29.5.0, jest-matcher-utils@^29.6.2: - version "29.6.2" - resolved "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-29.6.2.tgz" - integrity sha512-4LiAk3hSSobtomeIAzFTe+N8kL6z0JtF3n6I4fg29iIW7tt99R7ZcIFW34QkX+DuVrf+CUe6wuVOpm7ZKFJzZQ== +"jest-matcher-utils@^29.5.0", "jest-matcher-utils@^29.6.2": + "integrity" "sha512-4LiAk3hSSobtomeIAzFTe+N8kL6z0JtF3n6I4fg29iIW7tt99R7ZcIFW34QkX+DuVrf+CUe6wuVOpm7ZKFJzZQ==" + "resolved" "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-29.6.2.tgz" + "version" "29.6.2" dependencies: - chalk "^4.0.0" - jest-diff "^29.6.2" - jest-get-type "^29.4.3" - pretty-format "^29.6.2" + "chalk" "^4.0.0" + "jest-diff" "^29.6.2" + "jest-get-type" "^29.4.3" + "pretty-format" "^29.6.2" -jest-message-util@^29.6.2: - version "29.6.2" - resolved "https://registry.npmjs.org/jest-message-util/-/jest-message-util-29.6.2.tgz" - integrity sha512-vnIGYEjoPSuRqV8W9t+Wow95SDp6KPX2Uf7EoeG9G99J2OVh7OSwpS4B6J0NfpEIpfkBNHlBZpA2rblEuEFhZQ== +"jest-message-util@^29.6.2": + "integrity" "sha512-vnIGYEjoPSuRqV8W9t+Wow95SDp6KPX2Uf7EoeG9G99J2OVh7OSwpS4B6J0NfpEIpfkBNHlBZpA2rblEuEFhZQ==" + "resolved" "https://registry.npmjs.org/jest-message-util/-/jest-message-util-29.6.2.tgz" + "version" "29.6.2" dependencies: "@babel/code-frame" "^7.12.13" "@jest/types" "^29.6.1" "@types/stack-utils" "^2.0.0" - chalk "^4.0.0" - graceful-fs "^4.2.9" - micromatch "^4.0.4" - pretty-format "^29.6.2" - slash "^3.0.0" - stack-utils "^2.0.3" - -jest-mock@^29.6.2: - version "29.6.2" - resolved "https://registry.npmjs.org/jest-mock/-/jest-mock-29.6.2.tgz" - integrity sha512-hoSv3lb3byzdKfwqCuT6uTscan471GUECqgNYykg6ob0yiAw3zYc7OrPnI9Qv8Wwoa4lC7AZ9hyS4AiIx5U2zg== + "chalk" "^4.0.0" + "graceful-fs" "^4.2.9" + "micromatch" "^4.0.4" + "pretty-format" "^29.6.2" + "slash" "^3.0.0" + "stack-utils" "^2.0.3" + +"jest-mock@^29.6.2": + "integrity" "sha512-hoSv3lb3byzdKfwqCuT6uTscan471GUECqgNYykg6ob0yiAw3zYc7OrPnI9Qv8Wwoa4lC7AZ9hyS4AiIx5U2zg==" + "resolved" "https://registry.npmjs.org/jest-mock/-/jest-mock-29.6.2.tgz" + "version" "29.6.2" dependencies: "@jest/types" "^29.6.1" "@types/node" "*" - jest-util "^29.6.2" - -jest-pnp-resolver@^1.2.2: - version "1.2.3" - resolved "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.3.tgz" - integrity sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w== - -jest-regex-util@^29.4.3: - version "29.4.3" - resolved "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-29.4.3.tgz" - integrity sha512-O4FglZaMmWXbGHSQInfXewIsd1LMn9p3ZXB/6r4FOkyhX2/iP/soMG98jGvk/A3HAN78+5VWcBGO0BJAPRh4kg== - -jest-resolve-dependencies@^29.6.2: - version "29.6.2" - resolved "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-29.6.2.tgz" - integrity sha512-LGqjDWxg2fuQQm7ypDxduLu/m4+4Lb4gczc13v51VMZbVP5tSBILqVx8qfWcsdP8f0G7aIqByIALDB0R93yL+w== - dependencies: - jest-regex-util "^29.4.3" - jest-snapshot "^29.6.2" - -jest-resolve@^29.6.2: - version "29.6.2" - resolved "https://registry.npmjs.org/jest-resolve/-/jest-resolve-29.6.2.tgz" - integrity sha512-G/iQUvZWI5e3SMFssc4ug4dH0aZiZpsDq9o1PtXTV1210Ztyb2+w+ZgQkB3iOiC5SmAEzJBOHWz6Hvrd+QnNPw== - dependencies: - chalk "^4.0.0" - graceful-fs "^4.2.9" - jest-haste-map "^29.6.2" - jest-pnp-resolver "^1.2.2" - jest-util "^29.6.2" - jest-validate "^29.6.2" - resolve "^1.20.0" - resolve.exports "^2.0.0" - slash "^3.0.0" - -jest-runner@^29.6.2: - version "29.6.2" - resolved "https://registry.npmjs.org/jest-runner/-/jest-runner-29.6.2.tgz" - integrity sha512-wXOT/a0EspYgfMiYHxwGLPCZfC0c38MivAlb2lMEAlwHINKemrttu1uSbcGbfDV31sFaPWnWJPmb2qXM8pqZ4w== + "jest-util" "^29.6.2" + +"jest-pnp-resolver@^1.2.2": + "integrity" "sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==" + "resolved" "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.3.tgz" + "version" "1.2.3" + +"jest-regex-util@^29.4.3": + "integrity" "sha512-O4FglZaMmWXbGHSQInfXewIsd1LMn9p3ZXB/6r4FOkyhX2/iP/soMG98jGvk/A3HAN78+5VWcBGO0BJAPRh4kg==" + "resolved" "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-29.4.3.tgz" + "version" "29.4.3" + +"jest-resolve-dependencies@^29.6.2": + "integrity" "sha512-LGqjDWxg2fuQQm7ypDxduLu/m4+4Lb4gczc13v51VMZbVP5tSBILqVx8qfWcsdP8f0G7aIqByIALDB0R93yL+w==" + "resolved" "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-29.6.2.tgz" + "version" "29.6.2" + dependencies: + "jest-regex-util" "^29.4.3" + "jest-snapshot" "^29.6.2" + +"jest-resolve@*", "jest-resolve@^29.6.2": + "integrity" "sha512-G/iQUvZWI5e3SMFssc4ug4dH0aZiZpsDq9o1PtXTV1210Ztyb2+w+ZgQkB3iOiC5SmAEzJBOHWz6Hvrd+QnNPw==" + "resolved" "https://registry.npmjs.org/jest-resolve/-/jest-resolve-29.6.2.tgz" + "version" "29.6.2" + dependencies: + "chalk" "^4.0.0" + "graceful-fs" "^4.2.9" + "jest-haste-map" "^29.6.2" + "jest-pnp-resolver" "^1.2.2" + "jest-util" "^29.6.2" + "jest-validate" "^29.6.2" + "resolve" "^1.20.0" + "resolve.exports" "^2.0.0" + "slash" "^3.0.0" + +"jest-runner@^29.6.2": + "integrity" "sha512-wXOT/a0EspYgfMiYHxwGLPCZfC0c38MivAlb2lMEAlwHINKemrttu1uSbcGbfDV31sFaPWnWJPmb2qXM8pqZ4w==" + "resolved" "https://registry.npmjs.org/jest-runner/-/jest-runner-29.6.2.tgz" + "version" "29.6.2" dependencies: "@jest/console" "^29.6.2" "@jest/environment" "^29.6.2" @@ -3020,26 +3009,26 @@ jest-runner@^29.6.2: "@jest/transform" "^29.6.2" "@jest/types" "^29.6.1" "@types/node" "*" - chalk "^4.0.0" - emittery "^0.13.1" - graceful-fs "^4.2.9" - jest-docblock "^29.4.3" - jest-environment-node "^29.6.2" - jest-haste-map "^29.6.2" - jest-leak-detector "^29.6.2" - jest-message-util "^29.6.2" - jest-resolve "^29.6.2" - jest-runtime "^29.6.2" - jest-util "^29.6.2" - jest-watcher "^29.6.2" - jest-worker "^29.6.2" - p-limit "^3.1.0" - source-map-support "0.5.13" - -jest-runtime@^29.6.2: - version "29.6.2" - resolved "https://registry.npmjs.org/jest-runtime/-/jest-runtime-29.6.2.tgz" - integrity sha512-2X9dqK768KufGJyIeLmIzToDmsN0m7Iek8QNxRSI/2+iPFYHF0jTwlO3ftn7gdKd98G/VQw9XJCk77rbTGZnJg== + "chalk" "^4.0.0" + "emittery" "^0.13.1" + "graceful-fs" "^4.2.9" + "jest-docblock" "^29.4.3" + "jest-environment-node" "^29.6.2" + "jest-haste-map" "^29.6.2" + "jest-leak-detector" "^29.6.2" + "jest-message-util" "^29.6.2" + "jest-resolve" "^29.6.2" + "jest-runtime" "^29.6.2" + "jest-util" "^29.6.2" + "jest-watcher" "^29.6.2" + "jest-worker" "^29.6.2" + "p-limit" "^3.1.0" + "source-map-support" "0.5.13" + +"jest-runtime@^29.6.2": + "integrity" "sha512-2X9dqK768KufGJyIeLmIzToDmsN0m7Iek8QNxRSI/2+iPFYHF0jTwlO3ftn7gdKd98G/VQw9XJCk77rbTGZnJg==" + "resolved" "https://registry.npmjs.org/jest-runtime/-/jest-runtime-29.6.2.tgz" + "version" "29.6.2" dependencies: "@jest/environment" "^29.6.2" "@jest/fake-timers" "^29.6.2" @@ -3049,25 +3038,25 @@ jest-runtime@^29.6.2: "@jest/transform" "^29.6.2" "@jest/types" "^29.6.1" "@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.6.2" - jest-message-util "^29.6.2" - jest-mock "^29.6.2" - jest-regex-util "^29.4.3" - jest-resolve "^29.6.2" - jest-snapshot "^29.6.2" - jest-util "^29.6.2" - slash "^3.0.0" - strip-bom "^4.0.0" - -jest-snapshot@^29.6.2: - version "29.6.2" - resolved "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-29.6.2.tgz" - integrity sha512-1OdjqvqmRdGNvWXr/YZHuyhh5DeaLp1p/F8Tht/MrMw4Kr1Uu/j4lRG+iKl1DAqUJDWxtQBMk41Lnf/JETYBRA== + "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.6.2" + "jest-message-util" "^29.6.2" + "jest-mock" "^29.6.2" + "jest-regex-util" "^29.4.3" + "jest-resolve" "^29.6.2" + "jest-snapshot" "^29.6.2" + "jest-util" "^29.6.2" + "slash" "^3.0.0" + "strip-bom" "^4.0.0" + +"jest-snapshot@^29.6.2": + "integrity" "sha512-1OdjqvqmRdGNvWXr/YZHuyhh5DeaLp1p/F8Tht/MrMw4Kr1Uu/j4lRG+iKl1DAqUJDWxtQBMk41Lnf/JETYBRA==" + "resolved" "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-29.6.2.tgz" + "version" "29.6.2" dependencies: "@babel/core" "^7.11.6" "@babel/generator" "^7.7.2" @@ -3077,2058 +3066,2001 @@ jest-snapshot@^29.6.2: "@jest/expect-utils" "^29.6.2" "@jest/transform" "^29.6.2" "@jest/types" "^29.6.1" - babel-preset-current-node-syntax "^1.0.0" - chalk "^4.0.0" - expect "^29.6.2" - graceful-fs "^4.2.9" - jest-diff "^29.6.2" - jest-get-type "^29.4.3" - jest-matcher-utils "^29.6.2" - jest-message-util "^29.6.2" - jest-util "^29.6.2" - natural-compare "^1.4.0" - pretty-format "^29.6.2" - semver "^7.5.3" - -jest-util@^29.0.0, jest-util@^29.6.2: - version "29.6.2" - resolved "https://registry.npmjs.org/jest-util/-/jest-util-29.6.2.tgz" - integrity sha512-3eX1qb6L88lJNCFlEADKOkjpXJQyZRiavX1INZ4tRnrBVr2COd3RgcTLyUiEXMNBlDU/cgYq6taUS0fExrWW4w== + "babel-preset-current-node-syntax" "^1.0.0" + "chalk" "^4.0.0" + "expect" "^29.6.2" + "graceful-fs" "^4.2.9" + "jest-diff" "^29.6.2" + "jest-get-type" "^29.4.3" + "jest-matcher-utils" "^29.6.2" + "jest-message-util" "^29.6.2" + "jest-util" "^29.6.2" + "natural-compare" "^1.4.0" + "pretty-format" "^29.6.2" + "semver" "^7.5.3" + +"jest-util@^29.0.0", "jest-util@^29.6.2": + "integrity" "sha512-3eX1qb6L88lJNCFlEADKOkjpXJQyZRiavX1INZ4tRnrBVr2COd3RgcTLyUiEXMNBlDU/cgYq6taUS0fExrWW4w==" + "resolved" "https://registry.npmjs.org/jest-util/-/jest-util-29.6.2.tgz" + "version" "29.6.2" dependencies: "@jest/types" "^29.6.1" "@types/node" "*" - chalk "^4.0.0" - ci-info "^3.2.0" - graceful-fs "^4.2.9" - picomatch "^2.2.3" + "chalk" "^4.0.0" + "ci-info" "^3.2.0" + "graceful-fs" "^4.2.9" + "picomatch" "^2.2.3" -jest-validate@^29.6.2: - version "29.6.2" - resolved "https://registry.npmjs.org/jest-validate/-/jest-validate-29.6.2.tgz" - integrity sha512-vGz0yMN5fUFRRbpJDPwxMpgSXW1LDKROHfBopAvDcmD6s+B/s8WJrwi+4bfH4SdInBA5C3P3BI19dBtKzx1Arg== +"jest-validate@^29.6.2": + "integrity" "sha512-vGz0yMN5fUFRRbpJDPwxMpgSXW1LDKROHfBopAvDcmD6s+B/s8WJrwi+4bfH4SdInBA5C3P3BI19dBtKzx1Arg==" + "resolved" "https://registry.npmjs.org/jest-validate/-/jest-validate-29.6.2.tgz" + "version" "29.6.2" dependencies: "@jest/types" "^29.6.1" - camelcase "^6.2.0" - chalk "^4.0.0" - jest-get-type "^29.4.3" - leven "^3.1.0" - pretty-format "^29.6.2" + "camelcase" "^6.2.0" + "chalk" "^4.0.0" + "jest-get-type" "^29.4.3" + "leven" "^3.1.0" + "pretty-format" "^29.6.2" -jest-watcher@^29.6.2: - version "29.6.2" - resolved "https://registry.npmjs.org/jest-watcher/-/jest-watcher-29.6.2.tgz" - integrity sha512-GZitlqkMkhkefjfN/p3SJjrDaxPflqxEAv3/ik10OirZqJGYH5rPiIsgVcfof0Tdqg3shQGdEIxDBx+B4tuLzA== +"jest-watcher@^29.6.2": + "integrity" "sha512-GZitlqkMkhkefjfN/p3SJjrDaxPflqxEAv3/ik10OirZqJGYH5rPiIsgVcfof0Tdqg3shQGdEIxDBx+B4tuLzA==" + "resolved" "https://registry.npmjs.org/jest-watcher/-/jest-watcher-29.6.2.tgz" + "version" "29.6.2" dependencies: "@jest/test-result" "^29.6.2" "@jest/types" "^29.6.1" "@types/node" "*" - ansi-escapes "^4.2.1" - chalk "^4.0.0" - emittery "^0.13.1" - jest-util "^29.6.2" - string-length "^4.0.1" + "ansi-escapes" "^4.2.1" + "chalk" "^4.0.0" + "emittery" "^0.13.1" + "jest-util" "^29.6.2" + "string-length" "^4.0.1" -jest-worker@^27.4.5: - version "27.5.1" - resolved "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz" - integrity sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg== +"jest-worker@^27.4.5": + "integrity" "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==" + "resolved" "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz" + "version" "27.5.1" dependencies: "@types/node" "*" - merge-stream "^2.0.0" - supports-color "^8.0.0" + "merge-stream" "^2.0.0" + "supports-color" "^8.0.0" -jest-worker@^29.6.2: - version "29.6.2" - resolved "https://registry.npmjs.org/jest-worker/-/jest-worker-29.6.2.tgz" - integrity sha512-l3ccBOabTdkng8I/ORCkADz4eSMKejTYv1vB/Z83UiubqhC1oQ5Li6dWCyqOIvSifGjUBxuvxvlm6KGK2DtuAQ== +"jest-worker@^29.6.2": + "integrity" "sha512-l3ccBOabTdkng8I/ORCkADz4eSMKejTYv1vB/Z83UiubqhC1oQ5Li6dWCyqOIvSifGjUBxuvxvlm6KGK2DtuAQ==" + "resolved" "https://registry.npmjs.org/jest-worker/-/jest-worker-29.6.2.tgz" + "version" "29.6.2" dependencies: "@types/node" "*" - jest-util "^29.6.2" - merge-stream "^2.0.0" - supports-color "^8.0.0" + "jest-util" "^29.6.2" + "merge-stream" "^2.0.0" + "supports-color" "^8.0.0" -jest@^29.4.2: - version "29.6.2" - resolved "https://registry.npmjs.org/jest/-/jest-29.6.2.tgz" - integrity sha512-8eQg2mqFbaP7CwfsTpCxQ+sHzw1WuNWL5UUvjnWP4hx2riGz9fPSzYOaU5q8/GqWn1TfgZIVTqYJygbGbWAANg== +"jest@^29.0.0", "jest@^29.4.2": + "integrity" "sha512-8eQg2mqFbaP7CwfsTpCxQ+sHzw1WuNWL5UUvjnWP4hx2riGz9fPSzYOaU5q8/GqWn1TfgZIVTqYJygbGbWAANg==" + "resolved" "https://registry.npmjs.org/jest/-/jest-29.6.2.tgz" + "version" "29.6.2" dependencies: "@jest/core" "^29.6.2" "@jest/types" "^29.6.1" - import-local "^3.0.2" - jest-cli "^29.6.2" - -js-tokens@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz" - integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== - -js-yaml@^3.13.1: - version "3.14.1" - resolved "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz" - integrity sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g== - dependencies: - argparse "^1.0.7" - esprima "^4.0.0" - -js-yaml@^4.1.0: - version "4.1.0" - resolved "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz" - integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA== - dependencies: - argparse "^2.0.1" - -jsbn@~0.1.0: - version "0.1.1" - resolved "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz" - integrity sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg== - -jsesc@^2.5.1: - version "2.5.2" - resolved "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz" - integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA== - -json-parse-even-better-errors@^2.3.0, json-parse-even-better-errors@^2.3.1: - version "2.3.1" - resolved "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz" - integrity sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w== - -json-schema-traverse@^0.4.1: - version "0.4.1" - resolved "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz" - integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== - -json-schema@0.4.0: - version "0.4.0" - resolved "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz" - integrity sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA== - -json-stable-stringify-without-jsonify@^1.0.1: - version "1.0.1" - resolved "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz" - integrity sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw== - -json-stringify-safe@~5.0.1: - version "5.0.1" - resolved "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz" - integrity sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA== - -json5@^2.2.2, json5@^2.2.3: - version "2.2.3" - resolved "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz" - integrity sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg== - -jsonc-parser@^3.2.0: - version "3.2.0" - resolved "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.2.0.tgz" - integrity sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w== - -jsonfile@^6.0.1: - version "6.1.0" - resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-6.1.0.tgz#bc55b2634793c679ec6403094eb13698a6ec0aae" - integrity sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ== - dependencies: - universalify "^2.0.0" + "import-local" "^3.0.2" + "jest-cli" "^29.6.2" + +"js-tokens@^4.0.0": + "integrity" "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" + "resolved" "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz" + "version" "4.0.0" + +"js-yaml@^3.13.1": + "integrity" "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==" + "resolved" "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz" + "version" "3.14.1" + dependencies: + "argparse" "^1.0.7" + "esprima" "^4.0.0" + +"js-yaml@^4.1.0": + "integrity" "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==" + "resolved" "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz" + "version" "4.1.0" + dependencies: + "argparse" "^2.0.1" + +"jsbn@~0.1.0": + "integrity" "sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==" + "resolved" "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz" + "version" "0.1.1" + +"jsesc@^2.5.1": + "integrity" "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==" + "resolved" "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz" + "version" "2.5.2" + +"json-parse-even-better-errors@^2.3.0", "json-parse-even-better-errors@^2.3.1": + "integrity" "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==" + "resolved" "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz" + "version" "2.3.1" + +"json-schema-traverse@^0.4.1": + "integrity" "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" + "resolved" "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz" + "version" "0.4.1" + +"json-schema@0.4.0": + "integrity" "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==" + "resolved" "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz" + "version" "0.4.0" + +"json-stable-stringify-without-jsonify@^1.0.1": + "integrity" "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==" + "resolved" "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz" + "version" "1.0.1" + +"json-stringify-safe@~5.0.1": + "integrity" "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==" + "resolved" "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz" + "version" "5.0.1" + +"json5@^2.2.2", "json5@^2.2.3": + "integrity" "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==" + "resolved" "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz" + "version" "2.2.3" + +"jsonc-parser@^3.2.0": + "integrity" "sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w==" + "resolved" "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.2.0.tgz" + "version" "3.2.0" + +"jsonfile@^6.0.1": + "integrity" "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==" + "resolved" "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz" + "version" "6.1.0" + dependencies: + "universalify" "^2.0.0" optionalDependencies: - graceful-fs "^4.1.6" - -jsonist@~2.1.0: - version "2.1.2" - resolved "https://registry.npmjs.org/jsonist/-/jsonist-2.1.2.tgz" - integrity sha512-8yqmWJAC2VaYoSKQAbsfgCpGY5o/1etWzx6ZxaZrC4iGaHrHUZEo+a2MyF8w+2uTavTlHdLWaZUoR19UfBstxQ== - dependencies: - bl "~3.0.0" - hyperquest "~2.1.3" - json-stringify-safe "~5.0.1" - xtend "~4.0.1" - -jsprim@^1.2.2: - version "1.4.2" - resolved "https://registry.npmjs.org/jsprim/-/jsprim-1.4.2.tgz" - integrity sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw== - dependencies: - assert-plus "1.0.0" - extsprintf "1.3.0" - json-schema "0.4.0" - verror "1.10.0" - -kind-of@^6.0.2: - version "6.0.3" - resolved "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz" - integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw== - -kleur@^3.0.3: - version "3.0.3" - resolved "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz" - integrity sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w== - -leven@^3.1.0: - version "3.1.0" - resolved "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz" - integrity sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A== - -levn@^0.4.1: - version "0.4.1" - resolved "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz" - integrity sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ== - dependencies: - prelude-ls "^1.2.1" - type-check "~0.4.0" - -lines-and-columns@^1.1.6: - version "1.2.4" - resolved "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz" - integrity sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg== - -loader-runner@^4.2.0: - version "4.3.0" - resolved "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz" - integrity sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg== - -locate-path@^5.0.0: - version "5.0.0" - resolved "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz" - integrity sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g== - dependencies: - p-locate "^4.1.0" - -locate-path@^6.0.0: - version "6.0.0" - resolved "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz" - integrity sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw== - dependencies: - p-locate "^5.0.0" - -lodash.isplainobject@^4.0.6: - version "4.0.6" - resolved "https://registry.yarnpkg.com/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz#7c526a52d89b45c45cc690b88163be0497f550cb" - integrity sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA== - -lodash.memoize@4.x: - version "4.1.2" - resolved "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz" - integrity sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag== - -lodash.merge@^4.6.2: - version "4.6.2" - resolved "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz" - integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ== - -lodash.pad@^4.1.0: - version "4.5.1" - resolved "https://registry.npmjs.org/lodash.pad/-/lodash.pad-4.5.1.tgz" - integrity sha512-mvUHifnLqM+03YNzeTBS1/Gr6JRFjd3rRx88FHWUvamVaT9k2O/kXha3yBSOwB9/DTQrSTLJNHvLBBt2FdX7Mg== - -lodash.padend@^4.1.0: - version "4.6.1" - resolved "https://registry.npmjs.org/lodash.padend/-/lodash.padend-4.6.1.tgz" - integrity sha512-sOQs2aqGpbl27tmCS1QNZA09Uqp01ZzWfDUoD+xzTii0E7dSQfRKcRetFwa+uXaxaqL+TKm7CgD2JdKP7aZBSw== - -lodash.padstart@^4.1.0: - version "4.6.1" - resolved "https://registry.npmjs.org/lodash.padstart/-/lodash.padstart-4.6.1.tgz" - integrity sha512-sW73O6S8+Tg66eY56DBk85aQzzUJDtpoXFBgELMd5P/SotAguo+1kYO6RuYgXxA4HJH3LFTFPASX6ET6bjfriw== - -lodash.uniq@^4.5.0: - version "4.5.0" - resolved "https://registry.yarnpkg.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773" - integrity sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ== - -lru-cache@^5.1.1: - version "5.1.1" - resolved "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz" - integrity sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w== - dependencies: - yallist "^3.0.2" - -lru-cache@^6.0.0: - version "6.0.0" - resolved "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz" - integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== - dependencies: - yallist "^4.0.0" - -lru-cache@^7.7.1: - version "7.18.3" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-7.18.3.tgz#f793896e0fd0e954a59dfdd82f0773808df6aa89" - integrity sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA== - -"lru-cache@^9.1.1 || ^10.0.0": - version "10.0.1" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-10.0.1.tgz#0a3be479df549cca0e5d693ac402ff19537a6b7a" - integrity sha512-IJ4uwUTi2qCccrioU6g9g/5rvvVl13bsdczUUcqbciD9iLr095yj8DQKdObriEvuNSx325N1rV1O0sJFszx75g== - -lunr@^2.3.9: - version "2.3.9" - resolved "https://registry.npmjs.org/lunr/-/lunr-2.3.9.tgz" - integrity sha512-zTU3DaZaF3Rt9rhN3uBMGQD3dD2/vFQqnvZCDv4dl5iOzq2IZQqTxu90r4E5J+nP70J3ilqVCrbho2eWaeW8Ow== - -make-dir@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz" - integrity sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw== - dependencies: - semver "^7.5.3" - -make-error@1.x: - version "1.3.6" - resolved "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz" - integrity sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw== - -make-fetch-happen@^11.0.3: - version "11.1.1" - resolved "https://registry.yarnpkg.com/make-fetch-happen/-/make-fetch-happen-11.1.1.tgz#85ceb98079584a9523d4bf71d32996e7e208549f" - integrity sha512-rLWS7GCSTcEujjVBs2YqG7Y4643u8ucvCJeSRqiLYhesrDuzeuFIk37xREzAsfQaqzl8b9rNCE4m6J8tvX4Q8w== - dependencies: - agentkeepalive "^4.2.1" - cacache "^17.0.0" - http-cache-semantics "^4.1.1" - http-proxy-agent "^5.0.0" - https-proxy-agent "^5.0.0" - is-lambda "^1.0.1" - lru-cache "^7.7.1" - minipass "^5.0.0" - minipass-fetch "^3.0.0" - minipass-flush "^1.0.5" - minipass-pipeline "^1.2.4" - negotiator "^0.6.3" - promise-retry "^2.0.1" - socks-proxy-agent "^7.0.0" - ssri "^10.0.0" - -makeerror@1.0.12: - version "1.0.12" - resolved "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz" - integrity sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg== - dependencies: - tmpl "1.0.5" - -marked@^4.3.0: - version "4.3.0" - resolved "https://registry.npmjs.org/marked/-/marked-4.3.0.tgz" - integrity sha512-PRsaiG84bK+AMvxziE/lCFss8juXjNaWzVbN5tXAm4XjeaS9NAHhop+PjQxz2A9h8Q4M/xGmzP8vqNwy6JeK0A== - -memory-stream@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/memory-stream/-/memory-stream-1.0.0.tgz#481dfd259ccdf57b03ec2c9632960044180e73c2" - integrity sha512-Wm13VcsPIMdG96dzILfij09PvuS3APtcKNh7M28FsCA/w6+1mjR7hhPmfFNoilX9xU7wTdhsH5lJAm6XNzdtww== - dependencies: - readable-stream "^3.4.0" - -merge-stream@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz" - integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== - -merge2@^1.3.0, merge2@^1.4.1: - version "1.4.1" - resolved "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz" - integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== - -micromatch@^4.0.4: - version "4.0.5" - resolved "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz" - integrity sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA== - dependencies: - braces "^3.0.2" - picomatch "^2.3.1" - -mime-db@1.52.0: - version "1.52.0" - resolved "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz" - integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== - -mime-types@^2.1.12, mime-types@^2.1.27, mime-types@~2.1.19: - version "2.1.35" - resolved "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz" - integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== - dependencies: - mime-db "1.52.0" - -mimic-fn@^2.1.0: - version "2.1.0" - resolved "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz" - integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== - -mimic-response@^1.0.0: - version "1.0.1" - resolved "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz" - integrity sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ== - -minimatch@3, 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.npmjs.org/minimatch/-/minimatch-3.1.2.tgz" - integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== - dependencies: - brace-expansion "^1.1.7" - -minimatch@^9.0.0, minimatch@^9.0.1: - version "9.0.3" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-9.0.3.tgz#a6e00c3de44c3a542bfaae70abfc22420a6da825" - integrity sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg== - dependencies: - brace-expansion "^2.0.1" - -minimist@^1.2.0, minimist@^1.2.3, minimist@^1.2.5, minimist@^1.2.6, minimist@^1.2.8: - version "1.2.8" - resolved "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz" - integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA== - -minipass-collect@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/minipass-collect/-/minipass-collect-1.0.2.tgz#22b813bf745dc6edba2576b940022ad6edc8c617" - integrity sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA== - dependencies: - minipass "^3.0.0" - -minipass-fetch@^3.0.0: - version "3.0.4" - resolved "https://registry.yarnpkg.com/minipass-fetch/-/minipass-fetch-3.0.4.tgz#4d4d9b9f34053af6c6e597a64be8e66e42bf45b7" - integrity sha512-jHAqnA728uUpIaFm7NWsCnqKT6UqZz7GcI/bDpPATuwYyKwJwW0remxSCxUlKiEty+eopHGa3oc8WxgQ1FFJqg== - dependencies: - minipass "^7.0.3" - minipass-sized "^1.0.3" - minizlib "^2.1.2" + "graceful-fs" "^4.1.6" + +"jsonist@~2.1.0": + "integrity" "sha512-8yqmWJAC2VaYoSKQAbsfgCpGY5o/1etWzx6ZxaZrC4iGaHrHUZEo+a2MyF8w+2uTavTlHdLWaZUoR19UfBstxQ==" + "resolved" "https://registry.npmjs.org/jsonist/-/jsonist-2.1.2.tgz" + "version" "2.1.2" + dependencies: + "bl" "~3.0.0" + "hyperquest" "~2.1.3" + "json-stringify-safe" "~5.0.1" + "xtend" "~4.0.1" + +"jsprim@^1.2.2": + "integrity" "sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw==" + "resolved" "https://registry.npmjs.org/jsprim/-/jsprim-1.4.2.tgz" + "version" "1.4.2" + dependencies: + "assert-plus" "1.0.0" + "extsprintf" "1.3.0" + "json-schema" "0.4.0" + "verror" "1.10.0" + +"kind-of@^6.0.2": + "integrity" "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==" + "resolved" "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz" + "version" "6.0.3" + +"kleur@^3.0.3": + "integrity" "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==" + "resolved" "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz" + "version" "3.0.3" + +"leven@^3.1.0": + "integrity" "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==" + "resolved" "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz" + "version" "3.1.0" + +"levn@^0.4.1": + "integrity" "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==" + "resolved" "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz" + "version" "0.4.1" + dependencies: + "prelude-ls" "^1.2.1" + "type-check" "~0.4.0" + +"lines-and-columns@^1.1.6": + "integrity" "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==" + "resolved" "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz" + "version" "1.2.4" + +"loader-runner@^4.2.0": + "integrity" "sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==" + "resolved" "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz" + "version" "4.3.0" + +"locate-path@^5.0.0": + "integrity" "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==" + "resolved" "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz" + "version" "5.0.0" + dependencies: + "p-locate" "^4.1.0" + +"locate-path@^6.0.0": + "integrity" "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==" + "resolved" "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz" + "version" "6.0.0" + dependencies: + "p-locate" "^5.0.0" + +"lodash.isplainobject@^4.0.6": + "integrity" "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==" + "resolved" "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz" + "version" "4.0.6" + +"lodash.memoize@4.x": + "integrity" "sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==" + "resolved" "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz" + "version" "4.1.2" + +"lodash.merge@^4.6.2": + "integrity" "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==" + "resolved" "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz" + "version" "4.6.2" + +"lodash.pad@^4.1.0": + "integrity" "sha512-mvUHifnLqM+03YNzeTBS1/Gr6JRFjd3rRx88FHWUvamVaT9k2O/kXha3yBSOwB9/DTQrSTLJNHvLBBt2FdX7Mg==" + "resolved" "https://registry.npmjs.org/lodash.pad/-/lodash.pad-4.5.1.tgz" + "version" "4.5.1" + +"lodash.padend@^4.1.0": + "integrity" "sha512-sOQs2aqGpbl27tmCS1QNZA09Uqp01ZzWfDUoD+xzTii0E7dSQfRKcRetFwa+uXaxaqL+TKm7CgD2JdKP7aZBSw==" + "resolved" "https://registry.npmjs.org/lodash.padend/-/lodash.padend-4.6.1.tgz" + "version" "4.6.1" + +"lodash.padstart@^4.1.0": + "integrity" "sha512-sW73O6S8+Tg66eY56DBk85aQzzUJDtpoXFBgELMd5P/SotAguo+1kYO6RuYgXxA4HJH3LFTFPASX6ET6bjfriw==" + "resolved" "https://registry.npmjs.org/lodash.padstart/-/lodash.padstart-4.6.1.tgz" + "version" "4.6.1" + +"lodash.uniq@^4.5.0": + "integrity" "sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==" + "resolved" "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz" + "version" "4.5.0" + +"lru-cache@^5.1.1": + "integrity" "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==" + "resolved" "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz" + "version" "5.1.1" + dependencies: + "yallist" "^3.0.2" + +"lru-cache@^6.0.0": + "integrity" "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==" + "resolved" "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz" + "version" "6.0.0" + dependencies: + "yallist" "^4.0.0" + +"lru-cache@^7.7.1": + "integrity" "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==" + "resolved" "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz" + "version" "7.18.3" + +"lunr@^2.3.9": + "integrity" "sha512-zTU3DaZaF3Rt9rhN3uBMGQD3dD2/vFQqnvZCDv4dl5iOzq2IZQqTxu90r4E5J+nP70J3ilqVCrbho2eWaeW8Ow==" + "resolved" "https://registry.npmjs.org/lunr/-/lunr-2.3.9.tgz" + "version" "2.3.9" + +"make-dir@^4.0.0": + "integrity" "sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==" + "resolved" "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz" + "version" "4.0.0" + dependencies: + "semver" "^7.5.3" + +"make-error@1.x": + "integrity" "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==" + "resolved" "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz" + "version" "1.3.6" + +"make-fetch-happen@^10.0.3": + "integrity" "sha512-NgOPbRiaQM10DYXvN3/hhGVI2M5MtITFryzBGxHM5p4wnFxsVCbxkrBrDsk+EZ5OB4jEOT7AjDxtdF+KVEFT7w==" + "resolved" "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-10.2.1.tgz" + "version" "10.2.1" + dependencies: + "agentkeepalive" "^4.2.1" + "cacache" "^16.1.0" + "http-cache-semantics" "^4.1.0" + "http-proxy-agent" "^5.0.0" + "https-proxy-agent" "^5.0.0" + "is-lambda" "^1.0.1" + "lru-cache" "^7.7.1" + "minipass" "^3.1.6" + "minipass-collect" "^1.0.2" + "minipass-fetch" "^2.0.3" + "minipass-flush" "^1.0.5" + "minipass-pipeline" "^1.2.4" + "negotiator" "^0.6.3" + "promise-retry" "^2.0.1" + "socks-proxy-agent" "^7.0.0" + "ssri" "^9.0.0" + +"makeerror@1.0.12": + "integrity" "sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==" + "resolved" "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz" + "version" "1.0.12" + dependencies: + "tmpl" "1.0.5" + +"marked@^4.3.0": + "integrity" "sha512-PRsaiG84bK+AMvxziE/lCFss8juXjNaWzVbN5tXAm4XjeaS9NAHhop+PjQxz2A9h8Q4M/xGmzP8vqNwy6JeK0A==" + "resolved" "https://registry.npmjs.org/marked/-/marked-4.3.0.tgz" + "version" "4.3.0" + +"memory-stream@^1.0.0": + "integrity" "sha512-Wm13VcsPIMdG96dzILfij09PvuS3APtcKNh7M28FsCA/w6+1mjR7hhPmfFNoilX9xU7wTdhsH5lJAm6XNzdtww==" + "resolved" "https://registry.npmjs.org/memory-stream/-/memory-stream-1.0.0.tgz" + "version" "1.0.0" + dependencies: + "readable-stream" "^3.4.0" + +"merge-stream@^2.0.0": + "integrity" "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==" + "resolved" "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz" + "version" "2.0.0" + +"merge2@^1.3.0", "merge2@^1.4.1": + "integrity" "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==" + "resolved" "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz" + "version" "1.4.1" + +"micromatch@^4.0.4": + "integrity" "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==" + "resolved" "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz" + "version" "4.0.5" + dependencies: + "braces" "^3.0.2" + "picomatch" "^2.3.1" + +"mime-db@1.52.0": + "integrity" "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==" + "resolved" "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz" + "version" "1.52.0" + +"mime-types@^2.1.12", "mime-types@^2.1.27", "mime-types@~2.1.19": + "integrity" "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==" + "resolved" "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz" + "version" "2.1.35" + dependencies: + "mime-db" "1.52.0" + +"mimic-fn@^2.1.0": + "integrity" "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==" + "resolved" "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz" + "version" "2.1.0" + +"mimic-response@^3.1.0": + "integrity" "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==" + "resolved" "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz" + "version" "3.1.0" + +"minimatch@^3.0.2", "minimatch@^3.0.4", "minimatch@^3.0.5", "minimatch@^3.1.1", "minimatch@^3.1.2", "minimatch@3": + "integrity" "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==" + "resolved" "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz" + "version" "3.1.2" + dependencies: + "brace-expansion" "^1.1.7" + +"minimatch@^5.0.1": + "integrity" "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==" + "resolved" "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz" + "version" "5.1.6" + dependencies: + "brace-expansion" "^2.0.1" + +"minimatch@^9.0.0": + "integrity" "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==" + "resolved" "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz" + "version" "9.0.3" + dependencies: + "brace-expansion" "^2.0.1" + +"minimist@^1.2.0", "minimist@^1.2.3", "minimist@^1.2.5", "minimist@^1.2.6", "minimist@^1.2.8": + "integrity" "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==" + "resolved" "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz" + "version" "1.2.8" + +"minipass-collect@^1.0.2": + "integrity" "sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA==" + "resolved" "https://registry.npmjs.org/minipass-collect/-/minipass-collect-1.0.2.tgz" + "version" "1.0.2" + dependencies: + "minipass" "^3.0.0" + +"minipass-fetch@^2.0.3": + "integrity" "sha512-LT49Zi2/WMROHYoqGgdlQIZh8mLPZmOrN2NdJjMXxYe4nkN6FUyuPuOAOedNJDrx0IRGg9+4guZewtp8hE6TxA==" + "resolved" "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-2.1.2.tgz" + "version" "2.1.2" + dependencies: + "minipass" "^3.1.6" + "minipass-sized" "^1.0.3" + "minizlib" "^2.1.2" optionalDependencies: - encoding "^0.1.13" - -minipass-flush@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/minipass-flush/-/minipass-flush-1.0.5.tgz#82e7135d7e89a50ffe64610a787953c4c4cbb373" - integrity sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw== - dependencies: - minipass "^3.0.0" - -minipass-pipeline@^1.2.4: - version "1.2.4" - resolved "https://registry.yarnpkg.com/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz#68472f79711c084657c067c5c6ad93cddea8214c" - integrity sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A== - dependencies: - minipass "^3.0.0" - -minipass-sized@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/minipass-sized/-/minipass-sized-1.0.3.tgz#70ee5a7c5052070afacfbc22977ea79def353b70" - integrity sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g== - dependencies: - minipass "^3.0.0" - -minipass@^2.6.0, minipass@^2.9.0: - version "2.9.0" - resolved "https://registry.npmjs.org/minipass/-/minipass-2.9.0.tgz" - integrity sha512-wxfUjg9WebH+CUDX/CdbRlh5SmfZiy/hpkxaRI16Y9W56Pa75sWgd/rvFilSgrauD9NyFymP/+JFV3KwzIsJeg== - dependencies: - safe-buffer "^5.1.2" - yallist "^3.0.0" - -minipass@^3.0.0: - version "3.3.6" - resolved "https://registry.yarnpkg.com/minipass/-/minipass-3.3.6.tgz#7bba384db3a1520d18c9c0e5251c3444e95dd94a" - integrity sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw== - dependencies: - yallist "^4.0.0" - -minipass@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/minipass/-/minipass-5.0.0.tgz#3e9788ffb90b694a5d0ec94479a45b5d8738133d" - integrity sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ== - -"minipass@^5.0.0 || ^6.0.2 || ^7.0.0", minipass@^7.0.3: - version "7.0.4" - resolved "https://registry.yarnpkg.com/minipass/-/minipass-7.0.4.tgz#dbce03740f50a4786ba994c1fb908844d27b038c" - integrity sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ== - -minizlib@^1.3.3: - version "1.3.3" - resolved "https://registry.npmjs.org/minizlib/-/minizlib-1.3.3.tgz" - integrity sha512-6ZYMOEnmVsdCeTJVE0W9ZD+pVnE8h9Hma/iOwwRDsdQoePpoX56/8B6z3P9VNwppJuBKNRuFDRNRqRWexT9G9Q== - dependencies: - minipass "^2.9.0" - -minizlib@^2.1.2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-2.1.2.tgz#e90d3466ba209b932451508a11ce3d3632145931" - integrity sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg== - dependencies: - minipass "^3.0.0" - yallist "^4.0.0" - -mkdirp-classic@^0.5.2, mkdirp-classic@^0.5.3: - version "0.5.3" - resolved "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz" - integrity sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A== - -"mkdirp@>=0.5 0", mkdirp@^0.5.0, mkdirp@^0.5.1, mkdirp@^0.5.5: - version "0.5.6" - resolved "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz" - integrity sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw== - dependencies: - minimist "^1.2.6" - -ms@2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" - integrity sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A== - -ms@2.1.2: - version "2.1.2" - resolved "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz" - integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== - -ms@^2.0.0: - version "2.1.3" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" - integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== - -napi-build-utils@^1.0.1, napi-build-utils@^1.0.2: - version "1.0.2" - resolved "https://registry.npmjs.org/napi-build-utils/-/napi-build-utils-1.0.2.tgz" - integrity sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg== - -natural-compare-lite@^1.4.0: - version "1.4.0" - resolved "https://registry.npmjs.org/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz" - integrity sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g== - -natural-compare@^1.4.0: - version "1.4.0" - resolved "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz" - integrity sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw== - -negotiator@^0.6.3: - version "0.6.3" - resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.3.tgz#58e323a72fedc0d6f9cd4d31fe49f51479590ccd" - integrity sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg== - -neo-async@^2.6.2: - version "2.6.2" - resolved "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz" - integrity sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw== - -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== - -node-abi@^3.3.0: - version "3.46.0" - resolved "https://registry.npmjs.org/node-abi/-/node-abi-3.46.0.tgz" - integrity sha512-LXvP3AqTIrtvH/jllXjkNVbYifpRbt9ThTtymSMSuHmhugQLAWr99QQFTm+ZRht9ziUvdGOgB+esme1C6iE6Lg== - dependencies: - semver "^7.3.5" - -node-abi@^3.47.0: - version "3.51.0" - resolved "https://registry.yarnpkg.com/node-abi/-/node-abi-3.51.0.tgz#970bf595ef5a26a271307f8a4befa02823d4e87d" - integrity sha512-SQkEP4hmNWjlniS5zdnfIXTk1x7Ome85RDzHlTbBtzE97Gfwz/Ipw4v/Ryk20DWIy3yCNVLVlGKApCnmvYoJbA== - dependencies: - semver "^7.3.5" - -node-api-headers@^0.0.2: - version "0.0.2" - resolved "https://registry.yarnpkg.com/node-api-headers/-/node-api-headers-0.0.2.tgz#31f4c6c2750b63e598128e76a60aefca6d76ac5d" - integrity sha512-YsjmaKGPDkmhoNKIpkChtCsPVaRE0a274IdERKnuc/E8K1UJdBZ4/mvI006OijlQZHCfpRNOH3dfHQs92se8gg== - -node-gyp@^9.4.0: - version "9.4.0" - resolved "https://registry.yarnpkg.com/node-gyp/-/node-gyp-9.4.0.tgz#2a7a91c7cba4eccfd95e949369f27c9ba704f369" - integrity sha512-dMXsYP6gc9rRbejLXmTbVRYjAHw7ppswsKyMxuxJxxOHzluIO1rGp9TOQgjFJ+2MCqcOcQTOPB/8Xwhr+7s4Eg== - dependencies: - env-paths "^2.2.0" - exponential-backoff "^3.1.1" - glob "^7.1.4" - graceful-fs "^4.2.6" - make-fetch-happen "^11.0.3" - nopt "^6.0.0" - npmlog "^6.0.0" - rimraf "^3.0.2" - semver "^7.3.5" - tar "^6.1.2" - which "^2.0.2" - -node-int64@^0.4.0: - version "0.4.0" - resolved "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz" - integrity sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw== - -node-ninja@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/node-ninja/-/node-ninja-1.0.2.tgz#20a09e57b92e2df591993d4bf098ac3e727062b6" - integrity sha512-wMtWsG2QZI1Z5V7GciX9OI2DVT0PuDRIDQfe3L3rJsQ1qN1Gm3QQhoNtb4PMRi7gq4ByvEIYtPwHC7YbEf5yxw== - dependencies: - fstream "^1.0.0" - glob "3 || 4 || 5 || 6 || 7" - graceful-fs "^4.1.2" - minimatch "3" - mkdirp "^0.5.0" - nopt "2 || 3" - npmlog "0 || 1 || 2" - osenv "0" - path-array "^1.0.0" - request "2" - rimraf "2" - semver "2.x || 3.x || 4 || 5" - tar "^2.0.0" - which "1" - -node-releases@^2.0.13: - version "2.0.13" - resolved "https://registry.npmjs.org/node-releases/-/node-releases-2.0.13.tgz" - integrity sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ== - -noop-logger@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/noop-logger/-/noop-logger-0.1.1.tgz#94a2b1633c4f1317553007d8966fd0e841b6a4c2" - integrity sha512-6kM8CLXvuW5crTxsAtva2YLrRrDaiTIkIePWs9moLHqbFWT94WpNFjwS/5dfLfECg5i/lkmw3aoqVidxt23TEQ== + "encoding" "^0.1.13" + +"minipass-flush@^1.0.5": + "integrity" "sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==" + "resolved" "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz" + "version" "1.0.5" + dependencies: + "minipass" "^3.0.0" + +"minipass-pipeline@^1.2.4": + "integrity" "sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==" + "resolved" "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz" + "version" "1.2.4" + dependencies: + "minipass" "^3.0.0" + +"minipass-sized@^1.0.3": + "integrity" "sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g==" + "resolved" "https://registry.npmjs.org/minipass-sized/-/minipass-sized-1.0.3.tgz" + "version" "1.0.3" + dependencies: + "minipass" "^3.0.0" + +"minipass@^3.0.0", "minipass@^3.1.1", "minipass@^3.1.6": + "integrity" "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==" + "resolved" "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz" + "version" "3.3.6" + dependencies: + "yallist" "^4.0.0" + +"minipass@^5.0.0": + "integrity" "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==" + "resolved" "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz" + "version" "5.0.0" + +"minizlib@^2.1.1", "minizlib@^2.1.2": + "integrity" "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==" + "resolved" "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz" + "version" "2.1.2" + dependencies: + "minipass" "^3.0.0" + "yallist" "^4.0.0" + +"mkdirp-classic@^0.5.2", "mkdirp-classic@^0.5.3": + "integrity" "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==" + "resolved" "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz" + "version" "0.5.3" + +"mkdirp@^0.5.0", "mkdirp@^0.5.1", "mkdirp@>=0.5 0": + "integrity" "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==" + "resolved" "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz" + "version" "0.5.6" + dependencies: + "minimist" "^1.2.6" + +"mkdirp@^1.0.3": + "integrity" "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==" + "resolved" "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz" + "version" "1.0.4" + +"mkdirp@^1.0.4": + "integrity" "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==" + "resolved" "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz" + "version" "1.0.4" + +"ms@^2.0.0", "ms@2.1.2": + "integrity" "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + "resolved" "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz" + "version" "2.1.2" + +"ms@2.0.0": + "integrity" "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + "resolved" "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz" + "version" "2.0.0" + +"napi-build-utils@^1.0.1", "napi-build-utils@^1.0.2": + "integrity" "sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg==" + "resolved" "https://registry.npmjs.org/napi-build-utils/-/napi-build-utils-1.0.2.tgz" + "version" "1.0.2" + +"natural-compare-lite@^1.4.0": + "integrity" "sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==" + "resolved" "https://registry.npmjs.org/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz" + "version" "1.4.0" + +"natural-compare@^1.4.0": + "integrity" "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==" + "resolved" "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz" + "version" "1.4.0" + +"negotiator@^0.6.3": + "integrity" "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==" + "resolved" "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz" + "version" "0.6.3" + +"neo-async@^2.6.2": + "integrity" "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==" + "resolved" "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz" + "version" "2.6.2" + +"next-tick@^1.1.0": + "integrity" "sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==" + "resolved" "https://registry.npmjs.org/next-tick/-/next-tick-1.1.0.tgz" + "version" "1.1.0" + +"node-abi@^3.3.0", "node-abi@^3.47.0": + "integrity" "sha512-SQkEP4hmNWjlniS5zdnfIXTk1x7Ome85RDzHlTbBtzE97Gfwz/Ipw4v/Ryk20DWIy3yCNVLVlGKApCnmvYoJbA==" + "resolved" "https://registry.npmjs.org/node-abi/-/node-abi-3.51.0.tgz" + "version" "3.51.0" + dependencies: + "semver" "^7.3.5" + +"node-api-headers@^0.0.2": + "integrity" "sha512-YsjmaKGPDkmhoNKIpkChtCsPVaRE0a274IdERKnuc/E8K1UJdBZ4/mvI006OijlQZHCfpRNOH3dfHQs92se8gg==" + "resolved" "https://registry.npmjs.org/node-api-headers/-/node-api-headers-0.0.2.tgz" + "version" "0.0.2" + +"node-gyp@^9.4.0": + "integrity" "sha512-OQkWKbjQKbGkMf/xqI1jjy3oCTgMKJac58G2+bjZb3fza6gW2YrCSdMQYaoTb70crvE//Gngr4f0AgVHmqHvBQ==" + "resolved" "https://registry.npmjs.org/node-gyp/-/node-gyp-9.4.1.tgz" + "version" "9.4.1" + dependencies: + "env-paths" "^2.2.0" + "exponential-backoff" "^3.1.1" + "glob" "^7.1.4" + "graceful-fs" "^4.2.6" + "make-fetch-happen" "^10.0.3" + "nopt" "^6.0.0" + "npmlog" "^6.0.0" + "rimraf" "^3.0.2" + "semver" "^7.3.5" + "tar" "^6.1.2" + "which" "^2.0.2" + +"node-int64@^0.4.0": + "integrity" "sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==" + "resolved" "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz" + "version" "0.4.0" + +"node-ninja@^1.0.2": + "integrity" "sha512-wMtWsG2QZI1Z5V7GciX9OI2DVT0PuDRIDQfe3L3rJsQ1qN1Gm3QQhoNtb4PMRi7gq4ByvEIYtPwHC7YbEf5yxw==" + "resolved" "https://registry.npmjs.org/node-ninja/-/node-ninja-1.0.2.tgz" + "version" "1.0.2" + dependencies: + "fstream" "^1.0.0" + "glob" "3 || 4 || 5 || 6 || 7" + "graceful-fs" "^4.1.2" + "minimatch" "3" + "mkdirp" "^0.5.0" + "nopt" "2 || 3" + "npmlog" "0 || 1 || 2" + "osenv" "0" + "path-array" "^1.0.0" + "request" "2" + "rimraf" "2" + "semver" "2.x || 3.x || 4 || 5" + "tar" "^2.0.0" + "which" "1" + +"node-releases@^2.0.13": + "integrity" "sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ==" + "resolved" "https://registry.npmjs.org/node-releases/-/node-releases-2.0.13.tgz" + "version" "2.0.13" + +"noop-logger@^0.1.1": + "integrity" "sha512-6kM8CLXvuW5crTxsAtva2YLrRrDaiTIkIePWs9moLHqbFWT94WpNFjwS/5dfLfECg5i/lkmw3aoqVidxt23TEQ==" + "resolved" "https://registry.npmjs.org/noop-logger/-/noop-logger-0.1.1.tgz" + "version" "0.1.1" + +"nopt@^6.0.0": + "integrity" "sha512-ZwLpbTgdhuZUnZzjd7nb1ZV+4DoiC6/sfiVKok72ym/4Tlf+DFdlHYmT2JPmcNNWV6Pi3SDf1kT+A4r9RTuT9g==" + "resolved" "https://registry.npmjs.org/nopt/-/nopt-6.0.0.tgz" + "version" "6.0.0" + dependencies: + "abbrev" "^1.0.0" "nopt@2 || 3": - version "3.0.6" - resolved "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz" - integrity sha512-4GUt3kSEYmk4ITxzB/b9vaIDfUVWN/Ml1Fwl11IlnIG2iaJ9O6WXZ9SrYM9NLI8OCBieN2Y8SWC2oJV0RQ7qYg== - dependencies: - abbrev "1" - -nopt@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/nopt/-/nopt-6.0.0.tgz#245801d8ebf409c6df22ab9d95b65e1309cdb16d" - integrity sha512-ZwLpbTgdhuZUnZzjd7nb1ZV+4DoiC6/sfiVKok72ym/4Tlf+DFdlHYmT2JPmcNNWV6Pi3SDf1kT+A4r9RTuT9g== - dependencies: - abbrev "^1.0.0" - -normalize-path@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz" - integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== - -npm-path@^2.0.2: - version "2.0.4" - resolved "https://registry.yarnpkg.com/npm-path/-/npm-path-2.0.4.tgz#c641347a5ff9d6a09e4d9bce5580c4f505278e64" - integrity sha512-IFsj0R9C7ZdR5cP+ET342q77uSRdtWOlWpih5eC+lu29tIDbNEgDbzgVJ5UFvYHWhxDZ5TFkJafFioO0pPQjCw== - dependencies: - which "^1.2.10" + "integrity" "sha512-4GUt3kSEYmk4ITxzB/b9vaIDfUVWN/Ml1Fwl11IlnIG2iaJ9O6WXZ9SrYM9NLI8OCBieN2Y8SWC2oJV0RQ7qYg==" + "resolved" "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz" + "version" "3.0.6" + dependencies: + "abbrev" "1" + +"normalize-path@^3.0.0": + "integrity" "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==" + "resolved" "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz" + "version" "3.0.0" + +"npm-path@^2.0.2": + "integrity" "sha512-IFsj0R9C7ZdR5cP+ET342q77uSRdtWOlWpih5eC+lu29tIDbNEgDbzgVJ5UFvYHWhxDZ5TFkJafFioO0pPQjCw==" + "resolved" "https://registry.npmjs.org/npm-path/-/npm-path-2.0.4.tgz" + "version" "2.0.4" + dependencies: + "which" "^1.2.10" + +"npm-run-path@^4.0.1": + "integrity" "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==" + "resolved" "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz" + "version" "4.0.1" + dependencies: + "path-key" "^3.0.0" + +"npm-which@^3.0.1": + "integrity" "sha512-CM8vMpeFQ7MAPin0U3wzDhSGV0hMHNwHU0wjo402IVizPDrs45jSfSuoC+wThevY88LQti8VvaAnqYAeVy3I1A==" + "resolved" "https://registry.npmjs.org/npm-which/-/npm-which-3.0.1.tgz" + "version" "3.0.1" + dependencies: + "commander" "^2.9.0" + "npm-path" "^2.0.2" + "which" "^1.2.10" + +"npmlog@^6.0.0": + "integrity" "sha512-/vBvz5Jfr9dT/aFWd0FIRf+T/Q2WBsLENygUaFUqstqsycmZAP/t5BvFJTK0viFmSUxiUKTUplWy5vt+rvKIxg==" + "resolved" "https://registry.npmjs.org/npmlog/-/npmlog-6.0.2.tgz" + "version" "6.0.2" + dependencies: + "are-we-there-yet" "^3.0.0" + "console-control-strings" "^1.1.0" + "gauge" "^4.0.3" + "set-blocking" "^2.0.0" + +"npmlog@^6.0.2": + "integrity" "sha512-/vBvz5Jfr9dT/aFWd0FIRf+T/Q2WBsLENygUaFUqstqsycmZAP/t5BvFJTK0viFmSUxiUKTUplWy5vt+rvKIxg==" + "resolved" "https://registry.npmjs.org/npmlog/-/npmlog-6.0.2.tgz" + "version" "6.0.2" + dependencies: + "are-we-there-yet" "^3.0.0" + "console-control-strings" "^1.1.0" + "gauge" "^4.0.3" + "set-blocking" "^2.0.0" + +"npmlog@^7.0.1": + "integrity" "sha512-uJ0YFk/mCQpLBt+bxN88AKd+gyqZvZDbtiNxk6Waqcj2aPRyfVx8ITawkyQynxUagInjdYT1+qj4NfA5KJJUxg==" + "resolved" "https://registry.npmjs.org/npmlog/-/npmlog-7.0.1.tgz" + "version" "7.0.1" + dependencies: + "are-we-there-yet" "^4.0.0" + "console-control-strings" "^1.1.0" + "gauge" "^5.0.0" + "set-blocking" "^2.0.0" -npm-run-path@^4.0.1: - version "4.0.1" - resolved "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz" - integrity sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw== - dependencies: - path-key "^3.0.0" - -npm-which@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/npm-which/-/npm-which-3.0.1.tgz#9225f26ec3a285c209cae67c3b11a6b4ab7140aa" - integrity sha512-CM8vMpeFQ7MAPin0U3wzDhSGV0hMHNwHU0wjo402IVizPDrs45jSfSuoC+wThevY88LQti8VvaAnqYAeVy3I1A== +"npmlog@0 || 1 || 2 || 3 || 4": + "integrity" "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==" + "resolved" "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz" + "version" "4.1.2" dependencies: - commander "^2.9.0" - npm-path "^2.0.2" - which "^1.2.10" + "are-we-there-yet" "~1.1.2" + "console-control-strings" "~1.1.0" + "gauge" "~2.7.3" + "set-blocking" "~2.0.0" "npmlog@0 || 1 || 2": - version "2.0.4" - resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-2.0.4.tgz#98b52530f2514ca90d09ec5b22c8846722375692" - integrity sha512-DaL6RTb8Qh4tMe2ttPT1qWccETy2Vi5/8p+htMpLBeXJTr2CAqnF5WQtSP2eFpvaNbhLZ5uilDb98mRm4Q+lZQ== - dependencies: - ansi "~0.3.1" - are-we-there-yet "~1.1.2" - gauge "~1.2.5" - -"npmlog@0 || 1 || 2 || 3 || 4": - version "4.1.2" - resolved "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz" - integrity sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg== - dependencies: - are-we-there-yet "~1.1.2" - console-control-strings "~1.1.0" - gauge "~2.7.3" - set-blocking "~2.0.0" - -npmlog@^6.0.0, npmlog@^6.0.2: - version "6.0.2" - resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-6.0.2.tgz#c8166017a42f2dea92d6453168dd865186a70830" - integrity sha512-/vBvz5Jfr9dT/aFWd0FIRf+T/Q2WBsLENygUaFUqstqsycmZAP/t5BvFJTK0viFmSUxiUKTUplWy5vt+rvKIxg== - dependencies: - are-we-there-yet "^3.0.0" - console-control-strings "^1.1.0" - gauge "^4.0.3" - set-blocking "^2.0.0" - -npmlog@^7.0.1: - version "7.0.1" - resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-7.0.1.tgz#7372151a01ccb095c47d8bf1d0771a4ff1f53ac8" - integrity sha512-uJ0YFk/mCQpLBt+bxN88AKd+gyqZvZDbtiNxk6Waqcj2aPRyfVx8ITawkyQynxUagInjdYT1+qj4NfA5KJJUxg== - dependencies: - are-we-there-yet "^4.0.0" - console-control-strings "^1.1.0" - gauge "^5.0.0" - set-blocking "^2.0.0" - -number-is-nan@^1.0.0: - version "1.0.1" - resolved "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz" - integrity sha512-4jbtZXNAsfZbAHiiqjLPBiCl16dES1zI4Hpzzxw61Tk+loF+sBDBKx1ICKKKwIqQ7M0mFn1TmkN7euSncWgHiQ== - -nw-gyp@^3.6.6: - version "3.6.6" - resolved "https://registry.yarnpkg.com/nw-gyp/-/nw-gyp-3.6.6.tgz#0231d603d09665053ea48843d6888d13a4b92fb1" - integrity sha512-FeMnpFQWtEEMJ1BrSfK3T62CjuxaNl0mNHqdrxFcIF5XQdC3gaZYW4n+77lQLk8PE3Upfknkl9VRo6gDKJIHuA== - dependencies: - fstream "^1.0.0" - glob "^7.0.3" - graceful-fs "^4.1.2" - minimatch "^3.0.2" - mkdirp "^0.5.0" - nopt "2 || 3" - npmlog "0 || 1 || 2 || 3 || 4" - osenv "0" - request "2" - rimraf "2" - semver "~5.3.0" - tar "^2.0.0" - which "1" - -oauth-sign@~0.9.0: - version "0.9.0" - resolved "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz" - integrity sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ== - -object-assign@^4.1.0: - version "4.1.1" - resolved "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz" - integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg== - -once@^1.3.0, once@^1.3.1, once@^1.4.0: - version "1.4.0" - resolved "https://registry.npmjs.org/once/-/once-1.4.0.tgz" - integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w== - dependencies: - wrappy "1" - -onetime@^5.1.2: - version "5.1.2" - resolved "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz" - integrity sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg== - dependencies: - mimic-fn "^2.1.0" - -optionator@^0.9.3: - version "0.9.3" - resolved "https://registry.npmjs.org/optionator/-/optionator-0.9.3.tgz" - integrity sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg== + "integrity" "sha512-DaL6RTb8Qh4tMe2ttPT1qWccETy2Vi5/8p+htMpLBeXJTr2CAqnF5WQtSP2eFpvaNbhLZ5uilDb98mRm4Q+lZQ==" + "resolved" "https://registry.npmjs.org/npmlog/-/npmlog-2.0.4.tgz" + "version" "2.0.4" + dependencies: + "ansi" "~0.3.1" + "are-we-there-yet" "~1.1.2" + "gauge" "~1.2.5" + +"number-is-nan@^1.0.0": + "integrity" "sha512-4jbtZXNAsfZbAHiiqjLPBiCl16dES1zI4Hpzzxw61Tk+loF+sBDBKx1ICKKKwIqQ7M0mFn1TmkN7euSncWgHiQ==" + "resolved" "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz" + "version" "1.0.1" + +"nw-gyp@^3.6.6": + "integrity" "sha512-FeMnpFQWtEEMJ1BrSfK3T62CjuxaNl0mNHqdrxFcIF5XQdC3gaZYW4n+77lQLk8PE3Upfknkl9VRo6gDKJIHuA==" + "resolved" "https://registry.npmjs.org/nw-gyp/-/nw-gyp-3.6.6.tgz" + "version" "3.6.6" + dependencies: + "fstream" "^1.0.0" + "glob" "^7.0.3" + "graceful-fs" "^4.1.2" + "minimatch" "^3.0.2" + "mkdirp" "^0.5.0" + "nopt" "2 || 3" + "npmlog" "0 || 1 || 2 || 3 || 4" + "osenv" "0" + "request" "2" + "rimraf" "2" + "semver" "~5.3.0" + "tar" "^2.0.0" + "which" "1" + +"oauth-sign@~0.9.0": + "integrity" "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==" + "resolved" "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz" + "version" "0.9.0" + +"object-assign@^4.1.0": + "integrity" "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==" + "resolved" "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz" + "version" "4.1.1" + +"once@^1.3.0", "once@^1.3.1", "once@^1.4.0": + "integrity" "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==" + "resolved" "https://registry.npmjs.org/once/-/once-1.4.0.tgz" + "version" "1.4.0" + dependencies: + "wrappy" "1" + +"onetime@^5.1.2": + "integrity" "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==" + "resolved" "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz" + "version" "5.1.2" + dependencies: + "mimic-fn" "^2.1.0" + +"optionator@^0.9.3": + "integrity" "sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==" + "resolved" "https://registry.npmjs.org/optionator/-/optionator-0.9.3.tgz" + "version" "0.9.3" dependencies: "@aashutoshrathi/word-wrap" "^1.2.3" - deep-is "^0.1.3" - fast-levenshtein "^2.0.6" - levn "^0.4.1" - prelude-ls "^1.2.1" - type-check "^0.4.0" + "deep-is" "^0.1.3" + "fast-levenshtein" "^2.0.6" + "levn" "^0.4.1" + "prelude-ls" "^1.2.1" + "type-check" "^0.4.0" -os-homedir@^1.0.0: - version "1.0.2" - resolved "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz" - integrity sha512-B5JU3cabzk8c67mRRd3ECmROafjYMXbuzlwtqdM8IbS8ktlTix8aFGb2bAGKrSRIlnfKwovGUUr72JUPyOb6kQ== +"os-homedir@^1.0.0": + "integrity" "sha512-B5JU3cabzk8c67mRRd3ECmROafjYMXbuzlwtqdM8IbS8ktlTix8aFGb2bAGKrSRIlnfKwovGUUr72JUPyOb6kQ==" + "resolved" "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz" + "version" "1.0.2" -os-tmpdir@^1.0.0: - version "1.0.2" - resolved "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz" - integrity sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g== +"os-tmpdir@^1.0.0": + "integrity" "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==" + "resolved" "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz" + "version" "1.0.2" -osenv@0: - version "0.1.5" - resolved "https://registry.npmjs.org/osenv/-/osenv-0.1.5.tgz" - integrity sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g== +"osenv@0": + "integrity" "sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==" + "resolved" "https://registry.npmjs.org/osenv/-/osenv-0.1.5.tgz" + "version" "0.1.5" dependencies: - os-homedir "^1.0.0" - os-tmpdir "^1.0.0" + "os-homedir" "^1.0.0" + "os-tmpdir" "^1.0.0" -p-limit@^2.2.0: - version "2.3.0" - resolved "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz" - integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w== +"p-limit@^2.2.0": + "integrity" "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==" + "resolved" "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz" + "version" "2.3.0" dependencies: - p-try "^2.0.0" + "p-try" "^2.0.0" -p-limit@^3.0.2, p-limit@^3.1.0: - version "3.1.0" - resolved "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz" - integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== +"p-limit@^3.0.2", "p-limit@^3.1.0": + "integrity" "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==" + "resolved" "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz" + "version" "3.1.0" dependencies: - yocto-queue "^0.1.0" + "yocto-queue" "^0.1.0" -p-locate@^4.1.0: - version "4.1.0" - resolved "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz" - integrity sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A== +"p-locate@^4.1.0": + "integrity" "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==" + "resolved" "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz" + "version" "4.1.0" dependencies: - p-limit "^2.2.0" + "p-limit" "^2.2.0" -p-locate@^5.0.0: - version "5.0.0" - resolved "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz" - integrity sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw== +"p-locate@^5.0.0": + "integrity" "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==" + "resolved" "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz" + "version" "5.0.0" dependencies: - p-limit "^3.0.2" + "p-limit" "^3.0.2" -p-map@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/p-map/-/p-map-4.0.0.tgz#bb2f95a5eda2ec168ec9274e06a747c3e2904d2b" - integrity sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ== +"p-map@^4.0.0": + "integrity" "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==" + "resolved" "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz" + "version" "4.0.0" dependencies: - aggregate-error "^3.0.0" + "aggregate-error" "^3.0.0" -p-try@^2.0.0: - version "2.2.0" - resolved "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz" - integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== +"p-try@^2.0.0": + "integrity" "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==" + "resolved" "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz" + "version" "2.2.0" -parent-module@^1.0.0: - version "1.0.1" - resolved "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz" - integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g== +"parent-module@^1.0.0": + "integrity" "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==" + "resolved" "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz" + "version" "1.0.1" dependencies: - callsites "^3.0.0" + "callsites" "^3.0.0" -parse-json@^5.2.0: - version "5.2.0" - resolved "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz" - integrity sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg== +"parse-json@^5.2.0": + "integrity" "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==" + "resolved" "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz" + "version" "5.2.0" dependencies: "@babel/code-frame" "^7.0.0" - error-ex "^1.3.1" - json-parse-even-better-errors "^2.3.0" - lines-and-columns "^1.1.6" - -path-array@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/path-array/-/path-array-1.0.1.tgz#7e2f0f35f07a2015122b868b7eac0eb2c4fec271" - integrity sha512-teWG2rJTJJZi2kINKOsHcdIuHP7jy3D7pAsVgdhxMq8kaL2RnS5sg7YTlrClMVCIItcVbPTPI6eMBEoNxYahLA== - dependencies: - array-index "^1.0.0" - -path-exists@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz" - integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== - -path-is-absolute@^1.0.0: - version "1.0.1" - resolved "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz" - integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg== - -path-key@^3.0.0, path-key@^3.1.0: - version "3.1.1" - resolved "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz" - integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== - -path-parse@^1.0.7: - version "1.0.7" - resolved "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz" - integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== - -path-scurry@^1.10.1: - version "1.10.1" - resolved "https://registry.yarnpkg.com/path-scurry/-/path-scurry-1.10.1.tgz#9ba6bf5aa8500fe9fd67df4f0d9483b2b0bfc698" - integrity sha512-MkhCqzzBEpPvxxQ71Md0b1Kk51W01lrYvlMzSUaIzNsODdd7mqhiimSZlr+VegAz5Z6Vzt9Xg2ttE//XBhH3EQ== - dependencies: - lru-cache "^9.1.1 || ^10.0.0" - minipass "^5.0.0 || ^6.0.2 || ^7.0.0" - -path-type@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz" - integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== - -performance-now@^2.1.0: - version "2.1.0" - resolved "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz" - integrity sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow== - -picocolors@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz" - integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ== - -picomatch@^2.0.4, picomatch@^2.2.3, picomatch@^2.3.1: - version "2.3.1" - resolved "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz" - integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== - -pirates@^4.0.4: - version "4.0.6" - resolved "https://registry.npmjs.org/pirates/-/pirates-4.0.6.tgz" - integrity sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg== - -pkg-dir@^4.2.0: - version "4.2.0" - resolved "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz" - integrity sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ== - dependencies: - find-up "^4.0.0" - -prebuild-install@^7.1.1: - version "7.1.1" - resolved "https://registry.npmjs.org/prebuild-install/-/prebuild-install-7.1.1.tgz" - integrity sha512-jAXscXWMcCK8GgCoHOfIr0ODh5ai8mj63L2nWrjuAgXE6tDyYGnx4/8o/rCgU+B4JSyZBKbeZqzhtwtC3ovxjw== - dependencies: - detect-libc "^2.0.0" - expand-template "^2.0.3" - github-from-package "0.0.0" - minimist "^1.2.3" - mkdirp-classic "^0.5.3" - napi-build-utils "^1.0.1" - node-abi "^3.3.0" - pump "^3.0.0" - rc "^1.2.7" - simple-get "^4.0.0" - tar-fs "^2.0.0" - tunnel-agent "^0.6.0" - -prebuild@^12.1.0: - version "12.1.0" - resolved "https://registry.yarnpkg.com/prebuild/-/prebuild-12.1.0.tgz#c3c8f74406a1c33c0e86fd329182c3bbc85ef4d9" - integrity sha512-7VxOp28zmb68lVMAqNMYr8jyIIHdRp52MSki01jAsdgDlnQYsVNhRpC9nHoax2wVhV/fnbyUUb1u57qUjrbbEg== - dependencies: - cmake-js "^7.2.1" - detect-libc "^2.0.2" - each-series-async "^1.0.1" - execspawn "^1.0.1" - ghreleases "^3.0.2" - github-from-package "0.0.0" - glob "^7.2.3" - minimist "^1.2.8" - napi-build-utils "^1.0.2" - node-abi "^3.47.0" - node-gyp "^9.4.0" - node-ninja "^1.0.2" - noop-logger "^0.1.1" - npm-which "^3.0.1" - npmlog "^7.0.1" - nw-gyp "^3.6.6" - rc "^1.2.8" - run-waterfall "^1.1.7" - tar-stream "^3.1.6" - -prelude-ls@^1.2.1: - version "1.2.1" - resolved "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz" - integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g== - -prettier@^2.8.3: - version "2.8.8" - resolved "https://registry.npmjs.org/prettier/-/prettier-2.8.8.tgz" - integrity sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q== - -pretty-format@^29.0.0, pretty-format@^29.6.2: - version "29.6.2" - resolved "https://registry.npmjs.org/pretty-format/-/pretty-format-29.6.2.tgz" - integrity sha512-1q0oC8eRveTg5nnBEWMXAU2qpv65Gnuf2eCQzSjxpWFkPaPARwqZZDGuNE0zPAZfTCHzIk3A8dIjwlQKKLphyg== + "error-ex" "^1.3.1" + "json-parse-even-better-errors" "^2.3.0" + "lines-and-columns" "^1.1.6" + +"path-array@^1.0.0": + "integrity" "sha512-teWG2rJTJJZi2kINKOsHcdIuHP7jy3D7pAsVgdhxMq8kaL2RnS5sg7YTlrClMVCIItcVbPTPI6eMBEoNxYahLA==" + "resolved" "https://registry.npmjs.org/path-array/-/path-array-1.0.1.tgz" + "version" "1.0.1" + dependencies: + "array-index" "^1.0.0" + +"path-exists@^4.0.0": + "integrity" "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==" + "resolved" "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz" + "version" "4.0.0" + +"path-is-absolute@^1.0.0": + "integrity" "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==" + "resolved" "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz" + "version" "1.0.1" + +"path-key@^3.0.0", "path-key@^3.1.0": + "integrity" "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==" + "resolved" "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz" + "version" "3.1.1" + +"path-parse@^1.0.7": + "integrity" "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" + "resolved" "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz" + "version" "1.0.7" + +"path-type@^4.0.0": + "integrity" "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==" + "resolved" "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz" + "version" "4.0.0" + +"performance-now@^2.1.0": + "integrity" "sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==" + "resolved" "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz" + "version" "2.1.0" + +"picocolors@^1.0.0": + "integrity" "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" + "resolved" "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz" + "version" "1.0.0" + +"picomatch@^2.0.4", "picomatch@^2.2.3", "picomatch@^2.3.1": + "integrity" "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==" + "resolved" "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz" + "version" "2.3.1" + +"pirates@^4.0.4": + "integrity" "sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==" + "resolved" "https://registry.npmjs.org/pirates/-/pirates-4.0.6.tgz" + "version" "4.0.6" + +"pkg-dir@^4.2.0": + "integrity" "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==" + "resolved" "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz" + "version" "4.2.0" + dependencies: + "find-up" "^4.0.0" + +"prebuild-install@^7.1.1": + "integrity" "sha512-jAXscXWMcCK8GgCoHOfIr0ODh5ai8mj63L2nWrjuAgXE6tDyYGnx4/8o/rCgU+B4JSyZBKbeZqzhtwtC3ovxjw==" + "resolved" "https://registry.npmjs.org/prebuild-install/-/prebuild-install-7.1.1.tgz" + "version" "7.1.1" + dependencies: + "detect-libc" "^2.0.0" + "expand-template" "^2.0.3" + "github-from-package" "0.0.0" + "minimist" "^1.2.3" + "mkdirp-classic" "^0.5.3" + "napi-build-utils" "^1.0.1" + "node-abi" "^3.3.0" + "pump" "^3.0.0" + "rc" "^1.2.7" + "simple-get" "^4.0.0" + "tar-fs" "^2.0.0" + "tunnel-agent" "^0.6.0" + +"prebuild@^12.1.0": + "integrity" "sha512-7VxOp28zmb68lVMAqNMYr8jyIIHdRp52MSki01jAsdgDlnQYsVNhRpC9nHoax2wVhV/fnbyUUb1u57qUjrbbEg==" + "resolved" "https://registry.npmjs.org/prebuild/-/prebuild-12.1.0.tgz" + "version" "12.1.0" + dependencies: + "cmake-js" "^7.2.1" + "detect-libc" "^2.0.2" + "each-series-async" "^1.0.1" + "execspawn" "^1.0.1" + "ghreleases" "^3.0.2" + "github-from-package" "0.0.0" + "glob" "^7.2.3" + "minimist" "^1.2.8" + "napi-build-utils" "^1.0.2" + "node-abi" "^3.47.0" + "node-gyp" "^9.4.0" + "node-ninja" "^1.0.2" + "noop-logger" "^0.1.1" + "npm-which" "^3.0.1" + "npmlog" "^7.0.1" + "nw-gyp" "^3.6.6" + "rc" "^1.2.8" + "run-waterfall" "^1.1.7" + "tar-stream" "^3.1.6" + +"prelude-ls@^1.2.1": + "integrity" "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==" + "resolved" "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz" + "version" "1.2.1" + +"prettier@^2.8.3": + "integrity" "sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==" + "resolved" "https://registry.npmjs.org/prettier/-/prettier-2.8.8.tgz" + "version" "2.8.8" + +"pretty-format@^29.0.0", "pretty-format@^29.6.2": + "integrity" "sha512-1q0oC8eRveTg5nnBEWMXAU2qpv65Gnuf2eCQzSjxpWFkPaPARwqZZDGuNE0zPAZfTCHzIk3A8dIjwlQKKLphyg==" + "resolved" "https://registry.npmjs.org/pretty-format/-/pretty-format-29.6.2.tgz" + "version" "29.6.2" dependencies: "@jest/schemas" "^29.6.0" - ansi-styles "^5.0.0" - react-is "^18.0.0" - -process-nextick-args@~2.0.0: - version "2.0.1" - resolved "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz" - integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== - -process@^0.11.10: - version "0.11.10" - resolved "https://registry.yarnpkg.com/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182" - integrity sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A== - -promise-retry@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/promise-retry/-/promise-retry-2.0.1.tgz#ff747a13620ab57ba688f5fc67855410c370da22" - integrity sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g== - dependencies: - err-code "^2.0.2" - retry "^0.12.0" - -prompts@^2.0.1: - version "2.4.2" - resolved "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz" - integrity sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q== - dependencies: - kleur "^3.0.3" - sisteransi "^1.0.5" - -proxy-from-env@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/proxy-from-env/-/proxy-from-env-1.1.0.tgz#e102f16ca355424865755d2c9e8ea4f24d58c3e2" - integrity sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg== - -psl@^1.1.33: - version "1.9.0" - resolved "https://registry.yarnpkg.com/psl/-/psl-1.9.0.tgz#d0df2a137f00794565fcaf3b2c00cd09f8d5a5a7" - integrity sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag== - -pump@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz" - integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww== - dependencies: - end-of-stream "^1.1.0" - once "^1.3.1" - -punycode@^2.1.0, punycode@^2.1.1: - version "2.3.0" - resolved "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz" - integrity sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA== - -pure-rand@^6.0.0: - version "6.0.2" - resolved "https://registry.npmjs.org/pure-rand/-/pure-rand-6.0.2.tgz" - integrity sha512-6Yg0ekpKICSjPswYOuC5sku/TSWaRYlA0qsXqJgM/d/4pLPHPuTxK7Nbf7jFKzAeedUhR8C7K9Uv63FBsSo8xQ== - -qs@~6.5.2: - version "6.5.3" - resolved "https://registry.npmjs.org/qs/-/qs-6.5.3.tgz" - integrity sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA== - -querystringify@^2.1.1: - version "2.2.0" - resolved "https://registry.yarnpkg.com/querystringify/-/querystringify-2.2.0.tgz#3345941b4153cb9d082d8eee4cda2016a9aef7f6" - integrity sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ== - -queue-microtask@^1.2.2: - version "1.2.3" - resolved "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz" - integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== - -queue-tick@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/queue-tick/-/queue-tick-1.0.1.tgz#f6f07ac82c1fd60f82e098b417a80e52f1f4c142" - integrity sha512-kJt5qhMxoszgU/62PLP1CJytzd2NKetjSRnyuj31fDd3Rlcz3fzlFdFLD1SItunPwyqEOkca6GbV612BWfaBag== - -randombytes@^2.1.0: - version "2.1.0" - resolved "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz" - integrity sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ== - dependencies: - safe-buffer "^5.1.0" - -rc@^1.2.7, rc@^1.2.8: - version "1.2.8" - resolved "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz" - integrity sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw== - dependencies: - deep-extend "^0.6.0" - ini "~1.3.0" - minimist "^1.2.0" - strip-json-comments "~2.0.1" - -react-is@^18.0.0: - version "18.2.0" - resolved "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz" - integrity sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w== + "ansi-styles" "^5.0.0" + "react-is" "^18.0.0" + +"process-nextick-args@~2.0.0": + "integrity" "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" + "resolved" "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz" + "version" "2.0.1" + +"process@^0.11.10": + "integrity" "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==" + "resolved" "https://registry.npmjs.org/process/-/process-0.11.10.tgz" + "version" "0.11.10" + +"promise-inflight@^1.0.1": + "integrity" "sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g==" + "resolved" "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz" + "version" "1.0.1" + +"promise-retry@^2.0.1": + "integrity" "sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==" + "resolved" "https://registry.npmjs.org/promise-retry/-/promise-retry-2.0.1.tgz" + "version" "2.0.1" + dependencies: + "err-code" "^2.0.2" + "retry" "^0.12.0" + +"prompts@^2.0.1": + "integrity" "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==" + "resolved" "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz" + "version" "2.4.2" + dependencies: + "kleur" "^3.0.3" + "sisteransi" "^1.0.5" + +"proxy-from-env@^1.1.0": + "integrity" "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==" + "resolved" "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz" + "version" "1.1.0" + +"psl@^1.1.28": + "integrity" "sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==" + "resolved" "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz" + "version" "1.9.0" + +"pump@^3.0.0": + "integrity" "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==" + "resolved" "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz" + "version" "3.0.0" + dependencies: + "end-of-stream" "^1.1.0" + "once" "^1.3.1" + +"punycode@^2.1.0", "punycode@^2.1.1": + "integrity" "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==" + "resolved" "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz" + "version" "2.3.0" + +"pure-rand@^6.0.0": + "integrity" "sha512-6Yg0ekpKICSjPswYOuC5sku/TSWaRYlA0qsXqJgM/d/4pLPHPuTxK7Nbf7jFKzAeedUhR8C7K9Uv63FBsSo8xQ==" + "resolved" "https://registry.npmjs.org/pure-rand/-/pure-rand-6.0.2.tgz" + "version" "6.0.2" + +"qs@~6.5.2": + "integrity" "sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA==" + "resolved" "https://registry.npmjs.org/qs/-/qs-6.5.3.tgz" + "version" "6.5.3" + +"queue-microtask@^1.2.2": + "integrity" "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==" + "resolved" "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz" + "version" "1.2.3" + +"queue-tick@^1.0.1": + "integrity" "sha512-kJt5qhMxoszgU/62PLP1CJytzd2NKetjSRnyuj31fDd3Rlcz3fzlFdFLD1SItunPwyqEOkca6GbV612BWfaBag==" + "resolved" "https://registry.npmjs.org/queue-tick/-/queue-tick-1.0.1.tgz" + "version" "1.0.1" + +"randombytes@^2.1.0": + "integrity" "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==" + "resolved" "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz" + "version" "2.1.0" + dependencies: + "safe-buffer" "^5.1.0" + +"rc@^1.2.7", "rc@^1.2.8": + "integrity" "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==" + "resolved" "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz" + "version" "1.2.8" + dependencies: + "deep-extend" "^0.6.0" + "ini" "~1.3.0" + "minimist" "^1.2.0" + "strip-json-comments" "~2.0.1" + +"react-is@^18.0.0": + "integrity" "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==" + "resolved" "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz" + "version" "18.2.0" + +"readable-stream@^2.0.6": + "integrity" "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==" + "resolved" "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz" + "version" "2.3.8" + dependencies: + "core-util-is" "~1.0.0" + "inherits" "~2.0.3" + "isarray" "~1.0.0" + "process-nextick-args" "~2.0.0" + "safe-buffer" "~5.1.1" + "string_decoder" "~1.1.1" + "util-deprecate" "~1.0.1" + +"readable-stream@^3.0.1", "readable-stream@^3.1.1", "readable-stream@^3.4.0", "readable-stream@^3.6.0": + "integrity" "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==" + "resolved" "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz" + "version" "3.6.2" + dependencies: + "inherits" "^2.0.3" + "string_decoder" "^1.1.1" + "util-deprecate" "^1.0.1" + +"readable-stream@^4.1.0": + "integrity" "sha512-Lk/fICSyIhodxy1IDK2HazkeGjSmezAWX2egdtJnYhtzKEsBPJowlI6F6LPb5tqIQILrMbx22S5o3GuJavPusA==" + "resolved" "https://registry.npmjs.org/readable-stream/-/readable-stream-4.4.2.tgz" + "version" "4.4.2" + dependencies: + "abort-controller" "^3.0.0" + "buffer" "^6.0.3" + "events" "^3.3.0" + "process" "^0.11.10" + "string_decoder" "^1.3.0" "readable-stream@>=1.0.33-1 <1.1.0-0": - version "1.0.34" - resolved "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz" - integrity sha512-ok1qVCJuRkNmvebYikljxJA/UEsKwLl2nI1OmaqAu4/UE+h0wKCHok4XkL/gvi39OacXvw59RJUOFUkDib2rHg== - dependencies: - core-util-is "~1.0.0" - inherits "~2.0.1" - isarray "0.0.1" - string_decoder "~0.10.x" - -readable-stream@^2.0.6: - version "2.3.8" - resolved "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz" - integrity sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA== - dependencies: - core-util-is "~1.0.0" - inherits "~2.0.3" - isarray "~1.0.0" - process-nextick-args "~2.0.0" - safe-buffer "~5.1.1" - string_decoder "~1.1.1" - util-deprecate "~1.0.1" - -readable-stream@^3.0.1, readable-stream@^3.1.1, readable-stream@^3.4.0, readable-stream@^3.6.0: - version "3.6.2" - resolved "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz" - integrity sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA== - dependencies: - inherits "^2.0.3" - string_decoder "^1.1.1" - util-deprecate "^1.0.1" - -readable-stream@^4.1.0: - version "4.4.2" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-4.4.2.tgz#e6aced27ad3b9d726d8308515b9a1b98dc1b9d13" - integrity sha512-Lk/fICSyIhodxy1IDK2HazkeGjSmezAWX2egdtJnYhtzKEsBPJowlI6F6LPb5tqIQILrMbx22S5o3GuJavPusA== - dependencies: - abort-controller "^3.0.0" - buffer "^6.0.3" - events "^3.3.0" - process "^0.11.10" - string_decoder "^1.3.0" - -readable-stream@~1.1.9: - version "1.1.14" - resolved "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz" - integrity sha512-+MeVjFf4L44XUkhM1eYbD8fyEsxcV81pqMSR5gblfcLCHfZvbrqy4/qYHE+/R5HoBUT11WV5O08Cr1n3YXkWVQ== - dependencies: - core-util-is "~1.0.0" - inherits "~2.0.1" - isarray "0.0.1" - string_decoder "~0.10.x" - -rechoir@^0.8.0: - version "0.8.0" - resolved "https://registry.npmjs.org/rechoir/-/rechoir-0.8.0.tgz" - integrity sha512-/vxpCXddiX8NGfGO/mTafwjq4aFa/71pvamip0++IQk3zG8cbCj0fifNPrjjF1XMXUne91jL9OoxmdykoEtifQ== - dependencies: - resolve "^1.20.0" - -reflect-metadata@^0.1.13: - version "0.1.13" - resolved "https://registry.npmjs.org/reflect-metadata/-/reflect-metadata-0.1.13.tgz" - integrity sha512-Ts1Y/anZELhSsjMcU605fU9RE4Oi3p5ORujwbIKXfWa+0Zxs510Qrmrce5/Jowq3cHSZSJqBjypxmHarc+vEWg== - -request@2: - version "2.88.2" - resolved "https://registry.yarnpkg.com/request/-/request-2.88.2.tgz#d73c918731cb5a87da047e207234146f664d12b3" - integrity sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw== - dependencies: - aws-sign2 "~0.7.0" - aws4 "^1.8.0" - caseless "~0.12.0" - combined-stream "~1.0.6" - extend "~3.0.2" - forever-agent "~0.6.1" - form-data "~2.3.2" - har-validator "~5.1.3" - http-signature "~1.2.0" - is-typedarray "~1.0.0" - isstream "~0.1.2" - json-stringify-safe "~5.0.1" - mime-types "~2.1.19" - oauth-sign "~0.9.0" - performance-now "^2.1.0" - qs "~6.5.2" - safe-buffer "^5.1.2" - tough-cookie "~2.5.0" - tunnel-agent "^0.6.0" - uuid "^3.3.2" - -require-directory@^2.1.1: - version "2.1.1" - resolved "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz" - integrity sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q== - -requires-port@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff" - integrity sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ== - -resolve-cwd@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz" - integrity sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg== - dependencies: - resolve-from "^5.0.0" - -resolve-from@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz" - integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== - -resolve-from@^5.0.0: - version "5.0.0" - resolved "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz" - integrity sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw== - -resolve.exports@^2.0.0: - version "2.0.2" - resolved "https://registry.npmjs.org/resolve.exports/-/resolve.exports-2.0.2.tgz" - integrity sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg== - -resolve@^1.20.0: - version "1.22.4" - resolved "https://registry.npmjs.org/resolve/-/resolve-1.22.4.tgz" - integrity sha512-PXNdCiPqDqeUou+w1C2eTQbNfxKSuMxqTCuvlmmMsk1NWHL5fRrhY6Pl0qEYYc6+QqGClco1Qj8XnjPego4wfg== - dependencies: - is-core-module "^2.13.0" - path-parse "^1.0.7" - supports-preserve-symlinks-flag "^1.0.0" - -retry@^0.12.0: - version "0.12.0" - resolved "https://registry.yarnpkg.com/retry/-/retry-0.12.0.tgz#1b42a6266a21f07421d1b0b54b7dc167b01c013b" - integrity sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow== - -reusify@^1.0.4: - version "1.0.4" - resolved "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz" - integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== - -rimraf@2: - version "2.7.1" - resolved "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz" - integrity sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w== - dependencies: - glob "^7.1.3" - -rimraf@^3.0.2: - version "3.0.2" - resolved "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz" - integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== - dependencies: - glob "^7.1.3" - -run-parallel@^1.1.9: - version "1.2.0" - resolved "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz" - integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA== - dependencies: - queue-microtask "^1.2.2" - -run-waterfall@^1.1.7: - version "1.1.7" - resolved "https://registry.yarnpkg.com/run-waterfall/-/run-waterfall-1.1.7.tgz#ae368b549b2f5171f86c2924492cab3352a6e9c5" - integrity sha512-iFPgh7SatHXOG1ClcpdwHI63geV3Hc/iL6crGSyBlH2PY7Rm/za+zoKz6FfY/Qlw5K7JwSol8pseO8fN6CMhhQ== - -safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.2, safe-buffer@^5.2.1, safe-buffer@~5.2.0: - version "5.2.1" - resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz" - integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== - -safe-buffer@~5.1.0, safe-buffer@~5.1.1: - version "5.1.2" - resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz" - integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== - -"safer-buffer@>= 2.1.2 < 3.0.0", safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@~2.1.0: - version "2.1.2" - resolved "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz" - integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== - -schema-utils@^3.1.1, schema-utils@^3.2.0: - version "3.3.0" - resolved "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz" - integrity sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg== + "integrity" "sha512-ok1qVCJuRkNmvebYikljxJA/UEsKwLl2nI1OmaqAu4/UE+h0wKCHok4XkL/gvi39OacXvw59RJUOFUkDib2rHg==" + "resolved" "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz" + "version" "1.0.34" + dependencies: + "core-util-is" "~1.0.0" + "inherits" "~2.0.1" + "isarray" "0.0.1" + "string_decoder" "~0.10.x" + +"readable-stream@~1.1.9": + "integrity" "sha512-+MeVjFf4L44XUkhM1eYbD8fyEsxcV81pqMSR5gblfcLCHfZvbrqy4/qYHE+/R5HoBUT11WV5O08Cr1n3YXkWVQ==" + "resolved" "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz" + "version" "1.1.14" + dependencies: + "core-util-is" "~1.0.0" + "inherits" "~2.0.1" + "isarray" "0.0.1" + "string_decoder" "~0.10.x" + +"rechoir@^0.8.0": + "integrity" "sha512-/vxpCXddiX8NGfGO/mTafwjq4aFa/71pvamip0++IQk3zG8cbCj0fifNPrjjF1XMXUne91jL9OoxmdykoEtifQ==" + "resolved" "https://registry.npmjs.org/rechoir/-/rechoir-0.8.0.tgz" + "version" "0.8.0" + dependencies: + "resolve" "^1.20.0" + +"reflect-metadata@^0.1.13": + "integrity" "sha512-Ts1Y/anZELhSsjMcU605fU9RE4Oi3p5ORujwbIKXfWa+0Zxs510Qrmrce5/Jowq3cHSZSJqBjypxmHarc+vEWg==" + "resolved" "https://registry.npmjs.org/reflect-metadata/-/reflect-metadata-0.1.13.tgz" + "version" "0.1.13" + +"request@2": + "integrity" "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==" + "resolved" "https://registry.npmjs.org/request/-/request-2.88.2.tgz" + "version" "2.88.2" + dependencies: + "aws-sign2" "~0.7.0" + "aws4" "^1.8.0" + "caseless" "~0.12.0" + "combined-stream" "~1.0.6" + "extend" "~3.0.2" + "forever-agent" "~0.6.1" + "form-data" "~2.3.2" + "har-validator" "~5.1.3" + "http-signature" "~1.2.0" + "is-typedarray" "~1.0.0" + "isstream" "~0.1.2" + "json-stringify-safe" "~5.0.1" + "mime-types" "~2.1.19" + "oauth-sign" "~0.9.0" + "performance-now" "^2.1.0" + "qs" "~6.5.2" + "safe-buffer" "^5.1.2" + "tough-cookie" "~2.5.0" + "tunnel-agent" "^0.6.0" + "uuid" "^3.3.2" + +"require-directory@^2.1.1": + "integrity" "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==" + "resolved" "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz" + "version" "2.1.1" + +"resolve-cwd@^3.0.0": + "integrity" "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==" + "resolved" "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz" + "version" "3.0.0" + dependencies: + "resolve-from" "^5.0.0" + +"resolve-from@^4.0.0": + "integrity" "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==" + "resolved" "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz" + "version" "4.0.0" + +"resolve-from@^5.0.0": + "integrity" "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==" + "resolved" "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz" + "version" "5.0.0" + +"resolve.exports@^2.0.0": + "integrity" "sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg==" + "resolved" "https://registry.npmjs.org/resolve.exports/-/resolve.exports-2.0.2.tgz" + "version" "2.0.2" + +"resolve@^1.20.0": + "integrity" "sha512-PXNdCiPqDqeUou+w1C2eTQbNfxKSuMxqTCuvlmmMsk1NWHL5fRrhY6Pl0qEYYc6+QqGClco1Qj8XnjPego4wfg==" + "resolved" "https://registry.npmjs.org/resolve/-/resolve-1.22.4.tgz" + "version" "1.22.4" + dependencies: + "is-core-module" "^2.13.0" + "path-parse" "^1.0.7" + "supports-preserve-symlinks-flag" "^1.0.0" + +"retry@^0.12.0": + "integrity" "sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==" + "resolved" "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz" + "version" "0.12.0" + +"reusify@^1.0.4": + "integrity" "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==" + "resolved" "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz" + "version" "1.0.4" + +"rimraf@^3.0.2": + "integrity" "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==" + "resolved" "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz" + "version" "3.0.2" + dependencies: + "glob" "^7.1.3" + +"rimraf@2": + "integrity" "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==" + "resolved" "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz" + "version" "2.7.1" + dependencies: + "glob" "^7.1.3" + +"run-parallel@^1.1.9": + "integrity" "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==" + "resolved" "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz" + "version" "1.2.0" + dependencies: + "queue-microtask" "^1.2.2" + +"run-waterfall@^1.1.7": + "integrity" "sha512-iFPgh7SatHXOG1ClcpdwHI63geV3Hc/iL6crGSyBlH2PY7Rm/za+zoKz6FfY/Qlw5K7JwSol8pseO8fN6CMhhQ==" + "resolved" "https://registry.npmjs.org/run-waterfall/-/run-waterfall-1.1.7.tgz" + "version" "1.1.7" + +"safe-buffer@^5.0.1", "safe-buffer@^5.1.0", "safe-buffer@^5.1.2", "safe-buffer@~5.2.0": + "integrity" "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" + "resolved" "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz" + "version" "5.2.1" + +"safe-buffer@~5.1.0", "safe-buffer@~5.1.1": + "integrity" "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + "resolved" "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz" + "version" "5.1.2" + +"safer-buffer@^2.0.2", "safer-buffer@^2.1.0", "safer-buffer@>= 2.1.2 < 3.0.0", "safer-buffer@~2.1.0": + "integrity" "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + "resolved" "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz" + "version" "2.1.2" + +"schema-utils@^3.1.1", "schema-utils@^3.2.0": + "integrity" "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==" + "resolved" "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz" + "version" "3.3.0" dependencies: "@types/json-schema" "^7.0.8" - ajv "^6.12.5" - ajv-keywords "^3.5.2" - -"semver@2.x || 3.x || 4 || 5", semver@^6.3.0, semver@^6.3.1, semver@^7.3.5, semver@^7.3.7, semver@^7.3.8, semver@^7.5.2, semver@^7.5.3, semver@~5.3.0: - version "7.5.4" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.5.4.tgz#483986ec4ed38e1c6c48c34894a9182dbff68a6e" - integrity sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA== - dependencies: - lru-cache "^6.0.0" - -serialize-javascript@^6.0.1: - version "6.0.1" - resolved "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.1.tgz" - integrity sha512-owoXEFjWRllis8/M1Q+Cw5k8ZH40e3zhp/ovX+Xr/vi1qj6QesbyXXViFbpNvWvPNAD62SutwEXavefrLJWj7w== - dependencies: - randombytes "^2.1.0" - -set-blocking@^2.0.0, set-blocking@~2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz" - integrity sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw== - -shallow-clone@^3.0.0: - version "3.0.1" - resolved "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz" - integrity sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA== - dependencies: - kind-of "^6.0.2" - -shebang-command@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz" - integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== - dependencies: - shebang-regex "^3.0.0" - -shebang-regex@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz" - integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== - -shiki@^0.14.1: - version "0.14.3" - resolved "https://registry.npmjs.org/shiki/-/shiki-0.14.3.tgz" - integrity sha512-U3S/a+b0KS+UkTyMjoNojvTgrBHjgp7L6ovhFVZsXmBGnVdQ4K4U9oK0z63w538S91ATngv1vXigHCSWOwnr+g== - dependencies: - ansi-sequence-parser "^1.1.0" - jsonc-parser "^3.2.0" - vscode-oniguruma "^1.7.0" - vscode-textmate "^8.0.0" - -signal-exit@^3.0.0, signal-exit@^3.0.3, signal-exit@^3.0.7: - version "3.0.7" - resolved "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz" - integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== - -signal-exit@^4.0.1: - version "4.1.0" - resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-4.1.0.tgz#952188c1cbd546070e2dd20d0f41c0ae0530cb04" - integrity sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw== - -simple-concat@^1.0.0: - version "1.0.1" - resolved "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz" - integrity sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q== - -simple-get@^2.8.2, simple-get@^4.0.0: - version "2.8.2" - resolved "https://registry.npmjs.org/simple-get/-/simple-get-2.8.2.tgz" - integrity sha512-Ijd/rV5o+mSBBs4F/x9oDPtTx9Zb6X9brmnXvMW4J7IR15ngi9q5xxqWBKU744jTZiaXtxaPL7uHG6vtN8kUkw== - dependencies: - decompress-response "^3.3.0" - once "^1.3.1" - simple-concat "^1.0.0" - -simple-mime@~0.1.0: - version "0.1.0" - resolved "https://registry.npmjs.org/simple-mime/-/simple-mime-0.1.0.tgz" - integrity sha512-2EoTElzj77w0hV4lW6nWdA+MR+81hviMBhEc/ppUi0+Q311EFCvwKrGS7dcxqvGRKnUdbAyqPJtBQbRYgmtmvQ== - -sisteransi@^1.0.5: - version "1.0.5" - resolved "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz" - integrity sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg== - -slash@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz" - integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== - -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== - -socks-proxy-agent@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/socks-proxy-agent/-/socks-proxy-agent-7.0.0.tgz#dc069ecf34436621acb41e3efa66ca1b5fed15b6" - integrity sha512-Fgl0YPZ902wEsAyiQ+idGd1A7rSFx/ayC1CQVMw5P+EQx2V0SgpGtf6OKFhVjPflPUl9YMmEOnmfjCdMUsygww== - dependencies: - agent-base "^6.0.2" - debug "^4.3.3" - socks "^2.6.2" - -socks@^2.6.2: - version "2.7.1" - resolved "https://registry.yarnpkg.com/socks/-/socks-2.7.1.tgz#d8e651247178fde79c0663043e07240196857d55" - integrity sha512-7maUZy1N7uo6+WVEX6psASxtNlKaNVMlGQKkG/63nEDdLOWNbiUMoLK7X4uYoLhQstau72mLgfEWcXcwsaHbYQ== - dependencies: - ip "^2.0.0" - smart-buffer "^4.2.0" - -source-map-support@0.5.13: - version "0.5.13" - resolved "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.13.tgz" - integrity sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w== - dependencies: - buffer-from "^1.0.0" - source-map "^0.6.0" - -source-map-support@~0.5.20: - version "0.5.21" - resolved "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz" - integrity sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w== - dependencies: - buffer-from "^1.0.0" - source-map "^0.6.0" - -source-map@^0.6.0, source-map@^0.6.1: - version "0.6.1" - resolved "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz" - integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== - -sprintf-js@~1.0.2: - version "1.0.3" - resolved "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz" - integrity sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g== - -sshpk@^1.7.0: - version "1.17.0" - resolved "https://registry.npmjs.org/sshpk/-/sshpk-1.17.0.tgz" - integrity sha512-/9HIEs1ZXGhSPE8X6Ccm7Nam1z8KcoCqPdI7ecm1N33EzAetWahvQWVqLZtaZQ+IDKX4IyA2o0gBzqIMkAagHQ== - dependencies: - asn1 "~0.2.3" - assert-plus "^1.0.0" - bcrypt-pbkdf "^1.0.0" - dashdash "^1.12.0" - ecc-jsbn "~0.1.1" - getpass "^0.1.1" - jsbn "~0.1.0" - safer-buffer "^2.0.2" - tweetnacl "~0.14.0" - -ssri@^10.0.0: - version "10.0.5" - resolved "https://registry.yarnpkg.com/ssri/-/ssri-10.0.5.tgz#e49efcd6e36385196cb515d3a2ad6c3f0265ef8c" - integrity sha512-bSf16tAFkGeRlUNDjXu8FzaMQt6g2HZJrun7mtMbIPOddxt3GLMSz5VWUWcqTJUPfLEaDIepGxv+bYQW49596A== - dependencies: - minipass "^7.0.3" - -stack-utils@^2.0.3: - version "2.0.6" - resolved "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz" - integrity sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ== - dependencies: - escape-string-regexp "^2.0.0" - -streamx@^2.15.0: - version "2.15.1" - resolved "https://registry.yarnpkg.com/streamx/-/streamx-2.15.1.tgz#396ad286d8bc3eeef8f5cea3f029e81237c024c6" - integrity sha512-fQMzy2O/Q47rgwErk/eGeLu/roaFWV0jVsogDmrszM9uIw8L5OA+t+V93MgYlufNptfjmYR1tOMWhei/Eh7TQA== - dependencies: - fast-fifo "^1.1.0" - queue-tick "^1.0.1" - -string-length@^4.0.1: - version "4.0.2" - resolved "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz" - integrity sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ== - dependencies: - char-regex "^1.0.2" - strip-ansi "^6.0.0" - -"string-width-cjs@npm:string-width@^4.2.0": - version "4.2.3" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" - integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== - dependencies: - emoji-regex "^8.0.0" - is-fullwidth-code-point "^3.0.0" - strip-ansi "^6.0.1" - -string-width@^1.0.1, "string-width@^1.0.2 || 2 || 3 || 4": - version "1.0.2" - resolved "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz" - integrity sha512-0XsVpQLnVCXHJfyEs8tC0zpTVIr5PKKsQtkT29IwupnPTjtPmQ3xT/4yCREF9hYkV/3M3kzcUTSAZT6a6h81tw== - dependencies: - code-point-at "^1.0.0" - is-fullwidth-code-point "^1.0.0" - strip-ansi "^3.0.0" - -string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: - version "4.2.3" - resolved "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz" - integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== - dependencies: - emoji-regex "^8.0.0" - is-fullwidth-code-point "^3.0.0" - strip-ansi "^6.0.1" - -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" - integrity sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA== - dependencies: - eastasianwidth "^0.2.0" - emoji-regex "^9.2.2" - strip-ansi "^7.0.1" - -string_decoder@^1.1.1, string_decoder@^1.3.0: - version "1.3.0" - resolved "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz" - integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== - dependencies: - safe-buffer "~5.2.0" - -string_decoder@~0.10.x: - version "0.10.31" - resolved "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz" - integrity sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ== - -string_decoder@~1.1.1: - version "1.1.1" - resolved "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz" - integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== - dependencies: - safe-buffer "~5.1.0" - -"strip-ansi-cjs@npm:strip-ansi@^6.0.1": - version "6.0.1" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" - integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== - dependencies: - ansi-regex "^5.0.1" - -strip-ansi@^3.0.0, strip-ansi@^3.0.1: - version "3.0.1" - resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz" - integrity sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg== - dependencies: - ansi-regex "^2.0.0" - -strip-ansi@^6.0.0, strip-ansi@^6.0.1: - version "6.0.1" - resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz" - integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== - dependencies: - ansi-regex "^5.0.1" - -strip-ansi@^7.0.1: - version "7.1.0" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-7.1.0.tgz#d5b6568ca689d8561370b0707685d22434faff45" - integrity sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ== - dependencies: - ansi-regex "^6.0.1" - -strip-bom@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz" - integrity sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w== - -strip-final-newline@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz" - integrity sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA== - -strip-json-comments@^3.1.1: - version "3.1.1" - resolved "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz" - integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== - -strip-json-comments@~2.0.1: - version "2.0.1" - resolved "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz" - integrity sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ== - -supports-color@^5.3.0: - version "5.5.0" - resolved "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz" - integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== - dependencies: - has-flag "^3.0.0" - -supports-color@^7.1.0: - version "7.2.0" - resolved "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz" - integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== - dependencies: - has-flag "^4.0.0" - -supports-color@^8.0.0: - version "8.1.1" - resolved "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz" - integrity sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q== - dependencies: - has-flag "^4.0.0" - -supports-preserve-symlinks-flag@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz" - integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== - -tapable@^2.1.1, tapable@^2.2.0: - version "2.2.1" - resolved "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz" - integrity sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ== - -tar-fs@^2.0.0: - version "2.1.1" - resolved "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.1.tgz" - integrity sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng== - dependencies: - chownr "^1.1.1" - mkdirp-classic "^0.5.2" - pump "^3.0.0" - tar-stream "^2.1.4" - -tar-stream@^2.1.4: - version "2.2.0" - resolved "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz" - integrity sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ== - dependencies: - bl "^4.0.3" - end-of-stream "^1.4.1" - fs-constants "^1.0.0" - inherits "^2.0.3" - readable-stream "^3.1.1" - -tar-stream@^3.1.6: - version "3.1.6" - resolved "https://registry.yarnpkg.com/tar-stream/-/tar-stream-3.1.6.tgz#6520607b55a06f4a2e2e04db360ba7d338cc5bab" - integrity sha512-B/UyjYwPpMBv+PaFSWAmtYjwdrlEaZQEhMIBFNC5oEG8lpiW8XjcSdmEaClj28ArfKScKHs2nshz3k2le6crsg== - dependencies: - b4a "^1.6.4" - fast-fifo "^1.2.0" - streamx "^2.15.0" - -tar@^2.0.0, tar@^4.4.19, tar@^6.1.11, tar@^6.1.2: - version "4.4.19" - resolved "https://registry.npmjs.org/tar/-/tar-4.4.19.tgz" - integrity sha512-a20gEsvHnWe0ygBY8JbxoM4w3SJdhc7ZAuxkLqh+nvNQN2IOt0B5lLgM490X5Hl8FF0dl0tOf2ewFYAlIFgzVA== - dependencies: - chownr "^1.1.4" - fs-minipass "^1.2.7" - minipass "^2.9.0" - minizlib "^1.3.3" - mkdirp "^0.5.5" - safe-buffer "^5.2.1" - yallist "^3.1.1" - -terser-webpack-plugin@^5.3.7: - version "5.3.9" - resolved "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.9.tgz" - integrity sha512-ZuXsqE07EcggTWQjXUj+Aot/OMcD0bMKGgF63f7UxYcu5/AJF53aIpK1YoP5xR9l6s/Hy2b+t1AM0bLNPRuhwA== + "ajv" "^6.12.5" + "ajv-keywords" "^3.5.2" + +"semver@^6.3.0": + "integrity" "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==" + "resolved" "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz" + "version" "6.3.1" + +"semver@^6.3.1": + "integrity" "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==" + "resolved" "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz" + "version" "6.3.1" + +"semver@^7.3.5", "semver@^7.3.7", "semver@^7.3.8", "semver@^7.5.3": + "integrity" "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==" + "resolved" "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz" + "version" "7.5.4" + dependencies: + "lru-cache" "^6.0.0" + +"semver@~5.3.0": + "integrity" "sha512-mfmm3/H9+67MCVix1h+IXTpDwL6710LyHuk7+cWC9T1mE0qz4iHhh6r4hU2wrIT9iTsAAC2XQRvfblL028cpLw==" + "resolved" "https://registry.npmjs.org/semver/-/semver-5.3.0.tgz" + "version" "5.3.0" + +"semver@2.x || 3.x || 4 || 5": + "integrity" "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==" + "resolved" "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz" + "version" "5.7.2" + +"serialize-javascript@^6.0.1": + "integrity" "sha512-owoXEFjWRllis8/M1Q+Cw5k8ZH40e3zhp/ovX+Xr/vi1qj6QesbyXXViFbpNvWvPNAD62SutwEXavefrLJWj7w==" + "resolved" "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.1.tgz" + "version" "6.0.1" + dependencies: + "randombytes" "^2.1.0" + +"set-blocking@^2.0.0", "set-blocking@~2.0.0": + "integrity" "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==" + "resolved" "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz" + "version" "2.0.0" + +"shallow-clone@^3.0.0": + "integrity" "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==" + "resolved" "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz" + "version" "3.0.1" + dependencies: + "kind-of" "^6.0.2" + +"shebang-command@^2.0.0": + "integrity" "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==" + "resolved" "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz" + "version" "2.0.0" + dependencies: + "shebang-regex" "^3.0.0" + +"shebang-regex@^3.0.0": + "integrity" "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==" + "resolved" "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz" + "version" "3.0.0" + +"shiki@^0.14.1": + "integrity" "sha512-U3S/a+b0KS+UkTyMjoNojvTgrBHjgp7L6ovhFVZsXmBGnVdQ4K4U9oK0z63w538S91ATngv1vXigHCSWOwnr+g==" + "resolved" "https://registry.npmjs.org/shiki/-/shiki-0.14.3.tgz" + "version" "0.14.3" + dependencies: + "ansi-sequence-parser" "^1.1.0" + "jsonc-parser" "^3.2.0" + "vscode-oniguruma" "^1.7.0" + "vscode-textmate" "^8.0.0" + +"signal-exit@^3.0.0", "signal-exit@^3.0.3", "signal-exit@^3.0.7": + "integrity" "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==" + "resolved" "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz" + "version" "3.0.7" + +"signal-exit@^4.0.1": + "integrity" "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==" + "resolved" "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz" + "version" "4.1.0" + +"simple-concat@^1.0.0": + "integrity" "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==" + "resolved" "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz" + "version" "1.0.1" + +"simple-get@^4.0.0": + "integrity" "sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA==" + "resolved" "https://registry.npmjs.org/simple-get/-/simple-get-4.0.1.tgz" + "version" "4.0.1" + dependencies: + "decompress-response" "^6.0.0" + "once" "^1.3.1" + "simple-concat" "^1.0.0" + +"simple-mime@~0.1.0": + "integrity" "sha512-2EoTElzj77w0hV4lW6nWdA+MR+81hviMBhEc/ppUi0+Q311EFCvwKrGS7dcxqvGRKnUdbAyqPJtBQbRYgmtmvQ==" + "resolved" "https://registry.npmjs.org/simple-mime/-/simple-mime-0.1.0.tgz" + "version" "0.1.0" + +"sisteransi@^1.0.5": + "integrity" "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==" + "resolved" "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz" + "version" "1.0.5" + +"slash@^3.0.0": + "integrity" "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==" + "resolved" "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz" + "version" "3.0.0" + +"smart-buffer@^4.2.0": + "integrity" "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==" + "resolved" "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz" + "version" "4.2.0" + +"socks-proxy-agent@^7.0.0": + "integrity" "sha512-Fgl0YPZ902wEsAyiQ+idGd1A7rSFx/ayC1CQVMw5P+EQx2V0SgpGtf6OKFhVjPflPUl9YMmEOnmfjCdMUsygww==" + "resolved" "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-7.0.0.tgz" + "version" "7.0.0" + dependencies: + "agent-base" "^6.0.2" + "debug" "^4.3.3" + "socks" "^2.6.2" + +"socks@^2.6.2": + "integrity" "sha512-7maUZy1N7uo6+WVEX6psASxtNlKaNVMlGQKkG/63nEDdLOWNbiUMoLK7X4uYoLhQstau72mLgfEWcXcwsaHbYQ==" + "resolved" "https://registry.npmjs.org/socks/-/socks-2.7.1.tgz" + "version" "2.7.1" + dependencies: + "ip" "^2.0.0" + "smart-buffer" "^4.2.0" + +"source-map-support@~0.5.20": + "integrity" "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==" + "resolved" "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz" + "version" "0.5.21" + dependencies: + "buffer-from" "^1.0.0" + "source-map" "^0.6.0" + +"source-map-support@0.5.13": + "integrity" "sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==" + "resolved" "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.13.tgz" + "version" "0.5.13" + dependencies: + "buffer-from" "^1.0.0" + "source-map" "^0.6.0" + +"source-map@^0.6.0", "source-map@^0.6.1": + "integrity" "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + "resolved" "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz" + "version" "0.6.1" + +"sprintf-js@~1.0.2": + "integrity" "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==" + "resolved" "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz" + "version" "1.0.3" + +"sshpk@^1.7.0": + "integrity" "sha512-2p2KJZTSqQ/I3+HX42EpYOa2l3f8Erv8MWKsy2I9uf4wA7yFIkXRffYdsx86y6z4vHtV8u7g+pPlr8/4ouAxsQ==" + "resolved" "https://registry.npmjs.org/sshpk/-/sshpk-1.18.0.tgz" + "version" "1.18.0" + dependencies: + "asn1" "~0.2.3" + "assert-plus" "^1.0.0" + "bcrypt-pbkdf" "^1.0.0" + "dashdash" "^1.12.0" + "ecc-jsbn" "~0.1.1" + "getpass" "^0.1.1" + "jsbn" "~0.1.0" + "safer-buffer" "^2.0.2" + "tweetnacl" "~0.14.0" + +"ssri@^9.0.0": + "integrity" "sha512-o57Wcn66jMQvfHG1FlYbWeZWW/dHZhJXjpIcTfXldXEk5nz5lStPo3mK0OJQfGR3RbZUlbISexbljkJzuEj/8Q==" + "resolved" "https://registry.npmjs.org/ssri/-/ssri-9.0.1.tgz" + "version" "9.0.1" + dependencies: + "minipass" "^3.1.1" + +"stack-utils@^2.0.3": + "integrity" "sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==" + "resolved" "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz" + "version" "2.0.6" + dependencies: + "escape-string-regexp" "^2.0.0" + +"streamx@^2.15.0": + "integrity" "sha512-9thPGMkKC2GctCzyCUjME3yR03x2xNo0GPKGkRw2UMYN+gqWa9uqpyNWhmsNCutU5zHmkUum0LsCRQTXUgUCAg==" + "resolved" "https://registry.npmjs.org/streamx/-/streamx-2.15.5.tgz" + "version" "2.15.5" + dependencies: + "fast-fifo" "^1.1.0" + "queue-tick" "^1.0.1" + +"string_decoder@^1.1.1", "string_decoder@^1.3.0": + "integrity" "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==" + "resolved" "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz" + "version" "1.3.0" + dependencies: + "safe-buffer" "~5.2.0" + +"string_decoder@~0.10.x": + "integrity" "sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ==" + "resolved" "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz" + "version" "0.10.31" + +"string_decoder@~1.1.1": + "integrity" "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==" + "resolved" "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz" + "version" "1.1.1" + dependencies: + "safe-buffer" "~5.1.0" + +"string-length@^4.0.1": + "integrity" "sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==" + "resolved" "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz" + "version" "4.0.2" + dependencies: + "char-regex" "^1.0.2" + "strip-ansi" "^6.0.0" + +"string-width@^1.0.1": + "integrity" "sha512-0XsVpQLnVCXHJfyEs8tC0zpTVIr5PKKsQtkT29IwupnPTjtPmQ3xT/4yCREF9hYkV/3M3kzcUTSAZT6a6h81tw==" + "resolved" "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz" + "version" "1.0.2" + dependencies: + "code-point-at" "^1.0.0" + "is-fullwidth-code-point" "^1.0.0" + "strip-ansi" "^3.0.0" + +"string-width@^1.0.2 || 2 || 3 || 4", "string-width@^4.1.0", "string-width@^4.2.0", "string-width@^4.2.3": + "integrity" "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==" + "resolved" "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz" + "version" "4.2.3" + dependencies: + "emoji-regex" "^8.0.0" + "is-fullwidth-code-point" "^3.0.0" + "strip-ansi" "^6.0.1" + +"strip-ansi@^3.0.0", "strip-ansi@^3.0.1": + "integrity" "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==" + "resolved" "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz" + "version" "3.0.1" + dependencies: + "ansi-regex" "^2.0.0" + +"strip-ansi@^6.0.0", "strip-ansi@^6.0.1": + "integrity" "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==" + "resolved" "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz" + "version" "6.0.1" + dependencies: + "ansi-regex" "^5.0.1" + +"strip-bom@^4.0.0": + "integrity" "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==" + "resolved" "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz" + "version" "4.0.0" + +"strip-final-newline@^2.0.0": + "integrity" "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==" + "resolved" "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz" + "version" "2.0.0" + +"strip-json-comments@^3.1.1": + "integrity" "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==" + "resolved" "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz" + "version" "3.1.1" + +"strip-json-comments@~2.0.1": + "integrity" "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==" + "resolved" "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz" + "version" "2.0.1" + +"supports-color@^5.3.0": + "integrity" "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==" + "resolved" "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz" + "version" "5.5.0" + dependencies: + "has-flag" "^3.0.0" + +"supports-color@^7.1.0": + "integrity" "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==" + "resolved" "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz" + "version" "7.2.0" + dependencies: + "has-flag" "^4.0.0" + +"supports-color@^8.0.0": + "integrity" "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==" + "resolved" "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz" + "version" "8.1.1" + dependencies: + "has-flag" "^4.0.0" + +"supports-preserve-symlinks-flag@^1.0.0": + "integrity" "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==" + "resolved" "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz" + "version" "1.0.0" + +"tapable@^2.1.1", "tapable@^2.2.0": + "integrity" "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==" + "resolved" "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz" + "version" "2.2.1" + +"tar-fs@^2.0.0": + "integrity" "sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==" + "resolved" "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.1.tgz" + "version" "2.1.1" + dependencies: + "chownr" "^1.1.1" + "mkdirp-classic" "^0.5.2" + "pump" "^3.0.0" + "tar-stream" "^2.1.4" + +"tar-stream@^2.1.4": + "integrity" "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==" + "resolved" "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz" + "version" "2.2.0" + dependencies: + "bl" "^4.0.3" + "end-of-stream" "^1.4.1" + "fs-constants" "^1.0.0" + "inherits" "^2.0.3" + "readable-stream" "^3.1.1" + +"tar-stream@^3.1.6": + "integrity" "sha512-B/UyjYwPpMBv+PaFSWAmtYjwdrlEaZQEhMIBFNC5oEG8lpiW8XjcSdmEaClj28ArfKScKHs2nshz3k2le6crsg==" + "resolved" "https://registry.npmjs.org/tar-stream/-/tar-stream-3.1.6.tgz" + "version" "3.1.6" + dependencies: + "b4a" "^1.6.4" + "fast-fifo" "^1.2.0" + "streamx" "^2.15.0" + +"tar@^4.4.19": + "integrity" "sha512-FCEhQ/4rE1zYv9rYXJw/msRqsnmlje5jHP6huWeBZ704jUTy02c5AZyWujpMR1ax6mVw9NyJMfuK2CMDWVIfgA==" + "resolved" "https://registry.npmjs.org/tar/-/tar-2.2.2.tgz" + "version" "2.2.2" + dependencies: + "block-stream" "*" + "fstream" "^1.0.12" + "inherits" "2" + +"tar@^6.1.11", "tar@^6.1.2": + "integrity" "sha512-/Wo7DcT0u5HUV486xg675HtjNd3BXZ6xDbzsCUZPt5iw8bTQ63bP0Raut3mvro9u+CUyq7YQd8Cx55fsZXxqLQ==" + "resolved" "https://registry.npmjs.org/tar/-/tar-6.2.0.tgz" + "version" "6.2.0" + dependencies: + "chownr" "^2.0.0" + "fs-minipass" "^2.0.0" + "minipass" "^5.0.0" + "minizlib" "^2.1.1" + "mkdirp" "^1.0.3" + "yallist" "^4.0.0" + +"terser-webpack-plugin@^5.3.7": + "integrity" "sha512-ZuXsqE07EcggTWQjXUj+Aot/OMcD0bMKGgF63f7UxYcu5/AJF53aIpK1YoP5xR9l6s/Hy2b+t1AM0bLNPRuhwA==" + "resolved" "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.9.tgz" + "version" "5.3.9" dependencies: "@jridgewell/trace-mapping" "^0.3.17" - jest-worker "^27.4.5" - schema-utils "^3.1.1" - serialize-javascript "^6.0.1" - terser "^5.16.8" + "jest-worker" "^27.4.5" + "schema-utils" "^3.1.1" + "serialize-javascript" "^6.0.1" + "terser" "^5.16.8" -terser@^5.16.8: - version "5.20.0" - resolved "https://registry.npmjs.org/terser/-/terser-5.20.0.tgz" - integrity sha512-e56ETryaQDyebBwJIWYB2TT6f2EZ0fL0sW/JRXNMN26zZdKi2u/E/5my5lG6jNxym6qsrVXfFRmOdV42zlAgLQ== +"terser@^5.16.8": + "integrity" "sha512-e56ETryaQDyebBwJIWYB2TT6f2EZ0fL0sW/JRXNMN26zZdKi2u/E/5my5lG6jNxym6qsrVXfFRmOdV42zlAgLQ==" + "resolved" "https://registry.npmjs.org/terser/-/terser-5.20.0.tgz" + "version" "5.20.0" dependencies: "@jridgewell/source-map" "^0.3.3" - acorn "^8.8.2" - commander "^2.20.0" - source-map-support "~0.5.20" + "acorn" "^8.8.2" + "commander" "^2.20.0" + "source-map-support" "~0.5.20" -test-exclude@^6.0.0: - version "6.0.0" - resolved "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz" - integrity sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w== +"test-exclude@^6.0.0": + "integrity" "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==" + "resolved" "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz" + "version" "6.0.0" dependencies: "@istanbuljs/schema" "^0.1.2" - glob "^7.1.4" - minimatch "^3.0.4" - -text-table@^0.2.0: - version "0.2.0" - resolved "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz" - integrity sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw== - -through2@~0.6.3: - version "0.6.5" - resolved "https://registry.npmjs.org/through2/-/through2-0.6.5.tgz" - integrity sha512-RkK/CCESdTKQZHdmKICijdKKsCRVHs5KsLZ6pACAmF/1GPUQhonHSXWNERctxEp7RmvjdNbZTL5z9V7nSCXKcg== - dependencies: - readable-stream ">=1.0.33-1 <1.1.0-0" - xtend ">=4.0.0 <4.1.0-0" - -tmpl@1.0.5: - version "1.0.5" - resolved "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz" - integrity sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw== - -to-fast-properties@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz" - integrity sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog== - -to-regex-range@^5.0.1: - version "5.0.1" - resolved "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz" - integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== - dependencies: - is-number "^7.0.0" - -tough-cookie@^4.1.3, tough-cookie@~2.5.0: - version "4.1.3" - resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-4.1.3.tgz#97b9adb0728b42280aa3d814b6b999b2ff0318bf" - integrity sha512-aX/y5pVRkfRnfmuX+OdbSdXvPe6ieKX/G2s7e98f4poJHnqH3281gDPm/metm6E/WRamfx7WC4HUqkWHfQHprw== - dependencies: - psl "^1.1.33" - punycode "^2.1.1" - universalify "^0.2.0" - url-parse "^1.5.3" - -ts-jest@^29.0.5: - version "29.1.1" - resolved "https://registry.npmjs.org/ts-jest/-/ts-jest-29.1.1.tgz" - integrity sha512-D6xjnnbP17cC85nliwGiL+tpoKN0StpgE0TeOjXQTU6MVCfsB4v7aW05CgQ/1OywGb0x/oy9hHFnN+sczTiRaA== - dependencies: - bs-logger "0.x" - fast-json-stable-stringify "2.x" - jest-util "^29.0.0" - json5 "^2.2.3" - lodash.memoize "4.x" - make-error "1.x" - semver "^7.5.3" - yargs-parser "^21.0.1" - -tslib@^1.8.1: - version "1.14.1" - resolved "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz" - integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== - -tsutils@^3.21.0: - version "3.21.0" - resolved "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz" - integrity sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA== - dependencies: - tslib "^1.8.1" - -tunnel-agent@^0.6.0: - version "0.6.0" - resolved "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz" - integrity sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w== - dependencies: - safe-buffer "^5.0.1" - -tweetnacl@^0.14.3, tweetnacl@~0.14.0: - version "0.14.5" - resolved "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz" - integrity sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA== - -type-check@^0.4.0, type-check@~0.4.0: - version "0.4.0" - resolved "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz" - integrity sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew== - dependencies: - prelude-ls "^1.2.1" - -type-detect@4.0.8: - version "4.0.8" - resolved "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz" - integrity sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g== - -type-fest@^0.20.2: - version "0.20.2" - resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz" - integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ== - -type-fest@^0.21.3: - version "0.21.3" - resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz" - integrity sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w== - -type@^1.0.1: - version "1.2.0" - resolved "https://registry.yarnpkg.com/type/-/type-1.2.0.tgz#848dd7698dafa3e54a6c479e759c4bc3f18847a0" - integrity sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg== - -type@^2.7.2: - version "2.7.2" - resolved "https://registry.yarnpkg.com/type/-/type-2.7.2.tgz#2376a15a3a28b1efa0f5350dcf72d24df6ef98d0" - integrity sha512-dzlvlNlt6AXU7EBSfpAscydQ7gXB+pPGsPnfJnZpiNJBDj7IaJzQlBZYGdEi4R9HmPdBv2XmWJ6YUtoTa7lmCw== - -typedoc-plugin-markdown@^3.14.0: - version "3.15.4" - resolved "https://registry.npmjs.org/typedoc-plugin-markdown/-/typedoc-plugin-markdown-3.15.4.tgz" - integrity sha512-KpjFL/NDrQAbY147oIoOgob2vAdEchsMcTVd6+e6H2lC1l5xhi48bhP/fMJI7qYQ8th5nubervgqw51z7gY66A== - dependencies: - handlebars "^4.7.7" - -typedoc@^0.24.6: - version "0.24.8" - resolved "https://registry.npmjs.org/typedoc/-/typedoc-0.24.8.tgz" - integrity sha512-ahJ6Cpcvxwaxfu4KtjA8qZNqS43wYt6JL27wYiIgl1vd38WW/KWX11YuAeZhuz9v+ttrutSsgK+XO1CjL1kA3w== - dependencies: - lunr "^2.3.9" - marked "^4.3.0" - minimatch "^9.0.0" - shiki "^0.14.1" - -typescript@^4.9.4: - version "4.9.5" - resolved "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz" - integrity sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g== - -uglify-js@^3.1.4: - version "3.17.4" - resolved "https://registry.npmjs.org/uglify-js/-/uglify-js-3.17.4.tgz" - integrity sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g== - -unique-filename@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/unique-filename/-/unique-filename-3.0.0.tgz#48ba7a5a16849f5080d26c760c86cf5cf05770ea" - integrity sha512-afXhuC55wkAmZ0P18QsVE6kp8JaxrEokN2HGIoIVv2ijHQd419H0+6EigAFcIzXeMIkcIkNBpB3L/DXB3cTS/g== - dependencies: - unique-slug "^4.0.0" - -unique-slug@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/unique-slug/-/unique-slug-4.0.0.tgz#6bae6bb16be91351badd24cdce741f892a6532e3" - integrity sha512-WrcA6AyEfqDX5bWige/4NQfPZMtASNVxdmWR76WESYQVAACSgWcR6e9i0mofqqBxYFtL4oAxPIptY73/0YE1DQ== - dependencies: - imurmurhash "^0.1.4" - -universalify@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.2.0.tgz#6451760566fa857534745ab1dde952d1b1761be0" - integrity sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg== - -universalify@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/universalify/-/universalify-2.0.0.tgz#75a4984efedc4b08975c5aeb73f530d02df25717" - integrity sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ== - -update-browserslist-db@^1.0.11: - version "1.0.11" - resolved "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.11.tgz" - integrity sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA== - dependencies: - escalade "^3.1.1" - picocolors "^1.0.0" - -uri-js@^4.2.2: - version "4.4.1" - resolved "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz" - integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg== - dependencies: - punycode "^2.1.0" - -url-join@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/url-join/-/url-join-4.0.1.tgz#b642e21a2646808ffa178c4c5fda39844e12cde7" - integrity sha512-jk1+QP6ZJqyOiuEI9AEWQfju/nB2Pw466kbA0LEZljHwKeMgd9WrAEgEGxjPDD2+TNbbb37rTyhEfrCXfuKXnA== - -url-parse@^1.5.3: - version "1.5.10" - resolved "https://registry.yarnpkg.com/url-parse/-/url-parse-1.5.10.tgz#9d3c2f736c1d75dd3bd2be507dcc111f1e2ea9c1" - integrity sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ== - dependencies: - querystringify "^2.1.1" - requires-port "^1.0.0" - -url-template@~2.0.6: - version "2.0.8" - resolved "https://registry.npmjs.org/url-template/-/url-template-2.0.8.tgz" - integrity sha512-XdVKMF4SJ0nP/O7XIPB0JwAEuT9lDIYnNsK8yGVe43y0AWoKeJNdv3ZNWh7ksJ6KqQFjOO6ox/VEitLnaVNufw== - -util-deprecate@^1.0.1, util-deprecate@~1.0.1: - version "1.0.2" - resolved "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz" - integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw== - -util-extend@^1.0.1: - version "1.0.3" - resolved "https://registry.yarnpkg.com/util-extend/-/util-extend-1.0.3.tgz#a7c216d267545169637b3b6edc6ca9119e2ff93f" - integrity sha512-mLs5zAK+ctllYBj+iAQvlDCwoxU/WDOUaJkcFudeiAX6OajC6BKXJUa9a+tbtkC11dz2Ufb7h0lyvIOVn4LADA== - -uuid@^3.3.2: - version "3.4.0" - resolved "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz" - integrity sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A== - -v8-to-istanbul@^9.0.1: - version "9.1.0" - resolved "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.1.0.tgz" - integrity sha512-6z3GW9x8G1gd+JIIgQQQxXuiJtCXeAjp6RaPEPLv62mH3iPHPxV6W3robxtCzNErRo6ZwTmzWhsbNvjyEBKzKA== + "glob" "^7.1.4" + "minimatch" "^3.0.4" + +"text-table@^0.2.0": + "integrity" "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==" + "resolved" "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz" + "version" "0.2.0" + +"through2@~0.6.3": + "integrity" "sha512-RkK/CCESdTKQZHdmKICijdKKsCRVHs5KsLZ6pACAmF/1GPUQhonHSXWNERctxEp7RmvjdNbZTL5z9V7nSCXKcg==" + "resolved" "https://registry.npmjs.org/through2/-/through2-0.6.5.tgz" + "version" "0.6.5" + dependencies: + "readable-stream" ">=1.0.33-1 <1.1.0-0" + "xtend" ">=4.0.0 <4.1.0-0" + +"tmpl@1.0.5": + "integrity" "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==" + "resolved" "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz" + "version" "1.0.5" + +"to-fast-properties@^2.0.0": + "integrity" "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==" + "resolved" "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz" + "version" "2.0.0" + +"to-regex-range@^5.0.1": + "integrity" "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==" + "resolved" "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz" + "version" "5.0.1" + dependencies: + "is-number" "^7.0.0" + +"tough-cookie@~2.5.0": + "integrity" "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==" + "resolved" "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz" + "version" "2.5.0" + dependencies: + "psl" "^1.1.28" + "punycode" "^2.1.1" + +"ts-jest@^29.0.5": + "integrity" "sha512-D6xjnnbP17cC85nliwGiL+tpoKN0StpgE0TeOjXQTU6MVCfsB4v7aW05CgQ/1OywGb0x/oy9hHFnN+sczTiRaA==" + "resolved" "https://registry.npmjs.org/ts-jest/-/ts-jest-29.1.1.tgz" + "version" "29.1.1" + dependencies: + "bs-logger" "0.x" + "fast-json-stable-stringify" "2.x" + "jest-util" "^29.0.0" + "json5" "^2.2.3" + "lodash.memoize" "4.x" + "make-error" "1.x" + "semver" "^7.5.3" + "yargs-parser" "^21.0.1" + +"tslib@^1.8.1": + "integrity" "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + "resolved" "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz" + "version" "1.14.1" + +"tsutils@^3.21.0": + "integrity" "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==" + "resolved" "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz" + "version" "3.21.0" + dependencies: + "tslib" "^1.8.1" + +"tunnel-agent@^0.6.0": + "integrity" "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==" + "resolved" "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz" + "version" "0.6.0" + dependencies: + "safe-buffer" "^5.0.1" + +"tweetnacl@^0.14.3", "tweetnacl@~0.14.0": + "integrity" "sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==" + "resolved" "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz" + "version" "0.14.5" + +"type-check@^0.4.0", "type-check@~0.4.0": + "integrity" "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==" + "resolved" "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz" + "version" "0.4.0" + dependencies: + "prelude-ls" "^1.2.1" + +"type-detect@4.0.8": + "integrity" "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==" + "resolved" "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz" + "version" "4.0.8" + +"type-fest@^0.20.2": + "integrity" "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==" + "resolved" "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz" + "version" "0.20.2" + +"type-fest@^0.21.3": + "integrity" "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==" + "resolved" "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz" + "version" "0.21.3" + +"type@^1.0.1": + "integrity" "sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==" + "resolved" "https://registry.npmjs.org/type/-/type-1.2.0.tgz" + "version" "1.2.0" + +"type@^2.7.2": + "integrity" "sha512-dzlvlNlt6AXU7EBSfpAscydQ7gXB+pPGsPnfJnZpiNJBDj7IaJzQlBZYGdEi4R9HmPdBv2XmWJ6YUtoTa7lmCw==" + "resolved" "https://registry.npmjs.org/type/-/type-2.7.2.tgz" + "version" "2.7.2" + +"typedoc-plugin-markdown@^3.14.0": + "integrity" "sha512-KpjFL/NDrQAbY147oIoOgob2vAdEchsMcTVd6+e6H2lC1l5xhi48bhP/fMJI7qYQ8th5nubervgqw51z7gY66A==" + "resolved" "https://registry.npmjs.org/typedoc-plugin-markdown/-/typedoc-plugin-markdown-3.15.4.tgz" + "version" "3.15.4" + dependencies: + "handlebars" "^4.7.7" + +"typedoc@^0.24.6", "typedoc@>=0.24.0": + "integrity" "sha512-ahJ6Cpcvxwaxfu4KtjA8qZNqS43wYt6JL27wYiIgl1vd38WW/KWX11YuAeZhuz9v+ttrutSsgK+XO1CjL1kA3w==" + "resolved" "https://registry.npmjs.org/typedoc/-/typedoc-0.24.8.tgz" + "version" "0.24.8" + dependencies: + "lunr" "^2.3.9" + "marked" "^4.3.0" + "minimatch" "^9.0.0" + "shiki" "^0.14.1" + +"typescript@^4.9.4", "typescript@>=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta", "typescript@>=4.3 <6", "typescript@4.6.x || 4.7.x || 4.8.x || 4.9.x || 5.0.x || 5.1.x": + "integrity" "sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==" + "resolved" "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz" + "version" "4.9.5" + +"uglify-js@^3.1.4": + "integrity" "sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g==" + "resolved" "https://registry.npmjs.org/uglify-js/-/uglify-js-3.17.4.tgz" + "version" "3.17.4" + +"unique-filename@^2.0.0": + "integrity" "sha512-ODWHtkkdx3IAR+veKxFV+VBkUMcN+FaqzUUd7IZzt+0zhDZFPFxhlqwPF3YQvMHx1TD0tdgYl+kuPnJ8E6ql7A==" + "resolved" "https://registry.npmjs.org/unique-filename/-/unique-filename-2.0.1.tgz" + "version" "2.0.1" + dependencies: + "unique-slug" "^3.0.0" + +"unique-slug@^3.0.0": + "integrity" "sha512-8EyMynh679x/0gqE9fT9oilG+qEt+ibFyqjuVTsZn1+CMxH+XLlpvr2UZx4nVcCwTpx81nICr2JQFkM+HPLq4w==" + "resolved" "https://registry.npmjs.org/unique-slug/-/unique-slug-3.0.0.tgz" + "version" "3.0.0" + dependencies: + "imurmurhash" "^0.1.4" + +"universalify@^2.0.0": + "integrity" "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==" + "resolved" "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz" + "version" "2.0.1" + +"update-browserslist-db@^1.0.11": + "integrity" "sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA==" + "resolved" "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.11.tgz" + "version" "1.0.11" + dependencies: + "escalade" "^3.1.1" + "picocolors" "^1.0.0" + +"uri-js@^4.2.2": + "integrity" "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==" + "resolved" "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz" + "version" "4.4.1" + dependencies: + "punycode" "^2.1.0" + +"url-join@^4.0.1": + "integrity" "sha512-jk1+QP6ZJqyOiuEI9AEWQfju/nB2Pw466kbA0LEZljHwKeMgd9WrAEgEGxjPDD2+TNbbb37rTyhEfrCXfuKXnA==" + "resolved" "https://registry.npmjs.org/url-join/-/url-join-4.0.1.tgz" + "version" "4.0.1" + +"url-template@~2.0.6": + "integrity" "sha512-XdVKMF4SJ0nP/O7XIPB0JwAEuT9lDIYnNsK8yGVe43y0AWoKeJNdv3ZNWh7ksJ6KqQFjOO6ox/VEitLnaVNufw==" + "resolved" "https://registry.npmjs.org/url-template/-/url-template-2.0.8.tgz" + "version" "2.0.8" + +"util-deprecate@^1.0.1", "util-deprecate@~1.0.1": + "integrity" "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" + "resolved" "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz" + "version" "1.0.2" + +"util-extend@^1.0.1": + "integrity" "sha512-mLs5zAK+ctllYBj+iAQvlDCwoxU/WDOUaJkcFudeiAX6OajC6BKXJUa9a+tbtkC11dz2Ufb7h0lyvIOVn4LADA==" + "resolved" "https://registry.npmjs.org/util-extend/-/util-extend-1.0.3.tgz" + "version" "1.0.3" + +"uuid@^3.3.2": + "integrity" "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==" + "resolved" "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz" + "version" "3.4.0" + +"v8-to-istanbul@^9.0.1": + "integrity" "sha512-6z3GW9x8G1gd+JIIgQQQxXuiJtCXeAjp6RaPEPLv62mH3iPHPxV6W3robxtCzNErRo6ZwTmzWhsbNvjyEBKzKA==" + "resolved" "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.1.0.tgz" + "version" "9.1.0" dependencies: "@jridgewell/trace-mapping" "^0.3.12" "@types/istanbul-lib-coverage" "^2.0.1" - convert-source-map "^1.6.0" + "convert-source-map" "^1.6.0" -verror@1.10.0: - version "1.10.0" - resolved "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz" - integrity sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw== +"verror@1.10.0": + "integrity" "sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw==" + "resolved" "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz" + "version" "1.10.0" dependencies: - assert-plus "^1.0.0" - core-util-is "1.0.2" - extsprintf "^1.2.0" + "assert-plus" "^1.0.0" + "core-util-is" "1.0.2" + "extsprintf" "^1.2.0" -vscode-oniguruma@^1.7.0: - version "1.7.0" - resolved "https://registry.npmjs.org/vscode-oniguruma/-/vscode-oniguruma-1.7.0.tgz" - integrity sha512-L9WMGRfrjOhgHSdOYgCt/yRMsXzLDJSL7BPrOZt73gU0iWO4mpqzqQzOz5srxqTvMBaR0XZTSrVWo4j55Rc6cA== +"vscode-oniguruma@^1.7.0": + "integrity" "sha512-L9WMGRfrjOhgHSdOYgCt/yRMsXzLDJSL7BPrOZt73gU0iWO4mpqzqQzOz5srxqTvMBaR0XZTSrVWo4j55Rc6cA==" + "resolved" "https://registry.npmjs.org/vscode-oniguruma/-/vscode-oniguruma-1.7.0.tgz" + "version" "1.7.0" -vscode-textmate@^8.0.0: - version "8.0.0" - resolved "https://registry.npmjs.org/vscode-textmate/-/vscode-textmate-8.0.0.tgz" - integrity sha512-AFbieoL7a5LMqcnOF04ji+rpXadgOXnZsxQr//r83kLPr7biP7am3g9zbaZIaBGwBRWeSvoMD4mgPdX3e4NWBg== +"vscode-textmate@^8.0.0": + "integrity" "sha512-AFbieoL7a5LMqcnOF04ji+rpXadgOXnZsxQr//r83kLPr7biP7am3g9zbaZIaBGwBRWeSvoMD4mgPdX3e4NWBg==" + "resolved" "https://registry.npmjs.org/vscode-textmate/-/vscode-textmate-8.0.0.tgz" + "version" "8.0.0" -walker@^1.0.8: - version "1.0.8" - resolved "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz" - integrity sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ== +"walker@^1.0.8": + "integrity" "sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==" + "resolved" "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz" + "version" "1.0.8" dependencies: - makeerror "1.0.12" + "makeerror" "1.0.12" -watchpack@^2.4.0: - version "2.4.0" - resolved "https://registry.npmjs.org/watchpack/-/watchpack-2.4.0.tgz" - integrity sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg== +"watchpack@^2.4.0": + "integrity" "sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg==" + "resolved" "https://registry.npmjs.org/watchpack/-/watchpack-2.4.0.tgz" + "version" "2.4.0" dependencies: - glob-to-regexp "^0.4.1" - graceful-fs "^4.1.2" + "glob-to-regexp" "^0.4.1" + "graceful-fs" "^4.1.2" -webpack-cli@^5.1.4: - version "5.1.4" - resolved "https://registry.npmjs.org/webpack-cli/-/webpack-cli-5.1.4.tgz" - integrity sha512-pIDJHIEI9LR0yxHXQ+Qh95k2EvXpWzZ5l+d+jIo+RdSm9MiHfzazIxwwni/p7+x4eJZuvG1AJwgC4TNQ7NRgsg== +"webpack-cli@^5.1.4", "webpack-cli@5.x.x": + "integrity" "sha512-pIDJHIEI9LR0yxHXQ+Qh95k2EvXpWzZ5l+d+jIo+RdSm9MiHfzazIxwwni/p7+x4eJZuvG1AJwgC4TNQ7NRgsg==" + "resolved" "https://registry.npmjs.org/webpack-cli/-/webpack-cli-5.1.4.tgz" + "version" "5.1.4" dependencies: "@discoveryjs/json-ext" "^0.5.0" "@webpack-cli/configtest" "^2.1.1" "@webpack-cli/info" "^2.0.2" "@webpack-cli/serve" "^2.0.5" - colorette "^2.0.14" - commander "^10.0.1" - cross-spawn "^7.0.3" - envinfo "^7.7.3" - fastest-levenshtein "^1.0.12" - import-local "^3.0.2" - interpret "^3.1.1" - rechoir "^0.8.0" - webpack-merge "^5.7.3" - -webpack-merge@^5.7.3: - version "5.9.0" - resolved "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.9.0.tgz" - integrity sha512-6NbRQw4+Sy50vYNTw7EyOn41OZItPiXB8GNv3INSoe3PSFaHJEz3SHTrYVaRm2LilNGnFUzh0FAwqPEmU/CwDg== - dependencies: - clone-deep "^4.0.1" - wildcard "^2.0.0" - -webpack-sources@^3.2.3: - version "3.2.3" - resolved "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz" - integrity sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w== - -webpack@^5.88.2: - version "5.88.2" - resolved "https://registry.npmjs.org/webpack/-/webpack-5.88.2.tgz" - integrity sha512-JmcgNZ1iKj+aiR0OvTYtWQqJwq37Pf683dY9bVORwVbUrDhLhdn/PlO2sHsFHPkj7sHNQF3JwaAkp49V+Sq1tQ== + "colorette" "^2.0.14" + "commander" "^10.0.1" + "cross-spawn" "^7.0.3" + "envinfo" "^7.7.3" + "fastest-levenshtein" "^1.0.12" + "import-local" "^3.0.2" + "interpret" "^3.1.1" + "rechoir" "^0.8.0" + "webpack-merge" "^5.7.3" + +"webpack-merge@^5.7.3": + "integrity" "sha512-6NbRQw4+Sy50vYNTw7EyOn41OZItPiXB8GNv3INSoe3PSFaHJEz3SHTrYVaRm2LilNGnFUzh0FAwqPEmU/CwDg==" + "resolved" "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.9.0.tgz" + "version" "5.9.0" + dependencies: + "clone-deep" "^4.0.1" + "wildcard" "^2.0.0" + +"webpack-sources@^3.2.3": + "integrity" "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==" + "resolved" "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz" + "version" "3.2.3" + +"webpack@^5.1.0", "webpack@^5.88.2", "webpack@5.x.x": + "integrity" "sha512-JmcgNZ1iKj+aiR0OvTYtWQqJwq37Pf683dY9bVORwVbUrDhLhdn/PlO2sHsFHPkj7sHNQF3JwaAkp49V+Sq1tQ==" + "resolved" "https://registry.npmjs.org/webpack/-/webpack-5.88.2.tgz" + "version" "5.88.2" dependencies: "@types/eslint-scope" "^3.7.3" "@types/estree" "^1.0.0" "@webassemblyjs/ast" "^1.11.5" "@webassemblyjs/wasm-edit" "^1.11.5" "@webassemblyjs/wasm-parser" "^1.11.5" - acorn "^8.7.1" - acorn-import-assertions "^1.9.0" - browserslist "^4.14.5" - chrome-trace-event "^1.0.2" - enhanced-resolve "^5.15.0" - es-module-lexer "^1.2.1" - eslint-scope "5.1.1" - events "^3.2.0" - glob-to-regexp "^0.4.1" - graceful-fs "^4.2.9" - json-parse-even-better-errors "^2.3.1" - loader-runner "^4.2.0" - mime-types "^2.1.27" - neo-async "^2.6.2" - schema-utils "^3.2.0" - tapable "^2.1.1" - terser-webpack-plugin "^5.3.7" - watchpack "^2.4.0" - webpack-sources "^3.2.3" - -which@1, which@^1.2.10: - version "1.3.1" - resolved "https://registry.npmjs.org/which/-/which-1.3.1.tgz" - integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ== - dependencies: - isexe "^2.0.0" - -which@^2.0.1, which@^2.0.2: - version "2.0.2" - resolved "https://registry.npmjs.org/which/-/which-2.0.2.tgz" - integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== - dependencies: - isexe "^2.0.0" - -wide-align@^1.1.0, wide-align@^1.1.5: - version "1.1.5" - resolved "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz" - integrity sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg== - dependencies: - string-width "^1.0.2 || 2 || 3 || 4" - -wildcard@^2.0.0: - version "2.0.1" - resolved "https://registry.npmjs.org/wildcard/-/wildcard-2.0.1.tgz" - integrity sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ== - -word-wrap@^1.2.4: - version "1.2.5" - resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.5.tgz#d2c45c6dd4fbce621a66f136cbe328afd0410b34" - integrity sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA== - -wordwrap@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz" - integrity sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q== - -"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0": - version "7.0.0" - resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" - integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== - dependencies: - ansi-styles "^4.0.0" - string-width "^4.1.0" - strip-ansi "^6.0.0" - -wrap-ansi@^7.0.0: - version "7.0.0" - resolved "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz" - integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== - dependencies: - ansi-styles "^4.0.0" - string-width "^4.1.0" - strip-ansi "^6.0.0" - -wrap-ansi@^8.1.0: - version "8.1.0" - resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-8.1.0.tgz#56dc22368ee570face1b49819975d9b9a5ead214" - integrity sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ== - dependencies: - ansi-styles "^6.1.0" - string-width "^5.0.1" - strip-ansi "^7.0.1" - -wrappy@1: - version "1.0.2" - resolved "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz" - integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== - -write-file-atomic@^4.0.2: - version "4.0.2" - resolved "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.2.tgz" - integrity sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg== - dependencies: - imurmurhash "^0.1.4" - signal-exit "^3.0.7" - -"xtend@>=4.0.0 <4.1.0-0", xtend@~4.0.1: - version "4.0.2" - resolved "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz" - integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ== - -y18n@^5.0.5: - version "5.0.8" - resolved "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz" - integrity sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA== - -yallist@^3.0.0, yallist@^3.0.2, yallist@^3.1.1: - version "3.1.1" - resolved "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz" - integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g== - -yallist@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz" - integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== - -yargs-parser@^21.0.1, yargs-parser@^21.1.1: - version "21.1.1" - resolved "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz" - integrity sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw== - -yargs@^17.3.1, yargs@^17.6.0: - version "17.7.2" - resolved "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz" - integrity sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w== - dependencies: - cliui "^8.0.1" - escalade "^3.1.1" - get-caller-file "^2.0.5" - require-directory "^2.1.1" - string-width "^4.2.3" - y18n "^5.0.5" - yargs-parser "^21.1.1" - -yocto-queue@^0.1.0: - version "0.1.0" - resolved "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz" - integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== + "acorn" "^8.7.1" + "acorn-import-assertions" "^1.9.0" + "browserslist" "^4.14.5" + "chrome-trace-event" "^1.0.2" + "enhanced-resolve" "^5.15.0" + "es-module-lexer" "^1.2.1" + "eslint-scope" "5.1.1" + "events" "^3.2.0" + "glob-to-regexp" "^0.4.1" + "graceful-fs" "^4.2.9" + "json-parse-even-better-errors" "^2.3.1" + "loader-runner" "^4.2.0" + "mime-types" "^2.1.27" + "neo-async" "^2.6.2" + "schema-utils" "^3.2.0" + "tapable" "^2.1.1" + "terser-webpack-plugin" "^5.3.7" + "watchpack" "^2.4.0" + "webpack-sources" "^3.2.3" + +"which@^1.2.10": + "integrity" "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==" + "resolved" "https://registry.npmjs.org/which/-/which-1.3.1.tgz" + "version" "1.3.1" + dependencies: + "isexe" "^2.0.0" + +"which@^2.0.1", "which@^2.0.2": + "integrity" "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==" + "resolved" "https://registry.npmjs.org/which/-/which-2.0.2.tgz" + "version" "2.0.2" + dependencies: + "isexe" "^2.0.0" + +"which@1": + "integrity" "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==" + "resolved" "https://registry.npmjs.org/which/-/which-1.3.1.tgz" + "version" "1.3.1" + dependencies: + "isexe" "^2.0.0" + +"wide-align@^1.1.0", "wide-align@^1.1.5": + "integrity" "sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==" + "resolved" "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz" + "version" "1.1.5" + dependencies: + "string-width" "^1.0.2 || 2 || 3 || 4" + +"wildcard@^2.0.0": + "integrity" "sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ==" + "resolved" "https://registry.npmjs.org/wildcard/-/wildcard-2.0.1.tgz" + "version" "2.0.1" + +"wordwrap@^1.0.0": + "integrity" "sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==" + "resolved" "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz" + "version" "1.0.0" + +"wrap-ansi@^7.0.0": + "integrity" "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==" + "resolved" "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz" + "version" "7.0.0" + dependencies: + "ansi-styles" "^4.0.0" + "string-width" "^4.1.0" + "strip-ansi" "^6.0.0" + +"wrappy@1": + "integrity" "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" + "resolved" "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz" + "version" "1.0.2" + +"write-file-atomic@^4.0.2": + "integrity" "sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==" + "resolved" "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.2.tgz" + "version" "4.0.2" + dependencies: + "imurmurhash" "^0.1.4" + "signal-exit" "^3.0.7" + +"xtend@>=4.0.0 <4.1.0-0", "xtend@~4.0.1": + "integrity" "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==" + "resolved" "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz" + "version" "4.0.2" + +"y18n@^5.0.5": + "integrity" "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==" + "resolved" "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz" + "version" "5.0.8" + +"yallist@^3.0.2": + "integrity" "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==" + "resolved" "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz" + "version" "3.1.1" + +"yallist@^4.0.0": + "integrity" "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + "resolved" "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz" + "version" "4.0.0" + +"yargs-parser@^21.0.1", "yargs-parser@^21.1.1": + "integrity" "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==" + "resolved" "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz" + "version" "21.1.1" + +"yargs@^17.3.1", "yargs@^17.6.0": + "integrity" "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==" + "resolved" "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz" + "version" "17.7.2" + dependencies: + "cliui" "^8.0.1" + "escalade" "^3.1.1" + "get-caller-file" "^2.0.5" + "require-directory" "^2.1.1" + "string-width" "^4.2.3" + "y18n" "^5.0.5" + "yargs-parser" "^21.1.1" + +"yocto-queue@^0.1.0": + "integrity" "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==" + "resolved" "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz" + "version" "0.1.0" From bd7c08f8b9a065312058a2279e161e8193f2a35a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tadeusz=20So=C5=9Bnierz?= Date: Thu, 16 Nov 2023 16:20:24 +0100 Subject: [PATCH 38/91] Add prepare_claim_outputs() (#1622) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Factor out prepare_claim_outputs() Signed-off-by: Tadeusz „tadzik” Sośnierz * Add node bindings for prepareClaimOutputs() Signed-off-by: Tadeusz „tadzik” Sośnierz * Add Python bindings for prepare_claim_outputs() Signed-off-by: Tadeusz „tadzik” Sośnierz * Fix an argument name Signed-off-by: Tadeusz „tadzik” Sośnierz * Add PrepareClaimOutputs to AccountMethod bindings Signed-off-by: Tadeusz „tadzik” Sośnierz * Fixup the nodejs bindings to prepareClaimOutputs() Signed-off-by: Tadeusz „tadzik” Sośnierz * Fixup Python bindings to prepareClaimOutputs() Signed-off-by: Tadeusz „tadzik” Sośnierz * Add Python and Typescript examples for prepareClaimOutputs() Signed-off-by: Tadeusz „tadzik” Sośnierz * Fix the explorer URL in consolidate_outputs() example Signed-off-by: Tadeusz „tadzik” Sośnierz * typo Signed-off-by: Tadeusz „tadzik” Sośnierz * Fix typescript formatting Signed-off-by: Tadeusz „tadzik” Sośnierz * Fix rust formatting Signed-off-by: Tadeusz „tadzik” Sośnierz * Remove new examples, per suggestion Signed-off-by: Tadeusz „tadzik” Sośnierz * sigh Signed-off-by: Tadeusz „tadzik” Sośnierz * Add changelogs for prepare_claim_outputs() Signed-off-by: Tadeusz „tadzik” Sośnierz * Update bindings/nodejs/CHANGELOG.md Co-authored-by: Thoralf-M <46689931+Thoralf-M@users.noreply.github.com> --------- Signed-off-by: Tadeusz „tadzik” Sośnierz Co-authored-by: Thoralf-M <46689931+Thoralf-M@users.noreply.github.com> --- bindings/core/src/method/account.rs | 4 + bindings/core/src/method_handler/account.rs | 4 + bindings/core/src/response.rs | 1 + bindings/nodejs/CHANGELOG.md | 1 + .../nodejs/lib/types/wallet/bridge/account.ts | 7 ++ .../nodejs/lib/types/wallet/bridge/index.ts | 2 + bindings/nodejs/lib/wallet/account.ts | 23 ++++- bindings/python/CHANGELOG.md | 1 + .../consolidate_outputs.py | 2 +- bindings/python/iota_sdk/wallet/account.py | 10 +- sdk/CHANGELOG.md | 6 ++ .../account/operations/output_claiming.rs | 91 +++++++++---------- 12 files changed, 100 insertions(+), 52 deletions(-) diff --git a/bindings/core/src/method/account.rs b/bindings/core/src/method/account.rs index 4a1ca46b2a..4a0a71e425 100644 --- a/bindings/core/src/method/account.rs +++ b/bindings/core/src/method/account.rs @@ -140,6 +140,10 @@ pub enum AccountMethod { burn: BurnDto, options: Option, }, + /// Claim outputs. + /// Expected response: [`PreparedTransaction`](crate::Response::PreparedTransaction) + #[serde(rename_all = "camelCase")] + PrepareClaimOutputs { output_ids_to_claim: Vec }, /// Consolidate outputs. /// Expected response: [`PreparedTransaction`](crate::Response::PreparedTransaction) PrepareConsolidateOutputs { params: ConsolidationParams }, diff --git a/bindings/core/src/method_handler/account.rs b/bindings/core/src/method_handler/account.rs index 23e60bf4a1..c25a67db5b 100644 --- a/bindings/core/src/method_handler/account.rs +++ b/bindings/core/src/method_handler/account.rs @@ -115,6 +115,10 @@ pub(crate) async fn call_account_method_internal(account: &Account, method: Acco .await?; Response::PreparedTransaction(PreparedTransactionDataDto::from(&data)) } + AccountMethod::PrepareClaimOutputs { output_ids_to_claim } => { + let data = account.prepare_claim_outputs(output_ids_to_claim).await?; + Response::PreparedTransaction(PreparedTransactionDataDto::from(&data)) + } AccountMethod::PrepareConsolidateOutputs { params } => { let data = account.prepare_consolidate_outputs(params).await?; Response::PreparedTransaction(PreparedTransactionDataDto::from(&data)) diff --git a/bindings/core/src/response.rs b/bindings/core/src/response.rs index 69022b0d56..1ad54f6b42 100644 --- a/bindings/core/src/response.rs +++ b/bindings/core/src/response.rs @@ -332,6 +332,7 @@ pub enum Response { OutputsData(Vec), /// Response for: /// - [`PrepareBurn`](crate::method::AccountMethod::PrepareBurn), + /// - [`PrepareClaimOutputs`](crate::method::AccountMethod::PrepareClaimOutputs) /// - [`PrepareConsolidateOutputs`](crate::method::AccountMethod::PrepareConsolidateOutputs) /// - [`PrepareCreateAliasOutput`](crate::method::AccountMethod::PrepareCreateAliasOutput) /// - [`PrepareDecreaseVotingPower`](crate::method::AccountMethod::PrepareDecreaseVotingPower) diff --git a/bindings/nodejs/CHANGELOG.md b/bindings/nodejs/CHANGELOG.md index 262b03f24b..5dd21cd533 100644 --- a/bindings/nodejs/CHANGELOG.md +++ b/bindings/nodejs/CHANGELOG.md @@ -24,6 +24,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Added - `Utils:verifyTransactionSemantic()`; +- `Account::prepareClaimOutputs()` method; ### Fixed diff --git a/bindings/nodejs/lib/types/wallet/bridge/account.ts b/bindings/nodejs/lib/types/wallet/bridge/account.ts index 0996a8fc8a..4256e0c774 100644 --- a/bindings/nodejs/lib/types/wallet/bridge/account.ts +++ b/bindings/nodejs/lib/types/wallet/bridge/account.ts @@ -67,6 +67,13 @@ export type __PrepareBurnMethod__ = { }; }; +export type __PrepareClaimOutputsMethod__ = { + name: 'prepareClaimOutputs'; + data: { + outputIdsToClaim: OutputId[]; + }; +}; + export type __ClaimOutputsMethod__ = { name: 'claimOutputs'; data: { diff --git a/bindings/nodejs/lib/types/wallet/bridge/index.ts b/bindings/nodejs/lib/types/wallet/bridge/index.ts index 6f4cf77f67..02a1f96ec3 100644 --- a/bindings/nodejs/lib/types/wallet/bridge/index.ts +++ b/bindings/nodejs/lib/types/wallet/bridge/index.ts @@ -5,6 +5,7 @@ import type { __BuildFoundryOutputMethod__, __BuildNftOutputMethod__, __PrepareBurnMethod__, + __PrepareClaimOutputsMethod__, __ClaimOutputsMethod__, __PrepareConsolidateOutputsMethod__, __PrepareCreateAliasOutputMethod__, @@ -87,6 +88,7 @@ export type __AccountMethod__ = | __BuildNftOutputMethod__ | __PrepareBurnMethod__ | __ClaimOutputsMethod__ + | __PrepareClaimOutputsMethod__ | __PrepareConsolidateOutputsMethod__ | __PrepareCreateAliasOutputMethod__ | __DeregisterParticipationEventMethod__ diff --git a/bindings/nodejs/lib/wallet/account.ts b/bindings/nodejs/lib/wallet/account.ts index b829546148..333a25d2e2 100644 --- a/bindings/nodejs/lib/wallet/account.ts +++ b/bindings/nodejs/lib/wallet/account.ts @@ -242,17 +242,34 @@ export class Account { * @returns The resulting transaction. */ async claimOutputs(outputIds: OutputId[]): Promise { + return (await this.prepareClaimOutputs(outputIds)).send(); + } + + /** + * Claim basic or nft outputs that have additional unlock conditions + * to their `AddressUnlockCondition` from the account. + * @param outputIds The outputs to claim. + * @returns The prepared transaction. + */ + async prepareClaimOutputs( + outputIds: OutputId[], + ): Promise { const response = await this.methodHandler.callAccountMethod( this.meta.index, { - name: 'claimOutputs', + name: 'prepareClaimOutputs', data: { outputIdsToClaim: outputIds, }, }, ); - const parsed = JSON.parse(response) as Response; - return plainToInstance(Transaction, parsed.payload); + const parsed = JSON.parse( + response, + ) as Response; + return new PreparedTransaction( + plainToInstance(PreparedTransactionData, parsed.payload), + this, + ); } /** diff --git a/bindings/python/CHANGELOG.md b/bindings/python/CHANGELOG.md index 2e4d292eb3..70386b3a8b 100644 --- a/bindings/python/CHANGELOG.md +++ b/bindings/python/CHANGELOG.md @@ -24,6 +24,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Added - `Utils:verify_transaction_semantic()`; +- `Account::prepare_claim_outputs()` method; ## 1.1.1 - 2023-10-31 diff --git a/bindings/python/examples/how_tos/accounts_and_addresses/consolidate_outputs.py b/bindings/python/examples/how_tos/accounts_and_addresses/consolidate_outputs.py index 38810b71dd..a463a32e9a 100644 --- a/bindings/python/examples/how_tos/accounts_and_addresses/consolidate_outputs.py +++ b/bindings/python/examples/how_tos/accounts_and_addresses/consolidate_outputs.py @@ -50,7 +50,7 @@ block_id = account.retry_transaction_until_included(transaction.transactionId) print( - f'Transaction included: {os.environ["EXPLORER_ID"]}/block/{block_id}' + f'Transaction included: {os.environ["EXPLORER_URL"]}/block/{block_id}' ) # Sync account diff --git a/bindings/python/iota_sdk/wallet/account.py b/bindings/python/iota_sdk/wallet/account.py index 61acf7fa70..c6215a5193 100644 --- a/bindings/python/iota_sdk/wallet/account.py +++ b/bindings/python/iota_sdk/wallet/account.py @@ -564,8 +564,14 @@ def claim_outputs( self, output_ids_to_claim: List[OutputId]) -> Transaction: """Claim outputs. """ - return Transaction.from_dict(self._call_account_method( - 'claimOutputs', { + return self.prepare_claim_outputs(output_ids_to_claim).send() + + def prepare_claim_outputs( + self, output_ids_to_claim: List[OutputId]) -> PreparedTransaction: + """Claim outputs. + """ + return PreparedTransaction(self, self._call_account_method( + 'prepareClaimOutputs', { 'outputIdsToClaim': output_ids_to_claim } )) diff --git a/sdk/CHANGELOG.md b/sdk/CHANGELOG.md index f6cd51ec84..7910392051 100644 --- a/sdk/CHANGELOG.md +++ b/sdk/CHANGELOG.md @@ -19,6 +19,12 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Security --> +## Unreleased - 2023-MM-DD + +### Added + +- `Account::prepare_claim_outputs` method; + ## 1.1.2 - 2023-10-26 ### Added diff --git a/sdk/src/wallet/account/operations/output_claiming.rs b/sdk/src/wallet/account/operations/output_claiming.rs index f958837b2a..96cb3f656f 100644 --- a/sdk/src/wallet/account/operations/output_claiming.rs +++ b/sdk/src/wallet/account/operations/output_claiming.rs @@ -6,7 +6,7 @@ use std::collections::{HashMap, HashSet}; use serde::{Deserialize, Serialize}; use crate::{ - client::secret::SecretManage, + client::{api::PreparedTransactionData, secret::SecretManage}, types::block::{ address::Address, output::{ @@ -186,37 +186,44 @@ where I::IntoIter: Send, { log::debug!("[OUTPUT_CLAIMING] claim_outputs"); - let basic_outputs = self.get_basic_outputs_for_additional_inputs().await?; - self.claim_outputs_internal(output_ids_to_claim, basic_outputs) - .await - .map_err(|error| { - // Map InsufficientStorageDepositAmount error here because it's the result of InsufficientFunds in this - // case and then easier to handle - match error { - crate::wallet::Error::Block(block_error) => match *block_error { - crate::types::block::Error::InsufficientStorageDepositAmount { amount, required } => { - crate::wallet::Error::InsufficientFunds { - available: amount, - required, - } + let prepared_transaction = self.prepare_claim_outputs(output_ids_to_claim).await.map_err(|error| { + // Map InsufficientStorageDepositAmount error here because it's the result of InsufficientFunds in this + // case and then easier to handle + match error { + crate::wallet::Error::Block(block_error) => match *block_error { + crate::types::block::Error::InsufficientStorageDepositAmount { amount, required } => { + crate::wallet::Error::InsufficientFunds { + available: amount, + required, } - _ => crate::wallet::Error::Block(block_error), - }, - _ => error, - } - }) + } + _ => crate::wallet::Error::Block(block_error), + }, + _ => error, + } + })?; + + let claim_tx = self.sign_and_submit_transaction(prepared_transaction, None).await?; + + log::debug!( + "[OUTPUT_CLAIMING] Claiming transaction created: block_id: {:?} tx_id: {:?}", + claim_tx.block_id, + claim_tx.transaction_id + ); + Ok(claim_tx) } /// Try to claim basic outputs that have additional unlock conditions to their [AddressUnlockCondition]. - pub(crate) async fn claim_outputs_internal + Send>( + pub async fn prepare_claim_outputs + Send>( &self, output_ids_to_claim: I, - mut possible_additional_inputs: Vec, - ) -> crate::wallet::Result + ) -> crate::wallet::Result where I::IntoIter: Send, { - log::debug!("[OUTPUT_CLAIMING] claim_outputs_internal"); + log::debug!("[OUTPUT_CLAIMING] prepare_claim_outputs"); + + let mut possible_additional_inputs = self.get_basic_outputs_for_additional_inputs().await?; let current_time = self.client().get_time_checked().await?; let rent_structure = self.client().get_rent_structure().await?; @@ -406,29 +413,21 @@ where })?; } - let claim_tx = self - .finish_transaction( - outputs_to_send, - Some(TransactionOptions { - custom_inputs: Some( - outputs_to_claim - .iter() - .map(|o| o.output_id) - // add additional inputs - .chain(additional_inputs) - .collect::>(), - ), - ..Default::default() - }), - ) - .await?; - - log::debug!( - "[OUTPUT_CLAIMING] Claiming transaction created: block_id: {:?} tx_id: {:?}", - claim_tx.block_id, - claim_tx.transaction_id - ); - Ok(claim_tx) + self.prepare_transaction( + outputs_to_send, + Some(TransactionOptions { + custom_inputs: Some( + outputs_to_claim + .iter() + .map(|o| o.output_id) + // add additional inputs + .chain(additional_inputs) + .collect::>(), + ), + ..Default::default() + }), + ) + .await } } From 7bf364d4f91f0b41bc5a2decc7a6b6f5fcc47617 Mon Sep 17 00:00:00 2001 From: DaughterOfMars Date: Fri, 17 Nov 2023 03:47:32 -0500 Subject: [PATCH 39/91] Remove token supply from validation params (#1630) * Remove token supply from validation params * refactor TryFromDto --- bindings/core/src/method_handler/client.rs | 2 +- bindings/core/src/method_handler/wallet.rs | 4 +- .../offline_signing/3_send_transaction.rs | 2 +- sdk/src/client/api/types.rs | 23 +-- sdk/src/client/node_api/core/routes.rs | 4 +- sdk/src/types/block/core/basic.rs | 10 +- sdk/src/types/block/core/mod.rs | 14 +- sdk/src/types/block/core/signed_block.rs | 22 +-- sdk/src/types/block/core/validation.rs | 12 +- sdk/src/types/block/mana/allotment.rs | 9 +- sdk/src/types/block/payload/mod.rs | 10 +- .../block/payload/signed_transaction/mod.rs | 10 +- .../payload/signed_transaction/transaction.rs | 52 +++---- sdk/src/types/mod.rs | 131 +----------------- sdk/src/wallet/core/mod.rs | 14 +- .../transaction/build_transaction.rs | 2 +- sdk/src/wallet/types/mod.rs | 10 +- sdk/tests/client/signing/account.rs | 4 +- sdk/tests/client/signing/basic.rs | 6 +- sdk/tests/client/signing/mod.rs | 2 +- sdk/tests/client/signing/nft.rs | 2 +- 21 files changed, 123 insertions(+), 222 deletions(-) diff --git a/bindings/core/src/method_handler/client.rs b/bindings/core/src/method_handler/client.rs index 22bb79bb2f..91dffa93f4 100644 --- a/bindings/core/src/method_handler/client.rs +++ b/bindings/core/src/method_handler/client.rs @@ -196,7 +196,7 @@ pub(crate) async fn call_client_method_internal(client: &Client, method: ClientM client .post_block(&SignedBlock::try_from_dto_with_params( block, - client.get_protocol_parameters().await?, + &client.get_protocol_parameters().await?, )?) .await?, ), diff --git a/bindings/core/src/method_handler/wallet.rs b/bindings/core/src/method_handler/wallet.rs index 6825dc72e0..d7dc3d1121 100644 --- a/bindings/core/src/method_handler/wallet.rs +++ b/bindings/core/src/method_handler/wallet.rs @@ -367,7 +367,7 @@ pub(crate) async fn call_wallet_method_internal(wallet: &Wallet, method: WalletM .sign_and_submit_transaction( PreparedTransactionData::try_from_dto_with_params( prepared_transaction_data, - wallet.client().get_protocol_parameters().await?, + &wallet.client().get_protocol_parameters().await?, )?, None, ) @@ -387,7 +387,7 @@ pub(crate) async fn call_wallet_method_internal(wallet: &Wallet, method: WalletM } => { let signed_transaction_data = SignedTransactionData::try_from_dto_with_params( signed_transaction_data, - wallet.client().get_protocol_parameters().await?, + &wallet.client().get_protocol_parameters().await?, )?; let transaction = wallet .submit_and_store_transaction(signed_transaction_data, None) diff --git a/sdk/examples/wallet/offline_signing/3_send_transaction.rs b/sdk/examples/wallet/offline_signing/3_send_transaction.rs index 8d1c91f13e..43f68883f7 100644 --- a/sdk/examples/wallet/offline_signing/3_send_transaction.rs +++ b/sdk/examples/wallet/offline_signing/3_send_transaction.rs @@ -56,7 +56,7 @@ async fn read_signed_transaction_from_file(client: &Client) -> Result for PreparedTransactionDataDto { } } -impl TryFromDto for PreparedTransactionData { - type Dto = PreparedTransactionDataDto; +impl TryFromDto for PreparedTransactionData { type Error = Error; - fn try_from_dto_with_params_inner(dto: Self::Dto, params: ValidationParams<'_>) -> Result { + fn try_from_dto_with_params_inner( + dto: PreparedTransactionDataDto, + params: Option<&ProtocolParameters>, + ) -> Result { Ok(Self { - transaction: Transaction::try_from_dto_with_params(dto.transaction, ¶ms) + transaction: Transaction::try_from_dto_with_params_inner(dto.transaction, params) .map_err(|_| Error::InvalidField("transaction"))?, inputs_data: dto .inputs_data @@ -109,13 +112,15 @@ impl From<&SignedTransactionData> for SignedTransactionDataDto { } } -impl TryFromDto for SignedTransactionData { - type Dto = SignedTransactionDataDto; +impl TryFromDto for SignedTransactionData { type Error = Error; - fn try_from_dto_with_params_inner(dto: Self::Dto, params: ValidationParams<'_>) -> Result { + fn try_from_dto_with_params_inner( + dto: SignedTransactionDataDto, + params: Option<&ProtocolParameters>, + ) -> Result { Ok(Self { - payload: SignedTransactionPayload::try_from_dto_with_params(dto.payload, ¶ms) + payload: SignedTransactionPayload::try_from_dto_with_params_inner(dto.payload, params) .map_err(|_| Error::InvalidField("transaction_payload"))?, inputs_data: dto .inputs_data diff --git a/sdk/src/client/node_api/core/routes.rs b/sdk/src/client/node_api/core/routes.rs index 191ec80130..404b5d83a3 100644 --- a/sdk/src/client/node_api/core/routes.rs +++ b/sdk/src/client/node_api/core/routes.rs @@ -199,7 +199,7 @@ impl ClientInner { Ok(SignedBlock::try_from_dto_with_params( dto, - self.get_protocol_parameters().await?, + &self.get_protocol_parameters().await?, )?) } @@ -256,7 +256,7 @@ impl ClientInner { Ok(SignedBlock::try_from_dto_with_params( dto, - self.get_protocol_parameters().await?, + &self.get_protocol_parameters().await?, )?) } diff --git a/sdk/src/types/block/core/basic.rs b/sdk/src/types/block/core/basic.rs index 1ce750986e..a7109a6210 100644 --- a/sdk/src/types/block/core/basic.rs +++ b/sdk/src/types/block/core/basic.rs @@ -175,7 +175,7 @@ pub(crate) mod dto { use super::*; use crate::types::{ block::{payload::dto::PayloadDto, BlockId, Error}, - TryFromDto, ValidationParams, + TryFromDto, }; #[derive(Clone, Debug, Eq, PartialEq, Serialize, Deserialize)] @@ -205,11 +205,13 @@ pub(crate) mod dto { } } - impl TryFromDto for BasicBlock { - type Dto = BasicBlockDto; + impl TryFromDto for BasicBlock { type Error = Error; - fn try_from_dto_with_params_inner(dto: Self::Dto, params: ValidationParams<'_>) -> Result { + fn try_from_dto_with_params_inner( + dto: BasicBlockDto, + params: Option<&ProtocolParameters>, + ) -> Result { BasicBlockBuilder::new(StrongParents::from_set(dto.strong_parents)?, dto.max_burned_mana) .with_weak_parents(WeakParents::from_set(dto.weak_parents)?) .with_shallow_like_parents(ShallowLikeParents::from_set(dto.shallow_like_parents)?) diff --git a/sdk/src/types/block/core/mod.rs b/sdk/src/types/block/core/mod.rs index c873d35dff..051190ba34 100644 --- a/sdk/src/types/block/core/mod.rs +++ b/sdk/src/types/block/core/mod.rs @@ -113,7 +113,7 @@ pub(crate) mod dto { pub use crate::types::block::core::signed_block::dto::{SignedBlockDto, UnsignedBlockDto}; use crate::types::{ block::core::{basic::dto::BasicBlockDto, validation::dto::ValidationBlockDto}, - TryFromDto, ValidationParams, + TryFromDto, }; #[derive(Clone, Debug, Eq, PartialEq, From)] @@ -195,14 +195,16 @@ pub(crate) mod dto { } } - impl TryFromDto for Block { - type Dto = BlockDto; + impl TryFromDto for Block { type Error = Error; - fn try_from_dto_with_params_inner(dto: Self::Dto, params: ValidationParams<'_>) -> Result { + fn try_from_dto_with_params_inner( + dto: BlockDto, + params: Option<&ProtocolParameters>, + ) -> Result { match dto { - Self::Dto::Basic(basic) => Ok(BasicBlock::try_from_dto_with_params_inner(basic, params)?.into()), - Self::Dto::Validation(validation) => { + BlockDto::Basic(basic) => Ok(BasicBlock::try_from_dto_with_params_inner(basic, params)?.into()), + BlockDto::Validation(validation) => { Ok(ValidationBlock::try_from_dto_with_params_inner(validation, params)?.into()) } } diff --git a/sdk/src/types/block/core/signed_block.rs b/sdk/src/types/block/core/signed_block.rs index 0c6b13ca2f..b961c85fb7 100644 --- a/sdk/src/types/block/core/signed_block.rs +++ b/sdk/src/types/block/core/signed_block.rs @@ -342,7 +342,7 @@ pub(crate) mod dto { use super::*; use crate::{ - types::{block::core::dto::BlockDto, TryFromDto, ValidationParams}, + types::{block::core::dto::BlockDto, TryFromDto}, utils::serde::string, }; @@ -380,12 +380,14 @@ pub(crate) mod dto { } } - impl TryFromDto for SignedBlock { - type Dto = SignedBlockDto; + impl TryFromDto for SignedBlock { type Error = Error; - fn try_from_dto_with_params_inner(dto: Self::Dto, params: ValidationParams<'_>) -> Result { - if let Some(protocol_params) = params.protocol_parameters() { + fn try_from_dto_with_params_inner( + dto: SignedBlockDto, + params: Option<&ProtocolParameters>, + ) -> Result { + if let Some(protocol_params) = params { if dto.inner.protocol_version != protocol_params.version() { return Err(Error::ProtocolVersionMismatch { expected: protocol_params.version(), @@ -444,12 +446,14 @@ pub(crate) mod dto { } } - impl TryFromDto for UnsignedBlock { - type Dto = UnsignedBlockDto; + impl TryFromDto for UnsignedBlock { type Error = Error; - fn try_from_dto_with_params_inner(dto: Self::Dto, params: ValidationParams<'_>) -> Result { - if let Some(protocol_params) = params.protocol_parameters() { + fn try_from_dto_with_params_inner( + dto: UnsignedBlockDto, + params: Option<&ProtocolParameters>, + ) -> Result { + if let Some(protocol_params) = params { if dto.protocol_version != protocol_params.version() { return Err(Error::ProtocolVersionMismatch { expected: protocol_params.version(), diff --git a/sdk/src/types/block/core/validation.rs b/sdk/src/types/block/core/validation.rs index 3e37275bc7..545574250f 100644 --- a/sdk/src/types/block/core/validation.rs +++ b/sdk/src/types/block/core/validation.rs @@ -202,7 +202,7 @@ pub(crate) mod dto { use super::*; use crate::types::{ block::{BlockId, Error}, - TryFromDto, ValidationParams, + TryFromDto, }; #[derive(Clone, Debug, Eq, PartialEq, Serialize, Deserialize)] @@ -230,12 +230,14 @@ pub(crate) mod dto { } } - impl TryFromDto for ValidationBlock { - type Dto = ValidationBlockDto; + impl TryFromDto for ValidationBlock { type Error = Error; - fn try_from_dto_with_params_inner(dto: Self::Dto, params: ValidationParams<'_>) -> Result { - if let Some(protocol_params) = params.protocol_parameters() { + fn try_from_dto_with_params_inner( + dto: ValidationBlockDto, + params: Option<&ProtocolParameters>, + ) -> Result { + if let Some(protocol_params) = params { verify_protocol_parameters_hash::(&dto.protocol_parameters_hash, protocol_params)?; } diff --git a/sdk/src/types/block/mana/allotment.rs b/sdk/src/types/block/mana/allotment.rs index fbb319f4d2..1069f9aace 100644 --- a/sdk/src/types/block/mana/allotment.rs +++ b/sdk/src/types/block/mana/allotment.rs @@ -76,15 +76,14 @@ pub(super) mod dto { } } - impl TryFromDto for ManaAllotment { - type Dto = ManaAllotmentDto; + impl TryFromDto for ManaAllotment { type Error = Error; fn try_from_dto_with_params_inner( - dto: Self::Dto, - params: crate::types::ValidationParams<'_>, + dto: ManaAllotmentDto, + params: Option<&ProtocolParameters>, ) -> Result { - Ok(if let Some(params) = params.protocol_parameters() { + Ok(if let Some(params) = params { Self::new(dto.account_id, dto.mana, params)? } else { Self { diff --git a/sdk/src/types/block/payload/mod.rs b/sdk/src/types/block/payload/mod.rs index c88fcad25f..b20b03cfe4 100644 --- a/sdk/src/types/block/payload/mod.rs +++ b/sdk/src/types/block/payload/mod.rs @@ -162,7 +162,7 @@ pub mod dto { pub use super::signed_transaction::dto::SignedTransactionPayloadDto; use super::*; - use crate::types::{block::Error, TryFromDto, ValidationParams}; + use crate::types::{block::Error, TryFromDto}; /// Describes all the different payload types. #[derive(Clone, Debug, Eq, PartialEq, Serialize, Deserialize)] @@ -197,11 +197,13 @@ pub mod dto { } } - impl TryFromDto for Payload { - type Dto = PayloadDto; + impl TryFromDto for Payload { type Error = Error; - fn try_from_dto_with_params_inner(dto: Self::Dto, params: ValidationParams<'_>) -> Result { + fn try_from_dto_with_params_inner( + dto: PayloadDto, + params: Option<&ProtocolParameters>, + ) -> Result { Ok(match dto { PayloadDto::TaggedData(p) => Self::from(*p), PayloadDto::SignedTransaction(p) => { diff --git a/sdk/src/types/block/payload/signed_transaction/mod.rs b/sdk/src/types/block/payload/signed_transaction/mod.rs index caf4bc2233..5721d70afd 100644 --- a/sdk/src/types/block/payload/signed_transaction/mod.rs +++ b/sdk/src/types/block/payload/signed_transaction/mod.rs @@ -91,7 +91,7 @@ pub mod dto { use super::*; use crate::types::{ block::{unlock::Unlock, Error}, - TryFromDto, ValidationParams, + TryFromDto, }; #[derive(Clone, Debug, Eq, PartialEq, Serialize, Deserialize)] @@ -112,11 +112,13 @@ pub mod dto { } } - impl TryFromDto for SignedTransactionPayload { - type Dto = SignedTransactionPayloadDto; + impl TryFromDto for SignedTransactionPayload { type Error = Error; - fn try_from_dto_with_params_inner(dto: Self::Dto, params: ValidationParams<'_>) -> Result { + fn try_from_dto_with_params_inner( + dto: SignedTransactionPayloadDto, + params: Option<&ProtocolParameters>, + ) -> Result { let transaction = Transaction::try_from_dto_with_params_inner(dto.transaction, params)?; Self::new(transaction, Unlocks::new(dto.unlocks)?) } diff --git a/sdk/src/types/block/payload/signed_transaction/transaction.rs b/sdk/src/types/block/payload/signed_transaction/transaction.rs index b9f085d3da..8b8bea5d33 100644 --- a/sdk/src/types/block/payload/signed_transaction/transaction.rs +++ b/sdk/src/types/block/payload/signed_transaction/transaction.rs @@ -8,22 +8,19 @@ use hashbrown::HashSet; use packable::{bounded::BoundedU16, prefix::BoxedSlicePrefix, Packable, PackableExt}; use crate::{ - types::{ - block::{ - capabilities::{Capabilities, CapabilityFlag}, - context_input::{ContextInput, CONTEXT_INPUT_COUNT_RANGE}, - input::{Input, INPUT_COUNT_RANGE}, - mana::{verify_mana_allotments_sum, ManaAllotment, ManaAllotments}, - output::{NativeTokens, Output, OUTPUT_COUNT_RANGE}, - payload::{ - signed_transaction::{TransactionHash, TransactionId, TransactionSigningHash}, - OptionalPayload, Payload, - }, - protocol::ProtocolParameters, - slot::SlotIndex, - Error, + types::block::{ + capabilities::{Capabilities, CapabilityFlag}, + context_input::{ContextInput, CONTEXT_INPUT_COUNT_RANGE}, + input::{Input, INPUT_COUNT_RANGE}, + mana::{verify_mana_allotments_sum, ManaAllotment, ManaAllotments}, + output::{NativeTokens, Output, OUTPUT_COUNT_RANGE}, + payload::{ + signed_transaction::{TransactionHash, TransactionId, TransactionSigningHash}, + OptionalPayload, Payload, }, - ValidationParams, + protocol::ProtocolParameters, + slot::SlotIndex, + Error, }, utils::merkle_hasher, }; @@ -123,10 +120,13 @@ impl TransactionBuilder { } /// Finishes a [`TransactionBuilder`] into a [`Transaction`]. - pub fn finish_with_params<'a>(self, params: impl Into> + Send) -> Result { + pub fn finish_with_params<'a>( + self, + params: impl Into>, + ) -> Result { let params = params.into(); - if let Some(protocol_parameters) = params.protocol_parameters() { + if let Some(protocol_parameters) = params { if self.network_id != protocol_parameters.network_id() { return Err(Error::NetworkIdMismatch { expected: protocol_parameters.network_id(), @@ -139,7 +139,7 @@ impl TransactionBuilder { .creation_slot .or_else(|| { #[cfg(feature = "std")] - let creation_slot = params.protocol_parameters().map(|params| { + let creation_slot = params.map(|params| { params.slot_index( std::time::SystemTime::now() .duration_since(std::time::UNIX_EPOCH) @@ -169,7 +169,7 @@ impl TransactionBuilder { let allotments = ManaAllotments::from_set(self.allotments)?; - if let Some(protocol_parameters) = params.protocol_parameters() { + if let Some(protocol_parameters) = params { verify_mana_allotments_sum(allotments.iter(), protocol_parameters)?; } @@ -181,7 +181,7 @@ impl TransactionBuilder { .try_into() .map_err(Error::InvalidOutputCount)?; - if let Some(protocol_parameters) = params.protocol_parameters() { + if let Some(protocol_parameters) = params { verify_outputs::(&outputs, protocol_parameters)?; } @@ -200,7 +200,7 @@ impl TransactionBuilder { /// Finishes a [`TransactionBuilder`] into a [`Transaction`] without protocol /// validation. pub fn finish(self) -> Result { - self.finish_with_params(ValidationParams::default()) + self.finish_with_params(None) } } @@ -576,11 +576,13 @@ pub(crate) mod dto { } } - impl TryFromDto for Transaction { - type Dto = TransactionDto; + impl TryFromDto for Transaction { type Error = Error; - fn try_from_dto_with_params_inner(dto: Self::Dto, params: ValidationParams<'_>) -> Result { + fn try_from_dto_with_params_inner( + dto: TransactionDto, + params: Option<&ProtocolParameters>, + ) -> Result { let network_id = dto .network_id .parse::() @@ -588,7 +590,7 @@ pub(crate) mod dto { let mana_allotments = dto .allotments .into_iter() - .map(|o| ManaAllotment::try_from_dto_with_params(o, ¶ms)) + .map(|o| ManaAllotment::try_from_dto_with_params_inner(o, params)) .collect::, Error>>()?; let outputs = dto .outputs diff --git a/sdk/src/types/mod.rs b/sdk/src/types/mod.rs index 6858a10e87..e8c63c81bc 100644 --- a/sdk/src/types/mod.rs +++ b/sdk/src/types/mod.rs @@ -10,137 +10,18 @@ extern crate std; pub mod api; pub mod block; -use core::ops::Deref; - use self::block::protocol::ProtocolParameters; -/// Borrowed or Owned. Useful for generic impls and UX. -#[derive(Clone, Debug)] -pub enum Boo<'a, T> { - Borrowed(&'a T), - Owned(T), -} - -impl<'a, T> Boo<'a, T> { - pub fn into_owned(self) -> T - where - T: Clone, - { - match self { - Boo::Borrowed(b) => b.clone(), - Boo::Owned(o) => o, - } - } -} - -impl<'a, T> AsRef for Boo<'a, T> { - fn as_ref(&self) -> &T { - self.deref() - } -} - -impl<'a, T> Deref for Boo<'a, T> { - type Target = T; - - fn deref(&self) -> &Self::Target { - match *self { - Boo::Borrowed(b) => b, - Boo::Owned(ref o) => o, - } - } -} - -impl<'a, T> From for Boo<'a, T> { - fn from(value: T) -> Self { - Self::Owned(value) - } -} - -impl<'a, T> From<&'a T> for Boo<'a, T> { - fn from(value: &'a T) -> Self { - Self::Borrowed(value) - } -} - -impl<'a, T> From<&'a Boo<'a, T>> for Boo<'a, T> { - fn from(value: &'a Boo<'a, T>) -> Self { - match *value { - Self::Borrowed(b) => Self::Borrowed(b), - Self::Owned(ref o) => Self::Borrowed(o), - } - } -} - -#[derive(Clone, Default, Debug)] -pub struct ValidationParams<'a> { - protocol_parameters: Option>, - token_supply: Option, -} - -impl<'a> ValidationParams<'a> { - pub fn with_protocol_parameters(mut self, protocol_parameters: impl Into>) -> Self { - let protocol_parameters = protocol_parameters.into(); - let token_supply = protocol_parameters.token_supply(); - self.protocol_parameters.replace(protocol_parameters); - self.with_token_supply(token_supply) - } - - pub fn with_token_supply(mut self, token_supply: u64) -> Self { - self.token_supply.replace(token_supply); - self - } - - pub fn protocol_parameters(&self) -> Option<&ProtocolParameters> { - self.protocol_parameters.as_deref() - } - - pub fn token_supply(&self) -> Option { - self.token_supply - .or_else(|| self.protocol_parameters.as_ref().map(|p| p.token_supply())) - } -} - -impl<'a> From for ValidationParams<'a> { - fn from(value: u64) -> Self { - Self::default().with_token_supply(value) - } -} - -impl<'a> From for ValidationParams<'a> { - fn from(value: ProtocolParameters) -> Self { - Self::default().with_protocol_parameters(value) - } -} - -impl<'a> From<&'a ProtocolParameters> for ValidationParams<'a> { - fn from(value: &'a ProtocolParameters) -> Self { - Self::default().with_protocol_parameters(value) - } -} - -impl<'a> From<&'a ValidationParams<'a>> for ValidationParams<'a> { - fn from(value: &'a ValidationParams<'a>) -> Self { - Self { - protocol_parameters: value.protocol_parameters.as_ref().map(Into::into), - token_supply: value.token_supply, - } - } -} - -pub trait TryFromDto: Sized { - type Dto; +pub trait TryFromDto: Sized { type Error; - fn try_from_dto(dto: Self::Dto) -> Result { - Self::try_from_dto_with_params(dto, ValidationParams::default()) + fn try_from_dto(dto: Dto) -> Result { + Self::try_from_dto_with_params_inner(dto, None) } - fn try_from_dto_with_params<'a>( - dto: Self::Dto, - params: impl Into> + Send, - ) -> Result { - Self::try_from_dto_with_params_inner(dto, params.into()) + fn try_from_dto_with_params(dto: Dto, params: &ProtocolParameters) -> Result { + Self::try_from_dto_with_params_inner(dto, Some(params)) } - fn try_from_dto_with_params_inner(dto: Self::Dto, params: ValidationParams<'_>) -> Result; + fn try_from_dto_with_params_inner(dto: Dto, params: Option<&ProtocolParameters>) -> Result; } diff --git a/sdk/src/wallet/core/mod.rs b/sdk/src/wallet/core/mod.rs index f9ee311fab..3cb0a9900b 100644 --- a/sdk/src/wallet/core/mod.rs +++ b/sdk/src/wallet/core/mod.rs @@ -38,6 +38,7 @@ use crate::{ OutputId, TokenId, }, payload::signed_transaction::TransactionId, + protocol::ProtocolParameters, }, TryFromDto, }, @@ -578,13 +579,12 @@ pub struct WalletDataDto { pub native_token_foundries: HashMap, } -impl TryFromDto for WalletData { - type Dto = WalletDataDto; +impl TryFromDto for WalletData { type Error = crate::wallet::Error; fn try_from_dto_with_params_inner( - dto: Self::Dto, - params: crate::types::ValidationParams<'_>, + dto: WalletDataDto, + params: Option<&ProtocolParameters>, ) -> core::result::Result { Ok(Self { bip_path: dto.bip_path, @@ -604,13 +604,13 @@ impl TryFromDto for WalletData { transactions: dto .transactions .into_iter() - .map(|(id, o)| Ok((id, TransactionWithMetadata::try_from_dto_with_params(o, ¶ms)?))) + .map(|(id, o)| Ok((id, TransactionWithMetadata::try_from_dto_with_params_inner(o, params)?))) .collect::>()?, pending_transactions: dto.pending_transactions, incoming_transactions: dto .incoming_transactions .into_iter() - .map(|(id, o)| Ok((id, TransactionWithMetadata::try_from_dto_with_params(o, ¶ms)?))) + .map(|(id, o)| Ok((id, TransactionWithMetadata::try_from_dto_with_params_inner(o, params)?))) .collect::>()?, inaccessible_incoming_transactions: Default::default(), native_token_foundries: dto @@ -715,7 +715,7 @@ mod test { .with_inputs([input1, input2]) .add_output(output) .add_mana_allotment(rand_mana_allotment(&protocol_parameters)) - .finish_with_params(protocol_parameters) + .finish_with_params(&protocol_parameters) .unwrap(); let pub_key_bytes = prefix_hex::decode(ED25519_PUBLIC_KEY).unwrap(); diff --git a/sdk/src/wallet/operations/transaction/build_transaction.rs b/sdk/src/wallet/operations/transaction/build_transaction.rs index a390abebc7..b5d9ce6dc7 100644 --- a/sdk/src/wallet/operations/transaction/build_transaction.rs +++ b/sdk/src/wallet/operations/transaction/build_transaction.rs @@ -51,7 +51,7 @@ where builder = builder.with_payload(options.tagged_data_payload); } - let transaction = builder.finish_with_params(protocol_parameters)?; + let transaction = builder.finish_with_params(&protocol_parameters)?; validate_transaction_length(&transaction)?; diff --git a/sdk/src/wallet/types/mod.rs b/sdk/src/wallet/types/mod.rs index cc70a0a417..f50f4b8615 100644 --- a/sdk/src/wallet/types/mod.rs +++ b/sdk/src/wallet/types/mod.rs @@ -24,6 +24,7 @@ use crate::{ address::Address, output::{dto::OutputDto, Output, OutputId, OutputMetadata}, payload::signed_transaction::{dto::SignedTransactionPayloadDto, SignedTransactionPayload, TransactionId}, + protocol::ProtocolParameters, slot::SlotIndex, BlockId, Error as BlockError, }, @@ -201,16 +202,15 @@ impl From<&TransactionWithMetadata> for TransactionWithMetadataDto { } } -impl TryFromDto for TransactionWithMetadata { - type Dto = TransactionWithMetadataDto; +impl TryFromDto for TransactionWithMetadata { type Error = BlockError; fn try_from_dto_with_params_inner( - dto: Self::Dto, - params: crate::types::ValidationParams<'_>, + dto: TransactionWithMetadataDto, + params: Option<&ProtocolParameters>, ) -> Result { Ok(Self { - payload: SignedTransactionPayload::try_from_dto_with_params(dto.payload, params)?, + payload: SignedTransactionPayload::try_from_dto_with_params_inner(dto.payload, params)?, block_id: dto.block_id, inclusion_state: dto.inclusion_state, timestamp: dto diff --git a/sdk/tests/client/signing/account.rs b/sdk/tests/client/signing/account.rs index e510d3c0c0..9696182f7d 100644 --- a/sdk/tests/client/signing/account.rs +++ b/sdk/tests/client/signing/account.rs @@ -78,7 +78,7 @@ async fn sign_account_state_transition() -> Result<()> { ) .with_outputs(outputs) .add_mana_allotment(rand_mana_allotment(&protocol_parameters)) - .finish_with_params(protocol_parameters)?; + .finish_with_params(&protocol_parameters)?; let prepared_transaction_data = PreparedTransactionData { transaction, @@ -186,7 +186,7 @@ async fn account_reference_unlocks() -> Result<()> { ) .with_outputs(outputs) .add_mana_allotment(rand_mana_allotment(&protocol_parameters)) - .finish_with_params(protocol_parameters)?; + .finish_with_params(&protocol_parameters)?; let prepared_transaction_data = PreparedTransactionData { transaction, diff --git a/sdk/tests/client/signing/basic.rs b/sdk/tests/client/signing/basic.rs index d7390f0d30..e0b1519fbb 100644 --- a/sdk/tests/client/signing/basic.rs +++ b/sdk/tests/client/signing/basic.rs @@ -72,7 +72,7 @@ async fn single_ed25519_unlock() -> Result<()> { ) .with_outputs(outputs) .add_mana_allotment(rand_mana_allotment(&protocol_parameters)) - .finish_with_params(protocol_parameters)?; + .finish_with_params(&protocol_parameters)?; let prepared_transaction_data = PreparedTransactionData { transaction, @@ -167,7 +167,7 @@ async fn ed25519_reference_unlocks() -> Result<()> { ) .with_outputs(outputs) .add_mana_allotment(rand_mana_allotment(&protocol_parameters)) - .finish_with_params(protocol_parameters)?; + .finish_with_params(&protocol_parameters)?; let prepared_transaction_data = PreparedTransactionData { transaction, @@ -273,7 +273,7 @@ async fn two_signature_unlocks() -> Result<()> { ) .with_outputs(outputs) .add_mana_allotment(rand_mana_allotment(&protocol_parameters)) - .finish_with_params(protocol_parameters)?; + .finish_with_params(&protocol_parameters)?; let prepared_transaction_data = PreparedTransactionData { transaction, diff --git a/sdk/tests/client/signing/mod.rs b/sdk/tests/client/signing/mod.rs index c2e1171c67..55c63fddf9 100644 --- a/sdk/tests/client/signing/mod.rs +++ b/sdk/tests/client/signing/mod.rs @@ -377,7 +377,7 @@ async fn all_combined() -> Result<()> { .with_outputs(outputs) .with_creation_slot(slot_index) .add_mana_allotment(rand_mana_allotment(&protocol_parameters)) - .finish_with_params(protocol_parameters)?; + .finish_with_params(&protocol_parameters)?; let prepared_transaction_data = PreparedTransactionData { transaction, diff --git a/sdk/tests/client/signing/nft.rs b/sdk/tests/client/signing/nft.rs index 0508bc5bcd..1d4a52c785 100644 --- a/sdk/tests/client/signing/nft.rs +++ b/sdk/tests/client/signing/nft.rs @@ -117,7 +117,7 @@ async fn nft_reference_unlocks() -> Result<()> { ) .with_outputs(outputs) .add_mana_allotment(rand_mana_allotment(&protocol_parameters)) - .finish_with_params(protocol_parameters)?; + .finish_with_params(&protocol_parameters)?; let prepared_transaction_data = PreparedTransactionData { transaction, From 066cbd677f64950f751db66a957eb872ff7acba1 Mon Sep 17 00:00:00 2001 From: /alex/ Date: Fri, 17 Nov 2023 15:30:18 +0100 Subject: [PATCH 40/91] Rename block types (#1626) * rename to basic and validation block body * rename block to block body * rename signed block to block * add BlockHeaderDto * more renames * even more * fix mqtt todo * clippy nursery * Remove redundant attribute Co-authored-by: Thoralf-M <46689931+Thoralf-M@users.noreply.github.com> * nit --------- Co-authored-by: Thoralf-M <46689931+Thoralf-M@users.noreply.github.com> --- bindings/core/src/method/client.rs | 7 +- bindings/core/src/method/utils.rs | 4 +- bindings/core/src/method_handler/client.rs | 18 +- .../core/src/method_handler/secret_manager.rs | 4 +- bindings/core/src/method_handler/utils.rs | 4 +- bindings/core/src/response.rs | 6 +- bindings/core/tests/combined.rs | 24 +- sdk/src/client/api/block_builder/mod.rs | 6 +- .../client/api/block_builder/transaction.rs | 5 +- sdk/src/client/api/high_level.rs | 16 +- sdk/src/client/error.rs | 6 +- sdk/src/client/node_api/core/routes.rs | 20 +- sdk/src/client/secret/mod.rs | 10 +- sdk/src/client/utils.rs | 4 +- sdk/src/types/block/address/mod.rs | 14 +- sdk/src/types/block/address/multi.rs | 2 +- sdk/src/types/block/capabilities.rs | 36 +-- sdk/src/types/block/core/basic.rs | 77 +++--- .../block/core/{signed_block.rs => block.rs} | 219 +++++++++--------- sdk/src/types/block/core/mod.rs | 149 ++++++------ sdk/src/types/block/core/validation.rs | 82 +++---- sdk/src/types/block/error.rs | 8 +- sdk/src/types/block/mod.rs | 4 +- .../block/output/feature/block_issuer.rs | 2 +- sdk/src/types/block/output/mod.rs | 2 +- .../types/block/payload/tagged_data/mod.rs | 5 +- sdk/src/types/block/rand/block.rs | 49 ++-- sdk/src/wallet/operations/syncing/outputs.rs | 16 +- sdk/tests/client/node_api/core.rs | 4 +- sdk/tests/types/block.rs | 58 ++--- sdk/tests/types/block_id.rs | 12 +- sdk/tests/types/tagged_data_payload.rs | 6 +- 32 files changed, 448 insertions(+), 431 deletions(-) rename sdk/src/types/block/core/{signed_block.rs => block.rs} (69%) diff --git a/bindings/core/src/method/client.rs b/bindings/core/src/method/client.rs index d9705da248..87da322938 100644 --- a/bindings/core/src/method/client.rs +++ b/bindings/core/src/method/client.rs @@ -20,7 +20,7 @@ use iota_sdk::{ DelegationId, FoundryId, NativeToken, NftId, OutputId, TokenScheme, }, payload::{dto::PayloadDto, signed_transaction::TransactionId}, - BlockId, IssuerId, SignedBlockDto, + BlockDto, BlockId, IssuerId, }, utils::serde::{option_string, string}, }; @@ -159,7 +159,7 @@ pub enum ClientMethod { /// Post block (JSON) PostBlock { /// Block - block: SignedBlockDto, + block: BlockDto, }, /// Post block (raw) #[serde(rename_all = "camelCase")] @@ -363,9 +363,8 @@ pub enum ClientMethod { address: Bech32Address, }, /// Returns a block ID from a block - #[serde(rename_all = "camelCase")] BlockId { /// Block - signed_block: SignedBlockDto, + block: BlockDto, }, } diff --git a/bindings/core/src/method/utils.rs b/bindings/core/src/method/utils.rs index e3e07d06af..8a8095291e 100644 --- a/bindings/core/src/method/utils.rs +++ b/bindings/core/src/method/utils.rs @@ -12,7 +12,7 @@ use iota_sdk::types::block::{ protocol::ProtocolParameters, signature::Ed25519Signature, slot::SlotCommitment, - SignedBlockDto, + BlockDto, }; use serde::{Deserialize, Serialize}; @@ -83,7 +83,7 @@ pub enum UtilsMethod { #[serde(rename_all = "camelCase")] BlockId { /// Block - block: SignedBlockDto, + block: BlockDto, /// Network Protocol Parameters protocol_parameters: ProtocolParameters, }, diff --git a/bindings/core/src/method_handler/client.rs b/bindings/core/src/method_handler/client.rs index 91dffa93f4..53f65631cd 100644 --- a/bindings/core/src/method_handler/client.rs +++ b/bindings/core/src/method_handler/client.rs @@ -13,7 +13,7 @@ use iota_sdk::{ OutputBuilderAmount, }, payload::Payload, - SignedBlock, SignedBlockDto, UnsignedBlockDto, + Block, BlockDto, UnsignedBlockDto, }, TryFromDto, }, @@ -186,7 +186,7 @@ pub(crate) async fn call_client_method_internal(client: &Client, method: ClientM ClientMethod::GetIssuance => Response::Issuance(client.get_issuance().await?), ClientMethod::PostBlockRaw { block_bytes } => Response::BlockId( client - .post_block_raw(&SignedBlock::unpack_strict( + .post_block_raw(&Block::unpack_strict( &block_bytes[..], &client.get_protocol_parameters().await?, )?) @@ -194,15 +194,13 @@ pub(crate) async fn call_client_method_internal(client: &Client, method: ClientM ), ClientMethod::PostBlock { block } => Response::BlockId( client - .post_block(&SignedBlock::try_from_dto_with_params( + .post_block(&Block::try_from_dto_with_params( block, &client.get_protocol_parameters().await?, )?) .await?, ), - ClientMethod::GetBlock { block_id } => { - Response::SignedBlock(SignedBlockDto::from(&client.get_block(&block_id).await?)) - } + ClientMethod::GetBlock { block_id } => Response::Block(BlockDto::from(&client.get_block(&block_id).await?)), ClientMethod::GetBlockMetadata { block_id } => { Response::BlockMetadata(client.get_block_metadata(&block_id).await?) } @@ -217,7 +215,7 @@ pub(crate) async fn call_client_method_internal(client: &Client, method: ClientM Response::OutputMetadata(client.get_output_metadata(&output_id).await?) } ClientMethod::GetIncludedBlock { transaction_id } => { - Response::SignedBlock(SignedBlockDto::from(&client.get_included_block(&transaction_id).await?)) + Response::Block(BlockDto::from(&client.get_included_block(&transaction_id).await?)) } ClientMethod::GetIncludedBlockMetadata { transaction_id } => { Response::BlockMetadata(client.get_included_block_metadata(&transaction_id).await?) @@ -273,7 +271,7 @@ pub(crate) async fn call_client_method_internal(client: &Client, method: ClientM .find_blocks(&block_ids) .await? .iter() - .map(SignedBlockDto::from) + .map(BlockDto::from) .collect(), ), ClientMethod::FindInputs { addresses, amount } => { @@ -312,9 +310,9 @@ pub(crate) async fn call_client_method_internal(client: &Client, method: ClientM .await?; Response::CustomJson(data) } - ClientMethod::BlockId { signed_block: block } => { + ClientMethod::BlockId { block } => { let protocol_parameters = client.get_protocol_parameters().await?; - let block = SignedBlock::try_from_dto_with_params(block, &protocol_parameters)?; + let block = Block::try_from_dto_with_params(block, &protocol_parameters)?; Response::BlockId(block.id(&protocol_parameters)) } }; diff --git a/bindings/core/src/method_handler/secret_manager.rs b/bindings/core/src/method_handler/secret_manager.rs index 75d6ddbbfb..02ae79eed5 100644 --- a/bindings/core/src/method_handler/secret_manager.rs +++ b/bindings/core/src/method_handler/secret_manager.rs @@ -11,7 +11,7 @@ use iota_sdk::{ secret::{DowncastSecretManager, SecretManage, SecretManager, SignBlock}, }, types::{ - block::{address::ToBech32Ext, core::UnsignedBlock, unlock::Unlock, SignedBlockDto}, + block::{address::ToBech32Ext, core::UnsignedBlock, unlock::Unlock, BlockDto}, TryFromDto, }, }; @@ -82,7 +82,7 @@ where .map_err(iota_sdk::client::Error::from)?; Response::SignedTransaction(transaction.into()) } - SecretManagerMethod::SignBlock { unsigned_block, chain } => Response::SignedBlock(SignedBlockDto::from( + SecretManagerMethod::SignBlock { unsigned_block, chain } => Response::Block(BlockDto::from( &UnsignedBlock::try_from_dto(unsigned_block)? .sign_ed25519(secret_manager, chain) .await?, diff --git a/bindings/core/src/method_handler/utils.rs b/bindings/core/src/method_handler/utils.rs index 89a25e8424..3fd7ba90ae 100644 --- a/bindings/core/src/method_handler/utils.rs +++ b/bindings/core/src/method_handler/utils.rs @@ -10,7 +10,7 @@ use iota_sdk::{ input::UtxoInput, output::{AccountId, FoundryId, MinimumOutputAmount, NftId, Output, OutputId, TokenId}, payload::{signed_transaction::Transaction, SignedTransactionPayload}, - SignedBlock, + Block, }, TryFromDto, }, @@ -42,7 +42,7 @@ pub(crate) fn call_utils_method_internal(method: UtilsMethod) -> Result { - let block = SignedBlock::try_from_dto_with_params(block, &protocol_parameters)?; + let block = Block::try_from_dto_with_params(block, &protocol_parameters)?; Response::BlockId(block.id(&protocol_parameters)) } UtilsMethod::TransactionId { payload } => { diff --git a/bindings/core/src/response.rs b/bindings/core/src/response.rs index 5db10c788e..8c9205134e 100644 --- a/bindings/core/src/response.rs +++ b/bindings/core/src/response.rs @@ -30,7 +30,7 @@ use iota_sdk::{ signature::Ed25519Signature, slot::SlotCommitmentId, unlock::Unlock, - BlockId, SignedBlockDto, UnsignedBlockDto, + BlockDto, BlockId, UnsignedBlockDto, }, }, utils::serde::string, @@ -112,7 +112,7 @@ pub enum Response { /// - [`GetBlock`](crate::method::ClientMethod::GetBlock) /// - [`GetIncludedBlock`](crate::method::ClientMethod::GetIncludedBlock) /// - [`SignBlock`](crate::method::SecretManagerMethod::SignBlock) - SignedBlock(SignedBlockDto), + Block(BlockDto), /// Response for: /// - [`GetBlockMetadata`](crate::method::ClientMethod::GetBlockMetadata) BlockMetadata(BlockMetadataResponse), @@ -147,7 +147,7 @@ pub enum Response { OutputIdsResponse(OutputIdsResponse), /// Response for: /// - [`FindBlocks`](crate::method::ClientMethod::FindBlocks) - Blocks(Vec), + Blocks(Vec), /// Response for: /// - [`FindInputs`](crate::method::ClientMethod::FindInputs) Inputs(Vec), diff --git a/bindings/core/tests/combined.rs b/bindings/core/tests/combined.rs index 79d838ed83..ffe7fe20d3 100644 --- a/bindings/core/tests/combined.rs +++ b/bindings/core/tests/combined.rs @@ -1,8 +1,6 @@ // Copyright 2023 IOTA Stiftung // SPDX-License-Identifier: Apache-2.0 -use std::collections::BTreeMap; - use crypto::keys::bip44::Bip44; use iota_sdk::{ client::{ @@ -13,7 +11,7 @@ use iota_sdk::{ types::{ block::{ payload::{dto::PayloadDto, Payload, TaggedDataPayload}, - BlockDto, IssuerId, SignedBlock, + Block, BlockBodyDto, IssuerId, }, TryFromDto, }, @@ -134,8 +132,8 @@ async fn client_from_wallet() -> Result<()> { // let unsigned_block = match response { // Response::UnsignedBlock(unsigned_block) => { // match &unsigned_block.block { -// BlockDto::Basic(b) => assert_eq!(b.payload.as_ref(), Some(&payload)), -// BlockDto::Validation(v) => panic!("unexpected block {v:?}"), +// BlockBodyDto::Basic(b) => assert_eq!(b.payload.as_ref(), Some(&payload)), +// BlockBodyDto::Validation(v) => panic!("unexpected block body {v:?}"), // } // unsigned_block // } @@ -152,13 +150,13 @@ async fn client_from_wallet() -> Result<()> { // ) // .await; -// let signed_block = match response { -// Response::SignedBlock(block) => { -// match &block.block { -// BlockDto::Basic(b) => assert_eq!(b.payload.as_ref(), Some(&payload)), -// BlockDto::Validation(v) => panic!("unexpected block {v:?}"), +// let block = match response { +// Response::Block(block) => { +// match &block.body { +// BlockBodyDto::Basic(b) => assert_eq!(b.payload.as_ref(), Some(&payload)), +// BlockBodyDto::Validation(v) => panic!("unexpected block {v:?}"), // } -// block +// block_body // } // _ => panic!("unexpected response {response:?}"), // }; @@ -167,7 +165,7 @@ async fn client_from_wallet() -> Result<()> { // let response = call_client_method( // &client, // ClientMethod::BlockId { -// signed_block: signed_block.clone(), +// block: block.clone(), // }, // ) // .await; @@ -176,7 +174,7 @@ async fn client_from_wallet() -> Result<()> { // Response::BlockId(block_id) => { // assert_eq!( // block_id, -// SignedBlock::try_from_dto(signed_block) +// Block::try_from_dto(block) // .unwrap() // .id(&client.get_protocol_parameters().await.unwrap()) // ); diff --git a/sdk/src/client/api/block_builder/mod.rs b/sdk/src/client/api/block_builder/mod.rs index ca2e99a72e..51c5806399 100644 --- a/sdk/src/client/api/block_builder/mod.rs +++ b/sdk/src/client/api/block_builder/mod.rs @@ -10,7 +10,7 @@ use crate::{ types::block::{ core::{BlockHeader, UnsignedBlock}, payload::Payload, - Block, IssuerId, + BlockBody, IssuerId, }, }; @@ -43,11 +43,11 @@ impl ClientInner { issuer_id, ), // TODO: burned mana calculation - Block::build_basic(issuance.strong_parents()?, 0) + BlockBody::build_basic(issuance.strong_parents()?, 0) .with_weak_parents(issuance.weak_parents()?) .with_shallow_like_parents(issuance.shallow_like_parents()?) .with_payload(payload) - .finish_block()?, + .finish_block_body()?, )) } } diff --git a/sdk/src/client/api/block_builder/transaction.rs b/sdk/src/client/api/block_builder/transaction.rs index be2141f4cc..b8016821cd 100644 --- a/sdk/src/client/api/block_builder/transaction.rs +++ b/sdk/src/client/api/block_builder/transaction.rs @@ -12,13 +12,12 @@ use crate::{ payload::signed_transaction::{SignedTransactionPayload, Transaction}, semantic::{SemanticValidationContext, TransactionFailureReason}, signature::Ed25519Signature, - BlockId, SignedBlock, + Block, BlockId, }, }; // TODO this is wrong because of https://github.com/iotaledger/iota-sdk/issues/1208 -const MAX_TX_LENGTH_FOR_BLOCK_WITH_8_PARENTS: usize = - SignedBlock::LENGTH_MAX - SignedBlock::LENGTH_MIN - (7 * BlockId::LENGTH); +const MAX_TX_LENGTH_FOR_BLOCK_WITH_8_PARENTS: usize = Block::LENGTH_MAX - Block::LENGTH_MIN - (7 * BlockId::LENGTH); // Length for unlocks with a single signature unlock (unlocks length + unlock type + signature type + public key + // signature) const SINGLE_UNLOCK_LENGTH: usize = 1 + 1 + Ed25519Signature::PUBLIC_KEY_LENGTH + Ed25519Signature::SIGNATURE_LENGTH; diff --git a/sdk/src/client/api/high_level.rs b/sdk/src/client/api/high_level.rs index 1d2fcaee52..2926091520 100644 --- a/sdk/src/client/api/high_level.rs +++ b/sdk/src/client/api/high_level.rs @@ -15,7 +15,7 @@ use crate::{ }, types::block::{ address::Bech32Address, - core::{BasicBlock, Block, SignedBlock}, + core::{BasicBlockBody, Block, BlockBody}, input::{Input, UtxoInput, INPUT_COUNT_MAX}, output::OutputWithMetadata, payload::{signed_transaction::TransactionId, Payload}, @@ -27,10 +27,10 @@ use crate::{ impl Client { /// Get the inputs of a transaction for the given transaction id. pub async fn inputs_from_transaction_id(&self, transaction_id: &TransactionId) -> Result> { - let signed_block = self.get_included_block(transaction_id).await?; + let block = self.get_included_block(transaction_id).await?; - if let Block::Basic(block) = signed_block.block() { - let inputs = if let Some(Payload::SignedTransaction(t)) = block.payload() { + if let BlockBody::Basic(basic_block_body) = block.body() { + let inputs = if let Some(Payload::SignedTransaction(t)) = basic_block_body.payload() { t.transaction().inputs() } else { return Err(Error::MissingTransactionPayload); @@ -45,15 +45,15 @@ impl Client { self.get_outputs_with_metadata(&input_ids).await } else { - Err(Error::UnexpectedBlockKind { - expected: BasicBlock::KIND, - actual: signed_block.block().kind(), + Err(Error::UnexpectedBlockBodyKind { + expected: BasicBlockBody::KIND, + actual: block.body().kind(), }) } } /// Find all blocks by provided block IDs. - pub async fn find_blocks(&self, block_ids: &[BlockId]) -> Result> { + pub async fn find_blocks(&self, block_ids: &[BlockId]) -> Result> { // Use a `HashSet` to prevent duplicate block_ids. let block_ids = block_ids.iter().copied().collect::>(); futures::future::try_join_all(block_ids.iter().map(|block_id| self.get_block(block_id))).await diff --git a/sdk/src/client/error.rs b/sdk/src/client/error.rs index 6d99b5ded1..3333218288 100644 --- a/sdk/src/client/error.rs +++ b/sdk/src/client/error.rs @@ -154,9 +154,9 @@ pub enum Error { /// Missing BIP32 chain to sign with. #[error("missing BIP32 chain to sign with")] MissingBip32Chain, - /// Unexpected block kind. - #[error("unexpected block kind: expected {expected}, found {actual}")] - UnexpectedBlockKind { expected: u8, actual: u8 }, + /// Unexpected block body kind. + #[error("unexpected block body kind: expected {expected}, found {actual}")] + UnexpectedBlockBodyKind { expected: u8, actual: u8 }, /// Missing transaction payload. #[error("missing transaction payload")] MissingTransactionPayload, diff --git a/sdk/src/client/node_api/core/routes.rs b/sdk/src/client/node_api/core/routes.rs index 404b5d83a3..96cb6374bd 100644 --- a/sdk/src/client/node_api/core/routes.rs +++ b/sdk/src/client/node_api/core/routes.rs @@ -24,7 +24,7 @@ use crate::{ output::{dto::OutputDto, AccountId, Output, OutputId, OutputMetadata}, payload::signed_transaction::TransactionId, slot::{EpochIndex, SlotCommitment, SlotCommitmentId, SlotIndex}, - BlockId, SignedBlock, SignedBlockDto, + Block, BlockDto, BlockId, }, TryFromDto, }, @@ -166,10 +166,10 @@ impl ClientInner { /// Returns the BlockId of the submitted block. /// POST JSON to /api/core/v3/blocks - pub async fn post_block(&self, block: &SignedBlock) -> Result { + pub async fn post_block(&self, block: &Block) -> Result { const PATH: &str = "api/core/v3/blocks"; - let block_dto = SignedBlockDto::from(block); + let block_dto = BlockDto::from(block); let response = self .post_request::(PATH, serde_json::to_value(block_dto)?) @@ -180,7 +180,7 @@ impl ClientInner { /// Returns the BlockId of the submitted block. /// POST /api/core/v3/blocks - pub async fn post_block_raw(&self, block: &SignedBlock) -> Result { + pub async fn post_block_raw(&self, block: &Block) -> Result { const PATH: &str = "api/core/v3/blocks"; let response = self @@ -192,12 +192,12 @@ impl ClientInner { /// Finds a block by its ID and returns it as object. /// GET /api/core/v3/blocks/{blockId} - pub async fn get_block(&self, block_id: &BlockId) -> Result { + pub async fn get_block(&self, block_id: &BlockId) -> Result { let path = &format!("api/core/v3/blocks/{block_id}"); - let dto = self.get_request::(path, None, false, true).await?; + let dto = self.get_request::(path, None, false, true).await?; - Ok(SignedBlock::try_from_dto_with_params( + Ok(Block::try_from_dto_with_params( dto, &self.get_protocol_parameters().await?, )?) @@ -249,12 +249,12 @@ impl ClientInner { /// Returns the earliest confirmed block containing the transaction with the given ID. /// GET /api/core/v3/transactions/{transactionId}/included-block - pub async fn get_included_block(&self, transaction_id: &TransactionId) -> Result { + pub async fn get_included_block(&self, transaction_id: &TransactionId) -> Result { let path = &format!("api/core/v3/transactions/{transaction_id}/included-block"); - let dto = self.get_request::(path, None, true, true).await?; + let dto = self.get_request::(path, None, true, true).await?; - Ok(SignedBlock::try_from_dto_with_params( + Ok(Block::try_from_dto_with_params( dto, &self.get_protocol_parameters().await?, )?) diff --git a/sdk/src/client/secret/mod.rs b/sdk/src/client/secret/mod.rs index 2089dafeaf..9c6af509c8 100644 --- a/sdk/src/client/secret/mod.rs +++ b/sdk/src/client/secret/mod.rs @@ -57,7 +57,7 @@ use crate::{ payload::SignedTransactionPayload, signature::{Ed25519Signature, Signature}, unlock::{AccountUnlock, NftUnlock, ReferenceUnlock, SignatureUnlock, Unlock, Unlocks}, - Error as BlockError, SignedBlock, + Block, Error as BlockError, }, }; @@ -599,18 +599,14 @@ where #[async_trait] pub trait SignBlock { - async fn sign_ed25519( - self, - secret_manager: &S, - chain: Bip44, - ) -> crate::client::Result + async fn sign_ed25519(self, secret_manager: &S, chain: Bip44) -> crate::client::Result where crate::client::Error: From; } #[async_trait] impl SignBlock for UnsignedBlock { - async fn sign_ed25519(self, secret_manager: &S, chain: Bip44) -> crate::client::Result + async fn sign_ed25519(self, secret_manager: &S, chain: Bip44) -> crate::client::Result where crate::client::Error: From, { diff --git a/sdk/src/client/utils.rs b/sdk/src/client/utils.rs index ba2f0056aa..b8bdae8696 100644 --- a/sdk/src/client/utils.rs +++ b/sdk/src/client/utils.rs @@ -21,7 +21,7 @@ use crate::{ address::{Address, Bech32Address, Ed25519Address, Hrp, ToBech32Ext}, output::{AccountId, NftId}, payload::TaggedDataPayload, - BlockId, SignedBlock, + Block, BlockId, }, utils::ConvertTo, }; @@ -192,7 +192,7 @@ impl Client { Ok((Self::tag_to_utf8(payload)?, Self::data_to_utf8(payload)?)) } - pub async fn block_id(&self, block: &SignedBlock) -> Result { + pub async fn block_id(&self, block: &Block) -> Result { Ok(block.id(&self.get_protocol_parameters().await?)) } } diff --git a/sdk/src/types/block/address/mod.rs b/sdk/src/types/block/address/mod.rs index 58fd1587aa..f748591f85 100644 --- a/sdk/src/types/block/address/mod.rs +++ b/sdk/src/types/block/address/mod.rs @@ -202,13 +202,13 @@ impl Address { impl StorageScore for Address { fn storage_score(&self, params: StorageScoreParameters) -> u64 { match self { - Address::Ed25519(address) => address.storage_score(params), - Address::Account(address) => address.storage_score(params), - Address::Nft(address) => address.storage_score(params), - Address::Anchor(address) => address.storage_score(params), - Address::ImplicitAccountCreation(address) => address.storage_score(params), - Address::Multi(address) => address.storage_score(params), - Address::Restricted(address) => address.storage_score(params), + Self::Ed25519(address) => address.storage_score(params), + Self::Account(address) => address.storage_score(params), + Self::Nft(address) => address.storage_score(params), + Self::Anchor(address) => address.storage_score(params), + Self::ImplicitAccountCreation(address) => address.storage_score(params), + Self::Multi(address) => address.storage_score(params), + Self::Restricted(address) => address.storage_score(params), } } } diff --git a/sdk/src/types/block/address/multi.rs b/sdk/src/types/block/address/multi.rs index b4f59e2284..fe637e4eca 100644 --- a/sdk/src/types/block/address/multi.rs +++ b/sdk/src/types/block/address/multi.rs @@ -29,7 +29,7 @@ pub struct WeightedAddress { impl WeightedAddress { /// Creates a new [`WeightedAddress`]. - pub fn new(address: Address, weight: u8) -> Result { + pub fn new(address: Address, weight: u8) -> Result { verify_address::(&address, &())?; verify_weight::(&weight, &())?; diff --git a/sdk/src/types/block/capabilities.rs b/sdk/src/types/block/capabilities.rs index d647be374c..3ba8f8359c 100644 --- a/sdk/src/types/block/capabilities.rs +++ b/sdk/src/types/block/capabilities.rs @@ -294,29 +294,29 @@ mod test { fn as_byte(&self) -> u8 { match self { - TestFlag::Val1 => Self::VAL_1, - TestFlag::Val2 => Self::VAL_2, - TestFlag::Val3 => Self::VAL_3, - TestFlag::Val4 => Self::VAL_4, - TestFlag::Val5 => Self::VAL_5, - TestFlag::Val6 => Self::VAL_6, - TestFlag::Val7 => Self::VAL_7, - TestFlag::Val8 => Self::VAL_8, - TestFlag::Val9 => Self::VAL_9, + Self::Val1 => Self::VAL_1, + Self::Val2 => Self::VAL_2, + Self::Val3 => Self::VAL_3, + Self::Val4 => Self::VAL_4, + Self::Val5 => Self::VAL_5, + Self::Val6 => Self::VAL_6, + Self::Val7 => Self::VAL_7, + Self::Val8 => Self::VAL_8, + Self::Val9 => Self::VAL_9, } } fn index(&self) -> usize { match self { - TestFlag::Val1 - | TestFlag::Val2 - | TestFlag::Val3 - | TestFlag::Val4 - | TestFlag::Val5 - | TestFlag::Val6 - | TestFlag::Val7 - | TestFlag::Val8 => 0, - TestFlag::Val9 => 1, + Self::Val1 + | Self::Val2 + | Self::Val3 + | Self::Val4 + | Self::Val5 + | Self::Val6 + | Self::Val7 + | Self::Val8 => 0, + Self::Val9 => 1, } } diff --git a/sdk/src/types/block/core/basic.rs b/sdk/src/types/block/core/basic.rs index a7109a6210..292bd33024 100644 --- a/sdk/src/types/block/core/basic.rs +++ b/sdk/src/types/block/core/basic.rs @@ -4,7 +4,7 @@ use packable::Packable; use crate::types::block::{ - core::{parent::verify_parents_sets, Block, Parents}, + core::{parent::verify_parents_sets, BlockBody, Parents}, payload::{OptionalPayload, Payload}, protocol::ProtocolParameters, Error, @@ -14,8 +14,8 @@ pub type StrongParents = Parents<1, 8>; pub type WeakParents = Parents<0, 8>; pub type ShallowLikeParents = Parents<0, 8>; -/// A builder for a [`BasicBlock`]. -pub struct BasicBlockBuilder { +/// A builder for a [`BasicBlockBody`]. +pub struct BasicBlockBodyBuilder { strong_parents: StrongParents, weak_parents: WeakParents, shallow_like_parents: ShallowLikeParents, @@ -23,8 +23,8 @@ pub struct BasicBlockBuilder { max_burned_mana: u64, } -impl BasicBlockBuilder { - /// Creates a new [`BasicBlockBuilder`]. +impl BasicBlockBodyBuilder { + /// Creates a new [`BasicBlockBodyBuilder`]. #[inline(always)] pub fn new(strong_parents: StrongParents, max_burned_mana: u64) -> Self { Self { @@ -36,46 +36,46 @@ impl BasicBlockBuilder { } } - /// Adds strong parents to a [`BasicBlockBuilder`]. + /// Adds strong parents to a [`BasicBlockBodyBuilder`]. #[inline(always)] pub fn with_strong_parents(mut self, strong_parents: impl Into) -> Self { self.strong_parents = strong_parents.into(); self } - /// Adds weak parents to a [`BasicBlockBuilder`]. + /// Adds weak parents to a [`BasicBlockBodyBuilder`]. #[inline(always)] pub fn with_weak_parents(mut self, weak_parents: impl Into) -> Self { self.weak_parents = weak_parents.into(); self } - /// Adds shallow like parents to a [`BasicBlockBuilder`]. + /// Adds shallow like parents to a [`BasicBlockBodyBuilder`]. #[inline(always)] pub fn with_shallow_like_parents(mut self, shallow_like_parents: impl Into) -> Self { self.shallow_like_parents = shallow_like_parents.into(); self } - /// Adds a payload to a [`BasicBlockBuilder`]. + /// Adds a payload to a [`BasicBlockBodyBuilder`]. #[inline(always)] pub fn with_payload(mut self, payload: impl Into) -> Self { self.payload = payload.into(); self } - /// Adds max burned mana to a [`BasicBlockBuilder`]. + /// Adds max burned mana to a [`BasicBlockBodyBuilder`]. #[inline(always)] pub fn with_max_burned_mana(mut self, max_burned_mana: u64) -> Self { self.max_burned_mana = max_burned_mana; self } - /// Finishes the builder into a [`BasicBlock`]. - pub fn finish(self) -> Result { + /// Finishes the builder into a [`BasicBlockBody`]. + pub fn finish(self) -> Result { verify_parents_sets(&self.strong_parents, &self.weak_parents, &self.shallow_like_parents)?; - Ok(BasicBlock { + Ok(BasicBlockBody { strong_parents: self.strong_parents, weak_parents: self.weak_parents, shallow_like_parents: self.shallow_like_parents, @@ -84,14 +84,14 @@ impl BasicBlockBuilder { }) } - /// Finishes the builder into a [`Block`]. - pub fn finish_block(self) -> Result { - Ok(Block::from(self.finish()?)) + /// Finishes the builder into a [`BlockBody`]. + pub fn finish_block_body(self) -> Result { + Ok(BlockBody::from(self.finish()?)) } } -impl From for BasicBlockBuilder { - fn from(value: BasicBlock) -> Self { +impl From for BasicBlockBodyBuilder { + fn from(value: BasicBlockBody) -> Self { Self { strong_parents: value.strong_parents, weak_parents: value.weak_parents, @@ -105,8 +105,8 @@ impl From for BasicBlockBuilder { #[derive(Clone, Debug, Eq, PartialEq, Packable)] #[packable(unpack_error = Error)] #[packable(unpack_visitor = ProtocolParameters)] -#[packable(verify_with = verify_basic_block)] -pub struct BasicBlock { +#[packable(verify_with = verify_basic_block_body)] +pub struct BasicBlockBody { /// Blocks that are strongly directly approved. strong_parents: StrongParents, /// Blocks that are weakly directly approved. @@ -120,46 +120,49 @@ pub struct BasicBlock { max_burned_mana: u64, } -impl BasicBlock { +impl BasicBlockBody { pub const KIND: u8 = 0; - /// Returns the strong parents of a [`BasicBlock`]. + /// Returns the strong parents of a [`BasicBlockBody`]. #[inline(always)] pub fn strong_parents(&self) -> &StrongParents { &self.strong_parents } - /// Returns the weak parents of a [`BasicBlock`]. + /// Returns the weak parents of a [`BasicBlockBody`]. #[inline(always)] pub fn weak_parents(&self) -> &WeakParents { &self.weak_parents } - /// Returns the shallow like parents of a [`BasicBlock`]. + /// Returns the shallow like parents of a [`BasicBlockBody`]. #[inline(always)] pub fn shallow_like_parents(&self) -> &ShallowLikeParents { &self.shallow_like_parents } - /// Returns the optional payload of a [`BasicBlock`]. + /// Returns the optional payload of a [`BasicBlockBody`]. #[inline(always)] pub fn payload(&self) -> Option<&Payload> { self.payload.as_ref() } - /// Returns the max burned mana of a [`BasicBlock`]. + /// Returns the max burned mana of a [`BasicBlockBody`]. #[inline(always)] pub fn max_burned_mana(&self) -> u64 { self.max_burned_mana } } -fn verify_basic_block(basic_block: &BasicBlock, _: &ProtocolParameters) -> Result<(), Error> { +fn verify_basic_block_body( + basic_block_body: &BasicBlockBody, + _: &ProtocolParameters, +) -> Result<(), Error> { if VERIFY { verify_parents_sets( - &basic_block.strong_parents, - &basic_block.weak_parents, - &basic_block.shallow_like_parents, + &basic_block_body.strong_parents, + &basic_block_body.weak_parents, + &basic_block_body.shallow_like_parents, )?; } @@ -180,7 +183,7 @@ pub(crate) mod dto { #[derive(Clone, Debug, Eq, PartialEq, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] - pub struct BasicBlockDto { + pub struct BasicBlockBodyDto { #[serde(rename = "type")] pub kind: u8, pub strong_parents: BTreeSet, @@ -192,10 +195,10 @@ pub(crate) mod dto { pub max_burned_mana: u64, } - impl From<&BasicBlock> for BasicBlockDto { - fn from(value: &BasicBlock) -> Self { + impl From<&BasicBlockBody> for BasicBlockBodyDto { + fn from(value: &BasicBlockBody) -> Self { Self { - kind: BasicBlock::KIND, + kind: BasicBlockBody::KIND, strong_parents: value.strong_parents.to_set(), weak_parents: value.weak_parents.to_set(), shallow_like_parents: value.shallow_like_parents.to_set(), @@ -205,14 +208,14 @@ pub(crate) mod dto { } } - impl TryFromDto for BasicBlock { + impl TryFromDto for BasicBlockBody { type Error = Error; fn try_from_dto_with_params_inner( - dto: BasicBlockDto, + dto: BasicBlockBodyDto, params: Option<&ProtocolParameters>, ) -> Result { - BasicBlockBuilder::new(StrongParents::from_set(dto.strong_parents)?, dto.max_burned_mana) + BasicBlockBodyBuilder::new(StrongParents::from_set(dto.strong_parents)?, dto.max_burned_mana) .with_weak_parents(WeakParents::from_set(dto.weak_parents)?) .with_shallow_like_parents(ShallowLikeParents::from_set(dto.shallow_like_parents)?) .with_payload( diff --git a/sdk/src/types/block/core/signed_block.rs b/sdk/src/types/block/core/block.rs similarity index 69% rename from sdk/src/types/block/core/signed_block.rs rename to sdk/src/types/block/core/block.rs index b961c85fb7..9f536f1b93 100644 --- a/sdk/src/types/block/core/signed_block.rs +++ b/sdk/src/types/block/core/block.rs @@ -15,25 +15,25 @@ use packable::{ use crate::types::block::{ block_id::{BlockHash, BlockId}, - core::{BasicBlock, ValidationBlock}, + core::{BasicBlockBody, ValidationBlockBody}, protocol::ProtocolParameters, signature::Signature, slot::{SlotCommitmentId, SlotIndex}, - Block, Error, IssuerId, + BlockBody, Error, IssuerId, }; -/// Builder for a [`SignedBlock`]. +/// Block without a signature. Can be finished into a [`Block`]. #[derive(Clone, Debug, Eq, PartialEq)] pub struct UnsignedBlock { /// The block header. pub(crate) header: BlockHeader, - /// The inner block. - pub(crate) block: Block, + /// The block body. + pub(crate) body: BlockBody, } impl UnsignedBlock { - pub fn new(header: BlockHeader, block: Block) -> Self { - Self { header, block } + pub fn new(header: BlockHeader, body: BlockBody) -> Self { + Self { header, body } } /// Updates the block header. @@ -43,21 +43,21 @@ impl UnsignedBlock { self } - /// Updates the block. + /// Updates the block body. #[inline(always)] - pub fn with_block(mut self, block: Block) -> Self { - self.block = block; + pub fn with_block_body(mut self, body: BlockBody) -> Self { + self.body = body; self } /// Get the signing input that can be used to generate a [`Signature`](crate::types::block::signature::Signature) /// for the resulting block. pub fn signing_input(&self) -> Vec { - [self.header.hash(), self.block.hash()].concat() + [self.header.hash(), self.body.hash()].concat() } - pub fn finish(self, signature: impl Into) -> Result { - Ok(SignedBlock::new(self.header, self.block, signature)) + pub fn finish(self, signature: impl Into) -> Result { + Ok(Block::new(self.header, self.body, signature)) } } @@ -167,72 +167,72 @@ impl Packable for BlockHeader { /// Represent the object that nodes gossip around the network. #[derive(Clone, Debug, Eq, PartialEq, Getters, CopyGetters)] -pub struct SignedBlock { +pub struct Block { #[getset(skip)] header: BlockHeader, - /// The inner block. + /// The block body. #[getset(get = "pub")] - block: Block, + body: BlockBody, /// The block signature, used to validate issuance capabilities. #[getset(get_copy = "pub")] signature: Signature, } -impl SignedBlock { +impl Block { /// The minimum number of bytes in a block. pub const LENGTH_MIN: usize = 46; /// The maximum number of bytes in a block. pub const LENGTH_MAX: usize = 32768; - /// Creates a new [`SignedBlock`]. + /// Creates a new [`Block`]. #[inline(always)] - pub fn new(header: BlockHeader, block: Block, signature: impl Into) -> Self { + pub fn new(header: BlockHeader, body: BlockBody, signature: impl Into) -> Self { let signature = signature.into(); Self { header, - block, + body, signature, } } - /// Creates a new [`SignedBlockBuilder`]. + /// Creates a new [`UnsignedBlock`]. #[inline(always)] - pub fn build(header: BlockHeader, block: Block) -> UnsignedBlock { - UnsignedBlock::new(header, block) + pub fn build(header: BlockHeader, body: BlockBody) -> UnsignedBlock { + UnsignedBlock::new(header, body) } - /// Returns the protocol version of a [`SignedBlock`]. + /// Returns the protocol version of a [`Block`]. #[inline(always)] pub fn protocol_version(&self) -> u8 { self.header.protocol_version() } - /// Returns the network id of a [`SignedBlock`]. + /// Returns the network id of a [`Block`]. #[inline(always)] pub fn network_id(&self) -> u64 { self.header.network_id() } - /// Returns the issuing time of a [`SignedBlock`]. + /// Returns the issuing time of a [`Block`]. #[inline(always)] pub fn issuing_time(&self) -> u64 { self.header.issuing_time() } - /// Returns the slot commitment ID of a [`SignedBlock`]. + /// Returns the slot commitment ID of a [`Block`]. #[inline(always)] pub fn slot_commitment_id(&self) -> SlotCommitmentId { self.header.slot_commitment_id() } - /// Returns the latest finalized slot of a [`SignedBlock`]. + /// Returns the latest finalized slot of a [`Block`]. #[inline(always)] pub fn latest_finalized_slot(&self) -> SlotIndex { self.header.latest_finalized_slot() } - /// Returns the issuer ID of a [`SignedBlock`]. + /// Returns the issuer ID of a [`Block`]. #[inline(always)] pub fn issuer_id(&self) -> IssuerId { self.header.issuer_id() @@ -242,7 +242,7 @@ impl SignedBlock { pub fn id(&self, protocol_params: &ProtocolParameters) -> BlockId { let id = [ &self.header.hash()[..], - &self.block.hash()[..], + &self.body.hash()[..], &self.signature.pack_to_vec(), ] .concat(); @@ -250,7 +250,7 @@ impl SignedBlock { block_hash.into_block_id(protocol_params.slot_index(self.header.issuing_time() / 1000000000)) } - /// Unpacks a [`SignedBlock`] from a sequence of bytes doing syntactical checks and verifying that + /// Unpacks a [`Block`] from a sequence of bytes doing syntactical checks and verifying that /// there are no trailing bytes in the sequence. pub fn unpack_strict>( bytes: T, @@ -267,36 +267,36 @@ impl SignedBlock { Ok(block) } - /// Checks whether the inner block is a [`BasicBlock`]. + /// Checks whether the block body is a [`BasicBlockBody`]. pub fn is_basic(&self) -> bool { - self.block.is_basic() + self.body.is_basic() } - /// Gets the inner block as an actual [`BasicBlock`]. - /// NOTE: Will panic if the inner block is not a [`BasicBlock`]. - pub fn as_basic(&self) -> &BasicBlock { - self.block.as_basic() + /// Gets the block body as an actual [`BasicBlockBody`]. + /// NOTE: Will panic if the block body is not a [`BasicBlockBody`]. + pub fn as_basic(&self) -> &BasicBlockBody { + self.body.as_basic() } - /// Checks whether the inner block is a [`ValidationBlock`]. + /// Checks whether the block body is a [`ValidationBlockBody`]. pub fn is_validation(&self) -> bool { - self.block.is_validation() + self.body.is_validation() } - /// Gets the inner block as an actual [`ValidationBlock`]. - /// NOTE: Will panic if the inner block is not a [`ValidationBlock`]. - pub fn as_validation(&self) -> &ValidationBlock { - self.block.as_validation() + /// Gets the block body as an actual [`ValidationBlockBody`]. + /// NOTE: Will panic if the block body is not a [`ValidationBlockBody`]. + pub fn as_validation(&self) -> &ValidationBlockBody { + self.body.as_validation() } } -impl Packable for SignedBlock { +impl Packable for Block { type UnpackError = Error; type UnpackVisitor = ProtocolParameters; fn pack(&self, packer: &mut P) -> Result<(), P::Error> { self.header.pack(packer)?; - self.block.pack(packer)?; + self.body.pack(packer)?; self.signature.pack(packer)?; Ok(()) @@ -309,30 +309,28 @@ impl Packable for SignedBlock { let start_opt = unpacker.read_bytes(); let header = BlockHeader::unpack::<_, VERIFY>(unpacker, protocol_params)?; - - let block = Block::unpack::<_, VERIFY>(unpacker, protocol_params)?; - + let body = BlockBody::unpack::<_, VERIFY>(unpacker, protocol_params)?; let signature = Signature::unpack::<_, VERIFY>(unpacker, &())?; - let signed_block = Self { + let block = Self { header, - block, + body, signature, }; if VERIFY { - let signed_block_len = if let (Some(start), Some(end)) = (start_opt, unpacker.read_bytes()) { + let block_len = if let (Some(start), Some(end)) = (start_opt, unpacker.read_bytes()) { end - start } else { - signed_block.packed_len() + block.packed_len() }; - if signed_block_len > Self::LENGTH_MAX { - return Err(UnpackError::Packable(Error::InvalidSignedBlockLength(signed_block_len))); + if block_len > Self::LENGTH_MAX { + return Err(UnpackError::Packable(Error::InvalidBlockLength(block_len))); } } - Ok(signed_block) + Ok(block) } } @@ -342,20 +340,20 @@ pub(crate) mod dto { use super::*; use crate::{ - types::{block::core::dto::BlockDto, TryFromDto}, + types::{block::core::dto::BlockBodyDto, TryFromDto}, utils::serde::string, }; /// The block object that nodes gossip around in the network. #[derive(Clone, Debug, Eq, PartialEq, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] - pub struct SignedBlockDto { + pub struct BlockDto { #[serde(flatten)] pub inner: UnsignedBlockDto, pub signature: Signature, } - impl core::ops::Deref for SignedBlockDto { + impl core::ops::Deref for BlockDto { type Target = UnsignedBlockDto; fn deref(&self) -> &Self::Target { @@ -363,56 +361,44 @@ pub(crate) mod dto { } } - impl From<&SignedBlock> for SignedBlockDto { - fn from(value: &SignedBlock) -> Self { + impl From<&Block> for BlockDto { + fn from(value: &Block) -> Self { Self { inner: UnsignedBlockDto { - protocol_version: value.protocol_version(), - network_id: value.network_id(), - issuing_time: value.issuing_time(), - slot_commitment_id: value.slot_commitment_id(), - latest_finalized_slot: value.latest_finalized_slot(), - issuer_id: value.issuer_id(), - block: BlockDto::from(&value.block), + header: BlockHeaderDto::from(&value.header), + body: BlockBodyDto::from(&value.body), }, signature: value.signature, } } } - impl TryFromDto for SignedBlock { + impl TryFromDto for Block { type Error = Error; fn try_from_dto_with_params_inner( - dto: SignedBlockDto, + dto: BlockDto, params: Option<&ProtocolParameters>, ) -> Result { if let Some(protocol_params) = params { - if dto.inner.protocol_version != protocol_params.version() { + if dto.inner.header.protocol_version != protocol_params.version() { return Err(Error::ProtocolVersionMismatch { expected: protocol_params.version(), - actual: dto.inner.protocol_version, + actual: dto.inner.header.protocol_version, }); } - if dto.inner.network_id != protocol_params.network_id() { + if dto.inner.header.network_id != protocol_params.network_id() { return Err(Error::NetworkIdMismatch { expected: protocol_params.network_id(), - actual: dto.inner.network_id, + actual: dto.inner.header.network_id, }); } } Ok(Self::new( - BlockHeader::new( - dto.inner.protocol_version, - dto.inner.network_id, - dto.inner.issuing_time, - dto.inner.slot_commitment_id, - dto.inner.latest_finalized_slot, - dto.inner.issuer_id, - ), - Block::try_from_dto_with_params_inner(dto.inner.block, params)?, + BlockHeader::try_from_dto_with_params_inner(dto.inner.header, params)?, + BlockBody::try_from_dto_with_params_inner(dto.inner.body, params)?, dto.signature, )) } @@ -420,7 +406,7 @@ pub(crate) mod dto { #[derive(Clone, Debug, Eq, PartialEq, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] - pub struct UnsignedBlockDto { + pub struct BlockHeaderDto { pub protocol_version: u8, #[serde(with = "string")] pub network_id: u64, @@ -429,28 +415,26 @@ pub(crate) mod dto { pub slot_commitment_id: SlotCommitmentId, pub latest_finalized_slot: SlotIndex, pub issuer_id: IssuerId, - pub block: BlockDto, } - impl From<&UnsignedBlock> for UnsignedBlockDto { - fn from(value: &UnsignedBlock) -> Self { + impl From<&BlockHeader> for BlockHeaderDto { + fn from(value: &BlockHeader) -> Self { Self { - protocol_version: value.header.protocol_version(), - network_id: value.header.network_id(), - issuing_time: value.header.issuing_time(), - slot_commitment_id: value.header.slot_commitment_id(), - latest_finalized_slot: value.header.latest_finalized_slot(), - issuer_id: value.header.issuer_id(), - block: BlockDto::from(&value.block), + protocol_version: value.protocol_version(), + network_id: value.network_id(), + issuing_time: value.issuing_time(), + slot_commitment_id: value.slot_commitment_id(), + latest_finalized_slot: value.latest_finalized_slot(), + issuer_id: value.issuer_id(), } } } - impl TryFromDto for UnsignedBlock { + impl TryFromDto for BlockHeader { type Error = Error; fn try_from_dto_with_params_inner( - dto: UnsignedBlockDto, + dto: BlockHeaderDto, params: Option<&ProtocolParameters>, ) -> Result { if let Some(protocol_params) = params { @@ -470,15 +454,42 @@ pub(crate) mod dto { } Ok(Self::new( - BlockHeader::new( - dto.protocol_version, - dto.network_id, - dto.issuing_time, - dto.slot_commitment_id, - dto.latest_finalized_slot, - dto.issuer_id, - ), - Block::try_from_dto_with_params_inner(dto.block, params)?, + dto.protocol_version, + dto.network_id, + dto.issuing_time, + dto.slot_commitment_id, + dto.latest_finalized_slot, + dto.issuer_id, + )) + } + } + + #[derive(Clone, Debug, Eq, PartialEq, Serialize, Deserialize)] + #[serde(rename_all = "camelCase")] + pub struct UnsignedBlockDto { + pub header: BlockHeaderDto, + pub body: BlockBodyDto, + } + + impl From<&UnsignedBlock> for UnsignedBlockDto { + fn from(value: &UnsignedBlock) -> Self { + Self { + header: BlockHeaderDto::from(&value.header), + body: BlockBodyDto::from(&value.body), + } + } + } + + impl TryFromDto for UnsignedBlock { + type Error = Error; + + fn try_from_dto_with_params_inner( + dto: UnsignedBlockDto, + params: Option<&ProtocolParameters>, + ) -> Result { + Ok(Self::new( + BlockHeader::try_from_dto_with_params_inner(dto.header, params)?, + BlockBody::try_from_dto_with_params_inner(dto.body, params)?, )) } } diff --git a/sdk/src/types/block/core/mod.rs b/sdk/src/types/block/core/mod.rs index 051190ba34..316b75d75f 100644 --- a/sdk/src/types/block/core/mod.rs +++ b/sdk/src/types/block/core/mod.rs @@ -2,8 +2,8 @@ // SPDX-License-Identifier: Apache-2.0 pub mod basic; +mod block; mod parent; -mod signed_block; pub mod validation; use alloc::boxed::Box; @@ -13,10 +13,10 @@ use derive_more::From; use packable::{Packable, PackableExt}; pub use self::{ - basic::{BasicBlock, BasicBlockBuilder}, + basic::{BasicBlockBody, BasicBlockBodyBuilder}, + block::{Block, BlockHeader, UnsignedBlock}, parent::Parents, - signed_block::{BlockHeader, SignedBlock, UnsignedBlock}, - validation::{ValidationBlock, ValidationBlockBuilder}, + validation::{ValidationBlockBody, ValidationBlockBodyBuilder}, }; use crate::types::block::{ protocol::{ProtocolParameters, ProtocolParametersHash}, @@ -26,76 +26,76 @@ use crate::types::block::{ #[derive(Clone, Debug, Eq, PartialEq, From, Packable)] #[packable(unpack_error = Error)] #[packable(unpack_visitor = ProtocolParameters)] -#[packable(tag_type = u8, with_error = Error::InvalidBlockKind)] -pub enum Block { - #[packable(tag = BasicBlock::KIND)] - Basic(Box), - #[packable(tag = ValidationBlock::KIND)] - Validation(Box), +#[packable(tag_type = u8, with_error = Error::InvalidBlockBodyKind)] +pub enum BlockBody { + #[packable(tag = BasicBlockBody::KIND)] + Basic(Box), + #[packable(tag = ValidationBlockBody::KIND)] + Validation(Box), } -impl From for Block { - fn from(value: BasicBlock) -> Self { +impl From for BlockBody { + fn from(value: BasicBlockBody) -> Self { Self::Basic(value.into()) } } -impl From for Block { - fn from(value: ValidationBlock) -> Self { +impl From for BlockBody { + fn from(value: ValidationBlockBody) -> Self { Self::Validation(value.into()) } } -impl TryFrom for BasicBlockBuilder { +impl TryFrom for BasicBlockBodyBuilder { type Error = Error; - fn try_from(value: Block) -> Result { - if let Block::Basic(block) = value { + fn try_from(value: BlockBody) -> Result { + if let BlockBody::Basic(block) = value { Ok((*block).into()) } else { - Err(Error::InvalidBlockKind(value.kind())) + Err(Error::InvalidBlockBodyKind(value.kind())) } } } -impl TryFrom for ValidationBlockBuilder { +impl TryFrom for ValidationBlockBodyBuilder { type Error = Error; - fn try_from(value: Block) -> Result { - if let Block::Validation(block) = value { + fn try_from(value: BlockBody) -> Result { + if let BlockBody::Validation(block) = value { Ok((*block).into()) } else { - Err(Error::InvalidBlockKind(value.kind())) + Err(Error::InvalidBlockBodyKind(value.kind())) } } } -impl Block { - /// Return the block kind of a [`Block`]. +impl BlockBody { + /// Return the block body kind of a [`BlockBody`]. pub fn kind(&self) -> u8 { match self { - Self::Basic(_) => BasicBlock::KIND, - Self::Validation(_) => ValidationBlock::KIND, + Self::Basic(_) => BasicBlockBody::KIND, + Self::Validation(_) => ValidationBlockBody::KIND, } } - /// Creates a new [`BasicBlockBuilder`]. + /// Creates a new [`BasicBlockBodyBuilder`]. #[inline(always)] - pub fn build_basic(strong_parents: self::basic::StrongParents, max_burned_mana: u64) -> BasicBlockBuilder { - BasicBlockBuilder::new(strong_parents, max_burned_mana) + pub fn build_basic(strong_parents: self::basic::StrongParents, max_burned_mana: u64) -> BasicBlockBodyBuilder { + BasicBlockBodyBuilder::new(strong_parents, max_burned_mana) } - /// Creates a new [`ValidationBlockBuilder`]. + /// Creates a new [`ValidationBlockBodyBuilder`]. #[inline(always)] pub fn build_validation( strong_parents: self::validation::StrongParents, highest_supported_version: u8, protocol_parameters_hash: ProtocolParametersHash, - ) -> ValidationBlockBuilder { - ValidationBlockBuilder::new(strong_parents, highest_supported_version, protocol_parameters_hash) + ) -> ValidationBlockBodyBuilder { + ValidationBlockBodyBuilder::new(strong_parents, highest_supported_version, protocol_parameters_hash) } - crate::def_is_as_opt!(Block: Basic, Validation); + crate::def_is_as_opt!(BlockBody: Basic, Validation); pub(crate) fn hash(&self) -> [u8; 32] { Blake2b256::digest(self.pack_to_vec()).into() @@ -110,102 +110,105 @@ pub(crate) mod dto { use serde_json::Value; use super::*; - pub use crate::types::block::core::signed_block::dto::{SignedBlockDto, UnsignedBlockDto}; + pub use crate::types::block::core::block::dto::{BlockDto, UnsignedBlockDto}; use crate::types::{ - block::core::{basic::dto::BasicBlockDto, validation::dto::ValidationBlockDto}, + block::core::{basic::dto::BasicBlockBodyDto, validation::dto::ValidationBlockBodyDto}, TryFromDto, }; #[derive(Clone, Debug, Eq, PartialEq, From)] - pub enum BlockDto { - Basic(BasicBlockDto), - Validation(ValidationBlockDto), + pub enum BlockBodyDto { + Basic(BasicBlockBodyDto), + Validation(ValidationBlockBodyDto), } - impl From<&BasicBlock> for BlockDto { - fn from(value: &BasicBlock) -> Self { + impl From<&BasicBlockBody> for BlockBodyDto { + fn from(value: &BasicBlockBody) -> Self { Self::Basic(value.into()) } } - impl From<&ValidationBlock> for BlockDto { - fn from(value: &ValidationBlock) -> Self { + impl From<&ValidationBlockBody> for BlockBodyDto { + fn from(value: &ValidationBlockBody) -> Self { Self::Validation(value.into()) } } - impl<'de> Deserialize<'de> for BlockDto { + impl<'de> Deserialize<'de> for BlockBodyDto { fn deserialize>(d: D) -> Result { let value = Value::deserialize(d)?; Ok( match value .get("type") .and_then(Value::as_u64) - .ok_or_else(|| serde::de::Error::custom("invalid block type"))? as u8 + .ok_or_else(|| serde::de::Error::custom("invalid block body type"))? as u8 { - BasicBlock::KIND => Self::Basic( - BasicBlockDto::deserialize(value) - .map_err(|e| serde::de::Error::custom(format!("cannot deserialize basic block: {e}")))?, - ), - ValidationBlock::KIND => { - Self::Validation(ValidationBlockDto::deserialize(value).map_err(|e| { - serde::de::Error::custom(format!("cannot deserialize validation block: {e}")) + BasicBlockBody::KIND => { + Self::Basic(BasicBlockBodyDto::deserialize(value).map_err(|e| { + serde::de::Error::custom(format!("cannot deserialize basic block body: {e}")) })?) } - _ => return Err(serde::de::Error::custom("invalid block type")), + ValidationBlockBody::KIND => { + Self::Validation(ValidationBlockBodyDto::deserialize(value).map_err(|e| { + serde::de::Error::custom(format!("cannot deserialize validation block body: {e}")) + })?) + } + _ => return Err(serde::de::Error::custom("invalid block body type")), }, ) } } - impl Serialize for BlockDto { + impl Serialize for BlockBodyDto { fn serialize(&self, serializer: S) -> Result where S: serde::Serializer, { #[derive(Serialize)] #[serde(untagged)] - enum BlockTypeDto_<'a> { - T0(&'a BasicBlockDto), - T1(&'a ValidationBlockDto), + enum BlockBodyTypeDto_<'a> { + T0(&'a BasicBlockBodyDto), + T1(&'a ValidationBlockBodyDto), } #[derive(Serialize)] - struct TypedBlock<'a> { + struct TypedBlockBody<'a> { #[serde(flatten)] - kind: BlockTypeDto_<'a>, + kind: BlockBodyTypeDto_<'a>, } - let block = match self { - Self::Basic(b) => TypedBlock { - kind: BlockTypeDto_::T0(b), + let block_body = match self { + Self::Basic(basic_block_body) => TypedBlockBody { + kind: BlockBodyTypeDto_::T0(basic_block_body), }, - Self::Validation(b) => TypedBlock { - kind: BlockTypeDto_::T1(b), + Self::Validation(validation_block_body) => TypedBlockBody { + kind: BlockBodyTypeDto_::T1(validation_block_body), }, }; - block.serialize(serializer) + block_body.serialize(serializer) } } - impl From<&Block> for BlockDto { - fn from(value: &Block) -> Self { + impl From<&BlockBody> for BlockBodyDto { + fn from(value: &BlockBody) -> Self { match value { - Block::Basic(basic) => BasicBlockDto::from(&**basic).into(), - Block::Validation(validation) => ValidationBlockDto::from(validation.as_ref()).into(), + BlockBody::Basic(basic_block_body) => BasicBlockBodyDto::from(&**basic_block_body).into(), + BlockBody::Validation(validation_block_body) => { + ValidationBlockBodyDto::from(validation_block_body.as_ref()).into() + } } } } - impl TryFromDto for Block { + impl TryFromDto for BlockBody { type Error = Error; fn try_from_dto_with_params_inner( - dto: BlockDto, + dto: BlockBodyDto, params: Option<&ProtocolParameters>, ) -> Result { match dto { - BlockDto::Basic(basic) => Ok(BasicBlock::try_from_dto_with_params_inner(basic, params)?.into()), - BlockDto::Validation(validation) => { - Ok(ValidationBlock::try_from_dto_with_params_inner(validation, params)?.into()) + BlockBodyDto::Basic(dto) => Ok(BasicBlockBody::try_from_dto_with_params_inner(dto, params)?.into()), + BlockBodyDto::Validation(dto) => { + Ok(ValidationBlockBody::try_from_dto_with_params_inner(dto, params)?.into()) } } } diff --git a/sdk/src/types/block/core/validation.rs b/sdk/src/types/block/core/validation.rs index 545574250f..43a9a5700a 100644 --- a/sdk/src/types/block/core/validation.rs +++ b/sdk/src/types/block/core/validation.rs @@ -4,7 +4,7 @@ use packable::Packable; use crate::types::block::{ - core::{parent::verify_parents_sets, Block, Parents}, + core::{parent::verify_parents_sets, BlockBody, Parents}, protocol::{ProtocolParameters, ProtocolParametersHash}, Error, }; @@ -13,8 +13,8 @@ pub type StrongParents = Parents<1, 50>; pub type WeakParents = Parents<0, 50>; pub type ShallowLikeParents = Parents<0, 50>; -/// A builder for a [`ValidationBlock`]. -pub struct ValidationBlockBuilder { +/// A builder for a [`ValidationBlockBody`]. +pub struct ValidationBlockBodyBuilder { strong_parents: StrongParents, weak_parents: WeakParents, shallow_like_parents: ShallowLikeParents, @@ -22,8 +22,8 @@ pub struct ValidationBlockBuilder { protocol_parameters_hash: ProtocolParametersHash, } -impl ValidationBlockBuilder { - /// Creates a new [`ValidationBlockBuilder`]. +impl ValidationBlockBodyBuilder { + /// Creates a new [`ValidationBlockBodyBuilder`]. #[inline(always)] pub fn new( strong_parents: StrongParents, @@ -39,46 +39,46 @@ impl ValidationBlockBuilder { } } - /// Adds strong parents to a [`ValidationBlockBuilder`]. + /// Adds strong parents to a [`ValidationBlockBodyBuilder`]. #[inline(always)] pub fn with_strong_parents(mut self, strong_parents: impl Into) -> Self { self.strong_parents = strong_parents.into(); self } - /// Adds weak parents to a [`ValidationBlockBuilder`]. + /// Adds weak parents to a [`ValidationBlockBodyBuilder`]. #[inline(always)] pub fn with_weak_parents(mut self, weak_parents: impl Into) -> Self { self.weak_parents = weak_parents.into(); self } - /// Adds shallow like parents to a [`ValidationBlockBuilder`]. + /// Adds shallow like parents to a [`ValidationBlockBodyBuilder`]. #[inline(always)] pub fn with_shallow_like_parents(mut self, shallow_like_parents: impl Into) -> Self { self.shallow_like_parents = shallow_like_parents.into(); self } - /// Adds a highest supported version to a [`ValidationBlockBuilder`]. + /// Adds a highest supported version to a [`ValidationBlockBodyBuilder`]. #[inline(always)] pub fn with_highest_supported_version(mut self, highest_supported_version: u8) -> Self { self.highest_supported_version = highest_supported_version; self } - /// Adds a protocol parameter hash to a [`ValidationBlockBuilder`]. + /// Adds a protocol parameter hash to a [`ValidationBlockBodyBuilder`]. #[inline(always)] pub fn with_protocol_parameters_hash(mut self, protocol_parameters_hash: ProtocolParametersHash) -> Self { self.protocol_parameters_hash = protocol_parameters_hash; self } - /// Finishes the builder into a [`ValidationBlock`]. - pub fn finish(self) -> Result { + /// Finishes the builder into a [`ValidationBlockBody`]. + pub fn finish(self) -> Result { verify_parents_sets(&self.strong_parents, &self.weak_parents, &self.shallow_like_parents)?; - Ok(ValidationBlock { + Ok(ValidationBlockBody { strong_parents: self.strong_parents, weak_parents: self.weak_parents, shallow_like_parents: self.shallow_like_parents, @@ -87,14 +87,14 @@ impl ValidationBlockBuilder { }) } - /// Finishes the builder into a [`Block`]. - pub fn finish_block(self) -> Result { - Ok(Block::from(self.finish()?)) + /// Finishes the builder into a [`BlockBody`]. + pub fn finish_block_body(self) -> Result { + Ok(BlockBody::from(self.finish()?)) } } -impl From for ValidationBlockBuilder { - fn from(value: ValidationBlock) -> Self { +impl From for ValidationBlockBodyBuilder { + fn from(value: ValidationBlockBody) -> Self { Self { strong_parents: value.strong_parents, weak_parents: value.weak_parents, @@ -105,14 +105,14 @@ impl From for ValidationBlockBuilder { } } -/// A Validation Block is a special type of block used by validators to secure the network. It is recognized by the -/// Congestion Control of the IOTA 2.0 protocol and can be issued without burning Mana within the constraints of the -/// allowed validator throughput. It is allowed to reference more parent blocks than a normal Basic Block. +/// A Validation Block Body is a special type of block body used by validators to secure the network. It is recognized +/// by the Congestion Control of the IOTA 2.0 protocol and can be issued without burning Mana within the constraints of +/// the allowed validator throughput. It is allowed to reference more parent blocks than a normal Basic Block Body. #[derive(Clone, Debug, Eq, PartialEq, Packable)] #[packable(unpack_error = Error)] #[packable(unpack_visitor = ProtocolParameters)] -#[packable(verify_with = verify_validation_block)] -pub struct ValidationBlock { +#[packable(verify_with = verify_validation_block_body)] +pub struct ValidationBlockBody { /// Blocks that are strongly directly approved. strong_parents: StrongParents, /// Blocks that are weakly directly approved. @@ -126,34 +126,34 @@ pub struct ValidationBlock { protocol_parameters_hash: ProtocolParametersHash, } -impl ValidationBlock { +impl ValidationBlockBody { pub const KIND: u8 = 1; - /// Returns the strong parents of a [`ValidationBlock`]. + /// Returns the strong parents of a [`ValidationBlockBody`]. #[inline(always)] pub fn strong_parents(&self) -> &StrongParents { &self.strong_parents } - /// Returns the weak parents of a [`ValidationBlock`]. + /// Returns the weak parents of a [`ValidationBlockBody`]. #[inline(always)] pub fn weak_parents(&self) -> &WeakParents { &self.weak_parents } - /// Returns the shallow like parents of a [`ValidationBlock`]. + /// Returns the shallow like parents of a [`ValidationBlockBody`]. #[inline(always)] pub fn shallow_like_parents(&self) -> &ShallowLikeParents { &self.shallow_like_parents } - /// Returns the highest supported protocol version of a [`ValidationBlock`]. + /// Returns the highest supported protocol version of a [`ValidationBlockBody`]. #[inline(always)] pub fn highest_supported_version(&self) -> u8 { self.highest_supported_version } - /// Returns the protocol parameters hash of a [`ValidationBlock`]. + /// Returns the protocol parameters hash of a [`ValidationBlockBody`]. #[inline(always)] pub fn protocol_parameters_hash(&self) -> ProtocolParametersHash { self.protocol_parameters_hash @@ -178,15 +178,15 @@ fn verify_protocol_parameters_hash( Ok(()) } -fn verify_validation_block( - validation_block: &ValidationBlock, +fn verify_validation_block_body( + validation_block_body: &ValidationBlockBody, _: &ProtocolParameters, ) -> Result<(), Error> { if VERIFY { verify_parents_sets( - &validation_block.strong_parents, - &validation_block.weak_parents, - &validation_block.shallow_like_parents, + &validation_block_body.strong_parents, + &validation_block_body.weak_parents, + &validation_block_body.shallow_like_parents, )?; } @@ -207,7 +207,7 @@ pub(crate) mod dto { #[derive(Clone, Debug, Eq, PartialEq, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] - pub struct ValidationBlockDto { + pub struct ValidationBlockBodyDto { #[serde(rename = "type")] pub kind: u8, pub strong_parents: BTreeSet, @@ -217,10 +217,10 @@ pub(crate) mod dto { pub protocol_parameters_hash: ProtocolParametersHash, } - impl From<&ValidationBlock> for ValidationBlockDto { - fn from(value: &ValidationBlock) -> Self { + impl From<&ValidationBlockBody> for ValidationBlockBodyDto { + fn from(value: &ValidationBlockBody) -> Self { Self { - kind: ValidationBlock::KIND, + kind: ValidationBlockBody::KIND, strong_parents: value.strong_parents.to_set(), weak_parents: value.weak_parents.to_set(), shallow_like_parents: value.shallow_like_parents.to_set(), @@ -230,18 +230,18 @@ pub(crate) mod dto { } } - impl TryFromDto for ValidationBlock { + impl TryFromDto for ValidationBlockBody { type Error = Error; fn try_from_dto_with_params_inner( - dto: ValidationBlockDto, + dto: ValidationBlockBodyDto, params: Option<&ProtocolParameters>, ) -> Result { if let Some(protocol_params) = params { verify_protocol_parameters_hash::(&dto.protocol_parameters_hash, protocol_params)?; } - ValidationBlockBuilder::new( + ValidationBlockBodyBuilder::new( StrongParents::from_set(dto.strong_parents)?, dto.highest_supported_version, dto.protocol_parameters_hash, diff --git a/sdk/src/types/block/error.rs b/sdk/src/types/block/error.rs index 1382f6a562..394a04a605 100644 --- a/sdk/src/types/block/error.rs +++ b/sdk/src/types/block/error.rs @@ -53,7 +53,7 @@ pub enum Error { InvalidAddressKind(u8), InvalidAccountIndex(>::Error), InvalidAnchorIndex(>::Error), - InvalidBlockKind(u8), + InvalidBlockBodyKind(u8), InvalidRewardInputIndex(>::Error), InvalidStorageDepositAmount(u64), /// Invalid transaction failure reason byte. @@ -100,7 +100,7 @@ pub enum Error { index: usize, byte: u8, }, - InvalidSignedBlockLength(usize), + InvalidBlockLength(usize), InvalidStateMetadataLength(>::Error), InvalidManaValue(u64), InvalidMetadataFeatureLength(>::Error), @@ -247,7 +247,7 @@ impl fmt::Display for Error { Self::InvalidCapabilityByte { index, byte } => { write!(f, "invalid capability byte at index {index}: {byte:x}") } - Self::InvalidBlockKind(k) => write!(f, "invalid block kind: {k}"), + Self::InvalidBlockBodyKind(k) => write!(f, "invalid block body kind: {k}"), Self::InvalidRewardInputIndex(idx) => write!(f, "invalid reward input index: {idx}"), Self::InvalidStorageDepositAmount(amount) => { write!(f, "invalid storage deposit amount: {amount}") @@ -300,7 +300,7 @@ impl fmt::Display for Error { Self::InvalidInputKind(k) => write!(f, "invalid input kind: {k}"), Self::InvalidInputCount(count) => write!(f, "invalid input count: {count}"), Self::InvalidInputOutputIndex(index) => write!(f, "invalid input or output index: {index}"), - Self::InvalidSignedBlockLength(length) => write!(f, "invalid signed block length {length}"), + Self::InvalidBlockLength(length) => write!(f, "invalid block length {length}"), Self::InvalidStateMetadataLength(length) => write!(f, "invalid state metadata length: {length}"), Self::InvalidManaValue(mana) => write!(f, "invalid mana value: {mana}"), Self::InvalidMetadataFeatureLength(length) => { diff --git a/sdk/src/types/block/mod.rs b/sdk/src/types/block/mod.rs index df210e8224..724454453e 100644 --- a/sdk/src/types/block/mod.rs +++ b/sdk/src/types/block/mod.rs @@ -41,11 +41,11 @@ pub mod slot; pub mod unlock; #[cfg(feature = "serde")] -pub use self::core::dto::{BlockDto, SignedBlockDto, UnsignedBlockDto}; +pub use self::core::dto::{BlockBodyDto, BlockDto, UnsignedBlockDto}; pub(crate) use self::r#macro::*; pub use self::{ block_id::{BlockHash, BlockId}, - core::{Block, SignedBlock, UnsignedBlock}, + core::{Block, BlockBody, UnsignedBlock}, error::Error, issuer_id::IssuerId, }; diff --git a/sdk/src/types/block/output/feature/block_issuer.rs b/sdk/src/types/block/output/feature/block_issuer.rs index e948559958..6c63033858 100644 --- a/sdk/src/types/block/output/feature/block_issuer.rs +++ b/sdk/src/types/block/output/feature/block_issuer.rs @@ -54,7 +54,7 @@ impl BlockIssuerKey { impl StorageScore for BlockIssuerKey { fn storage_score(&self, params: StorageScoreParameters) -> u64 { match self { - BlockIssuerKey::Ed25519(e) => e.storage_score(params), + Self::Ed25519(e) => e.storage_score(params), } } } diff --git a/sdk/src/types/block/output/mod.rs b/sdk/src/types/block/output/mod.rs index 0bdc494244..9bbe5280c2 100644 --- a/sdk/src/types/block/output/mod.rs +++ b/sdk/src/types/block/output/mod.rs @@ -255,7 +255,7 @@ impl Output { /// Checks whether the output is an implicit account. pub fn is_implicit_account(&self) -> bool { - if let Output::Basic(output) = self { + if let Self::Basic(output) = self { output.is_implicit_account() } else { false diff --git a/sdk/src/types/block/payload/tagged_data/mod.rs b/sdk/src/types/block/payload/tagged_data/mod.rs index aba08669b3..4eccdae458 100644 --- a/sdk/src/types/block/payload/tagged_data/mod.rs +++ b/sdk/src/types/block/payload/tagged_data/mod.rs @@ -12,7 +12,7 @@ use packable::{ Packable, }; -use crate::types::block::{Error, SignedBlock}; +use crate::types::block::{Block, Error}; pub(crate) type TagLength = BoundedU8<{ *TaggedDataPayload::TAG_LENGTH_RANGE.start() }, { *TaggedDataPayload::TAG_LENGTH_RANGE.end() }>; @@ -38,8 +38,7 @@ impl TaggedDataPayload { // Less than max block length, because of the other fields in the block and payload kind, tagged payload field // lengths. // TODO https://github.com/iotaledger/iota-sdk/issues/1226 - pub const DATA_LENGTH_RANGE: RangeInclusive = - 0..=(SignedBlock::LENGTH_MAX - SignedBlock::LENGTH_MIN - 9) as u32; + pub const DATA_LENGTH_RANGE: RangeInclusive = 0..=(Block::LENGTH_MAX - Block::LENGTH_MIN - 9) as u32; /// Creates a new [`TaggedDataPayload`]. pub fn new(tag: impl Into>, data: impl Into>) -> Result { diff --git a/sdk/src/types/block/rand/block.rs b/sdk/src/types/block/rand/block.rs index 8079751708..1bf1d3d3bf 100644 --- a/sdk/src/types/block/rand/block.rs +++ b/sdk/src/types/block/rand/block.rs @@ -5,8 +5,8 @@ use alloc::vec::Vec; use crate::types::block::{ core::{ - basic::{self, BasicBlockBuilder}, - BlockHeader, SignedBlock, UnsignedBlock, + basic::{self, BasicBlockBodyBuilder}, + Block, BlockHeader, UnsignedBlock, }, protocol::ProtocolParameters, rand::{ @@ -18,7 +18,7 @@ use crate::types::block::{ signature::rand_sign_ed25519, slot::{rand_slot_commitment_id, rand_slot_index}, }, - Block, BlockId, + BlockBody, BlockId, }; /// Generates a random block id. @@ -33,22 +33,24 @@ pub fn rand_block_ids(len: usize) -> Vec { parents } -/// Generates a random basic block with given strong parents. -pub fn rand_basic_block_with_strong_parents(strong_parents: basic::StrongParents) -> Block { - rand_basic_block_builder_with_strong_parents(strong_parents) +/// Generates a random basic block body with given strong parents. +pub fn rand_basic_block_body_with_strong_parents(strong_parents: basic::StrongParents) -> BlockBody { + rand_basic_block_body_builder_with_strong_parents(strong_parents) .with_payload(rand_payload_for_block()) - .finish_block() + .finish_block_body() .unwrap() } -/// Generates a random basic block builder with given strong parents. -pub fn rand_basic_block_builder_with_strong_parents(strong_parents: basic::StrongParents) -> BasicBlockBuilder { - Block::build_basic(strong_parents, rand_number()) +/// Generates a random basic block body builder with given strong parents. +pub fn rand_basic_block_body_builder_with_strong_parents( + strong_parents: basic::StrongParents, +) -> BasicBlockBodyBuilder { + BlockBody::build_basic(strong_parents, rand_number()) } -/// Generates a random signed block with given block. -pub fn rand_signed_block_with_block(protocol_params: ProtocolParameters, block: Block) -> SignedBlock { - SignedBlock::build( +/// Generates a random block with given block body. +pub fn rand_block_with_block_body(protocol_params: ProtocolParameters, block: BlockBody) -> Block { + Block::build( BlockHeader::new( protocol_params.version(), protocol_params.network_id(), @@ -62,25 +64,28 @@ pub fn rand_signed_block_with_block(protocol_params: ProtocolParameters, block: .sign_random() } -/// Generates a random signed block with given strong parents. -pub fn rand_signed_block_with_strong_parents( +/// Generates a random block with given strong parents. +pub fn rand_block_with_strong_parents( protocol_params: ProtocolParameters, strong_parents: basic::StrongParents, -) -> SignedBlock { - rand_signed_block_with_block(protocol_params, rand_basic_block_with_strong_parents(strong_parents)) +) -> Block { + rand_block_with_block_body( + protocol_params, + rand_basic_block_body_with_strong_parents(strong_parents), + ) } -/// Generates a random signed block. -pub fn rand_signed_block(protocol_params: ProtocolParameters) -> SignedBlock { - rand_signed_block_with_strong_parents(protocol_params, rand_strong_parents()) +/// Generates a random block. +pub fn rand_block(protocol_params: ProtocolParameters) -> Block { + rand_block_with_strong_parents(protocol_params, rand_strong_parents()) } pub trait SignBlockRandom { - fn sign_random(self) -> SignedBlock; + fn sign_random(self) -> Block; } impl SignBlockRandom for UnsignedBlock { - fn sign_random(self) -> SignedBlock { + fn sign_random(self) -> Block { let signing_input = self.signing_input(); self.finish(rand_sign_ed25519(&signing_input)).unwrap() } diff --git a/sdk/src/wallet/operations/syncing/outputs.rs b/sdk/src/wallet/operations/syncing/outputs.rs index ce4e3c3928..85461ce33d 100644 --- a/sdk/src/wallet/operations/syncing/outputs.rs +++ b/sdk/src/wallet/operations/syncing/outputs.rs @@ -9,7 +9,7 @@ use crate::{ types::{ api::core::OutputWithMetadataResponse, block::{ - core::{BasicBlock, Block}, + core::{BasicBlockBody, BlockBody}, input::Input, output::{OutputId, OutputWithMetadata}, payload::{signed_transaction::TransactionId, Payload, SignedTransactionPayload}, @@ -145,9 +145,11 @@ where futures::future::try_join_all(transaction_ids.iter().map(|transaction_id| async { let transaction_id = *transaction_id; match client.get_included_block(&transaction_id).await { - Ok(signed_block) => { - if let Block::Basic(block) = signed_block.block() { - if let Some(Payload::SignedTransaction(transaction_payload)) = block.payload() { + Ok(block) => { + if let BlockBody::Basic(basic_block_body) = block.body() { + if let Some(Payload::SignedTransaction(transaction_payload)) = + basic_block_body.payload() + { let inputs_with_meta = get_inputs_for_transaction_payload(&client, transaction_payload) .await?; @@ -167,9 +169,9 @@ where Ok((transaction_id, None)) } } else { - Err(ClientError::UnexpectedBlockKind { - expected: BasicBlock::KIND, - actual: signed_block.block().kind(), + Err(ClientError::UnexpectedBlockBodyKind { + expected: BasicBlockBody::KIND, + actual: block.body().kind(), } .into()) } diff --git a/sdk/tests/client/node_api/core.rs b/sdk/tests/client/node_api/core.rs index b24ca5b13d..3707fa7c94 100644 --- a/sdk/tests/client/node_api/core.rs +++ b/sdk/tests/client/node_api/core.rs @@ -12,7 +12,7 @@ use iota_sdk::{ api::core::TransactionState, block::{ output::{Output, OutputId}, - SignedBlock, + Block, }, }, }; @@ -195,7 +195,7 @@ async fn test_get_included_block_raw() { let (_block_id, transaction_id) = setup_transaction_block(&client).await; let block = client.get_included_block(&transaction_id).await.unwrap(); - let block_raw = SignedBlock::unpack_verified( + let block_raw = Block::unpack_verified( client.get_included_block_raw(&transaction_id).await.unwrap(), &client.get_protocol_parameters().await.unwrap(), ) diff --git a/sdk/tests/types/block.rs b/sdk/tests/types/block.rs index ad04349932..47d536265f 100644 --- a/sdk/tests/types/block.rs +++ b/sdk/tests/types/block.rs @@ -7,11 +7,11 @@ use iota_sdk::types::{ payload::Payload, protocol::{protocol_parameters, ProtocolParameters}, rand::{ - block::{rand_basic_block_builder_with_strong_parents, rand_signed_block, rand_signed_block_with_block}, + block::{rand_basic_block_body_builder_with_strong_parents, rand_block, rand_block_with_block_body}, parents::rand_strong_parents, payload::rand_tagged_data_payload, }, - SignedBlock, SignedBlockDto, + Block, BlockDto, }, TryFromDto, }; @@ -93,7 +93,7 @@ use pretty_assertions::assert_eq; #[test] fn pack_unpack_valid() { let protocol_parameters = protocol_parameters(); - let block = rand_signed_block(protocol_parameters.clone()); + let block = rand_block(protocol_parameters.clone()); let packed_block = block.pack_to_vec(); assert_eq!(packed_block.len(), block.packed_len()); @@ -109,15 +109,15 @@ fn getters() { let parents = rand_strong_parents(); let payload = Payload::from(rand_tagged_data_payload()); - let block = rand_basic_block_builder_with_strong_parents(parents.clone()) + let block_body = rand_basic_block_body_builder_with_strong_parents(parents.clone()) .with_payload(payload.clone()) - .finish_block() + .finish_block_body() .unwrap(); - let signed_block = rand_signed_block_with_block(protocol_parameters.clone(), block); + let block = rand_block_with_block_body(protocol_parameters.clone(), block_body); - assert_eq!(signed_block.protocol_version(), protocol_parameters.version()); - assert_eq!(*signed_block.as_basic().strong_parents(), parents); - assert_eq!(*signed_block.as_basic().payload().as_ref().unwrap(), &payload); + assert_eq!(block.protocol_version(), protocol_parameters.version()); + assert_eq!(*block.as_basic().strong_parents(), parents); + assert_eq!(*block.as_basic().payload().as_ref().unwrap(), &payload); } #[test] @@ -130,13 +130,15 @@ fn dto_mismatch_version() { let network_id = protocol_parameters.network_id(); let protocol_version = 4; let block_dto_json = serde_json::json!({ - "protocolVersion": protocol_version, - "networkId": network_id.to_string(), - "issuingTime": issuing_time.to_string(), - "slotCommitmentId": "0x8633b2eb1845fdecf12ee6c5e789c3cf1f0d0bbb3cee65cb5fb2757e995b5cd700000000", - "latestFinalizedSlot": 0, - "issuerId": "0x0000000000000000000000000000000000000000000000000000000000000000", - "block": { + "header": { + "protocolVersion": protocol_version, + "networkId": network_id.to_string(), + "issuingTime": issuing_time.to_string(), + "slotCommitmentId": "0x8633b2eb1845fdecf12ee6c5e789c3cf1f0d0bbb3cee65cb5fb2757e995b5cd700000000", + "latestFinalizedSlot": 0, + "issuerId": "0x0000000000000000000000000000000000000000000000000000000000000000", + }, + "body": { "type":1, "strongParents": [ "0x417c5700320912627b604d4c376a5a1663634b09703538570b1d52440b3e474639490b10" ], "weakParents": [], @@ -150,8 +152,8 @@ fn dto_mismatch_version() { "signature": "0x3e4a492924302b3b093f1e4266757a1d2041480a3861271d4c2e646d4e3d08360a3e765e1a385a784f6753276c233123475867370a184573195d530b41643a1d" } }); - let block_dto = serde_json::from_value::(block_dto_json).unwrap(); - let block_res = SignedBlock::try_from_dto_with_params(block_dto, &protocol_parameters); + let block_dto = serde_json::from_value::(block_dto_json).unwrap(); + let block_res = Block::try_from_dto_with_params(block_dto, &protocol_parameters); assert_eq!( block_res, @@ -171,13 +173,15 @@ fn dto_mismatch_network_id() { + (slot_index - 1) * protocol_parameters.slot_duration_in_seconds() as u64; let network_id = network_name_to_id("invalid-network"); let block_dto_json = serde_json::json!({ - "protocolVersion": 3, - "networkId": network_id.to_string(), - "issuingTime": issuing_time.to_string(), - "slotCommitmentId": "0x8633b2eb1845fdecf12ee6c5e789c3cf1f0d0bbb3cee65cb5fb2757e995b5cd700000000", - "latestFinalizedSlot": 0, - "issuerId": "0x0000000000000000000000000000000000000000000000000000000000000000", - "block": { + "header": { + "protocolVersion": 3, + "networkId": network_id.to_string(), + "issuingTime": issuing_time.to_string(), + "slotCommitmentId": "0x8633b2eb1845fdecf12ee6c5e789c3cf1f0d0bbb3cee65cb5fb2757e995b5cd700000000", + "latestFinalizedSlot": 0, + "issuerId": "0x0000000000000000000000000000000000000000000000000000000000000000", + }, + "body": { "type":1, "strongParents": [ "0x417c5700320912627b604d4c376a5a1663634b09703538570b1d52440b3e474639490b10" ], "weakParents": [], @@ -191,8 +195,8 @@ fn dto_mismatch_network_id() { "signature": "0x3e4a492924302b3b093f1e4266757a1d2041480a3861271d4c2e646d4e3d08360a3e765e1a385a784f6753276c233123475867370a184573195d530b41643a1d" } }); - let block_dto = serde_json::from_value::(block_dto_json).unwrap(); - let block_res = SignedBlock::try_from_dto_with_params(block_dto, &protocol_parameters); + let block_dto = serde_json::from_value::(block_dto_json).unwrap(); + let block_res = Block::try_from_dto_with_params(block_dto, &protocol_parameters); assert_eq!( block_res, diff --git a/sdk/tests/types/block_id.rs b/sdk/tests/types/block_id.rs index b788f4cd29..748d472f4c 100644 --- a/sdk/tests/types/block_id.rs +++ b/sdk/tests/types/block_id.rs @@ -103,8 +103,8 @@ fn memory_layout() { // } // }); -// let block_dto = serde_json::from_value::(block_json).unwrap(); -// let block = SignedBlock::try_from_dto(block_dto).unwrap(); +// let block_dto = serde_json::from_value::(block_json).unwrap(); +// let block = Block::try_from_dto(block_dto).unwrap(); // let block_bytes = block.pack_to_vec(); // assert_eq!( @@ -221,8 +221,8 @@ fn memory_layout() { // } // }); -// let block_dto = serde_json::from_value::(block_json).unwrap(); -// let block = SignedBlock::try_from_dto(block_dto).unwrap(); +// let block_dto = serde_json::from_value::(block_json).unwrap(); +// let block = Block::try_from_dto(block_dto).unwrap(); // let block_bytes = block.pack_to_vec(); // assert_eq!( @@ -299,8 +299,8 @@ fn memory_layout() { // } // }); -// let block_dto = serde_json::from_value::(block_json).unwrap(); -// let block = SignedBlock::try_from_dto(block_dto).unwrap(); +// let block_dto = serde_json::from_value::(block_json).unwrap(); +// let block = Block::try_from_dto(block_dto).unwrap(); // let block_bytes = block.pack_to_vec(); // assert_eq!( diff --git a/sdk/tests/types/tagged_data_payload.rs b/sdk/tests/types/tagged_data_payload.rs index 1073321b7f..e02934f949 100644 --- a/sdk/tests/types/tagged_data_payload.rs +++ b/sdk/tests/types/tagged_data_payload.rs @@ -4,7 +4,7 @@ use iota_sdk::types::block::{ payload::tagged_data::TaggedDataPayload, rand::bytes::{rand_bytes, rand_bytes_array}, - Error, SignedBlock, + Block, Error, }; use packable::{ bounded::{TryIntoBoundedU32Error, TryIntoBoundedU8Error}, @@ -67,8 +67,8 @@ fn new_invalid_tag_length_more_than_max() { fn new_invalid_data_length_more_than_max() { assert!(matches!( // TODO https://github.com/iotaledger/iota-sdk/issues/1226 - TaggedDataPayload::new(rand_bytes(32), [0u8; SignedBlock::LENGTH_MAX + 42]), - Err(Error::InvalidTaggedDataLength(TryIntoBoundedU32Error::Invalid(l))) if l == SignedBlock::LENGTH_MAX as u32 + 42 + TaggedDataPayload::new(rand_bytes(32), [0u8; Block::LENGTH_MAX + 42]), + Err(Error::InvalidTaggedDataLength(TryIntoBoundedU32Error::Invalid(l))) if l == Block::LENGTH_MAX as u32 + 42 )); } From 78079aec3526c603e29604cd039b58044c95e014 Mon Sep 17 00:00:00 2001 From: Thoralf-M <46689931+Thoralf-M@users.noreply.github.com> Date: Fri, 17 Nov 2023 17:37:37 +0100 Subject: [PATCH 41/91] Update OutputIdsResponse (#1638) * Update OutputIdsResponse * Apply suggestions from code review Co-authored-by: Thibault Martinez * Undo metadata change --------- Co-authored-by: Thibault Martinez Co-authored-by: Thibault Martinez --- .../types/models/api/plugins/indexer/output-response.ts | 6 +++--- bindings/python/iota_sdk/client/_node_indexer_api.py | 8 ++++++-- .../node_api_indexer/07_get_random_basic_outputs.rs | 2 +- sdk/src/client/node_api/indexer/mod.rs | 6 ++++-- sdk/src/types/api/plugins/indexer.rs | 7 +++++-- 5 files changed, 19 insertions(+), 10 deletions(-) diff --git a/bindings/nodejs/lib/types/models/api/plugins/indexer/output-response.ts b/bindings/nodejs/lib/types/models/api/plugins/indexer/output-response.ts index f953ecd53f..2bf8b46c3c 100644 --- a/bindings/nodejs/lib/types/models/api/plugins/indexer/output-response.ts +++ b/bindings/nodejs/lib/types/models/api/plugins/indexer/output-response.ts @@ -9,11 +9,11 @@ import type { HexEncodedString } from '../../../../utils/hex-encoding'; */ export interface IOutputsResponse { /** - * The ledger index at which these outputs where available at. + * The committed slot at which these outputs were available at. */ - ledgerIndex: number; + committedSlot: number; /** - * The maximum count of results that are returned by the node. + * The maximum amount of items returned in one call. If there are more items, a cursor to the next page is returned too. */ pageSize: NumericString; /** diff --git a/bindings/python/iota_sdk/client/_node_indexer_api.py b/bindings/python/iota_sdk/client/_node_indexer_api.py index 28f402348b..cdc24277a5 100644 --- a/bindings/python/iota_sdk/client/_node_indexer_api.py +++ b/bindings/python/iota_sdk/client/_node_indexer_api.py @@ -9,17 +9,21 @@ from iota_sdk.types.output_id import OutputId +@json +@dataclass class OutputIdsResponse: """Response type for output IDs. Attributes: - ledger_index: The ledger index for which the response is valid. + committed_slot: The committed slot at which these outputs were available at. + page_size: The maximum amount of items returned in one call. If there are more items, a cursor to the next page is returned too. cursor: The cursor to the next page of results. items: The query results. """ def __init__(self, output_dict: Dict): - self.ledgerIndex = output_dict["ledgerIndex"] + self.committed_slot = output_dict["committedSlot"] + self.page_size = output_dict["pageSize"] self.cursor = output_dict["cursor"] self.items = [OutputId.from_string( output_id) for output_id in output_dict["items"]] diff --git a/sdk/examples/client/node_api_indexer/07_get_random_basic_outputs.rs b/sdk/examples/client/node_api_indexer/07_get_random_basic_outputs.rs index 72cc7d2c09..b53aa1802b 100644 --- a/sdk/examples/client/node_api_indexer/07_get_random_basic_outputs.rs +++ b/sdk/examples/client/node_api_indexer/07_get_random_basic_outputs.rs @@ -20,7 +20,7 @@ async fn main() -> Result<()> { // Take the node URL from command line argument or use one from env as default. let node_url = std::env::args() - .nth(2) + .nth(1) .unwrap_or_else(|| std::env::var("NODE_URL").unwrap()); // Create a node client. diff --git a/sdk/src/client/node_api/indexer/mod.rs b/sdk/src/client/node_api/indexer/mod.rs index 1357068173..511b408936 100644 --- a/sdk/src/client/node_api/indexer/mod.rs +++ b/sdk/src/client/node_api/indexer/mod.rs @@ -23,7 +23,8 @@ impl ClientInner { prefer_permanode: bool, ) -> Result { let mut merged_output_ids_response = OutputIdsResponse { - ledger_index: 0, + committed_slot: 0, + page_size: 1000, cursor: None, items: Vec::new(), }; @@ -48,7 +49,8 @@ impl ClientInner { return Ok(output_ids_response); } - merged_output_ids_response.ledger_index = output_ids_response.ledger_index; + merged_output_ids_response.committed_slot = output_ids_response.committed_slot; + merged_output_ids_response.page_size = output_ids_response.page_size; merged_output_ids_response.cursor = output_ids_response.cursor; merged_output_ids_response.items.extend(output_ids_response.items); diff --git a/sdk/src/types/api/plugins/indexer.rs b/sdk/src/types/api/plugins/indexer.rs index 2c609dfddc..c977a74ed1 100644 --- a/sdk/src/types/api/plugins/indexer.rs +++ b/sdk/src/types/api/plugins/indexer.rs @@ -17,8 +17,11 @@ use crate::types::block::output::OutputId; serde(rename_all = "camelCase") )] pub struct OutputIdsResponse { - /// The ledger index at which the outputs were collected - pub ledger_index: u32, + /// The committed slot at which these outputs were available at. + pub committed_slot: u32, + /// The maximum amount of items returned in one call. If there are more items, a cursor to the next page is + /// returned too. + pub page_size: u32, /// Cursor confirmationMS+outputId.pageSize pub cursor: Option, /// The output ids From 5045bd91b00517dbe00eaff20304ec807ad539bb Mon Sep 17 00:00:00 2001 From: Thoralf-M <46689931+Thoralf-M@users.noreply.github.com> Date: Fri, 17 Nov 2023 18:16:07 +0100 Subject: [PATCH 42/91] Update wasm binding to latest nodejs changes (#1621) * Update wasm binding to latest nodejs changes * static async constructor * Update wasm-bindgen * cargo update + update test * Use port 8050 --------- Co-authored-by: Thibault Martinez --- .../actions/private-tangle/setup/action.yml | 2 +- .github/workflows/bindings-wasm.yml | 12 +- Cargo.lock | 128 +++++++++++------- Cargo.toml | 3 +- .../core/src/method_handler/secret_manager.rs | 4 +- bindings/nodejs/README.md | 2 +- .../examples/exchange/1-create-wallet.ts | 2 +- .../examples/exchange/3-check-balance.ts | 2 +- .../examples/exchange/4-listen-events.ts | 2 +- .../nodejs/examples/exchange/5-send-amount.ts | 2 +- .../examples/how_tos/account_output/create.ts | 2 +- .../how_tos/account_output/destroy.ts | 2 +- .../how_tos/account_wallet/request-funds.ts | 2 +- .../how_tos/account_wallet/transaction.ts | 2 +- .../accounts_and_addresses/check-balance.ts | 2 +- .../consolidate-outputs.ts | 2 +- .../accounts_and_addresses/create-wallet.ts | 2 +- .../accounts_and_addresses/list-accounts.ts | 2 +- .../accounts_and_addresses/list-outputs.ts | 2 +- .../list-transactions.ts | 2 +- .../advanced_transaction.ts | 2 +- .../claim_transaction.ts | 2 +- .../send_micro_transaction.ts | 2 +- .../nft_collection/00_mint_issuer_nft.ts | 2 +- .../nft_collection/01_mint_collection_nft.ts | 2 +- .../nodejs/examples/how_tos/nfts/burn_nft.ts | 2 +- .../nodejs/examples/how_tos/nfts/mint_nft.ts | 2 +- .../nodejs/examples/how_tos/nfts/send_nft.ts | 2 +- .../simple_transaction/request-funds.ts | 2 +- .../simple_transaction/simple-transaction.ts | 2 +- bindings/nodejs/examples/wallet/common.ts | 2 +- .../nodejs/examples/wallet/getting-started.ts | 2 +- .../lib/wallet/wallet-method-handler.ts | 12 +- bindings/nodejs/lib/wallet/wallet.ts | 13 +- bindings/nodejs/src/wallet.rs | 5 +- bindings/nodejs/tests/wallet/wallet.spec.ts | 6 +- bindings/wasm/Cargo.toml | 2 +- bindings/wasm/README.md | 4 +- bindings/wasm/examples/node.js | 11 +- bindings/wasm/lib/bindings.ts | 10 +- bindings/wasm/src/client.rs | 8 +- bindings/wasm/src/secret_manager.rs | 10 +- bindings/wasm/src/wallet.rs | 26 ++-- bindings/wasm/test/account.spec.ts | 46 ------- bindings/wasm/test/utilityMethods.spec.ts | 12 +- bindings/wasm/test/wallet.spec.ts | 48 +++++++ cli/src/cli.rs | 2 +- .../syncing/addresses/output_ids/mod.rs | 8 +- .../transaction/prepare_transaction.rs | 2 - sdk/tests/client/common/constants.rs | 2 +- 50 files changed, 233 insertions(+), 197 deletions(-) delete mode 100644 bindings/wasm/test/account.spec.ts create mode 100644 bindings/wasm/test/wallet.spec.ts diff --git a/.github/actions/private-tangle/setup/action.yml b/.github/actions/private-tangle/setup/action.yml index f0b7c4b08d..1163afba10 100644 --- a/.github/actions/private-tangle/setup/action.yml +++ b/.github/actions/private-tangle/setup/action.yml @@ -37,7 +37,7 @@ runs: - name: Wait for tangle to start shell: bash - run: wget -qO- https://raw.githubusercontent.com/eficode/wait-for/v2.2.4/wait-for | sh -s -- -t 120 http://localhost:8080/health -- echo "Tangle is up" + run: wget -qO- https://raw.githubusercontent.com/eficode/wait-for/v2.2.4/wait-for | sh -s -- -t 120 http://localhost:8050/health -- echo "Tangle is up" # TODO enable, maybe need another URL # - name: Wait for faucet to start # shell: bash diff --git a/.github/workflows/bindings-wasm.yml b/.github/workflows/bindings-wasm.yml index 056bd3f6c7..21eaa69f36 100644 --- a/.github/workflows/bindings-wasm.yml +++ b/.github/workflows/bindings-wasm.yml @@ -65,7 +65,7 @@ jobs: - name: Install wasm-bindgen-cli uses: jetli/wasm-bindgen-action@v0.2.0 with: - version: "0.2.87" + version: "0.2.88" - name: Set Up Node.js ${{ matrix.node }} and Yarn Cache uses: actions/setup-node@v3 @@ -86,16 +86,16 @@ jobs: if: ${{ startsWith(matrix.os, 'ubuntu') }} uses: "./.github/actions/private-tangle/setup" - # - name: Run Yarn Test - # if: ${{ startsWith(matrix.os, 'ubuntu') }} - # working-directory: bindings/wasm/ - # run: yarn test + - name: Run Yarn Test + if: ${{ startsWith(matrix.os, 'ubuntu') }} + working-directory: bindings/wasm/ + run: yarn test - name: Run Yarn Test if: ${{ !startsWith(matrix.os, 'ubuntu') }} working-directory: bindings/wasm/ # Only run test that doesn't require a node because we can't use the private tangle script on macos and windows - run: yarn test -t 'Wallet methods' + run: yarn test -t 'utils methods' - name: Tear down private tangle if: ${{ startsWith(matrix.os, 'ubuntu') }} diff --git a/Cargo.lock b/Cargo.lock index 5ad22abad6..7f4f155e45 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -382,10 +382,11 @@ dependencies = [ [[package]] name = "cc" -version = "1.0.84" +version = "1.0.83" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0f8e7c90afad890484a21653d08b6e209ae34770fb5ee298f9c699fcc1e5c856" +checksum = "f1174fb0b6ec23863f8b971027804a42614e347eafb0a95bf0b12cdae21fc4d0" dependencies = [ + "jobserver", "libc", ] @@ -573,6 +574,16 @@ dependencies = [ "windows-sys 0.45.0", ] +[[package]] +name = "console_error_panic_hook" +version = "0.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a06aeb73f470f66dcdbf7223caeebb85984942f22f1adb2a088cf9668146bbbc" +dependencies = [ + "cfg-if", + "wasm-bindgen", +] + [[package]] name = "const-oid" version = "0.9.5" @@ -912,9 +923,9 @@ checksum = "1aaf95b3e5c8f23aa320147307562d361db0ae0d51242340f558153b4eb2439b" [[package]] name = "ecdsa" -version = "0.16.8" +version = "0.16.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4b1e0c257a9e9f25f90ff76d7a68360ed497ee519c8e428d1825ef0000799d4" +checksum = "ee27f32b5c5292967d2d4a9d7f1e0b0aed2c15daded5a60300e4abb9d8020bca" dependencies = [ "der", "digest 0.10.7", @@ -943,7 +954,7 @@ checksum = "7d9ce6874da5d4415896cd45ffbc4d1cfc0c4f9c079427bd870742c30f2f65a9" dependencies = [ "curve25519-dalek 4.1.1", "ed25519", - "hashbrown 0.14.2", + "hashbrown", "hex", "rand_core 0.6.4", "serde", @@ -953,9 +964,9 @@ dependencies = [ [[package]] name = "elliptic-curve" -version = "0.13.6" +version = "0.13.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d97ca172ae9dc9f9b779a6e3a65d308f2af74e5b8c921299075bdb4a0370e914" +checksum = "e9775b22bc152ad86a0cf23f0f348b884b26add12bf741e7ffc4d4ab2ab4d205" dependencies = [ "base16ct", "crypto-bigint", @@ -1021,9 +1032,9 @@ checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5" [[package]] name = "errno" -version = "0.3.6" +version = "0.3.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7c18ee0ed65a5f1f81cac6b1d213b69c35fa47d4252ad41f1486dbd8226fe36e" +checksum = "f258a7194e7f7c2a7837a8913aeab7fd8c383457034fa20ce4dd3dcb813e8eb8" dependencies = [ "libc", "windows-sys 0.48.0", @@ -1085,9 +1096,9 @@ dependencies = [ [[package]] name = "fiat-crypto" -version = "0.2.3" +version = "0.2.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f69037fe1b785e84986b4f2cbcf647381876a00671d25ceef715d7812dd7e1dd" +checksum = "27573eac26f4dd11e2b1916c3fe1baa56407c83c71a773a8ba17ec0bca03b6b7" [[package]] name = "field-offset" @@ -1344,9 +1355,9 @@ dependencies = [ [[package]] name = "h2" -version = "0.3.21" +version = "0.3.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "91fc23aa11be92976ef4729127f1a74adf36d8436f7816b185d18df956790833" +checksum = "4d6250322ef6e60f93f9a2162799302cd6f68f79f6e5d85c8c16f14d1d958178" dependencies = [ "bytes", "fnv", @@ -1354,19 +1365,13 @@ dependencies = [ "futures-sink", "futures-util", "http", - "indexmap 1.9.3", + "indexmap", "slab", "tokio", "tokio-util", "tracing", ] -[[package]] -name = "hashbrown" -version = "0.12.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" - [[package]] name = "hashbrown" version = "0.14.2" @@ -1552,16 +1557,6 @@ dependencies = [ "syn 1.0.109", ] -[[package]] -name = "indexmap" -version = "1.9.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bd070e393353796e801d209ad339e89596eb4c8d430d18ede6a1cced8fafbd99" -dependencies = [ - "autocfg", - "hashbrown 0.12.3", -] - [[package]] name = "indexmap" version = "2.1.0" @@ -1569,7 +1564,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d530e1a18b1cb4c484e6e34556a0d948706958449fca0cab753d649f2bce3d1f" dependencies = [ "equivalent", - "hashbrown 0.14.2", + "hashbrown", ] [[package]] @@ -1666,7 +1661,7 @@ dependencies = [ "getset", "gloo-storage", "gloo-timers", - "hashbrown 0.14.2", + "hashbrown", "hex", "instant", "iota-crypto", @@ -1738,6 +1733,23 @@ dependencies = [ "tokio", ] +[[package]] +name = "iota-sdk-wasm" +version = "0.1.0" +dependencies = [ + "console_error_panic_hook", + "getrandom", + "instant", + "iota-sdk-bindings-core", + "js-sys", + "log", + "serde_json", + "tokio", + "wasm-bindgen", + "wasm-bindgen-futures", + "wasm-logger", +] + [[package]] name = "iota_stronghold" version = "2.0.0" @@ -1785,6 +1797,15 @@ version = "1.0.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "af150ab688ff2122fcef229be89cb50dd66af9e01a4ff320cc137eecc9bacc38" +[[package]] +name = "jobserver" +version = "0.1.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8c37f63953c4c63420ed5fd3d6d398c719489b9f872b9fa683262f8edd363c7d" +dependencies = [ + "libc", +] + [[package]] name = "js-sys" version = "0.3.65" @@ -1796,9 +1817,9 @@ dependencies = [ [[package]] name = "k256" -version = "0.13.1" +version = "0.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cadb76004ed8e97623117f3df85b17aaa6626ab0b0831e6573f104df16cd1bcc" +checksum = "3f01b677d82ef7a676aa37e099defd83a28e15687112cafdd112d60236b6115b" dependencies = [ "cfg-if", "ecdsa", @@ -2680,9 +2701,9 @@ dependencies = [ [[package]] name = "rustix" -version = "0.38.22" +version = "0.38.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "80109a168d9bc0c7f483083244543a6eb0dba02295d33ca268145e6190d6df0c" +checksum = "9ad981d6c340a49cdc40a1028d9c6084ec7e9fa33fcb839cab656a267071e234" dependencies = [ "bitflags 2.4.1", "errno", @@ -2693,9 +2714,9 @@ dependencies = [ [[package]] name = "rustls" -version = "0.21.8" +version = "0.21.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "446e14c5cda4f3f30fe71863c34ec70f5ac79d6087097ad0bb433e1be5edf04c" +checksum = "629648aced5775d558af50b2b4c7b02983a04b312126d45eeead26e7caa498b9" dependencies = [ "log", "ring", @@ -2973,9 +2994,9 @@ checksum = "a7cee0529a6d40f580e7a5e6c495c8fbfe21b7b52795ed4bb5e62cdf92bc6380" [[package]] name = "signature" -version = "2.1.0" +version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5e1788eed21689f9cf370582dfc467ef36ed9c707f073528ddafa8d83e3b8500" +checksum = "77549399552de45a898a580c1b41d445bf730df867cc44e6c0233bbc4b8329de" dependencies = [ "digest 0.10.7", "rand_core 0.6.4", @@ -3336,7 +3357,7 @@ version = "0.19.15" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1b5bb770da30e5cbfde35a2d7b9b8a2c4b8ef89548a7a6aeab5c9a576e3e7421" dependencies = [ - "indexmap 2.1.0", + "indexmap", "toml_datetime", "winnow", ] @@ -3550,6 +3571,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7daec296f25a1bae309c0cd5c29c4b260e510e6d813c286b19eaadf409d40fce" dependencies = [ "cfg-if", + "serde", + "serde_json", "wasm-bindgen-macro", ] @@ -3609,6 +3632,17 @@ version = "0.2.88" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0d046c5d029ba91a1ed14da14dca44b68bf2f124cfbaf741c54151fdb3e0750b" +[[package]] +name = "wasm-logger" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "074649a66bb306c8f2068c9016395fa65d8e08d2affcbf95acf3c24c3ab19718" +dependencies = [ + "log", + "wasm-bindgen", + "web-sys", +] + [[package]] name = "web-sys" version = "0.3.65" @@ -3916,18 +3950,18 @@ checksum = "09041cd90cf85f7f8b2df60c646f853b7f535ce68f85244eb6731cf89fa498ec" [[package]] name = "zerocopy" -version = "0.7.25" +version = "0.7.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8cd369a67c0edfef15010f980c3cbe45d7f651deac2cd67ce097cd801de16557" +checksum = "e97e415490559a91254a2979b4829267a57d2fcd741a98eee8b722fb57289aa0" dependencies = [ "zerocopy-derive", ] [[package]] name = "zerocopy-derive" -version = "0.7.25" +version = "0.7.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c2f140bda219a26ccc0cdb03dba58af72590c53b22642577d88a927bc5c87d6b" +checksum = "dd7e48ccf166952882ca8bd778a43502c64f33bf94c12ebe2a7f08e5a0f6689f" dependencies = [ "proc-macro2", "quote", @@ -3936,9 +3970,9 @@ dependencies = [ [[package]] name = "zeroize" -version = "1.6.0" +version = "1.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2a0956f1ba7c7909bfb66c2e9e4124ab6f6482560f6628b5aaeba39207c9aad9" +checksum = "525b4ec142c6b68a2d10f01f7bbf6755599ca3f81ea53b8431b7dd348f5fdb2d" dependencies = [ "serde", "zeroize_derive", diff --git a/Cargo.toml b/Cargo.toml index 527f5a4068..51fea11cf3 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -5,8 +5,7 @@ members = [ "bindings/nodejs", # TODO: issue #1423 #"bindings/python", - # TODO: issue #1425 - #"bindings/wasm", + "bindings/wasm", "cli", "sdk", ] diff --git a/bindings/core/src/method_handler/secret_manager.rs b/bindings/core/src/method_handler/secret_manager.rs index 02ae79eed5..928a9ad795 100644 --- a/bindings/core/src/method_handler/secret_manager.rs +++ b/bindings/core/src/method_handler/secret_manager.rs @@ -4,11 +4,11 @@ #[cfg(feature = "ledger_nano")] use iota_sdk::client::secret::ledger_nano::LedgerSecretManager; #[cfg(feature = "stronghold")] -use iota_sdk::client::secret::stronghold::StrongholdSecretManager; +use iota_sdk::client::secret::{stronghold::StrongholdSecretManager, SecretManager}; use iota_sdk::{ client::{ api::{GetAddressesOptions, PreparedTransactionData}, - secret::{DowncastSecretManager, SecretManage, SecretManager, SignBlock}, + secret::{DowncastSecretManager, SecretManage, SignBlock}, }, types::{ block::{address::ToBech32Ext, core::UnsignedBlock, unlock::Unlock, BlockDto}, diff --git a/bindings/nodejs/README.md b/bindings/nodejs/README.md index abac727e55..7f4ae693a1 100644 --- a/bindings/nodejs/README.md +++ b/bindings/nodejs/README.md @@ -129,7 +129,7 @@ const walletOptions: WalletOptions = { }, }, }; -const wallet = new Wallet(walletOptions); +const wallet = await Wallet.create(walletOptions); ``` ## Examples diff --git a/bindings/nodejs/examples/exchange/1-create-wallet.ts b/bindings/nodejs/examples/exchange/1-create-wallet.ts index a7266456f9..8f76ef8ed9 100644 --- a/bindings/nodejs/examples/exchange/1-create-wallet.ts +++ b/bindings/nodejs/examples/exchange/1-create-wallet.ts @@ -61,7 +61,7 @@ async function run() { secretManager: strongholdSecretManager, }; - const wallet = new Wallet(walletOptions); + const wallet = await Wallet.create(walletOptions); // Set syncOnlyMostBasicOutputs to true if not interested in outputs that are timelocked, // have a storage deposit return, expiration or are nft/account/foundry outputs. diff --git a/bindings/nodejs/examples/exchange/3-check-balance.ts b/bindings/nodejs/examples/exchange/3-check-balance.ts index ed9346243a..f2df4d1df3 100644 --- a/bindings/nodejs/examples/exchange/3-check-balance.ts +++ b/bindings/nodejs/examples/exchange/3-check-balance.ts @@ -18,7 +18,7 @@ async function run() { ); } - const wallet = new Wallet({ + const wallet = await Wallet.create({ storagePath: process.env.WALLET_DB_PATH, }); const address = await wallet.address(); diff --git a/bindings/nodejs/examples/exchange/4-listen-events.ts b/bindings/nodejs/examples/exchange/4-listen-events.ts index 88a6a58d7a..82bcc5d03c 100644 --- a/bindings/nodejs/examples/exchange/4-listen-events.ts +++ b/bindings/nodejs/examples/exchange/4-listen-events.ts @@ -18,7 +18,7 @@ async function run() { ); } - const wallet = new Wallet({ + const wallet = await Wallet.create({ storagePath: process.env.WALLET_DB_PATH, }); diff --git a/bindings/nodejs/examples/exchange/5-send-amount.ts b/bindings/nodejs/examples/exchange/5-send-amount.ts index e387f1587a..bbe9665779 100644 --- a/bindings/nodejs/examples/exchange/5-send-amount.ts +++ b/bindings/nodejs/examples/exchange/5-send-amount.ts @@ -23,7 +23,7 @@ async function run() { ); } - const wallet = new Wallet({ + const wallet = await Wallet.create({ storagePath: process.env.WALLET_DB_PATH, }); diff --git a/bindings/nodejs/examples/how_tos/account_output/create.ts b/bindings/nodejs/examples/how_tos/account_output/create.ts index 335b3884ba..d3534017fb 100644 --- a/bindings/nodejs/examples/how_tos/account_output/create.ts +++ b/bindings/nodejs/examples/how_tos/account_output/create.ts @@ -27,7 +27,7 @@ async function run() { try { // Create the wallet - const wallet = new Wallet({ + const wallet = await Wallet.create({ storagePath: process.env.WALLET_DB_PATH, }); diff --git a/bindings/nodejs/examples/how_tos/account_output/destroy.ts b/bindings/nodejs/examples/how_tos/account_output/destroy.ts index b5f6eb23d9..584e647739 100644 --- a/bindings/nodejs/examples/how_tos/account_output/destroy.ts +++ b/bindings/nodejs/examples/how_tos/account_output/destroy.ts @@ -23,7 +23,7 @@ async function run() { try { // Create the wallet - const wallet = new Wallet({ + const wallet = await Wallet.create({ storagePath: process.env.WALLET_DB_PATH, }); diff --git a/bindings/nodejs/examples/how_tos/account_wallet/request-funds.ts b/bindings/nodejs/examples/how_tos/account_wallet/request-funds.ts index 3e1ec12583..df04d04591 100644 --- a/bindings/nodejs/examples/how_tos/account_wallet/request-funds.ts +++ b/bindings/nodejs/examples/how_tos/account_wallet/request-funds.ts @@ -23,7 +23,7 @@ async function run() { const faucetUrl = process.env.FAUCET_URL; // Create the wallet - const wallet = new Wallet({ + const wallet = await Wallet.create({ storagePath: process.env.WALLET_DB_PATH, }); diff --git a/bindings/nodejs/examples/how_tos/account_wallet/transaction.ts b/bindings/nodejs/examples/how_tos/account_wallet/transaction.ts index 8fe6b32a4b..40ac515869 100644 --- a/bindings/nodejs/examples/how_tos/account_wallet/transaction.ts +++ b/bindings/nodejs/examples/how_tos/account_wallet/transaction.ts @@ -29,7 +29,7 @@ async function run() { }, }; - const wallet = new Wallet({ + const wallet = await Wallet.create({ storagePath: process.env.WALLET_DB_PATH, }); diff --git a/bindings/nodejs/examples/how_tos/accounts_and_addresses/check-balance.ts b/bindings/nodejs/examples/how_tos/accounts_and_addresses/check-balance.ts index af11654fb0..c31e7e0861 100644 --- a/bindings/nodejs/examples/how_tos/accounts_and_addresses/check-balance.ts +++ b/bindings/nodejs/examples/how_tos/accounts_and_addresses/check-balance.ts @@ -16,7 +16,7 @@ async function run() { throw new Error('.env WALLET_DB_PATH is undefined, see .env.example'); } try { - const wallet = new Wallet({ + const wallet = await Wallet.create({ storagePath: process.env.WALLET_DB_PATH, }); diff --git a/bindings/nodejs/examples/how_tos/accounts_and_addresses/consolidate-outputs.ts b/bindings/nodejs/examples/how_tos/accounts_and_addresses/consolidate-outputs.ts index e7619c3288..70df3b9842 100644 --- a/bindings/nodejs/examples/how_tos/accounts_and_addresses/consolidate-outputs.ts +++ b/bindings/nodejs/examples/how_tos/accounts_and_addresses/consolidate-outputs.ts @@ -25,7 +25,7 @@ async function run() { ); } - const wallet = new Wallet({ + const wallet = await Wallet.create({ storagePath: process.env.WALLET_DB_PATH, }); diff --git a/bindings/nodejs/examples/how_tos/accounts_and_addresses/create-wallet.ts b/bindings/nodejs/examples/how_tos/accounts_and_addresses/create-wallet.ts index e713c26fb3..a873310b18 100644 --- a/bindings/nodejs/examples/how_tos/accounts_and_addresses/create-wallet.ts +++ b/bindings/nodejs/examples/how_tos/accounts_and_addresses/create-wallet.ts @@ -66,7 +66,7 @@ async function run() { secretManager: strongholdSecretManager, }; - const wallet = new Wallet(walletOptions); + const wallet = await Wallet.create(walletOptions); console.log( 'Generated wallet with address: ' + (await wallet.address()), diff --git a/bindings/nodejs/examples/how_tos/accounts_and_addresses/list-accounts.ts b/bindings/nodejs/examples/how_tos/accounts_and_addresses/list-accounts.ts index 2ba9ac7942..6bc973fb22 100644 --- a/bindings/nodejs/examples/how_tos/accounts_and_addresses/list-accounts.ts +++ b/bindings/nodejs/examples/how_tos/accounts_and_addresses/list-accounts.ts @@ -16,7 +16,7 @@ async function run() { throw new Error('.env WALLET_DB_PATH is undefined, see .env.example'); } try { - const wallet = new Wallet({ + const wallet = await Wallet.create({ storagePath: process.env.WALLET_DB_PATH, }); diff --git a/bindings/nodejs/examples/how_tos/accounts_and_addresses/list-outputs.ts b/bindings/nodejs/examples/how_tos/accounts_and_addresses/list-outputs.ts index a25192d276..4d7d1a426e 100644 --- a/bindings/nodejs/examples/how_tos/accounts_and_addresses/list-outputs.ts +++ b/bindings/nodejs/examples/how_tos/accounts_and_addresses/list-outputs.ts @@ -16,7 +16,7 @@ async function run() { throw new Error('.env WALLET_DB_PATH is undefined, see .env.example'); } try { - const wallet = new Wallet({ + const wallet = await Wallet.create({ storagePath: process.env.WALLET_DB_PATH, }); diff --git a/bindings/nodejs/examples/how_tos/accounts_and_addresses/list-transactions.ts b/bindings/nodejs/examples/how_tos/accounts_and_addresses/list-transactions.ts index feb53b0898..b5a813bae0 100644 --- a/bindings/nodejs/examples/how_tos/accounts_and_addresses/list-transactions.ts +++ b/bindings/nodejs/examples/how_tos/accounts_and_addresses/list-transactions.ts @@ -16,7 +16,7 @@ async function run() { throw new Error('.env WALLET_DB_PATH is undefined, see .env.example'); } try { - const wallet = new Wallet({ + const wallet = await Wallet.create({ storagePath: process.env.WALLET_DB_PATH, }); await wallet.sync({ syncIncomingTransactions: true }); diff --git a/bindings/nodejs/examples/how_tos/advanced_transactions/advanced_transaction.ts b/bindings/nodejs/examples/how_tos/advanced_transactions/advanced_transaction.ts index 199fab2471..7896a11a67 100644 --- a/bindings/nodejs/examples/how_tos/advanced_transactions/advanced_transaction.ts +++ b/bindings/nodejs/examples/how_tos/advanced_transactions/advanced_transaction.ts @@ -24,7 +24,7 @@ async function run() { ); } - const wallet = new Wallet({ + const wallet = await Wallet.create({ storagePath: process.env.WALLET_DB_PATH, }); diff --git a/bindings/nodejs/examples/how_tos/advanced_transactions/claim_transaction.ts b/bindings/nodejs/examples/how_tos/advanced_transactions/claim_transaction.ts index 67a1fb7b53..c6b93e6602 100644 --- a/bindings/nodejs/examples/how_tos/advanced_transactions/claim_transaction.ts +++ b/bindings/nodejs/examples/how_tos/advanced_transactions/claim_transaction.ts @@ -17,7 +17,7 @@ async function run() { ); } - const wallet = new Wallet({ + const wallet = await Wallet.create({ storagePath: process.env.WALLET_DB_PATH, }); diff --git a/bindings/nodejs/examples/how_tos/advanced_transactions/send_micro_transaction.ts b/bindings/nodejs/examples/how_tos/advanced_transactions/send_micro_transaction.ts index 6cb5e31db1..61a5cb1cdc 100644 --- a/bindings/nodejs/examples/how_tos/advanced_transactions/send_micro_transaction.ts +++ b/bindings/nodejs/examples/how_tos/advanced_transactions/send_micro_transaction.ts @@ -17,7 +17,7 @@ async function run() { ); } - const wallet = new Wallet({ + const wallet = await Wallet.create({ storagePath: process.env.WALLET_DB_PATH, }); diff --git a/bindings/nodejs/examples/how_tos/nft_collection/00_mint_issuer_nft.ts b/bindings/nodejs/examples/how_tos/nft_collection/00_mint_issuer_nft.ts index 1106c6ecbd..de18dda1b5 100644 --- a/bindings/nodejs/examples/how_tos/nft_collection/00_mint_issuer_nft.ts +++ b/bindings/nodejs/examples/how_tos/nft_collection/00_mint_issuer_nft.ts @@ -27,7 +27,7 @@ async function run() { } // Create the wallet - const wallet = new Wallet({ + const wallet = await Wallet.create({ storagePath: process.env.WALLET_DB_PATH, }); diff --git a/bindings/nodejs/examples/how_tos/nft_collection/01_mint_collection_nft.ts b/bindings/nodejs/examples/how_tos/nft_collection/01_mint_collection_nft.ts index 6f7a6034ea..ab6ed7dc9e 100644 --- a/bindings/nodejs/examples/how_tos/nft_collection/01_mint_collection_nft.ts +++ b/bindings/nodejs/examples/how_tos/nft_collection/01_mint_collection_nft.ts @@ -25,7 +25,7 @@ async function run() { } // Create the wallet - const wallet = new Wallet({ + const wallet = await Wallet.create({ storagePath: process.env.WALLET_DB_PATH, }); diff --git a/bindings/nodejs/examples/how_tos/nfts/burn_nft.ts b/bindings/nodejs/examples/how_tos/nfts/burn_nft.ts index d72d9dba05..81d12dc2f2 100644 --- a/bindings/nodejs/examples/how_tos/nfts/burn_nft.ts +++ b/bindings/nodejs/examples/how_tos/nfts/burn_nft.ts @@ -20,7 +20,7 @@ async function run() { } // Create the wallet - const wallet = new Wallet({ + const wallet = await Wallet.create({ storagePath: process.env.WALLET_DB_PATH, }); diff --git a/bindings/nodejs/examples/how_tos/nfts/mint_nft.ts b/bindings/nodejs/examples/how_tos/nfts/mint_nft.ts index 98378daacf..23f0cb66ab 100644 --- a/bindings/nodejs/examples/how_tos/nfts/mint_nft.ts +++ b/bindings/nodejs/examples/how_tos/nfts/mint_nft.ts @@ -39,7 +39,7 @@ async function run() { ); } - const wallet = new Wallet({ + const wallet = await Wallet.create({ storagePath: process.env.WALLET_DB_PATH, }); diff --git a/bindings/nodejs/examples/how_tos/nfts/send_nft.ts b/bindings/nodejs/examples/how_tos/nfts/send_nft.ts index 907efaa23c..fcec68e571 100644 --- a/bindings/nodejs/examples/how_tos/nfts/send_nft.ts +++ b/bindings/nodejs/examples/how_tos/nfts/send_nft.ts @@ -23,7 +23,7 @@ async function run() { ); } - const wallet = new Wallet({ + const wallet = await Wallet.create({ storagePath: process.env.WALLET_DB_PATH, }); diff --git a/bindings/nodejs/examples/how_tos/simple_transaction/request-funds.ts b/bindings/nodejs/examples/how_tos/simple_transaction/request-funds.ts index 8236e5d3dc..7a3866dcf0 100644 --- a/bindings/nodejs/examples/how_tos/simple_transaction/request-funds.ts +++ b/bindings/nodejs/examples/how_tos/simple_transaction/request-funds.ts @@ -19,7 +19,7 @@ async function run() { const faucetUrl = process.env.FAUCET_URL; // Create the wallet - const wallet = new Wallet({ + const wallet = await Wallet.create({ storagePath: process.env.WALLET_DB_PATH, }); diff --git a/bindings/nodejs/examples/how_tos/simple_transaction/simple-transaction.ts b/bindings/nodejs/examples/how_tos/simple_transaction/simple-transaction.ts index ec1249840b..ea366d7677 100644 --- a/bindings/nodejs/examples/how_tos/simple_transaction/simple-transaction.ts +++ b/bindings/nodejs/examples/how_tos/simple_transaction/simple-transaction.ts @@ -19,7 +19,7 @@ async function run() { ); } - const wallet = new Wallet({ + const wallet = await Wallet.create({ storagePath: process.env.WALLET_DB_PATH, }); diff --git a/bindings/nodejs/examples/wallet/common.ts b/bindings/nodejs/examples/wallet/common.ts index 4479a2a00f..38cedd495d 100644 --- a/bindings/nodejs/examples/wallet/common.ts +++ b/bindings/nodejs/examples/wallet/common.ts @@ -22,7 +22,7 @@ async function getUnlockedWallet() { const walletOptions: WalletOptions = { storagePath: process.env.WALLET_DB_PATH, }; - const wallet = new Wallet(walletOptions); + const wallet = await Wallet.create(walletOptions); return wallet; } diff --git a/bindings/nodejs/examples/wallet/getting-started.ts b/bindings/nodejs/examples/wallet/getting-started.ts index 541020e59b..4343021912 100644 --- a/bindings/nodejs/examples/wallet/getting-started.ts +++ b/bindings/nodejs/examples/wallet/getting-started.ts @@ -66,7 +66,7 @@ async function main() { secretManager: strongholdSecretManager, }; - const wallet = new Wallet(walletOptions); + const wallet = await Wallet.create(walletOptions); console.log('Generated wallet with address: ' + (await wallet.address())); diff --git a/bindings/nodejs/lib/wallet/wallet-method-handler.ts b/bindings/nodejs/lib/wallet/wallet-method-handler.ts index 1e937b778b..ecaab49c9f 100644 --- a/bindings/nodejs/lib/wallet/wallet-method-handler.ts +++ b/bindings/nodejs/lib/wallet/wallet-method-handler.ts @@ -22,11 +22,19 @@ import { SecretManager } from '../secret_manager'; export class WalletMethodHandler { methodHandler: any; + /** + * @param methodHandler The Rust method handler created in `WalletMethodHandler.create()`. + */ + constructor(methodHandler: any) { + this.methodHandler = methodHandler; + } + /** * @param options The wallet options. */ - constructor(options?: WalletOptions) { - this.methodHandler = createWallet(JSON.stringify(options)); + static async create(options: WalletOptions): Promise { + const methodHandler = await createWallet(JSON.stringify(options)); + return new WalletMethodHandler(methodHandler); } /** diff --git a/bindings/nodejs/lib/wallet/wallet.ts b/bindings/nodejs/lib/wallet/wallet.ts index 545d7e7fa3..29e3fdb0dc 100644 --- a/bindings/nodejs/lib/wallet/wallet.ts +++ b/bindings/nodejs/lib/wallet/wallet.ts @@ -62,10 +62,17 @@ export class Wallet { private methodHandler: WalletMethodHandler; /** - * @param options Wallet options. + * @param methodHandler The Rust method handler created in `WalletMethodHandler.create()`. */ - constructor(options: WalletOptions) { - this.methodHandler = new WalletMethodHandler(options); + constructor(methodHandler: WalletMethodHandler) { + this.methodHandler = methodHandler; + } + + /** + * @param options The wallet options. + */ + static async create(options: WalletOptions): Promise { + return new Wallet(await WalletMethodHandler.create(options)); } /** diff --git a/bindings/nodejs/src/wallet.rs b/bindings/nodejs/src/wallet.rs index 6beb831491..140c9ca306 100644 --- a/bindings/nodejs/src/wallet.rs +++ b/bindings/nodejs/src/wallet.rs @@ -17,10 +17,9 @@ use crate::{client::ClientMethodHandler, secret_manager::SecretManagerMethodHand pub type WalletMethodHandler = Arc>>; #[napi(js_name = "createWallet")] -pub fn create_wallet(options: String) -> Result> { +pub async fn create_wallet(options: String) -> Result> { let wallet_options = serde_json::from_str::(&options).map_err(NodejsError::from)?; - let runtime = tokio::runtime::Runtime::new().map_err(NodejsError::from)?; - let wallet = runtime.block_on(wallet_options.build()).map_err(NodejsError::from)?; + let wallet = wallet_options.build().await.map_err(NodejsError::from)?; Ok(External::new(Arc::new(RwLock::new(Some(wallet))))) } diff --git a/bindings/nodejs/tests/wallet/wallet.spec.ts b/bindings/nodejs/tests/wallet/wallet.spec.ts index 427d374559..5f77b5352b 100644 --- a/bindings/nodejs/tests/wallet/wallet.spec.ts +++ b/bindings/nodejs/tests/wallet/wallet.spec.ts @@ -45,7 +45,7 @@ describe('Wallet', () => { }; - const wallet = new Wallet(walletOptions); + const wallet = await Wallet.create(walletOptions); await wallet.destroy() removeDir(storagePath) @@ -90,7 +90,7 @@ describe('Wallet', () => { }; - const wallet = new Wallet(walletOptions); + const wallet = await Wallet.create(walletOptions); const client = await wallet.getClient(); const hrp = await client.getBech32Hrp(); @@ -98,7 +98,7 @@ describe('Wallet', () => { await wallet.destroy(); - const recreatedWallet = new Wallet({ storagePath: './test-recreate-wallet' }); + const recreatedWallet = await Wallet.create({ storagePath: './test-recreate-wallet' }); await recreatedWallet.destroy() removeDir(storagePath) diff --git a/bindings/wasm/Cargo.toml b/bindings/wasm/Cargo.toml index df3eb5d3ca..d3d7bffccf 100644 --- a/bindings/wasm/Cargo.toml +++ b/bindings/wasm/Cargo.toml @@ -28,7 +28,7 @@ js-sys = { version = "0.3.64", default-features = false, features = [] } log = { version = "0.4.20", default-features = false } serde_json = { version = "1.0.107", default-features = false } tokio = { version = "1.33.0", default-features = false, features = ["sync"] } -wasm-bindgen = { version = "0.2.87", default-features = false, features = [ +wasm-bindgen = { version = "0.2.88", default-features = false, features = [ "spans", "std", "serde-serialize", diff --git a/bindings/wasm/README.md b/bindings/wasm/README.md index 548376a195..97b0ba2269 100644 --- a/bindings/wasm/README.md +++ b/bindings/wasm/README.md @@ -185,7 +185,7 @@ const { Wallet, CoinType } = require('@iota/sdk-wasm/node'); async function run() { try { - const wallet = new Wallet({ + const wallet = await Wallet.create({ storagePath: './my-database', coinType: CoinType.Shimmer, clientOptions: { @@ -214,7 +214,7 @@ run().then(() => process.exit()); import init, {Wallet, CoinType} from "@iota/sdk-wasm/web"; init().then(async () => { - const wallet = new Wallet({ + const wallet = await Wallet.create({ storagePath: './my-database', coinType: CoinType.Shimmer, clientOptions: { diff --git a/bindings/wasm/examples/node.js b/bindings/wasm/examples/node.js index 57489f2303..8ef73904bf 100644 --- a/bindings/wasm/examples/node.js +++ b/bindings/wasm/examples/node.js @@ -2,16 +2,9 @@ // SPDX-License-Identifier: Apache-2.0 const console = require('console'); -const fs = require('fs'); const { Wallet, CoinType, initLogger, SecretManager } = require('../node/lib'); async function run() { - try { - fs.rmdirSync('./alice-database', { recursive: true }); - } catch (e) { - // ignore it - } - // Config doesn't work yet but this is an example for the future await initLogger({ name: 'stdout', @@ -36,7 +29,7 @@ async function run() { bech32Hrp: 'tst', }); - const wallet = new Wallet({ + const wallet = await Wallet.create({ address: walletAddress[0], storagePath: './alice-database', bipPath: { @@ -48,6 +41,8 @@ async function run() { secretManager: mnemonicSecretManager, }); + console.log('wallet created'); + const balance = await wallet.sync(); console.log(balance); } diff --git a/bindings/wasm/lib/bindings.ts b/bindings/wasm/lib/bindings.ts index fded283753..15310014c5 100644 --- a/bindings/wasm/lib/bindings.ts +++ b/bindings/wasm/lib/bindings.ts @@ -9,7 +9,7 @@ import { __UtilsMethods__ } from './utils'; // Import needs to be in a single line, otherwise it breaks // prettier-ignore // @ts-ignore: path is set to match runtime transpiled js path when bundled. -import { initLogger, createClient, destroyClient, createSecretManager, createWallet, callClientMethodAsync, callSecretManagerMethodAsync, callUtilsMethodRust, callWalletMethodAsync, destroyWallet, listenWalletAsync, getClientFromWallet, getSecretManagerFromWallet, listenMqtt, migrateStrongholdSnapshotV2ToV3 } from '../wasm/iota_sdk_wasm'; +import { initLogger, createClient, destroyClient, createSecretManager, createWallet, callClientMethod, callSecretManagerMethod, callUtilsMethodRust, callWalletMethod, destroyWallet, listenWallet, getClientFromWallet, getSecretManagerFromWallet, listenMqtt, migrateStrongholdSnapshotV2ToV3 } from '../wasm/iota_sdk_wasm'; const callUtilsMethod = (method: __UtilsMethods__): any => { const response = JSON.parse(callUtilsMethodRust(JSON.stringify(method))); @@ -25,11 +25,11 @@ export { createClient, createWallet, createSecretManager, - callClientMethodAsync, - callSecretManagerMethodAsync, + callClientMethod, + callSecretManagerMethod, callUtilsMethod, - callWalletMethodAsync, - listenWalletAsync, + callWalletMethod, + listenWallet, destroyWallet, destroyClient, getClientFromWallet, diff --git a/bindings/wasm/src/client.rs b/bindings/wasm/src/client.rs index 5abf7d79fc..fe1dbbbbb9 100644 --- a/bindings/wasm/src/client.rs +++ b/bindings/wasm/src/client.rs @@ -2,7 +2,7 @@ // SPDX-License-Identifier: Apache-2.0 use iota_sdk_bindings_core::{ - call_client_method, + call_client_method as rust_call_client_method, iota_sdk::client::{Client, ClientBuilder}, ClientMethod, Response, }; @@ -46,15 +46,15 @@ pub async fn destroy_client(_client_method_handler: &ClientMethodHandler) -> Res /// Handles a method, returns the response as a JSON-encoded string. /// /// Returns an error if the response itself is an error or panic. -#[wasm_bindgen(js_name = callClientMethodAsync)] +#[wasm_bindgen(js_name = callClientMethod)] #[allow(non_snake_case)] -pub fn call_client_method_async(method: String, methodHandler: &ClientMethodHandler) -> Result { +pub fn call_client_method(methodHandler: &ClientMethodHandler, method: String) -> Result { let client: Client = methodHandler.client.clone(); let promise: js_sys::Promise = future_to_promise(async move { let method: ClientMethod = serde_json::from_str(&method).map_err(|err| err.to_string())?; - let response = call_client_method(&client, method).await; + let response = rust_call_client_method(&client, method).await; let ser = JsValue::from(serde_json::to_string(&response).map_err(|err| err.to_string())?); match response { Response::Error(_) | Response::Panic(_) => Err(ser), diff --git a/bindings/wasm/src/secret_manager.rs b/bindings/wasm/src/secret_manager.rs index f60e6aa4d1..65f7fb9b06 100644 --- a/bindings/wasm/src/secret_manager.rs +++ b/bindings/wasm/src/secret_manager.rs @@ -4,7 +4,7 @@ use std::sync::Arc; use iota_sdk_bindings_core::{ - call_secret_manager_method, + call_secret_manager_method as rust_call_secret_manager_method, iota_sdk::client::secret::{SecretManager, SecretManagerDto}, Response, SecretManagerMethod, }; @@ -35,11 +35,11 @@ pub fn create_secret_manager(options: String) -> Result Result { let secret_manager = methodHandler.secret_manager.clone(); let promise: js_sys::Promise = future_to_promise(async move { @@ -47,7 +47,7 @@ pub fn call_secret_manager_method_async( let response = { let secret_manager = secret_manager.read().await; - call_secret_manager_method(&*secret_manager, method).await + rust_call_secret_manager_method(&*secret_manager, method).await }; let ser = JsValue::from(serde_json::to_string(&response).map_err(|err| err.to_string())?); match response { diff --git a/bindings/wasm/src/wallet.rs b/bindings/wasm/src/wallet.rs index 891065368b..39dea74fcf 100644 --- a/bindings/wasm/src/wallet.rs +++ b/bindings/wasm/src/wallet.rs @@ -4,9 +4,9 @@ use std::sync::Arc; use iota_sdk_bindings_core::{ - call_wallet_method, + call_wallet_method as rust_call_wallet_method, iota_sdk::wallet::{ - events::types::{Event, WalletEventType}, + events::types::{WalletEvent, WalletEventType}, Wallet, }, Response, WalletMethod, WalletOptions, @@ -28,14 +28,10 @@ pub struct WalletMethodHandler { /// Creates a method handler with the given options. #[wasm_bindgen(js_name = createWallet)] #[allow(non_snake_case)] -pub fn create_wallet(options: String) -> Result { +pub async fn create_wallet(options: String) -> Result { let wallet_options = serde_json::from_str::(&options).map_err(|e| e.to_string())?; - let wallet_method_handler = tokio::runtime::Builder::new_current_thread() - .build() - .unwrap() - .block_on(async move { wallet_options.build().await }) - .map_err(|e| e.to_string())?; + let wallet_method_handler = wallet_options.build().await.map_err(|e| e.to_string())?; Ok(WalletMethodHandler { wallet: Arc::new(Mutex::new(Some(wallet_method_handler))), @@ -77,12 +73,12 @@ pub async fn get_secret_manager(method_handler: &WalletMethodHandler) -> Result< /// Handles a method, returns the response as a JSON-encoded string. /// /// Returns an error if the response itself is an error or panic. -#[wasm_bindgen(js_name = callWalletMethodAsync)] -pub async fn call_wallet_method_async(method: String, method_handler: &WalletMethodHandler) -> Result { +#[wasm_bindgen(js_name = callWalletMethod)] +pub async fn call_wallet_method(method_handler: &WalletMethodHandler, method: String) -> Result { let wallet = method_handler.wallet.lock().await; let method: WalletMethod = serde_json::from_str(&method).map_err(|err| err.to_string())?; - let response = call_wallet_method(wallet.as_ref().expect("wallet got destroyed"), method).await; + let response = rust_call_wallet_method(wallet.as_ref().expect("wallet got destroyed"), method).await; match response { Response::Error(e) => Err(e.to_string().into()), Response::Panic(p) => Err(p.into()), @@ -98,22 +94,22 @@ pub async fn call_wallet_method_async(method: String, method_handler: &WalletMet /// * `vec`: An array of strings that represent the event types you want to listen to. /// * `callback`: A JavaScript function that will be called when a wallet event occurs. /// * `method_handler`: This is the same method handler that we used in the previous section. -#[wasm_bindgen(js_name = listenWalletAsync)] +#[wasm_bindgen(js_name = listenWallet)] pub async fn listen_wallet( + method_handler: &WalletMethodHandler, vec: js_sys::Array, callback: js_sys::Function, - method_handler: &WalletMethodHandler, ) -> Result { let mut event_types = Vec::with_capacity(vec.length() as _); for event_type in vec.keys() { // We know the built-in iterator for set elements won't throw // exceptions, so just unwrap the element. let event_type = event_type.unwrap().as_f64().unwrap() as u8; - let wallet_event_type = WalletEventType::try_from(event_type).map_err(JsValue::from)?; + let wallet_event_type = WalletEventType::try_from(event_type).map_err(|err| err.to_string())?; event_types.push(wallet_event_type); } - let (tx, mut rx): (UnboundedSender, UnboundedReceiver) = unbounded_channel(); + let (tx, mut rx): (UnboundedSender, UnboundedReceiver) = unbounded_channel(); method_handler .wallet .lock() diff --git a/bindings/wasm/test/account.spec.ts b/bindings/wasm/test/account.spec.ts deleted file mode 100644 index 56a206d467..0000000000 --- a/bindings/wasm/test/account.spec.ts +++ /dev/null @@ -1,46 +0,0 @@ -// Copyright 2023 IOTA Stiftung -// SPDX-License-Identifier: Apache-2.0 - -import fs from 'fs'; -import { Account, Balance, Wallet, CoinType } from '../node/lib'; - -async function run() { - try { - fs.rmdirSync('./test-alice-database', { recursive: true }); - } catch (e) { - // ignore it - } - - const wallet = new Wallet({ - storagePath: './test-alice-database', - coinType: CoinType.Shimmer, - clientOptions: { - nodes: ['http://localhost:14265'], - }, - secretManager: { - mnemonic: - 'inhale gorilla deny three celery song category owner lottery rent author wealth penalty crawl hobby obtain glad warm early rain clutch slab august bleak', - }, - }); - - const account: Account = await wallet.createAccount({ - alias: 'Alice', - }); - - expect(account.getMetadata().alias).toBe('Alice'); - - const balance: Balance = await wallet.sync(); - expect(balance.baseCoin.available).not.toBeNaN(); - - await account.setAlias('new alias'); - const savedAccount: Account = await wallet.getAccount('new alias'); - expect(savedAccount).not.toBeNull(); -} - -// Tests requiring a local node -describe('local node tests', () => { - jest.setTimeout(10000); - it('account', async () => { - await run(); - }); -}); diff --git a/bindings/wasm/test/utilityMethods.spec.ts b/bindings/wasm/test/utilityMethods.spec.ts index 26554be1c2..357c222513 100644 --- a/bindings/wasm/test/utilityMethods.spec.ts +++ b/bindings/wasm/test/utilityMethods.spec.ts @@ -50,29 +50,29 @@ describe('Utils methods', () => { it('hash output id', async () => { const outputId = - '0x00000000000000000000000000000000000000000000000000000000000000000000'; + '0x0000000000000000000000000000000000000000000000000000000000000000000000000000'; const accountId = Utils.computeAccountId(outputId); expect(accountId).toBe( - '0xcf077d276686ba64c0404b9eb2d15556782113c5a1985f262b70f9964d3bbd7f', + '0x0ebc2867a240719a70faacdfc3840e857fa450b37d95297ac4f166c2f70c3345', ); }); it('account id to address', async () => { const accountId = - '0xcf077d276686ba64c0404b9eb2d15556782113c5a1985f262b70f9964d3bbd7f'; + '0x0ebc2867a240719a70faacdfc3840e857fa450b37d95297ac4f166c2f70c3345'; const accountAddress = Utils.accountIdToBech32(accountId, 'rms'); expect(accountAddress).toBe( - 'rms1pr8swlf8v6rt5exqgp9eavk324t8sggnckseshex9dc0n9jd8w7h7wcnhn7', + 'rms1pq8tc2r85fq8rxnsl2kdlsuyp6zhlfzskd7e22t6cnckdshhpse52a27mlc', ); }); it('compute foundry id', async () => { const accountAddress = - '0xcf077d276686ba64c0404b9eb2d15556782113c5a1985f262b70f9964d3bbd7f'; + '0x0ebc2867a240719a70faacdfc3840e857fa450b37d95297ac4f166c2f70c3345'; const serialNumber = 0; const tokenSchemeType = 0; @@ -83,7 +83,7 @@ describe('Utils methods', () => { ); expect(foundryId).toBe( - '0x08cf077d276686ba64c0404b9eb2d15556782113c5a1985f262b70f9964d3bbd7f0000000000', + '0x080ebc2867a240719a70faacdfc3840e857fa450b37d95297ac4f166c2f70c33450000000000', ); }); }); diff --git a/bindings/wasm/test/wallet.spec.ts b/bindings/wasm/test/wallet.spec.ts new file mode 100644 index 0000000000..2ccd9cbf58 --- /dev/null +++ b/bindings/wasm/test/wallet.spec.ts @@ -0,0 +1,48 @@ +// Copyright 2023 IOTA Stiftung +// SPDX-License-Identifier: Apache-2.0 + +import { Balance, Wallet, CoinType, SecretManager } from '../node/lib'; + +async function run() { + const mnemonicSecretManager = { + mnemonic: + 'inhale gorilla deny three celery song category owner lottery rent author wealth penalty crawl hobby obtain glad warm early rain clutch slab august bleak', + }; + + const secretManager = new SecretManager(mnemonicSecretManager); + + const walletAddress = await secretManager.generateEd25519Addresses({ + coinType: CoinType.IOTA, + accountIndex: 0, + range: { + start: 0, + end: 1, + }, + bech32Hrp: 'rms', + }); + + const wallet = await Wallet.create({ + address: walletAddress[0], + bipPath: { + coinType: CoinType.IOTA, + }, + clientOptions: { + nodes: ['http://localhost:8050'], + }, + secretManager: mnemonicSecretManager, + }); + + expect(await wallet.address()).toBe( + 'rms1qrpwecegav7eh0z363ca69laxej64rrt4e3u0rtycyuh0mam3vq3utrrg7c', + ); + + const balance: Balance = await wallet.sync(); + expect(balance.baseCoin.available).not.toBeNaN(); +} + +describe('wallet tests', () => { + jest.setTimeout(10000); + it('wallet', async () => { + await run(); + }); +}); diff --git a/cli/src/cli.rs b/cli/src/cli.rs index 49a40fc799..27acca41d7 100644 --- a/cli/src/cli.rs +++ b/cli/src/cli.rs @@ -27,7 +27,7 @@ use crate::{ }; const DEFAULT_LOG_LEVEL: &str = "debug"; -const DEFAULT_NODE_URL: &str = "http://localhost:8080"; +const DEFAULT_NODE_URL: &str = "http://localhost:8050"; const DEFAULT_STRONGHOLD_SNAPSHOT_PATH: &str = "./stardust-cli-wallet.stronghold"; const DEFAULT_WALLET_DATABASE_PATH: &str = "./stardust-cli-wallet-db"; diff --git a/sdk/src/wallet/operations/syncing/addresses/output_ids/mod.rs b/sdk/src/wallet/operations/syncing/addresses/output_ids/mod.rs index c48e876b16..0ce8368503 100644 --- a/sdk/src/wallet/operations/syncing/addresses/output_ids/mod.rs +++ b/sdk/src/wallet/operations/syncing/addresses/output_ids/mod.rs @@ -69,7 +69,7 @@ where #[cfg(target_family = "wasm")] { results.push( - self.get_basic_output_ids_with_any_unlock_condition(bech32_address.clone()) + self.get_basic_output_ids_with_any_unlock_condition(address.clone()) .await, ) } @@ -156,7 +156,7 @@ where { results.push(Ok(self .client() - .foundry_output_ids(FoundryOutputQueryParameters::new().account(address)) + .foundry_output_ids(FoundryOutputQueryParameters::new().account(address.clone())) .await? .items)) } @@ -217,9 +217,7 @@ where { let mut tasks = Vec::new(); for address in addresses_chunk { - let output_ids = self - .get_output_ids_for_address(&address.address.inner, &options) - .await?; + let output_ids = self.get_output_ids_for_address(&address.address, options).await?; tasks.push(crate::wallet::Result::Ok((address, output_ids))); } results = tasks; diff --git a/sdk/src/wallet/operations/transaction/prepare_transaction.rs b/sdk/src/wallet/operations/transaction/prepare_transaction.rs index fcf9a1f96d..9b7e9ac490 100644 --- a/sdk/src/wallet/operations/transaction/prepare_transaction.rs +++ b/sdk/src/wallet/operations/transaction/prepare_transaction.rs @@ -6,8 +6,6 @@ use std::collections::HashSet; use instant::Instant; use packable::bounded::TryIntoBoundedU16Error; -#[cfg(feature = "events")] -use crate::wallet::events::types::{AddressData, TransactionProgressEvent, WalletEvent}; use crate::{ client::{api::PreparedTransactionData, secret::SecretManage}, types::block::{ diff --git a/sdk/tests/client/common/constants.rs b/sdk/tests/client/common/constants.rs index c55f5c5e6f..7f7a02fb2b 100644 --- a/sdk/tests/client/common/constants.rs +++ b/sdk/tests/client/common/constants.rs @@ -1,6 +1,6 @@ // Copyright 2023 IOTA Stiftung // SPDX-License-Identifier: Apache-2.0 -pub static NODE_LOCAL: &str = "http://localhost:8080"; +pub static NODE_LOCAL: &str = "http://localhost:8050"; pub static FAUCET_URL: &str = "http://localhost:8091/api/enqueue"; From eeaea9765122c00b5f9aba3feb428afc7a9cdded Mon Sep 17 00:00:00 2001 From: Thoralf-M <46689931+Thoralf-M@users.noreply.github.com> Date: Fri, 17 Nov 2023 18:17:16 +0100 Subject: [PATCH 43/91] Update MQTT version to v2 (#1637) Co-authored-by: Thibault Martinez --- sdk/src/client/node_api/mqtt/mod.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sdk/src/client/node_api/mqtt/mod.rs b/sdk/src/client/node_api/mqtt/mod.rs index 21fb82bb61..78d75a78c5 100644 --- a/sdk/src/client/node_api/mqtt/mod.rs +++ b/sdk/src/client/node_api/mqtt/mod.rs @@ -84,7 +84,7 @@ async fn set_mqtt_client(client: &Client) -> Result<(), Error> { let secure = node.url.scheme() == "https"; let mqtt_options = if broker_options.use_ws { let uri = format!( - "{}://{host}:{}/api/mqtt/v1", + "{}://{host}:{}/api/mqtt/v2", if secure { "wss" } else { "ws" }, node.url.port_or_known_default().unwrap_or(port) ); From e2703a127121685b11eba9e196f7b81ac1599a94 Mon Sep 17 00:00:00 2001 From: Thibault Martinez Date: Fri, 17 Nov 2023 18:25:49 +0100 Subject: [PATCH 44/91] Remove unit visitor from verify_with (#1629) * Remove unit visitor from verify_with * Fix compilation * Use released version --- Cargo.lock | 8 ++++---- bindings/core/Cargo.toml | 2 +- sdk/Cargo.toml | 2 +- sdk/src/types/block/address/multi.rs | 20 +++++++++---------- sdk/src/types/block/core/parent.rs | 2 +- sdk/src/types/block/mana/mod.rs | 1 + .../block/output/feature/block_issuer.rs | 7 ++----- sdk/src/types/block/output/feature/mod.rs | 4 ++-- sdk/src/types/block/output/native_token.rs | 8 ++++---- .../types/block/output/token_scheme/simple.rs | 7 ++----- .../output/unlock_condition/expiration.rs | 4 ++-- .../block/output/unlock_condition/timelock.rs | 4 ++-- sdk/src/types/block/unlock/mod.rs | 4 ++-- sdk/src/types/block/unlock/multi.rs | 4 ++-- sdk/src/types/fuzz/Cargo.toml | 2 +- 15 files changed, 37 insertions(+), 42 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 7f4f155e45..72351c9d39 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2204,9 +2204,9 @@ checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf" [[package]] name = "packable" -version = "0.9.0" +version = "0.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eee4180de5473e336f075507fea07003183e059bc0d35398b0b0039419747e76" +checksum = "bbe35ea7a5959be5a87d24bcb31ed984580d9cd321c264c266818fff8cd47b3d" dependencies = [ "autocfg", "packable-derive", @@ -2216,9 +2216,9 @@ dependencies = [ [[package]] name = "packable-derive" -version = "0.8.0" +version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26a5ee3cb4c60754a0b49a3b7a6f5067a191ff5ec9d90414f6c4cfd21ce9acff" +checksum = "858971e010057f7bcae183e545085b83d41280ca8abe0333613a7135fbb54430" dependencies = [ "proc-macro-crate", "proc-macro-error", diff --git a/bindings/core/Cargo.toml b/bindings/core/Cargo.toml index aaff827018..324ea5f9f0 100644 --- a/bindings/core/Cargo.toml +++ b/bindings/core/Cargo.toml @@ -23,7 +23,7 @@ iota-crypto = { version = "0.23.0", default-features = false, features = [ "bip44", ] } log = { version = "0.4.20", default-features = false } -packable = { version = "0.9.0", default-features = false } +packable = { version = "0.10.0", default-features = false } prefix-hex = { version = "0.7.1", default-features = false } primitive-types = { version = "0.12.2", default-features = false } serde = { version = "1.0.188", default-features = false } diff --git a/sdk/Cargo.toml b/sdk/Cargo.toml index b5471cd7a4..bc619c340d 100644 --- a/sdk/Cargo.toml +++ b/sdk/Cargo.toml @@ -45,7 +45,7 @@ iota-crypto = { version = "0.23.0", default-features = false, features = [ "secp256k1", ] } iterator-sorted = { version = "0.1.0", default-features = false } -packable = { version = "0.9.0", default-features = false, features = [ +packable = { version = "0.10.0", default-features = false, features = [ "primitive-types", ] } paste = { version = "1.0.14", default-features = false } diff --git a/sdk/src/types/block/address/multi.rs b/sdk/src/types/block/address/multi.rs index fe637e4eca..73eed8753d 100644 --- a/sdk/src/types/block/address/multi.rs +++ b/sdk/src/types/block/address/multi.rs @@ -30,8 +30,8 @@ pub struct WeightedAddress { impl WeightedAddress { /// Creates a new [`WeightedAddress`]. pub fn new(address: Address, weight: u8) -> Result { - verify_address::(&address, &())?; - verify_weight::(&weight, &())?; + verify_address::(&address)?; + verify_weight::(&weight)?; Ok(Self { address, weight }) } @@ -47,7 +47,7 @@ impl WeightedAddress { } } -fn verify_address(address: &Address, _visitor: &()) -> Result<(), Error> { +fn verify_address(address: &Address) -> Result<(), Error> { if VERIFY { if !matches!( address, @@ -59,7 +59,7 @@ fn verify_address(address: &Address, _visitor: &()) -> Resul Ok(()) } -fn verify_weight(weight: &u8, _visitor: &()) -> Result<(), Error> { +fn verify_weight(weight: &u8) -> Result<(), Error> { if VERIFY && *weight == 0 { return Err(Error::InvalidAddressWeight(*weight)); } else { @@ -95,15 +95,15 @@ impl MultiAddress { pub fn new(addresses: impl IntoIterator, threshold: u16) -> Result { let addresses = addresses.into_iter().collect::>(); - verify_addresses::(&addresses, &())?; - verify_threshold::(&threshold, &())?; + verify_addresses::(&addresses)?; + verify_threshold::(&threshold)?; let addresses = BoxedSlicePrefix::::try_from(addresses) .map_err(Error::InvalidWeightedAddressCount)?; let multi_address = Self { addresses, threshold }; - verify_multi_address::(&multi_address, &())?; + verify_multi_address::(&multi_address)?; Ok(multi_address) } @@ -121,7 +121,7 @@ impl MultiAddress { } } -fn verify_addresses(addresses: &[WeightedAddress], _visitor: &()) -> Result<(), Error> { +fn verify_addresses(addresses: &[WeightedAddress]) -> Result<(), Error> { if VERIFY && !is_unique_sorted(addresses.iter().map(WeightedAddress::address)) { return Err(Error::WeightedAddressesNotUniqueSorted); } else { @@ -129,7 +129,7 @@ fn verify_addresses(addresses: &[WeightedAddress], _visitor: } } -fn verify_threshold(threshold: &u16, _visitor: &()) -> Result<(), Error> { +fn verify_threshold(threshold: &u16) -> Result<(), Error> { if VERIFY && *threshold == 0 { return Err(Error::InvalidMultiAddressThreshold(*threshold)); } else { @@ -137,7 +137,7 @@ fn verify_threshold(threshold: &u16, _visitor: &()) -> Resul } } -fn verify_multi_address(address: &MultiAddress, _visitor: &()) -> Result<(), Error> { +fn verify_multi_address(address: &MultiAddress) -> Result<(), Error> { if VERIFY { let cumulative_weight = address.iter().map(|address| address.weight as u16).sum::(); diff --git a/sdk/src/types/block/core/parent.rs b/sdk/src/types/block/core/parent.rs index 80f7cf30d6..d7166b7f77 100644 --- a/sdk/src/types/block/core/parent.rs +++ b/sdk/src/types/block/core/parent.rs @@ -75,7 +75,7 @@ impl Parents { } } -fn verify_parents(parents: &[BlockId], _: &()) -> Result<(), Error> { +fn verify_parents(parents: &[BlockId]) -> Result<(), Error> { if VERIFY && !is_unique_sorted(parents.iter().map(AsRef::as_ref)) { Err(Error::ParentsNotUniqueSorted) } else { diff --git a/sdk/src/types/block/mana/mod.rs b/sdk/src/types/block/mana/mod.rs index 7f7bc665c5..72328c74db 100644 --- a/sdk/src/types/block/mana/mod.rs +++ b/sdk/src/types/block/mana/mod.rs @@ -22,6 +22,7 @@ pub(crate) type ManaAllotmentCount = /// A list of [`ManaAllotment`]s with unique [`AccountId`]s. #[derive(Clone, Debug, Eq, PartialEq, Deref, Packable)] +#[packable(unpack_visitor = ProtocolParameters)] #[packable(unpack_error = Error, with = |e| e.unwrap_item_err_or_else(|p| Error::InvalidManaAllotmentCount(p.into())))] pub struct ManaAllotments( #[packable(verify_with = verify_mana_allotments)] BoxedSlicePrefix, diff --git a/sdk/src/types/block/output/feature/block_issuer.rs b/sdk/src/types/block/output/feature/block_issuer.rs index 6c63033858..829430a0c5 100644 --- a/sdk/src/types/block/output/feature/block_issuer.rs +++ b/sdk/src/types/block/output/feature/block_issuer.rs @@ -122,10 +122,7 @@ pub struct BlockIssuerKeys( #[packable(verify_with = verify_block_issuer_keys)] BoxedSlicePrefix, ); -fn verify_block_issuer_keys( - block_issuer_keys: &[BlockIssuerKey], - _visitor: &(), -) -> Result<(), Error> { +fn verify_block_issuer_keys(block_issuer_keys: &[BlockIssuerKey]) -> Result<(), Error> { if VERIFY && !is_unique_sorted(block_issuer_keys.iter()) { return Err(Error::BlockIssuerKeysNotUniqueSorted); } @@ -177,7 +174,7 @@ impl BlockIssuerKeys { block_issuer_keys.sort(); // Still need to verify the duplicate block issuer keys. - verify_block_issuer_keys::(&block_issuer_keys, &())?; + verify_block_issuer_keys::(&block_issuer_keys)?; Ok(Self(block_issuer_keys)) } diff --git a/sdk/src/types/block/output/feature/mod.rs b/sdk/src/types/block/output/feature/mod.rs index ef936e372b..087e5607be 100644 --- a/sdk/src/types/block/output/feature/mod.rs +++ b/sdk/src/types/block/output/feature/mod.rs @@ -184,7 +184,7 @@ impl Features { features.sort_by_key(Feature::kind); // Sort is obviously fine now but uniqueness still needs to be checked. - verify_unique_sorted::(&features, &())?; + verify_unique_sorted::(&features)?; Ok(Self(features)) } @@ -248,7 +248,7 @@ impl StorageScore for Features { } #[inline] -fn verify_unique_sorted(features: &[Feature], _: &()) -> Result<(), Error> { +fn verify_unique_sorted(features: &[Feature]) -> Result<(), Error> { if VERIFY && !is_unique_sorted(features.iter().map(Feature::kind)) { Err(Error::FeaturesNotUniqueSorted) } else { diff --git a/sdk/src/types/block/output/native_token.rs b/sdk/src/types/block/output/native_token.rs index 767f4dce39..d2c430f718 100644 --- a/sdk/src/types/block/output/native_token.rs +++ b/sdk/src/types/block/output/native_token.rs @@ -51,7 +51,7 @@ impl NativeToken { pub fn new(token_id: TokenId, amount: impl Into) -> Result { let amount = amount.into(); - verify_amount::(&amount, &())?; + verify_amount::(&amount)?; Ok(Self { token_id, amount }) } @@ -84,7 +84,7 @@ impl Ord for NativeToken { impl StorageScore for NativeToken {} #[inline] -fn verify_amount(amount: &U256, _: &()) -> Result<(), Error> { +fn verify_amount(amount: &U256) -> Result<(), Error> { if VERIFY && amount.is_zero() { Err(Error::NativeTokensNullAmount) } else { @@ -218,7 +218,7 @@ impl NativeTokens { native_tokens.sort_by(|a, b| a.token_id().cmp(b.token_id())); // Sort is obviously fine now but uniqueness still needs to be checked. - verify_unique_sorted::(&native_tokens, &())?; + verify_unique_sorted::(&native_tokens)?; Ok(Self(native_tokens)) } @@ -258,7 +258,7 @@ impl NativeTokens { } #[inline] -fn verify_unique_sorted(native_tokens: &[NativeToken], _: &()) -> Result<(), Error> { +fn verify_unique_sorted(native_tokens: &[NativeToken]) -> Result<(), Error> { if VERIFY && !is_unique_sorted(native_tokens.iter().map(NativeToken::token_id)) { Err(Error::NativeTokensNotUniqueSorted) } else { diff --git a/sdk/src/types/block/output/token_scheme/simple.rs b/sdk/src/types/block/output/token_scheme/simple.rs index b675bcbc69..1a971d91c6 100644 --- a/sdk/src/types/block/output/token_scheme/simple.rs +++ b/sdk/src/types/block/output/token_scheme/simple.rs @@ -40,7 +40,7 @@ impl SimpleTokenScheme { maximum_supply, }; - verify_simple_token_scheme::(&token_scheme, &())?; + verify_simple_token_scheme::(&token_scheme)?; Ok(token_scheme) } @@ -71,10 +71,7 @@ impl SimpleTokenScheme { } #[inline] -fn verify_simple_token_scheme( - token_scheme: &SimpleTokenScheme, - _visitor: &(), -) -> Result<(), Error> { +fn verify_simple_token_scheme(token_scheme: &SimpleTokenScheme) -> Result<(), Error> { if VERIFY && (token_scheme.maximum_supply.is_zero() || token_scheme.melted_tokens > token_scheme.minted_tokens diff --git a/sdk/src/types/block/output/unlock_condition/expiration.rs b/sdk/src/types/block/output/unlock_condition/expiration.rs index 41563f41c4..e1a4362867 100644 --- a/sdk/src/types/block/output/unlock_condition/expiration.rs +++ b/sdk/src/types/block/output/unlock_condition/expiration.rs @@ -30,7 +30,7 @@ impl ExpirationUnlockCondition { pub fn new(return_address: impl Into
, slot_index: impl Into) -> Result { let slot_index = slot_index.into(); - verify_slot_index::(&slot_index, &())?; + verify_slot_index::(&slot_index)?; Ok(Self { return_address: return_address.into(), @@ -67,7 +67,7 @@ impl StorageScore for ExpirationUnlockCondition { } #[inline] -fn verify_slot_index(slot_index: &SlotIndex, _: &()) -> Result<(), Error> { +fn verify_slot_index(slot_index: &SlotIndex) -> Result<(), Error> { if VERIFY && *slot_index == 0 { Err(Error::ExpirationUnlockConditionZero) } else { diff --git a/sdk/src/types/block/output/unlock_condition/timelock.rs b/sdk/src/types/block/output/unlock_condition/timelock.rs index a01faa6faf..0395668986 100644 --- a/sdk/src/types/block/output/unlock_condition/timelock.rs +++ b/sdk/src/types/block/output/unlock_condition/timelock.rs @@ -19,7 +19,7 @@ impl TimelockUnlockCondition { pub fn new(slot_index: impl Into) -> Result { let slot_index = slot_index.into(); - verify_slot_index::(&slot_index, &())?; + verify_slot_index::(&slot_index)?; Ok(Self(slot_index)) } @@ -34,7 +34,7 @@ impl TimelockUnlockCondition { impl StorageScore for TimelockUnlockCondition {} #[inline] -fn verify_slot_index(slot_index: &SlotIndex, _: &()) -> Result<(), Error> { +fn verify_slot_index(slot_index: &SlotIndex) -> Result<(), Error> { if VERIFY && *slot_index == 0 { Err(Error::TimelockUnlockConditionZero) } else { diff --git a/sdk/src/types/block/unlock/mod.rs b/sdk/src/types/block/unlock/mod.rs index fce07f8150..35e0d6bdd6 100644 --- a/sdk/src/types/block/unlock/mod.rs +++ b/sdk/src/types/block/unlock/mod.rs @@ -117,7 +117,7 @@ impl Unlocks { let unlocks: BoxedSlicePrefix = unlocks.into().try_into().map_err(Error::InvalidUnlockCount)?; - verify_unlocks::(&unlocks, &())?; + verify_unlocks::(&unlocks)?; Ok(Self(unlocks)) } @@ -177,7 +177,7 @@ fn verify_non_multi_unlock<'a>( Ok(()) } -fn verify_unlocks(unlocks: &[Unlock], _: &()) -> Result<(), Error> { +fn verify_unlocks(unlocks: &[Unlock]) -> Result<(), Error> { if VERIFY { let mut seen_signatures = HashSet::new(); diff --git a/sdk/src/types/block/unlock/multi.rs b/sdk/src/types/block/unlock/multi.rs index 99a2f2f0fd..58e41a24fb 100644 --- a/sdk/src/types/block/unlock/multi.rs +++ b/sdk/src/types/block/unlock/multi.rs @@ -24,7 +24,7 @@ impl MultiUnlock { pub fn new(unlocks: impl IntoIterator) -> Result { let unlocks = unlocks.into_iter().collect::>(); - verify_unlocks::(&unlocks, &())?; + verify_unlocks::(&unlocks)?; Ok(Self( BoxedSlicePrefix::::try_from(unlocks).map_err(Error::InvalidMultiUnlockCount)?, @@ -38,7 +38,7 @@ impl MultiUnlock { } } -fn verify_unlocks(unlocks: &[Unlock], _visitor: &()) -> Result<(), Error> { +fn verify_unlocks(unlocks: &[Unlock]) -> Result<(), Error> { if VERIFY && unlocks.iter().any(Unlock::is_multi) { return Err(Error::MultiUnlockRecursion); } else { diff --git a/sdk/src/types/fuzz/Cargo.toml b/sdk/src/types/fuzz/Cargo.toml index 787a244911..be3e427c35 100644 --- a/sdk/src/types/fuzz/Cargo.toml +++ b/sdk/src/types/fuzz/Cargo.toml @@ -12,7 +12,7 @@ cargo-fuzz = true iota-types = { path = "..", default-features = false } libfuzzer-sys = { version = "0.4.7", default-features = false } -packable = { version = "0.9.0", default-features = false } +packable = { version = "0.10.0", default-features = false } # Prevent this from interfering with workspaces [workspace] From 7a1310f4b42d9b5ecb0f1a48fe5c4d99ca0beee4 Mon Sep 17 00:00:00 2001 From: Thoralf-M <46689931+Thoralf-M@users.noreply.github.com> Date: Mon, 20 Nov 2023 10:42:30 +0100 Subject: [PATCH 45/91] nodejs: add multi and empty unlock classes (#1627) * nodejs: add multi and empty unlock classes * Add @Type to unlocks * Fix Cannot access 'UnlockDiscriminator' before initialization --------- Co-authored-by: Thibault Martinez --- .../payload/signed_transaction/unlock.ts | 76 +++++++++++++++++++ 1 file changed, 76 insertions(+) diff --git a/bindings/nodejs/lib/types/block/payload/signed_transaction/unlock.ts b/bindings/nodejs/lib/types/block/payload/signed_transaction/unlock.ts index de2107e7d2..b9e73199db 100644 --- a/bindings/nodejs/lib/types/block/payload/signed_transaction/unlock.ts +++ b/bindings/nodejs/lib/types/block/payload/signed_transaction/unlock.ts @@ -28,6 +28,14 @@ enum UnlockType { * An NFT unlock. */ Nft = 4, + /** + * A multi unlock. + */ + Multi = 5, + /** + * An empty unlock. + */ + Empty = 6, } /** @@ -139,6 +147,64 @@ class NftUnlock extends Unlock { } } +/** + * Used to maintain correct index relationship between addresses and signatures when unlocking a MultiUnlock where not all addresses are unlocked. + */ +class EmptyUnlock extends Unlock { + constructor() { + super(UnlockType.Empty); + } +} + +/** + * Unlocks a MultiAddress with a list of other unlocks. + */ +class MultiUnlock extends Unlock { + /** + * The inner unlocks. + */ + @Type(() => Unlock, { + discriminator: { + property: 'type', + subTypes: [ + { + value: SignatureUnlock, + name: UnlockType.Signature as any, + }, + { + value: ReferenceUnlock, + name: UnlockType.Reference as any, + }, + { + value: AccountUnlock, + name: UnlockType.Account as any, + }, + { + value: AnchorUnlock, + name: UnlockType.Anchor as any, + }, + { + value: NftUnlock, + name: UnlockType.Nft as any, + }, + { + value: EmptyUnlock, + name: UnlockType.Empty as any, + }, + ], + }, + }) + readonly unlocks: Unlock[]; + + /** + * @param unlocks The inner unlocks. + */ + constructor(unlocks: Unlock[]) { + super(UnlockType.Multi); + this.unlocks = unlocks; + } +} + const UnlockDiscriminator = { property: 'type', subTypes: [ @@ -162,6 +228,14 @@ const UnlockDiscriminator = { value: NftUnlock, name: UnlockType.Nft as any, }, + { + value: MultiUnlock, + name: UnlockType.Multi as any, + }, + { + value: EmptyUnlock, + name: UnlockType.Empty as any, + }, ], }; @@ -173,5 +247,7 @@ export { AccountUnlock, AnchorUnlock, NftUnlock, + MultiUnlock, + EmptyUnlock, UnlockDiscriminator, }; From e595d73504a302ebf7fae90215dadb45a7614725 Mon Sep 17 00:00:00 2001 From: Thibault Martinez Date: Mon, 20 Nov 2023 10:43:38 +0100 Subject: [PATCH 46/91] TaggedDataPayload cleanup (#1644) --- .../types/block/payload/candidacy_announcement.rs | 2 +- .../types/block/payload/signed_transaction/mod.rs | 2 +- .../payload/{tagged_data/mod.rs => tagged_data.rs} | 13 +++++-------- 3 files changed, 7 insertions(+), 10 deletions(-) rename sdk/src/types/block/payload/{tagged_data/mod.rs => tagged_data.rs} (87%) diff --git a/sdk/src/types/block/payload/candidacy_announcement.rs b/sdk/src/types/block/payload/candidacy_announcement.rs index b21916515b..87313d9bd2 100644 --- a/sdk/src/types/block/payload/candidacy_announcement.rs +++ b/sdk/src/types/block/payload/candidacy_announcement.rs @@ -8,6 +8,6 @@ use packable::Packable; pub struct CandidacyAnnouncementPayload; impl CandidacyAnnouncementPayload { - /// The payload kind of a [`CandidacyAnnouncementPayload`]. + /// The [`Payload`](crate::types::block::payload::Payload) kind of a [`CandidacyAnnouncementPayload`]. pub const KIND: u8 = 2; } diff --git a/sdk/src/types/block/payload/signed_transaction/mod.rs b/sdk/src/types/block/payload/signed_transaction/mod.rs index 5721d70afd..a7cdc0a510 100644 --- a/sdk/src/types/block/payload/signed_transaction/mod.rs +++ b/sdk/src/types/block/payload/signed_transaction/mod.rs @@ -23,7 +23,7 @@ pub struct SignedTransactionPayload { } impl SignedTransactionPayload { - /// The payload kind of a [`SignedTransactionPayload`]. + /// The [`Payload`](crate::types::block::payload::Payload) kind of a [`SignedTransactionPayload`]. pub const KIND: u8 = 1; /// Creates a new [`SignedTransactionPayload`]. diff --git a/sdk/src/types/block/payload/tagged_data/mod.rs b/sdk/src/types/block/payload/tagged_data.rs similarity index 87% rename from sdk/src/types/block/payload/tagged_data/mod.rs rename to sdk/src/types/block/payload/tagged_data.rs index 4eccdae458..71a93a9a26 100644 --- a/sdk/src/types/block/payload/tagged_data/mod.rs +++ b/sdk/src/types/block/payload/tagged_data.rs @@ -12,7 +12,7 @@ use packable::{ Packable, }; -use crate::types::block::{Block, Error}; +use crate::types::block::Error; pub(crate) type TagLength = BoundedU8<{ *TaggedDataPayload::TAG_LENGTH_RANGE.start() }, { *TaggedDataPayload::TAG_LENGTH_RANGE.end() }>; @@ -30,15 +30,12 @@ pub struct TaggedDataPayload { } impl TaggedDataPayload { - /// The payload kind of a [`TaggedDataPayload`]. + /// The [`Payload`](crate::types::block::payload::Payload) kind of a [`TaggedDataPayload`]. pub const KIND: u8 = 0; - /// Valid lengths for the tag. + /// Valid length range for the tag. pub const TAG_LENGTH_RANGE: RangeInclusive = 0..=64; - /// Valid lengths for the data. - // Less than max block length, because of the other fields in the block and payload kind, tagged payload field - // lengths. - // TODO https://github.com/iotaledger/iota-sdk/issues/1226 - pub const DATA_LENGTH_RANGE: RangeInclusive = 0..=(Block::LENGTH_MAX - Block::LENGTH_MIN - 9) as u32; + /// Valid length range for the data. + pub const DATA_LENGTH_RANGE: RangeInclusive = 0..=8192; /// Creates a new [`TaggedDataPayload`]. pub fn new(tag: impl Into>, data: impl Into>) -> Result { From 8644dec99f860732e7e3de8db29d7ab7aef96c0e Mon Sep 17 00:00:00 2001 From: Thibault Martinez Date: Mon, 20 Nov 2023 11:07:49 +0100 Subject: [PATCH 47/91] Fix get_slot_index with nanoseconds relative_accepted_tangle_time (#1640) --- sdk/src/client/api/high_level.rs | 9 ++++++--- sdk/src/client/constants.rs | 2 +- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/sdk/src/client/api/high_level.rs b/sdk/src/client/api/high_level.rs index 2926091520..f606cfac23 100644 --- a/sdk/src/client/api/high_level.rs +++ b/sdk/src/client/api/high_level.rs @@ -8,7 +8,7 @@ use futures::{StreamExt, TryStreamExt}; use crate::{ client::{ api::input_selection::Error as InputSelectionError, - constants::FIVE_MINUTES_IN_SECONDS, + constants::FIVE_MINUTES_IN_NANOSECONDS, error::{Error, Result}, node_api::indexer::query_parameters::BasicOutputQueryParameters, unix_timestamp_now, Client, @@ -115,13 +115,15 @@ impl Client { // Returns the slot index corresponding to the current timestamp. pub async fn get_slot_index(&self) -> Result { - let current_time = unix_timestamp_now().as_secs(); + let current_time = unix_timestamp_now().as_nanos() as u64; let network_info = self.get_network_info().await?; if let Some(tangle_time) = network_info.tangle_time { // Check the local time is in the range of +-5 minutes of the node to prevent locking funds by accident - if !(tangle_time - FIVE_MINUTES_IN_SECONDS..tangle_time + FIVE_MINUTES_IN_SECONDS).contains(¤t_time) { + if !(tangle_time - FIVE_MINUTES_IN_NANOSECONDS..tangle_time + FIVE_MINUTES_IN_NANOSECONDS) + .contains(¤t_time) + { return Err(Error::TimeNotSynced { current_time, tangle_time, @@ -129,6 +131,7 @@ impl Client { } } + // TODO double check with TIP if this should be seconds or nanoseconds Ok(network_info.protocol_parameters.slot_index(current_time)) } } diff --git a/sdk/src/client/constants.rs b/sdk/src/client/constants.rs index 487e97cd15..b4d9b0252f 100644 --- a/sdk/src/client/constants.rs +++ b/sdk/src/client/constants.rs @@ -17,7 +17,7 @@ pub(crate) const DEFAULT_USER_AGENT: &str = concat!(env!("CARGO_PKG_NAME"), "/", #[cfg(not(target_family = "wasm"))] pub(crate) const MAX_PARALLEL_API_REQUESTS: usize = 100; /// Max allowed difference between the local time and latest milestone time, 5 minutes in seconds -pub(crate) const FIVE_MINUTES_IN_SECONDS: u64 = 300; +pub(crate) const FIVE_MINUTES_IN_NANOSECONDS: u64 = 300_000_000_000; /// Delay for caching a node info response in WASM runtime #[cfg(target_family = "wasm")] pub(crate) const CACHE_NETWORK_INFO_TIMEOUT_IN_SECONDS: u32 = 60; From 5e9add13af6e99ba23d1910e6f5d754d2b00faac Mon Sep 17 00:00:00 2001 From: Thibault Martinez Date: Mon, 20 Nov 2023 11:42:12 +0100 Subject: [PATCH 48/91] Fix some clippy warnings (#1641) --- cli/src/wallet_cli/mod.rs | 2 +- sdk/src/client/api/high_level.rs | 3 +-- sdk/src/client/api/types.rs | 4 ++-- sdk/src/client/secret/mnemonic.rs | 4 +--- sdk/src/client/secret/private_key.rs | 4 +--- sdk/src/client/utils.rs | 8 +++----- sdk/src/types/block/address/ed25519.rs | 4 ++-- sdk/src/types/block/address/multi.rs | 19 ++++++++++--------- sdk/src/types/block/mana/parameters.rs | 2 +- sdk/src/types/block/output/account.rs | 2 +- sdk/src/types/block/output/anchor.rs | 4 ++-- sdk/src/types/block/output/basic.rs | 2 +- sdk/src/types/block/output/delegation.rs | 2 +- sdk/src/types/block/output/foundry.rs | 2 +- sdk/src/types/block/output/nft.rs | 2 +- sdk/src/types/block/unlock/multi.rs | 2 +- sdk/src/wallet/core/builder.rs | 6 ++---- sdk/src/wallet/core/mod.rs | 2 +- .../core/operations/stronghold_backup/mod.rs | 4 ++-- .../stronghold_backup/stronghold_snapshot.rs | 2 +- sdk/src/wallet/operations/syncing/mod.rs | 2 +- sdk/src/wallet/operations/syncing/outputs.rs | 12 +++++------- sdk/tests/types/output/account.rs | 2 +- sdk/tests/types/output/basic.rs | 2 +- sdk/tests/types/output/foundry.rs | 2 +- sdk/tests/types/output/nft.rs | 2 +- 26 files changed, 46 insertions(+), 56 deletions(-) diff --git a/cli/src/wallet_cli/mod.rs b/cli/src/wallet_cli/mod.rs index 05c14320d3..a0b0d34413 100644 --- a/cli/src/wallet_cli/mod.rs +++ b/cli/src/wallet_cli/mod.rs @@ -1035,7 +1035,7 @@ pub async fn prompt_internal( let prompt = if let Some(alias) = wallet.alias().await { format!("Wallet \"{alias}\": ") } else { - format!("Wallet: ") + String::from("Wallet: ") }; if let Some(helper) = rl.helper_mut() { diff --git a/sdk/src/client/api/high_level.rs b/sdk/src/client/api/high_level.rs index f606cfac23..d715558687 100644 --- a/sdk/src/client/api/high_level.rs +++ b/sdk/src/client/api/high_level.rs @@ -89,11 +89,10 @@ impl Client { let mut total_already_spent = 0; let mut selected_inputs = Vec::new(); - for (_offset, output_wrapper) in basic_outputs + for output_wrapper in basic_outputs .into_iter() // Max inputs is 128 .take(INPUT_COUNT_MAX.into()) - .enumerate() { // Break if we have enough funds and don't create dust for the remainder if total_already_spent == amount || total_already_spent >= amount { diff --git a/sdk/src/client/api/types.rs b/sdk/src/client/api/types.rs index 0cbb745dd2..6df3cb6b2d 100644 --- a/sdk/src/client/api/types.rs +++ b/sdk/src/client/api/types.rs @@ -71,7 +71,7 @@ impl TryFromDto for PreparedTransactionData { inputs_data: dto .inputs_data .into_iter() - .map(|i| InputSigningData::try_from(i)) + .map(InputSigningData::try_from) .collect::>>() .map_err(|_| Error::InvalidField("input_data"))?, remainder: match dto.remainder { @@ -125,7 +125,7 @@ impl TryFromDto for SignedTransactionData { inputs_data: dto .inputs_data .into_iter() - .map(|i| InputSigningData::try_from(i)) + .map(InputSigningData::try_from) .collect::>>() .map_err(|_| Error::InvalidField("inputs_data"))?, }) diff --git a/sdk/src/client/secret/mnemonic.rs b/sdk/src/client/secret/mnemonic.rs index 2c7b3af261..d955309c1e 100644 --- a/sdk/src/client/secret/mnemonic.rs +++ b/sdk/src/client/secret/mnemonic.rs @@ -63,9 +63,7 @@ impl SecretManage for MnemonicSecretManager { .to_bytes(); // Hash the public key to get the address - let result = Blake2b256::digest(public_key).try_into().map_err(|_e| { - crate::client::Error::Blake2b256("hashing the public key while generating the address failed.") - })?; + let result = Blake2b256::digest(public_key).into(); crate::client::Result::Ok(Ed25519Address::new(result)) }) diff --git a/sdk/src/client/secret/private_key.rs b/sdk/src/client/secret/private_key.rs index 3f4b9fe7b1..f1b23862b6 100644 --- a/sdk/src/client/secret/private_key.rs +++ b/sdk/src/client/secret/private_key.rs @@ -48,9 +48,7 @@ impl SecretManage for PrivateKeySecretManager { let public_key = self.0.public_key().to_bytes(); // Hash the public key to get the address - let result = Blake2b256::digest(public_key).try_into().map_err(|_e| { - crate::client::Error::Blake2b256("hashing the public key while generating the address failed.") - })?; + let result = Blake2b256::digest(public_key).into(); crate::client::Result::Ok(vec![Ed25519Address::new(result)]) } diff --git a/sdk/src/client/utils.rs b/sdk/src/client/utils.rs index b8bdae8696..00805b66bb 100644 --- a/sdk/src/client/utils.rs +++ b/sdk/src/client/utils.rs @@ -41,18 +41,16 @@ pub fn bech32_to_hex(bech32: impl ConvertTo) -> Result { /// Transforms a hex encoded address to a bech32 encoded address pub fn hex_to_bech32(hex: &str, bech32_hrp: impl ConvertTo) -> Result { - let address: Ed25519Address = hex.parse::()?; + let address = hex.parse::()?; + Ok(Address::Ed25519(address).try_to_bech32(bech32_hrp)?) } /// Transforms a prefix hex encoded public key to a bech32 encoded address pub fn hex_public_key_to_bech32_address(hex: &str, bech32_hrp: impl ConvertTo) -> Result { let public_key: [u8; Ed25519Address::LENGTH] = prefix_hex::decode(hex)?; + let address = Ed25519Address::new(Blake2b256::digest(public_key).into()); - let address = Blake2b256::digest(public_key) - .try_into() - .map_err(|_e| Error::Blake2b256("hashing the public key failed."))?; - let address: Ed25519Address = Ed25519Address::new(address); Ok(Address::Ed25519(address).try_to_bech32(bech32_hrp)?) } diff --git a/sdk/src/types/block/address/ed25519.rs b/sdk/src/types/block/address/ed25519.rs index 4d44b1e5e9..964ecac162 100644 --- a/sdk/src/types/block/address/ed25519.rs +++ b/sdk/src/types/block/address/ed25519.rs @@ -34,8 +34,8 @@ impl Ed25519Address { } /// Creates a new [`Ed25519Address`] from the bytes of a [`PublicKey`]. - pub fn from_public_key_bytes(public_key_bytes: [u8; PublicKey::LENGTH]) -> Result { - Ok(Self::new(Blake2b256::digest(public_key_bytes).try_into()?)) + pub fn from_public_key_bytes(public_key_bytes: [u8; PublicKey::LENGTH]) -> Self { + Self::new(Blake2b256::digest(public_key_bytes).into()) } } diff --git a/sdk/src/types/block/address/multi.rs b/sdk/src/types/block/address/multi.rs index 73eed8753d..3138a7fd89 100644 --- a/sdk/src/types/block/address/multi.rs +++ b/sdk/src/types/block/address/multi.rs @@ -48,20 +48,21 @@ impl WeightedAddress { } fn verify_address(address: &Address) -> Result<(), Error> { - if VERIFY { - if !matches!( + if VERIFY + && !matches!( address, Address::Ed25519(_) | Address::Account(_) | Address::Nft(_) | Address::Anchor(_) - ) { - return Err(Error::InvalidAddressKind(address.kind())); - } + ) + { + Err(Error::InvalidAddressKind(address.kind())) + } else { + Ok(()) } - Ok(()) } fn verify_weight(weight: &u8) -> Result<(), Error> { if VERIFY && *weight == 0 { - return Err(Error::InvalidAddressWeight(*weight)); + Err(Error::InvalidAddressWeight(*weight)) } else { Ok(()) } @@ -123,7 +124,7 @@ impl MultiAddress { fn verify_addresses(addresses: &[WeightedAddress]) -> Result<(), Error> { if VERIFY && !is_unique_sorted(addresses.iter().map(WeightedAddress::address)) { - return Err(Error::WeightedAddressesNotUniqueSorted); + Err(Error::WeightedAddressesNotUniqueSorted) } else { Ok(()) } @@ -131,7 +132,7 @@ fn verify_addresses(addresses: &[WeightedAddress]) -> Result fn verify_threshold(threshold: &u16) -> Result<(), Error> { if VERIFY && *threshold == 0 { - return Err(Error::InvalidMultiAddressThreshold(*threshold)); + Err(Error::InvalidMultiAddressThreshold(*threshold)) } else { Ok(()) } diff --git a/sdk/src/types/block/mana/parameters.rs b/sdk/src/types/block/mana/parameters.rs index ec299b2d8e..228760fcfb 100644 --- a/sdk/src/types/block/mana/parameters.rs +++ b/sdk/src/types/block/mana/parameters.rs @@ -253,7 +253,7 @@ mod test { }; params }); - &*PARAMS + &PARAMS } #[test] diff --git a/sdk/src/types/block/output/account.rs b/sdk/src/types/block/output/account.rs index e6b8e8faa0..a1f27ab433 100644 --- a/sdk/src/types/block/output/account.rs +++ b/sdk/src/types/block/output/account.rs @@ -690,7 +690,7 @@ pub(crate) mod dto { impl AccountOutput { #[allow(clippy::too_many_arguments)] - pub fn try_from_dtos<'a>( + pub fn try_from_dtos( amount: OutputBuilderAmount, mana: u64, native_tokens: Option>, diff --git a/sdk/src/types/block/output/anchor.rs b/sdk/src/types/block/output/anchor.rs index c21c77b149..b5ec4780a5 100644 --- a/sdk/src/types/block/output/anchor.rs +++ b/sdk/src/types/block/output/anchor.rs @@ -773,7 +773,7 @@ pub(crate) mod dto { impl AnchorOutput { #[allow(clippy::too_many_arguments)] - pub fn try_from_dtos<'a>( + pub fn try_from_dtos( amount: OutputBuilderAmount, mana: u64, native_tokens: Option>, @@ -851,7 +851,7 @@ mod tests { output.mana(), Some(output.native_tokens().to_vec()), output.anchor_id(), - output.state_index().into(), + output.state_index(), output.state_metadata().to_owned().into(), output.unlock_conditions().iter().map(Into::into).collect(), Some(output.features().to_vec()), diff --git a/sdk/src/types/block/output/basic.rs b/sdk/src/types/block/output/basic.rs index ecc803410f..5cf17ea955 100644 --- a/sdk/src/types/block/output/basic.rs +++ b/sdk/src/types/block/output/basic.rs @@ -474,7 +474,7 @@ pub(crate) mod dto { } impl BasicOutput { - pub fn try_from_dtos<'a>( + pub fn try_from_dtos( amount: OutputBuilderAmount, mana: u64, native_tokens: Option>, diff --git a/sdk/src/types/block/output/delegation.rs b/sdk/src/types/block/output/delegation.rs index b1b3049cb3..ed5974df31 100644 --- a/sdk/src/types/block/output/delegation.rs +++ b/sdk/src/types/block/output/delegation.rs @@ -495,7 +495,7 @@ pub(crate) mod dto { impl DelegationOutput { #[allow(clippy::too_many_arguments)] - pub fn try_from_dtos<'a>( + pub fn try_from_dtos( amount: OutputBuilderAmount, delegated_amount: u64, delegation_id: &DelegationId, diff --git a/sdk/src/types/block/output/foundry.rs b/sdk/src/types/block/output/foundry.rs index 8cafce7ace..7978462879 100644 --- a/sdk/src/types/block/output/foundry.rs +++ b/sdk/src/types/block/output/foundry.rs @@ -740,7 +740,7 @@ pub(crate) mod dto { impl FoundryOutput { #[allow(clippy::too_many_arguments)] - pub fn try_from_dtos<'a>( + pub fn try_from_dtos( amount: OutputBuilderAmount, native_tokens: Option>, serial_number: u32, diff --git a/sdk/src/types/block/output/nft.rs b/sdk/src/types/block/output/nft.rs index 4f6bd4f0af..8c00c17128 100644 --- a/sdk/src/types/block/output/nft.rs +++ b/sdk/src/types/block/output/nft.rs @@ -650,7 +650,7 @@ pub(crate) mod dto { impl NftOutput { #[allow(clippy::too_many_arguments)] - pub fn try_from_dtos<'a>( + pub fn try_from_dtos( amount: OutputBuilderAmount, mana: u64, native_tokens: Option>, diff --git a/sdk/src/types/block/unlock/multi.rs b/sdk/src/types/block/unlock/multi.rs index 58e41a24fb..7cf6dd66f1 100644 --- a/sdk/src/types/block/unlock/multi.rs +++ b/sdk/src/types/block/unlock/multi.rs @@ -40,7 +40,7 @@ impl MultiUnlock { fn verify_unlocks(unlocks: &[Unlock]) -> Result<(), Error> { if VERIFY && unlocks.iter().any(Unlock::is_multi) { - return Err(Error::MultiUnlockRecursion); + Err(Error::MultiUnlockRecursion) } else { Ok(()) } diff --git a/sdk/src/wallet/core/builder.rs b/sdk/src/wallet/core/builder.rs index 06a24ebb16..b84b936b8d 100644 --- a/sdk/src/wallet/core/builder.rs +++ b/sdk/src/wallet/core/builder.rs @@ -137,10 +137,8 @@ where // Check if the db exists and if not, return an error if one parameter is missing, because otherwise the db // would be created with an empty parameter which just leads to errors later #[cfg(feature = "storage")] - if !storage_options.path.is_dir() { - if self.client_options.is_none() { - return Err(crate::wallet::Error::MissingParameter("client_options")); - } + if !storage_options.path.is_dir() && self.client_options.is_none() { + return Err(crate::wallet::Error::MissingParameter("client_options")); } #[cfg(all(feature = "rocksdb", feature = "storage"))] diff --git a/sdk/src/wallet/core/mod.rs b/sdk/src/wallet/core/mod.rs index 3cb0a9900b..5db7a7f0bc 100644 --- a/sdk/src/wallet/core/mod.rs +++ b/sdk/src/wallet/core/mod.rs @@ -263,7 +263,7 @@ where if let Address::Ed25519(address) = bech32_address.inner() { Ok(Bech32Address::new( *bech32_address.hrp(), - ImplicitAccountCreationAddress::from(address.clone()), + ImplicitAccountCreationAddress::from(*address), )) } else { Err(Error::NonEd25519Address) diff --git a/sdk/src/wallet/core/operations/stronghold_backup/mod.rs b/sdk/src/wallet/core/operations/stronghold_backup/mod.rs index ee8bb3fca9..81a3181bc5 100644 --- a/sdk/src/wallet/core/operations/stronghold_backup/mod.rs +++ b/sdk/src/wallet/core/operations/stronghold_backup/mod.rs @@ -110,7 +110,7 @@ impl Wallet { }); if !ignore_backup_values { - (*wallet_data).bip_path = read_bip_path; + wallet_data.bip_path = read_bip_path; } if let Some(mut read_secret_manager) = read_secret_manager { @@ -267,7 +267,7 @@ impl Wallet { }); if !ignore_backup_values { - (*wallet_data).bip_path = read_bip_path; + wallet_data.bip_path = read_bip_path; } if let Some(mut read_secret_manager) = read_secret_manager { diff --git a/sdk/src/wallet/core/operations/stronghold_backup/stronghold_snapshot.rs b/sdk/src/wallet/core/operations/stronghold_backup/stronghold_snapshot.rs index 68c3eac448..264962396b 100644 --- a/sdk/src/wallet/core/operations/stronghold_backup/stronghold_snapshot.rs +++ b/sdk/src/wallet/core/operations/stronghold_backup/stronghold_snapshot.rs @@ -66,7 +66,7 @@ pub(crate) async fn read_wallet_data_from_stronghold_snapshot(WALLET_DATA_KEY) .await? - .map(|dto| WalletData::try_from_dto(dto)) + .map(WalletData::try_from_dto) .transpose()?; Ok((client_options, restored_secret_manager, restored_wallet_data)) diff --git a/sdk/src/wallet/operations/syncing/mod.rs b/sdk/src/wallet/operations/syncing/mod.rs index abbbbb4d4e..b5fccd6a82 100644 --- a/sdk/src/wallet/operations/syncing/mod.rs +++ b/sdk/src/wallet/operations/syncing/mod.rs @@ -216,7 +216,7 @@ where let new_outputs_data_inner = self.get_outputs(output_ids).await?; let outputs_data_inner = self - .output_response_to_output_data(new_outputs_data_inner, &address_with_unspent_outputs) + .output_response_to_output_data(new_outputs_data_inner, address_with_unspent_outputs) .await?; outputs_data.extend(outputs_data_inner.clone()); diff --git a/sdk/src/wallet/operations/syncing/outputs.rs b/sdk/src/wallet/operations/syncing/outputs.rs index 85461ce33d..dfa73891c5 100644 --- a/sdk/src/wallet/operations/syncing/outputs.rs +++ b/sdk/src/wallet/operations/syncing/outputs.rs @@ -48,14 +48,12 @@ where .get(output_with_meta.metadata().transaction_id()) .map_or(false, |tx| !tx.incoming); - let chain = wallet_data.bip_path.map_or(None, |bip_path| { + let chain = wallet_data.bip_path.map(|bip_path| { // BIP 44 (HD wallets) and 4218 is the registered index for IOTA https://github.com/satoshilabs/slips/blob/master/slip-0044.md - Some( - Bip44::new(bip_path.coin_type) - .with_account(bip_path.account) - .with_change(associated_address.internal as _) - .with_address_index(associated_address.key_index), - ) + Bip44::new(bip_path.coin_type) + .with_account(bip_path.account) + .with_change(associated_address.internal as _) + .with_address_index(associated_address.key_index) }); OutputData { diff --git a/sdk/tests/types/output/account.rs b/sdk/tests/types/output/account.rs index c7c3b9bf9e..554e5f9a8f 100644 --- a/sdk/tests/types/output/account.rs +++ b/sdk/tests/types/output/account.rs @@ -3,7 +3,7 @@ use iota_sdk::types::block::{ address::AccountAddress, - output::{AccountOutput, Feature, FoundryId, MinimumOutputAmount, NativeToken, Output, SimpleTokenScheme, TokenId}, + output::{AccountOutput, Feature, FoundryId, MinimumOutputAmount, NativeToken, SimpleTokenScheme, TokenId}, protocol::protocol_parameters, rand::output::{ feature::{rand_issuer_feature, rand_metadata_feature, rand_sender_feature}, diff --git a/sdk/tests/types/output/basic.rs b/sdk/tests/types/output/basic.rs index 59967e4c01..9c675541e4 100644 --- a/sdk/tests/types/output/basic.rs +++ b/sdk/tests/types/output/basic.rs @@ -2,7 +2,7 @@ // SPDX-License-Identifier: Apache-2.0 use iota_sdk::types::block::{ - output::{BasicOutput, Feature, FoundryId, MinimumOutputAmount, NativeToken, Output, SimpleTokenScheme, TokenId}, + output::{BasicOutput, Feature, FoundryId, MinimumOutputAmount, NativeToken, SimpleTokenScheme, TokenId}, protocol::protocol_parameters, rand::{ address::rand_account_address, diff --git a/sdk/tests/types/output/foundry.rs b/sdk/tests/types/output/foundry.rs index 68b1a23ff2..00ba0bd331 100644 --- a/sdk/tests/types/output/foundry.rs +++ b/sdk/tests/types/output/foundry.rs @@ -4,7 +4,7 @@ use iota_sdk::types::block::{ output::{ unlock_condition::ImmutableAccountAddressUnlockCondition, FoundryId, FoundryOutput, MinimumOutputAmount, - NativeToken, Output, SimpleTokenScheme, TokenId, + NativeToken, SimpleTokenScheme, TokenId, }, protocol::protocol_parameters, rand::{ diff --git a/sdk/tests/types/output/nft.rs b/sdk/tests/types/output/nft.rs index edf526aee2..3bdeac1bb2 100644 --- a/sdk/tests/types/output/nft.rs +++ b/sdk/tests/types/output/nft.rs @@ -2,7 +2,7 @@ // SPDX-License-Identifier: Apache-2.0 use iota_sdk::types::block::{ - output::{FoundryId, MinimumOutputAmount, NativeToken, NftId, NftOutput, Output, SimpleTokenScheme, TokenId}, + output::{FoundryId, MinimumOutputAmount, NativeToken, NftId, NftOutput, SimpleTokenScheme, TokenId}, protocol::protocol_parameters, rand::{ address::rand_account_address, From 51d6e8e1e5f0078475b13ece6c42da2e190118f6 Mon Sep 17 00:00:00 2001 From: Thibault Martinez Date: Mon, 20 Nov 2023 12:20:02 +0100 Subject: [PATCH 49/91] Native token refactoring (#1364) * Add NativeTokenFeature * Remove NativeTokens from Account * Remove Native Token from NFT * Fix warnings * Add rand_native_token_feature * Add to ALLOWED_FEATURES * Remove native tokens from Basic/Foundry * Fix semantic validation * Fix balance * Fix prepare_output * Change feature order * Some fixes * Some more changes * Lift transaction max native token count * Some bindings changes * Fix * Some fixes * Some fixes * Fix balance * Some more fixes * Comment ISA not supporting multiple remainders * Comment unsupported native tokens in output consolidation * Comment unsupported native tokens in output claiming * More fixes * Fix CLI * More changes - help :( * Cleanup * Fix bindings core * Fix more tests * moar * Disable some test files * Fix last tests * Revert failed merged * Remove StorageScore for NativeToken * Revert rename * Bindings nits * Add NativeTokenFeatureDto * Semantic nits * Remove print * Remove TODOs * Nit * Change Assets in bindings * #[serde(rename = "id")] * Update sdk/src/wallet/operations/transaction/prepare_transaction.rs Co-authored-by: Thoralf-M <46689931+Thoralf-M@users.noreply.github.com> --------- Co-authored-by: Thoralf-M <46689931+Thoralf-M@users.noreply.github.com> --- bindings/core/src/method/client.rs | 6 +- bindings/core/src/method/wallet.rs | 4 +- bindings/core/src/method_handler/client.rs | 8 - .../examples/how_tos/native_tokens/send.ts | 10 +- bindings/nodejs/lib/types/wallet/address.ts | 8 +- .../nodejs/lib/types/wallet/bridge/account.ts | 4 +- .../nodejs/lib/types/wallet/bridge/wallet.ts | 4 +- .../nodejs/lib/types/wallet/output-params.ts | 4 +- bindings/nodejs/lib/wallet/wallet.ts | 6 +- bindings/nodejs/package-lock.json | 24 +-- bindings/nodejs/yarn.lock | 6 +- .../examples/how_tos/native_tokens/send.py | 8 +- .../python/iota_sdk/types/output_params.py | 2 +- bindings/python/iota_sdk/types/send_params.py | 12 +- bindings/python/iota_sdk/wallet/account.py | 6 +- cli/src/wallet_cli/mod.rs | 35 +++-- sdk/examples/client/02_address_balance.rs | 4 +- .../consolidate_outputs.rs | 4 +- sdk/examples/how_tos/native_tokens/send.rs | 6 +- .../api/block_builder/input_selection/mod.rs | 8 +- .../input_selection/remainder.rs | 16 +- .../input_selection/requirement/amount.rs | 20 +-- .../requirement/native_tokens.rs | 11 +- sdk/src/types/block/error.rs | 4 - sdk/src/types/block/mod.rs | 1 - sdk/src/types/block/output/account.rs | 59 +------ sdk/src/types/block/output/basic.rs | 67 +++----- .../block/output/feature/block_issuer.rs | 2 +- sdk/src/types/block/output/feature/mod.rs | 18 ++- .../block/output/feature/native_token.rs | 64 ++++++++ sdk/src/types/block/output/feature/staking.rs | 2 +- sdk/src/types/block/output/foundry.rs | 66 +++----- sdk/src/types/block/output/mod.rs | 24 +-- sdk/src/types/block/output/native_token.rs | 8 +- sdk/src/types/block/output/nft.rs | 57 +------ .../payload/signed_transaction/transaction.rs | 27 +--- sdk/src/types/block/rand/output/feature.rs | 9 +- sdk/src/types/block/rand/output/mod.rs | 4 +- .../types/block/rand/output/native_token.rs | 14 ++ sdk/src/types/block/semantic.rs | 69 ++++----- sdk/src/wallet/mod.rs | 2 +- sdk/src/wallet/operations/balance.rs | 42 ++--- sdk/src/wallet/operations/output_claiming.rs | 54 ++----- .../wallet/operations/output_consolidation.rs | 21 +-- sdk/src/wallet/operations/syncing/mod.rs | 8 +- .../high_level/send_native_tokens.rs | 44 ++---- .../operations/transaction/prepare_output.rs | 26 ++-- .../client/input_selection/account_outputs.rs | 145 ++---------------- .../client/input_selection/basic_outputs.rs | 33 +--- sdk/tests/client/input_selection/burn.rs | 123 ++------------- .../client/input_selection/expiration.rs | 14 +- .../client/input_selection/foundry_outputs.rs | 105 +++---------- sdk/tests/client/input_selection/mod.rs | 6 +- .../client/input_selection/native_tokens.rs | 126 +++++++-------- .../client/input_selection/nft_outputs.rs | 36 ----- sdk/tests/client/input_selection/outputs.rs | 1 - .../input_selection/storage_deposit_return.rs | 20 +-- sdk/tests/client/mod.rs | 108 +++---------- sdk/tests/client/signing/account.rs | 13 +- sdk/tests/client/signing/mod.rs | 12 -- sdk/tests/client/signing/nft.rs | 2 - sdk/tests/types/output/account.rs | 5 +- sdk/tests/types/output/basic.rs | 2 +- sdk/tests/types/output/foundry.rs | 2 +- sdk/tests/types/output/nft.rs | 15 +- sdk/tests/types/transaction.rs | 2 +- sdk/tests/wallet/claim_outputs.rs | 10 +- sdk/tests/wallet/output_preparation.rs | 47 +++--- 68 files changed, 549 insertions(+), 1186 deletions(-) create mode 100644 sdk/src/types/block/output/feature/native_token.rs create mode 100644 sdk/src/types/block/rand/output/native_token.rs diff --git a/bindings/core/src/method/client.rs b/bindings/core/src/method/client.rs index 87da322938..6ab5784327 100644 --- a/bindings/core/src/method/client.rs +++ b/bindings/core/src/method/client.rs @@ -17,7 +17,7 @@ use iota_sdk::{ address::{Bech32Address, Hrp}, output::{ dto::OutputDto, feature::Feature, unlock_condition::dto::UnlockConditionDto, AccountId, AnchorId, - DelegationId, FoundryId, NativeToken, NftId, OutputId, TokenScheme, + DelegationId, FoundryId, NftId, OutputId, TokenScheme, }, payload::{dto::PayloadDto, signed_transaction::TransactionId}, BlockDto, BlockId, IssuerId, @@ -43,7 +43,6 @@ pub enum ClientMethod { // TODO: Determine if `default` is wanted here #[serde(default, with = "string")] mana: u64, - native_tokens: Option>, account_id: AccountId, foundry_counter: Option, unlock_conditions: Vec, @@ -61,7 +60,6 @@ pub enum ClientMethod { // TODO: Determine if `default` is wanted here #[serde(default, with = "string")] mana: u64, - native_tokens: Option>, unlock_conditions: Vec, features: Option>, }, @@ -73,7 +71,6 @@ pub enum ClientMethod { // If not provided, minimum amount will be used #[serde(default, with = "option_string")] amount: Option, - native_tokens: Option>, serial_number: u32, token_scheme: TokenScheme, unlock_conditions: Vec, @@ -91,7 +88,6 @@ pub enum ClientMethod { // TODO: Determine if `default` is wanted here #[serde(default, with = "string")] mana: u64, - native_tokens: Option>, nft_id: NftId, unlock_conditions: Vec, features: Option>, diff --git a/bindings/core/src/method/wallet.rs b/bindings/core/src/method/wallet.rs index f65467ae52..36f280a558 100644 --- a/bindings/core/src/method/wallet.rs +++ b/bindings/core/src/method/wallet.rs @@ -26,7 +26,7 @@ use iota_sdk::{ }, wallet::{ ClientOptions, ConsolidationParams, CreateAccountParams, CreateNativeTokenParams, FilterOptions, MintNftParams, - OutputParams, OutputsToClaim, SendNativeTokensParams, SendNftParams, SendParams, SyncOptions, + OutputParams, OutputsToClaim, SendNativeTokenParams, SendNftParams, SendParams, SyncOptions, TransactionOptions, }, U256, @@ -295,7 +295,7 @@ pub enum WalletMethod { /// Prepare to send native tokens. /// Expected response: [`PreparedTransaction`](crate::Response::PreparedTransaction) PrepareSendNativeTokens { - params: Vec, + params: Vec, options: Option, }, /// Prepare to Send nft. diff --git a/bindings/core/src/method_handler/client.rs b/bindings/core/src/method_handler/client.rs index 53f65631cd..d68fea59b3 100644 --- a/bindings/core/src/method_handler/client.rs +++ b/bindings/core/src/method_handler/client.rs @@ -59,7 +59,6 @@ pub(crate) async fn call_client_method_internal(client: &Client, method: ClientM ClientMethod::BuildAccountOutput { amount, mana, - native_tokens, account_id, foundry_counter, unlock_conditions, @@ -73,7 +72,6 @@ pub(crate) async fn call_client_method_internal(client: &Client, method: ClientM OutputBuilderAmount::MinimumAmount(client.get_storage_score_parameters().await?) }, mana, - native_tokens, &account_id, foundry_counter, unlock_conditions, @@ -86,7 +84,6 @@ pub(crate) async fn call_client_method_internal(client: &Client, method: ClientM ClientMethod::BuildBasicOutput { amount, mana, - native_tokens, unlock_conditions, features, } => { @@ -97,7 +94,6 @@ pub(crate) async fn call_client_method_internal(client: &Client, method: ClientM OutputBuilderAmount::MinimumAmount(client.get_storage_score_parameters().await?) }, mana, - native_tokens, unlock_conditions, features, )?); @@ -106,7 +102,6 @@ pub(crate) async fn call_client_method_internal(client: &Client, method: ClientM } ClientMethod::BuildFoundryOutput { amount, - native_tokens, serial_number, token_scheme, unlock_conditions, @@ -119,7 +114,6 @@ pub(crate) async fn call_client_method_internal(client: &Client, method: ClientM } else { OutputBuilderAmount::MinimumAmount(client.get_storage_score_parameters().await?) }, - native_tokens, serial_number, token_scheme, unlock_conditions, @@ -132,7 +126,6 @@ pub(crate) async fn call_client_method_internal(client: &Client, method: ClientM ClientMethod::BuildNftOutput { amount, mana, - native_tokens, nft_id, unlock_conditions, features, @@ -145,7 +138,6 @@ pub(crate) async fn call_client_method_internal(client: &Client, method: ClientM OutputBuilderAmount::MinimumAmount(client.get_storage_score_parameters().await?) }, mana, - native_tokens, &nft_id, unlock_conditions, features, diff --git a/bindings/nodejs/examples/how_tos/native_tokens/send.ts b/bindings/nodejs/examples/how_tos/native_tokens/send.ts index a42a1459b4..4f832d8a56 100644 --- a/bindings/nodejs/examples/how_tos/native_tokens/send.ts +++ b/bindings/nodejs/examples/how_tos/native_tokens/send.ts @@ -1,17 +1,17 @@ // Copyright 2023 IOTA Stiftung // SPDX-License-Identifier: Apache-2.0 -import { SendNativeTokensParams } from '@iota/sdk'; +import { SendNativeTokenParams } from '@iota/sdk'; import { getUnlockedWallet } from '../../wallet/common'; // The native token amount to send. const SEND_NATIVE_TOKEN_AMOUNT = BigInt(10); -// The address to send the tokens to +// The address to send the token to const RECV_ADDRESS = 'rms1qpszqzadsym6wpppd6z037dvlejmjuke7s24hm95s9fg9vpua7vluaw60xu'; -// In this example we will send native tokens. +// In this example we will send a native token. // // Make sure that `STRONGHOLD_SNAPSHOT_PATH` and `WALLET_DB_PATH` already exist by // running the `how_tos/accounts_and_addresses/create-wallet` example! @@ -32,10 +32,10 @@ async function run() { )?.tokenId; if (tokenId != null) { - const outputs: SendNativeTokensParams[] = [ + const outputs: SendNativeTokenParams[] = [ { address: RECV_ADDRESS, - nativeTokens: [[tokenId, SEND_NATIVE_TOKEN_AMOUNT]], + nativeToken: [tokenId, SEND_NATIVE_TOKEN_AMOUNT], }, ]; diff --git a/bindings/nodejs/lib/types/wallet/address.ts b/bindings/nodejs/lib/types/wallet/address.ts index c88fbf5fde..18845f1d0d 100644 --- a/bindings/nodejs/lib/types/wallet/address.ts +++ b/bindings/nodejs/lib/types/wallet/address.ts @@ -35,12 +35,12 @@ export interface SendParams { expiration?: SlotIndex; } -/** Address with native tokens */ -export interface SendNativeTokensParams { +/** Address with native token */ +export interface SendNativeTokenParams { /** The Bech32 address. */ address: Bech32Address; - /** The Native Tokens to send. */ - nativeTokens: [TokenId, u256][]; + /** The Native Token to send. */ + nativeToken: [TokenId, u256]; /** * Bech32 encoded address, to which the storage deposit will be returned. * Default will use the address of the wallet. diff --git a/bindings/nodejs/lib/types/wallet/bridge/account.ts b/bindings/nodejs/lib/types/wallet/bridge/account.ts index a347917568..26c33803ac 100644 --- a/bindings/nodejs/lib/types/wallet/bridge/account.ts +++ b/bindings/nodejs/lib/types/wallet/bridge/account.ts @@ -3,7 +3,7 @@ import type { SendParams, - SendNativeTokensParams, + SendNativeTokenParams, SendNftParams, GenerateAddressOptions, } from '../address'; @@ -258,7 +258,7 @@ export type __SendWithParamsMethod__ = { export type __PrepareSendNativeTokensMethod__ = { name: 'prepareSendNativeTokens'; data: { - params: SendNativeTokensParams[]; + params: SendNativeTokenParams[]; options?: TransactionOptions; }; }; diff --git a/bindings/nodejs/lib/types/wallet/bridge/wallet.ts b/bindings/nodejs/lib/types/wallet/bridge/wallet.ts index 63dc52caa8..895a9aeeaf 100644 --- a/bindings/nodejs/lib/types/wallet/bridge/wallet.ts +++ b/bindings/nodejs/lib/types/wallet/bridge/wallet.ts @@ -9,7 +9,7 @@ import type { } from '../../client'; import type { SendParams, - SendNativeTokensParams, + SendNativeTokenParams, SendNftParams, } from '../address'; import type { OutputParams } from '../output-params'; @@ -337,7 +337,7 @@ export type __SendWithParamsMethod__ = { export type __PrepareSendNativeTokensMethod__ = { name: 'prepareSendNativeTokens'; data: { - params: SendNativeTokensParams[]; + params: SendNativeTokenParams[]; options?: TransactionOptions; }; }; diff --git a/bindings/nodejs/lib/types/wallet/output-params.ts b/bindings/nodejs/lib/types/wallet/output-params.ts index 1e9be9073d..eaba4bb4d0 100644 --- a/bindings/nodejs/lib/types/wallet/output-params.ts +++ b/bindings/nodejs/lib/types/wallet/output-params.ts @@ -24,8 +24,6 @@ export interface OutputParams { /** Assets to include in the output. */ export interface Assets { - /** Native Token assets to include. */ - nativeTokens?: INativeToken[]; /** The NFT to include. */ nftId?: HexEncodedString; } @@ -40,6 +38,8 @@ export interface Features { sender?: string; /** An Issuer feature to include. */ issuer?: string; + /** Native Token to include. */ + nativeToken?: INativeToken; } /** Time unlocks to include in the output. */ diff --git a/bindings/nodejs/lib/wallet/wallet.ts b/bindings/nodejs/lib/wallet/wallet.ts index 29e3fdb0dc..071d0b3667 100644 --- a/bindings/nodejs/lib/wallet/wallet.ts +++ b/bindings/nodejs/lib/wallet/wallet.ts @@ -6,7 +6,7 @@ import { Balance, SyncOptions, SendParams, - SendNativeTokensParams, + SendNativeTokenParams, SendNftParams, AccountOutputParams, FilterOptions, @@ -1325,7 +1325,7 @@ export class Wallet { * @returns The transaction. */ async sendNativeTokens( - params: SendNativeTokensParams[], + params: SendNativeTokenParams[], transactionOptions?: TransactionOptions, ): Promise { return ( @@ -1342,7 +1342,7 @@ export class Wallet { * @returns The prepared transaction. */ async prepareSendNativeTokens( - params: SendNativeTokensParams[], + params: SendNativeTokenParams[], transactionOptions?: TransactionOptions, ): Promise { const response = await this.methodHandler.callMethod({ diff --git a/bindings/nodejs/package-lock.json b/bindings/nodejs/package-lock.json index 4094d96ed9..eca7eb77be 100644 --- a/bindings/nodejs/package-lock.json +++ b/bindings/nodejs/package-lock.json @@ -5930,18 +5930,6 @@ "semver": "bin/semver" } }, - "node_modules/node-ninja/node_modules/tar": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/tar/-/tar-2.2.2.tgz", - "integrity": "sha512-FCEhQ/4rE1zYv9rYXJw/msRqsnmlje5jHP6huWeBZ704jUTy02c5AZyWujpMR1ax6mVw9NyJMfuK2CMDWVIfgA==", - "deprecated": "This version of tar is no longer supported, and will not receive security updates. Please upgrade asap.", - "dev": true, - "dependencies": { - "block-stream": "*", - "fstream": "^1.0.12", - "inherits": "2" - } - }, "node_modules/node-ninja/node_modules/which": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", @@ -13025,7 +13013,7 @@ "request": "2", "rimraf": "2", "semver": "2.x || 3.x || 4 || 5", - "tar": "^4.4.19", + "tar": "^2.0.0", "which": "1" }, "dependencies": { @@ -13077,16 +13065,6 @@ "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", "dev": true }, - "tar": { - "version": "https://registry.npmjs.org/tar/-/tar-2.2.2.tgz", - "integrity": "sha512-FCEhQ/4rE1zYv9rYXJw/msRqsnmlje5jHP6huWeBZ704jUTy02c5AZyWujpMR1ax6mVw9NyJMfuK2CMDWVIfgA==", - "dev": true, - "requires": { - "block-stream": "*", - "fstream": "^1.0.12", - "inherits": "2" - } - }, "which": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", diff --git a/bindings/nodejs/yarn.lock b/bindings/nodejs/yarn.lock index ba918689f7..1914f42d80 100644 --- a/bindings/nodejs/yarn.lock +++ b/bindings/nodejs/yarn.lock @@ -2201,9 +2201,9 @@ fs.realpath@^1.0.0: integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== fsevents@^2.3.2: - version "2.3.3" - resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.3.tgz#cac6407785d03675a2a5e1a5305c697b347d90d6" - integrity sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw== + version "2.3.2" + resolved "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz" + integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== fstream@^1.0.0, fstream@~1.0.10: version "1.0.12" diff --git a/bindings/python/examples/how_tos/native_tokens/send.py b/bindings/python/examples/how_tos/native_tokens/send.py index 5c5b6b623f..7c854fe215 100644 --- a/bindings/python/examples/how_tos/native_tokens/send.py +++ b/bindings/python/examples/how_tos/native_tokens/send.py @@ -2,7 +2,7 @@ from dotenv import load_dotenv -from iota_sdk import SendNativeTokensParams, Wallet +from iota_sdk import SendNativeTokenParams, Wallet load_dotenv() @@ -24,12 +24,12 @@ wallet.set_stronghold_password(os.environ["STRONGHOLD_PASSWORD"]) -outputs = [SendNativeTokensParams( +outputs = [SendNativeTokenParams( "rms1qpszqzadsym6wpppd6z037dvlejmjuke7s24hm95s9fg9vpua7vluaw60xu", - [( + ( token.token_id, hex(10) - )], + ), )] transaction = account.send_native_tokens(outputs, None) diff --git a/bindings/python/iota_sdk/types/output_params.py b/bindings/python/iota_sdk/types/output_params.py index 5229c2a9f2..b5b896b61b 100644 --- a/bindings/python/iota_sdk/types/output_params.py +++ b/bindings/python/iota_sdk/types/output_params.py @@ -15,7 +15,6 @@ class Assets(): """Assets for OutputParams. """ - native_tokens: Optional[List[NativeToken]] = None nft_id: Optional[HexStr] = None @@ -28,6 +27,7 @@ class Features(): metadata: Optional[HexStr] = None issuer: Optional[str] = None sender: Optional[str] = None + native_token: Optional[NativeToken] = None @json diff --git a/bindings/python/iota_sdk/types/send_params.py b/bindings/python/iota_sdk/types/send_params.py index c8f47f5e0d..6bcccd9c2e 100644 --- a/bindings/python/iota_sdk/types/send_params.py +++ b/bindings/python/iota_sdk/types/send_params.py @@ -32,17 +32,17 @@ class SendParams(): @json @dataclass -class SendNativeTokensParams(): - """Parameters for sending native tokens +class SendNativeTokenParams(): + """Parameters for sending a native token Attributes: address: The address to send to. - native_tokens: The native tokens to send. - return_address: The address to return the native tokens to if not claimed. - expiration: The expiration timestamp until native tokens can be claimed. + native_token: The native token to send. + return_address: The address to return the native token to if not claimed. + expiration: The expiration timestamp until the native token can be claimed. """ address: str - native_tokens: List[NativeToken] + native_token: NativeToken return_address: Optional[str] = None expiration: Optional[int] = None diff --git a/bindings/python/iota_sdk/wallet/account.py b/bindings/python/iota_sdk/wallet/account.py index 1d0a463097..3bc91c0181 100644 --- a/bindings/python/iota_sdk/wallet/account.py +++ b/bindings/python/iota_sdk/wallet/account.py @@ -19,7 +19,7 @@ from iota_sdk.types.output import BasicOutput, NftOutput, Output, deserialize_output from iota_sdk.types.output_params import OutputParams from iota_sdk.types.transaction_data import PreparedTransactionData, SignedTransactionData -from iota_sdk.types.send_params import CreateAccountOutputParams, CreateNativeTokenParams, MintNftParams, SendNativeTokensParams, SendNftParams, SendParams +from iota_sdk.types.send_params import CreateAccountOutputParams, CreateNativeTokenParams, MintNftParams, SendNativeTokenParams, SendNftParams, SendParams from iota_sdk.types.transaction_with_metadata import TransactionWithMetadata from iota_sdk.types.transaction_options import TransactionOptions from iota_sdk.types.consolidation_params import ConsolidationParams @@ -502,14 +502,14 @@ def send_with_params( )) def send_native_tokens( - self, params: List[SendNativeTokensParams], options: Optional[TransactionOptions] = None) -> TransactionWithMetadata: + self, params: List[SendNativeTokenParams], options: Optional[TransactionOptions] = None) -> TransactionWithMetadata: """Send native tokens. """ return self.prepare_send_native_tokens(params, options).send() def prepare_send_native_tokens( self, - params: List[SendNativeTokensParams], + params: List[SendNativeTokenParams], options: Optional[TransactionOptions] = None) -> PreparedTransaction: """Send native tokens. """ diff --git a/cli/src/wallet_cli/mod.rs b/cli/src/wallet_cli/mod.rs index a0b0d34413..dba658b975 100644 --- a/cli/src/wallet_cli/mod.rs +++ b/cli/src/wallet_cli/mod.rs @@ -24,7 +24,7 @@ use iota_sdk::{ utils::ConvertTo, wallet::{ types::{OutputData, TransactionWithMetadata}, - ConsolidationParams, CreateNativeTokenParams, MintNftParams, OutputsToClaim, SendNativeTokensParams, + ConsolidationParams, CreateNativeTokenParams, MintNftParams, OutputsToClaim, SendNativeTokenParams, SendNftParams, SendParams, SyncOptions, TransactionOptions, Wallet, }, U256, @@ -194,7 +194,7 @@ pub enum WalletCommand { #[arg(long, default_value_t = false)] allow_micro_amount: bool, }, - /// Send native tokens. + /// Send a native token. /// This will create an output with an expiration and storage deposit return unlock condition. SendNativeToken { /// Address to send the native tokens to, e.g. rms1qztwng6cty8cfm42nzvq099ev7udhrnk0rw8jt8vttf9kpqnxhpsx869vr3. @@ -418,14 +418,15 @@ pub async fn claimable_outputs_command(wallet: &Wallet) -> Result<(), Error> { }; println_log_info!("{output_id:?} ({kind})"); - if let Some(native_tokens) = output.native_tokens() { - if !native_tokens.is_empty() { - println_log_info!(" - native token amount:"); - native_tokens.iter().for_each(|token| { - println_log_info!(" + {} {}", token.amount(), token.token_id()); - }); - } - } + // TODO https://github.com/iotaledger/iota-sdk/issues/1633 + // if let Some(native_tokens) = output.native_tokens() { + // if !native_tokens.is_empty() { + // println_log_info!(" - native token amount:"); + // native_tokens.iter().for_each(|token| { + // println_log_info!(" + {} {}", token.amount(), token.token_id()); + // }); + // } + // } if let Some(unlock_conditions) = output.unlock_conditions() { let deposit_return = unlock_conditions @@ -736,21 +737,21 @@ pub async fn send_native_token_command( let outputs = [BasicOutputBuilder::new_with_minimum_amount(storage_params) .add_unlock_condition(AddressUnlockCondition::new(address)) - .with_native_tokens([NativeToken::new( + .with_native_token(NativeToken::new( TokenId::from_str(&token_id)?, U256::from_dec_str(&amount).map_err(|e| Error::Miscellaneous(e.to_string()))?, - )?]) + )?) .finish_output()?]; wallet.send_outputs(outputs, None).await? } else { // Send native tokens with storage deposit return and expiration - let outputs = [SendNativeTokensParams::new( + let outputs = [SendNativeTokenParams::new( address, - [( + ( TokenId::from_str(&token_id)?, U256::from_dec_str(&amount).map_err(|e| Error::Miscellaneous(e.to_string()))?, - )], + ), )?]; wallet.send_native_tokens(outputs, None).await? }; @@ -952,8 +953,8 @@ async fn print_wallet_address(wallet: &Wallet) -> Result<(), Error> { .required_and_unlocked_address(slot_index, &output_id)?; if address.inner() == required_address { - if let Some(nts) = output_data.output.native_tokens() { - native_tokens.add_native_tokens(nts.clone())?; + if let Some(nt) = output_data.output.native_token() { + native_tokens.add_native_token(nt.clone())?; } match &output_data.output { Output::Basic(_) => {} diff --git a/sdk/examples/client/02_address_balance.rs b/sdk/examples/client/02_address_balance.rs index 97c3d992ec..fc9cc522cd 100644 --- a/sdk/examples/client/02_address_balance.rs +++ b/sdk/examples/client/02_address_balance.rs @@ -55,8 +55,8 @@ async fn main() -> Result<()> { let mut total_amount = 0; let mut total_native_tokens = NativeTokensBuilder::new(); for output in outputs { - if let Some(native_tokens) = output.native_tokens() { - total_native_tokens.add_native_tokens(native_tokens.clone())?; + if let Some(native_token) = output.native_token() { + total_native_tokens.add_native_token(native_token.clone())?; } total_amount += output.amount(); } diff --git a/sdk/examples/how_tos/accounts_and_addresses/consolidate_outputs.rs b/sdk/examples/how_tos/accounts_and_addresses/consolidate_outputs.rs index bb08f13690..9726ba09bd 100644 --- a/sdk/examples/how_tos/accounts_and_addresses/consolidate_outputs.rs +++ b/sdk/examples/how_tos/accounts_and_addresses/consolidate_outputs.rs @@ -50,7 +50,7 @@ async fn main() -> Result<()> { "- address: {:?}\n- amount: {:?}\n- native tokens: {:?}", output_data.address.clone().to_bech32_unchecked("rms"), output_data.output.amount(), - output_data.output.native_tokens() + output_data.output.native_token() ) }); @@ -86,7 +86,7 @@ async fn main() -> Result<()> { "- address: {:?}\n- amount: {:?}\n- native tokens: {:?}", output_data.address.clone().to_bech32_unchecked("rms"), output_data.output.amount(), - output_data.output.native_tokens() + output_data.output.native_token() ) }); diff --git a/sdk/examples/how_tos/native_tokens/send.rs b/sdk/examples/how_tos/native_tokens/send.rs index d611442b05..01b0b5ec2b 100644 --- a/sdk/examples/how_tos/native_tokens/send.rs +++ b/sdk/examples/how_tos/native_tokens/send.rs @@ -13,7 +13,7 @@ use iota_sdk::{ types::block::address::Bech32Address, - wallet::{Result, SendNativeTokensParams}, + wallet::{Result, SendNativeTokenParams}, Wallet, }; use primitive_types::U256; @@ -58,9 +58,9 @@ async fn main() -> Result<()> { let bech32_address = RECV_ADDRESS.parse::()?; - let outputs = [SendNativeTokensParams::new( + let outputs = [SendNativeTokenParams::new( bech32_address, - [(*token_id, U256::from(SEND_NATIVE_TOKEN_AMOUNT))], + (*token_id, U256::from(SEND_NATIVE_TOKEN_AMOUNT)), )?]; let transaction = wallet.send_native_tokens(outputs, None).await?; diff --git a/sdk/src/client/api/block_builder/input_selection/mod.rs b/sdk/src/client/api/block_builder/input_selection/mod.rs index 113513f103..c8f8d742f5 100644 --- a/sdk/src/client/api/block_builder/input_selection/mod.rs +++ b/sdk/src/client/api/block_builder/input_selection/mod.rs @@ -397,8 +397,8 @@ impl InputSelection { let mut input_nfts = Vec::new(); for input in &self.selected_inputs { - if let Some(native_tokens) = input.output.native_tokens() { - input_native_tokens_builder.add_native_tokens(native_tokens.clone())?; + if let Some(native_token) = input.output.native_token() { + input_native_tokens_builder.add_native_token(native_token.clone())?; } match &input.output { Output::Account(_) => { @@ -416,8 +416,8 @@ impl InputSelection { } for output in self.outputs.iter() { - if let Some(native_token) = output.native_tokens() { - output_native_tokens_builder.add_native_tokens(native_token.clone())?; + if let Some(native_token) = output.native_token() { + output_native_tokens_builder.add_native_token(native_token.clone())?; } } diff --git a/sdk/src/client/api/block_builder/input_selection/remainder.rs b/sdk/src/client/api/block_builder/input_selection/remainder.rs index 0dae140a3e..e0a37a56fa 100644 --- a/sdk/src/client/api/block_builder/input_selection/remainder.rs +++ b/sdk/src/client/api/block_builder/input_selection/remainder.rs @@ -71,9 +71,10 @@ impl InputSelection { [0; 32], )))); - if let Some(native_tokens) = native_tokens_diff { - remainder_builder = remainder_builder.with_native_tokens(native_tokens); - } + // TODO https://github.com/iotaledger/iota-sdk/issues/1631 + // if let Some(native_tokens) = native_tokens_diff { + // remainder_builder = remainder_builder.with_native_tokens(native_tokens); + // } Ok((remainder_builder.finish_output()?.amount(), native_tokens_remainder)) } @@ -131,10 +132,11 @@ impl InputSelection { remainder_builder = remainder_builder.add_unlock_condition(AddressUnlockCondition::new(remainder_address.clone())); - if let Some(native_tokens) = native_tokens_diff { - log::debug!("Adding {native_tokens:?} to remainder output for {remainder_address:?}"); - remainder_builder = remainder_builder.with_native_tokens(native_tokens); - } + // TODO https://github.com/iotaledger/iota-sdk/issues/1631 + // if let Some(native_tokens) = native_tokens_diff { + // log::debug!("Adding {native_tokens:?} to remainder output for {remainder_address:?}"); + // remainder_builder = remainder_builder.with_native_tokens(native_tokens); + // } let remainder = remainder_builder.finish_output()?; diff --git a/sdk/src/client/api/block_builder/input_selection/requirement/amount.rs b/sdk/src/client/api/block_builder/input_selection/requirement/amount.rs index 9a08208936..e0822901dc 100644 --- a/sdk/src/client/api/block_builder/input_selection/requirement/amount.rs +++ b/sdk/src/client/api/block_builder/input_selection/requirement/amount.rs @@ -172,40 +172,36 @@ impl InputSelection { base_inputs: impl Iterator + Clone, amount_selection: &mut AmountSelection, ) -> bool { - // No native tokens, expired SDRUC. + // No native token, expired SDRUC. let inputs = base_inputs.clone().filter(|input| { - input.output.native_tokens().unwrap().is_empty() - && sdruc_not_expired(&input.output, self.slot_index).is_none() + input.output.native_token().is_none() && sdruc_not_expired(&input.output, self.slot_index).is_none() }); if amount_selection.fulfil(inputs) { return true; } - // No native tokens, unexpired SDRUC. + // No native token, unexpired SDRUC. let inputs = base_inputs.clone().filter(|input| { - input.output.native_tokens().unwrap().is_empty() - && sdruc_not_expired(&input.output, self.slot_index).is_some() + input.output.native_token().is_none() && sdruc_not_expired(&input.output, self.slot_index).is_some() }); if amount_selection.fulfil(inputs) { return true; } - // Native tokens, expired SDRUC. + // Native token, expired SDRUC. let inputs = base_inputs.clone().filter(|input| { - !input.output.native_tokens().unwrap().is_empty() - && sdruc_not_expired(&input.output, self.slot_index).is_none() + input.output.native_token().is_some() && sdruc_not_expired(&input.output, self.slot_index).is_none() }); if amount_selection.fulfil(inputs) { return true; } - // Native tokens, unexpired SDRUC. + // Native token, unexpired SDRUC. let inputs = base_inputs.clone().filter(|input| { - !input.output.native_tokens().unwrap().is_empty() - && sdruc_not_expired(&input.output, self.slot_index).is_some() + input.output.native_token().is_some() && sdruc_not_expired(&input.output, self.slot_index).is_some() }); if amount_selection.fulfil(inputs) { diff --git a/sdk/src/client/api/block_builder/input_selection/requirement/native_tokens.rs b/sdk/src/client/api/block_builder/input_selection/requirement/native_tokens.rs index a9871d508e..02b2818cc8 100644 --- a/sdk/src/client/api/block_builder/input_selection/requirement/native_tokens.rs +++ b/sdk/src/client/api/block_builder/input_selection/requirement/native_tokens.rs @@ -15,8 +15,8 @@ pub(crate) fn get_native_tokens<'a>(outputs: impl Iterator) - let mut required_native_tokens = NativeTokensBuilder::new(); for output in outputs { - if let Some(output_native_tokens) = output.native_tokens() { - required_native_tokens.add_native_tokens(output_native_tokens.clone())?; + if let Some(output_native_token) = output.native_token() { + required_native_tokens.add_native_token(output_native_token.clone())?; } } @@ -139,15 +139,14 @@ impl InputSelection { let inputs = self.available_inputs.iter().filter(|input| { input .output - .native_tokens() - .map_or(false, |native_tokens| native_tokens.contains(diff.token_id())) + .native_token() + .is_some_and(|native_token| native_token.token_id() == diff.token_id()) }); for input in inputs { amount += input .output - .native_tokens() - .and_then(|native_tokens| native_tokens.get(diff.token_id())) + .native_token() // PANIC: safe to unwrap as the filter guarantees inputs containing this native token. .unwrap() .amount(); diff --git a/sdk/src/types/block/error.rs b/sdk/src/types/block/error.rs index 394a04a605..4249c4f3cb 100644 --- a/sdk/src/types/block/error.rs +++ b/sdk/src/types/block/error.rs @@ -137,7 +137,6 @@ pub enum Error { InvalidTagLength(>::Error), InvalidTokenSchemeKind(u8), InvalidTransactionAmountSum(u128), - InvalidTransactionNativeTokensCount(u16), InvalidManaAllotmentSum { max: u64, sum: u128, @@ -345,9 +344,6 @@ impl fmt::Display for Error { } Self::InvalidTokenSchemeKind(k) => write!(f, "invalid token scheme kind {k}"), Self::InvalidTransactionAmountSum(value) => write!(f, "invalid transaction amount sum: {value}"), - Self::InvalidTransactionNativeTokensCount(count) => { - write!(f, "invalid transaction native tokens count: {count}") - } Self::InvalidManaAllotmentSum { max, sum } => { write!(f, "invalid mana allotment sum: {sum} greater than max of {max}") } diff --git a/sdk/src/types/block/mod.rs b/sdk/src/types/block/mod.rs index 724454453e..c5ebdde771 100644 --- a/sdk/src/types/block/mod.rs +++ b/sdk/src/types/block/mod.rs @@ -42,7 +42,6 @@ pub mod unlock; #[cfg(feature = "serde")] pub use self::core::dto::{BlockBodyDto, BlockDto, UnsignedBlockDto}; -pub(crate) use self::r#macro::*; pub use self::{ block_id::{BlockHash, BlockId}, core::{Block, BlockBody, UnsignedBlock}, diff --git a/sdk/src/types/block/output/account.rs b/sdk/src/types/block/output/account.rs index a1f27ab433..cf8b230550 100644 --- a/sdk/src/types/block/output/account.rs +++ b/sdk/src/types/block/output/account.rs @@ -16,8 +16,8 @@ use crate::types::block::{ output::{ feature::{verify_allowed_features, Feature, FeatureFlags, Features}, unlock_condition::{verify_allowed_unlock_conditions, UnlockCondition, UnlockConditionFlags, UnlockConditions}, - ChainId, MinimumOutputAmount, NativeToken, NativeTokens, Output, OutputBuilderAmount, OutputId, - StateTransitionError, StateTransitionVerifier, StorageScore, StorageScoreParameters, + ChainId, MinimumOutputAmount, Output, OutputBuilderAmount, OutputId, StateTransitionError, + StateTransitionVerifier, StorageScore, StorageScoreParameters, }, payload::signed_transaction::TransactionCapabilityFlag, protocol::ProtocolParameters, @@ -58,7 +58,6 @@ impl From for Address { pub struct AccountOutputBuilder { amount: OutputBuilderAmount, mana: u64, - native_tokens: BTreeSet, account_id: AccountId, foundry_counter: Option, unlock_conditions: BTreeSet, @@ -82,7 +81,6 @@ impl AccountOutputBuilder { Self { amount, mana: Default::default(), - native_tokens: BTreeSet::new(), account_id, foundry_counter: None, unlock_conditions: BTreeSet::new(), @@ -112,20 +110,6 @@ impl AccountOutputBuilder { self } - /// - #[inline(always)] - pub fn add_native_token(mut self, native_token: NativeToken) -> Self { - self.native_tokens.insert(native_token); - self - } - - /// - #[inline(always)] - pub fn with_native_tokens(mut self, native_tokens: impl IntoIterator) -> Self { - self.native_tokens = native_tokens.into_iter().collect(); - self - } - /// Sets the account ID to the provided value. #[inline(always)] pub fn with_account_id(mut self, account_id: AccountId) -> Self { @@ -245,7 +229,6 @@ impl AccountOutputBuilder { let mut output = AccountOutput { amount: 0, mana: self.mana, - native_tokens: NativeTokens::from_set(self.native_tokens)?, account_id: self.account_id, foundry_counter, unlock_conditions, @@ -272,7 +255,6 @@ impl From<&AccountOutput> for AccountOutputBuilder { Self { amount: OutputBuilderAmount::Amount(output.amount), mana: output.mana, - native_tokens: output.native_tokens.iter().copied().collect(), account_id: output.account_id, foundry_counter: Some(output.foundry_counter), unlock_conditions: output.unlock_conditions.iter().cloned().collect(), @@ -288,8 +270,6 @@ pub struct AccountOutput { // Amount of IOTA coins held by the output. amount: u64, mana: u64, - // Native tokens held by the output. - native_tokens: NativeTokens, // Unique identifier of the account. account_id: AccountId, // A counter that denotes the number of foundries created by this account. @@ -335,12 +315,6 @@ impl AccountOutput { self.mana } - /// - #[inline(always)] - pub fn native_tokens(&self) -> &NativeTokens { - &self.native_tokens - } - /// #[inline(always)] pub fn account_id(&self) -> &AccountId { @@ -436,7 +410,6 @@ impl AccountOutput { // TODO update when TIP is updated // // Governance transition. // if current_state.amount != next_state.amount - // || current_state.native_tokens != next_state.native_tokens // || current_state.foundry_counter != next_state.foundry_counter // { // return Err(StateTransitionError::MutatedFieldWithoutRights); @@ -538,7 +511,6 @@ impl Packable for AccountOutput { fn pack(&self, packer: &mut P) -> Result<(), P::Error> { self.amount.pack(packer)?; self.mana.pack(packer)?; - self.native_tokens.pack(packer)?; self.account_id.pack(packer)?; self.foundry_counter.pack(packer)?; self.unlock_conditions.pack(packer)?; @@ -556,7 +528,6 @@ impl Packable for AccountOutput { let mana = u64::unpack::<_, VERIFY>(unpacker, &()).coerce()?; - let native_tokens = NativeTokens::unpack::<_, VERIFY>(unpacker, &())?; let account_id = AccountId::unpack::<_, VERIFY>(unpacker, &()).coerce()?; let foundry_counter = u32::unpack::<_, VERIFY>(unpacker, &()).coerce()?; @@ -587,7 +558,6 @@ impl Packable for AccountOutput { Ok(Self { amount, mana, - native_tokens, account_id, foundry_counter, unlock_conditions, @@ -642,8 +612,6 @@ pub(crate) mod dto { pub amount: u64, #[serde(with = "string")] pub mana: u64, - #[serde(skip_serializing_if = "Vec::is_empty", default)] - pub native_tokens: Vec, pub account_id: AccountId, pub foundry_counter: u32, pub unlock_conditions: Vec, @@ -659,7 +627,6 @@ pub(crate) mod dto { kind: AccountOutput::KIND, amount: value.amount(), mana: value.mana(), - native_tokens: value.native_tokens().to_vec(), account_id: *value.account_id(), foundry_counter: value.foundry_counter(), unlock_conditions: value.unlock_conditions().iter().map(Into::into).collect::<_>(), @@ -676,7 +643,6 @@ pub(crate) mod dto { let mut builder = AccountOutputBuilder::new_with_amount(dto.amount, dto.account_id) .with_mana(dto.mana) .with_foundry_counter(dto.foundry_counter) - .with_native_tokens(dto.native_tokens) .with_features(dto.features) .with_immutable_features(dto.immutable_features); @@ -693,7 +659,6 @@ pub(crate) mod dto { pub fn try_from_dtos( amount: OutputBuilderAmount, mana: u64, - native_tokens: Option>, account_id: &AccountId, foundry_counter: Option, unlock_conditions: Vec, @@ -708,10 +673,6 @@ pub(crate) mod dto { } .with_mana(mana); - if let Some(native_tokens) = native_tokens { - builder = builder.with_native_tokens(native_tokens); - } - if let Some(foundry_counter) = foundry_counter { builder = builder.with_foundry_counter(foundry_counter); } @@ -741,14 +702,11 @@ mod tests { use super::*; use crate::types::block::{ - output::{dto::OutputDto, FoundryId, SimpleTokenScheme, TokenId}, + output::dto::OutputDto, protocol::protocol_parameters, - rand::{ - address::rand_account_address, - output::{ - feature::rand_allowed_features, rand_account_id, rand_account_output, - unlock_condition::rand_address_unlock_condition_different_from_account_id, - }, + rand::output::{ + feature::rand_allowed_features, rand_account_id, rand_account_output, + unlock_condition::rand_address_unlock_condition_different_from_account_id, }, }; @@ -765,7 +723,6 @@ mod tests { let output_split = AccountOutput::try_from_dtos( OutputBuilderAmount::Amount(output.amount()), output.mana(), - Some(output.native_tokens().to_vec()), output.account_id(), output.foundry_counter().into(), output.unlock_conditions().iter().map(Into::into).collect(), @@ -776,14 +733,12 @@ mod tests { assert_eq!(output, output_split); let account_id = rand_account_id(); - let foundry_id = FoundryId::build(&rand_account_address(), 0, SimpleTokenScheme::KIND); let address = rand_address_unlock_condition_different_from_account_id(&account_id); let test_split_dto = |builder: AccountOutputBuilder| { let output_split = AccountOutput::try_from_dtos( builder.amount, builder.mana, - Some(builder.native_tokens.iter().copied().collect()), &builder.account_id, builder.foundry_counter, builder.unlock_conditions.iter().map(Into::into).collect(), @@ -795,7 +750,6 @@ mod tests { }; let builder = AccountOutput::build_with_amount(100, account_id) - .add_native_token(NativeToken::new(TokenId::from(foundry_id), 1000).unwrap()) .add_unlock_condition(address.clone()) .with_features(rand_allowed_features(AccountOutput::ALLOWED_FEATURES)) .with_immutable_features(rand_allowed_features(AccountOutput::ALLOWED_IMMUTABLE_FEATURES)); @@ -803,7 +757,6 @@ mod tests { let builder = AccountOutput::build_with_minimum_amount(protocol_parameters.storage_score_parameters(), account_id) - .add_native_token(NativeToken::new(TokenId::from(foundry_id), 1000).unwrap()) .add_unlock_condition(address) .with_features(rand_allowed_features(AccountOutput::ALLOWED_FEATURES)) .with_immutable_features(rand_allowed_features(AccountOutput::ALLOWED_IMMUTABLE_FEATURES)); diff --git a/sdk/src/types/block/output/basic.rs b/sdk/src/types/block/output/basic.rs index 5cf17ea955..0f310d76f4 100644 --- a/sdk/src/types/block/output/basic.rs +++ b/sdk/src/types/block/output/basic.rs @@ -8,13 +8,12 @@ use packable::{Packable, PackableExt}; use crate::types::block::{ address::Address, output::{ - feature::{verify_allowed_features, Feature, FeatureFlags, Features}, + feature::{verify_allowed_features, Feature, FeatureFlags, Features, NativeTokenFeature}, unlock_condition::{ verify_allowed_unlock_conditions, AddressUnlockCondition, StorageDepositReturnUnlockCondition, UnlockCondition, UnlockConditionFlags, UnlockConditions, }, - MinimumOutputAmount, NativeToken, NativeTokens, Output, OutputBuilderAmount, OutputId, StorageScore, - StorageScoreParameters, + MinimumOutputAmount, NativeToken, Output, OutputBuilderAmount, OutputId, StorageScore, StorageScoreParameters, }, protocol::ProtocolParameters, semantic::{SemanticValidationContext, TransactionFailureReason}, @@ -28,7 +27,6 @@ use crate::types::block::{ pub struct BasicOutputBuilder { amount: OutputBuilderAmount, mana: u64, - native_tokens: BTreeSet, unlock_conditions: BTreeSet, features: BTreeSet, } @@ -51,7 +49,6 @@ impl BasicOutputBuilder { Self { amount, mana: Default::default(), - native_tokens: BTreeSet::new(), unlock_conditions: BTreeSet::new(), features: BTreeSet::new(), } @@ -78,20 +75,6 @@ impl BasicOutputBuilder { self } - /// - #[inline(always)] - pub fn add_native_token(mut self, native_token: NativeToken) -> Self { - self.native_tokens.insert(native_token); - self - } - - /// - #[inline(always)] - pub fn with_native_tokens(mut self, native_tokens: impl IntoIterator) -> Self { - self.native_tokens = native_tokens.into_iter().collect(); - self - } - /// Adds an [`UnlockCondition`] to the builder, if one does not already exist of that type. #[inline(always)] pub fn add_unlock_condition(mut self, unlock_condition: impl Into) -> Self { @@ -149,6 +132,12 @@ impl BasicOutputBuilder { self } + /// Sets the native token of the builder. + #[inline(always)] + pub fn with_native_token(self, native_token: impl Into) -> Self { + self.add_feature(NativeTokenFeature::from(native_token.into())) + } + /// Adds a storage deposit return unlock condition if one is needed to cover the current amount /// (i.e. `amount < minimum_amount`). This will increase the total amount to satisfy the `minimum_amount` with /// the additional unlock condition that will return the remainder to the provided `return_address`. @@ -210,7 +199,6 @@ impl BasicOutputBuilder { let mut output = BasicOutput { amount: 0, mana: self.mana, - native_tokens: NativeTokens::from_set(self.native_tokens)?, unlock_conditions, features, }; @@ -234,7 +222,6 @@ impl From<&BasicOutput> for BasicOutputBuilder { Self { amount: OutputBuilderAmount::Amount(output.amount), mana: output.mana, - native_tokens: output.native_tokens.iter().copied().collect(), unlock_conditions: output.unlock_conditions.iter().cloned().collect(), features: output.features.iter().cloned().collect(), } @@ -250,8 +237,6 @@ pub struct BasicOutput { amount: u64, /// Amount of stored Mana held by this output. mana: u64, - /// Native tokens held by this output. - native_tokens: NativeTokens, /// Define how the output can be unlocked in a transaction. #[packable(verify_with = verify_unlock_conditions_packable)] unlock_conditions: UnlockConditions, @@ -272,7 +257,8 @@ impl BasicOutput { /// The set of allowed [`Feature`]s for an [`BasicOutput`]. pub const ALLOWED_FEATURES: FeatureFlags = FeatureFlags::SENDER .union(FeatureFlags::METADATA) - .union(FeatureFlags::TAG); + .union(FeatureFlags::TAG) + .union(FeatureFlags::NATIVE_TOKEN); /// Creates a new [`BasicOutputBuilder`] with a provided amount. #[inline(always)] @@ -298,12 +284,6 @@ impl BasicOutput { self.mana } - /// - #[inline(always)] - pub fn native_tokens(&self) -> &NativeTokens { - &self.native_tokens - } - /// #[inline(always)] pub fn unlock_conditions(&self) -> &UnlockConditions { @@ -316,6 +296,12 @@ impl BasicOutput { &self.features } + /// + #[inline(always)] + pub fn native_token(&self) -> Option<&NativeToken> { + self.features.native_token().map(|f| f.native_token()) + } + /// #[inline(always)] pub fn address(&self) -> &Address { @@ -342,9 +328,9 @@ impl BasicOutput { /// Simple deposit outputs are basic outputs with only an address unlock condition, no native tokens and no /// features. They are used to return storage deposits. pub fn simple_deposit_address(&self) -> Option<&Address> { - if let [UnlockCondition::Address(uc)] = self.unlock_conditions().as_ref() { - if self.mana == 0 && self.native_tokens.is_empty() && self.features.is_empty() { - return Some(uc.address()); + if let [UnlockCondition::Address(address)] = self.unlock_conditions().as_ref() { + if self.mana == 0 && self.features.is_empty() { + return Some(address.address()); } } @@ -436,8 +422,6 @@ pub(crate) mod dto { pub amount: u64, #[serde(with = "string")] pub mana: u64, - #[serde(skip_serializing_if = "Vec::is_empty", default)] - pub native_tokens: Vec, pub unlock_conditions: Vec, #[serde(skip_serializing_if = "Vec::is_empty", default)] pub features: Vec, @@ -449,7 +433,6 @@ pub(crate) mod dto { kind: BasicOutput::KIND, amount: value.amount(), mana: value.mana(), - native_tokens: value.native_tokens().to_vec(), unlock_conditions: value.unlock_conditions().iter().map(Into::into).collect::<_>(), features: value.features().to_vec(), } @@ -461,7 +444,6 @@ pub(crate) mod dto { fn try_from(dto: BasicOutputDto) -> Result { let mut builder = BasicOutputBuilder::new_with_amount(dto.amount) - .with_native_tokens(dto.native_tokens) .with_mana(dto.mana) .with_features(dto.features); @@ -477,7 +459,6 @@ pub(crate) mod dto { pub fn try_from_dtos( amount: OutputBuilderAmount, mana: u64, - native_tokens: Option>, unlock_conditions: Vec, features: Option>, ) -> Result { @@ -487,10 +468,6 @@ pub(crate) mod dto { } .with_mana(mana); - if let Some(native_tokens) = native_tokens { - builder = builder.with_native_tokens(native_tokens); - } - let unlock_conditions = unlock_conditions .into_iter() .map(UnlockCondition::from) @@ -535,7 +512,6 @@ mod tests { let output_split = BasicOutput::try_from_dtos( OutputBuilderAmount::Amount(output.amount()), output.mana(), - Some(output.native_tokens().to_vec()), output.unlock_conditions().iter().map(Into::into).collect(), Some(output.features().to_vec()), ) @@ -549,7 +525,6 @@ mod tests { let output_split = BasicOutput::try_from_dtos( builder.amount, builder.mana, - Some(builder.native_tokens.iter().copied().collect()), builder.unlock_conditions.iter().map(Into::into).collect(), Some(builder.features.iter().cloned().collect()), ) @@ -558,13 +533,13 @@ mod tests { }; let builder = BasicOutput::build_with_amount(100) - .add_native_token(NativeToken::new(TokenId::from(foundry_id), 1000).unwrap()) + .with_native_token(NativeToken::new(TokenId::from(foundry_id), 1000).unwrap()) .add_unlock_condition(address.clone()) .with_features(rand_allowed_features(BasicOutput::ALLOWED_FEATURES)); test_split_dto(builder); let builder = BasicOutput::build_with_minimum_amount(protocol_parameters.storage_score_parameters()) - .add_native_token(NativeToken::new(TokenId::from(foundry_id), 1000).unwrap()) + .with_native_token(NativeToken::new(TokenId::from(foundry_id), 1000).unwrap()) .add_unlock_condition(address) .with_features(rand_allowed_features(BasicOutput::ALLOWED_FEATURES)); test_split_dto(builder); diff --git a/sdk/src/types/block/output/feature/block_issuer.rs b/sdk/src/types/block/output/feature/block_issuer.rs index 829430a0c5..c544d936f1 100644 --- a/sdk/src/types/block/output/feature/block_issuer.rs +++ b/sdk/src/types/block/output/feature/block_issuer.rs @@ -210,7 +210,7 @@ pub struct BlockIssuerFeature { impl BlockIssuerFeature { /// The [`Feature`](crate::types::block::output::Feature) kind of a [`BlockIssuerFeature`]. - pub const KIND: u8 = 4; + pub const KIND: u8 = 5; /// Creates a new [`BlockIssuerFeature`]. #[inline(always)] diff --git a/sdk/src/types/block/output/feature/mod.rs b/sdk/src/types/block/output/feature/mod.rs index 087e5607be..8f3067fcf7 100644 --- a/sdk/src/types/block/output/feature/mod.rs +++ b/sdk/src/types/block/output/feature/mod.rs @@ -4,6 +4,7 @@ mod block_issuer; mod issuer; mod metadata; +mod native_token; mod sender; mod staking; mod tag; @@ -24,6 +25,7 @@ pub use self::{ block_issuer::{BlockIssuerFeature, BlockIssuerKey, BlockIssuerKeys, Ed25519BlockIssuerKey}, issuer::IssuerFeature, metadata::MetadataFeature, + native_token::NativeTokenFeature, sender::SenderFeature, staking::StakingFeature, tag::TagFeature, @@ -51,6 +53,9 @@ pub enum Feature { /// A tag feature. #[packable(tag = TagFeature::KIND)] Tag(TagFeature), + /// A native token feature. + #[packable(tag = NativeTokenFeature::KIND)] + NativeToken(NativeTokenFeature), /// A block issuer feature. #[packable(tag = BlockIssuerFeature::KIND)] BlockIssuer(BlockIssuerFeature), @@ -78,6 +83,7 @@ impl StorageScore for Feature { Self::Issuer(feature) => feature.storage_score(params), Self::Metadata(feature) => feature.storage_score(params), Self::Tag(feature) => feature.storage_score(params), + Self::NativeToken(feature) => feature.storage_score(params), Self::BlockIssuer(feature) => feature.storage_score(params), Self::Staking(feature) => feature.storage_score(params), } @@ -91,6 +97,7 @@ impl core::fmt::Debug for Feature { Self::Issuer(feature) => feature.fmt(f), Self::Metadata(feature) => feature.fmt(f), Self::Tag(feature) => feature.fmt(f), + Self::NativeToken(feature) => feature.fmt(f), Self::BlockIssuer(feature) => feature.fmt(f), Self::Staking(feature) => feature.fmt(f), } @@ -105,6 +112,7 @@ impl Feature { Self::Issuer(_) => IssuerFeature::KIND, Self::Metadata(_) => MetadataFeature::KIND, Self::Tag(_) => TagFeature::KIND, + Self::NativeToken(_) => NativeTokenFeature::KIND, Self::BlockIssuer(_) => BlockIssuerFeature::KIND, Self::Staking(_) => StakingFeature::KIND, } @@ -117,12 +125,13 @@ impl Feature { Self::Issuer(_) => FeatureFlags::ISSUER, Self::Metadata(_) => FeatureFlags::METADATA, Self::Tag(_) => FeatureFlags::TAG, + Self::NativeToken(_) => FeatureFlags::NATIVE_TOKEN, Self::BlockIssuer(_) => FeatureFlags::BLOCK_ISSUER, Self::Staking(_) => FeatureFlags::STAKING, } } - crate::def_is_as_opt!(Feature: Sender, Issuer, Metadata, Tag, BlockIssuer, Staking); + crate::def_is_as_opt!(Feature: Sender, Issuer, Metadata, Tag, NativeToken, BlockIssuer, Staking); } crate::create_bitflags!( @@ -134,6 +143,7 @@ crate::create_bitflags!( (ISSUER, IssuerFeature), (METADATA, MetadataFeature), (TAG, TagFeature), + (NATIVE_TOKEN, NativeTokenFeature), (BLOCK_ISSUER, BlockIssuerFeature), (STAKING, StakingFeature), ] @@ -230,6 +240,11 @@ impl Features { self.get(TagFeature::KIND).map(Feature::as_tag) } + /// Gets a reference to a [`NativeTokenFeature`], if any. + pub fn native_token(&self) -> Option<&NativeTokenFeature> { + self.get(NativeTokenFeature::KIND).map(Feature::as_native_token) + } + /// Gets a reference to a [`BlockIssuerFeature`], if any. pub fn block_issuer(&self) -> Option<&BlockIssuerFeature> { self.get(BlockIssuerFeature::KIND).map(Feature::as_block_issuer) @@ -284,6 +299,7 @@ mod test { FeatureFlags::ISSUER, FeatureFlags::METADATA, FeatureFlags::TAG, + FeatureFlags::NATIVE_TOKEN, FeatureFlags::BLOCK_ISSUER, FeatureFlags::STAKING ] diff --git a/sdk/src/types/block/output/feature/native_token.rs b/sdk/src/types/block/output/feature/native_token.rs new file mode 100644 index 0000000000..7bb52a0275 --- /dev/null +++ b/sdk/src/types/block/output/feature/native_token.rs @@ -0,0 +1,64 @@ +// Copyright 2023 IOTA Stiftung +// SPDX-License-Identifier: Apache-2.0 + +use derive_more::{Deref, From}; + +use crate::types::block::output::{NativeToken, StorageScore}; + +#[derive(Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Deref, From, packable::Packable)] +pub struct NativeTokenFeature(NativeToken); + +impl NativeTokenFeature { + /// The [`Feature`](crate::types::block::output::Feature) kind of [`NativeTokenFeature`]. + pub const KIND: u8 = 4; + + /// Creates a new [`NativeTokenFeature`]. + pub fn new(native_token: NativeToken) -> Self { + Self(native_token) + } + + /// Returns the inner native token. + pub fn native_token(&self) -> &NativeToken { + &self.0 + } +} + +impl StorageScore for NativeTokenFeature {} + +#[cfg(feature = "serde")] +mod dto { + use primitive_types::U256; + use serde::{Deserialize, Serialize}; + + use super::*; + use crate::types::block::{output::TokenId, Error}; + + #[derive(Serialize, Deserialize)] + struct NativeTokenFeatureDto { + #[serde(rename = "type")] + kind: u8, + #[serde(rename = "id")] + token_id: TokenId, + amount: U256, + } + + impl From<&NativeTokenFeature> for NativeTokenFeatureDto { + fn from(value: &NativeTokenFeature) -> Self { + Self { + kind: NativeTokenFeature::KIND, + token_id: value.token_id().clone(), + amount: value.amount(), + } + } + } + + impl TryFrom for NativeTokenFeature { + type Error = Error; + + fn try_from(value: NativeTokenFeatureDto) -> Result { + Ok(Self::new(NativeToken::new(value.token_id, value.amount)?)) + } + } + + crate::impl_serde_typed_dto!(NativeTokenFeature, NativeTokenFeatureDto, "native token feature"); +} diff --git a/sdk/src/types/block/output/feature/staking.rs b/sdk/src/types/block/output/feature/staking.rs index ee4c8d1fd5..9ab86dfd3d 100644 --- a/sdk/src/types/block/output/feature/staking.rs +++ b/sdk/src/types/block/output/feature/staking.rs @@ -21,7 +21,7 @@ pub struct StakingFeature { impl StakingFeature { /// The [`Feature`](crate::types::block::output::Feature) kind of [`StakingFeature`]. - pub const KIND: u8 = 5; + pub const KIND: u8 = 6; /// Creates a new [`StakingFeature`]. pub fn new( diff --git a/sdk/src/types/block/output/foundry.rs b/sdk/src/types/block/output/foundry.rs index 7978462879..0bec812f32 100644 --- a/sdk/src/types/block/output/foundry.rs +++ b/sdk/src/types/block/output/foundry.rs @@ -16,10 +16,10 @@ use crate::types::block::{ address::{AccountAddress, Address}, output::{ account::AccountId, - feature::{verify_allowed_features, Feature, FeatureFlags, Features}, + feature::{verify_allowed_features, Feature, FeatureFlags, Features, NativeTokenFeature}, unlock_condition::{verify_allowed_unlock_conditions, UnlockCondition, UnlockConditionFlags, UnlockConditions}, - ChainId, MinimumOutputAmount, NativeToken, NativeTokens, Output, OutputBuilderAmount, OutputId, - StateTransitionError, StateTransitionVerifier, StorageScore, StorageScoreParameters, TokenId, TokenScheme, + ChainId, MinimumOutputAmount, NativeToken, Output, OutputBuilderAmount, OutputId, StateTransitionError, + StateTransitionVerifier, StorageScore, StorageScoreParameters, TokenId, TokenScheme, }, payload::signed_transaction::{TransactionCapabilities, TransactionCapabilityFlag}, protocol::ProtocolParameters, @@ -84,7 +84,6 @@ impl FoundryId { #[must_use] pub struct FoundryOutputBuilder { amount: OutputBuilderAmount, - native_tokens: BTreeSet, serial_number: u32, token_scheme: TokenScheme, unlock_conditions: BTreeSet, @@ -111,7 +110,6 @@ impl FoundryOutputBuilder { fn new(amount: OutputBuilderAmount, serial_number: u32, token_scheme: TokenScheme) -> Self { Self { amount, - native_tokens: BTreeSet::new(), serial_number, token_scheme, unlock_conditions: BTreeSet::new(), @@ -134,20 +132,6 @@ impl FoundryOutputBuilder { self } - /// - #[inline(always)] - pub fn add_native_token(mut self, native_token: NativeToken) -> Self { - self.native_tokens.insert(native_token); - self - } - - /// - #[inline(always)] - pub fn with_native_tokens(mut self, native_tokens: impl IntoIterator) -> Self { - self.native_tokens = native_tokens.into_iter().collect(); - self - } - /// Sets the serial number to the provided value. #[inline(always)] pub fn with_serial_number(mut self, serial_number: u32) -> Self { @@ -219,6 +203,12 @@ impl FoundryOutputBuilder { self } + /// Sets the native token of the builder. + #[inline(always)] + pub fn with_native_token(self, native_token: impl Into) -> Self { + self.add_feature(NativeTokenFeature::from(native_token.into())) + } + /// Adds an immutable [`Feature`] to the builder, if one does not already exist of that type. #[inline(always)] pub fn add_immutable_feature(mut self, immutable_feature: impl Into) -> Self { @@ -266,7 +256,6 @@ impl FoundryOutputBuilder { let mut output = FoundryOutput { amount: 0, - native_tokens: NativeTokens::from_set(self.native_tokens)?, serial_number: self.serial_number, token_scheme: self.token_scheme, unlock_conditions, @@ -292,7 +281,6 @@ impl From<&FoundryOutput> for FoundryOutputBuilder { fn from(output: &FoundryOutput) -> Self { Self { amount: OutputBuilderAmount::Amount(output.amount), - native_tokens: output.native_tokens.iter().copied().collect(), serial_number: output.serial_number, token_scheme: output.token_scheme.clone(), unlock_conditions: output.unlock_conditions.iter().cloned().collect(), @@ -307,8 +295,6 @@ impl From<&FoundryOutput> for FoundryOutputBuilder { pub struct FoundryOutput { /// Amount of IOTA coins to deposit with this output. amount: u64, - /// Native tokens held by this output. - native_tokens: NativeTokens, /// The serial number of the foundry with respect to the controlling account. serial_number: u32, /// Define the supply control scheme of the native tokens controlled by the foundry. @@ -327,7 +313,7 @@ impl FoundryOutput { /// The set of allowed [`UnlockCondition`]s for a [`FoundryOutput`]. pub const ALLOWED_UNLOCK_CONDITIONS: UnlockConditionFlags = UnlockConditionFlags::IMMUTABLE_ACCOUNT_ADDRESS; /// The set of allowed [`Feature`]s for a [`FoundryOutput`]. - pub const ALLOWED_FEATURES: FeatureFlags = FeatureFlags::METADATA; + pub const ALLOWED_FEATURES: FeatureFlags = FeatureFlags::METADATA.union(FeatureFlags::NATIVE_TOKEN); /// The set of allowed immutable [`Feature`]s for a [`FoundryOutput`]. pub const ALLOWED_IMMUTABLE_FEATURES: FeatureFlags = FeatureFlags::METADATA; @@ -354,12 +340,6 @@ impl FoundryOutput { self.amount } - /// - #[inline(always)] - pub fn native_tokens(&self) -> &NativeTokens { - &self.native_tokens - } - /// #[inline(always)] pub fn serial_number(&self) -> u32 { @@ -384,6 +364,12 @@ impl FoundryOutput { &self.features } + /// + #[inline(always)] + pub fn native_token(&self) -> Option<&NativeToken> { + self.features.native_token().map(|f| f.native_token()) + } + /// #[inline(always)] pub fn immutable_features(&self) -> &Features { @@ -607,7 +593,6 @@ impl Packable for FoundryOutput { fn pack(&self, packer: &mut P) -> Result<(), P::Error> { self.amount.pack(packer)?; - self.native_tokens.pack(packer)?; self.serial_number.pack(packer)?; self.token_scheme.pack(packer)?; self.unlock_conditions.pack(packer)?; @@ -623,7 +608,6 @@ impl Packable for FoundryOutput { ) -> Result> { let amount = u64::unpack::<_, VERIFY>(unpacker, &()).coerce()?; - let native_tokens = NativeTokens::unpack::<_, VERIFY>(unpacker, &())?; let serial_number = u32::unpack::<_, VERIFY>(unpacker, &()).coerce()?; let token_scheme = TokenScheme::unpack::<_, VERIFY>(unpacker, &())?; @@ -648,7 +632,6 @@ impl Packable for FoundryOutput { Ok(Self { amount, - native_tokens, serial_number, token_scheme, unlock_conditions, @@ -685,8 +668,6 @@ pub(crate) mod dto { pub kind: u8, #[serde(with = "string")] pub amount: u64, - #[serde(skip_serializing_if = "Vec::is_empty", default)] - pub native_tokens: Vec, pub serial_number: u32, pub token_scheme: TokenScheme, pub unlock_conditions: Vec, @@ -701,7 +682,6 @@ pub(crate) mod dto { Self { kind: FoundryOutput::KIND, amount: value.amount(), - native_tokens: value.native_tokens().to_vec(), serial_number: value.serial_number(), token_scheme: value.token_scheme().clone(), unlock_conditions: value.unlock_conditions().iter().map(Into::into).collect::<_>(), @@ -718,10 +698,6 @@ pub(crate) mod dto { let mut builder: FoundryOutputBuilder = FoundryOutputBuilder::new_with_amount(dto.amount, dto.serial_number, dto.token_scheme); - for t in dto.native_tokens { - builder = builder.add_native_token(t); - } - for b in dto.features { builder = builder.add_feature(b); } @@ -742,7 +718,6 @@ pub(crate) mod dto { #[allow(clippy::too_many_arguments)] pub fn try_from_dtos( amount: OutputBuilderAmount, - native_tokens: Option>, serial_number: u32, token_scheme: TokenScheme, unlock_conditions: Vec, @@ -758,10 +733,6 @@ pub(crate) mod dto { } }; - if let Some(native_tokens) = native_tokens { - builder = builder.with_native_tokens(native_tokens); - } - let unlock_conditions = unlock_conditions .into_iter() .map(UnlockCondition::from) @@ -816,7 +787,6 @@ mod tests { let test_split_dto = |builder: FoundryOutputBuilder| { let output_split = FoundryOutput::try_from_dtos( builder.amount, - Some(builder.native_tokens.iter().copied().collect()), builder.serial_number, builder.token_scheme.clone(), builder.unlock_conditions.iter().map(Into::into).collect(), @@ -828,7 +798,7 @@ mod tests { }; let builder = FoundryOutput::build_with_amount(100, 123, rand_token_scheme()) - .add_native_token(NativeToken::new(TokenId::from(foundry_id), 1000).unwrap()) + .with_native_token(NativeToken::new(TokenId::from(foundry_id), 1000).unwrap()) .add_unlock_condition(ImmutableAccountAddressUnlockCondition::new(rand_account_address())) .add_immutable_feature(rand_metadata_feature()) .with_features(rand_allowed_features(FoundryOutput::ALLOWED_FEATURES)); @@ -839,7 +809,7 @@ mod tests { 123, rand_token_scheme(), ) - .add_native_token(NativeToken::new(TokenId::from(foundry_id), 1000).unwrap()) + .with_native_token(NativeToken::new(TokenId::from(foundry_id), 1000).unwrap()) .add_unlock_condition(ImmutableAccountAddressUnlockCondition::new(rand_account_address())) .add_immutable_feature(rand_metadata_feature()) .with_features(rand_allowed_features(FoundryOutput::ALLOWED_FEATURES)); diff --git a/sdk/src/types/block/output/mod.rs b/sdk/src/types/block/output/mod.rs index 9bbe5280c2..dc0ab45a58 100644 --- a/sdk/src/types/block/output/mod.rs +++ b/sdk/src/types/block/output/mod.rs @@ -193,18 +193,6 @@ impl Output { } } - /// Returns the native tokens of an [`Output`], if any. - pub fn native_tokens(&self) -> Option<&NativeTokens> { - match self { - Self::Basic(output) => Some(output.native_tokens()), - Self::Account(output) => Some(output.native_tokens()), - Self::Anchor(output) => Some(output.native_tokens()), - Self::Foundry(output) => Some(output.native_tokens()), - Self::Nft(output) => Some(output.native_tokens()), - Self::Delegation(_) => None, - } - } - /// Returns the unlock conditions of an [`Output`], if any. pub fn unlock_conditions(&self) -> Option<&UnlockConditions> { match self { @@ -229,6 +217,18 @@ impl Output { } } + /// Returns the native token of an [`Output`], if any. + pub fn native_token(&self) -> Option<&NativeToken> { + match self { + Self::Basic(output) => output.native_token(), + Self::Account(_) => None, + Self::Anchor(_) => None, + Self::Foundry(output) => output.native_token(), + Self::Nft(_) => None, + Self::Delegation(_) => None, + } + } + /// Returns the immutable features of an [`Output`], if any. pub fn immutable_features(&self) -> Option<&Features> { match self { diff --git a/sdk/src/types/block/output/native_token.rs b/sdk/src/types/block/output/native_token.rs index d2c430f718..5aee716319 100644 --- a/sdk/src/types/block/output/native_token.rs +++ b/sdk/src/types/block/output/native_token.rs @@ -12,10 +12,7 @@ use iterator_sorted::is_unique_sorted; use packable::{bounded::BoundedU8, prefix::BoxedSlicePrefix, Packable}; use primitive_types::U256; -use crate::types::block::{ - output::{FoundryId, StorageScore}, - Error, -}; +use crate::types::block::{output::FoundryId, Error}; crate::impl_id!( /// Unique identifier of a [`NativeToken`](crate::types::block::output::NativeToken). @@ -80,9 +77,6 @@ impl Ord for NativeToken { } } -// TODO remove when NT are a feature -impl StorageScore for NativeToken {} - #[inline] fn verify_amount(amount: &U256) -> Result<(), Error> { if VERIFY && amount.is_zero() { diff --git a/sdk/src/types/block/output/nft.rs b/sdk/src/types/block/output/nft.rs index 8c00c17128..0a48fe21ba 100644 --- a/sdk/src/types/block/output/nft.rs +++ b/sdk/src/types/block/output/nft.rs @@ -18,8 +18,8 @@ use crate::types::block::{ verify_allowed_unlock_conditions, AddressUnlockCondition, StorageDepositReturnUnlockCondition, UnlockCondition, UnlockConditionFlags, UnlockConditions, }, - BasicOutputBuilder, ChainId, MinimumOutputAmount, NativeToken, NativeTokens, Output, OutputBuilderAmount, - OutputId, StateTransitionError, StateTransitionVerifier, StorageScore, StorageScoreParameters, + BasicOutputBuilder, ChainId, MinimumOutputAmount, Output, OutputBuilderAmount, OutputId, StateTransitionError, + StateTransitionVerifier, StorageScore, StorageScoreParameters, }, payload::signed_transaction::TransactionCapabilityFlag, protocol::ProtocolParameters, @@ -61,7 +61,6 @@ impl From for Address { pub struct NftOutputBuilder { amount: OutputBuilderAmount, mana: u64, - native_tokens: BTreeSet, nft_id: NftId, unlock_conditions: BTreeSet, features: BTreeSet, @@ -84,7 +83,6 @@ impl NftOutputBuilder { Self { amount, mana: Default::default(), - native_tokens: BTreeSet::new(), nft_id, unlock_conditions: BTreeSet::new(), features: BTreeSet::new(), @@ -113,20 +111,6 @@ impl NftOutputBuilder { self } - /// - #[inline(always)] - pub fn add_native_token(mut self, native_token: NativeToken) -> Self { - self.native_tokens.insert(native_token); - self - } - - /// - #[inline(always)] - pub fn with_native_tokens(mut self, native_tokens: impl IntoIterator) -> Self { - self.native_tokens = native_tokens.into_iter().collect(); - self - } - /// Sets the NFT ID to the provided value. #[inline(always)] pub fn with_nft_id(mut self, nft_id: NftId) -> Self { @@ -283,7 +267,6 @@ impl NftOutputBuilder { let mut output = NftOutput { amount: 0, mana: self.mana, - native_tokens: NativeTokens::from_set(self.native_tokens)?, nft_id: self.nft_id, unlock_conditions, features, @@ -309,7 +292,6 @@ impl From<&NftOutput> for NftOutputBuilder { Self { amount: OutputBuilderAmount::Amount(output.amount), mana: output.mana, - native_tokens: output.native_tokens.iter().copied().collect(), nft_id: output.nft_id, unlock_conditions: output.unlock_conditions.iter().cloned().collect(), features: output.features.iter().cloned().collect(), @@ -325,8 +307,6 @@ pub struct NftOutput { amount: u64, /// Amount of stored Mana held by this output. mana: u64, - /// Native tokens held by this output. - native_tokens: NativeTokens, /// Unique identifier of the NFT. nft_id: NftId, /// Define how the output can be unlocked in a transaction. @@ -376,12 +356,6 @@ impl NftOutput { self.mana } - /// - #[inline(always)] - pub fn native_tokens(&self) -> &NativeTokens { - &self.native_tokens - } - /// #[inline(always)] pub fn nft_id(&self) -> &NftId { @@ -520,7 +494,6 @@ impl Packable for NftOutput { fn pack(&self, packer: &mut P) -> Result<(), P::Error> { self.amount.pack(packer)?; self.mana.pack(packer)?; - self.native_tokens.pack(packer)?; self.nft_id.pack(packer)?; self.unlock_conditions.pack(packer)?; self.features.pack(packer)?; @@ -537,7 +510,6 @@ impl Packable for NftOutput { let mana = u64::unpack::<_, VERIFY>(unpacker, &()).coerce()?; - let native_tokens = NativeTokens::unpack::<_, VERIFY>(unpacker, &())?; let nft_id = NftId::unpack::<_, VERIFY>(unpacker, &()).coerce()?; let unlock_conditions = UnlockConditions::unpack::<_, VERIFY>(unpacker, visitor)?; @@ -561,7 +533,6 @@ impl Packable for NftOutput { Ok(Self { amount, mana, - native_tokens, nft_id, unlock_conditions, features, @@ -605,8 +576,6 @@ pub(crate) mod dto { pub amount: u64, #[serde(with = "string")] pub mana: u64, - #[serde(skip_serializing_if = "Vec::is_empty", default)] - pub native_tokens: Vec, pub nft_id: NftId, pub unlock_conditions: Vec, #[serde(skip_serializing_if = "Vec::is_empty", default)] @@ -621,7 +590,6 @@ pub(crate) mod dto { kind: NftOutput::KIND, amount: value.amount(), mana: value.mana(), - native_tokens: value.native_tokens().to_vec(), nft_id: *value.nft_id(), unlock_conditions: value.unlock_conditions().iter().map(Into::into).collect::<_>(), features: value.features().to_vec(), @@ -636,7 +604,6 @@ pub(crate) mod dto { fn try_from(dto: NftOutputDto) -> Result { let mut builder = NftOutputBuilder::new_with_amount(dto.amount, dto.nft_id) .with_mana(dto.mana) - .with_native_tokens(dto.native_tokens) .with_features(dto.features) .with_immutable_features(dto.immutable_features); @@ -653,7 +620,6 @@ pub(crate) mod dto { pub fn try_from_dtos( amount: OutputBuilderAmount, mana: u64, - native_tokens: Option>, nft_id: &NftId, unlock_conditions: Vec, features: Option>, @@ -667,10 +633,6 @@ pub(crate) mod dto { } .with_mana(mana); - if let Some(native_tokens) = native_tokens { - builder = builder.with_native_tokens(native_tokens); - } - let unlock_conditions = unlock_conditions .into_iter() .map(UnlockCondition::from) @@ -696,13 +658,10 @@ mod tests { use super::*; use crate::types::block::{ - output::{dto::OutputDto, FoundryId, SimpleTokenScheme, TokenId}, + output::dto::OutputDto, protocol::protocol_parameters, - rand::{ - address::rand_account_address, - output::{ - feature::rand_allowed_features, rand_nft_output, unlock_condition::rand_address_unlock_condition, - }, + rand::output::{ + feature::rand_allowed_features, rand_nft_output, unlock_condition::rand_address_unlock_condition, }, }; @@ -716,12 +675,9 @@ mod tests { let output_ver = Output::try_from(dto).unwrap(); assert_eq!(&output, output_ver.as_nft()); - let foundry_id = FoundryId::build(&rand_account_address(), 0, SimpleTokenScheme::KIND); - let output_split = NftOutput::try_from_dtos( OutputBuilderAmount::Amount(output.amount()), output.mana(), - Some(output.native_tokens().to_vec()), output.nft_id(), output.unlock_conditions().iter().map(Into::into).collect(), Some(output.features().to_vec()), @@ -734,7 +690,6 @@ mod tests { let output_split = NftOutput::try_from_dtos( builder.amount, builder.mana, - Some(builder.native_tokens.iter().copied().collect()), &builder.nft_id, builder.unlock_conditions.iter().map(Into::into).collect(), Some(builder.features.iter().cloned().collect()), @@ -745,7 +700,6 @@ mod tests { }; let builder = NftOutput::build_with_amount(100, NftId::null()) - .add_native_token(NativeToken::new(TokenId::from(foundry_id), 1000).unwrap()) .add_unlock_condition(rand_address_unlock_condition()) .with_features(rand_allowed_features(NftOutput::ALLOWED_FEATURES)) .with_immutable_features(rand_allowed_features(NftOutput::ALLOWED_IMMUTABLE_FEATURES)); @@ -753,7 +707,6 @@ mod tests { let builder = NftOutput::build_with_minimum_amount(protocol_parameters.storage_score_parameters(), NftId::null()) - .add_native_token(NativeToken::new(TokenId::from(foundry_id), 1000).unwrap()) .add_unlock_condition(rand_address_unlock_condition()) .with_features(rand_allowed_features(NftOutput::ALLOWED_FEATURES)) .with_immutable_features(rand_allowed_features(NftOutput::ALLOWED_IMMUTABLE_FEATURES)); diff --git a/sdk/src/types/block/payload/signed_transaction/transaction.rs b/sdk/src/types/block/payload/signed_transaction/transaction.rs index 8b8bea5d33..2682350a3b 100644 --- a/sdk/src/types/block/payload/signed_transaction/transaction.rs +++ b/sdk/src/types/block/payload/signed_transaction/transaction.rs @@ -13,7 +13,7 @@ use crate::{ context_input::{ContextInput, CONTEXT_INPUT_COUNT_RANGE}, input::{Input, INPUT_COUNT_RANGE}, mana::{verify_mana_allotments_sum, ManaAllotment, ManaAllotments}, - output::{NativeTokens, Output, OUTPUT_COUNT_RANGE}, + output::{Output, OUTPUT_COUNT_RANGE}, payload::{ signed_transaction::{TransactionHash, TransactionId, TransactionSigningHash}, OptionalPayload, Payload, @@ -425,17 +425,16 @@ fn verify_payload_packable( fn verify_outputs(outputs: &[Output], visitor: &ProtocolParameters) -> Result<(), Error> { if VERIFY { let mut amount_sum: u64 = 0; - let mut native_tokens_count: u8 = 0; let mut chain_ids = HashSet::new(); for output in outputs.iter() { - let (amount, native_tokens, chain_id) = match output { - Output::Basic(output) => (output.amount(), Some(output.native_tokens()), None), - Output::Account(output) => (output.amount(), Some(output.native_tokens()), Some(output.chain_id())), - Output::Anchor(output) => (output.amount(), None, Some(output.chain_id())), - Output::Foundry(output) => (output.amount(), Some(output.native_tokens()), Some(output.chain_id())), - Output::Nft(output) => (output.amount(), Some(output.native_tokens()), Some(output.chain_id())), - Output::Delegation(output) => (output.amount(), None, Some(output.chain_id())), + let (amount, chain_id) = match output { + Output::Basic(output) => (output.amount(), None), + Output::Account(output) => (output.amount(), Some(output.chain_id())), + Output::Anchor(output) => (output.amount(), Some(output.chain_id())), + Output::Foundry(output) => (output.amount(), Some(output.chain_id())), + Output::Nft(output) => (output.amount(), Some(output.chain_id())), + Output::Delegation(output) => (output.amount(), Some(output.chain_id())), }; amount_sum = amount_sum @@ -447,16 +446,6 @@ fn verify_outputs(outputs: &[Output], visitor: &ProtocolPara return Err(Error::InvalidTransactionAmountSum(amount_sum as u128)); } - if let Some(native_tokens) = native_tokens { - native_tokens_count = native_tokens_count.checked_add(native_tokens.len() as u8).ok_or( - Error::InvalidTransactionNativeTokensCount(native_tokens_count as u16 + native_tokens.len() as u16), - )?; - - if native_tokens_count > NativeTokens::COUNT_MAX { - return Err(Error::InvalidTransactionNativeTokensCount(native_tokens_count as u16)); - } - } - if let Some(chain_id) = chain_id { if !chain_id.is_null() && !chain_ids.insert(chain_id) { return Err(Error::DuplicateOutputChain(chain_id)); diff --git a/sdk/src/types/block/rand/output/feature.rs b/sdk/src/types/block/rand/output/feature.rs index 85ebdbb374..57a8fdd609 100644 --- a/sdk/src/types/block/rand/output/feature.rs +++ b/sdk/src/types/block/rand/output/feature.rs @@ -6,12 +6,13 @@ use alloc::{collections::BTreeSet, vec::Vec}; use crate::types::block::{ output::feature::{ BlockIssuerFeature, BlockIssuerKey, BlockIssuerKeys, Ed25519BlockIssuerKey, Feature, FeatureFlags, - IssuerFeature, MetadataFeature, SenderFeature, StakingFeature, TagFeature, + IssuerFeature, MetadataFeature, NativeTokenFeature, SenderFeature, StakingFeature, TagFeature, }, rand::{ address::rand_address, bytes::rand_bytes, number::{rand_number, rand_number_range}, + output::rand_native_token, slot::{rand_epoch_index, rand_slot_index}, }, }; @@ -62,6 +63,11 @@ pub fn rand_block_issuer_keys(len: usize) -> BTreeSet { block_issuer_keys } +/// Generates a random [`NativeTokenFeature`]. +pub fn rand_native_token_feature() -> NativeTokenFeature { + NativeTokenFeature::new(rand_native_token()) +} + /// Generates a random [`BlockIssuerFeature`]. pub fn rand_block_issuer_feature() -> BlockIssuerFeature { BlockIssuerFeature::new( @@ -84,6 +90,7 @@ fn rand_feature_from_flag(flag: &FeatureFlags) -> Feature { FeatureFlags::ISSUER => Feature::Issuer(rand_issuer_feature()), FeatureFlags::METADATA => Feature::Metadata(rand_metadata_feature()), FeatureFlags::TAG => Feature::Tag(rand_tag_feature()), + FeatureFlags::NATIVE_TOKEN => Feature::NativeToken(rand_native_token_feature()), FeatureFlags::BLOCK_ISSUER => Feature::BlockIssuer(rand_block_issuer_feature()), FeatureFlags::STAKING => Feature::Staking(rand_staking_feature()), _ => unreachable!(), diff --git a/sdk/src/types/block/rand/output/mod.rs b/sdk/src/types/block/rand/output/mod.rs index 53b81781c7..f96ada2d25 100644 --- a/sdk/src/types/block/rand/output/mod.rs +++ b/sdk/src/types/block/rand/output/mod.rs @@ -5,12 +5,14 @@ pub mod feature; /// Module providing random output metadata generation utilities. pub mod metadata; +/// Module providing random native token generation utilities. +pub mod native_token; /// Module providing random unlock condition generation utilities. pub mod unlock_condition; use primitive_types::U256; -pub use self::metadata::rand_output_metadata; +pub use self::{metadata::rand_output_metadata, native_token::rand_native_token}; use crate::types::block::{ output::{ unlock_condition::ImmutableAccountAddressUnlockCondition, AccountId, AccountOutput, AnchorId, AnchorOutput, diff --git a/sdk/src/types/block/rand/output/native_token.rs b/sdk/src/types/block/rand/output/native_token.rs new file mode 100644 index 0000000000..06ef180063 --- /dev/null +++ b/sdk/src/types/block/rand/output/native_token.rs @@ -0,0 +1,14 @@ +// Copyright 2023 IOTA Stiftung +// SPDX-License-Identifier: Apache-2.0 + +use primitive_types::U256; + +use crate::types::block::{ + output::{NativeToken, TokenId}, + rand::{bytes::rand_bytes_array, number::rand_number}, +}; + +/// Generates a random [`NativeToken`]. +pub fn rand_native_token() -> NativeToken { + NativeToken::new(TokenId::from(rand_bytes_array()), U256::from(rand_number::() + 1)).unwrap() +} diff --git a/sdk/src/types/block/semantic.rs b/sdk/src/types/block/semantic.rs index 6359cee8e7..6f2b7f726b 100644 --- a/sdk/src/types/block/semantic.rs +++ b/sdk/src/types/block/semantic.rs @@ -258,19 +258,19 @@ impl<'a> SemanticValidationContext<'a> { pub fn validate(mut self) -> Result, Error> { // Validation of inputs. for ((output_id, consumed_output), unlock) in self.inputs.iter().zip(self.unlocks.iter()) { - let (conflict, amount, mana, consumed_native_tokens, unlock_conditions) = match consumed_output { + let (conflict, amount, mana, consumed_native_token, unlock_conditions) = match consumed_output { Output::Basic(output) => ( output.unlock(output_id, unlock, &mut self), output.amount(), output.mana(), - Some(output.native_tokens()), + output.native_token(), output.unlock_conditions(), ), Output::Account(output) => ( output.unlock(output_id, unlock, &mut self), output.amount(), output.mana(), - Some(output.native_tokens()), + None, output.unlock_conditions(), ), Output::Anchor(_) => return Err(Error::UnsupportedOutputKind(AnchorOutput::KIND)), @@ -278,14 +278,14 @@ impl<'a> SemanticValidationContext<'a> { output.unlock(output_id, unlock, &mut self), output.amount(), 0, - Some(output.native_tokens()), + output.native_token(), output.unlock_conditions(), ), Output::Nft(output) => ( output.unlock(output_id, unlock, &mut self), output.amount(), output.mana(), - Some(output.native_tokens()), + None, output.unlock_conditions(), ), Output::Delegation(output) => ( @@ -325,20 +325,21 @@ impl<'a> SemanticValidationContext<'a> { self.input_mana = self.input_mana.checked_add(mana).ok_or(Error::ConsumedManaOverflow)?; - if let Some(consumed_native_tokens) = consumed_native_tokens { - for native_token in consumed_native_tokens.iter() { - let native_token_amount = self.input_native_tokens.entry(*native_token.token_id()).or_default(); + if let Some(consumed_native_token) = consumed_native_token { + let native_token_amount = self + .input_native_tokens + .entry(*consumed_native_token.token_id()) + .or_default(); - *native_token_amount = native_token_amount - .checked_add(native_token.amount()) - .ok_or(Error::ConsumedNativeTokensAmountOverflow)?; - } + *native_token_amount = native_token_amount + .checked_add(consumed_native_token.amount()) + .ok_or(Error::ConsumedNativeTokensAmountOverflow)?; } } // Validation of outputs. for created_output in self.transaction.outputs() { - let (amount, mana, created_native_tokens, features) = match created_output { + let (amount, mana, created_native_token, features) = match created_output { Output::Basic(output) => { if let Some(address) = output.simple_deposit_address() { let amount = self.simple_deposits.entry(address.clone()).or_default(); @@ -351,29 +352,14 @@ impl<'a> SemanticValidationContext<'a> { ( output.amount(), output.mana(), - Some(output.native_tokens()), + output.native_token(), Some(output.features()), ) } - Output::Account(output) => ( - output.amount(), - output.mana(), - Some(output.native_tokens()), - Some(output.features()), - ), + Output::Account(output) => (output.amount(), output.mana(), None, Some(output.features())), Output::Anchor(_) => return Err(Error::UnsupportedOutputKind(AnchorOutput::KIND)), - Output::Foundry(output) => ( - output.amount(), - 0, - Some(output.native_tokens()), - Some(output.features()), - ), - Output::Nft(output) => ( - output.amount(), - output.mana(), - Some(output.native_tokens()), - Some(output.features()), - ), + Output::Foundry(output) => (output.amount(), 0, output.native_token(), Some(output.features())), + Output::Nft(output) => (output.amount(), output.mana(), None, Some(output.features())), Output::Delegation(output) => (output.amount(), 0, None, None), }; @@ -390,14 +376,14 @@ impl<'a> SemanticValidationContext<'a> { }) .filter_map(Address::as_restricted_opt); for address in addresses { - if created_output.native_tokens().map(|t| t.len()).unwrap_or_default() > 0 + if created_native_token.is_some() && !address.has_capability(AddressCapabilityFlag::OutputsWithNativeTokens) { // TODO: add a variant https://github.com/iotaledger/iota-sdk/issues/1430 return Ok(Some(TransactionFailureReason::SemanticValidationFailed)); } - if created_output.mana() > 0 && !address.has_capability(AddressCapabilityFlag::OutputsWithMana) { + if mana > 0 && !address.has_capability(AddressCapabilityFlag::OutputsWithMana) { // TODO: add a variant https://github.com/iotaledger/iota-sdk/issues/1430 return Ok(Some(TransactionFailureReason::SemanticValidationFailed)); } @@ -449,14 +435,15 @@ impl<'a> SemanticValidationContext<'a> { self.output_mana = self.output_mana.checked_add(mana).ok_or(Error::CreatedManaOverflow)?; - if let Some(created_native_tokens) = created_native_tokens { - for native_token in created_native_tokens.iter() { - let native_token_amount = self.output_native_tokens.entry(*native_token.token_id()).or_default(); + if let Some(created_native_token) = created_native_token { + let native_token_amount = self + .output_native_tokens + .entry(*created_native_token.token_id()) + .or_default(); - *native_token_amount = native_token_amount - .checked_add(native_token.amount()) - .ok_or(Error::CreatedNativeTokensAmountOverflow)?; - } + *native_token_amount = native_token_amount + .checked_add(created_native_token.amount()) + .ok_or(Error::CreatedNativeTokensAmountOverflow)?; } } diff --git a/sdk/src/wallet/mod.rs b/sdk/src/wallet/mod.rs index 258d5be150..ed5b3b6e67 100644 --- a/sdk/src/wallet/mod.rs +++ b/sdk/src/wallet/mod.rs @@ -60,7 +60,7 @@ pub use self::{ mint_nfts::MintNftParams, }, send::SendParams, - send_native_tokens::SendNativeTokensParams, + send_native_tokens::SendNativeTokenParams, send_nft::SendNftParams, }, prepare_output::{Assets, Features, OutputParams, ReturnStrategy, StorageDeposit, Unlocks}, diff --git a/sdk/src/wallet/operations/balance.rs b/sdk/src/wallet/operations/balance.rs index 1bd8e93d95..374e74cc90 100644 --- a/sdk/src/wallet/operations/balance.rs +++ b/sdk/src/wallet/operations/balance.rs @@ -73,8 +73,6 @@ where if !wallet_data.locked_outputs.contains(output_id) { total_storage_cost += storage_cost; } - // Add native tokens - total_native_tokens.add_native_tokens(output.native_tokens().clone())?; let account_id = output.account_id_non_null(output_id); balance.accounts.push(account_id); @@ -87,8 +85,11 @@ where if !wallet_data.locked_outputs.contains(output_id) { total_storage_cost += storage_cost; } - // Add native tokens - total_native_tokens.add_native_tokens(output.native_tokens().clone())?; + + // Add native token + if let Some(native_token) = output.native_token() { + total_native_tokens.add_native_token(native_token.clone())?; + } balance.foundries.push(output.id()); } @@ -112,12 +113,7 @@ where // Add storage deposit if output.is_basic() { balance.required_storage_deposit.basic += storage_cost; - if output - .native_tokens() - .map(|native_tokens| !native_tokens.is_empty()) - .unwrap_or(false) - && !wallet_data.locked_outputs.contains(output_id) - { + if output.native_token().is_some() && !wallet_data.locked_outputs.contains(output_id) { total_storage_cost += storage_cost; } } else if output.is_nft() { @@ -127,9 +123,9 @@ where } } - // Add native tokens - if let Some(native_tokens) = output.native_tokens() { - total_native_tokens.add_native_tokens(native_tokens.clone())?; + // Add native token + if let Some(native_token) = output.native_token() { + total_native_tokens.add_native_token(native_token.clone())?; } } else { // if we have multiple unlock conditions for basic or nft outputs, then we can't @@ -187,13 +183,9 @@ where // Add storage deposit if output.is_basic() { balance.required_storage_deposit.basic += storage_cost; - // Amount for basic outputs isn't added to total storage cost if there aren't - // native tokens, since we can - // spend it without burning. - if output - .native_tokens() - .map(|native_tokens| !native_tokens.is_empty()) - .unwrap_or(false) + // Amount for basic outputs isn't added to total storage cost if there aren't native + // tokens, since we can spend it without burning. + if output.native_token().is_some() && !wallet_data.locked_outputs.contains(output_id) { total_storage_cost += storage_cost; @@ -205,9 +197,9 @@ where } } - // Add native tokens - if let Some(native_tokens) = output.native_tokens() { - total_native_tokens.add_native_tokens(native_tokens.clone())?; + // Add native token + if let Some(native_token) = output.native_token() { + total_native_tokens.add_native_token(native_token.clone())?; } } else { // only add outputs that can't be locked now and at any point in the future @@ -267,8 +259,8 @@ where // Only check outputs that are in this network if output_data.network_id == network_id { locked_amount += output_data.output.amount(); - if let Some(native_tokens) = output_data.output.native_tokens() { - locked_native_tokens.add_native_tokens(native_tokens.clone())?; + if let Some(native_token) = output_data.output.native_token() { + locked_native_tokens.add_native_token(native_token.clone())?; } } } diff --git a/sdk/src/wallet/operations/output_claiming.rs b/sdk/src/wallet/operations/output_claiming.rs index a5d27a32f3..2db2b94d41 100644 --- a/sdk/src/wallet/operations/output_claiming.rs +++ b/sdk/src/wallet/operations/output_claiming.rs @@ -11,7 +11,7 @@ use crate::{ address::{Address, Ed25519Address}, output::{ unlock_condition::{AddressUnlockCondition, StorageDepositReturnUnlockCondition}, - BasicOutput, BasicOutputBuilder, NativeTokens, NativeTokensBuilder, NftOutputBuilder, Output, OutputId, + BasicOutput, BasicOutputBuilder, NativeTokensBuilder, NftOutputBuilder, Output, OutputId, }, slot::SlotIndex, }, @@ -86,9 +86,10 @@ where } } OutputsToClaim::NativeTokens => { - if !output_data.output.native_tokens().map(|n| n.is_empty()).unwrap_or(true) { - output_ids_to_claim.insert(output_data.output_id); - } + // TODO https://github.com/iotaledger/iota-sdk/issues/1633 + // if !output_data.output.native_tokens().map(|n| n.is_empty()).unwrap_or(true) { + // output_ids_to_claim.insert(output_data.output_id); + // } } OutputsToClaim::Nfts => { if output_data.output.is_nft() { @@ -246,13 +247,8 @@ where // check native tokens for output_data in &outputs_to_claim { - if let Some(native_tokens) = output_data.output.native_tokens() { - // Skip output if the max native tokens count would be exceeded - if get_new_native_token_count(&new_native_tokens, native_tokens)? > NativeTokens::COUNT_MAX.into() { - log::debug!("[OUTPUT_CLAIMING] skipping output to not exceed the max native tokens count"); - continue; - } - new_native_tokens.add_native_tokens(native_tokens.clone())?; + if let Some(native_token) = output_data.output.native_token() { + new_native_tokens.add_native_token(native_token.clone())?; } if let Some(sdr) = sdr_not_expired(&output_data.output, slot_index) { // for own output subtract the return amount @@ -282,8 +278,6 @@ where .with_minimum_amount(storage_score_params) .with_nft_id(nft_output.nft_id_non_null(&output_data.output_id)) .with_unlock_conditions([AddressUnlockCondition::new(wallet_address.clone())]) - // Set native tokens empty, we will collect them from all inputs later - .with_native_tokens([]) .finish_output()? }; @@ -308,7 +302,8 @@ where required_amount_for_nfts + BasicOutputBuilder::new_with_minimum_amount(storage_score_params) .add_unlock_condition(AddressUnlockCondition::new(Ed25519Address::null())) - .with_native_tokens(option_native_token.into_iter().flatten()) + // TODO https://github.com/iotaledger/iota-sdk/issues/1633 + // .with_native_tokens(option_native_token.into_iter().flatten()) .finish()? .amount() }; @@ -330,23 +325,15 @@ where required_amount = required_amount_for_nfts + BasicOutputBuilder::new_with_minimum_amount(storage_score_params) .add_unlock_condition(AddressUnlockCondition::new(Ed25519Address::null())) - .with_native_tokens(option_native_token.into_iter().flatten()) + // TODO https://github.com/iotaledger/iota-sdk/issues/1633 + // .with_native_token(option_native_token) .finish()? .amount(); if available_amount < required_amount { if !additional_inputs_used.contains(&output_data.output_id) { - if let Some(native_tokens) = output_data.output.native_tokens() { - // Skip input if the max native tokens count would be exceeded - if get_new_native_token_count(&new_native_tokens, native_tokens)? - > NativeTokens::COUNT_MAX.into() - { - log::debug!( - "[OUTPUT_CLAIMING] skipping input to not exceed the max native tokens count" - ); - continue; - } - new_native_tokens.add_native_tokens(native_tokens.clone())?; + if let Some(native_token) = output_data.output.native_token() { + new_native_tokens.add_native_token(native_token.clone())?; } available_amount += output_data.output.amount(); additional_inputs.push(output_data.output_id); @@ -380,7 +367,8 @@ where outputs_to_send.push( BasicOutputBuilder::new_with_amount(available_amount - required_amount_for_nfts) .add_unlock_condition(AddressUnlockCondition::new(wallet_address)) - .with_native_tokens(new_native_tokens.finish()?) + // TODO https://github.com/iotaledger/iota-sdk/issues/1633 + // .with_native_tokens(new_native_tokens.finish()?) .finish_output()?, ); } else if !new_native_tokens.finish()?.is_empty() { @@ -429,15 +417,3 @@ pub(crate) fn sdr_not_expired(output: &Output, slot_index: SlotIndex) -> Option< }) }) } - -// Helper function to calculate the native token count without duplicates, when new native tokens are added -// Might be possible to refactor the sections where it's used to remove the clones -pub(crate) fn get_new_native_token_count( - native_tokens_builder: &NativeTokensBuilder, - native_tokens: &NativeTokens, -) -> crate::wallet::Result { - // Clone to get the new native token count without actually modifying it - let mut native_tokens_count = native_tokens_builder.clone(); - native_tokens_count.add_native_tokens(native_tokens.clone())?; - Ok(native_tokens_count.len()) -} diff --git a/sdk/src/wallet/operations/output_consolidation.rs b/sdk/src/wallet/operations/output_consolidation.rs index b1854a12b0..1e8a3c8d97 100644 --- a/sdk/src/wallet/operations/output_consolidation.rs +++ b/sdk/src/wallet/operations/output_consolidation.rs @@ -10,17 +10,12 @@ use crate::{ types::block::{ address::{Address, Bech32Address}, input::INPUT_COUNT_MAX, - output::{ - unlock_condition::AddressUnlockCondition, BasicOutputBuilder, NativeTokens, NativeTokensBuilder, Output, - }, + output::{unlock_condition::AddressUnlockCondition, BasicOutputBuilder, NativeTokensBuilder, Output}, slot::SlotIndex, }, wallet::{ constants::DEFAULT_OUTPUT_CONSOLIDATION_THRESHOLD, - operations::{ - helpers::time::can_output_be_unlocked_now, output_claiming::get_new_native_token_count, - transaction::TransactionOptions, - }, + operations::{helpers::time::can_output_be_unlocked_now, transaction::TransactionOptions}, types::{OutputData, TransactionWithMetadata}, Result, Wallet, }, @@ -236,13 +231,8 @@ where let mut total_native_tokens = NativeTokensBuilder::new(); for output_data in outputs_to_consolidate.iter().take(max_inputs.into()) { - if let Some(native_tokens) = output_data.output.native_tokens() { - // Skip output if the max native tokens count would be exceeded - if get_new_native_token_count(&total_native_tokens, native_tokens)? > NativeTokens::COUNT_MAX.into() { - log::debug!("[OUTPUT_CONSOLIDATION] skipping output to not exceed the max native tokens count"); - continue; - } - total_native_tokens.add_native_tokens(native_tokens.clone())?; + if let Some(native_token) = output_data.output.native_token() { + total_native_tokens.add_native_token(native_token.clone())?; }; total_amount += output_data.output.amount(); @@ -256,7 +246,8 @@ where .map(|bech32| bech32.into_inner()) .unwrap_or_else(|| outputs_to_consolidate[0].address.clone()), )) - .with_native_tokens(total_native_tokens.finish()?) + // TODO https://github.com/iotaledger/iota-sdk/issues/1632 + // .with_native_tokens(total_native_tokens.finish()?) .finish_output()?]; let options = Some(TransactionOptions { diff --git a/sdk/src/wallet/operations/syncing/mod.rs b/sdk/src/wallet/operations/syncing/mod.rs index b5fccd6a82..2d3b616bd7 100644 --- a/sdk/src/wallet/operations/syncing/mod.rs +++ b/sdk/src/wallet/operations/syncing/mod.rs @@ -143,10 +143,10 @@ where if options.sync_native_token_foundries { let native_token_foundry_ids = outputs_data .iter() - .filter_map(|output| output.output.native_tokens()) - .flat_map(|native_tokens| { - native_tokens - .iter() + .filter_map(|output| { + output + .output + .native_token() .map(|native_token| FoundryId::from(*native_token.token_id())) }) .collect::>(); diff --git a/sdk/src/wallet/operations/transaction/high_level/send_native_tokens.rs b/sdk/src/wallet/operations/transaction/high_level/send_native_tokens.rs index a3dbc318b4..1ec3794083 100644 --- a/sdk/src/wallet/operations/transaction/high_level/send_native_tokens.rs +++ b/sdk/src/wallet/operations/transaction/high_level/send_native_tokens.rs @@ -11,7 +11,7 @@ use crate::{ address::{Bech32Address, ToBech32Ext}, output::{ unlock_condition::{AddressUnlockCondition, ExpirationUnlockCondition}, - BasicOutputBuilder, NativeToken, NativeTokens, TokenId, + BasicOutputBuilder, NativeToken, TokenId, }, slot::SlotIndex, }, @@ -26,13 +26,13 @@ use crate::{ /// Params for `send_native_tokens()` #[derive(Debug, Clone, Serialize, Deserialize, Getters)] #[serde(rename_all = "camelCase")] -pub struct SendNativeTokensParams { +pub struct SendNativeTokenParams { /// Bech32 encoded address #[getset(get = "pub")] address: Bech32Address, - /// Native tokens + /// Native token #[getset(get = "pub")] - native_tokens: Vec<(TokenId, U256)>, + native_token: (TokenId, U256), /// Bech32 encoded address return address, to which the storage deposit will be returned. Default will use the /// address of the wallet. #[getset(get = "pub")] @@ -43,15 +43,12 @@ pub struct SendNativeTokensParams { expiration: Option, } -impl SendNativeTokensParams { - /// Creates a new instance of [`SendNativeTokensParams`] - pub fn new( - address: impl ConvertTo, - native_tokens: impl IntoIterator, - ) -> Result { +impl SendNativeTokenParams { + /// Creates a new instance of [`SendNativeTokenParams`] + pub fn new(address: impl ConvertTo, native_token: (TokenId, U256)) -> Result { Ok(Self { address: address.convert()?, - native_tokens: native_tokens.into_iter().collect(), + native_token, return_address: None, expiration: None, }) @@ -87,12 +84,12 @@ where /// Calls [Account::send_outputs()](crate::wallet::Account::send_outputs) internally. The options may define the /// remainder value strategy or custom inputs. Note that the address needs to be bech32-encoded. /// ```ignore - /// let params = [SendNativeTokensParams { + /// let params = [SendNativeTokenParams { /// address: "rms1qpszqzadsym6wpppd6z037dvlejmjuke7s24hm95s9fg9vpua7vluaw60xu".to_string(), - /// native_tokens: vec![( + /// native_token: ( /// TokenId::from_str("08e68f7616cd4948efebc6a77c4f93aed770ac53860100000000000000000000000000000000")?, /// U256::from(50), - /// )], + /// ), /// ..Default::default() /// }]; /// @@ -102,7 +99,7 @@ where /// println!("Block sent: {}", block_id); /// } /// ``` - pub async fn send_native_tokens + Send>( + pub async fn send_native_tokens + Send>( &self, params: I, options: impl Into> + Send, @@ -118,7 +115,7 @@ where /// Prepares the transaction for /// [Account::send_native_tokens()](crate::wallet::Account::send_native_tokens). - pub async fn prepare_send_native_tokens + Send>( + pub async fn prepare_send_native_tokens + Send>( &self, params: I, options: impl Into> + Send, @@ -135,9 +132,9 @@ where let slot_index = self.client().get_slot_index().await?; let mut outputs = Vec::new(); - for SendNativeTokensParams { + for SendNativeTokenParams { address, - native_tokens, + native_token, return_address, expiration, } in params @@ -156,14 +153,7 @@ where .transpose()? .unwrap_or_else(|| default_return_address.clone()); - let native_tokens = NativeTokens::from_vec( - native_tokens - .into_iter() - .map(|(id, amount)| { - NativeToken::new(id, amount).map_err(|e| crate::wallet::Error::Client(Box::new(e.into()))) - }) - .collect::>>()?, - )?; + let native_token = NativeToken::new(native_token.0, native_token.1)?; let expiration_slot_index = expiration .map_or(slot_index + DEFAULT_EXPIRATION_SLOTS, |expiration_slot_index| { @@ -172,7 +162,7 @@ where outputs.push( BasicOutputBuilder::new_with_amount(0) - .with_native_tokens(native_tokens) + .with_native_token(native_token) .add_unlock_condition(AddressUnlockCondition::new(address)) .add_unlock_condition(ExpirationUnlockCondition::new( return_address.clone(), diff --git a/sdk/src/wallet/operations/transaction/prepare_output.rs b/sdk/src/wallet/operations/transaction/prepare_output.rs index afc93d3c2f..d34d8c1aa7 100644 --- a/sdk/src/wallet/operations/transaction/prepare_output.rs +++ b/sdk/src/wallet/operations/transaction/prepare_output.rs @@ -8,7 +8,7 @@ use crate::{ types::block::{ address::{Address, Bech32Address, Ed25519Address}, output::{ - feature::{IssuerFeature, MetadataFeature, SenderFeature, TagFeature}, + feature::{IssuerFeature, MetadataFeature, NativeTokenFeature, SenderFeature, TagFeature}, unlock_condition::{ AddressUnlockCondition, ExpirationUnlockCondition, StorageDepositReturnUnlockCondition, TimelockUnlockCondition, @@ -56,12 +56,6 @@ where .create_initial_output_builder(params.recipient_address, nft_id, storage_score_params) .await?; - if let Some(assets) = ¶ms.assets { - if let Some(native_tokens) = &assets.native_tokens { - first_output_builder = first_output_builder.with_native_tokens(native_tokens.clone()); - } - } - if let Some(features) = params.features { if let Some(tag) = features.tag { first_output_builder = first_output_builder.add_feature(TagFeature::new( @@ -85,6 +79,10 @@ where } first_output_builder = first_output_builder.add_immutable_feature(IssuerFeature::new(issuer)); } + + if let Some(native_token) = &features.native_token { + first_output_builder = first_output_builder.with_native_token(native_token.clone()); + } } if let Some(unlocks) = params.unlocks { @@ -312,7 +310,6 @@ pub struct OutputParams { #[derive(Debug, Default, Clone, Eq, PartialEq, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct Assets { - pub native_tokens: Option>, pub nft_id: Option, } @@ -322,6 +319,7 @@ pub struct Features { pub metadata: Option, pub issuer: Option, pub sender: Option, + pub native_token: Option, } #[derive(Debug, Default, Clone, Eq, PartialEq, Serialize, Deserialize)] @@ -418,15 +416,11 @@ impl OutputBuilder { } self } - fn with_native_tokens(mut self, native_tokens: impl IntoIterator) -> Self { - match self { - Self::Basic(b) => { - self = Self::Basic(b.with_native_tokens(native_tokens)); - } - Self::Nft(b) => { - self = Self::Nft(b.with_native_tokens(native_tokens)); - } + fn with_native_token(mut self, native_token: NativeToken) -> Self { + if let Self::Basic(b) = self { + self = Self::Basic(b.add_feature(NativeTokenFeature::from(native_token))); } + self } fn finish_output(self) -> Result { diff --git a/sdk/tests/client/input_selection/account_outputs.rs b/sdk/tests/client/input_selection/account_outputs.rs index 93469e6c4a..46be201a92 100644 --- a/sdk/tests/client/input_selection/account_outputs.rs +++ b/sdk/tests/client/input_selection/account_outputs.rs @@ -32,7 +32,6 @@ fn input_account_eq_output_account() { None, None, None, - None, )]); let outputs = build_outputs([Account( 1_000_000, @@ -41,7 +40,6 @@ fn input_account_eq_output_account() { None, None, None, - None, )]); let selected = InputSelection::new( @@ -69,7 +67,6 @@ fn transition_account_id_zero() { None, None, None, - None, )]); let account_id = AccountId::from(inputs[0].output_id()); let outputs = build_outputs([Account( @@ -79,7 +76,6 @@ fn transition_account_id_zero() { None, None, None, - None, )]); let selected = InputSelection::new( @@ -251,7 +247,6 @@ fn create_account() { None, None, None, - None, )]); let selected = InputSelection::new( @@ -288,7 +283,6 @@ fn burn_account() { None, None, None, - None, )]); let outputs = build_outputs([Basic( 2_000_000, @@ -382,7 +376,6 @@ fn missing_input_for_account_output() { None, None, None, - None, )]); let selected = InputSelection::new( @@ -406,15 +399,7 @@ fn missing_input_for_account_output_2() { let account_id_2 = AccountId::from_str(ACCOUNT_ID_2).unwrap(); let inputs = build_inputs([ - Account( - 2_000_000, - account_id_1, - BECH32_ADDRESS_ED25519_0, - None, - None, - None, - None, - ), + Account(2_000_000, account_id_1, BECH32_ADDRESS_ED25519_0, None, None, None), Basic(1_000_000, BECH32_ADDRESS_ED25519_0, None, None, None, None, None, None), ]); let outputs = build_outputs([Account( @@ -424,7 +409,6 @@ fn missing_input_for_account_output_2() { None, None, None, - None, )]); let selected = InputSelection::new( @@ -463,7 +447,6 @@ fn missing_input_for_account_output_but_created() { None, None, None, - None, )]); let selected = InputSelection::new( @@ -483,15 +466,7 @@ fn account_in_output_and_sender() { let account_id_1 = AccountId::from_str(ACCOUNT_ID_1).unwrap(); let inputs = build_inputs([ - Account( - 1_000_000, - account_id_1, - BECH32_ADDRESS_ED25519_0, - None, - None, - None, - None, - ), + Account(1_000_000, account_id_1, BECH32_ADDRESS_ED25519_0, None, None, None), Basic(1_000_000, BECH32_ADDRESS_ED25519_0, None, None, None, None, None, None), ]); let account_output = AccountOutputBuilder::from(inputs[0].output.as_account()) @@ -534,13 +509,11 @@ fn missing_ed25519_sender() { None, None, None, - None, )]); let outputs = build_outputs([Account( 1_000_000, account_id_2, BECH32_ADDRESS_ED25519_0, - None, Some(BECH32_ADDRESS_ED25519_1), None, None, @@ -580,7 +553,6 @@ fn missing_ed25519_issuer_created() { account_id_0, BECH32_ADDRESS_ED25519_0, None, - None, Some(BECH32_ADDRESS_ED25519_1), None, )]); @@ -609,7 +581,6 @@ fn missing_ed25519_issuer_transition() { account_id_1, BECH32_ADDRESS_ED25519_0, None, - None, Some(BECH32_ADDRESS_ED25519_1), None, )]); @@ -618,7 +589,6 @@ fn missing_ed25519_issuer_transition() { account_id_1, BECH32_ADDRESS_ED25519_0, None, - None, Some(BECH32_ADDRESS_ED25519_1), None, )]); @@ -646,13 +616,11 @@ fn missing_account_sender() { None, None, None, - None, )]); let outputs = build_outputs([Account( 1_000_000, account_id_2, BECH32_ADDRESS_ED25519_0, - None, Some(BECH32_ADDRESS_ACCOUNT_1), None, None, @@ -692,7 +660,6 @@ fn missing_account_issuer_created() { account_id_0, BECH32_ADDRESS_ED25519_0, None, - None, Some(BECH32_ADDRESS_ACCOUNT_1), None, )]); @@ -721,7 +688,6 @@ fn missing_account_issuer_transition() { account_id_2, BECH32_ADDRESS_ED25519_0, None, - None, Some(BECH32_ADDRESS_ACCOUNT_1), None, )]); @@ -730,7 +696,6 @@ fn missing_account_issuer_transition() { account_id_2, BECH32_ADDRESS_ED25519_0, None, - None, Some(BECH32_ADDRESS_ACCOUNT_1), None, )]); @@ -758,13 +723,11 @@ fn missing_nft_sender() { None, None, None, - None, )]); let outputs = build_outputs([Account( 1_000_000, account_id_2, BECH32_ADDRESS_ED25519_0, - None, Some(BECH32_ADDRESS_NFT_1), None, None, @@ -804,7 +767,6 @@ fn missing_nft_issuer_created() { account_id_0, BECH32_ADDRESS_ED25519_0, None, - None, Some(BECH32_ADDRESS_NFT_1), None, )]); @@ -833,7 +795,6 @@ fn missing_nft_issuer_transition() { account_id_1, BECH32_ADDRESS_ED25519_0, None, - None, Some(BECH32_ADDRESS_NFT_1), None, )]); @@ -842,7 +803,6 @@ fn missing_nft_issuer_transition() { account_id_1, BECH32_ADDRESS_ED25519_0, None, - None, Some(BECH32_ADDRESS_NFT_1), None, )]); @@ -864,15 +824,7 @@ fn increase_account_amount() { let account_id_1 = AccountId::from_str(ACCOUNT_ID_1).unwrap(); let inputs = build_inputs([ - Account( - 2_000_000, - account_id_1, - BECH32_ADDRESS_ED25519_0, - None, - None, - None, - None, - ), + Account(2_000_000, account_id_1, BECH32_ADDRESS_ED25519_0, None, None, None), Basic(1_000_000, BECH32_ADDRESS_ED25519_0, None, None, None, None, None, None), ]); let outputs = build_outputs([Account( @@ -882,7 +834,6 @@ fn increase_account_amount() { None, None, None, - None, )]); let selected = InputSelection::new( @@ -904,15 +855,7 @@ fn decrease_account_amount() { let account_id_1 = AccountId::from_str(ACCOUNT_ID_1).unwrap(); let inputs = build_inputs([ - Account( - 2_000_000, - account_id_1, - BECH32_ADDRESS_ED25519_0, - None, - None, - None, - None, - ), + Account(2_000_000, account_id_1, BECH32_ADDRESS_ED25519_0, None, None, None), Basic(1_000_000, BECH32_ADDRESS_ED25519_0, None, None, None, None, None, None), ]); let outputs = build_outputs([Account( @@ -922,7 +865,6 @@ fn decrease_account_amount() { None, None, None, - None, )]); let selected = InputSelection::new( @@ -956,15 +898,7 @@ fn prefer_basic_to_account() { let account_id_1 = AccountId::from_str(ACCOUNT_ID_1).unwrap(); let inputs = build_inputs([ - Account( - 1_000_000, - account_id_1, - BECH32_ADDRESS_ED25519_0, - None, - None, - None, - None, - ), + Account(1_000_000, account_id_1, BECH32_ADDRESS_ED25519_0, None, None, None), Basic(1_000_000, BECH32_ADDRESS_ED25519_0, None, None, None, None, None, None), ]); let outputs = build_outputs([Basic( @@ -998,15 +932,7 @@ fn take_amount_from_account_to_fund_basic() { let account_id_1 = AccountId::from_str(ACCOUNT_ID_1).unwrap(); let inputs = build_inputs([ - Account( - 2_000_000, - account_id_1, - BECH32_ADDRESS_ED25519_0, - None, - None, - None, - None, - ), + Account(2_000_000, account_id_1, BECH32_ADDRESS_ED25519_0, None, None, None), Basic(1_000_000, BECH32_ADDRESS_ED25519_0, None, None, None, None, None, None), ]); let outputs = build_outputs([Basic( @@ -1036,7 +962,6 @@ fn take_amount_from_account_to_fund_basic() { if !outputs.contains(output) { assert!(output.is_account()); assert_eq!(output.amount(), 1_800_000); - assert_eq!(output.as_account().native_tokens().len(), 0); assert_eq!(*output.as_account().account_id(), account_id_1); assert_eq!(output.as_account().unlock_conditions().len(), 1); assert_eq!(output.as_account().features().len(), 0); @@ -1056,15 +981,7 @@ fn account_burn_should_validate_account_sender() { let inputs = build_inputs([ Basic(2_000_000, BECH32_ADDRESS_ED25519_0, None, None, None, None, None, None), - Account( - 1_000_000, - account_id_1, - BECH32_ADDRESS_ED25519_0, - None, - None, - None, - None, - ), + Account(1_000_000, account_id_1, BECH32_ADDRESS_ED25519_0, None, None, None), ]); let outputs = build_outputs([Basic( 2_000_000, @@ -1110,15 +1027,7 @@ fn account_burn_should_validate_account_address() { let inputs = build_inputs([ Basic(2_000_000, BECH32_ADDRESS_ACCOUNT_1, None, None, None, None, None, None), - Account( - 1_000_000, - account_id_1, - BECH32_ADDRESS_ED25519_0, - None, - None, - None, - None, - ), + Account(1_000_000, account_id_1, BECH32_ADDRESS_ED25519_0, None, None, None), ]); let outputs = build_outputs([Basic( 2_000_000, @@ -1169,7 +1078,6 @@ fn transitioned_zero_account_id_no_longer_is_zero() { None, None, None, - None, )]); let outputs = build_outputs([Basic( 1_000_000, @@ -1198,7 +1106,6 @@ fn transitioned_zero_account_id_no_longer_is_zero() { if !outputs.contains(output) { assert!(output.is_account()); assert_eq!(output.amount(), 1_000_000); - assert_eq!(output.as_account().native_tokens().len(), 0); assert_ne!(*output.as_account().account_id(), account_id_0); assert_eq!(output.as_account().unlock_conditions().len(), 1); assert_eq!(output.as_account().features().len(), 0); @@ -1218,24 +1125,8 @@ fn two_accounts_required() { let account_id_2 = AccountId::from_str(ACCOUNT_ID_2).unwrap(); let inputs = build_inputs([ - Account( - 2_000_000, - account_id_1, - BECH32_ADDRESS_ED25519_0, - None, - None, - None, - None, - ), - Account( - 2_000_000, - account_id_2, - BECH32_ADDRESS_ED25519_0, - None, - None, - None, - None, - ), + Account(2_000_000, account_id_1, BECH32_ADDRESS_ED25519_0, None, None, None), + Account(2_000_000, account_id_2, BECH32_ADDRESS_ED25519_0, None, None, None), ]); let outputs = build_outputs([Basic( 3_000_000, @@ -1294,7 +1185,6 @@ fn state_controller_sender_required() { None, None, None, - None, )]); let outputs = build_outputs([Basic( 1_000_000, @@ -1333,18 +1223,9 @@ fn state_controller_sender_required_already_selected() { None, None, None, - None, )]); let outputs = build_outputs([ - Account( - 1_000_000, - account_id_1, - BECH32_ADDRESS_ED25519_0, - None, - None, - None, - None, - ), + Account(1_000_000, account_id_1, BECH32_ADDRESS_ED25519_0, None, None, None), Basic( 1_000_000, BECH32_ADDRESS_ED25519_0, @@ -1383,7 +1264,6 @@ fn state_transition_and_required() { None, None, None, - None, )]); let outputs = build_outputs([Account( 2_000_000, @@ -1392,7 +1272,6 @@ fn state_transition_and_required() { None, None, None, - None, )]); let selected = InputSelection::new( @@ -1421,7 +1300,6 @@ fn remainder_address_in_state_controller() { None, None, None, - None, )]); let outputs = build_outputs([Account( 1_000_000, @@ -1430,7 +1308,6 @@ fn remainder_address_in_state_controller() { None, None, None, - None, )]); let selected = InputSelection::new( diff --git a/sdk/tests/client/input_selection/basic_outputs.rs b/sdk/tests/client/input_selection/basic_outputs.rs index 712a6588b2..760799e75b 100644 --- a/sdk/tests/client/input_selection/basic_outputs.rs +++ b/sdk/tests/client/input_selection/basic_outputs.rs @@ -551,15 +551,7 @@ fn account_sender() { let inputs = build_inputs([ Basic(2_000_000, BECH32_ADDRESS_ED25519_0, None, None, None, None, None, None), Basic(2_000_000, BECH32_ADDRESS_ED25519_0, None, None, None, None, None, None), - Account( - 1_000_000, - account_id_1, - BECH32_ADDRESS_ED25519_0, - None, - None, - None, - None, - ), + Account(1_000_000, account_id_1, BECH32_ADDRESS_ED25519_0, None, None, None), Basic(2_000_000, BECH32_ADDRESS_ED25519_0, None, None, None, None, None, None), Basic(2_000_000, BECH32_ADDRESS_ED25519_0, None, None, None, None, None, None), ]); @@ -604,15 +596,7 @@ fn account_sender_zero_id() { let inputs = build_inputs([ Basic(2_000_000, BECH32_ADDRESS_ED25519_0, None, None, None, None, None, None), - Account( - 1_000_000, - account_id_0, - BECH32_ADDRESS_ED25519_0, - None, - None, - None, - None, - ), + Account(1_000_000, account_id_0, BECH32_ADDRESS_ED25519_0, None, None, None), ]); let account_id = AccountId::from(inputs[1].output_id()); let outputs = build_outputs([Basic( @@ -705,7 +689,6 @@ fn nft_sender() { None, None, None, - None, ), Basic(2_000_000, BECH32_ADDRESS_ED25519_0, None, None, None, None, None, None), Basic(2_000_000, BECH32_ADDRESS_ED25519_0, None, None, None, None, None, None), @@ -760,7 +743,6 @@ fn nft_sender_zero_id() { None, None, None, - None, ), ]); let nft_id = NftId::from(inputs[1].output_id()); @@ -1449,7 +1431,6 @@ fn restricted_nft() { None, None, None, - None, ), ]); let outputs = build_outputs([Basic( @@ -1487,15 +1468,7 @@ fn restricted_account() { let inputs = build_inputs([ Basic(2_000_000, &restricted_bech32, None, None, None, None, None, None), - Account( - 2_000_000, - account_id_1, - BECH32_ADDRESS_ED25519_0, - None, - None, - None, - None, - ), + Account(2_000_000, account_id_1, BECH32_ADDRESS_ED25519_0, None, None, None), ]); let outputs = build_outputs([Basic( diff --git a/sdk/tests/client/input_selection/burn.rs b/sdk/tests/client/input_selection/burn.rs index c89c1e26e1..f814fe2a8c 100644 --- a/sdk/tests/client/input_selection/burn.rs +++ b/sdk/tests/client/input_selection/burn.rs @@ -29,15 +29,7 @@ fn burn_account_present() { let account_id_1 = AccountId::from_str(ACCOUNT_ID_1).unwrap(); let inputs = build_inputs([ - Account( - 1_000_000, - account_id_1, - BECH32_ADDRESS_ED25519_0, - None, - None, - None, - None, - ), + Account(1_000_000, account_id_1, BECH32_ADDRESS_ED25519_0, None, None, None), Basic(1_000_000, BECH32_ADDRESS_ED25519_0, None, None, None, None, None, None), ]); let outputs = build_outputs([Basic( @@ -72,15 +64,7 @@ fn burn_account_present_and_required() { let account_id_1 = AccountId::from_str(ACCOUNT_ID_1).unwrap(); let inputs = build_inputs([ - Account( - 1_000_000, - account_id_1, - BECH32_ADDRESS_ED25519_0, - None, - None, - None, - None, - ), + Account(1_000_000, account_id_1, BECH32_ADDRESS_ED25519_0, None, None, None), Basic(1_000_000, BECH32_ADDRESS_ED25519_0, None, None, None, None, None, None), ]); let outputs = build_outputs([Basic( @@ -125,7 +109,6 @@ fn burn_account_id_zero() { None, None, None, - None, ), Basic(1_000_000, BECH32_ADDRESS_ED25519_0, None, None, None, None, None, None), ]); @@ -204,24 +187,8 @@ fn burn_accounts_present() { let account_id_2 = AccountId::from_str(ACCOUNT_ID_2).unwrap(); let inputs = build_inputs([ - Account( - 1_000_000, - account_id_1, - BECH32_ADDRESS_ED25519_0, - None, - None, - None, - None, - ), - Account( - 1_000_000, - account_id_2, - BECH32_ADDRESS_ED25519_0, - None, - None, - None, - None, - ), + Account(1_000_000, account_id_1, BECH32_ADDRESS_ED25519_0, None, None, None), + Account(1_000_000, account_id_2, BECH32_ADDRESS_ED25519_0, None, None, None), Basic(1_000_000, BECH32_ADDRESS_ED25519_0, None, None, None, None, None, None), ]); let outputs = build_outputs([Basic( @@ -255,27 +222,11 @@ fn burn_account_in_outputs() { let account_id_1 = AccountId::from_str(ACCOUNT_ID_1).unwrap(); let inputs = build_inputs([ - Account( - 1_000_000, - account_id_1, - BECH32_ADDRESS_ED25519_0, - None, - None, - None, - None, - ), + Account(1_000_000, account_id_1, BECH32_ADDRESS_ED25519_0, None, None, None), Basic(1_000_000, BECH32_ADDRESS_ED25519_0, None, None, None, None, None, None), ]); let outputs = build_outputs([ - Account( - 1_000_000, - account_id_1, - BECH32_ADDRESS_ED25519_0, - None, - None, - None, - None, - ), + Account(1_000_000, account_id_1, BECH32_ADDRESS_ED25519_0, None, None, None), Basic(1_000_000, BECH32_ADDRESS_ED25519_0, None, None, None, None, None, None), ]); @@ -309,7 +260,6 @@ fn burn_nft_present() { None, None, None, - None, ), Basic(1_000_000, BECH32_ADDRESS_ED25519_0, None, None, None, None, None, None), ]); @@ -354,7 +304,6 @@ fn burn_nft_present_and_required() { None, None, None, - None, ), Basic(1_000_000, BECH32_ADDRESS_ED25519_0, None, None, None, None, None, None), ]); @@ -391,15 +340,7 @@ fn burn_nft_id_zero() { let account_id_0 = AccountId::from_str(ACCOUNT_ID_0).unwrap(); let inputs = build_inputs([ - Account( - 1_000_000, - account_id_0, - BECH32_ADDRESS_ED25519_0, - None, - None, - None, - None, - ), + Account(1_000_000, account_id_0, BECH32_ADDRESS_ED25519_0, None, None, None), Basic(1_000_000, BECH32_ADDRESS_ED25519_0, None, None, None, None, None, None), ]); let outputs = build_outputs([Basic( @@ -486,7 +427,6 @@ fn burn_nfts_present() { None, None, None, - None, ), Nft( 1_000_000, @@ -497,7 +437,6 @@ fn burn_nfts_present() { None, None, None, - None, ), Basic(1_000_000, BECH32_ADDRESS_ED25519_0, None, None, None, None, None, None), ]); @@ -541,7 +480,6 @@ fn burn_nft_in_outputs() { None, None, None, - None, ), Basic(1_000_000, BECH32_ADDRESS_ED25519_0, None, None, None, None, None, None), ]); @@ -555,7 +493,6 @@ fn burn_nft_in_outputs() { None, None, None, - None, ), Basic(1_000_000, BECH32_ADDRESS_ED25519_0, None, None, None, None, None, None), ]); @@ -588,15 +525,7 @@ fn burn_foundry_present() { SimpleTokenScheme::new(0, 0, 10).unwrap(), None, ), - Account( - 1_000_000, - account_id_1, - BECH32_ADDRESS_ED25519_0, - None, - None, - None, - None, - ), + Account(1_000_000, account_id_1, BECH32_ADDRESS_ED25519_0, None, None, None), Basic(1_000_000, BECH32_ADDRESS_ED25519_0, None, None, None, None, None, None), ]); let outputs = build_outputs([Basic( @@ -636,7 +565,6 @@ fn burn_foundry_present() { )); } else if output.is_account() { assert_eq!(output.amount(), 1_000_000); - assert_eq!(output.as_account().native_tokens().len(), 0); assert_eq!(*output.as_account().account_id(), account_id_1); assert_eq!(output.as_account().unlock_conditions().len(), 1); assert_eq!(output.as_account().features().len(), 0); @@ -668,15 +596,7 @@ fn burn_foundry_absent() { .id(); let inputs = build_inputs([ - Account( - 1_000_000, - account_id_1, - BECH32_ADDRESS_ED25519_0, - None, - None, - None, - None, - ), + Account(1_000_000, account_id_1, BECH32_ADDRESS_ED25519_0, None, None, None), Basic(1_000_000, BECH32_ADDRESS_ED25519_0, None, None, None, None, None, None), ]); let outputs = build_outputs([Basic( @@ -725,15 +645,7 @@ fn burn_foundries_present() { SimpleTokenScheme::new(0, 0, 10).unwrap(), None, ), - Account( - 1_000_000, - account_id_1, - BECH32_ADDRESS_ED25519_0, - None, - None, - None, - None, - ), + Account(1_000_000, account_id_1, BECH32_ADDRESS_ED25519_0, None, None, None), ]); let outputs = build_outputs([Basic( 2_000_000, @@ -766,7 +678,6 @@ fn burn_foundries_present() { if !outputs.contains(output) { assert!(output.is_account()); assert_eq!(output.amount(), 1_000_000); - assert_eq!(output.as_account().native_tokens().len(), 0); assert_eq!(*output.as_account().account_id(), account_id_1); assert_eq!(output.as_account().unlock_conditions().len(), 1); assert_eq!(output.as_account().features().len(), 0); @@ -828,7 +739,7 @@ fn burn_native_tokens() { let inputs = build_inputs([Basic( 1_000_000, BECH32_ADDRESS_ED25519_0, - Some(vec![(TOKEN_ID_1, 100), (TOKEN_ID_2, 100)]), + Some((TOKEN_ID_1, 100), (TOKEN_ID_2, 100)), None, None, None, @@ -855,7 +766,7 @@ fn burn_native_tokens() { &selected.outputs[0], 1_000_000, BECH32_ADDRESS_ED25519_0, - Some(vec![(TOKEN_ID_1, 80), (TOKEN_ID_2, 70)]) + Some((TOKEN_ID_1, 80), (TOKEN_ID_2, 70)) )); } @@ -872,15 +783,7 @@ fn burn_foundry_and_its_account() { SimpleTokenScheme::new(0, 0, 10).unwrap(), None, ), - Account( - 1_000_000, - account_id_1, - BECH32_ADDRESS_ED25519_0, - None, - None, - None, - None, - ), + Account(1_000_000, account_id_1, BECH32_ADDRESS_ED25519_0, None, None, None), Basic(1_000_000, BECH32_ADDRESS_ED25519_0, None, None, None, None, None, None), ]); let outputs = build_outputs([Basic( diff --git a/sdk/tests/client/input_selection/expiration.rs b/sdk/tests/client/input_selection/expiration.rs index 7128f505b3..320316d9e4 100644 --- a/sdk/tests/client/input_selection/expiration.rs +++ b/sdk/tests/client/input_selection/expiration.rs @@ -680,15 +680,7 @@ fn expiration_expired_only_account_addresses() { Some((BECH32_ADDRESS_ACCOUNT_1, 50)), None, ), - Account( - 1_000_000, - account_id_1, - BECH32_ADDRESS_ED25519_0, - None, - None, - None, - None, - ), + Account(1_000_000, account_id_1, BECH32_ADDRESS_ED25519_0, None, None, None), ]); let outputs = build_outputs([Basic( @@ -728,7 +720,6 @@ fn one_nft_output_expiration_unexpired() { None, None, None, - None, Some((BECH32_ADDRESS_ED25519_0, 150)), None, )]); @@ -741,7 +732,6 @@ fn one_nft_output_expiration_unexpired() { None, None, None, - None, )]); let selected = InputSelection::new( @@ -770,7 +760,6 @@ fn one_nft_output_expiration_expired() { None, None, None, - None, Some((BECH32_ADDRESS_ED25519_0, 50)), None, )]); @@ -783,7 +772,6 @@ fn one_nft_output_expiration_expired() { None, None, None, - None, )]); let selected = InputSelection::new( diff --git a/sdk/tests/client/input_selection/foundry_outputs.rs b/sdk/tests/client/input_selection/foundry_outputs.rs index 2e0039f571..8e40b50d78 100644 --- a/sdk/tests/client/input_selection/foundry_outputs.rs +++ b/sdk/tests/client/input_selection/foundry_outputs.rs @@ -108,15 +108,7 @@ fn minted_native_tokens_in_new_remainder() { let inputs = build_inputs([ Basic(1_000_000, BECH32_ADDRESS_ED25519_0, None, None, None, None, None, None), - Account( - 1_000_000, - account_id_2, - BECH32_ADDRESS_ED25519_0, - None, - None, - None, - None, - ), + Account(1_000_000, account_id_2, BECH32_ADDRESS_ED25519_0, None, None, None), ]); let outputs = build_outputs([Foundry( 1_000_000, @@ -139,9 +131,10 @@ fn minted_native_tokens_in_new_remainder() { // Account next state + foundry + basic output with native tokens assert_eq!(selected.outputs.len(), 3); selected.outputs.iter().for_each(|output| { - if let Output::Basic(basic_output) = &output { + if let Output::Basic(_basic_output) = &output { // Basic output remainder has the minted native tokens - assert_eq!(basic_output.native_tokens().first().unwrap().amount().as_u32(), 10); + // TODO reenable when ISA supports NTs again + // assert_eq!(basic_output.native_token().unwrap().amount().as_u32(), 10); } }); } @@ -155,15 +148,7 @@ fn minted_native_tokens_in_provided_output() { let inputs = build_inputs([ Basic(2_000_000, BECH32_ADDRESS_ED25519_0, None, None, None, None, None, None), - Account( - 1_000_000, - account_id_2, - BECH32_ADDRESS_ED25519_0, - None, - None, - None, - None, - ), + Account(1_000_000, account_id_2, BECH32_ADDRESS_ED25519_0, None, None, None), ]); let outputs = build_outputs([ Foundry( @@ -176,7 +161,7 @@ fn minted_native_tokens_in_provided_output() { Basic( 1_000_000, BECH32_ADDRESS_ED25519_0, - Some(vec![(&token_id.to_string(), 100)]), + Some((&token_id.to_string(), 100)), None, None, None, @@ -213,10 +198,10 @@ fn melt_native_tokens() { account_id_1, 1, SimpleTokenScheme::new(10, 0, 10).unwrap(), - Some(vec![( + Some(( "0x0811111111111111111111111111111111111111111111111111111111111111110100000000", 10, - )]), + )), ), ]); let account_output = AccountOutputBuilder::new_with_amount(1_000_000, account_id_1) @@ -253,9 +238,10 @@ fn melt_native_tokens() { // Account next state + foundry + basic output with native tokens assert_eq!(selected.outputs.len(), 3); selected.outputs.iter().for_each(|output| { - if let Output::Basic(basic_output) = &output { + if let Output::Basic(_basic_output) = &output { // Basic output remainder has the remaining native tokens - assert_eq!(basic_output.native_tokens().first().unwrap().amount().as_u32(), 5); + // TODO reenable when ISA supports NTs again + // assert_eq!(basic_output.native_token().unwrap().amount().as_u32(), 5); } }); } @@ -266,7 +252,7 @@ fn destroy_foundry_with_account_state_transition() { let account_id_2 = AccountId::from_str(ACCOUNT_ID_2).unwrap(); let inputs = build_inputs([ - Account(50_300, account_id_2, BECH32_ADDRESS_ED25519_0, None, None, None, None), + Account(50_300, account_id_2, BECH32_ADDRESS_ED25519_0, None, None, None), Foundry( 52_800, account_id_2, @@ -303,15 +289,7 @@ fn destroy_foundry_with_account_burn() { let account_id_2 = AccountId::from_str(ACCOUNT_ID_2).unwrap(); let inputs = build_inputs([ - Account( - 1_000_000, - account_id_2, - BECH32_ADDRESS_ED25519_0, - None, - None, - None, - None, - ), + Account(1_000_000, account_id_2, BECH32_ADDRESS_ED25519_0, None, None, None), Foundry( 1_000_000, account_id_2, @@ -366,15 +344,7 @@ fn prefer_basic_to_foundry() { let account_id_1 = AccountId::from_str(ACCOUNT_ID_1).unwrap(); let inputs = build_inputs([ - Account( - 1_000_000, - account_id_1, - BECH32_ADDRESS_ED25519_0, - None, - None, - None, - None, - ), + Account(1_000_000, account_id_1, BECH32_ADDRESS_ED25519_0, None, None, None), Foundry( 1_000_000, account_id_1, @@ -463,7 +433,6 @@ fn simple_foundry_transition_basic_not_needed() { if !outputs.contains(output) { assert!(output.is_account()); assert_eq!(output.amount(), 2_000_000); - assert_eq!(output.as_account().native_tokens().len(), 0); assert_eq!(*output.as_account().account_id(), account_id_1); assert_eq!(output.as_account().unlock_conditions().len(), 1); assert_eq!(output.as_account().features().len(), 0); @@ -529,7 +498,6 @@ fn simple_foundry_transition_basic_not_needed_with_remainder() { if !outputs.contains(output) { if output.is_account() { assert_eq!(output.amount(), 2_000_000); - assert_eq!(output.as_account().native_tokens().len(), 0); assert_eq!(*output.as_account().account_id(), account_id_1); assert_eq!(output.as_account().unlock_conditions().len(), 1); assert_eq!(output.as_account().features().len(), 0); @@ -631,7 +599,7 @@ fn mint_and_burn_at_the_same_time() { account_id_1, 1, SimpleTokenScheme::new(100, 0, 200).unwrap(), - Some(vec![(&token_id.to_string(), 100)]), + Some((&token_id.to_string(), 100)), )]); let account_output = AccountOutputBuilder::new_with_amount(2_000_000, account_id_1) .add_unlock_condition(AddressUnlockCondition::new( @@ -651,7 +619,7 @@ fn mint_and_burn_at_the_same_time() { account_id_1, 1, SimpleTokenScheme::new(120, 0, 200).unwrap(), - Some(vec![(&token_id.to_string(), 110)]), + Some((&token_id.to_string(), 110)), )]); let selected = InputSelection::new( @@ -683,7 +651,7 @@ fn take_amount_from_account_and_foundry_to_fund_basic() { account_id_1, 1, SimpleTokenScheme::new(100, 0, 200).unwrap(), - Some(vec![(&token_id.to_string(), 100)]), + Some((&token_id.to_string(), 100)), ), ]); let account_output = AccountOutputBuilder::new_with_amount(2_000_000, account_id_1) @@ -737,15 +705,7 @@ fn create_native_token_but_burn_account() { let token_id = TokenId::from(foundry_id); let inputs = build_inputs([ - Account( - 2_000_000, - account_id_1, - BECH32_ADDRESS_ED25519_0, - None, - None, - None, - None, - ), + Account(2_000_000, account_id_1, BECH32_ADDRESS_ED25519_0, None, None, None), Foundry( 1_000_000, account_id_1, @@ -759,7 +719,7 @@ fn create_native_token_but_burn_account() { account_id_1, 1, SimpleTokenScheme::new(100, 0, 100).unwrap(), - Some(vec![(&token_id.to_string(), 100)]), + Some((&token_id.to_string(), 100)), )]); let selected = InputSelection::new( @@ -796,15 +756,7 @@ fn melted_tokens_not_provided() { let token_id_1 = TokenId::from(foundry_id); let inputs = build_inputs([ - Account( - 2_000_000, - account_id_1, - BECH32_ADDRESS_ED25519_0, - None, - None, - None, - None, - ), + Account(2_000_000, account_id_1, BECH32_ADDRESS_ED25519_0, None, None, None), Foundry( 1_000_000, account_id_1, @@ -846,15 +798,7 @@ fn burned_tokens_not_provided() { let token_id_1 = TokenId::from(foundry_id); let inputs = build_inputs([ - Account( - 2_000_000, - account_id_1, - BECH32_ADDRESS_ED25519_0, - None, - None, - None, - None, - ), + Account(2_000_000, account_id_1, BECH32_ADDRESS_ED25519_0, None, None, None), Foundry( 1_000_000, account_id_1, @@ -955,7 +899,7 @@ fn melt_and_burn_native_tokens() { account_id, 1, SimpleTokenScheme::new(1000, 0, 1000).unwrap(), - Some(vec![(&token_id.to_string(), 1000)]), + Some((&token_id.to_string(), 1000)), ), ]); let account_output = AccountOutputBuilder::new_with_amount(1_000_000, account_id) @@ -995,9 +939,10 @@ fn melt_and_burn_native_tokens() { assert_eq!(selected.outputs.len(), 3); // Account state index is increased selected.outputs.iter().for_each(|output| { - if let Output::Basic(basic_output) = &output { + if let Output::Basic(_basic_output) = &output { // Basic output remainder has the remaining native tokens - assert_eq!(basic_output.native_tokens().first().unwrap().amount().as_u32(), 421); + // TODO reenable when ISA supports NTs again + // assert_eq!(basic_output.native_token().unwrap().amount().as_u32(), 421); } }); } diff --git a/sdk/tests/client/input_selection/mod.rs b/sdk/tests/client/input_selection/mod.rs index ff9ee5e48e..6d1e837654 100644 --- a/sdk/tests/client/input_selection/mod.rs +++ b/sdk/tests/client/input_selection/mod.rs @@ -3,10 +3,12 @@ mod account_outputs; mod basic_outputs; -mod burn; +// TODO https://github.com/iotaledger/iota-sdk/issues/1631 +// mod burn; mod expiration; mod foundry_outputs; -mod native_tokens; +// TODO https://github.com/iotaledger/iota-sdk/issues/1631 +// mod native_tokens; mod nft_outputs; mod outputs; mod storage_deposit_return; diff --git a/sdk/tests/client/input_selection/native_tokens.rs b/sdk/tests/client/input_selection/native_tokens.rs index 6d3569f734..58ee7df991 100644 --- a/sdk/tests/client/input_selection/native_tokens.rs +++ b/sdk/tests/client/input_selection/native_tokens.rs @@ -23,7 +23,7 @@ fn two_native_tokens_one_needed() { Basic( 1_000_000, BECH32_ADDRESS_ED25519_0, - Some(vec![(TOKEN_ID_1, 100)]), + Some((TOKEN_ID_1, 100)), None, None, None, @@ -33,7 +33,7 @@ fn two_native_tokens_one_needed() { Basic( 1_000_000, BECH32_ADDRESS_ED25519_0, - Some(vec![(TOKEN_ID_1, 100), (TOKEN_ID_2, 100)]), + Some((TOKEN_ID_1, 100), (TOKEN_ID_2, 100)), None, None, None, @@ -44,7 +44,7 @@ fn two_native_tokens_one_needed() { let outputs = build_outputs([Basic( 1_000_000, BECH32_ADDRESS_ED25519_0, - Some(vec![(TOKEN_ID_1, 150)]), + Some((TOKEN_ID_1, 150)), None, None, None, @@ -84,7 +84,7 @@ fn two_native_tokens_both_needed_plus_remainder() { Basic( 1_000_000, BECH32_ADDRESS_ED25519_0, - Some(vec![(TOKEN_ID_1, 100)]), + Some((TOKEN_ID_1, 100)), None, None, None, @@ -94,7 +94,7 @@ fn two_native_tokens_both_needed_plus_remainder() { Basic( 1_000_000, BECH32_ADDRESS_ED25519_0, - Some(vec![(TOKEN_ID_1, 100), (TOKEN_ID_2, 100)]), + Some((TOKEN_ID_1, 100), (TOKEN_ID_2, 100)), None, None, None, @@ -131,7 +131,7 @@ fn two_native_tokens_both_needed_plus_remainder() { output, 1_000_000, BECH32_ADDRESS_ED25519_0, - Some(vec![(TOKEN_ID_1, 50)]) + Some((TOKEN_ID_1, 50)) )); } }); @@ -145,7 +145,7 @@ fn three_inputs_two_needed_plus_remainder() { Basic( 1_000_000, BECH32_ADDRESS_ED25519_0, - Some(vec![(TOKEN_ID_1, 100)]), + Some((TOKEN_ID_1, 100)), None, None, None, @@ -155,7 +155,7 @@ fn three_inputs_two_needed_plus_remainder() { Basic( 1_000_000, BECH32_ADDRESS_ED25519_0, - Some(vec![(TOKEN_ID_1, 100)]), + Some((TOKEN_ID_1, 100)), None, None, None, @@ -165,7 +165,7 @@ fn three_inputs_two_needed_plus_remainder() { Basic( 1_000_000, BECH32_ADDRESS_ED25519_0, - Some(vec![(TOKEN_ID_1, 100)]), + Some((TOKEN_ID_1, 100)), None, None, None, @@ -202,7 +202,7 @@ fn three_inputs_two_needed_plus_remainder() { output, 1_000_000, BECH32_ADDRESS_ED25519_0, - Some(vec![(TOKEN_ID_1, 80)]) + Some((TOKEN_ID_1, 80)) )); } }); @@ -216,7 +216,7 @@ fn three_inputs_two_needed_no_remainder() { Basic( 1_000_000, BECH32_ADDRESS_ED25519_0, - Some(vec![(TOKEN_ID_1, 100)]), + Some((TOKEN_ID_1, 100)), None, None, None, @@ -226,7 +226,7 @@ fn three_inputs_two_needed_no_remainder() { Basic( 1_000_000, BECH32_ADDRESS_ED25519_0, - Some(vec![(TOKEN_ID_1, 100)]), + Some((TOKEN_ID_1, 100)), None, None, None, @@ -236,7 +236,7 @@ fn three_inputs_two_needed_no_remainder() { Basic( 1_000_000, BECH32_ADDRESS_ED25519_0, - Some(vec![(TOKEN_ID_1, 100)]), + Some((TOKEN_ID_1, 100)), None, None, None, @@ -275,7 +275,7 @@ fn insufficient_native_tokens_one_input() { let inputs = build_inputs([Basic( 1_000_000, BECH32_ADDRESS_ED25519_0, - Some(vec![(TOKEN_ID_1, 100)]), + Some((TOKEN_ID_1, 100)), None, None, None, @@ -285,7 +285,7 @@ fn insufficient_native_tokens_one_input() { let outputs = build_outputs([Basic( 1_000_000, BECH32_ADDRESS_ED25519_0, - Some(vec![(TOKEN_ID_1, 150)]), + Some((TOKEN_ID_1, 150)), None, None, None, @@ -318,7 +318,7 @@ fn insufficient_native_tokens_three_inputs() { Basic( 1_000_000, BECH32_ADDRESS_ED25519_0, - Some(vec![(TOKEN_ID_1, 100)]), + Some((TOKEN_ID_1, 100)), None, None, None, @@ -328,7 +328,7 @@ fn insufficient_native_tokens_three_inputs() { Basic( 1_000_000, BECH32_ADDRESS_ED25519_0, - Some(vec![(TOKEN_ID_1, 100)]), + Some((TOKEN_ID_1, 100)), None, None, None, @@ -338,7 +338,7 @@ fn insufficient_native_tokens_three_inputs() { Basic( 1_000_000, BECH32_ADDRESS_ED25519_0, - Some(vec![(TOKEN_ID_1, 100)]), + Some((TOKEN_ID_1, 100)), None, None, None, @@ -349,7 +349,7 @@ fn insufficient_native_tokens_three_inputs() { let outputs = build_outputs([Basic( 1_000_000, BECH32_ADDRESS_ED25519_0, - Some(vec![(TOKEN_ID_1, 301)]), + Some((TOKEN_ID_1, 301)), None, None, None, @@ -381,7 +381,7 @@ fn burn_and_send_at_the_same_time() { let inputs = build_inputs([Basic( 2_000_000, BECH32_ADDRESS_ED25519_0, - Some(vec![(TOKEN_ID_1, 100), (TOKEN_ID_2, 100)]), + Some((TOKEN_ID_1, 100), (TOKEN_ID_2, 100)), None, None, None, @@ -418,7 +418,7 @@ fn burn_and_send_at_the_same_time() { output, 1_000_000, BECH32_ADDRESS_ED25519_0, - Some(vec![(TOKEN_ID_1, 40)]) + Some((TOKEN_ID_1, 40)) )); } }); @@ -431,7 +431,7 @@ fn burn_one_input_no_output() { let inputs = build_inputs([Basic( 1_000_000, BECH32_ADDRESS_ED25519_0, - Some(vec![(TOKEN_ID_1, 100)]), + Some((TOKEN_ID_1, 100)), None, None, None, @@ -455,7 +455,7 @@ fn burn_one_input_no_output() { &selected.outputs[0], 1_000_000, BECH32_ADDRESS_ED25519_0, - Some(vec![(TOKEN_ID_1, 50)]) + Some((TOKEN_ID_1, 50)) )); } @@ -467,7 +467,7 @@ fn burn_two_inputs_no_output() { Basic( 1_000_000, BECH32_ADDRESS_ED25519_0, - Some(vec![(TOKEN_ID_1, 100)]), + Some((TOKEN_ID_1, 100)), None, None, None, @@ -477,7 +477,7 @@ fn burn_two_inputs_no_output() { Basic( 1_000_000, BECH32_ADDRESS_ED25519_0, - Some(vec![(TOKEN_ID_1, 100), (TOKEN_ID_2, 100)]), + Some((TOKEN_ID_1, 100), (TOKEN_ID_2, 100)), None, None, None, @@ -503,7 +503,7 @@ fn burn_two_inputs_no_output() { &selected.outputs[0], 1_000_000, BECH32_ADDRESS_ED25519_0, - Some(vec![(TOKEN_ID_1, 50)]) + Some((TOKEN_ID_1, 50)) )); } @@ -514,7 +514,7 @@ fn burn_one_input_two_tokens_no_output() { let inputs = build_inputs([Basic( 1_000_000, BECH32_ADDRESS_ED25519_0, - Some(vec![(TOKEN_ID_1, 100), (TOKEN_ID_2, 100)]), + Some((TOKEN_ID_1, 100), (TOKEN_ID_2, 100)), None, None, None, @@ -550,7 +550,7 @@ fn multiple_native_tokens_1() { Basic( 1_000_000, BECH32_ADDRESS_ED25519_0, - Some(vec![(TOKEN_ID_1, 100)]), + Some((TOKEN_ID_1, 100)), None, None, None, @@ -560,7 +560,7 @@ fn multiple_native_tokens_1() { Basic( 1_000_000, BECH32_ADDRESS_ED25519_0, - Some(vec![(TOKEN_ID_1, 100), (TOKEN_ID_2, 100)]), + Some((TOKEN_ID_1, 100), (TOKEN_ID_2, 100)), None, None, None, @@ -571,7 +571,7 @@ fn multiple_native_tokens_1() { let outputs = build_outputs([Basic( 1_000_000, BECH32_ADDRESS_ED25519_0, - Some(vec![(TOKEN_ID_1, 100)]), + Some((TOKEN_ID_1, 100)), None, None, None, @@ -601,7 +601,7 @@ fn multiple_native_tokens_2() { Basic( 1_000_000, BECH32_ADDRESS_ED25519_0, - Some(vec![(TOKEN_ID_1, 100)]), + Some((TOKEN_ID_1, 100)), None, None, None, @@ -611,7 +611,7 @@ fn multiple_native_tokens_2() { Basic( 1_000_000, BECH32_ADDRESS_ED25519_0, - Some(vec![(TOKEN_ID_1, 100), (TOKEN_ID_2, 100)]), + Some((TOKEN_ID_1, 100), (TOKEN_ID_2, 100)), None, None, None, @@ -622,7 +622,7 @@ fn multiple_native_tokens_2() { let outputs = build_outputs([Basic( 1_000_000, BECH32_ADDRESS_ED25519_0, - Some(vec![(TOKEN_ID_1, 150)]), + Some((TOKEN_ID_1, 150)), None, None, None, @@ -658,7 +658,7 @@ fn multiple_native_tokens_3() { Basic( 1_000_000, BECH32_ADDRESS_ED25519_0, - Some(vec![(TOKEN_ID_1, 100)]), + Some((TOKEN_ID_1, 100)), None, None, None, @@ -668,7 +668,7 @@ fn multiple_native_tokens_3() { Basic( 1_000_000, BECH32_ADDRESS_ED25519_0, - Some(vec![(TOKEN_ID_1, 100), (TOKEN_ID_2, 100)]), + Some((TOKEN_ID_1, 100), (TOKEN_ID_2, 100)), None, None, None, @@ -703,7 +703,7 @@ fn multiple_native_tokens_3() { &selected.outputs[1], 1_000_000, BECH32_ADDRESS_ED25519_0, - Some(vec![(TOKEN_ID_2, 100)]) + Some((TOKEN_ID_2, 100)) )); } @@ -724,7 +724,7 @@ fn insufficient_native_tokens() { let outputs = build_outputs([Basic( 1_000_000, BECH32_ADDRESS_ED25519_0, - Some(vec![(TOKEN_ID_1, 150)]), + Some((TOKEN_ID_1, 150)), None, None, None, @@ -756,7 +756,7 @@ fn insufficient_native_tokens_2() { let inputs = build_inputs([Basic( 1_000_000, BECH32_ADDRESS_ED25519_0, - Some(vec![(TOKEN_ID_1, 100)]), + Some((TOKEN_ID_1, 100)), None, None, None, @@ -766,7 +766,7 @@ fn insufficient_native_tokens_2() { let outputs = build_outputs([Basic( 1_000_000, BECH32_ADDRESS_ED25519_0, - Some(vec![(TOKEN_ID_1, 150)]), + Some((TOKEN_ID_1, 150)), None, None, None, @@ -798,7 +798,7 @@ fn insufficient_native_tokens_2() { // let inputs = build_inputs([Basic( // 1_000_000, // BECH32_ADDRESS_ED25519_0, -// Some(vec![(TOKEN_ID_1, 100)]), +// Some((TOKEN_ID_1, 100)), // None, // None, // None, @@ -808,7 +808,7 @@ fn insufficient_native_tokens_2() { // let outputs = build_outputs([Basic( // 1_000_000, // BECH32_ADDRESS_ED25519_0, -// Some(vec![(TOKEN_ID_1, 50)]), +// Some((TOKEN_ID_1, 50)), // None, // None, // None, @@ -842,7 +842,7 @@ fn single_output_native_token_no_remainder() { let inputs = build_inputs([Basic( 1_000_000, BECH32_ADDRESS_ED25519_0, - Some(vec![(TOKEN_ID_1, 100)]), + Some((TOKEN_ID_1, 100)), None, None, None, @@ -852,7 +852,7 @@ fn single_output_native_token_no_remainder() { let outputs = build_outputs([Basic( 1_000_000, BECH32_ADDRESS_ED25519_0, - Some(vec![(TOKEN_ID_1, 100)]), + Some((TOKEN_ID_1, 100)), None, None, None, @@ -880,7 +880,7 @@ fn single_output_native_token_remainder_1() { let inputs = build_inputs([Basic( 1_000_000, BECH32_ADDRESS_ED25519_0, - Some(vec![(TOKEN_ID_1, 100)]), + Some((TOKEN_ID_1, 100)), None, None, None, @@ -890,7 +890,7 @@ fn single_output_native_token_remainder_1() { let outputs = build_outputs([Basic( 500_000, BECH32_ADDRESS_ED25519_0, - Some(vec![(TOKEN_ID_1, 50)]), + Some((TOKEN_ID_1, 50)), None, None, None, @@ -914,7 +914,7 @@ fn single_output_native_token_remainder_1() { &selected.outputs[0], 500_000, BECH32_ADDRESS_ED25519_0, - Some(vec![(TOKEN_ID_1, 50)]) + Some((TOKEN_ID_1, 50)) )); } @@ -925,7 +925,7 @@ fn single_output_native_token_remainder_2() { let inputs = build_inputs([Basic( 1_000_000, BECH32_ADDRESS_ED25519_0, - Some(vec![(TOKEN_ID_1, 100)]), + Some((TOKEN_ID_1, 100)), None, None, None, @@ -935,7 +935,7 @@ fn single_output_native_token_remainder_2() { let outputs = build_outputs([Basic( 500_000, BECH32_ADDRESS_ED25519_0, - Some(vec![(TOKEN_ID_1, 100)]), + Some((TOKEN_ID_1, 100)), None, None, None, @@ -971,7 +971,7 @@ fn two_basic_outputs_1() { Basic( 1_000_000, BECH32_ADDRESS_ED25519_0, - Some(vec![(TOKEN_ID_1, 100)]), + Some((TOKEN_ID_1, 100)), None, None, None, @@ -1017,7 +1017,7 @@ fn two_basic_outputs_1() { &selected.outputs[1], 500_000, BECH32_ADDRESS_ED25519_0, - Some(vec![(TOKEN_ID_1, 100)]), + Some((TOKEN_ID_1, 100)), )); } @@ -1029,7 +1029,7 @@ fn two_basic_outputs_2() { Basic( 1_000_000, BECH32_ADDRESS_ED25519_0, - Some(vec![(TOKEN_ID_1, 100)]), + Some((TOKEN_ID_1, 100)), None, None, None, @@ -1050,7 +1050,7 @@ fn two_basic_outputs_2() { let outputs = build_outputs([Basic( 500_000, BECH32_ADDRESS_ED25519_0, - Some(vec![(TOKEN_ID_1, 50)]), + Some((TOKEN_ID_1, 50)), None, None, None, @@ -1075,7 +1075,7 @@ fn two_basic_outputs_2() { &selected.outputs[1], 500_000, BECH32_ADDRESS_ED25519_0, - Some(vec![(TOKEN_ID_1, 50)]), + Some((TOKEN_ID_1, 50)), )); } @@ -1087,7 +1087,7 @@ fn two_basic_outputs_3() { Basic( 1_000_000, BECH32_ADDRESS_ED25519_0, - Some(vec![(TOKEN_ID_1, 100)]), + Some((TOKEN_ID_1, 100)), None, None, None, @@ -1145,7 +1145,7 @@ fn two_basic_outputs_4() { Basic( 1_000_000, BECH32_ADDRESS_ED25519_0, - Some(vec![(TOKEN_ID_1, 100)]), + Some((TOKEN_ID_1, 100)), None, None, None, @@ -1166,7 +1166,7 @@ fn two_basic_outputs_4() { let outputs = build_outputs([Basic( 500_000, BECH32_ADDRESS_ED25519_0, - Some(vec![(TOKEN_ID_1, 100)]), + Some((TOKEN_ID_1, 100)), None, None, None, @@ -1203,7 +1203,7 @@ fn two_basic_outputs_5() { Basic( 1_000_000, BECH32_ADDRESS_ED25519_0, - Some(vec![(TOKEN_ID_1, 100)]), + Some((TOKEN_ID_1, 100)), None, None, None, @@ -1224,7 +1224,7 @@ fn two_basic_outputs_5() { let outputs = build_outputs([Basic( 500_000, BECH32_ADDRESS_ED25519_0, - Some(vec![(TOKEN_ID_1, 100)]), + Some((TOKEN_ID_1, 100)), None, None, None, @@ -1261,7 +1261,7 @@ fn two_basic_outputs_6() { Basic( 1_000_000, BECH32_ADDRESS_ED25519_0, - Some(vec![(TOKEN_ID_1, 100)]), + Some((TOKEN_ID_1, 100)), None, None, None, @@ -1306,7 +1306,7 @@ fn two_basic_outputs_6() { &selected.outputs[1], 1_500_000, BECH32_ADDRESS_ED25519_0, - Some(vec![(TOKEN_ID_1, 50)]), + Some((TOKEN_ID_1, 50)), )); } @@ -1318,7 +1318,7 @@ fn two_basic_outputs_7() { Basic( 1_000_000, BECH32_ADDRESS_ED25519_0, - Some(vec![(TOKEN_ID_1, 100)]), + Some((TOKEN_ID_1, 100)), None, None, None, @@ -1375,7 +1375,7 @@ fn two_basic_outputs_8() { Basic( 1_000_000, BECH32_ADDRESS_ED25519_0, - Some(vec![(TOKEN_ID_1, 100)]), + Some((TOKEN_ID_1, 100)), None, None, None, @@ -1429,7 +1429,7 @@ fn two_basic_outputs_native_tokens_not_needed() { Basic( 1_000_000, BECH32_ADDRESS_ED25519_0, - Some(vec![(TOKEN_ID_1, 100)]), + Some((TOKEN_ID_1, 100)), None, None, None, diff --git a/sdk/tests/client/input_selection/nft_outputs.rs b/sdk/tests/client/input_selection/nft_outputs.rs index 909024f6f2..a73866c7dc 100644 --- a/sdk/tests/client/input_selection/nft_outputs.rs +++ b/sdk/tests/client/input_selection/nft_outputs.rs @@ -38,7 +38,6 @@ fn input_nft_eq_output_nft() { None, None, None, - None, )]); let outputs = build_outputs([Nft( 1_000_000, @@ -49,7 +48,6 @@ fn input_nft_eq_output_nft() { None, None, None, - None, )]); let selected = InputSelection::new( @@ -79,7 +77,6 @@ fn transition_nft_id_zero() { None, None, None, - None, )]); let nft_id = NftId::from(inputs[0].output_id()); let outputs = build_outputs([Nft( @@ -91,7 +88,6 @@ fn transition_nft_id_zero() { None, None, None, - None, )]); let selected = InputSelection::new( @@ -219,7 +215,6 @@ fn mint_nft() { None, None, None, - None, )]); let selected = InputSelection::new( @@ -258,7 +253,6 @@ fn burn_nft() { None, None, None, - None, )]); let outputs = build_outputs([Basic( 2_000_000, @@ -354,7 +348,6 @@ fn missing_input_for_nft_output() { None, None, None, - None, )]); let selected = InputSelection::new( @@ -395,7 +388,6 @@ fn missing_input_for_nft_output_but_created() { None, None, None, - None, )]); let selected = InputSelection::new( @@ -424,7 +416,6 @@ fn nft_in_output_and_sender() { None, None, None, - None, ), Basic(1_000_000, BECH32_ADDRESS_ED25519_0, None, None, None, None, None, None), ]); @@ -438,7 +429,6 @@ fn nft_in_output_and_sender() { None, None, None, - None, ), Basic( 1_000_000, @@ -487,13 +477,11 @@ fn missing_ed25519_sender() { None, None, None, - None, )]); let outputs = build_outputs([Nft( 1_000_000, nft_id_2, BECH32_ADDRESS_ED25519_0, - None, Some(BECH32_ADDRESS_ED25519_1), None, None, @@ -535,7 +523,6 @@ fn missing_ed25519_issuer_created() { nft_id_0, BECH32_ADDRESS_ED25519_0, None, - None, Some(BECH32_ADDRESS_ED25519_1), None, None, @@ -566,7 +553,6 @@ fn missing_ed25519_issuer_transition() { nft_id_1, BECH32_ADDRESS_ED25519_0, None, - None, Some(BECH32_ADDRESS_ED25519_1), None, None, @@ -577,7 +563,6 @@ fn missing_ed25519_issuer_transition() { nft_id_1, BECH32_ADDRESS_ED25519_0, None, - None, Some(BECH32_ADDRESS_ED25519_1), None, None, @@ -609,13 +594,11 @@ fn missing_account_sender() { None, None, None, - None, )]); let outputs = build_outputs([Nft( 1_000_000, nft_id_2, BECH32_ADDRESS_ED25519_0, - None, Some(BECH32_ADDRESS_ACCOUNT_1), None, None, @@ -657,7 +640,6 @@ fn missing_account_issuer_created() { nft_id_0, BECH32_ADDRESS_ED25519_0, None, - None, Some(BECH32_ADDRESS_ACCOUNT_1), None, None, @@ -688,7 +670,6 @@ fn missing_account_issuer_transition() { nft_id_2, BECH32_ADDRESS_ED25519_0, None, - None, Some(BECH32_ADDRESS_ACCOUNT_1), None, None, @@ -699,7 +680,6 @@ fn missing_account_issuer_transition() { nft_id_2, BECH32_ADDRESS_ED25519_0, None, - None, Some(BECH32_ADDRESS_ACCOUNT_1), None, None, @@ -731,13 +711,11 @@ fn missing_nft_sender() { None, None, None, - None, )]); let outputs = build_outputs([Nft( 1_000_000, nft_id_2, BECH32_ADDRESS_ED25519_0, - None, Some(BECH32_ADDRESS_NFT_1), None, None, @@ -779,7 +757,6 @@ fn missing_nft_issuer_created() { nft_id_0, BECH32_ADDRESS_ED25519_0, None, - None, Some(BECH32_ADDRESS_NFT_1), None, None, @@ -810,7 +787,6 @@ fn missing_nft_issuer_transition() { nft_id_2, BECH32_ADDRESS_ED25519_0, None, - None, Some(BECH32_ADDRESS_NFT_1), None, None, @@ -821,7 +797,6 @@ fn missing_nft_issuer_transition() { nft_id_2, BECH32_ADDRESS_ED25519_0, None, - None, Some(BECH32_ADDRESS_NFT_1), None, None, @@ -854,7 +829,6 @@ fn increase_nft_amount() { None, None, None, - None, ), Basic(1_000_000, BECH32_ADDRESS_ED25519_0, None, None, None, None, None, None), ]); @@ -867,7 +841,6 @@ fn increase_nft_amount() { None, None, None, - None, )]); let selected = InputSelection::new( @@ -898,7 +871,6 @@ fn decrease_nft_amount() { None, None, None, - None, ), Basic(1_000_000, BECH32_ADDRESS_ED25519_0, None, None, None, None, None, None), ]); @@ -911,7 +883,6 @@ fn decrease_nft_amount() { None, None, None, - None, )]); let selected = InputSelection::new( @@ -954,7 +925,6 @@ fn prefer_basic_to_nft() { None, None, None, - None, ), Basic(1_000_000, BECH32_ADDRESS_ED25519_0, None, None, None, None, None, None), ]); @@ -998,7 +968,6 @@ fn take_amount_from_nft_to_fund_basic() { None, None, None, - None, ), Basic(1_000_000, BECH32_ADDRESS_ED25519_0, None, None, None, None, None, None), ]); @@ -1029,7 +998,6 @@ fn take_amount_from_nft_to_fund_basic() { if !outputs.contains(output) { assert!(output.is_nft()); assert_eq!(output.amount(), 1_800_000); - assert_eq!(output.as_nft().native_tokens().len(), 0); assert_eq!(output.as_nft().unlock_conditions().len(), 1); assert_eq!(output.as_nft().features().len(), 0); assert_eq!( @@ -1056,7 +1024,6 @@ fn nft_burn_should_validate_nft_sender() { None, None, None, - None, ), ]); let outputs = build_outputs([Basic( @@ -1100,7 +1067,6 @@ fn nft_burn_should_validate_nft_address() { None, None, None, - None, ), ]); let outputs = build_outputs([Basic( @@ -1142,7 +1108,6 @@ fn transitioned_zero_nft_id_no_longer_is_zero() { None, None, None, - None, )]); let outputs = build_outputs([Basic( 1_000_000, @@ -1172,7 +1137,6 @@ fn transitioned_zero_nft_id_no_longer_is_zero() { assert!(output.is_nft()); assert_eq!(output.amount(), 1_000_000); assert_ne!(*output.as_nft().nft_id(), nft_id_0); - assert_eq!(output.as_nft().native_tokens().len(), 0); assert_eq!(output.as_nft().unlock_conditions().len(), 1); assert_eq!(output.as_nft().features().len(), 0); assert_eq!( diff --git a/sdk/tests/client/input_selection/outputs.rs b/sdk/tests/client/input_selection/outputs.rs index 02697eadb1..4977a0eb72 100644 --- a/sdk/tests/client/input_selection/outputs.rs +++ b/sdk/tests/client/input_selection/outputs.rs @@ -81,7 +81,6 @@ fn no_outputs_but_burn() { None, None, None, - None, )]); let outputs = Vec::new(); diff --git a/sdk/tests/client/input_selection/storage_deposit_return.rs b/sdk/tests/client/input_selection/storage_deposit_return.rs index d74121fef7..55e8fb23dc 100644 --- a/sdk/tests/client/input_selection/storage_deposit_return.rs +++ b/sdk/tests/client/input_selection/storage_deposit_return.rs @@ -504,15 +504,7 @@ fn sdruc_required_non_ed25519_in_address_unlock() { None, None, ), - Account( - 1_000_000, - account_id_1, - BECH32_ADDRESS_ED25519_0, - None, - None, - None, - None, - ), + Account(1_000_000, account_id_1, BECH32_ADDRESS_ED25519_0, None, None, None), ]); let outputs = build_outputs([Basic( 1_000_000, @@ -566,15 +558,7 @@ fn useless_sdruc_non_ed25519_in_address_unlock() { None, ), Basic(1_000_000, BECH32_ADDRESS_ACCOUNT_1, None, None, None, None, None, None), - Account( - 1_000_000, - account_id_1, - BECH32_ADDRESS_ED25519_0, - None, - None, - None, - None, - ), + Account(1_000_000, account_id_1, BECH32_ADDRESS_ED25519_0, None, None, None), ]); let outputs = build_outputs([Basic( 1_000_000, diff --git a/sdk/tests/client/mod.rs b/sdk/tests/client/mod.rs index d01b8a394c..8edc869ebf 100644 --- a/sdk/tests/client/mod.rs +++ b/sdk/tests/client/mod.rs @@ -15,11 +15,7 @@ mod node_api; mod secret_manager; mod signing; -use std::{ - collections::{BTreeSet, HashMap}, - hash::Hash, - str::FromStr, -}; +use std::{collections::HashMap, hash::Hash, str::FromStr}; use crypto::keys::bip44::Bip44; use iota_sdk::{ @@ -32,8 +28,8 @@ use iota_sdk::{ AddressUnlockCondition, ExpirationUnlockCondition, ImmutableAccountAddressUnlockCondition, StorageDepositReturnUnlockCondition, TimelockUnlockCondition, UnlockCondition, }, - AccountId, AccountOutputBuilder, BasicOutputBuilder, FoundryOutputBuilder, NativeToken, NativeTokens, - NftId, NftOutputBuilder, Output, OutputId, OutputMetadata, SimpleTokenScheme, TokenId, TokenScheme, + AccountId, AccountOutputBuilder, BasicOutputBuilder, FoundryOutputBuilder, NativeToken, NftId, + NftOutputBuilder, Output, OutputId, OutputMetadata, SimpleTokenScheme, TokenId, TokenScheme, }, rand::{block::rand_block_id, slot::rand_slot_commitment_id, transaction::rand_transaction_id}, }, @@ -63,7 +59,7 @@ enum Build<'a> { Basic( u64, &'a str, - Option>, + Option<(&'a str, u64)>, Option<&'a str>, Option<(&'a str, u64)>, Option, @@ -74,29 +70,20 @@ enum Build<'a> { u64, NftId, &'a str, - Option>, Option<&'a str>, Option<&'a str>, Option<(&'a str, u64)>, Option<(&'a str, u32)>, Option, ), - Account( - u64, - AccountId, - &'a str, - Option>, - Option<&'a str>, - Option<&'a str>, - Option, - ), - Foundry(u64, AccountId, u32, SimpleTokenScheme, Option>), + Account(u64, AccountId, &'a str, Option<&'a str>, Option<&'a str>, Option), + Foundry(u64, AccountId, u32, SimpleTokenScheme, Option<(&'a str, u64)>), } fn build_basic_output( amount: u64, bech32_address: Bech32Address, - native_tokens: Option>, + native_token: Option<(&str, u64)>, bech32_sender: Option, sdruc: Option<(Bech32Address, u64)>, timelock: Option, @@ -105,12 +92,8 @@ fn build_basic_output( let mut builder = BasicOutputBuilder::new_with_amount(amount).add_unlock_condition(AddressUnlockCondition::new(bech32_address)); - if let Some(native_tokens) = native_tokens { - builder = builder.with_native_tokens( - native_tokens - .into_iter() - .map(|(id, amount)| NativeToken::new(TokenId::from_str(id).unwrap(), amount).unwrap()), - ); + if let Some((id, amount)) = native_token { + builder = builder.with_native_token(NativeToken::new(TokenId::from_str(id).unwrap(), amount).unwrap()); } if let Some(bech32_sender) = bech32_sender { @@ -137,7 +120,6 @@ fn build_nft_output( amount: u64, nft_id: NftId, bech32_address: Bech32Address, - native_tokens: Option>, bech32_sender: Option, bech32_issuer: Option, sdruc: Option<(Bech32Address, u64)>, @@ -146,14 +128,6 @@ fn build_nft_output( let mut builder = NftOutputBuilder::new_with_amount(amount, nft_id) .add_unlock_condition(AddressUnlockCondition::new(bech32_address)); - if let Some(native_tokens) = native_tokens { - builder = builder.with_native_tokens( - native_tokens - .into_iter() - .map(|(id, amount)| NativeToken::new(TokenId::from_str(id).unwrap(), amount).unwrap()), - ); - } - if let Some(bech32_sender) = bech32_sender { builder = builder.add_feature(SenderFeature::new(bech32_sender)); } @@ -178,21 +152,12 @@ fn build_account_output( amount: u64, account_id: AccountId, address: Bech32Address, - native_tokens: Option>, bech32_sender: Option, bech32_issuer: Option, ) -> Output { let mut builder = AccountOutputBuilder::new_with_amount(amount, account_id) .add_unlock_condition(AddressUnlockCondition::new(address)); - if let Some(native_tokens) = native_tokens { - builder = builder.with_native_tokens( - native_tokens - .into_iter() - .map(|(id, amount)| NativeToken::new(TokenId::from_str(id).unwrap(), amount).unwrap()), - ); - } - if let Some(bech32_sender) = bech32_sender { builder = builder.add_feature(SenderFeature::new(bech32_sender)); } @@ -209,19 +174,15 @@ fn build_foundry_output( account_id: AccountId, serial_number: u32, token_scheme: SimpleTokenScheme, - native_tokens: Option>, + native_token: Option<(&str, u64)>, ) -> Output { let mut builder = FoundryOutputBuilder::new_with_amount(amount, serial_number, TokenScheme::Simple(token_scheme)) .add_unlock_condition(ImmutableAccountAddressUnlockCondition::new(AccountAddress::new( account_id, ))); - if let Some(native_tokens) = native_tokens { - builder = builder.with_native_tokens( - native_tokens - .into_iter() - .map(|(id, amount)| NativeToken::new(TokenId::from_str(id).unwrap(), amount).unwrap()), - ); + if let Some((id, amount)) = native_token { + builder = builder.with_native_token(NativeToken::new(TokenId::from_str(id).unwrap(), amount).unwrap()); } builder.finish_output().unwrap() @@ -229,11 +190,11 @@ fn build_foundry_output( fn build_output_inner(build: Build) -> (Output, Option) { match build { - Build::Basic(amount, bech32_address, native_tokens, bech32_sender, sdruc, timelock, expiration, chain) => ( + Build::Basic(amount, bech32_address, native_token, bech32_sender, sdruc, timelock, expiration, chain) => ( build_basic_output( amount, Bech32Address::try_from_str(bech32_address).unwrap(), - native_tokens, + native_token, bech32_sender.map(|address| Bech32Address::try_from_str(address).unwrap()), sdruc.map(|(address, exp)| (Bech32Address::try_from_str(address).unwrap(), exp)), timelock, @@ -241,22 +202,11 @@ fn build_output_inner(build: Build) -> (Output, Option) { ), chain, ), - Build::Nft( - amount, - nft_id, - bech32_address, - native_tokens, - bech32_sender, - bech32_issuer, - sdruc, - expiration, - chain, - ) => ( + Build::Nft(amount, nft_id, bech32_address, bech32_sender, bech32_issuer, sdruc, expiration, chain) => ( build_nft_output( amount, nft_id, Bech32Address::try_from_str(bech32_address).unwrap(), - native_tokens, bech32_sender.map(|address| Bech32Address::try_from_str(address).unwrap()), bech32_issuer.map(|address| Bech32Address::try_from_str(address).unwrap()), sdruc.map(|(address, exp)| (Bech32Address::try_from_str(address).unwrap(), exp)), @@ -264,19 +214,18 @@ fn build_output_inner(build: Build) -> (Output, Option) { ), chain, ), - Build::Account(amount, account_id, address, native_tokens, bech32_sender, bech32_issuer, chain) => ( + Build::Account(amount, account_id, address, bech32_sender, bech32_issuer, chain) => ( build_account_output( amount, account_id, Bech32Address::try_from_str(address).unwrap(), - native_tokens, bech32_sender.map(|address| Bech32Address::try_from_str(address).unwrap()), bech32_issuer.map(|address| Bech32Address::try_from_str(address).unwrap()), ), chain, ), - Build::Foundry(amount, account_id, serial_number, token_scheme, native_tokens) => ( - build_foundry_output(amount, account_id, serial_number, token_scheme, native_tokens), + Build::Foundry(amount, account_id, serial_number, token_scheme, native_token) => ( + build_foundry_output(amount, account_id, serial_number, token_scheme, native_token), None, ), } @@ -327,12 +276,7 @@ where count(a) == count(b) } -fn is_remainder_or_return( - output: &Output, - amount: u64, - address: &str, - native_tokens: Option>, -) -> bool { +fn is_remainder_or_return(output: &Output, amount: u64, address: &str, native_token: Option<(&str, u64)>) -> bool { if let Output::Basic(output) = output { if output.amount() != amount { return false; @@ -352,19 +296,13 @@ fn is_remainder_or_return( return false; } - if let Some(native_tokens) = native_tokens { - let native_tokens = NativeTokens::from_set( - native_tokens - .into_iter() - .map(|(token_id, amount)| NativeToken::new(TokenId::from_str(token_id).unwrap(), amount).unwrap()) - .collect::>(), - ) - .unwrap(); + if let Some((token_id, amount)) = native_token { + let native_token = NativeToken::new(TokenId::from_str(token_id).unwrap(), amount).unwrap(); - if output.native_tokens() != &native_tokens { + if output.native_token().unwrap() != &native_token { return false; } - } else if output.native_tokens().len() != 0 { + } else if output.native_token().is_some() { return false; } diff --git a/sdk/tests/client/signing/account.rs b/sdk/tests/client/signing/account.rs index 9696182f7d..1299085942 100644 --- a/sdk/tests/client/signing/account.rs +++ b/sdk/tests/client/signing/account.rs @@ -55,7 +55,6 @@ async fn sign_account_state_transition() -> Result<()> { &bech32_address.to_string(), None, None, - None, Some(Bip44::new(SHIMMER_COIN_TYPE)), )]); @@ -66,7 +65,6 @@ async fn sign_account_state_transition() -> Result<()> { None, None, None, - None, )]); let transaction = Transaction::builder(protocol_parameters.network_id()) @@ -130,7 +128,6 @@ async fn account_reference_unlocks() -> Result<()> { &bech32_address.to_string(), None, None, - None, Some(Bip44::new(SHIMMER_COIN_TYPE)), ), Basic( @@ -156,15 +153,7 @@ async fn account_reference_unlocks() -> Result<()> { ]); let outputs = build_outputs([ - Account( - 1_000_000, - account_id, - &bech32_address.to_string(), - None, - None, - None, - None, - ), + Account(1_000_000, account_id, &bech32_address.to_string(), None, None, None), Basic( 2_000_000, &account_bech32_address.to_string(), diff --git a/sdk/tests/client/signing/mod.rs b/sdk/tests/client/signing/mod.rs index 55c63fddf9..fba3641404 100644 --- a/sdk/tests/client/signing/mod.rs +++ b/sdk/tests/client/signing/mod.rs @@ -87,7 +87,6 @@ async fn all_combined() -> Result<()> { None, None, None, - None, ), Account( 1_000_000, @@ -95,7 +94,6 @@ async fn all_combined() -> Result<()> { &ed25519_bech32_address_0.to_string(), None, None, - None, Some(Bip44::new(SHIMMER_COIN_TYPE)), ), Basic( @@ -206,7 +204,6 @@ async fn all_combined() -> Result<()> { None, None, None, - None, Some(Bip44::new(SHIMMER_COIN_TYPE)), ), Nft( @@ -218,7 +215,6 @@ async fn all_combined() -> Result<()> { None, None, None, - None, ), // Expirations Basic( @@ -258,7 +254,6 @@ async fn all_combined() -> Result<()> { None, None, None, - None, Some((&nft_4_bech32_address.to_string(), 50)), None, ), @@ -269,7 +264,6 @@ async fn all_combined() -> Result<()> { None, None, None, - None, Some((&nft_3_bech32_address.to_string(), 150)), None, ), @@ -283,7 +277,6 @@ async fn all_combined() -> Result<()> { None, None, None, - None, ), Account( 1_000_000, @@ -292,7 +285,6 @@ async fn all_combined() -> Result<()> { None, None, None, - None, ), Basic( 10_000_000, @@ -313,7 +305,6 @@ async fn all_combined() -> Result<()> { None, None, None, - None, ), Nft( 1_000_000, @@ -324,7 +315,6 @@ async fn all_combined() -> Result<()> { None, None, None, - None, ), Nft( 1_000_000, @@ -335,7 +325,6 @@ async fn all_combined() -> Result<()> { None, None, None, - None, ), Nft( 1_000_000, @@ -346,7 +335,6 @@ async fn all_combined() -> Result<()> { None, None, None, - None, ), ]); diff --git a/sdk/tests/client/signing/nft.rs b/sdk/tests/client/signing/nft.rs index 1d4a52c785..8ca9d544f1 100644 --- a/sdk/tests/client/signing/nft.rs +++ b/sdk/tests/client/signing/nft.rs @@ -59,7 +59,6 @@ async fn nft_reference_unlocks() -> Result<()> { None, None, None, - None, Some(Bip44::new(SHIMMER_COIN_TYPE)), ), Basic( @@ -94,7 +93,6 @@ async fn nft_reference_unlocks() -> Result<()> { None, None, None, - None, ), Basic( 2_000_000, diff --git a/sdk/tests/types/output/account.rs b/sdk/tests/types/output/account.rs index 554e5f9a8f..57f5b2474c 100644 --- a/sdk/tests/types/output/account.rs +++ b/sdk/tests/types/output/account.rs @@ -2,8 +2,7 @@ // SPDX-License-Identifier: Apache-2.0 use iota_sdk::types::block::{ - address::AccountAddress, - output::{AccountOutput, Feature, FoundryId, MinimumOutputAmount, NativeToken, SimpleTokenScheme, TokenId}, + output::{AccountOutput, Feature, MinimumOutputAmount}, protocol::protocol_parameters, rand::output::{ feature::{rand_issuer_feature, rand_metadata_feature, rand_sender_feature}, @@ -18,7 +17,6 @@ use pretty_assertions::assert_eq; fn builder() { let protocol_parameters = protocol_parameters(); let account_id = rand_account_id(); - let foundry_id = FoundryId::build(&AccountAddress::from(account_id), 0, SimpleTokenScheme::KIND); let address_1 = rand_address_unlock_condition_different_from_account_id(&account_id); let address_2 = rand_address_unlock_condition_different_from_account_id(&account_id); let sender_1 = rand_sender_feature(); @@ -28,7 +26,6 @@ fn builder() { let amount = 500_000; let mut builder = AccountOutput::build_with_amount(amount, account_id) - .add_native_token(NativeToken::new(TokenId::from(foundry_id), 1000).unwrap()) .add_unlock_condition(address_1.clone()) .add_feature(sender_1.clone()) .replace_feature(sender_2.clone()) diff --git a/sdk/tests/types/output/basic.rs b/sdk/tests/types/output/basic.rs index 9c675541e4..42268b7afe 100644 --- a/sdk/tests/types/output/basic.rs +++ b/sdk/tests/types/output/basic.rs @@ -27,7 +27,7 @@ fn builder() { let amount = 500_000; let mut builder = BasicOutput::build_with_amount(amount) - .add_native_token(NativeToken::new(TokenId::from(foundry_id), 1000).unwrap()) + .with_native_token(NativeToken::new(TokenId::from(foundry_id), 1000).unwrap()) .add_unlock_condition(address_1.clone()) .add_feature(sender_1.clone()) .replace_feature(sender_2.clone()); diff --git a/sdk/tests/types/output/foundry.rs b/sdk/tests/types/output/foundry.rs index 00ba0bd331..f52388bbf3 100644 --- a/sdk/tests/types/output/foundry.rs +++ b/sdk/tests/types/output/foundry.rs @@ -27,7 +27,7 @@ fn builder() { let mut builder = FoundryOutput::build_with_amount(amount, 234, rand_token_scheme()) .with_serial_number(85) - .add_native_token(NativeToken::new(TokenId::from(foundry_id), 1000).unwrap()) + .with_native_token(NativeToken::new(TokenId::from(foundry_id), 1000).unwrap()) .with_unlock_conditions([account_1]) .add_feature(metadata_1.clone()) .replace_feature(metadata_2.clone()) diff --git a/sdk/tests/types/output/nft.rs b/sdk/tests/types/output/nft.rs index 3bdeac1bb2..5eb4322ecf 100644 --- a/sdk/tests/types/output/nft.rs +++ b/sdk/tests/types/output/nft.rs @@ -2,15 +2,12 @@ // SPDX-License-Identifier: Apache-2.0 use iota_sdk::types::block::{ - output::{FoundryId, MinimumOutputAmount, NativeToken, NftId, NftOutput, SimpleTokenScheme, TokenId}, + output::{MinimumOutputAmount, NftId, NftOutput}, protocol::protocol_parameters, - rand::{ - address::rand_account_address, - output::{ - feature::{rand_issuer_feature, rand_sender_feature}, - rand_nft_output, - unlock_condition::rand_address_unlock_condition, - }, + rand::output::{ + feature::{rand_issuer_feature, rand_sender_feature}, + rand_nft_output, + unlock_condition::rand_address_unlock_condition, }, }; use packable::PackableExt; @@ -19,7 +16,6 @@ use pretty_assertions::assert_eq; #[test] fn builder() { let protocol_parameters = protocol_parameters(); - let foundry_id = FoundryId::build(&rand_account_address(), 0, SimpleTokenScheme::KIND); let address_1 = rand_address_unlock_condition(); let address_2 = rand_address_unlock_condition(); let sender_1 = rand_sender_feature(); @@ -29,7 +25,6 @@ fn builder() { let amount = 500_000; let mut builder = NftOutput::build_with_amount(amount, NftId::null()) - .add_native_token(NativeToken::new(TokenId::from(foundry_id), 1000).unwrap()) .add_unlock_condition(address_1.clone()) .add_feature(sender_1) .replace_feature(sender_2.clone()) diff --git a/sdk/tests/types/transaction.rs b/sdk/tests/types/transaction.rs index 5e696ac391..de81bb75be 100644 --- a/sdk/tests/types/transaction.rs +++ b/sdk/tests/types/transaction.rs @@ -440,7 +440,7 @@ fn duplicate_output_foundry() { let foundry_id = FoundryId::build(&AccountAddress::from(account_id), 1, token_scheme.kind()); let token_id = TokenId::from(foundry_id); let foundry = FoundryOutput::build_with_amount(1_000_000, 1, token_scheme) - .add_native_token(NativeToken::new(token_id, 70).unwrap()) + .with_native_token(NativeToken::new(token_id, 70).unwrap()) .add_unlock_condition(ImmutableAccountAddressUnlockCondition::new(AccountAddress::from( account_id, ))) diff --git a/sdk/tests/wallet/claim_outputs.rs b/sdk/tests/wallet/claim_outputs.rs index ae52af1961..4971a8a5e8 100644 --- a/sdk/tests/wallet/claim_outputs.rs +++ b/sdk/tests/wallet/claim_outputs.rs @@ -6,7 +6,7 @@ use iota_sdk::{ unlock_condition::{AddressUnlockCondition, ExpirationUnlockCondition}, BasicOutputBuilder, NativeToken, NftId, NftOutputBuilder, UnlockCondition, }, - wallet::{CreateNativeTokenParams, OutputsToClaim, Result, SendNativeTokensParams, SendParams, TransactionOptions}, + wallet::{CreateNativeTokenParams, OutputsToClaim, Result, SendNativeTokenParams, SendParams, TransactionOptions}, U256, }; use pretty_assertions::assert_eq; @@ -240,8 +240,8 @@ async fn claim_2_native_tokens() -> Result<()> { let tx = wallet_1 .send_native_tokens( [ - SendNativeTokensParams::new(wallet_0.address().await, [(create_tx_0.token_id, native_token_amount)])?, - SendNativeTokensParams::new(wallet_0.address().await, [(create_tx_1.token_id, native_token_amount)])?, + SendNativeTokenParams::new(wallet_0.address().await, (create_tx_0.token_id, native_token_amount))?, + SendNativeTokenParams::new(wallet_0.address().await, (create_tx_1.token_id, native_token_amount))?, ], None, ) @@ -347,7 +347,7 @@ async fn claim_2_native_tokens_no_outputs_in_claim_account() -> Result<()> { wallet_0.address().await, wallet_0.client().get_slot_index().await? + 5000, )?) - .add_native_token(NativeToken::new(create_tx_0.token_id, native_token_amount)?) + .with_native_token(NativeToken::new(create_tx_0.token_id, native_token_amount)?) .finish_output()?, BasicOutputBuilder::new_with_minimum_amount(storage_score_params) .add_unlock_condition(AddressUnlockCondition::new(wallet_1.address().await)) @@ -355,7 +355,7 @@ async fn claim_2_native_tokens_no_outputs_in_claim_account() -> Result<()> { wallet_0.address().await, wallet_0.client().get_slot_index().await? + 5000, )?) - .add_native_token(NativeToken::new(create_tx_1.token_id, native_token_amount)?) + .with_native_token(NativeToken::new(create_tx_1.token_id, native_token_amount)?) .finish_output()?, ], None, diff --git a/sdk/tests/wallet/output_preparation.rs b/sdk/tests/wallet/output_preparation.rs index 8a2e294a03..4ab33ba562 100644 --- a/sdk/tests/wallet/output_preparation.rs +++ b/sdk/tests/wallet/output_preparation.rs @@ -74,11 +74,14 @@ async fn output_preparation() -> Result<()> { OutputParams { recipient_address: recipient_address.clone(), amount: 500000, - assets: Some(Assets { - native_tokens: Some(vec![native_token]), - nft_id: None, + assets: Some(Assets { nft_id: None }), + features: Some(Features { + metadata: None, + tag: None, + issuer: None, + sender: None, + native_token: Some(native_token), }), - features: None, unlocks: None, storage_deposit: None, }, @@ -88,7 +91,7 @@ async fn output_preparation() -> Result<()> { assert_eq!(output.amount(), 500000); // only address condition assert_eq!(output.unlock_conditions().unwrap().len(), 1); - assert_eq!(output.native_tokens().unwrap().first(), Some(&native_token)); + assert_eq!(output.native_token(), Some(&native_token)); let output = wallet .prepare_output( @@ -101,6 +104,7 @@ async fn output_preparation() -> Result<()> { tag: Some(prefix_hex::encode(b"My Tag")), issuer: None, sender: None, + native_token: None, }), unlocks: None, storage_deposit: None, @@ -126,6 +130,7 @@ async fn output_preparation() -> Result<()> { tag: Some(prefix_hex::encode(b"My Tag")), issuer: None, sender: None, + native_token: None, }), unlocks: None, storage_deposit: None, @@ -154,6 +159,7 @@ async fn output_preparation() -> Result<()> { tag: Some(prefix_hex::encode(b"My Tag")), issuer: None, sender: None, + native_token: None, }), unlocks: None, storage_deposit: None, @@ -179,6 +185,7 @@ async fn output_preparation() -> Result<()> { tag: Some(prefix_hex::encode(b"My Tag")), issuer: None, sender: None, + native_token: None, }), unlocks: None, storage_deposit: None, @@ -203,7 +210,6 @@ async fn output_preparation() -> Result<()> { recipient_address: recipient_address.clone(), amount: 500000, assets: Some(Assets { - native_tokens: None, nft_id: Some(NftId::from_str( "0xa068e00a79922eaef241592a7440f131ea7f8ad9e22e580ef139415f273eff30", )?), @@ -227,7 +233,6 @@ async fn output_preparation() -> Result<()> { recipient_address: recipient_address.clone(), amount: 500000, assets: Some(Assets { - native_tokens: None, nft_id: Some(NftId::from_str( "0x0000000000000000000000000000000000000000000000000000000000000000", )?), @@ -258,15 +263,13 @@ async fn output_preparation() -> Result<()> { OutputParams { recipient_address: recipient_address.clone(), amount: 500000, - assets: Some(Assets { - native_tokens: Some(vec![native_token]), - nft_id: None, - }), + assets: Some(Assets { nft_id: None }), features: Some(Features { metadata: None, tag: None, issuer: None, sender: Some(issuer_and_sender_address.clone()), + native_token: Some(native_token), }), unlocks: None, storage_deposit: None, @@ -294,6 +297,7 @@ async fn output_preparation() -> Result<()> { tag: None, issuer: Some(issuer_and_sender_address.clone()), sender: None, + native_token: None, }), unlocks: None, storage_deposit: None, @@ -314,7 +318,6 @@ async fn output_preparation() -> Result<()> { recipient_address: recipient_address.clone(), amount: 500000, assets: Some(Assets { - native_tokens: None, nft_id: Some(NftId::from_str( "0x0000000000000000000000000000000000000000000000000000000000000000", )?), @@ -324,6 +327,7 @@ async fn output_preparation() -> Result<()> { tag: None, issuer: Some(issuer_and_sender_address.clone()), sender: Some(issuer_and_sender_address.clone()), + native_token: None, }), unlocks: Some(Unlocks { expiration_slot_index: Some(SlotIndex::from(1)), @@ -358,7 +362,6 @@ async fn output_preparation() -> Result<()> { recipient_address: recipient_address.clone(), amount: 500, assets: Some(Assets { - native_tokens: None, nft_id: Some(NftId::from_str( "0x0000000000000000000000000000000000000000000000000000000000000000", )?), @@ -368,6 +371,7 @@ async fn output_preparation() -> Result<()> { tag: None, issuer: None, sender: None, + native_token: None, }), unlocks: Some(Unlocks { expiration_slot_index: Some(SlotIndex::from(1)), @@ -394,6 +398,7 @@ async fn output_preparation() -> Result<()> { tag: Some(prefix_hex::encode(b"My Tag")), issuer: None, sender: None, + native_token: None, }), unlocks: None, storage_deposit: Some(StorageDeposit { @@ -559,15 +564,13 @@ async fn prepare_nft_output_features_update() -> Result<()> { OutputParams { recipient_address: wallet_address, amount: 1_000_000, - assets: Some(Assets { - native_tokens: None, - nft_id: Some(nft_id), - }), + assets: Some(Assets { nft_id: Some(nft_id) }), features: Some(Features { metadata: Some("0x2a".to_string()), tag: None, issuer: None, sender: None, + native_token: None, }), unlocks: None, storage_deposit: None, @@ -771,10 +774,7 @@ async fn prepare_output_only_single_nft() -> Result<()> { OutputParams { recipient_address: wallet_0_address, amount: nft_data.output.amount(), - assets: Some(Assets { - native_tokens: None, - nft_id: Some(nft_id), - }), + assets: Some(Assets { nft_id: Some(nft_id) }), features: None, unlocks: None, storage_deposit: None, @@ -832,10 +832,7 @@ async fn prepare_existing_nft_output_gift() -> Result<()> { OutputParams { recipient_address: address, amount: 0, - assets: Some(Assets { - native_tokens: None, - nft_id: Some(nft_id), - }), + assets: Some(Assets { nft_id: Some(nft_id) }), features: None, unlocks: None, storage_deposit: Some(StorageDeposit { From 543e065d49fa0d80a3f326f31ff6fe1d4ef73d14 Mon Sep 17 00:00:00 2001 From: Thoralf-M <46689931+Thoralf-M@users.noreply.github.com> Date: Mon, 20 Nov 2023 13:20:17 +0100 Subject: [PATCH 50/91] Fix clippy warnings (#1646) * Fix clippy warnings * Fix rand_tagged_data_payload test --- bindings/core/src/method_handler/secret_manager.rs | 10 +++------- cli/src/wallet_cli/mod.rs | 2 +- sdk/examples/client/02_address_balance.rs | 2 +- .../client/api/block_builder/input_selection/mod.rs | 4 ++-- .../input_selection/requirement/native_tokens.rs | 4 ++-- sdk/src/types/block/output/feature/native_token.rs | 2 +- sdk/src/types/block/rand/payload.rs | 6 +++++- sdk/src/wallet/operations/balance.rs | 8 ++++---- sdk/src/wallet/operations/output_claiming.rs | 4 ++-- sdk/src/wallet/operations/output_consolidation.rs | 2 +- .../wallet/operations/transaction/prepare_output.rs | 2 +- 11 files changed, 23 insertions(+), 23 deletions(-) diff --git a/bindings/core/src/method_handler/secret_manager.rs b/bindings/core/src/method_handler/secret_manager.rs index 928a9ad795..3e3ac2ec34 100644 --- a/bindings/core/src/method_handler/secret_manager.rs +++ b/bindings/core/src/method_handler/secret_manager.rs @@ -124,13 +124,9 @@ where if let Some(secret_manager) = secret_manager.downcast::() { secret_manager.store_mnemonic(mnemonic).await?; Response::Ok - } else if let Some(secret_manager) = secret_manager.downcast::() { - if let SecretManager::Stronghold(secret_manager) = secret_manager { - secret_manager.store_mnemonic(mnemonic).await?; - Response::Ok - } else { - return Err(iota_sdk::client::Error::SecretManagerMismatch.into()); - } + } else if let Some(SecretManager::Stronghold(secret_manager)) = secret_manager.downcast::() { + secret_manager.store_mnemonic(mnemonic).await?; + Response::Ok } else { return Err(iota_sdk::client::Error::SecretManagerMismatch.into()); } diff --git a/cli/src/wallet_cli/mod.rs b/cli/src/wallet_cli/mod.rs index dba658b975..9a47485e53 100644 --- a/cli/src/wallet_cli/mod.rs +++ b/cli/src/wallet_cli/mod.rs @@ -954,7 +954,7 @@ async fn print_wallet_address(wallet: &Wallet) -> Result<(), Error> { if address.inner() == required_address { if let Some(nt) = output_data.output.native_token() { - native_tokens.add_native_token(nt.clone())?; + native_tokens.add_native_token(*nt)?; } match &output_data.output { Output::Basic(_) => {} diff --git a/sdk/examples/client/02_address_balance.rs b/sdk/examples/client/02_address_balance.rs index fc9cc522cd..edea187d1a 100644 --- a/sdk/examples/client/02_address_balance.rs +++ b/sdk/examples/client/02_address_balance.rs @@ -56,7 +56,7 @@ async fn main() -> Result<()> { let mut total_native_tokens = NativeTokensBuilder::new(); for output in outputs { if let Some(native_token) = output.native_token() { - total_native_tokens.add_native_token(native_token.clone())?; + total_native_tokens.add_native_token(*native_token)?; } total_amount += output.amount(); } diff --git a/sdk/src/client/api/block_builder/input_selection/mod.rs b/sdk/src/client/api/block_builder/input_selection/mod.rs index c8f8d742f5..e9efec2740 100644 --- a/sdk/src/client/api/block_builder/input_selection/mod.rs +++ b/sdk/src/client/api/block_builder/input_selection/mod.rs @@ -398,7 +398,7 @@ impl InputSelection { for input in &self.selected_inputs { if let Some(native_token) = input.output.native_token() { - input_native_tokens_builder.add_native_token(native_token.clone())?; + input_native_tokens_builder.add_native_token(*native_token)?; } match &input.output { Output::Account(_) => { @@ -417,7 +417,7 @@ impl InputSelection { for output in self.outputs.iter() { if let Some(native_token) = output.native_token() { - output_native_tokens_builder.add_native_token(native_token.clone())?; + output_native_tokens_builder.add_native_token(*native_token)?; } } diff --git a/sdk/src/client/api/block_builder/input_selection/requirement/native_tokens.rs b/sdk/src/client/api/block_builder/input_selection/requirement/native_tokens.rs index 02b2818cc8..e355d74dbd 100644 --- a/sdk/src/client/api/block_builder/input_selection/requirement/native_tokens.rs +++ b/sdk/src/client/api/block_builder/input_selection/requirement/native_tokens.rs @@ -15,8 +15,8 @@ pub(crate) fn get_native_tokens<'a>(outputs: impl Iterator) - let mut required_native_tokens = NativeTokensBuilder::new(); for output in outputs { - if let Some(output_native_token) = output.native_token() { - required_native_tokens.add_native_token(output_native_token.clone())?; + if let Some(native_token) = output.native_token() { + required_native_tokens.add_native_token(*native_token)?; } } diff --git a/sdk/src/types/block/output/feature/native_token.rs b/sdk/src/types/block/output/feature/native_token.rs index 7bb52a0275..52e298edff 100644 --- a/sdk/src/types/block/output/feature/native_token.rs +++ b/sdk/src/types/block/output/feature/native_token.rs @@ -46,7 +46,7 @@ mod dto { fn from(value: &NativeTokenFeature) -> Self { Self { kind: NativeTokenFeature::KIND, - token_id: value.token_id().clone(), + token_id: *value.token_id(), amount: value.amount(), } } diff --git a/sdk/src/types/block/rand/payload.rs b/sdk/src/types/block/rand/payload.rs index 9df77731e5..f016f21b16 100644 --- a/sdk/src/types/block/rand/payload.rs +++ b/sdk/src/types/block/rand/payload.rs @@ -10,7 +10,11 @@ use crate::types::block::{ pub fn rand_tagged_data_payload() -> TaggedDataPayload { TaggedDataPayload::new( rand_bytes(rand_number_range(TaggedDataPayload::TAG_LENGTH_RANGE).into()), - rand_bytes(rand_number_range(0..10000)), + rand_bytes( + rand_number_range(TaggedDataPayload::DATA_LENGTH_RANGE) + .try_into() + .unwrap(), + ), ) .unwrap() } diff --git a/sdk/src/wallet/operations/balance.rs b/sdk/src/wallet/operations/balance.rs index 374e74cc90..707c1d448e 100644 --- a/sdk/src/wallet/operations/balance.rs +++ b/sdk/src/wallet/operations/balance.rs @@ -88,7 +88,7 @@ where // Add native token if let Some(native_token) = output.native_token() { - total_native_tokens.add_native_token(native_token.clone())?; + total_native_tokens.add_native_token(*native_token)?; } balance.foundries.push(output.id()); @@ -125,7 +125,7 @@ where // Add native token if let Some(native_token) = output.native_token() { - total_native_tokens.add_native_token(native_token.clone())?; + total_native_tokens.add_native_token(*native_token)?; } } else { // if we have multiple unlock conditions for basic or nft outputs, then we can't @@ -199,7 +199,7 @@ where // Add native token if let Some(native_token) = output.native_token() { - total_native_tokens.add_native_token(native_token.clone())?; + total_native_tokens.add_native_token(*native_token)?; } } else { // only add outputs that can't be locked now and at any point in the future @@ -260,7 +260,7 @@ where if output_data.network_id == network_id { locked_amount += output_data.output.amount(); if let Some(native_token) = output_data.output.native_token() { - locked_native_tokens.add_native_token(native_token.clone())?; + locked_native_tokens.add_native_token(*native_token)?; } } } diff --git a/sdk/src/wallet/operations/output_claiming.rs b/sdk/src/wallet/operations/output_claiming.rs index 2db2b94d41..7d2af9e8e8 100644 --- a/sdk/src/wallet/operations/output_claiming.rs +++ b/sdk/src/wallet/operations/output_claiming.rs @@ -248,7 +248,7 @@ where // check native tokens for output_data in &outputs_to_claim { if let Some(native_token) = output_data.output.native_token() { - new_native_tokens.add_native_token(native_token.clone())?; + new_native_tokens.add_native_token(*native_token)?; } if let Some(sdr) = sdr_not_expired(&output_data.output, slot_index) { // for own output subtract the return amount @@ -333,7 +333,7 @@ where if available_amount < required_amount { if !additional_inputs_used.contains(&output_data.output_id) { if let Some(native_token) = output_data.output.native_token() { - new_native_tokens.add_native_token(native_token.clone())?; + new_native_tokens.add_native_token(*native_token)?; } available_amount += output_data.output.amount(); additional_inputs.push(output_data.output_id); diff --git a/sdk/src/wallet/operations/output_consolidation.rs b/sdk/src/wallet/operations/output_consolidation.rs index 1e8a3c8d97..51047cc692 100644 --- a/sdk/src/wallet/operations/output_consolidation.rs +++ b/sdk/src/wallet/operations/output_consolidation.rs @@ -232,7 +232,7 @@ where for output_data in outputs_to_consolidate.iter().take(max_inputs.into()) { if let Some(native_token) = output_data.output.native_token() { - total_native_tokens.add_native_token(native_token.clone())?; + total_native_tokens.add_native_token(*native_token)?; }; total_amount += output_data.output.amount(); diff --git a/sdk/src/wallet/operations/transaction/prepare_output.rs b/sdk/src/wallet/operations/transaction/prepare_output.rs index d34d8c1aa7..d47eaa764b 100644 --- a/sdk/src/wallet/operations/transaction/prepare_output.rs +++ b/sdk/src/wallet/operations/transaction/prepare_output.rs @@ -81,7 +81,7 @@ where } if let Some(native_token) = &features.native_token { - first_output_builder = first_output_builder.with_native_token(native_token.clone()); + first_output_builder = first_output_builder.with_native_token(*native_token); } } From 3ce807a1fe1e7688ca5f74966a8dd5119e8307bd Mon Sep 17 00:00:00 2001 From: Thibault Martinez Date: Mon, 20 Nov 2023 14:40:37 +0100 Subject: [PATCH 51/91] Sync implicit accounts (#1648) * TMP * Add sync option to CLI * Doc --- cli/src/wallet_cli/mod.rs | 1 + .../syncing/addresses/output_ids/mod.rs | 1 + sdk/src/wallet/operations/syncing/mod.rs | 16 ++++++++++++---- sdk/src/wallet/operations/syncing/options.rs | 9 +++++++++ 4 files changed, 23 insertions(+), 4 deletions(-) diff --git a/cli/src/wallet_cli/mod.rs b/cli/src/wallet_cli/mod.rs index 9a47485e53..d1f3b4fb8d 100644 --- a/cli/src/wallet_cli/mod.rs +++ b/cli/src/wallet_cli/mod.rs @@ -788,6 +788,7 @@ pub async fn sync_command(wallet: &Wallet) -> Result<(), Error> { let balance = wallet .sync(Some(SyncOptions { sync_native_token_foundries: true, + sync_implicit_accounts: true, ..Default::default() })) .await?; diff --git a/sdk/src/wallet/operations/syncing/addresses/output_ids/mod.rs b/sdk/src/wallet/operations/syncing/addresses/output_ids/mod.rs index 0ce8368503..c9ddc7b6cb 100644 --- a/sdk/src/wallet/operations/syncing/addresses/output_ids/mod.rs +++ b/sdk/src/wallet/operations/syncing/addresses/output_ids/mod.rs @@ -47,6 +47,7 @@ where if (address.is_ed25519() && sync_options.wallet.all_outputs()) || (address.is_nft() && sync_options.nft.all_outputs()) || (address.is_account() && sync_options.account.all_outputs()) + || (address.is_implicit_account_creation() && sync_options.sync_implicit_accounts) { return Ok(self .client() diff --git a/sdk/src/wallet/operations/syncing/mod.rs b/sdk/src/wallet/operations/syncing/mod.rs index 2d3b616bd7..4ec2ac0045 100644 --- a/sdk/src/wallet/operations/syncing/mod.rs +++ b/sdk/src/wallet/operations/syncing/mod.rs @@ -107,7 +107,15 @@ where key_index: 0, }; - let address_to_sync = vec![wallet_address_with_unspent_outputs]; + let address_to_sync = vec![ + wallet_address_with_unspent_outputs, + AddressWithUnspentOutputs { + address: self.implicit_account_creation_address().await?, + output_ids: vec![], + internal: false, + key_index: 0, + }, + ]; let (addresses_with_unspent_outputs, spent_or_not_synced_output_ids, outputs_data): ( Vec, @@ -124,11 +132,11 @@ where // Add the output response to the output ids, the output response is optional, because an output could be // pruned and then we can't get the metadata - let mut spent_or_unsynced_output_metadata_map: HashMap> = + let mut spent_or_unsynced_output_metadata: HashMap> = spent_or_not_synced_output_ids.into_iter().map(|o| (o, None)).collect(); for output_metadata_response in spent_or_unsynced_output_metadata_responses { let output_id = output_metadata_response.output_id(); - spent_or_unsynced_output_metadata_map.insert(*output_id, Some(output_metadata_response)); + spent_or_unsynced_output_metadata.insert(*output_id, Some(output_metadata_response)); } if options.sync_incoming_transactions { @@ -156,7 +164,7 @@ where } // Updates wallet with balances, output ids, outputs - self.update_after_sync(outputs_data, spent_or_unsynced_output_metadata_map) + self.update_after_sync(outputs_data, spent_or_unsynced_output_metadata) .await } diff --git a/sdk/src/wallet/operations/syncing/options.rs b/sdk/src/wallet/operations/syncing/options.rs index 38e733c1e1..fe6d9c5489 100644 --- a/sdk/src/wallet/operations/syncing/options.rs +++ b/sdk/src/wallet/operations/syncing/options.rs @@ -8,6 +8,7 @@ const DEFAULT_SYNC_INCOMING_TRANSACTIONS: bool = false; const DEFAULT_SYNC_ONLY_MOST_BASIC_OUTPUTS: bool = false; const DEFAULT_SYNC_PENDING_TRANSACTIONS: bool = true; const DEFAULT_SYNC_NATIVE_TOKEN_FOUNDRIES: bool = false; +const DEFAULT_SYNC_IMPLICIT_ACCOUNTS: bool = false; /// The synchronization options #[derive(Debug, Clone, Eq, PartialEq, Hash, Serialize, Deserialize)] @@ -41,6 +42,9 @@ pub struct SyncOptions { /// Sync native token foundries, so their metadata can be returned in the balance. #[serde(default = "default_sync_native_token_foundries")] pub sync_native_token_foundries: bool, + /// Sync implicit accounts. + #[serde(default = "default_sync_implicit_accounts")] + pub sync_implicit_accounts: bool, } fn default_force_syncing() -> bool { @@ -63,6 +67,10 @@ fn default_sync_native_token_foundries() -> bool { DEFAULT_SYNC_NATIVE_TOKEN_FOUNDRIES } +fn default_sync_implicit_accounts() -> bool { + DEFAULT_SYNC_IMPLICIT_ACCOUNTS +} + impl Default for SyncOptions { fn default() -> Self { Self { @@ -74,6 +82,7 @@ impl Default for SyncOptions { sync_only_most_basic_outputs: default_sync_only_most_basic_outputs(), sync_native_token_foundries: default_sync_native_token_foundries(), force_syncing: default_force_syncing(), + sync_implicit_accounts: default_sync_implicit_accounts(), } } } From c19bb50b2c7bc4befece6b82b2eed9945a8e69e5 Mon Sep 17 00:00:00 2001 From: Thibault Martinez Date: Mon, 20 Nov 2023 15:52:39 +0100 Subject: [PATCH 52/91] Remove BaseTokenResponse::use_metric_prefix (#1652) --- sdk/src/types/api/core.rs | 1 - 1 file changed, 1 deletion(-) diff --git a/sdk/src/types/api/core.rs b/sdk/src/types/api/core.rs index 3c7dc6c419..db1b1ffe7a 100644 --- a/sdk/src/types/api/core.rs +++ b/sdk/src/types/api/core.rs @@ -170,7 +170,6 @@ pub struct BaseTokenResponse { #[serde(default, skip_serializing_if = "Option::is_none")] pub subunit: Option, pub decimals: u32, - pub use_metric_prefix: bool, } /// Response of GET /api/core/v3/blocks/validators. From adac8ae84b765ac51ec7b029e7d4ac94f0910027 Mon Sep 17 00:00:00 2001 From: Thibault Martinez Date: Mon, 20 Nov 2023 16:16:41 +0100 Subject: [PATCH 53/91] Remove state_metadata from AnchorOutput (#1651) --- .../nodejs/lib/types/block/output/output.ts | 7 -- bindings/python/iota_sdk/types/output.py | 3 - sdk/src/types/block/error.rs | 5 +- sdk/src/types/block/output/anchor.rs | 68 +++++-------------- sdk/src/types/block/output/mod.rs | 1 - .../transaction/high_level/create_account.rs | 1 - 6 files changed, 17 insertions(+), 68 deletions(-) diff --git a/bindings/nodejs/lib/types/block/output/output.ts b/bindings/nodejs/lib/types/block/output/output.ts index fb2fe10cb1..8d54898472 100644 --- a/bindings/nodejs/lib/types/block/output/output.ts +++ b/bindings/nodejs/lib/types/block/output/output.ts @@ -243,10 +243,6 @@ class AnchorOutput extends ImmutableFeaturesOutput { * The amount of (stored) Mana held by the output. */ readonly mana: u64; - /** - * Metadata that can only be changed by the state controller. - */ - readonly stateMetadata?: HexEncodedString; /** * @param amount The amount of the output. @@ -254,7 +250,6 @@ class AnchorOutput extends ImmutableFeaturesOutput { * @param anchorId The anchor ID as hex-encoded string. * @param stateIndex A counter that must increase by 1 every time the anchor output is state transitioned. * @param unlockConditions The unlock conditions of the output. - * @param stateMetadata Metadata that can only be changed by the state controller. */ constructor( amount: u64, @@ -262,13 +257,11 @@ class AnchorOutput extends ImmutableFeaturesOutput { anchorId: AnchorId, stateIndex: number, unlockConditions: UnlockCondition[], - stateMetadata?: HexEncodedString, ) { super(OutputType.Account, amount, unlockConditions); this.anchorId = anchorId; this.stateIndex = stateIndex; this.mana = mana; - this.stateMetadata = stateMetadata; } } diff --git a/bindings/python/iota_sdk/types/output.py b/bindings/python/iota_sdk/types/output.py index 345bd73fab..37adc08d30 100644 --- a/bindings/python/iota_sdk/types/output.py +++ b/bindings/python/iota_sdk/types/output.py @@ -138,8 +138,6 @@ class AnchorOutput: Features that add utility to the output but do not impose unlocking conditions. immutable_features : Features that add utility to the output but do not impose unlocking conditions. These features need to be kept in future transitions of the UTXO state machine. - state_metadata : - Metadata that can only be changed by the state controller. type : The type of output. """ @@ -166,7 +164,6 @@ class AnchorOutput: metadata=config( decoder=deserialize_features )) - state_metadata: Optional[HexStr] = None type: int = field( default_factory=lambda: int( OutputType.Anchor), diff --git a/sdk/src/types/block/error.rs b/sdk/src/types/block/error.rs index 4249c4f3cb..a2782f12b9 100644 --- a/sdk/src/types/block/error.rs +++ b/sdk/src/types/block/error.rs @@ -18,8 +18,7 @@ use crate::types::block::{ output::{ feature::{BlockIssuerKeyCount, FeatureCount}, unlock_condition::UnlockConditionCount, - AccountId, AnchorId, ChainId, MetadataFeatureLength, NativeTokenCount, NftId, OutputIndex, StateMetadataLength, - TagFeatureLength, + AccountId, AnchorId, ChainId, MetadataFeatureLength, NativeTokenCount, NftId, OutputIndex, TagFeatureLength, }, payload::{ContextInputCount, InputCount, OutputCount, TagLength, TaggedDataLength}, protocol::ProtocolParametersHash, @@ -101,7 +100,6 @@ pub enum Error { byte: u8, }, InvalidBlockLength(usize), - InvalidStateMetadataLength(>::Error), InvalidManaValue(u64), InvalidMetadataFeatureLength(>::Error), InvalidNativeTokenCount(>::Error), @@ -300,7 +298,6 @@ impl fmt::Display for Error { Self::InvalidInputCount(count) => write!(f, "invalid input count: {count}"), Self::InvalidInputOutputIndex(index) => write!(f, "invalid input or output index: {index}"), Self::InvalidBlockLength(length) => write!(f, "invalid block length {length}"), - Self::InvalidStateMetadataLength(length) => write!(f, "invalid state metadata length: {length}"), Self::InvalidManaValue(mana) => write!(f, "invalid mana value: {mana}"), Self::InvalidMetadataFeatureLength(length) => { write!(f, "invalid metadata feature length: {length}") diff --git a/sdk/src/types/block/output/anchor.rs b/sdk/src/types/block/output/anchor.rs index b5ec4780a5..0a07857446 100644 --- a/sdk/src/types/block/output/anchor.rs +++ b/sdk/src/types/block/output/anchor.rs @@ -5,10 +5,8 @@ use alloc::{collections::BTreeSet, vec::Vec}; use hashbrown::HashMap; use packable::{ - bounded::BoundedU16, error::{UnpackError, UnpackErrorExt}, packer::Packer, - prefix::BoxedSlicePrefix, unpacker::Unpacker, Packable, PackableExt, }; @@ -44,7 +42,11 @@ impl From<&OutputId> for AnchorId { impl AnchorId { /// pub fn or_from_output_id(self, output_id: &OutputId) -> Self { - if self.is_null() { Self::from(output_id) } else { self } + if self.is_null() { + Self::from(output_id) + } else { + self + } } } @@ -94,7 +96,6 @@ pub struct AnchorOutputBuilder { native_tokens: BTreeSet, anchor_id: AnchorId, state_index: u32, - state_metadata: Vec, unlock_conditions: BTreeSet, features: BTreeSet, immutable_features: BTreeSet, @@ -120,7 +121,6 @@ impl AnchorOutputBuilder { native_tokens: BTreeSet::new(), anchor_id, state_index: 0, - state_metadata: Vec::new(), unlock_conditions: BTreeSet::new(), features: BTreeSet::new(), immutable_features: BTreeSet::new(), @@ -176,13 +176,6 @@ impl AnchorOutputBuilder { self } - /// - #[inline(always)] - pub fn with_state_metadata(mut self, state_metadata: impl Into>) -> Self { - self.state_metadata = state_metadata.into(); - self - } - /// Adds an [`UnlockCondition`] to the builder, if one does not already exist of that type. #[inline(always)] pub fn add_unlock_condition(mut self, unlock_condition: impl Into) -> Self { @@ -269,12 +262,6 @@ impl AnchorOutputBuilder { /// pub fn finish(self) -> Result { - let state_metadata = self - .state_metadata - .into_boxed_slice() - .try_into() - .map_err(Error::InvalidStateMetadataLength)?; - verify_index_counter(&self.anchor_id, self.state_index)?; let unlock_conditions = UnlockConditions::from_set(self.unlock_conditions)?; @@ -295,7 +282,6 @@ impl AnchorOutputBuilder { native_tokens: NativeTokens::from_set(self.native_tokens)?, anchor_id: self.anchor_id, state_index: self.state_index, - state_metadata, unlock_conditions, features, immutable_features, @@ -323,7 +309,6 @@ impl From<&AnchorOutput> for AnchorOutputBuilder { native_tokens: output.native_tokens.iter().copied().collect(), anchor_id: output.anchor_id, state_index: output.state_index, - state_metadata: output.state_metadata.to_vec(), unlock_conditions: output.unlock_conditions.iter().cloned().collect(), features: output.features.iter().cloned().collect(), immutable_features: output.immutable_features.iter().cloned().collect(), @@ -331,8 +316,6 @@ impl From<&AnchorOutput> for AnchorOutputBuilder { } } -pub(crate) type StateMetadataLength = BoundedU16<0, { AnchorOutput::STATE_METADATA_LENGTH_MAX }>; - /// Describes an anchor in the ledger that can be controlled by the state and governance controllers. #[derive(Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)] pub struct AnchorOutput { @@ -345,8 +328,6 @@ pub struct AnchorOutput { anchor_id: AnchorId, /// A counter that must increase by 1 every time the anchor is state transitioned. state_index: u32, - /// Metadata that can only be changed by the state controller. - state_metadata: BoxedSlicePrefix, /// Define how the output can be unlocked in a transaction. unlock_conditions: UnlockConditions, /// Features of the output. @@ -358,8 +339,6 @@ pub struct AnchorOutput { impl AnchorOutput { /// The [`Output`](crate::types::block::output::Output) kind of an [`AnchorOutput`]. pub const KIND: u8 = 2; - /// Maximum possible length in bytes of the state metadata. - pub const STATE_METADATA_LENGTH_MAX: u16 = 8192; /// The set of allowed [`UnlockCondition`]s for an [`AnchorOutput`]. pub const ALLOWED_UNLOCK_CONDITIONS: UnlockConditionFlags = UnlockConditionFlags::STATE_CONTROLLER_ADDRESS.union(UnlockConditionFlags::GOVERNOR_ADDRESS); @@ -416,11 +395,12 @@ impl AnchorOutput { self.state_index } - /// - #[inline(always)] - pub fn state_metadata(&self) -> &[u8] { - &self.state_metadata - } + // TODO https://github.com/iotaledger/iota-sdk/issues/1650 + // /// + // #[inline(always)] + // pub fn state_metadata(&self) -> &[u8] { + // &self.state_metadata + // } /// #[inline(always)] @@ -527,9 +507,9 @@ impl AnchorOutput { } } else if next_state.state_index == current_state.state_index { // Governance transition. - if current_state.amount != next_state.amount - || current_state.native_tokens != next_state.native_tokens - || current_state.state_metadata != next_state.state_metadata + if current_state.amount != next_state.amount || current_state.native_tokens != next_state.native_tokens + // TODO https://github.com/iotaledger/iota-sdk/issues/1650 + // || current_state.state_metadata != next_state.state_metadata { return Err(StateTransitionError::MutatedFieldWithoutRights); } @@ -607,7 +587,6 @@ impl Packable for AnchorOutput { self.native_tokens.pack(packer)?; self.anchor_id.pack(packer)?; self.state_index.pack(packer)?; - self.state_metadata.pack(packer)?; self.unlock_conditions.pack(packer)?; self.features.pack(packer)?; self.immutable_features.pack(packer)?; @@ -626,8 +605,6 @@ impl Packable for AnchorOutput { let native_tokens = NativeTokens::unpack::<_, VERIFY>(unpacker, &())?; let anchor_id = AnchorId::unpack::<_, VERIFY>(unpacker, &()).coerce()?; let state_index = u32::unpack::<_, VERIFY>(unpacker, &()).coerce()?; - let state_metadata = BoxedSlicePrefix::::unpack::<_, VERIFY>(unpacker, &()) - .map_packable_err(|err| Error::InvalidStateMetadataLength(err.into_prefix_err().into()))?; if VERIFY { verify_index_counter(&anchor_id, state_index).map_err(UnpackError::Packable)?; @@ -658,7 +635,6 @@ impl Packable for AnchorOutput { native_tokens, anchor_id, state_index, - state_metadata, unlock_conditions, features, immutable_features, @@ -701,14 +677,13 @@ fn verify_unlock_conditions(unlock_conditions: &UnlockConditions, anchor_id: &An #[cfg(feature = "serde")] pub(crate) mod dto { - use alloc::boxed::Box; use serde::{Deserialize, Serialize}; use super::*; use crate::{ types::block::{output::unlock_condition::dto::UnlockConditionDto, Error}, - utils::serde::{prefix_hex_bytes, string}, + utils::serde::string, }; /// Describes an anchor in the ledger that can be controlled by the state and governance controllers. @@ -725,8 +700,6 @@ pub(crate) mod dto { pub native_tokens: Vec, pub anchor_id: AnchorId, pub state_index: u32, - #[serde(skip_serializing_if = "<[_]>::is_empty", default, with = "prefix_hex_bytes")] - pub state_metadata: Box<[u8]>, pub unlock_conditions: Vec, #[serde(skip_serializing_if = "Vec::is_empty", default)] pub features: Vec, @@ -743,7 +716,6 @@ pub(crate) mod dto { native_tokens: value.native_tokens().to_vec(), anchor_id: *value.anchor_id(), state_index: value.state_index(), - state_metadata: value.state_metadata().into(), unlock_conditions: value.unlock_conditions().iter().map(Into::into).collect::<_>(), features: value.features().to_vec(), immutable_features: value.immutable_features().to_vec(), @@ -760,8 +732,7 @@ pub(crate) mod dto { .with_state_index(dto.state_index) .with_native_tokens(dto.native_tokens) .with_features(dto.features) - .with_immutable_features(dto.immutable_features) - .with_state_metadata(dto.state_metadata); + .with_immutable_features(dto.immutable_features); for u in dto.unlock_conditions { builder = builder.add_unlock_condition(UnlockCondition::from(u)); @@ -779,7 +750,6 @@ pub(crate) mod dto { native_tokens: Option>, anchor_id: &AnchorId, state_index: u32, - state_metadata: Option>, unlock_conditions: Vec, features: Option>, immutable_features: Option>, @@ -797,10 +767,6 @@ pub(crate) mod dto { builder = builder.with_native_tokens(native_tokens); } - if let Some(state_metadata) = state_metadata { - builder = builder.with_state_metadata(state_metadata); - } - let unlock_conditions = unlock_conditions .into_iter() .map(UnlockCondition::from) @@ -852,7 +818,6 @@ mod tests { Some(output.native_tokens().to_vec()), output.anchor_id(), output.state_index(), - output.state_metadata().to_owned().into(), output.unlock_conditions().iter().map(Into::into).collect(), Some(output.features().to_vec()), Some(output.immutable_features().to_vec()), @@ -871,7 +836,6 @@ mod tests { Some(builder.native_tokens.iter().copied().collect()), &builder.anchor_id, builder.state_index, - builder.state_metadata.to_owned().into(), builder.unlock_conditions.iter().map(Into::into).collect(), Some(builder.features.iter().cloned().collect()), Some(builder.immutable_features.iter().cloned().collect()), diff --git a/sdk/src/types/block/output/mod.rs b/sdk/src/types/block/output/mod.rs index dc0ab45a58..0f13e5bed2 100644 --- a/sdk/src/types/block/output/mod.rs +++ b/sdk/src/types/block/output/mod.rs @@ -47,7 +47,6 @@ pub use self::{ unlock_condition::{UnlockCondition, UnlockConditions}, }; pub(crate) use self::{ - anchor::StateMetadataLength, feature::{MetadataFeatureLength, TagFeatureLength}, native_token::NativeTokenCount, output_id::OutputIndex, diff --git a/sdk/src/wallet/operations/transaction/high_level/create_account.rs b/sdk/src/wallet/operations/transaction/high_level/create_account.rs index bc8b1d5134..b028221322 100644 --- a/sdk/src/wallet/operations/transaction/high_level/create_account.rs +++ b/sdk/src/wallet/operations/transaction/high_level/create_account.rs @@ -45,7 +45,6 @@ where /// address: None, /// immutable_metadata: Some(b"some immutable account metadata".to_vec()), /// metadata: Some(b"some account metadata".to_vec()), - /// state_metadata: Some(b"some account state metadata".to_vec()), /// }; /// /// let transaction = account.create_account_output(params, None).await?; From f8dcf8653629d01d5d4355bd34d1c7b419124049 Mon Sep 17 00:00:00 2001 From: Thibault Martinez Date: Mon, 20 Nov 2023 17:30:35 +0100 Subject: [PATCH 54/91] CLI: add ImplicitAccount kind str to output lists (#1653) --- cli/src/wallet_cli/mod.rs | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/cli/src/wallet_cli/mod.rs b/cli/src/wallet_cli/mod.rs index d1f3b4fb8d..304b582e76 100644 --- a/cli/src/wallet_cli/mod.rs +++ b/cli/src/wallet_cli/mod.rs @@ -1203,11 +1203,17 @@ async fn print_outputs(mut outputs: Vec, title: &str) -> Result<(), outputs.sort_unstable_by(outputs_ordering); for (i, output_data) in outputs.into_iter().enumerate() { + let kind_str = if output_data.output.is_implicit_account() { + "ImplicitAccount" + } else { + output_data.output.kind_str() + }; + println_log_info!( "{:<5}{}\t{}\t{}", i, &output_data.output_id, - output_data.output.kind_str(), + kind_str, if output_data.is_spent { "Spent" } else { "Unspent" }, ); } From 5608a7e2fc1c232ea2b081d150af6a631ed6d670 Mon Sep 17 00:00:00 2001 From: Thibault Martinez Date: Mon, 20 Nov 2023 18:20:19 +0100 Subject: [PATCH 55/91] Add missing allowed features to account (#1647) * Add missing allowed features to account * fmt * fmt --- sdk/src/types/block/output/account.rs | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/sdk/src/types/block/output/account.rs b/sdk/src/types/block/output/account.rs index cf8b230550..28bb146368 100644 --- a/sdk/src/types/block/output/account.rs +++ b/sdk/src/types/block/output/account.rs @@ -287,7 +287,10 @@ impl AccountOutput { /// The set of allowed [`UnlockCondition`]s for an [`AccountOutput`]. pub const ALLOWED_UNLOCK_CONDITIONS: UnlockConditionFlags = UnlockConditionFlags::ADDRESS; /// The set of allowed [`Feature`]s for an [`AccountOutput`]. - pub const ALLOWED_FEATURES: FeatureFlags = FeatureFlags::SENDER.union(FeatureFlags::METADATA); + pub const ALLOWED_FEATURES: FeatureFlags = FeatureFlags::SENDER + .union(FeatureFlags::METADATA) + .union(FeatureFlags::BLOCK_ISSUER) + .union(FeatureFlags::STAKING); /// The set of allowed immutable [`Feature`]s for an [`AccountOutput`]. pub const ALLOWED_IMMUTABLE_FEATURES: FeatureFlags = FeatureFlags::ISSUER.union(FeatureFlags::METADATA); From b6d14544abf82a43291762bd71641606b324ed3d Mon Sep 17 00:00:00 2001 From: Thoralf-M <46689931+Thoralf-M@users.noreply.github.com> Date: Mon, 20 Nov 2023 18:22:28 +0100 Subject: [PATCH 56/91] Update feature types (#1654) * Update feature types * fmt --------- Co-authored-by: Thibault Martinez --- .../nodejs/lib/types/block/output/feature.ts | 12 +++++++++--- bindings/python/iota_sdk/types/feature.py | 18 ++++++++++-------- sdk/src/types/block/output/anchor.rs | 6 +----- .../types/block/output/feature/block_issuer.rs | 2 +- .../types/block/output/feature/native_token.rs | 2 +- sdk/src/types/block/output/feature/staking.rs | 2 +- sdk/src/types/block/output/feature/tag.rs | 2 +- 7 files changed, 24 insertions(+), 20 deletions(-) diff --git a/bindings/nodejs/lib/types/block/output/feature.ts b/bindings/nodejs/lib/types/block/output/feature.ts index ba396da321..b7860615a5 100644 --- a/bindings/nodejs/lib/types/block/output/feature.ts +++ b/bindings/nodejs/lib/types/block/output/feature.ts @@ -21,10 +21,16 @@ enum FeatureType { Issuer = 1, /** A Metadata feature. */ Metadata = 2, + /** A StateMetadata feature. */ + StateMetadata = 3, /** A Tag feature. */ - Tag = 3, - BlockIssuer = 4, - Staking = 5, + Tag = 4, + /** A NativeToken feature. */ + NativeToken = 5, + /** A BlockIssuer feature. */ + BlockIssuer = 6, + /** A Staking feature. */ + Staking = 7, } /** The base class for features. */ diff --git a/bindings/python/iota_sdk/types/feature.py b/bindings/python/iota_sdk/types/feature.py index cb4064f4ac..4908be3b02 100644 --- a/bindings/python/iota_sdk/types/feature.py +++ b/bindings/python/iota_sdk/types/feature.py @@ -17,18 +17,20 @@ class FeatureType(IntEnum): Sender (0): The sender feature. Issuer (1): The issuer feature. Metadata (2): The metadata feature. - Tag (3): The tag feature. - NativeToken (4): The native token feature. - BlockIssuer (5): The block issuer feature. - Staking (6): The staking feature. + StateMetadata (3): The state metadata feature. + Tag (4): The tag feature. + NativeToken (5): The native token feature. + BlockIssuer (6): The block issuer feature. + Staking (7): The staking feature. """ Sender = 0 Issuer = 1 Metadata = 2 - Tag = 3 - NativeToken = 4 - BlockIssuer = 5 - Staking = 6 + StateMetadata = 3 + Tag = 4 + NativeToken = 5 + BlockIssuer = 6 + Staking = 7 @json diff --git a/sdk/src/types/block/output/anchor.rs b/sdk/src/types/block/output/anchor.rs index 0a07857446..0485a67528 100644 --- a/sdk/src/types/block/output/anchor.rs +++ b/sdk/src/types/block/output/anchor.rs @@ -42,11 +42,7 @@ impl From<&OutputId> for AnchorId { impl AnchorId { /// pub fn or_from_output_id(self, output_id: &OutputId) -> Self { - if self.is_null() { - Self::from(output_id) - } else { - self - } + if self.is_null() { Self::from(output_id) } else { self } } } diff --git a/sdk/src/types/block/output/feature/block_issuer.rs b/sdk/src/types/block/output/feature/block_issuer.rs index c544d936f1..545d1b4f13 100644 --- a/sdk/src/types/block/output/feature/block_issuer.rs +++ b/sdk/src/types/block/output/feature/block_issuer.rs @@ -210,7 +210,7 @@ pub struct BlockIssuerFeature { impl BlockIssuerFeature { /// The [`Feature`](crate::types::block::output::Feature) kind of a [`BlockIssuerFeature`]. - pub const KIND: u8 = 5; + pub const KIND: u8 = 6; /// Creates a new [`BlockIssuerFeature`]. #[inline(always)] diff --git a/sdk/src/types/block/output/feature/native_token.rs b/sdk/src/types/block/output/feature/native_token.rs index 52e298edff..191fec2070 100644 --- a/sdk/src/types/block/output/feature/native_token.rs +++ b/sdk/src/types/block/output/feature/native_token.rs @@ -10,7 +10,7 @@ pub struct NativeTokenFeature(NativeToken); impl NativeTokenFeature { /// The [`Feature`](crate::types::block::output::Feature) kind of [`NativeTokenFeature`]. - pub const KIND: u8 = 4; + pub const KIND: u8 = 5; /// Creates a new [`NativeTokenFeature`]. pub fn new(native_token: NativeToken) -> Self { diff --git a/sdk/src/types/block/output/feature/staking.rs b/sdk/src/types/block/output/feature/staking.rs index 9ab86dfd3d..34d8da0094 100644 --- a/sdk/src/types/block/output/feature/staking.rs +++ b/sdk/src/types/block/output/feature/staking.rs @@ -21,7 +21,7 @@ pub struct StakingFeature { impl StakingFeature { /// The [`Feature`](crate::types::block::output::Feature) kind of [`StakingFeature`]. - pub const KIND: u8 = 6; + pub const KIND: u8 = 7; /// Creates a new [`StakingFeature`]. pub fn new( diff --git a/sdk/src/types/block/output/feature/tag.rs b/sdk/src/types/block/output/feature/tag.rs index d062da26bf..01c84d79cd 100644 --- a/sdk/src/types/block/output/feature/tag.rs +++ b/sdk/src/types/block/output/feature/tag.rs @@ -39,7 +39,7 @@ impl TryFrom> for TagFeature { impl TagFeature { /// The [`Feature`](crate::types::block::output::Feature) kind of an [`TagFeature`]. - pub const KIND: u8 = 3; + pub const KIND: u8 = 4; /// Valid lengths for an [`TagFeature`]. pub const LENGTH_RANGE: RangeInclusive = 1..=64; From 3175a903a6b5d427503a4dea099c10d55f020645 Mon Sep 17 00:00:00 2001 From: Thoralf-M <46689931+Thoralf-M@users.noreply.github.com> Date: Tue, 21 Nov 2023 09:40:54 +0100 Subject: [PATCH 57/91] Nodejs: add Weighted and MultiAddress (#1645) * nodejs add Weighted and MultiAddress * Only allowed addresses in discriminator --------- Co-authored-by: Thibault Martinez --- bindings/nodejs/lib/types/block/address.ts | 70 ++++++++++++++++++++++ 1 file changed, 70 insertions(+) diff --git a/bindings/nodejs/lib/types/block/address.ts b/bindings/nodejs/lib/types/block/address.ts index b5b7c4889a..082c065632 100644 --- a/bindings/nodejs/lib/types/block/address.ts +++ b/bindings/nodejs/lib/types/block/address.ts @@ -24,6 +24,8 @@ enum AddressType { Anchor = 24, /** An implicit account creation address. */ ImplicitAccountCreation = 32, + /** A Multi address. */ + Multi = 40, /** An address with restricted capabilities. */ Restricted = 48, } @@ -78,6 +80,7 @@ abstract class Address { throw new Error('Invalid JSON'); } } + /** * An Ed25519 Address. */ @@ -256,6 +259,70 @@ class RestrictedAddress extends Address { } } +/** + * A weighted address. + */ +class WeightedAddress { + /** + * The unlocked address. + */ + @Type(() => Address, { + discriminator: { + property: 'type', + subTypes: [ + { value: Ed25519Address, name: AddressType.Ed25519 as any }, + { value: AccountAddress, name: AddressType.Account as any }, + { value: NftAddress, name: AddressType.Nft as any }, + { value: AnchorAddress, name: AddressType.Anchor as any }, + ], + }, + }) + readonly address: Address; + /** + * The weight of the unlocked address. + */ + readonly weight: number; + + /** + * @param address The unlocked address. + * @param weight The weight of the unlocked address. + */ + constructor(address: Address, weight: number) { + this.address = address; + this.weight = weight; + } +} + +/** + * An address that consists of addresses with weights and a threshold value. + * The Multi Address can be unlocked if the cumulative weight of all unlocked addresses is equal to or exceeds the + * threshold. + */ +class MultiAddress extends Address { + /** + * The weighted unlocked addresses. + */ + readonly addresses: WeightedAddress[]; + /** + * The threshold that needs to be reached by the unlocked addresses in order to unlock the multi address. + */ + readonly threshold: number; + + /** + * @param addresses The weighted unlocked addresses. + * @param threshold The threshold that needs to be reached by the unlocked addresses in order to unlock the multi address. + */ + constructor(addresses: WeightedAddress[], threshold: number) { + super(AddressType.Multi); + this.addresses = addresses; + this.threshold = threshold; + } + + toString(): string { + return JSON.stringify(this); + } +} + const AddressDiscriminator = { property: 'type', subTypes: [ @@ -267,6 +334,7 @@ const AddressDiscriminator = { value: ImplicitAccountCreationAddress, name: AddressType.ImplicitAccountCreation as any, }, + { value: MultiAddress, name: AddressType.Multi as any }, { value: RestrictedAddress, name: AddressType.Restricted as any }, ], }; @@ -281,5 +349,7 @@ export { NftAddress, AnchorAddress, ImplicitAccountCreationAddress, + WeightedAddress, + MultiAddress, RestrictedAddress, }; From 9f40b1a165d6e95614aa726d054e33bf84a5852c Mon Sep 17 00:00:00 2001 From: Thibault Martinez Date: Tue, 21 Nov 2023 10:09:30 +0100 Subject: [PATCH 58/91] Change *_ignore_errors to *_ignore_not_found (#1642) * Rename * Ignore not found * Missed account rename * format output list --- bindings/core/src/method_handler/client.rs | 2 +- cli/src/wallet_cli/mod.rs | 2 +- sdk/src/client/node_api/core/mod.rs | 50 ++++++++----------- .../syncing/addresses/output_ids/mod.rs | 12 ++--- sdk/src/wallet/operations/syncing/mod.rs | 2 +- sdk/src/wallet/operations/syncing/outputs.rs | 2 +- 6 files changed, 32 insertions(+), 38 deletions(-) diff --git a/bindings/core/src/method_handler/client.rs b/bindings/core/src/method_handler/client.rs index d68fea59b3..753c897297 100644 --- a/bindings/core/src/method_handler/client.rs +++ b/bindings/core/src/method_handler/client.rs @@ -251,7 +251,7 @@ pub(crate) async fn call_client_method_internal(client: &Client, method: ClientM } ClientMethod::GetOutputsIgnoreErrors { output_ids } => { let outputs_response = client - .get_outputs_with_metadata_ignore_errors(&output_ids) + .get_outputs_with_metadata_ignore_not_found(&output_ids) .await? .iter() .map(OutputWithMetadataResponse::from) diff --git a/cli/src/wallet_cli/mod.rs b/cli/src/wallet_cli/mod.rs index 304b582e76..5715f0dabe 100644 --- a/cli/src/wallet_cli/mod.rs +++ b/cli/src/wallet_cli/mod.rs @@ -1210,7 +1210,7 @@ async fn print_outputs(mut outputs: Vec, title: &str) -> Result<(), }; println_log_info!( - "{:<5}{}\t{}\t{}", + "{:<5}{} {:<16}{}", i, &output_data.output_id, kind_str, diff --git a/sdk/src/client/node_api/core/mod.rs b/sdk/src/client/node_api/core/mod.rs index ade26cf22a..7f31339855 100644 --- a/sdk/src/client/node_api/core/mod.rs +++ b/sdk/src/client/node_api/core/mod.rs @@ -8,7 +8,7 @@ pub mod routes; use packable::PackableExt; use crate::{ - client::{Client, Result}, + client::{node_api::error::Error as NodeApiError, Client, Error, Result}, types::block::output::{Output, OutputId, OutputMetadata, OutputWithMetadata}, }; @@ -31,16 +31,14 @@ impl Client { futures::future::try_join_all(output_ids.iter().map(|id| self.get_output(id))).await } - /// Requests outputs by their output ID in parallel, ignoring failed requests. + /// Requests outputs by their output ID in parallel, ignoring outputs not found. /// Useful to get data about spent outputs, that might not be pruned yet. - pub async fn get_outputs_ignore_errors(&self, output_ids: &[OutputId]) -> Result> { - Ok( - futures::future::join_all(output_ids.iter().map(|id| self.get_output(id))) - .await - .into_iter() - .filter_map(Result::ok) - .collect(), - ) + pub async fn get_outputs_ignore_not_found(&self, output_ids: &[OutputId]) -> Result> { + futures::future::join_all(output_ids.iter().map(|id| self.get_output(id))) + .await + .into_iter() + .filter(|res| !matches!(res, Err(Error::Node(NodeApiError::NotFound(_))))) + .collect() } /// Requests metadata for outputs by their output ID in parallel. @@ -48,15 +46,13 @@ impl Client { futures::future::try_join_all(output_ids.iter().map(|id| self.get_output_metadata(id))).await } - /// Requests metadata for outputs by their output ID in parallel, ignoring failed requests. - pub async fn get_outputs_metadata_ignore_errors(&self, output_ids: &[OutputId]) -> Result> { - Ok( - futures::future::join_all(output_ids.iter().map(|id| self.get_output_metadata(id))) - .await - .into_iter() - .filter_map(Result::ok) - .collect(), - ) + /// Requests metadata for outputs by their output ID in parallel, ignoring outputs not found. + pub async fn get_outputs_metadata_ignore_not_found(&self, output_ids: &[OutputId]) -> Result> { + futures::future::join_all(output_ids.iter().map(|id| self.get_output_metadata(id))) + .await + .into_iter() + .filter(|res| !matches!(res, Err(Error::Node(NodeApiError::NotFound(_))))) + .collect() } /// Requests outputs and their metadata by their output ID in parallel. @@ -64,18 +60,16 @@ impl Client { futures::future::try_join_all(output_ids.iter().map(|id| self.get_output_with_metadata(id))).await } - /// Requests outputs and their metadata by their output ID in parallel, ignoring failed requests. + /// Requests outputs and their metadata by their output ID in parallel, ignoring outputs not found. /// Useful to get data about spent outputs, that might not be pruned yet. - pub async fn get_outputs_with_metadata_ignore_errors( + pub async fn get_outputs_with_metadata_ignore_not_found( &self, output_ids: &[OutputId], ) -> Result> { - Ok( - futures::future::join_all(output_ids.iter().map(|id| self.get_output_with_metadata(id))) - .await - .into_iter() - .filter_map(Result::ok) - .collect(), - ) + futures::future::join_all(output_ids.iter().map(|id| self.get_output_with_metadata(id))) + .await + .into_iter() + .filter(|res| !matches!(res, Err(Error::Node(NodeApiError::NotFound(_))))) + .collect() } } diff --git a/sdk/src/wallet/operations/syncing/addresses/output_ids/mod.rs b/sdk/src/wallet/operations/syncing/addresses/output_ids/mod.rs index c9ddc7b6cb..994b036752 100644 --- a/sdk/src/wallet/operations/syncing/addresses/output_ids/mod.rs +++ b/sdk/src/wallet/operations/syncing/addresses/output_ids/mod.rs @@ -80,9 +80,9 @@ where tasks.push( async { let bech32_address = address.clone(); - let account = self.clone(); + let wallet = self.clone(); tokio::spawn(async move { - account + wallet .get_basic_output_ids_with_any_unlock_condition(bech32_address) .await }) @@ -108,9 +108,9 @@ where tasks.push( async { let bech32_address = address.clone(); - let account = self.clone(); + let wallet = self.clone(); tokio::spawn(async move { - account + wallet .get_nft_output_ids_with_any_unlock_condition(bech32_address) .await }) @@ -140,9 +140,9 @@ where async { let bech32_address = address.clone(); let sync_options = sync_options.clone(); - let account = self.clone(); + let wallet = self.clone(); tokio::spawn(async move { - account + wallet .get_account_and_foundry_output_ids(bech32_address, &sync_options) .await }) diff --git a/sdk/src/wallet/operations/syncing/mod.rs b/sdk/src/wallet/operations/syncing/mod.rs index 4ec2ac0045..a19b66b265 100644 --- a/sdk/src/wallet/operations/syncing/mod.rs +++ b/sdk/src/wallet/operations/syncing/mod.rs @@ -127,7 +127,7 @@ where log::debug!("[SYNC] spent_or_not_synced_outputs: {spent_or_not_synced_output_ids:?}"); let spent_or_unsynced_output_metadata_responses = self .client() - .get_outputs_metadata_ignore_errors(&spent_or_not_synced_output_ids) + .get_outputs_metadata_ignore_not_found(&spent_or_not_synced_output_ids) .await?; // Add the output response to the output ids, the output response is optional, because an output could be diff --git a/sdk/src/wallet/operations/syncing/outputs.rs b/sdk/src/wallet/operations/syncing/outputs.rs index dfa73891c5..bc048e8350 100644 --- a/sdk/src/wallet/operations/syncing/outputs.rs +++ b/sdk/src/wallet/operations/syncing/outputs.rs @@ -220,7 +220,7 @@ pub(crate) async fn get_inputs_for_transaction_payload( .collect::>(); client - .get_outputs_with_metadata_ignore_errors(&output_ids) + .get_outputs_with_metadata_ignore_not_found(&output_ids) .await .map_err(|e| e.into()) } From 805f5df80e058162edba55a158cc12699e9e1da6 Mon Sep 17 00:00:00 2001 From: Thibault Martinez Date: Tue, 21 Nov 2023 10:09:50 +0100 Subject: [PATCH 59/91] Add SecretManage::generate_ed25519_public_keys (#1655) * Add SecretManage::generate_ed25519_public_keys * Add doc --- sdk/src/client/secret/ledger_nano.rs | 74 +++++++++++++++------------- sdk/src/client/secret/mnemonic.rs | 16 ++---- sdk/src/client/secret/mod.rs | 38 +++++++++++--- sdk/src/client/secret/private_key.rs | 15 ++---- sdk/src/client/stronghold/secret.rs | 32 +++++------- 5 files changed, 90 insertions(+), 85 deletions(-) diff --git a/sdk/src/client/secret/ledger_nano.rs b/sdk/src/client/secret/ledger_nano.rs index e627293adf..7c38f03597 100644 --- a/sdk/src/client/secret/ledger_nano.rs +++ b/sdk/src/client/secret/ledger_nano.rs @@ -10,7 +10,10 @@ use std::{collections::HashMap, ops::Range}; use async_trait::async_trait; use crypto::{ keys::{bip44::Bip44, slip10::Segment}, - signatures::secp256k1_ecdsa::{self, EvmAddress}, + signatures::{ + ed25519, + secp256k1_ecdsa::{self, EvmAddress}, + }, }; use iota_ledger_nano::{ api::errors::APIError, get_app_config, get_buffer_size, get_ledger, get_opened_app, LedgerBIP32Index, @@ -26,7 +29,7 @@ use crate::{ LedgerNanoStatus, PreparedTransactionData, }, types::block::{ - address::{AccountAddress, Address, AnchorAddress, Ed25519Address, NftAddress}, + address::{AccountAddress, Address, AnchorAddress, NftAddress}, output::Output, payload::signed_transaction::SignedTransactionPayload, signature::{Ed25519Signature, Signature}, @@ -131,41 +134,44 @@ impl TryFrom for LedgerDeviceType { impl SecretManage for LedgerSecretManager { type Error = crate::client::Error; - async fn generate_ed25519_addresses( + async fn generate_ed25519_public_keys( &self, // https://github.com/satoshilabs/slips/blob/master/slip-0044.md // current ledger app only supports IOTA_COIN_TYPE, SHIMMER_COIN_TYPE and TESTNET_COIN_TYPE - coin_type: u32, - account_index: u32, - address_indexes: Range, - options: impl Into> + Send, - ) -> Result, Self::Error> { - let options = options.into().unwrap_or_default(); - let bip32_account = account_index.harden().into(); - - let bip32 = LedgerBIP32Index { - bip32_index: address_indexes.start.harden().into(), - bip32_change: u32::from(options.internal).harden().into(), - }; - - // lock the mutex to prevent multiple simultaneous requests to a ledger - let lock = self.mutex.lock().await; - - // get ledger - let ledger = get_ledger(coin_type, bip32_account, self.is_simulator).map_err(Error::from)?; - if ledger.is_debug_app() { - ledger - .set_non_interactive_mode(self.non_interactive) - .map_err(Error::from)?; - } - - let addresses = ledger - .get_addresses(options.ledger_nano_prompt, bip32, address_indexes.len()) - .map_err(Error::from)?; - - drop(lock); - - Ok(addresses.into_iter().map(Ed25519Address::new).collect()) + _coin_type: u32, + _account_index: u32, + _address_indexes: Range, + _options: impl Into> + Send, + ) -> Result, Self::Error> { + // need an update on the ledger C lib + todo!(); + // + // let options = options.into().unwrap_or_default(); + // let bip32_account = account_index.harden().into(); + + // let bip32 = LedgerBIP32Index { + // bip32_index: address_indexes.start.harden().into(), + // bip32_change: u32::from(options.internal).harden().into(), + // }; + + // // lock the mutex to prevent multiple simultaneous requests to a ledger + // let lock = self.mutex.lock().await; + + // // get ledger + // let ledger = get_ledger(coin_type, bip32_account, self.is_simulator).map_err(Error::from)?; + // if ledger.is_debug_app() { + // ledger + // .set_non_interactive_mode(self.non_interactive) + // .map_err(Error::from)?; + // } + + // let addresses = ledger + // .get_addresses(options.ledger_nano_prompt, bip32, address_indexes.len()) + // .map_err(Error::from)?; + + // drop(lock); + + // Ok(addresses.into_iter().map(Ed25519Address::new).collect()) } async fn generate_evm_addresses( diff --git a/sdk/src/client/secret/mnemonic.rs b/sdk/src/client/secret/mnemonic.rs index d955309c1e..ee705d0c8e 100644 --- a/sdk/src/client/secret/mnemonic.rs +++ b/sdk/src/client/secret/mnemonic.rs @@ -7,7 +7,6 @@ use std::ops::Range; use async_trait::async_trait; use crypto::{ - hashes::{blake2b::Blake2b256, Digest}, keys::{bip39::Mnemonic, bip44::Bip44, slip10::Seed}, signatures::{ ed25519, @@ -20,8 +19,7 @@ use super::{GenerateAddressOptions, SecretManage}; use crate::{ client::{api::PreparedTransactionData, Client, Error}, types::block::{ - address::Ed25519Address, payload::signed_transaction::SignedTransactionPayload, signature::Ed25519Signature, - unlock::Unlocks, + payload::signed_transaction::SignedTransactionPayload, signature::Ed25519Signature, unlock::Unlocks, }, }; @@ -40,13 +38,13 @@ impl std::fmt::Debug for MnemonicSecretManager { impl SecretManage for MnemonicSecretManager { type Error = Error; - async fn generate_ed25519_addresses( + async fn generate_ed25519_public_keys( &self, coin_type: u32, account_index: u32, address_indexes: Range, options: impl Into> + Send, - ) -> Result, Self::Error> { + ) -> Result, Self::Error> { let internal = options.into().map(|o| o.internal).unwrap_or_default(); Ok(address_indexes @@ -59,13 +57,9 @@ impl SecretManage for MnemonicSecretManager { let public_key = chain .derive(&self.0.to_master_key::()) .secret_key() - .public_key() - .to_bytes(); - - // Hash the public key to get the address - let result = Blake2b256::digest(public_key).into(); + .public_key(); - crate::client::Result::Ok(Ed25519Address::new(result)) + crate::client::Result::Ok(public_key) }) .collect::>()?) } diff --git a/sdk/src/client/secret/mod.rs b/sdk/src/client/secret/mod.rs index 9c6af509c8..7293ccfd24 100644 --- a/sdk/src/client/secret/mod.rs +++ b/sdk/src/client/secret/mod.rs @@ -26,8 +26,12 @@ use std::{collections::HashMap, fmt::Debug, ops::Range, str::FromStr}; use async_trait::async_trait; use crypto::{ + hashes::{blake2b::Blake2b256, Digest}, keys::{bip39::Mnemonic, bip44::Bip44}, - signatures::secp256k1_ecdsa::{self, EvmAddress}, + signatures::{ + ed25519, + secp256k1_ecdsa::{self, EvmAddress}, + }, }; use serde::{de::DeserializeOwned, Deserialize, Serialize}; use zeroize::Zeroizing; @@ -66,6 +70,17 @@ use crate::{ pub trait SecretManage: Send + Sync { type Error: std::error::Error + Send + Sync; + /// Generates public keys. + /// + /// For `coin_type`, see also . + async fn generate_ed25519_public_keys( + &self, + coin_type: u32, + account_index: u32, + address_indexes: Range, + options: impl Into> + Send, + ) -> Result, Self::Error>; + /// Generates addresses. /// /// For `coin_type`, see also . @@ -75,7 +90,14 @@ pub trait SecretManage: Send + Sync { account_index: u32, address_indexes: Range, options: impl Into> + Send, - ) -> Result, Self::Error>; + ) -> Result, Self::Error> { + Ok(self + .generate_ed25519_public_keys(coin_type, account_index, address_indexes, options) + .await? + .iter() + .map(|public_key| Ed25519Address::new(Blake2b256::digest(public_key.to_bytes()).into())) + .collect()) + } async fn generate_evm_addresses( &self, @@ -308,31 +330,31 @@ impl From<&SecretManager> for SecretManagerDto { impl SecretManage for SecretManager { type Error = Error; - async fn generate_ed25519_addresses( + async fn generate_ed25519_public_keys( &self, coin_type: u32, account_index: u32, address_indexes: Range, options: impl Into> + Send, - ) -> crate::client::Result> { + ) -> Result, Self::Error> { match self { #[cfg(feature = "stronghold")] Self::Stronghold(secret_manager) => Ok(secret_manager - .generate_ed25519_addresses(coin_type, account_index, address_indexes, options) + .generate_ed25519_public_keys(coin_type, account_index, address_indexes, options) .await?), #[cfg(feature = "ledger_nano")] Self::LedgerNano(secret_manager) => Ok(secret_manager - .generate_ed25519_addresses(coin_type, account_index, address_indexes, options) + .generate_ed25519_public_keys(coin_type, account_index, address_indexes, options) .await?), Self::Mnemonic(secret_manager) => { secret_manager - .generate_ed25519_addresses(coin_type, account_index, address_indexes, options) + .generate_ed25519_public_keys(coin_type, account_index, address_indexes, options) .await } #[cfg(feature = "private_key_secret_manager")] Self::PrivateKey(secret_manager) => { secret_manager - .generate_ed25519_addresses(coin_type, account_index, address_indexes, options) + .generate_ed25519_public_keys(coin_type, account_index, address_indexes, options) .await } Self::Placeholder => Err(Error::PlaceholderSecretManager), diff --git a/sdk/src/client/secret/private_key.rs b/sdk/src/client/secret/private_key.rs index f1b23862b6..0be00cd7a3 100644 --- a/sdk/src/client/secret/private_key.rs +++ b/sdk/src/client/secret/private_key.rs @@ -7,7 +7,6 @@ use std::ops::Range; use async_trait::async_trait; use crypto::{ - hashes::{blake2b::Blake2b256, Digest}, keys::bip44::Bip44, signatures::{ ed25519, @@ -20,8 +19,7 @@ use super::{GenerateAddressOptions, SecretManage}; use crate::{ client::{api::PreparedTransactionData, Error}, types::block::{ - address::Ed25519Address, payload::signed_transaction::SignedTransactionPayload, signature::Ed25519Signature, - unlock::Unlocks, + payload::signed_transaction::SignedTransactionPayload, signature::Ed25519Signature, unlock::Unlocks, }, }; @@ -38,19 +36,14 @@ impl std::fmt::Debug for PrivateKeySecretManager { impl SecretManage for PrivateKeySecretManager { type Error = Error; - async fn generate_ed25519_addresses( + async fn generate_ed25519_public_keys( &self, _coin_type: u32, _account_index: u32, _address_indexes: Range, _options: impl Into> + Send, - ) -> Result, Self::Error> { - let public_key = self.0.public_key().to_bytes(); - - // Hash the public key to get the address - let result = Blake2b256::digest(public_key).into(); - - crate::client::Result::Ok(vec![Ed25519Address::new(result)]) + ) -> Result, Self::Error> { + crate::client::Result::Ok(vec![self.0.public_key()]) } async fn generate_evm_addresses( diff --git a/sdk/src/client/stronghold/secret.rs b/sdk/src/client/stronghold/secret.rs index bdcc3e1dd3..cc0993a522 100644 --- a/sdk/src/client/stronghold/secret.rs +++ b/sdk/src/client/stronghold/secret.rs @@ -8,7 +8,6 @@ use std::ops::Range; use async_trait::async_trait; use crypto::{ - hashes::{blake2b::Blake2b256, Digest}, keys::{ bip39::{Mnemonic, MnemonicRef, Passphrase}, bip44::Bip44, @@ -36,8 +35,7 @@ use crate::{ stronghold::Error, }, types::block::{ - address::Ed25519Address, payload::signed_transaction::SignedTransactionPayload, signature::Ed25519Signature, - unlock::Unlocks, + payload::signed_transaction::SignedTransactionPayload, signature::Ed25519Signature, unlock::Unlocks, }, }; @@ -45,13 +43,13 @@ use crate::{ impl SecretManage for StrongholdAdapter { type Error = crate::client::Error; - async fn generate_ed25519_addresses( + async fn generate_ed25519_public_keys( &self, coin_type: u32, account_index: u32, address_indexes: Range, options: impl Into> + Send, - ) -> Result, Self::Error> { + ) -> Result, Self::Error> { // Prevent the method from being invoked when the key has been cleared from the memory. Do note that Stronghold // only asks for a key for reading / writing a snapshot, so without our cached key this method is invocable, but // it doesn't make sense when it comes to our user (signing transactions / generating addresses without a key). @@ -64,8 +62,8 @@ impl SecretManage for StrongholdAdapter { // Stronghold arguments. let seed_location = Slip10DeriveInput::Seed(Location::generic(SECRET_VAULT_PATH, SEED_RECORD_PATH)); - // Addresses to return. - let mut addresses = Vec::new(); + // Public keys to return. + let mut public_keys = Vec::new(); let internal = options.into().map(|o| o.internal).unwrap_or_default(); for address_index in address_indexes { @@ -104,17 +102,11 @@ impl SecretManage for StrongholdAdapter { .delete_secret(derive_location.record_path()) .map_err(Error::from)?; - // Hash the public key to get the address. - let hash = Blake2b256::digest(public_key); - - // Convert the hash into [Address]. - let address = Ed25519Address::new(hash.into()); - // Collect it. - addresses.push(address); + public_keys.push(public_key); } - Ok(addresses) + Ok(public_keys) } async fn generate_evm_addresses( @@ -589,12 +581,10 @@ mod tests { stronghold_adapter.clear_key().await; // Address generation returns an error when the key is cleared. - assert!( - stronghold_adapter - .generate_ed25519_addresses(IOTA_COIN_TYPE, 0, 0..1, None,) - .await - .is_err() - ); + assert!(stronghold_adapter + .generate_ed25519_addresses(IOTA_COIN_TYPE, 0, 0..1, None,) + .await + .is_err()); stronghold_adapter.set_password("drowssap".to_owned()).await.unwrap(); From 8fa1e3b372fe0e883af0bb439665d958ec5efa1c Mon Sep 17 00:00:00 2001 From: Thibault Martinez Date: Tue, 21 Nov 2023 10:57:56 +0100 Subject: [PATCH 60/91] Fix some typos (#1657) --- bindings/nodejs/examples/client/11-build-output.ts | 2 +- .../how_tos/advanced_transactions/advanced_transaction.ts | 2 +- bindings/nodejs/examples/how_tos/outputs/features.ts | 2 +- .../nodejs/examples/how_tos/outputs/unlock-conditions.ts | 2 +- bindings/nodejs/tests/client/infoMethods.spec.ts | 6 +++--- .../how_tos/advanced_transactions/advanced_transaction.py | 2 +- bindings/python/examples/how_tos/alias/create.py | 2 +- bindings/python/iota_sdk/types/node_info.py | 2 +- bindings/python/iota_sdk/types/transaction_options.py | 2 +- bindings/python/iota_sdk/wallet/prepared_transaction.py | 2 +- .../client/node_api_indexer/02_get_alias_outputs.rs | 2 +- .../client/node_api_indexer/04_get_foundry_outputs.rs | 2 +- sdk/examples/client/node_api_indexer/06_get_nft_outputs.rs | 2 +- .../how_tos/advanced_transactions/advanced_transaction.rs | 2 +- sdk/examples/how_tos/client/get_outputs.rs | 2 +- sdk/examples/how_tos/outputs/features.rs | 2 +- sdk/examples/how_tos/outputs/unlock_conditions.rs | 2 +- sdk/src/types/block/output/metadata.rs | 4 ++-- sdk/tests/wallet/transactions.rs | 2 +- 19 files changed, 22 insertions(+), 22 deletions(-) diff --git a/bindings/nodejs/examples/client/11-build-output.ts b/bindings/nodejs/examples/client/11-build-output.ts index a34ad3876d..882652d55f 100644 --- a/bindings/nodejs/examples/client/11-build-output.ts +++ b/bindings/nodejs/examples/client/11-build-output.ts @@ -41,7 +41,7 @@ async function run() { const addressUnlockCondition: UnlockCondition = new AddressUnlockCondition(new Ed25519Address(hexAddress)); - // Build most basic output with amound and a single address unlock condition + // Build most basic output with amount and a single address unlock condition const basicOutput = await client.buildBasicOutput({ amount: BigInt(1000000), unlockConditions: [addressUnlockCondition], diff --git a/bindings/nodejs/examples/how_tos/advanced_transactions/advanced_transaction.ts b/bindings/nodejs/examples/how_tos/advanced_transactions/advanced_transaction.ts index 2659d4f04d..94b36a0298 100644 --- a/bindings/nodejs/examples/how_tos/advanced_transactions/advanced_transaction.ts +++ b/bindings/nodejs/examples/how_tos/advanced_transactions/advanced_transaction.ts @@ -36,7 +36,7 @@ async function run() { // To sign a transaction we need to unlock stronghold. await wallet.setStrongholdPassword(process.env.STRONGHOLD_PASSWORD); - // Create an ouput with amount 1_000_000 and a timelock of 1 hour + // Create an output with amount 1_000_000 and a timelock of 1 hour const in_an_hour = Math.floor(Date.now() / 1000) + 3600; const basicOutput = await new Client({}).buildBasicOutput({ unlockConditions: [ diff --git a/bindings/nodejs/examples/how_tos/outputs/features.ts b/bindings/nodejs/examples/how_tos/outputs/features.ts index fa36407e24..f7c8743df8 100644 --- a/bindings/nodejs/examples/how_tos/outputs/features.ts +++ b/bindings/nodejs/examples/how_tos/outputs/features.ts @@ -19,7 +19,7 @@ require('dotenv').config({ path: '.env' }); // Run with command: // yarn run-example ./how_tos/outputs/features.ts -// Build ouputs with all features +// Build outputs with all features async function run() { initLogger(); diff --git a/bindings/nodejs/examples/how_tos/outputs/unlock-conditions.ts b/bindings/nodejs/examples/how_tos/outputs/unlock-conditions.ts index 06451c6b25..f677023bab 100644 --- a/bindings/nodejs/examples/how_tos/outputs/unlock-conditions.ts +++ b/bindings/nodejs/examples/how_tos/outputs/unlock-conditions.ts @@ -22,7 +22,7 @@ require('dotenv').config({ path: '.env' }); // Run with command: // yarn run-example ./how_tos/outputs/unlock-conditions.ts -// Build ouputs with all unlock conditions +// Build outputs with all unlock conditions async function run() { initLogger(); diff --git a/bindings/nodejs/tests/client/infoMethods.spec.ts b/bindings/nodejs/tests/client/infoMethods.spec.ts index d72d36f1b8..4b566023f1 100644 --- a/bindings/nodejs/tests/client/infoMethods.spec.ts +++ b/bindings/nodejs/tests/client/infoMethods.spec.ts @@ -41,10 +41,10 @@ describe.skip('Client info methods', () => { expect(nodeHealth).toBeTruthy(); }); - it('gets the unhealty nodes', async () => { - const unhealtyNodes = await client.unhealthyNodes(); + it('gets the unhealthy nodes', async () => { + const unhealthyNodes = await client.unhealthyNodes(); - expect(unhealtyNodes).toBeDefined(); + expect(unhealthyNodes).toBeDefined(); }); it('gets tips', async () => { diff --git a/bindings/python/examples/how_tos/advanced_transactions/advanced_transaction.py b/bindings/python/examples/how_tos/advanced_transactions/advanced_transaction.py index 25d64e04be..81c565cbdf 100644 --- a/bindings/python/examples/how_tos/advanced_transactions/advanced_transaction.py +++ b/bindings/python/examples/how_tos/advanced_transactions/advanced_transaction.py @@ -30,7 +30,7 @@ wallet.set_stronghold_password(os.environ["STRONGHOLD_PASSWORD"]) -# Create an ouput with amount 1_000_000 and a timelock of 1 hour +# Create an output with amount 1_000_000 and a timelock of 1 hour in_an_hour = int( time.mktime( (datetime.datetime.now() + diff --git a/bindings/python/examples/how_tos/alias/create.py b/bindings/python/examples/how_tos/alias/create.py index 2f2838eef1..73e4fb4a5f 100644 --- a/bindings/python/examples/how_tos/alias/create.py +++ b/bindings/python/examples/how_tos/alias/create.py @@ -6,7 +6,7 @@ load_dotenv() -# In this example we will create an alias ouput +# In this example we will create an alias output wallet = Wallet(os.environ['WALLET_DB_PATH']) diff --git a/bindings/python/iota_sdk/types/node_info.py b/bindings/python/iota_sdk/types/node_info.py index c83cb86efc..ec0737c269 100644 --- a/bindings/python/iota_sdk/types/node_info.py +++ b/bindings/python/iota_sdk/types/node_info.py @@ -130,7 +130,7 @@ class NodeInfo: version: The version of the node. status: The status of the node. metrics: Some node metrics. - supportedProtocolVersions: Supported protocol versions by the ndoe. + supportedProtocolVersions: Supported protocol versions by the node. protocol: Information about the running protocol. pendingProtocolParameters: A list of pending (not yet active) protocol parameters. baseToken: Information about the base token. diff --git a/bindings/python/iota_sdk/types/transaction_options.py b/bindings/python/iota_sdk/types/transaction_options.py index 2c38cf33dc..7ae2f415aa 100644 --- a/bindings/python/iota_sdk/types/transaction_options.py +++ b/bindings/python/iota_sdk/types/transaction_options.py @@ -35,7 +35,7 @@ def as_dict(self): class RemainderValueStrategy(Enum): - """Remainder value stragegy variants. + """Remainder value strategy variants. Attributes: ChangeAddress: Allows to move the remainder value to a change address. diff --git a/bindings/python/iota_sdk/wallet/prepared_transaction.py b/bindings/python/iota_sdk/wallet/prepared_transaction.py index 9231683c22..464a3d5f4e 100644 --- a/bindings/python/iota_sdk/wallet/prepared_transaction.py +++ b/bindings/python/iota_sdk/wallet/prepared_transaction.py @@ -24,7 +24,7 @@ def __init__( account: Account, prepared_transaction_data: Union[PreparedTransactionData, Dict] ): - """Initalize `Self`. + """Initialize `Self`. """ self.account = account self.prepared_transaction_data_dto = prepared_transaction_data diff --git a/sdk/examples/client/node_api_indexer/02_get_alias_outputs.rs b/sdk/examples/client/node_api_indexer/02_get_alias_outputs.rs index 8ecb7150ba..5873991e76 100644 --- a/sdk/examples/client/node_api_indexer/02_get_alias_outputs.rs +++ b/sdk/examples/client/node_api_indexer/02_get_alias_outputs.rs @@ -1,7 +1,7 @@ // Copyright 2022 IOTA Stiftung // SPDX-License-Identifier: Apache-2.0 -//! Gets all alias output ids accociated with an address by querying the +//! Gets all alias output ids associated with an address by querying the //! `api/indexer/v1/outputs/alias` node endpoint. //! //! Make sure that the node has the indexer plugin enabled. diff --git a/sdk/examples/client/node_api_indexer/04_get_foundry_outputs.rs b/sdk/examples/client/node_api_indexer/04_get_foundry_outputs.rs index 3b8f506495..e07becadff 100644 --- a/sdk/examples/client/node_api_indexer/04_get_foundry_outputs.rs +++ b/sdk/examples/client/node_api_indexer/04_get_foundry_outputs.rs @@ -1,7 +1,7 @@ // Copyright 2022 IOTA Stiftung // SPDX-License-Identifier: Apache-2.0 -//! Gets all foundry output ids accociated with an alias address by querying the +//! Gets all foundry output ids associated with an alias address by querying the //! `api/indexer/v1/outputs/foundry` node endpoint. //! //! Make sure that the node has the indexer plugin enabled. diff --git a/sdk/examples/client/node_api_indexer/06_get_nft_outputs.rs b/sdk/examples/client/node_api_indexer/06_get_nft_outputs.rs index 0ce95267c0..a765b0d3be 100644 --- a/sdk/examples/client/node_api_indexer/06_get_nft_outputs.rs +++ b/sdk/examples/client/node_api_indexer/06_get_nft_outputs.rs @@ -1,7 +1,7 @@ // Copyright 2022 IOTA Stiftung // SPDX-License-Identifier: Apache-2.0 -//! Gets all nft output ids accociated with an address by querying the +//! Gets all nft output ids associated with an address by querying the //! `api/indexer/v1/outputs/nft` node endpoint. //! //! Make sure that the node has the indexer plugin enabled. diff --git a/sdk/examples/how_tos/advanced_transactions/advanced_transaction.rs b/sdk/examples/how_tos/advanced_transactions/advanced_transaction.rs index 39bd9ccd1b..fafa2cc4b6 100644 --- a/sdk/examples/how_tos/advanced_transactions/advanced_transaction.rs +++ b/sdk/examples/how_tos/advanced_transactions/advanced_transaction.rs @@ -37,7 +37,7 @@ async fn main() -> Result<()> { .set_stronghold_password(std::env::var("STRONGHOLD_PASSWORD").unwrap()) .await?; - // Create an ouput with amount 1_000_000 and a timelock of 1 hour + // Create an output with amount 1_000_000 and a timelock of 1 hour let in_an_hour = (std::time::SystemTime::now() + std::time::Duration::from_secs(3600)) .duration_since(std::time::UNIX_EPOCH) .expect("clock went backwards") diff --git a/sdk/examples/how_tos/client/get_outputs.rs b/sdk/examples/how_tos/client/get_outputs.rs index 7711a1d990..46f4d23309 100644 --- a/sdk/examples/how_tos/client/get_outputs.rs +++ b/sdk/examples/how_tos/client/get_outputs.rs @@ -1,7 +1,7 @@ // Copyright 2022 IOTA Stiftung // SPDX-License-Identifier: Apache-2.0 -//! Gets all basic output ids accociated with an address by querying the +//! Gets all basic output ids associated with an address by querying the //! `api/indexer/v1/outputs/basic` node endpoint. //! //! Make sure that the node has the indexer plugin enabled. diff --git a/sdk/examples/how_tos/outputs/features.rs b/sdk/examples/how_tos/outputs/features.rs index ca8367531e..41db52055c 100644 --- a/sdk/examples/how_tos/outputs/features.rs +++ b/sdk/examples/how_tos/outputs/features.rs @@ -66,7 +66,7 @@ async fn main() -> Result<()> { .finish_output(token_supply)?, ]; - // Convert ouput array to json array + // Convert output array to json array let json_outputs = serde_json::to_string_pretty(&outputs.iter().map(OutputDto::from).collect::>())?; println!("{json_outputs}"); diff --git a/sdk/examples/how_tos/outputs/unlock_conditions.rs b/sdk/examples/how_tos/outputs/unlock_conditions.rs index 14dbdfdd9b..c0dec1fd49 100644 --- a/sdk/examples/how_tos/outputs/unlock_conditions.rs +++ b/sdk/examples/how_tos/outputs/unlock_conditions.rs @@ -80,7 +80,7 @@ async fn main() -> Result<()> { .finish_output(token_supply)?, ]; - // Convert ouput array to json array + // Convert output array to json array let json_outputs = serde_json::to_string_pretty(&outputs.iter().map(OutputDto::from).collect::>())?; println!("{json_outputs}"); diff --git a/sdk/src/types/block/output/metadata.rs b/sdk/src/types/block/output/metadata.rs index 0589efbf12..b0ad30807e 100644 --- a/sdk/src/types/block/output/metadata.rs +++ b/sdk/src/types/block/output/metadata.rs @@ -73,12 +73,12 @@ impl OutputMetadata { self.output_id.index() } - /// Returns whether the output is spent ot not. + /// Returns whether the output is spent or not. pub fn is_spent(&self) -> bool { self.is_spent } - /// Sets whether the output is spent ot not. + /// Sets whether the output is spent or not. pub fn set_spent(&mut self, spent: bool) { self.is_spent = spent; } diff --git a/sdk/tests/wallet/transactions.rs b/sdk/tests/wallet/transactions.rs index ccadd4c953..3fdf3d9276 100644 --- a/sdk/tests/wallet/transactions.rs +++ b/sdk/tests/wallet/transactions.rs @@ -296,7 +296,7 @@ async fn prepare_transaction_ledger() -> Result<()> { ) .await?; - let data = receiver.recv().await.expect("never recieved event"); + let data = receiver.recv().await.expect("never received event"); assert_eq!(data.essence, tx.payload.essence().into()); for (sign, input) in data.inputs_data.iter().zip(tx.inputs) { assert_eq!(sign.output, input.output); From 71380a648d463f337b72d563a5d17d11781712d4 Mon Sep 17 00:00:00 2001 From: Thibault Martinez Date: Tue, 21 Nov 2023 14:14:28 +0100 Subject: [PATCH 61/91] Fix def_is_as_opt panic message (#1659) --- sdk/src/types/block/macro.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sdk/src/types/block/macro.rs b/sdk/src/types/block/macro.rs index 74b74a6ec8..9ddf21391e 100644 --- a/sdk/src/types/block/macro.rs +++ b/sdk/src/types/block/macro.rs @@ -343,7 +343,7 @@ macro_rules! def_is_as_opt { if let Self::$name(v) = self { v } else { - panic!("{} called on a non-{} {}", stringify!([]), stringify!([<$name>]), stringify!($type:snake)); + panic!("{} called on a non-{} {}", stringify!([]), stringify!([<$name>]), stringify!([<$type:snake>])); } } From 14a86f3e7d36bc58d8b49a082781d17f1d961c60 Mon Sep 17 00:00:00 2001 From: Rohit Patil Date: Tue, 21 Nov 2023 19:25:54 +0530 Subject: [PATCH 62/91] patch: check environment variable existence (#1427) * patch: check evironment variable existence * patch: environment variable existence checks * remove empty line Co-authored-by: Thoralf-M <46689931+Thoralf-M@users.noreply.github.com> * patch: remove unnecessary checks * Update bindings/nodejs/examples/client/06-simple-block.ts * patch: fix lint errors --------- Co-authored-by: Thoralf-M <46689931+Thoralf-M@users.noreply.github.com> --- .../nodejs/examples/client/04-get-output.ts | 8 +++++--- .../examples/client/05-get-address-balance.ts | 13 ++++++------- .../nodejs/examples/client/06-simple-block.ts | 8 +++++--- .../examples/client/07-get-block-data.ts | 8 +++++--- .../nodejs/examples/client/08-data-block.ts | 8 +++++--- .../nodejs/examples/client/09-transaction.ts | 14 ++++++-------- bindings/nodejs/examples/client/10-mqtt.ts | 8 +++++--- .../nodejs/examples/client/11-build-output.ts | 8 +++++--- .../examples/client/12-get-raw-block.ts | 8 +++++--- .../examples/client/13-build-alias-output.ts | 8 +++++--- .../client/14-build-foundry-output.ts | 12 +++++------- .../examples/client/15-build-nft-output.ts | 8 +++++--- .../examples/client/16-custom-plugin.ts | 8 +++++--- .../offline_signing/00-address-generation.ts | 11 ++++++----- .../01-transaction-preparation.ts | 8 +++++--- .../offline_signing/02-transaction-signing.ts | 11 ++++++----- .../client/offline_signing/03-send-block.ts | 8 +++++--- .../examples/evm/send-evm-transaction.ts | 10 ++++++---- .../examples/exchange/3-check-balance.ts | 10 ++++++---- .../examples/exchange/4-listen-events.ts | 10 ++++++---- .../accounts_and_addresses/check-balance.ts | 6 ++++-- .../accounts_and_addresses/list-accounts.ts | 6 ++++-- .../accounts_and_addresses/list-addresses.ts | 6 ++++-- .../accounts_and_addresses/list-outputs.ts | 6 ++++-- .../list-transactions.ts | 6 ++++-- .../advanced_transaction.ts | 18 +++++++++++++----- .../claim_transaction.ts | 18 +++++++++++++----- .../send_micro_transaction.ts | 18 +++++++++++++----- .../nodejs/examples/how_tos/alias/create.ts | 5 +++-- .../nodejs/examples/how_tos/alias/destroy.ts | 5 +++-- .../how_tos/alias/governance-transition.ts | 5 +++-- .../how_tos/alias/state-transition.ts | 5 +++-- .../how_tos/alias_wallet/request-funds.ts | 8 +++++--- .../how_tos/alias_wallet/transaction.ts | 14 +++++++++----- .../examples/how_tos/client/get-health.ts | 12 ++++++++---- .../examples/how_tos/client/get-info.ts | 8 +++++--- .../examples/how_tos/client/get-outputs.ts | 8 +++++--- .../examples/how_tos/native_tokens/burn.ts | 5 +++++ .../examples/how_tos/native_tokens/create.ts | 5 +++++ .../how_tos/native_tokens/destroy-foundry.ts | 5 +++++ .../examples/how_tos/native_tokens/melt.ts | 5 +++++ .../examples/how_tos/native_tokens/mint.ts | 5 +++++ .../examples/how_tos/native_tokens/send.ts | 5 +++++ .../nft_collection/00_mint_issuer_nft.ts | 18 +++++++++++++----- .../nft_collection/01_mint_collection_nft.ts | 18 +++++++++++++----- .../nodejs/examples/how_tos/nfts/burn_nft.ts | 18 +++++++++++++----- .../nodejs/examples/how_tos/nfts/mint_nft.ts | 19 +++++++++++++------ .../nodejs/examples/how_tos/nfts/send_nft.ts | 18 +++++++++++++----- .../sign_and_verify_ed25519/sign-ed25519.ts | 3 ++- .../sign-secp256k1_ecdsa.ts | 3 ++- .../simple_transaction/request-funds.ts | 8 +++++--- .../simple_transaction/simple-transaction.ts | 16 +++++++++++----- .../secret_manager/generate-addresses.ts | 11 ++++++----- .../wallet/06-send-micro-transaction.ts | 7 +++++++ .../migrate-db-chrysalis-to-stardust.ts | 3 ++- .../migrate-stronghold-snapshot-v2-to-v3.ts | 3 ++- 56 files changed, 342 insertions(+), 174 deletions(-) diff --git a/bindings/nodejs/examples/client/04-get-output.ts b/bindings/nodejs/examples/client/04-get-output.ts index 38e26d6b8c..f2d47434d2 100644 --- a/bindings/nodejs/examples/client/04-get-output.ts +++ b/bindings/nodejs/examples/client/04-get-output.ts @@ -10,13 +10,15 @@ require('dotenv').config({ path: '.env' }); // In this example we will get output from a known outputId. async function run() { initLogger(); - if (!process.env.NODE_URL) { - throw new Error('.env NODE_URL is undefined, see .env.example'); + for (const envVar of ['NODE_URL']) { + if (!(envVar in process.env)) { + throw new Error(`.env ${envVar} is undefined, see .env.example`); + } } const client = new Client({ // Insert your node URL in the .env. - nodes: [process.env.NODE_URL], + nodes: [process.env.NODE_URL as string], localPow: true, }); try { diff --git a/bindings/nodejs/examples/client/05-get-address-balance.ts b/bindings/nodejs/examples/client/05-get-address-balance.ts index 9f8491b8cb..ebf47bd31d 100644 --- a/bindings/nodejs/examples/client/05-get-address-balance.ts +++ b/bindings/nodejs/examples/client/05-get-address-balance.ts @@ -11,21 +11,20 @@ require('dotenv').config({ path: '.env' }); // conditions and sum the amounts and native tokens. async function run() { initLogger(); - if (!process.env.NODE_URL) { - throw new Error('.env NODE_URL is undefined, see .env.example'); + for (const envVar of ['NODE_URL', 'MNEMONIC']) { + if (!(envVar in process.env)) { + throw new Error(`.env ${envVar} is undefined, see .env.example`); + } } const client = new Client({ // Insert your node URL in the .env. - nodes: [process.env.NODE_URL], + nodes: [process.env.NODE_URL as string], }); try { - if (!process.env.MNEMONIC) { - throw new Error('.env MNEMONIC is undefined, see .env.example'); - } const secretManager = new SecretManager({ - mnemonic: process.env.MNEMONIC, + mnemonic: process.env.MNEMONIC as string, }); // Generate the first address diff --git a/bindings/nodejs/examples/client/06-simple-block.ts b/bindings/nodejs/examples/client/06-simple-block.ts index 423e850a6f..dcd26aca7b 100644 --- a/bindings/nodejs/examples/client/06-simple-block.ts +++ b/bindings/nodejs/examples/client/06-simple-block.ts @@ -10,13 +10,15 @@ require('dotenv').config({ path: '.env' }); // In this example we will send a block without a payload. async function run() { initLogger(); - if (!process.env.NODE_URL) { - throw new Error('.env NODE_URL is undefined, see .env.example'); + for (const envVar of ['NODE_URL', 'EXPLORER_URL']) { + if (!(envVar in process.env)) { + throw new Error(`.env ${envVar} is undefined, see .env.example`); + } } const client = new Client({ // Insert your node URL in the .env. - nodes: [process.env.NODE_URL], + nodes: [process.env.NODE_URL as string], localPow: true, }); diff --git a/bindings/nodejs/examples/client/07-get-block-data.ts b/bindings/nodejs/examples/client/07-get-block-data.ts index 7a5750937a..f8a45ec4ec 100644 --- a/bindings/nodejs/examples/client/07-get-block-data.ts +++ b/bindings/nodejs/examples/client/07-get-block-data.ts @@ -10,13 +10,15 @@ require('dotenv').config({ path: '.env' }); // In this example we will send a block and get the data and metadata for it. async function run() { initLogger(); - if (!process.env.NODE_URL) { - throw new Error('.env NODE_URL is undefined, see .env.example'); + for (const envVar of ['NODE_URL']) { + if (!(envVar in process.env)) { + throw new Error(`.env ${envVar} is undefined, see .env.example`); + } } const client = new Client({ // Insert your node URL in the .env. - nodes: [process.env.NODE_URL], + nodes: [process.env.NODE_URL as string], }); try { diff --git a/bindings/nodejs/examples/client/08-data-block.ts b/bindings/nodejs/examples/client/08-data-block.ts index 1d46d0da03..c7a84b46d0 100644 --- a/bindings/nodejs/examples/client/08-data-block.ts +++ b/bindings/nodejs/examples/client/08-data-block.ts @@ -17,13 +17,15 @@ require('dotenv').config({ path: '.env' }); // In this example we will send a block with a tagged data payload. async function run() { initLogger(); - if (!process.env.NODE_URL) { - throw new Error('.env NODE_URL is undefined, see .env.example'); + for (const envVar of ['NODE_URL', 'EXPLORER_URL']) { + if (!(envVar in process.env)) { + throw new Error(`.env ${envVar} is undefined, see .env.example`); + } } const client = new Client({ // Insert your node URL in the .env. - nodes: [process.env.NODE_URL], + nodes: [process.env.NODE_URL as string], }); const options = { diff --git a/bindings/nodejs/examples/client/09-transaction.ts b/bindings/nodejs/examples/client/09-transaction.ts index a205341003..636d767a3f 100644 --- a/bindings/nodejs/examples/client/09-transaction.ts +++ b/bindings/nodejs/examples/client/09-transaction.ts @@ -10,25 +10,23 @@ require('dotenv').config({ path: '.env' }); // In this example we will send a transaction. async function run() { initLogger(); - if (!process.env.NODE_URL) { - throw new Error('.env NODE_URL is undefined, see .env.example'); + for (const envVar of ['NODE_URL', 'MNEMONIC', 'EXPLORER_URL']) { + if (!(envVar in process.env)) { + throw new Error(`.env ${envVar} is undefined, see .env.example`); + } } const client = new Client({ // Insert your node URL in the .env. - nodes: [process.env.NODE_URL], + nodes: [process.env.NODE_URL as string], localPow: true, }); try { - if (!process.env.MNEMONIC) { - throw new Error('.env MNEMONIC is undefined, see .env.example'); - } - // Configure your own mnemonic in ".env". Since the output amount cannot be zero, the mnemonic must contain non-zero // balance const secretManager = { - mnemonic: process.env.MNEMONIC, + mnemonic: process.env.MNEMONIC as string, }; // We generate an address from our own mnemonic so that we send the funds to ourselves diff --git a/bindings/nodejs/examples/client/10-mqtt.ts b/bindings/nodejs/examples/client/10-mqtt.ts index 41c4e5ba55..77b095a02e 100644 --- a/bindings/nodejs/examples/client/10-mqtt.ts +++ b/bindings/nodejs/examples/client/10-mqtt.ts @@ -18,14 +18,16 @@ require('dotenv').config({ path: '.env' }); // In this example we will listen to MQTT topics and print the block and milestone payloads. async function run() { initLogger(); - if (!process.env.NODE_URL) { - throw new Error('.env NODE_URL is undefined, see .env.example'); + for (const envVar of ['NODE_URL']) { + if (!(envVar in process.env)) { + throw new Error(`.env ${envVar} is undefined, see .env.example`); + } } // Connecting to a MQTT broker using raw ip doesn't work with TCP. This is a limitation of rustls. const client = new Client({ // Insert your node URL in the .env. - nodes: [process.env.NODE_URL], + nodes: [process.env.NODE_URL as string], }); // Array of topics to subscribe to diff --git a/bindings/nodejs/examples/client/11-build-output.ts b/bindings/nodejs/examples/client/11-build-output.ts index 882652d55f..8dbdd1f18e 100644 --- a/bindings/nodejs/examples/client/11-build-output.ts +++ b/bindings/nodejs/examples/client/11-build-output.ts @@ -24,13 +24,15 @@ require('dotenv').config({ path: '.env' }); // In this example we will build a basic output with various options. async function run() { initLogger(); - if (!process.env.NODE_URL) { - throw new Error('.env NODE_URL is undefined, see .env.example'); + for (const envVar of ['NODE_URL']) { + if (!(envVar in process.env)) { + throw new Error(`.env ${envVar} is undefined, see .env.example`); + } } const client = new Client({ // Insert your node URL in the .env. - nodes: [process.env.NODE_URL], + nodes: [process.env.NODE_URL as string], }); try { diff --git a/bindings/nodejs/examples/client/12-get-raw-block.ts b/bindings/nodejs/examples/client/12-get-raw-block.ts index 4f765a69f3..b461ff1d4c 100644 --- a/bindings/nodejs/examples/client/12-get-raw-block.ts +++ b/bindings/nodejs/examples/client/12-get-raw-block.ts @@ -10,13 +10,15 @@ require('dotenv').config({ path: '.env' }); // In this example we will get the raw bytes of a block. async function run() { initLogger(); - if (!process.env.NODE_URL) { - throw new Error('.env NODE_URL is undefined, see .env.example'); + for (const envVar of ['NODE_URL']) { + if (!(envVar in process.env)) { + throw new Error(`.env ${envVar} is undefined, see .env.example`); + } } const client = new Client({ // Insert your node URL in the .env. - nodes: [process.env.NODE_URL], + nodes: [process.env.NODE_URL as string], }); try { diff --git a/bindings/nodejs/examples/client/13-build-alias-output.ts b/bindings/nodejs/examples/client/13-build-alias-output.ts index b7585044d3..27fb2db0e6 100644 --- a/bindings/nodejs/examples/client/13-build-alias-output.ts +++ b/bindings/nodejs/examples/client/13-build-alias-output.ts @@ -21,13 +21,15 @@ require('dotenv').config({ path: '.env' }); // In this example we will build an alias output. async function run() { initLogger(); - if (!process.env.NODE_URL) { - throw new Error('.env NODE_URL is undefined, see .env.example'); + for (const envVar of ['NODE_URL']) { + if (!(envVar in process.env)) { + throw new Error(`.env ${envVar} is undefined, see .env.example`); + } } const client = new Client({ // Insert your node URL in the .env. - nodes: [process.env.NODE_URL], + nodes: [process.env.NODE_URL as string], }); try { diff --git a/bindings/nodejs/examples/client/14-build-foundry-output.ts b/bindings/nodejs/examples/client/14-build-foundry-output.ts index a6e58ac134..0665ee6638 100644 --- a/bindings/nodejs/examples/client/14-build-foundry-output.ts +++ b/bindings/nodejs/examples/client/14-build-foundry-output.ts @@ -16,20 +16,18 @@ require('dotenv').config({ path: '.env' }); // In this example we will build a foundry output. async function run() { initLogger(); - if (!process.env.NODE_URL) { - throw new Error('.env NODE_URL is undefined, see .env.example'); + for (const envVar of ['NODE_URL', 'MNEMONIC']) { + if (!(envVar in process.env)) { + throw new Error(`.env ${envVar} is undefined, see .env.example`); + } } const client = new Client({ // Insert your node URL in the .env. - nodes: [process.env.NODE_URL], + nodes: [process.env.NODE_URL as string], }); try { - if (!process.env.MNEMONIC) { - throw new Error('.env MNEMONIC is undefined, see .env.example'); - } - const aliasId = '0xff311f59790ccb85343a36fbac2f06d233734794404142b308c13f2c616935b5'; diff --git a/bindings/nodejs/examples/client/15-build-nft-output.ts b/bindings/nodejs/examples/client/15-build-nft-output.ts index 161ce1f9d1..c484c7caed 100644 --- a/bindings/nodejs/examples/client/15-build-nft-output.ts +++ b/bindings/nodejs/examples/client/15-build-nft-output.ts @@ -22,13 +22,15 @@ require('dotenv').config({ path: '.env' }); // In this example we will build an NFT output. async function run() { initLogger(); - if (!process.env.NODE_URL) { - throw new Error('.env NODE_URL is undefined, see .env.example'); + for (const envVar of ['NODE_URL']) { + if (!(envVar in process.env)) { + throw new Error(`.env ${envVar} is undefined, see .env.example`); + } } const client = new Client({ // Insert your node URL in the .env. - nodes: [process.env.NODE_URL], + nodes: [process.env.NODE_URL as string], }); try { diff --git a/bindings/nodejs/examples/client/16-custom-plugin.ts b/bindings/nodejs/examples/client/16-custom-plugin.ts index ecf441d9c8..e92ab1b02f 100644 --- a/bindings/nodejs/examples/client/16-custom-plugin.ts +++ b/bindings/nodejs/examples/client/16-custom-plugin.ts @@ -10,13 +10,15 @@ require('dotenv').config({ path: '.env' }); // In this example we will get output from a known nft by calling the node endpoint using a "custom plugin" call. async function run() { initLogger(); - if (!process.env.NODE_URL) { - throw new Error('.env NODE_URL is undefined, see .env.example'); + for (const envVar of ['NODE_URL']) { + if (!(envVar in process.env)) { + throw new Error(`.env ${envVar} is undefined, see .env.example`); + } } const client = new Client({ // Insert your node URL in the .env. - nodes: [process.env.NODE_URL], + nodes: [process.env.NODE_URL as string], localPow: true, }); diff --git a/bindings/nodejs/examples/client/offline_signing/00-address-generation.ts b/bindings/nodejs/examples/client/offline_signing/00-address-generation.ts index 0c13301186..275e7efc61 100644 --- a/bindings/nodejs/examples/client/offline_signing/00-address-generation.ts +++ b/bindings/nodejs/examples/client/offline_signing/00-address-generation.ts @@ -19,14 +19,15 @@ const ADDRESS_FILE_NAME = 'offline-signing-address.json'; // In this example we will generate an address offline which will be used later to find inputs. async function run() { initLogger(); - - try { - if (!process.env.MNEMONIC) { - throw new Error('.env MNEMONIC is undefined, see .env.example'); + for (const envVar of ['MNEMONIC']) { + if (!(envVar in process.env)) { + throw new Error(`.env ${envVar} is undefined, see .env.example`); } + } + try { const secretManager = new SecretManager({ - mnemonic: process.env.MNEMONIC, + mnemonic: process.env.MNEMONIC as string, }); // Generates an address offline. diff --git a/bindings/nodejs/examples/client/offline_signing/01-transaction-preparation.ts b/bindings/nodejs/examples/client/offline_signing/01-transaction-preparation.ts index fd01cdc3b7..150e00375e 100644 --- a/bindings/nodejs/examples/client/offline_signing/01-transaction-preparation.ts +++ b/bindings/nodejs/examples/client/offline_signing/01-transaction-preparation.ts @@ -16,13 +16,15 @@ const PREPARED_TRANSACTION_FILE_NAME = // In this example we will get inputs and prepare a transaction async function run() { initLogger(); - if (!process.env.NODE_URL) { - throw new Error('.env NODE_URL is undefined, see .env.example'); + for (const envVar of ['NODE_URL']) { + if (!(envVar in process.env)) { + throw new Error(`.env ${envVar} is undefined, see .env.example`); + } } const onlineClient = new Client({ // Insert your node URL in the .env. - nodes: [process.env.NODE_URL], + nodes: [process.env.NODE_URL as string], localPow: true, }); diff --git a/bindings/nodejs/examples/client/offline_signing/02-transaction-signing.ts b/bindings/nodejs/examples/client/offline_signing/02-transaction-signing.ts index 66bd8fd172..0c338cbe7d 100644 --- a/bindings/nodejs/examples/client/offline_signing/02-transaction-signing.ts +++ b/bindings/nodejs/examples/client/offline_signing/02-transaction-signing.ts @@ -16,16 +16,17 @@ const SIGNED_TRANSACTION_FILE_NAME = 'offline-signing-signed-transaction.json'; // In this example we will sign the prepared transaction. async function run() { initLogger(); + for (const envVar of ['MNEMONIC']) { + if (!(envVar in process.env)) { + throw new Error(`.env ${envVar} is undefined, see .env.example`); + } + } const offlineClient = new Client({}); try { - if (!process.env.MNEMONIC) { - throw new Error('.env MNEMONIC is undefined, see .env.example'); - } - const secretManager = { - mnemonic: process.env.MNEMONIC, + mnemonic: process.env.MNEMONIC as string, }; // Read in prepared transaction from example 2_transaction_preparation diff --git a/bindings/nodejs/examples/client/offline_signing/03-send-block.ts b/bindings/nodejs/examples/client/offline_signing/03-send-block.ts index e3410eff63..a6d52660cd 100644 --- a/bindings/nodejs/examples/client/offline_signing/03-send-block.ts +++ b/bindings/nodejs/examples/client/offline_signing/03-send-block.ts @@ -14,12 +14,14 @@ const SIGNED_TRANSACTION_FILE_NAME = 'offline-signing-signed-transaction.json'; // In this example we will send the signed transaction in a block. async function run() { initLogger(); - if (!process.env.NODE_URL) { - throw new Error('.env NODE_URL is undefined, see .env.example'); + for (const envVar of ['NODE_URL', 'EXPLORER_URL']) { + if (!(envVar in process.env)) { + throw new Error(`.env ${envVar} is undefined, see .env.example`); + } } const onlineClient = new Client({ // Insert your node URL in the .env. - nodes: [process.env.NODE_URL], + nodes: [process.env.NODE_URL as string], localPow: true, }); diff --git a/bindings/nodejs/examples/evm/send-evm-transaction.ts b/bindings/nodejs/examples/evm/send-evm-transaction.ts index ccc7450819..32e7b011c2 100644 --- a/bindings/nodejs/examples/evm/send-evm-transaction.ts +++ b/bindings/nodejs/examples/evm/send-evm-transaction.ts @@ -37,12 +37,14 @@ const TX_OPTIONS = { async function run(): Promise { const provider = new Web3(RPC_ENDPOINT); - try { - if (!process.env.MNEMONIC) { - throw new Error('.env MNEMONIC is undefined, see .env.example'); + for (const envVar of ['MNEMONIC']) { + if (!(envVar in process.env)) { + throw new Error(`.env ${envVar} is undefined, see .env.example`); } + } + try { const mnemonicSecretManager = { - mnemonic: process.env.MNEMONIC, + mnemonic: process.env.MNEMONIC as string, }; const secretManager = new SecretManager(mnemonicSecretManager); diff --git a/bindings/nodejs/examples/exchange/3-check-balance.ts b/bindings/nodejs/examples/exchange/3-check-balance.ts index ba3deb9ad8..797346b58d 100644 --- a/bindings/nodejs/examples/exchange/3-check-balance.ts +++ b/bindings/nodejs/examples/exchange/3-check-balance.ts @@ -12,10 +12,12 @@ require('dotenv').config({ path: '.env' }); async function run() { try { - if (!process.env.WALLET_DB_PATH) { - throw new Error( - '.env WALLET_DB_PATH is undefined, see .env.example', - ); + for (const envVar of ['WALLET_DB_PATH']) { + if (!(envVar in process.env)) { + throw new Error( + `.env ${envVar} is undefined, see .env.example`, + ); + } } const wallet = new Wallet({ diff --git a/bindings/nodejs/examples/exchange/4-listen-events.ts b/bindings/nodejs/examples/exchange/4-listen-events.ts index 0ab9604732..d0a0cc600a 100644 --- a/bindings/nodejs/examples/exchange/4-listen-events.ts +++ b/bindings/nodejs/examples/exchange/4-listen-events.ts @@ -12,10 +12,12 @@ require('dotenv').config({ path: '.env' }); async function run() { try { - if (!process.env.WALLET_DB_PATH) { - throw new Error( - '.env WALLET_DB_PATH is undefined, see .env.example', - ); + for (const envVar of ['WALLET_DB_PATH']) { + if (!(envVar in process.env)) { + throw new Error( + `.env ${envVar} is undefined, see .env.example`, + ); + } } const wallet = new Wallet({ diff --git a/bindings/nodejs/examples/how_tos/accounts_and_addresses/check-balance.ts b/bindings/nodejs/examples/how_tos/accounts_and_addresses/check-balance.ts index 042db1296a..8f7eec2249 100644 --- a/bindings/nodejs/examples/how_tos/accounts_and_addresses/check-balance.ts +++ b/bindings/nodejs/examples/how_tos/accounts_and_addresses/check-balance.ts @@ -12,8 +12,10 @@ require('dotenv').config({ path: '.env' }); // This example syncs the account and prints the balance. async function run() { initLogger(); - if (!process.env.WALLET_DB_PATH) { - throw new Error('.env WALLET_DB_PATH is undefined, see .env.example'); + for (const envVar of ['WALLET_DB_PATH']) { + if (!(envVar in process.env)) { + throw new Error(`.env ${envVar} is undefined, see .env.example`); + } } try { const wallet = new Wallet({ diff --git a/bindings/nodejs/examples/how_tos/accounts_and_addresses/list-accounts.ts b/bindings/nodejs/examples/how_tos/accounts_and_addresses/list-accounts.ts index f3e5662372..e9bf5fa289 100644 --- a/bindings/nodejs/examples/how_tos/accounts_and_addresses/list-accounts.ts +++ b/bindings/nodejs/examples/how_tos/accounts_and_addresses/list-accounts.ts @@ -12,8 +12,10 @@ require('dotenv').config({ path: '.env' }); // This example lists all accounts in the wallet. async function run() { initLogger(); - if (!process.env.WALLET_DB_PATH) { - throw new Error('.env WALLET_DB_PATH is undefined, see .env.example'); + for (const envVar of ['WALLET_DB_PATH']) { + if (!(envVar in process.env)) { + throw new Error(`.env ${envVar} is undefined, see .env.example`); + } } try { const wallet = new Wallet({ diff --git a/bindings/nodejs/examples/how_tos/accounts_and_addresses/list-addresses.ts b/bindings/nodejs/examples/how_tos/accounts_and_addresses/list-addresses.ts index 02e56eb9b5..47f8356e7e 100644 --- a/bindings/nodejs/examples/how_tos/accounts_and_addresses/list-addresses.ts +++ b/bindings/nodejs/examples/how_tos/accounts_and_addresses/list-addresses.ts @@ -12,8 +12,10 @@ require('dotenv').config({ path: '.env' }); // This example lists all addresses in the account. async function run() { initLogger(); - if (!process.env.WALLET_DB_PATH) { - throw new Error('.env WALLET_DB_PATH is undefined, see .env.example'); + for (const envVar of ['WALLET_DB_PATH']) { + if (!(envVar in process.env)) { + throw new Error(`.env ${envVar} is undefined, see .env.example`); + } } try { const wallet = new Wallet({ diff --git a/bindings/nodejs/examples/how_tos/accounts_and_addresses/list-outputs.ts b/bindings/nodejs/examples/how_tos/accounts_and_addresses/list-outputs.ts index a3fe14be53..77a8bf5f51 100644 --- a/bindings/nodejs/examples/how_tos/accounts_and_addresses/list-outputs.ts +++ b/bindings/nodejs/examples/how_tos/accounts_and_addresses/list-outputs.ts @@ -12,8 +12,10 @@ require('dotenv').config({ path: '.env' }); // This example lists all outputs in the account. async function run() { initLogger(); - if (!process.env.WALLET_DB_PATH) { - throw new Error('.env WALLET_DB_PATH is undefined, see .env.example'); + for (const envVar of ['WALLET_DB_PATH']) { + if (!(envVar in process.env)) { + throw new Error(`.env ${envVar} is undefined, see .env.example`); + } } try { const wallet = new Wallet({ diff --git a/bindings/nodejs/examples/how_tos/accounts_and_addresses/list-transactions.ts b/bindings/nodejs/examples/how_tos/accounts_and_addresses/list-transactions.ts index 0cfd55dd81..195d9a059b 100644 --- a/bindings/nodejs/examples/how_tos/accounts_and_addresses/list-transactions.ts +++ b/bindings/nodejs/examples/how_tos/accounts_and_addresses/list-transactions.ts @@ -12,8 +12,10 @@ require('dotenv').config({ path: '.env' }); // This example lists all transactions in the account. async function run() { initLogger(); - if (!process.env.WALLET_DB_PATH) { - throw new Error('.env WALLET_DB_PATH is undefined, see .env.example'); + for (const envVar of ['WALLET_DB_PATH']) { + if (!(envVar in process.env)) { + throw new Error(`.env ${envVar} is undefined, see .env.example`); + } } try { const wallet = new Wallet({ diff --git a/bindings/nodejs/examples/how_tos/advanced_transactions/advanced_transaction.ts b/bindings/nodejs/examples/how_tos/advanced_transactions/advanced_transaction.ts index 94b36a0298..97962a8d65 100644 --- a/bindings/nodejs/examples/how_tos/advanced_transactions/advanced_transaction.ts +++ b/bindings/nodejs/examples/how_tos/advanced_transactions/advanced_transaction.ts @@ -19,10 +19,16 @@ require('dotenv').config({ path: '.env' }); async function run() { initLogger(); try { - if (!process.env.STRONGHOLD_PASSWORD) { - throw new Error( - '.env STRONGHOLD_PASSWORD is undefined, see .env.example', - ); + for (const envVar of [ + 'WALLET_DB_PATH', + 'STRONGHOLD_PASSWORD', + 'EXPLORER_URL', + ]) { + if (!(envVar in process.env)) { + throw new Error( + `.env ${envVar} is undefined, see .env.example`, + ); + } } const wallet = new Wallet({ @@ -34,7 +40,9 @@ async function run() { await account.sync(); // To sign a transaction we need to unlock stronghold. - await wallet.setStrongholdPassword(process.env.STRONGHOLD_PASSWORD); + await wallet.setStrongholdPassword( + process.env.STRONGHOLD_PASSWORD as string, + ); // Create an output with amount 1_000_000 and a timelock of 1 hour const in_an_hour = Math.floor(Date.now() / 1000) + 3600; diff --git a/bindings/nodejs/examples/how_tos/advanced_transactions/claim_transaction.ts b/bindings/nodejs/examples/how_tos/advanced_transactions/claim_transaction.ts index 0a37b082c5..c89d756e69 100644 --- a/bindings/nodejs/examples/how_tos/advanced_transactions/claim_transaction.ts +++ b/bindings/nodejs/examples/how_tos/advanced_transactions/claim_transaction.ts @@ -11,10 +11,16 @@ require('dotenv').config({ path: '.env' }); async function run() { initLogger(); try { - if (!process.env.STRONGHOLD_PASSWORD) { - throw new Error( - '.env STRONGHOLD_PASSWORD is undefined, see .env.example', - ); + for (const envVar of [ + 'WALLET_DB_PATH', + 'STRONGHOLD_PASSWORD', + 'EXPLORER_URL', + ]) { + if (!(envVar in process.env)) { + throw new Error( + `.env ${envVar} is undefined, see .env.example`, + ); + } } const wallet = new Wallet({ @@ -26,7 +32,9 @@ async function run() { await account.sync(); // To sign a transaction we need to unlock stronghold. - await wallet.setStrongholdPassword(process.env.STRONGHOLD_PASSWORD); + await wallet.setStrongholdPassword( + process.env.STRONGHOLD_PASSWORD as string, + ); // Get all claimable outputs const output_ids = await account.claimableOutputs(OutputsToClaim.All); diff --git a/bindings/nodejs/examples/how_tos/advanced_transactions/send_micro_transaction.ts b/bindings/nodejs/examples/how_tos/advanced_transactions/send_micro_transaction.ts index 090ab1a8b4..8fe0853ec0 100644 --- a/bindings/nodejs/examples/how_tos/advanced_transactions/send_micro_transaction.ts +++ b/bindings/nodejs/examples/how_tos/advanced_transactions/send_micro_transaction.ts @@ -11,10 +11,16 @@ require('dotenv').config({ path: '.env' }); async function run() { initLogger(); try { - if (!process.env.STRONGHOLD_PASSWORD) { - throw new Error( - '.env STRONGHOLD_PASSWORD is undefined, see .env.example', - ); + for (const envVar of [ + 'WALLET_DB_PATH', + 'STRONGHOLD_PASSWORD', + 'EXPLORER_URL', + ]) { + if (!(envVar in process.env)) { + throw new Error( + `.env ${envVar} is undefined, see .env.example`, + ); + } } const wallet = new Wallet({ @@ -26,7 +32,9 @@ async function run() { await account.sync(); // To sign a transaction we need to unlock stronghold. - await wallet.setStrongholdPassword(process.env.STRONGHOLD_PASSWORD); + await wallet.setStrongholdPassword( + process.env.STRONGHOLD_PASSWORD as string, + ); // Replace with the address of your choice! const address = diff --git a/bindings/nodejs/examples/how_tos/alias/create.ts b/bindings/nodejs/examples/how_tos/alias/create.ts index 7a69e07591..15c6ff77a0 100644 --- a/bindings/nodejs/examples/how_tos/alias/create.ts +++ b/bindings/nodejs/examples/how_tos/alias/create.ts @@ -17,13 +17,14 @@ require('dotenv').config({ path: '.env' }); async function run() { initLogger(); for (const envVar of [ - 'FAUCET_URL', 'WALLET_DB_PATH', 'STRONGHOLD_PASSWORD', - ]) + 'EXPLORER_URL', + ]) { if (!(envVar in process.env)) { throw new Error(`.env ${envVar} is undefined, see .env.example`); } + } try { // Create the wallet diff --git a/bindings/nodejs/examples/how_tos/alias/destroy.ts b/bindings/nodejs/examples/how_tos/alias/destroy.ts index 32d3ec9a7d..8bad0d47f0 100644 --- a/bindings/nodejs/examples/how_tos/alias/destroy.ts +++ b/bindings/nodejs/examples/how_tos/alias/destroy.ts @@ -13,13 +13,14 @@ require('dotenv').config({ path: '.env' }); async function run() { initLogger(); for (const envVar of [ - 'FAUCET_URL', 'WALLET_DB_PATH', 'STRONGHOLD_PASSWORD', - ]) + 'EXPLORER_URL', + ]) { if (!(envVar in process.env)) { throw new Error(`.env ${envVar} is undefined, see .env.example`); } + } try { // Create the wallet diff --git a/bindings/nodejs/examples/how_tos/alias/governance-transition.ts b/bindings/nodejs/examples/how_tos/alias/governance-transition.ts index 87a77deb54..636608cb74 100644 --- a/bindings/nodejs/examples/how_tos/alias/governance-transition.ts +++ b/bindings/nodejs/examples/how_tos/alias/governance-transition.ts @@ -20,13 +20,14 @@ require('dotenv').config({ path: '.env' }); async function run() { initLogger(); for (const envVar of [ - 'FAUCET_URL', 'WALLET_DB_PATH', 'STRONGHOLD_PASSWORD', - ]) + 'EXPLORER_URL', + ]) { if (!(envVar in process.env)) { throw new Error(`.env ${envVar} is undefined, see .env.example`); } + } try { // Create the wallet diff --git a/bindings/nodejs/examples/how_tos/alias/state-transition.ts b/bindings/nodejs/examples/how_tos/alias/state-transition.ts index d1b230504a..ba2fd75227 100644 --- a/bindings/nodejs/examples/how_tos/alias/state-transition.ts +++ b/bindings/nodejs/examples/how_tos/alias/state-transition.ts @@ -15,13 +15,14 @@ const NEW_STATE_METADATA = 'updated state metadata 1'; async function run() { initLogger(); for (const envVar of [ - 'FAUCET_URL', 'WALLET_DB_PATH', 'STRONGHOLD_PASSWORD', - ]) + 'EXPLORER_URL', + ]) { if (!(envVar in process.env)) { throw new Error(`.env ${envVar} is undefined, see .env.example`); } + } try { // Create the wallet diff --git a/bindings/nodejs/examples/how_tos/alias_wallet/request-funds.ts b/bindings/nodejs/examples/how_tos/alias_wallet/request-funds.ts index 534f723ce8..98cf5d1d2d 100644 --- a/bindings/nodejs/examples/how_tos/alias_wallet/request-funds.ts +++ b/bindings/nodejs/examples/how_tos/alias_wallet/request-funds.ts @@ -16,11 +16,13 @@ require('dotenv').config({ path: '.env' }); // In this example we request funds to an alias wallet. async function run() { initLogger(); - if (!process.env.FAUCET_URL) { - throw new Error('.env FAUCET_URL is undefined, see .env.example'); + for (const envVar of ['WALLET_DB_PATH', 'FAUCET_URL']) { + if (!(envVar in process.env)) { + throw new Error(`.env ${envVar} is undefined, see .env.example`); + } } try { - const faucetUrl = process.env.FAUCET_URL; + const faucetUrl = process.env.FAUCET_URL as string; // Create the wallet const wallet = new Wallet({ diff --git a/bindings/nodejs/examples/how_tos/alias_wallet/transaction.ts b/bindings/nodejs/examples/how_tos/alias_wallet/transaction.ts index 0ffe4ef766..cdf35ec47c 100644 --- a/bindings/nodejs/examples/how_tos/alias_wallet/transaction.ts +++ b/bindings/nodejs/examples/how_tos/alias_wallet/transaction.ts @@ -17,10 +17,12 @@ require('dotenv').config({ path: '.env' }); async function run() { initLogger(); try { - if (!process.env.STRONGHOLD_PASSWORD) { - throw new Error( - '.env STRONGHOLD_PASSWORD is undefined, see .env.example', - ); + for (const envVar of ['WALLET_DB_PATH', 'STRONGHOLD_PASSWORD']) { + if (!(envVar in process.env)) { + throw new Error( + `.env ${envVar} is undefined, see .env.example`, + ); + } } const syncOptions = { @@ -35,7 +37,9 @@ async function run() { const account = await wallet.getAccount('Alice'); - await wallet.setStrongholdPassword(process.env.STRONGHOLD_PASSWORD); + await wallet.setStrongholdPassword( + process.env.STRONGHOLD_PASSWORD as string, + ); const balance = await account.sync(syncOptions); diff --git a/bindings/nodejs/examples/how_tos/client/get-health.ts b/bindings/nodejs/examples/how_tos/client/get-health.ts index f42d21fd83..f99b3a6fcb 100644 --- a/bindings/nodejs/examples/how_tos/client/get-health.ts +++ b/bindings/nodejs/examples/how_tos/client/get-health.ts @@ -10,18 +10,22 @@ require('dotenv').config({ path: '.env' }); // In this example we will get the node health async function run() { initLogger(); - if (!process.env.NODE_URL) { - throw new Error('.env NODE_URL is undefined, see .env.example'); + for (const envVar of ['NODE_URL']) { + if (!(envVar in process.env)) { + throw new Error(`.env ${envVar} is undefined, see .env.example`); + } } const client = new Client({ // Insert your node URL in the .env. - nodes: [process.env.NODE_URL], + nodes: [process.env.NODE_URL as string], localPow: true, }); try { - const isHealthy = await client.getHealth(process.env.NODE_URL); + const isHealthy = await client.getHealth( + process.env.NODE_URL as string, + ); console.log('Healthy: ', isHealthy); } catch (error) { console.error('Error: ', error); diff --git a/bindings/nodejs/examples/how_tos/client/get-info.ts b/bindings/nodejs/examples/how_tos/client/get-info.ts index 4c6c4188ff..82cd1281bf 100644 --- a/bindings/nodejs/examples/how_tos/client/get-info.ts +++ b/bindings/nodejs/examples/how_tos/client/get-info.ts @@ -10,13 +10,15 @@ require('dotenv').config({ path: '.env' }); // In this example we will get information about the node async function run() { initLogger(); - if (!process.env.NODE_URL) { - throw new Error('.env NODE_URL is undefined, see .env.example'); + for (const envVar of ['NODE_URL']) { + if (!(envVar in process.env)) { + throw new Error(`.env ${envVar} is undefined, see .env.example`); + } } const client = new Client({ // Insert your node URL in the .env. - nodes: [process.env.NODE_URL], + nodes: [process.env.NODE_URL as string], localPow: true, }); diff --git a/bindings/nodejs/examples/how_tos/client/get-outputs.ts b/bindings/nodejs/examples/how_tos/client/get-outputs.ts index ebbef29b82..945bb167a9 100644 --- a/bindings/nodejs/examples/how_tos/client/get-outputs.ts +++ b/bindings/nodejs/examples/how_tos/client/get-outputs.ts @@ -10,13 +10,15 @@ require('dotenv').config({ path: '.env' }); // In this example we will get the outputs of a known address async function run() { initLogger(); - if (!process.env.NODE_URL) { - throw new Error('.env NODE_URL is undefined, see .env.example'); + for (const envVar of ['NODE_URL']) { + if (!(envVar in process.env)) { + throw new Error(`.env ${envVar} is undefined, see .env.example`); + } } const client = new Client({ // Insert your node URL in the .env. - nodes: [process.env.NODE_URL], + nodes: [process.env.NODE_URL as string], }); try { diff --git a/bindings/nodejs/examples/how_tos/native_tokens/burn.ts b/bindings/nodejs/examples/how_tos/native_tokens/burn.ts index 1d4ba6e527..55c0e1c4f6 100644 --- a/bindings/nodejs/examples/how_tos/native_tokens/burn.ts +++ b/bindings/nodejs/examples/how_tos/native_tokens/burn.ts @@ -18,6 +18,11 @@ const BURN_AMOUNT = BigInt(1); // Rename `.env.example` to `.env` first, then run // yarn run-example ./how_tos/native_tokens/burn.ts async function run() { + for (const envVar of ['EXPLORER_URL']) { + if (!(envVar in process.env)) { + throw new Error(`.env ${envVar} is undefined, see .env.example`); + } + } try { // Create the wallet const wallet = await getUnlockedWallet(); diff --git a/bindings/nodejs/examples/how_tos/native_tokens/create.ts b/bindings/nodejs/examples/how_tos/native_tokens/create.ts index 677020444e..ed639566eb 100644 --- a/bindings/nodejs/examples/how_tos/native_tokens/create.ts +++ b/bindings/nodejs/examples/how_tos/native_tokens/create.ts @@ -18,6 +18,11 @@ const MAXIMUM_SUPPLY = BigInt(100); // Rename `.env.example` to `.env` first, then run // yarn run-example ./how_tos/native_tokens/create.ts async function run() { + for (const envVar of ['EXPLORER_URL']) { + if (!(envVar in process.env)) { + throw new Error(`.env ${envVar} is undefined, see .env.example`); + } + } try { // Create the wallet const wallet = await getUnlockedWallet(); diff --git a/bindings/nodejs/examples/how_tos/native_tokens/destroy-foundry.ts b/bindings/nodejs/examples/how_tos/native_tokens/destroy-foundry.ts index 2e7040cd31..d0dd4aa68a 100644 --- a/bindings/nodejs/examples/how_tos/native_tokens/destroy-foundry.ts +++ b/bindings/nodejs/examples/how_tos/native_tokens/destroy-foundry.ts @@ -12,6 +12,11 @@ import { getUnlockedWallet } from '../../wallet/common'; // Rename `.env.example` to `.env` first, then run // yarn run-example ./how_tos/native_tokens/destroy-foundry.ts async function run() { + for (const envVar of ['EXPLORER_URL']) { + if (!(envVar in process.env)) { + throw new Error(`.env ${envVar} is undefined, see .env.example`); + } + } try { // Create the wallet const wallet = await getUnlockedWallet(); diff --git a/bindings/nodejs/examples/how_tos/native_tokens/melt.ts b/bindings/nodejs/examples/how_tos/native_tokens/melt.ts index 248aa25c3d..1078ce6ff3 100644 --- a/bindings/nodejs/examples/how_tos/native_tokens/melt.ts +++ b/bindings/nodejs/examples/how_tos/native_tokens/melt.ts @@ -14,6 +14,11 @@ const MELT_AMOUNT = BigInt(10); // Rename `.env.example` to `.env` first, then run // yarn run-example ./how_tos/native_tokens/melt.ts async function run() { + for (const envVar of ['EXPLORER_URL']) { + if (!(envVar in process.env)) { + throw new Error(`.env ${envVar} is undefined, see .env.example`); + } + } try { // Create the wallet const wallet = await getUnlockedWallet(); diff --git a/bindings/nodejs/examples/how_tos/native_tokens/mint.ts b/bindings/nodejs/examples/how_tos/native_tokens/mint.ts index 241b5c19c9..7778e7458e 100644 --- a/bindings/nodejs/examples/how_tos/native_tokens/mint.ts +++ b/bindings/nodejs/examples/how_tos/native_tokens/mint.ts @@ -14,6 +14,11 @@ const MINT_AMOUNT = BigInt(10); // Rename `.env.example` to `.env` first, then run // yarn run-example ./how_tos/native_tokens/mint.ts async function run() { + for (const envVar of ['EXPLORER_URL']) { + if (!(envVar in process.env)) { + throw new Error(`.env ${envVar} is undefined, see .env.example`); + } + } try { // Create the wallet const wallet = await getUnlockedWallet(); diff --git a/bindings/nodejs/examples/how_tos/native_tokens/send.ts b/bindings/nodejs/examples/how_tos/native_tokens/send.ts index 5dfbe6cb97..fbec4bf831 100644 --- a/bindings/nodejs/examples/how_tos/native_tokens/send.ts +++ b/bindings/nodejs/examples/how_tos/native_tokens/send.ts @@ -19,6 +19,11 @@ const RECV_ADDRESS = // Rename `.env.example` to `.env` first, then run // yarn run-example ./how_tos/native_tokens/send.ts async function run() { + for (const envVar of ['EXPLORER_URL']) { + if (!(envVar in process.env)) { + throw new Error(`.env ${envVar} is undefined, see .env.example`); + } + } try { // Create the wallet const wallet = await getUnlockedWallet(); diff --git a/bindings/nodejs/examples/how_tos/nft_collection/00_mint_issuer_nft.ts b/bindings/nodejs/examples/how_tos/nft_collection/00_mint_issuer_nft.ts index 7df8cbfb94..2d49b19e49 100644 --- a/bindings/nodejs/examples/how_tos/nft_collection/00_mint_issuer_nft.ts +++ b/bindings/nodejs/examples/how_tos/nft_collection/00_mint_issuer_nft.ts @@ -22,10 +22,16 @@ require('dotenv').config({ path: '.env' }); // yarn run-example ./how_tos/nfts/00_mint_issuer_nft.ts async function run() { try { - if (!process.env.STRONGHOLD_PASSWORD) { - throw new Error( - '.env STRONGHOLD_PASSWORD is undefined, see .env.example', - ); + for (const envVar of [ + 'WALLET_DB_PATH', + 'STRONGHOLD_PASSWORD', + 'EXPLORER_URL', + ]) { + if (!(envVar in process.env)) { + throw new Error( + `.env ${envVar} is undefined, see .env.example`, + ); + } } // Create the wallet @@ -34,7 +40,9 @@ async function run() { }); // To sign a transaction we need to unlock stronghold. - await wallet.setStrongholdPassword(process.env.STRONGHOLD_PASSWORD); + await wallet.setStrongholdPassword( + process.env.STRONGHOLD_PASSWORD as string, + ); // Get the account we generated with `01-create-wallet` const account = await wallet.getAccount('Alice'); diff --git a/bindings/nodejs/examples/how_tos/nft_collection/01_mint_collection_nft.ts b/bindings/nodejs/examples/how_tos/nft_collection/01_mint_collection_nft.ts index c78aeba3b7..e9e840b82e 100644 --- a/bindings/nodejs/examples/how_tos/nft_collection/01_mint_collection_nft.ts +++ b/bindings/nodejs/examples/how_tos/nft_collection/01_mint_collection_nft.ts @@ -18,10 +18,16 @@ const NUM_NFTS_MINTED_PER_TRANSACTION = 50; // yarn run-example ./how_tos/nfts/01_mint_collection_nft.ts async function run() { try { - if (!process.env.STRONGHOLD_PASSWORD) { - throw new Error( - '.env STRONGHOLD_PASSWORD is undefined, see .env.example', - ); + for (const envVar of [ + 'WALLET_DB_PATH', + 'STRONGHOLD_PASSWORD', + 'EXPLORER_URL', + ]) { + if (!(envVar in process.env)) { + throw new Error( + `.env ${envVar} is undefined, see .env.example`, + ); + } } // Create the wallet @@ -30,7 +36,9 @@ async function run() { }); // To sign a transaction we need to unlock stronghold. - await wallet.setStrongholdPassword(process.env.STRONGHOLD_PASSWORD); + await wallet.setStrongholdPassword( + process.env.STRONGHOLD_PASSWORD as string, + ); // Get the account we generated with `how_tos/accounts_and_addresses/create-account` const account = await wallet.getAccount('Alice'); diff --git a/bindings/nodejs/examples/how_tos/nfts/burn_nft.ts b/bindings/nodejs/examples/how_tos/nfts/burn_nft.ts index 52f0e0eff0..45c5d42560 100644 --- a/bindings/nodejs/examples/how_tos/nfts/burn_nft.ts +++ b/bindings/nodejs/examples/how_tos/nfts/burn_nft.ts @@ -13,10 +13,16 @@ require('dotenv').config({ path: '.env' }); // yarn run-example ./how_tos/nfts/burn_nft.ts async function run() { try { - if (!process.env.STRONGHOLD_PASSWORD) { - throw new Error( - '.env STRONGHOLD_PASSWORD is undefined, see .env.example', - ); + for (const envVar of [ + 'WALLET_DB_PATH', + 'STRONGHOLD_PASSWORD', + 'EXPLORER_URL', + ]) { + if (!(envVar in process.env)) { + throw new Error( + `.env ${envVar} is undefined, see .env.example`, + ); + } } // Create the wallet @@ -28,7 +34,9 @@ async function run() { const account = await wallet.getAccount('Alice'); // We need to unlock stronghold. - await wallet.setStrongholdPassword(process.env.STRONGHOLD_PASSWORD); + await wallet.setStrongholdPassword( + process.env.STRONGHOLD_PASSWORD as string, + ); // May want to ensure the account is synced before sending a transaction. let balance = await account.sync(); diff --git a/bindings/nodejs/examples/how_tos/nfts/mint_nft.ts b/bindings/nodejs/examples/how_tos/nfts/mint_nft.ts index d8853a5dca..a05c2b6fc5 100644 --- a/bindings/nodejs/examples/how_tos/nfts/mint_nft.ts +++ b/bindings/nodejs/examples/how_tos/nfts/mint_nft.ts @@ -33,11 +33,16 @@ const NFT2_AMOUNT = '1000000'; // yarn run-example ./how_tos/nfts/mint_nft.ts async function run() { try { - if (!process.env.STRONGHOLD_PASSWORD) { - throw new Error( - '.env STRONGHOLD_PASSWORD is undefined, see .env.example', - ); - } + for (const envVar of [ + 'STRONGHOLD_PASSWORD', + 'WALLET_DB_PATH', + 'EXPLORER_URL', + ]) + if (!(envVar in process.env)) { + throw new Error( + `.env ${envVar} is undefined, see .env.example`, + ); + } const wallet = new Wallet({ storagePath: process.env.WALLET_DB_PATH, @@ -49,7 +54,9 @@ async function run() { const senderAddress = (await account.addresses())[0].address; // We need to unlock stronghold. - await wallet.setStrongholdPassword(process.env.STRONGHOLD_PASSWORD); + await wallet.setStrongholdPassword( + process.env.STRONGHOLD_PASSWORD as string, + ); const metadata = new Irc27Metadata( 'video/mp4', diff --git a/bindings/nodejs/examples/how_tos/nfts/send_nft.ts b/bindings/nodejs/examples/how_tos/nfts/send_nft.ts index e0ad2944b8..03ba0bd048 100644 --- a/bindings/nodejs/examples/how_tos/nfts/send_nft.ts +++ b/bindings/nodejs/examples/how_tos/nfts/send_nft.ts @@ -17,10 +17,16 @@ const RECV_ADDRESS = // yarn run-example ./how_tos/nfts/send_nft.ts async function run() { try { - if (!process.env.STRONGHOLD_PASSWORD) { - throw new Error( - '.env STRONGHOLD_PASSWORD is undefined, see .env.example', - ); + for (const envVar of [ + 'WALLET_DB_PATH', + 'STRONGHOLD_PASSWORD', + 'EXPLORER_URL', + ]) { + if (!(envVar in process.env)) { + throw new Error( + `.env ${envVar} is undefined, see .env.example`, + ); + } } const wallet = new Wallet({ @@ -31,7 +37,9 @@ async function run() { const account = await wallet.getAccount('Alice'); // We need to unlock stronghold. - await wallet.setStrongholdPassword(process.env.STRONGHOLD_PASSWORD); + await wallet.setStrongholdPassword( + process.env.STRONGHOLD_PASSWORD as string, + ); // May want to ensure the account is synced before sending a transaction. const balance = await account.sync(); diff --git a/bindings/nodejs/examples/how_tos/sign_and_verify_ed25519/sign-ed25519.ts b/bindings/nodejs/examples/how_tos/sign_and_verify_ed25519/sign-ed25519.ts index 5b1e992e7b..acb827b9ae 100644 --- a/bindings/nodejs/examples/how_tos/sign_and_verify_ed25519/sign-ed25519.ts +++ b/bindings/nodejs/examples/how_tos/sign_and_verify_ed25519/sign-ed25519.ts @@ -30,12 +30,13 @@ async function run() { initLogger(); try { - for (const envVar of ['STRONGHOLD_PASSWORD', 'MNEMONIC']) + for (const envVar of ['STRONGHOLD_PASSWORD', 'MNEMONIC']) { if (!(envVar in process.env)) { throw new Error( `.env ${envVar} is undefined, see .env.example`, ); } + } const secretManager = new SecretManager({ stronghold: { diff --git a/bindings/nodejs/examples/how_tos/sign_secp256k1_ecdsa/sign-secp256k1_ecdsa.ts b/bindings/nodejs/examples/how_tos/sign_secp256k1_ecdsa/sign-secp256k1_ecdsa.ts index 333a5bd0ed..aed2553f09 100644 --- a/bindings/nodejs/examples/how_tos/sign_secp256k1_ecdsa/sign-secp256k1_ecdsa.ts +++ b/bindings/nodejs/examples/how_tos/sign_secp256k1_ecdsa/sign-secp256k1_ecdsa.ts @@ -24,12 +24,13 @@ async function run() { initLogger(); try { - for (const envVar of ['STRONGHOLD_PASSWORD', 'MNEMONIC']) + for (const envVar of ['STRONGHOLD_PASSWORD', 'MNEMONIC']) { if (!(envVar in process.env)) { throw new Error( `.env ${envVar} is undefined, see .env.example`, ); } + } const secretManager = new SecretManager({ stronghold: { diff --git a/bindings/nodejs/examples/how_tos/simple_transaction/request-funds.ts b/bindings/nodejs/examples/how_tos/simple_transaction/request-funds.ts index 2a86b934ef..ea51802304 100644 --- a/bindings/nodejs/examples/how_tos/simple_transaction/request-funds.ts +++ b/bindings/nodejs/examples/how_tos/simple_transaction/request-funds.ts @@ -12,11 +12,13 @@ require('dotenv').config({ path: '.env' }); // This example requests funds from the faucet async function run() { initLogger(); - if (!process.env.FAUCET_URL) { - throw new Error('.env FAUCET_URL is undefined, see .env.example'); + for (const envVar of ['FAUCET_URL', 'WALLET_DB_PATH']) { + if (!(envVar in process.env)) { + throw new Error(`.env ${envVar} is not defined`); + } } try { - const faucetUrl = process.env.FAUCET_URL; + const faucetUrl = process.env.FAUCET_URL as string; // Create the wallet const wallet = new Wallet({ diff --git a/bindings/nodejs/examples/how_tos/simple_transaction/simple-transaction.ts b/bindings/nodejs/examples/how_tos/simple_transaction/simple-transaction.ts index 78c4079e5b..c4ea523627 100644 --- a/bindings/nodejs/examples/how_tos/simple_transaction/simple-transaction.ts +++ b/bindings/nodejs/examples/how_tos/simple_transaction/simple-transaction.ts @@ -13,10 +13,14 @@ require('dotenv').config({ path: '.env' }); async function run() { initLogger(); try { - if (!process.env.STRONGHOLD_PASSWORD) { - throw new Error( - '.env STRONGHOLD_PASSWORD is undefined, see .env.example', - ); + for (const envVar of [ + 'STRONGHOLD_PASSWORD', + 'WALLET_DB_PATH', + 'EXPLORER_URL', + ]) { + if (!(envVar in process.env)) { + throw new Error(`.env ${envVar} is not defined`); + } } const wallet = new Wallet({ @@ -28,7 +32,9 @@ async function run() { await account.sync(); // To sign a transaction we need to unlock stronghold. - await wallet.setStrongholdPassword(process.env.STRONGHOLD_PASSWORD); + await wallet.setStrongholdPassword( + process.env.STRONGHOLD_PASSWORD as string, + ); // Replace with the address of your choice! const address = diff --git a/bindings/nodejs/examples/secret_manager/generate-addresses.ts b/bindings/nodejs/examples/secret_manager/generate-addresses.ts index 19ad35482f..ab5ab8c823 100644 --- a/bindings/nodejs/examples/secret_manager/generate-addresses.ts +++ b/bindings/nodejs/examples/secret_manager/generate-addresses.ts @@ -10,13 +10,14 @@ require('dotenv').config({ path: '.env' }); // In this example we will create addresses from a mnemonic defined in .env async function run() { initLogger(); - - try { - if (!process.env.MNEMONIC) { - throw new Error('.env MNEMONIC is undefined, see .env.example'); + for (const envVar of ['MNEMONIC']) { + if (!(envVar in process.env)) { + throw new Error(`.env ${envVar} is undefined, see .env.example`); } + } + try { const mnemonicSecretManager = { - mnemonic: process.env.MNEMONIC, + mnemonic: process.env.MNEMONIC as string, }; const secretManager = new SecretManager(mnemonicSecretManager); diff --git a/bindings/nodejs/examples/wallet/06-send-micro-transaction.ts b/bindings/nodejs/examples/wallet/06-send-micro-transaction.ts index 0a69fab288..4ba7541d88 100644 --- a/bindings/nodejs/examples/wallet/06-send-micro-transaction.ts +++ b/bindings/nodejs/examples/wallet/06-send-micro-transaction.ts @@ -20,6 +20,13 @@ const RECV_ADDRESS = // yarn run-example ./wallet/06-send-micro-transaction.ts async function run() { try { + for (const envVar of ['EXPLORER_URL']) { + if (!(envVar in process.env)) { + throw new Error( + `.env ${envVar} is undefined, see .env.example`, + ); + } + } // Create the wallet const wallet = await getUnlockedWallet(); diff --git a/bindings/nodejs/examples/wallet/migrate-db-chrysalis-to-stardust.ts b/bindings/nodejs/examples/wallet/migrate-db-chrysalis-to-stardust.ts index 5fa766969c..236c407541 100644 --- a/bindings/nodejs/examples/wallet/migrate-db-chrysalis-to-stardust.ts +++ b/bindings/nodejs/examples/wallet/migrate-db-chrysalis-to-stardust.ts @@ -16,10 +16,11 @@ async function run() { levelFilter: 'debug', targetExclusions: ['h2', 'hyper', 'rustls'], }); - for (const envVar of ['NODE_URL', 'STRONGHOLD_PASSWORD']) + for (const envVar of ['NODE_URL', 'STRONGHOLD_PASSWORD']) { if (!(envVar in process.env)) { throw new Error(`.env ${envVar} is undefined, see .env.example`); } + } migrateDbChrysalisToStardust(walletDbPath, 'password'); diff --git a/bindings/nodejs/examples/wallet/migrate-stronghold-snapshot-v2-to-v3.ts b/bindings/nodejs/examples/wallet/migrate-stronghold-snapshot-v2-to-v3.ts index 0a3663a269..988d9749f2 100644 --- a/bindings/nodejs/examples/wallet/migrate-stronghold-snapshot-v2-to-v3.ts +++ b/bindings/nodejs/examples/wallet/migrate-stronghold-snapshot-v2-to-v3.ts @@ -16,10 +16,11 @@ const v3Path = './v3.stronghold'; // yarn run-example wallet/migrate-stronghold-snapshot-v2-to-v3.ts async function run() { - for (const envVar of ['NODE_URL', 'STRONGHOLD_PASSWORD']) + for (const envVar of ['NODE_URL', 'WALLET_DB_PATH']) { if (!(envVar in process.env)) { throw new Error(`.env ${envVar} is undefined, see .env.example`); } + } let walletOptions: WalletOptions = { storagePath: process.env.WALLET_DB_PATH, From 4270b7c330c8d33f5c341df5061bd75670a79d79 Mon Sep 17 00:00:00 2001 From: Thibault Martinez Date: Tue, 21 Nov 2023 15:50:14 +0100 Subject: [PATCH 63/91] Remove native tokens from AnchorOutput (#1660) --- sdk/src/types/block/output/anchor.rs | 46 ++-------------------------- 1 file changed, 3 insertions(+), 43 deletions(-) diff --git a/sdk/src/types/block/output/anchor.rs b/sdk/src/types/block/output/anchor.rs index 0485a67528..e71aa220cf 100644 --- a/sdk/src/types/block/output/anchor.rs +++ b/sdk/src/types/block/output/anchor.rs @@ -16,8 +16,8 @@ use crate::types::block::{ output::{ feature::{verify_allowed_features, Feature, FeatureFlags, Features}, unlock_condition::{verify_allowed_unlock_conditions, UnlockCondition, UnlockConditionFlags, UnlockConditions}, - ChainId, MinimumOutputAmount, NativeToken, NativeTokens, Output, OutputBuilderAmount, OutputId, - StateTransitionError, StateTransitionVerifier, StorageScore, StorageScoreParameters, + ChainId, MinimumOutputAmount, Output, OutputBuilderAmount, OutputId, StateTransitionError, + StateTransitionVerifier, StorageScore, StorageScoreParameters, }, payload::signed_transaction::TransactionCapabilityFlag, protocol::ProtocolParameters, @@ -89,7 +89,6 @@ impl core::fmt::Display for AnchorTransition { pub struct AnchorOutputBuilder { amount: OutputBuilderAmount, mana: u64, - native_tokens: BTreeSet, anchor_id: AnchorId, state_index: u32, unlock_conditions: BTreeSet, @@ -114,7 +113,6 @@ impl AnchorOutputBuilder { Self { amount, mana: Default::default(), - native_tokens: BTreeSet::new(), anchor_id, state_index: 0, unlock_conditions: BTreeSet::new(), @@ -144,20 +142,6 @@ impl AnchorOutputBuilder { self } - /// - #[inline(always)] - pub fn add_native_token(mut self, native_token: NativeToken) -> Self { - self.native_tokens.insert(native_token); - self - } - - /// - #[inline(always)] - pub fn with_native_tokens(mut self, native_tokens: impl IntoIterator) -> Self { - self.native_tokens = native_tokens.into_iter().collect(); - self - } - /// Sets the anchor ID to the provided value. #[inline(always)] pub fn with_anchor_id(mut self, anchor_id: AnchorId) -> Self { @@ -275,7 +259,6 @@ impl AnchorOutputBuilder { let mut output = AnchorOutput { amount: 0, mana: self.mana, - native_tokens: NativeTokens::from_set(self.native_tokens)?, anchor_id: self.anchor_id, state_index: self.state_index, unlock_conditions, @@ -302,7 +285,6 @@ impl From<&AnchorOutput> for AnchorOutputBuilder { Self { amount: OutputBuilderAmount::Amount(output.amount), mana: output.mana, - native_tokens: output.native_tokens.iter().copied().collect(), anchor_id: output.anchor_id, state_index: output.state_index, unlock_conditions: output.unlock_conditions.iter().cloned().collect(), @@ -318,8 +300,6 @@ pub struct AnchorOutput { /// Amount of IOTA coins held by the output. amount: u64, mana: u64, - /// Native tokens held by the output. - native_tokens: NativeTokens, /// Unique identifier of the anchor. anchor_id: AnchorId, /// A counter that must increase by 1 every time the anchor is state transitioned. @@ -367,12 +347,6 @@ impl AnchorOutput { self.mana } - /// - #[inline(always)] - pub fn native_tokens(&self) -> &NativeTokens { - &self.native_tokens - } - /// #[inline(always)] pub fn anchor_id(&self) -> &AnchorId { @@ -503,7 +477,7 @@ impl AnchorOutput { } } else if next_state.state_index == current_state.state_index { // Governance transition. - if current_state.amount != next_state.amount || current_state.native_tokens != next_state.native_tokens + if current_state.amount != next_state.amount // TODO https://github.com/iotaledger/iota-sdk/issues/1650 // || current_state.state_metadata != next_state.state_metadata { @@ -580,7 +554,6 @@ impl Packable for AnchorOutput { fn pack(&self, packer: &mut P) -> Result<(), P::Error> { self.amount.pack(packer)?; self.mana.pack(packer)?; - self.native_tokens.pack(packer)?; self.anchor_id.pack(packer)?; self.state_index.pack(packer)?; self.unlock_conditions.pack(packer)?; @@ -598,7 +571,6 @@ impl Packable for AnchorOutput { let mana = u64::unpack::<_, VERIFY>(unpacker, &()).coerce()?; - let native_tokens = NativeTokens::unpack::<_, VERIFY>(unpacker, &())?; let anchor_id = AnchorId::unpack::<_, VERIFY>(unpacker, &()).coerce()?; let state_index = u32::unpack::<_, VERIFY>(unpacker, &()).coerce()?; @@ -628,7 +600,6 @@ impl Packable for AnchorOutput { Ok(Self { amount, mana, - native_tokens, anchor_id, state_index, unlock_conditions, @@ -692,8 +663,6 @@ pub(crate) mod dto { pub amount: u64, #[serde(with = "string")] pub mana: u64, - #[serde(skip_serializing_if = "Vec::is_empty", default)] - pub native_tokens: Vec, pub anchor_id: AnchorId, pub state_index: u32, pub unlock_conditions: Vec, @@ -709,7 +678,6 @@ pub(crate) mod dto { kind: AnchorOutput::KIND, amount: value.amount(), mana: value.mana(), - native_tokens: value.native_tokens().to_vec(), anchor_id: *value.anchor_id(), state_index: value.state_index(), unlock_conditions: value.unlock_conditions().iter().map(Into::into).collect::<_>(), @@ -726,7 +694,6 @@ pub(crate) mod dto { let mut builder = AnchorOutputBuilder::new_with_amount(dto.amount, dto.anchor_id) .with_mana(dto.mana) .with_state_index(dto.state_index) - .with_native_tokens(dto.native_tokens) .with_features(dto.features) .with_immutable_features(dto.immutable_features); @@ -743,7 +710,6 @@ pub(crate) mod dto { pub fn try_from_dtos( amount: OutputBuilderAmount, mana: u64, - native_tokens: Option>, anchor_id: &AnchorId, state_index: u32, unlock_conditions: Vec, @@ -759,10 +725,6 @@ pub(crate) mod dto { .with_mana(mana) .with_state_index(state_index); - if let Some(native_tokens) = native_tokens { - builder = builder.with_native_tokens(native_tokens); - } - let unlock_conditions = unlock_conditions .into_iter() .map(UnlockCondition::from) @@ -811,7 +773,6 @@ mod tests { let output_split = AnchorOutput::try_from_dtos( OutputBuilderAmount::Amount(output.amount()), output.mana(), - Some(output.native_tokens().to_vec()), output.anchor_id(), output.state_index(), output.unlock_conditions().iter().map(Into::into).collect(), @@ -829,7 +790,6 @@ mod tests { let output_split = AnchorOutput::try_from_dtos( builder.amount, builder.mana, - Some(builder.native_tokens.iter().copied().collect()), &builder.anchor_id, builder.state_index, builder.unlock_conditions.iter().map(Into::into).collect(), From b23d0e23e65315332498694bec8ff31d8a300160 Mon Sep 17 00:00:00 2001 From: /alex/ Date: Tue, 21 Nov 2023 16:27:38 +0100 Subject: [PATCH 64/91] Python: add multi address (#1658) * add weighted address and multi address * fmt --- bindings/python/iota_sdk/types/address.py | 33 +++++++++++++++++++++++ 1 file changed, 33 insertions(+) diff --git a/bindings/python/iota_sdk/types/address.py b/bindings/python/iota_sdk/types/address.py index 36697010b5..aa55d0fe5f 100644 --- a/bindings/python/iota_sdk/types/address.py +++ b/bindings/python/iota_sdk/types/address.py @@ -16,6 +16,7 @@ class AddressType(IntEnum): NFT (16): Nft address. ANCHOR (24): Anchor address. IMPLICIT_ACCOUNT_CREATION (32): Implicit Account Creation address. + MULTI (40): Multi address. RESTRICTED (48): Address with restricted capabilities. """ @@ -24,6 +25,7 @@ class AddressType(IntEnum): NFT = 16 ANCHOR = 24 IMPLICIT_ACCOUNT_CREATION = 32 + MULTI = 40 RESTRICTED = 48 @@ -109,6 +111,34 @@ def from_dict(addr_dict: dict): Ed25519Address(addr_dict['pubKeyHash'])) +@json +@dataclass +class WeightedAddress: + """An address with an assigned weight. + Attributes: + address: The unlocked address. + weight: The weight of the unlocked address. + """ + address: Union[Ed25519Address, AccountAddress, NFTAddress, AnchorAddress] + weight: int + + +@json +@dataclass +class MultiAddress: + """An address that consists of addresses with weights and a threshold value. + The Multi Address can be unlocked if the cumulative weight of all unlocked addresses is equal to or exceeds the + threshold. + Attributes: + addresses: The weighted unlocked addresses. + threshold: The threshold that needs to be reached by the unlocked addresses in order to unlock the multi address. + """ + addresses: List[WeightedAddress] + threshold: int + type: int = field(default_factory=lambda: int( + AddressType.MULTI), init=False) + + @json @dataclass class RestrictedAddress: @@ -149,6 +179,7 @@ class AddressWithUnspentOutputs(): NFTAddress, AnchorAddress, ImplicitAccountCreationAddress, + MultiAddress, RestrictedAddress] @@ -170,6 +201,8 @@ def deserialize_address(d: Dict[str, Any]) -> Address: return AnchorAddress.from_dict(d) if address_type == AddressType.IMPLICIT_ACCOUNT_CREATION: return ImplicitAccountCreationAddress.from_dict(d) + if address_type == AddressType.MULTI: + return MultiAddress.from_dict(d) if address_type == AddressType.RESTRICTED: return RestrictedAddress.from_dict(d) raise Exception(f'invalid address type: {address_type}') From 7cc9bc713944dfae7074fd4f0ae851c8e5800d55 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tadeusz=20So=C5=9Bnierz?= Date: Wed, 22 Nov 2023 11:09:30 +0100 Subject: [PATCH 65/91] Fail tests early when "storage" not enabled (#1563) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Clarify the need to run tests with "storage" feature enabled Signed-off-by: Tadeusz „tadzik” Sośnierz * Put WalletOptions::with_storage_path behind the feature flag This allows us to fail early if the storage feature is not enabled, rather than having code which appears to work but doesn't. Signed-off-by: Tadeusz „tadzik” Sośnierz * Feature gate tests * Revert README changes --------- Signed-off-by: Tadeusz „tadzik” Sośnierz Co-authored-by: Thibault Martinez --- bindings/core/src/lib.rs | 1 + bindings/core/tests/combined.rs | 3 +++ 2 files changed, 4 insertions(+) diff --git a/bindings/core/src/lib.rs b/bindings/core/src/lib.rs index f4fbfce8bb..d7dc366cfa 100644 --- a/bindings/core/src/lib.rs +++ b/bindings/core/src/lib.rs @@ -80,6 +80,7 @@ impl WalletOptions { self } + #[cfg(feature = "storage")] pub fn with_storage_path(mut self, storage_path: impl Into>) -> Self { self.storage_path = storage_path.into(); self diff --git a/bindings/core/tests/combined.rs b/bindings/core/tests/combined.rs index ffe7fe20d3..68ae893166 100644 --- a/bindings/core/tests/combined.rs +++ b/bindings/core/tests/combined.rs @@ -22,6 +22,7 @@ use iota_sdk_bindings_core::{ }; use pretty_assertions::assert_eq; +#[cfg(feature = "storage")] #[tokio::test] async fn create_wallet() -> Result<()> { let storage_path = "test-storage/create_wallet"; @@ -59,6 +60,7 @@ async fn create_wallet() -> Result<()> { Ok(()) } +#[cfg(feature = "storage")] #[tokio::test] async fn client_from_wallet() -> Result<()> { let storage_path = "test-storage/client_from_wallet"; @@ -100,6 +102,7 @@ async fn client_from_wallet() -> Result<()> { } // TODO reenable +// #[cfg(feature = "storage")] // #[tokio::test] // async fn build_and_sign_block() -> Result<()> { // let storage_path = "test-storage/build_and_sign_block"; From 3eb4db481fa122a9e1165d53783136b5a8511ea1 Mon Sep 17 00:00:00 2001 From: Thibault Martinez Date: Wed, 22 Nov 2023 12:00:37 +0100 Subject: [PATCH 66/91] Fix SlotCommitment JSON (#1662) * Fix SlotCommitment field names * Update nodejs * Fix nodejs * Remove weirdness * Remove ComputeInputsCommitment remnants * Revert --- bindings/core/src/response.rs | 1 - .../nodejs/lib/types/block/slot/commitment.ts | 25 +++++++++++++------ .../nodejs/lib/types/utils/bridge/utils.ts | 5 ++-- bindings/nodejs/lib/utils/utils.ts | 7 ++++-- bindings/python/iota_sdk/utils.py | 8 ------ sdk/src/types/block/slot/commitment.rs | 25 +++++++++---------- 6 files changed, 38 insertions(+), 33 deletions(-) diff --git a/bindings/core/src/response.rs b/bindings/core/src/response.rs index 8c9205134e..365b629b09 100644 --- a/bindings/core/src/response.rs +++ b/bindings/core/src/response.rs @@ -180,7 +180,6 @@ pub enum Response { FoundryId(FoundryId), /// Response for: /// - [`TransactionSigningHash`](crate::method::UtilsMethod::TransactionSigningHash) - /// - [`ComputeInputsCommitment`](crate::method::UtilsMethod::ComputeInputsCommitment) Hash(String), /// Response for [`GetNodeInfo`](crate::method::ClientMethod::GetNodeInfo) NodeInfoWrapper(NodeInfoWrapper), diff --git a/bindings/nodejs/lib/types/block/slot/commitment.ts b/bindings/nodejs/lib/types/block/slot/commitment.ts index 25e105b9e6..232703f319 100644 --- a/bindings/nodejs/lib/types/block/slot/commitment.ts +++ b/bindings/nodejs/lib/types/block/slot/commitment.ts @@ -33,37 +33,48 @@ type RootsId = string; * It is linked to the commitment of the previous slot, which forms a commitment chain. */ class SlotCommitment { + /** + * The version of the protocol running. + */ + readonly protocolVersion: number; /** * The slot index of this commitment. * It is calculated based on genesis timestamp and the duration of a slot. */ - readonly index: SlotIndex; + readonly slot: SlotIndex; /** * The commitment ID of the previous slot. */ - readonly prevId: SlotCommitmentId; + readonly previousCommitmentId: SlotCommitmentId; /** * A BLAKE2b-256 hash of concatenating multiple sparse merkle tree roots of a slot. */ readonly rootsId: RootsId; - /** * The sum of previous slot commitment cumulative weight and weight of issuers of accepted blocks within this * slot. It is just an indication of "committed into" this slot, and can not strictly be used for evaluating * the switching of a chain. */ readonly cumulativeWeight: u64; + /** + * Reference Mana Cost (RMC) to be used in the slot with index at `index + Max Committable Age`. + */ + readonly referenceManaCost: u64; constructor( - index: SlotIndex, - previousSlotCommitmentId: SlotCommitmentId, + protocolVersion: number, + slot: SlotIndex, + previousCommitmentId: SlotCommitmentId, rootsId: RootsId, cumulativeWeight: u64, + referenceManaCost: u64, ) { - this.index = index; - this.prevId = previousSlotCommitmentId; + this.protocolVersion = protocolVersion; + this.slot = slot; + this.previousCommitmentId = previousCommitmentId; this.rootsId = rootsId; this.cumulativeWeight = cumulativeWeight; + this.referenceManaCost = referenceManaCost; } } diff --git a/bindings/nodejs/lib/types/utils/bridge/utils.ts b/bindings/nodejs/lib/types/utils/bridge/utils.ts index 79c1931f74..906ddfbb83 100644 --- a/bindings/nodejs/lib/types/utils/bridge/utils.ts +++ b/bindings/nodejs/lib/types/utils/bridge/utils.ts @@ -194,11 +194,12 @@ export interface __OutputHexBytes__ { }; } +// TODO we don't do this anywhere else, but it seems necessary, need to reevaluate later. // Modified `SlotCommitment` with bigint types converted to strings. type SlotCommitmentConverted = Omit< SlotCommitment, - 'index' | 'cumulativeWeight' -> & { index: string; cumulativeWeight: string }; + 'cumulativeWeight' | 'referenceManaCost' +> & { cumulativeWeight: string; referenceManaCost: string }; export interface __ComputeSlotCommitmentId__ { name: 'computeSlotCommitmentId'; data: { diff --git a/bindings/nodejs/lib/utils/utils.ts b/bindings/nodejs/lib/utils/utils.ts index 7824171c58..c4b23ad3ab 100644 --- a/bindings/nodejs/lib/utils/utils.ts +++ b/bindings/nodejs/lib/utils/utils.ts @@ -394,11 +394,14 @@ export class Utils { name: 'computeSlotCommitmentId', data: { slotCommitment: { - index: slotCommitment.index.toString(10), - prevId: slotCommitment.prevId, + protocolVersion: slotCommitment.protocolVersion, + slot: slotCommitment.slot, + previousCommitmentId: slotCommitment.previousCommitmentId, rootsId: slotCommitment.rootsId, cumulativeWeight: slotCommitment.cumulativeWeight.toString(10), + referenceManaCost: + slotCommitment.referenceManaCost.toString(10), }, }, }); diff --git a/bindings/python/iota_sdk/utils.py b/bindings/python/iota_sdk/utils.py index 687a507d9c..e5a9203633 100644 --- a/bindings/python/iota_sdk/utils.py +++ b/bindings/python/iota_sdk/utils.py @@ -122,14 +122,6 @@ def compute_foundry_id(account_id: HexStr, serial_number: int, 'tokenSchemeType': token_scheme_type }) - @staticmethod - def compute_inputs_commitment(inputs: List[Output]) -> HexStr: - """Compute the input commitment from the output objects that are used as inputs to fund the transaction. - """ - return _call_method('computeInputsCommitment', { - 'inputs': [i.to_dict() for i in inputs] - }) - @staticmethod def compute_storage_deposit(output, rent) -> HexStr: """Compute the required storage deposit of an output. diff --git a/sdk/src/types/block/slot/commitment.rs b/sdk/src/types/block/slot/commitment.rs index 26cef21804..f61960c741 100644 --- a/sdk/src/types/block/slot/commitment.rs +++ b/sdk/src/types/block/slot/commitment.rs @@ -23,10 +23,9 @@ pub struct SlotCommitment { protocol_version: u8, /// The slot index of this commitment. /// It is calculated based on genesis timestamp and the duration of a slot. - index: SlotIndex, + slot: SlotIndex, /// The commitment ID of the previous slot. - #[cfg_attr(feature = "serde", serde(rename = "previousCommitmentId"))] - previous_slot_commitment_id: SlotCommitmentId, + previous_commitment_id: SlotCommitmentId, /// The digest of multiple sparse merkle tree roots of this slot. roots_id: RootsId, /// The sum of previous slot commitment cumulative weight and weight of issuers of accepted blocks within this @@ -43,16 +42,16 @@ impl SlotCommitment { /// Creates a new [`SlotCommitment`]. pub fn new( protocol_version: u8, - index: SlotIndex, - previous_slot_commitment_id: SlotCommitmentId, + slot: SlotIndex, + previous_commitment_id: SlotCommitmentId, roots_id: RootsId, cumulative_weight: u64, reference_mana_cost: u64, ) -> Self { Self { protocol_version, - index, - previous_slot_commitment_id, + slot, + previous_commitment_id, roots_id, cumulative_weight, reference_mana_cost, @@ -64,14 +63,14 @@ impl SlotCommitment { self.protocol_version } - /// Returns the index of the [`SlotCommitment`]. - pub fn index(&self) -> SlotIndex { - self.index + /// Returns the slot index of the [`SlotCommitment`]. + pub fn slot(&self) -> SlotIndex { + self.slot } /// Returns the previous slot commitment ID of the [`SlotCommitment`]. - pub fn previous_slot_commitment_id(&self) -> &SlotCommitmentId { - &self.previous_slot_commitment_id + pub fn previous_commitment_id(&self) -> &SlotCommitmentId { + &self.previous_commitment_id } /// Returns the roots ID of the [`SlotCommitment`]. @@ -91,6 +90,6 @@ impl SlotCommitment { /// Computes the [`SlotCommitmentId`] of the [`SlotCommitment`]. pub fn id(&self) -> SlotCommitmentId { - SlotCommitmentHash::new(Blake2b256::digest(self.pack_to_vec()).into()).into_slot_commitment_id(self.index) + SlotCommitmentHash::new(Blake2b256::digest(self.pack_to_vec()).into()).into_slot_commitment_id(self.slot) } } From 24f1057a441eb2d130a6d9df5d2bd4d48997b825 Mon Sep 17 00:00:00 2001 From: Thibault Martinez Date: Wed, 22 Nov 2023 17:20:19 +0100 Subject: [PATCH 67/91] Improve insufficient funds error (#1656) * Improve insufficient funds error * nits * Use base unit * Update sdk/src/wallet/error.rs --- sdk/CHANGELOG.md | 4 ++++ sdk/src/wallet/error.rs | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/sdk/CHANGELOG.md b/sdk/CHANGELOG.md index 7910392051..4b1fbe3df7 100644 --- a/sdk/CHANGELOG.md +++ b/sdk/CHANGELOG.md @@ -25,6 +25,10 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - `Account::prepare_claim_outputs` method; +### Changed + +- Display of `WalletError::InsufficientFunds`; + ## 1.1.2 - 2023-10-26 ### Added diff --git a/sdk/src/wallet/error.rs b/sdk/src/wallet/error.rs index 10dcc154c5..612f83e8cd 100644 --- a/sdk/src/wallet/error.rs +++ b/sdk/src/wallet/error.rs @@ -47,7 +47,7 @@ pub enum Error { #[error("failed to get remainder address")] FailedToGetRemainder, /// Insufficient funds to send transaction. - #[error("insufficient funds {available}/{required} available")] + #[error("address owns insufficient funds: {required} base unit required, but {available} base unit available")] InsufficientFunds { available: u64, required: u64 }, /// Invalid coin type, all accounts need to have the same coin type #[error("invalid coin type for new account: {new_coin_type}, existing coin type is: {existing_coin_type}")] From 7f2d54704b9afaeafa88669f225f19ff29fe393a Mon Sep 17 00:00:00 2001 From: Brord van Wierst Date: Wed, 22 Nov 2023 19:55:40 +0100 Subject: [PATCH 68/91] feat/Node: Native token feature (#1616) * native token feature * unused import * flatten * added asNativeToken fn --------- Co-authored-by: Thibault Martinez --- .../examples/client/05-get-address-balance.ts | 13 +++--- .../consolidate-outputs.ts | 6 +-- .../nodejs/lib/types/block/output/feature.ts | 40 ++++++++++++++++++- .../nodejs/lib/types/block/output/output.ts | 28 ++++++------- 4 files changed, 62 insertions(+), 25 deletions(-) diff --git a/bindings/nodejs/examples/client/05-get-address-balance.ts b/bindings/nodejs/examples/client/05-get-address-balance.ts index 1c9b3f6b2d..2146be6a8f 100644 --- a/bindings/nodejs/examples/client/05-get-address-balance.ts +++ b/bindings/nodejs/examples/client/05-get-address-balance.ts @@ -54,11 +54,14 @@ async function run() { for (const outputResponse of addressOutputs) { const output = outputResponse['output']; if (output instanceof CommonOutput) { - (output as CommonOutput).getNativeTokens()?.forEach((token) => { - totalNativeTokens[token.id] = - (totalNativeTokens[token.id] || BigInt(0)) + - token.amount; - }); + const nativeTokenFeature = ( + output as CommonOutput + ).getNativeToken(); + if (nativeTokenFeature != undefined) { + totalNativeTokens[nativeTokenFeature.id] = + (totalNativeTokens[nativeTokenFeature.id] || + BigInt(0)) + nativeTokenFeature.amount; + } } totalAmount += output.getAmount(); diff --git a/bindings/nodejs/examples/how_tos/accounts_and_addresses/consolidate-outputs.ts b/bindings/nodejs/examples/how_tos/accounts_and_addresses/consolidate-outputs.ts index 70df3b9842..e897c7e0dc 100644 --- a/bindings/nodejs/examples/how_tos/accounts_and_addresses/consolidate-outputs.ts +++ b/bindings/nodejs/examples/how_tos/accounts_and_addresses/consolidate-outputs.ts @@ -49,11 +49,11 @@ async function run() { outputs.forEach(({ output, address }, i) => { console.log(`OUTPUT #${i}`); console.log( - '- address: %s\n- amount: %d\n- native tokens: %s', + '- address: %s\n- amount: %d\n- native token: %s', Utils.hexToBech32(address.toString(), 'rms'), output.getAmount(), output instanceof CommonOutput - ? (output as CommonOutput).getNativeTokens() + ? (output as CommonOutput).getNativeToken() ?? [] : [], ); }); @@ -91,7 +91,7 @@ async function run() { Utils.hexToBech32(address.toString(), 'rms'), output.getAmount(), output instanceof CommonOutput - ? (output as CommonOutput).getNativeTokens() + ? (output as CommonOutput).getNativeToken() : undefined, ); }); diff --git a/bindings/nodejs/lib/types/block/output/feature.ts b/bindings/nodejs/lib/types/block/output/feature.ts index b7860615a5..0ea713e422 100644 --- a/bindings/nodejs/lib/types/block/output/feature.ts +++ b/bindings/nodejs/lib/types/block/output/feature.ts @@ -8,8 +8,10 @@ import { BlockIssuerKey, BlockIssuerKeyDiscriminator, } from './block-issuer-key'; -import { u64 } from '../../utils/type-aliases'; +import { u256, u64 } from '../../utils/type-aliases'; import { EpochIndex } from '../../block/slot'; +import { INativeToken } from '../../models/native-token'; +import { HexEncodedString } from '../../utils/hex-encoding'; /** * All of the feature block types. @@ -113,6 +115,40 @@ class TagFeature extends Feature { } } +/** + * Native token feature. + */ +class NativeTokenFeature extends Feature { + /** + * Identifier of the native token. + */ + readonly id: HexEncodedString; + /** + * Amount of native tokens of the given Token ID. + */ + readonly amount: u256; + + /** + * Creates a new `NativeTokenFeature`. + * @param nativeToken The native token stored with the feature. + */ + constructor(nativeToken: INativeToken) { + super(FeatureType.NativeToken); + this.id = nativeToken.id; + this.amount = nativeToken.amount; + } + + /** + * Returns the native token contained in this feature. + */ + public asNativeToken(): INativeToken { + return { + id: this.id, + amount: this.amount, + }; + } +} + /** * Block Issuer feature. */ @@ -178,6 +214,7 @@ const FeatureDiscriminator = { { value: IssuerFeature, name: FeatureType.Issuer as any }, { value: MetadataFeature, name: FeatureType.Metadata as any }, { value: TagFeature, name: FeatureType.Tag as any }, + { value: NativeTokenFeature, name: FeatureType.NativeToken as any }, { value: BlockIssuerFeature, name: FeatureType.BlockIssuer as any }, { value: StakingFeature, name: FeatureType.Staking as any }, ], @@ -191,6 +228,7 @@ export { IssuerFeature, MetadataFeature, TagFeature, + NativeTokenFeature, BlockIssuerFeature, StakingFeature, }; diff --git a/bindings/nodejs/lib/types/block/output/output.ts b/bindings/nodejs/lib/types/block/output/output.ts index 8d54898472..a75124bc78 100644 --- a/bindings/nodejs/lib/types/block/output/output.ts +++ b/bindings/nodejs/lib/types/block/output/output.ts @@ -5,15 +5,15 @@ import { UnlockCondition, UnlockConditionDiscriminator, } from './unlock-condition'; -import { Feature, FeatureDiscriminator } from './feature'; +import { Feature, FeatureDiscriminator, NativeTokenFeature } from './feature'; // Temp solution for not double parsing JSON import { plainToInstance, Type } from 'class-transformer'; -import { HexEncodedString, hexToBigInt, NumericString, u64 } from '../../utils'; +import { HexEncodedString, NumericString, u64 } from '../../utils'; import { TokenScheme, TokenSchemeDiscriminator } from './token-scheme'; -import { INativeToken } from '../../models'; import { AccountId, NftId, AnchorId, DelegationId } from '../id'; import { EpochIndex } from '../../block/slot'; +import { INativeToken } from '../../models/native-token'; export type OutputId = HexEncodedString; @@ -102,9 +102,6 @@ abstract class CommonOutput extends Output { }) readonly unlockConditions: UnlockCondition[]; - // Getter transforms it into nativeTokens with a proper number - private nativeTokens?: INativeToken[]; - /** * The features contained by the output. */ @@ -126,22 +123,21 @@ abstract class CommonOutput extends Output { super(type, amount); this.unlockConditions = unlockConditions; } + /** - * The native tokens held by the output. + * The native token held by the output. */ - getNativeTokens(): INativeToken[] | undefined { - if (!this.nativeTokens) { - return this.nativeTokens; + getNativeToken(): INativeToken | undefined { + if (!this.features) { + return undefined; } - // Make sure the amount of native tokens are of bigint type. - for (let i = 0; i < this.nativeTokens.length; i++) { - const token = this.nativeTokens[i]; - if (typeof token.amount === 'string') { - this.nativeTokens[i].amount = hexToBigInt(token.amount); + for (const feature of this.features) { + if (feature instanceof NativeTokenFeature) { + return (feature as NativeTokenFeature).asNativeToken(); } } - return this.nativeTokens; + return undefined; } } From cae50ffdf43a9de94bb27fdf40876c062768f2f8 Mon Sep 17 00:00:00 2001 From: Thibault Martinez Date: Thu, 23 Nov 2023 09:08:35 +0100 Subject: [PATCH 69/91] CLI: add error logs to console output (#1667) --- cli/src/main.rs | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/cli/src/main.rs b/cli/src/main.rs index df31b1d5c8..52affa93f4 100644 --- a/cli/src/main.rs +++ b/cli/src/main.rs @@ -8,6 +8,7 @@ mod wallet_cli; use clap::Parser; use fern_logger::{LoggerConfigBuilder, LoggerOutputConfigBuilder}; +use log::LevelFilter; use self::{ cli::{new_wallet, Cli}, @@ -35,12 +36,20 @@ fn logger_init(cli: &Cli) -> Result<(), Error> { println_log_error!("{panic_info}"); })); + let target_exclusions = &["rustls"]; let archive = LoggerOutputConfigBuilder::default() .name("archive.log") .level_filter(cli.log_level) - .target_exclusions(&["rustls"]) + .target_exclusions(target_exclusions) .color_enabled(false); - let config = LoggerConfigBuilder::default().with_output(archive).finish(); + let console = LoggerOutputConfigBuilder::default() + .level_filter(LevelFilter::Error) + .target_exclusions(target_exclusions) + .color_enabled(true); + let config = LoggerConfigBuilder::default() + .with_output(archive) + .with_output(console) + .finish(); fern_logger::logger_init(config)?; From 0d9d983fd2aba04149da5c7039203731cc65f386 Mon Sep 17 00:00:00 2001 From: Thibault Martinez Date: Thu, 23 Nov 2023 10:16:33 +0100 Subject: [PATCH 70/91] Implicit account transition (#1598) * First draft * Wallet implicit_account_transition method * Add to CLI * Support for ImplicitAccountCreation in ISA filter * Support for ImplicitAccountCreation in ISA required_account_nft_addresses * Support for implicit accounts in ISA is_account_with_id * Support implicit accounts in ISA validate_transitions * Fix default_transaction_unlocks * Add implicit accounts to input chains * Allow implicit accounts in verify_state_transition * Tmp null IssuerId * Set public key * Add TODOs * Add to bindings core * Nodejs bindings * fix * Python bindings * TODO and errors * Use u32::MAX * Fix address * Remove account file * Add prepare versions * Add Restricted in match * Update bindings/python/iota_sdk/wallet/account.py Co-authored-by: Thoralf-M <46689931+Thoralf-M@users.noreply.github.com> * Log CLI transaction * unreachable -> panic --------- Co-authored-by: Thoralf-M <46689931+Thoralf-M@users.noreply.github.com> --- bindings/core/src/method/wallet.rs | 4 + bindings/core/src/method_handler/wallet.rs | 4 + bindings/core/src/response.rs | 1 + .../nodejs/lib/types/wallet/bridge/account.ts | 384 ------------------ .../nodejs/lib/types/wallet/bridge/index.ts | 2 + .../nodejs/lib/types/wallet/bridge/wallet.ts | 7 + bindings/nodejs/lib/wallet/wallet.ts | 35 ++ bindings/python/iota_sdk/wallet/account.py | 18 + cli/src/wallet_cli/completer.rs | 1 + cli/src/wallet_cli/mod.rs | 21 + .../api/block_builder/input_selection/mod.rs | 53 ++- .../input_selection/requirement/account.rs | 8 +- sdk/src/client/secret/mod.rs | 6 +- sdk/src/types/block/output/account.rs | 6 +- sdk/src/types/block/output/mod.rs | 8 + sdk/src/types/block/semantic.rs | 51 ++- sdk/src/wallet/error.rs | 3 + .../wallet/operations/transaction/account.rs | 83 ++++ sdk/src/wallet/operations/transaction/mod.rs | 3 +- .../transaction/submit_transaction.rs | 7 +- 20 files changed, 268 insertions(+), 437 deletions(-) delete mode 100644 bindings/nodejs/lib/types/wallet/bridge/account.ts create mode 100644 sdk/src/wallet/operations/transaction/account.rs diff --git a/bindings/core/src/method/wallet.rs b/bindings/core/src/method/wallet.rs index 36f280a558..59be946bda 100644 --- a/bindings/core/src/method/wallet.rs +++ b/bindings/core/src/method/wallet.rs @@ -191,6 +191,10 @@ pub enum WalletMethod { /// Returns the implicit account creation address of the wallet if it is Ed25519 based. /// Expected response: [`Bech32Address`](crate::Response::Bech32Address) ImplicitAccountCreationAddress, + /// Prepares to transition an implicit account to an account. + /// Expected response: [`PreparedTransaction`](crate::Response::PreparedTransaction) + #[serde(rename_all = "camelCase")] + PrepareImplicitAccountTransition { output_id: OutputId }, /// Returns the implicit accounts of the wallet. /// Expected response: [`OutputsData`](crate::Response::OutputsData) ImplicitAccounts, diff --git a/bindings/core/src/method_handler/wallet.rs b/bindings/core/src/method_handler/wallet.rs index d7dc3d1121..b70d2e6862 100644 --- a/bindings/core/src/method_handler/wallet.rs +++ b/bindings/core/src/method_handler/wallet.rs @@ -210,6 +210,10 @@ pub(crate) async fn call_wallet_method_internal(wallet: &Wallet, method: WalletM let implicit_account_creation_address = wallet.implicit_account_creation_address().await?; Response::Bech32Address(implicit_account_creation_address) } + WalletMethod::PrepareImplicitAccountTransition { output_id } => { + let data = wallet.prepare_implicit_account_transition(&output_id).await?; + Response::PreparedTransaction(PreparedTransactionDataDto::from(&data)) + } WalletMethod::ImplicitAccounts => { let implicit_accounts = wallet.implicit_accounts().await; Response::OutputsData(implicit_accounts.iter().map(OutputDataDto::from).collect()) diff --git a/bindings/core/src/response.rs b/bindings/core/src/response.rs index 365b629b09..da71cecd3d 100644 --- a/bindings/core/src/response.rs +++ b/bindings/core/src/response.rs @@ -284,6 +284,7 @@ pub enum Response { /// - [`PrepareStopParticipating`](crate::method::WalletMethod::PrepareStopParticipating) /// - [`PrepareTransaction`](crate::method::WalletMethod::PrepareTransaction) /// - [`PrepareVote`](crate::method::WalletMethod::PrepareVote) + /// - [`PrepareImplicitAccountTransition`](crate::method::WalletMethod::PrepareImplicitAccountTransition) PreparedTransaction(PreparedTransactionDataDto), /// Response for: /// - [`PrepareCreateNativeToken`](crate::method::WalletMethod::PrepareCreateNativeToken), diff --git a/bindings/nodejs/lib/types/wallet/bridge/account.ts b/bindings/nodejs/lib/types/wallet/bridge/account.ts deleted file mode 100644 index 26c33803ac..0000000000 --- a/bindings/nodejs/lib/types/wallet/bridge/account.ts +++ /dev/null @@ -1,384 +0,0 @@ -// Copyright 2023 IOTA Stiftung -// SPDX-License-Identifier: Apache-2.0 - -import type { - SendParams, - SendNativeTokenParams, - SendNftParams, - GenerateAddressOptions, -} from '../address'; -import type { Burn, INode, PreparedTransactionData } from '../../client'; -import type { OutputParams } from '../output-params'; -import type { OutputsToClaim } from '../output'; -import type { SignedTransactionData } from '../signed-transaction-data'; -import type { - AccountOutputParams, - CreateNativeTokenParams, - TransactionOptions, - MintNftParams, -} from '../transaction-options'; -import type { - ParticipationEventId, - ParticipationEventRegistrationOptions, - ParticipationEventType, -} from '../participation'; -import type { ConsolidationParams } from '../consolidation-params'; -import { - FilterOptions, - HexEncodedAmount, - NumericString, - Output, - OutputId, - SyncOptions, - TokenId, - TransactionId, -} from '../../'; - -export type __PrepareBurnMethod__ = { - name: 'prepareBurn'; - data: { - burn: Burn; - options?: TransactionOptions; - }; -}; - -export type __ClaimOutputsMethod__ = { - name: 'claimOutputs'; - data: { - outputIdsToClaim: OutputId[]; - }; -}; - -export type __PrepareConsolidateOutputsMethod__ = { - name: 'prepareConsolidateOutputs'; - data: { - params: ConsolidationParams; - }; -}; - -export type __PrepareCreateAccountOutputMethod__ = { - name: 'prepareCreateAccountOutput'; - data: { - params?: AccountOutputParams; - options?: TransactionOptions; - }; -}; - -export type __PrepareMeltNativeTokenMethod__ = { - name: 'prepareMeltNativeToken'; - data: { - tokenId: TokenId; - meltAmount: HexEncodedAmount; - options?: TransactionOptions; - }; -}; - -export type __DeregisterParticipationEventMethod__ = { - name: 'deregisterParticipationEvent'; - data: { - eventId: ParticipationEventId; - }; -}; - -export type __GenerateEd25519AddressesMethod__ = { - name: 'generateEd25519Addresses'; - data: { - amount: number; - options?: GenerateAddressOptions; - }; -}; - -export type __GetBalanceMethod__ = { - name: 'getBalance'; -}; - -export type __GetIncomingTransactionMethod__ = { - name: 'getIncomingTransaction'; - data: { - transactionId: TransactionId; - }; -}; - -export type __GetOutputMethod__ = { - name: 'getOutput'; - data: { - outputId: OutputId; - }; -}; - -export type __GetFoundryOutputMethod__ = { - name: 'getFoundryOutput'; - data: { - tokenId: TokenId; - }; -}; - -export type __ClaimableOutputsMethod__ = { - name: 'claimableOutputs'; - data: { - outputsToClaim: OutputsToClaim; - }; -}; - -export type __GetTransactionMethod__ = { - name: 'getTransaction'; - data: { - transactionId: TransactionId; - }; -}; - -export type __AddressesMethod__ = { - name: 'addresses'; -}; - -export type __AddressesWithUnspentOutputsMethod__ = { - name: 'addressesWithUnspentOutputs'; -}; - -export type __OutputsMethod__ = { - name: 'outputs'; - data: { - filterOptions?: FilterOptions; - }; -}; - -export type __PendingTransactionsMethod__ = { - name: 'pendingTransactions'; -}; - -export type __ImplicitAccountCreationAddressMethod__ = { - name: 'implicitAccountCreationAddress'; -}; - -export type __AccountsMethod__ = { - name: 'accounts'; -}; - -export type __ImplicitAccountsMethod__ = { - name: 'implicitAccounts'; -}; - -export type __IncomingTransactionsMethod__ = { - name: 'incomingTransactions'; -}; - -export type __TransactionsMethod__ = { - name: 'transactions'; -}; - -export type __UnspentOutputsMethod__ = { - name: 'unspentOutputs'; - data: { - filterOptions?: FilterOptions; - }; -}; - -export type __PrepareMintNativeTokenMethod__ = { - name: 'prepareMintNativeToken'; - data: { - tokenId: TokenId; - mintAmount: HexEncodedAmount; - options?: TransactionOptions; - }; -}; - -export type __PrepareCreateNativeTokenMethod__ = { - name: 'prepareCreateNativeToken'; - data: { - params: CreateNativeTokenParams; - options?: TransactionOptions; - }; -}; - -export type __PrepareMintNftsMethod__ = { - name: 'prepareMintNfts'; - data: { - params: MintNftParams[]; - options?: TransactionOptions; - }; -}; - -export type __PrepareOutputMethod__ = { - name: 'prepareOutput'; - data: { - params: OutputParams; - transactionOptions?: TransactionOptions; - }; -}; - -export type __PrepareSendMethod__ = { - name: 'prepareSend'; - data: { - params: SendParams[]; - options?: TransactionOptions; - }; -}; - -export type __PrepareTransactionMethod__ = { - name: 'prepareTransaction'; - data: { - outputs: Output[]; - options?: TransactionOptions; - }; -}; - -export type __RegisterParticipationEventsMethod__ = { - name: 'registerParticipationEvents'; - data: { - options: ParticipationEventRegistrationOptions; - }; -}; - -export type __ReissueTransactionUntilIncludedMethod__ = { - name: 'reissueTransactionUntilIncluded'; - data: { - transactionId: TransactionId; - interval?: number; - maxAttempts?: number; - }; -}; - -export type __SendMethod__ = { - name: 'send'; - data: { - amount: NumericString; - address: string; - options?: TransactionOptions; - }; -}; - -export type __SendWithParamsMethod__ = { - name: 'sendWithParams'; - data: { - params: SendParams[]; - options?: TransactionOptions; - }; -}; - -export type __PrepareSendNativeTokensMethod__ = { - name: 'prepareSendNativeTokens'; - data: { - params: SendNativeTokenParams[]; - options?: TransactionOptions; - }; -}; - -export type __PrepareSendNftMethod__ = { - name: 'prepareSendNft'; - data: { - params: SendNftParams[]; - options?: TransactionOptions; - }; -}; - -export type __SendOutputsMethod__ = { - name: 'sendOutputs'; - data: { - outputs: Output[]; - options?: TransactionOptions; - }; -}; - -export type __SetAliasMethod__ = { - name: 'setAlias'; - data: { - alias: string; - }; -}; - -export type __SetDefaultSyncOptionsMethod__ = { - name: 'setDefaultSyncOptions'; - data: { - options: SyncOptions; - }; -}; - -export type __SignTransactionMethod__ = { - name: 'signTransaction'; - data: { - preparedTransactionData: PreparedTransactionData; - }; -}; - -export type __SignAndSubmitTransactionMethod__ = { - name: 'signAndSubmitTransaction'; - data: { - preparedTransactionData: PreparedTransactionData; - }; -}; - -export type __SubmitAndStoreTransactionMethod__ = { - name: 'submitAndStoreTransaction'; - data: { - signedTransactionData: SignedTransactionData; - }; -}; - -export type __SyncAccountMethod__ = { - name: 'sync'; - data: { - options?: SyncOptions; - }; -}; - -export type __PrepareVoteMethod__ = { - name: 'prepareVote'; - data: { - eventId?: ParticipationEventId; - answers?: number[]; - }; -}; - -export type __PrepareStopParticipatingMethod__ = { - name: 'prepareStopParticipating'; - data: { - eventId: ParticipationEventId; - }; -}; - -export type __GetParticipationOverviewMethod__ = { - name: 'getParticipationOverview'; - data: { - eventIds?: ParticipationEventId[]; - }; -}; - -export type __PrepareIncreaseVotingPowerMethod__ = { - name: 'prepareIncreaseVotingPower'; - data: { - amount: NumericString; - }; -}; - -export type __GetParticipationEventMethod__ = { - name: 'getParticipationEvent'; - data: { - eventId: ParticipationEventId; - }; -}; - -export type __GetParticipationEventIdsMethod__ = { - name: 'getParticipationEventIds'; - data: { - node: INode; - eventType?: ParticipationEventType; - }; -}; - -export type __GetParticipationEventsMethod__ = { - name: 'getParticipationEvents'; -}; - -export type __GetParticipationEventStatusMethod__ = { - name: 'getParticipationEventStatus'; - data: { - eventId: ParticipationEventId; - }; -}; - -export type __PrepareDecreaseVotingPowerMethod__ = { - name: 'prepareDecreaseVotingPower'; - data: { - amount: NumericString; - }; -}; diff --git a/bindings/nodejs/lib/types/wallet/bridge/index.ts b/bindings/nodejs/lib/types/wallet/bridge/index.ts index 2869168102..e5d818dbb6 100644 --- a/bindings/nodejs/lib/types/wallet/bridge/index.ts +++ b/bindings/nodejs/lib/types/wallet/bridge/index.ts @@ -12,6 +12,7 @@ import type { __OutputsMethod__, __PendingTransactionsMethod__, __ImplicitAccountCreationAddressMethod__, + __PrepareImplicitAccountTransitionMethod__, __AccountsMethod__, __ImplicitAccountsMethod__, __IncomingTransactionsMethod__, @@ -85,6 +86,7 @@ export type __WalletMethod__ = | __OutputsMethod__ | __PendingTransactionsMethod__ | __ImplicitAccountCreationAddressMethod__ + | __PrepareImplicitAccountTransitionMethod__ | __AccountsMethod__ | __ImplicitAccountsMethod__ | __IncomingTransactionsMethod__ diff --git a/bindings/nodejs/lib/types/wallet/bridge/wallet.ts b/bindings/nodejs/lib/types/wallet/bridge/wallet.ts index 895a9aeeaf..945086d9fd 100644 --- a/bindings/nodejs/lib/types/wallet/bridge/wallet.ts +++ b/bindings/nodejs/lib/types/wallet/bridge/wallet.ts @@ -233,6 +233,13 @@ export type __ImplicitAccountCreationAddressMethod__ = { name: 'implicitAccountCreationAddress'; }; +export type __PrepareImplicitAccountTransitionMethod__ = { + name: 'prepareImplicitAccountTransition'; + data: { + outputId: OutputId; + }; +}; + export type __ImplicitAccountsMethod__ = { name: 'implicitAccounts'; }; diff --git a/bindings/nodejs/lib/wallet/wallet.ts b/bindings/nodejs/lib/wallet/wallet.ts index 071d0b3667..1b8e547a56 100644 --- a/bindings/nodejs/lib/wallet/wallet.ts +++ b/bindings/nodejs/lib/wallet/wallet.ts @@ -895,6 +895,41 @@ export class Wallet { return JSON.parse(response).payload; } + /** + * Transitions an implicit account to an account. + * + * @param outputId Identifier of the implicit account output. + * @returns The created transaction. + */ + async implicitAccountTransition( + outputId: OutputId, + ): Promise { + return (await this.prepareImplicitAccountTransition(outputId)).send(); + } + + /** + * Prepares to transition an implicit account to an account. + * + * @param outputId Identifier of the implicit account output. + * @returns The prepared transaction. + */ + async prepareImplicitAccountTransition( + outputId: OutputId, + ): Promise { + const response = await this.methodHandler.callMethod({ + name: 'prepareImplicitAccountTransition', + data: { outputId }, + }); + + const parsed = JSON.parse( + response, + ) as Response; + return new PreparedTransaction( + plainToInstance(PreparedTransactionData, parsed.payload), + this, + ); + } + /** * Returns the implicit accounts of the wallet. * diff --git a/bindings/python/iota_sdk/wallet/account.py b/bindings/python/iota_sdk/wallet/account.py index 3bc91c0181..02ce968a41 100644 --- a/bindings/python/iota_sdk/wallet/account.py +++ b/bindings/python/iota_sdk/wallet/account.py @@ -278,6 +278,24 @@ def implicit_account_creation_address(self) -> str: 'implicitAccountCreationAddress' ) + def implicit_account_transition( + self, output_id: OutputId) -> TransactionWithMetadata: + """Transitions an implicit account to an account. + """ + return self.prepare_implicit_account_transition(output_id).send() + + def prepare_implicit_account_transition( + self, output_id: OutputId) -> PreparedTransaction: + """Prepares to transition an implicit account to an account. + """ + prepared = self._call_account_method( + 'implicitAccountTransition', { + 'outputId': output_id + } + ) + return PreparedTransaction( + account=self, prepared_transaction_data=prepared) + def accounts(self) -> List[OutputData]: """Returns the accounts of the wallet. """ diff --git a/cli/src/wallet_cli/completer.rs b/cli/src/wallet_cli/completer.rs index 140183b0b6..af3bc3a843 100644 --- a/cli/src/wallet_cli/completer.rs +++ b/cli/src/wallet_cli/completer.rs @@ -25,6 +25,7 @@ const WALLET_COMMANDS: &[&str] = &[ "exit", "faucet", "implicit-account-creation-address", + "implicit-account-transition", "implicit-accounts", "melt-native-token", "mint-native-token", diff --git a/cli/src/wallet_cli/mod.rs b/cli/src/wallet_cli/mod.rs index 5715f0dabe..9600f81abf 100644 --- a/cli/src/wallet_cli/mod.rs +++ b/cli/src/wallet_cli/mod.rs @@ -120,6 +120,11 @@ pub enum WalletCommand { }, /// Returns the implicit account creation address of the wallet if it is Ed25519 based. ImplicitAccountCreationAddress, + /// Transitions an implicit account to an account. + ImplicitAccountTransition { + /// Identifier of the implicit account output. + output_id: OutputId, + }, /// Lists the implicit accounts of the wallet. ImplicitAccounts, /// Mint additional native tokens. @@ -578,6 +583,19 @@ pub async fn implicit_account_creation_address_command(wallet: &Wallet) -> Resul Ok(()) } +// `implicit-account-transition` command +pub async fn implicit_account_transition_command(wallet: &Wallet, output_id: OutputId) -> Result<(), Error> { + let transaction = wallet.implicit_account_transition(&output_id).await?; + + println_log_info!( + "Implicit account transition transaction sent:\n{:?}\n{:?}", + transaction.transaction_id, + transaction.block_id + ); + + Ok(()) +} + // `implicit-accounts` command pub async fn implicit_accounts_command(wallet: &Wallet) -> Result<(), Error> { print_outputs(wallet.implicit_accounts().await, "Implicit accounts:").await @@ -1103,6 +1121,9 @@ pub async fn prompt_internal( WalletCommand::ImplicitAccountCreationAddress => { implicit_account_creation_address_command(wallet).await } + WalletCommand::ImplicitAccountTransition { output_id } => { + implicit_account_transition_command(wallet, output_id).await + } WalletCommand::ImplicitAccounts => implicit_accounts_command(wallet).await, WalletCommand::MeltNativeToken { token_id, amount } => { melt_native_token_command(wallet, token_id, amount).await diff --git a/sdk/src/client/api/block_builder/input_selection/mod.rs b/sdk/src/client/api/block_builder/input_selection/mod.rs index e9efec2740..da4a4014f3 100644 --- a/sdk/src/client/api/block_builder/input_selection/mod.rs +++ b/sdk/src/client/api/block_builder/input_selection/mod.rs @@ -14,6 +14,7 @@ use std::collections::HashSet; use packable::PackableExt; +use self::requirement::account::is_account_with_id; pub use self::{burn::Burn, error::Error, requirement::Requirement}; use crate::{ client::{api::types::RemainderData, secret::types::InputSigningData}, @@ -68,6 +69,7 @@ impl InputSelection { Address::Account(account_address) => Ok(Some(Requirement::Account(*account_address.account_id()))), Address::Nft(nft_address) => Ok(Some(Requirement::Nft(*nft_address.nft_id()))), Address::Anchor(_) => Err(Error::UnsupportedAddressType(AnchorAddress::KIND)), + Address::ImplicitAccountCreation(_) => Ok(None), Address::Restricted(_) => Ok(None), _ => todo!("What do we do here?"), } @@ -235,10 +237,12 @@ impl InputSelection { .unwrap() .0; - if let Address::Restricted(restricted_address) = required_address { - self.addresses.contains(restricted_address.address()) - } else { - self.addresses.contains(&required_address) + match required_address { + Address::ImplicitAccountCreation(implicit_account_creation) => self + .addresses + .contains(&Address::from(*implicit_account_creation.ed25519_address())), + Address::Restricted(restricted) => self.addresses.contains(restricted.address()), + _ => self.addresses.contains(&required_address), } }) } @@ -401,6 +405,11 @@ impl InputSelection { input_native_tokens_builder.add_native_token(*native_token)?; } match &input.output { + Output::Basic(basic) => { + if basic.is_implicit_account() { + input_accounts.push(input); + } + } Output::Account(_) => { input_accounts.push(input); } @@ -432,25 +441,27 @@ impl InputSelection { let account_input = input_accounts .iter() - .find(|i| { - if let Output::Account(account_input) = &i.output { - *account_output.account_id() == account_input.account_id_non_null(i.output_id()) - } else { - false - } - }) + .find(|i| is_account_with_id(&i.output, account_output.account_id(), i.output_id())) .expect("ISA is broken because there is no account input"); - if let Err(err) = AccountOutput::transition_inner( - account_input.output.as_account(), - account_output, - &input_chains_foundries, - &self.outputs, - ) { - log::debug!("validate_transitions error {err:?}"); - return Err(Error::UnfulfillableRequirement(Requirement::Account( - *account_output.account_id(), - ))); + match &account_input.output { + Output::Account(account) => { + if let Err(err) = AccountOutput::transition_inner( + account, + account_output, + &input_chains_foundries, + &self.outputs, + ) { + log::debug!("validate_transitions error {err:?}"); + return Err(Error::UnfulfillableRequirement(Requirement::Account( + *account_output.account_id(), + ))); + } + } + Output::Basic(_) => { + // TODO https://github.com/iotaledger/iota-sdk/issues/1664 + } + _ => panic!("unreachable: \"input_accounts\" only contains account outputs and implicit account (basic) outputs") } } Output::Foundry(foundry_output) => { diff --git a/sdk/src/client/api/block_builder/input_selection/requirement/account.rs b/sdk/src/client/api/block_builder/input_selection/requirement/account.rs index cc1cf01fe9..87f8cd20cd 100644 --- a/sdk/src/client/api/block_builder/input_selection/requirement/account.rs +++ b/sdk/src/client/api/block_builder/input_selection/requirement/account.rs @@ -9,10 +9,10 @@ use crate::{ /// Checks if an output is an account with output ID that matches the given account ID. pub(crate) fn is_account_with_id(output: &Output, account_id: &AccountId, output_id: &OutputId) -> bool { - if let Output::Account(account) = output { - &account.account_id_non_null(output_id) == account_id - } else { - false + match output { + Output::Basic(basic) => basic.is_implicit_account() && &AccountId::from(output_id) == account_id, + Output::Account(account) => &account.account_id_non_null(output_id) == account_id, + _ => false, } } diff --git a/sdk/src/client/secret/mod.rs b/sdk/src/client/secret/mod.rs index 7293ccfd24..c9af7bc968 100644 --- a/sdk/src/client/secret/mod.rs +++ b/sdk/src/client/secret/mod.rs @@ -553,8 +553,10 @@ where // We can only sign ed25519 addresses and block_indexes needs to contain the account or nft // address already at this point, because the reference index needs to be lower // than the current block index - if !input_address.is_ed25519() { - Err(InputSelectionError::MissingInputWithEd25519Address)?; + match &input_address { + Address::Ed25519(_) | Address::ImplicitAccountCreation(_) => {} + Address::Restricted(restricted) if restricted.address().is_ed25519() => {} + _ => Err(InputSelectionError::MissingInputWithEd25519Address)?, } let chain = input.chain.ok_or(Error::MissingBip32Chain)?; diff --git a/sdk/src/types/block/output/account.rs b/sdk/src/types/block/output/account.rs index 28bb146368..b9b1555725 100644 --- a/sdk/src/types/block/output/account.rs +++ b/sdk/src/types/block/output/account.rs @@ -42,7 +42,11 @@ impl From<&OutputId> for AccountId { impl AccountId { /// pub fn or_from_output_id(self, output_id: &OutputId) -> Self { - if self.is_null() { Self::from(output_id) } else { self } + if self.is_null() { + Self::from(output_id) + } else { + self + } } } diff --git a/sdk/src/types/block/output/mod.rs b/sdk/src/types/block/output/mod.rs index 0f13e5bed2..1a43ccc664 100644 --- a/sdk/src/types/block/output/mod.rs +++ b/sdk/src/types/block/output/mod.rs @@ -319,6 +319,14 @@ impl Output { (None, Some(Self::Delegation(next_state))) => DelegationOutput::creation(next_state, context), // Transitions. + (Some(Self::Basic(current_state)), Some(Self::Account(_next_state))) => { + if !current_state.is_implicit_account() { + Err(StateTransitionError::UnsupportedStateTransition) + } else { + // TODO https://github.com/iotaledger/iota-sdk/issues/1664 + Ok(()) + } + } (Some(Self::Account(current_state)), Some(Self::Account(next_state))) => { AccountOutput::transition(current_state, next_state, context) } diff --git a/sdk/src/types/block/semantic.rs b/sdk/src/types/block/semantic.rs index 6f2b7f726b..c22695ac45 100644 --- a/sdk/src/types/block/semantic.rs +++ b/sdk/src/types/block/semantic.rs @@ -10,7 +10,7 @@ use primitive_types::U256; use crate::types::block::{ address::{Address, AddressCapabilityFlag}, output::{ - AnchorOutput, ChainId, FoundryId, NativeTokens, Output, OutputId, StateTransitionError, TokenId, + AccountId, AnchorOutput, ChainId, FoundryId, NativeTokens, Output, OutputId, StateTransitionError, TokenId, UnlockCondition, }, payload::signed_transaction::{Transaction, TransactionCapabilityFlag, TransactionId, TransactionSigningHash}, @@ -216,6 +216,32 @@ impl<'a> SemanticValidationContext<'a> { inputs: &'a [(&'a OutputId, &'a Output)], unlocks: &'a Unlocks, ) -> Self { + let input_chains = inputs + .iter() + .filter_map(|(output_id, input)| { + if input.is_implicit_account() { + Some((ChainId::from(AccountId::from(*output_id)), *input)) + } else { + input + .chain_id() + .map(|chain_id| (chain_id.or_from_output_id(output_id), *input)) + } + }) + .collect(); + let output_chains = transaction + .outputs() + .iter() + .enumerate() + .filter_map(|(index, output)| { + output.chain_id().map(|chain_id| { + ( + chain_id.or_from_output_id(&OutputId::new(*transaction_id, index as u16).unwrap()), + output, + ) + }) + }) + .collect(); + Self { transaction, transaction_signing_hash: transaction.signing_hash(), @@ -224,30 +250,11 @@ impl<'a> SemanticValidationContext<'a> { input_amount: 0, input_mana: 0, input_native_tokens: BTreeMap::::new(), - input_chains: inputs - .iter() - .filter_map(|(output_id, input)| { - input - .chain_id() - .map(|chain_id| (chain_id.or_from_output_id(output_id), *input)) - }) - .collect(), + input_chains, output_amount: 0, output_mana: 0, output_native_tokens: BTreeMap::::new(), - output_chains: transaction - .outputs() - .iter() - .enumerate() - .filter_map(|(index, output)| { - output.chain_id().map(|chain_id| { - ( - chain_id.or_from_output_id(&OutputId::new(*transaction_id, index as u16).unwrap()), - output, - ) - }) - }) - .collect(), + output_chains, unlocked_addresses: HashSet::new(), storage_deposit_returns: HashMap::new(), simple_deposits: HashMap::new(), diff --git a/sdk/src/wallet/error.rs b/sdk/src/wallet/error.rs index e16408b6e7..a23cb78d59 100644 --- a/sdk/src/wallet/error.rs +++ b/sdk/src/wallet/error.rs @@ -124,6 +124,9 @@ pub enum Error { /// Action requires the wallet to be Ed25519 address based #[error("tried to perform an action that requires the wallet to be Ed25519 address based")] NonEd25519Address, + /// Implicit account not found. + #[error("implicit account not found")] + ImplicitAccountNotFound, } // Serialize type with Display error diff --git a/sdk/src/wallet/operations/transaction/account.rs b/sdk/src/wallet/operations/transaction/account.rs new file mode 100644 index 0000000000..099f9f1fcf --- /dev/null +++ b/sdk/src/wallet/operations/transaction/account.rs @@ -0,0 +1,83 @@ +// Copyright 2023 IOTA Stiftung +// SPDX-License-Identifier: Apache-2.0 + +use crate::{ + client::{api::PreparedTransactionData, secret::SecretManage}, + types::block::{ + address::Address, + output::{ + feature::{BlockIssuerFeature, BlockIssuerKey, BlockIssuerKeys, Ed25519BlockIssuerKey}, + unlock_condition::AddressUnlockCondition, + AccountId, AccountOutput, OutputId, + }, + }, + wallet::{ + operations::transaction::{TransactionOptions, TransactionWithMetadata}, + Error, Result, Wallet, + }, +}; + +impl Wallet +where + crate::wallet::Error: From, + crate::client::Error: From, +{ + /// Transitions an implicit account to an account. + pub async fn implicit_account_transition(&self, output_id: &OutputId) -> Result { + self.sign_and_submit_transaction(self.prepare_implicit_account_transition(output_id).await?, None) + .await + } + + /// Prepares to transition an implicit account to an account. + pub async fn prepare_implicit_account_transition(&self, output_id: &OutputId) -> Result { + let implicit_account_data = self.data().await.unspent_outputs.get(output_id).cloned(); + + let implicit_account = if let Some(implicit_account_data) = &implicit_account_data { + if implicit_account_data.output.is_implicit_account() { + implicit_account_data.output.as_basic() + } else { + return Err(Error::ImplicitAccountNotFound); + } + } else { + return Err(Error::ImplicitAccountNotFound); + }; + + let public_key = if let Some(bip_path) = self.bip_path().await { + self.secret_manager + .read() + .await + .generate_ed25519_public_keys( + bip_path.coin_type, + bip_path.account, + bip_path.address_index..bip_path.address_index + 1, + None, + ) + .await?[0] + } else { + // TODO https://github.com/iotaledger/iota-sdk/issues/1666 + todo!() + }; + + let account = AccountOutput::build_with_amount(implicit_account.amount(), AccountId::from(output_id)) + .with_mana(implicit_account.mana()) + .with_unlock_conditions([AddressUnlockCondition::from(Address::from( + *implicit_account + .address() + .as_implicit_account_creation() + .ed25519_address(), + ))]) + .with_features([BlockIssuerFeature::new( + u32::MAX, + BlockIssuerKeys::from_vec(vec![BlockIssuerKey::from(Ed25519BlockIssuerKey::from(public_key))])?, + )?]) + .finish_output()?; + + let transaction_options = TransactionOptions { + custom_inputs: Some(vec![*output_id]), + ..Default::default() + }; + + self.prepare_transaction(vec![account], transaction_options.clone()) + .await + } +} diff --git a/sdk/src/wallet/operations/transaction/mod.rs b/sdk/src/wallet/operations/transaction/mod.rs index 78cfcdfbf7..d3e2d5498c 100644 --- a/sdk/src/wallet/operations/transaction/mod.rs +++ b/sdk/src/wallet/operations/transaction/mod.rs @@ -1,6 +1,7 @@ // Copyright 2021 IOTA Stiftung // SPDX-License-Identifier: Apache-2.0 +pub(crate) mod account; mod build_transaction; pub(crate) mod high_level; mod input_selection; @@ -185,7 +186,7 @@ where wallet_data.pending_transactions.insert(transaction_id); #[cfg(feature = "storage")] { - // TODO: maybe better to use the wallt address as identifier now? + // TODO: maybe better to use the wallet address as identifier now? log::debug!("[TRANSACTION] storing wallet"); self.save(Some(&wallet_data)).await?; } diff --git a/sdk/src/wallet/operations/transaction/submit_transaction.rs b/sdk/src/wallet/operations/transaction/submit_transaction.rs index 4ce30c6a8f..5c36dcfb1b 100644 --- a/sdk/src/wallet/operations/transaction/submit_transaction.rs +++ b/sdk/src/wallet/operations/transaction/submit_transaction.rs @@ -5,7 +5,7 @@ use crate::wallet::events::types::{TransactionProgressEvent, WalletEvent}; use crate::{ client::secret::{SecretManage, SignBlock}, - types::block::{payload::Payload, BlockId}, + types::block::{payload::Payload, BlockId, IssuerId}, wallet::{operations::transaction::SignedTransactionPayload, Error, Wallet}, }; @@ -23,7 +23,8 @@ where let block = self .client() - .build_basic_block(todo!("issuer id"), Some(Payload::from(transaction_payload))) + // TODO https://github.com/iotaledger/iota-sdk/issues/1665 to set IssuerId + .build_basic_block(IssuerId::null(), Some(Payload::from(transaction_payload))) .await? .sign_ed25519( &*self.get_secret_manager().read().await, @@ -35,7 +36,9 @@ where self.emit(WalletEvent::TransactionProgress(TransactionProgressEvent::Broadcasting)) .await; let block_id = self.client().post_block(&block).await?; + log::debug!("[TRANSACTION] submitted block {}", block_id); + Ok(block_id) } } From d721e7b9087475c3dd12ad8862e646b25528ea2e Mon Sep 17 00:00:00 2001 From: Thibault Martinez Date: Thu, 23 Nov 2023 11:57:30 +0100 Subject: [PATCH 71/91] Remove IssuerId (#1670) --- bindings/core/src/method/client.rs | 4 ++-- bindings/core/tests/combined.rs | 4 ++-- bindings/nodejs/lib/client/client.ts | 3 +-- .../nodejs/lib/types/block/core/signed-block.ts | 10 +++++----- bindings/nodejs/lib/types/block/id.ts | 5 ----- bindings/nodejs/lib/types/client/bridge/client.ts | 3 +-- bindings/python/iota_sdk/types/block/basic.py | 2 +- sdk/examples/client/block/00_block_no_payload.rs | 4 ++-- .../client/block/01_block_confirmation_time.rs | 4 ++-- .../client/block/02_block_custom_parents.rs | 4 ++-- .../client/block/03_block_custom_payload.rs | 4 ++-- sdk/examples/client/block/04_block_tagged_data.rs | 4 ++-- .../client/node_api_core/04_post_block.rs | 4 ++-- .../client/node_api_core/05_post_block_raw.rs | 4 ++-- sdk/src/client/api/block_builder/mod.rs | 5 +++-- sdk/src/client/mod.rs | 4 ++-- sdk/src/types/block/core/basic.rs | 2 +- sdk/src/types/block/core/block.rs | 15 ++++++++------- sdk/src/types/block/issuer_id.rs | 9 --------- sdk/src/types/block/mod.rs | 2 -- sdk/src/types/block/rand/block.rs | 4 ++-- sdk/src/types/block/rand/issuer_id.rs | 9 --------- sdk/src/types/block/rand/mod.rs | 2 -- .../operations/transaction/submit_transaction.rs | 6 +++--- sdk/tests/client/node_api/mod.rs | 5 +++-- 25 files changed, 48 insertions(+), 74 deletions(-) delete mode 100644 sdk/src/types/block/issuer_id.rs delete mode 100644 sdk/src/types/block/rand/issuer_id.rs diff --git a/bindings/core/src/method/client.rs b/bindings/core/src/method/client.rs index 6ab5784327..29e806f6bd 100644 --- a/bindings/core/src/method/client.rs +++ b/bindings/core/src/method/client.rs @@ -20,7 +20,7 @@ use iota_sdk::{ DelegationId, FoundryId, NftId, OutputId, TokenScheme, }, payload::{dto::PayloadDto, signed_transaction::TransactionId}, - BlockDto, BlockId, IssuerId, + BlockDto, BlockId, }, utils::serde::{option_string, string}, }; @@ -126,7 +126,7 @@ pub enum ClientMethod { #[serde(rename_all = "camelCase")] BuildBasicBlock { /// The issuer's ID. - issuer_id: IssuerId, + issuer_id: AccountId, /// The block payload. #[serde(default)] payload: Option, diff --git a/bindings/core/tests/combined.rs b/bindings/core/tests/combined.rs index 68ae893166..2f7a1f7e0e 100644 --- a/bindings/core/tests/combined.rs +++ b/bindings/core/tests/combined.rs @@ -11,7 +11,7 @@ use iota_sdk::{ types::{ block::{ payload::{dto::PayloadDto, Payload, TaggedDataPayload}, - Block, BlockBodyDto, IssuerId, + Block, BlockBodyDto, }, TryFromDto, }, @@ -126,7 +126,7 @@ async fn client_from_wallet() -> Result<()> { // let response = call_client_method( // &client, // ClientMethod::BuildBasicBlock { -// issuer_id: IssuerId::null(), +// issuer_id: AccountId::null(), // payload: Some(payload.clone()), // }, // ) diff --git a/bindings/nodejs/lib/client/client.ts b/bindings/nodejs/lib/client/client.ts index 31f73c0ccf..dcbc06e1a5 100644 --- a/bindings/nodejs/lib/client/client.ts +++ b/bindings/nodejs/lib/client/client.ts @@ -42,7 +42,6 @@ import { NftId, FoundryId, DelegationId, - IssuerId, UnsignedBlock, parseUnsignedBlock, } from '../types/block'; @@ -273,7 +272,7 @@ export class Client { * @returns The block ID followed by the block containing the payload. */ async buildBasicBlock( - issuerId: IssuerId, + issuerId: AccountId, payload?: Payload, ): Promise { const response = await this.methodHandler.callMethod({ diff --git a/bindings/nodejs/lib/types/block/core/signed-block.ts b/bindings/nodejs/lib/types/block/core/signed-block.ts index 44d19bb953..0649a03c0e 100644 --- a/bindings/nodejs/lib/types/block/core/signed-block.ts +++ b/bindings/nodejs/lib/types/block/core/signed-block.ts @@ -1,7 +1,7 @@ // Copyright 2023 IOTA Stiftung // SPDX-License-Identifier: Apache-2.0 -import { IssuerId } from '../id'; +import { AccountId } from '../id'; import { Signature, SignatureDiscriminator } from '../signature'; import { SlotCommitmentId, SlotIndex } from '../slot'; import { u64 } from '../../utils/type-aliases'; @@ -38,7 +38,7 @@ class SignedBlock { /** * The identifier of the account that issued this block. */ - readonly issuerId!: IssuerId; + readonly issuerId!: AccountId; @Type(() => Block, { discriminator: BlockDiscriminator, @@ -59,7 +59,7 @@ class SignedBlock { issuingTime: u64, slotCommitmentId: SlotCommitmentId, latestFinalizedSlot: SlotIndex, - issuerId: IssuerId, + issuerId: AccountId, block: Block, signature: Signature, ) { @@ -147,7 +147,7 @@ class UnsignedBlock { /** * The identifier of the account that issued this block. */ - readonly issuerId!: IssuerId; + readonly issuerId!: AccountId; @Type(() => Block, { discriminator: BlockDiscriminator, @@ -160,7 +160,7 @@ class UnsignedBlock { issuingTime: u64, slotCommitmentId: SlotCommitmentId, latestFinalizedSlot: SlotIndex, - issuerId: IssuerId, + issuerId: AccountId, block: Block, ) { this.protocolVersion = protocolVersion; diff --git a/bindings/nodejs/lib/types/block/id.ts b/bindings/nodejs/lib/types/block/id.ts index 3267996d9d..a2fbf268c1 100644 --- a/bindings/nodejs/lib/types/block/id.ts +++ b/bindings/nodejs/lib/types/block/id.ts @@ -33,11 +33,6 @@ export type TokenId = HexEncodedString; */ export type FoundryId = HexEncodedString; -/** - * An Issuer ID represented as hex-encoded string. - */ -export type IssuerId = HexEncodedString; - /** * Unique identifier of the Delegation Output, which is the BLAKE2b-256 hash of the Output ID that created it. */ diff --git a/bindings/nodejs/lib/types/client/bridge/client.ts b/bindings/nodejs/lib/types/client/bridge/client.ts index 786ed7cb4e..6db9d5ac29 100644 --- a/bindings/nodejs/lib/types/client/bridge/client.ts +++ b/bindings/nodejs/lib/types/client/bridge/client.ts @@ -10,7 +10,6 @@ import type { SignedBlock, BlockId, FoundryId, - IssuerId, AnchorId, NftId, DelegationId, @@ -111,7 +110,7 @@ export interface __SignatureUnlockMethod__ { export interface __BuildBasicBlockMethod__ { name: 'buildBasicBlock'; data: { - issuerId: IssuerId; + issuerId: AccountId; payload?: Payload; }; } diff --git a/bindings/python/iota_sdk/types/block/basic.py b/bindings/python/iota_sdk/types/block/basic.py index b7c6661958..522f5c3588 100644 --- a/bindings/python/iota_sdk/types/block/basic.py +++ b/bindings/python/iota_sdk/types/block/basic.py @@ -20,7 +20,7 @@ class BasicBlock: strong_parents: Blocks that are strongly directly approved. weak_parents: Blocks that are weakly directly approved. shallow_like_parents: Blocks that are directly referenced to adjust opinion. - max_burned_mana: The amount of Mana the Account identified by the IssuerId is at most willing to burn for this block. + max_burned_mana: The amount of Mana the Account identified by the AccountId is at most willing to burn for this block. payload: The optional payload of this block. """ strong_parents: List[HexStr] diff --git a/sdk/examples/client/block/00_block_no_payload.rs b/sdk/examples/client/block/00_block_no_payload.rs index 77b86733ac..0f4b1dbc19 100644 --- a/sdk/examples/client/block/00_block_no_payload.rs +++ b/sdk/examples/client/block/00_block_no_payload.rs @@ -15,7 +15,7 @@ use iota_sdk::{ secret::{SecretManager, SignBlock}, Client, Result, }, - types::block::IssuerId, + types::block::output::AccountId, }; #[tokio::main] @@ -24,7 +24,7 @@ async fn main() -> Result<()> { dotenvy::dotenv().ok(); let node_url = std::env::var("NODE_URL").unwrap(); - let issuer_id = std::env::var("ISSUER_ID").unwrap().parse::().unwrap(); + let issuer_id = std::env::var("ISSUER_ID").unwrap().parse::().unwrap(); // Create a node client. let client = Client::builder().with_node(&node_url)?.finish().await?; diff --git a/sdk/examples/client/block/01_block_confirmation_time.rs b/sdk/examples/client/block/01_block_confirmation_time.rs index 927376169d..6267f7ed18 100644 --- a/sdk/examples/client/block/01_block_confirmation_time.rs +++ b/sdk/examples/client/block/01_block_confirmation_time.rs @@ -15,7 +15,7 @@ use iota_sdk::{ secret::{SecretManager, SignBlock}, Client, Result, }, - types::{api::core::BlockState, block::IssuerId}, + types::{api::core::BlockState, block::output::AccountId}, }; #[tokio::main] @@ -24,7 +24,7 @@ async fn main() -> Result<()> { dotenvy::dotenv().ok(); let node_url = std::env::var("NODE_URL").unwrap(); - let issuer_id = std::env::var("ISSUER_ID").unwrap().parse::().unwrap(); + let issuer_id = std::env::var("ISSUER_ID").unwrap().parse::().unwrap(); // Create a node client. let client = Client::builder().with_node(&node_url)?.finish().await?; diff --git a/sdk/examples/client/block/02_block_custom_parents.rs b/sdk/examples/client/block/02_block_custom_parents.rs index 8b876fd554..9a12661d38 100644 --- a/sdk/examples/client/block/02_block_custom_parents.rs +++ b/sdk/examples/client/block/02_block_custom_parents.rs @@ -15,7 +15,7 @@ use iota_sdk::{ secret::{SecretManager, SignBlock}, Client, Result, }, - types::block::IssuerId, + types::block::output::AccountId, }; #[tokio::main] @@ -24,7 +24,7 @@ async fn main() -> Result<()> { dotenvy::dotenv().ok(); let node_url = std::env::var("NODE_URL").unwrap(); - let issuer_id = std::env::var("ISSUER_ID").unwrap().parse::().unwrap(); + let issuer_id = std::env::var("ISSUER_ID").unwrap().parse::().unwrap(); // Create a node client. let client = Client::builder().with_node(&node_url)?.finish().await?; diff --git a/sdk/examples/client/block/03_block_custom_payload.rs b/sdk/examples/client/block/03_block_custom_payload.rs index db67b48390..baa4883666 100644 --- a/sdk/examples/client/block/03_block_custom_payload.rs +++ b/sdk/examples/client/block/03_block_custom_payload.rs @@ -16,8 +16,8 @@ use iota_sdk::{ Client, Result, }, types::block::{ + output::AccountId, payload::{Payload, TaggedDataPayload}, - IssuerId, }, }; @@ -27,7 +27,7 @@ async fn main() -> Result<()> { dotenvy::dotenv().ok(); let node_url = std::env::var("NODE_URL").unwrap(); - let issuer_id = std::env::var("ISSUER_ID").unwrap().parse::().unwrap(); + let issuer_id = std::env::var("ISSUER_ID").unwrap().parse::().unwrap(); // Create a node client. let client = Client::builder().with_node(&node_url)?.finish().await?; diff --git a/sdk/examples/client/block/04_block_tagged_data.rs b/sdk/examples/client/block/04_block_tagged_data.rs index 7799a80bf9..12ade65585 100644 --- a/sdk/examples/client/block/04_block_tagged_data.rs +++ b/sdk/examples/client/block/04_block_tagged_data.rs @@ -16,8 +16,8 @@ use iota_sdk::{ Client, Result, }, types::block::{ + output::AccountId, payload::{Payload, TaggedDataPayload}, - IssuerId, }, }; @@ -27,7 +27,7 @@ async fn main() -> Result<()> { dotenvy::dotenv().ok(); let node_url = std::env::var("NODE_URL").unwrap(); - let issuer_id = std::env::var("ISSUER_ID").unwrap().parse::().unwrap(); + let issuer_id = std::env::var("ISSUER_ID").unwrap().parse::().unwrap(); // Create a node client. let client = Client::builder().with_node(&node_url)?.finish().await?; diff --git a/sdk/examples/client/node_api_core/04_post_block.rs b/sdk/examples/client/node_api_core/04_post_block.rs index c11d780ae4..7481535227 100644 --- a/sdk/examples/client/node_api_core/04_post_block.rs +++ b/sdk/examples/client/node_api_core/04_post_block.rs @@ -15,7 +15,7 @@ use iota_sdk::{ secret::{SecretManager, SignBlock}, Client, Result, }, - types::block::IssuerId, + types::block::output::AccountId, }; #[tokio::main] @@ -27,7 +27,7 @@ async fn main() -> Result<()> { let node_url = std::env::args() .nth(1) .unwrap_or_else(|| std::env::var("NODE_URL").unwrap()); - let issuer_id = std::env::var("ISSUER_ID").unwrap().parse::().unwrap(); + let issuer_id = std::env::var("ISSUER_ID").unwrap().parse::().unwrap(); // Create a node client. let client = Client::builder().with_node(&node_url)?.finish().await?; diff --git a/sdk/examples/client/node_api_core/05_post_block_raw.rs b/sdk/examples/client/node_api_core/05_post_block_raw.rs index d62d366a5c..608ff4fcaf 100644 --- a/sdk/examples/client/node_api_core/05_post_block_raw.rs +++ b/sdk/examples/client/node_api_core/05_post_block_raw.rs @@ -15,7 +15,7 @@ use iota_sdk::{ secret::{SecretManager, SignBlock}, Client, Result, }, - types::block::IssuerId, + types::block::output::AccountId, }; #[tokio::main] @@ -27,7 +27,7 @@ async fn main() -> Result<()> { let node_url = std::env::args() .nth(1) .unwrap_or_else(|| std::env::var("NODE_URL").unwrap()); - let issuer_id = std::env::var("ISSUER_ID").unwrap().parse::().unwrap(); + let issuer_id = std::env::var("ISSUER_ID").unwrap().parse::().unwrap(); // Create a node client. let client = Client::builder().with_node(&node_url)?.finish().await?; diff --git a/sdk/src/client/api/block_builder/mod.rs b/sdk/src/client/api/block_builder/mod.rs index 51c5806399..ea3137424c 100644 --- a/sdk/src/client/api/block_builder/mod.rs +++ b/sdk/src/client/api/block_builder/mod.rs @@ -9,13 +9,14 @@ use crate::{ client::{ClientInner, Result}, types::block::{ core::{BlockHeader, UnsignedBlock}, + output::AccountId, payload::Payload, - BlockBody, IssuerId, + BlockBody, }, }; impl ClientInner { - pub async fn build_basic_block(&self, issuer_id: IssuerId, payload: Option) -> Result { + pub async fn build_basic_block(&self, issuer_id: AccountId, payload: Option) -> Result { let issuance = self.get_issuance().await?; let issuing_time = { diff --git a/sdk/src/client/mod.rs b/sdk/src/client/mod.rs index e7ec504a6b..195672278b 100644 --- a/sdk/src/client/mod.rs +++ b/sdk/src/client/mod.rs @@ -9,7 +9,7 @@ //! ```no_run //! # use iota_sdk::{ //! # client::{Client, secret::{mnemonic::MnemonicSecretManager, SignBlock}, constants::IOTA_COIN_TYPE}, -//! # types::block::IssuerId, crypto::keys::bip44::Bip44 +//! # types::block::output::AccountId, crypto::keys::bip44::Bip44 //! # }; //! # #[tokio::main] //! # async fn main() -> Result<(), Box> { @@ -20,7 +20,7 @@ //! let secret_manager = MnemonicSecretManager::try_from_mnemonic(std::env::var("MNEMONIC")?)?; //! let protocol_params = client.get_protocol_parameters().await?; //! let block_id = client -//! .build_basic_block(IssuerId::null(), None) +//! .build_basic_block(AccountId::null(), None) //! .await? //! .sign_ed25519(&secret_manager, Bip44::new(IOTA_COIN_TYPE)) //! .await? diff --git a/sdk/src/types/block/core/basic.rs b/sdk/src/types/block/core/basic.rs index 292bd33024..f31aeefb6f 100644 --- a/sdk/src/types/block/core/basic.rs +++ b/sdk/src/types/block/core/basic.rs @@ -115,7 +115,7 @@ pub struct BasicBlockBody { shallow_like_parents: ShallowLikeParents, /// The optional [`Payload`] of the block. payload: OptionalPayload, - /// The amount of Mana the Account identified by [`IssuerId`](super::IssuerId) is at most willing to burn for this + /// The amount of Mana the Account identified by AccountId is at most willing to burn for this /// block. max_burned_mana: u64, } diff --git a/sdk/src/types/block/core/block.rs b/sdk/src/types/block/core/block.rs index 9f536f1b93..b948107147 100644 --- a/sdk/src/types/block/core/block.rs +++ b/sdk/src/types/block/core/block.rs @@ -16,10 +16,11 @@ use packable::{ use crate::types::block::{ block_id::{BlockHash, BlockId}, core::{BasicBlockBody, ValidationBlockBody}, + output::AccountId, protocol::ProtocolParameters, signature::Signature, slot::{SlotCommitmentId, SlotIndex}, - BlockBody, Error, IssuerId, + BlockBody, Error, }; /// Block without a signature. Can be finished into a [`Block`]. @@ -75,13 +76,13 @@ pub struct BlockHeader { /// The slot index of the latest finalized slot. latest_finalized_slot: SlotIndex, /// The identifier of the account that issued this block. - issuer_id: IssuerId, + issuer_id: AccountId, } impl BlockHeader { /// The length of the block header. pub const LENGTH: usize = - size_of::() + 2 * size_of::() + SlotCommitmentId::LENGTH + size_of::() + IssuerId::LENGTH; + size_of::() + 2 * size_of::() + SlotCommitmentId::LENGTH + size_of::() + AccountId::LENGTH; pub fn new( protocol_version: u8, @@ -89,7 +90,7 @@ impl BlockHeader { issuing_time: u64, slot_commitment_id: SlotCommitmentId, latest_finalized_slot: SlotIndex, - issuer_id: IssuerId, + issuer_id: AccountId, ) -> Self { Self { protocol_version, @@ -152,7 +153,7 @@ impl Packable for BlockHeader { let latest_finalized_slot = SlotIndex::unpack::<_, VERIFY>(unpacker, &()).coerce()?; - let issuer_id = IssuerId::unpack::<_, VERIFY>(unpacker, &()).coerce()?; + let issuer_id = AccountId::unpack::<_, VERIFY>(unpacker, &()).coerce()?; Ok(Self { protocol_version, @@ -234,7 +235,7 @@ impl Block { /// Returns the issuer ID of a [`Block`]. #[inline(always)] - pub fn issuer_id(&self) -> IssuerId { + pub fn issuer_id(&self) -> AccountId { self.header.issuer_id() } @@ -414,7 +415,7 @@ pub(crate) mod dto { pub issuing_time: u64, pub slot_commitment_id: SlotCommitmentId, pub latest_finalized_slot: SlotIndex, - pub issuer_id: IssuerId, + pub issuer_id: AccountId, } impl From<&BlockHeader> for BlockHeaderDto { diff --git a/sdk/src/types/block/issuer_id.rs b/sdk/src/types/block/issuer_id.rs deleted file mode 100644 index 7b985dd294..0000000000 --- a/sdk/src/types/block/issuer_id.rs +++ /dev/null @@ -1,9 +0,0 @@ -// Copyright 2020-2021 IOTA Stiftung -// SPDX-License-Identifier: Apache-2.0 - -crate::impl_id!( - /// A unique identifier of a block issuer. - pub IssuerId { - pub const LENGTH: usize = 32; - } -); diff --git a/sdk/src/types/block/mod.rs b/sdk/src/types/block/mod.rs index c5ebdde771..98fbd33edf 100644 --- a/sdk/src/types/block/mod.rs +++ b/sdk/src/types/block/mod.rs @@ -5,7 +5,6 @@ mod block_id; mod error; -mod issuer_id; mod r#macro; /// A module that provides types and syntactic validations of addresses. @@ -46,7 +45,6 @@ pub use self::{ block_id::{BlockHash, BlockId}, core::{Block, BlockBody, UnsignedBlock}, error::Error, - issuer_id::IssuerId, }; pub const PROTOCOL_VERSION: u8 = 3; diff --git a/sdk/src/types/block/rand/block.rs b/sdk/src/types/block/rand/block.rs index 1bf1d3d3bf..7eb3e3d840 100644 --- a/sdk/src/types/block/rand/block.rs +++ b/sdk/src/types/block/rand/block.rs @@ -11,8 +11,8 @@ use crate::types::block::{ protocol::ProtocolParameters, rand::{ bytes::rand_bytes_array, - issuer_id::rand_issuer_id, number::rand_number, + output::rand_account_id, parents::rand_strong_parents, payload::rand_payload_for_block, signature::rand_sign_ed25519, @@ -57,7 +57,7 @@ pub fn rand_block_with_block_body(protocol_params: ProtocolParameters, block: Bl rand_number(), rand_slot_commitment_id(), rand_slot_index(), - rand_issuer_id(), + rand_account_id(), ), block, ) diff --git a/sdk/src/types/block/rand/issuer_id.rs b/sdk/src/types/block/rand/issuer_id.rs deleted file mode 100644 index 0498c06e09..0000000000 --- a/sdk/src/types/block/rand/issuer_id.rs +++ /dev/null @@ -1,9 +0,0 @@ -// Copyright 2023 IOTA Stiftung -// SPDX-License-Identifier: Apache-2.0 - -use crate::types::block::{issuer_id::IssuerId, rand::bytes::rand_bytes_array}; - -/// Generates a random issuer id. -pub fn rand_issuer_id() -> IssuerId { - IssuerId::new(rand_bytes_array()) -} diff --git a/sdk/src/types/block/rand/mod.rs b/sdk/src/types/block/rand/mod.rs index e2357fd710..2cee01ce27 100644 --- a/sdk/src/types/block/rand/mod.rs +++ b/sdk/src/types/block/rand/mod.rs @@ -11,8 +11,6 @@ pub mod bool; pub mod bytes; /// Module providing random input generation utilities. pub mod input; -/// Module providing random issuer ID generation utilities. -pub mod issuer_id; /// Module providing random mana generation utilities. pub mod mana; /// Module providing random number generation utilities. diff --git a/sdk/src/wallet/operations/transaction/submit_transaction.rs b/sdk/src/wallet/operations/transaction/submit_transaction.rs index 5c36dcfb1b..60ebea0a8d 100644 --- a/sdk/src/wallet/operations/transaction/submit_transaction.rs +++ b/sdk/src/wallet/operations/transaction/submit_transaction.rs @@ -5,7 +5,7 @@ use crate::wallet::events::types::{TransactionProgressEvent, WalletEvent}; use crate::{ client::secret::{SecretManage, SignBlock}, - types::block::{payload::Payload, BlockId, IssuerId}, + types::block::{output::AccountId, payload::Payload, BlockId}, wallet::{operations::transaction::SignedTransactionPayload, Error, Wallet}, }; @@ -23,8 +23,8 @@ where let block = self .client() - // TODO https://github.com/iotaledger/iota-sdk/issues/1665 to set IssuerId - .build_basic_block(IssuerId::null(), Some(Payload::from(transaction_payload))) + // TODO https://github.com/iotaledger/iota-sdk/issues/1665 to set AccountId + .build_basic_block(AccountId::null(), Some(Payload::from(transaction_payload))) .await? .sign_ed25519( &*self.get_secret_manager().read().await, diff --git a/sdk/tests/client/node_api/mod.rs b/sdk/tests/client/node_api/mod.rs index b753ec69d1..434c5791ed 100644 --- a/sdk/tests/client/node_api/mod.rs +++ b/sdk/tests/client/node_api/mod.rs @@ -17,8 +17,9 @@ use iota_sdk::{ Client, }, types::block::{ + output::AccountId, payload::{signed_transaction::TransactionId, tagged_data::TaggedDataPayload, Payload}, - BlockId, IssuerId, + BlockId, }, }; @@ -35,7 +36,7 @@ async fn setup_tagged_data_block(secret_manager: &SecretManager) -> BlockId { client .build_basic_block( - IssuerId::null(), + AccountId::null(), Some(Payload::TaggedData(Box::new( TaggedDataPayload::new(b"Hello".to_vec(), b"Tangle".to_vec()).unwrap(), ))), From d2fd6585ffb634c8647ba137df0f7b6414cbd60f Mon Sep 17 00:00:00 2001 From: Thibault Martinez Date: Thu, 23 Nov 2023 13:50:43 +0100 Subject: [PATCH 72/91] Add wallet::submit_block method (#1671) * Add wallet::submit_block method * copyright date * submit_basic_block --- sdk/src/wallet/operations/block.rs | 35 +++++++++++++++++++ sdk/src/wallet/operations/mod.rs | 2 ++ .../wallet/operations/syncing/transactions.rs | 2 +- sdk/src/wallet/operations/transaction/mod.rs | 2 +- .../transaction/submit_transaction.rs | 30 +++++----------- 5 files changed, 47 insertions(+), 24 deletions(-) create mode 100644 sdk/src/wallet/operations/block.rs diff --git a/sdk/src/wallet/operations/block.rs b/sdk/src/wallet/operations/block.rs new file mode 100644 index 0000000000..b6857c9c76 --- /dev/null +++ b/sdk/src/wallet/operations/block.rs @@ -0,0 +1,35 @@ +// Copyright 2023 IOTA Stiftung +// SPDX-License-Identifier: Apache-2.0 + +use crate::{ + client::secret::{SecretManage, SignBlock}, + types::block::{output::AccountId, payload::Payload, BlockId}, + wallet::{Error, Result, Wallet}, +}; + +impl Wallet +where + crate::wallet::Error: From, + crate::client::Error: From, +{ + pub(crate) async fn submit_basic_block(&self, payload: Option) -> Result { + log::debug!("submit_block"); + + let block = self + .client() + // TODO https://github.com/iotaledger/iota-sdk/issues/1665 to set AccountId + .build_basic_block(AccountId::null(), payload) + .await? + .sign_ed25519( + &*self.get_secret_manager().read().await, + self.bip_path().await.ok_or(Error::MissingBipPath)?, + ) + .await?; + + let block_id = self.client().post_block(&block).await?; + + log::debug!("submitted block {}", block_id); + + Ok(block_id) + } +} diff --git a/sdk/src/wallet/operations/mod.rs b/sdk/src/wallet/operations/mod.rs index 73736f248d..3f178f84cd 100644 --- a/sdk/src/wallet/operations/mod.rs +++ b/sdk/src/wallet/operations/mod.rs @@ -3,6 +3,8 @@ /// The module to get the wallet's balance pub(crate) mod balance; +/// The module for blocks +pub(crate) mod block; /// Helper functions pub(crate) mod helpers; /// The module for claiming of outputs with diff --git a/sdk/src/wallet/operations/syncing/transactions.rs b/sdk/src/wallet/operations/syncing/transactions.rs index 15febb3bfb..f7aa640ce4 100644 --- a/sdk/src/wallet/operations/syncing/transactions.rs +++ b/sdk/src/wallet/operations/syncing/transactions.rs @@ -202,7 +202,7 @@ where for mut transaction in transactions_to_reissue { log::debug!("[SYNC] reissue transaction"); - let reissued_block = self.submit_transaction_payload(transaction.payload.clone()).await?; + let reissued_block = self.submit_signed_transaction(transaction.payload.clone()).await?; transaction.block_id.replace(reissued_block); updated_transactions.push(transaction); } diff --git a/sdk/src/wallet/operations/transaction/mod.rs b/sdk/src/wallet/operations/transaction/mod.rs index d3e2d5498c..5bf828b771 100644 --- a/sdk/src/wallet/operations/transaction/mod.rs +++ b/sdk/src/wallet/operations/transaction/mod.rs @@ -144,7 +144,7 @@ where // Ignore errors from sending, we will try to send it again during [`sync_pending_transactions`] let block_id = match self - .submit_transaction_payload(signed_transaction_data.payload.clone()) + .submit_signed_transaction(signed_transaction_data.payload.clone()) .await { Ok(block_id) => Some(block_id), diff --git a/sdk/src/wallet/operations/transaction/submit_transaction.rs b/sdk/src/wallet/operations/transaction/submit_transaction.rs index 60ebea0a8d..bf202b44f8 100644 --- a/sdk/src/wallet/operations/transaction/submit_transaction.rs +++ b/sdk/src/wallet/operations/transaction/submit_transaction.rs @@ -4,9 +4,9 @@ #[cfg(feature = "events")] use crate::wallet::events::types::{TransactionProgressEvent, WalletEvent}; use crate::{ - client::secret::{SecretManage, SignBlock}, - types::block::{output::AccountId, payload::Payload, BlockId}, - wallet::{operations::transaction::SignedTransactionPayload, Error, Wallet}, + client::secret::SecretManage, + types::block::{payload::Payload, BlockId}, + wallet::{operations::transaction::SignedTransactionPayload, Wallet}, }; impl Wallet @@ -14,31 +14,17 @@ where crate::wallet::Error: From, crate::client::Error: From, { - /// Submits a payload in a block - pub(crate) async fn submit_transaction_payload( + /// Submits a signed transaction in a block. + pub(crate) async fn submit_signed_transaction( &self, - transaction_payload: SignedTransactionPayload, + payload: SignedTransactionPayload, ) -> crate::wallet::Result { - log::debug!("[TRANSACTION] send_payload"); - - let block = self - .client() - // TODO https://github.com/iotaledger/iota-sdk/issues/1665 to set AccountId - .build_basic_block(AccountId::null(), Some(Payload::from(transaction_payload))) - .await? - .sign_ed25519( - &*self.get_secret_manager().read().await, - self.bip_path().await.ok_or(Error::MissingBipPath)?, - ) - .await?; + log::debug!("[TRANSACTION] submit_signed_transaction"); #[cfg(feature = "events")] self.emit(WalletEvent::TransactionProgress(TransactionProgressEvent::Broadcasting)) .await; - let block_id = self.client().post_block(&block).await?; - - log::debug!("[TRANSACTION] submitted block {}", block_id); - Ok(block_id) + self.submit_basic_block(Some(Payload::from(payload))).await } } From 7c397a275407b8ff872ca9bc16e9434781bb0bf8 Mon Sep 17 00:00:00 2001 From: Thibault Martinez Date: Thu, 23 Nov 2023 19:02:05 +0100 Subject: [PATCH 73/91] python: add Multi/Empty unlocks (#1674) * python add Multi/Empty unlocks * deserialize_unlocks --- bindings/python/iota_sdk/types/payload.py | 6 ++-- bindings/python/iota_sdk/types/unlock.py | 37 ++++++++++++++++++++++- 2 files changed, 40 insertions(+), 3 deletions(-) diff --git a/bindings/python/iota_sdk/types/payload.py b/bindings/python/iota_sdk/types/payload.py index dd222b435a..280e97fb82 100644 --- a/bindings/python/iota_sdk/types/payload.py +++ b/bindings/python/iota_sdk/types/payload.py @@ -7,7 +7,7 @@ from dataclasses import dataclass, field from iota_sdk.types.common import HexStr, json from iota_sdk.types.transaction import Transaction -from iota_sdk.types.unlock import SignatureUnlock, ReferenceUnlock +from iota_sdk.types.unlock import Unlock, deserialize_unlocks class PayloadType(IntEnum): @@ -50,7 +50,9 @@ class SignedTransactionPayload: unlocks: The unlocks of the transaction. """ transaction: Transaction - unlocks: List[Union[SignatureUnlock, ReferenceUnlock]] + unlocks: List[Unlock] = field(metadata=config( + decoder=deserialize_unlocks + )) type: int = field( default_factory=lambda: int( PayloadType.SignedTransaction), diff --git a/bindings/python/iota_sdk/types/unlock.py b/bindings/python/iota_sdk/types/unlock.py index 4a99672783..5f5f4b3296 100644 --- a/bindings/python/iota_sdk/types/unlock.py +++ b/bindings/python/iota_sdk/types/unlock.py @@ -18,6 +18,8 @@ class UnlockType(IntEnum): Account (2): An unlock which must reference a previous unlock which unlocks the account that the input is locked to. Anchor (3): An unlock which must reference a previous unlock which unlocks the anchor that the input is locked to. Nft (4): An unlock which must reference a previous unlock which unlocks the NFT that the input is locked to. + Multi (5): Unlocks a MultiAddress with a list of other unlocks. + Empty (6): Used to maintain correct index relationship between addresses and signatures when unlocking a MultiUnlock where not all addresses are unlocked. """ Signature = 0 @@ -25,6 +27,8 @@ class UnlockType(IntEnum): Account = 2 Anchor = 3 Nft = 4 + Multi = 5 + Empty = 6 @json @@ -84,11 +88,38 @@ class NftUnlock: type: int = field(default_factory=lambda: int(UnlockType.Nft), init=False) +@json +@dataclass +class MultiUnlock: + """Unlocks a MultiAddress with a list of other unlocks. + """ + unlocks: List[Unlock] = field(metadata=config( + decoder=deserialize_unlocks + )) + type: int = field( + default_factory=lambda: int( + UnlockType.Multi), + init=False) + + +@json +@dataclass +class EmptyUnlock: + """Used to maintain correct index relationship between addresses and signatures when unlocking a MultiUnlock where not all addresses are unlocked. + """ + type: int = field( + default_factory=lambda: int( + UnlockType.Empty), + init=False) + + Unlock: TypeAlias = Union[SignatureUnlock, ReferenceUnlock, AccountUnlock, AnchorUnlock, - NftUnlock] + NftUnlock, + MultiUnlock, + EmptyUnlock] def deserialize_unlock(d: Dict[str, Any]) -> Unlock: @@ -109,6 +140,10 @@ def deserialize_unlock(d: Dict[str, Any]) -> Unlock: return AnchorUnlock.from_dict(d) if unlock_type == UnlockType.Nft: return NftUnlock.from_dict(d) + if unlock_type == UnlockType.Multi: + return MultiUnlock.from_dict(d) + if unlock_type == UnlockType.Empty: + return EmptyUnlock.from_dict(d) raise Exception(f'invalid unlock type: {unlock_type}') From d4eb8146bdac6ab2e344015c8da27ebbdfcfe4e3 Mon Sep 17 00:00:00 2001 From: Thibault Martinez Date: Thu, 23 Nov 2023 19:50:54 +0100 Subject: [PATCH 74/91] Add parameters suffix to version signaling (#1668) --- bindings/nodejs/lib/types/models/info/node-info-protocol.ts | 2 +- bindings/python/iota_sdk/types/node_info.py | 6 +++--- sdk/src/types/block/protocol.rs | 4 ++-- sdk/tests/types/protocol.rs | 2 +- 4 files changed, 7 insertions(+), 7 deletions(-) diff --git a/bindings/nodejs/lib/types/models/info/node-info-protocol.ts b/bindings/nodejs/lib/types/models/info/node-info-protocol.ts index ad0959d487..592f7accaf 100644 --- a/bindings/nodejs/lib/types/models/info/node-info-protocol.ts +++ b/bindings/nodejs/lib/types/models/info/node-info-protocol.ts @@ -102,7 +102,7 @@ export interface ProtocolParameters { /** * The parameters used by signaling protocol parameters upgrade. */ - versionSignaling: VersionSignalingParameters; + versionSignalingParameters: VersionSignalingParameters; /** * Rewards Parameters defines the parameters that are used to calculate Mana rewards. */ diff --git a/bindings/python/iota_sdk/types/node_info.py b/bindings/python/iota_sdk/types/node_info.py index 67f6dd9201..2b6c184828 100644 --- a/bindings/python/iota_sdk/types/node_info.py +++ b/bindings/python/iota_sdk/types/node_info.py @@ -149,7 +149,7 @@ class CongestionControlParameters: @json @dataclass -class VersionSignaling: +class VersionSignalingParameters: """Version Signaling defines the parameters used by signaling protocol parameters upgrade. Attributes: @@ -237,7 +237,7 @@ class ProtocolParameters: max_committable_age: Max_committable_age is the maximum age for a slot commitment to be included in a block relative to the slot index of the block issuing time. epoch_nearing_threshold: Determine the slot that should trigger a new committee selection for the next and upcoming epoch. congestion_control_parameters: Congestion Control Parameters defines the parameters used to calculate the Reference Mana Cost (RMC). - version_signaling: The version signaling parameters. + version_signaling_parameters: The version signaling parameters. rewards_parameters: Rewards Parameters defines the parameters that are used to calculate Mana rewards. """ type: int @@ -271,7 +271,7 @@ class ProtocolParameters: encoder=str )) congestion_control_parameters: CongestionControlParameters - version_signaling: VersionSignaling + version_signaling_parameters: VersionSignalingParameters rewards_parameters: RewardsParameters diff --git a/sdk/src/types/block/protocol.rs b/sdk/src/types/block/protocol.rs index 4577a31b94..0c3b216e2a 100644 --- a/sdk/src/types/block/protocol.rs +++ b/sdk/src/types/block/protocol.rs @@ -82,7 +82,7 @@ pub struct ProtocolParameters { /// Parameters used to calculate the Reference Mana Cost (RMC). pub(crate) congestion_control_parameters: CongestionControlParameters, /// Defines the parameters used to signal a protocol parameters upgrade. - pub(crate) version_signaling: VersionSignalingParameters, + pub(crate) version_signaling_parameters: VersionSignalingParameters, /// Defines the parameters used for reward calculation. pub(crate) rewards_parameters: RewardsParameters, /// Defines the target size of the committee. If there's fewer candidates the actual committee size could be @@ -122,7 +122,7 @@ impl Default for ProtocolParameters { min_committable_age: 10, max_committable_age: 20, congestion_control_parameters: Default::default(), - version_signaling: Default::default(), + version_signaling_parameters: Default::default(), rewards_parameters: Default::default(), target_committee_size: 32, } diff --git a/sdk/tests/types/protocol.rs b/sdk/tests/types/protocol.rs index c1918d6950..d8758cb864 100644 --- a/sdk/tests/types/protocol.rs +++ b/sdk/tests/types/protocol.rs @@ -64,7 +64,7 @@ // "maxBufferSize":1000, // "maxValidationBufferSize":100 // }, -// "versionSignaling":{ +// "versionSignalingParameters":{ // "windowSize":7, // "windowTargetRatio":5, // "activationOffset":7 From 276ef191dd4897bde780469e262b620820a89d42 Mon Sep 17 00:00:00 2001 From: Thibault Martinez Date: Fri, 24 Nov 2023 09:12:25 +0100 Subject: [PATCH 75/91] Rename RentStructure to StorageScoreParameters in bindings (#1673) * Nodejs bindings * Python bindings * Fmt * Update bindings/nodejs/lib/utils/utils.ts Co-authored-by: Thoralf-M <46689931+Thoralf-M@users.noreply.github.com> --------- Co-authored-by: Thoralf-M <46689931+Thoralf-M@users.noreply.github.com> --- bindings/nodejs/lib/types/models/index.ts | 2 +- .../types/models/info/node-info-protocol.ts | 6 ++-- .../nodejs/lib/types/models/rent-structure.ts | 32 ----------------- .../nodejs/lib/types/models/storage-score.ts | 34 +++++++++++++++++++ .../nodejs/lib/types/utils/bridge/utils.ts | 4 +-- bindings/nodejs/lib/utils/utils.ts | 11 +++--- bindings/python/iota_sdk/types/node_info.py | 32 ++++++++--------- 7 files changed, 63 insertions(+), 58 deletions(-) delete mode 100644 bindings/nodejs/lib/types/models/rent-structure.ts create mode 100644 bindings/nodejs/lib/types/models/storage-score.ts diff --git a/bindings/nodejs/lib/types/models/index.ts b/bindings/nodejs/lib/types/models/index.ts index 62574467fb..8789189173 100644 --- a/bindings/nodejs/lib/types/models/index.ts +++ b/bindings/nodejs/lib/types/models/index.ts @@ -10,5 +10,5 @@ export * from './gossip-metrics'; export * from './gossip-heartbeat'; export * from './native-token'; export * from './peer'; -export * from './rent-structure'; +export * from './storage-score'; export * from './state'; diff --git a/bindings/nodejs/lib/types/models/info/node-info-protocol.ts b/bindings/nodejs/lib/types/models/info/node-info-protocol.ts index 592f7accaf..21cb9953a8 100644 --- a/bindings/nodejs/lib/types/models/info/node-info-protocol.ts +++ b/bindings/nodejs/lib/types/models/info/node-info-protocol.ts @@ -1,7 +1,7 @@ // Copyright 2023 IOTA Stiftung // SPDX-License-Identifier: Apache-2.0 -import type { RentStructure } from '../rent-structure'; +import type { StorageScoreParameters } from '../storage-score'; import { EpochIndex } from '../../block/slot'; import { u64 } from '../../utils'; @@ -40,9 +40,9 @@ export interface ProtocolParameters { */ bech32Hrp: string; /** - * The rent structure according to TIP-19. + * The storage score parameters used by given node/network. */ - rentStructure: RentStructure; + storageScoreParameters: StorageScoreParameters; /** * Work Score Parameters lists the work score of each type, it is used to denote the computation costs of processing an object. */ diff --git a/bindings/nodejs/lib/types/models/rent-structure.ts b/bindings/nodejs/lib/types/models/rent-structure.ts deleted file mode 100644 index 14bb53eb99..0000000000 --- a/bindings/nodejs/lib/types/models/rent-structure.ts +++ /dev/null @@ -1,32 +0,0 @@ -// Copyright 2023 IOTA Stiftung -// SPDX-License-Identifier: Apache-2.0 - -/** - * Defines the parameters of rent cost calculations on objects which take node resources. - */ -export interface RentStructure { - /** - * Defines the rent of a single virtual byte denoted in IOTA token. - */ - vByteCost: number; - /** - * The factor to be used for data only fields. - */ - vByteFactorData: number; - /** - * The factor to be used for key/lookup generating fields. - */ - vByteFactorKey: number; - /** - * Defines the factor to be used for block issuer feature public keys. - */ - vByteFactorBlockIssuerKey: number; - /** - * Defines the factor to be used for staking feature. - */ - vByteFactorStakingFeature: number; - /** - * Defines the factor to be used for delegation output. - */ - vByteFactorDelegation: number; -} diff --git a/bindings/nodejs/lib/types/models/storage-score.ts b/bindings/nodejs/lib/types/models/storage-score.ts new file mode 100644 index 0000000000..ebfe1bb183 --- /dev/null +++ b/bindings/nodejs/lib/types/models/storage-score.ts @@ -0,0 +1,34 @@ +// Copyright 2023 IOTA Stiftung +// SPDX-License-Identifier: Apache-2.0 + +import { u64 } from '../../utils'; + +/** + * Defines the parameters of storage score calculations on objects which take node resources. + */ +export interface StorageScoreParameters { + /** + * Defines the number of IOTA tokens required per unit of storage score. + */ + storageCost: u64; + /** + * Defines the factor to be used for data only fields. + */ + factorData: number; + /** + * Defines the offset to be applied to all outputs for the overhead of handling them in storage. + */ + offsetOutputOverhead: u64; + /** + * Defines the offset to be used for block issuer feature public keys. + */ + offsetEd25519BlockIssuerKey: u64; + /** + * Defines the offset to be used for staking feature. + */ + offsetStakingFeature: u64; + /** + * Defines the offset to be used for delegation output. + */ + offsetDelegation: u64; +} diff --git a/bindings/nodejs/lib/types/utils/bridge/utils.ts b/bindings/nodejs/lib/types/utils/bridge/utils.ts index 906ddfbb83..ea1ccd0a43 100644 --- a/bindings/nodejs/lib/types/utils/bridge/utils.ts +++ b/bindings/nodejs/lib/types/utils/bridge/utils.ts @@ -6,7 +6,7 @@ import { TransactionId, TokenSchemeType, Output, - RentStructure, + StorageScoreParameters, SignedBlock, ProtocolParameters, OutputId, @@ -62,7 +62,7 @@ export interface __ComputeStorageDepositMethod__ { name: 'computeStorageDeposit'; data: { output: Output; - rent: RentStructure; + storageScoreParameters: StorageScoreParameters; }; } diff --git a/bindings/nodejs/lib/utils/utils.ts b/bindings/nodejs/lib/utils/utils.ts index c4b23ad3ab..bcd94c41b3 100644 --- a/bindings/nodejs/lib/utils/utils.ts +++ b/bindings/nodejs/lib/utils/utils.ts @@ -11,7 +11,7 @@ import { TransactionId, TokenSchemeType, Output, - RentStructure, + StorageScoreParameters, OutputId, u64, SignedBlock, @@ -127,15 +127,18 @@ export class Utils { * Compute the required storage deposit of an output. * * @param output The output. - * @param rent Rent cost of objects which take node resources. + * @param storageScoreParameters Storage score of objects which take node resources. * @returns The required storage deposit. */ - static computeStorageDeposit(output: Output, rent: RentStructure): u64 { + static computeStorageDeposit( + output: Output, + storageScoreParameters: StorageScoreParameters, + ): u64 { const minStorageDepositAmount = callUtilsMethod({ name: 'computeStorageDeposit', data: { output, - rent, + storageScoreParameters, }, }); return BigInt(minStorageDepositAmount); diff --git a/bindings/python/iota_sdk/types/node_info.py b/bindings/python/iota_sdk/types/node_info.py index 2b6c184828..4f27e2488c 100644 --- a/bindings/python/iota_sdk/types/node_info.py +++ b/bindings/python/iota_sdk/types/node_info.py @@ -68,23 +68,23 @@ class NodeInfoMetrics: @json @dataclass -class RentStructure: - """Rent structure for the storage deposit. +class StorageScoreParameters: + """Defines the parameters of storage score calculations on objects which take node resources. Attributes: - v_byte_cost: Defines the rent of a single virtual byte denoted in IOTA tokens. - v_byte_factor_data: Defines the factor to be used for data only fields. - v_byte_factor_key: Defines the factor to be used for key/lookup generating fields. - v_byte_factor_block_issuer_key: Defines the factor to be used for block issuer feature public keys. - v_byte_factor_staking_feature: Defines the factor to be used for staking feature. - v_byte_factor_delegation: Defines the factor to be used for delegation output. + storage_cost: Defines the number of IOTA tokens required per unit of storage score. + factor_data: Defines the factor to be used for data only fields. + offset_output_overhead: Defines the offset to be applied to all outputs for the overhead of handling them in storage. + offset_ed25519_block_issuer_key: Defines the offset to be used for block issuer feature public keys. + offset_staking_feature: Defines the offset to be used for staking feature. + offset_delegation: Defines the offset to be used for delegation output. """ - v_byte_cost: int - v_byte_factor_data: int - v_byte_factor_key: int - v_byte_factor_block_issuer_key: int - v_byte_factor_staking_feature: int - v_byte_factor_delegation: int + storage_cost: int + factor_data: int + offset_output_overhead: int + offset_ed25519_block_issuer_key: int + offset_staking_feature: int + offset_delegation: int @json @@ -222,7 +222,7 @@ class ProtocolParameters: bech32_hrp: Tells whether the node supports mainnet or testnet addresses. Value `iota` indicates that the node supports mainnet addresses. Value `atoi` indicates that the node supports testnet addresses. - rent_structure: The rent structure used by a given node/network. + storage_score_parameters: The storage score parameters used by given node/network. work_score_parameters: Work Score Parameters lists the work score of each type, it is used to denote the computation costs of processing an object. token_supply: Current supply of the base token. Plain string encoded number. genesis_unix_timestamp: The genesis timestamp at which the slots start to count. @@ -244,7 +244,7 @@ class ProtocolParameters: version: int network_name: str bech32_hrp: str - rent_structure: RentStructure + storage_score_parameters: StorageScoreParameters work_score_parameters: WorkScoreParameters token_supply: int = field(metadata=config( encoder=str From 57db1b0c441f226b2e9631cb8da0c3c1f108fb8a Mon Sep 17 00:00:00 2001 From: Thibault Martinez Date: Fri, 24 Nov 2023 10:08:09 +0100 Subject: [PATCH 76/91] Fix IssuanceBlockHeaderResponse (#1677) --- sdk/src/types/api/core.rs | 2 ++ sdk/src/wallet/operations/block.rs | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/sdk/src/types/api/core.rs b/sdk/src/types/api/core.rs index db1b1ffe7a..1a0648cf53 100644 --- a/sdk/src/types/api/core.rs +++ b/sdk/src/types/api/core.rs @@ -268,8 +268,10 @@ pub struct IssuanceBlockHeaderResponse { /// Blocks that are strongly directly approved. pub strong_parents: BTreeSet, /// Blocks that are weakly directly approved. + #[serde(default, skip_serializing_if = "BTreeSet::is_empty")] pub weak_parents: BTreeSet, /// Blocks that are directly referenced to adjust opinion. + #[serde(default, skip_serializing_if = "BTreeSet::is_empty")] pub shallow_like_parents: BTreeSet, /// The slot index of the latest finalized slot. pub latest_finalized_slot: SlotIndex, diff --git a/sdk/src/wallet/operations/block.rs b/sdk/src/wallet/operations/block.rs index b6857c9c76..93f1a63914 100644 --- a/sdk/src/wallet/operations/block.rs +++ b/sdk/src/wallet/operations/block.rs @@ -13,7 +13,7 @@ where crate::client::Error: From, { pub(crate) async fn submit_basic_block(&self, payload: Option) -> Result { - log::debug!("submit_block"); + log::debug!("submit_basic_block"); let block = self .client() From 579ac267e9ed4c52620960d44173f2957472370c Mon Sep 17 00:00:00 2001 From: Thoralf-M <46689931+Thoralf-M@users.noreply.github.com> Date: Sat, 25 Nov 2023 11:51:23 +0100 Subject: [PATCH 77/91] Address some TODOs (#1681) Co-authored-by: Thibault Martinez --- .github/actions/private-tangle/setup/action.yml | 7 +++---- sdk/src/client/secret/ledger_nano.rs | 1 - sdk/src/client/stronghold/secret.rs | 10 ++++++---- sdk/src/types/block/rand/output/mod.rs | 1 - sdk/src/wallet/core/operations/client.rs | 3 +-- 5 files changed, 10 insertions(+), 12 deletions(-) diff --git a/.github/actions/private-tangle/setup/action.yml b/.github/actions/private-tangle/setup/action.yml index 1163afba10..2504053375 100644 --- a/.github/actions/private-tangle/setup/action.yml +++ b/.github/actions/private-tangle/setup/action.yml @@ -38,7 +38,6 @@ runs: - name: Wait for tangle to start shell: bash run: wget -qO- https://raw.githubusercontent.com/eficode/wait-for/v2.2.4/wait-for | sh -s -- -t 120 http://localhost:8050/health -- echo "Tangle is up" - # TODO enable, maybe need another URL - # - name: Wait for faucet to start - # shell: bash - # run: wget -qO- https://raw.githubusercontent.com/eficode/wait-for/v2.2.4/wait-for | sh -s -- -t 120 http://localhost:8081/api/info -- echo "Faucet is up" + - name: Wait for faucet to start + shell: bash + run: wget -qO- https://raw.githubusercontent.com/eficode/wait-for/v2.2.4/wait-for | sh -s -- -t 120 http://localhost:8088/health -- echo "Faucet is up" diff --git a/sdk/src/client/secret/ledger_nano.rs b/sdk/src/client/secret/ledger_nano.rs index 7c38f03597..d3b3009665 100644 --- a/sdk/src/client/secret/ledger_nano.rs +++ b/sdk/src/client/secret/ledger_nano.rs @@ -145,7 +145,6 @@ impl SecretManage for LedgerSecretManager { ) -> Result, Self::Error> { // need an update on the ledger C lib todo!(); - // // let options = options.into().unwrap_or_default(); // let bip32_account = account_index.harden().into(); diff --git a/sdk/src/client/stronghold/secret.rs b/sdk/src/client/stronghold/secret.rs index cc0993a522..813fcf07d1 100644 --- a/sdk/src/client/stronghold/secret.rs +++ b/sdk/src/client/stronghold/secret.rs @@ -581,10 +581,12 @@ mod tests { stronghold_adapter.clear_key().await; // Address generation returns an error when the key is cleared. - assert!(stronghold_adapter - .generate_ed25519_addresses(IOTA_COIN_TYPE, 0, 0..1, None,) - .await - .is_err()); + assert!( + stronghold_adapter + .generate_ed25519_addresses(IOTA_COIN_TYPE, 0, 0..1, None,) + .await + .is_err() + ); stronghold_adapter.set_password("drowssap".to_owned()).await.unwrap(); diff --git a/sdk/src/types/block/rand/output/mod.rs b/sdk/src/types/block/rand/output/mod.rs index f96ada2d25..c5e73988bc 100644 --- a/sdk/src/types/block/rand/output/mod.rs +++ b/sdk/src/types/block/rand/output/mod.rs @@ -43,7 +43,6 @@ pub fn rand_output_id() -> OutputId { /// Generates a random [`BasicOutput`](BasicOutput). pub fn rand_basic_output(token_supply: u64) -> BasicOutput { - // TODO: Add `NativeTokens` BasicOutput::build_with_amount(rand_number_range(0..token_supply)) .with_features(rand_allowed_features(BasicOutput::ALLOWED_FEATURES)) .add_unlock_condition(rand_address_unlock_condition()) diff --git a/sdk/src/wallet/core/operations/client.rs b/sdk/src/wallet/core/operations/client.rs index fadc9309ed..0336b61bea 100644 --- a/sdk/src/wallet/core/operations/client.rs +++ b/sdk/src/wallet/core/operations/client.rs @@ -63,8 +63,7 @@ where // Update the protocol of the network_info to not have the default data, which can be wrong // Ignore errors, because there might be no node at all and then it should still not error if let Ok(info) = self.client.get_info().await { - // TODO - // network_info.protocol_parameters = info.node_info.protocol; + network_info.protocol_parameters = info.node_info.latest_protocol_parameters().parameters.clone(); } *self.client.network_info.write().await = network_info; From f32aec64c21aa232d7c2b1bc3ac8d9a57090b599 Mon Sep 17 00:00:00 2001 From: Thibault Martinez Date: Sat, 25 Nov 2023 11:51:45 +0100 Subject: [PATCH 78/91] Unlock RestrictedAddress (#1678) --- sdk/src/types/block/address/mod.rs | 3 +++ 1 file changed, 3 insertions(+) diff --git a/sdk/src/types/block/address/mod.rs b/sdk/src/types/block/address/mod.rs index f748591f85..f9644d7ba4 100644 --- a/sdk/src/types/block/address/mod.rs +++ b/sdk/src/types/block/address/mod.rs @@ -192,6 +192,9 @@ impl Address { return Err(TransactionFailureReason::InvalidInputUnlock); } } + (Self::Restricted(restricted_address), _) => { + return restricted_address.address().unlock(unlock, context); + } _ => return Err(TransactionFailureReason::InvalidInputUnlock), } From 2d13dc0a2713e7423ca8edf45e3d4f79d88cc33e Mon Sep 17 00:00:00 2001 From: Brord van Wierst Date: Sat, 25 Nov 2023 17:27:18 +0100 Subject: [PATCH 79/91] Python: small fixes (#1682) * initial python fixes * commented pyhton again * format * fmt on rust * removed again * removed import --------- Co-authored-by: Thibault Martinez --- bindings/python/iota_sdk/types/node_info.py | 15 ++++++++++----- .../api/block_builder/input_selection/mod.rs | 4 +++- sdk/src/types/block/output/account.rs | 6 +----- sdk/src/types/block/protocol.rs | 2 +- 4 files changed, 15 insertions(+), 12 deletions(-) diff --git a/bindings/python/iota_sdk/types/node_info.py b/bindings/python/iota_sdk/types/node_info.py index 4f27e2488c..9cc94c10fa 100644 --- a/bindings/python/iota_sdk/types/node_info.py +++ b/bindings/python/iota_sdk/types/node_info.py @@ -76,7 +76,7 @@ class StorageScoreParameters: factor_data: Defines the factor to be used for data only fields. offset_output_overhead: Defines the offset to be applied to all outputs for the overhead of handling them in storage. offset_ed25519_block_issuer_key: Defines the offset to be used for block issuer feature public keys. - offset_staking_feature: Defines the offset to be used for staking feature. + offset_staking_feature: Defines the offset to be used for staking feature. offset_delegation: Defines the offset to be used for delegation output. """ storage_cost: int @@ -225,6 +225,7 @@ class ProtocolParameters: storage_score_parameters: The storage score parameters used by given node/network. work_score_parameters: Work Score Parameters lists the work score of each type, it is used to denote the computation costs of processing an object. token_supply: Current supply of the base token. Plain string encoded number. + genesis_slot: Defines the slot of the genesis. genesis_unix_timestamp: The genesis timestamp at which the slots start to count. slot_duration_in_seconds: The duration of a slot, in seconds. slots_per_epoch_exponent: The number of slots in an epoch expressed as an exponent of 2. @@ -232,13 +233,15 @@ class ProtocolParameters: staking_unbonding_period: The unbonding period in epochs before an account can stop staking. validation_blocks_per_slot: Validation Blocks Per Slot is the number of validation blocks that each validator should issue each slot. punishment_epochs: The number of epochs worth of Mana that a node is punished with for each additional validation block it issues. - liveness_threshold: Determine if a block is eligible by evaluating issuing_time and commitments in its past cone to ATT and last_committed_slot respectively. + liveness_threshold_lower_bound: Used by tip-selection to determine if a block is eligible by evaluating issuing times. + liveness_threshold_upper_bound: Used by tip-selection to determine if a block is eligible by evaluating issuing times. min_committable_age: Min_committable_age is the minimum age relative to the accepted tangle time slot index that a slot can be committed. max_committable_age: Max_committable_age is the maximum age for a slot commitment to be included in a block relative to the slot index of the block issuing time. epoch_nearing_threshold: Determine the slot that should trigger a new committee selection for the next and upcoming epoch. congestion_control_parameters: Congestion Control Parameters defines the parameters used to calculate the Reference Mana Cost (RMC). version_signaling_parameters: The version signaling parameters. rewards_parameters: Rewards Parameters defines the parameters that are used to calculate Mana rewards. + target_committee_size: Defines the target size of the committee. If there's fewer candidates the actual committee size could be smaller in a given epoch. """ type: int version: int @@ -249,6 +252,7 @@ class ProtocolParameters: token_supply: int = field(metadata=config( encoder=str )) + genesis_slot: int genesis_unix_timestamp: int = field(metadata=config( encoder=str )) @@ -260,7 +264,8 @@ class ProtocolParameters: )) validation_blocks_per_slot: int punishment_epochs: int - liveness_threshold: int + liveness_threshold_lower_bound: int + liveness_threshold_upper_bound: int min_committable_age: int = field(metadata=config( encoder=str )) @@ -273,6 +278,7 @@ class ProtocolParameters: congestion_control_parameters: CongestionControlParameters version_signaling_parameters: VersionSignalingParameters rewards_parameters: RewardsParameters + target_committee_size: int @json @@ -288,6 +294,7 @@ class ProtocolParametersResponse: parameters: ProtocolParameters +@json @dataclass class NodeInfoBaseToken: """The base coin info. @@ -298,13 +305,11 @@ class NodeInfoBaseToken: unit: The primary unit of the token. subunit: The name of the smallest possible denomination of the primary unit. subunit * 10^decimals = unit. decimals: Number of decimals the primary unit is divisible up to. - use_metric_prefix: Whether to use metric prefixes for displaying unit. """ name: str ticker_symbol: str unit: str decimals: int - use_metric_prefix: bool subunit: Optional[str] = None diff --git a/sdk/src/client/api/block_builder/input_selection/mod.rs b/sdk/src/client/api/block_builder/input_selection/mod.rs index da4a4014f3..ba4ed047ab 100644 --- a/sdk/src/client/api/block_builder/input_selection/mod.rs +++ b/sdk/src/client/api/block_builder/input_selection/mod.rs @@ -461,7 +461,9 @@ impl InputSelection { Output::Basic(_) => { // TODO https://github.com/iotaledger/iota-sdk/issues/1664 } - _ => panic!("unreachable: \"input_accounts\" only contains account outputs and implicit account (basic) outputs") + _ => panic!( + "unreachable: \"input_accounts\" only contains account outputs and implicit account (basic) outputs" + ), } } Output::Foundry(foundry_output) => { diff --git a/sdk/src/types/block/output/account.rs b/sdk/src/types/block/output/account.rs index b9b1555725..28bb146368 100644 --- a/sdk/src/types/block/output/account.rs +++ b/sdk/src/types/block/output/account.rs @@ -42,11 +42,7 @@ impl From<&OutputId> for AccountId { impl AccountId { /// pub fn or_from_output_id(self, output_id: &OutputId) -> Self { - if self.is_null() { - Self::from(output_id) - } else { - self - } + if self.is_null() { Self::from(output_id) } else { self } } } diff --git a/sdk/src/types/block/protocol.rs b/sdk/src/types/block/protocol.rs index 0c3b216e2a..b07263d24d 100644 --- a/sdk/src/types/block/protocol.rs +++ b/sdk/src/types/block/protocol.rs @@ -69,7 +69,7 @@ pub struct ProtocolParameters { pub(crate) punishment_epochs: u32, /// Used by tip-selection to determine if a block is eligible by evaluating issuing times. pub(crate) liveness_threshold_lower_bound: u16, - /// Used by tip-selection to determine if a block is eligible by evaluating issuing times + /// Used by tip-selection to determine if a block is eligible by evaluating issuing times. pub(crate) liveness_threshold_upper_bound: u16, /// Minimum age relative to the accepted tangle time slot index that a slot can be committed. pub(crate) min_committable_age: u32, From 13cf4607f3db16a522bf793c009683aa4177e6cc Mon Sep 17 00:00:00 2001 From: /alex/ Date: Mon, 27 Nov 2023 11:31:15 +0100 Subject: [PATCH 80/91] Add work score trait and impls (#1235) * add workscore calc * fix merge * finish calculations * nits * merge import * nits * rename trait fn * update work score computations * nit * move work score types into own module * add and impl mana cost fn * PR suggestions 1 Co-authored-by: DaughterOfMars * is_signature * remove todo * review 1 * review 2 * review 3 * fix copyright year Co-authored-by: Thibault Martinez * StorageScore :heart: WorkScore * Fix def_is_as_opt panic message (#1659) * Remove native tokens from AnchorOutput (#1660) * Python: add multi address (#1658) * add weighted address and multi address * fmt * fmt * align + more impls * nit * default impl for all features * default impl for all unlocks * self * rm WorkScore impl for NativeTokens type * review suggestions * align and improve * cleanup * cleanup 2 * forward work score in NativeTokenFeature * cleanup 3 * forward 2 * let's see if we're faster than thibault * unnecessary import * underscore Co-authored-by: Thibault Martinez * final touches * remove todo * rm mana_cost fn from work score trait --------- Co-authored-by: DaughterOfMars Co-authored-by: Thibault Martinez Co-authored-by: Thibault Martinez --- sdk/src/client/stronghold/secret.rs | 2 +- .../context_input/block_issuance_credit.rs | 11 ++- .../types/block/context_input/commitment.rs | 11 ++- sdk/src/types/block/context_input/mod.rs | 35 ++++++--- sdk/src/types/block/context_input/reward.rs | 11 ++- sdk/src/types/block/core/basic.rs | 13 +++- sdk/src/types/block/core/block.rs | 10 ++- sdk/src/types/block/core/mod.rs | 11 ++- sdk/src/types/block/core/validation.rs | 4 +- sdk/src/types/block/error.rs | 5 +- sdk/src/types/block/input/mod.rs | 13 +++- sdk/src/types/block/input/utxo.rs | 13 +++- sdk/src/types/block/mana/allotment.rs | 36 +++++---- sdk/src/types/block/output/account.rs | 11 ++- sdk/src/types/block/output/anchor.rs | 11 ++- sdk/src/types/block/output/basic.rs | 8 +- sdk/src/types/block/output/delegation.rs | 8 +- .../block/output/feature/block_issuer.rs | 7 ++ sdk/src/types/block/output/feature/issuer.rs | 3 + .../types/block/output/feature/metadata.rs | 42 ++++++----- sdk/src/types/block/output/feature/mod.rs | 29 ++++++-- .../block/output/feature/native_token.rs | 11 ++- sdk/src/types/block/output/feature/sender.rs | 3 + sdk/src/types/block/output/feature/staking.rs | 7 ++ sdk/src/types/block/output/feature/tag.rs | 40 +++++----- sdk/src/types/block/output/foundry.rs | 12 ++- sdk/src/types/block/output/mod.rs | 34 +++++++-- sdk/src/types/block/output/native_token.rs | 12 ++- sdk/src/types/block/output/nft.rs | 11 ++- .../types/block/output/token_scheme/mod.rs | 13 +++- .../types/block/output/token_scheme/simple.rs | 11 ++- .../block/output/unlock_condition/mod.rs | 21 +++--- .../block/payload/candidacy_announcement.rs | 12 ++- sdk/src/types/block/payload/mod.rs | 20 +++-- .../block/payload/signed_transaction/mod.rs | 17 ++++- .../payload/signed_transaction/transaction.rs | 15 +++- sdk/src/types/block/payload/tagged_data.rs | 14 +++- .../block/{protocol.rs => protocol/mod.rs} | 51 +------------ sdk/src/types/block/protocol/work_score.rs | 74 +++++++++++++++++++ sdk/src/types/block/signature/ed25519.rs | 12 ++- sdk/src/types/block/signature/mod.rs | 13 +++- sdk/src/types/block/unlock/account.rs | 20 ++--- sdk/src/types/block/unlock/anchor.rs | 20 ++--- sdk/src/types/block/unlock/empty.rs | 4 + sdk/src/types/block/unlock/mod.rs | 49 +++++++----- sdk/src/types/block/unlock/multi.rs | 13 +++- sdk/src/types/block/unlock/nft.rs | 20 ++--- sdk/src/types/block/unlock/reference.rs | 4 +- sdk/src/types/block/unlock/signature.rs | 11 ++- 49 files changed, 620 insertions(+), 218 deletions(-) rename sdk/src/types/block/{protocol.rs => protocol/mod.rs} (88%) create mode 100644 sdk/src/types/block/protocol/work_score.rs diff --git a/sdk/src/client/stronghold/secret.rs b/sdk/src/client/stronghold/secret.rs index 813fcf07d1..7568cc176d 100644 --- a/sdk/src/client/stronghold/secret.rs +++ b/sdk/src/client/stronghold/secret.rs @@ -583,7 +583,7 @@ mod tests { // Address generation returns an error when the key is cleared. assert!( stronghold_adapter - .generate_ed25519_addresses(IOTA_COIN_TYPE, 0, 0..1, None,) + .generate_ed25519_addresses(IOTA_COIN_TYPE, 0, 0..1, None) .await .is_err() ); diff --git a/sdk/src/types/block/context_input/block_issuance_credit.rs b/sdk/src/types/block/context_input/block_issuance_credit.rs index eedde882b9..fececf43f9 100644 --- a/sdk/src/types/block/context_input/block_issuance_credit.rs +++ b/sdk/src/types/block/context_input/block_issuance_credit.rs @@ -3,7 +3,10 @@ use derive_more::{Display, From}; -use crate::types::block::output::AccountId; +use crate::types::block::{ + output::AccountId, + protocol::{WorkScore, WorkScoreParameters}, +}; /// A Block Issuance Credit (BIC) Context Input provides the VM with context for the value of /// the BIC vector of a specific slot. @@ -25,6 +28,12 @@ impl BlockIssuanceCreditContextInput { } } +impl WorkScore for BlockIssuanceCreditContextInput { + fn work_score(&self, params: WorkScoreParameters) -> u32 { + params.context_input() + } +} + #[cfg(feature = "serde")] mod dto { use serde::{Deserialize, Serialize}; diff --git a/sdk/src/types/block/context_input/commitment.rs b/sdk/src/types/block/context_input/commitment.rs index 23b9bcffe2..c799e7dc3b 100644 --- a/sdk/src/types/block/context_input/commitment.rs +++ b/sdk/src/types/block/context_input/commitment.rs @@ -3,7 +3,10 @@ use derive_more::{Display, From}; -use crate::types::block::slot::SlotCommitmentId; +use crate::types::block::{ + protocol::{WorkScore, WorkScoreParameters}, + slot::SlotCommitmentId, +}; /// A Commitment Context Input references a commitment to a certain slot. #[derive(Clone, Copy, Display, Debug, Eq, PartialEq, Hash, Ord, PartialOrd, From, packable::Packable)] @@ -24,6 +27,12 @@ impl CommitmentContextInput { } } +impl WorkScore for CommitmentContextInput { + fn work_score(&self, params: WorkScoreParameters) -> u32 { + params.context_input() + } +} + #[cfg(feature = "serde")] mod dto { use serde::{Deserialize, Serialize}; diff --git a/sdk/src/types/block/context_input/mod.rs b/sdk/src/types/block/context_input/mod.rs index 016931f09d..c7972d6bea 100644 --- a/sdk/src/types/block/context_input/mod.rs +++ b/sdk/src/types/block/context_input/mod.rs @@ -14,7 +14,10 @@ pub use self::{ block_issuance_credit::BlockIssuanceCreditContextInput, commitment::CommitmentContextInput, reward::RewardContextInput, }; -use crate::types::block::Error; +use crate::types::block::{ + protocol::{WorkScore, WorkScoreParameters}, + Error, +}; /// The maximum number of context inputs of a transaction. pub const CONTEXT_INPUT_COUNT_MAX: u16 = 128; @@ -39,16 +42,6 @@ pub enum ContextInput { Reward(RewardContextInput), } -impl core::fmt::Debug for ContextInput { - fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result { - match self { - Self::Commitment(input) => input.fmt(f), - Self::BlockIssuanceCredit(input) => input.fmt(f), - Self::Reward(input) => input.fmt(f), - } - } -} - impl ContextInput { /// Returns the context input kind of a `ContextInput`. pub fn kind(&self) -> u8 { @@ -62,6 +55,26 @@ impl ContextInput { crate::def_is_as_opt!(ContextInput: Commitment, BlockIssuanceCredit, Reward); } +impl WorkScore for ContextInput { + fn work_score(&self, params: WorkScoreParameters) -> u32 { + match self { + Self::Commitment(commitment) => commitment.work_score(params), + Self::BlockIssuanceCredit(bic) => bic.work_score(params), + Self::Reward(reward) => reward.work_score(params), + } + } +} + +impl core::fmt::Debug for ContextInput { + fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result { + match self { + Self::Commitment(input) => input.fmt(f), + Self::BlockIssuanceCredit(input) => input.fmt(f), + Self::Reward(input) => input.fmt(f), + } + } +} + #[cfg(test)] mod tests { use pretty_assertions::assert_eq; diff --git a/sdk/src/types/block/context_input/reward.rs b/sdk/src/types/block/context_input/reward.rs index 12fdb58f5c..347cdaa350 100644 --- a/sdk/src/types/block/context_input/reward.rs +++ b/sdk/src/types/block/context_input/reward.rs @@ -4,7 +4,10 @@ use packable::bounded::BoundedU16; use super::CONTEXT_INPUT_COUNT_RANGE; -use crate::types::block::Error; +use crate::types::block::{ + protocol::{WorkScore, WorkScoreParameters}, + Error, +}; pub(crate) type RewardContextInputIndex = BoundedU16<{ *CONTEXT_INPUT_COUNT_RANGE.start() }, { *CONTEXT_INPUT_COUNT_RANGE.end() }>; @@ -29,6 +32,12 @@ impl RewardContextInput { } } +impl WorkScore for RewardContextInput { + fn work_score(&self, params: WorkScoreParameters) -> u32 { + params.context_input() + } +} + impl core::fmt::Display for RewardContextInput { fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result { write!(f, "RewardContextInput({})", self.index()) diff --git a/sdk/src/types/block/core/basic.rs b/sdk/src/types/block/core/basic.rs index f31aeefb6f..8a7d63f66d 100644 --- a/sdk/src/types/block/core/basic.rs +++ b/sdk/src/types/block/core/basic.rs @@ -6,7 +6,7 @@ use packable::Packable; use crate::types::block::{ core::{parent::verify_parents_sets, BlockBody, Parents}, payload::{OptionalPayload, Payload}, - protocol::ProtocolParameters, + protocol::{ProtocolParameters, WorkScore, WorkScoreParameters}, Error, }; @@ -154,6 +154,17 @@ impl BasicBlockBody { } } +impl WorkScore for BasicBlockBody { + fn work_score(&self, params: WorkScoreParameters) -> u32 { + params.block() + + self + .payload + .as_ref() + .map(|payload| payload.work_score(params)) + .unwrap_or(0) + } +} + fn verify_basic_block_body( basic_block_body: &BasicBlockBody, _: &ProtocolParameters, diff --git a/sdk/src/types/block/core/block.rs b/sdk/src/types/block/core/block.rs index b948107147..146ad4dadc 100644 --- a/sdk/src/types/block/core/block.rs +++ b/sdk/src/types/block/core/block.rs @@ -17,7 +17,7 @@ use crate::types::block::{ block_id::{BlockHash, BlockId}, core::{BasicBlockBody, ValidationBlockBody}, output::AccountId, - protocol::ProtocolParameters, + protocol::{ProtocolParameters, WorkScore, WorkScoreParameters}, signature::Signature, slot::{SlotCommitmentId, SlotIndex}, BlockBody, Error, @@ -110,6 +110,8 @@ impl BlockHeader { } } +impl WorkScore for BlockHeader {} + impl Packable for BlockHeader { type UnpackError = Error; type UnpackVisitor = ProtocolParameters; @@ -291,6 +293,12 @@ impl Block { } } +impl WorkScore for Block { + fn work_score(&self, params: WorkScoreParameters) -> u32 { + self.header.work_score(params) + self.body.work_score(params) + self.signature.work_score(params) + } +} + impl Packable for Block { type UnpackError = Error; type UnpackVisitor = ProtocolParameters; diff --git a/sdk/src/types/block/core/mod.rs b/sdk/src/types/block/core/mod.rs index 316b75d75f..5b16fb9b0a 100644 --- a/sdk/src/types/block/core/mod.rs +++ b/sdk/src/types/block/core/mod.rs @@ -19,7 +19,7 @@ pub use self::{ validation::{ValidationBlockBody, ValidationBlockBodyBuilder}, }; use crate::types::block::{ - protocol::{ProtocolParameters, ProtocolParametersHash}, + protocol::{ProtocolParameters, ProtocolParametersHash, WorkScore, WorkScoreParameters}, Error, }; @@ -102,6 +102,15 @@ impl BlockBody { } } +impl WorkScore for BlockBody { + fn work_score(&self, params: WorkScoreParameters) -> u32 { + match self { + Self::Basic(basic) => basic.work_score(params), + Self::Validation(validation) => validation.work_score(params), + } + } +} + #[cfg(feature = "serde")] pub(crate) mod dto { use alloc::format; diff --git a/sdk/src/types/block/core/validation.rs b/sdk/src/types/block/core/validation.rs index 43a9a5700a..d96d4c9af1 100644 --- a/sdk/src/types/block/core/validation.rs +++ b/sdk/src/types/block/core/validation.rs @@ -5,7 +5,7 @@ use packable::Packable; use crate::types::block::{ core::{parent::verify_parents_sets, BlockBody, Parents}, - protocol::{ProtocolParameters, ProtocolParametersHash}, + protocol::{ProtocolParameters, ProtocolParametersHash, WorkScore}, Error, }; @@ -160,6 +160,8 @@ impl ValidationBlockBody { } } +impl WorkScore for ValidationBlockBody {} + fn verify_protocol_parameters_hash( hash: &ProtocolParametersHash, params: &ProtocolParameters, diff --git a/sdk/src/types/block/error.rs b/sdk/src/types/block/error.rs index a2782f12b9..76698b2943 100644 --- a/sdk/src/types/block/error.rs +++ b/sdk/src/types/block/error.rs @@ -20,7 +20,10 @@ use crate::types::block::{ unlock_condition::UnlockConditionCount, AccountId, AnchorId, ChainId, MetadataFeatureLength, NativeTokenCount, NftId, OutputIndex, TagFeatureLength, }, - payload::{ContextInputCount, InputCount, OutputCount, TagLength, TaggedDataLength}, + payload::{ + tagged_data::{TagLength, TaggedDataLength}, + ContextInputCount, InputCount, OutputCount, + }, protocol::ProtocolParametersHash, unlock::{UnlockCount, UnlockIndex, UnlocksCount}, }; diff --git a/sdk/src/types/block/input/mod.rs b/sdk/src/types/block/input/mod.rs index cf65e8b967..0c586bee7b 100644 --- a/sdk/src/types/block/input/mod.rs +++ b/sdk/src/types/block/input/mod.rs @@ -8,7 +8,10 @@ use core::ops::RangeInclusive; use derive_more::From; pub use self::utxo::UtxoInput; -use crate::types::block::Error; +use crate::types::block::{ + protocol::{WorkScore, WorkScoreParameters}, + Error, +}; /// The maximum number of inputs of a transaction. pub const INPUT_COUNT_MAX: u16 = 128; @@ -30,6 +33,14 @@ pub enum Input { Utxo(UtxoInput), } +impl WorkScore for Input { + fn work_score(&self, params: WorkScoreParameters) -> u32 { + match self { + Self::Utxo(utxo) => utxo.work_score(params), + } + } +} + impl core::fmt::Debug for Input { fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result { match self { diff --git a/sdk/src/types/block/input/utxo.rs b/sdk/src/types/block/input/utxo.rs index 613effb9bc..24f4bcb8ee 100644 --- a/sdk/src/types/block/input/utxo.rs +++ b/sdk/src/types/block/input/utxo.rs @@ -5,7 +5,12 @@ use core::str::FromStr; use derive_more::From; -use crate::types::block::{output::OutputId, payload::signed_transaction::TransactionId, Error}; +use crate::types::block::{ + output::OutputId, + payload::signed_transaction::TransactionId, + protocol::{WorkScore, WorkScoreParameters}, + Error, +}; /// Represents an input referencing an output. #[derive(Clone, Copy, Eq, PartialEq, Hash, Ord, PartialOrd, From, packable::Packable)] @@ -26,6 +31,12 @@ impl UtxoInput { } } +impl WorkScore for UtxoInput { + fn work_score(&self, params: WorkScoreParameters) -> u32 { + params.input() + } +} + impl FromStr for UtxoInput { type Err = Error; diff --git a/sdk/src/types/block/mana/allotment.rs b/sdk/src/types/block/mana/allotment.rs index 1069f9aace..dc9295c11d 100644 --- a/sdk/src/types/block/mana/allotment.rs +++ b/sdk/src/types/block/mana/allotment.rs @@ -3,7 +3,11 @@ use packable::Packable; -use crate::types::block::{output::AccountId, protocol::ProtocolParameters, Error}; +use crate::types::block::{ + output::AccountId, + protocol::{ProtocolParameters, WorkScore, WorkScoreParameters}, + Error, +}; /// An allotment of Mana which will be added upon commitment of the slot in which the containing transaction was issued, /// in the form of Block Issuance Credits to the account. @@ -16,18 +20,6 @@ pub struct ManaAllotment { pub(crate) mana: u64, } -impl PartialOrd for ManaAllotment { - fn partial_cmp(&self, other: &Self) -> Option { - Some(self.cmp(other)) - } -} - -impl Ord for ManaAllotment { - fn cmp(&self, other: &Self) -> core::cmp::Ordering { - self.account_id.cmp(&other.account_id) - } -} - impl ManaAllotment { pub fn new(account_id: AccountId, mana: u64, protocol_params: &ProtocolParameters) -> Result { verify_mana::(&mana, protocol_params)?; @@ -44,6 +36,24 @@ impl ManaAllotment { } } +impl PartialOrd for ManaAllotment { + fn partial_cmp(&self, other: &Self) -> Option { + Some(self.cmp(other)) + } +} + +impl Ord for ManaAllotment { + fn cmp(&self, other: &Self) -> core::cmp::Ordering { + self.account_id.cmp(&other.account_id) + } +} + +impl WorkScore for ManaAllotment { + fn work_score(&self, params: WorkScoreParameters) -> u32 { + params.allotment() + } +} + fn verify_mana(mana: &u64, params: &ProtocolParameters) -> Result<(), Error> { if VERIFY && *mana > params.mana_parameters().max_mana() { return Err(Error::InvalidManaValue(*mana)); diff --git a/sdk/src/types/block/output/account.rs b/sdk/src/types/block/output/account.rs index 28bb146368..7ed6167793 100644 --- a/sdk/src/types/block/output/account.rs +++ b/sdk/src/types/block/output/account.rs @@ -20,7 +20,7 @@ use crate::types::block::{ StateTransitionVerifier, StorageScore, StorageScoreParameters, }, payload::signed_transaction::TransactionCapabilityFlag, - protocol::ProtocolParameters, + protocol::{ProtocolParameters, WorkScore, WorkScoreParameters}, semantic::{SemanticValidationContext, TransactionFailureReason}, unlock::Unlock, Error, @@ -505,6 +505,15 @@ impl StorageScore for AccountOutput { } } +impl WorkScore for AccountOutput { + fn work_score(&self, params: WorkScoreParameters) -> u32 { + params.output() + + self.unlock_conditions.work_score(params) + + self.features.work_score(params) + + self.immutable_features.work_score(params) + } +} + impl MinimumOutputAmount for AccountOutput {} impl Packable for AccountOutput { diff --git a/sdk/src/types/block/output/anchor.rs b/sdk/src/types/block/output/anchor.rs index e71aa220cf..ddf81a8a36 100644 --- a/sdk/src/types/block/output/anchor.rs +++ b/sdk/src/types/block/output/anchor.rs @@ -20,7 +20,7 @@ use crate::types::block::{ StateTransitionVerifier, StorageScore, StorageScoreParameters, }, payload::signed_transaction::TransactionCapabilityFlag, - protocol::ProtocolParameters, + protocol::{ProtocolParameters, WorkScore, WorkScoreParameters}, semantic::{SemanticValidationContext, TransactionFailureReason}, unlock::Unlock, Error, @@ -505,6 +505,15 @@ impl StorageScore for AnchorOutput { } } +impl WorkScore for AnchorOutput { + fn work_score(&self, params: WorkScoreParameters) -> u32 { + params.output() + + self.unlock_conditions.work_score(params) + + self.features.work_score(params) + + self.immutable_features.work_score(params) + } +} + impl MinimumOutputAmount for AnchorOutput {} impl StateTransitionVerifier for AnchorOutput { diff --git a/sdk/src/types/block/output/basic.rs b/sdk/src/types/block/output/basic.rs index 0f310d76f4..05fd6ee74b 100644 --- a/sdk/src/types/block/output/basic.rs +++ b/sdk/src/types/block/output/basic.rs @@ -15,7 +15,7 @@ use crate::types::block::{ }, MinimumOutputAmount, NativeToken, Output, OutputBuilderAmount, OutputId, StorageScore, StorageScoreParameters, }, - protocol::ProtocolParameters, + protocol::{ProtocolParameters, WorkScore, WorkScoreParameters}, semantic::{SemanticValidationContext, TransactionFailureReason}, unlock::Unlock, Error, @@ -368,6 +368,12 @@ impl StorageScore for BasicOutput { } } +impl WorkScore for BasicOutput { + fn work_score(&self, params: WorkScoreParameters) -> u32 { + params.output() + self.unlock_conditions.work_score(params) + self.features.work_score(params) + } +} + impl MinimumOutputAmount for BasicOutput {} fn verify_unlock_conditions(unlock_conditions: &UnlockConditions) -> Result<(), Error> { diff --git a/sdk/src/types/block/output/delegation.rs b/sdk/src/types/block/output/delegation.rs index ed5974df31..61bdb1464a 100644 --- a/sdk/src/types/block/output/delegation.rs +++ b/sdk/src/types/block/output/delegation.rs @@ -13,7 +13,7 @@ use crate::types::block::{ MinimumOutputAmount, Output, OutputBuilderAmount, OutputId, StateTransitionError, StateTransitionVerifier, StorageScore, StorageScoreParameters, }, - protocol::ProtocolParameters, + protocol::{ProtocolParameters, WorkScore, WorkScoreParameters}, semantic::{SemanticValidationContext, TransactionFailureReason}, slot::EpochIndex, unlock::Unlock, @@ -390,6 +390,12 @@ impl StorageScore for DelegationOutput { } } +impl WorkScore for DelegationOutput { + fn work_score(&self, params: WorkScoreParameters) -> u32 { + params.output() + self.unlock_conditions.work_score(params) + } +} + impl MinimumOutputAmount for DelegationOutput {} fn verify_validator_address(validator_address: &AccountAddress) -> Result<(), Error> { diff --git a/sdk/src/types/block/output/feature/block_issuer.rs b/sdk/src/types/block/output/feature/block_issuer.rs index 545d1b4f13..114226b14c 100644 --- a/sdk/src/types/block/output/feature/block_issuer.rs +++ b/sdk/src/types/block/output/feature/block_issuer.rs @@ -18,6 +18,7 @@ use packable::{ use crate::types::block::{ output::{StorageScore, StorageScoreParameters}, + protocol::{WorkScore, WorkScoreParameters}, slot::SlotIndex, Error, }; @@ -244,6 +245,12 @@ impl StorageScore for BlockIssuerFeature { } } +impl WorkScore for BlockIssuerFeature { + fn work_score(&self, params: WorkScoreParameters) -> u32 { + params.block_issuer() + } +} + #[cfg(feature = "serde")] mod dto { use alloc::{string::String, vec::Vec}; diff --git a/sdk/src/types/block/output/feature/issuer.rs b/sdk/src/types/block/output/feature/issuer.rs index fe96f195f0..fe929e0006 100644 --- a/sdk/src/types/block/output/feature/issuer.rs +++ b/sdk/src/types/block/output/feature/issuer.rs @@ -6,6 +6,7 @@ use derive_more::From; use crate::types::block::{ address::Address, output::{StorageScore, StorageScoreParameters}, + protocol::WorkScore, }; /// Identifies the validated issuer of the UTXO state machine. @@ -35,6 +36,8 @@ impl StorageScore for IssuerFeature { } } +impl WorkScore for IssuerFeature {} + #[cfg(feature = "serde")] mod dto { use serde::{Deserialize, Serialize}; diff --git a/sdk/src/types/block/output/feature/metadata.rs b/sdk/src/types/block/output/feature/metadata.rs index b198e8c9f2..434235ff5b 100644 --- a/sdk/src/types/block/output/feature/metadata.rs +++ b/sdk/src/types/block/output/feature/metadata.rs @@ -6,7 +6,7 @@ use core::{ops::RangeInclusive, str::FromStr}; use packable::{bounded::BoundedU16, prefix::BoxedSlicePrefix}; -use crate::types::block::{output::StorageScore, Error}; +use crate::types::block::{output::StorageScore, protocol::WorkScore, Error}; pub(crate) type MetadataFeatureLength = BoundedU16<{ *MetadataFeature::LENGTH_RANGE.start() }, { *MetadataFeature::LENGTH_RANGE.end() }>; @@ -19,8 +19,29 @@ pub struct MetadataFeature( pub(crate) BoxedSlicePrefix, ); +impl MetadataFeature { + /// The [`Feature`](crate::types::block::output::Feature) kind of [`MetadataFeature`]. + pub const KIND: u8 = 2; + /// Valid lengths for a [`MetadataFeature`]. + pub const LENGTH_RANGE: RangeInclusive = 1..=8192; + + /// Creates a new [`MetadataFeature`]. + #[inline(always)] + pub fn new(data: impl Into>) -> Result { + Self::try_from(data.into()) + } + + /// Returns the data. + #[inline(always)] + pub fn data(&self) -> &[u8] { + &self.0 + } +} + impl StorageScore for MetadataFeature {} +impl WorkScore for MetadataFeature {} + macro_rules! impl_from_vec { ($type:ty) => { impl TryFrom<$type> for MetadataFeature { @@ -68,25 +89,6 @@ impl FromStr for MetadataFeature { } } -impl MetadataFeature { - /// The [`Feature`](crate::types::block::output::Feature) kind of [`MetadataFeature`]. - pub const KIND: u8 = 2; - /// Valid lengths for a [`MetadataFeature`]. - pub const LENGTH_RANGE: RangeInclusive = 1..=8192; - - /// Creates a new [`MetadataFeature`]. - #[inline(always)] - pub fn new(data: impl Into>) -> Result { - Self::try_from(data.into()) - } - - /// Returns the data. - #[inline(always)] - pub fn data(&self) -> &[u8] { - &self.0 - } -} - impl core::fmt::Display for MetadataFeature { fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result { write!(f, "{}", prefix_hex::encode(self.data())) diff --git a/sdk/src/types/block/output/feature/mod.rs b/sdk/src/types/block/output/feature/mod.rs index 8f3067fcf7..bcff97711b 100644 --- a/sdk/src/types/block/output/feature/mod.rs +++ b/sdk/src/types/block/output/feature/mod.rs @@ -32,6 +32,7 @@ pub use self::{ }; use crate::types::block::{ output::{StorageScore, StorageScoreParameters}, + protocol::{WorkScore, WorkScoreParameters}, Error, }; @@ -79,13 +80,27 @@ impl Ord for Feature { impl StorageScore for Feature { fn storage_score(&self, params: StorageScoreParameters) -> u64 { match self { - Self::Sender(feature) => feature.storage_score(params), - Self::Issuer(feature) => feature.storage_score(params), - Self::Metadata(feature) => feature.storage_score(params), - Self::Tag(feature) => feature.storage_score(params), - Self::NativeToken(feature) => feature.storage_score(params), - Self::BlockIssuer(feature) => feature.storage_score(params), - Self::Staking(feature) => feature.storage_score(params), + Self::Sender(sender) => sender.storage_score(params), + Self::Issuer(issuer) => issuer.storage_score(params), + Self::Metadata(metadata) => metadata.storage_score(params), + Self::Tag(tag) => tag.storage_score(params), + Self::NativeToken(native_token) => native_token.storage_score(params), + Self::BlockIssuer(block_issuer) => block_issuer.storage_score(params), + Self::Staking(staking) => staking.storage_score(params), + } + } +} + +impl WorkScore for Feature { + fn work_score(&self, params: WorkScoreParameters) -> u32 { + match self { + Self::Sender(sender) => sender.work_score(params), + Self::Issuer(issuer) => issuer.work_score(params), + Self::Metadata(metadata) => metadata.work_score(params), + Self::Tag(tag) => tag.work_score(params), + Self::NativeToken(native_token) => native_token.work_score(params), + Self::BlockIssuer(block_issuer) => block_issuer.work_score(params), + Self::Staking(staking) => staking.work_score(params), } } } diff --git a/sdk/src/types/block/output/feature/native_token.rs b/sdk/src/types/block/output/feature/native_token.rs index 191fec2070..932f536e01 100644 --- a/sdk/src/types/block/output/feature/native_token.rs +++ b/sdk/src/types/block/output/feature/native_token.rs @@ -3,7 +3,10 @@ use derive_more::{Deref, From}; -use crate::types::block::output::{NativeToken, StorageScore}; +use crate::types::block::{ + output::{NativeToken, StorageScore}, + protocol::{WorkScore, WorkScoreParameters}, +}; #[derive(Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Deref, From, packable::Packable)] pub struct NativeTokenFeature(NativeToken); @@ -25,6 +28,12 @@ impl NativeTokenFeature { impl StorageScore for NativeTokenFeature {} +impl WorkScore for NativeTokenFeature { + fn work_score(&self, params: WorkScoreParameters) -> u32 { + self.0.work_score(params) + } +} + #[cfg(feature = "serde")] mod dto { use primitive_types::U256; diff --git a/sdk/src/types/block/output/feature/sender.rs b/sdk/src/types/block/output/feature/sender.rs index f25ab1d97c..c53e70b7d7 100644 --- a/sdk/src/types/block/output/feature/sender.rs +++ b/sdk/src/types/block/output/feature/sender.rs @@ -6,6 +6,7 @@ use derive_more::From; use crate::types::block::{ address::Address, output::{storage_score::StorageScoreParameters, StorageScore}, + protocol::WorkScore, }; /// Identifies the validated sender of an output. @@ -35,6 +36,8 @@ impl StorageScore for SenderFeature { } } +impl WorkScore for SenderFeature {} + #[cfg(feature = "serde")] mod dto { use serde::{Deserialize, Serialize}; diff --git a/sdk/src/types/block/output/feature/staking.rs b/sdk/src/types/block/output/feature/staking.rs index 34d8da0094..c56b71b838 100644 --- a/sdk/src/types/block/output/feature/staking.rs +++ b/sdk/src/types/block/output/feature/staking.rs @@ -3,6 +3,7 @@ use crate::types::block::{ output::{StorageScore, StorageScoreParameters}, + protocol::{WorkScore, WorkScoreParameters}, slot::EpochIndex, }; @@ -65,6 +66,12 @@ impl StorageScore for StakingFeature { } } +impl WorkScore for StakingFeature { + fn work_score(&self, params: WorkScoreParameters) -> u32 { + params.staking() + } +} + #[cfg(feature = "serde")] mod dto { use serde::{Deserialize, Serialize}; diff --git a/sdk/src/types/block/output/feature/tag.rs b/sdk/src/types/block/output/feature/tag.rs index 01c84d79cd..e150834d6f 100644 --- a/sdk/src/types/block/output/feature/tag.rs +++ b/sdk/src/types/block/output/feature/tag.rs @@ -6,7 +6,7 @@ use core::ops::RangeInclusive; use packable::{bounded::BoundedU8, prefix::BoxedSlicePrefix}; -use crate::types::block::{output::StorageScore, Error}; +use crate::types::block::{output::StorageScore, protocol::WorkScore, Error}; pub(crate) type TagFeatureLength = BoundedU8<{ *TagFeature::LENGTH_RANGE.start() }, { *TagFeature::LENGTH_RANGE.end() }>; @@ -19,24 +19,6 @@ pub struct TagFeature( pub(crate) BoxedSlicePrefix, ); -impl StorageScore for TagFeature {} - -impl TryFrom> for TagFeature { - type Error = Error; - - fn try_from(tag: Vec) -> Result { - tag.into_boxed_slice().try_into() - } -} - -impl TryFrom> for TagFeature { - type Error = Error; - - fn try_from(tag: Box<[u8]>) -> Result { - tag.try_into().map(Self).map_err(Error::InvalidTagFeatureLength) - } -} - impl TagFeature { /// The [`Feature`](crate::types::block::output::Feature) kind of an [`TagFeature`]. pub const KIND: u8 = 4; @@ -56,6 +38,26 @@ impl TagFeature { } } +impl StorageScore for TagFeature {} + +impl WorkScore for TagFeature {} + +impl TryFrom> for TagFeature { + type Error = Error; + + fn try_from(tag: Vec) -> Result { + tag.into_boxed_slice().try_into() + } +} + +impl TryFrom> for TagFeature { + type Error = Error; + + fn try_from(tag: Box<[u8]>) -> Result { + tag.try_into().map(Self).map_err(Error::InvalidTagFeatureLength) + } +} + impl core::fmt::Display for TagFeature { fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result { write!(f, "{}", prefix_hex::encode(self.tag())) diff --git a/sdk/src/types/block/output/foundry.rs b/sdk/src/types/block/output/foundry.rs index 0bec812f32..218c526979 100644 --- a/sdk/src/types/block/output/foundry.rs +++ b/sdk/src/types/block/output/foundry.rs @@ -22,7 +22,7 @@ use crate::types::block::{ StateTransitionVerifier, StorageScore, StorageScoreParameters, TokenId, TokenScheme, }, payload::signed_transaction::{TransactionCapabilities, TransactionCapabilityFlag}, - protocol::ProtocolParameters, + protocol::{ProtocolParameters, WorkScore, WorkScoreParameters}, semantic::{SemanticValidationContext, TransactionFailureReason}, unlock::Unlock, Error, @@ -510,6 +510,16 @@ impl StorageScore for FoundryOutput { } } +impl WorkScore for FoundryOutput { + fn work_score(&self, params: WorkScoreParameters) -> u32 { + params.output() + + self.token_scheme.work_score(params) + + self.unlock_conditions.work_score(params) + + self.features.work_score(params) + + self.immutable_features.work_score(params) + } +} + impl MinimumOutputAmount for FoundryOutput {} impl StateTransitionVerifier for FoundryOutput { diff --git a/sdk/src/types/block/output/mod.rs b/sdk/src/types/block/output/mod.rs index 1a43ccc664..ee4640877e 100644 --- a/sdk/src/types/block/output/mod.rs +++ b/sdk/src/types/block/output/mod.rs @@ -52,8 +52,13 @@ pub(crate) use self::{ output_id::OutputIndex, unlock_condition::AddressUnlockCondition, }; -use super::protocol::ProtocolParameters; -use crate::types::block::{address::Address, semantic::SemanticValidationContext, slot::SlotIndex, Error}; +use crate::types::block::{ + address::Address, + protocol::{ProtocolParameters, WorkScore, WorkScoreParameters}, + semantic::SemanticValidationContext, + slot::SlotIndex, + Error, +}; /// The maximum number of outputs of a transaction. pub const OUTPUT_COUNT_MAX: u16 = 128; @@ -396,12 +401,25 @@ impl Output { impl StorageScore for Output { fn storage_score(&self, params: StorageScoreParameters) -> u64 { match self { - Self::Basic(o) => o.storage_score(params), - Self::Account(o) => o.storage_score(params), - Self::Anchor(o) => o.storage_score(params), - Self::Foundry(o) => o.storage_score(params), - Self::Nft(o) => o.storage_score(params), - Self::Delegation(o) => o.storage_score(params), + Self::Basic(basic) => basic.storage_score(params), + Self::Account(account) => account.storage_score(params), + Self::Anchor(anchor) => anchor.storage_score(params), + Self::Foundry(foundry) => foundry.storage_score(params), + Self::Nft(nft) => nft.storage_score(params), + Self::Delegation(delegation) => delegation.storage_score(params), + } + } +} + +impl WorkScore for Output { + fn work_score(&self, params: WorkScoreParameters) -> u32 { + match self { + Self::Basic(basic) => basic.work_score(params), + Self::Account(account) => account.work_score(params), + Self::Anchor(anchor) => anchor.work_score(params), + Self::Foundry(foundry) => foundry.work_score(params), + Self::Nft(nft) => nft.work_score(params), + Self::Delegation(delegation) => delegation.work_score(params), } } } diff --git a/sdk/src/types/block/output/native_token.rs b/sdk/src/types/block/output/native_token.rs index 5aee716319..6e48df309b 100644 --- a/sdk/src/types/block/output/native_token.rs +++ b/sdk/src/types/block/output/native_token.rs @@ -12,7 +12,11 @@ use iterator_sorted::is_unique_sorted; use packable::{bounded::BoundedU8, prefix::BoxedSlicePrefix, Packable}; use primitive_types::U256; -use crate::types::block::{output::FoundryId, Error}; +use crate::types::block::{ + output::FoundryId, + protocol::{WorkScore, WorkScoreParameters}, + Error, +}; crate::impl_id!( /// Unique identifier of a [`NativeToken`](crate::types::block::output::NativeToken). @@ -66,6 +70,12 @@ impl NativeToken { } } +impl WorkScore for NativeToken { + fn work_score(&self, params: WorkScoreParameters) -> u32 { + params.native_token() + } +} + impl PartialOrd for NativeToken { fn partial_cmp(&self, other: &Self) -> Option { Some(self.cmp(other)) diff --git a/sdk/src/types/block/output/nft.rs b/sdk/src/types/block/output/nft.rs index 0a48fe21ba..f8462da2a9 100644 --- a/sdk/src/types/block/output/nft.rs +++ b/sdk/src/types/block/output/nft.rs @@ -22,7 +22,7 @@ use crate::types::block::{ StateTransitionVerifier, StorageScore, StorageScoreParameters, }, payload::signed_transaction::TransactionCapabilityFlag, - protocol::ProtocolParameters, + protocol::{ProtocolParameters, WorkScore, WorkScoreParameters}, semantic::{SemanticValidationContext, TransactionFailureReason}, unlock::Unlock, Error, @@ -451,6 +451,15 @@ impl StorageScore for NftOutput { } } +impl WorkScore for NftOutput { + fn work_score(&self, params: WorkScoreParameters) -> u32 { + params.output() + + self.unlock_conditions.work_score(params) + + self.features.work_score(params) + + self.immutable_features.work_score(params) + } +} + impl MinimumOutputAmount for NftOutput {} impl StateTransitionVerifier for NftOutput { diff --git a/sdk/src/types/block/output/token_scheme/mod.rs b/sdk/src/types/block/output/token_scheme/mod.rs index 25ff493749..91303f0ea1 100644 --- a/sdk/src/types/block/output/token_scheme/mod.rs +++ b/sdk/src/types/block/output/token_scheme/mod.rs @@ -4,7 +4,10 @@ mod simple; pub use self::simple::SimpleTokenScheme; -use crate::types::block::Error; +use crate::types::block::{ + protocol::{WorkScore, WorkScoreParameters}, + Error, +}; /// #[derive(Clone, Eq, PartialEq, Ord, PartialOrd, Hash, derive_more::From, packable::Packable)] @@ -35,3 +38,11 @@ impl TokenScheme { crate::def_is_as_opt!(TokenScheme: Simple); } + +impl WorkScore for TokenScheme { + fn work_score(&self, params: WorkScoreParameters) -> u32 { + match self { + Self::Simple(simple) => simple.work_score(params), + } + } +} diff --git a/sdk/src/types/block/output/token_scheme/simple.rs b/sdk/src/types/block/output/token_scheme/simple.rs index 1a971d91c6..328adf80c5 100644 --- a/sdk/src/types/block/output/token_scheme/simple.rs +++ b/sdk/src/types/block/output/token_scheme/simple.rs @@ -4,7 +4,10 @@ use packable::Packable; use primitive_types::U256; -use crate::types::block::Error; +use crate::types::block::{ + protocol::{WorkScore, WorkScoreParameters}, + Error, +}; /// #[derive(Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Packable)] @@ -70,6 +73,12 @@ impl SimpleTokenScheme { } } +impl WorkScore for SimpleTokenScheme { + fn work_score(&self, params: WorkScoreParameters) -> u32 { + params.native_token() + } +} + #[inline] fn verify_simple_token_scheme(token_scheme: &SimpleTokenScheme) -> Result<(), Error> { if VERIFY diff --git a/sdk/src/types/block/output/unlock_condition/mod.rs b/sdk/src/types/block/output/unlock_condition/mod.rs index 0c3e2d3d70..3791fcdf49 100644 --- a/sdk/src/types/block/output/unlock_condition/mod.rs +++ b/sdk/src/types/block/output/unlock_condition/mod.rs @@ -26,7 +26,7 @@ pub use self::{ use crate::types::block::{ address::Address, output::{StorageScore, StorageScoreParameters}, - protocol::ProtocolParameters, + protocol::{ProtocolParameters, WorkScore}, slot::SlotIndex, Error, }; @@ -85,16 +85,19 @@ impl StorageScore for UnlockCondition { } } +// TODO: check with TIP +impl WorkScore for UnlockCondition {} + impl core::fmt::Debug for UnlockCondition { fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result { match self { - Self::Address(unlock_condition) => unlock_condition.fmt(f), - Self::StorageDepositReturn(unlock_condition) => unlock_condition.fmt(f), - Self::Timelock(unlock_condition) => unlock_condition.fmt(f), - Self::Expiration(unlock_condition) => unlock_condition.fmt(f), - Self::StateControllerAddress(unlock_condition) => unlock_condition.fmt(f), - Self::GovernorAddress(unlock_condition) => unlock_condition.fmt(f), - Self::ImmutableAccountAddress(unlock_condition) => unlock_condition.fmt(f), + Self::Address(uc) => uc.fmt(f), + Self::StorageDepositReturn(uc) => uc.fmt(f), + Self::Timelock(uc) => uc.fmt(f), + Self::Expiration(uc) => uc.fmt(f), + Self::StateControllerAddress(uc) => uc.fmt(f), + Self::GovernorAddress(uc) => uc.fmt(f), + Self::ImmutableAccountAddress(uc) => uc.fmt(f), } } } @@ -304,7 +307,7 @@ impl UnlockConditions { impl StorageScore for UnlockConditions { fn storage_score(&self, params: StorageScoreParameters) -> u64 { - self.iter().map(|uc| uc.storage_score(params)).sum::() + self.iter().map(|uc| uc.storage_score(params)).sum() } } diff --git a/sdk/src/types/block/payload/candidacy_announcement.rs b/sdk/src/types/block/payload/candidacy_announcement.rs index 87313d9bd2..3c349bba04 100644 --- a/sdk/src/types/block/payload/candidacy_announcement.rs +++ b/sdk/src/types/block/payload/candidacy_announcement.rs @@ -1,7 +1,9 @@ // Copyright 2023 IOTA Stiftung // SPDX-License-Identifier: Apache-2.0 -use packable::Packable; +use packable::{Packable, PackableExt}; + +use crate::types::block::protocol::{WorkScore, WorkScoreParameters}; /// A payload which is used to indicate candidacy for committee selection for the next epoch. #[derive(Clone, Debug, Eq, PartialEq, Packable)] @@ -11,3 +13,11 @@ impl CandidacyAnnouncementPayload { /// The [`Payload`](crate::types::block::payload::Payload) kind of a [`CandidacyAnnouncementPayload`]. pub const KIND: u8 = 2; } + +// # TODO: check with TIP +impl WorkScore for CandidacyAnnouncementPayload { + fn work_score(&self, params: WorkScoreParameters) -> u32 { + // 1 byte for the payload kind + (1 + self.packed_len()) as u32 * params.data_byte() + } +} diff --git a/sdk/src/types/block/payload/mod.rs b/sdk/src/types/block/payload/mod.rs index b20b03cfe4..f72f633450 100644 --- a/sdk/src/types/block/payload/mod.rs +++ b/sdk/src/types/block/payload/mod.rs @@ -18,15 +18,15 @@ use packable::{ Packable, PackableExt, }; +pub(crate) use self::signed_transaction::{ContextInputCount, InputCount, OutputCount}; pub use self::{ candidacy_announcement::CandidacyAnnouncementPayload, signed_transaction::SignedTransactionPayload, tagged_data::TaggedDataPayload, }; -pub(crate) use self::{ - signed_transaction::{ContextInputCount, InputCount, OutputCount}, - tagged_data::{TagLength, TaggedDataLength}, +use crate::types::block::{ + protocol::{ProtocolParameters, WorkScore, WorkScoreParameters}, + Error, }; -use crate::types::block::{protocol::ProtocolParameters, Error}; /// A generic payload that can represent different types defining block payloads. #[derive(Clone, Eq, PartialEq, From, Packable)] @@ -77,7 +77,17 @@ impl Payload { } } - crate::def_is_as_opt!(Payload: SignedTransaction, TaggedData); + crate::def_is_as_opt!(Payload: TaggedData, SignedTransaction, CandidacyAnnouncement); +} + +impl WorkScore for Payload { + fn work_score(&self, params: WorkScoreParameters) -> u32 { + match self { + Self::TaggedData(tagged_data) => tagged_data.work_score(params), + Self::SignedTransaction(signed_transaction) => signed_transaction.work_score(params), + Self::CandidacyAnnouncement(candidacy_announcement) => candidacy_announcement.work_score(params), + } + } } /// Representation of an optional [`Payload`]. diff --git a/sdk/src/types/block/payload/signed_transaction/mod.rs b/sdk/src/types/block/payload/signed_transaction/mod.rs index a7cdc0a510..41a983c453 100644 --- a/sdk/src/types/block/payload/signed_transaction/mod.rs +++ b/sdk/src/types/block/payload/signed_transaction/mod.rs @@ -6,14 +6,18 @@ mod transaction; mod transaction_id; -use packable::{error::UnpackError, packer::Packer, unpacker::Unpacker, Packable}; +use packable::{error::UnpackError, packer::Packer, unpacker::Unpacker, Packable, PackableExt}; pub(crate) use self::transaction::{ContextInputCount, InputCount, OutputCount}; pub use self::{ transaction::{Transaction, TransactionBuilder, TransactionCapabilities, TransactionCapabilityFlag}, transaction_id::{TransactionHash, TransactionId, TransactionSigningHash}, }; -use crate::types::block::{protocol::ProtocolParameters, unlock::Unlocks, Error}; +use crate::types::block::{ + protocol::{ProtocolParameters, WorkScore, WorkScoreParameters}, + unlock::Unlocks, + Error, +}; /// A signed transaction to move funds. #[derive(Clone, Debug, Eq, PartialEq)] @@ -44,6 +48,15 @@ impl SignedTransactionPayload { } } +impl WorkScore for SignedTransactionPayload { + fn work_score(&self, params: WorkScoreParameters) -> u32 { + // 1 byte for the payload kind + (1 + self.packed_len() as u32) * params.data_byte() + + self.transaction().work_score(params) + + self.unlocks().work_score(params) + } +} + impl Packable for SignedTransactionPayload { type UnpackError = Error; type UnpackVisitor = ProtocolParameters; diff --git a/sdk/src/types/block/payload/signed_transaction/transaction.rs b/sdk/src/types/block/payload/signed_transaction/transaction.rs index 2682350a3b..c9e6842add 100644 --- a/sdk/src/types/block/payload/signed_transaction/transaction.rs +++ b/sdk/src/types/block/payload/signed_transaction/transaction.rs @@ -18,7 +18,7 @@ use crate::{ signed_transaction::{TransactionHash, TransactionId, TransactionSigningHash}, OptionalPayload, Payload, }, - protocol::ProtocolParameters, + protocol::{ProtocolParameters, WorkScore, WorkScoreParameters}, slot::SlotIndex, Error, }, @@ -261,7 +261,7 @@ impl Transaction { } /// Returns the [`ManaAllotment`]s of a [`Transaction`]. - pub fn mana_allotments(&self) -> &[ManaAllotment] { + pub fn allotments(&self) -> &[ManaAllotment] { &self.allotments } @@ -324,6 +324,15 @@ impl Transaction { } } +impl WorkScore for Transaction { + fn work_score(&self, params: WorkScoreParameters) -> u32 { + self.context_inputs().work_score(params) + + self.inputs().work_score(params) + + self.allotments().work_score(params) + + self.outputs().work_score(params) + } +} + fn verify_network_id(network_id: &u64, visitor: &ProtocolParameters) -> Result<(), Error> { if VERIFY { let expected = visitor.network_id(); @@ -553,7 +562,7 @@ pub(crate) mod dto { creation_slot: value.creation_slot(), context_inputs: value.context_inputs().to_vec(), inputs: value.inputs().to_vec(), - allotments: value.mana_allotments().iter().map(Into::into).collect(), + allotments: value.allotments().iter().map(Into::into).collect(), capabilities: value.capabilities().clone(), payload: match value.payload() { Some(p @ Payload::TaggedData(_)) => Some(p.into()), diff --git a/sdk/src/types/block/payload/tagged_data.rs b/sdk/src/types/block/payload/tagged_data.rs index 71a93a9a26..f99a2e280e 100644 --- a/sdk/src/types/block/payload/tagged_data.rs +++ b/sdk/src/types/block/payload/tagged_data.rs @@ -9,10 +9,13 @@ use core::ops::RangeInclusive; use packable::{ bounded::{BoundedU32, BoundedU8}, prefix::BoxedSlicePrefix, - Packable, + Packable, PackableExt, }; -use crate::types::block::Error; +use crate::types::block::{ + protocol::{WorkScore, WorkScoreParameters}, + Error, +}; pub(crate) type TagLength = BoundedU8<{ *TaggedDataPayload::TAG_LENGTH_RANGE.start() }, { *TaggedDataPayload::TAG_LENGTH_RANGE.end() }>; @@ -56,6 +59,13 @@ impl TaggedDataPayload { } } +impl WorkScore for TaggedDataPayload { + fn work_score(&self, params: WorkScoreParameters) -> u32 { + // 1 byte for the payload kind + (1 + self.packed_len() as u32) * params.data_byte() + } +} + impl core::fmt::Debug for TaggedDataPayload { fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result { f.debug_struct("TaggedDataPayload") diff --git a/sdk/src/types/block/protocol.rs b/sdk/src/types/block/protocol/mod.rs similarity index 88% rename from sdk/src/types/block/protocol.rs rename to sdk/src/types/block/protocol/mod.rs index b07263d24d..36c6462241 100644 --- a/sdk/src/types/block/protocol.rs +++ b/sdk/src/types/block/protocol/mod.rs @@ -1,6 +1,8 @@ // Copyright 2022 IOTA Stiftung // SPDX-License-Identifier: Apache-2.0 +mod work_score; + use alloc::string::String; use core::borrow::Borrow; @@ -8,6 +10,7 @@ use crypto::hashes::{blake2b::Blake2b256, Digest}; use getset::{CopyGetters, Getters}; use packable::{prefix::StringPrefix, Packable, PackableExt}; +pub use self::work_score::{WorkScore, WorkScoreParameters}; use crate::{ types::block::{ address::Hrp, @@ -205,54 +208,6 @@ impl ProtocolParameters { } } -#[derive(Copy, Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Packable, CopyGetters)] -#[cfg_attr( - feature = "serde", - derive(serde::Serialize, serde::Deserialize), - serde(rename_all = "camelCase") -)] -#[packable(unpack_error = Error)] -#[getset(get_copy = "pub")] -pub struct WorkScoreParameters { - /// Modifier for network traffic per byte. - data_byte: u32, - /// Modifier for work done to process a block. - block: u32, - /// Modifier for loading UTXOs and performing mana calculations. - input: u32, - /// Modifier for loading and checking the context input. - context_input: u32, - /// Modifier for storing UTXOs. - output: u32, - /// Modifier for calculations using native tokens. - native_token: u32, - /// Modifier for storing staking features. - staking: u32, - /// Modifier for storing block issuer features. - block_issuer: u32, - /// Modifier for accessing the account-based ledger to transform mana to Block Issuance Credits. - allotment: u32, - /// Modifier for the block signature check. - signature_ed25519: u32, -} - -impl Default for WorkScoreParameters { - fn default() -> Self { - Self { - data_byte: 0, - block: 100, - input: 20, - context_input: 20, - output: 20, - native_token: 20, - staking: 100, - block_issuer: 100, - allotment: 100, - signature_ed25519: 200, - } - } -} - /// Defines the parameters used to calculate the Reference Mana Cost (RMC). #[derive(Copy, Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Packable, CopyGetters)] #[cfg_attr( diff --git a/sdk/src/types/block/protocol/work_score.rs b/sdk/src/types/block/protocol/work_score.rs new file mode 100644 index 0000000000..fc96021a64 --- /dev/null +++ b/sdk/src/types/block/protocol/work_score.rs @@ -0,0 +1,74 @@ +// Copyright 2023 IOTA Stiftung +// SPDX-License-Identifier: Apache-2.0 + +use getset::CopyGetters; +use packable::Packable; + +use crate::types::block::Error; + +#[derive(Copy, Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Packable, CopyGetters)] +#[cfg_attr( + feature = "serde", + derive(serde::Serialize, serde::Deserialize), + serde(rename_all = "camelCase") +)] +#[packable(unpack_error = Error)] +#[getset(get_copy = "pub")] +pub struct WorkScoreParameters { + /// Accounts for the network traffic per byte. + data_byte: u32, + /// Accounts for work done to process a block in the node software. + block: u32, + /// Accounts for loading the UTXO from the database and performing the mana balance check. + input: u32, + /// Accounts for loading and checking the context input. + context_input: u32, + /// Accounts for storing the UTXO in the database. + output: u32, + /// Accounts for native token balance checks which use big integers. + native_token: u32, + /// Accounts for the cost of updating the staking vector when a staking feature is present. + staking: u32, + /// Accounts for the cost of updating the block issuer keys when a block issuer feature is present. + block_issuer: u32, + /// Accounts for accessing the account based ledger to transform the allotted mana to block issuance credits. + allotment: u32, + /// Accounts for an Ed25519 signature check. + signature_ed25519: u32, +} + +impl Default for WorkScoreParameters { + fn default() -> Self { + Self { + data_byte: 0, + block: 100, + input: 20, + context_input: 20, + output: 20, + native_token: 20, + staking: 100, + block_issuer: 100, + allotment: 100, + signature_ed25519: 200, + } + } +} + +/// A trait to facilitate the computation of the work score of a block, which is central to mana cost calculation. +pub trait WorkScore { + fn work_score(&self, _params: WorkScoreParameters) -> u32 { + 0 + } +} + +impl WorkScore for [T; N] { + fn work_score(&self, params: WorkScoreParameters) -> u32 { + self.as_slice().work_score(params) + } +} + +impl WorkScore for [T] { + fn work_score(&self, params: WorkScoreParameters) -> u32 { + self.iter().map(|o| o.work_score(params)).sum() + } +} diff --git a/sdk/src/types/block/signature/ed25519.rs b/sdk/src/types/block/signature/ed25519.rs index 69361c2309..d67abc4bb8 100644 --- a/sdk/src/types/block/signature/ed25519.rs +++ b/sdk/src/types/block/signature/ed25519.rs @@ -14,7 +14,11 @@ use packable::{ Packable, }; -use crate::types::block::{address::Ed25519Address, Error}; +use crate::types::block::{ + address::Ed25519Address, + protocol::{WorkScore, WorkScoreParameters}, + Error, +}; /// An Ed25519 signature. #[derive(Copy, Clone, Eq, PartialEq, Ord, PartialOrd, Hash)] @@ -104,6 +108,12 @@ impl fmt::Debug for Ed25519Signature { } } +impl WorkScore for Ed25519Signature { + fn work_score(&self, params: WorkScoreParameters) -> u32 { + params.signature_ed25519() + } +} + impl Packable for Ed25519Signature { type UnpackError = Error; type UnpackVisitor = (); diff --git a/sdk/src/types/block/signature/mod.rs b/sdk/src/types/block/signature/mod.rs index e7762cdc1d..740a8a8279 100644 --- a/sdk/src/types/block/signature/mod.rs +++ b/sdk/src/types/block/signature/mod.rs @@ -6,7 +6,10 @@ mod ed25519; use derive_more::From; pub use self::ed25519::Ed25519Signature; -use crate::types::block::Error; +use crate::types::block::{ + protocol::{WorkScore, WorkScoreParameters}, + Error, +}; /// A `Signature` contains a signature which is used to unlock a transaction input. /// @@ -41,3 +44,11 @@ impl Signature { crate::def_is_as_opt!(Signature: Ed25519); } + +impl WorkScore for Signature { + fn work_score(&self, params: WorkScoreParameters) -> u32 { + match self { + Self::Ed25519(ed25519) => ed25519.work_score(params), + } + } +} diff --git a/sdk/src/types/block/unlock/account.rs b/sdk/src/types/block/unlock/account.rs index f8f7872ac3..b33297478c 100644 --- a/sdk/src/types/block/unlock/account.rs +++ b/sdk/src/types/block/unlock/account.rs @@ -1,7 +1,7 @@ // Copyright 2020-2021 IOTA Stiftung // SPDX-License-Identifier: Apache-2.0 -use crate::types::block::{unlock::UnlockIndex, Error}; +use crate::types::block::{protocol::WorkScore, unlock::UnlockIndex, Error}; /// Points to the unlock of a consumed account output. #[derive(Clone, Debug, Eq, PartialEq, Hash, packable::Packable)] @@ -11,14 +11,6 @@ pub struct AccountUnlock( UnlockIndex, ); -impl TryFrom for AccountUnlock { - type Error = Error; - - fn try_from(index: u16) -> Result { - Self::new(index) - } -} - impl AccountUnlock { /// The [`Unlock`](crate::types::block::unlock::Unlock) kind of an [`AccountUnlock`]. pub const KIND: u8 = 2; @@ -36,6 +28,16 @@ impl AccountUnlock { } } +impl WorkScore for AccountUnlock {} + +impl TryFrom for AccountUnlock { + type Error = Error; + + fn try_from(index: u16) -> Result { + Self::new(index) + } +} + #[cfg(feature = "serde")] mod dto { use serde::{Deserialize, Serialize}; diff --git a/sdk/src/types/block/unlock/anchor.rs b/sdk/src/types/block/unlock/anchor.rs index aad3c49b78..1b0a7a43b2 100644 --- a/sdk/src/types/block/unlock/anchor.rs +++ b/sdk/src/types/block/unlock/anchor.rs @@ -1,7 +1,7 @@ // Copyright 2023 IOTA Stiftung // SPDX-License-Identifier: Apache-2.0 -use crate::types::block::{unlock::UnlockIndex, Error}; +use crate::types::block::{protocol::WorkScore, unlock::UnlockIndex, Error}; /// Points to the unlock of a consumed anchor output. #[derive(Clone, Debug, Eq, PartialEq, Hash, packable::Packable)] @@ -11,14 +11,6 @@ pub struct AnchorUnlock( UnlockIndex, ); -impl TryFrom for AnchorUnlock { - type Error = Error; - - fn try_from(index: u16) -> Result { - Self::new(index) - } -} - impl AnchorUnlock { /// The [`Unlock`](crate::types::block::unlock::Unlock) kind of an [`AnchorUnlock`]. pub const KIND: u8 = 3; @@ -36,6 +28,16 @@ impl AnchorUnlock { } } +impl WorkScore for AnchorUnlock {} + +impl TryFrom for AnchorUnlock { + type Error = Error; + + fn try_from(index: u16) -> Result { + Self::new(index) + } +} + #[cfg(feature = "serde")] mod dto { use serde::{Deserialize, Serialize}; diff --git a/sdk/src/types/block/unlock/empty.rs b/sdk/src/types/block/unlock/empty.rs index 2449e7668f..1778542695 100644 --- a/sdk/src/types/block/unlock/empty.rs +++ b/sdk/src/types/block/unlock/empty.rs @@ -1,6 +1,8 @@ // Copyright 2023 IOTA Stiftung // SPDX-License-Identifier: Apache-2.0 +use crate::types::block::protocol::WorkScore; + /// Used to maintain correct index relationship between addresses and signatures when unlocking a /// [`MultiAddress`](crate::types::block::address::MultiAddress) where not all addresses are unlocked. #[derive(Clone, Debug, Eq, PartialEq, Hash, packable::Packable)] @@ -11,6 +13,8 @@ impl EmptyUnlock { pub const KIND: u8 = 6; } +impl WorkScore for EmptyUnlock {} + #[cfg(feature = "serde")] mod dto { use serde::{Deserialize, Serialize}; diff --git a/sdk/src/types/block/unlock/mod.rs b/sdk/src/types/block/unlock/mod.rs index 35e0d6bdd6..8dbbef2cf4 100644 --- a/sdk/src/types/block/unlock/mod.rs +++ b/sdk/src/types/block/unlock/mod.rs @@ -23,6 +23,7 @@ pub use self::{ }; use crate::types::block::{ input::{INPUT_COUNT_MAX, INPUT_COUNT_RANGE, INPUT_INDEX_MAX}, + protocol::{WorkScore, WorkScoreParameters}, Error, }; @@ -67,6 +68,37 @@ pub enum Unlock { Empty(EmptyUnlock), } +impl Unlock { + /// Returns the unlock kind of an [`Unlock`]. + pub fn kind(&self) -> u8 { + match self { + Self::Signature(_) => SignatureUnlock::KIND, + Self::Reference(_) => ReferenceUnlock::KIND, + Self::Account(_) => AccountUnlock::KIND, + Self::Anchor(_) => AnchorUnlock::KIND, + Self::Nft(_) => NftUnlock::KIND, + Self::Multi(_) => MultiUnlock::KIND, + Self::Empty(_) => EmptyUnlock::KIND, + } + } + + crate::def_is_as_opt!(Unlock: Signature, Reference, Account, Anchor, Nft, Multi, Empty); +} + +impl WorkScore for Unlock { + fn work_score(&self, params: WorkScoreParameters) -> u32 { + match self { + Self::Signature(unlock) => unlock.work_score(params), + Self::Reference(unlock) => unlock.work_score(params), + Self::Account(unlock) => unlock.work_score(params), + Self::Anchor(unlock) => unlock.work_score(params), + Self::Nft(unlock) => unlock.work_score(params), + Self::Multi(unlock) => unlock.work_score(params), + Self::Empty(unlock) => unlock.work_score(params), + } + } +} + impl From for Unlock { fn from(value: SignatureUnlock) -> Self { Self::Signature(value.into()) @@ -87,23 +119,6 @@ impl core::fmt::Debug for Unlock { } } -impl Unlock { - /// Returns the unlock kind of an [`Unlock`]. - pub fn kind(&self) -> u8 { - match self { - Self::Signature(_) => SignatureUnlock::KIND, - Self::Reference(_) => ReferenceUnlock::KIND, - Self::Account(_) => AccountUnlock::KIND, - Self::Anchor(_) => AnchorUnlock::KIND, - Self::Nft(_) => NftUnlock::KIND, - Self::Multi(_) => MultiUnlock::KIND, - Self::Empty(_) => EmptyUnlock::KIND, - } - } - - crate::def_is_as_opt!(Unlock: Signature, Reference, Account, Anchor, Nft, Multi, Empty); -} - pub(crate) type UnlockCount = BoundedU16<{ *UNLOCK_COUNT_RANGE.start() }, { *UNLOCK_COUNT_RANGE.end() }>; /// A collection of unlocks. diff --git a/sdk/src/types/block/unlock/multi.rs b/sdk/src/types/block/unlock/multi.rs index 7cf6dd66f1..3109645c4f 100644 --- a/sdk/src/types/block/unlock/multi.rs +++ b/sdk/src/types/block/unlock/multi.rs @@ -6,7 +6,12 @@ use alloc::boxed::Box; use derive_more::Deref; use packable::{prefix::BoxedSlicePrefix, Packable}; -use crate::types::block::{address::WeightedAddressCount, unlock::Unlock, Error}; +use crate::types::block::{ + address::WeightedAddressCount, + protocol::{WorkScore, WorkScoreParameters}, + unlock::Unlock, + Error, +}; pub(crate) type UnlocksCount = WeightedAddressCount; @@ -38,6 +43,12 @@ impl MultiUnlock { } } +impl WorkScore for MultiUnlock { + fn work_score(&self, params: WorkScoreParameters) -> u32 { + self.0.work_score(params) + } +} + fn verify_unlocks(unlocks: &[Unlock]) -> Result<(), Error> { if VERIFY && unlocks.iter().any(Unlock::is_multi) { Err(Error::MultiUnlockRecursion) diff --git a/sdk/src/types/block/unlock/nft.rs b/sdk/src/types/block/unlock/nft.rs index 930b647824..cc7b6d4e79 100644 --- a/sdk/src/types/block/unlock/nft.rs +++ b/sdk/src/types/block/unlock/nft.rs @@ -1,7 +1,7 @@ // Copyright 2020-2021 IOTA Stiftung // SPDX-License-Identifier: Apache-2.0 -use crate::types::block::{unlock::UnlockIndex, Error}; +use crate::types::block::{protocol::WorkScore, unlock::UnlockIndex, Error}; /// Points to the unlock of a consumed NFT output. #[derive(Clone, Debug, Eq, PartialEq, Hash, packable::Packable)] @@ -11,14 +11,6 @@ pub struct NftUnlock( UnlockIndex, ); -impl TryFrom for NftUnlock { - type Error = Error; - - fn try_from(index: u16) -> Result { - Self::new(index) - } -} - impl NftUnlock { /// The [`Unlock`](crate::types::block::unlock::Unlock) kind of a [`NftUnlock`]. pub const KIND: u8 = 4; @@ -36,6 +28,16 @@ impl NftUnlock { } } +impl WorkScore for NftUnlock {} + +impl TryFrom for NftUnlock { + type Error = Error; + + fn try_from(index: u16) -> Result { + Self::new(index) + } +} + #[cfg(feature = "serde")] pub(crate) mod dto { use serde::{Deserialize, Serialize}; diff --git a/sdk/src/types/block/unlock/reference.rs b/sdk/src/types/block/unlock/reference.rs index dc6b76c5d5..feef4e55e5 100644 --- a/sdk/src/types/block/unlock/reference.rs +++ b/sdk/src/types/block/unlock/reference.rs @@ -1,7 +1,7 @@ // Copyright 2020-2021 IOTA Stiftung // SPDX-License-Identifier: Apache-2.0 -use crate::types::block::{unlock::UnlockIndex, Error}; +use crate::types::block::{protocol::WorkScore, unlock::UnlockIndex, Error}; /// An [`Unlock`](crate::types::block::unlock::Unlock) that refers to another unlock. #[derive(Clone, Debug, Eq, PartialEq, Hash, packable::Packable)] @@ -33,6 +33,8 @@ impl ReferenceUnlock { } } +impl WorkScore for ReferenceUnlock {} + #[cfg(feature = "serde")] pub(crate) mod dto { use serde::{Deserialize, Serialize}; diff --git a/sdk/src/types/block/unlock/signature.rs b/sdk/src/types/block/unlock/signature.rs index f5075361c2..bb9687a883 100644 --- a/sdk/src/types/block/unlock/signature.rs +++ b/sdk/src/types/block/unlock/signature.rs @@ -3,7 +3,10 @@ use derive_more::{Deref, From}; -use crate::types::block::signature::Signature; +use crate::types::block::{ + protocol::{WorkScore, WorkScoreParameters}, + signature::Signature, +}; /// An [`Unlock`](crate::types::block::unlock::Unlock) which is used to unlock a signature locked /// [`Input`](crate::types::block::input::Input). @@ -27,6 +30,12 @@ impl SignatureUnlock { } } +impl WorkScore for SignatureUnlock { + fn work_score(&self, params: WorkScoreParameters) -> u32 { + self.0.work_score(params) + } +} + #[cfg(feature = "serde")] pub(crate) mod dto { use serde::{Deserialize, Serialize}; From 0a89370ad1a1bb4502b0e1968fee87e7891c4e11 Mon Sep 17 00:00:00 2001 From: Thibault Martinez Date: Mon, 27 Nov 2023 11:57:43 +0100 Subject: [PATCH 81/91] Make OutputId infallible (#1643) * Make OutputId infallible * Use unpack_unverified in from * TryFrom to From --- bindings/core/src/method_handler/utils.rs | 2 +- .../nft_collection/00_mint_issuer_nft.rs | 2 +- sdk/src/client/api/high_level.rs | 2 +- sdk/src/types/block/input/utxo.rs | 11 ++-- sdk/src/types/block/output/metadata.rs | 14 ++--- sdk/src/types/block/output/output_id.rs | 33 ++++------- .../signed_transaction/transaction_id.rs | 4 +- sdk/src/types/block/rand/output/mod.rs | 2 +- sdk/src/types/block/semantic.rs | 2 +- sdk/src/wallet/core/mod.rs | 4 +- sdk/src/wallet/storage/participation.rs | 5 +- sdk/tests/client/mod.rs | 2 +- sdk/tests/client/node_api/core.rs | 7 +-- sdk/tests/types/input/utxo.rs | 8 +-- sdk/tests/types/output_id.rs | 57 ++----------------- sdk/tests/types/payload.rs | 4 +- sdk/tests/types/signed_transaction_payload.rs | 14 ++--- sdk/tests/types/transaction.rs | 50 ++++++++-------- sdk/tests/wallet/burn_outputs.rs | 6 +- sdk/tests/wallet/events.rs | 9 +-- 20 files changed, 82 insertions(+), 156 deletions(-) diff --git a/bindings/core/src/method_handler/utils.rs b/bindings/core/src/method_handler/utils.rs index 3fd7ba90ae..c342f7b459 100644 --- a/bindings/core/src/method_handler/utils.rs +++ b/bindings/core/src/method_handler/utils.rs @@ -60,7 +60,7 @@ pub(crate) fn call_utils_method_internal(method: UtilsMethod) -> Result Response::NftId(NftId::from(&output_id)), - UtilsMethod::ComputeOutputId { id, index } => Response::OutputId(OutputId::new(id, index)?), + UtilsMethod::ComputeOutputId { id, index } => Response::OutputId(OutputId::new(id, index)), UtilsMethod::ComputeTokenId { account_id, serial_number, diff --git a/sdk/examples/how_tos/nft_collection/00_mint_issuer_nft.rs b/sdk/examples/how_tos/nft_collection/00_mint_issuer_nft.rs index d49d6d177a..4023bfc015 100644 --- a/sdk/examples/how_tos/nft_collection/00_mint_issuer_nft.rs +++ b/sdk/examples/how_tos/nft_collection/00_mint_issuer_nft.rs @@ -53,7 +53,7 @@ async fn main() -> Result<()> { if let Output::Nft(nft_output) = output { // New minted nft id is empty in the output if nft_output.nft_id().is_null() { - let output_id = OutputId::new(transaction.transaction_id, output_index as u16)?; + let output_id = OutputId::new(transaction.transaction_id, output_index as u16); let nft_id = NftId::from(&output_id); println!("New minted issuer NFT id: {nft_id}"); } diff --git a/sdk/src/client/api/high_level.rs b/sdk/src/client/api/high_level.rs index d715558687..460667c9c8 100644 --- a/sdk/src/client/api/high_level.rs +++ b/sdk/src/client/api/high_level.rs @@ -80,7 +80,7 @@ impl Client { UtxoInput::new( output_with_meta.metadata().transaction_id().to_owned(), output_with_meta.metadata().output_index(), - )?, + ), output_with_meta.output().amount(), )) }) diff --git a/sdk/src/types/block/input/utxo.rs b/sdk/src/types/block/input/utxo.rs index 24f4bcb8ee..c1e20beff2 100644 --- a/sdk/src/types/block/input/utxo.rs +++ b/sdk/src/types/block/input/utxo.rs @@ -21,8 +21,8 @@ impl UtxoInput { pub const KIND: u8 = 0; /// Creates a new [`UtxoInput`]. - pub fn new(id: TransactionId, index: u16) -> Result { - Ok(Self(OutputId::new(id, index)?)) + pub fn new(id: TransactionId, index: u16) -> Self { + Self(OutputId::new(id, index)) } /// Returns the output id of a [`UtxoInput`]. @@ -62,7 +62,6 @@ pub(crate) mod dto { use serde::{Deserialize, Serialize}; use super::*; - use crate::types::block::Error; /// Describes an input which references an unspent transaction output to consume. #[derive(Serialize, Deserialize)] @@ -84,10 +83,8 @@ pub(crate) mod dto { } } - impl TryFrom for UtxoInput { - type Error = Error; - - fn try_from(value: UtxoInputDto) -> Result { + impl From for UtxoInput { + fn from(value: UtxoInputDto) -> Self { Self::new(value.transaction_id, value.transaction_output_index) } } diff --git a/sdk/src/types/block/output/metadata.rs b/sdk/src/types/block/output/metadata.rs index cc78bc01f7..4bee1b8907 100644 --- a/sdk/src/types/block/output/metadata.rs +++ b/sdk/src/types/block/output/metadata.rs @@ -120,19 +120,17 @@ mod dto { latest_commitment_id: SlotCommitmentId, } - impl TryFrom for OutputMetadata { - type Error = crate::types::block::Error; - - fn try_from(value: OutputMetadataDto) -> Result { - Ok(Self { + impl From for OutputMetadata { + fn from(value: OutputMetadataDto) -> Self { + Self { block_id: value.block_id, - output_id: OutputId::new(value.transaction_id, value.output_index)?, + output_id: OutputId::new(value.transaction_id, value.output_index), is_spent: value.is_spent, commitment_id_spent: value.commitment_id_spent, transaction_id_spent: value.transaction_id_spent, included_commitment_id: value.included_commitment_id, latest_commitment_id: value.latest_commitment_id, - }) + } } } @@ -153,7 +151,7 @@ mod dto { impl<'de> Deserialize<'de> for OutputMetadata { fn deserialize>(d: D) -> Result { - OutputMetadataDto::deserialize(d).and_then(|dto| dto.try_into().map_err(serde::de::Error::custom)) + Ok(OutputMetadataDto::deserialize(d)?.into()) } } diff --git a/sdk/src/types/block/output/output_id.rs b/sdk/src/types/block/output/output_id.rs index 4cd8222f39..70d2b47cba 100644 --- a/sdk/src/types/block/output/output_id.rs +++ b/sdk/src/types/block/output/output_id.rs @@ -16,8 +16,7 @@ pub(crate) type OutputIndex = BoundedU16<{ *OUTPUT_INDEX_RANGE.start() }, { *OUT #[packable(unpack_error = Error)] pub struct OutputId { transaction_id: TransactionId, - #[packable(unpack_error_with = Error::InvalidInputOutputIndex)] - index: OutputIndex, + index: u16, } impl OutputId { @@ -25,11 +24,8 @@ impl OutputId { pub const LENGTH: usize = TransactionId::LENGTH + core::mem::size_of::(); /// Creates a new [`OutputId`]. - pub fn new(transaction_id: TransactionId, index: u16) -> Result { - index - .try_into() - .map(|index| Self { transaction_id, index }) - .map_err(Error::InvalidInputOutputIndex) + pub fn new(transaction_id: TransactionId, index: u16) -> Self { + Self { transaction_id, index } } /// Returns the [`TransactionId`] of an [`OutputId`]. @@ -41,7 +37,7 @@ impl OutputId { /// Returns the index of an [`OutputId`]. #[inline(always)] pub fn index(&self) -> u16 { - self.index.get() + self.index } /// Splits an [`OutputId`] into its [`TransactionId`] and index. @@ -60,18 +56,11 @@ impl OutputId { #[cfg(feature = "serde")] crate::string_serde_impl!(OutputId); -impl TryFrom<[u8; Self::LENGTH]> for OutputId { - type Error = Error; - - fn try_from(bytes: [u8; Self::LENGTH]) -> Result { - let (transaction_id, index) = bytes.split_at(TransactionId::LENGTH); - - Self::new( - // Unwrap is fine because size is already known and valid. - TransactionId::new(transaction_id.try_into().unwrap()), - // Unwrap is fine because size is already known and valid. - u16::from_le_bytes(index.try_into().unwrap()), - ) +#[allow(clippy::fallible_impl_from)] +impl From<[u8; Self::LENGTH]> for OutputId { + fn from(bytes: [u8; Self::LENGTH]) -> Self { + // Unwrap is fine because size is already known and valid. + Self::unpack_unverified(bytes).unwrap() } } @@ -79,7 +68,9 @@ impl FromStr for OutputId { type Err = Error; fn from_str(s: &str) -> Result { - Self::try_from(prefix_hex::decode::<[u8; Self::LENGTH]>(s).map_err(Error::Hex)?) + Ok(Self::from( + prefix_hex::decode::<[u8; Self::LENGTH]>(s).map_err(Error::Hex)?, + )) } } diff --git a/sdk/src/types/block/payload/signed_transaction/transaction_id.rs b/sdk/src/types/block/payload/signed_transaction/transaction_id.rs index f82c519372..f76044f3e7 100644 --- a/sdk/src/types/block/payload/signed_transaction/transaction_id.rs +++ b/sdk/src/types/block/payload/signed_transaction/transaction_id.rs @@ -1,7 +1,7 @@ // Copyright 2020-2021 IOTA Stiftung // SPDX-License-Identifier: Apache-2.0 -use crate::types::block::{output::OutputId, Error}; +use crate::types::block::output::OutputId; crate::impl_id!( /// The hash of a transaction commitment and output commitment which is used to create a @@ -15,7 +15,7 @@ crate::impl_id!( impl TransactionId { /// Creates an [`OutputId`] from this [`TransactionId`] and an output index. - pub fn into_output_id(self, index: u16) -> Result { + pub fn into_output_id(self, index: u16) -> OutputId { OutputId::new(self, index) } } diff --git a/sdk/src/types/block/rand/output/mod.rs b/sdk/src/types/block/rand/output/mod.rs index c5e73988bc..498943d023 100644 --- a/sdk/src/types/block/rand/output/mod.rs +++ b/sdk/src/types/block/rand/output/mod.rs @@ -38,7 +38,7 @@ use crate::types::block::{ /// Generates a random [`OutputId`]. pub fn rand_output_id() -> OutputId { - OutputId::new(rand_transaction_id(), rand_number_range(OUTPUT_INDEX_RANGE)).unwrap() + OutputId::new(rand_transaction_id(), rand_number_range(OUTPUT_INDEX_RANGE)) } /// Generates a random [`BasicOutput`](BasicOutput). diff --git a/sdk/src/types/block/semantic.rs b/sdk/src/types/block/semantic.rs index c22695ac45..b43ebbaab6 100644 --- a/sdk/src/types/block/semantic.rs +++ b/sdk/src/types/block/semantic.rs @@ -235,7 +235,7 @@ impl<'a> SemanticValidationContext<'a> { .filter_map(|(index, output)| { output.chain_id().map(|chain_id| { ( - chain_id.or_from_output_id(&OutputId::new(*transaction_id, index as u16).unwrap()), + chain_id.or_from_output_id(&OutputId::new(*transaction_id, index as u16)), output, ) }) diff --git a/sdk/src/wallet/core/mod.rs b/sdk/src/wallet/core/mod.rs index 5db7a7f0bc..68c6843a45 100644 --- a/sdk/src/wallet/core/mod.rs +++ b/sdk/src/wallet/core/mod.rs @@ -700,8 +700,8 @@ mod test { .unwrap(); let transaction_id = TransactionId::new(prefix_hex::decode(TRANSACTION_ID).unwrap()); - let input1 = Input::Utxo(UtxoInput::new(transaction_id, 0).unwrap()); - let input2 = Input::Utxo(UtxoInput::new(transaction_id, 1).unwrap()); + let input1 = Input::Utxo(UtxoInput::new(transaction_id, 0)); + let input2 = Input::Utxo(UtxoInput::new(transaction_id, 1)); let bytes: [u8; 32] = prefix_hex::decode(ED25519_ADDRESS).unwrap(); let address = Address::from(Ed25519Address::new(bytes)); let amount = 1_000_000; diff --git a/sdk/src/wallet/storage/participation.rs b/sdk/src/wallet/storage/participation.rs index 0691874a91..e529cca4e5 100644 --- a/sdk/src/wallet/storage/participation.rs +++ b/sdk/src/wallet/storage/participation.rs @@ -134,10 +134,7 @@ mod tests { ); let outputs_participation = std::iter::once(( - TransactionHash::new([3; 32]) - .into_transaction_id(0) - .into_output_id(0) - .unwrap(), + TransactionHash::new([3; 32]).into_transaction_id(0).into_output_id(0), OutputStatusResponse::mock(), )) .collect::>(); diff --git a/sdk/tests/client/mod.rs b/sdk/tests/client/mod.rs index 8edc869ebf..5ee2f04c93 100644 --- a/sdk/tests/client/mod.rs +++ b/sdk/tests/client/mod.rs @@ -241,7 +241,7 @@ fn build_inputs<'a>(outputs: impl IntoIterator>) -> Vec() ); assert_eq!( @@ -93,7 +91,7 @@ fn packed_len() { #[test] fn pack_unpack() { let output_id = OutputId::from_str(OUTPUT_ID).unwrap(); - let utxo_input = UtxoInput::new(*output_id.transaction_id(), output_id.index()).unwrap(); + let utxo_input = UtxoInput::new(*output_id.transaction_id(), output_id.index()); let packed_input = utxo_input.pack_to_vec(); assert_eq!( diff --git a/sdk/tests/types/output_id.rs b/sdk/tests/types/output_id.rs index 398719103b..a00249cc77 100644 --- a/sdk/tests/types/output_id.rs +++ b/sdk/tests/types/output_id.rs @@ -25,7 +25,7 @@ fn debug_impl() { id: \"0x52fdfc072182654f163f5f0f9a621d729566c74d10037c4d7bbb0407d1e2c64900000000\", \ slot_index: SlotIndex(0) \ }, \ - output_index: BoundedU16(42) \ + output_index: 42 \ }" ); } @@ -33,7 +33,7 @@ fn debug_impl() { #[test] fn new_valid() { let transaction_id = TransactionId::from_str(TRANSACTION_ID).unwrap(); - let output_id = OutputId::new(transaction_id, 42).unwrap(); + let output_id = OutputId::new(transaction_id, 42); assert_eq!(*output_id.transaction_id(), transaction_id); assert_eq!(output_id.index(), 42); @@ -42,13 +42,7 @@ fn new_valid() { #[test] fn null() { assert_eq!( - format!( - "{}", - TransactionHash::null() - .into_transaction_id(0) - .into_output_id(0) - .unwrap() - ), + format!("{}", TransactionHash::null().into_transaction_id(0).into_output_id(0)), "0x0000000000000000000000000000000000000000000000000000000000000000000000000000" ); } @@ -56,23 +50,13 @@ fn null() { #[test] fn split_valid() { let transaction_id = TransactionId::from_str(TRANSACTION_ID).unwrap(); - let output_id = OutputId::new(transaction_id, 42).unwrap(); + let output_id = OutputId::new(transaction_id, 42); let (transaction_id_s, index) = output_id.split(); assert_eq!(transaction_id_s, transaction_id); assert_eq!(index, 42); } -#[test] -fn new_invalid() { - let transaction_id = TransactionId::from_str(TRANSACTION_ID).unwrap(); - - assert!(matches!( - OutputId::new(transaction_id, 128), - Err(Error::InvalidInputOutputIndex(InvalidBoundedU16(128))) - )); -} - #[test] fn try_from_valid() { let transaction_id = TransactionId::from_str(TRANSACTION_ID).unwrap(); @@ -83,16 +67,6 @@ fn try_from_valid() { assert_eq!(output_id.index(), 42); } -#[test] -fn try_from_invalid() { - let output_id_bytes: [u8; OutputId::LENGTH] = prefix_hex::decode(OUTPUT_ID_INVALID_INDEX).unwrap(); - - assert!(matches!( - OutputId::try_from(output_id_bytes), - Err(Error::InvalidInputOutputIndex(InvalidBoundedU16(128))) - )); -} - #[test] fn from_str_valid() { let transaction_id = TransactionId::from_str(TRANSACTION_ID).unwrap(); @@ -102,14 +76,6 @@ fn from_str_valid() { assert_eq!(output_id.index(), 42); } -#[test] -fn from_str_invalid_index() { - assert!(matches!( - OutputId::from_str(OUTPUT_ID_INVALID_INDEX), - Err(Error::InvalidInputOutputIndex(InvalidBoundedU16(128))) - )); -} - #[test] fn from_str_to_str() { let output_id = OutputId::from_str(OUTPUT_ID).unwrap(); @@ -138,18 +104,3 @@ fn pack_unpack_valid() { assert_eq!(output_id_1, output_id_2); } - -#[test] -fn pack_unpack_invalid() { - let bytes = vec![ - 82, 253, 252, 7, 33, 130, 101, 79, 22, 63, 95, 15, 154, 98, 29, 114, 149, 102, 199, 77, 16, 3, 124, 77, 123, - 187, 4, 7, 209, 226, 198, 73, 0, 0, 0, 0, 128, 0, - ]; - - assert!(matches!( - OutputId::unpack_verified(bytes.as_slice(), &()), - Err(UnpackError::Packable(Error::InvalidInputOutputIndex( - InvalidBoundedU16(128) - ))) - )); -} diff --git a/sdk/tests/types/payload.rs b/sdk/tests/types/payload.rs index b8a2ddafee..c6c2bf01a2 100644 --- a/sdk/tests/types/payload.rs +++ b/sdk/tests/types/payload.rs @@ -26,8 +26,8 @@ const ED25519_SIGNATURE: &str = "0xc6a40edf9a089f42c18f4ebccb35fe4b578d93b879e99 fn transaction() { let protocol_parameters = protocol_parameters(); let transaction_id = TransactionId::new(prefix_hex::decode(TRANSACTION_ID).unwrap()); - let input1 = Input::Utxo(UtxoInput::new(transaction_id, 0).unwrap()); - let input2 = Input::Utxo(UtxoInput::new(transaction_id, 1).unwrap()); + let input1 = Input::Utxo(UtxoInput::new(transaction_id, 0)); + let input2 = Input::Utxo(UtxoInput::new(transaction_id, 1)); let bytes: [u8; 32] = prefix_hex::decode(ED25519_ADDRESS).unwrap(); let address = Address::from(Ed25519Address::new(bytes)); let amount = 1_000_000; diff --git a/sdk/tests/types/signed_transaction_payload.rs b/sdk/tests/types/signed_transaction_payload.rs index eef9a27afb..8289158d13 100644 --- a/sdk/tests/types/signed_transaction_payload.rs +++ b/sdk/tests/types/signed_transaction_payload.rs @@ -31,8 +31,8 @@ fn builder_too_few_unlocks() { let protocol_parameters = protocol_parameters(); // Construct a transaction with two inputs and one output. let transaction_id = TransactionId::new(prefix_hex::decode(TRANSACTION_ID).unwrap()); - let input1 = Input::Utxo(UtxoInput::new(transaction_id, 0).unwrap()); - let input2 = Input::Utxo(UtxoInput::new(transaction_id, 1).unwrap()); + let input1 = Input::Utxo(UtxoInput::new(transaction_id, 0)); + let input2 = Input::Utxo(UtxoInput::new(transaction_id, 1)); let bytes: [u8; 32] = prefix_hex::decode(ED25519_ADDRESS).unwrap(); let address = Address::from(Ed25519Address::new(bytes)); let amount = 1_000_000; @@ -68,7 +68,7 @@ fn builder_too_many_unlocks() { let protocol_parameters = protocol_parameters(); // Construct a transaction with one input and one output. let transaction_id = TransactionId::new(prefix_hex::decode(TRANSACTION_ID).unwrap()); - let input1 = Input::Utxo(UtxoInput::new(transaction_id, 0).unwrap()); + let input1 = Input::Utxo(UtxoInput::new(transaction_id, 0)); let bytes: [u8; 32] = prefix_hex::decode(ED25519_ADDRESS).unwrap(); let address = Address::from(Ed25519Address::new(bytes)); let amount = 1_000_000; @@ -106,8 +106,8 @@ fn pack_unpack_valid() { // Construct a transaction with two inputs and one output. let protocol_parameters = protocol_parameters(); let transaction_id = TransactionId::new(prefix_hex::decode(TRANSACTION_ID).unwrap()); - let input1 = Input::Utxo(UtxoInput::new(transaction_id, 0).unwrap()); - let input2 = Input::Utxo(UtxoInput::new(transaction_id, 1).unwrap()); + let input1 = Input::Utxo(UtxoInput::new(transaction_id, 0)); + let input2 = Input::Utxo(UtxoInput::new(transaction_id, 1)); let bytes: [u8; 32] = prefix_hex::decode(ED25519_ADDRESS).unwrap(); let address = Address::from(Ed25519Address::new(bytes)); let amount = 1_000_000; @@ -147,8 +147,8 @@ fn getters() { let protocol_parameters = protocol_parameters(); // Construct a transaction with two inputs and one output. let transaction_id = TransactionId::new(prefix_hex::decode(TRANSACTION_ID).unwrap()); - let input1 = Input::Utxo(UtxoInput::new(transaction_id, 0).unwrap()); - let input2 = Input::Utxo(UtxoInput::new(transaction_id, 1).unwrap()); + let input1 = Input::Utxo(UtxoInput::new(transaction_id, 0)); + let input2 = Input::Utxo(UtxoInput::new(transaction_id, 1)); let bytes: [u8; 32] = prefix_hex::decode(ED25519_ADDRESS).unwrap(); let address = Address::from(Ed25519Address::new(bytes)); let amount = 1_000_000; diff --git a/sdk/tests/types/transaction.rs b/sdk/tests/types/transaction.rs index de81bb75be..d1e1755839 100644 --- a/sdk/tests/types/transaction.rs +++ b/sdk/tests/types/transaction.rs @@ -34,8 +34,8 @@ const ED25519_SIGNATURE: &str = "0xc6a40edf9a089f42c18f4ebccb35fe4b578d93b879e99 fn build_valid() { let protocol_parameters = protocol_parameters(); let transaction_id = TransactionId::new(prefix_hex::decode(TRANSACTION_ID).unwrap()); - let input1 = Input::Utxo(UtxoInput::new(transaction_id, 0).unwrap()); - let input2 = Input::Utxo(UtxoInput::new(transaction_id, 1).unwrap()); + let input1 = Input::Utxo(UtxoInput::new(transaction_id, 0)); + let input2 = Input::Utxo(UtxoInput::new(transaction_id, 1)); let bytes: [u8; 32] = prefix_hex::decode(ED25519_ADDRESS_1).unwrap(); let address = Address::from(Ed25519Address::new(bytes)); let amount = 1_000_000; @@ -59,8 +59,8 @@ fn build_valid() { fn build_valid_with_payload() { let protocol_parameters = protocol_parameters(); let transaction_id = TransactionId::new(prefix_hex::decode(TRANSACTION_ID).unwrap()); - let input1 = Input::Utxo(UtxoInput::new(transaction_id, 0).unwrap()); - let input2 = Input::Utxo(UtxoInput::new(transaction_id, 1).unwrap()); + let input1 = Input::Utxo(UtxoInput::new(transaction_id, 0)); + let input2 = Input::Utxo(UtxoInput::new(transaction_id, 1)); let bytes: [u8; 32] = prefix_hex::decode(ED25519_ADDRESS_1).unwrap(); let address = Address::from(Ed25519Address::new(bytes)); let amount = 1_000_000; @@ -85,8 +85,8 @@ fn build_valid_with_payload() { fn build_valid_add_inputs_outputs() { let protocol_parameters = protocol_parameters(); let transaction_id = TransactionId::new(prefix_hex::decode(TRANSACTION_ID).unwrap()); - let input1 = Input::Utxo(UtxoInput::new(transaction_id, 0).unwrap()); - let input2 = Input::Utxo(UtxoInput::new(transaction_id, 1).unwrap()); + let input1 = Input::Utxo(UtxoInput::new(transaction_id, 0)); + let input2 = Input::Utxo(UtxoInput::new(transaction_id, 1)); let bytes: [u8; 32] = prefix_hex::decode(ED25519_ADDRESS_1).unwrap(); let address = Address::from(Ed25519Address::new(bytes)); let amount = 1_000_000; @@ -111,8 +111,8 @@ fn build_invalid_payload_kind() { let protocol_parameters = protocol_parameters(); // Construct a transaction with two inputs and one output. let transaction_id = TransactionId::new(prefix_hex::decode(TRANSACTION_ID).unwrap()); - let input1 = Input::Utxo(UtxoInput::new(transaction_id, 0).unwrap()); - let input2 = Input::Utxo(UtxoInput::new(transaction_id, 1).unwrap()); + let input1 = Input::Utxo(UtxoInput::new(transaction_id, 0)); + let input2 = Input::Utxo(UtxoInput::new(transaction_id, 1)); let bytes: [u8; 32] = prefix_hex::decode(ED25519_ADDRESS_1).unwrap(); let address = Address::from(Ed25519Address::new(bytes)); let amount = 1_000_000; @@ -177,7 +177,7 @@ fn build_invalid_input_count_low() { fn build_invalid_input_count_high() { let protocol_parameters = protocol_parameters(); let transaction_id = TransactionId::new(prefix_hex::decode(TRANSACTION_ID).unwrap()); - let input = Input::Utxo(UtxoInput::new(transaction_id, 0).unwrap()); + let input = Input::Utxo(UtxoInput::new(transaction_id, 0)); let bytes: [u8; 32] = prefix_hex::decode(ED25519_ADDRESS_1).unwrap(); let address = Address::from(Ed25519Address::new(bytes)); let amount = 1_000_000; @@ -204,7 +204,7 @@ fn build_invalid_input_count_high() { fn build_invalid_output_count_low() { let protocol_parameters = protocol_parameters(); let transaction_id = TransactionId::new(prefix_hex::decode(TRANSACTION_ID).unwrap()); - let input = Input::Utxo(UtxoInput::new(transaction_id, 0).unwrap()); + let input = Input::Utxo(UtxoInput::new(transaction_id, 0)); let transaction = Transaction::builder(protocol_parameters.network_id()) .add_input(input) @@ -221,7 +221,7 @@ fn build_invalid_output_count_low() { fn build_invalid_output_count_high() { let protocol_parameters = protocol_parameters(); let transaction_id = TransactionId::new(prefix_hex::decode(TRANSACTION_ID).unwrap()); - let input = Input::Utxo(UtxoInput::new(transaction_id, 0).unwrap()); + let input = Input::Utxo(UtxoInput::new(transaction_id, 0)); let bytes: [u8; 32] = prefix_hex::decode(ED25519_ADDRESS_1).unwrap(); let address = Address::from(Ed25519Address::new(bytes)); let amount = 1_000_000; @@ -248,7 +248,7 @@ fn build_invalid_output_count_high() { fn build_invalid_duplicate_utxo() { let protocol_parameters = protocol_parameters(); let transaction_id = TransactionId::new(prefix_hex::decode(TRANSACTION_ID).unwrap()); - let input = Input::Utxo(UtxoInput::new(transaction_id, 0).unwrap()); + let input = Input::Utxo(UtxoInput::new(transaction_id, 0)); let bytes: [u8; 32] = prefix_hex::decode(ED25519_ADDRESS_1).unwrap(); let address = Address::from(Ed25519Address::new(bytes)); let amount = 1_000_000; @@ -272,7 +272,7 @@ fn build_invalid_duplicate_utxo() { fn build_invalid_accumulated_output() { let protocol_parameters = protocol_parameters(); let transaction_id = TransactionId::new(prefix_hex::decode(TRANSACTION_ID).unwrap()); - let input = Input::Utxo(UtxoInput::new(transaction_id, 0).unwrap()); + let input = Input::Utxo(UtxoInput::new(transaction_id, 0)); let bytes1: [u8; 32] = prefix_hex::decode(ED25519_ADDRESS_1).unwrap(); let address1 = Address::from(Ed25519Address::new(bytes1)); @@ -307,8 +307,8 @@ fn build_invalid_accumulated_output() { fn getters() { let protocol_parameters = protocol_parameters(); let transaction_id = TransactionId::new(prefix_hex::decode(TRANSACTION_ID).unwrap()); - let input1 = Input::Utxo(UtxoInput::new(transaction_id, 0).unwrap()); - let input2 = Input::Utxo(UtxoInput::new(transaction_id, 1).unwrap()); + let input1 = Input::Utxo(UtxoInput::new(transaction_id, 0)); + let input2 = Input::Utxo(UtxoInput::new(transaction_id, 1)); let bytes: [u8; 32] = prefix_hex::decode(ED25519_ADDRESS_1).unwrap(); let address = Address::from(Ed25519Address::new(bytes)); let amount = 1_000_000; @@ -336,8 +336,8 @@ fn getters() { fn duplicate_output_nft() { let protocol_parameters = protocol_parameters(); let transaction_id = TransactionId::new(prefix_hex::decode(TRANSACTION_ID).unwrap()); - let input1 = Input::Utxo(UtxoInput::new(transaction_id, 0).unwrap()); - let input2 = Input::Utxo(UtxoInput::new(transaction_id, 1).unwrap()); + let input1 = Input::Utxo(UtxoInput::new(transaction_id, 0)); + let input2 = Input::Utxo(UtxoInput::new(transaction_id, 1)); let bytes: [u8; 32] = prefix_hex::decode(ED25519_ADDRESS_1).unwrap(); let address = Address::from(Ed25519Address::new(bytes)); let amount = 1_000_000; @@ -367,8 +367,8 @@ fn duplicate_output_nft() { fn duplicate_output_nft_null() { let protocol_parameters = protocol_parameters(); let transaction_id = TransactionId::new(prefix_hex::decode(TRANSACTION_ID).unwrap()); - let input1 = Input::Utxo(UtxoInput::new(transaction_id, 0).unwrap()); - let input2 = Input::Utxo(UtxoInput::new(transaction_id, 1).unwrap()); + let input1 = Input::Utxo(UtxoInput::new(transaction_id, 0)); + let input2 = Input::Utxo(UtxoInput::new(transaction_id, 1)); let bytes: [u8; 32] = prefix_hex::decode(ED25519_ADDRESS_1).unwrap(); let address = Address::from(Ed25519Address::new(bytes)); let amount = 1_000_000; @@ -395,8 +395,8 @@ fn duplicate_output_nft_null() { fn duplicate_output_account() { let protocol_parameters = protocol_parameters(); let transaction_id = TransactionId::new(prefix_hex::decode(TRANSACTION_ID).unwrap()); - let input1 = Input::Utxo(UtxoInput::new(transaction_id, 0).unwrap()); - let input2 = Input::Utxo(UtxoInput::new(transaction_id, 1).unwrap()); + let input1 = Input::Utxo(UtxoInput::new(transaction_id, 0)); + let input2 = Input::Utxo(UtxoInput::new(transaction_id, 1)); let bytes: [u8; 32] = prefix_hex::decode(ED25519_ADDRESS_1).unwrap(); let address = Address::from(Ed25519Address::new(bytes)); let amount = 1_000_000; @@ -426,8 +426,8 @@ fn duplicate_output_account() { fn duplicate_output_foundry() { let protocol_parameters = protocol_parameters(); let transaction_id = TransactionId::new(prefix_hex::decode(TRANSACTION_ID).unwrap()); - let input1 = Input::Utxo(UtxoInput::new(transaction_id, 0).unwrap()); - let input2 = Input::Utxo(UtxoInput::new(transaction_id, 1).unwrap()); + let input1 = Input::Utxo(UtxoInput::new(transaction_id, 0)); + let input2 = Input::Utxo(UtxoInput::new(transaction_id, 1)); let bytes: [u8; 32] = prefix_hex::decode(ED25519_ADDRESS_1).unwrap(); let address = Address::from(Ed25519Address::new(bytes)); let amount = 1_000_000; @@ -463,8 +463,8 @@ fn duplicate_output_foundry() { fn transactions_capabilities() { let protocol_parameters = protocol_parameters(); let transaction_id = TransactionId::new(prefix_hex::decode(TRANSACTION_ID).unwrap()); - let input1 = Input::Utxo(UtxoInput::new(transaction_id, 0).unwrap()); - let input2 = Input::Utxo(UtxoInput::new(transaction_id, 1).unwrap()); + let input1 = Input::Utxo(UtxoInput::new(transaction_id, 0)); + let input2 = Input::Utxo(UtxoInput::new(transaction_id, 1)); let address = Address::from(Ed25519Address::new(prefix_hex::decode(ED25519_ADDRESS_1).unwrap())); let amount = 1_000_000; let output = Output::Basic( diff --git a/sdk/tests/wallet/burn_outputs.rs b/sdk/tests/wallet/burn_outputs.rs index dff9359506..1d2d7330c3 100644 --- a/sdk/tests/wallet/burn_outputs.rs +++ b/sdk/tests/wallet/burn_outputs.rs @@ -35,7 +35,7 @@ async fn mint_and_burn_nft() -> Result<()> { let balance = wallet.sync(None).await.unwrap(); - let output_id = OutputId::new(transaction.transaction_id, 0u16).unwrap(); + let output_id = OutputId::new(transaction.transaction_id, 0u16); let nft_id = NftId::from(&output_id); let search = balance.nfts().iter().find(|&balance_nft_id| *balance_nft_id == nft_id); @@ -78,7 +78,7 @@ async fn mint_and_burn_expired_nft() -> Result<()> { .reissue_transaction_until_included(&transaction.transaction_id, None, None) .await?; - let output_id = OutputId::new(transaction.transaction_id, 0u16)?; + let output_id = OutputId::new(transaction.transaction_id, 0u16); let nft_id = NftId::from(&output_id); wallet_1.sync(None).await?; @@ -291,7 +291,7 @@ async fn mint_and_burn_nft_with_account() -> Result<()> { wallet .reissue_transaction_until_included(&nft_tx.transaction_id, None, None) .await?; - let output_id = OutputId::new(nft_tx.transaction_id, 0u16).unwrap(); + let output_id = OutputId::new(nft_tx.transaction_id, 0u16); let nft_id = NftId::from(&output_id); let balance = wallet.sync(None).await?; diff --git a/sdk/tests/wallet/events.rs b/sdk/tests/wallet/events.rs index 41abdac43c..c96a3d3222 100644 --- a/sdk/tests/wallet/events.rs +++ b/sdk/tests/wallet/events.rs @@ -45,10 +45,7 @@ fn wallet_events_serde() { })); let output_data_dto = OutputDataDto::from(&OutputData { - output_id: TransactionHash::null() - .into_transaction_id(0) - .into_output_id(0) - .unwrap(), + output_id: TransactionHash::null().into_transaction_id(0).into_output_id(0), metadata: rand_output_metadata(), output: Output::from(rand_basic_output(1_813_620_509_061_365)), is_spent: false, @@ -87,8 +84,8 @@ fn wallet_events_serde() { { let protocol_parameters = protocol_parameters(); let transaction_id = TransactionId::new(prefix_hex::decode(TRANSACTION_ID).unwrap()); - let input1 = Input::Utxo(UtxoInput::new(transaction_id, 0).unwrap()); - let input2 = Input::Utxo(UtxoInput::new(transaction_id, 1).unwrap()); + let input1 = Input::Utxo(UtxoInput::new(transaction_id, 0)); + let input2 = Input::Utxo(UtxoInput::new(transaction_id, 1)); let bytes: [u8; 32] = prefix_hex::decode(ED25519_ADDRESS).unwrap(); let address = Address::from(Ed25519Address::new(bytes)); let amount = 1_000_000; From 65aacacdaa6b771cfb0101aa429a9eb292a743be Mon Sep 17 00:00:00 2001 From: Thibault Martinez Date: Mon, 27 Nov 2023 11:58:50 +0100 Subject: [PATCH 82/91] Use ALL_FLAGS length instead of constant (#1684) --- sdk/src/types/block/output/feature/mod.rs | 5 +---- sdk/src/types/block/output/unlock_condition/mod.rs | 5 +---- 2 files changed, 2 insertions(+), 8 deletions(-) diff --git a/sdk/src/types/block/output/feature/mod.rs b/sdk/src/types/block/output/feature/mod.rs index bcff97711b..eed47ced38 100644 --- a/sdk/src/types/block/output/feature/mod.rs +++ b/sdk/src/types/block/output/feature/mod.rs @@ -164,7 +164,7 @@ crate::create_bitflags!( ] ); -pub(crate) type FeatureCount = BoundedU8<0, { Features::COUNT_MAX }>; +pub(crate) type FeatureCount = BoundedU8<0, { FeatureFlags::ALL_FLAGS.len() as u8 }>; /// #[derive(Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Deref, Packable)] @@ -199,9 +199,6 @@ impl IntoIterator for Features { } impl Features { - /// - pub const COUNT_MAX: u8 = 5; - /// Creates a new [`Features`] from a vec. pub fn from_vec(features: Vec) -> Result { let mut features = BoxedSlicePrefix::::try_from(features.into_boxed_slice()) diff --git a/sdk/src/types/block/output/unlock_condition/mod.rs b/sdk/src/types/block/output/unlock_condition/mod.rs index 3791fcdf49..89d40b21db 100644 --- a/sdk/src/types/block/output/unlock_condition/mod.rs +++ b/sdk/src/types/block/output/unlock_condition/mod.rs @@ -155,7 +155,7 @@ crate::create_bitflags!( ] ); -pub(crate) type UnlockConditionCount = BoundedU8<0, { UnlockConditions::COUNT_MAX }>; +pub(crate) type UnlockConditionCount = BoundedU8<0, { UnlockConditionFlags::ALL_FLAGS.len() as u8 }>; /// #[derive(Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Deref, Packable)] @@ -193,9 +193,6 @@ impl IntoIterator for UnlockConditions { } impl UnlockConditions { - /// - pub const COUNT_MAX: u8 = 7; - /// Creates a new [`UnlockConditions`] from a vec. pub fn from_vec(unlock_conditions: Vec) -> Result { let mut unlock_conditions = From a116dbfe013cdec4df0f5df84bf5e0dd7c3c7f96 Mon Sep 17 00:00:00 2001 From: Thoralf-M <46689931+Thoralf-M@users.noreply.github.com> Date: Mon, 27 Nov 2023 11:59:46 +0100 Subject: [PATCH 83/91] Update output metadata in bindings (#1685) Co-authored-by: Thibault Martinez --- .../models/api/output-metadata-response.ts | 24 +++++++------------ .../python/iota_sdk/types/output_metadata.py | 20 +++++++--------- 2 files changed, 16 insertions(+), 28 deletions(-) diff --git a/bindings/nodejs/lib/types/models/api/output-metadata-response.ts b/bindings/nodejs/lib/types/models/api/output-metadata-response.ts index 4c6e6b780c..34fbe51be8 100644 --- a/bindings/nodejs/lib/types/models/api/output-metadata-response.ts +++ b/bindings/nodejs/lib/types/models/api/output-metadata-response.ts @@ -15,35 +15,27 @@ export interface IOutputMetadataResponse { */ transactionId: HexEncodedString; /** - * The index for the output. + * The index of the output within the corresponding transaction. */ outputIndex: number; /** - * Is the output spent. + * Tells if the output is spent in a confirmed transaction or not. */ isSpent: boolean; /** - * The milestone index at which this output was spent. + * The current latest commitment id for which the request was made. */ - milestoneIndexSpent?: number; + latestCommitmentId: HexEncodedString; /** - * The milestone timestamp this output was spent. + * The commitment ID of the slot at which this output was spent. */ - milestoneTimestampSpent?: number; + commitmentIdSpent?: HexEncodedString; /** * The transaction this output was spent with. */ transactionIdSpent?: HexEncodedString; /** - * The milestone index at which this output was booked into the ledger. + * The commitment ID at which the output was included into the ledger. */ - milestoneIndexBooked: number; - /** - * The milestone timestamp this output was booked in the ledger. - */ - milestoneTimestampBooked: number; - /** - * The ledger index at which these output was available at. - */ - ledgerIndex: number; + includedCommitmentId?: HexEncodedString; } diff --git a/bindings/python/iota_sdk/types/output_metadata.py b/bindings/python/iota_sdk/types/output_metadata.py index 22cb4ac88f..d006cdc648 100644 --- a/bindings/python/iota_sdk/types/output_metadata.py +++ b/bindings/python/iota_sdk/types/output_metadata.py @@ -18,24 +18,20 @@ class OutputMetadata: block_id: The ID of the block in which the output appeared in. transaction_id: The ID of the transaction in which the output was created. output_index: The index of the output within the corresponding transaction. - is_spent: Whether the output is already spent. - milestone_index_booked: The index of the milestone which booked/created the output. - milestone_timestamp_booked: The timestamp of the milestone which booked/created the output. - ledger_index: The current ledger index. - milestone_index_spent: The index of the milestone which spent the output. - milestone_timestamp_spent: The timestamp of the milestone which spent the output. - transaction_id_spent: The ID of the transaction that spent the output. + is_spent: Tells if the output is spent in a confirmed transaction or not. + latest_commitment_id: The current latest commitment id for which the request was made. + commitment_id_spent: The commitment ID of the slot at which this output was spent. + transaction_id_spent: The transaction this output was spent with. + included_commitment_id: The commitment ID at which the output was included into the ledger. """ block_id: HexStr transaction_id: HexStr output_index: int is_spent: bool - milestone_index_booked: int - milestone_timestamp_booked: int - ledger_index: int - milestone_index_spent: Optional[int] = None - milestone_timestamp_spent: Optional[int] = None + latest_commitment_id: HexStr + commitment_id_spent: Optional[HexStr] = None transaction_id_spent: Optional[HexStr] = None + included_commitment_id: Optional[HexStr] = None @json From 94c5d350ad2fc702a81139355e57b1e66f3a2a5d Mon Sep 17 00:00:00 2001 From: Thibault Martinez Date: Mon, 27 Nov 2023 13:42:36 +0100 Subject: [PATCH 84/91] Core/Indexer API changes (#1672) * by-index -> by-slot * indexer changes * Renames * Nit --- sdk/src/client/node_api/core/routes.rs | 29 +++++++++++++---------- sdk/src/client/node_api/indexer/routes.rs | 20 ++++++++++------ sdk/src/types/api/core.rs | 2 +- sdk/src/types/block/output/mod.rs | 2 +- 4 files changed, 31 insertions(+), 22 deletions(-) diff --git a/sdk/src/client/node_api/core/routes.rs b/sdk/src/client/node_api/core/routes.rs index 96cb6374bd..55ade76161 100644 --- a/sdk/src/client/node_api/core/routes.rs +++ b/sdk/src/client/node_api/core/routes.rs @@ -21,6 +21,7 @@ use crate::{ ValidatorResponse, ValidatorsResponse, }, block::{ + address::ToBech32Ext, output::{dto::OutputDto, AccountId, Output, OutputId, OutputMetadata}, payload::signed_transaction::TransactionId, slot::{EpochIndex, SlotCommitment, SlotCommitmentId, SlotIndex}, @@ -86,9 +87,10 @@ impl ClientInner { } /// Checks if the account is ready to issue a block. - /// GET /api/core/v3/accounts/{accountId}/congestion + /// GET /api/core/v3/accounts/{bech32Address}/congestion pub async fn get_account_congestion(&self, account_id: &AccountId) -> Result { - let path = &format!("api/core/v3/accounts/{account_id}/congestion"); + let bech32_address = account_id.to_bech32(self.get_bech32_hrp().await?); + let path = &format!("api/core/v3/accounts/{bech32_address}/congestion"); self.get_request(path, None, false, false).await } @@ -147,9 +149,10 @@ impl ClientInner { } /// Return information about a validator. - /// GET /api/core/v3/validators/{accountId} + /// GET /api/core/v3/validators/{bech32Address} pub async fn get_validator(&self, account_id: &AccountId) -> Result { - let path = &format!("api/core/v3/validators/{account_id}"); + let bech32_address = account_id.to_bech32(self.get_bech32_hrp().await?); + let path = &format!("api/core/v3/validators/{bech32_address}"); self.get_request(path, None, false, false).await } @@ -306,25 +309,25 @@ impl ClientInner { } /// Finds a slot commitment by slot index and returns it as object. - /// GET /api/core/v3/commitments/by-index/{index} - pub async fn get_slot_commitment_by_index(&self, slot_index: SlotIndex) -> Result { - let path = &format!("api/core/v3/commitments/by-index/{slot_index}"); + /// GET /api/core/v3/commitments/by-slot/{slot} + pub async fn get_slot_commitment_by_slot(&self, slot_index: SlotIndex) -> Result { + let path = &format!("api/core/v3/commitments/by-slot/{slot_index}"); self.get_request(path, None, false, true).await } /// Finds a slot commitment by slot index and returns it as raw bytes. - /// GET /api/core/v3/commitments/by-index/{index} - pub async fn get_slot_commitment_by_index_raw(&self, slot_index: SlotIndex) -> Result> { - let path = &format!("api/core/v3/commitments/by-index/{slot_index}"); + /// GET /api/core/v3/commitments/by-slot/{slot} + pub async fn get_slot_commitment_by_slot_raw(&self, slot_index: SlotIndex) -> Result> { + let path = &format!("api/core/v3/commitments/by-slot/{slot_index}"); self.get_request_bytes(path, None).await } /// Get all UTXO changes of a given slot by its index. - /// GET /api/core/v3/commitments/by-index/{index}/utxo-changes - pub async fn get_utxo_changes_by_slot_index(&self, slot_index: SlotIndex) -> Result { - let path = &format!("api/core/v3/commitments/by-index/{slot_index}/utxo-changes"); + /// GET /api/core/v3/commitments/by-slot/{slot}/utxo-changes + pub async fn get_utxo_changes_by_slot(&self, slot_index: SlotIndex) -> Result { + let path = &format!("api/core/v3/commitments/by-slot/{slot_index}/utxo-changes"); self.get_request(path, None, false, false).await } diff --git a/sdk/src/client/node_api/indexer/routes.rs b/sdk/src/client/node_api/indexer/routes.rs index 10df56dabd..0e69dd6197 100644 --- a/sdk/src/client/node_api/indexer/routes.rs +++ b/sdk/src/client/node_api/indexer/routes.rs @@ -14,7 +14,10 @@ use crate::{ }, types::{ api::plugins::indexer::OutputIdsResponse, - block::output::{AccountId, AnchorId, DelegationId, FoundryId, NftId, OutputId}, + block::{ + address::ToBech32Ext, + output::{AccountId, AnchorId, DelegationId, FoundryId, NftId, OutputId}, + }, }, }; @@ -53,9 +56,10 @@ impl ClientInner { } /// Get account output by its accountID. - /// api/indexer/v2/outputs/account/:{AccountId} + /// api/indexer/v2/outputs/account/{bech32Address} pub async fn account_output_id(&self, account_id: AccountId) -> Result { - let route = format!("api/indexer/v2/outputs/account/{account_id}"); + let bech32_address = account_id.to_bech32(self.get_bech32_hrp().await?); + let route = format!("api/indexer/v2/outputs/account/{bech32_address}"); Ok(*(self .get_output_ids(&route, AccountOutputQueryParameters::new(), true, false) @@ -75,9 +79,10 @@ impl ClientInner { } /// Get anchor output by its anchorID. - /// api/indexer/v2/outputs/anchor/:{AnchorId} + /// api/indexer/v2/outputs/anchor/{bech32Address} pub async fn anchor_output_id(&self, anchor_id: AnchorId) -> Result { - let route = format!("api/indexer/v2/outputs/anchor/{anchor_id}"); + let bech32_address = anchor_id.to_bech32(self.get_bech32_hrp().await?); + let route = format!("api/indexer/v2/outputs/anchor/{bech32_address}"); Ok(*(self .get_output_ids(&route, AnchorOutputQueryParameters::new(), true, false) @@ -146,9 +151,10 @@ impl ClientInner { } /// Get NFT output by its nftID. - /// api/indexer/v2/outputs/nft/:{NftId} + /// api/indexer/v2/outputs/nft/{bech32Address} pub async fn nft_output_id(&self, nft_id: NftId) -> Result { - let route = format!("api/indexer/v2/outputs/nft/{nft_id}"); + let bech32_address = nft_id.to_bech32(self.get_bech32_hrp().await?); + let route = format!("api/indexer/v2/outputs/nft/{bech32_address}"); Ok(*(self .get_output_ids(&route, NftOutputQueryParameters::new(), true, false) diff --git a/sdk/src/types/api/core.rs b/sdk/src/types/api/core.rs index 1a0648cf53..647ddf24ea 100644 --- a/sdk/src/types/api/core.rs +++ b/sdk/src/types/api/core.rs @@ -496,7 +496,7 @@ pub struct RoutesResponse { /// Response of /// - GET /api/core/v3/commitments/{commitmentId}/utxo-changes -/// - GET /api/core/v3/commitments/by-index/{index}/utxo-changes +/// - GET /api/core/v3/commitments/by-slot/{slot}/utxo-changes /// Returns all UTXO changes that happened at a specific slot. #[derive(Clone, Debug, Eq, PartialEq, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] diff --git a/sdk/src/types/block/output/mod.rs b/sdk/src/types/block/output/mod.rs index ee4640877e..7249ba2393 100644 --- a/sdk/src/types/block/output/mod.rs +++ b/sdk/src/types/block/output/mod.rs @@ -431,7 +431,7 @@ impl MinimumOutputAmount for Output {} pub trait MinimumOutputAmount: StorageScore { /// Computes the minimum amount of this output given [`StorageScoreParameters`]. fn minimum_amount(&self, params: StorageScoreParameters) -> u64 { - params.storage_cost() * self.storage_score(params) + self.storage_score(params) * params.storage_cost() } } From e56c6af3b85e0f46275a84575abdb390a41ff549 Mon Sep 17 00:00:00 2001 From: /alex/ Date: Mon, 27 Nov 2023 17:35:00 +0100 Subject: [PATCH 85/91] Add delegation to balance (#1456) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * add fields * qualify + format * include delegation outputs in balance computation * Update bindings * Nits * Update bindings/nodejs/lib/types/wallet/wallet.ts --------- Co-authored-by: Thoralf Müller Co-authored-by: Thibault Martinez Co-authored-by: Thoralf-M <46689931+Thoralf-M@users.noreply.github.com> --- bindings/nodejs/lib/types/wallet/wallet.ts | 12 +- bindings/python/iota_sdk/types/balance.py | 16 ++- sdk/src/wallet/operations/balance.rs | 32 +++-- sdk/src/wallet/types/balance.rs | 15 ++- sdk/tests/wallet/balance.rs | 150 +++++++++++++-------- 5 files changed, 148 insertions(+), 77 deletions(-) diff --git a/bindings/nodejs/lib/types/wallet/wallet.ts b/bindings/nodejs/lib/types/wallet/wallet.ts index 85e2d77d92..bcf3141e93 100644 --- a/bindings/nodejs/lib/types/wallet/wallet.ts +++ b/bindings/nodejs/lib/types/wallet/wallet.ts @@ -31,12 +31,14 @@ export interface Balance { requiredStorageDeposit: RequiredStorageDeposit; /** The balance of the native tokens */ nativeTokens: NativeTokenBalance[]; - /** Nft outputs */ - nfts: string[]; /** Account outputs */ accounts: string[]; /** Foundry outputs */ foundries: string[]; + /** Nft outputs */ + nfts: string[]; + /** Delegation outputs */ + delegations: string[]; /** * Outputs with multiple unlock conditions and if they can currently be spent or not. If there is a * TimelockUnlockCondition or ExpirationUnlockCondition this can change at any time @@ -56,14 +58,16 @@ export interface BaseCoinBalance { /** The required storage deposit per output type */ export interface RequiredStorageDeposit { - /** The required amount for Alias outputs. */ - account: u64; /** The required amount for Basic outputs. */ basic: u64; + /** The required amount for Account outputs. */ + account: u64; /** The required amount for Foundry outputs. */ foundry: u64; /** The required amount for NFT outputs. */ nft: u64; + /** The required amount for Delegation outputs. */ + delegation: u64; } /** The balance of a native token */ diff --git a/bindings/python/iota_sdk/types/balance.py b/bindings/python/iota_sdk/types/balance.py index 791dbb96c3..27785e4155 100644 --- a/bindings/python/iota_sdk/types/balance.py +++ b/bindings/python/iota_sdk/types/balance.py @@ -31,15 +31,16 @@ class RequiredStorageDeposit: """Required storage deposit for the outputs in the account. Attributes: - account: The required amount for account outputs. basic: The required amount for basic outputs. + account: The required amount for account outputs. foundry: The required amount for foundry outputs. nft: The required amount for nft outputs. + delegation: The required amount for delegation outputs. """ - account: int = field(metadata=config( + basic: int = field(metadata=config( encoder=str )) - basic: int = field(metadata=config( + account: int = field(metadata=config( encoder=str )) foundry: int = field(metadata=config( @@ -48,6 +49,9 @@ class RequiredStorageDeposit: nft: int = field(metadata=config( encoder=str )) + delegation: int = field(metadata=config( + encoder=str + )) @json @@ -82,15 +86,17 @@ class Balance: base_coin: The base coin balance. required_storage_deposit: The required storage deposit. native_tokens: The balances of all native tokens. - nfts: All owned NFTs. accounts: All owned accounts. foundries: All owned foundries. + nfts: All owned NFTs. + delegations: All owned delegation outputs. potentially_locked_outputs: A list of potentially locked outputs. """ base_coin: BaseCoinBalance required_storage_deposit: RequiredStorageDeposit native_tokens: List[NativeTokensBalance] - nfts: List[HexStr] accounts: List[HexStr] foundries: List[HexStr] + nfts: List[HexStr] + delegations: List[HexStr] potentially_locked_outputs: dict[HexStr, bool] diff --git a/sdk/src/wallet/operations/balance.rs b/sdk/src/wallet/operations/balance.rs index 707c1d448e..d12a515332 100644 --- a/sdk/src/wallet/operations/balance.rs +++ b/sdk/src/wallet/operations/balance.rs @@ -62,24 +62,24 @@ where let output = &output_data.output; let storage_cost = output.minimum_amount(storage_score_params); - // Add account and foundry outputs here because they can't have a + // Add account, foundry, and delegation outputs here because they can't have a // [`StorageDepositReturnUnlockCondition`] or time related unlock conditions match output { - Output::Account(output) => { + Output::Account(account) => { // Add amount - balance.base_coin.total += output.amount(); + balance.base_coin.total += account.amount(); // Add storage deposit balance.required_storage_deposit.account += storage_cost; if !wallet_data.locked_outputs.contains(output_id) { total_storage_cost += storage_cost; } - let account_id = output.account_id_non_null(output_id); + let account_id = account.account_id_non_null(output_id); balance.accounts.push(account_id); } - Output::Foundry(output) => { + Output::Foundry(foundry) => { // Add amount - balance.base_coin.total += output.amount(); + balance.base_coin.total += foundry.amount(); // Add storage deposit balance.required_storage_deposit.foundry += storage_cost; if !wallet_data.locked_outputs.contains(output_id) { @@ -91,7 +91,19 @@ where total_native_tokens.add_native_token(*native_token)?; } - balance.foundries.push(output.id()); + balance.foundries.push(foundry.id()); + } + Output::Delegation(delegation) => { + // Add amount + balance.base_coin.total += delegation.amount(); + // Add storage deposit + balance.required_storage_deposit.delegation += storage_cost; + if !wallet_data.locked_outputs.contains(output_id) { + total_storage_cost += storage_cost; + } + + let delegation_id = delegation.delegation_id_non_null(output_id); + balance.delegations.push(delegation_id); } _ => { // If there is only an [AddressUnlockCondition], then we can spend the output at any time @@ -102,8 +114,8 @@ where .as_ref() { // add nft_id for nft outputs - if let Output::Nft(output) = &output { - let nft_id = output.nft_id_non_null(output_id); + if let Output::Nft(nft) = &output { + let nft_id = nft.nft_id_non_null(output_id); balance.nfts.push(nft_id); } @@ -223,9 +235,7 @@ where } } } - // } } - // } self.finish( balance, diff --git a/sdk/src/wallet/types/balance.rs b/sdk/src/wallet/types/balance.rs index 180ae01bd3..6b068788f2 100644 --- a/sdk/src/wallet/types/balance.rs +++ b/sdk/src/wallet/types/balance.rs @@ -8,7 +8,7 @@ use primitive_types::U256; use serde::{Deserialize, Serialize}; use crate::{ - types::block::output::{feature::MetadataFeature, AccountId, FoundryId, NftId, OutputId, TokenId}, + types::block::output::{feature::MetadataFeature, AccountId, DelegationId, FoundryId, NftId, OutputId, TokenId}, utils::serde::string, }; @@ -30,6 +30,8 @@ pub struct Balance { pub(crate) foundries: Vec, /// Nfts pub(crate) nfts: Vec, + /// Delegations + pub(crate) delegations: Vec, /// Outputs with multiple unlock conditions and if they can currently be spent or not. If there is a /// [`TimelockUnlockCondition`](crate::types::block::output::unlock_condition::TimelockUnlockCondition) or /// [`ExpirationUnlockCondition`](crate::types::block::output::unlock_condition::ExpirationUnlockCondition) this @@ -57,6 +59,7 @@ impl std::ops::AddAssign for Balance { self.accounts.extend(rhs.accounts); self.foundries.extend(rhs.foundries); self.nfts.extend(rhs.nfts); + self.delegations.extend(rhs.delegations); } } @@ -99,6 +102,8 @@ pub struct RequiredStorageDeposit { pub(crate) foundry: u64, #[serde(with = "crate::utils::serde::string")] pub(crate) nft: u64, + #[serde(with = "crate::utils::serde::string")] + pub(crate) delegation: u64, } impl std::ops::AddAssign for RequiredStorageDeposit { @@ -107,6 +112,7 @@ impl std::ops::AddAssign for RequiredStorageDeposit { self.account += rhs.account; self.foundry += rhs.foundry; self.nft += rhs.nft; + self.delegation += rhs.delegation; } } @@ -152,7 +158,7 @@ impl std::ops::AddAssign for NativeTokensBalance { #[cfg(feature = "rand")] impl Balance { - pub fn rand_mock() -> Self { + pub fn rand() -> Self { use rand::Rng; use crate::types::block::rand::bytes::rand_bytes_array; @@ -199,6 +205,9 @@ impl Balance { let foundries = std::iter::repeat_with(|| FoundryId::from(rand_bytes_array())) .take(rand::thread_rng().gen_range(0..10)) .collect::>(); + let delegations = std::iter::repeat_with(|| DelegationId::from(rand_bytes_array())) + .take(rand::thread_rng().gen_range(0..10)) + .collect::>(); Self { base_coin: BaseCoinBalance { @@ -212,11 +221,13 @@ impl Balance { account: total / 16, foundry: total / 4, nft: total / 2, + delegation: total / 16, }, native_tokens, accounts, foundries, nfts, + delegations, ..Default::default() } } diff --git a/sdk/tests/wallet/balance.rs b/sdk/tests/wallet/balance.rs index bc926936e7..6cedf7c8a1 100644 --- a/sdk/tests/wallet/balance.rs +++ b/sdk/tests/wallet/balance.rs @@ -14,76 +14,116 @@ use pretty_assertions::assert_eq; use crate::wallet::common::{make_wallet, request_funds, setup, tear_down}; #[test] -fn balance_add_assign() { +fn rand_balance_add_assign() { use iota_sdk::U256; - let mut balance1 = Balance::rand_mock(); - let total1 = balance1.base_coin().total(); - let available1 = balance1.base_coin().available(); - #[cfg(feature = "participation")] - let voting_power1 = balance1.base_coin().voting_power(); - - let sdr_account_1 = balance1.required_storage_deposit().account(); - let sdr_basic1 = balance1.required_storage_deposit().basic(); - let sdr_foundry1 = balance1.required_storage_deposit().foundry(); - let sdr_nft1 = balance1.required_storage_deposit().nft(); + let old_balance = Balance::rand(); + let add_balance = Balance::rand(); - let native_tokens1 = balance1.native_tokens().clone(); - let num_accounts_1 = balance1.accounts().len(); - let num_foundries1 = balance1.foundries().len(); - let num_nfts1 = balance1.nfts().len(); - - let balance2 = Balance::rand_mock(); - let total2 = balance2.base_coin().total(); - let available2 = balance2.base_coin().available(); - #[cfg(feature = "participation")] - let voting_power2 = balance2.base_coin().voting_power(); + let mut new_balance = old_balance.clone(); + assert_eq!(new_balance, old_balance); - let sdr_account_2 = balance2.required_storage_deposit().account(); - let sdr_basic2 = balance2.required_storage_deposit().basic(); - let sdr_foundry2 = balance2.required_storage_deposit().foundry(); - let sdr_nft2 = balance2.required_storage_deposit().nft(); + let rhs_balance = add_balance.clone(); + assert_eq!(rhs_balance, add_balance); - let native_tokens2 = balance2.native_tokens().clone(); - let num_accounts_2 = balance2.accounts().len(); - let num_foundries2 = balance2.foundries().len(); - let num_nfts2 = balance2.nfts().len(); + new_balance += rhs_balance; - balance1 += balance2; - - assert_eq!(balance1.base_coin().total(), total1 + total2); - assert_eq!(balance1.base_coin().available(), available1 + available2); + // Base Coin + assert_eq!( + new_balance.base_coin().total(), + old_balance.base_coin().total() + add_balance.base_coin().total() + ); + assert_eq!( + new_balance.base_coin().available(), + old_balance.base_coin().available() + add_balance.base_coin().available() + ); #[cfg(feature = "participation")] - assert_eq!(balance1.base_coin().voting_power(), voting_power1 + voting_power2); + assert_eq!( + new_balance.base_coin().voting_power(), + old_balance.base_coin().voting_power() + add_balance.base_coin().voting_power() + ); + // Required Storage Deposit assert_eq!( - balance1.required_storage_deposit().account(), - sdr_account_1 + sdr_account_2 + new_balance.required_storage_deposit().basic(), + old_balance.required_storage_deposit().basic() + add_balance.required_storage_deposit().basic() ); - assert_eq!(balance1.required_storage_deposit().basic(), sdr_basic1 + sdr_basic2); assert_eq!( - balance1.required_storage_deposit().foundry(), - sdr_foundry1 + sdr_foundry2 + new_balance.required_storage_deposit().account(), + old_balance.required_storage_deposit().account() + add_balance.required_storage_deposit().account() + ); + assert_eq!( + new_balance.required_storage_deposit().foundry(), + old_balance.required_storage_deposit().foundry() + add_balance.required_storage_deposit().foundry() + ); + assert_eq!( + new_balance.required_storage_deposit().nft(), + old_balance.required_storage_deposit().nft() + add_balance.required_storage_deposit().nft() + ); + assert_eq!( + new_balance.required_storage_deposit().delegation(), + old_balance.required_storage_deposit().delegation() + add_balance.required_storage_deposit().delegation() ); - assert_eq!(balance1.required_storage_deposit().nft(), sdr_nft1 + sdr_nft2); - - assert_eq!(balance1.accounts().len(), num_accounts_1 + num_accounts_2); - assert_eq!(balance1.foundries().len(), num_foundries1 + num_foundries2); - assert_eq!(balance1.nfts().len(), num_nfts1 + num_nfts2); - let mut expected = std::collections::HashMap::new(); - for nt in native_tokens1.iter().chain(native_tokens2.iter()) { - let v = expected - .entry(nt.token_id()) + // Assets + assert_eq!( + new_balance.accounts(), + &old_balance + .accounts() + .iter() + .chain(add_balance.accounts().iter()) + .cloned() + .collect::>() + ); + assert_eq!( + new_balance.foundries(), + &old_balance + .foundries() + .iter() + .chain(add_balance.foundries().iter()) + .cloned() + .collect::>() + ); + assert_eq!( + new_balance.nfts(), + &old_balance + .nfts() + .iter() + .chain(add_balance.nfts().iter()) + .cloned() + .collect::>() + ); + assert_eq!( + new_balance.delegations(), + &old_balance + .delegations() + .iter() + .chain(add_balance.delegations().iter()) + .cloned() + .collect::>() + ); + let mut expected_native_tokens = std::collections::HashMap::new(); + for native_token in old_balance + .native_tokens() + .iter() + .chain(add_balance.native_tokens().iter()) + { + let v = expected_native_tokens + .entry(native_token.token_id()) .or_insert((U256::default(), U256::default())); - v.0 += nt.total(); - v.1 += nt.available(); + v.0 += native_token.total(); + v.1 += native_token.available(); } - - assert_eq!(balance1.native_tokens().len(), expected.len()); - for nt in balance1.native_tokens().iter() { - assert_eq!(nt.total(), expected.get(nt.token_id()).unwrap().0); - assert_eq!(nt.available(), expected.get(nt.token_id()).unwrap().1); + assert_eq!(new_balance.native_tokens().len(), expected_native_tokens.len()); + for native_token in new_balance.native_tokens().iter() { + assert_eq!( + native_token.total(), + expected_native_tokens.get(native_token.token_id()).unwrap().0 + ); + assert_eq!( + native_token.available(), + expected_native_tokens.get(native_token.token_id()).unwrap().1 + ); } } From e9a33ef2948bc6b1ad7b23e2a40deaf7c87ae908 Mon Sep 17 00:00:00 2001 From: Thibault Martinez Date: Mon, 27 Nov 2023 17:48:05 +0100 Subject: [PATCH 86/91] Fix ValidatorResponse (#1698) * Fix ValidatorResponse * Fmt --- sdk/src/types/api/core.rs | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/sdk/src/types/api/core.rs b/sdk/src/types/api/core.rs index 647ddf24ea..031aaa806d 100644 --- a/sdk/src/types/api/core.rs +++ b/sdk/src/types/api/core.rs @@ -12,9 +12,10 @@ use serde::{Deserialize, Serialize}; use crate::{ types::block::{ + address::Bech32Address, core::Parents, output::{dto::OutputDto, AccountId, OutputId, OutputMetadata, OutputWithMetadata}, - protocol::ProtocolParameters, + protocol::{ProtocolParameters, ProtocolParametersHash}, semantic::TransactionFailureReason, slot::{EpochIndex, SlotCommitment, SlotCommitmentId, SlotIndex}, BlockId, @@ -241,10 +242,10 @@ pub struct CommitteeMember { #[derive(Clone, Debug, Eq, PartialEq, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct ValidatorResponse { - /// The account identifier of the validator - account_id: AccountId, + /// Account address of the validator. + address: Bech32Address, /// The epoch index until which the validator registered to stake. - staking_end_epoch: EpochIndex, + staking_epoch_end: EpochIndex, /// The total stake of the pool, including delegators. #[serde(with = "string")] pool_stake: u64, @@ -258,6 +259,8 @@ pub struct ValidatorResponse { active: bool, /// The latest protocol version the validator supported. latest_supported_protocol_version: u8, + // The protocol hash of the latest supported protocol of the validator. + latest_supported_protocol_hash: ProtocolParametersHash, } /// Response of GET /api/core/v3/blocks/issuance From fd80e08a9a902db5f87c3cb5b97a328828adee2c Mon Sep 17 00:00:00 2001 From: DaughterOfMars Date: Mon, 27 Nov 2023 12:23:15 -0500 Subject: [PATCH 87/91] Default `omitempty` values (#1697) * default omitempty values * update bindings --------- Co-authored-by: Thibault Martinez --- bindings/nodejs/lib/types/block/core/basic.ts | 4 ++-- bindings/nodejs/lib/types/block/core/validation.ts | 4 ++-- .../types/block/payload/signed_transaction/transaction.ts | 4 ++-- bindings/python/iota_sdk/types/block/basic.py | 4 ++-- bindings/python/iota_sdk/types/block/validation.py | 6 +++--- bindings/python/iota_sdk/types/transaction.py | 4 ++-- sdk/src/types/block/core/basic.rs | 2 ++ sdk/src/types/block/core/validation.rs | 2 ++ .../types/block/payload/signed_transaction/transaction.rs | 2 ++ 9 files changed, 19 insertions(+), 13 deletions(-) diff --git a/bindings/nodejs/lib/types/block/core/basic.ts b/bindings/nodejs/lib/types/block/core/basic.ts index 6ac4ade86a..3019e4dfd7 100644 --- a/bindings/nodejs/lib/types/block/core/basic.ts +++ b/bindings/nodejs/lib/types/block/core/basic.ts @@ -18,11 +18,11 @@ export class BasicBlock extends Block { /** * Blocks that are weakly directly approved. */ - readonly weakParents!: WeakParents; + readonly weakParents?: WeakParents; /** * Blocks that are directly referenced to adjust opinion. */ - readonly shallowLikeParents!: ShallowLikeParents; + readonly shallowLikeParents?: ShallowLikeParents; /** * The payload contents. */ diff --git a/bindings/nodejs/lib/types/block/core/validation.ts b/bindings/nodejs/lib/types/block/core/validation.ts index 7a00fc87f6..58fc769f0c 100644 --- a/bindings/nodejs/lib/types/block/core/validation.ts +++ b/bindings/nodejs/lib/types/block/core/validation.ts @@ -20,11 +20,11 @@ export class ValidationBlock extends Block { /** * Blocks that are weakly directly approved. */ - readonly weakParents!: WeakParents; + readonly weakParents?: WeakParents; /** * Blocks that are directly referenced to adjust opinion. */ - readonly shallowLikeParents!: ShallowLikeParents; + readonly shallowLikeParents?: ShallowLikeParents; /** * The highest supported protocol version the issuer of this block supports. diff --git a/bindings/nodejs/lib/types/block/payload/signed_transaction/transaction.ts b/bindings/nodejs/lib/types/block/payload/signed_transaction/transaction.ts index 0ab9c74689..a4680cbfaf 100644 --- a/bindings/nodejs/lib/types/block/payload/signed_transaction/transaction.ts +++ b/bindings/nodejs/lib/types/block/payload/signed_transaction/transaction.ts @@ -35,14 +35,14 @@ class Transaction { @Type(() => Input, { discriminator: ContextInputDiscriminator, }) - readonly contextInputs: ContextInput[]; + readonly contextInputs?: ContextInput[]; @Type(() => Input, { discriminator: InputDiscriminator, }) readonly inputs: Input[]; - readonly allotments: ManaAllotment[]; + readonly allotments?: ManaAllotment[]; private capabilities?: HexEncodedString; diff --git a/bindings/python/iota_sdk/types/block/basic.py b/bindings/python/iota_sdk/types/block/basic.py index 522f5c3588..6300ad5399 100644 --- a/bindings/python/iota_sdk/types/block/basic.py +++ b/bindings/python/iota_sdk/types/block/basic.py @@ -24,11 +24,11 @@ class BasicBlock: payload: The optional payload of this block. """ strong_parents: List[HexStr] - weak_parents: List[HexStr] - shallow_like_parents: List[HexStr] max_burned_mana: int = field(metadata=config( encoder=str )) + weak_parents: Optional[List[HexStr]] = None + shallow_like_parents: Optional[List[HexStr]] = None payload: Optional[Payload] = None type: int = field( default_factory=lambda: int(BlockType.Basic), diff --git a/bindings/python/iota_sdk/types/block/validation.py b/bindings/python/iota_sdk/types/block/validation.py index 9f9c070732..3cee5b0cde 100644 --- a/bindings/python/iota_sdk/types/block/validation.py +++ b/bindings/python/iota_sdk/types/block/validation.py @@ -3,7 +3,7 @@ from __future__ import annotations from dataclasses import dataclass, field -from typing import List +from typing import List, Optional from iota_sdk.types.block.block import BlockType from iota_sdk.types.common import HexStr, json @@ -23,10 +23,10 @@ class ValidationBlock: protocol_parameters_hash: The hash of the protocol parameters for the Highest Supported Version. """ strong_parents: List[HexStr] - weak_parents: List[HexStr] - shallow_like_parents: List[HexStr] highest_supported_version: int protocol_parameters_hash: HexStr + weak_parents: Optional[List[HexStr]] = None + shallow_like_parents: Optional[List[HexStr]] = None type: int = field( default_factory=lambda: int(BlockType.Validation), init=False) diff --git a/bindings/python/iota_sdk/types/transaction.py b/bindings/python/iota_sdk/types/transaction.py index 23d6304432..ed7db9fe23 100644 --- a/bindings/python/iota_sdk/types/transaction.py +++ b/bindings/python/iota_sdk/types/transaction.py @@ -35,11 +35,11 @@ class Transaction: """ network_id: str creation_slot: SlotIndex - context_inputs: List[ContextInput] inputs: List[UtxoInput] - allotments: List[ManaAllotment] capabilities: Optional[HexStr] = field(default=None, init=False) outputs: List[Output] + context_inputs: Optional[List[ContextInput]] = None + allotments: Optional[List[ManaAllotment]] = None payload: Optional[Payload] = None def with_capabilities(self, capabilities: bytes): diff --git a/sdk/src/types/block/core/basic.rs b/sdk/src/types/block/core/basic.rs index 8a7d63f66d..5ff0a65743 100644 --- a/sdk/src/types/block/core/basic.rs +++ b/sdk/src/types/block/core/basic.rs @@ -198,7 +198,9 @@ pub(crate) mod dto { #[serde(rename = "type")] pub kind: u8, pub strong_parents: BTreeSet, + #[serde(default, skip_serializing_if = "BTreeSet::is_empty")] pub weak_parents: BTreeSet, + #[serde(default, skip_serializing_if = "BTreeSet::is_empty")] pub shallow_like_parents: BTreeSet, #[serde(default, skip_serializing_if = "Option::is_none")] pub payload: Option, diff --git a/sdk/src/types/block/core/validation.rs b/sdk/src/types/block/core/validation.rs index d96d4c9af1..420ac0dea8 100644 --- a/sdk/src/types/block/core/validation.rs +++ b/sdk/src/types/block/core/validation.rs @@ -213,7 +213,9 @@ pub(crate) mod dto { #[serde(rename = "type")] pub kind: u8, pub strong_parents: BTreeSet, + #[serde(default, skip_serializing_if = "BTreeSet::is_empty")] pub weak_parents: BTreeSet, + #[serde(default, skip_serializing_if = "BTreeSet::is_empty")] pub shallow_like_parents: BTreeSet, pub highest_supported_version: u8, pub protocol_parameters_hash: ProtocolParametersHash, diff --git a/sdk/src/types/block/payload/signed_transaction/transaction.rs b/sdk/src/types/block/payload/signed_transaction/transaction.rs index c9e6842add..ff5c713c5b 100644 --- a/sdk/src/types/block/payload/signed_transaction/transaction.rs +++ b/sdk/src/types/block/payload/signed_transaction/transaction.rs @@ -545,8 +545,10 @@ pub(crate) mod dto { pub struct TransactionDto { pub network_id: String, pub creation_slot: SlotIndex, + #[serde(default, skip_serializing_if = "Vec::is_empty")] pub context_inputs: Vec, pub inputs: Vec, + #[serde(default, skip_serializing_if = "Vec::is_empty")] pub allotments: Vec, #[serde(default, skip_serializing_if = "TransactionCapabilities::is_none")] pub capabilities: TransactionCapabilities, From 0a0413acf5ac7132353b2c1a1c3c0922636bbf79 Mon Sep 17 00:00:00 2001 From: Thibault Martinez Date: Mon, 27 Nov 2023 18:28:57 +0100 Subject: [PATCH 88/91] Fix CommitteeResponse (#1699) --- sdk/src/types/api/core.rs | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/sdk/src/types/api/core.rs b/sdk/src/types/api/core.rs index 031aaa806d..d8449f01bc 100644 --- a/sdk/src/types/api/core.rs +++ b/sdk/src/types/api/core.rs @@ -209,24 +209,24 @@ pub struct ManaRewardsResponse { #[derive(Clone, Debug, Eq, PartialEq, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct CommitteeResponse { - /// The epoch index of the committee. - pub epoch_index: EpochIndex, + /// The validators of the committee. + pub committee: Box<[CommitteeMember]>, /// The total amount of delegated and staked IOTA coins in the selected committee. #[serde(with = "string")] pub total_stake: u64, /// The total amount of staked IOTA coins in the selected committee. #[serde(with = "string")] pub total_validator_stake: u64, - /// The validators of the committee. - pub committee: Box<[CommitteeMember]>, + /// The epoch index of the committee. + pub epoch: EpochIndex, } /// Returns information of a committee member. #[derive(Clone, Debug, Eq, PartialEq, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct CommitteeMember { - /// The account identifier of the validator - pub account_id: AccountId, + /// Account address of the validator. + pub address: Bech32Address, /// The total stake of the pool, including delegators. #[serde(with = "string")] pub pool_stake: u64, From cdde4cbdc1939f189921827ba198e8a7eb9e84bd Mon Sep 17 00:00:00 2001 From: Thibault Martinez Date: Tue, 28 Nov 2023 08:50:27 +0100 Subject: [PATCH 89/91] Disallow ImplicitAddress in UCs (#1703) --- .../client/output/build_basic_output.rs | 2 +- .../how_tos/outputs/unlock_conditions.rs | 2 +- sdk/src/types/block/output/basic.rs | 4 ++-- sdk/src/types/block/output/nft.rs | 4 ++-- .../output/unlock_condition/expiration.rs | 14 ++++++++++- .../storage_deposit_return.rs | 24 +++++++++++++------ .../operations/transaction/prepare_output.rs | 6 ++--- sdk/tests/client/mod.rs | 4 ++-- 8 files changed, 41 insertions(+), 19 deletions(-) diff --git a/sdk/examples/client/output/build_basic_output.rs b/sdk/examples/client/output/build_basic_output.rs index c7ef6391ac..f9bea59fd0 100644 --- a/sdk/examples/client/output/build_basic_output.rs +++ b/sdk/examples/client/output/build_basic_output.rs @@ -49,7 +49,7 @@ async fn main() -> Result<()> { // with storage deposit return basic_output_builder .clone() - .add_unlock_condition(StorageDepositReturnUnlockCondition::new(address.clone(), 1_000_000)) + .add_unlock_condition(StorageDepositReturnUnlockCondition::new(address.clone(), 1_000_000)?) .finish_output()?, // with expiration basic_output_builder diff --git a/sdk/examples/how_tos/outputs/unlock_conditions.rs b/sdk/examples/how_tos/outputs/unlock_conditions.rs index 94cb8ce779..a84653621a 100644 --- a/sdk/examples/how_tos/outputs/unlock_conditions.rs +++ b/sdk/examples/how_tos/outputs/unlock_conditions.rs @@ -50,7 +50,7 @@ async fn main() -> Result<()> { // with storage deposit return unlock condition basic_output_builder .clone() - .add_unlock_condition(StorageDepositReturnUnlockCondition::new(address.clone(), 1000000)) + .add_unlock_condition(StorageDepositReturnUnlockCondition::new(address.clone(), 1000000)?) .finish_output()?, // with timeout unlock condition basic_output_builder diff --git a/sdk/src/types/block/output/basic.rs b/sdk/src/types/block/output/basic.rs index 05fd6ee74b..0d0cb14e6d 100644 --- a/sdk/src/types/block/output/basic.rs +++ b/sdk/src/types/block/output/basic.rs @@ -160,7 +160,7 @@ impl BasicOutputBuilder { .amount(); // Add a temporary storage deposit unlock condition so the new storage requirement can be calculated self = - self.add_unlock_condition(StorageDepositReturnUnlockCondition::new(return_address.clone(), 1)); + self.add_unlock_condition(StorageDepositReturnUnlockCondition::new(return_address.clone(), 1)?); // Get the min amount of the output with the added storage deposit return unlock condition let min_amount_with_sdruc = self.clone().finish()?.minimum_amount(params); // If the return storage cost and amount are less than the required min @@ -177,7 +177,7 @@ impl BasicOutputBuilder { .replace_unlock_condition(StorageDepositReturnUnlockCondition::new( return_address, sdruc_amount, - )) + )?) } else { self } diff --git a/sdk/src/types/block/output/nft.rs b/sdk/src/types/block/output/nft.rs index f8462da2a9..8b4c2504fe 100644 --- a/sdk/src/types/block/output/nft.rs +++ b/sdk/src/types/block/output/nft.rs @@ -224,7 +224,7 @@ impl NftOutputBuilder { .amount(); // Add a temporary storage deposit unlock condition so the new storage requirement can be calculated self = - self.add_unlock_condition(StorageDepositReturnUnlockCondition::new(return_address.clone(), 1)); + self.add_unlock_condition(StorageDepositReturnUnlockCondition::new(return_address.clone(), 1)?); // Get the min amount of the output with the added storage deposit return unlock condition let min_amount_with_sdruc = self.clone().finish()?.minimum_amount(params); // If the return storage cost and amount are less than the required min @@ -241,7 +241,7 @@ impl NftOutputBuilder { .replace_unlock_condition(StorageDepositReturnUnlockCondition::new( return_address, sdruc_amount, - )) + )?) } else { self } diff --git a/sdk/src/types/block/output/unlock_condition/expiration.rs b/sdk/src/types/block/output/unlock_condition/expiration.rs index e1a4362867..5cb4b1a539 100644 --- a/sdk/src/types/block/output/unlock_condition/expiration.rs +++ b/sdk/src/types/block/output/unlock_condition/expiration.rs @@ -15,6 +15,7 @@ use crate::types::block::{ #[derive(Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash, From, packable::Packable)] pub struct ExpirationUnlockCondition { // The address that can unlock the expired output. + #[packable(verify_with = verify_return_address)] return_address: Address, /// The slot index that determines when the associated output expires. #[packable(verify_with = verify_slot_index)] @@ -29,11 +30,13 @@ impl ExpirationUnlockCondition { #[inline(always)] pub fn new(return_address: impl Into
, slot_index: impl Into) -> Result { let slot_index = slot_index.into(); + let return_address = return_address.into(); verify_slot_index::(&slot_index)?; + verify_return_address::(&return_address)?; Ok(Self { - return_address: return_address.into(), + return_address, slot_index, }) } @@ -66,6 +69,15 @@ impl StorageScore for ExpirationUnlockCondition { } } +#[inline] +fn verify_return_address(return_address: &Address) -> Result<(), Error> { + if VERIFY && return_address.is_implicit_account_creation() { + Err(Error::InvalidAddressKind(return_address.kind())) + } else { + Ok(()) + } +} + #[inline] fn verify_slot_index(slot_index: &SlotIndex) -> Result<(), Error> { if VERIFY && *slot_index == 0 { diff --git a/sdk/src/types/block/output/unlock_condition/storage_deposit_return.rs b/sdk/src/types/block/output/unlock_condition/storage_deposit_return.rs index 6824e728ec..abe396db4a 100644 --- a/sdk/src/types/block/output/unlock_condition/storage_deposit_return.rs +++ b/sdk/src/types/block/output/unlock_condition/storage_deposit_return.rs @@ -4,14 +4,14 @@ use crate::types::block::{ address::Address, output::storage_score::{StorageScore, StorageScoreParameters}, - protocol::ProtocolParameters, + Error, }; /// Defines the amount of IOTAs used as storage deposit that have to be returned to the return [`Address`]. #[derive(Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash, packable::Packable)] -#[packable(unpack_visitor = ProtocolParameters)] pub struct StorageDepositReturnUnlockCondition { // The [`Address`] to return the amount to. + #[packable(verify_with = verify_return_address)] return_address: Address, // Amount of IOTA coins the consuming transaction should deposit to `return_address`. amount: u64, @@ -24,11 +24,12 @@ impl StorageDepositReturnUnlockCondition { /// Creates a new [`StorageDepositReturnUnlockCondition`]. #[inline(always)] - pub fn new(return_address: impl Into
, amount: u64) -> Self { - Self { - return_address: return_address.into(), - amount, - } + pub fn new(return_address: impl Into
, amount: u64) -> Result { + let return_address = return_address.into(); + + verify_return_address::(&return_address)?; + + Ok(Self { return_address, amount }) } /// Returns the return address. @@ -50,6 +51,15 @@ impl StorageScore for StorageDepositReturnUnlockCondition { } } +#[inline] +fn verify_return_address(return_address: &Address) -> Result<(), Error> { + if VERIFY && return_address.is_implicit_account_creation() { + Err(Error::InvalidAddressKind(return_address.kind())) + } else { + Ok(()) + } +} + #[cfg(feature = "serde")] mod dto { use alloc::format; diff --git a/sdk/src/wallet/operations/transaction/prepare_output.rs b/sdk/src/wallet/operations/transaction/prepare_output.rs index d47eaa764b..6f4c33b38e 100644 --- a/sdk/src/wallet/operations/transaction/prepare_output.rs +++ b/sdk/src/wallet/operations/transaction/prepare_output.rs @@ -138,7 +138,7 @@ where remainder_address.clone(), // Return minimum amount min_amount_basic_output, - )); + )?); // Update output amount, so recipient still gets the provided amount let new_amount = params.amount + min_amount_basic_output; @@ -159,7 +159,7 @@ where remainder_address.clone(), // Return minimum amount min_amount_basic_output + additional_required_amount, - )); + )?); } else { // new_amount is enough second_output_builder = second_output_builder.with_amount(new_amount); @@ -214,7 +214,7 @@ where remainder_address, // Return minimum amount new_sdr_amount, - )); + )?); } } else { // Would leave dust behind, so return what's required for a remainder diff --git a/sdk/tests/client/mod.rs b/sdk/tests/client/mod.rs index 5ee2f04c93..854d8a836a 100644 --- a/sdk/tests/client/mod.rs +++ b/sdk/tests/client/mod.rs @@ -101,7 +101,7 @@ fn build_basic_output( } if let Some((address, amount)) = sdruc { - builder = builder.add_unlock_condition(StorageDepositReturnUnlockCondition::new(address, amount)); + builder = builder.add_unlock_condition(StorageDepositReturnUnlockCondition::new(address, amount).unwrap()); } if let Some(timelock) = timelock { @@ -137,7 +137,7 @@ fn build_nft_output( } if let Some((address, amount)) = sdruc { - builder = builder.add_unlock_condition(StorageDepositReturnUnlockCondition::new(address, amount)); + builder = builder.add_unlock_condition(StorageDepositReturnUnlockCondition::new(address, amount).unwrap()); } if let Some((address, timestamp)) = expiration { From c282ab19f374e59dca7b6081e01fcbaa281dddd2 Mon Sep 17 00:00:00 2001 From: Thibault Martinez Date: Wed, 29 Nov 2023 09:56:15 +0100 Subject: [PATCH 90/91] Address post-merge nits (#1711) --- Cargo.lock | 12 ++++++------ .../python/iota_sdk/client/_node_indexer_api.py | 3 --- bindings/python/iota_sdk/types/utxo_changes.py | 2 -- sdk/tests/client/signing/account.rs | 4 ++-- sdk/tests/types/output_id.rs | 14 ++++++-------- 5 files changed, 14 insertions(+), 21 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index c8f96a9f88..bb6bc95aea 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2617,9 +2617,9 @@ dependencies = [ [[package]] name = "ring" -version = "0.17.5" +version = "0.17.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fb0205304757e5d899b9c2e448b867ffd03ae7f988002e47cd24954391394d0b" +checksum = "684d5e6e18f669ccebf64a92236bb7db9a34f07be010e3627368182027180866" dependencies = [ "cc", "getrandom", @@ -3070,9 +3070,9 @@ dependencies = [ [[package]] name = "spki" -version = "0.7.2" +version = "0.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9d1e996ef02c474957d681f1b05213dfb0abab947b446a62d37770b23500184a" +checksum = "d91ed6c858b01f942cd56b37a94b3e0a1798290327d1236e4d9cf4eaca44d29d" dependencies = [ "base64ct", "der", @@ -3645,9 +3645,9 @@ dependencies = [ [[package]] name = "web-sys" -version = "0.3.65" +version = "0.3.66" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5db499c5f66323272151db0e666cd34f78617522fb0c1604d31a27c50c206a85" +checksum = "50c24a44ec86bb68fbecd1b3efed7e85ea5621b39b35ef2766b66cd984f8010f" dependencies = [ "js-sys", "wasm-bindgen", diff --git a/bindings/python/iota_sdk/client/_node_indexer_api.py b/bindings/python/iota_sdk/client/_node_indexer_api.py index ecd092d5d4..cdc24277a5 100644 --- a/bindings/python/iota_sdk/client/_node_indexer_api.py +++ b/bindings/python/iota_sdk/client/_node_indexer_api.py @@ -8,9 +8,6 @@ from iota_sdk.types.common import HexStr, json, SlotIndex from iota_sdk.types.output_id import OutputId -from iota_sdk.types.common import HexStr -from iota_sdk.types.output_id import OutputId - @json @dataclass diff --git a/bindings/python/iota_sdk/types/utxo_changes.py b/bindings/python/iota_sdk/types/utxo_changes.py index 061438920d..628f479449 100644 --- a/bindings/python/iota_sdk/types/utxo_changes.py +++ b/bindings/python/iota_sdk/types/utxo_changes.py @@ -4,8 +4,6 @@ from typing import List from dataclasses import dataclass -from iota_sdk.types.common import HexStr - from iota_sdk.types.common import HexStr, json diff --git a/sdk/tests/client/signing/account.rs b/sdk/tests/client/signing/account.rs index 1299085942..6b6043a2a5 100644 --- a/sdk/tests/client/signing/account.rs +++ b/sdk/tests/client/signing/account.rs @@ -87,7 +87,7 @@ async fn sign_account_state_transition() -> Result<()> { let unlocks = secret_manager.transaction_unlocks(&prepared_transaction_data).await?; assert_eq!(unlocks.len(), 1); - assert_eq!((*unlocks).get(0).unwrap().kind(), SignatureUnlock::KIND); + assert_eq!((*unlocks).first().unwrap().kind(), SignatureUnlock::KIND); let tx_payload = SignedTransactionPayload::new(prepared_transaction_data.transaction.clone(), unlocks)?; @@ -186,7 +186,7 @@ async fn account_reference_unlocks() -> Result<()> { let unlocks = secret_manager.transaction_unlocks(&prepared_transaction_data).await?; assert_eq!(unlocks.len(), 3); - assert_eq!((*unlocks).get(0).unwrap().kind(), SignatureUnlock::KIND); + assert_eq!((*unlocks).first().unwrap().kind(), SignatureUnlock::KIND); match (*unlocks).get(1).unwrap() { Unlock::Account(a) => { assert_eq!(a.index(), 0); diff --git a/sdk/tests/types/output_id.rs b/sdk/tests/types/output_id.rs index a00249cc77..38394a6fab 100644 --- a/sdk/tests/types/output_id.rs +++ b/sdk/tests/types/output_id.rs @@ -6,14 +6,12 @@ use core::str::FromStr; use iota_sdk::types::block::{ output::OutputId, payload::signed_transaction::{TransactionHash, TransactionId}, - Error, }; -use packable::{bounded::InvalidBoundedU16, error::UnpackError, PackableExt}; +use packable::PackableExt; use pretty_assertions::assert_eq; const TRANSACTION_ID: &str = "0x52fdfc072182654f163f5f0f9a621d729566c74d10037c4d7bbb0407d1e2c64900000000"; const OUTPUT_ID: &str = "0x52fdfc072182654f163f5f0f9a621d729566c74d10037c4d7bbb0407d1e2c649000000002a00"; -const OUTPUT_ID_INVALID_INDEX: &str = "0x52fdfc072182654f163f5f0f9a621d729566c74d10037c4d7bbb0407d1e2c649000000008000"; #[test] fn debug_impl() { @@ -31,7 +29,7 @@ fn debug_impl() { } #[test] -fn new_valid() { +fn new() { let transaction_id = TransactionId::from_str(TRANSACTION_ID).unwrap(); let output_id = OutputId::new(transaction_id, 42); @@ -58,17 +56,17 @@ fn split_valid() { } #[test] -fn try_from_valid() { +fn from_bytes() { let transaction_id = TransactionId::from_str(TRANSACTION_ID).unwrap(); let output_id_bytes: [u8; OutputId::LENGTH] = prefix_hex::decode(OUTPUT_ID).unwrap(); - let output_id = OutputId::try_from(output_id_bytes).unwrap(); + let output_id = OutputId::from(output_id_bytes); assert_eq!(*output_id.transaction_id(), transaction_id); assert_eq!(output_id.index(), 42); } #[test] -fn from_str_valid() { +fn from_str() { let transaction_id = TransactionId::from_str(TRANSACTION_ID).unwrap(); let output_id = OutputId::from_str(OUTPUT_ID).unwrap(); @@ -98,7 +96,7 @@ fn packed_len() { } #[test] -fn pack_unpack_valid() { +fn pack_unpack() { let output_id_1 = OutputId::from_str(OUTPUT_ID).unwrap(); let output_id_2 = OutputId::unpack_verified(output_id_1.pack_to_vec().as_slice(), &()).unwrap(); From 3d0cfd5a10b1a9077076207ca52e34edbafbe4e6 Mon Sep 17 00:00:00 2001 From: Thoralf-M <46689931+Thoralf-M@users.noreply.github.com> Date: Wed, 29 Nov 2023 09:56:35 +0100 Subject: [PATCH 91/91] Add /api/core/v3/blocks/{blockId}/full route (#1707) * Add /api/core/v3/blocks/{blockId}/full route * Rename to get_block_with_metadata * More rename --------- Co-authored-by: Thibault Martinez --- bindings/core/src/method/client.rs | 6 ++++++ bindings/core/src/method_handler/client.rs | 3 +++ bindings/core/src/response.rs | 7 +++++-- bindings/nodejs/lib/client/client.ts | 18 ++++++++++++++++++ .../nodejs/lib/types/client/bridge/client.ts | 7 +++++++ .../nodejs/lib/types/client/bridge/index.ts | 2 ++ .../nodejs/lib/types/models/block-metadata.ts | 15 +++++++++++++++ .../python/iota_sdk/client/_node_core_api.py | 9 ++++++++- .../python/iota_sdk/types/block/metadata.py | 16 ++++++++++++++++ sdk/src/client/node_api/core/routes.rs | 14 +++++++++++--- sdk/src/types/api/core.rs | 12 ++++++++++-- sdk/src/wallet/update.rs | 6 ++---- 12 files changed, 103 insertions(+), 12 deletions(-) diff --git a/bindings/core/src/method/client.rs b/bindings/core/src/method/client.rs index 29e806f6bd..20f12efe31 100644 --- a/bindings/core/src/method/client.rs +++ b/bindings/core/src/method/client.rs @@ -175,6 +175,12 @@ pub enum ClientMethod { /// Block ID block_id: BlockId, }, + /// Get a block with its metadata + #[serde(rename_all = "camelCase")] + GetBlockWithMetadata { + /// Block ID + block_id: BlockId, + }, /// Get block raw #[serde(rename_all = "camelCase")] GetBlockRaw { diff --git a/bindings/core/src/method_handler/client.rs b/bindings/core/src/method_handler/client.rs index 753c897297..cb9a955938 100644 --- a/bindings/core/src/method_handler/client.rs +++ b/bindings/core/src/method_handler/client.rs @@ -196,6 +196,9 @@ pub(crate) async fn call_client_method_internal(client: &Client, method: ClientM ClientMethod::GetBlockMetadata { block_id } => { Response::BlockMetadata(client.get_block_metadata(&block_id).await?) } + ClientMethod::GetBlockWithMetadata { block_id } => { + Response::BlockWithMetadata(client.get_block_with_metadata(&block_id).await?) + } ClientMethod::GetBlockRaw { block_id } => Response::Raw(client.get_block_raw(&block_id).await?), ClientMethod::GetOutput { output_id } => Response::OutputWithMetadataResponse( client diff --git a/bindings/core/src/response.rs b/bindings/core/src/response.rs index 978a80b602..03df850853 100644 --- a/bindings/core/src/response.rs +++ b/bindings/core/src/response.rs @@ -16,8 +16,8 @@ use iota_sdk::{ types::{ api::{ core::{ - BlockMetadataResponse, InfoResponse as NodeInfo, IssuanceBlockHeaderResponse, - OutputWithMetadataResponse, PeerResponse, + BlockMetadataResponse, BlockWithMetadataResponse, InfoResponse as NodeInfo, + IssuanceBlockHeaderResponse, OutputWithMetadataResponse, PeerResponse, }, plugins::indexer::OutputIdsResponse, }, @@ -118,6 +118,9 @@ pub enum Response { /// - [`GetBlockMetadata`](crate::method::ClientMethod::GetBlockMetadata) BlockMetadata(BlockMetadataResponse), /// Response for: + /// - [`GetBlockWithMetadata`](crate::method::ClientMethod::GetBlockWithMetadata) + BlockWithMetadata(BlockWithMetadataResponse), + /// Response for: /// - [`GetBlockRaw`](crate::method::ClientMethod::GetBlockRaw) Raw(Vec), /// Response for: diff --git a/bindings/nodejs/lib/client/client.ts b/bindings/nodejs/lib/client/client.ts index dcbc06e1a5..fdd64f7f1d 100644 --- a/bindings/nodejs/lib/client/client.ts +++ b/bindings/nodejs/lib/client/client.ts @@ -57,6 +57,7 @@ import { u64, TransactionId, Bech32Address, + IBlockWithMetadata, } from '../types'; import { OutputResponse, IOutputsResponse } from '../types/models/api'; @@ -194,6 +195,23 @@ export class Client { return JSON.parse(response).payload; } + /** + * Get a block with its metadata. + * + * @param blockId The corresponding block ID of the requested block. + * @returns The requested block with its metadata. + */ + async getBlockWithMetadata(blockId: BlockId): Promise { + const response = await this.methodHandler.callMethod({ + name: 'getBlockWithMetadata', + data: { + blockId, + }, + }); + + return JSON.parse(response).payload; + } + /** * Find inputs from addresses for a given amount (useful for offline signing). * diff --git a/bindings/nodejs/lib/types/client/bridge/client.ts b/bindings/nodejs/lib/types/client/bridge/client.ts index 6db9d5ac29..3c36f250b9 100644 --- a/bindings/nodejs/lib/types/client/bridge/client.ts +++ b/bindings/nodejs/lib/types/client/bridge/client.ts @@ -82,6 +82,13 @@ export interface __GetBlockMetadataMethod__ { }; } +export interface __GetBlockWithMetadataMethod__ { + name: 'getBlockWithMetadata'; + data: { + blockId: BlockId; + }; +} + export interface __FindInputsMethod__ { name: 'findInputs'; data: { diff --git a/bindings/nodejs/lib/types/client/bridge/index.ts b/bindings/nodejs/lib/types/client/bridge/index.ts index 8535e6086d..563f71b7d3 100644 --- a/bindings/nodejs/lib/types/client/bridge/index.ts +++ b/bindings/nodejs/lib/types/client/bridge/index.ts @@ -12,6 +12,7 @@ import type { __GetNetworkInfoMethod__, __GetBlockMethod__, __GetBlockMetadataMethod__, + __GetBlockWithMetadataMethod__, __FindInputsMethod__, __SignTransactionMethod__, __BuildBasicBlockMethod__, @@ -65,6 +66,7 @@ export type __ClientMethods__ = | __GetNetworkInfoMethod__ | __GetBlockMethod__ | __GetBlockMetadataMethod__ + | __GetBlockWithMetadataMethod__ | __FindInputsMethod__ | __SignTransactionMethod__ | __SignatureUnlockMethod__ diff --git a/bindings/nodejs/lib/types/models/block-metadata.ts b/bindings/nodejs/lib/types/models/block-metadata.ts index 2cd740e522..70043f2a60 100644 --- a/bindings/nodejs/lib/types/models/block-metadata.ts +++ b/bindings/nodejs/lib/types/models/block-metadata.ts @@ -5,6 +5,7 @@ import type { TransactionFailureReason } from './transaction-failure-reason'; import type { HexEncodedString } from '../utils/hex-encoding'; import { BlockState, TransactionState } from './state'; import { BlockFailureReason } from './block-failure-reason'; +import { Block } from '../block'; /** * Response from the metadata endpoint. @@ -31,3 +32,17 @@ export interface IBlockMetadata { */ transactionFailureReason?: TransactionFailureReason; } + +/** + * Response from the full endpoint. + */ +export interface IBlockWithMetadata { + /** + * The block. + */ + block: Block; + /** + * The block metadata. + */ + metadata: IBlockMetadata; +} diff --git a/bindings/python/iota_sdk/client/_node_core_api.py b/bindings/python/iota_sdk/client/_node_core_api.py index bf6cf14bca..b48a59798f 100644 --- a/bindings/python/iota_sdk/client/_node_core_api.py +++ b/bindings/python/iota_sdk/client/_node_core_api.py @@ -6,7 +6,7 @@ from dacite import from_dict from iota_sdk.types.block.signed_block import SignedBlock -from iota_sdk.types.block.metadata import BlockMetadata +from iota_sdk.types.block.metadata import BlockMetadata, BlockWithMetadata from iota_sdk.types.common import HexStr from iota_sdk.types.node_info import NodeInfo, NodeInfoWrapper from iota_sdk.types.output_metadata import OutputWithMetadata, OutputMetadata @@ -102,6 +102,13 @@ def get_block_metadata(self, block_id: HexStr) -> BlockMetadata: 'blockId': block_id })) + def get_block_with_metadata(self, block_id: HexStr) -> BlockWithMetadata: + """Get a block with its metadata corresponding to the given block id. + """ + return BlockWithMetadata.from_dict(self._call_method('getBlockWithMetadata', { + 'blockId': block_id + })) + def get_block_raw(self, block_id: HexStr) -> List[int]: """Get the raw bytes of the block corresponding to the given block id. """ diff --git a/bindings/python/iota_sdk/types/block/metadata.py b/bindings/python/iota_sdk/types/block/metadata.py index de34a46e6d..ae313ecd73 100644 --- a/bindings/python/iota_sdk/types/block/metadata.py +++ b/bindings/python/iota_sdk/types/block/metadata.py @@ -6,6 +6,8 @@ from dataclasses import dataclass from typing import Optional from iota_sdk.types.common import HexStr, json +# TODO rename change to Block +from iota_sdk.types.block.signed_block import SignedBlock @json @@ -182,3 +184,17 @@ def __str__(self): 26: "Destruction of nfts is not allowed in the transaction capabilities.", 255: "The semantic validation failed for a reason not covered by the previous variants." }[self.value] + + +@json +@dataclass +class BlockWithMetadata: + """Represents a block with its metadata. + Response of GET /api/core/v3/blocks/{blockId}/full. + + Attributes: + block: The block. + metadata: The block metadata. + """ + block: SignedBlock + metadata: BlockMetadata diff --git a/sdk/src/client/node_api/core/routes.rs b/sdk/src/client/node_api/core/routes.rs index 5420251a37..06916d35a9 100644 --- a/sdk/src/client/node_api/core/routes.rs +++ b/sdk/src/client/node_api/core/routes.rs @@ -16,9 +16,9 @@ use crate::{ }, types::{ api::core::{ - BlockMetadataResponse, CommitteeResponse, CongestionResponse, InfoResponse, IssuanceBlockHeaderResponse, - ManaRewardsResponse, PeerResponse, RoutesResponse, SubmitBlockResponse, UtxoChangesResponse, - ValidatorResponse, ValidatorsResponse, + BlockMetadataResponse, BlockWithMetadataResponse, CommitteeResponse, CongestionResponse, InfoResponse, + IssuanceBlockHeaderResponse, ManaRewardsResponse, PeerResponse, RoutesResponse, SubmitBlockResponse, + UtxoChangesResponse, ValidatorResponse, ValidatorsResponse, }, block::{ address::ToBech32Ext, @@ -222,6 +222,14 @@ impl ClientInner { self.get_request(path, None, true, true).await } + /// Returns a block with its metadata. + /// GET /api/core/v3/blocks/{blockId}/full + pub async fn get_block_with_metadata(&self, block_id: &BlockId) -> Result { + let path = &format!("api/core/v3/blocks/{block_id}/full"); + + self.get_request(path, None, true, true).await + } + // UTXO routes. /// Finds an output by its ID and returns it as object. diff --git a/sdk/src/types/api/core.rs b/sdk/src/types/api/core.rs index d8449f01bc..e2c6c0af24 100644 --- a/sdk/src/types/api/core.rs +++ b/sdk/src/types/api/core.rs @@ -14,11 +14,11 @@ use crate::{ types::block::{ address::Bech32Address, core::Parents, - output::{dto::OutputDto, AccountId, OutputId, OutputMetadata, OutputWithMetadata}, + output::{dto::OutputDto, OutputId, OutputMetadata, OutputWithMetadata}, protocol::{ProtocolParameters, ProtocolParametersHash}, semantic::TransactionFailureReason, slot::{EpochIndex, SlotCommitment, SlotCommitmentId, SlotIndex}, - BlockId, + BlockDto, BlockId, }, utils::serde::{option_string, string}, }; @@ -404,6 +404,14 @@ pub struct BlockMetadataResponse { pub transaction_failure_reason: Option, } +/// Response of GET /api/core/v3/blocks/{blockId}/full. +/// Returns a block and its metadata. +#[derive(Clone, Debug, Eq, PartialEq, Serialize, Deserialize)] +pub struct BlockWithMetadataResponse { + pub block: BlockDto, + pub metadata: BlockMetadataResponse, +} + /// Response of GET /api/core/v3/outputs/{output_id}. /// Returns an output and its metadata. #[derive(Clone, Debug, Eq, PartialEq, Serialize, Deserialize)] diff --git a/sdk/src/wallet/update.rs b/sdk/src/wallet/update.rs index 77ce6f8622..820dd663eb 100644 --- a/sdk/src/wallet/update.rs +++ b/sdk/src/wallet/update.rs @@ -5,10 +5,7 @@ use std::collections::HashMap; use crate::{ client::secret::SecretManage, - types::{ - api::core::OutputWithMetadataResponse, - block::output::{OutputId, OutputMetadata}, - }, + types::block::output::{OutputId, OutputMetadata}, wallet::{ types::{InclusionState, OutputData, TransactionWithMetadata}, Wallet, @@ -16,6 +13,7 @@ use crate::{ }; #[cfg(feature = "events")] use crate::{ + types::api::core::OutputWithMetadataResponse, types::block::payload::signed_transaction::dto::SignedTransactionPayloadDto, wallet::{ events::types::{NewOutputEvent, SpentOutputEvent, TransactionInclusionEvent, WalletEvent},