diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index 977bc1e..6464fc3 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -11,30 +11,18 @@ jobs: runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 - - uses: actions/setup-node@v3 - with: - node-version: 16 - cache: "npm" - cache-dependency-path: "tests/package-lock.json" - uses: actions-rs/toolchain@v1 with: - toolchain: 1.69.0 - - uses: aviate-labs/setup-dfx@v0.2.6 - with: - dfx-version: 0.14.1 + toolchain: "stable" - uses: Swatinem/rust-cache@v2 with: cache-on-failure: "true" - name: Run unit tests - run: cargo test - - name: Install dependencies for integration tests - run: cd tests && npm install + run: cargo test -p ic-websocket-cdk - name: Prepare environment for integration tests run: | - cd tests rustup target add wasm32-unknown-unknown - dfx start --clean --background - npm run deploy:tests - npm run generate + ./scripts/download-pocket-ic.sh + ./scripts/build-test-canister.sh - name: Run integration tests - run: cd tests && npm run test:integration + run: POCKET_IC_BIN="$(pwd)/bin/pocket-ic" cargo test --package ic-websocket-cdk --lib -- tests::integration_tests --test-threads 1 diff --git a/.gitignore b/.gitignore index 93f42f7..945ff5a 100644 --- a/.gitignore +++ b/.gitignore @@ -3,8 +3,8 @@ !.vscode/settings.json target -node_modules -.dfx -dist declarations .env + +# the binary file needed for tests +pocket-ic diff --git a/Cargo.lock b/Cargo.lock index a27d9f6..7396bc2 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -29,6 +29,17 @@ version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "23b62fc65de8e4e7f52534fb52b0f3ed04746ae267519eef2a83941e8085068b" +[[package]] +name = "async-trait" +version = "0.1.74" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a66537f1bb974b254c98ed142ff995236e81b9d0fe4db0575f46612cb15eb0f9" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.38", +] + [[package]] name = "autocfg" version = "1.1.0" @@ -67,6 +78,12 @@ version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4c7f02d4ea65f2c1853089ffd8d2787bdbc63de2f0d29dedbcf8ccdfa0ccd4cf" +[[package]] +name = "base64" +version = "0.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9e1b586273c5702936fe7b7d6896644d8be71e6314cfe09d3167c95f712589e8" + [[package]] name = "base64" version = "0.21.5" @@ -739,7 +756,7 @@ dependencies = [ "hex", "http", "http-body", - "ic-certification", + "ic-certification 0.25.0", "ic-verify-bls-signature", "k256", "leb128", @@ -762,6 +779,19 @@ dependencies = [ "url", ] +[[package]] +name = "ic-cbor" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "767fe244224c02f2adad1d43909de93d35d5caada28eed3f270d89735ba5bdd0" +dependencies = [ + "candid", + "ic-certification 1.2.0", + "leb128", + "nom", + "thiserror", +] + [[package]] name = "ic-cdk" version = "0.10.0" @@ -803,6 +833,21 @@ dependencies = [ "slotmap", ] +[[package]] +name = "ic-certificate-verification" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "07bc3fa76751b637bb0c0e37f4089d7f5a3fbacfed3c5fbcfef0d6797a54d63f" +dependencies = [ + "candid", + "ic-cbor", + "ic-certification 1.2.0", + "leb128", + "miracl_core_bls12381", + "nom", + "thiserror", +] + [[package]] name = "ic-certification" version = "0.25.0" @@ -815,6 +860,18 @@ dependencies = [ "sha2 0.10.8", ] +[[package]] +name = "ic-certification" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a59dc342d11b2067e19d0f146bdec3674de921303ffc762f114d201ebbe0e68a" +dependencies = [ + "hex", + "serde", + "serde_bytes", + "sha2 0.10.8", +] + [[package]] name = "ic-certified-map" version = "0.4.0" @@ -842,13 +899,17 @@ dependencies = [ name = "ic-websocket-cdk" version = "0.2.0" dependencies = [ - "base64", + "base64 0.21.5", "candid", "ic-agent", "ic-cdk", "ic-cdk-macros", "ic-cdk-timers", + "ic-certificate-verification", + "ic-certification 1.2.0", "ic-certified-map", + "lazy_static", + "pocket-ic", "proptest", "rand", "ring 0.16.20", @@ -986,6 +1047,12 @@ version = "0.3.17" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a" +[[package]] +name = "minimal-lexical" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" + [[package]] name = "miniz_oxide" version = "0.7.1" @@ -1006,6 +1073,22 @@ dependencies = [ "windows-sys", ] +[[package]] +name = "miracl_core_bls12381" +version = "4.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d07cbe42e2a8dd41df582fb8e00fc24d920b5561cc301fcb6d14e2e0434b500f" + +[[package]] +name = "nom" +version = "7.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d273983c5a657a70a3e8f2a01329822f3b8c8172b73826411a55751e404a0a4a" +dependencies = [ + "memchr", + "minimal-lexical", +] + [[package]] name = "num-bigint" version = "0.4.4" @@ -1111,7 +1194,7 @@ version = "2.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6b13fe415cdf3c8e44518e18a7c95a13431d9bdf6d15367d82b23c377fdd441a" dependencies = [ - "base64", + "base64 0.21.5", "serde", ] @@ -1152,6 +1235,23 @@ dependencies = [ "spki", ] +[[package]] +name = "pocket-ic" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f3ec0d4fbef9949836203390b819d2ad944f405030f93c724f78d20184d59f85" +dependencies = [ + "async-trait", + "base64 0.13.1", + "candid", + "hex", + "ic-cdk", + "reqwest", + "serde", + "serde_bytes", + "serde_json", +] + [[package]] name = "powerfmt" version = "0.2.0" @@ -1298,7 +1398,7 @@ version = "0.11.22" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "046cd98826c46c2ac8ddecae268eb5c2e58628688a5fc7a2643704a73faba95b" dependencies = [ - "base64", + "base64 0.21.5", "bytes", "encoding_rs", "futures-core", @@ -1422,7 +1522,7 @@ version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2d3987094b1d07b653b7dfdc3f70ce9a1da9c51ac18c1b06b662e4f9a0e9f4b2" dependencies = [ - "base64", + "base64 0.21.5", ] [[package]] diff --git a/Cargo.toml b/Cargo.toml index a4e06bf..f920deb 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,7 +1,7 @@ [workspace] members = [ "src/ic-websocket-cdk", - "tests", + "src/test_canister", ] resolver = "2" diff --git a/bin/test_canister.wasm b/bin/test_canister.wasm new file mode 120000 index 0000000..1138086 --- /dev/null +++ b/bin/test_canister.wasm @@ -0,0 +1 @@ +../target/wasm32-unknown-unknown/release/test_canister.wasm \ No newline at end of file diff --git a/scripts/build-test-canister.sh b/scripts/build-test-canister.sh new file mode 100755 index 0000000..f60c0ed --- /dev/null +++ b/scripts/build-test-canister.sh @@ -0,0 +1,3 @@ +#!/bin/bash + +cargo build --locked --target wasm32-unknown-unknown --release --package test_canister diff --git a/scripts/download-pocket-ic.sh b/scripts/download-pocket-ic.sh new file mode 100755 index 0000000..56687ec --- /dev/null +++ b/scripts/download-pocket-ic.sh @@ -0,0 +1,18 @@ +#!/bin/bash + +cd bin/ + +POCKET_IC_BIN=pocket-ic +if [ -f "$POCKET_IC_BIN" ]; then + echo -e "$POCKET_IC_BIN exists. Path: $(pwd)/$POCKET_IC_BIN\n" +else + echo "$POCKET_IC_BIN does not exist." + echo "Downloading Pocket IC binary..." + curl -sLO https://download.dfinity.systems/ic/307d5847c1d2fe1f5e19181c7d0fcec23f4658b3/openssl-static-binaries/x86_64-linux/pocket-ic.gz + + echo "Extracting Pocket IC binary..." + gzip -d $POCKET_IC_BIN.gz + chmod +x $POCKET_IC_BIN + + echo -e "Pocket IC binary downloaded and extracted successfully! Path: $(pwd)/$POCKET_IC_BIN\n" +fi diff --git a/scripts/test_canister.sh b/scripts/test_canister.sh index b550bb0..edcb452 100755 --- a/scripts/test_canister.sh +++ b/scripts/test_canister.sh @@ -3,19 +3,11 @@ set -e # unit tests -cargo test -p ic-websocket-cdk - -cd tests - -npm install +cargo test --package ic-websocket-cdk --lib -- tests::unit_tests # integration tests -dfx start --clean --background - -npm run deploy:tests - -npm run generate +./scripts/download-pocket-ic.sh -npm run test:integration +./scripts/build-test-canister.sh -dfx stop +POCKET_IC_BIN=$(pwd)/bin/pocket-ic RUST_BACKTRACE=1 cargo test --package ic-websocket-cdk --lib -- tests::integration_tests --test-threads 1 diff --git a/src/ic-websocket-cdk/Cargo.toml b/src/ic-websocket-cdk/Cargo.toml index f773642..004b63c 100644 --- a/src/ic-websocket-cdk/Cargo.toml +++ b/src/ic-websocket-cdk/Cargo.toml @@ -22,7 +22,7 @@ serde = { workspace = true } serde_cbor = { workspace = true } ic-certified-map = "0.4.0" base64 = "0.21.2" -sha2 = "0.10.7" +sha2 = "0.10.8" serde_bytes = "0.11.12" [dev-dependencies] @@ -30,6 +30,10 @@ ic-agent = "0.25.0" proptest = "1.2.0" rand = "0.8.5" ring = "0.16.20" +lazy_static = "1.4.0" +pocket-ic = "1.0.0" +ic-certificate-verification = "1.2.0" +ic-certification = "1.2.0" [package.metadata.docs.rs] default-target = "wasm32-unknown-unknown" diff --git a/src/ic-websocket-cdk/service_messages.did b/src/ic-websocket-cdk/service_messages.did new file mode 100644 index 0000000..81da189 --- /dev/null +++ b/src/ic-websocket-cdk/service_messages.did @@ -0,0 +1,23 @@ +type ClientPrincipal = principal; +type ClientKey = record { + client_principal : ClientPrincipal; + client_nonce : nat64; +}; + +type CanisterOpenMessageContent = record { + client_key : ClientKey; +}; + +type CanisterAckMessageContent = record { + last_incoming_sequence_num : nat64; +}; + +type ClientKeepAliveMessageContent = record { + last_incoming_sequence_num : nat64; +}; + +type WebsocketServiceMessageContent = variant { + OpenMessage : CanisterOpenMessageContent; + AckMessage : CanisterAckMessageContent; + KeepAliveMessage : ClientKeepAliveMessageContent; +}; diff --git a/src/ic-websocket-cdk/src/lib.rs b/src/ic-websocket-cdk/src/lib.rs index 5d7603a..f0f4cf9 100644 --- a/src/ic-websocket-cdk/src/lib.rs +++ b/src/ic-websocket-cdk/src/lib.rs @@ -20,6 +20,7 @@ use std::{ }; mod logger; +mod tests; /// The label used when constructing the certification tree. const LABEL_WEBSOCKET: &[u8] = b"websocket"; @@ -40,14 +41,14 @@ const INITIAL_CANISTER_SEQUENCE_NUM: u64 = 0; pub type ClientPrincipal = Principal; #[derive(CandidType, Clone, Deserialize, Serialize, Eq, PartialEq, Debug, Hash)] -struct ClientKey { - client_principal: ClientPrincipal, - client_nonce: u64, +pub(crate) struct ClientKey { + pub client_principal: ClientPrincipal, + pub client_nonce: u64, } impl ClientKey { /// Creates a new instance of ClientKey. - fn new(client_principal: ClientPrincipal, client_nonce: u64) -> Self { + pub(crate) fn new(client_principal: ClientPrincipal, client_nonce: u64) -> Self { Self { client_principal, client_nonce, @@ -75,36 +76,36 @@ pub type CanisterWsSendResult = Result<(), String>; /// The arguments for [ws_open]. #[derive(CandidType, Clone, Deserialize, Serialize, Eq, PartialEq, Debug)] pub struct CanisterWsOpenArguments { - client_nonce: u64, + pub(crate) client_nonce: u64, } /// The arguments for [ws_close]. #[derive(CandidType, Clone, Deserialize, Serialize, Eq, PartialEq, Debug)] pub struct CanisterWsCloseArguments { - client_key: ClientKey, + pub(crate) client_key: ClientKey, } /// The arguments for [ws_message]. #[derive(CandidType, Clone, Deserialize, Serialize, Eq, PartialEq, Debug)] pub struct CanisterWsMessageArguments { - msg: WebsocketMessage, + pub(crate) msg: WebsocketMessage, } /// The arguments for [ws_get_messages]. #[derive(CandidType, Clone, Deserialize, Serialize, Eq, PartialEq, Debug)] pub struct CanisterWsGetMessagesArguments { - nonce: u64, + pub(crate) nonce: u64, } /// Messages exchanged through the WebSocket. #[derive(CandidType, Clone, Debug, Deserialize, Serialize, Eq, PartialEq)] -struct WebsocketMessage { - client_key: ClientKey, // The client that the gateway will forward the message to or that sent the message. - sequence_num: u64, // Both ways, messages should arrive with sequence numbers 0, 1, 2... - timestamp: u64, // Timestamp of when the message was made for the recipient to inspect. - is_service_message: bool, // Whether the message is a service message sent by the CDK to the client or vice versa. +pub(crate) struct WebsocketMessage { + pub client_key: ClientKey, // The client that the gateway will forward the message to or that sent the message. + pub sequence_num: u64, // Both ways, messages should arrive with sequence numbers 0, 1, 2... + pub timestamp: u64, // Timestamp of when the message was made for the recipient to inspect. + pub is_service_message: bool, // Whether the message is a service message sent by the CDK to the client or vice versa. #[serde(with = "serde_bytes")] - content: Vec, // Application message encoded in binary. + pub content: Vec, // Application message encoded in binary. } impl WebsocketMessage { @@ -119,22 +120,22 @@ impl WebsocketMessage { } /// Element of the list of messages returned to the WS Gateway after polling. -#[derive(CandidType, Clone, Deserialize, Serialize, Eq, PartialEq)] +#[derive(CandidType, Clone, Debug, Deserialize, Serialize, Eq, PartialEq)] pub struct CanisterOutputMessage { - client_key: ClientKey, // The client that the gateway will forward the message to or that sent the message. - key: String, // Key for certificate verification. + pub(crate) client_key: ClientKey, // The client that the gateway will forward the message to or that sent the message. + pub(crate) key: String, // Key for certificate verification. #[serde(with = "serde_bytes")] - content: Vec, // The message to be relayed, that contains the application message. + pub(crate) content: Vec, // The message to be relayed, that contains the application message. } /// List of messages returned to the WS Gateway after polling. -#[derive(CandidType, Clone, Deserialize, Serialize, Eq, PartialEq)] +#[derive(CandidType, Clone, Debug, Deserialize, Serialize, Eq, PartialEq)] pub struct CanisterOutputCertifiedMessages { - messages: Vec, // List of messages. + pub(crate) messages: Vec, // List of messages. #[serde(with = "serde_bytes")] - cert: Vec, // cert+tree constitute the certificate for all returned messages. + pub(crate) cert: Vec, // cert+tree constitute the certificate for all returned messages. #[serde(with = "serde_bytes")] - tree: Vec, // cert+tree constitute the certificate for all returned messages. + pub(crate) tree: Vec, // cert+tree constitute the certificate for all returned messages. } #[derive(Copy, Clone, Debug, Eq, PartialEq)] @@ -556,24 +557,24 @@ fn get_handlers_from_params() -> WsHandlers { get_params().get_handlers() } -#[derive(CandidType, Debug, Deserialize)] -struct CanisterOpenMessageContent { - client_key: ClientKey, +#[derive(CandidType, Debug, Deserialize, PartialEq, Eq)] +pub(crate) struct CanisterOpenMessageContent { + pub client_key: ClientKey, } -#[derive(CandidType, Debug, Deserialize)] -struct CanisterAckMessageContent { - last_incoming_sequence_num: u64, +#[derive(CandidType, Debug, Deserialize, PartialEq, Eq)] +pub(crate) struct CanisterAckMessageContent { + pub last_incoming_sequence_num: u64, } -#[derive(CandidType, Debug, Deserialize)] -struct ClientKeepAliveMessageContent { - last_incoming_sequence_num: u64, +#[derive(CandidType, Debug, Deserialize, PartialEq, Eq)] +pub(crate) struct ClientKeepAliveMessageContent { + pub last_incoming_sequence_num: u64, } /// A service message sent by the CDK to the client or vice versa. -#[derive(CandidType, Debug, Deserialize)] -enum WebsocketServiceMessageContent { +#[derive(CandidType, Debug, Deserialize, PartialEq, Eq)] +pub(crate) enum WebsocketServiceMessageContent { /// Message sent by the **canister** when a client opens a connection. OpenMessage(CanisterOpenMessageContent), /// Message sent _periodically_ by the **canister** to the client to acknowledge the messages received. @@ -1139,634 +1140,3 @@ pub fn ws_send(client_principal: ClientPrincipal, msg_bytes: Vec) -> Caniste let client_key = get_client_key_from_principal(&client_principal)?; _ws_send(&client_key, msg_bytes, false) } - -#[cfg(test)] -mod test { - use super::*; - use proptest::prelude::*; - - mod test_utils { - use candid::Principal; - use ic_agent::{identity::BasicIdentity, Identity}; - use ring::signature::Ed25519KeyPair; - - use super::{ - get_message_for_gateway_key, CanisterOutputMessage, ClientKey, RegisteredClient, - MESSAGES_FOR_GATEWAY, - }; - - fn generate_random_key_pair() -> Ed25519KeyPair { - let rng = ring::rand::SystemRandom::new(); - let key_pair = - Ed25519KeyPair::generate_pkcs8(&rng).expect("Could not generate a key pair."); - Ed25519KeyPair::from_pkcs8(key_pair.as_ref()).expect("Could not read the key pair.") - } - - pub fn generate_random_principal() -> candid::Principal { - let key_pair = generate_random_key_pair(); - let identity = BasicIdentity::from_key_pair(key_pair); - - // workaround to keep the principal in the version of candid used by the canister - candid::Principal::from_text(identity.sender().unwrap().to_text()).unwrap() - } - - pub(super) fn generate_random_registered_client() -> RegisteredClient { - RegisteredClient::new() - } - - pub fn get_static_principal() -> Principal { - Principal::from_text("wnkwv-wdqb5-7wlzr-azfpw-5e5n5-dyxrf-uug7x-qxb55-mkmpa-5jqik-tqe") - .unwrap() // a random static but valid principal - } - - pub(super) fn get_random_client_key() -> ClientKey { - ClientKey::new( - generate_random_principal(), - // a random nonce - rand::random(), - ) - } - - pub(super) fn add_messages_for_gateway( - client_key: ClientKey, - gateway_principal: Principal, - count: u64, - ) { - MESSAGES_FOR_GATEWAY.with(|m| { - for i in 0..count { - m.borrow_mut().push_back(CanisterOutputMessage { - client_key: client_key.clone(), - key: get_message_for_gateway_key(gateway_principal.clone(), i), - content: vec![], - }); - } - }); - } - - pub fn clean_messages_for_gateway() { - MESSAGES_FOR_GATEWAY.with(|m| m.borrow_mut().clear()); - } - } - - // we don't need to proptest get_gateway_principal if principal is not set, as it just panics - #[test] - #[should_panic = "gateway should be initialized"] - fn test_get_gateway_principal_not_set() { - get_registered_gateway_principal(); - } - - #[test] - fn test_ws_handlers_are_called() { - struct CustomState { - is_on_open_called: bool, - is_on_message_called: bool, - is_on_close_called: bool, - } - - impl CustomState { - fn new() -> Self { - Self { - is_on_open_called: false, - is_on_message_called: false, - is_on_close_called: false, - } - } - } - - thread_local! { - static CUSTOM_STATE : RefCell = RefCell::new(CustomState::new()); - } - - let mut h = WsHandlers { - on_open: None, - on_message: None, - on_close: None, - }; - - set_params(WsInitParams { - handlers: h.clone(), - ..Default::default() - }); - - let handlers = get_handlers_from_params(); - - assert!(handlers.on_open.is_none()); - assert!(handlers.on_message.is_none()); - assert!(handlers.on_close.is_none()); - - handlers.call_on_open(OnOpenCallbackArgs { - client_principal: test_utils::generate_random_principal(), - }); - handlers.call_on_message(OnMessageCallbackArgs { - client_principal: test_utils::generate_random_principal(), - message: vec![], - }); - handlers.call_on_close(OnCloseCallbackArgs { - client_principal: test_utils::generate_random_principal(), - }); - - // test that the handlers are not called if they are not initialized - assert!(!CUSTOM_STATE.with(|h| h.borrow().is_on_open_called)); - assert!(!CUSTOM_STATE.with(|h| h.borrow().is_on_message_called)); - assert!(!CUSTOM_STATE.with(|h| h.borrow().is_on_close_called)); - - // initialize handlers - let on_open = |_| { - CUSTOM_STATE.with(|h| { - let mut h = h.borrow_mut(); - h.is_on_open_called = true; - }); - }; - let on_message = |_| { - CUSTOM_STATE.with(|h| { - let mut h = h.borrow_mut(); - h.is_on_message_called = true; - }); - }; - let on_close = |_| { - CUSTOM_STATE.with(|h| { - let mut h = h.borrow_mut(); - h.is_on_close_called = true; - }); - }; - - h = WsHandlers { - on_open: Some(on_open), - on_message: Some(on_message), - on_close: Some(on_close), - }; - - set_params(WsInitParams { - handlers: h.clone(), - ..Default::default() - }); - - let handlers = get_handlers_from_params(); - - assert!(handlers.on_open.is_some()); - assert!(handlers.on_message.is_some()); - assert!(handlers.on_close.is_some()); - - handlers.call_on_open(OnOpenCallbackArgs { - client_principal: test_utils::generate_random_principal(), - }); - handlers.call_on_message(OnMessageCallbackArgs { - client_principal: test_utils::generate_random_principal(), - message: vec![], - }); - handlers.call_on_close(OnCloseCallbackArgs { - client_principal: test_utils::generate_random_principal(), - }); - - // test that the handlers are called if they are initialized - assert!(CUSTOM_STATE.with(|h| h.borrow().is_on_open_called)); - assert!(CUSTOM_STATE.with(|h| h.borrow().is_on_message_called)); - assert!(CUSTOM_STATE.with(|h| h.borrow().is_on_close_called)); - } - - #[test] - fn test_ws_handlers_panic_is_handled() { - let h = WsHandlers { - on_open: Some(|_| { - panic!("on_open_panic"); - }), - on_message: Some(|_| { - panic!("on_close_panic"); - }), - on_close: Some(|_| { - panic!("on_close_panic"); - }), - }; - - set_params(WsInitParams { - handlers: h.clone(), - ..Default::default() - }); - - let handlers = get_handlers_from_params(); - - let res = panic::catch_unwind(|| { - handlers.call_on_open(OnOpenCallbackArgs { - client_principal: test_utils::generate_random_principal(), - }); - }); - assert!(res.is_ok()); - let res = panic::catch_unwind(|| { - handlers.call_on_message(OnMessageCallbackArgs { - client_principal: test_utils::generate_random_principal(), - message: vec![], - }); - }); - assert!(res.is_ok()); - let res = panic::catch_unwind(|| { - handlers.call_on_close(OnCloseCallbackArgs { - client_principal: test_utils::generate_random_principal(), - }); - }); - assert!(res.is_ok()); - } - - #[test] - fn test_current_time() { - // test - assert_eq!(get_current_time(), 0u64); - } - - proptest! { - #[test] - fn test_initialize_registered_gateway(test_gateway_principal in any::().prop_map(|_| test_utils::generate_random_principal())) { - initialize_registered_gateway(&test_gateway_principal.to_string()); - - REGISTERED_GATEWAY.with(|p| { - let p = p.borrow(); - assert!(p.is_some()); - assert_eq!( - p.unwrap(), - RegisteredGateway::new(test_gateway_principal) - ); - }); - } - - #[test] - fn test_get_outgoing_message_nonce(test_nonce in any::()) { - // Set up - OUTGOING_MESSAGE_NONCE.with(|n| *n.borrow_mut() = test_nonce); - - let actual_nonce = get_outgoing_message_nonce(); - prop_assert_eq!(actual_nonce, test_nonce); - } - - #[test] - fn test_increment_outgoing_message_nonce(test_nonce in any::()) { - // Set up - OUTGOING_MESSAGE_NONCE.with(|n| *n.borrow_mut() = test_nonce); - - increment_outgoing_message_nonce(); - prop_assert_eq!(get_outgoing_message_nonce(), test_nonce + 1); - } - - #[test] - fn test_insert_client(test_client_key in any::().prop_map(|_| test_utils::get_random_client_key())) { - // Set up - let registered_client = test_utils::generate_random_registered_client(); - - insert_client(test_client_key.clone(), registered_client.clone()); - - let actual_client_key = CURRENT_CLIENT_KEY_MAP.with(|map| map.borrow().get(&test_client_key.client_principal).unwrap().clone()); - prop_assert_eq!(actual_client_key, test_client_key.clone()); - - let actual_client = REGISTERED_CLIENTS.with(|map| map.borrow().get(&test_client_key).unwrap().clone()); - prop_assert_eq!(actual_client, registered_client); - } - - #[test] - fn test_get_gateway_principal(test_gateway_principal in any::().prop_map(|_| test_utils::generate_random_principal())) { - // Set up - REGISTERED_GATEWAY.with(|p| *p.borrow_mut() = Some(RegisteredGateway::new(test_gateway_principal.clone()))); - - let actual_gateway_principal = get_registered_gateway_principal(); - prop_assert_eq!(actual_gateway_principal, test_gateway_principal); - } - - #[test] - fn test_is_client_registered_empty(test_client_key in any::().prop_map(|_| test_utils::get_random_client_key())) { - let actual_result = is_client_registered(&test_client_key); - prop_assert_eq!(actual_result, false); - } - - #[test] - fn test_is_client_registered(test_client_key in any::().prop_map(|_| test_utils::get_random_client_key())) { - // Set up - REGISTERED_CLIENTS.with(|map| { - map.borrow_mut().insert(test_client_key.clone(), test_utils::generate_random_registered_client()); - }); - - let actual_result = is_client_registered(&test_client_key); - prop_assert_eq!(actual_result, true); - } - - #[test] - fn test_get_client_key_from_principal_empty(test_client_principal in any::().prop_map(|_| test_utils::generate_random_principal())) { - let actual_result = get_client_key_from_principal(&test_client_principal); - prop_assert_eq!(actual_result.err(), Some(String::from(format!( - "client with principal {} doesn't have an open connection", - test_client_principal - )))); - } - - #[test] - fn test_get_client_key_from_principal(test_client_key in any::().prop_map(|_| test_utils::get_random_client_key())) { - // Set up - CURRENT_CLIENT_KEY_MAP.with(|map| { - map.borrow_mut().insert(test_client_key.client_principal, test_client_key.clone()); - }); - - let actual_result = get_client_key_from_principal(&test_client_key.client_principal); - prop_assert_eq!(actual_result.unwrap(), test_client_key); - } - - #[test] - fn test_check_registered_client_empty(test_client_key in any::().prop_map(|_| test_utils::get_random_client_key())) { - let actual_result = check_registered_client(&test_client_key); - prop_assert_eq!(actual_result.err(), Some(format!("client with key {} doesn't have an open connection", test_client_key))); - } - - #[test] - fn test_check_registered_client(test_client_key in any::().prop_map(|_| test_utils::get_random_client_key())) { - // Set up - REGISTERED_CLIENTS.with(|map| { - map.borrow_mut().insert(test_client_key.clone(), test_utils::generate_random_registered_client()); - }); - - let actual_result = check_registered_client(&test_client_key); - prop_assert!(actual_result.is_ok()); - let non_existing_client_key = test_utils::get_random_client_key(); - let actual_result = check_registered_client(&non_existing_client_key); - prop_assert_eq!(actual_result.err(), Some(format!("client with key {} doesn't have an open connection", non_existing_client_key))); - } - - #[test] - fn test_init_outgoing_message_to_client_num(test_client_key in any::().prop_map(|_| test_utils::get_random_client_key())) { - init_outgoing_message_to_client_num(test_client_key.clone()); - - let actual_result = OUTGOING_MESSAGE_TO_CLIENT_NUM_MAP.with(|map| map.borrow().get(&test_client_key).unwrap().clone()); - prop_assert_eq!(actual_result, INITIAL_CANISTER_SEQUENCE_NUM); - } - - #[test] - fn test_increment_outgoing_message_to_client_num(test_client_key in any::().prop_map(|_| test_utils::get_random_client_key()), test_num in any::()) { - // Set up - OUTGOING_MESSAGE_TO_CLIENT_NUM_MAP.with(|map| { - map.borrow_mut().insert(test_client_key.clone(), test_num); - }); - - let increment_result = increment_outgoing_message_to_client_num(&test_client_key); - prop_assert!(increment_result.is_ok()); - - let actual_result = OUTGOING_MESSAGE_TO_CLIENT_NUM_MAP.with(|map| map.borrow().get(&test_client_key).unwrap().clone()); - prop_assert_eq!(actual_result, test_num + 1); - } - - #[test] - fn test_get_outgoing_message_to_client_num(test_client_key in any::().prop_map(|_| test_utils::get_random_client_key()), test_num in any::()) { - // Set up - OUTGOING_MESSAGE_TO_CLIENT_NUM_MAP.with(|map| { - map.borrow_mut().insert(test_client_key.clone(), test_num); - }); - - let actual_result = get_outgoing_message_to_client_num(&test_client_key); - prop_assert!(actual_result.is_ok()); - prop_assert_eq!(actual_result.unwrap(), test_num); - } - - #[test] - fn test_init_expected_incoming_message_from_client_num(test_client_key in any::().prop_map(|_| test_utils::get_random_client_key())) { - init_expected_incoming_message_from_client_num(test_client_key.clone()); - - let actual_result = INCOMING_MESSAGE_FROM_CLIENT_NUM_MAP.with(|map| map.borrow().get(&test_client_key).unwrap().clone()); - prop_assert_eq!(actual_result, INITIAL_CLIENT_SEQUENCE_NUM); - } - - #[test] - fn test_get_expected_incoming_message_from_client_num(test_client_key in any::().prop_map(|_| test_utils::get_random_client_key()), test_num in any::()) { - // Set up - INCOMING_MESSAGE_FROM_CLIENT_NUM_MAP.with(|map| { - map.borrow_mut().insert(test_client_key.clone(), test_num); - }); - - let actual_result = get_expected_incoming_message_from_client_num(&test_client_key); - prop_assert!(actual_result.is_ok()); - prop_assert_eq!(actual_result.unwrap(), test_num); - } - - #[test] - fn test_increment_expected_incoming_message_from_client_num(test_client_key in any::().prop_map(|_| test_utils::get_random_client_key()), test_num in any::()) { - // Set up - INCOMING_MESSAGE_FROM_CLIENT_NUM_MAP.with(|map| { - map.borrow_mut().insert(test_client_key.clone(), test_num); - }); - - let increment_result = increment_expected_incoming_message_from_client_num(&test_client_key); - prop_assert!(increment_result.is_ok()); - - let actual_result = INCOMING_MESSAGE_FROM_CLIENT_NUM_MAP.with(|map| map.borrow().get(&test_client_key).unwrap().clone()); - prop_assert_eq!(actual_result, test_num + 1); - } - - #[test] - fn test_add_client_to_wait_for_keep_alive(test_client_key in any::().prop_map(|_| test_utils::get_random_client_key())) { - add_client_to_wait_for_keep_alive(&test_client_key); - - let actual_result = CLIENTS_WAITING_FOR_KEEP_ALIVE.with(|map| map.borrow().get(&test_client_key).is_some()); - prop_assert_eq!(actual_result, true); - } - - #[test] - fn test_add_client(test_client_key in any::().prop_map(|_| test_utils::get_random_client_key())) { - let registered_client = test_utils::generate_random_registered_client(); - - // Test - add_client(test_client_key.clone(), registered_client.clone()); - - let actual_result = CURRENT_CLIENT_KEY_MAP.with(|map| map.borrow().get(&test_client_key.client_principal).unwrap().clone()); - prop_assert_eq!(actual_result, test_client_key.clone()); - - let actual_result = REGISTERED_CLIENTS.with(|map| map.borrow().get(&test_client_key).unwrap().clone()); - prop_assert_eq!(actual_result, registered_client); - - let actual_result = INCOMING_MESSAGE_FROM_CLIENT_NUM_MAP.with(|map| map.borrow().get(&test_client_key).unwrap().clone()); - prop_assert_eq!(actual_result, INITIAL_CLIENT_SEQUENCE_NUM); - - let actual_result = OUTGOING_MESSAGE_TO_CLIENT_NUM_MAP.with(|map| map.borrow().get(&test_client_key).unwrap().clone()); - prop_assert_eq!(actual_result, INITIAL_CANISTER_SEQUENCE_NUM); - } - - #[test] - fn test_remove_client(test_client_key in any::().prop_map(|_| test_utils::get_random_client_key())) { - // Set up - CURRENT_CLIENT_KEY_MAP.with(|map| { - map.borrow_mut().insert(test_client_key.client_principal.clone(), test_client_key.clone()); - }); - REGISTERED_CLIENTS.with(|map| { - map.borrow_mut().insert(test_client_key.clone(), test_utils::generate_random_registered_client()); - }); - INCOMING_MESSAGE_FROM_CLIENT_NUM_MAP.with(|map| { - map.borrow_mut().insert(test_client_key.clone(), INITIAL_CLIENT_SEQUENCE_NUM); - }); - OUTGOING_MESSAGE_TO_CLIENT_NUM_MAP.with(|map| { - map.borrow_mut().insert(test_client_key.clone(), INITIAL_CANISTER_SEQUENCE_NUM); - }); - - remove_client(&test_client_key); - - let is_none = CURRENT_CLIENT_KEY_MAP.with(|map| map.borrow().get(&test_client_key.client_principal).is_none()); - prop_assert!(is_none); - - let is_none = REGISTERED_CLIENTS.with(|map| map.borrow().get(&test_client_key).is_none()); - prop_assert!(is_none); - - let is_none = INCOMING_MESSAGE_FROM_CLIENT_NUM_MAP.with(|map| map.borrow().get(&test_client_key).is_none()); - prop_assert!(is_none); - - let is_none = OUTGOING_MESSAGE_TO_CLIENT_NUM_MAP.with(|map| map.borrow().get(&test_client_key).is_none()); - prop_assert!(is_none); - } - - #[test] - fn test_get_message_for_gateway_key(test_gateway_principal in any::().prop_map(|_| test_utils::generate_random_principal()), test_nonce in any::()) { - let actual_result = get_message_for_gateway_key(test_gateway_principal.clone(), test_nonce); - prop_assert_eq!(actual_result, test_gateway_principal.to_string() + "_" + &format!("{:0>20}", test_nonce.to_string())); - } - - #[test] - fn test_get_messages_for_gateway_range_empty(messages_count in any::().prop_map(|c| c % 1000)) { - // Set up - let gateway_principal = test_utils::generate_random_principal(); - REGISTERED_GATEWAY.with(|p| *p.borrow_mut() = Some(RegisteredGateway::new(gateway_principal.clone()))); - - // Test - // we ask for a random range of messages to check if it always returns the same range for empty messages - for i in 0..messages_count { - let (start_index, end_index) = get_messages_for_gateway_range(gateway_principal, i); - prop_assert_eq!(start_index, 0); - prop_assert_eq!(end_index, 0); - } - } - - #[test] - fn test_get_messages_for_gateway_range_smaller_than_max(gateway_principal in any::().prop_map(|_| test_utils::get_static_principal())) { - // Set up - REGISTERED_GATEWAY.with(|p| *p.borrow_mut() = Some(RegisteredGateway::new(gateway_principal.clone()))); - - let messages_count = 4; - let test_client_key = test_utils::get_random_client_key(); - test_utils::add_messages_for_gateway(test_client_key, gateway_principal, messages_count); - - // Test - // messages are just 4, so we don't exceed the max number of returned messages - // add one to test the out of range index - for i in 0..messages_count + 1 { - let (start_index, end_index) = get_messages_for_gateway_range(gateway_principal, i); - prop_assert_eq!(start_index, i as usize); - prop_assert_eq!(end_index, messages_count as usize); - } - - // Clean up - test_utils::clean_messages_for_gateway(); - } - - #[test] - fn test_get_messages_for_gateway_range_larger_than_max(gateway_principal in any::().prop_map(|_| test_utils::get_static_principal()), max_number_of_returned_messages in any::().prop_map(|c| c % 1000)) { - // Set up - PARAMS.with(|p| { - *p.borrow_mut() = WsInitParams { - max_number_of_returned_messages, - ..Default::default() - } - }); - REGISTERED_GATEWAY.with(|p| *p.borrow_mut() = Some(RegisteredGateway::new(gateway_principal.clone()))); - - let messages_count: u64 = (2 * max_number_of_returned_messages).try_into().unwrap(); - let test_client_key = test_utils::get_random_client_key(); - test_utils::add_messages_for_gateway(test_client_key, gateway_principal, messages_count); - - // Test - // messages are now 2 * MAX_NUMBER_OF_RETURNED_MESSAGES - // the case in which the start index is 0 is tested in test_get_messages_for_gateway_range_initial_nonce - for i in 1..messages_count + 1 { - let (start_index, end_index) = get_messages_for_gateway_range(gateway_principal, i); - let expected_end_index = if (i as usize) + max_number_of_returned_messages > messages_count as usize { - messages_count as usize - } else { - (i as usize) + max_number_of_returned_messages - }; - prop_assert_eq!(start_index, i as usize); - prop_assert_eq!(end_index, expected_end_index); - } - - // Clean up - test_utils::clean_messages_for_gateway(); - } - - #[test] - fn test_get_messages_for_gateway_initial_nonce(gateway_principal in any::().prop_map(|_| test_utils::get_static_principal()), messages_count in any::().prop_map(|c| c % 100), max_number_of_returned_messages in any::().prop_map(|c| c % 1000)) { - // Set up - PARAMS.with(|p| { - *p.borrow_mut() = WsInitParams { - max_number_of_returned_messages, - ..Default::default() - } - }); - REGISTERED_GATEWAY.with(|p| *p.borrow_mut() = Some(RegisteredGateway::new(gateway_principal.clone()))); - - let test_client_key = test_utils::get_random_client_key(); - test_utils::add_messages_for_gateway(test_client_key, gateway_principal, messages_count); - - // Test - let (start_index, end_index) = get_messages_for_gateway_range(gateway_principal, 0); - let expected_start_index = if (messages_count as usize) > max_number_of_returned_messages { - (messages_count as usize) - max_number_of_returned_messages - } else { - 0 - }; - prop_assert_eq!(start_index, expected_start_index); - prop_assert_eq!(end_index, messages_count as usize); - - // Clean up - test_utils::clean_messages_for_gateway(); - } - - #[test] - fn test_get_messages_for_gateway(gateway_principal in any::().prop_map(|_| test_utils::get_static_principal()), messages_count in any::().prop_map(|c| c % 100)) { - // Set up - REGISTERED_GATEWAY.with(|p| *p.borrow_mut() = Some(RegisteredGateway::new(gateway_principal.clone()))); - - let test_client_key = test_utils::get_random_client_key(); - test_utils::add_messages_for_gateway(test_client_key, gateway_principal, messages_count); - - // Test - // add one to test the out of range index - for i in 0..messages_count + 1 { - let (start_index, end_index) = get_messages_for_gateway_range(gateway_principal, i); - let messages = get_messages_for_gateway(start_index, end_index); - - // check if the messages returned are the ones we expect - for (j, message) in messages.iter().enumerate() { - let expected_key = get_message_for_gateway_key(gateway_principal.clone(), (start_index + j) as u64); - prop_assert_eq!(&message.key, &expected_key); - } - } - - // Clean up - test_utils::clean_messages_for_gateway(); - } - - #[test] - fn test_check_is_registered_gateway(test_gateway_principal in any::().prop_map(|_| test_utils::generate_random_principal())) { - // Set up - REGISTERED_GATEWAY.with(|p| *p.borrow_mut() = Some(RegisteredGateway::new(test_gateway_principal.clone()))); - - let actual_result = check_is_registered_gateway(test_gateway_principal); - prop_assert!(actual_result.is_ok()); - - let other_principal = test_utils::generate_random_principal(); - let actual_result = check_is_registered_gateway(other_principal); - prop_assert_eq!(actual_result.err(), Some(String::from("caller is not the gateway that has been registered during CDK initialization"))); - } - - #[test] - fn test_serialize_websocket_message(test_msg_bytes in any::>(), test_sequence_num in any::(), test_timestamp in any::()) { - // TODO: add more tests, in which we check the serialized message - let websocket_message = WebsocketMessage { - client_key: test_utils::get_random_client_key(), - sequence_num: test_sequence_num, - timestamp: test_timestamp, - is_service_message: false, - content: test_msg_bytes, - }; - - let serialized_message = websocket_message.cbor_serialize(); - assert!(serialized_message.is_ok()); // not so useful as a test - } - } -} diff --git a/src/ic-websocket-cdk/src/tests/integration_tests/a_ws_open.rs b/src/ic-websocket-cdk/src/tests/integration_tests/a_ws_open.rs new file mode 100644 index 0000000..163749a --- /dev/null +++ b/src/ic-websocket-cdk/src/tests/integration_tests/a_ws_open.rs @@ -0,0 +1,122 @@ +use std::ops::Deref; + +use crate::{ + CanisterOutputMessage, CanisterWsGetMessagesArguments, CanisterWsGetMessagesResult, + CanisterWsOpenArguments, CanisterWsOpenResult, ClientKey, WebsocketServiceMessageContent, +}; +use candid::Principal; + +use super::utils::{ + actor::{ws_get_messages::call_ws_get_messages, ws_open::call_ws_open}, + clients::{generate_random_client_nonce, CLIENT_1, CLIENT_1_KEY, GATEWAY_1}, + messages::get_service_message_content_from_canister_message, +}; + +#[test] +fn test_1_fail_for_an_anonymous_client() { + let args = CanisterWsOpenArguments { + client_nonce: generate_random_client_nonce(), + }; + let res = call_ws_open(&Principal::anonymous(), args); + assert_eq!( + res, + CanisterWsOpenResult::Err(String::from("anonymous principal cannot open a connection")), + ); +} + +#[test] +fn test_2_fails_for_the_registered_gateway() { + let args = CanisterWsOpenArguments { + client_nonce: generate_random_client_nonce(), + }; + let res = call_ws_open(GATEWAY_1.deref(), args); + assert_eq!( + res, + CanisterWsOpenResult::Err(String::from( + "caller is the registered gateway which can't open a connection for itself", + )), + ); +} + +#[test] +fn test_3_should_open_a_connection() { + let client_1_key = CLIENT_1_KEY.deref(); + let args = CanisterWsOpenArguments { + client_nonce: client_1_key.client_nonce, + }; + let res = call_ws_open(CLIENT_1.deref(), args); + assert_eq!(res, CanisterWsOpenResult::Ok(())); + + let msgs = call_ws_get_messages( + GATEWAY_1.deref(), + CanisterWsGetMessagesArguments { nonce: 0 }, + ); + + match msgs { + CanisterWsGetMessagesResult::Ok(messages) => { + let first_message = &messages.messages[0]; + assert_eq!(first_message.client_key, *client_1_key); + let open_message = get_service_message_content_from_canister_message(first_message); + match open_message { + WebsocketServiceMessageContent::OpenMessage(open_message) => { + assert_eq!(open_message.client_key, *client_1_key); + }, + _ => panic!("Expected OpenMessage"), + } + }, + _ => panic!("Expected Ok result"), + } +} + +#[test] +fn test_4_fails_for_a_client_with_the_same_nonce() { + let client_1_key = CLIENT_1_KEY.deref(); + let args = CanisterWsOpenArguments { + client_nonce: client_1_key.client_nonce, + }; + let res = call_ws_open(CLIENT_1.deref(), args); + assert_eq!( + res, + CanisterWsOpenResult::Err(String::from(format!( + "client with key {client_1_key} already has an open connection" + ))), + ); +} + +#[test] +fn test_5_should_open_a_connection_for_the_same_client_with_a_different_nonce() { + let client_key = ClientKey { + client_principal: CLIENT_1_KEY.deref().client_principal, + client_nonce: generate_random_client_nonce(), + }; + let args = CanisterWsOpenArguments { + client_nonce: client_key.client_nonce, + }; + let res = call_ws_open(&client_key.client_principal, args); + assert_eq!(res, CanisterWsOpenResult::Ok(())); + + let msgs = call_ws_get_messages( + GATEWAY_1.deref(), + CanisterWsGetMessagesArguments { nonce: 0 }, + ); + + match msgs { + CanisterWsGetMessagesResult::Ok(messages) => { + let service_message_for_client = messages + .messages + .iter() + .filter(|msg| msg.client_key == client_key) + .collect::>()[0]; + + let open_message = + get_service_message_content_from_canister_message(service_message_for_client); + match open_message { + WebsocketServiceMessageContent::OpenMessage(open_message) => { + assert_eq!(open_message.client_key, client_key); + }, + _ => panic!("Expected OpenMessage"), + } + }, + _ => panic!("Expected Ok result"), + } +} diff --git a/src/ic-websocket-cdk/src/tests/integration_tests/b_ws_message.rs b/src/ic-websocket-cdk/src/tests/integration_tests/b_ws_message.rs new file mode 100644 index 0000000..84db537 --- /dev/null +++ b/src/ic-websocket-cdk/src/tests/integration_tests/b_ws_message.rs @@ -0,0 +1,198 @@ +use std::ops::Deref; + +use crate::{ + CanisterAckMessageContent, CanisterWsMessageArguments, CanisterWsMessageResult, + ClientKeepAliveMessageContent, ClientKey, WebsocketServiceMessageContent, +}; + +use super::utils::{ + actor::{ws_message::call_ws_message, ws_open::call_ws_open_for_client_key_with_panic}, + clients::{generate_random_client_nonce, CLIENT_1_KEY, CLIENT_2, CLIENT_2_KEY}, + messages::{create_websocket_message, encode_websocket_service_message_content}, + test_env::TEST_ENV, +}; + +#[test] +fn test_1_fails_if_client_is_not_registered() { + // first, reset the canister + TEST_ENV.reset_canister_with_default_params(); + // second, open a connection for client 1 + call_ws_open_for_client_key_with_panic(CLIENT_1_KEY.deref()); + + let client_2_key = CLIENT_2_KEY.deref(); + let res = call_ws_message( + &client_2_key.client_principal, + CanisterWsMessageArguments { + msg: create_websocket_message(client_2_key, 0, None, false), + }, + ); + + assert_eq!( + res, + CanisterWsMessageResult::Err(String::from(format!( + "client with principal {} doesn't have an open connection", + client_2_key.client_principal, + ))), + ); +} + +#[test] +fn test_2_fails_if_client_sends_a_message_with_a_different_client_key() { + let client_1_key = CLIENT_1_KEY.deref(); + + // first, send a message with a different principal + let res = call_ws_message( + &client_1_key.client_principal, + CanisterWsMessageArguments { + msg: create_websocket_message( + &ClientKey { + client_principal: *CLIENT_2.deref(), + ..client_1_key.clone() + }, + 0, + None, + false, + ), + }, + ); + assert_eq!( + res, + CanisterWsMessageResult::Err(String::from(format!( + "client with principal {} has a different key than the one used in the message", + client_1_key.client_principal, + ))) + ); + + // then, send a message with a different nonce + let res = call_ws_message( + &client_1_key.client_principal, + CanisterWsMessageArguments { + msg: create_websocket_message( + &ClientKey { + client_nonce: generate_random_client_nonce(), + ..client_1_key.clone() + }, + 0, + None, + false, + ), + }, + ); + assert_eq!( + res, + CanisterWsMessageResult::Err(String::from(format!( + "client with principal {} has a different key than the one used in the message", + client_1_key.client_principal, + ))) + ); +} + +#[test] +fn test_3_should_send_a_message_from_a_registered_client() { + let client_1_key = CLIENT_1_KEY.deref(); + let res = call_ws_message( + &client_1_key.client_principal, + CanisterWsMessageArguments { + msg: create_websocket_message(client_1_key, 1, None, false), + }, + ); + assert_eq!(res, CanisterWsMessageResult::Ok(())); +} + +#[test] +fn test_4_fails_if_client_sends_a_message_with_a_wrong_sequence_number() { + let client_1_key = CLIENT_1_KEY.deref(); + let wrong_sequence_number = 1; // the message with sequence number 1 has already been sent in the previous test + let expected_sequence_number = 2; // the next valid sequence number + let res = call_ws_message( + &client_1_key.client_principal, + CanisterWsMessageArguments { + msg: create_websocket_message(client_1_key, wrong_sequence_number, None, false), + }, + ); + assert_eq!(res, CanisterWsMessageResult::Err(String::from( + format!("incoming client's message does not have the expected sequence number. Expected: {expected_sequence_number}, actual: {wrong_sequence_number}. Client removed.")) + )); + + // check if the client has been removed + let res = call_ws_message( + &client_1_key.client_principal, + CanisterWsMessageArguments { + msg: create_websocket_message(client_1_key, 1, None, false), // the sequence number doesn't matter here because the method fails before checking it + }, + ); + assert_eq!( + res, + CanisterWsMessageResult::Err(String::from(format!( + "client with principal {} doesn't have an open connection", + client_1_key.client_principal, + ),)) + ) +} + +#[test] +fn test_5_fails_if_client_sends_a_wrong_service_message() { + let client_1_key = CLIENT_1_KEY.deref(); + // first, open the connection again for client 1 + call_ws_open_for_client_key_with_panic(client_1_key); + + // fail with wrong content encoding + let res = call_ws_message( + &client_1_key.client_principal, + CanisterWsMessageArguments { + msg: create_websocket_message(client_1_key, 1, Some(vec![1, 2, 3]), true), + }, + ); + match res { + CanisterWsMessageResult::Err(err) => { + assert!(err.starts_with("Error decoding service message content:")) + }, + _ => panic!("unexpected result"), + }; + + // fail with wrong service message variant + let wrong_service_message = + WebsocketServiceMessageContent::AckMessage(CanisterAckMessageContent { + last_incoming_sequence_num: 0, + }); + let res = call_ws_message( + &client_1_key.client_principal, + CanisterWsMessageArguments { + msg: create_websocket_message( + client_1_key, + 2, + Some(encode_websocket_service_message_content( + &wrong_service_message, + )), + true, + ), + }, + ); + assert_eq!( + res, + CanisterWsMessageResult::Err(String::from("Invalid received service message")) + ); +} + +#[test] +fn test_6_should_send_a_service_message_from_a_registered_client() { + let client_1_key = CLIENT_1_KEY.deref(); + let client_service_message = + WebsocketServiceMessageContent::KeepAliveMessage(ClientKeepAliveMessageContent { + last_incoming_sequence_num: 0, + }); + let res = call_ws_message( + &client_1_key.client_principal, + CanisterWsMessageArguments { + msg: create_websocket_message( + client_1_key, + 3, + Some(encode_websocket_service_message_content( + &client_service_message, + )), + true, + ), + }, + ); + assert_eq!(res, CanisterWsMessageResult::Ok(())); +} diff --git a/src/ic-websocket-cdk/src/tests/integration_tests/c_ws_get_messages.rs b/src/ic-websocket-cdk/src/tests/integration_tests/c_ws_get_messages.rs new file mode 100644 index 0000000..fad4329 --- /dev/null +++ b/src/ic-websocket-cdk/src/tests/integration_tests/c_ws_get_messages.rs @@ -0,0 +1,278 @@ +use std::ops::Deref; + +use crate::{ + CanisterOutputCertifiedMessages, CanisterWsGetMessagesArguments, CanisterWsGetMessagesResult, +}; + +use super::utils::{ + actor::{ + ws_get_messages::call_ws_get_messages, + ws_open::call_ws_open_for_client_key_with_panic, + ws_send::{call_ws_send_with_panic, AppMessage}, + }, + clients::{CLIENT_1_KEY, GATEWAY_1, GATEWAY_2}, + constants::{DEFAULT_TEST_MAX_NUMBER_OF_RETURNED_MESSAGES, SEND_MESSAGES_COUNT}, + messages::get_next_polling_nonce_from_messages, + test_env::TEST_ENV, +}; + +#[test] +fn test_1_fails_if_a_non_registered_gateway_tries_to_get_messages() { + // first, reset the canister + TEST_ENV.reset_canister_with_default_params(); + + let res = call_ws_get_messages( + GATEWAY_2.deref(), + CanisterWsGetMessagesArguments { nonce: 0 }, + ); + assert_eq!( + res, + CanisterWsGetMessagesResult::Err(String::from( + "caller is not the gateway that has been registered during CDK initialization", + )), + ); +} + +#[test] +fn test_2_registered_gateway_should_receive_empty_messages_if_no_messages_are_available() { + let res = call_ws_get_messages( + GATEWAY_1.deref(), + CanisterWsGetMessagesArguments { nonce: 0 }, + ); + assert_eq!( + res, + CanisterWsGetMessagesResult::Ok(CanisterOutputCertifiedMessages { + messages: vec![], + cert: vec![], + tree: vec![], + }), + ); + + // test also with a high nonce to make sure the indexes are calculated correctly in the canister + let res = call_ws_get_messages( + GATEWAY_1.deref(), + CanisterWsGetMessagesArguments { nonce: 100 }, + ); + assert_eq!( + res, + CanisterWsGetMessagesResult::Ok(CanisterOutputCertifiedMessages { + messages: vec![], + cert: vec![], + tree: vec![], + }), + ); +} + +#[test] +fn test_3_registered_gateway_can_receive_correct_amount_of_messages() { + // first, register client 1 + let client_1_key = CLIENT_1_KEY.deref(); + call_ws_open_for_client_key_with_panic(client_1_key); + // second, send a batch of messages to the client + call_ws_send_with_panic( + &client_1_key.client_principal, + (0..SEND_MESSAGES_COUNT) + .map(|i| AppMessage { + text: format!("test{}", i), + }) + .collect(), + ); + + // now we can start testing + let messages_count = SEND_MESSAGES_COUNT + 1; // +1 for the open service message + for i in 0..messages_count { + let res = call_ws_get_messages( + GATEWAY_1.deref(), + CanisterWsGetMessagesArguments { nonce: i }, + ); + match res { + CanisterWsGetMessagesResult::Ok(CanisterOutputCertifiedMessages { + messages, .. + }) => { + assert_eq!( + messages.len() as u64, + if messages_count - i > DEFAULT_TEST_MAX_NUMBER_OF_RETURNED_MESSAGES { + DEFAULT_TEST_MAX_NUMBER_OF_RETURNED_MESSAGES + } else { + messages_count - i + }, + ); + }, + _ => panic!("unexpected result"), + }; + } + + // try to get more messages than available + let res = call_ws_get_messages( + GATEWAY_1.deref(), + CanisterWsGetMessagesArguments { + nonce: messages_count, + }, + ); + match res { + CanisterWsGetMessagesResult::Ok(CanisterOutputCertifiedMessages { messages, .. }) => { + assert_eq!(messages.len(), 0); + }, + _ => panic!("unexpected result"), + }; +} + +#[test] +fn test_4_registered_gateway_can_receive_certified_messages() { + let client_1_key = CLIENT_1_KEY.deref(); + + // first batch of messages + match call_ws_get_messages( + GATEWAY_1.deref(), + CanisterWsGetMessagesArguments { nonce: 1 }, // skip the case in which the gateway restarts polling from the beginning (tested below) + ) { + CanisterWsGetMessagesResult::Ok(CanisterOutputCertifiedMessages { + messages: first_batch_messages, + cert: first_batch_cert, + tree: first_batch_tree, + }) => { + assert_eq!( + first_batch_messages.len() as u64, + DEFAULT_TEST_MAX_NUMBER_OF_RETURNED_MESSAGES + ); + + let mut expected_sequence_number = 2; // first is the service open message and the number is incremented before sending + let mut i = 0; + helpers::verify_messages( + &first_batch_messages, + client_1_key, + &first_batch_cert, + &first_batch_tree, + &mut expected_sequence_number, + &mut i, + ); + + let next_polling_nonce = get_next_polling_nonce_from_messages(first_batch_messages); + println!("next polling nonce: {}", next_polling_nonce); + // second batch of messages + match call_ws_get_messages( + GATEWAY_1.deref(), + CanisterWsGetMessagesArguments { + nonce: next_polling_nonce, + }, + ) { + CanisterWsGetMessagesResult::Ok(CanisterOutputCertifiedMessages { + messages: second_batch_messages, + cert: second_batch_cert, + tree: second_batch_tree, + }) => { + assert_eq!( + second_batch_messages.len() as u64, + SEND_MESSAGES_COUNT - DEFAULT_TEST_MAX_NUMBER_OF_RETURNED_MESSAGES // remaining from SEND_MESSAGES_COUNT + ); + + helpers::verify_messages( + &second_batch_messages, + client_1_key, + &second_batch_cert, + &second_batch_tree, + &mut expected_sequence_number, + &mut i, + ); + }, + _ => panic!("unexpected result"), + } + }, + _ => panic!("unexpected result"), + } +} + +#[test] +fn test_5_registered_gateway_can_poll_messages_after_restart() { + let res = call_ws_get_messages( + GATEWAY_1.deref(), + CanisterWsGetMessagesArguments { nonce: 0 }, // start polling from the beginning, as if the gateway restarted + ); + match res { + CanisterWsGetMessagesResult::Ok(CanisterOutputCertifiedMessages { + messages, + cert, + tree, + }) => { + // +1 for the service open message +1 because the seq num is incremented before sending + let mut expected_sequence_number = + SEND_MESSAGES_COUNT - DEFAULT_TEST_MAX_NUMBER_OF_RETURNED_MESSAGES + 1 + 1; + let mut i = SEND_MESSAGES_COUNT - DEFAULT_TEST_MAX_NUMBER_OF_RETURNED_MESSAGES; + + helpers::verify_messages( + &messages, + CLIENT_1_KEY.deref(), + &cert, + &tree, + &mut expected_sequence_number, + &mut i, + ); + }, + _ => panic!("unexpected result"), + }; +} + +mod helpers { + use std::ops::Deref; + + use crate::{ + tests::integration_tests::utils::{ + actor::ws_send::AppMessage, + certification::{is_message_body_valid, is_valid_certificate}, + messages::decode_websocket_message, + test_env::TEST_ENV, + }, + CanisterOutputMessage, ClientKey, + }; + use candid::decode_one; + + pub(crate) fn verify_messages( + messages: &Vec, + client_key: &ClientKey, + cert: &[u8], + tree: &[u8], + expected_sequence_number: &mut u64, + index: &mut u64, + ) { + for message in messages.iter() { + verify_message( + message, + client_key, + cert, + tree, + expected_sequence_number, + index, + ); + + *expected_sequence_number += 1; + *index += 1; + } + } + + fn verify_message( + message: &CanisterOutputMessage, + client_key: &ClientKey, + cert: &[u8], + tree: &[u8], + expected_sequence_number: &u64, + index: &u64, + ) { + assert_eq!(message.client_key, *client_key); + let websocket_message = decode_websocket_message(&message.content); + assert_eq!(websocket_message.client_key, *client_key); + assert_eq!(websocket_message.sequence_num, *expected_sequence_number); + assert_eq!(websocket_message.timestamp, TEST_ENV.get_canister_time()); + assert_eq!(websocket_message.is_service_message, false); + let decoded_content: AppMessage = decode_one(&websocket_message.content).unwrap(); + assert_eq!( + decoded_content, + AppMessage { + text: format!("test{}", index) + } + ); + + // check the certification + assert!(is_valid_certificate(TEST_ENV.deref(), cert, tree,)); + assert!(is_message_body_valid(&message.key, &message.content, tree)); + } +} diff --git a/src/ic-websocket-cdk/src/tests/integration_tests/d_ws_close.rs b/src/ic-websocket-cdk/src/tests/integration_tests/d_ws_close.rs new file mode 100644 index 0000000..96eb270 --- /dev/null +++ b/src/ic-websocket-cdk/src/tests/integration_tests/d_ws_close.rs @@ -0,0 +1,59 @@ +use std::ops::Deref; + +use crate::{CanisterWsCloseArguments, CanisterWsCloseResult}; + +use super::utils::{ + actor::{ws_close::call_ws_close, ws_open::call_ws_open_for_client_key_with_panic}, + clients::{CLIENT_1_KEY, CLIENT_2_KEY, GATEWAY_1, GATEWAY_2}, + test_env::TEST_ENV, +}; + +#[test] +fn test_1_fails_if_gateway_is_not_registered() { + // first, reset the canister + TEST_ENV.reset_canister_with_default_params(); + // second, open a connection for client 1 + call_ws_open_for_client_key_with_panic(CLIENT_1_KEY.deref()); + + // finally, we can start testing + let res = call_ws_close( + GATEWAY_2.deref(), + CanisterWsCloseArguments { + client_key: CLIENT_1_KEY.clone(), + }, + ); + assert_eq!( + res, + CanisterWsCloseResult::Err(String::from( + "caller is not the gateway that has been registered during CDK initialization", + )), + ); +} + +#[test] +fn test_2_fails_if_client_is_not_registered() { + let client_2_key = CLIENT_2_KEY.deref(); + let res = call_ws_close( + GATEWAY_1.deref(), + CanisterWsCloseArguments { + client_key: client_2_key.clone(), + }, + ); + assert_eq!( + res, + CanisterWsCloseResult::Err(String::from(format!( + "client with key {client_2_key} doesn't have an open connection" + ))), + ); +} + +#[test] +fn test_3_should_close_the_websocket_for_a_registered_client() { + let res = call_ws_close( + GATEWAY_1.deref(), + CanisterWsCloseArguments { + client_key: CLIENT_1_KEY.clone(), + }, + ); + assert_eq!(res, CanisterWsCloseResult::Ok(())); +} diff --git a/src/ic-websocket-cdk/src/tests/integration_tests/e_ws_send.rs b/src/ic-websocket-cdk/src/tests/integration_tests/e_ws_send.rs new file mode 100644 index 0000000..f474451 --- /dev/null +++ b/src/ic-websocket-cdk/src/tests/integration_tests/e_ws_send.rs @@ -0,0 +1,46 @@ +use std::ops::Deref; + +use crate::CanisterWsSendResult; + +use super::utils::{ + actor::{ + ws_open::call_ws_open_for_client_key_with_panic, + ws_send::{call_ws_send, AppMessage}, + }, + clients::{CLIENT_1, CLIENT_1_KEY, CLIENT_2}, + test_env::TEST_ENV, +}; + +#[test] +fn test_1_fails_if_sending_a_message_to_a_non_registered_client() { + // first, reset the canister + TEST_ENV.reset_canister_with_default_params(); + // second, open a connection for client 1 + call_ws_open_for_client_key_with_panic(CLIENT_1_KEY.deref()); + + // finally, we can start testing + let client_2_principal = CLIENT_2.deref(); + let res = call_ws_send( + client_2_principal, + vec![AppMessage { + text: String::from("test"), + }], + ); + assert_eq!( + res, + CanisterWsSendResult::Err(String::from(format!( + "client with principal {client_2_principal} doesn't have an open connection" + ))), + ); +} + +#[test] +fn test_2_should_send_a_message_to_a_registered_client() { + let res = call_ws_send( + CLIENT_1.deref(), + vec![AppMessage { + text: String::from("test"), + }], + ); + assert_eq!(res, CanisterWsSendResult::Ok(())); +} diff --git a/src/ic-websocket-cdk/src/tests/integration_tests/f_messages_acknowledgement.rs b/src/ic-websocket-cdk/src/tests/integration_tests/f_messages_acknowledgement.rs new file mode 100644 index 0000000..f23d986 --- /dev/null +++ b/src/ic-websocket-cdk/src/tests/integration_tests/f_messages_acknowledgement.rs @@ -0,0 +1,265 @@ +use std::ops::Deref; + +use crate::{ + CanisterWsGetMessagesArguments, CanisterWsGetMessagesResult, CanisterWsMessageArguments, + CanisterWsMessageResult, CanisterWsSendResult, ClientKeepAliveMessageContent, + WebsocketServiceMessageContent, +}; + +use super::utils::{ + actor::{ + ws_get_messages::call_ws_get_messages, + ws_message::{call_ws_message, call_ws_message_with_panic}, + ws_open::call_ws_open_for_client_key_with_panic, + }, + clients::{CLIENT_1_KEY, GATEWAY_1}, + constants::{DEFAULT_TEST_KEEP_ALIVE_TIMEOUT_MS, DEFAULT_TEST_SEND_ACK_INTERVAL_MS}, + messages::{create_websocket_message, encode_websocket_service_message_content}, + test_env::TEST_ENV, +}; + +#[test] +fn test_1_client_should_receive_ack_messages() { + TEST_ENV.reset_canister_with_default_params(); + // open a connection for client 1 + let client_1_key = CLIENT_1_KEY.deref(); + call_ws_open_for_client_key_with_panic(client_1_key); + // make sure there are no messages in the queue, except from first open message + let res = call_ws_get_messages( + GATEWAY_1.deref(), + CanisterWsGetMessagesArguments { nonce: 1 }, // skip the service open message + ); + match res { + CanisterWsGetMessagesResult::Ok(messages) => { + assert_eq!(messages.messages.len(), 0); + }, + _ => panic!("unexpected result"), + } + // send a message from the client in order to receive the ack with the updated sequence number + call_ws_message_with_panic( + &client_1_key.client_principal, + CanisterWsMessageArguments { + msg: create_websocket_message(client_1_key, 1, None, false), + }, + ); + // advance the canister time to make sure the ack timer expires and an ack is sent + TEST_ENV.advance_canister_time_ms(DEFAULT_TEST_SEND_ACK_INTERVAL_MS); + + let res = call_ws_get_messages( + GATEWAY_1.deref(), + CanisterWsGetMessagesArguments { nonce: 1 }, + ); + helpers::check_ack_message_result(&res, client_1_key, 1, 2); +} + +#[test] +fn test_2_client_is_removed_if_keep_alive_timeout_is_reached() { + let client_1_key = CLIENT_1_KEY.deref(); + // open a connection for client 1 + TEST_ENV.reset_canister_with_default_params(); + call_ws_open_for_client_key_with_panic(client_1_key); + // advance the canister time to make sure the ack timer expires and an ack is sent + TEST_ENV.advance_canister_time_ms(DEFAULT_TEST_SEND_ACK_INTERVAL_MS); + // get messages to check if the ack message has been set + let res = call_ws_get_messages( + GATEWAY_1.deref(), + CanisterWsGetMessagesArguments { nonce: 1 }, + ); + helpers::check_ack_message_result(&res, client_1_key, 0, 2); + + // advance the canister time to make sure the keep alive timeout expires + TEST_ENV.advance_canister_time_ms(DEFAULT_TEST_KEEP_ALIVE_TIMEOUT_MS); + + // to check if the client has been removed, we try to send the keep alive message late + let res = call_ws_message( + &client_1_key.client_principal, + CanisterWsMessageArguments { + msg: create_websocket_message( + client_1_key, + 1, + Some(encode_websocket_service_message_content( + &WebsocketServiceMessageContent::KeepAliveMessage( + ClientKeepAliveMessageContent { + last_incoming_sequence_num: 1, // ignored in the CDK + }, + ), + )), + true, + ), + }, + ); + assert_eq!( + res, + CanisterWsSendResult::Err(String::from(format!( + "client with principal {} doesn't have an open connection", + client_1_key.client_principal + ))), + ); +} + +#[test] +fn test_3_client_is_not_removed_if_it_sends_a_keep_alive_before_timeout() { + let client_1_key = CLIENT_1_KEY.deref(); + TEST_ENV.reset_canister_with_default_params(); + // open a connection for client 1 + call_ws_open_for_client_key_with_panic(client_1_key); + // advance the canister time to make sure the ack timer expires and an ack is sent + TEST_ENV.advance_canister_time_ms(DEFAULT_TEST_SEND_ACK_INTERVAL_MS); + // get messages to check if the ack message has been set + let res = call_ws_get_messages( + GATEWAY_1.deref(), + CanisterWsGetMessagesArguments { nonce: 1 }, + ); + helpers::check_ack_message_result(&res, client_1_key, 0, 2); + + // send keep alive message + call_ws_message_with_panic( + &client_1_key.client_principal, + CanisterWsMessageArguments { + msg: create_websocket_message( + client_1_key, + 1, + Some(encode_websocket_service_message_content( + &WebsocketServiceMessageContent::KeepAliveMessage( + ClientKeepAliveMessageContent { + last_incoming_sequence_num: 1, // ignored in the CDK + }, + ), + )), + true, + ), + }, + ); + // advance the canister time to make sure the keep alive timeout expires and the canister checks the keep alive + TEST_ENV.advance_canister_time_ms(DEFAULT_TEST_KEEP_ALIVE_TIMEOUT_MS); + // send a message to the canister to see the sequence number increasing in the ack message + // and be sure that the client has not been removed + call_ws_message_with_panic( + &client_1_key.client_principal, + CanisterWsMessageArguments { + msg: create_websocket_message(client_1_key, 2, None, false), + }, + ); + // wait to receive the next ack message + TEST_ENV.advance_canister_time_ms(DEFAULT_TEST_SEND_ACK_INTERVAL_MS); + let res = call_ws_get_messages( + GATEWAY_1.deref(), + CanisterWsGetMessagesArguments { nonce: 2 }, // skip the service open message and the fist ack message + ); + helpers::check_ack_message_result(&res, client_1_key, 2, 3); +} + +#[test] +fn test_4_client_is_not_removed_if_it_connects_while_canister_is_waiting_for_keep_alive() { + let client_1_key = CLIENT_1_KEY.deref(); + TEST_ENV.reset_canister_with_default_params(); + // advance the canister time to make sure the ack timer expires and the canister started the keep alive timer + TEST_ENV.advance_canister_time_ms(DEFAULT_TEST_SEND_ACK_INTERVAL_MS); + // open a connection for client 1 + call_ws_open_for_client_key_with_panic(client_1_key); + + // get messages for client: at this point the client doesn't expect any message + let res = call_ws_get_messages( + GATEWAY_1.deref(), + CanisterWsGetMessagesArguments { nonce: 1 }, // skip the service open message + ); + match res { + CanisterWsGetMessagesResult::Ok(messages) => { + assert_eq!(messages.messages.len(), 0); + }, + _ => panic!("unexpected result"), + } + + // send a message to the canister to see the sequence number increasing in the ack message + // and be sure that the client has not been removed + let res = call_ws_message( + &client_1_key.client_principal, + CanisterWsMessageArguments { + msg: create_websocket_message(client_1_key, 1, None, false), + }, + ); + assert_eq!(res, CanisterWsMessageResult::Ok(())); + + // wait for the keep alive timeout to expire + TEST_ENV.advance_canister_time_ms(DEFAULT_TEST_KEEP_ALIVE_TIMEOUT_MS); + // wait for the canister to send the next ack + TEST_ENV.advance_canister_time_ms( + DEFAULT_TEST_SEND_ACK_INTERVAL_MS - DEFAULT_TEST_KEEP_ALIVE_TIMEOUT_MS, + ); + + let res = call_ws_get_messages( + GATEWAY_1.deref(), + CanisterWsGetMessagesArguments { nonce: 1 }, // skip the service open message + ); + helpers::check_ack_message_result(&res, client_1_key, 1, 2); +} + +mod helpers { + use std::ops::Deref; + + use crate::{ + tests::integration_tests::utils::{ + certification::{is_message_body_valid, is_valid_certificate}, + messages::{ + decode_websocket_service_message_content, + get_websocket_message_from_canister_message, + }, + test_env::TEST_ENV, + }, + CanisterAckMessageContent, CanisterOutputMessage, CanisterWsGetMessagesResult, ClientKey, + WebsocketServiceMessageContent, + }; + + pub(crate) fn check_ack_message_result( + res: &CanisterWsGetMessagesResult, + receiver_client_key: &ClientKey, + expected_ack_sequence_number: u64, + expected_websocket_message_sequence_number: u64, + ) { + match res { + CanisterWsGetMessagesResult::Ok(messages) => { + assert_eq!(messages.messages.len(), 1); + let ack_message = messages.messages.first().unwrap(); + check_ack_message_in_messages( + ack_message, + receiver_client_key, + expected_ack_sequence_number, + expected_websocket_message_sequence_number, + ); + assert!(is_valid_certificate( + TEST_ENV.deref(), + &messages.cert, + &messages.tree, + )); + assert!(is_message_body_valid( + &ack_message.key, + &ack_message.content, + &messages.tree + )); + }, + _ => panic!("unexpected result"), + } + } + + fn check_ack_message_in_messages( + ack_message: &CanisterOutputMessage, + receiver_client_key: &ClientKey, + expected_ack_sequence_number: u64, + expected_websocket_message_sequence_number: u64, + ) { + assert_eq!(ack_message.client_key, *receiver_client_key); + let websocket_message = get_websocket_message_from_canister_message(ack_message); + assert_eq!(websocket_message.is_service_message, true); + assert_eq!( + websocket_message.sequence_num, + expected_websocket_message_sequence_number + ); + assert_eq!(websocket_message.timestamp, TEST_ENV.get_canister_time()); + assert_eq!( + decode_websocket_service_message_content(&websocket_message.content), + WebsocketServiceMessageContent::AckMessage(CanisterAckMessageContent { + last_incoming_sequence_num: expected_ack_sequence_number, + }), + ); + } +} diff --git a/src/ic-websocket-cdk/src/tests/integration_tests/mod.rs b/src/ic-websocket-cdk/src/tests/integration_tests/mod.rs new file mode 100644 index 0000000..85f18a5 --- /dev/null +++ b/src/ic-websocket-cdk/src/tests/integration_tests/mod.rs @@ -0,0 +1,15 @@ +//! Tests are named with letters to keep them in alphabetical order and ensure they are executed in that order. +//! Make sure you run tests with `--test-threads=1` so that they are executed sequentially. +//! +//! In each module, tests are named using `test_[i]_*` pattern so that they are executed in that order. + +#![cfg(test)] + +mod utils; + +mod a_ws_open; +mod b_ws_message; +mod c_ws_get_messages; +mod d_ws_close; +mod e_ws_send; +mod f_messages_acknowledgement; diff --git a/src/ic-websocket-cdk/src/tests/integration_tests/utils/actor.rs b/src/ic-websocket-cdk/src/tests/integration_tests/utils/actor.rs new file mode 100644 index 0000000..9a7e0b6 --- /dev/null +++ b/src/ic-websocket-cdk/src/tests/integration_tests/utils/actor.rs @@ -0,0 +1,180 @@ +use candid::{decode_one, encode_one, Principal}; +use pocket_ic::WasmResult; + +use super::test_env::TEST_ENV; + +pub mod ws_open { + use crate::{CanisterWsOpenArguments, CanisterWsOpenResult, ClientKey}; + + use super::*; + + /// # Panics + /// if the call returns a [WasmResult::Reject]. + pub fn call_ws_open(caller: &Principal, args: CanisterWsOpenArguments) -> CanisterWsOpenResult { + let res = TEST_ENV + .pic + .update_call( + TEST_ENV.canister_id, + *caller, + "ws_open", + encode_one(args).unwrap(), + ) + .expect("Failed to call canister"); + + match res { + WasmResult::Reply(bytes) => decode_one(&bytes).unwrap(), + _ => panic!("Expected reply"), + } + } + + /// Same as [call_ws_open] but panics if the call returns an error variant. + fn call_ws_open_with_panic(caller: &Principal, args: CanisterWsOpenArguments) { + match call_ws_open(caller, args) { + CanisterWsOpenResult::Ok(_) => {}, + CanisterWsOpenResult::Err(err) => panic!("failed ws_open: {:?}", err), + } + } + + /// See [call_ws_open_with_panic]. + pub(crate) fn call_ws_open_for_client_key_with_panic(client_key: &ClientKey) { + let args = CanisterWsOpenArguments { + client_nonce: client_key.client_nonce, + }; + call_ws_open_with_panic(&client_key.client_principal, args); + } +} + +pub mod ws_message { + use crate::{CanisterWsMessageArguments, CanisterWsMessageResult}; + + use super::*; + + /// # Panics + /// if the call returns a [WasmResult::Reject]. + pub fn call_ws_message( + caller: &Principal, + args: CanisterWsMessageArguments, + ) -> CanisterWsMessageResult { + let res = TEST_ENV + .pic + .update_call( + TEST_ENV.canister_id, + *caller, + "ws_message", + encode_one(args).unwrap(), + ) + .expect("Failed to call canister"); + + match res { + WasmResult::Reply(bytes) => decode_one(&bytes).unwrap(), + _ => panic!("Expected reply"), + } + } + + /// Same as [call_ws_message] but panics if the call returns an error variant. + pub fn call_ws_message_with_panic(caller: &Principal, args: CanisterWsMessageArguments) { + match call_ws_message(caller, args) { + CanisterWsMessageResult::Ok(_) => {}, + CanisterWsMessageResult::Err(err) => panic!("failed ws_message: {:?}", err), + } + } +} + +pub mod ws_close { + use crate::{CanisterWsCloseArguments, CanisterWsCloseResult}; + + use super::*; + + /// # Panics + /// if the call returns a [WasmResult::Reject]. + pub fn call_ws_close( + caller: &Principal, + args: CanisterWsCloseArguments, + ) -> CanisterWsCloseResult { + let res = TEST_ENV + .pic + .update_call( + TEST_ENV.canister_id, + *caller, + "ws_close", + encode_one(args).unwrap(), + ) + .expect("Failed to call canister"); + + match res { + WasmResult::Reply(bytes) => decode_one(&bytes).unwrap(), + _ => panic!("Expected reply"), + } + } +} + +pub mod ws_get_messages { + use crate::{CanisterWsGetMessagesArguments, CanisterWsGetMessagesResult}; + + use super::*; + + pub fn call_ws_get_messages( + caller: &Principal, + args: CanisterWsGetMessagesArguments, + ) -> CanisterWsGetMessagesResult { + let res = TEST_ENV + .pic + .query_call( + TEST_ENV.canister_id, + *caller, + "ws_get_messages", + encode_one(args).unwrap(), + ) + .expect("Failed to call counter canister"); + + match res { + WasmResult::Reply(bytes) => decode_one(&bytes).unwrap(), + _ => panic!("Expected reply"), + } + } +} + +pub mod ws_send { + use crate::CanisterWsSendResult; + use candid::{encode_args, CandidType}; + use serde::{Deserialize, Serialize}; + + use super::*; + + #[derive(CandidType, Debug, Serialize, Deserialize, PartialEq, Eq)] + pub struct AppMessage { + pub text: String, + } + + /// (`Principal`, `Vec>`) + type WsSendArguments = (Principal, Vec>); + + pub fn call_ws_send( + send_to_principal: &Principal, + messages: Vec, + ) -> CanisterWsSendResult { + let messages: Vec> = messages.iter().map(|m| encode_one(m).unwrap()).collect(); + let args: WsSendArguments = (send_to_principal.clone(), messages); + let res = TEST_ENV + .pic + .update_call( + TEST_ENV.canister_id, + Principal::anonymous(), + "ws_send", + encode_args(args).unwrap(), + ) + .expect("Failed to call counter canister"); + match res { + WasmResult::Reply(bytes) => decode_one(&bytes).unwrap(), + _ => panic!("Expected reply"), + } + } + + pub fn call_ws_send_with_panic(send_to_principal: &Principal, messages: Vec) { + let res = call_ws_send(send_to_principal, messages); + match res { + CanisterWsSendResult::Ok(_) => {}, + CanisterWsSendResult::Err(err) => panic!("failed ws_send: {:?}", err), + } + } +} diff --git a/src/ic-websocket-cdk/src/tests/integration_tests/utils/certification.rs b/src/ic-websocket-cdk/src/tests/integration_tests/utils/certification.rs new file mode 100644 index 0000000..edfded0 --- /dev/null +++ b/src/ic-websocket-cdk/src/tests/integration_tests/utils/certification.rs @@ -0,0 +1,46 @@ +use ic_certificate_verification::VerifyCertificate; +use ic_certification::{Certificate, HashTree, LookupResult}; +use sha2::{Digest, Sha256}; + +use super::test_env::TestEnv; + +pub fn is_valid_certificate(test_env: &TestEnv, certificate: &[u8], tree: &[u8]) -> bool { + let cert: Certificate = serde_cbor::from_slice(certificate).unwrap(); + let canister_id_bytes = test_env.canister_id.as_slice(); + let verify_res = cert.verify(canister_id_bytes, &test_env.get_root_ic_key()); + match verify_res { + Ok(_) => { + let tree: HashTree = serde_cbor::from_slice(tree).unwrap(); + match cert + .tree + .lookup_path(vec![b"canister", canister_id_bytes, b"certified_data"]) + { + LookupResult::Found(witness) => witness == tree.digest(), + _ => return false, + } + }, + Err(_) => false, + } +} + +fn hash_body(body: &[u8]) -> [u8; 32] { + let mut sha = Sha256::new(); + sha.update(body); + sha.finalize().into() +} + +pub fn is_message_body_valid(path: &str, body: &[u8], tree: &[u8]) -> bool { + let tree: HashTree = serde_cbor::from_slice(tree).unwrap(); + let tree_sha = match tree.lookup_path(vec![b"websocket", path.as_bytes()]) { + LookupResult::Found(tree_sha) => tree_sha, + LookupResult::Absent | LookupResult::Unknown => { + match tree.lookup_path(vec![b"websocket"]) { + LookupResult::Found(tree_sha) => tree_sha, + _ => return false, + } + }, + LookupResult::Error => return false, + }; + // sha256 of body + tree_sha == hash_body(body) +} diff --git a/src/ic-websocket-cdk/src/tests/integration_tests/utils/clients.rs b/src/ic-websocket-cdk/src/tests/integration_tests/utils/clients.rs new file mode 100644 index 0000000..75739f8 --- /dev/null +++ b/src/ic-websocket-cdk/src/tests/integration_tests/utils/clients.rs @@ -0,0 +1,32 @@ +use crate::ClientKey; +use candid::Principal; +use lazy_static::lazy_static; + +lazy_static! { + pub static ref CLIENT_1: Principal = + Principal::from_text("pmisz-prtlk-b6oe6-bj4fl-6l5fy-h7c2h-so6i7-jiz2h-bgto7-piqfr-7ae") + .unwrap(); + pub static ref CLIENT_2: Principal = + Principal::from_text("zuh6g-qnmvg-vky2t-tnob7-h4xoj-ykrcx-jqjpi-cdf3k-23i3i-ykozs-fae") + .unwrap(); + /// The gateway registered in the local PocketIc env + pub static ref GATEWAY_1: Principal = + Principal::from_text("i3gux-m3hwt-5mh2w-t7wwm-fwx5j-6z6ht-hxguo-t4rfw-qp24z-g5ivt-2qe") + .unwrap(); + pub static ref GATEWAY_2: Principal = + Principal::from_text("trj6m-u7l6v-zilnb-2hl6a-3jfz3-asri5-mkw3k-e2tpo-5emmk-6hqxb-uae") + .unwrap(); +} + +lazy_static! { + pub(crate) static ref CLIENT_1_KEY: ClientKey = generate_client_key(*CLIENT_1.deref()); + pub(crate) static ref CLIENT_2_KEY: ClientKey = generate_client_key(*CLIENT_2.deref()); +} + +fn generate_client_key(client_principal: Principal) -> ClientKey { + ClientKey::new(client_principal, generate_random_client_nonce()) +} + +pub fn generate_random_client_nonce() -> u64 { + rand::random() +} diff --git a/src/ic-websocket-cdk/src/tests/integration_tests/utils/constants.rs b/src/ic-websocket-cdk/src/tests/integration_tests/utils/constants.rs new file mode 100644 index 0000000..1580cf9 --- /dev/null +++ b/src/ic-websocket-cdk/src/tests/integration_tests/utils/constants.rs @@ -0,0 +1,19 @@ +/// The maximum number of messages returned by the **ws_get_messages** method. +pub const DEFAULT_TEST_MAX_NUMBER_OF_RETURNED_MESSAGES: u64 = 20; + +/// Add more messages than the max to check the indexes and limits. +/// +/// Value: [DEFAULT_TEST_MAX_NUMBER_OF_RETURNED_MESSAGES] + `2` +pub const SEND_MESSAGES_COUNT: u64 = DEFAULT_TEST_MAX_NUMBER_OF_RETURNED_MESSAGES + 2; + +/// The interval between sending acks from the canister. +/// Set to a high value to make sure the canister doesn't reset the client while testing other functions. +/// +/// Value: `300_000` = 5 minutes +pub const DEFAULT_TEST_SEND_ACK_INTERVAL_MS: u64 = 300_000; + +/// The interval between keep alive checks in the canister. +/// Set to a high value to make sure the canister doesn't reset the client while testing other functions. +/// +/// Value: `120_000` (2 minutes) +pub const DEFAULT_TEST_KEEP_ALIVE_TIMEOUT_MS: u64 = 120_000; diff --git a/src/ic-websocket-cdk/src/tests/integration_tests/utils/messages.rs b/src/ic-websocket-cdk/src/tests/integration_tests/utils/messages.rs new file mode 100644 index 0000000..5d922c7 --- /dev/null +++ b/src/ic-websocket-cdk/src/tests/integration_tests/utils/messages.rs @@ -0,0 +1,58 @@ +use candid::{decode_one, encode_one}; + +use super::get_current_timestamp_ns; +use crate::{CanisterOutputMessage, ClientKey, WebsocketMessage, WebsocketServiceMessageContent}; + +pub(crate) fn get_websocket_message_from_canister_message( + msg: &CanisterOutputMessage, +) -> WebsocketMessage { + decode_websocket_message(&msg.content) +} + +pub(crate) fn encode_websocket_service_message_content( + content: &WebsocketServiceMessageContent, +) -> Vec { + encode_one(content).unwrap() +} + +pub(crate) fn decode_websocket_service_message_content( + bytes: &[u8], +) -> WebsocketServiceMessageContent { + decode_one(bytes).unwrap() +} + +pub(crate) fn get_service_message_content_from_canister_message( + msg: &CanisterOutputMessage, +) -> WebsocketServiceMessageContent { + let websocket_message = get_websocket_message_from_canister_message(msg); + decode_websocket_service_message_content(&websocket_message.content) +} + +pub(crate) fn create_websocket_message( + client_key: &ClientKey, + sequence_number: u64, + content: Option>, + is_service_message: bool, +) -> WebsocketMessage { + let content = content.unwrap_or(vec![]); + + WebsocketMessage { + client_key: client_key.clone(), + sequence_num: sequence_number, + timestamp: get_current_timestamp_ns(), + content, + is_service_message, + } +} + +pub(crate) fn decode_websocket_message(bytes: &[u8]) -> WebsocketMessage { + serde_cbor::from_slice(bytes).unwrap() +} + +pub fn get_polling_nonce_from_message(message: &CanisterOutputMessage) -> u64 { + message.key.split("_").last().unwrap().parse().unwrap() +} + +pub fn get_next_polling_nonce_from_messages(messages: Vec) -> u64 { + get_polling_nonce_from_message(messages.last().unwrap()) + 1 +} diff --git a/src/ic-websocket-cdk/src/tests/integration_tests/utils/mod.rs b/src/ic-websocket-cdk/src/tests/integration_tests/utils/mod.rs new file mode 100644 index 0000000..bb4486f --- /dev/null +++ b/src/ic-websocket-cdk/src/tests/integration_tests/utils/mod.rs @@ -0,0 +1,31 @@ +use std::path::PathBuf; + +pub mod actor; +pub mod certification; +pub mod clients; +pub mod constants; +pub mod messages; +pub mod test_env; +pub mod wasm; + +pub fn bin_folder_path() -> PathBuf { + println!("manifest dir: {:?}", std::env::var("CARGO_MANIFEST_DIR")); + let mut file_path = PathBuf::from( + std::env::var("CARGO_MANIFEST_DIR") + .expect("Failed to read CARGO_MANIFEST_DIR env variable"), + ); + file_path.pop(); + file_path.pop(); + file_path.push("bin"); + file_path + // println!("{:?}", std::env::current_dir()); + // PathBuf::from("./bin") +} + +/// Returns the current timestamp in nanoseconds. +pub fn get_current_timestamp_ns() -> u64 { + std::time::SystemTime::now() + .duration_since(std::time::UNIX_EPOCH) + .unwrap() + .as_nanos() as u64 +} diff --git a/src/ic-websocket-cdk/src/tests/integration_tests/utils/test_env.rs b/src/ic-websocket-cdk/src/tests/integration_tests/utils/test_env.rs new file mode 100644 index 0000000..d8e1b74 --- /dev/null +++ b/src/ic-websocket-cdk/src/tests/integration_tests/utils/test_env.rs @@ -0,0 +1,119 @@ +use std::time::{Duration, SystemTime}; + +use candid::Principal; +use lazy_static::lazy_static; +use pocket_ic::PocketIc; + +use super::{ + clients::GATEWAY_1, + constants::{ + DEFAULT_TEST_KEEP_ALIVE_TIMEOUT_MS, DEFAULT_TEST_MAX_NUMBER_OF_RETURNED_MESSAGES, + DEFAULT_TEST_SEND_ACK_INTERVAL_MS, + }, + wasm::load_canister_wasm_from_bin, +}; + +lazy_static! { + pub static ref TEST_ENV: TestEnv = TestEnv::new(); +} + +pub struct TestEnv { + pub pic: PocketIc, + pub canister_id: Principal, + canister_init_args: CanisterInitArgs, + wasm_module: Vec, + root_ic_key: Vec, +} + +/// (`gateway_principal`, `max_number_or_returned_messages`, `send_ack_interval_ms`, `send_ack_timeout_ms`) +type CanisterInitArgs = (String, u64, u64, u64); + +impl TestEnv { + pub fn new() -> Self { + let pic = PocketIc::new(); + + // set ic time to current time + pic.set_time(SystemTime::now()); + + let canister_id = pic.create_canister(None); + pic.add_cycles(canister_id, 1_000_000_000_000_000); + + let wasm_bytes = load_canister_wasm_from_bin("test_canister.wasm"); + let arguments: CanisterInitArgs = ( + GATEWAY_1.to_string(), + DEFAULT_TEST_MAX_NUMBER_OF_RETURNED_MESSAGES, + DEFAULT_TEST_SEND_ACK_INTERVAL_MS, + DEFAULT_TEST_KEEP_ALIVE_TIMEOUT_MS, + ); + pic.install_canister( + canister_id, + wasm_bytes.clone(), + candid::encode_args(arguments.clone()).unwrap(), + None, + ); + + let root_ic_key = pic.root_key(); + + Self { + pic, + canister_id, + canister_init_args: arguments, + wasm_module: wasm_bytes, + root_ic_key, + } + } + + pub fn reset_canister( + &self, + max_number_or_returned_messages: u64, + send_ack_interval_ms: u64, + keep_alive_delay_ms: u64, + ) { + let arguments: CanisterInitArgs = ( + self.canister_init_args.0.clone(), + max_number_or_returned_messages, + send_ack_interval_ms, + keep_alive_delay_ms, + ); + let res = self.pic.reinstall_canister( + self.canister_id, + self.wasm_module.to_owned(), + candid::encode_args(arguments).unwrap(), + None, + ); + + match res { + Ok(_) => {}, + Err(err) => { + panic!("Failed to reset canister: {:?}", err); + }, + } + } + + pub fn reset_canister_with_default_params(&self) { + self.reset_canister( + DEFAULT_TEST_MAX_NUMBER_OF_RETURNED_MESSAGES, + DEFAULT_TEST_SEND_ACK_INTERVAL_MS, + DEFAULT_TEST_KEEP_ALIVE_TIMEOUT_MS, + ); + } + + /// Returns the current time of the canister in nanoseconds. + pub fn get_canister_time(&self) -> u64 { + self.pic + .get_time() + .duration_since(SystemTime::UNIX_EPOCH) + .unwrap() + .as_nanos() as u64 + } + + pub fn get_root_ic_key(&self) -> Vec { + self.root_ic_key.clone() + } + + pub fn advance_canister_time_ms(&self, ms: u64) { + self.pic.advance_time(Duration::from_millis(ms)); + // produce and advance by one block to fire eventual timers + self.pic.tick(); + } +} diff --git a/src/ic-websocket-cdk/src/tests/integration_tests/utils/wasm.rs b/src/ic-websocket-cdk/src/tests/integration_tests/utils/wasm.rs new file mode 100644 index 0000000..b078155 --- /dev/null +++ b/src/ic-websocket-cdk/src/tests/integration_tests/utils/wasm.rs @@ -0,0 +1,15 @@ +use std::fs::File; +use std::io::Read; + +use super::bin_folder_path; + +pub fn load_canister_wasm_from_bin(wasm_name: &str) -> Vec { + let mut file_path = bin_folder_path(); + file_path.push(wasm_name); + + let mut file = File::open(&file_path) + .unwrap_or_else(|_| panic!("Failed to open file: {}", file_path.to_str().unwrap())); + let mut bytes = Vec::new(); + file.read_to_end(&mut bytes).expect("Failed to read file"); + bytes +} diff --git a/src/ic-websocket-cdk/src/tests/mod.rs b/src/ic-websocket-cdk/src/tests/mod.rs new file mode 100644 index 0000000..f33905a --- /dev/null +++ b/src/ic-websocket-cdk/src/tests/mod.rs @@ -0,0 +1,4 @@ +#![cfg(test)] + +mod integration_tests; +mod unit_tests; diff --git a/src/ic-websocket-cdk/src/tests/unit_tests.rs b/src/ic-websocket-cdk/src/tests/unit_tests.rs new file mode 100644 index 0000000..5bb02b2 --- /dev/null +++ b/src/ic-websocket-cdk/src/tests/unit_tests.rs @@ -0,0 +1,627 @@ +use super::super::*; +use proptest::prelude::*; + +mod test_utils { + use candid::Principal; + use ic_agent::{identity::BasicIdentity, Identity}; + use ring::signature::Ed25519KeyPair; + + use super::{ + get_message_for_gateway_key, CanisterOutputMessage, ClientKey, RegisteredClient, + MESSAGES_FOR_GATEWAY, + }; + + fn generate_random_key_pair() -> Ed25519KeyPair { + let rng = ring::rand::SystemRandom::new(); + let key_pair = + Ed25519KeyPair::generate_pkcs8(&rng).expect("Could not generate a key pair."); + Ed25519KeyPair::from_pkcs8(key_pair.as_ref()).expect("Could not read the key pair.") + } + + pub fn generate_random_principal() -> candid::Principal { + let key_pair = generate_random_key_pair(); + let identity = BasicIdentity::from_key_pair(key_pair); + + // workaround to keep the principal in the version of candid used by the canister + candid::Principal::from_text(identity.sender().unwrap().to_text()).unwrap() + } + + pub(super) fn generate_random_registered_client() -> RegisteredClient { + RegisteredClient::new() + } + + pub fn get_static_principal() -> Principal { + Principal::from_text("wnkwv-wdqb5-7wlzr-azfpw-5e5n5-dyxrf-uug7x-qxb55-mkmpa-5jqik-tqe") + .unwrap() // a random static but valid principal + } + + pub(super) fn get_random_client_key() -> ClientKey { + ClientKey::new( + generate_random_principal(), + // a random nonce + rand::random(), + ) + } + + pub(super) fn add_messages_for_gateway( + client_key: ClientKey, + gateway_principal: Principal, + count: u64, + ) { + MESSAGES_FOR_GATEWAY.with(|m| { + for i in 0..count { + m.borrow_mut().push_back(CanisterOutputMessage { + client_key: client_key.clone(), + key: get_message_for_gateway_key(gateway_principal.clone(), i), + content: vec![], + }); + } + }); + } + + pub fn clean_messages_for_gateway() { + MESSAGES_FOR_GATEWAY.with(|m| m.borrow_mut().clear()); + } +} + +// we don't need to proptest get_gateway_principal if principal is not set, as it just panics +#[test] +#[should_panic = "gateway should be initialized"] +fn test_get_gateway_principal_not_set() { + get_registered_gateway_principal(); +} + +#[test] +fn test_ws_handlers_are_called() { + struct CustomState { + is_on_open_called: bool, + is_on_message_called: bool, + is_on_close_called: bool, + } + + impl CustomState { + fn new() -> Self { + Self { + is_on_open_called: false, + is_on_message_called: false, + is_on_close_called: false, + } + } + } + + thread_local! { + static CUSTOM_STATE : RefCell = RefCell::new(CustomState::new()); + } + + let mut h = WsHandlers { + on_open: None, + on_message: None, + on_close: None, + }; + + set_params(WsInitParams { + handlers: h.clone(), + ..Default::default() + }); + + let handlers = get_handlers_from_params(); + + assert!(handlers.on_open.is_none()); + assert!(handlers.on_message.is_none()); + assert!(handlers.on_close.is_none()); + + handlers.call_on_open(OnOpenCallbackArgs { + client_principal: test_utils::generate_random_principal(), + }); + handlers.call_on_message(OnMessageCallbackArgs { + client_principal: test_utils::generate_random_principal(), + message: vec![], + }); + handlers.call_on_close(OnCloseCallbackArgs { + client_principal: test_utils::generate_random_principal(), + }); + + // test that the handlers are not called if they are not initialized + assert!(!CUSTOM_STATE.with(|h| h.borrow().is_on_open_called)); + assert!(!CUSTOM_STATE.with(|h| h.borrow().is_on_message_called)); + assert!(!CUSTOM_STATE.with(|h| h.borrow().is_on_close_called)); + + // initialize handlers + let on_open = |_| { + CUSTOM_STATE.with(|h| { + let mut h = h.borrow_mut(); + h.is_on_open_called = true; + }); + }; + let on_message = |_| { + CUSTOM_STATE.with(|h| { + let mut h = h.borrow_mut(); + h.is_on_message_called = true; + }); + }; + let on_close = |_| { + CUSTOM_STATE.with(|h| { + let mut h = h.borrow_mut(); + h.is_on_close_called = true; + }); + }; + + h = WsHandlers { + on_open: Some(on_open), + on_message: Some(on_message), + on_close: Some(on_close), + }; + + set_params(WsInitParams { + handlers: h.clone(), + ..Default::default() + }); + + let handlers = get_handlers_from_params(); + + assert!(handlers.on_open.is_some()); + assert!(handlers.on_message.is_some()); + assert!(handlers.on_close.is_some()); + + handlers.call_on_open(OnOpenCallbackArgs { + client_principal: test_utils::generate_random_principal(), + }); + handlers.call_on_message(OnMessageCallbackArgs { + client_principal: test_utils::generate_random_principal(), + message: vec![], + }); + handlers.call_on_close(OnCloseCallbackArgs { + client_principal: test_utils::generate_random_principal(), + }); + + // test that the handlers are called if they are initialized + assert!(CUSTOM_STATE.with(|h| h.borrow().is_on_open_called)); + assert!(CUSTOM_STATE.with(|h| h.borrow().is_on_message_called)); + assert!(CUSTOM_STATE.with(|h| h.borrow().is_on_close_called)); +} + +#[test] +fn test_ws_handlers_panic_is_handled() { + let h = WsHandlers { + on_open: Some(|_| { + panic!("on_open_panic"); + }), + on_message: Some(|_| { + panic!("on_close_panic"); + }), + on_close: Some(|_| { + panic!("on_close_panic"); + }), + }; + + set_params(WsInitParams { + handlers: h.clone(), + ..Default::default() + }); + + let handlers = get_handlers_from_params(); + + let res = panic::catch_unwind(|| { + handlers.call_on_open(OnOpenCallbackArgs { + client_principal: test_utils::generate_random_principal(), + }); + }); + assert!(res.is_ok()); + let res = panic::catch_unwind(|| { + handlers.call_on_message(OnMessageCallbackArgs { + client_principal: test_utils::generate_random_principal(), + message: vec![], + }); + }); + assert!(res.is_ok()); + let res = panic::catch_unwind(|| { + handlers.call_on_close(OnCloseCallbackArgs { + client_principal: test_utils::generate_random_principal(), + }); + }); + assert!(res.is_ok()); +} + +#[test] +fn test_current_time() { + // test + assert_eq!(get_current_time(), 0u64); +} + +proptest! { + #[test] + fn test_initialize_registered_gateway(test_gateway_principal in any::().prop_map(|_| test_utils::generate_random_principal())) { + initialize_registered_gateway(&test_gateway_principal.to_string()); + + REGISTERED_GATEWAY.with(|p| { + let p = p.borrow(); + assert!(p.is_some()); + assert_eq!( + p.unwrap(), + RegisteredGateway::new(test_gateway_principal) + ); + }); + } + + #[test] + fn test_get_outgoing_message_nonce(test_nonce in any::()) { + // Set up + OUTGOING_MESSAGE_NONCE.with(|n| *n.borrow_mut() = test_nonce); + + let actual_nonce = get_outgoing_message_nonce(); + prop_assert_eq!(actual_nonce, test_nonce); + } + + #[test] + fn test_increment_outgoing_message_nonce(test_nonce in any::()) { + // Set up + OUTGOING_MESSAGE_NONCE.with(|n| *n.borrow_mut() = test_nonce); + + increment_outgoing_message_nonce(); + prop_assert_eq!(get_outgoing_message_nonce(), test_nonce + 1); + } + + #[test] + fn test_insert_client(test_client_key in any::().prop_map(|_| test_utils::get_random_client_key())) { + // Set up + let registered_client = test_utils::generate_random_registered_client(); + + insert_client(test_client_key.clone(), registered_client.clone()); + + let actual_client_key = CURRENT_CLIENT_KEY_MAP.with(|map| map.borrow().get(&test_client_key.client_principal).unwrap().clone()); + prop_assert_eq!(actual_client_key, test_client_key.clone()); + + let actual_client = REGISTERED_CLIENTS.with(|map| map.borrow().get(&test_client_key).unwrap().clone()); + prop_assert_eq!(actual_client, registered_client); + } + + #[test] + fn test_get_gateway_principal(test_gateway_principal in any::().prop_map(|_| test_utils::generate_random_principal())) { + // Set up + REGISTERED_GATEWAY.with(|p| *p.borrow_mut() = Some(RegisteredGateway::new(test_gateway_principal.clone()))); + + let actual_gateway_principal = get_registered_gateway_principal(); + prop_assert_eq!(actual_gateway_principal, test_gateway_principal); + } + + #[test] + fn test_is_client_registered_empty(test_client_key in any::().prop_map(|_| test_utils::get_random_client_key())) { + let actual_result = is_client_registered(&test_client_key); + prop_assert_eq!(actual_result, false); + } + + #[test] + fn test_is_client_registered(test_client_key in any::().prop_map(|_| test_utils::get_random_client_key())) { + // Set up + REGISTERED_CLIENTS.with(|map| { + map.borrow_mut().insert(test_client_key.clone(), test_utils::generate_random_registered_client()); + }); + + let actual_result = is_client_registered(&test_client_key); + prop_assert_eq!(actual_result, true); + } + + #[test] + fn test_get_client_key_from_principal_empty(test_client_principal in any::().prop_map(|_| test_utils::generate_random_principal())) { + let actual_result = get_client_key_from_principal(&test_client_principal); + prop_assert_eq!(actual_result.err(), Some(String::from(format!( + "client with principal {} doesn't have an open connection", + test_client_principal + )))); + } + + #[test] + fn test_get_client_key_from_principal(test_client_key in any::().prop_map(|_| test_utils::get_random_client_key())) { + // Set up + CURRENT_CLIENT_KEY_MAP.with(|map| { + map.borrow_mut().insert(test_client_key.client_principal, test_client_key.clone()); + }); + + let actual_result = get_client_key_from_principal(&test_client_key.client_principal); + prop_assert_eq!(actual_result.unwrap(), test_client_key); + } + + #[test] + fn test_check_registered_client_empty(test_client_key in any::().prop_map(|_| test_utils::get_random_client_key())) { + let actual_result = check_registered_client(&test_client_key); + prop_assert_eq!(actual_result.err(), Some(format!("client with key {} doesn't have an open connection", test_client_key))); + } + + #[test] + fn test_check_registered_client(test_client_key in any::().prop_map(|_| test_utils::get_random_client_key())) { + // Set up + REGISTERED_CLIENTS.with(|map| { + map.borrow_mut().insert(test_client_key.clone(), test_utils::generate_random_registered_client()); + }); + + let actual_result = check_registered_client(&test_client_key); + prop_assert!(actual_result.is_ok()); + let non_existing_client_key = test_utils::get_random_client_key(); + let actual_result = check_registered_client(&non_existing_client_key); + prop_assert_eq!(actual_result.err(), Some(format!("client with key {} doesn't have an open connection", non_existing_client_key))); + } + + #[test] + fn test_init_outgoing_message_to_client_num(test_client_key in any::().prop_map(|_| test_utils::get_random_client_key())) { + init_outgoing_message_to_client_num(test_client_key.clone()); + + let actual_result = OUTGOING_MESSAGE_TO_CLIENT_NUM_MAP.with(|map| map.borrow().get(&test_client_key).unwrap().clone()); + prop_assert_eq!(actual_result, INITIAL_CANISTER_SEQUENCE_NUM); + } + + #[test] + fn test_increment_outgoing_message_to_client_num(test_client_key in any::().prop_map(|_| test_utils::get_random_client_key()), test_num in any::()) { + // Set up + OUTGOING_MESSAGE_TO_CLIENT_NUM_MAP.with(|map| { + map.borrow_mut().insert(test_client_key.clone(), test_num); + }); + + let increment_result = increment_outgoing_message_to_client_num(&test_client_key); + prop_assert!(increment_result.is_ok()); + + let actual_result = OUTGOING_MESSAGE_TO_CLIENT_NUM_MAP.with(|map| map.borrow().get(&test_client_key).unwrap().clone()); + prop_assert_eq!(actual_result, test_num + 1); + } + + #[test] + fn test_get_outgoing_message_to_client_num(test_client_key in any::().prop_map(|_| test_utils::get_random_client_key()), test_num in any::()) { + // Set up + OUTGOING_MESSAGE_TO_CLIENT_NUM_MAP.with(|map| { + map.borrow_mut().insert(test_client_key.clone(), test_num); + }); + + let actual_result = get_outgoing_message_to_client_num(&test_client_key); + prop_assert!(actual_result.is_ok()); + prop_assert_eq!(actual_result.unwrap(), test_num); + } + + #[test] + fn test_init_expected_incoming_message_from_client_num(test_client_key in any::().prop_map(|_| test_utils::get_random_client_key())) { + init_expected_incoming_message_from_client_num(test_client_key.clone()); + + let actual_result = INCOMING_MESSAGE_FROM_CLIENT_NUM_MAP.with(|map| map.borrow().get(&test_client_key).unwrap().clone()); + prop_assert_eq!(actual_result, INITIAL_CLIENT_SEQUENCE_NUM); + } + + #[test] + fn test_get_expected_incoming_message_from_client_num(test_client_key in any::().prop_map(|_| test_utils::get_random_client_key()), test_num in any::()) { + // Set up + INCOMING_MESSAGE_FROM_CLIENT_NUM_MAP.with(|map| { + map.borrow_mut().insert(test_client_key.clone(), test_num); + }); + + let actual_result = get_expected_incoming_message_from_client_num(&test_client_key); + prop_assert!(actual_result.is_ok()); + prop_assert_eq!(actual_result.unwrap(), test_num); + } + + #[test] + fn test_increment_expected_incoming_message_from_client_num(test_client_key in any::().prop_map(|_| test_utils::get_random_client_key()), test_num in any::()) { + // Set up + INCOMING_MESSAGE_FROM_CLIENT_NUM_MAP.with(|map| { + map.borrow_mut().insert(test_client_key.clone(), test_num); + }); + + let increment_result = increment_expected_incoming_message_from_client_num(&test_client_key); + prop_assert!(increment_result.is_ok()); + + let actual_result = INCOMING_MESSAGE_FROM_CLIENT_NUM_MAP.with(|map| map.borrow().get(&test_client_key).unwrap().clone()); + prop_assert_eq!(actual_result, test_num + 1); + } + + #[test] + fn test_add_client_to_wait_for_keep_alive(test_client_key in any::().prop_map(|_| test_utils::get_random_client_key())) { + add_client_to_wait_for_keep_alive(&test_client_key); + + let actual_result = CLIENTS_WAITING_FOR_KEEP_ALIVE.with(|map| map.borrow().get(&test_client_key).is_some()); + prop_assert_eq!(actual_result, true); + } + + #[test] + fn test_add_client(test_client_key in any::().prop_map(|_| test_utils::get_random_client_key())) { + let registered_client = test_utils::generate_random_registered_client(); + + // Test + add_client(test_client_key.clone(), registered_client.clone()); + + let actual_result = CURRENT_CLIENT_KEY_MAP.with(|map| map.borrow().get(&test_client_key.client_principal).unwrap().clone()); + prop_assert_eq!(actual_result, test_client_key.clone()); + + let actual_result = REGISTERED_CLIENTS.with(|map| map.borrow().get(&test_client_key).unwrap().clone()); + prop_assert_eq!(actual_result, registered_client); + + let actual_result = INCOMING_MESSAGE_FROM_CLIENT_NUM_MAP.with(|map| map.borrow().get(&test_client_key).unwrap().clone()); + prop_assert_eq!(actual_result, INITIAL_CLIENT_SEQUENCE_NUM); + + let actual_result = OUTGOING_MESSAGE_TO_CLIENT_NUM_MAP.with(|map| map.borrow().get(&test_client_key).unwrap().clone()); + prop_assert_eq!(actual_result, INITIAL_CANISTER_SEQUENCE_NUM); + } + + #[test] + fn test_remove_client(test_client_key in any::().prop_map(|_| test_utils::get_random_client_key())) { + // Set up + CURRENT_CLIENT_KEY_MAP.with(|map| { + map.borrow_mut().insert(test_client_key.client_principal.clone(), test_client_key.clone()); + }); + REGISTERED_CLIENTS.with(|map| { + map.borrow_mut().insert(test_client_key.clone(), test_utils::generate_random_registered_client()); + }); + INCOMING_MESSAGE_FROM_CLIENT_NUM_MAP.with(|map| { + map.borrow_mut().insert(test_client_key.clone(), INITIAL_CLIENT_SEQUENCE_NUM); + }); + OUTGOING_MESSAGE_TO_CLIENT_NUM_MAP.with(|map| { + map.borrow_mut().insert(test_client_key.clone(), INITIAL_CANISTER_SEQUENCE_NUM); + }); + + remove_client(&test_client_key); + + let is_none = CURRENT_CLIENT_KEY_MAP.with(|map| map.borrow().get(&test_client_key.client_principal).is_none()); + prop_assert!(is_none); + + let is_none = REGISTERED_CLIENTS.with(|map| map.borrow().get(&test_client_key).is_none()); + prop_assert!(is_none); + + let is_none = INCOMING_MESSAGE_FROM_CLIENT_NUM_MAP.with(|map| map.borrow().get(&test_client_key).is_none()); + prop_assert!(is_none); + + let is_none = OUTGOING_MESSAGE_TO_CLIENT_NUM_MAP.with(|map| map.borrow().get(&test_client_key).is_none()); + prop_assert!(is_none); + } + + #[test] + fn test_get_message_for_gateway_key(test_gateway_principal in any::().prop_map(|_| test_utils::generate_random_principal()), test_nonce in any::()) { + let actual_result = get_message_for_gateway_key(test_gateway_principal.clone(), test_nonce); + prop_assert_eq!(actual_result, test_gateway_principal.to_string() + "_" + &format!("{:0>20}", test_nonce.to_string())); + } + + #[test] + fn test_get_messages_for_gateway_range_empty(messages_count in any::().prop_map(|c| c % 1000)) { + // Set up + let gateway_principal = test_utils::generate_random_principal(); + REGISTERED_GATEWAY.with(|p| *p.borrow_mut() = Some(RegisteredGateway::new(gateway_principal.clone()))); + + // Test + // we ask for a random range of messages to check if it always returns the same range for empty messages + for i in 0..messages_count { + let (start_index, end_index) = get_messages_for_gateway_range(gateway_principal, i); + prop_assert_eq!(start_index, 0); + prop_assert_eq!(end_index, 0); + } + } + + #[test] + fn test_get_messages_for_gateway_range_smaller_than_max(gateway_principal in any::().prop_map(|_| test_utils::get_static_principal())) { + // Set up + REGISTERED_GATEWAY.with(|p| *p.borrow_mut() = Some(RegisteredGateway::new(gateway_principal.clone()))); + + let messages_count = 4; + let test_client_key = test_utils::get_random_client_key(); + test_utils::add_messages_for_gateway(test_client_key, gateway_principal, messages_count); + + // Test + // messages are just 4, so we don't exceed the max number of returned messages + // add one to test the out of range index + for i in 0..messages_count + 1 { + let (start_index, end_index) = get_messages_for_gateway_range(gateway_principal, i); + prop_assert_eq!(start_index, i as usize); + prop_assert_eq!(end_index, messages_count as usize); + } + + // Clean up + test_utils::clean_messages_for_gateway(); + } + + #[test] + fn test_get_messages_for_gateway_range_larger_than_max(gateway_principal in any::().prop_map(|_| test_utils::get_static_principal()), max_number_of_returned_messages in any::().prop_map(|c| c % 1000)) { + // Set up + PARAMS.with(|p| { + *p.borrow_mut() = WsInitParams { + max_number_of_returned_messages, + ..Default::default() + } + }); + REGISTERED_GATEWAY.with(|p| *p.borrow_mut() = Some(RegisteredGateway::new(gateway_principal.clone()))); + + let messages_count: u64 = (2 * max_number_of_returned_messages).try_into().unwrap(); + let test_client_key = test_utils::get_random_client_key(); + test_utils::add_messages_for_gateway(test_client_key, gateway_principal, messages_count); + + // Test + // messages are now 2 * MAX_NUMBER_OF_RETURNED_MESSAGES + // the case in which the start index is 0 is tested in test_get_messages_for_gateway_range_initial_nonce + for i in 1..messages_count + 1 { + let (start_index, end_index) = get_messages_for_gateway_range(gateway_principal, i); + let expected_end_index = if (i as usize) + max_number_of_returned_messages > messages_count as usize { + messages_count as usize + } else { + (i as usize) + max_number_of_returned_messages + }; + prop_assert_eq!(start_index, i as usize); + prop_assert_eq!(end_index, expected_end_index); + } + + // Clean up + test_utils::clean_messages_for_gateway(); + } + + #[test] + fn test_get_messages_for_gateway_initial_nonce(gateway_principal in any::().prop_map(|_| test_utils::get_static_principal()), messages_count in any::().prop_map(|c| c % 100), max_number_of_returned_messages in any::().prop_map(|c| c % 1000)) { + // Set up + PARAMS.with(|p| { + *p.borrow_mut() = WsInitParams { + max_number_of_returned_messages, + ..Default::default() + } + }); + REGISTERED_GATEWAY.with(|p| *p.borrow_mut() = Some(RegisteredGateway::new(gateway_principal.clone()))); + + let test_client_key = test_utils::get_random_client_key(); + test_utils::add_messages_for_gateway(test_client_key, gateway_principal, messages_count); + + // Test + let (start_index, end_index) = get_messages_for_gateway_range(gateway_principal, 0); + let expected_start_index = if (messages_count as usize) > max_number_of_returned_messages { + (messages_count as usize) - max_number_of_returned_messages + } else { + 0 + }; + prop_assert_eq!(start_index, expected_start_index); + prop_assert_eq!(end_index, messages_count as usize); + + // Clean up + test_utils::clean_messages_for_gateway(); + } + + #[test] + fn test_get_messages_for_gateway(gateway_principal in any::().prop_map(|_| test_utils::get_static_principal()), messages_count in any::().prop_map(|c| c % 100)) { + // Set up + REGISTERED_GATEWAY.with(|p| *p.borrow_mut() = Some(RegisteredGateway::new(gateway_principal.clone()))); + + let test_client_key = test_utils::get_random_client_key(); + test_utils::add_messages_for_gateway(test_client_key, gateway_principal, messages_count); + + // Test + // add one to test the out of range index + for i in 0..messages_count + 1 { + let (start_index, end_index) = get_messages_for_gateway_range(gateway_principal, i); + let messages = get_messages_for_gateway(start_index, end_index); + + // check if the messages returned are the ones we expect + for (j, message) in messages.iter().enumerate() { + let expected_key = get_message_for_gateway_key(gateway_principal.clone(), (start_index + j) as u64); + prop_assert_eq!(&message.key, &expected_key); + } + } + + // Clean up + test_utils::clean_messages_for_gateway(); + } + + #[test] + fn test_check_is_registered_gateway(test_gateway_principal in any::().prop_map(|_| test_utils::generate_random_principal())) { + // Set up + REGISTERED_GATEWAY.with(|p| *p.borrow_mut() = Some(RegisteredGateway::new(test_gateway_principal.clone()))); + + let actual_result = check_is_registered_gateway(test_gateway_principal); + prop_assert!(actual_result.is_ok()); + + let other_principal = test_utils::generate_random_principal(); + let actual_result = check_is_registered_gateway(other_principal); + prop_assert_eq!(actual_result.err(), Some(String::from("caller is not the gateway that has been registered during CDK initialization"))); + } + + #[test] + fn test_serialize_websocket_message(test_msg_bytes in any::>(), test_sequence_num in any::(), test_timestamp in any::()) { + // TODO: add more tests, in which we check the serialized message + let websocket_message = WebsocketMessage { + client_key: test_utils::get_random_client_key(), + sequence_num: test_sequence_num, + timestamp: test_timestamp, + is_service_message: false, + content: test_msg_bytes, + }; + + let serialized_message = websocket_message.cbor_serialize(); + assert!(serialized_message.is_ok()); // not so useful as a test + } +} diff --git a/tests/Cargo.toml b/src/test_canister/Cargo.toml similarity index 100% rename from tests/Cargo.toml rename to src/test_canister/Cargo.toml diff --git a/tests/src/canister.rs b/src/test_canister/src/canister.rs similarity index 100% rename from tests/src/canister.rs rename to src/test_canister/src/canister.rs diff --git a/tests/src/lib.rs b/src/test_canister/src/lib.rs similarity index 100% rename from tests/src/lib.rs rename to src/test_canister/src/lib.rs diff --git a/tests/test_canister.did b/src/test_canister/test_canister.did similarity index 100% rename from tests/test_canister.did rename to src/test_canister/test_canister.did diff --git a/tests/babel.config.js b/tests/babel.config.js deleted file mode 100644 index 8165fe4..0000000 --- a/tests/babel.config.js +++ /dev/null @@ -1,6 +0,0 @@ -module.exports = { - presets: [ - ['@babel/preset-env', { targets: { node: 'current' } }], - '@babel/preset-typescript', - ], -}; diff --git a/tests/dfx.json b/tests/dfx.json deleted file mode 100644 index 249c1ae..0000000 --- a/tests/dfx.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "canisters": { - "test_canister": { - "candid": "test_canister.did", - "package": "test_canister", - "type": "rust" - } - }, - "defaults": { - "build": { - "args": "", - "packtool": "" - } - }, - "output_env_file": ".env", - "version": 1, - "dfx": "0.14.1" -} \ No newline at end of file diff --git a/tests/integration/canister.test.ts b/tests/integration/canister.test.ts deleted file mode 100644 index 68a531d..0000000 --- a/tests/integration/canister.test.ts +++ /dev/null @@ -1,949 +0,0 @@ -import { IDL } from "@dfinity/candid"; -import { - anonymousClient, - canisterId, - client1, - client1Data, - client2, - client2Data, - commonAgent, - gateway1, - gateway2, -} from "./utils/actors"; -import { - initializeCdk, - wsClose, - wsGetMessages, - wsMessage, - wsOpen, - wsSend, - wsWipe, -} from "./utils/api"; -import type { - CanisterOutputCertifiedMessages, - CanisterWsCloseResult, - CanisterWsGetMessagesResult, - CanisterWsMessageResult, - CanisterWsOpenResult, - CanisterWsSendResult, - ClientKey, - WebsocketMessage, -} from "../src/declarations/test_canister/test_canister.did"; -import { generateClientKey, getRandomClientNonce } from "./utils/random"; -import { - CanisterOpenMessageContent, - WebsocketServiceMessageContent, - decodeWebsocketServiceMessageContent, - encodeWebsocketServiceMessageContent, - getServiceMessageContentFromCanisterMessage, - getWebsocketMessageFromCanisterMessage, - isClientKeyEq, -} from "./utils/idl"; -import { - isMessageBodyValid, - isValidCertificate, - createWebsocketMessage, - decodeWebsocketMessage, - filterServiceMessagesFromCanisterMessages, - getNextPollingNonceFromMessages, -} from "./utils/messages"; -import { formatClientKey } from "./utils/client"; -import { sleep } from "./utils/helpers"; - -/** - * The maximum number of messages returned by the **ws_get_messages** method. - * - * Value: `20` - */ -const DEFAULT_TEST_MAX_NUMBER_OF_RETURNED_MESSAGES = 20; -/** - * Add more messages than the max to check the indexes and limits. - * @{@link MAX_NUMBER_OF_RETURNED_MESSAGES} + 2 - * - * Value: `12` - */ -const SEND_MESSAGES_COUNT = DEFAULT_TEST_MAX_NUMBER_OF_RETURNED_MESSAGES + 2; -/** - * The interval between sending acks from the canister. - * Set to a high value to make sure the canister doesn't reset the client while testing other functions. - * - * Value: `300_000` (5 minutes) - */ -const DEFAULT_TEST_SEND_ACK_INTERVAL_MS = 300_000; -/** - * The interval between keep alive checks in the canister. - * Set to a high value to make sure the canister doesn't reset the client while testing other functions. - * - * Value: `120_000` (2 minutes) - */ -const DEFAULT_TEST_KEEP_ALIVE_TIMEOUT_MS = 120_000; - -let client1Key: ClientKey; -let client2Key: ClientKey; - -const assignKeysToClients = async () => { - if (!client1Key) { - client1Key = generateClientKey((await client1Data.identity).getPrincipal()); - } - if (!client2Key) { - client2Key = generateClientKey((await client2Data.identity).getPrincipal()); - } -}; - -// testing again canister takes quite a while -jest.setTimeout(60_000); - -describe("Canister - ws_open", () => { - beforeAll(async () => { - await assignKeysToClients(); - }); - - afterAll(async () => { - await wsWipe(); - }); - - it("fails for an anonymous client", async () => { - const res = await wsOpen({ - canisterId, - clientActor: anonymousClient, - clientNonce: getRandomClientNonce(), - }) - - expect(res).toMatchObject({ - Err: "anonymous principal cannot open a connection", - }); - }); - - it("fails for the registered gateway", async () => { - const res = await wsOpen({ - canisterId, - clientActor: gateway1, - clientNonce: getRandomClientNonce(), - }); - - expect(res).toMatchObject({ - Err: "caller is the registered gateway which can't open a connection for itself", - }); - }); - - it("should open a connection", async () => { - const res = await wsOpen({ - canisterId, - clientActor: client1, - clientNonce: client1Key.client_nonce, - }); - - expect(res).toMatchObject({ - Ok: null, - }); - - const msgs = await wsGetMessages({ - fromNonce: 0, - gatewayActor: gateway1, - }); - - const serviceMessages = filterServiceMessagesFromCanisterMessages(msgs.messages); - - expect(isClientKeyEq(serviceMessages[0].client_key, client1Key)).toEqual(true); - const openMessage = getServiceMessageContentFromCanisterMessage(serviceMessages[0]); - expect(openMessage).toMatchObject({ - OpenMessage: expect.any(Object), - }); - const openMessageContent = (openMessage as { OpenMessage: CanisterOpenMessageContent }).OpenMessage; - expect(isClientKeyEq(openMessageContent.client_key, client1Key)).toEqual(true); - }); - - it("fails for a client with the same nonce", async () => { - const res = await wsOpen({ - canisterId, - clientActor: client1, - clientNonce: client1Key.client_nonce, - }); - - expect(res).toMatchObject({ - Err: `client with key ${client1Key.client_principal.toText()}_${client1Key.client_nonce} already has an open connection`, - }); - }); - - it("should open a connection for the same client with a different nonce", async () => { - const clientKey = { - ...client1Key, - client_nonce: getRandomClientNonce(), - } - const res = await wsOpen({ - canisterId, - clientActor: client1, - clientNonce: clientKey.client_nonce, - }); - - expect(res).toMatchObject({ - Ok: null, - }); - - const msgs = await wsGetMessages({ - fromNonce: 0, - gatewayActor: gateway1, - }); - - const serviceMessages = filterServiceMessagesFromCanisterMessages(msgs.messages); - const serviceMessagesForClient = serviceMessages.filter((msg) => isClientKeyEq(msg.client_key, clientKey)); - - const openMessage = getServiceMessageContentFromCanisterMessage(serviceMessagesForClient[0]); - expect(openMessage).toMatchObject({ - OpenMessage: expect.any(Object), - }); - const openMessageContent = (openMessage as { OpenMessage: CanisterOpenMessageContent }).OpenMessage; - expect(isClientKeyEq(openMessageContent.client_key, clientKey)).toEqual(true); - }); -}); - -describe("Canister - ws_message", () => { - beforeAll(async () => { - await assignKeysToClients(); - - await initializeCdk({ - maxNumberOfReturnedMessages: DEFAULT_TEST_MAX_NUMBER_OF_RETURNED_MESSAGES, - sendAckIntervalMs: DEFAULT_TEST_SEND_ACK_INTERVAL_MS, - keepAliveDelayMs: DEFAULT_TEST_KEEP_ALIVE_TIMEOUT_MS, - }); - - await wsOpen({ - clientNonce: client1Key.client_nonce, - canisterId, - clientActor: client1, - }, true); - }); - - afterAll(async () => { - await wsWipe(); - }); - - it("fails if client is not registered", async () => { - const res = await wsMessage({ - message: createWebsocketMessage(client2Key, 0), - actor: client2, - }); - - expect(res).toMatchObject({ - Err: `client with principal ${client2Key.client_principal.toText()} doesn't have an open connection`, - }); - }); - - it("fails if client sends a message with a different client key", async () => { - // first, send a message with a different principal - const res = await wsMessage({ - message: createWebsocketMessage({ ...client1Key, client_principal: client2Key.client_principal }, 0), - actor: client1, - }); - - expect(res).toMatchObject({ - Err: `client with principal ${client1Key.client_principal.toText()} has a different key than the one used in the message`, - }); - - // then, send a message with a different nonce - const res2 = await wsMessage({ - message: createWebsocketMessage({ ...client1Key, client_nonce: getRandomClientNonce() }, 0), - actor: client1, - }); - - expect(res2).toMatchObject({ - Err: `client with principal ${client1Key.client_principal.toText()} has a different key than the one used in the message`, - }); - }); - - it("should send a message from a registered client", async () => { - const res = await wsMessage({ - message: createWebsocketMessage(client1Key, 1), - actor: client1, - }); - - expect(res).toMatchObject({ - Ok: null, - }); - }); - - it("fails if client sends a message with a wrong sequence number", async () => { - const actualSequenceNumber = 1; - const expectedSequenceNumber = 2; // first valid message with sequence number 1 was sent in the previous test - const res = await wsMessage({ - message: createWebsocketMessage(client1Key, actualSequenceNumber), - actor: client1, - }); - - expect(res).toMatchObject({ - Err: `incoming client's message does not have the expected sequence number. Expected: ${expectedSequenceNumber}, actual: ${actualSequenceNumber}. Client removed.`, - }); - - // check if client has been removed - const res2 = await wsMessage({ - message: createWebsocketMessage(client1Key, 0), // here the sequence number doesn't matter - actor: client1, - }); - - expect(res2).toMatchObject({ - Err: `client with principal ${client1Key.client_principal.toText()} doesn't have an open connection`, - }); - }); - - it("fails if a client sends a wrong service message", async () => { - // open the connection again - await wsOpen({ - clientNonce: client1Key.client_nonce, - canisterId, - clientActor: client1, - }, true); - - // wrong content encoding - const res = await wsMessage({ - message: createWebsocketMessage(client1Key, 1, new Uint8Array([1, 2, 3]), true), - actor: client1, - }); - - expect(res).toMatchObject({ - Err: expect.stringContaining("Error decoding service message content:"), - }); - - const wrongServiceMessage: WebsocketServiceMessageContent = { - // the client can only send KeepAliveMessage variant - AckMessage: { - last_incoming_sequence_num: BigInt(0), - } - }; - const res2 = await wsMessage({ - message: createWebsocketMessage(client1Key, 2, encodeWebsocketServiceMessageContent(wrongServiceMessage), true), - actor: client1, - }); - - expect(res2).toMatchObject({ - Err: "Invalid received service message", - }); - }); - - it("should send a service message from a registered client", async () => { - const clientServiceMessage: WebsocketServiceMessageContent = { - KeepAliveMessage: { - last_incoming_sequence_num: BigInt(0), - }, - }; - const res = await wsMessage({ - message: createWebsocketMessage(client1Key, 3, encodeWebsocketServiceMessageContent(clientServiceMessage), true), - actor: client1, - }); - - expect(res).toMatchObject({ - Ok: null, - }); - }); -}); - -describe("Canister - ws_get_messages (failures,empty)", () => { - it("fails if a non registered gateway tries to get messages", async () => { - const res = await gateway2.ws_get_messages({ - nonce: BigInt(0), - }); - - expect(res).toMatchObject({ - Err: "caller is not the gateway that has been registered during CDK initialization", - }); - }); - - it("registered gateway should receive empty messages if no messages are available", async () => { - let res = await gateway1.ws_get_messages({ - nonce: BigInt(0), - }); - - expect(res).toMatchObject({ - Ok: { - messages: [], - cert: new Uint8Array(), - tree: new Uint8Array(), - }, - }); - - res = await gateway1.ws_get_messages({ - nonce: BigInt(100), // high nonce to make sure the indexes are calculated correctly in the canister - }); - - expect(res).toMatchObject({ - Ok: { - messages: [], - cert: new Uint8Array(), - tree: new Uint8Array(), - }, - }); - }); -}); - -describe("Canister - ws_get_messages (receive)", () => { - beforeAll(async () => { - await assignKeysToClients(); - - await initializeCdk({ - maxNumberOfReturnedMessages: DEFAULT_TEST_MAX_NUMBER_OF_RETURNED_MESSAGES, - sendAckIntervalMs: DEFAULT_TEST_SEND_ACK_INTERVAL_MS, - keepAliveDelayMs: DEFAULT_TEST_KEEP_ALIVE_TIMEOUT_MS, - }); - - await wsOpen({ - clientNonce: client1Key.client_nonce, - canisterId, - clientActor: client1, - }, true); - - // prepare the messages - const messages = Array.from({ length: SEND_MESSAGES_COUNT }, (_, i) => { - return { text: `test${i}` }; - }); - - await wsSend({ - clientPrincipal: client1Key.client_principal, - actor: client1, - messages, - }, true); - }); - - afterAll(async () => { - await wsWipe(); - }); - - it("registered gateway can receive correct amount of messages", async () => { - // on open, the canister puts a service message in the queue - const messagesCount = SEND_MESSAGES_COUNT + 1; // +1 for the open service message - for (let i = 0; i < messagesCount; i++) { - const res = await gateway1.ws_get_messages({ - nonce: BigInt(i), - }); - - expect(res).toMatchObject({ - Ok: { - messages: expect.any(Array), - cert: expect.any(Uint8Array), - tree: expect.any(Uint8Array), - }, - }); - - const messagesResult = (res as { Ok: CanisterOutputCertifiedMessages }).Ok; - expect(messagesResult.messages.length).toEqual( - messagesCount - i > DEFAULT_TEST_MAX_NUMBER_OF_RETURNED_MESSAGES - ? DEFAULT_TEST_MAX_NUMBER_OF_RETURNED_MESSAGES - : messagesCount - i - ); - } - - // try to get more messages than available - const res = await gateway1.ws_get_messages({ - nonce: BigInt(messagesCount), - }); - - expect(res).toMatchObject({ - Ok: { - messages: [], - cert: expect.any(Uint8Array), - tree: expect.any(Uint8Array), - }, - }); - }); - - it("registered gateway can receive certified messages", async () => { - // first batch of messages - const firstBatchRes = await gateway1.ws_get_messages({ - nonce: BigInt(1), // skip the case in which the gateway restarts polling from the beginning (tested below) - }); - - const firstBatchMessagesResult = (firstBatchRes as { Ok: CanisterOutputCertifiedMessages }).Ok; - expect(firstBatchMessagesResult.messages.length).toEqual(DEFAULT_TEST_MAX_NUMBER_OF_RETURNED_MESSAGES); - - let expectedSequenceNumber = 2; // first is the service open message and the number is incremented before sending - let i = 0; - for (const message of firstBatchMessagesResult.messages) { - expect(isClientKeyEq(message.client_key, client1Key)).toEqual(true); - const websocketMessage = decodeWebsocketMessage(new Uint8Array(message.content)); - expect(websocketMessage).toMatchObject({ - client_key: expect.any(Object), - content: expect.any(Uint8Array), - sequence_num: BigInt(expectedSequenceNumber), - timestamp: expect.any(BigInt), - is_service_message: false, - }); - expect(isClientKeyEq(websocketMessage.client_key, client1Key)).toEqual(true); - expect(IDL.decode([IDL.Record({ 'text': IDL.Text })], websocketMessage.content as Uint8Array)).toEqual([{ text: `test${i}` }]); - - // check the certification - await expect( - isValidCertificate( - canisterId, - firstBatchMessagesResult.cert as Uint8Array, - firstBatchMessagesResult.tree as Uint8Array, - commonAgent - ) - ).resolves.toEqual(true); - await expect( - isMessageBodyValid( - message.key, - message.content as Uint8Array, - firstBatchMessagesResult.tree as Uint8Array, - ) - ).resolves.toEqual(true); - - expectedSequenceNumber++; - i++; - } - - const nextPollingNonce = getNextPollingNonceFromMessages(firstBatchMessagesResult.messages); - - // second batch of messages, starting from the last nonce of the first batch - const secondBatchRes = await gateway1.ws_get_messages({ - nonce: BigInt(nextPollingNonce), - }); - - const secondBatchMessagesResult = (secondBatchRes as { Ok: CanisterOutputCertifiedMessages }).Ok; - expect(secondBatchMessagesResult.messages.length).toEqual(SEND_MESSAGES_COUNT - DEFAULT_TEST_MAX_NUMBER_OF_RETURNED_MESSAGES); // remaining from SEND_MESSAGES_COUNT - - for (const message of secondBatchMessagesResult.messages) { - expect(isClientKeyEq(message.client_key, client1Key)).toEqual(true); - const websocketMessage = decodeWebsocketMessage(new Uint8Array(message.content)); - expect(websocketMessage).toMatchObject({ - client_key: expect.any(Object), - content: expect.any(Uint8Array), - sequence_num: BigInt(expectedSequenceNumber), - timestamp: expect.any(BigInt), - is_service_message: false, - }); - expect(isClientKeyEq(websocketMessage.client_key, client1Key)).toEqual(true); - expect(IDL.decode([IDL.Record({ 'text': IDL.Text })], websocketMessage.content as Uint8Array)).toEqual([{ text: `test${i}` }]); - - // check the certification - await expect( - isValidCertificate( - canisterId, - secondBatchMessagesResult.cert as Uint8Array, - secondBatchMessagesResult.tree as Uint8Array, - commonAgent - ) - ).resolves.toEqual(true); - await expect( - isMessageBodyValid( - message.key, - message.content as Uint8Array, - secondBatchMessagesResult.tree as Uint8Array, - ) - ).resolves.toEqual(true); - - expectedSequenceNumber++; - i++; - } - }); - - it("registered gateway can poll messages after restart", async () => { - const batchRes = await gateway1.ws_get_messages({ - nonce: BigInt(0), // start polling from the beginning, as if the gateway restarted - }); - - // we expect that the messages returned are the last MAX_NUMBER_OF_RETURNED_MESSAGES - const messagesResult = (batchRes as { Ok: CanisterOutputCertifiedMessages }).Ok; - expect(messagesResult.messages.length).toEqual(DEFAULT_TEST_MAX_NUMBER_OF_RETURNED_MESSAGES); - - let expectedSequenceNumber = SEND_MESSAGES_COUNT - DEFAULT_TEST_MAX_NUMBER_OF_RETURNED_MESSAGES + 1 + 1; // +1 for the service open message +1 because the seq num is incremented before sending - let i = SEND_MESSAGES_COUNT - DEFAULT_TEST_MAX_NUMBER_OF_RETURNED_MESSAGES; - for (const message of messagesResult.messages) { - expect(isClientKeyEq(message.client_key, client1Key)).toEqual(true); - const websocketMessage = decodeWebsocketMessage(new Uint8Array(message.content)); - expect(websocketMessage).toMatchObject({ - client_key: expect.any(Object), - content: expect.any(Uint8Array), - sequence_num: BigInt(expectedSequenceNumber), - timestamp: expect.any(BigInt), - is_service_message: false, - }); - expect(isClientKeyEq(websocketMessage.client_key, client1Key)).toEqual(true); - expect(IDL.decode([IDL.Record({ 'text': IDL.Text })], websocketMessage.content as Uint8Array)).toEqual([{ text: `test${i}` }]); - - // check the certification - await expect( - isValidCertificate( - canisterId, - messagesResult.cert as Uint8Array, - messagesResult.tree as Uint8Array, - commonAgent - ) - ).resolves.toEqual(true); - await expect( - isMessageBodyValid( - message.key, - message.content as Uint8Array, - messagesResult.tree as Uint8Array, - ) - ).resolves.toEqual(true); - - expectedSequenceNumber++; - i++; - } - }); -}); - -describe("Canister - ws_close", () => { - beforeAll(async () => { - await assignKeysToClients(); - - await initializeCdk({ - maxNumberOfReturnedMessages: DEFAULT_TEST_MAX_NUMBER_OF_RETURNED_MESSAGES, - sendAckIntervalMs: DEFAULT_TEST_SEND_ACK_INTERVAL_MS, - keepAliveDelayMs: DEFAULT_TEST_KEEP_ALIVE_TIMEOUT_MS, - }); - - await wsOpen({ - clientNonce: client1Key.client_nonce, - canisterId, - clientActor: client1, - }, true); - }); - - afterAll(async () => { - await wsWipe(); - }); - - it("fails if gateway is not registered", async () => { - const res = await wsClose({ - clientKey: client1Key, - gatewayActor: gateway2, - }); - - expect(res).toMatchObject({ - Err: "caller is not the gateway that has been registered during CDK initialization", - }); - }); - - it("fails if client is not registered", async () => { - const res = await wsClose({ - clientKey: client2Key, - gatewayActor: gateway1, - }); - - expect(res).toMatchObject({ - Err: `client with key ${formatClientKey(client2Key)} doesn't have an open connection`, - }); - }); - - it("should close the websocket for a registered client", async () => { - const res = await wsClose({ - clientKey: client1Key, - gatewayActor: gateway1, - }); - - expect(res).toMatchObject({ - Ok: null, - }); - }); -}); - -describe("Canister - ws_send", () => { - beforeAll(async () => { - await assignKeysToClients(); - - await initializeCdk({ - maxNumberOfReturnedMessages: DEFAULT_TEST_MAX_NUMBER_OF_RETURNED_MESSAGES, - sendAckIntervalMs: DEFAULT_TEST_SEND_ACK_INTERVAL_MS, - keepAliveDelayMs: DEFAULT_TEST_KEEP_ALIVE_TIMEOUT_MS, - }); - - await wsOpen({ - clientNonce: client1Key.client_nonce, - canisterId, - clientActor: client1, - }, true); - }); - - afterAll(async () => { - await wsWipe(); - }); - - it("fails if sending a message to a non registered client", async () => { - const res = await wsSend({ - clientPrincipal: client2Key.client_principal, - actor: client1, - messages: [{ text: "test" }], - }); - - expect(res).toMatchObject({ - Err: `client with principal ${client2Key.client_principal.toText()} doesn't have an open connection`, - }); - }); - - it("should send a message to a registered client", async () => { - const res = await wsSend({ - clientPrincipal: client1Key.client_principal, - actor: client1, - messages: [{ text: "test" }], - }); - - expect(res).toMatchObject({ - Ok: null, - }); - }); -}); - -describe("Messages acknowledgement", () => { - beforeAll(async () => { - await assignKeysToClients(); - }); - - afterEach(async () => { - await wsWipe(); - }); - - it("client should receive ack messages", async () => { - const sendAckIntervalMs = 10_000; // 10 seconds - const keepAliveDelayMs = 5_000; // 5 seconds - await initializeCdk({ - maxNumberOfReturnedMessages: DEFAULT_TEST_MAX_NUMBER_OF_RETURNED_MESSAGES, - sendAckIntervalMs, - keepAliveDelayMs, - }); - - await wsOpen({ - clientNonce: client1Key.client_nonce, - canisterId, - clientActor: client1, - }, true); - - const res = await gateway1.ws_get_messages({ - nonce: BigInt(1), // skip the service open message - }); - - expect(res).toMatchObject({ - Ok: { - messages: [], - cert: new Uint8Array(), - tree: new Uint8Array(), - }, - }); - - await wsMessage({ - actor: client1, - message: createWebsocketMessage(client1Key, 1), - }, true); - - // sleep for 10 seconds, which is more than the sendAckIntervalMs due to the previous calls - // so we are sure that the CDK has sent an ack - await sleep(sendAckIntervalMs); - - const res2 = await gateway1.ws_get_messages({ - nonce: BigInt(1), - }); - - expect(res2).toMatchObject({ - Ok: { - messages: expect.any(Array), - cert: expect.any(Uint8Array), - tree: expect.any(Uint8Array), - }, - }); - const messagesResult = (res2 as { Ok: CanisterOutputCertifiedMessages }).Ok; - expect(messagesResult.messages.length).toEqual(1); - - const ackMessage = messagesResult.messages[0]; - expect(isClientKeyEq(ackMessage.client_key, client1Key)).toEqual(true); - expect(getServiceMessageContentFromCanisterMessage(ackMessage)).toMatchObject({ - AckMessage: { - last_incoming_sequence_num: BigInt(1), - } - }); - - // check if the certification is correct - await expect( - isValidCertificate( - canisterId, - messagesResult.cert as Uint8Array, - messagesResult.tree as Uint8Array, - commonAgent - ) - ).resolves.toEqual(true); - await expect( - isMessageBodyValid( - ackMessage.key, - ackMessage.content as Uint8Array, - messagesResult.tree as Uint8Array, - ) - ).resolves.toEqual(true); - }); - - it("client is removed if keep alive timeout is reached", async () => { - const sendAckIntervalMs = 10_000; // 10 seconds - const keepAliveDelayMs = 5_000; // 5 seconds - await initializeCdk({ - maxNumberOfReturnedMessages: DEFAULT_TEST_MAX_NUMBER_OF_RETURNED_MESSAGES, - sendAckIntervalMs, - keepAliveDelayMs, - }); - - await wsOpen({ - clientNonce: client1Key.client_nonce, - canisterId, - clientActor: client1, - }, true); - - await sleep(sendAckIntervalMs); - - const res = await gateway1.ws_get_messages({ - nonce: BigInt(1), // skip the service open message - }); - - const messagesResult = (res as { Ok: CanisterOutputCertifiedMessages }).Ok; - expect(messagesResult.messages.length).toEqual(1); - // just check if the received message is a service message and belongs to the client - expect(isClientKeyEq(messagesResult.messages[0].client_key, client1Key)).toEqual(true); - const websocketMessage = getWebsocketMessageFromCanisterMessage(messagesResult.messages[0]); - expect(websocketMessage.is_service_message).toEqual(true); - - await sleep(keepAliveDelayMs); - - // to check if the client is not registered anymore, we try to send a message - const res2 = await wsSend({ - clientPrincipal: client1Key.client_principal, - actor: client1, - messages: [{ text: "test" }], - }); - - expect(res2).toMatchObject({ - Err: `client with principal ${client1Key.client_principal.toText()} doesn't have an open connection`, - }); - }); - - it("client is not removed if it sends a keep alive before timeout", async () => { - const sendAckIntervalMs = 15_000; // 15 seconds - const keepAliveDelayMs = 5_000; // 5 seconds - await initializeCdk({ - maxNumberOfReturnedMessages: DEFAULT_TEST_MAX_NUMBER_OF_RETURNED_MESSAGES, - sendAckIntervalMs, - keepAliveDelayMs, - }); - - await wsOpen({ - clientNonce: client1Key.client_nonce, - canisterId, - clientActor: client1, - }, true); - - await sleep(sendAckIntervalMs); - - let res = await gateway1.ws_get_messages({ - nonce: BigInt(1), // skip the service open message - }); - let messagesResult = (res as { Ok: CanisterOutputCertifiedMessages }).Ok; - // the queue contains only the first ack message - expect(messagesResult.messages.length).toEqual(1); - let ackMessage = messagesResult.messages[0]; - expect(isClientKeyEq(ackMessage.client_key, client1Key)).toEqual(true); - let websocketMessage = getWebsocketMessageFromCanisterMessage(ackMessage); - expect(websocketMessage.is_service_message).toEqual(true); - expect(websocketMessage.sequence_num).toEqual(2); - let serviceMessageContent = decodeWebsocketServiceMessageContent(websocketMessage.content as Uint8Array); - expect(serviceMessageContent).toMatchObject({ - AckMessage: { - last_incoming_sequence_num: BigInt(0), - }, - }); - - // send the keep alive message - const keepAliveMessage: WebsocketServiceMessageContent = { - KeepAliveMessage: { - last_incoming_sequence_num: BigInt(1), // ignored in the CDK - }, - }; - await wsMessage({ - actor: client1, - message: createWebsocketMessage(client1Key, 1, encodeWebsocketServiceMessageContent(keepAliveMessage), true), - }, true); - - // wait for the canister to check if the client has sent the keep alive - await sleep(keepAliveDelayMs); - - // send a message to the canister to see the sequence number increasing in the ack message - // and be sure that the client can still send messages - await wsMessage({ - actor: client1, - message: createWebsocketMessage(client1Key, 2), - }, true); - - // wait to receive the next acknowledgement - await sleep(sendAckIntervalMs); - - res = await gateway1.ws_get_messages({ - nonce: BigInt(2), // skip the service open message and the first service ack message - }); - - messagesResult = (res as { Ok: CanisterOutputCertifiedMessages }).Ok; - // the fetched queue only contains the second ack message - expect(messagesResult.messages.length).toEqual(1); - ackMessage = messagesResult.messages[0]; - expect(isClientKeyEq(ackMessage.client_key, client1Key)).toEqual(true); - websocketMessage = getWebsocketMessageFromCanisterMessage(ackMessage); - expect(websocketMessage.is_service_message).toEqual(true); - expect(websocketMessage.sequence_num).toEqual(3); - serviceMessageContent = decodeWebsocketServiceMessageContent(websocketMessage.content as Uint8Array); - expect(serviceMessageContent).toMatchObject({ - AckMessage: { - last_incoming_sequence_num: BigInt(2), // as expected, the canister acks both the messages that we've sent - }, - }); - }); - - it("client is not removed if it connects while canister is waiting for keep alive", async () => { - const sendAckIntervalMs = 15_000; // 15 seconds - const keepAliveDelayMs = 10_000; // 10 seconds, to make sure the canister is waiting for keep alive when the client connects - await initializeCdk({ - maxNumberOfReturnedMessages: DEFAULT_TEST_MAX_NUMBER_OF_RETURNED_MESSAGES, - sendAckIntervalMs, - keepAliveDelayMs, - }); - - // make sure the canister is waiting for keep alive - await sleep(sendAckIntervalMs); - - await wsOpen({ - clientNonce: client1Key.client_nonce, - canisterId, - clientActor: client1, - }, true); - - let res = await gateway1.ws_get_messages({ - nonce: BigInt(1), // skip the service open message - }); - let messagesResult = (res as { Ok: CanisterOutputCertifiedMessages }).Ok; - expect(messagesResult.messages.length).toEqual(0); // client doesn't expect any other messages at this point - - // send a message to the canister to see the sequence number increasing in the ack message - // ad verify that the client is still connected to the canister - const wsMessageRes = await wsMessage({ - actor: client1, - message: createWebsocketMessage(client1Key, 1), - }); - expect(wsMessageRes).toMatchObject({ - Ok: null, - }); - - // wait to for the keep alive timeout to expire - await sleep(keepAliveDelayMs); - // wait for the canister to send the next ack - await sleep(sendAckIntervalMs - keepAliveDelayMs); - - res = await gateway1.ws_get_messages({ - nonce: BigInt(1), // skip the service open message - }); - - messagesResult = (res as { Ok: CanisterOutputCertifiedMessages }).Ok; - expect(messagesResult.messages.length).toEqual(1); - - const ackMessage = messagesResult.messages[0]; - expect(isClientKeyEq(ackMessage.client_key, client1Key)).toEqual(true); - const websocketMessage = getWebsocketMessageFromCanisterMessage(ackMessage); - expect(websocketMessage.is_service_message).toEqual(true); - expect(websocketMessage.sequence_num).toEqual(2); // first message is skipped and sequence number starts from 1 - const serviceMessageContent = decodeWebsocketServiceMessageContent(websocketMessage.content as Uint8Array); - expect(serviceMessageContent).toMatchObject({ - AckMessage: { - last_incoming_sequence_num: BigInt(1), - }, - }); - }) -}); diff --git a/tests/integration/utils/actors.ts b/tests/integration/utils/actors.ts deleted file mode 100644 index 18e3347..0000000 --- a/tests/integration/utils/actors.ts +++ /dev/null @@ -1,88 +0,0 @@ -import { Actor, ActorConfig, HttpAgent, HttpAgentOptions } from "@dfinity/agent"; -import { identityFromSeed } from "./identity"; -import { idlFactory } from "../../src/declarations/test_canister"; -import type { _SERVICE } from "../../src/declarations/test_canister/test_canister.did"; - -export const localReplicaHost = "http://127.0.0.1:4943"; - -const commonAgentOptions: HttpAgentOptions = { - host: localReplicaHost, -}; - -// needed in the certificates validation -export const commonAgent = new HttpAgent(commonAgentOptions); - -export const canisterId = - process.env.CANISTER_ID_TEST_CANISTER || - process.env.TEST_CANISTER_CANISTER_ID; - -export const createActor = (canisterId: string, options: { agentOptions?: HttpAgentOptions; actorOptions?: ActorConfig } = {}) => { - const agent = new HttpAgent({ - ...commonAgentOptions, - ...options.agentOptions, - }); - - // Fetch root key for certificate validation during development - if (process.env.DFX_NETWORK !== "ic") { - agent.fetchRootKey().catch((err) => { - console.warn( - "Unable to fetch root key. Check to ensure that your local replica is running" - ); - console.error(err); - }); - } - - // Creates an actor with using the candid interface and the HttpAgent - return Actor.createActor<_SERVICE>(idlFactory, { - agent, - canisterId, - ...options.actorOptions, - }); -}; - -// Principal: "i3gux-m3hwt-5mh2w-t7wwm-fwx5j-6z6ht-hxguo-t4rfw-qp24z-g5ivt-2qe" -// this is the gateway registered in the local replica when deploying the canister with npm run deploy:tests -const gateway1Seed = "harsh shy amazing enroll reject shy smooth abandon fat start mixture capable"; -export const gateway1Data = { - identity: identityFromSeed(gateway1Seed), -}; -export const gateway1 = createActor(canisterId, { - agentOptions: { - identity: gateway1Data.identity, - }, -}); - -// Principal: "trj6m-u7l6v-zilnb-2hl6a-3jfz3-asri5-mkw3k-e2tpo-5emmk-6hqxb-uae" -const gateway2Seed = "excess face evidence ecology gas van still noble grit night rubber boring"; -export const gateway2Data = { - identity: identityFromSeed(gateway2Seed), -}; -export const gateway2 = createActor(canisterId, { - agentOptions: { - identity: gateway2Data.identity, - }, -}); - -// Principal: "pmisz-prtlk-b6oe6-bj4fl-6l5fy-h7c2h-so6i7-jiz2h-bgto7-piqfr-7ae" -const client1Seed = "rabbit fun moral twin food kangaroo egg among adjust pottery measure seek"; -export const client1Data = { - identity: identityFromSeed(client1Seed), -}; -export const client1 = createActor(canisterId, { - agentOptions: { - identity: client1Data.identity, - }, -}); - -// Principal: "zuh6g-qnmvg-vky2t-tnob7-h4xoj-ykrcx-jqjpi-cdf3k-23i3i-ykozs-fae" -const client2Seed = "lamp myself priority trip trick drip process prize outside trophy lend common"; -export const client2Data = { - identity: identityFromSeed(client2Seed), -}; -export const client2 = createActor(canisterId, { - agentOptions: { - identity: client2Data.identity, - }, -}); - -export const anonymousClient = createActor(canisterId); diff --git a/tests/integration/utils/api.ts b/tests/integration/utils/api.ts deleted file mode 100644 index 469f138..0000000 --- a/tests/integration/utils/api.ts +++ /dev/null @@ -1,130 +0,0 @@ -// helpers for functions that are called frequently in tests - -import { ActorSubclass } from "@dfinity/agent"; -import { anonymousClient, gateway1Data } from "./actors"; -import { IDL } from "@dfinity/candid"; -import { extractApplicationMessageIdlFromActor } from "./idl"; -import type { AppMessage, CanisterOutputCertifiedMessages, ClientKey, ClientPrincipal, WebsocketMessage, _SERVICE } from "../../src/declarations/test_canister/test_canister.did"; - -type GenericResult = { - Ok: T, -} | { - Err: string, -}; - -const resolveResult = (result: GenericResult, throwIfError: boolean) => { - if (throwIfError && 'Err' in result) { - throw new Error(result.Err); - } - - return result; -}; - -type WsOpenArgs = { - clientNonce: bigint, - canisterId: string, - clientActor: ActorSubclass<_SERVICE>, -}; - -/** - * Sends an update call to the canister to the **ws_open** method, using the provided actor. - * @param args {@link WsOpenArgs} - * @param throwIfError whether to throw if the result is an error (defaults to `false`) - * @returns the result of the **ws_open** method - */ -export const wsOpen = async (args: WsOpenArgs, throwIfError = false) => { - const res = await args.clientActor.ws_open({ - client_nonce: args.clientNonce, - }); - - return resolveResult(res, throwIfError); -}; - -type WsMessageArgs = { - message: WebsocketMessage, - actor: ActorSubclass<_SERVICE>, -}; - -/** - * Sends an update call to the canister to the **ws_message** method, using the provided actor. - * @param args {@link WsMessageArgs} - * @param throwIfError whether to throw if the result is an error (defaults to `false`) - * @returns the result of the **ws_message** method - */ -export const wsMessage = async (args: WsMessageArgs, throwIfError = false) => { - const res = await args.actor.ws_message({ - msg: args.message, - }, []); - - return resolveResult(res, throwIfError); -}; - -type WsCloseArgs = { - clientKey: ClientKey, - gatewayActor: ActorSubclass<_SERVICE>, -}; - -/** - * Sends an update call to the canister to the **ws_close** method, using the provided gateway actor. - * @param args {@link WsCloseArgs} - * @param throwIfError whether to throw if the result is an error (defaults to `false`) - * @returns the result of the **ws_close** method - */ -export const wsClose = async (args: WsCloseArgs, throwIfError = false) => { - const res = await args.gatewayActor.ws_close({ - client_key: args.clientKey, - }); - - return resolveResult(res, throwIfError); -}; - -type WsGetMessagesArgs = { - fromNonce: number, - gatewayActor: ActorSubclass<_SERVICE>, -}; - -/** - * Sends a query call to the canister to the **ws_get_messages** method, using the provided gateway actor. - * @param args {@link WsGetMessagesArgs} - */ -export const wsGetMessages = async (args: WsGetMessagesArgs): Promise => { - const res = await args.gatewayActor.ws_get_messages({ - nonce: BigInt(args.fromNonce), - }); - - const messages = resolveResult(res, true); - - return (messages as { Ok: CanisterOutputCertifiedMessages }).Ok; -}; - -export const wsWipe = async () => { - await anonymousClient.ws_wipe(); -}; - -type InitializeCdkArgs = { - maxNumberOfReturnedMessages: number, - sendAckIntervalMs: number, - keepAliveDelayMs: number, -}; - -/** - * Used to initialize the CDK again with the provided parameters. - * @param args {@link InitializeCdkArgs} - */ -export const initializeCdk = async (args: InitializeCdkArgs) => { - const gatewayPrincipal = (await gateway1Data.identity).getPrincipal().toText(); - await anonymousClient.initialize(gatewayPrincipal, BigInt(args.maxNumberOfReturnedMessages), BigInt(args.sendAckIntervalMs), BigInt(args.keepAliveDelayMs)); -}; - -type WsSendArgs = { - clientPrincipal: ClientPrincipal, - actor: ActorSubclass<_SERVICE>, - messages: Array, -}; - -export const wsSend = async (args: WsSendArgs, throwIfError = false) => { - const messagesBytes = args.messages.map((msg) => IDL.encode([extractApplicationMessageIdlFromActor(args.actor)], [msg])).map((m) => new Uint8Array(m)); - const res = await args.actor.ws_send(args.clientPrincipal, messagesBytes); - - return resolveResult(res, throwIfError); -}; diff --git a/tests/integration/utils/client.ts b/tests/integration/utils/client.ts deleted file mode 100644 index 3c2ad8c..0000000 --- a/tests/integration/utils/client.ts +++ /dev/null @@ -1,5 +0,0 @@ -import type { ClientKey } from "../../src/declarations/test_canister/test_canister.did"; - -export const formatClientKey = (clientKey: ClientKey): string => { - return `${clientKey.client_principal.toText()}_${clientKey.client_nonce.toString()}`; -}; diff --git a/tests/integration/utils/helpers.ts b/tests/integration/utils/helpers.ts deleted file mode 100644 index 77366f9..0000000 --- a/tests/integration/utils/helpers.ts +++ /dev/null @@ -1,5 +0,0 @@ -/** - * Sleeps for the specified number of milliseconds. - * @param ms Number of milliseconds to sleep - */ -export const sleep = (ms: number) => new Promise((resolve) => setTimeout(resolve, ms)); diff --git a/tests/integration/utils/identity.ts b/tests/integration/utils/identity.ts deleted file mode 100644 index cfac2ee..0000000 --- a/tests/integration/utils/identity.ts +++ /dev/null @@ -1,16 +0,0 @@ -import { Secp256k1KeyIdentity } from "@dfinity/identity-secp256k1"; -import hdkey from "hdkey"; -import * as bip39 from "bip39"; - -export const identityFromSeed = async (phrase: string) => { - const seed = await bip39.mnemonicToSeed(phrase); - const root = hdkey.fromMasterSeed(seed); - const addrnode = root.derive("m/44'/223'/0'/0/0"); - - return Secp256k1KeyIdentity.generate(addrnode.privateKey); -}; - -export const generateRandomIdentity = async () => { - const mnemonic = bip39.generateMnemonic(); - return identityFromSeed(mnemonic); -}; diff --git a/tests/integration/utils/idl.ts b/tests/integration/utils/idl.ts deleted file mode 100644 index 8e18646..0000000 --- a/tests/integration/utils/idl.ts +++ /dev/null @@ -1,94 +0,0 @@ -import { IDL } from "@dfinity/candid"; -import { Actor, ActorSubclass, Cbor } from "@dfinity/agent"; -import type { CanisterOutputMessage, ClientKey, WebsocketMessage, _SERVICE } from "../../src/declarations/test_canister/test_canister.did"; - -export const ClientPrincipalIdl = IDL.Principal; -export const ClientKeyIdl = IDL.Record({ - 'client_principal': ClientPrincipalIdl, - 'client_nonce': IDL.Nat64, -}); - -export type CanisterOpenMessageContent = { - 'client_key': ClientKey, -}; -export type CanisterAckMessageContent = { - 'last_incoming_sequence_num': bigint, -}; -export type ClientKeepAliveMessageContent = { - 'last_incoming_sequence_num': bigint, -}; -export type WebsocketServiceMessageContent = { - OpenMessage: CanisterOpenMessageContent, -} | { - AckMessage: CanisterAckMessageContent, -} | { - KeepAliveMessage: ClientKeepAliveMessageContent, -}; - -export const CanisterOpenMessageContentIdl = IDL.Record({ - 'client_key': ClientKeyIdl, -}); -export const CanisterAckMessageContentIdl = IDL.Record({ - 'last_incoming_sequence_num': IDL.Nat64, -}); -export const ClientKeepAliveMessageContentIdl = IDL.Record({ - 'last_incoming_sequence_num': IDL.Nat64, -}); -export const WebsocketServiceMessageContentIdl = IDL.Variant({ - 'OpenMessage': CanisterOpenMessageContentIdl, - 'AckMessage': CanisterAckMessageContentIdl, - 'KeepAliveMessage': ClientKeepAliveMessageContentIdl, -}); - -export const decodeWebsocketServiceMessageContent = (bytes: Uint8Array): WebsocketServiceMessageContent => { - const decoded = IDL.decode([WebsocketServiceMessageContentIdl], bytes); - if (decoded.length !== 1) { - throw new Error("Invalid CanisterServiceMessage"); - } - return decoded[0] as unknown as WebsocketServiceMessageContent; -}; - -export const encodeWebsocketServiceMessageContent = (msg: WebsocketServiceMessageContent): Uint8Array => { - return new Uint8Array(IDL.encode([WebsocketServiceMessageContentIdl], [msg])); -}; - -export const isClientKeyEq = (a: ClientKey, b: ClientKey): boolean => { - return a.client_principal.compareTo(b.client_principal) === "eq" && a.client_nonce === b.client_nonce; -} - -export const getServiceMessageContentFromCanisterMessage = (msg: CanisterOutputMessage): WebsocketServiceMessageContent => { - const content = getWebsocketMessageFromCanisterMessage(msg).content; - return decodeWebsocketServiceMessageContent(content as Uint8Array); -} - -export const getWebsocketMessageFromCanisterMessage = (msg: CanisterOutputMessage): WebsocketMessage => { - const websocketMessage: WebsocketMessage = Cbor.decode(msg.content as Uint8Array); - return websocketMessage; -} - -/** - * Extracts the message type from the canister service definition. - * - * @throws {Error} if the canister does not implement the ws_message method - * @throws {Error} if the application message type is not optional - * - * COPIED from IC WebSocket JS SDK. - */ -export const extractApplicationMessageIdlFromActor = (actor: ActorSubclass<_SERVICE>): IDL.Type => { - const wsMessageMethod = Actor.interfaceOf(actor)._fields.find((f) => f[0] === "ws_message"); - - if (!wsMessageMethod) { - throw new Error("Canister does not implement ws_message method"); - } - - if (wsMessageMethod[1].argTypes.length !== 2) { - throw new Error("ws_message method must have 2 arguments"); - } - - const applicationMessageArg = wsMessageMethod[1].argTypes[1] as IDL.OptClass; - if (!(applicationMessageArg instanceof IDL.OptClass)) { - throw new Error("Application message type must be optional in the ws_message arguments"); - } - - return applicationMessageArg["_type"]; // extract the underlying option type -}; diff --git a/tests/integration/utils/messages.ts b/tests/integration/utils/messages.ts deleted file mode 100644 index f7fe0b3..0000000 --- a/tests/integration/utils/messages.ts +++ /dev/null @@ -1,109 +0,0 @@ -import { Cbor, Certificate, HashTree, HttpAgent, compare, lookup_path, reconstruct } from "@dfinity/agent"; -import { getWebsocketMessageFromCanisterMessage } from "./idl"; -import { Principal } from "@dfinity/principal"; -import { Secp256k1KeyIdentity } from "@dfinity/identity-secp256k1"; -import type { CanisterOutputMessage, ClientKey, WebsocketMessage } from "../../src/declarations/test_canister/test_canister.did"; - -export const filterServiceMessagesFromCanisterMessages = (messages: CanisterOutputMessage[]): CanisterOutputMessage[] => { - return messages.filter((msg) => { - const websocketMessage = getWebsocketMessageFromCanisterMessage(msg); - return websocketMessage.is_service_message; - }); -}; - -export const createWebsocketMessage = ( - clientKey: ClientKey, - sequenceNumber: number, - content?: ArrayBuffer | Uint8Array, - isServiceMessage = false, -): WebsocketMessage => { - const websocketMessage: WebsocketMessage = { - client_key: clientKey, - sequence_num: BigInt(sequenceNumber), - timestamp: BigInt(Date.now()) * BigInt(1_000_000), // in nanoseconds - content: new Uint8Array(content || []), - is_service_message: isServiceMessage, - }; - - return websocketMessage; -}; - -export const decodeWebsocketMessage = (bytes: Uint8Array): WebsocketMessage => { - const decoded: any = Cbor.decode(bytes); - - // normalize the decoded message - return { - client_key: { - client_principal: Principal.fromUint8Array(decoded.client_key.client_principal), - client_nonce: BigInt(decoded.client_key.client_nonce), - }, - sequence_num: BigInt(decoded.sequence_num), // not clear why cbor deserializes bigint as number - timestamp: BigInt(decoded.timestamp), - content: decoded.content, - is_service_message: decoded.is_service_message, - } -}; - -export const getPollingNonceFromMessage = (message: CanisterOutputMessage): number => { - const nonceStr = message.key.split("_")[1]; - return parseInt(nonceStr); -}; - -export const getNextPollingNonceFromMessages = (messages: CanisterOutputMessage[]): number => { - return getPollingNonceFromMessage(messages[messages.length - 1]) + 1; -}; - -export const getCertifiedMessageKey = async (gatewayIdentity: Promise, nonce: number) => { - const gatewayPrincipal = (await gatewayIdentity).getPrincipal().toText(); - return `${gatewayPrincipal}_${String(nonce).padStart(20, '0')}`; -}; - -export const isValidCertificate = async (canisterId: string, certificate: Uint8Array, tree: Uint8Array, agent: HttpAgent) => { - const canisterPrincipal = Principal.fromText(canisterId); - let cert: Certificate; - - if (!agent["_rootKeyFetched"]) { - await agent.fetchRootKey(); - } - - try { - cert = await Certificate.create({ - certificate, - canisterId: canisterPrincipal, - rootKey: agent.rootKey! - }); - } catch (error) { - console.error("Error creating certificate:", error); - return false; - } - - const hashTree = Cbor.decode(tree); - const reconstructed = await reconstruct(hashTree); - const witness = cert.lookup([ - "canister", - canisterPrincipal.toUint8Array(), - "certified_data" - ]); - - if (!witness) { - throw new Error( - "Could not find certified data for this canister in the certificate." - ); - } - - // First validate that the Tree is as good as the certification. - return compare(witness, reconstructed) === 0; -}; - -export const isMessageBodyValid = async (path: string, body: Uint8Array | ArrayBuffer, tree: Uint8Array) => { - const hashTree = Cbor.decode(tree); - const sha = await crypto.subtle.digest("SHA-256", body); - let treeSha = lookup_path(["websocket", path], hashTree); - - if (!treeSha) { - // Allow fallback to index path. - treeSha = lookup_path(["websocket"], hashTree); - } - - return !!treeSha && (compare(sha, treeSha) === 0); -}; diff --git a/tests/integration/utils/random.ts b/tests/integration/utils/random.ts deleted file mode 100644 index d5ce012..0000000 --- a/tests/integration/utils/random.ts +++ /dev/null @@ -1,20 +0,0 @@ -import { generateRandomIdentity } from "./identity"; -import type { ClientKey, ClientPrincipal } from "../../src/declarations/test_canister/test_canister.did"; - -export const getRandomClientNonce = (): bigint => { - const array = new BigUint64Array(1); - globalThis.crypto.getRandomValues(array); - return array[0]; -}; - -export const generateClientKey = (clientPrincipal: ClientPrincipal): ClientKey => { - return { - client_principal: clientPrincipal, - client_nonce: getRandomClientNonce(), - }; -}; - -export const getRandomPrincipal = async (): Promise => { - const identity = await generateRandomIdentity(); - return identity.getPrincipal(); -}; diff --git a/tests/jest.config.ts b/tests/jest.config.ts deleted file mode 100644 index c1a13cb..0000000 --- a/tests/jest.config.ts +++ /dev/null @@ -1,204 +0,0 @@ -/** - * For a detailed explanation regarding each configuration property, visit: - * https://jestjs.io/docs/configuration - */ - -import type { Config } from 'jest'; - -const config: Config = { - // All imported modules in your tests should be mocked automatically - // automock: false, - - // Stop running tests after `n` failures - // bail: 0, - - // The directory where Jest should store its cached dependency information - // cacheDirectory: "/tmp/jest_rs", - - // Automatically clear mock calls, instances, contexts and results before every test - // clearMocks: false, - - // Indicates whether the coverage information should be collected while executing the test - // collectCoverage: false, - - // An array of glob patterns indicating a set of files for which coverage information should be collected - // collectCoverageFrom: undefined, - - // The directory where Jest should output its coverage files - // coverageDirectory: undefined, - - // An array of regexp pattern strings used to skip coverage collection - // coveragePathIgnorePatterns: [ - // "/node_modules/" - // ], - - // Indicates which provider should be used to instrument code for coverage - // coverageProvider: "babel", - - // A list of reporter names that Jest uses when writing coverage reports - // coverageReporters: [ - // "json", - // "text", - // "lcov", - // "clover" - // ], - - // An object that configures minimum threshold enforcement for coverage results - // coverageThreshold: undefined, - - // A path to a custom dependency extractor - // dependencyExtractor: undefined, - - // Make calling deprecated APIs throw helpful error messages - // errorOnDeprecated: false, - - // The default configuration for fake timers - // fakeTimers: { - // "enableGlobally": false - // }, - - // Force coverage collection from ignored files using an array of glob patterns - // forceCoverageMatch: [], - - // A path to a module which exports an async function that is triggered once before all test suites - // globalSetup: undefined, - - // A path to a module which exports an async function that is triggered once after all test suites - // globalTeardown: undefined, - - // A set of global variables that need to be available in all test environments - // globals: {}, - - // The maximum amount of workers used to run your tests. Can be specified as % or a number. E.g. maxWorkers: 10% will use 10% of your CPU amount + 1 as the maximum worker number. maxWorkers: 2 will use a maximum of 2 workers. - // maxWorkers: "50%", - - // An array of directory names to be searched recursively up from the requiring module's location - // moduleDirectories: [ - // "node_modules" - // ], - - // An array of file extensions your modules use - // moduleFileExtensions: [ - // "js", - // "mjs", - // "cjs", - // "jsx", - // "ts", - // "tsx", - // "json", - // "node" - // ], - - // A map from regular expressions to module names or to arrays of module names that allow to stub out resources with a single module - // moduleNameMapper: {}, - - // An array of regexp pattern strings, matched against all module paths before considered 'visible' to the module loader - // modulePathIgnorePatterns: [], - - // Activates notifications for test results - // notify: false, - - // An enum that specifies notification mode. Requires { notify: true } - // notifyMode: "failure-change", - - // A preset that is used as a base for Jest's configuration - preset: 'ts-jest', - - // Run tests from one or more projects - // projects: undefined, - - // Use this configuration option to add custom reporters to Jest - // reporters: undefined, - - // Automatically reset mock state before every test - // resetMocks: false, - - // Reset the module registry before running each individual test - // resetModules: false, - - // A path to a custom resolver - // resolver: undefined, - - // Automatically restore mock state and implementation before every test - // restoreMocks: false, - - // The root directory that Jest should scan for tests and modules within - // rootDir: undefined, - - // A list of paths to directories that Jest should use to search for files in - // roots: [ - // "" - // ], - - // Allows you to use a custom runner instead of Jest's default test runner - // runner: "jest-runner", - - // The paths to modules that run some code to configure or set up the testing environment before each test - setupFiles: [ - "dotenv/config", - "./jest.setup.ts", - ], - - // A list of paths to modules that run some code to configure or set up the testing framework before each test - // setupFilesAfterEnv: [], - - // The number of seconds after which a test is considered as slow and reported as such in the results. - // slowTestThreshold: 5, - - // A list of paths to snapshot serializer modules Jest should use for snapshot testing - // snapshotSerializers: [], - - // The test environment that will be used for testing - testEnvironment: "node", - - // Options that will be passed to the testEnvironment - // testEnvironmentOptions: { - // url: "http://127.0.0.1:4943", - // }, - - // Adds a location field to test results - // testLocationInResults: false, - - // The glob patterns Jest uses to detect test files - // testMatch: [ - // "**/__tests__/**/*.[jt]s?(x)", - // "**/?(*.)+(spec|test).[tj]s?(x)" - // ], - - // An array of regexp pattern strings that are matched against all test paths, matched tests are skipped - // testPathIgnorePatterns: [ - // "/node_modules/" - // ], - - // The regexp pattern or array of patterns that Jest uses to detect test files - // testRegex: [], - - // This option allows the use of a custom results processor - // testResultsProcessor: undefined, - - // This option allows use of a custom test runner - // testRunner: "jest-circus/runner", - - // A map from regular expressions to paths to transformers - transform: { - "^.+\\.(ts|tsx)$": "ts-jest", - "^.+\\.(js)$": "babel-jest", - }, - - // An array of regexp pattern strings that are matched against all source file paths, matched files will skip transformation - transformIgnorePatterns: [], - - // An array of regexp pattern strings that are matched against all modules before the module loader will automatically return a mock for them - // unmockedModulePathPatterns: undefined, - - // Indicates whether each individual test should be reported during the run - // verbose: undefined, - - // An array of regexp patterns that are matched against all source file paths before re-running tests in watch mode - // watchPathIgnorePatterns: [], - - // Whether to use watchman for file crawling - // watchman: true, -}; - -export default config; diff --git a/tests/jest.setup.ts b/tests/jest.setup.ts deleted file mode 100644 index 18722e3..0000000 --- a/tests/jest.setup.ts +++ /dev/null @@ -1,10 +0,0 @@ -import "isomorphic-fetch"; -import crypto from "isomorphic-webcrypto"; - -// for nodejs environment -Object.defineProperty(globalThis, 'crypto', { - value: { - getRandomValues: crypto.getRandomValues, - subtle: crypto.subtle, - } -}); diff --git a/tests/package-lock.json b/tests/package-lock.json deleted file mode 100644 index e69ed7a..0000000 --- a/tests/package-lock.json +++ /dev/null @@ -1,24772 +0,0 @@ -{ - "name": "ic_websocket_cdk_rs", - "version": "0.1.0", - "lockfileVersion": 2, - "requires": true, - "packages": { - "": { - "name": "ic_websocket_cdk_rs", - "version": "0.1.0", - "devDependencies": { - "@babel/preset-env": "^7.22.9", - "@babel/preset-typescript": "^7.22.5", - "@dfinity/agent": "^0.19.2", - "@dfinity/candid": "^0.19.2", - "@dfinity/identity-secp256k1": "^0.19.2", - "@dfinity/principal": "^0.19.2", - "@types/hdkey": "^2.0.1", - "@types/jest": "^29.5.3", - "assert": "2.0.0", - "babel-jest": "^29.6.1", - "bip39": "^3.0.4", - "buffer": "6.0.3", - "dotenv": "^16.3.1", - "events": "3.3.0", - "hdkey": "^2.1.0", - "isomorphic-fetch": "^3.0.0", - "isomorphic-webcrypto": "^2.3.8", - "jest": "^29.6.1", - "process": "0.11.10", - "stream-browserify": "3.0.0", - "ts-jest": "^29.1.1", - "tweetnacl": "^1.0.3", - "util": "0.12.4" - }, - "engines": { - "node": "^14 || ^16 || ^18" - } - }, - "node_modules/@ampproject/remapping": { - "version": "2.2.1", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@jridgewell/gen-mapping": "^0.3.0", - "@jridgewell/trace-mapping": "^0.3.9" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@babel/code-frame": { - "version": "7.22.5", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/highlight": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/compat-data": { - "version": "7.22.9", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/core": { - "version": "7.22.9", - "dev": true, - "license": "MIT", - "dependencies": { - "@ampproject/remapping": "^2.2.0", - "@babel/code-frame": "^7.22.5", - "@babel/generator": "^7.22.9", - "@babel/helper-compilation-targets": "^7.22.9", - "@babel/helper-module-transforms": "^7.22.9", - "@babel/helpers": "^7.22.6", - "@babel/parser": "^7.22.7", - "@babel/template": "^7.22.5", - "@babel/traverse": "^7.22.8", - "@babel/types": "^7.22.5", - "convert-source-map": "^1.7.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.2", - "json5": "^2.2.2", - "semver": "^6.3.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/babel" - } - }, - "node_modules/@babel/core/node_modules/convert-source-map": { - "version": "1.9.0", - "dev": true, - "license": "MIT" - }, - "node_modules/@babel/generator": { - "version": "7.22.9", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/types": "^7.22.5", - "@jridgewell/gen-mapping": "^0.3.2", - "@jridgewell/trace-mapping": "^0.3.17", - "jsesc": "^2.5.1" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-annotate-as-pure": { - "version": "7.22.5", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-builder-binary-assignment-operator-visitor": { - "version": "7.22.5", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-compilation-targets": { - "version": "7.22.9", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/compat-data": "^7.22.9", - "@babel/helper-validator-option": "^7.22.5", - "browserslist": "^4.21.9", - "lru-cache": "^5.1.1", - "semver": "^6.3.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-create-class-features-plugin": { - "version": "7.22.9", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.22.5", - "@babel/helper-environment-visitor": "^7.22.5", - "@babel/helper-function-name": "^7.22.5", - "@babel/helper-member-expression-to-functions": "^7.22.5", - "@babel/helper-optimise-call-expression": "^7.22.5", - "@babel/helper-replace-supers": "^7.22.9", - "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", - "@babel/helper-split-export-declaration": "^7.22.6", - "semver": "^6.3.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-create-regexp-features-plugin": { - "version": "7.22.9", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.22.5", - "regexpu-core": "^5.3.1", - "semver": "^6.3.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-define-polyfill-provider": { - "version": "0.4.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-compilation-targets": "^7.22.6", - "@babel/helper-plugin-utils": "^7.22.5", - "debug": "^4.1.1", - "lodash.debounce": "^4.0.8", - "resolve": "^1.14.2" - }, - "peerDependencies": { - "@babel/core": "^7.4.0-0" - } - }, - "node_modules/@babel/helper-environment-visitor": { - "version": "7.22.5", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-function-name": { - "version": "7.22.5", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/template": "^7.22.5", - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-hoist-variables": { - "version": "7.22.5", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-member-expression-to-functions": { - "version": "7.22.5", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-module-imports": { - "version": "7.22.5", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-module-transforms": { - "version": "7.22.9", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-environment-visitor": "^7.22.5", - "@babel/helper-module-imports": "^7.22.5", - "@babel/helper-simple-access": "^7.22.5", - "@babel/helper-split-export-declaration": "^7.22.6", - "@babel/helper-validator-identifier": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-optimise-call-expression": { - "version": "7.22.5", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-plugin-utils": { - "version": "7.22.5", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-remap-async-to-generator": { - "version": "7.22.9", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.22.5", - "@babel/helper-environment-visitor": "^7.22.5", - "@babel/helper-wrap-function": "^7.22.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-replace-supers": { - "version": "7.22.9", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-environment-visitor": "^7.22.5", - "@babel/helper-member-expression-to-functions": "^7.22.5", - "@babel/helper-optimise-call-expression": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-simple-access": { - "version": "7.22.5", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-skip-transparent-expression-wrappers": { - "version": "7.22.5", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-split-export-declaration": { - "version": "7.22.6", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-string-parser": { - "version": "7.22.5", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-validator-identifier": { - "version": "7.22.5", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-validator-option": { - "version": "7.22.5", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-wrap-function": { - "version": "7.22.9", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-function-name": "^7.22.5", - "@babel/template": "^7.22.5", - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helpers": { - "version": "7.22.6", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/template": "^7.22.5", - "@babel/traverse": "^7.22.6", - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/highlight": { - "version": "7.22.5", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-validator-identifier": "^7.22.5", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/highlight/node_modules/ansi-styles": { - "version": "3.2.1", - "dev": true, - "license": "MIT", - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/highlight/node_modules/chalk": { - "version": "2.4.2", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/highlight/node_modules/color-convert": { - "version": "1.9.3", - "dev": true, - "license": "MIT", - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/@babel/highlight/node_modules/color-name": { - "version": "1.1.3", - "dev": true, - "license": "MIT" - }, - "node_modules/@babel/highlight/node_modules/escape-string-regexp": { - "version": "1.0.5", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/@babel/highlight/node_modules/has-flag": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/highlight/node_modules/supports-color": { - "version": "5.5.0", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/parser": { - "version": "7.22.7", - "dev": true, - "license": "MIT", - "bin": { - "parser": "bin/babel-parser.js" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { - "version": "7.22.5", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { - "version": "7.22.5", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", - "@babel/plugin-transform-optional-chaining": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.13.0" - } - }, - "node_modules/@babel/plugin-proposal-async-generator-functions": { - "version": "7.20.7", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/helper-remap-async-to-generator": "^7.18.9", - "@babel/plugin-syntax-async-generators": "^7.8.4" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-class-properties": { - "version": "7.18.6", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-decorators": { - "version": "7.22.7", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.22.6", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-replace-supers": "^7.22.5", - "@babel/helper-split-export-declaration": "^7.22.6", - "@babel/plugin-syntax-decorators": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-export-default-from": { - "version": "7.22.5", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-export-default-from": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-export-namespace-from": { - "version": "7.18.9", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.9", - "@babel/plugin-syntax-export-namespace-from": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-nullish-coalescing-operator": { - "version": "7.18.6", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-numeric-separator": { - "version": "7.18.6", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/plugin-syntax-numeric-separator": "^7.10.4" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-object-rest-spread": { - "version": "7.20.7", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "@babel/compat-data": "^7.20.5", - "@babel/helper-compilation-targets": "^7.20.7", - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-transform-parameters": "^7.20.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-optional-catch-binding": { - "version": "7.18.6", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-optional-chaining": { - "version": "7.21.0", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/helper-skip-transparent-expression-wrappers": "^7.20.0", - "@babel/plugin-syntax-optional-chaining": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-private-property-in-object": { - "version": "7.21.0-placeholder-for-preset-env.2", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-unicode-property-regex": { - "version": "7.18.6", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-async-generators": { - "version": "7.8.4", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-bigint": { - "version": "7.8.3", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-class-properties": { - "version": "7.12.13", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.12.13" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-class-static-block": { - "version": "7.14.5", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-decorators": { - "version": "7.22.5", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-dynamic-import": { - "version": "7.8.3", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-export-default-from": { - "version": "7.22.5", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-export-namespace-from": { - "version": "7.8.3", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.3" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-flow": { - "version": "7.22.5", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-import-assertions": { - "version": "7.22.5", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-import-attributes": { - "version": "7.22.5", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-import-meta": { - "version": "7.10.4", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-json-strings": { - "version": "7.8.3", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-jsx": { - "version": "7.22.5", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-logical-assignment-operators": { - "version": "7.10.4", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-nullish-coalescing-operator": { - "version": "7.8.3", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-numeric-separator": { - "version": "7.10.4", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-object-rest-spread": { - "version": "7.8.3", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-optional-catch-binding": { - "version": "7.8.3", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-optional-chaining": { - "version": "7.8.3", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-private-property-in-object": { - "version": "7.14.5", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-top-level-await": { - "version": "7.14.5", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-typescript": { - "version": "7.22.5", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-unicode-sets-regex": { - "version": "7.18.6", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/plugin-transform-arrow-functions": { - "version": "7.22.5", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-async-generator-functions": { - "version": "7.22.7", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-environment-visitor": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-remap-async-to-generator": "^7.22.5", - "@babel/plugin-syntax-async-generators": "^7.8.4" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-async-to-generator": { - "version": "7.22.5", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-module-imports": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-remap-async-to-generator": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-block-scoped-functions": { - "version": "7.22.5", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-block-scoping": { - "version": "7.22.5", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-class-properties": { - "version": "7.22.5", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-class-static-block": { - "version": "7.22.5", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-class-static-block": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.12.0" - } - }, - "node_modules/@babel/plugin-transform-classes": { - "version": "7.22.6", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.22.5", - "@babel/helper-compilation-targets": "^7.22.6", - "@babel/helper-environment-visitor": "^7.22.5", - "@babel/helper-function-name": "^7.22.5", - "@babel/helper-optimise-call-expression": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-replace-supers": "^7.22.5", - "@babel/helper-split-export-declaration": "^7.22.6", - "globals": "^11.1.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-computed-properties": { - "version": "7.22.5", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/template": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-destructuring": { - "version": "7.22.5", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-dotall-regex": { - "version": "7.22.5", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-duplicate-keys": { - "version": "7.22.5", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-dynamic-import": { - "version": "7.22.5", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-dynamic-import": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-exponentiation-operator": { - "version": "7.22.5", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-builder-binary-assignment-operator-visitor": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-export-namespace-from": { - "version": "7.22.5", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-export-namespace-from": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-flow-strip-types": { - "version": "7.22.5", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-flow": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-for-of": { - "version": "7.22.5", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-function-name": { - "version": "7.22.5", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-compilation-targets": "^7.22.5", - "@babel/helper-function-name": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-json-strings": { - "version": "7.22.5", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-json-strings": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-literals": { - "version": "7.22.5", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-logical-assignment-operators": { - "version": "7.22.5", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-member-expression-literals": { - "version": "7.22.5", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-modules-amd": { - "version": "7.22.5", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-module-transforms": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-modules-commonjs": { - "version": "7.22.5", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-module-transforms": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-simple-access": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-modules-systemjs": { - "version": "7.22.5", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-hoist-variables": "^7.22.5", - "@babel/helper-module-transforms": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-validator-identifier": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-modules-umd": { - "version": "7.22.5", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-module-transforms": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-named-capturing-groups-regex": { - "version": "7.22.5", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/plugin-transform-new-target": { - "version": "7.22.5", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-nullish-coalescing-operator": { - "version": "7.22.5", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-numeric-separator": { - "version": "7.22.5", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-numeric-separator": "^7.10.4" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-object-rest-spread": { - "version": "7.22.5", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/compat-data": "^7.22.5", - "@babel/helper-compilation-targets": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-transform-parameters": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-object-super": { - "version": "7.22.5", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-replace-supers": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-optional-catch-binding": { - "version": "7.22.5", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-optional-chaining": { - "version": "7.22.6", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", - "@babel/plugin-syntax-optional-chaining": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-parameters": { - "version": "7.22.5", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-private-methods": { - "version": "7.22.5", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-private-property-in-object": { - "version": "7.22.5", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.22.5", - "@babel/helper-create-class-features-plugin": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-private-property-in-object": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-property-literals": { - "version": "7.22.5", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-react-display-name": { - "version": "7.22.5", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-react-jsx": { - "version": "7.22.5", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.22.5", - "@babel/helper-module-imports": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-jsx": "^7.22.5", - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-react-jsx-self": { - "version": "7.22.5", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-react-jsx-source": { - "version": "7.22.5", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-regenerator": { - "version": "7.22.5", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "regenerator-transform": "^0.15.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-reserved-words": { - "version": "7.22.5", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-runtime": { - "version": "7.22.9", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "@babel/helper-module-imports": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5", - "babel-plugin-polyfill-corejs2": "^0.4.4", - "babel-plugin-polyfill-corejs3": "^0.8.2", - "babel-plugin-polyfill-regenerator": "^0.5.1", - "semver": "^6.3.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-shorthand-properties": { - "version": "7.22.5", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-spread": { - "version": "7.22.5", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-sticky-regex": { - "version": "7.22.5", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-template-literals": { - "version": "7.22.5", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-typeof-symbol": { - "version": "7.22.5", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-typescript": { - "version": "7.22.9", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.22.5", - "@babel/helper-create-class-features-plugin": "^7.22.9", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-typescript": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-unicode-escapes": { - "version": "7.22.5", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-unicode-property-regex": { - "version": "7.22.5", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-unicode-regex": { - "version": "7.22.5", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-unicode-sets-regex": { - "version": "7.22.5", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/preset-env": { - "version": "7.22.9", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/compat-data": "^7.22.9", - "@babel/helper-compilation-targets": "^7.22.9", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-validator-option": "^7.22.5", - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.22.5", - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.22.5", - "@babel/plugin-proposal-private-property-in-object": "7.21.0-placeholder-for-preset-env.2", - "@babel/plugin-syntax-async-generators": "^7.8.4", - "@babel/plugin-syntax-class-properties": "^7.12.13", - "@babel/plugin-syntax-class-static-block": "^7.14.5", - "@babel/plugin-syntax-dynamic-import": "^7.8.3", - "@babel/plugin-syntax-export-namespace-from": "^7.8.3", - "@babel/plugin-syntax-import-assertions": "^7.22.5", - "@babel/plugin-syntax-import-attributes": "^7.22.5", - "@babel/plugin-syntax-import-meta": "^7.10.4", - "@babel/plugin-syntax-json-strings": "^7.8.3", - "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", - "@babel/plugin-syntax-numeric-separator": "^7.10.4", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", - "@babel/plugin-syntax-optional-chaining": "^7.8.3", - "@babel/plugin-syntax-private-property-in-object": "^7.14.5", - "@babel/plugin-syntax-top-level-await": "^7.14.5", - "@babel/plugin-syntax-unicode-sets-regex": "^7.18.6", - "@babel/plugin-transform-arrow-functions": "^7.22.5", - "@babel/plugin-transform-async-generator-functions": "^7.22.7", - "@babel/plugin-transform-async-to-generator": "^7.22.5", - "@babel/plugin-transform-block-scoped-functions": "^7.22.5", - "@babel/plugin-transform-block-scoping": "^7.22.5", - "@babel/plugin-transform-class-properties": "^7.22.5", - "@babel/plugin-transform-class-static-block": "^7.22.5", - "@babel/plugin-transform-classes": "^7.22.6", - "@babel/plugin-transform-computed-properties": "^7.22.5", - "@babel/plugin-transform-destructuring": "^7.22.5", - "@babel/plugin-transform-dotall-regex": "^7.22.5", - "@babel/plugin-transform-duplicate-keys": "^7.22.5", - "@babel/plugin-transform-dynamic-import": "^7.22.5", - "@babel/plugin-transform-exponentiation-operator": "^7.22.5", - "@babel/plugin-transform-export-namespace-from": "^7.22.5", - "@babel/plugin-transform-for-of": "^7.22.5", - "@babel/plugin-transform-function-name": "^7.22.5", - "@babel/plugin-transform-json-strings": "^7.22.5", - "@babel/plugin-transform-literals": "^7.22.5", - "@babel/plugin-transform-logical-assignment-operators": "^7.22.5", - "@babel/plugin-transform-member-expression-literals": "^7.22.5", - "@babel/plugin-transform-modules-amd": "^7.22.5", - "@babel/plugin-transform-modules-commonjs": "^7.22.5", - "@babel/plugin-transform-modules-systemjs": "^7.22.5", - "@babel/plugin-transform-modules-umd": "^7.22.5", - "@babel/plugin-transform-named-capturing-groups-regex": "^7.22.5", - "@babel/plugin-transform-new-target": "^7.22.5", - "@babel/plugin-transform-nullish-coalescing-operator": "^7.22.5", - "@babel/plugin-transform-numeric-separator": "^7.22.5", - "@babel/plugin-transform-object-rest-spread": "^7.22.5", - "@babel/plugin-transform-object-super": "^7.22.5", - "@babel/plugin-transform-optional-catch-binding": "^7.22.5", - "@babel/plugin-transform-optional-chaining": "^7.22.6", - "@babel/plugin-transform-parameters": "^7.22.5", - "@babel/plugin-transform-private-methods": "^7.22.5", - "@babel/plugin-transform-private-property-in-object": "^7.22.5", - "@babel/plugin-transform-property-literals": "^7.22.5", - "@babel/plugin-transform-regenerator": "^7.22.5", - "@babel/plugin-transform-reserved-words": "^7.22.5", - "@babel/plugin-transform-shorthand-properties": "^7.22.5", - "@babel/plugin-transform-spread": "^7.22.5", - "@babel/plugin-transform-sticky-regex": "^7.22.5", - "@babel/plugin-transform-template-literals": "^7.22.5", - "@babel/plugin-transform-typeof-symbol": "^7.22.5", - "@babel/plugin-transform-unicode-escapes": "^7.22.5", - "@babel/plugin-transform-unicode-property-regex": "^7.22.5", - "@babel/plugin-transform-unicode-regex": "^7.22.5", - "@babel/plugin-transform-unicode-sets-regex": "^7.22.5", - "@babel/preset-modules": "^0.1.5", - "@babel/types": "^7.22.5", - "babel-plugin-polyfill-corejs2": "^0.4.4", - "babel-plugin-polyfill-corejs3": "^0.8.2", - "babel-plugin-polyfill-regenerator": "^0.5.1", - "core-js-compat": "^3.31.0", - "semver": "^6.3.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/preset-flow": { - "version": "7.22.5", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-validator-option": "^7.22.5", - "@babel/plugin-transform-flow-strip-types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/preset-modules": { - "version": "0.1.5", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/plugin-proposal-unicode-property-regex": "^7.4.4", - "@babel/plugin-transform-dotall-regex": "^7.4.4", - "@babel/types": "^7.4.4", - "esutils": "^2.0.2" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/preset-typescript": { - "version": "7.22.5", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-validator-option": "^7.22.5", - "@babel/plugin-syntax-jsx": "^7.22.5", - "@babel/plugin-transform-modules-commonjs": "^7.22.5", - "@babel/plugin-transform-typescript": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/register": { - "version": "7.22.5", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "clone-deep": "^4.0.1", - "find-cache-dir": "^2.0.0", - "make-dir": "^2.1.0", - "pirates": "^4.0.5", - "source-map-support": "^0.5.16" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/register/node_modules/make-dir": { - "version": "2.1.0", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "pify": "^4.0.1", - "semver": "^5.6.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/@babel/register/node_modules/semver": { - "version": "5.7.2", - "dev": true, - "license": "ISC", - "optional": true, - "peer": true, - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/@babel/register/node_modules/source-map-support": { - "version": "0.5.21", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } - }, - "node_modules/@babel/regjsgen": { - "version": "0.8.0", - "dev": true, - "license": "MIT" - }, - "node_modules/@babel/runtime": { - "version": "7.22.6", - "dev": true, - "license": "MIT", - "dependencies": { - "regenerator-runtime": "^0.13.11" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/template": { - "version": "7.22.5", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/code-frame": "^7.22.5", - "@babel/parser": "^7.22.5", - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/traverse": { - "version": "7.22.8", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/code-frame": "^7.22.5", - "@babel/generator": "^7.22.7", - "@babel/helper-environment-visitor": "^7.22.5", - "@babel/helper-function-name": "^7.22.5", - "@babel/helper-hoist-variables": "^7.22.5", - "@babel/helper-split-export-declaration": "^7.22.6", - "@babel/parser": "^7.22.7", - "@babel/types": "^7.22.5", - "debug": "^4.1.0", - "globals": "^11.1.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/types": { - "version": "7.22.5", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-string-parser": "^7.22.5", - "@babel/helper-validator-identifier": "^7.22.5", - "to-fast-properties": "^2.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@bcoe/v8-coverage": { - "version": "0.2.3", - "dev": true, - "license": "MIT" - }, - "node_modules/@cspotcode/source-map-support": { - "version": "0.8.1", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "@jridgewell/trace-mapping": "0.3.9" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/@cspotcode/source-map-support/node_modules/@jridgewell/trace-mapping": { - "version": "0.3.9", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "@jridgewell/resolve-uri": "^3.0.3", - "@jridgewell/sourcemap-codec": "^1.4.10" - } - }, - "node_modules/@dfinity/agent": { - "version": "0.19.2", - "resolved": "https://registry.npmjs.org/@dfinity/agent/-/agent-0.19.2.tgz", - "integrity": "sha512-KLRWEjeU9SyyaS7IBVJ9ZUcufxufr55e/kRIyClK157+0pkTG9a8xKjUIMx3QzKvLsqqzXL238nWwdoP6jAD8g==", - "dev": true, - "dependencies": { - "@noble/hashes": "^1.3.1", - "base64-arraybuffer": "^0.2.0", - "borc": "^2.1.1", - "simple-cbor": "^0.4.1" - }, - "peerDependencies": { - "@dfinity/candid": "^0.19.2", - "@dfinity/principal": "^0.19.2" - } - }, - "node_modules/@dfinity/candid": { - "version": "0.19.2", - "resolved": "https://registry.npmjs.org/@dfinity/candid/-/candid-0.19.2.tgz", - "integrity": "sha512-X2hCqNMhnnmwtnOc0WnymOZYx3qphjEMuSYbBr7tMIkV7Hwt9BmXXlLnQTxUytTPxf+3he0GcS3KzsSQ9CK8ew==", - "dev": true, - "peerDependencies": { - "@dfinity/principal": "^0.19.2" - } - }, - "node_modules/@dfinity/identity-secp256k1": { - "version": "0.19.2", - "resolved": "https://registry.npmjs.org/@dfinity/identity-secp256k1/-/identity-secp256k1-0.19.2.tgz", - "integrity": "sha512-rzkmNE9n1XWicjt9R4kw3gpZimoalIoR5TLbXPaBILUvNNO7aGZ6Cz5bvrq8HI14yETkxAXNL5rjGwAtoFqAhQ==", - "dev": true, - "dependencies": { - "@dfinity/agent": "^0.19.2", - "@noble/hashes": "^1.3.1", - "bip39": "^3.0.4", - "bs58check": "^2.1.2", - "secp256k1": "^4.0.3" - } - }, - "node_modules/@dfinity/principal": { - "version": "0.19.2", - "resolved": "https://registry.npmjs.org/@dfinity/principal/-/principal-0.19.2.tgz", - "integrity": "sha512-vsKN6BKya70bQUsjgKRDlR2lOpv/XpUkCMIiji6rjMtKHIuWEB5Eu3JqZsOuBmWo3A3TT/K/osT9VPm0k4qdYQ==", - "dev": true, - "dependencies": { - "@noble/hashes": "^1.3.1" - } - }, - "node_modules/@expo/bunyan": { - "version": "4.0.0", - "dev": true, - "engines": [ - "node >=0.10.0" - ], - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "uuid": "^8.0.0" - }, - "optionalDependencies": { - "mv": "~2", - "safe-json-stringify": "~1" - } - }, - "node_modules/@expo/bunyan/node_modules/uuid": { - "version": "8.3.2", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "bin": { - "uuid": "dist/bin/uuid" - } - }, - "node_modules/@expo/cli": { - "version": "0.10.11", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "@babel/runtime": "^7.20.0", - "@expo/code-signing-certificates": "0.0.5", - "@expo/config": "~8.1.0", - "@expo/config-plugins": "~7.2.0", - "@expo/dev-server": "0.5.5", - "@expo/devcert": "^1.0.0", - "@expo/env": "0.0.5", - "@expo/json-file": "^8.2.37", - "@expo/metro-config": "~0.10.0", - "@expo/osascript": "^2.0.31", - "@expo/package-manager": "~1.0.0", - "@expo/plist": "^0.0.20", - "@expo/prebuild-config": "6.2.6", - "@expo/rudder-sdk-node": "1.1.1", - "@expo/spawn-async": "1.5.0", - "@expo/xcpretty": "^4.2.1", - "@urql/core": "2.3.6", - "@urql/exchange-retry": "0.3.0", - "accepts": "^1.3.8", - "arg": "4.1.0", - "better-opn": "~3.0.2", - "bplist-parser": "^0.3.1", - "cacache": "^15.3.0", - "chalk": "^4.0.0", - "ci-info": "^3.3.0", - "debug": "^4.3.4", - "env-editor": "^0.4.1", - "form-data": "^3.0.1", - "freeport-async": "2.0.0", - "fs-extra": "~8.1.0", - "getenv": "^1.0.0", - "graphql": "15.8.0", - "graphql-tag": "^2.10.1", - "https-proxy-agent": "^5.0.1", - "internal-ip": "4.3.0", - "is-root": "^2.1.0", - "js-yaml": "^3.13.1", - "json-schema-deref-sync": "^0.13.0", - "md5-file": "^3.2.3", - "md5hex": "^1.0.0", - "minipass": "3.1.6", - "node-fetch": "^2.6.7", - "node-forge": "^1.3.1", - "npm-package-arg": "^7.0.0", - "ora": "3.4.0", - "pretty-bytes": "5.6.0", - "progress": "2.0.3", - "prompts": "^2.3.2", - "qrcode-terminal": "0.11.0", - "require-from-string": "^2.0.2", - "requireg": "^0.2.2", - "resolve-from": "^5.0.0", - "semver": "^7.5.3", - "send": "^0.18.0", - "slugify": "^1.3.4", - "structured-headers": "^0.4.1", - "tar": "^6.0.5", - "tempy": "^0.7.1", - "terminal-link": "^2.1.1", - "text-table": "^0.2.0", - "url-join": "4.0.0", - "wrap-ansi": "^7.0.0", - "ws": "^8.12.1" - }, - "bin": { - "expo-internal": "build/bin/cli" - } - }, - "node_modules/@expo/cli/node_modules/@expo/prebuild-config": { - "version": "6.2.6", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "@expo/config": "~8.1.0", - "@expo/config-plugins": "~7.2.0", - "@expo/config-types": "^49.0.0-alpha.1", - "@expo/image-utils": "0.3.22", - "@expo/json-file": "^8.2.37", - "debug": "^4.3.1", - "fs-extra": "^9.0.0", - "resolve-from": "^5.0.0", - "semver": "7.5.3", - "xml2js": "0.6.0" - }, - "peerDependencies": { - "expo-modules-autolinking": ">=0.8.1" - } - }, - "node_modules/@expo/cli/node_modules/@expo/prebuild-config/node_modules/fs-extra": { - "version": "9.1.0", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "at-least-node": "^1.0.0", - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@expo/cli/node_modules/@expo/prebuild-config/node_modules/semver": { - "version": "7.5.3", - "dev": true, - "license": "ISC", - "optional": true, - "peer": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@expo/cli/node_modules/arg": { - "version": "4.1.0", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true - }, - "node_modules/@expo/cli/node_modules/commander": { - "version": "7.2.0", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "engines": { - "node": ">= 10" - } - }, - "node_modules/@expo/cli/node_modules/expo-modules-autolinking": { - "version": "1.5.0", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "@expo/config": "~8.1.0", - "chalk": "^4.1.0", - "commander": "^7.2.0", - "fast-glob": "^3.2.5", - "find-up": "^5.0.0", - "fs-extra": "^9.1.0" - }, - "bin": { - "expo-modules-autolinking": "bin/expo-modules-autolinking.js" - } - }, - "node_modules/@expo/cli/node_modules/expo-modules-autolinking/node_modules/fs-extra": { - "version": "9.1.0", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "at-least-node": "^1.0.0", - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@expo/cli/node_modules/find-up": { - "version": "5.0.0", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@expo/cli/node_modules/jsonfile": { - "version": "6.1.0", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "universalify": "^2.0.0" - }, - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/@expo/cli/node_modules/locate-path": { - "version": "6.0.0", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "p-locate": "^5.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@expo/cli/node_modules/lru-cache": { - "version": "6.0.0", - "dev": true, - "license": "ISC", - "optional": true, - "peer": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@expo/cli/node_modules/p-locate": { - "version": "5.0.0", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "p-limit": "^3.0.2" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@expo/cli/node_modules/semver": { - "version": "7.5.4", - "dev": true, - "license": "ISC", - "optional": true, - "peer": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@expo/cli/node_modules/universalify": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/@expo/cli/node_modules/yallist": { - "version": "4.0.0", - "dev": true, - "license": "ISC", - "optional": true, - "peer": true - }, - "node_modules/@expo/code-signing-certificates": { - "version": "0.0.5", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "node-forge": "^1.2.1", - "nullthrows": "^1.1.1" - } - }, - "node_modules/@expo/config": { - "version": "8.1.2", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "@babel/code-frame": "~7.10.4", - "@expo/config-plugins": "~7.2.0", - "@expo/config-types": "^49.0.0-alpha.1", - "@expo/json-file": "^8.2.37", - "getenv": "^1.0.0", - "glob": "7.1.6", - "require-from-string": "^2.0.2", - "resolve-from": "^5.0.0", - "semver": "7.5.3", - "slugify": "^1.3.4", - "sucrase": "^3.20.0" - } - }, - "node_modules/@expo/config-plugins": { - "version": "7.2.5", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "@expo/config-types": "^49.0.0-alpha.1", - "@expo/json-file": "~8.2.37", - "@expo/plist": "^0.0.20", - "@expo/sdk-runtime-versions": "^1.0.0", - "@react-native/normalize-color": "^2.0.0", - "chalk": "^4.1.2", - "debug": "^4.3.1", - "find-up": "~5.0.0", - "getenv": "^1.0.0", - "glob": "7.1.6", - "resolve-from": "^5.0.0", - "semver": "^7.5.3", - "slash": "^3.0.0", - "xcode": "^3.0.1", - "xml2js": "0.6.0" - } - }, - "node_modules/@expo/config-plugins/node_modules/find-up": { - "version": "5.0.0", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@expo/config-plugins/node_modules/glob": { - "version": "7.1.6", - "dev": true, - "license": "ISC", - "optional": true, - "peer": true, - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/@expo/config-plugins/node_modules/locate-path": { - "version": "6.0.0", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "p-locate": "^5.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@expo/config-plugins/node_modules/lru-cache": { - "version": "6.0.0", - "dev": true, - "license": "ISC", - "optional": true, - "peer": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@expo/config-plugins/node_modules/p-locate": { - "version": "5.0.0", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "p-limit": "^3.0.2" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@expo/config-plugins/node_modules/semver": { - "version": "7.5.4", - "dev": true, - "license": "ISC", - "optional": true, - "peer": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@expo/config-plugins/node_modules/yallist": { - "version": "4.0.0", - "dev": true, - "license": "ISC", - "optional": true, - "peer": true - }, - "node_modules/@expo/config-types": { - "version": "49.0.0", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true - }, - "node_modules/@expo/config/node_modules/@babel/code-frame": { - "version": "7.10.4", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "@babel/highlight": "^7.10.4" - } - }, - "node_modules/@expo/config/node_modules/glob": { - "version": "7.1.6", - "dev": true, - "license": "ISC", - "optional": true, - "peer": true, - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/@expo/config/node_modules/lru-cache": { - "version": "6.0.0", - "dev": true, - "license": "ISC", - "optional": true, - "peer": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@expo/config/node_modules/semver": { - "version": "7.5.3", - "dev": true, - "license": "ISC", - "optional": true, - "peer": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@expo/config/node_modules/yallist": { - "version": "4.0.0", - "dev": true, - "license": "ISC", - "optional": true, - "peer": true - }, - "node_modules/@expo/dev-server": { - "version": "0.5.5", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "@expo/bunyan": "4.0.0", - "@expo/metro-config": "~0.10.0", - "@expo/osascript": "2.0.33", - "@expo/spawn-async": "^1.5.0", - "body-parser": "^1.20.1", - "chalk": "^4.0.0", - "connect": "^3.7.0", - "fs-extra": "9.0.0", - "is-docker": "^2.0.0", - "is-wsl": "^2.1.1", - "node-fetch": "^2.6.0", - "open": "^8.3.0", - "resolve-from": "^5.0.0", - "serialize-error": "6.0.0", - "temp-dir": "^2.0.0" - } - }, - "node_modules/@expo/dev-server/node_modules/fs-extra": { - "version": "9.0.0", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "at-least-node": "^1.0.0", - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^1.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@expo/dev-server/node_modules/jsonfile": { - "version": "6.1.0", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "universalify": "^2.0.0" - }, - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/@expo/dev-server/node_modules/jsonfile/node_modules/universalify": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/@expo/dev-server/node_modules/universalify": { - "version": "1.0.0", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/@expo/devcert": { - "version": "1.1.0", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "application-config-path": "^0.1.0", - "command-exists": "^1.2.4", - "debug": "^3.1.0", - "eol": "^0.9.1", - "get-port": "^3.2.0", - "glob": "^7.1.2", - "lodash": "^4.17.4", - "mkdirp": "^0.5.1", - "password-prompt": "^1.0.4", - "rimraf": "^2.6.2", - "sudo-prompt": "^8.2.0", - "tmp": "^0.0.33", - "tslib": "^2.4.0" - } - }, - "node_modules/@expo/devcert/node_modules/debug": { - "version": "3.2.7", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "ms": "^2.1.1" - } - }, - "node_modules/@expo/env": { - "version": "0.0.5", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "chalk": "^4.0.0", - "debug": "^4.3.4", - "dotenv": "~16.0.3", - "dotenv-expand": "~10.0.0", - "getenv": "^1.0.0" - } - }, - "node_modules/@expo/env/node_modules/dotenv": { - "version": "16.0.3", - "dev": true, - "license": "BSD-2-Clause", - "optional": true, - "peer": true, - "engines": { - "node": ">=12" - } - }, - "node_modules/@expo/image-utils": { - "version": "0.3.22", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "@expo/spawn-async": "1.5.0", - "chalk": "^4.0.0", - "fs-extra": "9.0.0", - "getenv": "^1.0.0", - "jimp-compact": "0.16.1", - "mime": "^2.4.4", - "node-fetch": "^2.6.0", - "parse-png": "^2.1.0", - "resolve-from": "^5.0.0", - "semver": "7.3.2", - "tempy": "0.3.0" - } - }, - "node_modules/@expo/image-utils/node_modules/crypto-random-string": { - "version": "1.0.0", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/@expo/image-utils/node_modules/fs-extra": { - "version": "9.0.0", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "at-least-node": "^1.0.0", - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^1.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@expo/image-utils/node_modules/jsonfile": { - "version": "6.1.0", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "universalify": "^2.0.0" - }, - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/@expo/image-utils/node_modules/jsonfile/node_modules/universalify": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/@expo/image-utils/node_modules/semver": { - "version": "7.3.2", - "dev": true, - "license": "ISC", - "optional": true, - "peer": true, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@expo/image-utils/node_modules/temp-dir": { - "version": "1.0.0", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/@expo/image-utils/node_modules/tempy": { - "version": "0.3.0", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "temp-dir": "^1.0.0", - "type-fest": "^0.3.1", - "unique-string": "^1.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@expo/image-utils/node_modules/type-fest": { - "version": "0.3.1", - "dev": true, - "license": "(MIT OR CC0-1.0)", - "optional": true, - "peer": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/@expo/image-utils/node_modules/unique-string": { - "version": "1.0.0", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "crypto-random-string": "^1.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@expo/image-utils/node_modules/universalify": { - "version": "1.0.0", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/@expo/json-file": { - "version": "8.2.37", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "@babel/code-frame": "~7.10.4", - "json5": "^2.2.2", - "write-file-atomic": "^2.3.0" - } - }, - "node_modules/@expo/json-file/node_modules/@babel/code-frame": { - "version": "7.10.4", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "@babel/highlight": "^7.10.4" - } - }, - "node_modules/@expo/json-file/node_modules/write-file-atomic": { - "version": "2.4.3", - "dev": true, - "license": "ISC", - "optional": true, - "peer": true, - "dependencies": { - "graceful-fs": "^4.1.11", - "imurmurhash": "^0.1.4", - "signal-exit": "^3.0.2" - } - }, - "node_modules/@expo/metro-config": { - "version": "0.10.7", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "@expo/config": "~8.1.0", - "@expo/env": "0.0.5", - "@expo/json-file": "~8.2.37", - "chalk": "^4.1.0", - "debug": "^4.3.2", - "find-yarn-workspace-root": "~2.0.0", - "getenv": "^1.0.0", - "jsc-safe-url": "^0.2.4", - "lightningcss": "~1.19.0", - "postcss": "~8.4.21", - "resolve-from": "^5.0.0", - "sucrase": "^3.20.0" - } - }, - "node_modules/@expo/osascript": { - "version": "2.0.33", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "@expo/spawn-async": "^1.5.0", - "exec-async": "^2.2.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/@expo/package-manager": { - "version": "1.0.2", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "@expo/json-file": "^8.2.37", - "@expo/spawn-async": "^1.5.0", - "ansi-regex": "^5.0.0", - "chalk": "^4.0.0", - "find-up": "^5.0.0", - "find-yarn-workspace-root": "~2.0.0", - "js-yaml": "^3.13.1", - "micromatch": "^4.0.2", - "npm-package-arg": "^7.0.0", - "split": "^1.0.1", - "sudo-prompt": "9.1.1" - } - }, - "node_modules/@expo/package-manager/node_modules/find-up": { - "version": "5.0.0", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@expo/package-manager/node_modules/locate-path": { - "version": "6.0.0", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "p-locate": "^5.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@expo/package-manager/node_modules/p-locate": { - "version": "5.0.0", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "p-limit": "^3.0.2" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@expo/package-manager/node_modules/sudo-prompt": { - "version": "9.1.1", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true - }, - "node_modules/@expo/plist": { - "version": "0.0.20", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "@xmldom/xmldom": "~0.7.7", - "base64-js": "^1.2.3", - "xmlbuilder": "^14.0.0" - } - }, - "node_modules/@expo/rudder-sdk-node": { - "version": "1.1.1", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "@expo/bunyan": "^4.0.0", - "@segment/loosely-validate-event": "^2.0.0", - "fetch-retry": "^4.1.1", - "md5": "^2.2.1", - "node-fetch": "^2.6.1", - "remove-trailing-slash": "^0.1.0", - "uuid": "^8.3.2" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/@expo/rudder-sdk-node/node_modules/uuid": { - "version": "8.3.2", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "bin": { - "uuid": "dist/bin/uuid" - } - }, - "node_modules/@expo/sdk-runtime-versions": { - "version": "1.0.0", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true - }, - "node_modules/@expo/spawn-async": { - "version": "1.5.0", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "cross-spawn": "^6.0.5" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@expo/spawn-async/node_modules/cross-spawn": { - "version": "6.0.5", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "nice-try": "^1.0.4", - "path-key": "^2.0.1", - "semver": "^5.5.0", - "shebang-command": "^1.2.0", - "which": "^1.2.9" - }, - "engines": { - "node": ">=4.8" - } - }, - "node_modules/@expo/spawn-async/node_modules/path-key": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/@expo/spawn-async/node_modules/semver": { - "version": "5.7.2", - "dev": true, - "license": "ISC", - "optional": true, - "peer": true, - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/@expo/spawn-async/node_modules/shebang-command": { - "version": "1.2.0", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "shebang-regex": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/@expo/spawn-async/node_modules/shebang-regex": { - "version": "1.0.0", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/@expo/spawn-async/node_modules/which": { - "version": "1.3.1", - "dev": true, - "license": "ISC", - "optional": true, - "peer": true, - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "which": "bin/which" - } - }, - "node_modules/@expo/vector-icons": { - "version": "13.0.0", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true - }, - "node_modules/@expo/xcpretty": { - "version": "4.2.2", - "dev": true, - "license": "BSD-3-Clause", - "optional": true, - "peer": true, - "dependencies": { - "@babel/code-frame": "7.10.4", - "chalk": "^4.1.0", - "find-up": "^5.0.0", - "js-yaml": "^4.1.0" - }, - "bin": { - "excpretty": "build/cli.js" - } - }, - "node_modules/@expo/xcpretty/node_modules/@babel/code-frame": { - "version": "7.10.4", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "@babel/highlight": "^7.10.4" - } - }, - "node_modules/@expo/xcpretty/node_modules/argparse": { - "version": "2.0.1", - "dev": true, - "license": "Python-2.0", - "optional": true, - "peer": true - }, - "node_modules/@expo/xcpretty/node_modules/find-up": { - "version": "5.0.0", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@expo/xcpretty/node_modules/js-yaml": { - "version": "4.1.0", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "argparse": "^2.0.1" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/@expo/xcpretty/node_modules/locate-path": { - "version": "6.0.0", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "p-locate": "^5.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@expo/xcpretty/node_modules/p-locate": { - "version": "5.0.0", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "p-limit": "^3.0.2" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@gar/promisify": { - "version": "1.1.3", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true - }, - "node_modules/@graphql-typed-document-node/core": { - "version": "3.2.0", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "peerDependencies": { - "graphql": "^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0" - } - }, - "node_modules/@hapi/hoek": { - "version": "9.3.0", - "dev": true, - "license": "BSD-3-Clause", - "optional": true, - "peer": true - }, - "node_modules/@hapi/topo": { - "version": "5.1.0", - "dev": true, - "license": "BSD-3-Clause", - "optional": true, - "peer": true, - "dependencies": { - "@hapi/hoek": "^9.0.0" - } - }, - "node_modules/@istanbuljs/load-nyc-config": { - "version": "1.1.0", - "dev": true, - "license": "ISC", - "dependencies": { - "camelcase": "^5.3.1", - "find-up": "^4.1.0", - "get-package-type": "^0.1.0", - "js-yaml": "^3.13.1", - "resolve-from": "^5.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@istanbuljs/schema": { - "version": "0.1.3", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/@jest/console": { - "version": "29.6.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/types": "^29.6.1", - "@types/node": "*", - "chalk": "^4.0.0", - "jest-message-util": "^29.6.1", - "jest-util": "^29.6.1", - "slash": "^3.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/core": { - "version": "29.6.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/console": "^29.6.1", - "@jest/reporters": "^29.6.1", - "@jest/test-result": "^29.6.1", - "@jest/transform": "^29.6.1", - "@jest/types": "^29.6.1", - "@types/node": "*", - "ansi-escapes": "^4.2.1", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "exit": "^0.1.2", - "graceful-fs": "^4.2.9", - "jest-changed-files": "^29.5.0", - "jest-config": "^29.6.1", - "jest-haste-map": "^29.6.1", - "jest-message-util": "^29.6.1", - "jest-regex-util": "^29.4.3", - "jest-resolve": "^29.6.1", - "jest-resolve-dependencies": "^29.6.1", - "jest-runner": "^29.6.1", - "jest-runtime": "^29.6.1", - "jest-snapshot": "^29.6.1", - "jest-util": "^29.6.1", - "jest-validate": "^29.6.1", - "jest-watcher": "^29.6.1", - "micromatch": "^4.0.4", - "pretty-format": "^29.6.1", - "slash": "^3.0.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - }, - "peerDependencies": { - "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" - }, - "peerDependenciesMeta": { - "node-notifier": { - "optional": true - } - } - }, - "node_modules/@jest/create-cache-key-function": { - "version": "29.6.2", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "@jest/types": "^29.6.1" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/environment": { - "version": "29.6.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/fake-timers": "^29.6.1", - "@jest/types": "^29.6.1", - "@types/node": "*", - "jest-mock": "^29.6.1" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/expect": { - "version": "29.6.1", - "dev": true, - "license": "MIT", - "dependencies": { - "expect": "^29.6.1", - "jest-snapshot": "^29.6.1" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/expect-utils": { - "version": "29.6.1", - "dev": true, - "license": "MIT", - "dependencies": { - "jest-get-type": "^29.4.3" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/fake-timers": { - "version": "29.6.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/types": "^29.6.1", - "@sinonjs/fake-timers": "^10.0.2", - "@types/node": "*", - "jest-message-util": "^29.6.1", - "jest-mock": "^29.6.1", - "jest-util": "^29.6.1" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/globals": { - "version": "29.6.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/environment": "^29.6.1", - "@jest/expect": "^29.6.1", - "@jest/types": "^29.6.1", - "jest-mock": "^29.6.1" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/reporters": { - "version": "29.6.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@bcoe/v8-coverage": "^0.2.3", - "@jest/console": "^29.6.1", - "@jest/test-result": "^29.6.1", - "@jest/transform": "^29.6.1", - "@jest/types": "^29.6.1", - "@jridgewell/trace-mapping": "^0.3.18", - "@types/node": "*", - "chalk": "^4.0.0", - "collect-v8-coverage": "^1.0.0", - "exit": "^0.1.2", - "glob": "^7.1.3", - "graceful-fs": "^4.2.9", - "istanbul-lib-coverage": "^3.0.0", - "istanbul-lib-instrument": "^5.1.0", - "istanbul-lib-report": "^3.0.0", - "istanbul-lib-source-maps": "^4.0.0", - "istanbul-reports": "^3.1.3", - "jest-message-util": "^29.6.1", - "jest-util": "^29.6.1", - "jest-worker": "^29.6.1", - "slash": "^3.0.0", - "string-length": "^4.0.1", - "strip-ansi": "^6.0.0", - "v8-to-istanbul": "^9.0.1" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - }, - "peerDependencies": { - "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" - }, - "peerDependenciesMeta": { - "node-notifier": { - "optional": true - } - } - }, - "node_modules/@jest/schemas": { - "version": "29.6.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@sinclair/typebox": "^0.27.8" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/source-map": { - "version": "29.6.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@jridgewell/trace-mapping": "^0.3.18", - "callsites": "^3.0.0", - "graceful-fs": "^4.2.9" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/test-result": { - "version": "29.6.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/console": "^29.6.1", - "@jest/types": "^29.6.1", - "@types/istanbul-lib-coverage": "^2.0.0", - "collect-v8-coverage": "^1.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/test-sequencer": { - "version": "29.6.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/test-result": "^29.6.1", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^29.6.1", - "slash": "^3.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/transform": { - "version": "29.6.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/core": "^7.11.6", - "@jest/types": "^29.6.1", - "@jridgewell/trace-mapping": "^0.3.18", - "babel-plugin-istanbul": "^6.1.1", - "chalk": "^4.0.0", - "convert-source-map": "^2.0.0", - "fast-json-stable-stringify": "^2.1.0", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^29.6.1", - "jest-regex-util": "^29.4.3", - "jest-util": "^29.6.1", - "micromatch": "^4.0.4", - "pirates": "^4.0.4", - "slash": "^3.0.0", - "write-file-atomic": "^4.0.2" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/types": { - "version": "29.6.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/schemas": "^29.6.0", - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^17.0.8", - "chalk": "^4.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jridgewell/gen-mapping": { - "version": "0.3.3", - "dev": true, - "license": "MIT", - "dependencies": { - "@jridgewell/set-array": "^1.0.1", - "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.9" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/resolve-uri": { - "version": "3.1.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/set-array": { - "version": "1.1.2", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/source-map": { - "version": "0.3.5", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "@jridgewell/gen-mapping": "^0.3.0", - "@jridgewell/trace-mapping": "^0.3.9" - } - }, - "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.4.15", - "dev": true, - "license": "MIT" - }, - "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.18", - "dev": true, - "license": "MIT", - "dependencies": { - "@jridgewell/resolve-uri": "3.1.0", - "@jridgewell/sourcemap-codec": "1.4.14" - } - }, - "node_modules/@jridgewell/trace-mapping/node_modules/@jridgewell/sourcemap-codec": { - "version": "1.4.14", - "dev": true, - "license": "MIT" - }, - "node_modules/@nicolo-ribaudo/semver-v6": { - "version": "6.3.3", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/@noble/hashes": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.3.2.tgz", - "integrity": "sha512-MVC8EAQp7MvEcm30KWENFjgR+Mkmf+D189XJTkFIlwohU5hcBbn1ZkKq7KVTi2Hme3PMGF390DaL52beVrIihQ==", - "dev": true, - "engines": { - "node": ">= 16" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - } - }, - "node_modules/@nodelib/fs.scandir": { - "version": "2.1.5", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.stat": { - "version": "2.0.5", - "dev": true, - "license": "MIT", - "optional": true, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.walk": { - "version": "1.2.8", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@npmcli/fs": { - "version": "1.1.1", - "dev": true, - "license": "ISC", - "optional": true, - "peer": true, - "dependencies": { - "@gar/promisify": "^1.0.1", - "semver": "^7.3.5" - } - }, - "node_modules/@npmcli/fs/node_modules/lru-cache": { - "version": "6.0.0", - "dev": true, - "license": "ISC", - "optional": true, - "peer": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@npmcli/fs/node_modules/semver": { - "version": "7.5.4", - "dev": true, - "license": "ISC", - "optional": true, - "peer": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@npmcli/fs/node_modules/yallist": { - "version": "4.0.0", - "dev": true, - "license": "ISC", - "optional": true, - "peer": true - }, - "node_modules/@npmcli/move-file": { - "version": "1.1.2", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "mkdirp": "^1.0.4", - "rimraf": "^3.0.2" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@npmcli/move-file/node_modules/mkdirp": { - "version": "1.0.4", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "bin": { - "mkdirp": "bin/cmd.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@npmcli/move-file/node_modules/rimraf": { - "version": "3.0.2", - "dev": true, - "license": "ISC", - "optional": true, - "peer": true, - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/@peculiar/asn1-schema": { - "version": "2.3.6", - "dev": true, - "license": "MIT", - "dependencies": { - "asn1js": "^3.0.5", - "pvtsutils": "^1.3.2", - "tslib": "^2.4.0" - } - }, - "node_modules/@peculiar/json-schema": { - "version": "1.1.12", - "dev": true, - "license": "MIT", - "dependencies": { - "tslib": "^2.0.0" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/@peculiar/webcrypto": { - "version": "1.4.3", - "dev": true, - "license": "MIT", - "dependencies": { - "@peculiar/asn1-schema": "^2.3.6", - "@peculiar/json-schema": "^1.1.12", - "pvtsutils": "^1.3.2", - "tslib": "^2.5.0", - "webcrypto-core": "^1.7.7" - }, - "engines": { - "node": ">=10.12.0" - } - }, - "node_modules/@react-native-community/cli": { - "version": "11.3.5", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "@react-native-community/cli-clean": "11.3.5", - "@react-native-community/cli-config": "11.3.5", - "@react-native-community/cli-debugger-ui": "11.3.5", - "@react-native-community/cli-doctor": "11.3.5", - "@react-native-community/cli-hermes": "11.3.5", - "@react-native-community/cli-plugin-metro": "11.3.5", - "@react-native-community/cli-server-api": "11.3.5", - "@react-native-community/cli-tools": "11.3.5", - "@react-native-community/cli-types": "11.3.5", - "chalk": "^4.1.2", - "commander": "^9.4.1", - "execa": "^5.0.0", - "find-up": "^4.1.0", - "fs-extra": "^8.1.0", - "graceful-fs": "^4.1.3", - "prompts": "^2.4.0", - "semver": "^6.3.0" - }, - "bin": { - "react-native": "build/bin.js" - }, - "engines": { - "node": ">=16" - } - }, - "node_modules/@react-native-community/cli-clean": { - "version": "11.3.5", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "@react-native-community/cli-tools": "11.3.5", - "chalk": "^4.1.2", - "execa": "^5.0.0", - "prompts": "^2.4.0" - } - }, - "node_modules/@react-native-community/cli-config": { - "version": "11.3.5", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "@react-native-community/cli-tools": "11.3.5", - "chalk": "^4.1.2", - "cosmiconfig": "^5.1.0", - "deepmerge": "^4.3.0", - "glob": "^7.1.3", - "joi": "^17.2.1" - } - }, - "node_modules/@react-native-community/cli-debugger-ui": { - "version": "11.3.5", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "serve-static": "^1.13.1" - } - }, - "node_modules/@react-native-community/cli-doctor": { - "version": "11.3.5", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "@react-native-community/cli-config": "11.3.5", - "@react-native-community/cli-platform-android": "11.3.5", - "@react-native-community/cli-platform-ios": "11.3.5", - "@react-native-community/cli-tools": "11.3.5", - "chalk": "^4.1.2", - "command-exists": "^1.2.8", - "envinfo": "^7.7.2", - "execa": "^5.0.0", - "hermes-profile-transformer": "^0.0.6", - "ip": "^1.1.5", - "node-stream-zip": "^1.9.1", - "ora": "^5.4.1", - "prompts": "^2.4.0", - "semver": "^6.3.0", - "strip-ansi": "^5.2.0", - "sudo-prompt": "^9.0.0", - "wcwidth": "^1.0.1", - "yaml": "^2.2.1" - } - }, - "node_modules/@react-native-community/cli-doctor/node_modules/cli-cursor": { - "version": "3.1.0", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "restore-cursor": "^3.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@react-native-community/cli-doctor/node_modules/log-symbols": { - "version": "4.1.0", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "chalk": "^4.1.0", - "is-unicode-supported": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@react-native-community/cli-doctor/node_modules/ora": { - "version": "5.4.1", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "bl": "^4.1.0", - "chalk": "^4.1.0", - "cli-cursor": "^3.1.0", - "cli-spinners": "^2.5.0", - "is-interactive": "^1.0.0", - "is-unicode-supported": "^0.1.0", - "log-symbols": "^4.1.0", - "strip-ansi": "^6.0.0", - "wcwidth": "^1.0.1" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@react-native-community/cli-doctor/node_modules/ora/node_modules/strip-ansi": { - "version": "6.0.1", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@react-native-community/cli-doctor/node_modules/restore-cursor": { - "version": "3.1.0", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "onetime": "^5.1.0", - "signal-exit": "^3.0.2" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@react-native-community/cli-doctor/node_modules/strip-ansi": { - "version": "5.2.0", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "ansi-regex": "^4.1.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/@react-native-community/cli-doctor/node_modules/strip-ansi/node_modules/ansi-regex": { - "version": "4.1.1", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/@react-native-community/cli-doctor/node_modules/sudo-prompt": { - "version": "9.2.1", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true - }, - "node_modules/@react-native-community/cli-hermes": { - "version": "11.3.5", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "@react-native-community/cli-platform-android": "11.3.5", - "@react-native-community/cli-tools": "11.3.5", - "chalk": "^4.1.2", - "hermes-profile-transformer": "^0.0.6", - "ip": "^1.1.5" - } - }, - "node_modules/@react-native-community/cli-platform-android": { - "version": "11.3.5", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "@react-native-community/cli-tools": "11.3.5", - "chalk": "^4.1.2", - "execa": "^5.0.0", - "glob": "^7.1.3", - "logkitty": "^0.7.1" - } - }, - "node_modules/@react-native-community/cli-platform-ios": { - "version": "11.3.5", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "@react-native-community/cli-tools": "11.3.5", - "chalk": "^4.1.2", - "execa": "^5.0.0", - "fast-xml-parser": "^4.0.12", - "glob": "^7.1.3", - "ora": "^5.4.1" - } - }, - "node_modules/@react-native-community/cli-platform-ios/node_modules/cli-cursor": { - "version": "3.1.0", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "restore-cursor": "^3.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@react-native-community/cli-platform-ios/node_modules/log-symbols": { - "version": "4.1.0", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "chalk": "^4.1.0", - "is-unicode-supported": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@react-native-community/cli-platform-ios/node_modules/ora": { - "version": "5.4.1", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "bl": "^4.1.0", - "chalk": "^4.1.0", - "cli-cursor": "^3.1.0", - "cli-spinners": "^2.5.0", - "is-interactive": "^1.0.0", - "is-unicode-supported": "^0.1.0", - "log-symbols": "^4.1.0", - "strip-ansi": "^6.0.0", - "wcwidth": "^1.0.1" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@react-native-community/cli-platform-ios/node_modules/restore-cursor": { - "version": "3.1.0", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "onetime": "^5.1.0", - "signal-exit": "^3.0.2" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@react-native-community/cli-plugin-metro": { - "version": "11.3.5", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "@react-native-community/cli-server-api": "11.3.5", - "@react-native-community/cli-tools": "11.3.5", - "chalk": "^4.1.2", - "execa": "^5.0.0", - "metro": "0.76.7", - "metro-config": "0.76.7", - "metro-core": "0.76.7", - "metro-react-native-babel-transformer": "0.76.7", - "metro-resolver": "0.76.7", - "metro-runtime": "0.76.7", - "readline": "^1.3.0" - } - }, - "node_modules/@react-native-community/cli-server-api": { - "version": "11.3.5", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "@react-native-community/cli-debugger-ui": "11.3.5", - "@react-native-community/cli-tools": "11.3.5", - "compression": "^1.7.1", - "connect": "^3.6.5", - "errorhandler": "^1.5.1", - "nocache": "^3.0.1", - "pretty-format": "^26.6.2", - "serve-static": "^1.13.1", - "ws": "^7.5.1" - } - }, - "node_modules/@react-native-community/cli-server-api/node_modules/@jest/types": { - "version": "26.6.2", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^15.0.0", - "chalk": "^4.0.0" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/@react-native-community/cli-server-api/node_modules/@types/yargs": { - "version": "15.0.15", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "@types/yargs-parser": "*" - } - }, - "node_modules/@react-native-community/cli-server-api/node_modules/pretty-format": { - "version": "26.6.2", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "@jest/types": "^26.6.2", - "ansi-regex": "^5.0.0", - "ansi-styles": "^4.0.0", - "react-is": "^17.0.1" - }, - "engines": { - "node": ">= 10" - } - }, - "node_modules/@react-native-community/cli-server-api/node_modules/react-is": { - "version": "17.0.2", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true - }, - "node_modules/@react-native-community/cli-server-api/node_modules/ws": { - "version": "7.5.9", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "engines": { - "node": ">=8.3.0" - }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": "^5.0.2" - }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { - "optional": true - } - } - }, - "node_modules/@react-native-community/cli-tools": { - "version": "11.3.5", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "appdirsjs": "^1.2.4", - "chalk": "^4.1.2", - "find-up": "^5.0.0", - "mime": "^2.4.1", - "node-fetch": "^2.6.0", - "open": "^6.2.0", - "ora": "^5.4.1", - "semver": "^6.3.0", - "shell-quote": "^1.7.3" - } - }, - "node_modules/@react-native-community/cli-tools/node_modules/cli-cursor": { - "version": "3.1.0", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "restore-cursor": "^3.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@react-native-community/cli-tools/node_modules/find-up": { - "version": "5.0.0", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@react-native-community/cli-tools/node_modules/is-wsl": { - "version": "1.1.0", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/@react-native-community/cli-tools/node_modules/locate-path": { - "version": "6.0.0", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "p-locate": "^5.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@react-native-community/cli-tools/node_modules/log-symbols": { - "version": "4.1.0", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "chalk": "^4.1.0", - "is-unicode-supported": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@react-native-community/cli-tools/node_modules/open": { - "version": "6.4.0", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "is-wsl": "^1.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@react-native-community/cli-tools/node_modules/ora": { - "version": "5.4.1", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "bl": "^4.1.0", - "chalk": "^4.1.0", - "cli-cursor": "^3.1.0", - "cli-spinners": "^2.5.0", - "is-interactive": "^1.0.0", - "is-unicode-supported": "^0.1.0", - "log-symbols": "^4.1.0", - "strip-ansi": "^6.0.0", - "wcwidth": "^1.0.1" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@react-native-community/cli-tools/node_modules/p-locate": { - "version": "5.0.0", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "p-limit": "^3.0.2" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@react-native-community/cli-tools/node_modules/restore-cursor": { - "version": "3.1.0", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "onetime": "^5.1.0", - "signal-exit": "^3.0.2" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@react-native-community/cli-types": { - "version": "11.3.5", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "joi": "^17.2.1" - } - }, - "node_modules/@react-native-community/cli/node_modules/commander": { - "version": "9.5.0", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "engines": { - "node": "^12.20.0 || >=14" - } - }, - "node_modules/@react-native/assets-registry": { - "version": "0.72.0", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true - }, - "node_modules/@react-native/codegen": { - "version": "0.72.6", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "@babel/parser": "^7.20.0", - "flow-parser": "^0.206.0", - "jscodeshift": "^0.14.0", - "nullthrows": "^1.1.1" - }, - "peerDependencies": { - "@babel/preset-env": "^7.1.6" - } - }, - "node_modules/@react-native/gradle-plugin": { - "version": "0.72.11", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true - }, - "node_modules/@react-native/js-polyfills": { - "version": "0.72.1", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true - }, - "node_modules/@react-native/normalize-color": { - "version": "2.1.0", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true - }, - "node_modules/@react-native/normalize-colors": { - "version": "0.72.0", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true - }, - "node_modules/@react-native/virtualized-lists": { - "version": "0.72.6", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "invariant": "^2.2.4", - "nullthrows": "^1.1.1" - }, - "peerDependencies": { - "react-native": "*" - } - }, - "node_modules/@segment/loosely-validate-event": { - "version": "2.0.0", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "component-type": "^1.2.1", - "join-component": "^1.1.0" - } - }, - "node_modules/@sideway/address": { - "version": "4.1.4", - "dev": true, - "license": "BSD-3-Clause", - "optional": true, - "peer": true, - "dependencies": { - "@hapi/hoek": "^9.0.0" - } - }, - "node_modules/@sideway/formula": { - "version": "3.0.1", - "dev": true, - "license": "BSD-3-Clause", - "optional": true, - "peer": true - }, - "node_modules/@sideway/pinpoint": { - "version": "2.0.0", - "dev": true, - "license": "BSD-3-Clause", - "optional": true, - "peer": true - }, - "node_modules/@sinclair/typebox": { - "version": "0.27.8", - "dev": true, - "license": "MIT" - }, - "node_modules/@sinonjs/commons": { - "version": "3.0.0", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "type-detect": "4.0.8" - } - }, - "node_modules/@sinonjs/fake-timers": { - "version": "10.3.0", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "@sinonjs/commons": "^3.0.0" - } - }, - "node_modules/@tsconfig/node10": { - "version": "1.0.9", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true - }, - "node_modules/@tsconfig/node12": { - "version": "1.0.11", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true - }, - "node_modules/@tsconfig/node14": { - "version": "1.0.3", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true - }, - "node_modules/@tsconfig/node16": { - "version": "1.0.4", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true - }, - "node_modules/@types/babel__core": { - "version": "7.20.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/parser": "^7.20.7", - "@babel/types": "^7.20.7", - "@types/babel__generator": "*", - "@types/babel__template": "*", - "@types/babel__traverse": "*" - } - }, - "node_modules/@types/babel__generator": { - "version": "7.6.4", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/types": "^7.0.0" - } - }, - "node_modules/@types/babel__template": { - "version": "7.4.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/parser": "^7.1.0", - "@babel/types": "^7.0.0" - } - }, - "node_modules/@types/babel__traverse": { - "version": "7.20.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/types": "^7.20.7" - } - }, - "node_modules/@types/graceful-fs": { - "version": "4.1.6", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/hdkey": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/istanbul-lib-coverage": { - "version": "2.0.4", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/istanbul-lib-report": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/istanbul-lib-coverage": "*" - } - }, - "node_modules/@types/istanbul-reports": { - "version": "3.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/istanbul-lib-report": "*" - } - }, - "node_modules/@types/jest": { - "version": "29.5.3", - "dev": true, - "license": "MIT", - "dependencies": { - "expect": "^29.0.0", - "pretty-format": "^29.0.0" - } - }, - "node_modules/@types/node": { - "version": "20.3.3", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/prettier": { - "version": "2.7.3", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/stack-utils": { - "version": "2.0.1", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/yargs": { - "version": "17.0.24", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/yargs-parser": "*" - } - }, - "node_modules/@types/yargs-parser": { - "version": "21.0.0", - "dev": true, - "license": "MIT" - }, - "node_modules/@unimodules/core": { - "version": "7.1.2", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "compare-versions": "^3.4.0" - } - }, - "node_modules/@unimodules/react-native-adapter": { - "version": "6.3.9", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "expo-modules-autolinking": "^0.0.3", - "invariant": "^2.2.4" - } - }, - "node_modules/@urql/core": { - "version": "2.3.6", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "@graphql-typed-document-node/core": "^3.1.0", - "wonka": "^4.0.14" - }, - "peerDependencies": { - "graphql": "^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0" - } - }, - "node_modules/@urql/exchange-retry": { - "version": "0.3.0", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "@urql/core": ">=2.3.1", - "wonka": "^4.0.14" - }, - "peerDependencies": { - "graphql": "^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0" - } - }, - "node_modules/@xmldom/xmldom": { - "version": "0.7.13", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/abort-controller": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "event-target-shim": "^5.0.0" - }, - "engines": { - "node": ">=6.5" - } - }, - "node_modules/accepts": { - "version": "1.3.8", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "mime-types": "~2.1.34", - "negotiator": "0.6.3" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/acorn": { - "version": "8.9.0", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/acorn-walk": { - "version": "8.2.0", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/agent-base": { - "version": "6.0.2", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "debug": "4" - }, - "engines": { - "node": ">= 6.0.0" - } - }, - "node_modules/aggregate-error": { - "version": "3.1.0", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "clean-stack": "^2.0.0", - "indent-string": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/anser": { - "version": "1.4.10", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true - }, - "node_modules/ansi-escapes": { - "version": "4.3.2", - "dev": true, - "license": "MIT", - "dependencies": { - "type-fest": "^0.21.3" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/ansi-fragments": { - "version": "0.2.1", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "colorette": "^1.0.7", - "slice-ansi": "^2.0.0", - "strip-ansi": "^5.0.0" - } - }, - "node_modules/ansi-fragments/node_modules/ansi-regex": { - "version": "4.1.1", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/ansi-fragments/node_modules/strip-ansi": { - "version": "5.2.0", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "ansi-regex": "^4.1.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/ansi-regex": { - "version": "5.0.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/ansi-styles": { - "version": "4.3.0", - "dev": true, - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/any-promise": { - "version": "1.3.0", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true - }, - "node_modules/anymatch": { - "version": "3.1.3", - "dev": true, - "license": "ISC", - "dependencies": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/appdirsjs": { - "version": "1.2.7", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true - }, - "node_modules/application-config-path": { - "version": "0.1.1", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true - }, - "node_modules/arg": { - "version": "4.1.3", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true - }, - "node_modules/argparse": { - "version": "1.0.10", - "dev": true, - "license": "MIT", - "dependencies": { - "sprintf-js": "~1.0.2" - } - }, - "node_modules/array-union": { - "version": "2.1.0", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/asap": { - "version": "2.0.6", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true - }, - "node_modules/asmcrypto.js": { - "version": "0.22.0", - "dev": true, - "license": "MIT" - }, - "node_modules/asn1js": { - "version": "3.0.5", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "pvtsutils": "^1.3.2", - "pvutils": "^1.1.3", - "tslib": "^2.4.0" - }, - "engines": { - "node": ">=12.0.0" - } - }, - "node_modules/assert": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "es6-object-assign": "^1.1.0", - "is-nan": "^1.2.1", - "object-is": "^1.0.1", - "util": "^0.12.0" - } - }, - "node_modules/ast-types": { - "version": "0.15.2", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "tslib": "^2.0.1" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/astral-regex": { - "version": "1.0.0", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/async": { - "version": "3.2.4", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true - }, - "node_modules/async-limiter": { - "version": "1.0.1", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true - }, - "node_modules/asynckit": { - "version": "0.4.0", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true - }, - "node_modules/at-least-node": { - "version": "1.0.0", - "dev": true, - "license": "ISC", - "optional": true, - "engines": { - "node": ">= 4.0.0" - } - }, - "node_modules/available-typed-arrays": { - "version": "1.0.5", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/b64-lite": { - "version": "1.4.0", - "dev": true, - "license": "MIT", - "dependencies": { - "base-64": "^0.1.0" - } - }, - "node_modules/b64u-lite": { - "version": "1.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "b64-lite": "^1.4.0" - } - }, - "node_modules/babel-core": { - "version": "7.0.0-bridge.0", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/babel-jest": { - "version": "29.6.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/transform": "^29.6.1", - "@types/babel__core": "^7.1.14", - "babel-plugin-istanbul": "^6.1.1", - "babel-preset-jest": "^29.5.0", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "slash": "^3.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - }, - "peerDependencies": { - "@babel/core": "^7.8.0" - } - }, - "node_modules/babel-plugin-istanbul": { - "version": "6.1.1", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "@babel/helper-plugin-utils": "^7.0.0", - "@istanbuljs/load-nyc-config": "^1.0.0", - "@istanbuljs/schema": "^0.1.2", - "istanbul-lib-instrument": "^5.0.4", - "test-exclude": "^6.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/babel-plugin-jest-hoist": { - "version": "29.5.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/template": "^7.3.3", - "@babel/types": "^7.3.3", - "@types/babel__core": "^7.1.14", - "@types/babel__traverse": "^7.0.6" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/babel-plugin-module-resolver": { - "version": "5.0.0", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "find-babel-config": "^2.0.0", - "glob": "^8.0.3", - "pkg-up": "^3.1.0", - "reselect": "^4.1.7", - "resolve": "^1.22.1" - }, - "engines": { - "node": ">= 16" - } - }, - "node_modules/babel-plugin-module-resolver/node_modules/brace-expansion": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/babel-plugin-module-resolver/node_modules/glob": { - "version": "8.1.0", - "dev": true, - "license": "ISC", - "optional": true, - "peer": true, - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^5.0.1", - "once": "^1.3.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/babel-plugin-module-resolver/node_modules/minimatch": { - "version": "5.1.6", - "dev": true, - "license": "ISC", - "optional": true, - "peer": true, - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/babel-plugin-polyfill-corejs2": { - "version": "0.4.4", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/compat-data": "^7.22.6", - "@babel/helper-define-polyfill-provider": "^0.4.1", - "@nicolo-ribaudo/semver-v6": "^6.3.3" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/babel-plugin-polyfill-corejs3": { - "version": "0.8.2", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.4.1", - "core-js-compat": "^3.31.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/babel-plugin-polyfill-regenerator": { - "version": "0.5.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.4.1" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/babel-plugin-react-native-web": { - "version": "0.18.12", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true - }, - "node_modules/babel-plugin-syntax-trailing-function-commas": { - "version": "7.0.0-beta.0", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true - }, - "node_modules/babel-plugin-transform-flow-enums": { - "version": "0.0.2", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "@babel/plugin-syntax-flow": "^7.12.1" - } - }, - "node_modules/babel-preset-current-node-syntax": { - "version": "1.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/plugin-syntax-async-generators": "^7.8.4", - "@babel/plugin-syntax-bigint": "^7.8.3", - "@babel/plugin-syntax-class-properties": "^7.8.3", - "@babel/plugin-syntax-import-meta": "^7.8.3", - "@babel/plugin-syntax-json-strings": "^7.8.3", - "@babel/plugin-syntax-logical-assignment-operators": "^7.8.3", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", - "@babel/plugin-syntax-numeric-separator": "^7.8.3", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", - "@babel/plugin-syntax-optional-chaining": "^7.8.3", - "@babel/plugin-syntax-top-level-await": "^7.8.3" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/babel-preset-expo": { - "version": "9.5.1", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "@babel/plugin-proposal-decorators": "^7.12.9", - "@babel/plugin-proposal-export-namespace-from": "^7.18.9", - "@babel/plugin-proposal-object-rest-spread": "^7.12.13", - "@babel/plugin-transform-react-jsx": "^7.12.17", - "@babel/preset-env": "^7.20.0", - "babel-plugin-module-resolver": "^5.0.0", - "babel-plugin-react-native-web": "~0.18.10", - "metro-react-native-babel-preset": "0.76.7" - } - }, - "node_modules/babel-preset-fbjs": { - "version": "3.4.0", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "@babel/plugin-proposal-class-properties": "^7.0.0", - "@babel/plugin-proposal-object-rest-spread": "^7.0.0", - "@babel/plugin-syntax-class-properties": "^7.0.0", - "@babel/plugin-syntax-flow": "^7.0.0", - "@babel/plugin-syntax-jsx": "^7.0.0", - "@babel/plugin-syntax-object-rest-spread": "^7.0.0", - "@babel/plugin-transform-arrow-functions": "^7.0.0", - "@babel/plugin-transform-block-scoped-functions": "^7.0.0", - "@babel/plugin-transform-block-scoping": "^7.0.0", - "@babel/plugin-transform-classes": "^7.0.0", - "@babel/plugin-transform-computed-properties": "^7.0.0", - "@babel/plugin-transform-destructuring": "^7.0.0", - "@babel/plugin-transform-flow-strip-types": "^7.0.0", - "@babel/plugin-transform-for-of": "^7.0.0", - "@babel/plugin-transform-function-name": "^7.0.0", - "@babel/plugin-transform-literals": "^7.0.0", - "@babel/plugin-transform-member-expression-literals": "^7.0.0", - "@babel/plugin-transform-modules-commonjs": "^7.0.0", - "@babel/plugin-transform-object-super": "^7.0.0", - "@babel/plugin-transform-parameters": "^7.0.0", - "@babel/plugin-transform-property-literals": "^7.0.0", - "@babel/plugin-transform-react-display-name": "^7.0.0", - "@babel/plugin-transform-react-jsx": "^7.0.0", - "@babel/plugin-transform-shorthand-properties": "^7.0.0", - "@babel/plugin-transform-spread": "^7.0.0", - "@babel/plugin-transform-template-literals": "^7.0.0", - "babel-plugin-syntax-trailing-function-commas": "^7.0.0-beta.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/babel-preset-jest": { - "version": "29.5.0", - "dev": true, - "license": "MIT", - "dependencies": { - "babel-plugin-jest-hoist": "^29.5.0", - "babel-preset-current-node-syntax": "^1.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/balanced-match": { - "version": "1.0.2", - "dev": true, - "license": "MIT" - }, - "node_modules/base-64": { - "version": "0.1.0", - "dev": true - }, - "node_modules/base-x": { - "version": "3.0.9", - "dev": true, - "license": "MIT", - "dependencies": { - "safe-buffer": "^5.0.1" - } - }, - "node_modules/base64-arraybuffer": { - "version": "0.2.0", - "dev": true, - "engines": { - "node": ">= 0.6.0" - } - }, - "node_modules/base64-js": { - "version": "1.5.1", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT" - }, - "node_modules/better-opn": { - "version": "3.0.2", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "open": "^8.0.4" - }, - "engines": { - "node": ">=12.0.0" - } - }, - "node_modules/big-integer": { - "version": "1.6.51", - "dev": true, - "license": "Unlicense", - "optional": true, - "peer": true, - "engines": { - "node": ">=0.6" - } - }, - "node_modules/bignumber.js": { - "version": "9.1.1", - "dev": true, - "license": "MIT", - "engines": { - "node": "*" - } - }, - "node_modules/bip39": { - "version": "3.0.4", - "dev": true, - "license": "ISC", - "dependencies": { - "@types/node": "11.11.6", - "create-hash": "^1.1.0", - "pbkdf2": "^3.0.9", - "randombytes": "^2.0.1" - } - }, - "node_modules/bip39/node_modules/@types/node": { - "version": "11.11.6", - "dev": true, - "license": "MIT" - }, - "node_modules/bl": { - "version": "4.1.0", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "buffer": "^5.5.0", - "inherits": "^2.0.4", - "readable-stream": "^3.4.0" - } - }, - "node_modules/bl/node_modules/buffer": { - "version": "5.7.1", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "base64-js": "^1.3.1", - "ieee754": "^1.1.13" - } - }, - "node_modules/blueimp-md5": { - "version": "2.19.0", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true - }, - "node_modules/bn.js": { - "version": "4.12.0", - "dev": true, - "license": "MIT" - }, - "node_modules/body-parser": { - "version": "1.20.2", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "bytes": "3.1.2", - "content-type": "~1.0.5", - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "on-finished": "2.4.1", - "qs": "6.11.0", - "raw-body": "2.5.2", - "type-is": "~1.6.18", - "unpipe": "1.0.0" - }, - "engines": { - "node": ">= 0.8", - "npm": "1.2.8000 || >= 1.4.16" - } - }, - "node_modules/body-parser/node_modules/debug": { - "version": "2.6.9", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/body-parser/node_modules/ms": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true - }, - "node_modules/borc": { - "version": "2.1.2", - "dev": true, - "license": "MIT", - "dependencies": { - "bignumber.js": "^9.0.0", - "buffer": "^5.5.0", - "commander": "^2.15.0", - "ieee754": "^1.1.13", - "iso-url": "~0.4.7", - "json-text-sequence": "~0.1.0", - "readable-stream": "^3.6.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/borc/node_modules/buffer": { - "version": "5.7.1", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT", - "dependencies": { - "base64-js": "^1.3.1", - "ieee754": "^1.1.13" - } - }, - "node_modules/bplist-creator": { - "version": "0.1.0", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "stream-buffers": "2.2.x" - } - }, - "node_modules/bplist-parser": { - "version": "0.3.2", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "big-integer": "1.6.x" - }, - "engines": { - "node": ">= 5.10.0" - } - }, - "node_modules/brace-expansion": { - "version": "1.1.11", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/braces": { - "version": "3.0.2", - "dev": true, - "license": "MIT", - "dependencies": { - "fill-range": "^7.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/brorand": { - "version": "1.1.0", - "dev": true, - "license": "MIT" - }, - "node_modules/browserslist": { - "version": "4.21.9", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "MIT", - "dependencies": { - "caniuse-lite": "^1.0.30001503", - "electron-to-chromium": "^1.4.431", - "node-releases": "^2.0.12", - "update-browserslist-db": "^1.0.11" - }, - "bin": { - "browserslist": "cli.js" - }, - "engines": { - "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" - } - }, - "node_modules/bs-logger": { - "version": "0.2.6", - "dev": true, - "license": "MIT", - "dependencies": { - "fast-json-stable-stringify": "2.x" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/bs58": { - "version": "4.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "base-x": "^3.0.2" - } - }, - "node_modules/bs58check": { - "version": "2.1.2", - "dev": true, - "license": "MIT", - "dependencies": { - "bs58": "^4.0.0", - "create-hash": "^1.1.0", - "safe-buffer": "^5.1.2" - } - }, - "node_modules/bser": { - "version": "2.1.1", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "node-int64": "^0.4.0" - } - }, - "node_modules/buffer": { - "version": "6.0.3", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT", - "dependencies": { - "base64-js": "^1.3.1", - "ieee754": "^1.2.1" - } - }, - "node_modules/buffer-alloc": { - "version": "1.2.0", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "buffer-alloc-unsafe": "^1.1.0", - "buffer-fill": "^1.0.0" - } - }, - "node_modules/buffer-alloc-unsafe": { - "version": "1.1.0", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true - }, - "node_modules/buffer-fill": { - "version": "1.0.0", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true - }, - "node_modules/buffer-from": { - "version": "1.1.2", - "dev": true, - "license": "MIT" - }, - "node_modules/builtins": { - "version": "1.0.3", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true - }, - "node_modules/bytes": { - "version": "3.1.2", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/cacache": { - "version": "15.3.0", - "dev": true, - "license": "ISC", - "optional": true, - "peer": true, - "dependencies": { - "@npmcli/fs": "^1.0.0", - "@npmcli/move-file": "^1.0.1", - "chownr": "^2.0.0", - "fs-minipass": "^2.0.0", - "glob": "^7.1.4", - "infer-owner": "^1.0.4", - "lru-cache": "^6.0.0", - "minipass": "^3.1.1", - "minipass-collect": "^1.0.2", - "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.2", - "mkdirp": "^1.0.3", - "p-map": "^4.0.0", - "promise-inflight": "^1.0.1", - "rimraf": "^3.0.2", - "ssri": "^8.0.1", - "tar": "^6.0.2", - "unique-filename": "^1.1.1" - }, - "engines": { - "node": ">= 10" - } - }, - "node_modules/cacache/node_modules/lru-cache": { - "version": "6.0.0", - "dev": true, - "license": "ISC", - "optional": true, - "peer": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/cacache/node_modules/mkdirp": { - "version": "1.0.4", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "bin": { - "mkdirp": "bin/cmd.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/cacache/node_modules/rimraf": { - "version": "3.0.2", - "dev": true, - "license": "ISC", - "optional": true, - "peer": true, - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/cacache/node_modules/yallist": { - "version": "4.0.0", - "dev": true, - "license": "ISC", - "optional": true, - "peer": true - }, - "node_modules/call-bind": { - "version": "1.0.2", - "dev": true, - "license": "MIT", - "dependencies": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/caller-callsite": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "callsites": "^2.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/caller-callsite/node_modules/callsites": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/caller-path": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "caller-callsite": "^2.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/callsites": { - "version": "3.1.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/camelcase": { - "version": "5.3.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/caniuse-lite": { - "version": "1.0.30001517", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/caniuse-lite" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "CC-BY-4.0" - }, - "node_modules/chalk": { - "version": "4.1.2", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/char-regex": { - "version": "1.0.2", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - } - }, - "node_modules/charenc": { - "version": "0.0.2", - "dev": true, - "license": "BSD-3-Clause", - "optional": true, - "peer": true, - "engines": { - "node": "*" - } - }, - "node_modules/chownr": { - "version": "2.0.0", - "dev": true, - "license": "ISC", - "optional": true, - "peer": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/ci-info": { - "version": "3.8.0", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/sibiraj-s" - } - ], - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/cipher-base": { - "version": "1.0.4", - "dev": true, - "license": "MIT", - "dependencies": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - } - }, - "node_modules/cjs-module-lexer": { - "version": "1.2.3", - "dev": true, - "license": "MIT" - }, - "node_modules/clean-stack": { - "version": "2.2.0", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/cli-cursor": { - "version": "2.1.0", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "restore-cursor": "^2.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/cli-spinners": { - "version": "2.9.0", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/cliui": { - "version": "8.0.1", - "dev": true, - "license": "ISC", - "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.1", - "wrap-ansi": "^7.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/clone": { - "version": "2.1.2", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "engines": { - "node": ">=0.8" - } - }, - "node_modules/clone-deep": { - "version": "4.0.1", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "is-plain-object": "^2.0.4", - "kind-of": "^6.0.2", - "shallow-clone": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/co": { - "version": "4.6.0", - "dev": true, - "license": "MIT", - "engines": { - "iojs": ">= 1.0.0", - "node": ">= 0.12.0" - } - }, - "node_modules/collect-v8-coverage": { - "version": "1.0.2", - "dev": true, - "license": "MIT" - }, - "node_modules/color-convert": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/color-name": { - "version": "1.1.4", - "dev": true, - "license": "MIT" - }, - "node_modules/colorette": { - "version": "1.4.0", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true - }, - "node_modules/combined-stream": { - "version": "1.0.8", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "delayed-stream": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/command-exists": { - "version": "1.2.9", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true - }, - "node_modules/commander": { - "version": "2.20.3", - "dev": true, - "license": "MIT" - }, - "node_modules/commondir": { - "version": "1.0.1", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true - }, - "node_modules/compare-versions": { - "version": "3.6.0", - "dev": true, - "license": "MIT", - "optional": true - }, - "node_modules/component-type": { - "version": "1.2.1", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true - }, - "node_modules/compressible": { - "version": "2.0.18", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "mime-db": ">= 1.43.0 < 2" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/compression": { - "version": "1.7.4", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "accepts": "~1.3.5", - "bytes": "3.0.0", - "compressible": "~2.0.16", - "debug": "2.6.9", - "on-headers": "~1.0.2", - "safe-buffer": "5.1.2", - "vary": "~1.1.2" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/compression/node_modules/bytes": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/compression/node_modules/debug": { - "version": "2.6.9", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/compression/node_modules/ms": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true - }, - "node_modules/compression/node_modules/safe-buffer": { - "version": "5.1.2", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true - }, - "node_modules/concat-map": { - "version": "0.0.1", - "dev": true, - "license": "MIT" - }, - "node_modules/connect": { - "version": "3.7.0", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "debug": "2.6.9", - "finalhandler": "1.1.2", - "parseurl": "~1.3.3", - "utils-merge": "1.0.1" - }, - "engines": { - "node": ">= 0.10.0" - } - }, - "node_modules/connect/node_modules/debug": { - "version": "2.6.9", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/connect/node_modules/ms": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true - }, - "node_modules/content-type": { - "version": "1.0.5", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/convert-source-map": { - "version": "2.0.0", - "dev": true, - "license": "MIT" - }, - "node_modules/core-js-compat": { - "version": "3.31.1", - "dev": true, - "license": "MIT", - "dependencies": { - "browserslist": "^4.21.9" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/core-js" - } - }, - "node_modules/core-util-is": { - "version": "1.0.3", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true - }, - "node_modules/cosmiconfig": { - "version": "5.2.1", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "import-fresh": "^2.0.0", - "is-directory": "^0.3.1", - "js-yaml": "^3.13.1", - "parse-json": "^4.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/cosmiconfig/node_modules/parse-json": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "error-ex": "^1.3.1", - "json-parse-better-errors": "^1.0.1" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/create-hash": { - "version": "1.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "cipher-base": "^1.0.1", - "inherits": "^2.0.1", - "md5.js": "^1.3.4", - "ripemd160": "^2.0.1", - "sha.js": "^2.4.0" - } - }, - "node_modules/create-hmac": { - "version": "1.1.7", - "dev": true, - "license": "MIT", - "dependencies": { - "cipher-base": "^1.0.3", - "create-hash": "^1.1.0", - "inherits": "^2.0.1", - "ripemd160": "^2.0.0", - "safe-buffer": "^5.0.1", - "sha.js": "^2.4.8" - } - }, - "node_modules/create-require": { - "version": "1.1.1", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true - }, - "node_modules/cross-fetch": { - "version": "3.1.8", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "node-fetch": "^2.6.12" - } - }, - "node_modules/cross-spawn": { - "version": "7.0.3", - "dev": true, - "license": "MIT", - "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/crypt": { - "version": "0.0.2", - "dev": true, - "license": "BSD-3-Clause", - "optional": true, - "peer": true, - "engines": { - "node": "*" - } - }, - "node_modules/crypto-random-string": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/dag-map": { - "version": "1.0.2", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true - }, - "node_modules/dayjs": { - "version": "1.11.9", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true - }, - "node_modules/debug": { - "version": "4.3.4", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/decamelize": { - "version": "1.2.0", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/dedent": { - "version": "0.7.0", - "dev": true, - "license": "MIT" - }, - "node_modules/deep-extend": { - "version": "0.6.0", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/deepmerge": { - "version": "4.3.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/default-gateway": { - "version": "4.2.0", - "dev": true, - "license": "BSD-2-Clause", - "optional": true, - "peer": true, - "dependencies": { - "execa": "^1.0.0", - "ip-regex": "^2.1.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/default-gateway/node_modules/cross-spawn": { - "version": "6.0.5", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "nice-try": "^1.0.4", - "path-key": "^2.0.1", - "semver": "^5.5.0", - "shebang-command": "^1.2.0", - "which": "^1.2.9" - }, - "engines": { - "node": ">=4.8" - } - }, - "node_modules/default-gateway/node_modules/execa": { - "version": "1.0.0", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "cross-spawn": "^6.0.0", - "get-stream": "^4.0.0", - "is-stream": "^1.1.0", - "npm-run-path": "^2.0.0", - "p-finally": "^1.0.0", - "signal-exit": "^3.0.0", - "strip-eof": "^1.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/default-gateway/node_modules/get-stream": { - "version": "4.1.0", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "pump": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/default-gateway/node_modules/is-stream": { - "version": "1.1.0", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/default-gateway/node_modules/npm-run-path": { - "version": "2.0.2", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "path-key": "^2.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/default-gateway/node_modules/path-key": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/default-gateway/node_modules/semver": { - "version": "5.7.2", - "dev": true, - "license": "ISC", - "optional": true, - "peer": true, - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/default-gateway/node_modules/shebang-command": { - "version": "1.2.0", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "shebang-regex": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/default-gateway/node_modules/shebang-regex": { - "version": "1.0.0", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/default-gateway/node_modules/which": { - "version": "1.3.1", - "dev": true, - "license": "ISC", - "optional": true, - "peer": true, - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "which": "bin/which" - } - }, - "node_modules/defaults": { - "version": "1.0.4", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "clone": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/defaults/node_modules/clone": { - "version": "1.0.4", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "engines": { - "node": ">=0.8" - } - }, - "node_modules/define-lazy-prop": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/define-properties": { - "version": "1.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "has-property-descriptors": "^1.0.0", - "object-keys": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/del": { - "version": "6.1.1", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "globby": "^11.0.1", - "graceful-fs": "^4.2.4", - "is-glob": "^4.0.1", - "is-path-cwd": "^2.2.0", - "is-path-inside": "^3.0.2", - "p-map": "^4.0.0", - "rimraf": "^3.0.2", - "slash": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/del/node_modules/rimraf": { - "version": "3.0.2", - "dev": true, - "license": "ISC", - "optional": true, - "peer": true, - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/delayed-stream": { - "version": "1.0.0", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/delimit-stream": { - "version": "0.1.0", - "dev": true, - "license": "BSD-2-Clause" - }, - "node_modules/denodeify": { - "version": "1.2.1", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true - }, - "node_modules/depd": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/deprecated-react-native-prop-types": { - "version": "4.1.0", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "@react-native/normalize-colors": "*", - "invariant": "*", - "prop-types": "*" - } - }, - "node_modules/destroy": { - "version": "1.2.0", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "engines": { - "node": ">= 0.8", - "npm": "1.2.8000 || >= 1.4.16" - } - }, - "node_modules/detect-libc": { - "version": "1.0.3", - "dev": true, - "license": "Apache-2.0", - "optional": true, - "peer": true, - "bin": { - "detect-libc": "bin/detect-libc.js" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/detect-newline": { - "version": "3.1.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/diff": { - "version": "4.0.2", - "dev": true, - "license": "BSD-3-Clause", - "optional": true, - "peer": true, - "engines": { - "node": ">=0.3.1" - } - }, - "node_modules/diff-sequences": { - "version": "29.4.3", - "dev": true, - "license": "MIT", - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/dir-glob": { - "version": "3.0.1", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "path-type": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/dotenv": { - "version": "16.3.1", - "dev": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/motdotla/dotenv?sponsor=1" - } - }, - "node_modules/dotenv-expand": { - "version": "10.0.0", - "dev": true, - "license": "BSD-2-Clause", - "optional": true, - "peer": true, - "engines": { - "node": ">=12" - } - }, - "node_modules/ee-first": { - "version": "1.1.1", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true - }, - "node_modules/electron-to-chromium": { - "version": "1.4.465", - "dev": true, - "license": "ISC" - }, - "node_modules/elliptic": { - "version": "6.5.4", - "dev": true, - "license": "MIT", - "dependencies": { - "bn.js": "^4.11.9", - "brorand": "^1.1.0", - "hash.js": "^1.0.0", - "hmac-drbg": "^1.0.1", - "inherits": "^2.0.4", - "minimalistic-assert": "^1.0.1", - "minimalistic-crypto-utils": "^1.0.1" - } - }, - "node_modules/emittery": { - "version": "0.13.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sindresorhus/emittery?sponsor=1" - } - }, - "node_modules/emoji-regex": { - "version": "8.0.0", - "dev": true, - "license": "MIT" - }, - "node_modules/encodeurl": { - "version": "1.0.2", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/end-of-stream": { - "version": "1.4.4", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "once": "^1.4.0" - } - }, - "node_modules/env-editor": { - "version": "0.4.2", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/envinfo": { - "version": "7.10.0", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "bin": { - "envinfo": "dist/cli.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/eol": { - "version": "0.9.1", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true - }, - "node_modules/error-ex": { - "version": "1.3.2", - "dev": true, - "license": "MIT", - "dependencies": { - "is-arrayish": "^0.2.1" - } - }, - "node_modules/error-stack-parser": { - "version": "2.1.4", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "stackframe": "^1.3.4" - } - }, - "node_modules/errorhandler": { - "version": "1.5.1", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "accepts": "~1.3.7", - "escape-html": "~1.0.3" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/es6-object-assign": { - "version": "1.1.0", - "dev": true, - "license": "MIT" - }, - "node_modules/escalade": { - "version": "3.1.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/escape-html": { - "version": "1.0.3", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true - }, - "node_modules/escape-string-regexp": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/esprima": { - "version": "4.0.1", - "dev": true, - "license": "BSD-2-Clause", - "bin": { - "esparse": "bin/esparse.js", - "esvalidate": "bin/esvalidate.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/esutils": { - "version": "2.0.3", - "dev": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/etag": { - "version": "1.8.1", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/event-target-shim": { - "version": "5.0.1", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/events": { - "version": "3.3.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.8.x" - } - }, - "node_modules/exec-async": { - "version": "2.2.0", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true - }, - "node_modules/execa": { - "version": "5.1.1", - "dev": true, - "license": "MIT", - "dependencies": { - "cross-spawn": "^7.0.3", - "get-stream": "^6.0.0", - "human-signals": "^2.1.0", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.1", - "onetime": "^5.1.2", - "signal-exit": "^3.0.3", - "strip-final-newline": "^2.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sindresorhus/execa?sponsor=1" - } - }, - "node_modules/exit": { - "version": "0.1.2", - "dev": true, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/expect": { - "version": "29.6.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/expect-utils": "^29.6.1", - "@types/node": "*", - "jest-get-type": "^29.4.3", - "jest-matcher-utils": "^29.6.1", - "jest-message-util": "^29.6.1", - "jest-util": "^29.6.1" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/expo": { - "version": "49.0.5", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "@babel/runtime": "^7.20.0", - "@expo/cli": "0.10.11", - "@expo/config": "8.1.2", - "@expo/config-plugins": "7.2.5", - "@expo/vector-icons": "^13.0.0", - "babel-preset-expo": "~9.5.1", - "expo-application": "~5.3.0", - "expo-asset": "~8.10.1", - "expo-constants": "~14.4.2", - "expo-file-system": "~15.4.2", - "expo-font": "~11.4.0", - "expo-keep-awake": "~12.3.0", - "expo-modules-autolinking": "1.5.0", - "expo-modules-core": "1.5.8", - "fbemitter": "^3.0.0", - "invariant": "^2.2.4", - "md5-file": "^3.2.3", - "node-fetch": "^2.6.7", - "pretty-format": "^26.5.2", - "uuid": "^3.4.0" - }, - "bin": { - "expo": "bin/cli" - } - }, - "node_modules/expo-application": { - "version": "5.3.0", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "peerDependencies": { - "expo": "*" - } - }, - "node_modules/expo-asset": { - "version": "8.10.1", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "blueimp-md5": "^2.10.0", - "expo-constants": "~14.4.2", - "expo-file-system": "~15.4.0", - "invariant": "^2.2.4", - "md5-file": "^3.2.3", - "path-browserify": "^1.0.0", - "url-parse": "^1.5.9" - } - }, - "node_modules/expo-constants": { - "version": "14.4.2", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "@expo/config": "~8.1.0", - "uuid": "^3.3.2" - }, - "peerDependencies": { - "expo": "*" - } - }, - "node_modules/expo-file-system": { - "version": "15.4.2", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "uuid": "^3.4.0" - }, - "peerDependencies": { - "expo": "*" - } - }, - "node_modules/expo-font": { - "version": "11.4.0", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "fontfaceobserver": "^2.1.0" - }, - "peerDependencies": { - "expo": "*" - } - }, - "node_modules/expo-keep-awake": { - "version": "12.3.0", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "peerDependencies": { - "expo": "*" - } - }, - "node_modules/expo-modules-autolinking": { - "version": "0.0.3", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "chalk": "^4.1.0", - "commander": "^7.2.0", - "fast-glob": "^3.2.5", - "find-up": "~5.0.0", - "fs-extra": "^9.1.0" - }, - "bin": { - "expo-modules-autolinking": "bin/expo-modules-autolinking.js" - } - }, - "node_modules/expo-modules-autolinking/node_modules/commander": { - "version": "7.2.0", - "dev": true, - "license": "MIT", - "optional": true, - "engines": { - "node": ">= 10" - } - }, - "node_modules/expo-modules-autolinking/node_modules/find-up": { - "version": "5.0.0", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/expo-modules-autolinking/node_modules/fs-extra": { - "version": "9.1.0", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "at-least-node": "^1.0.0", - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/expo-modules-autolinking/node_modules/jsonfile": { - "version": "6.1.0", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "universalify": "^2.0.0" - }, - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/expo-modules-autolinking/node_modules/locate-path": { - "version": "6.0.0", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "p-locate": "^5.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/expo-modules-autolinking/node_modules/p-locate": { - "version": "5.0.0", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "p-limit": "^3.0.2" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/expo-modules-autolinking/node_modules/universalify": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "optional": true, - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/expo-modules-core": { - "version": "1.5.8", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "compare-versions": "^3.4.0", - "invariant": "^2.2.4" - } - }, - "node_modules/expo-random": { - "version": "13.2.0", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "base64-js": "^1.3.0" - }, - "peerDependencies": { - "expo": "*" - } - }, - "node_modules/expo/node_modules/@jest/types": { - "version": "26.6.2", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^15.0.0", - "chalk": "^4.0.0" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/expo/node_modules/@types/yargs": { - "version": "15.0.15", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "@types/yargs-parser": "*" - } - }, - "node_modules/expo/node_modules/commander": { - "version": "7.2.0", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "engines": { - "node": ">= 10" - } - }, - "node_modules/expo/node_modules/expo-modules-autolinking": { - "version": "1.5.0", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "@expo/config": "~8.1.0", - "chalk": "^4.1.0", - "commander": "^7.2.0", - "fast-glob": "^3.2.5", - "find-up": "^5.0.0", - "fs-extra": "^9.1.0" - }, - "bin": { - "expo-modules-autolinking": "bin/expo-modules-autolinking.js" - } - }, - "node_modules/expo/node_modules/find-up": { - "version": "5.0.0", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/expo/node_modules/fs-extra": { - "version": "9.1.0", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "at-least-node": "^1.0.0", - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/expo/node_modules/jsonfile": { - "version": "6.1.0", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "universalify": "^2.0.0" - }, - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/expo/node_modules/locate-path": { - "version": "6.0.0", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "p-locate": "^5.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/expo/node_modules/p-locate": { - "version": "5.0.0", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "p-limit": "^3.0.2" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/expo/node_modules/pretty-format": { - "version": "26.6.2", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "@jest/types": "^26.6.2", - "ansi-regex": "^5.0.0", - "ansi-styles": "^4.0.0", - "react-is": "^17.0.1" - }, - "engines": { - "node": ">= 10" - } - }, - "node_modules/expo/node_modules/react-is": { - "version": "17.0.2", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true - }, - "node_modules/expo/node_modules/universalify": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/fast-glob": { - "version": "3.3.1", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.4" - }, - "engines": { - "node": ">=8.6.0" - } - }, - "node_modules/fast-json-stable-stringify": { - "version": "2.1.0", - "dev": true, - "license": "MIT" - }, - "node_modules/fast-xml-parser": { - "version": "4.2.6", - "dev": true, - "funding": [ - { - "type": "paypal", - "url": "https://paypal.me/naturalintelligence" - }, - { - "type": "github", - "url": "https://github.com/sponsors/NaturalIntelligence" - } - ], - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "strnum": "^1.0.5" - }, - "bin": { - "fxparser": "src/cli/cli.js" - } - }, - "node_modules/fastq": { - "version": "1.15.0", - "dev": true, - "license": "ISC", - "optional": true, - "dependencies": { - "reusify": "^1.0.4" - } - }, - "node_modules/fb-watchman": { - "version": "2.0.2", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "bser": "2.1.1" - } - }, - "node_modules/fbemitter": { - "version": "3.0.0", - "dev": true, - "license": "BSD-3-Clause", - "optional": true, - "peer": true, - "dependencies": { - "fbjs": "^3.0.0" - } - }, - "node_modules/fbjs": { - "version": "3.0.5", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "cross-fetch": "^3.1.5", - "fbjs-css-vars": "^1.0.0", - "loose-envify": "^1.0.0", - "object-assign": "^4.1.0", - "promise": "^7.1.1", - "setimmediate": "^1.0.5", - "ua-parser-js": "^1.0.35" - } - }, - "node_modules/fbjs-css-vars": { - "version": "1.0.2", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true - }, - "node_modules/fetch-retry": { - "version": "4.1.1", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true - }, - "node_modules/fill-range": { - "version": "7.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "to-regex-range": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/finalhandler": { - "version": "1.1.2", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "debug": "2.6.9", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "on-finished": "~2.3.0", - "parseurl": "~1.3.3", - "statuses": "~1.5.0", - "unpipe": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/finalhandler/node_modules/debug": { - "version": "2.6.9", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/finalhandler/node_modules/ms": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true - }, - "node_modules/finalhandler/node_modules/on-finished": { - "version": "2.3.0", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "ee-first": "1.1.1" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/find-babel-config": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "json5": "^2.1.1", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/find-cache-dir": { - "version": "2.1.0", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "commondir": "^1.0.1", - "make-dir": "^2.0.0", - "pkg-dir": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/find-cache-dir/node_modules/find-up": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "locate-path": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/find-cache-dir/node_modules/locate-path": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/find-cache-dir/node_modules/make-dir": { - "version": "2.1.0", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "pify": "^4.0.1", - "semver": "^5.6.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/find-cache-dir/node_modules/p-limit": { - "version": "2.3.0", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "p-try": "^2.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/find-cache-dir/node_modules/p-locate": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "p-limit": "^2.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/find-cache-dir/node_modules/path-exists": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/find-cache-dir/node_modules/pkg-dir": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "find-up": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/find-cache-dir/node_modules/semver": { - "version": "5.7.2", - "dev": true, - "license": "ISC", - "optional": true, - "peer": true, - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/find-up": { - "version": "4.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/find-yarn-workspace-root": { - "version": "2.0.0", - "dev": true, - "license": "Apache-2.0", - "optional": true, - "peer": true, - "dependencies": { - "micromatch": "^4.0.2" - } - }, - "node_modules/flow-enums-runtime": { - "version": "0.0.5", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true - }, - "node_modules/flow-parser": { - "version": "0.206.0", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/fontfaceobserver": { - "version": "2.3.0", - "dev": true, - "license": "BSD-2-Clause", - "optional": true, - "peer": true - }, - "node_modules/for-each": { - "version": "0.3.3", - "dev": true, - "license": "MIT", - "dependencies": { - "is-callable": "^1.1.3" - } - }, - "node_modules/form-data": { - "version": "3.0.1", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/freeport-async": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/fresh": { - "version": "0.5.2", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/fs-extra": { - "version": "8.1.0", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - }, - "engines": { - "node": ">=6 <7 || >=8" - } - }, - "node_modules/fs-minipass": { - "version": "2.1.0", - "dev": true, - "license": "ISC", - "optional": true, - "peer": true, - "dependencies": { - "minipass": "^3.0.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/fs.realpath": { - "version": "1.0.0", - "dev": true, - "license": "ISC" - }, - "node_modules/function-bind": { - "version": "1.1.1", - "dev": true, - "license": "MIT" - }, - "node_modules/gensync": { - "version": "1.0.0-beta.2", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/get-caller-file": { - "version": "2.0.5", - "dev": true, - "license": "ISC", - "engines": { - "node": "6.* || 8.* || >= 10.*" - } - }, - "node_modules/get-intrinsic": { - "version": "1.2.1", - "dev": true, - "license": "MIT", - "dependencies": { - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-proto": "^1.0.1", - "has-symbols": "^1.0.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/get-package-type": { - "version": "0.1.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/get-port": { - "version": "3.2.0", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/get-stream": { - "version": "6.0.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/getenv": { - "version": "1.0.0", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/glob": { - "version": "7.2.3", - "dev": true, - "license": "ISC", - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/glob-parent": { - "version": "5.1.2", - "dev": true, - "license": "ISC", - "optional": true, - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/globals": { - "version": "11.12.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/globby": { - "version": "11.1.0", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.2.9", - "ignore": "^5.2.0", - "merge2": "^1.4.1", - "slash": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/gopd": { - "version": "1.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "get-intrinsic": "^1.1.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/graceful-fs": { - "version": "4.2.11", - "dev": true, - "license": "ISC" - }, - "node_modules/graphql": { - "version": "15.8.0", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "engines": { - "node": ">= 10.x" - } - }, - "node_modules/graphql-tag": { - "version": "2.12.6", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "tslib": "^2.1.0" - }, - "engines": { - "node": ">=10" - }, - "peerDependencies": { - "graphql": "^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0" - } - }, - "node_modules/has": { - "version": "1.0.3", - "dev": true, - "license": "MIT", - "dependencies": { - "function-bind": "^1.1.1" - }, - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/has-flag": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/has-property-descriptors": { - "version": "1.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "get-intrinsic": "^1.1.1" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-proto": { - "version": "1.0.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-symbols": { - "version": "1.0.3", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-tostringtag": { - "version": "1.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "has-symbols": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/hash-base": { - "version": "3.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "inherits": "^2.0.4", - "readable-stream": "^3.6.0", - "safe-buffer": "^5.2.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/hash.js": { - "version": "1.1.7", - "dev": true, - "license": "MIT", - "dependencies": { - "inherits": "^2.0.3", - "minimalistic-assert": "^1.0.1" - } - }, - "node_modules/hdkey": { - "version": "2.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "bs58check": "^2.1.2", - "ripemd160": "^2.0.2", - "safe-buffer": "^5.1.1", - "secp256k1": "^4.0.0" - } - }, - "node_modules/hermes-estree": { - "version": "0.12.0", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true - }, - "node_modules/hermes-parser": { - "version": "0.12.0", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "hermes-estree": "0.12.0" - } - }, - "node_modules/hermes-profile-transformer": { - "version": "0.0.6", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "source-map": "^0.7.3" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/hermes-profile-transformer/node_modules/source-map": { - "version": "0.7.4", - "dev": true, - "license": "BSD-3-Clause", - "optional": true, - "peer": true, - "engines": { - "node": ">= 8" - } - }, - "node_modules/hmac-drbg": { - "version": "1.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "hash.js": "^1.0.3", - "minimalistic-assert": "^1.0.0", - "minimalistic-crypto-utils": "^1.0.1" - } - }, - "node_modules/hosted-git-info": { - "version": "3.0.8", - "dev": true, - "license": "ISC", - "optional": true, - "peer": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/hosted-git-info/node_modules/lru-cache": { - "version": "6.0.0", - "dev": true, - "license": "ISC", - "optional": true, - "peer": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/hosted-git-info/node_modules/yallist": { - "version": "4.0.0", - "dev": true, - "license": "ISC", - "optional": true, - "peer": true - }, - "node_modules/html-escaper": { - "version": "2.0.2", - "dev": true, - "license": "MIT" - }, - "node_modules/http-errors": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "depd": "2.0.0", - "inherits": "2.0.4", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "toidentifier": "1.0.1" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/http-errors/node_modules/statuses": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/https-proxy-agent": { - "version": "5.0.1", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "agent-base": "6", - "debug": "4" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/human-signals": { - "version": "2.1.0", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=10.17.0" - } - }, - "node_modules/iconv-lite": { - "version": "0.4.24", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ieee754": { - "version": "1.2.1", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "BSD-3-Clause" - }, - "node_modules/ignore": { - "version": "5.2.4", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "engines": { - "node": ">= 4" - } - }, - "node_modules/image-size": { - "version": "1.0.2", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "queue": "6.0.2" - }, - "bin": { - "image-size": "bin/image-size.js" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/import-fresh": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "caller-path": "^2.0.0", - "resolve-from": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/import-fresh/node_modules/resolve-from": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/import-local": { - "version": "3.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "pkg-dir": "^4.2.0", - "resolve-cwd": "^3.0.0" - }, - "bin": { - "import-local-fixture": "fixtures/cli.js" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/imurmurhash": { - "version": "0.1.4", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.8.19" - } - }, - "node_modules/indent-string": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/infer-owner": { - "version": "1.0.4", - "dev": true, - "license": "ISC", - "optional": true, - "peer": true - }, - "node_modules/inflight": { - "version": "1.0.6", - "dev": true, - "license": "ISC", - "dependencies": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "node_modules/inherits": { - "version": "2.0.4", - "dev": true, - "license": "ISC" - }, - "node_modules/ini": { - "version": "1.3.8", - "dev": true, - "license": "ISC", - "optional": true, - "peer": true - }, - "node_modules/internal-ip": { - "version": "4.3.0", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "default-gateway": "^4.2.0", - "ipaddr.js": "^1.9.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/invariant": { - "version": "2.2.4", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "loose-envify": "^1.0.0" - } - }, - "node_modules/ip": { - "version": "1.1.8", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true - }, - "node_modules/ip-regex": { - "version": "2.1.0", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/ipaddr.js": { - "version": "1.9.1", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/is-arguments": { - "version": "1.1.1", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-arrayish": { - "version": "0.2.1", - "dev": true, - "license": "MIT" - }, - "node_modules/is-buffer": { - "version": "1.1.6", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true - }, - "node_modules/is-callable": { - "version": "1.2.7", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-core-module": { - "version": "2.12.1", - "dev": true, - "license": "MIT", - "dependencies": { - "has": "^1.0.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-directory": { - "version": "0.3.1", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-docker": { - "version": "2.2.1", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "bin": { - "is-docker": "cli.js" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-extglob": { - "version": "2.1.1", - "dev": true, - "license": "MIT", - "optional": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/is-generator-fn": { - "version": "2.1.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/is-generator-function": { - "version": "1.0.10", - "dev": true, - "license": "MIT", - "dependencies": { - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-glob": { - "version": "4.0.3", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "is-extglob": "^2.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-interactive": { - "version": "1.0.0", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-invalid-path": { - "version": "0.1.0", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "is-glob": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-invalid-path/node_modules/is-extglob": { - "version": "1.0.0", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-invalid-path/node_modules/is-glob": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "is-extglob": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-nan": { - "version": "1.3.2", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-number": { - "version": "7.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/is-path-cwd": { - "version": "2.2.0", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/is-path-inside": { - "version": "3.0.3", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-plain-object": { - "version": "2.0.4", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "isobject": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-root": { - "version": "2.1.0", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/is-stream": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-typed-array": { - "version": "1.1.10", - "dev": true, - "license": "MIT", - "dependencies": { - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.2", - "for-each": "^0.3.3", - "gopd": "^1.0.1", - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-unicode-supported": { - "version": "0.1.0", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-valid-path": { - "version": "0.1.1", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "is-invalid-path": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-wsl": { - "version": "2.2.0", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "is-docker": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/isarray": { - "version": "1.0.0", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true - }, - "node_modules/isexe": { - "version": "2.0.0", - "dev": true, - "license": "ISC" - }, - "node_modules/iso-url": { - "version": "0.4.7", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - } - }, - "node_modules/isobject": { - "version": "3.0.1", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/isomorphic-fetch": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "node-fetch": "^2.6.1", - "whatwg-fetch": "^3.4.1" - } - }, - "node_modules/isomorphic-webcrypto": { - "version": "2.3.8", - "dev": true, - "license": "MIT", - "dependencies": { - "@peculiar/webcrypto": "^1.0.22", - "asmcrypto.js": "^0.22.0", - "b64-lite": "^1.3.1", - "b64u-lite": "^1.0.1", - "msrcrypto": "^1.5.6", - "str2buf": "^1.3.0", - "webcrypto-shim": "^0.1.4" - }, - "optionalDependencies": { - "@unimodules/core": "*", - "@unimodules/react-native-adapter": "*", - "expo-random": "*", - "react-native-securerandom": "^0.1.1" - } - }, - "node_modules/istanbul-lib-coverage": { - "version": "3.2.0", - "dev": true, - "license": "BSD-3-Clause", - "engines": { - "node": ">=8" - } - }, - "node_modules/istanbul-lib-instrument": { - "version": "5.2.1", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "@babel/core": "^7.12.3", - "@babel/parser": "^7.14.7", - "@istanbuljs/schema": "^0.1.2", - "istanbul-lib-coverage": "^3.2.0", - "semver": "^6.3.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/istanbul-lib-report": { - "version": "3.0.0", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "istanbul-lib-coverage": "^3.0.0", - "make-dir": "^3.0.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/istanbul-lib-source-maps": { - "version": "4.0.1", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "debug": "^4.1.1", - "istanbul-lib-coverage": "^3.0.0", - "source-map": "^0.6.1" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/istanbul-reports": { - "version": "3.1.5", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "html-escaper": "^2.0.0", - "istanbul-lib-report": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest": { - "version": "29.6.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/core": "^29.6.1", - "@jest/types": "^29.6.1", - "import-local": "^3.0.2", - "jest-cli": "^29.6.1" - }, - "bin": { - "jest": "bin/jest.js" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - }, - "peerDependencies": { - "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" - }, - "peerDependenciesMeta": { - "node-notifier": { - "optional": true - } - } - }, - "node_modules/jest-changed-files": { - "version": "29.5.0", - "dev": true, - "license": "MIT", - "dependencies": { - "execa": "^5.0.0", - "p-limit": "^3.1.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-circus": { - "version": "29.6.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/environment": "^29.6.1", - "@jest/expect": "^29.6.1", - "@jest/test-result": "^29.6.1", - "@jest/types": "^29.6.1", - "@types/node": "*", - "chalk": "^4.0.0", - "co": "^4.6.0", - "dedent": "^0.7.0", - "is-generator-fn": "^2.0.0", - "jest-each": "^29.6.1", - "jest-matcher-utils": "^29.6.1", - "jest-message-util": "^29.6.1", - "jest-runtime": "^29.6.1", - "jest-snapshot": "^29.6.1", - "jest-util": "^29.6.1", - "p-limit": "^3.1.0", - "pretty-format": "^29.6.1", - "pure-rand": "^6.0.0", - "slash": "^3.0.0", - "stack-utils": "^2.0.3" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-cli": { - "version": "29.6.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/core": "^29.6.1", - "@jest/test-result": "^29.6.1", - "@jest/types": "^29.6.1", - "chalk": "^4.0.0", - "exit": "^0.1.2", - "graceful-fs": "^4.2.9", - "import-local": "^3.0.2", - "jest-config": "^29.6.1", - "jest-util": "^29.6.1", - "jest-validate": "^29.6.1", - "prompts": "^2.0.1", - "yargs": "^17.3.1" - }, - "bin": { - "jest": "bin/jest.js" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - }, - "peerDependencies": { - "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" - }, - "peerDependenciesMeta": { - "node-notifier": { - "optional": true - } - } - }, - "node_modules/jest-config": { - "version": "29.6.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/core": "^7.11.6", - "@jest/test-sequencer": "^29.6.1", - "@jest/types": "^29.6.1", - "babel-jest": "^29.6.1", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "deepmerge": "^4.2.2", - "glob": "^7.1.3", - "graceful-fs": "^4.2.9", - "jest-circus": "^29.6.1", - "jest-environment-node": "^29.6.1", - "jest-get-type": "^29.4.3", - "jest-regex-util": "^29.4.3", - "jest-resolve": "^29.6.1", - "jest-runner": "^29.6.1", - "jest-util": "^29.6.1", - "jest-validate": "^29.6.1", - "micromatch": "^4.0.4", - "parse-json": "^5.2.0", - "pretty-format": "^29.6.1", - "slash": "^3.0.0", - "strip-json-comments": "^3.1.1" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - }, - "peerDependencies": { - "@types/node": "*", - "ts-node": ">=9.0.0" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - }, - "ts-node": { - "optional": true - } - } - }, - "node_modules/jest-diff": { - "version": "29.6.1", - "dev": true, - "license": "MIT", - "dependencies": { - "chalk": "^4.0.0", - "diff-sequences": "^29.4.3", - "jest-get-type": "^29.4.3", - "pretty-format": "^29.6.1" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-docblock": { - "version": "29.4.3", - "dev": true, - "license": "MIT", - "dependencies": { - "detect-newline": "^3.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-each": { - "version": "29.6.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/types": "^29.6.1", - "chalk": "^4.0.0", - "jest-get-type": "^29.4.3", - "jest-util": "^29.6.1", - "pretty-format": "^29.6.1" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-environment-node": { - "version": "29.6.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/environment": "^29.6.1", - "@jest/fake-timers": "^29.6.1", - "@jest/types": "^29.6.1", - "@types/node": "*", - "jest-mock": "^29.6.1", - "jest-util": "^29.6.1" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-get-type": { - "version": "29.4.3", - "dev": true, - "license": "MIT", - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-haste-map": { - "version": "29.6.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/types": "^29.6.1", - "@types/graceful-fs": "^4.1.3", - "@types/node": "*", - "anymatch": "^3.0.3", - "fb-watchman": "^2.0.0", - "graceful-fs": "^4.2.9", - "jest-regex-util": "^29.4.3", - "jest-util": "^29.6.1", - "jest-worker": "^29.6.1", - "micromatch": "^4.0.4", - "walker": "^1.0.8" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - }, - "optionalDependencies": { - "fsevents": "^2.3.2" - } - }, - "node_modules/jest-leak-detector": { - "version": "29.6.1", - "dev": true, - "license": "MIT", - "dependencies": { - "jest-get-type": "^29.4.3", - "pretty-format": "^29.6.1" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-matcher-utils": { - "version": "29.6.1", - "dev": true, - "license": "MIT", - "dependencies": { - "chalk": "^4.0.0", - "jest-diff": "^29.6.1", - "jest-get-type": "^29.4.3", - "pretty-format": "^29.6.1" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-message-util": { - "version": "29.6.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/code-frame": "^7.12.13", - "@jest/types": "^29.6.1", - "@types/stack-utils": "^2.0.0", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "micromatch": "^4.0.4", - "pretty-format": "^29.6.1", - "slash": "^3.0.0", - "stack-utils": "^2.0.3" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-mock": { - "version": "29.6.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/types": "^29.6.1", - "@types/node": "*", - "jest-util": "^29.6.1" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-pnp-resolver": { - "version": "1.2.3", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - }, - "peerDependencies": { - "jest-resolve": "*" - }, - "peerDependenciesMeta": { - "jest-resolve": { - "optional": true - } - } - }, - "node_modules/jest-regex-util": { - "version": "29.4.3", - "dev": true, - "license": "MIT", - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-resolve": { - "version": "29.6.1", - "dev": true, - "license": "MIT", - "dependencies": { - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^29.6.1", - "jest-pnp-resolver": "^1.2.2", - "jest-util": "^29.6.1", - "jest-validate": "^29.6.1", - "resolve": "^1.20.0", - "resolve.exports": "^2.0.0", - "slash": "^3.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-resolve-dependencies": { - "version": "29.6.1", - "dev": true, - "license": "MIT", - "dependencies": { - "jest-regex-util": "^29.4.3", - "jest-snapshot": "^29.6.1" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-runner": { - "version": "29.6.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/console": "^29.6.1", - "@jest/environment": "^29.6.1", - "@jest/test-result": "^29.6.1", - "@jest/transform": "^29.6.1", - "@jest/types": "^29.6.1", - "@types/node": "*", - "chalk": "^4.0.0", - "emittery": "^0.13.1", - "graceful-fs": "^4.2.9", - "jest-docblock": "^29.4.3", - "jest-environment-node": "^29.6.1", - "jest-haste-map": "^29.6.1", - "jest-leak-detector": "^29.6.1", - "jest-message-util": "^29.6.1", - "jest-resolve": "^29.6.1", - "jest-runtime": "^29.6.1", - "jest-util": "^29.6.1", - "jest-watcher": "^29.6.1", - "jest-worker": "^29.6.1", - "p-limit": "^3.1.0", - "source-map-support": "0.5.13" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-runtime": { - "version": "29.6.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/environment": "^29.6.1", - "@jest/fake-timers": "^29.6.1", - "@jest/globals": "^29.6.1", - "@jest/source-map": "^29.6.0", - "@jest/test-result": "^29.6.1", - "@jest/transform": "^29.6.1", - "@jest/types": "^29.6.1", - "@types/node": "*", - "chalk": "^4.0.0", - "cjs-module-lexer": "^1.0.0", - "collect-v8-coverage": "^1.0.0", - "glob": "^7.1.3", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^29.6.1", - "jest-message-util": "^29.6.1", - "jest-mock": "^29.6.1", - "jest-regex-util": "^29.4.3", - "jest-resolve": "^29.6.1", - "jest-snapshot": "^29.6.1", - "jest-util": "^29.6.1", - "slash": "^3.0.0", - "strip-bom": "^4.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-snapshot": { - "version": "29.6.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/core": "^7.11.6", - "@babel/generator": "^7.7.2", - "@babel/plugin-syntax-jsx": "^7.7.2", - "@babel/plugin-syntax-typescript": "^7.7.2", - "@babel/types": "^7.3.3", - "@jest/expect-utils": "^29.6.1", - "@jest/transform": "^29.6.1", - "@jest/types": "^29.6.1", - "@types/prettier": "^2.1.5", - "babel-preset-current-node-syntax": "^1.0.0", - "chalk": "^4.0.0", - "expect": "^29.6.1", - "graceful-fs": "^4.2.9", - "jest-diff": "^29.6.1", - "jest-get-type": "^29.4.3", - "jest-matcher-utils": "^29.6.1", - "jest-message-util": "^29.6.1", - "jest-util": "^29.6.1", - "natural-compare": "^1.4.0", - "pretty-format": "^29.6.1", - "semver": "^7.5.3" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-snapshot/node_modules/lru-cache": { - "version": "6.0.0", - "dev": true, - "license": "ISC", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/jest-snapshot/node_modules/semver": { - "version": "7.5.4", - "dev": true, - "license": "ISC", - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/jest-snapshot/node_modules/yallist": { - "version": "4.0.0", - "dev": true, - "license": "ISC" - }, - "node_modules/jest-util": { - "version": "29.6.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/types": "^29.6.1", - "@types/node": "*", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "graceful-fs": "^4.2.9", - "picomatch": "^2.2.3" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-validate": { - "version": "29.6.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/types": "^29.6.1", - "camelcase": "^6.2.0", - "chalk": "^4.0.0", - "jest-get-type": "^29.4.3", - "leven": "^3.1.0", - "pretty-format": "^29.6.1" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-validate/node_modules/camelcase": { - "version": "6.3.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/jest-watcher": { - "version": "29.6.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/test-result": "^29.6.1", - "@jest/types": "^29.6.1", - "@types/node": "*", - "ansi-escapes": "^4.2.1", - "chalk": "^4.0.0", - "emittery": "^0.13.1", - "jest-util": "^29.6.1", - "string-length": "^4.0.1" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-worker": { - "version": "29.6.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/node": "*", - "jest-util": "^29.6.1", - "merge-stream": "^2.0.0", - "supports-color": "^8.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-worker/node_modules/supports-color": { - "version": "8.1.1", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" - } - }, - "node_modules/jimp-compact": { - "version": "0.16.1", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true - }, - "node_modules/joi": { - "version": "17.9.2", - "dev": true, - "license": "BSD-3-Clause", - "optional": true, - "peer": true, - "dependencies": { - "@hapi/hoek": "^9.0.0", - "@hapi/topo": "^5.0.0", - "@sideway/address": "^4.1.3", - "@sideway/formula": "^3.0.1", - "@sideway/pinpoint": "^2.0.0" - } - }, - "node_modules/join-component": { - "version": "1.1.0", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true - }, - "node_modules/js-tokens": { - "version": "4.0.0", - "dev": true, - "license": "MIT" - }, - "node_modules/js-yaml": { - "version": "3.14.1", - "dev": true, - "license": "MIT", - "dependencies": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/jsc-android": { - "version": "250231.0.0", - "dev": true, - "license": "BSD-2-Clause", - "optional": true, - "peer": true - }, - "node_modules/jsc-safe-url": { - "version": "0.2.4", - "dev": true, - "license": "0BSD", - "optional": true, - "peer": true - }, - "node_modules/jscodeshift": { - "version": "0.14.0", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "@babel/core": "^7.13.16", - "@babel/parser": "^7.13.16", - "@babel/plugin-proposal-class-properties": "^7.13.0", - "@babel/plugin-proposal-nullish-coalescing-operator": "^7.13.8", - "@babel/plugin-proposal-optional-chaining": "^7.13.12", - "@babel/plugin-transform-modules-commonjs": "^7.13.8", - "@babel/preset-flow": "^7.13.13", - "@babel/preset-typescript": "^7.13.0", - "@babel/register": "^7.13.16", - "babel-core": "^7.0.0-bridge.0", - "chalk": "^4.1.2", - "flow-parser": "0.*", - "graceful-fs": "^4.2.4", - "micromatch": "^4.0.4", - "neo-async": "^2.5.0", - "node-dir": "^0.1.17", - "recast": "^0.21.0", - "temp": "^0.8.4", - "write-file-atomic": "^2.3.0" - }, - "bin": { - "jscodeshift": "bin/jscodeshift.js" - }, - "peerDependencies": { - "@babel/preset-env": "^7.1.6" - } - }, - "node_modules/jscodeshift/node_modules/write-file-atomic": { - "version": "2.4.3", - "dev": true, - "license": "ISC", - "optional": true, - "peer": true, - "dependencies": { - "graceful-fs": "^4.1.11", - "imurmurhash": "^0.1.4", - "signal-exit": "^3.0.2" - } - }, - "node_modules/jsesc": { - "version": "2.5.2", - "dev": true, - "license": "MIT", - "bin": { - "jsesc": "bin/jsesc" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/json-parse-better-errors": { - "version": "1.0.2", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true - }, - "node_modules/json-parse-even-better-errors": { - "version": "2.3.1", - "dev": true, - "license": "MIT" - }, - "node_modules/json-schema-deref-sync": { - "version": "0.13.0", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "clone": "^2.1.2", - "dag-map": "~1.0.0", - "is-valid-path": "^0.1.1", - "lodash": "^4.17.13", - "md5": "~2.2.0", - "memory-cache": "~0.2.0", - "traverse": "~0.6.6", - "valid-url": "~1.0.9" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/json-schema-deref-sync/node_modules/md5": { - "version": "2.2.1", - "dev": true, - "license": "BSD-3-Clause", - "optional": true, - "peer": true, - "dependencies": { - "charenc": "~0.0.1", - "crypt": "~0.0.1", - "is-buffer": "~1.1.1" - } - }, - "node_modules/json-text-sequence": { - "version": "0.1.1", - "dev": true, - "license": "MIT", - "dependencies": { - "delimit-stream": "0.1.0" - } - }, - "node_modules/json5": { - "version": "2.2.3", - "dev": true, - "license": "MIT", - "bin": { - "json5": "lib/cli.js" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/jsonfile": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/kind-of": { - "version": "6.0.3", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/kleur": { - "version": "3.0.3", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/leven": { - "version": "3.1.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/lightningcss": { - "version": "1.19.0", - "dev": true, - "license": "MPL-2.0", - "optional": true, - "peer": true, - "dependencies": { - "detect-libc": "^1.0.3" - }, - "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - }, - "optionalDependencies": { - "lightningcss-darwin-arm64": "1.19.0", - "lightningcss-darwin-x64": "1.19.0", - "lightningcss-linux-arm-gnueabihf": "1.19.0", - "lightningcss-linux-arm64-gnu": "1.19.0", - "lightningcss-linux-arm64-musl": "1.19.0", - "lightningcss-linux-x64-gnu": "1.19.0", - "lightningcss-linux-x64-musl": "1.19.0", - "lightningcss-win32-x64-msvc": "1.19.0" - } - }, - "node_modules/lightningcss-linux-x64-gnu": { - "version": "1.19.0", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MPL-2.0", - "optional": true, - "os": [ - "linux" - ], - "peer": true, - "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/lightningcss-linux-x64-musl": { - "version": "1.19.0", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MPL-2.0", - "optional": true, - "os": [ - "linux" - ], - "peer": true, - "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/lines-and-columns": { - "version": "1.2.4", - "dev": true, - "license": "MIT" - }, - "node_modules/locate-path": { - "version": "5.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "p-locate": "^4.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/lodash": { - "version": "4.17.21", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true - }, - "node_modules/lodash.debounce": { - "version": "4.0.8", - "dev": true, - "license": "MIT" - }, - "node_modules/lodash.memoize": { - "version": "4.1.2", - "dev": true, - "license": "MIT" - }, - "node_modules/lodash.throttle": { - "version": "4.1.1", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true - }, - "node_modules/log-symbols": { - "version": "2.2.0", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "chalk": "^2.0.1" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/log-symbols/node_modules/ansi-styles": { - "version": "3.2.1", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/log-symbols/node_modules/chalk": { - "version": "2.4.2", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/log-symbols/node_modules/color-convert": { - "version": "1.9.3", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/log-symbols/node_modules/color-name": { - "version": "1.1.3", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true - }, - "node_modules/log-symbols/node_modules/escape-string-regexp": { - "version": "1.0.5", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/log-symbols/node_modules/has-flag": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/log-symbols/node_modules/supports-color": { - "version": "5.5.0", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/logkitty": { - "version": "0.7.1", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "ansi-fragments": "^0.2.1", - "dayjs": "^1.8.15", - "yargs": "^15.1.0" - }, - "bin": { - "logkitty": "bin/logkitty.js" - } - }, - "node_modules/logkitty/node_modules/cliui": { - "version": "6.0.0", - "dev": true, - "license": "ISC", - "optional": true, - "peer": true, - "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^6.2.0" - } - }, - "node_modules/logkitty/node_modules/wrap-ansi": { - "version": "6.2.0", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/logkitty/node_modules/y18n": { - "version": "4.0.3", - "dev": true, - "license": "ISC", - "optional": true, - "peer": true - }, - "node_modules/logkitty/node_modules/yargs": { - "version": "15.4.1", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "cliui": "^6.0.0", - "decamelize": "^1.2.0", - "find-up": "^4.1.0", - "get-caller-file": "^2.0.1", - "require-directory": "^2.1.1", - "require-main-filename": "^2.0.0", - "set-blocking": "^2.0.0", - "string-width": "^4.2.0", - "which-module": "^2.0.0", - "y18n": "^4.0.0", - "yargs-parser": "^18.1.2" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/logkitty/node_modules/yargs-parser": { - "version": "18.1.3", - "dev": true, - "license": "ISC", - "optional": true, - "peer": true, - "dependencies": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/loose-envify": { - "version": "1.4.0", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "js-tokens": "^3.0.0 || ^4.0.0" - }, - "bin": { - "loose-envify": "cli.js" - } - }, - "node_modules/lru-cache": { - "version": "5.1.1", - "dev": true, - "license": "ISC", - "dependencies": { - "yallist": "^3.0.2" - } - }, - "node_modules/make-dir": { - "version": "3.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "semver": "^6.0.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/make-error": { - "version": "1.3.6", - "dev": true, - "license": "ISC" - }, - "node_modules/makeerror": { - "version": "1.0.12", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "tmpl": "1.0.5" - } - }, - "node_modules/md5": { - "version": "2.3.0", - "dev": true, - "license": "BSD-3-Clause", - "optional": true, - "peer": true, - "dependencies": { - "charenc": "0.0.2", - "crypt": "0.0.2", - "is-buffer": "~1.1.6" - } - }, - "node_modules/md5-file": { - "version": "3.2.3", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "buffer-alloc": "^1.1.0" - }, - "bin": { - "md5-file": "cli.js" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/md5.js": { - "version": "1.3.5", - "dev": true, - "license": "MIT", - "dependencies": { - "hash-base": "^3.0.0", - "inherits": "^2.0.1", - "safe-buffer": "^5.1.2" - } - }, - "node_modules/md5hex": { - "version": "1.0.0", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true - }, - "node_modules/media-typer": { - "version": "0.3.0", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/memoize-one": { - "version": "5.2.1", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true - }, - "node_modules/memory-cache": { - "version": "0.2.0", - "dev": true, - "license": "BSD-2-Clause", - "optional": true, - "peer": true - }, - "node_modules/merge-stream": { - "version": "2.0.0", - "dev": true, - "license": "MIT" - }, - "node_modules/merge2": { - "version": "1.4.1", - "dev": true, - "license": "MIT", - "optional": true, - "engines": { - "node": ">= 8" - } - }, - "node_modules/metro": { - "version": "0.76.7", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "@babel/code-frame": "^7.0.0", - "@babel/core": "^7.20.0", - "@babel/generator": "^7.20.0", - "@babel/parser": "^7.20.0", - "@babel/template": "^7.0.0", - "@babel/traverse": "^7.20.0", - "@babel/types": "^7.20.0", - "accepts": "^1.3.7", - "async": "^3.2.2", - "chalk": "^4.0.0", - "ci-info": "^2.0.0", - "connect": "^3.6.5", - "debug": "^2.2.0", - "denodeify": "^1.2.1", - "error-stack-parser": "^2.0.6", - "graceful-fs": "^4.2.4", - "hermes-parser": "0.12.0", - "image-size": "^1.0.2", - "invariant": "^2.2.4", - "jest-worker": "^27.2.0", - "jsc-safe-url": "^0.2.2", - "lodash.throttle": "^4.1.1", - "metro-babel-transformer": "0.76.7", - "metro-cache": "0.76.7", - "metro-cache-key": "0.76.7", - "metro-config": "0.76.7", - "metro-core": "0.76.7", - "metro-file-map": "0.76.7", - "metro-inspector-proxy": "0.76.7", - "metro-minify-terser": "0.76.7", - "metro-minify-uglify": "0.76.7", - "metro-react-native-babel-preset": "0.76.7", - "metro-resolver": "0.76.7", - "metro-runtime": "0.76.7", - "metro-source-map": "0.76.7", - "metro-symbolicate": "0.76.7", - "metro-transform-plugins": "0.76.7", - "metro-transform-worker": "0.76.7", - "mime-types": "^2.1.27", - "node-fetch": "^2.2.0", - "nullthrows": "^1.1.1", - "rimraf": "^3.0.2", - "serialize-error": "^2.1.0", - "source-map": "^0.5.6", - "strip-ansi": "^6.0.0", - "throat": "^5.0.0", - "ws": "^7.5.1", - "yargs": "^17.6.2" - }, - "bin": { - "metro": "src/cli.js" - }, - "engines": { - "node": ">=16" - } - }, - "node_modules/metro-babel-transformer": { - "version": "0.76.7", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "@babel/core": "^7.20.0", - "hermes-parser": "0.12.0", - "nullthrows": "^1.1.1" - }, - "engines": { - "node": ">=16" - } - }, - "node_modules/metro-cache": { - "version": "0.76.7", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "metro-core": "0.76.7", - "rimraf": "^3.0.2" - }, - "engines": { - "node": ">=16" - } - }, - "node_modules/metro-cache-key": { - "version": "0.76.7", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "engines": { - "node": ">=16" - } - }, - "node_modules/metro-cache/node_modules/rimraf": { - "version": "3.0.2", - "dev": true, - "license": "ISC", - "optional": true, - "peer": true, - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/metro-config": { - "version": "0.76.7", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "connect": "^3.6.5", - "cosmiconfig": "^5.0.5", - "jest-validate": "^29.2.1", - "metro": "0.76.7", - "metro-cache": "0.76.7", - "metro-core": "0.76.7", - "metro-runtime": "0.76.7" - }, - "engines": { - "node": ">=16" - } - }, - "node_modules/metro-core": { - "version": "0.76.7", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "lodash.throttle": "^4.1.1", - "metro-resolver": "0.76.7" - }, - "engines": { - "node": ">=16" - } - }, - "node_modules/metro-file-map": { - "version": "0.76.7", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "anymatch": "^3.0.3", - "debug": "^2.2.0", - "fb-watchman": "^2.0.0", - "graceful-fs": "^4.2.4", - "invariant": "^2.2.4", - "jest-regex-util": "^27.0.6", - "jest-util": "^27.2.0", - "jest-worker": "^27.2.0", - "micromatch": "^4.0.4", - "node-abort-controller": "^3.1.1", - "nullthrows": "^1.1.1", - "walker": "^1.0.7" - }, - "engines": { - "node": ">=16" - }, - "optionalDependencies": { - "fsevents": "^2.3.2" - } - }, - "node_modules/metro-file-map/node_modules/@jest/types": { - "version": "27.5.1", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^16.0.0", - "chalk": "^4.0.0" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/metro-file-map/node_modules/@types/yargs": { - "version": "16.0.5", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "@types/yargs-parser": "*" - } - }, - "node_modules/metro-file-map/node_modules/debug": { - "version": "2.6.9", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/metro-file-map/node_modules/jest-regex-util": { - "version": "27.5.1", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/metro-file-map/node_modules/jest-util": { - "version": "27.5.1", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "@jest/types": "^27.5.1", - "@types/node": "*", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "graceful-fs": "^4.2.9", - "picomatch": "^2.2.3" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/metro-file-map/node_modules/jest-worker": { - "version": "27.5.1", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "@types/node": "*", - "merge-stream": "^2.0.0", - "supports-color": "^8.0.0" - }, - "engines": { - "node": ">= 10.13.0" - } - }, - "node_modules/metro-file-map/node_modules/ms": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true - }, - "node_modules/metro-file-map/node_modules/supports-color": { - "version": "8.1.1", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" - } - }, - "node_modules/metro-inspector-proxy": { - "version": "0.76.7", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "connect": "^3.6.5", - "debug": "^2.2.0", - "node-fetch": "^2.2.0", - "ws": "^7.5.1", - "yargs": "^17.6.2" - }, - "bin": { - "metro-inspector-proxy": "src/cli.js" - }, - "engines": { - "node": ">=16" - } - }, - "node_modules/metro-inspector-proxy/node_modules/debug": { - "version": "2.6.9", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/metro-inspector-proxy/node_modules/ms": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true - }, - "node_modules/metro-inspector-proxy/node_modules/ws": { - "version": "7.5.9", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "engines": { - "node": ">=8.3.0" - }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": "^5.0.2" - }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { - "optional": true - } - } - }, - "node_modules/metro-minify-terser": { - "version": "0.76.7", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "terser": "^5.15.0" - }, - "engines": { - "node": ">=16" - } - }, - "node_modules/metro-minify-uglify": { - "version": "0.76.7", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "uglify-es": "^3.1.9" - }, - "engines": { - "node": ">=16" - } - }, - "node_modules/metro-react-native-babel-preset": { - "version": "0.76.7", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "@babel/core": "^7.20.0", - "@babel/plugin-proposal-async-generator-functions": "^7.0.0", - "@babel/plugin-proposal-class-properties": "^7.18.0", - "@babel/plugin-proposal-export-default-from": "^7.0.0", - "@babel/plugin-proposal-nullish-coalescing-operator": "^7.18.0", - "@babel/plugin-proposal-numeric-separator": "^7.0.0", - "@babel/plugin-proposal-object-rest-spread": "^7.20.0", - "@babel/plugin-proposal-optional-catch-binding": "^7.0.0", - "@babel/plugin-proposal-optional-chaining": "^7.20.0", - "@babel/plugin-syntax-dynamic-import": "^7.8.0", - "@babel/plugin-syntax-export-default-from": "^7.0.0", - "@babel/plugin-syntax-flow": "^7.18.0", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.0.0", - "@babel/plugin-syntax-optional-chaining": "^7.0.0", - "@babel/plugin-transform-arrow-functions": "^7.0.0", - "@babel/plugin-transform-async-to-generator": "^7.20.0", - "@babel/plugin-transform-block-scoping": "^7.0.0", - "@babel/plugin-transform-classes": "^7.0.0", - "@babel/plugin-transform-computed-properties": "^7.0.0", - "@babel/plugin-transform-destructuring": "^7.20.0", - "@babel/plugin-transform-flow-strip-types": "^7.20.0", - "@babel/plugin-transform-function-name": "^7.0.0", - "@babel/plugin-transform-literals": "^7.0.0", - "@babel/plugin-transform-modules-commonjs": "^7.0.0", - "@babel/plugin-transform-named-capturing-groups-regex": "^7.0.0", - "@babel/plugin-transform-parameters": "^7.0.0", - "@babel/plugin-transform-react-display-name": "^7.0.0", - "@babel/plugin-transform-react-jsx": "^7.0.0", - "@babel/plugin-transform-react-jsx-self": "^7.0.0", - "@babel/plugin-transform-react-jsx-source": "^7.0.0", - "@babel/plugin-transform-runtime": "^7.0.0", - "@babel/plugin-transform-shorthand-properties": "^7.0.0", - "@babel/plugin-transform-spread": "^7.0.0", - "@babel/plugin-transform-sticky-regex": "^7.0.0", - "@babel/plugin-transform-typescript": "^7.5.0", - "@babel/plugin-transform-unicode-regex": "^7.0.0", - "@babel/template": "^7.0.0", - "babel-plugin-transform-flow-enums": "^0.0.2", - "react-refresh": "^0.4.0" - }, - "engines": { - "node": ">=16" - }, - "peerDependencies": { - "@babel/core": "*" - } - }, - "node_modules/metro-react-native-babel-transformer": { - "version": "0.76.7", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "@babel/core": "^7.20.0", - "babel-preset-fbjs": "^3.4.0", - "hermes-parser": "0.12.0", - "metro-react-native-babel-preset": "0.76.7", - "nullthrows": "^1.1.1" - }, - "engines": { - "node": ">=16" - }, - "peerDependencies": { - "@babel/core": "*" - } - }, - "node_modules/metro-resolver": { - "version": "0.76.7", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "engines": { - "node": ">=16" - } - }, - "node_modules/metro-runtime": { - "version": "0.76.7", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "@babel/runtime": "^7.0.0", - "react-refresh": "^0.4.0" - }, - "engines": { - "node": ">=16" - } - }, - "node_modules/metro-source-map": { - "version": "0.76.7", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "@babel/traverse": "^7.20.0", - "@babel/types": "^7.20.0", - "invariant": "^2.2.4", - "metro-symbolicate": "0.76.7", - "nullthrows": "^1.1.1", - "ob1": "0.76.7", - "source-map": "^0.5.6", - "vlq": "^1.0.0" - }, - "engines": { - "node": ">=16" - } - }, - "node_modules/metro-source-map/node_modules/source-map": { - "version": "0.5.7", - "dev": true, - "license": "BSD-3-Clause", - "optional": true, - "peer": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/metro-symbolicate": { - "version": "0.76.7", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "invariant": "^2.2.4", - "metro-source-map": "0.76.7", - "nullthrows": "^1.1.1", - "source-map": "^0.5.6", - "through2": "^2.0.1", - "vlq": "^1.0.0" - }, - "bin": { - "metro-symbolicate": "src/index.js" - }, - "engines": { - "node": ">=16" - } - }, - "node_modules/metro-symbolicate/node_modules/source-map": { - "version": "0.5.7", - "dev": true, - "license": "BSD-3-Clause", - "optional": true, - "peer": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/metro-transform-plugins": { - "version": "0.76.7", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "@babel/core": "^7.20.0", - "@babel/generator": "^7.20.0", - "@babel/template": "^7.0.0", - "@babel/traverse": "^7.20.0", - "nullthrows": "^1.1.1" - }, - "engines": { - "node": ">=16" - } - }, - "node_modules/metro-transform-worker": { - "version": "0.76.7", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "@babel/core": "^7.20.0", - "@babel/generator": "^7.20.0", - "@babel/parser": "^7.20.0", - "@babel/types": "^7.20.0", - "babel-preset-fbjs": "^3.4.0", - "metro": "0.76.7", - "metro-babel-transformer": "0.76.7", - "metro-cache": "0.76.7", - "metro-cache-key": "0.76.7", - "metro-source-map": "0.76.7", - "metro-transform-plugins": "0.76.7", - "nullthrows": "^1.1.1" - }, - "engines": { - "node": ">=16" - } - }, - "node_modules/metro/node_modules/ci-info": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true - }, - "node_modules/metro/node_modules/debug": { - "version": "2.6.9", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/metro/node_modules/jest-worker": { - "version": "27.5.1", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "@types/node": "*", - "merge-stream": "^2.0.0", - "supports-color": "^8.0.0" - }, - "engines": { - "node": ">= 10.13.0" - } - }, - "node_modules/metro/node_modules/ms": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true - }, - "node_modules/metro/node_modules/rimraf": { - "version": "3.0.2", - "dev": true, - "license": "ISC", - "optional": true, - "peer": true, - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/metro/node_modules/serialize-error": { - "version": "2.1.0", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/metro/node_modules/source-map": { - "version": "0.5.7", - "dev": true, - "license": "BSD-3-Clause", - "optional": true, - "peer": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/metro/node_modules/supports-color": { - "version": "8.1.1", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" - } - }, - "node_modules/metro/node_modules/ws": { - "version": "7.5.9", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "engines": { - "node": ">=8.3.0" - }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": "^5.0.2" - }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { - "optional": true - } - } - }, - "node_modules/micromatch": { - "version": "4.0.5", - "dev": true, - "license": "MIT", - "dependencies": { - "braces": "^3.0.2", - "picomatch": "^2.3.1" - }, - "engines": { - "node": ">=8.6" - } - }, - "node_modules/mime": { - "version": "2.6.0", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "bin": { - "mime": "cli.js" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/mime-db": { - "version": "1.52.0", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mime-types": { - "version": "2.1.35", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "mime-db": "1.52.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mimic-fn": { - "version": "2.1.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/minimalistic-assert": { - "version": "1.0.1", - "dev": true, - "license": "ISC" - }, - "node_modules/minimalistic-crypto-utils": { - "version": "1.0.1", - "dev": true, - "license": "MIT" - }, - "node_modules/minimatch": { - "version": "3.1.2", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/minimist": { - "version": "1.2.8", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/minipass": { - "version": "3.1.6", - "dev": true, - "license": "ISC", - "optional": true, - "peer": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/minipass-collect": { - "version": "1.0.2", - "dev": true, - "license": "ISC", - "optional": true, - "peer": true, - "dependencies": { - "minipass": "^3.0.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/minipass-flush": { - "version": "1.0.5", - "dev": true, - "license": "ISC", - "optional": true, - "peer": true, - "dependencies": { - "minipass": "^3.0.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/minipass-pipeline": { - "version": "1.2.4", - "dev": true, - "license": "ISC", - "optional": true, - "peer": true, - "dependencies": { - "minipass": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/minipass/node_modules/yallist": { - "version": "4.0.0", - "dev": true, - "license": "ISC", - "optional": true, - "peer": true - }, - "node_modules/minizlib": { - "version": "2.1.2", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "minipass": "^3.0.0", - "yallist": "^4.0.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/minizlib/node_modules/yallist": { - "version": "4.0.0", - "dev": true, - "license": "ISC", - "optional": true, - "peer": true - }, - "node_modules/mkdirp": { - "version": "0.5.6", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "minimist": "^1.2.6" - }, - "bin": { - "mkdirp": "bin/cmd.js" - } - }, - "node_modules/ms": { - "version": "2.1.2", - "dev": true, - "license": "MIT" - }, - "node_modules/msrcrypto": { - "version": "1.5.8", - "dev": true, - "license": "Apache-2.0" - }, - "node_modules/mv": { - "version": "2.1.1", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "mkdirp": "~0.5.1", - "ncp": "~2.0.0", - "rimraf": "~2.4.0" - }, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/mv/node_modules/glob": { - "version": "6.0.4", - "dev": true, - "license": "ISC", - "optional": true, - "peer": true, - "dependencies": { - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "2 || 3", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - } - }, - "node_modules/mv/node_modules/rimraf": { - "version": "2.4.5", - "dev": true, - "license": "ISC", - "optional": true, - "peer": true, - "dependencies": { - "glob": "^6.0.1" - }, - "bin": { - "rimraf": "bin.js" - } - }, - "node_modules/mz": { - "version": "2.7.0", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "any-promise": "^1.0.0", - "object-assign": "^4.0.1", - "thenify-all": "^1.0.0" - } - }, - "node_modules/nanoid": { - "version": "3.3.6", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "MIT", - "optional": true, - "peer": true, - "bin": { - "nanoid": "bin/nanoid.cjs" - }, - "engines": { - "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" - } - }, - "node_modules/natural-compare": { - "version": "1.4.0", - "dev": true, - "license": "MIT" - }, - "node_modules/ncp": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "bin": { - "ncp": "bin/ncp" - } - }, - "node_modules/negotiator": { - "version": "0.6.3", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/neo-async": { - "version": "2.6.2", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true - }, - "node_modules/nested-error-stacks": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true - }, - "node_modules/nice-try": { - "version": "1.0.5", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true - }, - "node_modules/nocache": { - "version": "3.0.4", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "engines": { - "node": ">=12.0.0" - } - }, - "node_modules/node-abort-controller": { - "version": "3.1.1", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true - }, - "node_modules/node-addon-api": { - "version": "2.0.2", - "dev": true, - "license": "MIT" - }, - "node_modules/node-dir": { - "version": "0.1.17", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "minimatch": "^3.0.2" - }, - "engines": { - "node": ">= 0.10.5" - } - }, - "node_modules/node-fetch": { - "version": "2.6.12", - "dev": true, - "license": "MIT", - "dependencies": { - "whatwg-url": "^5.0.0" - }, - "engines": { - "node": "4.x || >=6.0.0" - }, - "peerDependencies": { - "encoding": "^0.1.0" - }, - "peerDependenciesMeta": { - "encoding": { - "optional": true - } - } - }, - "node_modules/node-forge": { - "version": "1.3.1", - "dev": true, - "license": "(BSD-3-Clause OR GPL-2.0)", - "optional": true, - "peer": true, - "engines": { - "node": ">= 6.13.0" - } - }, - "node_modules/node-gyp-build": { - "version": "4.6.0", - "dev": true, - "license": "MIT", - "bin": { - "node-gyp-build": "bin.js", - "node-gyp-build-optional": "optional.js", - "node-gyp-build-test": "build-test.js" - } - }, - "node_modules/node-int64": { - "version": "0.4.0", - "dev": true, - "license": "MIT" - }, - "node_modules/node-releases": { - "version": "2.0.13", - "dev": true, - "license": "MIT" - }, - "node_modules/node-stream-zip": { - "version": "1.15.0", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "engines": { - "node": ">=0.12.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/antelle" - } - }, - "node_modules/normalize-path": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/npm-package-arg": { - "version": "7.0.0", - "dev": true, - "license": "ISC", - "optional": true, - "peer": true, - "dependencies": { - "hosted-git-info": "^3.0.2", - "osenv": "^0.1.5", - "semver": "^5.6.0", - "validate-npm-package-name": "^3.0.0" - } - }, - "node_modules/npm-package-arg/node_modules/semver": { - "version": "5.7.2", - "dev": true, - "license": "ISC", - "optional": true, - "peer": true, - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/npm-run-path": { - "version": "4.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "path-key": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/nullthrows": { - "version": "1.1.1", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true - }, - "node_modules/ob1": { - "version": "0.76.7", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "engines": { - "node": ">=16" - } - }, - "node_modules/object-assign": { - "version": "4.1.1", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-inspect": { - "version": "1.12.3", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object-is": { - "version": "1.1.5", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object-keys": { - "version": "1.1.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/on-finished": { - "version": "2.4.1", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "ee-first": "1.1.1" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/on-headers": { - "version": "1.0.2", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/once": { - "version": "1.4.0", - "dev": true, - "license": "ISC", - "dependencies": { - "wrappy": "1" - } - }, - "node_modules/onetime": { - "version": "5.1.2", - "dev": true, - "license": "MIT", - "dependencies": { - "mimic-fn": "^2.1.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/open": { - "version": "8.4.2", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "define-lazy-prop": "^2.0.0", - "is-docker": "^2.1.1", - "is-wsl": "^2.2.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/ora": { - "version": "3.4.0", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "chalk": "^2.4.2", - "cli-cursor": "^2.1.0", - "cli-spinners": "^2.0.0", - "log-symbols": "^2.2.0", - "strip-ansi": "^5.2.0", - "wcwidth": "^1.0.1" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/ora/node_modules/ansi-regex": { - "version": "4.1.1", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/ora/node_modules/ansi-styles": { - "version": "3.2.1", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/ora/node_modules/chalk": { - "version": "2.4.2", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/ora/node_modules/color-convert": { - "version": "1.9.3", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/ora/node_modules/color-name": { - "version": "1.1.3", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true - }, - "node_modules/ora/node_modules/escape-string-regexp": { - "version": "1.0.5", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/ora/node_modules/has-flag": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/ora/node_modules/strip-ansi": { - "version": "5.2.0", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "ansi-regex": "^4.1.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/ora/node_modules/supports-color": { - "version": "5.5.0", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/os-homedir": { - "version": "1.0.2", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/os-tmpdir": { - "version": "1.0.2", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/osenv": { - "version": "0.1.5", - "dev": true, - "license": "ISC", - "optional": true, - "peer": true, - "dependencies": { - "os-homedir": "^1.0.0", - "os-tmpdir": "^1.0.0" - } - }, - "node_modules/p-finally": { - "version": "1.0.0", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/p-limit": { - "version": "3.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "yocto-queue": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-locate": { - "version": "4.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "p-limit": "^2.2.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/p-locate/node_modules/p-limit": { - "version": "2.3.0", - "dev": true, - "license": "MIT", - "dependencies": { - "p-try": "^2.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-map": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "aggregate-error": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-try": { - "version": "2.2.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/parse-json": { - "version": "5.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/code-frame": "^7.0.0", - "error-ex": "^1.3.1", - "json-parse-even-better-errors": "^2.3.0", - "lines-and-columns": "^1.1.6" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/parse-png": { - "version": "2.1.0", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "pngjs": "^3.3.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/parseurl": { - "version": "1.3.3", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/password-prompt": { - "version": "1.1.3", - "dev": true, - "license": "0BSD", - "optional": true, - "peer": true, - "dependencies": { - "ansi-escapes": "^4.3.2", - "cross-spawn": "^7.0.3" - } - }, - "node_modules/path-browserify": { - "version": "1.0.1", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true - }, - "node_modules/path-exists": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/path-is-absolute": { - "version": "1.0.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/path-key": { - "version": "3.1.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/path-parse": { - "version": "1.0.7", - "dev": true, - "license": "MIT" - }, - "node_modules/path-type": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/pbkdf2": { - "version": "3.1.2", - "dev": true, - "license": "MIT", - "dependencies": { - "create-hash": "^1.1.2", - "create-hmac": "^1.1.4", - "ripemd160": "^2.0.1", - "safe-buffer": "^5.0.1", - "sha.js": "^2.4.8" - }, - "engines": { - "node": ">=0.12" - } - }, - "node_modules/picocolors": { - "version": "1.0.0", - "dev": true, - "license": "ISC" - }, - "node_modules/picomatch": { - "version": "2.3.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/pify": { - "version": "4.0.1", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/pirates": { - "version": "4.0.6", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 6" - } - }, - "node_modules/pkg-dir": { - "version": "4.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "find-up": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/pkg-up": { - "version": "3.1.0", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "find-up": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/pkg-up/node_modules/find-up": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "locate-path": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/pkg-up/node_modules/locate-path": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/pkg-up/node_modules/p-limit": { - "version": "2.3.0", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "p-try": "^2.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/pkg-up/node_modules/p-locate": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "p-limit": "^2.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/pkg-up/node_modules/path-exists": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/plist": { - "version": "3.1.0", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "@xmldom/xmldom": "^0.8.8", - "base64-js": "^1.5.1", - "xmlbuilder": "^15.1.1" - }, - "engines": { - "node": ">=10.4.0" - } - }, - "node_modules/plist/node_modules/@xmldom/xmldom": { - "version": "0.8.10", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/plist/node_modules/xmlbuilder": { - "version": "15.1.1", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "engines": { - "node": ">=8.0" - } - }, - "node_modules/pngjs": { - "version": "3.4.0", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/postcss": { - "version": "8.4.27", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/postcss" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "nanoid": "^3.3.6", - "picocolors": "^1.0.0", - "source-map-js": "^1.0.2" - }, - "engines": { - "node": "^10 || ^12 || >=14" - } - }, - "node_modules/pretty-bytes": { - "version": "5.6.0", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/pretty-format": { - "version": "29.6.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/schemas": "^29.6.0", - "ansi-styles": "^5.0.0", - "react-is": "^18.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/pretty-format/node_modules/ansi-styles": { - "version": "5.2.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/process": { - "version": "0.11.10", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.6.0" - } - }, - "node_modules/process-nextick-args": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true - }, - "node_modules/progress": { - "version": "2.0.3", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/promise": { - "version": "7.3.1", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "asap": "~2.0.3" - } - }, - "node_modules/promise-inflight": { - "version": "1.0.1", - "dev": true, - "license": "ISC", - "optional": true, - "peer": true - }, - "node_modules/prompts": { - "version": "2.4.2", - "dev": true, - "license": "MIT", - "dependencies": { - "kleur": "^3.0.3", - "sisteransi": "^1.0.5" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/prop-types": { - "version": "15.8.1", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "loose-envify": "^1.4.0", - "object-assign": "^4.1.1", - "react-is": "^16.13.1" - } - }, - "node_modules/prop-types/node_modules/react-is": { - "version": "16.13.1", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true - }, - "node_modules/pump": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, - "node_modules/pure-rand": { - "version": "6.0.2", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://github.com/sponsors/dubzzz" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/fast-check" - } - ], - "license": "MIT" - }, - "node_modules/pvtsutils": { - "version": "1.3.2", - "dev": true, - "license": "MIT", - "dependencies": { - "tslib": "^2.4.0" - } - }, - "node_modules/pvutils": { - "version": "1.1.3", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/qrcode-terminal": { - "version": "0.11.0", - "dev": true, - "optional": true, - "peer": true, - "bin": { - "qrcode-terminal": "bin/qrcode-terminal.js" - } - }, - "node_modules/qs": { - "version": "6.11.0", - "dev": true, - "license": "BSD-3-Clause", - "optional": true, - "peer": true, - "dependencies": { - "side-channel": "^1.0.4" - }, - "engines": { - "node": ">=0.6" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/querystringify": { - "version": "2.2.0", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true - }, - "node_modules/queue": { - "version": "6.0.2", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "inherits": "~2.0.3" - } - }, - "node_modules/queue-microtask": { - "version": "1.2.3", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT", - "optional": true - }, - "node_modules/randombytes": { - "version": "2.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "safe-buffer": "^5.1.0" - } - }, - "node_modules/range-parser": { - "version": "1.2.1", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/raw-body": { - "version": "2.5.2", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "bytes": "3.1.2", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "unpipe": "1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/rc": { - "version": "1.2.8", - "dev": true, - "license": "(BSD-2-Clause OR MIT OR Apache-2.0)", - "optional": true, - "peer": true, - "dependencies": { - "deep-extend": "^0.6.0", - "ini": "~1.3.0", - "minimist": "^1.2.0", - "strip-json-comments": "~2.0.1" - }, - "bin": { - "rc": "cli.js" - } - }, - "node_modules/rc/node_modules/strip-json-comments": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/react": { - "version": "18.2.0", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "loose-envify": "^1.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/react-devtools-core": { - "version": "4.28.0", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "shell-quote": "^1.6.1", - "ws": "^7" - } - }, - "node_modules/react-devtools-core/node_modules/ws": { - "version": "7.5.9", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "engines": { - "node": ">=8.3.0" - }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": "^5.0.2" - }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { - "optional": true - } - } - }, - "node_modules/react-is": { - "version": "18.2.0", - "dev": true, - "license": "MIT" - }, - "node_modules/react-native": { - "version": "0.72.3", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "@jest/create-cache-key-function": "^29.2.1", - "@react-native-community/cli": "11.3.5", - "@react-native-community/cli-platform-android": "11.3.5", - "@react-native-community/cli-platform-ios": "11.3.5", - "@react-native/assets-registry": "^0.72.0", - "@react-native/codegen": "^0.72.6", - "@react-native/gradle-plugin": "^0.72.11", - "@react-native/js-polyfills": "^0.72.1", - "@react-native/normalize-colors": "^0.72.0", - "@react-native/virtualized-lists": "^0.72.6", - "abort-controller": "^3.0.0", - "anser": "^1.4.9", - "base64-js": "^1.1.2", - "deprecated-react-native-prop-types": "4.1.0", - "event-target-shim": "^5.0.1", - "flow-enums-runtime": "^0.0.5", - "invariant": "^2.2.4", - "jest-environment-node": "^29.2.1", - "jsc-android": "^250231.0.0", - "memoize-one": "^5.0.0", - "metro-runtime": "0.76.7", - "metro-source-map": "0.76.7", - "mkdirp": "^0.5.1", - "nullthrows": "^1.1.1", - "pretty-format": "^26.5.2", - "promise": "^8.3.0", - "react-devtools-core": "^4.27.2", - "react-refresh": "^0.4.0", - "react-shallow-renderer": "^16.15.0", - "regenerator-runtime": "^0.13.2", - "scheduler": "0.24.0-canary-efb381bbf-20230505", - "stacktrace-parser": "^0.1.10", - "use-sync-external-store": "^1.0.0", - "whatwg-fetch": "^3.0.0", - "ws": "^6.2.2", - "yargs": "^17.6.2" - }, - "bin": { - "react-native": "cli.js" - }, - "engines": { - "node": ">=16" - }, - "peerDependencies": { - "react": "18.2.0" - } - }, - "node_modules/react-native-securerandom": { - "version": "0.1.1", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "base64-js": "*" - }, - "peerDependencies": { - "react-native": "*" - } - }, - "node_modules/react-native/node_modules/@jest/types": { - "version": "26.6.2", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^15.0.0", - "chalk": "^4.0.0" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/react-native/node_modules/@types/yargs": { - "version": "15.0.15", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "@types/yargs-parser": "*" - } - }, - "node_modules/react-native/node_modules/pretty-format": { - "version": "26.6.2", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "@jest/types": "^26.6.2", - "ansi-regex": "^5.0.0", - "ansi-styles": "^4.0.0", - "react-is": "^17.0.1" - }, - "engines": { - "node": ">= 10" - } - }, - "node_modules/react-native/node_modules/promise": { - "version": "8.3.0", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "asap": "~2.0.6" - } - }, - "node_modules/react-native/node_modules/react-is": { - "version": "17.0.2", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true - }, - "node_modules/react-native/node_modules/ws": { - "version": "6.2.2", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "async-limiter": "~1.0.0" - } - }, - "node_modules/react-refresh": { - "version": "0.4.3", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/react-shallow-renderer": { - "version": "16.15.0", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "object-assign": "^4.1.1", - "react-is": "^16.12.0 || ^17.0.0 || ^18.0.0" - }, - "peerDependencies": { - "react": "^16.0.0 || ^17.0.0 || ^18.0.0" - } - }, - "node_modules/readable-stream": { - "version": "3.6.2", - "dev": true, - "license": "MIT", - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/readline": { - "version": "1.3.0", - "dev": true, - "license": "BSD", - "optional": true, - "peer": true - }, - "node_modules/recast": { - "version": "0.21.5", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "ast-types": "0.15.2", - "esprima": "~4.0.0", - "source-map": "~0.6.1", - "tslib": "^2.0.1" - }, - "engines": { - "node": ">= 4" - } - }, - "node_modules/regenerate": { - "version": "1.4.2", - "dev": true, - "license": "MIT" - }, - "node_modules/regenerate-unicode-properties": { - "version": "10.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "regenerate": "^1.4.2" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/regenerator-runtime": { - "version": "0.13.11", - "dev": true, - "license": "MIT" - }, - "node_modules/regenerator-transform": { - "version": "0.15.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.8.4" - } - }, - "node_modules/regexpu-core": { - "version": "5.3.2", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/regjsgen": "^0.8.0", - "regenerate": "^1.4.2", - "regenerate-unicode-properties": "^10.1.0", - "regjsparser": "^0.9.1", - "unicode-match-property-ecmascript": "^2.0.0", - "unicode-match-property-value-ecmascript": "^2.1.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/regjsparser": { - "version": "0.9.1", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "jsesc": "~0.5.0" - }, - "bin": { - "regjsparser": "bin/parser" - } - }, - "node_modules/regjsparser/node_modules/jsesc": { - "version": "0.5.0", - "dev": true, - "bin": { - "jsesc": "bin/jsesc" - } - }, - "node_modules/remove-trailing-slash": { - "version": "0.1.1", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true - }, - "node_modules/require-directory": { - "version": "2.1.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/require-from-string": { - "version": "2.0.2", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/require-main-filename": { - "version": "2.0.0", - "dev": true, - "license": "ISC", - "optional": true, - "peer": true - }, - "node_modules/requireg": { - "version": "0.2.2", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "nested-error-stacks": "~2.0.1", - "rc": "~1.2.7", - "resolve": "~1.7.1" - }, - "engines": { - "node": ">= 4.0.0" - } - }, - "node_modules/requireg/node_modules/resolve": { - "version": "1.7.1", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "path-parse": "^1.0.5" - } - }, - "node_modules/requires-port": { - "version": "1.0.0", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true - }, - "node_modules/reselect": { - "version": "4.1.8", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true - }, - "node_modules/resolve": { - "version": "1.22.2", - "dev": true, - "license": "MIT", - "dependencies": { - "is-core-module": "^2.11.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - }, - "bin": { - "resolve": "bin/resolve" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/resolve-cwd": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "resolve-from": "^5.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/resolve-from": { - "version": "5.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/resolve.exports": { - "version": "2.0.2", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - } - }, - "node_modules/restore-cursor": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "onetime": "^2.0.0", - "signal-exit": "^3.0.2" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/restore-cursor/node_modules/mimic-fn": { - "version": "1.2.0", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/restore-cursor/node_modules/onetime": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "mimic-fn": "^1.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/reusify": { - "version": "1.0.4", - "dev": true, - "license": "MIT", - "optional": true, - "engines": { - "iojs": ">=1.0.0", - "node": ">=0.10.0" - } - }, - "node_modules/rimraf": { - "version": "2.7.1", - "dev": true, - "license": "ISC", - "optional": true, - "peer": true, - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - } - }, - "node_modules/ripemd160": { - "version": "2.0.2", - "dev": true, - "license": "MIT", - "dependencies": { - "hash-base": "^3.0.0", - "inherits": "^2.0.1" - } - }, - "node_modules/run-parallel": { - "version": "1.2.0", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT", - "optional": true, - "dependencies": { - "queue-microtask": "^1.2.2" - } - }, - "node_modules/safe-buffer": { - "version": "5.2.1", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT" - }, - "node_modules/safe-json-stringify": { - "version": "1.2.0", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true - }, - "node_modules/safer-buffer": { - "version": "2.1.2", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true - }, - "node_modules/sax": { - "version": "1.2.4", - "dev": true, - "license": "ISC", - "optional": true, - "peer": true - }, - "node_modules/scheduler": { - "version": "0.24.0-canary-efb381bbf-20230505", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "loose-envify": "^1.1.0" - } - }, - "node_modules/secp256k1": { - "version": "4.0.3", - "dev": true, - "hasInstallScript": true, - "license": "MIT", - "dependencies": { - "elliptic": "^6.5.4", - "node-addon-api": "^2.0.0", - "node-gyp-build": "^4.2.0" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/semver": { - "version": "6.3.1", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/send": { - "version": "0.18.0", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "fresh": "0.5.2", - "http-errors": "2.0.0", - "mime": "1.6.0", - "ms": "2.1.3", - "on-finished": "2.4.1", - "range-parser": "~1.2.1", - "statuses": "2.0.1" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/send/node_modules/debug": { - "version": "2.6.9", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/send/node_modules/debug/node_modules/ms": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true - }, - "node_modules/send/node_modules/mime": { - "version": "1.6.0", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "bin": { - "mime": "cli.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/send/node_modules/ms": { - "version": "2.1.3", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true - }, - "node_modules/send/node_modules/statuses": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/serialize-error": { - "version": "6.0.0", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "type-fest": "^0.12.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/serialize-error/node_modules/type-fest": { - "version": "0.12.0", - "dev": true, - "license": "(MIT OR CC0-1.0)", - "optional": true, - "peer": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/serve-static": { - "version": "1.15.0", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "parseurl": "~1.3.3", - "send": "0.18.0" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/set-blocking": { - "version": "2.0.0", - "dev": true, - "license": "ISC", - "optional": true, - "peer": true - }, - "node_modules/setimmediate": { - "version": "1.0.5", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true - }, - "node_modules/setprototypeof": { - "version": "1.2.0", - "dev": true, - "license": "ISC", - "optional": true, - "peer": true - }, - "node_modules/sha.js": { - "version": "2.4.11", - "dev": true, - "license": "(MIT AND BSD-3-Clause)", - "dependencies": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - }, - "bin": { - "sha.js": "bin.js" - } - }, - "node_modules/shallow-clone": { - "version": "3.0.1", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "kind-of": "^6.0.2" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/shebang-command": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "shebang-regex": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/shebang-regex": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/shell-quote": { - "version": "1.8.1", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/side-channel": { - "version": "1.0.4", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "call-bind": "^1.0.0", - "get-intrinsic": "^1.0.2", - "object-inspect": "^1.9.0" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/signal-exit": { - "version": "3.0.7", - "dev": true, - "license": "ISC" - }, - "node_modules/simple-cbor": { - "version": "0.4.1", - "dev": true, - "license": "ISC" - }, - "node_modules/simple-plist": { - "version": "1.3.1", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "bplist-creator": "0.1.0", - "bplist-parser": "0.3.1", - "plist": "^3.0.5" - } - }, - "node_modules/simple-plist/node_modules/bplist-parser": { - "version": "0.3.1", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "big-integer": "1.6.x" - }, - "engines": { - "node": ">= 5.10.0" - } - }, - "node_modules/sisteransi": { - "version": "1.0.5", - "dev": true, - "license": "MIT" - }, - "node_modules/slash": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/slice-ansi": { - "version": "2.1.0", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "ansi-styles": "^3.2.0", - "astral-regex": "^1.0.0", - "is-fullwidth-code-point": "^2.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/slice-ansi/node_modules/ansi-styles": { - "version": "3.2.1", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/slice-ansi/node_modules/color-convert": { - "version": "1.9.3", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/slice-ansi/node_modules/color-name": { - "version": "1.1.3", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true - }, - "node_modules/slice-ansi/node_modules/is-fullwidth-code-point": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/slugify": { - "version": "1.6.6", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/source-map": { - "version": "0.6.1", - "dev": true, - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/source-map-js": { - "version": "1.0.2", - "dev": true, - "license": "BSD-3-Clause", - "optional": true, - "peer": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/source-map-support": { - "version": "0.5.13", - "dev": true, - "license": "MIT", - "dependencies": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } - }, - "node_modules/split": { - "version": "1.0.1", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "through": "2" - }, - "engines": { - "node": "*" - } - }, - "node_modules/sprintf-js": { - "version": "1.0.3", - "dev": true, - "license": "BSD-3-Clause" - }, - "node_modules/ssri": { - "version": "8.0.1", - "dev": true, - "license": "ISC", - "optional": true, - "peer": true, - "dependencies": { - "minipass": "^3.1.1" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/stack-utils": { - "version": "2.0.6", - "dev": true, - "license": "MIT", - "dependencies": { - "escape-string-regexp": "^2.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/stackframe": { - "version": "1.3.4", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true - }, - "node_modules/stacktrace-parser": { - "version": "0.1.10", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "type-fest": "^0.7.1" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/stacktrace-parser/node_modules/type-fest": { - "version": "0.7.1", - "dev": true, - "license": "(MIT OR CC0-1.0)", - "optional": true, - "peer": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/statuses": { - "version": "1.5.0", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/str2buf": { - "version": "1.3.0", - "dev": true, - "license": "MIT" - }, - "node_modules/stream-browserify": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "inherits": "~2.0.4", - "readable-stream": "^3.5.0" - } - }, - "node_modules/stream-buffers": { - "version": "2.2.0", - "dev": true, - "license": "Unlicense", - "optional": true, - "peer": true, - "engines": { - "node": ">= 0.10.0" - } - }, - "node_modules/string_decoder": { - "version": "1.3.0", - "dev": true, - "license": "MIT", - "dependencies": { - "safe-buffer": "~5.2.0" - } - }, - "node_modules/string-length": { - "version": "4.0.2", - "dev": true, - "license": "MIT", - "dependencies": { - "char-regex": "^1.0.2", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/string-width": { - "version": "4.2.3", - "dev": true, - "license": "MIT", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-ansi": { - "version": "6.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-bom": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-eof": { - "version": "1.0.0", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/strip-final-newline": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/strip-json-comments": { - "version": "3.1.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/strnum": { - "version": "1.0.5", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true - }, - "node_modules/structured-headers": { - "version": "0.4.1", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true - }, - "node_modules/sucrase": { - "version": "3.34.0", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "@jridgewell/gen-mapping": "^0.3.2", - "commander": "^4.0.0", - "glob": "7.1.6", - "lines-and-columns": "^1.1.6", - "mz": "^2.7.0", - "pirates": "^4.0.1", - "ts-interface-checker": "^0.1.9" - }, - "bin": { - "sucrase": "bin/sucrase", - "sucrase-node": "bin/sucrase-node" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/sucrase/node_modules/commander": { - "version": "4.1.1", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "engines": { - "node": ">= 6" - } - }, - "node_modules/sucrase/node_modules/glob": { - "version": "7.1.6", - "dev": true, - "license": "ISC", - "optional": true, - "peer": true, - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/sudo-prompt": { - "version": "8.2.5", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true - }, - "node_modules/supports-color": { - "version": "7.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/supports-hyperlinks": { - "version": "2.3.0", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "has-flag": "^4.0.0", - "supports-color": "^7.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/supports-preserve-symlinks-flag": { - "version": "1.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/tar": { - "version": "6.1.15", - "dev": true, - "license": "ISC", - "optional": true, - "peer": true, - "dependencies": { - "chownr": "^2.0.0", - "fs-minipass": "^2.0.0", - "minipass": "^5.0.0", - "minizlib": "^2.1.1", - "mkdirp": "^1.0.3", - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/tar/node_modules/minipass": { - "version": "5.0.0", - "dev": true, - "license": "ISC", - "optional": true, - "peer": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/tar/node_modules/mkdirp": { - "version": "1.0.4", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "bin": { - "mkdirp": "bin/cmd.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/tar/node_modules/yallist": { - "version": "4.0.0", - "dev": true, - "license": "ISC", - "optional": true, - "peer": true - }, - "node_modules/temp": { - "version": "0.8.4", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "rimraf": "~2.6.2" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/temp-dir": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/temp/node_modules/rimraf": { - "version": "2.6.3", - "dev": true, - "license": "ISC", - "optional": true, - "peer": true, - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - } - }, - "node_modules/tempy": { - "version": "0.7.1", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "del": "^6.0.0", - "is-stream": "^2.0.0", - "temp-dir": "^2.0.0", - "type-fest": "^0.16.0", - "unique-string": "^2.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/tempy/node_modules/type-fest": { - "version": "0.16.0", - "dev": true, - "license": "(MIT OR CC0-1.0)", - "optional": true, - "peer": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/terminal-link": { - "version": "2.1.1", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "ansi-escapes": "^4.2.1", - "supports-hyperlinks": "^2.0.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/terser": { - "version": "5.19.2", - "dev": true, - "license": "BSD-2-Clause", - "optional": true, - "peer": true, - "dependencies": { - "@jridgewell/source-map": "^0.3.3", - "acorn": "^8.8.2", - "commander": "^2.20.0", - "source-map-support": "~0.5.20" - }, - "bin": { - "terser": "bin/terser" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/terser/node_modules/source-map-support": { - "version": "0.5.21", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } - }, - "node_modules/test-exclude": { - "version": "6.0.0", - "dev": true, - "license": "ISC", - "dependencies": { - "@istanbuljs/schema": "^0.1.2", - "glob": "^7.1.4", - "minimatch": "^3.0.4" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/text-table": { - "version": "0.2.0", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true - }, - "node_modules/thenify": { - "version": "3.3.1", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "any-promise": "^1.0.0" - } - }, - "node_modules/thenify-all": { - "version": "1.6.0", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "thenify": ">= 3.1.0 < 4" - }, - "engines": { - "node": ">=0.8" - } - }, - "node_modules/throat": { - "version": "5.0.0", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true - }, - "node_modules/through": { - "version": "2.3.8", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true - }, - "node_modules/through2": { - "version": "2.0.5", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "readable-stream": "~2.3.6", - "xtend": "~4.0.1" - } - }, - "node_modules/through2/node_modules/readable-stream": { - "version": "2.3.8", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "node_modules/through2/node_modules/safe-buffer": { - "version": "5.1.2", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true - }, - "node_modules/through2/node_modules/string_decoder": { - "version": "1.1.1", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, - "node_modules/tmp": { - "version": "0.0.33", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "os-tmpdir": "~1.0.2" - }, - "engines": { - "node": ">=0.6.0" - } - }, - "node_modules/tmpl": { - "version": "1.0.5", - "dev": true, - "license": "BSD-3-Clause" - }, - "node_modules/to-fast-properties": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/to-regex-range": { - "version": "5.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "is-number": "^7.0.0" - }, - "engines": { - "node": ">=8.0" - } - }, - "node_modules/toidentifier": { - "version": "1.0.1", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "engines": { - "node": ">=0.6" - } - }, - "node_modules/tr46": { - "version": "0.0.3", - "dev": true, - "license": "MIT" - }, - "node_modules/traverse": { - "version": "0.6.7", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/ts-interface-checker": { - "version": "0.1.13", - "dev": true, - "license": "Apache-2.0", - "optional": true, - "peer": true - }, - "node_modules/ts-jest": { - "version": "29.1.1", - "dev": true, - "license": "MIT", - "dependencies": { - "bs-logger": "0.x", - "fast-json-stable-stringify": "2.x", - "jest-util": "^29.0.0", - "json5": "^2.2.3", - "lodash.memoize": "4.x", - "make-error": "1.x", - "semver": "^7.5.3", - "yargs-parser": "^21.0.1" - }, - "bin": { - "ts-jest": "cli.js" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - }, - "peerDependencies": { - "@babel/core": ">=7.0.0-beta.0 <8", - "@jest/types": "^29.0.0", - "babel-jest": "^29.0.0", - "jest": "^29.0.0", - "typescript": ">=4.3 <6" - }, - "peerDependenciesMeta": { - "@babel/core": { - "optional": true - }, - "@jest/types": { - "optional": true - }, - "babel-jest": { - "optional": true - }, - "esbuild": { - "optional": true - } - } - }, - "node_modules/ts-jest/node_modules/lru-cache": { - "version": "6.0.0", - "dev": true, - "license": "ISC", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/ts-jest/node_modules/semver": { - "version": "7.5.4", - "dev": true, - "license": "ISC", - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/ts-jest/node_modules/yallist": { - "version": "4.0.0", - "dev": true, - "license": "ISC" - }, - "node_modules/ts-node": { - "version": "10.9.1", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "@cspotcode/source-map-support": "^0.8.0", - "@tsconfig/node10": "^1.0.7", - "@tsconfig/node12": "^1.0.7", - "@tsconfig/node14": "^1.0.0", - "@tsconfig/node16": "^1.0.2", - "acorn": "^8.4.1", - "acorn-walk": "^8.1.1", - "arg": "^4.1.0", - "create-require": "^1.1.0", - "diff": "^4.0.1", - "make-error": "^1.1.1", - "v8-compile-cache-lib": "^3.0.1", - "yn": "3.1.1" - }, - "bin": { - "ts-node": "dist/bin.js", - "ts-node-cwd": "dist/bin-cwd.js", - "ts-node-esm": "dist/bin-esm.js", - "ts-node-script": "dist/bin-script.js", - "ts-node-transpile-only": "dist/bin-transpile.js", - "ts-script": "dist/bin-script-deprecated.js" - }, - "peerDependencies": { - "@swc/core": ">=1.2.50", - "@swc/wasm": ">=1.2.50", - "@types/node": "*", - "typescript": ">=2.7" - }, - "peerDependenciesMeta": { - "@swc/core": { - "optional": true - }, - "@swc/wasm": { - "optional": true - } - } - }, - "node_modules/tslib": { - "version": "2.6.1", - "dev": true, - "license": "0BSD" - }, - "node_modules/tweetnacl": { - "version": "1.0.3", - "dev": true, - "license": "Unlicense" - }, - "node_modules/type-detect": { - "version": "4.0.8", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/type-fest": { - "version": "0.21.3", - "dev": true, - "license": "(MIT OR CC0-1.0)", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/type-is": { - "version": "1.6.18", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "media-typer": "0.3.0", - "mime-types": "~2.1.24" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/typescript": { - "version": "5.1.6", - "dev": true, - "license": "Apache-2.0", - "peer": true, - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=14.17" - } - }, - "node_modules/ua-parser-js": { - "version": "1.0.35", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/ua-parser-js" - }, - { - "type": "paypal", - "url": "https://paypal.me/faisalman" - } - ], - "license": "MIT", - "optional": true, - "peer": true, - "engines": { - "node": "*" - } - }, - "node_modules/uglify-es": { - "version": "3.3.9", - "dev": true, - "license": "BSD-2-Clause", - "optional": true, - "peer": true, - "dependencies": { - "commander": "~2.13.0", - "source-map": "~0.6.1" - }, - "bin": { - "uglifyjs": "bin/uglifyjs" - }, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/uglify-es/node_modules/commander": { - "version": "2.13.0", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true - }, - "node_modules/unicode-canonical-property-names-ecmascript": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/unicode-match-property-ecmascript": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "unicode-canonical-property-names-ecmascript": "^2.0.0", - "unicode-property-aliases-ecmascript": "^2.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/unicode-match-property-value-ecmascript": { - "version": "2.1.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/unicode-property-aliases-ecmascript": { - "version": "2.1.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/unique-filename": { - "version": "1.1.1", - "dev": true, - "license": "ISC", - "optional": true, - "peer": true, - "dependencies": { - "unique-slug": "^2.0.0" - } - }, - "node_modules/unique-slug": { - "version": "2.0.2", - "dev": true, - "license": "ISC", - "optional": true, - "peer": true, - "dependencies": { - "imurmurhash": "^0.1.4" - } - }, - "node_modules/unique-string": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "crypto-random-string": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/universalify": { - "version": "0.1.2", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "engines": { - "node": ">= 4.0.0" - } - }, - "node_modules/unpipe": { - "version": "1.0.0", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/update-browserslist-db": { - "version": "1.0.11", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "MIT", - "dependencies": { - "escalade": "^3.1.1", - "picocolors": "^1.0.0" - }, - "bin": { - "update-browserslist-db": "cli.js" - }, - "peerDependencies": { - "browserslist": ">= 4.21.0" - } - }, - "node_modules/url-join": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true - }, - "node_modules/url-parse": { - "version": "1.5.10", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "querystringify": "^2.1.1", - "requires-port": "^1.0.0" - } - }, - "node_modules/use-sync-external-store": { - "version": "1.2.0", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0 || ^18.0.0" - } - }, - "node_modules/util": { - "version": "0.12.4", - "dev": true, - "license": "MIT", - "dependencies": { - "inherits": "^2.0.3", - "is-arguments": "^1.0.4", - "is-generator-function": "^1.0.7", - "is-typed-array": "^1.1.3", - "safe-buffer": "^5.1.2", - "which-typed-array": "^1.1.2" - } - }, - "node_modules/util-deprecate": { - "version": "1.0.2", - "dev": true, - "license": "MIT" - }, - "node_modules/utils-merge": { - "version": "1.0.1", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/uuid": { - "version": "3.4.0", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "bin": { - "uuid": "bin/uuid" - } - }, - "node_modules/v8-compile-cache-lib": { - "version": "3.0.1", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true - }, - "node_modules/v8-to-istanbul": { - "version": "9.1.0", - "dev": true, - "license": "ISC", - "dependencies": { - "@jridgewell/trace-mapping": "^0.3.12", - "@types/istanbul-lib-coverage": "^2.0.1", - "convert-source-map": "^1.6.0" - }, - "engines": { - "node": ">=10.12.0" - } - }, - "node_modules/v8-to-istanbul/node_modules/convert-source-map": { - "version": "1.9.0", - "dev": true, - "license": "MIT" - }, - "node_modules/valid-url": { - "version": "1.0.9", - "dev": true, - "optional": true, - "peer": true - }, - "node_modules/validate-npm-package-name": { - "version": "3.0.0", - "dev": true, - "license": "ISC", - "optional": true, - "peer": true, - "dependencies": { - "builtins": "^1.0.3" - } - }, - "node_modules/vary": { - "version": "1.1.2", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/vlq": { - "version": "1.0.1", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true - }, - "node_modules/walker": { - "version": "1.0.8", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "makeerror": "1.0.12" - } - }, - "node_modules/wcwidth": { - "version": "1.0.1", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "defaults": "^1.0.3" - } - }, - "node_modules/webcrypto-core": { - "version": "1.7.7", - "dev": true, - "license": "MIT", - "dependencies": { - "@peculiar/asn1-schema": "^2.3.6", - "@peculiar/json-schema": "^1.1.12", - "asn1js": "^3.0.1", - "pvtsutils": "^1.3.2", - "tslib": "^2.4.0" - } - }, - "node_modules/webcrypto-shim": { - "version": "0.1.7", - "dev": true, - "license": "MIT" - }, - "node_modules/webidl-conversions": { - "version": "3.0.1", - "dev": true, - "license": "BSD-2-Clause" - }, - "node_modules/whatwg-fetch": { - "version": "3.6.17", - "dev": true, - "license": "MIT" - }, - "node_modules/whatwg-url": { - "version": "5.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "tr46": "~0.0.3", - "webidl-conversions": "^3.0.0" - } - }, - "node_modules/which": { - "version": "2.0.2", - "dev": true, - "license": "ISC", - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/which-module": { - "version": "2.0.1", - "dev": true, - "license": "ISC", - "optional": true, - "peer": true - }, - "node_modules/which-typed-array": { - "version": "1.1.9", - "dev": true, - "license": "MIT", - "dependencies": { - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.2", - "for-each": "^0.3.3", - "gopd": "^1.0.1", - "has-tostringtag": "^1.0.0", - "is-typed-array": "^1.1.10" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/wonka": { - "version": "4.0.15", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true - }, - "node_modules/wrap-ansi": { - "version": "7.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/wrappy": { - "version": "1.0.2", - "dev": true, - "license": "ISC" - }, - "node_modules/write-file-atomic": { - "version": "4.0.2", - "dev": true, - "license": "ISC", - "dependencies": { - "imurmurhash": "^0.1.4", - "signal-exit": "^3.0.7" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/ws": { - "version": "8.13.0", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "engines": { - "node": ">=10.0.0" - }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": ">=5.0.2" - }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { - "optional": true - } - } - }, - "node_modules/xcode": { - "version": "3.0.1", - "dev": true, - "license": "Apache-2.0", - "optional": true, - "peer": true, - "dependencies": { - "simple-plist": "^1.1.0", - "uuid": "^7.0.3" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/xcode/node_modules/uuid": { - "version": "7.0.3", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "bin": { - "uuid": "dist/bin/uuid" - } - }, - "node_modules/xml2js": { - "version": "0.6.0", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "sax": ">=0.6.0", - "xmlbuilder": "~11.0.0" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/xml2js/node_modules/xmlbuilder": { - "version": "11.0.1", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/xmlbuilder": { - "version": "14.0.0", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "engines": { - "node": ">=8.0" - } - }, - "node_modules/xtend": { - "version": "4.0.2", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "engines": { - "node": ">=0.4" - } - }, - "node_modules/y18n": { - "version": "5.0.8", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=10" - } - }, - "node_modules/yallist": { - "version": "3.1.1", - "dev": true, - "license": "ISC" - }, - "node_modules/yaml": { - "version": "2.3.1", - "dev": true, - "license": "ISC", - "optional": true, - "peer": true, - "engines": { - "node": ">= 14" - } - }, - "node_modules/yargs": { - "version": "17.7.2", - "dev": true, - "license": "MIT", - "dependencies": { - "cliui": "^8.0.1", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.3", - "y18n": "^5.0.5", - "yargs-parser": "^21.1.1" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/yargs-parser": { - "version": "21.1.1", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=12" - } - }, - "node_modules/yn": { - "version": "3.1.1", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/yocto-queue": { - "version": "0.1.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - } - }, - "dependencies": { - "@ampproject/remapping": { - "version": "2.2.1", - "dev": true, - "requires": { - "@jridgewell/gen-mapping": "^0.3.0", - "@jridgewell/trace-mapping": "^0.3.9" - } - }, - "@babel/code-frame": { - "version": "7.22.5", - "dev": true, - "requires": { - "@babel/highlight": "^7.22.5" - } - }, - "@babel/compat-data": { - "version": "7.22.9", - "dev": true - }, - "@babel/core": { - "version": "7.22.9", - "dev": true, - "requires": { - "@ampproject/remapping": "^2.2.0", - "@babel/code-frame": "^7.22.5", - "@babel/generator": "^7.22.9", - "@babel/helper-compilation-targets": "^7.22.9", - "@babel/helper-module-transforms": "^7.22.9", - "@babel/helpers": "^7.22.6", - "@babel/parser": "^7.22.7", - "@babel/template": "^7.22.5", - "@babel/traverse": "^7.22.8", - "@babel/types": "^7.22.5", - "convert-source-map": "^1.7.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.2", - "json5": "^2.2.2", - "semver": "^6.3.1" - }, - "dependencies": { - "convert-source-map": { - "version": "1.9.0", - "dev": true - } - } - }, - "@babel/generator": { - "version": "7.22.9", - "dev": true, - "requires": { - "@babel/types": "^7.22.5", - "@jridgewell/gen-mapping": "^0.3.2", - "@jridgewell/trace-mapping": "^0.3.17", - "jsesc": "^2.5.1" - } - }, - "@babel/helper-annotate-as-pure": { - "version": "7.22.5", - "dev": true, - "requires": { - "@babel/types": "^7.22.5" - } - }, - "@babel/helper-builder-binary-assignment-operator-visitor": { - "version": "7.22.5", - "dev": true, - "requires": { - "@babel/types": "^7.22.5" - } - }, - "@babel/helper-compilation-targets": { - "version": "7.22.9", - "dev": true, - "requires": { - "@babel/compat-data": "^7.22.9", - "@babel/helper-validator-option": "^7.22.5", - "browserslist": "^4.21.9", - "lru-cache": "^5.1.1", - "semver": "^6.3.1" - } - }, - "@babel/helper-create-class-features-plugin": { - "version": "7.22.9", - "dev": true, - "requires": { - "@babel/helper-annotate-as-pure": "^7.22.5", - "@babel/helper-environment-visitor": "^7.22.5", - "@babel/helper-function-name": "^7.22.5", - "@babel/helper-member-expression-to-functions": "^7.22.5", - "@babel/helper-optimise-call-expression": "^7.22.5", - "@babel/helper-replace-supers": "^7.22.9", - "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", - "@babel/helper-split-export-declaration": "^7.22.6", - "semver": "^6.3.1" - } - }, - "@babel/helper-create-regexp-features-plugin": { - "version": "7.22.9", - "dev": true, - "requires": { - "@babel/helper-annotate-as-pure": "^7.22.5", - "regexpu-core": "^5.3.1", - "semver": "^6.3.1" - } - }, - "@babel/helper-define-polyfill-provider": { - "version": "0.4.1", - "dev": true, - "requires": { - "@babel/helper-compilation-targets": "^7.22.6", - "@babel/helper-plugin-utils": "^7.22.5", - "debug": "^4.1.1", - "lodash.debounce": "^4.0.8", - "resolve": "^1.14.2" - } - }, - "@babel/helper-environment-visitor": { - "version": "7.22.5", - "dev": true - }, - "@babel/helper-function-name": { - "version": "7.22.5", - "dev": true, - "requires": { - "@babel/template": "^7.22.5", - "@babel/types": "^7.22.5" - } - }, - "@babel/helper-hoist-variables": { - "version": "7.22.5", - "dev": true, - "requires": { - "@babel/types": "^7.22.5" - } - }, - "@babel/helper-member-expression-to-functions": { - "version": "7.22.5", - "dev": true, - "requires": { - "@babel/types": "^7.22.5" - } - }, - "@babel/helper-module-imports": { - "version": "7.22.5", - "dev": true, - "requires": { - "@babel/types": "^7.22.5" - } - }, - "@babel/helper-module-transforms": { - "version": "7.22.9", - "dev": true, - "requires": { - "@babel/helper-environment-visitor": "^7.22.5", - "@babel/helper-module-imports": "^7.22.5", - "@babel/helper-simple-access": "^7.22.5", - "@babel/helper-split-export-declaration": "^7.22.6", - "@babel/helper-validator-identifier": "^7.22.5" - } - }, - "@babel/helper-optimise-call-expression": { - "version": "7.22.5", - "dev": true, - "requires": { - "@babel/types": "^7.22.5" - } - }, - "@babel/helper-plugin-utils": { - "version": "7.22.5", - "dev": true - }, - "@babel/helper-remap-async-to-generator": { - "version": "7.22.9", - "dev": true, - "requires": { - "@babel/helper-annotate-as-pure": "^7.22.5", - "@babel/helper-environment-visitor": "^7.22.5", - "@babel/helper-wrap-function": "^7.22.9" - } - }, - "@babel/helper-replace-supers": { - "version": "7.22.9", - "dev": true, - "requires": { - "@babel/helper-environment-visitor": "^7.22.5", - "@babel/helper-member-expression-to-functions": "^7.22.5", - "@babel/helper-optimise-call-expression": "^7.22.5" - } - }, - "@babel/helper-simple-access": { - "version": "7.22.5", - "dev": true, - "requires": { - "@babel/types": "^7.22.5" - } - }, - "@babel/helper-skip-transparent-expression-wrappers": { - "version": "7.22.5", - "dev": true, - "requires": { - "@babel/types": "^7.22.5" - } - }, - "@babel/helper-split-export-declaration": { - "version": "7.22.6", - "dev": true, - "requires": { - "@babel/types": "^7.22.5" - } - }, - "@babel/helper-string-parser": { - "version": "7.22.5", - "dev": true - }, - "@babel/helper-validator-identifier": { - "version": "7.22.5", - "dev": true - }, - "@babel/helper-validator-option": { - "version": "7.22.5", - "dev": true - }, - "@babel/helper-wrap-function": { - "version": "7.22.9", - "dev": true, - "requires": { - "@babel/helper-function-name": "^7.22.5", - "@babel/template": "^7.22.5", - "@babel/types": "^7.22.5" - } - }, - "@babel/helpers": { - "version": "7.22.6", - "dev": true, - "requires": { - "@babel/template": "^7.22.5", - "@babel/traverse": "^7.22.6", - "@babel/types": "^7.22.5" - } - }, - "@babel/highlight": { - "version": "7.22.5", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.22.5", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "chalk": { - "version": "2.4.2", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "color-convert": { - "version": "1.9.3", - "dev": true, - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "dev": true - }, - "escape-string-regexp": { - "version": "1.0.5", - "dev": true - }, - "has-flag": { - "version": "3.0.0", - "dev": true - }, - "supports-color": { - "version": "5.5.0", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "@babel/parser": { - "version": "7.22.7", - "dev": true - }, - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { - "version": "7.22.5", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { - "version": "7.22.5", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", - "@babel/plugin-transform-optional-chaining": "^7.22.5" - } - }, - "@babel/plugin-proposal-async-generator-functions": { - "version": "7.20.7", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/helper-remap-async-to-generator": "^7.18.9", - "@babel/plugin-syntax-async-generators": "^7.8.4" - } - }, - "@babel/plugin-proposal-class-properties": { - "version": "7.18.6", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "@babel/helper-create-class-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-proposal-decorators": { - "version": "7.22.7", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "@babel/helper-create-class-features-plugin": "^7.22.6", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-replace-supers": "^7.22.5", - "@babel/helper-split-export-declaration": "^7.22.6", - "@babel/plugin-syntax-decorators": "^7.22.5" - } - }, - "@babel/plugin-proposal-export-default-from": { - "version": "7.22.5", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-export-default-from": "^7.22.5" - } - }, - "@babel/plugin-proposal-export-namespace-from": { - "version": "7.18.9", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "@babel/helper-plugin-utils": "^7.18.9", - "@babel/plugin-syntax-export-namespace-from": "^7.8.3" - } - }, - "@babel/plugin-proposal-nullish-coalescing-operator": { - "version": "7.18.6", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" - } - }, - "@babel/plugin-proposal-numeric-separator": { - "version": "7.18.6", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/plugin-syntax-numeric-separator": "^7.10.4" - } - }, - "@babel/plugin-proposal-object-rest-spread": { - "version": "7.20.7", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "@babel/compat-data": "^7.20.5", - "@babel/helper-compilation-targets": "^7.20.7", - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-transform-parameters": "^7.20.7" - } - }, - "@babel/plugin-proposal-optional-catch-binding": { - "version": "7.18.6", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" - } - }, - "@babel/plugin-proposal-optional-chaining": { - "version": "7.21.0", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/helper-skip-transparent-expression-wrappers": "^7.20.0", - "@babel/plugin-syntax-optional-chaining": "^7.8.3" - } - }, - "@babel/plugin-proposal-private-property-in-object": { - "version": "7.21.0-placeholder-for-preset-env.2", - "dev": true, - "requires": {} - }, - "@babel/plugin-proposal-unicode-property-regex": { - "version": "7.18.6", - "dev": true, - "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-syntax-async-generators": { - "version": "7.8.4", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-bigint": { - "version": "7.8.3", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-class-properties": { - "version": "7.12.13", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.12.13" - } - }, - "@babel/plugin-syntax-class-static-block": { - "version": "7.14.5", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.14.5" - } - }, - "@babel/plugin-syntax-decorators": { - "version": "7.22.5", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-syntax-dynamic-import": { - "version": "7.8.3", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-export-default-from": { - "version": "7.22.5", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-syntax-export-namespace-from": { - "version": "7.8.3", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.3" - } - }, - "@babel/plugin-syntax-flow": { - "version": "7.22.5", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-syntax-import-assertions": { - "version": "7.22.5", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-syntax-import-attributes": { - "version": "7.22.5", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-syntax-import-meta": { - "version": "7.10.4", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-syntax-json-strings": { - "version": "7.8.3", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-jsx": { - "version": "7.22.5", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-syntax-logical-assignment-operators": { - "version": "7.10.4", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-syntax-nullish-coalescing-operator": { - "version": "7.8.3", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-numeric-separator": { - "version": "7.10.4", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-syntax-object-rest-spread": { - "version": "7.8.3", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-optional-catch-binding": { - "version": "7.8.3", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-optional-chaining": { - "version": "7.8.3", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-private-property-in-object": { - "version": "7.14.5", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.14.5" - } - }, - "@babel/plugin-syntax-top-level-await": { - "version": "7.14.5", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.14.5" - } - }, - "@babel/plugin-syntax-typescript": { - "version": "7.22.5", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-syntax-unicode-sets-regex": { - "version": "7.18.6", - "dev": true, - "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-transform-arrow-functions": { - "version": "7.22.5", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-async-generator-functions": { - "version": "7.22.7", - "dev": true, - "requires": { - "@babel/helper-environment-visitor": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-remap-async-to-generator": "^7.22.5", - "@babel/plugin-syntax-async-generators": "^7.8.4" - } - }, - "@babel/plugin-transform-async-to-generator": { - "version": "7.22.5", - "dev": true, - "requires": { - "@babel/helper-module-imports": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-remap-async-to-generator": "^7.22.5" - } - }, - "@babel/plugin-transform-block-scoped-functions": { - "version": "7.22.5", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-block-scoping": { - "version": "7.22.5", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-class-properties": { - "version": "7.22.5", - "dev": true, - "requires": { - "@babel/helper-create-class-features-plugin": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-class-static-block": { - "version": "7.22.5", - "dev": true, - "requires": { - "@babel/helper-create-class-features-plugin": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-class-static-block": "^7.14.5" - } - }, - "@babel/plugin-transform-classes": { - "version": "7.22.6", - "dev": true, - "requires": { - "@babel/helper-annotate-as-pure": "^7.22.5", - "@babel/helper-compilation-targets": "^7.22.6", - "@babel/helper-environment-visitor": "^7.22.5", - "@babel/helper-function-name": "^7.22.5", - "@babel/helper-optimise-call-expression": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-replace-supers": "^7.22.5", - "@babel/helper-split-export-declaration": "^7.22.6", - "globals": "^11.1.0" - } - }, - "@babel/plugin-transform-computed-properties": { - "version": "7.22.5", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/template": "^7.22.5" - } - }, - "@babel/plugin-transform-destructuring": { - "version": "7.22.5", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-dotall-regex": { - "version": "7.22.5", - "dev": true, - "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-duplicate-keys": { - "version": "7.22.5", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-dynamic-import": { - "version": "7.22.5", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-dynamic-import": "^7.8.3" - } - }, - "@babel/plugin-transform-exponentiation-operator": { - "version": "7.22.5", - "dev": true, - "requires": { - "@babel/helper-builder-binary-assignment-operator-visitor": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-export-namespace-from": { - "version": "7.22.5", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-export-namespace-from": "^7.8.3" - } - }, - "@babel/plugin-transform-flow-strip-types": { - "version": "7.22.5", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-flow": "^7.22.5" - } - }, - "@babel/plugin-transform-for-of": { - "version": "7.22.5", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-function-name": { - "version": "7.22.5", - "dev": true, - "requires": { - "@babel/helper-compilation-targets": "^7.22.5", - "@babel/helper-function-name": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-json-strings": { - "version": "7.22.5", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-json-strings": "^7.8.3" - } - }, - "@babel/plugin-transform-literals": { - "version": "7.22.5", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-logical-assignment-operators": { - "version": "7.22.5", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" - } - }, - "@babel/plugin-transform-member-expression-literals": { - "version": "7.22.5", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-modules-amd": { - "version": "7.22.5", - "dev": true, - "requires": { - "@babel/helper-module-transforms": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-modules-commonjs": { - "version": "7.22.5", - "dev": true, - "requires": { - "@babel/helper-module-transforms": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-simple-access": "^7.22.5" - } - }, - "@babel/plugin-transform-modules-systemjs": { - "version": "7.22.5", - "dev": true, - "requires": { - "@babel/helper-hoist-variables": "^7.22.5", - "@babel/helper-module-transforms": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-validator-identifier": "^7.22.5" - } - }, - "@babel/plugin-transform-modules-umd": { - "version": "7.22.5", - "dev": true, - "requires": { - "@babel/helper-module-transforms": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-named-capturing-groups-regex": { - "version": "7.22.5", - "dev": true, - "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-new-target": { - "version": "7.22.5", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-nullish-coalescing-operator": { - "version": "7.22.5", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" - } - }, - "@babel/plugin-transform-numeric-separator": { - "version": "7.22.5", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-numeric-separator": "^7.10.4" - } - }, - "@babel/plugin-transform-object-rest-spread": { - "version": "7.22.5", - "dev": true, - "requires": { - "@babel/compat-data": "^7.22.5", - "@babel/helper-compilation-targets": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-transform-parameters": "^7.22.5" - } - }, - "@babel/plugin-transform-object-super": { - "version": "7.22.5", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-replace-supers": "^7.22.5" - } - }, - "@babel/plugin-transform-optional-catch-binding": { - "version": "7.22.5", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" - } - }, - "@babel/plugin-transform-optional-chaining": { - "version": "7.22.6", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", - "@babel/plugin-syntax-optional-chaining": "^7.8.3" - } - }, - "@babel/plugin-transform-parameters": { - "version": "7.22.5", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-private-methods": { - "version": "7.22.5", - "dev": true, - "requires": { - "@babel/helper-create-class-features-plugin": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-private-property-in-object": { - "version": "7.22.5", - "dev": true, - "requires": { - "@babel/helper-annotate-as-pure": "^7.22.5", - "@babel/helper-create-class-features-plugin": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-private-property-in-object": "^7.14.5" - } - }, - "@babel/plugin-transform-property-literals": { - "version": "7.22.5", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-react-display-name": { - "version": "7.22.5", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-react-jsx": { - "version": "7.22.5", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "@babel/helper-annotate-as-pure": "^7.22.5", - "@babel/helper-module-imports": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-jsx": "^7.22.5", - "@babel/types": "^7.22.5" - } - }, - "@babel/plugin-transform-react-jsx-self": { - "version": "7.22.5", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-react-jsx-source": { - "version": "7.22.5", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-regenerator": { - "version": "7.22.5", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5", - "regenerator-transform": "^0.15.1" - } - }, - "@babel/plugin-transform-reserved-words": { - "version": "7.22.5", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-runtime": { - "version": "7.22.9", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "@babel/helper-module-imports": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5", - "babel-plugin-polyfill-corejs2": "^0.4.4", - "babel-plugin-polyfill-corejs3": "^0.8.2", - "babel-plugin-polyfill-regenerator": "^0.5.1", - "semver": "^6.3.1" - } - }, - "@babel/plugin-transform-shorthand-properties": { - "version": "7.22.5", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-spread": { - "version": "7.22.5", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5" - } - }, - "@babel/plugin-transform-sticky-regex": { - "version": "7.22.5", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-template-literals": { - "version": "7.22.5", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-typeof-symbol": { - "version": "7.22.5", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-typescript": { - "version": "7.22.9", - "dev": true, - "requires": { - "@babel/helper-annotate-as-pure": "^7.22.5", - "@babel/helper-create-class-features-plugin": "^7.22.9", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-typescript": "^7.22.5" - } - }, - "@babel/plugin-transform-unicode-escapes": { - "version": "7.22.5", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-unicode-property-regex": { - "version": "7.22.5", - "dev": true, - "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-unicode-regex": { - "version": "7.22.5", - "dev": true, - "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-unicode-sets-regex": { - "version": "7.22.5", - "dev": true, - "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/preset-env": { - "version": "7.22.9", - "dev": true, - "requires": { - "@babel/compat-data": "^7.22.9", - "@babel/helper-compilation-targets": "^7.22.9", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-validator-option": "^7.22.5", - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.22.5", - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.22.5", - "@babel/plugin-proposal-private-property-in-object": "7.21.0-placeholder-for-preset-env.2", - "@babel/plugin-syntax-async-generators": "^7.8.4", - "@babel/plugin-syntax-class-properties": "^7.12.13", - "@babel/plugin-syntax-class-static-block": "^7.14.5", - "@babel/plugin-syntax-dynamic-import": "^7.8.3", - "@babel/plugin-syntax-export-namespace-from": "^7.8.3", - "@babel/plugin-syntax-import-assertions": "^7.22.5", - "@babel/plugin-syntax-import-attributes": "^7.22.5", - "@babel/plugin-syntax-import-meta": "^7.10.4", - "@babel/plugin-syntax-json-strings": "^7.8.3", - "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", - "@babel/plugin-syntax-numeric-separator": "^7.10.4", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", - "@babel/plugin-syntax-optional-chaining": "^7.8.3", - "@babel/plugin-syntax-private-property-in-object": "^7.14.5", - "@babel/plugin-syntax-top-level-await": "^7.14.5", - "@babel/plugin-syntax-unicode-sets-regex": "^7.18.6", - "@babel/plugin-transform-arrow-functions": "^7.22.5", - "@babel/plugin-transform-async-generator-functions": "^7.22.7", - "@babel/plugin-transform-async-to-generator": "^7.22.5", - "@babel/plugin-transform-block-scoped-functions": "^7.22.5", - "@babel/plugin-transform-block-scoping": "^7.22.5", - "@babel/plugin-transform-class-properties": "^7.22.5", - "@babel/plugin-transform-class-static-block": "^7.22.5", - "@babel/plugin-transform-classes": "^7.22.6", - "@babel/plugin-transform-computed-properties": "^7.22.5", - "@babel/plugin-transform-destructuring": "^7.22.5", - "@babel/plugin-transform-dotall-regex": "^7.22.5", - "@babel/plugin-transform-duplicate-keys": "^7.22.5", - "@babel/plugin-transform-dynamic-import": "^7.22.5", - "@babel/plugin-transform-exponentiation-operator": "^7.22.5", - "@babel/plugin-transform-export-namespace-from": "^7.22.5", - "@babel/plugin-transform-for-of": "^7.22.5", - "@babel/plugin-transform-function-name": "^7.22.5", - "@babel/plugin-transform-json-strings": "^7.22.5", - "@babel/plugin-transform-literals": "^7.22.5", - "@babel/plugin-transform-logical-assignment-operators": "^7.22.5", - "@babel/plugin-transform-member-expression-literals": "^7.22.5", - "@babel/plugin-transform-modules-amd": "^7.22.5", - "@babel/plugin-transform-modules-commonjs": "^7.22.5", - "@babel/plugin-transform-modules-systemjs": "^7.22.5", - "@babel/plugin-transform-modules-umd": "^7.22.5", - "@babel/plugin-transform-named-capturing-groups-regex": "^7.22.5", - "@babel/plugin-transform-new-target": "^7.22.5", - "@babel/plugin-transform-nullish-coalescing-operator": "^7.22.5", - "@babel/plugin-transform-numeric-separator": "^7.22.5", - "@babel/plugin-transform-object-rest-spread": "^7.22.5", - "@babel/plugin-transform-object-super": "^7.22.5", - "@babel/plugin-transform-optional-catch-binding": "^7.22.5", - "@babel/plugin-transform-optional-chaining": "^7.22.6", - "@babel/plugin-transform-parameters": "^7.22.5", - "@babel/plugin-transform-private-methods": "^7.22.5", - "@babel/plugin-transform-private-property-in-object": "^7.22.5", - "@babel/plugin-transform-property-literals": "^7.22.5", - "@babel/plugin-transform-regenerator": "^7.22.5", - "@babel/plugin-transform-reserved-words": "^7.22.5", - "@babel/plugin-transform-shorthand-properties": "^7.22.5", - "@babel/plugin-transform-spread": "^7.22.5", - "@babel/plugin-transform-sticky-regex": "^7.22.5", - "@babel/plugin-transform-template-literals": "^7.22.5", - "@babel/plugin-transform-typeof-symbol": "^7.22.5", - "@babel/plugin-transform-unicode-escapes": "^7.22.5", - "@babel/plugin-transform-unicode-property-regex": "^7.22.5", - "@babel/plugin-transform-unicode-regex": "^7.22.5", - "@babel/plugin-transform-unicode-sets-regex": "^7.22.5", - "@babel/preset-modules": "^0.1.5", - "@babel/types": "^7.22.5", - "babel-plugin-polyfill-corejs2": "^0.4.4", - "babel-plugin-polyfill-corejs3": "^0.8.2", - "babel-plugin-polyfill-regenerator": "^0.5.1", - "core-js-compat": "^3.31.0", - "semver": "^6.3.1" - } - }, - "@babel/preset-flow": { - "version": "7.22.5", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-validator-option": "^7.22.5", - "@babel/plugin-transform-flow-strip-types": "^7.22.5" - } - }, - "@babel/preset-modules": { - "version": "0.1.5", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/plugin-proposal-unicode-property-regex": "^7.4.4", - "@babel/plugin-transform-dotall-regex": "^7.4.4", - "@babel/types": "^7.4.4", - "esutils": "^2.0.2" - } - }, - "@babel/preset-typescript": { - "version": "7.22.5", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-validator-option": "^7.22.5", - "@babel/plugin-syntax-jsx": "^7.22.5", - "@babel/plugin-transform-modules-commonjs": "^7.22.5", - "@babel/plugin-transform-typescript": "^7.22.5" - } - }, - "@babel/register": { - "version": "7.22.5", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "clone-deep": "^4.0.1", - "find-cache-dir": "^2.0.0", - "make-dir": "^2.1.0", - "pirates": "^4.0.5", - "source-map-support": "^0.5.16" - }, - "dependencies": { - "make-dir": { - "version": "2.1.0", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "pify": "^4.0.1", - "semver": "^5.6.0" - } - }, - "semver": { - "version": "5.7.2", - "dev": true, - "optional": true, - "peer": true - }, - "source-map-support": { - "version": "0.5.21", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } - } - } - }, - "@babel/regjsgen": { - "version": "0.8.0", - "dev": true - }, - "@babel/runtime": { - "version": "7.22.6", - "dev": true, - "requires": { - "regenerator-runtime": "^0.13.11" - } - }, - "@babel/template": { - "version": "7.22.5", - "dev": true, - "requires": { - "@babel/code-frame": "^7.22.5", - "@babel/parser": "^7.22.5", - "@babel/types": "^7.22.5" - } - }, - "@babel/traverse": { - "version": "7.22.8", - "dev": true, - "requires": { - "@babel/code-frame": "^7.22.5", - "@babel/generator": "^7.22.7", - "@babel/helper-environment-visitor": "^7.22.5", - "@babel/helper-function-name": "^7.22.5", - "@babel/helper-hoist-variables": "^7.22.5", - "@babel/helper-split-export-declaration": "^7.22.6", - "@babel/parser": "^7.22.7", - "@babel/types": "^7.22.5", - "debug": "^4.1.0", - "globals": "^11.1.0" - } - }, - "@babel/types": { - "version": "7.22.5", - "dev": true, - "requires": { - "@babel/helper-string-parser": "^7.22.5", - "@babel/helper-validator-identifier": "^7.22.5", - "to-fast-properties": "^2.0.0" - } - }, - "@bcoe/v8-coverage": { - "version": "0.2.3", - "dev": true - }, - "@cspotcode/source-map-support": { - "version": "0.8.1", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "@jridgewell/trace-mapping": "0.3.9" - }, - "dependencies": { - "@jridgewell/trace-mapping": { - "version": "0.3.9", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "@jridgewell/resolve-uri": "^3.0.3", - "@jridgewell/sourcemap-codec": "^1.4.10" - } - } - } - }, - "@dfinity/agent": { - "version": "0.19.2", - "resolved": "https://registry.npmjs.org/@dfinity/agent/-/agent-0.19.2.tgz", - "integrity": "sha512-KLRWEjeU9SyyaS7IBVJ9ZUcufxufr55e/kRIyClK157+0pkTG9a8xKjUIMx3QzKvLsqqzXL238nWwdoP6jAD8g==", - "dev": true, - "requires": { - "@noble/hashes": "^1.3.1", - "base64-arraybuffer": "^0.2.0", - "borc": "^2.1.1", - "simple-cbor": "^0.4.1" - } - }, - "@dfinity/candid": { - "version": "0.19.2", - "resolved": "https://registry.npmjs.org/@dfinity/candid/-/candid-0.19.2.tgz", - "integrity": "sha512-X2hCqNMhnnmwtnOc0WnymOZYx3qphjEMuSYbBr7tMIkV7Hwt9BmXXlLnQTxUytTPxf+3he0GcS3KzsSQ9CK8ew==", - "dev": true, - "requires": {} - }, - "@dfinity/identity-secp256k1": { - "version": "0.19.2", - "resolved": "https://registry.npmjs.org/@dfinity/identity-secp256k1/-/identity-secp256k1-0.19.2.tgz", - "integrity": "sha512-rzkmNE9n1XWicjt9R4kw3gpZimoalIoR5TLbXPaBILUvNNO7aGZ6Cz5bvrq8HI14yETkxAXNL5rjGwAtoFqAhQ==", - "dev": true, - "requires": { - "@dfinity/agent": "^0.19.2", - "@noble/hashes": "^1.3.1", - "bip39": "^3.0.4", - "bs58check": "^2.1.2", - "secp256k1": "^4.0.3" - } - }, - "@dfinity/principal": { - "version": "0.19.2", - "resolved": "https://registry.npmjs.org/@dfinity/principal/-/principal-0.19.2.tgz", - "integrity": "sha512-vsKN6BKya70bQUsjgKRDlR2lOpv/XpUkCMIiji6rjMtKHIuWEB5Eu3JqZsOuBmWo3A3TT/K/osT9VPm0k4qdYQ==", - "dev": true, - "requires": { - "@noble/hashes": "^1.3.1" - } - }, - "@expo/bunyan": { - "version": "4.0.0", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "mv": "~2", - "safe-json-stringify": "~1", - "uuid": "^8.0.0" - }, - "dependencies": { - "uuid": { - "version": "8.3.2", - "dev": true, - "optional": true, - "peer": true - } - } - }, - "@expo/cli": { - "version": "0.10.11", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "@babel/runtime": "^7.20.0", - "@expo/code-signing-certificates": "0.0.5", - "@expo/config": "~8.1.0", - "@expo/config-plugins": "~7.2.0", - "@expo/dev-server": "0.5.5", - "@expo/devcert": "^1.0.0", - "@expo/env": "0.0.5", - "@expo/json-file": "^8.2.37", - "@expo/metro-config": "~0.10.0", - "@expo/osascript": "^2.0.31", - "@expo/package-manager": "~1.0.0", - "@expo/plist": "^0.0.20", - "@expo/prebuild-config": "6.2.6", - "@expo/rudder-sdk-node": "1.1.1", - "@expo/spawn-async": "1.5.0", - "@expo/xcpretty": "^4.2.1", - "@urql/core": "2.3.6", - "@urql/exchange-retry": "0.3.0", - "accepts": "^1.3.8", - "arg": "4.1.0", - "better-opn": "~3.0.2", - "bplist-parser": "^0.3.1", - "cacache": "^15.3.0", - "chalk": "^4.0.0", - "ci-info": "^3.3.0", - "debug": "^4.3.4", - "env-editor": "^0.4.1", - "form-data": "^3.0.1", - "freeport-async": "2.0.0", - "fs-extra": "~8.1.0", - "getenv": "^1.0.0", - "graphql": "15.8.0", - "graphql-tag": "^2.10.1", - "https-proxy-agent": "^5.0.1", - "internal-ip": "4.3.0", - "is-root": "^2.1.0", - "js-yaml": "^3.13.1", - "json-schema-deref-sync": "^0.13.0", - "md5-file": "^3.2.3", - "md5hex": "^1.0.0", - "minipass": "3.1.6", - "node-fetch": "^2.6.7", - "node-forge": "^1.3.1", - "npm-package-arg": "^7.0.0", - "ora": "3.4.0", - "pretty-bytes": "5.6.0", - "progress": "2.0.3", - "prompts": "^2.3.2", - "qrcode-terminal": "0.11.0", - "require-from-string": "^2.0.2", - "requireg": "^0.2.2", - "resolve-from": "^5.0.0", - "semver": "^7.5.3", - "send": "^0.18.0", - "slugify": "^1.3.4", - "structured-headers": "^0.4.1", - "tar": "^6.0.5", - "tempy": "^0.7.1", - "terminal-link": "^2.1.1", - "text-table": "^0.2.0", - "url-join": "4.0.0", - "wrap-ansi": "^7.0.0", - "ws": "^8.12.1" - }, - "dependencies": { - "@expo/prebuild-config": { - "version": "6.2.6", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "@expo/config": "~8.1.0", - "@expo/config-plugins": "~7.2.0", - "@expo/config-types": "^49.0.0-alpha.1", - "@expo/image-utils": "0.3.22", - "@expo/json-file": "^8.2.37", - "debug": "^4.3.1", - "fs-extra": "^9.0.0", - "resolve-from": "^5.0.0", - "semver": "7.5.3", - "xml2js": "0.6.0" - }, - "dependencies": { - "fs-extra": { - "version": "9.1.0", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "at-least-node": "^1.0.0", - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - } - }, - "semver": { - "version": "7.5.3", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "lru-cache": "^6.0.0" - } - } - } - }, - "arg": { - "version": "4.1.0", - "dev": true, - "optional": true, - "peer": true - }, - "commander": { - "version": "7.2.0", - "dev": true, - "optional": true, - "peer": true - }, - "expo-modules-autolinking": { - "version": "1.5.0", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "@expo/config": "~8.1.0", - "chalk": "^4.1.0", - "commander": "^7.2.0", - "fast-glob": "^3.2.5", - "find-up": "^5.0.0", - "fs-extra": "^9.1.0" - }, - "dependencies": { - "fs-extra": { - "version": "9.1.0", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "at-least-node": "^1.0.0", - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - } - } - } - }, - "find-up": { - "version": "5.0.0", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - } - }, - "jsonfile": { - "version": "6.1.0", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "graceful-fs": "^4.1.6", - "universalify": "^2.0.0" - } - }, - "locate-path": { - "version": "6.0.0", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "p-locate": "^5.0.0" - } - }, - "lru-cache": { - "version": "6.0.0", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "yallist": "^4.0.0" - } - }, - "p-locate": { - "version": "5.0.0", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "p-limit": "^3.0.2" - } - }, - "semver": { - "version": "7.5.4", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "lru-cache": "^6.0.0" - } - }, - "universalify": { - "version": "2.0.0", - "dev": true, - "optional": true, - "peer": true - }, - "yallist": { - "version": "4.0.0", - "dev": true, - "optional": true, - "peer": true - } - } - }, - "@expo/code-signing-certificates": { - "version": "0.0.5", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "node-forge": "^1.2.1", - "nullthrows": "^1.1.1" - } - }, - "@expo/config": { - "version": "8.1.2", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "@babel/code-frame": "~7.10.4", - "@expo/config-plugins": "~7.2.0", - "@expo/config-types": "^49.0.0-alpha.1", - "@expo/json-file": "^8.2.37", - "getenv": "^1.0.0", - "glob": "7.1.6", - "require-from-string": "^2.0.2", - "resolve-from": "^5.0.0", - "semver": "7.5.3", - "slugify": "^1.3.4", - "sucrase": "^3.20.0" - }, - "dependencies": { - "@babel/code-frame": { - "version": "7.10.4", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "@babel/highlight": "^7.10.4" - } - }, - "glob": { - "version": "7.1.6", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "lru-cache": { - "version": "6.0.0", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "yallist": "^4.0.0" - } - }, - "semver": { - "version": "7.5.3", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "lru-cache": "^6.0.0" - } - }, - "yallist": { - "version": "4.0.0", - "dev": true, - "optional": true, - "peer": true - } - } - }, - "@expo/config-plugins": { - "version": "7.2.5", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "@expo/config-types": "^49.0.0-alpha.1", - "@expo/json-file": "~8.2.37", - "@expo/plist": "^0.0.20", - "@expo/sdk-runtime-versions": "^1.0.0", - "@react-native/normalize-color": "^2.0.0", - "chalk": "^4.1.2", - "debug": "^4.3.1", - "find-up": "~5.0.0", - "getenv": "^1.0.0", - "glob": "7.1.6", - "resolve-from": "^5.0.0", - "semver": "^7.5.3", - "slash": "^3.0.0", - "xcode": "^3.0.1", - "xml2js": "0.6.0" - }, - "dependencies": { - "find-up": { - "version": "5.0.0", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - } - }, - "glob": { - "version": "7.1.6", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "locate-path": { - "version": "6.0.0", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "p-locate": "^5.0.0" - } - }, - "lru-cache": { - "version": "6.0.0", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "yallist": "^4.0.0" - } - }, - "p-locate": { - "version": "5.0.0", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "p-limit": "^3.0.2" - } - }, - "semver": { - "version": "7.5.4", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "lru-cache": "^6.0.0" - } - }, - "yallist": { - "version": "4.0.0", - "dev": true, - "optional": true, - "peer": true - } - } - }, - "@expo/config-types": { - "version": "49.0.0", - "dev": true, - "optional": true, - "peer": true - }, - "@expo/dev-server": { - "version": "0.5.5", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "@expo/bunyan": "4.0.0", - "@expo/metro-config": "~0.10.0", - "@expo/osascript": "2.0.33", - "@expo/spawn-async": "^1.5.0", - "body-parser": "^1.20.1", - "chalk": "^4.0.0", - "connect": "^3.7.0", - "fs-extra": "9.0.0", - "is-docker": "^2.0.0", - "is-wsl": "^2.1.1", - "node-fetch": "^2.6.0", - "open": "^8.3.0", - "resolve-from": "^5.0.0", - "serialize-error": "6.0.0", - "temp-dir": "^2.0.0" - }, - "dependencies": { - "fs-extra": { - "version": "9.0.0", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "at-least-node": "^1.0.0", - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^1.0.0" - } - }, - "jsonfile": { - "version": "6.1.0", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "graceful-fs": "^4.1.6", - "universalify": "^2.0.0" - }, - "dependencies": { - "universalify": { - "version": "2.0.0", - "dev": true, - "optional": true, - "peer": true - } - } - }, - "universalify": { - "version": "1.0.0", - "dev": true, - "optional": true, - "peer": true - } - } - }, - "@expo/devcert": { - "version": "1.1.0", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "application-config-path": "^0.1.0", - "command-exists": "^1.2.4", - "debug": "^3.1.0", - "eol": "^0.9.1", - "get-port": "^3.2.0", - "glob": "^7.1.2", - "lodash": "^4.17.4", - "mkdirp": "^0.5.1", - "password-prompt": "^1.0.4", - "rimraf": "^2.6.2", - "sudo-prompt": "^8.2.0", - "tmp": "^0.0.33", - "tslib": "^2.4.0" - }, - "dependencies": { - "debug": { - "version": "3.2.7", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "ms": "^2.1.1" - } - } - } - }, - "@expo/env": { - "version": "0.0.5", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "chalk": "^4.0.0", - "debug": "^4.3.4", - "dotenv": "~16.0.3", - "dotenv-expand": "~10.0.0", - "getenv": "^1.0.0" - }, - "dependencies": { - "dotenv": { - "version": "16.0.3", - "dev": true, - "optional": true, - "peer": true - } - } - }, - "@expo/image-utils": { - "version": "0.3.22", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "@expo/spawn-async": "1.5.0", - "chalk": "^4.0.0", - "fs-extra": "9.0.0", - "getenv": "^1.0.0", - "jimp-compact": "0.16.1", - "mime": "^2.4.4", - "node-fetch": "^2.6.0", - "parse-png": "^2.1.0", - "resolve-from": "^5.0.0", - "semver": "7.3.2", - "tempy": "0.3.0" - }, - "dependencies": { - "crypto-random-string": { - "version": "1.0.0", - "dev": true, - "optional": true, - "peer": true - }, - "fs-extra": { - "version": "9.0.0", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "at-least-node": "^1.0.0", - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^1.0.0" - } - }, - "jsonfile": { - "version": "6.1.0", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "graceful-fs": "^4.1.6", - "universalify": "^2.0.0" - }, - "dependencies": { - "universalify": { - "version": "2.0.0", - "dev": true, - "optional": true, - "peer": true - } - } - }, - "semver": { - "version": "7.3.2", - "dev": true, - "optional": true, - "peer": true - }, - "temp-dir": { - "version": "1.0.0", - "dev": true, - "optional": true, - "peer": true - }, - "tempy": { - "version": "0.3.0", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "temp-dir": "^1.0.0", - "type-fest": "^0.3.1", - "unique-string": "^1.0.0" - } - }, - "type-fest": { - "version": "0.3.1", - "dev": true, - "optional": true, - "peer": true - }, - "unique-string": { - "version": "1.0.0", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "crypto-random-string": "^1.0.0" - } - }, - "universalify": { - "version": "1.0.0", - "dev": true, - "optional": true, - "peer": true - } - } - }, - "@expo/json-file": { - "version": "8.2.37", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "@babel/code-frame": "~7.10.4", - "json5": "^2.2.2", - "write-file-atomic": "^2.3.0" - }, - "dependencies": { - "@babel/code-frame": { - "version": "7.10.4", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "@babel/highlight": "^7.10.4" - } - }, - "write-file-atomic": { - "version": "2.4.3", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "graceful-fs": "^4.1.11", - "imurmurhash": "^0.1.4", - "signal-exit": "^3.0.2" - } - } - } - }, - "@expo/metro-config": { - "version": "0.10.7", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "@expo/config": "~8.1.0", - "@expo/env": "0.0.5", - "@expo/json-file": "~8.2.37", - "chalk": "^4.1.0", - "debug": "^4.3.2", - "find-yarn-workspace-root": "~2.0.0", - "getenv": "^1.0.0", - "jsc-safe-url": "^0.2.4", - "lightningcss": "~1.19.0", - "postcss": "~8.4.21", - "resolve-from": "^5.0.0", - "sucrase": "^3.20.0" - } - }, - "@expo/osascript": { - "version": "2.0.33", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "@expo/spawn-async": "^1.5.0", - "exec-async": "^2.2.0" - } - }, - "@expo/package-manager": { - "version": "1.0.2", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "@expo/json-file": "^8.2.37", - "@expo/spawn-async": "^1.5.0", - "ansi-regex": "^5.0.0", - "chalk": "^4.0.0", - "find-up": "^5.0.0", - "find-yarn-workspace-root": "~2.0.0", - "js-yaml": "^3.13.1", - "micromatch": "^4.0.2", - "npm-package-arg": "^7.0.0", - "split": "^1.0.1", - "sudo-prompt": "9.1.1" - }, - "dependencies": { - "find-up": { - "version": "5.0.0", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - } - }, - "locate-path": { - "version": "6.0.0", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "p-locate": "^5.0.0" - } - }, - "p-locate": { - "version": "5.0.0", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "p-limit": "^3.0.2" - } - }, - "sudo-prompt": { - "version": "9.1.1", - "dev": true, - "optional": true, - "peer": true - } - } - }, - "@expo/plist": { - "version": "0.0.20", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "@xmldom/xmldom": "~0.7.7", - "base64-js": "^1.2.3", - "xmlbuilder": "^14.0.0" - } - }, - "@expo/rudder-sdk-node": { - "version": "1.1.1", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "@expo/bunyan": "^4.0.0", - "@segment/loosely-validate-event": "^2.0.0", - "fetch-retry": "^4.1.1", - "md5": "^2.2.1", - "node-fetch": "^2.6.1", - "remove-trailing-slash": "^0.1.0", - "uuid": "^8.3.2" - }, - "dependencies": { - "uuid": { - "version": "8.3.2", - "dev": true, - "optional": true, - "peer": true - } - } - }, - "@expo/sdk-runtime-versions": { - "version": "1.0.0", - "dev": true, - "optional": true, - "peer": true - }, - "@expo/spawn-async": { - "version": "1.5.0", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "cross-spawn": "^6.0.5" - }, - "dependencies": { - "cross-spawn": { - "version": "6.0.5", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "nice-try": "^1.0.4", - "path-key": "^2.0.1", - "semver": "^5.5.0", - "shebang-command": "^1.2.0", - "which": "^1.2.9" - } - }, - "path-key": { - "version": "2.0.1", - "dev": true, - "optional": true, - "peer": true - }, - "semver": { - "version": "5.7.2", - "dev": true, - "optional": true, - "peer": true - }, - "shebang-command": { - "version": "1.2.0", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "shebang-regex": "^1.0.0" - } - }, - "shebang-regex": { - "version": "1.0.0", - "dev": true, - "optional": true, - "peer": true - }, - "which": { - "version": "1.3.1", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "isexe": "^2.0.0" - } - } - } - }, - "@expo/vector-icons": { - "version": "13.0.0", - "dev": true, - "optional": true, - "peer": true - }, - "@expo/xcpretty": { - "version": "4.2.2", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "@babel/code-frame": "7.10.4", - "chalk": "^4.1.0", - "find-up": "^5.0.0", - "js-yaml": "^4.1.0" - }, - "dependencies": { - "@babel/code-frame": { - "version": "7.10.4", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "@babel/highlight": "^7.10.4" - } - }, - "argparse": { - "version": "2.0.1", - "dev": true, - "optional": true, - "peer": true - }, - "find-up": { - "version": "5.0.0", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - } - }, - "js-yaml": { - "version": "4.1.0", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "argparse": "^2.0.1" - } - }, - "locate-path": { - "version": "6.0.0", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "p-locate": "^5.0.0" - } - }, - "p-locate": { - "version": "5.0.0", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "p-limit": "^3.0.2" - } - } - } - }, - "@gar/promisify": { - "version": "1.1.3", - "dev": true, - "optional": true, - "peer": true - }, - "@graphql-typed-document-node/core": { - "version": "3.2.0", - "dev": true, - "optional": true, - "peer": true, - "requires": {} - }, - "@hapi/hoek": { - "version": "9.3.0", - "dev": true, - "optional": true, - "peer": true - }, - "@hapi/topo": { - "version": "5.1.0", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "@hapi/hoek": "^9.0.0" - } - }, - "@istanbuljs/load-nyc-config": { - "version": "1.1.0", - "dev": true, - "requires": { - "camelcase": "^5.3.1", - "find-up": "^4.1.0", - "get-package-type": "^0.1.0", - "js-yaml": "^3.13.1", - "resolve-from": "^5.0.0" - } - }, - "@istanbuljs/schema": { - "version": "0.1.3", - "dev": true - }, - "@jest/console": { - "version": "29.6.1", - "dev": true, - "requires": { - "@jest/types": "^29.6.1", - "@types/node": "*", - "chalk": "^4.0.0", - "jest-message-util": "^29.6.1", - "jest-util": "^29.6.1", - "slash": "^3.0.0" - } - }, - "@jest/core": { - "version": "29.6.1", - "dev": true, - "requires": { - "@jest/console": "^29.6.1", - "@jest/reporters": "^29.6.1", - "@jest/test-result": "^29.6.1", - "@jest/transform": "^29.6.1", - "@jest/types": "^29.6.1", - "@types/node": "*", - "ansi-escapes": "^4.2.1", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "exit": "^0.1.2", - "graceful-fs": "^4.2.9", - "jest-changed-files": "^29.5.0", - "jest-config": "^29.6.1", - "jest-haste-map": "^29.6.1", - "jest-message-util": "^29.6.1", - "jest-regex-util": "^29.4.3", - "jest-resolve": "^29.6.1", - "jest-resolve-dependencies": "^29.6.1", - "jest-runner": "^29.6.1", - "jest-runtime": "^29.6.1", - "jest-snapshot": "^29.6.1", - "jest-util": "^29.6.1", - "jest-validate": "^29.6.1", - "jest-watcher": "^29.6.1", - "micromatch": "^4.0.4", - "pretty-format": "^29.6.1", - "slash": "^3.0.0", - "strip-ansi": "^6.0.0" - } - }, - "@jest/create-cache-key-function": { - "version": "29.6.2", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "@jest/types": "^29.6.1" - } - }, - "@jest/environment": { - "version": "29.6.1", - "dev": true, - "requires": { - "@jest/fake-timers": "^29.6.1", - "@jest/types": "^29.6.1", - "@types/node": "*", - "jest-mock": "^29.6.1" - } - }, - "@jest/expect": { - "version": "29.6.1", - "dev": true, - "requires": { - "expect": "^29.6.1", - "jest-snapshot": "^29.6.1" - } - }, - "@jest/expect-utils": { - "version": "29.6.1", - "dev": true, - "requires": { - "jest-get-type": "^29.4.3" - } - }, - "@jest/fake-timers": { - "version": "29.6.1", - "dev": true, - "requires": { - "@jest/types": "^29.6.1", - "@sinonjs/fake-timers": "^10.0.2", - "@types/node": "*", - "jest-message-util": "^29.6.1", - "jest-mock": "^29.6.1", - "jest-util": "^29.6.1" - } - }, - "@jest/globals": { - "version": "29.6.1", - "dev": true, - "requires": { - "@jest/environment": "^29.6.1", - "@jest/expect": "^29.6.1", - "@jest/types": "^29.6.1", - "jest-mock": "^29.6.1" - } - }, - "@jest/reporters": { - "version": "29.6.1", - "dev": true, - "requires": { - "@bcoe/v8-coverage": "^0.2.3", - "@jest/console": "^29.6.1", - "@jest/test-result": "^29.6.1", - "@jest/transform": "^29.6.1", - "@jest/types": "^29.6.1", - "@jridgewell/trace-mapping": "^0.3.18", - "@types/node": "*", - "chalk": "^4.0.0", - "collect-v8-coverage": "^1.0.0", - "exit": "^0.1.2", - "glob": "^7.1.3", - "graceful-fs": "^4.2.9", - "istanbul-lib-coverage": "^3.0.0", - "istanbul-lib-instrument": "^5.1.0", - "istanbul-lib-report": "^3.0.0", - "istanbul-lib-source-maps": "^4.0.0", - "istanbul-reports": "^3.1.3", - "jest-message-util": "^29.6.1", - "jest-util": "^29.6.1", - "jest-worker": "^29.6.1", - "slash": "^3.0.0", - "string-length": "^4.0.1", - "strip-ansi": "^6.0.0", - "v8-to-istanbul": "^9.0.1" - } - }, - "@jest/schemas": { - "version": "29.6.0", - "dev": true, - "requires": { - "@sinclair/typebox": "^0.27.8" - } - }, - "@jest/source-map": { - "version": "29.6.0", - "dev": true, - "requires": { - "@jridgewell/trace-mapping": "^0.3.18", - "callsites": "^3.0.0", - "graceful-fs": "^4.2.9" - } - }, - "@jest/test-result": { - "version": "29.6.1", - "dev": true, - "requires": { - "@jest/console": "^29.6.1", - "@jest/types": "^29.6.1", - "@types/istanbul-lib-coverage": "^2.0.0", - "collect-v8-coverage": "^1.0.0" - } - }, - "@jest/test-sequencer": { - "version": "29.6.1", - "dev": true, - "requires": { - "@jest/test-result": "^29.6.1", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^29.6.1", - "slash": "^3.0.0" - } - }, - "@jest/transform": { - "version": "29.6.1", - "dev": true, - "requires": { - "@babel/core": "^7.11.6", - "@jest/types": "^29.6.1", - "@jridgewell/trace-mapping": "^0.3.18", - "babel-plugin-istanbul": "^6.1.1", - "chalk": "^4.0.0", - "convert-source-map": "^2.0.0", - "fast-json-stable-stringify": "^2.1.0", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^29.6.1", - "jest-regex-util": "^29.4.3", - "jest-util": "^29.6.1", - "micromatch": "^4.0.4", - "pirates": "^4.0.4", - "slash": "^3.0.0", - "write-file-atomic": "^4.0.2" - } - }, - "@jest/types": { - "version": "29.6.1", - "dev": true, - "requires": { - "@jest/schemas": "^29.6.0", - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^17.0.8", - "chalk": "^4.0.0" - } - }, - "@jridgewell/gen-mapping": { - "version": "0.3.3", - "dev": true, - "requires": { - "@jridgewell/set-array": "^1.0.1", - "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.9" - } - }, - "@jridgewell/resolve-uri": { - "version": "3.1.0", - "dev": true - }, - "@jridgewell/set-array": { - "version": "1.1.2", - "dev": true - }, - "@jridgewell/source-map": { - "version": "0.3.5", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "@jridgewell/gen-mapping": "^0.3.0", - "@jridgewell/trace-mapping": "^0.3.9" - } - }, - "@jridgewell/sourcemap-codec": { - "version": "1.4.15", - "dev": true - }, - "@jridgewell/trace-mapping": { - "version": "0.3.18", - "dev": true, - "requires": { - "@jridgewell/resolve-uri": "3.1.0", - "@jridgewell/sourcemap-codec": "1.4.14" - }, - "dependencies": { - "@jridgewell/sourcemap-codec": { - "version": "1.4.14", - "dev": true - } - } - }, - "@nicolo-ribaudo/semver-v6": { - "version": "6.3.3", - "dev": true - }, - "@noble/hashes": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.3.2.tgz", - "integrity": "sha512-MVC8EAQp7MvEcm30KWENFjgR+Mkmf+D189XJTkFIlwohU5hcBbn1ZkKq7KVTi2Hme3PMGF390DaL52beVrIihQ==", - "dev": true - }, - "@nodelib/fs.scandir": { - "version": "2.1.5", - "dev": true, - "optional": true, - "requires": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - } - }, - "@nodelib/fs.stat": { - "version": "2.0.5", - "dev": true, - "optional": true - }, - "@nodelib/fs.walk": { - "version": "1.2.8", - "dev": true, - "optional": true, - "requires": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - } - }, - "@npmcli/fs": { - "version": "1.1.1", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "@gar/promisify": "^1.0.1", - "semver": "^7.3.5" - }, - "dependencies": { - "lru-cache": { - "version": "6.0.0", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "yallist": "^4.0.0" - } - }, - "semver": { - "version": "7.5.4", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "lru-cache": "^6.0.0" - } - }, - "yallist": { - "version": "4.0.0", - "dev": true, - "optional": true, - "peer": true - } - } - }, - "@npmcli/move-file": { - "version": "1.1.2", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "mkdirp": "^1.0.4", - "rimraf": "^3.0.2" - }, - "dependencies": { - "mkdirp": { - "version": "1.0.4", - "dev": true, - "optional": true, - "peer": true - }, - "rimraf": { - "version": "3.0.2", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "glob": "^7.1.3" - } - } - } - }, - "@peculiar/asn1-schema": { - "version": "2.3.6", - "dev": true, - "requires": { - "asn1js": "^3.0.5", - "pvtsutils": "^1.3.2", - "tslib": "^2.4.0" - } - }, - "@peculiar/json-schema": { - "version": "1.1.12", - "dev": true, - "requires": { - "tslib": "^2.0.0" - } - }, - "@peculiar/webcrypto": { - "version": "1.4.3", - "dev": true, - "requires": { - "@peculiar/asn1-schema": "^2.3.6", - "@peculiar/json-schema": "^1.1.12", - "pvtsutils": "^1.3.2", - "tslib": "^2.5.0", - "webcrypto-core": "^1.7.7" - } - }, - "@react-native-community/cli": { - "version": "11.3.5", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "@react-native-community/cli-clean": "11.3.5", - "@react-native-community/cli-config": "11.3.5", - "@react-native-community/cli-debugger-ui": "11.3.5", - "@react-native-community/cli-doctor": "11.3.5", - "@react-native-community/cli-hermes": "11.3.5", - "@react-native-community/cli-plugin-metro": "11.3.5", - "@react-native-community/cli-server-api": "11.3.5", - "@react-native-community/cli-tools": "11.3.5", - "@react-native-community/cli-types": "11.3.5", - "chalk": "^4.1.2", - "commander": "^9.4.1", - "execa": "^5.0.0", - "find-up": "^4.1.0", - "fs-extra": "^8.1.0", - "graceful-fs": "^4.1.3", - "prompts": "^2.4.0", - "semver": "^6.3.0" - }, - "dependencies": { - "commander": { - "version": "9.5.0", - "dev": true, - "optional": true, - "peer": true - } - } - }, - "@react-native-community/cli-clean": { - "version": "11.3.5", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "@react-native-community/cli-tools": "11.3.5", - "chalk": "^4.1.2", - "execa": "^5.0.0", - "prompts": "^2.4.0" - } - }, - "@react-native-community/cli-config": { - "version": "11.3.5", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "@react-native-community/cli-tools": "11.3.5", - "chalk": "^4.1.2", - "cosmiconfig": "^5.1.0", - "deepmerge": "^4.3.0", - "glob": "^7.1.3", - "joi": "^17.2.1" - } - }, - "@react-native-community/cli-debugger-ui": { - "version": "11.3.5", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "serve-static": "^1.13.1" - } - }, - "@react-native-community/cli-doctor": { - "version": "11.3.5", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "@react-native-community/cli-config": "11.3.5", - "@react-native-community/cli-platform-android": "11.3.5", - "@react-native-community/cli-platform-ios": "11.3.5", - "@react-native-community/cli-tools": "11.3.5", - "chalk": "^4.1.2", - "command-exists": "^1.2.8", - "envinfo": "^7.7.2", - "execa": "^5.0.0", - "hermes-profile-transformer": "^0.0.6", - "ip": "^1.1.5", - "node-stream-zip": "^1.9.1", - "ora": "^5.4.1", - "prompts": "^2.4.0", - "semver": "^6.3.0", - "strip-ansi": "^5.2.0", - "sudo-prompt": "^9.0.0", - "wcwidth": "^1.0.1", - "yaml": "^2.2.1" - }, - "dependencies": { - "cli-cursor": { - "version": "3.1.0", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "restore-cursor": "^3.1.0" - } - }, - "log-symbols": { - "version": "4.1.0", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "chalk": "^4.1.0", - "is-unicode-supported": "^0.1.0" - } - }, - "ora": { - "version": "5.4.1", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "bl": "^4.1.0", - "chalk": "^4.1.0", - "cli-cursor": "^3.1.0", - "cli-spinners": "^2.5.0", - "is-interactive": "^1.0.0", - "is-unicode-supported": "^0.1.0", - "log-symbols": "^4.1.0", - "strip-ansi": "^6.0.0", - "wcwidth": "^1.0.1" - }, - "dependencies": { - "strip-ansi": { - "version": "6.0.1", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "ansi-regex": "^5.0.1" - } - } - } - }, - "restore-cursor": { - "version": "3.1.0", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "onetime": "^5.1.0", - "signal-exit": "^3.0.2" - } - }, - "strip-ansi": { - "version": "5.2.0", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "ansi-regex": "^4.1.0" - }, - "dependencies": { - "ansi-regex": { - "version": "4.1.1", - "dev": true, - "optional": true, - "peer": true - } - } - }, - "sudo-prompt": { - "version": "9.2.1", - "dev": true, - "optional": true, - "peer": true - } - } - }, - "@react-native-community/cli-hermes": { - "version": "11.3.5", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "@react-native-community/cli-platform-android": "11.3.5", - "@react-native-community/cli-tools": "11.3.5", - "chalk": "^4.1.2", - "hermes-profile-transformer": "^0.0.6", - "ip": "^1.1.5" - } - }, - "@react-native-community/cli-platform-android": { - "version": "11.3.5", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "@react-native-community/cli-tools": "11.3.5", - "chalk": "^4.1.2", - "execa": "^5.0.0", - "glob": "^7.1.3", - "logkitty": "^0.7.1" - } - }, - "@react-native-community/cli-platform-ios": { - "version": "11.3.5", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "@react-native-community/cli-tools": "11.3.5", - "chalk": "^4.1.2", - "execa": "^5.0.0", - "fast-xml-parser": "^4.0.12", - "glob": "^7.1.3", - "ora": "^5.4.1" - }, - "dependencies": { - "cli-cursor": { - "version": "3.1.0", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "restore-cursor": "^3.1.0" - } - }, - "log-symbols": { - "version": "4.1.0", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "chalk": "^4.1.0", - "is-unicode-supported": "^0.1.0" - } - }, - "ora": { - "version": "5.4.1", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "bl": "^4.1.0", - "chalk": "^4.1.0", - "cli-cursor": "^3.1.0", - "cli-spinners": "^2.5.0", - "is-interactive": "^1.0.0", - "is-unicode-supported": "^0.1.0", - "log-symbols": "^4.1.0", - "strip-ansi": "^6.0.0", - "wcwidth": "^1.0.1" - } - }, - "restore-cursor": { - "version": "3.1.0", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "onetime": "^5.1.0", - "signal-exit": "^3.0.2" - } - } - } - }, - "@react-native-community/cli-plugin-metro": { - "version": "11.3.5", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "@react-native-community/cli-server-api": "11.3.5", - "@react-native-community/cli-tools": "11.3.5", - "chalk": "^4.1.2", - "execa": "^5.0.0", - "metro": "0.76.7", - "metro-config": "0.76.7", - "metro-core": "0.76.7", - "metro-react-native-babel-transformer": "0.76.7", - "metro-resolver": "0.76.7", - "metro-runtime": "0.76.7", - "readline": "^1.3.0" - } - }, - "@react-native-community/cli-server-api": { - "version": "11.3.5", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "@react-native-community/cli-debugger-ui": "11.3.5", - "@react-native-community/cli-tools": "11.3.5", - "compression": "^1.7.1", - "connect": "^3.6.5", - "errorhandler": "^1.5.1", - "nocache": "^3.0.1", - "pretty-format": "^26.6.2", - "serve-static": "^1.13.1", - "ws": "^7.5.1" - }, - "dependencies": { - "@jest/types": { - "version": "26.6.2", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^15.0.0", - "chalk": "^4.0.0" - } - }, - "@types/yargs": { - "version": "15.0.15", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "@types/yargs-parser": "*" - } - }, - "pretty-format": { - "version": "26.6.2", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "@jest/types": "^26.6.2", - "ansi-regex": "^5.0.0", - "ansi-styles": "^4.0.0", - "react-is": "^17.0.1" - } - }, - "react-is": { - "version": "17.0.2", - "dev": true, - "optional": true, - "peer": true - }, - "ws": { - "version": "7.5.9", - "dev": true, - "optional": true, - "peer": true, - "requires": {} - } - } - }, - "@react-native-community/cli-tools": { - "version": "11.3.5", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "appdirsjs": "^1.2.4", - "chalk": "^4.1.2", - "find-up": "^5.0.0", - "mime": "^2.4.1", - "node-fetch": "^2.6.0", - "open": "^6.2.0", - "ora": "^5.4.1", - "semver": "^6.3.0", - "shell-quote": "^1.7.3" - }, - "dependencies": { - "cli-cursor": { - "version": "3.1.0", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "restore-cursor": "^3.1.0" - } - }, - "find-up": { - "version": "5.0.0", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - } - }, - "is-wsl": { - "version": "1.1.0", - "dev": true, - "optional": true, - "peer": true - }, - "locate-path": { - "version": "6.0.0", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "p-locate": "^5.0.0" - } - }, - "log-symbols": { - "version": "4.1.0", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "chalk": "^4.1.0", - "is-unicode-supported": "^0.1.0" - } - }, - "open": { - "version": "6.4.0", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "is-wsl": "^1.1.0" - } - }, - "ora": { - "version": "5.4.1", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "bl": "^4.1.0", - "chalk": "^4.1.0", - "cli-cursor": "^3.1.0", - "cli-spinners": "^2.5.0", - "is-interactive": "^1.0.0", - "is-unicode-supported": "^0.1.0", - "log-symbols": "^4.1.0", - "strip-ansi": "^6.0.0", - "wcwidth": "^1.0.1" - } - }, - "p-locate": { - "version": "5.0.0", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "p-limit": "^3.0.2" - } - }, - "restore-cursor": { - "version": "3.1.0", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "onetime": "^5.1.0", - "signal-exit": "^3.0.2" - } - } - } - }, - "@react-native-community/cli-types": { - "version": "11.3.5", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "joi": "^17.2.1" - } - }, - "@react-native/assets-registry": { - "version": "0.72.0", - "dev": true, - "optional": true, - "peer": true - }, - "@react-native/codegen": { - "version": "0.72.6", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "@babel/parser": "^7.20.0", - "flow-parser": "^0.206.0", - "jscodeshift": "^0.14.0", - "nullthrows": "^1.1.1" - } - }, - "@react-native/gradle-plugin": { - "version": "0.72.11", - "dev": true, - "optional": true, - "peer": true - }, - "@react-native/js-polyfills": { - "version": "0.72.1", - "dev": true, - "optional": true, - "peer": true - }, - "@react-native/normalize-color": { - "version": "2.1.0", - "dev": true, - "optional": true, - "peer": true - }, - "@react-native/normalize-colors": { - "version": "0.72.0", - "dev": true, - "optional": true, - "peer": true - }, - "@react-native/virtualized-lists": { - "version": "0.72.6", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "invariant": "^2.2.4", - "nullthrows": "^1.1.1" - } - }, - "@segment/loosely-validate-event": { - "version": "2.0.0", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "component-type": "^1.2.1", - "join-component": "^1.1.0" - } - }, - "@sideway/address": { - "version": "4.1.4", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "@hapi/hoek": "^9.0.0" - } - }, - "@sideway/formula": { - "version": "3.0.1", - "dev": true, - "optional": true, - "peer": true - }, - "@sideway/pinpoint": { - "version": "2.0.0", - "dev": true, - "optional": true, - "peer": true - }, - "@sinclair/typebox": { - "version": "0.27.8", - "dev": true - }, - "@sinonjs/commons": { - "version": "3.0.0", - "dev": true, - "requires": { - "type-detect": "4.0.8" - } - }, - "@sinonjs/fake-timers": { - "version": "10.3.0", - "dev": true, - "requires": { - "@sinonjs/commons": "^3.0.0" - } - }, - "@tsconfig/node10": { - "version": "1.0.9", - "dev": true, - "optional": true, - "peer": true - }, - "@tsconfig/node12": { - "version": "1.0.11", - "dev": true, - "optional": true, - "peer": true - }, - "@tsconfig/node14": { - "version": "1.0.3", - "dev": true, - "optional": true, - "peer": true - }, - "@tsconfig/node16": { - "version": "1.0.4", - "dev": true, - "optional": true, - "peer": true - }, - "@types/babel__core": { - "version": "7.20.1", - "dev": true, - "requires": { - "@babel/parser": "^7.20.7", - "@babel/types": "^7.20.7", - "@types/babel__generator": "*", - "@types/babel__template": "*", - "@types/babel__traverse": "*" - } - }, - "@types/babel__generator": { - "version": "7.6.4", - "dev": true, - "requires": { - "@babel/types": "^7.0.0" - } - }, - "@types/babel__template": { - "version": "7.4.1", - "dev": true, - "requires": { - "@babel/parser": "^7.1.0", - "@babel/types": "^7.0.0" - } - }, - "@types/babel__traverse": { - "version": "7.20.1", - "dev": true, - "requires": { - "@babel/types": "^7.20.7" - } - }, - "@types/graceful-fs": { - "version": "4.1.6", - "dev": true, - "requires": { - "@types/node": "*" - } - }, - "@types/hdkey": { - "version": "2.0.1", - "dev": true, - "requires": { - "@types/node": "*" - } - }, - "@types/istanbul-lib-coverage": { - "version": "2.0.4", - "dev": true - }, - "@types/istanbul-lib-report": { - "version": "3.0.0", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "*" - } - }, - "@types/istanbul-reports": { - "version": "3.0.1", - "dev": true, - "requires": { - "@types/istanbul-lib-report": "*" - } - }, - "@types/jest": { - "version": "29.5.3", - "dev": true, - "requires": { - "expect": "^29.0.0", - "pretty-format": "^29.0.0" - } - }, - "@types/node": { - "version": "20.3.3", - "dev": true - }, - "@types/prettier": { - "version": "2.7.3", - "dev": true - }, - "@types/stack-utils": { - "version": "2.0.1", - "dev": true - }, - "@types/yargs": { - "version": "17.0.24", - "dev": true, - "requires": { - "@types/yargs-parser": "*" - } - }, - "@types/yargs-parser": { - "version": "21.0.0", - "dev": true - }, - "@unimodules/core": { - "version": "7.1.2", - "dev": true, - "optional": true, - "requires": { - "compare-versions": "^3.4.0" - } - }, - "@unimodules/react-native-adapter": { - "version": "6.3.9", - "dev": true, - "optional": true, - "requires": { - "expo-modules-autolinking": "^0.0.3", - "invariant": "^2.2.4" - } - }, - "@urql/core": { - "version": "2.3.6", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "@graphql-typed-document-node/core": "^3.1.0", - "wonka": "^4.0.14" - } - }, - "@urql/exchange-retry": { - "version": "0.3.0", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "@urql/core": ">=2.3.1", - "wonka": "^4.0.14" - } - }, - "@xmldom/xmldom": { - "version": "0.7.13", - "dev": true, - "optional": true, - "peer": true - }, - "abort-controller": { - "version": "3.0.0", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "event-target-shim": "^5.0.0" - } - }, - "accepts": { - "version": "1.3.8", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "mime-types": "~2.1.34", - "negotiator": "0.6.3" - } - }, - "acorn": { - "version": "8.9.0", - "dev": true, - "optional": true, - "peer": true - }, - "acorn-walk": { - "version": "8.2.0", - "dev": true, - "optional": true, - "peer": true - }, - "agent-base": { - "version": "6.0.2", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "debug": "4" - } - }, - "aggregate-error": { - "version": "3.1.0", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "clean-stack": "^2.0.0", - "indent-string": "^4.0.0" - } - }, - "anser": { - "version": "1.4.10", - "dev": true, - "optional": true, - "peer": true - }, - "ansi-escapes": { - "version": "4.3.2", - "dev": true, - "requires": { - "type-fest": "^0.21.3" - } - }, - "ansi-fragments": { - "version": "0.2.1", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "colorette": "^1.0.7", - "slice-ansi": "^2.0.0", - "strip-ansi": "^5.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "4.1.1", - "dev": true, - "optional": true, - "peer": true - }, - "strip-ansi": { - "version": "5.2.0", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "ansi-regex": "^4.1.0" - } - } - } - }, - "ansi-regex": { - "version": "5.0.1", - "dev": true - }, - "ansi-styles": { - "version": "4.3.0", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "any-promise": { - "version": "1.3.0", - "dev": true, - "optional": true, - "peer": true - }, - "anymatch": { - "version": "3.1.3", - "dev": true, - "requires": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - } - }, - "appdirsjs": { - "version": "1.2.7", - "dev": true, - "optional": true, - "peer": true - }, - "application-config-path": { - "version": "0.1.1", - "dev": true, - "optional": true, - "peer": true - }, - "arg": { - "version": "4.1.3", - "dev": true, - "optional": true, - "peer": true - }, - "argparse": { - "version": "1.0.10", - "dev": true, - "requires": { - "sprintf-js": "~1.0.2" - } - }, - "array-union": { - "version": "2.1.0", - "dev": true, - "optional": true, - "peer": true - }, - "asap": { - "version": "2.0.6", - "dev": true, - "optional": true, - "peer": true - }, - "asmcrypto.js": { - "version": "0.22.0", - "dev": true - }, - "asn1js": { - "version": "3.0.5", - "dev": true, - "requires": { - "pvtsutils": "^1.3.2", - "pvutils": "^1.1.3", - "tslib": "^2.4.0" - } - }, - "assert": { - "version": "2.0.0", - "dev": true, - "requires": { - "es6-object-assign": "^1.1.0", - "is-nan": "^1.2.1", - "object-is": "^1.0.1", - "util": "^0.12.0" - } - }, - "ast-types": { - "version": "0.15.2", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "tslib": "^2.0.1" - } - }, - "astral-regex": { - "version": "1.0.0", - "dev": true, - "optional": true, - "peer": true - }, - "async": { - "version": "3.2.4", - "dev": true, - "optional": true, - "peer": true - }, - "async-limiter": { - "version": "1.0.1", - "dev": true, - "optional": true, - "peer": true - }, - "asynckit": { - "version": "0.4.0", - "dev": true, - "optional": true, - "peer": true - }, - "at-least-node": { - "version": "1.0.0", - "dev": true, - "optional": true - }, - "available-typed-arrays": { - "version": "1.0.5", - "dev": true - }, - "b64-lite": { - "version": "1.4.0", - "dev": true, - "requires": { - "base-64": "^0.1.0" - } - }, - "b64u-lite": { - "version": "1.1.0", - "dev": true, - "requires": { - "b64-lite": "^1.4.0" - } - }, - "babel-core": { - "version": "7.0.0-bridge.0", - "dev": true, - "optional": true, - "peer": true, - "requires": {} - }, - "babel-jest": { - "version": "29.6.1", - "dev": true, - "requires": { - "@jest/transform": "^29.6.1", - "@types/babel__core": "^7.1.14", - "babel-plugin-istanbul": "^6.1.1", - "babel-preset-jest": "^29.5.0", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "slash": "^3.0.0" - } - }, - "babel-plugin-istanbul": { - "version": "6.1.1", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "@istanbuljs/load-nyc-config": "^1.0.0", - "@istanbuljs/schema": "^0.1.2", - "istanbul-lib-instrument": "^5.0.4", - "test-exclude": "^6.0.0" - } - }, - "babel-plugin-jest-hoist": { - "version": "29.5.0", - "dev": true, - "requires": { - "@babel/template": "^7.3.3", - "@babel/types": "^7.3.3", - "@types/babel__core": "^7.1.14", - "@types/babel__traverse": "^7.0.6" - } - }, - "babel-plugin-module-resolver": { - "version": "5.0.0", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "find-babel-config": "^2.0.0", - "glob": "^8.0.3", - "pkg-up": "^3.1.0", - "reselect": "^4.1.7", - "resolve": "^1.22.1" - }, - "dependencies": { - "brace-expansion": { - "version": "2.0.1", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "balanced-match": "^1.0.0" - } - }, - "glob": { - "version": "8.1.0", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^5.0.1", - "once": "^1.3.0" - } - }, - "minimatch": { - "version": "5.1.6", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "brace-expansion": "^2.0.1" - } - } - } - }, - "babel-plugin-polyfill-corejs2": { - "version": "0.4.4", - "dev": true, - "requires": { - "@babel/compat-data": "^7.22.6", - "@babel/helper-define-polyfill-provider": "^0.4.1", - "@nicolo-ribaudo/semver-v6": "^6.3.3" - } - }, - "babel-plugin-polyfill-corejs3": { - "version": "0.8.2", - "dev": true, - "requires": { - "@babel/helper-define-polyfill-provider": "^0.4.1", - "core-js-compat": "^3.31.0" - } - }, - "babel-plugin-polyfill-regenerator": { - "version": "0.5.1", - "dev": true, - "requires": { - "@babel/helper-define-polyfill-provider": "^0.4.1" - } - }, - "babel-plugin-react-native-web": { - "version": "0.18.12", - "dev": true, - "optional": true, - "peer": true - }, - "babel-plugin-syntax-trailing-function-commas": { - "version": "7.0.0-beta.0", - "dev": true, - "optional": true, - "peer": true - }, - "babel-plugin-transform-flow-enums": { - "version": "0.0.2", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "@babel/plugin-syntax-flow": "^7.12.1" - } - }, - "babel-preset-current-node-syntax": { - "version": "1.0.1", - "dev": true, - "requires": { - "@babel/plugin-syntax-async-generators": "^7.8.4", - "@babel/plugin-syntax-bigint": "^7.8.3", - "@babel/plugin-syntax-class-properties": "^7.8.3", - "@babel/plugin-syntax-import-meta": "^7.8.3", - "@babel/plugin-syntax-json-strings": "^7.8.3", - "@babel/plugin-syntax-logical-assignment-operators": "^7.8.3", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", - "@babel/plugin-syntax-numeric-separator": "^7.8.3", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", - "@babel/plugin-syntax-optional-chaining": "^7.8.3", - "@babel/plugin-syntax-top-level-await": "^7.8.3" - } - }, - "babel-preset-expo": { - "version": "9.5.1", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "@babel/plugin-proposal-decorators": "^7.12.9", - "@babel/plugin-proposal-export-namespace-from": "^7.18.9", - "@babel/plugin-proposal-object-rest-spread": "^7.12.13", - "@babel/plugin-transform-react-jsx": "^7.12.17", - "@babel/preset-env": "^7.20.0", - "babel-plugin-module-resolver": "^5.0.0", - "babel-plugin-react-native-web": "~0.18.10", - "metro-react-native-babel-preset": "0.76.7" - } - }, - "babel-preset-fbjs": { - "version": "3.4.0", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "@babel/plugin-proposal-class-properties": "^7.0.0", - "@babel/plugin-proposal-object-rest-spread": "^7.0.0", - "@babel/plugin-syntax-class-properties": "^7.0.0", - "@babel/plugin-syntax-flow": "^7.0.0", - "@babel/plugin-syntax-jsx": "^7.0.0", - "@babel/plugin-syntax-object-rest-spread": "^7.0.0", - "@babel/plugin-transform-arrow-functions": "^7.0.0", - "@babel/plugin-transform-block-scoped-functions": "^7.0.0", - "@babel/plugin-transform-block-scoping": "^7.0.0", - "@babel/plugin-transform-classes": "^7.0.0", - "@babel/plugin-transform-computed-properties": "^7.0.0", - "@babel/plugin-transform-destructuring": "^7.0.0", - "@babel/plugin-transform-flow-strip-types": "^7.0.0", - "@babel/plugin-transform-for-of": "^7.0.0", - "@babel/plugin-transform-function-name": "^7.0.0", - "@babel/plugin-transform-literals": "^7.0.0", - "@babel/plugin-transform-member-expression-literals": "^7.0.0", - "@babel/plugin-transform-modules-commonjs": "^7.0.0", - "@babel/plugin-transform-object-super": "^7.0.0", - "@babel/plugin-transform-parameters": "^7.0.0", - "@babel/plugin-transform-property-literals": "^7.0.0", - "@babel/plugin-transform-react-display-name": "^7.0.0", - "@babel/plugin-transform-react-jsx": "^7.0.0", - "@babel/plugin-transform-shorthand-properties": "^7.0.0", - "@babel/plugin-transform-spread": "^7.0.0", - "@babel/plugin-transform-template-literals": "^7.0.0", - "babel-plugin-syntax-trailing-function-commas": "^7.0.0-beta.0" - } - }, - "babel-preset-jest": { - "version": "29.5.0", - "dev": true, - "requires": { - "babel-plugin-jest-hoist": "^29.5.0", - "babel-preset-current-node-syntax": "^1.0.0" - } - }, - "balanced-match": { - "version": "1.0.2", - "dev": true - }, - "base-64": { - "version": "0.1.0", - "dev": true - }, - "base-x": { - "version": "3.0.9", - "dev": true, - "requires": { - "safe-buffer": "^5.0.1" - } - }, - "base64-arraybuffer": { - "version": "0.2.0", - "dev": true - }, - "base64-js": { - "version": "1.5.1", - "dev": true - }, - "better-opn": { - "version": "3.0.2", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "open": "^8.0.4" - } - }, - "big-integer": { - "version": "1.6.51", - "dev": true, - "optional": true, - "peer": true - }, - "bignumber.js": { - "version": "9.1.1", - "dev": true - }, - "bip39": { - "version": "3.0.4", - "dev": true, - "requires": { - "@types/node": "11.11.6", - "create-hash": "^1.1.0", - "pbkdf2": "^3.0.9", - "randombytes": "^2.0.1" - }, - "dependencies": { - "@types/node": { - "version": "11.11.6", - "dev": true - } - } - }, - "bl": { - "version": "4.1.0", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "buffer": "^5.5.0", - "inherits": "^2.0.4", - "readable-stream": "^3.4.0" - }, - "dependencies": { - "buffer": { - "version": "5.7.1", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "base64-js": "^1.3.1", - "ieee754": "^1.1.13" - } - } - } - }, - "blueimp-md5": { - "version": "2.19.0", - "dev": true, - "optional": true, - "peer": true - }, - "bn.js": { - "version": "4.12.0", - "dev": true - }, - "body-parser": { - "version": "1.20.2", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "bytes": "3.1.2", - "content-type": "~1.0.5", - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "on-finished": "2.4.1", - "qs": "6.11.0", - "raw-body": "2.5.2", - "type-is": "~1.6.18", - "unpipe": "1.0.0" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "dev": true, - "optional": true, - "peer": true - } - } - }, - "borc": { - "version": "2.1.2", - "dev": true, - "requires": { - "bignumber.js": "^9.0.0", - "buffer": "^5.5.0", - "commander": "^2.15.0", - "ieee754": "^1.1.13", - "iso-url": "~0.4.7", - "json-text-sequence": "~0.1.0", - "readable-stream": "^3.6.0" - }, - "dependencies": { - "buffer": { - "version": "5.7.1", - "dev": true, - "requires": { - "base64-js": "^1.3.1", - "ieee754": "^1.1.13" - } - } - } - }, - "bplist-creator": { - "version": "0.1.0", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "stream-buffers": "2.2.x" - } - }, - "bplist-parser": { - "version": "0.3.2", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "big-integer": "1.6.x" - } - }, - "brace-expansion": { - "version": "1.1.11", - "dev": true, - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "braces": { - "version": "3.0.2", - "dev": true, - "requires": { - "fill-range": "^7.0.1" - } - }, - "brorand": { - "version": "1.1.0", - "dev": true - }, - "browserslist": { - "version": "4.21.9", - "dev": true, - "requires": { - "caniuse-lite": "^1.0.30001503", - "electron-to-chromium": "^1.4.431", - "node-releases": "^2.0.12", - "update-browserslist-db": "^1.0.11" - } - }, - "bs-logger": { - "version": "0.2.6", - "dev": true, - "requires": { - "fast-json-stable-stringify": "2.x" - } - }, - "bs58": { - "version": "4.0.1", - "dev": true, - "requires": { - "base-x": "^3.0.2" - } - }, - "bs58check": { - "version": "2.1.2", - "dev": true, - "requires": { - "bs58": "^4.0.0", - "create-hash": "^1.1.0", - "safe-buffer": "^5.1.2" - } - }, - "bser": { - "version": "2.1.1", - "dev": true, - "requires": { - "node-int64": "^0.4.0" - } - }, - "buffer": { - "version": "6.0.3", - "dev": true, - "requires": { - "base64-js": "^1.3.1", - "ieee754": "^1.2.1" - } - }, - "buffer-alloc": { - "version": "1.2.0", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "buffer-alloc-unsafe": "^1.1.0", - "buffer-fill": "^1.0.0" - } - }, - "buffer-alloc-unsafe": { - "version": "1.1.0", - "dev": true, - "optional": true, - "peer": true - }, - "buffer-fill": { - "version": "1.0.0", - "dev": true, - "optional": true, - "peer": true - }, - "buffer-from": { - "version": "1.1.2", - "dev": true - }, - "builtins": { - "version": "1.0.3", - "dev": true, - "optional": true, - "peer": true - }, - "bytes": { - "version": "3.1.2", - "dev": true, - "optional": true, - "peer": true - }, - "cacache": { - "version": "15.3.0", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "@npmcli/fs": "^1.0.0", - "@npmcli/move-file": "^1.0.1", - "chownr": "^2.0.0", - "fs-minipass": "^2.0.0", - "glob": "^7.1.4", - "infer-owner": "^1.0.4", - "lru-cache": "^6.0.0", - "minipass": "^3.1.1", - "minipass-collect": "^1.0.2", - "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.2", - "mkdirp": "^1.0.3", - "p-map": "^4.0.0", - "promise-inflight": "^1.0.1", - "rimraf": "^3.0.2", - "ssri": "^8.0.1", - "tar": "^6.0.2", - "unique-filename": "^1.1.1" - }, - "dependencies": { - "lru-cache": { - "version": "6.0.0", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "yallist": "^4.0.0" - } - }, - "mkdirp": { - "version": "1.0.4", - "dev": true, - "optional": true, - "peer": true - }, - "rimraf": { - "version": "3.0.2", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "glob": "^7.1.3" - } - }, - "yallist": { - "version": "4.0.0", - "dev": true, - "optional": true, - "peer": true - } - } - }, - "call-bind": { - "version": "1.0.2", - "dev": true, - "requires": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" - } - }, - "caller-callsite": { - "version": "2.0.0", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "callsites": "^2.0.0" - }, - "dependencies": { - "callsites": { - "version": "2.0.0", - "dev": true, - "optional": true, - "peer": true - } - } - }, - "caller-path": { - "version": "2.0.0", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "caller-callsite": "^2.0.0" - } - }, - "callsites": { - "version": "3.1.0", - "dev": true - }, - "camelcase": { - "version": "5.3.1", - "dev": true - }, - "caniuse-lite": { - "version": "1.0.30001517", - "dev": true - }, - "chalk": { - "version": "4.1.2", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "char-regex": { - "version": "1.0.2", - "dev": true - }, - "charenc": { - "version": "0.0.2", - "dev": true, - "optional": true, - "peer": true - }, - "chownr": { - "version": "2.0.0", - "dev": true, - "optional": true, - "peer": true - }, - "ci-info": { - "version": "3.8.0", - "dev": true - }, - "cipher-base": { - "version": "1.0.4", - "dev": true, - "requires": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - } - }, - "cjs-module-lexer": { - "version": "1.2.3", - "dev": true - }, - "clean-stack": { - "version": "2.2.0", - "dev": true, - "optional": true, - "peer": true - }, - "cli-cursor": { - "version": "2.1.0", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "restore-cursor": "^2.0.0" - } - }, - "cli-spinners": { - "version": "2.9.0", - "dev": true, - "optional": true, - "peer": true - }, - "cliui": { - "version": "8.0.1", - "dev": true, - "requires": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.1", - "wrap-ansi": "^7.0.0" - } - }, - "clone": { - "version": "2.1.2", - "dev": true, - "optional": true, - "peer": true - }, - "clone-deep": { - "version": "4.0.1", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "is-plain-object": "^2.0.4", - "kind-of": "^6.0.2", - "shallow-clone": "^3.0.0" - } - }, - "co": { - "version": "4.6.0", - "dev": true - }, - "collect-v8-coverage": { - "version": "1.0.2", - "dev": true - }, - "color-convert": { - "version": "2.0.1", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "dev": true - }, - "colorette": { - "version": "1.4.0", - "dev": true, - "optional": true, - "peer": true - }, - "combined-stream": { - "version": "1.0.8", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "delayed-stream": "~1.0.0" - } - }, - "command-exists": { - "version": "1.2.9", - "dev": true, - "optional": true, - "peer": true - }, - "commander": { - "version": "2.20.3", - "dev": true - }, - "commondir": { - "version": "1.0.1", - "dev": true, - "optional": true, - "peer": true - }, - "compare-versions": { - "version": "3.6.0", - "dev": true, - "optional": true - }, - "component-type": { - "version": "1.2.1", - "dev": true, - "optional": true, - "peer": true - }, - "compressible": { - "version": "2.0.18", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "mime-db": ">= 1.43.0 < 2" - } - }, - "compression": { - "version": "1.7.4", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "accepts": "~1.3.5", - "bytes": "3.0.0", - "compressible": "~2.0.16", - "debug": "2.6.9", - "on-headers": "~1.0.2", - "safe-buffer": "5.1.2", - "vary": "~1.1.2" - }, - "dependencies": { - "bytes": { - "version": "3.0.0", - "dev": true, - "optional": true, - "peer": true - }, - "debug": { - "version": "2.6.9", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "dev": true, - "optional": true, - "peer": true - }, - "safe-buffer": { - "version": "5.1.2", - "dev": true, - "optional": true, - "peer": true - } - } - }, - "concat-map": { - "version": "0.0.1", - "dev": true - }, - "connect": { - "version": "3.7.0", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "debug": "2.6.9", - "finalhandler": "1.1.2", - "parseurl": "~1.3.3", - "utils-merge": "1.0.1" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "dev": true, - "optional": true, - "peer": true - } - } - }, - "content-type": { - "version": "1.0.5", - "dev": true, - "optional": true, - "peer": true - }, - "convert-source-map": { - "version": "2.0.0", - "dev": true - }, - "core-js-compat": { - "version": "3.31.1", - "dev": true, - "requires": { - "browserslist": "^4.21.9" - } - }, - "core-util-is": { - "version": "1.0.3", - "dev": true, - "optional": true, - "peer": true - }, - "cosmiconfig": { - "version": "5.2.1", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "import-fresh": "^2.0.0", - "is-directory": "^0.3.1", - "js-yaml": "^3.13.1", - "parse-json": "^4.0.0" - }, - "dependencies": { - "parse-json": { - "version": "4.0.0", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "error-ex": "^1.3.1", - "json-parse-better-errors": "^1.0.1" - } - } - } - }, - "create-hash": { - "version": "1.2.0", - "dev": true, - "requires": { - "cipher-base": "^1.0.1", - "inherits": "^2.0.1", - "md5.js": "^1.3.4", - "ripemd160": "^2.0.1", - "sha.js": "^2.4.0" - } - }, - "create-hmac": { - "version": "1.1.7", - "dev": true, - "requires": { - "cipher-base": "^1.0.3", - "create-hash": "^1.1.0", - "inherits": "^2.0.1", - "ripemd160": "^2.0.0", - "safe-buffer": "^5.0.1", - "sha.js": "^2.4.8" - } - }, - "create-require": { - "version": "1.1.1", - "dev": true, - "optional": true, - "peer": true - }, - "cross-fetch": { - "version": "3.1.8", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "node-fetch": "^2.6.12" - } - }, - "cross-spawn": { - "version": "7.0.3", - "dev": true, - "requires": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - } - }, - "crypt": { - "version": "0.0.2", - "dev": true, - "optional": true, - "peer": true - }, - "crypto-random-string": { - "version": "2.0.0", - "dev": true, - "optional": true, - "peer": true - }, - "dag-map": { - "version": "1.0.2", - "dev": true, - "optional": true, - "peer": true - }, - "dayjs": { - "version": "1.11.9", - "dev": true, - "optional": true, - "peer": true - }, - "debug": { - "version": "4.3.4", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "decamelize": { - "version": "1.2.0", - "dev": true, - "optional": true, - "peer": true - }, - "dedent": { - "version": "0.7.0", - "dev": true - }, - "deep-extend": { - "version": "0.6.0", - "dev": true, - "optional": true, - "peer": true - }, - "deepmerge": { - "version": "4.3.1", - "dev": true - }, - "default-gateway": { - "version": "4.2.0", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "execa": "^1.0.0", - "ip-regex": "^2.1.0" - }, - "dependencies": { - "cross-spawn": { - "version": "6.0.5", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "nice-try": "^1.0.4", - "path-key": "^2.0.1", - "semver": "^5.5.0", - "shebang-command": "^1.2.0", - "which": "^1.2.9" - } - }, - "execa": { - "version": "1.0.0", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "cross-spawn": "^6.0.0", - "get-stream": "^4.0.0", - "is-stream": "^1.1.0", - "npm-run-path": "^2.0.0", - "p-finally": "^1.0.0", - "signal-exit": "^3.0.0", - "strip-eof": "^1.0.0" - } - }, - "get-stream": { - "version": "4.1.0", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "pump": "^3.0.0" - } - }, - "is-stream": { - "version": "1.1.0", - "dev": true, - "optional": true, - "peer": true - }, - "npm-run-path": { - "version": "2.0.2", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "path-key": "^2.0.0" - } - }, - "path-key": { - "version": "2.0.1", - "dev": true, - "optional": true, - "peer": true - }, - "semver": { - "version": "5.7.2", - "dev": true, - "optional": true, - "peer": true - }, - "shebang-command": { - "version": "1.2.0", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "shebang-regex": "^1.0.0" - } - }, - "shebang-regex": { - "version": "1.0.0", - "dev": true, - "optional": true, - "peer": true - }, - "which": { - "version": "1.3.1", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "isexe": "^2.0.0" - } - } - } - }, - "defaults": { - "version": "1.0.4", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "clone": "^1.0.2" - }, - "dependencies": { - "clone": { - "version": "1.0.4", - "dev": true, - "optional": true, - "peer": true - } - } - }, - "define-lazy-prop": { - "version": "2.0.0", - "dev": true, - "optional": true, - "peer": true - }, - "define-properties": { - "version": "1.2.0", - "dev": true, - "requires": { - "has-property-descriptors": "^1.0.0", - "object-keys": "^1.1.1" - } - }, - "del": { - "version": "6.1.1", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "globby": "^11.0.1", - "graceful-fs": "^4.2.4", - "is-glob": "^4.0.1", - "is-path-cwd": "^2.2.0", - "is-path-inside": "^3.0.2", - "p-map": "^4.0.0", - "rimraf": "^3.0.2", - "slash": "^3.0.0" - }, - "dependencies": { - "rimraf": { - "version": "3.0.2", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "glob": "^7.1.3" - } - } - } - }, - "delayed-stream": { - "version": "1.0.0", - "dev": true, - "optional": true, - "peer": true - }, - "delimit-stream": { - "version": "0.1.0", - "dev": true - }, - "denodeify": { - "version": "1.2.1", - "dev": true, - "optional": true, - "peer": true - }, - "depd": { - "version": "2.0.0", - "dev": true, - "optional": true, - "peer": true - }, - "deprecated-react-native-prop-types": { - "version": "4.1.0", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "@react-native/normalize-colors": "*", - "invariant": "*", - "prop-types": "*" - } - }, - "destroy": { - "version": "1.2.0", - "dev": true, - "optional": true, - "peer": true - }, - "detect-libc": { - "version": "1.0.3", - "dev": true, - "optional": true, - "peer": true - }, - "detect-newline": { - "version": "3.1.0", - "dev": true - }, - "diff": { - "version": "4.0.2", - "dev": true, - "optional": true, - "peer": true - }, - "diff-sequences": { - "version": "29.4.3", - "dev": true - }, - "dir-glob": { - "version": "3.0.1", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "path-type": "^4.0.0" - } - }, - "dotenv": { - "version": "16.3.1", - "dev": true - }, - "dotenv-expand": { - "version": "10.0.0", - "dev": true, - "optional": true, - "peer": true - }, - "ee-first": { - "version": "1.1.1", - "dev": true, - "optional": true, - "peer": true - }, - "electron-to-chromium": { - "version": "1.4.465", - "dev": true - }, - "elliptic": { - "version": "6.5.4", - "dev": true, - "requires": { - "bn.js": "^4.11.9", - "brorand": "^1.1.0", - "hash.js": "^1.0.0", - "hmac-drbg": "^1.0.1", - "inherits": "^2.0.4", - "minimalistic-assert": "^1.0.1", - "minimalistic-crypto-utils": "^1.0.1" - } - }, - "emittery": { - "version": "0.13.1", - "dev": true - }, - "emoji-regex": { - "version": "8.0.0", - "dev": true - }, - "encodeurl": { - "version": "1.0.2", - "dev": true, - "optional": true, - "peer": true - }, - "end-of-stream": { - "version": "1.4.4", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "once": "^1.4.0" - } - }, - "env-editor": { - "version": "0.4.2", - "dev": true, - "optional": true, - "peer": true - }, - "envinfo": { - "version": "7.10.0", - "dev": true, - "optional": true, - "peer": true - }, - "eol": { - "version": "0.9.1", - "dev": true, - "optional": true, - "peer": true - }, - "error-ex": { - "version": "1.3.2", - "dev": true, - "requires": { - "is-arrayish": "^0.2.1" - } - }, - "error-stack-parser": { - "version": "2.1.4", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "stackframe": "^1.3.4" - } - }, - "errorhandler": { - "version": "1.5.1", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "accepts": "~1.3.7", - "escape-html": "~1.0.3" - } - }, - "es6-object-assign": { - "version": "1.1.0", - "dev": true - }, - "escalade": { - "version": "3.1.1", - "dev": true - }, - "escape-html": { - "version": "1.0.3", - "dev": true, - "optional": true, - "peer": true - }, - "escape-string-regexp": { - "version": "2.0.0", - "dev": true - }, - "esprima": { - "version": "4.0.1", - "dev": true - }, - "esutils": { - "version": "2.0.3", - "dev": true - }, - "etag": { - "version": "1.8.1", - "dev": true, - "optional": true, - "peer": true - }, - "event-target-shim": { - "version": "5.0.1", - "dev": true, - "optional": true, - "peer": true - }, - "events": { - "version": "3.3.0", - "dev": true - }, - "exec-async": { - "version": "2.2.0", - "dev": true, - "optional": true, - "peer": true - }, - "execa": { - "version": "5.1.1", - "dev": true, - "requires": { - "cross-spawn": "^7.0.3", - "get-stream": "^6.0.0", - "human-signals": "^2.1.0", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.1", - "onetime": "^5.1.2", - "signal-exit": "^3.0.3", - "strip-final-newline": "^2.0.0" - } - }, - "exit": { - "version": "0.1.2", - "dev": true - }, - "expect": { - "version": "29.6.1", - "dev": true, - "requires": { - "@jest/expect-utils": "^29.6.1", - "@types/node": "*", - "jest-get-type": "^29.4.3", - "jest-matcher-utils": "^29.6.1", - "jest-message-util": "^29.6.1", - "jest-util": "^29.6.1" - } - }, - "expo": { - "version": "49.0.5", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "@babel/runtime": "^7.20.0", - "@expo/cli": "0.10.11", - "@expo/config": "8.1.2", - "@expo/config-plugins": "7.2.5", - "@expo/vector-icons": "^13.0.0", - "babel-preset-expo": "~9.5.1", - "expo-application": "~5.3.0", - "expo-asset": "~8.10.1", - "expo-constants": "~14.4.2", - "expo-file-system": "~15.4.2", - "expo-font": "~11.4.0", - "expo-keep-awake": "~12.3.0", - "expo-modules-autolinking": "1.5.0", - "expo-modules-core": "1.5.8", - "fbemitter": "^3.0.0", - "invariant": "^2.2.4", - "md5-file": "^3.2.3", - "node-fetch": "^2.6.7", - "pretty-format": "^26.5.2", - "uuid": "^3.4.0" - }, - "dependencies": { - "@jest/types": { - "version": "26.6.2", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^15.0.0", - "chalk": "^4.0.0" - } - }, - "@types/yargs": { - "version": "15.0.15", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "@types/yargs-parser": "*" - } - }, - "commander": { - "version": "7.2.0", - "dev": true, - "optional": true, - "peer": true - }, - "expo-modules-autolinking": { - "version": "1.5.0", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "@expo/config": "~8.1.0", - "chalk": "^4.1.0", - "commander": "^7.2.0", - "fast-glob": "^3.2.5", - "find-up": "^5.0.0", - "fs-extra": "^9.1.0" - } - }, - "find-up": { - "version": "5.0.0", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - } - }, - "fs-extra": { - "version": "9.1.0", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "at-least-node": "^1.0.0", - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - } - }, - "jsonfile": { - "version": "6.1.0", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "graceful-fs": "^4.1.6", - "universalify": "^2.0.0" - } - }, - "locate-path": { - "version": "6.0.0", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "p-locate": "^5.0.0" - } - }, - "p-locate": { - "version": "5.0.0", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "p-limit": "^3.0.2" - } - }, - "pretty-format": { - "version": "26.6.2", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "@jest/types": "^26.6.2", - "ansi-regex": "^5.0.0", - "ansi-styles": "^4.0.0", - "react-is": "^17.0.1" - } - }, - "react-is": { - "version": "17.0.2", - "dev": true, - "optional": true, - "peer": true - }, - "universalify": { - "version": "2.0.0", - "dev": true, - "optional": true, - "peer": true - } - } - }, - "expo-application": { - "version": "5.3.0", - "dev": true, - "optional": true, - "peer": true, - "requires": {} - }, - "expo-asset": { - "version": "8.10.1", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "blueimp-md5": "^2.10.0", - "expo-constants": "~14.4.2", - "expo-file-system": "~15.4.0", - "invariant": "^2.2.4", - "md5-file": "^3.2.3", - "path-browserify": "^1.0.0", - "url-parse": "^1.5.9" - } - }, - "expo-constants": { - "version": "14.4.2", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "@expo/config": "~8.1.0", - "uuid": "^3.3.2" - } - }, - "expo-file-system": { - "version": "15.4.2", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "uuid": "^3.4.0" - } - }, - "expo-font": { - "version": "11.4.0", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "fontfaceobserver": "^2.1.0" - } - }, - "expo-keep-awake": { - "version": "12.3.0", - "dev": true, - "optional": true, - "peer": true, - "requires": {} - }, - "expo-modules-autolinking": { - "version": "0.0.3", - "dev": true, - "optional": true, - "requires": { - "chalk": "^4.1.0", - "commander": "^7.2.0", - "fast-glob": "^3.2.5", - "find-up": "~5.0.0", - "fs-extra": "^9.1.0" - }, - "dependencies": { - "commander": { - "version": "7.2.0", - "dev": true, - "optional": true - }, - "find-up": { - "version": "5.0.0", - "dev": true, - "optional": true, - "requires": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - } - }, - "fs-extra": { - "version": "9.1.0", - "dev": true, - "optional": true, - "requires": { - "at-least-node": "^1.0.0", - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - } - }, - "jsonfile": { - "version": "6.1.0", - "dev": true, - "optional": true, - "requires": { - "graceful-fs": "^4.1.6", - "universalify": "^2.0.0" - } - }, - "locate-path": { - "version": "6.0.0", - "dev": true, - "optional": true, - "requires": { - "p-locate": "^5.0.0" - } - }, - "p-locate": { - "version": "5.0.0", - "dev": true, - "optional": true, - "requires": { - "p-limit": "^3.0.2" - } - }, - "universalify": { - "version": "2.0.0", - "dev": true, - "optional": true - } - } - }, - "expo-modules-core": { - "version": "1.5.8", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "compare-versions": "^3.4.0", - "invariant": "^2.2.4" - } - }, - "expo-random": { - "version": "13.2.0", - "dev": true, - "optional": true, - "requires": { - "base64-js": "^1.3.0" - } - }, - "fast-glob": { - "version": "3.3.1", - "dev": true, - "optional": true, - "requires": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.4" - } - }, - "fast-json-stable-stringify": { - "version": "2.1.0", - "dev": true - }, - "fast-xml-parser": { - "version": "4.2.6", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "strnum": "^1.0.5" - } - }, - "fastq": { - "version": "1.15.0", - "dev": true, - "optional": true, - "requires": { - "reusify": "^1.0.4" - } - }, - "fb-watchman": { - "version": "2.0.2", - "dev": true, - "requires": { - "bser": "2.1.1" - } - }, - "fbemitter": { - "version": "3.0.0", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "fbjs": "^3.0.0" - } - }, - "fbjs": { - "version": "3.0.5", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "cross-fetch": "^3.1.5", - "fbjs-css-vars": "^1.0.0", - "loose-envify": "^1.0.0", - "object-assign": "^4.1.0", - "promise": "^7.1.1", - "setimmediate": "^1.0.5", - "ua-parser-js": "^1.0.35" - } - }, - "fbjs-css-vars": { - "version": "1.0.2", - "dev": true, - "optional": true, - "peer": true - }, - "fetch-retry": { - "version": "4.1.1", - "dev": true, - "optional": true, - "peer": true - }, - "fill-range": { - "version": "7.0.1", - "dev": true, - "requires": { - "to-regex-range": "^5.0.1" - } - }, - "finalhandler": { - "version": "1.1.2", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "debug": "2.6.9", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "on-finished": "~2.3.0", - "parseurl": "~1.3.3", - "statuses": "~1.5.0", - "unpipe": "~1.0.0" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "dev": true, - "optional": true, - "peer": true - }, - "on-finished": { - "version": "2.3.0", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "ee-first": "1.1.1" - } - } - } - }, - "find-babel-config": { - "version": "2.0.0", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "json5": "^2.1.1", - "path-exists": "^4.0.0" - } - }, - "find-cache-dir": { - "version": "2.1.0", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "commondir": "^1.0.1", - "make-dir": "^2.0.0", - "pkg-dir": "^3.0.0" - }, - "dependencies": { - "find-up": { - "version": "3.0.0", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "locate-path": "^3.0.0" - } - }, - "locate-path": { - "version": "3.0.0", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" - } - }, - "make-dir": { - "version": "2.1.0", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "pify": "^4.0.1", - "semver": "^5.6.0" - } - }, - "p-limit": { - "version": "2.3.0", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "p-try": "^2.0.0" - } - }, - "p-locate": { - "version": "3.0.0", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "p-limit": "^2.0.0" - } - }, - "path-exists": { - "version": "3.0.0", - "dev": true, - "optional": true, - "peer": true - }, - "pkg-dir": { - "version": "3.0.0", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "find-up": "^3.0.0" - } - }, - "semver": { - "version": "5.7.2", - "dev": true, - "optional": true, - "peer": true - } - } - }, - "find-up": { - "version": "4.1.0", - "dev": true, - "requires": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - } - }, - "find-yarn-workspace-root": { - "version": "2.0.0", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "micromatch": "^4.0.2" - } - }, - "flow-enums-runtime": { - "version": "0.0.5", - "dev": true, - "optional": true, - "peer": true - }, - "flow-parser": { - "version": "0.206.0", - "dev": true, - "optional": true, - "peer": true - }, - "fontfaceobserver": { - "version": "2.3.0", - "dev": true, - "optional": true, - "peer": true - }, - "for-each": { - "version": "0.3.3", - "dev": true, - "requires": { - "is-callable": "^1.1.3" - } - }, - "form-data": { - "version": "3.0.1", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" - } - }, - "freeport-async": { - "version": "2.0.0", - "dev": true, - "optional": true, - "peer": true - }, - "fresh": { - "version": "0.5.2", - "dev": true, - "optional": true, - "peer": true - }, - "fs-extra": { - "version": "8.1.0", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "graceful-fs": "^4.2.0", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - } - }, - "fs-minipass": { - "version": "2.1.0", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "minipass": "^3.0.0" - } - }, - "fs.realpath": { - "version": "1.0.0", - "dev": true - }, - "function-bind": { - "version": "1.1.1", - "dev": true - }, - "gensync": { - "version": "1.0.0-beta.2", - "dev": true - }, - "get-caller-file": { - "version": "2.0.5", - "dev": true - }, - "get-intrinsic": { - "version": "1.2.1", - "dev": true, - "requires": { - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-proto": "^1.0.1", - "has-symbols": "^1.0.3" - } - }, - "get-package-type": { - "version": "0.1.0", - "dev": true - }, - "get-port": { - "version": "3.2.0", - "dev": true, - "optional": true, - "peer": true - }, - "get-stream": { - "version": "6.0.1", - "dev": true - }, - "getenv": { - "version": "1.0.0", - "dev": true, - "optional": true, - "peer": true - }, - "glob": { - "version": "7.2.3", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "glob-parent": { - "version": "5.1.2", - "dev": true, - "optional": true, - "requires": { - "is-glob": "^4.0.1" - } - }, - "globals": { - "version": "11.12.0", - "dev": true - }, - "globby": { - "version": "11.1.0", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.2.9", - "ignore": "^5.2.0", - "merge2": "^1.4.1", - "slash": "^3.0.0" - } - }, - "gopd": { - "version": "1.0.1", - "dev": true, - "requires": { - "get-intrinsic": "^1.1.3" - } - }, - "graceful-fs": { - "version": "4.2.11", - "dev": true - }, - "graphql": { - "version": "15.8.0", - "dev": true, - "optional": true, - "peer": true - }, - "graphql-tag": { - "version": "2.12.6", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "tslib": "^2.1.0" - } - }, - "has": { - "version": "1.0.3", - "dev": true, - "requires": { - "function-bind": "^1.1.1" - } - }, - "has-flag": { - "version": "4.0.0", - "dev": true - }, - "has-property-descriptors": { - "version": "1.0.0", - "dev": true, - "requires": { - "get-intrinsic": "^1.1.1" - } - }, - "has-proto": { - "version": "1.0.1", - "dev": true - }, - "has-symbols": { - "version": "1.0.3", - "dev": true - }, - "has-tostringtag": { - "version": "1.0.0", - "dev": true, - "requires": { - "has-symbols": "^1.0.2" - } - }, - "hash-base": { - "version": "3.1.0", - "dev": true, - "requires": { - "inherits": "^2.0.4", - "readable-stream": "^3.6.0", - "safe-buffer": "^5.2.0" - } - }, - "hash.js": { - "version": "1.1.7", - "dev": true, - "requires": { - "inherits": "^2.0.3", - "minimalistic-assert": "^1.0.1" - } - }, - "hdkey": { - "version": "2.1.0", - "dev": true, - "requires": { - "bs58check": "^2.1.2", - "ripemd160": "^2.0.2", - "safe-buffer": "^5.1.1", - "secp256k1": "^4.0.0" - } - }, - "hermes-estree": { - "version": "0.12.0", - "dev": true, - "optional": true, - "peer": true - }, - "hermes-parser": { - "version": "0.12.0", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "hermes-estree": "0.12.0" - } - }, - "hermes-profile-transformer": { - "version": "0.0.6", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "source-map": "^0.7.3" - }, - "dependencies": { - "source-map": { - "version": "0.7.4", - "dev": true, - "optional": true, - "peer": true - } - } - }, - "hmac-drbg": { - "version": "1.0.1", - "dev": true, - "requires": { - "hash.js": "^1.0.3", - "minimalistic-assert": "^1.0.0", - "minimalistic-crypto-utils": "^1.0.1" - } - }, - "hosted-git-info": { - "version": "3.0.8", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "lru-cache": "^6.0.0" - }, - "dependencies": { - "lru-cache": { - "version": "6.0.0", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "yallist": "^4.0.0" - } - }, - "yallist": { - "version": "4.0.0", - "dev": true, - "optional": true, - "peer": true - } - } - }, - "html-escaper": { - "version": "2.0.2", - "dev": true - }, - "http-errors": { - "version": "2.0.0", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "depd": "2.0.0", - "inherits": "2.0.4", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "toidentifier": "1.0.1" - }, - "dependencies": { - "statuses": { - "version": "2.0.1", - "dev": true, - "optional": true, - "peer": true - } - } - }, - "https-proxy-agent": { - "version": "5.0.1", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "agent-base": "6", - "debug": "4" - } - }, - "human-signals": { - "version": "2.1.0", - "dev": true - }, - "iconv-lite": { - "version": "0.4.24", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "safer-buffer": ">= 2.1.2 < 3" - } - }, - "ieee754": { - "version": "1.2.1", - "dev": true - }, - "ignore": { - "version": "5.2.4", - "dev": true, - "optional": true, - "peer": true - }, - "image-size": { - "version": "1.0.2", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "queue": "6.0.2" - } - }, - "import-fresh": { - "version": "2.0.0", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "caller-path": "^2.0.0", - "resolve-from": "^3.0.0" - }, - "dependencies": { - "resolve-from": { - "version": "3.0.0", - "dev": true, - "optional": true, - "peer": true - } - } - }, - "import-local": { - "version": "3.1.0", - "dev": true, - "requires": { - "pkg-dir": "^4.2.0", - "resolve-cwd": "^3.0.0" - } - }, - "imurmurhash": { - "version": "0.1.4", - "dev": true - }, - "indent-string": { - "version": "4.0.0", - "dev": true, - "optional": true, - "peer": true - }, - "infer-owner": { - "version": "1.0.4", - "dev": true, - "optional": true, - "peer": true - }, - "inflight": { - "version": "1.0.6", - "dev": true, - "requires": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "inherits": { - "version": "2.0.4", - "dev": true - }, - "ini": { - "version": "1.3.8", - "dev": true, - "optional": true, - "peer": true - }, - "internal-ip": { - "version": "4.3.0", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "default-gateway": "^4.2.0", - "ipaddr.js": "^1.9.0" - } - }, - "invariant": { - "version": "2.2.4", - "dev": true, - "optional": true, - "requires": { - "loose-envify": "^1.0.0" - } - }, - "ip": { - "version": "1.1.8", - "dev": true, - "optional": true, - "peer": true - }, - "ip-regex": { - "version": "2.1.0", - "dev": true, - "optional": true, - "peer": true - }, - "ipaddr.js": { - "version": "1.9.1", - "dev": true, - "optional": true, - "peer": true - }, - "is-arguments": { - "version": "1.1.1", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - } - }, - "is-arrayish": { - "version": "0.2.1", - "dev": true - }, - "is-buffer": { - "version": "1.1.6", - "dev": true, - "optional": true, - "peer": true - }, - "is-callable": { - "version": "1.2.7", - "dev": true - }, - "is-core-module": { - "version": "2.12.1", - "dev": true, - "requires": { - "has": "^1.0.3" - } - }, - "is-directory": { - "version": "0.3.1", - "dev": true, - "optional": true, - "peer": true - }, - "is-docker": { - "version": "2.2.1", - "dev": true, - "optional": true, - "peer": true - }, - "is-extglob": { - "version": "2.1.1", - "dev": true, - "optional": true - }, - "is-fullwidth-code-point": { - "version": "3.0.0", - "dev": true - }, - "is-generator-fn": { - "version": "2.1.0", - "dev": true - }, - "is-generator-function": { - "version": "1.0.10", - "dev": true, - "requires": { - "has-tostringtag": "^1.0.0" - } - }, - "is-glob": { - "version": "4.0.3", - "dev": true, - "optional": true, - "requires": { - "is-extglob": "^2.1.1" - } - }, - "is-interactive": { - "version": "1.0.0", - "dev": true, - "optional": true, - "peer": true - }, - "is-invalid-path": { - "version": "0.1.0", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "is-glob": "^2.0.0" - }, - "dependencies": { - "is-extglob": { - "version": "1.0.0", - "dev": true, - "optional": true, - "peer": true - }, - "is-glob": { - "version": "2.0.1", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "is-extglob": "^1.0.0" - } - } - } - }, - "is-nan": { - "version": "1.3.2", - "dev": true, - "requires": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3" - } - }, - "is-number": { - "version": "7.0.0", - "dev": true - }, - "is-path-cwd": { - "version": "2.2.0", - "dev": true, - "optional": true, - "peer": true - }, - "is-path-inside": { - "version": "3.0.3", - "dev": true, - "optional": true, - "peer": true - }, - "is-plain-object": { - "version": "2.0.4", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "isobject": "^3.0.1" - } - }, - "is-root": { - "version": "2.1.0", - "dev": true, - "optional": true, - "peer": true - }, - "is-stream": { - "version": "2.0.1", - "dev": true - }, - "is-typed-array": { - "version": "1.1.10", - "dev": true, - "requires": { - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.2", - "for-each": "^0.3.3", - "gopd": "^1.0.1", - "has-tostringtag": "^1.0.0" - } - }, - "is-unicode-supported": { - "version": "0.1.0", - "dev": true, - "optional": true, - "peer": true - }, - "is-valid-path": { - "version": "0.1.1", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "is-invalid-path": "^0.1.0" - } - }, - "is-wsl": { - "version": "2.2.0", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "is-docker": "^2.0.0" - } - }, - "isarray": { - "version": "1.0.0", - "dev": true, - "optional": true, - "peer": true - }, - "isexe": { - "version": "2.0.0", - "dev": true - }, - "iso-url": { - "version": "0.4.7", - "dev": true - }, - "isobject": { - "version": "3.0.1", - "dev": true, - "optional": true, - "peer": true - }, - "isomorphic-fetch": { - "version": "3.0.0", - "dev": true, - "requires": { - "node-fetch": "^2.6.1", - "whatwg-fetch": "^3.4.1" - } - }, - "isomorphic-webcrypto": { - "version": "2.3.8", - "dev": true, - "requires": { - "@peculiar/webcrypto": "^1.0.22", - "@unimodules/core": "*", - "@unimodules/react-native-adapter": "*", - "asmcrypto.js": "^0.22.0", - "b64-lite": "^1.3.1", - "b64u-lite": "^1.0.1", - "expo-random": "*", - "msrcrypto": "^1.5.6", - "react-native-securerandom": "^0.1.1", - "str2buf": "^1.3.0", - "webcrypto-shim": "^0.1.4" - } - }, - "istanbul-lib-coverage": { - "version": "3.2.0", - "dev": true - }, - "istanbul-lib-instrument": { - "version": "5.2.1", - "dev": true, - "requires": { - "@babel/core": "^7.12.3", - "@babel/parser": "^7.14.7", - "@istanbuljs/schema": "^0.1.2", - "istanbul-lib-coverage": "^3.2.0", - "semver": "^6.3.0" - } - }, - "istanbul-lib-report": { - "version": "3.0.0", - "dev": true, - "requires": { - "istanbul-lib-coverage": "^3.0.0", - "make-dir": "^3.0.0", - "supports-color": "^7.1.0" - } - }, - "istanbul-lib-source-maps": { - "version": "4.0.1", - "dev": true, - "requires": { - "debug": "^4.1.1", - "istanbul-lib-coverage": "^3.0.0", - "source-map": "^0.6.1" - } - }, - "istanbul-reports": { - "version": "3.1.5", - "dev": true, - "requires": { - "html-escaper": "^2.0.0", - "istanbul-lib-report": "^3.0.0" - } - }, - "jest": { - "version": "29.6.1", - "dev": true, - "requires": { - "@jest/core": "^29.6.1", - "@jest/types": "^29.6.1", - "import-local": "^3.0.2", - "jest-cli": "^29.6.1" - } - }, - "jest-changed-files": { - "version": "29.5.0", - "dev": true, - "requires": { - "execa": "^5.0.0", - "p-limit": "^3.1.0" - } - }, - "jest-circus": { - "version": "29.6.1", - "dev": true, - "requires": { - "@jest/environment": "^29.6.1", - "@jest/expect": "^29.6.1", - "@jest/test-result": "^29.6.1", - "@jest/types": "^29.6.1", - "@types/node": "*", - "chalk": "^4.0.0", - "co": "^4.6.0", - "dedent": "^0.7.0", - "is-generator-fn": "^2.0.0", - "jest-each": "^29.6.1", - "jest-matcher-utils": "^29.6.1", - "jest-message-util": "^29.6.1", - "jest-runtime": "^29.6.1", - "jest-snapshot": "^29.6.1", - "jest-util": "^29.6.1", - "p-limit": "^3.1.0", - "pretty-format": "^29.6.1", - "pure-rand": "^6.0.0", - "slash": "^3.0.0", - "stack-utils": "^2.0.3" - } - }, - "jest-cli": { - "version": "29.6.1", - "dev": true, - "requires": { - "@jest/core": "^29.6.1", - "@jest/test-result": "^29.6.1", - "@jest/types": "^29.6.1", - "chalk": "^4.0.0", - "exit": "^0.1.2", - "graceful-fs": "^4.2.9", - "import-local": "^3.0.2", - "jest-config": "^29.6.1", - "jest-util": "^29.6.1", - "jest-validate": "^29.6.1", - "prompts": "^2.0.1", - "yargs": "^17.3.1" - } - }, - "jest-config": { - "version": "29.6.1", - "dev": true, - "requires": { - "@babel/core": "^7.11.6", - "@jest/test-sequencer": "^29.6.1", - "@jest/types": "^29.6.1", - "babel-jest": "^29.6.1", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "deepmerge": "^4.2.2", - "glob": "^7.1.3", - "graceful-fs": "^4.2.9", - "jest-circus": "^29.6.1", - "jest-environment-node": "^29.6.1", - "jest-get-type": "^29.4.3", - "jest-regex-util": "^29.4.3", - "jest-resolve": "^29.6.1", - "jest-runner": "^29.6.1", - "jest-util": "^29.6.1", - "jest-validate": "^29.6.1", - "micromatch": "^4.0.4", - "parse-json": "^5.2.0", - "pretty-format": "^29.6.1", - "slash": "^3.0.0", - "strip-json-comments": "^3.1.1" - } - }, - "jest-diff": { - "version": "29.6.1", - "dev": true, - "requires": { - "chalk": "^4.0.0", - "diff-sequences": "^29.4.3", - "jest-get-type": "^29.4.3", - "pretty-format": "^29.6.1" - } - }, - "jest-docblock": { - "version": "29.4.3", - "dev": true, - "requires": { - "detect-newline": "^3.0.0" - } - }, - "jest-each": { - "version": "29.6.1", - "dev": true, - "requires": { - "@jest/types": "^29.6.1", - "chalk": "^4.0.0", - "jest-get-type": "^29.4.3", - "jest-util": "^29.6.1", - "pretty-format": "^29.6.1" - } - }, - "jest-environment-node": { - "version": "29.6.1", - "dev": true, - "requires": { - "@jest/environment": "^29.6.1", - "@jest/fake-timers": "^29.6.1", - "@jest/types": "^29.6.1", - "@types/node": "*", - "jest-mock": "^29.6.1", - "jest-util": "^29.6.1" - } - }, - "jest-get-type": { - "version": "29.4.3", - "dev": true - }, - "jest-haste-map": { - "version": "29.6.1", - "dev": true, - "requires": { - "@jest/types": "^29.6.1", - "@types/graceful-fs": "^4.1.3", - "@types/node": "*", - "anymatch": "^3.0.3", - "fb-watchman": "^2.0.0", - "fsevents": "^2.3.2", - "graceful-fs": "^4.2.9", - "jest-regex-util": "^29.4.3", - "jest-util": "^29.6.1", - "jest-worker": "^29.6.1", - "micromatch": "^4.0.4", - "walker": "^1.0.8" - } - }, - "jest-leak-detector": { - "version": "29.6.1", - "dev": true, - "requires": { - "jest-get-type": "^29.4.3", - "pretty-format": "^29.6.1" - } - }, - "jest-matcher-utils": { - "version": "29.6.1", - "dev": true, - "requires": { - "chalk": "^4.0.0", - "jest-diff": "^29.6.1", - "jest-get-type": "^29.4.3", - "pretty-format": "^29.6.1" - } - }, - "jest-message-util": { - "version": "29.6.1", - "dev": true, - "requires": { - "@babel/code-frame": "^7.12.13", - "@jest/types": "^29.6.1", - "@types/stack-utils": "^2.0.0", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "micromatch": "^4.0.4", - "pretty-format": "^29.6.1", - "slash": "^3.0.0", - "stack-utils": "^2.0.3" - } - }, - "jest-mock": { - "version": "29.6.1", - "dev": true, - "requires": { - "@jest/types": "^29.6.1", - "@types/node": "*", - "jest-util": "^29.6.1" - } - }, - "jest-pnp-resolver": { - "version": "1.2.3", - "dev": true, - "requires": {} - }, - "jest-regex-util": { - "version": "29.4.3", - "dev": true - }, - "jest-resolve": { - "version": "29.6.1", - "dev": true, - "requires": { - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^29.6.1", - "jest-pnp-resolver": "^1.2.2", - "jest-util": "^29.6.1", - "jest-validate": "^29.6.1", - "resolve": "^1.20.0", - "resolve.exports": "^2.0.0", - "slash": "^3.0.0" - } - }, - "jest-resolve-dependencies": { - "version": "29.6.1", - "dev": true, - "requires": { - "jest-regex-util": "^29.4.3", - "jest-snapshot": "^29.6.1" - } - }, - "jest-runner": { - "version": "29.6.1", - "dev": true, - "requires": { - "@jest/console": "^29.6.1", - "@jest/environment": "^29.6.1", - "@jest/test-result": "^29.6.1", - "@jest/transform": "^29.6.1", - "@jest/types": "^29.6.1", - "@types/node": "*", - "chalk": "^4.0.0", - "emittery": "^0.13.1", - "graceful-fs": "^4.2.9", - "jest-docblock": "^29.4.3", - "jest-environment-node": "^29.6.1", - "jest-haste-map": "^29.6.1", - "jest-leak-detector": "^29.6.1", - "jest-message-util": "^29.6.1", - "jest-resolve": "^29.6.1", - "jest-runtime": "^29.6.1", - "jest-util": "^29.6.1", - "jest-watcher": "^29.6.1", - "jest-worker": "^29.6.1", - "p-limit": "^3.1.0", - "source-map-support": "0.5.13" - } - }, - "jest-runtime": { - "version": "29.6.1", - "dev": true, - "requires": { - "@jest/environment": "^29.6.1", - "@jest/fake-timers": "^29.6.1", - "@jest/globals": "^29.6.1", - "@jest/source-map": "^29.6.0", - "@jest/test-result": "^29.6.1", - "@jest/transform": "^29.6.1", - "@jest/types": "^29.6.1", - "@types/node": "*", - "chalk": "^4.0.0", - "cjs-module-lexer": "^1.0.0", - "collect-v8-coverage": "^1.0.0", - "glob": "^7.1.3", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^29.6.1", - "jest-message-util": "^29.6.1", - "jest-mock": "^29.6.1", - "jest-regex-util": "^29.4.3", - "jest-resolve": "^29.6.1", - "jest-snapshot": "^29.6.1", - "jest-util": "^29.6.1", - "slash": "^3.0.0", - "strip-bom": "^4.0.0" - } - }, - "jest-snapshot": { - "version": "29.6.1", - "dev": true, - "requires": { - "@babel/core": "^7.11.6", - "@babel/generator": "^7.7.2", - "@babel/plugin-syntax-jsx": "^7.7.2", - "@babel/plugin-syntax-typescript": "^7.7.2", - "@babel/types": "^7.3.3", - "@jest/expect-utils": "^29.6.1", - "@jest/transform": "^29.6.1", - "@jest/types": "^29.6.1", - "@types/prettier": "^2.1.5", - "babel-preset-current-node-syntax": "^1.0.0", - "chalk": "^4.0.0", - "expect": "^29.6.1", - "graceful-fs": "^4.2.9", - "jest-diff": "^29.6.1", - "jest-get-type": "^29.4.3", - "jest-matcher-utils": "^29.6.1", - "jest-message-util": "^29.6.1", - "jest-util": "^29.6.1", - "natural-compare": "^1.4.0", - "pretty-format": "^29.6.1", - "semver": "^7.5.3" - }, - "dependencies": { - "lru-cache": { - "version": "6.0.0", - "dev": true, - "requires": { - "yallist": "^4.0.0" - } - }, - "semver": { - "version": "7.5.4", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - } - }, - "yallist": { - "version": "4.0.0", - "dev": true - } - } - }, - "jest-util": { - "version": "29.6.1", - "dev": true, - "requires": { - "@jest/types": "^29.6.1", - "@types/node": "*", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "graceful-fs": "^4.2.9", - "picomatch": "^2.2.3" - } - }, - "jest-validate": { - "version": "29.6.1", - "dev": true, - "requires": { - "@jest/types": "^29.6.1", - "camelcase": "^6.2.0", - "chalk": "^4.0.0", - "jest-get-type": "^29.4.3", - "leven": "^3.1.0", - "pretty-format": "^29.6.1" - }, - "dependencies": { - "camelcase": { - "version": "6.3.0", - "dev": true - } - } - }, - "jest-watcher": { - "version": "29.6.1", - "dev": true, - "requires": { - "@jest/test-result": "^29.6.1", - "@jest/types": "^29.6.1", - "@types/node": "*", - "ansi-escapes": "^4.2.1", - "chalk": "^4.0.0", - "emittery": "^0.13.1", - "jest-util": "^29.6.1", - "string-length": "^4.0.1" - } - }, - "jest-worker": { - "version": "29.6.1", - "dev": true, - "requires": { - "@types/node": "*", - "jest-util": "^29.6.1", - "merge-stream": "^2.0.0", - "supports-color": "^8.0.0" - }, - "dependencies": { - "supports-color": { - "version": "8.1.1", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "jimp-compact": { - "version": "0.16.1", - "dev": true, - "optional": true, - "peer": true - }, - "joi": { - "version": "17.9.2", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "@hapi/hoek": "^9.0.0", - "@hapi/topo": "^5.0.0", - "@sideway/address": "^4.1.3", - "@sideway/formula": "^3.0.1", - "@sideway/pinpoint": "^2.0.0" - } - }, - "join-component": { - "version": "1.1.0", - "dev": true, - "optional": true, - "peer": true - }, - "js-tokens": { - "version": "4.0.0", - "dev": true - }, - "js-yaml": { - "version": "3.14.1", - "dev": true, - "requires": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - } - }, - "jsc-android": { - "version": "250231.0.0", - "dev": true, - "optional": true, - "peer": true - }, - "jsc-safe-url": { - "version": "0.2.4", - "dev": true, - "optional": true, - "peer": true - }, - "jscodeshift": { - "version": "0.14.0", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "@babel/core": "^7.13.16", - "@babel/parser": "^7.13.16", - "@babel/plugin-proposal-class-properties": "^7.13.0", - "@babel/plugin-proposal-nullish-coalescing-operator": "^7.13.8", - "@babel/plugin-proposal-optional-chaining": "^7.13.12", - "@babel/plugin-transform-modules-commonjs": "^7.13.8", - "@babel/preset-flow": "^7.13.13", - "@babel/preset-typescript": "^7.13.0", - "@babel/register": "^7.13.16", - "babel-core": "^7.0.0-bridge.0", - "chalk": "^4.1.2", - "flow-parser": "0.*", - "graceful-fs": "^4.2.4", - "micromatch": "^4.0.4", - "neo-async": "^2.5.0", - "node-dir": "^0.1.17", - "recast": "^0.21.0", - "temp": "^0.8.4", - "write-file-atomic": "^2.3.0" - }, - "dependencies": { - "write-file-atomic": { - "version": "2.4.3", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "graceful-fs": "^4.1.11", - "imurmurhash": "^0.1.4", - "signal-exit": "^3.0.2" - } - } - } - }, - "jsesc": { - "version": "2.5.2", - "dev": true - }, - "json-parse-better-errors": { - "version": "1.0.2", - "dev": true, - "optional": true, - "peer": true - }, - "json-parse-even-better-errors": { - "version": "2.3.1", - "dev": true - }, - "json-schema-deref-sync": { - "version": "0.13.0", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "clone": "^2.1.2", - "dag-map": "~1.0.0", - "is-valid-path": "^0.1.1", - "lodash": "^4.17.13", - "md5": "~2.2.0", - "memory-cache": "~0.2.0", - "traverse": "~0.6.6", - "valid-url": "~1.0.9" - }, - "dependencies": { - "md5": { - "version": "2.2.1", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "charenc": "~0.0.1", - "crypt": "~0.0.1", - "is-buffer": "~1.1.1" - } - } - } - }, - "json-text-sequence": { - "version": "0.1.1", - "dev": true, - "requires": { - "delimit-stream": "0.1.0" - } - }, - "json5": { - "version": "2.2.3", - "dev": true - }, - "jsonfile": { - "version": "4.0.0", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "graceful-fs": "^4.1.6" - } - }, - "kind-of": { - "version": "6.0.3", - "dev": true, - "optional": true, - "peer": true - }, - "kleur": { - "version": "3.0.3", - "dev": true - }, - "leven": { - "version": "3.1.0", - "dev": true - }, - "lightningcss": { - "version": "1.19.0", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "detect-libc": "^1.0.3", - "lightningcss-darwin-arm64": "1.19.0", - "lightningcss-darwin-x64": "1.19.0", - "lightningcss-linux-arm-gnueabihf": "1.19.0", - "lightningcss-linux-arm64-gnu": "1.19.0", - "lightningcss-linux-arm64-musl": "1.19.0", - "lightningcss-linux-x64-gnu": "1.19.0", - "lightningcss-linux-x64-musl": "1.19.0", - "lightningcss-win32-x64-msvc": "1.19.0" - } - }, - "lightningcss-linux-x64-gnu": { - "version": "1.19.0", - "dev": true, - "optional": true, - "peer": true - }, - "lightningcss-linux-x64-musl": { - "version": "1.19.0", - "dev": true, - "optional": true, - "peer": true - }, - "lines-and-columns": { - "version": "1.2.4", - "dev": true - }, - "locate-path": { - "version": "5.0.0", - "dev": true, - "requires": { - "p-locate": "^4.1.0" - } - }, - "lodash": { - "version": "4.17.21", - "dev": true, - "optional": true, - "peer": true - }, - "lodash.debounce": { - "version": "4.0.8", - "dev": true - }, - "lodash.memoize": { - "version": "4.1.2", - "dev": true - }, - "lodash.throttle": { - "version": "4.1.1", - "dev": true, - "optional": true, - "peer": true - }, - "log-symbols": { - "version": "2.2.0", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "chalk": "^2.0.1" - }, - "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "chalk": { - "version": "2.4.2", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "color-convert": { - "version": "1.9.3", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "dev": true, - "optional": true, - "peer": true - }, - "escape-string-regexp": { - "version": "1.0.5", - "dev": true, - "optional": true, - "peer": true - }, - "has-flag": { - "version": "3.0.0", - "dev": true, - "optional": true, - "peer": true - }, - "supports-color": { - "version": "5.5.0", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "logkitty": { - "version": "0.7.1", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "ansi-fragments": "^0.2.1", - "dayjs": "^1.8.15", - "yargs": "^15.1.0" - }, - "dependencies": { - "cliui": { - "version": "6.0.0", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^6.2.0" - } - }, - "wrap-ansi": { - "version": "6.2.0", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - } - }, - "y18n": { - "version": "4.0.3", - "dev": true, - "optional": true, - "peer": true - }, - "yargs": { - "version": "15.4.1", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "cliui": "^6.0.0", - "decamelize": "^1.2.0", - "find-up": "^4.1.0", - "get-caller-file": "^2.0.1", - "require-directory": "^2.1.1", - "require-main-filename": "^2.0.0", - "set-blocking": "^2.0.0", - "string-width": "^4.2.0", - "which-module": "^2.0.0", - "y18n": "^4.0.0", - "yargs-parser": "^18.1.2" - } - }, - "yargs-parser": { - "version": "18.1.3", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" - } - } - } - }, - "loose-envify": { - "version": "1.4.0", - "dev": true, - "optional": true, - "requires": { - "js-tokens": "^3.0.0 || ^4.0.0" - } - }, - "lru-cache": { - "version": "5.1.1", - "dev": true, - "requires": { - "yallist": "^3.0.2" - } - }, - "make-dir": { - "version": "3.1.0", - "dev": true, - "requires": { - "semver": "^6.0.0" - } - }, - "make-error": { - "version": "1.3.6", - "dev": true - }, - "makeerror": { - "version": "1.0.12", - "dev": true, - "requires": { - "tmpl": "1.0.5" - } - }, - "md5": { - "version": "2.3.0", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "charenc": "0.0.2", - "crypt": "0.0.2", - "is-buffer": "~1.1.6" - } - }, - "md5-file": { - "version": "3.2.3", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "buffer-alloc": "^1.1.0" - } - }, - "md5.js": { - "version": "1.3.5", - "dev": true, - "requires": { - "hash-base": "^3.0.0", - "inherits": "^2.0.1", - "safe-buffer": "^5.1.2" - } - }, - "md5hex": { - "version": "1.0.0", - "dev": true, - "optional": true, - "peer": true - }, - "media-typer": { - "version": "0.3.0", - "dev": true, - "optional": true, - "peer": true - }, - "memoize-one": { - "version": "5.2.1", - "dev": true, - "optional": true, - "peer": true - }, - "memory-cache": { - "version": "0.2.0", - "dev": true, - "optional": true, - "peer": true - }, - "merge-stream": { - "version": "2.0.0", - "dev": true - }, - "merge2": { - "version": "1.4.1", - "dev": true, - "optional": true - }, - "metro": { - "version": "0.76.7", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "@babel/code-frame": "^7.0.0", - "@babel/core": "^7.20.0", - "@babel/generator": "^7.20.0", - "@babel/parser": "^7.20.0", - "@babel/template": "^7.0.0", - "@babel/traverse": "^7.20.0", - "@babel/types": "^7.20.0", - "accepts": "^1.3.7", - "async": "^3.2.2", - "chalk": "^4.0.0", - "ci-info": "^2.0.0", - "connect": "^3.6.5", - "debug": "^2.2.0", - "denodeify": "^1.2.1", - "error-stack-parser": "^2.0.6", - "graceful-fs": "^4.2.4", - "hermes-parser": "0.12.0", - "image-size": "^1.0.2", - "invariant": "^2.2.4", - "jest-worker": "^27.2.0", - "jsc-safe-url": "^0.2.2", - "lodash.throttle": "^4.1.1", - "metro-babel-transformer": "0.76.7", - "metro-cache": "0.76.7", - "metro-cache-key": "0.76.7", - "metro-config": "0.76.7", - "metro-core": "0.76.7", - "metro-file-map": "0.76.7", - "metro-inspector-proxy": "0.76.7", - "metro-minify-terser": "0.76.7", - "metro-minify-uglify": "0.76.7", - "metro-react-native-babel-preset": "0.76.7", - "metro-resolver": "0.76.7", - "metro-runtime": "0.76.7", - "metro-source-map": "0.76.7", - "metro-symbolicate": "0.76.7", - "metro-transform-plugins": "0.76.7", - "metro-transform-worker": "0.76.7", - "mime-types": "^2.1.27", - "node-fetch": "^2.2.0", - "nullthrows": "^1.1.1", - "rimraf": "^3.0.2", - "serialize-error": "^2.1.0", - "source-map": "^0.5.6", - "strip-ansi": "^6.0.0", - "throat": "^5.0.0", - "ws": "^7.5.1", - "yargs": "^17.6.2" - }, - "dependencies": { - "ci-info": { - "version": "2.0.0", - "dev": true, - "optional": true, - "peer": true - }, - "debug": { - "version": "2.6.9", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "ms": "2.0.0" - } - }, - "jest-worker": { - "version": "27.5.1", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "@types/node": "*", - "merge-stream": "^2.0.0", - "supports-color": "^8.0.0" - } - }, - "ms": { - "version": "2.0.0", - "dev": true, - "optional": true, - "peer": true - }, - "rimraf": { - "version": "3.0.2", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "glob": "^7.1.3" - } - }, - "serialize-error": { - "version": "2.1.0", - "dev": true, - "optional": true, - "peer": true - }, - "source-map": { - "version": "0.5.7", - "dev": true, - "optional": true, - "peer": true - }, - "supports-color": { - "version": "8.1.1", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "has-flag": "^4.0.0" - } - }, - "ws": { - "version": "7.5.9", - "dev": true, - "optional": true, - "peer": true, - "requires": {} - } - } - }, - "metro-babel-transformer": { - "version": "0.76.7", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "@babel/core": "^7.20.0", - "hermes-parser": "0.12.0", - "nullthrows": "^1.1.1" - } - }, - "metro-cache": { - "version": "0.76.7", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "metro-core": "0.76.7", - "rimraf": "^3.0.2" - }, - "dependencies": { - "rimraf": { - "version": "3.0.2", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "glob": "^7.1.3" - } - } - } - }, - "metro-cache-key": { - "version": "0.76.7", - "dev": true, - "optional": true, - "peer": true - }, - "metro-config": { - "version": "0.76.7", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "connect": "^3.6.5", - "cosmiconfig": "^5.0.5", - "jest-validate": "^29.2.1", - "metro": "0.76.7", - "metro-cache": "0.76.7", - "metro-core": "0.76.7", - "metro-runtime": "0.76.7" - } - }, - "metro-core": { - "version": "0.76.7", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "lodash.throttle": "^4.1.1", - "metro-resolver": "0.76.7" - } - }, - "metro-file-map": { - "version": "0.76.7", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "anymatch": "^3.0.3", - "debug": "^2.2.0", - "fb-watchman": "^2.0.0", - "fsevents": "^2.3.2", - "graceful-fs": "^4.2.4", - "invariant": "^2.2.4", - "jest-regex-util": "^27.0.6", - "jest-util": "^27.2.0", - "jest-worker": "^27.2.0", - "micromatch": "^4.0.4", - "node-abort-controller": "^3.1.1", - "nullthrows": "^1.1.1", - "walker": "^1.0.7" - }, - "dependencies": { - "@jest/types": { - "version": "27.5.1", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^16.0.0", - "chalk": "^4.0.0" - } - }, - "@types/yargs": { - "version": "16.0.5", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "@types/yargs-parser": "*" - } - }, - "debug": { - "version": "2.6.9", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "ms": "2.0.0" - } - }, - "jest-regex-util": { - "version": "27.5.1", - "dev": true, - "optional": true, - "peer": true - }, - "jest-util": { - "version": "27.5.1", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "@jest/types": "^27.5.1", - "@types/node": "*", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "graceful-fs": "^4.2.9", - "picomatch": "^2.2.3" - } - }, - "jest-worker": { - "version": "27.5.1", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "@types/node": "*", - "merge-stream": "^2.0.0", - "supports-color": "^8.0.0" - } - }, - "ms": { - "version": "2.0.0", - "dev": true, - "optional": true, - "peer": true - }, - "supports-color": { - "version": "8.1.1", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "metro-inspector-proxy": { - "version": "0.76.7", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "connect": "^3.6.5", - "debug": "^2.2.0", - "node-fetch": "^2.2.0", - "ws": "^7.5.1", - "yargs": "^17.6.2" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "dev": true, - "optional": true, - "peer": true - }, - "ws": { - "version": "7.5.9", - "dev": true, - "optional": true, - "peer": true, - "requires": {} - } - } - }, - "metro-minify-terser": { - "version": "0.76.7", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "terser": "^5.15.0" - } - }, - "metro-minify-uglify": { - "version": "0.76.7", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "uglify-es": "^3.1.9" - } - }, - "metro-react-native-babel-preset": { - "version": "0.76.7", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "@babel/core": "^7.20.0", - "@babel/plugin-proposal-async-generator-functions": "^7.0.0", - "@babel/plugin-proposal-class-properties": "^7.18.0", - "@babel/plugin-proposal-export-default-from": "^7.0.0", - "@babel/plugin-proposal-nullish-coalescing-operator": "^7.18.0", - "@babel/plugin-proposal-numeric-separator": "^7.0.0", - "@babel/plugin-proposal-object-rest-spread": "^7.20.0", - "@babel/plugin-proposal-optional-catch-binding": "^7.0.0", - "@babel/plugin-proposal-optional-chaining": "^7.20.0", - "@babel/plugin-syntax-dynamic-import": "^7.8.0", - "@babel/plugin-syntax-export-default-from": "^7.0.0", - "@babel/plugin-syntax-flow": "^7.18.0", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.0.0", - "@babel/plugin-syntax-optional-chaining": "^7.0.0", - "@babel/plugin-transform-arrow-functions": "^7.0.0", - "@babel/plugin-transform-async-to-generator": "^7.20.0", - "@babel/plugin-transform-block-scoping": "^7.0.0", - "@babel/plugin-transform-classes": "^7.0.0", - "@babel/plugin-transform-computed-properties": "^7.0.0", - "@babel/plugin-transform-destructuring": "^7.20.0", - "@babel/plugin-transform-flow-strip-types": "^7.20.0", - "@babel/plugin-transform-function-name": "^7.0.0", - "@babel/plugin-transform-literals": "^7.0.0", - "@babel/plugin-transform-modules-commonjs": "^7.0.0", - "@babel/plugin-transform-named-capturing-groups-regex": "^7.0.0", - "@babel/plugin-transform-parameters": "^7.0.0", - "@babel/plugin-transform-react-display-name": "^7.0.0", - "@babel/plugin-transform-react-jsx": "^7.0.0", - "@babel/plugin-transform-react-jsx-self": "^7.0.0", - "@babel/plugin-transform-react-jsx-source": "^7.0.0", - "@babel/plugin-transform-runtime": "^7.0.0", - "@babel/plugin-transform-shorthand-properties": "^7.0.0", - "@babel/plugin-transform-spread": "^7.0.0", - "@babel/plugin-transform-sticky-regex": "^7.0.0", - "@babel/plugin-transform-typescript": "^7.5.0", - "@babel/plugin-transform-unicode-regex": "^7.0.0", - "@babel/template": "^7.0.0", - "babel-plugin-transform-flow-enums": "^0.0.2", - "react-refresh": "^0.4.0" - } - }, - "metro-react-native-babel-transformer": { - "version": "0.76.7", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "@babel/core": "^7.20.0", - "babel-preset-fbjs": "^3.4.0", - "hermes-parser": "0.12.0", - "metro-react-native-babel-preset": "0.76.7", - "nullthrows": "^1.1.1" - } - }, - "metro-resolver": { - "version": "0.76.7", - "dev": true, - "optional": true, - "peer": true - }, - "metro-runtime": { - "version": "0.76.7", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "@babel/runtime": "^7.0.0", - "react-refresh": "^0.4.0" - } - }, - "metro-source-map": { - "version": "0.76.7", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "@babel/traverse": "^7.20.0", - "@babel/types": "^7.20.0", - "invariant": "^2.2.4", - "metro-symbolicate": "0.76.7", - "nullthrows": "^1.1.1", - "ob1": "0.76.7", - "source-map": "^0.5.6", - "vlq": "^1.0.0" - }, - "dependencies": { - "source-map": { - "version": "0.5.7", - "dev": true, - "optional": true, - "peer": true - } - } - }, - "metro-symbolicate": { - "version": "0.76.7", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "invariant": "^2.2.4", - "metro-source-map": "0.76.7", - "nullthrows": "^1.1.1", - "source-map": "^0.5.6", - "through2": "^2.0.1", - "vlq": "^1.0.0" - }, - "dependencies": { - "source-map": { - "version": "0.5.7", - "dev": true, - "optional": true, - "peer": true - } - } - }, - "metro-transform-plugins": { - "version": "0.76.7", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "@babel/core": "^7.20.0", - "@babel/generator": "^7.20.0", - "@babel/template": "^7.0.0", - "@babel/traverse": "^7.20.0", - "nullthrows": "^1.1.1" - } - }, - "metro-transform-worker": { - "version": "0.76.7", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "@babel/core": "^7.20.0", - "@babel/generator": "^7.20.0", - "@babel/parser": "^7.20.0", - "@babel/types": "^7.20.0", - "babel-preset-fbjs": "^3.4.0", - "metro": "0.76.7", - "metro-babel-transformer": "0.76.7", - "metro-cache": "0.76.7", - "metro-cache-key": "0.76.7", - "metro-source-map": "0.76.7", - "metro-transform-plugins": "0.76.7", - "nullthrows": "^1.1.1" - } - }, - "micromatch": { - "version": "4.0.5", - "dev": true, - "requires": { - "braces": "^3.0.2", - "picomatch": "^2.3.1" - } - }, - "mime": { - "version": "2.6.0", - "dev": true, - "optional": true, - "peer": true - }, - "mime-db": { - "version": "1.52.0", - "dev": true, - "optional": true, - "peer": true - }, - "mime-types": { - "version": "2.1.35", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "mime-db": "1.52.0" - } - }, - "mimic-fn": { - "version": "2.1.0", - "dev": true - }, - "minimalistic-assert": { - "version": "1.0.1", - "dev": true - }, - "minimalistic-crypto-utils": { - "version": "1.0.1", - "dev": true - }, - "minimatch": { - "version": "3.1.2", - "dev": true, - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "minimist": { - "version": "1.2.8", - "dev": true, - "optional": true, - "peer": true - }, - "minipass": { - "version": "3.1.6", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "yallist": "^4.0.0" - }, - "dependencies": { - "yallist": { - "version": "4.0.0", - "dev": true, - "optional": true, - "peer": true - } - } - }, - "minipass-collect": { - "version": "1.0.2", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "minipass": "^3.0.0" - } - }, - "minipass-flush": { - "version": "1.0.5", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "minipass": "^3.0.0" - } - }, - "minipass-pipeline": { - "version": "1.2.4", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "minipass": "^3.0.0" - } - }, - "minizlib": { - "version": "2.1.2", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "minipass": "^3.0.0", - "yallist": "^4.0.0" - }, - "dependencies": { - "yallist": { - "version": "4.0.0", - "dev": true, - "optional": true, - "peer": true - } - } - }, - "mkdirp": { - "version": "0.5.6", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "minimist": "^1.2.6" - } - }, - "ms": { - "version": "2.1.2", - "dev": true - }, - "msrcrypto": { - "version": "1.5.8", - "dev": true - }, - "mv": { - "version": "2.1.1", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "mkdirp": "~0.5.1", - "ncp": "~2.0.0", - "rimraf": "~2.4.0" - }, - "dependencies": { - "glob": { - "version": "6.0.4", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "2 || 3", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "rimraf": { - "version": "2.4.5", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "glob": "^6.0.1" - } - } - } - }, - "mz": { - "version": "2.7.0", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "any-promise": "^1.0.0", - "object-assign": "^4.0.1", - "thenify-all": "^1.0.0" - } - }, - "nanoid": { - "version": "3.3.6", - "dev": true, - "optional": true, - "peer": true - }, - "natural-compare": { - "version": "1.4.0", - "dev": true - }, - "ncp": { - "version": "2.0.0", - "dev": true, - "optional": true, - "peer": true - }, - "negotiator": { - "version": "0.6.3", - "dev": true, - "optional": true, - "peer": true - }, - "neo-async": { - "version": "2.6.2", - "dev": true, - "optional": true, - "peer": true - }, - "nested-error-stacks": { - "version": "2.0.1", - "dev": true, - "optional": true, - "peer": true - }, - "nice-try": { - "version": "1.0.5", - "dev": true, - "optional": true, - "peer": true - }, - "nocache": { - "version": "3.0.4", - "dev": true, - "optional": true, - "peer": true - }, - "node-abort-controller": { - "version": "3.1.1", - "dev": true, - "optional": true, - "peer": true - }, - "node-addon-api": { - "version": "2.0.2", - "dev": true - }, - "node-dir": { - "version": "0.1.17", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "minimatch": "^3.0.2" - } - }, - "node-fetch": { - "version": "2.6.12", - "dev": true, - "requires": { - "whatwg-url": "^5.0.0" - } - }, - "node-forge": { - "version": "1.3.1", - "dev": true, - "optional": true, - "peer": true - }, - "node-gyp-build": { - "version": "4.6.0", - "dev": true - }, - "node-int64": { - "version": "0.4.0", - "dev": true - }, - "node-releases": { - "version": "2.0.13", - "dev": true - }, - "node-stream-zip": { - "version": "1.15.0", - "dev": true, - "optional": true, - "peer": true - }, - "normalize-path": { - "version": "3.0.0", - "dev": true - }, - "npm-package-arg": { - "version": "7.0.0", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "hosted-git-info": "^3.0.2", - "osenv": "^0.1.5", - "semver": "^5.6.0", - "validate-npm-package-name": "^3.0.0" - }, - "dependencies": { - "semver": { - "version": "5.7.2", - "dev": true, - "optional": true, - "peer": true - } - } - }, - "npm-run-path": { - "version": "4.0.1", - "dev": true, - "requires": { - "path-key": "^3.0.0" - } - }, - "nullthrows": { - "version": "1.1.1", - "dev": true, - "optional": true, - "peer": true - }, - "ob1": { - "version": "0.76.7", - "dev": true, - "optional": true, - "peer": true - }, - "object-assign": { - "version": "4.1.1", - "dev": true, - "optional": true, - "peer": true - }, - "object-inspect": { - "version": "1.12.3", - "dev": true, - "optional": true, - "peer": true - }, - "object-is": { - "version": "1.1.5", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3" - } - }, - "object-keys": { - "version": "1.1.1", - "dev": true - }, - "on-finished": { - "version": "2.4.1", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "ee-first": "1.1.1" - } - }, - "on-headers": { - "version": "1.0.2", - "dev": true, - "optional": true, - "peer": true - }, - "once": { - "version": "1.4.0", - "dev": true, - "requires": { - "wrappy": "1" - } - }, - "onetime": { - "version": "5.1.2", - "dev": true, - "requires": { - "mimic-fn": "^2.1.0" - } - }, - "open": { - "version": "8.4.2", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "define-lazy-prop": "^2.0.0", - "is-docker": "^2.1.1", - "is-wsl": "^2.2.0" - } - }, - "ora": { - "version": "3.4.0", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "chalk": "^2.4.2", - "cli-cursor": "^2.1.0", - "cli-spinners": "^2.0.0", - "log-symbols": "^2.2.0", - "strip-ansi": "^5.2.0", - "wcwidth": "^1.0.1" - }, - "dependencies": { - "ansi-regex": { - "version": "4.1.1", - "dev": true, - "optional": true, - "peer": true - }, - "ansi-styles": { - "version": "3.2.1", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "chalk": { - "version": "2.4.2", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "color-convert": { - "version": "1.9.3", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "dev": true, - "optional": true, - "peer": true - }, - "escape-string-regexp": { - "version": "1.0.5", - "dev": true, - "optional": true, - "peer": true - }, - "has-flag": { - "version": "3.0.0", - "dev": true, - "optional": true, - "peer": true - }, - "strip-ansi": { - "version": "5.2.0", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "ansi-regex": "^4.1.0" - } - }, - "supports-color": { - "version": "5.5.0", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "os-homedir": { - "version": "1.0.2", - "dev": true, - "optional": true, - "peer": true - }, - "os-tmpdir": { - "version": "1.0.2", - "dev": true, - "optional": true, - "peer": true - }, - "osenv": { - "version": "0.1.5", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "os-homedir": "^1.0.0", - "os-tmpdir": "^1.0.0" - } - }, - "p-finally": { - "version": "1.0.0", - "dev": true, - "optional": true, - "peer": true - }, - "p-limit": { - "version": "3.1.0", - "dev": true, - "requires": { - "yocto-queue": "^0.1.0" - } - }, - "p-locate": { - "version": "4.1.0", - "dev": true, - "requires": { - "p-limit": "^2.2.0" - }, - "dependencies": { - "p-limit": { - "version": "2.3.0", - "dev": true, - "requires": { - "p-try": "^2.0.0" - } - } - } - }, - "p-map": { - "version": "4.0.0", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "aggregate-error": "^3.0.0" - } - }, - "p-try": { - "version": "2.2.0", - "dev": true - }, - "parse-json": { - "version": "5.2.0", - "dev": true, - "requires": { - "@babel/code-frame": "^7.0.0", - "error-ex": "^1.3.1", - "json-parse-even-better-errors": "^2.3.0", - "lines-and-columns": "^1.1.6" - } - }, - "parse-png": { - "version": "2.1.0", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "pngjs": "^3.3.0" - } - }, - "parseurl": { - "version": "1.3.3", - "dev": true, - "optional": true, - "peer": true - }, - "password-prompt": { - "version": "1.1.3", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "ansi-escapes": "^4.3.2", - "cross-spawn": "^7.0.3" - } - }, - "path-browserify": { - "version": "1.0.1", - "dev": true, - "optional": true, - "peer": true - }, - "path-exists": { - "version": "4.0.0", - "dev": true - }, - "path-is-absolute": { - "version": "1.0.1", - "dev": true - }, - "path-key": { - "version": "3.1.1", - "dev": true - }, - "path-parse": { - "version": "1.0.7", - "dev": true - }, - "path-type": { - "version": "4.0.0", - "dev": true, - "optional": true, - "peer": true - }, - "pbkdf2": { - "version": "3.1.2", - "dev": true, - "requires": { - "create-hash": "^1.1.2", - "create-hmac": "^1.1.4", - "ripemd160": "^2.0.1", - "safe-buffer": "^5.0.1", - "sha.js": "^2.4.8" - } - }, - "picocolors": { - "version": "1.0.0", - "dev": true - }, - "picomatch": { - "version": "2.3.1", - "dev": true - }, - "pify": { - "version": "4.0.1", - "dev": true, - "optional": true, - "peer": true - }, - "pirates": { - "version": "4.0.6", - "dev": true - }, - "pkg-dir": { - "version": "4.2.0", - "dev": true, - "requires": { - "find-up": "^4.0.0" - } - }, - "pkg-up": { - "version": "3.1.0", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "find-up": "^3.0.0" - }, - "dependencies": { - "find-up": { - "version": "3.0.0", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "locate-path": "^3.0.0" - } - }, - "locate-path": { - "version": "3.0.0", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" - } - }, - "p-limit": { - "version": "2.3.0", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "p-try": "^2.0.0" - } - }, - "p-locate": { - "version": "3.0.0", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "p-limit": "^2.0.0" - } - }, - "path-exists": { - "version": "3.0.0", - "dev": true, - "optional": true, - "peer": true - } - } - }, - "plist": { - "version": "3.1.0", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "@xmldom/xmldom": "^0.8.8", - "base64-js": "^1.5.1", - "xmlbuilder": "^15.1.1" - }, - "dependencies": { - "@xmldom/xmldom": { - "version": "0.8.10", - "dev": true, - "optional": true, - "peer": true - }, - "xmlbuilder": { - "version": "15.1.1", - "dev": true, - "optional": true, - "peer": true - } - } - }, - "pngjs": { - "version": "3.4.0", - "dev": true, - "optional": true, - "peer": true - }, - "postcss": { - "version": "8.4.27", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "nanoid": "^3.3.6", - "picocolors": "^1.0.0", - "source-map-js": "^1.0.2" - } - }, - "pretty-bytes": { - "version": "5.6.0", - "dev": true, - "optional": true, - "peer": true - }, - "pretty-format": { - "version": "29.6.1", - "dev": true, - "requires": { - "@jest/schemas": "^29.6.0", - "ansi-styles": "^5.0.0", - "react-is": "^18.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "5.2.0", - "dev": true - } - } - }, - "process": { - "version": "0.11.10", - "dev": true - }, - "process-nextick-args": { - "version": "2.0.1", - "dev": true, - "optional": true, - "peer": true - }, - "progress": { - "version": "2.0.3", - "dev": true, - "optional": true, - "peer": true - }, - "promise": { - "version": "7.3.1", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "asap": "~2.0.3" - } - }, - "promise-inflight": { - "version": "1.0.1", - "dev": true, - "optional": true, - "peer": true - }, - "prompts": { - "version": "2.4.2", - "dev": true, - "requires": { - "kleur": "^3.0.3", - "sisteransi": "^1.0.5" - } - }, - "prop-types": { - "version": "15.8.1", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "loose-envify": "^1.4.0", - "object-assign": "^4.1.1", - "react-is": "^16.13.1" - }, - "dependencies": { - "react-is": { - "version": "16.13.1", - "dev": true, - "optional": true, - "peer": true - } - } - }, - "pump": { - "version": "3.0.0", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, - "pure-rand": { - "version": "6.0.2", - "dev": true - }, - "pvtsutils": { - "version": "1.3.2", - "dev": true, - "requires": { - "tslib": "^2.4.0" - } - }, - "pvutils": { - "version": "1.1.3", - "dev": true - }, - "qrcode-terminal": { - "version": "0.11.0", - "dev": true, - "optional": true, - "peer": true - }, - "qs": { - "version": "6.11.0", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "side-channel": "^1.0.4" - } - }, - "querystringify": { - "version": "2.2.0", - "dev": true, - "optional": true, - "peer": true - }, - "queue": { - "version": "6.0.2", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "inherits": "~2.0.3" - } - }, - "queue-microtask": { - "version": "1.2.3", - "dev": true, - "optional": true - }, - "randombytes": { - "version": "2.1.0", - "dev": true, - "requires": { - "safe-buffer": "^5.1.0" - } - }, - "range-parser": { - "version": "1.2.1", - "dev": true, - "optional": true, - "peer": true - }, - "raw-body": { - "version": "2.5.2", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "bytes": "3.1.2", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "unpipe": "1.0.0" - } - }, - "rc": { - "version": "1.2.8", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "deep-extend": "^0.6.0", - "ini": "~1.3.0", - "minimist": "^1.2.0", - "strip-json-comments": "~2.0.1" - }, - "dependencies": { - "strip-json-comments": { - "version": "2.0.1", - "dev": true, - "optional": true, - "peer": true - } - } - }, - "react": { - "version": "18.2.0", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "loose-envify": "^1.1.0" - } - }, - "react-devtools-core": { - "version": "4.28.0", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "shell-quote": "^1.6.1", - "ws": "^7" - }, - "dependencies": { - "ws": { - "version": "7.5.9", - "dev": true, - "optional": true, - "peer": true, - "requires": {} - } - } - }, - "react-is": { - "version": "18.2.0", - "dev": true - }, - "react-native": { - "version": "0.72.3", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "@jest/create-cache-key-function": "^29.2.1", - "@react-native-community/cli": "11.3.5", - "@react-native-community/cli-platform-android": "11.3.5", - "@react-native-community/cli-platform-ios": "11.3.5", - "@react-native/assets-registry": "^0.72.0", - "@react-native/codegen": "^0.72.6", - "@react-native/gradle-plugin": "^0.72.11", - "@react-native/js-polyfills": "^0.72.1", - "@react-native/normalize-colors": "^0.72.0", - "@react-native/virtualized-lists": "^0.72.6", - "abort-controller": "^3.0.0", - "anser": "^1.4.9", - "base64-js": "^1.1.2", - "deprecated-react-native-prop-types": "4.1.0", - "event-target-shim": "^5.0.1", - "flow-enums-runtime": "^0.0.5", - "invariant": "^2.2.4", - "jest-environment-node": "^29.2.1", - "jsc-android": "^250231.0.0", - "memoize-one": "^5.0.0", - "metro-runtime": "0.76.7", - "metro-source-map": "0.76.7", - "mkdirp": "^0.5.1", - "nullthrows": "^1.1.1", - "pretty-format": "^26.5.2", - "promise": "^8.3.0", - "react-devtools-core": "^4.27.2", - "react-refresh": "^0.4.0", - "react-shallow-renderer": "^16.15.0", - "regenerator-runtime": "^0.13.2", - "scheduler": "0.24.0-canary-efb381bbf-20230505", - "stacktrace-parser": "^0.1.10", - "use-sync-external-store": "^1.0.0", - "whatwg-fetch": "^3.0.0", - "ws": "^6.2.2", - "yargs": "^17.6.2" - }, - "dependencies": { - "@jest/types": { - "version": "26.6.2", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^15.0.0", - "chalk": "^4.0.0" - } - }, - "@types/yargs": { - "version": "15.0.15", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "@types/yargs-parser": "*" - } - }, - "pretty-format": { - "version": "26.6.2", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "@jest/types": "^26.6.2", - "ansi-regex": "^5.0.0", - "ansi-styles": "^4.0.0", - "react-is": "^17.0.1" - } - }, - "promise": { - "version": "8.3.0", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "asap": "~2.0.6" - } - }, - "react-is": { - "version": "17.0.2", - "dev": true, - "optional": true, - "peer": true - }, - "ws": { - "version": "6.2.2", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "async-limiter": "~1.0.0" - } - } - } - }, - "react-native-securerandom": { - "version": "0.1.1", - "dev": true, - "optional": true, - "requires": { - "base64-js": "*" - } - }, - "react-refresh": { - "version": "0.4.3", - "dev": true, - "optional": true, - "peer": true - }, - "react-shallow-renderer": { - "version": "16.15.0", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "object-assign": "^4.1.1", - "react-is": "^16.12.0 || ^17.0.0 || ^18.0.0" - } - }, - "readable-stream": { - "version": "3.6.2", - "dev": true, - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - }, - "readline": { - "version": "1.3.0", - "dev": true, - "optional": true, - "peer": true - }, - "recast": { - "version": "0.21.5", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "ast-types": "0.15.2", - "esprima": "~4.0.0", - "source-map": "~0.6.1", - "tslib": "^2.0.1" - } - }, - "regenerate": { - "version": "1.4.2", - "dev": true - }, - "regenerate-unicode-properties": { - "version": "10.1.0", - "dev": true, - "requires": { - "regenerate": "^1.4.2" - } - }, - "regenerator-runtime": { - "version": "0.13.11", - "dev": true - }, - "regenerator-transform": { - "version": "0.15.1", - "dev": true, - "requires": { - "@babel/runtime": "^7.8.4" - } - }, - "regexpu-core": { - "version": "5.3.2", - "dev": true, - "requires": { - "@babel/regjsgen": "^0.8.0", - "regenerate": "^1.4.2", - "regenerate-unicode-properties": "^10.1.0", - "regjsparser": "^0.9.1", - "unicode-match-property-ecmascript": "^2.0.0", - "unicode-match-property-value-ecmascript": "^2.1.0" - } - }, - "regjsparser": { - "version": "0.9.1", - "dev": true, - "requires": { - "jsesc": "~0.5.0" - }, - "dependencies": { - "jsesc": { - "version": "0.5.0", - "dev": true - } - } - }, - "remove-trailing-slash": { - "version": "0.1.1", - "dev": true, - "optional": true, - "peer": true - }, - "require-directory": { - "version": "2.1.1", - "dev": true - }, - "require-from-string": { - "version": "2.0.2", - "dev": true, - "optional": true, - "peer": true - }, - "require-main-filename": { - "version": "2.0.0", - "dev": true, - "optional": true, - "peer": true - }, - "requireg": { - "version": "0.2.2", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "nested-error-stacks": "~2.0.1", - "rc": "~1.2.7", - "resolve": "~1.7.1" - }, - "dependencies": { - "resolve": { - "version": "1.7.1", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "path-parse": "^1.0.5" - } - } - } - }, - "requires-port": { - "version": "1.0.0", - "dev": true, - "optional": true, - "peer": true - }, - "reselect": { - "version": "4.1.8", - "dev": true, - "optional": true, - "peer": true - }, - "resolve": { - "version": "1.22.2", - "dev": true, - "requires": { - "is-core-module": "^2.11.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - } - }, - "resolve-cwd": { - "version": "3.0.0", - "dev": true, - "requires": { - "resolve-from": "^5.0.0" - } - }, - "resolve-from": { - "version": "5.0.0", - "dev": true - }, - "resolve.exports": { - "version": "2.0.2", - "dev": true - }, - "restore-cursor": { - "version": "2.0.0", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "onetime": "^2.0.0", - "signal-exit": "^3.0.2" - }, - "dependencies": { - "mimic-fn": { - "version": "1.2.0", - "dev": true, - "optional": true, - "peer": true - }, - "onetime": { - "version": "2.0.1", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "mimic-fn": "^1.0.0" - } - } - } - }, - "reusify": { - "version": "1.0.4", - "dev": true, - "optional": true - }, - "rimraf": { - "version": "2.7.1", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "glob": "^7.1.3" - } - }, - "ripemd160": { - "version": "2.0.2", - "dev": true, - "requires": { - "hash-base": "^3.0.0", - "inherits": "^2.0.1" - } - }, - "run-parallel": { - "version": "1.2.0", - "dev": true, - "optional": true, - "requires": { - "queue-microtask": "^1.2.2" - } - }, - "safe-buffer": { - "version": "5.2.1", - "dev": true - }, - "safe-json-stringify": { - "version": "1.2.0", - "dev": true, - "optional": true, - "peer": true - }, - "safer-buffer": { - "version": "2.1.2", - "dev": true, - "optional": true, - "peer": true - }, - "sax": { - "version": "1.2.4", - "dev": true, - "optional": true, - "peer": true - }, - "scheduler": { - "version": "0.24.0-canary-efb381bbf-20230505", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "loose-envify": "^1.1.0" - } - }, - "secp256k1": { - "version": "4.0.3", - "dev": true, - "requires": { - "elliptic": "^6.5.4", - "node-addon-api": "^2.0.0", - "node-gyp-build": "^4.2.0" - } - }, - "semver": { - "version": "6.3.1", - "dev": true - }, - "send": { - "version": "0.18.0", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "fresh": "0.5.2", - "http-errors": "2.0.0", - "mime": "1.6.0", - "ms": "2.1.3", - "on-finished": "2.4.1", - "range-parser": "~1.2.1", - "statuses": "2.0.1" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "ms": "2.0.0" - }, - "dependencies": { - "ms": { - "version": "2.0.0", - "dev": true, - "optional": true, - "peer": true - } - } - }, - "mime": { - "version": "1.6.0", - "dev": true, - "optional": true, - "peer": true - }, - "ms": { - "version": "2.1.3", - "dev": true, - "optional": true, - "peer": true - }, - "statuses": { - "version": "2.0.1", - "dev": true, - "optional": true, - "peer": true - } - } - }, - "serialize-error": { - "version": "6.0.0", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "type-fest": "^0.12.0" - }, - "dependencies": { - "type-fest": { - "version": "0.12.0", - "dev": true, - "optional": true, - "peer": true - } - } - }, - "serve-static": { - "version": "1.15.0", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "parseurl": "~1.3.3", - "send": "0.18.0" - } - }, - "set-blocking": { - "version": "2.0.0", - "dev": true, - "optional": true, - "peer": true - }, - "setimmediate": { - "version": "1.0.5", - "dev": true, - "optional": true, - "peer": true - }, - "setprototypeof": { - "version": "1.2.0", - "dev": true, - "optional": true, - "peer": true - }, - "sha.js": { - "version": "2.4.11", - "dev": true, - "requires": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - } - }, - "shallow-clone": { - "version": "3.0.1", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "kind-of": "^6.0.2" - } - }, - "shebang-command": { - "version": "2.0.0", - "dev": true, - "requires": { - "shebang-regex": "^3.0.0" - } - }, - "shebang-regex": { - "version": "3.0.0", - "dev": true - }, - "shell-quote": { - "version": "1.8.1", - "dev": true, - "optional": true, - "peer": true - }, - "side-channel": { - "version": "1.0.4", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "call-bind": "^1.0.0", - "get-intrinsic": "^1.0.2", - "object-inspect": "^1.9.0" - } - }, - "signal-exit": { - "version": "3.0.7", - "dev": true - }, - "simple-cbor": { - "version": "0.4.1", - "dev": true - }, - "simple-plist": { - "version": "1.3.1", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "bplist-creator": "0.1.0", - "bplist-parser": "0.3.1", - "plist": "^3.0.5" - }, - "dependencies": { - "bplist-parser": { - "version": "0.3.1", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "big-integer": "1.6.x" - } - } - } - }, - "sisteransi": { - "version": "1.0.5", - "dev": true - }, - "slash": { - "version": "3.0.0", - "dev": true - }, - "slice-ansi": { - "version": "2.1.0", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "ansi-styles": "^3.2.0", - "astral-regex": "^1.0.0", - "is-fullwidth-code-point": "^2.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "color-convert": { - "version": "1.9.3", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "dev": true, - "optional": true, - "peer": true - }, - "is-fullwidth-code-point": { - "version": "2.0.0", - "dev": true, - "optional": true, - "peer": true - } - } - }, - "slugify": { - "version": "1.6.6", - "dev": true, - "optional": true, - "peer": true - }, - "source-map": { - "version": "0.6.1", - "dev": true - }, - "source-map-js": { - "version": "1.0.2", - "dev": true, - "optional": true, - "peer": true - }, - "source-map-support": { - "version": "0.5.13", - "dev": true, - "requires": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } - }, - "split": { - "version": "1.0.1", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "through": "2" - } - }, - "sprintf-js": { - "version": "1.0.3", - "dev": true - }, - "ssri": { - "version": "8.0.1", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "minipass": "^3.1.1" - } - }, - "stack-utils": { - "version": "2.0.6", - "dev": true, - "requires": { - "escape-string-regexp": "^2.0.0" - } - }, - "stackframe": { - "version": "1.3.4", - "dev": true, - "optional": true, - "peer": true - }, - "stacktrace-parser": { - "version": "0.1.10", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "type-fest": "^0.7.1" - }, - "dependencies": { - "type-fest": { - "version": "0.7.1", - "dev": true, - "optional": true, - "peer": true - } - } - }, - "statuses": { - "version": "1.5.0", - "dev": true, - "optional": true, - "peer": true - }, - "str2buf": { - "version": "1.3.0", - "dev": true - }, - "stream-browserify": { - "version": "3.0.0", - "dev": true, - "requires": { - "inherits": "~2.0.4", - "readable-stream": "^3.5.0" - } - }, - "stream-buffers": { - "version": "2.2.0", - "dev": true, - "optional": true, - "peer": true - }, - "string_decoder": { - "version": "1.3.0", - "dev": true, - "requires": { - "safe-buffer": "~5.2.0" - } - }, - "string-length": { - "version": "4.0.2", - "dev": true, - "requires": { - "char-regex": "^1.0.2", - "strip-ansi": "^6.0.0" - } - }, - "string-width": { - "version": "4.2.3", - "dev": true, - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - } - }, - "strip-ansi": { - "version": "6.0.1", - "dev": true, - "requires": { - "ansi-regex": "^5.0.1" - } - }, - "strip-bom": { - "version": "4.0.0", - "dev": true - }, - "strip-eof": { - "version": "1.0.0", - "dev": true, - "optional": true, - "peer": true - }, - "strip-final-newline": { - "version": "2.0.0", - "dev": true - }, - "strip-json-comments": { - "version": "3.1.1", - "dev": true - }, - "strnum": { - "version": "1.0.5", - "dev": true, - "optional": true, - "peer": true - }, - "structured-headers": { - "version": "0.4.1", - "dev": true, - "optional": true, - "peer": true - }, - "sucrase": { - "version": "3.34.0", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "@jridgewell/gen-mapping": "^0.3.2", - "commander": "^4.0.0", - "glob": "7.1.6", - "lines-and-columns": "^1.1.6", - "mz": "^2.7.0", - "pirates": "^4.0.1", - "ts-interface-checker": "^0.1.9" - }, - "dependencies": { - "commander": { - "version": "4.1.1", - "dev": true, - "optional": true, - "peer": true - }, - "glob": { - "version": "7.1.6", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - } - } - }, - "sudo-prompt": { - "version": "8.2.5", - "dev": true, - "optional": true, - "peer": true - }, - "supports-color": { - "version": "7.2.0", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - }, - "supports-hyperlinks": { - "version": "2.3.0", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "has-flag": "^4.0.0", - "supports-color": "^7.0.0" - } - }, - "supports-preserve-symlinks-flag": { - "version": "1.0.0", - "dev": true - }, - "tar": { - "version": "6.1.15", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "chownr": "^2.0.0", - "fs-minipass": "^2.0.0", - "minipass": "^5.0.0", - "minizlib": "^2.1.1", - "mkdirp": "^1.0.3", - "yallist": "^4.0.0" - }, - "dependencies": { - "minipass": { - "version": "5.0.0", - "dev": true, - "optional": true, - "peer": true - }, - "mkdirp": { - "version": "1.0.4", - "dev": true, - "optional": true, - "peer": true - }, - "yallist": { - "version": "4.0.0", - "dev": true, - "optional": true, - "peer": true - } - } - }, - "temp": { - "version": "0.8.4", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "rimraf": "~2.6.2" - }, - "dependencies": { - "rimraf": { - "version": "2.6.3", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "glob": "^7.1.3" - } - } - } - }, - "temp-dir": { - "version": "2.0.0", - "dev": true, - "optional": true, - "peer": true - }, - "tempy": { - "version": "0.7.1", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "del": "^6.0.0", - "is-stream": "^2.0.0", - "temp-dir": "^2.0.0", - "type-fest": "^0.16.0", - "unique-string": "^2.0.0" - }, - "dependencies": { - "type-fest": { - "version": "0.16.0", - "dev": true, - "optional": true, - "peer": true - } - } - }, - "terminal-link": { - "version": "2.1.1", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "ansi-escapes": "^4.2.1", - "supports-hyperlinks": "^2.0.0" - } - }, - "terser": { - "version": "5.19.2", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "@jridgewell/source-map": "^0.3.3", - "acorn": "^8.8.2", - "commander": "^2.20.0", - "source-map-support": "~0.5.20" - }, - "dependencies": { - "source-map-support": { - "version": "0.5.21", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } - } - } - }, - "test-exclude": { - "version": "6.0.0", - "dev": true, - "requires": { - "@istanbuljs/schema": "^0.1.2", - "glob": "^7.1.4", - "minimatch": "^3.0.4" - } - }, - "text-table": { - "version": "0.2.0", - "dev": true, - "optional": true, - "peer": true - }, - "thenify": { - "version": "3.3.1", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "any-promise": "^1.0.0" - } - }, - "thenify-all": { - "version": "1.6.0", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "thenify": ">= 3.1.0 < 4" - } - }, - "throat": { - "version": "5.0.0", - "dev": true, - "optional": true, - "peer": true - }, - "through": { - "version": "2.3.8", - "dev": true, - "optional": true, - "peer": true - }, - "through2": { - "version": "2.0.5", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "readable-stream": "~2.3.6", - "xtend": "~4.0.1" - }, - "dependencies": { - "readable-stream": { - "version": "2.3.8", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "safe-buffer": { - "version": "5.1.2", - "dev": true, - "optional": true, - "peer": true - }, - "string_decoder": { - "version": "1.1.1", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "safe-buffer": "~5.1.0" - } - } - } - }, - "tmp": { - "version": "0.0.33", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "os-tmpdir": "~1.0.2" - } - }, - "tmpl": { - "version": "1.0.5", - "dev": true - }, - "to-fast-properties": { - "version": "2.0.0", - "dev": true - }, - "to-regex-range": { - "version": "5.0.1", - "dev": true, - "requires": { - "is-number": "^7.0.0" - } - }, - "toidentifier": { - "version": "1.0.1", - "dev": true, - "optional": true, - "peer": true - }, - "tr46": { - "version": "0.0.3", - "dev": true - }, - "traverse": { - "version": "0.6.7", - "dev": true, - "optional": true, - "peer": true - }, - "ts-interface-checker": { - "version": "0.1.13", - "dev": true, - "optional": true, - "peer": true - }, - "ts-jest": { - "version": "29.1.1", - "dev": true, - "requires": { - "bs-logger": "0.x", - "fast-json-stable-stringify": "2.x", - "jest-util": "^29.0.0", - "json5": "^2.2.3", - "lodash.memoize": "4.x", - "make-error": "1.x", - "semver": "^7.5.3", - "yargs-parser": "^21.0.1" - }, - "dependencies": { - "lru-cache": { - "version": "6.0.0", - "dev": true, - "requires": { - "yallist": "^4.0.0" - } - }, - "semver": { - "version": "7.5.4", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - } - }, - "yallist": { - "version": "4.0.0", - "dev": true - } - } - }, - "ts-node": { - "version": "10.9.1", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "@cspotcode/source-map-support": "^0.8.0", - "@tsconfig/node10": "^1.0.7", - "@tsconfig/node12": "^1.0.7", - "@tsconfig/node14": "^1.0.0", - "@tsconfig/node16": "^1.0.2", - "acorn": "^8.4.1", - "acorn-walk": "^8.1.1", - "arg": "^4.1.0", - "create-require": "^1.1.0", - "diff": "^4.0.1", - "make-error": "^1.1.1", - "v8-compile-cache-lib": "^3.0.1", - "yn": "3.1.1" - } - }, - "tslib": { - "version": "2.6.1", - "dev": true - }, - "tweetnacl": { - "version": "1.0.3", - "dev": true - }, - "type-detect": { - "version": "4.0.8", - "dev": true - }, - "type-fest": { - "version": "0.21.3", - "dev": true - }, - "type-is": { - "version": "1.6.18", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "media-typer": "0.3.0", - "mime-types": "~2.1.24" - } - }, - "typescript": { - "version": "5.1.6", - "dev": true, - "peer": true - }, - "ua-parser-js": { - "version": "1.0.35", - "dev": true, - "optional": true, - "peer": true - }, - "uglify-es": { - "version": "3.3.9", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "commander": "~2.13.0", - "source-map": "~0.6.1" - }, - "dependencies": { - "commander": { - "version": "2.13.0", - "dev": true, - "optional": true, - "peer": true - } - } - }, - "unicode-canonical-property-names-ecmascript": { - "version": "2.0.0", - "dev": true - }, - "unicode-match-property-ecmascript": { - "version": "2.0.0", - "dev": true, - "requires": { - "unicode-canonical-property-names-ecmascript": "^2.0.0", - "unicode-property-aliases-ecmascript": "^2.0.0" - } - }, - "unicode-match-property-value-ecmascript": { - "version": "2.1.0", - "dev": true - }, - "unicode-property-aliases-ecmascript": { - "version": "2.1.0", - "dev": true - }, - "unique-filename": { - "version": "1.1.1", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "unique-slug": "^2.0.0" - } - }, - "unique-slug": { - "version": "2.0.2", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "imurmurhash": "^0.1.4" - } - }, - "unique-string": { - "version": "2.0.0", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "crypto-random-string": "^2.0.0" - } - }, - "universalify": { - "version": "0.1.2", - "dev": true, - "optional": true, - "peer": true - }, - "unpipe": { - "version": "1.0.0", - "dev": true, - "optional": true, - "peer": true - }, - "update-browserslist-db": { - "version": "1.0.11", - "dev": true, - "requires": { - "escalade": "^3.1.1", - "picocolors": "^1.0.0" - } - }, - "url-join": { - "version": "4.0.0", - "dev": true, - "optional": true, - "peer": true - }, - "url-parse": { - "version": "1.5.10", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "querystringify": "^2.1.1", - "requires-port": "^1.0.0" - } - }, - "use-sync-external-store": { - "version": "1.2.0", - "dev": true, - "optional": true, - "peer": true, - "requires": {} - }, - "util": { - "version": "0.12.4", - "dev": true, - "requires": { - "inherits": "^2.0.3", - "is-arguments": "^1.0.4", - "is-generator-function": "^1.0.7", - "is-typed-array": "^1.1.3", - "safe-buffer": "^5.1.2", - "which-typed-array": "^1.1.2" - } - }, - "util-deprecate": { - "version": "1.0.2", - "dev": true - }, - "utils-merge": { - "version": "1.0.1", - "dev": true, - "optional": true, - "peer": true - }, - "uuid": { - "version": "3.4.0", - "dev": true, - "optional": true, - "peer": true - }, - "v8-compile-cache-lib": { - "version": "3.0.1", - "dev": true, - "optional": true, - "peer": true - }, - "v8-to-istanbul": { - "version": "9.1.0", - "dev": true, - "requires": { - "@jridgewell/trace-mapping": "^0.3.12", - "@types/istanbul-lib-coverage": "^2.0.1", - "convert-source-map": "^1.6.0" - }, - "dependencies": { - "convert-source-map": { - "version": "1.9.0", - "dev": true - } - } - }, - "valid-url": { - "version": "1.0.9", - "dev": true, - "optional": true, - "peer": true - }, - "validate-npm-package-name": { - "version": "3.0.0", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "builtins": "^1.0.3" - } - }, - "vary": { - "version": "1.1.2", - "dev": true, - "optional": true, - "peer": true - }, - "vlq": { - "version": "1.0.1", - "dev": true, - "optional": true, - "peer": true - }, - "walker": { - "version": "1.0.8", - "dev": true, - "requires": { - "makeerror": "1.0.12" - } - }, - "wcwidth": { - "version": "1.0.1", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "defaults": "^1.0.3" - } - }, - "webcrypto-core": { - "version": "1.7.7", - "dev": true, - "requires": { - "@peculiar/asn1-schema": "^2.3.6", - "@peculiar/json-schema": "^1.1.12", - "asn1js": "^3.0.1", - "pvtsutils": "^1.3.2", - "tslib": "^2.4.0" - } - }, - "webcrypto-shim": { - "version": "0.1.7", - "dev": true - }, - "webidl-conversions": { - "version": "3.0.1", - "dev": true - }, - "whatwg-fetch": { - "version": "3.6.17", - "dev": true - }, - "whatwg-url": { - "version": "5.0.0", - "dev": true, - "requires": { - "tr46": "~0.0.3", - "webidl-conversions": "^3.0.0" - } - }, - "which": { - "version": "2.0.2", - "dev": true, - "requires": { - "isexe": "^2.0.0" - } - }, - "which-module": { - "version": "2.0.1", - "dev": true, - "optional": true, - "peer": true - }, - "which-typed-array": { - "version": "1.1.9", - "dev": true, - "requires": { - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.2", - "for-each": "^0.3.3", - "gopd": "^1.0.1", - "has-tostringtag": "^1.0.0", - "is-typed-array": "^1.1.10" - } - }, - "wonka": { - "version": "4.0.15", - "dev": true, - "optional": true, - "peer": true - }, - "wrap-ansi": { - "version": "7.0.0", - "dev": true, - "requires": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - } - }, - "wrappy": { - "version": "1.0.2", - "dev": true - }, - "write-file-atomic": { - "version": "4.0.2", - "dev": true, - "requires": { - "imurmurhash": "^0.1.4", - "signal-exit": "^3.0.7" - } - }, - "ws": { - "version": "8.13.0", - "dev": true, - "optional": true, - "peer": true, - "requires": {} - }, - "xcode": { - "version": "3.0.1", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "simple-plist": "^1.1.0", - "uuid": "^7.0.3" - }, - "dependencies": { - "uuid": { - "version": "7.0.3", - "dev": true, - "optional": true, - "peer": true - } - } - }, - "xml2js": { - "version": "0.6.0", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "sax": ">=0.6.0", - "xmlbuilder": "~11.0.0" - }, - "dependencies": { - "xmlbuilder": { - "version": "11.0.1", - "dev": true, - "optional": true, - "peer": true - } - } - }, - "xmlbuilder": { - "version": "14.0.0", - "dev": true, - "optional": true, - "peer": true - }, - "xtend": { - "version": "4.0.2", - "dev": true, - "optional": true, - "peer": true - }, - "y18n": { - "version": "5.0.8", - "dev": true - }, - "yallist": { - "version": "3.1.1", - "dev": true - }, - "yaml": { - "version": "2.3.1", - "dev": true, - "optional": true, - "peer": true - }, - "yargs": { - "version": "17.7.2", - "dev": true, - "requires": { - "cliui": "^8.0.1", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.3", - "y18n": "^5.0.5", - "yargs-parser": "^21.1.1" - } - }, - "yargs-parser": { - "version": "21.1.1", - "dev": true - }, - "yn": { - "version": "3.1.1", - "dev": true, - "optional": true, - "peer": true - }, - "yocto-queue": { - "version": "0.1.0", - "dev": true - } - } -} diff --git a/tests/package.json b/tests/package.json deleted file mode 100644 index a87879d..0000000 --- a/tests/package.json +++ /dev/null @@ -1,44 +0,0 @@ -{ - "name": "ic_websocket_cdk_rs", - "version": "0.1.0", - "description": "IC WebSocket on the IC", - "keywords": [ - "Internet Computer", - "Rust", - "JavaScript", - "Canister" - ], - "scripts": { - "generate": "dfx generate test_canister", - "deploy:tests": "dfx deploy test_canister --no-wallet --argument '(\"i3gux-m3hwt-5mh2w-t7wwm-fwx5j-6z6ht-hxguo-t4rfw-qp24z-g5ivt-2qe\", 10 : nat64, 300_000 : nat64, 300_000 : nat64)'", - "test:integration": "jest integration" - }, - "devDependencies": { - "@babel/preset-env": "^7.22.9", - "@babel/preset-typescript": "^7.22.5", - "@dfinity/agent": "^0.19.2", - "@dfinity/candid": "^0.19.2", - "@dfinity/identity-secp256k1": "^0.19.2", - "@dfinity/principal": "^0.19.2", - "@types/hdkey": "^2.0.1", - "@types/jest": "^29.5.3", - "assert": "2.0.0", - "babel-jest": "^29.6.1", - "bip39": "^3.0.4", - "buffer": "6.0.3", - "dotenv": "^16.3.1", - "events": "3.3.0", - "hdkey": "^2.1.0", - "isomorphic-fetch": "^3.0.0", - "isomorphic-webcrypto": "^2.3.8", - "jest": "^29.6.1", - "process": "0.11.10", - "stream-browserify": "3.0.0", - "ts-jest": "^29.1.1", - "tweetnacl": "^1.0.3", - "util": "0.12.4" - }, - "engines": { - "node": "^14 || ^16 || ^18" - } -} diff --git a/tests/tsconfig.json b/tests/tsconfig.json deleted file mode 100644 index 257c7f9..0000000 --- a/tests/tsconfig.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "compilerOptions": { - "types": ["jest", "node"], - "esModuleInterop": true, - "skipLibCheck": true, - "moduleResolution": "node", - }, - "include": [ - "**/*.ts", - ], -} \ No newline at end of file