difftreelog
Merge branch 'develop' into feature/core-203
in: master
130 files changed
Cargo.lockdiffbeforeafterboth--- a/Cargo.lock
+++ b/Cargo.lock
@@ -18,7 +18,16 @@
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3e61f2b7f93d2c7d2b08263acaa4a363b3e276806c68af6134c44f523bf1aacd"
dependencies = [
- "gimli",
+ "gimli 0.25.0",
+]
+
+[[package]]
+name = "addr2line"
+version = "0.17.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b9ecd88a8c8378ca913a680cd98f0f13ac67383d35993f86c90a70e3f137816b"
+dependencies = [
+ "gimli 0.26.1",
]
[[package]]
@@ -385,11 +394,11 @@
[[package]]
name = "backtrace"
-version = "0.3.62"
+version = "0.3.63"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "091bcdf2da9950f96aa522681ce805e6857f6ca8df73833d35736ab2dc78e152"
+checksum = "321629d8ba6513061f26707241fa9bc89524ff1cd7a915a97ef0c62c666ce1b6"
dependencies = [
- "addr2line",
+ "addr2line 0.17.0",
"cc",
"cfg-if 1.0.0",
"libc",
@@ -1065,9 +1074,9 @@
[[package]]
name = "clang-sys"
-version = "1.2.2"
+version = "1.3.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "10612c0ec0e0a1ff0e97980647cb058a6e7aedb913d01d009c406b8b7d0b26ee"
+checksum = "fa66045b9cb23c2e9c1520732030608b02ee07e5cfaa5a521ec15ded7fa24c90"
dependencies = [
"glob",
"libc",
@@ -1181,7 +1190,7 @@
"cranelift-codegen-meta",
"cranelift-codegen-shared",
"cranelift-entity",
- "gimli",
+ "gimli 0.25.0",
"log",
"regalloc",
"smallvec",
@@ -2998,6 +3007,12 @@
]
[[package]]
+name = "gimli"
+version = "0.26.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "78cc372d058dcf6d5ecd98510e7fbc9e5aec4d21de70f65fea8fecebcd881bd4"
+
+[[package]]
name = "glob"
version = "0.3.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -5055,6 +5070,8 @@
"sp-transaction-pool",
"substrate-frame-rpc-system",
"tokio 0.2.25",
+ "uc-rpc",
+ "up-rpc",
]
[[package]]
@@ -5082,16 +5099,20 @@
"nft-data-structs",
"pallet-aura",
"pallet-balances",
+ "pallet-common",
"pallet-ethereum",
"pallet-evm",
"pallet-evm-coder-substrate",
"pallet-evm-contract-helpers",
"pallet-evm-migration",
"pallet-evm-transaction-payment",
+ "pallet-fungible",
"pallet-inflation",
"pallet-nft",
"pallet-nft-transaction-payment",
+ "pallet-nonfungible",
"pallet-randomness-collective-flip",
+ "pallet-refungible",
"pallet-sudo",
"pallet-template-charge-transaction",
"pallet-timestamp",
@@ -5121,6 +5142,7 @@
"sp-transaction-pool",
"sp-version",
"substrate-wasm-builder",
+ "up-rpc",
"xcm",
"xcm-builder",
"xcm-executor",
@@ -5538,6 +5560,24 @@
]
[[package]]
+name = "pallet-common"
+version = "0.1.0"
+dependencies = [
+ "evm-coder",
+ "frame-support",
+ "frame-system",
+ "nft-data-structs",
+ "pallet-evm",
+ "pallet-evm-coder-substrate",
+ "parity-scale-codec",
+ "scale-info",
+ "serde",
+ "sp-core",
+ "sp-runtime",
+ "sp-std",
+]
+
+[[package]]
name = "pallet-contract-helpers"
version = "0.1.0"
dependencies = [
@@ -5788,6 +5828,25 @@
]
[[package]]
+name = "pallet-fungible"
+version = "0.1.0"
+dependencies = [
+ "ethereum 0.9.0 (git+https://github.com/purestake/ethereum?branch=joshy-scale-info)",
+ "evm-coder",
+ "frame-benchmarking",
+ "frame-support",
+ "frame-system",
+ "nft-data-structs",
+ "pallet-common",
+ "pallet-evm-coder-substrate",
+ "parity-scale-codec",
+ "scale-info",
+ "sp-core",
+ "sp-runtime",
+ "sp-std",
+]
+
+[[package]]
name = "pallet-gilt"
version = "4.0.0-dev"
source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.12#d76f39995315ec36980908e4b99709bd14927044"
@@ -5993,10 +6052,14 @@
"hex-literal",
"nft-data-structs",
"pallet-balances",
+ "pallet-common",
"pallet-ethereum",
"pallet-evm",
"pallet-evm-coder-substrate",
+ "pallet-fungible",
+ "pallet-nonfungible",
"pallet-randomness-collective-flip",
+ "pallet-refungible",
"pallet-timestamp",
"pallet-transaction-payment",
"parity-scale-codec",
@@ -6045,6 +6108,25 @@
]
[[package]]
+name = "pallet-nonfungible"
+version = "0.1.0"
+dependencies = [
+ "ethereum 0.9.0 (git+https://github.com/purestake/ethereum?branch=joshy-scale-info)",
+ "evm-coder",
+ "frame-benchmarking",
+ "frame-support",
+ "frame-system",
+ "nft-data-structs",
+ "pallet-common",
+ "pallet-evm-coder-substrate",
+ "parity-scale-codec",
+ "scale-info",
+ "sp-core",
+ "sp-runtime",
+ "sp-std",
+]
+
+[[package]]
name = "pallet-offences"
version = "4.0.0-dev"
source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.12#d76f39995315ec36980908e4b99709bd14927044"
@@ -6128,6 +6210,22 @@
]
[[package]]
+name = "pallet-refungible"
+version = "0.1.0"
+dependencies = [
+ "frame-benchmarking",
+ "frame-support",
+ "frame-system",
+ "nft-data-structs",
+ "pallet-common",
+ "parity-scale-codec",
+ "scale-info",
+ "sp-core",
+ "sp-runtime",
+ "sp-std",
+]
+
+[[package]]
name = "pallet-scheduler"
version = "4.0.0-dev"
source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.12#d76f39995315ec36980908e4b99709bd14927044"
@@ -6470,9 +6568,9 @@
[[package]]
name = "parity-db"
-version = "0.3.2"
+version = "0.3.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "91b679c6acc14fac74382942e2b73bea441686a33430b951ea03b5aeb6a7f254"
+checksum = "e7ccc4a8687027deb53d45c5434a1f1b330c9d1069a59cfe80a62aa9a1da25ae"
dependencies = [
"blake2-rfc",
"crc32fast",
@@ -11610,6 +11708,24 @@
checksum = "b63708a265f51345575b27fe43f9500ad611579e764c79edbc2037b1121959ec"
[[package]]
+name = "uc-rpc"
+version = "0.1.0"
+dependencies = [
+ "jsonrpc-core",
+ "jsonrpc-core-client",
+ "jsonrpc-derive",
+ "nft-data-structs",
+ "pallet-common",
+ "parity-scale-codec",
+ "sp-api",
+ "sp-blockchain",
+ "sp-core",
+ "sp-rpc",
+ "sp-runtime",
+ "up-rpc",
+]
+
+[[package]]
name = "ucd-trie"
version = "0.1.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -11716,6 +11832,19 @@
checksum = "a156c684c91ea7d62626509bce3cb4e1d9ed5c4d978f7b4352658f96a4c26b4a"
[[package]]
+name = "up-rpc"
+version = "0.1.0"
+dependencies = [
+ "nft-data-structs",
+ "pallet-common",
+ "parity-scale-codec",
+ "sp-api",
+ "sp-core",
+ "sp-runtime",
+ "sp-std",
+]
+
+[[package]]
name = "up-sponsorship"
version = "0.1.0"
source = "git+https://github.com/UniqueNetwork/pallet-sponsoring#e5d3354ab68face1b2ef709dc7f629803f56598d"
@@ -12007,7 +12136,7 @@
"cranelift-frontend",
"cranelift-native",
"cranelift-wasm",
- "gimli",
+ "gimli 0.25.0",
"more-asserts",
"object 0.26.2",
"target-lexicon",
@@ -12025,7 +12154,7 @@
"anyhow",
"cfg-if 1.0.0",
"cranelift-entity",
- "gimli",
+ "gimli 0.25.0",
"indexmap",
"log",
"more-asserts",
@@ -12043,11 +12172,11 @@
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "24f46dd757225f29a419be415ea6fb8558df9b0194f07e3a6a9c99d0e14dd534"
dependencies = [
- "addr2line",
+ "addr2line 0.16.0",
"anyhow",
"bincode",
"cfg-if 1.0.0",
- "gimli",
+ "gimli 0.25.0",
"libc",
"log",
"more-asserts",
client/rpc/src/lib.rsdiffbeforeafterboth--- a/client/rpc/src/lib.rs
+++ b/client/rpc/src/lib.rs
@@ -75,9 +75,17 @@
) -> Result<String>;
#[rpc(name = "nft_adminlist")]
- fn adminlist(&self, collection: CollectionId, at: Option<BlockHash>) -> Result<Vec<AccountId>>;
+ fn adminlist(
+ &self,
+ collection: CollectionId,
+ at: Option<BlockHash>,
+ ) -> Result<Vec<CrossAccountId>>;
#[rpc(name = "nft_allowlist")]
- fn allowlist(&self, collection: CollectionId, at: Option<BlockHash>) -> Result<Vec<AccountId>>;
+ fn allowlist(
+ &self,
+ collection: CollectionId,
+ at: Option<BlockHash>,
+ ) -> Result<Vec<CrossAccountId>>;
#[rpc(name = "nft_lastTokenId")]
fn last_token_id(&self, collection: CollectionId, at: Option<BlockHash>) -> Result<TokenId>;
}
@@ -150,7 +158,7 @@
pass_method!(balance(collection: CollectionId, account: CrossAccountId, token: TokenId) -> String => |v| v.to_string());
pass_method!(allowance(collection: CollectionId, sender: CrossAccountId, spender: CrossAccountId, token: TokenId) -> String => |v| v.to_string());
- pass_method!(adminlist(collection: CollectionId) -> Vec<AccountId>);
- pass_method!(allowlist(collection: CollectionId) -> Vec<AccountId>);
+ pass_method!(adminlist(collection: CollectionId) -> Vec<CrossAccountId>);
+ pass_method!(allowlist(collection: CollectionId) -> Vec<CrossAccountId>);
pass_method!(last_token_id(collection: CollectionId) -> TokenId);
}
launch-config.jsondiffbeforeafterboth--- a/launch-config.json
+++ b/launch-config.json
@@ -9,7 +9,8 @@
"rpcPort": 9843,
"port": 30444,
"flags": [
- "--rpc-port=9843"
+ "--rpc-port=9843",
+ "-lparachain::candidate_validation=debug"
]
},
{
@@ -18,7 +19,8 @@
"rpcPort": 9854,
"port": 30555,
"flags": [
- "--rpc-port=9854"
+ "--rpc-port=9854",
+ "-lparachain::candidate_validation=debug"
]
},
{
@@ -27,7 +29,8 @@
"rpcPort": 9865,
"port": 30666,
"flags": [
- "--rpc-port=9865"
+ "--rpc-port=9865",
+ "-lparachain::candidate_validation=debug"
]
},
{
@@ -36,7 +39,8 @@
"rpcPort": 9876,
"port": 30777,
"flags": [
- "--rpc-port=9876"
+ "--rpc-port=9876",
+ "-lparachain::candidate_validation=debug"
]
}
],
pallets/common/src/account.rsdiffbeforeafterboth--- a/pallets/common/src/account.rs
+++ b/pallets/common/src/account.rs
@@ -19,6 +19,8 @@
fn from_sub(account: AccountId) -> Self;
fn from_eth(account: H160) -> Self;
+
+ fn conv_eq(&self, other: &Self) -> bool;
}
#[derive(Encode, Decode, Serialize, Deserialize, TypeInfo)]
@@ -28,7 +30,7 @@
Ethereum(H160),
}
-#[derive(Eq)]
+#[derive(PartialEq, Eq)]
pub struct BasicCrossAccountId<T: Config> {
/// If true - then ethereum is canonical encoding
from_ethereum: bool,
@@ -77,18 +79,6 @@
}
}
-impl<T: Config> PartialEq for BasicCrossAccountId<T> {
- fn eq(&self, other: &Self) -> bool {
- if self.from_ethereum == other.from_ethereum {
- self.substrate == other.substrate && self.ethereum == other.ethereum
- } else if self.from_ethereum {
- // ethereum is canonical encoding, but we need to compare derived address
- self.substrate == other.substrate
- } else {
- self.ethereum == other.ethereum
- }
- }
-}
impl<T: Config> Clone for BasicCrossAccountId<T> {
fn clone(&self) -> Self {
Self {
@@ -158,6 +148,16 @@
from_ethereum: true,
}
}
+ fn conv_eq(&self, other: &Self) -> bool {
+ if self.from_ethereum == other.from_ethereum {
+ self.substrate == other.substrate && self.ethereum == other.ethereum
+ } else if self.from_ethereum {
+ // ethereum is canonical encoding, but we need to compare derived address
+ self.substrate == other.substrate
+ } else {
+ self.ethereum == other.ethereum
+ }
+ }
}
impl<T: Config> From<BasicCrossAccountIdRepr<T::AccountId>> for BasicCrossAccountId<T> {
fn from(repr: BasicCrossAccountIdRepr<T::AccountId>) -> Self {
pallets/common/src/lib.rsdiffbeforeafterboth--- a/pallets/common/src/lib.rs
+++ b/pallets/common/src/lib.rs
@@ -11,7 +11,8 @@
use nft_data_structs::{
COLLECTION_NUMBER_LIMIT, Collection, CollectionId, CreateItemData, ExistenceRequirement,
MAX_COLLECTION_DESCRIPTION_LENGTH, MAX_COLLECTION_NAME_LENGTH, MAX_TOKEN_PREFIX_LENGTH,
- MetaUpdatePermission, Pays, PostDispatchInfo, TokenId, Weight, WithdrawReasons,
+ COLLECTION_ADMINS_LIMIT, MetaUpdatePermission, Pays, PostDispatchInfo, TokenId, Weight,
+ WithdrawReasons,
};
pub use pallet::*;
use sp_core::H160;
@@ -98,23 +99,23 @@
pub fn is_owner_or_admin(&self, subject: &T::CrossAccountId) -> Result<bool, DispatchError> {
self.consume_sload()?;
- Ok(*subject.as_sub() == self.owner || <IsAdmin<T>>::get((self.id, subject.as_sub())))
+ Ok(*subject.as_sub() == self.owner || <IsAdmin<T>>::get((self.id, subject)))
}
pub fn check_is_owner_or_admin(&self, subject: &T::CrossAccountId) -> DispatchResult {
ensure!(self.is_owner_or_admin(subject)?, <Error<T>>::NoPermission);
Ok(())
}
pub fn ignores_allowance(&self, user: &T::CrossAccountId) -> Result<bool, DispatchError> {
- Ok(self.limits.owner_can_transfer && self.is_owner_or_admin(user)?)
+ Ok(self.limits.owner_can_transfer() && self.is_owner_or_admin(user)?)
}
pub fn ignores_owned_amount(&self, user: &T::CrossAccountId) -> Result<bool, DispatchError> {
- Ok(self.limits.owner_can_transfer && self.is_owner_or_admin(user)?)
+ Ok(self.limits.owner_can_transfer() && self.is_owner_or_admin(user)?)
}
pub fn check_allowlist(&self, user: &T::CrossAccountId) -> DispatchResult {
self.consume_sload()?;
ensure!(
- <Allowlist<T>>::get((self.id, user.as_sub())),
+ <Allowlist<T>>::get((self.id, user)),
<Error<T>>::AddressNotInAllowlist
);
Ok(())
@@ -139,8 +140,7 @@
#[frame_support::pallet]
pub mod pallet {
use super::*;
- use frame_support::{pallet_prelude::*};
- use frame_support::{Blake2_128Concat, storage::Key};
+ use frame_support::{Blake2_128Concat, pallet_prelude::*, storage::Key};
use account::{EvmBackwardsAddressMapping, CrossAccountId};
use frame_support::traits::Currency;
use nft_data_structs::TokenId;
@@ -166,6 +166,13 @@
#[pallet::generate_store(pub(super) trait Store)]
pub struct Pallet<T>(_);
+ #[pallet::extra_constants]
+ impl<T: Config> Pallet<T> {
+ pub fn collection_admins_limit() -> u32 {
+ COLLECTION_ADMINS_LIMIT
+ }
+ }
+
#[pallet::event]
#[pallet::generate_deposit(pub fn deposit_event)]
pub enum Event<T: Config> {
@@ -266,6 +273,8 @@
TotalCollectionsLimitExceeded,
/// variable_data exceeded data limit.
TokenVariableDataLimitExceeded,
+ /// Exceeded max admin amount
+ CollectionAdminAmountExceeded,
/// Collection settings not allowing items transferring
TransferNotAllowed,
@@ -306,12 +315,20 @@
QueryKind = OptionQuery,
>;
+ #[pallet::storage]
+ pub type AdminAmount<T> = StorageMap<
+ Hasher = Blake2_128Concat,
+ Key = CollectionId,
+ Value = u32,
+ QueryKind = ValueQuery,
+ >;
+
/// List of collection admins
#[pallet::storage]
pub type IsAdmin<T: Config> = StorageNMap<
Key = (
Key<Blake2_128Concat, CollectionId>,
- Key<Blake2_128Concat, T::AccountId>,
+ Key<Blake2_128Concat, T::CrossAccountId>,
),
Value = bool,
QueryKind = ValueQuery,
@@ -322,7 +339,7 @@
pub type Allowlist<T: Config> = StorageNMap<
Key = (
Key<Blake2_128Concat, CollectionId>,
- Key<Blake2_128Concat, T::AccountId>,
+ Key<Blake2_128Concat, T::CrossAccountId>,
),
Value = bool,
QueryKind = ValueQuery,
@@ -405,9 +422,10 @@
collection: CollectionHandle<T>,
sender: &T::CrossAccountId,
) -> DispatchResult {
- if !collection.limits.owner_can_destroy {
- fail!(Error::<T>::NoPermission);
- }
+ ensure!(
+ collection.limits.owner_can_destroy(),
+ <Error<T>>::NoPermission,
+ );
collection.check_is_owner(&sender)?;
let destroyed_collections = <DestroyedCollectionCount<T>>::get()
@@ -419,6 +437,7 @@
<DestroyedCollectionCount<T>>::put(destroyed_collections);
<CollectionById<T>>::remove(collection.id);
+ <AdminAmount<T>>::remove(collection.id);
<IsAdmin<T>>::remove_prefix((collection.id,), None);
<Allowlist<T>>::remove_prefix((collection.id,), None);
Ok(())
@@ -435,9 +454,44 @@
// =========
if allowed {
- <Allowlist<T>>::insert((collection.id, user.as_sub()), true);
+ <Allowlist<T>>::insert((collection.id, user), true);
} else {
- <Allowlist<T>>::remove((collection.id, user.as_sub()));
+ <Allowlist<T>>::remove((collection.id, user));
+ }
+
+ Ok(())
+ }
+
+ pub fn toggle_admin(
+ collection: &CollectionHandle<T>,
+ sender: &T::CrossAccountId,
+ user: &T::CrossAccountId,
+ admin: bool,
+ ) -> DispatchResult {
+ collection.check_is_owner_or_admin(&sender)?;
+
+ let was_admin = <IsAdmin<T>>::get((collection.id, user));
+ if was_admin == admin {
+ return Ok(());
+ }
+ let amount = <AdminAmount<T>>::get(collection.id);
+
+ if admin {
+ let amount = amount
+ .checked_add(1)
+ .ok_or(<Error<T>>::CollectionAdminAmountExceeded)?;
+ ensure!(
+ amount <= Self::collection_admins_limit(),
+ <Error<T>>::CollectionAdminAmountExceeded,
+ );
+
+ // =========
+
+ <AdminAmount<T>>::insert(collection.id, amount);
+ <IsAdmin<T>>::insert((collection.id, user), true);
+ } else {
+ <AdminAmount<T>>::insert(collection.id, amount.saturating_sub(1));
+ <IsAdmin<T>>::remove((collection.id, user));
}
Ok(())
pallets/fungible/src/common.rsdiffbeforeafterboth--- a/pallets/fungible/src/common.rs
+++ b/pallets/fungible/src/common.rs
@@ -2,9 +2,7 @@
use frame_support::{dispatch::DispatchResultWithPostInfo, ensure, fail, weights::Weight};
use nft_data_structs::TokenId;
-use pallet_common::{
- CommonCollectionOperations, CommonWeightInfo, account::CrossAccountId, with_weight,
-};
+use pallet_common::{CommonCollectionOperations, CommonWeightInfo, with_weight};
use sp_runtime::ArithmeticError;
use sp_std::{vec::Vec, vec};
@@ -188,7 +186,7 @@
}
fn account_tokens(&self, account: T::CrossAccountId) -> Vec<TokenId> {
- if <Balance<T>>::get((self.id, account.as_sub())) != 0 {
+ if <Balance<T>>::get((self.id, account)) != 0 {
vec![TokenId::default()]
} else {
vec![]
@@ -218,7 +216,7 @@
}
fn account_balance(&self, account: T::CrossAccountId) -> u32 {
- if <Balance<T>>::get((self.id, account.as_sub())) != 0 {
+ if <Balance<T>>::get((self.id, account)) != 0 {
1
} else {
0
@@ -229,7 +227,7 @@
if token != TokenId::default() {
return 0;
}
- <Balance<T>>::get((self.id, account.as_sub()))
+ <Balance<T>>::get((self.id, account))
}
fn allowance(
@@ -241,6 +239,6 @@
if token != TokenId::default() {
return 0;
}
- <Allowance<T>>::get((self.id, sender.as_sub(), spender.as_sub()))
+ <Allowance<T>>::get((self.id, sender, spender))
}
}
pallets/fungible/src/erc.rsdiffbeforeafterboth--- a/pallets/fungible/src/erc.rs
+++ b/pallets/fungible/src/erc.rs
@@ -52,7 +52,7 @@
}
fn balance_of(&self, owner: address) -> Result<uint256> {
let owner = T::CrossAccountId::from_eth(owner);
- let balance = <Balance<T>>::get((self.id, owner.as_sub()));
+ let balance = <Balance<T>>::get((self.id, owner));
Ok(balance.into())
}
fn transfer(&mut self, caller: caller, to: address, amount: uint256) -> Result<bool> {
@@ -92,7 +92,7 @@
let owner = T::CrossAccountId::from_eth(owner);
let spender = T::CrossAccountId::from_eth(spender);
- Ok(<Allowance<T>>::get((self.id, owner.as_sub(), spender.as_sub())).into())
+ Ok(<Allowance<T>>::get((self.id, owner, spender)).into())
}
}
pallets/fungible/src/lib.rsdiffbeforeafterboth--- a/pallets/fungible/src/lib.rs
+++ b/pallets/fungible/src/lib.rs
@@ -55,7 +55,7 @@
pub(super) type Balance<T: Config> = StorageNMap<
Key = (
Key<Twox64Concat, CollectionId>,
- Key<Blake2_128Concat, T::AccountId>,
+ Key<Blake2_128Concat, T::CrossAccountId>,
),
Value = u128,
QueryKind = ValueQuery,
@@ -65,8 +65,8 @@
pub(super) type Allowance<T: Config> = StorageNMap<
Key = (
Key<Twox64Concat, CollectionId>,
- Key<Blake2_128, T::AccountId>,
- Key<Blake2_128Concat, T::AccountId>,
+ Key<Blake2_128, T::CrossAccountId>,
+ Key<Blake2_128Concat, T::CrossAccountId>,
),
Value = u128,
QueryKind = ValueQuery,
@@ -119,7 +119,7 @@
.checked_sub(amount)
.ok_or(<CommonError<T>>::TokenValueTooLow)?;
- let balance = <Balance<T>>::get((collection.id, owner.as_sub()))
+ let balance = <Balance<T>>::get((collection.id, owner))
.checked_sub(amount)
.ok_or(<CommonError<T>>::TokenValueTooLow)?;
@@ -130,9 +130,9 @@
// =========
if balance == 0 {
- <Balance<T>>::remove((collection.id, owner.as_sub()));
+ <Balance<T>>::remove((collection.id, owner));
} else {
- <Balance<T>>::insert((collection.id, owner.as_sub()), balance);
+ <Balance<T>>::insert((collection.id, owner), balance);
}
<TotalSupply<T>>::insert(collection.id, total_supply);
@@ -157,8 +157,8 @@
amount: u128,
) -> DispatchResult {
ensure!(
- collection.transfers_enabled,
- <CommonError<T>>::TransferNotAllowed
+ collection.limits.transfers_enabled(),
+ <CommonError<T>>::TransferNotAllowed,
);
if collection.access == AccessMode::AllowList {
@@ -167,12 +167,12 @@
}
<PalletCommon<T>>::ensure_correct_receiver(to)?;
- let balance_from = <Balance<T>>::get((collection.id, from.as_sub()))
+ let balance_from = <Balance<T>>::get((collection.id, from))
.checked_sub(amount)
.ok_or(<CommonError<T>>::TokenValueTooLow)?;
let balance_to = if from != to {
Some(
- <Balance<T>>::get((collection.id, to.as_sub()))
+ <Balance<T>>::get((collection.id, to))
.checked_add(amount)
.ok_or(ArithmeticError::Overflow)?,
)
@@ -190,11 +190,11 @@
if let Some(balance_to) = balance_to {
// from != to
if balance_from == 0 {
- <Balance<T>>::remove((collection.id, from.as_sub()));
+ <Balance<T>>::remove((collection.id, from));
} else {
- <Balance<T>>::insert((collection.id, from.as_sub()), balance_from);
+ <Balance<T>>::insert((collection.id, from), balance_from);
}
- <Balance<T>>::insert((collection.id, to.as_sub()), balance_to);
+ <Balance<T>>::insert((collection.id, to), balance_to);
}
collection.log_infallible(ERC20Events::Transfer {
@@ -235,14 +235,16 @@
let total_supply = data
.iter()
.map(|u| u.1)
- .try_fold(0u128, |acc, v| acc.checked_add(v))
+ .try_fold(<TotalSupply<T>>::get(collection.id), |acc, v| {
+ acc.checked_add(v)
+ })
.ok_or(ArithmeticError::Overflow)?;
for (user, amount) in data.into_iter() {
collection.consume_sload()?;
let balance = balances
.entry(user.clone())
- .or_insert_with(|| <Balance<T>>::get((collection.id, user.as_sub())));
+ .or_insert_with(|| <Balance<T>>::get((collection.id, user)));
*balance = (*balance)
.checked_add(amount)
.ok_or(ArithmeticError::Overflow)?;
@@ -259,7 +261,7 @@
<TotalSupply<T>>::insert(collection.id, total_supply);
for (user, amount) in balances {
- <Balance<T>>::insert((collection.id, user.as_sub()), amount);
+ <Balance<T>>::insert((collection.id, &user), amount);
collection.log_infallible(ERC20Events::Transfer {
from: H160::default(),
@@ -283,7 +285,7 @@
spender: &T::CrossAccountId,
amount: u128,
) {
- <Allowance<T>>::insert((collection.id, owner.as_sub(), spender.as_sub()), amount);
+ <Allowance<T>>::insert((collection.id, owner, spender), amount);
collection.log_infallible(ERC20Events::Approval {
owner: *owner.as_eth(),
@@ -310,7 +312,7 @@
collection.check_allowlist(&spender)?;
}
- if <Balance<T>>::get((collection.id, owner.as_sub())) < amount {
+ if <Balance<T>>::get((collection.id, owner)) < amount {
ensure!(
collection.ignores_owned_amount(owner)?,
<CommonError<T>>::CantApproveMoreThanOwned
@@ -330,7 +332,7 @@
to: &T::CrossAccountId,
amount: u128,
) -> DispatchResult {
- if spender == from {
+ if spender.conv_eq(from) {
return Self::transfer(collection, from, to, amount);
}
if collection.access == AccessMode::AllowList {
@@ -338,8 +340,7 @@
collection.check_allowlist(spender)?;
}
- let allowance = <Allowance<T>>::get((collection.id, from.as_sub(), spender.as_sub()))
- .checked_sub(amount);
+ let allowance = <Allowance<T>>::get((collection.id, from, spender)).checked_sub(amount);
if allowance.is_none() {
ensure!(
collection.ignores_allowance(spender)?,
@@ -362,7 +363,7 @@
from: &T::CrossAccountId,
amount: u128,
) -> DispatchResult {
- if spender == from {
+ if spender.conv_eq(from) {
return Self::burn(collection, from, amount);
}
if collection.access == AccessMode::AllowList {
@@ -370,8 +371,7 @@
collection.check_allowlist(spender)?;
}
- let allowance = <Allowance<T>>::get((collection.id, from.as_sub(), spender.as_sub()))
- .checked_sub(amount);
+ let allowance = <Allowance<T>>::get((collection.id, from, spender)).checked_sub(amount);
if allowance.is_none() {
ensure!(
collection.ignores_allowance(spender)?,
pallets/nft/src/eth/sponsoring.rsdiffbeforeafterboth--- a/pallets/nft/src/eth/sponsoring.rs
+++ b/pallets/nft/src/eth/sponsoring.rs
@@ -43,11 +43,8 @@
let token_id: u32 = token_id.try_into().map_err(|_| AnyError)?;
let block_number = <frame_system::Pallet<T>>::block_number() as T::BlockNumber;
let collection_limits = &collection.limits;
- let limit: u32 = if collection_limits.sponsor_transfer_timeout > 0 {
- collection_limits.sponsor_transfer_timeout
- } else {
- NFT_SPONSOR_TRANSFER_TIMEOUT
- };
+ let limit =
+ collection_limits.sponsor_transfer_timeout(NFT_SPONSOR_TRANSFER_TIMEOUT);
let mut sponsor = true;
if <NftTransferBasket<T>>::contains_key(collection_id, token_id) {
@@ -74,11 +71,8 @@
UniqueFungibleCall::ERC20(ERC20Call::Transfer { .. }) => {
let who = T::CrossAccountId::from_eth(*caller);
let collection_limits = &collection.limits;
- let limit: u32 = if collection_limits.sponsor_transfer_timeout > 0 {
- collection_limits.sponsor_transfer_timeout
- } else {
- FUNGIBLE_SPONSOR_TRANSFER_TIMEOUT
- };
+ let limit = collection_limits
+ .sponsor_transfer_timeout(FUNGIBLE_SPONSOR_TRANSFER_TIMEOUT);
let block_number = <frame_system::Pallet<T>>::block_number() as T::BlockNumber;
let mut sponsored = true;
pallets/nft/src/lib.rsdiffbeforeafterboth--- a/pallets/nft/src/lib.rs
+++ b/pallets/nft/src/lib.rs
@@ -36,9 +36,10 @@
use sp_runtime::{sp_std::prelude::Vec};
use nft_data_structs::{
MAX_DECIMAL_POINTS, MAX_SPONSOR_TIMEOUT, MAX_TOKEN_OWNERSHIP, CUSTOM_DATA_LIMIT,
- VARIABLE_ON_CHAIN_SCHEMA_LIMIT, CONST_ON_CHAIN_SCHEMA_LIMIT, COLLECTION_ADMINS_LIMIT,
- OFFCHAIN_SCHEMA_LIMIT, AccessMode, Collection, CreateItemData, CollectionLimits, CollectionId,
- CollectionMode, TokenId, SchemaVersion, SponsorshipState, MetaUpdatePermission,
+ VARIABLE_ON_CHAIN_SCHEMA_LIMIT, CONST_ON_CHAIN_SCHEMA_LIMIT, OFFCHAIN_SCHEMA_LIMIT,
+ FUNGIBLE_SPONSOR_TRANSFER_TIMEOUT, REFUNGIBLE_SPONSOR_TRANSFER_TIMEOUT,
+ NFT_SPONSOR_TRANSFER_TIMEOUT, AccessMode, Collection, CreateItemData, CollectionLimits,
+ CollectionId, CollectionMode, TokenId, SchemaVersion, SponsorshipState, MetaUpdatePermission,
};
use pallet_common::{
account::CrossAccountId, CollectionHandle, IsAdmin, Pallet as PalletCommon,
@@ -155,7 +156,6 @@
where
origin: T::Origin
{
- const CollectionAdminsLimit: u64 = COLLECTION_ADMINS_LIMIT;
type Error = Error<T>;
fn on_initialize(_now: T::BlockNumber) -> Weight {
@@ -188,11 +188,6 @@
// Anyone can create a collection
let who = ensure_signed(origin)?;
-
- let limits = CollectionLimits::<T::BlockNumber> {
- sponsored_data_size: CUSTOM_DATA_LIMIT,
- ..Default::default()
- };
// Create new collection
let new_collection = Collection::<T> {
@@ -208,8 +203,7 @@
sponsorship: SponsorshipState::Disabled,
variable_on_chain_schema: Vec::new(),
const_on_chain_schema: Vec::new(),
- limits,
- transfers_enabled: true,
+ limits: Default::default(),
meta_update_permission: Default::default(),
};
@@ -411,12 +405,9 @@
#[transactional]
pub fn add_collection_admin(origin, collection_id: CollectionId, new_admin_id: T::CrossAccountId) -> DispatchResult {
let sender = T::CrossAccountId::from_sub(ensure_signed(origin)?);
-
let collection = <CollectionHandle<T>>::try_get(collection_id)?;
- collection.check_is_owner_or_admin(&sender)?;
- <IsAdmin<T>>::insert((collection_id, new_admin_id.as_sub()), true);
- Ok(())
+ <PalletCommon<T>>::toggle_admin(&collection, &sender, &new_admin_id, true)
}
/// Remove admin address of the Collection. An admin address can remove itself. List of admins may become empty, in which case only Collection Owner will be able to add an Admin.
@@ -435,12 +426,9 @@
#[transactional]
pub fn remove_collection_admin(origin, collection_id: CollectionId, account_id: T::CrossAccountId) -> DispatchResult {
let sender = T::CrossAccountId::from_sub(ensure_signed(origin)?);
-
let collection = <CollectionHandle<T>>::try_get(collection_id)?;
- collection.check_is_owner_or_admin(&sender)?;
- <IsAdmin<T>>::remove((collection_id, account_id.as_sub()));
- Ok(())
+ <PalletCommon<T>>::toggle_admin(&collection, &sender, &account_id, false)
}
/// # Permissions
@@ -458,7 +446,7 @@
let sender = T::CrossAccountId::from_sub(ensure_signed(origin)?);
let mut target_collection = <CollectionHandle<T>>::try_get(collection_id)?;
- target_collection.check_is_owner_or_admin(&sender)?;
+ target_collection.check_is_owner(&sender)?;
target_collection.sponsorship = SponsorshipState::Unconfirmed(new_sponsor);
target_collection.save()
@@ -582,7 +570,7 @@
// =========
- target_collection.transfers_enabled = value;
+ target_collection.limits.transfers_enabled = Some(value);
target_collection.save()
}
@@ -888,30 +876,63 @@
pub fn set_collection_limits(
origin,
collection_id: CollectionId,
- new_limits: CollectionLimits<T::BlockNumber>,
+ new_limit: CollectionLimits,
) -> DispatchResult {
+ let mut new_limit = new_limit;
let sender = T::CrossAccountId::from_sub(ensure_signed(origin)?);
let mut target_collection = <CollectionHandle<T>>::try_get(collection_id)?;
target_collection.check_is_owner(&sender)?;
- let old_limits = &target_collection.limits;
-
- // collection bounds
- ensure!(new_limits.sponsor_transfer_timeout <= MAX_SPONSOR_TIMEOUT &&
- new_limits.account_token_ownership_limit.unwrap_or(0) <= MAX_TOKEN_OWNERSHIP &&
- new_limits.sponsored_data_size <= CUSTOM_DATA_LIMIT,
- Error::<T>::CollectionLimitBoundsExceeded);
+ let old_limit = &target_collection.limits;
- // token_limit check prev
- ensure!(old_limits.token_limit >= new_limits.token_limit, <CommonError<T>>::CollectionTokenLimitExceeded);
- ensure!(new_limits.token_limit > 0, <CommonError<T>>::CollectionTokenLimitExceeded);
+ macro_rules! limit_default {
+ ($old:ident, $new:ident, $($field:ident $(($arg:expr))? => $check:expr),* $(,)?) => {{
+ $(
+ if let Some($new) = $new.$field {
+ let $old = $old.$field($($arg)?);
+ let _ = $new;
+ let _ = $old;
+ $check
+ } else {
+ $new.$field = $old.$field
+ }
+ )*
+ }};
+ }
- ensure!(
- (old_limits.owner_can_transfer || !new_limits.owner_can_transfer) &&
- (old_limits.owner_can_destroy || !new_limits.owner_can_destroy),
- Error::<T>::OwnerPermissionsCantBeReverted,
+ limit_default!(old_limit, new_limit,
+ account_token_ownership_limit => ensure!(
+ new_limit <= MAX_TOKEN_OWNERSHIP,
+ <Error<T>>::CollectionLimitBoundsExceeded,
+ ),
+ sponsor_transfer_timeout(match target_collection.mode {
+ CollectionMode::NFT => NFT_SPONSOR_TRANSFER_TIMEOUT,
+ CollectionMode::Fungible(_) => FUNGIBLE_SPONSOR_TRANSFER_TIMEOUT,
+ CollectionMode::ReFungible => REFUNGIBLE_SPONSOR_TRANSFER_TIMEOUT,
+ }) => ensure!(
+ new_limit <= MAX_SPONSOR_TIMEOUT,
+ <Error<T>>::CollectionLimitBoundsExceeded,
+ ),
+ sponsored_data_size => ensure!(
+ new_limit <= CUSTOM_DATA_LIMIT,
+ <Error<T>>::CollectionLimitBoundsExceeded,
+ ),
+ token_limit => ensure!(
+ old_limit >= new_limit && new_limit > 0,
+ <CommonError<T>>::CollectionTokenLimitExceeded
+ ),
+ owner_can_transfer => ensure!(
+ old_limit || !new_limit,
+ <Error<T>>::OwnerPermissionsCantBeReverted,
+ ),
+ owner_can_destroy => ensure!(
+ old_limit || !new_limit,
+ <Error<T>>::OwnerPermissionsCantBeReverted,
+ ),
+ sponsored_data_rate_limit => {},
+ transfers_enabled => {},
);
- target_collection.limits = new_limits;
+ target_collection.limits = new_limit;
target_collection.save()
}
@@ -920,12 +941,12 @@
// TODO: limit returned entries?
impl<T: Config> Pallet<T> {
- pub fn adminlist(collection: CollectionId) -> Vec<T::AccountId> {
+ pub fn adminlist(collection: CollectionId) -> Vec<T::CrossAccountId> {
<IsAdmin<T>>::iter_prefix((collection,))
.map(|(a, _)| a)
.collect()
}
- pub fn allowlist(collection: CollectionId) -> Vec<T::AccountId> {
+ pub fn allowlist(collection: CollectionId) -> Vec<T::CrossAccountId> {
<Allowlist<T>>::iter_prefix((collection,))
.map(|(a, _)| a)
.collect()
pallets/nft/src/sponsorship.rsdiffbeforeafterboth--- a/pallets/nft/src/sponsorship.rs
+++ b/pallets/nft/src/sponsorship.rs
@@ -26,7 +26,13 @@
// sponsor timeout
let block_number = <frame_system::Pallet<T>>::block_number() as T::BlockNumber;
- let limit = collection.limits.sponsor_transfer_timeout;
+ let limit = collection
+ .limits
+ .sponsor_transfer_timeout(match _properties {
+ CreateItemData::NFT(_) => NFT_SPONSOR_TRANSFER_TIMEOUT,
+ CreateItemData::Fungible(_) => FUNGIBLE_SPONSOR_TRANSFER_TIMEOUT,
+ CreateItemData::ReFungible(_) => REFUNGIBLE_SPONSOR_TRANSFER_TIMEOUT,
+ });
if CreateItemBasket::<T>::contains_key((collection_id, &who)) {
let last_tx_block = CreateItemBasket::<T>::get((collection_id, &who));
let limit_time = last_tx_block + limit.into();
@@ -37,7 +43,7 @@
CreateItemBasket::<T>::insert((collection_id, who.clone()), block_number);
// check free create limit
- if collection.limits.sponsored_data_size >= (_properties.data_size() as u32) {
+ if collection.limits.sponsored_data_size() >= (_properties.data_size() as u32) {
collection.sponsorship.sponsor().cloned()
} else {
None
@@ -61,11 +67,8 @@
sponsor_transfer = match collection_mode {
CollectionMode::NFT => {
// get correct limit
- let limit: u32 = if collection_limits.sponsor_transfer_timeout > 0 {
- collection_limits.sponsor_transfer_timeout
- } else {
- NFT_SPONSOR_TRANSFER_TIMEOUT
- };
+ let limit =
+ collection_limits.sponsor_transfer_timeout(NFT_SPONSOR_TRANSFER_TIMEOUT);
let mut sponsored = true;
if NftTransferBasket::<T>::contains_key(collection_id, item_id) {
@@ -83,11 +86,8 @@
}
CollectionMode::Fungible(_) => {
// get correct limit
- let limit: u32 = if collection_limits.sponsor_transfer_timeout > 0 {
- collection_limits.sponsor_transfer_timeout
- } else {
- FUNGIBLE_SPONSOR_TRANSFER_TIMEOUT
- };
+ let limit = collection_limits
+ .sponsor_transfer_timeout(FUNGIBLE_SPONSOR_TRANSFER_TIMEOUT);
let block_number = <frame_system::Pallet<T>>::block_number() as T::BlockNumber;
let mut sponsored = true;
@@ -106,11 +106,8 @@
}
CollectionMode::ReFungible => {
// get correct limit
- let limit: u32 = if collection_limits.sponsor_transfer_timeout > 0 {
- collection_limits.sponsor_transfer_timeout
- } else {
- REFUNGIBLE_SPONSOR_TRANSFER_TIMEOUT
- };
+ let limit = collection_limits
+ .sponsor_transfer_timeout(REFUNGIBLE_SPONSOR_TRANSFER_TIMEOUT);
let mut sponsored = true;
if ReFungibleTransferBasket::<T>::contains_key(collection_id, item_id) {
@@ -150,13 +147,13 @@
// Can't sponsor fungible collection, this tx will be rejected
// as invalid
!matches!(collection.mode, CollectionMode::Fungible(_)) &&
- data.len() <= collection.limits.sponsored_data_size as usize
+ data.len() <= collection.limits.sponsored_data_size() as usize
{
- if let Some(rate_limit) = collection.limits.sponsored_data_rate_limit {
+ if let Some(rate_limit) = collection.limits.sponsored_data_rate_limit() {
let block_number = <frame_system::Pallet<T>>::block_number() as T::BlockNumber;
if VariableMetaDataBasket::<T>::get(collection_id, item_id)
- .map(|last_block| block_number - last_block > rate_limit)
+ .map(|last_block| block_number - last_block > rate_limit.into())
.unwrap_or(true)
{
sponsor_metadata_changes = true;
pallets/nonfungible/src/common.rsdiffbeforeafterboth--- a/pallets/nonfungible/src/common.rs
+++ b/pallets/nonfungible/src/common.rs
@@ -2,9 +2,7 @@
use frame_support::{dispatch::DispatchResultWithPostInfo, ensure, fail, weights::Weight};
use nft_data_structs::TokenId;
-use pallet_common::{
- CommonCollectionOperations, CommonWeightInfo, account::CrossAccountId, with_weight,
-};
+use pallet_common::{CommonCollectionOperations, CommonWeightInfo, with_weight};
use sp_runtime::DispatchError;
use sp_std::vec::Vec;
@@ -200,7 +198,7 @@
}
fn account_tokens(&self, account: T::CrossAccountId) -> Vec<TokenId> {
- <Owned<T>>::iter_prefix((self.id, account.as_sub()))
+ <Owned<T>>::iter_prefix((self.id, account))
.map(|(id, _)| id)
.collect()
}
@@ -234,7 +232,7 @@
}
fn account_balance(&self, account: T::CrossAccountId) -> u32 {
- <AccountBalance<T>>::get((self.id, account.as_sub()))
+ <AccountBalance<T>>::get((self.id, account))
}
fn balance(&self, account: T::CrossAccountId, token: TokenId) -> u128 {
@@ -255,8 +253,8 @@
token: TokenId,
) -> u128 {
if <TokenData<T>>::get((self.id, token))
- .map(|a| a.owner == sender)
- .unwrap_or(false)
+ .map(|a| a.owner != sender)
+ .unwrap_or(true)
{
0
} else if <Allowance<T>>::get((self.id, token)) == Some(spender) {
pallets/nonfungible/src/erc.rsdiffbeforeafterboth--- a/pallets/nonfungible/src/erc.rs
+++ b/pallets/nonfungible/src/erc.rs
@@ -93,7 +93,7 @@
impl<T: Config> NonfungibleHandle<T> {
fn balance_of(&self, owner: address) -> Result<uint256> {
let owner = T::CrossAccountId::from_eth(owner);
- let balance = <AccountBalance<T>>::get((self.id, owner.as_sub()));
+ let balance = <AccountBalance<T>>::get((self.id, owner));
Ok(balance.into())
}
fn owner_of(&self, token_id: uint256) -> Result<address> {
pallets/nonfungible/src/lib.rsdiffbeforeafterboth--- a/pallets/nonfungible/src/lib.rs
+++ b/pallets/nonfungible/src/lib.rs
@@ -80,7 +80,7 @@
pub(super) type Owned<T: Config> = StorageNMap<
Key = (
Key<Twox64Concat, CollectionId>,
- Key<Blake2_128Concat, T::AccountId>,
+ Key<Blake2_128Concat, T::CrossAccountId>,
Key<Twox64Concat, TokenId>,
),
Value = bool,
@@ -91,7 +91,7 @@
pub(super) type AccountBalance<T: Config> = StorageNMap<
Key = (
Key<Twox64Concat, CollectionId>,
- Key<Blake2_128Concat, T::AccountId>,
+ Key<Blake2_128Concat, T::CrossAccountId>,
),
Value = u32,
QueryKind = ValueQuery,
@@ -164,7 +164,7 @@
.ok_or_else(|| <CommonError<T>>::TokenNotFound)?;
ensure!(
&token_data.owner == sender
- || (collection.limits.owner_can_transfer
+ || (collection.limits.owner_can_transfer()
&& collection.is_owner_or_admin(sender)?),
<CommonError<T>>::NoPermission
);
@@ -179,7 +179,7 @@
// =========
- <Owned<T>>::remove((collection.id, token_data.owner.as_sub(), token));
+ <Owned<T>>::remove((collection.id, &token_data.owner, token));
<TokensBurnt<T>>::insert(collection.id, burnt);
<TokenData<T>>::remove((collection.id, token));
let old_spender = <Allowance<T>>::take((collection.id, token));
@@ -215,7 +215,7 @@
token: TokenId,
) -> DispatchResult {
ensure!(
- collection.transfers_enabled,
+ collection.limits.transfers_enabled(),
<CommonError<T>>::TransferNotAllowed
);
@@ -223,7 +223,8 @@
.ok_or_else(|| <CommonError<T>>::TokenNotFound)?;
ensure!(
&token_data.owner == from
- || (collection.limits.owner_can_transfer && collection.is_owner_or_admin(from)?),
+ || (collection.limits.owner_can_transfer()
+ && collection.is_owner_or_admin(from)?),
<CommonError<T>>::NoPermission
);
@@ -233,11 +234,11 @@
}
<PalletCommon<T>>::ensure_correct_receiver(to)?;
- let balance_from = <AccountBalance<T>>::get((collection.id, from.as_sub()))
+ let balance_from = <AccountBalance<T>>::get((collection.id, from))
.checked_sub(1)
.ok_or(<CommonError<T>>::TokenValueTooLow)?;
let balance_to = if from != to {
- let balance_to = <AccountBalance<T>>::get((collection.id, to.as_sub()))
+ let balance_to = <AccountBalance<T>>::get((collection.id, to))
.checked_add(1)
.ok_or(ArithmeticError::Overflow)?;
@@ -267,15 +268,15 @@
if let Some(balance_to) = balance_to {
// from != to
if balance_from == 0 {
- <AccountBalance<T>>::remove((collection.id, from.as_sub()));
+ <AccountBalance<T>>::remove((collection.id, from));
} else {
- <AccountBalance<T>>::insert((collection.id, from.as_sub()), balance_from);
+ <AccountBalance<T>>::insert((collection.id, from), balance_from);
}
- <AccountBalance<T>>::insert((collection.id, to.as_sub()), balance_to);
- <Owned<T>>::remove((collection.id, from.as_sub(), token));
- <Owned<T>>::insert((collection.id, to.as_sub(), token), true);
+ <AccountBalance<T>>::insert((collection.id, to), balance_to);
+ <Owned<T>>::remove((collection.id, from, token));
+ <Owned<T>>::insert((collection.id, to, token), true);
}
- Self::set_allowance_unchecked(collection, from, token, None);
+ Self::set_allowance_unchecked(collection, from, token, None, true);
collection.log_infallible(ERC721Events::Transfer {
from: *from.as_eth(),
@@ -327,7 +328,7 @@
.checked_add(data.len() as u32)
.ok_or(ArithmeticError::Overflow)?;
ensure!(
- tokens_minted < collection.limits.token_limit,
+ tokens_minted < collection.limits.token_limit(),
<CommonError<T>>::CollectionTokenLimitExceeded
);
collection.consume_sstore()?;
@@ -335,8 +336,8 @@
let mut balances = BTreeMap::new();
for data in &data {
let balance = balances
- .entry(data.owner.as_sub())
- .or_insert_with(|| <AccountBalance<T>>::get((collection.id, data.owner.as_sub())));
+ .entry(&data.owner)
+ .or_insert_with(|| <AccountBalance<T>>::get((collection.id, &data.owner)));
*balance = balance.checked_add(1).ok_or(ArithmeticError::Overflow)?;
ensure!(
@@ -363,7 +364,7 @@
owner: data.owner.clone(),
},
);
- <Owned<T>>::insert((collection.id, data.owner.as_sub(), token), true);
+ <Owned<T>>::insert((collection.id, &data.owner, token), true);
collection.log_infallible(ERC721Events::Transfer {
from: H160::default(),
@@ -385,6 +386,7 @@
sender: &T::CrossAccountId,
token: TokenId,
spender: Option<&T::CrossAccountId>,
+ assume_implicit_eth: bool,
) {
if let Some(spender) = spender {
let old_spender = <Allowance<T>>::get((collection.id, token));
@@ -418,13 +420,15 @@
}
} else {
let old_spender = <Allowance<T>>::take((collection.id, token));
- // In ERC721 there is only one possible approved user of token, so we set
- // approved user to zero address
- collection.log_infallible(ERC721Events::Approval {
- owner: *sender.as_eth(),
- approved: H160::default(),
- token_id: token.into(),
- });
+ if !assume_implicit_eth {
+ // In ERC721 there is only one possible approved user of token, so we set
+ // approved user to zero address
+ collection.log_infallible(ERC721Events::Approval {
+ owner: *sender.as_eth(),
+ approved: H160::default(),
+ token_id: token.into(),
+ });
+ }
// In Unique chain, any token can have any amount of approved users, so we need to
// set allowance of old owner to 0
if let Some(old_spender) = old_spender {
@@ -466,7 +470,7 @@
// =========
- Self::set_allowance_unchecked(collection, sender, token, spender);
+ Self::set_allowance_unchecked(collection, sender, token, spender, false);
Ok(())
}
@@ -477,7 +481,7 @@
to: &T::CrossAccountId,
token: TokenId,
) -> DispatchResult {
- if spender == from {
+ if spender.conv_eq(from) {
return Self::transfer(collection, from, to, token);
}
if collection.access == AccessMode::AllowList {
@@ -505,7 +509,7 @@
from: &T::CrossAccountId,
token: TokenId,
) -> DispatchResult {
- if spender == from {
+ if spender.conv_eq(from) {
return Self::burn(collection, from, token);
}
if collection.access == AccessMode::AllowList {
pallets/refungible/src/common.rsdiffbeforeafterboth--- a/pallets/refungible/src/common.rs
+++ b/pallets/refungible/src/common.rs
@@ -3,9 +3,7 @@
use sp_std::collections::btree_map::BTreeMap;
use frame_support::{dispatch::DispatchResultWithPostInfo, fail, weights::Weight};
use nft_data_structs::TokenId;
-use pallet_common::{
- CommonCollectionOperations, CommonWeightInfo, account::CrossAccountId, with_weight,
-};
+use pallet_common::{CommonCollectionOperations, CommonWeightInfo, with_weight};
use sp_runtime::DispatchError;
use sp_std::vec::Vec;
@@ -196,7 +194,7 @@
}
fn account_tokens(&self, account: T::CrossAccountId) -> Vec<TokenId> {
- <Owned<T>>::iter_prefix((self.id, account.as_sub()))
+ <Owned<T>>::iter_prefix((self.id, account))
.map(|(id, _)| id)
.collect()
}
@@ -224,11 +222,11 @@
}
fn account_balance(&self, account: T::CrossAccountId) -> u32 {
- <AccountBalance<T>>::get((self.id, account.as_sub()))
+ <AccountBalance<T>>::get((self.id, account))
}
fn balance(&self, account: T::CrossAccountId, token: TokenId) -> u128 {
- <Balance<T>>::get((self.id, token, account.as_sub()))
+ <Balance<T>>::get((self.id, token, account))
}
fn allowance(
@@ -237,6 +235,6 @@
spender: T::CrossAccountId,
token: TokenId,
) -> u128 {
- <Allowance<T>>::get((self.id, token, sender.as_sub(), spender))
+ <Allowance<T>>::get((self.id, token, sender, spender))
}
}
pallets/refungible/src/lib.rsdiffbeforeafterboth--- a/pallets/refungible/src/lib.rs
+++ b/pallets/refungible/src/lib.rs
@@ -83,7 +83,7 @@
pub(super) type Owned<T: Config> = StorageNMap<
Key = (
Key<Twox64Concat, CollectionId>,
- Key<Blake2_128Concat, T::AccountId>,
+ Key<Blake2_128Concat, T::CrossAccountId>,
Key<Twox64Concat, TokenId>,
),
Value = bool,
@@ -95,7 +95,7 @@
Key = (
Key<Twox64Concat, CollectionId>,
// Owner
- Key<Blake2_128Concat, T::AccountId>,
+ Key<Blake2_128Concat, T::CrossAccountId>,
),
Value = u32,
QueryKind = ValueQuery,
@@ -107,7 +107,7 @@
Key<Twox64Concat, CollectionId>,
Key<Twox64Concat, TokenId>,
// Owner
- Key<Blake2_128Concat, T::AccountId>,
+ Key<Blake2_128Concat, T::CrossAccountId>,
),
Value = u128,
QueryKind = ValueQuery,
@@ -119,7 +119,7 @@
Key<Twox64Concat, CollectionId>,
Key<Twox64Concat, TokenId>,
// Owner
- Key<Blake2_128, T::AccountId>,
+ Key<Blake2_128, T::CrossAccountId>,
// Spender
Key<Blake2_128Concat, T::CrossAccountId>,
),
@@ -206,18 +206,18 @@
if total_supply == 0 {
// Ensure user actually owns this amount
ensure!(
- <Balance<T>>::get((collection.id, token, owner.as_sub())) == amount,
+ <Balance<T>>::get((collection.id, token, owner)) == amount,
<CommonError<T>>::TokenValueTooLow
);
- let account_balance = <AccountBalance<T>>::get((collection.id, owner.as_sub()))
+ let account_balance = <AccountBalance<T>>::get((collection.id, owner))
.checked_sub(1)
// Should not occur
.ok_or(ArithmeticError::Underflow)?;
// =========
- <Owned<T>>::remove((collection.id, owner.as_sub(), token));
- <AccountBalance<T>>::insert((collection.id, owner.as_sub()), account_balance);
+ <Owned<T>>::remove((collection.id, owner, token));
+ <AccountBalance<T>>::insert((collection.id, owner), account_balance);
Self::burn_token(collection, token)?;
<PalletCommon<T>>::deposit_event(CommonEvent::ItemDestroyed(
collection.id,
@@ -228,11 +228,11 @@
return Ok(());
}
- let balance = <Balance<T>>::get((collection.id, token, owner.as_sub()))
+ let balance = <Balance<T>>::get((collection.id, token, owner))
.checked_sub(amount)
.ok_or(<CommonError<T>>::TokenValueTooLow)?;
let account_balance = if balance == 0 {
- <AccountBalance<T>>::get((collection.id, owner.as_sub()))
+ <AccountBalance<T>>::get((collection.id, owner))
.checked_sub(1)
// Should not occur
.ok_or(ArithmeticError::Underflow)?
@@ -243,11 +243,11 @@
// =========
if balance == 0 {
- <Owned<T>>::remove((collection.id, owner.as_sub(), token));
- <Balance<T>>::remove((collection.id, token, owner.as_sub()));
- <AccountBalance<T>>::insert((collection.id, owner.as_sub()), account_balance);
+ <Owned<T>>::remove((collection.id, owner, token));
+ <Balance<T>>::remove((collection.id, token, owner));
+ <AccountBalance<T>>::insert((collection.id, owner), account_balance);
} else {
- <Balance<T>>::insert((collection.id, token, owner.as_sub()), balance);
+ <Balance<T>>::insert((collection.id, token, owner), balance);
}
<TotalSupply<T>>::insert((collection.id, token), total_supply);
// TODO: ERC20 transfer event
@@ -268,7 +268,7 @@
amount: u128,
) -> DispatchResult {
ensure!(
- collection.transfers_enabled,
+ collection.limits.transfers_enabled(),
<CommonError<T>>::TransferNotAllowed
);
@@ -278,13 +278,13 @@
}
<PalletCommon<T>>::ensure_correct_receiver(to)?;
- let balance_from = <Balance<T>>::get((collection.id, token, from.as_sub()))
+ let balance_from = <Balance<T>>::get((collection.id, token, from))
.checked_sub(amount)
.ok_or(<CommonError<T>>::TokenValueTooLow)?;
let mut create_target = false;
let from_to_differ = from != to;
let balance_to = if from != to {
- let old_balance = <Balance<T>>::get((collection.id, token, to.as_sub()));
+ let old_balance = <Balance<T>>::get((collection.id, token, to));
if old_balance == 0 {
create_target = true;
}
@@ -299,7 +299,7 @@
let account_balance_from = if balance_from == 0 {
Some(
- <AccountBalance<T>>::get((collection.id, from.as_sub()))
+ <AccountBalance<T>>::get((collection.id, from))
.checked_sub(1)
// Should not occur
.ok_or(ArithmeticError::Underflow)?,
@@ -310,7 +310,7 @@
// Account data is created in token, AccountBalance should be increased
// But only if from != to as we shouldn't check overflow in this case
let account_balance_to = if create_target && from_to_differ {
- let account_balance_to = <AccountBalance<T>>::get((collection.id, to.as_sub()))
+ let account_balance_to = <AccountBalance<T>>::get((collection.id, to))
.checked_add(1)
.ok_or(ArithmeticError::Overflow)?;
ensure!(
@@ -328,18 +328,18 @@
if let Some(balance_to) = balance_to {
// from != to
if balance_from == 0 {
- <Balance<T>>::remove((collection.id, token, from.as_sub()));
+ <Balance<T>>::remove((collection.id, token, from));
} else {
- <Balance<T>>::insert((collection.id, token, from.as_sub()), balance_from);
+ <Balance<T>>::insert((collection.id, token, from), balance_from);
}
- <Balance<T>>::insert((collection.id, token, to.as_sub()), balance_to);
+ <Balance<T>>::insert((collection.id, token, to), balance_to);
if let Some(account_balance_from) = account_balance_from {
- <AccountBalance<T>>::insert((collection.id, from.as_sub()), account_balance_from);
- <Owned<T>>::remove((collection.id, from.as_sub(), token));
+ <AccountBalance<T>>::insert((collection.id, from), account_balance_from);
+ <Owned<T>>::remove((collection.id, from, token));
}
if let Some(account_balance_to) = account_balance_to {
- <AccountBalance<T>>::insert((collection.id, to.as_sub()), account_balance_to);
- <Owned<T>>::insert((collection.id, to.as_sub(), token), true);
+ <AccountBalance<T>>::insert((collection.id, to), account_balance_to);
+ <Owned<T>>::insert((collection.id, to, token), true);
}
}
@@ -404,7 +404,7 @@
.checked_add(data.len() as u32)
.ok_or(ArithmeticError::Overflow)?;
ensure!(
- tokens_minted < collection.limits.token_limit,
+ tokens_minted < collection.limits.token_limit(),
<CommonError<T>>::CollectionTokenLimitExceeded
);
@@ -412,8 +412,8 @@
for data in &data {
for (owner, _) in &data.users {
let balance = balances
- .entry(owner.as_sub())
- .or_insert_with(|| <AccountBalance<T>>::get((collection.id, owner.as_sub())));
+ .entry(owner)
+ .or_insert_with(|| <AccountBalance<T>>::get((collection.id, owner)));
*balance = balance.checked_add(1).ok_or(ArithmeticError::Overflow)?;
ensure!(
@@ -444,8 +444,8 @@
if amount == 0 {
continue;
}
- <Balance<T>>::insert((collection.id, token_id, user.as_sub()), amount);
- <Owned<T>>::insert((collection.id, user.as_sub(), TokenId(token_id)), true);
+ <Balance<T>>::insert((collection.id, token_id, &user), amount);
+ <Owned<T>>::insert((collection.id, &user, TokenId(token_id)), true);
// TODO: ERC20 transfer event
<PalletCommon<T>>::deposit_event(CommonEvent::ItemCreated(
collection.id,
@@ -465,7 +465,7 @@
token: TokenId,
amount: u128,
) {
- <Allowance<T>>::insert((collection.id, token, sender.as_sub(), spender), amount);
+ <Allowance<T>>::insert((collection.id, token, sender, spender), amount);
// TODO: ERC20 approval event
<PalletCommon<T>>::deposit_event(CommonEvent::Approved(
collection.id,
@@ -490,9 +490,9 @@
<PalletCommon<T>>::ensure_correct_receiver(spender)?;
- if <Balance<T>>::get((collection.id, token, sender.as_sub())) < amount {
+ if <Balance<T>>::get((collection.id, token, sender)) < amount {
ensure!(
- collection.ignores_owned_amount(sender)?,
+ collection.ignores_owned_amount(sender)? && Self::token_exists(collection, token),
<CommonError<T>>::CantApproveMoreThanOwned
);
}
@@ -511,7 +511,7 @@
token: TokenId,
amount: u128,
) -> DispatchResult {
- if spender == from {
+ if spender.conv_eq(from) {
return Self::transfer(collection, from, to, token, amount);
}
if collection.access == AccessMode::AllowList {
@@ -519,8 +519,8 @@
collection.check_allowlist(spender)?;
}
- let allowance = <Allowance<T>>::get((collection.id, token, from.as_sub(), &spender))
- .checked_sub(amount);
+ let allowance =
+ <Allowance<T>>::get((collection.id, token, from, &spender)).checked_sub(amount);
if allowance.is_none() {
ensure!(
collection.ignores_allowance(spender)?,
@@ -544,7 +544,7 @@
token: TokenId,
amount: u128,
) -> DispatchResult {
- if spender == from {
+ if spender.conv_eq(from) {
return Self::burn(collection, from, token, amount);
}
if collection.access == AccessMode::AllowList {
@@ -552,8 +552,8 @@
collection.check_allowlist(spender)?;
}
- let allowance = <Allowance<T>>::get((collection.id, token, from.as_sub(), &spender))
- .checked_sub(amount);
+ let allowance =
+ <Allowance<T>>::get((collection.id, token, from, &spender)).checked_sub(amount);
if allowance.is_none() {
ensure!(
collection.ignores_allowance(spender)?,
primitives/nft/src/lib.rsdiffbeforeafterboth--- a/primitives/nft/src/lib.rs
+++ b/primitives/nft/src/lib.rs
@@ -41,7 +41,8 @@
} else {
10
};
-pub const COLLECTION_ADMINS_LIMIT: u64 = 5;
+pub const COLLECTION_ADMINS_LIMIT: u32 = 5;
+pub const COLLECTION_TOKEN_LIMIT: u32 = u32::MAX;
pub const ACCOUNT_TOKEN_OWNERSHIP_LIMIT: u32 = if cfg!(not(feature = "limit-testing")) {
1000000
} else {
@@ -217,11 +218,10 @@
pub offchain_schema: Vec<u8>,
pub schema_version: SchemaVersion,
pub sponsorship: SponsorshipState<T::AccountId>,
- pub limits: CollectionLimits<T::BlockNumber>, // Collection private restrictions
- pub variable_on_chain_schema: Vec<u8>, //
- pub const_on_chain_schema: Vec<u8>, //
+ pub limits: CollectionLimits, // Collection private restrictions
+ pub variable_on_chain_schema: Vec<u8>, //
+ pub const_on_chain_schema: Vec<u8>, //
pub meta_update_permission: MetaUpdatePermission,
- pub transfers_enabled: bool,
}
#[derive(Encode, Decode, Debug, Clone, PartialEq, TypeInfo)]
@@ -246,42 +246,57 @@
pub variable_data: Vec<u8>,
}
-#[derive(Encode, Decode, Debug, Clone, PartialEq, TypeInfo)]
+#[derive(Encode, Decode, Debug, Default, Clone, PartialEq, TypeInfo)]
#[cfg_attr(feature = "serde1", derive(Serialize, Deserialize))]
-pub struct CollectionLimits<BlockNumber: Encode + Decode> {
+pub struct CollectionLimits {
pub account_token_ownership_limit: Option<u32>,
- pub sponsored_data_size: u32,
+ pub sponsored_data_size: Option<u32>,
/// None - setVariableMetadata is not sponsored
/// Some(v) - setVariableMetadata is sponsored
/// if there is v block between txs
- pub sponsored_data_rate_limit: Option<BlockNumber>,
- pub token_limit: u32,
+ pub sponsored_data_rate_limit: Option<u32>,
+ pub token_limit: Option<u32>,
// Timeouts for item types in passed blocks
- pub sponsor_transfer_timeout: u32,
- pub owner_can_transfer: bool,
- pub owner_can_destroy: bool,
+ pub sponsor_transfer_timeout: Option<u32>,
+ pub owner_can_transfer: Option<bool>,
+ pub owner_can_destroy: Option<bool>,
+ pub transfers_enabled: Option<bool>,
}
-impl<BlockNumber: Encode + Decode> CollectionLimits<BlockNumber> {
+impl CollectionLimits {
pub fn account_token_ownership_limit(&self) -> u32 {
self.account_token_ownership_limit
.unwrap_or(ACCOUNT_TOKEN_OWNERSHIP_LIMIT)
- .min(ACCOUNT_TOKEN_OWNERSHIP_LIMIT)
+ .min(MAX_TOKEN_OWNERSHIP)
}
-}
-
-impl<BlockNumber: Encode + Decode> Default for CollectionLimits<BlockNumber> {
- fn default() -> Self {
- Self {
- account_token_ownership_limit: Some(10_000_000),
- token_limit: u32::max_value(),
- sponsored_data_size: u32::MAX,
- sponsored_data_rate_limit: None,
- sponsor_transfer_timeout: 14400,
- owner_can_transfer: true,
- owner_can_destroy: true,
- }
+ pub fn sponsored_data_size(&self) -> u32 {
+ self.sponsored_data_size
+ .unwrap_or(CUSTOM_DATA_LIMIT)
+ .min(CUSTOM_DATA_LIMIT)
+ }
+ pub fn token_limit(&self) -> u32 {
+ self.token_limit
+ .unwrap_or(COLLECTION_TOKEN_LIMIT)
+ .min(COLLECTION_TOKEN_LIMIT)
+ }
+ pub fn sponsor_transfer_timeout(&self, default: u32) -> u32 {
+ self.sponsor_transfer_timeout
+ .unwrap_or(default)
+ .min(MAX_SPONSOR_TIMEOUT)
+ }
+ pub fn owner_can_transfer(&self) -> bool {
+ self.owner_can_transfer.unwrap_or(true)
+ }
+ pub fn owner_can_destroy(&self) -> bool {
+ self.owner_can_destroy.unwrap_or(true)
+ }
+ pub fn transfers_enabled(&self) -> bool {
+ self.transfers_enabled.unwrap_or(true)
+ }
+ pub fn sponsored_data_rate_limit(&self) -> Option<u32> {
+ self.sponsored_data_rate_limit
+ .map(|v| v.min(MAX_SPONSOR_TIMEOUT))
}
}
primitives/rpc/src/lib.rsdiffbeforeafterboth--- a/primitives/rpc/src/lib.rs
+++ b/primitives/rpc/src/lib.rs
@@ -30,8 +30,8 @@
/// Used for ethereum integration
fn eth_contract_code(account: H160) -> Option<Vec<u8>>;
- fn adminlist(collection: CollectionId) -> Vec<AccountId>;
- fn allowlist(collection: CollectionId) -> Vec<AccountId>;
+ fn adminlist(collection: CollectionId) -> Vec<CrossAccountId>;
+ fn allowlist(collection: CollectionId) -> Vec<CrossAccountId>;
fn last_token_id(collection: CollectionId) -> TokenId;
}
}
runtime/src/lib.rsdiffbeforeafterboth--- a/runtime/src/lib.rs
+++ b/runtime/src/lib.rs
@@ -1035,12 +1035,14 @@
}
fn eth_contract_code(account: H160) -> Option<Vec<u8>> {
- <pallet_nft::NftErcSupport<Runtime>>::get_code(&account).or_else(|| <pallet_evm_migration::OnMethodCall<Runtime>>::get_code(&account)).or_else(|| <pallet_evm_contract_helpers::HelpersOnMethodCall<Self>>::get_code(&account))
+ <pallet_nft::NftErcSupport<Runtime>>::get_code(&account)
+ .or_else(|| <pallet_evm_migration::OnMethodCall<Runtime>>::get_code(&account))
+ .or_else(|| <pallet_evm_contract_helpers::HelpersOnMethodCall<Self>>::get_code(&account))
}
- fn adminlist(collection: CollectionId) -> Vec<AccountId> {
+ fn adminlist(collection: CollectionId) -> Vec<CrossAccountId> {
<pallet_nft::Pallet<Runtime>>::adminlist(collection)
}
- fn allowlist(collection: CollectionId) -> Vec<AccountId> {
+ fn allowlist(collection: CollectionId) -> Vec<CrossAccountId> {
<pallet_nft::Pallet<Runtime>>::allowlist(collection)
}
fn last_token_id(collection: CollectionId) -> TokenId {
tests/.eslintrc.jsondiffbeforeafterboth--- a/tests/.eslintrc.json
+++ b/tests/.eslintrc.json
@@ -63,6 +63,41 @@
{
"destructuring": "all"
}
+ ],
+ "object-curly-spacing": "warn",
+ "arrow-spacing": "warn",
+ "array-bracket-spacing": "warn",
+ "template-curly-spacing": "warn",
+ "space-in-parens": "warn",
+ "@typescript-eslint/naming-convention": [
+ "warn",
+ {
+ "selector": "default",
+ "format": [
+ "camelCase"
+ ],
+ "leadingUnderscore": "allow",
+ "trailingUnderscore": "allow"
+ },
+ {
+ "selector": "variable",
+ "format": [
+ "camelCase",
+ "UPPER_CASE"
+ ],
+ "leadingUnderscore": "allow",
+ "trailingUnderscore": "allow"
+ },
+ {
+ "selector": "typeLike",
+ "format": [
+ "PascalCase"
+ ]
+ },
+ {
+ "selector": "memberLike",
+ "format": null
+ }
]
}
-}
\ No newline at end of file
+}
tests/package.jsondiffbeforeafterboth--- a/tests/package.json
+++ b/tests/package.json
@@ -4,15 +4,15 @@
"description": "Substrate Nft tests",
"main": "",
"devDependencies": {
- "@polkadot/dev": "0.63.9",
+ "@polkadot/dev": "0.63.18",
"@polkadot/ts": "0.4.12",
- "@polkadot/typegen": "6.5.2-3",
+ "@polkadot/typegen": "6.6.2-5",
"@types/chai": "^4.2.22",
"@types/chai-as-promised": "^7.1.4",
"@types/mocha": "^9.0.0",
- "@types/node": "^16.11.4",
- "@typescript-eslint/eslint-plugin": "^5.1.0",
- "@typescript-eslint/parser": "^5.1.0",
+ "@types/node": "^16.11.6",
+ "@typescript-eslint/eslint-plugin": "^5.3.0",
+ "@typescript-eslint/parser": "^5.3.0",
"chai": "^4.3.4",
"eslint": "^8.1.0",
"mocha": "^9.1.3",
@@ -29,6 +29,7 @@
"fix": "eslint --ext .ts,.js src/ --fix",
"test": "mocha --timeout 9999999 -r ts-node/register './**/*.test.ts'",
"testEth": "mocha --timeout 9999999 -r ts-node/register './**/eth/**/*.test.ts'",
+ "testEthMarketplace": "mocha --timeout 9999999 -r ts-node/register './**/eth/marketplace/**/*.test.ts'",
"load": "mocha --timeout 9999999 -r ts-node/register './**/*.load.ts'",
"loadTransfer": "ts-node src/transfer.nload.ts",
"testCollision": "mocha --timeout 9999999 -r ts-node/register ./src/collision-tests/*.test.ts",
@@ -65,15 +66,18 @@
"testInflation": "mocha --timeout 9999999 -r ts-node/register ./**/inflation.test.ts",
"testPalletPresence": "mocha --timeout 9999999 -r ts-node/register ./**/pallet-presence.test.ts",
"testBlockProduction": "mocha --timeout 9999999 -r ts-node/register ./**/block-production.test.ts",
- "testEnableDisableTransfers": "mocha --timeout 9999999 -r ts-node/register ./**/enableDisableTransfer.test.ts"
+ "testEnableDisableTransfers": "mocha --timeout 9999999 -r ts-node/register ./**/enableDisableTransfer.test.ts",
+ "polkadot-types-from-defs": "ts-node ./node_modules/.bin/polkadot-types-from-defs --input src/interfaces/ --package .",
+ "polkadot-types-from-chain": "ts-node ./node_modules/.bin/polkadot-types-from-chain --endpoint ws://localhost:9944 --output src/interfaces/ --package .",
+ "polkadot-types": "yarn polkadot-types-from-defs && yarn polkadot-types-from-chain"
},
"author": "",
"license": "SEE LICENSE IN ../LICENSE",
"homepage": "",
"dependencies": {
- "@polkadot/api": "6.5.1",
- "@polkadot/api-contract": "6.5.1",
- "@polkadot/util-crypto": "^7.6.1",
+ "@polkadot/api": "6.6.2-5",
+ "@polkadot/api-contract": "6.6.2-5",
+ "@polkadot/util-crypto": "^7.7.1",
"bignumber.js": "^9.0.1",
"chai-as-promised": "^7.1.1",
"solc": "^0.8.9",
tests/src/addCollectionAdmin.test.tsdiffbeforeafterboth--- a/tests/src/addCollectionAdmin.test.ts
+++ b/tests/src/addCollectionAdmin.test.ts
@@ -3,12 +3,12 @@
// file 'LICENSE', which is part of this source code package.
//
-import { ApiPromise } from '@polkadot/api';
+import {ApiPromise} from '@polkadot/api';
import chai from 'chai';
import chaiAsPromised from 'chai-as-promised';
import privateKey from './substrate/privateKey';
-import { default as usingApi, submitTransactionAsync, submitTransactionExpectFailAsync } from './substrate/substrate-api';
-import {createCollectionExpectSuccess, destroyCollectionExpectSuccess, normalizeAccountId} from './util/helpers';
+import {default as usingApi, submitTransactionAsync, submitTransactionExpectFailAsync} from './substrate/substrate-api';
+import {addCollectionAdminExpectSuccess, createCollectionExpectSuccess, destroyCollectionExpectSuccess, getAdminList, normalizeAccountId} from './util/helpers';
chai.use(chaiAsPromised);
const expect = chai.expect;
@@ -20,38 +20,38 @@
const alice = privateKey('//Alice');
const bob = privateKey('//Bob');
- const collection: any = (await api.query.nft.collectionById(collectionId)).toJSON();
- expect(collection.owner).to.be.equal(alice.address);
+ const collection = (await api.query.common.collectionById(collectionId)).unwrap();
+ expect(collection.owner.toString()).to.be.equal(alice.address);
const changeAdminTx = api.tx.nft.addCollectionAdmin(collectionId, normalizeAccountId(bob.address));
await submitTransactionAsync(alice, changeAdminTx);
- const adminListAfterAddAdmin: any = (await api.query.nft.adminList(collectionId));
- expect(adminListAfterAddAdmin).to.be.contains(normalizeAccountId(bob.address));
+ const adminListAfterAddAdmin = await getAdminList(api, collectionId);
+ expect(adminListAfterAddAdmin).to.be.deep.contains(normalizeAccountId(bob.address));
});
});
it('Add admin using added collection admin.', async () => {
await usingApi(async (api) => {
const collectionId = await createCollectionExpectSuccess();
- const Alice = privateKey('//Alice');
- const Bob = privateKey('//Bob');
- const Charlie = privateKey('//CHARLIE');
+ const alice = privateKey('//Alice');
+ const bob = privateKey('//Bob');
+ const charlie = privateKey('//CHARLIE');
- const collection: any = (await api.query.nft.collectionById(collectionId)).toJSON();
- expect(collection.owner).to.be.equal(Alice.address);
+ const collection = (await api.query.common.collectionById(collectionId)).unwrap();
+ expect(collection.owner.toString()).to.be.equal(alice.address);
- const changeAdminTx = api.tx.nft.addCollectionAdmin(collectionId, normalizeAccountId(Bob.address));
- await submitTransactionAsync(Alice, changeAdminTx);
+ const changeAdminTx = api.tx.nft.addCollectionAdmin(collectionId, normalizeAccountId(bob.address));
+ await submitTransactionAsync(alice, changeAdminTx);
- const adminListAfterAddAdmin: any = (await api.query.nft.adminList(collectionId));
- expect(adminListAfterAddAdmin).to.be.contains(normalizeAccountId(Bob.address));
+ const adminListAfterAddAdmin = await getAdminList(api, collectionId);
+ expect(adminListAfterAddAdmin).to.be.deep.contains(normalizeAccountId(bob.address));
- const changeAdminTxCharlie = api.tx.nft.addCollectionAdmin(collectionId, normalizeAccountId(Charlie.address));
- await submitTransactionAsync(Bob, changeAdminTxCharlie);
- const adminListAfterAddNewAdmin: any = (await api.query.nft.adminList(collectionId));
- expect(adminListAfterAddNewAdmin).to.be.contains(normalizeAccountId(Bob.address));
- expect(adminListAfterAddNewAdmin).to.be.contains(normalizeAccountId(Charlie.address));
+ const changeAdminTxCharlie = api.tx.nft.addCollectionAdmin(collectionId, normalizeAccountId(charlie.address));
+ await submitTransactionAsync(bob, changeAdminTxCharlie);
+ const adminListAfterAddNewAdmin = await getAdminList(api, collectionId);
+ expect(adminListAfterAddNewAdmin).to.be.deep.contains(normalizeAccountId(bob.address));
+ expect(adminListAfterAddNewAdmin).to.be.deep.contains(normalizeAccountId(charlie.address));
});
});
});
@@ -66,8 +66,8 @@
const changeAdminTx = api.tx.nft.addCollectionAdmin(collectionId, normalizeAccountId(alice.address));
await expect(submitTransactionExpectFailAsync(nonOwner, changeAdminTx)).to.be.rejected;
- const adminListAfterAddAdmin: any = (await api.query.nft.adminList(collectionId));
- expect(adminListAfterAddAdmin).not.to.be.contains(normalizeAccountId(alice.address));
+ const adminListAfterAddAdmin = await getAdminList(api, collectionId);
+ expect(adminListAfterAddAdmin).not.to.be.deep.contains(normalizeAccountId(alice.address));
// Verifying that nothing bad happened (network is live, new collections can be created, etc.)
await createCollectionExpectSuccess();
@@ -91,11 +91,11 @@
it("Can't add an admin to a destroyed collection.", async () => {
await usingApi(async (api) => {
const collectionId = await createCollectionExpectSuccess();
- const Alice = privateKey('//Alice');
- const Bob = privateKey('//Bob');
+ const alice = privateKey('//Alice');
+ const bob = privateKey('//Bob');
await destroyCollectionExpectSuccess(collectionId);
- const changeOwnerTx = api.tx.nft.addCollectionAdmin(collectionId, normalizeAccountId(Bob.address));
- await expect(submitTransactionExpectFailAsync(Alice, changeOwnerTx)).to.be.rejected;
+ const changeOwnerTx = api.tx.nft.addCollectionAdmin(collectionId, normalizeAccountId(bob.address));
+ await expect(submitTransactionExpectFailAsync(alice, changeOwnerTx)).to.be.rejected;
// Verifying that nothing bad happened (network is live, new collections can be created, etc.)
await createCollectionExpectSuccess();
@@ -104,30 +104,29 @@
it('Add an admin to a collection that has reached the maximum number of admins limit', async () => {
await usingApi(async (api: ApiPromise) => {
- const Alice = privateKey('//Alice');
+ const alice = privateKey('//Alice');
const accounts = [
- 'GsvVmjr1CBHwQHw84pPHMDxgNY3iBLz6Qn7qS3CH8qPhrHz',
- 'FoQJpPyadYccjavVdTWxpxU7rUEaYhfLCPwXgkfD6Zat9QP',
- 'JKspFU6ohf1Grg3Phdzj2pSgWvsYWzSfKghhfzMbdhNBWs5',
- 'Fr4NzY1udSFFLzb2R3qxVQkwz9cZraWkyfH4h3mVVk7BK7P',
- 'DfnTB4z7eUvYRqcGtTpFsLC69o6tvBSC1pEv8vWPZFtCkaK',
- 'HnMAUz7r2G8G3hB27SYNyit5aJmh2a5P4eMdDtACtMFDbam',
- 'DE14BzQ1bDXWPKeLoAqdLAm1GpyAWaWF1knF74cEZeomTBM',
+ privateKey('//AdminTest/1').address,
+ privateKey('//AdminTest/2').address,
+ privateKey('//AdminTest/3').address,
+ privateKey('//AdminTest/4').address,
+ privateKey('//AdminTest/5').address,
+ privateKey('//AdminTest/6').address,
+ privateKey('//AdminTest/7').address,
];
const collectionId = await createCollectionExpectSuccess();
- const chainAdminLimit = (api.consts.nft.collectionAdminsLimit as any).toNumber();
+ const chainAdminLimit = api.consts.common.collectionAdminsLimit.toNumber();
expect(chainAdminLimit).to.be.equal(5);
for (let i = 0; i < chainAdminLimit; i++) {
- const changeAdminTx = api.tx.nft.addCollectionAdmin(collectionId, normalizeAccountId(accounts[i]));
- await submitTransactionAsync(Alice, changeAdminTx);
- const adminListAfterAddAdmin: any = (await api.query.nft.adminList(collectionId));
- expect(adminListAfterAddAdmin).to.be.contains(normalizeAccountId(accounts[i]));
+ await addCollectionAdminExpectSuccess(alice, collectionId, accounts[i]);
+ const adminListAfterAddAdmin = await getAdminList(api, collectionId);
+ expect(adminListAfterAddAdmin).to.be.deep.contains(normalizeAccountId(accounts[i]));
}
const tx = api.tx.nft.addCollectionAdmin(collectionId, normalizeAccountId(accounts[chainAdminLimit]));
- await expect(submitTransactionExpectFailAsync(Alice, tx)).to.be.rejected;
+ await expect(submitTransactionExpectFailAsync(alice, tx)).to.be.rejected;
});
});
});
tests/src/addToContractWhiteList.test.tsdiffbeforeafterboth--- a/tests/src/addToContractWhiteList.test.ts
+++ b/tests/src/addToContractWhiteList.test.ts
@@ -5,7 +5,7 @@
import chai from 'chai';
import chaiAsPromised from 'chai-as-promised';
-import usingApi, { submitTransactionAsync, submitTransactionExpectFailAsync } from './substrate/substrate-api';
+import usingApi, {submitTransactionAsync, submitTransactionExpectFailAsync} from './substrate/substrate-api';
import privateKey from './substrate/privateKey';
import {
deployFlipper,
tests/src/addToWhiteList.test.tsdiffbeforeafterboth--- a/tests/src/addToWhiteList.test.ts
+++ b/tests/src/addToWhiteList.test.ts
@@ -3,11 +3,11 @@
// file 'LICENSE', which is part of this source code package.
//
-import { IKeyringPair } from '@polkadot/types/types';
+import {IKeyringPair} from '@polkadot/types/types';
import chai from 'chai';
import chaiAsPromised from 'chai-as-promised';
import privateKey from './substrate/privateKey';
-import usingApi, { submitTransactionExpectFailAsync } from './substrate/substrate-api';
+import usingApi, {submitTransactionExpectFailAsync} from './substrate/substrate-api';
import {
addToWhiteListExpectSuccess,
createCollectionExpectSuccess,
@@ -23,30 +23,30 @@
chai.use(chaiAsPromised);
const expect = chai.expect;
-let Alice: IKeyringPair;
-let Bob: IKeyringPair;
-let Charlie: IKeyringPair;
+let alice: IKeyringPair;
+let bob: IKeyringPair;
+let charlie: IKeyringPair;
describe('Integration Test ext. addToWhiteList()', () => {
before(async () => {
await usingApi(async () => {
- Alice = privateKey('//Alice');
- Bob = privateKey('//Bob');
+ alice = privateKey('//Alice');
+ bob = privateKey('//Bob');
});
});
it('Execute the extrinsic with parameters: Collection ID and address to add to the white list', async () => {
const collectionId = await createCollectionExpectSuccess();
- await addToWhiteListExpectSuccess(Alice, collectionId, Bob.address);
+ await addToWhiteListExpectSuccess(alice, collectionId, bob.address);
});
it('Whitelisted minting: list restrictions', async () => {
const collectionId = await createCollectionExpectSuccess();
- await addToWhiteListExpectSuccess(Alice, collectionId, Bob.address);
- await enableWhiteListExpectSuccess(Alice, collectionId);
- await enablePublicMintingExpectSuccess(Alice, collectionId);
- await createItemExpectSuccess(Bob, collectionId, 'NFT', Bob.address);
+ await addToWhiteListExpectSuccess(alice, collectionId, bob.address);
+ await enableWhiteListExpectSuccess(alice, collectionId);
+ await enablePublicMintingExpectSuccess(alice, collectionId);
+ await createItemExpectSuccess(bob, collectionId, 'NFT', bob.address);
});
});
@@ -55,35 +55,35 @@
it('White list an address in the collection that does not exist', async () => {
await usingApi(async (api) => {
// tslint:disable-next-line: no-bitwise
- const collectionId = parseInt((await api.query.nft.createdCollectionCount()).toString()) + 1;
- const Bob = privateKey('//Bob');
+ const collectionId = ((await api.query.common.createdCollectionCount()).toNumber()) + 1;
+ const bob = privateKey('//Bob');
- const tx = api.tx.nft.addToWhiteList(collectionId, normalizeAccountId(Bob.address));
- await expect(submitTransactionExpectFailAsync(Alice, tx)).to.be.rejected;
+ const tx = api.tx.nft.addToWhiteList(collectionId, normalizeAccountId(bob.address));
+ await expect(submitTransactionExpectFailAsync(alice, tx)).to.be.rejected;
});
});
it('White list an address in the collection that was destroyed', async () => {
await usingApi(async (api) => {
- const Alice = privateKey('//Alice');
- const Bob = privateKey('//Bob');
+ const alice = privateKey('//Alice');
+ const bob = privateKey('//Bob');
// tslint:disable-next-line: no-bitwise
const collectionId = await createCollectionExpectSuccess();
await destroyCollectionExpectSuccess(collectionId);
- const tx = api.tx.nft.addToWhiteList(collectionId, normalizeAccountId(Bob.address));
- await expect(submitTransactionExpectFailAsync(Alice, tx)).to.be.rejected;
+ const tx = api.tx.nft.addToWhiteList(collectionId, normalizeAccountId(bob.address));
+ await expect(submitTransactionExpectFailAsync(alice, tx)).to.be.rejected;
});
});
it('White list an address in the collection that does not have white list access enabled', async () => {
await usingApi(async (api) => {
- const Alice = privateKey('//Alice');
- const Ferdie = privateKey('//Ferdie');
+ const alice = privateKey('//Alice');
+ const ferdie = privateKey('//Ferdie');
const collectionId = await createCollectionExpectSuccess();
- await enableWhiteListExpectSuccess(Alice, collectionId);
- await enablePublicMintingExpectSuccess(Alice, collectionId);
- const tx = api.tx.nft.createItem(collectionId, normalizeAccountId(Ferdie.address), 'NFT');
- await expect(submitTransactionExpectFailAsync(Ferdie, tx)).to.be.rejected;
+ await enableWhiteListExpectSuccess(alice, collectionId);
+ await enablePublicMintingExpectSuccess(alice, collectionId);
+ const tx = api.tx.nft.createItem(collectionId, normalizeAccountId(ferdie.address), 'NFT');
+ await expect(submitTransactionExpectFailAsync(ferdie, tx)).to.be.rejected;
});
});
@@ -93,32 +93,32 @@
before(async () => {
await usingApi(async () => {
- Alice = privateKey('//Alice');
- Bob = privateKey('//Bob');
- Charlie = privateKey('//Charlie');
+ alice = privateKey('//Alice');
+ bob = privateKey('//Bob');
+ charlie = privateKey('//Charlie');
});
});
it('Negative. Add to the white list by regular user', async () => {
const collectionId = await createCollectionExpectSuccess();
- await addToWhiteListExpectFail(Bob, collectionId, Charlie.address);
+ await addToWhiteListExpectFail(bob, collectionId, charlie.address);
});
it('Execute the extrinsic with parameters: Collection ID and address to add to the white list', async () => {
const collectionId = await createCollectionExpectSuccess();
- await addCollectionAdminExpectSuccess(Alice, collectionId, Bob);
- await addToWhiteListExpectSuccess(Bob, collectionId, Charlie.address);
+ await addCollectionAdminExpectSuccess(alice, collectionId, bob.address);
+ await addToWhiteListExpectSuccess(bob, collectionId, charlie.address);
});
it('Whitelisted minting: list restrictions', async () => {
const collectionId = await createCollectionExpectSuccess();
- await addCollectionAdminExpectSuccess(Alice, collectionId, Bob);
- await addToWhiteListExpectSuccess(Bob, collectionId, Charlie.address);
+ await addCollectionAdminExpectSuccess(alice, collectionId, bob.address);
+ await addToWhiteListExpectSuccess(bob, collectionId, charlie.address);
// allowed only for collection owner
- await enableWhiteListExpectSuccess(Alice, collectionId);
- await enablePublicMintingExpectSuccess(Alice, collectionId);
+ await enableWhiteListExpectSuccess(alice, collectionId);
+ await enablePublicMintingExpectSuccess(alice, collectionId);
- await createItemExpectSuccess(Charlie, collectionId, 'NFT', Charlie.address);
+ await createItemExpectSuccess(charlie, collectionId, 'NFT', charlie.address);
});
-});
\ No newline at end of file
+});
tests/src/approve.test.tsdiffbeforeafterboth--- a/tests/src/approve.test.ts
+++ b/tests/src/approve.test.ts
@@ -2,12 +2,12 @@
// This file is subject to the terms and conditions defined in
// file 'LICENSE', which is part of this source code package.
//
-import { IKeyringPair } from '@polkadot/types/types';
-import { ApiPromise } from '@polkadot/api';
+import {IKeyringPair} from '@polkadot/types/types';
+import {ApiPromise} from '@polkadot/api';
import chai from 'chai';
import chaiAsPromised from 'chai-as-promised';
import privateKey from './substrate/privateKey';
-import { default as usingApi } from './substrate/substrate-api';
+import {default as usingApi} from './substrate/substrate-api';
import {
approveExpectFail,
approveExpectSuccess,
@@ -17,90 +17,91 @@
setCollectionLimitsExpectSuccess,
transferExpectSuccess,
addCollectionAdminExpectSuccess,
+ adminApproveFromExpectSuccess,
} from './util/helpers';
chai.use(chaiAsPromised);
describe('Integration Test approve(spender, collection_id, item_id, amount):', () => {
- let Alice: IKeyringPair;
- let Bob: IKeyringPair;
- let Charlie: IKeyringPair;
+ let alice: IKeyringPair;
+ let bob: IKeyringPair;
+ let charlie: IKeyringPair;
before(async () => {
await usingApi(async () => {
- Alice = privateKey('//Alice');
- Bob = privateKey('//Bob');
- Charlie = privateKey('//Charlie');
+ alice = privateKey('//Alice');
+ bob = privateKey('//Bob');
+ charlie = privateKey('//Charlie');
});
});
it('Execute the extrinsic and check approvedList', async () => {
const nftCollectionId = await createCollectionExpectSuccess();
// nft
- const newNftTokenId = await createItemExpectSuccess(Alice, nftCollectionId, 'NFT');
- await approveExpectSuccess(nftCollectionId, newNftTokenId, Alice, Bob);
+ const newNftTokenId = await createItemExpectSuccess(alice, nftCollectionId, 'NFT');
+ await approveExpectSuccess(nftCollectionId, newNftTokenId, alice, bob.address);
// fungible
const fungibleCollectionId = await createCollectionExpectSuccess({mode: {type: 'Fungible', decimalPoints: 0}});
- const newFungibleTokenId = await createItemExpectSuccess(Alice, fungibleCollectionId, 'Fungible');
- await approveExpectSuccess(fungibleCollectionId, newFungibleTokenId, Alice, Bob);
+ const newFungibleTokenId = await createItemExpectSuccess(alice, fungibleCollectionId, 'Fungible');
+ await approveExpectSuccess(fungibleCollectionId, newFungibleTokenId, alice, bob.address);
// reFungible
const reFungibleCollectionId =
await createCollectionExpectSuccess({mode: {type: 'ReFungible'}});
- const newReFungibleTokenId = await createItemExpectSuccess(Alice, reFungibleCollectionId, 'ReFungible');
- await approveExpectSuccess(reFungibleCollectionId, newReFungibleTokenId, Alice, Bob);
+ const newReFungibleTokenId = await createItemExpectSuccess(alice, reFungibleCollectionId, 'ReFungible');
+ await approveExpectSuccess(reFungibleCollectionId, newReFungibleTokenId, alice, bob.address);
});
it('Remove approval by using 0 amount', async () => {
const nftCollectionId = await createCollectionExpectSuccess();
// nft
- const newNftTokenId = await createItemExpectSuccess(Alice, nftCollectionId, 'NFT');
- await approveExpectSuccess(nftCollectionId, newNftTokenId, Alice, Bob, 1);
- await approveExpectSuccess(nftCollectionId, newNftTokenId, Alice, Bob, 0);
+ const newNftTokenId = await createItemExpectSuccess(alice, nftCollectionId, 'NFT');
+ await approveExpectSuccess(nftCollectionId, newNftTokenId, alice, bob.address, 1);
+ await approveExpectSuccess(nftCollectionId, newNftTokenId, alice, bob.address, 0);
// fungible
const fungibleCollectionId = await createCollectionExpectSuccess({mode: {type: 'Fungible', decimalPoints: 0}});
- const newFungibleTokenId = await createItemExpectSuccess(Alice, fungibleCollectionId, 'Fungible');
- await approveExpectSuccess(fungibleCollectionId, newFungibleTokenId, Alice, Bob, 1);
- await approveExpectSuccess(fungibleCollectionId, newFungibleTokenId, Alice, Bob, 0);
+ const newFungibleTokenId = await createItemExpectSuccess(alice, fungibleCollectionId, 'Fungible');
+ await approveExpectSuccess(fungibleCollectionId, newFungibleTokenId, alice, bob.address, 1);
+ await approveExpectSuccess(fungibleCollectionId, newFungibleTokenId, alice, bob.address, 0);
// reFungible
const reFungibleCollectionId =
await createCollectionExpectSuccess({mode: {type: 'ReFungible'}});
- const newReFungibleTokenId = await createItemExpectSuccess(Alice, reFungibleCollectionId, 'ReFungible');
- await approveExpectSuccess(reFungibleCollectionId, newReFungibleTokenId, Alice, Bob, 1);
- await approveExpectSuccess(reFungibleCollectionId, newReFungibleTokenId, Alice, Bob, 0);
+ const newReFungibleTokenId = await createItemExpectSuccess(alice, reFungibleCollectionId, 'ReFungible');
+ await approveExpectSuccess(reFungibleCollectionId, newReFungibleTokenId, alice, bob.address, 1);
+ await approveExpectSuccess(reFungibleCollectionId, newReFungibleTokenId, alice, bob.address, 0);
});
it('can be called by collection owner on non-owned item when OwnerCanTransfer == true', async () => {
const collectionId = await createCollectionExpectSuccess();
- const itemId = await createItemExpectSuccess(Alice, collectionId, 'NFT', Bob.address);
+ const itemId = await createItemExpectSuccess(alice, collectionId, 'NFT', bob.address);
- await approveExpectSuccess(collectionId, itemId, Alice, Charlie);
+ await adminApproveFromExpectSuccess(collectionId, itemId, alice, bob.address, charlie.address);
});
});
describe('Negative Integration Test approve(spender, collection_id, item_id, amount):', () => {
- let Alice: IKeyringPair;
- let Bob: IKeyringPair;
- let Charlie: IKeyringPair;
+ let alice: IKeyringPair;
+ let bob: IKeyringPair;
+ let charlie: IKeyringPair;
before(async () => {
await usingApi(async () => {
- Alice = privateKey('//Alice');
- Bob = privateKey('//Bob');
- Charlie = privateKey('//Charlie');
+ alice = privateKey('//Alice');
+ bob = privateKey('//Bob');
+ charlie = privateKey('//Charlie');
});
});
it('Approve for a collection that does not exist', async () => {
await usingApi(async (api: ApiPromise) => {
// nft
- const nftCollectionCount = await api.query.nft.createdCollectionCount() as unknown as number;
- await approveExpectFail(nftCollectionCount + 1, 1, Alice, Bob);
+ const nftCollectionCount = (await api.query.common.createdCollectionCount()).toNumber();
+ await approveExpectFail(nftCollectionCount + 1, 1, alice, bob);
// fungible
- const fungibleCollectionCount = await api.query.nft.createdCollectionCount() as unknown as number;
- await approveExpectFail(fungibleCollectionCount + 1, 1, Alice, Bob);
+ const fungibleCollectionCount = (await api.query.common.createdCollectionCount()).toNumber();
+ await approveExpectFail(fungibleCollectionCount + 1, 0, alice, bob);
// reFungible
- const reFungibleCollectionCount = await api.query.nft.createdCollectionCount() as unknown as number;
- await approveExpectFail(reFungibleCollectionCount + 1, 1, Alice, Bob);
+ const reFungibleCollectionCount = (await api.query.common.createdCollectionCount()).toNumber();
+ await approveExpectFail(reFungibleCollectionCount + 1, 1, alice, bob);
});
});
@@ -108,95 +109,87 @@
// nft
const nftCollectionId = await createCollectionExpectSuccess();
await destroyCollectionExpectSuccess(nftCollectionId);
- await approveExpectFail(nftCollectionId, 1, Alice, Bob);
+ await approveExpectFail(nftCollectionId, 1, alice, bob);
// fungible
const fungibleCollectionId = await createCollectionExpectSuccess({mode: {type: 'Fungible', decimalPoints: 0}});
await destroyCollectionExpectSuccess(fungibleCollectionId);
- await approveExpectFail(fungibleCollectionId, 1, Alice, Bob);
+ await approveExpectFail(fungibleCollectionId, 0, alice, bob);
// reFungible
const reFungibleCollectionId =
await createCollectionExpectSuccess({mode: {type: 'ReFungible'}});
await destroyCollectionExpectSuccess(reFungibleCollectionId);
- await approveExpectFail(reFungibleCollectionId, 1, Alice, Bob);
+ await approveExpectFail(reFungibleCollectionId, 1, alice, bob);
});
it('Approve transfer of a token that does not exist', async () => {
// nft
const nftCollectionId = await createCollectionExpectSuccess();
- await approveExpectFail(nftCollectionId, 2, Alice, Bob);
+ await approveExpectFail(nftCollectionId, 2, alice, bob);
// reFungible
const reFungibleCollectionId =
await createCollectionExpectSuccess({mode: {type: 'ReFungible'}});
- await approveExpectFail(reFungibleCollectionId, 2, Alice, Bob);
+ await approveExpectFail(reFungibleCollectionId, 2, alice, bob);
});
it('Approve using the address that does not own the approved token', async () => {
const nftCollectionId = await createCollectionExpectSuccess();
// nft
- const newNftTokenId = await createItemExpectSuccess(Alice, nftCollectionId, 'NFT');
- await approveExpectFail(nftCollectionId, newNftTokenId, Bob, Alice);
+ const newNftTokenId = await createItemExpectSuccess(alice, nftCollectionId, 'NFT');
+ await approveExpectFail(nftCollectionId, newNftTokenId, bob, alice);
// fungible
const fungibleCollectionId = await createCollectionExpectSuccess({mode: {type: 'Fungible', decimalPoints: 0}});
- const newFungibleTokenId = await createItemExpectSuccess(Alice, fungibleCollectionId, 'Fungible');
- await approveExpectFail(fungibleCollectionId, newFungibleTokenId, Bob, Alice);
+ const newFungibleTokenId = await createItemExpectSuccess(alice, fungibleCollectionId, 'Fungible');
+ await approveExpectFail(fungibleCollectionId, newFungibleTokenId, bob, alice);
// reFungible
const reFungibleCollectionId =
await createCollectionExpectSuccess({mode: {type: 'ReFungible'}});
- const newReFungibleTokenId = await createItemExpectSuccess(Alice, reFungibleCollectionId, 'ReFungible');
- await approveExpectFail(reFungibleCollectionId, newReFungibleTokenId, Bob, Alice);
- });
-
- it('should fail if approved more NFTs than owned', async () => {
- const nftCollectionId = await createCollectionExpectSuccess({ mode: { type: 'NFT' } });
- const newNftTokenId = await createItemExpectSuccess(Alice, nftCollectionId, 'NFT');
- await transferExpectSuccess(nftCollectionId, newNftTokenId, Alice, Bob, 1, 'NFT');
- await approveExpectSuccess(nftCollectionId, newNftTokenId, Bob, Alice);
- await approveExpectFail(nftCollectionId, newNftTokenId, Bob, Alice);
+ const newReFungibleTokenId = await createItemExpectSuccess(alice, reFungibleCollectionId, 'ReFungible');
+ await approveExpectFail(reFungibleCollectionId, newReFungibleTokenId, bob, alice);
});
it('should fail if approved more ReFungibles than owned', async () => {
- const nftCollectionId = await createCollectionExpectSuccess({ mode: { type: 'ReFungible' } });
- const newNftTokenId = await createItemExpectSuccess(Alice, nftCollectionId, 'ReFungible');
- await transferExpectSuccess(nftCollectionId, newNftTokenId, Alice, Bob, 100, 'ReFungible');
- await approveExpectSuccess(nftCollectionId, newNftTokenId, Bob, Alice, 100);
- await approveExpectFail(nftCollectionId, newNftTokenId, Bob, Alice, 1);
+ const nftCollectionId = await createCollectionExpectSuccess({mode: {type: 'ReFungible'}});
+ const newNftTokenId = await createItemExpectSuccess(alice, nftCollectionId, 'ReFungible');
+ await transferExpectSuccess(nftCollectionId, newNftTokenId, alice, bob, 100, 'ReFungible');
+ await approveExpectSuccess(nftCollectionId, newNftTokenId, bob, alice.address, 100);
+ await approveExpectFail(nftCollectionId, newNftTokenId, bob, alice, 101);
});
it('should fail if approved more Fungibles than owned', async () => {
- const nftCollectionId = await createCollectionExpectSuccess({ mode: { type: 'Fungible', decimalPoints: 0 } });
- const newNftTokenId = await createItemExpectSuccess(Alice, nftCollectionId, 'Fungible');
- await transferExpectSuccess(nftCollectionId, newNftTokenId, Alice, Bob, 10, 'Fungible');
- await approveExpectSuccess(nftCollectionId, newNftTokenId, Bob, Alice, 10);
- await approveExpectFail(nftCollectionId, newNftTokenId, Bob, Alice, 1);
+ const nftCollectionId = await createCollectionExpectSuccess({mode: {type: 'Fungible', decimalPoints: 0}});
+ const newNftTokenId = await createItemExpectSuccess(alice, nftCollectionId, 'Fungible');
+ await transferExpectSuccess(nftCollectionId, newNftTokenId, alice, bob, 10, 'Fungible');
+ await approveExpectSuccess(nftCollectionId, newNftTokenId, bob, alice.address, 10);
+ await approveExpectFail(nftCollectionId, newNftTokenId, bob, alice, 11);
});
it('fails when called by collection owner on non-owned item when OwnerCanTransfer == false', async () => {
const collectionId = await createCollectionExpectSuccess();
- const itemId = await createItemExpectSuccess(Alice, collectionId, 'NFT', Bob.address);
- await setCollectionLimitsExpectSuccess(Alice, collectionId, { ownerCanTransfer: false });
+ const itemId = await createItemExpectSuccess(alice, collectionId, 'NFT', bob.address);
+ await setCollectionLimitsExpectSuccess(alice, collectionId, {ownerCanTransfer: false});
- await approveExpectFail(collectionId, itemId, Alice, Charlie);
+ await approveExpectFail(collectionId, itemId, alice, charlie);
});
});
describe('Integration Test approve(spender, collection_id, item_id, amount) with collection admin permissions:', () => {
- let Alice: IKeyringPair;
- let Bob: IKeyringPair;
- let Charlie: IKeyringPair;
+ let alice: IKeyringPair;
+ let bob: IKeyringPair;
+ let charlie: IKeyringPair;
before(async () => {
await usingApi(async () => {
- Alice = privateKey('//Alice');
- Bob = privateKey('//Bob');
- Charlie = privateKey('//Charlie');
+ alice = privateKey('//Alice');
+ bob = privateKey('//Bob');
+ charlie = privateKey('//Charlie');
});
});
it('can be called by collection admin on non-owned item', async () => {
const collectionId = await createCollectionExpectSuccess();
- const itemId = await createItemExpectSuccess(Alice, collectionId, 'NFT', Alice.address);
+ const itemId = await createItemExpectSuccess(alice, collectionId, 'NFT', alice.address);
- await addCollectionAdminExpectSuccess(Alice, collectionId, Bob);
- await approveExpectSuccess(collectionId, itemId, Bob, Charlie);
+ await addCollectionAdminExpectSuccess(alice, collectionId, bob.address);
+ await adminApproveFromExpectSuccess(collectionId, itemId, bob, alice.address, charlie.address);
});
});
tests/src/block-production.test.tsdiffbeforeafterboth--- a/tests/src/block-production.test.ts
+++ b/tests/src/block-production.test.ts
@@ -4,17 +4,17 @@
//
import usingApi from './substrate/substrate-api';
-import { expect } from 'chai';
-import { ApiPromise } from '@polkadot/api';
+import {expect} from 'chai';
+import {ApiPromise} from '@polkadot/api';
-const BlockTimeMs = 12000;
-const ToleranceMs = 1000;
+const BLOCK_TIME_MS = 12000;
+const TOLERANCE_MS = 3000;
/* eslint no-async-promise-executor: "off" */
function getBlocks(api: ApiPromise): Promise<number[]> {
return new Promise<number[]>(async (resolve, reject) => {
const blockNumbers: number[] = [];
- setTimeout(() => reject('Block production test failed due to timeout.'), BlockTimeMs + ToleranceMs);
+ setTimeout(() => reject('Block production test failed due to timeout.'), BLOCK_TIME_MS + TOLERANCE_MS);
const unsubscribe = await api.rpc.chain.subscribeNewHeads((head: any) => {
blockNumbers.push(head.number.toNumber());
if(blockNumbers.length >= 2) {
tests/src/burnItem.test.tsdiffbeforeafterboth--- a/tests/src/burnItem.test.ts
+++ b/tests/src/burnItem.test.ts
@@ -3,9 +3,9 @@
// file 'LICENSE', which is part of this source code package.
//
-import { default as usingApi, submitTransactionAsync, submitTransactionExpectFailAsync } from './substrate/substrate-api';
-import { Keyring } from '@polkadot/api';
-import { IKeyringPair } from '@polkadot/types/types';
+import {default as usingApi, submitTransactionAsync, submitTransactionExpectFailAsync} from './substrate/substrate-api';
+import {Keyring} from '@polkadot/api';
+import {IKeyringPair} from '@polkadot/types/types';
import {
createCollectionExpectSuccess,
createItemExpectSuccess,
@@ -13,6 +13,8 @@
destroyCollectionExpectSuccess,
normalizeAccountId,
addCollectionAdminExpectSuccess,
+ getBalance,
+ isTokenExists,
} from './util/helpers';
import chai from 'chai';
@@ -26,7 +28,7 @@
describe('integration test: ext. burnItem():', () => {
before(async () => {
await usingApi(async () => {
- const keyring = new Keyring({ type: 'sr25519' });
+ const keyring = new Keyring({type: 'sr25519'});
alice = keyring.addFromUri('//Alice');
bob = keyring.addFromUri('//Bob');
});
@@ -41,19 +43,16 @@
const tx = api.tx.nft.burnItem(collectionId, tokenId, 1);
const events = await submitTransactionAsync(alice, tx);
const result = getGenericResult(events);
- // Get the item
- const item: any = (await api.query.nft.nftItemList(collectionId, tokenId)).toJSON();
- // What to expect
- // tslint:disable-next-line:no-unused-expression
+
expect(result.success).to.be.true;
- // tslint:disable-next-line:no-unused-expression
- expect(item).to.be.null;
+ // Get the item
+ expect(await isTokenExists(api, collectionId, tokenId)).to.be.false;
});
});
it('Burn item in Fungible collection', async () => {
const createMode = 'Fungible';
- const collectionId = await createCollectionExpectSuccess({mode: {type: createMode, decimalPoints: 0 }});
+ const collectionId = await createCollectionExpectSuccess({mode: {type: createMode, decimalPoints: 0}});
await createItemExpectSuccess(alice, collectionId, createMode); // Helper creates 10 fungible tokens
const tokenId = 0; // ignored
@@ -64,18 +63,17 @@
const result = getGenericResult(events);
// Get alice balance
- const balance: any = (await api.query.nft.fungibleItemList(collectionId, alice.address)).toJSON();
+ const balance = await getBalance(api, collectionId, alice.address, 0);
// What to expect
expect(result.success).to.be.true;
- expect(balance).to.be.not.null;
- expect(balance.value).to.be.equal(9);
+ expect(balance).to.be.equal(9n);
});
});
it('Burn item in ReFungible collection', async () => {
const createMode = 'ReFungible';
- const collectionId = await createCollectionExpectSuccess({mode: {type: createMode }});
+ const collectionId = await createCollectionExpectSuccess({mode: {type: createMode}});
const tokenId = await createItemExpectSuccess(alice, collectionId, createMode);
await usingApi(async (api) => {
@@ -84,11 +82,11 @@
const result = getGenericResult(events);
// Get alice balance
- const balance: any = (await api.query.nft.reFungibleItemList(collectionId, tokenId)).toJSON();
+ const balance = await getBalance(api, collectionId, alice.address, tokenId);
// What to expect
expect(result.success).to.be.true;
- expect(balance).to.be.null;
+ expect(balance).to.be.equal(0n);
});
});
@@ -104,7 +102,8 @@
const result1 = getGenericResult(events1);
// Get balances
- const balanceBefore: any = (await api.query.nft.reFungibleItemList(collectionId, tokenId)).toJSON();
+ const bobBalanceBefore = await getBalance(api, collectionId, bob.address, tokenId);
+ const aliceBalanceBefore = await getBalance(api, collectionId, alice.address, tokenId);
// Bob burns his portion
const tx = api.tx.nft.burnItem(collectionId, tokenId, 1);
@@ -112,24 +111,19 @@
const result2 = getGenericResult(events2);
// Get balances
- const balance: any = (await api.query.nft.reFungibleItemList(collectionId, tokenId)).toJSON();
+ const bobBalanceAfter = await getBalance(api, collectionId, bob.address, tokenId);
+ const aliceBalanceAfter = await getBalance(api, collectionId, alice.address, tokenId);
// console.log(balance);
// What to expect before burning
expect(result1.success).to.be.true;
- expect(balanceBefore).to.be.not.null;
- expect(balanceBefore.owner.length).to.be.equal(2);
- expect(balanceBefore.owner[0].owner).to.be.deep.equal(normalizeAccountId(alice.address));
- expect(balanceBefore.owner[0].fraction).to.be.equal(99);
- expect(balanceBefore.owner[1].owner).to.be.deep.equal(normalizeAccountId(bob.address));
- expect(balanceBefore.owner[1].fraction).to.be.equal(1);
+ expect(aliceBalanceBefore).to.be.equal(99n);
+ expect(bobBalanceBefore).to.be.equal(1n);
// What to expect after burning
expect(result2.success).to.be.true;
- expect(balance).to.be.not.null;
- expect(balance.owner.length).to.be.equal(1);
- expect(balance.owner[0].fraction).to.be.equal(99);
- expect(balance.owner[0].owner).to.be.deep.equal(normalizeAccountId(alice.address));
+ expect(aliceBalanceAfter).to.be.equal(99n);
+ expect(bobBalanceAfter).to.be.equal(0n);
});
});
@@ -139,7 +133,7 @@
describe('integration test: ext. burnItem() with admin permissions:', () => {
before(async () => {
await usingApi(async () => {
- const keyring = new Keyring({ type: 'sr25519' });
+ const keyring = new Keyring({type: 'sr25519'});
alice = keyring.addFromUri('//Alice');
bob = keyring.addFromUri('//Bob');
});
@@ -149,28 +143,25 @@
const createMode = 'NFT';
const collectionId = await createCollectionExpectSuccess({mode: {type: createMode}});
const tokenId = await createItemExpectSuccess(alice, collectionId, createMode);
- await addCollectionAdminExpectSuccess(alice, collectionId, bob);
+ await addCollectionAdminExpectSuccess(alice, collectionId, bob.address);
await usingApi(async (api) => {
const tx = api.tx.nft.burnItem(collectionId, tokenId, 1);
const events = await submitTransactionAsync(bob, tx);
const result = getGenericResult(events);
+
+ expect(result.success).to.be.true;
// Get the item
- const item: any = (await api.query.nft.nftItemList(collectionId, tokenId)).toJSON();
- // What to expect
- // tslint:disable-next-line:no-unused-expression
- expect(result.success).to.be.true;
- // tslint:disable-next-line:no-unused-expression
- expect(item).to.be.null;
+ expect(await isTokenExists(api, collectionId, tokenId)).to.be.false;
});
});
-
+ // TODO: burnFrom
it('Burn item in Fungible collection', async () => {
const createMode = 'Fungible';
- const collectionId = await createCollectionExpectSuccess({mode: {type: createMode, decimalPoints: 0 }});
+ const collectionId = await createCollectionExpectSuccess({mode: {type: createMode, decimalPoints: 0}});
const tokenId = await createItemExpectSuccess(alice, collectionId, createMode); // Helper creates 10 fungible tokens
- await addCollectionAdminExpectSuccess(alice, collectionId, bob);
+ await addCollectionAdminExpectSuccess(alice, collectionId, bob.address);
await usingApi(async (api) => {
// Destroy 1 of 10
@@ -179,31 +170,29 @@
const result = getGenericResult(events);
// Get alice balance
- const balance: any = (await api.query.nft.fungibleItemList(collectionId, alice.address)).toJSON();
+ const balance = await getBalance(api, collectionId, alice.address, 0);
// What to expect
expect(result.success).to.be.true;
- expect(balance).to.be.not.null;
- expect(balance.value).to.be.equal(9);
+ expect(balance).to.be.equal(9n);
});
});
+ // TODO: burnFrom
it('Burn item in ReFungible collection', async () => {
const createMode = 'ReFungible';
- const collectionId = await createCollectionExpectSuccess({mode: {type: createMode }});
+ const collectionId = await createCollectionExpectSuccess({mode: {type: createMode}});
const tokenId = await createItemExpectSuccess(alice, collectionId, createMode);
- await addCollectionAdminExpectSuccess(alice, collectionId, bob);
+ await addCollectionAdminExpectSuccess(alice, collectionId, bob.address);
await usingApi(async (api) => {
const tx = api.tx.nft.burnFrom(collectionId, normalizeAccountId(alice.address), tokenId, 100);
const events = await submitTransactionAsync(bob, tx);
const result = getGenericResult(events);
// Get alice balance
- const balance: any = (await api.query.nft.reFungibleItemList(collectionId, tokenId)).toJSON();
-
- // What to expect
expect(result.success).to.be.true;
- expect(balance).to.be.null;
+ // Get the item
+ expect(await isTokenExists(api, collectionId, tokenId)).to.be.false;
});
});
});
@@ -211,7 +200,7 @@
describe('Negative integration test: ext. burnItem():', () => {
before(async () => {
await usingApi(async () => {
- const keyring = new Keyring({ type: 'sr25519' });
+ const keyring = new Keyring({type: 'sr25519'});
alice = keyring.addFromUri('//Alice');
bob = keyring.addFromUri('//Bob');
});
@@ -219,7 +208,7 @@
it('Burn a token in a destroyed collection', async () => {
const createMode = 'NFT';
- const collectionId = await createCollectionExpectSuccess({mode: {type: createMode }});
+ const collectionId = await createCollectionExpectSuccess({mode: {type: createMode}});
const tokenId = await createItemExpectSuccess(alice, collectionId, createMode);
await destroyCollectionExpectSuccess(collectionId);
@@ -235,7 +224,7 @@
it('Burn a token that was never created', async () => {
const createMode = 'NFT';
- const collectionId = await createCollectionExpectSuccess({mode: {type: createMode }});
+ const collectionId = await createCollectionExpectSuccess({mode: {type: createMode}});
const tokenId = 10;
await usingApi(async (api) => {
@@ -250,11 +239,11 @@
it('Burn a token using the address that does not own it', async () => {
const createMode = 'NFT';
- const collectionId = await createCollectionExpectSuccess({mode: {type: createMode }});
+ const collectionId = await createCollectionExpectSuccess({mode: {type: createMode}});
const tokenId = await createItemExpectSuccess(alice, collectionId, createMode);
await usingApi(async (api) => {
- const tx = api.tx.nft.burnItem(collectionId, tokenId, 0);
+ const tx = api.tx.nft.burnItem(collectionId, tokenId, 1);
const badTransaction = async function () {
await submitTransactionExpectFailAsync(bob, tx);
};
@@ -265,7 +254,7 @@
it('Transfer a burned a token', async () => {
const createMode = 'NFT';
- const collectionId = await createCollectionExpectSuccess({mode: {type: createMode }});
+ const collectionId = await createCollectionExpectSuccess({mode: {type: createMode}});
const tokenId = await createItemExpectSuccess(alice, collectionId, createMode);
await usingApi(async (api) => {
@@ -275,7 +264,7 @@
const result1 = getGenericResult(events1);
expect(result1.success).to.be.true;
- const tx = api.tx.nft.transfer(normalizeAccountId(bob.address), collectionId, tokenId, 0);
+ const tx = api.tx.nft.transfer(normalizeAccountId(bob.address), collectionId, tokenId, 1);
const badTransaction = async function () {
await submitTransactionExpectFailAsync(alice, tx);
};
@@ -286,7 +275,7 @@
it('Burn more than owned in Fungible collection', async () => {
const createMode = 'Fungible';
- const collectionId = await createCollectionExpectSuccess({mode: {type: createMode, decimalPoints: 0 }});
+ const collectionId = await createCollectionExpectSuccess({mode: {type: createMode, decimalPoints: 0}});
// Helper creates 10 fungible tokens
await createItemExpectSuccess(alice, collectionId, createMode);
const tokenId = 0; // ignored
@@ -300,11 +289,10 @@
await expect(badTransaction()).to.be.rejected;
// Get alice balance
- const balance: any = (await api.query.nft.fungibleItemList(collectionId, alice.address)).toJSON();
+ const balance = await getBalance(api, collectionId, alice.address, 0);
// What to expect
- expect(balance).to.be.not.null;
- expect(balance.value).to.be.equal(10);
+ expect(balance).to.be.equal(10n);
});
});
tests/src/change-collection-owner.test.tsdiffbeforeafterboth--- a/tests/src/change-collection-owner.test.ts
+++ b/tests/src/change-collection-owner.test.ts
@@ -6,8 +6,8 @@
import chai from 'chai';
import chaiAsPromised from 'chai-as-promised';
import privateKey from './substrate/privateKey';
-import { default as usingApi, submitTransactionAsync, submitTransactionExpectFailAsync } from './substrate/substrate-api';
-import { createCollectionExpectSuccess,
+import {default as usingApi, submitTransactionAsync, submitTransactionExpectFailAsync} from './substrate/substrate-api';
+import {createCollectionExpectSuccess,
addCollectionAdminExpectSuccess,
setCollectionSponsorExpectSuccess,
confirmSponsorshipExpectSuccess,
@@ -34,14 +34,14 @@
const alice = privateKey('//Alice');
const bob = privateKey('//Bob');
- const collection: any = (await api.query.nft.collectionById(collectionId)).toJSON();
- expect(collection.owner).to.be.deep.eq(alice.address);
+ const collection = (await api.query.common.collectionById(collectionId)).unwrap();
+ expect(collection.owner.toString()).to.be.deep.eq(alice.address);
const changeOwnerTx = api.tx.nft.changeCollectionOwner(collectionId, bob.address);
await submitTransactionAsync(alice, changeOwnerTx);
- const collectionAfterOwnerChange: any = (await api.query.nft.collectionById(collectionId)).toJSON();
- expect(collectionAfterOwnerChange.owner).to.be.deep.eq(bob.address);
+ const collectionAfterOwnerChange = (await api.query.common.collectionById(collectionId)).unwrap();
+ expect(collectionAfterOwnerChange.owner.toString()).to.be.deep.eq(bob.address);
});
});
});
@@ -53,8 +53,8 @@
const alice = privateKey('//Alice');
const bob = privateKey('//Bob');
- const collection: any = (await api.query.nft.collectionById(collectionId)).toJSON();
- expect(collection.owner).to.be.deep.eq(alice.address);
+ const collection = (await api.query.common.collectionById(collectionId)).unwrap();
+ expect(collection.owner.toString()).to.be.deep.eq(alice.address);
const changeOwnerTx = api.tx.nft.changeCollectionOwner(collectionId, bob.address);
await submitTransactionAsync(alice, changeOwnerTx);
@@ -62,8 +62,8 @@
const badChangeOwnerTx = api.tx.nft.changeCollectionOwner(collectionId, alice.address);
await expect(submitTransactionExpectFailAsync(alice, badChangeOwnerTx)).to.be.rejected;
- const collectionAfterOwnerChange: any = (await api.query.nft.collectionById(collectionId)).toJSON();
- expect(collectionAfterOwnerChange.owner).to.be.deep.eq(bob.address);
+ const collectionAfterOwnerChange = (await api.query.common.collectionById(collectionId)).unwrap();
+ expect(collectionAfterOwnerChange.owner.toString()).to.be.deep.eq(bob.address);
});
});
@@ -74,14 +74,14 @@
const bob = privateKey('//Bob');
const charlie = privateKey('//Charlie');
- const collection: any = (await api.query.nft.collectionById(collectionId)).toJSON();
- expect(collection.owner).to.be.deep.eq(alice.address);
+ const collection = (await api.query.common.collectionById(collectionId)).unwrap();
+ expect(collection.owner.toString()).to.be.deep.eq(alice.address);
const changeOwnerTx = api.tx.nft.changeCollectionOwner(collectionId, bob.address);
await submitTransactionAsync(alice, changeOwnerTx);
- const collectionAfterOwnerChange: any = (await api.query.nft.collectionById(collectionId)).toJSON();
- expect(collectionAfterOwnerChange.owner).to.be.deep.eq(bob.address);
+ const collectionAfterOwnerChange = (await api.query.common.collectionById(collectionId)).unwrap();
+ expect(collectionAfterOwnerChange.owner.toString()).to.be.deep.eq(bob.address);
// After changing the owner of the collection, all privileged methods are available to the new owner
// The new owner of the collection has access to sponsorship management operations in the collection
@@ -94,7 +94,7 @@
accountTokenOwnershipLimit: 1,
sponsoredMintSize: 1,
tokenLimit: 1,
- sponsorTimeout: 1,
+ sponsorTransferTimeout: 1,
ownerCanTransfer: true,
ownerCanDestroy: true,
};
@@ -118,21 +118,21 @@
const bob = privateKey('//Bob');
const charlie = privateKey('//Charlie');
- const collection: any = (await api.query.nft.collectionById(collectionId)).toJSON();
- expect(collection.owner).to.be.deep.eq(alice.address);
+ const collection = (await api.query.common.collectionById(collectionId)).unwrap();
+ expect(collection.owner.toString()).to.be.deep.eq(alice.address);
const changeOwnerTx = api.tx.nft.changeCollectionOwner(collectionId, bob.address);
await submitTransactionAsync(alice, changeOwnerTx);
- const collectionAfterOwnerChange: any = (await api.query.nft.collectionById(collectionId)).toJSON();
- expect(collectionAfterOwnerChange.owner).to.be.deep.eq(bob.address);
+ const collectionAfterOwnerChange = (await api.query.common.collectionById(collectionId)).unwrap();
+ expect(collectionAfterOwnerChange.owner.toString()).to.be.deep.eq(bob.address);
const changeOwnerTx2 = api.tx.nft.changeCollectionOwner(collectionId, charlie.address);
await submitTransactionAsync(bob, changeOwnerTx2);
// ownership lost
- const collectionAfterOwnerChange2: any = (await api.query.nft.collectionById(collectionId)).toJSON();
- expect(collectionAfterOwnerChange2.owner).to.be.deep.eq(charlie.address);
+ const collectionAfterOwnerChange2 = (await api.query.common.collectionById(collectionId)).unwrap();
+ expect(collectionAfterOwnerChange2.owner.toString()).to.be.deep.eq(charlie.address);
});
});
});
@@ -147,8 +147,8 @@
const changeOwnerTx = api.tx.nft.changeCollectionOwner(collectionId, bob.address);
await expect(submitTransactionExpectFailAsync(bob, changeOwnerTx)).to.be.rejected;
- const collectionAfterOwnerChange: any = (await api.query.nft.collectionById(collectionId)).toJSON();
- expect(collectionAfterOwnerChange.owner).to.be.deep.eq(alice.address);
+ const collectionAfterOwnerChange = (await api.query.common.collectionById(collectionId)).unwrap();
+ expect(collectionAfterOwnerChange.owner.toString()).to.be.deep.eq(alice.address);
// Verifying that nothing bad happened (network is live, new collections can be created, etc.)
await createCollectionExpectSuccess();
@@ -161,13 +161,13 @@
const alice = privateKey('//Alice');
const bob = privateKey('//Bob');
- await addCollectionAdminExpectSuccess(alice, collectionId, bob);
+ await addCollectionAdminExpectSuccess(alice, collectionId, bob.address);
const changeOwnerTx = api.tx.nft.changeCollectionOwner(collectionId, bob.address);
await expect(submitTransactionExpectFailAsync(bob, changeOwnerTx)).to.be.rejected;
- const collectionAfterOwnerChange: any = (await api.query.nft.collectionById(collectionId)).toJSON();
- expect(collectionAfterOwnerChange.owner).to.be.deep.eq(alice.address);
+ const collectionAfterOwnerChange = (await api.query.common.collectionById(collectionId)).unwrap();
+ expect(collectionAfterOwnerChange.owner.toString()).to.be.deep.eq(alice.address);
// Verifying that nothing bad happened (network is live, new collections can be created, etc.)
await createCollectionExpectSuccess();
@@ -195,8 +195,8 @@
const bob = privateKey('//Bob');
const charlie = privateKey('//Charlie');
- const collection: any = (await api.query.nft.collectionById(collectionId)).toJSON();
- expect(collection.owner).to.be.deep.eq(alice.address);
+ const collection = (await api.query.common.collectionById(collectionId)).unwrap();
+ expect(collection.owner.toString()).to.be.deep.eq(alice.address);
const changeOwnerTx = api.tx.nft.changeCollectionOwner(collectionId, bob.address);
await submitTransactionAsync(alice, changeOwnerTx);
@@ -204,8 +204,8 @@
const badChangeOwnerTx = api.tx.nft.changeCollectionOwner(collectionId, alice.address);
await expect(submitTransactionExpectFailAsync(alice, badChangeOwnerTx)).to.be.rejected;
- const collectionAfterOwnerChange: any = (await api.query.nft.collectionById(collectionId)).toJSON();
- expect(collectionAfterOwnerChange.owner).to.be.deep.eq(bob.address);
+ const collectionAfterOwnerChange = (await api.query.common.collectionById(collectionId)).unwrap();
+ expect(collectionAfterOwnerChange.owner.toString()).to.be.deep.eq(bob.address);
await setCollectionSponsorExpectFailure(collectionId, charlie.address, '//Alice');
await confirmSponsorshipExpectFailure(collectionId, '//Alice');
@@ -215,7 +215,7 @@
accountTokenOwnershipLimit: 1,
sponsoredMintSize: 1,
tokenLimit: 1,
- sponsorTimeout: 1,
+ sponsorTransferTimeout: 1,
ownerCanTransfer: true,
ownerCanDestroy: true,
};
tests/src/check-event/burnItemEvent.test.tsdiffbeforeafterboth--- a/tests/src/check-event/burnItemEvent.test.ts
+++ b/tests/src/check-event/burnItemEvent.test.ts
@@ -4,33 +4,33 @@
//
// https://unique-network.readthedocs.io/en/latest/jsapi.html#setchainlimits
-import { ApiPromise } from '@polkadot/api';
-import { IKeyringPair } from '@polkadot/types/types';
+import {ApiPromise} from '@polkadot/api';
+import {IKeyringPair} from '@polkadot/types/types';
import chai from 'chai';
import chaiAsPromised from 'chai-as-promised';
import privateKey from '../substrate/privateKey';
import usingApi, {submitTransactionAsync} from '../substrate/substrate-api';
-import { createCollectionExpectSuccess, createItemExpectSuccess, nftEventMessage } from '../util/helpers';
+import {createCollectionExpectSuccess, createItemExpectSuccess, nftEventMessage} from '../util/helpers';
chai.use(chaiAsPromised);
const expect = chai.expect;
describe('Burn Item event ', () => {
- let Alice: IKeyringPair;
+ let alice: IKeyringPair;
const checkSection = 'ItemDestroyed';
const checkTreasury = 'Deposit';
const checkSystem = 'ExtrinsicSuccess';
before(async () => {
await usingApi(async () => {
- Alice = privateKey('//Alice');
+ alice = privateKey('//Alice');
});
});
it('Check event from burnItem(): ', async () => {
await usingApi(async (api: ApiPromise) => {
const collectionID = await createCollectionExpectSuccess();
- const itemID = await createItemExpectSuccess(Alice, collectionID, 'NFT');
+ const itemID = await createItemExpectSuccess(alice, collectionID, 'NFT');
const burnItem = api.tx.nft.burnItem(collectionID, itemID, 1);
- const events = await submitTransactionAsync(Alice, burnItem);
+ const events = await submitTransactionAsync(alice, burnItem);
const msg = JSON.stringify(nftEventMessage(events));
expect(msg).to.be.contain(checkSection);
expect(msg).to.be.contain(checkTreasury);
@@ -38,4 +38,3 @@
});
});
});
-
tests/src/check-event/createCollectionEvent.test.tsdiffbeforeafterboth--- a/tests/src/check-event/createCollectionEvent.test.ts
+++ b/tests/src/check-event/createCollectionEvent.test.ts
@@ -4,31 +4,31 @@
//
// https://unique-network.readthedocs.io/en/latest/jsapi.html#setchainlimits
-import { ApiPromise } from '@polkadot/api';
-import { IKeyringPair } from '@polkadot/types/types';
+import {ApiPromise} from '@polkadot/api';
+import {IKeyringPair} from '@polkadot/types/types';
import chai from 'chai';
import chaiAsPromised from 'chai-as-promised';
import privateKey from '../substrate/privateKey';
import usingApi, {submitTransactionAsync} from '../substrate/substrate-api';
-import { nftEventMessage } from '../util/helpers';
+import {nftEventMessage} from '../util/helpers';
chai.use(chaiAsPromised);
const expect = chai.expect;
describe('Create collection event ', () => {
- let Alice: IKeyringPair;
+ let alice: IKeyringPair;
const checkSection = 'CollectionCreated';
const checkTreasury = 'Deposit';
const checkSystem = 'ExtrinsicSuccess';
before(async () => {
await usingApi(async () => {
- Alice = privateKey('//Alice');
+ alice = privateKey('//Alice');
});
});
it('Check event from createCollection(): ', async () => {
await usingApi(async (api: ApiPromise) => {
- const tx = api.tx.nft.createCollection('0x31', '0x32', '0x33', 'NFT');
- const events = await submitTransactionAsync(Alice, tx);
+ const tx = api.tx.nft.createCollection([0x31], [0x32], '0x33', 'NFT');
+ const events = await submitTransactionAsync(alice, tx);
const msg = JSON.stringify(nftEventMessage(events));
expect(msg).to.be.contain(checkSection);
expect(msg).to.be.contain(checkTreasury);
@@ -36,4 +36,3 @@
});
});
});
-
\ No newline at end of file
tests/src/check-event/createItemEvent.test.tsdiffbeforeafterboth--- a/tests/src/check-event/createItemEvent.test.ts
+++ b/tests/src/check-event/createItemEvent.test.ts
@@ -4,32 +4,32 @@
//
// https://unique-network.readthedocs.io/en/latest/jsapi.html#setchainlimits
-import { ApiPromise } from '@polkadot/api';
-import { IKeyringPair } from '@polkadot/types/types';
+import {ApiPromise} from '@polkadot/api';
+import {IKeyringPair} from '@polkadot/types/types';
import chai from 'chai';
import chaiAsPromised from 'chai-as-promised';
import privateKey from '../substrate/privateKey';
import usingApi, {submitTransactionAsync} from '../substrate/substrate-api';
-import { createCollectionExpectSuccess, nftEventMessage, normalizeAccountId } from '../util/helpers';
+import {createCollectionExpectSuccess, nftEventMessage, normalizeAccountId} from '../util/helpers';
chai.use(chaiAsPromised);
const expect = chai.expect;
describe('Create Item event ', () => {
- let Alice: IKeyringPair;
+ let alice: IKeyringPair;
const checkSection = 'ItemCreated';
const checkTreasury = 'Deposit';
const checkSystem = 'ExtrinsicSuccess';
before(async () => {
await usingApi(async () => {
- Alice = privateKey('//Alice');
+ alice = privateKey('//Alice');
});
});
it('Check event from createItem(): ', async () => {
await usingApi(async (api: ApiPromise) => {
const collectionID = await createCollectionExpectSuccess();
- const createItem = api.tx.nft.createItem(collectionID, normalizeAccountId(Alice.address), 'NFT');
- const events = await submitTransactionAsync(Alice, createItem);
+ const createItem = api.tx.nft.createItem(collectionID, normalizeAccountId(alice.address), 'NFT');
+ const events = await submitTransactionAsync(alice, createItem);
const msg = JSON.stringify(nftEventMessage(events));
expect(msg).to.be.contain(checkSection);
expect(msg).to.be.contain(checkTreasury);
@@ -37,4 +37,3 @@
});
});
});
-
tests/src/check-event/createMultipleItemsEvent.test.tsdiffbeforeafterboth--- a/tests/src/check-event/createMultipleItemsEvent.test.ts
+++ b/tests/src/check-event/createMultipleItemsEvent.test.ts
@@ -4,33 +4,33 @@
//
// https://unique-network.readthedocs.io/en/latest/jsapi.html#setchainlimits
-import { ApiPromise } from '@polkadot/api';
-import { IKeyringPair } from '@polkadot/types/types';
+import {ApiPromise} from '@polkadot/api';
+import {IKeyringPair} from '@polkadot/types/types';
import chai from 'chai';
import chaiAsPromised from 'chai-as-promised';
import privateKey from '../substrate/privateKey';
import usingApi, {submitTransactionAsync} from '../substrate/substrate-api';
-import { createCollectionExpectSuccess, nftEventMessage, normalizeAccountId } from '../util/helpers';
+import {createCollectionExpectSuccess, nftEventMessage, normalizeAccountId} from '../util/helpers';
chai.use(chaiAsPromised);
const expect = chai.expect;
describe('Create Multiple Items Event event ', () => {
- let Alice: IKeyringPair;
+ let alice: IKeyringPair;
const checkSection = 'ItemCreated';
const checkTreasury = 'Deposit';
const checkSystem = 'ExtrinsicSuccess';
before(async () => {
await usingApi(async () => {
- Alice = privateKey('//Alice');
+ alice = privateKey('//Alice');
});
});
it('Check event from createMultipleItems(): ', async () => {
await usingApi(async (api: ApiPromise) => {
const collectionID = await createCollectionExpectSuccess();
- const args = [{ nft: ['0x31', '0x31'] }, { nft: ['0x32', '0x32'] }, { nft: ['0x33', '0x33'] }];
- const createMultipleItems = api.tx.nft.createMultipleItems(collectionID, normalizeAccountId(Alice.address), args);
- const events = await submitTransactionAsync(Alice, createMultipleItems);
+ const args = [{NFT: ['0x31', '0x31']}, {NFT: ['0x32', '0x32']}, {NFT: ['0x33', '0x33']}];
+ const createMultipleItems = api.tx.nft.createMultipleItems(collectionID, normalizeAccountId(alice.address), args);
+ const events = await submitTransactionAsync(alice, createMultipleItems);
const msg = JSON.stringify(nftEventMessage(events));
expect(msg).to.be.contain(checkSection);
expect(msg).to.be.contain(checkTreasury);
@@ -38,4 +38,3 @@
});
});
});
-
tests/src/check-event/destroyCollectionEvent.test.tsdiffbeforeafterboth--- a/tests/src/check-event/destroyCollectionEvent.test.ts
+++ b/tests/src/check-event/destroyCollectionEvent.test.ts
@@ -4,35 +4,34 @@
//
// https://unique-network.readthedocs.io/en/latest/jsapi.html#setchainlimits
-import { ApiPromise } from '@polkadot/api';
-import { IKeyringPair } from '@polkadot/types/types';
+import {ApiPromise} from '@polkadot/api';
+import {IKeyringPair} from '@polkadot/types/types';
import chai from 'chai';
import chaiAsPromised from 'chai-as-promised';
import privateKey from '../substrate/privateKey';
import usingApi, {submitTransactionAsync} from '../substrate/substrate-api';
-import { createCollectionExpectSuccess, nftEventMessage } from '../util/helpers';
+import {createCollectionExpectSuccess, nftEventMessage} from '../util/helpers';
chai.use(chaiAsPromised);
const expect = chai.expect;
describe('Destroy collection event ', () => {
- let Alice: IKeyringPair;
+ let alice: IKeyringPair;
const checkTreasury = 'Deposit';
const checkSystem = 'ExtrinsicSuccess';
before(async () => {
await usingApi(async () => {
- Alice = privateKey('//Alice');
+ alice = privateKey('//Alice');
});
});
it('Check event from destroyCollection(): ', async () => {
await usingApi(async (api: ApiPromise) => {
const collectionID = await createCollectionExpectSuccess();
const destroyCollection = api.tx.nft.destroyCollection(collectionID);
- const events = await submitTransactionAsync(Alice, destroyCollection);
+ const events = await submitTransactionAsync(alice, destroyCollection);
const msg = JSON.stringify(nftEventMessage(events));
expect(msg).to.be.contain(checkTreasury);
expect(msg).to.be.contain(checkSystem);
});
});
});
-
tests/src/check-event/transferEvent.test.tsdiffbeforeafterboth--- a/tests/src/check-event/transferEvent.test.ts
+++ b/tests/src/check-event/transferEvent.test.ts
@@ -4,35 +4,35 @@
//
// https://unique-network.readthedocs.io/en/latest/jsapi.html#setchainlimits
-import { ApiPromise } from '@polkadot/api';
-import { IKeyringPair } from '@polkadot/types/types';
+import {ApiPromise} from '@polkadot/api';
+import {IKeyringPair} from '@polkadot/types/types';
import chai from 'chai';
import chaiAsPromised from 'chai-as-promised';
import privateKey from '../substrate/privateKey';
import usingApi, {submitTransactionAsync} from '../substrate/substrate-api';
-import { createCollectionExpectSuccess, createItemExpectSuccess, nftEventMessage, normalizeAccountId } from '../util/helpers';
+import {createCollectionExpectSuccess, createItemExpectSuccess, nftEventMessage, normalizeAccountId} from '../util/helpers';
chai.use(chaiAsPromised);
const expect = chai.expect;
describe('Transfer event ', () => {
- let Alice: IKeyringPair;
- let Bob: IKeyringPair;
+ let alice: IKeyringPair;
+ let bob: IKeyringPair;
const checkSection = 'Transfer';
const checkTreasury = 'Deposit';
const checkSystem = 'ExtrinsicSuccess';
before(async () => {
await usingApi(async () => {
- Alice = privateKey('//Alice');
- Bob = privateKey('//Bob');
+ alice = privateKey('//Alice');
+ bob = privateKey('//Bob');
});
});
it('Check event from transfer(): ', async () => {
await usingApi(async (api: ApiPromise) => {
const collectionID = await createCollectionExpectSuccess();
- const itemID = await createItemExpectSuccess(Alice, collectionID, 'NFT');
- const transfer = api.tx.nft.transfer(normalizeAccountId(Bob.address), collectionID, itemID, 1);
- const events = await submitTransactionAsync(Alice, transfer);
+ const itemID = await createItemExpectSuccess(alice, collectionID, 'NFT');
+ const transfer = api.tx.nft.transfer(normalizeAccountId(bob.address), collectionID, itemID, 1);
+ const events = await submitTransactionAsync(alice, transfer);
const msg = JSON.stringify(nftEventMessage(events));
expect(msg).to.be.contain(checkSection);
expect(msg).to.be.contain(checkTreasury);
@@ -40,5 +40,3 @@
});
});
});
-
-
tests/src/check-event/transferFromEvent.test.tsdiffbeforeafterboth--- a/tests/src/check-event/transferFromEvent.test.ts
+++ b/tests/src/check-event/transferFromEvent.test.ts
@@ -4,35 +4,35 @@
//
// https://unique-network.readthedocs.io/en/latest/jsapi.html#setchainlimits
-import { ApiPromise } from '@polkadot/api';
-import { IKeyringPair } from '@polkadot/types/types';
+import {ApiPromise} from '@polkadot/api';
+import {IKeyringPair} from '@polkadot/types/types';
import chai from 'chai';
import chaiAsPromised from 'chai-as-promised';
import privateKey from '../substrate/privateKey';
import usingApi, {submitTransactionAsync} from '../substrate/substrate-api';
-import { createCollectionExpectSuccess, createItemExpectSuccess, nftEventMessage, normalizeAccountId } from '../util/helpers';
+import {createCollectionExpectSuccess, createItemExpectSuccess, nftEventMessage, normalizeAccountId} from '../util/helpers';
chai.use(chaiAsPromised);
const expect = chai.expect;
describe('Transfer from event ', () => {
- let Alice: IKeyringPair;
- let Bob: IKeyringPair;
+ let alice: IKeyringPair;
+ let bob: IKeyringPair;
const checkSection = 'Transfer';
const checkTreasury = 'Deposit';
const checkSystem = 'ExtrinsicSuccess';
before(async () => {
await usingApi(async () => {
- Alice = privateKey('//Alice');
- Bob = privateKey('//Bob');
+ alice = privateKey('//Alice');
+ bob = privateKey('//Bob');
});
});
it('Check event from transferFrom(): ', async () => {
await usingApi(async (api: ApiPromise) => {
const collectionID = await createCollectionExpectSuccess();
- const itemID = await createItemExpectSuccess(Alice, collectionID, 'NFT');
- const transferFrom = api.tx.nft.transferFrom(normalizeAccountId(Alice.address), normalizeAccountId(Bob.address), collectionID, itemID, 1);
- const events = await submitTransactionAsync(Alice, transferFrom);
+ const itemID = await createItemExpectSuccess(alice, collectionID, 'NFT');
+ const transferFrom = api.tx.nft.transferFrom(normalizeAccountId(alice.address), normalizeAccountId(bob.address), collectionID, itemID, 1);
+ const events = await submitTransactionAsync(alice, transferFrom);
const msg = JSON.stringify(nftEventMessage(events));
expect(msg).to.be.contain(checkSection);
expect(msg).to.be.contain(checkTreasury);
@@ -40,4 +40,3 @@
});
});
});
-
tests/src/collision-tests/admVsOwnerChanges.test.tsdiffbeforeafterboth--- a/tests/src/collision-tests/admVsOwnerChanges.test.ts
+++ b/tests/src/collision-tests/admVsOwnerChanges.test.ts
@@ -1,3 +1,7 @@
+/* broken by design
+// substrate transactions are sequential, not parallel
+// the order of execution is indeterminate
+
import { IKeyringPair } from '@polkadot/types/types';
import chai from 'chai';
import chaiAsPromised from 'chai-as-promised';
@@ -50,3 +54,4 @@
});
});
});
+*/
\ No newline at end of file
tests/src/collision-tests/admVsOwnerData.test.tsdiffbeforeafterboth--- a/tests/src/collision-tests/admVsOwnerData.test.ts
+++ b/tests/src/collision-tests/admVsOwnerData.test.ts
@@ -1,3 +1,7 @@
+/* broken by design
+// substrate transactions are sequential, not parallel
+// the order of execution is indeterminate
+
import { IKeyringPair } from '@polkadot/types/types';
import chai from 'chai';
import chaiAsPromised from 'chai-as-promised';
@@ -46,3 +50,4 @@
});
});
});
+*/
\ No newline at end of file
tests/src/collision-tests/admVsOwnerTake.test.tsdiffbeforeafterboth--- a/tests/src/collision-tests/admVsOwnerTake.test.ts
+++ b/tests/src/collision-tests/admVsOwnerTake.test.ts
@@ -1,3 +1,7 @@
+/* broken by design
+// substrate transactions are sequential, not parallel
+// the order of execution is indeterminate
+
import { IKeyringPair } from '@polkadot/types/types';
import chai from 'chai';
import chaiAsPromised from 'chai-as-promised';
@@ -48,3 +52,4 @@
});
});
});
+*/
\ No newline at end of file
tests/src/collision-tests/adminDestroyCollection.test.tsdiffbeforeafterboth--- a/tests/src/collision-tests/adminDestroyCollection.test.ts
+++ b/tests/src/collision-tests/adminDestroyCollection.test.ts
@@ -1,3 +1,7 @@
+/* broken by design
+// substrate transactions are sequential, not parallel
+// the order of execution is indeterminate
+
import { IKeyringPair } from '@polkadot/types/types';
import chai from 'chai';
import chaiAsPromised from 'chai-as-promised';
@@ -47,3 +51,4 @@
});
});
});
+*/
\ No newline at end of file
tests/src/collision-tests/adminLimitsOff.test.tsdiffbeforeafterboth--- a/tests/src/collision-tests/adminLimitsOff.test.ts
+++ b/tests/src/collision-tests/adminLimitsOff.test.ts
@@ -1,3 +1,7 @@
+/* broken by design
+// substrate transactions are sequential, not parallel
+// the order of execution is indeterminate
+
import { IKeyringPair } from '@polkadot/types/types';
import chai from 'chai';
import chaiAsPromised from 'chai-as-promised';
@@ -63,3 +67,4 @@
});
});
});
+*/
\ No newline at end of file
tests/src/collision-tests/adminRightsOff.test.tsdiffbeforeafterboth--- a/tests/src/collision-tests/adminRightsOff.test.ts
+++ b/tests/src/collision-tests/adminRightsOff.test.ts
@@ -1,3 +1,7 @@
+/* broken by design
+// substrate transactions are sequential, not parallel
+// the order of execution is indeterminate
+
import { IKeyringPair } from '@polkadot/types/types';
import BN from 'bn.js';
import chai from 'chai';
@@ -46,3 +50,4 @@
});
});
});
+*/
\ No newline at end of file
tests/src/collision-tests/setSponsorNewOwner.test.tsdiffbeforeafterboth--- a/tests/src/collision-tests/setSponsorNewOwner.test.ts
+++ b/tests/src/collision-tests/setSponsorNewOwner.test.ts
@@ -1,3 +1,7 @@
+/* broken by design
+// substrate transactions are sequential, not parallel
+// the order of execution is indeterminate
+
import { IKeyringPair } from '@polkadot/types/types';
import chai from 'chai';
import chaiAsPromised from 'chai-as-promised';
@@ -44,3 +48,4 @@
});
});
});
+*/
\ No newline at end of file
tests/src/collision-tests/sponsorPayments.test.tsdiffbeforeafterboth--- a/tests/src/collision-tests/sponsorPayments.test.ts
+++ b/tests/src/collision-tests/sponsorPayments.test.ts
@@ -1,3 +1,7 @@
+/* broken by design
+// substrate transactions are sequential, not parallel
+// the order of execution is indeterminate
+
import { IKeyringPair } from '@polkadot/types/types';
import chai from 'chai';
import chaiAsPromised from 'chai-as-promised';
@@ -53,3 +57,4 @@
});
});
});
+*/
\ No newline at end of file
tests/src/collision-tests/tokenLimitsOff.test.tsdiffbeforeafterboth--- a/tests/src/collision-tests/tokenLimitsOff.test.ts
+++ b/tests/src/collision-tests/tokenLimitsOff.test.ts
@@ -1,3 +1,7 @@
+/* broken by design
+// substrate transactions are sequential, not parallel
+// the order of execution is indeterminate
+
import { IKeyringPair } from '@polkadot/types/types';
import BN from 'bn.js';
import chai from 'chai';
@@ -77,3 +81,4 @@
});
});
});
+*/
tests/src/collision-tests/turnsOffMinting.test.tsdiffbeforeafterboth--- a/tests/src/collision-tests/turnsOffMinting.test.ts
+++ b/tests/src/collision-tests/turnsOffMinting.test.ts
@@ -1,3 +1,7 @@
+/* broken by design
+// substrate transactions are sequential, not parallel
+// the order of execution is indeterminate
+
import { IKeyringPair } from '@polkadot/types/types';
import chai from 'chai';
import chaiAsPromised from 'chai-as-promised';
@@ -45,3 +49,4 @@
});
});
});
+*/
\ No newline at end of file
tests/src/confirmSponsorship.test.tsdiffbeforeafterboth--- a/tests/src/confirmSponsorship.test.ts
+++ b/tests/src/confirmSponsorship.test.ts
@@ -5,11 +5,11 @@
import chai from 'chai';
import chaiAsPromised from 'chai-as-promised';
-import { default as usingApi, submitTransactionAsync, submitTransactionExpectFailAsync } from './substrate/substrate-api';
-import {
- createCollectionExpectSuccess,
- setCollectionSponsorExpectSuccess,
- destroyCollectionExpectSuccess,
+import {default as usingApi, submitTransactionAsync, submitTransactionExpectFailAsync} from './substrate/substrate-api';
+import {
+ createCollectionExpectSuccess,
+ setCollectionSponsorExpectSuccess,
+ destroyCollectionExpectSuccess,
confirmSponsorshipExpectSuccess,
confirmSponsorshipExpectFailure,
createItemExpectSuccess,
@@ -21,9 +21,8 @@
normalizeAccountId,
addCollectionAdminExpectSuccess,
} from './util/helpers';
-import { Keyring } from '@polkadot/api';
-import { IKeyringPair } from '@polkadot/types/types';
-import { BigNumber } from 'bignumber.js';
+import {Keyring} from '@polkadot/api';
+import {IKeyringPair} from '@polkadot/types/types';
chai.use(chaiAsPromised);
const expect = chai.expect;
@@ -36,7 +35,7 @@
before(async () => {
await usingApi(async () => {
- const keyring = new Keyring({ type: 'sr25519' });
+ const keyring = new Keyring({type: 'sr25519'});
alice = keyring.addFromUri('//Alice');
bob = keyring.addFromUri('//Bob');
charlie = keyring.addFromUri('//Charlie');
@@ -67,7 +66,7 @@
await confirmSponsorshipExpectSuccess(collectionId, '//Bob');
await usingApi(async (api) => {
- const AsponsorBalance = new BigNumber((await api.query.system.account(bob.address)).data.free.toString());
+ const sponsorBalanceBefore = (await api.query.system.account(bob.address)).data.free.toBigInt();
// Find unused address
const zeroBalance = await findUnusedAddress(api);
@@ -79,22 +78,22 @@
const zeroToAlice = api.tx.nft.transfer(normalizeAccountId(zeroBalance.address), collectionId, itemId, 0);
const events = await submitTransactionAsync(zeroBalance, zeroToAlice);
const result = getGenericResult(events);
+ expect(result.success).to.be.true;
- const BsponsorBalance = new BigNumber((await api.query.system.account(bob.address)).data.free.toString());
+ const sponsorBalanceAfter = (await api.query.system.account(bob.address)).data.free.toBigInt();
- expect(result.success).to.be.true;
- expect(BsponsorBalance.lt(AsponsorBalance)).to.be.true;
+ expect(sponsorBalanceAfter < sponsorBalanceBefore).to.be.true;
});
});
it('Fungible: Transfer fees are paid by the sponsor after confirmation', async () => {
- const collectionId = await createCollectionExpectSuccess({mode: {type: 'Fungible', decimalPoints: 0 }});
+ const collectionId = await createCollectionExpectSuccess({mode: {type: 'Fungible', decimalPoints: 0}});
await setCollectionSponsorExpectSuccess(collectionId, bob.address);
await confirmSponsorshipExpectSuccess(collectionId, '//Bob');
await usingApi(async (api) => {
- const AsponsorBalance = new BigNumber((await api.query.system.account(bob.address)).data.free.toString());
+ const sponsorBalanceBefore = (await api.query.system.account(bob.address)).data.free.toBigInt();
// Find unused address
const zeroBalance = await findUnusedAddress(api);
@@ -106,11 +105,11 @@
const zeroToAlice = api.tx.nft.transfer(normalizeAccountId(zeroBalance.address), collectionId, itemId, 1);
const events1 = await submitTransactionAsync(zeroBalance, zeroToAlice);
const result1 = getGenericResult(events1);
+ expect(result1.success).to.be.true;
- const BsponsorBalance = new BigNumber((await api.query.system.account(bob.address)).data.free.toString());
+ const sponsorBalanceAfter = (await api.query.system.account(bob.address)).data.free.toBigInt();
- expect(result1.success).to.be.true;
- expect(BsponsorBalance.lt(AsponsorBalance)).to.be.true;
+ expect(sponsorBalanceAfter < sponsorBalanceBefore).to.be.true;
});
});
@@ -120,7 +119,7 @@
await confirmSponsorshipExpectSuccess(collectionId, '//Bob');
await usingApi(async (api) => {
- const AsponsorBalance = new BigNumber((await api.query.system.account(bob.address)).data.free.toString());
+ const sponsorBalanceBefore = (await api.query.system.account(bob.address)).data.free.toBigInt();
// Find unused address
const zeroBalance = await findUnusedAddress(api);
@@ -133,10 +132,10 @@
const events1 = await submitTransactionAsync(zeroBalance, zeroToAlice);
const result1 = getGenericResult(events1);
- const BsponsorBalance = new BigNumber((await api.query.system.account(bob.address)).data.free.toString());
+ const sponsorBalanceAfter = (await api.query.system.account(bob.address)).data.free.toBigInt();
expect(result1.success).to.be.true;
- expect(BsponsorBalance.lt(AsponsorBalance)).to.be.true;
+ expect(sponsorBalanceAfter < sponsorBalanceBefore).to.be.true;
});
});
@@ -145,15 +144,15 @@
await setCollectionSponsorExpectSuccess(collectionId, bob.address);
await confirmSponsorshipExpectSuccess(collectionId, '//Bob');
- // Enable collection white list
+ // Enable collection white list
await enableWhiteListExpectSuccess(alice, collectionId);
// Enable public minting
await enablePublicMintingExpectSuccess(alice, collectionId);
- // Create Item
+ // Create Item
await usingApi(async (api) => {
- const AsponsorBalance = new BigNumber((await api.query.system.account(bob.address)).data.free.toString());
+ const sponsorBalanceBefore = (await api.query.system.account(bob.address)).data.free.toBigInt();
// Find unused address
const zeroBalance = await findUnusedAddress(api);
@@ -164,9 +163,9 @@
// Mint token using unused address as signer
await createItemExpectSuccess(zeroBalance, collectionId, 'NFT', zeroBalance.address);
- const BsponsorBalance = new BigNumber((await api.query.system.account(bob.address)).data.free.toString());
+ const sponsorBalanceAfter = (await api.query.system.account(bob.address)).data.free.toBigInt();
- expect(BsponsorBalance.lt(AsponsorBalance)).to.be.true;
+ expect(sponsorBalanceAfter < sponsorBalanceBefore).to.be.true;
});
});
@@ -189,13 +188,13 @@
const result1 = getGenericResult(events1);
// Second transfer should fail
- const AsponsorBalance = new BigNumber((await api.query.system.account(bob.address)).data.free.toString());
+ const sponsorBalanceBefore = (await api.query.system.account(bob.address)).data.free.toBigInt();
const zeroToAlice = api.tx.nft.transfer(normalizeAccountId(alice.address), collectionId, itemId, 0);
- const badTransaction = async function () {
+ const badTransaction = async function () {
await submitTransactionExpectFailAsync(zeroBalance, zeroToAlice);
};
await expect(badTransaction()).to.be.rejectedWith('Inability to pay some fees');
- const BsponsorBalance = new BigNumber((await api.query.system.account(bob.address)).data.free.toString());
+ const sponsorBalanceAfter = (await api.query.system.account(bob.address)).data.free.toBigInt();
// Try again after Zero gets some balance - now it should succeed
const balancetx = api.tx.balances.transfer(zeroBalance.address, 1e15);
@@ -205,12 +204,12 @@
expect(result1.success).to.be.true;
expect(result2.success).to.be.true;
- expect(BsponsorBalance.isEqualTo(AsponsorBalance)).to.be.true;
+ expect(sponsorBalanceAfter).to.be.equal(sponsorBalanceBefore);
});
});
it('Fungible: Sponsoring is rate limited', async () => {
- const collectionId = await createCollectionExpectSuccess({mode: {type: 'Fungible', decimalPoints: 0 }});
+ const collectionId = await createCollectionExpectSuccess({mode: {type: 'Fungible', decimalPoints: 0}});
await setCollectionSponsorExpectSuccess(collectionId, bob.address);
await confirmSponsorshipExpectSuccess(collectionId, '//Bob');
@@ -225,20 +224,20 @@
const zeroToAlice = api.tx.nft.transfer(normalizeAccountId(zeroBalance.address), collectionId, itemId, 1);
const events1 = await submitTransactionAsync(zeroBalance, zeroToAlice);
const result1 = getGenericResult(events1);
+ expect(result1.success).to.be.true;
- const AsponsorBalance = new BigNumber((await api.query.system.account(bob.address)).data.free.toString());
+ const sponsorBalanceBefore = (await api.query.system.account(bob.address)).data.free.toBigInt();
await expect(submitTransactionExpectFailAsync(zeroBalance, zeroToAlice)).to.be.rejected;
- const BsponsorBalance = new BigNumber((await api.query.system.account(bob.address)).data.free.toString());
+ const sponsorBalanceAfter = (await api.query.system.account(bob.address)).data.free.toBigInt();
// Try again after Zero gets some balance - now it should succeed
const balancetx = api.tx.balances.transfer(zeroBalance.address, 1e15);
await submitTransactionAsync(alice, balancetx);
const events2 = await submitTransactionAsync(zeroBalance, zeroToAlice);
const result2 = getGenericResult(events2);
-
- expect(result1.success).to.be.true;
expect(result2.success).to.be.true;
- expect(BsponsorBalance.isEqualTo(AsponsorBalance)).to.be.true;
+
+ expect(sponsorBalanceAfter).to.be.equal(sponsorBalanceBefore);
});
});
@@ -259,25 +258,25 @@
const aliceToZero = api.tx.nft.transfer(normalizeAccountId(zeroBalance.address), collectionId, itemId, 1);
const events1 = await submitTransactionAsync(alice, aliceToZero);
const result1 = getGenericResult(events1);
+ expect(result1.success).to.be.true;
// Second transfer should fail
- const AsponsorBalance = new BigNumber((await api.query.system.account(bob.address)).data.free.toString());
+ const sponsorBalanceBefore = (await api.query.system.account(bob.address)).data.free.toBigInt();
const zeroToAlice = api.tx.nft.transfer(normalizeAccountId(alice.address), collectionId, itemId, 1);
- const badTransaction = async function () {
+ const badTransaction = async function () {
await submitTransactionExpectFailAsync(zeroBalance, zeroToAlice);
};
await expect(badTransaction()).to.be.rejectedWith('Inability to pay some fees');
- const BsponsorBalance = new BigNumber((await api.query.system.account(bob.address)).data.free.toString());
+ const sponsorBalanceAfter = (await api.query.system.account(bob.address)).data.free.toBigInt();
// Try again after Zero gets some balance - now it should succeed
const balancetx = api.tx.balances.transfer(zeroBalance.address, 1e15);
await submitTransactionAsync(alice, balancetx);
const events2 = await submitTransactionAsync(zeroBalance, zeroToAlice);
const result2 = getGenericResult(events2);
+ expect(result2.success).to.be.true;
- expect(result1.success).to.be.true;
- expect(result2.success).to.be.true;
- expect(BsponsorBalance.isEqualTo(AsponsorBalance)).to.be.true;
+ expect(sponsorBalanceAfter).to.be.equal(sponsorBalanceBefore);
});
});
@@ -286,7 +285,7 @@
await setCollectionSponsorExpectSuccess(collectionId, bob.address);
await confirmSponsorshipExpectSuccess(collectionId, '//Bob');
- // Enable collection white list
+ // Enable collection white list
await enableWhiteListExpectSuccess(alice, collectionId);
// Enable public minting
@@ -303,26 +302,20 @@
await createItemExpectSuccess(zeroBalance, collectionId, 'NFT', zeroBalance.address);
// Second mint should fail
- const AsponsorBalance = new BigNumber((await api.query.system.account(bob.address)).data.free.toString());
-
- const consoleError = console.error;
- const consoleLog = console.log;
- console.error = () => {};
- console.log = () => {};
- const badTransaction = async function () {
+ const sponsorBalanceBefore = (await api.query.system.account(bob.address)).data.free.toBigInt();
+
+ const badTransaction = async function () {
await createItemExpectSuccess(zeroBalance, collectionId, 'NFT', zeroBalance.address);
};
await expect(badTransaction()).to.be.rejectedWith('Inability to pay some fees');
- console.error = consoleError;
- console.log = consoleLog;
- const BsponsorBalance = new BigNumber((await api.query.system.account(bob.address)).data.free.toString());
+ const sponsorBalanceAfter = (await api.query.system.account(bob.address)).data.free.toBigInt();
// Try again after Zero gets some balance - now it should succeed
const balancetx = api.tx.balances.transfer(zeroBalance.address, 1e15);
await submitTransactionAsync(alice, balancetx);
await createItemExpectSuccess(zeroBalance, collectionId, 'NFT', zeroBalance.address);
- expect(BsponsorBalance.isEqualTo(AsponsorBalance)).to.be.true;
+ expect(sponsorBalanceAfter).to.be.equal(sponsorBalanceBefore);
});
});
@@ -331,7 +324,7 @@
describe('(!negative test!) integration test: ext. confirmSponsorship():', () => {
before(async () => {
await usingApi(async () => {
- const keyring = new Keyring({ type: 'sr25519' });
+ const keyring = new Keyring({type: 'sr25519'});
alice = keyring.addFromUri('//Alice');
bob = keyring.addFromUri('//Bob');
charlie = keyring.addFromUri('//Charlie');
@@ -342,7 +335,7 @@
// Find the collection that never existed
let collectionId = 0;
await usingApi(async (api) => {
- collectionId = parseInt((await api.query.nft.createdCollectionCount()).toString()) + 1;
+ collectionId = (await api.query.common.createdCollectionCount()).toNumber() + 1;
});
await confirmSponsorshipExpectFailure(collectionId, '//Bob');
@@ -369,7 +362,7 @@
it('(!negative test!) Confirm sponsorship by collection admin', async () => {
const collectionId = await createCollectionExpectSuccess();
await setCollectionSponsorExpectSuccess(collectionId, bob.address);
- await addCollectionAdminExpectSuccess(alice, collectionId, charlie);
+ await addCollectionAdminExpectSuccess(alice, collectionId, charlie.address);
await confirmSponsorshipExpectFailure(collectionId, '//Charlie');
});
@@ -377,7 +370,7 @@
const collectionId = await createCollectionExpectSuccess();
await confirmSponsorshipExpectFailure(collectionId, '//Bob');
});
-
+
it('(!negative test!) Confirm sponsorship in a collection that was destroyed', async () => {
const collectionId = await createCollectionExpectSuccess();
await destroyCollectionExpectSuccess(collectionId);
tests/src/connection.test.tsdiffbeforeafterboth--- a/tests/src/connection.test.ts
+++ b/tests/src/connection.test.ts
@@ -4,7 +4,7 @@
//
import usingApi from './substrate/substrate-api';
-import { WsProvider } from '@polkadot/api';
+import {WsProvider} from '@polkadot/api';
import * as chai from 'chai';
import chaiAsPromised from 'chai-as-promised';
@@ -21,19 +21,11 @@
});
it('Cannot connect to 255.255.255.255', async () => {
- const log = console.log;
- const error = console.error;
- console.log = function () {};
- console.error = function () {};
-
const neverConnectProvider = new WsProvider('ws://255.255.255.255:9944');
await expect((async () => {
await usingApi(async api => {
await api.rpc.system.health();
- }, { provider: neverConnectProvider });
+ }, {provider: neverConnectProvider});
})()).to.be.eventually.rejected;
-
- console.log = log;
- console.error = error;
});
-});
\ No newline at end of file
+});
tests/src/contracts.test.tsdiffbeforeafterboth--- a/tests/src/contracts.test.ts
+++ b/tests/src/contracts.test.ts
@@ -5,9 +5,9 @@
import chai from 'chai';
import chaiAsPromised from 'chai-as-promised';
-import usingApi, { submitTransactionAsync } from './substrate/substrate-api';
+import usingApi, {submitTransactionAsync} from './substrate/substrate-api';
import fs from 'fs';
-import { Abi, ContractPromise as Contract } from '@polkadot/api-contract';
+import {Abi, ContractPromise as Contract} from '@polkadot/api-contract';
import privateKey from './substrate/privateKey';
import {
deployFlipper,
@@ -26,6 +26,7 @@
normalizeAccountId,
isWhitelisted,
transferFromExpectSuccess,
+ getTokenOwner,
} from './util/helpers';
@@ -75,18 +76,15 @@
const changeAdminTx = api.tx.nft.addCollectionAdmin(collectionId, contract.address);
await submitTransactionAsync(alice, changeAdminTx);
- const tokenBefore: any = (await api.query.nft.nftItemList(collectionId, tokenId) as any).toJSON();
+ expect(await getTokenOwner(api, collectionId, tokenId)).to.be.deep.equal(normalizeAccountId(alice.address));
// Transfer
const transferTx = contract.tx.transfer(value, gasLimit, bob.address, collectionId, tokenId, 1);
const events = await submitTransactionAsync(alice, transferTx);
const result = getGenericResult(events);
- const tokenAfter: any = (await api.query.nft.nftItemList(collectionId, tokenId) as any).toJSON();
-
- // tslint:disable-next-line:no-unused-expression
expect(result.success).to.be.true;
- expect(tokenBefore.owner).to.be.deep.equal(normalizeAccountId(alice.address));
- expect(tokenAfter.owner).to.be.deep.equal(normalizeAccountId(bob.address));
+
+ expect(await getTokenOwner(api, collectionId, tokenId)).to.be.deep.equal(normalizeAccountId(bob.address));
});
});
@@ -102,17 +100,17 @@
await addToWhiteListExpectSuccess(alice, collectionId, contract.address);
await addToWhiteListExpectSuccess(alice, collectionId, bob.address);
- const transferTx = contract.tx.createItem(value, gasLimit, bob.address, collectionId, { Nft: {const_data: '0x010203', variable_data: '0x020304' }});
+ const transferTx = contract.tx.createItem(value, gasLimit, bob.address, collectionId, {Nft: {const_data: '0x010203', variable_data: '0x020304'}});
const events = await submitTransactionAsync(alice, transferTx);
const result = getGenericResult(events);
expect(result.success).to.be.true;
- const tokensAfter: any = (await api.query.nft.nftItemList.entries(collectionId) as any).map((kv: any) => kv[1].toJSON());
+ const tokensAfter = (await api.query.nft.nftItemList.entries(collectionId)).map((kv: any) => kv[1].toJSON());
expect(tokensAfter).to.be.deep.equal([
{
- Owner: bob.address,
- ConstData: '0x010203',
- VariableData: '0x020304',
+ owner: bob.address,
+ constData: '0x010203',
+ variableData: '0x020304',
},
]);
});
@@ -131,9 +129,9 @@
await addToWhiteListExpectSuccess(alice, collectionId, bob.address);
const transferTx = contract.tx.createMultipleItems(value, gasLimit, bob.address, collectionId, [
- { Nft: { const_data: '0x010203', variable_data: '0x020304' } },
- { Nft: { const_data: '0x010204', variable_data: '0x020305' } },
- { Nft: { const_data: '0x010205', variable_data: '0x020306' } },
+ {Nft: {const_data: '0x010203', variable_data: '0x020304'}},
+ {Nft: {const_data: '0x010204', variable_data: '0x020305'}},
+ {Nft: {const_data: '0x010205', variable_data: '0x020306'}},
]);
const events = await submitTransactionAsync(alice, transferTx);
const result = getGenericResult(events);
tests/src/createCollection.test.tsdiffbeforeafterboth--- a/tests/src/createCollection.test.ts
+++ b/tests/src/createCollection.test.ts
@@ -5,11 +5,9 @@
import chai from 'chai';
import chaiAsPromised from 'chai-as-promised';
-import { default as usingApi } from './substrate/substrate-api';
-import { createCollectionExpectFailure, createCollectionExpectSuccess } from './util/helpers';
+import {createCollectionExpectFailure, createCollectionExpectSuccess} from './util/helpers';
chai.use(chaiAsPromised);
-const expect = chai.expect;
describe('integration test: ext. createCollection():', () => {
it('Create new NFT collection', async () => {
@@ -34,10 +32,10 @@
describe('(!negative test!) integration test: ext. createCollection():', () => {
it('(!negative test!) create new NFT collection whith incorrect data (collection_name)', async () => {
- await createCollectionExpectFailure({ name: 'A'.repeat(65), mode: {type: 'NFT'}});
+ await createCollectionExpectFailure({name: 'A'.repeat(65), mode: {type: 'NFT'}});
});
it('(!negative test!) create new NFT collection whith incorrect data (collection_description)', async () => {
- await createCollectionExpectFailure({ description: 'A'.repeat(257), mode: { type: 'NFT' }});
+ await createCollectionExpectFailure({description: 'A'.repeat(257), mode: {type: 'NFT'}});
});
it('(!negative test!) create new NFT collection whith incorrect data (token_prefix)', async () => {
await createCollectionExpectFailure({tokenPrefix: 'A'.repeat(17), mode: {type: 'NFT'}});
tests/src/createItem.test.tsdiffbeforeafterboth--- a/tests/src/createItem.test.ts
+++ b/tests/src/createItem.test.ts
@@ -3,12 +3,12 @@
// file 'LICENSE', which is part of this source code package.
//
-import { default as usingApi } from './substrate/substrate-api';
+import {default as usingApi} from './substrate/substrate-api';
import chai from 'chai';
-import { Keyring } from '@polkadot/api';
-import { IKeyringPair } from '@polkadot/types/types';
-import {
- createCollectionExpectSuccess,
+import {Keyring} from '@polkadot/api';
+import {IKeyringPair} from '@polkadot/types/types';
+import {
+ createCollectionExpectSuccess,
createItemExpectSuccess,
addCollectionAdminExpectSuccess,
} from './util/helpers';
@@ -20,7 +20,7 @@
describe('integration test: ext. createItem():', () => {
before(async () => {
await usingApi(async () => {
- const keyring = new Keyring({ type: 'sr25519' });
+ const keyring = new Keyring({type: 'sr25519'});
alice = keyring.addFromUri('//Alice');
bob = keyring.addFromUri('//Bob');
});
@@ -44,19 +44,19 @@
it('Create new item in NFT collection with collection admin permissions', async () => {
const createMode = 'NFT';
const newCollectionID = await createCollectionExpectSuccess({mode: {type: createMode}});
- await addCollectionAdminExpectSuccess(alice, newCollectionID, bob);
+ await addCollectionAdminExpectSuccess(alice, newCollectionID, bob.address);
await createItemExpectSuccess(bob, newCollectionID, createMode);
});
it('Create new item in Fungible collection with collection admin permissions', async () => {
const createMode = 'Fungible';
const newCollectionID = await createCollectionExpectSuccess({mode: {type: createMode, decimalPoints: 0}});
- await addCollectionAdminExpectSuccess(alice, newCollectionID, bob);
+ await addCollectionAdminExpectSuccess(alice, newCollectionID, bob.address);
await createItemExpectSuccess(bob, newCollectionID, createMode);
});
it('Create new item in ReFungible collection with collection admin permissions', async () => {
const createMode = 'ReFungible';
const newCollectionID = await createCollectionExpectSuccess({mode: {type: createMode}});
- await addCollectionAdminExpectSuccess(alice, newCollectionID, bob);
+ await addCollectionAdminExpectSuccess(alice, newCollectionID, bob.address);
await createItemExpectSuccess(bob, newCollectionID, createMode);
});
});
@@ -64,7 +64,7 @@
describe('Negative integration test: ext. createItem():', () => {
before(async () => {
await usingApi(async () => {
- const keyring = new Keyring({ type: 'sr25519' });
+ const keyring = new Keyring({type: 'sr25519'});
alice = keyring.addFromUri('//Alice');
bob = keyring.addFromUri('//Bob');
});
tests/src/createMultipleItems.test.tsdiffbeforeafterboth--- a/tests/src/createMultipleItems.test.ts
+++ b/tests/src/createMultipleItems.test.ts
@@ -2,120 +2,105 @@
// This file is subject to the terms and conditions defined in
// file 'LICENSE', which is part of this source code package.
//
-import { ApiPromise } from '@polkadot/api';
-import { IKeyringPair } from '@polkadot/types/types';
-import BN from 'bn.js';
+import {ApiPromise} from '@polkadot/api';
+import {IKeyringPair} from '@polkadot/types/types';
import chai from 'chai';
import chaiAsPromised from 'chai-as-promised';
import privateKey from './substrate/privateKey';
-import { default as usingApi, submitTransactionAsync, submitTransactionExpectFailAsync } from './substrate/substrate-api';
+import {default as usingApi, submitTransactionAsync, submitTransactionExpectFailAsync} from './substrate/substrate-api';
import {
createCollectionExpectSuccess,
destroyCollectionExpectSuccess,
getGenericResult,
- IFungibleTokenDataType,
- IReFungibleTokenDataType,
normalizeAccountId,
setCollectionLimitsExpectSuccess,
addCollectionAdminExpectSuccess,
+ getBalance,
+ getTokenOwner,
+ getLastTokenId,
+ getVariableMetadata,
+ getConstMetadata,
} from './util/helpers';
chai.use(chaiAsPromised);
const expect = chai.expect;
-interface ITokenDataType {
- owner: number[];
- constData: number[];
- variableData: number[];
-}
-
describe('Integration Test createMultipleItems(collection_id, owner, items_data):', () => {
it('Create 0x31, 0x32, 0x33 items in active NFT collection and verify tokens data in chain', async () => {
await usingApi(async (api: ApiPromise) => {
const collectionId = await createCollectionExpectSuccess();
- const itemsListIndexBefore = await api.query.nft.itemListIndex(collectionId) as unknown as BN;
- expect(itemsListIndexBefore.toNumber()).to.be.equal(0);
- const Alice = privateKey('//Alice');
- const args = [{ nft: ['0x31', '0x31'] }, { nft: ['0x32', '0x32'] }, { nft: ['0x33', '0x33'] }];
+ const itemsListIndexBefore = await getLastTokenId(api, collectionId);
+ expect(itemsListIndexBefore).to.be.equal(0);
+ const alice = privateKey('//Alice');
+ const args = [{NFT: ['0x31', '0x31']}, {NFT: ['0x32', '0x32']}, {NFT: ['0x33', '0x33']}];
const createMultipleItemsTx = api.tx.nft
- .createMultipleItems(collectionId, normalizeAccountId(Alice.address), args);
- await submitTransactionAsync(Alice, createMultipleItemsTx);
- const itemsListIndexAfter = await api.query.nft.itemListIndex(collectionId) as unknown as BN;
- expect(itemsListIndexAfter.toNumber()).to.be.equal(3);
- const token1Data = (await api.query.nft.nftItemList(collectionId, 1)).toJSON() as unknown as ITokenDataType;
- const token2Data = (await api.query.nft.nftItemList(collectionId, 2)).toJSON() as unknown as ITokenDataType;
- const token3Data = (await api.query.nft.nftItemList(collectionId, 3)).toJSON() as unknown as ITokenDataType;
+ .createMultipleItems(collectionId, normalizeAccountId(alice.address), args);
+ await submitTransactionAsync(alice, createMultipleItemsTx);
+ const itemsListIndexAfter = await getLastTokenId(api, collectionId);
+ expect(itemsListIndexAfter).to.be.equal(3);
- expect(token1Data.owner).to.be.deep.equal(normalizeAccountId(Alice.address));
- expect(token2Data.owner).to.be.deep.equal(normalizeAccountId(Alice.address));
- expect(token3Data.owner).to.be.deep.equal(normalizeAccountId(Alice.address));
+ expect(await getTokenOwner(api, collectionId, 1)).to.be.deep.equal(normalizeAccountId(alice.address));
+ expect(await getTokenOwner(api, collectionId, 2)).to.be.deep.equal(normalizeAccountId(alice.address));
+ expect(await getTokenOwner(api, collectionId, 3)).to.be.deep.equal(normalizeAccountId(alice.address));
- expect(token1Data.constData.toString()).to.be.equal('0x31');
- expect(token2Data.constData.toString()).to.be.equal('0x32');
- expect(token3Data.constData.toString()).to.be.equal('0x33');
+ expect(await getConstMetadata(api, collectionId, 1)).to.be.deep.equal([0x31]);
+ expect(await getConstMetadata(api, collectionId, 2)).to.be.deep.equal([0x32]);
+ expect(await getConstMetadata(api, collectionId, 3)).to.be.deep.equal([0x33]);
- expect(token1Data.variableData.toString()).to.be.equal('0x31');
- expect(token2Data.variableData.toString()).to.be.equal('0x32');
- expect(token3Data.variableData.toString()).to.be.equal('0x33');
+ expect(await getVariableMetadata(api, collectionId, 1)).to.be.deep.equal([0x31]);
+ expect(await getVariableMetadata(api, collectionId, 2)).to.be.deep.equal([0x32]);
+ expect(await getVariableMetadata(api, collectionId, 3)).to.be.deep.equal([0x33]);
});
});
it('Create 0x01, 0x02, 0x03 items in active Fungible collection and verify tokens data in chain', async () => {
await usingApi(async (api: ApiPromise) => {
const collectionId = await createCollectionExpectSuccess({mode: {type: 'Fungible', decimalPoints: 0}});
- const itemsListIndexBefore = await api.query.nft.itemListIndex(collectionId) as unknown as BN;
- expect(itemsListIndexBefore.toNumber()).to.be.equal(0);
- const Alice = privateKey('//Alice');
+ const itemsListIndexBefore = await getLastTokenId(api, collectionId);
+ expect(itemsListIndexBefore).to.be.equal(0);
+ const alice = privateKey('//Alice');
const args = [
- {fungible: { value: 1 }},
- {fungible: { value: 2 }},
- {fungible: { value: 3 }},
+ {Fungible: {value: 1}},
+ {Fungible: {value: 2}},
+ {Fungible: {value: 3}},
];
const createMultipleItemsTx = api.tx.nft
- .createMultipleItems(collectionId, normalizeAccountId(Alice.address), args);
- await submitTransactionAsync(Alice, createMultipleItemsTx);
- const token1Data = (await api.query.nft.fungibleItemList(collectionId, Alice.address) as any).toJSON() as unknown as IFungibleTokenDataType;
+ .createMultipleItems(collectionId, normalizeAccountId(alice.address), args);
+ await submitTransactionAsync(alice, createMultipleItemsTx);
+ const token1Data = await getBalance(api, collectionId, alice.address, 0);
- expect(token1Data.value).to.be.equal(6); // 1 + 2 + 3
+ expect(token1Data).to.be.equal(6n); // 1 + 2 + 3
});
});
it('Create 0x31, 0x32, 0x33 items in active ReFungible collection and verify tokens data in chain', async () => {
await usingApi(async (api: ApiPromise) => {
const collectionId = await createCollectionExpectSuccess({mode: {type: 'ReFungible'}});
- const itemsListIndexBefore = await api.query.nft.itemListIndex(collectionId) as unknown as BN;
- expect(itemsListIndexBefore.toNumber()).to.be.equal(0);
- const Alice = privateKey('//Alice');
+ const itemsListIndexBefore = await getLastTokenId(api, collectionId);
+ expect(itemsListIndexBefore).to.be.equal(0);
+ const alice = privateKey('//Alice');
const args = [
- {refungible: {const_data: [0x31], variable_data: [0x31], pieces: 1}},
- {refungible: {const_data: [0x32], variable_data: [0x32], pieces: 1}},
- {refungible: {const_data: [0x33], variable_data: [0x33], pieces: 1}},
+ {ReFungible: {const_data: [0x31], variable_data: [0x31], pieces: 1}},
+ {ReFungible: {const_data: [0x32], variable_data: [0x32], pieces: 1}},
+ {ReFungible: {const_data: [0x33], variable_data: [0x33], pieces: 1}},
];
const createMultipleItemsTx = api.tx.nft
- .createMultipleItems(collectionId, normalizeAccountId(Alice.address), args);
- await submitTransactionAsync(Alice, createMultipleItemsTx);
- const itemsListIndexAfter = await api.query.nft.itemListIndex(collectionId) as unknown as BN;
- expect(itemsListIndexAfter.toNumber()).to.be.equal(3);
- const token1Data = (await api.query.nft.reFungibleItemList(collectionId, 1) as any).toJSON() as unknown as IReFungibleTokenDataType;
- const token2Data = (await api.query.nft.reFungibleItemList(collectionId, 2) as any).toJSON() as unknown as IReFungibleTokenDataType;
- const token3Data = (await api.query.nft.reFungibleItemList(collectionId, 3) as any).toJSON() as unknown as IReFungibleTokenDataType;
+ .createMultipleItems(collectionId, normalizeAccountId(alice.address), args);
+ await submitTransactionAsync(alice, createMultipleItemsTx);
+ const itemsListIndexAfter = await getLastTokenId(api, collectionId);
+ expect(itemsListIndexAfter).to.be.equal(3);
- expect(token1Data.owner[0].owner).to.be.deep.equal(normalizeAccountId(Alice.address));
- expect(token1Data.owner[0].fraction).to.be.equal(1);
+ expect(await getBalance(api, collectionId, alice.address, 1)).to.be.equal(1n);
+ expect(await getBalance(api, collectionId, alice.address, 2)).to.be.equal(1n);
+ expect(await getBalance(api, collectionId, alice.address, 3)).to.be.equal(1n);
- expect(token2Data.owner[0].owner).to.be.deep.equal(normalizeAccountId(Alice.address));
- expect(token2Data.owner[0].fraction).to.be.equal(1);
+ expect(await getConstMetadata(api, collectionId, 1)).to.be.deep.equal([0x31]);
+ expect(await getConstMetadata(api, collectionId, 2)).to.be.deep.equal([0x32]);
+ expect(await getConstMetadata(api, collectionId, 3)).to.be.deep.equal([0x33]);
- expect(token3Data.owner[0].owner).to.be.deep.equal(normalizeAccountId(Alice.address));
- expect(token3Data.owner[0].fraction).to.be.equal(1);
-
- expect(token1Data.constData.toString()).to.be.equal('0x31');
- expect(token2Data.constData.toString()).to.be.equal('0x32');
- expect(token3Data.constData.toString()).to.be.equal('0x33');
-
- expect(token1Data.variableData.toString()).to.be.equal('0x31');
- expect(token2Data.variableData.toString()).to.be.equal('0x32');
- expect(token3Data.variableData.toString()).to.be.equal('0x33');
+ expect(await getVariableMetadata(api, collectionId, 1)).to.be.deep.equal([0x31]);
+ expect(await getVariableMetadata(api, collectionId, 2)).to.be.deep.equal([0x32]);
+ expect(await getVariableMetadata(api, collectionId, 3)).to.be.deep.equal([0x33]);
});
});
@@ -128,8 +113,8 @@
tokenLimit: 2,
});
const args = [
- { nft: ['A', 'A'] },
- { nft: ['B', 'B'] },
+ {NFT: ['A', 'A']},
+ {NFT: ['B', 'B']},
];
const createMultipleItemsTx = api.tx.nft.createMultipleItems(collectionId, normalizeAccountId(alice.address), args);
const events = await submitTransactionAsync(alice, createMultipleItemsTx);
@@ -141,183 +126,157 @@
describe('Integration Test createMultipleItems(collection_id, owner, items_data) with collection admin permissions:', () => {
- let Alice: IKeyringPair;
- let Bob: IKeyringPair;
+ let alice: IKeyringPair;
+ let bob: IKeyringPair;
before(async () => {
await usingApi(async () => {
- Alice = privateKey('//Alice');
- Bob = privateKey('//Bob');
+ alice = privateKey('//Alice');
+ bob = privateKey('//Bob');
});
});
it('Create 0x31, 0x32, 0x33 items in active NFT collection and verify tokens data in chain', async () => {
await usingApi(async (api: ApiPromise) => {
const collectionId = await createCollectionExpectSuccess();
- const itemsListIndexBefore = await api.query.nft.itemListIndex(collectionId) as unknown as BN;
- expect(itemsListIndexBefore.toNumber()).to.be.equal(0);
- await addCollectionAdminExpectSuccess(Alice, collectionId, Bob);
- const args = [{ nft: ['0x31', '0x31'] }, { nft: ['0x32', '0x32'] }, { nft: ['0x33', '0x33'] }];
+ const itemsListIndexBefore = await getLastTokenId(api, collectionId);
+ expect(itemsListIndexBefore).to.be.equal(0);
+ await addCollectionAdminExpectSuccess(alice, collectionId, bob.address);
+ const args = [{NFT: ['0x31', '0x31']}, {NFT: ['0x32', '0x32']}, {NFT: ['0x33', '0x33']}];
const createMultipleItemsTx = api.tx.nft
- .createMultipleItems(collectionId, normalizeAccountId(Bob.address), args);
- await submitTransactionAsync(Bob, createMultipleItemsTx);
- const itemsListIndexAfter = await api.query.nft.itemListIndex(collectionId) as unknown as BN;
- expect(itemsListIndexAfter.toNumber()).to.be.equal(3);
- const token1Data = (await api.query.nft.nftItemList(collectionId, 1)).toJSON() as unknown as ITokenDataType;
- const token2Data = (await api.query.nft.nftItemList(collectionId, 2)).toJSON() as unknown as ITokenDataType;
- const token3Data = (await api.query.nft.nftItemList(collectionId, 3)).toJSON() as unknown as ITokenDataType;
+ .createMultipleItems(collectionId, normalizeAccountId(bob.address), args);
+ await submitTransactionAsync(bob, createMultipleItemsTx);
+ const itemsListIndexAfter = await getLastTokenId(api, collectionId);
+ expect(itemsListIndexAfter).to.be.equal(3);
- expect(token1Data.owner).to.be.deep.equal(normalizeAccountId(Bob.address));
- expect(token2Data.owner).to.be.deep.equal(normalizeAccountId(Bob.address));
- expect(token3Data.owner).to.be.deep.equal(normalizeAccountId(Bob.address));
+ expect(await getTokenOwner(api, collectionId, 1)).to.be.deep.equal(normalizeAccountId(bob.address));
+ expect(await getTokenOwner(api, collectionId, 2)).to.be.deep.equal(normalizeAccountId(bob.address));
+ expect(await getTokenOwner(api, collectionId, 3)).to.be.deep.equal(normalizeAccountId(bob.address));
- expect(token1Data.constData.toString()).to.be.equal('0x31');
- expect(token2Data.constData.toString()).to.be.equal('0x32');
- expect(token3Data.constData.toString()).to.be.equal('0x33');
+ expect(await getConstMetadata(api, collectionId, 1)).to.be.deep.equal([0x31]);
+ expect(await getConstMetadata(api, collectionId, 2)).to.be.deep.equal([0x32]);
+ expect(await getConstMetadata(api, collectionId, 3)).to.be.deep.equal([0x33]);
- expect(token1Data.variableData.toString()).to.be.equal('0x31');
- expect(token2Data.variableData.toString()).to.be.equal('0x32');
- expect(token3Data.variableData.toString()).to.be.equal('0x33');
+ expect(await getVariableMetadata(api, collectionId, 1)).to.be.deep.equal([0x31]);
+ expect(await getVariableMetadata(api, collectionId, 2)).to.be.deep.equal([0x32]);
+ expect(await getVariableMetadata(api, collectionId, 3)).to.be.deep.equal([0x33]);
});
});
it('Create 0x01, 0x02, 0x03 items in active Fungible collection and verify tokens data in chain', async () => {
await usingApi(async (api: ApiPromise) => {
const collectionId = await createCollectionExpectSuccess({mode: {type: 'Fungible', decimalPoints: 0}});
- const itemsListIndexBefore = await api.query.nft.itemListIndex(collectionId) as unknown as BN;
- expect(itemsListIndexBefore.toNumber()).to.be.equal(0);
- await addCollectionAdminExpectSuccess(Alice, collectionId, Bob);
+ const itemsListIndexBefore = await getLastTokenId(api, collectionId);
+ expect(itemsListIndexBefore).to.be.equal(0);
+ await addCollectionAdminExpectSuccess(alice, collectionId, bob.address);
const args = [
- {fungible: { value: 1 }},
- {fungible: { value: 2 }},
- {fungible: { value: 3 }},
+ {Fungible: {value: 1}},
+ {Fungible: {value: 2}},
+ {Fungible: {value: 3}},
];
const createMultipleItemsTx = api.tx.nft
- .createMultipleItems(collectionId, normalizeAccountId(Bob.address), args);
- await submitTransactionAsync(Bob, createMultipleItemsTx);
- const token1Data = (await api.query.nft.fungibleItemList(collectionId, Bob.address) as any).toJSON() as unknown as IFungibleTokenDataType;
+ .createMultipleItems(collectionId, normalizeAccountId(bob.address), args);
+ await submitTransactionAsync(bob, createMultipleItemsTx);
+ const token1Data = await getBalance(api, collectionId, bob.address, 0);
- expect(token1Data.value).to.be.equal(6); // 1 + 2 + 3
+ expect(token1Data).to.be.equal(6n); // 1 + 2 + 3
});
});
it('Create 0x31, 0x32, 0x33 items in active ReFungible collection and verify tokens data in chain', async () => {
await usingApi(async (api: ApiPromise) => {
const collectionId = await createCollectionExpectSuccess({mode: {type: 'ReFungible'}});
- const itemsListIndexBefore = await api.query.nft.itemListIndex(collectionId) as unknown as BN;
- expect(itemsListIndexBefore.toNumber()).to.be.equal(0);
- await addCollectionAdminExpectSuccess(Alice, collectionId, Bob);
+ const itemsListIndexBefore = await getLastTokenId(api, collectionId);
+ expect(itemsListIndexBefore).to.be.equal(0);
+ await addCollectionAdminExpectSuccess(alice, collectionId, bob.address);
const args = [
- {refungible: {const_data: [0x31], variable_data: [0x31], pieces: 1}},
- {refungible: {const_data: [0x32], variable_data: [0x32], pieces: 1}},
- {refungible: {const_data: [0x33], variable_data: [0x33], pieces: 1}},
+ {ReFungible: {const_data: [0x31], variable_data: [0x31], pieces: 1}},
+ {ReFungible: {const_data: [0x32], variable_data: [0x32], pieces: 1}},
+ {ReFungible: {const_data: [0x33], variable_data: [0x33], pieces: 1}},
];
const createMultipleItemsTx = api.tx.nft
- .createMultipleItems(collectionId, normalizeAccountId(Bob.address), args);
- await submitTransactionAsync(Bob, createMultipleItemsTx);
- const itemsListIndexAfter = await api.query.nft.itemListIndex(collectionId) as unknown as BN;
- expect(itemsListIndexAfter.toNumber()).to.be.equal(3);
- const token1Data = (await api.query.nft.reFungibleItemList(collectionId, 1) as any).toJSON() as unknown as IReFungibleTokenDataType;
- const token2Data = (await api.query.nft.reFungibleItemList(collectionId, 2) as any).toJSON() as unknown as IReFungibleTokenDataType;
- const token3Data = (await api.query.nft.reFungibleItemList(collectionId, 3) as any).toJSON() as unknown as IReFungibleTokenDataType;
+ .createMultipleItems(collectionId, normalizeAccountId(bob.address), args);
+ await submitTransactionAsync(bob, createMultipleItemsTx);
+ const itemsListIndexAfter = await getLastTokenId(api, collectionId);
+ expect(itemsListIndexAfter).to.be.equal(3);
- expect(token1Data.owner[0].owner).to.be.deep.equal(normalizeAccountId(Bob.address));
- expect(token1Data.owner[0].fraction).to.be.equal(1);
+ expect(await getBalance(api, collectionId, bob.address, 1)).to.be.equal(1n);
+ expect(await getBalance(api, collectionId, bob.address, 2)).to.be.equal(1n);
+ expect(await getBalance(api, collectionId, bob.address, 3)).to.be.equal(1n);
- expect(token2Data.owner[0].owner).to.be.deep.equal(normalizeAccountId(Bob.address));
- expect(token2Data.owner[0].fraction).to.be.equal(1);
-
- expect(token3Data.owner[0].owner).to.be.deep.equal(normalizeAccountId(Bob.address));
- expect(token3Data.owner[0].fraction).to.be.equal(1);
+ expect(await getConstMetadata(api, collectionId, 1)).to.be.deep.equal([0x31]);
+ expect(await getConstMetadata(api, collectionId, 2)).to.be.deep.equal([0x32]);
+ expect(await getConstMetadata(api, collectionId, 3)).to.be.deep.equal([0x33]);
- expect(token1Data.constData.toString()).to.be.equal('0x31');
- expect(token2Data.constData.toString()).to.be.equal('0x32');
- expect(token3Data.constData.toString()).to.be.equal('0x33');
-
- expect(token1Data.variableData.toString()).to.be.equal('0x31');
- expect(token2Data.variableData.toString()).to.be.equal('0x32');
- expect(token3Data.variableData.toString()).to.be.equal('0x33');
+ expect(await getVariableMetadata(api, collectionId, 1)).to.be.deep.equal([0x31]);
+ expect(await getVariableMetadata(api, collectionId, 2)).to.be.deep.equal([0x32]);
+ expect(await getVariableMetadata(api, collectionId, 3)).to.be.deep.equal([0x33]);
});
});
});
describe('Negative Integration Test createMultipleItems(collection_id, owner, items_data):', () => {
- let Alice: IKeyringPair;
- let Bob: IKeyringPair;
+ let alice: IKeyringPair;
+ let bob: IKeyringPair;
before(async () => {
await usingApi(async () => {
- Alice = privateKey('//Alice');
- Bob = privateKey('//Bob');
+ alice = privateKey('//Alice');
+ bob = privateKey('//Bob');
});
});
it('Regular user cannot create items in active NFT collection', async () => {
await usingApi(async (api: ApiPromise) => {
const collectionId = await createCollectionExpectSuccess();
- const itemsListIndexBefore = await api.query.nft.itemListIndex(collectionId) as unknown as BN;
- expect(itemsListIndexBefore.toNumber()).to.be.equal(0);
- const args = [{ nft: ['0x31', '0x31'] }, { nft: ['0x32', '0x32'] }, { nft: ['0x33', '0x33'] }];
+ const itemsListIndexBefore = await getLastTokenId(api, collectionId);
+ expect(itemsListIndexBefore).to.be.equal(0);
+ const args = [{NFT: ['0x31', '0x31']}, {NFT: ['0x32', '0x32']}, {NFT: ['0x33', '0x33']}];
const createMultipleItemsTx = api.tx.nft
- .createMultipleItems(collectionId, normalizeAccountId(Alice.address), args);
- await expect(submitTransactionAsync(Bob, createMultipleItemsTx)).to.be.rejected;
+ .createMultipleItems(collectionId, normalizeAccountId(alice.address), args);
+ await expect(submitTransactionAsync(bob, createMultipleItemsTx)).to.be.rejected;
});
});
it('Regular user cannot create items in active Fungible collection', async () => {
await usingApi(async (api: ApiPromise) => {
const collectionId = await createCollectionExpectSuccess({mode: {type: 'Fungible', decimalPoints: 0}});
- const itemsListIndexBefore = await api.query.nft.itemListIndex(collectionId) as unknown as BN;
- expect(itemsListIndexBefore.toNumber()).to.be.equal(0);
+ const itemsListIndexBefore = await getLastTokenId(api, collectionId);
+ expect(itemsListIndexBefore).to.be.equal(0);
const args = [
- {fungible: { value: 1 }},
- {fungible: { value: 2 }},
- {fungible: { value: 3 }},
+ {Fungible: {value: 1}},
+ {Fungible: {value: 2}},
+ {Fungible: {value: 3}},
];
const createMultipleItemsTx = api.tx.nft
- .createMultipleItems(collectionId, normalizeAccountId(Alice.address), args);
- await expect(submitTransactionAsync(Bob, createMultipleItemsTx)).to.be.rejected;
+ .createMultipleItems(collectionId, normalizeAccountId(alice.address), args);
+ await expect(submitTransactionAsync(bob, createMultipleItemsTx)).to.be.rejected;
});
});
it('Regular user cannot create items in active ReFungible collection', async () => {
await usingApi(async (api: ApiPromise) => {
const collectionId = await createCollectionExpectSuccess({mode: {type: 'ReFungible'}});
- const itemsListIndexBefore = await api.query.nft.itemListIndex(collectionId) as unknown as BN;
- expect(itemsListIndexBefore.toNumber()).to.be.equal(0);
+ const itemsListIndexBefore = await getLastTokenId(api, collectionId);
+ expect(itemsListIndexBefore).to.be.equal(0);
const args = [
- {refungible: {const_data: [0x31], variable_data: [0x31], pieces: 1}},
- {refungible: {const_data: [0x32], variable_data: [0x32], pieces: 1}},
- {refungible: {const_data: [0x33], variable_data: [0x33], pieces: 1}},
+ {ReFungible: {const_data: [0x31], variable_data: [0x31], pieces: 1}},
+ {ReFungible: {const_data: [0x32], variable_data: [0x32], pieces: 1}},
+ {ReFungible: {const_data: [0x33], variable_data: [0x33], pieces: 1}},
];
const createMultipleItemsTx = api.tx.nft
- .createMultipleItems(collectionId, normalizeAccountId(Alice.address), args);
- await expect(submitTransactionAsync(Bob, createMultipleItemsTx)).to.be.rejected;
- });
- });
-
- it('Create token with not existing type', async () => {
- await usingApi(async (api: ApiPromise) => {
- const collectionId = await createCollectionExpectSuccess();
- try {
- const args = [{ invalid: null }, { invalid: null }, { invalid: null }];
- const createMultipleItemsTx = await api.tx.nft
- .createMultipleItems(collectionId, normalizeAccountId(Alice.address), args);
- await expect(submitTransactionExpectFailAsync(Alice, createMultipleItemsTx)).to.be.rejected;
- } catch (e) {
- // tslint:disable-next-line:no-unused-expression
- expect(e).to.be.exist;
- }
+ .createMultipleItems(collectionId, normalizeAccountId(alice.address), args);
+ await expect(submitTransactionAsync(bob, createMultipleItemsTx)).to.be.rejected;
});
});
it('Create token in not existing collection', async () => {
await usingApi(async (api: ApiPromise) => {
- const collectionId = parseInt((await api.query.nft.createdCollectionCount()).toString()) + 1;
+ const collectionId = (await api.query.common.createdCollectionCount()).toNumber() + 1;
const createMultipleItemsTx = api.tx.nft
- .createMultipleItems(collectionId, normalizeAccountId(Alice.address), ['NFT', 'NFT', 'NFT']);
- await expect(submitTransactionExpectFailAsync(Alice, createMultipleItemsTx)).to.be.rejected;
+ .createMultipleItems(collectionId, normalizeAccountId(alice.address), ['NFT', 'NFT', 'NFT']);
+ await expect(submitTransactionExpectFailAsync(alice, createMultipleItemsTx)).to.be.rejected;
});
});
@@ -325,27 +284,27 @@
await usingApi(async (api: ApiPromise) => {
// NFT
const collectionId = await createCollectionExpectSuccess();
- const Alice = privateKey('//Alice');
+ const alice = privateKey('//Alice');
const args = [
- { nft: ['A'.repeat(2049), 'A'.repeat(2049)] },
- { nft: ['B'.repeat(2049), 'B'.repeat(2049)] },
- { nft: ['C'.repeat(2049), 'C'.repeat(2049)] },
+ {NFT: ['A'.repeat(2049), 'A'.repeat(2049)]},
+ {NFT: ['B'.repeat(2049), 'B'.repeat(2049)]},
+ {NFT: ['C'.repeat(2049), 'C'.repeat(2049)]},
];
const createMultipleItemsTx = api.tx.nft
- .createMultipleItems(collectionId, normalizeAccountId(Alice.address), args);
- await expect(submitTransactionExpectFailAsync(Alice, createMultipleItemsTx)).to.be.rejected;
+ .createMultipleItems(collectionId, normalizeAccountId(alice.address), args);
+ await expect(submitTransactionExpectFailAsync(alice, createMultipleItemsTx)).to.be.rejected;
// ReFungible
const collectionIdReFungible =
await createCollectionExpectSuccess({mode: {type: 'ReFungible'}});
const argsReFungible = [
- { ReFungible: ['1'.repeat(2049), '1'.repeat(2049), 10] },
- { ReFungible: ['2'.repeat(2049), '2'.repeat(2049), 10] },
- { ReFungible: ['3'.repeat(2049), '3'.repeat(2049), 10] },
+ {ReFungible: ['1'.repeat(2049), '1'.repeat(2049), 10]},
+ {ReFungible: ['2'.repeat(2049), '2'.repeat(2049), 10]},
+ {ReFungible: ['3'.repeat(2049), '3'.repeat(2049), 10]},
];
const createMultipleItemsTxFungible = api.tx.nft
- .createMultipleItems(collectionIdReFungible, normalizeAccountId(Alice.address), argsReFungible);
- await expect(submitTransactionExpectFailAsync(Alice, createMultipleItemsTxFungible)).to.be.rejected;
+ .createMultipleItems(collectionIdReFungible, normalizeAccountId(alice.address), argsReFungible);
+ await expect(submitTransactionExpectFailAsync(alice, createMultipleItemsTxFungible)).to.be.rejected;
});
});
@@ -353,8 +312,8 @@
await usingApi(async (api: ApiPromise) => {
const collectionId = await createCollectionExpectSuccess();
const createMultipleItemsTx = api.tx.nft
- .createMultipleItems(collectionId, normalizeAccountId(Alice.address), ['NFT', 'Fungible', 'ReFungible']);
- await expect(submitTransactionExpectFailAsync(Alice, createMultipleItemsTx)).to.be.rejected;
+ .createMultipleItems(collectionId, normalizeAccountId(alice.address), ['NFT', 'Fungible', 'ReFungible']);
+ await expect(submitTransactionExpectFailAsync(alice, createMultipleItemsTx)).to.be.rejected;
// garbage collection :-D
await destroyCollectionExpectSuccess(collectionId);
});
@@ -364,13 +323,13 @@
await usingApi(async (api: ApiPromise) => {
const collectionId = await createCollectionExpectSuccess();
const args = [
- { nft: ['A', 'A'] },
- { nft: ['B', 'B'.repeat(2049)] },
- { nft: ['C'.repeat(2049), 'C'] },
+ {NFT: ['A', 'A']},
+ {NFT: ['B', 'B'.repeat(2049)]},
+ {NFT: ['C'.repeat(2049), 'C']},
];
const createMultipleItemsTx = await api.tx.nft
- .createMultipleItems(collectionId, normalizeAccountId(Alice.address), args);
- await expect(submitTransactionExpectFailAsync(Alice, createMultipleItemsTx)).to.be.rejected;
+ .createMultipleItems(collectionId, normalizeAccountId(alice.address), args);
+ await expect(submitTransactionExpectFailAsync(alice, createMultipleItemsTx)).to.be.rejected;
});
});
@@ -378,15 +337,15 @@
await usingApi(async (api) => {
const collectionId = await createCollectionExpectSuccess();
- await setCollectionLimitsExpectSuccess(Alice, collectionId, {
+ await setCollectionLimitsExpectSuccess(alice, collectionId, {
tokenLimit: 1,
});
const args = [
- { nft: ['A', 'A'] },
- { nft: ['B', 'B'] },
+ {NFT: ['A', 'A']},
+ {NFT: ['B', 'B']},
];
- const createMultipleItemsTx = api.tx.nft.createMultipleItems(collectionId, normalizeAccountId(Alice.address), args);
- await expect(submitTransactionExpectFailAsync(Alice, createMultipleItemsTx)).to.be.rejected;
+ const createMultipleItemsTx = api.tx.nft.createMultipleItems(collectionId, normalizeAccountId(alice.address), args);
+ await expect(submitTransactionExpectFailAsync(alice, createMultipleItemsTx)).to.be.rejected;
});
});
});
tests/src/creditFeesToTreasury.test.tsdiffbeforeafterboth--- a/tests/src/creditFeesToTreasury.test.ts
+++ b/tests/src/creditFeesToTreasury.test.ts
@@ -5,25 +5,24 @@
import chai from 'chai';
import chaiAsPromised from 'chai-as-promised';
-import { default as usingApi, submitTransactionAsync, submitTransactionExpectFailAsync } from './substrate/substrate-api';
-import { alicesPublicKey, bobsPublicKey } from './accounts';
+import {default as usingApi, submitTransactionAsync, submitTransactionExpectFailAsync} from './substrate/substrate-api';
+import {alicesPublicKey, bobsPublicKey} from './accounts';
import privateKey from './substrate/privateKey';
-import { BigNumber } from 'bignumber.js';
-import { IKeyringPair } from '@polkadot/types/types';
-import {
- createCollectionExpectSuccess,
+import {IKeyringPair} from '@polkadot/types/types';
+import {
+ createCollectionExpectSuccess,
createItemExpectSuccess,
getGenericResult,
transferExpectSuccess,
} from './util/helpers';
-import { default as waitNewBlocks } from './substrate/wait-new-blocks';
-import { ApiPromise } from '@polkadot/api';
+import {default as waitNewBlocks} from './substrate/wait-new-blocks';
+import {ApiPromise} from '@polkadot/api';
chai.use(chaiAsPromised);
const expect = chai.expect;
-const Treasury = '5EYCAe5ijiYfyeZ2JJCGq56LmPyNRAKzpG4QkoQkkQNB5e6Z';
+const TREASURY = '5EYCAe5ijiYfyeZ2JJCGq56LmPyNRAKzpG4QkoQkkQNB5e6Z';
const saneMinimumFee = 0.05;
const saneMaximumFee = 0.5;
const createCollectionDeposit = 100;
@@ -31,14 +30,14 @@
let alice: IKeyringPair;
let bob: IKeyringPair;
-// Skip the inflation block pauses if the block is close to inflation block
+// Skip the inflation block pauses if the block is close to inflation block
// until the inflation happens
/*eslint no-async-promise-executor: "off"*/
function skipInflationBlock(api: ApiPromise): Promise<void> {
const promise = new Promise<void>(async (resolve) => {
- const blockInterval = parseInt((await api.consts.inflation.inflationBlockInterval).toString());
+ const blockInterval = (await api.consts.inflation.inflationBlockInterval).toNumber();
const unsubscribe = await api.rpc.chain.subscribeNewHeads(head => {
- const currentBlock = parseInt(head.number.toString());
+ const currentBlock = head.number.toNumber();
if (currentBlock % blockInterval < blockInterval - 10) {
unsubscribe();
resolve();
@@ -64,18 +63,18 @@
await skipInflationBlock(api);
await waitNewBlocks(api, 1);
- const totalBefore = new BigNumber((await api.query.balances.totalIssuance()).toString());
+ const totalBefore = (await api.query.balances.totalIssuance()).toBigInt();
const alicePrivateKey = privateKey('//Alice');
- const amount = new BigNumber(1);
- const transfer = api.tx.balances.transfer(bobsPublicKey, amount.toFixed());
+ const amount = 1n;
+ const transfer = api.tx.balances.transfer(bobsPublicKey, amount);
const result = getGenericResult(await submitTransactionAsync(alicePrivateKey, transfer));
- const totalAfter = new BigNumber((await api.query.balances.totalIssuance()).toString());
+ const totalAfter = (await api.query.balances.totalIssuance()).toBigInt();
expect(result.success).to.be.true;
- expect(totalAfter.toFixed()).to.be.equal(totalBefore.toFixed());
+ expect(totalAfter).to.be.equal(totalBefore);
});
});
@@ -85,20 +84,20 @@
await waitNewBlocks(api, 1);
const alicePrivateKey = privateKey('//Alice');
- const treasuryBalanceBefore = new BigNumber((await api.query.system.account(Treasury)).data.free.toString());
- const aliceBalanceBefore = new BigNumber((await api.query.system.account(alicesPublicKey)).data.free.toString());
+ const treasuryBalanceBefore: bigint = (await api.query.system.account(TREASURY)).data.free.toBigInt();
+ const aliceBalanceBefore: bigint = (await api.query.system.account(alicesPublicKey)).data.free.toBigInt();
- const amount = new BigNumber(1);
- const transfer = api.tx.balances.transfer(bobsPublicKey, amount.toFixed());
+ const amount = 1n;
+ const transfer = api.tx.balances.transfer(bobsPublicKey, amount);
const result = getGenericResult(await submitTransactionAsync(alicePrivateKey, transfer));
- const treasuryBalanceAfter = new BigNumber((await api.query.system.account(Treasury)).data.free.toString());
- const aliceBalanceAfter = new BigNumber((await api.query.system.account(alicesPublicKey)).data.free.toString());
- const fee = aliceBalanceBefore.minus(aliceBalanceAfter).minus(amount);
- const treasuryIncrease = treasuryBalanceAfter.minus(treasuryBalanceBefore);
+ const treasuryBalanceAfter: bigint = (await api.query.system.account(TREASURY)).data.free.toBigInt();
+ const aliceBalanceAfter: bigint = (await api.query.system.account(alicesPublicKey)).data.free.toBigInt();
+ const fee = aliceBalanceBefore - aliceBalanceAfter - amount;
+ const treasuryIncrease = treasuryBalanceAfter - treasuryBalanceBefore;
expect(result.success).to.be.true;
- expect(treasuryIncrease.toFixed()).to.be.equal(fee.toFixed());
+ expect(treasuryIncrease).to.be.equal(fee);
});
});
@@ -108,18 +107,18 @@
await waitNewBlocks(api, 1);
const bobPrivateKey = privateKey('//Bob');
- const treasuryBalanceBefore = new BigNumber((await api.query.system.account(Treasury)).data.free.toString());
- const bobBalanceBefore = new BigNumber((await api.query.system.account(bobsPublicKey)).data.free.toString());
+ const treasuryBalanceBefore = (await api.query.system.account(TREASURY)).data.free.toBigInt();
+ const bobBalanceBefore = (await api.query.system.account(bobsPublicKey)).data.free.toBigInt();
const badTx = api.tx.balances.setBalance(alicesPublicKey, 0, 0);
await expect(submitTransactionExpectFailAsync(bobPrivateKey, badTx)).to.be.rejected;
- const treasuryBalanceAfter = new BigNumber((await api.query.system.account(Treasury)).data.free.toString());
- const bobBalanceAfter = new BigNumber((await api.query.system.account(bobsPublicKey)).data.free.toString());
- const fee = bobBalanceBefore.minus(bobBalanceAfter);
- const treasuryIncrease = treasuryBalanceAfter.minus(treasuryBalanceBefore);
+ const treasuryBalanceAfter = (await api.query.system.account(TREASURY)).data.free.toBigInt();
+ const bobBalanceAfter = (await api.query.system.account(bobsPublicKey)).data.free.toBigInt();
+ const fee = bobBalanceBefore - bobBalanceAfter;
+ const treasuryIncrease = treasuryBalanceAfter - treasuryBalanceBefore;
- expect(treasuryIncrease.toFixed()).to.be.equal(fee.toFixed());
+ expect(treasuryIncrease).to.be.equal(fee);
});
});
@@ -128,17 +127,17 @@
await skipInflationBlock(api);
await waitNewBlocks(api, 1);
- const treasuryBalanceBefore = new BigNumber((await api.query.system.account(Treasury)).data.free.toString());
- const aliceBalanceBefore = new BigNumber((await api.query.system.account(alicesPublicKey)).data.free.toString());
+ const treasuryBalanceBefore = (await api.query.system.account(TREASURY)).data.free.toBigInt();
+ const aliceBalanceBefore = (await api.query.system.account(alicesPublicKey)).data.free.toBigInt();
await createCollectionExpectSuccess();
- const treasuryBalanceAfter = new BigNumber((await api.query.system.account(Treasury)).data.free.toString());
- const aliceBalanceAfter = new BigNumber((await api.query.system.account(alicesPublicKey)).data.free.toString());
- const fee = aliceBalanceBefore.minus(aliceBalanceAfter);
- const treasuryIncrease = treasuryBalanceAfter.minus(treasuryBalanceBefore);
+ const treasuryBalanceAfter = (await api.query.system.account(TREASURY)).data.free.toBigInt();
+ const aliceBalanceAfter = (await api.query.system.account(alicesPublicKey)).data.free.toBigInt();
+ const fee = aliceBalanceBefore - aliceBalanceAfter;
+ const treasuryIncrease = treasuryBalanceAfter - treasuryBalanceBefore;
- expect(treasuryIncrease.toFixed()).to.be.equal(fee.toFixed());
+ expect(treasuryIncrease).to.be.equal(fee);
});
});
@@ -147,15 +146,15 @@
await skipInflationBlock(api);
await waitNewBlocks(api, 1);
- const aliceBalanceBefore = new BigNumber((await api.query.system.account(alicesPublicKey)).data.free.toString());
+ const aliceBalanceBefore: bigint = (await api.query.system.account(alicesPublicKey)).data.free.toBigInt();
await createCollectionExpectSuccess();
- const aliceBalanceAfter = new BigNumber((await api.query.system.account(alicesPublicKey)).data.free.toString());
- const fee = aliceBalanceBefore.minus(aliceBalanceAfter);
+ const aliceBalanceAfter: bigint = (await api.query.system.account(alicesPublicKey)).data.free.toBigInt();
+ const fee = aliceBalanceBefore - aliceBalanceAfter;
- expect(fee.dividedBy(1e15).toNumber()).to.be.lessThan(saneMaximumFee + createCollectionDeposit);
- expect(fee.dividedBy(1e15).toNumber()).to.be.greaterThan(saneMinimumFee + createCollectionDeposit);
+ expect(fee / 10n ** 15n < BigInt(Math.ceil(saneMaximumFee + createCollectionDeposit))).to.be.true;
+ expect(fee / 10n ** 15n < BigInt(Math.ceil(saneMinimumFee + createCollectionDeposit))).to.be.true;
});
});
@@ -167,17 +166,16 @@
const collectionId = await createCollectionExpectSuccess();
const tokenId = await createItemExpectSuccess(alice, collectionId, 'NFT');
- const aliceBalanceBefore = new BigNumber((await api.query.system.account(alicesPublicKey)).data.free.toString());
+ const aliceBalanceBefore: bigint = (await api.query.system.account(alicesPublicKey)).data.free.toBigInt();
await transferExpectSuccess(collectionId, tokenId, alice, bob, 1, 'NFT');
- const aliceBalanceAfter = new BigNumber((await api.query.system.account(alicesPublicKey)).data.free.toString());
- const fee = aliceBalanceBefore.minus(aliceBalanceAfter);
+ const aliceBalanceAfter: bigint = (await api.query.system.account(alicesPublicKey)).data.free.toBigInt();
+ const fee = aliceBalanceBefore - aliceBalanceAfter;
// console.log(fee.toString());
const expectedTransferFee = 0.1;
const tolerance = 0.001;
- expect(fee.dividedBy(1e15).minus(expectedTransferFee).abs().toNumber()).to.be.lessThan(tolerance);
+ expect(Number(fee) / 1e15 - expectedTransferFee).to.be.lessThan(tolerance);
});
});
});
-
tests/src/destroyCollection.test.tsdiffbeforeafterboth--- a/tests/src/destroyCollection.test.ts
+++ b/tests/src/destroyCollection.test.ts
@@ -3,12 +3,12 @@
// file 'LICENSE', which is part of this source code package.
//
-import { IKeyringPair } from '@polkadot/types/types';
+import {IKeyringPair} from '@polkadot/types/types';
import chai from 'chai';
import chaiAsPromised from 'chai-as-promised';
import privateKey from './substrate/privateKey';
-import { default as usingApi } from './substrate/substrate-api';
-import { createCollectionExpectSuccess,
+import {default as usingApi} from './substrate/substrate-api';
+import {createCollectionExpectSuccess,
destroyCollectionExpectSuccess,
destroyCollectionExpectFailure,
setCollectionLimitsExpectSuccess,
@@ -46,7 +46,7 @@
it('(!negative test!) Destroy a collection that never existed', async () => {
await usingApi(async (api) => {
// Find the collection that never existed
- const collectionId = parseInt((await api.query.nft.createdCollectionCount()).toString()) + 1;
+ const collectionId = (await api.query.common.createdCollectionCount()).toNumber() + 1;
await destroyCollectionExpectFailure(collectionId);
});
});
@@ -62,12 +62,12 @@
});
it('(!negative test!) Destroy a collection using collection admin account', async () => {
const collectionId = await createCollectionExpectSuccess();
- await addCollectionAdminExpectSuccess(alice, collectionId, bob);
+ await addCollectionAdminExpectSuccess(alice, collectionId, bob.address);
await destroyCollectionExpectFailure(collectionId, '//Bob');
});
it('fails when OwnerCanDestroy == false', async () => {
const collectionId = await createCollectionExpectSuccess();
- await setCollectionLimitsExpectSuccess(alice, collectionId, { ownerCanDestroy: false });
+ await setCollectionLimitsExpectSuccess(alice, collectionId, {ownerCanDestroy: false});
await destroyCollectionExpectFailure(collectionId, '//Alice');
});
tests/src/enableContractSponsoring.test.tsdiffbeforeafterboth--- a/tests/src/enableContractSponsoring.test.ts
+++ b/tests/src/enableContractSponsoring.test.ts
@@ -3,12 +3,12 @@
// file 'LICENSE', which is part of this source code package.
//
-import { IKeyringPair } from '@polkadot/types/types';
+import {IKeyringPair} from '@polkadot/types/types';
import chai from 'chai';
import chaiAsPromised from 'chai-as-promised';
import privateKey from './substrate/privateKey';
import usingApi from './substrate/substrate-api';
-import { deployFlipper, getFlipValue, toggleFlipValueExpectSuccess } from './util/contracthelpers';
+import {deployFlipper, getFlipValue, toggleFlipValueExpectSuccess} from './util/contracthelpers';
import {
enableContractSponsoringExpectFailure,
enableContractSponsoringExpectSuccess,
tests/src/enableDisableTransfer.test.tsdiffbeforeafterboth--- a/tests/src/enableDisableTransfer.test.ts
+++ b/tests/src/enableDisableTransfer.test.ts
@@ -21,31 +21,31 @@
describe('Enable/Disable Transfers', () => {
it('User can transfer token with enabled transfer flag', async () => {
await usingApi(async () => {
- const Alice = privateKey('//Alice');
- const Bob = privateKey('//Bob');
+ const alice = privateKey('//Alice');
+ const bob = privateKey('//Bob');
// nft
const nftCollectionId = await createCollectionExpectSuccess();
- const newNftTokenId = await createItemExpectSuccess(Alice, nftCollectionId, 'NFT');
+ const newNftTokenId = await createItemExpectSuccess(alice, nftCollectionId, 'NFT');
// explicitely set transfer flag
- await setTransferFlagExpectSuccess(Alice, nftCollectionId, true);
+ await setTransferFlagExpectSuccess(alice, nftCollectionId, true);
- await transferExpectSuccess(nftCollectionId, newNftTokenId, Alice, Bob, 1);
+ await transferExpectSuccess(nftCollectionId, newNftTokenId, alice, bob, 1);
});
});
it('User can\'n transfer token with disabled transfer flag', async () => {
await usingApi(async () => {
- const Alice = privateKey('//Alice');
- const Bob = privateKey('//Bob');
+ const alice = privateKey('//Alice');
+ const bob = privateKey('//Bob');
// nft
const nftCollectionId = await createCollectionExpectSuccess();
- const newNftTokenId = await createItemExpectSuccess(Alice, nftCollectionId, 'NFT');
+ const newNftTokenId = await createItemExpectSuccess(alice, nftCollectionId, 'NFT');
// explicitely set transfer flag
- await setTransferFlagExpectSuccess(Alice, nftCollectionId, false);
+ await setTransferFlagExpectSuccess(alice, nftCollectionId, false);
- await transferExpectFailure(nftCollectionId, newNftTokenId, Alice, Bob, 1);
+ await transferExpectFailure(nftCollectionId, newNftTokenId, alice, bob, 1);
});
});
});
@@ -53,12 +53,12 @@
describe('Negative Enable/Disable Transfers', () => {
it('Non-owner cannot change transfer flag', async () => {
await usingApi(async () => {
- const Bob = privateKey('//Bob');
+ const bob = privateKey('//Bob');
// nft
const nftCollectionId = await createCollectionExpectSuccess();
// Change transfer flag
- await setTransferFlagExpectFailure(Bob, nftCollectionId, false);
+ await setTransferFlagExpectFailure(bob, nftCollectionId, false);
});
});
});
tests/src/eth/allowlist.test.tsdiffbeforeafterboth--- a/tests/src/eth/allowlist.test.ts
+++ b/tests/src/eth/allowlist.test.ts
@@ -1,61 +1,48 @@
-import { expect } from 'chai';
-import waitNewBlocks from '../substrate/wait-new-blocks';
-import { contractHelpers, createEthAccount, createEthAccountWithBalance, deployFlipper, itWeb3, usingWeb3Http } from './util/helpers';
+import {expect} from 'chai';
+import {contractHelpers, createEthAccount, createEthAccountWithBalance, deployFlipper, itWeb3} from './util/helpers';
describe('EVM allowlist', () => {
- itWeb3('Contract allowlist can be toggled', async ({ api }) => {
- await usingWeb3Http(async web3Http => {
- const owner = await createEthAccountWithBalance(api, web3Http);
- const flipper = await deployFlipper(web3Http, owner);
- await waitNewBlocks(api, 1);
- const randomUser = createEthAccount(web3Http);
+ itWeb3('Contract allowlist can be toggled', async ({api, web3}) => {
+ const owner = await createEthAccountWithBalance(api, web3);
+ const flipper = await deployFlipper(web3, owner);
+ const randomUser = createEthAccount(web3);
- const helpers = contractHelpers(web3Http, owner);
+ const helpers = contractHelpers(web3, owner);
- // Any user is allowed by default
- expect(await helpers.methods.allowlistEnabled(flipper.options.address).call()).to.be.false;
- expect(await helpers.methods.allowed(flipper.options.address, randomUser).call()).to.be.true;
- await waitNewBlocks(api, 1);
+ // Any user is allowed by default
+ expect(await helpers.methods.allowlistEnabled(flipper.options.address).call()).to.be.false;
+ expect(await helpers.methods.allowed(flipper.options.address, randomUser).call()).to.be.true;
- // Enable
- await helpers.methods.toggleAllowlist(flipper.options.address, true).send({ from: owner });
- await waitNewBlocks(api, 1);
- expect(await helpers.methods.allowlistEnabled(flipper.options.address).call()).to.be.true;
- expect(await helpers.methods.allowed(flipper.options.address, randomUser).call()).to.be.false;
+ // Enable
+ await helpers.methods.toggleAllowlist(flipper.options.address, true).send({from: owner});
+ expect(await helpers.methods.allowlistEnabled(flipper.options.address).call()).to.be.true;
+ expect(await helpers.methods.allowed(flipper.options.address, randomUser).call()).to.be.false;
- // Disable
- await helpers.methods.toggleAllowlist(flipper.options.address, false).send({ from: owner });
- await waitNewBlocks(api, 1);
- expect(await helpers.methods.allowlistEnabled(flipper.options.address).call()).to.be.false;
- expect(await helpers.methods.allowed(flipper.options.address, randomUser).call()).to.be.true;
- });
+ // Disable
+ await helpers.methods.toggleAllowlist(flipper.options.address, false).send({from: owner});
+ expect(await helpers.methods.allowlistEnabled(flipper.options.address).call()).to.be.false;
+ expect(await helpers.methods.allowed(flipper.options.address, randomUser).call()).to.be.true;
});
- itWeb3('Non-whitelisted user can\'t call contract with allowlist enabled', async ({ api }) => {
- await usingWeb3Http(async web3Http => {
- const owner = await createEthAccountWithBalance(api, web3Http);
- const flipper = await deployFlipper(web3Http, owner);
- await waitNewBlocks(api, 1);
- const caller = await createEthAccountWithBalance(api, web3Http);
+ itWeb3('Non-whitelisted user can\'t call contract with allowlist enabled', async ({api, web3}) => {
+ const owner = await createEthAccountWithBalance(api, web3);
+ const flipper = await deployFlipper(web3, owner);
+ const caller = await createEthAccountWithBalance(api, web3);
- const helpers = contractHelpers(web3Http, owner);
+ const helpers = contractHelpers(web3, owner);
- // User can flip with allowlist disabled
- await flipper.methods.flip().send({ from: caller });
- await waitNewBlocks(api, 1);
- expect(await flipper.methods.getValue().call()).to.be.true;
+ // User can flip with allowlist disabled
+ await flipper.methods.flip().send({from: caller});
+ expect(await flipper.methods.getValue().call()).to.be.true;
- // Tx will be reverted if user is not in whitelist
- await helpers.methods.toggleAllowlist(flipper.options.address, true).send({ from: owner });
- await expect(flipper.methods.flip().send({ from: caller })).to.rejected;
- await waitNewBlocks(api, 1);
- expect(await flipper.methods.getValue().call()).to.be.true;
+ // Tx will be reverted if user is not in whitelist
+ await helpers.methods.toggleAllowlist(flipper.options.address, true).send({from: owner});
+ await expect(flipper.methods.flip().send({from: caller})).to.rejected;
+ expect(await flipper.methods.getValue().call()).to.be.true;
- // Adding caller to allowlist will make contract callable again
- await helpers.methods.toggleAllowed(flipper.options.address, caller, true).send({from: owner});
- await flipper.methods.flip().send({ from: caller });
- await waitNewBlocks(api, 1);
- expect(await flipper.methods.getValue().call()).to.be.false;
- });
+ // Adding caller to allowlist will make contract callable again
+ await helpers.methods.toggleAllowed(flipper.options.address, caller, true).send({from: owner});
+ await flipper.methods.flip().send({from: caller});
+ expect(await flipper.methods.getValue().call()).to.be.false;
});
-});
\ No newline at end of file
+});
tests/src/eth/base.test.tsdiffbeforeafterboth--- a/tests/src/eth/base.test.ts
+++ b/tests/src/eth/base.test.ts
@@ -1,22 +1,22 @@
-import { createEthAccount, createEthAccountWithBalance, deployFlipper, ethBalanceViaSub, GAS_ARGS, itWeb3, recordEthFee } from './util/helpers';
-import { expect } from 'chai';
-import { UNIQUE } from '../util/helpers';
+import {createEthAccount, createEthAccountWithBalance, deployFlipper, ethBalanceViaSub, GAS_ARGS, itWeb3, recordEthFee} from './util/helpers';
+import {expect} from 'chai';
+import {UNIQUE} from '../util/helpers';
describe('Contract calls', () => {
- itWeb3('Call of simple contract fee is less than 0.2 UNQ', async ({ web3, api }) => {
+ itWeb3('Call of simple contract fee is less than 0.2 UNQ', async ({web3, api}) => {
const deployer = await createEthAccountWithBalance(api, web3);
- const flipper = await deployFlipper(web3 as any, deployer);
+ const flipper = await deployFlipper(web3, deployer);
const cost = await recordEthFee(api, deployer, () => flipper.methods.flip().send({from: deployer}));
expect(cost < BigInt(0.2 * Number(UNIQUE))).to.be.true;
});
- itWeb3('Balance transfer fee is less than 0.2 UNQ', async ({ web3, api }) => {
+ itWeb3('Balance transfer fee is less than 0.2 UNQ', async ({web3, api}) => {
const userA = await createEthAccountWithBalance(api, web3);
const userB = createEthAccount(web3);
- const cost = await recordEthFee(api, userA, () => web3.eth.sendTransaction({ from: userA, to: userB, value: '1000000', ...GAS_ARGS }));
+ const cost = await recordEthFee(api, userA, () => web3.eth.sendTransaction({from: userA, to: userB, value: '1000000', ...GAS_ARGS}));
expect(cost - await ethBalanceViaSub(api, userB) < BigInt(0.2 * Number(UNIQUE))).to.be.true;
});
-});
\ No newline at end of file
+});
tests/src/eth/contractSponsoring.test.tsdiffbeforeafterboth--- a/tests/src/eth/contractSponsoring.test.ts
+++ b/tests/src/eth/contractSponsoring.test.ts
@@ -4,26 +4,21 @@
//
import privateKey from '../substrate/privateKey';
-import { expect } from 'chai';
-import {
+import {expect} from 'chai';
+import {
contractHelpers,
createEthAccountWithBalance,
transferBalanceToEth,
deployFlipper,
- itWeb3 } from './util/helpers';
-import waitNewBlocks from '../substrate/wait-new-blocks';
+ itWeb3} from './util/helpers';
describe('Sponsoring EVM contracts', () => {
itWeb3('Sponsoring can be set by the address that has deployed the contract', async ({api, web3}) => {
const owner = await createEthAccountWithBalance(api, web3);
const flipper = await deployFlipper(web3, owner);
- await waitNewBlocks(api, 1);
const helpers = contractHelpers(web3, owner);
- await waitNewBlocks(api, 1);
expect(await helpers.methods.sponsoringEnabled(flipper.options.address).call()).to.be.false;
- await waitNewBlocks(api, 1);
await helpers.methods.toggleSponsoring(flipper.options.address, true).send({from: owner});
- await waitNewBlocks(api, 1);
expect(await helpers.methods.sponsoringEnabled(flipper.options.address).call()).to.be.true;
});
@@ -31,13 +26,9 @@
const owner = await createEthAccountWithBalance(api, web3);
const notOwner = await createEthAccountWithBalance(api, web3);
const flipper = await deployFlipper(web3, owner);
- await waitNewBlocks(api, 1);
const helpers = contractHelpers(web3, owner);
- await waitNewBlocks(api, 1);
expect(await helpers.methods.sponsoringEnabled(flipper.options.address).call()).to.be.false;
- await waitNewBlocks(api, 1);
await expect(helpers.methods.toggleSponsoring(notOwner, true).send({from: notOwner})).to.rejected;
- await waitNewBlocks(api, 1);
expect(await helpers.methods.sponsoringEnabled(flipper.options.address).call()).to.be.false;
});
@@ -48,29 +39,22 @@
const caller = await createEthAccountWithBalance(api, web3);
const flipper = await deployFlipper(web3, owner);
- await waitNewBlocks(api, 1);
-
+
const helpers = contractHelpers(web3, owner);
- await helpers.methods.toggleAllowlist(flipper.options.address, true).send({ from: owner });
- await waitNewBlocks(api, 1);
- await helpers.methods.toggleAllowed(flipper.options.address, caller, true).send({ from: owner });
- await waitNewBlocks(api, 1);
+ await helpers.methods.toggleAllowlist(flipper.options.address, true).send({from: owner});
+ await helpers.methods.toggleAllowed(flipper.options.address, caller, true).send({from: owner});
expect(await helpers.methods.sponsoringEnabled(flipper.options.address).call()).to.be.false;
await helpers.methods.toggleSponsoring(flipper.options.address, true).send({from: owner});
- await waitNewBlocks(api, 1);
await helpers.methods.setSponsoringRateLimit(flipper.options.address, 0).send({from: owner});
- await waitNewBlocks(api, 1);
expect(await helpers.methods.sponsoringEnabled(flipper.options.address).call()).to.be.true;
await transferBalanceToEth(api, alice, flipper.options.address);
- await waitNewBlocks(api, 2);
const originalFlipperBalance = await web3.eth.getBalance(flipper.options.address);
expect(originalFlipperBalance).to.be.not.equal('0');
- await flipper.methods.flip().send({ from: caller });
- await waitNewBlocks(api, 1);
+ await flipper.methods.flip().send({from: caller});
expect(await flipper.methods.getValue().call()).to.be.true;
// Balance should be taken from flipper instead of caller
@@ -85,25 +69,20 @@
const caller = await createEthAccountWithBalance(api, web3);
const flipper = await deployFlipper(web3, owner);
- await waitNewBlocks(api, 1);
-
+
const helpers = contractHelpers(web3, owner);
expect(await helpers.methods.sponsoringEnabled(flipper.options.address).call()).to.be.false;
await helpers.methods.toggleSponsoring(flipper.options.address, true).send({from: owner});
- await waitNewBlocks(api, 1);
await helpers.methods.setSponsoringRateLimit(flipper.options.address, 0).send({from: owner});
- await waitNewBlocks(api, 1);
expect(await helpers.methods.sponsoringEnabled(flipper.options.address).call()).to.be.true;
await transferBalanceToEth(api, alice, flipper.options.address);
- await waitNewBlocks(api, 2);
const originalFlipperBalance = await web3.eth.getBalance(flipper.options.address);
expect(originalFlipperBalance).to.be.not.equal('0');
- await flipper.methods.flip().send({ from: caller });
- await waitNewBlocks(api, 1);
+ await flipper.methods.flip().send({from: caller});
expect(await flipper.methods.getValue().call()).to.be.true;
// Balance should be taken from flipper instead of caller
@@ -119,29 +98,22 @@
const originalCallerBalance = await web3.eth.getBalance(caller);
const flipper = await deployFlipper(web3, owner);
- await waitNewBlocks(api, 1);
-
+
const helpers = contractHelpers(web3, owner);
- await helpers.methods.toggleAllowlist(flipper.options.address, true).send({ from: owner });
- await waitNewBlocks(api, 1);
- await helpers.methods.toggleAllowed(flipper.options.address, caller, true).send({ from: owner });
- await waitNewBlocks(api, 1);
+ await helpers.methods.toggleAllowlist(flipper.options.address, true).send({from: owner});
+ await helpers.methods.toggleAllowed(flipper.options.address, caller, true).send({from: owner});
expect(await helpers.methods.sponsoringEnabled(flipper.options.address).call()).to.be.false;
await helpers.methods.toggleSponsoring(flipper.options.address, true).send({from: owner});
- await waitNewBlocks(api, 1);
await helpers.methods.setSponsoringRateLimit(flipper.options.address, 0).send({from: owner});
- await waitNewBlocks(api, 1);
expect(await helpers.methods.sponsoringEnabled(flipper.options.address).call()).to.be.true;
await transferBalanceToEth(api, alice, flipper.options.address);
- await waitNewBlocks(api, 2);
const originalFlipperBalance = await web3.eth.getBalance(flipper.options.address);
expect(originalFlipperBalance).to.be.not.equal('0');
- await flipper.methods.flip().send({ from: caller });
- await waitNewBlocks(api, 1);
+ await flipper.methods.flip().send({from: caller});
expect(await flipper.methods.getValue().call()).to.be.true;
expect(await web3.eth.getBalance(caller)).to.be.equals(originalCallerBalance);
@@ -155,44 +127,34 @@
const originalCallerBalance = await web3.eth.getBalance(caller);
const flipper = await deployFlipper(web3, owner);
- await waitNewBlocks(api, 1);
-
+
const helpers = contractHelpers(web3, owner);
- await helpers.methods.toggleAllowlist(flipper.options.address, true).send({ from: owner });
- await waitNewBlocks(api, 1);
- await helpers.methods.toggleAllowed(flipper.options.address, caller, true).send({ from: owner });
- await waitNewBlocks(api, 1);
+ await helpers.methods.toggleAllowlist(flipper.options.address, true).send({from: owner});
+ await helpers.methods.toggleAllowed(flipper.options.address, caller, true).send({from: owner});
expect(await helpers.methods.sponsoringEnabled(flipper.options.address).call()).to.be.false;
await helpers.methods.toggleSponsoring(flipper.options.address, true).send({from: owner});
- await waitNewBlocks(api, 1);
await helpers.methods.setSponsoringRateLimit(flipper.options.address, 10).send({from: owner});
- await waitNewBlocks(api, 1);
expect(await helpers.methods.sponsoringEnabled(flipper.options.address).call()).to.be.true;
await transferBalanceToEth(api, alice, flipper.options.address);
- await waitNewBlocks(api, 2);
const originalFlipperBalance = await web3.eth.getBalance(flipper.options.address);
expect(originalFlipperBalance).to.be.not.equal('0');
- await flipper.methods.flip().send({ from: caller });
- await waitNewBlocks(api, 1);
+ await flipper.methods.flip().send({from: caller});
expect(await flipper.methods.getValue().call()).to.be.true;
expect(await web3.eth.getBalance(caller)).to.be.equals(originalCallerBalance);
- await flipper.methods.flip().send({ from: caller });
- await waitNewBlocks(api, 1);
+ await flipper.methods.flip().send({from: caller});
expect(await web3.eth.getBalance(caller)).to.be.not.equals(originalCallerBalance);
});
- // TODO: Find a way to calculate default rate limit
+ // TODO: Find a way to calculate default rate limit
itWeb3('Default rate limit equals 7200', async ({api, web3}) => {
const owner = await createEthAccountWithBalance(api, web3);
const flipper = await deployFlipper(web3, owner);
- await waitNewBlocks(api, 1);
const helpers = contractHelpers(web3, owner);
- await waitNewBlocks(api, 1);
expect(await helpers.methods.getSponsoringRateLimit(flipper.options.address).call()).to.be.equals('7200');
});
@@ -203,25 +165,20 @@
const caller = await createEthAccountWithBalance(api, web3);
const flipper = await deployFlipper(web3, owner);
- await waitNewBlocks(api, 1);
-
+
const helpers = contractHelpers(web3, owner);
expect(await helpers.methods.sponsoringEnabled(flipper.options.address).call()).to.be.false;
await helpers.methods.toggleSponsoring(flipper.options.address, true).send({from: owner});
- await waitNewBlocks(api, 1);
await helpers.methods.setSponsoringRateLimit(flipper.options.address, 0).send({from: owner});
- await waitNewBlocks(api, 1);
expect(await helpers.methods.sponsoringEnabled(flipper.options.address).call()).to.be.true;
await transferBalanceToEth(api, alice, flipper.options.address);
- await waitNewBlocks(api, 2);
const originalFlipperBalance = await web3.eth.getBalance(flipper.options.address);
expect(originalFlipperBalance).to.be.not.equal('0');
- await flipper.methods.flip().send({ from: caller });
- await waitNewBlocks(api, 1);
+ await flipper.methods.flip().send({from: caller});
expect(await flipper.methods.getValue().call()).to.be.true;
// Balance should be taken from flipper instead of caller
tests/src/eth/crossTransfer.test.tsdiffbeforeafterboth--- a/tests/src/eth/crossTransfer.test.ts
+++ b/tests/src/eth/crossTransfer.test.ts
@@ -4,15 +4,15 @@
//
import privateKey from '../substrate/privateKey';
-import { createCollectionExpectSuccess,
- createFungibleItemExpectSuccess,
- transferExpectSuccess,
- transferFromExpectSuccess,
- createItemExpectSuccess } from '../util/helpers';
-import { collectionIdToAddress,
- createEthAccountWithBalance,
+import {createCollectionExpectSuccess,
+ createFungibleItemExpectSuccess,
+ transferExpectSuccess,
+ transferFromExpectSuccess,
+ createItemExpectSuccess} from '../util/helpers';
+import {collectionIdToAddress,
+ createEthAccountWithBalance,
subToEth,
- GAS_ARGS, itWeb3 } from './util/helpers';
+ GAS_ARGS, itWeb3} from './util/helpers';
import fungibleAbi from './fungibleAbi.json';
import nonFungibleAbi from './nonFungibleAbi.json';
@@ -20,34 +20,34 @@
itWeb3('The private key X create a substrate address. Alice sends a token to the corresponding EVM address, and X can send it to Bob in the substrate', async () => {
const collection = await createCollectionExpectSuccess({
name: 'token name',
- mode: { type: 'Fungible', decimalPoints: 0 },
+ mode: {type: 'Fungible', decimalPoints: 0},
});
const alice = privateKey('//Alice');
const bob = privateKey('//Bob');
const charlie = privateKey('//Charlie');
- await createFungibleItemExpectSuccess(alice, collection, { Value: 200n }, { substrate: alice.address });
- await transferExpectSuccess(collection, 0, alice, {ethereum: subToEth(charlie.address)} , 200, 'Fungible');
- await transferFromExpectSuccess(collection, 0, alice, {ethereum: subToEth(charlie.address)}, charlie, 50, 'Fungible');
+ await createFungibleItemExpectSuccess(alice, collection, {Value: 200n}, {Substrate: alice.address});
+ await transferExpectSuccess(collection, 0, alice, {Ethereum: subToEth(charlie.address)} , 200, 'Fungible');
+ await transferFromExpectSuccess(collection, 0, alice, {Ethereum: subToEth(charlie.address)}, charlie, 50, 'Fungible');
await transferExpectSuccess(collection, 0, charlie, bob, 50, 'Fungible');
});
- itWeb3('The private key X create a EVM address. Alice sends a token to the substrate address corresponding to this EVM address, and X can send it to Bob in the EVM', async ({ api, web3 }) => {
+ itWeb3('The private key X create a EVM address. Alice sends a token to the substrate address corresponding to this EVM address, and X can send it to Bob in the EVM', async ({api, web3}) => {
const collection = await createCollectionExpectSuccess({
name: 'token name',
- mode: { type: 'Fungible', decimalPoints: 0 },
+ mode: {type: 'Fungible', decimalPoints: 0},
});
const alice = privateKey('//Alice');
const bob = privateKey('//Bob');
const bobProxy = await createEthAccountWithBalance(api, web3);
const aliceProxy = await createEthAccountWithBalance(api, web3);
- await createFungibleItemExpectSuccess(alice, collection, { Value: 200n }, alice.address);
- await transferExpectSuccess(collection, 0, alice, { ethereum: aliceProxy } , 200, 'Fungible');
+ await createFungibleItemExpectSuccess(alice, collection, {Value: 200n}, alice.address);
+ await transferExpectSuccess(collection, 0, alice, {Ethereum: aliceProxy} , 200, 'Fungible');
const address = collectionIdToAddress(collection);
const contract = new web3.eth.Contract(fungibleAbi as any, address, {from: aliceProxy, ...GAS_ARGS});
- await contract.methods.transfer(bobProxy, 50).send({ from: aliceProxy });
- await transferFromExpectSuccess(collection, 0, alice, {ethereum: bobProxy}, bob, 50, 'Fungible');
+ await contract.methods.transfer(bobProxy, 50).send({from: aliceProxy});
+ await transferFromExpectSuccess(collection, 0, alice, {Ethereum: bobProxy}, bob, 50, 'Fungible');
await transferExpectSuccess(collection, 0, bob, alice, 50, 'Fungible');
});
});
@@ -56,33 +56,33 @@
itWeb3('The private key X create a substrate address. Alice sends a token to the corresponding EVM address, and X can send it to Bob in the substrate', async () => {
const collection = await createCollectionExpectSuccess({
name: 'token name',
- mode: { type: 'NFT' },
+ mode: {type: 'NFT'},
});
const alice = privateKey('//Alice');
const bob = privateKey('//Bob');
const charlie = privateKey('//Charlie');
- const tokenId = await createItemExpectSuccess(alice, collection, 'NFT', { substrate: alice.address });
- await transferExpectSuccess(collection, tokenId, alice, { ethereum: subToEth(charlie.address) }, 1, 'NFT');
- await transferFromExpectSuccess(collection, tokenId, alice, {ethereum: subToEth(charlie.address)}, charlie, 1, 'NFT');
+ const tokenId = await createItemExpectSuccess(alice, collection, 'NFT', {Substrate: alice.address});
+ await transferExpectSuccess(collection, tokenId, alice, {Ethereum: subToEth(charlie.address)}, 1, 'NFT');
+ await transferFromExpectSuccess(collection, tokenId, alice, {Ethereum: subToEth(charlie.address)}, charlie, 1, 'NFT');
await transferExpectSuccess(collection, tokenId, charlie, bob, 1, 'NFT');
});
- itWeb3('The private key X create a EVM address. Alice sends a token to the substrate address corresponding to this EVM address, and X can send it to Bob in the EVM', async ({ api, web3 }) => {
+ itWeb3('The private key X create a EVM address. Alice sends a token to the substrate address corresponding to this EVM address, and X can send it to Bob in the EVM', async ({api, web3}) => {
const collection = await createCollectionExpectSuccess({
name: 'token name',
- mode: { type: 'NFT' },
+ mode: {type: 'NFT'},
});
const alice = privateKey('//Alice');
const bob = privateKey('//Bob');
const charlie = privateKey('//Charlie');
const bobProxy = await createEthAccountWithBalance(api, web3);
const aliceProxy = await createEthAccountWithBalance(api, web3);
- const tokenId = await createItemExpectSuccess(alice, collection, 'NFT', { substrate: alice.address });
- await transferExpectSuccess(collection, tokenId, alice, { ethereum: aliceProxy } , 1, 'NFT');
+ const tokenId = await createItemExpectSuccess(alice, collection, 'NFT', {Substrate: alice.address});
+ await transferExpectSuccess(collection, tokenId, alice, {Ethereum: aliceProxy} , 1, 'NFT');
const address = collectionIdToAddress(collection);
const contract = new web3.eth.Contract(nonFungibleAbi as any, address, {from: aliceProxy, ...GAS_ARGS});
- await contract.methods.transfer(bobProxy, 1).send({ from: aliceProxy });
- await transferFromExpectSuccess(collection, tokenId, alice, {ethereum: bobProxy}, bob, 1, 'NFT');
+ await contract.methods.transfer(bobProxy, 1).send({from: aliceProxy});
+ await transferFromExpectSuccess(collection, tokenId, alice, {Ethereum: bobProxy}, bob, 1, 'NFT');
await transferExpectSuccess(collection, tokenId, bob, charlie, 1, 'NFT');
});
-});
\ No newline at end of file
+});
tests/src/eth/fungible.test.tsdiffbeforeafterboth--- a/tests/src/eth/fungible.test.ts
+++ b/tests/src/eth/fungible.test.ts
@@ -4,41 +4,40 @@
//
import privateKey from '../substrate/privateKey';
-import { approveExpectSuccess, createCollectionExpectSuccess, createFungibleItemExpectSuccess, transferExpectSuccess, transferFromExpectSuccess, UNIQUE } from '../util/helpers';
-import { collectionIdToAddress, createEthAccount, createEthAccountWithBalance, GAS_ARGS, itWeb3, normalizeEvents, recordEthFee, recordEvents, subToEth, transferBalanceToEth } from './util/helpers';
+import {approveExpectSuccess, createCollectionExpectSuccess, createFungibleItemExpectSuccess, transferExpectSuccess, transferFromExpectSuccess, UNIQUE} from '../util/helpers';
+import {collectionIdToAddress, createEthAccount, createEthAccountWithBalance, GAS_ARGS, itWeb3, normalizeEvents, recordEthFee, recordEvents, subToEth, transferBalanceToEth} from './util/helpers';
import fungibleAbi from './fungibleAbi.json';
-import { expect } from 'chai';
+import {expect} from 'chai';
describe('Fungible: Information getting', () => {
- itWeb3('totalSupply', async ({ api, web3 }) => {
+ itWeb3('totalSupply', async ({api, web3}) => {
const collection = await createCollectionExpectSuccess({
name: 'token name',
- mode: { type: 'Fungible', decimalPoints: 0 },
+ mode: {type: 'Fungible', decimalPoints: 0},
});
const alice = privateKey('//Alice');
const caller = await createEthAccountWithBalance(api, web3);
-
- await createFungibleItemExpectSuccess(alice, collection, { Value: 200n }, { substrate: alice.address });
+ await createFungibleItemExpectSuccess(alice, collection, {Value: 200n}, {Substrate: alice.address});
+
const address = collectionIdToAddress(collection);
const contract = new web3.eth.Contract(fungibleAbi as any, address, {from: caller, ...GAS_ARGS});
const totalSupply = await contract.methods.totalSupply().call();
- // FIXME: always equals to 0, because this method is not implemented
- expect(totalSupply).to.equal('0');
+ expect(totalSupply).to.equal('200');
});
- itWeb3('balanceOf', async ({ api, web3 }) => {
+ itWeb3('balanceOf', async ({api, web3}) => {
const collection = await createCollectionExpectSuccess({
name: 'token name',
- mode: { type: 'Fungible', decimalPoints: 0 },
+ mode: {type: 'Fungible', decimalPoints: 0},
});
const alice = privateKey('//Alice');
const caller = await createEthAccountWithBalance(api, web3);
- await createFungibleItemExpectSuccess(alice, collection, { Value: 200n }, { ethereum: caller });
+ await createFungibleItemExpectSuccess(alice, collection, {Value: 200n}, {Ethereum: caller});
const address = collectionIdToAddress(collection);
const contract = new web3.eth.Contract(fungibleAbi as any, address, {from: caller, ...GAS_ARGS});
@@ -49,16 +48,16 @@
});
describe('Fungible: Plain calls', () => {
- itWeb3('Can perform approve()', async ({ web3, api }) => {
+ itWeb3('Can perform approve()', async ({web3, api}) => {
const collection = await createCollectionExpectSuccess({
name: 'token name',
- mode: { type: 'Fungible', decimalPoints: 0 },
+ mode: {type: 'Fungible', decimalPoints: 0},
});
const alice = privateKey('//Alice');
const owner = await createEthAccountWithBalance(api, web3);
- await createFungibleItemExpectSuccess(alice, collection, { Value: 200n }, { ethereum: owner });
+ await createFungibleItemExpectSuccess(alice, collection, {Value: 200n}, {Ethereum: owner});
const spender = createEthAccount(web3);
@@ -88,17 +87,17 @@
}
});
- itWeb3('Can perform transferFrom()', async ({ web3, api }) => {
+ itWeb3('Can perform transferFrom()', async ({web3, api}) => {
const collection = await createCollectionExpectSuccess({
name: 'token name',
- mode: { type: 'Fungible', decimalPoints: 0 },
+ mode: {type: 'Fungible', decimalPoints: 0},
});
const alice = privateKey('//Alice');
const owner = createEthAccount(web3);
await transferBalanceToEth(api, alice, owner, 999999999999999);
- await createFungibleItemExpectSuccess(alice, collection, { Value: 200n }, { ethereum: owner });
+ await createFungibleItemExpectSuccess(alice, collection, {Value: 200n}, {Ethereum: owner});
const spender = createEthAccount(web3);
await transferBalanceToEth(api, alice, spender, 999999999999999);
@@ -146,17 +145,17 @@
}
});
- itWeb3('Can perform transfer()', async ({ web3, api }) => {
+ itWeb3('Can perform transfer()', async ({web3, api}) => {
const collection = await createCollectionExpectSuccess({
name: 'token name',
- mode: { type: 'Fungible', decimalPoints: 0 },
+ mode: {type: 'Fungible', decimalPoints: 0},
});
const alice = privateKey('//Alice');
const owner = createEthAccount(web3);
await transferBalanceToEth(api, alice, owner, 999999999999999);
- await createFungibleItemExpectSuccess(alice, collection, { Value: 200n }, { ethereum: owner });
+ await createFungibleItemExpectSuccess(alice, collection, {Value: 200n}, {Ethereum: owner});
const receiver = createEthAccount(web3);
await transferBalanceToEth(api, alice, receiver, 999999999999999);
@@ -165,7 +164,7 @@
const contract = new web3.eth.Contract(fungibleAbi as any, address, {from: owner, ...GAS_ARGS});
{
- const result = await contract.methods.transfer(receiver, 50).send({ from: owner});
+ const result = await contract.methods.transfer(receiver, 50).send({from: owner});
const events = normalizeEvents(result.events);
expect(events).to.be.deep.equal([
{
@@ -193,79 +192,79 @@
});
describe('Fungible: Fees', () => {
- itWeb3('approve() call fee is less than 0.2UNQ', async ({ web3, api }) => {
+ itWeb3('approve() call fee is less than 0.2UNQ', async ({web3, api}) => {
const collection = await createCollectionExpectSuccess({
- mode: { type: 'Fungible', decimalPoints: 0 },
+ mode: {type: 'Fungible', decimalPoints: 0},
});
const alice = privateKey('//Alice');
const owner = await createEthAccountWithBalance(api, web3);
const spender = createEthAccount(web3);
- await createFungibleItemExpectSuccess(alice, collection, { Value: 200n }, { ethereum: owner });
+ await createFungibleItemExpectSuccess(alice, collection, {Value: 200n}, {Ethereum: owner});
const address = collectionIdToAddress(collection);
- const contract = new web3.eth.Contract(fungibleAbi as any, address, { from: owner, ...GAS_ARGS });
+ const contract = new web3.eth.Contract(fungibleAbi as any, address, {from: owner, ...GAS_ARGS});
- const cost = await recordEthFee(api, owner, () => contract.methods.approve(spender, 100).send({ from: owner }));
+ const cost = await recordEthFee(api, owner, () => contract.methods.approve(spender, 100).send({from: owner}));
expect(cost < BigInt(0.2 * Number(UNIQUE)));
});
- itWeb3('transferFrom() call fee is less than 0.2UNQ', async ({ web3, api }) => {
+ itWeb3('transferFrom() call fee is less than 0.2UNQ', async ({web3, api}) => {
const collection = await createCollectionExpectSuccess({
mode: {type: 'Fungible', decimalPoints: 0},
});
const alice = privateKey('//Alice');
-
+
const owner = await createEthAccountWithBalance(api, web3);
const spender = await createEthAccountWithBalance(api, web3);
- await createFungibleItemExpectSuccess(alice, collection, { Value: 200n }, { ethereum: owner });
+ await createFungibleItemExpectSuccess(alice, collection, {Value: 200n}, {Ethereum: owner});
const address = collectionIdToAddress(collection);
- const contract = new web3.eth.Contract(fungibleAbi as any, address, { from: owner, ...GAS_ARGS });
+ const contract = new web3.eth.Contract(fungibleAbi as any, address, {from: owner, ...GAS_ARGS});
- await contract.methods.approve(spender, 100).send({ from: owner });
+ await contract.methods.approve(spender, 100).send({from: owner});
- const cost = await recordEthFee(api, spender, () => contract.methods.transferFrom(owner, spender, 100).send({ from: spender }));
+ const cost = await recordEthFee(api, spender, () => contract.methods.transferFrom(owner, spender, 100).send({from: spender}));
expect(cost < BigInt(0.2 * Number(UNIQUE)));
});
- itWeb3('transfer() call fee is less than 0.2UNQ', async ({ web3, api }) => {
+ itWeb3('transfer() call fee is less than 0.2UNQ', async ({web3, api}) => {
const collection = await createCollectionExpectSuccess({
- mode: { type: 'Fungible', decimalPoints: 0 },
+ mode: {type: 'Fungible', decimalPoints: 0},
});
const alice = privateKey('//Alice');
const owner = await createEthAccountWithBalance(api, web3);
const receiver = createEthAccount(web3);
- await createFungibleItemExpectSuccess(alice, collection, { Value: 200n }, { ethereum: owner });
+ await createFungibleItemExpectSuccess(alice, collection, {Value: 200n}, {Ethereum: owner});
const address = collectionIdToAddress(collection);
- const contract = new web3.eth.Contract(fungibleAbi as any, address, { from: owner, ...GAS_ARGS });
+ const contract = new web3.eth.Contract(fungibleAbi as any, address, {from: owner, ...GAS_ARGS});
- const cost = await recordEthFee(api, owner, () => contract.methods.transfer(receiver, 100).send({ from: owner }));
+ const cost = await recordEthFee(api, owner, () => contract.methods.transfer(receiver, 100).send({from: owner}));
expect(cost < BigInt(0.2 * Number(UNIQUE)));
});
});
describe('Fungible: Substrate calls', () => {
- itWeb3('Events emitted for approve()', async ({ web3 }) => {
+ itWeb3('Events emitted for approve()', async ({web3}) => {
const collection = await createCollectionExpectSuccess({
- mode: { type: 'Fungible', decimalPoints: 0 },
+ mode: {type: 'Fungible', decimalPoints: 0},
});
const alice = privateKey('//Alice');
const receiver = createEthAccount(web3);
- await createFungibleItemExpectSuccess(alice, collection, { Value: 200n });
+ await createFungibleItemExpectSuccess(alice, collection, {Value: 200n});
const address = collectionIdToAddress(collection);
const contract = new web3.eth.Contract(fungibleAbi as any, address);
const events = await recordEvents(contract, async () => {
- await approveExpectSuccess(collection, 1, alice, { ethereum: receiver }, 100);
+ await approveExpectSuccess(collection, 0, alice, {Ethereum: receiver}, 100);
});
expect(events).to.be.deep.equal([
@@ -281,23 +280,23 @@
]);
});
- itWeb3('Events emitted for transferFrom()', async ({ web3 }) => {
+ itWeb3('Events emitted for transferFrom()', async ({web3}) => {
const collection = await createCollectionExpectSuccess({
- mode: { type: 'Fungible', decimalPoints: 0 },
+ mode: {type: 'Fungible', decimalPoints: 0},
});
const alice = privateKey('//Alice');
const bob = privateKey('//Bob');
const receiver = createEthAccount(web3);
- await createFungibleItemExpectSuccess(alice, collection, { Value: 200n });
- await approveExpectSuccess(collection, 1, alice, bob, 100);
+ await createFungibleItemExpectSuccess(alice, collection, {Value: 200n});
+ await approveExpectSuccess(collection, 0, alice, bob.address, 100);
const address = collectionIdToAddress(collection);
const contract = new web3.eth.Contract(fungibleAbi as any, address);
const events = await recordEvents(contract, async () => {
- await transferFromExpectSuccess(collection, 1, bob, alice, { ethereum: receiver }, 51, 'Fungible');
+ await transferFromExpectSuccess(collection, 0, bob, alice, {Ethereum: receiver}, 51, 'Fungible');
});
expect(events).to.be.deep.equal([
@@ -322,21 +321,21 @@
]);
});
- itWeb3('Events emitted for transfer()', async ({ web3 }) => {
+ itWeb3('Events emitted for transfer()', async ({web3}) => {
const collection = await createCollectionExpectSuccess({
- mode: { type: 'Fungible', decimalPoints: 0 },
+ mode: {type: 'Fungible', decimalPoints: 0},
});
const alice = privateKey('//Alice');
const receiver = createEthAccount(web3);
- await createFungibleItemExpectSuccess(alice, collection, { Value: 200n });
+ await createFungibleItemExpectSuccess(alice, collection, {Value: 200n});
const address = collectionIdToAddress(collection);
const contract = new web3.eth.Contract(fungibleAbi as any, address);
const events = await recordEvents(contract, async () => {
- await transferExpectSuccess(collection, 1, alice, { ethereum: receiver }, 51, 'Fungible');
+ await transferExpectSuccess(collection, 0, alice, {Ethereum:receiver}, 51, 'Fungible');
});
expect(events).to.be.deep.equal([
@@ -351,4 +350,4 @@
},
]);
});
-});
\ No newline at end of file
+});
tests/src/eth/helpersSmoke.test.tsdiffbeforeafterboth--- a/tests/src/eth/helpersSmoke.test.ts
+++ b/tests/src/eth/helpersSmoke.test.ts
@@ -1,25 +1,21 @@
-import { expect } from 'chai';
-import waitNewBlocks from '../substrate/wait-new-blocks';
-import { createEthAccountWithBalance, deployFlipper, itWeb3, contractHelpers } from './util/helpers';
+import {expect} from 'chai';
+import {createEthAccountWithBalance, deployFlipper, itWeb3, contractHelpers} from './util/helpers';
describe('Helpers sanity check', () => {
- itWeb3('Contract owner is recorded', async ({ api, web3 }) => {
+ itWeb3('Contract owner is recorded', async ({api, web3}) => {
const owner = await createEthAccountWithBalance(api, web3);
const flipper = await deployFlipper(web3, owner);
- await waitNewBlocks(api, 1);
expect(await contractHelpers(web3, owner).methods.contractOwner(flipper.options.address).call()).to.be.equal(owner);
});
- itWeb3('Flipper is working', async ({ api, web3 }) => {
+ itWeb3('Flipper is working', async ({api, web3}) => {
const owner = await createEthAccountWithBalance(api, web3);
const flipper = await deployFlipper(web3, owner);
- await waitNewBlocks(api, 1);
expect(await flipper.methods.getValue().call()).to.be.false;
- await flipper.methods.flip().send({ from: owner });
- await waitNewBlocks(api, 1);
+ await flipper.methods.flip().send({from: owner});
expect(await flipper.methods.getValue().call()).to.be.true;
});
-});
\ No newline at end of file
+});
tests/src/eth/marketplace/marketplace.test.tsdiffbeforeafterboth--- a/tests/src/eth/marketplace/marketplace.test.ts
+++ b/tests/src/eth/marketplace/marketplace.test.ts
@@ -1,109 +1,106 @@
-import { readFile } from 'fs/promises';
-import { getBalanceSingle, transferBalanceExpectSuccess } from '../../substrate/get-balance';
+import {readFile} from 'fs/promises';
+import {getBalanceSingle, transferBalanceExpectSuccess} from '../../substrate/get-balance';
import privateKey from '../../substrate/privateKey';
-import { createCollectionExpectSuccess, createFungibleItemExpectSuccess, createItemExpectSuccess, queryNftOwner, transferExpectSuccess, transferFromExpectSuccess } from '../../util/helpers';
-import { collectionIdToAddress, createEthAccountWithBalance, executeEthTxOnSub, GAS_ARGS, itWeb3, subToEth, subToEthLowercase } from '../util/helpers';
-import { evmToAddress } from '@polkadot/util-crypto';
+import {createCollectionExpectSuccess, createFungibleItemExpectSuccess, createItemExpectSuccess, getTokenOwner, transferExpectSuccess, transferFromExpectSuccess} from '../../util/helpers';
+import {collectionIdToAddress, createEthAccountWithBalance, executeEthTxOnSub, GAS_ARGS, itWeb3, subToEth, subToEthLowercase} from '../util/helpers';
+import {evmToAddress} from '@polkadot/util-crypto';
import nonFungibleAbi from '../nonFungibleAbi.json';
import fungibleAbi from '../fungibleAbi.json';
-import waitNewBlocks from '../../substrate/wait-new-blocks';
-import { expect } from 'chai';
+import {expect} from 'chai';
const PRICE = 2000n;
describe('Matcher contract usage', () => {
itWeb3('With UNQ', async ({api, web3}) => {
const matcherOwner = await createEthAccountWithBalance(api, web3);
- const Matcher = new web3.eth.Contract(JSON.parse((await readFile(`${__dirname}/MarketPlaceUNQ.abi`)).toString()), undefined, {
+ const matcherContract = new web3.eth.Contract(JSON.parse((await readFile(`${__dirname}/MarketPlaceUNQ.abi`)).toString()), undefined, {
from: matcherOwner,
...GAS_ARGS,
});
- const matcher = await Matcher.deploy({ data: (await readFile(`${__dirname}/MarketPlaceUNQ.bin`)).toString() }).send({ from: matcherOwner });
+ const matcher = await matcherContract.deploy({data: (await readFile(`${__dirname}/MarketPlaceUNQ.bin`)).toString()}).send({from: matcherOwner});
const alice = privateKey('//Alice');
const collectionId = await createCollectionExpectSuccess({mode: {type: 'NFT'}});
- const evmCollection = new web3.eth.Contract(nonFungibleAbi as any, collectionIdToAddress(collectionId), { from: matcherOwner });
+ const evmCollection = new web3.eth.Contract(nonFungibleAbi as any, collectionIdToAddress(collectionId), {from: matcherOwner});
const seller = privateKey('//Bob');
-
+
const tokenId = await createItemExpectSuccess(alice, collectionId, 'NFT', seller.address);
// To transfer item to matcher it first needs to be transfered to EVM account of bob
- await transferExpectSuccess(collectionId, tokenId, seller, {ethereum: subToEth(seller.address)});
+ await transferExpectSuccess(collectionId, tokenId, seller, {Ethereum: subToEth(seller.address)});
// Fees will be paid from EVM account, so we should have some balance here
await transferBalanceExpectSuccess(api, seller, evmToAddress(subToEth(seller.address)), 10n ** 18n);
await transferBalanceExpectSuccess(api, alice, evmToAddress(subToEth(alice.address)), 10n ** 18n);
- await waitNewBlocks(api, 1);
// Token is owned by seller initially
- expect(await queryNftOwner(api, collectionId, tokenId)).to.be.deep.equal({ ethereum: subToEthLowercase(seller.address) });
+ expect(await getTokenOwner(api, collectionId, tokenId)).to.be.deep.equal({Ethereum: subToEthLowercase(seller.address)});
// Ask
{
await executeEthTxOnSub(api, seller, evmCollection, m => m.approve(matcher.options.address, tokenId));
await executeEthTxOnSub(api, seller, matcher, m => m.setAsk(PRICE, '0x0000000000000000000000000000000000000000', evmCollection.options.address, tokenId, 1));
}
-
+
// Token is transferred to matcher
- expect(await queryNftOwner(api, collectionId, tokenId)).to.be.deep.equal({ ethereum: matcher.options.address.toLowerCase() });
+ expect(await getTokenOwner(api, collectionId, tokenId)).to.be.deep.equal({Ethereum: matcher.options.address.toLowerCase()});
// Buy
{
const sellerBalanceBeforePurchase = await getBalanceSingle(api, seller.address);
// There is two functions named 'buy', so we should provide full signature
- await executeEthTxOnSub(api, alice, matcher, m => m['buy(address,uint256)'](evmCollection.options.address, tokenId), { value: PRICE });
+ await executeEthTxOnSub(api, alice, matcher, m => m['buy(address,uint256)'](evmCollection.options.address, tokenId), {value: PRICE});
expect(await getBalanceSingle(api, seller.address) - sellerBalanceBeforePurchase === PRICE);
}
// Token is transferred to evm account of alice
- expect(await queryNftOwner(api, collectionId, tokenId)).to.be.deep.equal({ ethereum: subToEthLowercase(alice.address) });
+ expect(await getTokenOwner(api, collectionId, tokenId)).to.be.deep.equal({Ethereum: subToEthLowercase(alice.address)});
+
-
// Transfer token to substrate side of alice
- await transferFromExpectSuccess(collectionId, tokenId, alice, { ethereum: subToEth(alice.address) }, { substrate: alice.address });
-
+ await transferFromExpectSuccess(collectionId, tokenId, alice, {Ethereum: subToEth(alice.address)}, {Substrate: alice.address});
+
// Token is transferred to substrate account of alice, seller received funds
- expect(await queryNftOwner(api, collectionId, tokenId)).to.be.deep.equal({ substrate: alice.address });
+ expect(await getTokenOwner(api, collectionId, tokenId)).to.be.deep.equal({Substrate: alice.address});
});
itWeb3('With custom ERC20', async ({api, web3}) => {
const matcherOwner = await createEthAccountWithBalance(api, web3);
- const Matcher = new web3.eth.Contract(JSON.parse((await readFile(`${__dirname}/MarketPlaceUNQ.abi`)).toString()), undefined, {
+ const matcherContract = new web3.eth.Contract(JSON.parse((await readFile(`${__dirname}/MarketPlaceUNQ.abi`)).toString()), undefined, {
from: matcherOwner,
...GAS_ARGS,
});
- const matcher = await Matcher.deploy({ data: (await readFile(`${__dirname}/MarketPlaceUNQ.bin`)).toString() }).send({ from: matcherOwner });
+ const matcher = await matcherContract.deploy({data: (await readFile(`${__dirname}/MarketPlaceUNQ.bin`)).toString()}).send({from: matcherOwner});
const alice = privateKey('//Alice');
const collectionId = await createCollectionExpectSuccess({mode: {type: 'NFT'}});
- const evmCollection = new web3.eth.Contract(nonFungibleAbi as any, collectionIdToAddress(collectionId), { from: matcherOwner });
+ const evmCollection = new web3.eth.Contract(nonFungibleAbi as any, collectionIdToAddress(collectionId), {from: matcherOwner});
- const fungibleId = await createCollectionExpectSuccess({ mode: { type: 'Fungible', decimalPoints: 0 } });
- const evmFungible = new web3.eth.Contract(fungibleAbi as any, collectionIdToAddress(fungibleId), { from: matcherOwner, ...GAS_ARGS });
- await createFungibleItemExpectSuccess(alice, fungibleId, { Value: PRICE }, { ethereum: subToEth(alice.address) });
+ const fungibleId = await createCollectionExpectSuccess({mode: {type: 'Fungible', decimalPoints: 0}});
+ const evmFungible = new web3.eth.Contract(fungibleAbi as any, collectionIdToAddress(fungibleId), {from: matcherOwner, ...GAS_ARGS});
+ await createFungibleItemExpectSuccess(alice, fungibleId, {Value: PRICE}, {Ethereum: subToEth(alice.address)});
const seller = privateKey('//Bob');
-
+
const tokenId = await createItemExpectSuccess(alice, collectionId, 'NFT', seller.address);
// To transfer item to matcher it first needs to be transfered to EVM account of bob
- await transferExpectSuccess(collectionId, tokenId, seller, {ethereum: subToEth(seller.address)});
+ await transferExpectSuccess(collectionId, tokenId, seller, {Ethereum: subToEth(seller.address)});
// Fees will be paid from EVM account, so we should have some balance here
await transferBalanceExpectSuccess(api, seller, evmToAddress(subToEth(seller.address)), 10n ** 18n);
await transferBalanceExpectSuccess(api, alice, evmToAddress(subToEth(alice.address)), 10n ** 18n);
- await waitNewBlocks(api, 1);
// Token is owned by seller initially
- expect(await queryNftOwner(api, collectionId, tokenId)).to.be.deep.equal({ ethereum: subToEthLowercase(seller.address) });
+ expect(await getTokenOwner(api, collectionId, tokenId)).to.be.deep.equal({Ethereum: subToEthLowercase(seller.address)});
// Ask
{
await executeEthTxOnSub(api, seller, evmCollection, m => m.approve(matcher.options.address, tokenId));
await executeEthTxOnSub(api, seller, matcher, m => m.setAsk(PRICE, evmFungible.options.address, evmCollection.options.address, tokenId, 1));
}
-
+
// Token is transferred to matcher
- expect(await queryNftOwner(api, collectionId, tokenId)).to.be.deep.equal({ ethereum: matcher.options.address.toLowerCase() });
+ expect(await getTokenOwner(api, collectionId, tokenId)).to.be.deep.equal({Ethereum: matcher.options.address.toLowerCase()});
// Buy
{
@@ -121,65 +118,62 @@
}
// Token is transferred to evm account of alice
- expect(await queryNftOwner(api, collectionId, tokenId)).to.be.deep.equal({ ethereum: subToEthLowercase(alice.address) });
+ expect(await getTokenOwner(api, collectionId, tokenId)).to.be.deep.equal({Ethereum: subToEthLowercase(alice.address)});
+
-
// Transfer token to substrate side of alice
- await transferFromExpectSuccess(collectionId, tokenId, alice, { ethereum: subToEth(alice.address) }, { substrate: alice.address });
-
+ await transferFromExpectSuccess(collectionId, tokenId, alice, {Ethereum: subToEth(alice.address)}, {Substrate: alice.address});
+
// Token is transferred to substrate account of alice
- expect(await queryNftOwner(api, collectionId, tokenId)).to.be.deep.equal({ substrate: alice.address });
+ expect(await getTokenOwner(api, collectionId, tokenId)).to.be.deep.equal({Substrate: alice.address});
});
- itWeb3('With escrow', async ({ api, web3 }) => {
+ itWeb3('With escrow', async ({api, web3}) => {
const matcherOwner = await createEthAccountWithBalance(api, web3);
const escrow = await createEthAccountWithBalance(api, web3);
- const Matcher = new web3.eth.Contract(JSON.parse((await readFile(`${__dirname}/MarketPlaceKSM.abi`)).toString()), undefined, {
+ const matcherContract = new web3.eth.Contract(JSON.parse((await readFile(`${__dirname}/MarketPlaceKSM.abi`)).toString()), undefined, {
from: matcherOwner,
...GAS_ARGS,
});
- const matcher = await Matcher.deploy({ data: (await readFile(`${__dirname}/MarketPlaceKSM.bin`)).toString(), arguments: [escrow] }).send({ from: matcherOwner });
-
+ const matcher = await matcherContract.deploy({data: (await readFile(`${__dirname}/MarketPlaceKSM.bin`)).toString(), arguments: [escrow]}).send({from: matcherOwner});
+
const ksmToken = 11;
const alice = privateKey('//Alice');
const collectionId = await createCollectionExpectSuccess({mode: {type: 'NFT'}});
- const evmCollection = new web3.eth.Contract(nonFungibleAbi as any, collectionIdToAddress(collectionId), { from: matcherOwner });
+ const evmCollection = new web3.eth.Contract(nonFungibleAbi as any, collectionIdToAddress(collectionId), {from: matcherOwner});
const seller = privateKey('//Bob');
-
+
const tokenId = await createItemExpectSuccess(alice, collectionId, 'NFT', seller.address);
// To transfer item to matcher it first needs to be transfered to EVM account of bob
- await transferExpectSuccess(collectionId, tokenId, seller, {ethereum: subToEth(seller.address)});
+ await transferExpectSuccess(collectionId, tokenId, seller, {Ethereum: subToEth(seller.address)});
// Fees will be paid from EVM account, so we should have some balance here
await transferBalanceExpectSuccess(api, seller, evmToAddress(subToEth(seller.address)), 10n ** 18n);
await transferBalanceExpectSuccess(api, alice, evmToAddress(subToEth(alice.address)), 10n ** 18n);
- await waitNewBlocks(api, 1);
// Token is owned by seller initially
- expect(await queryNftOwner(api, collectionId, tokenId)).to.be.deep.equal({ ethereum: subToEthLowercase(seller.address) });
+ expect(await getTokenOwner(api, collectionId, tokenId)).to.be.deep.equal({Ethereum: subToEthLowercase(seller.address)});
// Ask
{
await executeEthTxOnSub(api, seller, evmCollection, m => m.approve(matcher.options.address, tokenId));
await executeEthTxOnSub(api, seller, matcher, m => m.setAsk(PRICE, ksmToken, evmCollection.options.address, tokenId, 1));
}
-
+
// Token is transferred to matcher
- expect(await queryNftOwner(api, collectionId, tokenId)).to.be.deep.equal({ ethereum: matcher.options.address.toLowerCase() });
+ expect(await getTokenOwner(api, collectionId, tokenId)).to.be.deep.equal({Ethereum: matcher.options.address.toLowerCase()});
// Give buyer KSM
- await matcher.methods.deposit(PRICE, ksmToken, subToEth(alice.address)).send({ from: escrow });
- await waitNewBlocks(api, 1);
-
+ await matcher.methods.deposit(PRICE, ksmToken, subToEth(alice.address)).send({from: escrow});
+
// Buy
{
expect(await matcher.methods.escrowBalance(ksmToken, subToEth(seller.address)).call()).to.be.equal('0');
expect(await matcher.methods.escrowBalance(ksmToken, subToEth(alice.address)).call()).to.be.equal(PRICE.toString());
await executeEthTxOnSub(api, alice, matcher, m => m.buy(evmCollection.options.address, tokenId));
- await waitNewBlocks(api, 1);
// Price is removed from buyer balance, and added to seller
expect(await matcher.methods.escrowBalance(ksmToken, subToEth(alice.address)).call()).to.be.equal('0');
@@ -187,12 +181,12 @@
}
// Token is transferred to evm account of alice
- expect(await queryNftOwner(api, collectionId, tokenId)).to.be.deep.equal({ ethereum: subToEthLowercase(alice.address) });
-
+ expect(await getTokenOwner(api, collectionId, tokenId)).to.be.deep.equal({Ethereum: subToEthLowercase(alice.address)});
+
// Transfer token to substrate side of alice
- await transferFromExpectSuccess(collectionId, tokenId, alice, { ethereum: subToEth(alice.address) }, { substrate: alice.address });
-
+ await transferFromExpectSuccess(collectionId, tokenId, alice, {Ethereum: subToEth(alice.address)}, {Substrate: alice.address});
+
// Token is transferred to substrate account of alice, seller received funds
- expect(await queryNftOwner(api, collectionId, tokenId)).to.be.deep.equal({ substrate: alice.address });
+ expect(await getTokenOwner(api, collectionId, tokenId)).to.be.deep.equal({Substrate: alice.address});
});
});
tests/src/eth/metadata.test.tsdiffbeforeafterboth--- a/tests/src/eth/metadata.test.ts
+++ b/tests/src/eth/metadata.test.ts
@@ -3,35 +3,35 @@
// file 'LICENSE', which is part of this source code package.
//
-import { expect } from 'chai';
-import { createCollectionExpectSuccess } from '../util/helpers';
-import { collectionIdToAddress, createEthAccountWithBalance, GAS_ARGS, itWeb3 } from './util/helpers';
+import {expect} from 'chai';
+import {createCollectionExpectSuccess} from '../util/helpers';
+import {collectionIdToAddress, createEthAccountWithBalance, GAS_ARGS, itWeb3} from './util/helpers';
import fungibleMetadataAbi from './fungibleMetadataAbi.json';
describe('Common metadata', () => {
- itWeb3('Returns collection name', async ({ api, web3 }) => {
+ itWeb3('Returns collection name', async ({api, web3}) => {
const collection = await createCollectionExpectSuccess({
name: 'token name',
- mode: { type: 'NFT' },
+ mode: {type: 'NFT'},
});
const caller = await createEthAccountWithBalance(api, web3);
const address = collectionIdToAddress(collection);
- const contract = new web3.eth.Contract(fungibleMetadataAbi as any, address, { from: caller, ...GAS_ARGS });
+ const contract = new web3.eth.Contract(fungibleMetadataAbi as any, address, {from: caller, ...GAS_ARGS});
const name = await contract.methods.name().call();
expect(name).to.equal('token name');
});
- itWeb3('Returns symbol name', async ({ api, web3 }) => {
+ itWeb3('Returns symbol name', async ({api, web3}) => {
const collection = await createCollectionExpectSuccess({
tokenPrefix: 'TOK',
- mode: { type: 'NFT' },
+ mode: {type: 'NFT'},
});
const caller = await createEthAccountWithBalance(api, web3);
const address = collectionIdToAddress(collection);
- const contract = new web3.eth.Contract(fungibleMetadataAbi as any, address, { from: caller, ...GAS_ARGS });
+ const contract = new web3.eth.Contract(fungibleMetadataAbi as any, address, {from: caller, ...GAS_ARGS});
const symbol = await contract.methods.symbol().call();
expect(symbol).to.equal('TOK');
@@ -39,14 +39,14 @@
});
describe('Fungible metadata', () => {
- itWeb3('Returns fungible decimals', async ({ api, web3 }) => {
+ itWeb3('Returns fungible decimals', async ({api, web3}) => {
const collection = await createCollectionExpectSuccess({
- mode: { type: 'Fungible', decimalPoints: 6 },
+ mode: {type: 'Fungible', decimalPoints: 6},
});
const caller = await createEthAccountWithBalance(api, web3);
const address = collectionIdToAddress(collection);
- const contract = new web3.eth.Contract(fungibleMetadataAbi as any, address, { from: caller, ...GAS_ARGS });
+ const contract = new web3.eth.Contract(fungibleMetadataAbi as any, address, {from: caller, ...GAS_ARGS});
const decimals = await contract.methods.decimals().call();
expect(+decimals).to.equal(6);
tests/src/eth/migration.test.tsdiffbeforeafterboth--- a/tests/src/eth/migration.test.ts
+++ b/tests/src/eth/migration.test.ts
@@ -1,10 +1,10 @@
-import { expect } from 'chai';
+import {expect} from 'chai';
import privateKey from '../substrate/privateKey';
-import { submitTransactionAsync } from '../substrate/substrate-api';
-import { createEthAccountWithBalance, GAS_ARGS, itWeb3 } from './util/helpers';
+import {submitTransactionAsync} from '../substrate/substrate-api';
+import {createEthAccountWithBalance, GAS_ARGS, itWeb3} from './util/helpers';
describe('EVM Migrations', () => {
- itWeb3('Deploy contract saved state', async ({ web3, api }) => {
+ itWeb3('Deploy contract saved state', async ({web3, api}) => {
/*
contract StatefulContract {
uint counter;
@@ -41,9 +41,9 @@
const alice = privateKey('//Alice');
const caller = await createEthAccountWithBalance(api, web3);
- await submitTransactionAsync(alice, api.tx.sudo.sudo(api.tx.evmMigration.begin(ADDRESS)));
- await submitTransactionAsync(alice, api.tx.sudo.sudo(api.tx.evmMigration.setData(ADDRESS, DATA)));
- await submitTransactionAsync(alice, api.tx.sudo.sudo(api.tx.evmMigration.finish(ADDRESS, CODE)));
+ await submitTransactionAsync(alice, api.tx.sudo.sudo(api.tx.evmMigration.begin(ADDRESS) as any));
+ await submitTransactionAsync(alice, api.tx.sudo.sudo(api.tx.evmMigration.setData(ADDRESS, DATA as any) as any));
+ await submitTransactionAsync(alice, api.tx.sudo.sudo(api.tx.evmMigration.finish(ADDRESS, CODE) as any));
const contract = new web3.eth.Contract([
{
@@ -72,11 +72,11 @@
stateMutability: 'view',
type: 'function',
},
- ], ADDRESS, { from: caller, ...GAS_ARGS });
-
+ ], ADDRESS, {from: caller, ...GAS_ARGS});
+
expect(await contract.methods.counterValue().call()).to.be.equal('10');
for (let i = 1; i <= 4; i++) {
expect(await contract.methods.get(i).call()).to.be.equal(i.toString());
}
});
-});
\ No newline at end of file
+});
tests/src/eth/nonFungible.test.tsdiffbeforeafterboth--- a/tests/src/eth/nonFungible.test.ts
+++ b/tests/src/eth/nonFungible.test.ts
@@ -4,41 +4,39 @@
//
import privateKey from '../substrate/privateKey';
-import { approveExpectSuccess, burnItemExpectSuccess, createCollectionExpectSuccess, createItemExpectSuccess, setVariableMetaDataExpectSuccess, transferExpectSuccess, transferFromExpectSuccess, UNIQUE, setMetadataUpdatePermissionFlagExpectSuccess } from '../util/helpers';
-import { collectionIdToAddress, createEthAccount, createEthAccountWithBalance, GAS_ARGS, itWeb3, normalizeEvents, recordEthFee, recordEvents, subToEth, transferBalanceToEth } from './util/helpers';
+import {approveExpectSuccess, burnItemExpectSuccess, createCollectionExpectSuccess, createItemExpectSuccess, setVariableMetaDataExpectSuccess, transferExpectSuccess, transferFromExpectSuccess, UNIQUE, setMetadataUpdatePermissionFlagExpectSuccess} from '../util/helpers';
+import {collectionIdToAddress, createEthAccount, createEthAccountWithBalance, GAS_ARGS, itWeb3, normalizeEvents, recordEthFee, recordEvents, subToEth, transferBalanceToEth} from './util/helpers';
import nonFungibleAbi from './nonFungibleAbi.json';
-import { expect } from 'chai';
-import waitNewBlocks from '../substrate/wait-new-blocks';
-import { submitTransactionAsync } from '../substrate/substrate-api';
+import {expect} from 'chai';
+import {submitTransactionAsync} from '../substrate/substrate-api';
describe('NFT: Information getting', () => {
- itWeb3('totalSupply', async ({ api, web3 }) => {
+ itWeb3('totalSupply', async ({api, web3}) => {
const collection = await createCollectionExpectSuccess({
- mode: { type: 'NFT' },
+ mode: {type: 'NFT'},
});
const alice = privateKey('//Alice');
const caller = await createEthAccountWithBalance(api, web3);
- await createItemExpectSuccess(alice, collection, 'NFT', { substrate: alice.address });
+ await createItemExpectSuccess(alice, collection, 'NFT', {Substrate: alice.address});
const address = collectionIdToAddress(collection);
const contract = new web3.eth.Contract(nonFungibleAbi as any, address, {from: caller, ...GAS_ARGS});
const totalSupply = await contract.methods.totalSupply().call();
- // FIXME: always equals to 0, because this method is not implemented
- expect(totalSupply).to.equal('0');
+ expect(totalSupply).to.equal('1');
});
- itWeb3('balanceOf', async ({ api, web3 }) => {
+ itWeb3('balanceOf', async ({api, web3}) => {
const collection = await createCollectionExpectSuccess({
- mode: { type: 'NFT' },
+ mode: {type: 'NFT'},
});
const alice = privateKey('//Alice');
const caller = await createEthAccountWithBalance(api, web3);
- await createItemExpectSuccess(alice, collection, 'NFT', { ethereum: caller });
- await createItemExpectSuccess(alice, collection, 'NFT', { ethereum: caller });
- await createItemExpectSuccess(alice, collection, 'NFT', { ethereum: caller });
+ await createItemExpectSuccess(alice, collection, 'NFT', {Ethereum:caller});
+ await createItemExpectSuccess(alice, collection, 'NFT', {Ethereum: caller});
+ await createItemExpectSuccess(alice, collection, 'NFT', {Ethereum: caller});
const address = collectionIdToAddress(collection);
const contract = new web3.eth.Contract(nonFungibleAbi as any, address, {from: caller, ...GAS_ARGS});
@@ -47,14 +45,14 @@
expect(balance).to.equal('3');
});
- itWeb3('ownerOf', async ({ api, web3 }) => {
+ itWeb3('ownerOf', async ({api, web3}) => {
const collection = await createCollectionExpectSuccess({
- mode: { type: 'NFT' },
+ mode: {type: 'NFT'},
});
const alice = privateKey('//Alice');
const caller = await createEthAccountWithBalance(api, web3);
- const tokenId = await createItemExpectSuccess(alice, collection, 'NFT', { ethereum: caller });
+ const tokenId = await createItemExpectSuccess(alice, collection, 'NFT', {Ethereum: caller});
const address = collectionIdToAddress(collection);
const contract = new web3.eth.Contract(nonFungibleAbi as any, address, {from: caller, ...GAS_ARGS});
@@ -65,14 +63,14 @@
});
describe('NFT: Plain calls', () => {
- itWeb3('Can perform mint()', async ({ web3, api }) => {
+ itWeb3('Can perform mint()', async ({web3, api}) => {
const collection = await createCollectionExpectSuccess({
- mode: { type: 'NFT' },
+ mode: {type: 'NFT'},
});
const alice = privateKey('//Alice');
const caller = await createEthAccountWithBalance(api, web3);
- const changeAdminTx = api.tx.nft.addCollectionAdmin(collection, { ethereum: caller });
+ const changeAdminTx = api.tx.nft.addCollectionAdmin(collection, {Ethereum: caller});
await submitTransactionAsync(alice, changeAdminTx);
const receiver = createEthAccount(web3);
@@ -101,18 +99,17 @@
},
]);
- await waitNewBlocks(api, 1);
expect(await contract.methods.tokenURI(nextTokenId).call()).to.be.equal('Test URI');
}
});
- itWeb3('Can perform mintBulk()', async ({ web3, api }) => {
+ itWeb3('Can perform mintBulk()', async ({web3, api}) => {
const collection = await createCollectionExpectSuccess({
- mode: { type: 'NFT' },
+ mode: {type: 'NFT'},
});
const alice = privateKey('//Alice');
const caller = await createEthAccountWithBalance(api, web3);
- const changeAdminTx = api.tx.nft.addCollectionAdmin(collection, { ethereum: caller });
+ const changeAdminTx = api.tx.nft.addCollectionAdmin(collection, {Ethereum: caller});
await submitTransactionAsync(alice, changeAdminTx);
const receiver = createEthAccount(web3);
@@ -129,7 +126,7 @@
[+nextTokenId + 1, 'Test URI 1'],
[+nextTokenId + 2, 'Test URI 2'],
],
- ).send({ from: caller });
+ ).send({from: caller});
const events = normalizeEvents(result.events);
expect(events).to.be.deep.equal([
@@ -162,14 +159,13 @@
},
]);
- await waitNewBlocks(api, 1);
expect(await contract.methods.tokenURI(nextTokenId).call()).to.be.equal('Test URI 0');
expect(await contract.methods.tokenURI(+nextTokenId + 1).call()).to.be.equal('Test URI 1');
expect(await contract.methods.tokenURI(+nextTokenId + 2).call()).to.be.equal('Test URI 2');
}
});
- itWeb3('Can perform burn()', async ({ web3, api }) => {
+ itWeb3('Can perform burn()', async ({web3, api}) => {
const collection = await createCollectionExpectSuccess({
mode: {type: 'NFT'},
});
@@ -177,15 +173,15 @@
const owner = await createEthAccountWithBalance(api, web3);
- const tokenId = await createItemExpectSuccess(alice, collection, 'NFT', { ethereum: owner });
-
+ const tokenId = await createItemExpectSuccess(alice, collection, 'NFT', {Ethereum: owner});
+
const address = collectionIdToAddress(collection);
const contract = new web3.eth.Contract(nonFungibleAbi as any, address, {from: owner, ...GAS_ARGS});
{
- const result = await contract.methods.burn(tokenId).send({ from: owner });
+ const result = await contract.methods.burn(tokenId).send({from: owner});
const events = normalizeEvents(result.events);
-
+
expect(events).to.be.deep.equal([
{
address,
@@ -200,16 +196,16 @@
}
});
- itWeb3('Can perform approve()', async ({ web3, api }) => {
+ itWeb3('Can perform approve()', async ({web3, api}) => {
const collection = await createCollectionExpectSuccess({
- mode: { type: 'NFT' },
+ mode: {type: 'NFT'},
});
const alice = privateKey('//Alice');
const owner = createEthAccount(web3);
await transferBalanceToEth(api, alice, owner, 999999999999999);
- const tokenId = await createItemExpectSuccess(alice, collection, 'NFT', { ethereum: owner });
+ const tokenId = await createItemExpectSuccess(alice, collection, 'NFT', {Ethereum: owner});
const spender = createEthAccount(web3);
@@ -217,7 +213,7 @@
const contract = new web3.eth.Contract(nonFungibleAbi as any, address);
{
- const result = await contract.methods.approve(spender, tokenId).send({ from: owner, gas: '0x1000000', gasPrice: '0x01' });
+ const result = await contract.methods.approve(spender, tokenId).send({from: owner, gas: '0x1000000', gasPrice: '0x01'});
const events = normalizeEvents(result.events);
expect(events).to.be.deep.equal([
@@ -234,16 +230,16 @@
}
});
- itWeb3('Can perform transferFrom()', async ({ web3, api }) => {
+ itWeb3('Can perform transferFrom()', async ({web3, api}) => {
const collection = await createCollectionExpectSuccess({
- mode: { type: 'NFT' },
+ mode: {type: 'NFT'},
});
const alice = privateKey('//Alice');
const owner = createEthAccount(web3);
await transferBalanceToEth(api, alice, owner, 999999999999999);
- const tokenId = await createItemExpectSuccess(alice, collection, 'NFT', { ethereum: owner });
+ const tokenId = await createItemExpectSuccess(alice, collection, 'NFT', {Ethereum: owner});
const spender = createEthAccount(web3);
await transferBalanceToEth(api, alice, spender, 999999999999999);
@@ -253,10 +249,10 @@
const address = collectionIdToAddress(collection);
const contract = new web3.eth.Contract(nonFungibleAbi as any, address, {from: owner, ...GAS_ARGS});
- await contract.methods.approve(spender, tokenId).send({ from: owner });
+ await contract.methods.approve(spender, tokenId).send({from: owner});
{
- const result = await contract.methods.transferFrom(owner, receiver, tokenId).send({ from: spender });
+ const result = await contract.methods.transferFrom(owner, receiver, tokenId).send({from: spender});
const events = normalizeEvents(result.events);
expect(events).to.be.deep.equal([
{
@@ -282,16 +278,16 @@
}
});
- itWeb3('Can perform transfer()', async ({ web3, api }) => {
+ itWeb3('Can perform transfer()', async ({web3, api}) => {
const collection = await createCollectionExpectSuccess({
- mode: { type: 'NFT' },
+ mode: {type: 'NFT'},
});
const alice = privateKey('//Alice');
const owner = createEthAccount(web3);
await transferBalanceToEth(api, alice, owner, 999999999999999);
- const tokenId = await createItemExpectSuccess(alice, collection, 'NFT', { ethereum: owner });
+ const tokenId = await createItemExpectSuccess(alice, collection, 'NFT', {Ethereum: owner});
const receiver = createEthAccount(web3);
await transferBalanceToEth(api, alice, receiver, 999999999999999);
@@ -300,8 +296,7 @@
const contract = new web3.eth.Contract(nonFungibleAbi as any, address, {from: owner, ...GAS_ARGS});
{
- const result = await contract.methods.transfer(receiver, tokenId).send({ from: owner });
- await waitNewBlocks(api, 1);
+ const result = await contract.methods.transfer(receiver, tokenId).send({from: owner});
const events = normalizeEvents(result.events);
expect(events).to.be.deep.equal([
{
@@ -327,105 +322,104 @@
}
});
- itWeb3('Can perform getVariableMetadata', async ({ web3, api }) => {
+ itWeb3('Can perform getVariableMetadata', async ({web3, api}) => {
const collection = await createCollectionExpectSuccess({
- mode: { type: 'NFT' },
+ mode: {type: 'NFT'},
});
const alice = privateKey('//Alice');
const owner = await createEthAccountWithBalance(api, web3);
- const item = await createItemExpectSuccess(alice, collection, 'NFT', { ethereum: owner });
+ const item = await createItemExpectSuccess(alice, collection, 'NFT', {Ethereum: owner});
await setMetadataUpdatePermissionFlagExpectSuccess(alice, collection, 'Admin');
await setVariableMetaDataExpectSuccess(alice, collection, item, [1, 2, 3]);
const address = collectionIdToAddress(collection);
- const contract = new web3.eth.Contract(nonFungibleAbi as any, address, { from: owner, ...GAS_ARGS });
-
+ const contract = new web3.eth.Contract(nonFungibleAbi as any, address, {from: owner, ...GAS_ARGS});
+
expect(await contract.methods.getVariableMetadata(item).call()).to.be.equal('0x010203');
});
- itWeb3('Can perform setVariableMetadata', async ({ web3, api }) => {
+ itWeb3('Can perform setVariableMetadata', async ({web3, api}) => {
const collection = await createCollectionExpectSuccess({
- mode: { type: 'NFT' },
+ mode: {type: 'NFT'},
});
const alice = privateKey('//Alice');
const owner = await createEthAccountWithBalance(api, web3);
- const item = await createItemExpectSuccess(alice, collection, 'NFT', { ethereum: owner });
+ const item = await createItemExpectSuccess(alice, collection, 'NFT', {Ethereum: owner});
const address = collectionIdToAddress(collection);
- const contract = new web3.eth.Contract(nonFungibleAbi as any, address, { from: owner, ...GAS_ARGS });
-
- expect(await contract.methods.setVariableMetadata(item, '0x010203').send({ from: owner }));
- await waitNewBlocks(api, 1);
+ const contract = new web3.eth.Contract(nonFungibleAbi as any, address, {from: owner, ...GAS_ARGS});
+
+ expect(await contract.methods.setVariableMetadata(item, '0x010203').send({from: owner}));
expect(await contract.methods.getVariableMetadata(item).call()).to.be.equal('0x010203');
});
});
describe('NFT: Fees', () => {
- itWeb3('approve() call fee is less than 0.2UNQ', async ({ web3, api }) => {
+ itWeb3('approve() call fee is less than 0.2UNQ', async ({web3, api}) => {
const collection = await createCollectionExpectSuccess({
- mode: { type: 'NFT' },
+ mode: {type: 'NFT'},
});
const alice = privateKey('//Alice');
const owner = await createEthAccountWithBalance(api, web3);
const spender = createEthAccount(web3);
- const tokenId = await createItemExpectSuccess(alice, collection, 'NFT', { ethereum: owner });
+ const tokenId = await createItemExpectSuccess(alice, collection, 'NFT', {Ethereum: owner});
const address = collectionIdToAddress(collection);
- const contract = new web3.eth.Contract(nonFungibleAbi as any, address, { from: owner, ...GAS_ARGS });
+ const contract = new web3.eth.Contract(nonFungibleAbi as any, address, {from: owner, ...GAS_ARGS});
- const cost = await recordEthFee(api, owner, () => contract.methods.approve(spender, tokenId).send({ from: owner }));
+ const cost = await recordEthFee(api, owner, () => contract.methods.approve(spender, tokenId).send({from: owner}));
expect(cost < BigInt(0.2 * Number(UNIQUE)));
});
- itWeb3('transferFrom() call fee is less than 0.2UNQ', async ({ web3, api }) => {
+ itWeb3('transferFrom() call fee is less than 0.2UNQ', async ({web3, api}) => {
const collection = await createCollectionExpectSuccess({
- mode: { type: 'NFT' },
+ mode: {type: 'NFT'},
});
const alice = privateKey('//Alice');
-
+
const owner = await createEthAccountWithBalance(api, web3);
const spender = await createEthAccountWithBalance(api, web3);
- const tokenId = await createItemExpectSuccess(alice, collection, 'NFT', { ethereum: owner });
+ const tokenId = await createItemExpectSuccess(alice, collection, 'NFT', {Ethereum: owner});
const address = collectionIdToAddress(collection);
- const contract = new web3.eth.Contract(nonFungibleAbi as any, address, { from: owner, ...GAS_ARGS });
+ const contract = new web3.eth.Contract(nonFungibleAbi as any, address, {from: owner, ...GAS_ARGS});
- await contract.methods.approve(spender, tokenId).send({ from: owner });
+ await contract.methods.approve(spender, tokenId).send({from: owner});
- const cost = await recordEthFee(api, spender, () => contract.methods.transferFrom(owner, spender, tokenId).send({ from: spender }));
+ const cost = await recordEthFee(api, spender, () => contract.methods.transferFrom(owner, spender, tokenId).send({from: spender}));
expect(cost < BigInt(0.2 * Number(UNIQUE)));
});
- itWeb3('transfer() call fee is less than 0.2UNQ', async ({ web3, api }) => {
+ itWeb3('transfer() call fee is less than 0.2UNQ', async ({web3, api}) => {
const collection = await createCollectionExpectSuccess({
- mode: { type: 'NFT' },
+ mode: {type: 'NFT'},
});
const alice = privateKey('//Alice');
const owner = await createEthAccountWithBalance(api, web3);
const receiver = createEthAccount(web3);
- const tokenId = await createItemExpectSuccess(alice, collection, 'NFT', { ethereum: owner });
+ const tokenId = await createItemExpectSuccess(alice, collection, 'NFT', {Ethereum: owner});
const address = collectionIdToAddress(collection);
- const contract = new web3.eth.Contract(nonFungibleAbi as any, address, { from: owner, ...GAS_ARGS });
+ const contract = new web3.eth.Contract(nonFungibleAbi as any, address, {from: owner, ...GAS_ARGS});
- const cost = await recordEthFee(api, owner, () => contract.methods.transfer(receiver, tokenId).send({ from: owner }));
+ const cost = await recordEthFee(api, owner, () => contract.methods.transfer(receiver, tokenId).send({from: owner}));
expect(cost < BigInt(0.2 * Number(UNIQUE)));
});
});
describe('NFT: Substrate calls', () => {
- itWeb3('Events emitted for mint()', async ({ web3 }) => {
+ itWeb3('Events emitted for mint()', async ({web3}) => {
const collection = await createCollectionExpectSuccess({
- mode: { type: 'NFT' },
+ mode: {type: 'NFT'},
});
const alice = privateKey('//Alice');
@@ -450,9 +444,9 @@
]);
});
- itWeb3('Events emitted for burn()', async ({ web3 }) => {
+ itWeb3('Events emitted for burn()', async ({web3}) => {
const collection = await createCollectionExpectSuccess({
- mode: { type: 'NFT' },
+ mode: {type: 'NFT'},
});
const alice = privateKey('//Alice');
@@ -477,9 +471,9 @@
]);
});
- itWeb3('Events emitted for approve()', async ({ web3 }) => {
+ itWeb3('Events emitted for approve()', async ({web3}) => {
const collection = await createCollectionExpectSuccess({
- mode: { type: 'NFT' },
+ mode: {type: 'NFT'},
});
const alice = privateKey('//Alice');
@@ -491,7 +485,7 @@
const contract = new web3.eth.Contract(nonFungibleAbi as any, address);
const events = await recordEvents(contract, async () => {
- await approveExpectSuccess(collection, tokenId, alice, { ethereum: receiver }, 1);
+ await approveExpectSuccess(collection, tokenId, alice, {Ethereum: receiver}, 1);
});
expect(events).to.be.deep.equal([
@@ -507,9 +501,9 @@
]);
});
- itWeb3('Events emitted for transferFrom()', async ({ web3 }) => {
+ itWeb3('Events emitted for transferFrom()', async ({web3}) => {
const collection = await createCollectionExpectSuccess({
- mode: { type: 'NFT' },
+ mode: {type: 'NFT'},
});
const alice = privateKey('//Alice');
const bob = privateKey('//Bob');
@@ -517,13 +511,13 @@
const receiver = createEthAccount(web3);
const tokenId = await createItemExpectSuccess(alice, collection, 'NFT');
- await approveExpectSuccess(collection, tokenId, alice, bob, 1);
+ await approveExpectSuccess(collection, tokenId, alice, bob.address, 1);
const address = collectionIdToAddress(collection);
const contract = new web3.eth.Contract(nonFungibleAbi as any, address);
const events = await recordEvents(contract, async () => {
- await transferFromExpectSuccess(collection, tokenId, bob, alice, { ethereum: receiver }, 1, 'NFT');
+ await transferFromExpectSuccess(collection, tokenId, bob, alice, {Ethereum: receiver}, 1, 'NFT');
});
expect(events).to.be.deep.equal([
@@ -539,9 +533,9 @@
]);
});
- itWeb3('Events emitted for transfer()', async ({ web3 }) => {
+ itWeb3('Events emitted for transfer()', async ({web3}) => {
const collection = await createCollectionExpectSuccess({
- mode: { type: 'NFT' },
+ mode: {type: 'NFT'},
});
const alice = privateKey('//Alice');
@@ -553,7 +547,7 @@
const contract = new web3.eth.Contract(nonFungibleAbi as any, address);
const events = await recordEvents(contract, async () => {
- await transferExpectSuccess(collection, tokenId, alice, { ethereum: receiver }, 1, 'NFT');
+ await transferExpectSuccess(collection, tokenId, alice, {Ethereum: receiver}, 1, 'NFT');
});
expect(events).to.be.deep.equal([
tests/src/eth/payable.test.tsdiffbeforeafterboth--- a/tests/src/eth/payable.test.ts
+++ b/tests/src/eth/payable.test.ts
@@ -1,19 +1,17 @@
-import { expect } from 'chai';
+import {expect} from 'chai';
import privateKey from '../substrate/privateKey';
-import { submitTransactionAsync } from '../substrate/substrate-api';
-import waitNewBlocks from '../substrate/wait-new-blocks';
-import { createEthAccountWithBalance, deployCollector, GAS_ARGS, itWeb3, subToEth } from './util/helpers';
+import {submitTransactionAsync} from '../substrate/substrate-api';
+import {createEthAccountWithBalance, deployCollector, GAS_ARGS, itWeb3, subToEth} from './util/helpers';
import {evmToAddress} from '@polkadot/util-crypto';
-import { getGenericResult } from '../util/helpers';
-import { getBalanceSingle, transferBalanceExpectSuccess } from '../substrate/get-balance';
+import {getGenericResult} from '../util/helpers';
+import {getBalanceSingle, transferBalanceExpectSuccess} from '../substrate/get-balance';
-describe('EVM payable contracts', ()=>{
+describe('EVM payable contracts', () => {
itWeb3('Evm contract can receive wei from eth account', async ({api, web3}) => {
const deployer = await createEthAccountWithBalance(api, web3);
const contract = await deployCollector(web3, deployer);
await web3.eth.sendTransaction({from: deployer, to: contract.options.address, value: '10000', ...GAS_ARGS});
- await waitNewBlocks(api, 1);
expect(await contract.methods.getCollected().call()).to.be.equal('10000');
});
@@ -52,7 +50,7 @@
const alice = privateKey('//Alice');
await transferBalanceExpectSuccess(api, alice, evmToAddress(contract.options.address), '10000');
-
+
expect(await contract.methods.getUnaccounted().call()).to.be.equal('10000');
});
@@ -65,7 +63,6 @@
const alice = privateKey('//Alice');
await web3.eth.sendTransaction({from: deployer, to: contract.options.address, value: CONTRACT_BALANCE.toString(), ...GAS_ARGS});
- await waitNewBlocks(api, 1);
const receiver = privateKey(`//Receiver${Date.now()}`);
@@ -95,4 +92,4 @@
expect(finalReceiverBalance > initialReceiverBalance).to.be.true;
}
});
-});
\ No newline at end of file
+});
tests/src/eth/proxy/fungibleProxy.test.tsdiffbeforeafterboth--- a/tests/src/eth/proxy/fungibleProxy.test.ts
+++ b/tests/src/eth/proxy/fungibleProxy.test.ts
@@ -4,53 +4,52 @@
//
import privateKey from '../../substrate/privateKey';
-import { createCollectionExpectSuccess, createFungibleItemExpectSuccess } from '../../util/helpers';
-import { collectionIdToAddress, createEthAccount, createEthAccountWithBalance, GAS_ARGS, itWeb3, normalizeEvents } from '../util/helpers';
+import {createCollectionExpectSuccess, createFungibleItemExpectSuccess} from '../../util/helpers';
+import {collectionIdToAddress, createEthAccount, createEthAccountWithBalance, GAS_ARGS, itWeb3, normalizeEvents} from '../util/helpers';
import fungibleAbi from '../fungibleAbi.json';
-import { expect } from 'chai';
-import { ApiPromise } from '@polkadot/api';
+import {expect} from 'chai';
+import {ApiPromise} from '@polkadot/api';
import Web3 from 'web3';
-import { readFile } from 'fs/promises';
+import {readFile} from 'fs/promises';
async function proxyWrap(api: ApiPromise, web3: Web3, wrapped: any) {
// Proxy owner has no special privilegies, we don't need to reuse them
const owner = await createEthAccountWithBalance(api, web3);
- const Proxy = new web3.eth.Contract(JSON.parse((await readFile(`${__dirname}/UniqueFungibleProxy.abi`)).toString()), undefined, {
+ const proxyContract = new web3.eth.Contract(JSON.parse((await readFile(`${__dirname}/UniqueFungibleProxy.abi`)).toString()), undefined, {
from: owner,
...GAS_ARGS,
});
- const proxy = await Proxy.deploy({ data: (await readFile(`${__dirname}/UniqueFungibleProxy.bin`)).toString(), arguments: [wrapped.options.address] }).send({ from: owner });
+ const proxy = await proxyContract.deploy({data: (await readFile(`${__dirname}/UniqueFungibleProxy.bin`)).toString(), arguments: [wrapped.options.address]}).send({from: owner});
return proxy;
}
describe('Fungible (Via EVM proxy): Information getting', () => {
- itWeb3('totalSupply', async ({ api, web3 }) => {
+ itWeb3('totalSupply', async ({api, web3}) => {
const collection = await createCollectionExpectSuccess({
name: 'token name',
- mode: { type: 'Fungible', decimalPoints: 0 },
+ mode: {type: 'Fungible', decimalPoints: 0},
});
const alice = privateKey('//Alice');
const caller = await createEthAccountWithBalance(api, web3);
-
- await createFungibleItemExpectSuccess(alice, collection, { Value: 200n }, { substrate: alice.address });
+ await createFungibleItemExpectSuccess(alice, collection, {Value: 200n}, {Substrate: alice.address});
+
const address = collectionIdToAddress(collection);
const contract = await proxyWrap(api, web3, new web3.eth.Contract(fungibleAbi as any, address, {from: caller, ...GAS_ARGS}));
const totalSupply = await contract.methods.totalSupply().call();
- // FIXME: always equals to 0, because this method is not implemented
- expect(totalSupply).to.equal('0');
+ expect(totalSupply).to.equal('200');
});
- itWeb3('balanceOf', async ({ api, web3 }) => {
+ itWeb3('balanceOf', async ({api, web3}) => {
const collection = await createCollectionExpectSuccess({
name: 'token name',
- mode: { type: 'Fungible', decimalPoints: 0 },
+ mode: {type: 'Fungible', decimalPoints: 0},
});
const alice = privateKey('//Alice');
const caller = await createEthAccountWithBalance(api, web3);
- await createFungibleItemExpectSuccess(alice, collection, { Value: 200n }, { ethereum: caller });
+ await createFungibleItemExpectSuccess(alice, collection, {Value: 200n}, {Ethereum: caller});
const address = collectionIdToAddress(collection);
const contract = await proxyWrap(api, web3, new web3.eth.Contract(fungibleAbi as any, address, {from: caller, ...GAS_ARGS}));
@@ -61,10 +60,10 @@
});
describe('Fungible (Via EVM proxy): Plain calls', () => {
- itWeb3('Can perform approve()', async ({ web3, api }) => {
+ itWeb3('Can perform approve()', async ({web3, api}) => {
const collection = await createCollectionExpectSuccess({
name: 'token name',
- mode: { type: 'Fungible', decimalPoints: 0 },
+ mode: {type: 'Fungible', decimalPoints: 0},
});
const alice = privateKey('//Alice');
const caller = await createEthAccountWithBalance(api, web3);
@@ -72,7 +71,7 @@
const address = collectionIdToAddress(collection);
const contract = await proxyWrap(api, web3, new web3.eth.Contract(fungibleAbi as any, address, {from: caller, ...GAS_ARGS}));
- await createFungibleItemExpectSuccess(alice, collection, { Value: 200n }, { ethereum: contract.options.address });
+ await createFungibleItemExpectSuccess(alice, collection, {Value: 200n}, {Ethereum: contract.options.address});
{
const result = await contract.methods.approve(spender, 100).send({from: caller});
@@ -97,21 +96,21 @@
}
});
- itWeb3('Can perform transferFrom()', async ({ web3, api }) => {
+ itWeb3('Can perform transferFrom()', async ({web3, api}) => {
const collection = await createCollectionExpectSuccess({
name: 'token name',
- mode: { type: 'Fungible', decimalPoints: 0 },
+ mode: {type: 'Fungible', decimalPoints: 0},
});
const alice = privateKey('//Alice');
const caller = await createEthAccountWithBalance(api, web3);
const owner = await createEthAccountWithBalance(api, web3);
- await createFungibleItemExpectSuccess(alice, collection, { Value: 200n }, { ethereum: owner });
+ await createFungibleItemExpectSuccess(alice, collection, {Value: 200n}, {Ethereum: owner});
const receiver = createEthAccount(web3);
const address = collectionIdToAddress(collection);
- const evmCollection = new web3.eth.Contract(fungibleAbi as any, address, { from: caller, ...GAS_ARGS });
+ const evmCollection = new web3.eth.Contract(fungibleAbi as any, address, {from: caller, ...GAS_ARGS});
const contract = await proxyWrap(api, web3, evmCollection);
await evmCollection.methods.approve(contract.options.address, 100).send({from: owner});
@@ -152,10 +151,10 @@
}
});
- itWeb3('Can perform transfer()', async ({ web3, api }) => {
+ itWeb3('Can perform transfer()', async ({web3, api}) => {
const collection = await createCollectionExpectSuccess({
name: 'token name',
- mode: { type: 'Fungible', decimalPoints: 0 },
+ mode: {type: 'Fungible', decimalPoints: 0},
});
const alice = privateKey('//Alice');
const caller = await createEthAccountWithBalance(api, web3);
@@ -163,10 +162,10 @@
const address = collectionIdToAddress(collection);
const contract = await proxyWrap(api, web3, new web3.eth.Contract(fungibleAbi as any, address, {from: caller, ...GAS_ARGS}));
- await createFungibleItemExpectSuccess(alice, collection, { Value: 200n }, { ethereum: contract.options.address });
+ await createFungibleItemExpectSuccess(alice, collection, {Value: 200n}, {Ethereum: contract.options.address});
{
- const result = await contract.methods.transfer(receiver, 50).send({ from: caller});
+ const result = await contract.methods.transfer(receiver, 50).send({from: caller});
const events = normalizeEvents(result.events);
expect(events).to.be.deep.equal([
{
tests/src/eth/proxy/nonFungibleProxy.test.tsdiffbeforeafterboth--- a/tests/src/eth/proxy/nonFungibleProxy.test.ts
+++ b/tests/src/eth/proxy/nonFungibleProxy.test.ts
@@ -4,55 +4,53 @@
//
import privateKey from '../../substrate/privateKey';
-import { createCollectionExpectSuccess, createItemExpectSuccess, setVariableMetaDataExpectSuccess, setMetadataUpdatePermissionFlagExpectSuccess } from '../../util/helpers';
-import { collectionIdToAddress, createEthAccount, createEthAccountWithBalance, GAS_ARGS, itWeb3, normalizeEvents } from '../util/helpers';
+import {createCollectionExpectSuccess, createItemExpectSuccess, setVariableMetaDataExpectSuccess, setMetadataUpdatePermissionFlagExpectSuccess} from '../../util/helpers';
+import {collectionIdToAddress, createEthAccount, createEthAccountWithBalance, GAS_ARGS, itWeb3, normalizeEvents} from '../util/helpers';
import nonFungibleAbi from '../nonFungibleAbi.json';
-import { expect } from 'chai';
-import waitNewBlocks from '../../substrate/wait-new-blocks';
-import { submitTransactionAsync } from '../../substrate/substrate-api';
+import {expect} from 'chai';
+import {submitTransactionAsync} from '../../substrate/substrate-api';
import Web3 from 'web3';
-import { readFile } from 'fs/promises';
-import { ApiPromise } from '@polkadot/api';
+import {readFile} from 'fs/promises';
+import {ApiPromise} from '@polkadot/api';
async function proxyWrap(api: ApiPromise, web3: Web3, wrapped: any) {
// Proxy owner has no special privilegies, we don't need to reuse them
const owner = await createEthAccountWithBalance(api, web3);
- const Proxy = new web3.eth.Contract(JSON.parse((await readFile(`${__dirname}/UniqueNFTProxy.abi`)).toString()), undefined, {
+ const proxyContract = new web3.eth.Contract(JSON.parse((await readFile(`${__dirname}/UniqueNFTProxy.abi`)).toString()), undefined, {
from: owner,
...GAS_ARGS,
});
- const proxy = await Proxy.deploy({ data: (await readFile(`${__dirname}/UniqueNFTProxy.bin`)).toString(), arguments: [wrapped.options.address] }).send({ from: owner });
+ const proxy = await proxyContract.deploy({data: (await readFile(`${__dirname}/UniqueNFTProxy.bin`)).toString(), arguments: [wrapped.options.address]}).send({from: owner});
return proxy;
}
describe('NFT (Via EVM proxy): Information getting', () => {
- itWeb3('totalSupply', async ({ api, web3 }) => {
+ itWeb3('totalSupply', async ({api, web3}) => {
const collection = await createCollectionExpectSuccess({
- mode: { type: 'NFT' },
+ mode: {type: 'NFT'},
});
const alice = privateKey('//Alice');
const caller = await createEthAccountWithBalance(api, web3);
- await createItemExpectSuccess(alice, collection, 'NFT', { substrate: alice.address });
+ await createItemExpectSuccess(alice, collection, 'NFT', {Substrate: alice.address});
const address = collectionIdToAddress(collection);
const contract = await proxyWrap(api, web3, new web3.eth.Contract(nonFungibleAbi as any, address, {from: caller, ...GAS_ARGS}));
const totalSupply = await contract.methods.totalSupply().call();
- // FIXME: always equals to 0, because this method is not implemented
- expect(totalSupply).to.equal('0');
+ expect(totalSupply).to.equal('1');
});
- itWeb3('balanceOf', async ({ api, web3 }) => {
+ itWeb3('balanceOf', async ({api, web3}) => {
const collection = await createCollectionExpectSuccess({
- mode: { type: 'NFT' },
+ mode: {type: 'NFT'},
});
const alice = privateKey('//Alice');
const caller = await createEthAccountWithBalance(api, web3);
- await createItemExpectSuccess(alice, collection, 'NFT', { ethereum: caller });
- await createItemExpectSuccess(alice, collection, 'NFT', { ethereum: caller });
- await createItemExpectSuccess(alice, collection, 'NFT', { ethereum: caller });
+ await createItemExpectSuccess(alice, collection, 'NFT', {Ethereum: caller});
+ await createItemExpectSuccess(alice, collection, 'NFT', {Ethereum: caller});
+ await createItemExpectSuccess(alice, collection, 'NFT', {Ethereum: caller});
const address = collectionIdToAddress(collection);
const contract = await proxyWrap(api, web3, new web3.eth.Contract(nonFungibleAbi as any, address, {from: caller, ...GAS_ARGS}));
@@ -61,14 +59,14 @@
expect(balance).to.equal('3');
});
- itWeb3('ownerOf', async ({ api, web3 }) => {
+ itWeb3('ownerOf', async ({api, web3}) => {
const collection = await createCollectionExpectSuccess({
- mode: { type: 'NFT' },
+ mode: {type: 'NFT'},
});
const alice = privateKey('//Alice');
const caller = await createEthAccountWithBalance(api, web3);
- const tokenId = await createItemExpectSuccess(alice, collection, 'NFT', { ethereum: caller });
+ const tokenId = await createItemExpectSuccess(alice, collection, 'NFT', {Ethereum: caller});
const address = collectionIdToAddress(collection);
const contract = await proxyWrap(api, web3, new web3.eth.Contract(nonFungibleAbi as any, address, {from: caller, ...GAS_ARGS}));
@@ -79,18 +77,18 @@
});
describe('NFT (Via EVM proxy): Plain calls', () => {
- itWeb3('Can perform mint()', async ({ web3, api }) => {
+ itWeb3('Can perform mint()', async ({web3, api}) => {
const collection = await createCollectionExpectSuccess({
- mode: { type: 'NFT' },
+ mode: {type: 'NFT'},
});
const alice = privateKey('//Alice');
const caller = await createEthAccountWithBalance(api, web3);
const receiver = createEthAccount(web3);
const address = collectionIdToAddress(collection);
- const contract = await proxyWrap(api, web3, new web3.eth.Contract(nonFungibleAbi as any, address, { from: caller, ...GAS_ARGS }));
+ const contract = await proxyWrap(api, web3, new web3.eth.Contract(nonFungibleAbi as any, address, {from: caller, ...GAS_ARGS}));
- const changeAdminTx = api.tx.nft.addCollectionAdmin(collection, { ethereum: contract.options.address });
+ const changeAdminTx = api.tx.nft.addCollectionAdmin(collection, {Ethereum: contract.options.address});
await submitTransactionAsync(alice, changeAdminTx);
{
@@ -100,7 +98,7 @@
receiver,
nextTokenId,
'Test URI',
- ).send({ from: caller });
+ ).send({from: caller});
const events = normalizeEvents(result.events);
expect(events).to.be.deep.equal([
@@ -115,13 +113,12 @@
},
]);
- await waitNewBlocks(api, 1);
expect(await contract.methods.tokenURI(nextTokenId).call()).to.be.equal('Test URI');
}
});
- itWeb3('Can perform mintBulk()', async ({ web3, api }) => {
+ itWeb3('Can perform mintBulk()', async ({web3, api}) => {
const collection = await createCollectionExpectSuccess({
- mode: { type: 'NFT' },
+ mode: {type: 'NFT'},
});
const alice = privateKey('//Alice');
@@ -129,8 +126,8 @@
const receiver = createEthAccount(web3);
const address = collectionIdToAddress(collection);
- const contract = await proxyWrap(api, web3, new web3.eth.Contract(nonFungibleAbi as any, address, { from: caller, ...GAS_ARGS }));
- const changeAdminTx = api.tx.nft.addCollectionAdmin(collection, { ethereum: contract.options.address });
+ const contract = await proxyWrap(api, web3, new web3.eth.Contract(nonFungibleAbi as any, address, {from: caller, ...GAS_ARGS}));
+ const changeAdminTx = api.tx.nft.addCollectionAdmin(collection, {Ethereum: contract.options.address});
await submitTransactionAsync(alice, changeAdminTx);
{
@@ -143,7 +140,7 @@
[+nextTokenId + 1, 'Test URI 1'],
[+nextTokenId + 2, 'Test URI 2'],
],
- ).send({ from: caller });
+ ).send({from: caller});
const events = normalizeEvents(result.events);
expect(events).to.be.deep.equal([
@@ -176,31 +173,30 @@
},
]);
- await waitNewBlocks(api, 1);
expect(await contract.methods.tokenURI(nextTokenId).call()).to.be.equal('Test URI 0');
expect(await contract.methods.tokenURI(+nextTokenId + 1).call()).to.be.equal('Test URI 1');
expect(await contract.methods.tokenURI(+nextTokenId + 2).call()).to.be.equal('Test URI 2');
}
});
- itWeb3('Can perform burn()', async ({ web3, api }) => {
+ itWeb3('Can perform burn()', async ({web3, api}) => {
const collection = await createCollectionExpectSuccess({
mode: {type: 'NFT'},
});
const alice = privateKey('//Alice');
const caller = await createEthAccountWithBalance(api, web3);
-
+
const address = collectionIdToAddress(collection);
const contract = await proxyWrap(api, web3, new web3.eth.Contract(nonFungibleAbi as any, address, {from: caller, ...GAS_ARGS}));
- const tokenId = await createItemExpectSuccess(alice, collection, 'NFT', { ethereum: contract.options.address });
+ const tokenId = await createItemExpectSuccess(alice, collection, 'NFT', {Ethereum: contract.options.address});
- const changeAdminTx = api.tx.nft.addCollectionAdmin(collection, { ethereum: contract.options.address });
+ const changeAdminTx = api.tx.nft.addCollectionAdmin(collection, {Ethereum: contract.options.address});
await submitTransactionAsync(alice, changeAdminTx);
{
- const result = await contract.methods.burn(tokenId).send({ from: caller });
+ const result = await contract.methods.burn(tokenId).send({from: caller});
const events = normalizeEvents(result.events);
-
+
expect(events).to.be.deep.equal([
{
address,
@@ -215,9 +211,9 @@
}
});
- itWeb3('Can perform approve()', async ({ web3, api }) => {
+ itWeb3('Can perform approve()', async ({web3, api}) => {
const collection = await createCollectionExpectSuccess({
- mode: { type: 'NFT' },
+ mode: {type: 'NFT'},
});
const alice = privateKey('//Alice');
const caller = await createEthAccountWithBalance(api, web3);
@@ -225,10 +221,10 @@
const address = collectionIdToAddress(collection);
const contract = await proxyWrap(api, web3, new web3.eth.Contract(nonFungibleAbi as any, address));
- const tokenId = await createItemExpectSuccess(alice, collection, 'NFT', { ethereum: contract.options.address });
+ const tokenId = await createItemExpectSuccess(alice, collection, 'NFT', {Ethereum: contract.options.address});
{
- const result = await contract.methods.approve(spender, tokenId).send({ from: caller, gas: '0x1000000', gasPrice: '0x01' });
+ const result = await contract.methods.approve(spender, tokenId).send({from: caller, gas: '0x1000000', gasPrice: '0x01'});
const events = normalizeEvents(result.events);
expect(events).to.be.deep.equal([
@@ -245,9 +241,9 @@
}
});
- itWeb3('Can perform transferFrom()', async ({ web3, api }) => {
+ itWeb3('Can perform transferFrom()', async ({web3, api}) => {
const collection = await createCollectionExpectSuccess({
- mode: { type: 'NFT' },
+ mode: {type: 'NFT'},
});
const alice = privateKey('//Alice');
const caller = await createEthAccountWithBalance(api, web3);
@@ -256,14 +252,14 @@
const receiver = createEthAccount(web3);
const address = collectionIdToAddress(collection);
- const evmCollection = new web3.eth.Contract(nonFungibleAbi as any, address, { from: caller, ...GAS_ARGS });
+ const evmCollection = new web3.eth.Contract(nonFungibleAbi as any, address, {from: caller, ...GAS_ARGS});
const contract = await proxyWrap(api, web3, evmCollection);
- const tokenId = await createItemExpectSuccess(alice, collection, 'NFT', { ethereum: owner });
+ const tokenId = await createItemExpectSuccess(alice, collection, 'NFT', {Ethereum: owner});
- await evmCollection.methods.approve(contract.options.address, tokenId).send({ from: owner });
+ await evmCollection.methods.approve(contract.options.address, tokenId).send({from: owner});
{
- const result = await contract.methods.transferFrom(owner, receiver, tokenId).send({ from: caller });
+ const result = await contract.methods.transferFrom(owner, receiver, tokenId).send({from: caller});
const events = normalizeEvents(result.events);
expect(events).to.be.deep.equal([
{
@@ -289,9 +285,9 @@
}
});
- itWeb3('Can perform transfer()', async ({ web3, api }) => {
+ itWeb3('Can perform transfer()', async ({web3, api}) => {
const collection = await createCollectionExpectSuccess({
- mode: { type: 'NFT' },
+ mode: {type: 'NFT'},
});
const alice = privateKey('//Alice');
const caller = await createEthAccountWithBalance(api, web3);
@@ -299,11 +295,10 @@
const address = collectionIdToAddress(collection);
const contract = await proxyWrap(api, web3, new web3.eth.Contract(nonFungibleAbi as any, address, {from: caller, ...GAS_ARGS}));
- const tokenId = await createItemExpectSuccess(alice, collection, 'NFT', { ethereum: contract.options.address });
+ const tokenId = await createItemExpectSuccess(alice, collection, 'NFT', {Ethereum: contract.options.address});
{
- const result = await contract.methods.transfer(receiver, tokenId).send({ from: caller });
- await waitNewBlocks(api, 1);
+ const result = await contract.methods.transfer(receiver, tokenId).send({from: caller});
const events = normalizeEvents(result.events);
expect(events).to.be.deep.equal([
{
@@ -329,35 +324,34 @@
}
});
- itWeb3('Can perform getVariableMetadata', async ({ web3, api }) => {
+ itWeb3('Can perform getVariableMetadata', async ({web3, api}) => {
const collection = await createCollectionExpectSuccess({
- mode: { type: 'NFT' },
+ mode: {type: 'NFT'},
});
const alice = privateKey('//Alice');
const caller = await createEthAccountWithBalance(api, web3);
const address = collectionIdToAddress(collection);
- const contract = await proxyWrap(api, web3, new web3.eth.Contract(nonFungibleAbi as any, address, { from: caller, ...GAS_ARGS }));
- const item = await createItemExpectSuccess(alice, collection, 'NFT', { ethereum: contract.options.address });
+ const contract = await proxyWrap(api, web3, new web3.eth.Contract(nonFungibleAbi as any, address, {from: caller, ...GAS_ARGS}));
+ const item = await createItemExpectSuccess(alice, collection, 'NFT', {Ethereum: contract.options.address});
await setMetadataUpdatePermissionFlagExpectSuccess(alice, collection, 'Admin');
await setVariableMetaDataExpectSuccess(alice, collection, item, [1, 2, 3]);
-
+
expect(await contract.methods.getVariableMetadata(item).call()).to.be.equal('0x010203');
});
- itWeb3('Can perform setVariableMetadata', async ({ web3, api }) => {
+ itWeb3('Can perform setVariableMetadata', async ({web3, api}) => {
const collection = await createCollectionExpectSuccess({
- mode: { type: 'NFT' },
+ mode: {type: 'NFT'},
});
const alice = privateKey('//Alice');
const caller = await createEthAccountWithBalance(api, web3);
const address = collectionIdToAddress(collection);
- const contract = await proxyWrap(api, web3, new web3.eth.Contract(nonFungibleAbi as any, address, { from: caller, ...GAS_ARGS }));
- const item = await createItemExpectSuccess(alice, collection, 'NFT', { ethereum: contract.options.address });
-
- expect(await contract.methods.setVariableMetadata(item, '0x010203').send({ from: caller }));
- await waitNewBlocks(api, 1);
+ const contract = await proxyWrap(api, web3, new web3.eth.Contract(nonFungibleAbi as any, address, {from: caller, ...GAS_ARGS}));
+ const item = await createItemExpectSuccess(alice, collection, 'NFT', {Ethereum: contract.options.address});
+
+ expect(await contract.methods.setVariableMetadata(item, '0x010203').send({from: caller}));
expect(await contract.methods.getVariableMetadata(item).call()).to.be.equal('0x010203');
});
});
tests/src/eth/sponsoring.test.tsdiffbeforeafterboth--- a/tests/src/eth/sponsoring.test.ts
+++ b/tests/src/eth/sponsoring.test.ts
@@ -1,88 +1,68 @@
-import { expect } from 'chai';
+import {expect} from 'chai';
import privateKey from '../substrate/privateKey';
-import waitNewBlocks from '../substrate/wait-new-blocks';
-import { contractHelpers, createEthAccount, createEthAccountWithBalance, deployCollector, deployFlipper, itWeb3, transferBalanceToEth, usingWeb3Http } from './util/helpers';
+import {contractHelpers, createEthAccount, createEthAccountWithBalance, deployCollector, deployFlipper, itWeb3, transferBalanceToEth} from './util/helpers';
describe('EVM sponsoring', () => {
itWeb3('Fee is deducted from contract if sponsoring is enabled', async ({api, web3}) => {
- await usingWeb3Http(async web3Http => {
- const alice = privateKey('//Alice');
+ const alice = privateKey('//Alice');
- const owner = await createEthAccountWithBalance(api, web3Http);
- const caller = createEthAccount(web3Http);
- const originalCallerBalance = await web3.eth.getBalance(caller);
- expect(originalCallerBalance).to.be.equal('0');
+ const owner = await createEthAccountWithBalance(api, web3);
+ const caller = createEthAccount(web3);
+ const originalCallerBalance = await web3.eth.getBalance(caller);
+ expect(originalCallerBalance).to.be.equal('0');
- const flipper = await deployFlipper(web3Http, owner);
- await waitNewBlocks(api, 1);
-
- const helpers = contractHelpers(web3Http, owner);
- await helpers.methods.toggleAllowlist(flipper.options.address, true).send({ from: owner });
- await waitNewBlocks(api, 1);
- await helpers.methods.toggleAllowed(flipper.options.address, caller, true).send({ from: owner });
- await waitNewBlocks(api, 1);
+ const flipper = await deployFlipper(web3, owner);
- expect(await helpers.methods.sponsoringEnabled(flipper.options.address).call()).to.be.false;
- await helpers.methods.toggleSponsoring(flipper.options.address, true).send({from: owner});
- await waitNewBlocks(api, 1);
- await helpers.methods.setSponsoringRateLimit(flipper.options.address, 0).send({from: owner});
- await waitNewBlocks(api, 1);
- expect(await helpers.methods.sponsoringEnabled(flipper.options.address).call()).to.be.true;
+ const helpers = contractHelpers(web3, owner);
+ await helpers.methods.toggleAllowlist(flipper.options.address, true).send({from: owner});
+ await helpers.methods.toggleAllowed(flipper.options.address, caller, true).send({from: owner});
+
+ expect(await helpers.methods.sponsoringEnabled(flipper.options.address).call()).to.be.false;
+ await helpers.methods.toggleSponsoring(flipper.options.address, true).send({from: owner});
+ await helpers.methods.setSponsoringRateLimit(flipper.options.address, 0).send({from: owner});
+ expect(await helpers.methods.sponsoringEnabled(flipper.options.address).call()).to.be.true;
- await transferBalanceToEth(api, alice, flipper.options.address);
- await waitNewBlocks(api, 2);
+ await transferBalanceToEth(api, alice, flipper.options.address);
- const originalFlipperBalance = await web3.eth.getBalance(flipper.options.address);
- expect(originalFlipperBalance).to.be.not.equal('0');
+ const originalFlipperBalance = await web3.eth.getBalance(flipper.options.address);
+ expect(originalFlipperBalance).to.be.not.equal('0');
- await flipper.methods.flip().send({ from: caller });
- await waitNewBlocks(api, 1);
- expect(await flipper.methods.getValue().call()).to.be.true;
+ await flipper.methods.flip().send({from: caller});
+ expect(await flipper.methods.getValue().call()).to.be.true;
- // Balance should be taken from flipper instead of caller
- expect(await web3.eth.getBalance(caller)).to.be.equals(originalCallerBalance);
- expect(await web3.eth.getBalance(flipper.options.address)).to.be.not.equals(originalFlipperBalance);
- });
+ // Balance should be taken from flipper instead of caller
+ expect(await web3.eth.getBalance(caller)).to.be.equals(originalCallerBalance);
+ expect(await web3.eth.getBalance(flipper.options.address)).to.be.not.equals(originalFlipperBalance);
});
itWeb3('...but this doesn\'t applies to payable value', async ({api, web3}) => {
- await usingWeb3Http(async web3Http => {
- const alice = privateKey('//Alice');
+ const alice = privateKey('//Alice');
- const owner = await createEthAccountWithBalance(api, web3Http);
- const caller = await createEthAccountWithBalance(api, web3Http);
- await waitNewBlocks(api, 1);
- const originalCallerBalance = await web3.eth.getBalance(caller);
- expect(originalCallerBalance).to.be.not.equal('0');
+ const owner = await createEthAccountWithBalance(api, web3);
+ const caller = await createEthAccountWithBalance(api, web3);
+ const originalCallerBalance = await web3.eth.getBalance(caller);
+ expect(originalCallerBalance).to.be.not.equal('0');
- const collector = await deployCollector(web3Http, owner);
- await waitNewBlocks(api, 1);
-
- const helpers = contractHelpers(web3Http, owner);
- await helpers.methods.toggleAllowlist(collector.options.address, true).send({ from: owner });
- await waitNewBlocks(api, 1);
- await helpers.methods.toggleAllowed(collector.options.address, caller, true).send({ from: owner });
- await waitNewBlocks(api, 1);
+ const collector = await deployCollector(web3, owner);
- expect(await helpers.methods.sponsoringEnabled(collector.options.address).call()).to.be.false;
- await helpers.methods.toggleSponsoring(collector.options.address, true).send({ from: owner });
- await waitNewBlocks(api, 1);
- await helpers.methods.setSponsoringRateLimit(collector.options.address, 0).send({ from: owner });
- await waitNewBlocks(api, 1);
- expect(await helpers.methods.sponsoringEnabled(collector.options.address).call()).to.be.true;
+ const helpers = contractHelpers(web3, owner);
+ await helpers.methods.toggleAllowlist(collector.options.address, true).send({from: owner});
+ await helpers.methods.toggleAllowed(collector.options.address, caller, true).send({from: owner});
+
+ expect(await helpers.methods.sponsoringEnabled(collector.options.address).call()).to.be.false;
+ await helpers.methods.toggleSponsoring(collector.options.address, true).send({from: owner});
+ await helpers.methods.setSponsoringRateLimit(collector.options.address, 0).send({from: owner});
+ expect(await helpers.methods.sponsoringEnabled(collector.options.address).call()).to.be.true;
- await transferBalanceToEth(api, alice, collector.options.address);
- await waitNewBlocks(api, 2);
+ await transferBalanceToEth(api, alice, collector.options.address);
- const originalCollectorBalance = await web3.eth.getBalance(collector.options.address);
- expect(originalCollectorBalance).to.be.not.equal('0');
+ const originalCollectorBalance = await web3.eth.getBalance(collector.options.address);
+ expect(originalCollectorBalance).to.be.not.equal('0');
- await collector.methods.giveMoney().send({ from: caller, value: '10000' });
- await waitNewBlocks(api, 1);
+ await collector.methods.giveMoney().send({from: caller, value: '10000'});
- // Balance will be taken from both caller (value) and from collector (fee)
- expect(await web3.eth.getBalance(caller)).to.be.equals((BigInt(originalCallerBalance) - 10000n).toString());
- expect(await web3.eth.getBalance(collector.options.address)).to.be.not.equals(originalCollectorBalance);
- expect(await collector.methods.getCollected().call()).to.be.equal('10000');
- });
+ // Balance will be taken from both caller (value) and from collector (fee)
+ expect(await web3.eth.getBalance(caller)).to.be.equals((BigInt(originalCallerBalance) - 10000n).toString());
+ expect(await web3.eth.getBalance(collector.options.address)).to.be.not.equals(originalCollectorBalance);
+ expect(await collector.methods.getCollected().call()).to.be.equal('10000');
});
-});
\ No newline at end of file
+});
tests/src/eth/util/helpers.tsdiffbeforeafterboth--- a/tests/src/eth/util/helpers.ts
+++ b/tests/src/eth/util/helpers.ts
@@ -6,21 +6,20 @@
// eslint-disable-next-line @typescript-eslint/triple-slash-reference
/// <reference path="helpers.d.ts" />
-import { ApiPromise } from '@polkadot/api';
-import { addressToEvm, evmToAddress } from '@polkadot/util-crypto';
+import {ApiPromise} from '@polkadot/api';
+import {addressToEvm, evmToAddress} from '@polkadot/util-crypto';
import Web3 from 'web3';
-import usingApi, { submitTransactionAsync } from '../../substrate/substrate-api';
-import { IKeyringPair } from '@polkadot/types/types';
-import { expect } from 'chai';
-import { getGenericResult } from '../../util/helpers';
+import usingApi, {submitTransactionAsync} from '../../substrate/substrate-api';
+import {IKeyringPair} from '@polkadot/types/types';
+import {expect} from 'chai';
+import {getGenericResult} from '../../util/helpers';
import * as solc from 'solc';
import config from '../../config';
import privateKey from '../../substrate/privateKey';
import contractHelpersAbi from './contractHelpersAbi.json';
import getBalance from '../../substrate/get-balance';
-import waitNewBlocks from '../../substrate/wait-new-blocks';
-export const GAS_ARGS = { gas: 0x1000000, gasPrice: '0x01' };
+export const GAS_ARGS = {gas: 0x1000000, gasPrice: '0x01'};
let web3Connected = false;
export async function usingWeb3<T>(cb: (web3: Web3) => Promise<T> | T): Promise<T> {
@@ -37,16 +36,6 @@
provider.connection.close();
web3Connected = false;
}
-}
-
-/**
- * @deprecated Web3 update solved issue with deployment over ws provider
- */
-export async function usingWeb3Http<T>(cb: (web3: Web3) => Promise<T> | T): Promise<T> {
- const provider = new Web3.providers.HttpProvider(config.frontierUrl);
- const web3: Web3 = new Web3(provider);
-
- return await cb(web3);
}
export function collectionIdToAddress(address: number): string {
@@ -88,13 +77,13 @@
i(name, async () => {
await usingApi(async api => {
await usingWeb3(async web3 => {
- await cb({ api, web3 });
+ await cb({api, web3});
});
});
});
}
-itWeb3.only = (name: string, cb: (apis: { web3: Web3, api: ApiPromise }) => any) => itWeb3(name, cb, { only: true });
-itWeb3.skip = (name: string, cb: (apis: { web3: Web3, api: ApiPromise }) => any) => itWeb3(name, cb, { skip: true });
+itWeb3.only = (name: string, cb: (apis: { web3: Web3, api: ApiPromise }) => any) => itWeb3(name, cb, {only: true});
+itWeb3.skip = (name: string, cb: (apis: { web3: Web3, api: ApiPromise }) => any) => itWeb3(name, cb, {skip: true});
export async function generateSubstrateEthPair(web3: Web3) {
const account = web3.eth.accounts.create();
@@ -119,7 +108,7 @@
}
}
output.sort((a, b) => a.logIndex - b.logIndex);
- return output.map(({ address, event, returnValues }) => {
+ return output.map(({address, event, returnValues}) => {
const args: { [key: string]: string } = {};
for (const key of Object.keys(returnValues)) {
if (!key.match(/^[0-9]+$/)) {
@@ -192,12 +181,12 @@
}
}
`);
- const Flipper = new web3.eth.Contract(compiled.abi, undefined, {
+ const flipperContract = new web3.eth.Contract(compiled.abi, undefined, {
data: compiled.object,
from: deployer,
...GAS_ARGS,
});
- const flipper = await Flipper.deploy({ data: compiled.object }).send({from: deployer});
+ const flipper = await flipperContract.deploy({data: compiled.object}).send({from: deployer});
return flipper;
}
@@ -225,12 +214,12 @@
}
}
`);
- const Collector = new web3.eth.Contract(compiled.abi, undefined, {
+ const collectorContract = new web3.eth.Contract(compiled.abi, undefined, {
data: compiled.object,
from: deployer,
...GAS_ARGS,
});
- const collector = await Collector.deploy({ data: compiled.object }).send({ from: deployer });
+ const collector = await collectorContract.deploy({data: compiled.object}).send({from: deployer});
return collector;
}
@@ -239,7 +228,7 @@
return new web3.eth.Contract(contractHelpersAbi as any, '0x842899ECF380553E8a4de75bF534cdf6fBF64049', {from: caller, ...GAS_ARGS});
}
-export async function executeEthTxOnSub(api: ApiPromise, from: IKeyringPair, to: any, mkTx: (methods: any) => any, { value = 0 }: {value?: bigint | number} = { }) {
+export async function executeEthTxOnSub(api: ApiPromise, from: IKeyringPair, to: any, mkTx: (methods: any) => any, {value = 0}: {value?: bigint | number} = { }) {
const tx = api.tx.evm.call(
subToEth(from.address),
to.options.address,
@@ -250,7 +239,7 @@
null,
);
const events = await submitTransactionAsync(from, tx);
- expect(events.find(({ event: {section, method}})=>section === 'evm' && method === 'Executed')).to.be.not.undefined;
+ expect(events.some(({event: {section, method}}) => section == 'evm' && method == 'Executed')).to.be.true;
}
export async function ethBalanceViaSub(api: ApiPromise, address: string): Promise<bigint> {
@@ -261,7 +250,6 @@
const before = await ethBalanceViaSub(api, user);
await call();
- await waitNewBlocks(api, 1);
const after = await ethBalanceViaSub(api, user);
tests/src/inflation.test.tsdiffbeforeafterboth--- a/tests/src/inflation.test.ts
+++ b/tests/src/inflation.test.ts
@@ -5,8 +5,7 @@
import chai from 'chai';
import chaiAsPromised from 'chai-as-promised';
-import { default as usingApi } from './substrate/substrate-api';
-import { BigNumber } from 'bignumber.js';
+import {default as usingApi} from './substrate/substrate-api';
chai.use(chaiAsPromised);
const expect = chai.expect;
@@ -15,16 +14,20 @@
it('First year inflation is 10%', async () => {
await usingApi(async (api) => {
- const blockInterval = parseInt((await api.consts.inflation.inflationBlockInterval).toString());
- const totalIssuanceStart = new BigNumber((await api.query.inflation.startingYearTotalIssuance()).toString());
- const blockInflation = new BigNumber((await api.query.inflation.blockInflation()).toString());
+ const blockInterval = (api.consts.inflation.inflationBlockInterval).toBigInt();
+ const totalIssuanceStart = (await api.query.inflation.startingYearTotalIssuance()).toBigInt();
+ const blockInflation = (await api.query.inflation.blockInflation()).toBigInt();
- const YEAR = 5259600; // Blocks in one year
- const totalExpectedInflation = totalIssuanceStart.multipliedBy(0.1);
- const totalActualInflation = blockInflation.multipliedBy(YEAR / blockInterval);
+ const YEAR = 5259600n; // Blocks in one year
+ const totalExpectedInflation = totalIssuanceStart / 10n;
+ const totalActualInflation = blockInflation * YEAR / blockInterval;
const tolerance = 0.00001; // Relative difference per year between theoretical and actual inflation
- expect(totalExpectedInflation.dividedBy(totalActualInflation).minus(1).abs().toNumber()).to.be.lessThan(tolerance);
+ let abs = totalExpectedInflation / totalActualInflation - 1n;
+ if (abs < 0n) {
+ abs = -abs;
+ }
+ expect(abs <= tolerance).to.be.true;
});
});
tests/src/interfaces/augment-api-consts.tsdiffbeforeafterboth--- /dev/null
+++ b/tests/src/interfaces/augment-api-consts.ts
@@ -0,0 +1,177 @@
+// Auto-generated via `yarn polkadot-types-from-chain`, do not edit
+/* eslint-disable */
+
+import type { ApiTypes } from '@polkadot/api/types';
+import type { Vec, u128, u16, u32, u64, u8 } from '@polkadot/types';
+import type { Permill } from '@polkadot/types/interfaces/runtime';
+import type { FrameSupportPalletId, FrameSupportWeightsRuntimeDbWeight, FrameSupportWeightsWeightToFeeCoefficient, FrameSystemLimitsBlockLength, FrameSystemLimitsBlockWeights, SpVersionRuntimeVersion } from '@polkadot/types/lookup';
+import type { Codec } from '@polkadot/types/types';
+
+declare module '@polkadot/api/types/consts' {
+ export interface AugmentedConsts<ApiType> {
+ balances: {
+ /**
+ * The minimum amount required to keep an account open.
+ **/
+ existentialDeposit: u128 & AugmentedConst<ApiType>;
+ /**
+ * The maximum number of locks that should exist on an account.
+ * Not strictly enforced, but used for weight estimation.
+ **/
+ maxLocks: u32 & AugmentedConst<ApiType>;
+ /**
+ * The maximum number of named reserves that can exist on an account.
+ **/
+ maxReserves: u32 & AugmentedConst<ApiType>;
+ /**
+ * Generic const
+ **/
+ [key: string]: Codec;
+ };
+ common: {
+ collectionAdminsLimit: u32 & AugmentedConst<ApiType>;
+ /**
+ * Generic const
+ **/
+ [key: string]: Codec;
+ };
+ inflation: {
+ inflationBlockInterval: u32 & AugmentedConst<ApiType>;
+ /**
+ * Generic const
+ **/
+ [key: string]: Codec;
+ };
+ system: {
+ /**
+ * Maximum number of block number to block hash mappings to keep (oldest pruned first).
+ **/
+ blockHashCount: u32 & AugmentedConst<ApiType>;
+ /**
+ * The maximum length of a block (in bytes).
+ **/
+ blockLength: FrameSystemLimitsBlockLength & AugmentedConst<ApiType>;
+ /**
+ * Block & extrinsics weights: base values and limits.
+ **/
+ blockWeights: FrameSystemLimitsBlockWeights & AugmentedConst<ApiType>;
+ /**
+ * The weight of runtime database operations the runtime can invoke.
+ **/
+ dbWeight: FrameSupportWeightsRuntimeDbWeight & AugmentedConst<ApiType>;
+ /**
+ * The designated SS85 prefix of this chain.
+ *
+ * This replaces the "ss58Format" property declared in the chain spec. Reason is
+ * that the runtime should know about the prefix in order to make use of it as
+ * an identifier of the chain.
+ **/
+ ss58Prefix: u16 & AugmentedConst<ApiType>;
+ /**
+ * Get the chain's current version.
+ **/
+ version: SpVersionRuntimeVersion & AugmentedConst<ApiType>;
+ /**
+ * Generic const
+ **/
+ [key: string]: Codec;
+ };
+ timestamp: {
+ /**
+ * The minimum period between blocks. Beware that this is different to the *expected*
+ * period that the block production apparatus provides. Your chosen consensus system will
+ * generally work with this to determine a sensible block time. e.g. For Aura, it will be
+ * double this period on default settings.
+ **/
+ minimumPeriod: u64 & AugmentedConst<ApiType>;
+ /**
+ * Generic const
+ **/
+ [key: string]: Codec;
+ };
+ transactionPayment: {
+ /**
+ * A fee mulitplier for `Operational` extrinsics to compute "virtual tip" to boost their
+ * `priority`
+ *
+ * This value is multipled by the `final_fee` to obtain a "virtual tip" that is later
+ * added to a tip component in regular `priority` calculations.
+ * It means that a `Normal` transaction can front-run a similarly-sized `Operational`
+ * extrinsic (with no tip), by including a tip value greater than the virtual tip.
+ *
+ * ```rust,ignore
+ * // For `Normal`
+ * let priority = priority_calc(tip);
+ *
+ * // For `Operational`
+ * let virtual_tip = (inclusion_fee + tip) * OperationalFeeMultiplier;
+ * let priority = priority_calc(tip + virtual_tip);
+ * ```
+ *
+ * Note that since we use `final_fee` the multiplier applies also to the regular `tip`
+ * sent with the transaction. So, not only does the transaction get a priority bump based
+ * on the `inclusion_fee`, but we also amplify the impact of tips applied to `Operational`
+ * transactions.
+ **/
+ operationalFeeMultiplier: u8 & AugmentedConst<ApiType>;
+ /**
+ * The fee to be paid for making a transaction; the per-byte portion.
+ **/
+ transactionByteFee: u128 & AugmentedConst<ApiType>;
+ /**
+ * The polynomial that is applied in order to derive fee from weight.
+ **/
+ weightToFee: Vec<FrameSupportWeightsWeightToFeeCoefficient> & AugmentedConst<ApiType>;
+ /**
+ * Generic const
+ **/
+ [key: string]: Codec;
+ };
+ treasury: {
+ /**
+ * Percentage of spare funds (if any) that are burnt per spend period.
+ **/
+ burn: Permill & AugmentedConst<ApiType>;
+ /**
+ * The maximum number of approvals that can wait in the spending queue.
+ **/
+ maxApprovals: u32 & AugmentedConst<ApiType>;
+ /**
+ * The treasury's pallet id, used for deriving its sovereign account ID.
+ **/
+ palletId: FrameSupportPalletId & AugmentedConst<ApiType>;
+ /**
+ * Fraction of a proposal's value that should be bonded in order to place the proposal.
+ * An accepted proposal gets these back. A rejected proposal does not.
+ **/
+ proposalBond: Permill & AugmentedConst<ApiType>;
+ /**
+ * Minimum amount of funds that should be placed in a deposit for making a proposal.
+ **/
+ proposalBondMinimum: u128 & AugmentedConst<ApiType>;
+ /**
+ * Period between successive spends.
+ **/
+ spendPeriod: u32 & AugmentedConst<ApiType>;
+ /**
+ * Generic const
+ **/
+ [key: string]: Codec;
+ };
+ vesting: {
+ maxVestingSchedules: u32 & AugmentedConst<ApiType>;
+ /**
+ * The minimum amount transferred to call `vested_transfer`.
+ **/
+ minVestedTransfer: u128 & AugmentedConst<ApiType>;
+ /**
+ * Generic const
+ **/
+ [key: string]: Codec;
+ };
+ }
+
+ export interface QueryableConsts<ApiType extends ApiTypes> extends AugmentedConsts<ApiType> {
+ [key: string]: QueryableModuleConsts;
+ }
+}
tests/src/interfaces/augment-api-errors.tsdiffbeforeafterboth--- /dev/null
+++ b/tests/src/interfaces/augment-api-errors.ts
@@ -0,0 +1,528 @@
+// Auto-generated via `yarn polkadot-types-from-chain`, do not edit
+/* eslint-disable */
+
+import type { ApiTypes } from '@polkadot/api/types';
+
+declare module '@polkadot/api/types/errors' {
+ export interface AugmentedErrors<ApiType> {
+ balances: {
+ /**
+ * Beneficiary account must pre-exist
+ **/
+ DeadAccount: AugmentedError<ApiType>;
+ /**
+ * Value too low to create account due to existential deposit
+ **/
+ ExistentialDeposit: AugmentedError<ApiType>;
+ /**
+ * A vesting schedule already exists for this account
+ **/
+ ExistingVestingSchedule: AugmentedError<ApiType>;
+ /**
+ * Balance too low to send value
+ **/
+ InsufficientBalance: AugmentedError<ApiType>;
+ /**
+ * Transfer/payment would kill account
+ **/
+ KeepAlive: AugmentedError<ApiType>;
+ /**
+ * Account liquidity restrictions prevent withdrawal
+ **/
+ LiquidityRestrictions: AugmentedError<ApiType>;
+ /**
+ * Number of named reserves exceed MaxReserves
+ **/
+ TooManyReserves: AugmentedError<ApiType>;
+ /**
+ * Vesting balance too high to send value
+ **/
+ VestingBalance: AugmentedError<ApiType>;
+ /**
+ * Generic error
+ **/
+ [key: string]: AugmentedError<ApiType>;
+ };
+ common: {
+ /**
+ * Account token limit exceeded per collection
+ **/
+ AccountTokenLimitExceeded: AugmentedError<ApiType>;
+ /**
+ * Can't transfer tokens to ethereum zero address
+ **/
+ AddressIsZero: AugmentedError<ApiType>;
+ /**
+ * Address is not in white list.
+ **/
+ AddressNotInAllowlist: AugmentedError<ApiType>;
+ /**
+ * Tried to approve more than owned
+ **/
+ CantApproveMoreThanOwned: AugmentedError<ApiType>;
+ /**
+ * Exceeded max admin amount
+ **/
+ CollectionAdminAmountExceeded: AugmentedError<ApiType>;
+ /**
+ * Collection description can not be longer than 255 char.
+ **/
+ CollectionDescriptionLimitExceeded: AugmentedError<ApiType>;
+ /**
+ * Collection name can not be longer than 63 char.
+ **/
+ CollectionNameLimitExceeded: AugmentedError<ApiType>;
+ /**
+ * This collection does not exist.
+ **/
+ CollectionNotFound: AugmentedError<ApiType>;
+ /**
+ * Collection token limit exceeded
+ **/
+ CollectionTokenLimitExceeded: AugmentedError<ApiType>;
+ /**
+ * Token prefix can not be longer than 15 char.
+ **/
+ CollectionTokenPrefixLimitExceeded: AugmentedError<ApiType>;
+ /**
+ * Metadata flag frozen
+ **/
+ MetadataFlagFrozen: AugmentedError<ApiType>;
+ /**
+ * Sender parameter and item owner must be equal.
+ **/
+ MustBeTokenOwner: AugmentedError<ApiType>;
+ /**
+ * No permission to perform action
+ **/
+ NoPermission: AugmentedError<ApiType>;
+ /**
+ * Collection is not in mint mode.
+ **/
+ PublicMintingNotAllowed: AugmentedError<ApiType>;
+ /**
+ * Item not exists.
+ **/
+ TokenNotFound: AugmentedError<ApiType>;
+ /**
+ * Requested value more than approved.
+ **/
+ TokenValueNotEnough: AugmentedError<ApiType>;
+ /**
+ * Item balance not enough.
+ **/
+ TokenValueTooLow: AugmentedError<ApiType>;
+ /**
+ * variable_data exceeded data limit.
+ **/
+ TokenVariableDataLimitExceeded: AugmentedError<ApiType>;
+ /**
+ * Total collections bound exceeded.
+ **/
+ TotalCollectionsLimitExceeded: AugmentedError<ApiType>;
+ /**
+ * Collection settings not allowing items transferring
+ **/
+ TransferNotAllowed: AugmentedError<ApiType>;
+ /**
+ * Target collection doesn't supports this operation
+ **/
+ UnsupportedOperation: AugmentedError<ApiType>;
+ /**
+ * Generic error
+ **/
+ [key: string]: AugmentedError<ApiType>;
+ };
+ cumulusXcm: {
+ /**
+ * Generic error
+ **/
+ [key: string]: AugmentedError<ApiType>;
+ };
+ dmpQueue: {
+ /**
+ * The amount of weight given is possibly not enough for executing the message.
+ **/
+ OverLimit: AugmentedError<ApiType>;
+ /**
+ * The message index given is unknown.
+ **/
+ Unknown: AugmentedError<ApiType>;
+ /**
+ * Generic error
+ **/
+ [key: string]: AugmentedError<ApiType>;
+ };
+ ethereum: {
+ /**
+ * Signature is invalid.
+ **/
+ InvalidSignature: AugmentedError<ApiType>;
+ /**
+ * Pre-log is present, therefore transact is not allowed.
+ **/
+ PreLogExists: AugmentedError<ApiType>;
+ /**
+ * Generic error
+ **/
+ [key: string]: AugmentedError<ApiType>;
+ };
+ evm: {
+ /**
+ * Not enough balance to perform action
+ **/
+ BalanceLow: AugmentedError<ApiType>;
+ /**
+ * Calculating total fee overflowed
+ **/
+ FeeOverflow: AugmentedError<ApiType>;
+ /**
+ * Gas price is too low.
+ **/
+ GasPriceTooLow: AugmentedError<ApiType>;
+ /**
+ * Nonce is invalid
+ **/
+ InvalidNonce: AugmentedError<ApiType>;
+ /**
+ * Calculating total payment overflowed
+ **/
+ PaymentOverflow: AugmentedError<ApiType>;
+ /**
+ * Withdraw fee failed
+ **/
+ WithdrawFailed: AugmentedError<ApiType>;
+ /**
+ * Generic error
+ **/
+ [key: string]: AugmentedError<ApiType>;
+ };
+ evmCoderSubstrate: {
+ OutOfFund: AugmentedError<ApiType>;
+ OutOfGas: AugmentedError<ApiType>;
+ /**
+ * Generic error
+ **/
+ [key: string]: AugmentedError<ApiType>;
+ };
+ evmContractHelpers: {
+ /**
+ * This method is only executable by owner
+ **/
+ NoPermission: AugmentedError<ApiType>;
+ /**
+ * Generic error
+ **/
+ [key: string]: AugmentedError<ApiType>;
+ };
+ evmMigration: {
+ AccountIsNotMigrating: AugmentedError<ApiType>;
+ AccountNotEmpty: AugmentedError<ApiType>;
+ /**
+ * Generic error
+ **/
+ [key: string]: AugmentedError<ApiType>;
+ };
+ fungible: {
+ /**
+ * Tried to set data for fungible item
+ **/
+ FungibleItemsHaveData: AugmentedError<ApiType>;
+ /**
+ * Not default id passed as TokenId argument
+ **/
+ FungibleItemsHaveNoId: AugmentedError<ApiType>;
+ /**
+ * Not Fungible item data used to mint in Fungible collection.
+ **/
+ NotFungibleDataUsedToMintFungibleCollectionToken: AugmentedError<ApiType>;
+ /**
+ * Generic error
+ **/
+ [key: string]: AugmentedError<ApiType>;
+ };
+ nft: {
+ /**
+ * Decimal_points parameter must be lower than MAX_DECIMAL_POINTS constant, currently it is 30.
+ **/
+ CollectionDecimalPointLimitExceeded: AugmentedError<ApiType>;
+ /**
+ * Collection limit bounds per collection exceeded
+ **/
+ CollectionLimitBoundsExceeded: AugmentedError<ApiType>;
+ /**
+ * This address is not set as sponsor, use setCollectionSponsor first.
+ **/
+ ConfirmUnsetSponsorFail: AugmentedError<ApiType>;
+ /**
+ * Length of items properties must be greater than 0.
+ **/
+ EmptyArgument: AugmentedError<ApiType>;
+ /**
+ * Tried to enable permissions which are only permitted to be disabled
+ **/
+ OwnerPermissionsCantBeReverted: AugmentedError<ApiType>;
+ /**
+ * Generic error
+ **/
+ [key: string]: AugmentedError<ApiType>;
+ };
+ nonfungible: {
+ /**
+ * Used amount > 1 with NFT
+ **/
+ NonfungibleItemsHaveNoAmount: AugmentedError<ApiType>;
+ /**
+ * Not Nonfungible item data used to mint in Nonfungible collection.
+ **/
+ NotNonfungibleDataUsedToMintFungibleCollectionToken: AugmentedError<ApiType>;
+ /**
+ * Generic error
+ **/
+ [key: string]: AugmentedError<ApiType>;
+ };
+ parachainSystem: {
+ /**
+ * The inherent which supplies the host configuration did not run this block
+ **/
+ HostConfigurationNotAvailable: AugmentedError<ApiType>;
+ /**
+ * No code upgrade has been authorized.
+ **/
+ NothingAuthorized: AugmentedError<ApiType>;
+ /**
+ * No validation function upgrade is currently scheduled.
+ **/
+ NotScheduled: AugmentedError<ApiType>;
+ /**
+ * Attempt to upgrade validation function while existing upgrade pending
+ **/
+ OverlappingUpgrades: AugmentedError<ApiType>;
+ /**
+ * Polkadot currently prohibits this parachain from upgrading its validation function
+ **/
+ ProhibitedByPolkadot: AugmentedError<ApiType>;
+ /**
+ * The supplied validation function has compiled into a blob larger than Polkadot is
+ * willing to run
+ **/
+ TooBig: AugmentedError<ApiType>;
+ /**
+ * The given code upgrade has not been authorized.
+ **/
+ Unauthorized: AugmentedError<ApiType>;
+ /**
+ * The inherent which supplies the validation data did not run this block
+ **/
+ ValidationDataNotAvailable: AugmentedError<ApiType>;
+ /**
+ * Generic error
+ **/
+ [key: string]: AugmentedError<ApiType>;
+ };
+ polkadotXcm: {
+ /**
+ * The location is invalid since it already has a subscription from us.
+ **/
+ AlreadySubscribed: AugmentedError<ApiType>;
+ /**
+ * The given location could not be used (e.g. because it cannot be expressed in the
+ * desired version of XCM).
+ **/
+ BadLocation: AugmentedError<ApiType>;
+ /**
+ * The version of the `Versioned` value used is not able to be interpreted.
+ **/
+ BadVersion: AugmentedError<ApiType>;
+ /**
+ * Could not re-anchor the assets to declare the fees for the destination chain.
+ **/
+ CannotReanchor: AugmentedError<ApiType>;
+ /**
+ * The destination `MultiLocation` provided cannot be inverted.
+ **/
+ DestinationNotInvertible: AugmentedError<ApiType>;
+ /**
+ * The assets to be sent are empty.
+ **/
+ Empty: AugmentedError<ApiType>;
+ /**
+ * The message execution fails the filter.
+ **/
+ Filtered: AugmentedError<ApiType>;
+ /**
+ * Origin is invalid for sending.
+ **/
+ InvalidOrigin: AugmentedError<ApiType>;
+ /**
+ * The referenced subscription could not be found.
+ **/
+ NoSubscription: AugmentedError<ApiType>;
+ /**
+ * There was some other issue (i.e. not to do with routing) in sending the message. Perhaps
+ * a lack of space for buffering the message.
+ **/
+ SendFailure: AugmentedError<ApiType>;
+ /**
+ * Too many assets have been attempted for transfer.
+ **/
+ TooManyAssets: AugmentedError<ApiType>;
+ /**
+ * The desired destination was unreachable, generally because there is a no way of routing
+ * to it.
+ **/
+ Unreachable: AugmentedError<ApiType>;
+ /**
+ * The message's weight could not be determined.
+ **/
+ UnweighableMessage: AugmentedError<ApiType>;
+ /**
+ * Generic error
+ **/
+ [key: string]: AugmentedError<ApiType>;
+ };
+ refungible: {
+ /**
+ * Not Refungible item data used to mint in Refungible collection.
+ **/
+ NotRefungibleDataUsedToMintFungibleCollectionToken: AugmentedError<ApiType>;
+ /**
+ * Maximum refungibility exceeded
+ **/
+ WrongRefungiblePieces: AugmentedError<ApiType>;
+ /**
+ * Generic error
+ **/
+ [key: string]: AugmentedError<ApiType>;
+ };
+ scheduler: {
+ /**
+ * Failed to schedule a call
+ **/
+ FailedToSchedule: AugmentedError<ApiType>;
+ /**
+ * Cannot find the scheduled call.
+ **/
+ NotFound: AugmentedError<ApiType>;
+ /**
+ * Reschedule failed because it does not change scheduled time.
+ **/
+ RescheduleNoChange: AugmentedError<ApiType>;
+ /**
+ * Given target block number is in the past.
+ **/
+ TargetBlockNumberInPast: AugmentedError<ApiType>;
+ /**
+ * Generic error
+ **/
+ [key: string]: AugmentedError<ApiType>;
+ };
+ sudo: {
+ /**
+ * Sender must be the Sudo account
+ **/
+ RequireSudo: AugmentedError<ApiType>;
+ /**
+ * Generic error
+ **/
+ [key: string]: AugmentedError<ApiType>;
+ };
+ system: {
+ /**
+ * Failed to extract the runtime version from the new runtime.
+ *
+ * Either calling `Core_version` or decoding `RuntimeVersion` failed.
+ **/
+ FailedToExtractRuntimeVersion: AugmentedError<ApiType>;
+ /**
+ * The name of specification does not match between the current runtime
+ * and the new runtime.
+ **/
+ InvalidSpecName: AugmentedError<ApiType>;
+ /**
+ * Suicide called when the account has non-default composite data.
+ **/
+ NonDefaultComposite: AugmentedError<ApiType>;
+ /**
+ * There is a non-zero reference count preventing the account from being purged.
+ **/
+ NonZeroRefCount: AugmentedError<ApiType>;
+ /**
+ * The specification version is not allowed to decrease between the current runtime
+ * and the new runtime.
+ **/
+ SpecVersionNeedsToIncrease: AugmentedError<ApiType>;
+ /**
+ * Generic error
+ **/
+ [key: string]: AugmentedError<ApiType>;
+ };
+ treasury: {
+ /**
+ * Proposer's balance is too low.
+ **/
+ InsufficientProposersBalance: AugmentedError<ApiType>;
+ /**
+ * No proposal or bounty at that index.
+ **/
+ InvalidIndex: AugmentedError<ApiType>;
+ /**
+ * Too many approvals in the queue.
+ **/
+ TooManyApprovals: AugmentedError<ApiType>;
+ /**
+ * Generic error
+ **/
+ [key: string]: AugmentedError<ApiType>;
+ };
+ vesting: {
+ /**
+ * Amount being transferred is too low to create a vesting schedule.
+ **/
+ AmountLow: AugmentedError<ApiType>;
+ /**
+ * The account already has `MaxVestingSchedules` count of schedules and thus
+ * cannot add another one. Consider merging existing schedules in order to add another.
+ **/
+ AtMaxVestingSchedules: AugmentedError<ApiType>;
+ /**
+ * Failed to create a new schedule because some parameter was invalid.
+ **/
+ InvalidScheduleParams: AugmentedError<ApiType>;
+ /**
+ * The account given is not vesting.
+ **/
+ NotVesting: AugmentedError<ApiType>;
+ /**
+ * An index was out of bounds of the vesting schedules.
+ **/
+ ScheduleIndexOutOfBounds: AugmentedError<ApiType>;
+ /**
+ * Generic error
+ **/
+ [key: string]: AugmentedError<ApiType>;
+ };
+ xcmpQueue: {
+ /**
+ * Bad XCM data.
+ **/
+ BadXcm: AugmentedError<ApiType>;
+ /**
+ * Bad XCM origin.
+ **/
+ BadXcmOrigin: AugmentedError<ApiType>;
+ /**
+ * Failed to send XCM message.
+ **/
+ FailedToSend: AugmentedError<ApiType>;
+ /**
+ * Generic error
+ **/
+ [key: string]: AugmentedError<ApiType>;
+ };
+ }
+
+ export interface DecoratedErrors<ApiType extends ApiTypes> extends AugmentedErrors<ApiType> {
+ [key: string]: ModuleErrors<ApiType>;
+ }
+}
tests/src/interfaces/augment-api-events.tsdiffbeforeafterboth--- /dev/null
+++ b/tests/src/interfaces/augment-api-events.ts
@@ -0,0 +1,544 @@
+// Auto-generated via `yarn polkadot-types-from-chain`, do not edit
+/* eslint-disable */
+
+import type { EthereumLog, EvmCoreErrorExitReason } from './ethereum';
+import type { PalletCommonAccountBasicCrossAccountIdRepr } from './nft';
+import type { ApiTypes } from '@polkadot/api/types';
+import type { Bytes, Null, Option, Result, U256, U8aFixed, u128, u32, u64, u8 } from '@polkadot/types';
+import type { AccountId32, H160, H256 } from '@polkadot/types/interfaces/runtime';
+import type { FrameSupportTokensMiscBalanceStatus, FrameSupportWeightsDispatchInfo, SpRuntimeDispatchError, XcmV1MultiLocation, XcmV2Response, XcmV2TraitsError, XcmV2TraitsOutcome, XcmV2Xcm, XcmVersionedMultiAssets, XcmVersionedMultiLocation } from '@polkadot/types/lookup';
+import type { ITuple } from '@polkadot/types/types';
+
+declare module '@polkadot/api/types/events' {
+ export interface AugmentedEvents<ApiType> {
+ balances: {
+ /**
+ * A balance was set by root. \[who, free, reserved\]
+ **/
+ BalanceSet: AugmentedEvent<ApiType, [AccountId32, u128, u128]>;
+ /**
+ * Some amount was deposited into the account (e.g. for transaction fees). \[who,
+ * deposit\]
+ **/
+ Deposit: AugmentedEvent<ApiType, [AccountId32, u128]>;
+ /**
+ * An account was removed whose balance was non-zero but below ExistentialDeposit,
+ * resulting in an outright loss. \[account, balance\]
+ **/
+ DustLost: AugmentedEvent<ApiType, [AccountId32, u128]>;
+ /**
+ * An account was created with some free balance. \[account, free_balance\]
+ **/
+ Endowed: AugmentedEvent<ApiType, [AccountId32, u128]>;
+ /**
+ * Some balance was reserved (moved from free to reserved). \[who, value\]
+ **/
+ Reserved: AugmentedEvent<ApiType, [AccountId32, u128]>;
+ /**
+ * Some balance was moved from the reserve of the first account to the second account.
+ * Final argument indicates the destination balance type.
+ * \[from, to, balance, destination_status\]
+ **/
+ ReserveRepatriated: AugmentedEvent<ApiType, [AccountId32, AccountId32, u128, FrameSupportTokensMiscBalanceStatus]>;
+ /**
+ * Some amount was removed from the account (e.g. for misbehavior). \[who,
+ * amount_slashed\]
+ **/
+ Slashed: AugmentedEvent<ApiType, [AccountId32, u128]>;
+ /**
+ * Transfer succeeded. \[from, to, value\]
+ **/
+ Transfer: AugmentedEvent<ApiType, [AccountId32, AccountId32, u128]>;
+ /**
+ * Some balance was unreserved (moved from reserved to free). \[who, value\]
+ **/
+ Unreserved: AugmentedEvent<ApiType, [AccountId32, u128]>;
+ /**
+ * Some amount was withdrawn from the account (e.g. for transaction fees). \[who, value\]
+ **/
+ Withdraw: AugmentedEvent<ApiType, [AccountId32, u128]>;
+ /**
+ * Generic event
+ **/
+ [key: string]: AugmentedEvent<ApiType>;
+ };
+ common: {
+ /**
+ * * collection_id
+ *
+ * * item_id
+ *
+ * * sender
+ *
+ * * spender
+ *
+ * * amount
+ **/
+ Approved: AugmentedEvent<ApiType, [u32, u32, PalletCommonAccountBasicCrossAccountIdRepr, PalletCommonAccountBasicCrossAccountIdRepr, u128]>;
+ /**
+ * New collection was created
+ *
+ * # Arguments
+ *
+ * * collection_id: Globally unique identifier of newly created collection.
+ *
+ * * mode: [CollectionMode] converted into u8.
+ *
+ * * account_id: Collection owner.
+ **/
+ CollectionCreated: AugmentedEvent<ApiType, [u32, u8, AccountId32]>;
+ /**
+ * New item was created.
+ *
+ * # Arguments
+ *
+ * * collection_id: Id of the collection where item was created.
+ *
+ * * item_id: Id of an item. Unique within the collection.
+ *
+ * * recipient: Owner of newly created item
+ *
+ * * amount: Always 1 for NFT
+ **/
+ ItemCreated: AugmentedEvent<ApiType, [u32, u32, PalletCommonAccountBasicCrossAccountIdRepr, u128]>;
+ /**
+ * Collection item was burned.
+ *
+ * # Arguments
+ *
+ * * collection_id.
+ *
+ * * item_id: Identifier of burned NFT.
+ *
+ * * owner: which user has destroyed its tokens
+ *
+ * * amount: Always 1 for NFT
+ **/
+ ItemDestroyed: AugmentedEvent<ApiType, [u32, u32, PalletCommonAccountBasicCrossAccountIdRepr, u128]>;
+ /**
+ * Item was transferred
+ *
+ * * collection_id: Id of collection to which item is belong
+ *
+ * * item_id: Id of an item
+ *
+ * * sender: Original owner of item
+ *
+ * * recipient: New owner of item
+ *
+ * * amount: Always 1 for NFT
+ **/
+ Transfer: AugmentedEvent<ApiType, [u32, u32, PalletCommonAccountBasicCrossAccountIdRepr, PalletCommonAccountBasicCrossAccountIdRepr, u128]>;
+ /**
+ * Generic event
+ **/
+ [key: string]: AugmentedEvent<ApiType>;
+ };
+ cumulusXcm: {
+ /**
+ * Downward message executed with the given outcome.
+ * \[ id, outcome \]
+ **/
+ ExecutedDownward: AugmentedEvent<ApiType, [U8aFixed, XcmV2TraitsOutcome]>;
+ /**
+ * Downward message is invalid XCM.
+ * \[ id \]
+ **/
+ InvalidFormat: AugmentedEvent<ApiType, [U8aFixed]>;
+ /**
+ * Downward message is unsupported version of XCM.
+ * \[ id \]
+ **/
+ UnsupportedVersion: AugmentedEvent<ApiType, [U8aFixed]>;
+ /**
+ * Generic event
+ **/
+ [key: string]: AugmentedEvent<ApiType>;
+ };
+ dmpQueue: {
+ /**
+ * Downward message executed with the given outcome.
+ * \[ id, outcome \]
+ **/
+ ExecutedDownward: AugmentedEvent<ApiType, [U8aFixed, XcmV2TraitsOutcome]>;
+ /**
+ * Downward message is invalid XCM.
+ * \[ id \]
+ **/
+ InvalidFormat: AugmentedEvent<ApiType, [U8aFixed]>;
+ /**
+ * Downward message is overweight and was placed in the overweight queue.
+ * \[ id, index, required \]
+ **/
+ OverweightEnqueued: AugmentedEvent<ApiType, [U8aFixed, u64, u64]>;
+ /**
+ * Downward message from the overweight queue was executed.
+ * \[ index, used \]
+ **/
+ OverweightServiced: AugmentedEvent<ApiType, [u64, u64]>;
+ /**
+ * Downward message is unsupported version of XCM.
+ * \[ id \]
+ **/
+ UnsupportedVersion: AugmentedEvent<ApiType, [U8aFixed]>;
+ /**
+ * The weight limit for handling downward messages was reached.
+ * \[ id, remaining, required \]
+ **/
+ WeightExhausted: AugmentedEvent<ApiType, [U8aFixed, u64, u64]>;
+ /**
+ * Generic event
+ **/
+ [key: string]: AugmentedEvent<ApiType>;
+ };
+ ethereum: {
+ /**
+ * An ethereum transaction was successfully executed. [from, to/contract_address, transaction_hash, exit_reason]
+ **/
+ Executed: AugmentedEvent<ApiType, [H160, H160, H256, EvmCoreErrorExitReason]>;
+ /**
+ * Generic event
+ **/
+ [key: string]: AugmentedEvent<ApiType>;
+ };
+ evm: {
+ /**
+ * A deposit has been made at a given address. \[sender, address, value\]
+ **/
+ BalanceDeposit: AugmentedEvent<ApiType, [AccountId32, H160, U256]>;
+ /**
+ * A withdrawal has been made from a given address. \[sender, address, value\]
+ **/
+ BalanceWithdraw: AugmentedEvent<ApiType, [AccountId32, H160, U256]>;
+ /**
+ * A contract has been created at given \[address\].
+ **/
+ Created: AugmentedEvent<ApiType, [H160]>;
+ /**
+ * A \[contract\] was attempted to be created, but the execution failed.
+ **/
+ CreatedFailed: AugmentedEvent<ApiType, [H160]>;
+ /**
+ * A \[contract\] has been executed successfully with states applied.
+ **/
+ Executed: AugmentedEvent<ApiType, [H160]>;
+ /**
+ * A \[contract\] has been executed with errors. States are reverted with only gas fees applied.
+ **/
+ ExecutedFailed: AugmentedEvent<ApiType, [H160]>;
+ /**
+ * Ethereum events from contracts.
+ **/
+ Log: AugmentedEvent<ApiType, [EthereumLog]>;
+ /**
+ * Generic event
+ **/
+ [key: string]: AugmentedEvent<ApiType>;
+ };
+ parachainSystem: {
+ /**
+ * Downward messages were processed using the given weight.
+ * \[ weight_used, result_mqc_head \]
+ **/
+ DownwardMessagesProcessed: AugmentedEvent<ApiType, [u64, H256]>;
+ /**
+ * Some downward messages have been received and will be processed.
+ * \[ count \]
+ **/
+ DownwardMessagesReceived: AugmentedEvent<ApiType, [u32]>;
+ /**
+ * An upgrade has been authorized.
+ **/
+ UpgradeAuthorized: AugmentedEvent<ApiType, [H256]>;
+ /**
+ * The validation function was applied as of the contained relay chain block number.
+ **/
+ ValidationFunctionApplied: AugmentedEvent<ApiType, [u32]>;
+ /**
+ * The relay-chain aborted the upgrade process.
+ **/
+ ValidationFunctionDiscarded: AugmentedEvent<ApiType, []>;
+ /**
+ * The validation function has been scheduled to apply.
+ **/
+ ValidationFunctionStored: AugmentedEvent<ApiType, []>;
+ /**
+ * Generic event
+ **/
+ [key: string]: AugmentedEvent<ApiType>;
+ };
+ polkadotXcm: {
+ /**
+ * Some assets have been placed in an asset trap.
+ *
+ * \[ hash, origin, assets \]
+ **/
+ AssetsTrapped: AugmentedEvent<ApiType, [H256, XcmV1MultiLocation, XcmVersionedMultiAssets]>;
+ /**
+ * Execution of an XCM message was attempted.
+ *
+ * \[ outcome \]
+ **/
+ Attempted: AugmentedEvent<ApiType, [XcmV2TraitsOutcome]>;
+ /**
+ * Expected query response has been received but the origin location of the response does
+ * not match that expected. The query remains registered for a later, valid, response to
+ * be received and acted upon.
+ *
+ * \[ origin location, id, expected location \]
+ **/
+ InvalidResponder: AugmentedEvent<ApiType, [XcmV1MultiLocation, u64, Option<XcmV1MultiLocation>]>;
+ /**
+ * Expected query response has been received but the expected origin location placed in
+ * storate by this runtime previously cannot be decoded. The query remains registered.
+ *
+ * This is unexpected (since a location placed in storage in a previously executing
+ * runtime should be readable prior to query timeout) and dangerous since the possibly
+ * valid response will be dropped. Manual governance intervention is probably going to be
+ * needed.
+ *
+ * \[ origin location, id \]
+ **/
+ InvalidResponderVersion: AugmentedEvent<ApiType, [XcmV1MultiLocation, u64]>;
+ /**
+ * Query response has been received and query is removed. The registered notification has
+ * been dispatched and executed successfully.
+ *
+ * \[ id, pallet index, call index \]
+ **/
+ Notified: AugmentedEvent<ApiType, [u64, u8, u8]>;
+ /**
+ * Query response has been received and query is removed. The dispatch was unable to be
+ * decoded into a `Call`; this might be due to dispatch function having a signature which
+ * is not `(origin, QueryId, Response)`.
+ *
+ * \[ id, pallet index, call index \]
+ **/
+ NotifyDecodeFailed: AugmentedEvent<ApiType, [u64, u8, u8]>;
+ /**
+ * Query response has been received and query is removed. There was a general error with
+ * dispatching the notification call.
+ *
+ * \[ id, pallet index, call index \]
+ **/
+ NotifyDispatchError: AugmentedEvent<ApiType, [u64, u8, u8]>;
+ /**
+ * Query response has been received and query is removed. The registered notification could
+ * not be dispatched because the dispatch weight is greater than the maximum weight
+ * originally budgeted by this runtime for the query result.
+ *
+ * \[ id, pallet index, call index, actual weight, max budgeted weight \]
+ **/
+ NotifyOverweight: AugmentedEvent<ApiType, [u64, u8, u8, u64, u64]>;
+ /**
+ * A given location which had a version change subscription was dropped owing to an error
+ * migrating the location to our new XCM format.
+ *
+ * \[ location, query ID \]
+ **/
+ NotifyTargetMigrationFail: AugmentedEvent<ApiType, [XcmVersionedMultiLocation, u64]>;
+ /**
+ * A given location which had a version change subscription was dropped owing to an error
+ * sending the notification to it.
+ *
+ * \[ location, query ID, error \]
+ **/
+ NotifyTargetSendFail: AugmentedEvent<ApiType, [XcmV1MultiLocation, u64, XcmV2TraitsError]>;
+ /**
+ * Query response has been received and is ready for taking with `take_response`. There is
+ * no registered notification call.
+ *
+ * \[ id, response \]
+ **/
+ ResponseReady: AugmentedEvent<ApiType, [u64, XcmV2Response]>;
+ /**
+ * Received query response has been read and removed.
+ *
+ * \[ id \]
+ **/
+ ResponseTaken: AugmentedEvent<ApiType, [u64]>;
+ /**
+ * A XCM message was sent.
+ *
+ * \[ origin, destination, message \]
+ **/
+ Sent: AugmentedEvent<ApiType, [XcmV1MultiLocation, XcmV1MultiLocation, XcmV2Xcm]>;
+ /**
+ * The supported version of a location has been changed. This might be through an
+ * automatic notification or a manual intervention.
+ *
+ * \[ location, XCM version \]
+ **/
+ SupportedVersionChanged: AugmentedEvent<ApiType, [XcmV1MultiLocation, u32]>;
+ /**
+ * Query response received which does not match a registered query. This may be because a
+ * matching query was never registered, it may be because it is a duplicate response, or
+ * because the query timed out.
+ *
+ * \[ origin location, id \]
+ **/
+ UnexpectedResponse: AugmentedEvent<ApiType, [XcmV1MultiLocation, u64]>;
+ /**
+ * An XCM version change notification message has been attempted to be sent.
+ *
+ * \[ destination, result \]
+ **/
+ VersionChangeNotified: AugmentedEvent<ApiType, [XcmV1MultiLocation, u32]>;
+ /**
+ * Generic event
+ **/
+ [key: string]: AugmentedEvent<ApiType>;
+ };
+ scheduler: {
+ /**
+ * Canceled some task. \[when, index\]
+ **/
+ Canceled: AugmentedEvent<ApiType, [u32, u32]>;
+ /**
+ * Dispatched some task. \[task, id, result\]
+ **/
+ Dispatched: AugmentedEvent<ApiType, [ITuple<[u32, u32]>, Option<Bytes>, Result<Null, SpRuntimeDispatchError>]>;
+ /**
+ * Scheduled some task. \[when, index\]
+ **/
+ Scheduled: AugmentedEvent<ApiType, [u32, u32]>;
+ /**
+ * Generic event
+ **/
+ [key: string]: AugmentedEvent<ApiType>;
+ };
+ sudo: {
+ /**
+ * The \[sudoer\] just switched identity; the old key is supplied.
+ **/
+ KeyChanged: AugmentedEvent<ApiType, [AccountId32]>;
+ /**
+ * A sudo just took place. \[result\]
+ **/
+ Sudid: AugmentedEvent<ApiType, [Result<Null, SpRuntimeDispatchError>]>;
+ /**
+ * A sudo just took place. \[result\]
+ **/
+ SudoAsDone: AugmentedEvent<ApiType, [Result<Null, SpRuntimeDispatchError>]>;
+ /**
+ * Generic event
+ **/
+ [key: string]: AugmentedEvent<ApiType>;
+ };
+ system: {
+ /**
+ * `:code` was updated.
+ **/
+ CodeUpdated: AugmentedEvent<ApiType, []>;
+ /**
+ * An extrinsic failed. \[error, info\]
+ **/
+ ExtrinsicFailed: AugmentedEvent<ApiType, [SpRuntimeDispatchError, FrameSupportWeightsDispatchInfo]>;
+ /**
+ * An extrinsic completed successfully. \[info\]
+ **/
+ ExtrinsicSuccess: AugmentedEvent<ApiType, [FrameSupportWeightsDispatchInfo]>;
+ /**
+ * An \[account\] was reaped.
+ **/
+ KilledAccount: AugmentedEvent<ApiType, [AccountId32]>;
+ /**
+ * A new \[account\] was created.
+ **/
+ NewAccount: AugmentedEvent<ApiType, [AccountId32]>;
+ /**
+ * On on-chain remark happened. \[origin, remark_hash\]
+ **/
+ Remarked: AugmentedEvent<ApiType, [AccountId32, H256]>;
+ /**
+ * Generic event
+ **/
+ [key: string]: AugmentedEvent<ApiType>;
+ };
+ treasury: {
+ /**
+ * Some funds have been allocated. \[proposal_index, award, beneficiary\]
+ **/
+ Awarded: AugmentedEvent<ApiType, [u32, u128, AccountId32]>;
+ /**
+ * Some of our funds have been burnt. \[burn\]
+ **/
+ Burnt: AugmentedEvent<ApiType, [u128]>;
+ /**
+ * Some funds have been deposited. \[deposit\]
+ **/
+ Deposit: AugmentedEvent<ApiType, [u128]>;
+ /**
+ * New proposal. \[proposal_index\]
+ **/
+ Proposed: AugmentedEvent<ApiType, [u32]>;
+ /**
+ * A proposal was rejected; funds were slashed. \[proposal_index, slashed\]
+ **/
+ Rejected: AugmentedEvent<ApiType, [u32, u128]>;
+ /**
+ * Spending has finished; this is the amount that rolls over until next spend.
+ * \[budget_remaining\]
+ **/
+ Rollover: AugmentedEvent<ApiType, [u128]>;
+ /**
+ * We have ended a spend period and will now allocate funds. \[budget_remaining\]
+ **/
+ Spending: AugmentedEvent<ApiType, [u128]>;
+ /**
+ * Generic event
+ **/
+ [key: string]: AugmentedEvent<ApiType>;
+ };
+ vesting: {
+ /**
+ * An \[account\] has become fully vested.
+ **/
+ VestingCompleted: AugmentedEvent<ApiType, [AccountId32]>;
+ /**
+ * The amount vested has been updated. This could indicate a change in funds available.
+ * The balance given is the amount which is left unvested (and thus locked).
+ * \[account, unvested\]
+ **/
+ VestingUpdated: AugmentedEvent<ApiType, [AccountId32, u128]>;
+ /**
+ * Generic event
+ **/
+ [key: string]: AugmentedEvent<ApiType>;
+ };
+ xcmpQueue: {
+ /**
+ * Bad XCM format used.
+ **/
+ BadFormat: AugmentedEvent<ApiType, [Option<H256>]>;
+ /**
+ * Bad XCM version used.
+ **/
+ BadVersion: AugmentedEvent<ApiType, [Option<H256>]>;
+ /**
+ * Some XCM failed.
+ **/
+ Fail: AugmentedEvent<ApiType, [Option<H256>, XcmV2TraitsError]>;
+ /**
+ * Some XCM was executed ok.
+ **/
+ Success: AugmentedEvent<ApiType, [Option<H256>]>;
+ /**
+ * An upward message was sent to the relay chain.
+ **/
+ UpwardMessageSent: AugmentedEvent<ApiType, [Option<H256>]>;
+ /**
+ * An HRMP message was sent to a sibling parachain.
+ **/
+ XcmpMessageSent: AugmentedEvent<ApiType, [Option<H256>]>;
+ /**
+ * Generic event
+ **/
+ [key: string]: AugmentedEvent<ApiType>;
+ };
+ }
+
+ export interface DecoratedEvents<ApiType extends ApiTypes> extends AugmentedEvents<ApiType> {
+ [key: string]: ModuleEvents<ApiType>;
+ }
+}
tests/src/interfaces/augment-api-query.tsdiffbeforeafterboth--- /dev/null
+++ b/tests/src/interfaces/augment-api-query.ts
@@ -0,0 +1,596 @@
+// Auto-generated via `yarn polkadot-types-from-chain`, do not edit
+/* eslint-disable */
+
+import type { EthereumBlock, EthereumReceipt, EthereumTransactionLegacyTransaction, FpRpcTransactionStatus } from './ethereum';
+import type { NftDataStructsCollection, PalletCommonAccountBasicCrossAccountIdRepr, PalletNonfungibleItemData, PalletRefungibleItemData, PalletUnqSchedulerCallSpec, PalletUnqSchedulerReleases, PalletUnqSchedulerScheduledV2 } from './nft';
+import type { CumulusPalletDmpQueueConfigData, CumulusPalletDmpQueuePageIndexData, CumulusPalletParachainSystemRelayStateSnapshotMessagingStateSnapshot, CumulusPalletXcmpQueueInboundStatus, CumulusPalletXcmpQueueOutboundStatus, CumulusPalletXcmpQueueQueueConfigData, PolkadotParachainPrimitivesXcmpMessageFormat, PolkadotPrimitivesV1AbridgedHostConfiguration, PolkadotPrimitivesV1PersistedValidationData } from './polkadot';
+import type { ApiTypes } from '@polkadot/api/types';
+import type { BTreeMap, Bytes, Option, U256, Vec, bool, u128, u16, u32, u64 } from '@polkadot/types';
+import type { AccountId32, H160, H256 } from '@polkadot/types/interfaces/runtime';
+import type { FrameSupportWeightsPerDispatchClassU64, FrameSystemAccountInfo, FrameSystemEventRecord, FrameSystemLastRuntimeUpgradeInfo, FrameSystemPhase, PalletBalancesAccountData, PalletBalancesBalanceLock, PalletBalancesReleases, PalletBalancesReserveData, PalletTransactionPaymentReleases, PalletTreasuryProposal, PalletVestingReleases, PalletVestingVestingInfo, PolkadotCorePrimitivesOutboundHrmpMessage, PolkadotPrimitivesV1UpgradeRestriction, SpRuntimeGenericDigest } from '@polkadot/types/lookup';
+import type { AnyNumber, ITuple, Observable } from '@polkadot/types/types';
+
+declare module '@polkadot/api/types/storage' {
+ export interface AugmentedQueries<ApiType> {
+ balances: {
+ /**
+ * The balance of an account.
+ *
+ * NOTE: This is only used in the case that this pallet is used to store balances.
+ **/
+ account: AugmentedQuery<ApiType, (arg: AccountId32 | string | Uint8Array) => Observable<PalletBalancesAccountData>, [AccountId32]> & QueryableStorageEntry<ApiType, [AccountId32]>;
+ /**
+ * Any liquidity locks on some account balances.
+ * NOTE: Should only be accessed when setting, changing and freeing a lock.
+ **/
+ locks: AugmentedQuery<ApiType, (arg: AccountId32 | string | Uint8Array) => Observable<Vec<PalletBalancesBalanceLock>>, [AccountId32]> & QueryableStorageEntry<ApiType, [AccountId32]>;
+ /**
+ * Named reserves on some account balances.
+ **/
+ reserves: AugmentedQuery<ApiType, (arg: AccountId32 | string | Uint8Array) => Observable<Vec<PalletBalancesReserveData>>, [AccountId32]> & QueryableStorageEntry<ApiType, [AccountId32]>;
+ /**
+ * Storage version of the pallet.
+ *
+ * This is set to v2.0.0 for new networks.
+ **/
+ storageVersion: AugmentedQuery<ApiType, () => Observable<PalletBalancesReleases>, []> & QueryableStorageEntry<ApiType, []>;
+ /**
+ * The total units issued in the system.
+ **/
+ totalIssuance: AugmentedQuery<ApiType, () => Observable<u128>, []> & QueryableStorageEntry<ApiType, []>;
+ /**
+ * Generic query
+ **/
+ [key: string]: QueryableStorageEntry<ApiType>;
+ };
+ charging: {
+ /**
+ * Generic query
+ **/
+ [key: string]: QueryableStorageEntry<ApiType>;
+ };
+ common: {
+ adminAmount: AugmentedQuery<ApiType, (arg: u32 | AnyNumber | Uint8Array) => Observable<u32>, [u32]> & QueryableStorageEntry<ApiType, [u32]>;
+ /**
+ * Allowlisted collection users
+ **/
+ allowlist: AugmentedQuery<ApiType, (arg1: u32 | AnyNumber | Uint8Array, arg2: PalletCommonAccountBasicCrossAccountIdRepr | { Substrate: any } | { Ethereum: any } | string | Uint8Array) => Observable<bool>, [u32, PalletCommonAccountBasicCrossAccountIdRepr]> & QueryableStorageEntry<ApiType, [u32, PalletCommonAccountBasicCrossAccountIdRepr]>;
+ /**
+ * Collection info
+ **/
+ collectionById: AugmentedQuery<ApiType, (arg: u32 | AnyNumber | Uint8Array) => Observable<Option<NftDataStructsCollection>>, [u32]> & QueryableStorageEntry<ApiType, [u32]>;
+ createdCollectionCount: AugmentedQuery<ApiType, () => Observable<u32>, []> & QueryableStorageEntry<ApiType, []>;
+ destroyedCollectionCount: AugmentedQuery<ApiType, () => Observable<u32>, []> & QueryableStorageEntry<ApiType, []>;
+ /**
+ * List of collection admins
+ **/
+ isAdmin: AugmentedQuery<ApiType, (arg1: u32 | AnyNumber | Uint8Array, arg2: PalletCommonAccountBasicCrossAccountIdRepr | { Substrate: any } | { Ethereum: any } | string | Uint8Array) => Observable<bool>, [u32, PalletCommonAccountBasicCrossAccountIdRepr]> & QueryableStorageEntry<ApiType, [u32, PalletCommonAccountBasicCrossAccountIdRepr]>;
+ /**
+ * Generic query
+ **/
+ [key: string]: QueryableStorageEntry<ApiType>;
+ };
+ dmpQueue: {
+ /**
+ * The configuration.
+ **/
+ configuration: AugmentedQuery<ApiType, () => Observable<CumulusPalletDmpQueueConfigData>, []> & QueryableStorageEntry<ApiType, []>;
+ /**
+ * The overweight messages.
+ **/
+ overweight: AugmentedQuery<ApiType, (arg: u64 | AnyNumber | Uint8Array) => Observable<Option<ITuple<[u32, Bytes]>>>, [u64]> & QueryableStorageEntry<ApiType, [u64]>;
+ /**
+ * The page index.
+ **/
+ pageIndex: AugmentedQuery<ApiType, () => Observable<CumulusPalletDmpQueuePageIndexData>, []> & QueryableStorageEntry<ApiType, []>;
+ /**
+ * The queue pages.
+ **/
+ pages: AugmentedQuery<ApiType, (arg: u32 | AnyNumber | Uint8Array) => Observable<Vec<ITuple<[u32, Bytes]>>>, [u32]> & QueryableStorageEntry<ApiType, [u32]>;
+ /**
+ * Generic query
+ **/
+ [key: string]: QueryableStorageEntry<ApiType>;
+ };
+ ethereum: {
+ blockHash: AugmentedQuery<ApiType, (arg: U256 | AnyNumber | Uint8Array) => Observable<H256>, [U256]> & QueryableStorageEntry<ApiType, [U256]>;
+ /**
+ * The current Ethereum block.
+ **/
+ currentBlock: AugmentedQuery<ApiType, () => Observable<Option<EthereumBlock>>, []> & QueryableStorageEntry<ApiType, []>;
+ /**
+ * The current Ethereum receipts.
+ **/
+ currentReceipts: AugmentedQuery<ApiType, () => Observable<Option<Vec<EthereumReceipt>>>, []> & QueryableStorageEntry<ApiType, []>;
+ /**
+ * The current transaction statuses.
+ **/
+ currentTransactionStatuses: AugmentedQuery<ApiType, () => Observable<Option<Vec<FpRpcTransactionStatus>>>, []> & QueryableStorageEntry<ApiType, []>;
+ /**
+ * Current building block's transactions and receipts.
+ **/
+ pending: AugmentedQuery<ApiType, () => Observable<Vec<ITuple<[EthereumTransactionLegacyTransaction, FpRpcTransactionStatus, EthereumReceipt]>>>, []> & QueryableStorageEntry<ApiType, []>;
+ /**
+ * Generic query
+ **/
+ [key: string]: QueryableStorageEntry<ApiType>;
+ };
+ evm: {
+ accountCodes: AugmentedQuery<ApiType, (arg: H160 | string | Uint8Array) => Observable<Bytes>, [H160]> & QueryableStorageEntry<ApiType, [H160]>;
+ accountStorages: AugmentedQuery<ApiType, (arg1: H160 | string | Uint8Array, arg2: H256 | string | Uint8Array) => Observable<H256>, [H160, H256]> & QueryableStorageEntry<ApiType, [H160, H256]>;
+ /**
+ * Generic query
+ **/
+ [key: string]: QueryableStorageEntry<ApiType>;
+ };
+ evmCoderSubstrate: {
+ /**
+ * Generic query
+ **/
+ [key: string]: QueryableStorageEntry<ApiType>;
+ };
+ evmContractHelpers: {
+ allowlist: AugmentedQuery<ApiType, (arg1: H160 | string | Uint8Array, arg2: H160 | string | Uint8Array) => Observable<bool>, [H160, H160]> & QueryableStorageEntry<ApiType, [H160, H160]>;
+ allowlistEnabled: AugmentedQuery<ApiType, (arg: H160 | string | Uint8Array) => Observable<bool>, [H160]> & QueryableStorageEntry<ApiType, [H160]>;
+ owner: AugmentedQuery<ApiType, (arg: H160 | string | Uint8Array) => Observable<H160>, [H160]> & QueryableStorageEntry<ApiType, [H160]>;
+ selfSponsoring: AugmentedQuery<ApiType, (arg: H160 | string | Uint8Array) => Observable<bool>, [H160]> & QueryableStorageEntry<ApiType, [H160]>;
+ sponsorBasket: AugmentedQuery<ApiType, (arg1: H160 | string | Uint8Array, arg2: H160 | string | Uint8Array) => Observable<Option<u32>>, [H160, H160]> & QueryableStorageEntry<ApiType, [H160, H160]>;
+ sponsoringRateLimit: AugmentedQuery<ApiType, (arg: H160 | string | Uint8Array) => Observable<u32>, [H160]> & QueryableStorageEntry<ApiType, [H160]>;
+ /**
+ * Generic query
+ **/
+ [key: string]: QueryableStorageEntry<ApiType>;
+ };
+ evmMigration: {
+ migrationPending: AugmentedQuery<ApiType, (arg: H160 | string | Uint8Array) => Observable<bool>, [H160]> & QueryableStorageEntry<ApiType, [H160]>;
+ /**
+ * Generic query
+ **/
+ [key: string]: QueryableStorageEntry<ApiType>;
+ };
+ fungible: {
+ allowance: AugmentedQuery<ApiType, (arg1: u32 | AnyNumber | Uint8Array, arg2: PalletCommonAccountBasicCrossAccountIdRepr | { Substrate: any } | { Ethereum: any } | string | Uint8Array, arg3: PalletCommonAccountBasicCrossAccountIdRepr | { Substrate: any } | { Ethereum: any } | string | Uint8Array) => Observable<u128>, [u32, PalletCommonAccountBasicCrossAccountIdRepr, PalletCommonAccountBasicCrossAccountIdRepr]> & QueryableStorageEntry<ApiType, [u32, PalletCommonAccountBasicCrossAccountIdRepr, PalletCommonAccountBasicCrossAccountIdRepr]>;
+ balance: AugmentedQuery<ApiType, (arg1: u32 | AnyNumber | Uint8Array, arg2: PalletCommonAccountBasicCrossAccountIdRepr | { Substrate: any } | { Ethereum: any } | string | Uint8Array) => Observable<u128>, [u32, PalletCommonAccountBasicCrossAccountIdRepr]> & QueryableStorageEntry<ApiType, [u32, PalletCommonAccountBasicCrossAccountIdRepr]>;
+ totalSupply: AugmentedQuery<ApiType, (arg: u32 | AnyNumber | Uint8Array) => Observable<u128>, [u32]> & QueryableStorageEntry<ApiType, [u32]>;
+ /**
+ * Generic query
+ **/
+ [key: string]: QueryableStorageEntry<ApiType>;
+ };
+ inflation: {
+ /**
+ * Current block inflation
+ **/
+ blockInflation: AugmentedQuery<ApiType, () => Observable<u128>, []> & QueryableStorageEntry<ApiType, []>;
+ /**
+ * starting year total issuance
+ **/
+ startingYearTotalIssuance: AugmentedQuery<ApiType, () => Observable<u128>, []> & QueryableStorageEntry<ApiType, []>;
+ /**
+ * Generic query
+ **/
+ [key: string]: QueryableStorageEntry<ApiType>;
+ };
+ nft: {
+ /**
+ * Used for migrations
+ **/
+ chainVersion: AugmentedQuery<ApiType, () => Observable<u64>, []> & QueryableStorageEntry<ApiType, []>;
+ /**
+ * (Collection id (controlled?2), who created (real))
+ * TODO: Off chain worker should remove from this map when collection gets removed
+ **/
+ createItemBasket: AugmentedQuery<ApiType, (arg: ITuple<[u32, AccountId32]> | [u32 | AnyNumber | Uint8Array, AccountId32 | string | Uint8Array]) => Observable<u32>, [ITuple<[u32, AccountId32]>]> & QueryableStorageEntry<ApiType, [ITuple<[u32, AccountId32]>]>;
+ /**
+ * Collection id (controlled?2), owning user (real)
+ **/
+ fungibleTransferBasket: AugmentedQuery<ApiType, (arg1: u32 | AnyNumber | Uint8Array, arg2: AccountId32 | string | Uint8Array) => Observable<u32>, [u32, AccountId32]> & QueryableStorageEntry<ApiType, [u32, AccountId32]>;
+ /**
+ * Collection id (controlled?2), token id (controlled?2)
+ **/
+ nftTransferBasket: AugmentedQuery<ApiType, (arg1: u32 | AnyNumber | Uint8Array, arg2: u32 | AnyNumber | Uint8Array) => Observable<u32>, [u32, u32]> & QueryableStorageEntry<ApiType, [u32, u32]>;
+ /**
+ * Collection id (controlled?2), token id (controlled?2)
+ **/
+ reFungibleTransferBasket: AugmentedQuery<ApiType, (arg1: u32 | AnyNumber | Uint8Array, arg2: u32 | AnyNumber | Uint8Array) => Observable<u32>, [u32, u32]> & QueryableStorageEntry<ApiType, [u32, u32]>;
+ /**
+ * Variable metadata sponsoring
+ * Collection id (controlled?2), token id (controlled?2)
+ **/
+ variableMetaDataBasket: AugmentedQuery<ApiType, (arg1: u32 | AnyNumber | Uint8Array, arg2: u32 | AnyNumber | Uint8Array) => Observable<Option<u32>>, [u32, u32]> & QueryableStorageEntry<ApiType, [u32, u32]>;
+ /**
+ * Generic query
+ **/
+ [key: string]: QueryableStorageEntry<ApiType>;
+ };
+ nftPayment: {
+ /**
+ * Generic query
+ **/
+ [key: string]: QueryableStorageEntry<ApiType>;
+ };
+ nonfungible: {
+ accountBalance: AugmentedQuery<ApiType, (arg1: u32 | AnyNumber | Uint8Array, arg2: PalletCommonAccountBasicCrossAccountIdRepr | { Substrate: any } | { Ethereum: any } | string | Uint8Array) => Observable<u32>, [u32, PalletCommonAccountBasicCrossAccountIdRepr]> & QueryableStorageEntry<ApiType, [u32, PalletCommonAccountBasicCrossAccountIdRepr]>;
+ allowance: AugmentedQuery<ApiType, (arg1: u32 | AnyNumber | Uint8Array, arg2: u32 | AnyNumber | Uint8Array) => Observable<Option<PalletCommonAccountBasicCrossAccountIdRepr>>, [u32, u32]> & QueryableStorageEntry<ApiType, [u32, u32]>;
+ /**
+ * Used to enumerate tokens owned by account
+ **/
+ owned: AugmentedQuery<ApiType, (arg1: u32 | AnyNumber | Uint8Array, arg2: PalletCommonAccountBasicCrossAccountIdRepr | { Substrate: any } | { Ethereum: any } | string | Uint8Array, arg3: u32 | AnyNumber | Uint8Array) => Observable<bool>, [u32, PalletCommonAccountBasicCrossAccountIdRepr, u32]> & QueryableStorageEntry<ApiType, [u32, PalletCommonAccountBasicCrossAccountIdRepr, u32]>;
+ tokenData: AugmentedQuery<ApiType, (arg1: u32 | AnyNumber | Uint8Array, arg2: u32 | AnyNumber | Uint8Array) => Observable<Option<PalletNonfungibleItemData>>, [u32, u32]> & QueryableStorageEntry<ApiType, [u32, u32]>;
+ tokensBurnt: AugmentedQuery<ApiType, (arg: u32 | AnyNumber | Uint8Array) => Observable<u32>, [u32]> & QueryableStorageEntry<ApiType, [u32]>;
+ tokensMinted: AugmentedQuery<ApiType, (arg: u32 | AnyNumber | Uint8Array) => Observable<u32>, [u32]> & QueryableStorageEntry<ApiType, [u32]>;
+ /**
+ * Generic query
+ **/
+ [key: string]: QueryableStorageEntry<ApiType>;
+ };
+ parachainInfo: {
+ parachainId: AugmentedQuery<ApiType, () => Observable<u32>, []> & QueryableStorageEntry<ApiType, []>;
+ /**
+ * Generic query
+ **/
+ [key: string]: QueryableStorageEntry<ApiType>;
+ };
+ parachainSystem: {
+ /**
+ * The number of HRMP messages we observed in `on_initialize` and thus used that number for
+ * announcing the weight of `on_initialize` and `on_finalize`.
+ **/
+ announcedHrmpMessagesPerCandidate: AugmentedQuery<ApiType, () => Observable<u32>, []> & QueryableStorageEntry<ApiType, []>;
+ /**
+ * The next authorized upgrade, if there is one.
+ **/
+ authorizedUpgrade: AugmentedQuery<ApiType, () => Observable<Option<H256>>, []> & QueryableStorageEntry<ApiType, []>;
+ /**
+ * Were the validation data set to notify the relay chain?
+ **/
+ didSetValidationCode: AugmentedQuery<ApiType, () => Observable<bool>, []> & QueryableStorageEntry<ApiType, []>;
+ /**
+ * The parachain host configuration that was obtained from the relay parent.
+ *
+ * This field is meant to be updated each block with the validation data inherent. Therefore,
+ * before processing of the inherent, e.g. in `on_initialize` this data may be stale.
+ *
+ * This data is also absent from the genesis.
+ **/
+ hostConfiguration: AugmentedQuery<ApiType, () => Observable<Option<PolkadotPrimitivesV1AbridgedHostConfiguration>>, []> & QueryableStorageEntry<ApiType, []>;
+ /**
+ * HRMP messages that were sent in a block.
+ *
+ * This will be cleared in `on_initialize` of each new block.
+ **/
+ hrmpOutboundMessages: AugmentedQuery<ApiType, () => Observable<Vec<PolkadotCorePrimitivesOutboundHrmpMessage>>, []> & QueryableStorageEntry<ApiType, []>;
+ /**
+ * HRMP watermark that was set in a block.
+ *
+ * This will be cleared in `on_initialize` of each new block.
+ **/
+ hrmpWatermark: AugmentedQuery<ApiType, () => Observable<u32>, []> & QueryableStorageEntry<ApiType, []>;
+ /**
+ * The last downward message queue chain head we have observed.
+ *
+ * This value is loaded before and saved after processing inbound downward messages carried
+ * by the system inherent.
+ **/
+ lastDmqMqcHead: AugmentedQuery<ApiType, () => Observable<H256>, []> & QueryableStorageEntry<ApiType, []>;
+ /**
+ * The message queue chain heads we have observed per each channel incoming channel.
+ *
+ * This value is loaded before and saved after processing inbound downward messages carried
+ * by the system inherent.
+ **/
+ lastHrmpMqcHeads: AugmentedQuery<ApiType, () => Observable<BTreeMap<u32, H256>>, []> & QueryableStorageEntry<ApiType, []>;
+ /**
+ * Validation code that is set by the parachain and is to be communicated to collator and
+ * consequently the relay-chain.
+ *
+ * This will be cleared in `on_initialize` of each new block if no other pallet already set
+ * the value.
+ **/
+ newValidationCode: AugmentedQuery<ApiType, () => Observable<Option<Bytes>>, []> & QueryableStorageEntry<ApiType, []>;
+ /**
+ * Upward messages that are still pending and not yet send to the relay chain.
+ **/
+ pendingUpwardMessages: AugmentedQuery<ApiType, () => Observable<Vec<Bytes>>, []> & QueryableStorageEntry<ApiType, []>;
+ /**
+ * In case of a scheduled upgrade, this storage field contains the validation code to be applied.
+ *
+ * As soon as the relay chain gives us the go-ahead signal, we will overwrite the [`:code`][well_known_keys::CODE]
+ * which will result the next block process with the new validation code. This concludes the upgrade process.
+ *
+ * [well_known_keys::CODE]: sp_core::storage::well_known_keys::CODE
+ **/
+ pendingValidationCode: AugmentedQuery<ApiType, () => Observable<Bytes>, []> & QueryableStorageEntry<ApiType, []>;
+ /**
+ * Number of downward messages processed in a block.
+ *
+ * This will be cleared in `on_initialize` of each new block.
+ **/
+ processedDownwardMessages: AugmentedQuery<ApiType, () => Observable<u32>, []> & QueryableStorageEntry<ApiType, []>;
+ /**
+ * The snapshot of some state related to messaging relevant to the current parachain as per
+ * the relay parent.
+ *
+ * This field is meant to be updated each block with the validation data inherent. Therefore,
+ * before processing of the inherent, e.g. in `on_initialize` this data may be stale.
+ *
+ * This data is also absent from the genesis.
+ **/
+ relevantMessagingState: AugmentedQuery<ApiType, () => Observable<Option<CumulusPalletParachainSystemRelayStateSnapshotMessagingStateSnapshot>>, []> & QueryableStorageEntry<ApiType, []>;
+ /**
+ * The weight we reserve at the beginning of the block for processing DMP messages. This
+ * overrides the amount set in the Config trait.
+ **/
+ reservedDmpWeightOverride: AugmentedQuery<ApiType, () => Observable<Option<u64>>, []> & QueryableStorageEntry<ApiType, []>;
+ /**
+ * The weight we reserve at the beginning of the block for processing XCMP messages. This
+ * overrides the amount set in the Config trait.
+ **/
+ reservedXcmpWeightOverride: AugmentedQuery<ApiType, () => Observable<Option<u64>>, []> & QueryableStorageEntry<ApiType, []>;
+ /**
+ * An option which indicates if the relay-chain restricts signalling a validation code upgrade.
+ * In other words, if this is `Some` and [`NewValidationCode`] is `Some` then the produced
+ * candidate will be invalid.
+ *
+ * This storage item is a mirror of the corresponding value for the current parachain from the
+ * relay-chain. This value is ephemeral which means it doesn't hit the storage. This value is
+ * set after the inherent.
+ **/
+ upgradeRestrictionSignal: AugmentedQuery<ApiType, () => Observable<Option<PolkadotPrimitivesV1UpgradeRestriction>>, []> & QueryableStorageEntry<ApiType, []>;
+ /**
+ * Upward messages that were sent in a block.
+ *
+ * This will be cleared in `on_initialize` of each new block.
+ **/
+ upwardMessages: AugmentedQuery<ApiType, () => Observable<Vec<Bytes>>, []> & QueryableStorageEntry<ApiType, []>;
+ /**
+ * The [`PersistedValidationData`] set for this block.
+ * This value is expected to be set only once per block and it's never stored
+ * in the trie.
+ **/
+ validationData: AugmentedQuery<ApiType, () => Observable<Option<PolkadotPrimitivesV1PersistedValidationData>>, []> & QueryableStorageEntry<ApiType, []>;
+ /**
+ * Generic query
+ **/
+ [key: string]: QueryableStorageEntry<ApiType>;
+ };
+ randomnessCollectiveFlip: {
+ /**
+ * Series of block headers from the last 81 blocks that acts as random seed material. This
+ * is arranged as a ring buffer with `block_number % 81` being the index into the `Vec` of
+ * the oldest hash.
+ **/
+ randomMaterial: AugmentedQuery<ApiType, () => Observable<Vec<H256>>, []> & QueryableStorageEntry<ApiType, []>;
+ /**
+ * Generic query
+ **/
+ [key: string]: QueryableStorageEntry<ApiType>;
+ };
+ refungible: {
+ accountBalance: AugmentedQuery<ApiType, (arg1: u32 | AnyNumber | Uint8Array, arg2: PalletCommonAccountBasicCrossAccountIdRepr | { Substrate: any } | { Ethereum: any } | string | Uint8Array) => Observable<u32>, [u32, PalletCommonAccountBasicCrossAccountIdRepr]> & QueryableStorageEntry<ApiType, [u32, PalletCommonAccountBasicCrossAccountIdRepr]>;
+ allowance: AugmentedQuery<ApiType, (arg1: u32 | AnyNumber | Uint8Array, arg2: u32 | AnyNumber | Uint8Array, arg3: PalletCommonAccountBasicCrossAccountIdRepr | { Substrate: any } | { Ethereum: any } | string | Uint8Array, arg4: PalletCommonAccountBasicCrossAccountIdRepr | { Substrate: any } | { Ethereum: any } | string | Uint8Array) => Observable<u128>, [u32, u32, PalletCommonAccountBasicCrossAccountIdRepr, PalletCommonAccountBasicCrossAccountIdRepr]> & QueryableStorageEntry<ApiType, [u32, u32, PalletCommonAccountBasicCrossAccountIdRepr, PalletCommonAccountBasicCrossAccountIdRepr]>;
+ balance: AugmentedQuery<ApiType, (arg1: u32 | AnyNumber | Uint8Array, arg2: u32 | AnyNumber | Uint8Array, arg3: PalletCommonAccountBasicCrossAccountIdRepr | { Substrate: any } | { Ethereum: any } | string | Uint8Array) => Observable<u128>, [u32, u32, PalletCommonAccountBasicCrossAccountIdRepr]> & QueryableStorageEntry<ApiType, [u32, u32, PalletCommonAccountBasicCrossAccountIdRepr]>;
+ /**
+ * Used to enumerate tokens owned by account
+ **/
+ owned: AugmentedQuery<ApiType, (arg1: u32 | AnyNumber | Uint8Array, arg2: PalletCommonAccountBasicCrossAccountIdRepr | { Substrate: any } | { Ethereum: any } | string | Uint8Array, arg3: u32 | AnyNumber | Uint8Array) => Observable<bool>, [u32, PalletCommonAccountBasicCrossAccountIdRepr, u32]> & QueryableStorageEntry<ApiType, [u32, PalletCommonAccountBasicCrossAccountIdRepr, u32]>;
+ tokenData: AugmentedQuery<ApiType, (arg1: u32 | AnyNumber | Uint8Array, arg2: u32 | AnyNumber | Uint8Array) => Observable<PalletRefungibleItemData>, [u32, u32]> & QueryableStorageEntry<ApiType, [u32, u32]>;
+ tokensBurnt: AugmentedQuery<ApiType, (arg: u32 | AnyNumber | Uint8Array) => Observable<u32>, [u32]> & QueryableStorageEntry<ApiType, [u32]>;
+ tokensMinted: AugmentedQuery<ApiType, (arg: u32 | AnyNumber | Uint8Array) => Observable<u32>, [u32]> & QueryableStorageEntry<ApiType, [u32]>;
+ totalSupply: AugmentedQuery<ApiType, (arg1: u32 | AnyNumber | Uint8Array, arg2: u32 | AnyNumber | Uint8Array) => Observable<u128>, [u32, u32]> & QueryableStorageEntry<ApiType, [u32, u32]>;
+ /**
+ * Generic query
+ **/
+ [key: string]: QueryableStorageEntry<ApiType>;
+ };
+ scheduler: {
+ /**
+ * Items to be executed, indexed by the block number that they should be executed on.
+ **/
+ agenda: AugmentedQuery<ApiType, (arg: u32 | AnyNumber | Uint8Array) => Observable<Vec<Option<PalletUnqSchedulerScheduledV2>>>, [u32]> & QueryableStorageEntry<ApiType, [u32]>;
+ /**
+ * Lookup from identity to the block number and index of the task.
+ **/
+ lookup: AugmentedQuery<ApiType, (arg: Bytes | string | Uint8Array) => Observable<Option<ITuple<[u32, u32]>>>, [Bytes]> & QueryableStorageEntry<ApiType, [Bytes]>;
+ specAgenda: AugmentedQuery<ApiType, (arg: u32 | AnyNumber | Uint8Array) => Observable<Vec<Option<PalletUnqSchedulerCallSpec>>>, [u32]> & QueryableStorageEntry<ApiType, [u32]>;
+ /**
+ * Storage version of the pallet.
+ *
+ * New networks start with last version.
+ **/
+ storageVersion: AugmentedQuery<ApiType, () => Observable<PalletUnqSchedulerReleases>, []> & QueryableStorageEntry<ApiType, []>;
+ /**
+ * Generic query
+ **/
+ [key: string]: QueryableStorageEntry<ApiType>;
+ };
+ sudo: {
+ /**
+ * The `AccountId` of the sudo key.
+ **/
+ key: AugmentedQuery<ApiType, () => Observable<AccountId32>, []> & QueryableStorageEntry<ApiType, []>;
+ /**
+ * Generic query
+ **/
+ [key: string]: QueryableStorageEntry<ApiType>;
+ };
+ system: {
+ /**
+ * The full account information for a particular account ID.
+ **/
+ account: AugmentedQuery<ApiType, (arg: AccountId32 | string | Uint8Array) => Observable<FrameSystemAccountInfo>, [AccountId32]> & QueryableStorageEntry<ApiType, [AccountId32]>;
+ /**
+ * Total length (in bytes) for all extrinsics put together, for the current block.
+ **/
+ allExtrinsicsLen: AugmentedQuery<ApiType, () => Observable<Option<u32>>, []> & QueryableStorageEntry<ApiType, []>;
+ /**
+ * Map of block numbers to block hashes.
+ **/
+ blockHash: AugmentedQuery<ApiType, (arg: u32 | AnyNumber | Uint8Array) => Observable<H256>, [u32]> & QueryableStorageEntry<ApiType, [u32]>;
+ /**
+ * The current weight for the block.
+ **/
+ blockWeight: AugmentedQuery<ApiType, () => Observable<FrameSupportWeightsPerDispatchClassU64>, []> & QueryableStorageEntry<ApiType, []>;
+ /**
+ * Digest of the current block, also part of the block header.
+ **/
+ digest: AugmentedQuery<ApiType, () => Observable<SpRuntimeGenericDigest>, []> & QueryableStorageEntry<ApiType, []>;
+ /**
+ * The number of events in the `Events<T>` list.
+ **/
+ eventCount: AugmentedQuery<ApiType, () => Observable<u32>, []> & QueryableStorageEntry<ApiType, []>;
+ /**
+ * Events deposited for the current block.
+ *
+ * NOTE: This storage item is explicitly unbounded since it is never intended to be read
+ * from within the runtime.
+ **/
+ events: AugmentedQuery<ApiType, () => Observable<Vec<FrameSystemEventRecord>>, []> & QueryableStorageEntry<ApiType, []>;
+ /**
+ * Mapping between a topic (represented by T::Hash) and a vector of indexes
+ * of events in the `<Events<T>>` list.
+ *
+ * All topic vectors have deterministic storage locations depending on the topic. This
+ * allows light-clients to leverage the changes trie storage tracking mechanism and
+ * in case of changes fetch the list of events of interest.
+ *
+ * The value has the type `(T::BlockNumber, EventIndex)` because if we used only just
+ * the `EventIndex` then in case if the topic has the same contents on the next block
+ * no notification will be triggered thus the event might be lost.
+ **/
+ eventTopics: AugmentedQuery<ApiType, (arg: H256 | string | Uint8Array) => Observable<Vec<ITuple<[u32, u32]>>>, [H256]> & QueryableStorageEntry<ApiType, [H256]>;
+ /**
+ * The execution phase of the block.
+ **/
+ executionPhase: AugmentedQuery<ApiType, () => Observable<Option<FrameSystemPhase>>, []> & QueryableStorageEntry<ApiType, []>;
+ /**
+ * Total extrinsics count for the current block.
+ **/
+ extrinsicCount: AugmentedQuery<ApiType, () => Observable<Option<u32>>, []> & QueryableStorageEntry<ApiType, []>;
+ /**
+ * Extrinsics data for the current block (maps an extrinsic's index to its data).
+ **/
+ extrinsicData: AugmentedQuery<ApiType, (arg: u32 | AnyNumber | Uint8Array) => Observable<Bytes>, [u32]> & QueryableStorageEntry<ApiType, [u32]>;
+ /**
+ * Stores the `spec_version` and `spec_name` of when the last runtime upgrade happened.
+ **/
+ lastRuntimeUpgrade: AugmentedQuery<ApiType, () => Observable<Option<FrameSystemLastRuntimeUpgradeInfo>>, []> & QueryableStorageEntry<ApiType, []>;
+ /**
+ * The current block number being processed. Set by `execute_block`.
+ **/
+ number: AugmentedQuery<ApiType, () => Observable<u32>, []> & QueryableStorageEntry<ApiType, []>;
+ /**
+ * Hash of the previous block.
+ **/
+ parentHash: AugmentedQuery<ApiType, () => Observable<H256>, []> & QueryableStorageEntry<ApiType, []>;
+ /**
+ * True if we have upgraded so that AccountInfo contains three types of `RefCount`. False
+ * (default) if not.
+ **/
+ upgradedToTripleRefCount: AugmentedQuery<ApiType, () => Observable<bool>, []> & QueryableStorageEntry<ApiType, []>;
+ /**
+ * True if we have upgraded so that `type RefCount` is `u32`. False (default) if not.
+ **/
+ upgradedToU32RefCount: AugmentedQuery<ApiType, () => Observable<bool>, []> & QueryableStorageEntry<ApiType, []>;
+ /**
+ * Generic query
+ **/
+ [key: string]: QueryableStorageEntry<ApiType>;
+ };
+ timestamp: {
+ /**
+ * Did the timestamp get updated in this block?
+ **/
+ didUpdate: AugmentedQuery<ApiType, () => Observable<bool>, []> & QueryableStorageEntry<ApiType, []>;
+ /**
+ * Current time for the current block.
+ **/
+ now: AugmentedQuery<ApiType, () => Observable<u64>, []> & QueryableStorageEntry<ApiType, []>;
+ /**
+ * Generic query
+ **/
+ [key: string]: QueryableStorageEntry<ApiType>;
+ };
+ transactionPayment: {
+ nextFeeMultiplier: AugmentedQuery<ApiType, () => Observable<u128>, []> & QueryableStorageEntry<ApiType, []>;
+ storageVersion: AugmentedQuery<ApiType, () => Observable<PalletTransactionPaymentReleases>, []> & QueryableStorageEntry<ApiType, []>;
+ /**
+ * Generic query
+ **/
+ [key: string]: QueryableStorageEntry<ApiType>;
+ };
+ treasury: {
+ /**
+ * Proposal indices that have been approved but not yet awarded.
+ **/
+ approvals: AugmentedQuery<ApiType, () => Observable<Vec<u32>>, []> & QueryableStorageEntry<ApiType, []>;
+ /**
+ * Number of proposals that have been made.
+ **/
+ proposalCount: AugmentedQuery<ApiType, () => Observable<u32>, []> & QueryableStorageEntry<ApiType, []>;
+ /**
+ * Proposals that have been made.
+ **/
+ proposals: AugmentedQuery<ApiType, (arg: u32 | AnyNumber | Uint8Array) => Observable<Option<PalletTreasuryProposal>>, [u32]> & QueryableStorageEntry<ApiType, [u32]>;
+ /**
+ * Generic query
+ **/
+ [key: string]: QueryableStorageEntry<ApiType>;
+ };
+ vesting: {
+ /**
+ * Storage version of the pallet.
+ *
+ * New networks start with latest version, as determined by the genesis build.
+ **/
+ storageVersion: AugmentedQuery<ApiType, () => Observable<PalletVestingReleases>, []> & QueryableStorageEntry<ApiType, []>;
+ /**
+ * Information regarding the vesting of a given account.
+ **/
+ vesting: AugmentedQuery<ApiType, (arg: AccountId32 | string | Uint8Array) => Observable<Option<Vec<PalletVestingVestingInfo>>>, [AccountId32]> & QueryableStorageEntry<ApiType, [AccountId32]>;
+ /**
+ * Generic query
+ **/
+ [key: string]: QueryableStorageEntry<ApiType>;
+ };
+ xcmpQueue: {
+ /**
+ * Inbound aggregate XCMP messages. It can only be one per ParaId/block.
+ **/
+ inboundXcmpMessages: AugmentedQuery<ApiType, (arg1: u32 | AnyNumber | Uint8Array, arg2: u32 | AnyNumber | Uint8Array) => Observable<Bytes>, [u32, u32]> & QueryableStorageEntry<ApiType, [u32, u32]>;
+ /**
+ * Status of the inbound XCMP channels.
+ **/
+ inboundXcmpStatus: AugmentedQuery<ApiType, () => Observable<Vec<ITuple<[u32, CumulusPalletXcmpQueueInboundStatus, Vec<ITuple<[u32, PolkadotParachainPrimitivesXcmpMessageFormat]>>]>>>, []> & QueryableStorageEntry<ApiType, []>;
+ /**
+ * The messages outbound in a given XCMP channel.
+ **/
+ outboundXcmpMessages: AugmentedQuery<ApiType, (arg1: u32 | AnyNumber | Uint8Array, arg2: u16 | AnyNumber | Uint8Array) => Observable<Bytes>, [u32, u16]> & QueryableStorageEntry<ApiType, [u32, u16]>;
+ /**
+ * The non-empty XCMP channels in order of becoming non-empty, and the index of the first
+ * and last outbound message. If the two indices are equal, then it indicates an empty
+ * queue and there must be a non-`Ok` `OutboundStatus`. We assume queues grow no greater
+ * than 65535 items. Queue indices for normal messages begin at one; zero is reserved in
+ * case of the need to send a high-priority signal message this block.
+ * The bool is true if there is a signal message waiting to be sent.
+ **/
+ outboundXcmpStatus: AugmentedQuery<ApiType, () => Observable<Vec<ITuple<[u32, CumulusPalletXcmpQueueOutboundStatus, bool, u16, u16]>>>, []> & QueryableStorageEntry<ApiType, []>;
+ /**
+ * The configuration which controls the dynamics of the outbound queue.
+ **/
+ queueConfig: AugmentedQuery<ApiType, () => Observable<CumulusPalletXcmpQueueQueueConfigData>, []> & QueryableStorageEntry<ApiType, []>;
+ /**
+ * Any signal messages waiting to be sent.
+ **/
+ signalMessages: AugmentedQuery<ApiType, (arg: u32 | AnyNumber | Uint8Array) => Observable<Bytes>, [u32]> & QueryableStorageEntry<ApiType, [u32]>;
+ /**
+ * Generic query
+ **/
+ [key: string]: QueryableStorageEntry<ApiType>;
+ };
+ }
+
+ export interface QueryableStorage<ApiType extends ApiTypes> extends AugmentedQueries<ApiType> {
+ [key: string]: QueryableModuleStorage<ApiType>;
+ }
+}
tests/src/interfaces/augment-api-rpc.tsdiffbeforeafterboth--- /dev/null
+++ b/tests/src/interfaces/augment-api-rpc.ts
@@ -0,0 +1,611 @@
+// Auto-generated via `yarn polkadot-types-from-chain`, do not edit
+/* eslint-disable */
+
+import type { NftDataStructsCollectionId, NftDataStructsTokenId, PalletCommonAccountBasicCrossAccountIdRepr } from './nft';
+import type { Bytes, HashMap, Json, Metadata, Null, Option, StorageKey, Text, U256, U64, Vec, bool, u128, u32, u64 } from '@polkadot/types';
+import type { ExtrinsicOrHash, ExtrinsicStatus } from '@polkadot/types/interfaces/author';
+import type { EpochAuthorship } from '@polkadot/types/interfaces/babe';
+import type { BeefySignedCommitment } from '@polkadot/types/interfaces/beefy';
+import type { BlockHash } from '@polkadot/types/interfaces/chain';
+import type { PrefixedStorageKey } from '@polkadot/types/interfaces/childstate';
+import type { AuthorityId } from '@polkadot/types/interfaces/consensus';
+import type { ContractCallRequest, ContractExecResult, ContractInstantiateResult, InstantiateRequest } from '@polkadot/types/interfaces/contracts';
+import type { CreatedBlock } from '@polkadot/types/interfaces/engine';
+import type { EthAccount, EthCallRequest, EthFilter, EthFilterChanges, EthLog, EthReceipt, EthRichBlock, EthSubKind, EthSubParams, EthSyncStatus, EthTransaction, EthTransactionRequest, EthWork } from '@polkadot/types/interfaces/eth';
+import type { Extrinsic } from '@polkadot/types/interfaces/extrinsics';
+import type { EncodedFinalityProofs, JustificationNotification, ReportedRoundStates } from '@polkadot/types/interfaces/grandpa';
+import type { MmrLeafProof } from '@polkadot/types/interfaces/mmr';
+import type { StorageKind } from '@polkadot/types/interfaces/offchain';
+import type { FeeDetails, RuntimeDispatchInfo } from '@polkadot/types/interfaces/payment';
+import type { RpcMethods } from '@polkadot/types/interfaces/rpc';
+import type { AccountId, BlockNumber, H160, H256, H64, Hash, Header, Index, Justification, KeyValue, SignedBlock, StorageData } from '@polkadot/types/interfaces/runtime';
+import type { ReadProof, RuntimeVersion, TraceBlockResponse } from '@polkadot/types/interfaces/state';
+import type { ApplyExtrinsicResult, ChainProperties, ChainType, Health, NetworkState, NodeRole, PeerInfo, SyncState } from '@polkadot/types/interfaces/system';
+import type { AnyNumber, Codec, IExtrinsic, Observable } from '@polkadot/types/types';
+
+declare module '@polkadot/rpc-core/types.jsonrpc' {
+ export interface RpcInterface {
+ author: {
+ /**
+ * Returns true if the keystore has private keys for the given public key and key type.
+ **/
+ hasKey: AugmentedRpc<(publicKey: Bytes | string | Uint8Array, keyType: Text | string) => Observable<bool>>;
+ /**
+ * Returns true if the keystore has private keys for the given session public keys.
+ **/
+ hasSessionKeys: AugmentedRpc<(sessionKeys: Bytes | string | Uint8Array) => Observable<bool>>;
+ /**
+ * Insert a key into the keystore.
+ **/
+ insertKey: AugmentedRpc<(keyType: Text | string, suri: Text | string, publicKey: Bytes | string | Uint8Array) => Observable<Bytes>>;
+ /**
+ * Returns all pending extrinsics, potentially grouped by sender
+ **/
+ pendingExtrinsics: AugmentedRpc<() => Observable<Vec<Extrinsic>>>;
+ /**
+ * Remove given extrinsic from the pool and temporarily ban it to prevent reimporting
+ **/
+ removeExtrinsic: AugmentedRpc<(bytesOrHash: Vec<ExtrinsicOrHash> | (ExtrinsicOrHash | { Hash: any } | { Extrinsic: any } | string | Uint8Array)[]) => Observable<Vec<Hash>>>;
+ /**
+ * Generate new session keys and returns the corresponding public keys
+ **/
+ rotateKeys: AugmentedRpc<() => Observable<Bytes>>;
+ /**
+ * Submit and subscribe to watch an extrinsic until unsubscribed
+ **/
+ submitAndWatchExtrinsic: AugmentedRpc<(extrinsic: IExtrinsic) => Observable<ExtrinsicStatus>>;
+ /**
+ * Submit a fully formatted extrinsic for block inclusion
+ **/
+ submitExtrinsic: AugmentedRpc<(extrinsic: IExtrinsic) => Observable<Hash>>;
+ };
+ babe: {
+ /**
+ * Returns data about which slots (primary or secondary) can be claimed in the current epoch with the keys in the keystore
+ **/
+ epochAuthorship: AugmentedRpc<() => Observable<HashMap<AuthorityId, EpochAuthorship>>>;
+ };
+ beefy: {
+ /**
+ * Returns the block most recently finalized by BEEFY, alongside side its justification.
+ **/
+ subscribeJustifications: AugmentedRpc<() => Observable<BeefySignedCommitment>>;
+ };
+ chain: {
+ /**
+ * Get header and body of a relay chain block
+ **/
+ getBlock: AugmentedRpc<(hash?: BlockHash | string | Uint8Array) => Observable<SignedBlock>>;
+ /**
+ * Get the block hash for a specific block
+ **/
+ getBlockHash: AugmentedRpc<(blockNumber?: BlockNumber | AnyNumber | Uint8Array) => Observable<BlockHash>>;
+ /**
+ * Get hash of the last finalized block in the canon chain
+ **/
+ getFinalizedHead: AugmentedRpc<() => Observable<BlockHash>>;
+ /**
+ * Retrieves the header for a specific block
+ **/
+ getHeader: AugmentedRpc<(hash?: BlockHash | string | Uint8Array) => Observable<Header>>;
+ /**
+ * Retrieves the newest header via subscription
+ **/
+ subscribeAllHeads: AugmentedRpc<() => Observable<Header>>;
+ /**
+ * Retrieves the best finalized header via subscription
+ **/
+ subscribeFinalizedHeads: AugmentedRpc<() => Observable<Header>>;
+ /**
+ * Retrieves the best header via subscription
+ **/
+ subscribeNewHeads: AugmentedRpc<() => Observable<Header>>;
+ };
+ childstate: {
+ /**
+ * Returns the keys with prefix from a child storage, leave empty to get all the keys
+ **/
+ getKeys: AugmentedRpc<(childKey: PrefixedStorageKey | string | Uint8Array, prefix: StorageKey | string | Uint8Array | any, at?: Hash | string | Uint8Array) => Observable<Vec<StorageKey>>>;
+ /**
+ * Returns the keys with prefix from a child storage with pagination support
+ **/
+ getKeysPaged: AugmentedRpc<(childKey: PrefixedStorageKey | string | Uint8Array, prefix: StorageKey | string | Uint8Array | any, count: u32 | AnyNumber | Uint8Array, startKey?: StorageKey | string | Uint8Array | any, at?: Hash | string | Uint8Array) => Observable<Vec<StorageKey>>>;
+ /**
+ * Returns a child storage entry at a specific block state
+ **/
+ getStorage: AugmentedRpc<(childKey: PrefixedStorageKey | string | Uint8Array, key: StorageKey | string | Uint8Array | any, at?: Hash | string | Uint8Array) => Observable<Option<StorageData>>>;
+ /**
+ * Returns child storage entries for multiple keys at a specific block state
+ **/
+ getStorageEntries: AugmentedRpc<(childKey: PrefixedStorageKey | string | Uint8Array, keys: Vec<StorageKey> | (StorageKey | string | Uint8Array | any)[], at?: Hash | string | Uint8Array) => Observable<Vec<Option<StorageData>>>>;
+ /**
+ * Returns the hash of a child storage entry at a block state
+ **/
+ getStorageHash: AugmentedRpc<(childKey: PrefixedStorageKey | string | Uint8Array, key: StorageKey | string | Uint8Array | any, at?: Hash | string | Uint8Array) => Observable<Option<Hash>>>;
+ /**
+ * Returns the size of a child storage entry at a block state
+ **/
+ getStorageSize: AugmentedRpc<(childKey: PrefixedStorageKey | string | Uint8Array, key: StorageKey | string | Uint8Array | any, at?: Hash | string | Uint8Array) => Observable<Option<u64>>>;
+ };
+ contracts: {
+ /**
+ * Executes a call to a contract
+ **/
+ call: AugmentedRpc<(callRequest: ContractCallRequest | { origin?: any; dest?: any; value?: any; gasLimit?: any; inputData?: any } | string | Uint8Array, at?: BlockHash | string | Uint8Array) => Observable<ContractExecResult>>;
+ /**
+ * Returns the value under a specified storage key in a contract
+ **/
+ getStorage: AugmentedRpc<(address: AccountId | string | Uint8Array, key: H256 | string | Uint8Array, at?: BlockHash | string | Uint8Array) => Observable<Option<Bytes>>>;
+ /**
+ * Instantiate a new contract
+ **/
+ instantiate: AugmentedRpc<(request: InstantiateRequest | { origin?: any; endowment?: any; gasLimit?: any; code?: any; data?: any; salt?: any } | string | Uint8Array, at?: BlockHash | string | Uint8Array) => Observable<ContractInstantiateResult>>;
+ /**
+ * Returns the projected time a given contract will be able to sustain paying its rent
+ **/
+ rentProjection: AugmentedRpc<(address: AccountId | string | Uint8Array, at?: BlockHash | string | Uint8Array) => Observable<Option<BlockNumber>>>;
+ };
+ engine: {
+ /**
+ * Instructs the manual-seal authorship task to create a new block
+ **/
+ createBlock: AugmentedRpc<(createEmpty: bool | boolean | Uint8Array, finalize: bool | boolean | Uint8Array, parentHash?: BlockHash | string | Uint8Array) => Observable<CreatedBlock>>;
+ /**
+ * Instructs the manual-seal authorship task to finalize a block
+ **/
+ finalizeBlock: AugmentedRpc<(hash: BlockHash | string | Uint8Array, justification?: Justification) => Observable<bool>>;
+ };
+ eth: {
+ /**
+ * Returns accounts list.
+ **/
+ accounts: AugmentedRpc<() => Observable<Vec<H160>>>;
+ /**
+ * Returns the blockNumber
+ **/
+ blockNumber: AugmentedRpc<() => Observable<U256>>;
+ /**
+ * Call contract, returning the output data.
+ **/
+ call: AugmentedRpc<(request: EthCallRequest | { from?: any; to?: any; gasPrice?: any; gas?: any; value?: any; data?: any; nonce?: any } | string | Uint8Array, number?: BlockNumber | AnyNumber | Uint8Array) => Observable<Bytes>>;
+ /**
+ * Returns the chain ID used for transaction signing at the current best block. None is returned if not available.
+ **/
+ chainId: AugmentedRpc<() => Observable<U64>>;
+ /**
+ * Returns block author.
+ **/
+ coinbase: AugmentedRpc<() => Observable<H160>>;
+ /**
+ * Estimate gas needed for execution of given contract.
+ **/
+ estimateGas: AugmentedRpc<(request: EthCallRequest | { from?: any; to?: any; gasPrice?: any; gas?: any; value?: any; data?: any; nonce?: any } | string | Uint8Array, number?: BlockNumber | AnyNumber | Uint8Array) => Observable<U256>>;
+ /**
+ * Returns current gas price.
+ **/
+ gasPrice: AugmentedRpc<() => Observable<U256>>;
+ /**
+ * Returns balance of the given account.
+ **/
+ getBalance: AugmentedRpc<(address: H160 | string | Uint8Array, number?: BlockNumber | AnyNumber | Uint8Array) => Observable<U256>>;
+ /**
+ * Returns block with given hash.
+ **/
+ getBlockByHash: AugmentedRpc<(hash: H256 | string | Uint8Array, full: bool | boolean | Uint8Array) => Observable<Option<EthRichBlock>>>;
+ /**
+ * Returns block with given number.
+ **/
+ getBlockByNumber: AugmentedRpc<(block: BlockNumber | AnyNumber | Uint8Array, full: bool | boolean | Uint8Array) => Observable<Option<EthRichBlock>>>;
+ /**
+ * Returns the number of transactions in a block with given hash.
+ **/
+ getBlockTransactionCountByHash: AugmentedRpc<(hash: H256 | string | Uint8Array) => Observable<U256>>;
+ /**
+ * Returns the number of transactions in a block with given block number.
+ **/
+ getBlockTransactionCountByNumber: AugmentedRpc<(block: BlockNumber | AnyNumber | Uint8Array) => Observable<U256>>;
+ /**
+ * Returns the code at given address at given time (block number).
+ **/
+ getCode: AugmentedRpc<(address: H160 | string | Uint8Array, number?: BlockNumber | AnyNumber | Uint8Array) => Observable<Bytes>>;
+ /**
+ * Returns filter changes since last poll.
+ **/
+ getFilterChanges: AugmentedRpc<(index: U256 | AnyNumber | Uint8Array) => Observable<EthFilterChanges>>;
+ /**
+ * Returns all logs matching given filter (in a range 'from' - 'to').
+ **/
+ getFilterLogs: AugmentedRpc<(index: U256 | AnyNumber | Uint8Array) => Observable<Vec<EthLog>>>;
+ /**
+ * Returns logs matching given filter object.
+ **/
+ getLogs: AugmentedRpc<(filter: EthFilter | { fromBlock?: any; toBlock?: any; blockHash?: any; address?: any; topics?: any } | string | Uint8Array) => Observable<Vec<EthLog>>>;
+ /**
+ * Returns proof for account and storage.
+ **/
+ getProof: AugmentedRpc<(address: H160 | string | Uint8Array, storageKeys: Vec<H256> | (H256 | string | Uint8Array)[], number: BlockNumber | AnyNumber | Uint8Array) => Observable<EthAccount>>;
+ /**
+ * Returns content of the storage at given address.
+ **/
+ getStorageAt: AugmentedRpc<(address: H160 | string | Uint8Array, index: U256 | AnyNumber | Uint8Array, number?: BlockNumber | AnyNumber | Uint8Array) => Observable<H256>>;
+ /**
+ * Returns transaction at given block hash and index.
+ **/
+ getTransactionByBlockHashAndIndex: AugmentedRpc<(hash: H256 | string | Uint8Array, index: U256 | AnyNumber | Uint8Array) => Observable<EthTransaction>>;
+ /**
+ * Returns transaction by given block number and index.
+ **/
+ getTransactionByBlockNumberAndIndex: AugmentedRpc<(number: BlockNumber | AnyNumber | Uint8Array, index: U256 | AnyNumber | Uint8Array) => Observable<EthTransaction>>;
+ /**
+ * Get transaction by its hash.
+ **/
+ getTransactionByHash: AugmentedRpc<(hash: H256 | string | Uint8Array) => Observable<EthTransaction>>;
+ /**
+ * Returns the number of transactions sent from given address at given time (block number).
+ **/
+ getTransactionCount: AugmentedRpc<(hash: H256 | string | Uint8Array, number?: BlockNumber | AnyNumber | Uint8Array) => Observable<U256>>;
+ /**
+ * Returns transaction receipt by transaction hash.
+ **/
+ getTransactionReceipt: AugmentedRpc<(hash: H256 | string | Uint8Array) => Observable<EthReceipt>>;
+ /**
+ * Returns an uncles at given block and index.
+ **/
+ getUncleByBlockHashAndIndex: AugmentedRpc<(hash: H256 | string | Uint8Array, index: U256 | AnyNumber | Uint8Array) => Observable<EthRichBlock>>;
+ /**
+ * Returns an uncles at given block and index.
+ **/
+ getUncleByBlockNumberAndIndex: AugmentedRpc<(number: BlockNumber | AnyNumber | Uint8Array, index: U256 | AnyNumber | Uint8Array) => Observable<EthRichBlock>>;
+ /**
+ * Returns the number of uncles in a block with given hash.
+ **/
+ getUncleCountByBlockHash: AugmentedRpc<(hash: H256 | string | Uint8Array) => Observable<U256>>;
+ /**
+ * Returns the number of uncles in a block with given block number.
+ **/
+ getUncleCountByBlockNumber: AugmentedRpc<(number: BlockNumber | AnyNumber | Uint8Array) => Observable<U256>>;
+ /**
+ * Returns the hash of the current block, the seedHash, and the boundary condition to be met.
+ **/
+ getWork: AugmentedRpc<() => Observable<EthWork>>;
+ /**
+ * Returns the number of hashes per second that the node is mining with.
+ **/
+ hashrate: AugmentedRpc<() => Observable<U256>>;
+ /**
+ * Returns true if client is actively mining new blocks.
+ **/
+ mining: AugmentedRpc<() => Observable<bool>>;
+ /**
+ * Returns id of new block filter.
+ **/
+ newBlockFilter: AugmentedRpc<() => Observable<U256>>;
+ /**
+ * Returns id of new filter.
+ **/
+ newFilter: AugmentedRpc<(filter: EthFilter | { fromBlock?: any; toBlock?: any; blockHash?: any; address?: any; topics?: any } | string | Uint8Array) => Observable<U256>>;
+ /**
+ * Returns id of new block filter.
+ **/
+ newPendingTransactionFilter: AugmentedRpc<() => Observable<U256>>;
+ /**
+ * Returns protocol version encoded as a string (quotes are necessary).
+ **/
+ protocolVersion: AugmentedRpc<() => Observable<u64>>;
+ /**
+ * Sends signed transaction, returning its hash.
+ **/
+ sendRawTransaction: AugmentedRpc<(bytes: Bytes | string | Uint8Array) => Observable<H256>>;
+ /**
+ * Sends transaction; will block waiting for signer to return the transaction hash
+ **/
+ sendTransaction: AugmentedRpc<(tx: EthTransactionRequest | { from?: any; to?: any; gasPrice?: any; gas?: any; value?: any; data?: any; nonce?: any } | string | Uint8Array) => Observable<H256>>;
+ /**
+ * Used for submitting mining hashrate.
+ **/
+ submitHashrate: AugmentedRpc<(index: U256 | AnyNumber | Uint8Array, hash: H256 | string | Uint8Array) => Observable<bool>>;
+ /**
+ * Used for submitting a proof-of-work solution.
+ **/
+ submitWork: AugmentedRpc<(nonce: H64 | string | Uint8Array, headerHash: H256 | string | Uint8Array, mixDigest: H256 | string | Uint8Array) => Observable<bool>>;
+ /**
+ * Subscribe to Eth subscription.
+ **/
+ subscribe: AugmentedRpc<(kind: EthSubKind | 'newHeads' | 'logs' | 'newPendingTransactions' | 'syncing' | number | Uint8Array, params?: EthSubParams | { None: any } | { Logs: any } | string | Uint8Array) => Observable<Null>>;
+ /**
+ * Returns an object with data about the sync status or false.
+ **/
+ syncing: AugmentedRpc<() => Observable<EthSyncStatus>>;
+ /**
+ * Uninstalls filter.
+ **/
+ uninstallFilter: AugmentedRpc<(index: U256 | AnyNumber | Uint8Array) => Observable<bool>>;
+ };
+ grandpa: {
+ /**
+ * Prove finality for the range (begin; end] hash.
+ **/
+ proveFinality: AugmentedRpc<(begin: BlockHash | string | Uint8Array, end: BlockHash | string | Uint8Array, authoritiesSetId?: u64 | AnyNumber | Uint8Array) => Observable<Option<EncodedFinalityProofs>>>;
+ /**
+ * Returns the state of the current best round state as well as the ongoing background rounds
+ **/
+ roundState: AugmentedRpc<() => Observable<ReportedRoundStates>>;
+ /**
+ * Subscribes to grandpa justifications
+ **/
+ subscribeJustifications: AugmentedRpc<() => Observable<JustificationNotification>>;
+ };
+ mmr: {
+ /**
+ * Generate MMR proof for given leaf index.
+ **/
+ generateProof: AugmentedRpc<(leafIndex: u64 | AnyNumber | Uint8Array, at?: BlockHash | string | Uint8Array) => Observable<MmrLeafProof>>;
+ };
+ net: {
+ /**
+ * Returns true if client is actively listening for network connections. Otherwise false.
+ **/
+ listening: AugmentedRpc<() => Observable<bool>>;
+ /**
+ * Returns number of peers connected to node.
+ **/
+ peerCount: AugmentedRpc<() => Observable<Text>>;
+ /**
+ * Returns protocol version.
+ **/
+ version: AugmentedRpc<() => Observable<Text>>;
+ };
+ nft: {
+ /**
+ * Get amount of different user tokens
+ **/
+ accountBalance: AugmentedRpc<(collection: NftDataStructsCollectionId | AnyNumber | Uint8Array, account: PalletCommonAccountBasicCrossAccountIdRepr | { Substrate: any } | { Ethereum: any } | string | Uint8Array, at?: Hash | string | Uint8Array) => Observable<u32>>;
+ /**
+ * Get tokens owned by account
+ **/
+ accountTokens: AugmentedRpc<(collection: NftDataStructsCollectionId | AnyNumber | Uint8Array, account: PalletCommonAccountBasicCrossAccountIdRepr | { Substrate: any } | { Ethereum: any } | string | Uint8Array, at?: Hash | string | Uint8Array) => Observable<Vec<NftDataStructsTokenId>>>;
+ /**
+ * Get admin list
+ **/
+ adminlist: AugmentedRpc<(collection: NftDataStructsCollectionId | AnyNumber | Uint8Array, at?: Hash | string | Uint8Array) => Observable<Vec<PalletCommonAccountBasicCrossAccountIdRepr>>>;
+ /**
+ * Get allowed amount
+ **/
+ allowance: AugmentedRpc<(collection: NftDataStructsCollectionId | AnyNumber | Uint8Array, sender: PalletCommonAccountBasicCrossAccountIdRepr | { Substrate: any } | { Ethereum: any } | string | Uint8Array, spender: PalletCommonAccountBasicCrossAccountIdRepr | { Substrate: any } | { Ethereum: any } | string | Uint8Array, tokenId: NftDataStructsTokenId | AnyNumber | Uint8Array, at?: Hash | string | Uint8Array) => Observable<u128>>;
+ /**
+ * Get allowlist
+ **/
+ allowlist: AugmentedRpc<(collection: NftDataStructsCollectionId | AnyNumber | Uint8Array, at?: Hash | string | Uint8Array) => Observable<Vec<PalletCommonAccountBasicCrossAccountIdRepr>>>;
+ /**
+ * Get amount of specific account token
+ **/
+ balance: AugmentedRpc<(collection: NftDataStructsCollectionId | AnyNumber | Uint8Array, account: PalletCommonAccountBasicCrossAccountIdRepr | { Substrate: any } | { Ethereum: any } | string | Uint8Array, tokenId: NftDataStructsTokenId | AnyNumber | Uint8Array, at?: Hash | string | Uint8Array) => Observable<u128>>;
+ /**
+ * Get tokens contained in collection
+ **/
+ collectionTokens: AugmentedRpc<(collection: NftDataStructsCollectionId | AnyNumber | Uint8Array, at?: Hash | string | Uint8Array) => Observable<Vec<NftDataStructsTokenId>>>;
+ /**
+ * Get token constant metadata
+ **/
+ constMetadata: AugmentedRpc<(collection: NftDataStructsCollectionId | AnyNumber | Uint8Array, tokenId: NftDataStructsTokenId | AnyNumber | Uint8Array, at?: Hash | string | Uint8Array) => Observable<Bytes>>;
+ /**
+ * Get last token id
+ **/
+ lastTokenId: AugmentedRpc<(collection: NftDataStructsCollectionId | AnyNumber | Uint8Array, at?: Hash | string | Uint8Array) => Observable<NftDataStructsTokenId>>;
+ /**
+ * Check if token exists
+ **/
+ tokenExists: AugmentedRpc<(collection: NftDataStructsCollectionId | AnyNumber | Uint8Array, tokenId: NftDataStructsTokenId | AnyNumber | Uint8Array, at?: Hash | string | Uint8Array) => Observable<bool>>;
+ /**
+ * Get token owner
+ **/
+ tokenOwner: AugmentedRpc<(collection: NftDataStructsCollectionId | AnyNumber | Uint8Array, tokenId: NftDataStructsTokenId | AnyNumber | Uint8Array, at?: Hash | string | Uint8Array) => Observable<PalletCommonAccountBasicCrossAccountIdRepr>>;
+ /**
+ * Get token variable metadata
+ **/
+ variableMetadata: AugmentedRpc<(collection: NftDataStructsCollectionId | AnyNumber | Uint8Array, tokenId: NftDataStructsTokenId | AnyNumber | Uint8Array, at?: Hash | string | Uint8Array) => Observable<Bytes>>;
+ };
+ offchain: {
+ /**
+ * Get offchain local storage under given key and prefix
+ **/
+ localStorageGet: AugmentedRpc<(kind: StorageKind | 'PERSISTENT' | 'LOCAL' | number | Uint8Array, key: Bytes | string | Uint8Array) => Observable<Option<Bytes>>>;
+ /**
+ * Set offchain local storage under given key and prefix
+ **/
+ localStorageSet: AugmentedRpc<(kind: StorageKind | 'PERSISTENT' | 'LOCAL' | number | Uint8Array, key: Bytes | string | Uint8Array, value: Bytes | string | Uint8Array) => Observable<Null>>;
+ };
+ payment: {
+ /**
+ * Query the detailed fee of a given encoded extrinsic
+ **/
+ queryFeeDetails: AugmentedRpc<(extrinsic: Bytes | string | Uint8Array, at?: BlockHash | string | Uint8Array) => Observable<FeeDetails>>;
+ /**
+ * Retrieves the fee information for an encoded extrinsic
+ **/
+ queryInfo: AugmentedRpc<(extrinsic: Bytes | string | Uint8Array, at?: BlockHash | string | Uint8Array) => Observable<RuntimeDispatchInfo>>;
+ };
+ rpc: {
+ /**
+ * Retrieves the list of RPC methods that are exposed by the node
+ **/
+ methods: AugmentedRpc<() => Observable<RpcMethods>>;
+ };
+ state: {
+ /**
+ * Perform a call to a builtin on the chain
+ **/
+ call: AugmentedRpc<(method: Text | string, data: Bytes | string | Uint8Array, at?: BlockHash | string | Uint8Array) => Observable<Bytes>>;
+ /**
+ * Retrieves the keys with prefix of a specific child storage
+ **/
+ getChildKeys: AugmentedRpc<(childStorageKey: StorageKey | string | Uint8Array | any, childDefinition: StorageKey | string | Uint8Array | any, childType: u32 | AnyNumber | Uint8Array, key: StorageKey | string | Uint8Array | any, at?: BlockHash | string | Uint8Array) => Observable<Vec<StorageKey>>>;
+ /**
+ * Returns proof of storage for child key entries at a specific block state.
+ **/
+ getChildReadProof: AugmentedRpc<(childStorageKey: PrefixedStorageKey | string | Uint8Array, keys: Vec<StorageKey> | (StorageKey | string | Uint8Array | any)[], at?: BlockHash | string | Uint8Array) => Observable<ReadProof>>;
+ /**
+ * Retrieves the child storage for a key
+ **/
+ getChildStorage: AugmentedRpc<(childStorageKey: StorageKey | string | Uint8Array | any, childDefinition: StorageKey | string | Uint8Array | any, childType: u32 | AnyNumber | Uint8Array, key: StorageKey | string | Uint8Array | any, at?: BlockHash | string | Uint8Array) => Observable<StorageData>>;
+ /**
+ * Retrieves the child storage hash
+ **/
+ getChildStorageHash: AugmentedRpc<(childStorageKey: StorageKey | string | Uint8Array | any, childDefinition: StorageKey | string | Uint8Array | any, childType: u32 | AnyNumber | Uint8Array, key: StorageKey | string | Uint8Array | any, at?: BlockHash | string | Uint8Array) => Observable<Hash>>;
+ /**
+ * Retrieves the child storage size
+ **/
+ getChildStorageSize: AugmentedRpc<(childStorageKey: StorageKey | string | Uint8Array | any, childDefinition: StorageKey | string | Uint8Array | any, childType: u32 | AnyNumber | Uint8Array, key: StorageKey | string | Uint8Array | any, at?: BlockHash | string | Uint8Array) => Observable<u64>>;
+ /**
+ * Retrieves the keys with a certain prefix
+ **/
+ getKeys: AugmentedRpc<(key: StorageKey | string | Uint8Array | any, at?: BlockHash | string | Uint8Array) => Observable<Vec<StorageKey>>>;
+ /**
+ * Returns the keys with prefix with pagination support.
+ **/
+ getKeysPaged: AugmentedRpc<(key: StorageKey | string | Uint8Array | any, count: u32 | AnyNumber | Uint8Array, startKey?: StorageKey | string | Uint8Array | any, at?: BlockHash | string | Uint8Array) => Observable<Vec<StorageKey>>>;
+ /**
+ * Returns the runtime metadata
+ **/
+ getMetadata: AugmentedRpc<(at?: BlockHash | string | Uint8Array) => Observable<Metadata>>;
+ /**
+ * Returns the keys with prefix, leave empty to get all the keys (deprecated: Use getKeysPaged)
+ **/
+ getPairs: AugmentedRpc<(prefix: StorageKey | string | Uint8Array | any, at?: BlockHash | string | Uint8Array) => Observable<Vec<KeyValue>>>;
+ /**
+ * Returns proof of storage entries at a specific block state
+ **/
+ getReadProof: AugmentedRpc<(keys: Vec<StorageKey> | (StorageKey | string | Uint8Array | any)[], at?: BlockHash | string | Uint8Array) => Observable<ReadProof>>;
+ /**
+ * Get the runtime version
+ **/
+ getRuntimeVersion: AugmentedRpc<(at?: BlockHash | string | Uint8Array) => Observable<RuntimeVersion>>;
+ /**
+ * Retrieves the storage for a key
+ **/
+ getStorage: AugmentedRpc<<T = Codec>(key: StorageKey | string | Uint8Array | any, block?: Hash | Uint8Array | string) => Observable<T>>;
+ /**
+ * Retrieves the storage hash
+ **/
+ getStorageHash: AugmentedRpc<(key: StorageKey | string | Uint8Array | any, at?: BlockHash | string | Uint8Array) => Observable<Hash>>;
+ /**
+ * Retrieves the storage size
+ **/
+ getStorageSize: AugmentedRpc<(key: StorageKey | string | Uint8Array | any, at?: BlockHash | string | Uint8Array) => Observable<u64>>;
+ /**
+ * Query historical storage entries (by key) starting from a start block
+ **/
+ queryStorage: AugmentedRpc<<T = Codec[]>(keys: Vec<StorageKey> | (StorageKey | string | Uint8Array | any)[], fromBlock?: Hash | Uint8Array | string, toBlock?: Hash | Uint8Array | string) => Observable<[Hash, T][]>>;
+ /**
+ * Query storage entries (by key) starting at block hash given as the second parameter
+ **/
+ queryStorageAt: AugmentedRpc<<T = Codec[]>(keys: Vec<StorageKey> | (StorageKey | string | Uint8Array | any)[], at?: Hash | Uint8Array | string) => Observable<T>>;
+ /**
+ * Retrieves the runtime version via subscription
+ **/
+ subscribeRuntimeVersion: AugmentedRpc<() => Observable<RuntimeVersion>>;
+ /**
+ * Subscribes to storage changes for the provided keys
+ **/
+ subscribeStorage: AugmentedRpc<<T = Codec[]>(keys?: Vec<StorageKey> | (StorageKey | string | Uint8Array | any)[]) => Observable<T>>;
+ /**
+ * Provides a way to trace the re-execution of a single block
+ **/
+ traceBlock: AugmentedRpc<(block: Hash | string | Uint8Array, targets: Option<Text> | null | object | string | Uint8Array, storageKeys: Option<Text> | null | object | string | Uint8Array) => Observable<TraceBlockResponse>>;
+ };
+ syncstate: {
+ /**
+ * Returns the json-serialized chainspec running the node, with a sync state.
+ **/
+ genSyncSpec: AugmentedRpc<(raw: bool | boolean | Uint8Array) => Observable<Json>>;
+ };
+ system: {
+ /**
+ * Retrieves the next accountIndex as available on the node
+ **/
+ accountNextIndex: AugmentedRpc<(accountId: AccountId | string | Uint8Array) => Observable<Index>>;
+ /**
+ * Adds the supplied directives to the current log filter
+ **/
+ addLogFilter: AugmentedRpc<(directives: Text | string) => Observable<Null>>;
+ /**
+ * Adds a reserved peer
+ **/
+ addReservedPeer: AugmentedRpc<(peer: Text | string) => Observable<Text>>;
+ /**
+ * Retrieves the chain
+ **/
+ chain: AugmentedRpc<() => Observable<Text>>;
+ /**
+ * Retrieves the chain type
+ **/
+ chainType: AugmentedRpc<() => Observable<ChainType>>;
+ /**
+ * Dry run an extrinsic at a given block
+ **/
+ dryRun: AugmentedRpc<(extrinsic: Bytes | string | Uint8Array, at?: BlockHash | string | Uint8Array) => Observable<ApplyExtrinsicResult>>;
+ /**
+ * Return health status of the node
+ **/
+ health: AugmentedRpc<() => Observable<Health>>;
+ /**
+ * The addresses include a trailing /p2p/ with the local PeerId, and are thus suitable to be passed to addReservedPeer or as a bootnode address for example
+ **/
+ localListenAddresses: AugmentedRpc<() => Observable<Vec<Text>>>;
+ /**
+ * Returns the base58-encoded PeerId of the node
+ **/
+ localPeerId: AugmentedRpc<() => Observable<Text>>;
+ /**
+ * Retrieves the node name
+ **/
+ name: AugmentedRpc<() => Observable<Text>>;
+ /**
+ * Returns current state of the network
+ **/
+ networkState: AugmentedRpc<() => Observable<NetworkState>>;
+ /**
+ * Returns the roles the node is running as
+ **/
+ nodeRoles: AugmentedRpc<() => Observable<Vec<NodeRole>>>;
+ /**
+ * Returns the currently connected peers
+ **/
+ peers: AugmentedRpc<() => Observable<Vec<PeerInfo>>>;
+ /**
+ * Get a custom set of properties as a JSON object, defined in the chain spec
+ **/
+ properties: AugmentedRpc<() => Observable<ChainProperties>>;
+ /**
+ * Remove a reserved peer
+ **/
+ removeReservedPeer: AugmentedRpc<(peerId: Text | string) => Observable<Text>>;
+ /**
+ * Returns the list of reserved peers
+ **/
+ reservedPeers: AugmentedRpc<() => Observable<Vec<Text>>>;
+ /**
+ * Resets the log filter to Substrate defaults
+ **/
+ resetLogFilter: AugmentedRpc<() => Observable<Null>>;
+ /**
+ * Returns the state of the syncing of the node
+ **/
+ syncState: AugmentedRpc<() => Observable<SyncState>>;
+ /**
+ * Retrieves the version of the node
+ **/
+ version: AugmentedRpc<() => Observable<Text>>;
+ };
+ web3: {
+ /**
+ * Returns current client version.
+ **/
+ clientVersion: AugmentedRpc<() => Observable<Text>>;
+ /**
+ * Returns sha3 of the given data
+ **/
+ sha3: AugmentedRpc<(data: Bytes | string | Uint8Array) => Observable<H256>>;
+ };
+ }
+}
tests/src/interfaces/augment-api-tx.tsdiffbeforeafterboth--- /dev/null
+++ b/tests/src/interfaces/augment-api-tx.ts
@@ -0,0 +1,1214 @@
+// Auto-generated via `yarn polkadot-types-from-chain`, do not edit
+/* eslint-disable */
+
+import type { EthereumTransactionLegacyTransaction } from './ethereum';
+import type { NftDataStructsAccessMode, NftDataStructsCollectionLimits, NftDataStructsCollectionMode, NftDataStructsCreateItemData, NftDataStructsMetaUpdatePermission, NftDataStructsSchemaVersion, PalletCommonAccountBasicCrossAccountIdRepr } from './nft';
+import type { CumulusPrimitivesParachainInherentParachainInherentData } from './polkadot';
+import type { ApiTypes, SubmittableExtrinsic } from '@polkadot/api/types';
+import type { Bytes, Compact, Option, U256, Vec, bool, u128, u16, u32, u64, u8 } from '@polkadot/types';
+import type { Extrinsic } from '@polkadot/types/interfaces/extrinsics';
+import type { AccountId32, Call, H160, H256, MultiAddress, Perbill } from '@polkadot/types/interfaces/runtime';
+import type { PalletVestingVestingInfo, SpCoreChangesTrieChangesTrieConfiguration, XcmV1MultiLocation, XcmV2WeightLimit, XcmVersionedMultiAssets, XcmVersionedMultiLocation, XcmVersionedXcm } from '@polkadot/types/lookup';
+import type { AnyNumber, ITuple } from '@polkadot/types/types';
+
+declare module '@polkadot/api/types/submittable' {
+ export interface AugmentedSubmittables<ApiType> {
+ balances: {
+ /**
+ * Exactly as `transfer`, except the origin must be root and the source account may be
+ * specified.
+ * # <weight>
+ * - Same as transfer, but additional read and write because the source account is not
+ * assumed to be in the overlay.
+ * # </weight>
+ **/
+ forceTransfer: AugmentedSubmittable<(source: MultiAddress | { Id: any } | { Index: any } | { Raw: any } | { Address32: any } | { Address20: any } | string | Uint8Array, dest: MultiAddress | { Id: any } | { Index: any } | { Raw: any } | { Address32: any } | { Address20: any } | string | Uint8Array, value: Compact<u128> | AnyNumber | Uint8Array) => SubmittableExtrinsic<ApiType>, [MultiAddress, MultiAddress, Compact<u128>]>;
+ /**
+ * Unreserve some balance from a user by force.
+ *
+ * Can only be called by ROOT.
+ **/
+ forceUnreserve: AugmentedSubmittable<(who: MultiAddress | { Id: any } | { Index: any } | { Raw: any } | { Address32: any } | { Address20: any } | string | Uint8Array, amount: u128 | AnyNumber | Uint8Array) => SubmittableExtrinsic<ApiType>, [MultiAddress, u128]>;
+ /**
+ * Set the balances of a given account.
+ *
+ * This will alter `FreeBalance` and `ReservedBalance` in storage. it will
+ * also decrease the total issuance of the system (`TotalIssuance`).
+ * If the new free or reserved balance is below the existential deposit,
+ * it will reset the account nonce (`frame_system::AccountNonce`).
+ *
+ * The dispatch origin for this call is `root`.
+ *
+ * # <weight>
+ * - Independent of the arguments.
+ * - Contains a limited number of reads and writes.
+ * ---------------------
+ * - Base Weight:
+ * - Creating: 27.56 µs
+ * - Killing: 35.11 µs
+ * - DB Weight: 1 Read, 1 Write to `who`
+ * # </weight>
+ **/
+ setBalance: AugmentedSubmittable<(who: MultiAddress | { Id: any } | { Index: any } | { Raw: any } | { Address32: any } | { Address20: any } | string | Uint8Array, newFree: Compact<u128> | AnyNumber | Uint8Array, newReserved: Compact<u128> | AnyNumber | Uint8Array) => SubmittableExtrinsic<ApiType>, [MultiAddress, Compact<u128>, Compact<u128>]>;
+ /**
+ * Transfer some liquid free balance to another account.
+ *
+ * `transfer` will set the `FreeBalance` of the sender and receiver.
+ * It will decrease the total issuance of the system by the `TransferFee`.
+ * If the sender's account is below the existential deposit as a result
+ * of the transfer, the account will be reaped.
+ *
+ * The dispatch origin for this call must be `Signed` by the transactor.
+ *
+ * # <weight>
+ * - Dependent on arguments but not critical, given proper implementations for input config
+ * types. See related functions below.
+ * - It contains a limited number of reads and writes internally and no complex
+ * computation.
+ *
+ * Related functions:
+ *
+ * - `ensure_can_withdraw` is always called internally but has a bounded complexity.
+ * - Transferring balances to accounts that did not exist before will cause
+ * `T::OnNewAccount::on_new_account` to be called.
+ * - Removing enough funds from an account will trigger `T::DustRemoval::on_unbalanced`.
+ * - `transfer_keep_alive` works the same way as `transfer`, but has an additional check
+ * that the transfer will not kill the origin account.
+ * ---------------------------------
+ * - Base Weight: 73.64 µs, worst case scenario (account created, account removed)
+ * - DB Weight: 1 Read and 1 Write to destination account
+ * - Origin account is already in memory, so no DB operations for them.
+ * # </weight>
+ **/
+ transfer: AugmentedSubmittable<(dest: MultiAddress | { Id: any } | { Index: any } | { Raw: any } | { Address32: any } | { Address20: any } | string | Uint8Array, value: Compact<u128> | AnyNumber | Uint8Array) => SubmittableExtrinsic<ApiType>, [MultiAddress, Compact<u128>]>;
+ /**
+ * Transfer the entire transferable balance from the caller account.
+ *
+ * NOTE: This function only attempts to transfer _transferable_ balances. This means that
+ * any locked, reserved, or existential deposits (when `keep_alive` is `true`), will not be
+ * transferred by this function. To ensure that this function results in a killed account,
+ * you might need to prepare the account by removing any reference counters, storage
+ * deposits, etc...
+ *
+ * The dispatch origin of this call must be Signed.
+ *
+ * - `dest`: The recipient of the transfer.
+ * - `keep_alive`: A boolean to determine if the `transfer_all` operation should send all
+ * of the funds the account has, causing the sender account to be killed (false), or
+ * transfer everything except at least the existential deposit, which will guarantee to
+ * keep the sender account alive (true). # <weight>
+ * - O(1). Just like transfer, but reading the user's transferable balance first.
+ * #</weight>
+ **/
+ transferAll: AugmentedSubmittable<(dest: MultiAddress | { Id: any } | { Index: any } | { Raw: any } | { Address32: any } | { Address20: any } | string | Uint8Array, keepAlive: bool | boolean | Uint8Array) => SubmittableExtrinsic<ApiType>, [MultiAddress, bool]>;
+ /**
+ * Same as the [`transfer`] call, but with a check that the transfer will not kill the
+ * origin account.
+ *
+ * 99% of the time you want [`transfer`] instead.
+ *
+ * [`transfer`]: struct.Pallet.html#method.transfer
+ * # <weight>
+ * - Cheaper than transfer because account cannot be killed.
+ * - Base Weight: 51.4 µs
+ * - DB Weight: 1 Read and 1 Write to dest (sender is in overlay already)
+ * #</weight>
+ **/
+ transferKeepAlive: AugmentedSubmittable<(dest: MultiAddress | { Id: any } | { Index: any } | { Raw: any } | { Address32: any } | { Address20: any } | string | Uint8Array, value: Compact<u128> | AnyNumber | Uint8Array) => SubmittableExtrinsic<ApiType>, [MultiAddress, Compact<u128>]>;
+ /**
+ * Generic tx
+ **/
+ [key: string]: SubmittableExtrinsicFunction<ApiType>;
+ };
+ charging: {
+ /**
+ * Generic tx
+ **/
+ [key: string]: SubmittableExtrinsicFunction<ApiType>;
+ };
+ cumulusXcm: {
+ /**
+ * Generic tx
+ **/
+ [key: string]: SubmittableExtrinsicFunction<ApiType>;
+ };
+ dmpQueue: {
+ /**
+ * Service a single overweight message.
+ *
+ * - `origin`: Must pass `ExecuteOverweightOrigin`.
+ * - `index`: The index of the overweight message to service.
+ * - `weight_limit`: The amount of weight that message execution may take.
+ *
+ * Errors:
+ * - `Unknown`: Message of `index` is unknown.
+ * - `OverLimit`: Message execution may use greater than `weight_limit`.
+ *
+ * Events:
+ * - `OverweightServiced`: On success.
+ **/
+ serviceOverweight: AugmentedSubmittable<(index: u64 | AnyNumber | Uint8Array, weightLimit: u64 | AnyNumber | Uint8Array) => SubmittableExtrinsic<ApiType>, [u64, u64]>;
+ /**
+ * Generic tx
+ **/
+ [key: string]: SubmittableExtrinsicFunction<ApiType>;
+ };
+ ethereum: {
+ /**
+ * Transact an Ethereum transaction.
+ **/
+ transact: AugmentedSubmittable<(transaction: EthereumTransactionLegacyTransaction | { nonce?: any; gasPrice?: any; gasLimit?: any; action?: any; value?: any; input?: any; signature?: any } | string | Uint8Array) => SubmittableExtrinsic<ApiType>, [EthereumTransactionLegacyTransaction]>;
+ /**
+ * Generic tx
+ **/
+ [key: string]: SubmittableExtrinsicFunction<ApiType>;
+ };
+ evm: {
+ /**
+ * Issue an EVM call operation. This is similar to a message call transaction in Ethereum.
+ **/
+ call: AugmentedSubmittable<(source: H160 | string | Uint8Array, target: H160 | string | Uint8Array, input: Bytes | string | Uint8Array, value: U256 | AnyNumber | Uint8Array, gasLimit: u64 | AnyNumber | Uint8Array, gasPrice: U256 | AnyNumber | Uint8Array, nonce: Option<U256> | null | object | string | Uint8Array) => SubmittableExtrinsic<ApiType>, [H160, H160, Bytes, U256, u64, U256, Option<U256>]>;
+ /**
+ * Issue an EVM create operation. This is similar to a contract creation transaction in
+ * Ethereum.
+ **/
+ create: AugmentedSubmittable<(source: H160 | string | Uint8Array, init: Bytes | string | Uint8Array, value: U256 | AnyNumber | Uint8Array, gasLimit: u64 | AnyNumber | Uint8Array, gasPrice: U256 | AnyNumber | Uint8Array, nonce: Option<U256> | null | object | string | Uint8Array) => SubmittableExtrinsic<ApiType>, [H160, Bytes, U256, u64, U256, Option<U256>]>;
+ /**
+ * Issue an EVM create2 operation.
+ **/
+ create2: AugmentedSubmittable<(source: H160 | string | Uint8Array, init: Bytes | string | Uint8Array, salt: H256 | string | Uint8Array, value: U256 | AnyNumber | Uint8Array, gasLimit: u64 | AnyNumber | Uint8Array, gasPrice: U256 | AnyNumber | Uint8Array, nonce: Option<U256> | null | object | string | Uint8Array) => SubmittableExtrinsic<ApiType>, [H160, Bytes, H256, U256, u64, U256, Option<U256>]>;
+ /**
+ * Withdraw balance from EVM into currency/balances pallet.
+ **/
+ withdraw: AugmentedSubmittable<(address: H160 | string | Uint8Array, value: u128 | AnyNumber | Uint8Array) => SubmittableExtrinsic<ApiType>, [H160, u128]>;
+ /**
+ * Generic tx
+ **/
+ [key: string]: SubmittableExtrinsicFunction<ApiType>;
+ };
+ evmMigration: {
+ begin: AugmentedSubmittable<(address: H160 | string | Uint8Array) => SubmittableExtrinsic<ApiType>, [H160]>;
+ finish: AugmentedSubmittable<(address: H160 | string | Uint8Array, code: Bytes | string | Uint8Array) => SubmittableExtrinsic<ApiType>, [H160, Bytes]>;
+ setData: AugmentedSubmittable<(address: H160 | string | Uint8Array, data: Vec<ITuple<[H256, H256]>> | ([H256 | string | Uint8Array, H256 | string | Uint8Array])[]) => SubmittableExtrinsic<ApiType>, [H160, Vec<ITuple<[H256, H256]>>]>;
+ /**
+ * Generic tx
+ **/
+ [key: string]: SubmittableExtrinsicFunction<ApiType>;
+ };
+ inflation: {
+ /**
+ * Generic tx
+ **/
+ [key: string]: SubmittableExtrinsicFunction<ApiType>;
+ };
+ nft: {
+ /**
+ * Adds an admin of the Collection.
+ * NFT Collection can be controlled by multiple admin addresses (some which can also be servers, for example). Admins can issue and burn NFTs, as well as add and remove other admins, but cannot change NFT or Collection ownership.
+ *
+ * # Permissions
+ *
+ * * Collection Owner.
+ * * Collection Admin.
+ *
+ * # Arguments
+ *
+ * * collection_id: ID of the Collection to add admin for.
+ *
+ * * new_admin_id: Address of new admin to add.
+ **/
+ addCollectionAdmin: AugmentedSubmittable<(collectionId: u32 | AnyNumber | Uint8Array, newAdminId: PalletCommonAccountBasicCrossAccountIdRepr | { Substrate: any } | { Ethereum: any } | string | Uint8Array) => SubmittableExtrinsic<ApiType>, [u32, PalletCommonAccountBasicCrossAccountIdRepr]>;
+ /**
+ * Add an address to white list.
+ *
+ * # Permissions
+ *
+ * * Collection Owner
+ * * Collection Admin
+ *
+ * # Arguments
+ *
+ * * collection_id.
+ *
+ * * address.
+ **/
+ addToWhiteList: AugmentedSubmittable<(collectionId: u32 | AnyNumber | Uint8Array, address: PalletCommonAccountBasicCrossAccountIdRepr | { Substrate: any } | { Ethereum: any } | string | Uint8Array) => SubmittableExtrinsic<ApiType>, [u32, PalletCommonAccountBasicCrossAccountIdRepr]>;
+ /**
+ * Set, change, or remove approved address to transfer the ownership of the NFT.
+ *
+ * # Permissions
+ *
+ * * Collection Owner
+ * * Collection Admin
+ * * Current NFT owner
+ *
+ * # Arguments
+ *
+ * * approved: Address that is approved to transfer this NFT or zero (if needed to remove approval).
+ *
+ * * collection_id.
+ *
+ * * item_id: ID of the item.
+ **/
+ approve: AugmentedSubmittable<(spender: PalletCommonAccountBasicCrossAccountIdRepr | { Substrate: any } | { Ethereum: any } | string | Uint8Array, collectionId: u32 | AnyNumber | Uint8Array, itemId: u32 | AnyNumber | Uint8Array, amount: u128 | AnyNumber | Uint8Array) => SubmittableExtrinsic<ApiType>, [PalletCommonAccountBasicCrossAccountIdRepr, u32, u32, u128]>;
+ /**
+ * Destroys a concrete instance of NFT on behalf of the owner
+ * See also: [`approve`]
+ *
+ * # Permissions
+ *
+ * * Collection Owner.
+ * * Collection Admin.
+ * * Current NFT Owner.
+ *
+ * # Arguments
+ *
+ * * collection_id: ID of the collection.
+ *
+ * * item_id: ID of NFT to burn.
+ *
+ * * from: owner of item
+ **/
+ burnFrom: AugmentedSubmittable<(collectionId: u32 | AnyNumber | Uint8Array, from: PalletCommonAccountBasicCrossAccountIdRepr | { Substrate: any } | { Ethereum: any } | string | Uint8Array, itemId: u32 | AnyNumber | Uint8Array, value: u128 | AnyNumber | Uint8Array) => SubmittableExtrinsic<ApiType>, [u32, PalletCommonAccountBasicCrossAccountIdRepr, u32, u128]>;
+ /**
+ * Destroys a concrete instance of NFT.
+ *
+ * # Permissions
+ *
+ * * Collection Owner.
+ * * Collection Admin.
+ * * Current NFT Owner.
+ *
+ * # Arguments
+ *
+ * * collection_id: ID of the collection.
+ *
+ * * item_id: ID of NFT to burn.
+ **/
+ burnItem: AugmentedSubmittable<(collectionId: u32 | AnyNumber | Uint8Array, itemId: u32 | AnyNumber | Uint8Array, value: u128 | AnyNumber | Uint8Array) => SubmittableExtrinsic<ApiType>, [u32, u32, u128]>;
+ /**
+ * Change the owner of the collection.
+ *
+ * # Permissions
+ *
+ * * Collection Owner.
+ *
+ * # Arguments
+ *
+ * * collection_id.
+ *
+ * * new_owner.
+ **/
+ changeCollectionOwner: AugmentedSubmittable<(collectionId: u32 | AnyNumber | Uint8Array, newOwner: AccountId32 | string | Uint8Array) => SubmittableExtrinsic<ApiType>, [u32, AccountId32]>;
+ /**
+ * # Permissions
+ *
+ * * Sponsor.
+ *
+ * # Arguments
+ *
+ * * collection_id.
+ **/
+ confirmSponsorship: AugmentedSubmittable<(collectionId: u32 | AnyNumber | Uint8Array) => SubmittableExtrinsic<ApiType>, [u32]>;
+ /**
+ * This method creates a Collection of NFTs. Each Token may have multiple properties encoded as an array of bytes of certain length. The initial owner and admin of the collection are set to the address that signed the transaction. Both addresses can be changed later.
+ *
+ * # Permissions
+ *
+ * * Anyone.
+ *
+ * # Arguments
+ *
+ * * collection_name: UTF-16 string with collection name (limit 64 characters), will be stored as zero-terminated.
+ *
+ * * collection_description: UTF-16 string with collection description (limit 256 characters), will be stored as zero-terminated.
+ *
+ * * token_prefix: UTF-8 string with token prefix.
+ *
+ * * mode: [CollectionMode] collection type and type dependent data.
+ **/
+ createCollection: AugmentedSubmittable<(collectionName: Vec<u16> | (u16 | AnyNumber | Uint8Array)[], collectionDescription: Vec<u16> | (u16 | AnyNumber | Uint8Array)[], tokenPrefix: Bytes | string | Uint8Array, mode: NftDataStructsCollectionMode | { NFT: any } | { Fungible: any } | { ReFungible: any } | string | Uint8Array) => SubmittableExtrinsic<ApiType>, [Vec<u16>, Vec<u16>, Bytes, NftDataStructsCollectionMode]>;
+ /**
+ * This method creates a concrete instance of NFT Collection created with CreateCollection method.
+ *
+ * # Permissions
+ *
+ * * Collection Owner.
+ * * Collection Admin.
+ * * Anyone if
+ * * White List is enabled, and
+ * * Address is added to white list, and
+ * * MintPermission is enabled (see SetMintPermission method)
+ *
+ * # Arguments
+ *
+ * * collection_id: ID of the collection.
+ *
+ * * owner: Address, initial owner of the NFT.
+ *
+ * * data: Token data to store on chain.
+ **/
+ createItem: AugmentedSubmittable<(collectionId: u32 | AnyNumber | Uint8Array, owner: PalletCommonAccountBasicCrossAccountIdRepr | { Substrate: any } | { Ethereum: any } | string | Uint8Array, data: NftDataStructsCreateItemData | { NFT: any } | { Fungible: any } | { ReFungible: any } | string | Uint8Array) => SubmittableExtrinsic<ApiType>, [u32, PalletCommonAccountBasicCrossAccountIdRepr, NftDataStructsCreateItemData]>;
+ /**
+ * This method creates multiple items in a collection created with CreateCollection method.
+ *
+ * # Permissions
+ *
+ * * Collection Owner.
+ * * Collection Admin.
+ * * Anyone if
+ * * White List is enabled, and
+ * * Address is added to white list, and
+ * * MintPermission is enabled (see SetMintPermission method)
+ *
+ * # Arguments
+ *
+ * * collection_id: ID of the collection.
+ *
+ * * itemsData: Array items properties. Each property is an array of bytes itself, see [create_item].
+ *
+ * * owner: Address, initial owner of the NFT.
+ **/
+ createMultipleItems: AugmentedSubmittable<(collectionId: u32 | AnyNumber | Uint8Array, owner: PalletCommonAccountBasicCrossAccountIdRepr | { Substrate: any } | { Ethereum: any } | string | Uint8Array, itemsData: Vec<NftDataStructsCreateItemData> | (NftDataStructsCreateItemData | { NFT: any } | { Fungible: any } | { ReFungible: any } | string | Uint8Array)[]) => SubmittableExtrinsic<ApiType>, [u32, PalletCommonAccountBasicCrossAccountIdRepr, Vec<NftDataStructsCreateItemData>]>;
+ /**
+ * **DANGEROUS**: Destroys collection and all NFTs within this collection. Users irrecoverably lose their assets and may lose real money.
+ *
+ * # Permissions
+ *
+ * * Collection Owner.
+ *
+ * # Arguments
+ *
+ * * collection_id: collection to destroy.
+ **/
+ destroyCollection: AugmentedSubmittable<(collectionId: u32 | AnyNumber | Uint8Array) => SubmittableExtrinsic<ApiType>, [u32]>;
+ /**
+ * Remove admin address of the Collection. An admin address can remove itself. List of admins may become empty, in which case only Collection Owner will be able to add an Admin.
+ *
+ * # Permissions
+ *
+ * * Collection Owner.
+ * * Collection Admin.
+ *
+ * # Arguments
+ *
+ * * collection_id: ID of the Collection to remove admin for.
+ *
+ * * account_id: Address of admin to remove.
+ **/
+ removeCollectionAdmin: AugmentedSubmittable<(collectionId: u32 | AnyNumber | Uint8Array, accountId: PalletCommonAccountBasicCrossAccountIdRepr | { Substrate: any } | { Ethereum: any } | string | Uint8Array) => SubmittableExtrinsic<ApiType>, [u32, PalletCommonAccountBasicCrossAccountIdRepr]>;
+ /**
+ * Switch back to pay-per-own-transaction model.
+ *
+ * # Permissions
+ *
+ * * Collection owner.
+ *
+ * # Arguments
+ *
+ * * collection_id.
+ **/
+ removeCollectionSponsor: AugmentedSubmittable<(collectionId: u32 | AnyNumber | Uint8Array) => SubmittableExtrinsic<ApiType>, [u32]>;
+ /**
+ * Remove an address from white list.
+ *
+ * # Permissions
+ *
+ * * Collection Owner
+ * * Collection Admin
+ *
+ * # Arguments
+ *
+ * * collection_id.
+ *
+ * * address.
+ **/
+ removeFromWhiteList: AugmentedSubmittable<(collectionId: u32 | AnyNumber | Uint8Array, address: PalletCommonAccountBasicCrossAccountIdRepr | { Substrate: any } | { Ethereum: any } | string | Uint8Array) => SubmittableExtrinsic<ApiType>, [u32, PalletCommonAccountBasicCrossAccountIdRepr]>;
+ setCollectionLimits: AugmentedSubmittable<(collectionId: u32 | AnyNumber | Uint8Array, newLimit: NftDataStructsCollectionLimits | { accountTokenOwnershipLimit?: any; sponsoredDataSize?: any; sponsoredDataRateLimit?: any; tokenLimit?: any; sponsorTransferTimeout?: any; ownerCanTransfer?: any; ownerCanDestroy?: any; transfersEnabled?: any } | string | Uint8Array) => SubmittableExtrinsic<ApiType>, [u32, NftDataStructsCollectionLimits]>;
+ /**
+ * # Permissions
+ *
+ * * Collection Owner
+ *
+ * # Arguments
+ *
+ * * collection_id.
+ *
+ * * new_sponsor.
+ **/
+ setCollectionSponsor: AugmentedSubmittable<(collectionId: u32 | AnyNumber | Uint8Array, newSponsor: AccountId32 | string | Uint8Array) => SubmittableExtrinsic<ApiType>, [u32, AccountId32]>;
+ /**
+ * Set const on-chain data schema.
+ *
+ * # Permissions
+ *
+ * * Collection Owner
+ * * Collection Admin
+ *
+ * # Arguments
+ *
+ * * collection_id.
+ *
+ * * schema: String representing the const on-chain data schema.
+ **/
+ setConstOnChainSchema: AugmentedSubmittable<(collectionId: u32 | AnyNumber | Uint8Array, schema: Bytes | string | Uint8Array) => SubmittableExtrinsic<ApiType>, [u32, Bytes]>;
+ /**
+ * Set meta_update_permission value for particular collection
+ *
+ * # Permissions
+ *
+ * * Collection Owner.
+ *
+ * # Arguments
+ *
+ * * collection_id: ID of the collection.
+ *
+ * * value: New flag value.
+ **/
+ setMetaUpdatePermissionFlag: AugmentedSubmittable<(collectionId: u32 | AnyNumber | Uint8Array, value: NftDataStructsMetaUpdatePermission | 'ItemOwner' | 'Admin' | 'None' | number | Uint8Array) => SubmittableExtrinsic<ApiType>, [u32, NftDataStructsMetaUpdatePermission]>;
+ /**
+ * Allows Anyone to create tokens if:
+ * * White List is enabled, and
+ * * Address is added to white list, and
+ * * This method was called with True parameter
+ *
+ * # Permissions
+ * * Collection Owner
+ *
+ * # Arguments
+ *
+ * * collection_id.
+ *
+ * * mint_permission: Boolean parameter. If True, allows minting to Anyone with conditions above.
+ **/
+ setMintPermission: AugmentedSubmittable<(collectionId: u32 | AnyNumber | Uint8Array, mintPermission: bool | boolean | Uint8Array) => SubmittableExtrinsic<ApiType>, [u32, bool]>;
+ /**
+ * Set off-chain data schema.
+ *
+ * # Permissions
+ *
+ * * Collection Owner
+ * * Collection Admin
+ *
+ * # Arguments
+ *
+ * * collection_id.
+ *
+ * * schema: String representing the offchain data schema.
+ **/
+ setOffchainSchema: AugmentedSubmittable<(collectionId: u32 | AnyNumber | Uint8Array, schema: Bytes | string | Uint8Array) => SubmittableExtrinsic<ApiType>, [u32, Bytes]>;
+ /**
+ * Toggle between normal and white list access for the methods with access for `Anyone`.
+ *
+ * # Permissions
+ *
+ * * Collection Owner.
+ *
+ * # Arguments
+ *
+ * * collection_id.
+ *
+ * * mode: [AccessMode]
+ **/
+ setPublicAccessMode: AugmentedSubmittable<(collectionId: u32 | AnyNumber | Uint8Array, mode: NftDataStructsAccessMode | 'Normal' | 'WhiteList' | number | Uint8Array) => SubmittableExtrinsic<ApiType>, [u32, NftDataStructsAccessMode]>;
+ /**
+ * Set schema standard
+ * ImageURL
+ * Unique
+ *
+ * # Permissions
+ *
+ * * Collection Owner
+ * * Collection Admin
+ *
+ * # Arguments
+ *
+ * * collection_id.
+ *
+ * * schema: SchemaVersion: enum
+ **/
+ setSchemaVersion: AugmentedSubmittable<(collectionId: u32 | AnyNumber | Uint8Array, version: NftDataStructsSchemaVersion | 'ImageURL' | 'Unique' | number | Uint8Array) => SubmittableExtrinsic<ApiType>, [u32, NftDataStructsSchemaVersion]>;
+ /**
+ * Set transfers_enabled value for particular collection
+ *
+ * # Permissions
+ *
+ * * Collection Owner.
+ *
+ * # Arguments
+ *
+ * * collection_id: ID of the collection.
+ *
+ * * value: New flag value.
+ **/
+ setTransfersEnabledFlag: AugmentedSubmittable<(collectionId: u32 | AnyNumber | Uint8Array, value: bool | boolean | Uint8Array) => SubmittableExtrinsic<ApiType>, [u32, bool]>;
+ /**
+ * Set off-chain data schema.
+ *
+ * # Permissions
+ *
+ * * Collection Owner
+ * * Collection Admin
+ *
+ * # Arguments
+ *
+ * * collection_id.
+ *
+ * * schema: String representing the offchain data schema.
+ **/
+ setVariableMetaData: AugmentedSubmittable<(collectionId: u32 | AnyNumber | Uint8Array, itemId: u32 | AnyNumber | Uint8Array, data: Bytes | string | Uint8Array) => SubmittableExtrinsic<ApiType>, [u32, u32, Bytes]>;
+ /**
+ * Set variable on-chain data schema.
+ *
+ * # Permissions
+ *
+ * * Collection Owner
+ * * Collection Admin
+ *
+ * # Arguments
+ *
+ * * collection_id.
+ *
+ * * schema: String representing the variable on-chain data schema.
+ **/
+ setVariableOnChainSchema: AugmentedSubmittable<(collectionId: u32 | AnyNumber | Uint8Array, schema: Bytes | string | Uint8Array) => SubmittableExtrinsic<ApiType>, [u32, Bytes]>;
+ /**
+ * Change ownership of the token.
+ *
+ * # Permissions
+ *
+ * * Collection Owner
+ * * Collection Admin
+ * * Current NFT owner
+ *
+ * # Arguments
+ *
+ * * recipient: Address of token recipient.
+ *
+ * * collection_id.
+ *
+ * * item_id: ID of the item
+ * * Non-Fungible Mode: Required.
+ * * Fungible Mode: Ignored.
+ * * Re-Fungible Mode: Required.
+ *
+ * * value: Amount to transfer.
+ * * Non-Fungible Mode: Ignored
+ * * Fungible Mode: Must specify transferred amount
+ * * Re-Fungible Mode: Must specify transferred portion (between 0 and 1)
+ **/
+ transfer: AugmentedSubmittable<(recipient: PalletCommonAccountBasicCrossAccountIdRepr | { Substrate: any } | { Ethereum: any } | string | Uint8Array, collectionId: u32 | AnyNumber | Uint8Array, itemId: u32 | AnyNumber | Uint8Array, value: u128 | AnyNumber | Uint8Array) => SubmittableExtrinsic<ApiType>, [PalletCommonAccountBasicCrossAccountIdRepr, u32, u32, u128]>;
+ /**
+ * Change ownership of a NFT on behalf of the owner. See Approve method for additional information. After this method executes, the approval is removed so that the approved address will not be able to transfer this NFT again from this owner.
+ *
+ * # Permissions
+ * * Collection Owner
+ * * Collection Admin
+ * * Current NFT owner
+ * * Address approved by current NFT owner
+ *
+ * # Arguments
+ *
+ * * from: Address that owns token.
+ *
+ * * recipient: Address of token recipient.
+ *
+ * * collection_id.
+ *
+ * * item_id: ID of the item.
+ *
+ * * value: Amount to transfer.
+ **/
+ transferFrom: AugmentedSubmittable<(from: PalletCommonAccountBasicCrossAccountIdRepr | { Substrate: any } | { Ethereum: any } | string | Uint8Array, recipient: PalletCommonAccountBasicCrossAccountIdRepr | { Substrate: any } | { Ethereum: any } | string | Uint8Array, collectionId: u32 | AnyNumber | Uint8Array, itemId: u32 | AnyNumber | Uint8Array, value: u128 | AnyNumber | Uint8Array) => SubmittableExtrinsic<ApiType>, [PalletCommonAccountBasicCrossAccountIdRepr, PalletCommonAccountBasicCrossAccountIdRepr, u32, u32, u128]>;
+ /**
+ * Generic tx
+ **/
+ [key: string]: SubmittableExtrinsicFunction<ApiType>;
+ };
+ nftPayment: {
+ /**
+ * Generic tx
+ **/
+ [key: string]: SubmittableExtrinsicFunction<ApiType>;
+ };
+ parachainSystem: {
+ authorizeUpgrade: AugmentedSubmittable<(codeHash: H256 | string | Uint8Array) => SubmittableExtrinsic<ApiType>, [H256]>;
+ enactAuthorizedUpgrade: AugmentedSubmittable<(code: Bytes | string | Uint8Array) => SubmittableExtrinsic<ApiType>, [Bytes]>;
+ /**
+ * Set the current validation data.
+ *
+ * This should be invoked exactly once per block. It will panic at the finalization
+ * phase if the call was not invoked.
+ *
+ * The dispatch origin for this call must be `Inherent`
+ *
+ * As a side effect, this function upgrades the current validation function
+ * if the appropriate time has come.
+ **/
+ setValidationData: AugmentedSubmittable<(data: CumulusPrimitivesParachainInherentParachainInherentData | { validationData?: any; relayChainState?: any; downwardMessages?: any; horizontalMessages?: any } | string | Uint8Array) => SubmittableExtrinsic<ApiType>, [CumulusPrimitivesParachainInherentParachainInherentData]>;
+ sudoSendUpwardMessage: AugmentedSubmittable<(message: Bytes | string | Uint8Array) => SubmittableExtrinsic<ApiType>, [Bytes]>;
+ /**
+ * Generic tx
+ **/
+ [key: string]: SubmittableExtrinsicFunction<ApiType>;
+ };
+ polkadotXcm: {
+ /**
+ * Execute an XCM message from a local, signed, origin.
+ *
+ * An event is deposited indicating whether `msg` could be executed completely or only
+ * partially.
+ *
+ * No more than `max_weight` will be used in its attempted execution. If this is less than the
+ * maximum amount of weight that the message could take to be executed, then no execution
+ * attempt will be made.
+ *
+ * NOTE: A successful return to this does *not* imply that the `msg` was executed successfully
+ * to completion; only that *some* of it was executed.
+ **/
+ execute: AugmentedSubmittable<(message: XcmVersionedXcm | { V0: any } | { V1: any } | { V2: any } | string | Uint8Array, maxWeight: u64 | AnyNumber | Uint8Array) => SubmittableExtrinsic<ApiType>, [XcmVersionedXcm, u64]>;
+ /**
+ * Set a safe XCM version (the version that XCM should be encoded with if the most recent
+ * version a destination can accept is unknown).
+ *
+ * - `origin`: Must be Root.
+ * - `maybe_xcm_version`: The default XCM encoding version, or `None` to disable.
+ **/
+ forceDefaultXcmVersion: AugmentedSubmittable<(maybeXcmVersion: Option<u32> | null | object | string | Uint8Array) => SubmittableExtrinsic<ApiType>, [Option<u32>]>;
+ /**
+ * Ask a location to notify us regarding their XCM version and any changes to it.
+ *
+ * - `origin`: Must be Root.
+ * - `location`: The location to which we should subscribe for XCM version notifications.
+ **/
+ forceSubscribeVersionNotify: AugmentedSubmittable<(location: XcmVersionedMultiLocation | { V0: any } | { V1: any } | string | Uint8Array) => SubmittableExtrinsic<ApiType>, [XcmVersionedMultiLocation]>;
+ /**
+ * Require that a particular destination should no longer notify us regarding any XCM
+ * version changes.
+ *
+ * - `origin`: Must be Root.
+ * - `location`: The location to which we are currently subscribed for XCM version
+ * notifications which we no longer desire.
+ **/
+ forceUnsubscribeVersionNotify: AugmentedSubmittable<(location: XcmVersionedMultiLocation | { V0: any } | { V1: any } | string | Uint8Array) => SubmittableExtrinsic<ApiType>, [XcmVersionedMultiLocation]>;
+ /**
+ * Extoll that a particular destination can be communicated with through a particular
+ * version of XCM.
+ *
+ * - `origin`: Must be Root.
+ * - `location`: The destination that is being described.
+ * - `xcm_version`: The latest version of XCM that `location` supports.
+ **/
+ forceXcmVersion: AugmentedSubmittable<(location: XcmV1MultiLocation | { parents?: any; interior?: any } | string | Uint8Array, xcmVersion: u32 | AnyNumber | Uint8Array) => SubmittableExtrinsic<ApiType>, [XcmV1MultiLocation, u32]>;
+ /**
+ * Transfer some assets from the local chain to the sovereign account of a destination chain and forward
+ * a notification XCM.
+ *
+ * Fee payment on the destination side is made from the first asset listed in the `assets` vector.
+ *
+ * - `origin`: Must be capable of withdrawing the `assets` and executing XCM.
+ * - `dest`: Destination context for the assets. Will typically be `X2(Parent, Parachain(..))` to send
+ * from parachain to parachain, or `X1(Parachain(..))` to send from relay to parachain.
+ * - `beneficiary`: A beneficiary location for the assets in the context of `dest`. Will generally be
+ * an `AccountId32` value.
+ * - `assets`: The assets to be withdrawn. This should include the assets used to pay the fee on the
+ * `dest` side.
+ * - `fee_asset_item`: The index into `assets` of the item which should be used to pay
+ * fees.
+ * - `weight_limit`: The remote-side weight limit, if any, for the XCM fee purchase.
+ **/
+ limitedReserveTransferAssets: AugmentedSubmittable<(dest: XcmVersionedMultiLocation | { V0: any } | { V1: any } | string | Uint8Array, beneficiary: XcmVersionedMultiLocation | { V0: any } | { V1: any } | string | Uint8Array, assets: XcmVersionedMultiAssets | { V0: any } | { V1: any } | string | Uint8Array, feeAssetItem: u32 | AnyNumber | Uint8Array, weightLimit: XcmV2WeightLimit | { Unlimited: any } | { Limited: any } | string | Uint8Array) => SubmittableExtrinsic<ApiType>, [XcmVersionedMultiLocation, XcmVersionedMultiLocation, XcmVersionedMultiAssets, u32, XcmV2WeightLimit]>;
+ /**
+ * Teleport some assets from the local chain to some destination chain.
+ *
+ * Fee payment on the destination side is made from the first asset listed in the `assets` vector.
+ *
+ * - `origin`: Must be capable of withdrawing the `assets` and executing XCM.
+ * - `dest`: Destination context for the assets. Will typically be `X2(Parent, Parachain(..))` to send
+ * from parachain to parachain, or `X1(Parachain(..))` to send from relay to parachain.
+ * - `beneficiary`: A beneficiary location for the assets in the context of `dest`. Will generally be
+ * an `AccountId32` value.
+ * - `assets`: The assets to be withdrawn. The first item should be the currency used to to pay the fee on the
+ * `dest` side. May not be empty.
+ * - `dest_weight`: Equal to the total weight on `dest` of the XCM message
+ * `Teleport { assets, effects: [ BuyExecution{..}, DepositAsset{..} ] }`.
+ * - `weight_limit`: The remote-side weight limit, if any, for the XCM fee purchase.
+ **/
+ limitedTeleportAssets: AugmentedSubmittable<(dest: XcmVersionedMultiLocation | { V0: any } | { V1: any } | string | Uint8Array, beneficiary: XcmVersionedMultiLocation | { V0: any } | { V1: any } | string | Uint8Array, assets: XcmVersionedMultiAssets | { V0: any } | { V1: any } | string | Uint8Array, feeAssetItem: u32 | AnyNumber | Uint8Array, weightLimit: XcmV2WeightLimit | { Unlimited: any } | { Limited: any } | string | Uint8Array) => SubmittableExtrinsic<ApiType>, [XcmVersionedMultiLocation, XcmVersionedMultiLocation, XcmVersionedMultiAssets, u32, XcmV2WeightLimit]>;
+ /**
+ * Transfer some assets from the local chain to the sovereign account of a destination chain and forward
+ * a notification XCM.
+ *
+ * Fee payment on the destination side is made from the first asset listed in the `assets` vector and
+ * fee-weight is calculated locally and thus remote weights are assumed to be equal to
+ * local weights.
+ *
+ * - `origin`: Must be capable of withdrawing the `assets` and executing XCM.
+ * - `dest`: Destination context for the assets. Will typically be `X2(Parent, Parachain(..))` to send
+ * from parachain to parachain, or `X1(Parachain(..))` to send from relay to parachain.
+ * - `beneficiary`: A beneficiary location for the assets in the context of `dest`. Will generally be
+ * an `AccountId32` value.
+ * - `assets`: The assets to be withdrawn. This should include the assets used to pay the fee on the
+ * `dest` side.
+ * - `fee_asset_item`: The index into `assets` of the item which should be used to pay
+ * fees.
+ **/
+ reserveTransferAssets: AugmentedSubmittable<(dest: XcmVersionedMultiLocation | { V0: any } | { V1: any } | string | Uint8Array, beneficiary: XcmVersionedMultiLocation | { V0: any } | { V1: any } | string | Uint8Array, assets: XcmVersionedMultiAssets | { V0: any } | { V1: any } | string | Uint8Array, feeAssetItem: u32 | AnyNumber | Uint8Array) => SubmittableExtrinsic<ApiType>, [XcmVersionedMultiLocation, XcmVersionedMultiLocation, XcmVersionedMultiAssets, u32]>;
+ send: AugmentedSubmittable<(dest: XcmVersionedMultiLocation | { V0: any } | { V1: any } | string | Uint8Array, message: XcmVersionedXcm | { V0: any } | { V1: any } | { V2: any } | string | Uint8Array) => SubmittableExtrinsic<ApiType>, [XcmVersionedMultiLocation, XcmVersionedXcm]>;
+ /**
+ * Teleport some assets from the local chain to some destination chain.
+ *
+ * Fee payment on the destination side is made from the first asset listed in the `assets` vector and
+ * fee-weight is calculated locally and thus remote weights are assumed to be equal to
+ * local weights.
+ *
+ * - `origin`: Must be capable of withdrawing the `assets` and executing XCM.
+ * - `dest`: Destination context for the assets. Will typically be `X2(Parent, Parachain(..))` to send
+ * from parachain to parachain, or `X1(Parachain(..))` to send from relay to parachain.
+ * - `beneficiary`: A beneficiary location for the assets in the context of `dest`. Will generally be
+ * an `AccountId32` value.
+ * - `assets`: The assets to be withdrawn. The first item should be the currency used to to pay the fee on the
+ * `dest` side. May not be empty.
+ * - `dest_weight`: Equal to the total weight on `dest` of the XCM message
+ * `Teleport { assets, effects: [ BuyExecution{..}, DepositAsset{..} ] }`.
+ **/
+ teleportAssets: AugmentedSubmittable<(dest: XcmVersionedMultiLocation | { V0: any } | { V1: any } | string | Uint8Array, beneficiary: XcmVersionedMultiLocation | { V0: any } | { V1: any } | string | Uint8Array, assets: XcmVersionedMultiAssets | { V0: any } | { V1: any } | string | Uint8Array, feeAssetItem: u32 | AnyNumber | Uint8Array) => SubmittableExtrinsic<ApiType>, [XcmVersionedMultiLocation, XcmVersionedMultiLocation, XcmVersionedMultiAssets, u32]>;
+ /**
+ * Generic tx
+ **/
+ [key: string]: SubmittableExtrinsicFunction<ApiType>;
+ };
+ scheduler: {
+ /**
+ * Cancel an anonymously scheduled task.
+ *
+ * # <weight>
+ * - S = Number of already scheduled calls
+ * - Base Weight: 22.15 + 2.869 * S µs
+ * - DB Weight:
+ * - Read: Agenda
+ * - Write: Agenda, Lookup
+ * - Will use base weight of 100 which should be good for up to 30 scheduled calls
+ * # </weight>
+ **/
+ cancel: AugmentedSubmittable<(when: u32 | AnyNumber | Uint8Array, index: u32 | AnyNumber | Uint8Array) => SubmittableExtrinsic<ApiType>, [u32, u32]>;
+ /**
+ * Cancel a named scheduled task.
+ *
+ * # <weight>
+ * - S = Number of already scheduled calls
+ * - Base Weight: 24.91 + 2.907 * S µs
+ * - DB Weight:
+ * - Read: Agenda, Lookup
+ * - Write: Agenda, Lookup
+ * - Will use base weight of 100 which should be good for up to 30 scheduled calls
+ * # </weight>
+ **/
+ cancelNamed: AugmentedSubmittable<(id: Bytes | string | Uint8Array) => SubmittableExtrinsic<ApiType>, [Bytes]>;
+ /**
+ * Anonymously schedule a task.
+ *
+ * # <weight>
+ * - S = Number of already scheduled calls
+ * - Base Weight: 22.29 + .126 * S µs
+ * - DB Weight:
+ * - Read: Agenda
+ * - Write: Agenda
+ * - Will use base weight of 25 which should be good for up to 30 scheduled calls
+ * # </weight>
+ **/
+ schedule: AugmentedSubmittable<(when: u32 | AnyNumber | Uint8Array, maybePeriodic: Option<ITuple<[u32, u32]>> | null | object | string | Uint8Array, priority: u8 | AnyNumber | Uint8Array, call: Call) => SubmittableExtrinsic<ApiType>, [u32, Option<ITuple<[u32, u32]>>, u8, Call]>;
+ /**
+ * Anonymously schedule a task after a delay.
+ *
+ * # <weight>
+ * Same as [`schedule`].
+ * # </weight>
+ **/
+ scheduleAfter: AugmentedSubmittable<(after: u32 | AnyNumber | Uint8Array, maybePeriodic: Option<ITuple<[u32, u32]>> | null | object | string | Uint8Array, priority: u8 | AnyNumber | Uint8Array, call: Call) => SubmittableExtrinsic<ApiType>, [u32, Option<ITuple<[u32, u32]>>, u8, Call]>;
+ /**
+ * Schedule a named task.
+ *
+ * # <weight>
+ * - S = Number of already scheduled calls
+ * - Base Weight: 29.6 + .159 * S µs
+ * - DB Weight:
+ * - Read: Agenda, Lookup
+ * - Write: Agenda, Lookup
+ * - Will use base weight of 35 which should be good for more than 30 scheduled calls
+ * # </weight>
+ **/
+ scheduleNamed: AugmentedSubmittable<(id: Bytes | string | Uint8Array, when: u32 | AnyNumber | Uint8Array, maybePeriodic: Option<ITuple<[u32, u32]>> | null | object | string | Uint8Array, priority: u8 | AnyNumber | Uint8Array, call: Call) => SubmittableExtrinsic<ApiType>, [Bytes, u32, Option<ITuple<[u32, u32]>>, u8, Call]>;
+ /**
+ * Schedule a named task after a delay.
+ *
+ * # <weight>
+ * Same as [`schedule_named`].
+ * # </weight>
+ **/
+ scheduleNamedAfter: AugmentedSubmittable<(id: Bytes | string | Uint8Array, after: u32 | AnyNumber | Uint8Array, maybePeriodic: Option<ITuple<[u32, u32]>> | null | object | string | Uint8Array, priority: u8 | AnyNumber | Uint8Array, call: Call) => SubmittableExtrinsic<ApiType>, [Bytes, u32, Option<ITuple<[u32, u32]>>, u8, Call]>;
+ /**
+ * Generic tx
+ **/
+ [key: string]: SubmittableExtrinsicFunction<ApiType>;
+ };
+ sudo: {
+ /**
+ * Authenticates the current sudo key and sets the given AccountId (`new`) as the new sudo
+ * key.
+ *
+ * The dispatch origin for this call must be _Signed_.
+ *
+ * # <weight>
+ * - O(1).
+ * - Limited storage reads.
+ * - One DB change.
+ * # </weight>
+ **/
+ setKey: AugmentedSubmittable<(updated: MultiAddress | { Id: any } | { Index: any } | { Raw: any } | { Address32: any } | { Address20: any } | string | Uint8Array) => SubmittableExtrinsic<ApiType>, [MultiAddress]>;
+ /**
+ * Authenticates the sudo key and dispatches a function call with `Root` origin.
+ *
+ * The dispatch origin for this call must be _Signed_.
+ *
+ * # <weight>
+ * - O(1).
+ * - Limited storage reads.
+ * - One DB write (event).
+ * - Weight of derivative `call` execution + 10,000.
+ * # </weight>
+ **/
+ sudo: AugmentedSubmittable<(call: Call) => SubmittableExtrinsic<ApiType>, [Call]>;
+ /**
+ * Authenticates the sudo key and dispatches a function call with `Signed` origin from
+ * a given account.
+ *
+ * The dispatch origin for this call must be _Signed_.
+ *
+ * # <weight>
+ * - O(1).
+ * - Limited storage reads.
+ * - One DB write (event).
+ * - Weight of derivative `call` execution + 10,000.
+ * # </weight>
+ **/
+ sudoAs: AugmentedSubmittable<(who: MultiAddress | { Id: any } | { Index: any } | { Raw: any } | { Address32: any } | { Address20: any } | string | Uint8Array, call: Call) => SubmittableExtrinsic<ApiType>, [MultiAddress, Call]>;
+ /**
+ * Authenticates the sudo key and dispatches a function call with `Root` origin.
+ * This function does not check the weight of the call, and instead allows the
+ * Sudo user to specify the weight of the call.
+ *
+ * The dispatch origin for this call must be _Signed_.
+ *
+ * # <weight>
+ * - O(1).
+ * - The weight of this call is defined by the caller.
+ * # </weight>
+ **/
+ sudoUncheckedWeight: AugmentedSubmittable<(call: Call, weight: u64 | AnyNumber | Uint8Array) => SubmittableExtrinsic<ApiType>, [Call, u64]>;
+ /**
+ * Generic tx
+ **/
+ [key: string]: SubmittableExtrinsicFunction<ApiType>;
+ };
+ system: {
+ /**
+ * A dispatch that will fill the block weight up to the given ratio.
+ **/
+ fillBlock: AugmentedSubmittable<(ratio: Perbill | AnyNumber | Uint8Array) => SubmittableExtrinsic<ApiType>, [Perbill]>;
+ /**
+ * Kill all storage items with a key that starts with the given prefix.
+ *
+ * **NOTE:** We rely on the Root origin to provide us the number of subkeys under
+ * the prefix we are removing to accurately calculate the weight of this function.
+ *
+ * # <weight>
+ * - `O(P)` where `P` amount of keys with prefix `prefix`
+ * - `P` storage deletions.
+ * - Base Weight: 0.834 * P µs
+ * - Writes: Number of subkeys + 1
+ * # </weight>
+ **/
+ killPrefix: AugmentedSubmittable<(prefix: Bytes | string | Uint8Array, subkeys: u32 | AnyNumber | Uint8Array) => SubmittableExtrinsic<ApiType>, [Bytes, u32]>;
+ /**
+ * Kill some items from storage.
+ *
+ * # <weight>
+ * - `O(IK)` where `I` length of `keys` and `K` length of one key
+ * - `I` storage deletions.
+ * - Base Weight: .378 * i µs
+ * - Writes: Number of items
+ * # </weight>
+ **/
+ killStorage: AugmentedSubmittable<(keys: Vec<Bytes> | (Bytes | string | Uint8Array)[]) => SubmittableExtrinsic<ApiType>, [Vec<Bytes>]>;
+ /**
+ * Make some on-chain remark.
+ *
+ * # <weight>
+ * - `O(1)`
+ * # </weight>
+ **/
+ remark: AugmentedSubmittable<(remark: Bytes | string | Uint8Array) => SubmittableExtrinsic<ApiType>, [Bytes]>;
+ /**
+ * Make some on-chain remark and emit event.
+ *
+ * # <weight>
+ * - `O(b)` where b is the length of the remark.
+ * - 1 event.
+ * # </weight>
+ **/
+ remarkWithEvent: AugmentedSubmittable<(remark: Bytes | string | Uint8Array) => SubmittableExtrinsic<ApiType>, [Bytes]>;
+ /**
+ * Set the new changes trie configuration.
+ *
+ * # <weight>
+ * - `O(1)`
+ * - 1 storage write or delete (codec `O(1)`).
+ * - 1 call to `deposit_log`: Uses `append` API, so O(1)
+ * - Base Weight: 7.218 µs
+ * - DB Weight:
+ * - Writes: Changes Trie, System Digest
+ * # </weight>
+ **/
+ setChangesTrieConfig: AugmentedSubmittable<(changesTrieConfig: Option<SpCoreChangesTrieChangesTrieConfiguration> | null | object | string | Uint8Array) => SubmittableExtrinsic<ApiType>, [Option<SpCoreChangesTrieChangesTrieConfiguration>]>;
+ /**
+ * Set the new runtime code.
+ *
+ * # <weight>
+ * - `O(C + S)` where `C` length of `code` and `S` complexity of `can_set_code`
+ * - 1 call to `can_set_code`: `O(S)` (calls `sp_io::misc::runtime_version` which is
+ * expensive).
+ * - 1 storage write (codec `O(C)`).
+ * - 1 digest item.
+ * - 1 event.
+ * The weight of this function is dependent on the runtime, but generally this is very
+ * expensive. We will treat this as a full block.
+ * # </weight>
+ **/
+ setCode: AugmentedSubmittable<(code: Bytes | string | Uint8Array) => SubmittableExtrinsic<ApiType>, [Bytes]>;
+ /**
+ * Set the new runtime code without doing any checks of the given `code`.
+ *
+ * # <weight>
+ * - `O(C)` where `C` length of `code`
+ * - 1 storage write (codec `O(C)`).
+ * - 1 digest item.
+ * - 1 event.
+ * The weight of this function is dependent on the runtime. We will treat this as a full
+ * block. # </weight>
+ **/
+ setCodeWithoutChecks: AugmentedSubmittable<(code: Bytes | string | Uint8Array) => SubmittableExtrinsic<ApiType>, [Bytes]>;
+ /**
+ * Set the number of pages in the WebAssembly environment's heap.
+ *
+ * # <weight>
+ * - `O(1)`
+ * - 1 storage write.
+ * - Base Weight: 1.405 µs
+ * - 1 write to HEAP_PAGES
+ * - 1 digest item
+ * # </weight>
+ **/
+ setHeapPages: AugmentedSubmittable<(pages: u64 | AnyNumber | Uint8Array) => SubmittableExtrinsic<ApiType>, [u64]>;
+ /**
+ * Set some items of storage.
+ *
+ * # <weight>
+ * - `O(I)` where `I` length of `items`
+ * - `I` storage writes (`O(1)`).
+ * - Base Weight: 0.568 * i µs
+ * - Writes: Number of items
+ * # </weight>
+ **/
+ setStorage: AugmentedSubmittable<(items: Vec<ITuple<[Bytes, Bytes]>> | ([Bytes | string | Uint8Array, Bytes | string | Uint8Array])[]) => SubmittableExtrinsic<ApiType>, [Vec<ITuple<[Bytes, Bytes]>>]>;
+ /**
+ * Generic tx
+ **/
+ [key: string]: SubmittableExtrinsicFunction<ApiType>;
+ };
+ timestamp: {
+ /**
+ * Set the current time.
+ *
+ * This call should be invoked exactly once per block. It will panic at the finalization
+ * phase, if this call hasn't been invoked by that time.
+ *
+ * The timestamp should be greater than the previous one by the amount specified by
+ * `MinimumPeriod`.
+ *
+ * The dispatch origin for this call must be `Inherent`.
+ *
+ * # <weight>
+ * - `O(1)` (Note that implementations of `OnTimestampSet` must also be `O(1)`)
+ * - 1 storage read and 1 storage mutation (codec `O(1)`). (because of `DidUpdate::take` in
+ * `on_finalize`)
+ * - 1 event handler `on_timestamp_set`. Must be `O(1)`.
+ * # </weight>
+ **/
+ set: AugmentedSubmittable<(now: Compact<u64> | AnyNumber | Uint8Array) => SubmittableExtrinsic<ApiType>, [Compact<u64>]>;
+ /**
+ * Generic tx
+ **/
+ [key: string]: SubmittableExtrinsicFunction<ApiType>;
+ };
+ treasury: {
+ /**
+ * Approve a proposal. At a later time, the proposal will be allocated to the beneficiary
+ * and the original deposit will be returned.
+ *
+ * May only be called from `T::ApproveOrigin`.
+ *
+ * # <weight>
+ * - Complexity: O(1).
+ * - DbReads: `Proposals`, `Approvals`
+ * - DbWrite: `Approvals`
+ * # </weight>
+ **/
+ approveProposal: AugmentedSubmittable<(proposalId: Compact<u32> | AnyNumber | Uint8Array) => SubmittableExtrinsic<ApiType>, [Compact<u32>]>;
+ /**
+ * Put forward a suggestion for spending. A deposit proportional to the value
+ * is reserved and slashed if the proposal is rejected. It is returned once the
+ * proposal is awarded.
+ *
+ * # <weight>
+ * - Complexity: O(1)
+ * - DbReads: `ProposalCount`, `origin account`
+ * - DbWrites: `ProposalCount`, `Proposals`, `origin account`
+ * # </weight>
+ **/
+ proposeSpend: AugmentedSubmittable<(value: Compact<u128> | AnyNumber | Uint8Array, beneficiary: MultiAddress | { Id: any } | { Index: any } | { Raw: any } | { Address32: any } | { Address20: any } | string | Uint8Array) => SubmittableExtrinsic<ApiType>, [Compact<u128>, MultiAddress]>;
+ /**
+ * Reject a proposed spend. The original deposit will be slashed.
+ *
+ * May only be called from `T::RejectOrigin`.
+ *
+ * # <weight>
+ * - Complexity: O(1)
+ * - DbReads: `Proposals`, `rejected proposer account`
+ * - DbWrites: `Proposals`, `rejected proposer account`
+ * # </weight>
+ **/
+ rejectProposal: AugmentedSubmittable<(proposalId: Compact<u32> | AnyNumber | Uint8Array) => SubmittableExtrinsic<ApiType>, [Compact<u32>]>;
+ /**
+ * Generic tx
+ **/
+ [key: string]: SubmittableExtrinsicFunction<ApiType>;
+ };
+ vesting: {
+ /**
+ * Force a vested transfer.
+ *
+ * The dispatch origin for this call must be _Root_.
+ *
+ * - `source`: The account whose funds should be transferred.
+ * - `target`: The account that should be transferred the vested funds.
+ * - `schedule`: The vesting schedule attached to the transfer.
+ *
+ * Emits `VestingCreated`.
+ *
+ * NOTE: This will unlock all schedules through the current block.
+ *
+ * # <weight>
+ * - `O(1)`.
+ * - DbWeight: 4 Reads, 4 Writes
+ * - Reads: Vesting Storage, Balances Locks, Target Account, Source Account
+ * - Writes: Vesting Storage, Balances Locks, Target Account, Source Account
+ * # </weight>
+ **/
+ forceVestedTransfer: AugmentedSubmittable<(source: MultiAddress | { Id: any } | { Index: any } | { Raw: any } | { Address32: any } | { Address20: any } | string | Uint8Array, target: MultiAddress | { Id: any } | { Index: any } | { Raw: any } | { Address32: any } | { Address20: any } | string | Uint8Array, schedule: PalletVestingVestingInfo | { locked?: any; perBlock?: any; startingBlock?: any } | string | Uint8Array) => SubmittableExtrinsic<ApiType>, [MultiAddress, MultiAddress, PalletVestingVestingInfo]>;
+ /**
+ * Merge two vesting schedules together, creating a new vesting schedule that unlocks over
+ * the highest possible start and end blocks. If both schedules have already started the
+ * current block will be used as the schedule start; with the caveat that if one schedule
+ * is finished by the current block, the other will be treated as the new merged schedule,
+ * unmodified.
+ *
+ * NOTE: If `schedule1_index == schedule2_index` this is a no-op.
+ * NOTE: This will unlock all schedules through the current block prior to merging.
+ * NOTE: If both schedules have ended by the current block, no new schedule will be created
+ * and both will be removed.
+ *
+ * Merged schedule attributes:
+ * - `starting_block`: `MAX(schedule1.starting_block, scheduled2.starting_block,
+ * current_block)`.
+ * - `ending_block`: `MAX(schedule1.ending_block, schedule2.ending_block)`.
+ * - `locked`: `schedule1.locked_at(current_block) + schedule2.locked_at(current_block)`.
+ *
+ * The dispatch origin for this call must be _Signed_.
+ *
+ * - `schedule1_index`: index of the first schedule to merge.
+ * - `schedule2_index`: index of the second schedule to merge.
+ **/
+ mergeSchedules: AugmentedSubmittable<(schedule1Index: u32 | AnyNumber | Uint8Array, schedule2Index: u32 | AnyNumber | Uint8Array) => SubmittableExtrinsic<ApiType>, [u32, u32]>;
+ /**
+ * Unlock any vested funds of the sender account.
+ *
+ * The dispatch origin for this call must be _Signed_ and the sender must have funds still
+ * locked under this pallet.
+ *
+ * Emits either `VestingCompleted` or `VestingUpdated`.
+ *
+ * # <weight>
+ * - `O(1)`.
+ * - DbWeight: 2 Reads, 2 Writes
+ * - Reads: Vesting Storage, Balances Locks, [Sender Account]
+ * - Writes: Vesting Storage, Balances Locks, [Sender Account]
+ * # </weight>
+ **/
+ vest: AugmentedSubmittable<() => SubmittableExtrinsic<ApiType>, []>;
+ /**
+ * Create a vested transfer.
+ *
+ * The dispatch origin for this call must be _Signed_.
+ *
+ * - `target`: The account receiving the vested funds.
+ * - `schedule`: The vesting schedule attached to the transfer.
+ *
+ * Emits `VestingCreated`.
+ *
+ * NOTE: This will unlock all schedules through the current block.
+ *
+ * # <weight>
+ * - `O(1)`.
+ * - DbWeight: 3 Reads, 3 Writes
+ * - Reads: Vesting Storage, Balances Locks, Target Account, [Sender Account]
+ * - Writes: Vesting Storage, Balances Locks, Target Account, [Sender Account]
+ * # </weight>
+ **/
+ vestedTransfer: AugmentedSubmittable<(target: MultiAddress | { Id: any } | { Index: any } | { Raw: any } | { Address32: any } | { Address20: any } | string | Uint8Array, schedule: PalletVestingVestingInfo | { locked?: any; perBlock?: any; startingBlock?: any } | string | Uint8Array) => SubmittableExtrinsic<ApiType>, [MultiAddress, PalletVestingVestingInfo]>;
+ /**
+ * Unlock any vested funds of a `target` account.
+ *
+ * The dispatch origin for this call must be _Signed_.
+ *
+ * - `target`: The account whose vested funds should be unlocked. Must have funds still
+ * locked under this pallet.
+ *
+ * Emits either `VestingCompleted` or `VestingUpdated`.
+ *
+ * # <weight>
+ * - `O(1)`.
+ * - DbWeight: 3 Reads, 3 Writes
+ * - Reads: Vesting Storage, Balances Locks, Target Account
+ * - Writes: Vesting Storage, Balances Locks, Target Account
+ * # </weight>
+ **/
+ vestOther: AugmentedSubmittable<(target: MultiAddress | { Id: any } | { Index: any } | { Raw: any } | { Address32: any } | { Address20: any } | string | Uint8Array) => SubmittableExtrinsic<ApiType>, [MultiAddress]>;
+ /**
+ * Generic tx
+ **/
+ [key: string]: SubmittableExtrinsicFunction<ApiType>;
+ };
+ xcmpQueue: {
+ /**
+ * Generic tx
+ **/
+ [key: string]: SubmittableExtrinsicFunction<ApiType>;
+ };
+ }
+
+ export interface SubmittableExtrinsics<ApiType extends ApiTypes> extends AugmentedSubmittables<ApiType> {
+ (extrinsic: Call | Extrinsic | Uint8Array | string): SubmittableExtrinsic<ApiType>;
+ [key: string]: SubmittableModuleExtrinsics<ApiType>;
+ }
+}
tests/src/interfaces/augment-api.tsdiffbeforeafterboth--- /dev/null
+++ b/tests/src/interfaces/augment-api.ts
@@ -0,0 +1,10 @@
+// Auto-generated via `yarn polkadot-types-from-chain`, do not edit
+/* eslint-disable */
+
+import '@polkadot/api/augment/rpc';
+import './augment-api-consts';
+import './augment-api-errors';
+import './augment-api-events';
+import './augment-api-query';
+import './augment-api-tx';
+import './augment-api-rpc';
tests/src/interfaces/augment-types.tsdiffbeforeafterboth--- /dev/null
+++ b/tests/src/interfaces/augment-types.ts
@@ -0,0 +1,1112 @@
+// Auto-generated via `yarn polkadot-types-from-defs`, do not edit
+/* eslint-disable */
+
+import type { EthereumBlock, EthereumLog, EthereumReceipt, EthereumTransactionLegacyTransaction, EvmCoreErrorExitReason, FpRpcTransactionStatus } from './ethereum';
+import type { NftDataStructsAccessMode, NftDataStructsCollection, NftDataStructsCollectionId, NftDataStructsCollectionLimits, NftDataStructsCollectionMode, NftDataStructsCreateItemData, NftDataStructsMetaUpdatePermission, NftDataStructsSchemaVersion, NftDataStructsSponsorshipState, NftDataStructsTokenId, PalletCommonAccountBasicCrossAccountIdRepr, PalletNonfungibleItemData, PalletRefungibleItemData, PalletUnqSchedulerCallSpec, PalletUnqSchedulerReleases, PalletUnqSchedulerScheduledV2 } from './nft';
+import type { CumulusPalletDmpQueueConfigData, CumulusPalletDmpQueuePageIndexData, CumulusPalletParachainSystemRelayStateSnapshotMessagingStateSnapshot, CumulusPalletXcmpQueueInboundStatus, CumulusPalletXcmpQueueOutboundStatus, CumulusPalletXcmpQueueQueueConfigData, CumulusPrimitivesParachainInherentParachainInherentData, PolkadotParachainPrimitivesXcmpMessageFormat, PolkadotPrimitivesV1AbridgedHostConfiguration, PolkadotPrimitivesV1PersistedValidationData } from './polkadot';
+import type { BitVec, Bool, Bytes, Data, I128, I16, I256, I32, I64, I8, Json, Null, Raw, StorageKey, Text, Type, U128, U16, U256, U32, U64, U8, USize, bool, i128, i16, i256, i32, i64, i8, u128, u16, u256, u32, u64, u8, usize } from '@polkadot/types';
+import type { AssetApproval, AssetApprovalKey, AssetBalance, AssetDestroyWitness, AssetDetails, AssetMetadata, TAssetBalance, TAssetDepositBalance } from '@polkadot/types/interfaces/assets';
+import type { BlockAttestations, IncludedBlocks, MoreAttestations } from '@polkadot/types/interfaces/attestations';
+import type { RawAuraPreDigest } from '@polkadot/types/interfaces/aura';
+import type { ExtrinsicOrHash, ExtrinsicStatus } from '@polkadot/types/interfaces/author';
+import type { UncleEntryItem } from '@polkadot/types/interfaces/authorship';
+import type { AllowedSlots, BabeAuthorityWeight, BabeBlockWeight, BabeEpochConfiguration, BabeEquivocationProof, BabeWeight, EpochAuthorship, MaybeRandomness, MaybeVrf, NextConfigDescriptor, NextConfigDescriptorV1, Randomness, RawBabePreDigest, RawBabePreDigestCompat, RawBabePreDigestPrimary, RawBabePreDigestPrimaryTo159, RawBabePreDigestSecondaryPlain, RawBabePreDigestSecondaryTo159, RawBabePreDigestSecondaryVRF, RawBabePreDigestTo159, SlotNumber, VrfData, VrfOutput, VrfProof } from '@polkadot/types/interfaces/babe';
+import type { AccountData, BalanceLock, BalanceLockTo212, BalanceStatus, Reasons, ReserveData, ReserveIdentifier, VestingSchedule, WithdrawReasons } from '@polkadot/types/interfaces/balances';
+import type { BeefyCommitment, BeefyId, BeefyNextAuthoritySet, BeefyPayload, BeefySignedCommitment, MmrRootHash, ValidatorSetId } from '@polkadot/types/interfaces/beefy';
+import type { BridgeMessageId, BridgedBlockHash, BridgedBlockNumber, BridgedHeader, CallOrigin, ChainId, DeliveredMessages, DispatchFeePayment, InboundLaneData, InboundRelayer, InitializationData, LaneId, MessageData, MessageKey, MessageNonce, MessagesDeliveryProofOf, MessagesProofOf, OperatingMode, OutboundLaneData, OutboundMessageFee, OutboundPayload, Parameter, RelayerId, UnrewardedRelayer, UnrewardedRelayersState } from '@polkadot/types/interfaces/bridges';
+import type { BlockHash } from '@polkadot/types/interfaces/chain';
+import type { PrefixedStorageKey } from '@polkadot/types/interfaces/childstate';
+import type { StatementKind } from '@polkadot/types/interfaces/claims';
+import type { CollectiveOrigin, MemberCount, ProposalIndex, Votes, VotesTo230 } from '@polkadot/types/interfaces/collective';
+import type { AuthorityId, RawVRFOutput } from '@polkadot/types/interfaces/consensus';
+import type { AliveContractInfo, CodeHash, ContractCallRequest, ContractExecResult, ContractExecResultErr, ContractExecResultErrModule, ContractExecResultOk, ContractExecResultResult, ContractExecResultSuccessTo255, ContractExecResultSuccessTo260, ContractExecResultTo255, ContractExecResultTo260, ContractExecResultTo267, ContractInfo, ContractInstantiateResult, ContractInstantiateResultTo267, ContractStorageKey, DeletedContract, ExecReturnValue, Gas, HostFnWeights, HostFnWeightsTo264, InstantiateRequest, InstantiateReturnValue, InstantiateReturnValueTo267, InstructionWeights, Limits, LimitsTo264, PrefabWasmModule, RentProjection, Schedule, ScheduleTo212, ScheduleTo258, ScheduleTo264, SeedOf, TombstoneContractInfo, TrieId } from '@polkadot/types/interfaces/contracts';
+import type { ContractConstructorSpec, ContractContractSpec, ContractCryptoHasher, ContractDiscriminant, ContractDisplayName, ContractEventParamSpec, ContractEventSpec, ContractLayoutArray, ContractLayoutCell, ContractLayoutEnum, ContractLayoutHash, ContractLayoutHashingStrategy, ContractLayoutKey, ContractLayoutStruct, ContractLayoutStructField, ContractMessageParamSpec, ContractMessageSpec, ContractMetadata, ContractMetadataLatest, ContractMetadataV0, ContractMetadataV1, ContractProject, ContractProjectContract, ContractProjectInfo, ContractProjectSource, ContractProjectV0, ContractSelector, ContractStorageLayout, ContractTypeSpec } from '@polkadot/types/interfaces/contractsAbi';
+import type { FundIndex, FundInfo, LastContribution, TrieIndex } from '@polkadot/types/interfaces/crowdloan';
+import type { ConfigData, MessageId, OverweightIndex, PageCounter, PageIndexData } from '@polkadot/types/interfaces/cumulus';
+import type { AccountVote, AccountVoteSplit, AccountVoteStandard, Conviction, Delegations, PreimageStatus, PreimageStatusAvailable, PriorLock, PropIndex, Proposal, ProxyState, ReferendumIndex, ReferendumInfo, ReferendumInfoFinished, ReferendumInfoTo239, ReferendumStatus, Tally, Voting, VotingDelegating, VotingDirect, VotingDirectVote } from '@polkadot/types/interfaces/democracy';
+import type { ApprovalFlag, DefunctVoter, Renouncing, SetIndex, Vote, VoteIndex, VoteThreshold, VoterInfo } from '@polkadot/types/interfaces/elections';
+import type { CreatedBlock, ImportedAux } from '@polkadot/types/interfaces/engine';
+import type { BlockV0, BlockV1, BlockV2, EIP1559Transaction, EIP2930Transaction, EthAccessList, EthAccessListItem, EthAccount, EthAddress, EthBlock, EthBloom, EthCallRequest, EthFilter, EthFilterAddress, EthFilterChanges, EthFilterTopic, EthFilterTopicEntry, EthFilterTopicInner, EthHeader, EthLog, EthReceipt, EthRichBlock, EthRichHeader, EthStorageProof, EthSubKind, EthSubParams, EthSubResult, EthSyncInfo, EthSyncStatus, EthTransaction, EthTransactionAction, EthTransactionCondition, EthTransactionRequest, EthTransactionSignature, EthTransactionStatus, EthWork, EthereumAccountId, EthereumAddress, EthereumLookupSource, EthereumSignature, LegacyTransaction, TransactionV0, TransactionV1, TransactionV2 } from '@polkadot/types/interfaces/eth';
+import type { EvmAccount, EvmLog, EvmVicinity, ExitError, ExitFatal, ExitReason, ExitRevert, ExitSucceed } from '@polkadot/types/interfaces/evm';
+import type { AnySignature, EcdsaSignature, Ed25519Signature, Era, Extrinsic, ExtrinsicEra, ExtrinsicPayload, ExtrinsicPayloadUnknown, ExtrinsicPayloadV4, ExtrinsicSignature, ExtrinsicSignatureV4, ExtrinsicUnknown, ExtrinsicV4, ImmortalEra, MortalEra, MultiSignature, Signature, SignerPayload, Sr25519Signature } from '@polkadot/types/interfaces/extrinsics';
+import type { AssetOptions, Owner, PermissionLatest, PermissionVersions, PermissionsV1 } from '@polkadot/types/interfaces/genericAsset';
+import type { ActiveGilt, ActiveGiltsTotal, ActiveIndex, GiltBid } from '@polkadot/types/interfaces/gilt';
+import type { AuthorityIndex, AuthorityList, AuthoritySet, AuthoritySetChange, AuthoritySetChanges, AuthorityWeight, DelayKind, DelayKindBest, EncodedFinalityProofs, ForkTreePendingChange, ForkTreePendingChangeNode, GrandpaCommit, GrandpaEquivocation, GrandpaEquivocationProof, GrandpaEquivocationValue, GrandpaJustification, GrandpaPrecommit, GrandpaPrevote, GrandpaSignedPrecommit, JustificationNotification, KeyOwnerProof, NextAuthority, PendingChange, PendingPause, PendingResume, Precommits, Prevotes, ReportedRoundStates, RoundState, SetId, StoredPendingChange, StoredState } from '@polkadot/types/interfaces/grandpa';
+import type { IdentityFields, IdentityInfo, IdentityInfoAdditional, IdentityInfoTo198, IdentityJudgement, RegistrarIndex, RegistrarInfo, Registration, RegistrationJudgement, RegistrationTo198 } from '@polkadot/types/interfaces/identity';
+import type { AuthIndex, AuthoritySignature, Heartbeat, HeartbeatTo244, OpaqueMultiaddr, OpaqueNetworkState, OpaquePeerId } from '@polkadot/types/interfaces/imOnline';
+import type { CallIndex, LotteryConfig } from '@polkadot/types/interfaces/lottery';
+import type { ErrorMetadataLatest, ErrorMetadataV10, ErrorMetadataV11, ErrorMetadataV12, ErrorMetadataV13, ErrorMetadataV14, ErrorMetadataV9, EventMetadataLatest, EventMetadataV10, EventMetadataV11, EventMetadataV12, EventMetadataV13, EventMetadataV14, EventMetadataV9, ExtrinsicMetadataLatest, ExtrinsicMetadataV11, ExtrinsicMetadataV12, ExtrinsicMetadataV13, ExtrinsicMetadataV14, FunctionArgumentMetadataLatest, FunctionArgumentMetadataV10, FunctionArgumentMetadataV11, FunctionArgumentMetadataV12, FunctionArgumentMetadataV13, FunctionArgumentMetadataV14, FunctionArgumentMetadataV9, FunctionMetadataLatest, FunctionMetadataV10, FunctionMetadataV11, FunctionMetadataV12, FunctionMetadataV13, FunctionMetadataV14, FunctionMetadataV9, MetadataAll, MetadataLatest, MetadataV10, MetadataV11, MetadataV12, MetadataV13, MetadataV14, MetadataV9, ModuleConstantMetadataV10, ModuleConstantMetadataV11, ModuleConstantMetadataV12, ModuleConstantMetadataV13, ModuleConstantMetadataV9, ModuleMetadataV10, ModuleMetadataV11, ModuleMetadataV12, ModuleMetadataV13, ModuleMetadataV9, PalletCallMetadataLatest, PalletCallMetadataV14, PalletConstantMetadataLatest, PalletConstantMetadataV14, PalletErrorMetadataLatest, PalletErrorMetadataV14, PalletEventMetadataLatest, PalletEventMetadataV14, PalletMetadataLatest, PalletMetadataV14, PalletStorageMetadataLatest, PalletStorageMetadataV14, PortableRegistry, PortableRegistryV14, PortableType, PortableTypeV14, SignedExtensionMetadataLatest, SignedExtensionMetadataV14, StorageEntryMetadataLatest, StorageEntryMetadataV10, StorageEntryMetadataV11, StorageEntryMetadataV12, StorageEntryMetadataV13, StorageEntryMetadataV14, StorageEntryMetadataV9, StorageEntryModifierLatest, StorageEntryModifierV10, StorageEntryModifierV11, StorageEntryModifierV12, StorageEntryModifierV13, StorageEntryModifierV14, StorageEntryModifierV9, StorageEntryTypeLatest, StorageEntryTypeV10, StorageEntryTypeV11, StorageEntryTypeV12, StorageEntryTypeV13, StorageEntryTypeV14, StorageEntryTypeV9, StorageHasher, StorageHasherV10, StorageHasherV11, StorageHasherV12, StorageHasherV13, StorageHasherV14, StorageHasherV9, StorageMetadataV10, StorageMetadataV11, StorageMetadataV12, StorageMetadataV13, StorageMetadataV9 } from '@polkadot/types/interfaces/metadata';
+import type { MmrLeafProof } from '@polkadot/types/interfaces/mmr';
+import type { StorageKind } from '@polkadot/types/interfaces/offchain';
+import type { DeferredOffenceOf, Kind, OffenceDetails, Offender, OpaqueTimeSlot, ReportIdOf, Reporter } from '@polkadot/types/interfaces/offences';
+import type { AbridgedCandidateReceipt, AbridgedHostConfiguration, AbridgedHrmpChannel, AssignmentId, AssignmentKind, AttestedCandidate, AuctionIndex, AuthorityDiscoveryId, AvailabilityBitfield, AvailabilityBitfieldRecord, BackedCandidate, Bidder, BufferedSessionChange, CandidateCommitments, CandidateDescriptor, CandidateHash, CandidateInfo, CandidatePendingAvailability, CandidateReceipt, CollatorId, CollatorSignature, CommittedCandidateReceipt, CoreAssignment, CoreIndex, CoreOccupied, DisputeLocation, DisputeResult, DisputeState, DisputeStatement, DisputeStatementSet, DoubleVoteReport, DownwardMessage, ExplicitDisputeStatement, GlobalValidationData, GlobalValidationSchedule, GroupIndex, HeadData, HostConfiguration, HrmpChannel, HrmpChannelId, HrmpOpenChannelRequest, InboundDownwardMessage, InboundHrmpMessage, InboundHrmpMessages, IncomingParachain, IncomingParachainDeploy, IncomingParachainFixed, InvalidDisputeStatementKind, LeasePeriod, LeasePeriodOf, LocalValidationData, MessageIngestionType, MessageQueueChain, MessagingStateSnapshot, MessagingStateSnapshotEgressEntry, MultiDisputeStatementSet, NewBidder, OutboundHrmpMessage, ParaGenesisArgs, ParaId, ParaInfo, ParaLifecycle, ParaPastCodeMeta, ParaScheduling, ParaValidatorIndex, ParachainDispatchOrigin, ParachainInherentData, ParachainProposal, ParachainsInherentData, ParathreadClaim, ParathreadClaimQueue, ParathreadEntry, PersistedValidationData, QueuedParathread, RegisteredParachainInfo, RelayBlockNumber, RelayChainBlockNumber, RelayChainHash, RelayHash, Remark, ReplacementTimes, Retriable, Scheduling, ServiceQuality, SessionInfo, SessionInfoValidatorGroup, SignedAvailabilityBitfield, SignedAvailabilityBitfields, SigningContext, SlotRange, Statement, SubId, SystemInherentData, TransientValidationData, UpgradeGoAhead, UpgradeRestriction, UpwardMessage, ValidDisputeStatementKind, ValidationCode, ValidationCodeHash, ValidationData, ValidationDataType, ValidationFunctionParams, ValidatorSignature, ValidityAttestation, VecInboundHrmpMessage, WinnersData, WinnersDataTuple, WinningData, WinningDataEntry } from '@polkadot/types/interfaces/parachains';
+import type { FeeDetails, InclusionFee, RuntimeDispatchInfo } from '@polkadot/types/interfaces/payment';
+import type { Approvals } from '@polkadot/types/interfaces/poll';
+import type { ProxyAnnouncement, ProxyDefinition, ProxyType } from '@polkadot/types/interfaces/proxy';
+import type { AccountStatus, AccountValidity } from '@polkadot/types/interfaces/purchase';
+import type { ActiveRecovery, RecoveryConfig } from '@polkadot/types/interfaces/recovery';
+import type { RpcMethods } from '@polkadot/types/interfaces/rpc';
+import type { AccountId, AccountId20, AccountId32, AccountIdOf, AccountIndex, Address, AssetId, Balance, BalanceOf, Block, BlockNumber, BlockNumberFor, BlockNumberOf, Call, CallHash, CallHashOf, ChangesTrieConfiguration, ChangesTrieSignal, CodecHash, Consensus, ConsensusEngineId, CrateVersion, Digest, DigestItem, EncodedJustification, ExtrinsicsWeight, Fixed128, Fixed64, FixedI128, FixedI64, FixedU128, FixedU64, H1024, H128, H160, H2048, H256, H32, H512, H64, Hash, Header, HeaderPartial, I32F32, Index, IndicesLookupSource, Justification, Justifications, KeyTypeId, KeyValue, LockIdentifier, LookupSource, LookupTarget, ModuleId, Moment, MultiAddress, MultiSigner, OpaqueCall, Origin, OriginCaller, PalletId, PalletVersion, PalletsOrigin, Pays, PerU16, Perbill, Percent, Permill, Perquintill, Phantom, PhantomData, PreRuntime, Releases, RuntimeDbWeight, Seal, SealV0, SignedBlock, SignedBlockWithJustification, SignedBlockWithJustifications, Slot, StorageData, StorageProof, TransactionInfo, TransactionPriority, TransactionStorageProof, U32F32, ValidatorId, ValidatorIdOf, Weight, WeightMultiplier } from '@polkadot/types/interfaces/runtime';
+import type { Si0Field, Si0LookupTypeId, Si0Path, Si0Type, Si0TypeDef, Si0TypeDefArray, Si0TypeDefBitSequence, Si0TypeDefCompact, Si0TypeDefComposite, Si0TypeDefPhantom, Si0TypeDefPrimitive, Si0TypeDefSequence, Si0TypeDefTuple, Si0TypeDefVariant, Si0TypeParameter, Si0Variant, Si1Field, Si1LookupTypeId, Si1Path, Si1Type, Si1TypeDef, Si1TypeDefArray, Si1TypeDefBitSequence, Si1TypeDefCompact, Si1TypeDefComposite, Si1TypeDefPrimitive, Si1TypeDefSequence, Si1TypeDefTuple, Si1TypeDefVariant, Si1TypeParameter, Si1Variant, SiField, SiLookupTypeId, SiPath, SiType, SiTypeDef, SiTypeDefArray, SiTypeDefBitSequence, SiTypeDefCompact, SiTypeDefComposite, SiTypeDefPrimitive, SiTypeDefSequence, SiTypeDefTuple, SiTypeDefVariant, SiTypeParameter, SiVariant } from '@polkadot/types/interfaces/scaleInfo';
+import type { Period, Priority, SchedulePeriod, SchedulePriority, Scheduled, ScheduledTo254, TaskAddress } from '@polkadot/types/interfaces/scheduler';
+import type { BeefyKey, FullIdentification, IdentificationTuple, Keys, MembershipProof, SessionIndex, SessionKeys1, SessionKeys10, SessionKeys10B, SessionKeys2, SessionKeys3, SessionKeys4, SessionKeys5, SessionKeys6, SessionKeys6B, SessionKeys7, SessionKeys7B, SessionKeys8, SessionKeys8B, SessionKeys9, SessionKeys9B, ValidatorCount } from '@polkadot/types/interfaces/session';
+import type { Bid, BidKind, SocietyJudgement, SocietyVote, StrikeCount, VouchingStatus } from '@polkadot/types/interfaces/society';
+import type { ActiveEraInfo, CompactAssignments, CompactAssignmentsTo257, CompactAssignmentsTo265, CompactAssignmentsWith16, CompactAssignmentsWith24, CompactScore, CompactScoreCompact, ElectionCompute, ElectionPhase, ElectionResult, ElectionScore, ElectionSize, ElectionStatus, EraIndex, EraPoints, EraRewardPoints, EraRewards, Exposure, ExtendedBalance, Forcing, IndividualExposure, KeyType, MomentOf, Nominations, NominatorIndex, NominatorIndexCompact, OffchainAccuracy, OffchainAccuracyCompact, PhragmenScore, Points, RawSolution, RawSolutionTo265, RawSolutionWith16, RawSolutionWith24, ReadySolution, RewardDestination, RewardPoint, RoundSnapshot, SeatHolder, SignedSubmission, SignedSubmissionOf, SignedSubmissionTo276, SlashJournalEntry, SlashingSpans, SlashingSpansTo204, SolutionOrSnapshotSize, SolutionSupport, SolutionSupports, SpanIndex, SpanRecord, StakingLedger, StakingLedgerTo223, StakingLedgerTo240, SubmissionIndicesOf, Supports, UnappliedSlash, UnappliedSlashOther, UnlockChunk, ValidatorIndex, ValidatorIndexCompact, ValidatorPrefs, ValidatorPrefsTo145, ValidatorPrefsTo196, ValidatorPrefsWithBlocked, ValidatorPrefsWithCommission, VoteWeight, Voter } from '@polkadot/types/interfaces/staking';
+import type { ApiId, BlockTrace, BlockTraceEvent, BlockTraceEventData, BlockTraceSpan, KeyValueOption, ReadProof, RuntimeVersion, RuntimeVersionApi, RuntimeVersionPartial, SpecVersion, StorageChangeSet, TraceBlockResponse, TraceError } from '@polkadot/types/interfaces/state';
+import type { WeightToFeeCoefficient } from '@polkadot/types/interfaces/support';
+import type { AccountInfo, AccountInfoWithDualRefCount, AccountInfoWithProviders, AccountInfoWithRefCount, AccountInfoWithRefCountU8, AccountInfoWithTripleRefCount, ApplyExtrinsicResult, ArithmeticError, BlockLength, BlockWeights, ChainProperties, ChainType, ConsumedWeight, DigestOf, DispatchClass, DispatchError, DispatchErrorModule, DispatchErrorTo198, DispatchInfo, DispatchInfoTo190, DispatchInfoTo244, DispatchOutcome, DispatchResult, DispatchResultOf, DispatchResultTo198, Event, EventId, EventIndex, EventRecord, Health, InvalidTransaction, Key, LastRuntimeUpgradeInfo, NetworkState, NetworkStatePeerset, NetworkStatePeersetInfo, NodeRole, NotConnectedPeer, Peer, PeerEndpoint, PeerEndpointAddr, PeerInfo, PeerPing, PerDispatchClassU32, PerDispatchClassWeight, PerDispatchClassWeightsPerClass, Phase, RawOrigin, RefCount, RefCountTo259, SyncState, SystemOrigin, TokenError, TransactionValidityError, UnknownTransaction, WeightPerClass } from '@polkadot/types/interfaces/system';
+import type { Bounty, BountyIndex, BountyStatus, BountyStatusActive, BountyStatusCuratorProposed, BountyStatusPendingPayout, OpenTip, OpenTipFinderTo225, OpenTipTip, OpenTipTo225, TreasuryProposal } from '@polkadot/types/interfaces/treasury';
+import type { Multiplier } from '@polkadot/types/interfaces/txpayment';
+import type { ClassDetails, ClassId, ClassMetadata, DepositBalance, DepositBalanceOf, DestroyWitness, InstanceDetails, InstanceId, InstanceMetadata } from '@polkadot/types/interfaces/uniques';
+import type { Multisig, Timepoint } from '@polkadot/types/interfaces/utility';
+import type { VestingInfo } from '@polkadot/types/interfaces/vesting';
+import type { AssetInstance, AssetInstanceV0, AssetInstanceV1, AssetInstanceV2, BodyId, BodyPart, DoubleEncodedCall, Fungibility, FungibilityV0, FungibilityV1, FungibilityV2, InboundStatus, InstructionV2, InteriorMultiLocation, Junction, JunctionV0, JunctionV1, JunctionV2, Junctions, JunctionsV1, JunctionsV2, MultiAsset, MultiAssetFilter, MultiAssetFilterV1, MultiAssetFilterV2, MultiAssetV0, MultiAssetV1, MultiAssetV2, MultiAssets, MultiAssetsV1, MultiAssetsV2, MultiLocation, MultiLocationV0, MultiLocationV1, MultiLocationV2, NetworkId, OriginKindV0, OriginKindV1, OriginKindV2, OutboundStatus, Outcome, QueryId, QueryStatus, QueueConfigData, Response, ResponseV0, ResponseV1, ResponseV2, ResponseV2Error, ResponseV2Result, VersionMigrationStage, VersionedMultiAsset, VersionedMultiAssets, VersionedMultiLocation, VersionedResponse, VersionedXcm, WeightLimitV2, WildFungibility, WildFungibilityV0, WildFungibilityV1, WildFungibilityV2, WildMultiAsset, WildMultiAssetV1, WildMultiAssetV2, Xcm, XcmAssetId, XcmError, XcmErrorV0, XcmErrorV1, XcmErrorV2, XcmOrder, XcmOrderV0, XcmOrderV1, XcmOrderV2, XcmOrigin, XcmOriginKind, XcmV0, XcmV1, XcmV2, XcmVersion, XcmpMessageFormat } from '@polkadot/types/interfaces/xcm';
+
+declare module '@polkadot/types/types/registry' {
+ export interface InterfaceTypes {
+ AbridgedCandidateReceipt: AbridgedCandidateReceipt;
+ AbridgedHostConfiguration: AbridgedHostConfiguration;
+ AbridgedHrmpChannel: AbridgedHrmpChannel;
+ AccountData: AccountData;
+ AccountId: AccountId;
+ AccountId20: AccountId20;
+ AccountId32: AccountId32;
+ AccountIdOf: AccountIdOf;
+ AccountIndex: AccountIndex;
+ AccountInfo: AccountInfo;
+ AccountInfoWithDualRefCount: AccountInfoWithDualRefCount;
+ AccountInfoWithProviders: AccountInfoWithProviders;
+ AccountInfoWithRefCount: AccountInfoWithRefCount;
+ AccountInfoWithRefCountU8: AccountInfoWithRefCountU8;
+ AccountInfoWithTripleRefCount: AccountInfoWithTripleRefCount;
+ AccountStatus: AccountStatus;
+ AccountValidity: AccountValidity;
+ AccountVote: AccountVote;
+ AccountVoteSplit: AccountVoteSplit;
+ AccountVoteStandard: AccountVoteStandard;
+ ActiveEraInfo: ActiveEraInfo;
+ ActiveGilt: ActiveGilt;
+ ActiveGiltsTotal: ActiveGiltsTotal;
+ ActiveIndex: ActiveIndex;
+ ActiveRecovery: ActiveRecovery;
+ Address: Address;
+ AliveContractInfo: AliveContractInfo;
+ AllowedSlots: AllowedSlots;
+ AnySignature: AnySignature;
+ ApiId: ApiId;
+ ApplyExtrinsicResult: ApplyExtrinsicResult;
+ ApprovalFlag: ApprovalFlag;
+ Approvals: Approvals;
+ ArithmeticError: ArithmeticError;
+ AssetApproval: AssetApproval;
+ AssetApprovalKey: AssetApprovalKey;
+ AssetBalance: AssetBalance;
+ AssetDestroyWitness: AssetDestroyWitness;
+ AssetDetails: AssetDetails;
+ AssetId: AssetId;
+ AssetInstance: AssetInstance;
+ AssetInstanceV0: AssetInstanceV0;
+ AssetInstanceV1: AssetInstanceV1;
+ AssetInstanceV2: AssetInstanceV2;
+ AssetMetadata: AssetMetadata;
+ AssetOptions: AssetOptions;
+ AssignmentId: AssignmentId;
+ AssignmentKind: AssignmentKind;
+ AttestedCandidate: AttestedCandidate;
+ AuctionIndex: AuctionIndex;
+ AuthIndex: AuthIndex;
+ AuthorityDiscoveryId: AuthorityDiscoveryId;
+ AuthorityId: AuthorityId;
+ AuthorityIndex: AuthorityIndex;
+ AuthorityList: AuthorityList;
+ AuthoritySet: AuthoritySet;
+ AuthoritySetChange: AuthoritySetChange;
+ AuthoritySetChanges: AuthoritySetChanges;
+ AuthoritySignature: AuthoritySignature;
+ AuthorityWeight: AuthorityWeight;
+ AvailabilityBitfield: AvailabilityBitfield;
+ AvailabilityBitfieldRecord: AvailabilityBitfieldRecord;
+ BabeAuthorityWeight: BabeAuthorityWeight;
+ BabeBlockWeight: BabeBlockWeight;
+ BabeEpochConfiguration: BabeEpochConfiguration;
+ BabeEquivocationProof: BabeEquivocationProof;
+ BabeWeight: BabeWeight;
+ BackedCandidate: BackedCandidate;
+ Balance: Balance;
+ BalanceLock: BalanceLock;
+ BalanceLockTo212: BalanceLockTo212;
+ BalanceOf: BalanceOf;
+ BalanceStatus: BalanceStatus;
+ BeefyCommitment: BeefyCommitment;
+ BeefyId: BeefyId;
+ BeefyKey: BeefyKey;
+ BeefyNextAuthoritySet: BeefyNextAuthoritySet;
+ BeefyPayload: BeefyPayload;
+ BeefySignedCommitment: BeefySignedCommitment;
+ Bid: Bid;
+ Bidder: Bidder;
+ BidKind: BidKind;
+ BitVec: BitVec;
+ Block: Block;
+ BlockAttestations: BlockAttestations;
+ BlockHash: BlockHash;
+ BlockLength: BlockLength;
+ BlockNumber: BlockNumber;
+ BlockNumberFor: BlockNumberFor;
+ BlockNumberOf: BlockNumberOf;
+ BlockTrace: BlockTrace;
+ BlockTraceEvent: BlockTraceEvent;
+ BlockTraceEventData: BlockTraceEventData;
+ BlockTraceSpan: BlockTraceSpan;
+ BlockV0: BlockV0;
+ BlockV1: BlockV1;
+ BlockV2: BlockV2;
+ BlockWeights: BlockWeights;
+ BodyId: BodyId;
+ BodyPart: BodyPart;
+ bool: bool;
+ Bool: Bool;
+ Bounty: Bounty;
+ BountyIndex: BountyIndex;
+ BountyStatus: BountyStatus;
+ BountyStatusActive: BountyStatusActive;
+ BountyStatusCuratorProposed: BountyStatusCuratorProposed;
+ BountyStatusPendingPayout: BountyStatusPendingPayout;
+ BridgedBlockHash: BridgedBlockHash;
+ BridgedBlockNumber: BridgedBlockNumber;
+ BridgedHeader: BridgedHeader;
+ BridgeMessageId: BridgeMessageId;
+ BufferedSessionChange: BufferedSessionChange;
+ Bytes: Bytes;
+ Call: Call;
+ CallHash: CallHash;
+ CallHashOf: CallHashOf;
+ CallIndex: CallIndex;
+ CallOrigin: CallOrigin;
+ CandidateCommitments: CandidateCommitments;
+ CandidateDescriptor: CandidateDescriptor;
+ CandidateHash: CandidateHash;
+ CandidateInfo: CandidateInfo;
+ CandidatePendingAvailability: CandidatePendingAvailability;
+ CandidateReceipt: CandidateReceipt;
+ ChainId: ChainId;
+ ChainProperties: ChainProperties;
+ ChainType: ChainType;
+ ChangesTrieConfiguration: ChangesTrieConfiguration;
+ ChangesTrieSignal: ChangesTrieSignal;
+ ClassDetails: ClassDetails;
+ ClassId: ClassId;
+ ClassMetadata: ClassMetadata;
+ CodecHash: CodecHash;
+ CodeHash: CodeHash;
+ CollatorId: CollatorId;
+ CollatorSignature: CollatorSignature;
+ CollectiveOrigin: CollectiveOrigin;
+ CommittedCandidateReceipt: CommittedCandidateReceipt;
+ CompactAssignments: CompactAssignments;
+ CompactAssignmentsTo257: CompactAssignmentsTo257;
+ CompactAssignmentsTo265: CompactAssignmentsTo265;
+ CompactAssignmentsWith16: CompactAssignmentsWith16;
+ CompactAssignmentsWith24: CompactAssignmentsWith24;
+ CompactScore: CompactScore;
+ CompactScoreCompact: CompactScoreCompact;
+ ConfigData: ConfigData;
+ Consensus: Consensus;
+ ConsensusEngineId: ConsensusEngineId;
+ ConsumedWeight: ConsumedWeight;
+ ContractCallRequest: ContractCallRequest;
+ ContractConstructorSpec: ContractConstructorSpec;
+ ContractContractSpec: ContractContractSpec;
+ ContractCryptoHasher: ContractCryptoHasher;
+ ContractDiscriminant: ContractDiscriminant;
+ ContractDisplayName: ContractDisplayName;
+ ContractEventParamSpec: ContractEventParamSpec;
+ ContractEventSpec: ContractEventSpec;
+ ContractExecResult: ContractExecResult;
+ ContractExecResultErr: ContractExecResultErr;
+ ContractExecResultErrModule: ContractExecResultErrModule;
+ ContractExecResultOk: ContractExecResultOk;
+ ContractExecResultResult: ContractExecResultResult;
+ ContractExecResultSuccessTo255: ContractExecResultSuccessTo255;
+ ContractExecResultSuccessTo260: ContractExecResultSuccessTo260;
+ ContractExecResultTo255: ContractExecResultTo255;
+ ContractExecResultTo260: ContractExecResultTo260;
+ ContractExecResultTo267: ContractExecResultTo267;
+ ContractInfo: ContractInfo;
+ ContractInstantiateResult: ContractInstantiateResult;
+ ContractInstantiateResultTo267: ContractInstantiateResultTo267;
+ ContractLayoutArray: ContractLayoutArray;
+ ContractLayoutCell: ContractLayoutCell;
+ ContractLayoutEnum: ContractLayoutEnum;
+ ContractLayoutHash: ContractLayoutHash;
+ ContractLayoutHashingStrategy: ContractLayoutHashingStrategy;
+ ContractLayoutKey: ContractLayoutKey;
+ ContractLayoutStruct: ContractLayoutStruct;
+ ContractLayoutStructField: ContractLayoutStructField;
+ ContractMessageParamSpec: ContractMessageParamSpec;
+ ContractMessageSpec: ContractMessageSpec;
+ ContractMetadata: ContractMetadata;
+ ContractMetadataLatest: ContractMetadataLatest;
+ ContractMetadataV0: ContractMetadataV0;
+ ContractMetadataV1: ContractMetadataV1;
+ ContractProject: ContractProject;
+ ContractProjectContract: ContractProjectContract;
+ ContractProjectInfo: ContractProjectInfo;
+ ContractProjectSource: ContractProjectSource;
+ ContractProjectV0: ContractProjectV0;
+ ContractSelector: ContractSelector;
+ ContractStorageKey: ContractStorageKey;
+ ContractStorageLayout: ContractStorageLayout;
+ ContractTypeSpec: ContractTypeSpec;
+ Conviction: Conviction;
+ CoreAssignment: CoreAssignment;
+ CoreIndex: CoreIndex;
+ CoreOccupied: CoreOccupied;
+ CrateVersion: CrateVersion;
+ CreatedBlock: CreatedBlock;
+ CumulusPalletDmpQueueConfigData: CumulusPalletDmpQueueConfigData;
+ CumulusPalletDmpQueuePageIndexData: CumulusPalletDmpQueuePageIndexData;
+ CumulusPalletParachainSystemRelayStateSnapshotMessagingStateSnapshot: CumulusPalletParachainSystemRelayStateSnapshotMessagingStateSnapshot;
+ CumulusPalletXcmpQueueInboundStatus: CumulusPalletXcmpQueueInboundStatus;
+ CumulusPalletXcmpQueueOutboundStatus: CumulusPalletXcmpQueueOutboundStatus;
+ CumulusPalletXcmpQueueQueueConfigData: CumulusPalletXcmpQueueQueueConfigData;
+ CumulusPrimitivesParachainInherentParachainInherentData: CumulusPrimitivesParachainInherentParachainInherentData;
+ Data: Data;
+ DeferredOffenceOf: DeferredOffenceOf;
+ DefunctVoter: DefunctVoter;
+ DelayKind: DelayKind;
+ DelayKindBest: DelayKindBest;
+ Delegations: Delegations;
+ DeletedContract: DeletedContract;
+ DeliveredMessages: DeliveredMessages;
+ DepositBalance: DepositBalance;
+ DepositBalanceOf: DepositBalanceOf;
+ DestroyWitness: DestroyWitness;
+ Digest: Digest;
+ DigestItem: DigestItem;
+ DigestOf: DigestOf;
+ DispatchClass: DispatchClass;
+ DispatchError: DispatchError;
+ DispatchErrorModule: DispatchErrorModule;
+ DispatchErrorTo198: DispatchErrorTo198;
+ DispatchFeePayment: DispatchFeePayment;
+ DispatchInfo: DispatchInfo;
+ DispatchInfoTo190: DispatchInfoTo190;
+ DispatchInfoTo244: DispatchInfoTo244;
+ DispatchOutcome: DispatchOutcome;
+ DispatchResult: DispatchResult;
+ DispatchResultOf: DispatchResultOf;
+ DispatchResultTo198: DispatchResultTo198;
+ DisputeLocation: DisputeLocation;
+ DisputeResult: DisputeResult;
+ DisputeState: DisputeState;
+ DisputeStatement: DisputeStatement;
+ DisputeStatementSet: DisputeStatementSet;
+ DoubleEncodedCall: DoubleEncodedCall;
+ DoubleVoteReport: DoubleVoteReport;
+ DownwardMessage: DownwardMessage;
+ EcdsaSignature: EcdsaSignature;
+ Ed25519Signature: Ed25519Signature;
+ EIP1559Transaction: EIP1559Transaction;
+ EIP2930Transaction: EIP2930Transaction;
+ ElectionCompute: ElectionCompute;
+ ElectionPhase: ElectionPhase;
+ ElectionResult: ElectionResult;
+ ElectionScore: ElectionScore;
+ ElectionSize: ElectionSize;
+ ElectionStatus: ElectionStatus;
+ EncodedFinalityProofs: EncodedFinalityProofs;
+ EncodedJustification: EncodedJustification;
+ EpochAuthorship: EpochAuthorship;
+ Era: Era;
+ EraIndex: EraIndex;
+ EraPoints: EraPoints;
+ EraRewardPoints: EraRewardPoints;
+ EraRewards: EraRewards;
+ ErrorMetadataLatest: ErrorMetadataLatest;
+ ErrorMetadataV10: ErrorMetadataV10;
+ ErrorMetadataV11: ErrorMetadataV11;
+ ErrorMetadataV12: ErrorMetadataV12;
+ ErrorMetadataV13: ErrorMetadataV13;
+ ErrorMetadataV14: ErrorMetadataV14;
+ ErrorMetadataV9: ErrorMetadataV9;
+ EthAccessList: EthAccessList;
+ EthAccessListItem: EthAccessListItem;
+ EthAccount: EthAccount;
+ EthAddress: EthAddress;
+ EthBlock: EthBlock;
+ EthBloom: EthBloom;
+ EthCallRequest: EthCallRequest;
+ EthereumAccountId: EthereumAccountId;
+ EthereumAddress: EthereumAddress;
+ EthereumBlock: EthereumBlock;
+ EthereumLog: EthereumLog;
+ EthereumLookupSource: EthereumLookupSource;
+ EthereumReceipt: EthereumReceipt;
+ EthereumSignature: EthereumSignature;
+ EthereumTransactionLegacyTransaction: EthereumTransactionLegacyTransaction;
+ EthFilter: EthFilter;
+ EthFilterAddress: EthFilterAddress;
+ EthFilterChanges: EthFilterChanges;
+ EthFilterTopic: EthFilterTopic;
+ EthFilterTopicEntry: EthFilterTopicEntry;
+ EthFilterTopicInner: EthFilterTopicInner;
+ EthHeader: EthHeader;
+ EthLog: EthLog;
+ EthReceipt: EthReceipt;
+ EthRichBlock: EthRichBlock;
+ EthRichHeader: EthRichHeader;
+ EthStorageProof: EthStorageProof;
+ EthSubKind: EthSubKind;
+ EthSubParams: EthSubParams;
+ EthSubResult: EthSubResult;
+ EthSyncInfo: EthSyncInfo;
+ EthSyncStatus: EthSyncStatus;
+ EthTransaction: EthTransaction;
+ EthTransactionAction: EthTransactionAction;
+ EthTransactionCondition: EthTransactionCondition;
+ EthTransactionRequest: EthTransactionRequest;
+ EthTransactionSignature: EthTransactionSignature;
+ EthTransactionStatus: EthTransactionStatus;
+ EthWork: EthWork;
+ Event: Event;
+ EventId: EventId;
+ EventIndex: EventIndex;
+ EventMetadataLatest: EventMetadataLatest;
+ EventMetadataV10: EventMetadataV10;
+ EventMetadataV11: EventMetadataV11;
+ EventMetadataV12: EventMetadataV12;
+ EventMetadataV13: EventMetadataV13;
+ EventMetadataV14: EventMetadataV14;
+ EventMetadataV9: EventMetadataV9;
+ EventRecord: EventRecord;
+ EvmAccount: EvmAccount;
+ EvmCoreErrorExitReason: EvmCoreErrorExitReason;
+ EvmLog: EvmLog;
+ EvmVicinity: EvmVicinity;
+ ExecReturnValue: ExecReturnValue;
+ ExitError: ExitError;
+ ExitFatal: ExitFatal;
+ ExitReason: ExitReason;
+ ExitRevert: ExitRevert;
+ ExitSucceed: ExitSucceed;
+ ExplicitDisputeStatement: ExplicitDisputeStatement;
+ Exposure: Exposure;
+ ExtendedBalance: ExtendedBalance;
+ Extrinsic: Extrinsic;
+ ExtrinsicEra: ExtrinsicEra;
+ ExtrinsicMetadataLatest: ExtrinsicMetadataLatest;
+ ExtrinsicMetadataV11: ExtrinsicMetadataV11;
+ ExtrinsicMetadataV12: ExtrinsicMetadataV12;
+ ExtrinsicMetadataV13: ExtrinsicMetadataV13;
+ ExtrinsicMetadataV14: ExtrinsicMetadataV14;
+ ExtrinsicOrHash: ExtrinsicOrHash;
+ ExtrinsicPayload: ExtrinsicPayload;
+ ExtrinsicPayloadUnknown: ExtrinsicPayloadUnknown;
+ ExtrinsicPayloadV4: ExtrinsicPayloadV4;
+ ExtrinsicSignature: ExtrinsicSignature;
+ ExtrinsicSignatureV4: ExtrinsicSignatureV4;
+ ExtrinsicStatus: ExtrinsicStatus;
+ ExtrinsicsWeight: ExtrinsicsWeight;
+ ExtrinsicUnknown: ExtrinsicUnknown;
+ ExtrinsicV4: ExtrinsicV4;
+ FeeDetails: FeeDetails;
+ Fixed128: Fixed128;
+ Fixed64: Fixed64;
+ FixedI128: FixedI128;
+ FixedI64: FixedI64;
+ FixedU128: FixedU128;
+ FixedU64: FixedU64;
+ Forcing: Forcing;
+ ForkTreePendingChange: ForkTreePendingChange;
+ ForkTreePendingChangeNode: ForkTreePendingChangeNode;
+ FpRpcTransactionStatus: FpRpcTransactionStatus;
+ FullIdentification: FullIdentification;
+ FunctionArgumentMetadataLatest: FunctionArgumentMetadataLatest;
+ FunctionArgumentMetadataV10: FunctionArgumentMetadataV10;
+ FunctionArgumentMetadataV11: FunctionArgumentMetadataV11;
+ FunctionArgumentMetadataV12: FunctionArgumentMetadataV12;
+ FunctionArgumentMetadataV13: FunctionArgumentMetadataV13;
+ FunctionArgumentMetadataV14: FunctionArgumentMetadataV14;
+ FunctionArgumentMetadataV9: FunctionArgumentMetadataV9;
+ FunctionMetadataLatest: FunctionMetadataLatest;
+ FunctionMetadataV10: FunctionMetadataV10;
+ FunctionMetadataV11: FunctionMetadataV11;
+ FunctionMetadataV12: FunctionMetadataV12;
+ FunctionMetadataV13: FunctionMetadataV13;
+ FunctionMetadataV14: FunctionMetadataV14;
+ FunctionMetadataV9: FunctionMetadataV9;
+ FundIndex: FundIndex;
+ FundInfo: FundInfo;
+ Fungibility: Fungibility;
+ FungibilityV0: FungibilityV0;
+ FungibilityV1: FungibilityV1;
+ FungibilityV2: FungibilityV2;
+ Gas: Gas;
+ GiltBid: GiltBid;
+ GlobalValidationData: GlobalValidationData;
+ GlobalValidationSchedule: GlobalValidationSchedule;
+ GrandpaCommit: GrandpaCommit;
+ GrandpaEquivocation: GrandpaEquivocation;
+ GrandpaEquivocationProof: GrandpaEquivocationProof;
+ GrandpaEquivocationValue: GrandpaEquivocationValue;
+ GrandpaJustification: GrandpaJustification;
+ GrandpaPrecommit: GrandpaPrecommit;
+ GrandpaPrevote: GrandpaPrevote;
+ GrandpaSignedPrecommit: GrandpaSignedPrecommit;
+ GroupIndex: GroupIndex;
+ H1024: H1024;
+ H128: H128;
+ H160: H160;
+ H2048: H2048;
+ H256: H256;
+ H32: H32;
+ H512: H512;
+ H64: H64;
+ Hash: Hash;
+ HeadData: HeadData;
+ Header: Header;
+ HeaderPartial: HeaderPartial;
+ Health: Health;
+ Heartbeat: Heartbeat;
+ HeartbeatTo244: HeartbeatTo244;
+ HostConfiguration: HostConfiguration;
+ HostFnWeights: HostFnWeights;
+ HostFnWeightsTo264: HostFnWeightsTo264;
+ HrmpChannel: HrmpChannel;
+ HrmpChannelId: HrmpChannelId;
+ HrmpOpenChannelRequest: HrmpOpenChannelRequest;
+ i128: i128;
+ I128: I128;
+ i16: i16;
+ I16: I16;
+ i256: i256;
+ I256: I256;
+ i32: i32;
+ I32: I32;
+ I32F32: I32F32;
+ i64: i64;
+ I64: I64;
+ i8: i8;
+ I8: I8;
+ IdentificationTuple: IdentificationTuple;
+ IdentityFields: IdentityFields;
+ IdentityInfo: IdentityInfo;
+ IdentityInfoAdditional: IdentityInfoAdditional;
+ IdentityInfoTo198: IdentityInfoTo198;
+ IdentityJudgement: IdentityJudgement;
+ ImmortalEra: ImmortalEra;
+ ImportedAux: ImportedAux;
+ InboundDownwardMessage: InboundDownwardMessage;
+ InboundHrmpMessage: InboundHrmpMessage;
+ InboundHrmpMessages: InboundHrmpMessages;
+ InboundLaneData: InboundLaneData;
+ InboundRelayer: InboundRelayer;
+ InboundStatus: InboundStatus;
+ IncludedBlocks: IncludedBlocks;
+ InclusionFee: InclusionFee;
+ IncomingParachain: IncomingParachain;
+ IncomingParachainDeploy: IncomingParachainDeploy;
+ IncomingParachainFixed: IncomingParachainFixed;
+ Index: Index;
+ IndicesLookupSource: IndicesLookupSource;
+ IndividualExposure: IndividualExposure;
+ InitializationData: InitializationData;
+ InstanceDetails: InstanceDetails;
+ InstanceId: InstanceId;
+ InstanceMetadata: InstanceMetadata;
+ InstantiateRequest: InstantiateRequest;
+ InstantiateReturnValue: InstantiateReturnValue;
+ InstantiateReturnValueTo267: InstantiateReturnValueTo267;
+ InstructionV2: InstructionV2;
+ InstructionWeights: InstructionWeights;
+ InteriorMultiLocation: InteriorMultiLocation;
+ InvalidDisputeStatementKind: InvalidDisputeStatementKind;
+ InvalidTransaction: InvalidTransaction;
+ Json: Json;
+ Junction: Junction;
+ Junctions: Junctions;
+ JunctionsV1: JunctionsV1;
+ JunctionsV2: JunctionsV2;
+ JunctionV0: JunctionV0;
+ JunctionV1: JunctionV1;
+ JunctionV2: JunctionV2;
+ Justification: Justification;
+ JustificationNotification: JustificationNotification;
+ Justifications: Justifications;
+ Key: Key;
+ KeyOwnerProof: KeyOwnerProof;
+ Keys: Keys;
+ KeyType: KeyType;
+ KeyTypeId: KeyTypeId;
+ KeyValue: KeyValue;
+ KeyValueOption: KeyValueOption;
+ Kind: Kind;
+ LaneId: LaneId;
+ LastContribution: LastContribution;
+ LastRuntimeUpgradeInfo: LastRuntimeUpgradeInfo;
+ LeasePeriod: LeasePeriod;
+ LeasePeriodOf: LeasePeriodOf;
+ LegacyTransaction: LegacyTransaction;
+ Limits: Limits;
+ LimitsTo264: LimitsTo264;
+ LocalValidationData: LocalValidationData;
+ LockIdentifier: LockIdentifier;
+ LookupSource: LookupSource;
+ LookupTarget: LookupTarget;
+ LotteryConfig: LotteryConfig;
+ MaybeRandomness: MaybeRandomness;
+ MaybeVrf: MaybeVrf;
+ MemberCount: MemberCount;
+ MembershipProof: MembershipProof;
+ MessageData: MessageData;
+ MessageId: MessageId;
+ MessageIngestionType: MessageIngestionType;
+ MessageKey: MessageKey;
+ MessageNonce: MessageNonce;
+ MessageQueueChain: MessageQueueChain;
+ MessagesDeliveryProofOf: MessagesDeliveryProofOf;
+ MessagesProofOf: MessagesProofOf;
+ MessagingStateSnapshot: MessagingStateSnapshot;
+ MessagingStateSnapshotEgressEntry: MessagingStateSnapshotEgressEntry;
+ MetadataAll: MetadataAll;
+ MetadataLatest: MetadataLatest;
+ MetadataV10: MetadataV10;
+ MetadataV11: MetadataV11;
+ MetadataV12: MetadataV12;
+ MetadataV13: MetadataV13;
+ MetadataV14: MetadataV14;
+ MetadataV9: MetadataV9;
+ MmrLeafProof: MmrLeafProof;
+ MmrRootHash: MmrRootHash;
+ ModuleConstantMetadataV10: ModuleConstantMetadataV10;
+ ModuleConstantMetadataV11: ModuleConstantMetadataV11;
+ ModuleConstantMetadataV12: ModuleConstantMetadataV12;
+ ModuleConstantMetadataV13: ModuleConstantMetadataV13;
+ ModuleConstantMetadataV9: ModuleConstantMetadataV9;
+ ModuleId: ModuleId;
+ ModuleMetadataV10: ModuleMetadataV10;
+ ModuleMetadataV11: ModuleMetadataV11;
+ ModuleMetadataV12: ModuleMetadataV12;
+ ModuleMetadataV13: ModuleMetadataV13;
+ ModuleMetadataV9: ModuleMetadataV9;
+ Moment: Moment;
+ MomentOf: MomentOf;
+ MoreAttestations: MoreAttestations;
+ MortalEra: MortalEra;
+ MultiAddress: MultiAddress;
+ MultiAsset: MultiAsset;
+ MultiAssetFilter: MultiAssetFilter;
+ MultiAssetFilterV1: MultiAssetFilterV1;
+ MultiAssetFilterV2: MultiAssetFilterV2;
+ MultiAssets: MultiAssets;
+ MultiAssetsV1: MultiAssetsV1;
+ MultiAssetsV2: MultiAssetsV2;
+ MultiAssetV0: MultiAssetV0;
+ MultiAssetV1: MultiAssetV1;
+ MultiAssetV2: MultiAssetV2;
+ MultiDisputeStatementSet: MultiDisputeStatementSet;
+ MultiLocation: MultiLocation;
+ MultiLocationV0: MultiLocationV0;
+ MultiLocationV1: MultiLocationV1;
+ MultiLocationV2: MultiLocationV2;
+ Multiplier: Multiplier;
+ Multisig: Multisig;
+ MultiSignature: MultiSignature;
+ MultiSigner: MultiSigner;
+ NetworkId: NetworkId;
+ NetworkState: NetworkState;
+ NetworkStatePeerset: NetworkStatePeerset;
+ NetworkStatePeersetInfo: NetworkStatePeersetInfo;
+ NewBidder: NewBidder;
+ NextAuthority: NextAuthority;
+ NextConfigDescriptor: NextConfigDescriptor;
+ NextConfigDescriptorV1: NextConfigDescriptorV1;
+ NftDataStructsAccessMode: NftDataStructsAccessMode;
+ NftDataStructsCollection: NftDataStructsCollection;
+ NftDataStructsCollectionId: NftDataStructsCollectionId;
+ NftDataStructsCollectionLimits: NftDataStructsCollectionLimits;
+ NftDataStructsCollectionMode: NftDataStructsCollectionMode;
+ NftDataStructsCreateItemData: NftDataStructsCreateItemData;
+ NftDataStructsMetaUpdatePermission: NftDataStructsMetaUpdatePermission;
+ NftDataStructsSchemaVersion: NftDataStructsSchemaVersion;
+ NftDataStructsSponsorshipState: NftDataStructsSponsorshipState;
+ NftDataStructsTokenId: NftDataStructsTokenId;
+ NodeRole: NodeRole;
+ Nominations: Nominations;
+ NominatorIndex: NominatorIndex;
+ NominatorIndexCompact: NominatorIndexCompact;
+ NotConnectedPeer: NotConnectedPeer;
+ Null: Null;
+ OffchainAccuracy: OffchainAccuracy;
+ OffchainAccuracyCompact: OffchainAccuracyCompact;
+ OffenceDetails: OffenceDetails;
+ Offender: Offender;
+ OpaqueCall: OpaqueCall;
+ OpaqueMultiaddr: OpaqueMultiaddr;
+ OpaqueNetworkState: OpaqueNetworkState;
+ OpaquePeerId: OpaquePeerId;
+ OpaqueTimeSlot: OpaqueTimeSlot;
+ OpenTip: OpenTip;
+ OpenTipFinderTo225: OpenTipFinderTo225;
+ OpenTipTip: OpenTipTip;
+ OpenTipTo225: OpenTipTo225;
+ OperatingMode: OperatingMode;
+ Origin: Origin;
+ OriginCaller: OriginCaller;
+ OriginKindV0: OriginKindV0;
+ OriginKindV1: OriginKindV1;
+ OriginKindV2: OriginKindV2;
+ OutboundHrmpMessage: OutboundHrmpMessage;
+ OutboundLaneData: OutboundLaneData;
+ OutboundMessageFee: OutboundMessageFee;
+ OutboundPayload: OutboundPayload;
+ OutboundStatus: OutboundStatus;
+ Outcome: Outcome;
+ OverweightIndex: OverweightIndex;
+ Owner: Owner;
+ PageCounter: PageCounter;
+ PageIndexData: PageIndexData;
+ PalletCallMetadataLatest: PalletCallMetadataLatest;
+ PalletCallMetadataV14: PalletCallMetadataV14;
+ PalletCommonAccountBasicCrossAccountIdRepr: PalletCommonAccountBasicCrossAccountIdRepr;
+ PalletConstantMetadataLatest: PalletConstantMetadataLatest;
+ PalletConstantMetadataV14: PalletConstantMetadataV14;
+ PalletErrorMetadataLatest: PalletErrorMetadataLatest;
+ PalletErrorMetadataV14: PalletErrorMetadataV14;
+ PalletEventMetadataLatest: PalletEventMetadataLatest;
+ PalletEventMetadataV14: PalletEventMetadataV14;
+ PalletId: PalletId;
+ PalletMetadataLatest: PalletMetadataLatest;
+ PalletMetadataV14: PalletMetadataV14;
+ PalletNonfungibleItemData: PalletNonfungibleItemData;
+ PalletRefungibleItemData: PalletRefungibleItemData;
+ PalletsOrigin: PalletsOrigin;
+ PalletStorageMetadataLatest: PalletStorageMetadataLatest;
+ PalletStorageMetadataV14: PalletStorageMetadataV14;
+ PalletUnqSchedulerCallSpec: PalletUnqSchedulerCallSpec;
+ PalletUnqSchedulerReleases: PalletUnqSchedulerReleases;
+ PalletUnqSchedulerScheduledV2: PalletUnqSchedulerScheduledV2;
+ PalletVersion: PalletVersion;
+ ParachainDispatchOrigin: ParachainDispatchOrigin;
+ ParachainInherentData: ParachainInherentData;
+ ParachainProposal: ParachainProposal;
+ ParachainsInherentData: ParachainsInherentData;
+ ParaGenesisArgs: ParaGenesisArgs;
+ ParaId: ParaId;
+ ParaInfo: ParaInfo;
+ ParaLifecycle: ParaLifecycle;
+ Parameter: Parameter;
+ ParaPastCodeMeta: ParaPastCodeMeta;
+ ParaScheduling: ParaScheduling;
+ ParathreadClaim: ParathreadClaim;
+ ParathreadClaimQueue: ParathreadClaimQueue;
+ ParathreadEntry: ParathreadEntry;
+ ParaValidatorIndex: ParaValidatorIndex;
+ Pays: Pays;
+ Peer: Peer;
+ PeerEndpoint: PeerEndpoint;
+ PeerEndpointAddr: PeerEndpointAddr;
+ PeerInfo: PeerInfo;
+ PeerPing: PeerPing;
+ PendingChange: PendingChange;
+ PendingPause: PendingPause;
+ PendingResume: PendingResume;
+ Perbill: Perbill;
+ Percent: Percent;
+ PerDispatchClassU32: PerDispatchClassU32;
+ PerDispatchClassWeight: PerDispatchClassWeight;
+ PerDispatchClassWeightsPerClass: PerDispatchClassWeightsPerClass;
+ Period: Period;
+ Permill: Permill;
+ PermissionLatest: PermissionLatest;
+ PermissionsV1: PermissionsV1;
+ PermissionVersions: PermissionVersions;
+ Perquintill: Perquintill;
+ PersistedValidationData: PersistedValidationData;
+ PerU16: PerU16;
+ Phantom: Phantom;
+ PhantomData: PhantomData;
+ Phase: Phase;
+ PhragmenScore: PhragmenScore;
+ Points: Points;
+ PolkadotParachainPrimitivesXcmpMessageFormat: PolkadotParachainPrimitivesXcmpMessageFormat;
+ PolkadotPrimitivesV1AbridgedHostConfiguration: PolkadotPrimitivesV1AbridgedHostConfiguration;
+ PolkadotPrimitivesV1PersistedValidationData: PolkadotPrimitivesV1PersistedValidationData;
+ PortableRegistry: PortableRegistry;
+ PortableRegistryV14: PortableRegistryV14;
+ PortableType: PortableType;
+ PortableTypeV14: PortableTypeV14;
+ Precommits: Precommits;
+ PrefabWasmModule: PrefabWasmModule;
+ PrefixedStorageKey: PrefixedStorageKey;
+ PreimageStatus: PreimageStatus;
+ PreimageStatusAvailable: PreimageStatusAvailable;
+ PreRuntime: PreRuntime;
+ Prevotes: Prevotes;
+ Priority: Priority;
+ PriorLock: PriorLock;
+ PropIndex: PropIndex;
+ Proposal: Proposal;
+ ProposalIndex: ProposalIndex;
+ ProxyAnnouncement: ProxyAnnouncement;
+ ProxyDefinition: ProxyDefinition;
+ ProxyState: ProxyState;
+ ProxyType: ProxyType;
+ QueryId: QueryId;
+ QueryStatus: QueryStatus;
+ QueueConfigData: QueueConfigData;
+ QueuedParathread: QueuedParathread;
+ Randomness: Randomness;
+ Raw: Raw;
+ RawAuraPreDigest: RawAuraPreDigest;
+ RawBabePreDigest: RawBabePreDigest;
+ RawBabePreDigestCompat: RawBabePreDigestCompat;
+ RawBabePreDigestPrimary: RawBabePreDigestPrimary;
+ RawBabePreDigestPrimaryTo159: RawBabePreDigestPrimaryTo159;
+ RawBabePreDigestSecondaryPlain: RawBabePreDigestSecondaryPlain;
+ RawBabePreDigestSecondaryTo159: RawBabePreDigestSecondaryTo159;
+ RawBabePreDigestSecondaryVRF: RawBabePreDigestSecondaryVRF;
+ RawBabePreDigestTo159: RawBabePreDigestTo159;
+ RawOrigin: RawOrigin;
+ RawSolution: RawSolution;
+ RawSolutionTo265: RawSolutionTo265;
+ RawSolutionWith16: RawSolutionWith16;
+ RawSolutionWith24: RawSolutionWith24;
+ RawVRFOutput: RawVRFOutput;
+ ReadProof: ReadProof;
+ ReadySolution: ReadySolution;
+ Reasons: Reasons;
+ RecoveryConfig: RecoveryConfig;
+ RefCount: RefCount;
+ RefCountTo259: RefCountTo259;
+ ReferendumIndex: ReferendumIndex;
+ ReferendumInfo: ReferendumInfo;
+ ReferendumInfoFinished: ReferendumInfoFinished;
+ ReferendumInfoTo239: ReferendumInfoTo239;
+ ReferendumStatus: ReferendumStatus;
+ RegisteredParachainInfo: RegisteredParachainInfo;
+ RegistrarIndex: RegistrarIndex;
+ RegistrarInfo: RegistrarInfo;
+ Registration: Registration;
+ RegistrationJudgement: RegistrationJudgement;
+ RegistrationTo198: RegistrationTo198;
+ RelayBlockNumber: RelayBlockNumber;
+ RelayChainBlockNumber: RelayChainBlockNumber;
+ RelayChainHash: RelayChainHash;
+ RelayerId: RelayerId;
+ RelayHash: RelayHash;
+ Releases: Releases;
+ Remark: Remark;
+ Renouncing: Renouncing;
+ RentProjection: RentProjection;
+ ReplacementTimes: ReplacementTimes;
+ ReportedRoundStates: ReportedRoundStates;
+ Reporter: Reporter;
+ ReportIdOf: ReportIdOf;
+ ReserveData: ReserveData;
+ ReserveIdentifier: ReserveIdentifier;
+ Response: Response;
+ ResponseV0: ResponseV0;
+ ResponseV1: ResponseV1;
+ ResponseV2: ResponseV2;
+ ResponseV2Error: ResponseV2Error;
+ ResponseV2Result: ResponseV2Result;
+ Retriable: Retriable;
+ RewardDestination: RewardDestination;
+ RewardPoint: RewardPoint;
+ RoundSnapshot: RoundSnapshot;
+ RoundState: RoundState;
+ RpcMethods: RpcMethods;
+ RuntimeDbWeight: RuntimeDbWeight;
+ RuntimeDispatchInfo: RuntimeDispatchInfo;
+ RuntimeVersion: RuntimeVersion;
+ RuntimeVersionApi: RuntimeVersionApi;
+ RuntimeVersionPartial: RuntimeVersionPartial;
+ Schedule: Schedule;
+ Scheduled: Scheduled;
+ ScheduledTo254: ScheduledTo254;
+ SchedulePeriod: SchedulePeriod;
+ SchedulePriority: SchedulePriority;
+ ScheduleTo212: ScheduleTo212;
+ ScheduleTo258: ScheduleTo258;
+ ScheduleTo264: ScheduleTo264;
+ Scheduling: Scheduling;
+ Seal: Seal;
+ SealV0: SealV0;
+ SeatHolder: SeatHolder;
+ SeedOf: SeedOf;
+ ServiceQuality: ServiceQuality;
+ SessionIndex: SessionIndex;
+ SessionInfo: SessionInfo;
+ SessionInfoValidatorGroup: SessionInfoValidatorGroup;
+ SessionKeys1: SessionKeys1;
+ SessionKeys10: SessionKeys10;
+ SessionKeys10B: SessionKeys10B;
+ SessionKeys2: SessionKeys2;
+ SessionKeys3: SessionKeys3;
+ SessionKeys4: SessionKeys4;
+ SessionKeys5: SessionKeys5;
+ SessionKeys6: SessionKeys6;
+ SessionKeys6B: SessionKeys6B;
+ SessionKeys7: SessionKeys7;
+ SessionKeys7B: SessionKeys7B;
+ SessionKeys8: SessionKeys8;
+ SessionKeys8B: SessionKeys8B;
+ SessionKeys9: SessionKeys9;
+ SessionKeys9B: SessionKeys9B;
+ SetId: SetId;
+ SetIndex: SetIndex;
+ Si0Field: Si0Field;
+ Si0LookupTypeId: Si0LookupTypeId;
+ Si0Path: Si0Path;
+ Si0Type: Si0Type;
+ Si0TypeDef: Si0TypeDef;
+ Si0TypeDefArray: Si0TypeDefArray;
+ Si0TypeDefBitSequence: Si0TypeDefBitSequence;
+ Si0TypeDefCompact: Si0TypeDefCompact;
+ Si0TypeDefComposite: Si0TypeDefComposite;
+ Si0TypeDefPhantom: Si0TypeDefPhantom;
+ Si0TypeDefPrimitive: Si0TypeDefPrimitive;
+ Si0TypeDefSequence: Si0TypeDefSequence;
+ Si0TypeDefTuple: Si0TypeDefTuple;
+ Si0TypeDefVariant: Si0TypeDefVariant;
+ Si0TypeParameter: Si0TypeParameter;
+ Si0Variant: Si0Variant;
+ Si1Field: Si1Field;
+ Si1LookupTypeId: Si1LookupTypeId;
+ Si1Path: Si1Path;
+ Si1Type: Si1Type;
+ Si1TypeDef: Si1TypeDef;
+ Si1TypeDefArray: Si1TypeDefArray;
+ Si1TypeDefBitSequence: Si1TypeDefBitSequence;
+ Si1TypeDefCompact: Si1TypeDefCompact;
+ Si1TypeDefComposite: Si1TypeDefComposite;
+ Si1TypeDefPrimitive: Si1TypeDefPrimitive;
+ Si1TypeDefSequence: Si1TypeDefSequence;
+ Si1TypeDefTuple: Si1TypeDefTuple;
+ Si1TypeDefVariant: Si1TypeDefVariant;
+ Si1TypeParameter: Si1TypeParameter;
+ Si1Variant: Si1Variant;
+ SiField: SiField;
+ Signature: Signature;
+ SignedAvailabilityBitfield: SignedAvailabilityBitfield;
+ SignedAvailabilityBitfields: SignedAvailabilityBitfields;
+ SignedBlock: SignedBlock;
+ SignedBlockWithJustification: SignedBlockWithJustification;
+ SignedBlockWithJustifications: SignedBlockWithJustifications;
+ SignedExtensionMetadataLatest: SignedExtensionMetadataLatest;
+ SignedExtensionMetadataV14: SignedExtensionMetadataV14;
+ SignedSubmission: SignedSubmission;
+ SignedSubmissionOf: SignedSubmissionOf;
+ SignedSubmissionTo276: SignedSubmissionTo276;
+ SignerPayload: SignerPayload;
+ SigningContext: SigningContext;
+ SiLookupTypeId: SiLookupTypeId;
+ SiPath: SiPath;
+ SiType: SiType;
+ SiTypeDef: SiTypeDef;
+ SiTypeDefArray: SiTypeDefArray;
+ SiTypeDefBitSequence: SiTypeDefBitSequence;
+ SiTypeDefCompact: SiTypeDefCompact;
+ SiTypeDefComposite: SiTypeDefComposite;
+ SiTypeDefPrimitive: SiTypeDefPrimitive;
+ SiTypeDefSequence: SiTypeDefSequence;
+ SiTypeDefTuple: SiTypeDefTuple;
+ SiTypeDefVariant: SiTypeDefVariant;
+ SiTypeParameter: SiTypeParameter;
+ SiVariant: SiVariant;
+ SlashingSpans: SlashingSpans;
+ SlashingSpansTo204: SlashingSpansTo204;
+ SlashJournalEntry: SlashJournalEntry;
+ Slot: Slot;
+ SlotNumber: SlotNumber;
+ SlotRange: SlotRange;
+ SocietyJudgement: SocietyJudgement;
+ SocietyVote: SocietyVote;
+ SolutionOrSnapshotSize: SolutionOrSnapshotSize;
+ SolutionSupport: SolutionSupport;
+ SolutionSupports: SolutionSupports;
+ SpanIndex: SpanIndex;
+ SpanRecord: SpanRecord;
+ SpecVersion: SpecVersion;
+ Sr25519Signature: Sr25519Signature;
+ StakingLedger: StakingLedger;
+ StakingLedgerTo223: StakingLedgerTo223;
+ StakingLedgerTo240: StakingLedgerTo240;
+ Statement: Statement;
+ StatementKind: StatementKind;
+ StorageChangeSet: StorageChangeSet;
+ StorageData: StorageData;
+ StorageEntryMetadataLatest: StorageEntryMetadataLatest;
+ StorageEntryMetadataV10: StorageEntryMetadataV10;
+ StorageEntryMetadataV11: StorageEntryMetadataV11;
+ StorageEntryMetadataV12: StorageEntryMetadataV12;
+ StorageEntryMetadataV13: StorageEntryMetadataV13;
+ StorageEntryMetadataV14: StorageEntryMetadataV14;
+ StorageEntryMetadataV9: StorageEntryMetadataV9;
+ StorageEntryModifierLatest: StorageEntryModifierLatest;
+ StorageEntryModifierV10: StorageEntryModifierV10;
+ StorageEntryModifierV11: StorageEntryModifierV11;
+ StorageEntryModifierV12: StorageEntryModifierV12;
+ StorageEntryModifierV13: StorageEntryModifierV13;
+ StorageEntryModifierV14: StorageEntryModifierV14;
+ StorageEntryModifierV9: StorageEntryModifierV9;
+ StorageEntryTypeLatest: StorageEntryTypeLatest;
+ StorageEntryTypeV10: StorageEntryTypeV10;
+ StorageEntryTypeV11: StorageEntryTypeV11;
+ StorageEntryTypeV12: StorageEntryTypeV12;
+ StorageEntryTypeV13: StorageEntryTypeV13;
+ StorageEntryTypeV14: StorageEntryTypeV14;
+ StorageEntryTypeV9: StorageEntryTypeV9;
+ StorageHasher: StorageHasher;
+ StorageHasherV10: StorageHasherV10;
+ StorageHasherV11: StorageHasherV11;
+ StorageHasherV12: StorageHasherV12;
+ StorageHasherV13: StorageHasherV13;
+ StorageHasherV14: StorageHasherV14;
+ StorageHasherV9: StorageHasherV9;
+ StorageKey: StorageKey;
+ StorageKind: StorageKind;
+ StorageMetadataV10: StorageMetadataV10;
+ StorageMetadataV11: StorageMetadataV11;
+ StorageMetadataV12: StorageMetadataV12;
+ StorageMetadataV13: StorageMetadataV13;
+ StorageMetadataV9: StorageMetadataV9;
+ StorageProof: StorageProof;
+ StoredPendingChange: StoredPendingChange;
+ StoredState: StoredState;
+ StrikeCount: StrikeCount;
+ SubId: SubId;
+ SubmissionIndicesOf: SubmissionIndicesOf;
+ Supports: Supports;
+ SyncState: SyncState;
+ SystemInherentData: SystemInherentData;
+ SystemOrigin: SystemOrigin;
+ Tally: Tally;
+ TaskAddress: TaskAddress;
+ TAssetBalance: TAssetBalance;
+ TAssetDepositBalance: TAssetDepositBalance;
+ Text: Text;
+ Timepoint: Timepoint;
+ TokenError: TokenError;
+ TombstoneContractInfo: TombstoneContractInfo;
+ TraceBlockResponse: TraceBlockResponse;
+ TraceError: TraceError;
+ TransactionInfo: TransactionInfo;
+ TransactionPriority: TransactionPriority;
+ TransactionStorageProof: TransactionStorageProof;
+ TransactionV0: TransactionV0;
+ TransactionV1: TransactionV1;
+ TransactionV2: TransactionV2;
+ TransactionValidityError: TransactionValidityError;
+ TransientValidationData: TransientValidationData;
+ TreasuryProposal: TreasuryProposal;
+ TrieId: TrieId;
+ TrieIndex: TrieIndex;
+ Type: Type;
+ u128: u128;
+ U128: U128;
+ u16: u16;
+ U16: U16;
+ u256: u256;
+ U256: U256;
+ u32: u32;
+ U32: U32;
+ U32F32: U32F32;
+ u64: u64;
+ U64: U64;
+ u8: u8;
+ U8: U8;
+ UnappliedSlash: UnappliedSlash;
+ UnappliedSlashOther: UnappliedSlashOther;
+ UncleEntryItem: UncleEntryItem;
+ UnknownTransaction: UnknownTransaction;
+ UnlockChunk: UnlockChunk;
+ UnrewardedRelayer: UnrewardedRelayer;
+ UnrewardedRelayersState: UnrewardedRelayersState;
+ UpgradeGoAhead: UpgradeGoAhead;
+ UpgradeRestriction: UpgradeRestriction;
+ UpwardMessage: UpwardMessage;
+ usize: usize;
+ USize: USize;
+ ValidationCode: ValidationCode;
+ ValidationCodeHash: ValidationCodeHash;
+ ValidationData: ValidationData;
+ ValidationDataType: ValidationDataType;
+ ValidationFunctionParams: ValidationFunctionParams;
+ ValidatorCount: ValidatorCount;
+ ValidatorId: ValidatorId;
+ ValidatorIdOf: ValidatorIdOf;
+ ValidatorIndex: ValidatorIndex;
+ ValidatorIndexCompact: ValidatorIndexCompact;
+ ValidatorPrefs: ValidatorPrefs;
+ ValidatorPrefsTo145: ValidatorPrefsTo145;
+ ValidatorPrefsTo196: ValidatorPrefsTo196;
+ ValidatorPrefsWithBlocked: ValidatorPrefsWithBlocked;
+ ValidatorPrefsWithCommission: ValidatorPrefsWithCommission;
+ ValidatorSetId: ValidatorSetId;
+ ValidatorSignature: ValidatorSignature;
+ ValidDisputeStatementKind: ValidDisputeStatementKind;
+ ValidityAttestation: ValidityAttestation;
+ VecInboundHrmpMessage: VecInboundHrmpMessage;
+ VersionedMultiAsset: VersionedMultiAsset;
+ VersionedMultiAssets: VersionedMultiAssets;
+ VersionedMultiLocation: VersionedMultiLocation;
+ VersionedResponse: VersionedResponse;
+ VersionedXcm: VersionedXcm;
+ VersionMigrationStage: VersionMigrationStage;
+ VestingInfo: VestingInfo;
+ VestingSchedule: VestingSchedule;
+ Vote: Vote;
+ VoteIndex: VoteIndex;
+ Voter: Voter;
+ VoterInfo: VoterInfo;
+ Votes: Votes;
+ VotesTo230: VotesTo230;
+ VoteThreshold: VoteThreshold;
+ VoteWeight: VoteWeight;
+ Voting: Voting;
+ VotingDelegating: VotingDelegating;
+ VotingDirect: VotingDirect;
+ VotingDirectVote: VotingDirectVote;
+ VouchingStatus: VouchingStatus;
+ VrfData: VrfData;
+ VrfOutput: VrfOutput;
+ VrfProof: VrfProof;
+ Weight: Weight;
+ WeightLimitV2: WeightLimitV2;
+ WeightMultiplier: WeightMultiplier;
+ WeightPerClass: WeightPerClass;
+ WeightToFeeCoefficient: WeightToFeeCoefficient;
+ WildFungibility: WildFungibility;
+ WildFungibilityV0: WildFungibilityV0;
+ WildFungibilityV1: WildFungibilityV1;
+ WildFungibilityV2: WildFungibilityV2;
+ WildMultiAsset: WildMultiAsset;
+ WildMultiAssetV1: WildMultiAssetV1;
+ WildMultiAssetV2: WildMultiAssetV2;
+ WinnersData: WinnersData;
+ WinnersDataTuple: WinnersDataTuple;
+ WinningData: WinningData;
+ WinningDataEntry: WinningDataEntry;
+ WithdrawReasons: WithdrawReasons;
+ Xcm: Xcm;
+ XcmAssetId: XcmAssetId;
+ XcmError: XcmError;
+ XcmErrorV0: XcmErrorV0;
+ XcmErrorV1: XcmErrorV1;
+ XcmErrorV2: XcmErrorV2;
+ XcmOrder: XcmOrder;
+ XcmOrderV0: XcmOrderV0;
+ XcmOrderV1: XcmOrderV1;
+ XcmOrderV2: XcmOrderV2;
+ XcmOrigin: XcmOrigin;
+ XcmOriginKind: XcmOriginKind;
+ XcmpMessageFormat: XcmpMessageFormat;
+ XcmV0: XcmV0;
+ XcmV1: XcmV1;
+ XcmV2: XcmV2;
+ XcmVersion: XcmVersion;
+ }
+}
tests/src/interfaces/definitions.tsdiffbeforeafterboth--- /dev/null
+++ b/tests/src/interfaces/definitions.ts
@@ -0,0 +1,3 @@
+export {default as nft} from './nft/definitions';
+export {default as ethereum} from './ethereum/definitions';
+export {default as polkadot} from './polkadot/definitions';
tests/src/interfaces/ethereum/definitions.tsdiffbeforeafterboth--- /dev/null
+++ b/tests/src/interfaces/ethereum/definitions.ts
@@ -0,0 +1,16 @@
+function mkDummy(name: string) {
+ return {
+ ['dummy' + name]: 'u32',
+ };
+}
+
+export default {
+ types: {
+ EvmCoreErrorExitReason: mkDummy('ExitReason'),
+ EthereumLog: mkDummy('Log'),
+ EthereumTransactionLegacyTransaction: mkDummy('LegacyTx'),
+ EthereumBlock: mkDummy('EthBlock'),
+ EthereumReceipt: mkDummy('EthReceipt'),
+ FpRpcTransactionStatus: mkDummy('EthTxStatus'),
+ },
+};
tests/src/interfaces/ethereum/index.tsdiffbeforeafterboth--- /dev/null
+++ b/tests/src/interfaces/ethereum/index.ts
@@ -0,0 +1,4 @@
+// Auto-generated via `yarn polkadot-types-from-defs`, do not edit
+/* eslint-disable */
+
+export * from './types';
tests/src/interfaces/ethereum/types.tsdiffbeforeafterboth--- /dev/null
+++ b/tests/src/interfaces/ethereum/types.ts
@@ -0,0 +1,36 @@
+// Auto-generated via `yarn polkadot-types-from-defs`, do not edit
+/* eslint-disable */
+
+import type { Struct, u32 } from '@polkadot/types';
+
+/** @name EthereumBlock */
+export interface EthereumBlock extends Struct {
+ readonly dummyEthBlock: u32;
+}
+
+/** @name EthereumLog */
+export interface EthereumLog extends Struct {
+ readonly dummyLog: u32;
+}
+
+/** @name EthereumReceipt */
+export interface EthereumReceipt extends Struct {
+ readonly dummyEthReceipt: u32;
+}
+
+/** @name EthereumTransactionLegacyTransaction */
+export interface EthereumTransactionLegacyTransaction extends Struct {
+ readonly dummyLegacyTx: u32;
+}
+
+/** @name EvmCoreErrorExitReason */
+export interface EvmCoreErrorExitReason extends Struct {
+ readonly dummyExitReason: u32;
+}
+
+/** @name FpRpcTransactionStatus */
+export interface FpRpcTransactionStatus extends Struct {
+ readonly dummyEthTxStatus: u32;
+}
+
+export type PHANTOM_ETHEREUM = 'ethereum';
tests/src/interfaces/index.tsdiffbeforeafterboth--- /dev/null
+++ b/tests/src/interfaces/index.ts
@@ -0,0 +1,4 @@
+// Auto-generated via `yarn polkadot-types-from-defs`, do not edit
+/* eslint-disable */
+
+export * from './types';
tests/src/interfaces/nft/definitions.tsdiffbeforeafterboth--- /dev/null
+++ b/tests/src/interfaces/nft/definitions.ts
@@ -0,0 +1,102 @@
+function mkDummy(name: string) {
+ return {
+ ['dummy' + name]: 'u32',
+ };
+}
+
+type RpcParam = {
+ name: string;
+ type: string;
+ isOptional?: true;
+};
+
+const CROSS_ACCOUNT_ID_TYPE = 'PalletCommonAccountBasicCrossAccountIdRepr';
+const TOKEN_ID_TYPE = 'NftDataStructsTokenId';
+
+const collectionParam = {name: 'collection', type: 'NftDataStructsCollectionId'};
+const tokenParam = {name: 'tokenId', type: TOKEN_ID_TYPE};
+const crossAccountParam = (name = 'account') => ({name, type: CROSS_ACCOUNT_ID_TYPE});
+const atParam = {name: 'at', type: 'Hash', isOptional: true};
+
+const fun = (description: string, params: RpcParam[], type: string) => ({
+ description,
+ params: [...params, atParam],
+ type,
+});
+
+export default {
+ rpc: {
+ adminlist: fun('Get admin list', [collectionParam], 'Vec<PalletCommonAccountBasicCrossAccountIdRepr>'),
+ allowlist: fun('Get allowlist', [collectionParam], 'Vec<PalletCommonAccountBasicCrossAccountIdRepr>'),
+
+ accountTokens: fun('Get tokens owned by account', [collectionParam, crossAccountParam()], 'Vec<NftDataStructsTokenId>'),
+ collectionTokens: fun('Get tokens contained in collection', [collectionParam], 'Vec<NftDataStructsTokenId>'),
+
+ lastTokenId: fun('Get last token id', [collectionParam], TOKEN_ID_TYPE),
+ accountBalance: fun('Get amount of different user tokens', [collectionParam, crossAccountParam()], 'u32'),
+ balance: fun('Get amount of specific account token', [collectionParam, crossAccountParam(), tokenParam], 'u128'),
+ allowance: fun('Get allowed amount', [collectionParam, crossAccountParam('sender'), crossAccountParam('spender'), tokenParam], 'u128'),
+ tokenOwner: fun('Get token owner', [collectionParam, tokenParam], CROSS_ACCOUNT_ID_TYPE),
+ constMetadata: fun('Get token constant metadata', [collectionParam, tokenParam], 'Vec<u8>'),
+ variableMetadata: fun('Get token variable metadata', [collectionParam, tokenParam], 'Vec<u8>'),
+ tokenExists: fun('Check if token exists', [collectionParam, tokenParam], 'bool'),
+ },
+ types: {
+ PalletCommonAccountBasicCrossAccountIdRepr: {
+ _enum: {
+ Substrate: 'AccountId',
+ Ethereum: 'H160',
+ },
+ },
+ NftDataStructsCollection: {
+ owner: 'AccountId',
+ mode: 'NftDataStructsCollectionMode',
+ access: 'NftDataStructsAccessMode',
+ name: 'Vec<u16>',
+ description: 'Vec<u16>',
+ tokenPrefix: 'Vec<u8>',
+ mintMode: 'bool',
+ offchainSchema: 'Vec<u8>',
+ schemaVersion: 'NftDataStructsSchemaVersion',
+ sponsorship: 'NftDataStructsSponsorshipState',
+ limits: 'NftDataStructsCollectionLimits',
+ variableOnChainSchema: 'Vec<u8>',
+ constOnChainSchema: 'Vec<u8>',
+ metaUpdatePermission: 'NftDataStructsMetaUpdatePermission',
+ },
+ NftDataStructsCollectionId: 'u32',
+ NftDataStructsTokenId: 'u32',
+ PalletNonfungibleItemData: mkDummy('NftItemData'),
+ PalletRefungibleItemData: mkDummy('RftItemData'),
+ NftDataStructsCollectionMode: mkDummy('CollectionMode'),
+ NftDataStructsCreateItemData: mkDummy('CreateItemData'),
+ NftDataStructsCollectionLimits: {
+ accountTokenOwnershipLimit: 'Option<u32>',
+ sponsoredDataSize: 'Option<u32>',
+ sponsoredDataRateLimit: 'Option<u32>',
+ tokenLimit: 'Option<u32>',
+ sponsorTransferTimeout: 'Option<u32>',
+ ownerCanTransfer: 'Option<bool>',
+ ownerCanDestroy: 'Option<bool>',
+ transfersEnabled: 'Option<bool>',
+ },
+ NftDataStructsMetaUpdatePermission: {
+ _enum: ['ItemOwner', 'Admin', 'None'],
+ },
+ NftDataStructsSponsorshipState: {
+ _enum: {
+ Disabled: null,
+ Unconfirmed: 'AccountId',
+ Confirmed: 'AccountId',
+ },
+ },
+ NftDataStructsAccessMode: {
+ _enum: ['Normal', 'WhiteList'],
+ },
+ NftDataStructsSchemaVersion: mkDummy('SchemaVersion'),
+
+ PalletUnqSchedulerScheduledV2: mkDummy('ScheduledV2'),
+ PalletUnqSchedulerCallSpec: mkDummy('CallSpec'),
+ PalletUnqSchedulerReleases: mkDummy('Releases'),
+ },
+};
tests/src/interfaces/nft/index.tsdiffbeforeafterboth--- /dev/null
+++ b/tests/src/interfaces/nft/index.ts
@@ -0,0 +1,4 @@
+// Auto-generated via `yarn polkadot-types-from-defs`, do not edit
+/* eslint-disable */
+
+export * from './types';
tests/src/interfaces/nft/types.tsdiffbeforeafterboth--- /dev/null
+++ b/tests/src/interfaces/nft/types.ts
@@ -0,0 +1,113 @@
+// Auto-generated via `yarn polkadot-types-from-defs`, do not edit
+/* eslint-disable */
+
+import type { Bytes, Enum, Option, Struct, Vec, bool, u16, u32 } from '@polkadot/types';
+import type { AccountId, H160 } from '@polkadot/types/interfaces/runtime';
+
+/** @name NftDataStructsAccessMode */
+export interface NftDataStructsAccessMode extends Enum {
+ readonly isNormal: boolean;
+ readonly isWhiteList: boolean;
+}
+
+/** @name NftDataStructsCollection */
+export interface NftDataStructsCollection extends Struct {
+ readonly owner: AccountId;
+ readonly mode: NftDataStructsCollectionMode;
+ readonly access: NftDataStructsAccessMode;
+ readonly name: Vec<u16>;
+ readonly description: Vec<u16>;
+ readonly tokenPrefix: Bytes;
+ readonly mintMode: bool;
+ readonly offchainSchema: Bytes;
+ readonly schemaVersion: NftDataStructsSchemaVersion;
+ readonly sponsorship: NftDataStructsSponsorshipState;
+ readonly limits: NftDataStructsCollectionLimits;
+ readonly variableOnChainSchema: Bytes;
+ readonly constOnChainSchema: Bytes;
+ readonly metaUpdatePermission: NftDataStructsMetaUpdatePermission;
+}
+
+/** @name NftDataStructsCollectionId */
+export interface NftDataStructsCollectionId extends u32 {}
+
+/** @name NftDataStructsCollectionLimits */
+export interface NftDataStructsCollectionLimits extends Struct {
+ readonly accountTokenOwnershipLimit: Option<u32>;
+ readonly sponsoredDataSize: Option<u32>;
+ readonly sponsoredDataRateLimit: Option<u32>;
+ readonly tokenLimit: Option<u32>;
+ readonly sponsorTransferTimeout: Option<u32>;
+ readonly ownerCanTransfer: Option<bool>;
+ readonly ownerCanDestroy: Option<bool>;
+ readonly transfersEnabled: Option<bool>;
+}
+
+/** @name NftDataStructsCollectionMode */
+export interface NftDataStructsCollectionMode extends Struct {
+ readonly dummyCollectionMode: u32;
+}
+
+/** @name NftDataStructsCreateItemData */
+export interface NftDataStructsCreateItemData extends Struct {
+ readonly dummyCreateItemData: u32;
+}
+
+/** @name NftDataStructsMetaUpdatePermission */
+export interface NftDataStructsMetaUpdatePermission extends Enum {
+ readonly isItemOwner: boolean;
+ readonly isAdmin: boolean;
+ readonly isNone: boolean;
+}
+
+/** @name NftDataStructsSchemaVersion */
+export interface NftDataStructsSchemaVersion extends Struct {
+ readonly dummySchemaVersion: u32;
+}
+
+/** @name NftDataStructsSponsorshipState */
+export interface NftDataStructsSponsorshipState extends Enum {
+ readonly isDisabled: boolean;
+ readonly isUnconfirmed: boolean;
+ readonly asUnconfirmed: AccountId;
+ readonly isConfirmed: boolean;
+ readonly asConfirmed: AccountId;
+}
+
+/** @name NftDataStructsTokenId */
+export interface NftDataStructsTokenId extends u32 {}
+
+/** @name PalletCommonAccountBasicCrossAccountIdRepr */
+export interface PalletCommonAccountBasicCrossAccountIdRepr extends Enum {
+ readonly isSubstrate: boolean;
+ readonly asSubstrate: AccountId;
+ readonly isEthereum: boolean;
+ readonly asEthereum: H160;
+}
+
+/** @name PalletNonfungibleItemData */
+export interface PalletNonfungibleItemData extends Struct {
+ readonly dummyNftItemData: u32;
+}
+
+/** @name PalletRefungibleItemData */
+export interface PalletRefungibleItemData extends Struct {
+ readonly dummyRftItemData: u32;
+}
+
+/** @name PalletUnqSchedulerCallSpec */
+export interface PalletUnqSchedulerCallSpec extends Struct {
+ readonly dummyCallSpec: u32;
+}
+
+/** @name PalletUnqSchedulerReleases */
+export interface PalletUnqSchedulerReleases extends Struct {
+ readonly dummyReleases: u32;
+}
+
+/** @name PalletUnqSchedulerScheduledV2 */
+export interface PalletUnqSchedulerScheduledV2 extends Struct {
+ readonly dummyScheduledV2: u32;
+}
+
+export type PHANTOM_NFT = 'nft';
tests/src/interfaces/polkadot/definitions.tsdiffbeforeafterboth--- /dev/null
+++ b/tests/src/interfaces/polkadot/definitions.ts
@@ -0,0 +1,20 @@
+function mkDummy(name: string) {
+ return {
+ ['dummy' + name]: 'u32',
+ };
+}
+
+export default {
+ types: {
+ CumulusPrimitivesParachainInherentParachainInherentData: mkDummy('ParachainInherentData'),
+ CumulusPalletDmpQueueConfigData: mkDummy('DmpQueueConfigData'),
+ CumulusPalletDmpQueuePageIndexData: mkDummy('DmpQueryPageIndexData'),
+ PolkadotPrimitivesV1AbridgedHostConfiguration: mkDummy('AbridgedHostConfiguration'),
+ CumulusPalletParachainSystemRelayStateSnapshotMessagingStateSnapshot: mkDummy('CumulusStateSnapshot'),
+ PolkadotPrimitivesV1PersistedValidationData: mkDummy('PersistedValidationData'),
+ CumulusPalletXcmpQueueInboundStatus: mkDummy('CumulusInboundStatus'),
+ CumulusPalletXcmpQueueOutboundStatus: mkDummy('CumulusOutboundStatus'),
+ PolkadotParachainPrimitivesXcmpMessageFormat: mkDummy('XcmpMessageFormat'),
+ CumulusPalletXcmpQueueQueueConfigData: mkDummy('QueueConfigData'),
+ },
+};
tests/src/interfaces/polkadot/index.tsdiffbeforeafterboth--- /dev/null
+++ b/tests/src/interfaces/polkadot/index.ts
@@ -0,0 +1,4 @@
+// Auto-generated via `yarn polkadot-types-from-defs`, do not edit
+/* eslint-disable */
+
+export * from './types';
tests/src/interfaces/polkadot/types.tsdiffbeforeafterboth--- /dev/null
+++ b/tests/src/interfaces/polkadot/types.ts
@@ -0,0 +1,56 @@
+// Auto-generated via `yarn polkadot-types-from-defs`, do not edit
+/* eslint-disable */
+
+import type { Struct, u32 } from '@polkadot/types';
+
+/** @name CumulusPalletDmpQueueConfigData */
+export interface CumulusPalletDmpQueueConfigData extends Struct {
+ readonly dummyDmpQueueConfigData: u32;
+}
+
+/** @name CumulusPalletDmpQueuePageIndexData */
+export interface CumulusPalletDmpQueuePageIndexData extends Struct {
+ readonly dummyDmpQueryPageIndexData: u32;
+}
+
+/** @name CumulusPalletParachainSystemRelayStateSnapshotMessagingStateSnapshot */
+export interface CumulusPalletParachainSystemRelayStateSnapshotMessagingStateSnapshot extends Struct {
+ readonly dummyCumulusStateSnapshot: u32;
+}
+
+/** @name CumulusPalletXcmpQueueInboundStatus */
+export interface CumulusPalletXcmpQueueInboundStatus extends Struct {
+ readonly dummyCumulusInboundStatus: u32;
+}
+
+/** @name CumulusPalletXcmpQueueOutboundStatus */
+export interface CumulusPalletXcmpQueueOutboundStatus extends Struct {
+ readonly dummyCumulusOutboundStatus: u32;
+}
+
+/** @name CumulusPalletXcmpQueueQueueConfigData */
+export interface CumulusPalletXcmpQueueQueueConfigData extends Struct {
+ readonly dummyQueueConfigData: u32;
+}
+
+/** @name CumulusPrimitivesParachainInherentParachainInherentData */
+export interface CumulusPrimitivesParachainInherentParachainInherentData extends Struct {
+ readonly dummyParachainInherentData: u32;
+}
+
+/** @name PolkadotParachainPrimitivesXcmpMessageFormat */
+export interface PolkadotParachainPrimitivesXcmpMessageFormat extends Struct {
+ readonly dummyXcmpMessageFormat: u32;
+}
+
+/** @name PolkadotPrimitivesV1AbridgedHostConfiguration */
+export interface PolkadotPrimitivesV1AbridgedHostConfiguration extends Struct {
+ readonly dummyAbridgedHostConfiguration: u32;
+}
+
+/** @name PolkadotPrimitivesV1PersistedValidationData */
+export interface PolkadotPrimitivesV1PersistedValidationData extends Struct {
+ readonly dummyPersistedValidationData: u32;
+}
+
+export type PHANTOM_POLKADOT = 'polkadot';
tests/src/interfaces/types.tsdiffbeforeafterboth--- /dev/null
+++ b/tests/src/interfaces/types.ts
@@ -0,0 +1,6 @@
+// Auto-generated via `yarn polkadot-types-from-defs`, do not edit
+/* eslint-disable */
+
+export * from './nft/types';
+export * from './ethereum/types';
+export * from './polkadot/types';
tests/src/limits.test.tsdiffbeforeafterboth--- a/tests/src/limits.test.ts
+++ b/tests/src/limits.test.ts
@@ -3,7 +3,7 @@
// file 'LICENSE', which is part of this source code package.
//
-import { IKeyringPair } from '@polkadot/types/types';
+import {IKeyringPair} from '@polkadot/types/types';
import privateKey from './substrate/privateKey';
import usingApi from './substrate/substrate-api';
import {
@@ -18,98 +18,98 @@
getFreeBalance,
waitNewBlocks,
} from './util/helpers';
-import { expect } from 'chai';
+import {expect} from 'chai';
describe('Number of tokens per address (NFT)', () => {
- let Alice: IKeyringPair;
+ let alice: IKeyringPair;
before(async () => {
await usingApi(async () => {
- Alice = privateKey('//Alice');
+ alice = privateKey('//Alice');
});
});
it.skip('Collection limits allow greater number than chain limits, chain limits are enforced', async () => {
- const collectionId = await createCollectionExpectSuccess({ mode: { type: 'NFT' } });
- await setCollectionLimitsExpectSuccess(Alice, collectionId, { accountTokenOwnershipLimit: 20 });
+ const collectionId = await createCollectionExpectSuccess({mode: {type: 'NFT'}});
+ await setCollectionLimitsExpectSuccess(alice, collectionId, {accountTokenOwnershipLimit: 20});
for(let i = 0; i < 10; i++){
- await createItemExpectSuccess(Alice, collectionId, 'NFT');
+ await createItemExpectSuccess(alice, collectionId, 'NFT');
}
- await createItemExpectFailure(Alice, collectionId, 'NFT');
+ await createItemExpectFailure(alice, collectionId, 'NFT');
await destroyCollectionExpectSuccess(collectionId);
});
it('Collection limits allow lower number than chain limits, collection limits are enforced', async () => {
- const collectionId = await createCollectionExpectSuccess({ mode: { type: 'NFT' } });
- await setCollectionLimitsExpectSuccess(Alice, collectionId, { accountTokenOwnershipLimit: 1 });
- await createItemExpectSuccess(Alice, collectionId, 'NFT');
- await createItemExpectFailure(Alice, collectionId, 'NFT');
+ const collectionId = await createCollectionExpectSuccess({mode: {type: 'NFT'}});
+ await setCollectionLimitsExpectSuccess(alice, collectionId, {accountTokenOwnershipLimit: 1});
+ await createItemExpectSuccess(alice, collectionId, 'NFT');
+ await createItemExpectFailure(alice, collectionId, 'NFT');
await destroyCollectionExpectSuccess(collectionId);
});
});
describe('Number of tokens per address (ReFungible)', () => {
- let Alice: IKeyringPair;
+ let alice: IKeyringPair;
before(async () => {
await usingApi(async () => {
- Alice = privateKey('//Alice');
+ alice = privateKey('//Alice');
});
});
it.skip('Collection limits allow greater number than chain limits, chain limits are enforced', async () => {
- const collectionId = await createCollectionExpectSuccess({mode: {type: 'ReFungible' }});
- await setCollectionLimitsExpectSuccess(Alice, collectionId, { accountTokenOwnershipLimit: 20 });
+ const collectionId = await createCollectionExpectSuccess({mode: {type: 'ReFungible'}});
+ await setCollectionLimitsExpectSuccess(alice, collectionId, {accountTokenOwnershipLimit: 20});
for(let i = 0; i < 10; i++){
- await createItemExpectSuccess(Alice, collectionId, 'ReFungible');
+ await createItemExpectSuccess(alice, collectionId, 'ReFungible');
}
- await createItemExpectFailure(Alice, collectionId, 'ReFungible');
+ await createItemExpectFailure(alice, collectionId, 'ReFungible');
await destroyCollectionExpectSuccess(collectionId);
});
it('Collection limits allow lower number than chain limits, collection limits are enforced', async () => {
- const collectionId = await createCollectionExpectSuccess({mode: {type: 'ReFungible' }});
- await setCollectionLimitsExpectSuccess(Alice, collectionId, { accountTokenOwnershipLimit: 1 });
- await createItemExpectSuccess(Alice, collectionId, 'ReFungible');
- await createItemExpectFailure(Alice, collectionId, 'ReFungible');
+ const collectionId = await createCollectionExpectSuccess({mode: {type: 'ReFungible'}});
+ await setCollectionLimitsExpectSuccess(alice, collectionId, {accountTokenOwnershipLimit: 1});
+ await createItemExpectSuccess(alice, collectionId, 'ReFungible');
+ await createItemExpectFailure(alice, collectionId, 'ReFungible');
await destroyCollectionExpectSuccess(collectionId);
});
});
describe('Sponsor timeout (NFT)', () => {
- let Alice: IKeyringPair;
- let Bob: IKeyringPair;
- let Charlie: IKeyringPair;
+ let alice: IKeyringPair;
+ let bob: IKeyringPair;
+ let charlie: IKeyringPair;
before(async () => {
await usingApi(async () => {
- Alice = privateKey('//Alice');
- Bob = privateKey('//Bob');
- Charlie = privateKey('//Charlie');
+ alice = privateKey('//Alice');
+ bob = privateKey('//Bob');
+ charlie = privateKey('//Charlie');
});
});
it('Collection limits have greater timeout value than chain limits, collection limits are enforced', async () => {
- const collectionId = await createCollectionExpectSuccess({ mode: { type: 'NFT' } });
- await setCollectionLimitsExpectSuccess(Alice, collectionId, { sponsorTimeout: 7 });
- const tokenId = await createItemExpectSuccess(Alice, collectionId, 'NFT');
- await setCollectionSponsorExpectSuccess(collectionId, Alice.address);
+ const collectionId = await createCollectionExpectSuccess({mode: {type: 'NFT'}});
+ await setCollectionLimitsExpectSuccess(alice, collectionId, {sponsorTransferTimeout: 7});
+ const tokenId = await createItemExpectSuccess(alice, collectionId, 'NFT');
+ await setCollectionSponsorExpectSuccess(collectionId, alice.address);
await confirmSponsorshipExpectSuccess(collectionId, '//Alice');
- await transferExpectSuccess(collectionId, tokenId, Alice, Bob);
- const aliceBalanceBefore = await getFreeBalance(Alice);
+ await transferExpectSuccess(collectionId, tokenId, alice, bob);
+ const aliceBalanceBefore = await getFreeBalance(alice);
// check setting SponsorTimeout = 5, fail
await waitNewBlocks(5);
- await transferExpectSuccess(collectionId, tokenId, Bob, Charlie);
- const aliceBalanceAfterUnsponsoredTransaction = await getFreeBalance(Alice);
+ await transferExpectSuccess(collectionId, tokenId, bob, charlie);
+ const aliceBalanceAfterUnsponsoredTransaction = await getFreeBalance(alice);
expect(aliceBalanceAfterUnsponsoredTransaction).to.be.equals(aliceBalanceBefore);
// check setting SponsorTimeout = 7, success
await waitNewBlocks(2); // 5 + 2
- await transferExpectSuccess(collectionId, tokenId, Charlie, Bob);
- const aliceBalanceAfterSponsoredTransaction = await getFreeBalance(Alice);
+ await transferExpectSuccess(collectionId, tokenId, charlie, bob);
+ const aliceBalanceAfterSponsoredTransaction = await getFreeBalance(alice);
expect(aliceBalanceAfterSponsoredTransaction < aliceBalanceBefore).to.be.true;
//expect(aliceBalanceAfterSponsoredTransaction).to.be.lessThan(aliceBalanceBefore);
await destroyCollectionExpectSuccess(collectionId);
@@ -117,24 +117,24 @@
it('Collection limits have lower timeout value than chain limits, chain limits are enforced', async () => {
- const collectionId = await createCollectionExpectSuccess({ mode: { type: 'NFT' } });
- await setCollectionLimitsExpectSuccess(Alice, collectionId, { sponsorTimeout: 1 });
- const tokenId = await createItemExpectSuccess(Alice, collectionId, 'NFT');
- await setCollectionSponsorExpectSuccess(collectionId, Alice.address);
+ const collectionId = await createCollectionExpectSuccess({mode: {type: 'NFT'}});
+ await setCollectionLimitsExpectSuccess(alice, collectionId, {sponsorTransferTimeout: 1});
+ const tokenId = await createItemExpectSuccess(alice, collectionId, 'NFT');
+ await setCollectionSponsorExpectSuccess(collectionId, alice.address);
await confirmSponsorshipExpectSuccess(collectionId, '//Alice');
- await transferExpectSuccess(collectionId, tokenId, Alice, Bob);
- const aliceBalanceBefore = await getFreeBalance(Alice);
+ await transferExpectSuccess(collectionId, tokenId, alice, bob);
+ const aliceBalanceBefore = await getFreeBalance(alice);
// check setting SponsorTimeout = 1, fail
await waitNewBlocks(1);
- await transferExpectSuccess(collectionId, tokenId, Bob, Charlie);
- const aliceBalanceAfterUnsponsoredTransaction = await getFreeBalance(Alice);
+ await transferExpectSuccess(collectionId, tokenId, bob, charlie);
+ const aliceBalanceAfterUnsponsoredTransaction = await getFreeBalance(alice);
expect(aliceBalanceAfterUnsponsoredTransaction).to.be.equals(aliceBalanceBefore);
// check setting SponsorTimeout = 5, success
await waitNewBlocks(4);
- await transferExpectSuccess(collectionId, tokenId, Charlie, Bob);
- const aliceBalanceAfterSponsoredTransaction = await getFreeBalance(Alice);
+ await transferExpectSuccess(collectionId, tokenId, charlie, bob);
+ const aliceBalanceAfterSponsoredTransaction = await getFreeBalance(alice);
expect(aliceBalanceAfterSponsoredTransaction < aliceBalanceBefore).to.be.true;
//expect(aliceBalanceAfterSponsoredTransaction).to.be.lessThan(aliceBalanceBefore);
await destroyCollectionExpectSuccess(collectionId);
@@ -142,38 +142,38 @@
});
describe('Sponsor timeout (Fungible)', () => {
- let Alice: IKeyringPair;
- let Bob: IKeyringPair;
- let Charlie: IKeyringPair;
+ let alice: IKeyringPair;
+ let bob: IKeyringPair;
+ let charlie: IKeyringPair;
before(async () => {
await usingApi(async () => {
- Alice = privateKey('//Alice');
- Bob = privateKey('//Bob');
- Charlie = privateKey('//Charlie');
+ alice = privateKey('//Alice');
+ bob = privateKey('//Bob');
+ charlie = privateKey('//Charlie');
});
});
it('Collection limits have greater timeout value than chain limits, collection limits are enforced', async () => {
const collectionId = await createCollectionExpectSuccess({mode: {type: 'Fungible', decimalPoints: 0}});
- await setCollectionLimitsExpectSuccess(Alice, collectionId, { sponsorTimeout: 7 });
- const tokenId = await createItemExpectSuccess(Alice, collectionId, 'Fungible');
- await setCollectionSponsorExpectSuccess(collectionId, Alice.address);
+ await setCollectionLimitsExpectSuccess(alice, collectionId, {sponsorTransferTimeout: 7});
+ const tokenId = await createItemExpectSuccess(alice, collectionId, 'Fungible');
+ await setCollectionSponsorExpectSuccess(collectionId, alice.address);
await confirmSponsorshipExpectSuccess(collectionId, '//Alice');
- await transferExpectSuccess(collectionId, tokenId, Alice, Bob, 10, 'Fungible');
- await transferExpectSuccess(collectionId, tokenId, Bob, Charlie, 2, 'Fungible');
- const aliceBalanceBefore = await getFreeBalance(Alice);
+ await transferExpectSuccess(collectionId, tokenId, alice, bob, 10, 'Fungible');
+ await transferExpectSuccess(collectionId, tokenId, bob, charlie, 2, 'Fungible');
+ const aliceBalanceBefore = await getFreeBalance(alice);
// check setting SponsorTimeout = 5, fail
await waitNewBlocks(5);
- await transferExpectSuccess(collectionId, tokenId, Bob, Charlie, 2, 'Fungible');
- const aliceBalanceAfterUnsponsoredTransaction = await getFreeBalance(Alice);
+ await transferExpectSuccess(collectionId, tokenId, bob, charlie, 2, 'Fungible');
+ const aliceBalanceAfterUnsponsoredTransaction = await getFreeBalance(alice);
expect(aliceBalanceAfterUnsponsoredTransaction).to.be.equals(aliceBalanceBefore);
// check setting SponsorTimeout = 7, success
await waitNewBlocks(2); // 5 + 2
- await transferExpectSuccess(collectionId, tokenId, Bob, Charlie, 2, 'Fungible');
- const aliceBalanceAfterSponsoredTransaction = await getFreeBalance(Alice);
+ await transferExpectSuccess(collectionId, tokenId, bob, charlie, 2, 'Fungible');
+ const aliceBalanceAfterSponsoredTransaction = await getFreeBalance(alice);
expect(aliceBalanceAfterSponsoredTransaction < aliceBalanceBefore).to.be.true;
//expect(aliceBalanceAfterSponsoredTransaction).to.be.lessThan(aliceBalanceBefore);
@@ -183,24 +183,24 @@
it('Collection limits have lower timeout value than chain limits, chain limits are enforced', async () => {
const collectionId = await createCollectionExpectSuccess({mode: {type: 'Fungible', decimalPoints: 0}});
- await setCollectionLimitsExpectSuccess(Alice, collectionId, { sponsorTimeout: 1 });
- const tokenId = await createItemExpectSuccess(Alice, collectionId, 'Fungible');
- await setCollectionSponsorExpectSuccess(collectionId, Alice.address);
+ await setCollectionLimitsExpectSuccess(alice, collectionId, {sponsorTransferTimeout: 1});
+ const tokenId = await createItemExpectSuccess(alice, collectionId, 'Fungible');
+ await setCollectionSponsorExpectSuccess(collectionId, alice.address);
await confirmSponsorshipExpectSuccess(collectionId, '//Alice');
- await transferExpectSuccess(collectionId, tokenId, Alice, Bob, 10, 'Fungible');
- await transferExpectSuccess(collectionId, tokenId, Bob, Charlie, 2, 'Fungible');
- const aliceBalanceBefore = await getFreeBalance(Alice);
+ await transferExpectSuccess(collectionId, tokenId, alice, bob, 10, 'Fungible');
+ await transferExpectSuccess(collectionId, tokenId, bob, charlie, 2, 'Fungible');
+ const aliceBalanceBefore = await getFreeBalance(alice);
// check setting SponsorTimeout = 1, fail
await waitNewBlocks(1);
- await transferExpectSuccess(collectionId, tokenId, Bob, Charlie, 2, 'Fungible');
- const aliceBalanceAfterUnsponsoredTransaction = await getFreeBalance(Alice);
+ await transferExpectSuccess(collectionId, tokenId, bob, charlie, 2, 'Fungible');
+ const aliceBalanceAfterUnsponsoredTransaction = await getFreeBalance(alice);
expect(aliceBalanceAfterUnsponsoredTransaction).to.be.equals(aliceBalanceBefore);
// check setting SponsorTimeout = 5, success
await waitNewBlocks(4);
- await transferExpectSuccess(collectionId, tokenId, Bob, Charlie, 2, 'Fungible');
- const aliceBalanceAfterSponsoredTransaction = await getFreeBalance(Alice);
+ await transferExpectSuccess(collectionId, tokenId, bob, charlie, 2, 'Fungible');
+ const aliceBalanceAfterSponsoredTransaction = await getFreeBalance(alice);
expect(aliceBalanceAfterSponsoredTransaction < aliceBalanceBefore).to.be.true;
//expect(aliceBalanceAfterSponsoredTransaction).to.be.lessThan(aliceBalanceBefore);
@@ -209,37 +209,37 @@
});
describe('Sponsor timeout (ReFungible)', () => {
- let Alice: IKeyringPair;
- let Bob: IKeyringPair;
- let Charlie: IKeyringPair;
+ let alice: IKeyringPair;
+ let bob: IKeyringPair;
+ let charlie: IKeyringPair;
before(async () => {
await usingApi(async () => {
- Alice = privateKey('//Alice');
- Bob = privateKey('//Bob');
- Charlie = privateKey('//Charlie');
+ alice = privateKey('//Alice');
+ bob = privateKey('//Bob');
+ charlie = privateKey('//Charlie');
});
});
it('Collection limits have greater timeout value than chain limits, collection limits are enforced', async () => {
- const collectionId = await createCollectionExpectSuccess({mode: {type: 'ReFungible' }});
- await setCollectionLimitsExpectSuccess(Alice, collectionId, { sponsorTimeout: 7 });
- const tokenId = await createItemExpectSuccess(Alice, collectionId, 'ReFungible');
- await setCollectionSponsorExpectSuccess(collectionId, Alice.address);
+ const collectionId = await createCollectionExpectSuccess({mode: {type: 'ReFungible'}});
+ await setCollectionLimitsExpectSuccess(alice, collectionId, {sponsorTransferTimeout: 7});
+ const tokenId = await createItemExpectSuccess(alice, collectionId, 'ReFungible');
+ await setCollectionSponsorExpectSuccess(collectionId, alice.address);
await confirmSponsorshipExpectSuccess(collectionId, '//Alice');
- await transferExpectSuccess(collectionId, tokenId, Alice, Bob, 100, 'ReFungible');
- const aliceBalanceBefore = await getFreeBalance(Alice);
+ await transferExpectSuccess(collectionId, tokenId, alice, bob, 100, 'ReFungible');
+ const aliceBalanceBefore = await getFreeBalance(alice);
// check setting SponsorTimeout = 5, fail
await waitNewBlocks(5);
- await transferExpectSuccess(collectionId, tokenId, Bob, Charlie, 20, 'ReFungible');
- const aliceBalanceAfterUnsponsoredTransaction = await getFreeBalance(Alice);
+ await transferExpectSuccess(collectionId, tokenId, bob, charlie, 20, 'ReFungible');
+ const aliceBalanceAfterUnsponsoredTransaction = await getFreeBalance(alice);
expect(aliceBalanceAfterUnsponsoredTransaction).to.be.equals(aliceBalanceBefore);
// check setting SponsorTimeout = 7, success
await waitNewBlocks(2); // 5 + 2
- await transferExpectSuccess(collectionId, tokenId, Bob, Charlie, 20, 'ReFungible');
- const aliceBalanceAfterSponsoredTransaction = await getFreeBalance(Alice);
+ await transferExpectSuccess(collectionId, tokenId, bob, charlie, 20, 'ReFungible');
+ const aliceBalanceAfterSponsoredTransaction = await getFreeBalance(alice);
expect(aliceBalanceAfterSponsoredTransaction < aliceBalanceBefore).to.be.true;
//expect(aliceBalanceAfterSponsoredTransaction).to.be.lessThan(aliceBalanceBefore);
await destroyCollectionExpectSuccess(collectionId);
@@ -247,24 +247,24 @@
it('Collection limits have lower timeout value than chain limits, chain limits are enforced', async () => {
- const collectionId = await createCollectionExpectSuccess({ mode: { type: 'NFT' } });
- await setCollectionLimitsExpectSuccess(Alice, collectionId, { sponsorTimeout: 1 });
- const tokenId = await createItemExpectSuccess(Alice, collectionId, 'NFT');
- await setCollectionSponsorExpectSuccess(collectionId, Alice.address);
+ const collectionId = await createCollectionExpectSuccess({mode: {type: 'NFT'}});
+ await setCollectionLimitsExpectSuccess(alice, collectionId, {sponsorTransferTimeout: 1});
+ const tokenId = await createItemExpectSuccess(alice, collectionId, 'NFT');
+ await setCollectionSponsorExpectSuccess(collectionId, alice.address);
await confirmSponsorshipExpectSuccess(collectionId, '//Alice');
- await transferExpectSuccess(collectionId, tokenId, Alice, Bob);
- const aliceBalanceBefore = await getFreeBalance(Alice);
+ await transferExpectSuccess(collectionId, tokenId, alice, bob);
+ const aliceBalanceBefore = await getFreeBalance(alice);
// check setting SponsorTimeout = 1, fail
await waitNewBlocks(1);
- await transferExpectSuccess(collectionId, tokenId, Bob, Charlie);
- const aliceBalanceAfterUnsponsoredTransaction = await getFreeBalance(Alice);
+ await transferExpectSuccess(collectionId, tokenId, bob, charlie);
+ const aliceBalanceAfterUnsponsoredTransaction = await getFreeBalance(alice);
expect(aliceBalanceAfterUnsponsoredTransaction).to.be.equals(aliceBalanceBefore);
// check setting SponsorTimeout = 5, success
await waitNewBlocks(4);
- await transferExpectSuccess(collectionId, tokenId, Charlie, Bob);
- const aliceBalanceAfterSponsoredTransaction = await getFreeBalance(Alice);
+ await transferExpectSuccess(collectionId, tokenId, charlie, bob);
+ const aliceBalanceAfterSponsoredTransaction = await getFreeBalance(alice);
expect(aliceBalanceAfterSponsoredTransaction < aliceBalanceBefore).to.be.true;
//expect(aliceBalanceAfterSponsoredTransaction).to.be.lessThan(aliceBalanceBefore);
await destroyCollectionExpectSuccess(collectionId);
@@ -272,115 +272,115 @@
});
describe('Collection zero limits (NFT)', () => {
- let Alice: IKeyringPair;
- let Bob: IKeyringPair;
- let Charlie: IKeyringPair;
+ let alice: IKeyringPair;
+ let bob: IKeyringPair;
+ let charlie: IKeyringPair;
before(async () => {
await usingApi(async () => {
- Alice = privateKey('//Alice');
- Bob = privateKey('//Bob');
- Charlie = privateKey('//Charlie');
+ alice = privateKey('//Alice');
+ bob = privateKey('//Bob');
+ charlie = privateKey('//Charlie');
});
});
it.skip('Limits have 0 in tokens per address field, the chain limits are applied', async () => {
- const collectionId = await createCollectionExpectSuccess({ mode: { type: 'NFT' } });
- await setCollectionLimitsExpectSuccess(Alice, collectionId, { accountTokenOwnershipLimit: 0 });
+ const collectionId = await createCollectionExpectSuccess({mode: {type: 'NFT'}});
+ await setCollectionLimitsExpectSuccess(alice, collectionId, {accountTokenOwnershipLimit: 0});
for(let i = 0; i < 10; i++){
- await createItemExpectSuccess(Alice, collectionId, 'NFT');
+ await createItemExpectSuccess(alice, collectionId, 'NFT');
}
- await createItemExpectFailure(Alice, collectionId, 'NFT');
+ await createItemExpectFailure(alice, collectionId, 'NFT');
});
it('Limits have 0 in sponsor timeout, no limits are applied', async () => {
- const collectionId = await createCollectionExpectSuccess({ mode: { type: 'NFT' } });
- await setCollectionLimitsExpectSuccess(Alice, collectionId, { sponsorTimeout: 0 });
- const tokenId = await createItemExpectSuccess(Alice, collectionId, 'NFT');
- await setCollectionSponsorExpectSuccess(collectionId, Alice.address);
+ const collectionId = await createCollectionExpectSuccess({mode: {type: 'NFT'}});
+ await setCollectionLimitsExpectSuccess(alice, collectionId, {sponsorTransferTimeout: 0});
+ const tokenId = await createItemExpectSuccess(alice, collectionId, 'NFT');
+ await setCollectionSponsorExpectSuccess(collectionId, alice.address);
await confirmSponsorshipExpectSuccess(collectionId, '//Alice');
- await transferExpectSuccess(collectionId, tokenId, Alice, Bob);
- const aliceBalanceBefore = await getFreeBalance(Alice);
+ await transferExpectSuccess(collectionId, tokenId, alice, bob);
+ const aliceBalanceBefore = await getFreeBalance(alice);
// check setting SponsorTimeout = 0, success with next block
await waitNewBlocks(1);
- await transferExpectSuccess(collectionId, tokenId, Bob, Charlie);
- const aliceBalanceAfterSponsoredTransaction1 = await getFreeBalance(Alice);
+ await transferExpectSuccess(collectionId, tokenId, bob, charlie);
+ const aliceBalanceAfterSponsoredTransaction1 = await getFreeBalance(alice);
expect(aliceBalanceAfterSponsoredTransaction1 < aliceBalanceBefore).to.be.true;
//expect(aliceBalanceAfterSponsoredTransaction1).to.be.lessThan(aliceBalanceBefore);
});
});
describe('Collection zero limits (Fungible)', () => {
- let Alice: IKeyringPair;
- let Bob: IKeyringPair;
- let Charlie: IKeyringPair;
+ let alice: IKeyringPair;
+ let bob: IKeyringPair;
+ let charlie: IKeyringPair;
before(async () => {
await usingApi(async () => {
- Alice = privateKey('//Alice');
- Bob = privateKey('//Bob');
- Charlie = privateKey('//Charlie');
+ alice = privateKey('//Alice');
+ bob = privateKey('//Bob');
+ charlie = privateKey('//Charlie');
});
});
it('Limits have 0 in sponsor timeout, no limits are applied', async () => {
const collectionId = await createCollectionExpectSuccess({mode: {type: 'Fungible', decimalPoints: 0}});
- await setCollectionLimitsExpectSuccess(Alice, collectionId, { sponsorTimeout: 0 });
- const tokenId = await createItemExpectSuccess(Alice, collectionId, 'Fungible');
- await setCollectionSponsorExpectSuccess(collectionId, Alice.address);
+ await setCollectionLimitsExpectSuccess(alice, collectionId, {sponsorTransferTimeout: 0});
+ const tokenId = await createItemExpectSuccess(alice, collectionId, 'Fungible');
+ await setCollectionSponsorExpectSuccess(collectionId, alice.address);
await confirmSponsorshipExpectSuccess(collectionId, '//Alice');
- await transferExpectSuccess(collectionId, tokenId, Alice, Bob, 10, 'Fungible');
- const aliceBalanceBefore = await getFreeBalance(Alice);
- await transferExpectSuccess(collectionId, tokenId, Bob, Charlie, 2, 'Fungible');
+ await transferExpectSuccess(collectionId, tokenId, alice, bob, 10, 'Fungible');
+ const aliceBalanceBefore = await getFreeBalance(alice);
+ await transferExpectSuccess(collectionId, tokenId, bob, charlie, 2, 'Fungible');
// check setting SponsorTimeout = 0, success with next block
await waitNewBlocks(1);
- await transferExpectSuccess(collectionId, tokenId, Bob, Charlie, 2, 'Fungible');
- const aliceBalanceAfterSponsoredTransaction1 = await getFreeBalance(Alice);
+ await transferExpectSuccess(collectionId, tokenId, bob, charlie, 2, 'Fungible');
+ const aliceBalanceAfterSponsoredTransaction1 = await getFreeBalance(alice);
expect(aliceBalanceAfterSponsoredTransaction1 < aliceBalanceBefore).to.be.true;
//expect(aliceBalanceAfterSponsoredTransaction1).to.be.lessThan(aliceBalanceBefore);
});
});
describe('Collection zero limits (ReFungible)', () => {
- let Alice: IKeyringPair;
- let Bob: IKeyringPair;
- let Charlie: IKeyringPair;
+ let alice: IKeyringPair;
+ let bob: IKeyringPair;
+ let charlie: IKeyringPair;
before(async () => {
await usingApi(async () => {
- Alice = privateKey('//Alice');
- Bob = privateKey('//Bob');
- Charlie = privateKey('//Charlie');
+ alice = privateKey('//Alice');
+ bob = privateKey('//Bob');
+ charlie = privateKey('//Charlie');
});
});
it.skip('Limits have 0 in tokens per address field, the chain limits are applied', async () => {
- const collectionId = await createCollectionExpectSuccess({mode: {type: 'ReFungible' }});
- await setCollectionLimitsExpectSuccess(Alice, collectionId, { accountTokenOwnershipLimit: 0 });
+ const collectionId = await createCollectionExpectSuccess({mode: {type: 'ReFungible'}});
+ await setCollectionLimitsExpectSuccess(alice, collectionId, {accountTokenOwnershipLimit: 0});
for(let i = 0; i < 10; i++){
- await createItemExpectSuccess(Alice, collectionId, 'ReFungible');
+ await createItemExpectSuccess(alice, collectionId, 'ReFungible');
}
- await createItemExpectFailure(Alice, collectionId, 'ReFungible');
+ await createItemExpectFailure(alice, collectionId, 'ReFungible');
});
it('Limits have 0 in sponsor timeout, no limits are applied', async () => {
- const collectionId = await createCollectionExpectSuccess({ mode: { type: 'ReFungible' } });
- await setCollectionLimitsExpectSuccess(Alice, collectionId, { sponsorTimeout: 0 });
- const tokenId = await createItemExpectSuccess(Alice, collectionId, 'ReFungible');
- await setCollectionSponsorExpectSuccess(collectionId, Alice.address);
+ const collectionId = await createCollectionExpectSuccess({mode: {type: 'ReFungible'}});
+ await setCollectionLimitsExpectSuccess(alice, collectionId, {sponsorTransferTimeout: 0});
+ const tokenId = await createItemExpectSuccess(alice, collectionId, 'ReFungible');
+ await setCollectionSponsorExpectSuccess(collectionId, alice.address);
await confirmSponsorshipExpectSuccess(collectionId, '//Alice');
- await transferExpectSuccess(collectionId, tokenId, Alice, Bob, 100, 'ReFungible');
- await transferExpectSuccess(collectionId, tokenId, Bob, Charlie, 20, 'ReFungible');
- const aliceBalanceBefore = await getFreeBalance(Alice);
+ await transferExpectSuccess(collectionId, tokenId, alice, bob, 100, 'ReFungible');
+ await transferExpectSuccess(collectionId, tokenId, bob, charlie, 20, 'ReFungible');
+ const aliceBalanceBefore = await getFreeBalance(alice);
// check setting SponsorTimeout = 0, success with next block
await waitNewBlocks(1);
- await transferExpectSuccess(collectionId, tokenId, Bob, Charlie, 20, 'ReFungible');
- const aliceBalanceAfterSponsoredTransaction1 = await getFreeBalance(Alice);
+ await transferExpectSuccess(collectionId, tokenId, bob, charlie, 20, 'ReFungible');
+ const aliceBalanceAfterSponsoredTransaction1 = await getFreeBalance(alice);
expect(aliceBalanceAfterSponsoredTransaction1 < aliceBalanceBefore).to.be.true;
//expect(aliceBalanceAfterSponsoredTransaction1).to.be.lessThan(aliceBalanceBefore);
});
tests/src/metadataUpdate.test.tsdiffbeforeafterboth--- a/tests/src/metadataUpdate.test.ts
+++ b/tests/src/metadataUpdate.test.ts
@@ -27,53 +27,53 @@
describe('Metadata update permissions with ItemOwner flag', () => {
it('ItemOwner can set variable metadata with ItemOwner permission flag', async () => {
await usingApi(async () => {
- const Alice = privateKey('//Alice');
+ const alice = privateKey('//Alice');
const data = [1, 2, 254, 255];
// nft
const nftCollectionId = await createCollectionExpectSuccess();
- const newNftTokenId = await createItemExpectSuccess(Alice, nftCollectionId, 'NFT');
- await setMetadataUpdatePermissionFlagExpectSuccess(Alice, nftCollectionId, 'ItemOwner');
+ const newNftTokenId = await createItemExpectSuccess(alice, nftCollectionId, 'NFT');
+ await setMetadataUpdatePermissionFlagExpectSuccess(alice, nftCollectionId, 'ItemOwner');
- await setVariableMetaDataExpectSuccess(Alice, nftCollectionId, newNftTokenId, data);
+ await setVariableMetaDataExpectSuccess(alice, nftCollectionId, newNftTokenId, data);
});
});
it('Admin can\'n set variable metadata with ItemOwner permission flag', async () => {
await usingApi(async () => {
- const Alice = privateKey('//Alice');
- const Bob = privateKey('//Bob');
-
+ const alice = privateKey('//Alice');
+ const bob = privateKey('//Bob');
+
const data = [1, 2, 254, 255];
-
+
// nft
const nftCollectionId = await createCollectionExpectSuccess();
- const newNftTokenId = await createItemExpectSuccess(Alice, nftCollectionId, 'NFT');
- await setMetadataUpdatePermissionFlagExpectSuccess(Alice, nftCollectionId, 'ItemOwner');
+ const newNftTokenId = await createItemExpectSuccess(alice, nftCollectionId, 'NFT');
+ await setMetadataUpdatePermissionFlagExpectSuccess(alice, nftCollectionId, 'ItemOwner');
+
+ await setMintPermissionExpectSuccess(alice, nftCollectionId, true);
+ await addToWhiteListExpectSuccess(alice, nftCollectionId, bob.address);
+ await addCollectionAdminExpectSuccess(alice, nftCollectionId, bob.address);
- await setMintPermissionExpectSuccess(Alice, nftCollectionId, true);
- await addToWhiteListExpectSuccess(Alice, nftCollectionId, Bob.address);
- await addCollectionAdminExpectSuccess(Alice, nftCollectionId, Bob);
-
- await setVariableMetaDataExpectFailure(Bob, nftCollectionId, newNftTokenId, data);
+ await setVariableMetaDataExpectFailure(bob, nftCollectionId, newNftTokenId, data);
});
});
it('User can\'n set variable metadata with ItemOwner permission flag', async () => {
await usingApi(async () => {
- const Alice = privateKey('//Alice');
- const Bob = privateKey('//Bob');
-
+ const alice = privateKey('//Alice');
+ const bob = privateKey('//Bob');
+
const data = [1, 2, 254, 255];
-
+
// nft
const nftCollectionId = await createCollectionExpectSuccess();
- const newNftTokenId = await createItemExpectSuccess(Alice, nftCollectionId, 'NFT');
- await setMetadataUpdatePermissionFlagExpectSuccess(Alice, nftCollectionId, 'ItemOwner');
+ const newNftTokenId = await createItemExpectSuccess(alice, nftCollectionId, 'NFT');
+ await setMetadataUpdatePermissionFlagExpectSuccess(alice, nftCollectionId, 'ItemOwner');
- await setMintPermissionExpectSuccess(Alice, nftCollectionId, true);
- await setVariableMetaDataExpectFailure(Bob, nftCollectionId, newNftTokenId, data);
+ await setMintPermissionExpectSuccess(alice, nftCollectionId, true);
+ await setVariableMetaDataExpectFailure(bob, nftCollectionId, newNftTokenId, data);
});
});
});
@@ -81,60 +81,60 @@
describe('Metadata update permissions with Admin flag', () => {
it('Admin can set variable metadata with Admin permission flag', async () => {
await usingApi(async () => {
- const Alice = privateKey('//Alice');
- const Bob = privateKey('//Bob');
-
+ const alice = privateKey('//Alice');
+ const bob = privateKey('//Bob');
+
const data = [1, 2, 254, 255];
-
+
// nft
const nftCollectionId = await createCollectionExpectSuccess();
- const newNftTokenId = await createItemExpectSuccess(Alice, nftCollectionId, 'NFT');
- await setMetadataUpdatePermissionFlagExpectSuccess(Alice, nftCollectionId, 'Admin');
+ const newNftTokenId = await createItemExpectSuccess(alice, nftCollectionId, 'NFT');
+ await setMetadataUpdatePermissionFlagExpectSuccess(alice, nftCollectionId, 'Admin');
- await setMintPermissionExpectSuccess(Alice, nftCollectionId, true);
- await addToWhiteListExpectSuccess(Alice, nftCollectionId, Bob.address);
- await addCollectionAdminExpectSuccess(Alice, nftCollectionId, Bob);
-
- await setVariableMetaDataExpectSuccess(Bob, nftCollectionId, newNftTokenId, data);
+ await setMintPermissionExpectSuccess(alice, nftCollectionId, true);
+ await addToWhiteListExpectSuccess(alice, nftCollectionId, bob.address);
+ await addCollectionAdminExpectSuccess(alice, nftCollectionId, bob.address);
+
+ await setVariableMetaDataExpectSuccess(bob, nftCollectionId, newNftTokenId, data);
});
});
it('User can\'n can set variable metadata with Admin permission flag', async () => {
await usingApi(async () => {
- const Alice = privateKey('//Alice');
- const Bob = privateKey('//Bob');
-
+ const alice = privateKey('//Alice');
+ const bob = privateKey('//Bob');
+
const data = [1, 2, 254, 255];
-
+
// nft
const nftCollectionId = await createCollectionExpectSuccess();
- const newNftTokenId = await createItemExpectSuccess(Alice, nftCollectionId, 'NFT');
- await setMetadataUpdatePermissionFlagExpectSuccess(Alice, nftCollectionId, 'Admin');
+ const newNftTokenId = await createItemExpectSuccess(alice, nftCollectionId, 'NFT');
+ await setMetadataUpdatePermissionFlagExpectSuccess(alice, nftCollectionId, 'Admin');
+
+ await setMintPermissionExpectSuccess(alice, nftCollectionId, true);
+ await addToWhiteListExpectSuccess(alice, nftCollectionId, bob.address);
+ await addCollectionAdminExpectSuccess(alice, nftCollectionId, bob.address);
- await setMintPermissionExpectSuccess(Alice, nftCollectionId, true);
- await addToWhiteListExpectSuccess(Alice, nftCollectionId, Bob.address);
- await addCollectionAdminExpectSuccess(Alice, nftCollectionId, Bob);
-
- await setVariableMetaDataExpectSuccess(Bob, nftCollectionId, newNftTokenId, data);
+ await setVariableMetaDataExpectSuccess(bob, nftCollectionId, newNftTokenId, data);
});
});
it('ItemOwner can\'n can set variable metadata with Admin permission flag', async () => {
await usingApi(async () => {
- const Alice = privateKey('//Alice');
- const Bob = privateKey('//Bob');
-
+ const alice = privateKey('//Alice');
+ const bob = privateKey('//Bob');
+
const data = [1, 2, 254, 255];
-
+
// nft
const nftCollectionId = await createCollectionExpectSuccess();
- await enablePublicMintingExpectSuccess(Alice, nftCollectionId);
- await addToWhiteListExpectSuccess(Alice, nftCollectionId, Bob.address);
- await enableWhiteListExpectSuccess(Alice, nftCollectionId);
- const newNftTokenId = await createItemExpectSuccess(Bob, nftCollectionId, 'NFT');
- await setMetadataUpdatePermissionFlagExpectSuccess(Alice, nftCollectionId, 'Admin');
-
- await setVariableMetaDataExpectFailure(Bob, nftCollectionId, newNftTokenId, data);
+ await enablePublicMintingExpectSuccess(alice, nftCollectionId);
+ await addToWhiteListExpectSuccess(alice, nftCollectionId, bob.address);
+ await enableWhiteListExpectSuccess(alice, nftCollectionId);
+ const newNftTokenId = await createItemExpectSuccess(bob, nftCollectionId, 'NFT');
+ await setMetadataUpdatePermissionFlagExpectSuccess(alice, nftCollectionId, 'Admin');
+
+ await setVariableMetaDataExpectFailure(bob, nftCollectionId, newNftTokenId, data);
});
});
});
@@ -142,63 +142,63 @@
describe('Metadata update permissions with None flag', () => {
it('Nobody can set variable metadata with None flag (Regular)', async () => {
await usingApi(async () => {
- const Alice = privateKey('//Alice');
- const Bob = privateKey('//Bob');
-
+ const alice = privateKey('//Alice');
+ const bob = privateKey('//Bob');
+
const data = [1, 2, 254, 255];
-
+
// nft
const nftCollectionId = await createCollectionExpectSuccess();
- const newNftTokenId = await createItemExpectSuccess(Alice, nftCollectionId, 'NFT');
- await setMetadataUpdatePermissionFlagExpectSuccess(Alice, nftCollectionId, 'None');
-
- await setVariableMetaDataExpectFailure(Bob, nftCollectionId, newNftTokenId, data);
+ const newNftTokenId = await createItemExpectSuccess(alice, nftCollectionId, 'NFT');
+ await setMetadataUpdatePermissionFlagExpectSuccess(alice, nftCollectionId, 'None');
+
+ await setVariableMetaDataExpectFailure(bob, nftCollectionId, newNftTokenId, data);
});
});
it('Nobody can set variable metadata with None flag (Admin)', async () => {
await usingApi(async () => {
- const Alice = privateKey('//Alice');
- const Bob = privateKey('//Bob');
-
+ const alice = privateKey('//Alice');
+ const bob = privateKey('//Bob');
+
const data = [1, 2, 254, 255];
-
+
// nft
const nftCollectionId = await createCollectionExpectSuccess();
- const newNftTokenId = await createItemExpectSuccess(Alice, nftCollectionId, 'NFT');
- await setMetadataUpdatePermissionFlagExpectSuccess(Alice, nftCollectionId, 'None');
-
- await setMintPermissionExpectSuccess(Alice, nftCollectionId, true);
- await addToWhiteListExpectSuccess(Alice, nftCollectionId, Bob.address);
- await addCollectionAdminExpectSuccess(Alice, nftCollectionId, Bob);
-
- await setVariableMetaDataExpectFailure(Bob, nftCollectionId, newNftTokenId, data);
+ const newNftTokenId = await createItemExpectSuccess(alice, nftCollectionId, 'NFT');
+ await setMetadataUpdatePermissionFlagExpectSuccess(alice, nftCollectionId, 'None');
+
+ await setMintPermissionExpectSuccess(alice, nftCollectionId, true);
+ await addToWhiteListExpectSuccess(alice, nftCollectionId, bob.address);
+ await addCollectionAdminExpectSuccess(alice, nftCollectionId, bob.address);
+
+ await setVariableMetaDataExpectFailure(bob, nftCollectionId, newNftTokenId, data);
});
});
it('Nobody can set variable metadata with None flag (ItemOwner)', async () => {
await usingApi(async () => {
- const Alice = privateKey('//Alice');
-
+ const alice = privateKey('//Alice');
+
const data = [1, 2, 254, 255];
-
+
// nft
const nftCollectionId = await createCollectionExpectSuccess();
- const newNftTokenId = await createItemExpectSuccess(Alice, nftCollectionId, 'NFT');
- await setMetadataUpdatePermissionFlagExpectSuccess(Alice, nftCollectionId, 'None');
-
- await setVariableMetaDataExpectFailure(Alice, nftCollectionId, newNftTokenId, data);
+ const newNftTokenId = await createItemExpectSuccess(alice, nftCollectionId, 'NFT');
+ await setMetadataUpdatePermissionFlagExpectSuccess(alice, nftCollectionId, 'None');
+
+ await setVariableMetaDataExpectFailure(alice, nftCollectionId, newNftTokenId, data);
});
});
it('Nobody can set variable metadata flag after freeze', async () => {
await usingApi(async () => {
- const Alice = privateKey('//Alice');
-
+ const alice = privateKey('//Alice');
+
// nft
const nftCollectionId = await createCollectionExpectSuccess();
- await setMetadataUpdatePermissionFlagExpectSuccess(Alice, nftCollectionId, 'None');
- await setMetadataUpdatePermissionFlagExpectFailure(Alice, nftCollectionId, 'Admin');
+ await setMetadataUpdatePermissionFlagExpectSuccess(alice, nftCollectionId, 'None');
+ await setMetadataUpdatePermissionFlagExpectFailure(alice, nftCollectionId, 'Admin');
});
});
});
tests/src/mintModes.test.tsdiffbeforeafterboth--- a/tests/src/mintModes.test.ts
+++ b/tests/src/mintModes.test.ts
@@ -3,7 +3,7 @@
// file 'LICENSE', which is part of this source code package.
//
-import { IKeyringPair } from '@polkadot/types/types';
+import {IKeyringPair} from '@polkadot/types/types';
import privateKey from './substrate/privateKey';
import usingApi from './substrate/substrate-api';
import {
@@ -30,7 +30,7 @@
it('If the AllowList mode is enabled, then the address added to the whitelist and not the owner or administrator can create tokens', async () => {
await usingApi(async () => {
- const collectionId = await createCollectionExpectSuccess({ mode: { type: 'NFT' } });
+ const collectionId = await createCollectionExpectSuccess({mode: {type: 'NFT'}});
await enableWhiteListExpectSuccess(alice, collectionId);
await setMintPermissionExpectSuccess(alice, collectionId, true);
await addToWhiteListExpectSuccess(alice, collectionId, bob.address);
@@ -41,7 +41,7 @@
it('If the AllowList mode is enabled, address not included in whitelist that is regular user cannot create tokens', async () => {
await usingApi(async () => {
- const collectionId = await createCollectionExpectSuccess({ mode: { type: 'NFT' } });
+ const collectionId = await createCollectionExpectSuccess({mode: {type: 'NFT'}});
await enableWhiteListExpectSuccess(alice, collectionId);
await setMintPermissionExpectSuccess(alice, collectionId, true);
await createItemExpectFailure(bob, collectionId, 'NFT');
@@ -50,17 +50,17 @@
it('If the AllowList mode is enabled, address not included in whitelist that is admin can create tokens', async () => {
await usingApi(async () => {
- const collectionId = await createCollectionExpectSuccess({ mode: { type: 'NFT' } });
+ const collectionId = await createCollectionExpectSuccess({mode: {type: 'NFT'}});
await enableWhiteListExpectSuccess(alice, collectionId);
await setMintPermissionExpectSuccess(alice, collectionId, true);
- await addCollectionAdminExpectSuccess(alice, collectionId, bob);
+ await addCollectionAdminExpectSuccess(alice, collectionId, bob.address);
await createItemExpectSuccess(bob, collectionId, 'NFT');
});
});
it('If the AllowList mode is enabled, address not included in whitelist that is owner can create tokens', async () => {
await usingApi(async () => {
- const collectionId = await createCollectionExpectSuccess({ mode: { type: 'NFT' } });
+ const collectionId = await createCollectionExpectSuccess({mode: {type: 'NFT'}});
await enableWhiteListExpectSuccess(alice, collectionId);
await setMintPermissionExpectSuccess(alice, collectionId, true);
await createItemExpectSuccess(alice, collectionId, 'NFT');
@@ -69,7 +69,7 @@
it('If the AllowList mode is disabled, owner can create tokens', async () => {
await usingApi(async () => {
- const collectionId = await createCollectionExpectSuccess({ mode: { type: 'NFT' } });
+ const collectionId = await createCollectionExpectSuccess({mode: {type: 'NFT'}});
await disableWhiteListExpectSuccess(alice, collectionId);
await setMintPermissionExpectSuccess(alice, collectionId, true);
await createItemExpectSuccess(alice, collectionId, 'NFT');
@@ -78,17 +78,17 @@
it('If the AllowList mode is disabled, collection admin can create tokens', async () => {
await usingApi(async () => {
- const collectionId = await createCollectionExpectSuccess({ mode: { type: 'NFT' } });
+ const collectionId = await createCollectionExpectSuccess({mode: {type: 'NFT'}});
await disableWhiteListExpectSuccess(alice, collectionId);
await setMintPermissionExpectSuccess(alice, collectionId, true);
- await addCollectionAdminExpectSuccess(alice, collectionId, bob);
+ await addCollectionAdminExpectSuccess(alice, collectionId, bob.address);
await createItemExpectSuccess(bob, collectionId, 'NFT');
});
});
it('If the AllowList mode is disabled, regular user can`t create tokens', async () => {
await usingApi(async () => {
- const collectionId = await createCollectionExpectSuccess({ mode: { type: 'NFT' } });
+ const collectionId = await createCollectionExpectSuccess({mode: {type: 'NFT'}});
await disableWhiteListExpectSuccess(alice, collectionId);
await setMintPermissionExpectSuccess(alice, collectionId, true);
await createItemExpectFailure(bob, collectionId, 'NFT');
@@ -109,7 +109,7 @@
it('Address that is the not owner or not admin cannot create tokens', async () => {
await usingApi(async () => {
- const collectionId = await createCollectionExpectSuccess({ mode: { type: 'NFT' } });
+ const collectionId = await createCollectionExpectSuccess({mode: {type: 'NFT'}});
await enableWhiteListExpectSuccess(alice, collectionId);
await setMintPermissionExpectSuccess(alice, collectionId, false);
await addToWhiteListExpectSuccess(alice, collectionId, bob.address);
@@ -119,7 +119,7 @@
it('Address that is collection owner can create tokens', async () => {
await usingApi(async () => {
- const collectionId = await createCollectionExpectSuccess({ mode: { type: 'NFT' } });
+ const collectionId = await createCollectionExpectSuccess({mode: {type: 'NFT'}});
await disableWhiteListExpectSuccess(alice, collectionId);
await setMintPermissionExpectSuccess(alice, collectionId, false);
await createItemExpectSuccess(alice, collectionId, 'NFT');
@@ -128,10 +128,10 @@
it('Address that is admin can create tokens', async () => {
await usingApi(async () => {
- const collectionId = await createCollectionExpectSuccess({ mode: { type: 'NFT' } });
+ const collectionId = await createCollectionExpectSuccess({mode: {type: 'NFT'}});
await disableWhiteListExpectSuccess(alice, collectionId);
await setMintPermissionExpectSuccess(alice, collectionId, false);
- await addCollectionAdminExpectSuccess(alice, collectionId, bob);
+ await addCollectionAdminExpectSuccess(alice, collectionId, bob.address);
await createItemExpectSuccess(bob, collectionId, 'NFT');
});
});
tests/src/overflow.test.tsdiffbeforeafterboth--- a/tests/src/overflow.test.ts
+++ b/tests/src/overflow.test.ts
@@ -3,12 +3,12 @@
// file 'LICENSE', which is part of this source code package.
//
-import { IKeyringPair } from '@polkadot/types/types';
+import {IKeyringPair} from '@polkadot/types/types';
import chai from 'chai';
import chaiAsPromised from 'chai-as-promised';
import privateKey from './substrate/privateKey';
import usingApi from './substrate/substrate-api';
-import { approveExpectFail, approveExpectSuccess, createCollectionExpectSuccess, createFungibleItemExpectSuccess, getAllowance, getFungibleBalance, transferExpectFailure, transferExpectSuccess, transferFromExpectFail, transferFromExpectSuccess, U128_MAX } from './util/helpers';
+import {approveExpectSuccess, createCollectionExpectSuccess, createFungibleItemExpectSuccess, getAllowance, getBalance, transferExpectFailure, transferExpectSuccess, transferFromExpectFail, transferFromExpectSuccess, U128_MAX} from './util/helpers';
chai.use(chaiAsPromised);
const expect = chai.expect;
@@ -27,41 +27,36 @@
});
it('fails when overflows on transfer', async () => {
- const fungibleCollectionId = await createCollectionExpectSuccess({ mode: { type: 'Fungible', decimalPoints: 0 } });
+ await usingApi(async api => {
+ const fungibleCollectionId = await createCollectionExpectSuccess({mode: {type: 'Fungible', decimalPoints: 0}});
- await createFungibleItemExpectSuccess(alice, fungibleCollectionId, { Value: U128_MAX });
- await transferExpectSuccess(fungibleCollectionId, 0, alice, bob, U128_MAX, 'Fungible');
-
- await createFungibleItemExpectSuccess(alice, fungibleCollectionId, { Value: 1n });
- await transferExpectFailure(fungibleCollectionId, 0, alice, bob, 1);
-
- expect(await getFungibleBalance(fungibleCollectionId, alice.address)).to.equal(1n);
- expect(await getFungibleBalance(fungibleCollectionId, bob.address)).to.equal(U128_MAX);
- });
+ await createFungibleItemExpectSuccess(alice, fungibleCollectionId, {Value: U128_MAX});
+ await transferExpectSuccess(fungibleCollectionId, 0, alice, bob, U128_MAX, 'Fungible');
- it('fails on allowance overflow', async () => {
- const fungibleCollectionId = await createCollectionExpectSuccess({ mode: { type: 'Fungible', decimalPoints: 0 } });
+ await createFungibleItemExpectSuccess(alice, fungibleCollectionId, {Value: 1n});
+ await transferExpectFailure(fungibleCollectionId, 0, alice, bob, 1);
- await createFungibleItemExpectSuccess(alice, fungibleCollectionId, { Value: U128_MAX });
- await approveExpectSuccess(fungibleCollectionId, 0, alice, bob, U128_MAX);
- await approveExpectFail(fungibleCollectionId, 0, alice, bob, U128_MAX);
+ expect(await getBalance(api, fungibleCollectionId, alice.address, 0)).to.equal(1n);
+ expect(await getBalance(api, fungibleCollectionId, bob.address, 0)).to.equal(U128_MAX);
+ });
});
it('fails when overflows on transferFrom', async () => {
- const fungibleCollectionId = await createCollectionExpectSuccess({ mode: { type: 'Fungible', decimalPoints: 0 } });
+ await usingApi(async api => {
+ const fungibleCollectionId = await createCollectionExpectSuccess({mode: {type: 'Fungible', decimalPoints: 0}});
+ await createFungibleItemExpectSuccess(alice, fungibleCollectionId, {Value: U128_MAX});
+ await approveExpectSuccess(fungibleCollectionId, 0, alice, bob.address, U128_MAX);
+ await transferFromExpectSuccess(fungibleCollectionId, 0, bob, alice, charlie, U128_MAX, 'Fungible');
- await createFungibleItemExpectSuccess(alice, fungibleCollectionId, { Value: U128_MAX });
- await approveExpectSuccess(fungibleCollectionId, 0, alice, bob, U128_MAX);
- await transferFromExpectSuccess(fungibleCollectionId, 0, bob, alice, charlie, U128_MAX, 'Fungible');
+ expect(await getBalance(api, fungibleCollectionId, charlie.address, 0)).to.equal(U128_MAX);
+ expect(await getAllowance(api, fungibleCollectionId, alice.address, bob.address, 0)).to.equal(0n);
- expect(await getFungibleBalance(fungibleCollectionId, charlie.address)).to.equal(U128_MAX);
- expect((await getAllowance(fungibleCollectionId, 0, alice.address, bob.address)).toString()).to.equal('0');
-
- await createFungibleItemExpectSuccess(alice, fungibleCollectionId, { Value: U128_MAX });
- await approveExpectSuccess(fungibleCollectionId, 0, alice, bob, 1n);
- await transferFromExpectFail(fungibleCollectionId, 0, bob, alice, charlie, 1);
+ await createFungibleItemExpectSuccess(alice, fungibleCollectionId, {Value: U128_MAX});
+ await approveExpectSuccess(fungibleCollectionId, 0, alice, bob.address, 1n);
+ await transferFromExpectFail(fungibleCollectionId, 0, bob, alice, charlie, 1);
- expect(await getFungibleBalance(fungibleCollectionId, charlie.address)).to.equal(U128_MAX);
- expect((await getAllowance(fungibleCollectionId, 0, alice.address, bob.address)).toString()).to.equal('1');
+ expect(await getBalance(api, fungibleCollectionId, charlie.address, 0)).to.equal(U128_MAX);
+ expect(await getAllowance(api, fungibleCollectionId, alice.address, bob.address, 0)).to.equal(1n);
+ });
});
});
tests/src/pallet-presence.test.tsdiffbeforeafterboth--- a/tests/src/pallet-presence.test.ts
+++ b/tests/src/pallet-presence.test.ts
@@ -3,8 +3,8 @@
// file 'LICENSE', which is part of this source code package.
//
-import { ApiPromise } from '@polkadot/api';
-import { expect } from 'chai';
+import {ApiPromise} from '@polkadot/api';
+import {expect} from 'chai';
import usingApi from './substrate/substrate-api';
function getModuleNames(api: ApiPromise): string[] {
@@ -14,6 +14,7 @@
// Pallets that must always be present
const requiredPallets = [
'balances',
+ 'common',
'randomnesscollectiveflip',
'timestamp',
'transactionpayment',
@@ -28,12 +29,15 @@
'evmmigration',
'evmtransactionpayment',
'ethereum',
+ 'fungible',
'xcmpqueue',
'polkadotxcm',
'cumulusxcm',
'dmpqueue',
'inflation',
'nft',
+ 'nonfungible',
+ 'refungible',
'scheduler',
'nftpayment',
'charging',
tests/src/removeCollectionAdmin.test.tsdiffbeforeafterboth--- a/tests/src/removeCollectionAdmin.test.ts
+++ b/tests/src/removeCollectionAdmin.test.ts
@@ -3,12 +3,12 @@
// file 'LICENSE', which is part of this source code package.
//
-import { ApiPromise } from '@polkadot/api';
+import {ApiPromise} from '@polkadot/api';
import chai from 'chai';
import chaiAsPromised from 'chai-as-promised';
import privateKey from './substrate/privateKey';
-import { default as usingApi, submitTransactionAsync, submitTransactionExpectFailAsync } from './substrate/substrate-api';
-import {createCollectionExpectSuccess, destroyCollectionExpectSuccess, normalizeAccountId} from './util/helpers';
+import {default as usingApi, submitTransactionAsync, submitTransactionExpectFailAsync} from './substrate/substrate-api';
+import {createCollectionExpectSuccess, destroyCollectionExpectSuccess, getAdminList, normalizeAccountId} from './util/helpers';
chai.use(chaiAsPromised);
const expect = chai.expect;
@@ -17,63 +17,63 @@
it('Remove collection admin.', async () => {
await usingApi(async (api: ApiPromise) => {
const collectionId = await createCollectionExpectSuccess();
- const Alice = privateKey('//Alice');
- const Bob = privateKey('//Bob');
- const collection: any = (await api.query.nft.collectionById(collectionId)).toJSON();
- expect(collection.owner).to.be.deep.eq(Alice.address);
+ const alice = privateKey('//Alice');
+ const bob = privateKey('//Bob');
+ const collection = (await api.query.common.collectionById(collectionId)).unwrap();
+ expect(collection.owner.toString()).to.be.deep.eq(alice.address);
// first - add collection admin Bob
- const addAdminTx = api.tx.nft.addCollectionAdmin(collectionId, normalizeAccountId(Bob.address));
- await submitTransactionAsync(Alice, addAdminTx);
+ const addAdminTx = api.tx.nft.addCollectionAdmin(collectionId, normalizeAccountId(bob.address));
+ await submitTransactionAsync(alice, addAdminTx);
- const adminListAfterAddAdmin: any = (await api.query.nft.adminList(collectionId)).toJSON();
- expect(adminListAfterAddAdmin).to.be.deep.contains(normalizeAccountId(Bob.address));
+ const adminListAfterAddAdmin = await getAdminList(api, collectionId);
+ expect(adminListAfterAddAdmin).to.be.deep.contains(normalizeAccountId(bob.address));
// then remove bob from admins of collection
- const removeAdminTx = api.tx.nft.removeCollectionAdmin(collectionId, normalizeAccountId(Bob.address));
- await submitTransactionAsync(Alice, removeAdminTx);
+ const removeAdminTx = api.tx.nft.removeCollectionAdmin(collectionId, normalizeAccountId(bob.address));
+ await submitTransactionAsync(alice, removeAdminTx);
- const adminListAfterRemoveAdmin: any = (await api.query.nft.adminList(collectionId)).toJSON;
- expect(adminListAfterRemoveAdmin).not.to.be.deep.contains(normalizeAccountId(Bob.address));
+ const adminListAfterRemoveAdmin = await getAdminList(api, collectionId);
+ expect(adminListAfterRemoveAdmin).not.to.be.deep.contains(normalizeAccountId(bob.address));
});
});
it('Remove collection admin by admin.', async () => {
await usingApi(async (api: ApiPromise) => {
const collectionId = await createCollectionExpectSuccess();
- const Alice = privateKey('//Alice');
- const Bob = privateKey('//Bob');
- const Charlie = privateKey('//Charlie');
- const collection: any = (await api.query.nft.collectionById(collectionId)).toJSON();
- expect(collection.owner).to.be.deep.eq(Alice.address);
+ const alice = privateKey('//Alice');
+ const bob = privateKey('//Bob');
+ const charlie = privateKey('//Charlie');
+ const collection = (await api.query.common.collectionById(collectionId)).unwrap();
+ expect(collection.owner.toString()).to.be.eq(alice.address);
// first - add collection admin Bob
- const addAdminTx = api.tx.nft.addCollectionAdmin(collectionId, normalizeAccountId(Bob.address));
- await submitTransactionAsync(Alice, addAdminTx);
+ const addAdminTx = api.tx.nft.addCollectionAdmin(collectionId, normalizeAccountId(bob.address));
+ await submitTransactionAsync(alice, addAdminTx);
- const addAdminTx2 = api.tx.nft.addCollectionAdmin(collectionId, normalizeAccountId(Charlie.address));
- await submitTransactionAsync(Alice, addAdminTx2);
+ const addAdminTx2 = api.tx.nft.addCollectionAdmin(collectionId, normalizeAccountId(charlie.address));
+ await submitTransactionAsync(alice, addAdminTx2);
- const adminListAfterAddAdmin: any = (await api.query.nft.adminList(collectionId)).toJSON();
- expect(adminListAfterAddAdmin).to.be.deep.contains(normalizeAccountId(Bob.address));
+ const adminListAfterAddAdmin = await getAdminList(api, collectionId);
+ expect(adminListAfterAddAdmin).to.be.deep.contains(normalizeAccountId(bob.address));
// then remove bob from admins of collection
- const removeAdminTx = api.tx.nft.removeCollectionAdmin(collectionId, normalizeAccountId(Bob.address));
- await submitTransactionAsync(Charlie, removeAdminTx);
+ const removeAdminTx = api.tx.nft.removeCollectionAdmin(collectionId, normalizeAccountId(bob.address));
+ await submitTransactionAsync(charlie, removeAdminTx);
- const adminListAfterRemoveAdmin: any = (await api.query.nft.adminList(collectionId)).toJSON;
- expect(adminListAfterRemoveAdmin).not.to.be.deep.contains(normalizeAccountId(Bob.address));
+ const adminListAfterRemoveAdmin = await getAdminList(api, collectionId);
+ expect(adminListAfterRemoveAdmin).not.to.be.deep.contains(normalizeAccountId(bob.address));
});
});
it('Remove admin from collection that has no admins', async () => {
await usingApi(async (api: ApiPromise) => {
- const Alice = privateKey('//Alice');
+ const alice = privateKey('//Alice');
const collectionId = await createCollectionExpectSuccess();
- const adminListBeforeAddAdmin: any = (await api.query.nft.adminList(collectionId));
+ const adminListBeforeAddAdmin = await getAdminList(api, collectionId);
expect(adminListBeforeAddAdmin).to.have.lengthOf(0);
- const tx = api.tx.nft.removeCollectionAdmin(collectionId, normalizeAccountId(Alice.address));
- await submitTransactionAsync(Alice, tx);
+ const tx = api.tx.nft.removeCollectionAdmin(collectionId, normalizeAccountId(alice.address));
+ await submitTransactionAsync(alice, tx);
});
});
});
@@ -98,13 +98,13 @@
await usingApi(async (api: ApiPromise) => {
// tslint:disable-next-line: no-bitwise
const collectionId = await createCollectionExpectSuccess();
- const Alice = privateKey('//Alice');
- const Bob = privateKey('//Bob');
+ const alice = privateKey('//Alice');
+ const bob = privateKey('//Bob');
await destroyCollectionExpectSuccess(collectionId);
- const changeOwnerTx = api.tx.nft.removeCollectionAdmin(collectionId, normalizeAccountId(Bob.address));
- await expect(submitTransactionExpectFailAsync(Alice, changeOwnerTx)).to.be.rejected;
+ const changeOwnerTx = api.tx.nft.removeCollectionAdmin(collectionId, normalizeAccountId(bob.address));
+ await expect(submitTransactionExpectFailAsync(alice, changeOwnerTx)).to.be.rejected;
// Verifying that nothing bad happened (network is live, new collections can be created, etc.)
await createCollectionExpectSuccess();
@@ -114,15 +114,15 @@
it('Regular user Can\'t remove collection admin', async () => {
await usingApi(async (api: ApiPromise) => {
const collectionId = await createCollectionExpectSuccess();
- const Alice = privateKey('//Alice');
- const Bob = privateKey('//Bob');
- const Charlie = privateKey('//Charlie');
+ const alice = privateKey('//Alice');
+ const bob = privateKey('//Bob');
+ const charlie = privateKey('//Charlie');
- const addAdminTx = api.tx.nft.addCollectionAdmin(collectionId, normalizeAccountId(Bob.address));
- await submitTransactionAsync(Alice, addAdminTx);
+ const addAdminTx = api.tx.nft.addCollectionAdmin(collectionId, normalizeAccountId(bob.address));
+ await submitTransactionAsync(alice, addAdminTx);
- const changeOwnerTx = api.tx.nft.removeCollectionAdmin(collectionId, normalizeAccountId(Bob.address));
- await expect(submitTransactionExpectFailAsync(Charlie, changeOwnerTx)).to.be.rejected;
+ const changeOwnerTx = api.tx.nft.removeCollectionAdmin(collectionId, normalizeAccountId(bob.address));
+ await expect(submitTransactionExpectFailAsync(charlie, changeOwnerTx)).to.be.rejected;
// Verifying that nothing bad happened (network is live, new collections can be created, etc.)
await createCollectionExpectSuccess();
tests/src/removeCollectionSponsor.test.tsdiffbeforeafterboth--- a/tests/src/removeCollectionSponsor.test.ts
+++ b/tests/src/removeCollectionSponsor.test.ts
@@ -5,11 +5,11 @@
import chai from 'chai';
import chaiAsPromised from 'chai-as-promised';
-import { default as usingApi, submitTransactionExpectFailAsync } from './substrate/substrate-api';
-import {
- createCollectionExpectSuccess,
- setCollectionSponsorExpectSuccess,
- destroyCollectionExpectSuccess,
+import {default as usingApi, submitTransactionExpectFailAsync} from './substrate/substrate-api';
+import {
+ createCollectionExpectSuccess,
+ setCollectionSponsorExpectSuccess,
+ destroyCollectionExpectSuccess,
confirmSponsorshipExpectSuccess,
confirmSponsorshipExpectFailure,
createItemExpectSuccess,
@@ -19,9 +19,8 @@
normalizeAccountId,
addCollectionAdminExpectSuccess,
} from './util/helpers';
-import { Keyring } from '@polkadot/api';
-import { IKeyringPair } from '@polkadot/types/types';
-import { BigNumber } from 'bignumber.js';
+import {Keyring} from '@polkadot/api';
+import {IKeyringPair} from '@polkadot/types/types';
chai.use(chaiAsPromised);
const expect = chai.expect;
@@ -33,7 +32,7 @@
before(async () => {
await usingApi(async () => {
- const keyring = new Keyring({ type: 'sr25519' });
+ const keyring = new Keyring({type: 'sr25519'});
alice = keyring.addFromUri('//Alice');
bob = keyring.addFromUri('//Bob');
});
@@ -53,15 +52,15 @@
const itemId = await createItemExpectSuccess(alice, collectionId, 'NFT', zeroBalance.address);
// Transfer this tokens from unused address to Alice - should fail
- const AsponsorBalance = new BigNumber((await api.query.system.account(bob.address)).data.free.toString());
+ const sponsorBalanceBefore = (await api.query.system.account(bob.address)).data.free.toBigInt();
const zeroToAlice = api.tx.nft.transfer(normalizeAccountId(alice.address), collectionId, itemId, 0);
- const badTransaction = async function () {
+ const badTransaction = async function () {
await submitTransactionExpectFailAsync(zeroBalance, zeroToAlice);
};
await expect(badTransaction()).to.be.rejectedWith('Inability to pay some fees');
- const BsponsorBalance = new BigNumber((await api.query.system.account(bob.address)).data.free.toString());
+ const sponsorBalanceAfter = (await api.query.system.account(bob.address)).data.free.toBigInt();
- expect(BsponsorBalance.isEqualTo(AsponsorBalance)).to.be.true;
+ expect(sponsorBalanceAfter).to.be.equal(sponsorBalanceBefore);
});
});
@@ -89,7 +88,7 @@
describe('(!negative test!) integration test: ext. removeCollectionSponsor():', () => {
before(async () => {
await usingApi(async () => {
- const keyring = new Keyring({ type: 'sr25519' });
+ const keyring = new Keyring({type: 'sr25519'});
alice = keyring.addFromUri('//Alice');
bob = keyring.addFromUri('//Bob');
});
@@ -99,7 +98,7 @@
// Find the collection that never existed
let collectionId = 0;
await usingApi(async (api) => {
- collectionId = parseInt((await api.query.nft.createdCollectionCount()).toString()) + 1;
+ collectionId = (await api.query.common.createdCollectionCount()).toNumber() + 1;
});
await removeCollectionSponsorExpectFailure(collectionId);
@@ -108,7 +107,7 @@
it('(!negative test!) Remove sponsor for a collection with collection admin permissions', async () => {
const collectionId = await createCollectionExpectSuccess();
await setCollectionSponsorExpectSuccess(collectionId, bob.address);
- await addCollectionAdminExpectSuccess(alice, collectionId, bob);
+ await addCollectionAdminExpectSuccess(alice, collectionId, bob.address);
await removeCollectionSponsorExpectFailure(collectionId, '//Bob');
});
tests/src/removeFromContractWhiteList.test.tsdiffbeforeafterboth--- a/tests/src/removeFromContractWhiteList.test.ts
+++ b/tests/src/removeFromContractWhiteList.test.ts
@@ -5,10 +5,10 @@
import privateKey from './substrate/privateKey';
import usingApi from './substrate/substrate-api';
-import { deployFlipper, toggleFlipValueExpectFailure, toggleFlipValueExpectSuccess } from './util/contracthelpers';
-import { addToContractWhiteListExpectSuccess, isWhitelistedInContract, removeFromContractWhiteListExpectFailure, removeFromContractWhiteListExpectSuccess, toggleContractWhitelistExpectSuccess } from './util/helpers';
-import { IKeyringPair } from '@polkadot/types/types';
-import { expect } from 'chai';
+import {deployFlipper, toggleFlipValueExpectFailure, toggleFlipValueExpectSuccess} from './util/contracthelpers';
+import {addToContractWhiteListExpectSuccess, isWhitelistedInContract, removeFromContractWhiteListExpectFailure, removeFromContractWhiteListExpectSuccess, toggleContractWhitelistExpectSuccess} from './util/helpers';
+import {IKeyringPair} from '@polkadot/types/types';
+import {expect} from 'chai';
describe.skip('Integration Test removeFromContractWhiteList', () => {
let bob: IKeyringPair;
tests/src/removeFromWhiteList.test.tsdiffbeforeafterboth--- a/tests/src/removeFromWhiteList.test.ts
+++ b/tests/src/removeFromWhiteList.test.ts
@@ -5,7 +5,7 @@
import chai from 'chai';
import chaiAsPromised from 'chai-as-promised';
-import { default as usingApi } from './substrate/substrate-api';
+import {default as usingApi} from './substrate/substrate-api';
import {
createCollectionExpectSuccess,
destroyCollectionExpectSuccess,
@@ -19,7 +19,7 @@
normalizeAccountId,
addCollectionAdminExpectSuccess,
} from './util/helpers';
-import { IKeyringPair } from '@polkadot/types/types';
+import {IKeyringPair} from '@polkadot/types/types';
import privateKey from './substrate/privateKey';
chai.use(chaiAsPromised);
@@ -38,7 +38,7 @@
it('ensure bob is not in whitelist after removal', async () => {
await usingApi(async () => {
- const collectionId = await createCollectionExpectSuccess({ mode: { type: 'NFT' } });
+ const collectionId = await createCollectionExpectSuccess({mode: {type: 'NFT'}});
await enableWhiteListExpectSuccess(alice, collectionId);
await addToWhiteListExpectSuccess(alice, collectionId, bob.address);
@@ -105,9 +105,9 @@
it('ensure address is not in whitelist after removal', async () => {
await usingApi(async () => {
- const collectionId = await createCollectionExpectSuccess({ mode: { type: 'NFT' } });
+ const collectionId = await createCollectionExpectSuccess({mode: {type: 'NFT'}});
await enableWhiteListExpectSuccess(alice, collectionId);
- await addCollectionAdminExpectSuccess(alice, collectionId, bob);
+ await addCollectionAdminExpectSuccess(alice, collectionId, bob.address);
await addToWhiteListExpectSuccess(alice, collectionId, charlie.address);
await removeFromWhiteListExpectSuccess(bob, collectionId, normalizeAccountId(charlie.address));
expect(await isWhitelisted(collectionId, charlie.address)).to.be.false;
@@ -118,7 +118,7 @@
await usingApi(async () => {
const collectionWithoutWhitelistId = await createCollectionExpectSuccess();
await enableWhiteListExpectSuccess(alice, collectionWithoutWhitelistId);
- await addCollectionAdminExpectSuccess(alice, collectionWithoutWhitelistId, bob);
+ await addCollectionAdminExpectSuccess(alice, collectionWithoutWhitelistId, bob.address);
await addToWhiteListExpectSuccess(alice, collectionWithoutWhitelistId, charlie.address);
await disableWhiteListExpectSuccess(alice, collectionWithoutWhitelistId);
await removeFromWhiteListExpectSuccess(bob, collectionWithoutWhitelistId, normalizeAccountId(charlie.address));
@@ -133,4 +133,4 @@
await removeFromWhiteListExpectFailure(bob, collectionWithoutWhitelistId, normalizeAccountId(charlie.address));
});
});
-});
\ No newline at end of file
+});
tests/src/rpc.load.tsdiffbeforeafterboth--- a/tests/src/rpc.load.ts
+++ b/tests/src/rpc.load.ts
@@ -3,12 +3,11 @@
// file 'LICENSE', which is part of this source code package.
//
-import usingApi, { submitTransactionAsync } from './substrate/substrate-api';
-import { IKeyringPair } from '@polkadot/types/types';
-import { Abi, BlueprintPromise as Blueprint, CodePromise, ContractPromise as Contract } from '@polkadot/api-contract';
-import { ApiPromise, Keyring } from '@polkadot/api';
-import { BigNumber } from 'bignumber.js';
-import { findUnusedAddress } from './util/helpers';
+import usingApi, {submitTransactionAsync} from './substrate/substrate-api';
+import {IKeyringPair} from '@polkadot/types/types';
+import {Abi, BlueprintPromise as Blueprint, CodePromise, ContractPromise as Contract} from '@polkadot/api-contract';
+import {ApiPromise, Keyring} from '@polkadot/api';
+import {findUnusedAddress} from './util/helpers';
import fs from 'fs';
import privateKey from './substrate/privateKey';
@@ -41,7 +40,7 @@
unsub();
resolve(result);
}
- });
+ });
});
}
@@ -50,11 +49,10 @@
const deployer = await findUnusedAddress(api);
// Transfer balance to it
- const keyring = new Keyring({ type: 'sr25519' });
+ const keyring = new Keyring({type: 'sr25519'});
const alice = keyring.addFromUri('//Alice');
- let amount = new BigNumber(endowment);
- amount = amount.plus(1e15);
- const tx = api.tx.balances.transfer(deployer.address, amount.toFixed());
+ const amount = BigInt(endowment) + 10n**15n;
+ const tx = api.tx.balances.transfer(deployer.address, amount);
await submitTransactionAsync(alice, tx);
return deployer;
@@ -100,7 +98,7 @@
await api.rpc.system.chain();
count++;
process.stdout.write(`RPC reads: ${count} times at rate ${rate} r/s \r`);
-
+
if (count % checkPoint == 0) {
hrTime = process.hrtime();
const microsec2 = hrTime[0] * 1000000 + hrTime[1] / 1000;
@@ -134,7 +132,7 @@
await getScData(contract, deployer);
count++;
process.stdout.write(`SC reads: ${count} times at rate ${rate} r/s \r`);
-
+
if (count % checkPoint == 0) {
hrTime = process.hrtime();
const microsec2 = hrTime[0] * 1000000 + hrTime[1] / 1000;
tests/src/scheduler.test.tsdiffbeforeafterboth--- a/tests/src/scheduler.test.ts
+++ b/tests/src/scheduler.test.ts
@@ -20,15 +20,15 @@
describe('Integration Test scheduler base transaction', () => {
it('User can transfer owned token with delay (scheduler)', async () => {
await usingApi(async () => {
- const Alice = privateKey('//Alice');
- const Bob = privateKey('//Bob');
+ const alice = privateKey('//Alice');
+ const bob = privateKey('//Bob');
// nft
const nftCollectionId = await createCollectionExpectSuccess();
- const newNftTokenId = await createItemExpectSuccess(Alice, nftCollectionId, 'NFT');
- await setCollectionSponsorExpectSuccess(nftCollectionId, Alice.address);
+ const newNftTokenId = await createItemExpectSuccess(alice, nftCollectionId, 'NFT');
+ await setCollectionSponsorExpectSuccess(nftCollectionId, alice.address);
await confirmSponsorshipExpectSuccess(nftCollectionId);
- await scheduleTransferExpectSuccess(nftCollectionId, newNftTokenId, Alice, Bob, 1, 12000, 4);
+ await scheduleTransferExpectSuccess(nftCollectionId, newNftTokenId, alice, bob, 1, 4);
});
});
});
tests/src/setChainLimits.test.tsdiffbeforeafterboth--- a/tests/src/setChainLimits.test.ts
+++ b/tests/src/setChainLimits.test.ts
@@ -3,7 +3,7 @@
// file 'LICENSE', which is part of this source code package.
//
-import { IKeyringPair } from '@polkadot/types/types';
+import {IKeyringPair} from '@polkadot/types/types';
import privateKey from './substrate/privateKey';
import usingApi from './substrate/substrate-api';
import {
@@ -40,16 +40,16 @@
});
it('Collection owner cannot set chain limits', async () => {
- await createCollectionExpectSuccess({ mode: { type: 'NFT' } });
+ await createCollectionExpectSuccess({mode: {type: 'NFT'}});
await setChainLimitsExpectFailure(alice, limits);
});
it('Collection admin cannot set chain limits', async () => {
- const collectionId = await createCollectionExpectSuccess({ mode: { type: 'NFT' } });
- await addCollectionAdminExpectSuccess(alice, collectionId, bob);
+ const collectionId = await createCollectionExpectSuccess({mode: {type: 'NFT'}});
+ await addCollectionAdminExpectSuccess(alice, collectionId, bob.address);
await setChainLimitsExpectFailure(bob, limits);
});
-
+
it('Regular user cannot set chain limits', async () => {
await setChainLimitsExpectFailure(dave, limits);
});
tests/src/setCollectionLimits.test.tsdiffbeforeafterboth--- a/tests/src/setCollectionLimits.test.ts
+++ b/tests/src/setCollectionLimits.test.ts
@@ -4,19 +4,18 @@
//
// https://unique-network.readthedocs.io/en/latest/jsapi.html#setchainlimits
-import { ApiPromise, Keyring } from '@polkadot/api';
-import { IKeyringPair } from '@polkadot/types/types';
+import {ApiPromise, Keyring} from '@polkadot/api';
+import {IKeyringPair} from '@polkadot/types/types';
import chai from 'chai';
import chaiAsPromised from 'chai-as-promised';
import usingApi, {submitTransactionAsync, submitTransactionExpectFailAsync} from './substrate/substrate-api';
-import { ICollectionInterface } from './types';
import {
createCollectionExpectSuccess, getCreatedCollectionCount,
getCreateItemResult,
- getDetailedCollectionInfo,
setCollectionLimitsExpectFailure,
setCollectionLimitsExpectSuccess,
addCollectionAdminExpectSuccess,
+ queryCollectionExpectSuccess,
} from './util/helpers';
chai.use(chaiAsPromised);
@@ -28,15 +27,14 @@
const accountTokenOwnershipLimit = 0;
const sponsoredDataSize = 0;
-const sponsoredMintSize = 0;
-const sponsorTimeout = 1;
+const sponsorTransferTimeout = 1;
const tokenLimit = 10;
describe('setCollectionLimits positive', () => {
let tx;
before(async () => {
await usingApi(async () => {
- const keyring = new Keyring({ type: 'sr25519' });
+ const keyring = new Keyring({type: 'sr25519'});
alice = keyring.addFromUri('//Alice');
collectionIdForTesting = await createCollectionExpectSuccess({name: 'A', description: 'B', tokenPrefix: 'C', mode: {type: 'NFT'}});
});
@@ -47,9 +45,9 @@
collectionIdForTesting,
{
accountTokenOwnershipLimit: accountTokenOwnershipLimit,
- sponsoredMintSize: sponsoredDataSize,
+ sponsoredDataSize: sponsoredDataSize,
tokenLimit: tokenLimit,
- sponsorTimeout: sponsorTimeout,
+ sponsorTransferTimeout,
ownerCanTransfer: true,
ownerCanDestroy: true,
},
@@ -58,16 +56,16 @@
const result = getCreateItemResult(events);
// get collection limits defined previously
- const collectionInfo = await getDetailedCollectionInfo(api, collectionIdForTesting) as ICollectionInterface;
+ const collectionInfo = await queryCollectionExpectSuccess(api, collectionIdForTesting);
// tslint:disable-next-line:no-unused-expression
expect(result.success).to.be.true;
- expect(collectionInfo.limits.accountTokenOwnershipLimit).to.be.equal(accountTokenOwnershipLimit);
- expect(collectionInfo.limits.sponsoredDataSize).to.be.equal(sponsoredDataSize);
- expect(collectionInfo.limits.tokenLimit).to.be.equal(tokenLimit);
- expect(collectionInfo.limits.sponsorTimeout).to.be.equal(sponsorTimeout);
- expect(collectionInfo.limits.ownerCanTransfer).to.be.true;
- expect(collectionInfo.limits.ownerCanDestroy).to.be.true;
+ expect(collectionInfo.limits.accountTokenOwnershipLimit.unwrap().toNumber()).to.be.equal(accountTokenOwnershipLimit);
+ expect(collectionInfo.limits.sponsoredDataSize.unwrap().toNumber()).to.be.equal(sponsoredDataSize);
+ expect(collectionInfo.limits.tokenLimit.unwrap().toNumber()).to.be.equal(tokenLimit);
+ expect(collectionInfo.limits.sponsorTransferTimeout.unwrap().toNumber()).to.be.equal(sponsorTransferTimeout);
+ expect(collectionInfo.limits.ownerCanTransfer.unwrap().toJSON()).to.be.true;
+ expect(collectionInfo.limits.ownerCanDestroy.unwrap().toJSON()).to.be.true;
});
});
@@ -78,7 +76,7 @@
accountTokenOwnershipLimit: accountTokenOwnershipLimit,
sponsoredMintSize: sponsoredDataSize,
tokenLimit: tokenLimit,
- sponsorTimeout: sponsorTimeout,
+ sponsorTransferTimeout,
ownerCanTransfer: true,
ownerCanDestroy: true,
};
@@ -90,7 +88,9 @@
);
const events1 = await submitTransactionAsync(alice, tx1);
const result1 = getCreateItemResult(events1);
- const collectionInfo1 = await getDetailedCollectionInfo(api, collectionIdForTesting) as ICollectionInterface;
+ expect(result1.success).to.be.true;
+ const collectionInfo1 = await queryCollectionExpectSuccess(api, collectionIdForTesting);
+ expect(collectionInfo1.limits.tokenLimit.unwrap().toNumber()).to.be.equal(tokenLimit);
// The second time
const tx2 = api.tx.nft.setCollectionLimits(
@@ -99,13 +99,9 @@
);
const events2 = await submitTransactionAsync(alice, tx2);
const result2 = getCreateItemResult(events2);
- const collectionInfo2 = await getDetailedCollectionInfo(api, collectionIdForTesting) as ICollectionInterface;
-
- // tslint:disable-next-line:no-unused-expression
- expect(result1.success).to.be.true;
- expect(collectionInfo1.limits.tokenLimit).to.be.equal(tokenLimit);
expect(result2.success).to.be.true;
- expect(collectionInfo2.limits.tokenLimit).to.be.equal(tokenLimit);
+ const collectionInfo2 = await queryCollectionExpectSuccess(api, collectionIdForTesting);
+ expect(collectionInfo2.limits.tokenLimit.unwrap().toNumber()).to.be.equal(tokenLimit);
});
});
@@ -115,7 +111,7 @@
let tx;
before(async () => {
await usingApi(async () => {
- const keyring = new Keyring({ type: 'sr25519' });
+ const keyring = new Keyring({type: 'sr25519'});
alice = keyring.addFromUri('//Alice');
bob = keyring.addFromUri('//Bob');
collectionIdForTesting = await createCollectionExpectSuccess({name: 'A', description: 'B', tokenPrefix: 'C', mode: {type: 'NFT'}});
@@ -130,7 +126,7 @@
{
accountTokenOwnershipLimit,
sponsoredDataSize,
- sponsoredMintSize,
+ // sponsoredMintSize,
tokenLimit,
},
);
@@ -144,7 +140,7 @@
{
accountTokenOwnershipLimit,
sponsoredDataSize,
- sponsoredMintSize,
+ // sponsoredMintSize,
tokenLimit,
},
);
@@ -152,14 +148,14 @@
});
});
it('execute setCollectionLimits from admin collection', async () => {
- await addCollectionAdminExpectSuccess(alice, collectionIdForTesting, bob);
+ await addCollectionAdminExpectSuccess(alice, collectionIdForTesting, bob.address);
await usingApi(async (api: ApiPromise) => {
tx = api.tx.nft.setCollectionLimits(
collectionIdForTesting,
{
accountTokenOwnershipLimit,
sponsoredDataSize,
- sponsoredMintSize,
+ // sponsoredMintSize,
tokenLimit,
},
);
@@ -173,7 +169,7 @@
accountTokenOwnershipLimit: accountTokenOwnershipLimit,
sponsoredMintSize: sponsoredDataSize,
tokenLimit: tokenLimit,
- sponsorTimeout: sponsorTimeout,
+ sponsorTransferTimeout,
ownerCanTransfer: false,
ownerCanDestroy: true,
});
@@ -181,7 +177,7 @@
accountTokenOwnershipLimit: accountTokenOwnershipLimit,
sponsoredMintSize: sponsoredDataSize,
tokenLimit: tokenLimit,
- sponsorTimeout: sponsorTimeout,
+ sponsorTransferTimeout,
ownerCanTransfer: true,
ownerCanDestroy: true,
});
@@ -193,7 +189,7 @@
accountTokenOwnershipLimit: accountTokenOwnershipLimit,
sponsoredMintSize: sponsoredDataSize,
tokenLimit: tokenLimit,
- sponsorTimeout: sponsorTimeout,
+ sponsorTransferTimeout,
ownerCanTransfer: true,
ownerCanDestroy: false,
});
@@ -201,7 +197,7 @@
accountTokenOwnershipLimit: accountTokenOwnershipLimit,
sponsoredMintSize: sponsoredDataSize,
tokenLimit: tokenLimit,
- sponsorTimeout: sponsorTimeout,
+ sponsorTransferTimeout,
ownerCanTransfer: true,
ownerCanDestroy: true,
});
@@ -215,7 +211,7 @@
accountTokenOwnershipLimit: accountTokenOwnershipLimit,
sponsoredMintSize: sponsoredDataSize,
tokenLimit: tokenLimit,
- sponsorTimeout: sponsorTimeout,
+ sponsorTransferTimeout,
ownerCanTransfer: true,
ownerCanDestroy: true,
};
tests/src/setCollectionSponsor.test.tsdiffbeforeafterboth--- a/tests/src/setCollectionSponsor.test.ts
+++ b/tests/src/setCollectionSponsor.test.ts
@@ -5,15 +5,15 @@
import chai from 'chai';
import chaiAsPromised from 'chai-as-promised';
-import { default as usingApi } from './substrate/substrate-api';
-import { createCollectionExpectSuccess,
- setCollectionSponsorExpectSuccess,
- destroyCollectionExpectSuccess,
+import {default as usingApi} from './substrate/substrate-api';
+import {createCollectionExpectSuccess,
+ setCollectionSponsorExpectSuccess,
+ destroyCollectionExpectSuccess,
setCollectionSponsorExpectFailure,
addCollectionAdminExpectSuccess,
} from './util/helpers';
-import { Keyring } from '@polkadot/api';
-import { IKeyringPair } from '@polkadot/types/types';
+import {Keyring} from '@polkadot/api';
+import {IKeyringPair} from '@polkadot/types/types';
chai.use(chaiAsPromised);
@@ -25,7 +25,7 @@
before(async () => {
await usingApi(async () => {
- const keyring = new Keyring({ type: 'sr25519' });
+ const keyring = new Keyring({type: 'sr25519'});
alice = keyring.addFromUri('//Alice');
bob = keyring.addFromUri('//Bob');
});
@@ -36,11 +36,11 @@
await setCollectionSponsorExpectSuccess(collectionId, bob.address);
});
it('Set Fungible collection sponsor', async () => {
- const collectionId = await createCollectionExpectSuccess({ mode: {type: 'Fungible', decimalPoints: 0} });
+ const collectionId = await createCollectionExpectSuccess({mode: {type: 'Fungible', decimalPoints: 0}});
await setCollectionSponsorExpectSuccess(collectionId, bob.address);
});
it('Set ReFungible collection sponsor', async () => {
- const collectionId = await createCollectionExpectSuccess({ mode: {type: 'ReFungible'} });
+ const collectionId = await createCollectionExpectSuccess({mode: {type: 'ReFungible'}});
await setCollectionSponsorExpectSuccess(collectionId, bob.address);
});
@@ -52,7 +52,7 @@
it('Replace collection sponsor', async () => {
const collectionId = await createCollectionExpectSuccess();
- const keyring = new Keyring({ type: 'sr25519' });
+ const keyring = new Keyring({type: 'sr25519'});
const charlie = keyring.addFromUri('//Charlie');
await setCollectionSponsorExpectSuccess(collectionId, bob.address);
await setCollectionSponsorExpectSuccess(collectionId, charlie.address);
@@ -62,7 +62,7 @@
describe('(!negative test!) integration test: ext. setCollectionSponsor():', () => {
before(async () => {
await usingApi(async () => {
- const keyring = new Keyring({ type: 'sr25519' });
+ const keyring = new Keyring({type: 'sr25519'});
alice = keyring.addFromUri('//Alice');
bob = keyring.addFromUri('//Bob');
charlie = keyring.addFromUri('//Charlie');
@@ -77,7 +77,7 @@
// Find the collection that never existed
let collectionId = 0;
await usingApi(async (api) => {
- collectionId = parseInt((await api.query.nft.createdCollectionCount()).toString()) + 1;
+ collectionId = (await api.query.common.createdCollectionCount()).toNumber() + 1;
});
await setCollectionSponsorExpectFailure(collectionId, bob.address);
@@ -89,7 +89,7 @@
});
it('(!negative test!) Collection admin add sponsor', async () => {
const collectionId = await createCollectionExpectSuccess();
- await addCollectionAdminExpectSuccess(alice, collectionId, bob);
+ await addCollectionAdminExpectSuccess(alice, collectionId, bob.address);
await setCollectionSponsorExpectFailure(collectionId, charlie.address, '//Bob');
});
});
tests/src/setConstOnChainSchema.test.tsdiffbeforeafterboth--- a/tests/src/setConstOnChainSchema.test.ts
+++ b/tests/src/setConstOnChainSchema.test.ts
@@ -3,11 +3,11 @@
// file 'LICENSE', which is part of this source code package.
//
-import { Keyring } from '@polkadot/api';
-import { IKeyringPair } from '@polkadot/types/types';
+import {Keyring} from '@polkadot/api';
+import {IKeyringPair} from '@polkadot/types/types';
import chai from 'chai';
import chaiAsPromised from 'chai-as-promised';
-import { default as usingApi, submitTransactionAsync, submitTransactionExpectFailAsync } from './substrate/substrate-api';
+import {default as usingApi, submitTransactionAsync, submitTransactionExpectFailAsync} from './substrate/substrate-api';
import {
createCollectionExpectSuccess,
destroyCollectionExpectSuccess,
@@ -17,17 +17,17 @@
chai.use(chaiAsPromised);
const expect = chai.expect;
-let Alice: IKeyringPair;
-let Bob: IKeyringPair;
-let Shema: any;
+let alice: IKeyringPair;
+let bob: IKeyringPair;
+let shema: any;
let largeShema: any;
before(async () => {
await usingApi(async () => {
- const keyring = new Keyring({ type: 'sr25519' });
- Alice = keyring.addFromUri('//Alice');
- Bob = keyring.addFromUri('//Bob');
- Shema = '0x31';
+ const keyring = new Keyring({type: 'sr25519'});
+ alice = keyring.addFromUri('//Alice');
+ bob = keyring.addFromUri('//Bob');
+ shema = '0x31';
largeShema = new Array(4097).fill(0xff);
});
@@ -37,32 +37,31 @@
it('Run extrinsic with parameters of the collection id, set the scheme', async () => {
await usingApi(async (api) => {
const collectionId = await createCollectionExpectSuccess();
- const collection: any = (await api.query.nft.collectionById(collectionId)).toJSON();
- expect(collection.owner).to.be.eq(Alice.address);
- const setShema = api.tx.nft.setConstOnChainSchema(collectionId, Shema);
- await submitTransactionAsync(Alice, setShema);
+ const collection = (await api.query.common.collectionById(collectionId)).unwrap();
+ expect(collection.owner.toString()).to.be.eq(alice.address);
+ const setShema = api.tx.nft.setConstOnChainSchema(collectionId, shema);
+ await submitTransactionAsync(alice, setShema);
});
});
it('Collection admin can set the scheme', async () => {
await usingApi(async (api) => {
const collectionId = await createCollectionExpectSuccess();
- const collection: any = (await api.query.nft.collectionById(collectionId)).toJSON();
- expect(collection.owner).to.be.eq(Alice.address);
- await addCollectionAdminExpectSuccess(Alice, collectionId, Bob);
- const setShema = api.tx.nft.setConstOnChainSchema(collectionId, Shema);
- await submitTransactionAsync(Bob, setShema);
+ const collection = (await api.query.common.collectionById(collectionId)).unwrap();
+ expect(collection.owner.toString()).to.be.eq(alice.address);
+ await addCollectionAdminExpectSuccess(alice, collectionId, bob.address);
+ const setShema = api.tx.nft.setConstOnChainSchema(collectionId, shema);
+ await submitTransactionAsync(bob, setShema);
});
});
it('Checking collection data using the ConstOnChainSchema parameter', async () => {
await usingApi(async (api) => {
const collectionId = await createCollectionExpectSuccess();
- const setShema = api.tx.nft.setConstOnChainSchema(collectionId, Shema);
- await submitTransactionAsync(Alice, setShema);
- const collection: any = (await api.query.nft.collectionById(collectionId)).toJSON();
- expect(collection.constOnChainSchema.toString()).to.be.eq(Shema);
-
+ const setShema = api.tx.nft.setConstOnChainSchema(collectionId, shema);
+ await submitTransactionAsync(alice, setShema);
+ const collection = (await api.query.common.collectionById(collectionId)).unwrap();
+ expect(collection.constOnChainSchema.toString()).to.be.eq(shema);
});
});
});
@@ -72,9 +71,9 @@
it('Set a non-existent collection', async () => {
await usingApi(async (api) => {
// tslint:disable-next-line: radix
- const collectionId = parseInt((await api.query.nft.createdCollectionCount()).toString()) + 1;
- const setShema = api.tx.nft.setConstOnChainSchema(collectionId, Shema);
- await expect(submitTransactionExpectFailAsync(Alice, setShema)).to.be.rejected;
+ const collectionId = (await api.query.common.createdCollectionCount()).toNumber() + 1;
+ const setShema = api.tx.nft.setConstOnChainSchema(collectionId, shema);
+ await expect(submitTransactionExpectFailAsync(alice, setShema)).to.be.rejected;
});
});
@@ -82,8 +81,8 @@
await usingApi(async (api) => {
const collectionId = await createCollectionExpectSuccess();
await destroyCollectionExpectSuccess(collectionId);
- const setShema = api.tx.nft.setConstOnChainSchema(collectionId, Shema);
- await expect(submitTransactionExpectFailAsync(Alice, setShema)).to.be.rejected;
+ const setShema = api.tx.nft.setConstOnChainSchema(collectionId, shema);
+ await expect(submitTransactionExpectFailAsync(alice, setShema)).to.be.rejected;
});
});
@@ -91,17 +90,17 @@
await usingApi(async (api) => {
const collectionId = await createCollectionExpectSuccess();
const setShema = api.tx.nft.setConstOnChainSchema(collectionId, largeShema);
- await expect(submitTransactionExpectFailAsync(Alice, setShema)).to.be.rejected;
+ await expect(submitTransactionExpectFailAsync(alice, setShema)).to.be.rejected;
});
});
it('Execute method not on behalf of the collection owner', async () => {
await usingApi(async (api) => {
const collectionId = await createCollectionExpectSuccess();
- const collection: any = (await api.query.nft.collectionById(collectionId)).toJSON();
- expect(collection.owner).to.be.eq(Alice.address);
- const setShema = api.tx.nft.setConstOnChainSchema(collectionId, Shema);
- await expect(submitTransactionExpectFailAsync(Bob, setShema)).to.be.rejected;
+ const collection = (await api.query.common.collectionById(collectionId)).unwrap();
+ expect(collection.owner.toString()).to.be.eq(alice.address);
+ const setShema = api.tx.nft.setConstOnChainSchema(collectionId, shema);
+ await expect(submitTransactionExpectFailAsync(bob, setShema)).to.be.rejected;
});
});
tests/src/setContractSponsoringRateLimit.test.tsdiffbeforeafterboth--- a/tests/src/setContractSponsoringRateLimit.test.ts
+++ b/tests/src/setContractSponsoringRateLimit.test.ts
@@ -3,11 +3,11 @@
// file 'LICENSE', which is part of this source code package.
//
-import { IKeyringPair } from '@polkadot/types/types';
+import {IKeyringPair} from '@polkadot/types/types';
import privateKey from './substrate/privateKey';
import usingApi from './substrate/substrate-api';
import waitNewBlocks from './substrate/wait-new-blocks';
-import { deployFlipper, toggleFlipValueExpectFailure, toggleFlipValueExpectSuccess } from './util/contracthelpers';
+import {deployFlipper, toggleFlipValueExpectFailure, toggleFlipValueExpectSuccess} from './util/contracthelpers';
import {
enableContractSponsoringExpectSuccess,
findUnusedAddress,
tests/src/setMintPermission.test.tsdiffbeforeafterboth--- a/tests/src/setMintPermission.test.ts
+++ b/tests/src/setMintPermission.test.ts
@@ -3,7 +3,7 @@
// file 'LICENSE', which is part of this source code package.
//
-import { IKeyringPair } from '@polkadot/types/types';
+import {IKeyringPair} from '@polkadot/types/types';
import privateKey from './substrate/privateKey';
import usingApi from './substrate/substrate-api';
import {
@@ -32,7 +32,7 @@
it('ensure white-listed non-privileged address can mint tokens', async () => {
await usingApi(async () => {
- const collectionId = await createCollectionExpectSuccess({ mode: { type: 'NFT' } });
+ const collectionId = await createCollectionExpectSuccess({mode: {type: 'NFT'}});
await enableWhiteListExpectSuccess(alice, collectionId);
await setMintPermissionExpectSuccess(alice, collectionId, true);
await addToWhiteListExpectSuccess(alice, collectionId, bob.address);
@@ -43,7 +43,7 @@
it('can be enabled twice', async () => {
await usingApi(async () => {
- const collectionId = await createCollectionExpectSuccess({ mode: { type: 'NFT' } });
+ const collectionId = await createCollectionExpectSuccess({mode: {type: 'NFT'}});
await setMintPermissionExpectSuccess(alice, collectionId, true);
await setMintPermissionExpectSuccess(alice, collectionId, true);
});
@@ -51,7 +51,7 @@
it('can be disabled twice', async () => {
await usingApi(async () => {
- const collectionId = await createCollectionExpectSuccess({ mode: { type: 'NFT' } });
+ const collectionId = await createCollectionExpectSuccess({mode: {type: 'NFT'}});
await setMintPermissionExpectSuccess(alice, collectionId, true);
await setMintPermissionExpectSuccess(alice, collectionId, false);
await setMintPermissionExpectSuccess(alice, collectionId, false);
@@ -79,7 +79,7 @@
it('fails on removed collection', async () => {
await usingApi(async () => {
- const removedCollectionId = await createCollectionExpectSuccess({ mode: { type: 'NFT' } });
+ const removedCollectionId = await createCollectionExpectSuccess({mode: {type: 'NFT'}});
await destroyCollectionExpectSuccess(removedCollectionId);
await setMintPermissionExpectFailure(alice, removedCollectionId, true);
@@ -87,22 +87,22 @@
});
it('fails when not collection owner tries to set mint status', async () => {
- const collectionId = await createCollectionExpectSuccess({ mode: { type: 'NFT' } });
+ const collectionId = await createCollectionExpectSuccess({mode: {type: 'NFT'}});
await enableWhiteListExpectSuccess(alice, collectionId);
await setMintPermissionExpectFailure(bob, collectionId, true);
});
it('Collection admin fails on set', async () => {
await usingApi(async () => {
- const collectionId = await createCollectionExpectSuccess({ mode: { type: 'NFT' } });
- await addCollectionAdminExpectSuccess(alice, collectionId, bob);
+ const collectionId = await createCollectionExpectSuccess({mode: {type: 'NFT'}});
+ await addCollectionAdminExpectSuccess(alice, collectionId, bob.address);
await setMintPermissionExpectFailure(bob, collectionId, true);
});
});
it('ensure non-white-listed non-privileged address can\'t mint tokens', async () => {
await usingApi(async () => {
- const collectionId = await createCollectionExpectSuccess({ mode: { type: 'NFT' } });
+ const collectionId = await createCollectionExpectSuccess({mode: {type: 'NFT'}});
await enableWhiteListExpectSuccess(alice, collectionId);
await setMintPermissionExpectSuccess(alice, collectionId, true);
tests/src/setOffchainSchema.test.tsdiffbeforeafterboth--- a/tests/src/setOffchainSchema.test.ts
+++ b/tests/src/setOffchainSchema.test.ts
@@ -3,7 +3,7 @@
// file 'LICENSE', which is part of this source code package.
//
-import { IKeyringPair } from '@polkadot/types/types';
+import {IKeyringPair} from '@polkadot/types/types';
import chai from 'chai';
import chaiAsPromised from 'chai-as-promised';
import privateKey from './substrate/privateKey';
@@ -35,20 +35,24 @@
});
it('execute setOffchainSchema, verify data was set', async () => {
- const collectionId = await createCollectionExpectSuccess({ mode: { type: 'NFT' } });
- await setOffchainSchemaExpectSuccess(alice, collectionId, DATA);
- const collection = await queryCollectionExpectSuccess(collectionId);
+ await usingApi(async api => {
+ const collectionId = await createCollectionExpectSuccess({mode: {type: 'NFT'}});
+ await setOffchainSchemaExpectSuccess(alice, collectionId, DATA);
+ const collection = await queryCollectionExpectSuccess(api, collectionId);
- expect(collection.offchainSchema).to.be.equal('0x' + Buffer.from(DATA).toString('hex'));
+ expect(collection.offchainSchema).to.be.equal('0x' + Buffer.from(DATA).toString('hex'));
+ });
});
it('execute setOffchainSchema (collection admin), verify data was set', async () => {
- const collectionId = await createCollectionExpectSuccess({ mode: { type: 'NFT' } });
- await addCollectionAdminExpectSuccess(alice, collectionId, bob);
- await setOffchainSchemaExpectSuccess(bob, collectionId, DATA);
- const collection = await queryCollectionExpectSuccess(collectionId);
+ await usingApi(async api => {
+ const collectionId = await createCollectionExpectSuccess({mode: {type: 'NFT'}});
+ await addCollectionAdminExpectSuccess(alice, collectionId, bob.address);
+ await setOffchainSchemaExpectSuccess(bob, collectionId, DATA);
+ const collection = await queryCollectionExpectSuccess(api, collectionId);
- expect(collection.offchainSchema).to.be.equal('0x' + Buffer.from(DATA).toString('hex'));
+ expect(collection.offchainSchema).to.be.equal('0x' + Buffer.from(DATA).toString('hex'));
+ });
});
});
@@ -63,7 +67,7 @@
alice = privateKey('//Alice');
bob = privateKey('//Bob');
- validCollectionId = await createCollectionExpectSuccess({ mode: { type: 'NFT' } });
+ validCollectionId = await createCollectionExpectSuccess({mode: {type: 'NFT'}});
});
});
@@ -74,7 +78,7 @@
});
it('fails on destroyed collection id', async () => {
- const destroyedCollectionId = await createCollectionExpectSuccess({ mode: { type: 'NFT' } });
+ const destroyedCollectionId = await createCollectionExpectSuccess({mode: {type: 'NFT'}});
await destroyCollectionExpectSuccess(destroyedCollectionId);
await setOffchainSchemaExpectFailure(alice, destroyedCollectionId, DATA);
tests/src/setPublicAccessMode.test.tsdiffbeforeafterboth--- a/tests/src/setPublicAccessMode.test.ts
+++ b/tests/src/setPublicAccessMode.test.ts
@@ -4,8 +4,8 @@
//
// https://unique-network.readthedocs.io/en/latest/jsapi.html#setschemaversion
-import { ApiPromise } from '@polkadot/api';
-import { IKeyringPair } from '@polkadot/types/types';
+import {ApiPromise} from '@polkadot/api';
+import {IKeyringPair} from '@polkadot/types/types';
import chai from 'chai';
import chaiAsPromised from 'chai-as-promised';
import privateKey from './substrate/privateKey';
@@ -24,34 +24,34 @@
chai.use(chaiAsPromised);
const expect = chai.expect;
-let Alice: IKeyringPair;
-let Bob: IKeyringPair;
+let alice: IKeyringPair;
+let bob: IKeyringPair;
describe('Integration Test setPublicAccessMode(): ', () => {
before(async () => {
await usingApi(async () => {
- Alice = privateKey('//Alice');
- Bob = privateKey('//Bob');
+ alice = privateKey('//Alice');
+ bob = privateKey('//Bob');
});
});
it('Run extrinsic with collection id parameters, set the whitelist mode for the collection', async () => {
await usingApi(async () => {
const collectionId: number = await createCollectionExpectSuccess();
- await enableWhiteListExpectSuccess(Alice, collectionId);
- await enablePublicMintingExpectSuccess(Alice, collectionId);
- await addToWhiteListExpectSuccess(Alice, collectionId, Bob.address);
- await createItemExpectSuccess(Bob, collectionId, 'NFT', Bob.address);
+ await enableWhiteListExpectSuccess(alice, collectionId);
+ await enablePublicMintingExpectSuccess(alice, collectionId);
+ await addToWhiteListExpectSuccess(alice, collectionId, bob.address);
+ await createItemExpectSuccess(bob, collectionId, 'NFT', bob.address);
});
});
it('Whitelisted collection limits', async () => {
await usingApi(async (api: ApiPromise) => {
const collectionId = await createCollectionExpectSuccess();
- await enableWhiteListExpectSuccess(Alice, collectionId);
- await enablePublicMintingExpectSuccess(Alice, collectionId);
- const tx = api.tx.nft.createItem(collectionId, normalizeAccountId(Bob.address), 'NFT');
- await expect(submitTransactionExpectFailAsync(Bob, tx)).to.be.rejected;
+ await enableWhiteListExpectSuccess(alice, collectionId);
+ await enablePublicMintingExpectSuccess(alice, collectionId);
+ const tx = api.tx.nft.createItem(collectionId, normalizeAccountId(bob.address), 'NFT');
+ await expect(submitTransactionExpectFailAsync(bob, tx)).to.be.rejected;
});
});
});
@@ -60,9 +60,9 @@
it('Set a non-existent collection', async () => {
await usingApi(async (api: ApiPromise) => {
// tslint:disable-next-line: radix
- const collectionId = parseInt((await api.query.nft.createdCollectionCount()).toString()) + 1;
+ const collectionId = (await api.query.common.createdCollectionCount()).toNumber() + 1;
const tx = api.tx.nft.setPublicAccessMode(collectionId, 'WhiteList');
- await expect(submitTransactionExpectFailAsync(Alice, tx)).to.be.rejected;
+ await expect(submitTransactionExpectFailAsync(alice, tx)).to.be.rejected;
});
});
@@ -72,15 +72,15 @@
const collectionId = await createCollectionExpectSuccess();
await destroyCollectionExpectSuccess(collectionId);
const tx = api.tx.nft.setPublicAccessMode(collectionId, 'WhiteList');
- await expect(submitTransactionExpectFailAsync(Alice, tx)).to.be.rejected;
+ await expect(submitTransactionExpectFailAsync(alice, tx)).to.be.rejected;
});
});
it('Re-set the list mode already set in quantity', async () => {
await usingApi(async () => {
const collectionId: number = await createCollectionExpectSuccess();
- await enableWhiteListExpectSuccess(Alice, collectionId);
- await enableWhiteListExpectSuccess(Alice, collectionId);
+ await enableWhiteListExpectSuccess(alice, collectionId);
+ await enableWhiteListExpectSuccess(alice, collectionId);
});
});
@@ -89,7 +89,7 @@
// tslint:disable-next-line: no-bitwise
const collectionId = await createCollectionExpectSuccess();
const tx = api.tx.nft.setPublicAccessMode(collectionId, 'WhiteList');
- await expect(submitTransactionExpectFailAsync(Bob, tx)).to.be.rejected;
+ await expect(submitTransactionExpectFailAsync(bob, tx)).to.be.rejected;
});
});
});
@@ -97,17 +97,17 @@
describe('Negative Integration Test ext. collection admin setPublicAccessMode(): ', () => {
before(async () => {
await usingApi(async () => {
- Alice = privateKey('//Alice');
- Bob = privateKey('//Bob');
+ alice = privateKey('//Alice');
+ bob = privateKey('//Bob');
});
});
it('setPublicAccessMode by collection admin', async () => {
await usingApi(async (api: ApiPromise) => {
// tslint:disable-next-line: no-bitwise
const collectionId = await createCollectionExpectSuccess();
- await addCollectionAdminExpectSuccess(Alice, collectionId, Bob);
+ await addCollectionAdminExpectSuccess(alice, collectionId, bob.address);
const tx = api.tx.nft.setPublicAccessMode(collectionId, 'WhiteList');
- await expect(submitTransactionExpectFailAsync(Bob, tx)).to.be.rejected;
+ await expect(submitTransactionExpectFailAsync(bob, tx)).to.be.rejected;
});
});
});
tests/src/setSchemaVersion.test.tsdiffbeforeafterboth--- a/tests/src/setSchemaVersion.test.ts
+++ b/tests/src/setSchemaVersion.test.ts
@@ -4,12 +4,11 @@
//
// https://unique-network.readthedocs.io/en/latest/jsapi.html#setschemaversion
-import { ApiPromise, Keyring } from '@polkadot/api';
-import { IKeyringPair } from '@polkadot/types/types';
+import {ApiPromise, Keyring} from '@polkadot/api';
+import {IKeyringPair} from '@polkadot/types/types';
import chai from 'chai';
import chaiAsPromised from 'chai-as-promised';
import usingApi, {submitTransactionAsync, submitTransactionExpectFailAsync} from './substrate/substrate-api';
-import { ICollectionInterface } from './types';
import {
createCollectionExpectSuccess,
destroyCollectionExpectSuccess,
@@ -25,42 +24,27 @@
let alice: IKeyringPair;
let bob: IKeyringPair;
let charlie: IKeyringPair;
-let collectionIdForTesting: number;
/*
1. We create collection.
2. Save just created collection id.
3. Use this id for setSchemaVersion.
*/
-
-describe('hooks', () => {
- before(async () => {
- await usingApi(async () => {
- const keyring = new Keyring({ type: 'sr25519' });
- alice = keyring.addFromUri('//Alice');
- });
- });
- it('choose or create collection for testing', async () => {
- await usingApi(async () => {
- collectionIdForTesting = await createCollectionExpectSuccess({name: 'A', description: 'B', tokenPrefix: 'C', mode: {type: 'NFT'}});
- });
- });
-});
-
describe('setSchemaVersion positive', () => {
let tx;
before(async () => {
await usingApi(async () => {
- const keyring = new Keyring({ type: 'sr25519' });
+ const keyring = new Keyring({type: 'sr25519'});
alice = keyring.addFromUri('//Alice');
});
});
it('execute setSchemaVersion with image url and unique ', async () => {
await usingApi(async (api: ApiPromise) => {
+ const collectionIdForTesting = await createCollectionExpectSuccess({name: 'A', description: 'B', tokenPrefix: 'C', mode: {type: 'NFT'}});
tx = api.tx.nft.setSchemaVersion(collectionIdForTesting, 'Unique');
const events = await submitTransactionAsync(alice, tx);
const result = getCreateItemResult(events);
- const collectionInfo = await getDetailedCollectionInfo(api, collectionIdForTesting) as ICollectionInterface;
+ const collectionInfo = await getDetailedCollectionInfo(api, collectionIdForTesting);
// tslint:disable-next-line:no-unused-expression
expect(result.success).to.be.true;
// tslint:disable-next-line:no-unused-expression
@@ -73,12 +57,15 @@
describe('Collection admin setSchemaVersion positive', () => {
let tx;
+ let collectionIdForTesting: any;
+
before(async () => {
await usingApi(async () => {
- const keyring = new Keyring({ type: 'sr25519' });
+ const keyring = new Keyring({type: 'sr25519'});
alice = keyring.addFromUri('//Alice');
bob = keyring.addFromUri('//Bob');
- await addCollectionAdminExpectSuccess(alice, collectionIdForTesting, bob);
+ collectionIdForTesting = await createCollectionExpectSuccess({name: 'A', description: 'B', tokenPrefix: 'C', mode: {type: 'NFT'}});
+ await addCollectionAdminExpectSuccess(alice, collectionIdForTesting, bob.address);
});
});
it('execute setSchemaVersion with image url and unique ', async () => {
@@ -86,7 +73,7 @@
tx = api.tx.nft.setSchemaVersion(collectionIdForTesting, 'Unique');
const events = await submitTransactionAsync(bob, tx);
const result = getCreateItemResult(events);
- const collectionInfo = await getDetailedCollectionInfo(api, collectionIdForTesting) as ICollectionInterface;
+ const collectionInfo = await getDetailedCollectionInfo(api, collectionIdForTesting);
// tslint:disable-next-line:no-unused-expression
expect(result.success).to.be.true;
// tslint:disable-next-line:no-unused-expression
@@ -101,7 +88,7 @@
tx = api.tx.nft.setSchemaVersion(collectionIdForTesting, 'ImageURL');
const events = await submitTransactionAsync(bob, tx);
const result = getCreateItemResult(events);
- const collectionInfo = await getDetailedCollectionInfo(api, collectionIdForTesting) as ICollectionInterface;
+ const collectionInfo = await getDetailedCollectionInfo(api, collectionIdForTesting);
// tslint:disable-next-line:no-unused-expression
expect(result.success).to.be.true;
// tslint:disable-next-line:no-unused-expression
@@ -114,11 +101,13 @@
describe('setSchemaVersion negative', () => {
let tx;
+ let collectionIdForTesting: any;
before(async () => {
await usingApi(async () => {
- const keyring = new Keyring({ type: 'sr25519' });
+ const keyring = new Keyring({type: 'sr25519'});
alice = keyring.addFromUri('//Alice');
charlie = keyring.addFromUri('//Charlie');
+ collectionIdForTesting = await createCollectionExpectSuccess({name: 'A', description: 'B', tokenPrefix: 'C', mode: {type: 'NFT'}});
});
});
it('execute setSchemaVersion for not exists collection', async () => {
@@ -127,21 +116,6 @@
const nonExistedCollectionId = collectionCount + 1;
tx = api.tx.nft.setSchemaVersion(nonExistedCollectionId, 'ImageURL');
await expect(submitTransactionExpectFailAsync(alice, tx)).to.be.rejected;
- });
- });
- it('execute setSchemaVersion with not correct schema version', async () => {
- await usingApi(async (api: ApiPromise) => {
- const consoleError = console.error;
- console.error = () => {};
- try {
- tx = api.tx.nft.setSchemaVersion(collectionIdForTesting, 'Test');
- await submitTransactionAsync(alice, tx);
- } catch (e) {
- // tslint:disable-next-line:no-unused-expression
- expect(e).to.be.exist;
- } finally {
- console.error = consoleError;
- }
});
});
it('execute setSchemaVersion for deleted collection', async () => {
tests/src/setVariableMetaData.test.tsdiffbeforeafterboth--- a/tests/src/setVariableMetaData.test.ts
+++ b/tests/src/setVariableMetaData.test.ts
@@ -3,7 +3,7 @@
// file 'LICENSE', which is part of this source code package.
//
-import { IKeyringPair } from '@polkadot/types/types';
+import {IKeyringPair} from '@polkadot/types/types';
import chai from 'chai';
import chaiAsPromised from 'chai-as-promised';
import privateKey from './substrate/privateKey';
@@ -18,6 +18,7 @@
setVariableMetaDataExpectSuccess,
addCollectionAdminExpectSuccess,
setMetadataUpdatePermissionFlagExpectSuccess,
+ getVariableMetadata,
} from './util/helpers';
chai.use(chaiAsPromised);
@@ -32,7 +33,7 @@
before(async () => {
await usingApi(async () => {
alice = privateKey('//Alice');
- collectionId = await createCollectionExpectSuccess({ mode: { type: 'NFT' } });
+ collectionId = await createCollectionExpectSuccess({mode: {type: 'NFT'}});
tokenId = await createItemExpectSuccess(alice, collectionId, 'NFT');
});
});
@@ -43,9 +44,7 @@
it('verify data was set', async () => {
await usingApi(async api => {
- const item: any = (await api.query.nft.nftItemList(collectionId, tokenId) as any).unwrap();
-
- expect(Array.from(item.variableData)).to.deep.equal(Array.from(data));
+ expect(await getVariableMetadata(api, collectionId, tokenId)).to.deep.equal(data);
});
});
});
@@ -61,10 +60,10 @@
await usingApi(async () => {
alice = privateKey('//Alice');
bob = privateKey('//Bob');
- collectionId = await createCollectionExpectSuccess({ mode: { type: 'NFT' } });
+ collectionId = await createCollectionExpectSuccess({mode: {type: 'NFT'}});
tokenId = await createItemExpectSuccess(alice, collectionId, 'NFT');
await setMetadataUpdatePermissionFlagExpectSuccess(alice, collectionId, 'Admin');
- await addCollectionAdminExpectSuccess(alice, collectionId, bob);
+ await addCollectionAdminExpectSuccess(alice, collectionId, bob.address);
});
});
@@ -74,9 +73,7 @@
it('verify data was set', async () => {
await usingApi(async api => {
- const item: any = (await api.query.nft.nftItemList(collectionId, tokenId) as any).unwrap();
-
- expect(Array.from(item.variableData)).to.deep.equal(Array.from(data));
+ expect(await getVariableMetadata(api, collectionId, tokenId)).to.deep.equal(data);
});
});
});
@@ -95,7 +92,7 @@
alice = privateKey('//Alice');
bob = privateKey('//Bob');
- validCollectionId = await createCollectionExpectSuccess({ mode: { type: 'NFT' } });
+ validCollectionId = await createCollectionExpectSuccess({mode: {type: 'NFT'}});
validTokenId = await createItemExpectSuccess(alice, validCollectionId, 'NFT');
});
});
@@ -107,14 +104,14 @@
});
});
it('fails on removed collection id', async () => {
- const removedCollectionId = await createCollectionExpectSuccess({ mode: { type: 'NFT' } });
+ const removedCollectionId = await createCollectionExpectSuccess({mode: {type: 'NFT'}});
const removedCollectionTokenId = await createItemExpectSuccess(alice, removedCollectionId, 'NFT');
await destroyCollectionExpectSuccess(removedCollectionId);
await setVariableMetaDataExpectFailure(alice, removedCollectionId, removedCollectionTokenId, data);
});
it('fails on removed token', async () => {
- const removedTokenCollectionId = await createCollectionExpectSuccess({ mode: { type: 'NFT' } });
+ const removedTokenCollectionId = await createCollectionExpectSuccess({mode: {type: 'NFT'}});
const removedTokenId = await createItemExpectSuccess(alice, removedTokenCollectionId, 'NFT');
await burnItemExpectSuccess(alice, removedTokenCollectionId, removedTokenId);
@@ -131,7 +128,7 @@
await setVariableMetaDataExpectFailure(alice, validCollectionId, validTokenId, tooLongData);
});
it('fails on fungible token', async () => {
- const fungibleCollectionId = await createCollectionExpectSuccess({ mode: { type: 'Fungible', decimalPoints: 0 } });
+ const fungibleCollectionId = await createCollectionExpectSuccess({mode: {type: 'Fungible', decimalPoints: 0}});
const fungibleTokenId = await createItemExpectSuccess(alice, fungibleCollectionId, 'Fungible');
await setVariableMetaDataExpectFailure(alice, fungibleCollectionId, fungibleTokenId, data);
tests/src/setVariableMetadataSponsoringRateLimit.test.tsdiffbeforeafterboth--- a/tests/src/setVariableMetadataSponsoringRateLimit.test.ts
+++ b/tests/src/setVariableMetadataSponsoringRateLimit.test.ts
@@ -3,7 +3,7 @@
// file 'LICENSE', which is part of this source code package.
//
-import { IKeyringPair } from '@polkadot/types/types';
+import {IKeyringPair} from '@polkadot/types/types';
import privateKey from './substrate/privateKey';
import usingApi from './substrate/substrate-api';
import {
tests/src/setVariableOnChainSchema.test.tsdiffbeforeafterboth--- a/tests/src/setVariableOnChainSchema.test.ts
+++ b/tests/src/setVariableOnChainSchema.test.ts
@@ -3,11 +3,11 @@
// file 'LICENSE', which is part of this source code package.
//
-import { Keyring } from '@polkadot/api';
-import { IKeyringPair } from '@polkadot/types/types';
+import {Keyring} from '@polkadot/api';
+import {IKeyringPair} from '@polkadot/types/types';
import chai from 'chai';
import chaiAsPromised from 'chai-as-promised';
-import { default as usingApi, submitTransactionAsync, submitTransactionExpectFailAsync } from './substrate/substrate-api';
+import {default as usingApi, submitTransactionAsync, submitTransactionExpectFailAsync} from './substrate/substrate-api';
import {
createCollectionExpectSuccess,
destroyCollectionExpectSuccess,
@@ -17,17 +17,17 @@
chai.use(chaiAsPromised);
const expect = chai.expect;
-let Alice: IKeyringPair;
-let Bob: IKeyringPair;
-let Schema: any;
+let alice: IKeyringPair;
+let bob: IKeyringPair;
+let schema: any;
let largeSchema: any;
before(async () => {
await usingApi(async () => {
- const keyring = new Keyring({ type: 'sr25519' });
- Alice = keyring.addFromUri('//Alice');
- Bob = keyring.addFromUri('//Bob');
- Schema = '0x31';
+ const keyring = new Keyring({type: 'sr25519'});
+ alice = keyring.addFromUri('//Alice');
+ bob = keyring.addFromUri('//Bob');
+ schema = '0x31';
largeSchema = new Array(4097).fill(0xff);
});
@@ -37,20 +37,20 @@
it('Run extrinsic with parameters of the collection id, set the scheme', async () => {
await usingApi(async (api) => {
const collectionId = await createCollectionExpectSuccess();
- const collection: any = (await api.query.nft.collectionById(collectionId)).toJSON();
- expect(collection.owner).to.be.eq(Alice.address);
- const setSchema = api.tx.nft.setVariableOnChainSchema(collectionId, Schema);
- await submitTransactionAsync(Alice, setSchema);
+ const collection = (await api.query.common.collectionById(collectionId)).unwrap();
+ expect(collection.owner.toString()).to.be.eq(alice.address);
+ const setSchema = api.tx.nft.setVariableOnChainSchema(collectionId, schema);
+ await submitTransactionAsync(alice, setSchema);
});
});
it('Checking collection data using the setVariableOnChainSchema parameter', async () => {
await usingApi(async (api) => {
const collectionId = await createCollectionExpectSuccess();
- const setSchema = api.tx.nft.setVariableOnChainSchema(collectionId, Schema);
- await submitTransactionAsync(Alice, setSchema);
- const collection: any = (await api.query.nft.collectionById(collectionId)).toJSON();
- expect(collection.variableOnChainSchema.toString()).to.be.eq(Schema);
+ const setSchema = api.tx.nft.setVariableOnChainSchema(collectionId, schema);
+ await submitTransactionAsync(alice, setSchema);
+ const collection = (await api.query.common.collectionById(collectionId)).unwrap();
+ expect(collection.variableOnChainSchema.toString()).to.be.eq(schema);
});
});
@@ -61,22 +61,22 @@
it('Run extrinsic with parameters of the collection id, set the scheme', async () => {
await usingApi(async (api) => {
const collectionId = await createCollectionExpectSuccess();
- const collection: any = (await api.query.nft.collectionById(collectionId)).toJSON();
- expect(collection.owner).to.be.eq(Alice.address);
- await addCollectionAdminExpectSuccess(Alice, collectionId, Bob);
- const setSchema = api.tx.nft.setVariableOnChainSchema(collectionId, Schema);
- await submitTransactionAsync(Bob, setSchema);
+ const collection = (await api.query.common.collectionById(collectionId)).unwrap();
+ expect(collection.owner.toString()).to.be.eq(alice.address);
+ await addCollectionAdminExpectSuccess(alice, collectionId, bob.address);
+ const setSchema = api.tx.nft.setVariableOnChainSchema(collectionId, schema);
+ await submitTransactionAsync(bob, setSchema);
});
});
it('Checking collection data using the setVariableOnChainSchema parameter', async () => {
await usingApi(async (api) => {
const collectionId = await createCollectionExpectSuccess();
- await addCollectionAdminExpectSuccess(Alice, collectionId, Bob);
- const setSchema = api.tx.nft.setVariableOnChainSchema(collectionId, Schema);
- await submitTransactionAsync(Bob, setSchema);
- const collection: any = (await api.query.nft.collectionById(collectionId)).toJSON();
- expect(collection.variableOnChainSchema.toString()).to.be.eq(Schema);
+ await addCollectionAdminExpectSuccess(alice, collectionId, bob.address);
+ const setSchema = api.tx.nft.setVariableOnChainSchema(collectionId, schema);
+ await submitTransactionAsync(bob, setSchema);
+ const collection = (await api.query.common.collectionById(collectionId)).unwrap();
+ expect(collection.variableOnChainSchema.toString()).to.be.eq(schema);
});
});
@@ -87,9 +87,9 @@
it('Set a non-existent collection', async () => {
await usingApi(async (api) => {
// tslint:disable-next-line: radix
- const collectionId = parseInt((await api.query.nft.createdCollectionCount()).toString()) + 1;
- const setSchema = api.tx.nft.setVariableOnChainSchema(collectionId, Schema);
- await expect(submitTransactionExpectFailAsync(Alice, setSchema)).to.be.rejected;
+ const collectionId = (await api.query.common.createdCollectionCount()).toNumber() + 1;
+ const setSchema = api.tx.nft.setVariableOnChainSchema(collectionId, schema);
+ await expect(submitTransactionExpectFailAsync(alice, setSchema)).to.be.rejected;
});
});
@@ -97,8 +97,8 @@
await usingApi(async (api) => {
const collectionId = await createCollectionExpectSuccess();
await destroyCollectionExpectSuccess(collectionId);
- const setSchema = api.tx.nft.setVariableOnChainSchema(collectionId, Schema);
- await expect(submitTransactionExpectFailAsync(Alice, setSchema)).to.be.rejected;
+ const setSchema = api.tx.nft.setVariableOnChainSchema(collectionId, schema);
+ await expect(submitTransactionExpectFailAsync(alice, setSchema)).to.be.rejected;
});
});
@@ -106,17 +106,17 @@
await usingApi(async (api) => {
const collectionId = await createCollectionExpectSuccess();
const setSchema = api.tx.nft.setVariableOnChainSchema(collectionId, largeSchema);
- await expect(submitTransactionExpectFailAsync(Alice, setSchema)).to.be.rejected;
+ await expect(submitTransactionExpectFailAsync(alice, setSchema)).to.be.rejected;
});
});
it('Execute method not on behalf of the collection owner', async () => {
await usingApi(async (api) => {
const collectionId = await createCollectionExpectSuccess();
- const collection: any = (await api.query.nft.collectionById(collectionId)).toJSON();
- expect(collection.owner).to.be.eq(Alice.address);
- const setSchema = api.tx.nft.setVariableOnChainSchema(collectionId, Schema);
- await expect(submitTransactionExpectFailAsync(Bob, setSchema)).to.be.rejected;
+ const collection = (await api.query.common.collectionById(collectionId)).unwrap();
+ expect(collection.owner.toString()).to.be.eq(alice.address);
+ const setSchema = api.tx.nft.setVariableOnChainSchema(collectionId, schema);
+ await expect(submitTransactionExpectFailAsync(bob, setSchema)).to.be.rejected;
});
});
tests/src/substrate/get-balance.tsdiffbeforeafterboth--- a/tests/src/substrate/get-balance.ts
+++ b/tests/src/substrate/get-balance.ts
@@ -3,13 +3,13 @@
// file 'LICENSE', which is part of this source code package.
//
-import { ApiPromise } from '@polkadot/api';
+import {ApiPromise} from '@polkadot/api';
import {AccountInfo} from '@polkadot/types/interfaces/system';
import promisifySubstrate from './promisify-substrate';
-import { IKeyringPair } from '@polkadot/types/types';
-import { submitTransactionAsync } from './substrate-api';
-import { getGenericResult } from '../util/helpers';
-import { expect } from 'chai';
+import {IKeyringPair} from '@polkadot/types/types';
+import {submitTransactionAsync} from './substrate-api';
+import {getGenericResult} from '../util/helpers';
+import {expect} from 'chai';
export default async function getBalance(api: ApiPromise, accounts: string[]): Promise<Array<bigint>> {
const balance = promisifySubstrate(api, (acc: string[]) => api.query.system.account.multi(acc));
@@ -26,4 +26,4 @@
const events = await submitTransactionAsync(from, tx);
const result = getGenericResult(events);
expect(result.success).to.be.true;
-}
\ No newline at end of file
+}
tests/src/substrate/privateKey.tsdiffbeforeafterboth--- a/tests/src/substrate/privateKey.ts
+++ b/tests/src/substrate/privateKey.ts
@@ -3,11 +3,11 @@
// file 'LICENSE', which is part of this source code package.
//
-import { Keyring } from '@polkadot/api';
-import { IKeyringPair } from '@polkadot/types/types';
+import {Keyring} from '@polkadot/api';
+import {IKeyringPair} from '@polkadot/types/types';
export default function privateKey(account: string): IKeyringPair {
- const keyring = new Keyring({ type: 'sr25519' });
-
+ const keyring = new Keyring({type: 'sr25519'});
+
return keyring.addFromUri(account);
-}
\ No newline at end of file
+}
tests/src/substrate/promisify-substrate.tsdiffbeforeafterboth--- a/tests/src/substrate/promisify-substrate.ts
+++ b/tests/src/substrate/promisify-substrate.ts
@@ -3,7 +3,7 @@
// file 'LICENSE', which is part of this source code package.
//
-import { ApiPromise } from '@polkadot/api';
+import {ApiPromise} from '@polkadot/api';
type PromiseType<T> = T extends PromiseLike<infer TInner> ? TInner : T;
@@ -25,7 +25,7 @@
reject && reject(error);
cleanup();
};
-
+
api.on('disconnected', fail);
api.on('error', fail);
tests/src/substrate/rpc_defs.jsondiffbeforeafterboth--- a/tests/src/substrate/rpc_defs.json
+++ /dev/null
@@ -1,76 +0,0 @@
-{
- "nft": {
- "accountBalance": {
- "description": "Get amount of different user tokens",
- "params": [
- {
- "name": "collectionId",
- "type": "CollectionId"
- },
- {
- "name": "account",
- "type": "CrossAccountId"
- },
- {
- "isOptional": true,
- "name": "at",
- "type": "Hash"
- }
- ],
- "type": "u32"
- },
- "adminlist": {
- "description": "Get admin list",
- "params": [
- {
- "name": "collectionId",
- "type": "CollectionId"
- },
- {
- "isOptional": true,
- "name": "at",
- "type": "Hash"
- }
- ],
- "type": "Vec<AccountId>"
- },
- "balance": {
- "description": "Get amount of specific account token",
- "params": [
- {
- "name": "collectionId",
- "type": "CollectionId"
- },
- {
- "name": "account",
- "type": "CrossAccountId"
- },
- {
- "name": "tokenId",
- "type": "TokenId"
- },
- {
- "isOptional": true,
- "name": "at",
- "type": "Hash"
- }
- ],
- "type": "u128"
- },
- "lastTokenId": {
- "description": "Get last token id",
- "params": [
- {
- "name": "collectionId",
- "type": "CollectionId"
- },
- {
- "isOptional": true,
- "name": "at",
- "type": "Hash"
- }
- ],
- "type": "TokenId"
- }
- }
-}
tests/src/substrate/substrate-api.tsdiffbeforeafterboth--- a/tests/src/substrate/substrate-api.ts
+++ b/tests/src/substrate/substrate-api.ts
@@ -3,14 +3,16 @@
// file 'LICENSE', which is part of this source code package.
//
-import { WsProvider, ApiPromise } from '@polkadot/api';
-import { EventRecord } from '@polkadot/types/interfaces/system/types';
-import { ExtrinsicStatus } from '@polkadot/types/interfaces/author/types';
-import { IKeyringPair } from '@polkadot/types/types';
+import {WsProvider, ApiPromise} from '@polkadot/api';
+import {EventRecord} from '@polkadot/types/interfaces/system/types';
+import {ExtrinsicStatus} from '@polkadot/types/interfaces/author/types';
+import {IKeyringPair} from '@polkadot/types/types';
import config from '../config';
import promisifySubstrate from './promisify-substrate';
-import { ApiOptions, SubmittableExtrinsic, ApiTypes } from '@polkadot/api/types';
+import {ApiOptions, SubmittableExtrinsic, ApiTypes} from '@polkadot/api/types';
+import * as defs from '../interfaces/definitions';
+
function defaultApiOptions(): ApiOptions {
const wsProvider = new WsProvider(config.substrateUrl);
@@ -21,6 +23,9 @@
payload: {},
},
},
+ rpc: {
+ nft: defs.nft.rpc,
+ },
};
}
@@ -35,20 +40,19 @@
const consoleLog = console.log;
const consoleWarn = console.warn;
- const outFn = (message: string) => {
- if (typeof message !== 'string') {
- consoleErr(message);
- return;
+ const outFn = (printer: any) => (...args: any[]) => {
+ for (const arg of args) {
+ if (typeof arg !== 'string')
+ continue;
+ if (arg.includes('1000:: Normal connection closure' || arg === 'Normal connection closure'))
+ return;
}
- if (!message.includes('StorageChangeSet:: WebSocket is not connected') &&
- !message.includes('2021-') &&
- !message.includes('StorageChangeSet:: Normal connection closure'))
- consoleErr(message);
+ printer(...args);
};
- console.error = outFn;
- console.log = outFn;
- console.warn = outFn;
+ console.error = outFn(consoleErr.bind(console));
+ console.log = outFn(consoleLog.bind(console));
+ console.warn = outFn(consoleWarn.bind(console));
try {
await promisifySubstrate(api, async () => {
@@ -96,7 +100,7 @@
/* eslint no-async-promise-executor: "off" */
return new Promise(async (resolve, reject) => {
try {
- await transaction.signAndSend(sender, ({ events = [], status }) => {
+ await transaction.signAndSend(sender, ({events = [], status}) => {
const transactionStatus = getTransactionStatus(events, status);
if (transactionStatus === TransactionStatus.Success) {
@@ -114,8 +118,6 @@
}
export function submitTransactionExpectFailAsync(sender: IKeyringPair, transaction: SubmittableExtrinsic<ApiTypes>): Promise<EventRecord[]> {
- const consoleError = console.error;
- const consoleLog = console.log;
console.error = () => {};
console.log = () => {};
@@ -124,19 +126,15 @@
const resolve = (rec: EventRecord[]) => {
setTimeout(() => {
res(rec);
- console.error = consoleError;
- console.log = consoleLog;
});
};
const reject = (errror: any) => {
setTimeout(() => {
rej(errror);
- console.error = consoleError;
- console.log = consoleLog;
});
};
try {
- await transaction.signAndSend(sender, ({ events = [], status }) => {
+ await transaction.signAndSend(sender, ({events = [], status}) => {
const transactionStatus = getTransactionStatus(events, status);
// console.log('transactionStatus', transactionStatus, 'events', events);
tests/src/substrate/wait-new-blocks.tsdiffbeforeafterboth--- a/tests/src/substrate/wait-new-blocks.ts
+++ b/tests/src/substrate/wait-new-blocks.ts
@@ -3,12 +3,12 @@
// file 'LICENSE', which is part of this source code package.
//
-import { ApiPromise } from '@polkadot/api';
+import {ApiPromise} from '@polkadot/api';
/* eslint no-async-promise-executor: "off" */
export default function waitNewBlocks(api: ApiPromise, blocksCount = 1): Promise<void> {
const promise = new Promise<void>(async (resolve) => {
-
+
const unsubscribe = await api.rpc.chain.subscribeNewHeads(() => {
if (blocksCount > 0) {
blocksCount--;
@@ -20,4 +20,4 @@
});
return promise;
-}
\ No newline at end of file
+}
tests/src/toggleContractWhiteList.test.tsdiffbeforeafterboth--- a/tests/src/toggleContractWhiteList.test.ts
+++ b/tests/src/toggleContractWhiteList.test.ts
@@ -5,7 +5,7 @@
import chai from 'chai';
import chaiAsPromised from 'chai-as-promised';
-import usingApi, { submitTransactionAsync, submitTransactionExpectFailAsync } from './substrate/substrate-api';
+import usingApi, {submitTransactionAsync, submitTransactionExpectFailAsync} from './substrate/substrate-api';
import privateKey from './substrate/privateKey';
import {
deployFlipper,
tests/src/transfer.nload.tsdiffbeforeafterboth--- a/tests/src/transfer.nload.ts
+++ b/tests/src/transfer.nload.ts
@@ -3,12 +3,12 @@
// file 'LICENSE', which is part of this source code package.
//
-import { ApiPromise } from '@polkadot/api';
-import { IKeyringPair } from '@polkadot/types/types';
+import {ApiPromise} from '@polkadot/api';
+import {IKeyringPair} from '@polkadot/types/types';
import privateKey from './substrate/privateKey';
-import usingApi, { submitTransactionAsync } from './substrate/substrate-api';
+import usingApi, {submitTransactionAsync} from './substrate/substrate-api';
import waitNewBlocks from './substrate/wait-new-blocks';
-import { findUnusedAddresses } from './util/helpers';
+import {findUnusedAddresses} from './util/helpers';
import * as cluster from 'cluster';
import os from 'os';
@@ -115,4 +115,4 @@
flushCounterToMaster();
}, 100);
interval.unref();
-}
\ No newline at end of file
+}
tests/src/transfer.test.tsdiffbeforeafterboth--- a/tests/src/transfer.test.ts
+++ b/tests/src/transfer.test.ts
@@ -3,13 +3,13 @@
// file 'LICENSE', which is part of this source code package.
//
-import { ApiPromise } from '@polkadot/api';
-import { IKeyringPair } from '@polkadot/types/types';
-import { expect } from 'chai';
-import { alicesPublicKey, bobsPublicKey } from './accounts';
+import {ApiPromise} from '@polkadot/api';
+import {IKeyringPair} from '@polkadot/types/types';
+import {expect} from 'chai';
+import {alicesPublicKey, bobsPublicKey} from './accounts';
import getBalance from './substrate/get-balance';
import privateKey from './substrate/privateKey';
-import { default as usingApi, submitTransactionAsync } from './substrate/substrate-api';
+import {default as usingApi, submitTransactionAsync} from './substrate/substrate-api';
import {
burnItemExpectSuccess, createCollectionExpectSuccess, createItemExpectSuccess,
destroyCollectionExpectSuccess,
@@ -21,9 +21,9 @@
addCollectionAdminExpectSuccess,
} from './util/helpers';
-let Alice: IKeyringPair;
-let Bob: IKeyringPair;
-let Charlie: IKeyringPair;
+let alice: IKeyringPair;
+let bob: IKeyringPair;
+let charlie: IKeyringPair;
describe('Integration Test Transfer(recipient, collection_id, item_id, value)', () => {
it('Balance transfers and check balance', async () => {
@@ -66,25 +66,25 @@
it('User can transfer owned token', async () => {
await usingApi(async () => {
- const Alice = privateKey('//Alice');
- const Bob = privateKey('//Bob');
+ const alice = privateKey('//Alice');
+ const bob = privateKey('//Bob');
// nft
const nftCollectionId = await createCollectionExpectSuccess();
- const newNftTokenId = await createItemExpectSuccess(Alice, nftCollectionId, 'NFT');
- await transferExpectSuccess(nftCollectionId, newNftTokenId, Alice, Bob, 1, 'NFT');
+ const newNftTokenId = await createItemExpectSuccess(alice, nftCollectionId, 'NFT');
+ await transferExpectSuccess(nftCollectionId, newNftTokenId, alice, bob, 1, 'NFT');
// fungible
const fungibleCollectionId = await createCollectionExpectSuccess({mode: {type: 'Fungible', decimalPoints: 0}});
- const newFungibleTokenId = await createItemExpectSuccess(Alice, fungibleCollectionId, 'Fungible');
- await transferExpectSuccess(fungibleCollectionId, newFungibleTokenId, Alice, Bob, 1, 'Fungible');
+ const newFungibleTokenId = await createItemExpectSuccess(alice, fungibleCollectionId, 'Fungible');
+ await transferExpectSuccess(fungibleCollectionId, newFungibleTokenId, alice, bob, 1, 'Fungible');
// reFungible
const reFungibleCollectionId = await
createCollectionExpectSuccess({mode: {type: 'ReFungible'}});
- const newReFungibleTokenId = await createItemExpectSuccess(Alice, reFungibleCollectionId, 'ReFungible');
+ const newReFungibleTokenId = await createItemExpectSuccess(alice, reFungibleCollectionId, 'ReFungible');
await transferExpectSuccess(
reFungibleCollectionId,
newReFungibleTokenId,
- Alice,
- Bob,
+ alice,
+ bob,
100,
'ReFungible',
);
@@ -93,27 +93,27 @@
it('Collection admin can transfer owned token', async () => {
await usingApi(async () => {
- const Alice = privateKey('//Alice');
- const Bob = privateKey('//Bob');
+ const alice = privateKey('//Alice');
+ const bob = privateKey('//Bob');
// nft
const nftCollectionId = await createCollectionExpectSuccess();
- await addCollectionAdminExpectSuccess(Alice, nftCollectionId, Bob);
- const newNftTokenId = await createItemExpectSuccess(Bob, nftCollectionId, 'NFT', Bob.address);
- await transferExpectSuccess(nftCollectionId, newNftTokenId, Bob, Alice, 1, 'NFT');
+ await addCollectionAdminExpectSuccess(alice, nftCollectionId, bob.address);
+ const newNftTokenId = await createItemExpectSuccess(bob, nftCollectionId, 'NFT', bob.address);
+ await transferExpectSuccess(nftCollectionId, newNftTokenId, bob, alice, 1, 'NFT');
// fungible
const fungibleCollectionId = await createCollectionExpectSuccess({mode: {type: 'Fungible', decimalPoints: 0}});
- await addCollectionAdminExpectSuccess(Alice, fungibleCollectionId, Bob);
- const newFungibleTokenId = await createItemExpectSuccess(Alice, fungibleCollectionId, 'Fungible', Bob.address);
- await transferExpectSuccess(fungibleCollectionId, newFungibleTokenId, Bob, Alice, 1, 'Fungible');
+ await addCollectionAdminExpectSuccess(alice, fungibleCollectionId, bob.address);
+ const newFungibleTokenId = await createItemExpectSuccess(alice, fungibleCollectionId, 'Fungible', bob.address);
+ await transferExpectSuccess(fungibleCollectionId, newFungibleTokenId, bob, alice, 1, 'Fungible');
// reFungible
const reFungibleCollectionId = await createCollectionExpectSuccess({mode: {type: 'ReFungible'}});
- await addCollectionAdminExpectSuccess(Alice, reFungibleCollectionId, Bob);
- const newReFungibleTokenId = await createItemExpectSuccess(Bob, reFungibleCollectionId, 'ReFungible', Bob.address);
+ await addCollectionAdminExpectSuccess(alice, reFungibleCollectionId, bob.address);
+ const newReFungibleTokenId = await createItemExpectSuccess(bob, reFungibleCollectionId, 'ReFungible', bob.address);
await transferExpectSuccess(
reFungibleCollectionId,
newReFungibleTokenId,
- Bob,
- Alice,
+ bob,
+ alice,
100,
'ReFungible',
);
@@ -124,108 +124,108 @@
describe('Negative Integration Test Transfer(recipient, collection_id, item_id, value)', () => {
before(async () => {
await usingApi(async () => {
- Alice = privateKey('//Alice');
- Bob = privateKey('//Bob');
- Charlie = privateKey('//Charlie');
+ alice = privateKey('//Alice');
+ bob = privateKey('//Bob');
+ charlie = privateKey('//Charlie');
});
});
it('Transfer with not existed collection_id', async () => {
await usingApi(async (api) => {
// nft
- const nftCollectionCount = await api.query.nft.createdCollectionCount() as unknown as number;
- await transferExpectFailure(nftCollectionCount + 1, 1, Alice, Bob, 1);
+ const nftCollectionCount = (await api.query.common.createdCollectionCount()).toNumber();
+ await transferExpectFailure(nftCollectionCount + 1, 1, alice, bob, 1);
// fungible
- const fungibleCollectionCount = await api.query.nft.createdCollectionCount() as unknown as number;
- await transferExpectFailure(fungibleCollectionCount + 1, 1, Alice, Bob, 1);
+ const fungibleCollectionCount = (await api.query.common.createdCollectionCount()).toNumber();
+ await transferExpectFailure(fungibleCollectionCount + 1, 0, alice, bob, 1);
// reFungible
- const reFungibleCollectionCount = await api.query.nft.createdCollectionCount() as unknown as number;
- await transferExpectFailure(reFungibleCollectionCount + 1, 1, Alice, Bob, 1);
+ const reFungibleCollectionCount = (await api.query.common.createdCollectionCount()).toNumber();
+ await transferExpectFailure(reFungibleCollectionCount + 1, 1, alice, bob, 1);
});
});
it('Transfer with deleted collection_id', async () => {
// nft
const nftCollectionId = await createCollectionExpectSuccess();
- const newNftTokenId = await createItemExpectSuccess(Alice, nftCollectionId, 'NFT');
+ const newNftTokenId = await createItemExpectSuccess(alice, nftCollectionId, 'NFT');
await destroyCollectionExpectSuccess(nftCollectionId);
- await transferExpectFailure(nftCollectionId, newNftTokenId, Alice, Bob, 1);
+ await transferExpectFailure(nftCollectionId, newNftTokenId, alice, bob, 1);
// fungible
const fungibleCollectionId = await createCollectionExpectSuccess({mode: {type: 'Fungible', decimalPoints: 0}});
- const newFungibleTokenId = await createItemExpectSuccess(Alice, fungibleCollectionId, 'Fungible');
+ const newFungibleTokenId = await createItemExpectSuccess(alice, fungibleCollectionId, 'Fungible');
await destroyCollectionExpectSuccess(fungibleCollectionId);
- await transferExpectFailure(fungibleCollectionId, newFungibleTokenId, Alice, Bob, 1);
+ await transferExpectFailure(fungibleCollectionId, newFungibleTokenId, alice, bob, 1);
// reFungible
const reFungibleCollectionId = await
createCollectionExpectSuccess({mode: {type: 'ReFungible'}});
- const newReFungibleTokenId = await createItemExpectSuccess(Alice, reFungibleCollectionId, 'ReFungible');
+ const newReFungibleTokenId = await createItemExpectSuccess(alice, reFungibleCollectionId, 'ReFungible');
await destroyCollectionExpectSuccess(reFungibleCollectionId);
await transferExpectFailure(
reFungibleCollectionId,
newReFungibleTokenId,
- Alice,
- Bob,
+ alice,
+ bob,
1,
);
});
it('Transfer with not existed item_id', async () => {
// nft
const nftCollectionId = await createCollectionExpectSuccess();
- await transferExpectFailure(nftCollectionId, 2, Alice, Bob, 1);
+ await transferExpectFailure(nftCollectionId, 2, alice, bob, 1);
// fungible
const fungibleCollectionId = await createCollectionExpectSuccess({mode: {type: 'Fungible', decimalPoints: 0}});
- await transferExpectFailure(fungibleCollectionId, 2, Alice, Bob, 1);
+ await transferExpectFailure(fungibleCollectionId, 2, alice, bob, 1);
// reFungible
const reFungibleCollectionId = await
createCollectionExpectSuccess({mode: {type: 'ReFungible'}});
await transferExpectFailure(
reFungibleCollectionId,
2,
- Alice,
- Bob,
+ alice,
+ bob,
1,
);
});
it('Transfer with deleted item_id', async () => {
// nft
const nftCollectionId = await createCollectionExpectSuccess();
- const newNftTokenId = await createItemExpectSuccess(Alice, nftCollectionId, 'NFT');
- await burnItemExpectSuccess(Alice, nftCollectionId, newNftTokenId, 1);
- await transferExpectFailure(nftCollectionId, newNftTokenId, Alice, Bob, 1);
+ const newNftTokenId = await createItemExpectSuccess(alice, nftCollectionId, 'NFT');
+ await burnItemExpectSuccess(alice, nftCollectionId, newNftTokenId, 1);
+ await transferExpectFailure(nftCollectionId, newNftTokenId, alice, bob, 1);
// fungible
const fungibleCollectionId = await createCollectionExpectSuccess({mode: {type: 'Fungible', decimalPoints: 0}});
- const newFungibleTokenId = await createItemExpectSuccess(Alice, fungibleCollectionId, 'Fungible');
- await burnItemExpectSuccess(Alice, fungibleCollectionId, newFungibleTokenId, 10);
- await transferExpectFailure(fungibleCollectionId, newFungibleTokenId, Alice, Bob, 1);
+ const newFungibleTokenId = await createItemExpectSuccess(alice, fungibleCollectionId, 'Fungible');
+ await burnItemExpectSuccess(alice, fungibleCollectionId, newFungibleTokenId, 10);
+ await transferExpectFailure(fungibleCollectionId, newFungibleTokenId, alice, bob, 1);
// reFungible
const reFungibleCollectionId = await
createCollectionExpectSuccess({mode: {type: 'ReFungible'}});
- const newReFungibleTokenId = await createItemExpectSuccess(Alice, reFungibleCollectionId, 'ReFungible');
- await burnItemExpectSuccess(Alice, reFungibleCollectionId, newReFungibleTokenId, 100);
+ const newReFungibleTokenId = await createItemExpectSuccess(alice, reFungibleCollectionId, 'ReFungible');
+ await burnItemExpectSuccess(alice, reFungibleCollectionId, newReFungibleTokenId, 100);
await transferExpectFailure(
reFungibleCollectionId,
newReFungibleTokenId,
- Alice,
- Bob,
+ alice,
+ bob,
1,
);
});
it('Transfer with recipient that is not owner', async () => {
// nft
const nftCollectionId = await createCollectionExpectSuccess();
- const newNftTokenId = await createItemExpectSuccess(Alice, nftCollectionId, 'NFT');
- await transferExpectFailure(nftCollectionId, newNftTokenId, Charlie, Bob, 1);
+ const newNftTokenId = await createItemExpectSuccess(alice, nftCollectionId, 'NFT');
+ await transferExpectFailure(nftCollectionId, newNftTokenId, charlie, bob, 1);
// fungible
const fungibleCollectionId = await createCollectionExpectSuccess({mode: {type: 'Fungible', decimalPoints: 0}});
- const newFungibleTokenId = await createItemExpectSuccess(Alice, fungibleCollectionId, 'Fungible');
- await transferExpectFailure(fungibleCollectionId, newFungibleTokenId, Charlie, Bob, 1);
+ const newFungibleTokenId = await createItemExpectSuccess(alice, fungibleCollectionId, 'Fungible');
+ await transferExpectFailure(fungibleCollectionId, newFungibleTokenId, charlie, bob, 1);
// reFungible
const reFungibleCollectionId = await
createCollectionExpectSuccess({mode: {type: 'ReFungible'}});
- const newReFungibleTokenId = await createItemExpectSuccess(Alice, reFungibleCollectionId, 'ReFungible');
+ const newReFungibleTokenId = await createItemExpectSuccess(alice, reFungibleCollectionId, 'ReFungible');
await transferExpectFailure(
reFungibleCollectionId,
newReFungibleTokenId,
- Charlie,
- Bob,
+ charlie,
+ bob,
1,
);
});
tests/src/transferFrom.test.tsdiffbeforeafterboth--- a/tests/src/transferFrom.test.ts
+++ b/tests/src/transferFrom.test.ts
@@ -2,12 +2,12 @@
// This file is subject to the terms and conditions defined in
// file 'LICENSE', which is part of this source code package.
//
-import { ApiPromise } from '@polkadot/api';
-import { IKeyringPair } from '@polkadot/types/types';
+import {ApiPromise} from '@polkadot/api';
+import {IKeyringPair} from '@polkadot/types/types';
import chai from 'chai';
import chaiAsPromised from 'chai-as-promised';
import privateKey from './substrate/privateKey';
-import { default as usingApi } from './substrate/substrate-api';
+import {default as usingApi} from './substrate/substrate-api';
import {
approveExpectFail,
approveExpectSuccess,
@@ -25,15 +25,15 @@
const expect = chai.expect;
describe('Integration Test transferFrom(from, recipient, collection_id, item_id, value):', () => {
- let Alice: IKeyringPair;
- let Bob: IKeyringPair;
- let Charlie: IKeyringPair;
+ let alice: IKeyringPair;
+ let bob: IKeyringPair;
+ let charlie: IKeyringPair;
before(async () => {
await usingApi(async () => {
- Alice = privateKey('//Alice');
- Bob = privateKey('//Bob');
- Charlie = privateKey('//Charlie');
+ alice = privateKey('//Alice');
+ bob = privateKey('//Bob');
+ charlie = privateKey('//Charlie');
});
});
@@ -41,28 +41,28 @@
await usingApi(async () => {
// nft
const nftCollectionId = await createCollectionExpectSuccess();
- const newNftTokenId = await createItemExpectSuccess(Alice, nftCollectionId, 'NFT');
- await approveExpectSuccess(nftCollectionId, newNftTokenId, Alice, Bob);
+ const newNftTokenId = await createItemExpectSuccess(alice, nftCollectionId, 'NFT');
+ await approveExpectSuccess(nftCollectionId, newNftTokenId, alice, bob.address);
- await transferFromExpectSuccess(nftCollectionId, newNftTokenId, Bob, Alice, Charlie, 1, 'NFT');
+ await transferFromExpectSuccess(nftCollectionId, newNftTokenId, bob, alice, charlie, 1, 'NFT');
// fungible
const fungibleCollectionId = await createCollectionExpectSuccess({mode: {type: 'Fungible', decimalPoints: 0}});
- const newFungibleTokenId = await createItemExpectSuccess(Alice, fungibleCollectionId, 'Fungible');
- await approveExpectSuccess(fungibleCollectionId, newFungibleTokenId, Alice, Bob);
- await transferFromExpectSuccess(fungibleCollectionId, newFungibleTokenId, Bob, Alice, Charlie, 1, 'Fungible');
+ const newFungibleTokenId = await createItemExpectSuccess(alice, fungibleCollectionId, 'Fungible');
+ await approveExpectSuccess(fungibleCollectionId, newFungibleTokenId, alice, bob.address);
+ await transferFromExpectSuccess(fungibleCollectionId, newFungibleTokenId, bob, alice, charlie, 1, 'Fungible');
// reFungible
const reFungibleCollectionId = await
createCollectionExpectSuccess({mode: {type: 'ReFungible'}});
- const newReFungibleTokenId = await createItemExpectSuccess(Alice, reFungibleCollectionId, 'ReFungible');
- await approveExpectSuccess(reFungibleCollectionId, newReFungibleTokenId, Alice, Bob, 100);
+ const newReFungibleTokenId = await createItemExpectSuccess(alice, reFungibleCollectionId, 'ReFungible');
+ await approveExpectSuccess(reFungibleCollectionId, newReFungibleTokenId, alice, bob.address, 100);
await transferFromExpectSuccess(
reFungibleCollectionId,
newReFungibleTokenId,
- Bob,
- Alice,
- Charlie,
+ bob,
+ alice,
+ charlie,
100,
'ReFungible',
);
@@ -70,60 +70,60 @@
});
it('Should reduce allowance if value is big', async () => {
- await usingApi(async () => {
+ await usingApi(async (api) => {
const alice = privateKey('//Alice');
const bob = privateKey('//Bob');
const charlie = privateKey('//Charlie');
// fungible
const fungibleCollectionId = await createCollectionExpectSuccess({mode: {type: 'Fungible', decimalPoints: 0}});
- const newFungibleTokenId = await createFungibleItemExpectSuccess(alice, fungibleCollectionId, { Value: 500000n });
+ const newFungibleTokenId = await createFungibleItemExpectSuccess(alice, fungibleCollectionId, {Value: 500000n});
- await approveExpectSuccess(fungibleCollectionId, newFungibleTokenId, alice, bob, 500000n);
+ await approveExpectSuccess(fungibleCollectionId, newFungibleTokenId, alice, bob.address, 500000n);
await transferFromExpectSuccess(fungibleCollectionId, newFungibleTokenId, bob, alice, charlie, 500000n, 'Fungible');
- expect((await getAllowance(fungibleCollectionId, newFungibleTokenId, alice.address, bob.address)).toString()).to.equal('0');
+ expect(await getAllowance(api, fungibleCollectionId, alice.address, bob.address, newFungibleTokenId)).to.equal(0n);
});
});
it('can be called by collection owner on non-owned item when OwnerCanTransfer == true', async () => {
const collectionId = await createCollectionExpectSuccess();
- const itemId = await createItemExpectSuccess(Alice, collectionId, 'NFT', Bob.address);
+ const itemId = await createItemExpectSuccess(alice, collectionId, 'NFT', bob.address);
- await transferFromExpectSuccess(collectionId, itemId, Alice, Bob, Charlie);
+ await transferFromExpectSuccess(collectionId, itemId, alice, bob, charlie);
});
});
describe('Negative Integration Test transferFrom(from, recipient, collection_id, item_id, value):', () => {
- let Alice: IKeyringPair;
- let Bob: IKeyringPair;
- let Charlie: IKeyringPair;
+ let alice: IKeyringPair;
+ let bob: IKeyringPair;
+ let charlie: IKeyringPair;
before(async () => {
await usingApi(async () => {
- Alice = privateKey('//Alice');
- Bob = privateKey('//Bob');
- Charlie = privateKey('//Charlie');
+ alice = privateKey('//Alice');
+ bob = privateKey('//Bob');
+ charlie = privateKey('//Charlie');
});
});
it('transferFrom for a collection that does not exist', async () => {
await usingApi(async (api: ApiPromise) => {
// nft
- const nftCollectionCount = await api.query.nft.createdCollectionCount() as unknown as number;
- await approveExpectFail(nftCollectionCount + 1, 1, Alice, Bob);
+ const nftCollectionCount = (await api.query.common.createdCollectionCount()).toNumber();
+ await approveExpectFail(nftCollectionCount + 1, 1, alice, bob);
- await transferFromExpectFail(nftCollectionCount + 1, 1, Bob, Alice, Charlie, 1);
+ await transferFromExpectFail(nftCollectionCount + 1, 1, bob, alice, charlie, 1);
// fungible
- const fungibleCollectionCount = await api.query.nft.createdCollectionCount() as unknown as number;
- await approveExpectFail(fungibleCollectionCount + 1, 1, Alice, Bob);
+ const fungibleCollectionCount = (await api.query.common.createdCollectionCount()).toNumber();
+ await approveExpectFail(fungibleCollectionCount + 1, 0, alice, bob);
- await transferFromExpectFail(fungibleCollectionCount + 1, 1, Bob, Alice, Charlie, 1);
+ await transferFromExpectFail(fungibleCollectionCount + 1, 0, bob, alice, charlie, 1);
// reFungible
- const reFungibleCollectionCount = await api.query.nft.createdCollectionCount() as unknown as number;
- await approveExpectFail(reFungibleCollectionCount + 1, 1, Alice, Bob);
+ const reFungibleCollectionCount = (await api.query.common.createdCollectionCount()).toNumber();
+ await approveExpectFail(reFungibleCollectionCount + 1, 1, alice, bob);
- await transferFromExpectFail(reFungibleCollectionCount + 1, 1, Bob, Alice, Charlie, 1);
+ await transferFromExpectFail(reFungibleCollectionCount + 1, 1, bob, alice, charlie, 1);
});
});
@@ -149,24 +149,24 @@
await usingApi(async () => {
// nft
const nftCollectionId = await createCollectionExpectSuccess();
- const newNftTokenId = await createItemExpectSuccess(Alice, nftCollectionId, 'NFT');
+ const newNftTokenId = await createItemExpectSuccess(alice, nftCollectionId, 'NFT');
- await transferFromExpectFail(nftCollectionId, newNftTokenId, Bob, Alice, Charlie, 1);
+ await transferFromExpectFail(nftCollectionId, newNftTokenId, bob, alice, charlie, 1);
// fungible
const fungibleCollectionId = await createCollectionExpectSuccess({mode: {type: 'Fungible', decimalPoints: 0}});
- const newFungibleTokenId = await createItemExpectSuccess(Alice, fungibleCollectionId, 'Fungible');
- await transferFromExpectFail(fungibleCollectionId, newFungibleTokenId, Bob, Alice, Charlie, 1);
+ const newFungibleTokenId = await createItemExpectSuccess(alice, fungibleCollectionId, 'Fungible');
+ await transferFromExpectFail(fungibleCollectionId, newFungibleTokenId, bob, alice, charlie, 1);
// reFungible
const reFungibleCollectionId = await
createCollectionExpectSuccess({mode: {type: 'ReFungible'}});
- const newReFungibleTokenId = await createItemExpectSuccess(Alice, reFungibleCollectionId, 'ReFungible');
+ const newReFungibleTokenId = await createItemExpectSuccess(alice, reFungibleCollectionId, 'ReFungible');
await transferFromExpectFail(
reFungibleCollectionId,
newReFungibleTokenId,
- Bob,
- Alice,
- Charlie,
+ bob,
+ alice,
+ charlie,
1,
);
});
@@ -176,27 +176,27 @@
await usingApi(async () => {
// nft
const nftCollectionId = await createCollectionExpectSuccess();
- const newNftTokenId = await createItemExpectSuccess(Alice, nftCollectionId, 'NFT');
- await approveExpectSuccess(nftCollectionId, newNftTokenId, Alice, Bob);
+ const newNftTokenId = await createItemExpectSuccess(alice, nftCollectionId, 'NFT');
+ await approveExpectSuccess(nftCollectionId, newNftTokenId, alice, bob.address);
- await transferFromExpectFail(nftCollectionId, newNftTokenId, Bob, Alice, Charlie, 2);
+ await transferFromExpectFail(nftCollectionId, newNftTokenId, bob, alice, charlie, 2);
// fungible
const fungibleCollectionId = await createCollectionExpectSuccess({mode: {type: 'Fungible', decimalPoints: 0}});
- const newFungibleTokenId = await createItemExpectSuccess(Alice, fungibleCollectionId, 'Fungible');
- await approveExpectSuccess(fungibleCollectionId, newFungibleTokenId, Alice, Bob);
- await transferFromExpectFail(fungibleCollectionId, newFungibleTokenId, Bob, Alice, Charlie, 2);
+ const newFungibleTokenId = await createItemExpectSuccess(alice, fungibleCollectionId, 'Fungible');
+ await approveExpectSuccess(fungibleCollectionId, newFungibleTokenId, alice, bob.address);
+ await transferFromExpectFail(fungibleCollectionId, newFungibleTokenId, bob, alice, charlie, 2);
// reFungible
const reFungibleCollectionId = await
createCollectionExpectSuccess({mode: {type: 'ReFungible'}});
- const newReFungibleTokenId = await createItemExpectSuccess(Alice, reFungibleCollectionId, 'ReFungible');
- await approveExpectSuccess(reFungibleCollectionId, newReFungibleTokenId, Alice, Bob);
+ const newReFungibleTokenId = await createItemExpectSuccess(alice, reFungibleCollectionId, 'ReFungible');
+ await approveExpectSuccess(reFungibleCollectionId, newReFungibleTokenId, alice, bob.address);
await transferFromExpectFail(
reFungibleCollectionId,
newReFungibleTokenId,
- Bob,
- Alice,
- Charlie,
+ bob,
+ alice,
+ charlie,
2,
);
});
@@ -204,13 +204,13 @@
it('execute transferFrom from account that is not owner of collection', async () => {
await usingApi(async () => {
- const Dave = privateKey('//Dave');
+ const dave = privateKey('//Dave');
// nft
const nftCollectionId = await createCollectionExpectSuccess();
- const newNftTokenId = await createItemExpectSuccess(Alice, nftCollectionId, 'NFT');
+ const newNftTokenId = await createItemExpectSuccess(alice, nftCollectionId, 'NFT');
try {
- await approveExpectFail(nftCollectionId, newNftTokenId, Dave, Bob);
- await transferFromExpectFail(nftCollectionId, newNftTokenId, Dave, Alice, Charlie, 1);
+ await approveExpectFail(nftCollectionId, newNftTokenId, dave, bob);
+ await transferFromExpectFail(nftCollectionId, newNftTokenId, dave, alice, charlie, 1);
} catch (e) {
// tslint:disable-next-line:no-unused-expression
expect(e).to.be.exist;
@@ -220,10 +220,10 @@
// fungible
const fungibleCollectionId = await createCollectionExpectSuccess({mode: {type: 'Fungible', decimalPoints: 0}});
- const newFungibleTokenId = await createItemExpectSuccess(Alice, fungibleCollectionId, 'Fungible');
+ const newFungibleTokenId = await createItemExpectSuccess(alice, fungibleCollectionId, 'Fungible');
try {
- await approveExpectFail(fungibleCollectionId, newFungibleTokenId, Dave, Bob);
- await transferFromExpectFail(fungibleCollectionId, newFungibleTokenId, Dave, Alice, Charlie, 1);
+ await approveExpectFail(fungibleCollectionId, newFungibleTokenId, dave, bob);
+ await transferFromExpectFail(fungibleCollectionId, newFungibleTokenId, dave, alice, charlie, 1);
} catch (e) {
// tslint:disable-next-line:no-unused-expression
expect(e).to.be.exist;
@@ -231,83 +231,83 @@
// reFungible
const reFungibleCollectionId = await
createCollectionExpectSuccess({mode: {type: 'ReFungible'}});
- const newReFungibleTokenId = await createItemExpectSuccess(Alice, reFungibleCollectionId, 'ReFungible');
+ const newReFungibleTokenId = await createItemExpectSuccess(alice, reFungibleCollectionId, 'ReFungible');
try {
- await approveExpectFail(reFungibleCollectionId, newReFungibleTokenId, Dave, Bob);
- await transferFromExpectFail(reFungibleCollectionId, newReFungibleTokenId, Dave, Alice, Charlie, 1);
+ await approveExpectFail(reFungibleCollectionId, newReFungibleTokenId, dave, bob);
+ await transferFromExpectFail(reFungibleCollectionId, newReFungibleTokenId, dave, alice, charlie, 1);
} catch (e) {
// tslint:disable-next-line:no-unused-expression
expect(e).to.be.exist;
}
});
});
- it( 'transferFrom burnt token before approve NFT', async () => {
+ it('transferFrom burnt token before approve NFT', async () => {
await usingApi(async () => {
// nft
const nftCollectionId = await createCollectionExpectSuccess();
- const newNftTokenId = await createItemExpectSuccess(Alice, nftCollectionId, 'NFT');
- await burnItemExpectSuccess(Alice, nftCollectionId, newNftTokenId, 1);
- await approveExpectFail(nftCollectionId, newNftTokenId, Alice, Bob);
- await transferFromExpectFail(nftCollectionId, newNftTokenId, Bob, Alice, Charlie, 1);
+ const newNftTokenId = await createItemExpectSuccess(alice, nftCollectionId, 'NFT');
+ await burnItemExpectSuccess(alice, nftCollectionId, newNftTokenId, 1);
+ await approveExpectFail(nftCollectionId, newNftTokenId, alice, bob);
+ await transferFromExpectFail(nftCollectionId, newNftTokenId, bob, alice, charlie, 1);
});
});
- it( 'transferFrom burnt token before approve Fungible', async () => {
+ it('transferFrom burnt token before approve Fungible', async () => {
await usingApi(async () => {
const fungibleCollectionId = await createCollectionExpectSuccess({mode: {type: 'Fungible', decimalPoints: 0}});
- const newFungibleTokenId = await createItemExpectSuccess(Alice, fungibleCollectionId, 'Fungible');
- await burnItemExpectSuccess(Alice, fungibleCollectionId, 1, 10);
- await approveExpectSuccess(fungibleCollectionId, newFungibleTokenId, Alice, Bob);
- await transferFromExpectFail(fungibleCollectionId, newFungibleTokenId, Bob, Alice, Charlie, 1);
+ const newFungibleTokenId = await createItemExpectSuccess(alice, fungibleCollectionId, 'Fungible');
+ await burnItemExpectSuccess(alice, fungibleCollectionId, newFungibleTokenId, 10);
+ await approveExpectSuccess(fungibleCollectionId, newFungibleTokenId, alice, bob.address);
+ await transferFromExpectFail(fungibleCollectionId, newFungibleTokenId, bob, alice, charlie, 1);
});
});
- it( 'transferFrom burnt token before approve ReFungible', async () => {
+ it('transferFrom burnt token before approve ReFungible', async () => {
await usingApi(async () => {
const reFungibleCollectionId = await createCollectionExpectSuccess({mode: {type: 'ReFungible'}});
- const newReFungibleTokenId = await createItemExpectSuccess(Alice, reFungibleCollectionId, 'ReFungible');
- await burnItemExpectSuccess(Alice, reFungibleCollectionId, newReFungibleTokenId, 100);
- await approveExpectFail(reFungibleCollectionId, newReFungibleTokenId, Alice, Bob);
- await transferFromExpectFail(reFungibleCollectionId, newReFungibleTokenId, Bob, Alice, Charlie, 1);
+ const newReFungibleTokenId = await createItemExpectSuccess(alice, reFungibleCollectionId, 'ReFungible');
+ await burnItemExpectSuccess(alice, reFungibleCollectionId, newReFungibleTokenId, 100);
+ await approveExpectFail(reFungibleCollectionId, newReFungibleTokenId, alice, bob);
+ await transferFromExpectFail(reFungibleCollectionId, newReFungibleTokenId, bob, alice, charlie, 1);
});
});
- it( 'transferFrom burnt token after approve NFT', async () => {
+ it('transferFrom burnt token after approve NFT', async () => {
await usingApi(async () => {
// nft
const nftCollectionId = await createCollectionExpectSuccess();
- const newNftTokenId = await createItemExpectSuccess(Alice, nftCollectionId, 'NFT');
- await approveExpectSuccess(nftCollectionId, newNftTokenId, Alice, Bob);
- await burnItemExpectSuccess(Alice, nftCollectionId, newNftTokenId, 1);
- await transferFromExpectFail(nftCollectionId, newNftTokenId, Bob, Alice, Charlie, 1);
+ const newNftTokenId = await createItemExpectSuccess(alice, nftCollectionId, 'NFT');
+ await approveExpectSuccess(nftCollectionId, newNftTokenId, alice, bob.address);
+ await burnItemExpectSuccess(alice, nftCollectionId, newNftTokenId, 1);
+ await transferFromExpectFail(nftCollectionId, newNftTokenId, bob, alice, charlie, 1);
});
});
- it( 'transferFrom burnt token after approve Fungible', async () => {
+ it('transferFrom burnt token after approve Fungible', async () => {
await usingApi(async () => {
const fungibleCollectionId = await createCollectionExpectSuccess({mode: {type: 'Fungible', decimalPoints: 0}});
- const newFungibleTokenId = await createItemExpectSuccess(Alice, fungibleCollectionId, 'Fungible');
- await approveExpectSuccess(fungibleCollectionId, newFungibleTokenId, Alice, Bob);
- await burnItemExpectSuccess(Alice, fungibleCollectionId, 1, 10);
- await transferFromExpectFail(fungibleCollectionId, newFungibleTokenId, Bob, Alice, Charlie, 1);
+ const newFungibleTokenId = await createItemExpectSuccess(alice, fungibleCollectionId, 'Fungible');
+ await approveExpectSuccess(fungibleCollectionId, newFungibleTokenId, alice, bob.address);
+ await burnItemExpectSuccess(alice, fungibleCollectionId, newFungibleTokenId, 10);
+ await transferFromExpectFail(fungibleCollectionId, newFungibleTokenId, bob, alice, charlie, 1);
});
});
- it( 'transferFrom burnt token after approve ReFungible', async () => {
+ it('transferFrom burnt token after approve ReFungible', async () => {
await usingApi(async () => {
const reFungibleCollectionId = await createCollectionExpectSuccess({mode: {type: 'ReFungible'}});
- const newReFungibleTokenId = await createItemExpectSuccess(Alice, reFungibleCollectionId, 'ReFungible');
- await approveExpectSuccess(reFungibleCollectionId, newReFungibleTokenId, Alice, Bob);
- await burnItemExpectSuccess(Alice, reFungibleCollectionId, newReFungibleTokenId, 100);
- await transferFromExpectFail(reFungibleCollectionId, newReFungibleTokenId, Bob, Alice, Charlie, 1);
+ const newReFungibleTokenId = await createItemExpectSuccess(alice, reFungibleCollectionId, 'ReFungible');
+ await approveExpectSuccess(reFungibleCollectionId, newReFungibleTokenId, alice, bob.address);
+ await burnItemExpectSuccess(alice, reFungibleCollectionId, newReFungibleTokenId, 100);
+ await transferFromExpectFail(reFungibleCollectionId, newReFungibleTokenId, bob, alice, charlie, 1);
});
});
it('fails when called by collection owner on non-owned item when OwnerCanTransfer == false', async () => {
const collectionId = await createCollectionExpectSuccess();
- const itemId = await createItemExpectSuccess(Alice, collectionId, 'NFT', Bob.address);
- await setCollectionLimitsExpectSuccess(Alice, collectionId, { ownerCanTransfer: false });
+ const itemId = await createItemExpectSuccess(alice, collectionId, 'NFT', bob.address);
+ await setCollectionLimitsExpectSuccess(alice, collectionId, {ownerCanTransfer: false});
- await transferFromExpectFail(collectionId, itemId, Alice, Bob, Charlie);
+ await transferFromExpectFail(collectionId, itemId, alice, bob, charlie);
});
});
tests/src/types.tsdiffbeforeafterboth--- a/tests/src/types.ts
+++ /dev/null
@@ -1,37 +0,0 @@
-//
-// This file is subject to the terms and conditions defined in
-// file 'LICENSE', which is part of this source code package.
-//
-
-import BN from 'bn.js';
-
-export interface ICollectionInterface {
- access: string;
- id: number;
- decimalPoints: BN;
- // constOnChainSchema
- description: [BN, BN]; // utf16
- isReFungible: boolean;
- limits: {
- accountTokenOwnershipLimit: number;
- sponsoredDataSize: number;
- sponsoredDataRateLimit?: number,
- tokenLimit: number;
- sponsorTimeout: number;
- ownerCanTransfer: boolean;
- ownerCanDestroy: boolean;
- };
- mintMode: boolean;
- mode: {
- nft: null;
- };
- name: [BN, BN]; // utf16
- offchainSchema: [Uint8Array];
- owner: [Uint8Array];
- schemaVersion: string;
- // prefix
- // sponsor
- // tokenPrefix
- // unconfirmedSponsor
- // variableOnChainSchema
-}
tests/src/util/contracthelpers.tsdiffbeforeafterboth--- a/tests/src/util/contracthelpers.ts
+++ b/tests/src/util/contracthelpers.ts
@@ -5,16 +5,15 @@
import chai from 'chai';
import chaiAsPromised from 'chai-as-promised';
-import { submitTransactionAsync, submitTransactionExpectFailAsync } from '../substrate/substrate-api';
+import {submitTransactionAsync, submitTransactionExpectFailAsync} from '../substrate/substrate-api';
import fs from 'fs';
-import { Abi, CodePromise, ContractPromise as Contract } from '@polkadot/api-contract';
-import { IKeyringPair } from '@polkadot/types/types';
-import { ApiPromise, Keyring } from '@polkadot/api';
+import {Abi, CodePromise, ContractPromise as Contract} from '@polkadot/api-contract';
+import {IKeyringPair} from '@polkadot/types/types';
+import {ApiPromise, Keyring} from '@polkadot/api';
chai.use(chaiAsPromised);
const expect = chai.expect;
-import { BigNumber } from 'bignumber.js';
-import { findUnusedAddress, getGenericResult } from '../util/helpers';
+import {findUnusedAddress, getGenericResult} from '../util/helpers';
const value = 0;
const gasLimit = '200000000000';
@@ -40,11 +39,10 @@
const deployer = await findUnusedAddress(api);
// Transfer balance to it
- const keyring = new Keyring({ type: 'sr25519' });
+ const keyring = new Keyring({type: 'sr25519'});
const alice = keyring.addFromUri('//Alice');
- let amount = new BigNumber(endowment);
- amount = amount.plus(100e15);
- const tx = api.tx.balances.transfer(deployer.address, amount.toFixed());
+ const amount = BigInt(endowment) + 10n**15n;
+ const tx = api.tx.balances.transfer(deployer.address, amount);
await submitTransactionAsync(alice, tx);
return deployer;
tests/src/util/helpers.tsdiffbeforeafterboth--- a/tests/src/util/helpers.ts
+++ b/tests/src/util/helpers.ts
@@ -3,51 +3,67 @@
// file 'LICENSE', which is part of this source code package.
//
-import { ApiPromise, Keyring } from '@polkadot/api';
-import type { AccountId, EventRecord } from '@polkadot/types/interfaces';
-import { IKeyringPair } from '@polkadot/types/types';
-import { evmToAddress } from '@polkadot/util-crypto';
-import { BigNumber } from 'bignumber.js';
+import {ApiPromise, Keyring} from '@polkadot/api';
+import type {AccountId, EventRecord} from '@polkadot/types/interfaces';
+import {IKeyringPair} from '@polkadot/types/types';
+import {evmToAddress} from '@polkadot/util-crypto';
import BN from 'bn.js';
import chai from 'chai';
import chaiAsPromised from 'chai-as-promised';
-import { alicesPublicKey } from '../accounts';
+import {alicesPublicKey} from '../accounts';
+import {NftDataStructsCollection} from '../interfaces';
import privateKey from '../substrate/privateKey';
-import { default as usingApi, submitTransactionAsync, submitTransactionExpectFailAsync } from '../substrate/substrate-api';
-import { ICollectionInterface } from '../types';
-import { hexToStr, strToUTF16, utf16ToStr } from './util';
+import {default as usingApi, submitTransactionAsync, submitTransactionExpectFailAsync} from '../substrate/substrate-api';
+import {hexToStr, strToUTF16, utf16ToStr} from './util';
chai.use(chaiAsPromised);
const expect = chai.expect;
export type CrossAccountId = {
- substrate: string,
+ Substrate: string,
} | {
- ethereum: string,
+ Ethereum: string,
};
export function normalizeAccountId(input: string | AccountId | CrossAccountId | IKeyringPair): CrossAccountId {
- if (typeof input === 'string')
- return { substrate: input };
- if ('address' in input) {
- return { substrate: input.address };
+ if (typeof input === 'string') {
+ if (input.length === 48 || input.length === 47) {
+ return {Substrate: input};
+ } else if (input.length === 42 && input.startsWith('0x')) {
+ return {Ethereum: input.toLowerCase()};
+ } else if (input.length === 40 && !input.startsWith('0x')) {
+ return {Ethereum: '0x' + input.toLowerCase()};
+ } else {
+ throw new Error(`Unknown address format: "${input}"`);
+ }
}
- if ('ethereum' in input) {
- input.ethereum = input.ethereum.toLowerCase();
- return input;
+ if ('address' in input) {
+ return {Substrate: input.address};
}
- if ('substrate' in input) {
+ if ('Ethereum' in input) {
+ return {
+ Ethereum: input.Ethereum.toLowerCase(),
+ };
+ } else if ('ethereum' in input) {
+ return {
+ Ethereum: (input as any).ethereum.toLowerCase(),
+ };
+ } else if ('Substrate' in input) {
return input;
+ }else if ('substrate' in input) {
+ return {
+ Substrate: (input as any).substrate,
+ };
}
// AccountId
- return {substrate: input.toString()};
+ return {Substrate: input.toString()};
}
export function toSubstrateAddress(input: string | CrossAccountId | IKeyringPair): string {
input = normalizeAccountId(input);
- if ('substrate' in input) {
- return input.substrate;
+ if ('Substrate' in input) {
+ return input.Substrate;
} else {
- return evmToAddress(input.ethereum);
+ return evmToAddress(input.Ethereum);
}
}
@@ -86,12 +102,6 @@
interface IReFungibleOwner {
fraction: BN;
owner: number[];
-}
-
-interface ITokenDataType {
- owner: IKeyringPair;
- constData: number[];
- variableData: number[];
}
interface IGetMessage {
@@ -127,8 +137,8 @@
let checkMsgNftMethod = '';
let checkMsgTrsMethod = '';
let checkMsgSysMethod = '';
- events.forEach(({ event: { method, section } }) => {
- if (section === 'nft') {
+ events.forEach(({event: {method, section}}) => {
+ if (section === 'common') {
checkMsgNftMethod = method;
} else if (section === 'treasury') {
checkMsgTrsMethod = method;
@@ -148,7 +158,7 @@
const result: GenericResult = {
success: false,
};
- events.forEach(({ event: { method } }) => {
+ events.forEach(({event: {method}}) => {
// console.log(` ${phase}: ${section}.${method}:: ${data}`);
if (method === 'ExtrinsicSuccess') {
result.success = true;
@@ -162,12 +172,12 @@
export function getCreateCollectionResult(events: EventRecord[]): CreateCollectionResult {
let success = false;
let collectionId = 0;
- events.forEach(({ event: { data, method, section } }) => {
+ events.forEach(({event: {data, method, section}}) => {
// console.log(` ${phase}: ${section}.${method}:: ${data}`);
if (method == 'ExtrinsicSuccess') {
success = true;
- } else if ((section == 'nft') && (method == 'CollectionCreated')) {
- collectionId = parseInt(data[0].toString());
+ } else if ((section == 'common') && (method == 'CollectionCreated')) {
+ collectionId = parseInt(data[0].toString(), 10);
}
});
const result: CreateCollectionResult = {
@@ -182,14 +192,14 @@
let collectionId = 0;
let itemId = 0;
let recipient;
- events.forEach(({ event: { data, method, section } }) => {
+ events.forEach(({event: {data, method, section}}) => {
// console.log(` ${phase}: ${section}.${method}:: ${data}`);
if (method == 'ExtrinsicSuccess') {
success = true;
- } else if ((section == 'nft') && (method == 'ItemCreated')) {
- collectionId = parseInt(data[0].toString());
- itemId = parseInt(data[1].toString());
- recipient = data[2].toJSON();
+ } else if ((section == 'common') && (method == 'ItemCreated')) {
+ collectionId = parseInt(data[0].toString(), 10);
+ itemId = parseInt(data[1].toString(), 10);
+ recipient = normalizeAccountId(data[2].toJSON() as any);
}
});
const result: CreateItemResult = {
@@ -209,14 +219,14 @@
value: 0n,
};
- events.forEach(({ event: { data, method, section } }) => {
+ events.forEach(({event: {data, method, section}}) => {
if (method === 'ExtrinsicSuccess') {
result.success = true;
- } else if (section === 'nft' && method === 'Transfer') {
+ } else if (section === 'common' && method === 'Transfer') {
result.collectionId = +data[0].toString();
result.itemId = +data[1].toString();
- result.sender = data[2].toJSON() as CrossAccountId;
- result.recipient = data[3].toJSON() as CrossAccountId;
+ result.sender = normalizeAccountId(data[2].toJSON() as any);
+ result.recipient = normalizeAccountId(data[3].toJSON() as any);
result.value = BigInt(data[4].toString());
}
});
@@ -248,52 +258,52 @@
const defaultCreateCollectionParams: CreateCollectionParams = {
description: 'description',
- mode: { type: 'NFT' },
+ mode: {type: 'NFT'},
name: 'name',
tokenPrefix: 'prefix',
};
export async function createCollectionExpectSuccess(params: Partial<CreateCollectionParams> = {}): Promise<number> {
- const { name, description, mode, tokenPrefix } = { ...defaultCreateCollectionParams, ...params };
+ const {name, description, mode, tokenPrefix} = {...defaultCreateCollectionParams, ...params};
let collectionId = 0;
await usingApi(async (api) => {
// Get number of collections before the transaction
- const AcollectionCount = parseInt((await api.query.nft.createdCollectionCount()).toString(), 10);
+ const collectionCountBefore = (await api.query.common.createdCollectionCount()).toNumber();
// Run the CreateCollection transaction
const alicePrivateKey = privateKey('//Alice');
let modeprm = {};
if (mode.type === 'NFT') {
- modeprm = { nft: null };
+ modeprm = {nft: null};
} else if (mode.type === 'Fungible') {
- modeprm = { fungible: mode.decimalPoints };
+ modeprm = {fungible: mode.decimalPoints};
} else if (mode.type === 'ReFungible') {
- modeprm = { refungible: null };
+ modeprm = {refungible: null};
}
- const tx = api.tx.nft.createCollection(strToUTF16(name), strToUTF16(description), strToUTF16(tokenPrefix), modeprm);
+ const tx = api.tx.nft.createCollection(strToUTF16(name), strToUTF16(description), strToUTF16(tokenPrefix), modeprm as any);
const events = await submitTransactionAsync(alicePrivateKey, tx);
const result = getCreateCollectionResult(events);
// Get number of collections after the transaction
- const BcollectionCount = parseInt((await api.query.nft.createdCollectionCount()).toString(), 10);
+ const collectionCountAfter = (await api.query.common.createdCollectionCount()).toNumber();
// Get the collection
- const collection: any = (await api.query.nft.collectionById(result.collectionId) as any).toJSON();
+ const collection = (await api.query.common.collectionById(result.collectionId)).unwrap();
// What to expect
// tslint:disable-next-line:no-unused-expression
expect(result.success).to.be.true;
- expect(result.collectionId).to.be.equal(BcollectionCount);
+ expect(result.collectionId).to.be.equal(collectionCountAfter);
// tslint:disable-next-line:no-unused-expression
expect(collection).to.be.not.null;
- expect(BcollectionCount).to.be.equal(AcollectionCount + 1, 'Error: NFT collection NOT created.');
- expect(collection.owner).to.be.equal(toSubstrateAddress(alicesPublicKey));
- expect(utf16ToStr(collection.name)).to.be.equal(name);
- expect(utf16ToStr(collection.description)).to.be.equal(description);
- expect(hexToStr(collection.tokenPrefix)).to.be.equal(tokenPrefix);
+ expect(collectionCountAfter).to.be.equal(collectionCountBefore + 1, 'Error: NFT collection NOT created.');
+ expect(collection.owner.toString()).to.be.equal(toSubstrateAddress(alicesPublicKey));
+ expect(utf16ToStr(collection.name.toJSON() as any)).to.be.equal(name);
+ expect(utf16ToStr(collection.description.toJSON() as any)).to.be.equal(description);
+ expect(hexToStr(collection.tokenPrefix.toJSON())).to.be.equal(tokenPrefix);
collectionId = result.collectionId;
});
@@ -302,54 +312,51 @@
}
export async function createCollectionExpectFailure(params: Partial<CreateCollectionParams> = {}) {
- const { name, description, mode, tokenPrefix } = { ...defaultCreateCollectionParams, ...params };
+ const {name, description, mode, tokenPrefix} = {...defaultCreateCollectionParams, ...params};
let modeprm = {};
if (mode.type === 'NFT') {
- modeprm = { nft: null };
+ modeprm = {nft: null};
} else if (mode.type === 'Fungible') {
- modeprm = { fungible: mode.decimalPoints };
+ modeprm = {fungible: mode.decimalPoints};
} else if (mode.type === 'ReFungible') {
- modeprm = { refungible: null };
+ modeprm = {refungible: null};
}
await usingApi(async (api) => {
// Get number of collections before the transaction
- const AcollectionCount = parseInt((await api.query.nft.createdCollectionCount()).toString());
+ const collectionCountBefore = (await api.query.common.createdCollectionCount()).toNumber();
// Run the CreateCollection transaction
const alicePrivateKey = privateKey('//Alice');
- const tx = api.tx.nft.createCollection(strToUTF16(name), strToUTF16(description), strToUTF16(tokenPrefix), modeprm);
+ const tx = api.tx.nft.createCollection(strToUTF16(name), strToUTF16(description), strToUTF16(tokenPrefix), modeprm as any);
const events = await expect(submitTransactionExpectFailAsync(alicePrivateKey, tx)).to.be.rejected;
const result = getCreateCollectionResult(events);
// Get number of collections after the transaction
- const BcollectionCount = parseInt((await api.query.nft.createdCollectionCount()).toString());
+ const collectionCountAfter = (await api.query.common.createdCollectionCount()).toNumber();
// What to expect
// tslint:disable-next-line:no-unused-expression
expect(result.success).to.be.false;
- expect(BcollectionCount).to.be.equal(AcollectionCount, 'Error: Collection with incorrect data created.');
+ expect(collectionCountAfter).to.be.equal(collectionCountBefore, 'Error: Collection with incorrect data created.');
});
}
export async function findUnusedAddress(api: ApiPromise, seedAddition = ''): Promise<IKeyringPair> {
- let bal = new BigNumber(0);
+ let bal = 0n;
let unused;
do {
const randomSeed = 'seed' + Math.floor(Math.random() * Math.floor(10000)) + seedAddition;
- const keyring = new Keyring({ type: 'sr25519' });
+ const keyring = new Keyring({type: 'sr25519'});
unused = keyring.addFromUri(`//${randomSeed}`);
- bal = new BigNumber((await api.query.system.account(unused.address)).data.free.toString());
- } while (bal.toFixed() != '0');
+ bal = (await api.query.system.account(unused.address)).data.free.toBigInt();
+ } while (bal !== 0n);
return unused;
}
-export async function getAllowance(collectionId: number, tokenId: number, owner: string, approved: string) {
- return await usingApi(async (api) => {
- const bn = await api.query.nft.allowances(collectionId, [tokenId, owner, approved]) as unknown as BN;
- return BigInt(bn.toString());
- });
+export async function getAllowance(api: ApiPromise, collectionId: number, owner: CrossAccountId | string, approved: CrossAccountId | string, tokenId: number) {
+ return (await api.rpc.nft.allowance(collectionId, normalizeAccountId(owner), normalizeAccountId(approved), tokenId)).toBigInt();
}
export function findUnusedAddresses(api: ApiPromise, amount: number): Promise<IKeyringPair[]> {
@@ -357,14 +364,14 @@
}
export async function findNotExistingCollection(api: ApiPromise): Promise<number> {
- const totalNumber = parseInt((await api.query.nft.createdCollectionCount()).toString(), 10) as unknown as number;
+ const totalNumber = (await api.query.common.createdCollectionCount()).toNumber();
const newCollection: number = totalNumber + 1;
return newCollection;
}
function getDestroyResult(events: EventRecord[]): boolean {
let success = false;
- events.forEach(({ event: { method } }) => {
+ events.forEach(({event: {method}}) => {
if (method == 'ExtrinsicSuccess') {
success = true;
}
@@ -388,27 +395,16 @@
const tx = api.tx.nft.destroyCollection(collectionId);
const events = await submitTransactionAsync(alicePrivateKey, tx);
const result = getDestroyResult(events);
-
- // Get the collection
- const collection: any = (await api.query.nft.collectionById(collectionId)).toJSON();
+ expect(result).to.be.true;
// What to expect
- expect(result).to.be.true;
- expect(collection).to.be.null;
- });
-}
-
-export async function queryCollectionLimits(collectionId: number) {
- return await usingApi(async (api) => {
- return ((await api.query.nft.collectionById(collectionId)).toJSON() as any).limits;
+ expect((await api.query.common.collectionById(collectionId)).isNone).to.be.true;
});
}
export async function setCollectionLimitsExpectSuccess(sender: IKeyringPair, collectionId: number, limits: any) {
await usingApi(async (api) => {
- const oldLimits = await queryCollectionLimits(collectionId);
- const newLimits = { ...oldLimits as any, ...limits };
- const tx = api.tx.nft.setCollectionLimits(collectionId, newLimits);
+ const tx = api.tx.nft.setCollectionLimits(collectionId, limits);
const events = await submitTransactionAsync(sender, tx);
const result = getGenericResult(events);
@@ -418,9 +414,7 @@
export async function setCollectionLimitsExpectFailure(sender: IKeyringPair, collectionId: number, limits: any) {
await usingApi(async (api) => {
- const oldLimits = await queryCollectionLimits(collectionId);
- const newLimits = { ...oldLimits as any, ...limits };
- const tx = api.tx.nft.setCollectionLimits(collectionId, newLimits);
+ const tx = api.tx.nft.setCollectionLimits(collectionId, limits);
const events = await expect(submitTransactionExpectFailAsync(sender, tx)).to.be.rejected;
const result = getGenericResult(events);
@@ -438,11 +432,11 @@
const result = getGenericResult(events);
// Get the collection
- const collection: any = (await api.query.nft.collectionById(collectionId)).toJSON();
+ const collection = (await api.query.common.collectionById(collectionId)).unwrap();
// What to expect
expect(result.success).to.be.true;
- expect(collection.sponsorship).to.deep.equal({
+ expect(collection.sponsorship.toJSON()).to.deep.equal({
unconfirmed: sponsor,
});
});
@@ -458,11 +452,11 @@
const result = getGenericResult(events);
// Get the collection
- const collection: any = (await api.query.nft.collectionById(collectionId)).toJSON();
+ const collection = (await api.query.common.collectionById(collectionId)).unwrap();
// What to expect
expect(result.success).to.be.true;
- expect(collection.sponsorship).to.be.deep.equal({ disabled: null });
+ expect(collection.sponsorship.toJSON()).to.be.deep.equal({disabled: null});
});
}
@@ -496,11 +490,11 @@
const result = getGenericResult(events);
// Get the collection
- const collection: any = (await api.query.nft.collectionById(collectionId)).toJSON();
+ const collection = (await api.query.common.collectionById(collectionId)).unwrap();
// What to expect
expect(result.success).to.be.true;
- expect(collection.sponsorship).to.be.deep.equal({
+ expect(collection.sponsorship.toJSON()).to.be.deep.equal({
confirmed: sender.address,
});
});
@@ -520,7 +514,7 @@
export async function setMetadataUpdatePermissionFlagExpectSuccess(sender: IKeyringPair, collectionId: number, flag: string) {
await usingApi(async (api) => {
- const tx = api.tx.nft.setMetaUpdatePermissionFlag(collectionId, flag);
+ const tx = api.tx.nft.setMetaUpdatePermissionFlag(collectionId, flag as any);
const events = await submitTransactionAsync(sender, tx);
const result = getGenericResult(events);
@@ -531,7 +525,7 @@
export async function setMetadataUpdatePermissionFlagExpectFailure(sender: IKeyringPair, collectionId: number, flag: string) {
await usingApi(async (api) => {
- const tx = api.tx.nft.setMetaUpdatePermissionFlag(collectionId, flag);
+ const tx = api.tx.nft.setMetaUpdatePermissionFlag(collectionId, flag as any);
const events = await expect(submitTransactionExpectFailAsync(sender, tx)).to.be.rejected;
const result = getGenericResult(events);
@@ -702,36 +696,46 @@
export async function burnItemExpectSuccess(sender: IKeyringPair, collectionId: number, tokenId: number, value = 1) {
await usingApi(async (api) => {
+ const balanceBefore = await getBalance(api, collectionId, normalizeAccountId(sender), tokenId);
+ // if burning token by admin - use adminButnItemExpectSuccess
+ expect(balanceBefore >= BigInt(value)).to.be.true;
+
const tx = api.tx.nft.burnItem(collectionId, tokenId, value);
const events = await submitTransactionAsync(sender, tx);
const result = getGenericResult(events);
- // Get the item
- const item: any = (await api.query.nft.nftItemList(collectionId, tokenId)).toJSON();
- // What to expect
- // tslint:disable-next-line:no-unused-expression
expect(result.success).to.be.true;
- // tslint:disable-next-line:no-unused-expression
- expect(item).to.be.null;
+
+ const balanceAfter = await getBalance(api, collectionId, normalizeAccountId(sender), tokenId);
+ expect(balanceAfter + BigInt(value)).to.be.equal(balanceBefore);
});
}
export async function
approveExpectSuccess(
collectionId: number,
- tokenId: number, owner: IKeyringPair, approved: IKeyringPair | CrossAccountId | string, amount: number | bigint = 1,
+ tokenId: number, owner: IKeyringPair, approved: CrossAccountId | string, amount: number | bigint = 1,
) {
await usingApi(async (api: ApiPromise) => {
- approved = normalizeAccountId(approved);
- const allowanceBefore =
- await api.query.nft.allowances(collectionId, [tokenId, owner.address, toSubstrateAddress(approved)]) as unknown as BN;
- const approveNftTx = api.tx.nft.approve(approved, collectionId, tokenId, amount);
+ const approveNftTx = api.tx.nft.approve(normalizeAccountId(approved), collectionId, tokenId, amount);
const events = await submitTransactionAsync(owner, approveNftTx);
- const result = getCreateItemResult(events);
- // tslint:disable-next-line:no-unused-expression
+ const result = getGenericResult(events);
+ expect(result.success).to.be.true;
+
+ expect(await getAllowance(api, collectionId, owner.address, approved, tokenId)).to.be.equal(BigInt(amount));
+ });
+}
+
+export async function adminApproveFromExpectSuccess(
+ collectionId: number,
+ tokenId: number, admin: IKeyringPair, owner: CrossAccountId | string, approved: CrossAccountId | string, amount: number | bigint = 1,
+) {
+ await usingApi(async (api: ApiPromise) => {
+ const approveNftTx = api.tx.nft.approve(normalizeAccountId(approved), collectionId, tokenId, amount);
+ const events = await submitTransactionAsync(admin, approveNftTx);
+ const result = getGenericResult(events);
expect(result.success).to.be.true;
- const allowanceAfter =
- await api.query.nft.allowances(collectionId, [tokenId, owner.address, toSubstrateAddress(approved)]) as unknown as BN;
- expect(allowanceAfter.sub(allowanceBefore).toString()).to.be.equal(amount.toString());
+
+ expect(await getAllowance(api, collectionId, owner, approved, tokenId)).to.be.equal(BigInt(amount));
});
}
@@ -747,9 +751,9 @@
) {
await usingApi(async (api: ApiPromise) => {
const to = normalizeAccountId(accountTo);
- let balanceBefore = new BN(0);
+ let balanceBefore = 0n;
if (type === 'Fungible') {
- balanceBefore = await api.query.nft.balance(collectionId, toSubstrateAddress(to)) as unknown as BN;
+ balanceBefore = await getBalance(api, collectionId, to, tokenId);
}
const transferFromTx = api.tx.nft.transferFrom(normalizeAccountId(accountFrom), to, collectionId, tokenId, value);
const events = await submitTransactionAsync(accountApproved, transferFromTx);
@@ -757,18 +761,14 @@
// tslint:disable-next-line:no-unused-expression
expect(result.success).to.be.true;
if (type === 'NFT') {
- const nftItemData = (await api.query.nft.nftItemList(collectionId, tokenId) as any).toJSON() as ITokenDataType;
- expect(nftItemData.owner).to.be.deep.equal(to);
+ expect(await getTokenOwner(api, collectionId, tokenId)).to.be.deep.equal(to);
}
if (type === 'Fungible') {
- const balanceAfter = (await api.query.nft.fungibleItemList(collectionId, toSubstrateAddress(to)) as any).value as unknown as BN;
- expect(balanceAfter.sub(balanceBefore).toString()).to.be.equal(value.toString());
+ const balanceAfter = await getBalance(api, collectionId, to, tokenId);
+ expect(balanceAfter - balanceBefore).to.be.equal(BigInt(value));
}
if (type === 'ReFungible') {
- const nftItemData =
- (await api.query.nft.reFungibleItemList(collectionId, tokenId) as any).toJSON() as IReFungibleTokenDataType;
- expect(nftItemData.owner[0].owner).to.be.deep.equal(normalizeAccountId(to));
- expect(nftItemData.owner[0].fraction).to.be.equal(value);
+ expect(await getBalance(api, collectionId, to, tokenId)).to.be.equal(BigInt(value));
}
});
}
@@ -801,9 +801,9 @@
});
}
-export async function addCollectionAdminExpectSuccess(sender: IKeyringPair, collectionId: number, address: IKeyringPair) {
+export async function addCollectionAdminExpectSuccess(sender: IKeyringPair, collectionId: number, address: string | CrossAccountId) {
await usingApi(async (api) => {
- const changeAdminTx = api.tx.nft.addCollectionAdmin(collectionId, normalizeAccountId(address.address));
+ const changeAdminTx = api.tx.nft.addCollectionAdmin(collectionId, normalizeAccountId(address));
const events = await submitTransactionAsync(sender, changeAdminTx);
const result = getCreateCollectionResult(events);
expect(result.success).to.be.true;
@@ -828,7 +828,6 @@
sender: IKeyringPair,
recipient: IKeyringPair,
value: number | bigint = 1,
- blockTimeMs: number,
blockSchedule: number,
) {
await usingApi(async (api: ApiPromise) => {
@@ -836,24 +835,22 @@
const expectedBlockNumber = blockNumber + blockSchedule;
expect(blockNumber).to.be.greaterThan(0);
- const transferTx = await api.tx.nft.transfer(normalizeAccountId(recipient.address), collectionId, tokenId, value);
- const scheduleTx = await api.tx.scheduler.schedule(expectedBlockNumber, null, 0, transferTx);
+ const transferTx = api.tx.nft.transfer(normalizeAccountId(recipient.address), collectionId, tokenId, value);
+ const scheduleTx = api.tx.scheduler.schedule(expectedBlockNumber, null, 0, transferTx as any);
await submitTransactionAsync(sender, scheduleTx);
- const recipientBalanceBefore = new BigNumber((await api.query.system.account(recipient.address)).data.free.toString());
+ const recipientBalanceBefore = (await api.query.system.account(recipient.address)).data.free.toBigInt();
- const nftItemDataBefore = (await api.query.nft.nftItemList(collectionId, tokenId)).toJSON() as any as ITokenDataType;
- expect(toSubstrateAddress(nftItemDataBefore.owner)).to.be.equal(sender.address);
+ expect(await getTokenOwner(api, collectionId, tokenId)).to.be.deep.equal(normalizeAccountId(sender.address));
// sleep for 4 blocks
- await new Promise(resolve => setTimeout(resolve, blockTimeMs * (blockSchedule + 1)));
+ await waitNewBlocks(blockSchedule + 1);
- const recipientBalanceAfter = new BigNumber((await api.query.system.account(recipient.address)).data.free.toString());
+ const recipientBalanceAfter = (await api.query.system.account(recipient.address)).data.free.toBigInt();
- const nftItemData = (await api.query.nft.nftItemList(collectionId, tokenId)).toJSON() as unknown as ITokenDataType;
- expect(toSubstrateAddress(nftItemData.owner)).to.be.equal(recipient.address);
- expect(recipientBalanceAfter.toNumber()).to.be.equal(recipientBalanceBefore.toNumber());
+ expect(await getTokenOwner(api, collectionId, tokenId)).to.be.deep.equal(normalizeAccountId(recipient.address));
+ expect(recipientBalanceAfter).to.be.equal(recipientBalanceBefore);
});
}
@@ -870,9 +867,9 @@
await usingApi(async (api: ApiPromise) => {
const to = normalizeAccountId(recipient);
- let balanceBefore = new BN(0);
+ let balanceBefore = 0n;
if (type === 'Fungible') {
- balanceBefore = await api.query.nft.balance(collectionId, toSubstrateAddress(to)) as unknown as BN;
+ balanceBefore = await getBalance(api, collectionId, to, tokenId);
}
const transferTx = api.tx.nft.transfer(to, collectionId, tokenId, value);
const events = await submitTransactionAsync(sender, transferTx);
@@ -883,23 +880,16 @@
expect(result.itemId).to.be.equal(tokenId);
expect(result.sender).to.be.deep.equal(normalizeAccountId(sender.address));
expect(result.recipient).to.be.deep.equal(to);
- expect(result.value.toString()).to.be.equal(value.toString());
+ expect(result.value).to.be.equal(BigInt(value));
if (type === 'NFT') {
- const nftItemData = (await api.query.nft.nftItemList(collectionId, tokenId)).toJSON() as unknown as ITokenDataType;
- expect(nftItemData.owner).to.be.deep.equal(to);
+ expect(await getTokenOwner(api, collectionId, tokenId)).to.be.deep.equal(to);
}
if (type === 'Fungible') {
- const balanceAfter = (await api.query.nft.fungibleItemList(collectionId, toSubstrateAddress(to)) as any).value as unknown as BN;
- expect(balanceAfter.sub(balanceBefore).toString()).to.be.equal(value.toString());
+ const balanceAfter = await getBalance(api, collectionId, to, tokenId);
+ expect(balanceAfter - balanceBefore).to.be.equal(BigInt(value));
}
if (type === 'ReFungible') {
- const nftItemData =
- (await api.query.nft.reFungibleItemList(collectionId, tokenId)).toJSON() as unknown as IReFungibleTokenDataType;
- const expectedOwner = toSubstrateAddress(to);
- const ownerIndex = nftItemData.owner.findIndex(v => toSubstrateAddress(v.owner as any as string) == expectedOwner);
- expect(ownerIndex).to.not.equal(-1);
- expect(nftItemData.owner[ownerIndex].owner).to.be.deep.equal(normalizeAccountId(to));
- expect(nftItemData.owner[ownerIndex].fraction).to.be.greaterThanOrEqual(value as number);
+ expect(await getBalance(api, collectionId, to, tokenId) >= value).to.be.true;
}
});
}
@@ -937,15 +927,54 @@
});
}
-export async function getFungibleBalance(
+export async function getBalance(
+ api: ApiPromise,
+ collectionId: number,
+ owner: string | CrossAccountId,
+ token: number,
+): Promise<bigint> {
+ return (await api.rpc.nft.balance(collectionId, normalizeAccountId(owner), token)).toBigInt();
+}
+export async function getTokenOwner(
+ api: ApiPromise,
+ collectionId: number,
+ token: number,
+): Promise<CrossAccountId> {
+ return normalizeAccountId((await api.rpc.nft.tokenOwner(collectionId, token)).toJSON() as any);
+}
+export async function isTokenExists(
+ api: ApiPromise,
+ collectionId: number,
+ token: number,
+): Promise<boolean> {
+ return (await api.rpc.nft.tokenExists(collectionId, token)).toJSON();
+}
+export async function getLastTokenId(
+ api: ApiPromise,
collectionId: number,
- owner: string,
-) {
- return await usingApi(async (api) => {
- const response = (await api.query.nft.fungibleItemList(collectionId, owner)).toJSON() as unknown as { value: string };
- return BigInt(response.value);
- });
+): Promise<number> {
+ return (await api.rpc.nft.lastTokenId(collectionId)).toJSON();
}
+export async function getAdminList(
+ api: ApiPromise,
+ collectionId: number,
+): Promise<string[]> {
+ return (await api.rpc.nft.adminlist(collectionId)).toHuman() as any;
+}
+export async function getVariableMetadata(
+ api: ApiPromise,
+ collectionId: number,
+ tokenId: number,
+): Promise<number[]> {
+ return [...(await api.rpc.nft.variableMetadata(collectionId, tokenId))];
+}
+export async function getConstMetadata(
+ api: ApiPromise,
+ collectionId: number,
+ tokenId: number,
+): Promise<number[]> {
+ return [...(await api.rpc.nft.constMetadata(collectionId, tokenId))];
+}
export async function createFungibleItemExpectSuccess(
sender: IKeyringPair,
@@ -954,7 +983,7 @@
owner: CrossAccountId | string = sender.address,
) {
return await usingApi(async (api) => {
- const tx = api.tx.nft.createItem(collectionId, normalizeAccountId(owner), { Fungible: data });
+ const tx = api.tx.nft.createItem(collectionId, normalizeAccountId(owner), {Fungible: data});
const events = await submitTransactionAsync(sender, tx);
const result = getCreateItemResult(events);
@@ -968,39 +997,37 @@
let newItemId = 0;
await usingApi(async (api) => {
const to = normalizeAccountId(owner);
- const AItemCount = parseInt((await api.query.nft.itemListIndex(collectionId)).toString(), 10);
- const Aitem: any = (await api.query.nft.fungibleItemList(collectionId, toSubstrateAddress(to))).toJSON();
- const AItemBalance = new BigNumber(Aitem.value);
+ const itemCountBefore = await getLastTokenId(api, collectionId);
+ const itemBalanceBefore = await getBalance(api, collectionId, to, newItemId);
let tx;
if (createMode === 'Fungible') {
- const createData = { fungible: { value: 10 } };
- tx = api.tx.nft.createItem(collectionId, to, createData);
+ const createData = {fungible: {value: 10}};
+ tx = api.tx.nft.createItem(collectionId, to, createData as any);
} else if (createMode === 'ReFungible') {
- const createData = { refungible: { const_data: [], variable_data: [], pieces: 100 } };
- tx = api.tx.nft.createItem(collectionId, to, createData);
+ const createData = {refungible: {const_data: [], variable_data: [], pieces: 100}};
+ tx = api.tx.nft.createItem(collectionId, to, createData as any);
} else {
- const createData = { nft: { const_data: [], variable_data: [] } };
- tx = api.tx.nft.createItem(collectionId, to, createData);
+ const createData = {nft: {const_data: [], variable_data: []}};
+ tx = api.tx.nft.createItem(collectionId, to, createData as any);
}
const events = await submitTransactionAsync(sender, tx);
const result = getCreateItemResult(events);
- const BItemCount = parseInt((await api.query.nft.itemListIndex(collectionId)).toString(), 10);
- const Bitem: any = (await api.query.nft.fungibleItemList(collectionId, toSubstrateAddress(to))).toJSON();
- const BItemBalance = new BigNumber(Bitem.value);
+ const itemCountAfter = await getLastTokenId(api, collectionId);
+ const itemBalanceAfter = await getBalance(api, collectionId, to, newItemId);
// What to expect
// tslint:disable-next-line:no-unused-expression
expect(result.success).to.be.true;
if (createMode === 'Fungible') {
- expect(BItemBalance.minus(AItemBalance).toNumber()).to.be.equal(10);
+ expect(itemBalanceAfter - itemBalanceBefore).to.be.equal(10n);
} else {
- expect(BItemCount).to.be.equal(AItemCount + 1);
+ expect(itemCountAfter).to.be.equal(itemCountBefore + 1);
}
expect(collectionId).to.be.equal(result.collectionId);
- expect(BItemCount.toString()).to.be.equal(result.itemId.toString());
+ expect(itemCountAfter.toString()).to.be.equal(result.itemId.toString());
expect(to).to.be.deep.equal(result.recipient);
newItemId = result.itemId;
});
@@ -1030,12 +1057,12 @@
const result = getGenericResult(events);
// Get the collection
- const collection: any = (await api.query.nft.collectionById(collectionId)).toJSON();
+ const collection = (await api.query.common.collectionById(collectionId)).unwrap();
// What to expect
// tslint:disable-next-line:no-unused-expression
expect(result.success).to.be.true;
- expect(collection.access).to.be.equal(accessMode);
+ expect(collection.access.toHuman()).to.be.equal(accessMode);
});
}
@@ -1075,14 +1102,12 @@
const tx = api.tx.nft.setMintPermission(collectionId, enabled);
const events = await submitTransactionAsync(sender, tx);
const result = getGenericResult(events);
+ expect(result.success).to.be.true;
// Get the collection
- const collection: any = (await api.query.nft.collectionById(collectionId)).toJSON();
+ const collection = (await api.query.common.collectionById(collectionId)).unwrap();
- // What to expect
- // tslint:disable-next-line:no-unused-expression
- expect(result.success).to.be.true;
- expect(collection.mintMode).to.be.equal(enabled);
+ expect(collection.mintMode.toHuman()).to.be.equal(enabled);
});
}
@@ -1112,55 +1137,38 @@
});
}
-export async function isWhitelisted(collectionId: number, address: string) {
- let whitelisted = false;
- await usingApi(async (api) => {
- whitelisted = (await api.query.nft.whiteList(collectionId, address)).toJSON() as unknown as boolean;
+export async function isWhitelisted(collectionId: number, address: string | CrossAccountId) {
+ return await usingApi(async (api) => {
+ return (await api.query.common.allowlist(collectionId, normalizeAccountId(address))).toJSON();
});
- return whitelisted;
}
-export async function addToWhiteListExpectSuccess(sender: IKeyringPair, collectionId: number, address: string | AccountId) {
+export async function addToWhiteListExpectSuccess(sender: IKeyringPair, collectionId: number, address: string | AccountId | CrossAccountId) {
await usingApi(async (api) => {
+ expect(await isWhitelisted(collectionId, normalizeAccountId(address))).to.be.false;
- const whiteListedBefore = (await api.query.nft.whiteList(collectionId, address)).toJSON();
-
// Run the transaction
const tx = api.tx.nft.addToWhiteList(collectionId, normalizeAccountId(address));
const events = await submitTransactionAsync(sender, tx);
const result = getGenericResult(events);
-
- const whiteListedAfter = (await api.query.nft.whiteList(collectionId, address)).toJSON();
+ expect(result.success).to.be.true;
- // What to expect
- // tslint:disable-next-line:no-unused-expression
- expect(result.success).to.be.true;
- // tslint:disable-next-line: no-unused-expression
- expect(whiteListedBefore).to.be.false;
- // tslint:disable-next-line: no-unused-expression
- expect(whiteListedAfter).to.be.true;
+ expect(await isWhitelisted(collectionId, normalizeAccountId(address))).to.be.true;
});
}
export async function addToWhiteListAgainExpectSuccess(sender: IKeyringPair, collectionId: number, address: string | AccountId) {
await usingApi(async (api) => {
- const whiteListedBefore = (await api.query.nft.whiteList(collectionId, address)).toJSON();
+ expect(await isWhitelisted(collectionId, normalizeAccountId(address))).to.be.true;
// Run the transaction
const tx = api.tx.nft.addToWhiteList(collectionId, normalizeAccountId(address));
const events = await submitTransactionAsync(sender, tx);
const result = getGenericResult(events);
-
- const whiteListedAfter = (await api.query.nft.whiteList(collectionId, address)).toJSON();
+ expect(result.success).to.be.true;
- // What to expect
- // tslint:disable-next-line:no-unused-expression
- expect(result.success).to.be.true;
- // tslint:disable-next-line: no-unused-expression
- expect(whiteListedBefore).to.be.true;
- // tslint:disable-next-line: no-unused-expression
- expect(whiteListedAfter).to.be.true;
+ expect(await isWhitelisted(collectionId, normalizeAccountId(address))).to.be.true;
});
}
@@ -1205,23 +1213,17 @@
}
export const getDetailedCollectionInfo = async (api: ApiPromise, collectionId: number)
- : Promise<ICollectionInterface | null> => {
- return (await api.query.nft.collectionById(collectionId)).toJSON() as unknown as ICollectionInterface;
+ : Promise<NftDataStructsCollection | null> => {
+ return (await api.query.common.collectionById(collectionId)).unwrapOr(null);
};
export const getCreatedCollectionCount = async (api: ApiPromise): Promise<number> => {
// set global object - collectionsCount
- return (await api.query.nft.createdCollectionCount() as unknown as BN).toNumber();
+ return (await api.query.common.createdCollectionCount()).toNumber();
};
-export async function queryCollectionExpectSuccess(collectionId: number): Promise<ICollectionInterface> {
- return await usingApi(async (api) => {
- return (await api.query.nft.collectionById(collectionId)).toJSON() as unknown as ICollectionInterface;
- });
-}
-
-export async function queryNftOwner(api: ApiPromise, collectionId: number, tokenId: number): Promise<CrossAccountId> {
- return normalizeAccountId((await api.query.nft.nftItemList(collectionId, tokenId) as any).toJSON().owner);
+export async function queryCollectionExpectSuccess(api: ApiPromise, collectionId: number): Promise<NftDataStructsCollection> {
+ return (await api.query.common.collectionById(collectionId)).unwrap();
}
export async function waitNewBlocks(blocksCount = 1): Promise<void> {
tests/src/whiteLists.test.tsdiffbeforeafterboth--- a/tests/src/whiteLists.test.ts
+++ b/tests/src/whiteLists.test.ts
@@ -3,11 +3,11 @@
// file 'LICENSE', which is part of this source code package.
//
-import { IKeyringPair } from '@polkadot/types/types';
+import {IKeyringPair} from '@polkadot/types/types';
import chai from 'chai';
import chaiAsPromised from 'chai-as-promised';
import privateKey from './substrate/privateKey';
-import usingApi, { submitTransactionExpectFailAsync } from './substrate/substrate-api';
+import usingApi, {submitTransactionExpectFailAsync} from './substrate/substrate-api';
import {
addToWhiteListExpectSuccess,
createCollectionExpectSuccess,
@@ -32,276 +32,273 @@
chai.use(chaiAsPromised);
const expect = chai.expect;
-let Alice: IKeyringPair;
-let Bob: IKeyringPair;
-let Charlie: IKeyringPair;
+let alice: IKeyringPair;
+let bob: IKeyringPair;
+let charlie: IKeyringPair;
describe('Integration Test ext. White list tests', () => {
before(async () => {
await usingApi(async () => {
- Alice = privateKey('//Alice');
- Bob = privateKey('//Bob');
- Charlie = privateKey('//Charlie');
+ alice = privateKey('//Alice');
+ bob = privateKey('//Bob');
+ charlie = privateKey('//Charlie');
});
});
it('Owner can add address to white list', async () => {
const collectionId = await createCollectionExpectSuccess();
- await addToWhiteListExpectSuccess(Alice, collectionId, Bob.address);
+ await addToWhiteListExpectSuccess(alice, collectionId, bob.address);
});
it('Admin can add address to white list', async () => {
const collectionId = await createCollectionExpectSuccess();
- await addCollectionAdminExpectSuccess(Alice, collectionId, Bob);
- await addToWhiteListExpectSuccess(Bob, collectionId, Charlie.address);
+ await addCollectionAdminExpectSuccess(alice, collectionId, bob.address);
+ await addToWhiteListExpectSuccess(bob, collectionId, charlie.address);
});
it('Non-privileged user cannot add address to white list', async () => {
const collectionId = await createCollectionExpectSuccess();
- await addToWhiteListExpectFail(Bob, collectionId, Charlie.address);
+ await addToWhiteListExpectFail(bob, collectionId, charlie.address);
});
it('Nobody can add address to white list of non-existing collection', async () => {
const collectionId = (1<<32) - 1;
- await addToWhiteListExpectFail(Alice, collectionId, Bob.address);
+ await addToWhiteListExpectFail(alice, collectionId, bob.address);
});
it('Nobody can add address to white list of destroyed collection', async () => {
const collectionId = await createCollectionExpectSuccess();
await destroyCollectionExpectSuccess(collectionId, '//Alice');
- await addToWhiteListExpectFail(Alice, collectionId, Bob.address);
+ await addToWhiteListExpectFail(alice, collectionId, bob.address);
});
it('If address is already added to white list, nothing happens', async () => {
const collectionId = await createCollectionExpectSuccess();
- await addToWhiteListExpectSuccess(Alice, collectionId, Bob.address);
- await addToWhiteListAgainExpectSuccess(Alice, collectionId, Bob.address);
+ await addToWhiteListExpectSuccess(alice, collectionId, bob.address);
+ await addToWhiteListAgainExpectSuccess(alice, collectionId, bob.address);
});
it('Owner can remove address from white list', async () => {
const collectionId = await createCollectionExpectSuccess();
- await addToWhiteListExpectSuccess(Alice, collectionId, Bob.address);
- await removeFromWhiteListExpectSuccess(Alice, collectionId, normalizeAccountId(Bob));
- });
+ await addToWhiteListExpectSuccess(alice, collectionId, bob.address);
+ await removeFromWhiteListExpectSuccess(alice, collectionId, normalizeAccountId(bob));
+ });
it('Admin can remove address from white list', async () => {
const collectionId = await createCollectionExpectSuccess();
- await addCollectionAdminExpectSuccess(Alice, collectionId, Bob);
- await addToWhiteListExpectSuccess(Alice, collectionId, Charlie.address);
- await removeFromWhiteListExpectSuccess(Bob, collectionId, normalizeAccountId(Charlie));
- });
+ await addCollectionAdminExpectSuccess(alice, collectionId, bob.address);
+ await addToWhiteListExpectSuccess(alice, collectionId, charlie.address);
+ await removeFromWhiteListExpectSuccess(bob, collectionId, normalizeAccountId(charlie));
+ });
it('Non-privileged user cannot remove address from white list', async () => {
const collectionId = await createCollectionExpectSuccess();
- await addToWhiteListExpectSuccess(Alice, collectionId, Charlie.address);
- await removeFromWhiteListExpectFailure(Bob, collectionId, normalizeAccountId(Charlie));
- });
+ await addToWhiteListExpectSuccess(alice, collectionId, charlie.address);
+ await removeFromWhiteListExpectFailure(bob, collectionId, normalizeAccountId(charlie));
+ });
it('Nobody can remove address from white list of non-existing collection', async () => {
const collectionId = (1<<32) - 1;
- await removeFromWhiteListExpectFailure(Alice, collectionId, normalizeAccountId(Charlie));
- });
-
+ await removeFromWhiteListExpectFailure(alice, collectionId, normalizeAccountId(charlie));
+ });
-
it('Nobody can remove address from white list of deleted collection', async () => {
const collectionId = await createCollectionExpectSuccess();
- await addToWhiteListExpectSuccess(Alice, collectionId, Charlie.address);
+ await addToWhiteListExpectSuccess(alice, collectionId, charlie.address);
await destroyCollectionExpectSuccess(collectionId, '//Alice');
- await removeFromWhiteListExpectFailure(Alice, collectionId, normalizeAccountId(Charlie));
- });
+ await removeFromWhiteListExpectFailure(alice, collectionId, normalizeAccountId(charlie));
+ });
it('If address is already removed from white list, nothing happens', async () => {
const collectionId = await createCollectionExpectSuccess();
- await addToWhiteListExpectSuccess(Alice, collectionId, Charlie.address);
- await removeFromWhiteListExpectSuccess(Alice, collectionId, normalizeAccountId(Charlie));
- await removeFromWhiteListExpectSuccess(Alice, collectionId, normalizeAccountId(Charlie));
- });
+ await addToWhiteListExpectSuccess(alice, collectionId, charlie.address);
+ await removeFromWhiteListExpectSuccess(alice, collectionId, normalizeAccountId(charlie));
+ await removeFromWhiteListExpectSuccess(alice, collectionId, normalizeAccountId(charlie));
+ });
it('If Public Access mode is set to WhiteList, tokens can’t be transferred from a non-whitelisted address with transfer or transferFrom. Test1', async () => {
const collectionId = await createCollectionExpectSuccess();
- const itemId = await createItemExpectSuccess(Alice, collectionId, 'NFT', Alice.address);
- await enableWhiteListExpectSuccess(Alice, collectionId);
- await addToWhiteListExpectSuccess(Alice, collectionId, Charlie.address);
+ const itemId = await createItemExpectSuccess(alice, collectionId, 'NFT', alice.address);
+ await enableWhiteListExpectSuccess(alice, collectionId);
+ await addToWhiteListExpectSuccess(alice, collectionId, charlie.address);
await transferExpectFailure(
collectionId,
itemId,
- Alice,
- Charlie,
+ alice,
+ charlie,
1,
);
- });
+ });
it('If Public Access mode is set to WhiteList, tokens can’t be transferred from a non-whitelisted address with transfer or transferFrom. Test2', async () => {
const collectionId = await createCollectionExpectSuccess();
- const itemId = await createItemExpectSuccess(Alice, collectionId, 'NFT', Alice.address);
- await enableWhiteListExpectSuccess(Alice, collectionId);
- await addToWhiteListExpectSuccess(Alice, collectionId, Alice.address);
- await addToWhiteListExpectSuccess(Alice, collectionId, Charlie.address);
- await approveExpectSuccess(collectionId, itemId, Alice, Charlie);
- await removeFromWhiteListExpectSuccess(Alice, collectionId, normalizeAccountId(Alice));
+ const itemId = await createItemExpectSuccess(alice, collectionId, 'NFT', alice.address);
+ await enableWhiteListExpectSuccess(alice, collectionId);
+ await addToWhiteListExpectSuccess(alice, collectionId, alice.address);
+ await addToWhiteListExpectSuccess(alice, collectionId, charlie.address);
+ await approveExpectSuccess(collectionId, itemId, alice, charlie.address);
+ await removeFromWhiteListExpectSuccess(alice, collectionId, normalizeAccountId(alice));
await transferExpectFailure(
collectionId,
itemId,
- Alice,
- Charlie,
+ alice,
+ charlie,
1,
);
- });
+ });
it('If Public Access mode is set to WhiteList, tokens can’t be transferred to a non-whitelisted address with transfer or transferFrom. Test1', async () => {
const collectionId = await createCollectionExpectSuccess();
- const itemId = await createItemExpectSuccess(Alice, collectionId, 'NFT', Alice.address);
- await enableWhiteListExpectSuccess(Alice, collectionId);
- await addToWhiteListExpectSuccess(Alice, collectionId, Alice.address);
+ const itemId = await createItemExpectSuccess(alice, collectionId, 'NFT', alice.address);
+ await enableWhiteListExpectSuccess(alice, collectionId);
+ await addToWhiteListExpectSuccess(alice, collectionId, alice.address);
await transferExpectFailure(
collectionId,
itemId,
- Alice,
- Charlie,
+ alice,
+ charlie,
1,
);
- });
+ });
it('If Public Access mode is set to WhiteList, tokens can’t be transferred to a non-whitelisted address with transfer or transferFrom. Test2', async () => {
const collectionId = await createCollectionExpectSuccess();
- const itemId = await createItemExpectSuccess(Alice, collectionId, 'NFT', Alice.address);
- await enableWhiteListExpectSuccess(Alice, collectionId);
- await addToWhiteListExpectSuccess(Alice, collectionId, Alice.address);
- await addToWhiteListExpectSuccess(Alice, collectionId, Charlie.address);
- await approveExpectSuccess(collectionId, itemId, Alice, Charlie);
- await removeFromWhiteListExpectSuccess(Alice, collectionId, normalizeAccountId(Alice));
+ const itemId = await createItemExpectSuccess(alice, collectionId, 'NFT', alice.address);
+ await enableWhiteListExpectSuccess(alice, collectionId);
+ await addToWhiteListExpectSuccess(alice, collectionId, alice.address);
+ await addToWhiteListExpectSuccess(alice, collectionId, charlie.address);
+ await approveExpectSuccess(collectionId, itemId, alice, charlie.address);
+ await removeFromWhiteListExpectSuccess(alice, collectionId, normalizeAccountId(alice));
await transferExpectFailure(
collectionId,
itemId,
- Alice,
- Charlie,
+ alice,
+ charlie,
1,
);
- });
+ });
it('If Public Access mode is set to WhiteList, tokens can’t be destroyed by a non-whitelisted address (even if it owned them before enabling WhiteList mode)', async () => {
const collectionId = await createCollectionExpectSuccess();
- const itemId = await createItemExpectSuccess(Alice, collectionId, 'NFT', Alice.address);
- await enableWhiteListExpectSuccess(Alice, collectionId);
+ const itemId = await createItemExpectSuccess(alice, collectionId, 'NFT', alice.address);
+ await enableWhiteListExpectSuccess(alice, collectionId);
await usingApi(async (api) => {
const tx = api.tx.nft.burnItem(collectionId, itemId, /*normalizeAccountId(Alice.address),*/ 11);
- const badTransaction = async function () {
- await submitTransactionExpectFailAsync(Alice, tx);
+ const badTransaction = async function () {
+ await submitTransactionExpectFailAsync(alice, tx);
};
await expect(badTransaction()).to.be.rejected;
});
- });
-
+ });
+
it('If Public Access mode is set to WhiteList, token transfers can’t be Approved by a non-whitelisted address (see Approve method)', async () => {
const collectionId = await createCollectionExpectSuccess();
- const itemId = await createItemExpectSuccess(Alice, collectionId, 'NFT', Alice.address);
- await enableWhiteListExpectSuccess(Alice, collectionId);
- await approveExpectFail(collectionId, itemId, Alice, Bob);
- });
-
+ const itemId = await createItemExpectSuccess(alice, collectionId, 'NFT', alice.address);
+ await enableWhiteListExpectSuccess(alice, collectionId);
+ await approveExpectFail(collectionId, itemId, alice, bob);
+ });
+
it('If Public Access mode is set to WhiteList, tokens can be transferred to a whitelisted address with transfer.', async () => {
const collectionId = await createCollectionExpectSuccess();
- const itemId = await createItemExpectSuccess(Alice, collectionId, 'NFT', Alice.address);
- await enableWhiteListExpectSuccess(Alice, collectionId);
- await addToWhiteListExpectSuccess(Alice, collectionId, Alice.address);
- await addToWhiteListExpectSuccess(Alice, collectionId, Charlie.address);
- await transferExpectSuccess(collectionId, itemId, Alice, Charlie, 1, 'NFT');
- });
+ const itemId = await createItemExpectSuccess(alice, collectionId, 'NFT', alice.address);
+ await enableWhiteListExpectSuccess(alice, collectionId);
+ await addToWhiteListExpectSuccess(alice, collectionId, alice.address);
+ await addToWhiteListExpectSuccess(alice, collectionId, charlie.address);
+ await transferExpectSuccess(collectionId, itemId, alice, charlie, 1, 'NFT');
+ });
it('If Public Access mode is set to WhiteList, tokens can be transferred to a whitelisted address with transferFrom.', async () => {
const collectionId = await createCollectionExpectSuccess();
- const itemId = await createItemExpectSuccess(Alice, collectionId, 'NFT', Alice.address);
- await enableWhiteListExpectSuccess(Alice, collectionId);
- await addToWhiteListExpectSuccess(Alice, collectionId, Alice.address);
- await addToWhiteListExpectSuccess(Alice, collectionId, Charlie.address);
- await approveExpectSuccess(collectionId, itemId, Alice, Charlie);
- await transferFromExpectSuccess(collectionId, itemId, Alice, Alice, Charlie, 1, 'NFT');
+ const itemId = await createItemExpectSuccess(alice, collectionId, 'NFT', alice.address);
+ await enableWhiteListExpectSuccess(alice, collectionId);
+ await addToWhiteListExpectSuccess(alice, collectionId, alice.address);
+ await addToWhiteListExpectSuccess(alice, collectionId, charlie.address);
+ await approveExpectSuccess(collectionId, itemId, alice, charlie.address);
+ await transferFromExpectSuccess(collectionId, itemId, alice, alice, charlie, 1, 'NFT');
});
it('If Public Access mode is set to WhiteList, tokens can be transferred from a whitelisted address with transfer', async () => {
const collectionId = await createCollectionExpectSuccess();
- const itemId = await createItemExpectSuccess(Alice, collectionId, 'NFT', Alice.address);
- await enableWhiteListExpectSuccess(Alice, collectionId);
- await addToWhiteListExpectSuccess(Alice, collectionId, Alice.address);
- await addToWhiteListExpectSuccess(Alice, collectionId, Charlie.address);
- await transferExpectSuccess(collectionId, itemId, Alice, Charlie, 1, 'NFT');
+ const itemId = await createItemExpectSuccess(alice, collectionId, 'NFT', alice.address);
+ await enableWhiteListExpectSuccess(alice, collectionId);
+ await addToWhiteListExpectSuccess(alice, collectionId, alice.address);
+ await addToWhiteListExpectSuccess(alice, collectionId, charlie.address);
+ await transferExpectSuccess(collectionId, itemId, alice, charlie, 1, 'NFT');
});
it('If Public Access mode is set to WhiteList, tokens can be transferred from a whitelisted address with transferFrom', async () => {
const collectionId = await createCollectionExpectSuccess();
- const itemId = await createItemExpectSuccess(Alice, collectionId, 'NFT', Alice.address);
- await enableWhiteListExpectSuccess(Alice, collectionId);
- await addToWhiteListExpectSuccess(Alice, collectionId, Alice.address);
- await addToWhiteListExpectSuccess(Alice, collectionId, Charlie.address);
- await approveExpectSuccess(collectionId, itemId, Alice, Charlie);
- await transferFromExpectSuccess(collectionId, itemId, Alice, Alice, Charlie, 1, 'NFT');
+ const itemId = await createItemExpectSuccess(alice, collectionId, 'NFT', alice.address);
+ await enableWhiteListExpectSuccess(alice, collectionId);
+ await addToWhiteListExpectSuccess(alice, collectionId, alice.address);
+ await addToWhiteListExpectSuccess(alice, collectionId, charlie.address);
+ await approveExpectSuccess(collectionId, itemId, alice, charlie.address);
+ await transferFromExpectSuccess(collectionId, itemId, alice, alice, charlie, 1, 'NFT');
});
it('If Public Access mode is set to WhiteList, and Mint Permission is set to false, tokens can be created by owner', async () => {
const collectionId = await createCollectionExpectSuccess();
- await enableWhiteListExpectSuccess(Alice, collectionId);
- await setMintPermissionExpectSuccess(Alice, collectionId, false);
- await createItemExpectSuccess(Alice, collectionId, 'NFT', Alice.address);
+ await enableWhiteListExpectSuccess(alice, collectionId);
+ await setMintPermissionExpectSuccess(alice, collectionId, false);
+ await createItemExpectSuccess(alice, collectionId, 'NFT', alice.address);
});
it('If Public Access mode is set to WhiteList, and Mint Permission is set to false, tokens can be created by admin', async () => {
const collectionId = await createCollectionExpectSuccess();
- await enableWhiteListExpectSuccess(Alice, collectionId);
- await setMintPermissionExpectSuccess(Alice, collectionId, false);
- await addCollectionAdminExpectSuccess(Alice, collectionId, Bob);
- await createItemExpectSuccess(Bob, collectionId, 'NFT', Bob.address);
+ await enableWhiteListExpectSuccess(alice, collectionId);
+ await setMintPermissionExpectSuccess(alice, collectionId, false);
+ await addCollectionAdminExpectSuccess(alice, collectionId, bob.address);
+ await createItemExpectSuccess(bob, collectionId, 'NFT', bob.address);
});
it('If Public Access mode is set to WhiteList, and Mint Permission is set to false, tokens cannot be created by non-privileged and white-listed address', async () => {
const collectionId = await createCollectionExpectSuccess();
- await enableWhiteListExpectSuccess(Alice, collectionId);
- await setMintPermissionExpectSuccess(Alice, collectionId, false);
- await addToWhiteListExpectSuccess(Alice, collectionId, Bob.address);
- await createItemExpectFailure(Bob, collectionId, 'NFT', Bob.address);
+ await enableWhiteListExpectSuccess(alice, collectionId);
+ await setMintPermissionExpectSuccess(alice, collectionId, false);
+ await addToWhiteListExpectSuccess(alice, collectionId, bob.address);
+ await createItemExpectFailure(bob, collectionId, 'NFT', bob.address);
});
it('If Public Access mode is set to WhiteList, and Mint Permission is set to false, tokens cannot be created by non-privileged and non-white listed address', async () => {
const collectionId = await createCollectionExpectSuccess();
- await enableWhiteListExpectSuccess(Alice, collectionId);
- await setMintPermissionExpectSuccess(Alice, collectionId, false);
- await createItemExpectFailure(Bob, collectionId, 'NFT', Bob.address);
+ await enableWhiteListExpectSuccess(alice, collectionId);
+ await setMintPermissionExpectSuccess(alice, collectionId, false);
+ await createItemExpectFailure(bob, collectionId, 'NFT', bob.address);
});
it('If Public Access mode is set to WhiteList, and Mint Permission is set to true, tokens can be created by owner', async () => {
const collectionId = await createCollectionExpectSuccess();
- await enableWhiteListExpectSuccess(Alice, collectionId);
- await setMintPermissionExpectSuccess(Alice, collectionId, true);
- await createItemExpectSuccess(Alice, collectionId, 'NFT', Alice.address);
- });
+ await enableWhiteListExpectSuccess(alice, collectionId);
+ await setMintPermissionExpectSuccess(alice, collectionId, true);
+ await createItemExpectSuccess(alice, collectionId, 'NFT', alice.address);
+ });
it('If Public Access mode is set to WhiteList, and Mint Permission is set to true, tokens can be created by admin', async () => {
const collectionId = await createCollectionExpectSuccess();
- await enableWhiteListExpectSuccess(Alice, collectionId);
- await setMintPermissionExpectSuccess(Alice, collectionId, true);
- await addCollectionAdminExpectSuccess(Alice, collectionId, Bob);
- await createItemExpectSuccess(Bob, collectionId, 'NFT', Bob.address);
+ await enableWhiteListExpectSuccess(alice, collectionId);
+ await setMintPermissionExpectSuccess(alice, collectionId, true);
+ await addCollectionAdminExpectSuccess(alice, collectionId, bob.address);
+ await createItemExpectSuccess(bob, collectionId, 'NFT', bob.address);
});
it('If Public Access mode is set to WhiteList, and Mint Permission is set to true, tokens cannot be created by non-privileged and non-white listed address', async () => {
const collectionId = await createCollectionExpectSuccess();
- await enableWhiteListExpectSuccess(Alice, collectionId);
- await setMintPermissionExpectSuccess(Alice, collectionId, true);
- await createItemExpectFailure(Bob, collectionId, 'NFT', Bob.address);
+ await enableWhiteListExpectSuccess(alice, collectionId);
+ await setMintPermissionExpectSuccess(alice, collectionId, true);
+ await createItemExpectFailure(bob, collectionId, 'NFT', bob.address);
});
it('If Public Access mode is set to WhiteList, and Mint Permission is set to true, tokens can be created by non-privileged and white listed address', async () => {
const collectionId = await createCollectionExpectSuccess();
- await enableWhiteListExpectSuccess(Alice, collectionId);
- await setMintPermissionExpectSuccess(Alice, collectionId, true);
- await addToWhiteListExpectSuccess(Alice, collectionId, Bob.address);
- await createItemExpectSuccess(Bob, collectionId, 'NFT', Bob.address);
+ await enableWhiteListExpectSuccess(alice, collectionId);
+ await setMintPermissionExpectSuccess(alice, collectionId, true);
+ await addToWhiteListExpectSuccess(alice, collectionId, bob.address);
+ await createItemExpectSuccess(bob, collectionId, 'NFT', bob.address);
});
});
-
tests/tsconfig.jsondiffbeforeafterboth--- a/tests/tsconfig.json
+++ b/tests/tsconfig.json
@@ -13,10 +13,20 @@
"sourceMap": true,
"outDir": "dist",
"rootDir": "src",
- "strict": true
+ "strict": true,
+ "paths": {
+ "@polkadot/api/augment": [
+ "./src/interfaces/augment-api.ts"
+ ],
+ "@polkadot/types/augment": [
+ "./src/interfaces/augment-types.ts"
+ ]
+ }
},
"include": [
"src/**/*"
],
- "lib": ["es2017"]
+ "lib": [
+ "es2017"
+ ],
}
tests/yarn.lockdiffbeforeafterboth1# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.2# yarn lockfile v1345"@babel/cli@^7.15.7":6 version "7.15.7"7 resolved "https://registry.yarnpkg.com/@babel/cli/-/cli-7.15.7.tgz#62658abedb786d09c1f70229224b11a65440d7a1"8 integrity sha512-YW5wOprO2LzMjoWZ5ZG6jfbY9JnkDxuHDwvnrThnuYtByorova/I0HNXJedrUfwuXFQfYOjcqDA4PU3qlZGZjg==9 dependencies:10 commander "^4.0.1"11 convert-source-map "^1.1.0"12 fs-readdir-recursive "^1.1.0"13 glob "^7.0.0"14 make-dir "^2.1.0"15 slash "^2.0.0"16 source-map "^0.5.0"17 optionalDependencies:18 "@nicolo-ribaudo/chokidar-2" "2.1.8-no-fsevents.3"19 chokidar "^3.4.0"2021"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.12.13", "@babel/code-frame@^7.14.5":22 version "7.14.5"23 resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.14.5.tgz#23b08d740e83f49c5e59945fbf1b43e80bbf4edb"24 integrity sha512-9pzDqyc6OLDaqe+zbACgFkb6fKMNG6CObKpnYXChRsvYGyEdc7CA2BaqeOM+vOtCS5ndmJicPJhKAwYRI6UfFw==25 dependencies:26 "@babel/highlight" "^7.14.5"2728"@babel/code-frame@^7.15.8":29 version "7.15.8"30 resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.15.8.tgz#45990c47adadb00c03677baa89221f7cc23d2503"31 integrity sha512-2IAnmn8zbvC/jKYhq5Ki9I+DwjlrtMPUCH/CpHvqI4dNnlwHwsxoIhlc8WcYY5LSYknXQtAlFYuHfqAFCvQ4Wg==32 dependencies:33 "@babel/highlight" "^7.14.5"3435"@babel/compat-data@^7.13.11", "@babel/compat-data@^7.14.5":36 version "7.14.5"37 resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.14.5.tgz#8ef4c18e58e801c5c95d3c1c0f2874a2680fadea"38 integrity sha512-kixrYn4JwfAVPa0f2yfzc2AWti6WRRyO3XjWW5PJAvtE11qhSayrrcrEnee05KAtNaPC+EwehE8Qt1UedEVB8w==3940"@babel/compat-data@^7.15.0":41 version "7.15.0"42 resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.15.0.tgz#2dbaf8b85334796cafbb0f5793a90a2fc010b176"43 integrity sha512-0NqAC1IJE0S0+lL1SWFMxMkz1pKCNCjI4tr2Zx4LJSXxCLAdr6KyArnY+sno5m3yH9g737ygOyPABDsnXkpxiA==4445"@babel/core@^7.1.0", "@babel/core@^7.7.2", "@babel/core@^7.7.5":46 version "7.14.6"47 resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.14.6.tgz#e0814ec1a950032ff16c13a2721de39a8416fcab"48 integrity sha512-gJnOEWSqTk96qG5BoIrl5bVtc23DCycmIePPYnamY9RboYdI4nFy5vAQMSl81O5K/W0sLDWfGysnOECC+KUUCA==49 dependencies:50 "@babel/code-frame" "^7.14.5"51 "@babel/generator" "^7.14.5"52 "@babel/helper-compilation-targets" "^7.14.5"53 "@babel/helper-module-transforms" "^7.14.5"54 "@babel/helpers" "^7.14.6"55 "@babel/parser" "^7.14.6"56 "@babel/template" "^7.14.5"57 "@babel/traverse" "^7.14.5"58 "@babel/types" "^7.14.5"59 convert-source-map "^1.7.0"60 debug "^4.1.0"61 gensync "^1.0.0-beta.2"62 json5 "^2.1.2"63 semver "^6.3.0"64 source-map "^0.5.0"6566"@babel/core@^7.15.8":67 version "7.15.8"68 resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.15.8.tgz#195b9f2bffe995d2c6c159e72fe525b4114e8c10"69 integrity sha512-3UG9dsxvYBMYwRv+gS41WKHno4K60/9GPy1CJaH6xy3Elq8CTtvtjT5R5jmNhXfCYLX2mTw+7/aq5ak/gOE0og==70 dependencies:71 "@babel/code-frame" "^7.15.8"72 "@babel/generator" "^7.15.8"73 "@babel/helper-compilation-targets" "^7.15.4"74 "@babel/helper-module-transforms" "^7.15.8"75 "@babel/helpers" "^7.15.4"76 "@babel/parser" "^7.15.8"77 "@babel/template" "^7.15.4"78 "@babel/traverse" "^7.15.4"79 "@babel/types" "^7.15.6"80 convert-source-map "^1.7.0"81 debug "^4.1.0"82 gensync "^1.0.0-beta.2"83 json5 "^2.1.2"84 semver "^6.3.0"85 source-map "^0.5.0"8687"@babel/generator@^7.14.5", "@babel/generator@^7.7.2":88 version "7.14.5"89 resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.14.5.tgz#848d7b9f031caca9d0cd0af01b063f226f52d785"90 integrity sha512-y3rlP+/G25OIX3mYKKIOlQRcqj7YgrvHxOLbVmyLJ9bPmi5ttvUmpydVjcFjZphOktWuA7ovbx91ECloWTfjIA==91 dependencies:92 "@babel/types" "^7.14.5"93 jsesc "^2.5.1"94 source-map "^0.5.0"9596"@babel/generator@^7.15.0":97 version "7.15.0"98 resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.15.0.tgz#a7d0c172e0d814974bad5aa77ace543b97917f15"99 integrity sha512-eKl4XdMrbpYvuB505KTta4AV9g+wWzmVBW69tX0H2NwKVKd2YJbKgyK6M8j/rgLbmHOYJn6rUklV677nOyJrEQ==100 dependencies:101 "@babel/types" "^7.15.0"102 jsesc "^2.5.1"103 source-map "^0.5.0"104105"@babel/generator@^7.15.4":106 version "7.15.4"107 resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.15.4.tgz#85acb159a267ca6324f9793986991ee2022a05b0"108 integrity sha512-d3itta0tu+UayjEORPNz6e1T3FtvWlP5N4V5M+lhp/CxT4oAA7/NcScnpRyspUMLK6tu9MNHmQHxRykuN2R7hw==109 dependencies:110 "@babel/types" "^7.15.4"111 jsesc "^2.5.1"112 source-map "^0.5.0"113114"@babel/generator@^7.15.8":115 version "7.15.8"116 resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.15.8.tgz#fa56be6b596952ceb231048cf84ee499a19c0cd1"117 integrity sha512-ECmAKstXbp1cvpTTZciZCgfOt6iN64lR0d+euv3UZisU5awfRawOvg07Utn/qBGuH4bRIEZKrA/4LzZyXhZr8g==118 dependencies:119 "@babel/types" "^7.15.6"120 jsesc "^2.5.1"121 source-map "^0.5.0"122123"@babel/helper-annotate-as-pure@^7.14.5":124 version "7.14.5"125 resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.14.5.tgz#7bf478ec3b71726d56a8ca5775b046fc29879e61"126 integrity sha512-EivH9EgBIb+G8ij1B2jAwSH36WnGvkQSEC6CkX/6v6ZFlw5fVOHvsgGF4uiEHO2GzMvunZb6tDLQEQSdrdocrA==127 dependencies:128 "@babel/types" "^7.14.5"129130"@babel/helper-annotate-as-pure@^7.15.4":131 version "7.15.4"132 resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.15.4.tgz#3d0e43b00c5e49fdb6c57e421601a7a658d5f835"133 integrity sha512-QwrtdNvUNsPCj2lfNQacsGSQvGX8ee1ttrBrcozUP2Sv/jylewBP/8QFe6ZkBsC8T/GYWonNAWJV4aRR9AL2DA==134 dependencies:135 "@babel/types" "^7.15.4"136137"@babel/helper-builder-binary-assignment-operator-visitor@^7.14.5":138 version "7.14.5"139 resolved "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.14.5.tgz#b939b43f8c37765443a19ae74ad8b15978e0a191"140 integrity sha512-YTA/Twn0vBXDVGJuAX6PwW7x5zQei1luDDo2Pl6q1qZ7hVNl0RZrhHCQG/ArGpR29Vl7ETiB8eJyrvpuRp300w==141 dependencies:142 "@babel/helper-explode-assignable-expression" "^7.14.5"143 "@babel/types" "^7.14.5"144145"@babel/helper-compilation-targets@^7.13.0", "@babel/helper-compilation-targets@^7.14.5":146 version "7.14.5"147 resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.14.5.tgz#7a99c5d0967911e972fe2c3411f7d5b498498ecf"148 integrity sha512-v+QtZqXEiOnpO6EYvlImB6zCD2Lel06RzOPzmkz/D/XgQiUu3C/Jb1LOqSt/AIA34TYi/Q+KlT8vTQrgdxkbLw==149 dependencies:150 "@babel/compat-data" "^7.14.5"151 "@babel/helper-validator-option" "^7.14.5"152 browserslist "^4.16.6"153 semver "^6.3.0"154155"@babel/helper-compilation-targets@^7.15.4":156 version "7.15.4"157 resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.15.4.tgz#cf6d94f30fbefc139123e27dd6b02f65aeedb7b9"158 integrity sha512-rMWPCirulnPSe4d+gwdWXLfAXTTBj8M3guAf5xFQJ0nvFY7tfNAFnWdqaHegHlgDZOCT4qvhF3BYlSJag8yhqQ==159 dependencies:160 "@babel/compat-data" "^7.15.0"161 "@babel/helper-validator-option" "^7.14.5"162 browserslist "^4.16.6"163 semver "^6.3.0"164165"@babel/helper-create-class-features-plugin@^7.14.5":166 version "7.14.6"167 resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.14.6.tgz#f114469b6c06f8b5c59c6c4e74621f5085362542"168 integrity sha512-Z6gsfGofTxH/+LQXqYEK45kxmcensbzmk/oi8DmaQytlQCgqNZt9XQF8iqlI/SeXWVjaMNxvYvzaYw+kh42mDg==169 dependencies:170 "@babel/helper-annotate-as-pure" "^7.14.5"171 "@babel/helper-function-name" "^7.14.5"172 "@babel/helper-member-expression-to-functions" "^7.14.5"173 "@babel/helper-optimise-call-expression" "^7.14.5"174 "@babel/helper-replace-supers" "^7.14.5"175 "@babel/helper-split-export-declaration" "^7.14.5"176177"@babel/helper-create-class-features-plugin@^7.15.0":178 version "7.15.0"179 resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.15.0.tgz#c9a137a4d137b2d0e2c649acf536d7ba1a76c0f7"180 integrity sha512-MdmDXgvTIi4heDVX/e9EFfeGpugqm9fobBVg/iioE8kueXrOHdRDe36FAY7SnE9xXLVeYCoJR/gdrBEIHRC83Q==181 dependencies:182 "@babel/helper-annotate-as-pure" "^7.14.5"183 "@babel/helper-function-name" "^7.14.5"184 "@babel/helper-member-expression-to-functions" "^7.15.0"185 "@babel/helper-optimise-call-expression" "^7.14.5"186 "@babel/helper-replace-supers" "^7.15.0"187 "@babel/helper-split-export-declaration" "^7.14.5"188189"@babel/helper-create-class-features-plugin@^7.15.4":190 version "7.15.4"191 resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.15.4.tgz#7f977c17bd12a5fba363cb19bea090394bf37d2e"192 integrity sha512-7ZmzFi+DwJx6A7mHRwbuucEYpyBwmh2Ca0RvI6z2+WLZYCqV0JOaLb+u0zbtmDicebgKBZgqbYfLaKNqSgv5Pw==193 dependencies:194 "@babel/helper-annotate-as-pure" "^7.15.4"195 "@babel/helper-function-name" "^7.15.4"196 "@babel/helper-member-expression-to-functions" "^7.15.4"197 "@babel/helper-optimise-call-expression" "^7.15.4"198 "@babel/helper-replace-supers" "^7.15.4"199 "@babel/helper-split-export-declaration" "^7.15.4"200201"@babel/helper-create-regexp-features-plugin@^7.14.5":202 version "7.14.5"203 resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.14.5.tgz#c7d5ac5e9cf621c26057722fb7a8a4c5889358c4"204 integrity sha512-TLawwqpOErY2HhWbGJ2nZT5wSkR192QpN+nBg1THfBfftrlvOh+WbhrxXCH4q4xJ9Gl16BGPR/48JA+Ryiho/A==205 dependencies:206 "@babel/helper-annotate-as-pure" "^7.14.5"207 regexpu-core "^4.7.1"208209"@babel/helper-define-polyfill-provider@^0.2.2":210 version "0.2.3"211 resolved "https://registry.yarnpkg.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.2.3.tgz#0525edec5094653a282688d34d846e4c75e9c0b6"212 integrity sha512-RH3QDAfRMzj7+0Nqu5oqgO5q9mFtQEVvCRsi8qCEfzLR9p2BHfn5FzhSB2oj1fF7I2+DcTORkYaQ6aTR9Cofew==213 dependencies:214 "@babel/helper-compilation-targets" "^7.13.0"215 "@babel/helper-module-imports" "^7.12.13"216 "@babel/helper-plugin-utils" "^7.13.0"217 "@babel/traverse" "^7.13.0"218 debug "^4.1.1"219 lodash.debounce "^4.0.8"220 resolve "^1.14.2"221 semver "^6.1.2"222223"@babel/helper-explode-assignable-expression@^7.14.5":224 version "7.14.5"225 resolved "https://registry.yarnpkg.com/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.14.5.tgz#8aa72e708205c7bb643e45c73b4386cdf2a1f645"226 integrity sha512-Htb24gnGJdIGT4vnRKMdoXiOIlqOLmdiUYpAQ0mYfgVT/GDm8GOYhgi4GL+hMKrkiPRohO4ts34ELFsGAPQLDQ==227 dependencies:228 "@babel/types" "^7.14.5"229230"@babel/helper-function-name@^7.14.5":231 version "7.14.5"232 resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.14.5.tgz#89e2c474972f15d8e233b52ee8c480e2cfcd50c4"233 integrity sha512-Gjna0AsXWfFvrAuX+VKcN/aNNWonizBj39yGwUzVDVTlMYJMK2Wp6xdpy72mfArFq5uK+NOuexfzZlzI1z9+AQ==234 dependencies:235 "@babel/helper-get-function-arity" "^7.14.5"236 "@babel/template" "^7.14.5"237 "@babel/types" "^7.14.5"238239"@babel/helper-function-name@^7.15.4":240 version "7.15.4"241 resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.15.4.tgz#845744dafc4381a4a5fb6afa6c3d36f98a787ebc"242 integrity sha512-Z91cOMM4DseLIGOnog+Z8OI6YseR9bua+HpvLAQ2XayUGU+neTtX+97caALaLdyu53I/fjhbeCnWnRH1O3jFOw==243 dependencies:244 "@babel/helper-get-function-arity" "^7.15.4"245 "@babel/template" "^7.15.4"246 "@babel/types" "^7.15.4"247248"@babel/helper-get-function-arity@^7.14.5":249 version "7.14.5"250 resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.14.5.tgz#25fbfa579b0937eee1f3b805ece4ce398c431815"251 integrity sha512-I1Db4Shst5lewOM4V+ZKJzQ0JGGaZ6VY1jYvMghRjqs6DWgxLCIyFt30GlnKkfUeFLpJt2vzbMVEXVSXlIFYUg==252 dependencies:253 "@babel/types" "^7.14.5"254255"@babel/helper-get-function-arity@^7.15.4":256 version "7.15.4"257 resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.15.4.tgz#098818934a137fce78b536a3e015864be1e2879b"258 integrity sha512-1/AlxSF92CmGZzHnC515hm4SirTxtpDnLEJ0UyEMgTMZN+6bxXKg04dKhiRx5Enel+SUA1G1t5Ed/yQia0efrA==259 dependencies:260 "@babel/types" "^7.15.4"261262"@babel/helper-hoist-variables@^7.14.5":263 version "7.14.5"264 resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.14.5.tgz#e0dd27c33a78e577d7c8884916a3e7ef1f7c7f8d"265 integrity sha512-R1PXiz31Uc0Vxy4OEOm07x0oSjKAdPPCh3tPivn/Eo8cvz6gveAeuyUUPB21Hoiif0uoPQSSdhIPS3352nvdyQ==266 dependencies:267 "@babel/types" "^7.14.5"268269"@babel/helper-hoist-variables@^7.15.4":270 version "7.15.4"271 resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.15.4.tgz#09993a3259c0e918f99d104261dfdfc033f178df"272 integrity sha512-VTy085egb3jUGVK9ycIxQiPbquesq0HUQ+tPO0uv5mPEBZipk+5FkRKiWq5apuyTE9FUrjENB0rCf8y+n+UuhA==273 dependencies:274 "@babel/types" "^7.15.4"275276"@babel/helper-member-expression-to-functions@^7.14.5":277 version "7.14.5"278 resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.14.5.tgz#d5c70e4ad13b402c95156c7a53568f504e2fb7b8"279 integrity sha512-UxUeEYPrqH1Q/k0yRku1JE7dyfyehNwT6SVkMHvYvPDv4+uu627VXBckVj891BO8ruKBkiDoGnZf4qPDD8abDQ==280 dependencies:281 "@babel/types" "^7.14.5"282283"@babel/helper-member-expression-to-functions@^7.15.0":284 version "7.15.0"285 resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.15.0.tgz#0ddaf5299c8179f27f37327936553e9bba60990b"286 integrity sha512-Jq8H8U2kYiafuj2xMTPQwkTBnEEdGKpT35lJEQsRRjnG0LW3neucsaMWLgKcwu3OHKNeYugfw+Z20BXBSEs2Lg==287 dependencies:288 "@babel/types" "^7.15.0"289290"@babel/helper-member-expression-to-functions@^7.15.4":291 version "7.15.4"292 resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.15.4.tgz#bfd34dc9bba9824a4658b0317ec2fd571a51e6ef"293 integrity sha512-cokOMkxC/BTyNP1AlY25HuBWM32iCEsLPI4BHDpJCHHm1FU2E7dKWWIXJgQgSFiu4lp8q3bL1BIKwqkSUviqtA==294 dependencies:295 "@babel/types" "^7.15.4"296297"@babel/helper-module-imports@^7.12.13", "@babel/helper-module-imports@^7.14.5":298 version "7.14.5"299 resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.14.5.tgz#6d1a44df6a38c957aa7c312da076429f11b422f3"300 integrity sha512-SwrNHu5QWS84XlHwGYPDtCxcA0hrSlL2yhWYLgeOc0w7ccOl2qv4s/nARI0aYZW+bSwAL5CukeXA47B/1NKcnQ==301 dependencies:302 "@babel/types" "^7.14.5"303304"@babel/helper-module-imports@^7.15.4":305 version "7.15.4"306 resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.15.4.tgz#e18007d230632dea19b47853b984476e7b4e103f"307 integrity sha512-jeAHZbzUwdW/xHgHQ3QmWR4Jg6j15q4w/gCfwZvtqOxoo5DKtLHk8Bsf4c5RZRC7NmLEs+ohkdq8jFefuvIxAA==308 dependencies:309 "@babel/types" "^7.15.4"310311"@babel/helper-module-transforms@^7.14.5":312 version "7.14.5"313 resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.14.5.tgz#7de42f10d789b423eb902ebd24031ca77cb1e10e"314 integrity sha512-iXpX4KW8LVODuAieD7MzhNjmM6dzYY5tfRqT+R9HDXWl0jPn/djKmA+G9s/2C2T9zggw5tK1QNqZ70USfedOwA==315 dependencies:316 "@babel/helper-module-imports" "^7.14.5"317 "@babel/helper-replace-supers" "^7.14.5"318 "@babel/helper-simple-access" "^7.14.5"319 "@babel/helper-split-export-declaration" "^7.14.5"320 "@babel/helper-validator-identifier" "^7.14.5"321 "@babel/template" "^7.14.5"322 "@babel/traverse" "^7.14.5"323 "@babel/types" "^7.14.5"324325"@babel/helper-module-transforms@^7.15.4":326 version "7.15.4"327 resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.15.4.tgz#962cc629a7f7f9a082dd62d0307fa75fe8788d7c"328 integrity sha512-9fHHSGE9zTC++KuXLZcB5FKgvlV83Ox+NLUmQTawovwlJ85+QMhk1CnVk406CQVj97LaWod6KVjl2Sfgw9Aktw==329 dependencies:330 "@babel/helper-module-imports" "^7.15.4"331 "@babel/helper-replace-supers" "^7.15.4"332 "@babel/helper-simple-access" "^7.15.4"333 "@babel/helper-split-export-declaration" "^7.15.4"334 "@babel/helper-validator-identifier" "^7.14.9"335 "@babel/template" "^7.15.4"336 "@babel/traverse" "^7.15.4"337 "@babel/types" "^7.15.4"338339"@babel/helper-module-transforms@^7.15.8":340 version "7.15.8"341 resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.15.8.tgz#d8c0e75a87a52e374a8f25f855174786a09498b2"342 integrity sha512-DfAfA6PfpG8t4S6npwzLvTUpp0sS7JrcuaMiy1Y5645laRJIp/LiLGIBbQKaXSInK8tiGNI7FL7L8UvB8gdUZg==343 dependencies:344 "@babel/helper-module-imports" "^7.15.4"345 "@babel/helper-replace-supers" "^7.15.4"346 "@babel/helper-simple-access" "^7.15.4"347 "@babel/helper-split-export-declaration" "^7.15.4"348 "@babel/helper-validator-identifier" "^7.15.7"349 "@babel/template" "^7.15.4"350 "@babel/traverse" "^7.15.4"351 "@babel/types" "^7.15.6"352353"@babel/helper-optimise-call-expression@^7.14.5":354 version "7.14.5"355 resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.14.5.tgz#f27395a8619e0665b3f0364cddb41c25d71b499c"356 integrity sha512-IqiLIrODUOdnPU9/F8ib1Fx2ohlgDhxnIDU7OEVi+kAbEZcyiF7BLU8W6PfvPi9LzztjS7kcbzbmL7oG8kD6VA==357 dependencies:358 "@babel/types" "^7.14.5"359360"@babel/helper-optimise-call-expression@^7.15.4":361 version "7.15.4"362 resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.15.4.tgz#f310a5121a3b9cc52d9ab19122bd729822dee171"363 integrity sha512-E/z9rfbAOt1vDW1DR7k4SzhzotVV5+qMciWV6LaG1g4jeFrkDlJedjtV4h0i4Q/ITnUu+Pk08M7fczsB9GXBDw==364 dependencies:365 "@babel/types" "^7.15.4"366367"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.13.0", "@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.8.0", "@babel/helper-plugin-utils@^7.8.3":368 version "7.14.5"369 resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz#5ac822ce97eec46741ab70a517971e443a70c5a9"370 integrity sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==371372"@babel/helper-remap-async-to-generator@^7.14.5":373 version "7.14.5"374 resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.14.5.tgz#51439c913612958f54a987a4ffc9ee587a2045d6"375 integrity sha512-rLQKdQU+HYlxBwQIj8dk4/0ENOUEhA/Z0l4hN8BexpvmSMN9oA9EagjnhnDpNsRdWCfjwa4mn/HyBXO9yhQP6A==376 dependencies:377 "@babel/helper-annotate-as-pure" "^7.14.5"378 "@babel/helper-wrap-function" "^7.14.5"379 "@babel/types" "^7.14.5"380381"@babel/helper-remap-async-to-generator@^7.15.4":382 version "7.15.4"383 resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.15.4.tgz#2637c0731e4c90fbf58ac58b50b2b5a192fc970f"384 integrity sha512-v53MxgvMK/HCwckJ1bZrq6dNKlmwlyRNYM6ypaRTdXWGOE2c1/SCa6dL/HimhPulGhZKw9W0QhREM583F/t0vQ==385 dependencies:386 "@babel/helper-annotate-as-pure" "^7.15.4"387 "@babel/helper-wrap-function" "^7.15.4"388 "@babel/types" "^7.15.4"389390"@babel/helper-replace-supers@^7.14.5":391 version "7.14.5"392 resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.14.5.tgz#0ecc0b03c41cd567b4024ea016134c28414abb94"393 integrity sha512-3i1Qe9/8x/hCHINujn+iuHy+mMRLoc77b2nI9TB0zjH1hvn9qGlXjWlggdwUcju36PkPCy/lpM7LLUdcTyH4Ow==394 dependencies:395 "@babel/helper-member-expression-to-functions" "^7.14.5"396 "@babel/helper-optimise-call-expression" "^7.14.5"397 "@babel/traverse" "^7.14.5"398 "@babel/types" "^7.14.5"399400"@babel/helper-replace-supers@^7.15.0":401 version "7.15.0"402 resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.15.0.tgz#ace07708f5bf746bf2e6ba99572cce79b5d4e7f4"403 integrity sha512-6O+eWrhx+HEra/uJnifCwhwMd6Bp5+ZfZeJwbqUTuqkhIT6YcRhiZCOOFChRypOIe0cV46kFrRBlm+t5vHCEaA==404 dependencies:405 "@babel/helper-member-expression-to-functions" "^7.15.0"406 "@babel/helper-optimise-call-expression" "^7.14.5"407 "@babel/traverse" "^7.15.0"408 "@babel/types" "^7.15.0"409410"@babel/helper-replace-supers@^7.15.4":411 version "7.15.4"412 resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.15.4.tgz#52a8ab26ba918c7f6dee28628b07071ac7b7347a"413 integrity sha512-/ztT6khaXF37MS47fufrKvIsiQkx1LBRvSJNzRqmbyeZnTwU9qBxXYLaaT/6KaxfKhjs2Wy8kG8ZdsFUuWBjzw==414 dependencies:415 "@babel/helper-member-expression-to-functions" "^7.15.4"416 "@babel/helper-optimise-call-expression" "^7.15.4"417 "@babel/traverse" "^7.15.4"418 "@babel/types" "^7.15.4"419420"@babel/helper-simple-access@^7.14.5":421 version "7.14.5"422 resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.14.5.tgz#66ea85cf53ba0b4e588ba77fc813f53abcaa41c4"423 integrity sha512-nfBN9xvmCt6nrMZjfhkl7i0oTV3yxR4/FztsbOASyTvVcoYd0TRHh7eMLdlEcCqobydC0LAF3LtC92Iwxo0wyw==424 dependencies:425 "@babel/types" "^7.14.5"426427"@babel/helper-simple-access@^7.15.4":428 version "7.15.4"429 resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.15.4.tgz#ac368905abf1de8e9781434b635d8f8674bcc13b"430 integrity sha512-UzazrDoIVOZZcTeHHEPYrr1MvTR/K+wgLg6MY6e1CJyaRhbibftF6fR2KU2sFRtI/nERUZR9fBd6aKgBlIBaPg==431 dependencies:432 "@babel/types" "^7.15.4"433434"@babel/helper-skip-transparent-expression-wrappers@^7.14.5":435 version "7.14.5"436 resolved "https://registry.yarnpkg.com/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.14.5.tgz#96f486ac050ca9f44b009fbe5b7d394cab3a0ee4"437 integrity sha512-dmqZB7mrb94PZSAOYtr+ZN5qt5owZIAgqtoTuqiFbHFtxgEcmQlRJVI+bO++fciBunXtB6MK7HrzrfcAzIz2NQ==438 dependencies:439 "@babel/types" "^7.14.5"440441"@babel/helper-skip-transparent-expression-wrappers@^7.15.4":442 version "7.15.4"443 resolved "https://registry.yarnpkg.com/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.15.4.tgz#707dbdba1f4ad0fa34f9114fc8197aec7d5da2eb"444 integrity sha512-BMRLsdh+D1/aap19TycS4eD1qELGrCBJwzaY9IE8LrpJtJb+H7rQkPIdsfgnMtLBA6DJls7X9z93Z4U8h7xw0A==445 dependencies:446 "@babel/types" "^7.15.4"447448"@babel/helper-split-export-declaration@^7.14.5":449 version "7.14.5"450 resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.14.5.tgz#22b23a54ef51c2b7605d851930c1976dd0bc693a"451 integrity sha512-hprxVPu6e5Kdp2puZUmvOGjaLv9TCe58E/Fl6hRq4YiVQxIcNvuq6uTM2r1mT/oPskuS9CgR+I94sqAYv0NGKA==452 dependencies:453 "@babel/types" "^7.14.5"454455"@babel/helper-split-export-declaration@^7.15.4":456 version "7.15.4"457 resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.15.4.tgz#aecab92dcdbef6a10aa3b62ab204b085f776e257"458 integrity sha512-HsFqhLDZ08DxCpBdEVtKmywj6PQbwnF6HHybur0MAnkAKnlS6uHkwnmRIkElB2Owpfb4xL4NwDmDLFubueDXsw==459 dependencies:460 "@babel/types" "^7.15.4"461462"@babel/helper-validator-identifier@^7.14.5":463 version "7.14.5"464 resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.5.tgz#d0f0e277c512e0c938277faa85a3968c9a44c0e8"465 integrity sha512-5lsetuxCLilmVGyiLEfoHBRX8UCFD+1m2x3Rj97WrW3V7H3u4RWRXA4evMjImCsin2J2YT0QaVDGf+z8ondbAg==466467"@babel/helper-validator-identifier@^7.14.9":468 version "7.14.9"469 resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.9.tgz#6654d171b2024f6d8ee151bf2509699919131d48"470 integrity sha512-pQYxPY0UP6IHISRitNe8bsijHex4TWZXi2HwKVsjPiltzlhse2znVcm9Ace510VT1kxIHjGJCZZQBX2gJDbo0g==471472"@babel/helper-validator-identifier@^7.15.7":473 version "7.15.7"474 resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.15.7.tgz#220df993bfe904a4a6b02ab4f3385a5ebf6e2389"475 integrity sha512-K4JvCtQqad9OY2+yTU8w+E82ywk/fe+ELNlt1G8z3bVGlZfn/hOcQQsUhGhW/N+tb3fxK800wLtKOE/aM0m72w==476477"@babel/helper-validator-option@^7.14.5":478 version "7.14.5"479 resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.14.5.tgz#6e72a1fff18d5dfcb878e1e62f1a021c4b72d5a3"480 integrity sha512-OX8D5eeX4XwcroVW45NMvoYaIuFI+GQpA2a8Gi+X/U/cDUIRsV37qQfF905F0htTRCREQIB4KqPeaveRJUl3Ow==481482"@babel/helper-wrap-function@^7.14.5":483 version "7.14.5"484 resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.14.5.tgz#5919d115bf0fe328b8a5d63bcb610f51601f2bff"485 integrity sha512-YEdjTCq+LNuNS1WfxsDCNpgXkJaIyqco6DAelTUjT4f2KIWC1nBcaCaSdHTBqQVLnTBexBcVcFhLSU1KnYuePQ==486 dependencies:487 "@babel/helper-function-name" "^7.14.5"488 "@babel/template" "^7.14.5"489 "@babel/traverse" "^7.14.5"490 "@babel/types" "^7.14.5"491492"@babel/helper-wrap-function@^7.15.4":493 version "7.15.4"494 resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.15.4.tgz#6f754b2446cfaf3d612523e6ab8d79c27c3a3de7"495 integrity sha512-Y2o+H/hRV5W8QhIfTpRIBwl57y8PrZt6JM3V8FOo5qarjshHItyH5lXlpMfBfmBefOqSCpKZs/6Dxqp0E/U+uw==496 dependencies:497 "@babel/helper-function-name" "^7.15.4"498 "@babel/template" "^7.15.4"499 "@babel/traverse" "^7.15.4"500 "@babel/types" "^7.15.4"501502"@babel/helpers@^7.14.6":503 version "7.14.6"504 resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.14.6.tgz#5b58306b95f1b47e2a0199434fa8658fa6c21635"505 integrity sha512-yesp1ENQBiLI+iYHSJdoZKUtRpfTlL1grDIX9NRlAVppljLw/4tTyYupIB7uIYmC3stW/imAv8EqaKaS/ibmeA==506 dependencies:507 "@babel/template" "^7.14.5"508 "@babel/traverse" "^7.14.5"509 "@babel/types" "^7.14.5"510511"@babel/helpers@^7.15.4":512 version "7.15.4"513 resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.15.4.tgz#5f40f02050a3027121a3cf48d497c05c555eaf43"514 integrity sha512-V45u6dqEJ3w2rlryYYXf6i9rQ5YMNu4FLS6ngs8ikblhu2VdR1AqAd6aJjBzmf2Qzh6KOLqKHxEN9+TFbAkAVQ==515 dependencies:516 "@babel/template" "^7.15.4"517 "@babel/traverse" "^7.15.4"518 "@babel/types" "^7.15.4"519520"@babel/highlight@^7.14.5":521 version "7.14.5"522 resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.14.5.tgz#6861a52f03966405001f6aa534a01a24d99e8cd9"523 integrity sha512-qf9u2WFWVV0MppaL877j2dBtQIDgmidgjGk5VIMw3OadXvYaXn66U1BFlH2t4+t3i+8PhedppRv+i40ABzd+gg==524 dependencies:525 "@babel/helper-validator-identifier" "^7.14.5"526 chalk "^2.0.0"527 js-tokens "^4.0.0"528529"@babel/parser@^7.0.0", "@babel/parser@^7.1.0", "@babel/parser@^7.14.5", "@babel/parser@^7.14.6", "@babel/parser@^7.7.2":530 version "7.14.6"531 resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.14.6.tgz#d85cc68ca3cac84eae384c06f032921f5227f4b2"532 integrity sha512-oG0ej7efjEXxb4UgE+klVx+3j4MVo+A2vCzm7OUN4CLo6WhQ+vSOD2yJ8m7B+DghObxtLxt3EfgMWpq+AsWehQ==533534"@babel/parser@^7.15.0":535 version "7.15.3"536 resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.15.3.tgz#3416d9bea748052cfcb63dbcc27368105b1ed862"537 integrity sha512-O0L6v/HvqbdJawj0iBEfVQMc3/6WP+AeOsovsIgBFyJaG+W2w7eqvZB7puddATmWuARlm1SX7DwxJ/JJUnDpEA==538539"@babel/parser@^7.15.4":540 version "7.15.5"541 resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.15.5.tgz#d33a58ca69facc05b26adfe4abebfed56c1c2dac"542 integrity sha512-2hQstc6I7T6tQsWzlboMh3SgMRPaS4H6H7cPQsJkdzTzEGqQrpLDsE2BGASU5sBPoEQyHzeqU6C8uKbFeEk6sg==543544"@babel/parser@^7.15.8":545 version "7.15.8"546 resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.15.8.tgz#7bacdcbe71bdc3ff936d510c15dcea7cf0b99016"547 integrity sha512-BRYa3wcQnjS/nqI8Ac94pYYpJfojHVvVXJ97+IDCImX4Jc8W8Xv1+47enbruk+q1etOpsQNwnfFcNGw+gtPGxA==548549"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@^7.15.4":550 version "7.15.4"551 resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.15.4.tgz#dbdeabb1e80f622d9f0b583efb2999605e0a567e"552 integrity sha512-eBnpsl9tlhPhpI10kU06JHnrYXwg3+V6CaP2idsCXNef0aeslpqyITXQ74Vfk5uHgY7IG7XP0yIH8b42KSzHog==553 dependencies:554 "@babel/helper-plugin-utils" "^7.14.5"555 "@babel/helper-skip-transparent-expression-wrappers" "^7.15.4"556 "@babel/plugin-proposal-optional-chaining" "^7.14.5"557558"@babel/plugin-proposal-async-generator-functions@^7.15.8":559 version "7.15.8"560 resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.15.8.tgz#a3100f785fab4357987c4223ab1b02b599048403"561 integrity sha512-2Z5F2R2ibINTc63mY7FLqGfEbmofrHU9FitJW1Q7aPaKFhiPvSq6QEt/BoWN5oME3GVyjcRuNNSRbb9LC0CSWA==562 dependencies:563 "@babel/helper-plugin-utils" "^7.14.5"564 "@babel/helper-remap-async-to-generator" "^7.15.4"565 "@babel/plugin-syntax-async-generators" "^7.8.4"566567"@babel/plugin-proposal-class-properties@^7.14.5":568 version "7.14.5"569 resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.14.5.tgz#40d1ee140c5b1e31a350f4f5eed945096559b42e"570 integrity sha512-q/PLpv5Ko4dVc1LYMpCY7RVAAO4uk55qPwrIuJ5QJ8c6cVuAmhu7I/49JOppXL6gXf7ZHzpRVEUZdYoPLM04Gg==571 dependencies:572 "@babel/helper-create-class-features-plugin" "^7.14.5"573 "@babel/helper-plugin-utils" "^7.14.5"574575"@babel/plugin-proposal-class-static-block@^7.15.4":576 version "7.15.4"577 resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.15.4.tgz#3e7ca6128453c089e8b477a99f970c63fc1cb8d7"578 integrity sha512-M682XWrrLNk3chXCjoPUQWOyYsB93B9z3mRyjtqqYJWDf2mfCdIYgDrA11cgNVhAQieaq6F2fn2f3wI0U4aTjA==579 dependencies:580 "@babel/helper-create-class-features-plugin" "^7.15.4"581 "@babel/helper-plugin-utils" "^7.14.5"582 "@babel/plugin-syntax-class-static-block" "^7.14.5"583584"@babel/plugin-proposal-dynamic-import@^7.14.5":585 version "7.14.5"586 resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.14.5.tgz#0c6617df461c0c1f8fff3b47cd59772360101d2c"587 integrity sha512-ExjiNYc3HDN5PXJx+bwC50GIx/KKanX2HiggnIUAYedbARdImiCU4RhhHfdf0Kd7JNXGpsBBBCOm+bBVy3Gb0g==588 dependencies:589 "@babel/helper-plugin-utils" "^7.14.5"590 "@babel/plugin-syntax-dynamic-import" "^7.8.3"591592"@babel/plugin-proposal-export-namespace-from@^7.14.5":593 version "7.14.5"594 resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.14.5.tgz#dbad244310ce6ccd083072167d8cea83a52faf76"595 integrity sha512-g5POA32bXPMmSBu5Dx/iZGLGnKmKPc5AiY7qfZgurzrCYgIztDlHFbznSNCoQuv57YQLnQfaDi7dxCtLDIdXdA==596 dependencies:597 "@babel/helper-plugin-utils" "^7.14.5"598 "@babel/plugin-syntax-export-namespace-from" "^7.8.3"599600"@babel/plugin-proposal-json-strings@^7.14.5":601 version "7.14.5"602 resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.14.5.tgz#38de60db362e83a3d8c944ac858ddf9f0c2239eb"603 integrity sha512-NSq2fczJYKVRIsUJyNxrVUMhB27zb7N7pOFGQOhBKJrChbGcgEAqyZrmZswkPk18VMurEeJAaICbfm57vUeTbQ==604 dependencies:605 "@babel/helper-plugin-utils" "^7.14.5"606 "@babel/plugin-syntax-json-strings" "^7.8.3"607608"@babel/plugin-proposal-logical-assignment-operators@^7.14.5":609 version "7.14.5"610 resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.14.5.tgz#6e6229c2a99b02ab2915f82571e0cc646a40c738"611 integrity sha512-YGn2AvZAo9TwyhlLvCCWxD90Xq8xJ4aSgaX3G5D/8DW94L8aaT+dS5cSP+Z06+rCJERGSr9GxMBZ601xoc2taw==612 dependencies:613 "@babel/helper-plugin-utils" "^7.14.5"614 "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4"615616"@babel/plugin-proposal-nullish-coalescing-operator@^7.14.5":617 version "7.14.5"618 resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.14.5.tgz#ee38589ce00e2cc59b299ec3ea406fcd3a0fdaf6"619 integrity sha512-gun/SOnMqjSb98Nkaq2rTKMwervfdAoz6NphdY0vTfuzMfryj+tDGb2n6UkDKwez+Y8PZDhE3D143v6Gepp4Hg==620 dependencies:621 "@babel/helper-plugin-utils" "^7.14.5"622 "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3"623624"@babel/plugin-proposal-numeric-separator@^7.14.5":625 version "7.14.5"626 resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.14.5.tgz#83631bf33d9a51df184c2102a069ac0c58c05f18"627 integrity sha512-yiclALKe0vyZRZE0pS6RXgjUOt87GWv6FYa5zqj15PvhOGFO69R5DusPlgK/1K5dVnCtegTiWu9UaBSrLLJJBg==628 dependencies:629 "@babel/helper-plugin-utils" "^7.14.5"630 "@babel/plugin-syntax-numeric-separator" "^7.10.4"631632"@babel/plugin-proposal-object-rest-spread@^7.15.6":633 version "7.15.6"634 resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.15.6.tgz#ef68050c8703d07b25af402cb96cf7f34a68ed11"635 integrity sha512-qtOHo7A1Vt+O23qEAX+GdBpqaIuD3i9VRrWgCJeq7WO6H2d14EK3q11urj5Te2MAeK97nMiIdRpwd/ST4JFbNg==636 dependencies:637 "@babel/compat-data" "^7.15.0"638 "@babel/helper-compilation-targets" "^7.15.4"639 "@babel/helper-plugin-utils" "^7.14.5"640 "@babel/plugin-syntax-object-rest-spread" "^7.8.3"641 "@babel/plugin-transform-parameters" "^7.15.4"642643"@babel/plugin-proposal-optional-catch-binding@^7.14.5":644 version "7.14.5"645 resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.14.5.tgz#939dd6eddeff3a67fdf7b3f044b5347262598c3c"646 integrity sha512-3Oyiixm0ur7bzO5ybNcZFlmVsygSIQgdOa7cTfOYCMY+wEPAYhZAJxi3mixKFCTCKUhQXuCTtQ1MzrpL3WT8ZQ==647 dependencies:648 "@babel/helper-plugin-utils" "^7.14.5"649 "@babel/plugin-syntax-optional-catch-binding" "^7.8.3"650651"@babel/plugin-proposal-optional-chaining@^7.14.5":652 version "7.14.5"653 resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.14.5.tgz#fa83651e60a360e3f13797eef00b8d519695b603"654 integrity sha512-ycz+VOzo2UbWNI1rQXxIuMOzrDdHGrI23fRiz/Si2R4kv2XZQ1BK8ccdHwehMKBlcH/joGW/tzrUmo67gbJHlQ==655 dependencies:656 "@babel/helper-plugin-utils" "^7.14.5"657 "@babel/helper-skip-transparent-expression-wrappers" "^7.14.5"658 "@babel/plugin-syntax-optional-chaining" "^7.8.3"659660"@babel/plugin-proposal-private-methods@^7.14.5":661 version "7.14.5"662 resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.14.5.tgz#37446495996b2945f30f5be5b60d5e2aa4f5792d"663 integrity sha512-838DkdUA1u+QTCplatfq4B7+1lnDa/+QMI89x5WZHBcnNv+47N8QEj2k9I2MUU9xIv8XJ4XvPCviM/Dj7Uwt9g==664 dependencies:665 "@babel/helper-create-class-features-plugin" "^7.14.5"666 "@babel/helper-plugin-utils" "^7.14.5"667668"@babel/plugin-proposal-private-property-in-object@^7.15.4":669 version "7.15.4"670 resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.15.4.tgz#55c5e3b4d0261fd44fe637e3f624cfb0f484e3e5"671 integrity sha512-X0UTixkLf0PCCffxgu5/1RQyGGbgZuKoI+vXP4iSbJSYwPb7hu06omsFGBvQ9lJEvwgrxHdS8B5nbfcd8GyUNA==672 dependencies:673 "@babel/helper-annotate-as-pure" "^7.15.4"674 "@babel/helper-create-class-features-plugin" "^7.15.4"675 "@babel/helper-plugin-utils" "^7.14.5"676 "@babel/plugin-syntax-private-property-in-object" "^7.14.5"677678"@babel/plugin-proposal-unicode-property-regex@^7.14.5", "@babel/plugin-proposal-unicode-property-regex@^7.4.4":679 version "7.14.5"680 resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.14.5.tgz#0f95ee0e757a5d647f378daa0eca7e93faa8bbe8"681 integrity sha512-6axIeOU5LnY471KenAB9vI8I5j7NQ2d652hIYwVyRfgaZT5UpiqFKCuVXCDMSrU+3VFafnu2c5m3lrWIlr6A5Q==682 dependencies:683 "@babel/helper-create-regexp-features-plugin" "^7.14.5"684 "@babel/helper-plugin-utils" "^7.14.5"685686"@babel/plugin-syntax-async-generators@^7.8.4":687 version "7.8.4"688 resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz#a983fb1aeb2ec3f6ed042a210f640e90e786fe0d"689 integrity sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==690 dependencies:691 "@babel/helper-plugin-utils" "^7.8.0"692693"@babel/plugin-syntax-bigint@^7.8.3":694 version "7.8.3"695 resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz#4c9a6f669f5d0cdf1b90a1671e9a146be5300cea"696 integrity sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==697 dependencies:698 "@babel/helper-plugin-utils" "^7.8.0"699700"@babel/plugin-syntax-class-properties@^7.12.13", "@babel/plugin-syntax-class-properties@^7.8.3":701 version "7.12.13"702 resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz#b5c987274c4a3a82b89714796931a6b53544ae10"703 integrity sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==704 dependencies:705 "@babel/helper-plugin-utils" "^7.12.13"706707"@babel/plugin-syntax-class-static-block@^7.14.5":708 version "7.14.5"709 resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz#195df89b146b4b78b3bf897fd7a257c84659d406"710 integrity sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==711 dependencies:712 "@babel/helper-plugin-utils" "^7.14.5"713714"@babel/plugin-syntax-dynamic-import@^7.8.3":715 version "7.8.3"716 resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz#62bf98b2da3cd21d626154fc96ee5b3cb68eacb3"717 integrity sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==718 dependencies:719 "@babel/helper-plugin-utils" "^7.8.0"720721"@babel/plugin-syntax-export-namespace-from@^7.8.3":722 version "7.8.3"723 resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz#028964a9ba80dbc094c915c487ad7c4e7a66465a"724 integrity sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==725 dependencies:726 "@babel/helper-plugin-utils" "^7.8.3"727728"@babel/plugin-syntax-import-meta@^7.10.4", "@babel/plugin-syntax-import-meta@^7.8.3":729 version "7.10.4"730 resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz#ee601348c370fa334d2207be158777496521fd51"731 integrity sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==732 dependencies:733 "@babel/helper-plugin-utils" "^7.10.4"734735"@babel/plugin-syntax-json-strings@^7.8.3":736 version "7.8.3"737 resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz#01ca21b668cd8218c9e640cb6dd88c5412b2c96a"738 integrity sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==739 dependencies:740 "@babel/helper-plugin-utils" "^7.8.0"741742"@babel/plugin-syntax-jsx@^7.14.5":743 version "7.14.5"744 resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.14.5.tgz#000e2e25d8673cce49300517a3eda44c263e4201"745 integrity sha512-ohuFIsOMXJnbOMRfX7/w7LocdR6R7whhuRD4ax8IipLcLPlZGJKkBxgHp++U4N/vKyU16/YDQr2f5seajD3jIw==746 dependencies:747 "@babel/helper-plugin-utils" "^7.14.5"748749"@babel/plugin-syntax-logical-assignment-operators@^7.10.4", "@babel/plugin-syntax-logical-assignment-operators@^7.8.3":750 version "7.10.4"751 resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz#ca91ef46303530448b906652bac2e9fe9941f699"752 integrity sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==753 dependencies:754 "@babel/helper-plugin-utils" "^7.10.4"755756"@babel/plugin-syntax-nullish-coalescing-operator@^7.8.3":757 version "7.8.3"758 resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz#167ed70368886081f74b5c36c65a88c03b66d1a9"759 integrity sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==760 dependencies:761 "@babel/helper-plugin-utils" "^7.8.0"762763"@babel/plugin-syntax-numeric-separator@^7.10.4", "@babel/plugin-syntax-numeric-separator@^7.8.3":764 version "7.10.4"765 resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz#b9b070b3e33570cd9fd07ba7fa91c0dd37b9af97"766 integrity sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==767 dependencies:768 "@babel/helper-plugin-utils" "^7.10.4"769770"@babel/plugin-syntax-object-rest-spread@^7.8.3":771 version "7.8.3"772 resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz#60e225edcbd98a640332a2e72dd3e66f1af55871"773 integrity sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==774 dependencies:775 "@babel/helper-plugin-utils" "^7.8.0"776777"@babel/plugin-syntax-optional-catch-binding@^7.8.3":778 version "7.8.3"779 resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz#6111a265bcfb020eb9efd0fdfd7d26402b9ed6c1"780 integrity sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==781 dependencies:782 "@babel/helper-plugin-utils" "^7.8.0"783784"@babel/plugin-syntax-optional-chaining@^7.8.3":785 version "7.8.3"786 resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz#4f69c2ab95167e0180cd5336613f8c5788f7d48a"787 integrity sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==788 dependencies:789 "@babel/helper-plugin-utils" "^7.8.0"790791"@babel/plugin-syntax-private-property-in-object@^7.14.5":792 version "7.14.5"793 resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz#0dc6671ec0ea22b6e94a1114f857970cd39de1ad"794 integrity sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==795 dependencies:796 "@babel/helper-plugin-utils" "^7.14.5"797798"@babel/plugin-syntax-top-level-await@^7.14.5", "@babel/plugin-syntax-top-level-await@^7.8.3":799 version "7.14.5"800 resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz#c1cfdadc35a646240001f06138247b741c34d94c"801 integrity sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==802 dependencies:803 "@babel/helper-plugin-utils" "^7.14.5"804805"@babel/plugin-syntax-typescript@^7.14.5", "@babel/plugin-syntax-typescript@^7.7.2":806 version "7.14.5"807 resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.14.5.tgz#b82c6ce471b165b5ce420cf92914d6fb46225716"808 integrity sha512-u6OXzDaIXjEstBRRoBCQ/uKQKlbuaeE5in0RvWdA4pN6AhqxTIwUsnHPU1CFZA/amYObMsuWhYfRl3Ch90HD0Q==809 dependencies:810 "@babel/helper-plugin-utils" "^7.14.5"811812"@babel/plugin-transform-arrow-functions@^7.14.5":813 version "7.14.5"814 resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.14.5.tgz#f7187d9588a768dd080bf4c9ffe117ea62f7862a"815 integrity sha512-KOnO0l4+tD5IfOdi4x8C1XmEIRWUjNRV8wc6K2vz/3e8yAOoZZvsRXRRIF/yo/MAOFb4QjtAw9xSxMXbSMRy8A==816 dependencies:817 "@babel/helper-plugin-utils" "^7.14.5"818819"@babel/plugin-transform-async-to-generator@^7.14.5":820 version "7.14.5"821 resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.14.5.tgz#72c789084d8f2094acb945633943ef8443d39e67"822 integrity sha512-szkbzQ0mNk0rpu76fzDdqSyPu0MuvpXgC+6rz5rpMb5OIRxdmHfQxrktL8CYolL2d8luMCZTR0DpIMIdL27IjA==823 dependencies:824 "@babel/helper-module-imports" "^7.14.5"825 "@babel/helper-plugin-utils" "^7.14.5"826 "@babel/helper-remap-async-to-generator" "^7.14.5"827828"@babel/plugin-transform-block-scoped-functions@^7.14.5":829 version "7.14.5"830 resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.14.5.tgz#e48641d999d4bc157a67ef336aeb54bc44fd3ad4"831 integrity sha512-dtqWqdWZ5NqBX3KzsVCWfQI3A53Ft5pWFCT2eCVUftWZgjc5DpDponbIF1+c+7cSGk2wN0YK7HGL/ezfRbpKBQ==832 dependencies:833 "@babel/helper-plugin-utils" "^7.14.5"834835"@babel/plugin-transform-block-scoping@^7.15.3":836 version "7.15.3"837 resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.15.3.tgz#94c81a6e2fc230bcce6ef537ac96a1e4d2b3afaf"838 integrity sha512-nBAzfZwZb4DkaGtOes1Up1nOAp9TDRRFw4XBzBBSG9QK7KVFmYzgj9o9sbPv7TX5ofL4Auq4wZnxCoPnI/lz2Q==839 dependencies:840 "@babel/helper-plugin-utils" "^7.14.5"841842"@babel/plugin-transform-classes@^7.15.4":843 version "7.15.4"844 resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.15.4.tgz#50aee17aaf7f332ae44e3bce4c2e10534d5d3bf1"845 integrity sha512-Yjvhex8GzBmmPQUvpXRPWQ9WnxXgAFuZSrqOK/eJlOGIXwvv8H3UEdUigl1gb/bnjTrln+e8bkZUYCBt/xYlBg==846 dependencies:847 "@babel/helper-annotate-as-pure" "^7.15.4"848 "@babel/helper-function-name" "^7.15.4"849 "@babel/helper-optimise-call-expression" "^7.15.4"850 "@babel/helper-plugin-utils" "^7.14.5"851 "@babel/helper-replace-supers" "^7.15.4"852 "@babel/helper-split-export-declaration" "^7.15.4"853 globals "^11.1.0"854855"@babel/plugin-transform-computed-properties@^7.14.5":856 version "7.14.5"857 resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.14.5.tgz#1b9d78987420d11223d41195461cc43b974b204f"858 integrity sha512-pWM+E4283UxaVzLb8UBXv4EIxMovU4zxT1OPnpHJcmnvyY9QbPPTKZfEj31EUvG3/EQRbYAGaYEUZ4yWOBC2xg==859 dependencies:860 "@babel/helper-plugin-utils" "^7.14.5"861862"@babel/plugin-transform-destructuring@^7.14.7":863 version "7.14.7"864 resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.14.7.tgz#0ad58ed37e23e22084d109f185260835e5557576"865 integrity sha512-0mDE99nK+kVh3xlc5vKwB6wnP9ecuSj+zQCa/n0voENtP/zymdT4HH6QEb65wjjcbqr1Jb/7z9Qp7TF5FtwYGw==866 dependencies:867 "@babel/helper-plugin-utils" "^7.14.5"868869"@babel/plugin-transform-dotall-regex@^7.14.5", "@babel/plugin-transform-dotall-regex@^7.4.4":870 version "7.14.5"871 resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.14.5.tgz#2f6bf76e46bdf8043b4e7e16cf24532629ba0c7a"872 integrity sha512-loGlnBdj02MDsFaHhAIJzh7euK89lBrGIdM9EAtHFo6xKygCUGuuWe07o1oZVk287amtW1n0808sQM99aZt3gw==873 dependencies:874 "@babel/helper-create-regexp-features-plugin" "^7.14.5"875 "@babel/helper-plugin-utils" "^7.14.5"876877"@babel/plugin-transform-duplicate-keys@^7.14.5":878 version "7.14.5"879 resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.14.5.tgz#365a4844881bdf1501e3a9f0270e7f0f91177954"880 integrity sha512-iJjbI53huKbPDAsJ8EmVmvCKeeq21bAze4fu9GBQtSLqfvzj2oRuHVx4ZkDwEhg1htQ+5OBZh/Ab0XDf5iBZ7A==881 dependencies:882 "@babel/helper-plugin-utils" "^7.14.5"883884"@babel/plugin-transform-exponentiation-operator@^7.14.5":885 version "7.14.5"886 resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.14.5.tgz#5154b8dd6a3dfe6d90923d61724bd3deeb90b493"887 integrity sha512-jFazJhMBc9D27o9jDnIE5ZErI0R0m7PbKXVq77FFvqFbzvTMuv8jaAwLZ5PviOLSFttqKIW0/wxNSDbjLk0tYA==888 dependencies:889 "@babel/helper-builder-binary-assignment-operator-visitor" "^7.14.5"890 "@babel/helper-plugin-utils" "^7.14.5"891892"@babel/plugin-transform-for-of@^7.15.4":893 version "7.15.4"894 resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.15.4.tgz#25c62cce2718cfb29715f416e75d5263fb36a8c2"895 integrity sha512-DRTY9fA751AFBDh2oxydvVm4SYevs5ILTWLs6xKXps4Re/KG5nfUkr+TdHCrRWB8C69TlzVgA9b3RmGWmgN9LA==896 dependencies:897 "@babel/helper-plugin-utils" "^7.14.5"898899"@babel/plugin-transform-function-name@^7.14.5":900 version "7.14.5"901 resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.14.5.tgz#e81c65ecb900746d7f31802f6bed1f52d915d6f2"902 integrity sha512-vbO6kv0fIzZ1GpmGQuvbwwm+O4Cbm2NrPzwlup9+/3fdkuzo1YqOZcXw26+YUJB84Ja7j9yURWposEHLYwxUfQ==903 dependencies:904 "@babel/helper-function-name" "^7.14.5"905 "@babel/helper-plugin-utils" "^7.14.5"906907"@babel/plugin-transform-literals@^7.14.5":908 version "7.14.5"909 resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.14.5.tgz#41d06c7ff5d4d09e3cf4587bd3ecf3930c730f78"910 integrity sha512-ql33+epql2F49bi8aHXxvLURHkxJbSmMKl9J5yHqg4PLtdE6Uc48CH1GS6TQvZ86eoB/ApZXwm7jlA+B3kra7A==911 dependencies:912 "@babel/helper-plugin-utils" "^7.14.5"913914"@babel/plugin-transform-member-expression-literals@^7.14.5":915 version "7.14.5"916 resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.14.5.tgz#b39cd5212a2bf235a617d320ec2b48bcc091b8a7"917 integrity sha512-WkNXxH1VXVTKarWFqmso83xl+2V3Eo28YY5utIkbsmXoItO8Q3aZxN4BTS2k0hz9dGUloHK26mJMyQEYfkn/+Q==918 dependencies:919 "@babel/helper-plugin-utils" "^7.14.5"920921"@babel/plugin-transform-modules-amd@^7.14.5":922 version "7.14.5"923 resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.14.5.tgz#4fd9ce7e3411cb8b83848480b7041d83004858f7"924 integrity sha512-3lpOU8Vxmp3roC4vzFpSdEpGUWSMsHFreTWOMMLzel2gNGfHE5UWIh/LN6ghHs2xurUp4jRFYMUIZhuFbody1g==925 dependencies:926 "@babel/helper-module-transforms" "^7.14.5"927 "@babel/helper-plugin-utils" "^7.14.5"928 babel-plugin-dynamic-import-node "^2.3.3"929930"@babel/plugin-transform-modules-commonjs@^7.15.4":931 version "7.15.4"932 resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.15.4.tgz#8201101240eabb5a76c08ef61b2954f767b6b4c1"933 integrity sha512-qg4DPhwG8hKp4BbVDvX1s8cohM8a6Bvptu4l6Iingq5rW+yRUAhe/YRup/YcW2zCOlrysEWVhftIcKzrEZv3sA==934 dependencies:935 "@babel/helper-module-transforms" "^7.15.4"936 "@babel/helper-plugin-utils" "^7.14.5"937 "@babel/helper-simple-access" "^7.15.4"938 babel-plugin-dynamic-import-node "^2.3.3"939940"@babel/plugin-transform-modules-systemjs@^7.15.4":941 version "7.15.4"942 resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.15.4.tgz#b42890c7349a78c827719f1d2d0cd38c7d268132"943 integrity sha512-fJUnlQrl/mezMneR72CKCgtOoahqGJNVKpompKwzv3BrEXdlPspTcyxrZ1XmDTIr9PpULrgEQo3qNKp6dW7ssw==944 dependencies:945 "@babel/helper-hoist-variables" "^7.15.4"946 "@babel/helper-module-transforms" "^7.15.4"947 "@babel/helper-plugin-utils" "^7.14.5"948 "@babel/helper-validator-identifier" "^7.14.9"949 babel-plugin-dynamic-import-node "^2.3.3"950951"@babel/plugin-transform-modules-umd@^7.14.5":952 version "7.14.5"953 resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.14.5.tgz#fb662dfee697cce274a7cda525190a79096aa6e0"954 integrity sha512-RfPGoagSngC06LsGUYyM9QWSXZ8MysEjDJTAea1lqRjNECE3y0qIJF/qbvJxc4oA4s99HumIMdXOrd+TdKaAAA==955 dependencies:956 "@babel/helper-module-transforms" "^7.14.5"957 "@babel/helper-plugin-utils" "^7.14.5"958959"@babel/plugin-transform-named-capturing-groups-regex@^7.14.9":960 version "7.14.9"961 resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.14.9.tgz#c68f5c5d12d2ebaba3762e57c2c4f6347a46e7b2"962 integrity sha512-l666wCVYO75mlAtGFfyFwnWmIXQm3kSH0C3IRnJqWcZbWkoihyAdDhFm2ZWaxWTqvBvhVFfJjMRQ0ez4oN1yYA==963 dependencies:964 "@babel/helper-create-regexp-features-plugin" "^7.14.5"965966"@babel/plugin-transform-new-target@^7.14.5":967 version "7.14.5"968 resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.14.5.tgz#31bdae8b925dc84076ebfcd2a9940143aed7dbf8"969 integrity sha512-Nx054zovz6IIRWEB49RDRuXGI4Gy0GMgqG0cII9L3MxqgXz/+rgII+RU58qpo4g7tNEx1jG7rRVH4ihZoP4esQ==970 dependencies:971 "@babel/helper-plugin-utils" "^7.14.5"972973"@babel/plugin-transform-object-super@^7.14.5":974 version "7.14.5"975 resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.14.5.tgz#d0b5faeac9e98597a161a9cf78c527ed934cdc45"976 integrity sha512-MKfOBWzK0pZIrav9z/hkRqIk/2bTv9qvxHzPQc12RcVkMOzpIKnFCNYJip00ssKWYkd8Sf5g0Wr7pqJ+cmtuFg==977 dependencies:978 "@babel/helper-plugin-utils" "^7.14.5"979 "@babel/helper-replace-supers" "^7.14.5"980981"@babel/plugin-transform-parameters@^7.15.4":982 version "7.15.4"983 resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.15.4.tgz#5f2285cc3160bf48c8502432716b48504d29ed62"984 integrity sha512-9WB/GUTO6lvJU3XQsSr6J/WKvBC2hcs4Pew8YxZagi6GkTdniyqp8On5kqdK8MN0LMeu0mGbhPN+O049NV/9FQ==985 dependencies:986 "@babel/helper-plugin-utils" "^7.14.5"987988"@babel/plugin-transform-property-literals@^7.14.5":989 version "7.14.5"990 resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.14.5.tgz#0ddbaa1f83db3606f1cdf4846fa1dfb473458b34"991 integrity sha512-r1uilDthkgXW8Z1vJz2dKYLV1tuw2xsbrp3MrZmD99Wh9vsfKoob+JTgri5VUb/JqyKRXotlOtwgu4stIYCmnw==992 dependencies:993 "@babel/helper-plugin-utils" "^7.14.5"994995"@babel/plugin-transform-react-display-name@^7.14.5":996 version "7.14.5"997 resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.14.5.tgz#baa92d15c4570411301a85a74c13534873885b65"998 integrity sha512-07aqY1ChoPgIxsuDviptRpVkWCSbXWmzQqcgy65C6YSFOfPFvb/DX3bBRHh7pCd/PMEEYHYWUTSVkCbkVainYQ==999 dependencies:1000 "@babel/helper-plugin-utils" "^7.14.5"10011002"@babel/plugin-transform-react-jsx-development@^7.14.5":1003 version "7.14.5"1004 resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.14.5.tgz#1a6c73e2f7ed2c42eebc3d2ad60b0c7494fcb9af"1005 integrity sha512-rdwG/9jC6QybWxVe2UVOa7q6cnTpw8JRRHOxntG/h6g/guAOe6AhtQHJuJh5FwmnXIT1bdm5vC2/5huV8ZOorQ==1006 dependencies:1007 "@babel/plugin-transform-react-jsx" "^7.14.5"10081009"@babel/plugin-transform-react-jsx@^7.14.5":1010 version "7.14.5"1011 resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.14.5.tgz#39749f0ee1efd8a1bd729152cf5f78f1d247a44a"1012 integrity sha512-7RylxNeDnxc1OleDm0F5Q/BSL+whYRbOAR+bwgCxIr0L32v7UFh/pz1DLMZideAUxKT6eMoS2zQH6fyODLEi8Q==1013 dependencies:1014 "@babel/helper-annotate-as-pure" "^7.14.5"1015 "@babel/helper-module-imports" "^7.14.5"1016 "@babel/helper-plugin-utils" "^7.14.5"1017 "@babel/plugin-syntax-jsx" "^7.14.5"1018 "@babel/types" "^7.14.5"10191020"@babel/plugin-transform-react-pure-annotations@^7.14.5":1021 version "7.14.5"1022 resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.14.5.tgz#18de612b84021e3a9802cbc212c9d9f46d0d11fc"1023 integrity sha512-3X4HpBJimNxW4rhUy/SONPyNQHp5YRr0HhJdT2OH1BRp0of7u3Dkirc7x9FRJMKMqTBI079VZ1hzv7Ouuz///g==1024 dependencies:1025 "@babel/helper-annotate-as-pure" "^7.14.5"1026 "@babel/helper-plugin-utils" "^7.14.5"10271028"@babel/plugin-transform-regenerator@^7.14.5":1029 version "7.14.5"1030 resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.14.5.tgz#9676fd5707ed28f522727c5b3c0aa8544440b04f"1031 integrity sha512-NVIY1W3ITDP5xQl50NgTKlZ0GrotKtLna08/uGY6ErQt6VEQZXla86x/CTddm5gZdcr+5GSsvMeTmWA5Ii6pkg==1032 dependencies:1033 regenerator-transform "^0.14.2"10341035"@babel/plugin-transform-reserved-words@^7.14.5":1036 version "7.14.5"1037 resolved "https://registry.yarnpkg.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.14.5.tgz#c44589b661cfdbef8d4300dcc7469dffa92f8304"1038 integrity sha512-cv4F2rv1nD4qdexOGsRQXJrOcyb5CrgjUH9PKrrtyhSDBNWGxd0UIitjyJiWagS+EbUGjG++22mGH1Pub8D6Vg==1039 dependencies:1040 "@babel/helper-plugin-utils" "^7.14.5"10411042"@babel/plugin-transform-runtime@^7.15.8":1043 version "7.15.8"1044 resolved "https://registry.yarnpkg.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.15.8.tgz#9d15b1e94e1c7f6344f65a8d573597d93c6cd886"1045 integrity sha512-+6zsde91jMzzvkzuEA3k63zCw+tm/GvuuabkpisgbDMTPQsIMHllE3XczJFFtEHLjjhKQFZmGQVRdELetlWpVw==1046 dependencies:1047 "@babel/helper-module-imports" "^7.15.4"1048 "@babel/helper-plugin-utils" "^7.14.5"1049 babel-plugin-polyfill-corejs2 "^0.2.2"1050 babel-plugin-polyfill-corejs3 "^0.2.5"1051 babel-plugin-polyfill-regenerator "^0.2.2"1052 semver "^6.3.0"10531054"@babel/plugin-transform-shorthand-properties@^7.14.5":1055 version "7.14.5"1056 resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.14.5.tgz#97f13855f1409338d8cadcbaca670ad79e091a58"1057 integrity sha512-xLucks6T1VmGsTB+GWK5Pl9Jl5+nRXD1uoFdA5TSO6xtiNjtXTjKkmPdFXVLGlK5A2/or/wQMKfmQ2Y0XJfn5g==1058 dependencies:1059 "@babel/helper-plugin-utils" "^7.14.5"10601061"@babel/plugin-transform-spread@^7.15.8":1062 version "7.15.8"1063 resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.15.8.tgz#79d5aa27f68d700449b2da07691dfa32d2f6d468"1064 integrity sha512-/daZ8s2tNaRekl9YJa9X4bzjpeRZLt122cpgFnQPLGUe61PH8zMEBmYqKkW5xF5JUEh5buEGXJoQpqBmIbpmEQ==1065 dependencies:1066 "@babel/helper-plugin-utils" "^7.14.5"1067 "@babel/helper-skip-transparent-expression-wrappers" "^7.15.4"10681069"@babel/plugin-transform-sticky-regex@^7.14.5":1070 version "7.14.5"1071 resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.14.5.tgz#5b617542675e8b7761294381f3c28c633f40aeb9"1072 integrity sha512-Z7F7GyvEMzIIbwnziAZmnSNpdijdr4dWt+FJNBnBLz5mwDFkqIXU9wmBcWWad3QeJF5hMTkRe4dAq2sUZiG+8A==1073 dependencies:1074 "@babel/helper-plugin-utils" "^7.14.5"10751076"@babel/plugin-transform-template-literals@^7.14.5":1077 version "7.14.5"1078 resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.14.5.tgz#a5f2bc233937d8453885dc736bdd8d9ffabf3d93"1079 integrity sha512-22btZeURqiepOfuy/VkFr+zStqlujWaarpMErvay7goJS6BWwdd6BY9zQyDLDa4x2S3VugxFb162IZ4m/S/+Gg==1080 dependencies:1081 "@babel/helper-plugin-utils" "^7.14.5"10821083"@babel/plugin-transform-typeof-symbol@^7.14.5":1084 version "7.14.5"1085 resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.14.5.tgz#39af2739e989a2bd291bf6b53f16981423d457d4"1086 integrity sha512-lXzLD30ffCWseTbMQzrvDWqljvZlHkXU+CnseMhkMNqU1sASnCsz3tSzAaH3vCUXb9PHeUb90ZT1BdFTm1xxJw==1087 dependencies:1088 "@babel/helper-plugin-utils" "^7.14.5"10891090"@babel/plugin-transform-typescript@^7.15.0":1091 version "7.15.0"1092 resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.15.0.tgz#553f230b9d5385018716586fc48db10dd228eb7e"1093 integrity sha512-WIIEazmngMEEHDaPTx0IZY48SaAmjVWe3TRSX7cmJXn0bEv9midFzAjxiruOWYIVf5iQ10vFx7ASDpgEO08L5w==1094 dependencies:1095 "@babel/helper-create-class-features-plugin" "^7.15.0"1096 "@babel/helper-plugin-utils" "^7.14.5"1097 "@babel/plugin-syntax-typescript" "^7.14.5"10981099"@babel/plugin-transform-unicode-escapes@^7.14.5":1100 version "7.14.5"1101 resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.14.5.tgz#9d4bd2a681e3c5d7acf4f57fa9e51175d91d0c6b"1102 integrity sha512-crTo4jATEOjxj7bt9lbYXcBAM3LZaUrbP2uUdxb6WIorLmjNKSpHfIybgY4B8SRpbf8tEVIWH3Vtm7ayCrKocA==1103 dependencies:1104 "@babel/helper-plugin-utils" "^7.14.5"11051106"@babel/plugin-transform-unicode-regex@^7.14.5":1107 version "7.14.5"1108 resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.14.5.tgz#4cd09b6c8425dd81255c7ceb3fb1836e7414382e"1109 integrity sha512-UygduJpC5kHeCiRw/xDVzC+wj8VaYSoKl5JNVmbP7MadpNinAm3SvZCxZ42H37KZBKztz46YC73i9yV34d0Tzw==1110 dependencies:1111 "@babel/helper-create-regexp-features-plugin" "^7.14.5"1112 "@babel/helper-plugin-utils" "^7.14.5"11131114"@babel/preset-env@^7.15.8":1115 version "7.15.8"1116 resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.15.8.tgz#f527ce5bcb121cd199f6b502bf23e420b3ff8dba"1117 integrity sha512-rCC0wH8husJgY4FPbHsiYyiLxSY8oMDJH7Rl6RQMknbN9oDDHhM9RDFvnGM2MgkbUJzSQB4gtuwygY5mCqGSsA==1118 dependencies:1119 "@babel/compat-data" "^7.15.0"1120 "@babel/helper-compilation-targets" "^7.15.4"1121 "@babel/helper-plugin-utils" "^7.14.5"1122 "@babel/helper-validator-option" "^7.14.5"1123 "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining" "^7.15.4"1124 "@babel/plugin-proposal-async-generator-functions" "^7.15.8"1125 "@babel/plugin-proposal-class-properties" "^7.14.5"1126 "@babel/plugin-proposal-class-static-block" "^7.15.4"1127 "@babel/plugin-proposal-dynamic-import" "^7.14.5"1128 "@babel/plugin-proposal-export-namespace-from" "^7.14.5"1129 "@babel/plugin-proposal-json-strings" "^7.14.5"1130 "@babel/plugin-proposal-logical-assignment-operators" "^7.14.5"1131 "@babel/plugin-proposal-nullish-coalescing-operator" "^7.14.5"1132 "@babel/plugin-proposal-numeric-separator" "^7.14.5"1133 "@babel/plugin-proposal-object-rest-spread" "^7.15.6"1134 "@babel/plugin-proposal-optional-catch-binding" "^7.14.5"1135 "@babel/plugin-proposal-optional-chaining" "^7.14.5"1136 "@babel/plugin-proposal-private-methods" "^7.14.5"1137 "@babel/plugin-proposal-private-property-in-object" "^7.15.4"1138 "@babel/plugin-proposal-unicode-property-regex" "^7.14.5"1139 "@babel/plugin-syntax-async-generators" "^7.8.4"1140 "@babel/plugin-syntax-class-properties" "^7.12.13"1141 "@babel/plugin-syntax-class-static-block" "^7.14.5"1142 "@babel/plugin-syntax-dynamic-import" "^7.8.3"1143 "@babel/plugin-syntax-export-namespace-from" "^7.8.3"1144 "@babel/plugin-syntax-json-strings" "^7.8.3"1145 "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4"1146 "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3"1147 "@babel/plugin-syntax-numeric-separator" "^7.10.4"1148 "@babel/plugin-syntax-object-rest-spread" "^7.8.3"1149 "@babel/plugin-syntax-optional-catch-binding" "^7.8.3"1150 "@babel/plugin-syntax-optional-chaining" "^7.8.3"1151 "@babel/plugin-syntax-private-property-in-object" "^7.14.5"1152 "@babel/plugin-syntax-top-level-await" "^7.14.5"1153 "@babel/plugin-transform-arrow-functions" "^7.14.5"1154 "@babel/plugin-transform-async-to-generator" "^7.14.5"1155 "@babel/plugin-transform-block-scoped-functions" "^7.14.5"1156 "@babel/plugin-transform-block-scoping" "^7.15.3"1157 "@babel/plugin-transform-classes" "^7.15.4"1158 "@babel/plugin-transform-computed-properties" "^7.14.5"1159 "@babel/plugin-transform-destructuring" "^7.14.7"1160 "@babel/plugin-transform-dotall-regex" "^7.14.5"1161 "@babel/plugin-transform-duplicate-keys" "^7.14.5"1162 "@babel/plugin-transform-exponentiation-operator" "^7.14.5"1163 "@babel/plugin-transform-for-of" "^7.15.4"1164 "@babel/plugin-transform-function-name" "^7.14.5"1165 "@babel/plugin-transform-literals" "^7.14.5"1166 "@babel/plugin-transform-member-expression-literals" "^7.14.5"1167 "@babel/plugin-transform-modules-amd" "^7.14.5"1168 "@babel/plugin-transform-modules-commonjs" "^7.15.4"1169 "@babel/plugin-transform-modules-systemjs" "^7.15.4"1170 "@babel/plugin-transform-modules-umd" "^7.14.5"1171 "@babel/plugin-transform-named-capturing-groups-regex" "^7.14.9"1172 "@babel/plugin-transform-new-target" "^7.14.5"1173 "@babel/plugin-transform-object-super" "^7.14.5"1174 "@babel/plugin-transform-parameters" "^7.15.4"1175 "@babel/plugin-transform-property-literals" "^7.14.5"1176 "@babel/plugin-transform-regenerator" "^7.14.5"1177 "@babel/plugin-transform-reserved-words" "^7.14.5"1178 "@babel/plugin-transform-shorthand-properties" "^7.14.5"1179 "@babel/plugin-transform-spread" "^7.15.8"1180 "@babel/plugin-transform-sticky-regex" "^7.14.5"1181 "@babel/plugin-transform-template-literals" "^7.14.5"1182 "@babel/plugin-transform-typeof-symbol" "^7.14.5"1183 "@babel/plugin-transform-unicode-escapes" "^7.14.5"1184 "@babel/plugin-transform-unicode-regex" "^7.14.5"1185 "@babel/preset-modules" "^0.1.4"1186 "@babel/types" "^7.15.6"1187 babel-plugin-polyfill-corejs2 "^0.2.2"1188 babel-plugin-polyfill-corejs3 "^0.2.5"1189 babel-plugin-polyfill-regenerator "^0.2.2"1190 core-js-compat "^3.16.0"1191 semver "^6.3.0"11921193"@babel/preset-modules@^0.1.4":1194 version "0.1.4"1195 resolved "https://registry.yarnpkg.com/@babel/preset-modules/-/preset-modules-0.1.4.tgz#362f2b68c662842970fdb5e254ffc8fc1c2e415e"1196 integrity sha512-J36NhwnfdzpmH41M1DrnkkgAqhZaqr/NBdPfQ677mLzlaXo+oDiv1deyCDtgAhz8p328otdob0Du7+xgHGZbKg==1197 dependencies:1198 "@babel/helper-plugin-utils" "^7.0.0"1199 "@babel/plugin-proposal-unicode-property-regex" "^7.4.4"1200 "@babel/plugin-transform-dotall-regex" "^7.4.4"1201 "@babel/types" "^7.4.4"1202 esutils "^2.0.2"12031204"@babel/preset-react@^7.14.5":1205 version "7.14.5"1206 resolved "https://registry.yarnpkg.com/@babel/preset-react/-/preset-react-7.14.5.tgz#0fbb769513f899c2c56f3a882fa79673c2d4ab3c"1207 integrity sha512-XFxBkjyObLvBaAvkx1Ie95Iaq4S/GUEIrejyrntQ/VCMKUYvKLoyKxOBzJ2kjA3b6rC9/KL6KXfDC2GqvLiNqQ==1208 dependencies:1209 "@babel/helper-plugin-utils" "^7.14.5"1210 "@babel/helper-validator-option" "^7.14.5"1211 "@babel/plugin-transform-react-display-name" "^7.14.5"1212 "@babel/plugin-transform-react-jsx" "^7.14.5"1213 "@babel/plugin-transform-react-jsx-development" "^7.14.5"1214 "@babel/plugin-transform-react-pure-annotations" "^7.14.5"12151216"@babel/preset-typescript@^7.15.0":1217 version "7.15.0"1218 resolved "https://registry.yarnpkg.com/@babel/preset-typescript/-/preset-typescript-7.15.0.tgz#e8fca638a1a0f64f14e1119f7fe4500277840945"1219 integrity sha512-lt0Y/8V3y06Wq/8H/u0WakrqciZ7Fz7mwPDHWUJAXlABL5hiUG42BNlRXiELNjeWjO5rWmnNKlx+yzJvxezHow==1220 dependencies:1221 "@babel/helper-plugin-utils" "^7.14.5"1222 "@babel/helper-validator-option" "^7.14.5"1223 "@babel/plugin-transform-typescript" "^7.15.0"12241225"@babel/register@^7.15.3":1226 version "7.15.3"1227 resolved "https://registry.yarnpkg.com/@babel/register/-/register-7.15.3.tgz#6b40a549e06ec06c885b2ec42c3dd711f55fe752"1228 integrity sha512-mj4IY1ZJkorClxKTImccn4T81+UKTo4Ux0+OFSV9hME1ooqS9UV+pJ6BjD0qXPK4T3XW/KNa79XByjeEMZz+fw==1229 dependencies:1230 clone-deep "^4.0.1"1231 find-cache-dir "^2.0.0"1232 make-dir "^2.1.0"1233 pirates "^4.0.0"1234 source-map-support "^0.5.16"12351236"@babel/runtime@^7.15.3":1237 version "7.15.3"1238 resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.15.3.tgz#2e1c2880ca118e5b2f9988322bd8a7656a32502b"1239 integrity sha512-OvwMLqNXkCXSz1kSm58sEsNuhqOx/fKpnUnKnFB5v8uDda5bLNEHNgKPvhDN6IU0LDcnHQ90LlJ0Q6jnyBSIBA==1240 dependencies:1241 regenerator-runtime "^0.13.4"12421243"@babel/runtime@^7.15.4":1244 version "7.15.4"1245 resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.15.4.tgz#fd17d16bfdf878e6dd02d19753a39fa8a8d9c84a"1246 integrity sha512-99catp6bHCaxr4sJ/DbTGgHS4+Rs2RVd2g7iOap6SLGPDknRK9ztKNsE/Fg6QhSeh1FGE5f6gHGQmvvn3I3xhw==1247 dependencies:1248 regenerator-runtime "^0.13.4"12491250"@babel/runtime@^7.8.4":1251 version "7.14.6"1252 resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.14.6.tgz#535203bc0892efc7dec60bdc27b2ecf6e409062d"1253 integrity sha512-/PCB2uJ7oM44tz8YhC4Z/6PeOKXp4K588f+5M3clr1M4zbqztlo0XEfJ2LEzj/FgwfgGcIdl8n7YYjTCI0BYwg==1254 dependencies:1255 regenerator-runtime "^0.13.4"12561257"@babel/template@^7.14.5", "@babel/template@^7.3.3":1258 version "7.14.5"1259 resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.14.5.tgz#a9bc9d8b33354ff6e55a9c60d1109200a68974f4"1260 integrity sha512-6Z3Po85sfxRGachLULUhOmvAaOo7xCvqGQtxINai2mEGPFm6pQ4z5QInFnUrRpfoSV60BnjyF5F3c+15fxFV1g==1261 dependencies:1262 "@babel/code-frame" "^7.14.5"1263 "@babel/parser" "^7.14.5"1264 "@babel/types" "^7.14.5"12651266"@babel/template@^7.15.4":1267 version "7.15.4"1268 resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.15.4.tgz#51898d35dcf3faa670c4ee6afcfd517ee139f194"1269 integrity sha512-UgBAfEa1oGuYgDIPM2G+aHa4Nlo9Lh6mGD2bDBGMTbYnc38vulXPuC1MGjYILIEmlwl6Rd+BPR9ee3gm20CBtg==1270 dependencies:1271 "@babel/code-frame" "^7.14.5"1272 "@babel/parser" "^7.15.4"1273 "@babel/types" "^7.15.4"12741275"@babel/traverse@^7.1.0", "@babel/traverse@^7.13.0", "@babel/traverse@^7.14.5", "@babel/traverse@^7.7.2":1276 version "7.14.5"1277 resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.14.5.tgz#c111b0f58afab4fea3d3385a406f692748c59870"1278 integrity sha512-G3BiS15vevepdmFqmUc9X+64y0viZYygubAMO8SvBmKARuF6CPSZtH4Ng9vi/lrWlZFGe3FWdXNy835akH8Glg==1279 dependencies:1280 "@babel/code-frame" "^7.14.5"1281 "@babel/generator" "^7.14.5"1282 "@babel/helper-function-name" "^7.14.5"1283 "@babel/helper-hoist-variables" "^7.14.5"1284 "@babel/helper-split-export-declaration" "^7.14.5"1285 "@babel/parser" "^7.14.5"1286 "@babel/types" "^7.14.5"1287 debug "^4.1.0"1288 globals "^11.1.0"12891290"@babel/traverse@^7.15.0":1291 version "7.15.0"1292 resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.15.0.tgz#4cca838fd1b2a03283c1f38e141f639d60b3fc98"1293 integrity sha512-392d8BN0C9eVxVWd8H6x9WfipgVH5IaIoLp23334Sc1vbKKWINnvwRpb4us0xtPaCumlwbTtIYNA0Dv/32sVFw==1294 dependencies:1295 "@babel/code-frame" "^7.14.5"1296 "@babel/generator" "^7.15.0"1297 "@babel/helper-function-name" "^7.14.5"1298 "@babel/helper-hoist-variables" "^7.14.5"1299 "@babel/helper-split-export-declaration" "^7.14.5"1300 "@babel/parser" "^7.15.0"1301 "@babel/types" "^7.15.0"1302 debug "^4.1.0"1303 globals "^11.1.0"13041305"@babel/traverse@^7.15.4":1306 version "7.15.4"1307 resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.15.4.tgz#ff8510367a144bfbff552d9e18e28f3e2889c22d"1308 integrity sha512-W6lQD8l4rUbQR/vYgSuCAE75ADyyQvOpFVsvPPdkhf6lATXAsQIG9YdtOcu8BB1dZ0LKu+Zo3c1wEcbKeuhdlA==1309 dependencies:1310 "@babel/code-frame" "^7.14.5"1311 "@babel/generator" "^7.15.4"1312 "@babel/helper-function-name" "^7.15.4"1313 "@babel/helper-hoist-variables" "^7.15.4"1314 "@babel/helper-split-export-declaration" "^7.15.4"1315 "@babel/parser" "^7.15.4"1316 "@babel/types" "^7.15.4"1317 debug "^4.1.0"1318 globals "^11.1.0"13191320"@babel/types@^7.0.0", "@babel/types@^7.14.5", "@babel/types@^7.3.0", "@babel/types@^7.3.3", "@babel/types@^7.4.4":1321 version "7.14.5"1322 resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.14.5.tgz#3bb997ba829a2104cedb20689c4a5b8121d383ff"1323 integrity sha512-M/NzBpEL95I5Hh4dwhin5JlE7EzO5PHMAuzjxss3tiOBD46KfQvVedN/3jEPZvdRvtsK2222XfdHogNIttFgcg==1324 dependencies:1325 "@babel/helper-validator-identifier" "^7.14.5"1326 to-fast-properties "^2.0.0"13271328"@babel/types@^7.15.0":1329 version "7.15.0"1330 resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.15.0.tgz#61af11f2286c4e9c69ca8deb5f4375a73c72dcbd"1331 integrity sha512-OBvfqnllOIdX4ojTHpwZbpvz4j3EWyjkZEdmjH0/cgsd6QOdSgU8rLSk6ard/pcW7rlmjdVSX/AWOaORR1uNOQ==1332 dependencies:1333 "@babel/helper-validator-identifier" "^7.14.9"1334 to-fast-properties "^2.0.0"13351336"@babel/types@^7.15.4":1337 version "7.15.4"1338 resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.15.4.tgz#74eeb86dbd6748d2741396557b9860e57fce0a0d"1339 integrity sha512-0f1HJFuGmmbrKTCZtbm3cU+b/AqdEYk5toj5iQur58xkVMlS0JWaKxTBSmCXd47uiN7vbcozAupm6Mvs80GNhw==1340 dependencies:1341 "@babel/helper-validator-identifier" "^7.14.9"1342 to-fast-properties "^2.0.0"13431344"@babel/types@^7.15.6":1345 version "7.15.6"1346 resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.15.6.tgz#99abdc48218b2881c058dd0a7ab05b99c9be758f"1347 integrity sha512-BPU+7QhqNjmWyDO0/vitH/CuhpV8ZmK1wpKva8nuyNF5MJfuRNWMc+hc14+u9xT93kvykMdncrJT19h74uB1Ig==1348 dependencies:1349 "@babel/helper-validator-identifier" "^7.14.9"1350 to-fast-properties "^2.0.0"13511352"@bcoe/v8-coverage@^0.2.3":1353 version "0.2.3"1354 resolved "https://registry.yarnpkg.com/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz#75a2e8b51cb758a7553d6804a5932d7aace75c39"1355 integrity sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==13561357"@cspotcode/source-map-consumer@0.8.0":1358 version "0.8.0"1359 resolved "https://registry.yarnpkg.com/@cspotcode/source-map-consumer/-/source-map-consumer-0.8.0.tgz#33bf4b7b39c178821606f669bbc447a6a629786b"1360 integrity sha512-41qniHzTU8yAGbCp04ohlmSrZf8bkf/iJsl3V0dRGsQN/5GFfx+LbCSsCpp2gqrqjTVg/K6O8ycoV35JIwAzAg==13611362"@cspotcode/source-map-support@0.7.0":1363 version "0.7.0"1364 resolved "https://registry.yarnpkg.com/@cspotcode/source-map-support/-/source-map-support-0.7.0.tgz#4789840aa859e46d2f3173727ab707c66bf344f5"1365 integrity sha512-X4xqRHqN8ACt2aHVe51OxeA2HjbcL4MqFqXkrmQszJ1NOUuUu5u6Vqx/0lZSVNku7velL5FC/s5uEAj1lsBMhA==1366 dependencies:1367 "@cspotcode/source-map-consumer" "0.8.0"13681369"@eslint/eslintrc@^1.0.3":1370 version "1.0.3"1371 resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-1.0.3.tgz#41f08c597025605f672251dcc4e8be66b5ed7366"1372 integrity sha512-DHI1wDPoKCBPoLZA3qDR91+3te/wDSc1YhKg3jR8NxKKRJq2hwHwcWv31cSwSYvIBrmbENoYMWcenW8uproQqg==1373 dependencies:1374 ajv "^6.12.4"1375 debug "^4.3.2"1376 espree "^9.0.0"1377 globals "^13.9.0"1378 ignore "^4.0.6"1379 import-fresh "^3.2.1"1380 js-yaml "^3.13.1"1381 minimatch "^3.0.4"1382 strip-json-comments "^3.1.1"13831384"@ethereumjs/common@^2.3.0", "@ethereumjs/common@^2.4.0", "@ethereumjs/common@^2.5.0":1385 version "2.5.0"1386 resolved "https://registry.yarnpkg.com/@ethereumjs/common/-/common-2.5.0.tgz#ec61551b31bef7a69d1dc634d8932468866a4268"1387 integrity sha512-DEHjW6e38o+JmB/NO3GZBpW4lpaiBpkFgXF6jLcJ6gETBYpEyaA5nTimsWBUJR3Vmtm/didUEbNjajskugZORg==1388 dependencies:1389 crc-32 "^1.2.0"1390 ethereumjs-util "^7.1.1"13911392"@ethereumjs/tx@^3.2.1":1393 version "3.3.2"1394 resolved "https://registry.yarnpkg.com/@ethereumjs/tx/-/tx-3.3.2.tgz#348d4624bf248aaab6c44fec2ae67265efe3db00"1395 integrity sha512-6AaJhwg4ucmwTvw/1qLaZUX5miWrwZ4nLOUsKyb/HtzS3BMw/CasKhdi1ims9mBKeK9sOJCH4qGKOBGyJCeeog==1396 dependencies:1397 "@ethereumjs/common" "^2.5.0"1398 ethereumjs-util "^7.1.2"13991400"@ethersproject/abi@5.0.7":1401 version "5.0.7"1402 resolved "https://registry.yarnpkg.com/@ethersproject/abi/-/abi-5.0.7.tgz#79e52452bd3ca2956d0e1c964207a58ad1a0ee7b"1403 integrity sha512-Cqktk+hSIckwP/W8O47Eef60VwmoSC/L3lY0+dIBhQPCNn9E4V7rwmm2aFrNRRDJfFlGuZ1khkQUOc3oBX+niw==1404 dependencies:1405 "@ethersproject/address" "^5.0.4"1406 "@ethersproject/bignumber" "^5.0.7"1407 "@ethersproject/bytes" "^5.0.4"1408 "@ethersproject/constants" "^5.0.4"1409 "@ethersproject/hash" "^5.0.4"1410 "@ethersproject/keccak256" "^5.0.3"1411 "@ethersproject/logger" "^5.0.5"1412 "@ethersproject/properties" "^5.0.3"1413 "@ethersproject/strings" "^5.0.4"14141415"@ethersproject/abstract-provider@^5.3.0":1416 version "5.3.0"1417 resolved "https://registry.yarnpkg.com/@ethersproject/abstract-provider/-/abstract-provider-5.3.0.tgz#f4c0ae4a4cef9f204d7781de805fd44b72756c81"1418 integrity sha512-1+MLhGP1GwxBDBNwMWVmhCsvKwh4gK7oIfOrmlmePNeskg1NhIrYssraJBieaFNHUYfKEd/1DjiVZMw8Qu5Cxw==1419 dependencies:1420 "@ethersproject/bignumber" "^5.3.0"1421 "@ethersproject/bytes" "^5.3.0"1422 "@ethersproject/logger" "^5.3.0"1423 "@ethersproject/networks" "^5.3.0"1424 "@ethersproject/properties" "^5.3.0"1425 "@ethersproject/transactions" "^5.3.0"1426 "@ethersproject/web" "^5.3.0"14271428"@ethersproject/abstract-signer@^5.3.0":1429 version "5.3.0"1430 resolved "https://registry.yarnpkg.com/@ethersproject/abstract-signer/-/abstract-signer-5.3.0.tgz#05172b653e15b535ed5854ef5f6a72f4b441052d"1431 integrity sha512-w8IFwOYqiPrtvosPuArZ3+QPR2nmdVTRrVY8uJYL3NNfMmQfTy3V3l2wbzX47UUlNbPJY+gKvzJAyvK1onZxJg==1432 dependencies:1433 "@ethersproject/abstract-provider" "^5.3.0"1434 "@ethersproject/bignumber" "^5.3.0"1435 "@ethersproject/bytes" "^5.3.0"1436 "@ethersproject/logger" "^5.3.0"1437 "@ethersproject/properties" "^5.3.0"14381439"@ethersproject/address@^5.0.4", "@ethersproject/address@^5.3.0":1440 version "5.3.0"1441 resolved "https://registry.yarnpkg.com/@ethersproject/address/-/address-5.3.0.tgz#e53b69eacebf332e8175de814c5e6507d6932518"1442 integrity sha512-29TgjzEBK+gUEUAOfWCG7s9IxLNLCqvr+oDSk6L9TXD0VLvZJKhJV479tKQqheVA81OeGxfpdxYtUVH8hqlCvA==1443 dependencies:1444 "@ethersproject/bignumber" "^5.3.0"1445 "@ethersproject/bytes" "^5.3.0"1446 "@ethersproject/keccak256" "^5.3.0"1447 "@ethersproject/logger" "^5.3.0"1448 "@ethersproject/rlp" "^5.3.0"14491450"@ethersproject/base64@^5.3.0":1451 version "5.3.0"1452 resolved "https://registry.yarnpkg.com/@ethersproject/base64/-/base64-5.3.0.tgz#b831fb35418b42ad24d943c557259062b8640824"1453 integrity sha512-JIqgtOmgKcbc2sjGWTXyXktqUhvFUDte8fPVsAaOrcPiJf6YotNF+nsrOYGC9pbHBEGSuSBp3QR0varkO8JHEw==1454 dependencies:1455 "@ethersproject/bytes" "^5.3.0"14561457"@ethersproject/bignumber@^5.0.7", "@ethersproject/bignumber@^5.3.0":1458 version "5.3.0"1459 resolved "https://registry.yarnpkg.com/@ethersproject/bignumber/-/bignumber-5.3.0.tgz#74ab2ec9c3bda4e344920565720a6ee9c794e9db"1460 integrity sha512-5xguJ+Q1/zRMgHgDCaqAexx/8DwDVLRemw2i6uR8KyGjwGdXI8f32QZZ1cKGucBN6ekJvpUpHy6XAuQnTv0mPA==1461 dependencies:1462 "@ethersproject/bytes" "^5.3.0"1463 "@ethersproject/logger" "^5.3.0"1464 bn.js "^4.11.9"14651466"@ethersproject/bytes@^5.0.4", "@ethersproject/bytes@^5.3.0":1467 version "5.3.0"1468 resolved "https://registry.yarnpkg.com/@ethersproject/bytes/-/bytes-5.3.0.tgz#473e0da7f831d535b2002be05e6f4ca3729a1bc9"1469 integrity sha512-rqLJjdVqCcn7glPer7Fxh87PRqlnRScVAoxcIP3PmOUNApMWJ6yRdOFfo2KvPAdO7Le3yEI1o0YW+Yvr7XCYvw==1470 dependencies:1471 "@ethersproject/logger" "^5.3.0"14721473"@ethersproject/constants@^5.0.4", "@ethersproject/constants@^5.3.0":1474 version "5.3.0"1475 resolved "https://registry.yarnpkg.com/@ethersproject/constants/-/constants-5.3.0.tgz#a5d6d86c0eec2c64c3024479609493b9afb3fc77"1476 integrity sha512-4y1feNOwEpgjAfiCFWOHznvv6qUF/H6uI0UKp8xdhftb+H+FbKflXg1pOgH5qs4Sr7EYBL+zPyPb+YD5g1aEyw==1477 dependencies:1478 "@ethersproject/bignumber" "^5.3.0"14791480"@ethersproject/hash@^5.0.4":1481 version "5.3.0"1482 resolved "https://registry.yarnpkg.com/@ethersproject/hash/-/hash-5.3.0.tgz#f65e3bf3db3282df4da676db6cfa049535dd3643"1483 integrity sha512-gAFZSjUPQ32CIfoKSMtMEQ+IO0kQxqhwz9fCIFt2DtAq2u4pWt8mL9Z5P0r6KkLcQU8LE9FmuPPyd+JvBzmr1w==1484 dependencies:1485 "@ethersproject/abstract-signer" "^5.3.0"1486 "@ethersproject/address" "^5.3.0"1487 "@ethersproject/bignumber" "^5.3.0"1488 "@ethersproject/bytes" "^5.3.0"1489 "@ethersproject/keccak256" "^5.3.0"1490 "@ethersproject/logger" "^5.3.0"1491 "@ethersproject/properties" "^5.3.0"1492 "@ethersproject/strings" "^5.3.0"14931494"@ethersproject/keccak256@^5.0.3", "@ethersproject/keccak256@^5.3.0":1495 version "5.3.0"1496 resolved "https://registry.yarnpkg.com/@ethersproject/keccak256/-/keccak256-5.3.0.tgz#fb5cd36bdfd6fa02e2ea84964078a9fc6bd731be"1497 integrity sha512-Gv2YqgIUmRbYVNIibafT0qGaeGYLIA/EdWHJ7JcVxVSs2vyxafGxOJ5VpSBHWeOIsE6OOaCelYowhuuTicgdFQ==1498 dependencies:1499 "@ethersproject/bytes" "^5.3.0"1500 js-sha3 "0.5.7"15011502"@ethersproject/logger@^5.0.5", "@ethersproject/logger@^5.3.0":1503 version "5.3.0"1504 resolved "https://registry.yarnpkg.com/@ethersproject/logger/-/logger-5.3.0.tgz#7a69fa1d4ca0d4b7138da1627eb152f763d84dd0"1505 integrity sha512-8bwJ2gxJGkZZnpQSq5uSiZSJjyVTWmlGft4oH8vxHdvO1Asy4TwVepAhPgxIQIMxXZFUNMych1YjIV4oQ4I7dA==15061507"@ethersproject/networks@^5.3.0":1508 version "5.3.1"1509 resolved "https://registry.yarnpkg.com/@ethersproject/networks/-/networks-5.3.1.tgz#78fe08324cee289ce239acf8c746121934b2ef61"1510 integrity sha512-6uQKHkYChlsfeiZhQ8IHIqGE/sQsf25o9ZxAYpMxi15dLPzz3IxOEF5KiSD32aHwsjXVBKBSlo+teAXLlYJybw==1511 dependencies:1512 "@ethersproject/logger" "^5.3.0"15131514"@ethersproject/properties@^5.0.3", "@ethersproject/properties@^5.3.0":1515 version "5.3.0"1516 resolved "https://registry.yarnpkg.com/@ethersproject/properties/-/properties-5.3.0.tgz#feef4c4babeb7c10a6b3449575016f4ad2c092b2"1517 integrity sha512-PaHxJyM5/bfusk6vr3yP//JMnm4UEojpzuWGTmtL5X4uNhNnFNvlYilZLyDr4I9cTkIbipCMsAuIcXWsmdRnEw==1518 dependencies:1519 "@ethersproject/logger" "^5.3.0"15201521"@ethersproject/rlp@^5.3.0":1522 version "5.3.0"1523 resolved "https://registry.yarnpkg.com/@ethersproject/rlp/-/rlp-5.3.0.tgz#7cb93a7b5dfa69163894153c9d4b0d936f333188"1524 integrity sha512-oI0joYpsRanl9guDubaW+1NbcpK0vJ3F/6Wpcanzcnqq+oaW9O5E98liwkEDPcb16BUTLIJ+ZF8GPIHYxJ/5Pw==1525 dependencies:1526 "@ethersproject/bytes" "^5.3.0"1527 "@ethersproject/logger" "^5.3.0"15281529"@ethersproject/signing-key@^5.3.0":1530 version "5.3.0"1531 resolved "https://registry.yarnpkg.com/@ethersproject/signing-key/-/signing-key-5.3.0.tgz#a96c88f8173e1abedfa35de32d3e5db7c48e5259"1532 integrity sha512-+DX/GwHAd0ok1bgedV1cKO0zfK7P/9aEyNoaYiRsGHpCecN7mhLqcdoUiUzE7Uz86LBsxm5ssK0qA1kBB47fbQ==1533 dependencies:1534 "@ethersproject/bytes" "^5.3.0"1535 "@ethersproject/logger" "^5.3.0"1536 "@ethersproject/properties" "^5.3.0"1537 bn.js "^4.11.9"1538 elliptic "6.5.4"1539 hash.js "1.1.7"15401541"@ethersproject/strings@^5.0.4", "@ethersproject/strings@^5.3.0":1542 version "5.3.0"1543 resolved "https://registry.yarnpkg.com/@ethersproject/strings/-/strings-5.3.0.tgz#a6b640aab56a18e0909f657da798eef890968ff0"1544 integrity sha512-j/AzIGZ503cvhuF2ldRSjB0BrKzpsBMtCieDtn4TYMMZMQ9zScJn9wLzTQl/bRNvJbBE6TOspK0r8/Ngae/f2Q==1545 dependencies:1546 "@ethersproject/bytes" "^5.3.0"1547 "@ethersproject/constants" "^5.3.0"1548 "@ethersproject/logger" "^5.3.0"15491550"@ethersproject/transactions@^5.0.0-beta.135", "@ethersproject/transactions@^5.3.0":1551 version "5.3.0"1552 resolved "https://registry.yarnpkg.com/@ethersproject/transactions/-/transactions-5.3.0.tgz#49b86f2bafa4d0bdf8e596578fc795ee47c50458"1553 integrity sha512-cdfK8VVyW2oEBCXhURG0WQ6AICL/r6Gmjh0e4Bvbv6MCn/GBd8FeBH3rtl7ho+AW50csMKeGv3m3K1HSHB2jMQ==1554 dependencies:1555 "@ethersproject/address" "^5.3.0"1556 "@ethersproject/bignumber" "^5.3.0"1557 "@ethersproject/bytes" "^5.3.0"1558 "@ethersproject/constants" "^5.3.0"1559 "@ethersproject/keccak256" "^5.3.0"1560 "@ethersproject/logger" "^5.3.0"1561 "@ethersproject/properties" "^5.3.0"1562 "@ethersproject/rlp" "^5.3.0"1563 "@ethersproject/signing-key" "^5.3.0"15641565"@ethersproject/web@^5.3.0":1566 version "5.3.0"1567 resolved "https://registry.yarnpkg.com/@ethersproject/web/-/web-5.3.0.tgz#7959c403f6476c61515008d8f92da51c553a8ee1"1568 integrity sha512-Ni6/DHnY6k/TD41LEkv0RQDx4jqWz5e/RZvrSecsxGYycF+MFy2z++T/yGc2peRunLOTIFwEksgEGGlbwfYmhQ==1569 dependencies:1570 "@ethersproject/base64" "^5.3.0"1571 "@ethersproject/bytes" "^5.3.0"1572 "@ethersproject/logger" "^5.3.0"1573 "@ethersproject/properties" "^5.3.0"1574 "@ethersproject/strings" "^5.3.0"15751576"@humanwhocodes/config-array@^0.6.0":1577 version "0.6.0"1578 resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.6.0.tgz#b5621fdb3b32309d2d16575456cbc277fa8f021a"1579 integrity sha512-JQlEKbcgEUjBFhLIF4iqM7u/9lwgHRBcpHrmUNCALK0Q3amXN6lxdoXLnF0sm11E9VqTmBALR87IlUg1bZ8A9A==1580 dependencies:1581 "@humanwhocodes/object-schema" "^1.2.0"1582 debug "^4.1.1"1583 minimatch "^3.0.4"15841585"@humanwhocodes/object-schema@^1.2.0":1586 version "1.2.0"1587 resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-1.2.0.tgz#87de7af9c231826fdd68ac7258f77c429e0e5fcf"1588 integrity sha512-wdppn25U8z/2yiaT6YGquE6X8sSv7hNMWSXYSSU1jGv/yd6XqjXgTDJ8KP4NgjTXfJ3GbRjeeb8RTV7a/VpM+w==15891590"@istanbuljs/load-nyc-config@^1.0.0":1591 version "1.1.0"1592 resolved "https://registry.yarnpkg.com/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz#fd3db1d59ecf7cf121e80650bb86712f9b55eced"1593 integrity sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==1594 dependencies:1595 camelcase "^5.3.1"1596 find-up "^4.1.0"1597 get-package-type "^0.1.0"1598 js-yaml "^3.13.1"1599 resolve-from "^5.0.0"16001601"@istanbuljs/schema@^0.1.2":1602 version "0.1.3"1603 resolved "https://registry.yarnpkg.com/@istanbuljs/schema/-/schema-0.1.3.tgz#e45e384e4b8ec16bce2fd903af78450f6bf7ec98"1604 integrity sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==16051606"@jest/console@^27.3.1":1607 version "27.3.1"1608 resolved "https://registry.yarnpkg.com/@jest/console/-/console-27.3.1.tgz#e8ea3a475d3f8162f23d69efbfaa9cbe486bee93"1609 integrity sha512-RkFNWmv0iui+qsOr/29q9dyfKTTT5DCuP31kUwg7rmOKPT/ozLeGLKJKVIiOfbiKyleUZKIrHwhmiZWVe8IMdw==1610 dependencies:1611 "@jest/types" "^27.2.5"1612 "@types/node" "*"1613 chalk "^4.0.0"1614 jest-message-util "^27.3.1"1615 jest-util "^27.3.1"1616 slash "^3.0.0"16171618"@jest/core@^27.3.1":1619 version "27.3.1"1620 resolved "https://registry.yarnpkg.com/@jest/core/-/core-27.3.1.tgz#04992ef1b58b17c459afb87ab56d81e63d386925"1621 integrity sha512-DMNE90RR5QKx0EA+wqe3/TNEwiRpOkhshKNxtLxd4rt3IZpCt+RSL+FoJsGeblRZmqdK4upHA/mKKGPPRAifhg==1622 dependencies:1623 "@jest/console" "^27.3.1"1624 "@jest/reporters" "^27.3.1"1625 "@jest/test-result" "^27.3.1"1626 "@jest/transform" "^27.3.1"1627 "@jest/types" "^27.2.5"1628 "@types/node" "*"1629 ansi-escapes "^4.2.1"1630 chalk "^4.0.0"1631 emittery "^0.8.1"1632 exit "^0.1.2"1633 graceful-fs "^4.2.4"1634 jest-changed-files "^27.3.0"1635 jest-config "^27.3.1"1636 jest-haste-map "^27.3.1"1637 jest-message-util "^27.3.1"1638 jest-regex-util "^27.0.6"1639 jest-resolve "^27.3.1"1640 jest-resolve-dependencies "^27.3.1"1641 jest-runner "^27.3.1"1642 jest-runtime "^27.3.1"1643 jest-snapshot "^27.3.1"1644 jest-util "^27.3.1"1645 jest-validate "^27.3.1"1646 jest-watcher "^27.3.1"1647 micromatch "^4.0.4"1648 rimraf "^3.0.0"1649 slash "^3.0.0"1650 strip-ansi "^6.0.0"16511652"@jest/environment@^27.3.1":1653 version "27.3.1"1654 resolved "https://registry.yarnpkg.com/@jest/environment/-/environment-27.3.1.tgz#2182defbce8d385fd51c5e7c7050f510bd4c86b1"1655 integrity sha512-BCKCj4mOVLme6Tanoyc9k0ultp3pnmuyHw73UHRPeeZxirsU/7E3HC4le/VDb/SMzE1JcPnto+XBKFOcoiJzVw==1656 dependencies:1657 "@jest/fake-timers" "^27.3.1"1658 "@jest/types" "^27.2.5"1659 "@types/node" "*"1660 jest-mock "^27.3.0"16611662"@jest/fake-timers@^27.3.1":1663 version "27.3.1"1664 resolved "https://registry.yarnpkg.com/@jest/fake-timers/-/fake-timers-27.3.1.tgz#1fad860ee9b13034762cdb94266e95609dfce641"1665 integrity sha512-M3ZFgwwlqJtWZ+QkBG5NmC23A9w+A6ZxNsO5nJxJsKYt4yguBd3i8TpjQz5NfCX91nEve1KqD9RA2Q+Q1uWqoA==1666 dependencies:1667 "@jest/types" "^27.2.5"1668 "@sinonjs/fake-timers" "^8.0.1"1669 "@types/node" "*"1670 jest-message-util "^27.3.1"1671 jest-mock "^27.3.0"1672 jest-util "^27.3.1"16731674"@jest/globals@^27.3.1":1675 version "27.3.1"1676 resolved "https://registry.yarnpkg.com/@jest/globals/-/globals-27.3.1.tgz#ce1dfb03d379237a9da6c1b99ecfaca1922a5f9e"1677 integrity sha512-Q651FWiWQAIFiN+zS51xqhdZ8g9b88nGCobC87argAxA7nMfNQq0Q0i9zTfQYgLa6qFXk2cGANEqfK051CZ8Pg==1678 dependencies:1679 "@jest/environment" "^27.3.1"1680 "@jest/types" "^27.2.5"1681 expect "^27.3.1"16821683"@jest/reporters@^27.3.1":1684 version "27.3.1"1685 resolved "https://registry.yarnpkg.com/@jest/reporters/-/reporters-27.3.1.tgz#28b5c1f5789481e23788048fa822ed15486430b9"1686 integrity sha512-m2YxPmL9Qn1emFVgZGEiMwDntDxRRQ2D58tiDQlwYTg5GvbFOKseYCcHtn0WsI8CG4vzPglo3nqbOiT8ySBT/w==1687 dependencies:1688 "@bcoe/v8-coverage" "^0.2.3"1689 "@jest/console" "^27.3.1"1690 "@jest/test-result" "^27.3.1"1691 "@jest/transform" "^27.3.1"1692 "@jest/types" "^27.2.5"1693 "@types/node" "*"1694 chalk "^4.0.0"1695 collect-v8-coverage "^1.0.0"1696 exit "^0.1.2"1697 glob "^7.1.2"1698 graceful-fs "^4.2.4"1699 istanbul-lib-coverage "^3.0.0"1700 istanbul-lib-instrument "^4.0.3"1701 istanbul-lib-report "^3.0.0"1702 istanbul-lib-source-maps "^4.0.0"1703 istanbul-reports "^3.0.2"1704 jest-haste-map "^27.3.1"1705 jest-resolve "^27.3.1"1706 jest-util "^27.3.1"1707 jest-worker "^27.3.1"1708 slash "^3.0.0"1709 source-map "^0.6.0"1710 string-length "^4.0.1"1711 terminal-link "^2.0.0"1712 v8-to-istanbul "^8.1.0"17131714"@jest/source-map@^27.0.6":1715 version "27.0.6"1716 resolved "https://registry.yarnpkg.com/@jest/source-map/-/source-map-27.0.6.tgz#be9e9b93565d49b0548b86e232092491fb60551f"1717 integrity sha512-Fek4mi5KQrqmlY07T23JRi0e7Z9bXTOOD86V/uS0EIW4PClvPDqZOyFlLpNJheS6QI0FNX1CgmPjtJ4EA/2M+g==1718 dependencies:1719 callsites "^3.0.0"1720 graceful-fs "^4.2.4"1721 source-map "^0.6.0"17221723"@jest/test-result@^27.3.1":1724 version "27.3.1"1725 resolved "https://registry.yarnpkg.com/@jest/test-result/-/test-result-27.3.1.tgz#89adee8b771877c69b3b8d59f52f29dccc300194"1726 integrity sha512-mLn6Thm+w2yl0opM8J/QnPTqrfS4FoXsXF2WIWJb2O/GBSyResL71BRuMYbYRsGt7ELwS5JGcEcGb52BNrumgg==1727 dependencies:1728 "@jest/console" "^27.3.1"1729 "@jest/types" "^27.2.5"1730 "@types/istanbul-lib-coverage" "^2.0.0"1731 collect-v8-coverage "^1.0.0"17321733"@jest/test-sequencer@^27.3.1":1734 version "27.3.1"1735 resolved "https://registry.yarnpkg.com/@jest/test-sequencer/-/test-sequencer-27.3.1.tgz#4b3bde2dbb05ee74afdae608cf0768e3354683b1"1736 integrity sha512-siySLo07IMEdSjA4fqEnxfIX8lB/lWYsBPwNFtkOvsFQvmBrL3yj3k3uFNZv/JDyApTakRpxbKLJ3CT8UGVCrA==1737 dependencies:1738 "@jest/test-result" "^27.3.1"1739 graceful-fs "^4.2.4"1740 jest-haste-map "^27.3.1"1741 jest-runtime "^27.3.1"17421743"@jest/transform@^27.3.1":1744 version "27.3.1"1745 resolved "https://registry.yarnpkg.com/@jest/transform/-/transform-27.3.1.tgz#ff80eafbeabe811e9025e4b6f452126718455220"1746 integrity sha512-3fSvQ02kuvjOI1C1ssqMVBKJpZf6nwoCiSu00zAKh5nrp3SptNtZy/8s5deayHnqxhjD9CWDJ+yqQwuQ0ZafXQ==1747 dependencies:1748 "@babel/core" "^7.1.0"1749 "@jest/types" "^27.2.5"1750 babel-plugin-istanbul "^6.0.0"1751 chalk "^4.0.0"1752 convert-source-map "^1.4.0"1753 fast-json-stable-stringify "^2.0.0"1754 graceful-fs "^4.2.4"1755 jest-haste-map "^27.3.1"1756 jest-regex-util "^27.0.6"1757 jest-util "^27.3.1"1758 micromatch "^4.0.4"1759 pirates "^4.0.1"1760 slash "^3.0.0"1761 source-map "^0.6.1"1762 write-file-atomic "^3.0.0"17631764"@jest/types@^27.2.5":1765 version "27.2.5"1766 resolved "https://registry.yarnpkg.com/@jest/types/-/types-27.2.5.tgz#420765c052605e75686982d24b061b4cbba22132"1767 integrity sha512-nmuM4VuDtCZcY+eTpw+0nvstwReMsjPoj7ZR80/BbixulhLaiX+fbv8oeLW8WZlJMcsGQsTmMKT/iTZu1Uy/lQ==1768 dependencies:1769 "@types/istanbul-lib-coverage" "^2.0.0"1770 "@types/istanbul-reports" "^3.0.0"1771 "@types/node" "*"1772 "@types/yargs" "^16.0.0"1773 chalk "^4.0.0"17741775"@nicolo-ribaudo/chokidar-2@2.1.8-no-fsevents.3":1776 version "2.1.8-no-fsevents.3"1777 resolved "https://registry.yarnpkg.com/@nicolo-ribaudo/chokidar-2/-/chokidar-2-2.1.8-no-fsevents.3.tgz#323d72dd25103d0c4fbdce89dadf574a787b1f9b"1778 integrity sha512-s88O1aVtXftvp5bCPB7WnmXc5IwOZZ7YPuwNPt+GtOOXpPvad1LfbmjYv+qII7zP6RU2QGnqve27dnLycEnyEQ==17791780"@nodelib/fs.scandir@2.1.5":1781 version "2.1.5"1782 resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5"1783 integrity sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==1784 dependencies:1785 "@nodelib/fs.stat" "2.0.5"1786 run-parallel "^1.1.9"17871788"@nodelib/fs.stat@2.0.5", "@nodelib/fs.stat@^2.0.2":1789 version "2.0.5"1790 resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz#5bd262af94e9d25bd1e71b05deed44876a222e8b"1791 integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==17921793"@nodelib/fs.walk@^1.2.3":1794 version "1.2.7"1795 resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.7.tgz#94c23db18ee4653e129abd26fb06f870ac9e1ee2"1796 integrity sha512-BTIhocbPBSrRmHxOAJFtR18oLhxTtAFDAvL8hY1S3iU8k+E60W/YFs4jrixGzQjMpF4qPXxIQHcjVD9dz1C2QA==1797 dependencies:1798 "@nodelib/fs.scandir" "2.1.5"1799 fastq "^1.6.0"18001801"@octokit/auth-token@^2.4.4":1802 version "2.4.5"1803 resolved "https://registry.yarnpkg.com/@octokit/auth-token/-/auth-token-2.4.5.tgz#568ccfb8cb46f36441fac094ce34f7a875b197f3"1804 integrity sha512-BpGYsPgJt05M7/L/5FoE1PiAbdxXFZkX/3kDYcsvd1v6UhlnE5e96dTDr0ezX/EFwciQxf3cNV0loipsURU+WA==1805 dependencies:1806 "@octokit/types" "^6.0.3"18071808"@octokit/core@^3.5.0":1809 version "3.5.1"1810 resolved "https://registry.yarnpkg.com/@octokit/core/-/core-3.5.1.tgz#8601ceeb1ec0e1b1b8217b960a413ed8e947809b"1811 integrity sha512-omncwpLVxMP+GLpLPgeGJBF6IWJFjXDS5flY5VbppePYX9XehevbDykRH9PdCdvqt9TS5AOTiDide7h0qrkHjw==1812 dependencies:1813 "@octokit/auth-token" "^2.4.4"1814 "@octokit/graphql" "^4.5.8"1815 "@octokit/request" "^5.6.0"1816 "@octokit/request-error" "^2.0.5"1817 "@octokit/types" "^6.0.3"1818 before-after-hook "^2.2.0"1819 universal-user-agent "^6.0.0"18201821"@octokit/endpoint@^6.0.1":1822 version "6.0.12"1823 resolved "https://registry.yarnpkg.com/@octokit/endpoint/-/endpoint-6.0.12.tgz#3b4d47a4b0e79b1027fb8d75d4221928b2d05658"1824 integrity sha512-lF3puPwkQWGfkMClXb4k/eUT/nZKQfxinRWJrdZaJO85Dqwo/G0yOC434Jr2ojwafWJMYqFGFa5ms4jJUgujdA==1825 dependencies:1826 "@octokit/types" "^6.0.3"1827 is-plain-object "^5.0.0"1828 universal-user-agent "^6.0.0"18291830"@octokit/graphql@^4.5.8":1831 version "4.6.4"1832 resolved "https://registry.yarnpkg.com/@octokit/graphql/-/graphql-4.6.4.tgz#0c3f5bed440822182e972317122acb65d311a5ed"1833 integrity sha512-SWTdXsVheRmlotWNjKzPOb6Js6tjSqA2a8z9+glDJng0Aqjzti8MEWOtuT8ZSu6wHnci7LZNuarE87+WJBG4vg==1834 dependencies:1835 "@octokit/request" "^5.6.0"1836 "@octokit/types" "^6.0.3"1837 universal-user-agent "^6.0.0"18381839"@octokit/openapi-types@^7.3.2":1840 version "7.3.2"1841 resolved "https://registry.yarnpkg.com/@octokit/openapi-types/-/openapi-types-7.3.2.tgz#065ce49b338043ec7f741316ce06afd4d459d944"1842 integrity sha512-oJhK/yhl9Gt430OrZOzAl2wJqR0No9445vmZ9Ey8GjUZUpwuu/vmEFP0TDhDXdpGDoxD6/EIFHJEcY8nHXpDTA==18431844"@octokit/plugin-paginate-rest@^2.6.2":1845 version "2.13.5"1846 resolved "https://registry.yarnpkg.com/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-2.13.5.tgz#e459f9b5dccbe0a53f039a355d5b80c0a2b0dc57"1847 integrity sha512-3WSAKBLa1RaR/7GG+LQR/tAZ9fp9H9waE9aPXallidyci9oZsfgsLn5M836d3LuDC6Fcym+2idRTBpssHZePVg==1848 dependencies:1849 "@octokit/types" "^6.13.0"18501851"@octokit/plugin-request-log@^1.0.2":1852 version "1.0.4"1853 resolved "https://registry.yarnpkg.com/@octokit/plugin-request-log/-/plugin-request-log-1.0.4.tgz#5e50ed7083a613816b1e4a28aeec5fb7f1462e85"1854 integrity sha512-mLUsMkgP7K/cnFEw07kWqXGF5LKrOkD+lhCrKvPHXWDywAwuDUeDwWBpc69XK3pNX0uKiVt8g5z96PJ6z9xCFA==18551856"@octokit/plugin-rest-endpoint-methods@5.3.1":1857 version "5.3.1"1858 resolved "https://registry.yarnpkg.com/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-5.3.1.tgz#deddce769b4ec3179170709ab42e4e9e6195aaa9"1859 integrity sha512-3B2iguGmkh6bQQaVOtCsS0gixrz8Lg0v4JuXPqBcFqLKuJtxAUf3K88RxMEf/naDOI73spD+goJ/o7Ie7Cvdjg==1860 dependencies:1861 "@octokit/types" "^6.16.2"1862 deprecation "^2.3.1"18631864"@octokit/request-error@^2.0.5", "@octokit/request-error@^2.1.0":1865 version "2.1.0"1866 resolved "https://registry.yarnpkg.com/@octokit/request-error/-/request-error-2.1.0.tgz#9e150357831bfc788d13a4fd4b1913d60c74d677"1867 integrity sha512-1VIvgXxs9WHSjicsRwq8PlR2LR2x6DwsJAaFgzdi0JfJoGSO8mYI/cHJQ+9FbN21aa+DrgNLnwObmyeSC8Rmpg==1868 dependencies:1869 "@octokit/types" "^6.0.3"1870 deprecation "^2.0.0"1871 once "^1.4.0"18721873"@octokit/request@^5.6.0":1874 version "5.6.0"1875 resolved "https://registry.yarnpkg.com/@octokit/request/-/request-5.6.0.tgz#6084861b6e4fa21dc40c8e2a739ec5eff597e672"1876 integrity sha512-4cPp/N+NqmaGQwbh3vUsYqokQIzt7VjsgTYVXiwpUP2pxd5YiZB2XuTedbb0SPtv9XS7nzAKjAuQxmY8/aZkiA==1877 dependencies:1878 "@octokit/endpoint" "^6.0.1"1879 "@octokit/request-error" "^2.1.0"1880 "@octokit/types" "^6.16.1"1881 is-plain-object "^5.0.0"1882 node-fetch "^2.6.1"1883 universal-user-agent "^6.0.0"18841885"@octokit/rest@^18.0.9":1886 version "18.6.0"1887 resolved "https://registry.yarnpkg.com/@octokit/rest/-/rest-18.6.0.tgz#9a8457374c78c2773d3ab3f50aaffc62f3ed4f76"1888 integrity sha512-MdHuXHDJM7e5sUBe3K9tt7th0cs4csKU5Bb52LRi2oHAeIMrMZ4XqaTrEv660HoUPoM1iDlnj27Ab/Nh3MtwlA==1889 dependencies:1890 "@octokit/core" "^3.5.0"1891 "@octokit/plugin-paginate-rest" "^2.6.2"1892 "@octokit/plugin-request-log" "^1.0.2"1893 "@octokit/plugin-rest-endpoint-methods" "5.3.1"18941895"@octokit/types@^6.0.3", "@octokit/types@^6.13.0", "@octokit/types@^6.16.1", "@octokit/types@^6.16.2":1896 version "6.16.4"1897 resolved "https://registry.yarnpkg.com/@octokit/types/-/types-6.16.4.tgz#d24f5e1bacd2fe96d61854b5bda0e88cf8288dfe"1898 integrity sha512-UxhWCdSzloULfUyamfOg4dJxV9B+XjgrIZscI0VCbp4eNrjmorGEw+4qdwcpTsu6DIrm9tQsFQS2pK5QkqQ04A==1899 dependencies:1900 "@octokit/openapi-types" "^7.3.2"19011902"@polkadot/api-contract@6.5.1":1903 version "6.5.1"1904 resolved "https://registry.yarnpkg.com/@polkadot/api-contract/-/api-contract-6.5.1.tgz#bc61e0def693ab866550c304384d909fec6cf64d"1905 integrity sha512-cV86H2oGKs9dbO3wf911ftRrGvbzq9tkJzTsocx12WhAKORVT11zIKPThaVmzzrdqSqN7q7tth8p4HBDXZp9qw==1906 dependencies:1907 "@babel/runtime" "^7.15.4"1908 "@polkadot/api" "6.5.1"1909 "@polkadot/types" "6.5.1"1910 "@polkadot/util" "^7.6.1"1911 rxjs "^7.4.0"19121913"@polkadot/api-derive@6.5.1":1914 version "6.5.1"1915 resolved "https://registry.yarnpkg.com/@polkadot/api-derive/-/api-derive-6.5.1.tgz#c2e7d632c3c156355218650e6414504d9a154b17"1916 integrity sha512-OwiCYcak3fqiZtE28FbqEd+ZTck9LmsEk01VPQigwSgNu/qbiuKGZ+MurK6yWy8sHbFdcDLPR07/iD5/fhQZRw==1917 dependencies:1918 "@babel/runtime" "^7.15.4"1919 "@polkadot/api" "6.5.1"1920 "@polkadot/rpc-core" "6.5.1"1921 "@polkadot/types" "6.5.1"1922 "@polkadot/util" "^7.6.1"1923 "@polkadot/util-crypto" "^7.6.1"1924 rxjs "^7.4.0"19251926"@polkadot/api-derive@6.5.2-3":1927 version "6.5.2-3"1928 resolved "https://registry.yarnpkg.com/@polkadot/api-derive/-/api-derive-6.5.2-3.tgz#c3c85a4326a105398083858d2eca44d14685d8b3"1929 integrity sha512-VSBKcSrZU/nvl2yy3w1hWkTayoYGXGyySUkYrc6H/xA6NDeU9Pj3p3PMNnI1zeTL9SIuoQs1g2h8k8Ynaxq5fQ==1930 dependencies:1931 "@babel/runtime" "^7.15.4"1932 "@polkadot/api" "6.5.2-3"1933 "@polkadot/rpc-core" "6.5.2-3"1934 "@polkadot/types" "6.5.2-3"1935 "@polkadot/util" "^7.6.1"1936 "@polkadot/util-crypto" "^7.6.1"1937 rxjs "^7.4.0"19381939"@polkadot/api@6.5.1":1940 version "6.5.1"1941 resolved "https://registry.yarnpkg.com/@polkadot/api/-/api-6.5.1.tgz#c6c46ed8274114d56652574bfc64a01610401490"1942 integrity sha512-hxnXb4qFlRbqBKnWgvNtRAukDRthAcLjhh1IY9oQ6WRJipdb2wMtNz6MY06gLI0MVGv9u2fOC6Rhd2JGo4CKZg==1943 dependencies:1944 "@babel/runtime" "^7.15.4"1945 "@polkadot/api-derive" "6.5.1"1946 "@polkadot/keyring" "^7.6.1"1947 "@polkadot/rpc-core" "6.5.1"1948 "@polkadot/rpc-provider" "6.5.1"1949 "@polkadot/types" "6.5.1"1950 "@polkadot/types-known" "6.5.1"1951 "@polkadot/util" "^7.6.1"1952 "@polkadot/util-crypto" "^7.6.1"1953 eventemitter3 "^4.0.7"1954 rxjs "^7.4.0"19551956"@polkadot/api@6.5.2-3":1957 version "6.5.2-3"1958 resolved "https://registry.yarnpkg.com/@polkadot/api/-/api-6.5.2-3.tgz#715f2746faf5edb84ddebeeaf9b37c15226a50f4"1959 integrity sha512-Ugrd3MK265cwE88cu6W9k/4bIutu5O5YFpw6t7Rf0OWOgibZsGnd1/CTi1e/F85Ro7FxyT7lBFQFM9XA1hUnDA==1960 dependencies:1961 "@babel/runtime" "^7.15.4"1962 "@polkadot/api-derive" "6.5.2-3"1963 "@polkadot/keyring" "^7.6.1"1964 "@polkadot/rpc-core" "6.5.2-3"1965 "@polkadot/rpc-provider" "6.5.2-3"1966 "@polkadot/types" "6.5.2-3"1967 "@polkadot/types-known" "6.5.2-3"1968 "@polkadot/util" "^7.6.1"1969 "@polkadot/util-crypto" "^7.6.1"1970 eventemitter3 "^4.0.7"1971 rxjs "^7.4.0"19721973"@polkadot/dev@0.63.9":1974 version "0.63.9"1975 resolved "https://registry.yarnpkg.com/@polkadot/dev/-/dev-0.63.9.tgz#911e92d2b8c60d35dbb897fb917f065f1aa750ac"1976 integrity sha512-lH9A7NTJNHJN+J4TBPcqhGkhEAsNAjqeVgUH980MwcovMo7mehFLadSt9Qi/+qFeZxEsp67+daeI4sqdo8csmg==1977 dependencies:1978 "@babel/cli" "^7.15.7"1979 "@babel/core" "^7.15.8"1980 "@babel/plugin-proposal-class-properties" "^7.14.5"1981 "@babel/plugin-proposal-nullish-coalescing-operator" "^7.14.5"1982 "@babel/plugin-proposal-numeric-separator" "^7.14.5"1983 "@babel/plugin-proposal-object-rest-spread" "^7.15.6"1984 "@babel/plugin-proposal-optional-chaining" "^7.14.5"1985 "@babel/plugin-proposal-private-methods" "^7.14.5"1986 "@babel/plugin-syntax-bigint" "^7.8.3"1987 "@babel/plugin-syntax-dynamic-import" "^7.8.3"1988 "@babel/plugin-syntax-import-meta" "^7.10.4"1989 "@babel/plugin-syntax-top-level-await" "^7.14.5"1990 "@babel/plugin-transform-regenerator" "^7.14.5"1991 "@babel/plugin-transform-runtime" "^7.15.8"1992 "@babel/preset-env" "^7.15.8"1993 "@babel/preset-react" "^7.14.5"1994 "@babel/preset-typescript" "^7.15.0"1995 "@babel/register" "^7.15.3"1996 "@babel/runtime" "^7.15.4"1997 "@rollup/plugin-alias" "^3.1.8"1998 "@rollup/plugin-commonjs" "^21.0.1"1999 "@rollup/plugin-inject" "^4.0.3"2000 "@rollup/plugin-json" "^4.1.0"2001 "@rollup/plugin-node-resolve" "^13.0.6"2002 "@rushstack/eslint-patch" "^1.0.8"2003 "@typescript-eslint/eslint-plugin" "5.1.0"2004 "@typescript-eslint/parser" "5.1.0"2005 "@vue/component-compiler-utils" "^3.2.2"2006 babel-jest "^27.3.1"2007 babel-plugin-module-extension-resolver "^1.0.0-rc.2"2008 babel-plugin-module-resolver "^4.1.0"2009 babel-plugin-styled-components "^1.13.3"2010 browserslist "^4.17.4"2011 chalk "^4.1.2"2012 coveralls "^3.1.1"2013 eslint "^8.1.0"2014 eslint-config-standard "^16.0.3"2015 eslint-import-resolver-node "^0.3.6"2016 eslint-plugin-header "^3.1.1"2017 eslint-plugin-import "^2.25.2"2018 eslint-plugin-import-newlines "^1.1.5"2019 eslint-plugin-node "^11.1.0"2020 eslint-plugin-promise "^5.1.1"2021 eslint-plugin-react "^7.26.1"2022 eslint-plugin-react-hooks "^4.2.1-alpha-930c9e7ee-20211015"2023 eslint-plugin-simple-import-sort "^7.0.0"2024 eslint-plugin-sort-destructure-keys "^1.3.5"2025 fs-extra "^10.0.0"2026 gh-pages "^3.2.3"2027 gh-release "^6.0.1"2028 glob "^7.2.0"2029 glob2base "^0.0.12"2030 jest "^27.3.1"2031 jest-cli "^27.3.1"2032 jest-config "^27.3.1"2033 jest-haste-map "^27.3.1"2034 jest-resolve "^27.3.1"2035 madge "^5.0.1"2036 minimatch "^3.0.4"2037 mkdirp "^1.0.4"2038 prettier "^2.4.1"2039 rimraf "^3.0.2"2040 rollup "^2.58.0"2041 typescript "^4.4.4"2042 yargs "^17.2.1"20432044"@polkadot/keyring@^7.6.1":2045 version "7.6.1"2046 resolved "https://registry.yarnpkg.com/@polkadot/keyring/-/keyring-7.6.1.tgz#a138e417cbbf85b3f0f66af66f5cd40735ba24a1"2047 integrity sha512-lpbTHAQqae++cvaNfuCjdz2xbNrk0ZSGCM8w08Br6NIz8NyrwR/qm1PfV75leoLq/Qx58+aj8v2qANEBOVz4vQ==2048 dependencies:2049 "@babel/runtime" "^7.15.4"2050 "@polkadot/util" "7.6.1"2051 "@polkadot/util-crypto" "7.6.1"20522053"@polkadot/networks@7.6.1", "@polkadot/networks@^7.6.1":2054 version "7.6.1"2055 resolved "https://registry.yarnpkg.com/@polkadot/networks/-/networks-7.6.1.tgz#d7ca346a3c15b29c9286ccbc67b1438bf9c8130e"2056 integrity sha512-76RdEVy+G14P13oxSe3+VDwFdVYRNVAy7xi9ESJBRZFnQC/TIL2rOeg7Gq5+HP/mkgzG4gL5X30VdE+aKzokpA==2057 dependencies:2058 "@babel/runtime" "^7.15.4"20592060"@polkadot/rpc-core@6.5.1":2061 version "6.5.1"2062 resolved "https://registry.yarnpkg.com/@polkadot/rpc-core/-/rpc-core-6.5.1.tgz#0a2ecb78b38c63f0831c7fb5363d9cc1fb72ec0e"2063 integrity sha512-teWI8iumsAMHF1vgMzbRVqpSTfVcNIG7bRwSlGoy4V4ZT8dS5LjOYCR7Eqr19wRuef1DjBY87oiN7e8M2x8jCA==2064 dependencies:2065 "@babel/runtime" "^7.15.4"2066 "@polkadot/rpc-provider" "6.5.1"2067 "@polkadot/types" "6.5.1"2068 "@polkadot/util" "^7.6.1"2069 rxjs "^7.4.0"20702071"@polkadot/rpc-core@6.5.2-3":2072 version "6.5.2-3"2073 resolved "https://registry.yarnpkg.com/@polkadot/rpc-core/-/rpc-core-6.5.2-3.tgz#72a15dd6288ed9232b12be1e6f8b848268d8b3bd"2074 integrity sha512-1Lkp4/k/MYbEqLj5adayw3jAMlrmwv0hGN5rfggyIQJVLXDpDf78frOIVLNGPsDQaB1Euizfxmm/IeShFAyvxg==2075 dependencies:2076 "@babel/runtime" "^7.15.4"2077 "@polkadot/rpc-provider" "6.5.2-3"2078 "@polkadot/types" "6.5.2-3"2079 "@polkadot/util" "^7.6.1"2080 rxjs "^7.4.0"20812082"@polkadot/rpc-provider@6.5.1":2083 version "6.5.1"2084 resolved "https://registry.yarnpkg.com/@polkadot/rpc-provider/-/rpc-provider-6.5.1.tgz#bde30ac49b62edb592b89e19aeea36d23e14b25c"2085 integrity sha512-09GId3vknImuEaRH0WDlrP8rsTC/QSIFM7sV55QzjfnLKRct1Fulez0hfFP25orXpjraWqHNZvY1yxniUxK6nA==2086 dependencies:2087 "@babel/runtime" "^7.15.4"2088 "@polkadot/types" "6.5.1"2089 "@polkadot/util" "^7.6.1"2090 "@polkadot/util-crypto" "^7.6.1"2091 "@polkadot/x-fetch" "^7.6.1"2092 "@polkadot/x-global" "^7.6.1"2093 "@polkadot/x-ws" "^7.6.1"2094 eventemitter3 "^4.0.7"20952096"@polkadot/rpc-provider@6.5.2-3":2097 version "6.5.2-3"2098 resolved "https://registry.yarnpkg.com/@polkadot/rpc-provider/-/rpc-provider-6.5.2-3.tgz#3f9c87123adddf957c0789e23963a82817d96537"2099 integrity sha512-Rw4oESRwJRIRlhjwhgrL8idbYelIFmSkdk3eV1QjLQZdkHUiZkujtltUnQgT5iRi1XvGN+0ybcgFDDaNz1Ncmg==2100 dependencies:2101 "@babel/runtime" "^7.15.4"2102 "@polkadot/types" "6.5.2-3"2103 "@polkadot/util" "^7.6.1"2104 "@polkadot/util-crypto" "^7.6.1"2105 "@polkadot/x-fetch" "^7.6.1"2106 "@polkadot/x-global" "^7.6.1"2107 "@polkadot/x-ws" "^7.6.1"2108 eventemitter3 "^4.0.7"21092110"@polkadot/ts@0.4.12":2111 version "0.4.12"2112 resolved "https://registry.yarnpkg.com/@polkadot/ts/-/ts-0.4.12.tgz#4fa15415fbf30b1719610d8814fade5c26ea3244"2113 integrity sha512-VXfCkEctJEx4gquXpfaKr7qvg4owGp+s9guy0GyodKQUz0N82VzUKdpllC+dmcTzGRzaU8X3EZOd9cTZrToAyQ==2114 dependencies:2115 "@types/chrome" "^0.0.159"21162117"@polkadot/typegen@6.5.2-3":2118 version "6.5.2-3"2119 resolved "https://registry.yarnpkg.com/@polkadot/typegen/-/typegen-6.5.2-3.tgz#f264ed18dbeb546be413aa905ac94e2043628159"2120 integrity sha512-jB3yC7QX8wbABPwtrSIeCPcmFqE/pNlg6MBShrZou4OVCt9uuyE4ju2QGLxxBHbeaXriltV4jrPpZUklKvNS+w==2121 dependencies:2122 "@babel/core" "^7.15.8"2123 "@babel/register" "^7.15.3"2124 "@babel/runtime" "^7.15.4"2125 "@polkadot/api" "6.5.2-3"2126 "@polkadot/rpc-provider" "6.5.2-3"2127 "@polkadot/types" "6.5.2-3"2128 "@polkadot/types-support" "6.5.2-3"2129 "@polkadot/util" "^7.6.1"2130 handlebars "^4.7.7"2131 websocket "^1.0.34"2132 yargs "^17.2.1"21332134"@polkadot/types-known@6.5.1":2135 version "6.5.1"2136 resolved "https://registry.yarnpkg.com/@polkadot/types-known/-/types-known-6.5.1.tgz#753af9a6c4188accb761639505e3e5cd7e5bc176"2137 integrity sha512-eIgk836zlA5KnhK6UotXYr/I9O12xxhNcKXTcA+8NY6ek2xQWlT9VGuMk4wTF4qU1sV/fhOFIDeoNrT7AgSagg==2138 dependencies:2139 "@babel/runtime" "^7.15.4"2140 "@polkadot/networks" "^7.6.1"2141 "@polkadot/types" "6.5.1"2142 "@polkadot/util" "^7.6.1"21432144"@polkadot/types-known@6.5.2-3":2145 version "6.5.2-3"2146 resolved "https://registry.yarnpkg.com/@polkadot/types-known/-/types-known-6.5.2-3.tgz#ebfa59495f576c0895accda20ac9c019f2afa91d"2147 integrity sha512-/ORaKrDnJdRgQy247G2Bst8WUWnKGf5snSZMFHAkVTfqQK4w017gsKR+NusgPiCqziHgRptdUsVgS4tFdh5lgQ==2148 dependencies:2149 "@babel/runtime" "^7.15.4"2150 "@polkadot/networks" "^7.6.1"2151 "@polkadot/types" "6.5.2-3"2152 "@polkadot/util" "^7.6.1"21532154"@polkadot/types-support@6.5.2-3":2155 version "6.5.2-3"2156 resolved "https://registry.yarnpkg.com/@polkadot/types-support/-/types-support-6.5.2-3.tgz#3d5d6fa864e825dd4bf3d00ca4de7af6e6167b09"2157 integrity sha512-FL6n7xqts5f70gHSiYflszUY0wKJt0LGQ+BmkGJ9lxda2R5Ynx6hRP/jIse6XYhCe8xDZwz/wzf2f+k7m7ooTg==2158 dependencies:2159 "@babel/runtime" "^7.15.4"2160 "@polkadot/util" "^7.6.1"21612162"@polkadot/types@6.5.1":2163 version "6.5.1"2164 resolved "https://registry.yarnpkg.com/@polkadot/types/-/types-6.5.1.tgz#6d348b7c37ec351506e952ee16f696ecf4a56725"2165 integrity sha512-EiW/5vbR6sP20Yq7wto7Ozepie6YzGjPCH4IPLkGrPsDaMegbwNRvEV+5AbCYvEPKF6LJoaRPUcF/WQxncVonA==2166 dependencies:2167 "@babel/runtime" "^7.15.4"2168 "@polkadot/util" "^7.6.1"2169 "@polkadot/util-crypto" "^7.6.1"2170 rxjs "^7.4.0"21712172"@polkadot/types@6.5.2-3":2173 version "6.5.2-3"2174 resolved "https://registry.yarnpkg.com/@polkadot/types/-/types-6.5.2-3.tgz#347e6044041d61cb411e03e2afefbbebd04d7115"2175 integrity sha512-N+OsC8fAEY8YGWQxV0GHrHIlMncIHbumxJVbiB4QdW8fL0kUDlfl0414+6lVMCLlgu+XkoyJXkEc2u+KYKseOA==2176 dependencies:2177 "@babel/runtime" "^7.15.4"2178 "@polkadot/util" "^7.6.1"2179 "@polkadot/util-crypto" "^7.6.1"2180 rxjs "^7.4.0"21812182"@polkadot/util-crypto@7.6.1", "@polkadot/util-crypto@^7.6.1":2183 version "7.6.1"2184 resolved "https://registry.yarnpkg.com/@polkadot/util-crypto/-/util-crypto-7.6.1.tgz#3e40270e9dce7885d92d0992aef9761feb57f2e2"2185 integrity sha512-5lLEfexkYOc73jitwC4K/Ll3JNA8Hdo2aU3GSOkDah8bBpm02djD7ypwfmuWRJw0UDyTgY67g0SXn4frPcQiag==2186 dependencies:2187 "@babel/runtime" "^7.15.4"2188 "@polkadot/networks" "7.6.1"2189 "@polkadot/util" "7.6.1"2190 "@polkadot/wasm-crypto" "^4.2.1"2191 "@polkadot/x-randomvalues" "7.6.1"2192 base-x "^3.0.9"2193 base64-js "^1.5.1"2194 blakejs "^1.1.1"2195 bn.js "^4.12.0"2196 create-hash "^1.2.0"2197 ed2curve "^0.3.0"2198 elliptic "^6.5.4"2199 hash.js "^1.1.7"2200 js-sha3 "^0.8.0"2201 scryptsy "^2.1.0"2202 tweetnacl "^1.0.3"2203 xxhashjs "^0.2.2"22042205"@polkadot/util@7.6.1", "@polkadot/util@^7.6.1":2206 version "7.6.1"2207 resolved "https://registry.yarnpkg.com/@polkadot/util/-/util-7.6.1.tgz#e6988124728fdf053929022827216241dd50a6fa"2208 integrity sha512-96UgzMOxwwsndGHN4aoyPYVRXpHcVpYb4zngFH2O9ma0YxrG2HhhqqoJ5pS0OUlhvcQkVz6T6t+heGFnTkvQxw==2209 dependencies:2210 "@babel/runtime" "^7.15.4"2211 "@polkadot/x-textdecoder" "7.6.1"2212 "@polkadot/x-textencoder" "7.6.1"2213 "@types/bn.js" "^4.11.6"2214 bn.js "^4.12.0"2215 camelcase "^6.2.0"2216 ip-regex "^4.3.0"22172218"@polkadot/wasm-crypto-asmjs@^4.2.1":2219 version "4.2.1"2220 resolved "https://registry.yarnpkg.com/@polkadot/wasm-crypto-asmjs/-/wasm-crypto-asmjs-4.2.1.tgz#6b7eae1c011709f8042dfd30872a5fc5e9e021c0"2221 integrity sha512-ON9EBpTNDCI3QRUmuQJIegYoAcwvxDaNNA7uwKTaEEStu8LjCIbQxbt4WbOBYWI0PoUpl4iIluXdT3XZ3V3jXA==2222 dependencies:2223 "@babel/runtime" "^7.15.3"22242225"@polkadot/wasm-crypto-wasm@^4.2.1":2226 version "4.2.1"2227 resolved "https://registry.yarnpkg.com/@polkadot/wasm-crypto-wasm/-/wasm-crypto-wasm-4.2.1.tgz#2a86f9b405e7195c3f523798c6ce4afffd19737e"2228 integrity sha512-Rs2CKiR4D+2hKzmKBfPNYxcd2E8NfLWia0av4fgicjT9YsWIWOGQUi9AtSOfazPOR9FrjxKJy+chQxAkcfKMnQ==2229 dependencies:2230 "@babel/runtime" "^7.15.3"22312232"@polkadot/wasm-crypto@^4.2.1":2233 version "4.2.1"2234 resolved "https://registry.yarnpkg.com/@polkadot/wasm-crypto/-/wasm-crypto-4.2.1.tgz#4d09402f5ac71a90962fb58cbe4b1707772a4fb6"2235 integrity sha512-C/A/QnemOilRTLnM0LfhPY2N/x3ZFd1ihm9sXYyuh98CxtekSVYI9h4IJ5Jrgz5imSUHgvt9oJLqJ5GbWQV/Zg==2236 dependencies:2237 "@babel/runtime" "^7.15.3"2238 "@polkadot/wasm-crypto-asmjs" "^4.2.1"2239 "@polkadot/wasm-crypto-wasm" "^4.2.1"22402241"@polkadot/x-fetch@^7.6.1":2242 version "7.6.1"2243 resolved "https://registry.yarnpkg.com/@polkadot/x-fetch/-/x-fetch-7.6.1.tgz#fda1a89bbb584217f96c2d3c3a3ce0f10a454436"2244 integrity sha512-CdjCg7BGhKfKNntUiK9vFOoum44o86TInPpqNumLGWAZmqI+kU0DCUDtqcw7uFOdZL1j/3GHdXigJ6LL1TnNcg==2245 dependencies:2246 "@babel/runtime" "^7.15.4"2247 "@polkadot/x-global" "7.6.1"2248 "@types/node-fetch" "^2.5.12"2249 node-fetch "^2.6.5"22502251"@polkadot/x-global@7.6.1", "@polkadot/x-global@^7.6.1":2252 version "7.6.1"2253 resolved "https://registry.yarnpkg.com/@polkadot/x-global/-/x-global-7.6.1.tgz#f43a61d40bfaf2f43f9a4ef39e01a24546768394"2254 integrity sha512-jKPNFHiC0yIc6TfqZtopaqsW3pDun1uh9lp0kcDkfOYozwwN1NVXWLClDBa2C5UiKU/jxA3biYiNZUyZpbV13g==2255 dependencies:2256 "@babel/runtime" "^7.15.4"22572258"@polkadot/x-randomvalues@7.6.1":2259 version "7.6.1"2260 resolved "https://registry.yarnpkg.com/@polkadot/x-randomvalues/-/x-randomvalues-7.6.1.tgz#0cd143cf976e36f5c9fcf53ba41fd5fffca95c44"2261 integrity sha512-hfSMBeMZTrnuejv/oXp3tMZARTOGyQZ3G0GW44dV2fR2L1+tlLj9VuXgVGgupNBq7AC6eSfE3XhJwCGyH5FhmQ==2262 dependencies:2263 "@babel/runtime" "^7.15.4"2264 "@polkadot/x-global" "7.6.1"22652266"@polkadot/x-textdecoder@7.6.1":2267 version "7.6.1"2268 resolved "https://registry.yarnpkg.com/@polkadot/x-textdecoder/-/x-textdecoder-7.6.1.tgz#7e80b512f1ddfd01f243dbbe8afc9dab7d0c6c85"2269 integrity sha512-sJtQMMw+jO3CwpOf0t1hrVl3xMw1BOLs/Xjd0v/yhiTAJ1rr6dqvhcnOHkU3a7udqo7G9dXDrnGi1q3efifXPw==2270 dependencies:2271 "@babel/runtime" "^7.15.4"2272 "@polkadot/x-global" "7.6.1"22732274"@polkadot/x-textencoder@7.6.1":2275 version "7.6.1"2276 resolved "https://registry.yarnpkg.com/@polkadot/x-textencoder/-/x-textencoder-7.6.1.tgz#2a2fb4baa13889fbc53b86ce9003de748f0df2aa"2277 integrity sha512-iqOGwXJIzc8rWYLPTYcO09LwA2q4fqwJhLsLCd+p13Z0yDSUvwgq785/2WEQfhSFbMd8HM6udedqrQTpnpIujg==2278 dependencies:2279 "@babel/runtime" "^7.15.4"2280 "@polkadot/x-global" "7.6.1"22812282"@polkadot/x-ws@^7.6.1":2283 version "7.6.1"2284 resolved "https://registry.yarnpkg.com/@polkadot/x-ws/-/x-ws-7.6.1.tgz#60c86cfb43935b38a6512f3e7bab362ffe6bec1f"2285 integrity sha512-nP8vHlL17SIuVinphuVbj2o3mfRWUTJqlhAYlA5RjO/sZ9TwYMvGTvL/1bOAfWdp/l451WLEWJtzSipzrVGBsg==2286 dependencies:2287 "@babel/runtime" "^7.15.4"2288 "@polkadot/x-global" "7.6.1"2289 "@types/websocket" "^1.0.4"2290 websocket "^1.0.34"22912292"@rollup/plugin-alias@^3.1.8":2293 version "3.1.8"2294 resolved "https://registry.yarnpkg.com/@rollup/plugin-alias/-/plugin-alias-3.1.8.tgz#645fd84659e08d3d1b059408fcdf69c1dd435a6b"2295 integrity sha512-tf7HeSs/06wO2LPqKNY3Ckbvy0JRe7Jyn98bXnt/gfrxbe+AJucoNJlsEVi9sdgbQtXemjbakCpO/76JVgnHpA==2296 dependencies:2297 slash "^3.0.0"22982299"@rollup/plugin-commonjs@^21.0.1":2300 version "21.0.1"2301 resolved "https://registry.yarnpkg.com/@rollup/plugin-commonjs/-/plugin-commonjs-21.0.1.tgz#1e57c81ae1518e4df0954d681c642e7d94588fee"2302 integrity sha512-EA+g22lbNJ8p5kuZJUYyhhDK7WgJckW5g4pNN7n4mAFUM96VuwUnNT3xr2Db2iCZPI1pJPbGyfT5mS9T1dHfMg==2303 dependencies:2304 "@rollup/pluginutils" "^3.1.0"2305 commondir "^1.0.1"2306 estree-walker "^2.0.1"2307 glob "^7.1.6"2308 is-reference "^1.2.1"2309 magic-string "^0.25.7"2310 resolve "^1.17.0"23112312"@rollup/plugin-inject@^4.0.3":2313 version "4.0.3"2314 resolved "https://registry.yarnpkg.com/@rollup/plugin-inject/-/plugin-inject-4.0.3.tgz#6f04ebc14790a8bf892286fe9b8c0eb1ddf4d5ce"2315 integrity sha512-lzMXmj0LZjd67MI+M8H9dk/oCxR0TYqYAdZ6ZOejWQLSUtud+FUPu4NCMAO8KyWWAalFo8ean7yFHCMvCNsCZw==2316 dependencies:2317 "@rollup/pluginutils" "^3.1.0"2318 estree-walker "^2.0.1"2319 magic-string "^0.25.7"23202321"@rollup/plugin-json@^4.1.0":2322 version "4.1.0"2323 resolved "https://registry.yarnpkg.com/@rollup/plugin-json/-/plugin-json-4.1.0.tgz#54e09867ae6963c593844d8bd7a9c718294496f3"2324 integrity sha512-yfLbTdNS6amI/2OpmbiBoW12vngr5NW2jCJVZSBEz+H5KfUJZ2M7sDjk0U6GOOdCWFVScShte29o9NezJ53TPw==2325 dependencies:2326 "@rollup/pluginutils" "^3.0.8"23272328"@rollup/plugin-node-resolve@^13.0.6":2329 version "13.0.6"2330 resolved "https://registry.yarnpkg.com/@rollup/plugin-node-resolve/-/plugin-node-resolve-13.0.6.tgz#29629070bb767567be8157f575cfa8f2b8e9ef77"2331 integrity sha512-sFsPDMPd4gMqnh2gS0uIxELnoRUp5kBl5knxD2EO0778G1oOJv4G1vyT2cpWz75OU2jDVcXhjVUuTAczGyFNKA==2332 dependencies:2333 "@rollup/pluginutils" "^3.1.0"2334 "@types/resolve" "1.17.1"2335 builtin-modules "^3.1.0"2336 deepmerge "^4.2.2"2337 is-module "^1.0.0"2338 resolve "^1.19.0"23392340"@rollup/pluginutils@^3.0.8", "@rollup/pluginutils@^3.1.0":2341 version "3.1.0"2342 resolved "https://registry.yarnpkg.com/@rollup/pluginutils/-/pluginutils-3.1.0.tgz#706b4524ee6dc8b103b3c995533e5ad680c02b9b"2343 integrity sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg==2344 dependencies:2345 "@types/estree" "0.0.39"2346 estree-walker "^1.0.1"2347 picomatch "^2.2.2"23482349"@rushstack/eslint-patch@^1.0.8":2350 version "1.0.8"2351 resolved "https://registry.yarnpkg.com/@rushstack/eslint-patch/-/eslint-patch-1.0.8.tgz#be3e914e84eacf16dbebd311c0d0b44aa1174c64"2352 integrity sha512-ZK5v4bJwgXldAUA8r3q9YKfCwOqoHTK/ZqRjSeRXQrBXWouoPnS4MQtgC4AXGiiBuUu5wxrRgTlv0ktmM4P1Aw==23532354"@sindresorhus/is@^0.14.0":2355 version "0.14.0"2356 resolved "https://registry.yarnpkg.com/@sindresorhus/is/-/is-0.14.0.tgz#9fb3a3cf3132328151f353de4632e01e52102bea"2357 integrity sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ==23582359"@sinonjs/commons@^1.7.0":2360 version "1.8.3"2361 resolved "https://registry.yarnpkg.com/@sinonjs/commons/-/commons-1.8.3.tgz#3802ddd21a50a949b6721ddd72da36e67e7f1b2d"2362 integrity sha512-xkNcLAn/wZaX14RPlwizcKicDk9G3F8m2nU3L7Ukm5zBgTwiT0wsoFAHx9Jq56fJA1z/7uKGtCRu16sOUCLIHQ==2363 dependencies:2364 type-detect "4.0.8"23652366"@sinonjs/fake-timers@^8.0.1":2367 version "8.0.1"2368 resolved "https://registry.yarnpkg.com/@sinonjs/fake-timers/-/fake-timers-8.0.1.tgz#1c1c9a91419f804e59ae8df316a07dd1c3a76b94"2369 integrity sha512-AU7kwFxreVd6OAXcAFlKSmZquiRUU0FvYm44k1Y1QbK7Co4m0aqfGMhjykIeQp/H6rcl+nFmj0zfdUcGVs9Dew==2370 dependencies:2371 "@sinonjs/commons" "^1.7.0"23722373"@szmarczak/http-timer@^1.1.2":2374 version "1.1.2"2375 resolved "https://registry.yarnpkg.com/@szmarczak/http-timer/-/http-timer-1.1.2.tgz#b1665e2c461a2cd92f4c1bbf50d5454de0d4b421"2376 integrity sha512-XIB2XbzHTN6ieIjfIMV9hlVcfPU26s2vafYWQcZHWXHOxiaRZYEDKEwdl129Zyg50+foYV2jCgtrqSA6qNuNSA==2377 dependencies:2378 defer-to-connect "^1.0.1"23792380"@tootallnate/once@1":2381 version "1.1.2"2382 resolved "https://registry.yarnpkg.com/@tootallnate/once/-/once-1.1.2.tgz#ccb91445360179a04e7fe6aff78c00ffc1eeaf82"2383 integrity sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==23842385"@tsconfig/node10@^1.0.7":2386 version "1.0.8"2387 resolved "https://registry.yarnpkg.com/@tsconfig/node10/-/node10-1.0.8.tgz#c1e4e80d6f964fbecb3359c43bd48b40f7cadad9"2388 integrity sha512-6XFfSQmMgq0CFLY1MslA/CPUfhIL919M1rMsa5lP2P097N2Wd1sSX0tx1u4olM16fLNhtHZpRhedZJphNJqmZg==23892390"@tsconfig/node12@^1.0.7":2391 version "1.0.9"2392 resolved "https://registry.yarnpkg.com/@tsconfig/node12/-/node12-1.0.9.tgz#62c1f6dee2ebd9aead80dc3afa56810e58e1a04c"2393 integrity sha512-/yBMcem+fbvhSREH+s14YJi18sp7J9jpuhYByADT2rypfajMZZN4WQ6zBGgBKp53NKmqI36wFYDb3yaMPurITw==23942395"@tsconfig/node14@^1.0.0":2396 version "1.0.1"2397 resolved "https://registry.yarnpkg.com/@tsconfig/node14/-/node14-1.0.1.tgz#95f2d167ffb9b8d2068b0b235302fafd4df711f2"2398 integrity sha512-509r2+yARFfHHE7T6Puu2jjkoycftovhXRqW328PDXTVGKihlb1P8Z9mMZH04ebyajfRY7dedfGynlrFHJUQCg==23992400"@tsconfig/node16@^1.0.2":2401 version "1.0.2"2402 resolved "https://registry.yarnpkg.com/@tsconfig/node16/-/node16-1.0.2.tgz#423c77877d0569db20e1fc80885ac4118314010e"2403 integrity sha512-eZxlbI8GZscaGS7kkc/trHTT5xgrjH3/1n2JDwusC9iahPKWMRvRjJSAN5mCXviuTGQ/lHnhvv8Q1YTpnfz9gA==24042405"@types/babel__core@^7.0.0", "@types/babel__core@^7.1.14":2406 version "7.1.14"2407 resolved "https://registry.yarnpkg.com/@types/babel__core/-/babel__core-7.1.14.tgz#faaeefc4185ec71c389f4501ee5ec84b170cc402"2408 integrity sha512-zGZJzzBUVDo/eV6KgbE0f0ZI7dInEYvo12Rb70uNQDshC3SkRMb67ja0GgRHZgAX3Za6rhaWlvbDO8rrGyAb1g==2409 dependencies:2410 "@babel/parser" "^7.1.0"2411 "@babel/types" "^7.0.0"2412 "@types/babel__generator" "*"2413 "@types/babel__template" "*"2414 "@types/babel__traverse" "*"24152416"@types/babel__generator@*":2417 version "7.6.2"2418 resolved "https://registry.yarnpkg.com/@types/babel__generator/-/babel__generator-7.6.2.tgz#f3d71178e187858f7c45e30380f8f1b7415a12d8"2419 integrity sha512-MdSJnBjl+bdwkLskZ3NGFp9YcXGx5ggLpQQPqtgakVhsWK0hTtNYhjpZLlWQTviGTvF8at+Bvli3jV7faPdgeQ==2420 dependencies:2421 "@babel/types" "^7.0.0"24222423"@types/babel__template@*":2424 version "7.4.0"2425 resolved "https://registry.yarnpkg.com/@types/babel__template/-/babel__template-7.4.0.tgz#0c888dd70b3ee9eebb6e4f200e809da0076262be"2426 integrity sha512-NTPErx4/FiPCGScH7foPyr+/1Dkzkni+rHiYHHoTjvwou7AQzJkNeD60A9CXRy+ZEN2B1bggmkTMCDb+Mv5k+A==2427 dependencies:2428 "@babel/parser" "^7.1.0"2429 "@babel/types" "^7.0.0"24302431"@types/babel__traverse@*", "@types/babel__traverse@^7.0.4", "@types/babel__traverse@^7.0.6":2432 version "7.11.1"2433 resolved "https://registry.yarnpkg.com/@types/babel__traverse/-/babel__traverse-7.11.1.tgz#654f6c4f67568e24c23b367e947098c6206fa639"2434 integrity sha512-Vs0hm0vPahPMYi9tDjtP66llufgO3ST16WXaSTtDGEl9cewAl3AibmxWw6TINOqHPT9z0uABKAYjT9jNSg4npw==2435 dependencies:2436 "@babel/types" "^7.3.0"24372438"@types/bn.js@^4.11.5", "@types/bn.js@^4.11.6":2439 version "4.11.6"2440 resolved "https://registry.yarnpkg.com/@types/bn.js/-/bn.js-4.11.6.tgz#c306c70d9358aaea33cd4eda092a742b9505967c"2441 integrity sha512-pqr857jrp2kPuO9uRjZ3PwnJTjoQy+fcdxvBTvHm6dkmEL9q+hDD/2j/0ELOBPtPnS8LjCX0gI9nbl8lVkadpg==2442 dependencies:2443 "@types/node" "*"24442445"@types/bn.js@^5.1.0":2446 version "5.1.0"2447 resolved "https://registry.yarnpkg.com/@types/bn.js/-/bn.js-5.1.0.tgz#32c5d271503a12653c62cf4d2b45e6eab8cebc68"2448 integrity sha512-QSSVYj7pYFN49kW77o2s9xTCwZ8F2xLbjLLSEVh8D2F4JUhZtPAGOFLTD+ffqksBx/u4cE/KImFjyhqCjn/LIA==2449 dependencies:2450 "@types/node" "*"24512452"@types/chai-as-promised@^7.1.4":2453 version "7.1.4"2454 resolved "https://registry.yarnpkg.com/@types/chai-as-promised/-/chai-as-promised-7.1.4.tgz#caf64e76fb056b8c8ced4b761ed499272b737601"2455 integrity sha512-1y3L1cHePcIm5vXkh1DSGf/zQq5n5xDKG1fpCvf18+uOkpce0Z1ozNFPkyWsVswK7ntN1sZBw3oU6gmN+pDUcA==2456 dependencies:2457 "@types/chai" "*"24582459"@types/chai@*":2460 version "4.2.18"2461 resolved "https://registry.yarnpkg.com/@types/chai/-/chai-4.2.18.tgz#0c8e298dbff8205e2266606c1ea5fbdba29b46e4"2462 integrity sha512-rS27+EkB/RE1Iz3u0XtVL5q36MGDWbgYe7zWiodyKNUnthxY0rukK5V36eiUCtCisB7NN8zKYH6DO2M37qxFEQ==24632464"@types/chai@^4.2.22":2465 version "4.2.22"2466 resolved "https://registry.yarnpkg.com/@types/chai/-/chai-4.2.22.tgz#47020d7e4cf19194d43b5202f35f75bd2ad35ce7"2467 integrity sha512-tFfcE+DSTzWAgifkjik9AySNqIyNoYwmR+uecPwwD/XRNfvOjmC/FjCxpiUGDkDVDphPfCUecSQVFw+lN3M3kQ==24682469"@types/chrome@^0.0.159":2470 version "0.0.159"2471 resolved "https://registry.yarnpkg.com/@types/chrome/-/chrome-0.0.159.tgz#0c1125fbb6d1fd64713e35de9aafbfd5a1b7a33a"2472 integrity sha512-WZBkNJGAwZuRgv/an94DANdzFtJK0TvlO/evMpJD/TYnkjIxynIAU6RM7M78e8tyig/vD6weQ9T1Ba7v8nYjXQ==2473 dependencies:2474 "@types/filesystem" "*"2475 "@types/har-format" "*"24762477"@types/estree@*":2478 version "0.0.50"2479 resolved "https://registry.yarnpkg.com/@types/estree/-/estree-0.0.50.tgz#1e0caa9364d3fccd2931c3ed96fdbeaa5d4cca83"2480 integrity sha512-C6N5s2ZFtuZRj54k2/zyRhNDjJwwcViAM3Nbm8zjBpbqAdZ00mr0CFxvSKeO8Y/e03WVFLpQMdHYVfUd6SB+Hw==24812482"@types/estree@0.0.39":2483 version "0.0.39"2484 resolved "https://registry.yarnpkg.com/@types/estree/-/estree-0.0.39.tgz#e177e699ee1b8c22d23174caaa7422644389509f"2485 integrity sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==24862487"@types/filesystem@*":2488 version "0.0.30"2489 resolved "https://registry.yarnpkg.com/@types/filesystem/-/filesystem-0.0.30.tgz#a7373a2edf34d13e298baf7ee1101f738b2efb7e"2490 integrity sha512-NCoRgmGmLpTT9VFL6Bb6z0jQuqI3d0E5FGl7M0JOv/J5RQYo9s5aOItPYnpckx9MbYQk1APLXcF8f20Vqnf2yA==2491 dependencies:2492 "@types/filewriter" "*"24932494"@types/filewriter@*":2495 version "0.0.29"2496 resolved "https://registry.yarnpkg.com/@types/filewriter/-/filewriter-0.0.29.tgz#a48795ecadf957f6c0d10e0c34af86c098fa5bee"2497 integrity sha512-BsPXH/irW0ht0Ji6iw/jJaK8Lj3FJemon2gvEqHKpCdDCeemHa+rI3WBGq5z7cDMZgoLjY40oninGxqk+8NzNQ==24982499"@types/graceful-fs@^4.1.2":2500 version "4.1.5"2501 resolved "https://registry.yarnpkg.com/@types/graceful-fs/-/graceful-fs-4.1.5.tgz#21ffba0d98da4350db64891f92a9e5db3cdb4e15"2502 integrity sha512-anKkLmZZ+xm4p8JWBf4hElkM4XR+EZeA2M9BAkkTldmcyDY4mbdIJnRghDJH3Ov5ooY7/UAoENtmdMSkaAd7Cw==2503 dependencies:2504 "@types/node" "*"25052506"@types/har-format@*":2507 version "1.2.6"2508 resolved "https://registry.yarnpkg.com/@types/har-format/-/har-format-1.2.6.tgz#471c83acdf6a2ea429620daee4c6dc1784a0e85f"2509 integrity sha512-TeZjp4COiAWPOeGx1tuFJETr/SBMx80lxqeqnCC36ZVn463f7ElCdA3X9RzDuo3BHjhN4apw41A5uoIw5FzgWA==25102511"@types/istanbul-lib-coverage@*", "@types/istanbul-lib-coverage@^2.0.0", "@types/istanbul-lib-coverage@^2.0.1":2512 version "2.0.3"2513 resolved "https://registry.yarnpkg.com/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.3.tgz#4ba8ddb720221f432e443bd5f9117fd22cfd4762"2514 integrity sha512-sz7iLqvVUg1gIedBOvlkxPlc8/uVzyS5OwGz1cKjXzkl3FpL3al0crU8YGU1WoHkxn0Wxbw5tyi6hvzJKNzFsw==25152516"@types/istanbul-lib-report@*":2517 version "3.0.0"2518 resolved "https://registry.yarnpkg.com/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz#c14c24f18ea8190c118ee7562b7ff99a36552686"2519 integrity sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==2520 dependencies:2521 "@types/istanbul-lib-coverage" "*"25222523"@types/istanbul-reports@^3.0.0":2524 version "3.0.1"2525 resolved "https://registry.yarnpkg.com/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz#9153fe98bba2bd565a63add9436d6f0d7f8468ff"2526 integrity sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==2527 dependencies:2528 "@types/istanbul-lib-report" "*"25292530"@types/json-schema@^7.0.9":2531 version "7.0.9"2532 resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.9.tgz#97edc9037ea0c38585320b28964dde3b39e4660d"2533 integrity sha512-qcUXuemtEu+E5wZSJHNxUXeCZhAfXKQ41D+duX+VYPde7xyEVZci+/oXKJL13tnRs9lR2pr4fod59GT6/X1/yQ==25342535"@types/json5@^0.0.29":2536 version "0.0.29"2537 resolved "https://registry.yarnpkg.com/@types/json5/-/json5-0.0.29.tgz#ee28707ae94e11d2b827bcbe5270bcea7f3e71ee"2538 integrity sha1-7ihweulOEdK4J7y+UnC86n8+ce4=25392540"@types/mocha@^9.0.0":2541 version "9.0.0"2542 resolved "https://registry.yarnpkg.com/@types/mocha/-/mocha-9.0.0.tgz#3205bcd15ada9bc681ac20bef64e9e6df88fd297"2543 integrity sha512-scN0hAWyLVAvLR9AyW7HoFF5sJZglyBsbPuHO4fv7JRvfmPBMfp1ozWqOf/e4wwPNxezBZXRfWzMb6iFLgEVRA==25442545"@types/node-fetch@^2.5.12":2546 version "2.5.12"2547 resolved "https://registry.yarnpkg.com/@types/node-fetch/-/node-fetch-2.5.12.tgz#8a6f779b1d4e60b7a57fb6fd48d84fb545b9cc66"2548 integrity sha512-MKgC4dlq4kKNa/mYrwpKfzQMB5X3ee5U6fSprkKpToBqBmX4nFZL9cW5jl6sWn+xpRJ7ypWh2yyqqr8UUCstSw==2549 dependencies:2550 "@types/node" "*"2551 form-data "^3.0.0"25522553"@types/node@*":2554 version "15.12.2"2555 resolved "https://registry.yarnpkg.com/@types/node/-/node-15.12.2.tgz#1f2b42c4be7156ff4a6f914b2fb03d05fa84e38d"2556 integrity sha512-zjQ69G564OCIWIOHSXyQEEDpdpGl+G348RAKY0XXy9Z5kU9Vzv1GMNnkar/ZJ8dzXB3COzD9Mo9NtRZ4xfgUww==25572558"@types/node@^12.12.6":2559 version "12.20.15"2560 resolved "https://registry.yarnpkg.com/@types/node/-/node-12.20.15.tgz#10ee6a6a3f971966fddfa3f6e89ef7a73ec622df"2561 integrity sha512-F6S4Chv4JicJmyrwlDkxUdGNSplsQdGwp1A0AJloEVDirWdZOAiRHhovDlsFkKUrquUXhz1imJhXHsf59auyAg==25622563"@types/node@^16.11.4":2564 version "16.11.4"2565 resolved "https://registry.yarnpkg.com/@types/node/-/node-16.11.4.tgz#90771124822d6663814f7c1c9b45a6654d8fd964"2566 integrity sha512-TMgXmy0v2xWyuCSCJM6NCna2snndD8yvQF67J29ipdzMcsPa9u+o0tjF5+EQNdhcuZplYuouYqpc4zcd5I6amQ==25672568"@types/pbkdf2@^3.0.0":2569 version "3.1.0"2570 resolved "https://registry.yarnpkg.com/@types/pbkdf2/-/pbkdf2-3.1.0.tgz#039a0e9b67da0cdc4ee5dab865caa6b267bb66b1"2571 integrity sha512-Cf63Rv7jCQ0LaL8tNXmEyqTHuIJxRdlS5vMh1mj5voN4+QFhVZnlZruezqpWYDiJ8UTzhP0VmeLXCmBk66YrMQ==2572 dependencies:2573 "@types/node" "*"25742575"@types/prettier@^2.1.5":2576 version "2.3.0"2577 resolved "https://registry.yarnpkg.com/@types/prettier/-/prettier-2.3.0.tgz#2e8332cc7363f887d32ec5496b207d26ba8052bb"2578 integrity sha512-hkc1DATxFLQo4VxPDpMH1gCkPpBbpOoJ/4nhuXw4n63/0R6bCpQECj4+K226UJ4JO/eJQz+1mC2I7JsWanAdQw==25792580"@types/resolve@1.17.1":2581 version "1.17.1"2582 resolved "https://registry.yarnpkg.com/@types/resolve/-/resolve-1.17.1.tgz#3afd6ad8967c77e4376c598a82ddd58f46ec45d6"2583 integrity sha512-yy7HuzQhj0dhGpD8RLXSZWEkLsV9ibvxvi6EiJ3bkqLAO1RGo0WbkWQiwpRlSFymTJRz0d3k5LM3kkx8ArDbLw==2584 dependencies:2585 "@types/node" "*"25862587"@types/secp256k1@^4.0.1":2588 version "4.0.2"2589 resolved "https://registry.yarnpkg.com/@types/secp256k1/-/secp256k1-4.0.2.tgz#20c29a87149d980f64464e56539bf4810fdb5d1d"2590 integrity sha512-QMg+9v0bbNJ2peLuHRWxzmy0HRJIG6gFZNhaRSp7S3ggSbCCxiqQB2/ybvhXyhHOCequpNkrx7OavNhrWOsW0A==2591 dependencies:2592 "@types/node" "*"25932594"@types/stack-utils@^2.0.0":2595 version "2.0.0"2596 resolved "https://registry.yarnpkg.com/@types/stack-utils/-/stack-utils-2.0.0.tgz#7036640b4e21cc2f259ae826ce843d277dad8cff"2597 integrity sha512-RJJrrySY7A8havqpGObOB4W92QXKJo63/jFLLgpvOtsGUqbQZ9Sbgl35KMm1DjC6j7AvmmU2bIno+3IyEaemaw==25982599"@types/websocket@^1.0.4":2600 version "1.0.4"2601 resolved "https://registry.yarnpkg.com/@types/websocket/-/websocket-1.0.4.tgz#1dc497280d8049a5450854dd698ee7e6ea9e60b8"2602 integrity sha512-qn1LkcFEKK8RPp459jkjzsfpbsx36BBt3oC3pITYtkoBw/aVX+EZFa5j3ThCRTNpLFvIMr5dSTD4RaMdilIOpA==2603 dependencies:2604 "@types/node" "*"26052606"@types/yargs-parser@*":2607 version "20.2.0"2608 resolved "https://registry.yarnpkg.com/@types/yargs-parser/-/yargs-parser-20.2.0.tgz#dd3e6699ba3237f0348cd085e4698780204842f9"2609 integrity sha512-37RSHht+gzzgYeobbG+KWryeAW8J33Nhr69cjTqSYymXVZEN9NbRYWoYlRtDhHKPVT1FyNKwaTPC1NynKZpzRA==26102611"@types/yargs@^16.0.0":2612 version "16.0.3"2613 resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-16.0.3.tgz#4b6d35bb8e680510a7dc2308518a80ee1ef27e01"2614 integrity sha512-YlFfTGS+zqCgXuXNV26rOIeETOkXnGQXP/pjjL9P0gO/EP9jTmc7pUBhx+jVEIxpq41RX33GQ7N3DzOSfZoglQ==2615 dependencies:2616 "@types/yargs-parser" "*"26172618"@typescript-eslint/eslint-plugin@5.1.0", "@typescript-eslint/eslint-plugin@^5.1.0":2619 version "5.1.0"2620 resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.1.0.tgz#381c188dfab12f7a2c7b6a8ba2402d6273eadeaa"2621 integrity sha512-bekODL3Tqf36Yz8u+ilha4zGxL9mdB6LIsIoMAvvC5FAuWo4NpZYXtCbv7B2CeR1LhI/lLtLk+q4tbtxuoVuCg==2622 dependencies:2623 "@typescript-eslint/experimental-utils" "5.1.0"2624 "@typescript-eslint/scope-manager" "5.1.0"2625 debug "^4.3.2"2626 functional-red-black-tree "^1.0.1"2627 ignore "^5.1.8"2628 regexpp "^3.2.0"2629 semver "^7.3.5"2630 tsutils "^3.21.0"26312632"@typescript-eslint/experimental-utils@5.1.0":2633 version "5.1.0"2634 resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-5.1.0.tgz#918a1a3d30404cc1f8edcfdf0df200804ef90d31"2635 integrity sha512-ovE9qUiZMOMgxQAESZsdBT+EXIfx/YUYAbwGUI6V03amFdOOxI9c6kitkgRvLkJaLusgMZ2xBhss+tQ0Y1HWxA==2636 dependencies:2637 "@types/json-schema" "^7.0.9"2638 "@typescript-eslint/scope-manager" "5.1.0"2639 "@typescript-eslint/types" "5.1.0"2640 "@typescript-eslint/typescript-estree" "5.1.0"2641 eslint-scope "^5.1.1"2642 eslint-utils "^3.0.0"26432644"@typescript-eslint/parser@5.1.0", "@typescript-eslint/parser@^5.1.0":2645 version "5.1.0"2646 resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-5.1.0.tgz#6c7f837d210d2bc0a811e7ea742af414f4e00908"2647 integrity sha512-vx1P+mhCtYw3+bRHmbalq/VKP2Y3gnzNgxGxfEWc6OFpuEL7iQdAeq11Ke3Rhy8NjgB+AHsIWEwni3e+Y7djKA==2648 dependencies:2649 "@typescript-eslint/scope-manager" "5.1.0"2650 "@typescript-eslint/types" "5.1.0"2651 "@typescript-eslint/typescript-estree" "5.1.0"2652 debug "^4.3.2"26532654"@typescript-eslint/scope-manager@5.1.0":2655 version "5.1.0"2656 resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-5.1.0.tgz#6f1f26ad66a8f71bbb33b635e74fec43f76b44df"2657 integrity sha512-yYlyVjvn5lvwCL37i4hPsa1s0ORsjkauhTqbb8MnpvUs7xykmcjGqwlNZ2Q5QpoqkJ1odlM2bqHqJwa28qV6Tw==2658 dependencies:2659 "@typescript-eslint/types" "5.1.0"2660 "@typescript-eslint/visitor-keys" "5.1.0"26612662"@typescript-eslint/types@4.27.0":2663 version "4.27.0"2664 resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-4.27.0.tgz#712b408519ed699baff69086bc59cd2fc13df8d8"2665 integrity sha512-I4ps3SCPFCKclRcvnsVA/7sWzh7naaM/b4pBO2hVxnM3wrU51Lveybdw5WoIktU/V4KfXrTt94V9b065b/0+wA==26662667"@typescript-eslint/types@5.1.0":2668 version "5.1.0"2669 resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.1.0.tgz#a8a75ddfc611660de6be17d3ad950302385607a9"2670 integrity sha512-sEwNINVxcB4ZgC6Fe6rUyMlvsB2jvVdgxjZEjQUQVlaSPMNamDOwO6/TB98kFt4sYYfNhdhTPBEQqNQZjMMswA==26712672"@typescript-eslint/typescript-estree@5.1.0":2673 version "5.1.0"2674 resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.1.0.tgz#132aea34372df09decda961cb42457433aa6e83d"2675 integrity sha512-SSz+l9YrIIsW4s0ZqaEfnjl156XQ4VRmJsbA0ZE1XkXrD3cRpzuZSVCyqeCMR3EBjF27IisWakbBDGhGNIOvfQ==2676 dependencies:2677 "@typescript-eslint/types" "5.1.0"2678 "@typescript-eslint/visitor-keys" "5.1.0"2679 debug "^4.3.2"2680 globby "^11.0.4"2681 is-glob "^4.0.3"2682 semver "^7.3.5"2683 tsutils "^3.21.0"26842685"@typescript-eslint/typescript-estree@^4.8.2":2686 version "4.27.0"2687 resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-4.27.0.tgz#189a7b9f1d0717d5cccdcc17247692dedf7a09da"2688 integrity sha512-KH03GUsUj41sRLLEy2JHstnezgpS5VNhrJouRdmh6yNdQ+yl8w5LrSwBkExM+jWwCJa7Ct2c8yl8NdtNRyQO6g==2689 dependencies:2690 "@typescript-eslint/types" "4.27.0"2691 "@typescript-eslint/visitor-keys" "4.27.0"2692 debug "^4.3.1"2693 globby "^11.0.3"2694 is-glob "^4.0.1"2695 semver "^7.3.5"2696 tsutils "^3.21.0"26972698"@typescript-eslint/visitor-keys@4.27.0":2699 version "4.27.0"2700 resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-4.27.0.tgz#f56138b993ec822793e7ebcfac6ffdce0a60cb81"2701 integrity sha512-es0GRYNZp0ieckZ938cEANfEhsfHrzuLrePukLKtY3/KPXcq1Xd555Mno9/GOgXhKzn0QfkDLVgqWO3dGY80bg==2702 dependencies:2703 "@typescript-eslint/types" "4.27.0"2704 eslint-visitor-keys "^2.0.0"27052706"@typescript-eslint/visitor-keys@5.1.0":2707 version "5.1.0"2708 resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.1.0.tgz#e01a01b27eb173092705ae983aa1451bd1842630"2709 integrity sha512-uqNXepKBg81JVwjuqAxYrXa1Ql/YDzM+8g/pS+TCPxba0wZttl8m5DkrasbfnmJGHs4lQ2jTbcZ5azGhI7kK+w==2710 dependencies:2711 "@typescript-eslint/types" "5.1.0"2712 eslint-visitor-keys "^3.0.0"27132714"@ungap/promise-all-settled@1.1.2":2715 version "1.1.2"2716 resolved "https://registry.yarnpkg.com/@ungap/promise-all-settled/-/promise-all-settled-1.1.2.tgz#aa58042711d6e3275dd37dc597e5d31e8c290a44"2717 integrity sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q==27182719"@vue/component-compiler-utils@^3.2.2":2720 version "3.2.2"2721 resolved "https://registry.yarnpkg.com/@vue/component-compiler-utils/-/component-compiler-utils-3.2.2.tgz#2f7ed5feed82ff7f0284acc11d525ee7eff22460"2722 integrity sha512-rAYMLmgMuqJFWAOb3Awjqqv5X3Q3hVr4jH/kgrFJpiU0j3a90tnNBplqbj+snzrgZhC9W128z+dtgMifOiMfJg==2723 dependencies:2724 consolidate "^0.15.1"2725 hash-sum "^1.0.2"2726 lru-cache "^4.1.2"2727 merge-source-map "^1.1.0"2728 postcss "^7.0.36"2729 postcss-selector-parser "^6.0.2"2730 source-map "~0.6.1"2731 vue-template-es2015-compiler "^1.9.0"2732 optionalDependencies:2733 prettier "^1.18.2"27342735abab@^2.0.3, abab@^2.0.5:2736 version "2.0.5"2737 resolved "https://registry.yarnpkg.com/abab/-/abab-2.0.5.tgz#c0b678fb32d60fc1219c784d6a826fe385aeb79a"2738 integrity sha512-9IK9EadsbHo6jLWIpxpR6pL0sazTXV6+SQv25ZB+F7Bj9mJNaOc4nCRabwd5M/JwmUa8idz6Eci6eKfJryPs6Q==27392740accepts@~1.3.7:2741 version "1.3.7"2742 resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.7.tgz#531bc726517a3b2b41f850021c6cc15eaab507cd"2743 integrity sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==2744 dependencies:2745 mime-types "~2.1.24"2746 negotiator "0.6.2"27472748acorn-globals@^6.0.0:2749 version "6.0.0"2750 resolved "https://registry.yarnpkg.com/acorn-globals/-/acorn-globals-6.0.0.tgz#46cdd39f0f8ff08a876619b55f5ac8a6dc770b45"2751 integrity sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg==2752 dependencies:2753 acorn "^7.1.1"2754 acorn-walk "^7.1.1"27552756acorn-jsx@^5.3.1:2757 version "5.3.1"2758 resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.1.tgz#fc8661e11b7ac1539c47dbfea2e72b3af34d267b"2759 integrity sha512-K0Ptm/47OKfQRpNQ2J/oIN/3QYiK6FwW+eJbILhsdxh2WTLdl+30o8aGdTbm5JbffpFFAg/g+zi1E+jvJha5ng==27602761acorn-walk@^7.1.1:2762 version "7.2.0"2763 resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-7.2.0.tgz#0de889a601203909b0fbe07b8938dc21d2e967bc"2764 integrity sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==27652766acorn-walk@^8.1.1:2767 version "8.2.0"2768 resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-8.2.0.tgz#741210f2e2426454508853a2f44d0ab83b7f69c1"2769 integrity sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==27702771acorn@^7.1.1:2772 version "7.4.1"2773 resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.4.1.tgz#feaed255973d2e77555b83dbc08851a6c63520fa"2774 integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==27752776acorn@^8.2.4:2777 version "8.4.0"2778 resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.4.0.tgz#af53266e698d7cffa416714b503066a82221be60"2779 integrity sha512-ULr0LDaEqQrMFGyQ3bhJkLsbtrQ8QibAseGZeaSUiT/6zb9IvIkomWHJIvgvwad+hinRAgsI51JcWk2yvwyL+w==27802781acorn@^8.4.1, acorn@^8.5.0:2782 version "8.5.0"2783 resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.5.0.tgz#4512ccb99b3698c752591e9bb4472e38ad43cee2"2784 integrity sha512-yXbYeFy+jUuYd3/CDcg2NkIYE991XYX/bje7LmjJigUciaeO1JR4XxXgCIV1/Zc/dRuFEyw1L0pbA+qynJkW5Q==27852786agent-base@6:2787 version "6.0.2"2788 resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-6.0.2.tgz#49fff58577cfee3f37176feab4c22e00f86d7f77"2789 integrity sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==2790 dependencies:2791 debug "4"27922793ajv@^6.10.0, ajv@^6.12.3, ajv@^6.12.4:2794 version "6.12.6"2795 resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4"2796 integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==2797 dependencies:2798 fast-deep-equal "^3.1.1"2799 fast-json-stable-stringify "^2.0.0"2800 json-schema-traverse "^0.4.1"2801 uri-js "^4.2.2"28022803ansi-align@^3.0.0:2804 version "3.0.0"2805 resolved "https://registry.yarnpkg.com/ansi-align/-/ansi-align-3.0.0.tgz#b536b371cf687caaef236c18d3e21fe3797467cb"2806 integrity sha512-ZpClVKqXN3RGBmKibdfWzqCY4lnjEuoNzU5T0oEFpfd/z5qJHVarukridD4juLO2FXMiwUQxr9WqQtaYa8XRYw==2807 dependencies:2808 string-width "^3.0.0"28092810ansi-colors@4.1.1, ansi-colors@^4.1.1:2811 version "4.1.1"2812 resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.1.tgz#cbb9ae256bf750af1eab344f229aa27fe94ba348"2813 integrity sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==28142815ansi-escapes@^4.2.1:2816 version "4.3.2"2817 resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-4.3.2.tgz#6b2291d1db7d98b6521d5f1efa42d0f3a9feb65e"2818 integrity sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==2819 dependencies:2820 type-fest "^0.21.3"28212822ansi-regex@^3.0.0:2823 version "3.0.0"2824 resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998"2825 integrity sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=28262827ansi-regex@^4.1.0:2828 version "4.1.0"2829 resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-4.1.0.tgz#8b9f8f08cf1acb843756a839ca8c7e3168c51997"2830 integrity sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==28312832ansi-regex@^5.0.0:2833 version "5.0.0"2834 resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.0.tgz#388539f55179bf39339c81af30a654d69f87cb75"2835 integrity sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==28362837ansi-regex@^5.0.1:2838 version "5.0.1"2839 resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304"2840 integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==28412842ansi-styles@^3.2.1:2843 version "3.2.1"2844 resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d"2845 integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==2846 dependencies:2847 color-convert "^1.9.0"28482849ansi-styles@^4.0.0, ansi-styles@^4.1.0:2850 version "4.3.0"2851 resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937"2852 integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==2853 dependencies:2854 color-convert "^2.0.1"28552856ansi-styles@^5.0.0:2857 version "5.2.0"2858 resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-5.2.0.tgz#07449690ad45777d1924ac2abb2fc8895dba836b"2859 integrity sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==28602861anymatch@^3.0.3, anymatch@~3.1.2:2862 version "3.1.2"2863 resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.2.tgz#c0557c096af32f106198f4f4e2a383537e378716"2864 integrity sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==2865 dependencies:2866 normalize-path "^3.0.0"2867 picomatch "^2.0.4"28682869app-module-path@^2.2.0:2870 version "2.2.0"2871 resolved "https://registry.yarnpkg.com/app-module-path/-/app-module-path-2.2.0.tgz#641aa55dfb7d6a6f0a8141c4b9c0aa50b6c24dd5"2872 integrity sha1-ZBqlXft9am8KgUHEucCqULbCTdU=28732874application-config-path@^0.1.0:2875 version "0.1.0"2876 resolved "https://registry.yarnpkg.com/application-config-path/-/application-config-path-0.1.0.tgz#193c5f0a86541a4c66fba1e2dc38583362ea5e8f"2877 integrity sha1-GTxfCoZUGkxm+6Hi3DhYM2LqXo8=28782879application-config@^2.0.0:2880 version "2.0.0"2881 resolved "https://registry.yarnpkg.com/application-config/-/application-config-2.0.0.tgz#15b4d54d61c0c082f9802227e3e85de876b47747"2882 integrity sha512-NC5/0guSZK3/UgUDfCk/riByXzqz0owL1L3r63JPSBzYk5QALrp3bLxbsR7qeSfvYfFmAhnp3dbqYsW3U9MpZQ==2883 dependencies:2884 application-config-path "^0.1.0"2885 load-json-file "^6.2.0"2886 write-json-file "^4.2.0"28872888"aproba@^1.0.3 || ^2.0.0":2889 version "2.0.0"2890 resolved "https://registry.yarnpkg.com/aproba/-/aproba-2.0.0.tgz#52520b8ae5b569215b354efc0caa3fe1e45a8adc"2891 integrity sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==28922893arg@^4.1.0:2894 version "4.1.3"2895 resolved "https://registry.yarnpkg.com/arg/-/arg-4.1.3.tgz#269fc7ad5b8e42cb63c896d5666017261c144089"2896 integrity sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==28972898argparse@^1.0.7:2899 version "1.0.10"2900 resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911"2901 integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==2902 dependencies:2903 sprintf-js "~1.0.2"29042905argparse@^2.0.1:2906 version "2.0.1"2907 resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38"2908 integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==29092910array-flatten@1.1.1:2911 version "1.1.1"2912 resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2"2913 integrity sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=29142915array-includes@^3.1.2, array-includes@^3.1.3:2916 version "3.1.3"2917 resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.1.3.tgz#c7f619b382ad2afaf5326cddfdc0afc61af7690a"2918 integrity sha512-gcem1KlBU7c9rB+Rq8/3PPKsK2kjqeEBa3bD5kkQo4nYlOHQCJqIJFqBXDEfwaRuYTT4E+FxA9xez7Gf/e3Q7A==2919 dependencies:2920 call-bind "^1.0.2"2921 define-properties "^1.1.3"2922 es-abstract "^1.18.0-next.2"2923 get-intrinsic "^1.1.1"2924 is-string "^1.0.5"29252926array-includes@^3.1.4:2927 version "3.1.4"2928 resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.1.4.tgz#f5b493162c760f3539631f005ba2bb46acb45ba9"2929 integrity sha512-ZTNSQkmWumEbiHO2GF4GmWxYVTiQyJy2XOTa15sdQSrvKn7l+180egQMqlrMOUMCyLMD7pmyQe4mMDUT6Behrw==2930 dependencies:2931 call-bind "^1.0.2"2932 define-properties "^1.1.3"2933 es-abstract "^1.19.1"2934 get-intrinsic "^1.1.1"2935 is-string "^1.0.7"29362937array-union@^1.0.1:2938 version "1.0.2"2939 resolved "https://registry.yarnpkg.com/array-union/-/array-union-1.0.2.tgz#9a34410e4f4e3da23dea375be5be70f24778ec39"2940 integrity sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=2941 dependencies:2942 array-uniq "^1.0.1"29432944array-union@^2.1.0:2945 version "2.1.0"2946 resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d"2947 integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==29482949array-uniq@^1.0.1:2950 version "1.0.3"2951 resolved "https://registry.yarnpkg.com/array-uniq/-/array-uniq-1.0.3.tgz#af6ac877a25cc7f74e058894753858dfdb24fdb6"2952 integrity sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=29532954array.prototype.flat@^1.2.5:2955 version "1.2.5"2956 resolved "https://registry.yarnpkg.com/array.prototype.flat/-/array.prototype.flat-1.2.5.tgz#07e0975d84bbc7c48cd1879d609e682598d33e13"2957 integrity sha512-KaYU+S+ndVqyUnignHftkwc58o3uVU1jzczILJ1tN2YaIZpFIKBiP/x/j97E5MVPsaCloPbqWLB/8qCTVvT2qg==2958 dependencies:2959 call-bind "^1.0.2"2960 define-properties "^1.1.3"2961 es-abstract "^1.19.0"29622963array.prototype.flatmap@^1.2.4:2964 version "1.2.4"2965 resolved "https://registry.yarnpkg.com/array.prototype.flatmap/-/array.prototype.flatmap-1.2.4.tgz#94cfd47cc1556ec0747d97f7c7738c58122004c9"2966 integrity sha512-r9Z0zYoxqHz60vvQbWEdXIEtCwHF0yxaWfno9qzXeNHvfyl3BZqygmGzb84dsubyaXLH4husF+NFgMSdpZhk2Q==2967 dependencies:2968 call-bind "^1.0.0"2969 define-properties "^1.1.3"2970 es-abstract "^1.18.0-next.1"2971 function-bind "^1.1.1"29722973asn1.js@^5.2.0:2974 version "5.4.1"2975 resolved "https://registry.yarnpkg.com/asn1.js/-/asn1.js-5.4.1.tgz#11a980b84ebb91781ce35b0fdc2ee294e3783f07"2976 integrity sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA==2977 dependencies:2978 bn.js "^4.0.0"2979 inherits "^2.0.1"2980 minimalistic-assert "^1.0.0"2981 safer-buffer "^2.1.0"29822983asn1@~0.2.3:2984 version "0.2.4"2985 resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.4.tgz#8d2475dfab553bb33e77b54e59e880bb8ce23136"2986 integrity sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==2987 dependencies:2988 safer-buffer "~2.1.0"29892990assert-plus@1.0.0, assert-plus@^1.0.0:2991 version "1.0.0"2992 resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525"2993 integrity sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=29942995assertion-error@^1.1.0:2996 version "1.1.0"2997 resolved "https://registry.yarnpkg.com/assertion-error/-/assertion-error-1.1.0.tgz#e60b6b0e8f301bd97e5375215bda406c85118c0b"2998 integrity sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==29993000ast-module-types@^2.3.2, ast-module-types@^2.4.0, ast-module-types@^2.7.0, ast-module-types@^2.7.1:3001 version "2.7.1"3002 resolved "https://registry.yarnpkg.com/ast-module-types/-/ast-module-types-2.7.1.tgz#3f7989ef8dfa1fdb82dfe0ab02bdfc7c77a57dd3"3003 integrity sha512-Rnnx/4Dus6fn7fTqdeLEAn5vUll5w7/vts0RN608yFa6si/rDOUonlIIiwugHBFWjylHjxm9owoSZn71KwG4gw==30043005async-limiter@~1.0.0:3006 version "1.0.1"3007 resolved "https://registry.yarnpkg.com/async-limiter/-/async-limiter-1.0.1.tgz#dd379e94f0db8310b08291f9d64c3209766617fd"3008 integrity sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==30093010async@^2.6.1:3011 version "2.6.3"3012 resolved "https://registry.yarnpkg.com/async/-/async-2.6.3.tgz#d72625e2344a3656e3a3ad4fa749fa83299d82ff"3013 integrity sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg==3014 dependencies:3015 lodash "^4.17.14"30163017async@^3.2.0:3018 version "3.2.0"3019 resolved "https://registry.yarnpkg.com/async/-/async-3.2.0.tgz#b3a2685c5ebb641d3de02d161002c60fc9f85720"3020 integrity sha512-TR2mEZFVOj2pLStYxLht7TyfuRzaydfpxr3k9RpHIzMgw7A64dzsdqCxH1WJyQdoe8T10nDXd9wnEigmiuHIZw==30213022asynckit@^0.4.0:3023 version "0.4.0"3024 resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79"3025 integrity sha1-x57Zf380y48robyXkLzDZkdLS3k=30263027available-typed-arrays@^1.0.2:3028 version "1.0.4"3029 resolved "https://registry.yarnpkg.com/available-typed-arrays/-/available-typed-arrays-1.0.4.tgz#9e0ae84ecff20caae6a94a1c3bc39b955649b7a9"3030 integrity sha512-SA5mXJWrId1TaQjfxUYghbqQ/hYioKmLJvPJyDuYRtXXenFNMjj4hSSt1Cf1xsuXSXrtxrVC5Ot4eU6cOtBDdA==30313032aws-sign2@~0.7.0:3033 version "0.7.0"3034 resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8"3035 integrity sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=30363037aws4@^1.8.0:3038 version "1.11.0"3039 resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.11.0.tgz#d61f46d83b2519250e2784daf5b09479a8b41c59"3040 integrity sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA==30413042babel-jest@^27.3.1:3043 version "27.3.1"3044 resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-27.3.1.tgz#0636a3404c68e07001e434ac4956d82da8a80022"3045 integrity sha512-SjIF8hh/ir0peae2D6S6ZKRhUy7q/DnpH7k/V6fT4Bgs/LXXUztOpX4G2tCgq8mLo5HA9mN6NmlFMeYtKmIsTQ==3046 dependencies:3047 "@jest/transform" "^27.3.1"3048 "@jest/types" "^27.2.5"3049 "@types/babel__core" "^7.1.14"3050 babel-plugin-istanbul "^6.0.0"3051 babel-preset-jest "^27.2.0"3052 chalk "^4.0.0"3053 graceful-fs "^4.2.4"3054 slash "^3.0.0"30553056babel-plugin-dynamic-import-node@^2.3.3:3057 version "2.3.3"3058 resolved "https://registry.yarnpkg.com/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz#84fda19c976ec5c6defef57f9427b3def66e17a3"3059 integrity sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==3060 dependencies:3061 object.assign "^4.1.0"30623063babel-plugin-istanbul@^6.0.0:3064 version "6.0.0"3065 resolved "https://registry.yarnpkg.com/babel-plugin-istanbul/-/babel-plugin-istanbul-6.0.0.tgz#e159ccdc9af95e0b570c75b4573b7c34d671d765"3066 integrity sha512-AF55rZXpe7trmEylbaE1Gv54wn6rwU03aptvRoVIGP8YykoSxqdVLV1TfwflBCE/QtHmqtP8SWlTENqbK8GCSQ==3067 dependencies:3068 "@babel/helper-plugin-utils" "^7.0.0"3069 "@istanbuljs/load-nyc-config" "^1.0.0"3070 "@istanbuljs/schema" "^0.1.2"3071 istanbul-lib-instrument "^4.0.0"3072 test-exclude "^6.0.0"30733074babel-plugin-jest-hoist@^27.2.0:3075 version "27.2.0"3076 resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-27.2.0.tgz#79f37d43f7e5c4fdc4b2ca3e10cc6cf545626277"3077 integrity sha512-TOux9khNKdi64mW+0OIhcmbAn75tTlzKhxmiNXevQaPbrBYK7YKjP1jl6NHTJ6XR5UgUrJbCnWlKVnJn29dfjw==3078 dependencies:3079 "@babel/template" "^7.3.3"3080 "@babel/types" "^7.3.3"3081 "@types/babel__core" "^7.0.0"3082 "@types/babel__traverse" "^7.0.6"30833084babel-plugin-module-extension-resolver@^1.0.0-rc.2:3085 version "1.0.0-rc.2"3086 resolved "https://registry.yarnpkg.com/babel-plugin-module-extension-resolver/-/babel-plugin-module-extension-resolver-1.0.0-rc.2.tgz#c12a5bc29c478cc87cdf9359188bf500db53eae9"3087 integrity sha512-nSvCi7Eq079snAYgWbq+VM8eci7OER9MAhDchuxpdimuyJr06x/Stsmc2b6zP5CDv4XR54Etkpf7jOo5NfzgVg==30883089babel-plugin-module-resolver@^4.1.0:3090 version "4.1.0"3091 resolved "https://registry.yarnpkg.com/babel-plugin-module-resolver/-/babel-plugin-module-resolver-4.1.0.tgz#22a4f32f7441727ec1fbf4967b863e1e3e9f33e2"3092 integrity sha512-MlX10UDheRr3lb3P0WcaIdtCSRlxdQsB1sBqL7W0raF070bGl1HQQq5K3T2vf2XAYie+ww+5AKC/WrkjRO2knA==3093 dependencies:3094 find-babel-config "^1.2.0"3095 glob "^7.1.6"3096 pkg-up "^3.1.0"3097 reselect "^4.0.0"3098 resolve "^1.13.1"30993100babel-plugin-polyfill-corejs2@^0.2.2:3101 version "0.2.2"3102 resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.2.2.tgz#e9124785e6fd94f94b618a7954e5693053bf5327"3103 integrity sha512-kISrENsJ0z5dNPq5eRvcctITNHYXWOA4DUZRFYCz3jYCcvTb/A546LIddmoGNMVYg2U38OyFeNosQwI9ENTqIQ==3104 dependencies:3105 "@babel/compat-data" "^7.13.11"3106 "@babel/helper-define-polyfill-provider" "^0.2.2"3107 semver "^6.1.1"31083109babel-plugin-polyfill-corejs3@^0.2.5:3110 version "0.2.5"3111 resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.2.5.tgz#2779846a16a1652244ae268b1e906ada107faf92"3112 integrity sha512-ninF5MQNwAX9Z7c9ED+H2pGt1mXdP4TqzlHKyPIYmJIYz0N+++uwdM7RnJukklhzJ54Q84vA4ZJkgs7lu5vqcw==3113 dependencies:3114 "@babel/helper-define-polyfill-provider" "^0.2.2"3115 core-js-compat "^3.16.2"31163117babel-plugin-polyfill-regenerator@^0.2.2:3118 version "0.2.2"3119 resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.2.2.tgz#b310c8d642acada348c1fa3b3e6ce0e851bee077"3120 integrity sha512-Goy5ghsc21HgPDFtzRkSirpZVW35meGoTmTOb2bxqdl60ghub4xOidgNTHaZfQ2FaxQsKmwvXtOAkcIS4SMBWg==3121 dependencies:3122 "@babel/helper-define-polyfill-provider" "^0.2.2"31233124babel-plugin-styled-components@^1.13.3:3125 version "1.13.3"3126 resolved "https://registry.yarnpkg.com/babel-plugin-styled-components/-/babel-plugin-styled-components-1.13.3.tgz#1f1cb3927d4afa1e324695c78f690900e3d075bc"3127 integrity sha512-meGStRGv+VuKA/q0/jXxrPNWEm4LPfYIqxooDTdmh8kFsP/Ph7jJG5rUPwUPX3QHUvggwdbgdGpo88P/rRYsVw==3128 dependencies:3129 "@babel/helper-annotate-as-pure" "^7.15.4"3130 "@babel/helper-module-imports" "^7.15.4"3131 babel-plugin-syntax-jsx "^6.18.0"3132 lodash "^4.17.11"31333134babel-plugin-syntax-jsx@^6.18.0:3135 version "6.18.0"3136 resolved "https://registry.yarnpkg.com/babel-plugin-syntax-jsx/-/babel-plugin-syntax-jsx-6.18.0.tgz#0af32a9a6e13ca7a3fd5069e62d7b0f58d0d8946"3137 integrity sha1-CvMqmm4Tyno/1QaeYtew9Y0NiUY=31383139babel-preset-current-node-syntax@^1.0.0:3140 version "1.0.1"3141 resolved "https://registry.yarnpkg.com/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz#b4399239b89b2a011f9ddbe3e4f401fc40cff73b"3142 integrity sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==3143 dependencies:3144 "@babel/plugin-syntax-async-generators" "^7.8.4"3145 "@babel/plugin-syntax-bigint" "^7.8.3"3146 "@babel/plugin-syntax-class-properties" "^7.8.3"3147 "@babel/plugin-syntax-import-meta" "^7.8.3"3148 "@babel/plugin-syntax-json-strings" "^7.8.3"3149 "@babel/plugin-syntax-logical-assignment-operators" "^7.8.3"3150 "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3"3151 "@babel/plugin-syntax-numeric-separator" "^7.8.3"3152 "@babel/plugin-syntax-object-rest-spread" "^7.8.3"3153 "@babel/plugin-syntax-optional-catch-binding" "^7.8.3"3154 "@babel/plugin-syntax-optional-chaining" "^7.8.3"3155 "@babel/plugin-syntax-top-level-await" "^7.8.3"31563157babel-preset-jest@^27.2.0:3158 version "27.2.0"3159 resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-27.2.0.tgz#556bbbf340608fed5670ab0ea0c8ef2449fba885"3160 integrity sha512-z7MgQ3peBwN5L5aCqBKnF6iqdlvZvFUQynEhu0J+X9nHLU72jO3iY331lcYrg+AssJ8q7xsv5/3AICzVmJ/wvg==3161 dependencies:3162 babel-plugin-jest-hoist "^27.2.0"3163 babel-preset-current-node-syntax "^1.0.0"31643165balanced-match@^1.0.0:3166 version "1.0.2"3167 resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee"3168 integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==31693170base-x@^3.0.2, base-x@^3.0.8:3171 version "3.0.8"3172 resolved "https://registry.yarnpkg.com/base-x/-/base-x-3.0.8.tgz#1e1106c2537f0162e8b52474a557ebb09000018d"3173 integrity sha512-Rl/1AWP4J/zRrk54hhlxH4drNxPJXYUaKffODVI53/dAsV4t9fBxyxYKAVPU1XBHxYwOWP9h9H0hM2MVw4YfJA==3174 dependencies:3175 safe-buffer "^5.0.1"31763177base-x@^3.0.9:3178 version "3.0.9"3179 resolved "https://registry.yarnpkg.com/base-x/-/base-x-3.0.9.tgz#6349aaabb58526332de9f60995e548a53fe21320"3180 integrity sha512-H7JU6iBHTal1gp56aKoaa//YUxEaAOUiydvrV/pILqIHXTtqxSkATOnDA2u+jZ/61sD+L/412+7kzXRtWukhpQ==3181 dependencies:3182 safe-buffer "^5.0.1"31833184base64-js@^1.3.1, base64-js@^1.5.1:3185 version "1.5.1"3186 resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a"3187 integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==31883189bcrypt-pbkdf@^1.0.0:3190 version "1.0.2"3191 resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz#a4301d389b6a43f9b67ff3ca11a3f6637e360e9e"3192 integrity sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=3193 dependencies:3194 tweetnacl "^0.14.3"31953196before-after-hook@^2.2.0:3197 version "2.2.2"3198 resolved "https://registry.yarnpkg.com/before-after-hook/-/before-after-hook-2.2.2.tgz#a6e8ca41028d90ee2c24222f201c90956091613e"3199 integrity sha512-3pZEU3NT5BFUo/AD5ERPWOgQOCZITni6iavr5AUw5AUwQjMlI0kzu5btnyD39AF0gUEsDPwJT+oY1ORBJijPjQ==32003201bignumber.js@^9.0.0, bignumber.js@^9.0.1:3202 version "9.0.1"3203 resolved "https://registry.yarnpkg.com/bignumber.js/-/bignumber.js-9.0.1.tgz#8d7ba124c882bfd8e43260c67475518d0689e4e5"3204 integrity sha512-IdZR9mh6ahOBv/hYGiXyVuyCetmGJhtYkqLBpTStdhEGjegpPlUawydyaF3pbIOFynJTpllEs+NP+CS9jKFLjA==32053206binary-extensions@^2.0.0:3207 version "2.2.0"3208 resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d"3209 integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==32103211bl@^4.1.0:3212 version "4.1.0"3213 resolved "https://registry.yarnpkg.com/bl/-/bl-4.1.0.tgz#451535264182bec2fbbc83a62ab98cf11d9f7b3a"3214 integrity sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==3215 dependencies:3216 buffer "^5.5.0"3217 inherits "^2.0.4"3218 readable-stream "^3.4.0"32193220blakejs@^1.1.0:3221 version "1.1.0"3222 resolved "https://registry.yarnpkg.com/blakejs/-/blakejs-1.1.0.tgz#69df92ef953aa88ca51a32df6ab1c54a155fc7a5"3223 integrity sha1-ad+S75U6qIylGjLfarHFShVfx6U=32243225blakejs@^1.1.1:3226 version "1.1.1"3227 resolved "https://registry.yarnpkg.com/blakejs/-/blakejs-1.1.1.tgz#bf313053978b2cd4c444a48795710be05c785702"3228 integrity sha512-bLG6PHOCZJKNshTjGRBvET0vTciwQE6zFKOKKXPDJfwFBd4Ac0yBfPZqcGvGJap50l7ktvlpFqc2jGVaUgbJgg==32293230bluebird@^3.1.1, bluebird@^3.5.0:3231 version "3.7.2"3232 resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.7.2.tgz#9f229c15be272454ffa973ace0dbee79a1b0c36f"3233 integrity sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==32343235bn.js@4.11.6:3236 version "4.11.6"3237 resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.11.6.tgz#53344adb14617a13f6e8dd2ce28905d1c0ba3215"3238 integrity sha1-UzRK2xRhehP26N0s4okF0cC6MhU=32393240bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.11.6, bn.js@^4.11.9, bn.js@^4.12.0:3241 version "4.12.0"3242 resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.12.0.tgz#775b3f278efbb9718eec7361f483fb36fbbfea88"3243 integrity sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==32443245bn.js@^5.0.0, bn.js@^5.1.1, bn.js@^5.1.2, bn.js@^5.2.0:3246 version "5.2.0"3247 resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-5.2.0.tgz#358860674396c6997771a9d051fcc1b57d4ae002"3248 integrity sha512-D7iWRBvnZE8ecXiLj/9wbxH7Tk79fAh8IHaTNq1RWRixsS02W+5qS+iE9yq6RYl0asXx5tw0bLhmT5pIfbSquw==32493250body-parser@1.19.0, body-parser@^1.16.0:3251 version "1.19.0"3252 resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.19.0.tgz#96b2709e57c9c4e09a6fd66a8fd979844f69f08a"3253 integrity sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==3254 dependencies:3255 bytes "3.1.0"3256 content-type "~1.0.4"3257 debug "2.6.9"3258 depd "~1.1.2"3259 http-errors "1.7.2"3260 iconv-lite "0.4.24"3261 on-finished "~2.3.0"3262 qs "6.7.0"3263 raw-body "2.4.0"3264 type-is "~1.6.17"32653266boxen@^5.0.0:3267 version "5.0.1"3268 resolved "https://registry.yarnpkg.com/boxen/-/boxen-5.0.1.tgz#657528bdd3f59a772b8279b831f27ec2c744664b"3269 integrity sha512-49VBlw+PrWEF51aCmy7QIteYPIFZxSpvqBdP/2itCPPlJ49kj9zg/XPRFrdkne2W+CfwXUls8exMvu1RysZpKA==3270 dependencies:3271 ansi-align "^3.0.0"3272 camelcase "^6.2.0"3273 chalk "^4.1.0"3274 cli-boxes "^2.2.1"3275 string-width "^4.2.0"3276 type-fest "^0.20.2"3277 widest-line "^3.1.0"3278 wrap-ansi "^7.0.0"32793280brace-expansion@^1.1.7:3281 version "1.1.11"3282 resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd"3283 integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==3284 dependencies:3285 balanced-match "^1.0.0"3286 concat-map "0.0.1"32873288braces@^3.0.1, braces@~3.0.2:3289 version "3.0.2"3290 resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107"3291 integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==3292 dependencies:3293 fill-range "^7.0.1"32943295brorand@^1.0.1, brorand@^1.1.0:3296 version "1.1.0"3297 resolved "https://registry.yarnpkg.com/brorand/-/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f"3298 integrity sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=32993300browser-process-hrtime@^1.0.0:3301 version "1.0.0"3302 resolved "https://registry.yarnpkg.com/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz#3c9b4b7d782c8121e56f10106d84c0d0ffc94626"3303 integrity sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==33043305browser-stdout@1.3.1:3306 version "1.3.1"3307 resolved "https://registry.yarnpkg.com/browser-stdout/-/browser-stdout-1.3.1.tgz#baa559ee14ced73452229bad7326467c61fabd60"3308 integrity sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==33093310browserify-aes@^1.0.0, browserify-aes@^1.0.4, browserify-aes@^1.2.0:3311 version "1.2.0"3312 resolved "https://registry.yarnpkg.com/browserify-aes/-/browserify-aes-1.2.0.tgz#326734642f403dabc3003209853bb70ad428ef48"3313 integrity sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==3314 dependencies:3315 buffer-xor "^1.0.3"3316 cipher-base "^1.0.0"3317 create-hash "^1.1.0"3318 evp_bytestokey "^1.0.3"3319 inherits "^2.0.1"3320 safe-buffer "^5.0.1"33213322browserify-cipher@^1.0.0:3323 version "1.0.1"3324 resolved "https://registry.yarnpkg.com/browserify-cipher/-/browserify-cipher-1.0.1.tgz#8d6474c1b870bfdabcd3bcfcc1934a10e94f15f0"3325 integrity sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==3326 dependencies:3327 browserify-aes "^1.0.4"3328 browserify-des "^1.0.0"3329 evp_bytestokey "^1.0.0"33303331browserify-des@^1.0.0:3332 version "1.0.2"3333 resolved "https://registry.yarnpkg.com/browserify-des/-/browserify-des-1.0.2.tgz#3af4f1f59839403572f1c66204375f7a7f703e9c"3334 integrity sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==3335 dependencies:3336 cipher-base "^1.0.1"3337 des.js "^1.0.0"3338 inherits "^2.0.1"3339 safe-buffer "^5.1.2"33403341browserify-rsa@^4.0.0, browserify-rsa@^4.0.1:3342 version "4.1.0"3343 resolved "https://registry.yarnpkg.com/browserify-rsa/-/browserify-rsa-4.1.0.tgz#b2fd06b5b75ae297f7ce2dc651f918f5be158c8d"3344 integrity sha512-AdEER0Hkspgno2aR97SAf6vi0y0k8NuOpGnVH3O99rcA5Q6sh8QxcngtHuJ6uXwnfAXNM4Gn1Gb7/MV1+Ymbog==3345 dependencies:3346 bn.js "^5.0.0"3347 randombytes "^2.0.1"33483349browserify-sign@^4.0.0:3350 version "4.2.1"3351 resolved "https://registry.yarnpkg.com/browserify-sign/-/browserify-sign-4.2.1.tgz#eaf4add46dd54be3bb3b36c0cf15abbeba7956c3"3352 integrity sha512-/vrA5fguVAKKAVTNJjgSm1tRQDHUU6DbwO9IROu/0WAzC8PKhucDSh18J0RMvVeHAn5puMd+QHC2erPRNf8lmg==3353 dependencies:3354 bn.js "^5.1.1"3355 browserify-rsa "^4.0.1"3356 create-hash "^1.2.0"3357 create-hmac "^1.1.7"3358 elliptic "^6.5.3"3359 inherits "^2.0.4"3360 parse-asn1 "^5.1.5"3361 readable-stream "^3.6.0"3362 safe-buffer "^5.2.0"33633364browserslist@^4.16.6:3365 version "4.16.6"3366 resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.16.6.tgz#d7901277a5a88e554ed305b183ec9b0c08f66fa2"3367 integrity sha512-Wspk/PqO+4W9qp5iUTJsa1B/QrYn1keNCcEP5OvP7WBwT4KaDly0uONYmC6Xa3Z5IqnUgS0KcgLYu1l74x0ZXQ==3368 dependencies:3369 caniuse-lite "^1.0.30001219"3370 colorette "^1.2.2"3371 electron-to-chromium "^1.3.723"3372 escalade "^3.1.1"3373 node-releases "^1.1.71"33743375browserslist@^4.16.7:3376 version "4.16.7"3377 resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.16.7.tgz#108b0d1ef33c4af1b587c54f390e7041178e4335"3378 integrity sha512-7I4qVwqZltJ7j37wObBe3SoTz+nS8APaNcrBOlgoirb6/HbEU2XxW/LpUDTCngM6iauwFqmRTuOMfyKnFGY5JA==3379 dependencies:3380 caniuse-lite "^1.0.30001248"3381 colorette "^1.2.2"3382 electron-to-chromium "^1.3.793"3383 escalade "^3.1.1"3384 node-releases "^1.1.73"33853386browserslist@^4.17.4, browserslist@^4.17.5:3387 version "4.17.5"3388 resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.17.5.tgz#c827bbe172a4c22b123f5e337533ceebadfdd559"3389 integrity sha512-I3ekeB92mmpctWBoLXe0d5wPS2cBuRvvW0JyyJHMrk9/HmP2ZjrTboNAZ8iuGqaEIlKguljbQY32OkOJIRrgoA==3390 dependencies:3391 caniuse-lite "^1.0.30001271"3392 electron-to-chromium "^1.3.878"3393 escalade "^3.1.1"3394 node-releases "^2.0.1"3395 picocolors "^1.0.0"33963397bs58@^4.0.0:3398 version "4.0.1"3399 resolved "https://registry.yarnpkg.com/bs58/-/bs58-4.0.1.tgz#be161e76c354f6f788ae4071f63f34e8c4f0a42a"3400 integrity sha1-vhYedsNU9veIrkBx9j806MTwpCo=3401 dependencies:3402 base-x "^3.0.2"34033404bs58check@^2.1.2:3405 version "2.1.2"3406 resolved "https://registry.yarnpkg.com/bs58check/-/bs58check-2.1.2.tgz#53b018291228d82a5aa08e7d796fdafda54aebfc"3407 integrity sha512-0TS1jicxdU09dwJMNZtVAfzPi6Q6QeN0pM1Fkzrjn+XYHvzMKPU3pHVpva+769iNVSfIYWf7LJ6WR+BuuMf8cA==3408 dependencies:3409 bs58 "^4.0.0"3410 create-hash "^1.1.0"3411 safe-buffer "^5.1.2"34123413bser@2.1.1:3414 version "2.1.1"3415 resolved "https://registry.yarnpkg.com/bser/-/bser-2.1.1.tgz#e6787da20ece9d07998533cfd9de6f5c38f4bc05"3416 integrity sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==3417 dependencies:3418 node-int64 "^0.4.0"34193420buffer-from@^1.0.0:3421 version "1.1.1"3422 resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef"3423 integrity sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==34243425buffer-to-arraybuffer@^0.0.5:3426 version "0.0.5"3427 resolved "https://registry.yarnpkg.com/buffer-to-arraybuffer/-/buffer-to-arraybuffer-0.0.5.tgz#6064a40fa76eb43c723aba9ef8f6e1216d10511a"3428 integrity sha1-YGSkD6dutDxyOrqe+PbhIW0QURo=34293430buffer-xor@^1.0.3:3431 version "1.0.3"3432 resolved "https://registry.yarnpkg.com/buffer-xor/-/buffer-xor-1.0.3.tgz#26e61ed1422fb70dd42e6e36729ed51d855fe8d9"3433 integrity sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=34343435buffer@^5.0.5, buffer@^5.5.0, buffer@^5.6.0:3436 version "5.7.1"3437 resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.7.1.tgz#ba62e7c13133053582197160851a8f648e99eed0"3438 integrity sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==3439 dependencies:3440 base64-js "^1.3.1"3441 ieee754 "^1.1.13"34423443bufferutil@^4.0.1:3444 version "4.0.3"3445 resolved "https://registry.yarnpkg.com/bufferutil/-/bufferutil-4.0.3.tgz#66724b756bed23cd7c28c4d306d7994f9943cc6b"3446 integrity sha512-yEYTwGndELGvfXsImMBLop58eaGW+YdONi1fNjTINSY98tmMmFijBG6WXgdkfuLNt4imzQNtIE+eBp1PVpMCSw==3447 dependencies:3448 node-gyp-build "^4.2.0"34493450builtin-modules@^1.1.1:3451 version "1.1.1"3452 resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-1.1.1.tgz#270f076c5a72c02f5b65a47df94c5fe3a278892f"3453 integrity sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=34543455builtin-modules@^3.1.0:3456 version "3.2.0"3457 resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-3.2.0.tgz#45d5db99e7ee5e6bc4f362e008bf917ab5049887"3458 integrity sha512-lGzLKcioL90C7wMczpkY0n/oART3MbBa8R9OFGE1rJxoVI86u4WAGfEk8Wjv10eKSyTHVGkSo3bvBylCEtk7LA==34593460bytes@3.1.0:3461 version "3.1.0"3462 resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.0.tgz#f6cf7933a360e0588fa9fde85651cdc7f805d1f6"3463 integrity sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==34643465cacheable-request@^6.0.0:3466 version "6.1.0"3467 resolved "https://registry.yarnpkg.com/cacheable-request/-/cacheable-request-6.1.0.tgz#20ffb8bd162ba4be11e9567d823db651052ca912"3468 integrity sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg==3469 dependencies:3470 clone-response "^1.0.2"3471 get-stream "^5.1.0"3472 http-cache-semantics "^4.0.0"3473 keyv "^3.0.0"3474 lowercase-keys "^2.0.0"3475 normalize-url "^4.1.0"3476 responselike "^1.0.2"34773478call-bind@^1.0.0, call-bind@^1.0.2:3479 version "1.0.2"3480 resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.2.tgz#b1d4e89e688119c3c9a903ad30abb2f6a919be3c"3481 integrity sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==3482 dependencies:3483 function-bind "^1.1.1"3484 get-intrinsic "^1.0.2"34853486callsites@^3.0.0:3487 version "3.1.0"3488 resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73"3489 integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==34903491camelcase@^5.3.1:3492 version "5.3.1"3493 resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320"3494 integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==34953496camelcase@^6.0.0, camelcase@^6.2.0:3497 version "6.2.0"3498 resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.2.0.tgz#924af881c9d525ac9d87f40d964e5cea982a1809"3499 integrity sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg==35003501caniuse-lite@^1.0.30001219:3502 version "1.0.30001238"3503 resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001238.tgz#e6a8b45455c5de601718736d0242feef0ecdda15"3504 integrity sha512-bZGam2MxEt7YNsa2VwshqWQMwrYs5tR5WZQRYSuFxsBQunWjBuXhN4cS9nV5FFb1Z9y+DoQcQ0COyQbv6A+CKw==35053506caniuse-lite@^1.0.30001248:3507 version "1.0.30001251"3508 resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001251.tgz#6853a606ec50893115db660f82c094d18f096d85"3509 integrity sha512-HOe1r+9VkU4TFmnU70z+r7OLmtR+/chB1rdcJUeQlAinjEeb0cKL20tlAtOagNZhbrtLnCvV19B4FmF1rgzl6A==35103511caniuse-lite@^1.0.30001271:3512 version "1.0.30001271"3513 resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001271.tgz#0dda0c9bcae2cf5407cd34cac304186616cc83e8"3514 integrity sha512-BBruZFWmt3HFdVPS8kceTBIguKxu4f99n5JNp06OlPD/luoAMIaIK5ieV5YjnBLH3Nysai9sxj9rpJj4ZisXOA==35153516caseless@~0.12.0:3517 version "0.12.0"3518 resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc"3519 integrity sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=35203521chai-as-promised@^7.1.1:3522 version "7.1.1"3523 resolved "https://registry.yarnpkg.com/chai-as-promised/-/chai-as-promised-7.1.1.tgz#08645d825deb8696ee61725dbf590c012eb00ca0"3524 integrity sha512-azL6xMoi+uxu6z4rhWQ1jbdUhOMhis2PvscD/xjLqNMkv3BPPp2JyyuTHOrf9BOosGpNQ11v6BKv/g57RXbiaA==3525 dependencies:3526 check-error "^1.0.2"35273528chai@^4.3.4:3529 version "4.3.4"3530 resolved "https://registry.yarnpkg.com/chai/-/chai-4.3.4.tgz#b55e655b31e1eac7099be4c08c21964fce2e6c49"3531 integrity sha512-yS5H68VYOCtN1cjfwumDSuzn/9c+yza4f3reKXlE5rUg7SFcCEy90gJvydNgOYtblyf4Zi6jIWRnXOgErta0KA==3532 dependencies:3533 assertion-error "^1.1.0"3534 check-error "^1.0.2"3535 deep-eql "^3.0.1"3536 get-func-name "^2.0.0"3537 pathval "^1.1.1"3538 type-detect "^4.0.5"35393540chalk@^2.0.0, chalk@^2.3.0, chalk@^2.4.2:3541 version "2.4.2"3542 resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424"3543 integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==3544 dependencies:3545 ansi-styles "^3.2.1"3546 escape-string-regexp "^1.0.5"3547 supports-color "^5.3.0"35483549chalk@^3.0.0:3550 version "3.0.0"3551 resolved "https://registry.yarnpkg.com/chalk/-/chalk-3.0.0.tgz#3f73c2bf526591f574cc492c51e2456349f844e4"3552 integrity sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==3553 dependencies:3554 ansi-styles "^4.1.0"3555 supports-color "^7.1.0"35563557chalk@^4.0.0, chalk@^4.1.0, chalk@^4.1.1:3558 version "4.1.1"3559 resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.1.tgz#c80b3fab28bf6371e6863325eee67e618b77e6ad"3560 integrity sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==3561 dependencies:3562 ansi-styles "^4.1.0"3563 supports-color "^7.1.0"35643565chalk@^4.1.2:3566 version "4.1.2"3567 resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01"3568 integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==3569 dependencies:3570 ansi-styles "^4.1.0"3571 supports-color "^7.1.0"35723573changelog-parser@^2.0.0:3574 version "2.8.0"3575 resolved "https://registry.yarnpkg.com/changelog-parser/-/changelog-parser-2.8.0.tgz#c14293e3e8fab797913c722de965480198650108"3576 integrity sha512-ZtSwN0hY7t+WpvaXqqXz98RHCNhWX9HsvCRAv1aBLlqJ7BpKtqdM6Nu6JOiUhRAWR7Gov0aN0fUnmflTz0WgZg==3577 dependencies:3578 line-reader "^0.2.4"3579 remove-markdown "^0.2.2"35803581char-regex@^1.0.2:3582 version "1.0.2"3583 resolved "https://registry.yarnpkg.com/char-regex/-/char-regex-1.0.2.tgz#d744358226217f981ed58f479b1d6bcc29545dcf"3584 integrity sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==35853586chardet@^0.7.0:3587 version "0.7.0"3588 resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.7.0.tgz#90094849f0937f2eedc2425d0d28a9e5f0cbad9e"3589 integrity sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==35903591check-error@^1.0.2:3592 version "1.0.2"3593 resolved "https://registry.yarnpkg.com/check-error/-/check-error-1.0.2.tgz#574d312edd88bb5dd8912e9286dd6c0aed4aac82"3594 integrity sha1-V00xLt2Iu13YkS6Sht1sCu1KrII=35953596chokidar@3.5.2, chokidar@^3.4.0:3597 version "3.5.2"3598 resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.2.tgz#dba3976fcadb016f66fd365021d91600d01c1e75"3599 integrity sha512-ekGhOnNVPgT77r4K/U3GDhu+FQ2S8TnK/s2KbIGXi0SZWuwkZ2QNyfWdZW+TVfn84DpEP7rLeCt2UI6bJ8GwbQ==3600 dependencies:3601 anymatch "~3.1.2"3602 braces "~3.0.2"3603 glob-parent "~5.1.2"3604 is-binary-path "~2.1.0"3605 is-glob "~4.0.1"3606 normalize-path "~3.0.0"3607 readdirp "~3.6.0"3608 optionalDependencies:3609 fsevents "~2.3.2"36103611chownr@^1.1.1:3612 version "1.1.4"3613 resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.4.tgz#6fc9d7b42d32a583596337666e7d08084da2cc6b"3614 integrity sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==36153616ci-info@^2.0.0:3617 version "2.0.0"3618 resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-2.0.0.tgz#67a9e964be31a51e15e5010d58e6f12834002f46"3619 integrity sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==36203621ci-info@^3.2.0:3622 version "3.2.0"3623 resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-3.2.0.tgz#2876cb948a498797b5236f0095bc057d0dca38b6"3624 integrity sha512-dVqRX7fLUm8J6FgHJ418XuIgDLZDkYcDFTeL6TA2gt5WlIZUQrrH6EZrNClwT/H0FateUsZkGIOPRrLbP+PR9A==36253626cids@^0.7.1:3627 version "0.7.5"3628 resolved "https://registry.yarnpkg.com/cids/-/cids-0.7.5.tgz#60a08138a99bfb69b6be4ceb63bfef7a396b28b2"3629 integrity sha512-zT7mPeghoWAu+ppn8+BS1tQ5qGmbMfB4AregnQjA/qHY3GC1m1ptI9GkWNlgeu38r7CuRdXB47uY2XgAYt6QVA==3630 dependencies:3631 buffer "^5.5.0"3632 class-is "^1.1.0"3633 multibase "~0.6.0"3634 multicodec "^1.0.0"3635 multihashes "~0.4.15"36363637cipher-base@^1.0.0, cipher-base@^1.0.1, cipher-base@^1.0.3:3638 version "1.0.4"3639 resolved "https://registry.yarnpkg.com/cipher-base/-/cipher-base-1.0.4.tgz#8760e4ecc272f4c363532f926d874aae2c1397de"3640 integrity sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==3641 dependencies:3642 inherits "^2.0.1"3643 safe-buffer "^5.0.1"36443645cjs-module-lexer@^1.0.0:3646 version "1.2.1"3647 resolved "https://registry.yarnpkg.com/cjs-module-lexer/-/cjs-module-lexer-1.2.1.tgz#2fd46d9906a126965aa541345c499aaa18e8cd73"3648 integrity sha512-jVamGdJPDeuQilKhvVn1h3knuMOZzr8QDnpk+M9aMlCaMkTDd6fBWPhiDqFvFZ07pL0liqabAiuy8SY4jGHeaw==36493650class-is@^1.1.0:3651 version "1.1.0"3652 resolved "https://registry.yarnpkg.com/class-is/-/class-is-1.1.0.tgz#9d3c0fba0440d211d843cec3dedfa48055005825"3653 integrity sha512-rhjH9AG1fvabIDoGRVH587413LPjTZgmDF9fOFCbFJQV4yuocX1mHxxvXI4g3cGwbVY9wAYIoKlg1N79frJKQw==36543655cli-boxes@^2.2.1:3656 version "2.2.1"3657 resolved "https://registry.yarnpkg.com/cli-boxes/-/cli-boxes-2.2.1.tgz#ddd5035d25094fce220e9cab40a45840a440318f"3658 integrity sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw==36593660cli-cursor@^3.1.0:3661 version "3.1.0"3662 resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-3.1.0.tgz#264305a7ae490d1d03bf0c9ba7c925d1753af307"3663 integrity sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==3664 dependencies:3665 restore-cursor "^3.1.0"36663667cli-spinners@^2.2.0, cli-spinners@^2.5.0:3668 version "2.6.0"3669 resolved "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-2.6.0.tgz#36c7dc98fb6a9a76bd6238ec3f77e2425627e939"3670 integrity sha512-t+4/y50K/+4xcCRosKkA7W4gTr1MySvLV0q+PxmG7FJ5g+66ChKurYjxBCjHggHH3HA5Hh9cy+lcUGWDqVH+4Q==36713672cli-width@^3.0.0:3673 version "3.0.0"3674 resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-3.0.0.tgz#a2f48437a2caa9a22436e794bf071ec9e61cedf6"3675 integrity sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==36763677cliui@^7.0.2:3678 version "7.0.4"3679 resolved "https://registry.yarnpkg.com/cliui/-/cliui-7.0.4.tgz#a0265ee655476fc807aea9df3df8df7783808b4f"3680 integrity sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==3681 dependencies:3682 string-width "^4.2.0"3683 strip-ansi "^6.0.0"3684 wrap-ansi "^7.0.0"36853686clone-deep@^4.0.1:3687 version "4.0.1"3688 resolved "https://registry.yarnpkg.com/clone-deep/-/clone-deep-4.0.1.tgz#c19fd9bdbbf85942b4fd979c84dcf7d5f07c2387"3689 integrity sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==3690 dependencies:3691 is-plain-object "^2.0.4"3692 kind-of "^6.0.2"3693 shallow-clone "^3.0.0"36943695clone-response@^1.0.2:3696 version "1.0.2"3697 resolved "https://registry.yarnpkg.com/clone-response/-/clone-response-1.0.2.tgz#d1dc973920314df67fbeb94223b4ee350239e96b"3698 integrity sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws=3699 dependencies:3700 mimic-response "^1.0.0"37013702clone@^1.0.2:3703 version "1.0.4"3704 resolved "https://registry.yarnpkg.com/clone/-/clone-1.0.4.tgz#da309cc263df15994c688ca902179ca3c7cd7c7e"3705 integrity sha1-2jCcwmPfFZlMaIypAheco8fNfH4=37063707co@^4.6.0:3708 version "4.6.0"3709 resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184"3710 integrity sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=37113712collect-v8-coverage@^1.0.0:3713 version "1.0.1"3714 resolved "https://registry.yarnpkg.com/collect-v8-coverage/-/collect-v8-coverage-1.0.1.tgz#cc2c8e94fc18bbdffe64d6534570c8a673b27f59"3715 integrity sha512-iBPtljfCNcTKNAto0KEtDfZ3qzjJvqE3aTGZsbhjSBlorqpXJlaWWtPO35D+ZImoC3KWejX64o+yPGxhWSTzfg==37163717color-convert@^1.9.0:3718 version "1.9.3"3719 resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8"3720 integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==3721 dependencies:3722 color-name "1.1.3"37233724color-convert@^2.0.1:3725 version "2.0.1"3726 resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3"3727 integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==3728 dependencies:3729 color-name "~1.1.4"37303731color-name@1.1.3:3732 version "1.1.3"3733 resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25"3734 integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=37353736color-name@^1.1.4, color-name@~1.1.4:3737 version "1.1.4"3738 resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2"3739 integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==37403741color-support@^1.1.2:3742 version "1.1.3"3743 resolved "https://registry.yarnpkg.com/color-support/-/color-support-1.1.3.tgz#93834379a1cc9a0c61f82f52f0d04322251bd5a2"3744 integrity sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==37453746colorette@^1.2.2:3747 version "1.2.2"3748 resolved "https://registry.yarnpkg.com/colorette/-/colorette-1.2.2.tgz#cbcc79d5e99caea2dbf10eb3a26fd8b3e6acfa94"3749 integrity sha512-MKGMzyfeuutC/ZJ1cba9NqcNpfeqMUcYmyF1ZFY6/Cn7CNSAKx6a+s48sqLqyAiZuaP2TcqMhoo+dlwFnVxT9w==37503751combined-stream@^1.0.6, combined-stream@^1.0.8, combined-stream@~1.0.6:3752 version "1.0.8"3753 resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f"3754 integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==3755 dependencies:3756 delayed-stream "~1.0.0"37573758command-exists@^1.2.8:3759 version "1.2.9"3760 resolved "https://registry.yarnpkg.com/command-exists/-/command-exists-1.2.9.tgz#c50725af3808c8ab0260fd60b01fbfa25b954f69"3761 integrity sha512-LTQ/SGc+s0Xc0Fu5WaKnR0YiygZkm9eKFvyS+fRsU7/ZWFF8ykFM6Pc9aCVf1+xasOOZpO3BAVgVrKvsqKHV7w==37623763commander@^2.12.1, commander@^2.16.0, commander@^2.18.0, commander@^2.20.3, commander@^2.8.1:3764 version "2.20.3"3765 resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33"3766 integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==37673768commander@^4.0.1:3769 version "4.1.1"3770 resolved "https://registry.yarnpkg.com/commander/-/commander-4.1.1.tgz#9fd602bd936294e9e9ef46a3f4d6964044b18068"3771 integrity sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==37723773commander@^7.2.0:3774 version "7.2.0"3775 resolved "https://registry.yarnpkg.com/commander/-/commander-7.2.0.tgz#a36cb57d0b501ce108e4d20559a150a391d97ab7"3776 integrity sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==37773778commander@^8.1.0:3779 version "8.3.0"3780 resolved "https://registry.yarnpkg.com/commander/-/commander-8.3.0.tgz#4837ea1b2da67b9c616a67afbb0fafee567bca66"3781 integrity sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==37823783commondir@^1.0.1:3784 version "1.0.1"3785 resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b"3786 integrity sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=37873788concat-map@0.0.1:3789 version "0.0.1"3790 resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b"3791 integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=37923793configstore@^5.0.1:3794 version "5.0.1"3795 resolved "https://registry.yarnpkg.com/configstore/-/configstore-5.0.1.tgz#d365021b5df4b98cdd187d6a3b0e3f6a7cc5ed96"3796 integrity sha512-aMKprgk5YhBNyH25hj8wGt2+D52Sw1DRRIzqBwLp2Ya9mFmY8KPvvtvmna8SxVR9JMZ4kzMD68N22vlaRpkeFA==3797 dependencies:3798 dot-prop "^5.2.0"3799 graceful-fs "^4.1.2"3800 make-dir "^3.0.0"3801 unique-string "^2.0.0"3802 write-file-atomic "^3.0.0"3803 xdg-basedir "^4.0.0"38043805console-control-strings@^1.0.0:3806 version "1.1.0"3807 resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e"3808 integrity sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=38093810consolidate@^0.15.1:3811 version "0.15.1"3812 resolved "https://registry.yarnpkg.com/consolidate/-/consolidate-0.15.1.tgz#21ab043235c71a07d45d9aad98593b0dba56bab7"3813 integrity sha512-DW46nrsMJgy9kqAbPt5rKaCr7uFtpo4mSUvLHIUbJEjm0vo+aY5QLwBUq3FK4tRnJr/X0Psc0C4jf/h+HtXSMw==3814 dependencies:3815 bluebird "^3.1.1"38163817content-disposition@0.5.3:3818 version "0.5.3"3819 resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.3.tgz#e130caf7e7279087c5616c2007d0485698984fbd"3820 integrity sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==3821 dependencies:3822 safe-buffer "5.1.2"38233824content-hash@^2.5.2:3825 version "2.5.2"3826 resolved "https://registry.yarnpkg.com/content-hash/-/content-hash-2.5.2.tgz#bbc2655e7c21f14fd3bfc7b7d4bfe6e454c9e211"3827 integrity sha512-FvIQKy0S1JaWV10sMsA7TRx8bpU+pqPkhbsfvOJAdjRXvYxEckAwQWGwtRjiaJfh+E0DvcWUGqcdjwMGFjsSdw==3828 dependencies:3829 cids "^0.7.1"3830 multicodec "^0.5.5"3831 multihashes "^0.4.15"38323833content-type@~1.0.4:3834 version "1.0.4"3835 resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.4.tgz#e138cc75e040c727b1966fe5e5f8c9aee256fe3b"3836 integrity sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==38373838convert-source-map@^1.1.0, convert-source-map@^1.4.0, convert-source-map@^1.6.0, convert-source-map@^1.7.0:3839 version "1.7.0"3840 resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.7.0.tgz#17a2cb882d7f77d3490585e2ce6c524424a3a442"3841 integrity sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA==3842 dependencies:3843 safe-buffer "~5.1.1"38443845cookie-signature@1.0.6:3846 version "1.0.6"3847 resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c"3848 integrity sha1-4wOogrNCzD7oylE6eZmXNNqzriw=38493850cookie@0.4.0:3851 version "0.4.0"3852 resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.4.0.tgz#beb437e7022b3b6d49019d088665303ebe9c14ba"3853 integrity sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg==38543855cookiejar@^2.1.1:3856 version "2.1.2"3857 resolved "https://registry.yarnpkg.com/cookiejar/-/cookiejar-2.1.2.tgz#dd8a235530752f988f9a0844f3fc589e3111125c"3858 integrity sha512-Mw+adcfzPxcPeI+0WlvRrr/3lGVO0bD75SxX6811cxSh1Wbxx7xZBGK1eVtDf6si8rg2lhnUjsVLMFMfbRIuwA==38593860core-js-compat@^3.16.0:3861 version "3.16.1"3862 resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.16.1.tgz#c44b7caa2dcb94b673a98f27eee1c8312f55bc2d"3863 integrity sha512-NHXQXvRbd4nxp9TEmooTJLUf94ySUG6+DSsscBpTftN1lQLQ4LjnWvc7AoIo4UjDsFF3hB8Uh5LLCRRdaiT5MQ==3864 dependencies:3865 browserslist "^4.16.7"3866 semver "7.0.0"38673868core-js-compat@^3.16.2:3869 version "3.19.0"3870 resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.19.0.tgz#b3b93f93c8721b3ed52b91f12f964cc410967f8b"3871 integrity sha512-R09rKZ56ccGBebjTLZHvzDxhz93YPT37gBm6qUhnwj3Kt7aCjjZWD1injyNbyeFHxNKfeZBSyds6O9n3MKq1sw==3872 dependencies:3873 browserslist "^4.17.5"3874 semver "7.0.0"38753876core-util-is@1.0.2, core-util-is@~1.0.0:3877 version "1.0.2"3878 resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7"3879 integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=38803881cors@^2.8.1:3882 version "2.8.5"3883 resolved "https://registry.yarnpkg.com/cors/-/cors-2.8.5.tgz#eac11da51592dd86b9f06f6e7ac293b3df875d29"3884 integrity sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==3885 dependencies:3886 object-assign "^4"3887 vary "^1"38883889coveralls@^3.1.1:3890 version "3.1.1"3891 resolved "https://registry.yarnpkg.com/coveralls/-/coveralls-3.1.1.tgz#f5d4431d8b5ae69c5079c8f8ca00d64ac77cf081"3892 integrity sha512-+dxnG2NHncSD1NrqbSM3dn/lE57O6Qf/koe9+I7c+wzkqRmEvcp0kgJdxKInzYzkICKkFMZsX3Vct3++tsF9ww==3893 dependencies:3894 js-yaml "^3.13.1"3895 lcov-parse "^1.0.0"3896 log-driver "^1.2.7"3897 minimist "^1.2.5"3898 request "^2.88.2"38993900crc-32@^1.2.0:3901 version "1.2.0"3902 resolved "https://registry.yarnpkg.com/crc-32/-/crc-32-1.2.0.tgz#cb2db6e29b88508e32d9dd0ec1693e7b41a18208"3903 integrity sha512-1uBwHxF+Y/4yF5G48fwnKq6QsIXheor3ZLPT80yGBV1oEUwpPojlEhQbWKVw1VwcTQyMGHK1/XMmTjmlsmTTGA==3904 dependencies:3905 exit-on-epipe "~1.0.1"3906 printj "~1.1.0"39073908create-ecdh@^4.0.0:3909 version "4.0.4"3910 resolved "https://registry.yarnpkg.com/create-ecdh/-/create-ecdh-4.0.4.tgz#d6e7f4bffa66736085a0762fd3a632684dabcc4e"3911 integrity sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A==3912 dependencies:3913 bn.js "^4.1.0"3914 elliptic "^6.5.3"39153916create-hash@^1.1.0, create-hash@^1.1.2, create-hash@^1.2.0:3917 version "1.2.0"3918 resolved "https://registry.yarnpkg.com/create-hash/-/create-hash-1.2.0.tgz#889078af11a63756bcfb59bd221996be3a9ef196"3919 integrity sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==3920 dependencies:3921 cipher-base "^1.0.1"3922 inherits "^2.0.1"3923 md5.js "^1.3.4"3924 ripemd160 "^2.0.1"3925 sha.js "^2.4.0"39263927create-hmac@^1.1.0, create-hmac@^1.1.4, create-hmac@^1.1.7:3928 version "1.1.7"3929 resolved "https://registry.yarnpkg.com/create-hmac/-/create-hmac-1.1.7.tgz#69170c78b3ab957147b2b8b04572e47ead2243ff"3930 integrity sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==3931 dependencies:3932 cipher-base "^1.0.3"3933 create-hash "^1.1.0"3934 inherits "^2.0.1"3935 ripemd160 "^2.0.0"3936 safe-buffer "^5.0.1"3937 sha.js "^2.4.8"39383939create-require@^1.1.0:3940 version "1.1.1"3941 resolved "https://registry.yarnpkg.com/create-require/-/create-require-1.1.1.tgz#c1d7e8f1e5f6cfc9ff65f9cd352d37348756c333"3942 integrity sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==39433944cross-spawn@^7.0.2, cross-spawn@^7.0.3:3945 version "7.0.3"3946 resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6"3947 integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==3948 dependencies:3949 path-key "^3.1.0"3950 shebang-command "^2.0.0"3951 which "^2.0.1"39523953crypto-browserify@3.12.0:3954 version "3.12.0"3955 resolved "https://registry.yarnpkg.com/crypto-browserify/-/crypto-browserify-3.12.0.tgz#396cf9f3137f03e4b8e532c58f698254e00f80ec"3956 integrity sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==3957 dependencies:3958 browserify-cipher "^1.0.0"3959 browserify-sign "^4.0.0"3960 create-ecdh "^4.0.0"3961 create-hash "^1.1.0"3962 create-hmac "^1.1.0"3963 diffie-hellman "^5.0.0"3964 inherits "^2.0.1"3965 pbkdf2 "^3.0.3"3966 public-encrypt "^4.0.0"3967 randombytes "^2.0.0"3968 randomfill "^1.0.3"39693970crypto-random-string@^2.0.0:3971 version "2.0.0"3972 resolved "https://registry.yarnpkg.com/crypto-random-string/-/crypto-random-string-2.0.0.tgz#ef2a7a966ec11083388369baa02ebead229b30d5"3973 integrity sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==39743975cssesc@^3.0.0:3976 version "3.0.0"3977 resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-3.0.0.tgz#37741919903b868565e1c09ea747445cd18983ee"3978 integrity sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==39793980cssom@^0.4.4:3981 version "0.4.4"3982 resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.4.4.tgz#5a66cf93d2d0b661d80bf6a44fb65f5c2e4e0a10"3983 integrity sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw==39843985cssom@~0.3.6:3986 version "0.3.8"3987 resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.3.8.tgz#9f1276f5b2b463f2114d3f2c75250af8c1a36f4a"3988 integrity sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==39893990cssstyle@^2.3.0:3991 version "2.3.0"3992 resolved "https://registry.yarnpkg.com/cssstyle/-/cssstyle-2.3.0.tgz#ff665a0ddbdc31864b09647f34163443d90b0852"3993 integrity sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==3994 dependencies:3995 cssom "~0.3.6"39963997cuint@^0.2.2:3998 version "0.2.2"3999 resolved "https://registry.yarnpkg.com/cuint/-/cuint-0.2.2.tgz#408086d409550c2631155619e9fa7bcadc3b991b"4000 integrity sha1-QICG1AlVDCYxFVYZ6fp7ytw7mRs=40014002d@1, d@^1.0.1:4003 version "1.0.1"4004 resolved "https://registry.yarnpkg.com/d/-/d-1.0.1.tgz#8698095372d58dbee346ffd0c7093f99f8f9eb5a"4005 integrity sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==4006 dependencies:4007 es5-ext "^0.10.50"4008 type "^1.0.1"40094010dashdash@^1.12.0:4011 version "1.14.1"4012 resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0"4013 integrity sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=4014 dependencies:4015 assert-plus "^1.0.0"40164017data-urls@^2.0.0:4018 version "2.0.0"4019 resolved "https://registry.yarnpkg.com/data-urls/-/data-urls-2.0.0.tgz#156485a72963a970f5d5821aaf642bef2bf2db9b"4020 integrity sha512-X5eWTSXO/BJmpdIKCRuKUgSCgAN0OwliVK3yPKbwIWU1Tdw5BRajxlzMidvh+gwko9AfQ9zIj52pzF91Q3YAvQ==4021 dependencies:4022 abab "^2.0.3"4023 whatwg-mimetype "^2.3.0"4024 whatwg-url "^8.0.0"40254026debug@2.6.9, debug@^2.2.0, debug@^2.6.9:4027 version "2.6.9"4028 resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f"4029 integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==4030 dependencies:4031 ms "2.0.0"40324033debug@4, debug@^4.0.0, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1:4034 version "4.3.1"4035 resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.1.tgz#f0d229c505e0c6d8c49ac553d1b13dc183f6b2ee"4036 integrity sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==4037 dependencies:4038 ms "2.1.2"40394040debug@4.3.2, debug@^4.3.2:4041 version "4.3.2"4042 resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.2.tgz#f0a49c18ac8779e31d4a0c6029dfb76873c7428b"4043 integrity sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==4044 dependencies:4045 ms "2.1.2"40464047debug@^3.2.7:4048 version "3.2.7"4049 resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.7.tgz#72580b7e9145fb39b6676f9c5e5fb100b934179a"4050 integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==4051 dependencies:4052 ms "^2.1.1"40534054decamelize@^4.0.0:4055 version "4.0.0"4056 resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-4.0.0.tgz#aa472d7bf660eb15f3494efd531cab7f2a709837"4057 integrity sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==40584059decimal.js@^10.2.1:4060 version "10.2.1"4061 resolved "https://registry.yarnpkg.com/decimal.js/-/decimal.js-10.2.1.tgz#238ae7b0f0c793d3e3cea410108b35a2c01426a3"4062 integrity sha512-KaL7+6Fw6i5A2XSnsbhm/6B+NuEA7TZ4vqxnd5tXz9sbKtrN9Srj8ab4vKVdK8YAqZO9P1kg45Y6YLoduPf+kw==40634064decode-uri-component@^0.2.0:4065 version "0.2.0"4066 resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.0.tgz#eb3913333458775cb84cd1a1fae062106bb87545"4067 integrity sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=40684069decomment@^0.9.3:4070 version "0.9.4"4071 resolved "https://registry.yarnpkg.com/decomment/-/decomment-0.9.4.tgz#fa40335bd90e3826d5c1984276e390525ff856d5"4072 integrity sha512-8eNlhyI5cSU4UbBlrtagWpR03dqXcE5IR9zpe7PnO6UzReXDskucsD8usgrzUmQ6qJ3N82aws/p/mu/jqbURWw==4073 dependencies:4074 esprima "4.0.1"40754076decompress-response@^3.2.0, decompress-response@^3.3.0:4077 version "3.3.0"4078 resolved "https://registry.yarnpkg.com/decompress-response/-/decompress-response-3.3.0.tgz#80a4dd323748384bfa248083622aedec982adff3"4079 integrity sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M=4080 dependencies:4081 mimic-response "^1.0.0"40824083decompress-response@^6.0.0:4084 version "6.0.0"4085 resolved "https://registry.yarnpkg.com/decompress-response/-/decompress-response-6.0.0.tgz#ca387612ddb7e104bd16d85aab00d5ecf09c66fc"4086 integrity sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==4087 dependencies:4088 mimic-response "^3.1.0"40894090dedent@^0.7.0:4091 version "0.7.0"4092 resolved "https://registry.yarnpkg.com/dedent/-/dedent-0.7.0.tgz#2495ddbaf6eb874abb0e1be9df22d2e5a544326c"4093 integrity sha1-JJXduvbrh0q7Dhvp3yLS5aVEMmw=40944095deep-eql@^3.0.1:4096 version "3.0.1"4097 resolved "https://registry.yarnpkg.com/deep-eql/-/deep-eql-3.0.1.tgz#dfc9404400ad1c8fe023e7da1df1c147c4b444df"4098 integrity sha512-+QeIQyN5ZuO+3Uk5DYh6/1eKO0m0YmJFGNmFHGACpf1ClL1nmlV/p4gNgbl2pJGxgXb4faqo6UE+M5ACEMyVcw==4099 dependencies:4100 type-detect "^4.0.0"41014102deep-extend@^0.6.0:4103 version "0.6.0"4104 resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac"4105 integrity sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==41064107deep-is@^0.1.3, deep-is@~0.1.3:4108 version "0.1.3"4109 resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34"4110 integrity sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=41114112deepmerge@^4.2.2:4113 version "4.2.2"4114 resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.2.2.tgz#44d2ea3679b8f4d4ffba33f03d865fc1e7bf4955"4115 integrity sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==41164117defaults@^1.0.3:4118 version "1.0.3"4119 resolved "https://registry.yarnpkg.com/defaults/-/defaults-1.0.3.tgz#c656051e9817d9ff08ed881477f3fe4019f3ef7d"4120 integrity sha1-xlYFHpgX2f8I7YgUd/P+QBnz730=4121 dependencies:4122 clone "^1.0.2"41234124defer-to-connect@^1.0.1:4125 version "1.1.3"4126 resolved "https://registry.yarnpkg.com/defer-to-connect/-/defer-to-connect-1.1.3.tgz#331ae050c08dcf789f8c83a7b81f0ed94f4ac591"4127 integrity sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ==41284129define-properties@^1.1.3:4130 version "1.1.3"4131 resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.3.tgz#cf88da6cbee26fe6db7094f61d870cbd84cee9f1"4132 integrity sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==4133 dependencies:4134 object-keys "^1.0.12"41354136delayed-stream@~1.0.0:4137 version "1.0.0"4138 resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619"4139 integrity sha1-3zrhmayt+31ECqrgsp4icrJOxhk=41404141depd@~1.1.2:4142 version "1.1.2"4143 resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9"4144 integrity sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=41454146dependency-tree@^8.1.1:4147 version "8.1.1"4148 resolved "https://registry.yarnpkg.com/dependency-tree/-/dependency-tree-8.1.1.tgz#1a309f5a860b3285f7b1638c98ce48c8906ae6e6"4149 integrity sha512-bl5U16VQpaYxD0xvcnCH/dTctCiWnsVWymh9dNjbm4T00Hm21flu1VLnNueKCj7+3uusbcJhKKKtiWrpU0I+Nw==4150 dependencies:4151 commander "^2.20.3"4152 debug "^4.3.1"4153 filing-cabinet "^3.0.0"4154 precinct "^8.0.0"4155 typescript "^3.9.7"41564157deprecation@^2.0.0, deprecation@^2.3.1:4158 version "2.3.1"4159 resolved "https://registry.yarnpkg.com/deprecation/-/deprecation-2.3.1.tgz#6368cbdb40abf3373b525ac87e4a260c3a700919"4160 integrity sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ==41614162des.js@^1.0.0:4163 version "1.0.1"4164 resolved "https://registry.yarnpkg.com/des.js/-/des.js-1.0.1.tgz#5382142e1bdc53f85d86d53e5f4aa7deb91e0843"4165 integrity sha512-Q0I4pfFrv2VPd34/vfLrFOoRmlYj3OV50i7fskps1jZWK1kApMWWT9G6RRUeYedLcBDIhnSDaUvJMb3AhUlaEA==4166 dependencies:4167 inherits "^2.0.1"4168 minimalistic-assert "^1.0.0"41694170destroy@~1.0.4:4171 version "1.0.4"4172 resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.0.4.tgz#978857442c44749e4206613e37946205826abd80"4173 integrity sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=41744175detect-indent@^6.0.0:4176 version "6.1.0"4177 resolved "https://registry.yarnpkg.com/detect-indent/-/detect-indent-6.1.0.tgz#592485ebbbf6b3b1ab2be175c8393d04ca0d57e6"4178 integrity sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==41794180detect-newline@^3.0.0:4181 version "3.1.0"4182 resolved "https://registry.yarnpkg.com/detect-newline/-/detect-newline-3.1.0.tgz#576f5dfc63ae1a192ff192d8ad3af6308991b651"4183 integrity sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==41844185detective-amd@^3.0.1, detective-amd@^3.1.0:4186 version "3.1.0"4187 resolved "https://registry.yarnpkg.com/detective-amd/-/detective-amd-3.1.0.tgz#92daee3214a0ca4522646cf333cac90a3fca6373"4188 integrity sha512-G7wGWT6f0VErjUkE2utCm7IUshT7nBh7aBBH2VBOiY9Dqy2DMens5iiOvYCuhstoIxRKLrnOvVAz4/EyPIAjnw==4189 dependencies:4190 ast-module-types "^2.7.0"4191 escodegen "^2.0.0"4192 get-amd-module-type "^3.0.0"4193 node-source-walk "^4.0.0"41944195detective-cjs@^3.1.1:4196 version "3.1.1"4197 resolved "https://registry.yarnpkg.com/detective-cjs/-/detective-cjs-3.1.1.tgz#18da3e39a002d2098a1123d45ce1de1b0d9045a0"4198 integrity sha512-JQtNTBgFY6h8uT6pgph5QpV3IyxDv+z3qPk/FZRDT9TlFfm5dnRtpH39WtQEr1khqsUxVqXzKjZHpdoQvQbllg==4199 dependencies:4200 ast-module-types "^2.4.0"4201 node-source-walk "^4.0.0"42024203detective-es6@^2.2.0:4204 version "2.2.0"4205 resolved "https://registry.yarnpkg.com/detective-es6/-/detective-es6-2.2.0.tgz#8f2baba3f8cd90a5cfd748f5ac436f0158ed2585"4206 integrity sha512-fSpNY0SLER7/sVgQZ1NxJPwmc9uCTzNgdkQDhAaj8NPYwr7Qji9QBcmbNvtMCnuuOGMuKn3O7jv0An+/WRWJZQ==4207 dependencies:4208 node-source-walk "^4.0.0"42094210detective-less@^1.0.2:4211 version "1.0.2"4212 resolved "https://registry.yarnpkg.com/detective-less/-/detective-less-1.0.2.tgz#a68af9ca5f69d74b7d0aa190218b211d83b4f7e3"4213 integrity sha512-Rps1xDkEEBSq3kLdsdnHZL1x2S4NGDcbrjmd4q+PykK5aJwDdP5MBgrJw1Xo+kyUHuv3JEzPqxr+Dj9ryeDRTA==4214 dependencies:4215 debug "^4.0.0"4216 gonzales-pe "^4.2.3"4217 node-source-walk "^4.0.0"42184219detective-postcss@^4.0.0:4220 version "4.0.0"4221 resolved "https://registry.yarnpkg.com/detective-postcss/-/detective-postcss-4.0.0.tgz#24e69b465e5fefe7a6afd05f7e894e34595dbf51"4222 integrity sha512-Fwc/g9VcrowODIAeKRWZfVA/EufxYL7XfuqJQFroBKGikKX83d2G7NFw6kDlSYGG3LNQIyVa+eWv1mqre+v4+A==4223 dependencies:4224 debug "^4.1.1"4225 is-url "^1.2.4"4226 postcss "^8.1.7"4227 postcss-values-parser "^2.0.1"42284229detective-postcss@^5.0.0:4230 version "5.0.0"4231 resolved "https://registry.yarnpkg.com/detective-postcss/-/detective-postcss-5.0.0.tgz#7d39bde17a280e26d0b43130fd735a4a75786fb0"4232 integrity sha512-IBmim4GTEmZJDBOAoNFBskzNryTmYpBq+CQGghKnSGkoGWascE8iEo98yA+ZM4N5slwGjCr/NxCm+Kzg+q3tZg==4233 dependencies:4234 debug "^4.3.1"4235 is-url "^1.2.4"4236 postcss "^8.2.13"4237 postcss-values-parser "^5.0.0"42384239detective-sass@^3.0.1:4240 version "3.0.1"4241 resolved "https://registry.yarnpkg.com/detective-sass/-/detective-sass-3.0.1.tgz#496b819efd1f5c4dd3f0e19b43a8634bdd6927c4"4242 integrity sha512-oSbrBozRjJ+QFF4WJFbjPQKeakoaY1GiR380NPqwdbWYd5wfl5cLWv0l6LsJVqrgWfFN1bjFqSeo32Nxza8Lbw==4243 dependencies:4244 debug "^4.1.1"4245 gonzales-pe "^4.2.3"4246 node-source-walk "^4.0.0"42474248detective-scss@^2.0.1:4249 version "2.0.1"4250 resolved "https://registry.yarnpkg.com/detective-scss/-/detective-scss-2.0.1.tgz#06f8c21ae6dedad1fccc26d544892d968083eaf8"4251 integrity sha512-VveyXW4WQE04s05KlJ8K0bG34jtHQVgTc9InspqoQxvnelj/rdgSAy7i2DXAazyQNFKlWSWbS+Ro2DWKFOKTPQ==4252 dependencies:4253 debug "^4.1.1"4254 gonzales-pe "^4.2.3"4255 node-source-walk "^4.0.0"42564257detective-stylus@^1.0.0:4258 version "1.0.0"4259 resolved "https://registry.yarnpkg.com/detective-stylus/-/detective-stylus-1.0.0.tgz#50aee7db8babb990381f010c63fabba5b58e54cd"4260 integrity sha1-UK7n24uruZA4HwEMY/q7pbWOVM0=42614262detective-typescript@^7.0.0:4263 version "7.0.0"4264 resolved "https://registry.yarnpkg.com/detective-typescript/-/detective-typescript-7.0.0.tgz#8c8917f2e51d9e4ee49821abf759ff512dd897f2"4265 integrity sha512-y/Ev98AleGvl43YKTNcA2Q+lyFmsmCfTTNWy4cjEJxoLkbobcXtRS0Kvx06daCgr2GdtlwLfNzL553BkktfJoA==4266 dependencies:4267 "@typescript-eslint/typescript-estree" "^4.8.2"4268 ast-module-types "^2.7.1"4269 node-source-walk "^4.2.0"4270 typescript "^3.9.7"42714272diff-sequences@^27.0.6:4273 version "27.0.6"4274 resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-27.0.6.tgz#3305cb2e55a033924054695cc66019fd7f8e5723"4275 integrity sha512-ag6wfpBFyNXZ0p8pcuIDS//D8H062ZQJ3fzYxjpmeKjnz8W4pekL3AI8VohmyZmsWW2PWaHgjsmqR6L13101VQ==42764277diff@5.0.0:4278 version "5.0.0"4279 resolved "https://registry.yarnpkg.com/diff/-/diff-5.0.0.tgz#7ed6ad76d859d030787ec35855f5b1daf31d852b"4280 integrity sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==42814282diff@^4.0.1:4283 version "4.0.2"4284 resolved "https://registry.yarnpkg.com/diff/-/diff-4.0.2.tgz#60f3aecb89d5fae520c11aa19efc2bb982aade7d"4285 integrity sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==42864287diffie-hellman@^5.0.0:4288 version "5.0.3"4289 resolved "https://registry.yarnpkg.com/diffie-hellman/-/diffie-hellman-5.0.3.tgz#40e8ee98f55a2149607146921c63e1ae5f3d2875"4290 integrity sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==4291 dependencies:4292 bn.js "^4.1.0"4293 miller-rabin "^4.0.0"4294 randombytes "^2.0.0"42954296dir-glob@^3.0.1:4297 version "3.0.1"4298 resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f"4299 integrity sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==4300 dependencies:4301 path-type "^4.0.0"43024303doctrine@^2.1.0:4304 version "2.1.0"4305 resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-2.1.0.tgz#5cd01fc101621b42c4cd7f5d1a66243716d3f39d"4306 integrity sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==4307 dependencies:4308 esutils "^2.0.2"43094310doctrine@^3.0.0:4311 version "3.0.0"4312 resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-3.0.0.tgz#addebead72a6574db783639dc87a121773973961"4313 integrity sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==4314 dependencies:4315 esutils "^2.0.2"43164317dom-walk@^0.1.0:4318 version "0.1.2"4319 resolved "https://registry.yarnpkg.com/dom-walk/-/dom-walk-0.1.2.tgz#0c548bef048f4d1f2a97249002236060daa3fd84"4320 integrity sha512-6QvTW9mrGeIegrFXdtQi9pk7O/nSK6lSdXW2eqUspN5LWD7UTji2Fqw5V2YLjBpHEoU9Xl/eUWNpDeZvoyOv2w==43214322domexception@^2.0.1:4323 version "2.0.1"4324 resolved "https://registry.yarnpkg.com/domexception/-/domexception-2.0.1.tgz#fb44aefba793e1574b0af6aed2801d057529f304"4325 integrity sha512-yxJ2mFy/sibVQlu5qHjOkf9J3K6zgmCxgJ94u2EdvDOV09H+32LtRswEcUsmUWN72pVLOEnTSRaIVVzVQgS0dg==4326 dependencies:4327 webidl-conversions "^5.0.0"43284329dot-prop@^5.2.0:4330 version "5.3.0"4331 resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-5.3.0.tgz#90ccce708cd9cd82cc4dc8c3ddd9abdd55b20e88"4332 integrity sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==4333 dependencies:4334 is-obj "^2.0.0"43354336duplexer3@^0.1.4:4337 version "0.1.4"4338 resolved "https://registry.yarnpkg.com/duplexer3/-/duplexer3-0.1.4.tgz#ee01dd1cac0ed3cbc7fdbea37dc0a8f1ce002ce2"4339 integrity sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=43404341duplexify@^4.1.1:4342 version "4.1.1"4343 resolved "https://registry.yarnpkg.com/duplexify/-/duplexify-4.1.1.tgz#7027dc374f157b122a8ae08c2d3ea4d2d953aa61"4344 integrity sha512-DY3xVEmVHTv1wSzKNbwoU6nVjzI369Y6sPoqfYr0/xlx3IdX2n94xIszTcjPO8W8ZIv0Wb0PXNcjuZyT4wiICA==4345 dependencies:4346 end-of-stream "^1.4.1"4347 inherits "^2.0.3"4348 readable-stream "^3.1.1"4349 stream-shift "^1.0.0"43504351ecc-jsbn@~0.1.1:4352 version "0.1.2"4353 resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz#3a83a904e54353287874c564b7549386849a98c9"4354 integrity sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=4355 dependencies:4356 jsbn "~0.1.0"4357 safer-buffer "^2.1.0"43584359ed2curve@^0.3.0:4360 version "0.3.0"4361 resolved "https://registry.yarnpkg.com/ed2curve/-/ed2curve-0.3.0.tgz#322b575152a45305429d546b071823a93129a05d"4362 integrity sha512-8w2fmmq3hv9rCrcI7g9hms2pMunQr1JINfcjwR9tAyZqhtyaMN991lF/ZfHfr5tzZQ8c7y7aBgZbjfbd0fjFwQ==4363 dependencies:4364 tweetnacl "1.x.x"43654366ee-first@1.1.1:4367 version "1.1.1"4368 resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d"4369 integrity sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=43704371electron-to-chromium@^1.3.723:4372 version "1.3.752"4373 resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.752.tgz#0728587f1b9b970ec9ffad932496429aef750d09"4374 integrity sha512-2Tg+7jSl3oPxgsBsWKh5H83QazTkmWG/cnNwJplmyZc7KcN61+I10oUgaXSVk/NwfvN3BdkKDR4FYuRBQQ2v0A==43754376electron-to-chromium@^1.3.793:4377 version "1.3.807"4378 resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.807.tgz#c2eb803f4f094869b1a24151184ffbbdbf688b1f"4379 integrity sha512-p8uxxg2a23zRsvQ2uwA/OOI+O4BQxzaR7YKMIGGGQCpYmkFX2CVF5f0/hxLMV7yCr7nnJViCwHLhPfs52rIYCA==43804381electron-to-chromium@^1.3.878:4382 version "1.3.878"4383 resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.878.tgz#baa9fb5c24b9b580f08fb245cbb52a22f8fc8fa8"4384 integrity sha512-O6yxWCN9ph2AdspAIszBnd9v8s11hQx8ub9w4UGApzmNRnoKhbulOWqbO8THEQec/aEHtvy+donHZMlh6l1rbA==43854386elliptic@6.5.4, elliptic@^6.4.0, elliptic@^6.5.2, elliptic@^6.5.3, elliptic@^6.5.4:4387 version "6.5.4"4388 resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.5.4.tgz#da37cebd31e79a1367e941b592ed1fbebd58abbb"4389 integrity sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==4390 dependencies:4391 bn.js "^4.11.9"4392 brorand "^1.1.0"4393 hash.js "^1.0.0"4394 hmac-drbg "^1.0.1"4395 inherits "^2.0.4"4396 minimalistic-assert "^1.0.1"4397 minimalistic-crypto-utils "^1.0.1"43984399email-addresses@^3.0.1:4400 version "3.1.0"4401 resolved "https://registry.yarnpkg.com/email-addresses/-/email-addresses-3.1.0.tgz#cabf7e085cbdb63008a70319a74e6136188812fb"4402 integrity sha512-k0/r7GrWVL32kZlGwfPNgB2Y/mMXVTq/decgLczm/j34whdaspNrZO8CnXPf1laaHxI6ptUlsnAxN+UAPw+fzg==44034404emittery@^0.8.1:4405 version "0.8.1"4406 resolved "https://registry.yarnpkg.com/emittery/-/emittery-0.8.1.tgz#bb23cc86d03b30aa75a7f734819dee2e1ba70860"4407 integrity sha512-uDfvUjVrfGJJhymx/kz6prltenw1u7WrCg1oa94zYY8xxVpLLUu045LAT0dhDZdXG58/EpPL/5kA180fQ/qudg==44084409emoji-regex@^7.0.1:4410 version "7.0.3"4411 resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-7.0.3.tgz#933a04052860c85e83c122479c4748a8e4c72156"4412 integrity sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==44134414emoji-regex@^8.0.0:4415 version "8.0.0"4416 resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37"4417 integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==44184419encodeurl@~1.0.2:4420 version "1.0.2"4421 resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59"4422 integrity sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=44234424end-of-stream@^1.1.0, end-of-stream@^1.4.1:4425 version "1.4.4"4426 resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0"4427 integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==4428 dependencies:4429 once "^1.4.0"44304431enhanced-resolve@^5.3.2:4432 version "5.8.2"4433 resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-5.8.2.tgz#15ddc779345cbb73e97c611cd00c01c1e7bf4d8b"4434 integrity sha512-F27oB3WuHDzvR2DOGNTaYy0D5o0cnrv8TeI482VM4kYgQd/FT9lUQwuNsJ0oOHtBUq7eiW5ytqzp7nBFknL+GA==4435 dependencies:4436 graceful-fs "^4.2.4"4437 tapable "^2.2.0"44384439enquirer@^2.3.5:4440 version "2.3.6"4441 resolved "https://registry.yarnpkg.com/enquirer/-/enquirer-2.3.6.tgz#2a7fe5dd634a1e4125a975ec994ff5456dc3734d"4442 integrity sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==4443 dependencies:4444 ansi-colors "^4.1.1"44454446error-ex@^1.3.1:4447 version "1.3.2"4448 resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf"4449 integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==4450 dependencies:4451 is-arrayish "^0.2.1"44524453es-abstract@^1.18.0-next.1, es-abstract@^1.18.0-next.2, es-abstract@^1.18.2:4454 version "1.18.3"4455 resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.18.3.tgz#25c4c3380a27aa203c44b2b685bba94da31b63e0"4456 integrity sha512-nQIr12dxV7SSxE6r6f1l3DtAeEYdsGpps13dR0TwJg1S8gyp4ZPgy3FZcHBgbiQqnoqSTb+oC+kO4UQ0C/J8vw==4457 dependencies:4458 call-bind "^1.0.2"4459 es-to-primitive "^1.2.1"4460 function-bind "^1.1.1"4461 get-intrinsic "^1.1.1"4462 has "^1.0.3"4463 has-symbols "^1.0.2"4464 is-callable "^1.2.3"4465 is-negative-zero "^2.0.1"4466 is-regex "^1.1.3"4467 is-string "^1.0.6"4468 object-inspect "^1.10.3"4469 object-keys "^1.1.1"4470 object.assign "^4.1.2"4471 string.prototype.trimend "^1.0.4"4472 string.prototype.trimstart "^1.0.4"4473 unbox-primitive "^1.0.1"44744475es-abstract@^1.19.0, es-abstract@^1.19.1:4476 version "1.19.1"4477 resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.19.1.tgz#d4885796876916959de78edaa0df456627115ec3"4478 integrity sha512-2vJ6tjA/UfqLm2MPs7jxVybLoB8i1t1Jd9R3kISld20sIxPcTbLuggQOUxeWeAvIUkduv/CfMjuh4WmiXr2v9w==4479 dependencies:4480 call-bind "^1.0.2"4481 es-to-primitive "^1.2.1"4482 function-bind "^1.1.1"4483 get-intrinsic "^1.1.1"4484 get-symbol-description "^1.0.0"4485 has "^1.0.3"4486 has-symbols "^1.0.2"4487 internal-slot "^1.0.3"4488 is-callable "^1.2.4"4489 is-negative-zero "^2.0.1"4490 is-regex "^1.1.4"4491 is-shared-array-buffer "^1.0.1"4492 is-string "^1.0.7"4493 is-weakref "^1.0.1"4494 object-inspect "^1.11.0"4495 object-keys "^1.1.1"4496 object.assign "^4.1.2"4497 string.prototype.trimend "^1.0.4"4498 string.prototype.trimstart "^1.0.4"4499 unbox-primitive "^1.0.1"45004501es-to-primitive@^1.2.1:4502 version "1.2.1"4503 resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.1.tgz#e55cd4c9cdc188bcefb03b366c736323fc5c898a"4504 integrity sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==4505 dependencies:4506 is-callable "^1.1.4"4507 is-date-object "^1.0.1"4508 is-symbol "^1.0.2"45094510es5-ext@^0.10.35, es5-ext@^0.10.50:4511 version "0.10.53"4512 resolved "https://registry.yarnpkg.com/es5-ext/-/es5-ext-0.10.53.tgz#93c5a3acfdbef275220ad72644ad02ee18368de1"4513 integrity sha512-Xs2Stw6NiNHWypzRTY1MtaG/uJlwCk8kH81920ma8mvN8Xq1gsfhZvpkImLQArw8AHnv8MT2I45J3c0R8slE+Q==4514 dependencies:4515 es6-iterator "~2.0.3"4516 es6-symbol "~3.1.3"4517 next-tick "~1.0.0"45184519es6-iterator@~2.0.3:4520 version "2.0.3"4521 resolved "https://registry.yarnpkg.com/es6-iterator/-/es6-iterator-2.0.3.tgz#a7de889141a05a94b0854403b2d0a0fbfa98f3b7"4522 integrity sha1-p96IkUGgWpSwhUQDstCg+/qY87c=4523 dependencies:4524 d "1"4525 es5-ext "^0.10.35"4526 es6-symbol "^3.1.1"45274528es6-symbol@^3.1.1, es6-symbol@~3.1.3:4529 version "3.1.3"4530 resolved "https://registry.yarnpkg.com/es6-symbol/-/es6-symbol-3.1.3.tgz#bad5d3c1bcdac28269f4cb331e431c78ac705d18"4531 integrity sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA==4532 dependencies:4533 d "^1.0.1"4534 ext "^1.1.2"45354536escalade@^3.1.1:4537 version "3.1.1"4538 resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40"4539 integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==45404541escape-goat@^2.0.0:4542 version "2.1.1"4543 resolved "https://registry.yarnpkg.com/escape-goat/-/escape-goat-2.1.1.tgz#1b2dc77003676c457ec760b2dc68edb648188675"4544 integrity sha512-8/uIhbG12Csjy2JEW7D9pHbreaVaS/OpN3ycnyvElTdwM5n6GY6W6e2IPemfvGZeUMqZ9A/3GqIZMgKnBhAw/Q==45454546escape-html@~1.0.3:4547 version "1.0.3"4548 resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988"4549 integrity sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=45504551escape-string-regexp@4.0.0, escape-string-regexp@^4.0.0:4552 version "4.0.0"4553 resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34"4554 integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==45554556escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5:4557 version "1.0.5"4558 resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4"4559 integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=45604561escape-string-regexp@^2.0.0:4562 version "2.0.0"4563 resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz#a30304e99daa32e23b2fd20f51babd07cffca344"4564 integrity sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==45654566escodegen@^2.0.0:4567 version "2.0.0"4568 resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-2.0.0.tgz#5e32b12833e8aa8fa35e1bf0befa89380484c7dd"4569 integrity sha512-mmHKys/C8BFUGI+MAWNcSYoORYLMdPzjrknd2Vc+bUsjN5bXcr8EhrNB+UTqfL1y3I9c4fw2ihgtMPQLBRiQxw==4570 dependencies:4571 esprima "^4.0.1"4572 estraverse "^5.2.0"4573 esutils "^2.0.2"4574 optionator "^0.8.1"4575 optionalDependencies:4576 source-map "~0.6.1"45774578eslint-config-standard@^16.0.3:4579 version "16.0.3"4580 resolved "https://registry.yarnpkg.com/eslint-config-standard/-/eslint-config-standard-16.0.3.tgz#6c8761e544e96c531ff92642eeb87842b8488516"4581 integrity sha512-x4fmJL5hGqNJKGHSjnLdgA6U6h1YW/G2dW9fA+cyVur4SK6lyue8+UgNKWlZtUDTXvgKDD/Oa3GQjmB5kjtVvg==45824583eslint-import-resolver-node@^0.3.6:4584 version "0.3.6"4585 resolved "https://registry.yarnpkg.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.6.tgz#4048b958395da89668252001dbd9eca6b83bacbd"4586 integrity sha512-0En0w03NRVMn9Uiyn8YRPDKvWjxCWkslUEhGNTdGx15RvPJYQ+lbOlqrlNI2vEAs4pDYK4f/HN2TbDmk5TP0iw==4587 dependencies:4588 debug "^3.2.7"4589 resolve "^1.20.0"45904591eslint-module-utils@^2.7.0:4592 version "2.7.1"4593 resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.7.1.tgz#b435001c9f8dd4ab7f6d0efcae4b9696d4c24b7c"4594 integrity sha512-fjoetBXQZq2tSTWZ9yWVl2KuFrTZZH3V+9iD1V1RfpDgxzJR+mPd/KZmMiA8gbPqdBzpNiEHOuT7IYEWxrH0zQ==4595 dependencies:4596 debug "^3.2.7"4597 find-up "^2.1.0"4598 pkg-dir "^2.0.0"45994600eslint-plugin-es@^3.0.0:4601 version "3.0.1"4602 resolved "https://registry.yarnpkg.com/eslint-plugin-es/-/eslint-plugin-es-3.0.1.tgz#75a7cdfdccddc0589934aeeb384175f221c57893"4603 integrity sha512-GUmAsJaN4Fc7Gbtl8uOBlayo2DqhwWvEzykMHSCZHU3XdJ+NSzzZcVhXh3VxX5icqQ+oQdIEawXX8xkR3mIFmQ==4604 dependencies:4605 eslint-utils "^2.0.0"4606 regexpp "^3.0.0"46074608eslint-plugin-header@^3.1.1:4609 version "3.1.1"4610 resolved "https://registry.yarnpkg.com/eslint-plugin-header/-/eslint-plugin-header-3.1.1.tgz#6ce512432d57675265fac47292b50d1eff11acd6"4611 integrity sha512-9vlKxuJ4qf793CmeeSrZUvVClw6amtpghq3CuWcB5cUNnWHQhgcqy5eF8oVKFk1G3Y/CbchGfEaw3wiIJaNmVg==46124613eslint-plugin-import-newlines@^1.1.5:4614 version "1.1.5"4615 resolved "https://registry.yarnpkg.com/eslint-plugin-import-newlines/-/eslint-plugin-import-newlines-1.1.5.tgz#ec1562fc1b278bdb9d3b12a92e3d79940fe3c2f5"4616 integrity sha512-24wybkMV8BETEde5e74ejuEjmwuS/mqVjvW6I9UqdCAXfqF+NsDZXg87CfwFyoqYZQowLs5aEXR06JbZY6m3TA==46174618eslint-plugin-import@^2.25.2:4619 version "2.25.2"4620 resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.25.2.tgz#b3b9160efddb702fc1636659e71ba1d10adbe9e9"4621 integrity sha512-qCwQr9TYfoBHOFcVGKY9C9unq05uOxxdklmBXLVvcwo68y5Hta6/GzCZEMx2zQiu0woKNEER0LE7ZgaOfBU14g==4622 dependencies:4623 array-includes "^3.1.4"4624 array.prototype.flat "^1.2.5"4625 debug "^2.6.9"4626 doctrine "^2.1.0"4627 eslint-import-resolver-node "^0.3.6"4628 eslint-module-utils "^2.7.0"4629 has "^1.0.3"4630 is-core-module "^2.7.0"4631 is-glob "^4.0.3"4632 minimatch "^3.0.4"4633 object.values "^1.1.5"4634 resolve "^1.20.0"4635 tsconfig-paths "^3.11.0"46364637eslint-plugin-node@^11.1.0:4638 version "11.1.0"4639 resolved "https://registry.yarnpkg.com/eslint-plugin-node/-/eslint-plugin-node-11.1.0.tgz#c95544416ee4ada26740a30474eefc5402dc671d"4640 integrity sha512-oUwtPJ1W0SKD0Tr+wqu92c5xuCeQqB3hSCHasn/ZgjFdA9iDGNkNf2Zi9ztY7X+hNuMib23LNGRm6+uN+KLE3g==4641 dependencies:4642 eslint-plugin-es "^3.0.0"4643 eslint-utils "^2.0.0"4644 ignore "^5.1.1"4645 minimatch "^3.0.4"4646 resolve "^1.10.1"4647 semver "^6.1.0"46484649eslint-plugin-promise@^5.1.1:4650 version "5.1.1"4651 resolved "https://registry.yarnpkg.com/eslint-plugin-promise/-/eslint-plugin-promise-5.1.1.tgz#9674d11c056d1bafac38e4a3a9060be740988d90"4652 integrity sha512-XgdcdyNzHfmlQyweOPTxmc7pIsS6dE4MvwhXWMQ2Dxs1XAL2GJDilUsjWen6TWik0aSI+zD/PqocZBblcm9rdA==46534654eslint-plugin-react-hooks@^4.2.1-alpha-930c9e7ee-20211015:4655 version "4.2.1-alpha-fd5e01c2e-20210913"4656 resolved "https://registry.yarnpkg.com/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.2.1-alpha-fd5e01c2e-20210913.tgz#79a153d00b1d86f267e68c53c6360e19981c3534"4657 integrity sha512-m1fAodKUB/xYFhEuzcZwN063p8fPLeQTTTrmihl5AYEtH+b/2DtAgemAxYuxtZz60R6txmWeH21Xz+W0QRJx/g==46584659eslint-plugin-react@^7.26.1:4660 version "7.26.1"4661 resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.26.1.tgz#41bcfe3e39e6a5ac040971c1af94437c80daa40e"4662 integrity sha512-Lug0+NOFXeOE+ORZ5pbsh6mSKjBKXDXItUD2sQoT+5Yl0eoT82DqnXeTMfUare4QVCn9QwXbfzO/dBLjLXwVjQ==4663 dependencies:4664 array-includes "^3.1.3"4665 array.prototype.flatmap "^1.2.4"4666 doctrine "^2.1.0"4667 estraverse "^5.2.0"4668 jsx-ast-utils "^2.4.1 || ^3.0.0"4669 minimatch "^3.0.4"4670 object.entries "^1.1.4"4671 object.fromentries "^2.0.4"4672 object.hasown "^1.0.0"4673 object.values "^1.1.4"4674 prop-types "^15.7.2"4675 resolve "^2.0.0-next.3"4676 semver "^6.3.0"4677 string.prototype.matchall "^4.0.5"46784679eslint-plugin-simple-import-sort@^7.0.0:4680 version "7.0.0"4681 resolved "https://registry.yarnpkg.com/eslint-plugin-simple-import-sort/-/eslint-plugin-simple-import-sort-7.0.0.tgz#a1dad262f46d2184a90095a60c66fef74727f0f8"4682 integrity sha512-U3vEDB5zhYPNfxT5TYR7u01dboFZp+HNpnGhkDB2g/2E4wZ/g1Q9Ton8UwCLfRV9yAKyYqDh62oHOamvkFxsvw==46834684eslint-plugin-sort-destructure-keys@^1.3.5:4685 version "1.3.5"4686 resolved "https://registry.yarnpkg.com/eslint-plugin-sort-destructure-keys/-/eslint-plugin-sort-destructure-keys-1.3.5.tgz#c6f45c3e58d4435564025a6ca5f4a838010800fd"4687 integrity sha512-JmVpidhDsLwZsmRDV7Tf/vZgOAOEQGkLtwToSvX5mD8fuWYS/xkgMRBsalW1fGlc8CgJJwnzropt4oMQ7YCHLg==4688 dependencies:4689 natural-compare-lite "^1.4.0"46904691eslint-scope@^5.1.1:4692 version "5.1.1"4693 resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.1.1.tgz#e786e59a66cb92b3f6c1fb0d508aab174848f48c"4694 integrity sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==4695 dependencies:4696 esrecurse "^4.3.0"4697 estraverse "^4.1.1"46984699eslint-scope@^6.0.0:4700 version "6.0.0"4701 resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-6.0.0.tgz#9cf45b13c5ac8f3d4c50f46a5121f61b3e318978"4702 integrity sha512-uRDL9MWmQCkaFus8RF5K9/L/2fn+80yoW3jkD53l4shjCh26fCtvJGasxjUqP5OT87SYTxCVA3BwTUzuELx9kA==4703 dependencies:4704 esrecurse "^4.3.0"4705 estraverse "^5.2.0"47064707eslint-utils@^2.0.0:4708 version "2.1.0"4709 resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-2.1.0.tgz#d2de5e03424e707dc10c74068ddedae708741b27"4710 integrity sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==4711 dependencies:4712 eslint-visitor-keys "^1.1.0"47134714eslint-utils@^3.0.0:4715 version "3.0.0"4716 resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-3.0.0.tgz#8aebaface7345bb33559db0a1f13a1d2d48c3672"4717 integrity sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==4718 dependencies:4719 eslint-visitor-keys "^2.0.0"47204721eslint-visitor-keys@^1.1.0:4722 version "1.3.0"4723 resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz#30ebd1ef7c2fdff01c3a4f151044af25fab0523e"4724 integrity sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==47254726eslint-visitor-keys@^2.0.0:4727 version "2.1.0"4728 resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz#f65328259305927392c938ed44eb0a5c9b2bd303"4729 integrity sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==47304731eslint-visitor-keys@^3.0.0:4732 version "3.0.0"4733 resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.0.0.tgz#e32e99c6cdc2eb063f204eda5db67bfe58bb4186"4734 integrity sha512-mJOZa35trBTb3IyRmo8xmKBZlxf+N7OnUl4+ZhJHs/r+0770Wh/LEACE2pqMGMe27G/4y8P2bYGk4J70IC5k1Q==47354736eslint@^8.1.0:4737 version "8.1.0"4738 resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.1.0.tgz#00f1f7dbf4134f26588e6c9f2efe970760f64664"4739 integrity sha512-JZvNneArGSUsluHWJ8g8MMs3CfIEzwaLx9KyH4tZ2i+R2/rPWzL8c0zg3rHdwYVpN/1sB9gqnjHwz9HoeJpGHw==4740 dependencies:4741 "@eslint/eslintrc" "^1.0.3"4742 "@humanwhocodes/config-array" "^0.6.0"4743 ajv "^6.10.0"4744 chalk "^4.0.0"4745 cross-spawn "^7.0.2"4746 debug "^4.3.2"4747 doctrine "^3.0.0"4748 enquirer "^2.3.5"4749 escape-string-regexp "^4.0.0"4750 eslint-scope "^6.0.0"4751 eslint-utils "^3.0.0"4752 eslint-visitor-keys "^3.0.0"4753 espree "^9.0.0"4754 esquery "^1.4.0"4755 esutils "^2.0.2"4756 fast-deep-equal "^3.1.3"4757 file-entry-cache "^6.0.1"4758 functional-red-black-tree "^1.0.1"4759 glob-parent "^6.0.1"4760 globals "^13.6.0"4761 ignore "^4.0.6"4762 import-fresh "^3.0.0"4763 imurmurhash "^0.1.4"4764 is-glob "^4.0.0"4765 js-yaml "^4.1.0"4766 json-stable-stringify-without-jsonify "^1.0.1"4767 levn "^0.4.1"4768 lodash.merge "^4.6.2"4769 minimatch "^3.0.4"4770 natural-compare "^1.4.0"4771 optionator "^0.9.1"4772 progress "^2.0.0"4773 regexpp "^3.2.0"4774 semver "^7.2.1"4775 strip-ansi "^6.0.0"4776 strip-json-comments "^3.1.0"4777 text-table "^0.2.0"4778 v8-compile-cache "^2.0.3"47794780espree@^9.0.0:4781 version "9.0.0"4782 resolved "https://registry.yarnpkg.com/espree/-/espree-9.0.0.tgz#e90a2965698228502e771c7a58489b1a9d107090"4783 integrity sha512-r5EQJcYZ2oaGbeR0jR0fFVijGOcwai07/690YRXLINuhmVeRY4UKSAsQPe/0BNuDgwP7Ophoc1PRsr2E3tkbdQ==4784 dependencies:4785 acorn "^8.5.0"4786 acorn-jsx "^5.3.1"4787 eslint-visitor-keys "^3.0.0"47884789esprima@4.0.1, esprima@^4.0.0, esprima@^4.0.1:4790 version "4.0.1"4791 resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71"4792 integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==47934794esquery@^1.4.0:4795 version "1.4.0"4796 resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.4.0.tgz#2148ffc38b82e8c7057dfed48425b3e61f0f24a5"4797 integrity sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==4798 dependencies:4799 estraverse "^5.1.0"48004801esrecurse@^4.3.0:4802 version "4.3.0"4803 resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921"4804 integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==4805 dependencies:4806 estraverse "^5.2.0"48074808estraverse@^4.1.1:4809 version "4.3.0"4810 resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d"4811 integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==48124813estraverse@^5.1.0, estraverse@^5.2.0:4814 version "5.2.0"4815 resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.2.0.tgz#307df42547e6cc7324d3cf03c155d5cdb8c53880"4816 integrity sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==48174818estree-walker@^1.0.1:4819 version "1.0.1"4820 resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-1.0.1.tgz#31bc5d612c96b704106b477e6dd5d8aa138cb700"4821 integrity sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg==48224823estree-walker@^2.0.1:4824 version "2.0.2"4825 resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-2.0.2.tgz#52f010178c2a4c117a7757cfe942adb7d2da4cac"4826 integrity sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==48274828esutils@^2.0.2:4829 version "2.0.3"4830 resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64"4831 integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==48324833etag@~1.8.1:4834 version "1.8.1"4835 resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887"4836 integrity sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=48374838eth-ens-namehash@2.0.8:4839 version "2.0.8"4840 resolved "https://registry.yarnpkg.com/eth-ens-namehash/-/eth-ens-namehash-2.0.8.tgz#229ac46eca86d52e0c991e7cb2aef83ff0f68bcf"4841 integrity sha1-IprEbsqG1S4MmR58sq74P/D2i88=4842 dependencies:4843 idna-uts46-hx "^2.3.1"4844 js-sha3 "^0.5.7"48454846eth-lib@0.2.8:4847 version "0.2.8"4848 resolved "https://registry.yarnpkg.com/eth-lib/-/eth-lib-0.2.8.tgz#b194058bef4b220ad12ea497431d6cb6aa0623c8"4849 integrity sha512-ArJ7x1WcWOlSpzdoTBX8vkwlkSQ85CjjifSZtV4co64vWxSV8geWfPI9x4SVYu3DSxnX4yWFVTtGL+j9DUFLNw==4850 dependencies:4851 bn.js "^4.11.6"4852 elliptic "^6.4.0"4853 xhr-request-promise "^0.1.2"48544855eth-lib@^0.1.26:4856 version "0.1.29"4857 resolved "https://registry.yarnpkg.com/eth-lib/-/eth-lib-0.1.29.tgz#0c11f5060d42da9f931eab6199084734f4dbd1d9"4858 integrity sha512-bfttrr3/7gG4E02HoWTDUcDDslN003OlOoBxk9virpAZQ1ja/jDgwkWB8QfJF7ojuEowrqy+lzp9VcJG7/k5bQ==4859 dependencies:4860 bn.js "^4.11.6"4861 elliptic "^6.4.0"4862 nano-json-stream-parser "^0.1.2"4863 servify "^0.1.12"4864 ws "^3.0.0"4865 xhr-request-promise "^0.1.2"48664867ethereum-bloom-filters@^1.0.6:4868 version "1.0.10"4869 resolved "https://registry.yarnpkg.com/ethereum-bloom-filters/-/ethereum-bloom-filters-1.0.10.tgz#3ca07f4aed698e75bd134584850260246a5fed8a"4870 integrity sha512-rxJ5OFN3RwjQxDcFP2Z5+Q9ho4eIdEmSc2ht0fCu8Se9nbXjZ7/031uXoUYJ87KHCOdVeiUuwSnoS7hmYAGVHA==4871 dependencies:4872 js-sha3 "^0.8.0"48734874ethereum-cryptography@^0.1.3:4875 version "0.1.3"4876 resolved "https://registry.yarnpkg.com/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz#8d6143cfc3d74bf79bbd8edecdf29e4ae20dd191"4877 integrity sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==4878 dependencies:4879 "@types/pbkdf2" "^3.0.0"4880 "@types/secp256k1" "^4.0.1"4881 blakejs "^1.1.0"4882 browserify-aes "^1.2.0"4883 bs58check "^2.1.2"4884 create-hash "^1.2.0"4885 create-hmac "^1.1.7"4886 hash.js "^1.1.7"4887 keccak "^3.0.0"4888 pbkdf2 "^3.0.17"4889 randombytes "^2.1.0"4890 safe-buffer "^5.1.2"4891 scrypt-js "^3.0.0"4892 secp256k1 "^4.0.1"4893 setimmediate "^1.0.5"48944895ethereumjs-util@^7.0.10, ethereumjs-util@^7.1.0, ethereumjs-util@^7.1.1, ethereumjs-util@^7.1.2:4896 version "7.1.3"4897 resolved "https://registry.yarnpkg.com/ethereumjs-util/-/ethereumjs-util-7.1.3.tgz#b55d7b64dde3e3e45749e4c41288238edec32d23"4898 integrity sha512-y+82tEbyASO0K0X1/SRhbJJoAlfcvq8JbrG4a5cjrOks7HS/36efU/0j2flxCPOUM++HFahk33kr/ZxyC4vNuw==4899 dependencies:4900 "@types/bn.js" "^5.1.0"4901 bn.js "^5.1.2"4902 create-hash "^1.1.2"4903 ethereum-cryptography "^0.1.3"4904 rlp "^2.2.4"49054906ethjs-unit@0.1.6:4907 version "0.1.6"4908 resolved "https://registry.yarnpkg.com/ethjs-unit/-/ethjs-unit-0.1.6.tgz#c665921e476e87bce2a9d588a6fe0405b2c41699"4909 integrity sha1-xmWSHkduh7ziqdWIpv4EBbLEFpk=4910 dependencies:4911 bn.js "4.11.6"4912 number-to-bn "1.7.0"49134914eventemitter3@4.0.4:4915 version "4.0.4"4916 resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.4.tgz#b5463ace635a083d018bdc7c917b4c5f10a85384"4917 integrity sha512-rlaVLnVxtxvoyLsQQFBx53YmXHDxRIzzTLbdfxqi4yocpSjAxXwkU0cScM5JgSKMqEhrZpnvQ2D9gjylR0AimQ==49184919eventemitter3@^4.0.7:4920 version "4.0.7"4921 resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.7.tgz#2de9b68f6528d5644ef5c59526a1b4a07306169f"4922 integrity sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==49234924evp_bytestokey@^1.0.0, evp_bytestokey@^1.0.3:4925 version "1.0.3"4926 resolved "https://registry.yarnpkg.com/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz#7fcbdb198dc71959432efe13842684e0525acb02"4927 integrity sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==4928 dependencies:4929 md5.js "^1.3.4"4930 safe-buffer "^5.1.1"49314932execa@^5.0.0:4933 version "5.1.1"4934 resolved "https://registry.yarnpkg.com/execa/-/execa-5.1.1.tgz#f80ad9cbf4298f7bd1d4c9555c21e93741c411dd"4935 integrity sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==4936 dependencies:4937 cross-spawn "^7.0.3"4938 get-stream "^6.0.0"4939 human-signals "^2.1.0"4940 is-stream "^2.0.0"4941 merge-stream "^2.0.0"4942 npm-run-path "^4.0.1"4943 onetime "^5.1.2"4944 signal-exit "^3.0.3"4945 strip-final-newline "^2.0.0"49464947exit-on-epipe@~1.0.1:4948 version "1.0.1"4949 resolved "https://registry.yarnpkg.com/exit-on-epipe/-/exit-on-epipe-1.0.1.tgz#0bdd92e87d5285d267daa8171d0eb06159689692"4950 integrity sha512-h2z5mrROTxce56S+pnvAV890uu7ls7f1kEvVGJbw1OlFH3/mlJ5bkXu0KRyW94v37zzHPiUd55iLn3DA7TjWpw==49514952exit@^0.1.2:4953 version "0.1.2"4954 resolved "https://registry.yarnpkg.com/exit/-/exit-0.1.2.tgz#0632638f8d877cc82107d30a0fff1a17cba1cd0c"4955 integrity sha1-BjJjj42HfMghB9MKD/8aF8uhzQw=49564957expect@^27.3.1:4958 version "27.3.1"4959 resolved "https://registry.yarnpkg.com/expect/-/expect-27.3.1.tgz#d0f170b1f5c8a2009bab0beffd4bb94f043e38e7"4960 integrity sha512-MrNXV2sL9iDRebWPGOGFdPQRl2eDQNu/uhxIMShjjx74T6kC6jFIkmQ6OqXDtevjGUkyB2IT56RzDBqXf/QPCg==4961 dependencies:4962 "@jest/types" "^27.2.5"4963 ansi-styles "^5.0.0"4964 jest-get-type "^27.3.1"4965 jest-matcher-utils "^27.3.1"4966 jest-message-util "^27.3.1"4967 jest-regex-util "^27.0.6"49684969express@^4.14.0:4970 version "4.17.1"4971 resolved "https://registry.yarnpkg.com/express/-/express-4.17.1.tgz#4491fc38605cf51f8629d39c2b5d026f98a4c134"4972 integrity sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g==4973 dependencies:4974 accepts "~1.3.7"4975 array-flatten "1.1.1"4976 body-parser "1.19.0"4977 content-disposition "0.5.3"4978 content-type "~1.0.4"4979 cookie "0.4.0"4980 cookie-signature "1.0.6"4981 debug "2.6.9"4982 depd "~1.1.2"4983 encodeurl "~1.0.2"4984 escape-html "~1.0.3"4985 etag "~1.8.1"4986 finalhandler "~1.1.2"4987 fresh "0.5.2"4988 merge-descriptors "1.0.1"4989 methods "~1.1.2"4990 on-finished "~2.3.0"4991 parseurl "~1.3.3"4992 path-to-regexp "0.1.7"4993 proxy-addr "~2.0.5"4994 qs "6.7.0"4995 range-parser "~1.2.1"4996 safe-buffer "5.1.2"4997 send "0.17.1"4998 serve-static "1.14.1"4999 setprototypeof "1.1.1"5000 statuses "~1.5.0"5001 type-is "~1.6.18"5002 utils-merge "1.0.1"5003 vary "~1.1.2"50045005ext@^1.1.2:5006 version "1.4.0"5007 resolved "https://registry.yarnpkg.com/ext/-/ext-1.4.0.tgz#89ae7a07158f79d35517882904324077e4379244"5008 integrity sha512-Key5NIsUxdqKg3vIsdw9dSuXpPCQ297y6wBjL30edxwPgt2E44WcWBZey/ZvUc6sERLTxKdyCu4gZFmUbk1Q7A==5009 dependencies:5010 type "^2.0.0"50115012extend@~3.0.2:5013 version "3.0.2"5014 resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa"5015 integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==50165017external-editor@^3.0.3:5018 version "3.1.0"5019 resolved "https://registry.yarnpkg.com/external-editor/-/external-editor-3.1.0.tgz#cb03f740befae03ea4d283caed2741a83f335495"5020 integrity sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==5021 dependencies:5022 chardet "^0.7.0"5023 iconv-lite "^0.4.24"5024 tmp "^0.0.33"50255026extsprintf@1.3.0:5027 version "1.3.0"5028 resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05"5029 integrity sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=50305031extsprintf@^1.2.0:5032 version "1.4.0"5033 resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.4.0.tgz#e2689f8f356fad62cca65a3a91c5df5f9551692f"5034 integrity sha1-4mifjzVvrWLMplo6kcXfX5VRaS8=50355036fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3:5037 version "3.1.3"5038 resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525"5039 integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==50405041fast-glob@^3.1.1:5042 version "3.2.5"5043 resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.5.tgz#7939af2a656de79a4f1901903ee8adcaa7cb9661"5044 integrity sha512-2DtFcgT68wiTTiwZ2hNdJfcHNke9XOfnwmBRWXhmeKM8rF0TGwmC/Qto3S7RoZKp5cilZbxzO5iTNTQsJ+EeDg==5045 dependencies:5046 "@nodelib/fs.stat" "^2.0.2"5047 "@nodelib/fs.walk" "^1.2.3"5048 glob-parent "^5.1.0"5049 merge2 "^1.3.0"5050 micromatch "^4.0.2"5051 picomatch "^2.2.1"50525053fast-json-stable-stringify@^2.0.0:5054 version "2.1.0"5055 resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633"5056 integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==50575058fast-levenshtein@^2.0.6, fast-levenshtein@~2.0.6:5059 version "2.0.6"5060 resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917"5061 integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=50625063fastq@^1.6.0:5064 version "1.11.0"5065 resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.11.0.tgz#bb9fb955a07130a918eb63c1f5161cc32a5d0858"5066 integrity sha512-7Eczs8gIPDrVzT+EksYBcupqMyxSHXXrHOLRRxU2/DicV8789MRBRR8+Hc2uWzUupOs4YS4JzBmBxjjCVBxD/g==5067 dependencies:5068 reusify "^1.0.4"50695070fb-watchman@^2.0.0:5071 version "2.0.1"5072 resolved "https://registry.yarnpkg.com/fb-watchman/-/fb-watchman-2.0.1.tgz#fc84fb39d2709cf3ff6d743706157bb5708a8a85"5073 integrity sha512-DkPJKQeY6kKwmuMretBhr7G6Vodr7bFwDYTXIkfG1gjvNpaxBTQV3PbXg6bR1c1UP4jPOX0jHUbbHANL9vRjVg==5074 dependencies:5075 bser "2.1.1"50765077figures@^3.0.0:5078 version "3.2.0"5079 resolved "https://registry.yarnpkg.com/figures/-/figures-3.2.0.tgz#625c18bd293c604dc4a8ddb2febf0c88341746af"5080 integrity sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==5081 dependencies:5082 escape-string-regexp "^1.0.5"50835084file-entry-cache@^6.0.1:5085 version "6.0.1"5086 resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-6.0.1.tgz#211b2dd9659cb0394b073e7323ac3c933d522027"5087 integrity sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==5088 dependencies:5089 flat-cache "^3.0.4"50905091filename-reserved-regex@^2.0.0:5092 version "2.0.0"5093 resolved "https://registry.yarnpkg.com/filename-reserved-regex/-/filename-reserved-regex-2.0.0.tgz#abf73dfab735d045440abfea2d91f389ebbfa229"5094 integrity sha1-q/c9+rc10EVECr/qLZHzieu/oik=50955096filenamify@^4.3.0:5097 version "4.3.0"5098 resolved "https://registry.yarnpkg.com/filenamify/-/filenamify-4.3.0.tgz#62391cb58f02b09971c9d4f9d63b3cf9aba03106"5099 integrity sha512-hcFKyUG57yWGAzu1CMt/dPzYZuv+jAJUT85bL8mrXvNe6hWj6yEHEc4EdcgiA6Z3oi1/9wXJdZPXF2dZNgwgOg==5100 dependencies:5101 filename-reserved-regex "^2.0.0"5102 strip-outer "^1.0.1"5103 trim-repeated "^1.0.0"51045105filing-cabinet@^3.0.0:5106 version "3.0.0"5107 resolved "https://registry.yarnpkg.com/filing-cabinet/-/filing-cabinet-3.0.0.tgz#08f9ceec5134f4a662926dd45b8a26eca1b5f622"5108 integrity sha512-o8Qac5qxZ1uVidR4Sd7ZQbbqObFZlqXU4xu1suAYg9PQPcQFNTzOmxQa/MehIDMgIvXHTb42mWPNV9l3eHBPSw==5109 dependencies:5110 app-module-path "^2.2.0"5111 commander "^2.20.3"5112 debug "^4.3.1"5113 decomment "^0.9.3"5114 enhanced-resolve "^5.3.2"5115 is-relative-path "^1.0.2"5116 module-definition "^3.3.1"5117 module-lookup-amd "^7.0.0"5118 resolve "^1.19.0"5119 resolve-dependency-path "^2.0.0"5120 sass-lookup "^3.0.0"5121 stylus-lookup "^3.0.1"5122 typescript "^3.9.7"51235124fill-range@^7.0.1:5125 version "7.0.1"5126 resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40"5127 integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==5128 dependencies:5129 to-regex-range "^5.0.1"51305131finalhandler@~1.1.2:5132 version "1.1.2"5133 resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.1.2.tgz#b7e7d000ffd11938d0fdb053506f6ebabe9f587d"5134 integrity sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==5135 dependencies:5136 debug "2.6.9"5137 encodeurl "~1.0.2"5138 escape-html "~1.0.3"5139 on-finished "~2.3.0"5140 parseurl "~1.3.3"5141 statuses "~1.5.0"5142 unpipe "~1.0.0"51435144find-babel-config@^1.2.0:5145 version "1.2.0"5146 resolved "https://registry.yarnpkg.com/find-babel-config/-/find-babel-config-1.2.0.tgz#a9b7b317eb5b9860cda9d54740a8c8337a2283a2"5147 integrity sha512-jB2CHJeqy6a820ssiqwrKMeyC6nNdmrcgkKWJWmpoxpE8RKciYJXCcXRq1h2AzCo5I5BJeN2tkGEO3hLTuePRA==5148 dependencies:5149 json5 "^0.5.1"5150 path-exists "^3.0.0"51515152find-cache-dir@^2.0.0:5153 version "2.1.0"5154 resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-2.1.0.tgz#8d0f94cd13fe43c6c7c261a0d86115ca918c05f7"5155 integrity sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==5156 dependencies:5157 commondir "^1.0.1"5158 make-dir "^2.0.0"5159 pkg-dir "^3.0.0"51605161find-cache-dir@^3.3.1:5162 version "3.3.1"5163 resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-3.3.1.tgz#89b33fad4a4670daa94f855f7fbe31d6d84fe880"5164 integrity sha512-t2GDMt3oGC/v+BMwzmllWDuJF/xcDtE5j/fCGbqDD7OLuJkj0cfh1YSA5VKPvwMeLFLNDBkwOKZ2X85jGLVftQ==5165 dependencies:5166 commondir "^1.0.1"5167 make-dir "^3.0.2"5168 pkg-dir "^4.1.0"51695170find-index@^0.1.1:5171 version "0.1.1"5172 resolved "https://registry.yarnpkg.com/find-index/-/find-index-0.1.1.tgz#675d358b2ca3892d795a1ab47232f8b6e2e0dde4"5173 integrity sha1-Z101iyyjiS15Whq0cjL4tuLg3eQ=51745175find-up@5.0.0:5176 version "5.0.0"5177 resolved "https://registry.yarnpkg.com/find-up/-/find-up-5.0.0.tgz#4c92819ecb7083561e4f4a240a86be5198f536fc"5178 integrity sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==5179 dependencies:5180 locate-path "^6.0.0"5181 path-exists "^4.0.0"51825183find-up@^2.1.0:5184 version "2.1.0"5185 resolved "https://registry.yarnpkg.com/find-up/-/find-up-2.1.0.tgz#45d1b7e506c717ddd482775a2b77920a3c0c57a7"5186 integrity sha1-RdG35QbHF93UgndaK3eSCjwMV6c=5187 dependencies:5188 locate-path "^2.0.0"51895190find-up@^3.0.0:5191 version "3.0.0"5192 resolved "https://registry.yarnpkg.com/find-up/-/find-up-3.0.0.tgz#49169f1d7993430646da61ecc5ae355c21c97b73"5193 integrity sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==5194 dependencies:5195 locate-path "^3.0.0"51965197find-up@^4.0.0, find-up@^4.1.0:5198 version "4.1.0"5199 resolved "https://registry.yarnpkg.com/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19"5200 integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==5201 dependencies:5202 locate-path "^5.0.0"5203 path-exists "^4.0.0"52045205flat-cache@^3.0.4:5206 version "3.0.4"5207 resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-3.0.4.tgz#61b0338302b2fe9f957dcc32fc2a87f1c3048b11"5208 integrity sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==5209 dependencies:5210 flatted "^3.1.0"5211 rimraf "^3.0.2"52125213flat@^5.0.2:5214 version "5.0.2"5215 resolved "https://registry.yarnpkg.com/flat/-/flat-5.0.2.tgz#8ca6fe332069ffa9d324c327198c598259ceb241"5216 integrity sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==52175218flatted@^3.1.0:5219 version "3.1.1"5220 resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.1.1.tgz#c4b489e80096d9df1dfc97c79871aea7c617c469"5221 integrity sha512-zAoAQiudy+r5SvnSw3KJy5os/oRJYHzrzja/tBDqrZtNhUw8bt6y8OBzMWcjWr+8liV8Eb6yOhw8WZ7VFZ5ZzA==52225223flatten@^1.0.2:5224 version "1.0.3"5225 resolved "https://registry.yarnpkg.com/flatten/-/flatten-1.0.3.tgz#c1283ac9f27b368abc1e36d1ff7b04501a30356b"5226 integrity sha512-dVsPA/UwQ8+2uoFe5GHtiBMu48dWLTdsuEd7CKGlZlD78r1TTWBvDuFaFGKCo/ZfEr95Uk56vZoX86OsHkUeIg==52275228follow-redirects@^1.12.1:5229 version "1.14.1"5230 resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.14.1.tgz#d9114ded0a1cfdd334e164e6662ad02bfd91ff43"5231 integrity sha512-HWqDgT7ZEkqRzBvc2s64vSZ/hfOceEol3ac/7tKwzuvEyWx3/4UegXh5oBOIotkGsObyk3xznnSRVADBgWSQVg==52325233foreach@^2.0.5:5234 version "2.0.5"5235 resolved "https://registry.yarnpkg.com/foreach/-/foreach-2.0.5.tgz#0bee005018aeb260d0a3af3ae658dd0136ec1b99"5236 integrity sha1-C+4AUBiusmDQo6865ljdATbsG5k=52375238forever-agent@~0.6.1:5239 version "0.6.1"5240 resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91"5241 integrity sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=52425243form-data@^3.0.0:5244 version "3.0.1"5245 resolved "https://registry.yarnpkg.com/form-data/-/form-data-3.0.1.tgz#ebd53791b78356a99af9a300d4282c4d5eb9755f"5246 integrity sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==5247 dependencies:5248 asynckit "^0.4.0"5249 combined-stream "^1.0.8"5250 mime-types "^2.1.12"52515252form-data@~2.3.2:5253 version "2.3.3"5254 resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.3.3.tgz#dcce52c05f644f298c6a7ab936bd724ceffbf3a6"5255 integrity sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==5256 dependencies:5257 asynckit "^0.4.0"5258 combined-stream "^1.0.6"5259 mime-types "^2.1.12"52605261forwarded@0.2.0:5262 version "0.2.0"5263 resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.2.0.tgz#2269936428aad4c15c7ebe9779a84bf0b2a81811"5264 integrity sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==52655266fresh@0.5.2:5267 version "0.5.2"5268 resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7"5269 integrity sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=52705271fs-extra@^0.30.0:5272 version "0.30.0"5273 resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-0.30.0.tgz#f233ffcc08d4da7d432daa449776989db1df93f0"5274 integrity sha1-8jP/zAjU2n1DLapEl3aYnbHfk/A=5275 dependencies:5276 graceful-fs "^4.1.2"5277 jsonfile "^2.1.0"5278 klaw "^1.0.0"5279 path-is-absolute "^1.0.0"5280 rimraf "^2.2.8"52815282fs-extra@^10.0.0:5283 version "10.0.0"5284 resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-10.0.0.tgz#9ff61b655dde53fb34a82df84bb214ce802e17c1"5285 integrity sha512-C5owb14u9eJwizKGdchcDUQeFtlSHHthBk8pbX9Vc1PFZrLombudjDnNns88aYslCyF6IY5SUw3Roz6xShcEIQ==5286 dependencies:5287 graceful-fs "^4.2.0"5288 jsonfile "^6.0.1"5289 universalify "^2.0.0"52905291fs-extra@^4.0.2:5292 version "4.0.3"5293 resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-4.0.3.tgz#0d852122e5bc5beb453fb028e9c0c9bf36340c94"5294 integrity sha512-q6rbdDd1o2mAnQreO7YADIxf/Whx4AHBiRf6d+/cVT8h44ss+lHgxf1FemcqDnQt9X3ct4McHr+JMGlYSsK7Cg==5295 dependencies:5296 graceful-fs "^4.1.2"5297 jsonfile "^4.0.0"5298 universalify "^0.1.0"52995300fs-extra@^8.1.0:5301 version "8.1.0"5302 resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-8.1.0.tgz#49d43c45a88cd9677668cb7be1b46efdb8d2e1c0"5303 integrity sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==5304 dependencies:5305 graceful-fs "^4.2.0"5306 jsonfile "^4.0.0"5307 universalify "^0.1.0"53085309fs-minipass@^1.2.5:5310 version "1.2.7"5311 resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-1.2.7.tgz#ccff8570841e7fe4265693da88936c55aed7f7c7"5312 integrity sha512-GWSSJGFy4e9GUeCcbIkED+bgAoFyj7XF1mV8rma3QW4NIqX9Kyx79N/PF61H5udOV3aY1IaMLs6pGbH71nlCTA==5313 dependencies:5314 minipass "^2.6.0"53155316fs-readdir-recursive@^1.1.0:5317 version "1.1.0"5318 resolved "https://registry.yarnpkg.com/fs-readdir-recursive/-/fs-readdir-recursive-1.1.0.tgz#e32fc030a2ccee44a6b5371308da54be0b397d27"5319 integrity sha512-GNanXlVr2pf02+sPN40XN8HG+ePaNcvM0q5mZBd668Obwb0yD5GiUbZOFgwn8kGMY6I3mdyDJzieUy3PTYyTRA==53205321fs.realpath@^1.0.0:5322 version "1.0.0"5323 resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f"5324 integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8=53255326fsevents@^2.3.2, fsevents@~2.3.2:5327 version "2.3.2"5328 resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a"5329 integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==53305331function-bind@^1.1.1:5332 version "1.1.1"5333 resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d"5334 integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==53355336functional-red-black-tree@^1.0.1:5337 version "1.0.1"5338 resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327"5339 integrity sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=53405341gauge@^v3.0.1:5342 version "3.0.1"5343 resolved "https://registry.yarnpkg.com/gauge/-/gauge-3.0.1.tgz#4bea07bcde3782f06dced8950e51307aa0f4a346"5344 integrity sha512-6STz6KdQgxO4S/ko+AbjlFGGdGcknluoqU+79GOFCDqqyYj5OanQf9AjxwN0jCidtT+ziPMmPSt9E4hfQ0CwIQ==5345 dependencies:5346 aproba "^1.0.3 || ^2.0.0"5347 color-support "^1.1.2"5348 console-control-strings "^1.0.0"5349 has-unicode "^2.0.1"5350 object-assign "^4.1.1"5351 signal-exit "^3.0.0"5352 string-width "^1.0.1 || ^2.0.0"5353 strip-ansi "^3.0.1 || ^4.0.0"5354 wide-align "^1.1.2"53555356gensync@^1.0.0-beta.2:5357 version "1.0.0-beta.2"5358 resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.2.tgz#32a6ee76c3d7f52d46b2b1ae5d93fea8580a25e0"5359 integrity sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==53605361get-amd-module-type@^3.0.0:5362 version "3.0.0"5363 resolved "https://registry.yarnpkg.com/get-amd-module-type/-/get-amd-module-type-3.0.0.tgz#bb334662fa04427018c937774570de495845c288"5364 integrity sha512-99Q7COuACPfVt18zH9N4VAMyb81S6TUgJm2NgV6ERtkh9VIkAaByZkW530wl3lLN5KTtSrK9jVLxYsoP5hQKsw==5365 dependencies:5366 ast-module-types "^2.3.2"5367 node-source-walk "^4.0.0"53685369get-caller-file@^2.0.5:5370 version "2.0.5"5371 resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e"5372 integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==53735374get-func-name@^2.0.0:5375 version "2.0.0"5376 resolved "https://registry.yarnpkg.com/get-func-name/-/get-func-name-2.0.0.tgz#ead774abee72e20409433a066366023dd6887a41"5377 integrity sha1-6td0q+5y4gQJQzoGY2YCPdaIekE=53785379get-intrinsic@^1.0.2, get-intrinsic@^1.1.0, get-intrinsic@^1.1.1:5380 version "1.1.1"5381 resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.1.1.tgz#15f59f376f855c446963948f0d24cd3637b4abc6"5382 integrity sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==5383 dependencies:5384 function-bind "^1.1.1"5385 has "^1.0.3"5386 has-symbols "^1.0.1"53875388get-own-enumerable-property-symbols@^3.0.0:5389 version "3.0.2"5390 resolved "https://registry.yarnpkg.com/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.2.tgz#b5fde77f22cbe35f390b4e089922c50bce6ef664"5391 integrity sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g==53925393get-package-type@^0.1.0:5394 version "0.1.0"5395 resolved "https://registry.yarnpkg.com/get-package-type/-/get-package-type-0.1.0.tgz#8de2d803cff44df3bc6c456e6668b36c3926e11a"5396 integrity sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==53975398get-stream@^3.0.0:5399 version "3.0.0"5400 resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-3.0.0.tgz#8e943d1358dc37555054ecbe2edb05aa174ede14"5401 integrity sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=54025403get-stream@^4.1.0:5404 version "4.1.0"5405 resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-4.1.0.tgz#c1b255575f3dc21d59bfc79cd3d2b46b1c3a54b5"5406 integrity sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==5407 dependencies:5408 pump "^3.0.0"54095410get-stream@^5.1.0:5411 version "5.2.0"5412 resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-5.2.0.tgz#4966a1795ee5ace65e706c4b7beb71257d6e22d3"5413 integrity sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==5414 dependencies:5415 pump "^3.0.0"54165417get-stream@^6.0.0:5418 version "6.0.1"5419 resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-6.0.1.tgz#a262d8eef67aced57c2852ad6167526a43cbf7b7"5420 integrity sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==54215422get-symbol-description@^1.0.0:5423 version "1.0.0"5424 resolved "https://registry.yarnpkg.com/get-symbol-description/-/get-symbol-description-1.0.0.tgz#7fdb81c900101fbd564dd5f1a30af5aadc1e58d6"5425 integrity sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==5426 dependencies:5427 call-bind "^1.0.2"5428 get-intrinsic "^1.1.1"54295430getpass@^0.1.1:5431 version "0.1.7"5432 resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa"5433 integrity sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=5434 dependencies:5435 assert-plus "^1.0.0"54365437gh-pages@^3.2.3:5438 version "3.2.3"5439 resolved "https://registry.yarnpkg.com/gh-pages/-/gh-pages-3.2.3.tgz#897e5f15e111f42af57d21d430b83e5cdf29472c"5440 integrity sha512-jA1PbapQ1jqzacECfjUaO9gV8uBgU6XNMV0oXLtfCX3haGLe5Atq8BxlrADhbD6/UdG9j6tZLWAkAybndOXTJg==5441 dependencies:5442 async "^2.6.1"5443 commander "^2.18.0"5444 email-addresses "^3.0.1"5445 filenamify "^4.3.0"5446 find-cache-dir "^3.3.1"5447 fs-extra "^8.1.0"5448 globby "^6.1.0"54495450gh-release-assets@^2.0.0:5451 version "2.0.0"5452 resolved "https://registry.yarnpkg.com/gh-release-assets/-/gh-release-assets-2.0.0.tgz#1aca1a7a3f2a7ead0eeb43104177cda6cdf1febf"5453 integrity sha512-I+Gy+e86o7A6J7sJRX4uA3EvLlLFcXxsRre22YTJ5dzpl/elZA75bMWfoBd0WVY3Mp9M8KtROfn3zlzDkptyWw==5454 dependencies:5455 async "^3.2.0"5456 mime "^2.4.6"5457 progress-stream "^2.0.0"5458 pumpify "^2.0.1"5459 simple-get "^4.0.0"5460 util-extend "^1.0.1"54615462gh-release@^6.0.1:5463 version "6.0.1"5464 resolved "https://registry.yarnpkg.com/gh-release/-/gh-release-6.0.1.tgz#f28c5d44d889931d44bbf422cccff885723df6b3"5465 integrity sha512-irUYo1j7GjXzE8xsUyIvFX8SA7vNwO0pywd1a0NqkLHMh3595yurPEwnuj7SrkDOyqGu5lU9F50/7G3c6PHhmw==5466 dependencies:5467 "@octokit/rest" "^18.0.9"5468 chalk "^4.1.0"5469 changelog-parser "^2.0.0"5470 deep-extend "^0.6.0"5471 gauge "^v3.0.1"5472 gh-release-assets "^2.0.0"5473 ghauth "^5.0.0"5474 github-url-to-object "^4.0.4"5475 inquirer "^8.0.0"5476 shelljs "^0.8.4"5477 update-notifier "^5.0.0"5478 yargs "^17.0.0"54795480ghauth@^5.0.0:5481 version "5.0.1"5482 resolved "https://registry.yarnpkg.com/ghauth/-/ghauth-5.0.1.tgz#ac47c8a4d40504641184c1f8141ada91740ec837"5483 integrity sha512-WzgL12dczZX/VrvVTkoFAJLU3pb6PDT+TS60kLlaU51fuNEv6VoYpRXlnwIjkMIhqWead9+dLBEzj0E1ghYMkg==5484 dependencies:5485 application-config "^2.0.0"5486 node-fetch "^2.6.0"5487 ora "^4.0.5"5488 read "^1.0.7"54895490github-url-to-object@^4.0.4:5491 version "4.0.6"5492 resolved "https://registry.yarnpkg.com/github-url-to-object/-/github-url-to-object-4.0.6.tgz#5ea8701dc8c336b8d582dc3fa5bf964165c3b365"5493 integrity sha512-NaqbYHMUAlPcmWFdrAB7bcxrNIiiJWJe8s/2+iOc9vlcHlwHqSGrPk+Yi3nu6ebTwgsZEa7igz+NH2vEq3gYwQ==5494 dependencies:5495 is-url "^1.1.0"54965497glob-parent@^5.1.0, glob-parent@~5.1.2:5498 version "5.1.2"5499 resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4"5500 integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==5501 dependencies:5502 is-glob "^4.0.1"55035504glob-parent@^6.0.1:5505 version "6.0.2"5506 resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-6.0.2.tgz#6d237d99083950c79290f24c7642a3de9a28f9e3"5507 integrity sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==5508 dependencies:5509 is-glob "^4.0.3"55105511glob2base@^0.0.12:5512 version "0.0.12"5513 resolved "https://registry.yarnpkg.com/glob2base/-/glob2base-0.0.12.tgz#9d419b3e28f12e83a362164a277055922c9c0d56"5514 integrity sha1-nUGbPijxLoOjYhZKJ3BVkiycDVY=5515 dependencies:5516 find-index "^0.1.1"55175518glob@7.1.7, glob@^7.0.0, glob@^7.0.3, glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4, glob@^7.1.6:5519 version "7.1.7"5520 resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.7.tgz#3b193e9233f01d42d0b3f78294bbeeb418f94a90"5521 integrity sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==5522 dependencies:5523 fs.realpath "^1.0.0"5524 inflight "^1.0.4"5525 inherits "2"5526 minimatch "^3.0.4"5527 once "^1.3.0"5528 path-is-absolute "^1.0.0"55295530glob@^7.2.0:5531 version "7.2.0"5532 resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.0.tgz#d15535af7732e02e948f4c41628bd910293f6023"5533 integrity sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==5534 dependencies:5535 fs.realpath "^1.0.0"5536 inflight "^1.0.4"5537 inherits "2"5538 minimatch "^3.0.4"5539 once "^1.3.0"5540 path-is-absolute "^1.0.0"55415542global-dirs@^3.0.0:5543 version "3.0.0"5544 resolved "https://registry.yarnpkg.com/global-dirs/-/global-dirs-3.0.0.tgz#70a76fe84ea315ab37b1f5576cbde7d48ef72686"5545 integrity sha512-v8ho2DS5RiCjftj1nD9NmnfaOzTdud7RRnVd9kFNOjqZbISlx5DQ+OrTkywgd0dIt7oFCvKetZSHoHcP3sDdiA==5546 dependencies:5547 ini "2.0.0"55485549global@~4.4.0:5550 version "4.4.0"5551 resolved "https://registry.yarnpkg.com/global/-/global-4.4.0.tgz#3e7b105179006a323ed71aafca3e9c57a5cc6406"5552 integrity sha512-wv/LAoHdRE3BeTGz53FAamhGlPLhlssK45usmGFThIi4XqnBmjKQ16u+RNbP7WvigRZDxUsM0J3gcQ5yicaL0w==5553 dependencies:5554 min-document "^2.19.0"5555 process "^0.11.10"55565557globals@^11.1.0:5558 version "11.12.0"5559 resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e"5560 integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==55615562globals@^13.6.0, globals@^13.9.0:5563 version "13.9.0"5564 resolved "https://registry.yarnpkg.com/globals/-/globals-13.9.0.tgz#4bf2bf635b334a173fb1daf7c5e6b218ecdc06cb"5565 integrity sha512-74/FduwI/JaIrr1H8e71UbDE+5x7pIPs1C2rrwC52SszOo043CsWOZEMW7o2Y58xwm9b+0RBKDxY5n2sUpEFxA==5566 dependencies:5567 type-fest "^0.20.2"55685569globby@^11.0.3, globby@^11.0.4:5570 version "11.0.4"5571 resolved "https://registry.yarnpkg.com/globby/-/globby-11.0.4.tgz#2cbaff77c2f2a62e71e9b2813a67b97a3a3001a5"5572 integrity sha512-9O4MVG9ioZJ08ffbcyVYyLOJLk5JQ688pJ4eMGLpdWLHq/Wr1D9BlriLQyL0E+jbkuePVZXYFj47QM/v093wHg==5573 dependencies:5574 array-union "^2.1.0"5575 dir-glob "^3.0.1"5576 fast-glob "^3.1.1"5577 ignore "^5.1.4"5578 merge2 "^1.3.0"5579 slash "^3.0.0"55805581globby@^6.1.0:5582 version "6.1.0"5583 resolved "https://registry.yarnpkg.com/globby/-/globby-6.1.0.tgz#f5a6d70e8395e21c858fb0489d64df02424d506c"5584 integrity sha1-9abXDoOV4hyFj7BInWTfAkJNUGw=5585 dependencies:5586 array-union "^1.0.1"5587 glob "^7.0.3"5588 object-assign "^4.0.1"5589 pify "^2.0.0"5590 pinkie-promise "^2.0.0"55915592gonzales-pe@^4.2.3:5593 version "4.3.0"5594 resolved "https://registry.yarnpkg.com/gonzales-pe/-/gonzales-pe-4.3.0.tgz#fe9dec5f3c557eead09ff868c65826be54d067b3"5595 integrity sha512-otgSPpUmdWJ43VXyiNgEYE4luzHCL2pz4wQ0OnDluC6Eg4Ko3Vexy/SrSynglw/eR+OhkzmqFCZa/OFa/RgAOQ==5596 dependencies:5597 minimist "^1.2.5"55985599got@9.6.0, got@^9.6.0:5600 version "9.6.0"5601 resolved "https://registry.yarnpkg.com/got/-/got-9.6.0.tgz#edf45e7d67f99545705de1f7bbeeeb121765ed85"5602 integrity sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q==5603 dependencies:5604 "@sindresorhus/is" "^0.14.0"5605 "@szmarczak/http-timer" "^1.1.2"5606 cacheable-request "^6.0.0"5607 decompress-response "^3.3.0"5608 duplexer3 "^0.1.4"5609 get-stream "^4.1.0"5610 lowercase-keys "^1.0.1"5611 mimic-response "^1.0.1"5612 p-cancelable "^1.0.0"5613 to-readable-stream "^1.0.0"5614 url-parse-lax "^3.0.0"56155616got@^7.1.0:5617 version "7.1.0"5618 resolved "https://registry.yarnpkg.com/got/-/got-7.1.0.tgz#05450fd84094e6bbea56f451a43a9c289166385a"5619 integrity sha512-Y5WMo7xKKq1muPsxD+KmrR8DH5auG7fBdDVueZwETwV6VytKyU9OX/ddpq2/1hp1vIPvVb4T81dKQz3BivkNLw==5620 dependencies:5621 decompress-response "^3.2.0"5622 duplexer3 "^0.1.4"5623 get-stream "^3.0.0"5624 is-plain-obj "^1.1.0"5625 is-retry-allowed "^1.0.0"5626 is-stream "^1.0.0"5627 isurl "^1.0.0-alpha5"5628 lowercase-keys "^1.0.0"5629 p-cancelable "^0.3.0"5630 p-timeout "^1.1.1"5631 safe-buffer "^5.0.1"5632 timed-out "^4.0.0"5633 url-parse-lax "^1.0.0"5634 url-to-options "^1.0.1"56355636graceful-fs@^4.1.15, graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.1.9, graceful-fs@^4.2.0, graceful-fs@^4.2.4:5637 version "4.2.6"5638 resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.6.tgz#ff040b2b0853b23c3d31027523706f1885d76bee"5639 integrity sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ==56405641graphviz@0.0.9:5642 version "0.0.9"5643 resolved "https://registry.yarnpkg.com/graphviz/-/graphviz-0.0.9.tgz#0bbf1df588c6a92259282da35323622528c4bbc4"5644 integrity sha512-SmoY2pOtcikmMCqCSy2NO1YsRfu9OO0wpTlOYW++giGjfX1a6gax/m1Fo8IdUd0/3H15cTOfR1SMKwohj4LKsg==5645 dependencies:5646 temp "~0.4.0"56475648growl@1.10.5:5649 version "1.10.5"5650 resolved "https://registry.yarnpkg.com/growl/-/growl-1.10.5.tgz#f2735dc2283674fa67478b10181059355c369e5e"5651 integrity sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==56525653handlebars@^4.7.7:5654 version "4.7.7"5655 resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.7.7.tgz#9ce33416aad02dbd6c8fafa8240d5d98004945a1"5656 integrity sha512-aAcXm5OAfE/8IXkcZvCepKU3VzW1/39Fb5ZuqMtgI/hT8X2YgoMvBY5dLhq/cpOvw7Lk1nK/UF71aLG/ZnVYRA==5657 dependencies:5658 minimist "^1.2.5"5659 neo-async "^2.6.0"5660 source-map "^0.6.1"5661 wordwrap "^1.0.0"5662 optionalDependencies:5663 uglify-js "^3.1.4"56645665har-schema@^2.0.0:5666 version "2.0.0"5667 resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-2.0.0.tgz#a94c2224ebcac04782a0d9035521f24735b7ec92"5668 integrity sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=56695670har-validator@~5.1.3:5671 version "5.1.5"5672 resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-5.1.5.tgz#1f0803b9f8cb20c0fa13822df1ecddb36bde1efd"5673 integrity sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==5674 dependencies:5675 ajv "^6.12.3"5676 har-schema "^2.0.0"56775678has-bigints@^1.0.1:5679 version "1.0.1"5680 resolved "https://registry.yarnpkg.com/has-bigints/-/has-bigints-1.0.1.tgz#64fe6acb020673e3b78db035a5af69aa9d07b113"5681 integrity sha512-LSBS2LjbNBTf6287JEbEzvJgftkF5qFkmCo9hDRpAzKhUOlJ+hx8dd4USs00SgsUNwc4617J9ki5YtEClM2ffA==56825683has-flag@^3.0.0:5684 version "3.0.0"5685 resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd"5686 integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0=56875688has-flag@^4.0.0:5689 version "4.0.0"5690 resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b"5691 integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==56925693has-symbol-support-x@^1.4.1:5694 version "1.4.2"5695 resolved "https://registry.yarnpkg.com/has-symbol-support-x/-/has-symbol-support-x-1.4.2.tgz#1409f98bc00247da45da67cee0a36f282ff26455"5696 integrity sha512-3ToOva++HaW+eCpgqZrCfN51IPB+7bJNVT6CUATzueB5Heb8o6Nam0V3HG5dlDvZU1Gn5QLcbahiKw/XVk5JJw==56975698has-symbols@^1.0.1, has-symbols@^1.0.2:5699 version "1.0.2"5700 resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.2.tgz#165d3070c00309752a1236a479331e3ac56f1423"5701 integrity sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==57025703has-to-string-tag-x@^1.2.0:5704 version "1.4.1"5705 resolved "https://registry.yarnpkg.com/has-to-string-tag-x/-/has-to-string-tag-x-1.4.1.tgz#a045ab383d7b4b2012a00148ab0aa5f290044d4d"5706 integrity sha512-vdbKfmw+3LoOYVr+mtxHaX5a96+0f3DljYd8JOqvOLsf5mw2Otda2qCDT9qRqLAhrjyQ0h7ual5nOiASpsGNFw==5707 dependencies:5708 has-symbol-support-x "^1.4.1"57095710has-tostringtag@^1.0.0:5711 version "1.0.0"5712 resolved "https://registry.yarnpkg.com/has-tostringtag/-/has-tostringtag-1.0.0.tgz#7e133818a7d394734f941e73c3d3f9291e658b25"5713 integrity sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==5714 dependencies:5715 has-symbols "^1.0.2"57165717has-unicode@^2.0.1:5718 version "2.0.1"5719 resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9"5720 integrity sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=57215722has-yarn@^2.1.0:5723 version "2.1.0"5724 resolved "https://registry.yarnpkg.com/has-yarn/-/has-yarn-2.1.0.tgz#137e11354a7b5bf11aa5cb649cf0c6f3ff2b2e77"5725 integrity sha512-UqBRqi4ju7T+TqGNdqAO0PaSVGsDGJUBQvk9eUWNGRY1CFGDzYhLWoM7JQEemnlvVcv/YEmc2wNW8BC24EnUsw==57265727has@^1.0.3:5728 version "1.0.3"5729 resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796"5730 integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==5731 dependencies:5732 function-bind "^1.1.1"57335734hash-base@^3.0.0:5735 version "3.1.0"5736 resolved "https://registry.yarnpkg.com/hash-base/-/hash-base-3.1.0.tgz#55c381d9e06e1d2997a883b4a3fddfe7f0d3af33"5737 integrity sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==5738 dependencies:5739 inherits "^2.0.4"5740 readable-stream "^3.6.0"5741 safe-buffer "^5.2.0"57425743hash-sum@^1.0.2:5744 version "1.0.2"5745 resolved "https://registry.yarnpkg.com/hash-sum/-/hash-sum-1.0.2.tgz#33b40777754c6432573c120cc3808bbd10d47f04"5746 integrity sha1-M7QHd3VMZDJXPBIMw4CLvRDUfwQ=57475748hash.js@1.1.7, hash.js@^1.0.0, hash.js@^1.0.3, hash.js@^1.1.7:5749 version "1.1.7"5750 resolved "https://registry.yarnpkg.com/hash.js/-/hash.js-1.1.7.tgz#0babca538e8d4ee4a0f8988d68866537a003cf42"5751 integrity sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==5752 dependencies:5753 inherits "^2.0.3"5754 minimalistic-assert "^1.0.1"57555756he@1.2.0:5757 version "1.2.0"5758 resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f"5759 integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==57605761hmac-drbg@^1.0.1:5762 version "1.0.1"5763 resolved "https://registry.yarnpkg.com/hmac-drbg/-/hmac-drbg-1.0.1.tgz#d2745701025a6c775a6c545793ed502fc0c649a1"5764 integrity sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=5765 dependencies:5766 hash.js "^1.0.3"5767 minimalistic-assert "^1.0.0"5768 minimalistic-crypto-utils "^1.0.1"57695770html-encoding-sniffer@^2.0.1:5771 version "2.0.1"5772 resolved "https://registry.yarnpkg.com/html-encoding-sniffer/-/html-encoding-sniffer-2.0.1.tgz#42a6dc4fd33f00281176e8b23759ca4e4fa185f3"5773 integrity sha512-D5JbOMBIR/TVZkubHT+OyT2705QvogUW4IBn6nHd756OwieSF9aDYFj4dv6HHEVGYbHaLETa3WggZYWWMyy3ZQ==5774 dependencies:5775 whatwg-encoding "^1.0.5"57765777html-escaper@^2.0.0:5778 version "2.0.2"5779 resolved "https://registry.yarnpkg.com/html-escaper/-/html-escaper-2.0.2.tgz#dfd60027da36a36dfcbe236262c00a5822681453"5780 integrity sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==57815782http-cache-semantics@^4.0.0:5783 version "4.1.0"5784 resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz#49e91c5cbf36c9b94bcfcd71c23d5249ec74e390"5785 integrity sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==57865787http-errors@1.7.2:5788 version "1.7.2"5789 resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.7.2.tgz#4f5029cf13239f31036e5b2e55292bcfbcc85c8f"5790 integrity sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==5791 dependencies:5792 depd "~1.1.2"5793 inherits "2.0.3"5794 setprototypeof "1.1.1"5795 statuses ">= 1.5.0 < 2"5796 toidentifier "1.0.0"57975798http-errors@~1.7.2:5799 version "1.7.3"5800 resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.7.3.tgz#6c619e4f9c60308c38519498c14fbb10aacebb06"5801 integrity sha512-ZTTX0MWrsQ2ZAhA1cejAwDLycFsd7I7nVtnkT3Ol0aqodaKW+0CTZDQ1uBv5whptCnc8e8HeRRJxRs0kmm/Qfw==5802 dependencies:5803 depd "~1.1.2"5804 inherits "2.0.4"5805 setprototypeof "1.1.1"5806 statuses ">= 1.5.0 < 2"5807 toidentifier "1.0.0"58085809http-https@^1.0.0:5810 version "1.0.0"5811 resolved "https://registry.yarnpkg.com/http-https/-/http-https-1.0.0.tgz#2f908dd5f1db4068c058cd6e6d4ce392c913389b"5812 integrity sha1-L5CN1fHbQGjAWM1ubUzjkskTOJs=58135814http-proxy-agent@^4.0.1:5815 version "4.0.1"5816 resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz#8a8c8ef7f5932ccf953c296ca8291b95aa74aa3a"5817 integrity sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==5818 dependencies:5819 "@tootallnate/once" "1"5820 agent-base "6"5821 debug "4"58225823http-signature@~1.2.0:5824 version "1.2.0"5825 resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.2.0.tgz#9aecd925114772f3d95b65a60abb8f7c18fbace1"5826 integrity sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=5827 dependencies:5828 assert-plus "^1.0.0"5829 jsprim "^1.2.2"5830 sshpk "^1.7.0"58315832https-proxy-agent@^5.0.0:5833 version "5.0.0"5834 resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz#e2a90542abb68a762e0a0850f6c9edadfd8506b2"5835 integrity sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA==5836 dependencies:5837 agent-base "6"5838 debug "4"58395840human-signals@^2.1.0:5841 version "2.1.0"5842 resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-2.1.0.tgz#dc91fcba42e4d06e4abaed33b3e7a3c02f514ea0"5843 integrity sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==58445845iconv-lite@0.4.24, iconv-lite@^0.4.24:5846 version "0.4.24"5847 resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b"5848 integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==5849 dependencies:5850 safer-buffer ">= 2.1.2 < 3"58515852idna-uts46-hx@^2.3.1:5853 version "2.3.1"5854 resolved "https://registry.yarnpkg.com/idna-uts46-hx/-/idna-uts46-hx-2.3.1.tgz#a1dc5c4df37eee522bf66d969cc980e00e8711f9"5855 integrity sha512-PWoF9Keq6laYdIRwwCdhTPl60xRqAloYNMQLiyUnG42VjT53oW07BXIRM+NK7eQjzXjAk2gUvX9caRxlnF9TAA==5856 dependencies:5857 punycode "2.1.0"58585859ieee754@^1.1.13:5860 version "1.2.1"5861 resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352"5862 integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==58635864ignore@^4.0.6:5865 version "4.0.6"5866 resolved "https://registry.yarnpkg.com/ignore/-/ignore-4.0.6.tgz#750e3db5862087b4737ebac8207ffd1ef27b25fc"5867 integrity sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==58685869ignore@^5.1.1, ignore@^5.1.4, ignore@^5.1.8:5870 version "5.1.8"5871 resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.1.8.tgz#f150a8b50a34289b33e22f5889abd4d8016f0e57"5872 integrity sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==58735874import-fresh@^3.0.0, import-fresh@^3.2.1:5875 version "3.3.0"5876 resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b"5877 integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==5878 dependencies:5879 parent-module "^1.0.0"5880 resolve-from "^4.0.0"58815882import-lazy@^2.1.0:5883 version "2.1.0"5884 resolved "https://registry.yarnpkg.com/import-lazy/-/import-lazy-2.1.0.tgz#05698e3d45c88e8d7e9d92cb0584e77f096f3e43"5885 integrity sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM=58865887import-local@^3.0.2:5888 version "3.0.2"5889 resolved "https://registry.yarnpkg.com/import-local/-/import-local-3.0.2.tgz#a8cfd0431d1de4a2199703d003e3e62364fa6db6"5890 integrity sha512-vjL3+w0oulAVZ0hBHnxa/Nm5TAurf9YLQJDhqRZyqb+VKGOB6LU8t9H1Nr5CIo16vh9XfJTOoHwU0B71S557gA==5891 dependencies:5892 pkg-dir "^4.2.0"5893 resolve-cwd "^3.0.0"58945895imurmurhash@^0.1.4:5896 version "0.1.4"5897 resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea"5898 integrity sha1-khi5srkoojixPcT7a21XbyMUU+o=58995900indexes-of@^1.0.1:5901 version "1.0.1"5902 resolved "https://registry.yarnpkg.com/indexes-of/-/indexes-of-1.0.1.tgz#f30f716c8e2bd346c7b67d3df3915566a7c05607"5903 integrity sha1-8w9xbI4r00bHtn0985FVZqfAVgc=59045905inflight@^1.0.4:5906 version "1.0.6"5907 resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9"5908 integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=5909 dependencies:5910 once "^1.3.0"5911 wrappy "1"59125913inherits@2, inherits@2.0.4, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.3:5914 version "2.0.4"5915 resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c"5916 integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==59175918inherits@2.0.3:5919 version "2.0.3"5920 resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de"5921 integrity sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=59225923ini@2.0.0:5924 version "2.0.0"5925 resolved "https://registry.yarnpkg.com/ini/-/ini-2.0.0.tgz#e5fd556ecdd5726be978fa1001862eacb0a94bc5"5926 integrity sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA==59275928ini@~1.3.0:5929 version "1.3.8"5930 resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c"5931 integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==59325933inquirer@^8.0.0:5934 version "8.1.1"5935 resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-8.1.1.tgz#7c53d94c6d03011c7bb2a947f0dca3b98246c26a"5936 integrity sha512-hUDjc3vBkh/uk1gPfMAD/7Z188Q8cvTGl0nxwaCdwSbzFh6ZKkZh+s2ozVxbE5G9ZNRyeY0+lgbAIOUFsFf98w==5937 dependencies:5938 ansi-escapes "^4.2.1"5939 chalk "^4.1.1"5940 cli-cursor "^3.1.0"5941 cli-width "^3.0.0"5942 external-editor "^3.0.3"5943 figures "^3.0.0"5944 lodash "^4.17.21"5945 mute-stream "0.0.8"5946 ora "^5.3.0"5947 run-async "^2.4.0"5948 rxjs "^6.6.6"5949 string-width "^4.1.0"5950 strip-ansi "^6.0.0"5951 through "^2.3.6"59525953internal-slot@^1.0.3:5954 version "1.0.3"5955 resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.3.tgz#7347e307deeea2faac2ac6205d4bc7d34967f59c"5956 integrity sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==5957 dependencies:5958 get-intrinsic "^1.1.0"5959 has "^1.0.3"5960 side-channel "^1.0.4"59615962interpret@^1.0.0:5963 version "1.4.0"5964 resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.4.0.tgz#665ab8bc4da27a774a40584e812e3e0fa45b1a1e"5965 integrity sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==59665967ip-regex@^4.3.0:5968 version "4.3.0"5969 resolved "https://registry.yarnpkg.com/ip-regex/-/ip-regex-4.3.0.tgz#687275ab0f57fa76978ff8f4dddc8a23d5990db5"5970 integrity sha512-B9ZWJxHHOHUhUjCPrMpLD4xEq35bUTClHM1S6CBU5ixQnkZmwipwgc96vAd7AAGM9TGHvJR+Uss+/Ak6UphK+Q==59715972ipaddr.js@1.9.1:5973 version "1.9.1"5974 resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.9.1.tgz#bff38543eeb8984825079ff3a2a8e6cbd46781b3"5975 integrity sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==59765977is-arguments@^1.0.4:5978 version "1.1.0"5979 resolved "https://registry.yarnpkg.com/is-arguments/-/is-arguments-1.1.0.tgz#62353031dfbee07ceb34656a6bde59efecae8dd9"5980 integrity sha512-1Ij4lOMPl/xB5kBDn7I+b2ttPMKa8szhEIrXDuXQD/oe3HJLTLhqhgGspwgyGd6MOywBUqVvYicF72lkgDnIHg==5981 dependencies:5982 call-bind "^1.0.0"59835984is-arrayish@^0.2.1:5985 version "0.2.1"5986 resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d"5987 integrity sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=59885989is-bigint@^1.0.1:5990 version "1.0.2"5991 resolved "https://registry.yarnpkg.com/is-bigint/-/is-bigint-1.0.2.tgz#ffb381442503235ad245ea89e45b3dbff040ee5a"5992 integrity sha512-0JV5+SOCQkIdzjBK9buARcV804Ddu7A0Qet6sHi3FimE9ne6m4BGQZfRn+NZiXbBk4F4XmHfDZIipLj9pX8dSA==59935994is-binary-path@~2.1.0:5995 version "2.1.0"5996 resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09"5997 integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==5998 dependencies:5999 binary-extensions "^2.0.0"60006001is-boolean-object@^1.1.0:6002 version "1.1.1"6003 resolved "https://registry.yarnpkg.com/is-boolean-object/-/is-boolean-object-1.1.1.tgz#3c0878f035cb821228d350d2e1e36719716a3de8"6004 integrity sha512-bXdQWkECBUIAcCkeH1unwJLIpZYaa5VvuygSyS/c2lf719mTKZDU5UdDRlpd01UjADgmW8RfqaP+mRaVPdr/Ng==6005 dependencies:6006 call-bind "^1.0.2"60076008is-callable@^1.1.4, is-callable@^1.2.3:6009 version "1.2.3"6010 resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.3.tgz#8b1e0500b73a1d76c70487636f368e519de8db8e"6011 integrity sha512-J1DcMe8UYTBSrKezuIUTUwjXsho29693unXM2YhJUTR2txK/eG47bvNa/wipPFmZFgr/N6f1GA66dv0mEyTIyQ==60126013is-callable@^1.2.4:6014 version "1.2.4"6015 resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.4.tgz#47301d58dd0259407865547853df6d61fe471945"6016 integrity sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w==60176018is-ci@^2.0.0:6019 version "2.0.0"6020 resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-2.0.0.tgz#6bc6334181810e04b5c22b3d589fdca55026404c"6021 integrity sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==6022 dependencies:6023 ci-info "^2.0.0"60246025is-core-module@^2.2.0:6026 version "2.4.0"6027 resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.4.0.tgz#8e9fc8e15027b011418026e98f0e6f4d86305cc1"6028 integrity sha512-6A2fkfq1rfeQZjxrZJGerpLCTHRNEBiSgnu0+obeJpEPZRUooHgsizvzv0ZjJwOz3iWIHdJtVWJ/tmPr3D21/A==6029 dependencies:6030 has "^1.0.3"60316032is-core-module@^2.7.0:6033 version "2.8.0"6034 resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.8.0.tgz#0321336c3d0925e497fd97f5d95cb114a5ccd548"6035 integrity sha512-vd15qHsaqrRL7dtH6QNuy0ndJmRDrS9HAM1CAiSifNUFv4x1a0CCVsj18hJ1mShxIG6T2i1sO78MkP56r0nYRw==6036 dependencies:6037 has "^1.0.3"60386039is-date-object@^1.0.1:6040 version "1.0.4"6041 resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.4.tgz#550cfcc03afada05eea3dd30981c7b09551f73e5"6042 integrity sha512-/b4ZVsG7Z5XVtIxs/h9W8nvfLgSAyKYdtGWQLbqy6jA1icmgjf8WCoTKgeS4wy5tYaPePouzFMANbnj94c2Z+A==60436044is-extglob@^2.1.1:6045 version "2.1.1"6046 resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2"6047 integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=60486049is-fullwidth-code-point@^2.0.0:6050 version "2.0.0"6051 resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f"6052 integrity sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=60536054is-fullwidth-code-point@^3.0.0:6055 version "3.0.0"6056 resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d"6057 integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==60586059is-function@^1.0.1:6060 version "1.0.2"6061 resolved "https://registry.yarnpkg.com/is-function/-/is-function-1.0.2.tgz#4f097f30abf6efadac9833b17ca5dc03f8144e08"6062 integrity sha512-lw7DUp0aWXYg+CBCN+JKkcE0Q2RayZnSvnZBlwgxHBQhqt5pZNVy4Ri7H9GmmXkdu7LUthszM+Tor1u/2iBcpQ==60636064is-generator-fn@^2.0.0:6065 version "2.1.0"6066 resolved "https://registry.yarnpkg.com/is-generator-fn/-/is-generator-fn-2.1.0.tgz#7d140adc389aaf3011a8f2a2a4cfa6faadffb118"6067 integrity sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==60686069is-generator-function@^1.0.7:6070 version "1.0.9"6071 resolved "https://registry.yarnpkg.com/is-generator-function/-/is-generator-function-1.0.9.tgz#e5f82c2323673e7fcad3d12858c83c4039f6399c"6072 integrity sha512-ZJ34p1uvIfptHCN7sFTjGibB9/oBg17sHqzDLfuwhvmN/qLVvIQXRQ8licZQ35WJ8KuEQt/etnnzQFI9C9Ue/A==60736074is-glob@^4.0.0, is-glob@^4.0.1, is-glob@~4.0.1:6075 version "4.0.1"6076 resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.1.tgz#7567dbe9f2f5e2467bc77ab83c4a29482407a5dc"6077 integrity sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==6078 dependencies:6079 is-extglob "^2.1.1"60806081is-glob@^4.0.3:6082 version "4.0.3"6083 resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084"6084 integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==6085 dependencies:6086 is-extglob "^2.1.1"60876088is-hex-prefixed@1.0.0:6089 version "1.0.0"6090 resolved "https://registry.yarnpkg.com/is-hex-prefixed/-/is-hex-prefixed-1.0.0.tgz#7d8d37e6ad77e5d127148913c573e082d777f554"6091 integrity sha1-fY035q135dEnFIkTxXPggtd39VQ=60926093is-installed-globally@^0.4.0:6094 version "0.4.0"6095 resolved "https://registry.yarnpkg.com/is-installed-globally/-/is-installed-globally-0.4.0.tgz#9a0fd407949c30f86eb6959ef1b7994ed0b7b520"6096 integrity sha512-iwGqO3J21aaSkC7jWnHP/difazwS7SFeIqxv6wEtLU8Y5KlzFTjyqcSIT0d8s4+dDhKytsk9PJZ2BkS5eZwQRQ==6097 dependencies:6098 global-dirs "^3.0.0"6099 is-path-inside "^3.0.2"61006101is-interactive@^1.0.0:6102 version "1.0.0"6103 resolved "https://registry.yarnpkg.com/is-interactive/-/is-interactive-1.0.0.tgz#cea6e6ae5c870a7b0a0004070b7b587e0252912e"6104 integrity sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==61056106is-module@^1.0.0:6107 version "1.0.0"6108 resolved "https://registry.yarnpkg.com/is-module/-/is-module-1.0.0.tgz#3258fb69f78c14d5b815d664336b4cffb6441591"6109 integrity sha1-Mlj7afeMFNW4FdZkM2tM/7ZEFZE=61106111is-negative-zero@^2.0.1:6112 version "2.0.1"6113 resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.1.tgz#3de746c18dda2319241a53675908d8f766f11c24"6114 integrity sha512-2z6JzQvZRa9A2Y7xC6dQQm4FSTSTNWjKIYYTt4246eMTJmIo0Q+ZyOsU66X8lxK1AbB92dFeglPLrhwpeRKO6w==61156116is-npm@^5.0.0:6117 version "5.0.0"6118 resolved "https://registry.yarnpkg.com/is-npm/-/is-npm-5.0.0.tgz#43e8d65cc56e1b67f8d47262cf667099193f45a8"6119 integrity sha512-WW/rQLOazUq+ST/bCAVBp/2oMERWLsR7OrKyt052dNDk4DHcDE0/7QSXITlmi+VBcV13DfIbysG3tZJm5RfdBA==61206121is-number-object@^1.0.4:6122 version "1.0.5"6123 resolved "https://registry.yarnpkg.com/is-number-object/-/is-number-object-1.0.5.tgz#6edfaeed7950cff19afedce9fbfca9ee6dd289eb"6124 integrity sha512-RU0lI/n95pMoUKu9v1BZP5MBcZuNSVJkMkAG2dJqC4z2GlkGUNeH68SuHuBKBD/XFe+LHZ+f9BKkLET60Niedw==61256126is-number@^7.0.0:6127 version "7.0.0"6128 resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b"6129 integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==61306131is-obj@^1.0.1:6132 version "1.0.1"6133 resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-1.0.1.tgz#3e4729ac1f5fde025cd7d83a896dab9f4f67db0f"6134 integrity sha1-PkcprB9f3gJc19g6iW2rn09n2w8=61356136is-obj@^2.0.0:6137 version "2.0.0"6138 resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-2.0.0.tgz#473fb05d973705e3fd9620545018ca8e22ef4982"6139 integrity sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==61406141is-object@^1.0.1:6142 version "1.0.2"6143 resolved "https://registry.yarnpkg.com/is-object/-/is-object-1.0.2.tgz#a56552e1c665c9e950b4a025461da87e72f86fcf"6144 integrity sha512-2rRIahhZr2UWb45fIOuvZGpFtz0TyOZLf32KxBbSoUCeZR495zCKlWUKKUByk3geS2eAs7ZAABt0Y/Rx0GiQGA==61456146is-path-inside@^3.0.2:6147 version "3.0.3"6148 resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-3.0.3.tgz#d231362e53a07ff2b0e0ea7fed049161ffd16283"6149 integrity sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==61506151is-plain-obj@^1.1.0:6152 version "1.1.0"6153 resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-1.1.0.tgz#71a50c8429dfca773c92a390a4a03b39fcd51d3e"6154 integrity sha1-caUMhCnfync8kqOQpKA7OfzVHT4=61556156is-plain-obj@^2.0.0, is-plain-obj@^2.1.0:6157 version "2.1.0"6158 resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-2.1.0.tgz#45e42e37fccf1f40da8e5f76ee21515840c09287"6159 integrity sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==61606161is-plain-object@^2.0.4:6162 version "2.0.4"6163 resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677"6164 integrity sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==6165 dependencies:6166 isobject "^3.0.1"61676168is-plain-object@^5.0.0:6169 version "5.0.0"6170 resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-5.0.0.tgz#4427f50ab3429e9025ea7d52e9043a9ef4159344"6171 integrity sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==61726173is-potential-custom-element-name@^1.0.1:6174 version "1.0.1"6175 resolved "https://registry.yarnpkg.com/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz#171ed6f19e3ac554394edf78caa05784a45bebb5"6176 integrity sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==61776178is-reference@^1.2.1:6179 version "1.2.1"6180 resolved "https://registry.yarnpkg.com/is-reference/-/is-reference-1.2.1.tgz#8b2dac0b371f4bc994fdeaba9eb542d03002d0b7"6181 integrity sha512-U82MsXXiFIrjCK4otLT+o2NA2Cd2g5MLoOVXUZjIOhLurrRxpEXzI8O0KZHr3IjLvlAH1kTPYSuqer5T9ZVBKQ==6182 dependencies:6183 "@types/estree" "*"61846185is-regex@^1.1.3:6186 version "1.1.3"6187 resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.3.tgz#d029f9aff6448b93ebbe3f33dac71511fdcbef9f"6188 integrity sha512-qSVXFz28HM7y+IWX6vLCsexdlvzT1PJNFSBuaQLQ5o0IEw8UDYW6/2+eCMVyIsbM8CNLX2a/QWmSpyxYEHY7CQ==6189 dependencies:6190 call-bind "^1.0.2"6191 has-symbols "^1.0.2"61926193is-regex@^1.1.4:6194 version "1.1.4"6195 resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.4.tgz#eef5663cd59fa4c0ae339505323df6854bb15958"6196 integrity sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==6197 dependencies:6198 call-bind "^1.0.2"6199 has-tostringtag "^1.0.0"62006201is-regexp@^1.0.0:6202 version "1.0.0"6203 resolved "https://registry.yarnpkg.com/is-regexp/-/is-regexp-1.0.0.tgz#fd2d883545c46bac5a633e7b9a09e87fa2cb5069"6204 integrity sha1-/S2INUXEa6xaYz57mgnof6LLUGk=62056206is-relative-path@^1.0.2:6207 version "1.0.2"6208 resolved "https://registry.yarnpkg.com/is-relative-path/-/is-relative-path-1.0.2.tgz#091b46a0d67c1ed0fe85f1f8cfdde006bb251d46"6209 integrity sha1-CRtGoNZ8HtD+hfH4z93gBrslHUY=62106211is-retry-allowed@^1.0.0:6212 version "1.2.0"6213 resolved "https://registry.yarnpkg.com/is-retry-allowed/-/is-retry-allowed-1.2.0.tgz#d778488bd0a4666a3be8a1482b9f2baafedea8b4"6214 integrity sha512-RUbUeKwvm3XG2VYamhJL1xFktgjvPzL0Hq8C+6yrWIswDy3BIXGqCxhxkc30N9jqK311gVU137K8Ei55/zVJRg==62156216is-shared-array-buffer@^1.0.1:6217 version "1.0.1"6218 resolved "https://registry.yarnpkg.com/is-shared-array-buffer/-/is-shared-array-buffer-1.0.1.tgz#97b0c85fbdacb59c9c446fe653b82cf2b5b7cfe6"6219 integrity sha512-IU0NmyknYZN0rChcKhRO1X8LYz5Isj/Fsqh8NJOSf+N/hCOTwy29F32Ik7a+QszE63IdvmwdTPDd6cZ5pg4cwA==62206221is-stream@^1.0.0:6222 version "1.1.0"6223 resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44"6224 integrity sha1-EtSj3U5o4Lec6428hBc66A2RykQ=62256226is-stream@^2.0.0:6227 version "2.0.0"6228 resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.0.tgz#bde9c32680d6fae04129d6ac9d921ce7815f78e3"6229 integrity sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw==62306231is-string@^1.0.5, is-string@^1.0.6:6232 version "1.0.6"6233 resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.0.6.tgz#3fe5d5992fb0d93404f32584d4b0179a71b54a5f"6234 integrity sha512-2gdzbKUuqtQ3lYNrUTQYoClPhm7oQu4UdpSZMp1/DGgkHBT8E2Z1l0yMdb6D4zNAxwDiMv8MdulKROJGNl0Q0w==62356236is-string@^1.0.7:6237 version "1.0.7"6238 resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.0.7.tgz#0dd12bf2006f255bb58f695110eff7491eebc0fd"6239 integrity sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==6240 dependencies:6241 has-tostringtag "^1.0.0"62426243is-symbol@^1.0.2, is-symbol@^1.0.3:6244 version "1.0.4"6245 resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.4.tgz#a6dac93b635b063ca6872236de88910a57af139c"6246 integrity sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==6247 dependencies:6248 has-symbols "^1.0.2"62496250is-typed-array@^1.1.3:6251 version "1.1.5"6252 resolved "https://registry.yarnpkg.com/is-typed-array/-/is-typed-array-1.1.5.tgz#f32e6e096455e329eb7b423862456aa213f0eb4e"6253 integrity sha512-S+GRDgJlR3PyEbsX/Fobd9cqpZBuvUS+8asRqYDMLCb2qMzt1oz5m5oxQCxOgUDxiWsOVNi4yaF+/uvdlHlYug==6254 dependencies:6255 available-typed-arrays "^1.0.2"6256 call-bind "^1.0.2"6257 es-abstract "^1.18.0-next.2"6258 foreach "^2.0.5"6259 has-symbols "^1.0.1"62606261is-typedarray@^1.0.0, is-typedarray@~1.0.0:6262 version "1.0.0"6263 resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a"6264 integrity sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=62656266is-unicode-supported@^0.1.0:6267 version "0.1.0"6268 resolved "https://registry.yarnpkg.com/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz#3f26c76a809593b52bfa2ecb5710ed2779b522a7"6269 integrity sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==62706271is-url-superb@^4.0.0:6272 version "4.0.0"6273 resolved "https://registry.yarnpkg.com/is-url-superb/-/is-url-superb-4.0.0.tgz#b54d1d2499bb16792748ac967aa3ecb41a33a8c2"6274 integrity sha512-GI+WjezhPPcbM+tqE9LnmsY5qqjwHzTvjJ36wxYX5ujNXefSUJ/T17r5bqDV8yLhcgB59KTPNOc9O9cmHTPWsA==62756276is-url@^1.1.0, is-url@^1.2.4:6277 version "1.2.4"6278 resolved "https://registry.yarnpkg.com/is-url/-/is-url-1.2.4.tgz#04a4df46d28c4cff3d73d01ff06abeb318a1aa52"6279 integrity sha512-ITvGim8FhRiYe4IQ5uHSkj7pVaPDrCTkNd3yq3cV7iZAcJdHTUMPMEHcqSOy9xZ9qFenQCvi+2wjH9a1nXqHww==62806281is-weakref@^1.0.1:6282 version "1.0.1"6283 resolved "https://registry.yarnpkg.com/is-weakref/-/is-weakref-1.0.1.tgz#842dba4ec17fa9ac9850df2d6efbc1737274f2a2"6284 integrity sha512-b2jKc2pQZjaeFYWEf7ScFj+Be1I+PXmlu572Q8coTXZ+LD/QQZ7ShPMst8h16riVgyXTQwUsFEl74mDvc/3MHQ==6285 dependencies:6286 call-bind "^1.0.0"62876288is-yarn-global@^0.3.0:6289 version "0.3.0"6290 resolved "https://registry.yarnpkg.com/is-yarn-global/-/is-yarn-global-0.3.0.tgz#d502d3382590ea3004893746754c89139973e232"6291 integrity sha512-VjSeb/lHmkoyd8ryPVIKvOCn4D1koMqY+vqyjjUfc3xyKtP4dYOxM44sZrnqQSzSds3xyOrUTLTC9LVCVgLngw==62926293isarray@~1.0.0:6294 version "1.0.0"6295 resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11"6296 integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=62976298isexe@^2.0.0:6299 version "2.0.0"6300 resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10"6301 integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=63026303isobject@^3.0.1:6304 version "3.0.1"6305 resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df"6306 integrity sha1-TkMekrEalzFjaqH5yNHMvP2reN8=63076308isstream@~0.1.2:6309 version "0.1.2"6310 resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a"6311 integrity sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=63126313istanbul-lib-coverage@^3.0.0:6314 version "3.0.0"6315 resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-3.0.0.tgz#f5944a37c70b550b02a78a5c3b2055b280cec8ec"6316 integrity sha512-UiUIqxMgRDET6eR+o5HbfRYP1l0hqkWOs7vNxC/mggutCMUIhWMm8gAHb8tHlyfD3/l6rlgNA5cKdDzEAf6hEg==63176318istanbul-lib-instrument@^4.0.0, istanbul-lib-instrument@^4.0.3:6319 version "4.0.3"6320 resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-4.0.3.tgz#873c6fff897450118222774696a3f28902d77c1d"6321 integrity sha512-BXgQl9kf4WTCPCCpmFGoJkz/+uhvm7h7PFKUYxh7qarQd3ER33vHG//qaE8eN25l07YqZPpHXU9I09l/RD5aGQ==6322 dependencies:6323 "@babel/core" "^7.7.5"6324 "@istanbuljs/schema" "^0.1.2"6325 istanbul-lib-coverage "^3.0.0"6326 semver "^6.3.0"63276328istanbul-lib-report@^3.0.0:6329 version "3.0.0"6330 resolved "https://registry.yarnpkg.com/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz#7518fe52ea44de372f460a76b5ecda9ffb73d8a6"6331 integrity sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==6332 dependencies:6333 istanbul-lib-coverage "^3.0.0"6334 make-dir "^3.0.0"6335 supports-color "^7.1.0"63366337istanbul-lib-source-maps@^4.0.0:6338 version "4.0.0"6339 resolved "https://registry.yarnpkg.com/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.0.tgz#75743ce6d96bb86dc7ee4352cf6366a23f0b1ad9"6340 integrity sha512-c16LpFRkR8vQXyHZ5nLpY35JZtzj1PQY1iZmesUbf1FZHbIupcWfjgOXBY9YHkLEQ6puz1u4Dgj6qmU/DisrZg==6341 dependencies:6342 debug "^4.1.1"6343 istanbul-lib-coverage "^3.0.0"6344 source-map "^0.6.1"63456346istanbul-reports@^3.0.2:6347 version "3.0.2"6348 resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-3.0.2.tgz#d593210e5000683750cb09fc0644e4b6e27fd53b"6349 integrity sha512-9tZvz7AiR3PEDNGiV9vIouQ/EAcqMXFmkcA1CDFTwOB98OZVDL0PH9glHotf5Ugp6GCOTypfzGWI/OqjWNCRUw==6350 dependencies:6351 html-escaper "^2.0.0"6352 istanbul-lib-report "^3.0.0"63536354isurl@^1.0.0-alpha5:6355 version "1.0.0"6356 resolved "https://registry.yarnpkg.com/isurl/-/isurl-1.0.0.tgz#b27f4f49f3cdaa3ea44a0a5b7f3462e6edc39d67"6357 integrity sha512-1P/yWsxPlDtn7QeRD+ULKQPaIaN6yF368GZ2vDfv0AL0NwpStafjWCDDdn0k8wgFMWpVAqG7oJhxHnlud42i9w==6358 dependencies:6359 has-to-string-tag-x "^1.2.0"6360 is-object "^1.0.1"63616362jest-changed-files@^27.3.0:6363 version "27.3.0"6364 resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-27.3.0.tgz#22a02cc2b34583fc66e443171dc271c0529d263c"6365 integrity sha512-9DJs9garMHv4RhylUMZgbdCJ3+jHSkpL9aaVKp13xtXAD80qLTLrqcDZL1PHA9dYA0bCI86Nv2BhkLpLhrBcPg==6366 dependencies:6367 "@jest/types" "^27.2.5"6368 execa "^5.0.0"6369 throat "^6.0.1"63706371jest-circus@^27.3.1:6372 version "27.3.1"6373 resolved "https://registry.yarnpkg.com/jest-circus/-/jest-circus-27.3.1.tgz#1679e74387cbbf0c6a8b42de963250a6469e0797"6374 integrity sha512-v1dsM9II6gvXokgqq6Yh2jHCpfg7ZqV4jWY66u7npz24JnhP3NHxI0sKT7+ZMQ7IrOWHYAaeEllOySbDbWsiXw==6375 dependencies:6376 "@jest/environment" "^27.3.1"6377 "@jest/test-result" "^27.3.1"6378 "@jest/types" "^27.2.5"6379 "@types/node" "*"6380 chalk "^4.0.0"6381 co "^4.6.0"6382 dedent "^0.7.0"6383 expect "^27.3.1"6384 is-generator-fn "^2.0.0"6385 jest-each "^27.3.1"6386 jest-matcher-utils "^27.3.1"6387 jest-message-util "^27.3.1"6388 jest-runtime "^27.3.1"6389 jest-snapshot "^27.3.1"6390 jest-util "^27.3.1"6391 pretty-format "^27.3.1"6392 slash "^3.0.0"6393 stack-utils "^2.0.3"6394 throat "^6.0.1"63956396jest-cli@^27.3.1:6397 version "27.3.1"6398 resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-27.3.1.tgz#b576f9d146ba6643ce0a162d782b40152b6b1d16"6399 integrity sha512-WHnCqpfK+6EvT62me6WVs8NhtbjAS4/6vZJnk7/2+oOr50cwAzG4Wxt6RXX0hu6m1169ZGMlhYYUNeKBXCph/Q==6400 dependencies:6401 "@jest/core" "^27.3.1"6402 "@jest/test-result" "^27.3.1"6403 "@jest/types" "^27.2.5"6404 chalk "^4.0.0"6405 exit "^0.1.2"6406 graceful-fs "^4.2.4"6407 import-local "^3.0.2"6408 jest-config "^27.3.1"6409 jest-util "^27.3.1"6410 jest-validate "^27.3.1"6411 prompts "^2.0.1"6412 yargs "^16.2.0"64136414jest-config@^27.3.1:6415 version "27.3.1"6416 resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-27.3.1.tgz#cb3b7f6aaa8c0a7daad4f2b9573899ca7e09bbad"6417 integrity sha512-KY8xOIbIACZ/vdYCKSopL44I0xboxC751IX+DXL2+Wx6DKNycyEfV3rryC3BPm5Uq/BBqDoMrKuqLEUNJmMKKg==6418 dependencies:6419 "@babel/core" "^7.1.0"6420 "@jest/test-sequencer" "^27.3.1"6421 "@jest/types" "^27.2.5"6422 babel-jest "^27.3.1"6423 chalk "^4.0.0"6424 ci-info "^3.2.0"6425 deepmerge "^4.2.2"6426 glob "^7.1.1"6427 graceful-fs "^4.2.4"6428 jest-circus "^27.3.1"6429 jest-environment-jsdom "^27.3.1"6430 jest-environment-node "^27.3.1"6431 jest-get-type "^27.3.1"6432 jest-jasmine2 "^27.3.1"6433 jest-regex-util "^27.0.6"6434 jest-resolve "^27.3.1"6435 jest-runner "^27.3.1"6436 jest-util "^27.3.1"6437 jest-validate "^27.3.1"6438 micromatch "^4.0.4"6439 pretty-format "^27.3.1"64406441jest-diff@^27.3.1:6442 version "27.3.1"6443 resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-27.3.1.tgz#d2775fea15411f5f5aeda2a5e02c2f36440f6d55"6444 integrity sha512-PCeuAH4AWUo2O5+ksW4pL9v5xJAcIKPUPfIhZBcG1RKv/0+dvaWTQK1Nrau8d67dp65fOqbeMdoil+6PedyEPQ==6445 dependencies:6446 chalk "^4.0.0"6447 diff-sequences "^27.0.6"6448 jest-get-type "^27.3.1"6449 pretty-format "^27.3.1"64506451jest-docblock@^27.0.6:6452 version "27.0.6"6453 resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-27.0.6.tgz#cc78266acf7fe693ca462cbbda0ea4e639e4e5f3"6454 integrity sha512-Fid6dPcjwepTFraz0YxIMCi7dejjJ/KL9FBjPYhBp4Sv1Y9PdhImlKZqYU555BlN4TQKaTc+F2Av1z+anVyGkA==6455 dependencies:6456 detect-newline "^3.0.0"64576458jest-each@^27.3.1:6459 version "27.3.1"6460 resolved "https://registry.yarnpkg.com/jest-each/-/jest-each-27.3.1.tgz#14c56bb4f18dd18dc6bdd853919b5f16a17761ff"6461 integrity sha512-E4SwfzKJWYcvOYCjOxhZcxwL+AY0uFMvdCOwvzgutJiaiodFjkxQQDxHm8FQBeTqDnSmKsQWn7ldMRzTn2zJaQ==6462 dependencies:6463 "@jest/types" "^27.2.5"6464 chalk "^4.0.0"6465 jest-get-type "^27.3.1"6466 jest-util "^27.3.1"6467 pretty-format "^27.3.1"64686469jest-environment-jsdom@^27.3.1:6470 version "27.3.1"6471 resolved "https://registry.yarnpkg.com/jest-environment-jsdom/-/jest-environment-jsdom-27.3.1.tgz#63ac36d68f7a9303494df783494856222b57f73e"6472 integrity sha512-3MOy8qMzIkQlfb3W1TfrD7uZHj+xx8Olix5vMENkj5djPmRqndMaXtpnaZkxmxM+Qc3lo+yVzJjzuXbCcZjAlg==6473 dependencies:6474 "@jest/environment" "^27.3.1"6475 "@jest/fake-timers" "^27.3.1"6476 "@jest/types" "^27.2.5"6477 "@types/node" "*"6478 jest-mock "^27.3.0"6479 jest-util "^27.3.1"6480 jsdom "^16.6.0"64816482jest-environment-node@^27.3.1:6483 version "27.3.1"6484 resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-27.3.1.tgz#af7d0eed04edafb740311b303f3fe7c8c27014bb"6485 integrity sha512-T89F/FgkE8waqrTSA7/ydMkcc52uYPgZZ6q8OaZgyiZkJb5QNNCF6oPZjH9IfPFfcc9uBWh1574N0kY0pSvTXw==6486 dependencies:6487 "@jest/environment" "^27.3.1"6488 "@jest/fake-timers" "^27.3.1"6489 "@jest/types" "^27.2.5"6490 "@types/node" "*"6491 jest-mock "^27.3.0"6492 jest-util "^27.3.1"64936494jest-get-type@^27.3.1:6495 version "27.3.1"6496 resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-27.3.1.tgz#a8a2b0a12b50169773099eee60a0e6dd11423eff"6497 integrity sha512-+Ilqi8hgHSAdhlQ3s12CAVNd8H96ZkQBfYoXmArzZnOfAtVAJEiPDBirjByEblvG/4LPJmkL+nBqPO3A1YJAEg==64986499jest-haste-map@^27.3.1:6500 version "27.3.1"6501 resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-27.3.1.tgz#7656fbd64bf48bda904e759fc9d93e2c807353ee"6502 integrity sha512-lYfNZIzwPccDJZIyk9Iz5iQMM/MH56NIIcGj7AFU1YyA4ewWFBl8z+YPJuSCRML/ee2cCt2y3W4K3VXPT6Nhzg==6503 dependencies:6504 "@jest/types" "^27.2.5"6505 "@types/graceful-fs" "^4.1.2"6506 "@types/node" "*"6507 anymatch "^3.0.3"6508 fb-watchman "^2.0.0"6509 graceful-fs "^4.2.4"6510 jest-regex-util "^27.0.6"6511 jest-serializer "^27.0.6"6512 jest-util "^27.3.1"6513 jest-worker "^27.3.1"6514 micromatch "^4.0.4"6515 walker "^1.0.7"6516 optionalDependencies:6517 fsevents "^2.3.2"65186519jest-jasmine2@^27.3.1:6520 version "27.3.1"6521 resolved "https://registry.yarnpkg.com/jest-jasmine2/-/jest-jasmine2-27.3.1.tgz#df6d3d07c7dafc344feb43a0072a6f09458d32b0"6522 integrity sha512-WK11ZUetDQaC09w4/j7o4FZDUIp+4iYWH/Lik34Pv7ukL+DuXFGdnmmi7dT58J2ZYKFB5r13GyE0z3NPeyJmsg==6523 dependencies:6524 "@babel/traverse" "^7.1.0"6525 "@jest/environment" "^27.3.1"6526 "@jest/source-map" "^27.0.6"6527 "@jest/test-result" "^27.3.1"6528 "@jest/types" "^27.2.5"6529 "@types/node" "*"6530 chalk "^4.0.0"6531 co "^4.6.0"6532 expect "^27.3.1"6533 is-generator-fn "^2.0.0"6534 jest-each "^27.3.1"6535 jest-matcher-utils "^27.3.1"6536 jest-message-util "^27.3.1"6537 jest-runtime "^27.3.1"6538 jest-snapshot "^27.3.1"6539 jest-util "^27.3.1"6540 pretty-format "^27.3.1"6541 throat "^6.0.1"65426543jest-leak-detector@^27.3.1:6544 version "27.3.1"6545 resolved "https://registry.yarnpkg.com/jest-leak-detector/-/jest-leak-detector-27.3.1.tgz#7fb632c2992ef707a1e73286e1e704f9cc1772b2"6546 integrity sha512-78QstU9tXbaHzwlRlKmTpjP9k4Pvre5l0r8Spo4SbFFVy/4Abg9I6ZjHwjg2QyKEAMg020XcjP+UgLZIY50yEg==6547 dependencies:6548 jest-get-type "^27.3.1"6549 pretty-format "^27.3.1"65506551jest-matcher-utils@^27.3.1:6552 version "27.3.1"6553 resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-27.3.1.tgz#257ad61e54a6d4044e080d85dbdc4a08811e9c1c"6554 integrity sha512-hX8N7zXS4k+8bC1Aj0OWpGb7D3gIXxYvPNK1inP5xvE4ztbz3rc4AkI6jGVaerepBnfWB17FL5lWFJT3s7qo8w==6555 dependencies:6556 chalk "^4.0.0"6557 jest-diff "^27.3.1"6558 jest-get-type "^27.3.1"6559 pretty-format "^27.3.1"65606561jest-message-util@^27.3.1:6562 version "27.3.1"6563 resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-27.3.1.tgz#f7c25688ad3410ab10bcb862bcfe3152345c6436"6564 integrity sha512-bh3JEmxsTZ/9rTm0jQrPElbY2+y48Rw2t47uMfByNyUVR+OfPh4anuyKsGqsNkXk/TI4JbLRZx+7p7Hdt6q1yg==6565 dependencies:6566 "@babel/code-frame" "^7.12.13"6567 "@jest/types" "^27.2.5"6568 "@types/stack-utils" "^2.0.0"6569 chalk "^4.0.0"6570 graceful-fs "^4.2.4"6571 micromatch "^4.0.4"6572 pretty-format "^27.3.1"6573 slash "^3.0.0"6574 stack-utils "^2.0.3"65756576jest-mock@^27.3.0:6577 version "27.3.0"6578 resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-27.3.0.tgz#ddf0ec3cc3e68c8ccd489bef4d1f525571a1b867"6579 integrity sha512-ziZiLk0elZOQjD08bLkegBzv5hCABu/c8Ytx45nJKkysQwGaonvmTxwjLqEA4qGdasq9o2I8/HtdGMNnVsMTGw==6580 dependencies:6581 "@jest/types" "^27.2.5"6582 "@types/node" "*"65836584jest-pnp-resolver@^1.2.2:6585 version "1.2.2"6586 resolved "https://registry.yarnpkg.com/jest-pnp-resolver/-/jest-pnp-resolver-1.2.2.tgz#b704ac0ae028a89108a4d040b3f919dfddc8e33c"6587 integrity sha512-olV41bKSMm8BdnuMsewT4jqlZ8+3TCARAXjZGT9jcoSnrfUnRCqnMoF9XEeoWjbzObpqF9dRhHQj0Xb9QdF6/w==65886589jest-regex-util@^27.0.6:6590 version "27.0.6"6591 resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-27.0.6.tgz#02e112082935ae949ce5d13b2675db3d8c87d9c5"6592 integrity sha512-SUhPzBsGa1IKm8hx2F4NfTGGp+r7BXJ4CulsZ1k2kI+mGLG+lxGrs76veN2LF/aUdGosJBzKgXmNCw+BzFqBDQ==65936594jest-resolve-dependencies@^27.3.1:6595 version "27.3.1"6596 resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-27.3.1.tgz#85b99bdbdfa46e2c81c6228fc4c91076f624f6e2"6597 integrity sha512-X7iLzY8pCiYOnvYo2YrK3P9oSE8/3N2f4pUZMJ8IUcZnT81vlSonya1KTO9ZfKGuC+svE6FHK/XOb8SsoRUV1A==6598 dependencies:6599 "@jest/types" "^27.2.5"6600 jest-regex-util "^27.0.6"6601 jest-snapshot "^27.3.1"66026603jest-resolve@^27.3.1:6604 version "27.3.1"6605 resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-27.3.1.tgz#0e5542172a1aa0270be6f66a65888647bdd74a3e"6606 integrity sha512-Dfzt25CFSPo3Y3GCbxynRBZzxq9AdyNN+x/v2IqYx6KVT5Z6me2Z/PsSGFSv3cOSUZqJ9pHxilao/I/m9FouLw==6607 dependencies:6608 "@jest/types" "^27.2.5"6609 chalk "^4.0.0"6610 graceful-fs "^4.2.4"6611 jest-haste-map "^27.3.1"6612 jest-pnp-resolver "^1.2.2"6613 jest-util "^27.3.1"6614 jest-validate "^27.3.1"6615 resolve "^1.20.0"6616 resolve.exports "^1.1.0"6617 slash "^3.0.0"66186619jest-runner@^27.3.1:6620 version "27.3.1"6621 resolved "https://registry.yarnpkg.com/jest-runner/-/jest-runner-27.3.1.tgz#1d594dcbf3bd8600a7e839e790384559eaf96e3e"6622 integrity sha512-r4W6kBn6sPr3TBwQNmqE94mPlYVn7fLBseeJfo4E2uCTmAyDFm2O5DYAQAFP7Q3YfiA/bMwg8TVsciP7k0xOww==6623 dependencies:6624 "@jest/console" "^27.3.1"6625 "@jest/environment" "^27.3.1"6626 "@jest/test-result" "^27.3.1"6627 "@jest/transform" "^27.3.1"6628 "@jest/types" "^27.2.5"6629 "@types/node" "*"6630 chalk "^4.0.0"6631 emittery "^0.8.1"6632 exit "^0.1.2"6633 graceful-fs "^4.2.4"6634 jest-docblock "^27.0.6"6635 jest-environment-jsdom "^27.3.1"6636 jest-environment-node "^27.3.1"6637 jest-haste-map "^27.3.1"6638 jest-leak-detector "^27.3.1"6639 jest-message-util "^27.3.1"6640 jest-resolve "^27.3.1"6641 jest-runtime "^27.3.1"6642 jest-util "^27.3.1"6643 jest-worker "^27.3.1"6644 source-map-support "^0.5.6"6645 throat "^6.0.1"66466647jest-runtime@^27.3.1:6648 version "27.3.1"6649 resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-27.3.1.tgz#80fa32eb85fe5af575865ddf379874777ee993d7"6650 integrity sha512-qtO6VxPbS8umqhEDpjA4pqTkKQ1Hy4ZSi9mDVeE9Za7LKBo2LdW2jmT+Iod3XFaJqINikZQsn2wEi0j9wPRbLg==6651 dependencies:6652 "@jest/console" "^27.3.1"6653 "@jest/environment" "^27.3.1"6654 "@jest/globals" "^27.3.1"6655 "@jest/source-map" "^27.0.6"6656 "@jest/test-result" "^27.3.1"6657 "@jest/transform" "^27.3.1"6658 "@jest/types" "^27.2.5"6659 "@types/yargs" "^16.0.0"6660 chalk "^4.0.0"6661 cjs-module-lexer "^1.0.0"6662 collect-v8-coverage "^1.0.0"6663 execa "^5.0.0"6664 exit "^0.1.2"6665 glob "^7.1.3"6666 graceful-fs "^4.2.4"6667 jest-haste-map "^27.3.1"6668 jest-message-util "^27.3.1"6669 jest-mock "^27.3.0"6670 jest-regex-util "^27.0.6"6671 jest-resolve "^27.3.1"6672 jest-snapshot "^27.3.1"6673 jest-util "^27.3.1"6674 jest-validate "^27.3.1"6675 slash "^3.0.0"6676 strip-bom "^4.0.0"6677 yargs "^16.2.0"66786679jest-serializer@^27.0.6:6680 version "27.0.6"6681 resolved "https://registry.yarnpkg.com/jest-serializer/-/jest-serializer-27.0.6.tgz#93a6c74e0132b81a2d54623251c46c498bb5bec1"6682 integrity sha512-PtGdVK9EGC7dsaziskfqaAPib6wTViY3G8E5wz9tLVPhHyiDNTZn/xjZ4khAw+09QkoOVpn7vF5nPSN6dtBexA==6683 dependencies:6684 "@types/node" "*"6685 graceful-fs "^4.2.4"66866687jest-snapshot@^27.3.1:6688 version "27.3.1"6689 resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-27.3.1.tgz#1da5c0712a252d70917d46c037054f5918c49ee4"6690 integrity sha512-APZyBvSgQgOT0XumwfFu7X3G5elj6TGhCBLbBdn3R1IzYustPGPE38F51dBWMQ8hRXa9je0vAdeVDtqHLvB6lg==6691 dependencies:6692 "@babel/core" "^7.7.2"6693 "@babel/generator" "^7.7.2"6694 "@babel/parser" "^7.7.2"6695 "@babel/plugin-syntax-typescript" "^7.7.2"6696 "@babel/traverse" "^7.7.2"6697 "@babel/types" "^7.0.0"6698 "@jest/transform" "^27.3.1"6699 "@jest/types" "^27.2.5"6700 "@types/babel__traverse" "^7.0.4"6701 "@types/prettier" "^2.1.5"6702 babel-preset-current-node-syntax "^1.0.0"6703 chalk "^4.0.0"6704 expect "^27.3.1"6705 graceful-fs "^4.2.4"6706 jest-diff "^27.3.1"6707 jest-get-type "^27.3.1"6708 jest-haste-map "^27.3.1"6709 jest-matcher-utils "^27.3.1"6710 jest-message-util "^27.3.1"6711 jest-resolve "^27.3.1"6712 jest-util "^27.3.1"6713 natural-compare "^1.4.0"6714 pretty-format "^27.3.1"6715 semver "^7.3.2"67166717jest-util@^27.3.1:6718 version "27.3.1"6719 resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-27.3.1.tgz#a58cdc7b6c8a560caac9ed6bdfc4e4ff23f80429"6720 integrity sha512-8fg+ifEH3GDryLQf/eKZck1DEs2YuVPBCMOaHQxVVLmQwl/CDhWzrvChTX4efLZxGrw+AA0mSXv78cyytBt/uw==6721 dependencies:6722 "@jest/types" "^27.2.5"6723 "@types/node" "*"6724 chalk "^4.0.0"6725 ci-info "^3.2.0"6726 graceful-fs "^4.2.4"6727 picomatch "^2.2.3"67286729jest-validate@^27.3.1:6730 version "27.3.1"6731 resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-27.3.1.tgz#3a395d61a19cd13ae9054af8cdaf299116ef8a24"6732 integrity sha512-3H0XCHDFLA9uDII67Bwi1Vy7AqwA5HqEEjyy934lgVhtJ3eisw6ShOF1MDmRPspyikef5MyExvIm0/TuLzZ86Q==6733 dependencies:6734 "@jest/types" "^27.2.5"6735 camelcase "^6.2.0"6736 chalk "^4.0.0"6737 jest-get-type "^27.3.1"6738 leven "^3.1.0"6739 pretty-format "^27.3.1"67406741jest-watcher@^27.3.1:6742 version "27.3.1"6743 resolved "https://registry.yarnpkg.com/jest-watcher/-/jest-watcher-27.3.1.tgz#ba5e0bc6aa843612b54ddb7f009d1cbff7e05f3e"6744 integrity sha512-9/xbV6chABsGHWh9yPaAGYVVKurWoP3ZMCv6h+O1v9/+pkOroigs6WzZ0e9gLP/njokUwM7yQhr01LKJVMkaZA==6745 dependencies:6746 "@jest/test-result" "^27.3.1"6747 "@jest/types" "^27.2.5"6748 "@types/node" "*"6749 ansi-escapes "^4.2.1"6750 chalk "^4.0.0"6751 jest-util "^27.3.1"6752 string-length "^4.0.1"67536754jest-worker@^27.3.1:6755 version "27.3.1"6756 resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-27.3.1.tgz#0def7feae5b8042be38479799aeb7b5facac24b2"6757 integrity sha512-ks3WCzsiZaOPJl/oMsDjaf0TRiSv7ctNgs0FqRr2nARsovz6AWWy4oLElwcquGSz692DzgZQrCLScPNs5YlC4g==6758 dependencies:6759 "@types/node" "*"6760 merge-stream "^2.0.0"6761 supports-color "^8.0.0"67626763jest@^27.3.1:6764 version "27.3.1"6765 resolved "https://registry.yarnpkg.com/jest/-/jest-27.3.1.tgz#b5bab64e8f56b6f7e275ba1836898b0d9f1e5c8a"6766 integrity sha512-U2AX0AgQGd5EzMsiZpYt8HyZ+nSVIh5ujQ9CPp9EQZJMjXIiSZpJNweZl0swatKRoqHWgGKM3zaSwm4Zaz87ng==6767 dependencies:6768 "@jest/core" "^27.3.1"6769 import-local "^3.0.2"6770 jest-cli "^27.3.1"67716772js-sha3@0.5.7, js-sha3@^0.5.7:6773 version "0.5.7"6774 resolved "https://registry.yarnpkg.com/js-sha3/-/js-sha3-0.5.7.tgz#0d4ffd8002d5333aabaf4a23eed2f6374c9f28e7"6775 integrity sha1-DU/9gALVMzqrr0oj7tL2N0yfKOc=67766777js-sha3@0.8.0, js-sha3@^0.8.0:6778 version "0.8.0"6779 resolved "https://registry.yarnpkg.com/js-sha3/-/js-sha3-0.8.0.tgz#b9b7a5da73afad7dedd0f8c463954cbde6818840"6780 integrity sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q==67816782"js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0:6783 version "4.0.0"6784 resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499"6785 integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==67866787js-yaml@4.1.0, js-yaml@^4.1.0:6788 version "4.1.0"6789 resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602"6790 integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==6791 dependencies:6792 argparse "^2.0.1"67936794js-yaml@^3.13.1:6795 version "3.14.1"6796 resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.14.1.tgz#dae812fdb3825fa306609a8717383c50c36a0537"6797 integrity sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==6798 dependencies:6799 argparse "^1.0.7"6800 esprima "^4.0.0"68016802jsbn@~0.1.0:6803 version "0.1.1"6804 resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513"6805 integrity sha1-peZUwuWi3rXyAdls77yoDA7y9RM=68066807jsdom@^16.6.0:6808 version "16.6.0"6809 resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-16.6.0.tgz#f79b3786682065492a3da6a60a4695da983805ac"6810 integrity sha512-Ty1vmF4NHJkolaEmdjtxTfSfkdb8Ywarwf63f+F8/mDD1uLSSWDxDuMiZxiPhwunLrn9LOSVItWj4bLYsLN3Dg==6811 dependencies:6812 abab "^2.0.5"6813 acorn "^8.2.4"6814 acorn-globals "^6.0.0"6815 cssom "^0.4.4"6816 cssstyle "^2.3.0"6817 data-urls "^2.0.0"6818 decimal.js "^10.2.1"6819 domexception "^2.0.1"6820 escodegen "^2.0.0"6821 form-data "^3.0.0"6822 html-encoding-sniffer "^2.0.1"6823 http-proxy-agent "^4.0.1"6824 https-proxy-agent "^5.0.0"6825 is-potential-custom-element-name "^1.0.1"6826 nwsapi "^2.2.0"6827 parse5 "6.0.1"6828 saxes "^5.0.1"6829 symbol-tree "^3.2.4"6830 tough-cookie "^4.0.0"6831 w3c-hr-time "^1.0.2"6832 w3c-xmlserializer "^2.0.0"6833 webidl-conversions "^6.1.0"6834 whatwg-encoding "^1.0.5"6835 whatwg-mimetype "^2.3.0"6836 whatwg-url "^8.5.0"6837 ws "^7.4.5"6838 xml-name-validator "^3.0.0"68396840jsesc@^2.5.1:6841 version "2.5.2"6842 resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4"6843 integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==68446845jsesc@~0.5.0:6846 version "0.5.0"6847 resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d"6848 integrity sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=68496850json-buffer@3.0.0:6851 version "3.0.0"6852 resolved "https://registry.yarnpkg.com/json-buffer/-/json-buffer-3.0.0.tgz#5b1f397afc75d677bde8bcfc0e47e1f9a3d9a898"6853 integrity sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg=68546855json-parse-even-better-errors@^2.3.0:6856 version "2.3.1"6857 resolved "https://registry.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz#7c47805a94319928e05777405dc12e1f7a4ee02d"6858 integrity sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==68596860json-schema-traverse@^0.4.1:6861 version "0.4.1"6862 resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660"6863 integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==68646865json-schema@0.2.3:6866 version "0.2.3"6867 resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13"6868 integrity sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=68696870json-stable-stringify-without-jsonify@^1.0.1:6871 version "1.0.1"6872 resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651"6873 integrity sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=68746875json-stringify-safe@~5.0.1:6876 version "5.0.1"6877 resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb"6878 integrity sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=68796880json5@^0.5.1:6881 version "0.5.1"6882 resolved "https://registry.yarnpkg.com/json5/-/json5-0.5.1.tgz#1eade7acc012034ad84e2396767ead9fa5495821"6883 integrity sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=68846885json5@^1.0.1:6886 version "1.0.1"6887 resolved "https://registry.yarnpkg.com/json5/-/json5-1.0.1.tgz#779fb0018604fa854eacbf6252180d83543e3dbe"6888 integrity sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==6889 dependencies:6890 minimist "^1.2.0"68916892json5@^2.1.2:6893 version "2.2.0"6894 resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.0.tgz#2dfefe720c6ba525d9ebd909950f0515316c89a3"6895 integrity sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA==6896 dependencies:6897 minimist "^1.2.5"68986899jsonfile@^2.1.0:6900 version "2.4.0"6901 resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-2.4.0.tgz#3736a2b428b87bbda0cc83b53fa3d633a35c2ae8"6902 integrity sha1-NzaitCi4e72gzIO1P6PWM6NcKug=6903 optionalDependencies:6904 graceful-fs "^4.1.6"69056906jsonfile@^4.0.0:6907 version "4.0.0"6908 resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-4.0.0.tgz#8771aae0799b64076b76640fca058f9c10e33ecb"6909 integrity sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=6910 optionalDependencies:6911 graceful-fs "^4.1.6"69126913jsonfile@^6.0.1:6914 version "6.1.0"6915 resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-6.1.0.tgz#bc55b2634793c679ec6403094eb13698a6ec0aae"6916 integrity sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==6917 dependencies:6918 universalify "^2.0.0"6919 optionalDependencies:6920 graceful-fs "^4.1.6"69216922jsprim@^1.2.2:6923 version "1.4.1"6924 resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.1.tgz#313e66bc1e5cc06e438bc1b7499c2e5c56acb6a2"6925 integrity sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=6926 dependencies:6927 assert-plus "1.0.0"6928 extsprintf "1.3.0"6929 json-schema "0.2.3"6930 verror "1.10.0"69316932"jsx-ast-utils@^2.4.1 || ^3.0.0":6933 version "3.2.0"6934 resolved "https://registry.yarnpkg.com/jsx-ast-utils/-/jsx-ast-utils-3.2.0.tgz#41108d2cec408c3453c1bbe8a4aae9e1e2bd8f82"6935 integrity sha512-EIsmt3O3ljsU6sot/J4E1zDRxfBNrhjyf/OKjlydwgEimQuznlM4Wv7U+ueONJMyEn1WRE0K8dhi3dVAXYT24Q==6936 dependencies:6937 array-includes "^3.1.2"6938 object.assign "^4.1.2"69396940keccak@^3.0.0:6941 version "3.0.1"6942 resolved "https://registry.yarnpkg.com/keccak/-/keccak-3.0.1.tgz#ae30a0e94dbe43414f741375cff6d64c8bea0bff"6943 integrity sha512-epq90L9jlFWCW7+pQa6JOnKn2Xgl2mtI664seYR6MHskvI9agt7AnDqmAlp9TqU4/caMYbA08Hi5DMZAl5zdkA==6944 dependencies:6945 node-addon-api "^2.0.0"6946 node-gyp-build "^4.2.0"69476948keyv@^3.0.0:6949 version "3.1.0"6950 resolved "https://registry.yarnpkg.com/keyv/-/keyv-3.1.0.tgz#ecc228486f69991e49e9476485a5be1e8fc5c4d9"6951 integrity sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA==6952 dependencies:6953 json-buffer "3.0.0"69546955kind-of@^6.0.2:6956 version "6.0.3"6957 resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd"6958 integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==69596960klaw@^1.0.0:6961 version "1.3.1"6962 resolved "https://registry.yarnpkg.com/klaw/-/klaw-1.3.1.tgz#4088433b46b3b1ba259d78785d8e96f73ba02439"6963 integrity sha1-QIhDO0azsbolnXh4XY6W9zugJDk=6964 optionalDependencies:6965 graceful-fs "^4.1.9"69666967kleur@^3.0.3:6968 version "3.0.3"6969 resolved "https://registry.yarnpkg.com/kleur/-/kleur-3.0.3.tgz#a79c9ecc86ee1ce3fa6206d1216c501f147fc07e"6970 integrity sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==69716972latest-version@^5.1.0:6973 version "5.1.0"6974 resolved "https://registry.yarnpkg.com/latest-version/-/latest-version-5.1.0.tgz#119dfe908fe38d15dfa43ecd13fa12ec8832face"6975 integrity sha512-weT+r0kTkRQdCdYCNtkMwWXQTMEswKrFBkm4ckQOMVhhqhIMI1UT2hMj+1iigIhgSZm5gTmrRXBNoGUgaTY1xA==6976 dependencies:6977 package-json "^6.3.0"69786979lcov-parse@^1.0.0:6980 version "1.0.0"6981 resolved "https://registry.yarnpkg.com/lcov-parse/-/lcov-parse-1.0.0.tgz#eb0d46b54111ebc561acb4c408ef9363bdc8f7e0"6982 integrity sha1-6w1GtUER68VhrLTECO+TY73I9+A=69836984leven@^3.1.0:6985 version "3.1.0"6986 resolved "https://registry.yarnpkg.com/leven/-/leven-3.1.0.tgz#77891de834064cccba82ae7842bb6b14a13ed7f2"6987 integrity sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==69886989levn@^0.4.1:6990 version "0.4.1"6991 resolved "https://registry.yarnpkg.com/levn/-/levn-0.4.1.tgz#ae4562c007473b932a6200d403268dd2fffc6ade"6992 integrity sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==6993 dependencies:6994 prelude-ls "^1.2.1"6995 type-check "~0.4.0"69966997levn@~0.3.0:6998 version "0.3.0"6999 resolved "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee"7000 integrity sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=7001 dependencies:7002 prelude-ls "~1.1.2"7003 type-check "~0.3.2"70047005line-reader@^0.2.4:7006 version "0.2.4"7007 resolved "https://registry.yarnpkg.com/line-reader/-/line-reader-0.2.4.tgz#c4392b587dea38580c9678570e6e8e49fce52622"7008 integrity sha1-xDkrWH3qOFgMlnhXDm6OSfzlJiI=70097010lines-and-columns@^1.1.6:7011 version "1.1.6"7012 resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.1.6.tgz#1c00c743b433cd0a4e80758f7b64a57440d9ff00"7013 integrity sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA=70147015load-json-file@^6.2.0:7016 version "6.2.0"7017 resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-6.2.0.tgz#5c7770b42cafa97074ca2848707c61662f4251a1"7018 integrity sha512-gUD/epcRms75Cw8RT1pUdHugZYM5ce64ucs2GEISABwkRsOQr0q2wm/MV2TKThycIe5e0ytRweW2RZxclogCdQ==7019 dependencies:7020 graceful-fs "^4.1.15"7021 parse-json "^5.0.0"7022 strip-bom "^4.0.0"7023 type-fest "^0.6.0"70247025locate-path@^2.0.0:7026 version "2.0.0"7027 resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-2.0.0.tgz#2b568b265eec944c6d9c0de9c3dbbbca0354cd8e"7028 integrity sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=7029 dependencies:7030 p-locate "^2.0.0"7031 path-exists "^3.0.0"70327033locate-path@^3.0.0:7034 version "3.0.0"7035 resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-3.0.0.tgz#dbec3b3ab759758071b58fe59fc41871af21400e"7036 integrity sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==7037 dependencies:7038 p-locate "^3.0.0"7039 path-exists "^3.0.0"70407041locate-path@^5.0.0:7042 version "5.0.0"7043 resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-5.0.0.tgz#1afba396afd676a6d42504d0a67a3a7eb9f62aa0"7044 integrity sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==7045 dependencies:7046 p-locate "^4.1.0"70477048locate-path@^6.0.0:7049 version "6.0.0"7050 resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-6.0.0.tgz#55321eb309febbc59c4801d931a72452a681d286"7051 integrity sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==7052 dependencies:7053 p-locate "^5.0.0"70547055lodash.debounce@^4.0.8:7056 version "4.0.8"7057 resolved "https://registry.yarnpkg.com/lodash.debounce/-/lodash.debounce-4.0.8.tgz#82d79bff30a67c4005ffd5e2515300ad9ca4d7af"7058 integrity sha1-gteb/zCmfEAF/9XiUVMArZyk168=70597060lodash.merge@^4.6.2:7061 version "4.6.2"7062 resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a"7063 integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==70647065lodash@^4.17.11, lodash@^4.17.14, lodash@^4.17.21, lodash@^4.7.0:7066 version "4.17.21"7067 resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c"7068 integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==70697070log-driver@^1.2.7:7071 version "1.2.7"7072 resolved "https://registry.yarnpkg.com/log-driver/-/log-driver-1.2.7.tgz#63b95021f0702fedfa2c9bb0a24e7797d71871d8"7073 integrity sha512-U7KCmLdqsGHBLeWqYlFA0V0Sl6P08EE1ZrmA9cxjUE0WVqT9qnyVDPz1kzpFEP0jdJuFnasWIfSd7fsaNXkpbg==70747075log-symbols@4.1.0, log-symbols@^4.1.0:7076 version "4.1.0"7077 resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-4.1.0.tgz#3fbdbb95b4683ac9fc785111e792e558d4abd503"7078 integrity sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==7079 dependencies:7080 chalk "^4.1.0"7081 is-unicode-supported "^0.1.0"70827083log-symbols@^3.0.0:7084 version "3.0.0"7085 resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-3.0.0.tgz#f3a08516a5dea893336a7dee14d18a1cfdab77c4"7086 integrity sha512-dSkNGuI7iG3mfvDzUuYZyvk5dD9ocYCYzNU6CYDE6+Xqd+gwme6Z00NS3dUh8mq/73HaEtT7m6W+yUPtU6BZnQ==7087 dependencies:7088 chalk "^2.4.2"70897090loose-envify@^1.4.0:7091 version "1.4.0"7092 resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf"7093 integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==7094 dependencies:7095 js-tokens "^3.0.0 || ^4.0.0"70967097lowercase-keys@^1.0.0, lowercase-keys@^1.0.1:7098 version "1.0.1"7099 resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-1.0.1.tgz#6f9e30b47084d971a7c820ff15a6c5167b74c26f"7100 integrity sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==71017102lowercase-keys@^2.0.0:7103 version "2.0.0"7104 resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-2.0.0.tgz#2603e78b7b4b0006cbca2fbcc8a3202558ac9479"7105 integrity sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==71067107lru-cache@^4.1.2:7108 version "4.1.5"7109 resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.1.5.tgz#8bbe50ea85bed59bc9e33dcab8235ee9bcf443cd"7110 integrity sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==7111 dependencies:7112 pseudomap "^1.0.2"7113 yallist "^2.1.2"71147115lru-cache@^6.0.0:7116 version "6.0.0"7117 resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94"7118 integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==7119 dependencies:7120 yallist "^4.0.0"71217122madge@^5.0.1:7123 version "5.0.1"7124 resolved "https://registry.yarnpkg.com/madge/-/madge-5.0.1.tgz#2096d9006558ea0669b3ade89c2cda708a24e22b"7125 integrity sha512-krmSWL9Hkgub74bOjnjWRoFPAJvPwSG6Dbta06qhWOq6X/n/FPzO3ESZvbFYVIvG2g4UHXvCJN1b+RZLaSs9nA==7126 dependencies:7127 chalk "^4.1.1"7128 commander "^7.2.0"7129 commondir "^1.0.1"7130 debug "^4.3.1"7131 dependency-tree "^8.1.1"7132 detective-amd "^3.1.0"7133 detective-cjs "^3.1.1"7134 detective-es6 "^2.2.0"7135 detective-less "^1.0.2"7136 detective-postcss "^5.0.0"7137 detective-sass "^3.0.1"7138 detective-scss "^2.0.1"7139 detective-stylus "^1.0.0"7140 detective-typescript "^7.0.0"7141 graphviz "0.0.9"7142 ora "^5.4.1"7143 pluralize "^8.0.0"7144 precinct "^8.1.0"7145 pretty-ms "^7.0.1"7146 rc "^1.2.7"7147 typescript "^3.9.5"7148 walkdir "^0.4.1"71497150magic-string@^0.25.7:7151 version "0.25.7"7152 resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.25.7.tgz#3f497d6fd34c669c6798dcb821f2ef31f5445051"7153 integrity sha512-4CrMT5DOHTDk4HYDlzmwu4FVCcIYI8gauveasrdCu2IKIFOJ3f0v/8MDGJCDL9oD2ppz/Av1b0Nj345H9M+XIA==7154 dependencies:7155 sourcemap-codec "^1.4.4"71567157make-dir@^2.0.0, make-dir@^2.1.0:7158 version "2.1.0"7159 resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-2.1.0.tgz#5f0310e18b8be898cc07009295a30ae41e91e6f5"7160 integrity sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==7161 dependencies:7162 pify "^4.0.1"7163 semver "^5.6.0"71647165make-dir@^3.0.0, make-dir@^3.0.2:7166 version "3.1.0"7167 resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-3.1.0.tgz#415e967046b3a7f1d185277d84aa58203726a13f"7168 integrity sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==7169 dependencies:7170 semver "^6.0.0"71717172make-error@^1.1.1:7173 version "1.3.6"7174 resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.6.tgz#2eb2e37ea9b67c4891f684a1394799af484cf7a2"7175 integrity sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==71767177makeerror@1.0.x:7178 version "1.0.11"7179 resolved "https://registry.yarnpkg.com/makeerror/-/makeerror-1.0.11.tgz#e01a5c9109f2af79660e4e8b9587790184f5a96c"7180 integrity sha1-4BpckQnyr3lmDk6LlYd5AYT1qWw=7181 dependencies:7182 tmpl "1.0.x"71837184md5.js@^1.3.4:7185 version "1.3.5"7186 resolved "https://registry.yarnpkg.com/md5.js/-/md5.js-1.3.5.tgz#b5d07b8e3216e3e27cd728d72f70d1e6a342005f"7187 integrity sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==7188 dependencies:7189 hash-base "^3.0.0"7190 inherits "^2.0.1"7191 safe-buffer "^5.1.2"71927193media-typer@0.3.0:7194 version "0.3.0"7195 resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748"7196 integrity sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=71977198memorystream@^0.3.1:7199 version "0.3.1"7200 resolved "https://registry.yarnpkg.com/memorystream/-/memorystream-0.3.1.tgz#86d7090b30ce455d63fbae12dda51a47ddcaf9b2"7201 integrity sha1-htcJCzDORV1j+64S3aUaR93K+bI=72027203merge-descriptors@1.0.1:7204 version "1.0.1"7205 resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61"7206 integrity sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=72077208merge-source-map@^1.1.0:7209 version "1.1.0"7210 resolved "https://registry.yarnpkg.com/merge-source-map/-/merge-source-map-1.1.0.tgz#2fdde7e6020939f70906a68f2d7ae685e4c8c646"7211 integrity sha512-Qkcp7P2ygktpMPh2mCQZaf3jhN6D3Z/qVZHSdWvQ+2Ef5HgRAPBO57A77+ENm0CPx2+1Ce/MYKi3ymqdfuqibw==7212 dependencies:7213 source-map "^0.6.1"72147215merge-stream@^2.0.0:7216 version "2.0.0"7217 resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60"7218 integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==72197220merge2@^1.3.0:7221 version "1.4.1"7222 resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae"7223 integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==72247225methods@~1.1.2:7226 version "1.1.2"7227 resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee"7228 integrity sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=72297230micromatch@^4.0.2, micromatch@^4.0.4:7231 version "4.0.4"7232 resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.4.tgz#896d519dfe9db25fce94ceb7a500919bf881ebf9"7233 integrity sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==7234 dependencies:7235 braces "^3.0.1"7236 picomatch "^2.2.3"72377238miller-rabin@^4.0.0:7239 version "4.0.1"7240 resolved "https://registry.yarnpkg.com/miller-rabin/-/miller-rabin-4.0.1.tgz#f080351c865b0dc562a8462966daa53543c78a4d"7241 integrity sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==7242 dependencies:7243 bn.js "^4.0.0"7244 brorand "^1.0.1"72457246mime-db@1.48.0:7247 version "1.48.0"7248 resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.48.0.tgz#e35b31045dd7eada3aaad537ed88a33afbef2d1d"7249 integrity sha512-FM3QwxV+TnZYQ2aRqhlKBMHxk10lTbMt3bBkMAp54ddrNeVSfcQYOOKuGuy3Ddrm38I04If834fOUSq1yzslJQ==72507251mime-types@^2.1.12, mime-types@^2.1.16, mime-types@~2.1.19, mime-types@~2.1.24:7252 version "2.1.31"7253 resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.31.tgz#a00d76b74317c61f9c2db2218b8e9f8e9c5c9e6b"7254 integrity sha512-XGZnNzm3QvgKxa8dpzyhFTHmpP3l5YNusmne07VUOXxou9CqUqYa/HBy124RqtVh/O2pECas/MOcsDgpilPOPg==7255 dependencies:7256 mime-db "1.48.0"72577258mime@1.6.0:7259 version "1.6.0"7260 resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1"7261 integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==72627263mime@^2.4.6:7264 version "2.5.2"7265 resolved "https://registry.yarnpkg.com/mime/-/mime-2.5.2.tgz#6e3dc6cc2b9510643830e5f19d5cb753da5eeabe"7266 integrity sha512-tqkh47FzKeCPD2PUiPB6pkbMzsCasjxAfC62/Wap5qrUWcb+sFasXUC5I3gYM5iBM8v/Qpn4UK0x+j0iHyFPDg==72677268mimic-fn@^2.1.0:7269 version "2.1.0"7270 resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b"7271 integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==72727273mimic-response@^1.0.0, mimic-response@^1.0.1:7274 version "1.0.1"7275 resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-1.0.1.tgz#4923538878eef42063cb8a3e3b0798781487ab1b"7276 integrity sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==72777278mimic-response@^3.1.0:7279 version "3.1.0"7280 resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-3.1.0.tgz#2d1d59af9c1b129815accc2c46a022a5ce1fa3c9"7281 integrity sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==72827283min-document@^2.19.0:7284 version "2.19.0"7285 resolved "https://registry.yarnpkg.com/min-document/-/min-document-2.19.0.tgz#7bd282e3f5842ed295bb748cdd9f1ffa2c824685"7286 integrity sha1-e9KC4/WELtKVu3SM3Z8f+iyCRoU=7287 dependencies:7288 dom-walk "^0.1.0"72897290minimalistic-assert@^1.0.0, minimalistic-assert@^1.0.1:7291 version "1.0.1"7292 resolved "https://registry.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz#2e194de044626d4a10e7f7fbc00ce73e83e4d5c7"7293 integrity sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==72947295minimalistic-crypto-utils@^1.0.1:7296 version "1.0.1"7297 resolved "https://registry.yarnpkg.com/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz#f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a"7298 integrity sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=72997300minimatch@3.0.4, minimatch@^3.0.4:7301 version "3.0.4"7302 resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083"7303 integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==7304 dependencies:7305 brace-expansion "^1.1.7"73067307minimist@^1.2.0, minimist@^1.2.5:7308 version "1.2.5"7309 resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602"7310 integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==73117312minipass@^2.6.0, minipass@^2.8.6, minipass@^2.9.0:7313 version "2.9.0"7314 resolved "https://registry.yarnpkg.com/minipass/-/minipass-2.9.0.tgz#e713762e7d3e32fed803115cf93e04bca9fcc9a6"7315 integrity sha512-wxfUjg9WebH+CUDX/CdbRlh5SmfZiy/hpkxaRI16Y9W56Pa75sWgd/rvFilSgrauD9NyFymP/+JFV3KwzIsJeg==7316 dependencies:7317 safe-buffer "^5.1.2"7318 yallist "^3.0.0"73197320minizlib@^1.2.1:7321 version "1.3.3"7322 resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-1.3.3.tgz#2290de96818a34c29551c8a8d301216bd65a861d"7323 integrity sha512-6ZYMOEnmVsdCeTJVE0W9ZD+pVnE8h9Hma/iOwwRDsdQoePpoX56/8B6z3P9VNwppJuBKNRuFDRNRqRWexT9G9Q==7324 dependencies:7325 minipass "^2.9.0"73267327mkdirp-promise@^5.0.1:7328 version "5.0.1"7329 resolved "https://registry.yarnpkg.com/mkdirp-promise/-/mkdirp-promise-5.0.1.tgz#e9b8f68e552c68a9c1713b84883f7a1dd039b8a1"7330 integrity sha1-6bj2jlUsaKnBcTuEiD96HdA5uKE=7331 dependencies:7332 mkdirp "*"73337334mkdirp@*, mkdirp@^1.0.4:7335 version "1.0.4"7336 resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e"7337 integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==73387339mkdirp@^0.5.0, mkdirp@^0.5.3:7340 version "0.5.5"7341 resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.5.tgz#d91cefd62d1436ca0f41620e251288d420099def"7342 integrity sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==7343 dependencies:7344 minimist "^1.2.5"73457346mocha@^9.1.3:7347 version "9.1.3"7348 resolved "https://registry.yarnpkg.com/mocha/-/mocha-9.1.3.tgz#8a623be6b323810493d8c8f6f7667440fa469fdb"7349 integrity sha512-Xcpl9FqXOAYqI3j79pEtHBBnQgVXIhpULjGQa7DVb0Po+VzmSIK9kanAiWLHoRR/dbZ2qpdPshuXr8l1VaHCzw==7350 dependencies:7351 "@ungap/promise-all-settled" "1.1.2"7352 ansi-colors "4.1.1"7353 browser-stdout "1.3.1"7354 chokidar "3.5.2"7355 debug "4.3.2"7356 diff "5.0.0"7357 escape-string-regexp "4.0.0"7358 find-up "5.0.0"7359 glob "7.1.7"7360 growl "1.10.5"7361 he "1.2.0"7362 js-yaml "4.1.0"7363 log-symbols "4.1.0"7364 minimatch "3.0.4"7365 ms "2.1.3"7366 nanoid "3.1.25"7367 serialize-javascript "6.0.0"7368 strip-json-comments "3.1.1"7369 supports-color "8.1.1"7370 which "2.0.2"7371 workerpool "6.1.5"7372 yargs "16.2.0"7373 yargs-parser "20.2.4"7374 yargs-unparser "2.0.0"73757376mock-fs@^4.1.0:7377 version "4.14.0"7378 resolved "https://registry.yarnpkg.com/mock-fs/-/mock-fs-4.14.0.tgz#ce5124d2c601421255985e6e94da80a7357b1b18"7379 integrity sha512-qYvlv/exQ4+svI3UOvPUpLDF0OMX5euvUH0Ny4N5QyRyhNdgAgUrVH3iUINSzEPLvx0kbo/Bp28GJKIqvE7URw==73807381module-definition@^3.3.1:7382 version "3.3.1"7383 resolved "https://registry.yarnpkg.com/module-definition/-/module-definition-3.3.1.tgz#fedef71667713e36988b93d0626a4fe7b35aebfc"7384 integrity sha512-kLidGPwQ2yq484nSD+D3JoJp4Etc0Ox9P0L34Pu/cU4X4HcG7k7p62XI5BBuvURWMRX3RPyuhOcBHbKus+UH4A==7385 dependencies:7386 ast-module-types "^2.7.1"7387 node-source-walk "^4.0.0"73887389module-lookup-amd@^7.0.0:7390 version "7.0.1"7391 resolved "https://registry.yarnpkg.com/module-lookup-amd/-/module-lookup-amd-7.0.1.tgz#d67c1a93f2ff8e38b8774b99a638e9a4395774b2"7392 integrity sha512-w9mCNlj0S8qviuHzpakaLVc+/7q50jl9a/kmJ/n8bmXQZgDPkQHnPBb8MUOYh3WpAYkXuNc2c+khsozhIp/amQ==7393 dependencies:7394 commander "^2.8.1"7395 debug "^4.1.0"7396 glob "^7.1.6"7397 requirejs "^2.3.5"7398 requirejs-config-file "^4.0.0"73997400ms@2.0.0:7401 version "2.0.0"7402 resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8"7403 integrity sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=74047405ms@2.1.1:7406 version "2.1.1"7407 resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.1.tgz#30a5864eb3ebb0a66f2ebe6d727af06a09d86e0a"7408 integrity sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==74097410ms@2.1.2:7411 version "2.1.2"7412 resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009"7413 integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==74147415ms@2.1.3, ms@^2.1.1:7416 version "2.1.3"7417 resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2"7418 integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==74197420multibase@^0.7.0:7421 version "0.7.0"7422 resolved "https://registry.yarnpkg.com/multibase/-/multibase-0.7.0.tgz#1adfc1c50abe05eefeb5091ac0c2728d6b84581b"7423 integrity sha512-TW8q03O0f6PNFTQDvh3xxH03c8CjGaaYrjkl9UQPG6rz53TQzzxJVCIWVjzcbN/Q5Y53Zd0IBQBMVktVgNx4Fg==7424 dependencies:7425 base-x "^3.0.8"7426 buffer "^5.5.0"74277428multibase@~0.6.0:7429 version "0.6.1"7430 resolved "https://registry.yarnpkg.com/multibase/-/multibase-0.6.1.tgz#b76df6298536cc17b9f6a6db53ec88f85f8cc12b"7431 integrity sha512-pFfAwyTjbbQgNc3G7D48JkJxWtoJoBMaR4xQUOuB8RnCgRqaYmWNFeJTTvrJ2w51bjLq2zTby6Rqj9TQ9elSUw==7432 dependencies:7433 base-x "^3.0.8"7434 buffer "^5.5.0"74357436multicodec@^0.5.5:7437 version "0.5.7"7438 resolved "https://registry.yarnpkg.com/multicodec/-/multicodec-0.5.7.tgz#1fb3f9dd866a10a55d226e194abba2dcc1ee9ffd"7439 integrity sha512-PscoRxm3f+88fAtELwUnZxGDkduE2HD9Q6GHUOywQLjOGT/HAdhjLDYNZ1e7VR0s0TP0EwZ16LNUTFpoBGivOA==7440 dependencies:7441 varint "^5.0.0"74427443multicodec@^1.0.0:7444 version "1.0.4"7445 resolved "https://registry.yarnpkg.com/multicodec/-/multicodec-1.0.4.tgz#46ac064657c40380c28367c90304d8ed175a714f"7446 integrity sha512-NDd7FeS3QamVtbgfvu5h7fd1IlbaC4EQ0/pgU4zqE2vdHCmBGsUa0TiM8/TdSeG6BMPC92OOCf8F1ocE/Wkrrg==7447 dependencies:7448 buffer "^5.6.0"7449 varint "^5.0.0"74507451multihashes@^0.4.15, multihashes@~0.4.15:7452 version "0.4.21"7453 resolved "https://registry.yarnpkg.com/multihashes/-/multihashes-0.4.21.tgz#dc02d525579f334a7909ade8a122dabb58ccfcb5"7454 integrity sha512-uVSvmeCWf36pU2nB4/1kzYZjsXD9vofZKpgudqkceYY5g2aZZXJ5r9lxuzoRLl1OAp28XljXsEJ/X/85ZsKmKw==7455 dependencies:7456 buffer "^5.5.0"7457 multibase "^0.7.0"7458 varint "^5.0.0"74597460mute-stream@0.0.8, mute-stream@~0.0.4:7461 version "0.0.8"7462 resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.8.tgz#1630c42b2251ff81e2a283de96a5497ea92e5e0d"7463 integrity sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==74647465nano-json-stream-parser@^0.1.2:7466 version "0.1.2"7467 resolved "https://registry.yarnpkg.com/nano-json-stream-parser/-/nano-json-stream-parser-0.1.2.tgz#0cc8f6d0e2b622b479c40d499c46d64b755c6f5f"7468 integrity sha1-DMj20OK2IrR5xA1JnEbWS3Vcb18=74697470nanoid@3.1.25:7471 version "3.1.25"7472 resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.1.25.tgz#09ca32747c0e543f0e1814b7d3793477f9c8e152"7473 integrity sha512-rdwtIXaXCLFAQbnfqDRnI6jaRHp9fTcYBjtFKE8eezcZ7LuLjhUaQGNeMXf1HmRoCH32CLz6XwX0TtxEOS/A3Q==74747475nanoid@^3.1.23:7476 version "3.1.23"7477 resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.1.23.tgz#f744086ce7c2bc47ee0a8472574d5c78e4183a81"7478 integrity sha512-FiB0kzdP0FFVGDKlRLEQ1BgDzU87dy5NnzjeW9YZNt+/c3+q82EQDUwniSAUxp/F0gFNI1ZhKU1FqYsMuqZVnw==74797480natural-compare-lite@^1.4.0:7481 version "1.4.0"7482 resolved "https://registry.yarnpkg.com/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz#17b09581988979fddafe0201e931ba933c96cbb4"7483 integrity sha1-F7CVgZiJef3a/gIB6TG6kzyWy7Q=74847485natural-compare@^1.4.0:7486 version "1.4.0"7487 resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7"7488 integrity sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=74897490negotiator@0.6.2:7491 version "0.6.2"7492 resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.2.tgz#feacf7ccf525a77ae9634436a64883ffeca346fb"7493 integrity sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==74947495neo-async@^2.6.0:7496 version "2.6.2"7497 resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.2.tgz#b4aafb93e3aeb2d8174ca53cf163ab7d7308305f"7498 integrity sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==74997500next-tick@~1.0.0:7501 version "1.0.0"7502 resolved "https://registry.yarnpkg.com/next-tick/-/next-tick-1.0.0.tgz#ca86d1fe8828169b0120208e3dc8424b9db8342c"7503 integrity sha1-yobR/ogoFpsBICCOPchCS524NCw=75047505node-addon-api@^2.0.0:7506 version "2.0.2"7507 resolved "https://registry.yarnpkg.com/node-addon-api/-/node-addon-api-2.0.2.tgz#432cfa82962ce494b132e9d72a15b29f71ff5d32"7508 integrity sha512-Ntyt4AIXyaLIuMHF6IOoTakB3K+RWxwtsHNRxllEoA6vPwP9o4866g6YWDLUdnucilZhmkxiHwHr11gAENw+QA==75097510node-fetch@^2.6.0, node-fetch@^2.6.1:7511 version "2.6.1"7512 resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.1.tgz#045bd323631f76ed2e2b55573394416b639a0052"7513 integrity sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw==75147515node-fetch@^2.6.5:7516 version "2.6.5"7517 resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.5.tgz#42735537d7f080a7e5f78b6c549b7146be1742fd"7518 integrity sha512-mmlIVHJEu5rnIxgEgez6b9GgWXbkZj5YZ7fx+2r94a2E+Uirsp6HsPTPlomfdHtpt/B0cdKviwkoaM6pyvUOpQ==7519 dependencies:7520 whatwg-url "^5.0.0"75217522node-gyp-build@^4.2.0:7523 version "4.2.3"7524 resolved "https://registry.yarnpkg.com/node-gyp-build/-/node-gyp-build-4.2.3.tgz#ce6277f853835f718829efb47db20f3e4d9c4739"7525 integrity sha512-MN6ZpzmfNCRM+3t57PTJHgHyw/h4OWnZ6mR8P5j/uZtqQr46RRuDE/P+g3n0YR/AiYXeWixZZzaip77gdICfRg==75267527node-int64@^0.4.0:7528 version "0.4.0"7529 resolved "https://registry.yarnpkg.com/node-int64/-/node-int64-0.4.0.tgz#87a9065cdb355d3182d8f94ce11188b825c68a3b"7530 integrity sha1-h6kGXNs1XTGC2PlM4RGIuCXGijs=75317532node-modules-regexp@^1.0.0:7533 version "1.0.0"7534 resolved "https://registry.yarnpkg.com/node-modules-regexp/-/node-modules-regexp-1.0.0.tgz#8d9dbe28964a4ac5712e9131642107c71e90ec40"7535 integrity sha1-jZ2+KJZKSsVxLpExZCEHxx6Q7EA=75367537node-releases@^1.1.71:7538 version "1.1.73"7539 resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.73.tgz#dd4e81ddd5277ff846b80b52bb40c49edf7a7b20"7540 integrity sha512-uW7fodD6pyW2FZNZnp/Z3hvWKeEW1Y8R1+1CnErE8cXFXzl5blBOoVB41CvMer6P6Q0S5FXDwcHgFd1Wj0U9zg==75417542node-releases@^1.1.73:7543 version "1.1.74"7544 resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.74.tgz#e5866488080ebaa70a93b91144ccde06f3c3463e"7545 integrity sha512-caJBVempXZPepZoZAPCWRTNxYQ+xtG/KAi4ozTA5A+nJ7IU+kLQCbqaUjb5Rwy14M9upBWiQ4NutcmW04LJSRw==75467547node-releases@^2.0.1:7548 version "2.0.1"7549 resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.1.tgz#3d1d395f204f1f2f29a54358b9fb678765ad2fc5"7550 integrity sha512-CqyzN6z7Q6aMeF/ktcMVTzhAHCEpf8SOarwpzpf8pNBY2k5/oM34UHldUwp8VKI7uxct2HxSRdJjBaZeESzcxA==75517552node-source-walk@^4.0.0, node-source-walk@^4.2.0:7553 version "4.2.0"7554 resolved "https://registry.yarnpkg.com/node-source-walk/-/node-source-walk-4.2.0.tgz#c2efe731ea8ba9c03c562aa0a9d984e54f27bc2c"7555 integrity sha512-hPs/QMe6zS94f5+jG3kk9E7TNm4P2SulrKiLWMzKszBfNZvL/V6wseHlTd7IvfW0NZWqPtK3+9yYNr+3USGteA==7556 dependencies:7557 "@babel/parser" "^7.0.0"75587559normalize-path@^3.0.0, normalize-path@~3.0.0:7560 version "3.0.0"7561 resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65"7562 integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==75637564normalize-url@^4.1.0:7565 version "4.5.1"7566 resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-4.5.1.tgz#0dd90cf1288ee1d1313b87081c9a5932ee48518a"7567 integrity sha512-9UZCFRHQdNrfTpGg8+1INIg93B6zE0aXMVFkw1WFwvO4SlZywU6aLg5Of0Ap/PgcbSw4LNxvMWXMeugwMCX0AA==75687569npm-run-path@^4.0.1:7570 version "4.0.1"7571 resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-4.0.1.tgz#b7ecd1e5ed53da8e37a55e1c2269e0b97ed748ea"7572 integrity sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==7573 dependencies:7574 path-key "^3.0.0"75757576number-to-bn@1.7.0:7577 version "1.7.0"7578 resolved "https://registry.yarnpkg.com/number-to-bn/-/number-to-bn-1.7.0.tgz#bb3623592f7e5f9e0030b1977bd41a0c53fe1ea0"7579 integrity sha1-uzYjWS9+X54AMLGXe9QaDFP+HqA=7580 dependencies:7581 bn.js "4.11.6"7582 strip-hex-prefix "1.0.0"75837584nwsapi@^2.2.0:7585 version "2.2.0"7586 resolved "https://registry.yarnpkg.com/nwsapi/-/nwsapi-2.2.0.tgz#204879a9e3d068ff2a55139c2c772780681a38b7"7587 integrity sha512-h2AatdwYH+JHiZpv7pt/gSX1XoRGb7L/qSIeuqA6GwYoF9w1vP1cw42TO0aI2pNyshRK5893hNSl+1//vHK7hQ==75887589oauth-sign@~0.9.0:7590 version "0.9.0"7591 resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.9.0.tgz#47a7b016baa68b5fa0ecf3dee08a85c679ac6455"7592 integrity sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==75937594object-assign@^4, object-assign@^4.0.1, object-assign@^4.1.0, object-assign@^4.1.1:7595 version "4.1.1"7596 resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863"7597 integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=75987599object-inspect@^1.10.3, object-inspect@^1.9.0:7600 version "1.10.3"7601 resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.10.3.tgz#c2aa7d2d09f50c99375704f7a0adf24c5782d369"7602 integrity sha512-e5mCJlSH7poANfC8z8S9s9S2IN5/4Zb3aZ33f5s8YqoazCFzNLloLU8r5VCG+G7WoqLvAAZoVMcy3tp/3X0Plw==76037604object-inspect@^1.11.0:7605 version "1.11.0"7606 resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.11.0.tgz#9dceb146cedd4148a0d9e51ab88d34cf509922b1"7607 integrity sha512-jp7ikS6Sd3GxQfZJPyH3cjcbJF6GZPClgdV+EFygjFLQ5FmW/dRUnTd9PQ9k0JhoNDabWFbpF1yCdSWCC6gexg==76087609object-keys@^1.0.12, object-keys@^1.1.1:7610 version "1.1.1"7611 resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e"7612 integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==76137614object.assign@^4.1.0, object.assign@^4.1.2:7615 version "4.1.2"7616 resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.2.tgz#0ed54a342eceb37b38ff76eb831a0e788cb63940"7617 integrity sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==7618 dependencies:7619 call-bind "^1.0.0"7620 define-properties "^1.1.3"7621 has-symbols "^1.0.1"7622 object-keys "^1.1.1"76237624object.entries@^1.1.4:7625 version "1.1.4"7626 resolved "https://registry.yarnpkg.com/object.entries/-/object.entries-1.1.4.tgz#43ccf9a50bc5fd5b649d45ab1a579f24e088cafd"7627 integrity sha512-h4LWKWE+wKQGhtMjZEBud7uLGhqyLwj8fpHOarZhD2uY3C9cRtk57VQ89ke3moByLXMedqs3XCHzyb4AmA2DjA==7628 dependencies:7629 call-bind "^1.0.2"7630 define-properties "^1.1.3"7631 es-abstract "^1.18.2"76327633object.fromentries@^2.0.4:7634 version "2.0.4"7635 resolved "https://registry.yarnpkg.com/object.fromentries/-/object.fromentries-2.0.4.tgz#26e1ba5c4571c5c6f0890cef4473066456a120b8"7636 integrity sha512-EsFBshs5RUUpQEY1D4q/m59kMfz4YJvxuNCJcv/jWwOJr34EaVnG11ZrZa0UHB3wnzV1wx8m58T4hQL8IuNXlQ==7637 dependencies:7638 call-bind "^1.0.2"7639 define-properties "^1.1.3"7640 es-abstract "^1.18.0-next.2"7641 has "^1.0.3"76427643object.hasown@^1.0.0:7644 version "1.1.0"7645 resolved "https://registry.yarnpkg.com/object.hasown/-/object.hasown-1.1.0.tgz#7232ed266f34d197d15cac5880232f7a4790afe5"7646 integrity sha512-MhjYRfj3GBlhSkDHo6QmvgjRLXQ2zndabdf3nX0yTyZK9rPfxb6uRpAac8HXNLy1GpqWtZ81Qh4v3uOls2sRAg==7647 dependencies:7648 define-properties "^1.1.3"7649 es-abstract "^1.19.1"76507651object.values@^1.1.4:7652 version "1.1.4"7653 resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.1.4.tgz#0d273762833e816b693a637d30073e7051535b30"7654 integrity sha512-TnGo7j4XSnKQoK3MfvkzqKCi0nVe/D9I9IjwTNYdb/fxYHpjrluHVOgw0AF6jrRFGMPHdfuidR09tIDiIvnaSg==7655 dependencies:7656 call-bind "^1.0.2"7657 define-properties "^1.1.3"7658 es-abstract "^1.18.2"76597660object.values@^1.1.5:7661 version "1.1.5"7662 resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.1.5.tgz#959f63e3ce9ef108720333082131e4a459b716ac"7663 integrity sha512-QUZRW0ilQ3PnPpbNtgdNV1PDbEqLIiSFB3l+EnGtBQ/8SUTLj1PZwtQHABZtLgwpJZTSZhuGLOGk57Drx2IvYg==7664 dependencies:7665 call-bind "^1.0.2"7666 define-properties "^1.1.3"7667 es-abstract "^1.19.1"76687669oboe@2.1.5:7670 version "2.1.5"7671 resolved "https://registry.yarnpkg.com/oboe/-/oboe-2.1.5.tgz#5554284c543a2266d7a38f17e073821fbde393cd"7672 integrity sha1-VVQoTFQ6ImbXo48X4HOCH73jk80=7673 dependencies:7674 http-https "^1.0.0"76757676on-finished@~2.3.0:7677 version "2.3.0"7678 resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.3.0.tgz#20f1336481b083cd75337992a16971aa2d906947"7679 integrity sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=7680 dependencies:7681 ee-first "1.1.1"76827683once@^1.3.0, once@^1.3.1, once@^1.4.0:7684 version "1.4.0"7685 resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1"7686 integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E=7687 dependencies:7688 wrappy "1"76897690onetime@^5.1.0, onetime@^5.1.2:7691 version "5.1.2"7692 resolved "https://registry.yarnpkg.com/onetime/-/onetime-5.1.2.tgz#d0e96ebb56b07476df1dd9c4806e5237985ca45e"7693 integrity sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==7694 dependencies:7695 mimic-fn "^2.1.0"76967697optionator@^0.8.1:7698 version "0.8.3"7699 resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.3.tgz#84fa1d036fe9d3c7e21d99884b601167ec8fb495"7700 integrity sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==7701 dependencies:7702 deep-is "~0.1.3"7703 fast-levenshtein "~2.0.6"7704 levn "~0.3.0"7705 prelude-ls "~1.1.2"7706 type-check "~0.3.2"7707 word-wrap "~1.2.3"77087709optionator@^0.9.1:7710 version "0.9.1"7711 resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.1.tgz#4f236a6373dae0566a6d43e1326674f50c291499"7712 integrity sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==7713 dependencies:7714 deep-is "^0.1.3"7715 fast-levenshtein "^2.0.6"7716 levn "^0.4.1"7717 prelude-ls "^1.2.1"7718 type-check "^0.4.0"7719 word-wrap "^1.2.3"77207721ora@^4.0.5:7722 version "4.1.1"7723 resolved "https://registry.yarnpkg.com/ora/-/ora-4.1.1.tgz#566cc0348a15c36f5f0e979612842e02ba9dddbc"7724 integrity sha512-sjYP8QyVWBpBZWD6Vr1M/KwknSw6kJOz41tvGMlwWeClHBtYKTbHMki1PsLZnxKpXMPbTKv9b3pjQu3REib96A==7725 dependencies:7726 chalk "^3.0.0"7727 cli-cursor "^3.1.0"7728 cli-spinners "^2.2.0"7729 is-interactive "^1.0.0"7730 log-symbols "^3.0.0"7731 mute-stream "0.0.8"7732 strip-ansi "^6.0.0"7733 wcwidth "^1.0.1"77347735ora@^5.3.0, ora@^5.4.1:7736 version "5.4.1"7737 resolved "https://registry.yarnpkg.com/ora/-/ora-5.4.1.tgz#1b2678426af4ac4a509008e5e4ac9e9959db9e18"7738 integrity sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==7739 dependencies:7740 bl "^4.1.0"7741 chalk "^4.1.0"7742 cli-cursor "^3.1.0"7743 cli-spinners "^2.5.0"7744 is-interactive "^1.0.0"7745 is-unicode-supported "^0.1.0"7746 log-symbols "^4.1.0"7747 strip-ansi "^6.0.0"7748 wcwidth "^1.0.1"77497750os-tmpdir@~1.0.2:7751 version "1.0.2"7752 resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274"7753 integrity sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=77547755p-cancelable@^0.3.0:7756 version "0.3.0"7757 resolved "https://registry.yarnpkg.com/p-cancelable/-/p-cancelable-0.3.0.tgz#b9e123800bcebb7ac13a479be195b507b98d30fa"7758 integrity sha512-RVbZPLso8+jFeq1MfNvgXtCRED2raz/dKpacfTNxsx6pLEpEomM7gah6VeHSYV3+vo0OAi4MkArtQcWWXuQoyw==77597760p-cancelable@^1.0.0:7761 version "1.1.0"7762 resolved "https://registry.yarnpkg.com/p-cancelable/-/p-cancelable-1.1.0.tgz#d078d15a3af409220c886f1d9a0ca2e441ab26cc"7763 integrity sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw==77647765p-finally@^1.0.0:7766 version "1.0.0"7767 resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae"7768 integrity sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=77697770p-limit@^1.1.0:7771 version "1.3.0"7772 resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-1.3.0.tgz#b86bd5f0c25690911c7590fcbfc2010d54b3ccb8"7773 integrity sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==7774 dependencies:7775 p-try "^1.0.0"77767777p-limit@^2.0.0, p-limit@^2.2.0:7778 version "2.3.0"7779 resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1"7780 integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==7781 dependencies:7782 p-try "^2.0.0"77837784p-limit@^3.0.2:7785 version "3.1.0"7786 resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b"7787 integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==7788 dependencies:7789 yocto-queue "^0.1.0"77907791p-locate@^2.0.0:7792 version "2.0.0"7793 resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-2.0.0.tgz#20a0103b222a70c8fd39cc2e580680f3dde5ec43"7794 integrity sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=7795 dependencies:7796 p-limit "^1.1.0"77977798p-locate@^3.0.0:7799 version "3.0.0"7800 resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-3.0.0.tgz#322d69a05c0264b25997d9f40cd8a891ab0064a4"7801 integrity sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==7802 dependencies:7803 p-limit "^2.0.0"78047805p-locate@^4.1.0:7806 version "4.1.0"7807 resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-4.1.0.tgz#a3428bb7088b3a60292f66919278b7c297ad4f07"7808 integrity sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==7809 dependencies:7810 p-limit "^2.2.0"78117812p-locate@^5.0.0:7813 version "5.0.0"7814 resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-5.0.0.tgz#83c8315c6785005e3bd021839411c9e110e6d834"7815 integrity sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==7816 dependencies:7817 p-limit "^3.0.2"78187819p-timeout@^1.1.1:7820 version "1.2.1"7821 resolved "https://registry.yarnpkg.com/p-timeout/-/p-timeout-1.2.1.tgz#5eb3b353b7fce99f101a1038880bb054ebbea386"7822 integrity sha1-XrOzU7f86Z8QGhA4iAuwVOu+o4Y=7823 dependencies:7824 p-finally "^1.0.0"78257826p-try@^1.0.0:7827 version "1.0.0"7828 resolved "https://registry.yarnpkg.com/p-try/-/p-try-1.0.0.tgz#cbc79cdbaf8fd4228e13f621f2b1a237c1b207b3"7829 integrity sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=78307831p-try@^2.0.0:7832 version "2.2.0"7833 resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6"7834 integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==78357836package-json@^6.3.0:7837 version "6.5.0"7838 resolved "https://registry.yarnpkg.com/package-json/-/package-json-6.5.0.tgz#6feedaca35e75725876d0b0e64974697fed145b0"7839 integrity sha512-k3bdm2n25tkyxcjSKzB5x8kfVxlMdgsbPr0GkZcwHsLpba6cBjqCt1KlcChKEvxHIcTB1FVMuwoijZ26xex5MQ==7840 dependencies:7841 got "^9.6.0"7842 registry-auth-token "^4.0.0"7843 registry-url "^5.0.0"7844 semver "^6.2.0"78457846parent-module@^1.0.0:7847 version "1.0.1"7848 resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2"7849 integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==7850 dependencies:7851 callsites "^3.0.0"78527853parse-asn1@^5.0.0, parse-asn1@^5.1.5:7854 version "5.1.6"7855 resolved "https://registry.yarnpkg.com/parse-asn1/-/parse-asn1-5.1.6.tgz#385080a3ec13cb62a62d39409cb3e88844cdaed4"7856 integrity sha512-RnZRo1EPU6JBnra2vGHj0yhp6ebyjBZpmUCLHWiFhxlzvBCCpAuZ7elsBp1PVAbQN0/04VD/19rfzlBSwLstMw==7857 dependencies:7858 asn1.js "^5.2.0"7859 browserify-aes "^1.0.0"7860 evp_bytestokey "^1.0.0"7861 pbkdf2 "^3.0.3"7862 safe-buffer "^5.1.1"78637864parse-headers@^2.0.0:7865 version "2.0.3"7866 resolved "https://registry.yarnpkg.com/parse-headers/-/parse-headers-2.0.3.tgz#5e8e7512383d140ba02f0c7aa9f49b4399c92515"7867 integrity sha512-QhhZ+DCCit2Coi2vmAKbq5RGTRcQUOE2+REgv8vdyu7MnYx2eZztegqtTx99TZ86GTIwqiy3+4nQTWZ2tgmdCA==78687869parse-json@^5.0.0:7870 version "5.2.0"7871 resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-5.2.0.tgz#c76fc66dee54231c962b22bcc8a72cf2f99753cd"7872 integrity sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==7873 dependencies:7874 "@babel/code-frame" "^7.0.0"7875 error-ex "^1.3.1"7876 json-parse-even-better-errors "^2.3.0"7877 lines-and-columns "^1.1.6"78787879parse-ms@^2.1.0:7880 version "2.1.0"7881 resolved "https://registry.yarnpkg.com/parse-ms/-/parse-ms-2.1.0.tgz#348565a753d4391fa524029956b172cb7753097d"7882 integrity sha512-kHt7kzLoS9VBZfUsiKjv43mr91ea+U05EyKkEtqp7vNbHxmaVuEqN7XxeEVnGrMtYOAxGrDElSi96K7EgO1zCA==78837884parse5@6.0.1:7885 version "6.0.1"7886 resolved "https://registry.yarnpkg.com/parse5/-/parse5-6.0.1.tgz#e1a1c085c569b3dc08321184f19a39cc27f7c30b"7887 integrity sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==78887889parseurl@~1.3.3:7890 version "1.3.3"7891 resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4"7892 integrity sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==78937894path-exists@^3.0.0:7895 version "3.0.0"7896 resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515"7897 integrity sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=78987899path-exists@^4.0.0:7900 version "4.0.0"7901 resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3"7902 integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==79037904path-is-absolute@^1.0.0:7905 version "1.0.1"7906 resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f"7907 integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18=79087909path-key@^3.0.0, path-key@^3.1.0:7910 version "3.1.1"7911 resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375"7912 integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==79137914path-parse@^1.0.6:7915 version "1.0.7"7916 resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735"7917 integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==79187919path-to-regexp@0.1.7:7920 version "0.1.7"7921 resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c"7922 integrity sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=79237924path-type@^4.0.0:7925 version "4.0.0"7926 resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b"7927 integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==79287929pathval@^1.1.1:7930 version "1.1.1"7931 resolved "https://registry.yarnpkg.com/pathval/-/pathval-1.1.1.tgz#8534e77a77ce7ac5a2512ea21e0fdb8fcf6c3d8d"7932 integrity sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==79337934pbkdf2@^3.0.17, pbkdf2@^3.0.3:7935 version "3.1.2"7936 resolved "https://registry.yarnpkg.com/pbkdf2/-/pbkdf2-3.1.2.tgz#dd822aa0887580e52f1a039dc3eda108efae3075"7937 integrity sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA==7938 dependencies:7939 create-hash "^1.1.2"7940 create-hmac "^1.1.4"7941 ripemd160 "^2.0.1"7942 safe-buffer "^5.0.1"7943 sha.js "^2.4.8"79447945performance-now@^2.1.0:7946 version "2.1.0"7947 resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b"7948 integrity sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=79497950picocolors@^1.0.0:7951 version "1.0.0"7952 resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c"7953 integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==79547955picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.2.2, picomatch@^2.2.3:7956 version "2.3.0"7957 resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.0.tgz#f1f061de8f6a4bf022892e2d128234fb98302972"7958 integrity sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==79597960pify@^2.0.0:7961 version "2.3.0"7962 resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c"7963 integrity sha1-7RQaasBDqEnqWISY59yosVMw6Qw=79647965pify@^4.0.1:7966 version "4.0.1"7967 resolved "https://registry.yarnpkg.com/pify/-/pify-4.0.1.tgz#4b2cd25c50d598735c50292224fd8c6df41e3231"7968 integrity sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==79697970pinkie-promise@^2.0.0:7971 version "2.0.1"7972 resolved "https://registry.yarnpkg.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa"7973 integrity sha1-ITXW36ejWMBprJsXh3YogihFD/o=7974 dependencies:7975 pinkie "^2.0.0"79767977pinkie@^2.0.0:7978 version "2.0.4"7979 resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870"7980 integrity sha1-clVrgM+g1IqXToDnckjoDtT3+HA=79817982pirates@^4.0.0, pirates@^4.0.1:7983 version "4.0.1"7984 resolved "https://registry.yarnpkg.com/pirates/-/pirates-4.0.1.tgz#643a92caf894566f91b2b986d2c66950a8e2fb87"7985 integrity sha512-WuNqLTbMI3tmfef2TKxlQmAiLHKtFhlsCZnPIpuv2Ow0RDVO8lfy1Opf4NUzlMXLjPl+Men7AuVdX6TA+s+uGA==7986 dependencies:7987 node-modules-regexp "^1.0.0"79887989pkg-dir@^2.0.0:7990 version "2.0.0"7991 resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-2.0.0.tgz#f6d5d1109e19d63edf428e0bd57e12777615334b"7992 integrity sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s=7993 dependencies:7994 find-up "^2.1.0"79957996pkg-dir@^3.0.0:7997 version "3.0.0"7998 resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-3.0.0.tgz#2749020f239ed990881b1f71210d51eb6523bea3"7999 integrity sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==8000 dependencies:8001 find-up "^3.0.0"80028003pkg-dir@^4.1.0, pkg-dir@^4.2.0:8004 version "4.2.0"8005 resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-4.2.0.tgz#f099133df7ede422e81d1d8448270eeb3e4261f3"8006 integrity sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==8007 dependencies:8008 find-up "^4.0.0"80098010pkg-up@^3.1.0:8011 version "3.1.0"8012 resolved "https://registry.yarnpkg.com/pkg-up/-/pkg-up-3.1.0.tgz#100ec235cc150e4fd42519412596a28512a0def5"8013 integrity sha512-nDywThFk1i4BQK4twPQ6TA4RT8bDY96yeuCVBWL3ePARCiEKDRSrNGbFIgUJpLp+XeIR65v8ra7WuJOFUBtkMA==8014 dependencies:8015 find-up "^3.0.0"80168017pluralize@^8.0.0:8018 version "8.0.0"8019 resolved "https://registry.yarnpkg.com/pluralize/-/pluralize-8.0.0.tgz#1a6fa16a38d12a1901e0320fa017051c539ce3b1"8020 integrity sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==80218022postcss-selector-parser@^6.0.2:8023 version "6.0.6"8024 resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.0.6.tgz#2c5bba8174ac2f6981ab631a42ab0ee54af332ea"8025 integrity sha512-9LXrvaaX3+mcv5xkg5kFwqSzSH1JIObIx51PrndZwlmznwXRfxMddDvo9gve3gVR8ZTKgoFDdWkbRFmEhT4PMg==8026 dependencies:8027 cssesc "^3.0.0"8028 util-deprecate "^1.0.2"80298030postcss-values-parser@^2.0.1:8031 version "2.0.1"8032 resolved "https://registry.yarnpkg.com/postcss-values-parser/-/postcss-values-parser-2.0.1.tgz#da8b472d901da1e205b47bdc98637b9e9e550e5f"8033 integrity sha512-2tLuBsA6P4rYTNKCXYG/71C7j1pU6pK503suYOmn4xYrQIzW+opD+7FAFNuGSdZC/3Qfy334QbeMu7MEb8gOxg==8034 dependencies:8035 flatten "^1.0.2"8036 indexes-of "^1.0.1"8037 uniq "^1.0.1"80388039postcss-values-parser@^5.0.0:8040 version "5.0.0"8041 resolved "https://registry.yarnpkg.com/postcss-values-parser/-/postcss-values-parser-5.0.0.tgz#10c61ac3f488e4de25746b829ea8d8894e9ac3d2"8042 integrity sha512-2viDDjMMrt21W2izbeiJxl3kFuD/+asgB0CBwPEgSyhCmBnDIa/y+pLaoyX+q3I3DHH0oPPL3cgjVTQvlS1Maw==8043 dependencies:8044 color-name "^1.1.4"8045 is-url-superb "^4.0.0"8046 quote-unquote "^1.0.0"80478048postcss@^7.0.36:8049 version "7.0.36"8050 resolved "https://registry.yarnpkg.com/postcss/-/postcss-7.0.36.tgz#056f8cffa939662a8f5905950c07d5285644dfcb"8051 integrity sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==8052 dependencies:8053 chalk "^2.4.2"8054 source-map "^0.6.1"8055 supports-color "^6.1.0"80568057postcss@^8.1.7:8058 version "8.3.5"8059 resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.3.5.tgz#982216b113412bc20a86289e91eb994952a5b709"8060 integrity sha512-NxTuJocUhYGsMiMFHDUkmjSKT3EdH4/WbGF6GCi1NDGk+vbcUTun4fpbOqaPtD8IIsztA2ilZm2DhYCuyN58gA==8061 dependencies:8062 colorette "^1.2.2"8063 nanoid "^3.1.23"8064 source-map-js "^0.6.2"80658066postcss@^8.2.13:8067 version "8.3.6"8068 resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.3.6.tgz#2730dd76a97969f37f53b9a6096197be311cc4ea"8069 integrity sha512-wG1cc/JhRgdqB6WHEuyLTedf3KIRuD0hG6ldkFEZNCjRxiC+3i6kkWUUbiJQayP28iwG35cEmAbe98585BYV0A==8070 dependencies:8071 colorette "^1.2.2"8072 nanoid "^3.1.23"8073 source-map-js "^0.6.2"80748075precinct@^8.0.0, precinct@^8.1.0:8076 version "8.1.0"8077 resolved "https://registry.yarnpkg.com/precinct/-/precinct-8.1.0.tgz#6b8f2389ba2ca61c466731390b0d7e25da3fd996"8078 integrity sha512-oeZBR9IdER42Ef6Rz11z1oOUqicsI5J1Qffj6tYghKLhxN2UnHy7uE1axxNr0VZRevPK2HWkROk36uXrbJwHFA==8079 dependencies:8080 commander "^2.20.3"8081 debug "^4.3.1"8082 detective-amd "^3.0.1"8083 detective-cjs "^3.1.1"8084 detective-es6 "^2.2.0"8085 detective-less "^1.0.2"8086 detective-postcss "^4.0.0"8087 detective-sass "^3.0.1"8088 detective-scss "^2.0.1"8089 detective-stylus "^1.0.0"8090 detective-typescript "^7.0.0"8091 module-definition "^3.3.1"8092 node-source-walk "^4.2.0"80938094prelude-ls@^1.2.1:8095 version "1.2.1"8096 resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396"8097 integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==80988099prelude-ls@~1.1.2:8100 version "1.1.2"8101 resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54"8102 integrity sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=81038104prepend-http@^1.0.1:8105 version "1.0.4"8106 resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-1.0.4.tgz#d4f4562b0ce3696e41ac52d0e002e57a635dc6dc"8107 integrity sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw=81088109prepend-http@^2.0.0:8110 version "2.0.0"8111 resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-2.0.0.tgz#e92434bfa5ea8c19f41cdfd401d741a3c819d897"8112 integrity sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc=81138114prettier@^1.18.2:8115 version "1.19.1"8116 resolved "https://registry.yarnpkg.com/prettier/-/prettier-1.19.1.tgz#f7d7f5ff8a9cd872a7be4ca142095956a60797cb"8117 integrity sha512-s7PoyDv/II1ObgQunCbB9PdLmUcBZcnWOcxDh7O0N/UwDEsHyqkW+Qh28jW+mVuCdx7gLB0BotYI1Y6uI9iyew==81188119prettier@^2.4.1:8120 version "2.4.1"8121 resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.4.1.tgz#671e11c89c14a4cfc876ce564106c4a6726c9f5c"8122 integrity sha512-9fbDAXSBcc6Bs1mZrDYb3XKzDLm4EXXL9sC1LqKP5rZkT6KRr/rf9amVUcODVXgguK/isJz0d0hP72WeaKWsvA==81238124pretty-format@^27.3.1:8125 version "27.3.1"8126 resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-27.3.1.tgz#7e9486365ccdd4a502061fa761d3ab9ca1b78df5"8127 integrity sha512-DR/c+pvFc52nLimLROYjnXPtolawm+uWDxr4FjuLDLUn+ktWnSN851KoHwHzzqq6rfCOjkzN8FLgDrSub6UDuA==8128 dependencies:8129 "@jest/types" "^27.2.5"8130 ansi-regex "^5.0.1"8131 ansi-styles "^5.0.0"8132 react-is "^17.0.1"81338134pretty-ms@^7.0.1:8135 version "7.0.1"8136 resolved "https://registry.yarnpkg.com/pretty-ms/-/pretty-ms-7.0.1.tgz#7d903eaab281f7d8e03c66f867e239dc32fb73e8"8137 integrity sha512-973driJZvxiGOQ5ONsFhOF/DtzPMOMtgC11kCpUrPGMTgqp2q/1gwzCquocrN33is0VZ5GFHXZYMM9l6h67v2Q==8138 dependencies:8139 parse-ms "^2.1.0"81408141printj@~1.1.0:8142 version "1.1.2"8143 resolved "https://registry.yarnpkg.com/printj/-/printj-1.1.2.tgz#d90deb2975a8b9f600fb3a1c94e3f4c53c78a222"8144 integrity sha512-zA2SmoLaxZyArQTOPj5LXecR+RagfPSU5Kw1qP+jkWeNlrq+eJZyY2oS68SU1Z/7/myXM4lo9716laOFAVStCQ==81458146process-nextick-args@~2.0.0:8147 version "2.0.1"8148 resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2"8149 integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==81508151process@^0.11.10:8152 version "0.11.10"8153 resolved "https://registry.yarnpkg.com/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182"8154 integrity sha1-czIwDoQBYb2j5podHZGn1LwW8YI=81558156progress-stream@^2.0.0:8157 version "2.0.0"8158 resolved "https://registry.yarnpkg.com/progress-stream/-/progress-stream-2.0.0.tgz#fac63a0b3d11deacbb0969abcc93b214bce19ed5"8159 integrity sha1-+sY6Cz0R3qy7CWmrzJOyFLzhntU=8160 dependencies:8161 speedometer "~1.0.0"8162 through2 "~2.0.3"81638164progress@^2.0.0:8165 version "2.0.3"8166 resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8"8167 integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==81688169prompts@^2.0.1:8170 version "2.4.1"8171 resolved "https://registry.yarnpkg.com/prompts/-/prompts-2.4.1.tgz#befd3b1195ba052f9fd2fde8a486c4e82ee77f61"8172 integrity sha512-EQyfIuO2hPDsX1L/blblV+H7I0knhgAd82cVneCwcdND9B8AuCDuRcBH6yIcG4dFzlOUqbazQqwGjx5xmsNLuQ==8173 dependencies:8174 kleur "^3.0.3"8175 sisteransi "^1.0.5"81768177prop-types@^15.7.2:8178 version "15.7.2"8179 resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.7.2.tgz#52c41e75b8c87e72b9d9360e0206b99dcbffa6c5"8180 integrity sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ==8181 dependencies:8182 loose-envify "^1.4.0"8183 object-assign "^4.1.1"8184 react-is "^16.8.1"81858186proxy-addr@~2.0.5:8187 version "2.0.7"8188 resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.7.tgz#f19fe69ceab311eeb94b42e70e8c2070f9ba1025"8189 integrity sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==8190 dependencies:8191 forwarded "0.2.0"8192 ipaddr.js "1.9.1"81938194pseudomap@^1.0.2:8195 version "1.0.2"8196 resolved "https://registry.yarnpkg.com/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3"8197 integrity sha1-8FKijacOYYkX7wqKw0wa5aaChrM=81988199psl@^1.1.28, psl@^1.1.33:8200 version "1.8.0"8201 resolved "https://registry.yarnpkg.com/psl/-/psl-1.8.0.tgz#9326f8bcfb013adcc005fdff056acce020e51c24"8202 integrity sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==82038204public-encrypt@^4.0.0:8205 version "4.0.3"8206 resolved "https://registry.yarnpkg.com/public-encrypt/-/public-encrypt-4.0.3.tgz#4fcc9d77a07e48ba7527e7cbe0de33d0701331e0"8207 integrity sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==8208 dependencies:8209 bn.js "^4.1.0"8210 browserify-rsa "^4.0.0"8211 create-hash "^1.1.0"8212 parse-asn1 "^5.0.0"8213 randombytes "^2.0.1"8214 safe-buffer "^5.1.2"82158216pump@^3.0.0:8217 version "3.0.0"8218 resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64"8219 integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==8220 dependencies:8221 end-of-stream "^1.1.0"8222 once "^1.3.1"82238224pumpify@^2.0.1:8225 version "2.0.1"8226 resolved "https://registry.yarnpkg.com/pumpify/-/pumpify-2.0.1.tgz#abfc7b5a621307c728b551decbbefb51f0e4aa1e"8227 integrity sha512-m7KOje7jZxrmutanlkS1daj1dS6z6BgslzOXmcSEpIlCxM3VJH7lG5QLeck/6hgF6F4crFf01UtQmNsJfweTAw==8228 dependencies:8229 duplexify "^4.1.1"8230 inherits "^2.0.3"8231 pump "^3.0.0"82328233punycode@2.1.0:8234 version "2.1.0"8235 resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.0.tgz#5f863edc89b96db09074bad7947bf09056ca4e7d"8236 integrity sha1-X4Y+3Im5bbCQdLrXlHvwkFbKTn0=82378238punycode@^2.1.0, punycode@^2.1.1:8239 version "2.1.1"8240 resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec"8241 integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==82428243pupa@^2.1.1:8244 version "2.1.1"8245 resolved "https://registry.yarnpkg.com/pupa/-/pupa-2.1.1.tgz#f5e8fd4afc2c5d97828faa523549ed8744a20d62"8246 integrity sha512-l1jNAspIBSFqbT+y+5FosojNpVpF94nlI+wDUpqP9enwOTfHx9f0gh5nB96vl+6yTpsJsypeNrwfzPrKuHB41A==8247 dependencies:8248 escape-goat "^2.0.0"82498250qs@6.7.0:8251 version "6.7.0"8252 resolved "https://registry.yarnpkg.com/qs/-/qs-6.7.0.tgz#41dc1a015e3d581f1621776be31afb2876a9b1bc"8253 integrity sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==82548255qs@~6.5.2:8256 version "6.5.2"8257 resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.2.tgz#cb3ae806e8740444584ef154ce8ee98d403f3e36"8258 integrity sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==82598260query-string@^5.0.1:8261 version "5.1.1"8262 resolved "https://registry.yarnpkg.com/query-string/-/query-string-5.1.1.tgz#a78c012b71c17e05f2e3fa2319dd330682efb3cb"8263 integrity sha512-gjWOsm2SoGlgLEdAGt7a6slVOk9mGiXmPFMqrEhLQ68rhQuBnpfs3+EmlvqKyxnCo9/PPlF+9MtY02S1aFg+Jw==8264 dependencies:8265 decode-uri-component "^0.2.0"8266 object-assign "^4.1.0"8267 strict-uri-encode "^1.0.0"82688269queue-microtask@^1.2.2:8270 version "1.2.3"8271 resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243"8272 integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==82738274quote-unquote@^1.0.0:8275 version "1.0.0"8276 resolved "https://registry.yarnpkg.com/quote-unquote/-/quote-unquote-1.0.0.tgz#67a9a77148effeaf81a4d428404a710baaac8a0b"8277 integrity sha1-Z6mncUjv/q+BpNQoQEpxC6qsigs=82788279randombytes@^2.0.0, randombytes@^2.0.1, randombytes@^2.0.5, randombytes@^2.1.0:8280 version "2.1.0"8281 resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a"8282 integrity sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==8283 dependencies:8284 safe-buffer "^5.1.0"82858286randomfill@^1.0.3:8287 version "1.0.4"8288 resolved "https://registry.yarnpkg.com/randomfill/-/randomfill-1.0.4.tgz#c92196fc86ab42be983f1bf31778224931d61458"8289 integrity sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==8290 dependencies:8291 randombytes "^2.0.5"8292 safe-buffer "^5.1.0"82938294range-parser@~1.2.1:8295 version "1.2.1"8296 resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031"8297 integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==82988299raw-body@2.4.0:8300 version "2.4.0"8301 resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.4.0.tgz#a1ce6fb9c9bc356ca52e89256ab59059e13d0332"8302 integrity sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==8303 dependencies:8304 bytes "3.1.0"8305 http-errors "1.7.2"8306 iconv-lite "0.4.24"8307 unpipe "1.0.0"83088309rc@^1.2.7, rc@^1.2.8:8310 version "1.2.8"8311 resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed"8312 integrity sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==8313 dependencies:8314 deep-extend "^0.6.0"8315 ini "~1.3.0"8316 minimist "^1.2.0"8317 strip-json-comments "~2.0.1"83188319react-is@^16.8.1:8320 version "16.13.1"8321 resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4"8322 integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==83238324react-is@^17.0.1:8325 version "17.0.2"8326 resolved "https://registry.yarnpkg.com/react-is/-/react-is-17.0.2.tgz#e691d4a8e9c789365655539ab372762b0efb54f0"8327 integrity sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==83288329read@^1.0.7:8330 version "1.0.7"8331 resolved "https://registry.yarnpkg.com/read/-/read-1.0.7.tgz#b3da19bd052431a97671d44a42634adf710b40c4"8332 integrity sha1-s9oZvQUkMal2cdRKQmNK33ELQMQ=8333 dependencies:8334 mute-stream "~0.0.4"83358336readable-stream@^3.1.1, readable-stream@^3.4.0, readable-stream@^3.6.0:8337 version "3.6.0"8338 resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.0.tgz#337bbda3adc0706bd3e024426a286d4b4b2c9198"8339 integrity sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==8340 dependencies:8341 inherits "^2.0.3"8342 string_decoder "^1.1.1"8343 util-deprecate "^1.0.1"83448345readable-stream@~2.3.6:8346 version "2.3.7"8347 resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57"8348 integrity sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==8349 dependencies:8350 core-util-is "~1.0.0"8351 inherits "~2.0.3"8352 isarray "~1.0.0"8353 process-nextick-args "~2.0.0"8354 safe-buffer "~5.1.1"8355 string_decoder "~1.1.1"8356 util-deprecate "~1.0.1"83578358readdirp@~3.6.0:8359 version "3.6.0"8360 resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7"8361 integrity sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==8362 dependencies:8363 picomatch "^2.2.1"83648365rechoir@^0.6.2:8366 version "0.6.2"8367 resolved "https://registry.yarnpkg.com/rechoir/-/rechoir-0.6.2.tgz#85204b54dba82d5742e28c96756ef43af50e3384"8368 integrity sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q=8369 dependencies:8370 resolve "^1.1.6"83718372regenerate-unicode-properties@^8.2.0:8373 version "8.2.0"8374 resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-8.2.0.tgz#e5de7111d655e7ba60c057dbe9ff37c87e65cdec"8375 integrity sha512-F9DjY1vKLo/tPePDycuH3dn9H1OTPIkVD9Kz4LODu+F2C75mgjAJ7x/gwy6ZcSNRAAkhNlJSOHRe8k3p+K9WhA==8376 dependencies:8377 regenerate "^1.4.0"83788379regenerate@^1.4.0:8380 version "1.4.2"8381 resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.4.2.tgz#b9346d8827e8f5a32f7ba29637d398b69014848a"8382 integrity sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==83838384regenerator-runtime@^0.13.4:8385 version "0.13.7"8386 resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.7.tgz#cac2dacc8a1ea675feaabaeb8ae833898ae46f55"8387 integrity sha512-a54FxoJDIr27pgf7IgeQGxmqUNYrcV338lf/6gH456HZ/PhX+5BcwHXG9ajESmwe6WRO0tAzRUrRmNONWgkrew==83888389regenerator-transform@^0.14.2:8390 version "0.14.5"8391 resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.14.5.tgz#c98da154683671c9c4dcb16ece736517e1b7feb4"8392 integrity sha512-eOf6vka5IO151Jfsw2NO9WpGX58W6wWmefK3I1zEGr0lOD0u8rwPaNqQL1aRxUaxLeKO3ArNh3VYg1KbaD+FFw==8393 dependencies:8394 "@babel/runtime" "^7.8.4"83958396regexp.prototype.flags@^1.3.1:8397 version "1.3.1"8398 resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.3.1.tgz#7ef352ae8d159e758c0eadca6f8fcb4eef07be26"8399 integrity sha512-JiBdRBq91WlY7uRJ0ds7R+dU02i6LKi8r3BuQhNXn+kmeLN+EfHhfjqMRis1zJxnlu88hq/4dx0P2OP3APRTOA==8400 dependencies:8401 call-bind "^1.0.2"8402 define-properties "^1.1.3"84038404regexpp@^3.0.0, regexpp@^3.2.0:8405 version "3.2.0"8406 resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-3.2.0.tgz#0425a2768d8f23bad70ca4b90461fa2f1213e1b2"8407 integrity sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==84088409regexpu-core@^4.7.1:8410 version "4.7.1"8411 resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-4.7.1.tgz#2dea5a9a07233298fbf0db91fa9abc4c6e0f8ad6"8412 integrity sha512-ywH2VUraA44DZQuRKzARmw6S66mr48pQVva4LBeRhcOltJ6hExvWly5ZjFLYo67xbIxb6W1q4bAGtgfEl20zfQ==8413 dependencies:8414 regenerate "^1.4.0"8415 regenerate-unicode-properties "^8.2.0"8416 regjsgen "^0.5.1"8417 regjsparser "^0.6.4"8418 unicode-match-property-ecmascript "^1.0.4"8419 unicode-match-property-value-ecmascript "^1.2.0"84208421registry-auth-token@^4.0.0:8422 version "4.2.1"8423 resolved "https://registry.yarnpkg.com/registry-auth-token/-/registry-auth-token-4.2.1.tgz#6d7b4006441918972ccd5fedcd41dc322c79b250"8424 integrity sha512-6gkSb4U6aWJB4SF2ZvLb76yCBjcvufXBqvvEx1HbmKPkutswjW1xNVRY0+daljIYRbogN7O0etYSlbiaEQyMyw==8425 dependencies:8426 rc "^1.2.8"84278428registry-url@^5.0.0:8429 version "5.1.0"8430 resolved "https://registry.yarnpkg.com/registry-url/-/registry-url-5.1.0.tgz#e98334b50d5434b81136b44ec638d9c2009c5009"8431 integrity sha512-8acYXXTI0AkQv6RAOjE3vOaIXZkT9wo4LOFbBKYQEEnnMNBpKqdUrI6S4NT0KPIo/WVvJ5tE/X5LF/TQUf0ekw==8432 dependencies:8433 rc "^1.2.8"84348435regjsgen@^0.5.1:8436 version "0.5.2"8437 resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.5.2.tgz#92ff295fb1deecbf6ecdab2543d207e91aa33733"8438 integrity sha512-OFFT3MfrH90xIW8OOSyUrk6QHD5E9JOTeGodiJeBS3J6IwlgzJMNE/1bZklWz5oTg+9dCMyEetclvCVXOPoN3A==84398440regjsparser@^0.6.4:8441 version "0.6.9"8442 resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.6.9.tgz#b489eef7c9a2ce43727627011429cf833a7183e6"8443 integrity sha512-ZqbNRz1SNjLAiYuwY0zoXW8Ne675IX5q+YHioAGbCw4X96Mjl2+dcX9B2ciaeyYjViDAfvIjFpQjJgLttTEERQ==8444 dependencies:8445 jsesc "~0.5.0"84468447remove-markdown@^0.2.2:8448 version "0.2.2"8449 resolved "https://registry.yarnpkg.com/remove-markdown/-/remove-markdown-0.2.2.tgz#66b0ceeba9fb77ca9636bb1b0307ce21a32a12a6"8450 integrity sha1-ZrDO66n7d8qWNrsbAwfOIaMqEqY=84518452request@^2.79.0, request@^2.88.2:8453 version "2.88.2"8454 resolved "https://registry.yarnpkg.com/request/-/request-2.88.2.tgz#d73c918731cb5a87da047e207234146f664d12b3"8455 integrity sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==8456 dependencies:8457 aws-sign2 "~0.7.0"8458 aws4 "^1.8.0"8459 caseless "~0.12.0"8460 combined-stream "~1.0.6"8461 extend "~3.0.2"8462 forever-agent "~0.6.1"8463 form-data "~2.3.2"8464 har-validator "~5.1.3"8465 http-signature "~1.2.0"8466 is-typedarray "~1.0.0"8467 isstream "~0.1.2"8468 json-stringify-safe "~5.0.1"8469 mime-types "~2.1.19"8470 oauth-sign "~0.9.0"8471 performance-now "^2.1.0"8472 qs "~6.5.2"8473 safe-buffer "^5.1.2"8474 tough-cookie "~2.5.0"8475 tunnel-agent "^0.6.0"8476 uuid "^3.3.2"84778478require-directory@^2.1.1:8479 version "2.1.1"8480 resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42"8481 integrity sha1-jGStX9MNqxyXbiNE/+f3kqam30I=84828483require-from-string@^2.0.0:8484 version "2.0.2"8485 resolved "https://registry.yarnpkg.com/require-from-string/-/require-from-string-2.0.2.tgz#89a7fdd938261267318eafe14f9c32e598c36909"8486 integrity sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==84878488requirejs-config-file@^4.0.0:8489 version "4.0.0"8490 resolved "https://registry.yarnpkg.com/requirejs-config-file/-/requirejs-config-file-4.0.0.tgz#4244da5dd1f59874038cc1091d078d620abb6ebc"8491 integrity sha512-jnIre8cbWOyvr8a5F2KuqBnY+SDA4NXr/hzEZJG79Mxm2WiFQz2dzhC8ibtPJS7zkmBEl1mxSwp5HhC1W4qpxw==8492 dependencies:8493 esprima "^4.0.0"8494 stringify-object "^3.2.1"84958496requirejs@^2.3.5:8497 version "2.3.6"8498 resolved "https://registry.yarnpkg.com/requirejs/-/requirejs-2.3.6.tgz#e5093d9601c2829251258c0b9445d4d19fa9e7c9"8499 integrity sha512-ipEzlWQe6RK3jkzikgCupiTbTvm4S0/CAU5GlgptkN5SO6F3u0UD0K18wy6ErDqiCyP4J4YYe1HuAShvsxePLg==85008501reselect@^4.0.0:8502 version "4.0.0"8503 resolved "https://registry.yarnpkg.com/reselect/-/reselect-4.0.0.tgz#f2529830e5d3d0e021408b246a206ef4ea4437f7"8504 integrity sha512-qUgANli03jjAyGlnbYVAV5vvnOmJnODyABz51RdBN7M4WaVu8mecZWgyQNkG8Yqe3KRGRt0l4K4B3XVEULC4CA==85058506resolve-cwd@^3.0.0:8507 version "3.0.0"8508 resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-3.0.0.tgz#0f0075f1bb2544766cf73ba6a6e2adfebcb13f2d"8509 integrity sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==8510 dependencies:8511 resolve-from "^5.0.0"85128513resolve-dependency-path@^2.0.0:8514 version "2.0.0"8515 resolved "https://registry.yarnpkg.com/resolve-dependency-path/-/resolve-dependency-path-2.0.0.tgz#11700e340717b865d216c66cabeb4a2a3c696736"8516 integrity sha512-DIgu+0Dv+6v2XwRaNWnumKu7GPufBBOr5I1gRPJHkvghrfCGOooJODFvgFimX/KRxk9j0whD2MnKHzM1jYvk9w==85178518resolve-from@^4.0.0:8519 version "4.0.0"8520 resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6"8521 integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==85228523resolve-from@^5.0.0:8524 version "5.0.0"8525 resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-5.0.0.tgz#c35225843df8f776df21c57557bc087e9dfdfc69"8526 integrity sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==85278528resolve.exports@^1.1.0:8529 version "1.1.0"8530 resolved "https://registry.yarnpkg.com/resolve.exports/-/resolve.exports-1.1.0.tgz#5ce842b94b05146c0e03076985d1d0e7e48c90c9"8531 integrity sha512-J1l+Zxxp4XK3LUDZ9m60LRJF/mAe4z6a4xyabPHk7pvK5t35dACV32iIjJDFeWZFfZlO29w6SZ67knR0tHzJtQ==85328533resolve@^1.1.6, resolve@^1.10.1, resolve@^1.13.1, resolve@^1.14.2, resolve@^1.17.0, resolve@^1.19.0, resolve@^1.20.0, resolve@^1.3.2:8534 version "1.20.0"8535 resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.20.0.tgz#629a013fb3f70755d6f0b7935cc1c2c5378b1975"8536 integrity sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==8537 dependencies:8538 is-core-module "^2.2.0"8539 path-parse "^1.0.6"85408541resolve@^2.0.0-next.3:8542 version "2.0.0-next.3"8543 resolved "https://registry.yarnpkg.com/resolve/-/resolve-2.0.0-next.3.tgz#d41016293d4a8586a39ca5d9b5f15cbea1f55e46"8544 integrity sha512-W8LucSynKUIDu9ylraa7ueVZ7hc0uAgJBxVsQSKOXOyle8a93qXhcz+XAXZ8bIq2d6i4Ehddn6Evt+0/UwKk6Q==8545 dependencies:8546 is-core-module "^2.2.0"8547 path-parse "^1.0.6"85488549responselike@^1.0.2:8550 version "1.0.2"8551 resolved "https://registry.yarnpkg.com/responselike/-/responselike-1.0.2.tgz#918720ef3b631c5642be068f15ade5a46f4ba1e7"8552 integrity sha1-kYcg7ztjHFZCvgaPFa3lpG9Loec=8553 dependencies:8554 lowercase-keys "^1.0.0"85558556restore-cursor@^3.1.0:8557 version "3.1.0"8558 resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-3.1.0.tgz#39f67c54b3a7a58cea5236d95cf0034239631f7e"8559 integrity sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==8560 dependencies:8561 onetime "^5.1.0"8562 signal-exit "^3.0.2"85638564reusify@^1.0.4:8565 version "1.0.4"8566 resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76"8567 integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==85688569rimraf@^2.2.8:8570 version "2.7.1"8571 resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec"8572 integrity sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==8573 dependencies:8574 glob "^7.1.3"85758576rimraf@^3.0.0, rimraf@^3.0.2:8577 version "3.0.2"8578 resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a"8579 integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==8580 dependencies:8581 glob "^7.1.3"85828583ripemd160@^2.0.0, ripemd160@^2.0.1:8584 version "2.0.2"8585 resolved "https://registry.yarnpkg.com/ripemd160/-/ripemd160-2.0.2.tgz#a1c1a6f624751577ba5d07914cbc92850585890c"8586 integrity sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==8587 dependencies:8588 hash-base "^3.0.0"8589 inherits "^2.0.1"85908591rlp@^2.2.4:8592 version "2.2.7"8593 resolved "https://registry.yarnpkg.com/rlp/-/rlp-2.2.7.tgz#33f31c4afac81124ac4b283e2bd4d9720b30beaf"8594 integrity sha512-d5gdPmgQ0Z+AklL2NVXr/IoSjNZFfTVvQWzL/AM2AOcSzYP2xjlb0AC8YyCLc41MSNf6P6QVtjgPdmVtzb+4lQ==8595 dependencies:8596 bn.js "^5.2.0"85978598rollup@^2.58.0:8599 version "2.58.3"8600 resolved "https://registry.yarnpkg.com/rollup/-/rollup-2.58.3.tgz#71a08138d9515fb65043b6a18618b2ed9ac8d239"8601 integrity sha512-ei27MSw1KhRur4p87Q0/Va2NAYqMXOX++FNEumMBcdreIRLURKy+cE2wcDJKBn0nfmhP2ZGrJkP1XPO+G8FJQw==8602 optionalDependencies:8603 fsevents "~2.3.2"86048605run-async@^2.4.0:8606 version "2.4.1"8607 resolved "https://registry.yarnpkg.com/run-async/-/run-async-2.4.1.tgz#8440eccf99ea3e70bd409d49aab88e10c189a455"8608 integrity sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==86098610run-parallel@^1.1.9:8611 version "1.2.0"8612 resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee"8613 integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==8614 dependencies:8615 queue-microtask "^1.2.2"86168617rxjs@^6.6.6:8618 version "6.6.7"8619 resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.6.7.tgz#90ac018acabf491bf65044235d5863c4dab804c9"8620 integrity sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==8621 dependencies:8622 tslib "^1.9.0"86238624rxjs@^7.4.0:8625 version "7.4.0"8626 resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-7.4.0.tgz#a12a44d7eebf016f5ff2441b87f28c9a51cebc68"8627 integrity sha512-7SQDi7xeTMCJpqViXh8gL/lebcwlp3d831F05+9B44A4B0WfsEwUQHR64gsH1kvJ+Ep/J9K2+n1hVl1CsGN23w==8628 dependencies:8629 tslib "~2.1.0"86308631safe-buffer@5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1:8632 version "5.1.2"8633 resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d"8634 integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==86358636safe-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.0:8637 version "5.2.1"8638 resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6"8639 integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==86408641"safer-buffer@>= 2.1.2 < 3", safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@~2.1.0:8642 version "2.1.2"8643 resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a"8644 integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==86458646sass-lookup@^3.0.0:8647 version "3.0.0"8648 resolved "https://registry.yarnpkg.com/sass-lookup/-/sass-lookup-3.0.0.tgz#3b395fa40569738ce857bc258e04df2617c48cac"8649 integrity sha512-TTsus8CfFRn1N44bvdEai1no6PqdmDiQUiqW5DlpmtT+tYnIt1tXtDIph5KA1efC+LmioJXSnCtUVpcK9gaKIg==8650 dependencies:8651 commander "^2.16.0"86528653saxes@^5.0.1:8654 version "5.0.1"8655 resolved "https://registry.yarnpkg.com/saxes/-/saxes-5.0.1.tgz#eebab953fa3b7608dbe94e5dadb15c888fa6696d"8656 integrity sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw==8657 dependencies:8658 xmlchars "^2.2.0"86598660scrypt-js@^3.0.0, scrypt-js@^3.0.1:8661 version "3.0.1"8662 resolved "https://registry.yarnpkg.com/scrypt-js/-/scrypt-js-3.0.1.tgz#d314a57c2aef69d1ad98a138a21fe9eafa9ee312"8663 integrity sha512-cdwTTnqPu0Hyvf5in5asVdZocVDTNRmR7XEcJuIzMjJeSHybHl7vpB66AzwTaIg6CLSbtjcxc8fqcySfnTkccA==86648665scryptsy@^2.1.0:8666 version "2.1.0"8667 resolved "https://registry.yarnpkg.com/scryptsy/-/scryptsy-2.1.0.tgz#8d1e8d0c025b58fdd25b6fa9a0dc905ee8faa790"8668 integrity sha512-1CdSqHQowJBnMAFyPEBRfqag/YP9OF394FV+4YREIJX4ljD7OxvQRDayyoyyCk+senRjSkP6VnUNQmVQqB6g7w==86698670secp256k1@^4.0.1:8671 version "4.0.2"8672 resolved "https://registry.yarnpkg.com/secp256k1/-/secp256k1-4.0.2.tgz#15dd57d0f0b9fdb54ac1fa1694f40e5e9a54f4a1"8673 integrity sha512-UDar4sKvWAksIlfX3xIaQReADn+WFnHvbVujpcbr+9Sf/69odMwy2MUsz5CKLQgX9nsIyrjuxL2imVyoNHa3fg==8674 dependencies:8675 elliptic "^6.5.2"8676 node-addon-api "^2.0.0"8677 node-gyp-build "^4.2.0"86788679semver-diff@^3.1.1:8680 version "3.1.1"8681 resolved "https://registry.yarnpkg.com/semver-diff/-/semver-diff-3.1.1.tgz#05f77ce59f325e00e2706afd67bb506ddb1ca32b"8682 integrity sha512-GX0Ix/CJcHyB8c4ykpHGIAvLyOwOobtM/8d+TQkAd81/bEjgPHrfba41Vpesr7jX/t8Uh+R3EX9eAS5be+jQYg==8683 dependencies:8684 semver "^6.3.0"86858686semver@7.0.0:8687 version "7.0.0"8688 resolved "https://registry.yarnpkg.com/semver/-/semver-7.0.0.tgz#5f3ca35761e47e05b206c6daff2cf814f0316b8e"8689 integrity sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==86908691semver@^5.3.0, semver@^5.5.0, semver@^5.6.0:8692 version "5.7.1"8693 resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7"8694 integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==86958696semver@^6.0.0, semver@^6.1.0, semver@^6.1.1, semver@^6.1.2, semver@^6.2.0, semver@^6.3.0:8697 version "6.3.0"8698 resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d"8699 integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==87008701semver@^7.2.1, semver@^7.3.2, semver@^7.3.4, semver@^7.3.5:8702 version "7.3.5"8703 resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.5.tgz#0b621c879348d8998e4b0e4be94b3f12e6018ef7"8704 integrity sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==8705 dependencies:8706 lru-cache "^6.0.0"87078708send@0.17.1:8709 version "0.17.1"8710 resolved "https://registry.yarnpkg.com/send/-/send-0.17.1.tgz#c1d8b059f7900f7466dd4938bdc44e11ddb376c8"8711 integrity sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg==8712 dependencies:8713 debug "2.6.9"8714 depd "~1.1.2"8715 destroy "~1.0.4"8716 encodeurl "~1.0.2"8717 escape-html "~1.0.3"8718 etag "~1.8.1"8719 fresh "0.5.2"8720 http-errors "~1.7.2"8721 mime "1.6.0"8722 ms "2.1.1"8723 on-finished "~2.3.0"8724 range-parser "~1.2.1"8725 statuses "~1.5.0"87268727serialize-javascript@6.0.0:8728 version "6.0.0"8729 resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-6.0.0.tgz#efae5d88f45d7924141da8b5c3a7a7e663fefeb8"8730 integrity sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==8731 dependencies:8732 randombytes "^2.1.0"87338734serve-static@1.14.1:8735 version "1.14.1"8736 resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.14.1.tgz#666e636dc4f010f7ef29970a88a674320898b2f9"8737 integrity sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg==8738 dependencies:8739 encodeurl "~1.0.2"8740 escape-html "~1.0.3"8741 parseurl "~1.3.3"8742 send "0.17.1"87438744servify@^0.1.12:8745 version "0.1.12"8746 resolved "https://registry.yarnpkg.com/servify/-/servify-0.1.12.tgz#142ab7bee1f1d033b66d0707086085b17c06db95"8747 integrity sha512-/xE6GvsKKqyo1BAY+KxOWXcLpPsUUyji7Qg3bVD7hh1eRze5bR1uYiuDA/k3Gof1s9BTzQZEJK8sNcNGFIzeWw==8748 dependencies:8749 body-parser "^1.16.0"8750 cors "^2.8.1"8751 express "^4.14.0"8752 request "^2.79.0"8753 xhr "^2.3.3"87548755setimmediate@^1.0.5:8756 version "1.0.5"8757 resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285"8758 integrity sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=87598760setprototypeof@1.1.1:8761 version "1.1.1"8762 resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.1.tgz#7e95acb24aa92f5885e0abef5ba131330d4ae683"8763 integrity sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==87648765sha.js@^2.4.0, sha.js@^2.4.8:8766 version "2.4.11"8767 resolved "https://registry.yarnpkg.com/sha.js/-/sha.js-2.4.11.tgz#37a5cf0b81ecbc6943de109ba2960d1b26584ae7"8768 integrity sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==8769 dependencies:8770 inherits "^2.0.1"8771 safe-buffer "^5.0.1"87728773shallow-clone@^3.0.0:8774 version "3.0.1"8775 resolved "https://registry.yarnpkg.com/shallow-clone/-/shallow-clone-3.0.1.tgz#8f2981ad92531f55035b01fb230769a40e02efa3"8776 integrity sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==8777 dependencies:8778 kind-of "^6.0.2"87798780shebang-command@^2.0.0:8781 version "2.0.0"8782 resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea"8783 integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==8784 dependencies:8785 shebang-regex "^3.0.0"87868787shebang-regex@^3.0.0:8788 version "3.0.0"8789 resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172"8790 integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==87918792shelljs@^0.8.4:8793 version "0.8.4"8794 resolved "https://registry.yarnpkg.com/shelljs/-/shelljs-0.8.4.tgz#de7684feeb767f8716b326078a8a00875890e3c2"8795 integrity sha512-7gk3UZ9kOfPLIAbslLzyWeGiEqx9e3rxwZM0KE6EL8GlGwjym9Mrlx5/p33bWTu9YG6vcS4MBxYZDHYr5lr8BQ==8796 dependencies:8797 glob "^7.0.0"8798 interpret "^1.0.0"8799 rechoir "^0.6.2"88008801side-channel@^1.0.4:8802 version "1.0.4"8803 resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.4.tgz#efce5c8fdc104ee751b25c58d4290011fa5ea2cf"8804 integrity sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==8805 dependencies:8806 call-bind "^1.0.0"8807 get-intrinsic "^1.0.2"8808 object-inspect "^1.9.0"88098810signal-exit@^3.0.0, signal-exit@^3.0.2, signal-exit@^3.0.3:8811 version "3.0.3"8812 resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.3.tgz#a1410c2edd8f077b08b4e253c8eacfcaf057461c"8813 integrity sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==88148815simple-concat@^1.0.0:8816 version "1.0.1"8817 resolved "https://registry.yarnpkg.com/simple-concat/-/simple-concat-1.0.1.tgz#f46976082ba35c2263f1c8ab5edfe26c41c9552f"8818 integrity sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==88198820simple-get@^2.7.0:8821 version "2.8.1"8822 resolved "https://registry.yarnpkg.com/simple-get/-/simple-get-2.8.1.tgz#0e22e91d4575d87620620bc91308d57a77f44b5d"8823 integrity sha512-lSSHRSw3mQNUGPAYRqo7xy9dhKmxFXIjLjp4KHpf99GEH2VH7C3AM+Qfx6du6jhfUi6Vm7XnbEVEf7Wb6N8jRw==8824 dependencies:8825 decompress-response "^3.3.0"8826 once "^1.3.1"8827 simple-concat "^1.0.0"88288829simple-get@^4.0.0:8830 version "4.0.0"8831 resolved "https://registry.yarnpkg.com/simple-get/-/simple-get-4.0.0.tgz#73fa628278d21de83dadd5512d2cc1f4872bd675"8832 integrity sha512-ZalZGexYr3TA0SwySsr5HlgOOinS4Jsa8YB2GJ6lUNAazyAu4KG/VmzMTwAt2YVXzzVj8QmefmAonZIK2BSGcQ==8833 dependencies:8834 decompress-response "^6.0.0"8835 once "^1.3.1"8836 simple-concat "^1.0.0"88378838sisteransi@^1.0.5:8839 version "1.0.5"8840 resolved "https://registry.yarnpkg.com/sisteransi/-/sisteransi-1.0.5.tgz#134d681297756437cc05ca01370d3a7a571075ed"8841 integrity sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==88428843slash@^2.0.0:8844 version "2.0.0"8845 resolved "https://registry.yarnpkg.com/slash/-/slash-2.0.0.tgz#de552851a1759df3a8f206535442f5ec4ddeab44"8846 integrity sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==88478848slash@^3.0.0:8849 version "3.0.0"8850 resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634"8851 integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==88528853solc@^0.8.9:8854 version "0.8.9"8855 resolved "https://registry.yarnpkg.com/solc/-/solc-0.8.9.tgz#e57eb1c65c1eea273cc9b2b0d6cca051b878cbf8"8856 integrity sha512-dD8tQgGCrdWQPpbDTbQF048S3JAcpytOax2r5qPgQluKJPCRFT6c/fec0ZkbrRwRSeYT/qiKz0OKBDOinnGeWw==8857 dependencies:8858 command-exists "^1.2.8"8859 commander "^8.1.0"8860 follow-redirects "^1.12.1"8861 fs-extra "^0.30.0"8862 js-sha3 "0.8.0"8863 memorystream "^0.3.1"8864 require-from-string "^2.0.0"8865 semver "^5.5.0"8866 tmp "0.0.33"88678868sort-keys@^4.0.0:8869 version "4.2.0"8870 resolved "https://registry.yarnpkg.com/sort-keys/-/sort-keys-4.2.0.tgz#6b7638cee42c506fff8c1cecde7376d21315be18"8871 integrity sha512-aUYIEU/UviqPgc8mHR6IW1EGxkAXpeRETYcrzg8cLAvUPZcpAlleSXHV2mY7G12GphSH6Gzv+4MMVSSkbdteHg==8872 dependencies:8873 is-plain-obj "^2.0.0"88748875source-map-js@^0.6.2:8876 version "0.6.2"8877 resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-0.6.2.tgz#0bb5de631b41cfbda6cfba8bd05a80efdfd2385e"8878 integrity sha512-/3GptzWzu0+0MBQFrDKzw/DvvMTUORvgY6k6jd/VS6iCR4RDTKWH6v6WPwQoUO8667uQEf9Oe38DxAYWY5F/Ug==88798880source-map-support@^0.5.16, source-map-support@^0.5.6:8881 version "0.5.19"8882 resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.19.tgz#a98b62f86dcaf4f67399648c085291ab9e8fed61"8883 integrity sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==8884 dependencies:8885 buffer-from "^1.0.0"8886 source-map "^0.6.0"88878888source-map@^0.5.0:8889 version "0.5.7"8890 resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc"8891 integrity sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=88928893source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.1:8894 version "0.6.1"8895 resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263"8896 integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==88978898source-map@^0.7.3:8899 version "0.7.3"8900 resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.7.3.tgz#5302f8169031735226544092e64981f751750383"8901 integrity sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==89028903sourcemap-codec@^1.4.4:8904 version "1.4.8"8905 resolved "https://registry.yarnpkg.com/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz#ea804bd94857402e6992d05a38ef1ae35a9ab4c4"8906 integrity sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==89078908speedometer@~1.0.0:8909 version "1.0.0"8910 resolved "https://registry.yarnpkg.com/speedometer/-/speedometer-1.0.0.tgz#cd671cb06752c22bca3370e2f334440be4fc62e2"8911 integrity sha1-zWccsGdSwivKM3Di8zREC+T8YuI=89128913sprintf-js@~1.0.2:8914 version "1.0.3"8915 resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c"8916 integrity sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=89178918sshpk@^1.7.0:8919 version "1.16.1"8920 resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.16.1.tgz#fb661c0bef29b39db40769ee39fa70093d6f6877"8921 integrity sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==8922 dependencies:8923 asn1 "~0.2.3"8924 assert-plus "^1.0.0"8925 bcrypt-pbkdf "^1.0.0"8926 dashdash "^1.12.0"8927 ecc-jsbn "~0.1.1"8928 getpass "^0.1.1"8929 jsbn "~0.1.0"8930 safer-buffer "^2.0.2"8931 tweetnacl "~0.14.0"89328933stack-utils@^2.0.3:8934 version "2.0.3"8935 resolved "https://registry.yarnpkg.com/stack-utils/-/stack-utils-2.0.3.tgz#cd5f030126ff116b78ccb3c027fe302713b61277"8936 integrity sha512-gL//fkxfWUsIlFL2Tl42Cl6+HFALEaB1FU76I/Fy+oZjRreP7OPMXFlGbxM7NQsI0ZpUfw76sHnv0WNYuTb7Iw==8937 dependencies:8938 escape-string-regexp "^2.0.0"89398940"statuses@>= 1.5.0 < 2", statuses@~1.5.0:8941 version "1.5.0"8942 resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c"8943 integrity sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=89448945stream-shift@^1.0.0:8946 version "1.0.1"8947 resolved "https://registry.yarnpkg.com/stream-shift/-/stream-shift-1.0.1.tgz#d7088281559ab2778424279b0877da3c392d5a3d"8948 integrity sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ==89498950strict-uri-encode@^1.0.0:8951 version "1.1.0"8952 resolved "https://registry.yarnpkg.com/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz#279b225df1d582b1f54e65addd4352e18faa0713"8953 integrity sha1-J5siXfHVgrH1TmWt3UNS4Y+qBxM=89548955string-length@^4.0.1:8956 version "4.0.2"8957 resolved "https://registry.yarnpkg.com/string-length/-/string-length-4.0.2.tgz#a8a8dc7bd5c1a82b9b3c8b87e125f66871b6e57a"8958 integrity sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==8959 dependencies:8960 char-regex "^1.0.2"8961 strip-ansi "^6.0.0"89628963"string-width@^1.0.1 || ^2.0.0":8964 version "2.1.1"8965 resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e"8966 integrity sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==8967 dependencies:8968 is-fullwidth-code-point "^2.0.0"8969 strip-ansi "^4.0.0"89708971"string-width@^1.0.2 || 2 || 3 || 4":8972 version "4.2.3"8973 resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010"8974 integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==8975 dependencies:8976 emoji-regex "^8.0.0"8977 is-fullwidth-code-point "^3.0.0"8978 strip-ansi "^6.0.1"89798980string-width@^3.0.0:8981 version "3.1.0"8982 resolved "https://registry.yarnpkg.com/string-width/-/string-width-3.1.0.tgz#22767be21b62af1081574306f69ac51b62203961"8983 integrity sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==8984 dependencies:8985 emoji-regex "^7.0.1"8986 is-fullwidth-code-point "^2.0.0"8987 strip-ansi "^5.1.0"89888989string-width@^4.0.0, string-width@^4.1.0, string-width@^4.2.0:8990 version "4.2.2"8991 resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.2.tgz#dafd4f9559a7585cfba529c6a0a4f73488ebd4c5"8992 integrity sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==8993 dependencies:8994 emoji-regex "^8.0.0"8995 is-fullwidth-code-point "^3.0.0"8996 strip-ansi "^6.0.0"89978998string.prototype.matchall@^4.0.5:8999 version "4.0.5"9000 resolved "https://registry.yarnpkg.com/string.prototype.matchall/-/string.prototype.matchall-4.0.5.tgz#59370644e1db7e4c0c045277690cf7b01203c4da"9001 integrity sha512-Z5ZaXO0svs0M2xd/6By3qpeKpLKd9mO4v4q3oMEQrk8Ck4xOD5d5XeBOOjGrmVZZ/AHB1S0CgG4N5r1G9N3E2Q==9002 dependencies:9003 call-bind "^1.0.2"9004 define-properties "^1.1.3"9005 es-abstract "^1.18.2"9006 get-intrinsic "^1.1.1"9007 has-symbols "^1.0.2"9008 internal-slot "^1.0.3"9009 regexp.prototype.flags "^1.3.1"9010 side-channel "^1.0.4"90119012string.prototype.trimend@^1.0.4:9013 version "1.0.4"9014 resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz#e75ae90c2942c63504686c18b287b4a0b1a45f80"9015 integrity sha512-y9xCjw1P23Awk8EvTpcyL2NIr1j7wJ39f+k6lvRnSMz+mz9CGz9NYPelDk42kOz6+ql8xjfK8oYzy3jAP5QU5A==9016 dependencies:9017 call-bind "^1.0.2"9018 define-properties "^1.1.3"90199020string.prototype.trimstart@^1.0.4:9021 version "1.0.4"9022 resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.4.tgz#b36399af4ab2999b4c9c648bd7a3fb2bb26feeed"9023 integrity sha512-jh6e984OBfvxS50tdY2nRZnoC5/mLFKOREQfw8t5yytkoUsJRNxvI/E39qu1sD0OtWI3OC0XgKSmcWwziwYuZw==9024 dependencies:9025 call-bind "^1.0.2"9026 define-properties "^1.1.3"90279028string_decoder@^1.1.1:9029 version "1.3.0"9030 resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e"9031 integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==9032 dependencies:9033 safe-buffer "~5.2.0"90349035string_decoder@~1.1.1:9036 version "1.1.1"9037 resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8"9038 integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==9039 dependencies:9040 safe-buffer "~5.1.0"90419042stringify-object@^3.2.1:9043 version "3.3.0"9044 resolved "https://registry.yarnpkg.com/stringify-object/-/stringify-object-3.3.0.tgz#703065aefca19300d3ce88af4f5b3956d7556629"9045 integrity sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw==9046 dependencies:9047 get-own-enumerable-property-symbols "^3.0.0"9048 is-obj "^1.0.1"9049 is-regexp "^1.0.0"90509051"strip-ansi@^3.0.1 || ^4.0.0", strip-ansi@^4.0.0:9052 version "4.0.0"9053 resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f"9054 integrity sha1-qEeQIusaw2iocTibY1JixQXuNo8=9055 dependencies:9056 ansi-regex "^3.0.0"90579058strip-ansi@^5.1.0:9059 version "5.2.0"9060 resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-5.2.0.tgz#8c9a536feb6afc962bdfa5b104a5091c1ad9c0ae"9061 integrity sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==9062 dependencies:9063 ansi-regex "^4.1.0"90649065strip-ansi@^6.0.0:9066 version "6.0.0"9067 resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.0.tgz#0b1571dd7669ccd4f3e06e14ef1eed26225ae532"9068 integrity sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==9069 dependencies:9070 ansi-regex "^5.0.0"90719072strip-ansi@^6.0.1:9073 version "6.0.1"9074 resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9"9075 integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==9076 dependencies:9077 ansi-regex "^5.0.1"90789079strip-bom@^3.0.0:9080 version "3.0.0"9081 resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3"9082 integrity sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=90839084strip-bom@^4.0.0:9085 version "4.0.0"9086 resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-4.0.0.tgz#9c3505c1db45bcedca3d9cf7a16f5c5aa3901878"9087 integrity sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==90889089strip-final-newline@^2.0.0:9090 version "2.0.0"9091 resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-2.0.0.tgz#89b852fb2fcbe936f6f4b3187afb0a12c1ab58ad"9092 integrity sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==90939094strip-hex-prefix@1.0.0:9095 version "1.0.0"9096 resolved "https://registry.yarnpkg.com/strip-hex-prefix/-/strip-hex-prefix-1.0.0.tgz#0c5f155fef1151373377de9dbb588da05500e36f"9097 integrity sha1-DF8VX+8RUTczd96du1iNoFUA428=9098 dependencies:9099 is-hex-prefixed "1.0.0"91009101strip-json-comments@3.1.1, strip-json-comments@^3.1.0, strip-json-comments@^3.1.1:9102 version "3.1.1"9103 resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006"9104 integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==91059106strip-json-comments@~2.0.1:9107 version "2.0.1"9108 resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a"9109 integrity sha1-PFMZQukIwml8DsNEhYwobHygpgo=91109111strip-outer@^1.0.1:9112 version "1.0.1"9113 resolved "https://registry.yarnpkg.com/strip-outer/-/strip-outer-1.0.1.tgz#b2fd2abf6604b9d1e6013057195df836b8a9d631"9114 integrity sha512-k55yxKHwaXnpYGsOzg4Vl8+tDrWylxDEpknGjhTiZB8dFRU5rTo9CAzeycivxV3s+zlTKwrs6WxMxR95n26kwg==9115 dependencies:9116 escape-string-regexp "^1.0.2"91179118stylus-lookup@^3.0.1:9119 version "3.0.2"9120 resolved "https://registry.yarnpkg.com/stylus-lookup/-/stylus-lookup-3.0.2.tgz#c9eca3ff799691020f30b382260a67355fefdddd"9121 integrity sha512-oEQGHSjg/AMaWlKe7gqsnYzan8DLcGIHe0dUaFkucZZ14z4zjENRlQMCHT4FNsiWnJf17YN9OvrCfCoi7VvOyg==9122 dependencies:9123 commander "^2.8.1"9124 debug "^4.1.0"91259126supports-color@8.1.1, supports-color@^8.0.0:9127 version "8.1.1"9128 resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-8.1.1.tgz#cd6fc17e28500cff56c1b86c0a7fd4a54a73005c"9129 integrity sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==9130 dependencies:9131 has-flag "^4.0.0"91329133supports-color@^5.3.0:9134 version "5.5.0"9135 resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f"9136 integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==9137 dependencies:9138 has-flag "^3.0.0"91399140supports-color@^6.1.0:9141 version "6.1.0"9142 resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-6.1.0.tgz#0764abc69c63d5ac842dd4867e8d025e880df8f3"9143 integrity sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==9144 dependencies:9145 has-flag "^3.0.0"91469147supports-color@^7.0.0, supports-color@^7.1.0:9148 version "7.2.0"9149 resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da"9150 integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==9151 dependencies:9152 has-flag "^4.0.0"91539154supports-hyperlinks@^2.0.0:9155 version "2.2.0"9156 resolved "https://registry.yarnpkg.com/supports-hyperlinks/-/supports-hyperlinks-2.2.0.tgz#4f77b42488765891774b70c79babd87f9bd594bb"9157 integrity sha512-6sXEzV5+I5j8Bmq9/vUphGRM/RJNT9SCURJLjwfOg51heRtguGWDzcaBlgAzKhQa0EVNpPEKzQuBwZ8S8WaCeQ==9158 dependencies:9159 has-flag "^4.0.0"9160 supports-color "^7.0.0"91619162swarm-js@^0.1.40:9163 version "0.1.40"9164 resolved "https://registry.yarnpkg.com/swarm-js/-/swarm-js-0.1.40.tgz#b1bc7b6dcc76061f6c772203e004c11997e06b99"9165 integrity sha512-yqiOCEoA4/IShXkY3WKwP5PvZhmoOOD8clsKA7EEcRILMkTEYHCQ21HDCAcVpmIxZq4LyZvWeRJ6quIyHk1caA==9166 dependencies:9167 bluebird "^3.5.0"9168 buffer "^5.0.5"9169 eth-lib "^0.1.26"9170 fs-extra "^4.0.2"9171 got "^7.1.0"9172 mime-types "^2.1.16"9173 mkdirp-promise "^5.0.1"9174 mock-fs "^4.1.0"9175 setimmediate "^1.0.5"9176 tar "^4.0.2"9177 xhr-request "^1.0.1"91789179symbol-tree@^3.2.4:9180 version "3.2.4"9181 resolved "https://registry.yarnpkg.com/symbol-tree/-/symbol-tree-3.2.4.tgz#430637d248ba77e078883951fb9aa0eed7c63fa2"9182 integrity sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==91839184tapable@^2.2.0:9185 version "2.2.0"9186 resolved "https://registry.yarnpkg.com/tapable/-/tapable-2.2.0.tgz#5c373d281d9c672848213d0e037d1c4165ab426b"9187 integrity sha512-FBk4IesMV1rBxX2tfiK8RAmogtWn53puLOQlvO8XuwlgxcYbP4mVPS9Ph4aeamSyyVjOl24aYWAuc8U5kCVwMw==91889189tar@^4.0.2:9190 version "4.4.13"9191 resolved "https://registry.yarnpkg.com/tar/-/tar-4.4.13.tgz#43b364bc52888d555298637b10d60790254ab525"9192 integrity sha512-w2VwSrBoHa5BsSyH+KxEqeQBAllHhccyMFVHtGtdMpF4W7IRWfZjFiQceJPChOeTsSDVUpER2T8FA93pr0L+QA==9193 dependencies:9194 chownr "^1.1.1"9195 fs-minipass "^1.2.5"9196 minipass "^2.8.6"9197 minizlib "^1.2.1"9198 mkdirp "^0.5.0"9199 safe-buffer "^5.1.2"9200 yallist "^3.0.3"92019202temp@~0.4.0:9203 version "0.4.0"9204 resolved "https://registry.yarnpkg.com/temp/-/temp-0.4.0.tgz#671ad63d57be0fe9d7294664b3fc400636678a60"9205 integrity sha1-ZxrWPVe+D+nXKUZks/xABjZnimA=92069207terminal-link@^2.0.0:9208 version "2.1.1"9209 resolved "https://registry.yarnpkg.com/terminal-link/-/terminal-link-2.1.1.tgz#14a64a27ab3c0df933ea546fba55f2d078edc994"9210 integrity sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ==9211 dependencies:9212 ansi-escapes "^4.2.1"9213 supports-hyperlinks "^2.0.0"92149215test-exclude@^6.0.0:9216 version "6.0.0"9217 resolved "https://registry.yarnpkg.com/test-exclude/-/test-exclude-6.0.0.tgz#04a8698661d805ea6fa293b6cb9e63ac044ef15e"9218 integrity sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==9219 dependencies:9220 "@istanbuljs/schema" "^0.1.2"9221 glob "^7.1.4"9222 minimatch "^3.0.4"92239224text-table@^0.2.0:9225 version "0.2.0"9226 resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4"9227 integrity sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=92289229throat@^6.0.1:9230 version "6.0.1"9231 resolved "https://registry.yarnpkg.com/throat/-/throat-6.0.1.tgz#d514fedad95740c12c2d7fc70ea863eb51ade375"9232 integrity sha512-8hmiGIJMDlwjg7dlJ4yKGLK8EsYqKgPWbG3b4wjJddKNwc7N7Dpn08Df4szr/sZdMVeOstrdYSsqzX6BYbcB+w==92339234through2@~2.0.3:9235 version "2.0.5"9236 resolved "https://registry.yarnpkg.com/through2/-/through2-2.0.5.tgz#01c1e39eb31d07cb7d03a96a70823260b23132cd"9237 integrity sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==9238 dependencies:9239 readable-stream "~2.3.6"9240 xtend "~4.0.1"92419242through@^2.3.6:9243 version "2.3.8"9244 resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5"9245 integrity sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=92469247timed-out@^4.0.0, timed-out@^4.0.1:9248 version "4.0.1"9249 resolved "https://registry.yarnpkg.com/timed-out/-/timed-out-4.0.1.tgz#f32eacac5a175bea25d7fab565ab3ed8741ef56f"9250 integrity sha1-8y6srFoXW+ol1/q1Zas+2HQe9W8=92519252tmp@0.0.33, tmp@^0.0.33:9253 version "0.0.33"9254 resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9"9255 integrity sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==9256 dependencies:9257 os-tmpdir "~1.0.2"92589259tmpl@1.0.x:9260 version "1.0.4"9261 resolved "https://registry.yarnpkg.com/tmpl/-/tmpl-1.0.4.tgz#23640dd7b42d00433911140820e5cf440e521dd1"9262 integrity sha1-I2QN17QtAEM5ERQIIOXPRA5SHdE=92639264to-fast-properties@^2.0.0:9265 version "2.0.0"9266 resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e"9267 integrity sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=92689269to-readable-stream@^1.0.0:9270 version "1.0.0"9271 resolved "https://registry.yarnpkg.com/to-readable-stream/-/to-readable-stream-1.0.0.tgz#ce0aa0c2f3df6adf852efb404a783e77c0475771"9272 integrity sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q==92739274to-regex-range@^5.0.1:9275 version "5.0.1"9276 resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4"9277 integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==9278 dependencies:9279 is-number "^7.0.0"92809281toidentifier@1.0.0:9282 version "1.0.0"9283 resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.0.tgz#7e1be3470f1e77948bc43d94a3c8f4d7752ba553"9284 integrity sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==92859286tough-cookie@^4.0.0:9287 version "4.0.0"9288 resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-4.0.0.tgz#d822234eeca882f991f0f908824ad2622ddbece4"9289 integrity sha512-tHdtEpQCMrc1YLrMaqXXcj6AxhYi/xgit6mZu1+EDWUn+qhUf8wMQoFIy9NXuq23zAwtcB0t/MjACGR18pcRbg==9290 dependencies:9291 psl "^1.1.33"9292 punycode "^2.1.1"9293 universalify "^0.1.2"92949295tough-cookie@~2.5.0:9296 version "2.5.0"9297 resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.5.0.tgz#cd9fb2a0aa1d5a12b473bd9fb96fa3dcff65ade2"9298 integrity sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==9299 dependencies:9300 psl "^1.1.28"9301 punycode "^2.1.1"93029303tr46@^2.1.0:9304 version "2.1.0"9305 resolved "https://registry.yarnpkg.com/tr46/-/tr46-2.1.0.tgz#fa87aa81ca5d5941da8cbf1f9b749dc969a4e240"9306 integrity sha512-15Ih7phfcdP5YxqiB+iDtLoaTz4Nd35+IiAv0kQ5FNKHzXgdWqPoTIqEDDJmXceQt4JZk6lVPT8lnDlPpGDppw==9307 dependencies:9308 punycode "^2.1.1"93099310tr46@~0.0.3:9311 version "0.0.3"9312 resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a"9313 integrity sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o=93149315trim-repeated@^1.0.0:9316 version "1.0.0"9317 resolved "https://registry.yarnpkg.com/trim-repeated/-/trim-repeated-1.0.0.tgz#e3646a2ea4e891312bf7eace6cfb05380bc01c21"9318 integrity sha1-42RqLqTokTEr9+rObPsFOAvAHCE=9319 dependencies:9320 escape-string-regexp "^1.0.2"93219322ts-node@^10.4.0:9323 version "10.4.0"9324 resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-10.4.0.tgz#680f88945885f4e6cf450e7f0d6223dd404895f7"9325 integrity sha512-g0FlPvvCXSIO1JDF6S232P5jPYqBkRL9qly81ZgAOSU7rwI0stphCgd2kLiCrU9DjQCrJMWEqcNSjQL02s6d8A==9326 dependencies:9327 "@cspotcode/source-map-support" "0.7.0"9328 "@tsconfig/node10" "^1.0.7"9329 "@tsconfig/node12" "^1.0.7"9330 "@tsconfig/node14" "^1.0.0"9331 "@tsconfig/node16" "^1.0.2"9332 acorn "^8.4.1"9333 acorn-walk "^8.1.1"9334 arg "^4.1.0"9335 create-require "^1.1.0"9336 diff "^4.0.1"9337 make-error "^1.1.1"9338 yn "3.1.1"93399340tsconfig-paths@^3.11.0:9341 version "3.11.0"9342 resolved "https://registry.yarnpkg.com/tsconfig-paths/-/tsconfig-paths-3.11.0.tgz#954c1fe973da6339c78e06b03ce2e48810b65f36"9343 integrity sha512-7ecdYDnIdmv639mmDwslG6KQg1Z9STTz1j7Gcz0xa+nshh/gKDAHcPxRbWOsA3SPp0tXP2leTcY9Kw+NAkfZzA==9344 dependencies:9345 "@types/json5" "^0.0.29"9346 json5 "^1.0.1"9347 minimist "^1.2.0"9348 strip-bom "^3.0.0"93499350tslib@^1.13.0, tslib@^1.8.1, tslib@^1.9.0:9351 version "1.14.1"9352 resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00"9353 integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==93549355tslib@~2.1.0:9356 version "2.1.0"9357 resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.1.0.tgz#da60860f1c2ecaa5703ab7d39bc05b6bf988b97a"9358 integrity sha512-hcVC3wYEziELGGmEEXue7D75zbwIIVUMWAVbHItGPx0ziyXxrOMQx4rQEVEV45Ut/1IotuEvwqPopzIOkDMf0A==93599360tslint@^6.1.3:9361 version "6.1.3"9362 resolved "https://registry.yarnpkg.com/tslint/-/tslint-6.1.3.tgz#5c23b2eccc32487d5523bd3a470e9aa31789d904"9363 integrity sha512-IbR4nkT96EQOvKE2PW/djGz8iGNeJ4rF2mBfiYaR/nvUWYKJhLwimoJKgjIFEIDibBtOevj7BqCRL4oHeWWUCg==9364 dependencies:9365 "@babel/code-frame" "^7.0.0"9366 builtin-modules "^1.1.1"9367 chalk "^2.3.0"9368 commander "^2.12.1"9369 diff "^4.0.1"9370 glob "^7.1.1"9371 js-yaml "^3.13.1"9372 minimatch "^3.0.4"9373 mkdirp "^0.5.3"9374 resolve "^1.3.2"9375 semver "^5.3.0"9376 tslib "^1.13.0"9377 tsutils "^2.29.0"93789379tsutils@^2.29.0:9380 version "2.29.0"9381 resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-2.29.0.tgz#32b488501467acbedd4b85498673a0812aca0b99"9382 integrity sha512-g5JVHCIJwzfISaXpXE1qvNalca5Jwob6FjI4AoPlqMusJ6ftFE7IkkFoMhVLRgK+4Kx3gkzb8UZK5t5yTTvEmA==9383 dependencies:9384 tslib "^1.8.1"93859386tsutils@^3.21.0:9387 version "3.21.0"9388 resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-3.21.0.tgz#b48717d394cea6c1e096983eed58e9d61715b623"9389 integrity sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==9390 dependencies:9391 tslib "^1.8.1"93929393tunnel-agent@^0.6.0:9394 version "0.6.0"9395 resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd"9396 integrity sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=9397 dependencies:9398 safe-buffer "^5.0.1"93999400tweetnacl@1.x.x, tweetnacl@^1.0.3:9401 version "1.0.3"9402 resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-1.0.3.tgz#ac0af71680458d8a6378d0d0d050ab1407d35596"9403 integrity sha512-6rt+RN7aOi1nGMyC4Xa5DdYiukl2UWCbcJft7YhxReBGQD7OAM8Pbxw6YMo4r2diNEA8FEmu32YOn9rhaiE5yw==94049405tweetnacl@^0.14.3, tweetnacl@~0.14.0:9406 version "0.14.5"9407 resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64"9408 integrity sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=94099410type-check@^0.4.0, type-check@~0.4.0:9411 version "0.4.0"9412 resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.4.0.tgz#07b8203bfa7056c0657050e3ccd2c37730bab8f1"9413 integrity sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==9414 dependencies:9415 prelude-ls "^1.2.1"94169417type-check@~0.3.2:9418 version "0.3.2"9419 resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72"9420 integrity sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=9421 dependencies:9422 prelude-ls "~1.1.2"94239424type-detect@4.0.8, type-detect@^4.0.0, type-detect@^4.0.5:9425 version "4.0.8"9426 resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-4.0.8.tgz#7646fb5f18871cfbb7749e69bd39a6388eb7450c"9427 integrity sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==94289429type-fest@^0.20.2:9430 version "0.20.2"9431 resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.20.2.tgz#1bf207f4b28f91583666cb5fbd327887301cd5f4"9432 integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==94339434type-fest@^0.21.3:9435 version "0.21.3"9436 resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.21.3.tgz#d260a24b0198436e133fa26a524a6d65fa3b2e37"9437 integrity sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==94389439type-fest@^0.6.0:9440 version "0.6.0"9441 resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.6.0.tgz#8d2a2370d3df886eb5c90ada1c5bf6188acf838b"9442 integrity sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==94439444type-is@~1.6.17, type-is@~1.6.18:9445 version "1.6.18"9446 resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.18.tgz#4e552cd05df09467dcbc4ef739de89f2cf37c131"9447 integrity sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==9448 dependencies:9449 media-typer "0.3.0"9450 mime-types "~2.1.24"94519452type@^1.0.1:9453 version "1.2.0"9454 resolved "https://registry.yarnpkg.com/type/-/type-1.2.0.tgz#848dd7698dafa3e54a6c479e759c4bc3f18847a0"9455 integrity sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==94569457type@^2.0.0:9458 version "2.5.0"9459 resolved "https://registry.yarnpkg.com/type/-/type-2.5.0.tgz#0a2e78c2e77907b252abe5f298c1b01c63f0db3d"9460 integrity sha512-180WMDQaIMm3+7hGXWf12GtdniDEy7nYcyFMKJn/eZz/6tSLXrUN9V0wKSbMjej0I1WHWbpREDEKHtqPQa9NNw==94619462typedarray-to-buffer@^3.1.5:9463 version "3.1.5"9464 resolved "https://registry.yarnpkg.com/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz#a97ee7a9ff42691b9f783ff1bc5112fe3fca9080"9465 integrity sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==9466 dependencies:9467 is-typedarray "^1.0.0"94689469typescript@^3.9.5, typescript@^3.9.7:9470 version "3.9.10"9471 resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.9.10.tgz#70f3910ac7a51ed6bef79da7800690b19bf778b8"9472 integrity sha512-w6fIxVE/H1PkLKcCPsFqKE7Kv7QUwhU8qQY2MueZXWx5cPZdwFupLgKK3vntcK98BtNHZtAF4LA/yl2a7k8R6Q==94739474typescript@^4.4.4:9475 version "4.4.4"9476 resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.4.4.tgz#2cd01a1a1f160704d3101fd5a58ff0f9fcb8030c"9477 integrity sha512-DqGhF5IKoBl8WNf8C1gu8q0xZSInh9j1kJJMqT3a94w1JzVaBU4EXOSMrz9yDqMT0xt3selp83fuFMQ0uzv6qA==94789479uglify-js@^3.1.4:9480 version "3.13.9"9481 resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.13.9.tgz#4d8d21dcd497f29cfd8e9378b9df123ad025999b"9482 integrity sha512-wZbyTQ1w6Y7fHdt8sJnHfSIuWeDgk6B5rCb4E/AM6QNNPbOMIZph21PW5dRB3h7Df0GszN+t7RuUH6sWK5bF0g==94839484ultron@~1.1.0:9485 version "1.1.1"9486 resolved "https://registry.yarnpkg.com/ultron/-/ultron-1.1.1.tgz#9fe1536a10a664a65266a1e3ccf85fd36302bc9c"9487 integrity sha512-UIEXBNeYmKptWH6z8ZnqTeS8fV74zG0/eRU9VGkpzz+LIJNs8W/zM/L+7ctCkRrgbNnnR0xxw4bKOr0cW0N0Og==94889489unbox-primitive@^1.0.1:9490 version "1.0.1"9491 resolved "https://registry.yarnpkg.com/unbox-primitive/-/unbox-primitive-1.0.1.tgz#085e215625ec3162574dc8859abee78a59b14471"9492 integrity sha512-tZU/3NqK3dA5gpE1KtyiJUrEB0lxnGkMFHptJ7q6ewdZ8s12QrODwNbhIJStmJkd1QDXa1NRA8aF2A1zk/Ypyw==9493 dependencies:9494 function-bind "^1.1.1"9495 has-bigints "^1.0.1"9496 has-symbols "^1.0.2"9497 which-boxed-primitive "^1.0.2"94989499unicode-canonical-property-names-ecmascript@^1.0.4:9500 version "1.0.4"9501 resolved "https://registry.yarnpkg.com/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz#2619800c4c825800efdd8343af7dd9933cbe2818"9502 integrity sha512-jDrNnXWHd4oHiTZnx/ZG7gtUTVp+gCcTTKr8L0HjlwphROEW3+Him+IpvC+xcJEFegapiMZyZe02CyuOnRmbnQ==95039504unicode-match-property-ecmascript@^1.0.4:9505 version "1.0.4"9506 resolved "https://registry.yarnpkg.com/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-1.0.4.tgz#8ed2a32569961bce9227d09cd3ffbb8fed5f020c"9507 integrity sha512-L4Qoh15vTfntsn4P1zqnHulG0LdXgjSO035fEpdtp6YxXhMT51Q6vgM5lYdG/5X3MjS+k/Y9Xw4SFCY9IkR0rg==9508 dependencies:9509 unicode-canonical-property-names-ecmascript "^1.0.4"9510 unicode-property-aliases-ecmascript "^1.0.4"95119512unicode-match-property-value-ecmascript@^1.2.0:9513 version "1.2.0"9514 resolved "https://registry.yarnpkg.com/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.2.0.tgz#0d91f600eeeb3096aa962b1d6fc88876e64ea531"9515 integrity sha512-wjuQHGQVofmSJv1uVISKLE5zO2rNGzM/KCYZch/QQvez7C1hUhBIuZ701fYXExuufJFMPhv2SyL8CyoIfMLbIQ==95169517unicode-property-aliases-ecmascript@^1.0.4:9518 version "1.1.0"9519 resolved "https://registry.yarnpkg.com/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.1.0.tgz#dd57a99f6207bedff4628abefb94c50db941c8f4"9520 integrity sha512-PqSoPh/pWetQ2phoj5RLiaqIk4kCNwoV3CI+LfGmWLKI3rE3kl1h59XpX2BjgDrmbxD9ARtQobPGU1SguCYuQg==95219522uniq@^1.0.1:9523 version "1.0.1"9524 resolved "https://registry.yarnpkg.com/uniq/-/uniq-1.0.1.tgz#b31c5ae8254844a3a8281541ce2b04b865a734ff"9525 integrity sha1-sxxa6CVIRKOoKBVBzisEuGWnNP8=95269527unique-string@^2.0.0:9528 version "2.0.0"9529 resolved "https://registry.yarnpkg.com/unique-string/-/unique-string-2.0.0.tgz#39c6451f81afb2749de2b233e3f7c5e8843bd89d"9530 integrity sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==9531 dependencies:9532 crypto-random-string "^2.0.0"95339534universal-user-agent@^6.0.0:9535 version "6.0.0"9536 resolved "https://registry.yarnpkg.com/universal-user-agent/-/universal-user-agent-6.0.0.tgz#3381f8503b251c0d9cd21bc1de939ec9df5480ee"9537 integrity sha512-isyNax3wXoKaulPDZWHQqbmIx1k2tb9fb3GGDBRxCscfYV2Ch7WxPArBsFEG8s/safwXTT7H4QGhaIkTp9447w==95389539universalify@^0.1.0, universalify@^0.1.2:9540 version "0.1.2"9541 resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66"9542 integrity sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==95439544universalify@^2.0.0:9545 version "2.0.0"9546 resolved "https://registry.yarnpkg.com/universalify/-/universalify-2.0.0.tgz#75a4984efedc4b08975c5aeb73f530d02df25717"9547 integrity sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==95489549unpipe@1.0.0, unpipe@~1.0.0:9550 version "1.0.0"9551 resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec"9552 integrity sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=95539554update-notifier@^5.0.0:9555 version "5.1.0"9556 resolved "https://registry.yarnpkg.com/update-notifier/-/update-notifier-5.1.0.tgz#4ab0d7c7f36a231dd7316cf7729313f0214d9ad9"9557 integrity sha512-ItnICHbeMh9GqUy31hFPrD1kcuZ3rpxDZbf4KUDavXwS0bW5m7SLbDQpGX3UYr072cbrF5hFUs3r5tUsPwjfHw==9558 dependencies:9559 boxen "^5.0.0"9560 chalk "^4.1.0"9561 configstore "^5.0.1"9562 has-yarn "^2.1.0"9563 import-lazy "^2.1.0"9564 is-ci "^2.0.0"9565 is-installed-globally "^0.4.0"9566 is-npm "^5.0.0"9567 is-yarn-global "^0.3.0"9568 latest-version "^5.1.0"9569 pupa "^2.1.1"9570 semver "^7.3.4"9571 semver-diff "^3.1.1"9572 xdg-basedir "^4.0.0"95739574uri-js@^4.2.2:9575 version "4.4.1"9576 resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e"9577 integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==9578 dependencies:9579 punycode "^2.1.0"95809581url-parse-lax@^1.0.0:9582 version "1.0.0"9583 resolved "https://registry.yarnpkg.com/url-parse-lax/-/url-parse-lax-1.0.0.tgz#7af8f303645e9bd79a272e7a14ac68bc0609da73"9584 integrity sha1-evjzA2Rem9eaJy56FKxovAYJ2nM=9585 dependencies:9586 prepend-http "^1.0.1"95879588url-parse-lax@^3.0.0:9589 version "3.0.0"9590 resolved "https://registry.yarnpkg.com/url-parse-lax/-/url-parse-lax-3.0.0.tgz#16b5cafc07dbe3676c1b1999177823d6503acb0c"9591 integrity sha1-FrXK/Afb42dsGxmZF3gj1lA6yww=9592 dependencies:9593 prepend-http "^2.0.0"95949595url-set-query@^1.0.0:9596 version "1.0.0"9597 resolved "https://registry.yarnpkg.com/url-set-query/-/url-set-query-1.0.0.tgz#016e8cfd7c20ee05cafe7795e892bd0702faa339"9598 integrity sha1-AW6M/Xwg7gXK/neV6JK9BwL6ozk=95999600url-to-options@^1.0.1:9601 version "1.0.1"9602 resolved "https://registry.yarnpkg.com/url-to-options/-/url-to-options-1.0.1.tgz#1505a03a289a48cbd7a434efbaeec5055f5633a9"9603 integrity sha1-FQWgOiiaSMvXpDTvuu7FBV9WM6k=96049605utf-8-validate@^5.0.2:9606 version "5.0.5"9607 resolved "https://registry.yarnpkg.com/utf-8-validate/-/utf-8-validate-5.0.5.tgz#dd32c2e82c72002dc9f02eb67ba6761f43456ca1"9608 integrity sha512-+pnxRYsS/axEpkrrEpzYfNZGXp0IjC/9RIxwM5gntY4Koi8SHmUGSfxfWqxZdRxrtaoVstuOzUp/rbs3JSPELQ==9609 dependencies:9610 node-gyp-build "^4.2.0"96119612utf8@3.0.0:9613 version "3.0.0"9614 resolved "https://registry.yarnpkg.com/utf8/-/utf8-3.0.0.tgz#f052eed1364d696e769ef058b183df88c87f69d1"9615 integrity sha512-E8VjFIQ/TyQgp+TZfS6l8yp/xWppSAHzidGiRrqe4bK4XP9pTRyKFgGJpO3SN7zdX4DeomTrwaseCHovfpFcqQ==96169617util-deprecate@^1.0.1, util-deprecate@^1.0.2, util-deprecate@~1.0.1:9618 version "1.0.2"9619 resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf"9620 integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=96219622util-extend@^1.0.1:9623 version "1.0.3"9624 resolved "https://registry.yarnpkg.com/util-extend/-/util-extend-1.0.3.tgz#a7c216d267545169637b3b6edc6ca9119e2ff93f"9625 integrity sha1-p8IW0mdUUWljeztu3GypEZ4v+T8=96269627util@^0.12.0:9628 version "0.12.4"9629 resolved "https://registry.yarnpkg.com/util/-/util-0.12.4.tgz#66121a31420df8f01ca0c464be15dfa1d1850253"9630 integrity sha512-bxZ9qtSlGUWSOy9Qa9Xgk11kSslpuZwaxCg4sNIDj6FLucDab2JxnHwyNTCpHMtK1MjoQiWQ6DiUMZYbSrO+Sw==9631 dependencies:9632 inherits "^2.0.3"9633 is-arguments "^1.0.4"9634 is-generator-function "^1.0.7"9635 is-typed-array "^1.1.3"9636 safe-buffer "^5.1.2"9637 which-typed-array "^1.1.2"96389639utils-merge@1.0.1:9640 version "1.0.1"9641 resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713"9642 integrity sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=96439644uuid@3.3.2:9645 version "3.3.2"9646 resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.3.2.tgz#1b4af4955eb3077c501c23872fc6513811587131"9647 integrity sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==96489649uuid@^3.3.2:9650 version "3.4.0"9651 resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.4.0.tgz#b23e4358afa8a202fe7a100af1f5f883f02007ee"9652 integrity sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==96539654v8-compile-cache@^2.0.3:9655 version "2.3.0"9656 resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz#2de19618c66dc247dcfb6f99338035d8245a2cee"9657 integrity sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==96589659v8-to-istanbul@^8.1.0:9660 version "8.1.0"9661 resolved "https://registry.yarnpkg.com/v8-to-istanbul/-/v8-to-istanbul-8.1.0.tgz#0aeb763894f1a0a1676adf8a8b7612a38902446c"9662 integrity sha512-/PRhfd8aTNp9Ggr62HPzXg2XasNFGy5PBt0Rp04du7/8GNNSgxFL6WBTkgMKSL9bFjH+8kKEG3f37FmxiTqUUA==9663 dependencies:9664 "@types/istanbul-lib-coverage" "^2.0.1"9665 convert-source-map "^1.6.0"9666 source-map "^0.7.3"96679668varint@^5.0.0:9669 version "5.0.2"9670 resolved "https://registry.yarnpkg.com/varint/-/varint-5.0.2.tgz#5b47f8a947eb668b848e034dcfa87d0ff8a7f7a4"9671 integrity sha512-lKxKYG6H03yCZUpAGOPOsMcGxd1RHCu1iKvEHYDPmTyq2HueGhD73ssNBqqQWfvYs04G9iUFRvmAVLW20Jw6ow==96729673vary@^1, vary@~1.1.2:9674 version "1.1.2"9675 resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc"9676 integrity sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=96779678verror@1.10.0:9679 version "1.10.0"9680 resolved "https://registry.yarnpkg.com/verror/-/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400"9681 integrity sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=9682 dependencies:9683 assert-plus "^1.0.0"9684 core-util-is "1.0.2"9685 extsprintf "^1.2.0"96869687vue-template-es2015-compiler@^1.9.0:9688 version "1.9.1"9689 resolved "https://registry.yarnpkg.com/vue-template-es2015-compiler/-/vue-template-es2015-compiler-1.9.1.tgz#1ee3bc9a16ecbf5118be334bb15f9c46f82f5825"9690 integrity sha512-4gDntzrifFnCEvyoO8PqyJDmguXgVPxKiIxrBKjIowvL9l+N66196+72XVYR8BBf1Uv1Fgt3bGevJ+sEmxfZzw==96919692w3c-hr-time@^1.0.2:9693 version "1.0.2"9694 resolved "https://registry.yarnpkg.com/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz#0a89cdf5cc15822df9c360543676963e0cc308cd"9695 integrity sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ==9696 dependencies:9697 browser-process-hrtime "^1.0.0"96989699w3c-xmlserializer@^2.0.0:9700 version "2.0.0"9701 resolved "https://registry.yarnpkg.com/w3c-xmlserializer/-/w3c-xmlserializer-2.0.0.tgz#3e7104a05b75146cc60f564380b7f683acf1020a"9702 integrity sha512-4tzD0mF8iSiMiNs30BiLO3EpfGLZUT2MSX/G+o7ZywDzliWQ3OPtTZ0PTC3B3ca1UAf4cJMHB+2Bf56EriJuRA==9703 dependencies:9704 xml-name-validator "^3.0.0"97059706walkdir@^0.4.1:9707 version "0.4.1"9708 resolved "https://registry.yarnpkg.com/walkdir/-/walkdir-0.4.1.tgz#dc119f83f4421df52e3061e514228a2db20afa39"9709 integrity sha512-3eBwRyEln6E1MSzcxcVpQIhRG8Q1jLvEqRmCZqS3dsfXEDR/AhOF4d+jHg1qvDCpYaVRZjENPQyrVxAkQqxPgQ==97109711walker@^1.0.7:9712 version "1.0.7"9713 resolved "https://registry.yarnpkg.com/walker/-/walker-1.0.7.tgz#2f7f9b8fd10d677262b18a884e28d19618e028fb"9714 integrity sha1-L3+bj9ENZ3JisYqITijRlhjgKPs=9715 dependencies:9716 makeerror "1.0.x"97179718wcwidth@^1.0.1:9719 version "1.0.1"9720 resolved "https://registry.yarnpkg.com/wcwidth/-/wcwidth-1.0.1.tgz#f0b0dcf915bc5ff1528afadb2c0e17b532da2fe8"9721 integrity sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g=9722 dependencies:9723 defaults "^1.0.3"97249725web3-bzz@1.6.0:9726 version "1.6.0"9727 resolved "https://registry.yarnpkg.com/web3-bzz/-/web3-bzz-1.6.0.tgz#584b51339f21eedff159abc9239b4b7ef6ded840"9728 integrity sha512-ugYV6BsinwhIi0CsLWINBz4mqN9wR9vNG0WmyEbdECjxcPyr6vkaWt4qi0zqlUxEnYAwGj4EJXNrbjPILntQTQ==9729 dependencies:9730 "@types/node" "^12.12.6"9731 got "9.6.0"9732 swarm-js "^0.1.40"97339734web3-core-helpers@1.6.0:9735 version "1.6.0"9736 resolved "https://registry.yarnpkg.com/web3-core-helpers/-/web3-core-helpers-1.6.0.tgz#77e161b6ba930a4008a0df804ab379e0aa7e1e7f"9737 integrity sha512-H/IAH/0mrgvad/oxVKiAMC7qDzMrPPe/nRKmJOoIsupRg9/frvL62kZZiHhqVD1HMyyswbQFC69QRl7JqWzvxg==9738 dependencies:9739 web3-eth-iban "1.6.0"9740 web3-utils "1.6.0"97419742web3-core-method@1.6.0:9743 version "1.6.0"9744 resolved "https://registry.yarnpkg.com/web3-core-method/-/web3-core-method-1.6.0.tgz#ebe4ea51f5a4fa809bb68185576186359d3982e9"9745 integrity sha512-cHekyEil4mtcCOk6Q1Zh4y+2o5pTwsLIxP6Bpt4BRtZgdsyPiadYJpkLAVT/quch5xN7Qs5ZwG5AvRCS3VwD2g==9746 dependencies:9747 "@ethereumjs/common" "^2.4.0"9748 "@ethersproject/transactions" "^5.0.0-beta.135"9749 web3-core-helpers "1.6.0"9750 web3-core-promievent "1.6.0"9751 web3-core-subscriptions "1.6.0"9752 web3-utils "1.6.0"97539754web3-core-promievent@1.6.0:9755 version "1.6.0"9756 resolved "https://registry.yarnpkg.com/web3-core-promievent/-/web3-core-promievent-1.6.0.tgz#8b6053ae83cb47164540167fc361469fc604d2dd"9757 integrity sha512-ZzsevjMXWkhqW9dnVfTfb1OUcK7jKcKPvPIbQ4boJccNgvNZPZKlo8xB4pkAX38n4c59O5mC7Lt/z2QL/M5CeQ==9758 dependencies:9759 eventemitter3 "4.0.4"97609761web3-core-requestmanager@1.6.0:9762 version "1.6.0"9763 resolved "https://registry.yarnpkg.com/web3-core-requestmanager/-/web3-core-requestmanager-1.6.0.tgz#8ef3a3b89cd08983bd94574f9c5893f70a8a6aea"9764 integrity sha512-CY5paPdiDXKTXPWaEUZekDfUXSuoE2vPxolwqzsvKwFWH5+H1NaXgrc+D5HpufgSvTXawTw0fy7IAicg8+PWqA==9765 dependencies:9766 util "^0.12.0"9767 web3-core-helpers "1.6.0"9768 web3-providers-http "1.6.0"9769 web3-providers-ipc "1.6.0"9770 web3-providers-ws "1.6.0"97719772web3-core-subscriptions@1.6.0:9773 version "1.6.0"9774 resolved "https://registry.yarnpkg.com/web3-core-subscriptions/-/web3-core-subscriptions-1.6.0.tgz#8c23b15b434a7c9f937652ecca45d7108e2c54df"9775 integrity sha512-kY9WZUY/m1URSOv3uTLshoZD9ZDiFKReIzHuPUkxFpD5oYNmr1/aPQNPCrrMxKODR7UVX/D90FxWwCYqHhLaxQ==9776 dependencies:9777 eventemitter3 "4.0.4"9778 web3-core-helpers "1.6.0"97799780web3-core@1.6.0:9781 version "1.6.0"9782 resolved "https://registry.yarnpkg.com/web3-core/-/web3-core-1.6.0.tgz#144eb00f651c9812faf7176abd7ee99d5f45e212"9783 integrity sha512-o0WsLrJ2yD+HAAc29lGMWJef/MutTyuzpJC0UzLJtIAQJqtpDalzWINEu4j8XYXGk34N/V6vudtzRPo23QEE6g==9784 dependencies:9785 "@types/bn.js" "^4.11.5"9786 "@types/node" "^12.12.6"9787 bignumber.js "^9.0.0"9788 web3-core-helpers "1.6.0"9789 web3-core-method "1.6.0"9790 web3-core-requestmanager "1.6.0"9791 web3-utils "1.6.0"97929793web3-eth-abi@1.6.0:9794 version "1.6.0"9795 resolved "https://registry.yarnpkg.com/web3-eth-abi/-/web3-eth-abi-1.6.0.tgz#4225608f61ebb0607d80849bb2b20f910780253d"9796 integrity sha512-fImomGE9McuTMJLwK8Tp0lTUzXqCkWeMm00qPVIwpJ/h7lCw9UFYV9+4m29wSqW6FF+FIZKwc6UBEf9dlx3orA==9797 dependencies:9798 "@ethersproject/abi" "5.0.7"9799 web3-utils "1.6.0"98009801web3-eth-accounts@1.6.0:9802 version "1.6.0"9803 resolved "https://registry.yarnpkg.com/web3-eth-accounts/-/web3-eth-accounts-1.6.0.tgz#530927f4c5b78df93b3ea1203abbb467de29cd04"9804 integrity sha512-2f6HS4KIH4laAsNCOfbNX3dRiQosqSY2TRK86C8jtAA/QKGdx+5qlPfYzbI2RjG81iayb2+mVbHIaEaBGZ8sGw==9805 dependencies:9806 "@ethereumjs/common" "^2.3.0"9807 "@ethereumjs/tx" "^3.2.1"9808 crypto-browserify "3.12.0"9809 eth-lib "0.2.8"9810 ethereumjs-util "^7.0.10"9811 scrypt-js "^3.0.1"9812 uuid "3.3.2"9813 web3-core "1.6.0"9814 web3-core-helpers "1.6.0"9815 web3-core-method "1.6.0"9816 web3-utils "1.6.0"98179818web3-eth-contract@1.6.0:9819 version "1.6.0"9820 resolved "https://registry.yarnpkg.com/web3-eth-contract/-/web3-eth-contract-1.6.0.tgz#deb946867ad86d32bcbba899d733b681b25ea674"9821 integrity sha512-ZUtO77zFnxuFtrc+D+iJ3AzNgFXAVcKnhEYN7f1PNz/mFjbtE6dJ+ujO0mvMbxIZF02t9IZv0CIXRpK0rDvZAw==9822 dependencies:9823 "@types/bn.js" "^4.11.5"9824 web3-core "1.6.0"9825 web3-core-helpers "1.6.0"9826 web3-core-method "1.6.0"9827 web3-core-promievent "1.6.0"9828 web3-core-subscriptions "1.6.0"9829 web3-eth-abi "1.6.0"9830 web3-utils "1.6.0"98319832web3-eth-ens@1.6.0:9833 version "1.6.0"9834 resolved "https://registry.yarnpkg.com/web3-eth-ens/-/web3-eth-ens-1.6.0.tgz#af13852168d56fa71b9198eb097e96fb93831c2a"9835 integrity sha512-AG24PNv9qbYHSpjHcU2pViOII0jvIR7TeojJ2bxXSDqfcgHuRp3NZGKv6xFvT4uNI4LEQHUhSC7bzHoNF5t8CA==9836 dependencies:9837 content-hash "^2.5.2"9838 eth-ens-namehash "2.0.8"9839 web3-core "1.6.0"9840 web3-core-helpers "1.6.0"9841 web3-core-promievent "1.6.0"9842 web3-eth-abi "1.6.0"9843 web3-eth-contract "1.6.0"9844 web3-utils "1.6.0"98459846web3-eth-iban@1.6.0:9847 version "1.6.0"9848 resolved "https://registry.yarnpkg.com/web3-eth-iban/-/web3-eth-iban-1.6.0.tgz#edbe46cedc5b148d53fa455edea6b4eef53b2be7"9849 integrity sha512-HM/bKBS/e8qg0+Eh7B8C/JVG+GkR4AJty17DKRuwMtrh78YsonPj7GKt99zS4n5sDLFww1Imu/ZIk3+K5uJCjw==9850 dependencies:9851 bn.js "^4.11.9"9852 web3-utils "1.6.0"98539854web3-eth-personal@1.6.0:9855 version "1.6.0"9856 resolved "https://registry.yarnpkg.com/web3-eth-personal/-/web3-eth-personal-1.6.0.tgz#b75a61c0737b8b8bcc11d05db2ed7bfce7e4b262"9857 integrity sha512-8ohf4qAwbShf4RwES2tLHVqa+pHZnS5Q6tV80sU//bivmlZeyO1W4UWyNn59vu9KPpEYvLseOOC6Muxuvr8mFQ==9858 dependencies:9859 "@types/node" "^12.12.6"9860 web3-core "1.6.0"9861 web3-core-helpers "1.6.0"9862 web3-core-method "1.6.0"9863 web3-net "1.6.0"9864 web3-utils "1.6.0"98659866web3-eth@1.6.0:9867 version "1.6.0"9868 resolved "https://registry.yarnpkg.com/web3-eth/-/web3-eth-1.6.0.tgz#4c9d5fb4eccf9f8744828281757e6ea76af58cbd"9869 integrity sha512-qJMvai//r0be6I9ghU24/152f0zgJfYC23TMszN3Y6jse1JtjCBP2TlTibFcvkUN1RRdIUY5giqO7ZqAYAmp7w==9870 dependencies:9871 web3-core "1.6.0"9872 web3-core-helpers "1.6.0"9873 web3-core-method "1.6.0"9874 web3-core-subscriptions "1.6.0"9875 web3-eth-abi "1.6.0"9876 web3-eth-accounts "1.6.0"9877 web3-eth-contract "1.6.0"9878 web3-eth-ens "1.6.0"9879 web3-eth-iban "1.6.0"9880 web3-eth-personal "1.6.0"9881 web3-net "1.6.0"9882 web3-utils "1.6.0"98839884web3-net@1.6.0:9885 version "1.6.0"9886 resolved "https://registry.yarnpkg.com/web3-net/-/web3-net-1.6.0.tgz#2c28f8787073110a7c2310336889d2dad647e500"9887 integrity sha512-LFfG95ovTT2sNHkO1TEfsaKpYcxOSUtbuwHQ0K3G0e5nevKDJkPEFIqIcob40yiwcWoqEjENJP9Bjk8CRrZ99Q==9888 dependencies:9889 web3-core "1.6.0"9890 web3-core-method "1.6.0"9891 web3-utils "1.6.0"98929893web3-providers-http@1.6.0:9894 version "1.6.0"9895 resolved "https://registry.yarnpkg.com/web3-providers-http/-/web3-providers-http-1.6.0.tgz#8db4e589abf7197f5d65b12af1bf9726c45f4160"9896 integrity sha512-sNxHFNv3lnxpmULt34AS6M36IYB/Hzm2Et4yPNzdP1XE644D8sQBZQZaJQdTaza5HfrlwoqU6AOK935armqGuA==9897 dependencies:9898 web3-core-helpers "1.6.0"9899 xhr2-cookies "1.1.0"99009901web3-providers-ipc@1.6.0:9902 version "1.6.0"9903 resolved "https://registry.yarnpkg.com/web3-providers-ipc/-/web3-providers-ipc-1.6.0.tgz#6a3410fd47a67c4a36719fb97f99534ae12aac98"9904 integrity sha512-ETYdfhpGiGoWpmmSJnONvnPfd3TPivHEGjXyuX+L5FUsbMOVZj9MFLNIS19Cx/YGL8UWJ/8alLJoTcWSIdz/aA==9905 dependencies:9906 oboe "2.1.5"9907 web3-core-helpers "1.6.0"99089909web3-providers-ws@1.6.0:9910 version "1.6.0"9911 resolved "https://registry.yarnpkg.com/web3-providers-ws/-/web3-providers-ws-1.6.0.tgz#dc15dc18c30089efda992015fd5254bd2b77af5f"9912 integrity sha512-eNRmlhOPCpuVYwBrKBBQRLGPFb4U1Uo44r9EWV69Cpo4gP6XeBTl6nkawhLz6DS0fq79apyPfItJVuSfAy77pA==9913 dependencies:9914 eventemitter3 "4.0.4"9915 web3-core-helpers "1.6.0"9916 websocket "^1.0.32"99179918web3-shh@1.6.0:9919 version "1.6.0"9920 resolved "https://registry.yarnpkg.com/web3-shh/-/web3-shh-1.6.0.tgz#838a3435dce1039f669a48e53e948062de197931"9921 integrity sha512-ymN0OFL81WtEeSyb+PFpuUv39fR3frGwsZnIg5EVPZvrOIdaDSFcGSLDmafUt0vKSubvLMVYIBOCskRD6YdtEQ==9922 dependencies:9923 web3-core "1.6.0"9924 web3-core-method "1.6.0"9925 web3-core-subscriptions "1.6.0"9926 web3-net "1.6.0"99279928web3-utils@1.6.0:9929 version "1.6.0"9930 resolved "https://registry.yarnpkg.com/web3-utils/-/web3-utils-1.6.0.tgz#1975c5ee5b7db8a0836eb7004848a7cd962d1ddc"9931 integrity sha512-bgCAWAeQnJF035YTFxrcHJ5mGEfTi/McsjqldZiXRwlHK7L1PyOqvXiQLE053dlzvy1kdAxWl/sSSfLMyNUAXg==9932 dependencies:9933 bn.js "^4.11.9"9934 ethereum-bloom-filters "^1.0.6"9935 ethereumjs-util "^7.1.0"9936 ethjs-unit "0.1.6"9937 number-to-bn "1.7.0"9938 randombytes "^2.1.0"9939 utf8 "3.0.0"99409941web3@^1.6.0:9942 version "1.6.0"9943 resolved "https://registry.yarnpkg.com/web3/-/web3-1.6.0.tgz#d8fa0cd9e7bf252f9fe43bb77dc42bc6671affde"9944 integrity sha512-rWpXnO88MiVX5yTRqMBCVKASxc7QDkXZZUl1D48sKlbX4dt3BAV+nVMVUKCBKiluZ5Bp8pDrVCUdPx/jIYai5Q==9945 dependencies:9946 web3-bzz "1.6.0"9947 web3-core "1.6.0"9948 web3-eth "1.6.0"9949 web3-eth-personal "1.6.0"9950 web3-net "1.6.0"9951 web3-shh "1.6.0"9952 web3-utils "1.6.0"99539954webidl-conversions@^3.0.0:9955 version "3.0.1"9956 resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871"9957 integrity sha1-JFNCdeKnvGvnvIZhHMFq4KVlSHE=99589959webidl-conversions@^5.0.0:9960 version "5.0.0"9961 resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-5.0.0.tgz#ae59c8a00b121543a2acc65c0434f57b0fc11aff"9962 integrity sha512-VlZwKPCkYKxQgeSbH5EyngOmRp7Ww7I9rQLERETtf5ofd9pGeswWiOtogpEO850jziPRarreGxn5QIiTqpb2wA==99639964webidl-conversions@^6.1.0:9965 version "6.1.0"9966 resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-6.1.0.tgz#9111b4d7ea80acd40f5270d666621afa78b69514"9967 integrity sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w==99689969websocket@^1.0.32, websocket@^1.0.34:9970 version "1.0.34"9971 resolved "https://registry.yarnpkg.com/websocket/-/websocket-1.0.34.tgz#2bdc2602c08bf2c82253b730655c0ef7dcab3111"9972 integrity sha512-PRDso2sGwF6kM75QykIesBijKSVceR6jL2G8NGYyq2XrItNC2P5/qL5XeR056GhA+Ly7JMFvJb9I312mJfmqnQ==9973 dependencies:9974 bufferutil "^4.0.1"9975 debug "^2.2.0"9976 es5-ext "^0.10.50"9977 typedarray-to-buffer "^3.1.5"9978 utf-8-validate "^5.0.2"9979 yaeti "^0.0.6"99809981whatwg-encoding@^1.0.5:9982 version "1.0.5"9983 resolved "https://registry.yarnpkg.com/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz#5abacf777c32166a51d085d6b4f3e7d27113ddb0"9984 integrity sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw==9985 dependencies:9986 iconv-lite "0.4.24"99879988whatwg-mimetype@^2.3.0:9989 version "2.3.0"9990 resolved "https://registry.yarnpkg.com/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz#3d4b1e0312d2079879f826aff18dbeeca5960fbf"9991 integrity sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g==99929993whatwg-url@^5.0.0:9994 version "5.0.0"9995 resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-5.0.0.tgz#966454e8765462e37644d3626f6742ce8b70965d"9996 integrity sha1-lmRU6HZUYuN2RNNib2dCzotwll0=9997 dependencies:9998 tr46 "~0.0.3"9999 webidl-conversions "^3.0.0"1000010001whatwg-url@^8.0.0, whatwg-url@^8.5.0:10002 version "8.6.0"10003 resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-8.6.0.tgz#27c0205a4902084b872aecb97cf0f2a7a3011f4c"10004 integrity sha512-os0KkeeqUOl7ccdDT1qqUcS4KH4tcBTSKK5Nl5WKb2lyxInIZ/CpjkqKa1Ss12mjfdcRX9mHmPPs7/SxG1Hbdw==10005 dependencies:10006 lodash "^4.7.0"10007 tr46 "^2.1.0"10008 webidl-conversions "^6.1.0"1000910010which-boxed-primitive@^1.0.2:10011 version "1.0.2"10012 resolved "https://registry.yarnpkg.com/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz#13757bc89b209b049fe5d86430e21cf40a89a8e6"10013 integrity sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==10014 dependencies:10015 is-bigint "^1.0.1"10016 is-boolean-object "^1.1.0"10017 is-number-object "^1.0.4"10018 is-string "^1.0.5"10019 is-symbol "^1.0.3"1002010021which-typed-array@^1.1.2:10022 version "1.1.4"10023 resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.4.tgz#8fcb7d3ee5adf2d771066fba7cf37e32fe8711ff"10024 integrity sha512-49E0SpUe90cjpoc7BOJwyPHRqSAd12c10Qm2amdEZrJPCY2NDxaW01zHITrem+rnETY3dwrbH3UUrUwagfCYDA==10025 dependencies:10026 available-typed-arrays "^1.0.2"10027 call-bind "^1.0.0"10028 es-abstract "^1.18.0-next.1"10029 foreach "^2.0.5"10030 function-bind "^1.1.1"10031 has-symbols "^1.0.1"10032 is-typed-array "^1.1.3"1003310034which@2.0.2, which@^2.0.1:10035 version "2.0.2"10036 resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1"10037 integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==10038 dependencies:10039 isexe "^2.0.0"1004010041wide-align@^1.1.2:10042 version "1.1.5"10043 resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.5.tgz#df1d4c206854369ecf3c9a4898f1b23fbd9d15d3"10044 integrity sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==10045 dependencies:10046 string-width "^1.0.2 || 2 || 3 || 4"1004710048widest-line@^3.1.0:10049 version "3.1.0"10050 resolved "https://registry.yarnpkg.com/widest-line/-/widest-line-3.1.0.tgz#8292333bbf66cb45ff0de1603b136b7ae1496eca"10051 integrity sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg==10052 dependencies:10053 string-width "^4.0.0"1005410055word-wrap@^1.2.3, word-wrap@~1.2.3:10056 version "1.2.3"10057 resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c"10058 integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==1005910060wordwrap@^1.0.0:10061 version "1.0.0"10062 resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb"10063 integrity sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=1006410065workerpool@6.1.5:10066 version "6.1.5"10067 resolved "https://registry.yarnpkg.com/workerpool/-/workerpool-6.1.5.tgz#0f7cf076b6215fd7e1da903ff6f22ddd1886b581"10068 integrity sha512-XdKkCK0Zqc6w3iTxLckiuJ81tiD/o5rBE/m+nXpRCB+/Sq4DqkfXZ/x0jW02DG1tGsfUGXbTJyZDP+eu67haSw==1006910070wrap-ansi@^7.0.0:10071 version "7.0.0"10072 resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43"10073 integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==10074 dependencies:10075 ansi-styles "^4.0.0"10076 string-width "^4.1.0"10077 strip-ansi "^6.0.0"1007810079wrappy@1:10080 version "1.0.2"10081 resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f"10082 integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=1008310084write-file-atomic@^3.0.0:10085 version "3.0.3"10086 resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-3.0.3.tgz#56bd5c5a5c70481cd19c571bd39ab965a5de56e8"10087 integrity sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==10088 dependencies:10089 imurmurhash "^0.1.4"10090 is-typedarray "^1.0.0"10091 signal-exit "^3.0.2"10092 typedarray-to-buffer "^3.1.5"1009310094write-json-file@^4.2.0:10095 version "4.3.0"10096 resolved "https://registry.yarnpkg.com/write-json-file/-/write-json-file-4.3.0.tgz#908493d6fd23225344af324016e4ca8f702dd12d"10097 integrity sha512-PxiShnxf0IlnQuMYOPPhPkhExoCQuTUNPOa/2JWCYTmBquU9njyyDuwRKN26IZBlp4yn1nt+Agh2HOOBl+55HQ==10098 dependencies:10099 detect-indent "^6.0.0"10100 graceful-fs "^4.1.15"10101 is-plain-obj "^2.0.0"10102 make-dir "^3.0.0"10103 sort-keys "^4.0.0"10104 write-file-atomic "^3.0.0"1010510106ws@^3.0.0:10107 version "3.3.3"10108 resolved "https://registry.yarnpkg.com/ws/-/ws-3.3.3.tgz#f1cf84fe2d5e901ebce94efaece785f187a228f2"10109 integrity sha512-nnWLa/NwZSt4KQJu51MYlCcSQ5g7INpOrOMt4XV8j4dqTXdmlUmSHQ8/oLC069ckre0fRsgfvsKwbTdtKLCDkA==10110 dependencies:10111 async-limiter "~1.0.0"10112 safe-buffer "~5.1.0"10113 ultron "~1.1.0"1011410115ws@^7.4.5:10116 version "7.5.0"10117 resolved "https://registry.yarnpkg.com/ws/-/ws-7.5.0.tgz#0033bafea031fb9df041b2026fc72a571ca44691"10118 integrity sha512-6ezXvzOZupqKj4jUqbQ9tXuJNo+BR2gU8fFRk3XCP3e0G6WT414u5ELe6Y0vtp7kmSJ3F7YWObSNr1ESsgi4vw==1011910120xdg-basedir@^4.0.0:10121 version "4.0.0"10122 resolved "https://registry.yarnpkg.com/xdg-basedir/-/xdg-basedir-4.0.0.tgz#4bc8d9984403696225ef83a1573cbbcb4e79db13"10123 integrity sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q==1012410125xhr-request-promise@^0.1.2:10126 version "0.1.3"10127 resolved "https://registry.yarnpkg.com/xhr-request-promise/-/xhr-request-promise-0.1.3.tgz#2d5f4b16d8c6c893be97f1a62b0ed4cf3ca5f96c"10128 integrity sha512-YUBytBsuwgitWtdRzXDDkWAXzhdGB8bYm0sSzMPZT7Z2MBjMSTHFsyCT1yCRATY+XC69DUrQraRAEgcoCRaIPg==10129 dependencies:10130 xhr-request "^1.1.0"1013110132xhr-request@^1.0.1, xhr-request@^1.1.0:10133 version "1.1.0"10134 resolved "https://registry.yarnpkg.com/xhr-request/-/xhr-request-1.1.0.tgz#f4a7c1868b9f198723444d82dcae317643f2e2ed"10135 integrity sha512-Y7qzEaR3FDtL3fP30k9wO/e+FBnBByZeybKOhASsGP30NIkRAAkKD/sCnLvgEfAIEC1rcmK7YG8f4oEnIrrWzA==10136 dependencies:10137 buffer-to-arraybuffer "^0.0.5"10138 object-assign "^4.1.1"10139 query-string "^5.0.1"10140 simple-get "^2.7.0"10141 timed-out "^4.0.1"10142 url-set-query "^1.0.0"10143 xhr "^2.0.4"1014410145xhr2-cookies@1.1.0:10146 version "1.1.0"10147 resolved "https://registry.yarnpkg.com/xhr2-cookies/-/xhr2-cookies-1.1.0.tgz#7d77449d0999197f155cb73b23df72505ed89d48"10148 integrity sha1-fXdEnQmZGX8VXLc7I99yUF7YnUg=10149 dependencies:10150 cookiejar "^2.1.1"1015110152xhr@^2.0.4, xhr@^2.3.3:10153 version "2.6.0"10154 resolved "https://registry.yarnpkg.com/xhr/-/xhr-2.6.0.tgz#b69d4395e792b4173d6b7df077f0fc5e4e2b249d"10155 integrity sha512-/eCGLb5rxjx5e3mF1A7s+pLlR6CGyqWN91fv1JgER5mVWg1MZmlhBvy9kjcsOdRk8RrIujotWyJamfyrp+WIcA==10156 dependencies:10157 global "~4.4.0"10158 is-function "^1.0.1"10159 parse-headers "^2.0.0"10160 xtend "^4.0.0"1016110162xml-name-validator@^3.0.0:10163 version "3.0.0"10164 resolved "https://registry.yarnpkg.com/xml-name-validator/-/xml-name-validator-3.0.0.tgz#6ae73e06de4d8c6e47f9fb181f78d648ad457c6a"10165 integrity sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==1016610167xmlchars@^2.2.0:10168 version "2.2.0"10169 resolved "https://registry.yarnpkg.com/xmlchars/-/xmlchars-2.2.0.tgz#060fe1bcb7f9c76fe2a17db86a9bc3ab894210cb"10170 integrity sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==1017110172xtend@^4.0.0, xtend@~4.0.1:10173 version "4.0.2"10174 resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54"10175 integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==1017610177xxhashjs@^0.2.2:10178 version "0.2.2"10179 resolved "https://registry.yarnpkg.com/xxhashjs/-/xxhashjs-0.2.2.tgz#8a6251567621a1c46a5ae204da0249c7f8caa9d8"10180 integrity sha512-AkTuIuVTET12tpsVIQo+ZU6f/qDmKuRUcjaqR+OIvm+aCBsZ95i7UVY5WJ9TMsSaZ0DA2WxoZ4acu0sPH+OKAw==10181 dependencies:10182 cuint "^0.2.2"1018310184y18n@^5.0.5:10185 version "5.0.8"10186 resolved "https://registry.yarnpkg.com/y18n/-/y18n-5.0.8.tgz#7f4934d0f7ca8c56f95314939ddcd2dd91ce1d55"10187 integrity sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==1018810189yaeti@^0.0.6:10190 version "0.0.6"10191 resolved "https://registry.yarnpkg.com/yaeti/-/yaeti-0.0.6.tgz#f26f484d72684cf42bedfb76970aa1608fbf9577"10192 integrity sha1-8m9ITXJoTPQr7ft2lwqhYI+/lXc=1019310194yallist@^2.1.2:10195 version "2.1.2"10196 resolved "https://registry.yarnpkg.com/yallist/-/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52"10197 integrity sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=1019810199yallist@^3.0.0, yallist@^3.0.3:10200 version "3.1.1"10201 resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd"10202 integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==1020310204yallist@^4.0.0:10205 version "4.0.0"10206 resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72"10207 integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==1020810209yargs-parser@20.2.4:10210 version "20.2.4"10211 resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.4.tgz#b42890f14566796f85ae8e3a25290d205f154a54"10212 integrity sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==1021310214yargs-parser@^20.2.2:10215 version "20.2.7"10216 resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.7.tgz#61df85c113edfb5a7a4e36eb8aa60ef423cbc90a"10217 integrity sha512-FiNkvbeHzB/syOjIUxFDCnhSfzAL8R5vs40MgLFBorXACCOAEaWu0gRZl14vG8MR9AOJIZbmkjhusqBYZ3HTHw==1021810219yargs-unparser@2.0.0:10220 version "2.0.0"10221 resolved "https://registry.yarnpkg.com/yargs-unparser/-/yargs-unparser-2.0.0.tgz#f131f9226911ae5d9ad38c432fe809366c2325eb"10222 integrity sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==10223 dependencies:10224 camelcase "^6.0.0"10225 decamelize "^4.0.0"10226 flat "^5.0.2"10227 is-plain-obj "^2.1.0"1022810229yargs@16.2.0, yargs@^16.2.0:10230 version "16.2.0"10231 resolved "https://registry.yarnpkg.com/yargs/-/yargs-16.2.0.tgz#1c82bf0f6b6a66eafce7ef30e376f49a12477f66"10232 integrity sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==10233 dependencies:10234 cliui "^7.0.2"10235 escalade "^3.1.1"10236 get-caller-file "^2.0.5"10237 require-directory "^2.1.1"10238 string-width "^4.2.0"10239 y18n "^5.0.5"10240 yargs-parser "^20.2.2"1024110242yargs@^17.0.0:10243 version "17.0.1"10244 resolved "https://registry.yarnpkg.com/yargs/-/yargs-17.0.1.tgz#6a1ced4ed5ee0b388010ba9fd67af83b9362e0bb"10245 integrity sha512-xBBulfCc8Y6gLFcrPvtqKz9hz8SO0l1Ni8GgDekvBX2ro0HRQImDGnikfc33cgzcYUSncapnNcZDjVFIH3f6KQ==10246 dependencies:10247 cliui "^7.0.2"10248 escalade "^3.1.1"10249 get-caller-file "^2.0.5"10250 require-directory "^2.1.1"10251 string-width "^4.2.0"10252 y18n "^5.0.5"10253 yargs-parser "^20.2.2"1025410255yargs@^17.2.1:10256 version "17.2.1"10257 resolved "https://registry.yarnpkg.com/yargs/-/yargs-17.2.1.tgz#e2c95b9796a0e1f7f3bf4427863b42e0418191ea"10258 integrity sha512-XfR8du6ua4K6uLGm5S6fA+FIJom/MdJcFNVY8geLlp2v8GYbOXD4EB1tPNZsRn4vBzKGMgb5DRZMeWuFc2GO8Q==10259 dependencies:10260 cliui "^7.0.2"10261 escalade "^3.1.1"10262 get-caller-file "^2.0.5"10263 require-directory "^2.1.1"10264 string-width "^4.2.0"10265 y18n "^5.0.5"10266 yargs-parser "^20.2.2"1026710268yn@3.1.1:10269 version "3.1.1"10270 resolved "https://registry.yarnpkg.com/yn/-/yn-3.1.1.tgz#1e87401a09d767c1d5eab26a6e4c185182d2eb50"10271 integrity sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==1027210273yocto-queue@^0.1.0:10274 version "0.1.0"10275 resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b"10276 integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==