From ca8464ca8f1c9c77893183464599cf894fb9af2c Mon Sep 17 00:00:00 2001
From: Patrice Tisserand
Date: Tue, 10 Sep 2024 15:05:57 +0200
Subject: [PATCH 01/33] contracts: update starknet-foundry to 0.30.0
---
contracts/.tool-versions | 2 +-
contracts/Scarb.lock | 6 +++---
contracts/Scarb.toml | 2 +-
contracts/ark_oz/Scarb.toml | 2 +-
4 files changed, 6 insertions(+), 6 deletions(-)
diff --git a/contracts/.tool-versions b/contracts/.tool-versions
index e0955bfc3..27f5ea63a 100644
--- a/contracts/.tool-versions
+++ b/contracts/.tool-versions
@@ -1,2 +1,2 @@
scarb 2.7.1
-starknet-foundry 0.28.0
\ No newline at end of file
+starknet-foundry 0.30.0
\ No newline at end of file
diff --git a/contracts/Scarb.lock b/contracts/Scarb.lock
index 0c022abc2..afc5d0b48 100644
--- a/contracts/Scarb.lock
+++ b/contracts/Scarb.lock
@@ -141,12 +141,12 @@ source = "git+https://github.com/OpenZeppelin/cairo-contracts.git?tag=v0.15.1#2f
[[package]]
name = "snforge_scarb_plugin"
version = "0.1.0"
-source = "git+https://github.com/foundry-rs/starknet-foundry.git?tag=v0.28.0#4dfe39d96690ed6b3d56971512700de3f58288ea"
+source = "git+https://github.com/foundry-rs/starknet-foundry.git?tag=v0.30.0#196f06b251926697c3d66800f2a93ae595e76496"
[[package]]
name = "snforge_std"
-version = "0.28.0"
-source = "git+https://github.com/foundry-rs/starknet-foundry.git?tag=v0.28.0#4dfe39d96690ed6b3d56971512700de3f58288ea"
+version = "0.30.0"
+source = "git+https://github.com/foundry-rs/starknet-foundry.git?tag=v0.30.0#196f06b251926697c3d66800f2a93ae595e76496"
dependencies = [
"snforge_scarb_plugin",
]
diff --git a/contracts/Scarb.toml b/contracts/Scarb.toml
index f9b906048..1808a18b8 100644
--- a/contracts/Scarb.toml
+++ b/contracts/Scarb.toml
@@ -12,7 +12,7 @@ members = [
[workspace.dependencies]
starknet = "2.7.1"
openzeppelin = { git = "https://github.com/OpenZeppelin/cairo-contracts.git", tag = "v0.15.1" }
-snforge_std = { git = "https://github.com/foundry-rs/starknet-foundry.git", tag = "v0.28.0" }
+snforge_std = { git = "https://github.com/foundry-rs/starknet-foundry.git", tag = "v0.30.0" }
assert_macros = "0.1.0"
[workspace.scripts]
diff --git a/contracts/ark_oz/Scarb.toml b/contracts/ark_oz/Scarb.toml
index a3c365ee4..9b73c8aef 100644
--- a/contracts/ark_oz/Scarb.toml
+++ b/contracts/ark_oz/Scarb.toml
@@ -9,7 +9,7 @@ starknet = "2.7.1"
openzeppelin = { git = "https://github.com/OpenZeppelin/cairo-contracts.git", tag = "v0.15.1" }
[dev-dependencies]
-snforge_std = { git = "https://github.com/foundry-rs/starknet-foundry.git", tag = "v0.28.0" }
+snforge_std = { git = "https://github.com/foundry-rs/starknet-foundry.git", tag = "v0.30.0" }
assert_macros = "0.1.0"
[tool.fmt]
From 3923f5fd23246485999d9b0fdfa59c78c4304564 Mon Sep 17 00:00:00 2001
From: Patrice Tisserand
Date: Tue, 10 Sep 2024 18:25:03 +0200
Subject: [PATCH 02/33] contracts: add event testing in create_order
---
.../src/orderbook/orderbook.cairo | 22 ++---
.../tests/integration/create_order.cairo | 80 ++++++++++++++++++-
2 files changed, 88 insertions(+), 14 deletions(-)
diff --git a/contracts/ark_component/src/orderbook/orderbook.cairo b/contracts/ark_component/src/orderbook/orderbook.cairo
index c26a133a6..2b23d2604 100644
--- a/contracts/ark_component/src/orderbook/orderbook.cairo
+++ b/contracts/ark_component/src/orderbook/orderbook.cairo
@@ -42,7 +42,7 @@ pub mod OrderbookComponent {
/// Events emitted by the Orderbook contract.
#[event]
#[derive(Drop, starknet::Event)]
- enum Event {
+ pub enum Event {
OrderPlaced: OrderPlaced,
OrderExecuted: OrderExecuted,
OrderCancelled: OrderCancelled,
@@ -51,10 +51,10 @@ pub mod OrderbookComponent {
}
// must be increased when `OrderPlaced` content change
- const ORDER_PLACED_EVENT_VERSION: u8 = 1;
+ pub const ORDER_PLACED_EVENT_VERSION: u8 = 1;
/// Event for when an order is placed.
#[derive(Drop, starknet::Event)]
- struct OrderPlaced {
+ pub struct OrderPlaced {
#[key]
order_hash: felt252,
#[key]
@@ -70,10 +70,10 @@ pub mod OrderbookComponent {
}
// must be increased when `OrderExecuted` content change
- const ORDER_EXECUTED_EVENT_VERSION: u8 = 2;
+ pub const ORDER_EXECUTED_EVENT_VERSION: u8 = 2;
/// Event for when an order is executed.
#[derive(Drop, starknet::Event)]
- struct OrderExecuted {
+ pub struct OrderExecuted {
#[key]
order_hash: felt252,
#[key]
@@ -88,10 +88,10 @@ pub mod OrderbookComponent {
}
// must be increased when `OrderPlaced` content change
- const ORDER_CANCELLED_EVENT_VERSION: u8 = 1;
+ pub const ORDER_CANCELLED_EVENT_VERSION: u8 = 1;
/// Event for when an order is cancelled.
#[derive(Drop, starknet::Event)]
- struct OrderCancelled {
+ pub struct OrderCancelled {
#[key]
order_hash: felt252,
#[key]
@@ -102,10 +102,10 @@ pub mod OrderbookComponent {
}
// must be increased when `RollbackStatus` content change
- const ROLLBACK_STATUS_EVENT_VERSION: u8 = 1;
+ pub const ROLLBACK_STATUS_EVENT_VERSION: u8 = 1;
/// Event for when an order has been rollbacked to placed.
#[derive(Drop, starknet::Event)]
- struct RollbackStatus {
+ pub struct RollbackStatus {
#[key]
order_hash: felt252,
#[key]
@@ -117,10 +117,10 @@ pub mod OrderbookComponent {
}
// must be increased when `OrderFulfilled` content change
- const ORDER_FULFILLED_EVENT_VERSION: u8 = 1;
+ pub const ORDER_FULFILLED_EVENT_VERSION: u8 = 1;
/// Event for when an order is fulfilled.
#[derive(Drop, starknet::Event)]
- struct OrderFulfilled {
+ pub struct OrderFulfilled {
#[key]
order_hash: felt252,
#[key]
diff --git a/contracts/ark_starknet/tests/integration/create_order.cairo b/contracts/ark_starknet/tests/integration/create_order.cairo
index 7c7626cfa..9ef5336fa 100644
--- a/contracts/ark_starknet/tests/integration/create_order.cairo
+++ b/contracts/ark_starknet/tests/integration/create_order.cairo
@@ -1,7 +1,10 @@
-use ark_common::protocol::order_types::RouteType;
-
+use ark_common::protocol::order_types::{OrderStatus, OrderTrait, OrderType, RouteType};
use ark_common::protocol::order_v1::OrderV1;
+use ark_component::orderbook::OrderbookComponent;
+use ark_component::orderbook::interface::{IOrderbookDispatcher, IOrderbookDispatcherTrait,};
+
+use ark_starknet::executor::executor;
use ark_starknet::interfaces::{
IExecutorDispatcher, IExecutorDispatcherTrait, IMaintenanceDispatcher,
@@ -13,7 +16,7 @@ use ark_tokens::erc20::IFreeMintDispatcherTrait as Erc20DispatcherTrait;
use ark_tokens::erc721::IFreeMintDispatcher as Erc721Dispatcher;
use ark_tokens::erc721::IFreeMintDispatcherTrait as Erc721DispatcherTrait;
-use snforge_std::{cheat_caller_address, CheatSpan};
+use snforge_std::{cheat_caller_address, CheatSpan, spy_events, EventSpyAssertionsTrait,};
use starknet::{ContractAddress, contract_address_const};
use super::super::common::setup::{setup, setup_order};
@@ -28,11 +31,47 @@ fn test_create_order_erc20_to_erc721_ok() {
Erc20Dispatcher { contract_address: erc20_address }.mint(offerer, start_amount);
let mut order = setup_order(erc20_address, nft_address);
+
order.offerer = offerer;
order.start_amount = start_amount;
+ let order_hash = order.compute_order_hash();
+ let order_version = order.get_version();
+ let mut spy = spy_events();
cheat_caller_address(executor_address, offerer, CheatSpan::TargetCalls(1));
IExecutorDispatcher { contract_address: executor_address }.create_order(order);
+
+ spy
+ .assert_emitted(
+ @array![
+ (
+ executor_address,
+ executor::Event::OrderbookEvent(
+ OrderbookComponent::Event::OrderPlaced(
+ OrderbookComponent::OrderPlaced {
+ order_hash,
+ order_version,
+ order_type: OrderType::Offer,
+ version: OrderbookComponent::ORDER_PLACED_EVENT_VERSION,
+ cancelled_order_hash: Option::None,
+ order,
+ }
+ )
+ )
+ )
+ ]
+ );
+
+ assert_eq!(
+ IOrderbookDispatcher { contract_address: executor_address }.get_order_type(order_hash),
+ OrderType::Offer,
+ "Wrong order type"
+ );
+ assert_eq!(
+ IOrderbookDispatcher { contract_address: executor_address }.get_order_status(order_hash),
+ OrderStatus::Open,
+ "Wrong order status"
+ );
}
#[test]
@@ -49,9 +88,44 @@ fn test_create_order_erc721_to_erc20_ok() {
order.route = RouteType::Erc721ToErc20.into();
order.offerer = offerer;
order.token_id = Option::Some(token_id);
+ let order_hash = order.compute_order_hash();
+ let order_version = order.get_version();
+ let mut spy = spy_events();
cheat_caller_address(executor_address, offerer, CheatSpan::TargetCalls(1));
IExecutorDispatcher { contract_address: executor_address }.create_order(order);
+
+ spy
+ .assert_emitted(
+ @array![
+ (
+ executor_address,
+ executor::Event::OrderbookEvent(
+ OrderbookComponent::Event::OrderPlaced(
+ OrderbookComponent::OrderPlaced {
+ order_hash,
+ order_version,
+ order_type: OrderType::Listing,
+ version: OrderbookComponent::ORDER_PLACED_EVENT_VERSION,
+ cancelled_order_hash: Option::None,
+ order,
+ }
+ )
+ )
+ )
+ ]
+ );
+
+ assert_eq!(
+ IOrderbookDispatcher { contract_address: executor_address }.get_order_type(order_hash),
+ OrderType::Listing,
+ "Wrong order type"
+ );
+ assert_eq!(
+ IOrderbookDispatcher { contract_address: executor_address }.get_order_status(order_hash),
+ OrderStatus::Open,
+ "Wrong order status"
+ );
}
From fa46d5a619c0d08dce94c00ff00c48d1eb821729 Mon Sep 17 00:00:00 2001
From: Patrice Tisserand
Date: Tue, 10 Sep 2024 18:38:07 +0200
Subject: [PATCH 03/33] contracts: don't emit anymore `OrderExecuted` directly
from starknet contract
---
contracts/ark_starknet/src/executor.cairo | 7 -------
1 file changed, 7 deletions(-)
diff --git a/contracts/ark_starknet/src/executor.cairo b/contracts/ark_starknet/src/executor.cairo
index 9c06fec98..0dbb41f61 100644
--- a/contracts/ark_starknet/src/executor.cairo
+++ b/contracts/ark_starknet/src/executor.cairo
@@ -681,13 +681,6 @@ mod executor {
let transaction_hash = tx_info.transaction_hash;
let block_timestamp = starknet::info::get_block_timestamp();
- self
- .emit(
- OrderExecuted {
- order_hash: execution_info.order_hash, transaction_hash, block_timestamp,
- }
- );
-
let vinfo = ExecutionValidationInfo {
order_hash: execution_info.order_hash,
transaction_hash,
From 0ec898c4e48e322766190dd4afd249d5cf14b904 Mon Sep 17 00:00:00 2001
From: Patrice Tisserand
Date: Wed, 11 Sep 2024 11:26:35 +0200
Subject: [PATCH 04/33] conntracts: remove OrderExecuted event in executor and
use #[flat] for OrderBookComponent events
---
contracts/ark_starknet/src/executor.cairo | 12 +-----------
1 file changed, 1 insertion(+), 11 deletions(-)
diff --git a/contracts/ark_starknet/src/executor.cairo b/contracts/ark_starknet/src/executor.cairo
index 0dbb41f61..a40072e97 100644
--- a/contracts/ark_starknet/src/executor.cairo
+++ b/contracts/ark_starknet/src/executor.cairo
@@ -116,22 +116,12 @@ mod executor {
#[event]
#[derive(Drop, starknet::Event)]
enum Event {
- OrderExecuted: OrderExecuted,
CollectionFallbackFees: CollectionFallbackFees,
ExecutorInMaintenance: ExecutorInMaintenance,
- // #[flat] // OrderExecuted conflict
+ #[flat]
OrderbookEvent: OrderbookComponent::Event,
}
- #[derive(Drop, starknet::Event)]
- struct OrderExecuted {
- #[key]
- order_hash: felt252,
- #[key]
- transaction_hash: felt252,
- block_timestamp: u64
- }
-
#[derive(Drop, starknet::Event)]
struct CollectionFallbackFees {
#[key]
From 86bbf23e1f4c9cb4c91fc47f73e7e7f6140d9cf3 Mon Sep 17 00:00:00 2001
From: Patrice Tisserand
Date: Wed, 11 Sep 2024 15:23:31 +0200
Subject: [PATCH 05/33] contracts: add test cases for create auction &
collection offer orders
---
.../ark_starknet/tests/common/setup.cairo | 107 +++++++++++-
.../tests/integration/create_order.cairo | 164 ++++++++++++++----
.../tests/integration/fulfill_order.cairo | 40 ++---
3 files changed, 247 insertions(+), 64 deletions(-)
diff --git a/contracts/ark_starknet/tests/common/setup.cairo b/contracts/ark_starknet/tests/common/setup.cairo
index 93772a860..2227a786b 100644
--- a/contracts/ark_starknet/tests/common/setup.cairo
+++ b/contracts/ark_starknet/tests/common/setup.cairo
@@ -68,7 +68,112 @@ fn setup_royalty() -> (ContractAddress, ContractAddress, ContractAddress) {
(executor_address, erc20_address, nft_address)
}
-fn setup_order(erc20_address: ContractAddress, nft_address: ContractAddress) -> OrderV1 {
+fn setup_order(
+ currency_address: ContractAddress,
+ nft_address: ContractAddress,
+ route: RouteType,
+ offerer: ContractAddress,
+ token_id: Option,
+ start_amount: u256,
+ end_amount: u256,
+) -> OrderV1 {
+ let chain_id = 'SN_MAIN';
+ let block_timestamp = starknet::get_block_timestamp();
+ let end_date = block_timestamp + (30 * 24 * 60 * 60);
+ let data = array![];
+
+ OrderV1 {
+ route,
+ currency_address,
+ currency_chain_id: chain_id,
+ salt: 1,
+ offerer,
+ token_chain_id: chain_id,
+ token_address: nft_address,
+ token_id,
+ quantity: 1,
+ start_amount,
+ end_amount,
+ start_date: block_timestamp,
+ end_date: end_date,
+ broker_id: contract_address_const::<'broker_id'>(),
+ additional_data: data.span()
+ }
+}
+
+fn setup_offer_order(
+ currency_address: ContractAddress,
+ nft_address: ContractAddress,
+ offerer: ContractAddress,
+ token_id: u256,
+ start_amount: u256,
+) -> OrderV1 {
+ setup_order(
+ currency_address,
+ nft_address,
+ RouteType::Erc20ToErc721,
+ offerer,
+ Option::Some(token_id),
+ start_amount,
+ 0
+ )
+}
+
+fn setup_listing_order(
+ currency_address: ContractAddress,
+ nft_address: ContractAddress,
+ offerer: ContractAddress,
+ token_id: u256,
+ start_amount: u256,
+) -> OrderV1 {
+ setup_order(
+ currency_address,
+ nft_address,
+ RouteType::Erc721ToErc20,
+ offerer,
+ Option::Some(token_id),
+ start_amount,
+ 0
+ )
+}
+
+fn setup_auction_order(
+ currency_address: ContractAddress,
+ nft_address: ContractAddress,
+ offerer: ContractAddress,
+ token_id: u256,
+ start_amount: u256,
+ end_amount: u256,
+) -> OrderV1 {
+ setup_order(
+ currency_address,
+ nft_address,
+ RouteType::Erc721ToErc20,
+ offerer,
+ Option::Some(token_id),
+ start_amount,
+ end_amount
+ )
+}
+
+fn setup_collection_offer_order(
+ currency_address: ContractAddress,
+ nft_address: ContractAddress,
+ offerer: ContractAddress,
+ start_amount: u256,
+) -> OrderV1 {
+ setup_order(
+ currency_address,
+ nft_address,
+ RouteType::Erc20ToErc721,
+ offerer,
+ Option::None,
+ start_amount,
+ 0
+ )
+}
+
+fn setup_default_order(erc20_address: ContractAddress, nft_address: ContractAddress) -> OrderV1 {
let chain_id = 'SN_MAIN';
let block_timestamp = starknet::get_block_timestamp();
let end_date = block_timestamp + (30 * 24 * 60 * 60);
diff --git a/contracts/ark_starknet/tests/integration/create_order.cairo b/contracts/ark_starknet/tests/integration/create_order.cairo
index 9ef5336fa..75c408ae0 100644
--- a/contracts/ark_starknet/tests/integration/create_order.cairo
+++ b/contracts/ark_starknet/tests/integration/create_order.cairo
@@ -19,21 +19,20 @@ use ark_tokens::erc721::IFreeMintDispatcherTrait as Erc721DispatcherTrait;
use snforge_std::{cheat_caller_address, CheatSpan, spy_events, EventSpyAssertionsTrait,};
use starknet::{ContractAddress, contract_address_const};
-use super::super::common::setup::{setup, setup_order};
+use super::super::common::setup::{
+ setup, setup_auction_order, setup_collection_offer_order, setup_listing_order, setup_offer_order
+};
#[test]
-fn test_create_order_erc20_to_erc721_ok() {
+fn test_create_offer_order_ok() {
let (executor_address, erc20_address, nft_address) = setup();
let offerer = contract_address_const::<'offerer'>();
let start_amount = 10_000_000;
-
+ let token_id = 10_u256;
Erc20Dispatcher { contract_address: erc20_address }.mint(offerer, start_amount);
- let mut order = setup_order(erc20_address, nft_address);
-
- order.offerer = offerer;
- order.start_amount = start_amount;
+ let order = setup_offer_order(erc20_address, nft_address, offerer, token_id, start_amount);
let order_hash = order.compute_order_hash();
let order_version = order.get_version();
@@ -75,19 +74,16 @@ fn test_create_order_erc20_to_erc721_ok() {
}
#[test]
-fn test_create_order_erc721_to_erc20_ok() {
+fn test_create_listing_order_ok() {
let (executor_address, erc20_address, nft_address) = setup();
let offerer = contract_address_const::<'offerer'>();
-
+ let start_amount = 10_000_000;
let token_id: u256 = Erc721Dispatcher { contract_address: nft_address }
.get_current_token_id()
.into();
Erc721Dispatcher { contract_address: nft_address }.mint(offerer, 'base_uri');
- let mut order = setup_order(erc20_address, nft_address);
- order.route = RouteType::Erc721ToErc20.into();
- order.offerer = offerer;
- order.token_id = Option::Some(token_id);
+ let order = setup_listing_order(erc20_address, nft_address, offerer, token_id, start_amount);
let order_hash = order.compute_order_hash();
let order_version = order.get_version();
@@ -128,16 +124,121 @@ fn test_create_order_erc721_to_erc20_ok() {
);
}
+#[test]
+fn test_create_auction_order_ok() {
+ let (executor_address, erc20_address, nft_address) = setup();
+ let offerer = contract_address_const::<'offerer'>();
+ let start_amount = 10_000_000;
+ let end_amount = start_amount * 2;
+ let token_id: u256 = Erc721Dispatcher { contract_address: nft_address }
+ .get_current_token_id()
+ .into();
+ Erc721Dispatcher { contract_address: nft_address }.mint(offerer, 'base_uri');
+
+ let order = setup_auction_order(
+ erc20_address, nft_address, offerer, token_id, start_amount, end_amount
+ );
+ let order_hash = order.compute_order_hash();
+ let order_version = order.get_version();
+
+ let mut spy = spy_events();
+ cheat_caller_address(executor_address, offerer, CheatSpan::TargetCalls(1));
+ IExecutorDispatcher { contract_address: executor_address }.create_order(order);
+
+ spy
+ .assert_emitted(
+ @array![
+ (
+ executor_address,
+ executor::Event::OrderbookEvent(
+ OrderbookComponent::Event::OrderPlaced(
+ OrderbookComponent::OrderPlaced {
+ order_hash,
+ order_version,
+ order_type: OrderType::Auction,
+ version: OrderbookComponent::ORDER_PLACED_EVENT_VERSION,
+ cancelled_order_hash: Option::None,
+ order,
+ }
+ )
+ )
+ )
+ ]
+ );
+
+ assert_eq!(
+ IOrderbookDispatcher { contract_address: executor_address }.get_order_type(order_hash),
+ OrderType::Auction,
+ "Wrong order type"
+ );
+ assert_eq!(
+ IOrderbookDispatcher { contract_address: executor_address }.get_order_status(order_hash),
+ OrderStatus::Open,
+ "Wrong order status"
+ );
+}
+
+#[test]
+fn test_create_collection_offer_order_ok() {
+ let (executor_address, erc20_address, nft_address) = setup();
+ let offerer = contract_address_const::<'offerer'>();
+ let start_amount = 10_000_000;
+ let token_id = 10_u256;
+ Erc20Dispatcher { contract_address: erc20_address }.mint(offerer, start_amount);
+
+ let order = setup_collection_offer_order(erc20_address, nft_address, offerer, start_amount);
+ let order_hash = order.compute_order_hash();
+ let order_version = order.get_version();
+
+ let mut spy = spy_events();
+ cheat_caller_address(executor_address, offerer, CheatSpan::TargetCalls(1));
+ IExecutorDispatcher { contract_address: executor_address }.create_order(order);
+
+ spy
+ .assert_emitted(
+ @array![
+ (
+ executor_address,
+ executor::Event::OrderbookEvent(
+ OrderbookComponent::Event::OrderPlaced(
+ OrderbookComponent::OrderPlaced {
+ order_hash,
+ order_version,
+ order_type: OrderType::CollectionOffer,
+ version: OrderbookComponent::ORDER_PLACED_EVENT_VERSION,
+ cancelled_order_hash: Option::None,
+ order,
+ }
+ )
+ )
+ )
+ ]
+ );
+
+ assert_eq!(
+ IOrderbookDispatcher { contract_address: executor_address }.get_order_type(order_hash),
+ OrderType::CollectionOffer,
+ "Wrong order type"
+ );
+ assert_eq!(
+ IOrderbookDispatcher { contract_address: executor_address }.get_order_status(order_hash),
+ OrderStatus::Open,
+ "Wrong order status"
+ );
+}
#[test]
#[should_panic(expected: "Caller is not the offerer")]
-fn test_create_order_offerer_shall_be_caller() {
+fn test_create_offer_order_offerer_shall_be_caller() {
let (executor_address, erc20_address, nft_address) = setup();
let offerer = contract_address_const::<'offerer'>();
let caller = contract_address_const::<'caller'>();
+ let start_amount = 10_000_000;
+ let token_id = 10_u256;
+
+ Erc20Dispatcher { contract_address: erc20_address }.mint(offerer, start_amount);
- let mut order = setup_order(erc20_address, nft_address);
- order.offerer = offerer;
+ let order = setup_offer_order(erc20_address, nft_address, offerer, token_id, start_amount);
cheat_caller_address(executor_address, caller, CheatSpan::TargetCalls(1));
IExecutorDispatcher { contract_address: executor_address }.create_order(order);
@@ -145,17 +246,16 @@ fn test_create_order_offerer_shall_be_caller() {
#[test]
#[should_panic(expected: "Offerer does not own enough ERC20 tokens")]
-fn test_create_order_offerer_not_enough_erc20_tokens() {
+fn test_create_offer_order_offerer_not_enough_erc20_tokens() {
let (executor_address, erc20_address, nft_address) = setup();
let offerer = contract_address_const::<'offerer'>();
let start_amount = 10_000_000;
let minted = 10_000;
+ let token_id = 10_u256;
Erc20Dispatcher { contract_address: erc20_address }.mint(offerer, minted);
- let mut order = setup_order(erc20_address, nft_address);
- order.offerer = offerer;
- order.start_amount = start_amount;
+ let order = setup_offer_order(erc20_address, nft_address, offerer, token_id, start_amount);
cheat_caller_address(executor_address, offerer, CheatSpan::TargetCalls(1));
IExecutorDispatcher { contract_address: executor_address }.create_order(order);
@@ -163,20 +263,18 @@ fn test_create_order_offerer_not_enough_erc20_tokens() {
#[test]
#[should_panic(expected: "Offerer does not own the specified ERC721 token")]
-fn test_create_order_offerer_not_own_ec721_token() {
+fn test_create_listing_order_offerer_not_own_ec721_token() {
let (executor_address, erc20_address, nft_address) = setup();
let offerer = contract_address_const::<'offerer'>();
let other = contract_address_const::<'other'>();
+ let start_amount = 10_000_000;
let token_id: u256 = Erc721Dispatcher { contract_address: nft_address }
.get_current_token_id()
.into();
Erc721Dispatcher { contract_address: nft_address }.mint(other, 'base_uri');
- let mut order = setup_order(erc20_address, nft_address);
- order.route = RouteType::Erc721ToErc20.into();
- order.offerer = offerer;
- order.token_id = Option::Some(token_id);
+ let order = setup_listing_order(erc20_address, nft_address, offerer, token_id, start_amount);
cheat_caller_address(executor_address, offerer, CheatSpan::TargetCalls(1));
IExecutorDispatcher { contract_address: executor_address }.create_order(order);
@@ -184,17 +282,16 @@ fn test_create_order_offerer_not_own_ec721_token() {
#[test]
#[should_panic(expected: 'Executor not enabled')]
-fn test_create_order_erc20_to_erc721_disabled() {
+fn test_create_offer_order_disabled() {
let (executor_address, erc20_address, nft_address) = setup();
let admin = contract_address_const::<'admin'>();
let offerer = contract_address_const::<'offerer'>();
let start_amount = 10_000_000;
+ let token_id = 10_u256;
Erc20Dispatcher { contract_address: erc20_address }.mint(offerer, start_amount);
- let mut order = setup_order(erc20_address, nft_address);
- order.offerer = offerer;
- order.start_amount = start_amount;
+ let order = setup_offer_order(erc20_address, nft_address, offerer, token_id, start_amount);
cheat_caller_address(executor_address, admin, CheatSpan::TargetCalls(1));
IMaintenanceDispatcher { contract_address: executor_address }.set_maintenance_mode(true);
@@ -205,20 +302,17 @@ fn test_create_order_erc20_to_erc721_disabled() {
#[test]
#[should_panic(expected: 'Executor not enabled')]
-fn test_create_order_erc721_to_erc20_disabled() {
+fn test_create_listing_order_disabled() {
let (executor_address, erc20_address, nft_address) = setup();
let admin = contract_address_const::<'admin'>();
let offerer = contract_address_const::<'offerer'>();
-
+ let start_amount = 10_000_000;
let token_id: u256 = Erc721Dispatcher { contract_address: nft_address }
.get_current_token_id()
.into();
Erc721Dispatcher { contract_address: nft_address }.mint(offerer, 'base_uri');
- let mut order = setup_order(erc20_address, nft_address);
- order.route = RouteType::Erc721ToErc20.into();
- order.offerer = offerer;
- order.token_id = Option::Some(token_id);
+ let order = setup_listing_order(erc20_address, nft_address, offerer, token_id, start_amount);
cheat_caller_address(executor_address, admin, CheatSpan::TargetCalls(1));
IMaintenanceDispatcher { contract_address: executor_address }.set_maintenance_mode(true);
diff --git a/contracts/ark_starknet/tests/integration/fulfill_order.cairo b/contracts/ark_starknet/tests/integration/fulfill_order.cairo
index 72ec091d8..43b29a5c9 100644
--- a/contracts/ark_starknet/tests/integration/fulfill_order.cairo
+++ b/contracts/ark_starknet/tests/integration/fulfill_order.cairo
@@ -17,7 +17,10 @@ use openzeppelin::token::erc721::interface::{IERC721Dispatcher, IERC721Dispatche
use snforge_std::{cheat_caller_address, CheatSpan};
use starknet::{ContractAddress, contract_address_const};
-use super::super::common::setup::{setup, setup_order};
+use super::super::common::setup::{
+ setup, setup_default_order, setup_auction_order, setup_collection_offer_order,
+ setup_listing_order, setup_offer_order
+};
fn create_offer_order(
executor_address: ContractAddress,
@@ -30,10 +33,7 @@ fn create_offer_order(
IFreeMintDispatcher { contract_address: erc20_address }.mint(offerer, start_amount);
- let mut order = setup_order(erc20_address, nft_address);
- order.offerer = offerer;
- order.start_amount = start_amount;
- order.token_id = Option::Some(token_id);
+ let order = setup_offer_order(erc20_address, nft_address, offerer, token_id, start_amount);
cheat_caller_address(executor_address, offerer, CheatSpan::TargetCalls(1));
IExecutorDispatcher { contract_address: executor_address }.create_order(order);
@@ -49,10 +49,7 @@ fn create_collection_offer_order(
IFreeMintDispatcher { contract_address: erc20_address }.mint(offerer, start_amount);
- let mut order = setup_order(erc20_address, nft_address);
- order.offerer = offerer;
- order.start_amount = start_amount;
- order.token_id = Option::None;
+ let order = setup_collection_offer_order(erc20_address, nft_address, offerer, start_amount);
cheat_caller_address(executor_address, offerer, CheatSpan::TargetCalls(1));
IExecutorDispatcher { contract_address: executor_address }.create_order(order);
@@ -73,11 +70,7 @@ fn create_listing_order(
.into();
Erc721Dispatcher { contract_address: nft_address }.mint(offerer, 'base_uri');
- let mut order = setup_order(erc20_address, nft_address);
- order.route = RouteType::Erc721ToErc20.into();
- order.offerer = offerer;
- order.token_id = Option::Some(token_id);
- order.start_amount = start_amount;
+ let order = setup_listing_order(erc20_address, nft_address, offerer, token_id, start_amount);
cheat_caller_address(executor_address, offerer, CheatSpan::TargetCalls(1));
IExecutorDispatcher { contract_address: executor_address }.create_order(order);
@@ -99,12 +92,9 @@ fn create_auction_order(
.into();
Erc721Dispatcher { contract_address: nft_address }.mint(offerer, 'base_uri');
- let mut order = setup_order(erc20_address, nft_address);
- order.route = RouteType::Erc721ToErc20.into();
- order.offerer = offerer;
- order.token_id = Option::Some(token_id);
- order.start_amount = start_amount;
- order.end_amount = end_amount;
+ let order = setup_auction_order(
+ erc20_address, nft_address, offerer, token_id, start_amount, end_amount
+ );
cheat_caller_address(executor_address, offerer, CheatSpan::TargetCalls(1));
IExecutorDispatcher { contract_address: executor_address }.create_order(order);
@@ -410,10 +400,7 @@ fn test_fulfill_auction_order_ok() {
IFreeMintDispatcher { contract_address: erc20_address }.mint(buyer, start_amount);
- let mut buyer_order = setup_order(erc20_address, nft_address);
- buyer_order.offerer = buyer;
- buyer_order.start_amount = start_amount;
- buyer_order.token_id = Option::Some(token_id);
+ let buyer_order = setup_offer_order(erc20_address, nft_address, buyer, token_id, start_amount);
cheat_caller_address(executor_address, buyer, CheatSpan::TargetCalls(1));
IExecutorDispatcher { contract_address: executor_address }.create_order(buyer_order);
@@ -446,10 +433,7 @@ fn test_fulfill_auction_order_fulfiller_same_as_offerer() {
IFreeMintDispatcher { contract_address: erc20_address }.mint(buyer, start_amount);
- let mut buyer_order = setup_order(erc20_address, nft_address);
- buyer_order.offerer = buyer;
- buyer_order.start_amount = start_amount;
- buyer_order.token_id = Option::Some(token_id);
+ let buyer_order = setup_offer_order(erc20_address, nft_address, buyer, token_id, start_amount);
cheat_caller_address(executor_address, buyer, CheatSpan::TargetCalls(1));
IExecutorDispatcher { contract_address: executor_address }.create_order(buyer_order);
From fc8798d7724bd36a164338125cec1b1576c6464f Mon Sep 17 00:00:00 2001
From: Patrice Tisserand
Date: Wed, 11 Sep 2024 15:42:41 +0200
Subject: [PATCH 06/33] contracts: move create_* to setup.cairo
---
.../ark_starknet/tests/common/setup.cairo | 94 ++++++++++++++++++-
.../tests/integration/fulfill_order.cairo | 80 +---------------
2 files changed, 92 insertions(+), 82 deletions(-)
diff --git a/contracts/ark_starknet/tests/common/setup.cairo b/contracts/ark_starknet/tests/common/setup.cairo
index 2227a786b..bab0b3281 100644
--- a/contracts/ark_starknet/tests/common/setup.cairo
+++ b/contracts/ark_starknet/tests/common/setup.cairo
@@ -1,8 +1,16 @@
-use ark_common::protocol::order_types::RouteType;
-
+use ark_common::protocol::order_types::{OrderTrait, RouteType};
use ark_common::protocol::order_v1::OrderV1;
+
+use ark_starknet::interfaces::{IExecutorDispatcher, IExecutorDispatcherTrait,};
+
+use ark_tokens::erc20::{IFreeMintDispatcher, IFreeMintDispatcherTrait};
+use ark_tokens::erc721::IFreeMintDispatcher as Erc721Dispatcher;
+use ark_tokens::erc721::IFreeMintDispatcherTrait as Erc721DispatcherTrait;
+
use serde::Serde;
-use snforge_std::{ContractClass, ContractClassTrait, declare, DeclareResultTrait};
+use snforge_std::{
+ cheat_caller_address, CheatSpan, ContractClass, ContractClassTrait, declare, DeclareResultTrait
+};
use starknet::{ContractAddress, contract_address_const};
@@ -197,3 +205,83 @@ fn setup_default_order(erc20_address: ContractAddress, nft_address: ContractAddr
additional_data: data.span()
}
}
+
+fn create_offer_order(
+ executor_address: ContractAddress,
+ erc20_address: ContractAddress,
+ nft_address: ContractAddress,
+ token_id: u256
+) -> (felt252, ContractAddress, u256) {
+ let offerer = contract_address_const::<'offerer'>();
+ let start_amount = 10_000_000;
+
+ IFreeMintDispatcher { contract_address: erc20_address }.mint(offerer, start_amount);
+
+ let order = setup_offer_order(erc20_address, nft_address, offerer, token_id, start_amount);
+
+ cheat_caller_address(executor_address, offerer, CheatSpan::TargetCalls(1));
+ IExecutorDispatcher { contract_address: executor_address }.create_order(order);
+
+ (order.compute_order_hash(), offerer, start_amount)
+}
+
+fn create_listing_order(
+ executor_address: ContractAddress,
+ erc20_address: ContractAddress,
+ nft_address: ContractAddress,
+ start_amount: u256
+) -> (felt252, ContractAddress, u256) {
+ let offerer = contract_address_const::<'offerer'>();
+
+ let token_id: u256 = Erc721Dispatcher { contract_address: nft_address }
+ .get_current_token_id()
+ .into();
+ Erc721Dispatcher { contract_address: nft_address }.mint(offerer, 'base_uri');
+
+ let order = setup_listing_order(erc20_address, nft_address, offerer, token_id, start_amount);
+
+ cheat_caller_address(executor_address, offerer, CheatSpan::TargetCalls(1));
+ IExecutorDispatcher { contract_address: executor_address }.create_order(order);
+
+ (order.compute_order_hash(), offerer, token_id)
+}
+
+fn create_auction_order(
+ executor_address: ContractAddress,
+ erc20_address: ContractAddress,
+ nft_address: ContractAddress,
+ start_amount: u256,
+ end_amount: u256
+) -> (felt252, ContractAddress, u256) {
+ let offerer = contract_address_const::<'offerer'>();
+
+ let token_id: u256 = Erc721Dispatcher { contract_address: nft_address }
+ .get_current_token_id()
+ .into();
+ Erc721Dispatcher { contract_address: nft_address }.mint(offerer, 'base_uri');
+
+ let order = setup_auction_order(
+ erc20_address, nft_address, offerer, token_id, start_amount, end_amount
+ );
+
+ cheat_caller_address(executor_address, offerer, CheatSpan::TargetCalls(1));
+ IExecutorDispatcher { contract_address: executor_address }.create_order(order);
+
+ (order.compute_order_hash(), offerer, token_id)
+}
+
+fn create_collection_offer_order(
+ executor_address: ContractAddress, erc20_address: ContractAddress, nft_address: ContractAddress,
+) -> (felt252, ContractAddress, u256) {
+ let offerer = contract_address_const::<'offerer'>();
+ let start_amount = 10_000_000;
+
+ IFreeMintDispatcher { contract_address: erc20_address }.mint(offerer, start_amount);
+
+ let order = setup_collection_offer_order(erc20_address, nft_address, offerer, start_amount);
+
+ cheat_caller_address(executor_address, offerer, CheatSpan::TargetCalls(1));
+ IExecutorDispatcher { contract_address: executor_address }.create_order(order);
+
+ (order.compute_order_hash(), offerer, start_amount)
+}
diff --git a/contracts/ark_starknet/tests/integration/fulfill_order.cairo b/contracts/ark_starknet/tests/integration/fulfill_order.cairo
index 43b29a5c9..86baa1b31 100644
--- a/contracts/ark_starknet/tests/integration/fulfill_order.cairo
+++ b/contracts/ark_starknet/tests/integration/fulfill_order.cairo
@@ -18,89 +18,11 @@ use snforge_std::{cheat_caller_address, CheatSpan};
use starknet::{ContractAddress, contract_address_const};
use super::super::common::setup::{
+ create_auction_order, create_collection_offer_order, create_listing_order, create_offer_order,
setup, setup_default_order, setup_auction_order, setup_collection_offer_order,
setup_listing_order, setup_offer_order
};
-fn create_offer_order(
- executor_address: ContractAddress,
- erc20_address: ContractAddress,
- nft_address: ContractAddress,
- token_id: u256
-) -> (felt252, ContractAddress, u256) {
- let offerer = contract_address_const::<'offerer'>();
- let start_amount = 10_000_000;
-
- IFreeMintDispatcher { contract_address: erc20_address }.mint(offerer, start_amount);
-
- let order = setup_offer_order(erc20_address, nft_address, offerer, token_id, start_amount);
-
- cheat_caller_address(executor_address, offerer, CheatSpan::TargetCalls(1));
- IExecutorDispatcher { contract_address: executor_address }.create_order(order);
-
- (order.compute_order_hash(), offerer, start_amount)
-}
-
-fn create_collection_offer_order(
- executor_address: ContractAddress, erc20_address: ContractAddress, nft_address: ContractAddress,
-) -> (felt252, ContractAddress, u256) {
- let offerer = contract_address_const::<'offerer'>();
- let start_amount = 10_000_000;
-
- IFreeMintDispatcher { contract_address: erc20_address }.mint(offerer, start_amount);
-
- let order = setup_collection_offer_order(erc20_address, nft_address, offerer, start_amount);
-
- cheat_caller_address(executor_address, offerer, CheatSpan::TargetCalls(1));
- IExecutorDispatcher { contract_address: executor_address }.create_order(order);
-
- (order.compute_order_hash(), offerer, start_amount)
-}
-
-fn create_listing_order(
- executor_address: ContractAddress,
- erc20_address: ContractAddress,
- nft_address: ContractAddress,
- start_amount: u256
-) -> (felt252, ContractAddress, u256) {
- let offerer = contract_address_const::<'offerer'>();
-
- let token_id: u256 = Erc721Dispatcher { contract_address: nft_address }
- .get_current_token_id()
- .into();
- Erc721Dispatcher { contract_address: nft_address }.mint(offerer, 'base_uri');
-
- let order = setup_listing_order(erc20_address, nft_address, offerer, token_id, start_amount);
-
- cheat_caller_address(executor_address, offerer, CheatSpan::TargetCalls(1));
- IExecutorDispatcher { contract_address: executor_address }.create_order(order);
-
- (order.compute_order_hash(), offerer, token_id)
-}
-
-fn create_auction_order(
- executor_address: ContractAddress,
- erc20_address: ContractAddress,
- nft_address: ContractAddress,
- start_amount: u256,
- end_amount: u256
-) -> (felt252, ContractAddress, u256) {
- let offerer = contract_address_const::<'offerer'>();
-
- let token_id: u256 = Erc721Dispatcher { contract_address: nft_address }
- .get_current_token_id()
- .into();
- Erc721Dispatcher { contract_address: nft_address }.mint(offerer, 'base_uri');
-
- let order = setup_auction_order(
- erc20_address, nft_address, offerer, token_id, start_amount, end_amount
- );
-
- cheat_caller_address(executor_address, offerer, CheatSpan::TargetCalls(1));
- IExecutorDispatcher { contract_address: executor_address }.create_order(order);
-
- (order.compute_order_hash(), offerer, token_id)
-}
fn create_fulfill_info(
order_hash: felt252, fulfiller: ContractAddress, token_address: ContractAddress, token_id: u256
From 424736bc2713b7a681e18ce24a7b496974ac530a Mon Sep 17 00:00:00 2001
From: Patrice Tisserand
Date: Wed, 11 Sep 2024 16:09:06 +0200
Subject: [PATCH 07/33] contracts: WIP cancel_order tests
---
.../tests/integration/cancel_order.cairo | 68 +++++++++++++++++++
contracts/ark_starknet/tests/lib.cairo | 1 +
2 files changed, 69 insertions(+)
create mode 100644 contracts/ark_starknet/tests/integration/cancel_order.cairo
diff --git a/contracts/ark_starknet/tests/integration/cancel_order.cairo b/contracts/ark_starknet/tests/integration/cancel_order.cairo
new file mode 100644
index 000000000..fa889f512
--- /dev/null
+++ b/contracts/ark_starknet/tests/integration/cancel_order.cairo
@@ -0,0 +1,68 @@
+use ark_common::protocol::order_types::CancelInfo;
+
+use ark_starknet::interfaces::{
+ IExecutorDispatcher, IExecutorDispatcherTrait, IMaintenanceDispatcher,
+ IMaintenanceDispatcherTrait
+};
+
+use snforge_std::{cheat_caller_address, CheatSpan, spy_events, EventSpyAssertionsTrait,};
+
+use starknet::{ContractAddress, contract_address_const};
+use super::super::common::setup::{
+ create_auction_order, create_collection_offer_order, create_listing_order, create_offer_order,
+ setup, setup_default_order, setup_auction_order, setup_collection_offer_order,
+ setup_listing_order, setup_offer_order
+};
+
+#[test]
+fn test_cancel_offer_order() {
+ let (executor_address, erc20_address, nft_address) = setup();
+ let token_id = 10;
+
+ let (order_hash, offerer, start_amount) = create_offer_order(
+ executor_address, erc20_address, nft_address, token_id
+ );
+
+ let cancel_info = CancelInfo {
+ order_hash,
+ canceller: offerer,
+ token_chain_id: 'SN_MAIN',
+ token_address: nft_address,
+ token_id: Option::Some(token_id),
+ };
+
+ cheat_caller_address(executor_address, offerer, CheatSpan::TargetCalls(1));
+ IExecutorDispatcher { contract_address: executor_address }.cancel_order(cancel_info);
+}
+
+// #[test]
+// fn test_cancel_listing_order() {}
+//
+// #[test]
+// fn test_cancel_auction_order() {}
+//
+// #[test]
+// fn test_cancel_collection_offer_order() {}
+
+#[test]
+#[should_panic]
+fn test_cancel_offer_order_only_offerer() {
+ let (executor_address, erc20_address, nft_address) = setup();
+ let token_id = 10;
+ let other = contract_address_const::<'other'>();
+
+ let (order_hash, offerer, start_amount) = create_offer_order(
+ executor_address, erc20_address, nft_address, token_id
+ );
+
+ let cancel_info = CancelInfo {
+ order_hash,
+ canceller: offerer,
+ token_chain_id: 'SN_MAIN',
+ token_address: nft_address,
+ token_id: Option::Some(token_id),
+ };
+
+ cheat_caller_address(executor_address, other, CheatSpan::TargetCalls(1));
+ IExecutorDispatcher { contract_address: executor_address }.cancel_order(cancel_info);
+}
diff --git a/contracts/ark_starknet/tests/lib.cairo b/contracts/ark_starknet/tests/lib.cairo
index 604ac5ca7..c575397ce 100644
--- a/contracts/ark_starknet/tests/lib.cairo
+++ b/contracts/ark_starknet/tests/lib.cairo
@@ -6,6 +6,7 @@ mod unit {
mod test_fees;
}
mod integration {
+ mod cancel_order;
mod create_order;
// mod execute_order;
mod fees_amount;
From 61aab3a973d66109ee4126bf686a841623f16ca0 Mon Sep 17 00:00:00 2001
From: Patrice Tisserand
Date: Thu, 12 Sep 2024 00:40:35 +0200
Subject: [PATCH 08/33] fix(contracts): ensure caller is the canceller &
canceller is the offerer
---
contracts/ark_starknet/src/executor.cairo | 17 +++++++++++++++++
1 file changed, 17 insertions(+)
diff --git a/contracts/ark_starknet/src/executor.cairo b/contracts/ark_starknet/src/executor.cairo
index a40072e97..f19719cd3 100644
--- a/contracts/ark_starknet/src/executor.cairo
+++ b/contracts/ark_starknet/src/executor.cairo
@@ -285,6 +285,10 @@ mod executor {
fn cancel_order(ref self: ContractState, cancelInfo: CancelInfo) {
_ensure_is_not_in_maintenance(@self);
+
+ let vinfo = CancelOrderInfo { cancelInfo: cancelInfo.clone() };
+ _verify_cancel_order(@self, @vinfo);
+
self.orderbook.cancel_order(cancelInfo);
}
@@ -368,6 +372,19 @@ mod executor {
}
}
+ fn _verify_cancel_order(self: @ContractState, vinfo: @CancelOrderInfo) {
+ let cancel_info = vinfo.cancelInfo;
+ let caller = starknet::get_caller_address();
+ let canceller = *(cancel_info.canceller);
+ assert!(caller == canceller, "Caller is not the canceller");
+
+ let order_info = self.orders.read(*cancel_info.order_hash);
+ // default value for ContractAddress is zero
+ // and an order's currency address shall not be zero
+ assert!(order_info.currency_address.is_non_zero(), "Order not found");
+ assert!(order_info.offerer == canceller, "Canceller is not the offerer");
+ }
+
fn _verify_fulfill_order(self: @ContractState, vinfo: @FulfillOrderInfo) {
let fulfill_info = vinfo.fulfillInfo;
let caller = starknet::get_caller_address();
From b5dc967484f4344e838f7a6ddb728645400fd1d4 Mon Sep 17 00:00:00 2001
From: Patrice Tisserand
Date: Thu, 12 Sep 2024 00:43:54 +0200
Subject: [PATCH 09/33] contracts: add cancel_order tests
---
.../tests/integration/cancel_order.cairo | 283 +++++++++++++++++-
1 file changed, 270 insertions(+), 13 deletions(-)
diff --git a/contracts/ark_starknet/tests/integration/cancel_order.cairo b/contracts/ark_starknet/tests/integration/cancel_order.cairo
index fa889f512..88933b5e0 100644
--- a/contracts/ark_starknet/tests/integration/cancel_order.cairo
+++ b/contracts/ark_starknet/tests/integration/cancel_order.cairo
@@ -1,4 +1,9 @@
-use ark_common::protocol::order_types::CancelInfo;
+use ark_common::protocol::order_types::{CancelInfo, OrderStatus, OrderType};
+
+use ark_component::orderbook::OrderbookComponent;
+use ark_component::orderbook::interface::{IOrderbookDispatcher, IOrderbookDispatcherTrait,};
+
+use ark_starknet::executor::executor;
use ark_starknet::interfaces::{
IExecutorDispatcher, IExecutorDispatcherTrait, IMaintenanceDispatcher,
@@ -18,8 +23,214 @@ use super::super::common::setup::{
fn test_cancel_offer_order() {
let (executor_address, erc20_address, nft_address) = setup();
let token_id = 10;
+ let (order_hash, offerer, _) = create_offer_order(
+ executor_address, erc20_address, nft_address, token_id
+ );
+
+ let cancel_info = CancelInfo {
+ order_hash,
+ canceller: offerer,
+ token_chain_id: 'SN_MAIN',
+ token_address: nft_address,
+ token_id: Option::Some(token_id),
+ };
+
+ let mut spy = spy_events();
+ cheat_caller_address(executor_address, offerer, CheatSpan::TargetCalls(1));
+ IExecutorDispatcher { contract_address: executor_address }.cancel_order(cancel_info);
+
+ spy
+ .assert_emitted(
+ @array![
+ (
+ executor_address,
+ executor::Event::OrderbookEvent(
+ OrderbookComponent::Event::OrderCancelled(
+ OrderbookComponent::OrderCancelled {
+ order_hash,
+ reason: OrderStatus::CancelledUser.into(),
+ order_type: OrderType::Offer,
+ version: OrderbookComponent::ORDER_CANCELLED_EVENT_VERSION,
+ }
+ )
+ )
+ )
+ ]
+ );
+
+ assert_eq!(
+ IOrderbookDispatcher { contract_address: executor_address }.get_order_type(order_hash),
+ OrderType::Offer,
+ "Wrong order type"
+ );
+ assert_eq!(
+ IOrderbookDispatcher { contract_address: executor_address }.get_order_status(order_hash),
+ OrderStatus::CancelledUser,
+ "Wrong order status"
+ );
+}
+
+#[test]
+fn test_cancel_listing_order() {
+ let (executor_address, erc20_address, nft_address) = setup();
+ let start_amount = 10_000_000;
+
+ let (order_hash, offerer, token_id) = create_listing_order(
+ executor_address, erc20_address, nft_address, start_amount
+ );
+
+ let cancel_info = CancelInfo {
+ order_hash,
+ canceller: offerer,
+ token_chain_id: 'SN_MAIN',
+ token_address: nft_address,
+ token_id: Option::Some(token_id),
+ };
+
+ let mut spy = spy_events();
+ cheat_caller_address(executor_address, offerer, CheatSpan::TargetCalls(1));
+ IExecutorDispatcher { contract_address: executor_address }.cancel_order(cancel_info);
+
+ spy
+ .assert_emitted(
+ @array![
+ (
+ executor_address,
+ executor::Event::OrderbookEvent(
+ OrderbookComponent::Event::OrderCancelled(
+ OrderbookComponent::OrderCancelled {
+ order_hash,
+ reason: OrderStatus::CancelledUser.into(),
+ order_type: OrderType::Listing,
+ version: OrderbookComponent::ORDER_CANCELLED_EVENT_VERSION,
+ }
+ )
+ )
+ )
+ ]
+ );
+
+ assert_eq!(
+ IOrderbookDispatcher { contract_address: executor_address }.get_order_type(order_hash),
+ OrderType::Listing,
+ "Wrong order type"
+ );
+ assert_eq!(
+ IOrderbookDispatcher { contract_address: executor_address }.get_order_status(order_hash),
+ OrderStatus::CancelledUser,
+ "Wrong order status"
+ );
+}
+
+#[test]
+fn test_cancel_auction_order() {
+ let (executor_address, erc20_address, nft_address) = setup();
+ let start_amount = 10_000_000;
+ let end_amount = 20_000_000;
+
+ let (order_hash, offerer, token_id) = create_auction_order(
+ executor_address, erc20_address, nft_address, start_amount, end_amount
+ );
+
+ let cancel_info = CancelInfo {
+ order_hash,
+ canceller: offerer,
+ token_chain_id: 'SN_MAIN',
+ token_address: nft_address,
+ token_id: Option::Some(token_id),
+ };
+
+ let mut spy = spy_events();
+ cheat_caller_address(executor_address, offerer, CheatSpan::TargetCalls(1));
+ IExecutorDispatcher { contract_address: executor_address }.cancel_order(cancel_info);
+
+ spy
+ .assert_emitted(
+ @array![
+ (
+ executor_address,
+ executor::Event::OrderbookEvent(
+ OrderbookComponent::Event::OrderCancelled(
+ OrderbookComponent::OrderCancelled {
+ order_hash,
+ reason: OrderStatus::CancelledUser.into(),
+ order_type: OrderType::Auction,
+ version: OrderbookComponent::ORDER_CANCELLED_EVENT_VERSION,
+ }
+ )
+ )
+ )
+ ]
+ );
+
+ assert_eq!(
+ IOrderbookDispatcher { contract_address: executor_address }.get_order_type(order_hash),
+ OrderType::Auction,
+ "Wrong order type"
+ );
+ assert_eq!(
+ IOrderbookDispatcher { contract_address: executor_address }.get_order_status(order_hash),
+ OrderStatus::CancelledUser,
+ "Wrong order status"
+ );
+}
+
+#[test]
+fn test_cancel_collection_offer_order() {
+ let (executor_address, erc20_address, nft_address) = setup();
+ let (order_hash, offerer, _) = create_collection_offer_order(
+ executor_address, erc20_address, nft_address
+ );
+
+ let cancel_info = CancelInfo {
+ order_hash,
+ canceller: offerer,
+ token_chain_id: 'SN_MAIN',
+ token_address: nft_address,
+ token_id: Option::None
+ };
+
+ let mut spy = spy_events();
+ cheat_caller_address(executor_address, offerer, CheatSpan::TargetCalls(1));
+ IExecutorDispatcher { contract_address: executor_address }.cancel_order(cancel_info);
+
+ spy
+ .assert_emitted(
+ @array![
+ (
+ executor_address,
+ executor::Event::OrderbookEvent(
+ OrderbookComponent::Event::OrderCancelled(
+ OrderbookComponent::OrderCancelled {
+ order_hash,
+ reason: OrderStatus::CancelledUser.into(),
+ order_type: OrderType::CollectionOffer,
+ version: OrderbookComponent::ORDER_CANCELLED_EVENT_VERSION,
+ }
+ )
+ )
+ )
+ ]
+ );
+
+ assert_eq!(
+ IOrderbookDispatcher { contract_address: executor_address }.get_order_type(order_hash),
+ OrderType::CollectionOffer,
+ "Wrong order type"
+ );
+ assert_eq!(
+ IOrderbookDispatcher { contract_address: executor_address }.get_order_status(order_hash),
+ OrderStatus::CancelledUser,
+ "Wrong order status"
+ );
+}
- let (order_hash, offerer, start_amount) = create_offer_order(
+#[test]
+// #[should_panic]
+fn test_cancel_offer_order_already_cancelled() {
+ let (executor_address, erc20_address, nft_address) = setup();
+ let token_id = 10;
+ let (order_hash, offerer, _) = create_offer_order(
executor_address, erc20_address, nft_address, token_id
);
@@ -33,25 +244,47 @@ fn test_cancel_offer_order() {
cheat_caller_address(executor_address, offerer, CheatSpan::TargetCalls(1));
IExecutorDispatcher { contract_address: executor_address }.cancel_order(cancel_info);
+
+ assert_eq!(
+ IOrderbookDispatcher { contract_address: executor_address }.get_order_status(order_hash),
+ OrderStatus::CancelledUser,
+ "Wrong order status"
+ );
+
+ cheat_caller_address(executor_address, offerer, CheatSpan::TargetCalls(1));
+ IExecutorDispatcher { contract_address: executor_address }.cancel_order(cancel_info);
+}
+
+#[test]
+#[should_panic(expected: "Order not found")]
+fn test_cancel_offer_order_bad_order_hash() {
+ let (executor_address, erc20_address, nft_address) = setup();
+ let token_id = 10;
+ let (order_hash, offerer, _) = create_offer_order(
+ executor_address, erc20_address, nft_address, token_id
+ );
+
+ let cancel_info = CancelInfo {
+ order_hash: order_hash + 1,
+ canceller: offerer,
+ token_chain_id: 'SN_MAIN',
+ token_address: nft_address,
+ token_id: Option::Some(token_id),
+ };
+
+ cheat_caller_address(executor_address, offerer, CheatSpan::TargetCalls(1));
+ IExecutorDispatcher { contract_address: executor_address }.cancel_order(cancel_info);
}
-// #[test]
-// fn test_cancel_listing_order() {}
-//
-// #[test]
-// fn test_cancel_auction_order() {}
-//
-// #[test]
-// fn test_cancel_collection_offer_order() {}
#[test]
-#[should_panic]
-fn test_cancel_offer_order_only_offerer() {
+#[should_panic(expected: "Caller is not the canceller")]
+fn test_cancel_offer_order_caller_is_not_offerer() {
let (executor_address, erc20_address, nft_address) = setup();
let token_id = 10;
let other = contract_address_const::<'other'>();
- let (order_hash, offerer, start_amount) = create_offer_order(
+ let (order_hash, offerer, _) = create_offer_order(
executor_address, erc20_address, nft_address, token_id
);
@@ -66,3 +299,27 @@ fn test_cancel_offer_order_only_offerer() {
cheat_caller_address(executor_address, other, CheatSpan::TargetCalls(1));
IExecutorDispatcher { contract_address: executor_address }.cancel_order(cancel_info);
}
+
+
+#[test]
+#[should_panic(expected: "Canceller is not the offerer")]
+fn test_cancel_offer_order_offerer_is_not_the_canceller() {
+ let (executor_address, erc20_address, nft_address) = setup();
+ let token_id = 10;
+ let other = contract_address_const::<'other'>();
+
+ let (order_hash, _offerer, _start_amount) = create_offer_order(
+ executor_address, erc20_address, nft_address, token_id
+ );
+
+ let cancel_info = CancelInfo {
+ order_hash,
+ canceller: other,
+ token_chain_id: 'SN_MAIN',
+ token_address: nft_address,
+ token_id: Option::Some(token_id),
+ };
+
+ cheat_caller_address(executor_address, other, CheatSpan::TargetCalls(1));
+ IExecutorDispatcher { contract_address: executor_address }.cancel_order(cancel_info);
+}
From 6e5a00850a50f6899cc754d3c2885a028599805b Mon Sep 17 00:00:00 2001
From: Patrice Tisserand
Date: Thu, 12 Sep 2024 11:56:44 +0200
Subject: [PATCH 10/33] fix(contracts): ensure an order with same hash can't be
created twice
---
.../src/orderbook/orderbook.cairo | 13 +---
.../tests/integration/create_order.cairo | 71 ++++++++++++++++++-
2 files changed, 72 insertions(+), 12 deletions(-)
diff --git a/contracts/ark_component/src/orderbook/orderbook.cairo b/contracts/ark_component/src/orderbook/orderbook.cairo
index 2b23d2604..6e265aee2 100644
--- a/contracts/ark_component/src/orderbook/orderbook.cairo
+++ b/contracts/ark_component/src/orderbook/orderbook.cairo
@@ -265,21 +265,12 @@ pub mod OrderbookComponent {
.validate_order_type()
.expect(orderbook_errors::ORDER_INVALID_DATA);
let order_hash = order.compute_order_hash();
+ assert(order_status_read(order_hash).is_none(), orderbook_errors::ORDER_ALREADY_EXISTS);
match order_type {
OrderType::Listing => {
- assert(
- order_status_read(order_hash).is_none(),
- orderbook_errors::ORDER_ALREADY_EXISTS
- );
let _ = self._create_listing_order(order, order_type, order_hash);
},
- OrderType::Auction => {
- assert(
- order_status_read(order_hash).is_none(),
- orderbook_errors::ORDER_ALREADY_EXISTS
- );
- self._create_auction(order, order_type, order_hash);
- },
+ OrderType::Auction => { self._create_auction(order, order_type, order_hash); },
OrderType::Offer => { self._create_offer(order, order_type, order_hash); },
OrderType::CollectionOffer => {
self._create_collection_offer(order, order_type, order_hash);
diff --git a/contracts/ark_starknet/tests/integration/create_order.cairo b/contracts/ark_starknet/tests/integration/create_order.cairo
index 75c408ae0..02676d729 100644
--- a/contracts/ark_starknet/tests/integration/create_order.cairo
+++ b/contracts/ark_starknet/tests/integration/create_order.cairo
@@ -183,7 +183,6 @@ fn test_create_collection_offer_order_ok() {
let (executor_address, erc20_address, nft_address) = setup();
let offerer = contract_address_const::<'offerer'>();
let start_amount = 10_000_000;
- let token_id = 10_u256;
Erc20Dispatcher { contract_address: erc20_address }.mint(offerer, start_amount);
let order = setup_collection_offer_order(erc20_address, nft_address, offerer, start_amount);
@@ -320,3 +319,73 @@ fn test_create_listing_order_disabled() {
cheat_caller_address(executor_address, offerer, CheatSpan::TargetCalls(1));
IExecutorDispatcher { contract_address: executor_address }.create_order(order);
}
+
+#[test]
+#[should_panic(expected: 'OB: order already exists')]
+fn test_create_offer_order_twice() {
+ let (executor_address, erc20_address, nft_address) = setup();
+ let offerer = contract_address_const::<'offerer'>();
+ let start_amount = 10_000_000;
+ let token_id = 10_u256;
+ Erc20Dispatcher { contract_address: erc20_address }.mint(offerer, start_amount);
+
+ let order = setup_offer_order(erc20_address, nft_address, offerer, token_id, start_amount);
+
+ cheat_caller_address(executor_address, offerer, CheatSpan::TargetCalls(2));
+ IExecutorDispatcher { contract_address: executor_address }.create_order(order);
+ IExecutorDispatcher { contract_address: executor_address }.create_order(order);
+}
+
+#[test]
+#[should_panic(expected: 'OB: order already exists')]
+fn test_create_listing_order_twice() {
+ let (executor_address, erc20_address, nft_address) = setup();
+ let offerer = contract_address_const::<'offerer'>();
+ let start_amount = 10_000_000;
+ let token_id: u256 = Erc721Dispatcher { contract_address: nft_address }
+ .get_current_token_id()
+ .into();
+ Erc721Dispatcher { contract_address: nft_address }.mint(offerer, 'base_uri');
+
+ let order = setup_listing_order(erc20_address, nft_address, offerer, token_id, start_amount);
+
+ cheat_caller_address(executor_address, offerer, CheatSpan::TargetCalls(2));
+ IExecutorDispatcher { contract_address: executor_address }.create_order(order);
+ IExecutorDispatcher { contract_address: executor_address }.create_order(order);
+}
+
+#[test]
+#[should_panic(expected: 'OB: order already exists')]
+fn test_create_auction_order_twice() {
+ let (executor_address, erc20_address, nft_address) = setup();
+ let offerer = contract_address_const::<'offerer'>();
+ let start_amount = 10_000_000;
+ let end_amount = start_amount * 2;
+ let token_id: u256 = Erc721Dispatcher { contract_address: nft_address }
+ .get_current_token_id()
+ .into();
+ Erc721Dispatcher { contract_address: nft_address }.mint(offerer, 'base_uri');
+
+ let order = setup_auction_order(
+ erc20_address, nft_address, offerer, token_id, start_amount, end_amount
+ );
+
+ cheat_caller_address(executor_address, offerer, CheatSpan::TargetCalls(2));
+ IExecutorDispatcher { contract_address: executor_address }.create_order(order);
+ IExecutorDispatcher { contract_address: executor_address }.create_order(order);
+}
+
+#[test]
+#[should_panic(expected: 'OB: order already exists')]
+fn test_create_collection_offer_order_twice() {
+ let (executor_address, erc20_address, nft_address) = setup();
+ let offerer = contract_address_const::<'offerer'>();
+ let start_amount = 10_000_000;
+ Erc20Dispatcher { contract_address: erc20_address }.mint(offerer, start_amount);
+
+ let order = setup_collection_offer_order(erc20_address, nft_address, offerer, start_amount);
+
+ cheat_caller_address(executor_address, offerer, CheatSpan::TargetCalls(2));
+ IExecutorDispatcher { contract_address: executor_address }.create_order(order);
+ IExecutorDispatcher { contract_address: executor_address }.create_order(order);
+}
From 3045d3e448ddf14698503577e1717a1979b2efbe Mon Sep 17 00:00:00 2001
From: Patrice Tisserand
Date: Thu, 12 Sep 2024 17:08:20 +0200
Subject: [PATCH 11/33] contracts: add test case for expired orders creation
---
.../tests/integration/create_order.cairo | 85 ++++++++++++++++++-
1 file changed, 84 insertions(+), 1 deletion(-)
diff --git a/contracts/ark_starknet/tests/integration/create_order.cairo b/contracts/ark_starknet/tests/integration/create_order.cairo
index 02676d729..d3f421788 100644
--- a/contracts/ark_starknet/tests/integration/create_order.cairo
+++ b/contracts/ark_starknet/tests/integration/create_order.cairo
@@ -16,7 +16,10 @@ use ark_tokens::erc20::IFreeMintDispatcherTrait as Erc20DispatcherTrait;
use ark_tokens::erc721::IFreeMintDispatcher as Erc721Dispatcher;
use ark_tokens::erc721::IFreeMintDispatcherTrait as Erc721DispatcherTrait;
-use snforge_std::{cheat_caller_address, CheatSpan, spy_events, EventSpyAssertionsTrait,};
+use snforge_std::{
+ cheat_caller_address, CheatSpan, spy_events, EventSpyAssertionsTrait,
+ start_cheat_block_timestamp_global, stop_cheat_block_timestamp_global
+};
use starknet::{ContractAddress, contract_address_const};
use super::super::common::setup::{
@@ -389,3 +392,83 @@ fn test_create_collection_offer_order_twice() {
IExecutorDispatcher { contract_address: executor_address }.create_order(order);
IExecutorDispatcher { contract_address: executor_address }.create_order(order);
}
+
+#[test]
+#[should_panic(expected: 'END_DATE_IN_THE_PAST')]
+fn test_create_offer_order_expired() {
+ let (executor_address, erc20_address, nft_address) = setup();
+ let offerer = contract_address_const::<'offerer'>();
+ let start_amount = 10_000_000;
+ let token_id = 10_u256;
+ Erc20Dispatcher { contract_address: erc20_address }.mint(offerer, start_amount);
+
+ let mut order = setup_offer_order(erc20_address, nft_address, offerer, token_id, start_amount);
+ let current = starknet::get_block_timestamp();
+ order.end_date = current + 10;
+ start_cheat_block_timestamp_global(current + 30);
+ cheat_caller_address(executor_address, offerer, CheatSpan::TargetCalls(1));
+ IExecutorDispatcher { contract_address: executor_address }.create_order(order);
+ stop_cheat_block_timestamp_global();
+}
+
+#[test]
+#[should_panic(expected: 'END_DATE_IN_THE_PAST')]
+fn test_create_listing_order_expired() {
+ let (executor_address, erc20_address, nft_address) = setup();
+ let offerer = contract_address_const::<'offerer'>();
+ let start_amount = 10_000_000;
+ let token_id: u256 = Erc721Dispatcher { contract_address: nft_address }
+ .get_current_token_id()
+ .into();
+ Erc721Dispatcher { contract_address: nft_address }.mint(offerer, 'base_uri');
+
+ let mut order = setup_listing_order(
+ erc20_address, nft_address, offerer, token_id, start_amount
+ );
+ let current = starknet::get_block_timestamp();
+ order.end_date = current + 10;
+ start_cheat_block_timestamp_global(current + 30);
+ cheat_caller_address(executor_address, offerer, CheatSpan::TargetCalls(1));
+ IExecutorDispatcher { contract_address: executor_address }.create_order(order);
+ stop_cheat_block_timestamp_global();
+}
+
+#[test]
+#[should_panic(expected: 'END_DATE_IN_THE_PAST')]
+fn test_create_auction_order_expired() {
+ let (executor_address, erc20_address, nft_address) = setup();
+ let offerer = contract_address_const::<'offerer'>();
+ let start_amount = 10_000_000;
+ let end_amount = start_amount * 2;
+ let token_id: u256 = Erc721Dispatcher { contract_address: nft_address }
+ .get_current_token_id()
+ .into();
+ Erc721Dispatcher { contract_address: nft_address }.mint(offerer, 'base_uri');
+
+ let mut order = setup_auction_order(
+ erc20_address, nft_address, offerer, token_id, start_amount, end_amount
+ );
+ let current = starknet::get_block_timestamp();
+ order.end_date = current + 10;
+ start_cheat_block_timestamp_global(current + 30);
+ cheat_caller_address(executor_address, offerer, CheatSpan::TargetCalls(1));
+ IExecutorDispatcher { contract_address: executor_address }.create_order(order);
+ stop_cheat_block_timestamp_global();
+}
+
+#[test]
+#[should_panic(expected: 'END_DATE_IN_THE_PAST')]
+fn test_create_collection_offer_order_expired() {
+ let (executor_address, erc20_address, nft_address) = setup();
+ let offerer = contract_address_const::<'offerer'>();
+ let start_amount = 10_000_000;
+ Erc20Dispatcher { contract_address: erc20_address }.mint(offerer, start_amount);
+
+ let mut order = setup_collection_offer_order(erc20_address, nft_address, offerer, start_amount);
+ let current = starknet::get_block_timestamp();
+ order.end_date = current + 10;
+ start_cheat_block_timestamp_global(current + 30);
+ cheat_caller_address(executor_address, offerer, CheatSpan::TargetCalls(1));
+ IExecutorDispatcher { contract_address: executor_address }.create_order(order);
+ stop_cheat_block_timestamp_global();
+}
From d3b6d26c070a8bddc5734fd1bc0cec3edb8da9bb Mon Sep 17 00:00:00 2001
From: Patrice Tisserand
Date: Fri, 13 Sep 2024 10:28:25 +0200
Subject: [PATCH 12/33] contracts(starknet): arkchain orderbook is no more used
---
contracts/ark_starknet/src/executor.cairo | 19 -------------------
contracts/ark_starknet/src/interfaces.cairo | 3 ---
2 files changed, 22 deletions(-)
diff --git a/contracts/ark_starknet/src/executor.cairo b/contracts/ark_starknet/src/executor.cairo
index f19719cd3..204bf58d7 100644
--- a/contracts/ark_starknet/src/executor.cairo
+++ b/contracts/ark_starknet/src/executor.cairo
@@ -96,7 +96,6 @@ mod executor {
#[storage]
struct Storage {
admin_address: ContractAddress,
- arkchain_orderbook_address: ContractAddress,
eth_contract_address: ContractAddress,
chain_id: felt252,
broker_fees: Map,
@@ -253,30 +252,12 @@ mod executor {
}
}
- fn get_orderbook_address(self: @ContractState) -> ContractAddress {
- self.arkchain_orderbook_address.read()
- }
-
- fn update_arkchain_orderbook_address(
- ref self: ContractState, orderbook_address: ContractAddress
- ) {
- _ensure_admin(@self);
-
- self.arkchain_orderbook_address.write(orderbook_address);
- }
-
fn update_eth_address(ref self: ContractState, eth_address: ContractAddress) {
_ensure_admin(@self);
self.eth_contract_address.write(eth_address);
}
- fn update_orderbook_address(ref self: ContractState, orderbook_address: ContractAddress) {
- _ensure_admin(@self);
-
- self.arkchain_orderbook_address.write(orderbook_address);
- }
-
fn update_admin_address(ref self: ContractState, admin_address: ContractAddress) {
_ensure_admin(@self);
diff --git a/contracts/ark_starknet/src/interfaces.cairo b/contracts/ark_starknet/src/interfaces.cairo
index e2b02f514..f283272b5 100644
--- a/contracts/ark_starknet/src/interfaces.cairo
+++ b/contracts/ark_starknet/src/interfaces.cairo
@@ -20,10 +20,7 @@ trait IExecutor {
fn create_order(ref self: T, order: OrderV1);
// fn execute_order(ref self: T, execution_info: ExecutionInfo);
fn update_admin_address(ref self: T, admin_address: ContractAddress);
- fn update_orderbook_address(ref self: T, orderbook_address: ContractAddress);
fn update_eth_address(ref self: T, eth_address: ContractAddress);
- fn get_orderbook_address(self: @T) -> ContractAddress;
- fn update_arkchain_orderbook_address(ref self: T, orderbook_address: ContractAddress);
fn set_broker_fees(ref self: T, fees_ratio: FeesRatio);
fn get_broker_fees(self: @T, broker_address: ContractAddress) -> FeesRatio;
fn set_ark_fees(ref self: T, fees_ratio: FeesRatio);
From 5efaf0277d2148c92aec4df259895def1b94b162 Mon Sep 17 00:00:00 2001
From: Patrice Tisserand
Date: Sat, 14 Sep 2024 21:46:25 +0200
Subject: [PATCH 13/33] CI: run SDK test with devnet
---
.env.devnet | 44 ++
.github/actions/install-snforge/action.yml | 34 ++
.github/workflows/arkproject-contracts.yml | 75 ++--
pnpm-lock.yaml | 466 ++++++++++++++++-----
4 files changed, 495 insertions(+), 124 deletions(-)
create mode 100644 .env.devnet
create mode 100644 .github/actions/install-snforge/action.yml
diff --git a/.env.devnet b/.env.devnet
new file mode 100644
index 000000000..e80c1d960
--- /dev/null
+++ b/.env.devnet
@@ -0,0 +1,44 @@
+# Starknet RPC URL
+STARKNET_RPC_URL=http://0.0.0.0:5050
+
+## starknet-devnet-rs 0.2.0 account --seed 0
+# Starknet accounts
+STARKNET_ADMIN_ADDRESS_DEV=0x64b48806902a367c8598f4f95c305e8c1a1acba5f082d294a43793113115691
+STARKNET_ADMIN_PRIVATE_KEY_DEV=0x0000000000000000000000000000000071d7bb07b9a64f6f78ac4c816aff4da9
+
+STARKNET_ACCOUNT1_ADDRESS=0x78662e7352d062084b0010068b99288486c2d8b914f6e2a55ce945f8792c8b1
+STARKNET_ACCOUNT1_PRIVATE_KEY=0x000000000000000000000000000000000e1406455b7d66b1690803be066cbe5e
+STARKNET_ACCOUNT1_PUBLIC_KEY=0x007a1bb2744a7dd29bffd44341dbd78008adb4bc11733601e7eddff322ada9cb
+
+STARKNET_ACCOUNT2_ADDRESS=0x49dfb8ce986e21d354ac93ea65e6a11f639c1934ea253e5ff14ca62eca0f38e
+STARKNET_ACCOUNT2_PRIVATE_KEY=0x00000000000000000000000000000000a20a02f0ac53692d144b20cb371a60d7
+STARKNET_ACCOUNT2_PUBLIC_KEY=0x00b8fd4ddd415902d96f61b7ad201022d495997c2dff8eb9e0eb86253e30fabc
+
+STARKNET_ARK_RECEIVER_ADDRESS=0x4f348398f859a55a0c80b1446c5fdc37edb3a8478a32f10764659fc241027d3
+STARKNET_ARK_RECEIVER_PRIVATE_KEY=0x00000000000000000000000000000000a641611c17d4d92bd0790074e34beeb7
+
+STARKNET_ARK_COLLECTION_RECEIVER_ADDRESS=0xd513de92c16aa42418cf7e5b60f8022dbee1b4dfd81bcf03ebee079cfb5cb5
+STARKNET_ARK_COLLECTION_RECEIVER_PRIVATE_KEY=0x000000000000000000000000000000005b4ac23628a5749277bcabbf4726b025
+
+STARKNET_ARK_COLLECTION_2981_RECEIVER_ADDRESS=0x1e8c6c17efa3a047506c0b1610bd188aa3e3dd6c5d9227549b65428de24de78
+STARKNET_ARK_COLLECTION_2981_RECEIVER_PRIVATE_KEY=0x00000000000000000000000000000000836203aceb0e9b0066138c321dda5ae6
+
+STARKNET_LISTING_BROKER_ACCOUNT_ADDRESS=0x557ba9ef60b52dad611d79b60563901458f2476a5c1002a8b4869fcb6654c7e
+STARKNET_LISTING_BROKER_ACCOUNT_PRIVATE_KEY=0x0000000000000000000000000000000015b5e3013d752c909988204714f1ff35
+
+STARKNET_SALE_BROKER_ACCOUNT_ADDRESS=0x3736286f1050d4ba816b4d56d15d80ca74c1752c4e847243f1da726c36e06f
+STARKNET_SALE_BROKER_ACCOUNT_PRIVATE_KEY=0x00000000000000000000000000000000a56597ba3378fa9e6440ea9ae0cf2865
+
+SOLIS_ADMIN_ADDRESS_DEV=0xb3ff441a68610b30fd5e2abbf3a1548eb6ba6f3559f2862bf2dc757e5828ca
+SOLIS_ADMIN_PRIVATE_KEY_DEV=0x2bbf4f9fd0bbb2e60b0316c1fe0b76cf7a4d0198bd493ced9b8df2a3a24d68a
+SOLIS_ADMIN_PUBLIC_KEY_DEV=0x640466ebd2ce505209d3e5c4494b4276ed8f1cde764d757eb48831961f7cdea
+
+SOLIS_ADMIN_ADDRESS=0x6b86e40118f29ebe393a75469b4d926c7a44c2e2681b6d319520b7c1156d114
+SOLIS_ADMIN_PRIVATE_KEY=0x1c9053c053edf324aec366a34c6901b1095b07af69495bffec7d7fe21effb1b
+
+# Starknet network
+STARKNET_NETWORK_ID=dev
+# Solis network
+SOLIS_NETWORK_ID=dev
+
+BROKER_ID=
diff --git a/.github/actions/install-snforge/action.yml b/.github/actions/install-snforge/action.yml
new file mode 100644
index 000000000..3de238ac2
--- /dev/null
+++ b/.github/actions/install-snforge/action.yml
@@ -0,0 +1,34 @@
+name: "Install contract dependencies"
+description: "Install dependencies for smart contract"
+
+env:
+ SCARB_VERSION: 2.7.1
+ STARKNET_FOUNDRY_VERSION: 0.30.0
+
+runs:
+ using: "composite"
+ steps:
+ - name: Install universal sierra compiler
+ run: |
+ curl -L https://raw.githubusercontent.com/software-mansion/universal-sierra-compiler/master/scripts/install.sh | sh
+ echo "/root/.local/bin" >> ${GITHUB_PATH}
+
+ - name: Check universal sierra compiler version
+ run: universal-sierra-compiler --version
+
+ - name: Setup Scarb
+ uses: software-mansion/setup-scarb@v1
+ with:
+ scarb-version: ${{ env.SCARB_VERSION }}
+
+ - name: Setup Starknet Foundry
+ uses: foundry-rs/setup-snfoundry@v3
+ with:
+ starknet-foundry-version: ${{ env.STARKNET_FOUNDRY_VERSION }}
+
+ - name: Set Up Stable Rust Toolchain
+ uses: actions-rs/toolchain@v1
+ with:
+ profile: minimal
+ toolchain: stable
+
diff --git a/.github/workflows/arkproject-contracts.yml b/.github/workflows/arkproject-contracts.yml
index 499894f3c..979857317 100644
--- a/.github/workflows/arkproject-contracts.yml
+++ b/.github/workflows/arkproject-contracts.yml
@@ -10,47 +10,74 @@ on:
paths:
- "contracts/**"
+env:
+ SCARB_VERSION: 2.7.1
+ STARKNET_DEVNET_VERSION: 0.2.0-rc3
+ DEVNET_DUMP_PATH: /devnet-dump.json
jobs:
fmt:
runs-on: ubuntu-latest
name: Cairo formatting
steps:
- name: Checkout Repository
- uses: actions/checkout@v3
- - name: Install universal sierra compiler
- run: curl -L https://raw.githubusercontent.com/software-mansion/universal-sierra-compiler/master/scripts/install.sh | sh
+ uses: actions/checkout@v4
+
- name: Setup Scarb
uses: software-mansion/setup-scarb@v1
with:
- scarb-version: 2.7.1
+ scarb-version: ${{ env.SCARB_VERSION }}
+
- name: Check Scarb Formatting
run: cd contracts && scarb fmt --check
- test:
+
+ forge-test:
runs-on: ubuntu-latest
name: Cairo starknet foundry tests
steps:
- name: Checkout Repository
- uses: actions/checkout@v3
- - name: Install universal sierra compiler
- run: curl -L https://raw.githubusercontent.com/software-mansion/universal-sierra-compiler/master/scripts/install.sh | sh
- - name: Setup Scarb
- uses: software-mansion/setup-scarb@v1
- with:
- scarb-version: 2.7.1
+ uses: actions/checkout@v4
- - name: Setup Starknet Foundry
- uses: foundry-rs/setup-snfoundry@v2
- with:
- starknet-foundry-version: 0.28.0
+ - name: Install starknet foundry & dependencies
+ uses: ./.github/actions/install-snforge
+
+ - name: Test contracts
+ run: cd contracts && snforge test
+
+ devnet-test:
+ runs-on: ubuntu-latest
+ name: Running SDK test with starknet-devnet
+ # needs: forge-test
+ steps:
+ - name: Checkout Repository
+ uses: actions/checkout@v4
+
+ - name: Install starknet foundry & dependencies
+ uses: ./.github/actions/install-snforge
+
+ - name: Build smart contracts
+ run: cd contracts && scarb build --workspace
+
+ - name: Run starknet-devnet as a background process
+ run: |
+ docker run -d --rm --name starknet-devnet \
+ -p 5050:5050 \
+ ptisserand/starknet-devnet-rs:${STARKNET_DEVNET_VERSION} \
+ --seed 0 --dump-path $DEVNET_DUMP_PATH --state-archive-capacity full
+ sleep 3 # Wait for 3 seconds for the Docker container to initialize
- - name: Test ark_common contracts
- run: cd contracts/ark_common && snforge test
+ - name: Install SDK dependencies
+ uses: ./.github/actions/install-dependencies
+
+ - name: Deploy smart contract
+ run: pnpm deploy:starknet:local
+
+ - name: Run SDK test
+ run: |
+ cp .env.devnet .env
+ pnpm test
- - name: Test ark_orderbook contracts
- run: cd contracts/ark_orderbook && snforge test
+ - name: Stop starknet-devnet container
+ if: always()
+ run: docker stop starknet-devnet
- - name: Test ark_starknet contracts
- run: cd contracts/ark_starknet && snforge test
- - name: Test ark_tokens contracts
- run: cd contracts/ark_tokens && snforge test
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index ffef88768..fd297e36c 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -58,7 +58,7 @@ importers:
version: 6.11.0
ts-node:
specifier: ^10.9.1
- version: 10.9.2(@types/node@22.5.5)(typescript@5.6.2)
+ version: 10.9.2(@types/node@22.5.5)(typescript@5.5.4)
typescript:
specifier: ^5.0.0
version: 5.6.2
@@ -247,6 +247,9 @@ importers:
dotenv:
specifier: ^16.4.5
version: 16.4.5
+ jest:
+ specifier: ^29.7.0
+ version: 29.7.0(@types/node@22.5.5)
jest-environment-jsdom:
specifier: ^29.7.0
version: 29.7.0
@@ -256,66 +259,15 @@ importers:
react-test-renderer:
specifier: ^18.3.1
version: 18.3.1(react@18.3.1)
+ ts-jest:
+ specifier: ^29.1.1
+ version: 29.2.5(@babel/core@7.25.2)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.25.2))(jest@29.7.0(@types/node@22.5.5))(typescript@5.5.4)
typescript:
specifier: ^5.3.3
version: 5.6.2
vitest:
specifier: ^2.0.5
- version: 2.1.1(@types/node@22.5.5)(jsdom@20.0.3)
-
- packages/test:
- devDependencies:
- '@ark-project/eslint-config':
- specifier: workspace:*
- version: link:../eslint-config
- '@ark-project/typescript-config':
- specifier: workspace:*
- version: link:../typescript-config
- '@starknet-react/chains':
- specifier: ^0.1.7
- version: 0.1.7
- '@starknet-react/core':
- specifier: ^2.8.1
- version: 2.9.0(get-starknet-core@4.0.0)(react@18.3.1)(starknet@6.11.0)
- '@tanstack/react-query':
- specifier: ^5.55.4
- version: 5.56.2(react@18.3.1)
- '@testing-library/dom':
- specifier: ^10.4.0
- version: 10.4.0
- '@testing-library/jest-dom':
- specifier: ^6.5.0
- version: 6.5.0
- '@testing-library/react':
- specifier: ^16.0.1
- version: 16.0.1(@testing-library/dom@10.4.0)(@types/react@18.3.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
- '@testing-library/react-hooks':
- specifier: ^8.0.1
- version: 8.0.1(@types/react@18.3.7)(react-dom@18.3.1(react@18.3.1))(react-test-renderer@18.3.1(react@18.3.1))(react@18.3.1)
- '@types/react':
- specifier: ^18
- version: 18.3.7
- dotenv:
- specifier: ^16.4.5
- version: 16.4.5
- jest-environment-jsdom:
- specifier: ^29.7.0
- version: 29.7.0
- react:
- specifier: ^18
- version: 18.3.1
- react-dom:
- specifier: ^18
- version: 18.3.1(react@18.3.1)
- react-test-renderer:
- specifier: ^18.3.1
- version: 18.3.1(react@18.3.1)
- starknet:
- specifier: ^6.9.0
- version: 6.11.0
- typescript:
- specifier: ^5.3.3
- version: 5.6.2
+ version: 2.0.5(@types/node@22.5.5)(jsdom@20.0.3)
packages/typescript-config: {}
@@ -1321,6 +1273,12 @@ packages:
'@types/node@22.5.5':
resolution: {integrity: sha512-Xjs4y5UPO/CLdzpgR6GirZJx36yScjh73+2NlLlkFRSoQN8B0DpfXPdZGnvVmLRLOsqDpOfTNv7D9trgGhmOIA==}
+ '@types/node@22.5.5':
+ resolution: {integrity: sha512-Xjs4y5UPO/CLdzpgR6GirZJx36yScjh73+2NlLlkFRSoQN8B0DpfXPdZGnvVmLRLOsqDpOfTNv7D9trgGhmOIA==}
+
+ '@types/node@22.5.5':
+ resolution: {integrity: sha512-Xjs4y5UPO/CLdzpgR6GirZJx36yScjh73+2NlLlkFRSoQN8B0DpfXPdZGnvVmLRLOsqDpOfTNv7D9trgGhmOIA==}
+
'@types/normalize-package-data@2.4.4':
resolution: {integrity: sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==}
@@ -5100,6 +5058,10 @@ snapshots:
dependencies:
undici-types: 6.19.8
+ '@types/node@22.5.5':
+ dependencies:
+ undici-types: 6.19.8
+
'@types/normalize-package-data@2.4.4': {}
'@types/prop-types@15.7.13': {}
@@ -5119,7 +5081,7 @@ snapshots:
'@types/ws@8.5.12':
dependencies:
- '@types/node': 20.12.14
+ '@types/node': 20.16.1
'@types/yargs-parser@21.0.3': {}
@@ -5261,19 +5223,19 @@ snapshots:
'@babel/core': 7.25.2
'@babel/eslint-parser': 7.25.1(@babel/core@7.25.2)(eslint@8.57.1)
'@rushstack/eslint-patch': 1.10.4
- '@typescript-eslint/eslint-plugin': 6.21.0(@typescript-eslint/parser@6.21.0(eslint@8.57.1)(typescript@5.6.2))(eslint@8.57.1)(typescript@5.6.2)
- '@typescript-eslint/parser': 6.21.0(eslint@8.57.1)(typescript@5.6.2)
- eslint-config-prettier: 9.1.0(eslint@8.57.1)
- eslint-import-resolver-alias: 1.1.2(eslint-plugin-import@2.30.0(@typescript-eslint/parser@6.21.0(eslint@8.57.1)(typescript@5.6.2))(eslint@8.57.1))
- eslint-import-resolver-typescript: 3.6.3(@typescript-eslint/parser@6.21.0(eslint@8.57.1)(typescript@5.6.2))(eslint-plugin-import@2.30.0)(eslint@8.57.1)
- eslint-plugin-eslint-comments: 3.2.0(eslint@8.57.1)
- eslint-plugin-import: 2.30.0(@typescript-eslint/parser@6.21.0(eslint@8.57.1)(typescript@5.6.2))(eslint-import-resolver-typescript@3.6.3)(eslint@8.57.1)
- eslint-plugin-jest: 27.9.0(@typescript-eslint/eslint-plugin@6.21.0(@typescript-eslint/parser@6.21.0(eslint@8.57.1)(typescript@5.6.2))(eslint@8.57.1)(typescript@5.6.2))(eslint@8.57.1)(typescript@5.6.2)
- eslint-plugin-jsx-a11y: 6.10.0(eslint@8.57.1)
- eslint-plugin-playwright: 0.16.0(eslint-plugin-jest@27.9.0(@typescript-eslint/eslint-plugin@6.21.0(@typescript-eslint/parser@6.21.0(eslint@8.57.1)(typescript@5.6.2))(eslint@8.57.1)(typescript@5.6.2))(eslint@8.57.1)(typescript@5.6.2))(eslint@8.57.1)
- eslint-plugin-react: 7.36.1(eslint@8.57.1)
- eslint-plugin-react-hooks: 4.6.2(eslint@8.57.1)
- eslint-plugin-testing-library: 6.3.0(eslint@8.57.1)(typescript@5.6.2)
+ '@typescript-eslint/eslint-plugin': 6.21.0(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.5.4))(eslint@8.57.0)(typescript@5.5.4)
+ '@typescript-eslint/parser': 6.21.0(eslint@8.57.0)(typescript@5.5.4)
+ eslint-config-prettier: 9.1.0(eslint@8.57.0)
+ eslint-import-resolver-alias: 1.1.2(eslint-plugin-import@2.29.1(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.5.4))(eslint@8.57.0))
+ eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.5.4))(eslint-plugin-import@2.29.1)(eslint@8.57.0)
+ eslint-plugin-eslint-comments: 3.2.0(eslint@8.57.0)
+ eslint-plugin-import: 2.29.1(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.5.4))(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0)
+ eslint-plugin-jest: 27.9.0(@typescript-eslint/eslint-plugin@6.21.0(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.5.4))(eslint@8.57.0)(typescript@5.5.4))(eslint@8.57.0)(jest@29.7.0)(typescript@5.5.4)
+ eslint-plugin-jsx-a11y: 6.9.0(eslint@8.57.0)
+ eslint-plugin-playwright: 0.16.0(eslint-plugin-jest@27.9.0(@typescript-eslint/eslint-plugin@6.21.0(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.5.4))(eslint@8.57.0)(typescript@5.5.4))(eslint@8.57.0)(jest@29.7.0)(typescript@5.5.4))(eslint@8.57.0)
+ eslint-plugin-react: 7.35.0(eslint@8.57.0)
+ eslint-plugin-react-hooks: 4.6.2(eslint@8.57.0)
+ eslint-plugin-testing-library: 6.3.0(eslint@8.57.0)(typescript@5.5.4)
eslint-plugin-tsdoc: 0.2.17
eslint-plugin-unicorn: 48.0.1(eslint@8.57.1)
prettier-plugin-packagejson: 2.5.2(prettier@3.3.3)
@@ -5686,6 +5648,21 @@ snapshots:
convert-source-map@2.0.0: {}
+ create-jest@29.7.0(@types/node@20.16.1)(ts-node@10.9.2(@types/node@20.16.1)(typescript@5.5.4)):
+ dependencies:
+ '@jest/types': 29.6.3
+ chalk: 4.1.2
+ exit: 0.1.2
+ graceful-fs: 4.2.11
+ jest-config: 29.7.0(@types/node@20.16.1)(ts-node@10.9.2(@types/node@20.16.1)(typescript@5.5.4))
+ jest-util: 29.7.0
+ prompts: 2.4.2
+ transitivePeerDependencies:
+ - '@types/node'
+ - babel-plugin-macros
+ - supports-color
+ - ts-node
+
create-require@1.1.1: {}
cross-spawn@5.1.0:
@@ -6078,7 +6055,7 @@ snapshots:
eslint: 8.57.1
eslint-plugin-turbo: 2.1.2(eslint@8.57.1)
- eslint-import-resolver-alias@1.1.2(eslint-plugin-import@2.30.0(@typescript-eslint/parser@6.21.0(eslint@8.57.1)(typescript@5.6.2))(eslint@8.57.1)):
+ eslint-import-resolver-alias@1.1.2(eslint-plugin-import@2.29.1(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.5.4))(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0)):
dependencies:
eslint-plugin-import: 2.30.0(@typescript-eslint/parser@6.21.0(eslint@8.57.1)(typescript@5.6.2))(eslint-import-resolver-typescript@3.6.3)(eslint@8.57.1)
@@ -6159,7 +6136,8 @@ snapshots:
'@typescript-eslint/utils': 5.62.0(eslint@8.57.1)(typescript@5.6.2)
eslint: 8.57.1
optionalDependencies:
- '@typescript-eslint/eslint-plugin': 6.21.0(@typescript-eslint/parser@6.21.0(eslint@8.57.1)(typescript@5.6.2))(eslint@8.57.1)(typescript@5.6.2)
+ '@typescript-eslint/eslint-plugin': 6.21.0(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.5.4))(eslint@8.57.0)(typescript@5.5.4)
+ jest: 29.7.0
transitivePeerDependencies:
- supports-color
- typescript
@@ -6852,6 +6830,183 @@ snapshots:
optionalDependencies:
'@pkgjs/parseargs': 0.11.0
+ jake@10.9.2:
+ dependencies:
+ async: 3.2.6
+ chalk: 4.1.2
+ filelist: 1.0.4
+ minimatch: 3.1.2
+
+ jest-changed-files@29.7.0:
+ dependencies:
+ execa: 5.1.1
+ jest-util: 29.7.0
+ p-limit: 3.1.0
+
+ jest-circus@29.7.0:
+ dependencies:
+ '@jest/environment': 29.7.0
+ '@jest/expect': 29.7.0
+ '@jest/test-result': 29.7.0
+ '@jest/types': 29.6.3
+ '@types/node': 20.16.1
+ chalk: 4.1.2
+ co: 4.6.0
+ dedent: 1.5.3
+ is-generator-fn: 2.1.0
+ jest-each: 29.7.0
+ jest-matcher-utils: 29.7.0
+ jest-message-util: 29.7.0
+ jest-runtime: 29.7.0
+ jest-snapshot: 29.7.0
+ jest-util: 29.7.0
+ p-limit: 3.1.0
+ pretty-format: 29.7.0
+ pure-rand: 6.1.0
+ slash: 3.0.0
+ stack-utils: 2.0.6
+ transitivePeerDependencies:
+ - babel-plugin-macros
+ - supports-color
+
+ jest-cli@29.7.0:
+ dependencies:
+ '@jest/core': 29.7.0(ts-node@10.9.2(@types/node@20.16.1)(typescript@5.5.4))
+ '@jest/test-result': 29.7.0
+ '@jest/types': 29.6.3
+ chalk: 4.1.2
+ create-jest: 29.7.0(@types/node@20.16.1)(ts-node@10.9.2(@types/node@20.16.1)(typescript@5.5.4))
+ exit: 0.1.2
+ import-local: 3.2.0
+ jest-config: 29.7.0(@types/node@20.16.1)(ts-node@10.9.2(@types/node@20.16.1)(typescript@5.5.4))
+ jest-util: 29.7.0
+ jest-validate: 29.7.0
+ yargs: 17.7.2
+ transitivePeerDependencies:
+ - '@types/node'
+ - babel-plugin-macros
+ - supports-color
+ - ts-node
+ optional: true
+
+ jest-cli@29.7.0(@types/node@20.16.1)(ts-node@10.9.2(@types/node@20.16.1)(typescript@5.5.4)):
+ dependencies:
+ '@jest/core': 29.7.0(ts-node@10.9.2(@types/node@20.16.1)(typescript@5.5.4))
+ '@jest/test-result': 29.7.0
+ '@jest/types': 29.6.3
+ chalk: 4.1.2
+ create-jest: 29.7.0(@types/node@20.16.1)(ts-node@10.9.2(@types/node@20.16.1)(typescript@5.5.4))
+ exit: 0.1.2
+ import-local: 3.2.0
+ jest-config: 29.7.0(@types/node@20.16.1)(ts-node@10.9.2(@types/node@20.16.1)(typescript@5.5.4))
+ jest-util: 29.7.0
+ jest-validate: 29.7.0
+ yargs: 17.7.2
+ transitivePeerDependencies:
+ - '@types/node'
+ - babel-plugin-macros
+ - supports-color
+ - ts-node
+
+ jest-cli@29.7.0(@types/node@22.5.5):
+ dependencies:
+ '@jest/core': 29.7.0(ts-node@10.9.2(@types/node@20.16.1)(typescript@5.5.4))
+ '@jest/test-result': 29.7.0
+ '@jest/types': 29.6.3
+ chalk: 4.1.2
+ create-jest: 29.7.0(@types/node@22.5.5)
+ exit: 0.1.2
+ import-local: 3.2.0
+ jest-config: 29.7.0(@types/node@22.5.5)
+ jest-util: 29.7.0
+ jest-validate: 29.7.0
+ yargs: 17.7.2
+ transitivePeerDependencies:
+ - '@types/node'
+ - babel-plugin-macros
+ - supports-color
+ - ts-node
+
+ jest-config@29.7.0(@types/node@20.16.1)(ts-node@10.9.2(@types/node@20.16.1)(typescript@5.5.4)):
+ dependencies:
+ '@babel/core': 7.25.2
+ '@jest/test-sequencer': 29.7.0
+ '@jest/types': 29.6.3
+ babel-jest: 29.7.0(@babel/core@7.25.2)
+ chalk: 4.1.2
+ ci-info: 3.9.0
+ deepmerge: 4.3.1
+ glob: 7.2.3
+ graceful-fs: 4.2.11
+ jest-circus: 29.7.0
+ jest-environment-node: 29.7.0
+ jest-get-type: 29.6.3
+ jest-regex-util: 29.6.3
+ jest-resolve: 29.7.0
+ jest-runner: 29.7.0
+ jest-util: 29.7.0
+ jest-validate: 29.7.0
+ micromatch: 4.0.8
+ parse-json: 5.2.0
+ pretty-format: 29.7.0
+ slash: 3.0.0
+ strip-json-comments: 3.1.1
+ optionalDependencies:
+ '@types/node': 20.16.1
+ ts-node: 10.9.2(@types/node@20.16.1)(typescript@5.5.4)
+ transitivePeerDependencies:
+ - babel-plugin-macros
+ - supports-color
+
+ jest-config@29.7.0(@types/node@22.5.5):
+ dependencies:
+ '@babel/core': 7.25.2
+ '@jest/test-sequencer': 29.7.0
+ '@jest/types': 29.6.3
+ babel-jest: 29.7.0(@babel/core@7.25.2)
+ chalk: 4.1.2
+ ci-info: 3.9.0
+ deepmerge: 4.3.1
+ glob: 7.2.3
+ graceful-fs: 4.2.11
+ jest-circus: 29.7.0
+ jest-environment-node: 29.7.0
+ jest-get-type: 29.6.3
+ jest-regex-util: 29.6.3
+ jest-resolve: 29.7.0
+ jest-runner: 29.7.0
+ jest-util: 29.7.0
+ jest-validate: 29.7.0
+ micromatch: 4.0.8
+ parse-json: 5.2.0
+ pretty-format: 29.7.0
+ slash: 3.0.0
+ strip-json-comments: 3.1.1
+ optionalDependencies:
+ '@types/node': 22.5.5
+ transitivePeerDependencies:
+ - babel-plugin-macros
+ - supports-color
+
+ jest-diff@29.7.0:
+ dependencies:
+ chalk: 4.1.2
+ diff-sequences: 29.6.3
+ jest-get-type: 29.6.3
+ pretty-format: 29.7.0
+
+ jest-docblock@29.7.0:
+ dependencies:
+ detect-newline: 3.1.0
+
+ jest-each@29.7.0:
+ dependencies:
+ '@jest/types': 29.6.3
+ chalk: 4.1.2
+ jest-get-type: 29.6.3
+ jest-util: 29.7.0
+ pretty-format: 29.7.0
+
jest-environment-jsdom@29.7.0:
dependencies:
'@jest/environment': 29.7.0
@@ -6894,6 +7049,70 @@ snapshots:
graceful-fs: 4.2.11
picomatch: 2.3.1
+ jest-validate@29.7.0:
+ dependencies:
+ '@jest/types': 29.6.3
+ camelcase: 6.3.0
+ chalk: 4.1.2
+ jest-get-type: 29.6.3
+ leven: 3.1.0
+ pretty-format: 29.7.0
+
+ jest-watcher@29.7.0:
+ dependencies:
+ '@jest/test-result': 29.7.0
+ '@jest/types': 29.6.3
+ '@types/node': 20.16.1
+ ansi-escapes: 4.3.2
+ chalk: 4.1.2
+ emittery: 0.13.1
+ jest-util: 29.7.0
+ string-length: 4.0.2
+
+ jest-worker@29.7.0:
+ dependencies:
+ '@types/node': 20.16.1
+ jest-util: 29.7.0
+ merge-stream: 2.0.0
+ supports-color: 8.1.1
+
+ jest@29.7.0:
+ dependencies:
+ '@jest/core': 29.7.0(ts-node@10.9.2(@types/node@20.16.1)(typescript@5.5.4))
+ '@jest/types': 29.6.3
+ import-local: 3.2.0
+ jest-cli: 29.7.0
+ transitivePeerDependencies:
+ - '@types/node'
+ - babel-plugin-macros
+ - supports-color
+ - ts-node
+ optional: true
+
+ jest@29.7.0(@types/node@20.16.1)(ts-node@10.9.2(@types/node@20.16.1)(typescript@5.5.4)):
+ dependencies:
+ '@jest/core': 29.7.0(ts-node@10.9.2(@types/node@20.16.1)(typescript@5.5.4))
+ '@jest/types': 29.6.3
+ import-local: 3.2.0
+ jest-cli: 29.7.0(@types/node@20.16.1)(ts-node@10.9.2(@types/node@20.16.1)(typescript@5.5.4))
+ transitivePeerDependencies:
+ - '@types/node'
+ - babel-plugin-macros
+ - supports-color
+ - ts-node
+
+ jest@29.7.0(@types/node@22.5.5):
+ dependencies:
+ '@jest/core': 29.7.0(ts-node@10.9.2(@types/node@20.16.1)(typescript@5.5.4))
+ '@jest/types': 29.6.3
+ import-local: 3.2.0
+ jest-cli: 29.7.0(@types/node@22.5.5)
+ transitivePeerDependencies:
+ - '@types/node'
+ - babel-plugin-macros
+ - supports-color
+ - ts-node
+
jju@1.4.0: {}
joycon@3.1.1: {}
@@ -7915,9 +8134,36 @@ snapshots:
create-require: 1.1.1
diff: 4.0.2
make-error: 1.3.6
- typescript: 5.6.2
- v8-compile-cache-lib: 3.0.1
- yn: 3.1.1
+ semver: 7.6.3
+ typescript: 5.5.4
+ yargs-parser: 21.1.1
+ optionalDependencies:
+ '@babel/core': 7.25.2
+ '@jest/transform': 29.7.0
+ '@jest/types': 29.6.3
+ babel-jest: 29.7.0(@babel/core@7.25.2)
+ esbuild: 0.20.2
+
+ ts-jest@29.2.5(@babel/core@7.25.2)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.25.2))(jest@29.7.0(@types/node@22.5.5))(typescript@5.5.4):
+ dependencies:
+ bs-logger: 0.2.6
+ ejs: 3.1.10
+ fast-json-stable-stringify: 2.1.0
+ jest: 29.7.0(@types/node@22.5.5)
+ jest-util: 29.7.0
+ json5: 2.2.3
+ lodash.memoize: 4.1.2
+ make-error: 1.3.6
+ semver: 7.6.3
+ typescript: 5.5.4
+ yargs-parser: 21.1.1
+ optionalDependencies:
+ '@babel/core': 7.25.2
+ '@jest/transform': 29.7.0
+ '@jest/types': 29.6.3
+ babel-jest: 29.7.0(@babel/core@7.25.2)
+
+ ts-mixer@6.0.4: {}
ts-node@10.9.2(@types/node@22.5.5)(typescript@5.6.2):
dependencies:
@@ -7937,6 +8183,42 @@ snapshots:
v8-compile-cache-lib: 3.0.1
yn: 3.1.1
+ ts-node@10.9.2(@types/node@22.5.5)(typescript@5.5.4):
+ dependencies:
+ '@cspotcode/source-map-support': 0.8.1
+ '@tsconfig/node10': 1.0.11
+ '@tsconfig/node12': 1.0.11
+ '@tsconfig/node14': 1.0.3
+ '@tsconfig/node16': 1.0.4
+ '@types/node': 22.5.5
+ acorn: 8.12.1
+ acorn-walk: 8.3.3
+ arg: 4.1.3
+ create-require: 1.1.1
+ diff: 4.0.2
+ make-error: 1.3.6
+ typescript: 5.5.4
+ v8-compile-cache-lib: 3.0.1
+ yn: 3.1.1
+
+ ts-node@10.9.2(@types/node@22.5.5)(typescript@5.5.4):
+ dependencies:
+ '@cspotcode/source-map-support': 0.8.1
+ '@tsconfig/node10': 1.0.11
+ '@tsconfig/node12': 1.0.11
+ '@tsconfig/node14': 1.0.3
+ '@tsconfig/node16': 1.0.4
+ '@types/node': 22.5.5
+ acorn: 8.12.1
+ acorn-walk: 8.3.3
+ arg: 4.1.3
+ create-require: 1.1.1
+ diff: 4.0.2
+ make-error: 1.3.6
+ typescript: 5.5.4
+ v8-compile-cache-lib: 3.0.1
+ yn: 3.1.1
+
tsconfig-paths@3.15.0:
dependencies:
'@types/json5': 0.0.29
@@ -8123,29 +8405,13 @@ snapshots:
- utf-8-validate
- zod
- vite-node@2.1.1(@types/node@20.16.5):
+ vite-node@2.0.5(@types/node@22.5.5):
dependencies:
cac: 6.7.14
debug: 4.3.7(supports-color@5.5.0)
pathe: 1.1.2
- vite: 5.4.6(@types/node@20.16.5)
- transitivePeerDependencies:
- - '@types/node'
- - less
- - lightningcss
- - sass
- - sass-embedded
- - stylus
- - sugarss
- - supports-color
- - terser
-
- vite-node@2.1.1(@types/node@22.5.5):
- dependencies:
- cac: 6.7.14
- debug: 4.3.7(supports-color@5.5.0)
- pathe: 1.1.2
- vite: 5.4.6(@types/node@22.5.5)
+ tinyrainbow: 1.2.0
+ vite: 5.4.3(@types/node@22.5.5)
transitivePeerDependencies:
- '@types/node'
- less
@@ -8157,16 +8423,16 @@ snapshots:
- supports-color
- terser
- vite@5.4.6(@types/node@20.16.5):
+ vite@5.4.3(@types/node@20.16.1):
dependencies:
esbuild: 0.21.5
postcss: 8.4.47
rollup: 4.21.3
optionalDependencies:
- '@types/node': 20.16.5
+ '@types/node': 20.16.1
fsevents: 2.3.3
- vite@5.4.6(@types/node@22.5.5):
+ vitest@2.0.5(@types/node@22.5.5)(jsdom@20.0.3):
dependencies:
esbuild: 0.21.5
postcss: 8.4.47
@@ -8193,11 +8459,11 @@ snapshots:
tinyexec: 0.3.0
tinypool: 1.0.1
tinyrainbow: 1.2.0
- vite: 5.4.6(@types/node@20.16.5)
- vite-node: 2.1.1(@types/node@20.16.5)
+ vite: 5.4.3(@types/node@22.5.5)
+ vite-node: 2.0.5(@types/node@22.5.5)
why-is-node-running: 2.3.0
optionalDependencies:
- '@types/node': 20.16.5
+ '@types/node': 22.5.5
jsdom: 20.0.3
transitivePeerDependencies:
- less
From 2f9b03095665afeab634f8792bbd4a7624c99be1 Mon Sep 17 00:00:00 2001
From: Patrice Tisserand
Date: Sat, 14 Sep 2024 21:53:25 +0200
Subject: [PATCH 14/33] fix(CI): add missing shell property for action
---
.github/actions/install-snforge/action.yml | 2 ++
1 file changed, 2 insertions(+)
diff --git a/.github/actions/install-snforge/action.yml b/.github/actions/install-snforge/action.yml
index 3de238ac2..eebf800ea 100644
--- a/.github/actions/install-snforge/action.yml
+++ b/.github/actions/install-snforge/action.yml
@@ -9,11 +9,13 @@ runs:
using: "composite"
steps:
- name: Install universal sierra compiler
+ shell: bash
run: |
curl -L https://raw.githubusercontent.com/software-mansion/universal-sierra-compiler/master/scripts/install.sh | sh
echo "/root/.local/bin" >> ${GITHUB_PATH}
- name: Check universal sierra compiler version
+ shell: bash
run: universal-sierra-compiler --version
- name: Setup Scarb
From 55b36cbc3580f11af6786add3e32b0174b597c4b Mon Sep 17 00:00:00 2001
From: Patrice Tisserand
Date: Sat, 14 Sep 2024 22:01:02 +0200
Subject: [PATCH 15/33] turbo: ARKCHAIN_RPC_URL is no more needed
---
turbo.json | 50 ++++++++++++++++++++++++++++++++++++++------------
1 file changed, 38 insertions(+), 12 deletions(-)
diff --git a/turbo.json b/turbo.json
index 822314520..9dafe42a7 100644
--- a/turbo.json
+++ b/turbo.json
@@ -1,9 +1,16 @@
{
"$schema": "https://turbo.build/schema.json",
- "globalDependencies": ["**/.env.*local"],
- "tasks": {
+ "globalDependencies": [
+ "**/.env.*local"
+ ],
+ "globalDotEnv": [
+ ".env"
+ ],
+ "pipeline": {
"build:packages": {
- "dependsOn": ["^build"],
+ "dependsOn": [
+ "^build"
+ ],
"outputs": [
".next/**",
"!.next/cache/**",
@@ -13,7 +20,9 @@
},
"build": {
"cache": false,
- "dependsOn": ["^build"],
+ "dependsOn": [
+ "^build"
+ ],
"outputs": [
".next/**",
"!.next/cache/**",
@@ -22,26 +31,42 @@
]
},
"@ark-project/demo#build": {
- "dependsOn": ["^build"],
+ "dependsOn": [
+ "^build"
+ ],
"env": [
"NEXT_PUBLIC_NFT_API_KEY",
"NEXT_PUBLIC_ORDERBOOK_API_URL",
"NEXT_PUBLIC_NFT_API_URL"
],
- "outputs": [".next/**", "!.next/cache/**", ".vercel/output/**"]
+ "outputs": [
+ ".next/**",
+ "!.next/cache/**",
+ ".vercel/output/**"
+ ]
},
"dev": {
- "dependsOn": ["^dev"],
- "outputs": [".dist/**"]
+ "dependsOn": [
+ "^dev"
+ ],
+ "outputs": [
+ ".dist/**"
+ ]
},
"lint": {
- "dependsOn": ["^lint"]
+ "dependsOn": [
+ "^lint"
+ ]
},
"test": {
- "dependsOn": ["^test"]
+ "dependsOn": [
+ "^test"
+ ]
},
"lint:fix": {
- "dependsOn": ["^lint:fix"]
+ "dependsOn": [
+ "^lint:fix"
+ ]
},
"clean": {
"cache": false
@@ -77,6 +102,7 @@
},
"globalEnv": [
"ACCOUNT_CLASS_HASH",
+ "BROKER_ID",
"CI",
"SOLIS_ACCOUNT_CLASS_HASH",
"SOLIS_ADMIN_ADDRESS",
@@ -98,4 +124,4 @@
"STARKNET_ADMIN_PRIVATE_KEY",
"STARKNET_ADMIN_ADDRESS"
]
-}
+}
\ No newline at end of file
From 8ef8bbee1ba4654cefa662e65fe78e2680a655d5 Mon Sep 17 00:00:00 2001
From: Patrice Tisserand
Date: Sat, 14 Sep 2024 22:07:10 +0200
Subject: [PATCH 16/33] fix(CI): add missing step for devnet environment
---
.github/workflows/arkproject-contracts.yml | 3 +++
1 file changed, 3 insertions(+)
diff --git a/.github/workflows/arkproject-contracts.yml b/.github/workflows/arkproject-contracts.yml
index 979857317..77e18a5a9 100644
--- a/.github/workflows/arkproject-contracts.yml
+++ b/.github/workflows/arkproject-contracts.yml
@@ -68,6 +68,9 @@ jobs:
- name: Install SDK dependencies
uses: ./.github/actions/install-dependencies
+ - name: Setup environment for devnet
+ run: cp .env.devnet .env
+
- name: Deploy smart contract
run: pnpm deploy:starknet:local
From e23409754fa3c68eaafec11ea38a7fca5f93ba30 Mon Sep 17 00:00:00 2001
From: Patrice Tisserand
Date: Thu, 19 Sep 2024 18:52:07 +0200
Subject: [PATCH 17/33] CI: starknet-devnet-rs 0.2.0 have been released
---
.github/workflows/arkproject-contracts.yml | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/.github/workflows/arkproject-contracts.yml b/.github/workflows/arkproject-contracts.yml
index 77e18a5a9..9b42a6b0a 100644
--- a/.github/workflows/arkproject-contracts.yml
+++ b/.github/workflows/arkproject-contracts.yml
@@ -12,7 +12,7 @@ on:
env:
SCARB_VERSION: 2.7.1
- STARKNET_DEVNET_VERSION: 0.2.0-rc3
+ STARKNET_DEVNET_VERSION: 0.2.0
DEVNET_DUMP_PATH: /devnet-dump.json
jobs:
fmt:
@@ -61,7 +61,7 @@ jobs:
run: |
docker run -d --rm --name starknet-devnet \
-p 5050:5050 \
- ptisserand/starknet-devnet-rs:${STARKNET_DEVNET_VERSION} \
+ shardlabs/starknet-devnet-rs:${STARKNET_DEVNET_VERSION} \
--seed 0 --dump-path $DEVNET_DUMP_PATH --state-archive-capacity full
sleep 3 # Wait for 3 seconds for the Docker container to initialize
From 91454d85302e6835a7e199d48e038e3c7cdfdaf8 Mon Sep 17 00:00:00 2001
From: Patrice Tisserand
Date: Thu, 19 Sep 2024 19:17:48 +0200
Subject: [PATCH 18/33] feat(diri): update indexer to support new event format.
Update cainome to 0.4.0
---
Cargo.lock | 407 +++++++++++++-----
crates/diri/Cargo.toml | 17 +-
crates/diri/examples/display-events.rs | 198 +++++++++
crates/diri/src/lib.rs | 11 +-
crates/diri/src/mod.rs | 1 +
crates/diri/src/orderbook.rs | 136 ------
crates/diri/src/orderbook/events/mod.rs | 29 ++
.../src/orderbook/events/order_cancelled.rs | 108 +++++
.../src/orderbook/events/order_executed.rs | 371 ++++++++++++++++
.../src/orderbook/events/order_fulfilled.rs | 113 +++++
.../diri/src/orderbook/events/order_placed.rs | 200 +++++++++
.../src/orderbook/events/rollback_status.rs | 109 +++++
crates/diri/src/orderbook/mod.rs | 45 ++
crates/diri/src/storage/types.rs | 91 ++--
14 files changed, 1561 insertions(+), 275 deletions(-)
create mode 100644 crates/diri/examples/display-events.rs
create mode 100644 crates/diri/src/mod.rs
delete mode 100644 crates/diri/src/orderbook.rs
create mode 100644 crates/diri/src/orderbook/events/mod.rs
create mode 100644 crates/diri/src/orderbook/events/order_cancelled.rs
create mode 100644 crates/diri/src/orderbook/events/order_executed.rs
create mode 100644 crates/diri/src/orderbook/events/order_fulfilled.rs
create mode 100644 crates/diri/src/orderbook/events/order_placed.rs
create mode 100644 crates/diri/src/orderbook/events/rollback_status.rs
create mode 100644 crates/diri/src/orderbook/mod.rs
diff --git a/Cargo.lock b/Cargo.lock
index 89b54a661..60efb60b1 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -410,6 +410,12 @@ version = "0.21.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "35636a1494ede3b646cc98f74f8e62c773a38a659ebc777a2cf26b9b74171df9"
+[[package]]
+name = "base64"
+version = "0.22.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6"
+
[[package]]
name = "base64ct"
version = "1.6.0"
@@ -490,31 +496,48 @@ checksum = "a2bd12c1caf447e69cd4528f47f94d203fd2582878ecb9e9465484c4148a8223"
[[package]]
name = "cainome"
-version = "0.1.5"
-source = "git+https://github.com/cartridge-gg/cainome?tag=v0.1.8#e79deabeb989f73100c0b2e6a1fe5427858e40a8"
+version = "0.2.3"
+source = "git+https://github.com/cartridge-gg/cainome?tag=v0.4.0#0d29bb06b3f7cb7fcb8f0749c3b2ad105a5551dd"
dependencies = [
+ "anyhow",
+ "async-trait",
"cainome-cairo-serde",
"cainome-parser",
"cainome-rs",
+ "cainome-rs-macro",
+ "camino",
+ "clap",
+ "clap_complete",
+ "convert_case 0.6.0",
+ "serde",
+ "serde_json",
+ "starknet 0.11.0",
+ "starknet-types-core 0.1.5 (git+https://github.com/starknet-io/types-rs?rev=f98f048)",
+ "thiserror",
+ "tracing",
+ "tracing-subscriber",
+ "url",
]
[[package]]
name = "cainome-cairo-serde"
version = "0.1.0"
-source = "git+https://github.com/cartridge-gg/cainome?tag=v0.1.8#e79deabeb989f73100c0b2e6a1fe5427858e40a8"
+source = "git+https://github.com/cartridge-gg/cainome?tag=v0.4.0#0d29bb06b3f7cb7fcb8f0749c3b2ad105a5551dd"
dependencies = [
- "starknet 0.8.0",
+ "serde",
+ "starknet 0.11.0",
"thiserror",
]
[[package]]
name = "cainome-parser"
version = "0.1.0"
-source = "git+https://github.com/cartridge-gg/cainome?tag=v0.1.8#e79deabeb989f73100c0b2e6a1fe5427858e40a8"
+source = "git+https://github.com/cartridge-gg/cainome?tag=v0.4.0#0d29bb06b3f7cb7fcb8f0749c3b2ad105a5551dd"
dependencies = [
+ "convert_case 0.6.0",
"quote",
"serde_json",
- "starknet 0.8.0",
+ "starknet 0.11.0",
"syn 2.0.64",
"thiserror",
]
@@ -522,19 +545,48 @@ dependencies = [
[[package]]
name = "cainome-rs"
version = "0.1.0"
-source = "git+https://github.com/cartridge-gg/cainome?tag=v0.1.8#e79deabeb989f73100c0b2e6a1fe5427858e40a8"
+source = "git+https://github.com/cartridge-gg/cainome?tag=v0.4.0#0d29bb06b3f7cb7fcb8f0749c3b2ad105a5551dd"
dependencies = [
"anyhow",
"cainome-cairo-serde",
"cainome-parser",
+ "camino",
+ "prettyplease",
"proc-macro2",
"quote",
"serde_json",
- "starknet 0.8.0",
+ "starknet 0.11.0",
"syn 2.0.64",
"thiserror",
]
+[[package]]
+name = "cainome-rs-macro"
+version = "0.1.0"
+source = "git+https://github.com/cartridge-gg/cainome?tag=v0.4.0#0d29bb06b3f7cb7fcb8f0749c3b2ad105a5551dd"
+dependencies = [
+ "anyhow",
+ "cainome-cairo-serde",
+ "cainome-parser",
+ "cainome-rs",
+ "proc-macro-error",
+ "proc-macro2",
+ "quote",
+ "serde_json",
+ "starknet 0.11.0",
+ "syn 2.0.64",
+ "thiserror",
+]
+
+[[package]]
+name = "camino"
+version = "1.1.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8b96ec4966b5813e2c0507c1f86115c8c5abaadc3980879c3424042a02fd1ad3"
+dependencies = [
+ "serde",
+]
+
[[package]]
name = "cc"
version = "1.0.83"
@@ -597,6 +649,15 @@ dependencies = [
"strsim 0.11.1",
]
+[[package]]
+name = "clap_complete"
+version = "4.5.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b5a2d6eec27fce550d708b2be5d798797e5a55b246b323ef36924a0001996352"
+dependencies = [
+ "clap",
+]
+
[[package]]
name = "clap_derive"
version = "4.5.4"
@@ -646,6 +707,15 @@ version = "0.4.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6245d59a3e82a7fc217c5828a6692dbc6dfb63a0c8c90495621f7b9d79704a0e"
+[[package]]
+name = "convert_case"
+version = "0.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ec182b0ca2f35d8fc196cf3404988fd8b8c739a4d270ff118a398feb0cbec1ca"
+dependencies = [
+ "unicode-segmentation",
+]
+
[[package]]
name = "core-foundation"
version = "0.9.4"
@@ -823,7 +893,7 @@ version = "0.99.17"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "4fb810d30a7c1953f91334de7244731fc3f3c10d7fe163338a35b9f640960321"
dependencies = [
- "convert_case",
+ "convert_case 0.4.0",
"proc-macro2",
"quote",
"rustc_version",
@@ -859,10 +929,12 @@ dependencies = [
"regex",
"serde",
"serde_json",
- "starknet 0.8.0",
+ "starknet 0.11.0",
+ "starknet-types-core 0.1.5 (git+https://github.com/starknet-io/types-rs?rev=f98f048)",
"thiserror",
"tokio",
"tracing",
+ "tracing-subscriber",
"url",
]
@@ -1510,6 +1582,7 @@ checksum = "d530e1a18b1cb4c484e6e34556a0d948706958449fca0cab753d649f2bce3d1f"
dependencies = [
"equivalent",
"hashbrown 0.14.3",
+ "serde",
]
[[package]]
@@ -1586,6 +1659,28 @@ dependencies = [
"cpufeatures",
]
+[[package]]
+name = "lambdaworks-crypto"
+version = "0.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7fb5d4f22241504f7c7b8d2c3a7d7835d7c07117f10bff2a7d96a9ef6ef217c3"
+dependencies = [
+ "lambdaworks-math",
+ "serde",
+ "sha2",
+ "sha3",
+]
+
+[[package]]
+name = "lambdaworks-math"
+version = "0.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "358e172628e713b80a530a59654154bfc45783a6ed70ea284839800cebdf8f97"
+dependencies = [
+ "serde",
+ "serde_json",
+]
+
[[package]]
name = "lazy_static"
version = "1.4.0"
@@ -1801,6 +1896,12 @@ dependencies = [
"zeroize",
]
+[[package]]
+name = "num-conv"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "51d515d32fb182ee37cda2ccdcb92950d6a3c2893aa280e540671c2cd0f3b1d9"
+
[[package]]
name = "num-integer"
version = "0.1.45"
@@ -1824,9 +1925,9 @@ dependencies = [
[[package]]
name = "num-traits"
-version = "0.2.17"
+version = "0.2.19"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "39e3200413f237f41ab11ad6d161bc7239c84dcb631773ccd7de3dfe4b5c267c"
+checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841"
dependencies = [
"autocfg",
"libm",
@@ -2096,6 +2197,16 @@ dependencies = [
"termtree",
]
+[[package]]
+name = "prettyplease"
+version = "0.2.20"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5f12335488a2f3b0a83b14edad48dca9879ce89b2edd10e80237e4e852dd645e"
+dependencies = [
+ "proc-macro2",
+ "syn 2.0.64",
+]
+
[[package]]
name = "primitive-types"
version = "0.12.2"
@@ -2624,7 +2735,25 @@ dependencies = [
"indexmap 1.9.3",
"serde",
"serde_json",
- "serde_with_macros",
+ "serde_with_macros 2.3.3",
+ "time",
+]
+
+[[package]]
+name = "serde_with"
+version = "3.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "69cecfa94848272156ea67b2b1a53f20fc7bc638c4a46d2f8abde08f05f4b857"
+dependencies = [
+ "base64 0.22.1",
+ "chrono",
+ "hex",
+ "indexmap 1.9.3",
+ "indexmap 2.1.0",
+ "serde",
+ "serde_derive",
+ "serde_json",
+ "serde_with_macros 3.9.0",
"time",
]
@@ -2640,6 +2769,18 @@ dependencies = [
"syn 2.0.64",
]
+[[package]]
+name = "serde_with_macros"
+version = "3.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a8fee4991ef4f274617a51ad4af30519438dacb2f56ac773b08a1922ff743350"
+dependencies = [
+ "darling",
+ "proc-macro2",
+ "quote",
+ "syn 2.0.64",
+]
+
[[package]]
name = "sha1"
version = "0.10.6"
@@ -2977,29 +3118,13 @@ dependencies = [
"starknet-accounts 0.6.1",
"starknet-contract 0.6.0",
"starknet-core 0.7.2",
- "starknet-crypto",
+ "starknet-crypto 0.6.2",
"starknet-ff",
- "starknet-macros",
+ "starknet-macros 0.1.7",
"starknet-providers 0.7.0",
"starknet-signers 0.5.0",
]
-[[package]]
-name = "starknet"
-version = "0.8.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5eb139c5e6f6c6da627080e33cc00b3fc1c9733403034ca1ee9c42a95c337c7f"
-dependencies = [
- "starknet-accounts 0.7.0",
- "starknet-contract 0.7.0",
- "starknet-core 0.8.0",
- "starknet-crypto",
- "starknet-ff",
- "starknet-macros",
- "starknet-providers 0.8.0",
- "starknet-signers 0.6.0",
-]
-
[[package]]
name = "starknet"
version = "0.10.0"
@@ -3009,13 +3134,27 @@ dependencies = [
"starknet-accounts 0.9.0",
"starknet-contract 0.9.0",
"starknet-core 0.10.0",
- "starknet-crypto",
+ "starknet-crypto 0.6.2",
"starknet-ff",
- "starknet-macros",
+ "starknet-macros 0.1.7",
"starknet-providers 0.10.0",
"starknet-signers 0.8.0",
]
+[[package]]
+name = "starknet"
+version = "0.11.0"
+source = "git+https://github.com/xJonathanLEI/starknet-rs?rev=2ddc694#2ddc69479d326ed154df438d22f2d720fbba746e"
+dependencies = [
+ "starknet-accounts 0.10.0",
+ "starknet-contract 0.10.0",
+ "starknet-core 0.11.1",
+ "starknet-crypto 0.7.1",
+ "starknet-macros 0.2.0",
+ "starknet-providers 0.11.0",
+ "starknet-signers 0.9.0",
+]
+
[[package]]
name = "starknet-accounts"
version = "0.6.1"
@@ -3032,29 +3171,29 @@ dependencies = [
[[package]]
name = "starknet-accounts"
-version = "0.7.0"
+version = "0.9.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "3743932c80ad2a5868c2dd4ef729de4e12060c88e73e4bb678a5f8e51b105e53"
+checksum = "2095d7584608ae1707bd1cf2889368ab3734d9f54e4fcef4765cba1f3b3f7618"
dependencies = [
"async-trait",
"auto_impl",
- "starknet-core 0.8.0",
- "starknet-providers 0.8.0",
- "starknet-signers 0.6.0",
+ "starknet-core 0.10.0",
+ "starknet-providers 0.10.0",
+ "starknet-signers 0.8.0",
"thiserror",
]
[[package]]
name = "starknet-accounts"
-version = "0.9.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "2095d7584608ae1707bd1cf2889368ab3734d9f54e4fcef4765cba1f3b3f7618"
+version = "0.10.0"
+source = "git+https://github.com/xJonathanLEI/starknet-rs?rev=2ddc694#2ddc69479d326ed154df438d22f2d720fbba746e"
dependencies = [
"async-trait",
"auto_impl",
- "starknet-core 0.10.0",
- "starknet-providers 0.10.0",
- "starknet-signers 0.8.0",
+ "starknet-core 0.11.1",
+ "starknet-crypto 0.7.1",
+ "starknet-providers 0.11.0",
+ "starknet-signers 0.9.0",
"thiserror",
]
@@ -3066,7 +3205,7 @@ checksum = "d858efc93d85de95065a5732cb3e94d0c746674964c0859aab442ffbb9de76b4"
dependencies = [
"serde",
"serde_json",
- "serde_with",
+ "serde_with 2.3.3",
"starknet-accounts 0.6.1",
"starknet-core 0.7.2",
"starknet-providers 0.7.0",
@@ -3075,31 +3214,30 @@ dependencies = [
[[package]]
name = "starknet-contract"
-version = "0.7.0"
+version = "0.9.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4e55aac528c5376e1626d5a8d4daaf280bfd08f909dadc729e5b009203d6ec21"
+checksum = "cb3b73d437b4d62241612d13fce612602de6684c149cccf696e76a20757e2156"
dependencies = [
"serde",
"serde_json",
- "serde_with",
- "starknet-accounts 0.7.0",
- "starknet-core 0.8.0",
- "starknet-providers 0.8.0",
+ "serde_with 2.3.3",
+ "starknet-accounts 0.9.0",
+ "starknet-core 0.10.0",
+ "starknet-providers 0.10.0",
"thiserror",
]
[[package]]
name = "starknet-contract"
-version = "0.9.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "cb3b73d437b4d62241612d13fce612602de6684c149cccf696e76a20757e2156"
+version = "0.10.0"
+source = "git+https://github.com/xJonathanLEI/starknet-rs?rev=2ddc694#2ddc69479d326ed154df438d22f2d720fbba746e"
dependencies = [
"serde",
"serde_json",
- "serde_with",
- "starknet-accounts 0.9.0",
- "starknet-core 0.10.0",
- "starknet-providers 0.10.0",
+ "serde_with 3.9.0",
+ "starknet-accounts 0.10.0",
+ "starknet-core 0.11.1",
+ "starknet-providers 0.11.0",
"thiserror",
]
@@ -3115,17 +3253,17 @@ dependencies = [
"serde",
"serde_json",
"serde_json_pythonic",
- "serde_with",
+ "serde_with 2.3.3",
"sha3",
- "starknet-crypto",
+ "starknet-crypto 0.6.2",
"starknet-ff",
]
[[package]]
name = "starknet-core"
-version = "0.8.0"
+version = "0.10.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ff50e281d4fdb97988a3d5c7b7cae22b9d67bb2ef9be2cfafc17a1e35542cb53"
+checksum = "5ed286d637e34fb8ae1cd2f9615120ec8ff38d1cffd311ed7fdd497cdd2bd01f"
dependencies = [
"base64 0.21.5",
"flate2",
@@ -3133,28 +3271,28 @@ dependencies = [
"serde",
"serde_json",
"serde_json_pythonic",
- "serde_with",
+ "serde_with 2.3.3",
"sha3",
- "starknet-crypto",
+ "starknet-crypto 0.6.2",
"starknet-ff",
]
[[package]]
name = "starknet-core"
-version = "0.10.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5ed286d637e34fb8ae1cd2f9615120ec8ff38d1cffd311ed7fdd497cdd2bd01f"
+version = "0.11.1"
+source = "git+https://github.com/xJonathanLEI/starknet-rs?rev=2ddc694#2ddc69479d326ed154df438d22f2d720fbba746e"
dependencies = [
"base64 0.21.5",
+ "crypto-bigint",
"flate2",
"hex",
"serde",
"serde_json",
"serde_json_pythonic",
- "serde_with",
+ "serde_with 3.9.0",
"sha3",
- "starknet-crypto",
- "starknet-ff",
+ "starknet-crypto 0.7.1",
+ "starknet-types-core 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
@@ -3172,18 +3310,36 @@ dependencies = [
"rfc6979",
"sha2",
"starknet-crypto-codegen",
- "starknet-curve",
+ "starknet-curve 0.4.2",
"starknet-ff",
"zeroize",
]
+[[package]]
+name = "starknet-crypto"
+version = "0.7.1"
+source = "git+https://github.com/xJonathanLEI/starknet-rs?rev=2ddc694#2ddc69479d326ed154df438d22f2d720fbba746e"
+dependencies = [
+ "crypto-bigint",
+ "hex",
+ "hmac",
+ "num-bigint",
+ "num-integer",
+ "num-traits",
+ "rfc6979",
+ "sha2",
+ "starknet-curve 0.5.0",
+ "starknet-types-core 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)",
+ "zeroize",
+]
+
[[package]]
name = "starknet-crypto-codegen"
version = "0.3.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "bbc159a1934c7be9761c237333a57febe060ace2bc9e3b337a59a37af206d19f"
dependencies = [
- "starknet-curve",
+ "starknet-curve 0.4.2",
"starknet-ff",
"syn 2.0.64",
]
@@ -3197,6 +3353,14 @@ dependencies = [
"starknet-ff",
]
+[[package]]
+name = "starknet-curve"
+version = "0.5.0"
+source = "git+https://github.com/xJonathanLEI/starknet-rs?rev=2ddc694#2ddc69479d326ed154df438d22f2d720fbba746e"
+dependencies = [
+ "starknet-types-core 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
[[package]]
name = "starknet-ff"
version = "0.3.7"
@@ -3222,6 +3386,15 @@ dependencies = [
"syn 2.0.64",
]
+[[package]]
+name = "starknet-macros"
+version = "0.2.0"
+source = "git+https://github.com/xJonathanLEI/starknet-rs?rev=2ddc694#2ddc69479d326ed154df438d22f2d720fbba746e"
+dependencies = [
+ "starknet-core 0.11.1",
+ "syn 2.0.64",
+]
+
[[package]]
name = "starknet-providers"
version = "0.7.0"
@@ -3236,7 +3409,7 @@ dependencies = [
"reqwest",
"serde",
"serde_json",
- "serde_with",
+ "serde_with 2.3.3",
"starknet-core 0.7.2",
"thiserror",
"url",
@@ -3244,9 +3417,9 @@ dependencies = [
[[package]]
name = "starknet-providers"
-version = "0.8.0"
+version = "0.10.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5b08084f36ff7f11743ec71f33f0b11d439cbe0524058def299eb47de1ef1c28"
+checksum = "b6abf40ffcbe3b887b4d5cfc8ab73170c816b4aa78d1d4ad59abd3fb3b0f53cd"
dependencies = [
"async-trait",
"auto_impl",
@@ -3256,28 +3429,28 @@ dependencies = [
"reqwest",
"serde",
"serde_json",
- "serde_with",
- "starknet-core 0.8.0",
+ "serde_with 2.3.3",
+ "starknet-core 0.10.0",
"thiserror",
"url",
]
[[package]]
name = "starknet-providers"
-version = "0.10.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b6abf40ffcbe3b887b4d5cfc8ab73170c816b4aa78d1d4ad59abd3fb3b0f53cd"
+version = "0.11.0"
+source = "git+https://github.com/xJonathanLEI/starknet-rs?rev=2ddc694#2ddc69479d326ed154df438d22f2d720fbba746e"
dependencies = [
"async-trait",
"auto_impl",
"ethereum-types",
"flate2",
+ "getrandom",
"log",
"reqwest",
"serde",
"serde_json",
- "serde_with",
- "starknet-core 0.10.0",
+ "serde_with 3.9.0",
+ "starknet-core 0.11.1",
"thiserror",
"url",
]
@@ -3294,42 +3467,69 @@ dependencies = [
"eth-keystore",
"rand",
"starknet-core 0.7.2",
- "starknet-crypto",
+ "starknet-crypto 0.6.2",
"thiserror",
]
[[package]]
name = "starknet-signers"
-version = "0.6.0"
+version = "0.8.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "91919d8f318f0b5bcc4ff5849fbd3fb46adaaa72e0bf204742bab7c822425ff4"
+checksum = "5e9a2bd4fd66090003c3b7f0d76476e5b63cd44f6a49ede2442673f4427d5a40"
dependencies = [
"async-trait",
"auto_impl",
"crypto-bigint",
"eth-keystore",
"rand",
- "starknet-core 0.8.0",
- "starknet-crypto",
+ "starknet-core 0.10.0",
+ "starknet-crypto 0.6.2",
"thiserror",
]
[[package]]
name = "starknet-signers"
-version = "0.8.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5e9a2bd4fd66090003c3b7f0d76476e5b63cd44f6a49ede2442673f4427d5a40"
+version = "0.9.0"
+source = "git+https://github.com/xJonathanLEI/starknet-rs?rev=2ddc694#2ddc69479d326ed154df438d22f2d720fbba746e"
dependencies = [
"async-trait",
"auto_impl",
"crypto-bigint",
"eth-keystore",
+ "getrandom",
"rand",
- "starknet-core 0.10.0",
- "starknet-crypto",
+ "starknet-core 0.11.1",
+ "starknet-crypto 0.7.1",
"thiserror",
]
+[[package]]
+name = "starknet-types-core"
+version = "0.1.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ce6bacf0ba19bc721e518bc4bf389ff13daa8a7c5db5fd320600473b8aa9fcbd"
+dependencies = [
+ "lambdaworks-crypto",
+ "lambdaworks-math",
+ "num-bigint",
+ "num-integer",
+ "num-traits",
+ "serde",
+]
+
+[[package]]
+name = "starknet-types-core"
+version = "0.1.5"
+source = "git+https://github.com/starknet-io/types-rs?rev=f98f048#f98f048efa776f1f8da81a19f337a9b8c2f4b8f7"
+dependencies = [
+ "lambdaworks-crypto",
+ "lambdaworks-math",
+ "num-bigint",
+ "num-integer",
+ "num-traits",
+ "serde",
+]
+
[[package]]
name = "static_assertions"
version = "1.1.0"
@@ -3486,12 +3686,13 @@ dependencies = [
[[package]]
name = "time"
-version = "0.3.30"
+version = "0.3.36"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c4a34ab300f2dee6e562c10a046fc05e358b29f9bf92277f30c3c8d82275f6f5"
+checksum = "5dfd88e563464686c916c7e46e623e520ddc6d79fa6641390f2e3fa86e83e885"
dependencies = [
"deranged",
"itoa",
+ "num-conv",
"powerfmt",
"serde",
"time-core",
@@ -3506,10 +3707,11 @@ checksum = "ef927ca75afb808a4d64dd374f00a2adf8d0fcff8e7b184af886c3c87ec4a3f3"
[[package]]
name = "time-macros"
-version = "0.2.15"
+version = "0.2.18"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4ad70d68dba9e1f8aceda7aa6711965dfec1cac869f311a51bd08b3a2ccbce20"
+checksum = "3f252a68540fde3a3877aeea552b832b40ab9a69e318efd078774a01ddee1ccf"
dependencies = [
+ "num-conv",
"time-core",
]
@@ -3690,6 +3892,16 @@ dependencies = [
"tracing-core",
]
+[[package]]
+name = "tracing-serde"
+version = "0.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bc6b213177105856957181934e4920de57730fc69bf42c37ee5bb664d406d9e1"
+dependencies = [
+ "serde",
+ "tracing-core",
+]
+
[[package]]
name = "tracing-subscriber"
version = "0.3.18"
@@ -3700,12 +3912,15 @@ dependencies = [
"nu-ansi-term",
"once_cell",
"regex",
+ "serde",
+ "serde_json",
"sharded-slab",
"smallvec",
"thread_local",
"tracing",
"tracing-core",
"tracing-log 0.2.0",
+ "tracing-serde",
]
[[package]]
diff --git a/crates/diri/Cargo.toml b/crates/diri/Cargo.toml
index 093d45848..44c55cd2c 100644
--- a/crates/diri/Cargo.toml
+++ b/crates/diri/Cargo.toml
@@ -7,6 +7,13 @@ Diri is a library / binary related to the
indexation of Solis data (orderbook smart contracts).
"""
+[lib]
+path = "src/lib.rs"
+
+[[example]]
+name = "display-events"
+path = "examples/display-events.rs"
+
[dependencies]
futures = "0.3.28"
serde = { version = "1.0", features = ["derive"] }
@@ -22,15 +29,19 @@ dotenv = "0.15.0"
thiserror = "1.0.32"
# For now, Diri can't use the ark-starknet due to the dependency
# on ArkProjectNFTs for of starknet-rs.
-starknet = "0.8.0"
+starknet = { git = "https://github.com/xJonathanLEI/starknet-rs", rev = "2ddc694" }
+starknet-types-core = { git = "https://github.com/starknet-io/types-rs", rev = "f98f048" }
tracing = "0.1"
num-bigint = "0.4.4"
-num-traits = "0.2.17"
+num-traits = "0.2.19"
-cainome = { git = "https://github.com/cartridge-gg/cainome", tag = "v0.1.8", features = [
+cainome = { git = "https://github.com/cartridge-gg/cainome", tag = "v0.4.0", features = [
"abigen-rs",
] }
anyhow.workspace = true
async-trait.workspace = true
tokio.workspace = true
+
+[dev-dependencies]
+tracing-subscriber = { version = "0.3.18", features = ["env-filter"] }
diff --git a/crates/diri/examples/display-events.rs b/crates/diri/examples/display-events.rs
new file mode 100644
index 000000000..65ac7c812
--- /dev/null
+++ b/crates/diri/examples/display-events.rs
@@ -0,0 +1,198 @@
+use anyhow::Result;
+use async_trait::async_trait;
+use diri::event_handler::EventHandler;
+use diri::storage::types::CancelledData;
+use diri::storage::types::ExecutedData;
+use diri::storage::types::FulfilledData;
+use diri::storage::types::PlacedData;
+use diri::storage::types::RollbackStatusData;
+use diri::storage::Storage;
+use diri::storage::StorageResult;
+use diri::Diri;
+use dotenv::dotenv;
+use starknet::core::types::BlockId;
+use starknet::providers::jsonrpc::HttpTransport;
+use starknet::providers::AnyProvider;
+use starknet::providers::JsonRpcClient;
+use starknet::providers::Provider;
+use url::Url;
+
+use std::{env, sync::Arc};
+
+use tracing::{error, info, trace, warn};
+use tracing_subscriber::fmt;
+use tracing_subscriber::EnvFilter;
+
+#[tokio::main]
+async fn main() -> Result<()> {
+ dotenv().ok();
+
+ init_logging();
+
+ info!("Starting.....!");
+
+ let rpc_url = env::var("STARKNET_RPC").expect("STARKNET_RPC not set");
+ let rpc_url_converted = Url::parse(&rpc_url).unwrap();
+
+ let provider = Arc::new(AnyProvider::JsonRpcHttp(JsonRpcClient::new(
+ HttpTransport::new(rpc_url_converted.clone()),
+ )));
+
+ // Quick launch locally:
+ // docker-compose up -d arkchain_postgres
+ // cd ark-sqlx
+ // sqlx database reset --database-url postgres://postgres:123@localhost:5432/arkchain-marketplace --source marketplace
+ let storage = FakeStorage {};
+ let handler = DefaultEventHandler {};
+
+ let indexer = Arc::new(Diri::new(
+ provider.clone(),
+ Arc::new(storage),
+ Arc::new(handler),
+ ));
+
+ let sleep_secs = 1;
+ let mut from = 0;
+ let range = 1;
+
+ // Set to None to keep polling the head of chain.
+ let to = None;
+
+ info!(
+ "Starting arkchain indexer: from:{} to:{:?} range:{}",
+ from, to, range,
+ );
+
+ loop {
+ let latest_block = match provider.block_number().await {
+ Ok(block_number) => block_number,
+ Err(e) => {
+ error!("Can't get arkchain block number: {}", e);
+ tokio::time::sleep(tokio::time::Duration::from_secs(sleep_secs)).await;
+ continue;
+ }
+ };
+
+ trace!("Latest block {latest_block} (from={from})");
+
+ let start = from;
+ let mut end = std::cmp::min(from + range, latest_block);
+ if let Some(to) = to {
+ if end > to {
+ end = to
+ }
+ }
+
+ if start > end {
+ trace!("Nothing to fetch at block {start}");
+ tokio::time::sleep(tokio::time::Duration::from_secs(sleep_secs)).await;
+ continue;
+ }
+
+ trace!("Fetching blocks {start} - {end}");
+ match indexer
+ .index_block_range(BlockId::Number(start), BlockId::Number(end))
+ .await
+ {
+ Ok(_) => {
+ trace!("Blocks successfully indexed");
+
+ if let Some(to) = to {
+ if end >= to {
+ trace!("`to` block was reached, exit.");
+ return Ok(());
+ }
+ }
+
+ // +1 to not re-index the end block.
+ from = end + 1;
+ }
+ Err(e) => {
+ error!("Blocks indexing error: {}", e);
+
+ // TODO: for now, any failure on the block range, we skip it.
+ // Can be changed as needed.
+ warn!("Skipping blocks range: {} - {}", start, end);
+ from = end + 1;
+ }
+ };
+
+ tokio::time::sleep(tokio::time::Duration::from_secs(sleep_secs)).await;
+ }
+}
+
+/// Initializes the logging, ensuring that the `RUST_LOG` environment
+/// variable is always considered first.
+fn init_logging() {
+ const DEFAULT_LOG_FILTER: &str = "info,diri=trace";
+
+ tracing::subscriber::set_global_default(
+ fmt::Subscriber::builder()
+ .with_env_filter(
+ EnvFilter::try_from_default_env()
+ .or(EnvFilter::try_new(DEFAULT_LOG_FILTER))
+ .expect("Invalid RUST_LOG filters"),
+ )
+ .finish(),
+ )
+ .expect("Failed to set the global tracing subscriber");
+}
+
+struct FakeStorage;
+
+#[async_trait]
+impl Storage for FakeStorage {
+ async fn register_placed(
+ &self,
+ block_id: u64,
+ block_timestamp: u64,
+ order: &PlacedData,
+ ) -> StorageResult<()> {
+ Ok(())
+ }
+
+ async fn register_cancelled(
+ &self,
+ block_id: u64,
+ block_timestamp: u64,
+ order: &CancelledData,
+ ) -> StorageResult<()> {
+ Ok(())
+ }
+
+ async fn register_fulfilled(
+ &self,
+ block_id: u64,
+ block_timestamp: u64,
+ order: &FulfilledData,
+ ) -> StorageResult<()> {
+ Ok(())
+ }
+
+ async fn register_executed(
+ &self,
+ block_id: u64,
+ block_timestamp: u64,
+ order: &ExecutedData,
+ ) -> StorageResult<()> {
+ Ok(())
+ }
+
+ async fn status_back_to_open(
+ &self,
+ block_id: u64,
+ block_timestamp: u64,
+ order: &RollbackStatusData,
+ ) -> StorageResult<()> {
+ Ok(())
+ }
+}
+
+struct DefaultEventHandler;
+
+#[async_trait]
+impl EventHandler for DefaultEventHandler {
+ async fn on_block_processed(&self, block_number: u64) {
+ info!("event: block processed {:?}", block_number);
+ }
+}
diff --git a/crates/diri/src/lib.rs b/crates/diri/src/lib.rs
index 661d41420..971ef21c2 100644
--- a/crates/diri/src/lib.rs
+++ b/crates/diri/src/lib.rs
@@ -7,7 +7,7 @@ use event_handler::EventHandler;
mod orderbook;
use starknet::core::types::{
- BlockId, EmittedEvent, EventFilter, FieldElement, MaybePendingBlockWithTxHashes,
+ BlockId, EmittedEvent, EventFilter, Felt, MaybePendingBlockWithTxHashes,
};
use starknet::macros::selector;
use starknet::providers::{AnyProvider, Provider, ProviderError};
@@ -80,6 +80,7 @@ impl Diri {
let block_timestamp = self.block_time(BlockId::Number(block_number)).await?;
for any_event in events {
+ trace!("Event: {:?}", any_event.clone());
let orderbook_event: Event = match any_event.try_into() {
Ok(ev) => ev,
Err(e) => {
@@ -119,7 +120,9 @@ impl Diri {
.status_back_to_open(block_number, block_timestamp, &ev.into())
.await?;
}
- _ => warn!("Orderbook event not handled: {:?}", orderbook_event),
+ _ => {
+ warn!("Orderbook event not handled: {:?}", orderbook_event)
+ }
};
}
@@ -145,7 +148,7 @@ impl Diri {
&self,
from_block: BlockId,
to_block: BlockId,
- keys: Option>>,
+ keys: Option>>,
) -> Result>, IndexerError> {
// TODO: setup key filtering here.
@@ -169,7 +172,7 @@ impl Diri {
event_page.events.iter().for_each(|e| {
events
- .entry(e.block_number)
+ .entry(e.block_number.unwrap())
.and_modify(|v| v.push(e.clone()))
.or_insert(vec![e.clone()]);
});
diff --git a/crates/diri/src/mod.rs b/crates/diri/src/mod.rs
new file mode 100644
index 000000000..959ef2db9
--- /dev/null
+++ b/crates/diri/src/mod.rs
@@ -0,0 +1 @@
+mod orderbook;
diff --git a/crates/diri/src/orderbook.rs b/crates/diri/src/orderbook.rs
deleted file mode 100644
index 52d5a302f..000000000
--- a/crates/diri/src/orderbook.rs
+++ /dev/null
@@ -1,136 +0,0 @@
-use cainome::rs::abigen;
-use starknet::{
- core::types::{EmittedEvent, FieldElement},
- macros::selector,
-};
-
-// TODO: check a way to fix the path... because when compiled from
-// ark-services, the path is not valid as it's relative to Cargo manifest file.
-abigen!(
- Orderbook,
- "./artifacts/orderbook.abi.json",
- type_aliases {
- ark_orderbook::orderbook::orderbook::Event as EventV0;
- ark_orderbook::orderbook::orderbook::OrderExecuted as OrderExecutedV0;
- }
-);
-
-abigen!(
- OrderBook,
- r#"
- [
- {
- "type": "event",
- "name": "ark_orderbook::orderbook::orderbook::Event",
- "kind": "enum",
- "variants": [
- {
- "name": "OrderExecuted",
- "type": "ark_orderbook::orderbook::orderbook::OrderExecuted",
- "kind": "nested"
- }
- ]
- },
- {
- "type": "event",
- "name": "ark_orderbook::orderbook::orderbook::OrderExecuted",
- "kind": "struct",
- "members": [
- {
- "name": "order_hash",
- "type": "core::felt252",
- "kind": "key"
- },
- {
- "name": "order_status",
- "type": "ark_common::protocol::order_types::OrderStatus",
- "kind": "key"
- },
- {
- "name": "version",
- "type": "core::integer::u8",
- "kind": "data"
- },
- {
- "name": "transaction_hash",
- "type": "core::felt252",
- "kind": "data"
- },
- {
- "name": "from",
- "type": "core::starknet::contract_address::ContractAddress",
- "kind": "data"
- },
- {
- "name": "to",
- "type": "core::starknet::contract_address::ContractAddress",
- "kind": "data"
- }
- ]
- }
- ]
- "#
-, type_aliases {
- ark_orderbook::orderbook::orderbook::Event as EventV1;
- ark_orderbook::orderbook::orderbook::OrderExecuted as OrderExecutedV1;
- }
-);
-
-#[derive(Debug)]
-pub(crate) enum OrderExecuted {
- V0(OrderExecutedV0),
- V1(OrderExecutedV1),
-}
-
-#[derive(Debug)]
-pub(crate) enum Event {
- OrderPlaced(OrderPlaced),
- OrderExecuted(OrderExecuted),
- OrderCancelled(OrderCancelled),
- RollbackStatus(RollbackStatus),
- OrderFulfilled(OrderFulfilled),
- Upgraded(Upgraded),
- Unknown,
-}
-
-impl From for Event {
- fn from(ev: EmittedEvent) -> Self {
- if ev.keys[0] == selector!("OrderExecuted") {
- if ev.data.len() > 0 {
- let version = ev.data[0];
- if version == FieldElement::ONE {}
- // Version 1
- TryInto::::try_into(ev).unwrap().into()
- } else {
- // Version 0
- TryInto::::try_into(ev).unwrap().into()
- }
- } else {
- match TryInto::::try_into(ev) {
- Ok(ev) => ev.into(),
- Err(_) => Event::Unknown,
- }
- }
- }
-}
-
-impl From for Event {
- fn from(ev: EventV0) -> Self {
- match ev {
- EventV0::OrderCancelled(ev) => Event::OrderCancelled(ev),
- EventV0::OrderPlaced(ev) => Event::OrderPlaced(ev),
- EventV0::OrderFulfilled(ev) => Event::OrderFulfilled(ev),
- EventV0::RollbackStatus(ev) => Event::RollbackStatus(ev),
- EventV0::Upgraded(ev) => Event::Upgraded(ev),
- EventV0::OrderExecuted(ev) => Event::OrderExecuted(OrderExecuted::V0(ev)),
- }
- }
-}
-
-impl From for Event {
- fn from(ev: EventV1) -> Self {
- match ev {
- EventV1::OrderExecuted(ev) => Event::OrderExecuted(OrderExecuted::V1(ev)),
- }
- }
-}
diff --git a/crates/diri/src/orderbook/events/mod.rs b/crates/diri/src/orderbook/events/mod.rs
new file mode 100644
index 000000000..27b89813e
--- /dev/null
+++ b/crates/diri/src/orderbook/events/mod.rs
@@ -0,0 +1,29 @@
+pub(crate) mod order_cancelled;
+pub(crate) mod order_executed;
+pub(crate) mod order_fulfilled;
+pub(crate) mod order_placed;
+pub(crate) mod rollback_status;
+
+pub(crate) use order_cancelled::OrderCancelled;
+pub(crate) use order_executed::OrderExecuted;
+pub(crate) use order_fulfilled::OrderFulfilled;
+pub(crate) use order_placed::OrderPlaced;
+pub(crate) use rollback_status::RollbackStatus;
+
+pub(crate) use cainome::cairo_serde::U256;
+use starknet::{core::types::Felt, macros::selector};
+
+#[derive(Debug)]
+pub(crate) enum OrderbookParseError {
+ Selector,
+ KeyLength,
+ DataLength,
+ UnsupportedVersion,
+ UnknownError,
+}
+
+pub const ORDER_CANCELLED_SELECTOR: Felt = selector!("OrderCancelled");
+pub const ORDER_EXECUTED_SELECTOR: Felt = selector!("OrderExecuted");
+pub const ORDER_FULFILLED_SELECTOR: Felt = selector!("OrderFulfilled");
+pub const ORDER_PLACED_SELECTOR: Felt = selector!("OrderPlaced");
+pub const ROLLBACK_STATUS_SELECTOR: Felt = selector!("RollbackStatus");
diff --git a/crates/diri/src/orderbook/events/order_cancelled.rs b/crates/diri/src/orderbook/events/order_cancelled.rs
new file mode 100644
index 000000000..c26838630
--- /dev/null
+++ b/crates/diri/src/orderbook/events/order_cancelled.rs
@@ -0,0 +1,108 @@
+use cainome::rs::abigen;
+use starknet::core::types::{EmittedEvent, Felt};
+
+use super::{OrderbookParseError, ORDER_CANCELLED_SELECTOR};
+
+abigen!(
+ V1,
+ r#"
+ [
+ {
+ "type": "enum",
+ "name": "ark_common::protocol::order_types::OrderType",
+ "variants": [
+ {
+ "name": "Listing",
+ "type": "()"
+ },
+ {
+ "name": "Auction",
+ "type": "()"
+ },
+ {
+ "name": "Offer",
+ "type": "()"
+ },
+ {
+ "name": "CollectionOffer",
+ "type": "()"
+ }
+ ]
+ },
+ {
+ "type": "event",
+ "name": "ark_component::orderbook::orderbook::OrderbookComponent::Event",
+ "kind": "enum",
+ "variants": [
+ {
+ "name": "OrderCancelled",
+ "type": "ark_component::orderbook::orderbook::OrderbookComponent::OrderCancelled",
+ "kind": "nested"
+ }
+ ]
+ },
+ {
+ "type": "event",
+ "name": "ark_component::orderbook::orderbook::OrderbookComponent::OrderCancelled",
+ "kind": "struct",
+ "members": [
+ {
+ "name": "order_hash",
+ "type": "core::felt252",
+ "kind": "key"
+ },
+ {
+ "name": "reason",
+ "type": "core::felt252",
+ "kind": "key"
+ },
+ {
+ "name": "order_type",
+ "type": "ark_common::protocol::order_types::OrderType",
+ "kind": "key"
+ },
+ {
+ "name": "version",
+ "type": "core::integer::u8",
+ "kind": "data"
+ }
+ ]
+ }
+ ]"#,
+ type_aliases {
+ ark_component::orderbook::orderbook::OrderbookComponent::Event as EventV1;
+ ark_component::orderbook::orderbook::OrderbookComponent::OrderCancelled as OrderCancelledV1;
+ },
+ derives(Debug),
+);
+
+#[derive(Debug)]
+pub(crate) enum OrderCancelled {
+ V1(OrderCancelledV1),
+}
+
+impl TryFrom for OrderCancelled {
+ type Error = OrderbookParseError;
+
+ fn try_from(ev: EmittedEvent) -> Result {
+ if ev.keys[0] == ORDER_CANCELLED_SELECTOR {
+ if !ev.data.is_empty() {
+ let version = ev.data[0];
+ if version == Felt::ONE {
+ match TryInto::::try_into(ev) {
+ Ok(event) => match event {
+ EventV1::OrderCancelled(ev) => return Ok(OrderCancelled::V1(ev)),
+ },
+ Err(_) => return Err(OrderbookParseError::UnknownError),
+ }
+ }
+ Err(OrderbookParseError::UnsupportedVersion)
+ } else {
+ // Old version
+ Err(OrderbookParseError::UnknownError)
+ }
+ } else {
+ Err(OrderbookParseError::Selector)
+ }
+ }
+}
diff --git a/crates/diri/src/orderbook/events/order_executed.rs b/crates/diri/src/orderbook/events/order_executed.rs
new file mode 100644
index 000000000..eca734777
--- /dev/null
+++ b/crates/diri/src/orderbook/events/order_executed.rs
@@ -0,0 +1,371 @@
+use cainome::rs::abigen;
+use starknet::core::types::{EmittedEvent, Felt};
+
+use super::{OrderbookParseError, ORDER_EXECUTED_SELECTOR};
+
+abigen!(
+ V0,
+ r#"
+ [
+ {
+ "type": "enum",
+ "name": "ark_common::protocol::order_types::OrderStatus",
+ "variants": [
+ {
+ "name": "Open",
+ "type": "()"
+ },
+ {
+ "name": "Fulfilled",
+ "type": "()"
+ },
+ {
+ "name": "Executed",
+ "type": "()"
+ },
+ {
+ "name": "CancelledUser",
+ "type": "()"
+ },
+ {
+ "name": "CancelledByNewOrder",
+ "type": "()"
+ },
+ {
+ "name": "CancelledAssetFault",
+ "type": "()"
+ },
+ {
+ "name": "CancelledOwnership",
+ "type": "()"
+ }
+ ]
+ },
+ {
+ "type": "event",
+ "name": "ark_orderbook::orderbook::orderbook::Event",
+ "kind": "enum",
+ "variants": [
+ {
+ "name": "OrderExecuted",
+ "type": "ark_orderbook::orderbook::orderbook::OrderExecuted",
+ "kind": "nested"
+ }
+ ]
+},
+ {
+ "type": "event",
+ "name": "ark_orderbook::orderbook::orderbook::OrderExecuted",
+ "kind": "struct",
+ "members": [
+ {
+ "name": "order_hash",
+ "type": "core::felt252",
+ "kind": "key"
+ },
+ {
+ "name": "order_status",
+ "type": "ark_common::protocol::order_types::OrderStatus",
+ "kind": "key"
+ }
+ ]
+ }
+ ]
+ "#
+ , type_aliases {
+ ark_common::protocol::order_types::OrderStatus as OrderStatusV0;
+ ark_orderbook::orderbook::orderbook::Event as EventV0;
+ ark_orderbook::orderbook::orderbook::OrderExecuted as OrderExecutedV0;
+ },
+ derives(Debug)
+);
+
+abigen!(
+ V1,
+ r#"
+ [
+ {
+ "type": "enum",
+ "name": "ark_common::protocol::order_types::OrderStatus",
+ "variants": [
+ {
+ "name": "Open",
+ "type": "()"
+ },
+ {
+ "name": "Fulfilled",
+ "type": "()"
+ },
+ {
+ "name": "Executed",
+ "type": "()"
+ },
+ {
+ "name": "CancelledUser",
+ "type": "()"
+ },
+ {
+ "name": "CancelledByNewOrder",
+ "type": "()"
+ },
+ {
+ "name": "CancelledAssetFault",
+ "type": "()"
+ },
+ {
+ "name": "CancelledOwnership",
+ "type": "()"
+ }
+ ]
+},
+ {
+ "type": "enum",
+ "name": "ark_common::protocol::order_types::OrderType",
+ "variants": [
+ {
+ "name": "Listing",
+ "type": "()"
+ },
+ {
+ "name": "Auction",
+ "type": "()"
+ },
+ {
+ "name": "Offer",
+ "type": "()"
+ },
+ {
+ "name": "CollectionOffer",
+ "type": "()"
+ }
+ ]
+},
+ {
+ "type": "event",
+ "name": "ark_component::orderbook::orderbook::OrderbookComponent::Event",
+ "kind": "enum",
+ "variants": [
+ {
+ "name": "OrderExecuted",
+ "type": "ark_component::orderbook::orderbook::OrderbookComponent::OrderExecuted",
+ "kind": "nested"
+ }
+ ]
+},
+{
+ "type": "event",
+ "name": "ark_component::orderbook::orderbook::OrderbookComponent::OrderExecuted",
+ "kind": "struct",
+ "members": [
+ {
+ "name": "order_hash",
+ "type": "core::felt252",
+ "kind": "key"
+ },
+ {
+ "name": "order_status",
+ "type": "ark_common::protocol::order_types::OrderStatus",
+ "kind": "key"
+ },
+ {
+ "name": "version",
+ "type": "core::integer::u8",
+ "kind": "data"
+ },
+ {
+ "name": "transaction_hash",
+ "type": "core::felt252",
+ "kind": "data"
+ },
+ {
+ "name": "from",
+ "type": "core::starknet::contract_address::ContractAddress",
+ "kind": "data"
+ },
+ {
+ "name": "to",
+ "type": "core::starknet::contract_address::ContractAddress",
+ "kind": "data"
+ }
+ ]
+}
+]
+"#
+, type_aliases {
+ ark_common::protocol::order_types::OrderStatus as OrderStatusV1;
+ ark_component::orderbook::orderbook::OrderbookComponent::Event as EventV1;
+ ark_component::orderbook::orderbook::OrderbookComponent::OrderExecuted as OrderExecutedV1;
+},
+derives(Debug)
+);
+
+abigen!(
+ V2,
+ r#"
+ [
+ {
+ "type": "enum",
+ "name": "ark_common::protocol::order_types::OrderStatus",
+ "variants": [
+ {
+ "name": "Open",
+ "type": "()"
+ },
+ {
+ "name": "Fulfilled",
+ "type": "()"
+ },
+ {
+ "name": "Executed",
+ "type": "()"
+ },
+ {
+ "name": "CancelledUser",
+ "type": "()"
+ },
+ {
+ "name": "CancelledByNewOrder",
+ "type": "()"
+ },
+ {
+ "name": "CancelledAssetFault",
+ "type": "()"
+ },
+ {
+ "name": "CancelledOwnership",
+ "type": "()"
+ }
+ ]
+ },
+ {
+ "type": "enum",
+ "name": "ark_common::protocol::order_types::OrderType",
+ "variants": [
+ {
+ "name": "Listing",
+ "type": "()"
+ },
+ {
+ "name": "Auction",
+ "type": "()"
+ },
+ {
+ "name": "Offer",
+ "type": "()"
+ },
+ {
+ "name": "CollectionOffer",
+ "type": "()"
+ }
+ ]
+ },
+ {
+ "type": "event",
+ "name": "ark_component::orderbook::orderbook::OrderbookComponent::Event",
+ "kind": "enum",
+ "variants": [
+ {
+ "name": "OrderExecuted",
+ "type": "ark_component::orderbook::orderbook::OrderbookComponent::OrderExecuted",
+ "kind": "nested"
+ }
+ ]
+ },
+ {
+ "type": "event",
+ "name": "ark_component::orderbook::orderbook::OrderbookComponent::OrderExecuted",
+ "kind": "struct",
+ "members": [
+ {
+ "name": "order_hash",
+ "type": "core::felt252",
+ "kind": "key"
+ },
+ {
+ "name": "order_status",
+ "type": "ark_common::protocol::order_types::OrderStatus",
+ "kind": "key"
+ },
+ {
+ "name": "order_type",
+ "type": "ark_common::protocol::order_types::OrderType",
+ "kind": "key"
+ },
+ {
+ "name": "version",
+ "type": "core::integer::u8",
+ "kind": "data"
+ },
+ {
+ "name": "transaction_hash",
+ "type": "core::felt252",
+ "kind": "data"
+ },
+ {
+ "name": "from",
+ "type": "core::starknet::contract_address::ContractAddress",
+ "kind": "data"
+ },
+ {
+ "name": "to",
+ "type": "core::starknet::contract_address::ContractAddress",
+ "kind": "data"
+ }
+ ]
+ }
+ ]
+ "#
+, type_aliases {
+ ark_common::protocol::order_types::OrderStatus as OrderStatusV2;
+ ark_common::protocol::order_types::OrderType as OrderTypeV2;
+ ark_component::orderbook::orderbook::OrderbookComponent::Event as EventV2;
+ ark_component::orderbook::orderbook::OrderbookComponent::OrderExecuted as OrderExecutedV2;
+ },
+ derives(Debug)
+);
+
+#[derive(Debug)]
+pub(crate) enum OrderExecuted {
+ V0(OrderExecutedV0),
+ V1(OrderExecutedV1),
+ V2(OrderExecutedV2),
+}
+
+impl TryFrom for OrderExecuted {
+ type Error = OrderbookParseError;
+
+ fn try_from(ev: EmittedEvent) -> Result {
+ if ev.keys[0] == ORDER_EXECUTED_SELECTOR {
+ if !ev.data.is_empty() {
+ let version = ev.data[0];
+ if version == Felt::ONE {
+ match TryInto::::try_into(ev) {
+ Ok(event) => match event {
+ EventV1::OrderExecuted(ev) => Ok(OrderExecuted::V1(ev)),
+ },
+ Err(_) => Err(OrderbookParseError::UnknownError),
+ }
+ } else if version == Felt::TWO {
+ match TryInto::::try_into(ev) {
+ Ok(event) => match event {
+ EventV2::OrderExecuted(ev) => Ok(OrderExecuted::V2(ev)),
+ },
+ Err(_) => Err(OrderbookParseError::UnknownError),
+ }
+ } else {
+ Err(OrderbookParseError::UnsupportedVersion)
+ }
+ } else {
+ // version 0
+ match TryInto::::try_into(ev) {
+ Ok(event) => match event {
+ EventV0::OrderExecuted(ev) => Ok(OrderExecuted::V0(ev)),
+ },
+ Err(_) => Err(OrderbookParseError::UnknownError),
+ }
+ }
+ } else {
+ Err(OrderbookParseError::Selector)
+ }
+ }
+}
diff --git a/crates/diri/src/orderbook/events/order_fulfilled.rs b/crates/diri/src/orderbook/events/order_fulfilled.rs
new file mode 100644
index 000000000..167789c11
--- /dev/null
+++ b/crates/diri/src/orderbook/events/order_fulfilled.rs
@@ -0,0 +1,113 @@
+use cainome::rs::abigen;
+use starknet::core::types::{EmittedEvent, Felt};
+
+use super::{OrderbookParseError, ORDER_FULFILLED_SELECTOR};
+
+abigen!(
+ V1,
+ r#"
+ [
+ {
+ "type": "enum",
+ "name": "ark_common::protocol::order_types::OrderType",
+ "variants": [
+ {
+ "name": "Listing",
+ "type": "()"
+ },
+ {
+ "name": "Auction",
+ "type": "()"
+ },
+ {
+ "name": "Offer",
+ "type": "()"
+ },
+ {
+ "name": "CollectionOffer",
+ "type": "()"
+ }
+ ]
+ },
+ {
+ "type": "event",
+ "name": "ark_component::orderbook::orderbook::OrderbookComponent::Event",
+ "kind": "enum",
+ "variants": [
+ {
+ "name": "OrderFulfilled",
+ "type": "ark_component::orderbook::orderbook::OrderbookComponent::OrderFulfilled",
+ "kind": "nested"
+ }
+ ]
+ },
+ {
+ "type": "event",
+ "name": "ark_component::orderbook::orderbook::OrderbookComponent::OrderFulfilled",
+ "kind": "struct",
+ "members": [
+ {
+ "name": "order_hash",
+ "type": "core::felt252",
+ "kind": "key"
+ },
+ {
+ "name": "fulfiller",
+ "type": "core::starknet::contract_address::ContractAddress",
+ "kind": "key"
+ },
+ {
+ "name": "related_order_hash",
+ "type": "core::option::Option::",
+ "kind": "key"
+ },
+ {
+ "name": "order_type",
+ "type": "ark_common::protocol::order_types::OrderType",
+ "kind": "key"
+ },
+ {
+ "name": "version",
+ "type": "core::integer::u8",
+ "kind": "data"
+ }
+ ]
+ }
+ ]
+ "#,
+ type_aliases {
+ ark_component::orderbook::orderbook::OrderbookComponent::Event as EventV1;
+ ark_component::orderbook::orderbook::OrderbookComponent::OrderFulfilled as OrderFulfilledV1;
+ },
+ derives(Debug),
+);
+
+#[derive(Debug)]
+pub(crate) enum OrderFulfilled {
+ V1(OrderFulfilledV1),
+}
+
+impl TryFrom for OrderFulfilled {
+ type Error = OrderbookParseError;
+
+ fn try_from(ev: EmittedEvent) -> Result {
+ if ev.keys[0] == ORDER_FULFILLED_SELECTOR {
+ if !ev.data.is_empty() {
+ let version = ev.data[0];
+ if version == Felt::ONE {
+ match TryInto::::try_into(ev) {
+ Ok(event) => match event {
+ EventV1::OrderFulfilled(ev) => return Ok(OrderFulfilled::V1(ev)),
+ },
+ Err(_) => return Err(OrderbookParseError::UnknownError),
+ };
+ }
+ Err(OrderbookParseError::UnsupportedVersion)
+ } else {
+ Err(OrderbookParseError::UnknownError)
+ }
+ } else {
+ Err(OrderbookParseError::Selector)
+ }
+ }
+}
diff --git a/crates/diri/src/orderbook/events/order_placed.rs b/crates/diri/src/orderbook/events/order_placed.rs
new file mode 100644
index 000000000..3c9817245
--- /dev/null
+++ b/crates/diri/src/orderbook/events/order_placed.rs
@@ -0,0 +1,200 @@
+use cainome::rs::abigen;
+use starknet::core::types::{EmittedEvent, Felt};
+
+use super::{OrderbookParseError, ORDER_PLACED_SELECTOR};
+
+abigen!(
+ V1,
+ r#"
+ [
+ {
+ "type": "enum",
+ "name": "ark_common::protocol::order_types::OrderType",
+ "variants": [
+ {
+ "name": "Listing",
+ "type": "()"
+ },
+ {
+ "name": "Auction",
+ "type": "()"
+ },
+ {
+ "name": "Offer",
+ "type": "()"
+ },
+ {
+ "name": "CollectionOffer",
+ "type": "()"
+ }
+ ]
+ },
+ {
+ "type": "enum",
+ "name": "ark_common::protocol::order_types::RouteType",
+ "variants": [
+ {
+ "name": "Erc20ToErc721",
+ "type": "()"
+ },
+ {
+ "name": "Erc721ToErc20",
+ "type": "()"
+ }
+ ]
+ },
+ {
+ "type": "struct",
+ "name": "ark_common::protocol::order_v1::OrderV1",
+ "members": [
+ {
+ "name": "route",
+ "type": "ark_common::protocol::order_types::RouteType"
+ },
+ {
+ "name": "currency_address",
+ "type": "core::starknet::contract_address::ContractAddress"
+ },
+ {
+ "name": "currency_chain_id",
+ "type": "core::felt252"
+ },
+ {
+ "name": "salt",
+ "type": "core::felt252"
+ },
+ {
+ "name": "offerer",
+ "type": "core::starknet::contract_address::ContractAddress"
+ },
+ {
+ "name": "token_chain_id",
+ "type": "core::felt252"
+ },
+ {
+ "name": "token_address",
+ "type": "core::starknet::contract_address::ContractAddress"
+ },
+ {
+ "name": "token_id",
+ "type": "core::option::Option::"
+ },
+ {
+ "name": "quantity",
+ "type": "core::integer::u256"
+ },
+ {
+ "name": "start_amount",
+ "type": "core::integer::u256"
+ },
+ {
+ "name": "end_amount",
+ "type": "core::integer::u256"
+ },
+ {
+ "name": "start_date",
+ "type": "core::integer::u64"
+ },
+ {
+ "name": "end_date",
+ "type": "core::integer::u64"
+ },
+ {
+ "name": "broker_id",
+ "type": "core::starknet::contract_address::ContractAddress"
+ },
+ {
+ "name": "additional_data",
+ "type": "core::array::Span::"
+ }
+ ]
+ },
+
+ {
+ "type": "event",
+ "name": "ark_component::orderbook::orderbook::OrderbookComponent::Event",
+ "kind": "enum",
+ "variants": [
+ {
+ "name": "OrderPlaced",
+ "type": "ark_component::orderbook::orderbook::OrderbookComponent::OrderPlaced",
+ "kind": "nested"
+ }
+ ]
+ },
+ {
+ "type": "event",
+ "name": "ark_component::orderbook::orderbook::OrderbookComponent::OrderPlaced",
+ "kind": "struct",
+ "members": [
+ {
+ "name": "order_hash",
+ "type": "core::felt252",
+ "kind": "key"
+ },
+ {
+ "name": "order_version",
+ "type": "core::felt252",
+ "kind": "key"
+ },
+ {
+ "name": "order_type",
+ "type": "ark_common::protocol::order_types::OrderType",
+ "kind": "key"
+ },
+ {
+ "name": "version",
+ "type": "core::integer::u8",
+ "kind": "data"
+ },
+ {
+ "name": "cancelled_order_hash",
+ "type": "core::option::Option::",
+ "kind": "data"
+ },
+ {
+ "name": "order",
+ "type": "ark_common::protocol::order_v1::OrderV1",
+ "kind": "data"
+ }
+ ]
+ }
+ ]
+ "#,
+ type_aliases {
+ ark_component::orderbook::orderbook::OrderbookComponent::Event as EventV1;
+ ark_component::orderbook::orderbook::OrderbookComponent::OrderPlaced as OrderPlacedV1;
+ },
+ derives(Debug),
+);
+
+#[derive(Debug)]
+pub(crate) enum OrderPlaced {
+ V1(OrderPlacedV1),
+}
+
+impl TryFrom for OrderPlaced {
+ type Error = OrderbookParseError;
+
+ fn try_from(ev: EmittedEvent) -> Result {
+ if ev.keys[0] == ORDER_PLACED_SELECTOR {
+ if ev.data.len() > 2 {
+ let version = ev.data[0];
+ if version == Felt::ONE {
+ match TryInto::::try_into(ev) {
+ Ok(event) => match event {
+ EventV1::OrderPlaced(ev) => return Ok(OrderPlaced::V1(ev)),
+ },
+ Err(_) => return Err(OrderbookParseError::UnknownError),
+ }
+ }
+ Err(OrderbookParseError::UnsupportedVersion)
+ } else {
+ // Old version
+ Err(OrderbookParseError::UnknownError)
+ }
+ } else {
+ Err(OrderbookParseError::Selector)
+ }
+ }
+}
diff --git a/crates/diri/src/orderbook/events/rollback_status.rs b/crates/diri/src/orderbook/events/rollback_status.rs
new file mode 100644
index 000000000..b66ae599a
--- /dev/null
+++ b/crates/diri/src/orderbook/events/rollback_status.rs
@@ -0,0 +1,109 @@
+use cainome::rs::abigen;
+use starknet::core::types::{EmittedEvent, Felt};
+
+use super::{OrderbookParseError, ROLLBACK_STATUS_SELECTOR};
+
+abigen!(
+ V1,
+ r#"
+ [
+ {
+ "type": "enum",
+ "name": "ark_common::protocol::order_types::OrderType",
+ "variants": [
+ {
+ "name": "Listing",
+ "type": "()"
+ },
+ {
+ "name": "Auction",
+ "type": "()"
+ },
+ {
+ "name": "Offer",
+ "type": "()"
+ },
+ {
+ "name": "CollectionOffer",
+ "type": "()"
+ }
+ ]
+ },
+ {
+ "type": "event",
+ "name": "ark_component::orderbook::orderbook::OrderbookComponent::Event",
+ "kind": "enum",
+ "variants": [
+ {
+ "name": "RollbackStatus",
+ "type": "ark_component::orderbook::orderbook::OrderbookComponent::RollbackStatus",
+ "kind": "nested"
+ }
+ ]
+},
+ {
+ "type": "event",
+ "name": "ark_component::orderbook::orderbook::OrderbookComponent::RollbackStatus",
+ "kind": "struct",
+ "members": [
+ {
+ "name": "order_hash",
+ "type": "core::felt252",
+ "kind": "key"
+ },
+ {
+ "name": "reason",
+ "type": "core::felt252",
+ "kind": "key"
+ },
+ {
+ "name": "order_type",
+ "type": "ark_common::protocol::order_types::OrderType",
+ "kind": "key"
+ },
+ {
+ "name": "version",
+ "type": "core::integer::u8",
+ "kind": "data"
+ }
+ ]
+}
+ ]
+ "#,
+ type_aliases {
+ ark_component::orderbook::orderbook::OrderbookComponent::Event as EventV1;
+ ark_component::orderbook::orderbook::OrderbookComponent::RollbackStatus as RollbackStatusV1;
+ },
+ derives(Debug),
+);
+
+#[derive(Debug)]
+pub(crate) enum RollbackStatus {
+ V1(RollbackStatusV1),
+}
+
+impl TryFrom for RollbackStatus {
+ type Error = OrderbookParseError;
+
+ fn try_from(ev: EmittedEvent) -> Result {
+ if ev.keys[0] == ROLLBACK_STATUS_SELECTOR {
+ if ev.data.len() > 2 {
+ let version = ev.data[0];
+ if version == Felt::ONE {
+ match TryInto::::try_into(ev) {
+ Ok(event) => match event {
+ EventV1::RollbackStatus(ev) => return Ok(RollbackStatus::V1(ev)),
+ },
+ Err(_) => return Err(OrderbookParseError::UnknownError),
+ }
+ }
+ Err(OrderbookParseError::UnsupportedVersion)
+ } else {
+ // Old version
+ Err(OrderbookParseError::UnknownError)
+ }
+ } else {
+ Err(OrderbookParseError::Selector)
+ }
+ }
+}
diff --git a/crates/diri/src/orderbook/mod.rs b/crates/diri/src/orderbook/mod.rs
new file mode 100644
index 000000000..cf1fbd40b
--- /dev/null
+++ b/crates/diri/src/orderbook/mod.rs
@@ -0,0 +1,45 @@
+use events::{
+ OrderCancelled, OrderExecuted, OrderFulfilled, OrderPlaced, RollbackStatus,
+ ORDER_CANCELLED_SELECTOR, ORDER_EXECUTED_SELECTOR, ORDER_FULFILLED_SELECTOR,
+ ORDER_PLACED_SELECTOR,
+};
+use starknet::core::types::EmittedEvent;
+
+pub(crate) mod events;
+
+#[derive(Debug)]
+pub(crate) enum Event {
+ OrderPlaced(OrderPlaced),
+ OrderExecuted(OrderExecuted),
+ OrderCancelled(OrderCancelled),
+ RollbackStatus(RollbackStatus),
+ OrderFulfilled(OrderFulfilled),
+ Unknown,
+}
+
+impl From for Event {
+ fn from(ev: EmittedEvent) -> Self {
+ match ev.keys[0] {
+ key if key == ORDER_CANCELLED_SELECTOR => match TryInto::::try_into(ev)
+ {
+ Ok(ev) => Event::OrderCancelled(ev),
+ Err(_) => Event::Unknown,
+ },
+ key if key == ORDER_EXECUTED_SELECTOR => match TryInto::::try_into(ev) {
+ Ok(ev) => Event::OrderExecuted(ev),
+ Err(_) => Event::Unknown,
+ },
+
+ key if key == ORDER_FULFILLED_SELECTOR => match TryInto::::try_into(ev)
+ {
+ Ok(ev) => Event::OrderFulfilled(ev),
+ Err(_) => Event::Unknown,
+ },
+ key if key == ORDER_PLACED_SELECTOR => match TryInto::::try_into(ev) {
+ Ok(ev) => Event::OrderPlaced(ev),
+ Err(_) => Event::Unknown,
+ },
+ _ => Event::Unknown,
+ }
+ }
+}
diff --git a/crates/diri/src/storage/types.rs b/crates/diri/src/storage/types.rs
index 030591954..e7797c143 100644
--- a/crates/diri/src/storage/types.rs
+++ b/crates/diri/src/storage/types.rs
@@ -1,10 +1,10 @@
use num_bigint::BigUint;
-use starknet::core::types::FieldElement;
+use starknet::core::types::Felt;
use starknet::core::utils::parse_cairo_short_string;
use std::fmt::LowerHex;
-use crate::orderbook::{
+use crate::orderbook::events::{
OrderCancelled, OrderExecuted, OrderFulfilled, OrderPlaced, RollbackStatus, U256,
};
@@ -33,25 +33,27 @@ pub struct PlacedData {
impl From for PlacedData {
fn from(value: OrderPlaced) -> Self {
- Self {
- order_hash: to_hex_str(&value.order_hash),
- order_version: to_hex_str(&value.order_version),
- order_type: format!("{:?}", value.order_type),
- cancelled_order_hash: to_hex_str_opt(&value.cancelled_order_hash),
- route: format!("{:?}", value.order.route),
- currency_address: to_hex_str(&FieldElement::from(value.order.currency_address)),
- currency_chain_id: to_hex_str(&value.order.currency_chain_id),
- salt: to_hex_str(&value.order.salt),
- offerer: to_hex_str(&FieldElement::from(value.order.offerer)),
- token_chain_id: format!("0x{:x}", value.order.token_chain_id),
- token_address: to_hex_str(&FieldElement::from(value.order.token_address)),
- token_id: u256_to_hex_opt(&value.order.token_id),
- quantity: u256_to_hex(&value.order.quantity),
- start_amount: u256_to_hex(&value.order.start_amount),
- end_amount: u256_to_hex(&value.order.end_amount),
- start_date: value.order.start_date,
- end_date: value.order.end_date,
- broker_id: to_hex_str(&FieldElement::from(value.order.broker_id)),
+ match value {
+ OrderPlaced::V1(value) => Self {
+ order_hash: to_hex_str(&value.order_hash),
+ order_version: to_hex_str(&value.order_version),
+ order_type: format!("{:?}", value.order_type),
+ cancelled_order_hash: to_hex_str_opt(&value.cancelled_order_hash),
+ route: format!("{:?}", value.order.route),
+ currency_address: to_hex_str(&Felt::from(value.order.currency_address)),
+ currency_chain_id: to_hex_str(&value.order.currency_chain_id),
+ salt: to_hex_str(&value.order.salt),
+ offerer: to_hex_str(&Felt::from(value.order.offerer)),
+ token_chain_id: format!("0x{:x}", value.order.token_chain_id),
+ token_address: to_hex_str(&Felt::from(value.order.token_address)),
+ token_id: u256_to_hex_opt(&value.order.token_id),
+ quantity: u256_to_hex(&value.order.quantity),
+ start_amount: u256_to_hex(&value.order.start_amount),
+ end_amount: u256_to_hex(&value.order.end_amount),
+ start_date: value.order.start_date,
+ end_date: value.order.end_date,
+ broker_id: to_hex_str(&Felt::from(value.order.broker_id)),
+ },
}
}
}
@@ -64,9 +66,12 @@ pub struct CancelledData {
impl From for CancelledData {
fn from(value: OrderCancelled) -> Self {
- Self {
- order_hash: to_hex_str(&value.order_hash),
- reason: parse_cairo_short_string(&value.reason).unwrap_or(to_hex_str(&value.reason)),
+ match value {
+ OrderCancelled::V1(value) => Self {
+ order_hash: to_hex_str(&value.order_hash),
+ reason: parse_cairo_short_string(&value.reason)
+ .unwrap_or(to_hex_str(&value.reason)),
+ },
}
}
}
@@ -79,9 +84,12 @@ pub struct RollbackStatusData {
impl From for RollbackStatusData {
fn from(value: RollbackStatus) -> Self {
- Self {
- order_hash: to_hex_str(&value.order_hash),
- reason: parse_cairo_short_string(&value.reason).unwrap_or(to_hex_str(&value.reason)),
+ match value {
+ RollbackStatus::V1(value) => Self {
+ order_hash: to_hex_str(&value.order_hash),
+ reason: parse_cairo_short_string(&value.reason)
+ .unwrap_or(to_hex_str(&value.reason)),
+ },
}
}
}
@@ -95,12 +103,16 @@ pub struct FulfilledData {
impl From for FulfilledData {
fn from(value: OrderFulfilled) -> Self {
- let related_order_hash = value.related_order_hash.map(FieldElement::from);
-
- Self {
- order_hash: to_hex_str(&value.order_hash),
- fulfiller: to_hex_str(&FieldElement::from(value.fulfiller)),
- related_order_hash: to_hex_str_opt(&related_order_hash),
+ match value {
+ OrderFulfilled::V1(value) => {
+ let related_order_hash = value.related_order_hash.map(Felt::from);
+
+ Self {
+ order_hash: to_hex_str(&value.order_hash),
+ fulfiller: to_hex_str(&Felt::from(value.fulfiller)),
+ related_order_hash: to_hex_str_opt(&related_order_hash),
+ }
+ }
}
}
}
@@ -127,9 +139,16 @@ impl From for ExecutedData {
OrderExecuted::V1(v) => Self {
version: 1,
order_hash: to_hex_str(&v.order_hash),
- transaction_hash: Some(to_hex_str(&FieldElement::from(v.transaction_hash))),
- from: Some(to_hex_str(&FieldElement::from(v.from))),
- to: Some(to_hex_str(&FieldElement::from(v.to))),
+ transaction_hash: Some(to_hex_str(&v.transaction_hash)),
+ from: Some(to_hex_str(&Felt::from(v.from))),
+ to: Some(to_hex_str(&Felt::from(v.to))),
+ },
+ OrderExecuted::V2(v) => Self {
+ version: 1,
+ order_hash: to_hex_str(&v.order_hash),
+ transaction_hash: Some(to_hex_str(&v.transaction_hash)),
+ from: Some(to_hex_str(&Felt::from(v.from))),
+ to: Some(to_hex_str(&Felt::from(v.to))),
},
}
}
From 8a110e0ab3509927e088ff564993a683e80f8c90 Mon Sep 17 00:00:00 2001
From: Patrice Tisserand
Date: Fri, 23 Aug 2024 09:40:10 +0200
Subject: [PATCH 19/33] fix(diri): ensure events are handled sorted by block
number
---
crates/diri/src/lib.rs | 23 +++++++++++++----------
1 file changed, 13 insertions(+), 10 deletions(-)
diff --git a/crates/diri/src/lib.rs b/crates/diri/src/lib.rs
index 971ef21c2..f215eebda 100644
--- a/crates/diri/src/lib.rs
+++ b/crates/diri/src/lib.rs
@@ -76,12 +76,15 @@ impl Diri {
)
.await?;
- for (block_number, events) in blocks_events {
- let block_timestamp = self.block_time(BlockId::Number(block_number)).await?;
+ // Handle events sorted by block number
+ let mut block_numbers: Vec<&u64> = blocks_events.keys().collect();
+ block_numbers.sort();
+ for block_number in block_numbers {
+ let block_timestamp = self.block_time(BlockId::Number(*block_number)).await?;
+ let events = blocks_events.get(block_number).unwrap();
for any_event in events {
- trace!("Event: {:?}", any_event.clone());
- let orderbook_event: Event = match any_event.try_into() {
+ let orderbook_event: Event = match any_event.clone().try_into() {
Ok(ev) => ev,
Err(e) => {
trace!("Event can't be deserialized: {e}");
@@ -93,31 +96,31 @@ impl Diri {
Event::OrderPlaced(ev) => {
trace!("OrderPlaced found: {:?}", ev);
self.storage
- .register_placed(block_number, block_timestamp, &ev.into())
+ .register_placed(*block_number, block_timestamp, &ev.into())
.await?;
}
Event::OrderCancelled(ev) => {
trace!("OrderCancelled found: {:?}", ev);
self.storage
- .register_cancelled(block_number, block_timestamp, &ev.into())
+ .register_cancelled(*block_number, block_timestamp, &ev.into())
.await?;
}
Event::OrderFulfilled(ev) => {
trace!("OrderFulfilled found: {:?}", ev);
self.storage
- .register_fulfilled(block_number, block_timestamp, &ev.into())
+ .register_fulfilled(*block_number, block_timestamp, &ev.into())
.await?;
}
Event::OrderExecuted(ev) => {
trace!("OrderExecuted found: {:?}", ev);
self.storage
- .register_executed(block_number, block_timestamp, &ev.into())
+ .register_executed(*block_number, block_timestamp, &ev.into())
.await?;
}
Event::RollbackStatus(ev) => {
trace!("RollbackStatus found: {:?}", ev);
self.storage
- .status_back_to_open(block_number, block_timestamp, &ev.into())
+ .status_back_to_open(*block_number, block_timestamp, &ev.into())
.await?;
}
_ => {
@@ -126,7 +129,7 @@ impl Diri {
};
}
- self.event_handler.on_block_processed(block_number).await;
+ self.event_handler.on_block_processed(*block_number).await;
}
Ok(())
From 3df7dcc8fe91bbb4a45b6d7c0db8bb13b9318093 Mon Sep 17 00:00:00 2001
From: Patrice Tisserand
Date: Fri, 20 Sep 2024 01:07:59 +0200
Subject: [PATCH 20/33] feat(diri): add BLOCK_START, BLOCK_END, BLOCK_RANGE and
SLEEP_PERIOD environment variables support
---
crates/diri/examples/display-events.rs | 36 ++++++++++++++++++--------
1 file changed, 25 insertions(+), 11 deletions(-)
diff --git a/crates/diri/examples/display-events.rs b/crates/diri/examples/display-events.rs
index 65ac7c812..bb2606a1e 100644
--- a/crates/diri/examples/display-events.rs
+++ b/crates/diri/examples/display-events.rs
@@ -38,10 +38,6 @@ async fn main() -> Result<()> {
HttpTransport::new(rpc_url_converted.clone()),
)));
- // Quick launch locally:
- // docker-compose up -d arkchain_postgres
- // cd ark-sqlx
- // sqlx database reset --database-url postgres://postgres:123@localhost:5432/arkchain-marketplace --source marketplace
let storage = FakeStorage {};
let handler = DefaultEventHandler {};
@@ -51,12 +47,30 @@ async fn main() -> Result<()> {
Arc::new(handler),
));
- let sleep_secs = 1;
- let mut from = 0;
- let range = 1;
+ let sleep_msecs = match env::var("SLEEP_PERIOD") {
+ Ok(s) => s
+ .parse::()
+ .expect("Failed to parse SLEEP_PERIOD as u64"),
+ Err(_) => 500,
+ };
+ let mut from = match env::var("BLOCK_START") {
+ Ok(s) => s
+ .parse::()
+ .expect("Failed to parse BLOCK_START as u64"),
+ Err(_) => 0,
+ };
+ let range = match env::var("BLOCK_RANGE") {
+ Ok(s) => s
+ .parse::()
+ .expect("Failed to parse BLOCK_RANGE as u64"),
+ Err(_) => 0,
+ };
// Set to None to keep polling the head of chain.
- let to = None;
+ let to = match env::var("BLOCK_END") {
+ Ok(s) => Some(s.parse::().expect("Failed to parse BLOCK_END as u64")),
+ Err(_) => None,
+ };
info!(
"Starting arkchain indexer: from:{} to:{:?} range:{}",
@@ -68,7 +82,7 @@ async fn main() -> Result<()> {
Ok(block_number) => block_number,
Err(e) => {
error!("Can't get arkchain block number: {}", e);
- tokio::time::sleep(tokio::time::Duration::from_secs(sleep_secs)).await;
+ tokio::time::sleep(tokio::time::Duration::from_millis(sleep_msecs)).await;
continue;
}
};
@@ -85,7 +99,7 @@ async fn main() -> Result<()> {
if start > end {
trace!("Nothing to fetch at block {start}");
- tokio::time::sleep(tokio::time::Duration::from_secs(sleep_secs)).await;
+ tokio::time::sleep(tokio::time::Duration::from_millis(sleep_msecs)).await;
continue;
}
@@ -117,7 +131,7 @@ async fn main() -> Result<()> {
}
};
- tokio::time::sleep(tokio::time::Duration::from_secs(sleep_secs)).await;
+ tokio::time::sleep(tokio::time::Duration::from_millis(sleep_msecs)).await;
}
}
From 19d59ca5b2c75c469876a0983debe50357e653ab Mon Sep 17 00:00:00 2001
From: Patrice Tisserand
Date: Mon, 23 Sep 2024 15:07:51 +0200
Subject: [PATCH 21/33] feat(diri): use clap to parse display-events arguments
---
crates/diri/Cargo.toml | 4 +-
crates/diri/examples/display-events.rs | 127 +++++++++++++++++++------
2 files changed, 101 insertions(+), 30 deletions(-)
diff --git a/crates/diri/Cargo.toml b/crates/diri/Cargo.toml
index 44c55cd2c..3b4563f83 100644
--- a/crates/diri/Cargo.toml
+++ b/crates/diri/Cargo.toml
@@ -21,11 +21,9 @@ serde_json = "1.0"
# TODO: add more stuff to the workspace after merge.
url = "2.3.1"
-clap = { version = "4.3.19", features = ["derive", "env", "string"] }
regex = "1.9.1"
env_logger = "0.10.0"
log = "0.4.17"
-dotenv = "0.15.0"
thiserror = "1.0.32"
# For now, Diri can't use the ark-starknet due to the dependency
# on ArkProjectNFTs for of starknet-rs.
@@ -44,4 +42,6 @@ async-trait.workspace = true
tokio.workspace = true
[dev-dependencies]
+clap = { version = "4.3.19", features = ["derive", "env", "string"] }
+dotenv = "0.15.0"
tracing-subscriber = { version = "0.3.18", features = ["env-filter"] }
diff --git a/crates/diri/examples/display-events.rs b/crates/diri/examples/display-events.rs
index bb2606a1e..a892cad19 100644
--- a/crates/diri/examples/display-events.rs
+++ b/crates/diri/examples/display-events.rs
@@ -1,5 +1,6 @@
use anyhow::Result;
use async_trait::async_trait;
+use clap::Parser;
use diri::event_handler::EventHandler;
use diri::storage::types::CancelledData;
use diri::storage::types::ExecutedData;
@@ -23,22 +24,59 @@ use tracing::{error, info, trace, warn};
use tracing_subscriber::fmt;
use tracing_subscriber::EnvFilter;
+#[derive(Parser, Debug)]
+#[clap(about = "display-events")]
+struct Args {
+ #[clap(long, help = "Starknet RPC", env = "STARKNET_RPC")]
+ rpc: String,
+
+ #[clap(long, help = "Sleep period in milliseconds", default_value = "500")]
+ sleep_msecs: u64,
+
+ #[clap(
+ long,
+ help = "Starting block number",
+ env = "BLOCK_START",
+ default_value = "0"
+ )]
+ block_start: u64,
+
+ #[clap(long, help = "Ending block number", env = "BLOCK_END")]
+ block_end: Option,
+
+ #[clap(long, help = "Block range", env = "BLOCK_RANGE", default_value = "0")]
+ block_range: u64,
+
+ #[clap(long, help = "JSON output", env = "JSON_OUTPUT")]
+ output: Option,
+}
+
#[tokio::main]
async fn main() -> Result<()> {
dotenv().ok();
- init_logging();
+ let args = Args::parse();
- info!("Starting.....!");
+ init_logging();
- let rpc_url = env::var("STARKNET_RPC").expect("STARKNET_RPC not set");
+ let rpc_url = args.rpc;
let rpc_url_converted = Url::parse(&rpc_url).unwrap();
let provider = Arc::new(AnyProvider::JsonRpcHttp(JsonRpcClient::new(
HttpTransport::new(rpc_url_converted.clone()),
)));
+ let sleep_msecs = args.sleep_msecs;
+ let mut from = args.block_start;
+ let range = args.block_range;
+
+ // Set to None to keep polling the head of chain.
+ let to = args.block_end;
+
+ info!("Starting.....!");
+
let storage = FakeStorage {};
+
let handler = DefaultEventHandler {};
let indexer = Arc::new(Diri::new(
@@ -47,31 +85,6 @@ async fn main() -> Result<()> {
Arc::new(handler),
));
- let sleep_msecs = match env::var("SLEEP_PERIOD") {
- Ok(s) => s
- .parse::()
- .expect("Failed to parse SLEEP_PERIOD as u64"),
- Err(_) => 500,
- };
- let mut from = match env::var("BLOCK_START") {
- Ok(s) => s
- .parse::()
- .expect("Failed to parse BLOCK_START as u64"),
- Err(_) => 0,
- };
- let range = match env::var("BLOCK_RANGE") {
- Ok(s) => s
- .parse::()
- .expect("Failed to parse BLOCK_RANGE as u64"),
- Err(_) => 0,
- };
-
- // Set to None to keep polling the head of chain.
- let to = match env::var("BLOCK_END") {
- Ok(s) => Some(s.parse::().expect("Failed to parse BLOCK_END as u64")),
- Err(_) => None,
- };
-
info!(
"Starting arkchain indexer: from:{} to:{:?} range:{}",
from, to, range,
@@ -162,6 +175,61 @@ impl Storage for FakeStorage {
block_timestamp: u64,
order: &PlacedData,
) -> StorageResult<()> {
+ info!("PLACED {} {:?}", block_id, order);
+ Ok(())
+ }
+
+ async fn register_cancelled(
+ &self,
+ block_id: u64,
+ block_timestamp: u64,
+ order: &CancelledData,
+ ) -> StorageResult<()> {
+ info!("CANCELLED {} {:?}", block_id, order);
+ Ok(())
+ }
+
+ async fn register_fulfilled(
+ &self,
+ block_id: u64,
+ block_timestamp: u64,
+ order: &FulfilledData,
+ ) -> StorageResult<()> {
+ info!("FULFILLED {} {:?}", block_id, order);
+ Ok(())
+ }
+
+ async fn register_executed(
+ &self,
+ block_id: u64,
+ block_timestamp: u64,
+ order: &ExecutedData,
+ ) -> StorageResult<()> {
+ info!("EXECUTED {} {:?}", block_id, order);
+ Ok(())
+ }
+
+ async fn status_back_to_open(
+ &self,
+ block_id: u64,
+ block_timestamp: u64,
+ order: &RollbackStatusData,
+ ) -> StorageResult<()> {
+ Ok(())
+ }
+}
+
+struct JSONStorage;
+
+#[async_trait]
+impl Storage for JSONStorage {
+ async fn register_placed(
+ &self,
+ block_id: u64,
+ block_timestamp: u64,
+ order: &PlacedData,
+ ) -> StorageResult<()> {
+ info!("PLACED {} {:?}", block_id, order);
Ok(())
}
@@ -171,6 +239,7 @@ impl Storage for FakeStorage {
block_timestamp: u64,
order: &CancelledData,
) -> StorageResult<()> {
+ info!("CANCELLED {} {:?}", block_id, order);
Ok(())
}
@@ -180,6 +249,7 @@ impl Storage for FakeStorage {
block_timestamp: u64,
order: &FulfilledData,
) -> StorageResult<()> {
+ info!("FULFILLED {} {:?}", block_id, order);
Ok(())
}
@@ -189,6 +259,7 @@ impl Storage for FakeStorage {
block_timestamp: u64,
order: &ExecutedData,
) -> StorageResult<()> {
+ info!("EXECUTED {} {:?}", block_id, order);
Ok(())
}
From 1358edaf6a18f1ab691358c0ca53f8ec3092975f Mon Sep 17 00:00:00 2001
From: Patrice Tisserand
Date: Tue, 24 Sep 2024 02:57:07 +0200
Subject: [PATCH 22/33] feat(diri): add JSON output support in display-events
---
crates/diri/Cargo.toml | 2 +-
crates/diri/examples/display-events.rs | 251 ++++++++++++++++++++-----
2 files changed, 201 insertions(+), 52 deletions(-)
diff --git a/crates/diri/Cargo.toml b/crates/diri/Cargo.toml
index 3b4563f83..cff2f1860 100644
--- a/crates/diri/Cargo.toml
+++ b/crates/diri/Cargo.toml
@@ -16,7 +16,7 @@ path = "examples/display-events.rs"
[dependencies]
futures = "0.3.28"
-serde = { version = "1.0", features = ["derive"] }
+serde = { version = "1.0", features = ["derive", "rc"] }
serde_json = "1.0"
# TODO: add more stuff to the workspace after merge.
diff --git a/crates/diri/examples/display-events.rs b/crates/diri/examples/display-events.rs
index a892cad19..1e97f48f5 100644
--- a/crates/diri/examples/display-events.rs
+++ b/crates/diri/examples/display-events.rs
@@ -11,6 +11,8 @@ use diri::storage::Storage;
use diri::storage::StorageResult;
use diri::Diri;
use dotenv::dotenv;
+use serde::ser::SerializeStruct;
+use serde::Serialize;
use starknet::core::types::BlockId;
use starknet::providers::jsonrpc::HttpTransport;
use starknet::providers::AnyProvider;
@@ -18,7 +20,9 @@ use starknet::providers::JsonRpcClient;
use starknet::providers::Provider;
use url::Url;
-use std::{env, sync::Arc};
+use std::fs::File;
+use std::sync::Arc;
+use std::sync::Mutex;
use tracing::{error, info, trace, warn};
use tracing_subscriber::fmt;
@@ -75,13 +79,13 @@ async fn main() -> Result<()> {
info!("Starting.....!");
- let storage = FakeStorage {};
+ let storage = Arc::new(JSONStorage::new(args.output, from));
let handler = DefaultEventHandler {};
let indexer = Arc::new(Diri::new(
provider.clone(),
- Arc::new(storage),
+ storage.clone(),
Arc::new(handler),
));
@@ -127,7 +131,7 @@ async fn main() -> Result<()> {
if let Some(to) = to {
if end >= to {
trace!("`to` block was reached, exit.");
- return Ok(());
+ break; // return Ok(());
}
}
@@ -146,6 +150,8 @@ async fn main() -> Result<()> {
tokio::time::sleep(tokio::time::Duration::from_millis(sleep_msecs)).await;
}
+ storage.write();
+ Ok(())
}
/// Initializes the logging, ensuring that the `RUST_LOG` environment
@@ -165,61 +171,158 @@ fn init_logging() {
.expect("Failed to set the global tracing subscriber");
}
-struct FakeStorage;
+#[derive(Clone, Debug)]
+enum OrderbookEventType {
+ Placed(PlacedData),
+ Cancelled(CancelledData),
+ Fulfilled(FulfilledData),
+ Executed(ExecutedData),
+ RollbackStatus(RollbackStatusData),
+}
-#[async_trait]
-impl Storage for FakeStorage {
- async fn register_placed(
- &self,
- block_id: u64,
- block_timestamp: u64,
- order: &PlacedData,
- ) -> StorageResult<()> {
- info!("PLACED {} {:?}", block_id, order);
- Ok(())
+struct SerializablePlacedData(PlacedData);
+struct SerializableCancelledData(CancelledData);
+struct SerializableFulfilledData(FulfilledData);
+struct SerializableExecutedData(ExecutedData);
+struct SerializableRollbackStatus(RollbackStatusData);
+
+impl Serialize for SerializablePlacedData {
+ fn serialize(&self, serializer: S) -> std::result::Result
+ where
+ S: serde::Serializer,
+ {
+ let mut state = serializer.serialize_struct("data", 3)?;
+ state.serialize_field("order_hash", &self.0.order_hash)?;
+ state.serialize_field("order_type", &self.0.order_type)?;
+ state.serialize_field("route", &self.0.route)?;
+ state.end()
}
+}
- async fn register_cancelled(
- &self,
- block_id: u64,
- block_timestamp: u64,
- order: &CancelledData,
- ) -> StorageResult<()> {
- info!("CANCELLED {} {:?}", block_id, order);
- Ok(())
+impl Serialize for SerializableCancelledData {
+ fn serialize(&self, serializer: S) -> std::result::Result
+ where
+ S: serde::Serializer,
+ {
+ let mut state = serializer.serialize_struct("data", 3)?;
+ state.serialize_field("order_hash", &self.0.order_hash)?;
+ state.serialize_field("order_type", &self.0.order_type)?;
+ state.serialize_field("reason", &self.0.reason)?;
+ state.end()
}
+}
- async fn register_fulfilled(
- &self,
- block_id: u64,
- block_timestamp: u64,
- order: &FulfilledData,
- ) -> StorageResult<()> {
- info!("FULFILLED {} {:?}", block_id, order);
- Ok(())
+impl Serialize for SerializableFulfilledData {
+ fn serialize(&self, serializer: S) -> std::result::Result
+ where
+ S: serde::Serializer,
+ {
+ let mut state = serializer.serialize_struct("data", 4)?;
+ state.serialize_field("order_hash", &self.0.order_hash)?;
+ state.serialize_field("order_type", &self.0.order_type)?;
+ state.serialize_field("fulfiller", &self.0.fulfiller)?;
+ state.serialize_field("related_order_hash", &self.0.related_order_hash)?;
+ state.end()
}
+}
- async fn register_executed(
- &self,
- block_id: u64,
- block_timestamp: u64,
- order: &ExecutedData,
- ) -> StorageResult<()> {
- info!("EXECUTED {} {:?}", block_id, order);
- Ok(())
+impl Serialize for SerializableExecutedData {
+ fn serialize(&self, serializer: S) -> std::result::Result
+ where
+ S: serde::Serializer,
+ {
+ let mut state = serializer.serialize_struct("data", 4)?;
+ state.serialize_field("order_hash", &self.0.order_hash)?;
+ state.serialize_field("order_type", &self.0.order_type)?;
+ state.serialize_field("from", &self.0.from)?;
+ state.serialize_field("to", &self.0.to)?;
+ state.end()
}
+}
- async fn status_back_to_open(
- &self,
- block_id: u64,
- block_timestamp: u64,
- order: &RollbackStatusData,
- ) -> StorageResult<()> {
- Ok(())
+impl Serialize for SerializableRollbackStatus {
+ fn serialize(&self, serializer: S) -> std::result::Result
+ where
+ S: serde::Serializer,
+ {
+ let mut state = serializer.serialize_struct("data", 3)?;
+ state.serialize_field("order_hash", &self.0.order_hash)?;
+ state.serialize_field("order_type", &self.0.order_type)?;
+ state.serialize_field("reason", &self.0.reason)?;
+ state.end()
}
}
-struct JSONStorage;
+impl Serialize for OrderbookEventType {
+ fn serialize(&self, serializer: S) -> std::result::Result
+ where
+ S: serde::Serializer,
+ {
+ let type_key = "type";
+ let data_key = "data";
+
+ let mut state = serializer.serialize_struct("event", 2)?;
+ match self {
+ OrderbookEventType::Placed(data) => {
+ state.serialize_field(type_key, "PLACED")?;
+ state.serialize_field(data_key, &SerializablePlacedData(data.clone()))?;
+ }
+ OrderbookEventType::Cancelled(data) => {
+ state.serialize_field(type_key, "CANCELLED")?;
+ state.serialize_field(data_key, &SerializableCancelledData(data.clone()))?;
+ }
+ OrderbookEventType::Fulfilled(data) => {
+ state.serialize_field(type_key, "FULFILLED")?;
+ state.serialize_field(data_key, &SerializableFulfilledData(data.clone()))?;
+ }
+ OrderbookEventType::Executed(data) => {
+ state.serialize_field(type_key, "EXECUTED")?;
+ state.serialize_field(data_key, &SerializableExecutedData(data.clone()))?;
+ }
+ OrderbookEventType::RollbackStatus(data) => {
+ state.serialize_field(type_key, "ROLLBACK")?;
+ state.serialize_field(data_key, &SerializableRollbackStatus(data.clone()))?;
+ }
+ };
+ state.end()
+ }
+}
+
+#[derive(Clone, Serialize, Debug)]
+struct OrderbookEvent {
+ #[serde(rename = "event")]
+ event_type: OrderbookEventType,
+ block_id: u64,
+ block_timestamp: u64,
+}
+
+#[derive(Serialize, Debug)]
+struct JSONStorage {
+ start: u64,
+ end: u64,
+ output: Option,
+ events: Mutex>,
+}
+
+impl JSONStorage {
+ fn new(output: Option, start: u64) -> Self {
+ Self {
+ output,
+ start,
+ end: 0,
+ events: Mutex::new(Vec::new()),
+ }
+ }
+
+ fn write(&self) {
+ if self.output.is_none() {
+ println!("{}", serde_json::to_string_pretty(self).unwrap());
+ } else {
+ let mut file = File::create(self.output.clone().unwrap()).unwrap();
+ serde_json::to_writer_pretty(&mut file, &self).unwrap();
+ }
+ }
+}
#[async_trait]
impl Storage for JSONStorage {
@@ -229,7 +332,16 @@ impl Storage for JSONStorage {
block_timestamp: u64,
order: &PlacedData,
) -> StorageResult<()> {
- info!("PLACED {} {:?}", block_id, order);
+ trace!("PLACED {} {:?}", block_id, order);
+ if let Ok(mut events) = self.events.lock() {
+ events.push(OrderbookEvent {
+ block_id,
+ block_timestamp,
+ event_type: OrderbookEventType::Placed(order.clone()),
+ });
+ } else {
+ error!("Failed to append Placed event");
+ }
Ok(())
}
@@ -239,7 +351,16 @@ impl Storage for JSONStorage {
block_timestamp: u64,
order: &CancelledData,
) -> StorageResult<()> {
- info!("CANCELLED {} {:?}", block_id, order);
+ trace!("CANCELLED {} {:?}", block_id, order);
+ if let Ok(mut events) = self.events.lock() {
+ events.push(OrderbookEvent {
+ block_id,
+ block_timestamp,
+ event_type: OrderbookEventType::Cancelled(order.clone()),
+ });
+ } else {
+ error!("Failed to append Cancelled event");
+ }
Ok(())
}
@@ -249,7 +370,16 @@ impl Storage for JSONStorage {
block_timestamp: u64,
order: &FulfilledData,
) -> StorageResult<()> {
- info!("FULFILLED {} {:?}", block_id, order);
+ trace!("FULFILLED {} {:?}", block_id, order);
+ if let Ok(mut events) = self.events.lock() {
+ events.push(OrderbookEvent {
+ block_id,
+ block_timestamp,
+ event_type: OrderbookEventType::Fulfilled(order.clone()),
+ });
+ } else {
+ error!("Failed to append Fulfilled event");
+ }
Ok(())
}
@@ -259,7 +389,16 @@ impl Storage for JSONStorage {
block_timestamp: u64,
order: &ExecutedData,
) -> StorageResult<()> {
- info!("EXECUTED {} {:?}", block_id, order);
+ trace!("EXECUTED {} {:?}", block_id, order);
+ if let Ok(mut events) = self.events.lock() {
+ events.push(OrderbookEvent {
+ block_id,
+ block_timestamp,
+ event_type: OrderbookEventType::Executed(order.clone()),
+ });
+ } else {
+ error!("Failed to append Executed event");
+ }
Ok(())
}
@@ -269,6 +408,16 @@ impl Storage for JSONStorage {
block_timestamp: u64,
order: &RollbackStatusData,
) -> StorageResult<()> {
+ trace!("ROLLBACK {} {:?}", block_id, order);
+ if let Ok(mut events) = self.events.lock() {
+ events.push(OrderbookEvent {
+ block_id,
+ block_timestamp,
+ event_type: OrderbookEventType::RollbackStatus(order.clone()),
+ });
+ } else {
+ error!("Failed to append Executed event");
+ }
Ok(())
}
}
From e00e08705d7c0a2e4cbddad6dc0d62edb38c39cd Mon Sep 17 00:00:00 2001
From: Patrice Tisserand
Date: Tue, 24 Sep 2024 03:00:18 +0200
Subject: [PATCH 23/33] feat(diri): add `order_type` field
---
.../diri/src/orderbook/events/order_placed.rs | 29 +++++++++++++
crates/diri/src/storage/types.rs | 41 ++++++-------------
2 files changed, 41 insertions(+), 29 deletions(-)
diff --git a/crates/diri/src/orderbook/events/order_placed.rs b/crates/diri/src/orderbook/events/order_placed.rs
index 3c9817245..0f8e7ccf6 100644
--- a/crates/diri/src/orderbook/events/order_placed.rs
+++ b/crates/diri/src/orderbook/events/order_placed.rs
@@ -1,6 +1,8 @@
use cainome::rs::abigen;
use starknet::core::types::{EmittedEvent, Felt};
+use crate::types::{to_hex_str, to_hex_str_opt, u256_to_hex, u256_to_hex_opt, PlacedData};
+
use super::{OrderbookParseError, ORDER_PLACED_SELECTOR};
abigen!(
@@ -198,3 +200,30 @@ impl TryFrom for OrderPlaced {
}
}
}
+
+impl From for PlacedData {
+ fn from(value: OrderPlaced) -> Self {
+ match value {
+ OrderPlaced::V1(value) => Self {
+ order_hash: to_hex_str(&value.order_hash),
+ order_version: to_hex_str(&value.order_version),
+ order_type: format!("{:?}", value.order_type),
+ cancelled_order_hash: to_hex_str_opt(&value.cancelled_order_hash),
+ route: format!("{:?}", value.order.route),
+ currency_address: to_hex_str(&Felt::from(value.order.currency_address)),
+ currency_chain_id: to_hex_str(&value.order.currency_chain_id),
+ salt: to_hex_str(&value.order.salt),
+ offerer: to_hex_str(&Felt::from(value.order.offerer)),
+ token_chain_id: format!("0x{:x}", value.order.token_chain_id),
+ token_address: to_hex_str(&Felt::from(value.order.token_address)),
+ token_id: u256_to_hex_opt(&value.order.token_id),
+ quantity: u256_to_hex(&value.order.quantity),
+ start_amount: u256_to_hex(&value.order.start_amount),
+ end_amount: u256_to_hex(&value.order.end_amount),
+ start_date: value.order.start_date,
+ end_date: value.order.end_date,
+ broker_id: to_hex_str(&Felt::from(value.order.broker_id)),
+ },
+ }
+ }
+}
diff --git a/crates/diri/src/storage/types.rs b/crates/diri/src/storage/types.rs
index e7797c143..bf0623355 100644
--- a/crates/diri/src/storage/types.rs
+++ b/crates/diri/src/storage/types.rs
@@ -5,7 +5,7 @@ use starknet::core::utils::parse_cairo_short_string;
use std::fmt::LowerHex;
use crate::orderbook::events::{
- OrderCancelled, OrderExecuted, OrderFulfilled, OrderPlaced, RollbackStatus, U256,
+ OrderCancelled, OrderExecuted, OrderFulfilled, RollbackStatus, U256,
};
#[derive(Debug, Clone)]
@@ -31,36 +31,10 @@ pub struct PlacedData {
pub broker_id: String,
}
-impl From for PlacedData {
- fn from(value: OrderPlaced) -> Self {
- match value {
- OrderPlaced::V1(value) => Self {
- order_hash: to_hex_str(&value.order_hash),
- order_version: to_hex_str(&value.order_version),
- order_type: format!("{:?}", value.order_type),
- cancelled_order_hash: to_hex_str_opt(&value.cancelled_order_hash),
- route: format!("{:?}", value.order.route),
- currency_address: to_hex_str(&Felt::from(value.order.currency_address)),
- currency_chain_id: to_hex_str(&value.order.currency_chain_id),
- salt: to_hex_str(&value.order.salt),
- offerer: to_hex_str(&Felt::from(value.order.offerer)),
- token_chain_id: format!("0x{:x}", value.order.token_chain_id),
- token_address: to_hex_str(&Felt::from(value.order.token_address)),
- token_id: u256_to_hex_opt(&value.order.token_id),
- quantity: u256_to_hex(&value.order.quantity),
- start_amount: u256_to_hex(&value.order.start_amount),
- end_amount: u256_to_hex(&value.order.end_amount),
- start_date: value.order.start_date,
- end_date: value.order.end_date,
- broker_id: to_hex_str(&Felt::from(value.order.broker_id)),
- },
- }
- }
-}
-
#[derive(Debug, Clone)]
pub struct CancelledData {
pub order_hash: String,
+ pub order_type: String,
pub reason: String,
}
@@ -69,6 +43,7 @@ impl From for CancelledData {
match value {
OrderCancelled::V1(value) => Self {
order_hash: to_hex_str(&value.order_hash),
+ order_type: format!("{:?}", value.order_type),
reason: parse_cairo_short_string(&value.reason)
.unwrap_or(to_hex_str(&value.reason)),
},
@@ -79,6 +54,7 @@ impl From for CancelledData {
#[derive(Debug, Clone)]
pub struct RollbackStatusData {
pub order_hash: String,
+ pub order_type: String,
pub reason: String,
}
@@ -87,6 +63,7 @@ impl From for RollbackStatusData {
match value {
RollbackStatus::V1(value) => Self {
order_hash: to_hex_str(&value.order_hash),
+ order_type: format!("{:?}", value.order_type),
reason: parse_cairo_short_string(&value.reason)
.unwrap_or(to_hex_str(&value.reason)),
},
@@ -97,6 +74,7 @@ impl From for RollbackStatusData {
#[derive(Debug, Clone)]
pub struct FulfilledData {
pub order_hash: String,
+ pub order_type: String,
pub fulfiller: String,
pub related_order_hash: Option,
}
@@ -109,6 +87,7 @@ impl From for FulfilledData {
Self {
order_hash: to_hex_str(&value.order_hash),
+ order_type: format!("{:?}", value.order_type),
fulfiller: to_hex_str(&Felt::from(value.fulfiller)),
related_order_hash: to_hex_str_opt(&related_order_hash),
}
@@ -121,6 +100,7 @@ impl From for FulfilledData {
pub struct ExecutedData {
pub version: u8,
pub order_hash: String,
+ pub order_type: Option,
pub transaction_hash: Option,
pub from: Option,
pub to: Option,
@@ -132,6 +112,7 @@ impl From for ExecutedData {
OrderExecuted::V0(v) => Self {
version: 0,
order_hash: to_hex_str(&v.order_hash),
+ order_type: None,
transaction_hash: None,
from: None,
to: None,
@@ -139,13 +120,15 @@ impl From for ExecutedData {
OrderExecuted::V1(v) => Self {
version: 1,
order_hash: to_hex_str(&v.order_hash),
+ order_type: None,
transaction_hash: Some(to_hex_str(&v.transaction_hash)),
from: Some(to_hex_str(&Felt::from(v.from))),
to: Some(to_hex_str(&Felt::from(v.to))),
},
OrderExecuted::V2(v) => Self {
- version: 1,
+ version: 2,
order_hash: to_hex_str(&v.order_hash),
+ order_type: Some(format!("{:?}", v.order_type)),
transaction_hash: Some(to_hex_str(&v.transaction_hash)),
from: Some(to_hex_str(&Felt::from(v.from))),
to: Some(to_hex_str(&Felt::from(v.to))),
From c00fd82f574223011dd06fa0798729691eeb47e5 Mon Sep 17 00:00:00 2001
From: Patrice Tisserand
Date: Tue, 24 Sep 2024 08:56:41 +0200
Subject: [PATCH 24/33] feat(diri): move type conversion to orderbook/events
---
crates/diri/src/orderbook/events/common.rs | 34 ++++++
crates/diri/src/orderbook/events/mod.rs | 3 +-
.../src/orderbook/events/order_cancelled.rs | 22 +++-
.../src/orderbook/events/order_executed.rs | 35 +++++-
.../src/orderbook/events/order_fulfilled.rs | 24 +++-
.../diri/src/orderbook/events/order_placed.rs | 7 +-
.../src/orderbook/events/rollback_status.rs | 22 +++-
crates/diri/src/storage/types.rs | 114 ------------------
8 files changed, 138 insertions(+), 123 deletions(-)
create mode 100644 crates/diri/src/orderbook/events/common.rs
diff --git a/crates/diri/src/orderbook/events/common.rs b/crates/diri/src/orderbook/events/common.rs
new file mode 100644
index 000000000..1e7672b40
--- /dev/null
+++ b/crates/diri/src/orderbook/events/common.rs
@@ -0,0 +1,34 @@
+use cainome::cairo_serde::U256;
+use num_bigint::BigUint;
+
+use std::fmt::LowerHex;
+
+/// Returns the padded hex of '0x' prefixed
+/// representation of the given felt.
+/// TODO: can't use ark_starknet until starknet-rs conflict is resolved.
+pub fn to_hex_str(value: &T) -> String {
+ format!("0x{:064x}", value)
+}
+
+pub fn to_hex_str_opt(value: &Option) -> Option {
+ value.as_ref().map(|v| format!("0x{:064x}", v))
+}
+
+pub fn u256_to_biguint(v: &U256) -> BigUint {
+ let low_bytes = v.low.to_be_bytes();
+ let high_bytes = v.high.to_be_bytes();
+
+ let mut bytes: Vec = Vec::new();
+ bytes.extend(high_bytes);
+ bytes.extend(low_bytes);
+
+ BigUint::from_bytes_be(&bytes[..])
+}
+
+pub fn u256_to_hex(value: &U256) -> String {
+ to_hex_str(&u256_to_biguint(value))
+}
+
+pub fn u256_to_hex_opt(value: &Option) -> Option {
+ value.as_ref().map(|v| to_hex_str(&u256_to_biguint(v)))
+}
diff --git a/crates/diri/src/orderbook/events/mod.rs b/crates/diri/src/orderbook/events/mod.rs
index 27b89813e..3105839fc 100644
--- a/crates/diri/src/orderbook/events/mod.rs
+++ b/crates/diri/src/orderbook/events/mod.rs
@@ -1,3 +1,4 @@
+pub(crate) mod common;
pub(crate) mod order_cancelled;
pub(crate) mod order_executed;
pub(crate) mod order_fulfilled;
@@ -10,7 +11,7 @@ pub(crate) use order_fulfilled::OrderFulfilled;
pub(crate) use order_placed::OrderPlaced;
pub(crate) use rollback_status::RollbackStatus;
-pub(crate) use cainome::cairo_serde::U256;
+// pub(crate) use cainome::cairo_serde::U256;
use starknet::{core::types::Felt, macros::selector};
#[derive(Debug)]
diff --git a/crates/diri/src/orderbook/events/order_cancelled.rs b/crates/diri/src/orderbook/events/order_cancelled.rs
index c26838630..f30087f1e 100644
--- a/crates/diri/src/orderbook/events/order_cancelled.rs
+++ b/crates/diri/src/orderbook/events/order_cancelled.rs
@@ -1,7 +1,12 @@
use cainome::rs::abigen;
-use starknet::core::types::{EmittedEvent, Felt};
+use starknet::core::{
+ types::{EmittedEvent, Felt},
+ utils::parse_cairo_short_string,
+};
-use super::{OrderbookParseError, ORDER_CANCELLED_SELECTOR};
+use crate::types::CancelledData;
+
+use super::{common::to_hex_str, OrderbookParseError, ORDER_CANCELLED_SELECTOR};
abigen!(
V1,
@@ -106,3 +111,16 @@ impl TryFrom for OrderCancelled {
}
}
}
+
+impl From for CancelledData {
+ fn from(value: OrderCancelled) -> Self {
+ match value {
+ OrderCancelled::V1(value) => Self {
+ order_hash: to_hex_str(&value.order_hash),
+ order_type: format!("{:?}", value.order_type),
+ reason: parse_cairo_short_string(&value.reason)
+ .unwrap_or(to_hex_str(&value.reason)),
+ },
+ }
+ }
+}
diff --git a/crates/diri/src/orderbook/events/order_executed.rs b/crates/diri/src/orderbook/events/order_executed.rs
index eca734777..f791a3fd2 100644
--- a/crates/diri/src/orderbook/events/order_executed.rs
+++ b/crates/diri/src/orderbook/events/order_executed.rs
@@ -1,7 +1,9 @@
use cainome::rs::abigen;
use starknet::core::types::{EmittedEvent, Felt};
-use super::{OrderbookParseError, ORDER_EXECUTED_SELECTOR};
+use crate::types::ExecutedData;
+
+use super::{common::to_hex_str, OrderbookParseError, ORDER_EXECUTED_SELECTOR};
abigen!(
V0,
@@ -369,3 +371,34 @@ impl TryFrom for OrderExecuted {
}
}
}
+
+impl From for ExecutedData {
+ fn from(value: OrderExecuted) -> Self {
+ match value {
+ OrderExecuted::V0(v) => Self {
+ version: 0,
+ order_hash: to_hex_str(&v.order_hash),
+ order_type: None,
+ transaction_hash: None,
+ from: None,
+ to: None,
+ },
+ OrderExecuted::V1(v) => Self {
+ version: 1,
+ order_hash: to_hex_str(&v.order_hash),
+ order_type: None,
+ transaction_hash: Some(to_hex_str(&v.transaction_hash)),
+ from: Some(to_hex_str(&Felt::from(v.from))),
+ to: Some(to_hex_str(&Felt::from(v.to))),
+ },
+ OrderExecuted::V2(v) => Self {
+ version: 2,
+ order_hash: to_hex_str(&v.order_hash),
+ order_type: Some(format!("{:?}", v.order_type)),
+ transaction_hash: Some(to_hex_str(&v.transaction_hash)),
+ from: Some(to_hex_str(&Felt::from(v.from))),
+ to: Some(to_hex_str(&Felt::from(v.to))),
+ },
+ }
+ }
+}
diff --git a/crates/diri/src/orderbook/events/order_fulfilled.rs b/crates/diri/src/orderbook/events/order_fulfilled.rs
index 167789c11..fe6869f0a 100644
--- a/crates/diri/src/orderbook/events/order_fulfilled.rs
+++ b/crates/diri/src/orderbook/events/order_fulfilled.rs
@@ -1,7 +1,12 @@
use cainome::rs::abigen;
use starknet::core::types::{EmittedEvent, Felt};
-use super::{OrderbookParseError, ORDER_FULFILLED_SELECTOR};
+use crate::types::FulfilledData;
+
+use super::{
+ common::{to_hex_str, to_hex_str_opt},
+ OrderbookParseError, ORDER_FULFILLED_SELECTOR,
+};
abigen!(
V1,
@@ -111,3 +116,20 @@ impl TryFrom for OrderFulfilled {
}
}
}
+
+impl From for FulfilledData {
+ fn from(value: OrderFulfilled) -> Self {
+ match value {
+ OrderFulfilled::V1(value) => {
+ let related_order_hash = value.related_order_hash.map(Felt::from);
+
+ Self {
+ order_hash: to_hex_str(&value.order_hash),
+ order_type: format!("{:?}", value.order_type),
+ fulfiller: to_hex_str(&Felt::from(value.fulfiller)),
+ related_order_hash: to_hex_str_opt(&related_order_hash),
+ }
+ }
+ }
+ }
+}
diff --git a/crates/diri/src/orderbook/events/order_placed.rs b/crates/diri/src/orderbook/events/order_placed.rs
index 0f8e7ccf6..434cfee2d 100644
--- a/crates/diri/src/orderbook/events/order_placed.rs
+++ b/crates/diri/src/orderbook/events/order_placed.rs
@@ -1,9 +1,12 @@
use cainome::rs::abigen;
use starknet::core::types::{EmittedEvent, Felt};
-use crate::types::{to_hex_str, to_hex_str_opt, u256_to_hex, u256_to_hex_opt, PlacedData};
+use crate::types::PlacedData;
-use super::{OrderbookParseError, ORDER_PLACED_SELECTOR};
+use super::{
+ common::{to_hex_str, to_hex_str_opt, u256_to_hex, u256_to_hex_opt},
+ OrderbookParseError, ORDER_PLACED_SELECTOR,
+};
abigen!(
V1,
diff --git a/crates/diri/src/orderbook/events/rollback_status.rs b/crates/diri/src/orderbook/events/rollback_status.rs
index b66ae599a..423b0982b 100644
--- a/crates/diri/src/orderbook/events/rollback_status.rs
+++ b/crates/diri/src/orderbook/events/rollback_status.rs
@@ -1,7 +1,12 @@
use cainome::rs::abigen;
-use starknet::core::types::{EmittedEvent, Felt};
+use starknet::core::{
+ types::{EmittedEvent, Felt},
+ utils::parse_cairo_short_string,
+};
-use super::{OrderbookParseError, ROLLBACK_STATUS_SELECTOR};
+use crate::types::RollbackStatusData;
+
+use super::{common::to_hex_str, OrderbookParseError, ROLLBACK_STATUS_SELECTOR};
abigen!(
V1,
@@ -107,3 +112,16 @@ impl TryFrom for RollbackStatus {
}
}
}
+
+impl From for RollbackStatusData {
+ fn from(value: RollbackStatus) -> Self {
+ match value {
+ RollbackStatus::V1(value) => Self {
+ order_hash: to_hex_str(&value.order_hash),
+ order_type: format!("{:?}", value.order_type),
+ reason: parse_cairo_short_string(&value.reason)
+ .unwrap_or(to_hex_str(&value.reason)),
+ },
+ }
+ }
+}
diff --git a/crates/diri/src/storage/types.rs b/crates/diri/src/storage/types.rs
index bf0623355..1a1cf49bb 100644
--- a/crates/diri/src/storage/types.rs
+++ b/crates/diri/src/storage/types.rs
@@ -1,13 +1,3 @@
-use num_bigint::BigUint;
-
-use starknet::core::types::Felt;
-use starknet::core::utils::parse_cairo_short_string;
-use std::fmt::LowerHex;
-
-use crate::orderbook::events::{
- OrderCancelled, OrderExecuted, OrderFulfilled, RollbackStatus, U256,
-};
-
#[derive(Debug, Clone)]
pub struct PlacedData {
pub order_hash: String,
@@ -38,19 +28,6 @@ pub struct CancelledData {
pub reason: String,
}
-impl From for CancelledData {
- fn from(value: OrderCancelled) -> Self {
- match value {
- OrderCancelled::V1(value) => Self {
- order_hash: to_hex_str(&value.order_hash),
- order_type: format!("{:?}", value.order_type),
- reason: parse_cairo_short_string(&value.reason)
- .unwrap_or(to_hex_str(&value.reason)),
- },
- }
- }
-}
-
#[derive(Debug, Clone)]
pub struct RollbackStatusData {
pub order_hash: String,
@@ -58,19 +35,6 @@ pub struct RollbackStatusData {
pub reason: String,
}
-impl From for RollbackStatusData {
- fn from(value: RollbackStatus) -> Self {
- match value {
- RollbackStatus::V1(value) => Self {
- order_hash: to_hex_str(&value.order_hash),
- order_type: format!("{:?}", value.order_type),
- reason: parse_cairo_short_string(&value.reason)
- .unwrap_or(to_hex_str(&value.reason)),
- },
- }
- }
-}
-
#[derive(Debug, Clone)]
pub struct FulfilledData {
pub order_hash: String,
@@ -79,23 +43,6 @@ pub struct FulfilledData {
pub related_order_hash: Option,
}
-impl From for FulfilledData {
- fn from(value: OrderFulfilled) -> Self {
- match value {
- OrderFulfilled::V1(value) => {
- let related_order_hash = value.related_order_hash.map(Felt::from);
-
- Self {
- order_hash: to_hex_str(&value.order_hash),
- order_type: format!("{:?}", value.order_type),
- fulfiller: to_hex_str(&Felt::from(value.fulfiller)),
- related_order_hash: to_hex_str_opt(&related_order_hash),
- }
- }
- }
- }
-}
-
#[derive(Debug, Clone)]
pub struct ExecutedData {
pub version: u8,
@@ -105,64 +52,3 @@ pub struct ExecutedData {
pub from: Option,
pub to: Option,
}
-
-impl From for ExecutedData {
- fn from(value: OrderExecuted) -> Self {
- match value {
- OrderExecuted::V0(v) => Self {
- version: 0,
- order_hash: to_hex_str(&v.order_hash),
- order_type: None,
- transaction_hash: None,
- from: None,
- to: None,
- },
- OrderExecuted::V1(v) => Self {
- version: 1,
- order_hash: to_hex_str(&v.order_hash),
- order_type: None,
- transaction_hash: Some(to_hex_str(&v.transaction_hash)),
- from: Some(to_hex_str(&Felt::from(v.from))),
- to: Some(to_hex_str(&Felt::from(v.to))),
- },
- OrderExecuted::V2(v) => Self {
- version: 2,
- order_hash: to_hex_str(&v.order_hash),
- order_type: Some(format!("{:?}", v.order_type)),
- transaction_hash: Some(to_hex_str(&v.transaction_hash)),
- from: Some(to_hex_str(&Felt::from(v.from))),
- to: Some(to_hex_str(&Felt::from(v.to))),
- },
- }
- }
-}
-
-/// Returns the padded hex of '0x' prefixed
-/// representation of the given felt.
-/// TODO: can't use ark_starknet until starknet-rs conflict is resolved.
-pub fn to_hex_str(value: &T) -> String {
- format!("0x{:064x}", value)
-}
-
-pub fn to_hex_str_opt(value: &Option) -> Option {
- value.as_ref().map(|v| format!("0x{:064x}", v))
-}
-
-pub fn u256_to_biguint(v: &U256) -> BigUint {
- let low_bytes = v.low.to_be_bytes();
- let high_bytes = v.high.to_be_bytes();
-
- let mut bytes: Vec = Vec::new();
- bytes.extend(high_bytes);
- bytes.extend(low_bytes);
-
- BigUint::from_bytes_be(&bytes[..])
-}
-
-pub fn u256_to_hex(value: &U256) -> String {
- to_hex_str(&u256_to_biguint(value))
-}
-
-pub fn u256_to_hex_opt(value: &Option) -> Option {
- value.as_ref().map(|v| to_hex_str(&u256_to_biguint(v)))
-}
From 82a3fbe8a1f150191f6075853cc0d3c4559998ef Mon Sep 17 00:00:00 2001
From: Patrice Tisserand
Date: Tue, 24 Sep 2024 09:30:48 +0200
Subject: [PATCH 25/33] feat(diri): update JSON output and add missing end
update
---
crates/diri/examples/display-events.rs | 18 ++++++++++++++----
1 file changed, 14 insertions(+), 4 deletions(-)
diff --git a/crates/diri/examples/display-events.rs b/crates/diri/examples/display-events.rs
index 1e97f48f5..4efcaacfe 100644
--- a/crates/diri/examples/display-events.rs
+++ b/crates/diri/examples/display-events.rs
@@ -21,6 +21,8 @@ use starknet::providers::Provider;
use url::Url;
use std::fs::File;
+use std::sync::atomic::AtomicU64;
+use std::sync::atomic::Ordering;
use std::sync::Arc;
use std::sync::Mutex;
@@ -131,6 +133,7 @@ async fn main() -> Result<()> {
if let Some(to) = to {
if end >= to {
trace!("`to` block was reached, exit.");
+ storage.end.store(end, Ordering::SeqCst);
break; // return Ok(());
}
}
@@ -191,10 +194,16 @@ impl Serialize for SerializablePlacedData {
where
S: serde::Serializer,
{
- let mut state = serializer.serialize_struct("data", 3)?;
+ let mut state = serializer.serialize_struct("data", 9)?;
state.serialize_field("order_hash", &self.0.order_hash)?;
state.serialize_field("order_type", &self.0.order_type)?;
- state.serialize_field("route", &self.0.route)?;
+ state.serialize_field("broker_id", &self.0.broker_id)?;
+ state.serialize_field("offerer", &self.0.offerer)?;
+ state.serialize_field("token_address", &self.0.token_address)?;
+ state.serialize_field("token_id", &self.0.token_id)?;
+ state.serialize_field("quantity", &self.0.quantity)?;
+ state.serialize_field("start_amount", &self.0.start_amount)?;
+ state.serialize_field("end_amount", &self.0.end_amount)?;
state.end()
}
}
@@ -299,7 +308,8 @@ struct OrderbookEvent {
#[derive(Serialize, Debug)]
struct JSONStorage {
start: u64,
- end: u64,
+ end: AtomicU64,
+ #[serde(skip)]
output: Option,
events: Mutex>,
}
@@ -309,7 +319,7 @@ impl JSONStorage {
Self {
output,
start,
- end: 0,
+ end: AtomicU64::new(0),
events: Mutex::new(Vec::new()),
}
}
From df3b518d263f42a6a37c4b2cd2818f61111696cc Mon Sep 17 00:00:00 2001
From: Patrice Tisserand
Date: Tue, 24 Sep 2024 11:18:22 +0200
Subject: [PATCH 26/33] CI: add step to dump devnet state after contract
deployment
---
.github/workflows/arkproject-contracts.yml | 9 ++++++++-
1 file changed, 8 insertions(+), 1 deletion(-)
diff --git a/.github/workflows/arkproject-contracts.yml b/.github/workflows/arkproject-contracts.yml
index 9b42a6b0a..2bc38dab2 100644
--- a/.github/workflows/arkproject-contracts.yml
+++ b/.github/workflows/arkproject-contracts.yml
@@ -14,6 +14,7 @@ env:
SCARB_VERSION: 2.7.1
STARKNET_DEVNET_VERSION: 0.2.0
DEVNET_DUMP_PATH: /devnet-dump.json
+ DEVNET_DEPLOYMENT_DUMP_PATH: /tmp/devnet-deployment-dump.json
jobs:
fmt:
runs-on: ubuntu-latest
@@ -62,7 +63,7 @@ jobs:
docker run -d --rm --name starknet-devnet \
-p 5050:5050 \
shardlabs/starknet-devnet-rs:${STARKNET_DEVNET_VERSION} \
- --seed 0 --dump-path $DEVNET_DUMP_PATH --state-archive-capacity full
+ --seed 0 --dump-path $DEVNET_DUMP_PATH --dump-on exit --state-archive-capacity full
sleep 3 # Wait for 3 seconds for the Docker container to initialize
- name: Install SDK dependencies
@@ -74,6 +75,12 @@ jobs:
- name: Deploy smart contract
run: pnpm deploy:starknet:local
+ - name: Store devnet state after contract deployment
+ run: |
+ curl -H "Content-type: application/json" \
+ -X POST http://localhost:5050/dump \
+ -d '{"path": "$DEVNET_DEPLOYMENT_DUMP_PATH"}'
+
- name: Run SDK test
run: |
cp .env.devnet .env
From a5bcdb0270fe55087ab1140ab3063f90851cdf2a Mon Sep 17 00:00:00 2001
From: Patrice Tisserand
Date: Tue, 24 Sep 2024 13:37:07 +0200
Subject: [PATCH 27/33] restore turbo.json & pnpm-lock
---
pnpm-lock.yaml | 2989 +++++++++++++++++++++++++++++++++---------------
turbo.json | 50 +-
2 files changed, 2064 insertions(+), 975 deletions(-)
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index fd297e36c..d297d2eff 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -16,16 +16,16 @@ importers:
version: link:packages/typescript-config
'@changesets/cli':
specifier: ^2.27.1
- version: 2.27.8
+ version: 2.27.7
'@ianvs/prettier-plugin-sort-imports':
specifier: ^4.1.1
version: 4.3.1(prettier@3.3.3)
bun:
specifier: ^1.0.26
- version: 1.1.28
+ version: 1.1.25
bun-types:
specifier: ^1.0.26
- version: 1.1.28
+ version: 1.1.25
dotenv-cli:
specifier: ^7.3.0
version: 7.4.2
@@ -37,13 +37,13 @@ importers:
version: 3.3.3
prettier-plugin-sort-imports:
specifier: ^1.8.1
- version: 1.8.6(typescript@5.6.2)
+ version: 1.8.6(typescript@5.5.4)
turbo:
specifier: ^2.1.2
version: 2.1.2
typescript:
specifier: ^5.0.0
- version: 5.6.2
+ version: 5.5.4
examples/core:
dependencies:
@@ -61,14 +61,14 @@ importers:
version: 10.9.2(@types/node@22.5.5)(typescript@5.5.4)
typescript:
specifier: ^5.0.0
- version: 5.6.2
+ version: 5.5.4
winston:
specifier: ^3.13.1
version: 3.14.2
devDependencies:
'@types/bun':
specifier: latest
- version: 1.1.9
+ version: 1.1.8
packages/core:
dependencies:
@@ -80,7 +80,7 @@ importers:
version: 6.11.0
viem:
specifier: '>=0.3.35'
- version: 2.21.9(typescript@5.6.2)(zod@3.23.8)
+ version: 2.20.0(typescript@5.5.4)(zod@3.23.8)
devDependencies:
'@ark-project/eslint-config':
specifier: workspace:*
@@ -93,7 +93,7 @@ importers:
version: link:../typescript-config
'@types/node':
specifier: ^20.10.7
- version: 20.16.5
+ version: 20.16.1
dotenv:
specifier: ^16.4.5
version: 16.4.5
@@ -102,31 +102,31 @@ importers:
version: 0.20.2
eslint:
specifier: ^8.48.0
- version: 8.57.1
+ version: 8.57.0
eslint-plugin-mocha:
specifier: ^10.2.0
- version: 10.5.0(eslint@8.57.1)
+ version: 10.5.0(eslint@8.57.0)
mocha:
specifier: ^10.3.0
version: 10.7.3
nodemon:
specifier: ^3.0.2
- version: 3.1.5
+ version: 3.1.4
ts-node:
specifier: ^10.9.1
- version: 10.9.2(@types/node@20.16.5)(typescript@5.6.2)
+ version: 10.9.2(@types/node@20.16.1)(typescript@5.5.4)
tsup:
specifier: ^8.0.1
- version: 8.3.0(postcss@8.4.47)(tsx@4.19.1)(typescript@5.6.2)
+ version: 8.2.4(postcss@8.4.45)(tsx@4.17.0)(typescript@5.5.4)
tsx:
specifier: ^4.11.0
- version: 4.19.1
+ version: 4.17.0
typescript:
specifier: ^5.2.2
- version: 5.6.2
+ version: 5.5.4
vitest:
specifier: ^2.0.5
- version: 2.1.1(@types/node@20.16.5)(jsdom@20.0.3)
+ version: 2.0.5(@types/node@20.16.1)(jsdom@20.0.3)
packages/deployer:
dependencies:
@@ -160,38 +160,38 @@ importers:
version: 22.5.5
tsx:
specifier: ^4.11.0
- version: 4.19.1
+ version: 4.17.0
typescript:
specifier: ^5.3.3
- version: 5.6.2
+ version: 5.5.4
packages/eslint-config:
dependencies:
eslint-plugin-unused-imports:
specifier: ^3.0.0
- version: 3.2.0(@typescript-eslint/eslint-plugin@6.21.0(@typescript-eslint/parser@6.21.0(eslint@8.57.1)(typescript@5.6.2))(eslint@8.57.1)(typescript@5.6.2))(eslint@8.57.1)
+ version: 3.2.0(@typescript-eslint/eslint-plugin@6.21.0(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.5.4))(eslint@8.57.0)(typescript@5.5.4))(eslint@8.57.0)
devDependencies:
'@typescript-eslint/eslint-plugin':
specifier: ^6.11.0
- version: 6.21.0(@typescript-eslint/parser@6.21.0(eslint@8.57.1)(typescript@5.6.2))(eslint@8.57.1)(typescript@5.6.2)
+ version: 6.21.0(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.5.4))(eslint@8.57.0)(typescript@5.5.4)
'@typescript-eslint/parser':
specifier: ^6.11.0
- version: 6.21.0(eslint@8.57.1)(typescript@5.6.2)
+ version: 6.21.0(eslint@8.57.0)(typescript@5.5.4)
'@vercel/style-guide':
specifier: ^5.1.0
- version: 5.2.0(eslint@8.57.1)(prettier@3.3.3)(typescript@5.6.2)
+ version: 5.2.0(eslint@8.57.0)(jest@29.7.0(@types/node@22.5.5)(ts-node@10.9.2(@types/node@22.5.5)(typescript@5.5.4)))(prettier@3.3.3)(typescript@5.5.4)
eslint-config-prettier:
specifier: ^9.0.0
- version: 9.1.0(eslint@8.57.1)
+ version: 9.1.0(eslint@8.57.0)
eslint-config-turbo:
specifier: ^2.1.2
- version: 2.1.2(eslint@8.57.1)
+ version: 2.1.2(eslint@8.57.0)
eslint-plugin-only-warn:
specifier: ^1.1.0
version: 1.1.0
typescript:
specifier: ^5.2.2
- version: 5.6.2
+ version: 5.5.4
packages/react:
dependencies:
@@ -209,7 +209,7 @@ importers:
version: 2.9.0(get-starknet-core@3.3.3(starknet@6.11.0))(react@18.3.1)(starknet@6.11.0)
'@tanstack/react-query':
specifier: ^5.55.4
- version: 5.56.2(react@18.3.1)
+ version: 5.55.4(react@18.3.1)
get-starknet-core:
specifier: ^3.3.0
version: 3.3.3(starknet@6.11.0)
@@ -237,38 +237,86 @@ importers:
version: 6.5.0
'@testing-library/react':
specifier: ^16.0.1
- version: 16.0.1(@testing-library/dom@10.4.0)(@types/react@18.3.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ version: 16.0.1(@testing-library/dom@10.4.0)(@types/react@18.3.4)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
'@testing-library/react-hooks':
specifier: ^8.0.1
- version: 8.0.1(@types/react@18.3.7)(react-dom@18.3.1(react@18.3.1))(react-test-renderer@18.3.1(react@18.3.1))(react@18.3.1)
+ version: 8.0.1(@types/react@18.3.4)(react-dom@18.3.1(react@18.3.1))(react-test-renderer@18.3.1(react@18.3.1))(react@18.3.1)
'@types/react':
specifier: ^18
- version: 18.3.7
+ version: 18.3.4
dotenv:
specifier: ^16.4.5
version: 16.4.5
- jest:
- specifier: ^29.7.0
- version: 29.7.0(@types/node@22.5.5)
jest-environment-jsdom:
specifier: ^29.7.0
version: 29.7.0
nodemon:
specifier: ^3.0.2
- version: 3.1.5
+ version: 3.1.4
react-test-renderer:
specifier: ^18.3.1
version: 18.3.1(react@18.3.1)
- ts-jest:
- specifier: ^29.1.1
- version: 29.2.5(@babel/core@7.25.2)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.25.2))(jest@29.7.0(@types/node@22.5.5))(typescript@5.5.4)
typescript:
specifier: ^5.3.3
- version: 5.6.2
+ version: 5.5.4
vitest:
specifier: ^2.0.5
version: 2.0.5(@types/node@22.5.5)(jsdom@20.0.3)
+ packages/test:
+ devDependencies:
+ '@ark-project/eslint-config':
+ specifier: workspace:*
+ version: link:../eslint-config
+ '@ark-project/typescript-config':
+ specifier: workspace:*
+ version: link:../typescript-config
+ '@starknet-react/chains':
+ specifier: ^0.1.7
+ version: 0.1.7
+ '@starknet-react/core':
+ specifier: ^2.8.1
+ version: 2.9.0(get-starknet-core@4.0.0)(react@18.3.1)(starknet@6.11.0)
+ '@tanstack/react-query':
+ specifier: ^5.55.4
+ version: 5.55.4(react@18.3.1)
+ '@testing-library/dom':
+ specifier: ^10.4.0
+ version: 10.4.0
+ '@testing-library/jest-dom':
+ specifier: ^6.5.0
+ version: 6.5.0
+ '@testing-library/react':
+ specifier: ^16.0.1
+ version: 16.0.1(@testing-library/dom@10.4.0)(@types/react@18.3.4)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@testing-library/react-hooks':
+ specifier: ^8.0.1
+ version: 8.0.1(@types/react@18.3.4)(react-dom@18.3.1(react@18.3.1))(react-test-renderer@18.3.1(react@18.3.1))(react@18.3.1)
+ '@types/react':
+ specifier: ^18
+ version: 18.3.4
+ dotenv:
+ specifier: ^16.4.5
+ version: 16.4.5
+ jest-environment-jsdom:
+ specifier: ^29.7.0
+ version: 29.7.0
+ react:
+ specifier: ^18
+ version: 18.3.1
+ react-dom:
+ specifier: ^18
+ version: 18.3.1(react@18.3.1)
+ react-test-renderer:
+ specifier: ^18.3.1
+ version: 18.3.1(react@18.3.1)
+ starknet:
+ specifier: ^6.9.0
+ version: 6.11.0
+ typescript:
+ specifier: ^5.3.3
+ version: 5.5.4
+
packages/typescript-config: {}
packages:
@@ -302,8 +350,8 @@ packages:
'@babel/core': ^7.11.0
eslint: ^7.5.0 || ^8.0.0 || ^9.0.0
- '@babel/generator@7.25.6':
- resolution: {integrity: sha512-VPC82gr1seXOpkjAAKoLhP50vx4vGNlF4msF64dSFq1P8RfB+QAuJWGHPXXPc8QyfVWwwB/TNNU4+ayZmHNbZw==}
+ '@babel/generator@7.25.5':
+ resolution: {integrity: sha512-abd43wyLfbWoxC6ahM8xTkqLpGB2iWBVyuKC9/srhFunCd1SDNrV1s72bBpK4hLj8KLzHBBcOblvLQZBNw9r3w==}
engines: {node: '>=6.9.0'}
'@babel/helper-compilation-targets@7.25.2':
@@ -320,6 +368,10 @@ packages:
peerDependencies:
'@babel/core': ^7.0.0
+ '@babel/helper-plugin-utils@7.24.8':
+ resolution: {integrity: sha512-FFWx5142D8h2Mgr/iPVGH5G7w6jDn4jUSpZTyDnQO0Yn7Ks2Kuz6Pci8H6MPCoUJegd/UZQ3tAvfLCxQSnWWwg==}
+ engines: {node: '>=6.9.0'}
+
'@babel/helper-simple-access@7.24.7':
resolution: {integrity: sha512-zBAIvbCMh5Ts+b86r/CjU+4XGYIs+R1j951gxI3KmmxBMhCg4oQMsv6ZXQ64XOm/cvzfU1FmoCyt6+owc5QMYg==}
engines: {node: '>=6.9.0'}
@@ -336,80 +388,174 @@ packages:
resolution: {integrity: sha512-xb8t9tD1MHLungh/AIoWYN+gVHaB9kwlu8gffXGSt3FFEIT7RjS+xWbc2vUD1UTZdIpKj/ab3rdqJ7ufngyi2Q==}
engines: {node: '>=6.9.0'}
- '@babel/helpers@7.25.6':
- resolution: {integrity: sha512-Xg0tn4HcfTijTwfDwYlvVCl43V6h4KyVVX2aEm4qdO/PC6L2YvzLHFdmxhoeSA3eslcE6+ZVXHgWwopXYLNq4Q==}
+ '@babel/helpers@7.25.0':
+ resolution: {integrity: sha512-MjgLZ42aCm0oGjJj8CtSM3DB8NOOf8h2l7DCTePJs29u+v7yO/RBX9nShlKMgFnRks/Q4tBAe7Hxnov9VkGwLw==}
engines: {node: '>=6.9.0'}
'@babel/highlight@7.24.7':
resolution: {integrity: sha512-EStJpq4OuY8xYfhGVXngigBJRWxftKX9ksiGDnmlY3o7B/V7KIAc9X4oiK87uPJSc/vs5L869bem5fhZa8caZw==}
engines: {node: '>=6.9.0'}
- '@babel/parser@7.25.6':
- resolution: {integrity: sha512-trGdfBdbD0l1ZPmcJ83eNxB9rbEax4ALFTF7fN386TMYbeCQbyme5cOEXQhbGXKebwGaB/J52w1mrklMcbgy6Q==}
+ '@babel/parser@7.25.4':
+ resolution: {integrity: sha512-nq+eWrOgdtu3jG5Os4TQP3x3cLA8hR8TvJNjD8vnPa20WGycimcparWnLK4jJhElTK6SDyuJo1weMKO/5LpmLA==}
engines: {node: '>=6.0.0'}
hasBin: true
- '@babel/runtime@7.25.6':
- resolution: {integrity: sha512-VBj9MYyDb9tuLq7yzqjgzt6Q+IBQLrGZfdjOekyEirZPHxXWoTSGUTMrpsfi58Up73d13NfYLv8HT9vmznjzhQ==}
+ '@babel/plugin-syntax-async-generators@7.8.4':
+ resolution: {integrity: sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-syntax-bigint@7.8.3':
+ resolution: {integrity: sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-syntax-class-properties@7.12.13':
+ resolution: {integrity: sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-syntax-class-static-block@7.14.5':
+ resolution: {integrity: sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-syntax-import-attributes@7.24.7':
+ resolution: {integrity: sha512-hbX+lKKeUMGihnK8nvKqmXBInriT3GVjzXKFriV3YC6APGxMbP8RZNFwy91+hocLXq90Mta+HshoB31802bb8A==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-syntax-import-meta@7.10.4':
+ resolution: {integrity: sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-syntax-json-strings@7.8.3':
+ resolution: {integrity: sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-syntax-jsx@7.24.7':
+ resolution: {integrity: sha512-6ddciUPe/mpMnOKv/U+RSd2vvVy+Yw/JfBB0ZHYjEZt9NLHmCUylNYlsbqCCS1Bffjlb0fCwC9Vqz+sBz6PsiQ==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-syntax-logical-assignment-operators@7.10.4':
+ resolution: {integrity: sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-syntax-nullish-coalescing-operator@7.8.3':
+ resolution: {integrity: sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-syntax-numeric-separator@7.10.4':
+ resolution: {integrity: sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-syntax-object-rest-spread@7.8.3':
+ resolution: {integrity: sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-syntax-optional-catch-binding@7.8.3':
+ resolution: {integrity: sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-syntax-optional-chaining@7.8.3':
+ resolution: {integrity: sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-syntax-private-property-in-object@7.14.5':
+ resolution: {integrity: sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-syntax-top-level-await@7.14.5':
+ resolution: {integrity: sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-syntax-typescript@7.25.4':
+ resolution: {integrity: sha512-uMOCoHVU52BsSWxPOMVv5qKRdeSlPuImUCB2dlPuBSU+W2/ROE7/Zg8F2Kepbk+8yBa68LlRKxO+xgEVWorsDg==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/runtime@7.25.4':
+ resolution: {integrity: sha512-DSgLeL/FNcpXuzav5wfYvHCGvynXkJbn3Zvc3823AEe9nPwW9IK4UoCSS5yGymmQzN0pCPvivtgS6/8U2kkm1w==}
engines: {node: '>=6.9.0'}
'@babel/template@7.25.0':
resolution: {integrity: sha512-aOOgh1/5XzKvg1jvVz7AVrx2piJ2XBi227DHmbY6y+bM9H2FlN+IfecYu4Xl0cNiiVejlsCri89LUsbj8vJD9Q==}
engines: {node: '>=6.9.0'}
- '@babel/traverse@7.25.6':
- resolution: {integrity: sha512-9Vrcx5ZW6UwK5tvqsj0nGpp/XzqthkT0dqIc9g1AdtygFToNtTF67XzYS//dm+SAK9cp3B9R4ZO/46p63SCjlQ==}
+ '@babel/traverse@7.25.4':
+ resolution: {integrity: sha512-VJ4XsrD+nOvlXyLzmLzUs/0qjFS4sK30te5yEFlvbbUNEgKaVb2BHZUpAL+ttLPQAHNrsI3zZisbfha5Cvr8vg==}
engines: {node: '>=6.9.0'}
- '@babel/types@7.25.6':
- resolution: {integrity: sha512-/l42B1qxpG6RdfYf343Uw1vmDjeNhneUXtzhojE7pDgfpEypmRhI6j1kr17XCVv4Cgl9HdAiQY2x0GwKm7rWCw==}
+ '@babel/types@7.25.4':
+ resolution: {integrity: sha512-zQ1ijeeCXVEh+aNL0RlmkPkG8HUiDcU2pzQQFjtbntgAczRASFzj4H+6+bV+dy1ntKR14I/DypeuRG1uma98iQ==}
engines: {node: '>=6.9.0'}
- '@changesets/apply-release-plan@7.0.5':
- resolution: {integrity: sha512-1cWCk+ZshEkSVEZrm2fSj1Gz8sYvxgUL4Q78+1ZZqeqfuevPTPk033/yUZ3df8BKMohkqqHfzj0HOOrG0KtXTw==}
+ '@bcoe/v8-coverage@0.2.3':
+ resolution: {integrity: sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==}
+
+ '@changesets/apply-release-plan@7.0.4':
+ resolution: {integrity: sha512-HLFwhKWayKinWAul0Vj+76jVx1Pc2v55MGPVjZ924Y/ROeSsBMFutv9heHmCUj48lJyRfOTJG5+ar+29FUky/A==}
- '@changesets/assemble-release-plan@6.0.4':
- resolution: {integrity: sha512-nqICnvmrwWj4w2x0fOhVj2QEGdlUuwVAwESrUo5HLzWMI1rE5SWfsr9ln+rDqWB6RQ2ZyaMZHUcU7/IRaUJS+Q==}
+ '@changesets/assemble-release-plan@6.0.3':
+ resolution: {integrity: sha512-bLNh9/Lgl1VwkjWZTq8JmRqH+hj7/Yzfz0jsQ/zJJ+FTmVqmqPj3szeKOri8O/hEM8JmHW019vh2gTO9iq5Cuw==}
'@changesets/changelog-git@0.2.0':
resolution: {integrity: sha512-bHOx97iFI4OClIT35Lok3sJAwM31VbUM++gnMBV16fdbtBhgYu4dxsphBF/0AZZsyAHMrnM0yFcj5gZM1py6uQ==}
- '@changesets/cli@2.27.8':
- resolution: {integrity: sha512-gZNyh+LdSsI82wBSHLQ3QN5J30P4uHKJ4fXgoGwQxfXwYFTJzDdvIJasZn8rYQtmKhyQuiBj4SSnLuKlxKWq4w==}
+ '@changesets/cli@2.27.7':
+ resolution: {integrity: sha512-6lr8JltiiXPIjDeYg4iM2MeePP6VN/JkmqBsVA5XRiy01hGS3y629LtSDvKcycj/w/5Eur1rEwby/MjcYS+e2A==}
hasBin: true
- '@changesets/config@3.0.3':
- resolution: {integrity: sha512-vqgQZMyIcuIpw9nqFIpTSNyc/wgm/Lu1zKN5vECy74u95Qx/Wa9g27HdgO4NkVAaq+BGA8wUc/qvbvVNs93n6A==}
+ '@changesets/config@3.0.2':
+ resolution: {integrity: sha512-cdEhS4t8woKCX2M8AotcV2BOWnBp09sqICxKapgLHf9m5KdENpWjyrFNMjkLqGJtUys9U+w93OxWT0czorVDfw==}
'@changesets/errors@0.2.0':
resolution: {integrity: sha512-6BLOQUscTpZeGljvyQXlWOItQyU71kCdGz7Pi8H8zdw6BI0g3m43iL4xKUVPWtG+qrrL9DTjpdn8eYuCQSRpow==}
- '@changesets/get-dependents-graph@2.1.2':
- resolution: {integrity: sha512-sgcHRkiBY9i4zWYBwlVyAjEM9sAzs4wYVwJUdnbDLnVG3QwAaia1Mk5P8M7kraTOZN+vBET7n8KyB0YXCbFRLQ==}
+ '@changesets/get-dependents-graph@2.1.1':
+ resolution: {integrity: sha512-LRFjjvigBSzfnPU2n/AhFsuWR5DK++1x47aq6qZ8dzYsPtS/I5mNhIGAS68IAxh1xjO9BTtz55FwefhANZ+FCA==}
- '@changesets/get-release-plan@4.0.4':
- resolution: {integrity: sha512-SicG/S67JmPTrdcc9Vpu0wSQt7IiuN0dc8iR5VScnnTVPfIaLvKmEGRvIaF0kcn8u5ZqLbormZNTO77bCEvyWw==}
+ '@changesets/get-release-plan@4.0.3':
+ resolution: {integrity: sha512-6PLgvOIwTSdJPTtpdcr3sLtGatT+Jr22+cQwEBJBy6wP0rjB4yJ9lv583J9fVpn1bfQlBkDa8JxbS2g/n9lIyA==}
'@changesets/get-version-range-type@0.4.0':
resolution: {integrity: sha512-hwawtob9DryoGTpixy1D3ZXbGgJu1Rhr+ySH2PvTLHvkZuQ7sRT4oQwMh0hbqZH1weAooedEjRsbrWcGLCeyVQ==}
- '@changesets/git@3.0.1':
- resolution: {integrity: sha512-pdgHcYBLCPcLd82aRcuO0kxCDbw/yISlOtkmwmE8Odo1L6hSiZrBOsRl84eYG7DRCab/iHnOkWqExqc4wxk2LQ==}
+ '@changesets/git@3.0.0':
+ resolution: {integrity: sha512-vvhnZDHe2eiBNRFHEgMiGd2CT+164dfYyrJDhwwxTVD/OW0FUD6G7+4DIx1dNwkwjHyzisxGAU96q0sVNBns0w==}
- '@changesets/logger@0.1.1':
- resolution: {integrity: sha512-OQtR36ZlnuTxKqoW4Sv6x5YIhOmClRd5pWsjZsddYxpWs517R0HkyiefQPIytCVh4ZcC5x9XaG8KTdd5iRQUfg==}
+ '@changesets/logger@0.1.0':
+ resolution: {integrity: sha512-pBrJm4CQm9VqFVwWnSqKEfsS2ESnwqwH+xR7jETxIErZcfd1u2zBSqrHbRHR7xjhSgep9x2PSKFKY//FAshA3g==}
'@changesets/parse@0.4.0':
resolution: {integrity: sha512-TS/9KG2CdGXS27S+QxbZXgr8uPsP4yNJYb4BC2/NeFUj80Rni3TeD2qwWmabymxmrLo7JEsytXH1FbpKTbvivw==}
- '@changesets/pre@2.0.1':
- resolution: {integrity: sha512-vvBJ/If4jKM4tPz9JdY2kGOgWmCowUYOi5Ycv8dyLnEE8FgpYYUo1mgJZxcdtGGP3aG8rAQulGLyyXGSLkIMTQ==}
+ '@changesets/pre@2.0.0':
+ resolution: {integrity: sha512-HLTNYX/A4jZxc+Sq8D1AMBsv+1qD6rmmJtjsCJa/9MSRybdxh0mjbTvE6JYZQ/ZiQ0mMlDOlGPXTm9KLTU3jyw==}
- '@changesets/read@0.6.1':
- resolution: {integrity: sha512-jYMbyXQk3nwP25nRzQQGa1nKLY0KfoOV7VLgwucI0bUO8t8ZLCr6LZmgjXsiKuRDc+5A6doKPr9w2d+FEJ55zQ==}
+ '@changesets/read@0.6.0':
+ resolution: {integrity: sha512-ZypqX8+/im1Fm98K4YcZtmLKgjs1kDQ5zHpc2U1qdtNBmZZfo/IBiG162RoP0CUF05tvp2y4IspH11PLnPxuuw==}
- '@changesets/should-skip-package@0.1.1':
- resolution: {integrity: sha512-H9LjLbF6mMHLtJIc/eHR9Na+MifJ3VxtgP/Y+XLn4BF7tDTEN1HNYtH6QMcjP1uxp9sjaFYmW8xqloaCi/ckTg==}
+ '@changesets/should-skip-package@0.1.0':
+ resolution: {integrity: sha512-FxG6Mhjw7yFStlSM7Z0Gmg3RiyQ98d/9VpQAZ3Fzr59dCOM9G6ZdYbjiSAt0XtFr9JR5U2tBaJWPjrkGGc618g==}
'@changesets/types@4.1.0':
resolution: {integrity: sha512-LDQvVDv5Kb50ny2s25Fhm3d9QSZimsoUGBsUioj6MC3qbMUCuC8GPIvk/M6IvXx3lYhAs0lwWUQLb+VIEUCECw==}
@@ -417,8 +563,8 @@ packages:
'@changesets/types@6.0.0':
resolution: {integrity: sha512-b1UkfNulgKoWfqyHtzKS5fOZYSJO+77adgL7DLRDr+/7jhChN+QcHnbjiQVOz/U+Ts3PGNySq7diAItzDgugfQ==}
- '@changesets/write@0.3.2':
- resolution: {integrity: sha512-kDxDrPNpUgsjDbWBvUo27PzKX4gqeKOlhibaOXDJA6kuBisGqNHv/HwGJrAu8U/dSf8ZEFIeHIPtvSlZI1kULw==}
+ '@changesets/write@0.3.1':
+ resolution: {integrity: sha512-SyGtMXzH3qFqlHKcvFY2eX+6b0NGiFcNav8AFsYwy5l8hejOeoeTDemu5Yjmke2V5jpzY+pBvM0vCCQ3gdZpfw==}
'@colors/colors@1.6.0':
resolution: {integrity: sha512-Ir+AOibqzrIsL6ajt3Rz3LskB7OiMVHqltZmspbW/TJuTVuyOMirVqAkjfY6JISiLHgyNqicAC8AyHHGzNd/dA==}
@@ -857,20 +1003,20 @@ packages:
peerDependencies:
eslint: ^6.0.0 || ^7.0.0 || >=8.0.0
- '@eslint-community/regexpp@4.11.1':
- resolution: {integrity: sha512-m4DVN9ZqskZoLU5GlWZadwDnYo3vAEydiUayB9widCl9ffWx2IvPnp6n3on5rJmziJSw9Bv+Z3ChDVdMwXCY8Q==}
+ '@eslint-community/regexpp@4.11.0':
+ resolution: {integrity: sha512-G/M/tIiMrTAxEWRfLfQJMmGNX28IxBg4PBz8XqQhqUHLFI6TL2htpIB1iQCj144V5ee/JaKyT9/WZ0MGZWfA7A==}
engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0}
'@eslint/eslintrc@2.1.4':
resolution: {integrity: sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==}
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
- '@eslint/js@8.57.1':
- resolution: {integrity: sha512-d9zaMRSTIKDLhctzH12MtXvJKSSUhaHcjV+2Z+GK+EEY7XKpP5yR4x+N3TAcHTcu963nIr+TMcCb4DBCYX1z6Q==}
+ '@eslint/js@8.57.0':
+ resolution: {integrity: sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g==}
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
- '@humanwhocodes/config-array@0.13.0':
- resolution: {integrity: sha512-DZLEEqFWQFiyK6h5YIeynKx7JlvCYWL0cImfSRXZ9l4Sg2efkFGTuFf6vzXjK1cq6IYkU+Eg/JizXw+TD2vRNw==}
+ '@humanwhocodes/config-array@0.11.14':
+ resolution: {integrity: sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==}
engines: {node: '>=10.10.0'}
deprecated: Use @eslint/config-array instead
@@ -895,18 +1041,76 @@ packages:
resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==}
engines: {node: '>=12'}
+ '@istanbuljs/load-nyc-config@1.1.0':
+ resolution: {integrity: sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==}
+ engines: {node: '>=8'}
+
+ '@istanbuljs/schema@0.1.3':
+ resolution: {integrity: sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==}
+ engines: {node: '>=8'}
+
+ '@jest/console@29.7.0':
+ resolution: {integrity: sha512-5Ni4CU7XHQi32IJ398EEP4RrB8eV09sXP2ROqD4bksHrnTree52PsxvX8tpL8LvTZ3pFzXyPbNQReSN41CAhOg==}
+ engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
+
+ '@jest/core@29.7.0':
+ resolution: {integrity: sha512-n7aeXWKMnGtDA48y8TLWJPJmLmmZ642Ceo78cYWEpiD7FzDgmNDV/GCVRorPABdXLJZ/9wzzgZAlHjXjxDHGsg==}
+ 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
+
'@jest/environment@29.7.0':
resolution: {integrity: sha512-aQIfHDq33ExsN4jP1NWGXhxgQ/wixs60gDiKO+XVMd8Mn0NWPWgc34ZQDTb2jKaUWQ7MuwoitXAsN2XVXNMpAw==}
engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
+ '@jest/expect-utils@29.7.0':
+ resolution: {integrity: sha512-GlsNBWiFQFCVi9QVSx7f5AgMeLxe9YCCs5PuP2O2LdjDAA8Jh9eX7lA1Jq/xdXw3Wb3hyvlFNfZIfcRetSzYcA==}
+ engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
+
+ '@jest/expect@29.7.0':
+ resolution: {integrity: sha512-8uMeAMycttpva3P1lBHB8VciS9V0XAr3GymPpipdyQXbBcuhkLQOSe8E/p92RyAdToS6ZD1tFkX+CkhoECE0dQ==}
+ engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
+
'@jest/fake-timers@29.7.0':
resolution: {integrity: sha512-q4DH1Ha4TTFPdxLsqDXK1d3+ioSL7yL5oCMJZgDYm6i+6CygW5E5xVr/D1HdsGxjt1ZWSfUAs9OxSB/BNelWrQ==}
engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
+ '@jest/globals@29.7.0':
+ resolution: {integrity: sha512-mpiz3dutLbkW2MNFubUGUEVLkTGiqW6yLVTA+JbP6fI6J5iL9Y0Nlg8k95pcF8ctKwCS7WVxteBs29hhfAotzQ==}
+ engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
+
+ '@jest/reporters@29.7.0':
+ resolution: {integrity: sha512-DApq0KJbJOEzAFYjHADNNxAE3KbhxQB1y5Kplb5Waqw6zVbuWatSnMjE5gs8FUgEPmNsnZA3NCWl9NG0ia04Pg==}
+ 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
+
'@jest/schemas@29.6.3':
resolution: {integrity: sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==}
engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
+ '@jest/source-map@29.6.3':
+ resolution: {integrity: sha512-MHjT95QuipcPrpLM+8JMSzFx6eHp5Bm+4XeFDJlwsvVBjmKNiIAvasGK2fxz2WbGRlnvqehFbh07MMa7n3YJnw==}
+ engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
+
+ '@jest/test-result@29.7.0':
+ resolution: {integrity: sha512-Fdx+tv6x1zlkJPcWXmMDAG2HBnaR9XPSd5aDWQVsfrZmLVT3lU1cwyxLgRmXR9yrq4NBoEm9BMsfgFzTQAbJYA==}
+ engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
+
+ '@jest/test-sequencer@29.7.0':
+ resolution: {integrity: sha512-GQwJ5WZVrKnOJuiYiAF52UNUJXgTZx1NHjFSEB0qEMmSZKAkdMoIzw/Cj6x6NF4AvV23AUqDpFzQkN/eYCYTxw==}
+ engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
+
+ '@jest/transform@29.7.0':
+ resolution: {integrity: sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw==}
+ engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
+
'@jest/types@29.6.3':
resolution: {integrity: sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==}
engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
@@ -977,10 +1181,6 @@ packages:
resolution: {integrity: sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg==}
engines: {node: '>= 16'}
- '@noble/hashes@1.5.0':
- resolution: {integrity: sha512-1j6kQFb7QRru7eKN3ZDvRcP13rugwdxZqCjbiAVZfIJwgj2A65UmT4TgARXGlXgnRkORLTDTrO19ZErt7+QXgA==}
- engines: {node: ^14.21.3 || >=16}
-
'@nodelib/fs.scandir@2.1.5':
resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==}
engines: {node: '>= 8'}
@@ -993,47 +1193,43 @@ packages:
resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==}
engines: {node: '>= 8'}
- '@nolyfill/is-core-module@1.0.39':
- resolution: {integrity: sha512-nn5ozdjYQpUCZlWGuxcJY/KpxkWQs4DcbMCmKojjyrYDEAGy4Ce19NN4v5MduafTwJlbKc99UA8YhSVqq9yPZA==}
- engines: {node: '>=12.4.0'}
-
- '@oven/bun-darwin-aarch64@1.1.28':
- resolution: {integrity: sha512-nshua/2v/9g5wOn0pDexSbhFuLZihklKKIZmtV7PicX1ARluv0h+5LJd8w7u2IfYRxJF34xh/1BAb+QF6npPvw==}
+ '@oven/bun-darwin-aarch64@1.1.25':
+ resolution: {integrity: sha512-E7/y3K+8IcH+/i0OBPtVUmA6WfPaixR3SCm04QPCkSiekrNVftVOzkQaShmz40QsdvsFjK/5oVwCg39wCuo+7A==}
cpu: [arm64]
os: [darwin]
- '@oven/bun-darwin-x64-baseline@1.1.28':
- resolution: {integrity: sha512-2LWuwaV8ydhaxJQQNmfNVTyltbYUkguNLzl13yR6rDFv3PajcVnvLQFczJdIvrUXjQy+qZyA1hn0dJABbyo2UA==}
+ '@oven/bun-darwin-x64-baseline@1.1.25':
+ resolution: {integrity: sha512-JbUSBI+CJjsAvkIeE7O9z7FEH1qjcsssn7iI4KmYoZEJK66/gnkVRhqfLNSUKEPdaEK3PyDB7UE4EAJlrcNj9g==}
cpu: [x64]
os: [darwin]
- '@oven/bun-darwin-x64@1.1.28':
- resolution: {integrity: sha512-sQ5YSnPhBNvyPJ3I+McvaUWB6TEsAVg+x2z7ddVZV/jmeeQYwcakYUAxIHYH7nW+SLfJ0CQZO2BmTjXgt3sISA==}
+ '@oven/bun-darwin-x64@1.1.25':
+ resolution: {integrity: sha512-xL4P+TJk7acIz4x6CKIF6BH97mjdRvwh3a3S5EsaxsNXnFFvBNPFpwEGhITCtHPSURj4x34mZq4v63znZcseNQ==}
cpu: [x64]
os: [darwin]
- '@oven/bun-linux-aarch64@1.1.28':
- resolution: {integrity: sha512-FPtMJ3KoWz+D5BsIo5o/eT4a0usFFAkHGJzZUHY9LUc9AfuI9fpM34Pg1OI6tjy11TVhMTgi/rGGqChwVGfHFg==}
+ '@oven/bun-linux-aarch64@1.1.25':
+ resolution: {integrity: sha512-vZzqRb+LRiQd5SRvRde0ZsFFh1vZIy2tH3KNOxuQp/QmXLNNibmA+vNdCszeRlm3a2QKaioVLhHmuh6kpL5zhw==}
cpu: [arm64]
os: [linux]
- '@oven/bun-linux-x64-baseline@1.1.28':
- resolution: {integrity: sha512-A6sI60sT3VeP8vSIKt7rdcUm0L6OHLx9e+fIJDymDLFMqGPRBQEiZNFJ6B4aUIrjJkjxzlXaxc51upTkQbOGsw==}
+ '@oven/bun-linux-x64-baseline@1.1.25':
+ resolution: {integrity: sha512-9Kv1Yte/UxBdFODLXttxHBvy/k/DlzyOt4GZkYsL0h9G0ZrOucTfTpotKR2ElDszzUtQbNYOw9UYJ7OUnDkdZA==}
cpu: [x64]
os: [linux]
- '@oven/bun-linux-x64@1.1.28':
- resolution: {integrity: sha512-tufL1ueIIfkjve16eZyK6BzLcWsCdAb1x9gvusBsOCNUx+L8I910hqF5HyCDCJMAuK6kaF1r+/KHmWQdBbOV9g==}
+ '@oven/bun-linux-x64@1.1.25':
+ resolution: {integrity: sha512-err75vLLEXW00BvZU37mYzxzzkP0+XWZlRYS0bqVrLQeQFAuXPohuOUFKLD0UXSTtqiwSnedZQkBHFWxp3O7Sg==}
cpu: [x64]
os: [linux]
- '@oven/bun-windows-x64-baseline@1.1.28':
- resolution: {integrity: sha512-pwMweAWxbi2ZQ61YvOLmvh52FGflQt24lJU4/brwGF+5bqhgcLiubtnwDIBFek2srp2nDsrsXhpZzkA0TheVsg==}
+ '@oven/bun-windows-x64-baseline@1.1.25':
+ resolution: {integrity: sha512-hNYQFYSRx/JdMZDfqFLCQSm/nS9/JPpz7aBGuL6C1HpT0cvuPuxxpK7KnaWfrj+ws0BX2Id/s4hrdUNfbovR5Q==}
cpu: [x64]
os: [win32]
- '@oven/bun-windows-x64@1.1.28':
- resolution: {integrity: sha512-BAfoHDYPDtt9qKtPX5Xv7TZOKND5WbXk/LVnC3cGEEmo9Gym/vIwfVG9xMoy1mVdRkmayY0eFCmW2VBlsmnU8g==}
+ '@oven/bun-windows-x64@1.1.25':
+ resolution: {integrity: sha512-Gfrnwn8s+juDiLa0pdq2RnKsAZY4oSxNrQmopZu044V0EmpLKJJWE9llHki/33ezVFXamiyJ0MJIfFeLflC0Kg==}
cpu: [x64]
os: [win32]
@@ -1045,100 +1241,97 @@ packages:
resolution: {integrity: sha512-cq8o4cWH0ibXh9VGi5P20Tu9XF/0fFXl9EUinr9QfTM7a7p0oTA4iJRCQWppXR1Pg8dSM0UCItCkPwsk9qWWYA==}
engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0}
- '@rollup/rollup-android-arm-eabi@4.21.3':
- resolution: {integrity: sha512-MmKSfaB9GX+zXl6E8z4koOr/xU63AMVleLEa64v7R0QF/ZloMs5vcD1sHgM64GXXS1csaJutG+ddtzcueI/BLg==}
+ '@rollup/rollup-android-arm-eabi@4.21.0':
+ resolution: {integrity: sha512-WTWD8PfoSAJ+qL87lE7votj3syLavxunWhzCnx3XFxFiI/BA/r3X7MUM8dVrH8rb2r4AiO8jJsr3ZjdaftmnfA==}
cpu: [arm]
os: [android]
- '@rollup/rollup-android-arm64@4.21.3':
- resolution: {integrity: sha512-zrt8ecH07PE3sB4jPOggweBjJMzI1JG5xI2DIsUbkA+7K+Gkjys6eV7i9pOenNSDJH3eOr/jLb/PzqtmdwDq5g==}
+ '@rollup/rollup-android-arm64@4.21.0':
+ resolution: {integrity: sha512-a1sR2zSK1B4eYkiZu17ZUZhmUQcKjk2/j9Me2IDjk1GHW7LB5Z35LEzj9iJch6gtUfsnvZs1ZNyDW2oZSThrkA==}
cpu: [arm64]
os: [android]
- '@rollup/rollup-darwin-arm64@4.21.3':
- resolution: {integrity: sha512-P0UxIOrKNBFTQaXTxOH4RxuEBVCgEA5UTNV6Yz7z9QHnUJ7eLX9reOd/NYMO3+XZO2cco19mXTxDMXxit4R/eQ==}
+ '@rollup/rollup-darwin-arm64@4.21.0':
+ resolution: {integrity: sha512-zOnKWLgDld/svhKO5PD9ozmL6roy5OQ5T4ThvdYZLpiOhEGY+dp2NwUmxK0Ld91LrbjrvtNAE0ERBwjqhZTRAA==}
cpu: [arm64]
os: [darwin]
- '@rollup/rollup-darwin-x64@4.21.3':
- resolution: {integrity: sha512-L1M0vKGO5ASKntqtsFEjTq/fD91vAqnzeaF6sfNAy55aD+Hi2pBI5DKwCO+UNDQHWsDViJLqshxOahXyLSh3EA==}
+ '@rollup/rollup-darwin-x64@4.21.0':
+ resolution: {integrity: sha512-7doS8br0xAkg48SKE2QNtMSFPFUlRdw9+votl27MvT46vo44ATBmdZdGysOevNELmZlfd+NEa0UYOA8f01WSrg==}
cpu: [x64]
os: [darwin]
- '@rollup/rollup-linux-arm-gnueabihf@4.21.3':
- resolution: {integrity: sha512-btVgIsCjuYFKUjopPoWiDqmoUXQDiW2A4C3Mtmp5vACm7/GnyuprqIDPNczeyR5W8rTXEbkmrJux7cJmD99D2g==}
+ '@rollup/rollup-linux-arm-gnueabihf@4.21.0':
+ resolution: {integrity: sha512-pWJsfQjNWNGsoCq53KjMtwdJDmh/6NubwQcz52aEwLEuvx08bzcy6tOUuawAOncPnxz/3siRtd8hiQ32G1y8VA==}
cpu: [arm]
os: [linux]
- '@rollup/rollup-linux-arm-musleabihf@4.21.3':
- resolution: {integrity: sha512-zmjbSphplZlau6ZTkxd3+NMtE4UKVy7U4aVFMmHcgO5CUbw17ZP6QCgyxhzGaU/wFFdTfiojjbLG3/0p9HhAqA==}
+ '@rollup/rollup-linux-arm-musleabihf@4.21.0':
+ resolution: {integrity: sha512-efRIANsz3UHZrnZXuEvxS9LoCOWMGD1rweciD6uJQIx2myN3a8Im1FafZBzh7zk1RJ6oKcR16dU3UPldaKd83w==}
cpu: [arm]
os: [linux]
- '@rollup/rollup-linux-arm64-gnu@4.21.3':
- resolution: {integrity: sha512-nSZfcZtAnQPRZmUkUQwZq2OjQciR6tEoJaZVFvLHsj0MF6QhNMg0fQ6mUOsiCUpTqxTx0/O6gX0V/nYc7LrgPw==}
+ '@rollup/rollup-linux-arm64-gnu@4.21.0':
+ resolution: {integrity: sha512-ZrPhydkTVhyeGTW94WJ8pnl1uroqVHM3j3hjdquwAcWnmivjAwOYjTEAuEDeJvGX7xv3Z9GAvrBkEzCgHq9U1w==}
cpu: [arm64]
os: [linux]
- '@rollup/rollup-linux-arm64-musl@4.21.3':
- resolution: {integrity: sha512-MnvSPGO8KJXIMGlQDYfvYS3IosFN2rKsvxRpPO2l2cum+Z3exiExLwVU+GExL96pn8IP+GdH8Tz70EpBhO0sIQ==}
+ '@rollup/rollup-linux-arm64-musl@4.21.0':
+ resolution: {integrity: sha512-cfaupqd+UEFeURmqNP2eEvXqgbSox/LHOyN9/d2pSdV8xTrjdg3NgOFJCtc1vQ/jEke1qD0IejbBfxleBPHnPw==}
cpu: [arm64]
os: [linux]
- '@rollup/rollup-linux-powerpc64le-gnu@4.21.3':
- resolution: {integrity: sha512-+W+p/9QNDr2vE2AXU0qIy0qQE75E8RTwTwgqS2G5CRQ11vzq0tbnfBd6brWhS9bCRjAjepJe2fvvkvS3dno+iw==}
+ '@rollup/rollup-linux-powerpc64le-gnu@4.21.0':
+ resolution: {integrity: sha512-ZKPan1/RvAhrUylwBXC9t7B2hXdpb/ufeu22pG2psV7RN8roOfGurEghw1ySmX/CmDDHNTDDjY3lo9hRlgtaHg==}
cpu: [ppc64]
os: [linux]
- '@rollup/rollup-linux-riscv64-gnu@4.21.3':
- resolution: {integrity: sha512-yXH6K6KfqGXaxHrtr+Uoy+JpNlUlI46BKVyonGiaD74ravdnF9BUNC+vV+SIuB96hUMGShhKV693rF9QDfO6nQ==}
+ '@rollup/rollup-linux-riscv64-gnu@4.21.0':
+ resolution: {integrity: sha512-H1eRaCwd5E8eS8leiS+o/NqMdljkcb1d6r2h4fKSsCXQilLKArq6WS7XBLDu80Yz+nMqHVFDquwcVrQmGr28rg==}
cpu: [riscv64]
os: [linux]
- '@rollup/rollup-linux-s390x-gnu@4.21.3':
- resolution: {integrity: sha512-R8cwY9wcnApN/KDYWTH4gV/ypvy9yZUHlbJvfaiXSB48JO3KpwSpjOGqO4jnGkLDSk1hgjYkTbTt6Q7uvPf8eg==}
+ '@rollup/rollup-linux-s390x-gnu@4.21.0':
+ resolution: {integrity: sha512-zJ4hA+3b5tu8u7L58CCSI0A9N1vkfwPhWd/puGXwtZlsB5bTkwDNW/+JCU84+3QYmKpLi+XvHdmrlwUwDA6kqw==}
cpu: [s390x]
os: [linux]
- '@rollup/rollup-linux-x64-gnu@4.21.3':
- resolution: {integrity: sha512-kZPbX/NOPh0vhS5sI+dR8L1bU2cSO9FgxwM8r7wHzGydzfSjLRCFAT87GR5U9scj2rhzN3JPYVC7NoBbl4FZ0g==}
+ '@rollup/rollup-linux-x64-gnu@4.21.0':
+ resolution: {integrity: sha512-e2hrvElFIh6kW/UNBQK/kzqMNY5mO+67YtEh9OA65RM5IJXYTWiXjX6fjIiPaqOkBthYF1EqgiZ6OXKcQsM0hg==}
cpu: [x64]
os: [linux]
- '@rollup/rollup-linux-x64-musl@4.21.3':
- resolution: {integrity: sha512-S0Yq+xA1VEH66uiMNhijsWAafffydd2X5b77eLHfRmfLsRSpbiAWiRHV6DEpz6aOToPsgid7TI9rGd6zB1rhbg==}
+ '@rollup/rollup-linux-x64-musl@4.21.0':
+ resolution: {integrity: sha512-1vvmgDdUSebVGXWX2lIcgRebqfQSff0hMEkLJyakQ9JQUbLDkEaMsPTLOmyccyC6IJ/l3FZuJbmrBw/u0A0uCQ==}
cpu: [x64]
os: [linux]
- '@rollup/rollup-win32-arm64-msvc@4.21.3':
- resolution: {integrity: sha512-9isNzeL34yquCPyerog+IMCNxKR8XYmGd0tHSV+OVx0TmE0aJOo9uw4fZfUuk2qxobP5sug6vNdZR6u7Mw7Q+Q==}
+ '@rollup/rollup-win32-arm64-msvc@4.21.0':
+ resolution: {integrity: sha512-s5oFkZ/hFcrlAyBTONFY1TWndfyre1wOMwU+6KCpm/iatybvrRgmZVM+vCFwxmC5ZhdlgfE0N4XorsDpi7/4XQ==}
cpu: [arm64]
os: [win32]
- '@rollup/rollup-win32-ia32-msvc@4.21.3':
- resolution: {integrity: sha512-nMIdKnfZfzn1Vsk+RuOvl43ONTZXoAPUUxgcU0tXooqg4YrAqzfKzVenqqk2g5efWh46/D28cKFrOzDSW28gTA==}
+ '@rollup/rollup-win32-ia32-msvc@4.21.0':
+ resolution: {integrity: sha512-G9+TEqRnAA6nbpqyUqgTiopmnfgnMkR3kMukFBDsiyy23LZvUCpiUwjTRx6ezYCjJODXrh52rBR9oXvm+Fp5wg==}
cpu: [ia32]
os: [win32]
- '@rollup/rollup-win32-x64-msvc@4.21.3':
- resolution: {integrity: sha512-fOvu7PCQjAj4eWDEuD8Xz5gpzFqXzGlxHZozHP4b9Jxv9APtdxL6STqztDzMLuRXEc4UpXGGhx029Xgm91QBeA==}
+ '@rollup/rollup-win32-x64-msvc@4.21.0':
+ resolution: {integrity: sha512-2jsCDZwtQvRhejHLfZ1JY6w6kEuEtfF9nzYsZxzSlNVKDX+DpsDJ+Rbjkm74nvg2rdx0gwBS+IMdvwJuq3S9pQ==}
cpu: [x64]
os: [win32]
- '@rtsao/scc@1.1.0':
- resolution: {integrity: sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g==}
-
'@rushstack/eslint-patch@1.10.4':
resolution: {integrity: sha512-WJgX9nzTqknM393q1QJDJmoW28kUfEnybeTfVNcNAPnIx210RXm2DiXiHzfNPJNIUUb1tJnz/l4QGtJ30PgWmA==}
- '@scure/base@1.1.9':
- resolution: {integrity: sha512-8YKhl8GHiNI/pU2VMaofa2Tor7PJRAjwQLBBuilkJ9L5+13yVbC7JO/wS7piioAvPSwR3JKM1IJ/u4xQzbcXKg==}
+ '@scure/base@1.1.7':
+ resolution: {integrity: sha512-PPNYBslrLNNUQ/Yad37MHYsNQtK67EhWb6WtSvNLLPo7SdVZgkUjD6Dg+5On7zNwmskf8OX7I7Nx5oN+MIWE0g==}
'@scure/bip32@1.4.0':
resolution: {integrity: sha512-sVUpc0Vq3tXCkDGYVWGIZTRfnvu8LoTDaev7vbwh0omSvVORONr960MQWdKqJDCReIEmTj3PAr73O3aoxz7OPg==}
- '@scure/bip39@1.4.0':
- resolution: {integrity: sha512-BEEm6p8IueV/ZTfQLp/0vhw4NPnT9oWf5+28nvmeUICjP99f4vr2d+qc7AVGDDtwRep6ifR43Yed9ERVmiITzw==}
+ '@scure/bip39@1.3.0':
+ resolution: {integrity: sha512-disdg7gHuTDZtY+ZdkmLpPCk7fxZSu3gBiEGuoC1XYxv9cGx3Z6cpTggCgW6odSOOIXCiDjuGejW+aJKCY/pIQ==}
'@scure/starknet@0.3.0':
resolution: {integrity: sha512-Ma66yZlwa5z00qI5alSxdWtIpky5LBhy22acVFdoC5kwwbd9uDyMWEYzWHdNyKmQg9t5Y2UOXzINMeb3yez+Gw==}
@@ -1168,11 +1361,11 @@ packages:
react: ^18.0
starknet: ^5.25.0
- '@tanstack/query-core@5.56.2':
- resolution: {integrity: sha512-gor0RI3/R5rVV3gXfddh1MM+hgl0Z4G7tj6Xxpq6p2I03NGPaJ8dITY9Gz05zYYb/EJq9vPas/T4wn9EaDPd4Q==}
+ '@tanstack/query-core@5.55.4':
+ resolution: {integrity: sha512-uoRqNnRfzOH4OMIoxj8E2+Us89UIGXfau981qYJWsNMkFS1GXR4UIyzUTVGq4N7SDLHgFPpo6IOazqUV5gkMZA==}
- '@tanstack/react-query@5.56.2':
- resolution: {integrity: sha512-SR0GzHVo6yzhN72pnRhkEFRAHMsUo5ZPzAxfTMvUxFIDVS6W9LYUp6nXW3fcHVdg0ZJl8opSH85jqahvm6DSVg==}
+ '@tanstack/react-query@5.55.4':
+ resolution: {integrity: sha512-e3uX5XkLD9oTV66/VsVpkYz3Ds/ps/Yk+V5d89xthAbtNIKKBEm4FdNb9yISFzGEGezUzVO68qmfmiSrtScvsg==}
peerDependencies:
react: ^18 || ^19
@@ -1234,14 +1427,26 @@ packages:
'@types/aria-query@5.0.4':
resolution: {integrity: sha512-rfT93uj5s0PRL7EzccGMs3brplhcrghnDoV26NqKhCAS1hVo+WdNsPvE/yb6ilfr5hi2MEk6d5EWJTKdxg8jVw==}
- '@types/bun@1.1.9':
- resolution: {integrity: sha512-SXJRejXpmAc3qxyN/YS4/JGWEzLf4dDBa5fLtRDipQXHqNccuMU4EUYCooXNTsylG0DmwFQsGgEDHxZF+3DqRw==}
+ '@types/babel__core@7.20.5':
+ resolution: {integrity: sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==}
+
+ '@types/babel__generator@7.6.8':
+ resolution: {integrity: sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw==}
+
+ '@types/babel__template@7.4.4':
+ resolution: {integrity: sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==}
+
+ '@types/babel__traverse@7.20.6':
+ resolution: {integrity: sha512-r1bzfrm0tomOI8g1SzvCaQHo6Lcv6zu0EA+W2kHrt8dyrHQxGzBBL4kdkzIS+jBMV+EYcMAEAqXqYaLJq5rOZg==}
+
+ '@types/bun@1.1.8':
+ resolution: {integrity: sha512-PIwVFQKPviksiibobyvcWtMvMFMTj91T8dQEh9l1P3Ypr3ZuVn9w7HSr+5mTNrPqD1xpdDLEErzZPU8gqHBu6g==}
'@types/estree@1.0.5':
resolution: {integrity: sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==}
- '@types/estree@1.0.6':
- resolution: {integrity: sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==}
+ '@types/graceful-fs@4.1.9':
+ resolution: {integrity: sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ==}
'@types/istanbul-lib-coverage@2.0.6':
resolution: {integrity: sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==}
@@ -1267,14 +1472,8 @@ packages:
'@types/node@20.12.14':
resolution: {integrity: sha512-scnD59RpYD91xngrQQLGkE+6UrHUPzeKZWhhjBSa3HSkwjbQc38+q3RoIVEwxQGRw3M+j5hpNAM+lgV3cVormg==}
- '@types/node@20.16.5':
- resolution: {integrity: sha512-VwYCweNo3ERajwy0IUlqqcyZ8/A7Zwa9ZP3MnENWcB11AejO+tLy3pu850goUW2FC/IJMdZUfKpX/yxL1gymCA==}
-
- '@types/node@22.5.5':
- resolution: {integrity: sha512-Xjs4y5UPO/CLdzpgR6GirZJx36yScjh73+2NlLlkFRSoQN8B0DpfXPdZGnvVmLRLOsqDpOfTNv7D9trgGhmOIA==}
-
- '@types/node@22.5.5':
- resolution: {integrity: sha512-Xjs4y5UPO/CLdzpgR6GirZJx36yScjh73+2NlLlkFRSoQN8B0DpfXPdZGnvVmLRLOsqDpOfTNv7D9trgGhmOIA==}
+ '@types/node@20.16.1':
+ resolution: {integrity: sha512-zJDo7wEadFtSyNz5QITDfRcrhqDvQI1xQNQ0VoizPjM/dVAODqqIUWbJPkvsxmTI0MYRGRikcdjMPhOssnPejQ==}
'@types/node@22.5.5':
resolution: {integrity: sha512-Xjs4y5UPO/CLdzpgR6GirZJx36yScjh73+2NlLlkFRSoQN8B0DpfXPdZGnvVmLRLOsqDpOfTNv7D9trgGhmOIA==}
@@ -1282,11 +1481,11 @@ packages:
'@types/normalize-package-data@2.4.4':
resolution: {integrity: sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==}
- '@types/prop-types@15.7.13':
- resolution: {integrity: sha512-hCZTSvwbzWGvhqxp/RqVqwU999pBf2vp7hzIjiYOsl8wqOmUxkQ6ddw1cV3l8811+kdUFus/q4d1Y3E3SyEifA==}
+ '@types/prop-types@15.7.12':
+ resolution: {integrity: sha512-5zvhXYtRNRluoE/jAp4GVsSduVUzNWKkOZrCDBWYtE7biZywwdC2AcEzg+cSMLFRfVgeAFqpfNabiPjxFddV1Q==}
- '@types/react@18.3.7':
- resolution: {integrity: sha512-KUnDCJF5+AiZd8owLIeVHqmW9yM4sqmDVf2JRJiBMFkGvkoZ4/WyV2lL4zVsoinmRS/W3FeEdZLEWFRofnT2FQ==}
+ '@types/react@18.3.4':
+ resolution: {integrity: sha512-J7W30FTdfCxDDjmfRM+/JqLHBIyl7xUIp9kwK637FGmY7+mkSFSe6L4jpZzhj5QMfLssSDP4/i75AKkrdC7/Jw==}
'@types/semver@7.5.8':
resolution: {integrity: sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ==}
@@ -1415,35 +1614,23 @@ packages:
typescript:
optional: true
- '@vitest/expect@2.1.1':
- resolution: {integrity: sha512-YeueunS0HiHiQxk+KEOnq/QMzlUuOzbU1Go+PgAsHvvv3tUkJPm9xWt+6ITNTlzsMXUjmgm5T+U7KBPK2qQV6w==}
-
- '@vitest/mocker@2.1.1':
- resolution: {integrity: sha512-LNN5VwOEdJqCmJ/2XJBywB11DLlkbY0ooDJW3uRX5cZyYCrc4PI/ePX0iQhE3BiEGiQmK4GE7Q/PqCkkaiPnrA==}
- peerDependencies:
- '@vitest/spy': 2.1.1
- msw: ^2.3.5
- vite: ^5.0.0
- peerDependenciesMeta:
- msw:
- optional: true
- vite:
- optional: true
+ '@vitest/expect@2.0.5':
+ resolution: {integrity: sha512-yHZtwuP7JZivj65Gxoi8upUN2OzHTi3zVfjwdpu2WrvCZPLwsJ2Ey5ILIPccoW23dd/zQBlJ4/dhi7DWNyXCpA==}
- '@vitest/pretty-format@2.1.1':
- resolution: {integrity: sha512-SjxPFOtuINDUW8/UkElJYQSFtnWX7tMksSGW0vfjxMneFqxVr8YJ979QpMbDW7g+BIiq88RAGDjf7en6rvLPPQ==}
+ '@vitest/pretty-format@2.0.5':
+ resolution: {integrity: sha512-h8k+1oWHfwTkyTkb9egzwNMfJAEx4veaPSnMeKbVSjp4euqGSbQlm5+6VHwTr7u4FJslVVsUG5nopCaAYdOmSQ==}
- '@vitest/runner@2.1.1':
- resolution: {integrity: sha512-uTPuY6PWOYitIkLPidaY5L3t0JJITdGTSwBtwMjKzo5O6RCOEncz9PUN+0pDidX8kTHYjO0EwUIvhlGpnGpxmA==}
+ '@vitest/runner@2.0.5':
+ resolution: {integrity: sha512-TfRfZa6Bkk9ky4tW0z20WKXFEwwvWhRY+84CnSEtq4+3ZvDlJyY32oNTJtM7AW9ihW90tX/1Q78cb6FjoAs+ig==}
- '@vitest/snapshot@2.1.1':
- resolution: {integrity: sha512-BnSku1WFy7r4mm96ha2FzN99AZJgpZOWrAhtQfoxjUU5YMRpq1zmHRq7a5K9/NjqonebO7iVDla+VvZS8BOWMw==}
+ '@vitest/snapshot@2.0.5':
+ resolution: {integrity: sha512-SgCPUeDFLaM0mIUHfaArq8fD2WbaXG/zVXjRupthYfYGzc8ztbFbu6dUNOblBG7XLMR1kEhS/DNnfCZ2IhdDew==}
- '@vitest/spy@2.1.1':
- resolution: {integrity: sha512-ZM39BnZ9t/xZ/nF4UwRH5il0Sw93QnZXd9NAZGRpIgj0yvVwPpLd702s/Cx955rGaMlyBQkZJ2Ir7qyY48VZ+g==}
+ '@vitest/spy@2.0.5':
+ resolution: {integrity: sha512-c/jdthAhvJdpfVuaexSrnawxZz6pywlTPe84LUB2m/4t3rl2fTo9NFGBG4oWgaD+FTgDDV8hJ/nibT7IfH3JfA==}
- '@vitest/utils@2.1.1':
- resolution: {integrity: sha512-Y6Q9TsI+qJ2CC0ZKj6VBb+T8UPz593N113nnUykqwANqhgf3QkZeHFlusgKLTqrnVHbj/XDKZcDHol+dxVT+rQ==}
+ '@vitest/utils@2.0.5':
+ resolution: {integrity: sha512-d8HKbqIcya+GR67mkZbrzhS5kKhtp8dQLcmRZLGTscGVg7yImT82cIrhtn2L8+VujWcy6KZweApgNmPsTAO/UQ==}
abab@2.0.6:
resolution: {integrity: sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==}
@@ -1472,8 +1659,8 @@ packages:
peerDependencies:
acorn: ^6.0.0 || ^7.0.0 || ^8.0.0
- acorn-walk@8.3.4:
- resolution: {integrity: sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g==}
+ acorn-walk@8.3.3:
+ resolution: {integrity: sha512-MxXdReSRhGO7VlFe1bRG/oI7/mdLV9B9JJT0N8vZOhF7gFRR5l3M8W9G8JxmKV+JC5mGqJ0QvqfSOLsCPa4nUw==}
engines: {node: '>=0.4.0'}
acorn@8.12.1:
@@ -1492,12 +1679,16 @@ packages:
resolution: {integrity: sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==}
engines: {node: '>=6'}
+ ansi-escapes@4.3.2:
+ resolution: {integrity: sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==}
+ engines: {node: '>=8'}
+
ansi-regex@5.0.1:
resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==}
engines: {node: '>=8'}
- ansi-regex@6.1.0:
- resolution: {integrity: sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==}
+ ansi-regex@6.0.1:
+ resolution: {integrity: sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==}
engines: {node: '>=12'}
ansi-styles@3.2.1:
@@ -1541,10 +1732,6 @@ packages:
aria-query@5.3.0:
resolution: {integrity: sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==}
- aria-query@5.3.1:
- resolution: {integrity: sha512-Z/ZeOgVl7bcSYZ/u/rh0fOpvEpq//LZmdbkXyc7syVzjPAhfOa9ebsdTSjEBDU4vs5nC98Kfduj1uFo0qyET3g==}
- engines: {node: '>= 0.4'}
-
array-buffer-byte-length@1.0.1:
resolution: {integrity: sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg==}
engines: {node: '>= 0.4'}
@@ -1602,9 +1789,33 @@ packages:
resolution: {integrity: sha512-Mr2ZakwQ7XUAjp7pAwQWRhhK8mQQ6JAaNWSjmjxil0R8BPioMtQsTLOolGYkji1rcL++3dCqZA3zWqpT+9Ew6g==}
engines: {node: '>=4'}
- axobject-query@4.1.0:
- resolution: {integrity: sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ==}
- engines: {node: '>= 0.4'}
+ axobject-query@3.1.1:
+ resolution: {integrity: sha512-goKlv8DZrK9hUh975fnHzhNIO4jUnFCfv/dszV5VwUGDFjI6vQ2VwoyjYjYNEbBE8AH87TduWP5uyDR1D+Iteg==}
+
+ babel-jest@29.7.0:
+ resolution: {integrity: sha512-BrvGY3xZSwEcCzKvKsCi2GgHqDqsYkOP4/by5xCgIwGXQxIEh+8ew3gmrE1y7XRR6LHZIj6yLYnUi/mm2KXKBg==}
+ engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
+ peerDependencies:
+ '@babel/core': ^7.8.0
+
+ babel-plugin-istanbul@6.1.1:
+ resolution: {integrity: sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==}
+ engines: {node: '>=8'}
+
+ babel-plugin-jest-hoist@29.6.3:
+ resolution: {integrity: sha512-ESAc/RJvGTFEzRwOTT4+lNDk/GNHMkKbNzsvT0qKRfDyyYTskxB5rnU2njIDYVxXCBHHEI1c0YwHob3WaYujOg==}
+ engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
+
+ babel-preset-current-node-syntax@1.1.0:
+ resolution: {integrity: sha512-ldYss8SbBlWva1bs28q78Ju5Zq1F+8BrqBZZ0VFhLBvhh6lCpC2o3gDJi/5DRLs9FgYZCnmPYIVFU4lRXCkyUw==}
+ peerDependencies:
+ '@babel/core': ^7.0.0
+
+ babel-preset-jest@29.6.3:
+ resolution: {integrity: sha512-0B3bhxR6snWXJZtR/RliHTDPRgn1sNHOR0yVtq/IiQFyuOVjFS+wuio/R4gSNkyYmKmJB4wGZv2NZanmKmTnNA==}
+ engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
+ peerDependencies:
+ '@babel/core': ^7.0.0
balanced-match@1.0.2:
resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==}
@@ -1635,19 +1846,24 @@ packages:
engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7}
hasBin: true
+ bser@2.1.1:
+ resolution: {integrity: sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==}
+
+ buffer-from@1.1.2:
+ resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==}
+
builtin-modules@3.3.0:
resolution: {integrity: sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==}
engines: {node: '>=6'}
- bun-types@1.1.27:
- resolution: {integrity: sha512-rHXAiIDefeMS/fleNM1rRDYqolJGNRdch3+AuCRwcZWaqTa1vjGBNsahH/HVV7Y82frllYhJomCVSEiHzLzkgg==}
+ bun-types@1.1.25:
+ resolution: {integrity: sha512-WpRb8/N3S5IE8UYdIn39+0Is1XzxsC78+MCe5cIdaer0lfFs6+DREtQH9TM6KJNKTxBYDvbx81RwbvxS5+CkVQ==}
- bun-types@1.1.28:
- resolution: {integrity: sha512-XiWHzHZIxkgssHSUwJVrkUDHvwhHzE9mrFUMXZ3BKqNiGzL0n/fB/XUQZibcHjg0SvW/Tt5WUNeKmiM9njuy/w==}
+ bun-types@1.1.26:
+ resolution: {integrity: sha512-n7jDe62LsB2+WE8Q8/mT3azkPaatKlj/2MyP6hi3mKvPz9oPpB6JW/Ll6JHtNLudasFFuvfgklYSE+rreGvBjw==}
- bun@1.1.28:
- resolution: {integrity: sha512-grJam/0GtwFqI+d4gRshk0CNSLwv5H0cRmdtFVjxrC3FlzMD6XBQ5/k9i23byQzlxnqZhn99dzShN9pwG+zC+g==}
- cpu: [arm64, x64]
+ bun@1.1.25:
+ resolution: {integrity: sha512-N+KvGq6jcA88QgFVoOMSr2s4sZ9u+R7Tn6Hci25mdygZxa3jgaS91PMNxpEJKkyTBLOhH5E8erx+tqtRLyFbJA==}
os: [darwin, linux, win32]
hasBin: true
@@ -1669,12 +1885,16 @@ packages:
resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==}
engines: {node: '>=6'}
+ camelcase@5.3.1:
+ resolution: {integrity: sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==}
+ engines: {node: '>=6'}
+
camelcase@6.3.0:
resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==}
engines: {node: '>=10'}
- caniuse-lite@1.0.30001660:
- resolution: {integrity: sha512-GacvNTTuATm26qC74pt+ad1fW15mlQ/zuTzzY1ZoIzECTP8HURDfF43kNxPgf7H1jmelCBQTTbBNxdSXOA7Bqg==}
+ caniuse-lite@1.0.30001651:
+ resolution: {integrity: sha512-9Cf+Xv1jJNe1xPZLGuUXLNkE1BoDkqRqYyFJ9TDYSqhduqA4hu4oR9HluGoWYQC/aj8WHjsGVV+bwkh0+tegRg==}
cardinal@2.1.1:
resolution: {integrity: sha512-JSr5eOgoEymtYHBjNWyjrMqet9Am2miJhlfKNdqLp6zoeAh0KN5dRAcxlecj5mAJrmQomgiOBj35xHLrFjqBpw==}
@@ -1696,6 +1916,10 @@ packages:
resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==}
engines: {node: '>=10'}
+ char-regex@1.0.2:
+ resolution: {integrity: sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==}
+ engines: {node: '>=10'}
+
chardet@0.7.0:
resolution: {integrity: sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==}
@@ -1711,6 +1935,9 @@ packages:
resolution: {integrity: sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==}
engines: {node: '>=8'}
+ cjs-module-lexer@1.3.1:
+ resolution: {integrity: sha512-a3KdPAANPbNE4ZUv9h6LckSl9zLsYOP4MBmhIPkRaeyybt+r4UghLvq+xw/YwUcC1gqylCkL4rdVs3Lwupjm4Q==}
+
clean-regexp@1.0.0:
resolution: {integrity: sha512-GfisEZEJvzKrmGWkvfhgzcz/BllN1USeqD2V6tg14OAOgaCD2Z/PUEuxnAZ/nPvmaHRG7a8y77p1T/IRQ4D1Hw==}
engines: {node: '>=4'}
@@ -1722,6 +1949,13 @@ packages:
resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==}
engines: {node: '>=12'}
+ co@4.6.0:
+ resolution: {integrity: sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==}
+ engines: {iojs: '>= 1.0.0', node: '>= 0.12.0'}
+
+ collect-v8-coverage@1.0.2:
+ resolution: {integrity: sha512-lHl4d5/ONEbLlJvaJNtsF/Lz+WvB07u2ycqTYbdrq7UypDXailES4valYb2eWiJFxZlVmpGekfqoxQhzyFdT4Q==}
+
color-convert@1.9.3:
resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==}
@@ -1770,6 +2004,11 @@ packages:
convert-source-map@2.0.0:
resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==}
+ create-jest@29.7.0:
+ resolution: {integrity: sha512-Adz2bdH0Vq3F53KEMJOoftQFutWCukm6J24wbPWRO4k1kMY7gS7ds/uoJkNuV8wDCtWWnuwGcJwpWcih+zEW1Q==}
+ engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
+ hasBin: true
+
create-require@1.1.1:
resolution: {integrity: sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==}
@@ -1827,8 +2066,8 @@ packages:
supports-color:
optional: true
- debug@4.3.7:
- resolution: {integrity: sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==}
+ debug@4.3.6:
+ resolution: {integrity: sha512-O/09Bd4Z1fBrU4VzkhFqVgpPzaGbw6Sm9FEkBT1A/YBXQFGuuSxa1dN2nxgxS34JmKXqYx8CZAwEVoJFImUXIg==}
engines: {node: '>=6.0'}
peerDependencies:
supports-color: '*'
@@ -1843,6 +2082,14 @@ packages:
decimal.js@10.4.3:
resolution: {integrity: sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA==}
+ dedent@1.5.3:
+ resolution: {integrity: sha512-NHQtfOOW68WD8lgypbLA5oT+Bt0xXJhiYvoR6SmmNXZfpzOGXwdKWmcwG8N7PwVVWV3eF/68nmD9BaJSsTBhyQ==}
+ peerDependencies:
+ babel-plugin-macros: ^3.1.0
+ peerDependenciesMeta:
+ babel-plugin-macros:
+ optional: true
+
deep-eql@5.0.2:
resolution: {integrity: sha512-h5k/5U50IJJFpzfL6nO9jaaumfjO/f2NjK/oYB2Djzm4p9L+3T9qWpZqZ2hAbLPuuYq9wrU08WQyBTL5GbPk5Q==}
engines: {node: '>=6'}
@@ -1854,6 +2101,10 @@ packages:
deep-is@0.1.4:
resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==}
+ deepmerge@4.3.1:
+ resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==}
+ engines: {node: '>=0.10.0'}
+
define-data-property@1.1.4:
resolution: {integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==}
engines: {node: '>= 0.4'}
@@ -1878,10 +2129,18 @@ packages:
resolution: {integrity: sha512-Mc7QhQ8s+cLrnUfU/Ji94vG/r8M26m8f++vyres4ZoojaRDpZ1eSIh/EpzLNwlWuvzSZ3UbDFspjFvTDXe6e/g==}
engines: {node: '>=12.20'}
+ detect-newline@3.1.0:
+ resolution: {integrity: sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==}
+ engines: {node: '>=8'}
+
detect-newline@4.0.1:
resolution: {integrity: sha512-qE3Veg1YXzGHQhlA6jzebZN2qVf6NX+A7m7qlhCGG30dJixrAQhYOsJjsnBjJkCSmuOPpCk30145fr8FV0bzog==}
engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
+ diff-sequences@29.6.3:
+ resolution: {integrity: sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==}
+ engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
+
diff@4.0.2:
resolution: {integrity: sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==}
engines: {node: '>=0.3.1'}
@@ -1932,8 +2191,12 @@ packages:
eastasianwidth@0.2.0:
resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==}
- electron-to-chromium@1.5.25:
- resolution: {integrity: sha512-kMb204zvK3PsSlgvvwzI3wBIcAw15tRkYk+NQdsjdDtcQWTp2RABbMQ9rUBy8KNEOM+/E6ep+XC3AykiWZld4g==}
+ electron-to-chromium@1.5.13:
+ resolution: {integrity: sha512-lbBcvtIJ4J6sS4tb5TLp1b4LyfCdMkwStzXPyAgVgTRAsep4bvrAGaBOP7ZJtQMNJpSQ9SqG4brWOroNaQtm7Q==}
+
+ emittery@0.13.1:
+ resolution: {integrity: sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==}
+ engines: {node: '>=12'}
emoji-regex@8.0.0:
resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==}
@@ -2008,8 +2271,8 @@ packages:
engines: {node: '>=18'}
hasBin: true
- escalade@3.2.0:
- resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==}
+ escalade@3.1.2:
+ resolution: {integrity: sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==}
engines: {node: '>=6'}
escape-string-regexp@1.0.5:
@@ -2049,21 +2312,15 @@ packages:
eslint-import-resolver-node@0.3.9:
resolution: {integrity: sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==}
- eslint-import-resolver-typescript@3.6.3:
- resolution: {integrity: sha512-ud9aw4szY9cCT1EWWdGv1L1XR6hh2PaRWif0j2QjQ0pgTY/69iw+W0Z4qZv5wHahOl8isEr+k/JnyAqNQkLkIA==}
+ eslint-import-resolver-typescript@3.6.1:
+ resolution: {integrity: sha512-xgdptdoi5W3niYeuQxKmzVDTATvLYqhpwmykwsh7f6HIOStGWEIL9iqZgQDF9u9OEzrRwR8no5q2VT+bjAujTg==}
engines: {node: ^14.18.0 || >=16.0.0}
peerDependencies:
eslint: '*'
eslint-plugin-import: '*'
- eslint-plugin-import-x: '*'
- peerDependenciesMeta:
- eslint-plugin-import:
- optional: true
- eslint-plugin-import-x:
- optional: true
- eslint-module-utils@2.11.0:
- resolution: {integrity: sha512-gbBE5Hitek/oG6MUVj6sFuzEjA/ClzNflVrLovHi/JgLdC7fiN5gLAY1WIPW1a0V5I999MnsrvVrCOGmmVqDBQ==}
+ eslint-module-utils@2.8.1:
+ resolution: {integrity: sha512-rXDXR3h7cs7dy9RNpUlQf80nX31XWJEyGq1tRMo+6GsO5VmTe4UTwtmonAD4ZkAsrfMVDA2wlGJ3790Ys+D49Q==}
engines: {node: '>=4'}
peerDependencies:
'@typescript-eslint/parser': '*'
@@ -2089,8 +2346,8 @@ packages:
peerDependencies:
eslint: '>=4.19.1'
- eslint-plugin-import@2.30.0:
- resolution: {integrity: sha512-/mHNE9jINJfiD2EKkg1BKyPyUk4zdnT54YgbOgfjSakWT5oyX/qQLVNTkehyfpcMxZXMy1zyonZ2v7hZTX43Yw==}
+ eslint-plugin-import@2.29.1:
+ resolution: {integrity: sha512-BbPC0cuExzhiMo4Ff1BTVwHpjjv28C5R+btTOGaCRC7UEz801up0JadwkeSk5Ued6TG34uaczuVuH6qyy5YUxw==}
engines: {node: '>=4'}
peerDependencies:
'@typescript-eslint/parser': '*'
@@ -2112,11 +2369,11 @@ packages:
jest:
optional: true
- eslint-plugin-jsx-a11y@6.10.0:
- resolution: {integrity: sha512-ySOHvXX8eSN6zz8Bywacm7CvGNhUtdjvqfQDVe6020TUK34Cywkw7m0KsCCk1Qtm9G1FayfTN1/7mMYnYO2Bhg==}
+ eslint-plugin-jsx-a11y@6.9.0:
+ resolution: {integrity: sha512-nOFOCaJG2pYqORjK19lqPqxMO/JpvdCZdPtNdxY3kvom3jTvkAbOvQvD8wuD0G8BYR0IGAGYDlzqWJOh/ybn2g==}
engines: {node: '>=4.0'}
peerDependencies:
- eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9
+ eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8
eslint-plugin-mocha@10.5.0:
resolution: {integrity: sha512-F2ALmQVPT1GoP27O1JTZGrV9Pqg8k79OeIuvw63UxMtQKREZtmkK1NFgkZQ2TW7L2JSSFKHFPTtHu5z8R9QNRw==}
@@ -2143,8 +2400,8 @@ packages:
peerDependencies:
eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0
- eslint-plugin-react@7.36.1:
- resolution: {integrity: sha512-/qwbqNXZoq+VP30s1d4Nc1C5GTxjJQjk4Jzs4Wq2qzxFM7dSmuG2UkIjg2USMLh3A/aVcUNrK7v0J5U1XEGGwA==}
+ eslint-plugin-react@7.35.0:
+ resolution: {integrity: sha512-v501SSMOWv8gerHkk+IIQBkcGRGrO2nfybfj5pLxuJNFTPxxA3PSryhXTK+9pNbtkggheDdsC0E9Q8CuPk6JKA==}
engines: {node: '>=4'}
peerDependencies:
eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9.7
@@ -2205,8 +2462,8 @@ packages:
resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==}
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
- eslint@8.57.1:
- resolution: {integrity: sha512-ypowyDxpVSYpkXr9WPv2PAZCtNip1Mv5KTW0SCurXv/9iOpcrH9PaqUElksqEB6pChqHGDRCFTyrZlGhnLNGiA==}
+ eslint@8.57.0:
+ resolution: {integrity: sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ==}
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
hasBin: true
@@ -2249,6 +2506,18 @@ packages:
resolution: {integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==}
engines: {node: '>=10'}
+ execa@8.0.1:
+ resolution: {integrity: sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==}
+ engines: {node: '>=16.17'}
+
+ exit@0.1.2:
+ resolution: {integrity: sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==}
+ engines: {node: '>= 0.8.0'}
+
+ expect@29.7.0:
+ resolution: {integrity: sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw==}
+ engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
+
extendable-error@0.1.7:
resolution: {integrity: sha512-UOiS2in6/Q0FK0R0q6UY9vYpQ21mr/Qn1KOnte7vsACuNJf514WvCCUHSRCPcgjPT2bAhNIJdlE6bVap1GKmeg==}
@@ -2272,13 +2541,8 @@ packages:
fastq@1.17.1:
resolution: {integrity: sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==}
- fdir@6.3.0:
- resolution: {integrity: sha512-QOnuT+BOtivR77wYvCWHfGt9s4Pz1VIMbD463vegT5MLqNXy8rYFT/lPVEqf/bhYeT6qmqrNHhsX+rWwe3rOCQ==}
- peerDependencies:
- picomatch: ^3 || ^4
- peerDependenciesMeta:
- picomatch:
- optional: true
+ fb-watchman@2.0.2:
+ resolution: {integrity: sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==}
fecha@4.2.3:
resolution: {integrity: sha512-OP2IUU6HeYKJi3i0z4A19kHMQoLVs4Hc+DPqqxI2h/DPZHTm/vjsfC6P0b4jCMy14XizLBqvndQ+UilD7707Jw==}
@@ -2306,6 +2570,9 @@ packages:
resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==}
engines: {node: '>=10'}
+ find-yarn-workspace-root2@1.2.16:
+ resolution: {integrity: sha512-hr6hb1w8ePMpPVUK39S4RlwJzi+xPLuVuG8XlwXU3KD5Yn3qgBWVfy3AzNlDhWvE1EORCE65/Qm26rFQt3VLVA==}
+
flat-cache@3.2.0:
resolution: {integrity: sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==}
engines: {node: ^10.12.0 || >=12.0.0}
@@ -2380,6 +2647,10 @@ packages:
resolution: {integrity: sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==}
engines: {node: '>= 0.4'}
+ get-package-type@0.1.0:
+ resolution: {integrity: sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==}
+ engines: {node: '>=8.0.0'}
+
get-starknet-core@3.3.3:
resolution: {integrity: sha512-IscL4lAigJpc/9Idkg07sdyUOXkB+/goTDQm8EhMGn/nIAW4rn04d+D47ils75drNQIfZZKDIIZrWrbIKvjoWA==}
peerDependencies:
@@ -2396,12 +2667,16 @@ packages:
resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==}
engines: {node: '>=10'}
+ get-stream@8.0.1:
+ resolution: {integrity: sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==}
+ engines: {node: '>=16'}
+
get-symbol-description@1.0.2:
resolution: {integrity: sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg==}
engines: {node: '>= 0.4'}
- get-tsconfig@4.8.1:
- resolution: {integrity: sha512-k9PN+cFBmaLWtVz29SkUoqU5O0slLuHJXt/2P+tMVFT+phsSGXGkp9t3rQIqdz0e+06EHNGs3oM6ZX1s2zHxRg==}
+ get-tsconfig@4.7.6:
+ resolution: {integrity: sha512-ZAqrLlu18NbDdRaHq+AKXzAmqIUPswPWKUchfytdAjiRFnCe5ojG2bstg6mRiZabkKfCoL/e98pbBELIV/YCeA==}
git-hooks-list@3.1.0:
resolution: {integrity: sha512-LF8VeHeR7v+wAbXqfgRlTSX/1BJR9Q1vEMR8JAz1cEg6GX07+zyj3sAdDvYjj/xnlIfVuGgj4qBei1K3hKH+PA==}
@@ -2497,6 +2772,9 @@ packages:
resolution: {integrity: sha512-oWv4T4yJ52iKrufjnyZPkrN0CH3QnrUqdB6In1g5Fe1mia8GmF36gnfNySxoZtxD5+NmYw1EElVXiBk93UeskA==}
engines: {node: '>=12'}
+ html-escaper@2.0.2:
+ resolution: {integrity: sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==}
+
http-proxy-agent@5.0.0:
resolution: {integrity: sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==}
engines: {node: '>= 6'}
@@ -2512,6 +2790,10 @@ packages:
resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==}
engines: {node: '>=10.17.0'}
+ human-signals@5.0.0:
+ resolution: {integrity: sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==}
+ engines: {node: '>=16.17.0'}
+
iconv-lite@0.4.24:
resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==}
engines: {node: '>=0.10.0'}
@@ -2534,6 +2816,11 @@ packages:
resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==}
engines: {node: '>=6'}
+ import-local@3.2.0:
+ resolution: {integrity: sha512-2SPlun1JUPWoM6t3F0dw0FkCF/jWY8kttcY4f599GLTSjh2OCuuhdTkJQsEcZzBqbXZGKMK2OqW1oZsjtf/gQA==}
+ engines: {node: '>=8'}
+ hasBin: true
+
imurmurhash@0.1.4:
resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==}
engines: {node: '>=0.8.19'}
@@ -2586,9 +2873,6 @@ packages:
resolution: {integrity: sha512-BSLE3HnV2syZ0FK0iMA/yUGplUeMmNz4AW5fnTunbCIqZi4vG3WjJT9FHMy5D69xmAYBHXQhJdALdpwVxV501A==}
engines: {node: '>=6'}
- is-bun-module@1.2.1:
- resolution: {integrity: sha512-AmidtEM6D6NmUiLOvvU7+IePxjEjOzra2h0pSrsfSAcXwl/83zLLXDByafUJy9k/rKK0pvXMLdwKwGHlX2Ke6Q==}
-
is-callable@1.2.7:
resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==}
engines: {node: '>= 0.4'}
@@ -2616,6 +2900,10 @@ packages:
resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==}
engines: {node: '>=8'}
+ is-generator-fn@2.1.0:
+ resolution: {integrity: sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==}
+ engines: {node: '>=6'}
+
is-generator-function@1.0.10:
resolution: {integrity: sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==}
engines: {node: '>= 0.4'}
@@ -2671,6 +2959,10 @@ packages:
resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==}
engines: {node: '>=8'}
+ is-stream@3.0.0:
+ resolution: {integrity: sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==}
+ engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
+
is-string@1.0.7:
resolution: {integrity: sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==}
engines: {node: '>= 0.4'}
@@ -2720,12 +3012,78 @@ packages:
peerDependencies:
ws: '*'
+ istanbul-lib-coverage@3.2.2:
+ resolution: {integrity: sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==}
+ engines: {node: '>=8'}
+
+ istanbul-lib-instrument@5.2.1:
+ resolution: {integrity: sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==}
+ engines: {node: '>=8'}
+
+ istanbul-lib-instrument@6.0.3:
+ resolution: {integrity: sha512-Vtgk7L/R2JHyyGW07spoFlB8/lpjiOLTjMdms6AFMraYt3BaJauod/NGrfnVG/y4Ix1JEuMRPDPEj2ua+zz1/Q==}
+ engines: {node: '>=10'}
+
+ istanbul-lib-report@3.0.1:
+ resolution: {integrity: sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==}
+ engines: {node: '>=10'}
+
+ istanbul-lib-source-maps@4.0.1:
+ resolution: {integrity: sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==}
+ engines: {node: '>=10'}
+
+ istanbul-reports@3.1.7:
+ resolution: {integrity: sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g==}
+ engines: {node: '>=8'}
+
iterator.prototype@1.1.2:
resolution: {integrity: sha512-DR33HMMr8EzwuRL8Y9D3u2BMj8+RqSE850jfGu59kS7tbmPLzGkZmVSfyCFSDxuZiEY6Rzt3T2NA/qU+NwVj1w==}
jackspeak@3.4.3:
resolution: {integrity: sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==}
+ jest-changed-files@29.7.0:
+ resolution: {integrity: sha512-fEArFiwf1BpQ+4bXSprcDc3/x4HSzL4al2tozwVpDFpsxALjLYdyiIK4e5Vz66GQJIbXJ82+35PtysofptNX2w==}
+ engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
+
+ jest-circus@29.7.0:
+ resolution: {integrity: sha512-3E1nCMgipcTkCocFwM90XXQab9bS+GMsjdpmPrlelaxwD93Ad8iVEjX/vvHPdLPnFf+L40u+5+iutRdA1N9myw==}
+ engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
+
+ jest-cli@29.7.0:
+ resolution: {integrity: sha512-OVVobw2IubN/GSYsxETi+gOe7Ka59EFMR/twOU3Jb2GnKKeMGJB5SGUUrEz3SFVmJASUdZUzy83sLNNQ2gZslg==}
+ engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
+ hasBin: true
+ peerDependencies:
+ node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0
+ peerDependenciesMeta:
+ node-notifier:
+ optional: true
+
+ jest-config@29.7.0:
+ resolution: {integrity: sha512-uXbpfeQ7R6TZBqI3/TxCU4q4ttk3u0PJeC+E0zbfSoSjq6bJ7buBPxzQPL0ifrkY4DNu4JUdk0ImlBUYi840eQ==}
+ 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
+
+ jest-diff@29.7.0:
+ resolution: {integrity: sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw==}
+ engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
+
+ jest-docblock@29.7.0:
+ resolution: {integrity: sha512-q617Auw3A612guyaFgsbFeYpNP5t2aoUNLwBUbc/0kD1R4t9ixDbyFTHd1nok4epoVFpr7PmeWHrhvuV3XaJ4g==}
+ engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
+
+ jest-each@29.7.0:
+ resolution: {integrity: sha512-gns+Er14+ZrEoC5fhOfYCY1LOHHr0TI+rQUHZS8Ttw2l7gl+80eHc/gFf2Ktkw0+SIACDTeWvpFcv3B04VembQ==}
+ engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
+
jest-environment-jsdom@29.7.0:
resolution: {integrity: sha512-k9iQbsf9OyOfdzWH8HDmrRT0gSIcX+FLNW7IQq94tFX0gynPwqDTW0Ho6iMVNjGz/nb+l/vW3dWM2bbLLpkbXA==}
engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
@@ -2735,18 +3093,93 @@ packages:
canvas:
optional: true
- jest-message-util@29.7.0:
- resolution: {integrity: sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w==}
+ jest-environment-node@29.7.0:
+ resolution: {integrity: sha512-DOSwCRqXirTOyheM+4d5YZOrWcdu0LNZ87ewUoywbcb2XR4wKgqiG8vNeYwhjFMbEkfju7wx2GYH0P2gevGvFw==}
engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
- jest-mock@29.7.0:
- resolution: {integrity: sha512-ITOMZn+UkYS4ZFh83xYAOzWStloNzJFO2s8DWrE4lhtGD+AorgnbkiKERe4wQVBydIGPx059g6riW5Btp6Llnw==}
+ jest-get-type@29.6.3:
+ resolution: {integrity: sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==}
+ engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
+
+ jest-haste-map@29.7.0:
+ resolution: {integrity: sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA==}
+ engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
+
+ jest-leak-detector@29.7.0:
+ resolution: {integrity: sha512-kYA8IJcSYtST2BY9I+SMC32nDpBT3J2NvWJx8+JCuCdl/CR1I4EKUJROiP8XtCcxqgTTBGJNdbB1A8XRKbTetw==}
+ engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
+
+ jest-matcher-utils@29.7.0:
+ resolution: {integrity: sha512-sBkD+Xi9DtcChsI3L3u0+N0opgPYnCRPtGcQYrgXmR+hmt/fYfWAL0xRXYU8eWOdfuLgBe0YCW3AFtnRLagq/g==}
+ engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
+
+ jest-message-util@29.7.0:
+ resolution: {integrity: sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w==}
+ engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
+
+ jest-mock@29.7.0:
+ resolution: {integrity: sha512-ITOMZn+UkYS4ZFh83xYAOzWStloNzJFO2s8DWrE4lhtGD+AorgnbkiKERe4wQVBydIGPx059g6riW5Btp6Llnw==}
+ engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
+
+ jest-pnp-resolver@1.2.3:
+ resolution: {integrity: sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==}
+ engines: {node: '>=6'}
+ peerDependencies:
+ jest-resolve: '*'
+ peerDependenciesMeta:
+ jest-resolve:
+ optional: true
+
+ jest-regex-util@29.6.3:
+ resolution: {integrity: sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg==}
+ engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
+
+ jest-resolve-dependencies@29.7.0:
+ resolution: {integrity: sha512-un0zD/6qxJ+S0et7WxeI3H5XSe9lTBBR7bOHCHXkKR6luG5mwDDlIzVQ0V5cZCuoTgEdcdwzTghYkTWfubi+nA==}
+ engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
+
+ jest-resolve@29.7.0:
+ resolution: {integrity: sha512-IOVhZSrg+UvVAshDSDtHyFCCBUl/Q3AAJv8iZ6ZjnZ74xzvwuzLXid9IIIPgTnY62SJjfuupMKZsZQRsCvxEgA==}
+ engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
+
+ jest-runner@29.7.0:
+ resolution: {integrity: sha512-fsc4N6cPCAahybGBfTRcq5wFR6fpLznMg47sY5aDpsoejOcVYFb07AHuSnR0liMcPTgBsA3ZJL6kFOjPdoNipQ==}
+ engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
+
+ jest-runtime@29.7.0:
+ resolution: {integrity: sha512-gUnLjgwdGqW7B4LvOIkbKs9WGbn+QLqRQQ9juC6HndeDiezIwhDP+mhMwHWCEcfQ5RUXa6OPnFF8BJh5xegwwQ==}
+ engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
+
+ jest-snapshot@29.7.0:
+ resolution: {integrity: sha512-Rm0BMWtxBcioHr1/OX5YCP8Uov4riHvKPknOGs804Zg9JGZgmIBkbtlxJC/7Z4msKYVbIJtfU+tKb8xlYNfdkw==}
engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
jest-util@29.7.0:
resolution: {integrity: sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==}
engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
+ jest-validate@29.7.0:
+ resolution: {integrity: sha512-ZB7wHqaRGVw/9hST/OuFUReG7M8vKeq0/J2egIGLdvjHCmYqGARhzXmtgi+gVeZ5uXFF219aOc3Ls2yLg27tkw==}
+ engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
+
+ jest-watcher@29.7.0:
+ resolution: {integrity: sha512-49Fg7WXkU3Vl2h6LbLtMQ/HyB6rXSIX7SqvBLQmssRBGN9I0PNvPmAmCWSOY6SOvrjhI/F7/bGAv9RtnsPA03g==}
+ engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
+
+ jest-worker@29.7.0:
+ resolution: {integrity: sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==}
+ engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
+
+ jest@29.7.0:
+ resolution: {integrity: sha512-NIy3oAFp9shda19hy4HK0HRTWKtPJmGdnvywu01nOqNC2vZg+Z+fvJDxpMQA88eb2I9EcafcdjYgsDthnYTvGw==}
+ engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
+ hasBin: true
+ peerDependencies:
+ node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0
+ peerDependenciesMeta:
+ node-notifier:
+ optional: true
+
jju@1.4.0:
resolution: {integrity: sha512-8wb9Yw966OSxApiCt0K3yNJL8pnNeIv+OEq2YMidz4FKP6nonSRoOXc80iXY4JaN2FC11B9qsNmDsm+ZOfMROA==}
@@ -2822,6 +3255,10 @@ packages:
keyv@4.5.4:
resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==}
+ kleur@3.0.3:
+ resolution: {integrity: sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==}
+ engines: {node: '>=6'}
+
kuler@2.0.0:
resolution: {integrity: sha512-Xq9nH7KlWZmXAtodXDDRE7vs6DU1gTU8zYDHDiWLSip45Egwq3plLHzPn27NgvzL2r1LMPC1vdqh98sQxtqj4A==}
@@ -2832,6 +3269,10 @@ packages:
resolution: {integrity: sha512-MbjN408fEndfiQXbFQ1vnd+1NoLDsnQW41410oQBXiyXDMYH5z505juWa4KUE1LqxRC7DgOgZDbKLxHIwm27hA==}
engines: {node: '>=0.10'}
+ leven@3.1.0:
+ resolution: {integrity: sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==}
+ engines: {node: '>=6'}
+
levn@0.4.1:
resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==}
engines: {node: '>= 0.8.0'}
@@ -2847,6 +3288,10 @@ packages:
resolution: {integrity: sha512-IXO6OCs9yg8tMKzfPZ1YmheJbZCiEsnBdcB03l0OcfK9prKnJb96siuHCr5Fl37/yo9DnKU+TLpxzTUspw9shg==}
engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
+ load-yaml-file@0.2.0:
+ resolution: {integrity: sha512-OfCBkGEw4nN6JLtgRidPX6QxjBQGQf72q3si2uvqyFEMbycSFFHwAZeXx6cJgFM9wmLrf9zBwCP3Ivqa+LLZPw==}
+ engines: {node: '>=6'}
+
loading-cli@1.1.2:
resolution: {integrity: sha512-M1ntfXHpdGoQxfaqKBOQPwSrTr9EIoTgj664Q9UVSbSnJvAFdribo+Ij//1jvACgrGHaTvfKoD9PG3NOxGj44g==}
@@ -2882,8 +3327,8 @@ packages:
resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==}
hasBin: true
- lossless-json@4.0.2:
- resolution: {integrity: sha512-+z0EaLi2UcWi8MZRxA5iTb6m4Ys4E80uftGY+yG5KNFJb5EceQXOhdW/pWJZ8m97s26u7yZZAYMcKWNztSZssA==}
+ lossless-json@4.0.1:
+ resolution: {integrity: sha512-l0L+ppmgPDnb+JGxNLndPtJZGNf6+ZmVaQzoxQm3u6TXmhdnsA+YtdVR8DjzZd/em58686CQhOFDPewfJ4l7MA==}
loupe@3.1.1:
resolution: {integrity: sha512-edNu/8D5MKVfGVFRhFf8aAxiTM6Wumfz5XsaatSxlD3w4R1d/WEKUTydCdPGbl9K7QG/Ca3GnDV2sIKIpXRQcw==}
@@ -2904,9 +3349,16 @@ packages:
magic-string@0.30.11:
resolution: {integrity: sha512-+Wri9p0QHMy+545hKww7YAu5NyzF8iomPL/RQazugQ9+Ez4Ic3mERMd8ZTX5rfK944j+560ZJi8iAwgak1Ac7A==}
+ make-dir@4.0.0:
+ resolution: {integrity: sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==}
+ engines: {node: '>=10'}
+
make-error@1.3.6:
resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==}
+ makeerror@1.0.12:
+ resolution: {integrity: sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==}
+
merge-stream@2.0.0:
resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==}
@@ -2930,6 +3382,10 @@ packages:
resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==}
engines: {node: '>=6'}
+ mimic-fn@4.0.0:
+ resolution: {integrity: sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==}
+ engines: {node: '>=12'}
+
min-indent@1.0.1:
resolution: {integrity: sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==}
engines: {node: '>=4'}
@@ -2965,6 +3421,9 @@ packages:
resolution: {integrity: sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==}
engines: {node: '>=4'}
+ ms@2.1.2:
+ resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==}
+
ms@2.1.3:
resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==}
@@ -2996,11 +3455,14 @@ packages:
resolution: {integrity: sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA==}
engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
+ node-int64@0.4.0:
+ resolution: {integrity: sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==}
+
node-releases@2.0.18:
resolution: {integrity: sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g==}
- nodemon@3.1.5:
- resolution: {integrity: sha512-V5UtfYc7hjFD4SI3EzD5TR8ChAHEZ+Ns7Z5fBk8fAbTVAj+q3G+w7sHJrHxXBkVn6ApLVTljau8wfHwqmGUjMw==}
+ nodemon@3.1.4:
+ resolution: {integrity: sha512-wjPBbFhtpJwmIeY2yP7QF+UKzPfltVGtfce1g/bB15/8vCGZj8uxD62b/b9M9/WVgme0NZudpownKN+c0plXlQ==}
engines: {node: '>=10'}
hasBin: true
@@ -3015,6 +3477,10 @@ packages:
resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==}
engines: {node: '>=8'}
+ npm-run-path@5.3.0:
+ resolution: {integrity: sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ==}
+ engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
+
nwsapi@2.2.12:
resolution: {integrity: sha512-qXDmcVlZV4XRtKFzddidpfVP4oMSGhga+xdMc25mv8kaLUHtgzCDhUxkrN8exkGdTlLNaXj7CV3GtON7zuGZ+w==}
@@ -3064,6 +3530,10 @@ packages:
resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==}
engines: {node: '>=6'}
+ onetime@6.0.0:
+ resolution: {integrity: sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==}
+ engines: {node: '>=12'}
+
optionator@0.9.4:
resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==}
engines: {node: '>= 0.8.0'}
@@ -3106,9 +3576,6 @@ packages:
package-json-from-dist@1.0.0:
resolution: {integrity: sha512-dATvCeZN/8wQsGywez1mzHtTlP22H8OEfPrVMLNr4/eGa+ijtLn/6M5f0dY8UKNrC2O9UCU6SSoG3qRKnt7STw==}
- package-manager-detector@0.2.0:
- resolution: {integrity: sha512-E385OSk9qDcXhcM9LNSe4sdhx8a9mAPrZ4sMLW+tmxl5ZuGtPUcdFu+MPP2jbgiWAZ6Pfe5soGFMd+0Db5Vrog==}
-
pako@2.1.0:
resolution: {integrity: sha512-w+eufiZ1WuJYgPXbV/PO3NCMEc3xqylkKHzp8bxp1uW4qaSNQUkwmLLEc3kKsfz8lpV1F8Ht3U1Cm+9Srog2ug==}
@@ -3135,6 +3602,10 @@ packages:
resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==}
engines: {node: '>=8'}
+ path-key@4.0.0:
+ resolution: {integrity: sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==}
+ engines: {node: '>=12'}
+
path-parse@1.0.7:
resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==}
@@ -3153,17 +3624,13 @@ packages:
resolution: {integrity: sha512-vE7JKRyES09KiunauX7nd2Q9/L7lhok4smP9RZTDeD4MVs72Dp2qNFVz39Nz5a0FVEW0BJR6C0DYrq6unoziZA==}
engines: {node: '>= 14.16'}
- picocolors@1.1.0:
- resolution: {integrity: sha512-TQ92mBOW0l3LeMeyLV6mzy/kWr8lkd/hp3mTg7wYK7zJhuBStmGMBG0BdeDZS/dZx1IukaX6Bk11zcln25o1Aw==}
+ picocolors@1.0.1:
+ resolution: {integrity: sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==}
picomatch@2.3.1:
resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==}
engines: {node: '>=8.6'}
- picomatch@4.0.2:
- resolution: {integrity: sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==}
- engines: {node: '>=12'}
-
pify@4.0.1:
resolution: {integrity: sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==}
engines: {node: '>=6'}
@@ -3172,6 +3639,10 @@ packages:
resolution: {integrity: sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==}
engines: {node: '>= 6'}
+ pkg-dir@4.2.0:
+ resolution: {integrity: sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==}
+ engines: {node: '>=8'}
+
pluralize@8.0.0:
resolution: {integrity: sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==}
engines: {node: '>=4'}
@@ -3198,10 +3669,14 @@ packages:
yaml:
optional: true
- postcss@8.4.47:
- resolution: {integrity: sha512-56rxCq7G/XfB4EkXq9Egn5GCqugWvDFjafDOThIdMBsI15iqPqR5r15TfSr1YPYeEI19YeaXMCbY6u88Y76GLQ==}
+ postcss@8.4.45:
+ resolution: {integrity: sha512-7KTLTdzdZZYscUc65XmjFiB73vBhBfbPztCYdUNvlaso9PrzjzcmjqBPR0lNGkcVlcO4BjiO5rK/qNz+XAen1Q==}
engines: {node: ^10 || ^12 || >=14}
+ preferred-pm@3.1.4:
+ resolution: {integrity: sha512-lEHd+yEm22jXdCphDrkvIJQU66EuLojPPtvZkpKIkiD+l0DMThF/niqZKJSoU8Vl7iuvtmzyMhir9LdVy5WMnA==}
+ engines: {node: '>=10'}
+
prelude-ls@1.2.1:
resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==}
engines: {node: '>= 0.8.0'}
@@ -3237,6 +3712,10 @@ packages:
resolution: {integrity: sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==}
engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
+ prompts@2.4.2:
+ resolution: {integrity: sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==}
+ engines: {node: '>= 6'}
+
prop-types@15.8.1:
resolution: {integrity: sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==}
@@ -3253,6 +3732,9 @@ packages:
resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==}
engines: {node: '>=6'}
+ pure-rand@6.1.0:
+ resolution: {integrity: sha512-bVWawvoZoBYpp6yIoQtQXHZjmz35RSVHnUOTefl8Vcjr8snTPY1wnpSPMWekcFwbxI6gtmT7rSYPFvz71ldiOA==}
+
querystringify@2.2.0:
resolution: {integrity: sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==}
@@ -3352,6 +3834,10 @@ packages:
requires-port@1.0.0:
resolution: {integrity: sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==}
+ resolve-cwd@3.0.0:
+ resolution: {integrity: sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==}
+ engines: {node: '>=8'}
+
resolve-from@4.0.0:
resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==}
engines: {node: '>=4'}
@@ -3363,6 +3849,10 @@ packages:
resolve-pkg-maps@1.0.0:
resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==}
+ resolve.exports@2.0.2:
+ resolution: {integrity: sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg==}
+ engines: {node: '>=10'}
+
resolve@1.19.0:
resolution: {integrity: sha512-rArEXAgsBG4UgRGcynxWIWKFvh/XZCcS8UJdHhwy91zwAvCZIbcs+vAbflgBnNjYMs/i/i+/Ux6IZhML1yPvxg==}
@@ -3383,8 +3873,8 @@ packages:
deprecated: Rimraf versions prior to v4 are no longer supported
hasBin: true
- rollup@4.21.3:
- resolution: {integrity: sha512-7sqRtBNnEbcBtMeRVc6VRsJMmpI+JU1z9VTvW8D4gXIYQFz0aLcsE6rRkyghZkLfEgUZgVvOG7A5CVz/VW5GIA==}
+ rollup@4.21.0:
+ resolution: {integrity: sha512-vo+S/lfA2lMS7rZ2Qoubi6I5hwZwzXeUIctILZLbHI+laNtvhhOIon2S1JksA5UEDQ7l3vberd0fxK44lTYjbQ==}
engines: {node: '>=18.0.0', npm: '>=8.0.0'}
hasBin: true
@@ -3402,8 +3892,8 @@ packages:
resolution: {integrity: sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw==}
engines: {node: '>= 0.4'}
- safe-stable-stringify@2.5.0:
- resolution: {integrity: sha512-b3rppTKm9T+PsVCBEOUR46GWI7fdOs00VKZ1+9c1EWDaDMvjQc6tUwuFyIprgGgTcWoVHSKrU8H31ZHA2e0RHA==}
+ safe-stable-stringify@2.4.3:
+ resolution: {integrity: sha512-e2bDA2WJT0wxseVd4lsDP4+3ONX6HpMXQa1ZhFQ7SU+GjvORCmShbCMltrtIDfkYhVHrOcPtj+KhmDBdPdZD1g==}
engines: {node: '>=10'}
safer-buffer@2.1.2:
@@ -3480,6 +3970,9 @@ packages:
resolution: {integrity: sha512-a2B9Y0KlNXl9u/vsW6sTIu9vGEpfKu2wRV6l1H3XEas/0gUIzGzBoP/IouTcUQbm9JWZLH3COxyn03TYlFax6w==}
engines: {node: '>=10'}
+ sisteransi@1.0.5:
+ resolution: {integrity: sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==}
+
slash@3.0.0:
resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==}
engines: {node: '>=8'}
@@ -3499,6 +3992,9 @@ packages:
resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==}
engines: {node: '>=0.10.0'}
+ source-map-support@0.5.13:
+ resolution: {integrity: sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==}
+
source-map@0.6.1:
resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==}
engines: {node: '>=0.10.0'}
@@ -3545,6 +4041,10 @@ packages:
resolution: {integrity: sha512-iCGQj+0l0HOdZ2AEeBADlsRC+vsnDsZsbdSiH1yNSjcfKM7fdpCMfqAL/dwF5BLiw/XhRft/Wax6zQbhq2BcjQ==}
engines: {node: '>= 0.4'}
+ string-length@4.0.2:
+ resolution: {integrity: sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==}
+ engines: {node: '>=10'}
+
string-width@4.2.3:
resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==}
engines: {node: '>=8'}
@@ -3589,10 +4089,18 @@ packages:
resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==}
engines: {node: '>=4'}
+ strip-bom@4.0.0:
+ resolution: {integrity: sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==}
+ engines: {node: '>=8'}
+
strip-final-newline@2.0.0:
resolution: {integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==}
engines: {node: '>=6'}
+ strip-final-newline@3.0.0:
+ resolution: {integrity: sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==}
+ engines: {node: '>=12'}
+
strip-indent@3.0.0:
resolution: {integrity: sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==}
engines: {node: '>=8'}
@@ -3637,6 +4145,10 @@ packages:
resolution: {integrity: sha512-wK0Ri4fOGjv/XPy8SBHZChl8CM7uMc5VML7SqiQ0zG7+J5Vr+RMQDoHa2CNT6KHUnTGIXH34UDMkPzAUyapBZg==}
engines: {node: '>=8'}
+ test-exclude@6.0.0:
+ resolution: {integrity: sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==}
+ engines: {node: '>=8'}
+
text-hex@1.0.0:
resolution: {integrity: sha512-uuVGNWzgJ4yhRaNSiubPY7OjISw4sw4E5Uv0wbjp+OzcbmVU/rsT8ujgcXJhn9ypzsgr5vlzpPqP+MBBKcGvbg==}
@@ -3653,13 +4165,6 @@ packages:
tinybench@2.9.0:
resolution: {integrity: sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==}
- tinyexec@0.3.0:
- resolution: {integrity: sha512-tVGE0mVJPGb0chKhqmsoosjsS+qUnJVGJpZgsHYQcGoPlG3B51R3PouqTgEGH2Dc9jjFyOqOpix6ZHNMXp1FZg==}
-
- tinyglobby@0.2.6:
- resolution: {integrity: sha512-NbBoFBpqfcgd1tCiO8Lkfdk+xrA7mlLR9zgvZcZWQQwU63XAfUePyd6wZBaU93Hqw347lHnwFzttAkemHzzz4g==}
- engines: {node: '>=12.0.0'}
-
tinypool@1.0.1:
resolution: {integrity: sha512-URZYihUbRPcGv95En+sz6MfghfIc2OJ1sv/RmhWZLouPY0/8Vo80viwPvg3dlaS9fuq7fQMEfgRRK7BBZThBEA==}
engines: {node: ^18.0.0 || >=20.0.0}
@@ -3676,6 +4181,9 @@ packages:
resolution: {integrity: sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==}
engines: {node: '>=0.6.0'}
+ tmpl@1.0.5:
+ resolution: {integrity: sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==}
+
to-fast-properties@2.0.0:
resolution: {integrity: sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==}
engines: {node: '>=4'}
@@ -3745,8 +4253,8 @@ packages:
tslib@2.7.0:
resolution: {integrity: sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==}
- tsup@8.3.0:
- resolution: {integrity: sha512-ALscEeyS03IomcuNdFdc0YWGVIkwH1Ws7nfTbAPuoILvEV2hpGQAY72LIOjglGo4ShWpZfpBqP/jpQVCzqYQag==}
+ tsup@8.2.4:
+ resolution: {integrity: sha512-akpCPePnBnC/CXgRrcy72ZSntgIEUa1jN0oJbbvpALWKNOz1B7aM+UVDWGRGIO/T/PZugAESWDJUAb5FD48o8Q==}
engines: {node: '>=18'}
hasBin: true
peerDependencies:
@@ -3770,8 +4278,8 @@ packages:
peerDependencies:
typescript: '>=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta'
- tsx@4.19.1:
- resolution: {integrity: sha512-0flMz1lh74BR4wOvBjuh9olbnwqCPc35OOlfyzHba0Dc+QNUeWX/Gq2YTbnwcWPO3BMd8fkzRVrHcsR+a7z7rA==}
+ tsx@4.17.0:
+ resolution: {integrity: sha512-eN4mnDA5UMKDt4YZixo9tBioibaMBpoxBkD+rIPAjVmYERSG0/dWEY1CEFuV89CgASlKL499q8AhmkMnnjtOJg==}
engines: {node: '>=18.0.0'}
hasBin: true
@@ -3821,6 +4329,10 @@ packages:
resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==}
engines: {node: '>=10'}
+ type-fest@0.21.3:
+ resolution: {integrity: sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==}
+ engines: {node: '>=10'}
+
type-fest@0.6.0:
resolution: {integrity: sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==}
engines: {node: '>=8'}
@@ -3845,8 +4357,8 @@ packages:
resolution: {integrity: sha512-/OxDN6OtAk5KBpGb28T+HZc2M+ADtvRxXrKKbUwtsLgdoxgX13hyy7ek6bFRl5+aBs2yZzB0c4CnQfAtVypW/g==}
engines: {node: '>= 0.4'}
- typescript@5.6.2:
- resolution: {integrity: sha512-NW8ByodCSNCwZeghjN3o+JX5OFH0Ojg6sadjEKY4huZ52TqbJTJnDo5+Tw98lSy63NZvi4n+ez5m2u5d4PkZyw==}
+ typescript@5.5.4:
+ resolution: {integrity: sha512-Mtq29sKDAEYP7aljRgtPOpTvOfbwRWlS6dPRzwjdE+C0R4brX/GUyhHSecbHMFLNBLcJIPt9nl9yG5TZ1weH+Q==}
engines: {node: '>=14.17'}
hasBin: true
@@ -3895,24 +4407,28 @@ packages:
v8-compile-cache-lib@3.0.1:
resolution: {integrity: sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==}
+ v8-to-istanbul@9.3.0:
+ resolution: {integrity: sha512-kiGUalWN+rgBJ/1OHZsBtU4rXZOfj/7rKQxULKlIzwzQSvMJUUNgPwJEEh7gU6xEVxC0ahoOBvN2YI8GH6FNgA==}
+ engines: {node: '>=10.12.0'}
+
validate-npm-package-license@3.0.4:
resolution: {integrity: sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==}
- viem@2.21.9:
- resolution: {integrity: sha512-fWPDX2ABEo/mLiDN+wsmYJDJk0a/ZCafquxInR2+HZv/7UTgHbLgjZs4SotpEeFAYjgVThJ7A9TPmrRjaaYqvw==}
+ viem@2.20.0:
+ resolution: {integrity: sha512-cM4vs81HnSNbfceI1MLkx4pCVzbVjl9xiNSv5SCutYjUyFFOVSPDlEyhpg2iHinxx1NM4Qne3END5eLT8rvUdg==}
peerDependencies:
typescript: '>=5.0.4'
peerDependenciesMeta:
typescript:
optional: true
- vite-node@2.1.1:
- resolution: {integrity: sha512-N/mGckI1suG/5wQI35XeR9rsMsPqKXzq1CdUndzVstBj/HvyxxGctwnK6WX43NGt5L3Z5tcRf83g4TITKJhPrA==}
+ vite-node@2.0.5:
+ resolution: {integrity: sha512-LdsW4pxj0Ot69FAoXZ1yTnA9bjGohr2yNBU7QKRxpz8ITSkhuDl6h3zS/tvgz4qrNjeRnvrWeXQ8ZF7Um4W00Q==}
engines: {node: ^18.0.0 || >=20.0.0}
hasBin: true
- vite@5.4.6:
- resolution: {integrity: sha512-IeL5f8OO5nylsgzd9tq4qD2QqI0k2CQLGrWD0rCN0EQJZpBK5vJAx0I+GDkMOXxQX/OfFHMuLIx6ddAxGX/k+Q==}
+ vite@5.4.3:
+ resolution: {integrity: sha512-IH+nl64eq9lJjFqU+/yrRnrHPVTlgy42/+IzbOdaFDVlyLgI/wDlf+FCobXLX1cT0X5+7LMyH1mIy2xJdLfo8Q==}
engines: {node: ^18.0.0 || >=20.0.0}
hasBin: true
peerDependencies:
@@ -3942,15 +4458,15 @@ packages:
terser:
optional: true
- vitest@2.1.1:
- resolution: {integrity: sha512-97We7/VC0e9X5zBVkvt7SGQMGrRtn3KtySFQG5fpaMlS+l62eeXRQO633AYhSTC3z7IMebnPPNjGXVGNRFlxBA==}
+ vitest@2.0.5:
+ resolution: {integrity: sha512-8GUxONfauuIdeSl5f9GTgVEpg5BTOlplET4WEDaeY2QBiN8wSm68vxN/tb5z405OwppfoCavnwXafiaYBC/xOA==}
engines: {node: ^18.0.0 || >=20.0.0}
hasBin: true
peerDependencies:
'@edge-runtime/vm': '*'
'@types/node': ^18.0.0 || >=20.0.0
- '@vitest/browser': 2.1.1
- '@vitest/ui': 2.1.1
+ '@vitest/browser': 2.0.5
+ '@vitest/ui': 2.0.5
happy-dom: '*'
jsdom: '*'
peerDependenciesMeta:
@@ -3971,6 +4487,9 @@ packages:
resolution: {integrity: sha512-d+BFHzbiCx6zGfz0HyQ6Rg69w9k19nviJspaj4yNscGjrHu94sVP+aRm75yEbCh+r2/yR+7q6hux9LVtbuTGBw==}
engines: {node: '>=14'}
+ walker@1.0.8:
+ resolution: {integrity: sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==}
+
web-streams-polyfill@3.3.3:
resolution: {integrity: sha512-d2JWLCivmZYTSIoge9MsgFCZrt571BikcWGYkjC1khllbTeDlGqZ2D8vD8E/lJa8WGWbb7Plm8/XJYV7IJHZZw==}
engines: {node: '>= 8'}
@@ -4020,6 +4539,10 @@ packages:
resolution: {integrity: sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==}
engines: {node: '>= 0.4'}
+ which-pm@2.2.0:
+ resolution: {integrity: sha512-MOiaDbA5ZZgUjkeMWM5EkJp4loW5ZRoa5bc3/aeMox/PJelMhE6t7S/mLuiY43DBupyxH+S0U1bTui9kWUlmsw==}
+ engines: {node: '>=8.15'}
+
which-typed-array@1.1.15:
resolution: {integrity: sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA==}
engines: {node: '>= 0.4'}
@@ -4064,6 +4587,10 @@ packages:
wrappy@1.0.2:
resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==}
+ write-file-atomic@4.0.2:
+ resolution: {integrity: sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==}
+ engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0}
+
ws@8.17.1:
resolution: {integrity: sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ==}
engines: {node: '>=10.0.0'}
@@ -4076,18 +4603,6 @@ packages:
utf-8-validate:
optional: true
- ws@8.18.0:
- resolution: {integrity: sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw==}
- 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
-
xml-name-validator@4.0.0:
resolution: {integrity: sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==}
engines: {node: '>=12'}
@@ -4150,7 +4665,7 @@ snapshots:
'@babel/code-frame@7.24.7':
dependencies:
'@babel/highlight': 7.24.7
- picocolors: 1.1.0
+ picocolors: 1.0.1
'@babel/compat-data@7.25.4': {}
@@ -4158,33 +4673,33 @@ snapshots:
dependencies:
'@ampproject/remapping': 2.3.0
'@babel/code-frame': 7.24.7
- '@babel/generator': 7.25.6
+ '@babel/generator': 7.25.5
'@babel/helper-compilation-targets': 7.25.2
'@babel/helper-module-transforms': 7.25.2(@babel/core@7.25.2)
- '@babel/helpers': 7.25.6
- '@babel/parser': 7.25.6
+ '@babel/helpers': 7.25.0
+ '@babel/parser': 7.25.4
'@babel/template': 7.25.0
- '@babel/traverse': 7.25.6
- '@babel/types': 7.25.6
+ '@babel/traverse': 7.25.4
+ '@babel/types': 7.25.4
convert-source-map: 2.0.0
- debug: 4.3.7(supports-color@5.5.0)
+ debug: 4.3.6(supports-color@5.5.0)
gensync: 1.0.0-beta.2
json5: 2.2.3
semver: 6.3.1
transitivePeerDependencies:
- supports-color
- '@babel/eslint-parser@7.25.1(@babel/core@7.25.2)(eslint@8.57.1)':
+ '@babel/eslint-parser@7.25.1(@babel/core@7.25.2)(eslint@8.57.0)':
dependencies:
'@babel/core': 7.25.2
'@nicolo-ribaudo/eslint-scope-5-internals': 5.1.1-v1
- eslint: 8.57.1
+ eslint: 8.57.0
eslint-visitor-keys: 2.1.0
semver: 6.3.1
- '@babel/generator@7.25.6':
+ '@babel/generator@7.25.5':
dependencies:
- '@babel/types': 7.25.6
+ '@babel/types': 7.25.4
'@jridgewell/gen-mapping': 0.3.5
'@jridgewell/trace-mapping': 0.3.25
jsesc: 2.5.2
@@ -4199,8 +4714,8 @@ snapshots:
'@babel/helper-module-imports@7.24.7':
dependencies:
- '@babel/traverse': 7.25.6
- '@babel/types': 7.25.6
+ '@babel/traverse': 7.25.4
+ '@babel/types': 7.25.4
transitivePeerDependencies:
- supports-color
@@ -4210,14 +4725,17 @@ snapshots:
'@babel/helper-module-imports': 7.24.7
'@babel/helper-simple-access': 7.24.7
'@babel/helper-validator-identifier': 7.24.7
- '@babel/traverse': 7.25.6
+ '@babel/traverse': 7.25.4
transitivePeerDependencies:
- supports-color
+ '@babel/helper-plugin-utils@7.24.8':
+ optional: true
+
'@babel/helper-simple-access@7.24.7':
dependencies:
- '@babel/traverse': 7.25.6
- '@babel/types': 7.25.6
+ '@babel/traverse': 7.25.4
+ '@babel/types': 7.25.4
transitivePeerDependencies:
- supports-color
@@ -4227,56 +4745,162 @@ snapshots:
'@babel/helper-validator-option@7.24.8': {}
- '@babel/helpers@7.25.6':
+ '@babel/helpers@7.25.0':
dependencies:
'@babel/template': 7.25.0
- '@babel/types': 7.25.6
+ '@babel/types': 7.25.4
'@babel/highlight@7.24.7':
dependencies:
'@babel/helper-validator-identifier': 7.24.7
chalk: 2.4.2
js-tokens: 4.0.0
- picocolors: 1.1.0
+ picocolors: 1.0.1
+
+ '@babel/parser@7.25.4':
+ dependencies:
+ '@babel/types': 7.25.4
+
+ '@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.25.2)':
+ dependencies:
+ '@babel/core': 7.25.2
+ '@babel/helper-plugin-utils': 7.24.8
+ optional: true
+
+ '@babel/plugin-syntax-bigint@7.8.3(@babel/core@7.25.2)':
+ dependencies:
+ '@babel/core': 7.25.2
+ '@babel/helper-plugin-utils': 7.24.8
+ optional: true
+
+ '@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.25.2)':
+ dependencies:
+ '@babel/core': 7.25.2
+ '@babel/helper-plugin-utils': 7.24.8
+ optional: true
+
+ '@babel/plugin-syntax-class-static-block@7.14.5(@babel/core@7.25.2)':
+ dependencies:
+ '@babel/core': 7.25.2
+ '@babel/helper-plugin-utils': 7.24.8
+ optional: true
+
+ '@babel/plugin-syntax-import-attributes@7.24.7(@babel/core@7.25.2)':
+ dependencies:
+ '@babel/core': 7.25.2
+ '@babel/helper-plugin-utils': 7.24.8
+ optional: true
+
+ '@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.25.2)':
+ dependencies:
+ '@babel/core': 7.25.2
+ '@babel/helper-plugin-utils': 7.24.8
+ optional: true
+
+ '@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.25.2)':
+ dependencies:
+ '@babel/core': 7.25.2
+ '@babel/helper-plugin-utils': 7.24.8
+ optional: true
+
+ '@babel/plugin-syntax-jsx@7.24.7(@babel/core@7.25.2)':
+ dependencies:
+ '@babel/core': 7.25.2
+ '@babel/helper-plugin-utils': 7.24.8
+ optional: true
+
+ '@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.25.2)':
+ dependencies:
+ '@babel/core': 7.25.2
+ '@babel/helper-plugin-utils': 7.24.8
+ optional: true
+
+ '@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.25.2)':
+ dependencies:
+ '@babel/core': 7.25.2
+ '@babel/helper-plugin-utils': 7.24.8
+ optional: true
+
+ '@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.25.2)':
+ dependencies:
+ '@babel/core': 7.25.2
+ '@babel/helper-plugin-utils': 7.24.8
+ optional: true
+
+ '@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.25.2)':
+ dependencies:
+ '@babel/core': 7.25.2
+ '@babel/helper-plugin-utils': 7.24.8
+ optional: true
+
+ '@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.25.2)':
+ dependencies:
+ '@babel/core': 7.25.2
+ '@babel/helper-plugin-utils': 7.24.8
+ optional: true
+
+ '@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.25.2)':
+ dependencies:
+ '@babel/core': 7.25.2
+ '@babel/helper-plugin-utils': 7.24.8
+ optional: true
+
+ '@babel/plugin-syntax-private-property-in-object@7.14.5(@babel/core@7.25.2)':
+ dependencies:
+ '@babel/core': 7.25.2
+ '@babel/helper-plugin-utils': 7.24.8
+ optional: true
+
+ '@babel/plugin-syntax-top-level-await@7.14.5(@babel/core@7.25.2)':
+ dependencies:
+ '@babel/core': 7.25.2
+ '@babel/helper-plugin-utils': 7.24.8
+ optional: true
- '@babel/parser@7.25.6':
+ '@babel/plugin-syntax-typescript@7.25.4(@babel/core@7.25.2)':
dependencies:
- '@babel/types': 7.25.6
+ '@babel/core': 7.25.2
+ '@babel/helper-plugin-utils': 7.24.8
+ optional: true
- '@babel/runtime@7.25.6':
+ '@babel/runtime@7.25.4':
dependencies:
regenerator-runtime: 0.14.1
'@babel/template@7.25.0':
dependencies:
'@babel/code-frame': 7.24.7
- '@babel/parser': 7.25.6
- '@babel/types': 7.25.6
+ '@babel/parser': 7.25.4
+ '@babel/types': 7.25.4
- '@babel/traverse@7.25.6':
+ '@babel/traverse@7.25.4':
dependencies:
'@babel/code-frame': 7.24.7
- '@babel/generator': 7.25.6
- '@babel/parser': 7.25.6
+ '@babel/generator': 7.25.5
+ '@babel/parser': 7.25.4
'@babel/template': 7.25.0
- '@babel/types': 7.25.6
- debug: 4.3.7(supports-color@5.5.0)
+ '@babel/types': 7.25.4
+ debug: 4.3.6(supports-color@5.5.0)
globals: 11.12.0
transitivePeerDependencies:
- supports-color
- '@babel/types@7.25.6':
+ '@babel/types@7.25.4':
dependencies:
'@babel/helper-string-parser': 7.24.8
'@babel/helper-validator-identifier': 7.24.7
to-fast-properties: 2.0.0
- '@changesets/apply-release-plan@7.0.5':
+ '@bcoe/v8-coverage@0.2.3':
+ optional: true
+
+ '@changesets/apply-release-plan@7.0.4':
dependencies:
- '@changesets/config': 3.0.3
+ '@babel/runtime': 7.25.4
+ '@changesets/config': 3.0.2
'@changesets/get-version-range-type': 0.4.0
- '@changesets/git': 3.0.1
- '@changesets/should-skip-package': 0.1.1
+ '@changesets/git': 3.0.0
+ '@changesets/should-skip-package': 0.1.0
'@changesets/types': 6.0.0
'@manypkg/get-packages': 1.1.3
detect-indent: 6.1.0
@@ -4287,11 +4911,12 @@ snapshots:
resolve-from: 5.0.0
semver: 7.6.3
- '@changesets/assemble-release-plan@6.0.4':
+ '@changesets/assemble-release-plan@6.0.3':
dependencies:
+ '@babel/runtime': 7.25.4
'@changesets/errors': 0.2.0
- '@changesets/get-dependents-graph': 2.1.2
- '@changesets/should-skip-package': 0.1.1
+ '@changesets/get-dependents-graph': 2.1.1
+ '@changesets/should-skip-package': 0.1.0
'@changesets/types': 6.0.0
'@manypkg/get-packages': 1.1.3
semver: 7.6.3
@@ -4300,44 +4925,46 @@ snapshots:
dependencies:
'@changesets/types': 6.0.0
- '@changesets/cli@2.27.8':
+ '@changesets/cli@2.27.7':
dependencies:
- '@changesets/apply-release-plan': 7.0.5
- '@changesets/assemble-release-plan': 6.0.4
+ '@babel/runtime': 7.25.4
+ '@changesets/apply-release-plan': 7.0.4
+ '@changesets/assemble-release-plan': 6.0.3
'@changesets/changelog-git': 0.2.0
- '@changesets/config': 3.0.3
+ '@changesets/config': 3.0.2
'@changesets/errors': 0.2.0
- '@changesets/get-dependents-graph': 2.1.2
- '@changesets/get-release-plan': 4.0.4
- '@changesets/git': 3.0.1
- '@changesets/logger': 0.1.1
- '@changesets/pre': 2.0.1
- '@changesets/read': 0.6.1
- '@changesets/should-skip-package': 0.1.1
+ '@changesets/get-dependents-graph': 2.1.1
+ '@changesets/get-release-plan': 4.0.3
+ '@changesets/git': 3.0.0
+ '@changesets/logger': 0.1.0
+ '@changesets/pre': 2.0.0
+ '@changesets/read': 0.6.0
+ '@changesets/should-skip-package': 0.1.0
'@changesets/types': 6.0.0
- '@changesets/write': 0.3.2
+ '@changesets/write': 0.3.1
'@manypkg/get-packages': 1.1.3
'@types/semver': 7.5.8
ansi-colors: 4.1.3
+ chalk: 2.4.2
ci-info: 3.9.0
enquirer: 2.4.1
external-editor: 3.1.0
fs-extra: 7.0.1
+ human-id: 1.0.2
mri: 1.2.0
outdent: 0.5.0
p-limit: 2.3.0
- package-manager-detector: 0.2.0
- picocolors: 1.1.0
+ preferred-pm: 3.1.4
resolve-from: 5.0.0
semver: 7.6.3
spawndamnit: 2.0.0
term-size: 2.2.1
- '@changesets/config@3.0.3':
+ '@changesets/config@3.0.2':
dependencies:
'@changesets/errors': 0.2.0
- '@changesets/get-dependents-graph': 2.1.2
- '@changesets/logger': 0.1.1
+ '@changesets/get-dependents-graph': 2.1.1
+ '@changesets/logger': 0.1.0
'@changesets/types': 6.0.0
'@manypkg/get-packages': 1.1.3
fs-extra: 7.0.1
@@ -4347,60 +4974,67 @@ snapshots:
dependencies:
extendable-error: 0.1.7
- '@changesets/get-dependents-graph@2.1.2':
+ '@changesets/get-dependents-graph@2.1.1':
dependencies:
'@changesets/types': 6.0.0
'@manypkg/get-packages': 1.1.3
- picocolors: 1.1.0
+ chalk: 2.4.2
+ fs-extra: 7.0.1
semver: 7.6.3
- '@changesets/get-release-plan@4.0.4':
+ '@changesets/get-release-plan@4.0.3':
dependencies:
- '@changesets/assemble-release-plan': 6.0.4
- '@changesets/config': 3.0.3
- '@changesets/pre': 2.0.1
- '@changesets/read': 0.6.1
+ '@babel/runtime': 7.25.4
+ '@changesets/assemble-release-plan': 6.0.3
+ '@changesets/config': 3.0.2
+ '@changesets/pre': 2.0.0
+ '@changesets/read': 0.6.0
'@changesets/types': 6.0.0
'@manypkg/get-packages': 1.1.3
'@changesets/get-version-range-type@0.4.0': {}
- '@changesets/git@3.0.1':
+ '@changesets/git@3.0.0':
dependencies:
+ '@babel/runtime': 7.25.4
'@changesets/errors': 0.2.0
+ '@changesets/types': 6.0.0
'@manypkg/get-packages': 1.1.3
is-subdir: 1.2.0
micromatch: 4.0.8
spawndamnit: 2.0.0
- '@changesets/logger@0.1.1':
+ '@changesets/logger@0.1.0':
dependencies:
- picocolors: 1.1.0
+ chalk: 2.4.2
'@changesets/parse@0.4.0':
dependencies:
'@changesets/types': 6.0.0
js-yaml: 3.14.1
- '@changesets/pre@2.0.1':
+ '@changesets/pre@2.0.0':
dependencies:
+ '@babel/runtime': 7.25.4
'@changesets/errors': 0.2.0
'@changesets/types': 6.0.0
'@manypkg/get-packages': 1.1.3
fs-extra: 7.0.1
- '@changesets/read@0.6.1':
+ '@changesets/read@0.6.0':
dependencies:
- '@changesets/git': 3.0.1
- '@changesets/logger': 0.1.1
+ '@babel/runtime': 7.25.4
+ '@changesets/git': 3.0.0
+ '@changesets/logger': 0.1.0
'@changesets/parse': 0.4.0
'@changesets/types': 6.0.0
+ chalk: 2.4.2
fs-extra: 7.0.1
p-filter: 2.1.0
- picocolors: 1.1.0
- '@changesets/should-skip-package@0.1.1':
+ '@changesets/should-skip-package@0.1.0':
dependencies:
+ '@babel/runtime': 7.25.4
'@changesets/types': 6.0.0
'@manypkg/get-packages': 1.1.3
@@ -4408,8 +5042,9 @@ snapshots:
'@changesets/types@6.0.0': {}
- '@changesets/write@0.3.2':
+ '@changesets/write@0.3.1':
dependencies:
+ '@babel/runtime': 7.25.4
'@changesets/types': 6.0.0
fs-extra: 7.0.1
human-id: 1.0.2
@@ -4637,17 +5272,17 @@ snapshots:
'@esbuild/win32-x64@0.23.1':
optional: true
- '@eslint-community/eslint-utils@4.4.0(eslint@8.57.1)':
+ '@eslint-community/eslint-utils@4.4.0(eslint@8.57.0)':
dependencies:
- eslint: 8.57.1
+ eslint: 8.57.0
eslint-visitor-keys: 3.4.3
- '@eslint-community/regexpp@4.11.1': {}
+ '@eslint-community/regexpp@4.11.0': {}
'@eslint/eslintrc@2.1.4':
dependencies:
ajv: 6.12.6
- debug: 4.3.7(supports-color@5.5.0)
+ debug: 4.3.6(supports-color@5.5.0)
espree: 9.6.1
globals: 13.24.0
ignore: 5.3.2
@@ -4658,12 +5293,12 @@ snapshots:
transitivePeerDependencies:
- supports-color
- '@eslint/js@8.57.1': {}
+ '@eslint/js@8.57.0': {}
- '@humanwhocodes/config-array@0.13.0':
+ '@humanwhocodes/config-array@0.11.14':
dependencies:
'@humanwhocodes/object-schema': 2.0.3
- debug: 4.3.7(supports-color@5.5.0)
+ debug: 4.3.6(supports-color@5.5.0)
minimatch: 3.1.2
transitivePeerDependencies:
- supports-color
@@ -4675,10 +5310,10 @@ snapshots:
'@ianvs/prettier-plugin-sort-imports@4.3.1(prettier@3.3.3)':
dependencies:
'@babel/core': 7.25.2
- '@babel/generator': 7.25.6
- '@babel/parser': 7.25.6
- '@babel/traverse': 7.25.6
- '@babel/types': 7.25.6
+ '@babel/generator': 7.25.5
+ '@babel/parser': 7.25.4
+ '@babel/traverse': 7.25.4
+ '@babel/types': 7.25.4
prettier: 3.3.3
semver: 7.6.3
transitivePeerDependencies:
@@ -4693,48 +5328,203 @@ snapshots:
wrap-ansi: 8.1.0
wrap-ansi-cjs: wrap-ansi@7.0.0
- '@jest/environment@29.7.0':
+ '@istanbuljs/load-nyc-config@1.1.0':
dependencies:
- '@jest/fake-timers': 29.7.0
- '@jest/types': 29.6.3
- '@types/node': 22.5.5
- jest-mock: 29.7.0
+ camelcase: 5.3.1
+ find-up: 4.1.0
+ get-package-type: 0.1.0
+ js-yaml: 3.14.1
+ resolve-from: 5.0.0
+ optional: true
- '@jest/fake-timers@29.7.0':
+ '@istanbuljs/schema@0.1.3':
+ optional: true
+
+ '@jest/console@29.7.0':
dependencies:
'@jest/types': 29.6.3
- '@sinonjs/fake-timers': 10.3.0
'@types/node': 22.5.5
+ chalk: 4.1.2
jest-message-util: 29.7.0
- jest-mock: 29.7.0
jest-util: 29.7.0
+ slash: 3.0.0
+ optional: true
- '@jest/schemas@29.6.3':
- dependencies:
- '@sinclair/typebox': 0.27.8
-
- '@jest/types@29.6.3':
+ '@jest/core@29.7.0(ts-node@10.9.2(@types/node@22.5.5)(typescript@5.5.4))':
dependencies:
- '@jest/schemas': 29.6.3
- '@types/istanbul-lib-coverage': 2.0.6
- '@types/istanbul-reports': 3.0.4
+ '@jest/console': 29.7.0
+ '@jest/reporters': 29.7.0
+ '@jest/test-result': 29.7.0
+ '@jest/transform': 29.7.0
+ '@jest/types': 29.6.3
'@types/node': 22.5.5
- '@types/yargs': 17.0.33
+ ansi-escapes: 4.3.2
chalk: 4.1.2
+ ci-info: 3.9.0
+ exit: 0.1.2
+ graceful-fs: 4.2.11
+ jest-changed-files: 29.7.0
+ jest-config: 29.7.0(@types/node@22.5.5)(ts-node@10.9.2(@types/node@22.5.5)(typescript@5.5.4))
+ jest-haste-map: 29.7.0
+ jest-message-util: 29.7.0
+ jest-regex-util: 29.6.3
+ jest-resolve: 29.7.0
+ jest-resolve-dependencies: 29.7.0
+ jest-runner: 29.7.0
+ jest-runtime: 29.7.0
+ jest-snapshot: 29.7.0
+ jest-util: 29.7.0
+ jest-validate: 29.7.0
+ jest-watcher: 29.7.0
+ micromatch: 4.0.8
+ pretty-format: 29.7.0
+ slash: 3.0.0
+ strip-ansi: 6.0.1
+ transitivePeerDependencies:
+ - babel-plugin-macros
+ - supports-color
+ - ts-node
+ optional: true
- '@jridgewell/gen-mapping@0.3.5':
+ '@jest/environment@29.7.0':
dependencies:
- '@jridgewell/set-array': 1.2.1
- '@jridgewell/sourcemap-codec': 1.5.0
- '@jridgewell/trace-mapping': 0.3.25
-
- '@jridgewell/resolve-uri@3.1.2': {}
-
- '@jridgewell/set-array@1.2.1': {}
+ '@jest/fake-timers': 29.7.0
+ '@jest/types': 29.6.3
+ '@types/node': 20.16.1
+ jest-mock: 29.7.0
- '@jridgewell/sourcemap-codec@1.5.0': {}
+ '@jest/expect-utils@29.7.0':
+ dependencies:
+ jest-get-type: 29.6.3
+ optional: true
- '@jridgewell/trace-mapping@0.3.25':
+ '@jest/expect@29.7.0':
+ dependencies:
+ expect: 29.7.0
+ jest-snapshot: 29.7.0
+ transitivePeerDependencies:
+ - supports-color
+ optional: true
+
+ '@jest/fake-timers@29.7.0':
+ dependencies:
+ '@jest/types': 29.6.3
+ '@sinonjs/fake-timers': 10.3.0
+ '@types/node': 20.16.1
+ jest-message-util: 29.7.0
+ jest-mock: 29.7.0
+ jest-util: 29.7.0
+
+ '@jest/globals@29.7.0':
+ dependencies:
+ '@jest/environment': 29.7.0
+ '@jest/expect': 29.7.0
+ '@jest/types': 29.6.3
+ jest-mock: 29.7.0
+ transitivePeerDependencies:
+ - supports-color
+ optional: true
+
+ '@jest/reporters@29.7.0':
+ dependencies:
+ '@bcoe/v8-coverage': 0.2.3
+ '@jest/console': 29.7.0
+ '@jest/test-result': 29.7.0
+ '@jest/transform': 29.7.0
+ '@jest/types': 29.6.3
+ '@jridgewell/trace-mapping': 0.3.25
+ '@types/node': 22.5.5
+ chalk: 4.1.2
+ collect-v8-coverage: 1.0.2
+ exit: 0.1.2
+ glob: 7.2.3
+ graceful-fs: 4.2.11
+ istanbul-lib-coverage: 3.2.2
+ istanbul-lib-instrument: 6.0.3
+ istanbul-lib-report: 3.0.1
+ istanbul-lib-source-maps: 4.0.1
+ istanbul-reports: 3.1.7
+ jest-message-util: 29.7.0
+ jest-util: 29.7.0
+ jest-worker: 29.7.0
+ slash: 3.0.0
+ string-length: 4.0.2
+ strip-ansi: 6.0.1
+ v8-to-istanbul: 9.3.0
+ transitivePeerDependencies:
+ - supports-color
+ optional: true
+
+ '@jest/schemas@29.6.3':
+ dependencies:
+ '@sinclair/typebox': 0.27.8
+
+ '@jest/source-map@29.6.3':
+ dependencies:
+ '@jridgewell/trace-mapping': 0.3.25
+ callsites: 3.1.0
+ graceful-fs: 4.2.11
+ optional: true
+
+ '@jest/test-result@29.7.0':
+ dependencies:
+ '@jest/console': 29.7.0
+ '@jest/types': 29.6.3
+ '@types/istanbul-lib-coverage': 2.0.6
+ collect-v8-coverage: 1.0.2
+ optional: true
+
+ '@jest/test-sequencer@29.7.0':
+ dependencies:
+ '@jest/test-result': 29.7.0
+ graceful-fs: 4.2.11
+ jest-haste-map: 29.7.0
+ slash: 3.0.0
+ optional: true
+
+ '@jest/transform@29.7.0':
+ dependencies:
+ '@babel/core': 7.25.2
+ '@jest/types': 29.6.3
+ '@jridgewell/trace-mapping': 0.3.25
+ babel-plugin-istanbul: 6.1.1
+ chalk: 4.1.2
+ convert-source-map: 2.0.0
+ fast-json-stable-stringify: 2.1.0
+ graceful-fs: 4.2.11
+ jest-haste-map: 29.7.0
+ jest-regex-util: 29.6.3
+ jest-util: 29.7.0
+ micromatch: 4.0.8
+ pirates: 4.0.6
+ slash: 3.0.0
+ write-file-atomic: 4.0.2
+ transitivePeerDependencies:
+ - supports-color
+ optional: true
+
+ '@jest/types@29.6.3':
+ dependencies:
+ '@jest/schemas': 29.6.3
+ '@types/istanbul-lib-coverage': 2.0.6
+ '@types/istanbul-reports': 3.0.4
+ '@types/node': 20.16.1
+ '@types/yargs': 17.0.33
+ chalk: 4.1.2
+
+ '@jridgewell/gen-mapping@0.3.5':
+ dependencies:
+ '@jridgewell/set-array': 1.2.1
+ '@jridgewell/sourcemap-codec': 1.5.0
+ '@jridgewell/trace-mapping': 0.3.25
+
+ '@jridgewell/resolve-uri@3.1.2': {}
+
+ '@jridgewell/set-array@1.2.1': {}
+
+ '@jridgewell/sourcemap-codec@1.5.0': {}
+
+ '@jridgewell/trace-mapping@0.3.25':
dependencies:
'@jridgewell/resolve-uri': 3.1.2
'@jridgewell/sourcemap-codec': 1.5.0
@@ -4746,14 +5536,14 @@ snapshots:
'@manypkg/find-root@1.1.0':
dependencies:
- '@babel/runtime': 7.25.6
+ '@babel/runtime': 7.25.4
'@types/node': 12.20.55
find-up: 4.1.0
fs-extra: 8.1.0
'@manypkg/get-packages@1.1.3':
dependencies:
- '@babel/runtime': 7.25.6
+ '@babel/runtime': 7.25.4
'@changesets/types': 4.1.0
'@manypkg/find-root': 1.1.0
fs-extra: 8.1.0
@@ -4801,8 +5591,6 @@ snapshots:
'@noble/hashes@1.4.0': {}
- '@noble/hashes@1.5.0': {}
-
'@nodelib/fs.scandir@2.1.5':
dependencies:
'@nodelib/fs.stat': 2.0.5
@@ -4815,30 +5603,28 @@ snapshots:
'@nodelib/fs.scandir': 2.1.5
fastq: 1.17.1
- '@nolyfill/is-core-module@1.0.39': {}
-
- '@oven/bun-darwin-aarch64@1.1.28':
+ '@oven/bun-darwin-aarch64@1.1.25':
optional: true
- '@oven/bun-darwin-x64-baseline@1.1.28':
+ '@oven/bun-darwin-x64-baseline@1.1.25':
optional: true
- '@oven/bun-darwin-x64@1.1.28':
+ '@oven/bun-darwin-x64@1.1.25':
optional: true
- '@oven/bun-linux-aarch64@1.1.28':
+ '@oven/bun-linux-aarch64@1.1.25':
optional: true
- '@oven/bun-linux-x64-baseline@1.1.28':
+ '@oven/bun-linux-x64-baseline@1.1.25':
optional: true
- '@oven/bun-linux-x64@1.1.28':
+ '@oven/bun-linux-x64@1.1.25':
optional: true
- '@oven/bun-windows-x64-baseline@1.1.28':
+ '@oven/bun-windows-x64-baseline@1.1.25':
optional: true
- '@oven/bun-windows-x64@1.1.28':
+ '@oven/bun-windows-x64@1.1.25':
optional: true
'@pkgjs/parseargs@0.11.0':
@@ -4846,70 +5632,68 @@ snapshots:
'@pkgr/core@0.1.1': {}
- '@rollup/rollup-android-arm-eabi@4.21.3':
+ '@rollup/rollup-android-arm-eabi@4.21.0':
optional: true
- '@rollup/rollup-android-arm64@4.21.3':
+ '@rollup/rollup-android-arm64@4.21.0':
optional: true
- '@rollup/rollup-darwin-arm64@4.21.3':
+ '@rollup/rollup-darwin-arm64@4.21.0':
optional: true
- '@rollup/rollup-darwin-x64@4.21.3':
+ '@rollup/rollup-darwin-x64@4.21.0':
optional: true
- '@rollup/rollup-linux-arm-gnueabihf@4.21.3':
+ '@rollup/rollup-linux-arm-gnueabihf@4.21.0':
optional: true
- '@rollup/rollup-linux-arm-musleabihf@4.21.3':
+ '@rollup/rollup-linux-arm-musleabihf@4.21.0':
optional: true
- '@rollup/rollup-linux-arm64-gnu@4.21.3':
+ '@rollup/rollup-linux-arm64-gnu@4.21.0':
optional: true
- '@rollup/rollup-linux-arm64-musl@4.21.3':
+ '@rollup/rollup-linux-arm64-musl@4.21.0':
optional: true
- '@rollup/rollup-linux-powerpc64le-gnu@4.21.3':
+ '@rollup/rollup-linux-powerpc64le-gnu@4.21.0':
optional: true
- '@rollup/rollup-linux-riscv64-gnu@4.21.3':
+ '@rollup/rollup-linux-riscv64-gnu@4.21.0':
optional: true
- '@rollup/rollup-linux-s390x-gnu@4.21.3':
+ '@rollup/rollup-linux-s390x-gnu@4.21.0':
optional: true
- '@rollup/rollup-linux-x64-gnu@4.21.3':
+ '@rollup/rollup-linux-x64-gnu@4.21.0':
optional: true
- '@rollup/rollup-linux-x64-musl@4.21.3':
+ '@rollup/rollup-linux-x64-musl@4.21.0':
optional: true
- '@rollup/rollup-win32-arm64-msvc@4.21.3':
+ '@rollup/rollup-win32-arm64-msvc@4.21.0':
optional: true
- '@rollup/rollup-win32-ia32-msvc@4.21.3':
+ '@rollup/rollup-win32-ia32-msvc@4.21.0':
optional: true
- '@rollup/rollup-win32-x64-msvc@4.21.3':
+ '@rollup/rollup-win32-x64-msvc@4.21.0':
optional: true
- '@rtsao/scc@1.1.0': {}
-
'@rushstack/eslint-patch@1.10.4': {}
- '@scure/base@1.1.9': {}
+ '@scure/base@1.1.7': {}
'@scure/bip32@1.4.0':
dependencies:
'@noble/curves': 1.4.0
'@noble/hashes': 1.4.0
- '@scure/base': 1.1.9
+ '@scure/base': 1.1.7
- '@scure/bip39@1.4.0':
+ '@scure/bip39@1.3.0':
dependencies:
- '@noble/hashes': 1.5.0
- '@scure/base': 1.1.9
+ '@noble/hashes': 1.4.0
+ '@scure/base': 1.1.7
'@scure/starknet@0.3.0':
dependencies:
@@ -4938,7 +5722,7 @@ snapshots:
'@starknet-react/core@2.9.0(get-starknet-core@3.3.3(starknet@6.11.0))(react@18.3.1)(starknet@6.11.0)':
dependencies:
'@starknet-react/chains': 0.1.7
- '@tanstack/react-query': 5.56.2(react@18.3.1)
+ '@tanstack/react-query': 5.55.4(react@18.3.1)
eventemitter3: 5.0.1
get-starknet-core: 3.3.3(starknet@6.11.0)
immutable: 4.3.7
@@ -4949,7 +5733,7 @@ snapshots:
'@starknet-react/core@2.9.0(get-starknet-core@4.0.0)(react@18.3.1)(starknet@6.11.0)':
dependencies:
'@starknet-react/chains': 0.1.7
- '@tanstack/react-query': 5.56.2(react@18.3.1)
+ '@tanstack/react-query': 5.55.4(react@18.3.1)
eventemitter3: 5.0.1
get-starknet-core: 4.0.0
immutable: 4.3.7
@@ -4957,17 +5741,17 @@ snapshots:
starknet: 6.11.0
zod: 3.23.8
- '@tanstack/query-core@5.56.2': {}
+ '@tanstack/query-core@5.55.4': {}
- '@tanstack/react-query@5.56.2(react@18.3.1)':
+ '@tanstack/react-query@5.55.4(react@18.3.1)':
dependencies:
- '@tanstack/query-core': 5.56.2
+ '@tanstack/query-core': 5.55.4
react: 18.3.1
'@testing-library/dom@10.4.0':
dependencies:
'@babel/code-frame': 7.24.7
- '@babel/runtime': 7.25.6
+ '@babel/runtime': 7.25.4
'@types/aria-query': 5.0.4
aria-query: 5.3.0
chalk: 4.1.2
@@ -4978,31 +5762,31 @@ snapshots:
'@testing-library/jest-dom@6.5.0':
dependencies:
'@adobe/css-tools': 4.4.0
- aria-query: 5.3.1
+ aria-query: 5.3.0
chalk: 3.0.0
css.escape: 1.5.1
dom-accessibility-api: 0.6.3
lodash: 4.17.21
redent: 3.0.0
- '@testing-library/react-hooks@8.0.1(@types/react@18.3.7)(react-dom@18.3.1(react@18.3.1))(react-test-renderer@18.3.1(react@18.3.1))(react@18.3.1)':
+ '@testing-library/react-hooks@8.0.1(@types/react@18.3.4)(react-dom@18.3.1(react@18.3.1))(react-test-renderer@18.3.1(react@18.3.1))(react@18.3.1)':
dependencies:
- '@babel/runtime': 7.25.6
+ '@babel/runtime': 7.25.4
react: 18.3.1
react-error-boundary: 3.1.4(react@18.3.1)
optionalDependencies:
- '@types/react': 18.3.7
+ '@types/react': 18.3.4
react-dom: 18.3.1(react@18.3.1)
react-test-renderer: 18.3.1(react@18.3.1)
- '@testing-library/react@16.0.1(@testing-library/dom@10.4.0)(@types/react@18.3.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
+ '@testing-library/react@16.0.1(@testing-library/dom@10.4.0)(@types/react@18.3.4)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
dependencies:
- '@babel/runtime': 7.25.6
+ '@babel/runtime': 7.25.4
'@testing-library/dom': 10.4.0
react: 18.3.1
react-dom: 18.3.1(react@18.3.1)
optionalDependencies:
- '@types/react': 18.3.7
+ '@types/react': 18.3.4
'@tootallnate/once@2.0.0': {}
@@ -5016,13 +5800,41 @@ snapshots:
'@types/aria-query@5.0.4': {}
- '@types/bun@1.1.9':
+ '@types/babel__core@7.20.5':
+ dependencies:
+ '@babel/parser': 7.25.4
+ '@babel/types': 7.25.4
+ '@types/babel__generator': 7.6.8
+ '@types/babel__template': 7.4.4
+ '@types/babel__traverse': 7.20.6
+ optional: true
+
+ '@types/babel__generator@7.6.8':
+ dependencies:
+ '@babel/types': 7.25.4
+ optional: true
+
+ '@types/babel__template@7.4.4':
+ dependencies:
+ '@babel/parser': 7.25.4
+ '@babel/types': 7.25.4
+ optional: true
+
+ '@types/babel__traverse@7.20.6':
+ dependencies:
+ '@babel/types': 7.25.4
+ optional: true
+
+ '@types/bun@1.1.8':
dependencies:
- bun-types: 1.1.27
+ bun-types: 1.1.26
'@types/estree@1.0.5': {}
- '@types/estree@1.0.6': {}
+ '@types/graceful-fs@4.1.9':
+ dependencies:
+ '@types/node': 22.5.5
+ optional: true
'@types/istanbul-lib-coverage@2.0.6': {}
@@ -5036,7 +5848,7 @@ snapshots:
'@types/jsdom@20.0.1':
dependencies:
- '@types/node': 22.5.5
+ '@types/node': 20.16.1
'@types/tough-cookie': 4.0.5
parse5: 7.1.2
@@ -5050,11 +5862,7 @@ snapshots:
dependencies:
undici-types: 5.26.5
- '@types/node@20.16.5':
- dependencies:
- undici-types: 6.19.8
-
- '@types/node@22.5.5':
+ '@types/node@20.16.1':
dependencies:
undici-types: 6.19.8
@@ -5064,11 +5872,11 @@ snapshots:
'@types/normalize-package-data@2.4.4': {}
- '@types/prop-types@15.7.13': {}
+ '@types/prop-types@15.7.12': {}
- '@types/react@18.3.7':
+ '@types/react@18.3.4':
dependencies:
- '@types/prop-types': 15.7.13
+ '@types/prop-types': 15.7.12
csstype: 3.1.3
'@types/semver@7.5.8': {}
@@ -5089,36 +5897,36 @@ snapshots:
dependencies:
'@types/yargs-parser': 21.0.3
- '@typescript-eslint/eslint-plugin@6.21.0(@typescript-eslint/parser@6.21.0(eslint@8.57.1)(typescript@5.6.2))(eslint@8.57.1)(typescript@5.6.2)':
+ '@typescript-eslint/eslint-plugin@6.21.0(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.5.4))(eslint@8.57.0)(typescript@5.5.4)':
dependencies:
- '@eslint-community/regexpp': 4.11.1
- '@typescript-eslint/parser': 6.21.0(eslint@8.57.1)(typescript@5.6.2)
+ '@eslint-community/regexpp': 4.11.0
+ '@typescript-eslint/parser': 6.21.0(eslint@8.57.0)(typescript@5.5.4)
'@typescript-eslint/scope-manager': 6.21.0
- '@typescript-eslint/type-utils': 6.21.0(eslint@8.57.1)(typescript@5.6.2)
- '@typescript-eslint/utils': 6.21.0(eslint@8.57.1)(typescript@5.6.2)
+ '@typescript-eslint/type-utils': 6.21.0(eslint@8.57.0)(typescript@5.5.4)
+ '@typescript-eslint/utils': 6.21.0(eslint@8.57.0)(typescript@5.5.4)
'@typescript-eslint/visitor-keys': 6.21.0
- debug: 4.3.7(supports-color@5.5.0)
- eslint: 8.57.1
+ debug: 4.3.6(supports-color@5.5.0)
+ eslint: 8.57.0
graphemer: 1.4.0
ignore: 5.3.2
natural-compare: 1.4.0
semver: 7.6.3
- ts-api-utils: 1.3.0(typescript@5.6.2)
+ ts-api-utils: 1.3.0(typescript@5.5.4)
optionalDependencies:
- typescript: 5.6.2
+ typescript: 5.5.4
transitivePeerDependencies:
- supports-color
- '@typescript-eslint/parser@6.21.0(eslint@8.57.1)(typescript@5.6.2)':
+ '@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.5.4)':
dependencies:
'@typescript-eslint/scope-manager': 6.21.0
'@typescript-eslint/types': 6.21.0
- '@typescript-eslint/typescript-estree': 6.21.0(typescript@5.6.2)
+ '@typescript-eslint/typescript-estree': 6.21.0(typescript@5.5.4)
'@typescript-eslint/visitor-keys': 6.21.0
- debug: 4.3.7(supports-color@5.5.0)
- eslint: 8.57.1
+ debug: 4.3.6(supports-color@5.5.0)
+ eslint: 8.57.0
optionalDependencies:
- typescript: 5.6.2
+ typescript: 5.5.4
transitivePeerDependencies:
- supports-color
@@ -5132,15 +5940,15 @@ snapshots:
'@typescript-eslint/types': 6.21.0
'@typescript-eslint/visitor-keys': 6.21.0
- '@typescript-eslint/type-utils@6.21.0(eslint@8.57.1)(typescript@5.6.2)':
+ '@typescript-eslint/type-utils@6.21.0(eslint@8.57.0)(typescript@5.5.4)':
dependencies:
- '@typescript-eslint/typescript-estree': 6.21.0(typescript@5.6.2)
- '@typescript-eslint/utils': 6.21.0(eslint@8.57.1)(typescript@5.6.2)
- debug: 4.3.7(supports-color@5.5.0)
- eslint: 8.57.1
- ts-api-utils: 1.3.0(typescript@5.6.2)
+ '@typescript-eslint/typescript-estree': 6.21.0(typescript@5.5.4)
+ '@typescript-eslint/utils': 6.21.0(eslint@8.57.0)(typescript@5.5.4)
+ debug: 4.3.6(supports-color@5.5.0)
+ eslint: 8.57.0
+ ts-api-utils: 1.3.0(typescript@5.5.4)
optionalDependencies:
- typescript: 5.6.2
+ typescript: 5.5.4
transitivePeerDependencies:
- supports-color
@@ -5148,59 +5956,59 @@ snapshots:
'@typescript-eslint/types@6.21.0': {}
- '@typescript-eslint/typescript-estree@5.62.0(typescript@5.6.2)':
+ '@typescript-eslint/typescript-estree@5.62.0(typescript@5.5.4)':
dependencies:
'@typescript-eslint/types': 5.62.0
'@typescript-eslint/visitor-keys': 5.62.0
- debug: 4.3.7(supports-color@5.5.0)
+ debug: 4.3.6(supports-color@5.5.0)
globby: 11.1.0
is-glob: 4.0.3
semver: 7.6.3
- tsutils: 3.21.0(typescript@5.6.2)
+ tsutils: 3.21.0(typescript@5.5.4)
optionalDependencies:
- typescript: 5.6.2
+ typescript: 5.5.4
transitivePeerDependencies:
- supports-color
- '@typescript-eslint/typescript-estree@6.21.0(typescript@5.6.2)':
+ '@typescript-eslint/typescript-estree@6.21.0(typescript@5.5.4)':
dependencies:
'@typescript-eslint/types': 6.21.0
'@typescript-eslint/visitor-keys': 6.21.0
- debug: 4.3.7(supports-color@5.5.0)
+ debug: 4.3.6(supports-color@5.5.0)
globby: 11.1.0
is-glob: 4.0.3
minimatch: 9.0.3
semver: 7.6.3
- ts-api-utils: 1.3.0(typescript@5.6.2)
+ ts-api-utils: 1.3.0(typescript@5.5.4)
optionalDependencies:
- typescript: 5.6.2
+ typescript: 5.5.4
transitivePeerDependencies:
- supports-color
- '@typescript-eslint/utils@5.62.0(eslint@8.57.1)(typescript@5.6.2)':
+ '@typescript-eslint/utils@5.62.0(eslint@8.57.0)(typescript@5.5.4)':
dependencies:
- '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.1)
+ '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.0)
'@types/json-schema': 7.0.15
'@types/semver': 7.5.8
'@typescript-eslint/scope-manager': 5.62.0
'@typescript-eslint/types': 5.62.0
- '@typescript-eslint/typescript-estree': 5.62.0(typescript@5.6.2)
- eslint: 8.57.1
+ '@typescript-eslint/typescript-estree': 5.62.0(typescript@5.5.4)
+ eslint: 8.57.0
eslint-scope: 5.1.1
semver: 7.6.3
transitivePeerDependencies:
- supports-color
- typescript
- '@typescript-eslint/utils@6.21.0(eslint@8.57.1)(typescript@5.6.2)':
+ '@typescript-eslint/utils@6.21.0(eslint@8.57.0)(typescript@5.5.4)':
dependencies:
- '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.1)
+ '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.0)
'@types/json-schema': 7.0.15
'@types/semver': 7.5.8
'@typescript-eslint/scope-manager': 6.21.0
'@typescript-eslint/types': 6.21.0
- '@typescript-eslint/typescript-estree': 6.21.0(typescript@5.6.2)
- eslint: 8.57.1
+ '@typescript-eslint/typescript-estree': 6.21.0(typescript@5.5.4)
+ eslint: 8.57.0
semver: 7.6.3
transitivePeerDependencies:
- supports-color
@@ -5218,83 +6026,67 @@ snapshots:
'@ungap/structured-clone@1.2.0': {}
- '@vercel/style-guide@5.2.0(eslint@8.57.1)(prettier@3.3.3)(typescript@5.6.2)':
+ '@vercel/style-guide@5.2.0(eslint@8.57.0)(jest@29.7.0(@types/node@22.5.5)(ts-node@10.9.2(@types/node@22.5.5)(typescript@5.5.4)))(prettier@3.3.3)(typescript@5.5.4)':
dependencies:
'@babel/core': 7.25.2
- '@babel/eslint-parser': 7.25.1(@babel/core@7.25.2)(eslint@8.57.1)
+ '@babel/eslint-parser': 7.25.1(@babel/core@7.25.2)(eslint@8.57.0)
'@rushstack/eslint-patch': 1.10.4
'@typescript-eslint/eslint-plugin': 6.21.0(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.5.4))(eslint@8.57.0)(typescript@5.5.4)
'@typescript-eslint/parser': 6.21.0(eslint@8.57.0)(typescript@5.5.4)
eslint-config-prettier: 9.1.0(eslint@8.57.0)
- eslint-import-resolver-alias: 1.1.2(eslint-plugin-import@2.29.1(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.5.4))(eslint@8.57.0))
+ eslint-import-resolver-alias: 1.1.2(eslint-plugin-import@2.29.1(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.5.4))(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0))
eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.5.4))(eslint-plugin-import@2.29.1)(eslint@8.57.0)
eslint-plugin-eslint-comments: 3.2.0(eslint@8.57.0)
eslint-plugin-import: 2.29.1(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.5.4))(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0)
- eslint-plugin-jest: 27.9.0(@typescript-eslint/eslint-plugin@6.21.0(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.5.4))(eslint@8.57.0)(typescript@5.5.4))(eslint@8.57.0)(jest@29.7.0)(typescript@5.5.4)
+ eslint-plugin-jest: 27.9.0(@typescript-eslint/eslint-plugin@6.21.0(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.5.4))(eslint@8.57.0)(typescript@5.5.4))(eslint@8.57.0)(jest@29.7.0(@types/node@22.5.5)(ts-node@10.9.2(@types/node@22.5.5)(typescript@5.5.4)))(typescript@5.5.4)
eslint-plugin-jsx-a11y: 6.9.0(eslint@8.57.0)
- eslint-plugin-playwright: 0.16.0(eslint-plugin-jest@27.9.0(@typescript-eslint/eslint-plugin@6.21.0(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.5.4))(eslint@8.57.0)(typescript@5.5.4))(eslint@8.57.0)(jest@29.7.0)(typescript@5.5.4))(eslint@8.57.0)
+ eslint-plugin-playwright: 0.16.0(eslint-plugin-jest@27.9.0(@typescript-eslint/eslint-plugin@6.21.0(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.5.4))(eslint@8.57.0)(typescript@5.5.4))(eslint@8.57.0)(jest@29.7.0(@types/node@22.5.5)(ts-node@10.9.2(@types/node@22.5.5)(typescript@5.5.4)))(typescript@5.5.4))(eslint@8.57.0)
eslint-plugin-react: 7.35.0(eslint@8.57.0)
eslint-plugin-react-hooks: 4.6.2(eslint@8.57.0)
eslint-plugin-testing-library: 6.3.0(eslint@8.57.0)(typescript@5.5.4)
eslint-plugin-tsdoc: 0.2.17
- eslint-plugin-unicorn: 48.0.1(eslint@8.57.1)
+ eslint-plugin-unicorn: 48.0.1(eslint@8.57.0)
prettier-plugin-packagejson: 2.5.2(prettier@3.3.3)
optionalDependencies:
- eslint: 8.57.1
+ eslint: 8.57.0
prettier: 3.3.3
- typescript: 5.6.2
+ typescript: 5.5.4
transitivePeerDependencies:
- eslint-import-resolver-node
- eslint-import-resolver-webpack
- - eslint-plugin-import-x
- jest
- supports-color
- '@vitest/expect@2.1.1':
+ '@vitest/expect@2.0.5':
dependencies:
- '@vitest/spy': 2.1.1
- '@vitest/utils': 2.1.1
+ '@vitest/spy': 2.0.5
+ '@vitest/utils': 2.0.5
chai: 5.1.1
tinyrainbow: 1.2.0
- '@vitest/mocker@2.1.1(@vitest/spy@2.1.1)(vite@5.4.6(@types/node@20.16.5))':
- dependencies:
- '@vitest/spy': 2.1.1
- estree-walker: 3.0.3
- magic-string: 0.30.11
- optionalDependencies:
- vite: 5.4.6(@types/node@20.16.5)
-
- '@vitest/mocker@2.1.1(@vitest/spy@2.1.1)(vite@5.4.6(@types/node@22.5.5))':
- dependencies:
- '@vitest/spy': 2.1.1
- estree-walker: 3.0.3
- magic-string: 0.30.11
- optionalDependencies:
- vite: 5.4.6(@types/node@22.5.5)
-
- '@vitest/pretty-format@2.1.1':
+ '@vitest/pretty-format@2.0.5':
dependencies:
tinyrainbow: 1.2.0
- '@vitest/runner@2.1.1':
+ '@vitest/runner@2.0.5':
dependencies:
- '@vitest/utils': 2.1.1
+ '@vitest/utils': 2.0.5
pathe: 1.1.2
- '@vitest/snapshot@2.1.1':
+ '@vitest/snapshot@2.0.5':
dependencies:
- '@vitest/pretty-format': 2.1.1
+ '@vitest/pretty-format': 2.0.5
magic-string: 0.30.11
pathe: 1.1.2
- '@vitest/spy@2.1.1':
+ '@vitest/spy@2.0.5':
dependencies:
tinyspy: 3.0.2
- '@vitest/utils@2.1.1':
+ '@vitest/utils@2.0.5':
dependencies:
- '@vitest/pretty-format': 2.1.1
+ '@vitest/pretty-format': 2.0.5
+ estree-walker: 3.0.3
loupe: 3.1.1
tinyrainbow: 1.2.0
@@ -5307,21 +6099,21 @@ snapshots:
fs-extra: 10.1.0
yargs: 17.7.2
- abitype@1.0.5(typescript@5.6.2)(zod@3.23.8):
+ abitype@1.0.5(typescript@5.5.4)(zod@3.23.8):
optionalDependencies:
- typescript: 5.6.2
+ typescript: 5.5.4
zod: 3.23.8
acorn-globals@7.0.1:
dependencies:
acorn: 8.12.1
- acorn-walk: 8.3.4
+ acorn-walk: 8.3.3
acorn-jsx@5.3.2(acorn@8.12.1):
dependencies:
acorn: 8.12.1
- acorn-walk@8.3.4:
+ acorn-walk@8.3.3:
dependencies:
acorn: 8.12.1
@@ -5329,7 +6121,7 @@ snapshots:
agent-base@6.0.2:
dependencies:
- debug: 4.3.7(supports-color@5.5.0)
+ debug: 4.3.6(supports-color@5.5.0)
transitivePeerDependencies:
- supports-color
@@ -5342,9 +6134,14 @@ snapshots:
ansi-colors@4.1.3: {}
+ ansi-escapes@4.3.2:
+ dependencies:
+ type-fest: 0.21.3
+ optional: true
+
ansi-regex@5.0.1: {}
- ansi-regex@6.1.0: {}
+ ansi-regex@6.0.1: {}
ansi-styles@3.2.1:
dependencies:
@@ -5383,8 +6180,6 @@ snapshots:
dependencies:
dequal: 2.0.3
- aria-query@5.3.1: {}
-
array-buffer-byte-length@1.0.1:
dependencies:
call-bind: 1.0.7
@@ -5466,7 +6261,69 @@ snapshots:
axe-core@4.10.0: {}
- axobject-query@4.1.0: {}
+ axobject-query@3.1.1:
+ dependencies:
+ deep-equal: 2.2.3
+
+ babel-jest@29.7.0(@babel/core@7.25.2):
+ dependencies:
+ '@babel/core': 7.25.2
+ '@jest/transform': 29.7.0
+ '@types/babel__core': 7.20.5
+ babel-plugin-istanbul: 6.1.1
+ babel-preset-jest: 29.6.3(@babel/core@7.25.2)
+ chalk: 4.1.2
+ graceful-fs: 4.2.11
+ slash: 3.0.0
+ transitivePeerDependencies:
+ - supports-color
+ optional: true
+
+ babel-plugin-istanbul@6.1.1:
+ dependencies:
+ '@babel/helper-plugin-utils': 7.24.8
+ '@istanbuljs/load-nyc-config': 1.1.0
+ '@istanbuljs/schema': 0.1.3
+ istanbul-lib-instrument: 5.2.1
+ test-exclude: 6.0.0
+ transitivePeerDependencies:
+ - supports-color
+ optional: true
+
+ babel-plugin-jest-hoist@29.6.3:
+ dependencies:
+ '@babel/template': 7.25.0
+ '@babel/types': 7.25.4
+ '@types/babel__core': 7.20.5
+ '@types/babel__traverse': 7.20.6
+ optional: true
+
+ babel-preset-current-node-syntax@1.1.0(@babel/core@7.25.2):
+ dependencies:
+ '@babel/core': 7.25.2
+ '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.25.2)
+ '@babel/plugin-syntax-bigint': 7.8.3(@babel/core@7.25.2)
+ '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.25.2)
+ '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.25.2)
+ '@babel/plugin-syntax-import-attributes': 7.24.7(@babel/core@7.25.2)
+ '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.25.2)
+ '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.25.2)
+ '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.25.2)
+ '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.25.2)
+ '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.25.2)
+ '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.25.2)
+ '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.25.2)
+ '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.25.2)
+ '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.25.2)
+ '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.25.2)
+ optional: true
+
+ babel-preset-jest@29.6.3(@babel/core@7.25.2):
+ dependencies:
+ '@babel/core': 7.25.2
+ babel-plugin-jest-hoist: 29.6.3
+ babel-preset-current-node-syntax: 1.1.0(@babel/core@7.25.2)
+ optional: true
balanced-match@1.0.2: {}
@@ -5493,33 +6350,41 @@ snapshots:
browserslist@4.23.3:
dependencies:
- caniuse-lite: 1.0.30001660
- electron-to-chromium: 1.5.25
+ caniuse-lite: 1.0.30001651
+ electron-to-chromium: 1.5.13
node-releases: 2.0.18
update-browserslist-db: 1.1.0(browserslist@4.23.3)
+ bser@2.1.1:
+ dependencies:
+ node-int64: 0.4.0
+ optional: true
+
+ buffer-from@1.1.2:
+ optional: true
+
builtin-modules@3.3.0: {}
- bun-types@1.1.27:
+ bun-types@1.1.25:
dependencies:
'@types/node': 20.12.14
'@types/ws': 8.5.12
- bun-types@1.1.28:
+ bun-types@1.1.26:
dependencies:
'@types/node': 20.12.14
'@types/ws': 8.5.12
- bun@1.1.28:
+ bun@1.1.25:
optionalDependencies:
- '@oven/bun-darwin-aarch64': 1.1.28
- '@oven/bun-darwin-x64': 1.1.28
- '@oven/bun-darwin-x64-baseline': 1.1.28
- '@oven/bun-linux-aarch64': 1.1.28
- '@oven/bun-linux-x64': 1.1.28
- '@oven/bun-linux-x64-baseline': 1.1.28
- '@oven/bun-windows-x64': 1.1.28
- '@oven/bun-windows-x64-baseline': 1.1.28
+ '@oven/bun-darwin-aarch64': 1.1.25
+ '@oven/bun-darwin-x64': 1.1.25
+ '@oven/bun-darwin-x64-baseline': 1.1.25
+ '@oven/bun-linux-aarch64': 1.1.25
+ '@oven/bun-linux-x64': 1.1.25
+ '@oven/bun-linux-x64-baseline': 1.1.25
+ '@oven/bun-windows-x64': 1.1.25
+ '@oven/bun-windows-x64-baseline': 1.1.25
bundle-require@5.0.0(esbuild@0.23.1):
dependencies:
@@ -5538,9 +6403,12 @@ snapshots:
callsites@3.1.0: {}
+ camelcase@5.3.1:
+ optional: true
+
camelcase@6.3.0: {}
- caniuse-lite@1.0.30001660: {}
+ caniuse-lite@1.0.30001651: {}
cardinal@2.1.1:
dependencies:
@@ -5571,6 +6439,9 @@ snapshots:
ansi-styles: 4.3.0
supports-color: 7.2.0
+ char-regex@1.0.2:
+ optional: true
+
chardet@0.7.0: {}
check-error@2.1.1: {}
@@ -5589,6 +6460,9 @@ snapshots:
ci-info@3.9.0: {}
+ cjs-module-lexer@1.3.1:
+ optional: true
+
clean-regexp@1.0.0:
dependencies:
escape-string-regexp: 1.0.5
@@ -5605,6 +6479,12 @@ snapshots:
strip-ansi: 6.0.1
wrap-ansi: 7.0.0
+ co@4.6.0:
+ optional: true
+
+ collect-v8-coverage@1.0.2:
+ optional: true
+
color-convert@1.9.3:
dependencies:
color-name: 1.1.3
@@ -5648,13 +6528,13 @@ snapshots:
convert-source-map@2.0.0: {}
- create-jest@29.7.0(@types/node@20.16.1)(ts-node@10.9.2(@types/node@20.16.1)(typescript@5.5.4)):
+ create-jest@29.7.0(@types/node@22.5.5)(ts-node@10.9.2(@types/node@22.5.5)(typescript@5.5.4)):
dependencies:
'@jest/types': 29.6.3
chalk: 4.1.2
exit: 0.1.2
graceful-fs: 4.2.11
- jest-config: 29.7.0(@types/node@20.16.1)(ts-node@10.9.2(@types/node@20.16.1)(typescript@5.5.4))
+ jest-config: 29.7.0(@types/node@22.5.5)(ts-node@10.9.2(@types/node@22.5.5)(typescript@5.5.4))
jest-util: 29.7.0
prompts: 2.4.2
transitivePeerDependencies:
@@ -5662,6 +6542,7 @@ snapshots:
- babel-plugin-macros
- supports-color
- ts-node
+ optional: true
create-require@1.1.1: {}
@@ -5721,15 +6602,15 @@ snapshots:
dependencies:
ms: 2.1.3
- debug@4.3.7(supports-color@5.5.0):
+ debug@4.3.6(supports-color@5.5.0):
dependencies:
- ms: 2.1.3
+ ms: 2.1.2
optionalDependencies:
supports-color: 5.5.0
- debug@4.3.7(supports-color@8.1.1):
+ debug@4.3.6(supports-color@8.1.1):
dependencies:
- ms: 2.1.3
+ ms: 2.1.2
optionalDependencies:
supports-color: 8.1.1
@@ -5737,6 +6618,9 @@ snapshots:
decimal.js@10.4.3: {}
+ dedent@1.5.3:
+ optional: true
+
deep-eql@5.0.2: {}
deep-equal@2.2.3:
@@ -5762,6 +6646,9 @@ snapshots:
deep-is@0.1.4: {}
+ deepmerge@4.3.1:
+ optional: true
+
define-data-property@1.1.4:
dependencies:
es-define-property: 1.0.0
@@ -5782,8 +6669,14 @@ snapshots:
detect-indent@7.0.1: {}
+ detect-newline@3.1.0:
+ optional: true
+
detect-newline@4.0.1: {}
+ diff-sequences@29.6.3:
+ optional: true
+
diff@4.0.2: {}
diff@5.2.0: {}
@@ -5823,7 +6716,10 @@ snapshots:
eastasianwidth@0.2.0: {}
- electron-to-chromium@1.5.25: {}
+ electron-to-chromium@1.5.13: {}
+
+ emittery@0.13.1:
+ optional: true
emoji-regex@8.0.0: {}
@@ -6030,7 +6926,7 @@ snapshots:
'@esbuild/win32-ia32': 0.23.1
'@esbuild/win32-x64': 0.23.1
- escalade@3.2.0: {}
+ escalade@3.1.2: {}
escape-string-regexp@1.0.5: {}
@@ -6046,18 +6942,18 @@ snapshots:
optionalDependencies:
source-map: 0.6.1
- eslint-config-prettier@9.1.0(eslint@8.57.1):
+ eslint-config-prettier@9.1.0(eslint@8.57.0):
dependencies:
- eslint: 8.57.1
+ eslint: 8.57.0
- eslint-config-turbo@2.1.2(eslint@8.57.1):
+ eslint-config-turbo@2.1.2(eslint@8.57.0):
dependencies:
- eslint: 8.57.1
- eslint-plugin-turbo: 2.1.2(eslint@8.57.1)
+ eslint: 8.57.0
+ eslint-plugin-turbo: 2.1.2(eslint@8.57.0)
eslint-import-resolver-alias@1.1.2(eslint-plugin-import@2.29.1(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.5.4))(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0)):
dependencies:
- eslint-plugin-import: 2.30.0(@typescript-eslint/parser@6.21.0(eslint@8.57.1)(typescript@5.6.2))(eslint-import-resolver-typescript@3.6.3)(eslint@8.57.1)
+ eslint-plugin-import: 2.29.1(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.5.4))(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0)
eslint-import-resolver-node@0.3.9:
dependencies:
@@ -6067,54 +6963,51 @@ snapshots:
transitivePeerDependencies:
- supports-color
- eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@6.21.0(eslint@8.57.1)(typescript@5.6.2))(eslint-plugin-import@2.30.0)(eslint@8.57.1):
+ eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.5.4))(eslint-plugin-import@2.29.1)(eslint@8.57.0):
dependencies:
- '@nolyfill/is-core-module': 1.0.39
- debug: 4.3.7(supports-color@5.5.0)
+ debug: 4.3.6(supports-color@5.5.0)
enhanced-resolve: 5.17.1
- eslint: 8.57.1
- eslint-module-utils: 2.11.0(@typescript-eslint/parser@6.21.0(eslint@8.57.1)(typescript@5.6.2))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@6.21.0(eslint@8.57.1)(typescript@5.6.2))(eslint-plugin-import@2.30.0)(eslint@8.57.1))(eslint@8.57.1)
+ eslint: 8.57.0
+ eslint-module-utils: 2.8.1(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.5.4))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.5.4))(eslint-plugin-import@2.29.1)(eslint@8.57.0))(eslint@8.57.0)
+ eslint-plugin-import: 2.29.1(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.5.4))(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0)
fast-glob: 3.3.2
- get-tsconfig: 4.8.1
- is-bun-module: 1.2.1
+ get-tsconfig: 4.7.6
+ is-core-module: 2.15.1
is-glob: 4.0.3
- optionalDependencies:
- eslint-plugin-import: 2.30.0(@typescript-eslint/parser@6.21.0(eslint@8.57.1)(typescript@5.6.2))(eslint-import-resolver-typescript@3.6.3)(eslint@8.57.1)
transitivePeerDependencies:
- '@typescript-eslint/parser'
- eslint-import-resolver-node
- eslint-import-resolver-webpack
- supports-color
- eslint-module-utils@2.11.0(@typescript-eslint/parser@6.21.0(eslint@8.57.1)(typescript@5.6.2))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@6.21.0(eslint@8.57.1)(typescript@5.6.2))(eslint-plugin-import@2.30.0)(eslint@8.57.1))(eslint@8.57.1):
+ eslint-module-utils@2.8.1(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.5.4))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.5.4))(eslint-plugin-import@2.29.1)(eslint@8.57.0))(eslint@8.57.0):
dependencies:
debug: 3.2.7
optionalDependencies:
- '@typescript-eslint/parser': 6.21.0(eslint@8.57.1)(typescript@5.6.2)
- eslint: 8.57.1
+ '@typescript-eslint/parser': 6.21.0(eslint@8.57.0)(typescript@5.5.4)
+ eslint: 8.57.0
eslint-import-resolver-node: 0.3.9
- eslint-import-resolver-typescript: 3.6.3(@typescript-eslint/parser@6.21.0(eslint@8.57.1)(typescript@5.6.2))(eslint-plugin-import@2.30.0)(eslint@8.57.1)
+ eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.5.4))(eslint-plugin-import@2.29.1)(eslint@8.57.0)
transitivePeerDependencies:
- supports-color
- eslint-plugin-eslint-comments@3.2.0(eslint@8.57.1):
+ eslint-plugin-eslint-comments@3.2.0(eslint@8.57.0):
dependencies:
escape-string-regexp: 1.0.5
- eslint: 8.57.1
+ eslint: 8.57.0
ignore: 5.3.2
- eslint-plugin-import@2.30.0(@typescript-eslint/parser@6.21.0(eslint@8.57.1)(typescript@5.6.2))(eslint-import-resolver-typescript@3.6.3)(eslint@8.57.1):
+ eslint-plugin-import@2.29.1(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.5.4))(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0):
dependencies:
- '@rtsao/scc': 1.1.0
array-includes: 3.1.8
array.prototype.findlastindex: 1.2.5
array.prototype.flat: 1.3.2
array.prototype.flatmap: 1.3.2
debug: 3.2.7
doctrine: 2.1.0
- eslint: 8.57.1
+ eslint: 8.57.0
eslint-import-resolver-node: 0.3.9
- eslint-module-utils: 2.11.0(@typescript-eslint/parser@6.21.0(eslint@8.57.1)(typescript@5.6.2))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@6.21.0(eslint@8.57.1)(typescript@5.6.2))(eslint-plugin-import@2.30.0)(eslint@8.57.1))(eslint@8.57.1)
+ eslint-module-utils: 2.8.1(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.5.4))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.5.4))(eslint-plugin-import@2.29.1)(eslint@8.57.0))(eslint@8.57.0)
hasown: 2.0.2
is-core-module: 2.15.1
is-glob: 4.0.3
@@ -6125,35 +7018,35 @@ snapshots:
semver: 6.3.1
tsconfig-paths: 3.15.0
optionalDependencies:
- '@typescript-eslint/parser': 6.21.0(eslint@8.57.1)(typescript@5.6.2)
+ '@typescript-eslint/parser': 6.21.0(eslint@8.57.0)(typescript@5.5.4)
transitivePeerDependencies:
- eslint-import-resolver-typescript
- eslint-import-resolver-webpack
- supports-color
- eslint-plugin-jest@27.9.0(@typescript-eslint/eslint-plugin@6.21.0(@typescript-eslint/parser@6.21.0(eslint@8.57.1)(typescript@5.6.2))(eslint@8.57.1)(typescript@5.6.2))(eslint@8.57.1)(typescript@5.6.2):
+ eslint-plugin-jest@27.9.0(@typescript-eslint/eslint-plugin@6.21.0(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.5.4))(eslint@8.57.0)(typescript@5.5.4))(eslint@8.57.0)(jest@29.7.0(@types/node@22.5.5)(ts-node@10.9.2(@types/node@22.5.5)(typescript@5.5.4)))(typescript@5.5.4):
dependencies:
- '@typescript-eslint/utils': 5.62.0(eslint@8.57.1)(typescript@5.6.2)
- eslint: 8.57.1
+ '@typescript-eslint/utils': 5.62.0(eslint@8.57.0)(typescript@5.5.4)
+ eslint: 8.57.0
optionalDependencies:
'@typescript-eslint/eslint-plugin': 6.21.0(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.5.4))(eslint@8.57.0)(typescript@5.5.4)
- jest: 29.7.0
+ jest: 29.7.0(@types/node@22.5.5)(ts-node@10.9.2(@types/node@22.5.5)(typescript@5.5.4))
transitivePeerDependencies:
- supports-color
- typescript
- eslint-plugin-jsx-a11y@6.10.0(eslint@8.57.1):
+ eslint-plugin-jsx-a11y@6.9.0(eslint@8.57.0):
dependencies:
aria-query: 5.1.3
array-includes: 3.1.8
array.prototype.flatmap: 1.3.2
ast-types-flow: 0.0.8
axe-core: 4.10.0
- axobject-query: 4.1.0
+ axobject-query: 3.1.1
damerau-levenshtein: 1.0.8
emoji-regex: 9.2.2
es-iterator-helpers: 1.0.19
- eslint: 8.57.1
+ eslint: 8.57.0
hasown: 2.0.2
jsx-ast-utils: 3.3.5
language-tags: 1.0.9
@@ -6162,26 +7055,26 @@ snapshots:
safe-regex-test: 1.0.3
string.prototype.includes: 2.0.0
- eslint-plugin-mocha@10.5.0(eslint@8.57.1):
+ eslint-plugin-mocha@10.5.0(eslint@8.57.0):
dependencies:
- eslint: 8.57.1
- eslint-utils: 3.0.0(eslint@8.57.1)
+ eslint: 8.57.0
+ eslint-utils: 3.0.0(eslint@8.57.0)
globals: 13.24.0
rambda: 7.5.0
eslint-plugin-only-warn@1.1.0: {}
- eslint-plugin-playwright@0.16.0(eslint-plugin-jest@27.9.0(@typescript-eslint/eslint-plugin@6.21.0(@typescript-eslint/parser@6.21.0(eslint@8.57.1)(typescript@5.6.2))(eslint@8.57.1)(typescript@5.6.2))(eslint@8.57.1)(typescript@5.6.2))(eslint@8.57.1):
+ eslint-plugin-playwright@0.16.0(eslint-plugin-jest@27.9.0(@typescript-eslint/eslint-plugin@6.21.0(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.5.4))(eslint@8.57.0)(typescript@5.5.4))(eslint@8.57.0)(jest@29.7.0(@types/node@22.5.5)(ts-node@10.9.2(@types/node@22.5.5)(typescript@5.5.4)))(typescript@5.5.4))(eslint@8.57.0):
dependencies:
- eslint: 8.57.1
+ eslint: 8.57.0
optionalDependencies:
- eslint-plugin-jest: 27.9.0(@typescript-eslint/eslint-plugin@6.21.0(@typescript-eslint/parser@6.21.0(eslint@8.57.1)(typescript@5.6.2))(eslint@8.57.1)(typescript@5.6.2))(eslint@8.57.1)(typescript@5.6.2)
+ eslint-plugin-jest: 27.9.0(@typescript-eslint/eslint-plugin@6.21.0(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.5.4))(eslint@8.57.0)(typescript@5.5.4))(eslint@8.57.0)(jest@29.7.0(@types/node@22.5.5)(ts-node@10.9.2(@types/node@22.5.5)(typescript@5.5.4)))(typescript@5.5.4)
- eslint-plugin-react-hooks@4.6.2(eslint@8.57.1):
+ eslint-plugin-react-hooks@4.6.2(eslint@8.57.0):
dependencies:
- eslint: 8.57.1
+ eslint: 8.57.0
- eslint-plugin-react@7.36.1(eslint@8.57.1):
+ eslint-plugin-react@7.35.0(eslint@8.57.0):
dependencies:
array-includes: 3.1.8
array.prototype.findlast: 1.2.5
@@ -6189,7 +7082,7 @@ snapshots:
array.prototype.tosorted: 1.1.4
doctrine: 2.1.0
es-iterator-helpers: 1.0.19
- eslint: 8.57.1
+ eslint: 8.57.0
estraverse: 5.3.0
hasown: 2.0.2
jsx-ast-utils: 3.3.5
@@ -6203,10 +7096,10 @@ snapshots:
string.prototype.matchall: 4.0.11
string.prototype.repeat: 1.0.0
- eslint-plugin-testing-library@6.3.0(eslint@8.57.1)(typescript@5.6.2):
+ eslint-plugin-testing-library@6.3.0(eslint@8.57.0)(typescript@5.5.4):
dependencies:
- '@typescript-eslint/utils': 5.62.0(eslint@8.57.1)(typescript@5.6.2)
- eslint: 8.57.1
+ '@typescript-eslint/utils': 5.62.0(eslint@8.57.0)(typescript@5.5.4)
+ eslint: 8.57.0
transitivePeerDependencies:
- supports-color
- typescript
@@ -6216,18 +7109,18 @@ snapshots:
'@microsoft/tsdoc': 0.14.2
'@microsoft/tsdoc-config': 0.16.2
- eslint-plugin-turbo@2.1.2(eslint@8.57.1):
+ eslint-plugin-turbo@2.1.2(eslint@8.57.0):
dependencies:
dotenv: 16.0.3
- eslint: 8.57.1
+ eslint: 8.57.0
- eslint-plugin-unicorn@48.0.1(eslint@8.57.1):
+ eslint-plugin-unicorn@48.0.1(eslint@8.57.0):
dependencies:
'@babel/helper-validator-identifier': 7.24.7
- '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.1)
+ '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.0)
ci-info: 3.9.0
clean-regexp: 1.0.0
- eslint: 8.57.1
+ eslint: 8.57.0
esquery: 1.6.0
indent-string: 4.0.0
is-builtin-module: 3.2.1
@@ -6240,12 +7133,12 @@ snapshots:
semver: 7.6.3
strip-indent: 3.0.0
- eslint-plugin-unused-imports@3.2.0(@typescript-eslint/eslint-plugin@6.21.0(@typescript-eslint/parser@6.21.0(eslint@8.57.1)(typescript@5.6.2))(eslint@8.57.1)(typescript@5.6.2))(eslint@8.57.1):
+ eslint-plugin-unused-imports@3.2.0(@typescript-eslint/eslint-plugin@6.21.0(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.5.4))(eslint@8.57.0)(typescript@5.5.4))(eslint@8.57.0):
dependencies:
- eslint: 8.57.1
+ eslint: 8.57.0
eslint-rule-composer: 0.3.0
optionalDependencies:
- '@typescript-eslint/eslint-plugin': 6.21.0(@typescript-eslint/parser@6.21.0(eslint@8.57.1)(typescript@5.6.2))(eslint@8.57.1)(typescript@5.6.2)
+ '@typescript-eslint/eslint-plugin': 6.21.0(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.5.4))(eslint@8.57.0)(typescript@5.5.4)
eslint-rule-composer@0.3.0: {}
@@ -6259,29 +7152,29 @@ snapshots:
esrecurse: 4.3.0
estraverse: 5.3.0
- eslint-utils@3.0.0(eslint@8.57.1):
+ eslint-utils@3.0.0(eslint@8.57.0):
dependencies:
- eslint: 8.57.1
+ eslint: 8.57.0
eslint-visitor-keys: 2.1.0
eslint-visitor-keys@2.1.0: {}
eslint-visitor-keys@3.4.3: {}
- eslint@8.57.1:
+ eslint@8.57.0:
dependencies:
- '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.1)
- '@eslint-community/regexpp': 4.11.1
+ '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.0)
+ '@eslint-community/regexpp': 4.11.0
'@eslint/eslintrc': 2.1.4
- '@eslint/js': 8.57.1
- '@humanwhocodes/config-array': 0.13.0
+ '@eslint/js': 8.57.0
+ '@humanwhocodes/config-array': 0.11.14
'@humanwhocodes/module-importer': 1.0.1
'@nodelib/fs.walk': 1.2.8
'@ungap/structured-clone': 1.2.0
ajv: 6.12.6
chalk: 4.1.2
cross-spawn: 7.0.3
- debug: 4.3.7(supports-color@5.5.0)
+ debug: 4.3.6(supports-color@5.5.0)
doctrine: 3.0.0
escape-string-regexp: 4.0.0
eslint-scope: 7.2.2
@@ -6333,7 +7226,7 @@ snapshots:
estree-walker@3.0.3:
dependencies:
- '@types/estree': 1.0.6
+ '@types/estree': 1.0.5
esutils@2.0.3: {}
@@ -6351,6 +7244,30 @@ snapshots:
signal-exit: 3.0.7
strip-final-newline: 2.0.0
+ execa@8.0.1:
+ dependencies:
+ cross-spawn: 7.0.3
+ get-stream: 8.0.1
+ human-signals: 5.0.0
+ is-stream: 3.0.0
+ merge-stream: 2.0.0
+ npm-run-path: 5.3.0
+ onetime: 6.0.0
+ signal-exit: 4.1.0
+ strip-final-newline: 3.0.0
+
+ exit@0.1.2:
+ optional: true
+
+ expect@29.7.0:
+ dependencies:
+ '@jest/expect-utils': 29.7.0
+ jest-get-type: 29.6.3
+ jest-matcher-utils: 29.7.0
+ jest-message-util: 29.7.0
+ jest-util: 29.7.0
+ optional: true
+
extendable-error@0.1.7: {}
external-editor@3.1.0:
@@ -6377,9 +7294,10 @@ snapshots:
dependencies:
reusify: 1.0.4
- fdir@6.3.0(picomatch@4.0.2):
- optionalDependencies:
- picomatch: 4.0.2
+ fb-watchman@2.0.2:
+ dependencies:
+ bser: 2.1.1
+ optional: true
fecha@4.2.3: {}
@@ -6411,6 +7329,11 @@ snapshots:
locate-path: 6.0.0
path-exists: 4.0.0
+ find-yarn-workspace-root2@1.2.16:
+ dependencies:
+ micromatch: 4.0.8
+ pkg-dir: 4.2.0
+
flat-cache@3.2.0:
dependencies:
flatted: 3.3.1
@@ -6490,6 +7413,9 @@ snapshots:
has-symbols: 1.0.3
hasown: 2.0.2
+ get-package-type@0.1.0:
+ optional: true
+
get-starknet-core@3.3.3(starknet@6.11.0):
dependencies:
'@module-federation/runtime': 0.1.21
@@ -6503,13 +7429,15 @@ snapshots:
get-stream@6.0.1: {}
+ get-stream@8.0.1: {}
+
get-symbol-description@1.0.2:
dependencies:
call-bind: 1.0.7
es-errors: 1.3.0
get-intrinsic: 1.2.4
- get-tsconfig@4.8.1:
+ get-tsconfig@4.7.6:
dependencies:
resolve-pkg-maps: 1.0.0
@@ -6615,18 +7543,21 @@ snapshots:
dependencies:
whatwg-encoding: 2.0.0
+ html-escaper@2.0.2:
+ optional: true
+
http-proxy-agent@5.0.0:
dependencies:
'@tootallnate/once': 2.0.0
agent-base: 6.0.2
- debug: 4.3.7(supports-color@5.5.0)
+ debug: 4.3.6(supports-color@5.5.0)
transitivePeerDependencies:
- supports-color
https-proxy-agent@5.0.1:
dependencies:
agent-base: 6.0.2
- debug: 4.3.7(supports-color@5.5.0)
+ debug: 4.3.6(supports-color@5.5.0)
transitivePeerDependencies:
- supports-color
@@ -6634,6 +7565,8 @@ snapshots:
human-signals@2.1.0: {}
+ human-signals@5.0.0: {}
+
iconv-lite@0.4.24:
dependencies:
safer-buffer: 2.1.2
@@ -6653,6 +7586,12 @@ snapshots:
parent-module: 1.0.1
resolve-from: 4.0.0
+ import-local@3.2.0:
+ dependencies:
+ pkg-dir: 4.2.0
+ resolve-cwd: 3.0.0
+ optional: true
+
imurmurhash@0.1.4: {}
indent-string@4.0.0: {}
@@ -6705,10 +7644,6 @@ snapshots:
dependencies:
builtin-modules: 3.3.0
- is-bun-module@1.2.1:
- dependencies:
- semver: 7.6.3
-
is-callable@1.2.7: {}
is-core-module@2.15.1:
@@ -6731,6 +7666,9 @@ snapshots:
is-fullwidth-code-point@3.0.0: {}
+ is-generator-fn@2.1.0:
+ optional: true
+
is-generator-function@1.0.10:
dependencies:
has-tostringtag: 1.0.2
@@ -6770,6 +7708,8 @@ snapshots:
is-stream@2.0.1: {}
+ is-stream@3.0.0: {}
+
is-string@1.0.7:
dependencies:
has-tostringtag: 1.0.2
@@ -6816,8 +7756,55 @@ snapshots:
dependencies:
ws: 8.17.1
- iterator.prototype@1.1.2:
- dependencies:
+ istanbul-lib-coverage@3.2.2:
+ optional: true
+
+ istanbul-lib-instrument@5.2.1:
+ dependencies:
+ '@babel/core': 7.25.2
+ '@babel/parser': 7.25.4
+ '@istanbuljs/schema': 0.1.3
+ istanbul-lib-coverage: 3.2.2
+ semver: 6.3.1
+ transitivePeerDependencies:
+ - supports-color
+ optional: true
+
+ istanbul-lib-instrument@6.0.3:
+ dependencies:
+ '@babel/core': 7.25.2
+ '@babel/parser': 7.25.4
+ '@istanbuljs/schema': 0.1.3
+ istanbul-lib-coverage: 3.2.2
+ semver: 7.6.3
+ transitivePeerDependencies:
+ - supports-color
+ optional: true
+
+ istanbul-lib-report@3.0.1:
+ dependencies:
+ istanbul-lib-coverage: 3.2.2
+ make-dir: 4.0.0
+ supports-color: 7.2.0
+ optional: true
+
+ istanbul-lib-source-maps@4.0.1:
+ dependencies:
+ debug: 4.3.6(supports-color@5.5.0)
+ istanbul-lib-coverage: 3.2.2
+ source-map: 0.6.1
+ transitivePeerDependencies:
+ - supports-color
+ optional: true
+
+ istanbul-reports@3.1.7:
+ dependencies:
+ html-escaper: 2.0.2
+ istanbul-lib-report: 3.0.1
+ optional: true
+
+ iterator.prototype@1.1.2:
+ dependencies:
define-properties: 1.2.1
get-intrinsic: 1.2.4
has-symbols: 1.0.3
@@ -6830,18 +7817,12 @@ snapshots:
optionalDependencies:
'@pkgjs/parseargs': 0.11.0
- jake@10.9.2:
- dependencies:
- async: 3.2.6
- chalk: 4.1.2
- filelist: 1.0.4
- minimatch: 3.1.2
-
jest-changed-files@29.7.0:
dependencies:
execa: 5.1.1
jest-util: 29.7.0
p-limit: 3.1.0
+ optional: true
jest-circus@29.7.0:
dependencies:
@@ -6849,7 +7830,7 @@ snapshots:
'@jest/expect': 29.7.0
'@jest/test-result': 29.7.0
'@jest/types': 29.6.3
- '@types/node': 20.16.1
+ '@types/node': 22.5.5
chalk: 4.1.2
co: 4.6.0
dedent: 1.5.3
@@ -6868,37 +7849,18 @@ snapshots:
transitivePeerDependencies:
- babel-plugin-macros
- supports-color
-
- jest-cli@29.7.0:
- dependencies:
- '@jest/core': 29.7.0(ts-node@10.9.2(@types/node@20.16.1)(typescript@5.5.4))
- '@jest/test-result': 29.7.0
- '@jest/types': 29.6.3
- chalk: 4.1.2
- create-jest: 29.7.0(@types/node@20.16.1)(ts-node@10.9.2(@types/node@20.16.1)(typescript@5.5.4))
- exit: 0.1.2
- import-local: 3.2.0
- jest-config: 29.7.0(@types/node@20.16.1)(ts-node@10.9.2(@types/node@20.16.1)(typescript@5.5.4))
- jest-util: 29.7.0
- jest-validate: 29.7.0
- yargs: 17.7.2
- transitivePeerDependencies:
- - '@types/node'
- - babel-plugin-macros
- - supports-color
- - ts-node
optional: true
- jest-cli@29.7.0(@types/node@20.16.1)(ts-node@10.9.2(@types/node@20.16.1)(typescript@5.5.4)):
+ jest-cli@29.7.0(@types/node@22.5.5)(ts-node@10.9.2(@types/node@22.5.5)(typescript@5.5.4)):
dependencies:
- '@jest/core': 29.7.0(ts-node@10.9.2(@types/node@20.16.1)(typescript@5.5.4))
+ '@jest/core': 29.7.0(ts-node@10.9.2(@types/node@22.5.5)(typescript@5.5.4))
'@jest/test-result': 29.7.0
'@jest/types': 29.6.3
chalk: 4.1.2
- create-jest: 29.7.0(@types/node@20.16.1)(ts-node@10.9.2(@types/node@20.16.1)(typescript@5.5.4))
+ create-jest: 29.7.0(@types/node@22.5.5)(ts-node@10.9.2(@types/node@22.5.5)(typescript@5.5.4))
exit: 0.1.2
import-local: 3.2.0
- jest-config: 29.7.0(@types/node@20.16.1)(ts-node@10.9.2(@types/node@20.16.1)(typescript@5.5.4))
+ jest-config: 29.7.0(@types/node@22.5.5)(ts-node@10.9.2(@types/node@22.5.5)(typescript@5.5.4))
jest-util: 29.7.0
jest-validate: 29.7.0
yargs: 17.7.2
@@ -6907,58 +7869,9 @@ snapshots:
- babel-plugin-macros
- supports-color
- ts-node
+ optional: true
- jest-cli@29.7.0(@types/node@22.5.5):
- dependencies:
- '@jest/core': 29.7.0(ts-node@10.9.2(@types/node@20.16.1)(typescript@5.5.4))
- '@jest/test-result': 29.7.0
- '@jest/types': 29.6.3
- chalk: 4.1.2
- create-jest: 29.7.0(@types/node@22.5.5)
- exit: 0.1.2
- import-local: 3.2.0
- jest-config: 29.7.0(@types/node@22.5.5)
- jest-util: 29.7.0
- jest-validate: 29.7.0
- yargs: 17.7.2
- transitivePeerDependencies:
- - '@types/node'
- - babel-plugin-macros
- - supports-color
- - ts-node
-
- jest-config@29.7.0(@types/node@20.16.1)(ts-node@10.9.2(@types/node@20.16.1)(typescript@5.5.4)):
- dependencies:
- '@babel/core': 7.25.2
- '@jest/test-sequencer': 29.7.0
- '@jest/types': 29.6.3
- babel-jest: 29.7.0(@babel/core@7.25.2)
- chalk: 4.1.2
- ci-info: 3.9.0
- deepmerge: 4.3.1
- glob: 7.2.3
- graceful-fs: 4.2.11
- jest-circus: 29.7.0
- jest-environment-node: 29.7.0
- jest-get-type: 29.6.3
- jest-regex-util: 29.6.3
- jest-resolve: 29.7.0
- jest-runner: 29.7.0
- jest-util: 29.7.0
- jest-validate: 29.7.0
- micromatch: 4.0.8
- parse-json: 5.2.0
- pretty-format: 29.7.0
- slash: 3.0.0
- strip-json-comments: 3.1.1
- optionalDependencies:
- '@types/node': 20.16.1
- ts-node: 10.9.2(@types/node@20.16.1)(typescript@5.5.4)
- transitivePeerDependencies:
- - babel-plugin-macros
- - supports-color
-
- jest-config@29.7.0(@types/node@22.5.5):
+ jest-config@29.7.0(@types/node@22.5.5)(ts-node@10.9.2(@types/node@22.5.5)(typescript@5.5.4)):
dependencies:
'@babel/core': 7.25.2
'@jest/test-sequencer': 29.7.0
@@ -6984,9 +7897,11 @@ snapshots:
strip-json-comments: 3.1.1
optionalDependencies:
'@types/node': 22.5.5
+ ts-node: 10.9.2(@types/node@22.5.5)(typescript@5.5.4)
transitivePeerDependencies:
- babel-plugin-macros
- supports-color
+ optional: true
jest-diff@29.7.0:
dependencies:
@@ -6994,10 +7909,12 @@ snapshots:
diff-sequences: 29.6.3
jest-get-type: 29.6.3
pretty-format: 29.7.0
+ optional: true
jest-docblock@29.7.0:
dependencies:
detect-newline: 3.1.0
+ optional: true
jest-each@29.7.0:
dependencies:
@@ -7006,6 +7923,7 @@ snapshots:
jest-get-type: 29.6.3
jest-util: 29.7.0
pretty-format: 29.7.0
+ optional: true
jest-environment-jsdom@29.7.0:
dependencies:
@@ -7013,7 +7931,7 @@ snapshots:
'@jest/fake-timers': 29.7.0
'@jest/types': 29.6.3
'@types/jsdom': 20.0.1
- '@types/node': 22.5.5
+ '@types/node': 20.16.1
jest-mock: 29.7.0
jest-util: 29.7.0
jsdom: 20.0.3
@@ -7022,6 +7940,50 @@ snapshots:
- supports-color
- utf-8-validate
+ jest-environment-node@29.7.0:
+ dependencies:
+ '@jest/environment': 29.7.0
+ '@jest/fake-timers': 29.7.0
+ '@jest/types': 29.6.3
+ '@types/node': 22.5.5
+ jest-mock: 29.7.0
+ jest-util: 29.7.0
+ optional: true
+
+ jest-get-type@29.6.3:
+ optional: true
+
+ jest-haste-map@29.7.0:
+ dependencies:
+ '@jest/types': 29.6.3
+ '@types/graceful-fs': 4.1.9
+ '@types/node': 22.5.5
+ anymatch: 3.1.3
+ fb-watchman: 2.0.2
+ graceful-fs: 4.2.11
+ jest-regex-util: 29.6.3
+ jest-util: 29.7.0
+ jest-worker: 29.7.0
+ micromatch: 4.0.8
+ walker: 1.0.8
+ optionalDependencies:
+ fsevents: 2.3.3
+ optional: true
+
+ jest-leak-detector@29.7.0:
+ dependencies:
+ jest-get-type: 29.6.3
+ pretty-format: 29.7.0
+ optional: true
+
+ jest-matcher-utils@29.7.0:
+ dependencies:
+ chalk: 4.1.2
+ jest-diff: 29.7.0
+ jest-get-type: 29.6.3
+ pretty-format: 29.7.0
+ optional: true
+
jest-message-util@29.7.0:
dependencies:
'@babel/code-frame': 7.24.7
@@ -7036,15 +7998,125 @@ snapshots:
jest-mock@29.7.0:
dependencies:
+ '@jest/types': 29.6.3
+ '@types/node': 20.16.1
+ jest-util: 29.7.0
+
+ jest-pnp-resolver@1.2.3(jest-resolve@29.7.0):
+ optionalDependencies:
+ jest-resolve: 29.7.0
+ optional: true
+
+ jest-regex-util@29.6.3:
+ optional: true
+
+ jest-resolve-dependencies@29.7.0:
+ dependencies:
+ jest-regex-util: 29.6.3
+ jest-snapshot: 29.7.0
+ transitivePeerDependencies:
+ - supports-color
+ optional: true
+
+ jest-resolve@29.7.0:
+ dependencies:
+ chalk: 4.1.2
+ graceful-fs: 4.2.11
+ jest-haste-map: 29.7.0
+ jest-pnp-resolver: 1.2.3(jest-resolve@29.7.0)
+ jest-util: 29.7.0
+ jest-validate: 29.7.0
+ resolve: 1.22.8
+ resolve.exports: 2.0.2
+ slash: 3.0.0
+ optional: true
+
+ jest-runner@29.7.0:
+ dependencies:
+ '@jest/console': 29.7.0
+ '@jest/environment': 29.7.0
+ '@jest/test-result': 29.7.0
+ '@jest/transform': 29.7.0
'@jest/types': 29.6.3
'@types/node': 22.5.5
+ chalk: 4.1.2
+ emittery: 0.13.1
+ graceful-fs: 4.2.11
+ jest-docblock: 29.7.0
+ jest-environment-node: 29.7.0
+ jest-haste-map: 29.7.0
+ jest-leak-detector: 29.7.0
+ jest-message-util: 29.7.0
+ jest-resolve: 29.7.0
+ jest-runtime: 29.7.0
jest-util: 29.7.0
+ jest-watcher: 29.7.0
+ jest-worker: 29.7.0
+ p-limit: 3.1.0
+ source-map-support: 0.5.13
+ transitivePeerDependencies:
+ - supports-color
+ optional: true
- jest-util@29.7.0:
+ jest-runtime@29.7.0:
dependencies:
+ '@jest/environment': 29.7.0
+ '@jest/fake-timers': 29.7.0
+ '@jest/globals': 29.7.0
+ '@jest/source-map': 29.6.3
+ '@jest/test-result': 29.7.0
+ '@jest/transform': 29.7.0
'@jest/types': 29.6.3
'@types/node': 22.5.5
chalk: 4.1.2
+ cjs-module-lexer: 1.3.1
+ collect-v8-coverage: 1.0.2
+ glob: 7.2.3
+ graceful-fs: 4.2.11
+ jest-haste-map: 29.7.0
+ jest-message-util: 29.7.0
+ jest-mock: 29.7.0
+ jest-regex-util: 29.6.3
+ jest-resolve: 29.7.0
+ jest-snapshot: 29.7.0
+ jest-util: 29.7.0
+ slash: 3.0.0
+ strip-bom: 4.0.0
+ transitivePeerDependencies:
+ - supports-color
+ optional: true
+
+ jest-snapshot@29.7.0:
+ dependencies:
+ '@babel/core': 7.25.2
+ '@babel/generator': 7.25.5
+ '@babel/plugin-syntax-jsx': 7.24.7(@babel/core@7.25.2)
+ '@babel/plugin-syntax-typescript': 7.25.4(@babel/core@7.25.2)
+ '@babel/types': 7.25.4
+ '@jest/expect-utils': 29.7.0
+ '@jest/transform': 29.7.0
+ '@jest/types': 29.6.3
+ babel-preset-current-node-syntax: 1.1.0(@babel/core@7.25.2)
+ chalk: 4.1.2
+ expect: 29.7.0
+ graceful-fs: 4.2.11
+ jest-diff: 29.7.0
+ jest-get-type: 29.6.3
+ jest-matcher-utils: 29.7.0
+ jest-message-util: 29.7.0
+ jest-util: 29.7.0
+ natural-compare: 1.4.0
+ pretty-format: 29.7.0
+ semver: 7.6.3
+ transitivePeerDependencies:
+ - supports-color
+ optional: true
+
+ jest-util@29.7.0:
+ dependencies:
+ '@jest/types': 29.6.3
+ '@types/node': 20.16.1
+ chalk: 4.1.2
ci-info: 3.9.0
graceful-fs: 4.2.11
picomatch: 2.3.1
@@ -7057,61 +8129,40 @@ snapshots:
jest-get-type: 29.6.3
leven: 3.1.0
pretty-format: 29.7.0
+ optional: true
jest-watcher@29.7.0:
dependencies:
'@jest/test-result': 29.7.0
'@jest/types': 29.6.3
- '@types/node': 20.16.1
+ '@types/node': 22.5.5
ansi-escapes: 4.3.2
chalk: 4.1.2
emittery: 0.13.1
jest-util: 29.7.0
string-length: 4.0.2
+ optional: true
jest-worker@29.7.0:
dependencies:
- '@types/node': 20.16.1
+ '@types/node': 22.5.5
jest-util: 29.7.0
merge-stream: 2.0.0
supports-color: 8.1.1
-
- jest@29.7.0:
- dependencies:
- '@jest/core': 29.7.0(ts-node@10.9.2(@types/node@20.16.1)(typescript@5.5.4))
- '@jest/types': 29.6.3
- import-local: 3.2.0
- jest-cli: 29.7.0
- transitivePeerDependencies:
- - '@types/node'
- - babel-plugin-macros
- - supports-color
- - ts-node
optional: true
- jest@29.7.0(@types/node@20.16.1)(ts-node@10.9.2(@types/node@20.16.1)(typescript@5.5.4)):
+ jest@29.7.0(@types/node@22.5.5)(ts-node@10.9.2(@types/node@22.5.5)(typescript@5.5.4)):
dependencies:
- '@jest/core': 29.7.0(ts-node@10.9.2(@types/node@20.16.1)(typescript@5.5.4))
+ '@jest/core': 29.7.0(ts-node@10.9.2(@types/node@22.5.5)(typescript@5.5.4))
'@jest/types': 29.6.3
import-local: 3.2.0
- jest-cli: 29.7.0(@types/node@20.16.1)(ts-node@10.9.2(@types/node@20.16.1)(typescript@5.5.4))
- transitivePeerDependencies:
- - '@types/node'
- - babel-plugin-macros
- - supports-color
- - ts-node
-
- jest@29.7.0(@types/node@22.5.5):
- dependencies:
- '@jest/core': 29.7.0(ts-node@10.9.2(@types/node@20.16.1)(typescript@5.5.4))
- '@jest/types': 29.6.3
- import-local: 3.2.0
- jest-cli: 29.7.0(@types/node@22.5.5)
+ jest-cli: 29.7.0(@types/node@22.5.5)(ts-node@10.9.2(@types/node@22.5.5)(typescript@5.5.4))
transitivePeerDependencies:
- '@types/node'
- babel-plugin-macros
- supports-color
- ts-node
+ optional: true
jju@1.4.0: {}
@@ -7154,7 +8205,7 @@ snapshots:
whatwg-encoding: 2.0.0
whatwg-mimetype: 3.0.0
whatwg-url: 11.0.0
- ws: 8.18.0
+ ws: 8.17.1
xml-name-validator: 4.0.0
transitivePeerDependencies:
- bufferutil
@@ -7202,6 +8253,9 @@ snapshots:
dependencies:
json-buffer: 3.0.1
+ kleur@3.0.3:
+ optional: true
+
kuler@2.0.0: {}
language-subtag-registry@0.3.23: {}
@@ -7210,6 +8264,9 @@ snapshots:
dependencies:
language-subtag-registry: 0.3.23
+ leven@3.1.0:
+ optional: true
+
levn@0.4.1:
dependencies:
prelude-ls: 1.2.1
@@ -7221,6 +8278,13 @@ snapshots:
load-tsconfig@0.2.5: {}
+ load-yaml-file@0.2.0:
+ dependencies:
+ graceful-fs: 4.2.11
+ js-yaml: 3.14.1
+ pify: 4.0.1
+ strip-bom: 3.0.0
+
loading-cli@1.1.2:
dependencies:
colors-cli: 1.0.33
@@ -7252,14 +8316,14 @@ snapshots:
'@types/triple-beam': 1.3.5
fecha: 4.2.3
ms: 2.1.3
- safe-stable-stringify: 2.5.0
+ safe-stable-stringify: 2.4.3
triple-beam: 1.4.1
loose-envify@1.4.0:
dependencies:
js-tokens: 4.0.0
- lossless-json@4.0.2: {}
+ lossless-json@4.0.1: {}
loupe@3.1.1:
dependencies:
@@ -7282,8 +8346,18 @@ snapshots:
dependencies:
'@jridgewell/sourcemap-codec': 1.5.0
+ make-dir@4.0.0:
+ dependencies:
+ semver: 7.6.3
+ optional: true
+
make-error@1.3.6: {}
+ makeerror@1.0.12:
+ dependencies:
+ tmpl: 1.0.5
+ optional: true
+
merge-stream@2.0.0: {}
merge2@1.4.1: {}
@@ -7301,6 +8375,8 @@ snapshots:
mimic-fn@2.1.0: {}
+ mimic-fn@4.0.0: {}
+
min-indent@1.0.1: {}
minimatch@3.1.2:
@@ -7328,7 +8404,7 @@ snapshots:
ansi-colors: 4.1.3
browser-stdout: 1.3.1
chokidar: 3.6.0
- debug: 4.3.7(supports-color@8.1.1)
+ debug: 4.3.6(supports-color@8.1.1)
diff: 5.2.0
escape-string-regexp: 4.0.0
find-up: 5.0.0
@@ -7348,6 +8424,8 @@ snapshots:
mri@1.2.0: {}
+ ms@2.1.2: {}
+
ms@2.1.3: {}
mz@2.7.0:
@@ -7372,12 +8450,15 @@ snapshots:
fetch-blob: 3.2.0
formdata-polyfill: 4.0.10
+ node-int64@0.4.0:
+ optional: true
+
node-releases@2.0.18: {}
- nodemon@3.1.5:
+ nodemon@3.1.4:
dependencies:
chokidar: 3.6.0
- debug: 4.3.7(supports-color@5.5.0)
+ debug: 4.3.6(supports-color@5.5.0)
ignore-by-default: 1.0.1
minimatch: 3.1.2
pstree.remy: 1.1.8
@@ -7400,6 +8481,10 @@ snapshots:
dependencies:
path-key: 3.1.1
+ npm-run-path@5.3.0:
+ dependencies:
+ path-key: 4.0.0
+
nwsapi@2.2.12: {}
object-assign@4.1.1: {}
@@ -7457,6 +8542,10 @@ snapshots:
dependencies:
mimic-fn: 2.1.0
+ onetime@6.0.0:
+ dependencies:
+ mimic-fn: 4.0.0
+
optionator@0.9.4:
dependencies:
deep-is: 0.1.4
@@ -7496,8 +8585,6 @@ snapshots:
package-json-from-dist@1.0.0: {}
- package-manager-detector@0.2.0: {}
-
pako@2.1.0: {}
parent-module@1.0.1:
@@ -7521,6 +8608,8 @@ snapshots:
path-key@3.1.1: {}
+ path-key@4.0.0: {}
+
path-parse@1.0.7: {}
path-scurry@1.11.1:
@@ -7534,33 +8623,42 @@ snapshots:
pathval@2.0.0: {}
- picocolors@1.1.0: {}
+ picocolors@1.0.1: {}
picomatch@2.3.1: {}
- picomatch@4.0.2: {}
-
pify@4.0.1: {}
pirates@4.0.6: {}
+ pkg-dir@4.2.0:
+ dependencies:
+ find-up: 4.1.0
+
pluralize@8.0.0: {}
possible-typed-array-names@1.0.0: {}
- postcss-load-config@6.0.1(postcss@8.4.47)(tsx@4.19.1):
+ postcss-load-config@6.0.1(postcss@8.4.45)(tsx@4.17.0):
dependencies:
lilconfig: 3.1.2
optionalDependencies:
- postcss: 8.4.47
- tsx: 4.19.1
+ postcss: 8.4.45
+ tsx: 4.17.0
- postcss@8.4.47:
+ postcss@8.4.45:
dependencies:
nanoid: 3.3.7
- picocolors: 1.1.0
+ picocolors: 1.0.1
source-map-js: 1.2.1
+ preferred-pm@3.1.4:
+ dependencies:
+ find-up: 5.0.0
+ find-yarn-workspace-root2: 1.2.16
+ path-exists: 4.0.0
+ which-pm: 2.2.0
+
prelude-ls@1.2.1: {}
prettier-plugin-packagejson@2.5.2(prettier@3.3.3):
@@ -7570,10 +8668,10 @@ snapshots:
optionalDependencies:
prettier: 3.3.3
- prettier-plugin-sort-imports@1.8.6(typescript@5.6.2):
+ prettier-plugin-sort-imports@1.8.6(typescript@5.5.4):
dependencies:
prettier: 3.3.3
- typescript: 5.6.2
+ typescript: 5.5.4
prettier@2.8.8: {}
@@ -7591,6 +8689,12 @@ snapshots:
ansi-styles: 5.2.0
react-is: 18.3.1
+ prompts@2.4.2:
+ dependencies:
+ kleur: 3.0.3
+ sisteransi: 1.0.5
+ optional: true
+
prop-types@15.8.1:
dependencies:
loose-envify: 1.4.0
@@ -7605,6 +8709,9 @@ snapshots:
punycode@2.3.1: {}
+ pure-rand@6.1.0:
+ optional: true
+
querystringify@2.2.0: {}
queue-microtask@1.2.3: {}
@@ -7623,7 +8730,7 @@ snapshots:
react-error-boundary@3.1.4(react@18.3.1):
dependencies:
- '@babel/runtime': 7.25.6
+ '@babel/runtime': 7.25.4
react: 18.3.1
react-is@16.13.1: {}
@@ -7717,12 +8824,20 @@ snapshots:
requires-port@1.0.0: {}
+ resolve-cwd@3.0.0:
+ dependencies:
+ resolve-from: 5.0.0
+ optional: true
+
resolve-from@4.0.0: {}
resolve-from@5.0.0: {}
resolve-pkg-maps@1.0.0: {}
+ resolve.exports@2.0.2:
+ optional: true
+
resolve@1.19.0:
dependencies:
is-core-module: 2.15.1
@@ -7746,26 +8861,26 @@ snapshots:
dependencies:
glob: 7.2.3
- rollup@4.21.3:
+ rollup@4.21.0:
dependencies:
'@types/estree': 1.0.5
optionalDependencies:
- '@rollup/rollup-android-arm-eabi': 4.21.3
- '@rollup/rollup-android-arm64': 4.21.3
- '@rollup/rollup-darwin-arm64': 4.21.3
- '@rollup/rollup-darwin-x64': 4.21.3
- '@rollup/rollup-linux-arm-gnueabihf': 4.21.3
- '@rollup/rollup-linux-arm-musleabihf': 4.21.3
- '@rollup/rollup-linux-arm64-gnu': 4.21.3
- '@rollup/rollup-linux-arm64-musl': 4.21.3
- '@rollup/rollup-linux-powerpc64le-gnu': 4.21.3
- '@rollup/rollup-linux-riscv64-gnu': 4.21.3
- '@rollup/rollup-linux-s390x-gnu': 4.21.3
- '@rollup/rollup-linux-x64-gnu': 4.21.3
- '@rollup/rollup-linux-x64-musl': 4.21.3
- '@rollup/rollup-win32-arm64-msvc': 4.21.3
- '@rollup/rollup-win32-ia32-msvc': 4.21.3
- '@rollup/rollup-win32-x64-msvc': 4.21.3
+ '@rollup/rollup-android-arm-eabi': 4.21.0
+ '@rollup/rollup-android-arm64': 4.21.0
+ '@rollup/rollup-darwin-arm64': 4.21.0
+ '@rollup/rollup-darwin-x64': 4.21.0
+ '@rollup/rollup-linux-arm-gnueabihf': 4.21.0
+ '@rollup/rollup-linux-arm-musleabihf': 4.21.0
+ '@rollup/rollup-linux-arm64-gnu': 4.21.0
+ '@rollup/rollup-linux-arm64-musl': 4.21.0
+ '@rollup/rollup-linux-powerpc64le-gnu': 4.21.0
+ '@rollup/rollup-linux-riscv64-gnu': 4.21.0
+ '@rollup/rollup-linux-s390x-gnu': 4.21.0
+ '@rollup/rollup-linux-x64-gnu': 4.21.0
+ '@rollup/rollup-linux-x64-musl': 4.21.0
+ '@rollup/rollup-win32-arm64-msvc': 4.21.0
+ '@rollup/rollup-win32-ia32-msvc': 4.21.0
+ '@rollup/rollup-win32-x64-msvc': 4.21.0
fsevents: 2.3.3
run-parallel@1.2.0:
@@ -7787,7 +8902,7 @@ snapshots:
es-errors: 1.3.0
is-regex: 1.1.4
- safe-stable-stringify@2.5.0: {}
+ safe-stable-stringify@2.4.3: {}
safer-buffer@2.1.2: {}
@@ -7860,6 +8975,9 @@ snapshots:
dependencies:
semver: 7.6.3
+ sisteransi@1.0.5:
+ optional: true
+
slash@3.0.0: {}
slash@4.0.0: {}
@@ -7879,6 +8997,12 @@ snapshots:
source-map-js@1.2.1: {}
+ source-map-support@0.5.13:
+ dependencies:
+ buffer-from: 1.1.2
+ source-map: 0.6.1
+ optional: true
+
source-map@0.6.1:
optional: true
@@ -7918,14 +9042,14 @@ snapshots:
starknet@6.11.0:
dependencies:
'@noble/curves': 1.4.2
- '@noble/hashes': 1.5.0
- '@scure/base': 1.1.9
+ '@noble/hashes': 1.4.0
+ '@scure/base': 1.1.7
'@scure/starknet': 1.0.0
abi-wan-kanabi: 2.2.3
fetch-cookie: 3.0.1
get-starknet-core: 4.0.0
isomorphic-fetch: 3.0.0
- lossless-json: 4.0.2
+ lossless-json: 4.0.1
pako: 2.1.0
starknet-types-07: '@starknet-io/types-js@0.7.7'
ts-mixer: 6.0.4
@@ -7939,6 +9063,12 @@ snapshots:
dependencies:
internal-slot: 1.0.7
+ string-length@4.0.2:
+ dependencies:
+ char-regex: 1.0.2
+ strip-ansi: 6.0.1
+ optional: true
+
string-width@4.2.3:
dependencies:
emoji-regex: 8.0.0
@@ -8005,12 +9135,17 @@ snapshots:
strip-ansi@7.1.0:
dependencies:
- ansi-regex: 6.1.0
+ ansi-regex: 6.0.1
strip-bom@3.0.0: {}
+ strip-bom@4.0.0:
+ optional: true
+
strip-final-newline@2.0.0: {}
+ strip-final-newline@3.0.0: {}
+
strip-indent@3.0.0:
dependencies:
min-indent: 1.0.1
@@ -8052,6 +9187,13 @@ snapshots:
term-size@2.2.1: {}
+ test-exclude@6.0.0:
+ dependencies:
+ '@istanbuljs/schema': 0.1.3
+ glob: 7.2.3
+ minimatch: 3.1.2
+ optional: true
+
text-hex@1.0.0: {}
text-table@0.2.0: {}
@@ -8066,13 +9208,6 @@ snapshots:
tinybench@2.9.0: {}
- tinyexec@0.3.0: {}
-
- tinyglobby@0.2.6:
- dependencies:
- fdir: 6.3.0(picomatch@4.0.2)
- picomatch: 4.0.2
-
tinypool@1.0.1: {}
tinyrainbow@1.2.0: {}
@@ -8083,6 +9218,9 @@ snapshots:
dependencies:
os-tmpdir: 1.0.2
+ tmpl@1.0.5:
+ optional: true
+
to-fast-properties@2.0.0: {}
to-regex-range@5.0.1:
@@ -8112,85 +9250,22 @@ snapshots:
triple-beam@1.4.1: {}
- ts-api-utils@1.3.0(typescript@5.6.2):
- dependencies:
- typescript: 5.6.2
-
- ts-interface-checker@0.1.13: {}
-
- ts-mixer@6.0.4: {}
-
- ts-node@10.9.2(@types/node@20.16.5)(typescript@5.6.2):
+ ts-api-utils@1.3.0(typescript@5.5.4):
dependencies:
- '@cspotcode/source-map-support': 0.8.1
- '@tsconfig/node10': 1.0.11
- '@tsconfig/node12': 1.0.11
- '@tsconfig/node14': 1.0.3
- '@tsconfig/node16': 1.0.4
- '@types/node': 20.16.5
- acorn: 8.12.1
- acorn-walk: 8.3.4
- arg: 4.1.3
- create-require: 1.1.1
- diff: 4.0.2
- make-error: 1.3.6
- semver: 7.6.3
typescript: 5.5.4
- yargs-parser: 21.1.1
- optionalDependencies:
- '@babel/core': 7.25.2
- '@jest/transform': 29.7.0
- '@jest/types': 29.6.3
- babel-jest: 29.7.0(@babel/core@7.25.2)
- esbuild: 0.20.2
- ts-jest@29.2.5(@babel/core@7.25.2)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.25.2))(jest@29.7.0(@types/node@22.5.5))(typescript@5.5.4):
- dependencies:
- bs-logger: 0.2.6
- ejs: 3.1.10
- fast-json-stable-stringify: 2.1.0
- jest: 29.7.0(@types/node@22.5.5)
- jest-util: 29.7.0
- json5: 2.2.3
- lodash.memoize: 4.1.2
- make-error: 1.3.6
- semver: 7.6.3
- typescript: 5.5.4
- yargs-parser: 21.1.1
- optionalDependencies:
- '@babel/core': 7.25.2
- '@jest/transform': 29.7.0
- '@jest/types': 29.6.3
- babel-jest: 29.7.0(@babel/core@7.25.2)
+ ts-interface-checker@0.1.13: {}
ts-mixer@6.0.4: {}
- ts-node@10.9.2(@types/node@22.5.5)(typescript@5.6.2):
+ ts-node@10.9.2(@types/node@20.16.1)(typescript@5.5.4):
dependencies:
'@cspotcode/source-map-support': 0.8.1
'@tsconfig/node10': 1.0.11
'@tsconfig/node12': 1.0.11
'@tsconfig/node14': 1.0.3
'@tsconfig/node16': 1.0.4
- '@types/node': 22.5.5
- acorn: 8.12.1
- acorn-walk: 8.3.4
- arg: 4.1.3
- create-require: 1.1.1
- diff: 4.0.2
- make-error: 1.3.6
- typescript: 5.6.2
- v8-compile-cache-lib: 3.0.1
- yn: 3.1.1
-
- ts-node@10.9.2(@types/node@22.5.5)(typescript@5.5.4):
- dependencies:
- '@cspotcode/source-map-support': 0.8.1
- '@tsconfig/node10': 1.0.11
- '@tsconfig/node12': 1.0.11
- '@tsconfig/node14': 1.0.3
- '@tsconfig/node16': 1.0.4
- '@types/node': 22.5.5
+ '@types/node': 20.16.1
acorn: 8.12.1
acorn-walk: 8.3.3
arg: 4.1.3
@@ -8230,42 +9305,42 @@ snapshots:
tslib@2.7.0: {}
- tsup@8.3.0(postcss@8.4.47)(tsx@4.19.1)(typescript@5.6.2):
+ tsup@8.2.4(postcss@8.4.45)(tsx@4.17.0)(typescript@5.5.4):
dependencies:
bundle-require: 5.0.0(esbuild@0.23.1)
cac: 6.7.14
chokidar: 3.6.0
consola: 3.2.3
- debug: 4.3.7(supports-color@5.5.0)
+ debug: 4.3.6(supports-color@5.5.0)
esbuild: 0.23.1
execa: 5.1.1
+ globby: 11.1.0
joycon: 3.1.1
- picocolors: 1.1.0
- postcss-load-config: 6.0.1(postcss@8.4.47)(tsx@4.19.1)
+ picocolors: 1.0.1
+ postcss-load-config: 6.0.1(postcss@8.4.45)(tsx@4.17.0)
resolve-from: 5.0.0
- rollup: 4.21.3
+ rollup: 4.21.0
source-map: 0.8.0-beta.0
sucrase: 3.35.0
- tinyglobby: 0.2.6
tree-kill: 1.2.2
optionalDependencies:
- postcss: 8.4.47
- typescript: 5.6.2
+ postcss: 8.4.45
+ typescript: 5.5.4
transitivePeerDependencies:
- jiti
- supports-color
- tsx
- yaml
- tsutils@3.21.0(typescript@5.6.2):
+ tsutils@3.21.0(typescript@5.5.4):
dependencies:
tslib: 1.14.1
- typescript: 5.6.2
+ typescript: 5.5.4
- tsx@4.19.1:
+ tsx@4.17.0:
dependencies:
esbuild: 0.23.1
- get-tsconfig: 4.8.1
+ get-tsconfig: 4.7.6
optionalDependencies:
fsevents: 2.3.3
@@ -8304,6 +9379,9 @@ snapshots:
type-fest@0.20.2: {}
+ type-fest@0.21.3:
+ optional: true
+
type-fest@0.6.0: {}
type-fest@0.8.1: {}
@@ -8340,7 +9418,7 @@ snapshots:
is-typed-array: 1.1.13
possible-typed-array-names: 1.0.0
- typescript@5.6.2: {}
+ typescript@5.5.4: {}
unbox-primitive@1.0.2:
dependencies:
@@ -8364,8 +9442,8 @@ snapshots:
update-browserslist-db@1.1.0(browserslist@4.23.3):
dependencies:
browserslist: 4.23.3
- escalade: 3.2.0
- picocolors: 1.1.0
+ escalade: 3.1.2
+ picocolors: 1.0.1
uri-js@4.4.1:
dependencies:
@@ -8382,33 +9460,58 @@ snapshots:
v8-compile-cache-lib@3.0.1: {}
+ v8-to-istanbul@9.3.0:
+ dependencies:
+ '@jridgewell/trace-mapping': 0.3.25
+ '@types/istanbul-lib-coverage': 2.0.6
+ convert-source-map: 2.0.0
+ optional: true
+
validate-npm-package-license@3.0.4:
dependencies:
spdx-correct: 3.2.0
spdx-expression-parse: 3.0.1
- viem@2.21.9(typescript@5.6.2)(zod@3.23.8):
+ viem@2.20.0(typescript@5.5.4)(zod@3.23.8):
dependencies:
'@adraffy/ens-normalize': 1.10.0
'@noble/curves': 1.4.0
'@noble/hashes': 1.4.0
'@scure/bip32': 1.4.0
- '@scure/bip39': 1.4.0
- abitype: 1.0.5(typescript@5.6.2)(zod@3.23.8)
+ '@scure/bip39': 1.3.0
+ abitype: 1.0.5(typescript@5.5.4)(zod@3.23.8)
isows: 1.0.4(ws@8.17.1)
webauthn-p256: 0.0.5
ws: 8.17.1
optionalDependencies:
- typescript: 5.6.2
+ typescript: 5.5.4
transitivePeerDependencies:
- bufferutil
- utf-8-validate
- zod
+ vite-node@2.0.5(@types/node@20.16.1):
+ dependencies:
+ cac: 6.7.14
+ debug: 4.3.6(supports-color@5.5.0)
+ pathe: 1.1.2
+ tinyrainbow: 1.2.0
+ vite: 5.4.3(@types/node@20.16.1)
+ transitivePeerDependencies:
+ - '@types/node'
+ - less
+ - lightningcss
+ - sass
+ - sass-embedded
+ - stylus
+ - sugarss
+ - supports-color
+ - terser
+
vite-node@2.0.5(@types/node@22.5.5):
dependencies:
cac: 6.7.14
- debug: 4.3.7(supports-color@5.5.0)
+ debug: 4.3.6(supports-color@5.5.0)
pathe: 1.1.2
tinyrainbow: 1.2.0
vite: 5.4.3(@types/node@22.5.5)
@@ -8426,49 +9529,48 @@ snapshots:
vite@5.4.3(@types/node@20.16.1):
dependencies:
esbuild: 0.21.5
- postcss: 8.4.47
- rollup: 4.21.3
+ postcss: 8.4.45
+ rollup: 4.21.0
optionalDependencies:
'@types/node': 20.16.1
fsevents: 2.3.3
- vitest@2.0.5(@types/node@22.5.5)(jsdom@20.0.3):
+ vite@5.4.3(@types/node@22.5.5):
dependencies:
esbuild: 0.21.5
- postcss: 8.4.47
- rollup: 4.21.3
+ postcss: 8.4.45
+ rollup: 4.21.0
optionalDependencies:
'@types/node': 22.5.5
fsevents: 2.3.3
- vitest@2.1.1(@types/node@20.16.5)(jsdom@20.0.3):
+ vitest@2.0.5(@types/node@20.16.1)(jsdom@20.0.3):
dependencies:
- '@vitest/expect': 2.1.1
- '@vitest/mocker': 2.1.1(@vitest/spy@2.1.1)(vite@5.4.6(@types/node@20.16.5))
- '@vitest/pretty-format': 2.1.1
- '@vitest/runner': 2.1.1
- '@vitest/snapshot': 2.1.1
- '@vitest/spy': 2.1.1
- '@vitest/utils': 2.1.1
+ '@ampproject/remapping': 2.3.0
+ '@vitest/expect': 2.0.5
+ '@vitest/pretty-format': 2.0.5
+ '@vitest/runner': 2.0.5
+ '@vitest/snapshot': 2.0.5
+ '@vitest/spy': 2.0.5
+ '@vitest/utils': 2.0.5
chai: 5.1.1
- debug: 4.3.7(supports-color@5.5.0)
+ debug: 4.3.6(supports-color@5.5.0)
+ execa: 8.0.1
magic-string: 0.30.11
pathe: 1.1.2
std-env: 3.7.0
tinybench: 2.9.0
- tinyexec: 0.3.0
tinypool: 1.0.1
tinyrainbow: 1.2.0
- vite: 5.4.3(@types/node@22.5.5)
- vite-node: 2.0.5(@types/node@22.5.5)
+ vite: 5.4.3(@types/node@20.16.1)
+ vite-node: 2.0.5(@types/node@20.16.1)
why-is-node-running: 2.3.0
optionalDependencies:
- '@types/node': 22.5.5
+ '@types/node': 20.16.1
jsdom: 20.0.3
transitivePeerDependencies:
- less
- lightningcss
- - msw
- sass
- sass-embedded
- stylus
@@ -8476,26 +9578,26 @@ snapshots:
- supports-color
- terser
- vitest@2.1.1(@types/node@22.5.5)(jsdom@20.0.3):
+ vitest@2.0.5(@types/node@22.5.5)(jsdom@20.0.3):
dependencies:
- '@vitest/expect': 2.1.1
- '@vitest/mocker': 2.1.1(@vitest/spy@2.1.1)(vite@5.4.6(@types/node@22.5.5))
- '@vitest/pretty-format': 2.1.1
- '@vitest/runner': 2.1.1
- '@vitest/snapshot': 2.1.1
- '@vitest/spy': 2.1.1
- '@vitest/utils': 2.1.1
+ '@ampproject/remapping': 2.3.0
+ '@vitest/expect': 2.0.5
+ '@vitest/pretty-format': 2.0.5
+ '@vitest/runner': 2.0.5
+ '@vitest/snapshot': 2.0.5
+ '@vitest/spy': 2.0.5
+ '@vitest/utils': 2.0.5
chai: 5.1.1
- debug: 4.3.7(supports-color@5.5.0)
+ debug: 4.3.6(supports-color@5.5.0)
+ execa: 8.0.1
magic-string: 0.30.11
pathe: 1.1.2
std-env: 3.7.0
tinybench: 2.9.0
- tinyexec: 0.3.0
tinypool: 1.0.1
tinyrainbow: 1.2.0
- vite: 5.4.6(@types/node@22.5.5)
- vite-node: 2.1.1(@types/node@22.5.5)
+ vite: 5.4.3(@types/node@22.5.5)
+ vite-node: 2.0.5(@types/node@22.5.5)
why-is-node-running: 2.3.0
optionalDependencies:
'@types/node': 22.5.5
@@ -8503,7 +9605,6 @@ snapshots:
transitivePeerDependencies:
- less
- lightningcss
- - msw
- sass
- sass-embedded
- stylus
@@ -8515,6 +9616,11 @@ snapshots:
dependencies:
xml-name-validator: 4.0.0
+ walker@1.0.8:
+ dependencies:
+ makeerror: 1.0.12
+ optional: true
+
web-streams-polyfill@3.3.3: {}
webauthn-p256@0.0.5:
@@ -8582,6 +9688,11 @@ snapshots:
is-weakmap: 2.0.2
is-weakset: 2.0.3
+ which-pm@2.2.0:
+ dependencies:
+ load-yaml-file: 0.2.0
+ path-exists: 4.0.0
+
which-typed-array@1.1.15:
dependencies:
available-typed-arrays: 1.0.7
@@ -8618,7 +9729,7 @@ snapshots:
logform: 2.6.1
one-time: 1.0.0
readable-stream: 3.6.2
- safe-stable-stringify: 2.5.0
+ safe-stable-stringify: 2.4.3
stack-trace: 0.0.10
triple-beam: 1.4.1
winston-transport: 4.7.1
@@ -8641,9 +9752,13 @@ snapshots:
wrappy@1.0.2: {}
- ws@8.17.1: {}
+ write-file-atomic@4.0.2:
+ dependencies:
+ imurmurhash: 0.1.4
+ signal-exit: 3.0.7
+ optional: true
- ws@8.18.0: {}
+ ws@8.17.1: {}
xml-name-validator@4.0.0: {}
@@ -8669,7 +9784,7 @@ snapshots:
yargs@16.2.0:
dependencies:
cliui: 7.0.4
- escalade: 3.2.0
+ escalade: 3.1.2
get-caller-file: 2.0.5
require-directory: 2.1.1
string-width: 4.2.3
@@ -8679,7 +9794,7 @@ snapshots:
yargs@17.7.2:
dependencies:
cliui: 8.0.1
- escalade: 3.2.0
+ escalade: 3.1.2
get-caller-file: 2.0.5
require-directory: 2.1.1
string-width: 4.2.3
diff --git a/turbo.json b/turbo.json
index 9dafe42a7..822314520 100644
--- a/turbo.json
+++ b/turbo.json
@@ -1,16 +1,9 @@
{
"$schema": "https://turbo.build/schema.json",
- "globalDependencies": [
- "**/.env.*local"
- ],
- "globalDotEnv": [
- ".env"
- ],
- "pipeline": {
+ "globalDependencies": ["**/.env.*local"],
+ "tasks": {
"build:packages": {
- "dependsOn": [
- "^build"
- ],
+ "dependsOn": ["^build"],
"outputs": [
".next/**",
"!.next/cache/**",
@@ -20,9 +13,7 @@
},
"build": {
"cache": false,
- "dependsOn": [
- "^build"
- ],
+ "dependsOn": ["^build"],
"outputs": [
".next/**",
"!.next/cache/**",
@@ -31,42 +22,26 @@
]
},
"@ark-project/demo#build": {
- "dependsOn": [
- "^build"
- ],
+ "dependsOn": ["^build"],
"env": [
"NEXT_PUBLIC_NFT_API_KEY",
"NEXT_PUBLIC_ORDERBOOK_API_URL",
"NEXT_PUBLIC_NFT_API_URL"
],
- "outputs": [
- ".next/**",
- "!.next/cache/**",
- ".vercel/output/**"
- ]
+ "outputs": [".next/**", "!.next/cache/**", ".vercel/output/**"]
},
"dev": {
- "dependsOn": [
- "^dev"
- ],
- "outputs": [
- ".dist/**"
- ]
+ "dependsOn": ["^dev"],
+ "outputs": [".dist/**"]
},
"lint": {
- "dependsOn": [
- "^lint"
- ]
+ "dependsOn": ["^lint"]
},
"test": {
- "dependsOn": [
- "^test"
- ]
+ "dependsOn": ["^test"]
},
"lint:fix": {
- "dependsOn": [
- "^lint:fix"
- ]
+ "dependsOn": ["^lint:fix"]
},
"clean": {
"cache": false
@@ -102,7 +77,6 @@
},
"globalEnv": [
"ACCOUNT_CLASS_HASH",
- "BROKER_ID",
"CI",
"SOLIS_ACCOUNT_CLASS_HASH",
"SOLIS_ADMIN_ADDRESS",
@@ -124,4 +98,4 @@
"STARKNET_ADMIN_PRIVATE_KEY",
"STARKNET_ADMIN_ADDRESS"
]
-}
\ No newline at end of file
+}
From 3f148b27b824fb185ffaff19460a62d1016c7ad3 Mon Sep 17 00:00:00 2001
From: Patrice Tisserand
Date: Tue, 24 Sep 2024 13:37:21 +0200
Subject: [PATCH 28/33] CI: update command to run SDK tests
---
.github/workflows/arkproject-contracts.yml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/.github/workflows/arkproject-contracts.yml b/.github/workflows/arkproject-contracts.yml
index 2bc38dab2..6d96fbc83 100644
--- a/.github/workflows/arkproject-contracts.yml
+++ b/.github/workflows/arkproject-contracts.yml
@@ -84,7 +84,7 @@ jobs:
- name: Run SDK test
run: |
cp .env.devnet .env
- pnpm test
+ pnpm test --filter=core
- name: Stop starknet-devnet container
if: always()
From 3de7c7fbd22ee5654e9297c4cd98149005c52cd1 Mon Sep 17 00:00:00 2001
From: Patrice Tisserand
Date: Tue, 24 Sep 2024 16:29:22 +0200
Subject: [PATCH 29/33] CI: run SDK fulfill action test and reset starknet
devnet state
---
.github/workflows/arkproject-contracts.yml | 14 ++++++++++++++
1 file changed, 14 insertions(+)
diff --git a/.github/workflows/arkproject-contracts.yml b/.github/workflows/arkproject-contracts.yml
index 6d96fbc83..4186193aa 100644
--- a/.github/workflows/arkproject-contracts.yml
+++ b/.github/workflows/arkproject-contracts.yml
@@ -81,6 +81,20 @@ jobs:
-X POST http://localhost:5050/dump \
-d '{"path": "$DEVNET_DEPLOYMENT_DUMP_PATH"}'
+ - name: Setup environment
+ run: cp .env.devnet .env
+
+ - name: Run fulfill auction test
+ run: |
+ pnpm test --filter=core -- tests/setArkFees.test.ts
+ pnpm test --filter=core -- tests/fulfillAuction.test.ts
+
+ - name: Restore devnet state
+ run: |
+ curl -H "Content-type: application/json" \
+ -X POST http://localhost:5050/load \
+ -d '{"path": "$DEVNET_DEPLOYMENT_DUMP_PATH"}'
+
- name: Run SDK test
run: |
cp .env.devnet .env
From 7689a2abbce8c018dea31b2f3c11128b8442be2c Mon Sep 17 00:00:00 2001
From: Patrice Tisserand
Date: Tue, 24 Sep 2024 17:16:16 +0200
Subject: [PATCH 30/33] CI: store devnet state after setArkFees has been
called.
---
.github/workflows/arkproject-contracts.yml | 14 +++++++++++---
1 file changed, 11 insertions(+), 3 deletions(-)
diff --git a/.github/workflows/arkproject-contracts.yml b/.github/workflows/arkproject-contracts.yml
index 4186193aa..28c8d1939 100644
--- a/.github/workflows/arkproject-contracts.yml
+++ b/.github/workflows/arkproject-contracts.yml
@@ -15,6 +15,7 @@ env:
STARKNET_DEVNET_VERSION: 0.2.0
DEVNET_DUMP_PATH: /devnet-dump.json
DEVNET_DEPLOYMENT_DUMP_PATH: /tmp/devnet-deployment-dump.json
+ DEVNET_SET_FEES_DUMP_PATH: /tmp/devnet-set-fees-dump.json
jobs:
fmt:
runs-on: ubuntu-latest
@@ -84,20 +85,27 @@ jobs:
- name: Setup environment
run: cp .env.devnet .env
+ - name: Run set Ark fees test
+ run: pnpm test --filter=core -- tests/setArkFees.test.ts
+
+ - name: Store devnet state after set ark fees
+ run: |
+ curl -H "Content-type: application/json" \
+ -X POST http://localhost:5050/dump \
+ -d '{"path": "$DEVNET_SET_FEES_DUMP_PATH"}'
+
- name: Run fulfill auction test
run: |
- pnpm test --filter=core -- tests/setArkFees.test.ts
pnpm test --filter=core -- tests/fulfillAuction.test.ts
- name: Restore devnet state
run: |
curl -H "Content-type: application/json" \
-X POST http://localhost:5050/load \
- -d '{"path": "$DEVNET_DEPLOYMENT_DUMP_PATH"}'
+ -d '{"path": "$DEVNET_SET_FEES_DUMP_PATH"}'
- name: Run SDK test
run: |
- cp .env.devnet .env
pnpm test --filter=core
- name: Stop starknet-devnet container
From 785ab1df968551df229f566940841a25d6a5310c Mon Sep 17 00:00:00 2001
From: Patrice Tisserand
Date: Thu, 26 Sep 2024 12:17:04 +0200
Subject: [PATCH 31/33] display-events: add limit_wait_retries to end indexing
when reached
---
crates/diri/examples/display-events.rs | 17 +++++++++++++++--
1 file changed, 15 insertions(+), 2 deletions(-)
diff --git a/crates/diri/examples/display-events.rs b/crates/diri/examples/display-events.rs
index 4efcaacfe..297e7373b 100644
--- a/crates/diri/examples/display-events.rs
+++ b/crates/diri/examples/display-events.rs
@@ -53,6 +53,9 @@ struct Args {
#[clap(long, help = "Block range", env = "BLOCK_RANGE", default_value = "0")]
block_range: u64,
+ #[clap(long, help = "Nb limit of retries")]
+ limit_wait_retries: Option,
+
#[clap(long, help = "JSON output", env = "JSON_OUTPUT")]
output: Option,
}
@@ -78,6 +81,8 @@ async fn main() -> Result<()> {
// Set to None to keep polling the head of chain.
let to = args.block_end;
+ let limit_wait_retries = args.limit_wait_retries;
+ let mut nb_retries = 0_u64;
info!("Starting.....!");
@@ -118,10 +123,18 @@ async fn main() -> Result<()> {
if start > end {
trace!("Nothing to fetch at block {start}");
+ if let Some(limit_wait_retries) = limit_wait_retries {
+ if nb_retries > limit_wait_retries {
+ info!("Wait limit reached");
+ storage.end.store(latest_block, Ordering::SeqCst);
+ break;
+ }
+ nb_retries += 1;
+ }
tokio::time::sleep(tokio::time::Duration::from_millis(sleep_msecs)).await;
continue;
}
-
+ nb_retries = 0;
trace!("Fetching blocks {start} - {end}");
match indexer
.index_block_range(BlockId::Number(start), BlockId::Number(end))
@@ -134,7 +147,7 @@ async fn main() -> Result<()> {
if end >= to {
trace!("`to` block was reached, exit.");
storage.end.store(end, Ordering::SeqCst);
- break; // return Ok(());
+ break;
}
}
From 3167efbfc27355a82f875de6941cc9cf1150ae76 Mon Sep 17 00:00:00 2001
From: Patrice Tisserand
Date: Tue, 1 Oct 2024 01:18:20 +0200
Subject: [PATCH 32/33] feat(diri): add address filtering when fetching events
---
crates/diri/examples/display-events.rs | 20 +++++++++++++++++++-
crates/diri/src/lib.rs | 5 ++++-
2 files changed, 23 insertions(+), 2 deletions(-)
diff --git a/crates/diri/examples/display-events.rs b/crates/diri/examples/display-events.rs
index 297e7373b..9b18fd3c1 100644
--- a/crates/diri/examples/display-events.rs
+++ b/crates/diri/examples/display-events.rs
@@ -14,6 +14,7 @@ use dotenv::dotenv;
use serde::ser::SerializeStruct;
use serde::Serialize;
use starknet::core::types::BlockId;
+use starknet::core::types::Felt;
use starknet::providers::jsonrpc::HttpTransport;
use starknet::providers::AnyProvider;
use starknet::providers::JsonRpcClient;
@@ -53,6 +54,9 @@ struct Args {
#[clap(long, help = "Block range", env = "BLOCK_RANGE", default_value = "0")]
block_range: u64,
+ #[clap(long, help = "Contract address", env = "CONTRACT_ADDRESS")]
+ contract: Option,
+
#[clap(long, help = "Nb limit of retries")]
limit_wait_retries: Option,
@@ -78,6 +82,16 @@ async fn main() -> Result<()> {
let sleep_msecs = args.sleep_msecs;
let mut from = args.block_start;
let range = args.block_range;
+ let contract_address = match args.contract {
+ Some(v) => match Felt::from_hex(&v) {
+ Ok(v) => Some(v),
+ Err(e) => {
+ error!("Failed to parse contract address: {}", e);
+ None
+ }
+ },
+ None => None,
+ };
// Set to None to keep polling the head of chain.
let to = args.block_end;
@@ -137,7 +151,11 @@ async fn main() -> Result<()> {
nb_retries = 0;
trace!("Fetching blocks {start} - {end}");
match indexer
- .index_block_range(BlockId::Number(start), BlockId::Number(end))
+ .index_block_range(
+ BlockId::Number(start),
+ BlockId::Number(end),
+ contract_address,
+ )
.await
{
Ok(_) => {
diff --git a/crates/diri/src/lib.rs b/crates/diri/src/lib.rs
index f215eebda..a37db1120 100644
--- a/crates/diri/src/lib.rs
+++ b/crates/diri/src/lib.rs
@@ -61,11 +61,13 @@ impl Diri {
&self,
from_block: BlockId,
to_block: BlockId,
+ address: Option,
) -> IndexerResult<()> {
let blocks_events = self
.fetch_events(
from_block,
to_block,
+ address,
Some(vec![vec![
selector!("OrderPlaced"),
selector!("OrderFulfilled"),
@@ -151,6 +153,7 @@ impl Diri {
&self,
from_block: BlockId,
to_block: BlockId,
+ address: Option,
keys: Option>>,
) -> Result>, IndexerError> {
// TODO: setup key filtering here.
@@ -160,7 +163,7 @@ impl Diri {
let filter = EventFilter {
from_block: Some(from_block),
to_block: Some(to_block),
- address: None,
+ address,
keys,
};
From c17a7e28eb2dba02f472161f9650cebde8d45fc9 Mon Sep 17 00:00:00 2001
From: Patrice Tisserand
Date: Tue, 1 Oct 2024 20:34:01 +0200
Subject: [PATCH 33/33] contracts(starknet): remove not more needed order info
storage
---
contracts/ark_starknet/src/executor.cairo | 55 ++++++++-----------
.../tests/integration/cancel_order.cairo | 2 +-
.../tests/integration/fulfill_order.cairo | 2 +-
3 files changed, 26 insertions(+), 33 deletions(-)
diff --git a/contracts/ark_starknet/src/executor.cairo b/contracts/ark_starknet/src/executor.cairo
index 204bf58d7..614047a0b 100644
--- a/contracts/ark_starknet/src/executor.cairo
+++ b/contracts/ark_starknet/src/executor.cairo
@@ -1,13 +1,11 @@
use ark_common::protocol::order_types::OrderTrait;
use ark_common::protocol::order_types::OrderType;
-use ark_common::protocol::order_v1::{OrderV1, OrderTraitOrderV1};
-use core::serde::Serde;
use starknet::ContractAddress;
-#[derive(Drop, Copy, Debug, Serde, starknet::Store)]
+#[derive(Drop, Copy, Debug)]
struct OrderInfo {
order_type: OrderType,
// Contract address of the currency used on Starknet for the transfer.
@@ -24,24 +22,6 @@ struct OrderInfo {
}
-impl OrderV1IntoOrderInfo of Into {
- fn into(self: OrderV1) -> OrderInfo {
- let order_type = self.validate_order_type().expect('Unsupported Order');
- let token_id = match self.token_id {
- Option::Some(token_id) => token_id,
- Option::None => 0,
- };
- OrderInfo {
- order_type,
- currency_address: self.currency_address,
- token_address: self.token_address,
- token_id: token_id,
- start_amount: self.start_amount,
- offerer: self.offerer,
- }
- }
-}
-
//! Executor contract on Starknet
//!
//! This contract is responsible of executing the orders
@@ -89,7 +69,7 @@ mod executor {
use starknet::{ContractAddress, ClassHash};
- use super::{OrderInfo, OrderV1IntoOrderInfo};
+ use super::OrderInfo;
component!(path: OrderbookComponent, storage: orderbook, event: OrderbookEvent);
@@ -100,8 +80,6 @@ mod executor {
chain_id: felt252,
broker_fees: Map,
ark_fees: FeesRatio,
- // order hash -> OrderInfo
- orders: Map,
// fallback when collection doesn't implement ERC2981
default_receiver: ContractAddress,
default_fees: FeesRatio,
@@ -279,10 +257,6 @@ mod executor {
let vinfo = CreateOrderInfo { order: order.clone() };
_verify_create_order(@self, @vinfo);
- let order_hash = order.compute_order_hash();
- let order_info = order.into();
- self.orders.write(order_hash, order_info);
-
self.orderbook.create_order(order);
}
@@ -359,7 +333,8 @@ mod executor {
let canceller = *(cancel_info.canceller);
assert!(caller == canceller, "Caller is not the canceller");
- let order_info = self.orders.read(*cancel_info.order_hash);
+ let order_info = _get_order_info(self, *cancel_info.order_hash);
+
// default value for ContractAddress is zero
// and an order's currency address shall not be zero
assert!(order_info.currency_address.is_non_zero(), "Order not found");
@@ -372,7 +347,8 @@ mod executor {
let fulfiller = *(fulfill_info.fulfiller);
assert!(caller == fulfiller, "Caller is not the fulfiller");
- let order_info = self.orders.read(*fulfill_info.order_hash);
+ let order_info = _get_order_info(self, *fulfill_info.order_hash);
+
// default value for ContractAddress is zero
// and an order's currency address shall not be zero
if order_info.currency_address.is_zero() {
@@ -487,7 +463,7 @@ mod executor {
) {
let related_order_info = match *(fulfill_info.related_order_hash) {
Option::None => panic!("Fulfill auction order require a related order"),
- Option::Some(related_order_hash) => self.orders.read(related_order_hash),
+ Option::Some(related_order_hash) => _get_order_info(self, related_order_hash),
};
assert!(
@order_info.currency_address == @related_order_info.currency_address,
@@ -771,4 +747,21 @@ mod executor {
creator_fees_amount,
)
}
+
+ fn _get_order_info(self: @ContractState, order_hash: felt252) -> OrderInfo {
+ let order = self.orderbook.get_order(order_hash);
+ let order_type = self.orderbook.get_order_type(order_hash);
+ let token_id = match order.token_id {
+ Option::Some(token_id) => token_id,
+ Option::None => 0,
+ };
+ OrderInfo {
+ order_type,
+ currency_address: order.currency_address,
+ token_address: order.token_address,
+ token_id,
+ start_amount: order.start_amount,
+ offerer: order.offerer,
+ }
+ }
}
diff --git a/contracts/ark_starknet/tests/integration/cancel_order.cairo b/contracts/ark_starknet/tests/integration/cancel_order.cairo
index 88933b5e0..8e71daf9f 100644
--- a/contracts/ark_starknet/tests/integration/cancel_order.cairo
+++ b/contracts/ark_starknet/tests/integration/cancel_order.cairo
@@ -256,7 +256,7 @@ fn test_cancel_offer_order_already_cancelled() {
}
#[test]
-#[should_panic(expected: "Order not found")]
+#[should_panic(expected: 'OB: order not found')]
fn test_cancel_offer_order_bad_order_hash() {
let (executor_address, erc20_address, nft_address) = setup();
let token_id = 10;
diff --git a/contracts/ark_starknet/tests/integration/fulfill_order.cairo b/contracts/ark_starknet/tests/integration/fulfill_order.cairo
index 86baa1b31..c23d362dd 100644
--- a/contracts/ark_starknet/tests/integration/fulfill_order.cairo
+++ b/contracts/ark_starknet/tests/integration/fulfill_order.cairo
@@ -143,7 +143,7 @@ fn test_fulfill_offer_order_fulfiller_not_owner() {
}
#[test]
-#[should_panic(expected: "Order not found")]
+#[should_panic(expected: 'OB: order not found')]
fn test_fulfill_order_not_found() {
let (executor_address, _erc20_address, nft_address) = setup();
let fulfiller = contract_address_const::<'fulfiller'>();