diff --git a/.dockerignore b/.dockerignore index 7f2a82ff5..b085b7a0f 100644 --- a/.dockerignore +++ b/.dockerignore @@ -6,4 +6,3 @@ packages contracts aws skip_examples -target diff --git a/.env.example b/.env.example index 250ead19a..4da077299 100644 --- a/.env.example +++ b/.env.example @@ -1,27 +1,51 @@ -# Starknet accounts -STARKNET_ACCOUNT1_ADDRESS=0x517ececd29116499f4a1b64b094da79ba08dfd54a3edaa316134c41f8160973 -STARKNET_ACCOUNT1_PRIVATE_KEY=0x1800000000300000180000000000030000000000003006001800006600 -STARKNET_ACCOUNT1_PUBLIC_KEY=0x2b191c2f3ecf685a91af7cf72a43e7b90e2e41220175de5c4f7498981b10053 - -STARKNET_ACCOUNT2_ADDRESS=0x5686a647a9cdd63ade617e0baf3b364856b813b508f03903eb58a7e622d5855 -STARKNET_ACCOUNT2_PRIVATE_KEY=0x33003003001800009900180300d206308b0070db00121318d17b5e6262150b -STARKNET_ACCOUNT2_PUBLIC_KEY=0x4c0f884b8e5b4f00d97a3aad26b2e5de0c0c76a555060c837da2e287403c01d - -# Solis accounts -SOLIS_ACCOUNT1_ADDRESS=0x517ececd29116499f4a1b64b094da79ba08dfd54a3edaa316134c41f8160973 -SOLIS_ACCOUNT1_PRIVATE_KEY=0x1800000000300000180000000000030000000000003006001800006600 -SOLIS_ACCOUNT1_PUBLIC_KEY=0x2b191c2f3ecf685a91af7cf72a43e7b90e2e41220175de5c4f7498981b10053 - -SOLIS_ACCOUNT2_ADDRESS=0x5686a647a9cdd63ade617e0baf3b364856b813b508f03903eb58a7e622d5855 -SOLIS_ACCOUNT2_PRIVATE_KEY=0x33003003001800009900180300d206308b0070db00121318d17b5e6262150b -SOLIS_ACCOUNT2_PUBLIC_KEY=0x4c0f884b8e5b4f00d97a3aad26b2e5de0c0c76a555060c837da2e287403c01d - -# Starknet RPC URL -STARKNET_RPC_URL=http://0.0.0.0:5050 -# Solis RPC URL -ARKCHAIN_RPC_URL=http://0.0.0.0:7777 - -# Starknet network -STARKNET_NETWORK_ID=local -# Solis network -SOLIS_NETWORK_ID=local +# Starknet account dev +STARKNET_ADMIN_ADDRESS_DEV=0x517ececd29116499f4a1b64b094da79ba08dfd54a3edaa316134c41f8160973 +STARKNET_ADMIN_PRIVATE_KEY_DEV=0x1800000000300000180000000000030000000000003006001800006600 +STARKNET_ADMIN_PUBLIC_KEY_DEV=0x2b191c2f3ecf685a91af7cf72a43e7b90e2e41220175de5c4f7498981b10053 + +STARKNET_SOLIS_ACCOUNT_ADDRESS_DEV=0x517ececd29116499f4a1b64b094da79ba08dfd54a3edaa316134c41f8160973 +STARKNET_SOLIS_ACCOUNT_PRIVATE_KEY_DEV=0x1800000000300000180000000000030000000000003006001800006600 +STARKNET_SOLIS_ACCOUNT_PUBLIC_KEY_DEV=0x2b191c2f3ecf685a91af7cf72a43e7b90e2e41220175de5c4f7498981b10053 + +# Starknet account goerli +STARKNET_ADMIN_ADDRESS_GOERLI=0x517ececd29116499f4a1b64b094da79ba08dfd54a3edaa316134c41f8160973 +STARKNET_ADMIN_PRIVATE_KEY_GOERLI=0x1800000000300000180000000000030000000000003006001800006600 +STARKNET_ADMIN_PUBLIC_KEY_GOERLI=0x2b191c2f3ecf685a91af7cf72a43e7b90e2e41220175de5c4f7498981b10053 + +STARKNET_SOLIS_ACCOUNT_ADDRESS_GOERLI= +STARKNET_SOLIS_ACCOUNT_PRIVATE_KEY_GOERLI= +STARKNET_SOLIS_ACCOUNT_PUBLIC_KEY_GOERLI= + +# Starknet account mainnet +STARKNET_ADMIN_ADDRESS_MAINNET=0x517ececd29116499f4a1b64b094da79ba08dfd54a3edaa316134c41f8160973 +STARKNET_ADMIN_PRIVATE_KEY_MAINNET=0x1800000000300000180000000000030000000000003006001800006600 +STARKNET_ADMIN_PUBLIC_KEY_MAINNET=0x2b191c2f3ecf685a91af7cf72a43e7b90e2e41220175de5c4f7498981b10053 + +STARKNET_SOLIS_ACCOUNT_ADDRESS_MAINNET= +STARKNET_SOLIS_ACCOUNT_PRIVATE_KEY_MAINNET= +STARKNET_SOLIS_ACCOUNT_PUBLIC_KEY_MAINNET= + +# Solis accounts dev +SOLIS_ADMIN_ADDRESS_DEV=0x517ececd29116499f4a1b64b094da79ba08dfd54a3edaa316134c41f8160973 +SOLIS_ADMIN_PRIVATE_KEY_DEV=0x1800000000300000180000000000030000000000003006001800006600 +SOLIS_ADMIN_PUBLIC_KEY_DEV=0x2b191c2f3ecf685a91af7cf72a43e7b90e2e41220175de5c4f7498981b10053 + +# Solis accounts goerli +SOLIS_ADMIN_ADDRESS_GOERLI=0x517ececd29116499f4a1b64b094da79ba08dfd54a3edaa316134c41f8160973 +SOLIS_ADMIN_PRIVATE_KEY_GOERLI=0x1800000000300000180000000000030000000000003006001800006600 +SOLIS_ADMIN_PUBLIC_KEY_GOERLI=0x2b191c2f3ecf685a91af7cf72a43e7b90e2e41220175de5c4f7498981b10053 + +# Solis accounts mainnet +SOLIS_ADMIN_ADDRESS_MAINNET=0x517ececd29116499f4a1b64b094da79ba08dfd54a3edaa316134c41f8160973 +SOLIS_ADMIN_PRIVATE_KEY_MAINNET=0x1800000000300000180000000000030000000000003006001800006600 +SOLIS_ADMIN_PUBLIC_KEY_MAINNET=0x2b191c2f3ecf685a91af7cf72a43e7b90e2e41220175de5c4f7498981b10053 + +# Starknet RPC +STARKNET_NODE_URL_DEV=http://0.0.0.0:5050 +STARKNET_NODE_URL_GOERLI=https://starknet-testnet.public.blastapi.io +STARKNET_NODE_URL_MAINNET=https://starknet-mainnet.public.blastapi.io + +# Solis RPC +SOLIS_NODE_URL_DEV=http://0.0.0.0:7777 +SOLIS_NODE_URL_GOERLI=staging.solis.arkproject.dev +SOLIS_NODE_URL_MAINNET=https://solis.arkproject.dev diff --git a/.github/workflows/scarb.yml b/.github/workflows/arkproject-contracts.yml similarity index 97% rename from .github/workflows/scarb.yml rename to .github/workflows/arkproject-contracts.yml index b270958a7..8f0b9de9a 100644 --- a/.github/workflows/scarb.yml +++ b/.github/workflows/arkproject-contracts.yml @@ -1,4 +1,4 @@ -name: ArkProject contracts CI +name: ArkProject contracts ci on: push: diff --git a/.github/workflows/release.yml b/.github/workflows/arkproject-release.yml similarity index 75% rename from .github/workflows/release.yml rename to .github/workflows/arkproject-release.yml index f440fcc04..c0fde616a 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/arkproject-release.yml @@ -1,4 +1,4 @@ -name: Bump version +name: ArkProject github release on: push: branches: @@ -12,4 +12,4 @@ jobs: id: tag_version uses: mathieudutour/github-tag-action@v6.1 with: - github_token: ${{ secrets.GITHUB_TOKEN }} \ No newline at end of file + github_token: ${{ secrets.GITHUB_TOKEN }} diff --git a/.github/workflows/ci.yml b/.github/workflows/arkproject-rs.yml similarity index 98% rename from .github/workflows/ci.yml rename to .github/workflows/arkproject-rs.yml index d024d605a..8d85514e2 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/arkproject-rs.yml @@ -1,4 +1,4 @@ -name: ArkProject crate CI +name: ArkProject rs CI on: push: diff --git a/.github/workflows/build-solis.yml b/.github/workflows/build-solis.yml deleted file mode 100644 index 65357ebdc..000000000 --- a/.github/workflows/build-solis.yml +++ /dev/null @@ -1,33 +0,0 @@ -name: Solis Build & Push Image to Amazon ECR - -on: - push: - branches: - - main - # TODO: remove this once merged into main - pull_request: - types: [synchronize, opened, reopened] - -jobs: - build-and-push-solis-image: - runs-on: ubuntu-latest # This specifies the runner environment - steps: - - name: Check out repository - uses: actions/checkout@v2 - - - name: Login to Amazon ECR - id: login-ecr - uses: aws-actions/amazon-ecr-login@v1 - with: - mask-password: true - env: - AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }} - AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }} - AWS_ACCOUNT_ID: ${{ secrets.AWS_ACCOUNT_ID }} - AWS_REGION: ${{ secrets.AWS_REGION }} - - - name: Build Solis, tag, and push image to Amazon ECR - run: | - docker buildx create --use --name ecr-deploy-builder-solis - docker buildx build --tag ${{ secrets.ECR_URL }}:solis-latest --file ./Dockerfile . --load --build-arg EXECUTOR_ADDRESS=${{ secrets.EXECUTOR_ADDRESS }} --build-arg ORDERBOOK_ADDRESS=${{ secrets.ORDERBOOK_ADDRESS }} - docker push ${{ secrets.ECR_URL }}:solis-latest diff --git a/.github/workflows/deploy-solis-stack.yml b/.github/workflows/deploy-solis-stack.yml deleted file mode 100644 index 9a3f0dfa1..000000000 --- a/.github/workflows/deploy-solis-stack.yml +++ /dev/null @@ -1,42 +0,0 @@ -name: Solis Deploy Stack with Custom Environment - -on: - workflow_dispatch: - inputs: - contractAddress: - description: "Contract Address" - required: true - executorAddress: - description: "Executor Address" - required: true - orderbookAddress: - description: "Orderbook Address" - required: true - -jobs: - deploy: - runs-on: ubuntu-latest - steps: - - name: Checkout repository - uses: actions/checkout@v2 - - - name: Set up Node.js - uses: actions/setup-node@v2 - with: - node-version: "14" - - - name: Change to CDK directory - run: cd aws/cdk-solis-ecs - - - name: Install dependencies - run: npm install - - - name: Deploy CDK Stack - env: - RPC_URL: ${{ secrets.RPC_URL }} - SENDER_ADDRESS: ${{ secrets.SENDER_ADDRESS }} - PRIVATE_KEY: ${{ secrets.PRIVATE_KEY }} - CONTRACT_ADDRESS: ${{ github.event.inputs.contractAddress }} - EXECUTOR_ADDRESS: ${{ github.event.inputs.executorAddress }} - ORDERBOOK_ADDRESS: ${{ github.event.inputs.orderbookAddress }} - run: npx cdk deploy --all --require-approval never diff --git a/.github/workflows/solis-deploy.yml b/.github/workflows/solis-deploy.yml new file mode 100644 index 000000000..6227690b9 --- /dev/null +++ b/.github/workflows/solis-deploy.yml @@ -0,0 +1,172 @@ +name: Solis Deploy + +on: + push: + branches: + - main + +jobs: + build-and-push-solis-image: + name: Build and push Solis image to Amazon ECR + runs-on: ubuntu-latest # This specifies the runner environment + steps: + - name: Check out repository + uses: actions/checkout@v2 + + - name: Login to Amazon ECR + id: login-ecr + uses: aws-actions/amazon-ecr-login@v1 + with: + mask-password: true + env: + AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }} + AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }} + AWS_ACCOUNT_ID: ${{ secrets.AWS_ACCOUNT_ID }} + AWS_REGION: ${{ secrets.AWS_REGION }} + + - name: Build Solis, tag, and push image to Amazon ECR + run: | + docker buildx create --use --name ecr-deploy-builder-solis + docker buildx build --tag ${{ secrets.ECR_URL }}:solis-latest --file ./Dockerfile . --load + docker push ${{ secrets.ECR_URL }}:solis-latest + + deploy-starknet: + runs-on: ubuntu-latest + name: Build & Deploy starknet contracts + steps: + - name: Checkout repository + uses: actions/checkout@v2 + + - name: Set up Node.js + uses: actions/setup-node@v2 + with: + node-version: "18" + + - name: Setup Scarb + uses: software-mansion/setup-scarb@v1 + with: + scarb-version: 2.3.1 + + - name: Build contracts + run: | + cd contracts + scarb build --workspace + + - name: Install pnpm & dependencies + run: | + npm install -g pnpm + pnpm install + + - name: Deploy orderbook contracts + env: + STARKNET_NODE_URL_GOERLI: ${{ secrets.STARKNET_NODE_URL_GOERLI }} + SOLIS_NODE_URL_GOERLI: ${{ secrets.SOLIS_NODE_URL_GOERLI }} + STARKNET_ADMIN_ADDRESS_GOERLI: ${{ secrets.STARKNET_ADMIN_ADDRESS_GOERLI }} + STARKNET_ADMIN_PRIVATE_KEY_GOERLI: ${{ secrets.STARKNET_ADMIN_PRIVATE_KEY_GOERLI }} + STARKNET_ADMIN_PUBLIC_KEY_GOERLI: ${{ secrets.STARKNET_ADMIN_PUBLIC_KEY_GOERLI }} + STARKNET_SOLIS_ACCOUNT_ADDRESS_GOERLI: ${{ secrets.STARKNET_SOLIS_ACCOUNT_ADDRESS_GOERLI }} + STARKNET_SOLIS_ACCOUNT_PRIVATE_KEY_GOERLI: ${{ secrets.STARKNET_SOLIS_ACCOUNT_PRIVATE_KEY_GOERLI }} + STARKNET_SOLIS_ACCOUNT_PUBLIC_KEY_GOERLI: ${{ secrets.STARKNET_SOLIS_ACCOUNT_PUBLIC_KEY_GOERLI }} + run: | + pnpm run deploy:starknet -- --starknet goerli + pnpm run deploy:starknet:tokens -- --starknet goerli + + deploy-solis: + # needs: build-and-push-solis-image + name: Deploy Solis latest image to Amazon ECS + runs-on: ubuntu-latest + steps: + - name: Checkout repository + uses: actions/checkout@v2 + + - name: Set up Node.js + uses: actions/setup-node@v2 + with: + node-version: "18" + + - name: Login to Amazon ECR + id: login-ecr + uses: aws-actions/amazon-ecr-login@v1 + with: + mask-password: true + env: + AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }} + AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }} + AWS_ACCOUNT_ID: ${{ secrets.AWS_ACCOUNT_ID }} + AWS_REGION: ${{ secrets.AWS_REGION }} + + - name: Install pnpm + run: | + npm install -g pnpm + npm install -g aws-cdk + pnpm install + + - name: Read environment variables from file + id: vars + run: | + content=`cat contracts.json` + STARKNET_APPCHAIN_MESSAGING_ADDRESS_GOERLI=$(echo $content | jq -r '.goerli.messaging') + echo "STARKNET_APPCHAIN_MESSAGING_ADDRESS_GOERLI=$STARKNET_APPCHAIN_MESSAGING_ADDRESS_GOERLI" >> $GITHUB_ENV + + - name: Install dependencies + run: | + cd aws/cdk-solis-ecs + pnpm install + + - name: Deploy CDK Stack Goerli + env: + AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }} + AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }} + AWS_ACCOUNT_ID: ${{ secrets.AWS_ACCOUNT_ID }} + AWS_REGION: ${{ secrets.AWS_REGION }} + STARKNET_NODE_URL: ${{ secrets.STARKNET_NODE_URL_GOERLI }} + STARKNET_APPCHAIN_MESSAGING_ADDRESS: ${{ env.STARKNET_APPCHAIN_MESSAGING_ADDRESS_GOERLI }} + STARKNET_SOLIS_ACCOUNT_ADDRESS: ${{ secrets.STARKNET_SOLIS_ACCOUNT_ADDRESS_GOERLI }} + STARKNET_SOLIS_ACCOUNT_PRIVATE_KEY: ${{ secrets.STARKNET_SOLIS_ACCOUNT_PRIVATE_KEY_GOERLI }} + run: | + cd aws/cdk-solis-ecs + pnpm cdk deploy --all --require-approval never + + deploy-orderbook: + needs: deploy-solis + runs-on: ubuntu-latest + name: Build & Deploy orderbook contract + steps: + - name: Checkout repository + uses: actions/checkout@v2 + + - name: Set up Node.js + uses: actions/setup-node@v2 + with: + node-version: "18" + + - name: Setup Scarb + uses: software-mansion/setup-scarb@v1 + with: + scarb-version: 2.3.1 + + - name: Build contracts + run: | + cd contracts + scarb build --workspace + + - name: Install pnpm & dependencies + run: | + npm install -g pnpm + pnpm install + + - name: Deploy orderbook contracts + env: + STARKNET_NODE_URL_GOERLI: ${{ secrets.STARKNET_NODE_URL_GOERLI }} + SOLIS_NODE_URL_GOERLI: ${{ secrets.SOLIS_NODE_URL_GOERLI }} + STARKNET_ADMIN_ADDRESS_GOERLI: ${{ secrets.STARKNET_ADMIN_ADDRESS_GOERLI }} + STARKNET_ADMIN_PRIVATE_KEY_GOERLI: ${{ secrets.STARKNET_ADMIN_PRIVATE_KEY_GOERLI }} + STARKNET_ADMIN_PUBLIC_KEY_GOERLI: ${{ secrets.STARKNET_ADMIN_PUBLIC_KEY_GOERLI }} + STARKNET_SOLIS_ACCOUNT_ADDRESS_GOERLI: ${{ secrets.STARKNET_SOLIS_ACCOUNT_ADDRESS_GOERLI }} + STARKNET_SOLIS_ACCOUNT_PRIVATE_KEY_GOERLI: ${{ secrets.STARKNET_SOLIS_ACCOUNT_PRIVATE_KEY_GOERLI }} + STARKNET_SOLIS_ACCOUNT_PUBLIC_KEY_GOERLI: ${{ secrets.STARKNET_SOLIS_ACCOUNT_PUBLIC_KEY_GOERLI }} + SOLIS_ADMIN_ADDRESS_GOERLI: ${{ secrets.SOLIS_ADMIN_ADDRESS_GOERLI }} + SOLIS_ADMIN_PRIVATE_KEY_GOERLI: ${{ secrets.SOLIS_ADMIN_PRIVATE_KEY_GOERLI }} + SOLIS_ADMIN_PUBLIC_KEY_GOERLI: ${{ secrets.SOLIS_ADMIN_PUBLIC_KEY_GOERLI }} + run: | + pnpm run deploy:solis -- --solis goerli --starknet goerli diff --git a/Cargo.lock b/Cargo.lock index 72b236a25..731d7af6f 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -4959,8 +4959,8 @@ dependencies = [ [[package]] name = "katana-core" -version = "0.4.4" -source = "git+https://github.com/ArkProjectNFTs/dojo?tag=v0.1.8-solis#70747dc1a075e44a6a8654078ad251492ad9c16d" +version = "0.4.2" +source = "git+https://github.com/ArkProjectNFTs/dojo?tag=v0.1.7-solis#a62754e441e88b609f7554fd0e881ce1ef909838" dependencies = [ "anyhow", "async-trait", @@ -4991,8 +4991,8 @@ dependencies = [ [[package]] name = "katana-db" -version = "0.4.4" -source = "git+https://github.com/ArkProjectNFTs/dojo?tag=v0.1.8-solis#70747dc1a075e44a6a8654078ad251492ad9c16d" +version = "0.4.2" +source = "git+https://github.com/ArkProjectNFTs/dojo?tag=v0.1.7-solis#a62754e441e88b609f7554fd0e881ce1ef909838" dependencies = [ "anyhow", "blockifier", @@ -5011,8 +5011,8 @@ dependencies = [ [[package]] name = "katana-executor" -version = "0.4.4" -source = "git+https://github.com/ArkProjectNFTs/dojo?tag=v0.1.8-solis#70747dc1a075e44a6a8654078ad251492ad9c16d" +version = "0.4.2" +source = "git+https://github.com/ArkProjectNFTs/dojo?tag=v0.1.7-solis#a62754e441e88b609f7554fd0e881ce1ef909838" dependencies = [ "anyhow", "blockifier", @@ -5028,8 +5028,8 @@ dependencies = [ [[package]] name = "katana-primitives" -version = "0.4.4" -source = "git+https://github.com/ArkProjectNFTs/dojo?tag=v0.1.8-solis#70747dc1a075e44a6a8654078ad251492ad9c16d" +version = "0.4.2" +source = "git+https://github.com/ArkProjectNFTs/dojo?tag=v0.1.7-solis#a62754e441e88b609f7554fd0e881ce1ef909838" dependencies = [ "anyhow", "blockifier", @@ -5047,8 +5047,8 @@ dependencies = [ [[package]] name = "katana-provider" -version = "0.4.4" -source = "git+https://github.com/ArkProjectNFTs/dojo?tag=v0.1.8-solis#70747dc1a075e44a6a8654078ad251492ad9c16d" +version = "0.4.2" +source = "git+https://github.com/ArkProjectNFTs/dojo?tag=v0.1.7-solis#a62754e441e88b609f7554fd0e881ce1ef909838" dependencies = [ "anyhow", "auto_impl", @@ -5064,8 +5064,8 @@ dependencies = [ [[package]] name = "katana-rpc" -version = "0.4.4" -source = "git+https://github.com/ArkProjectNFTs/dojo?tag=v0.1.8-solis#70747dc1a075e44a6a8654078ad251492ad9c16d" +version = "0.4.2" +source = "git+https://github.com/ArkProjectNFTs/dojo?tag=v0.1.7-solis#a62754e441e88b609f7554fd0e881ce1ef909838" dependencies = [ "anyhow", "cairo-lang-starknet", @@ -5094,8 +5094,8 @@ dependencies = [ [[package]] name = "katana-rpc-types" -version = "0.4.4" -source = "git+https://github.com/ArkProjectNFTs/dojo?tag=v0.1.8-solis#70747dc1a075e44a6a8654078ad251492ad9c16d" +version = "0.4.2" +source = "git+https://github.com/ArkProjectNFTs/dojo?tag=v0.1.7-solis#a62754e441e88b609f7554fd0e881ce1ef909838" dependencies = [ "anyhow", "derive_more", @@ -5107,8 +5107,8 @@ dependencies = [ [[package]] name = "katana-rpc-types-builder" -version = "0.4.4" -source = "git+https://github.com/ArkProjectNFTs/dojo?tag=v0.1.8-solis#70747dc1a075e44a6a8654078ad251492ad9c16d" +version = "0.4.2" +source = "git+https://github.com/ArkProjectNFTs/dojo?tag=v0.1.7-solis#a62754e441e88b609f7554fd0e881ce1ef909838" dependencies = [ "anyhow", "katana-executor", diff --git a/Dockerfile b/Dockerfile index fedc51922..97199e2bd 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,12 +1,10 @@ FROM rust:latest # Set the default values for your environment variables -ENV EXECUTOR_ADDRESS="" -ENV ORDERBOOK_ADDRESS="" -ENV RPC_URL="" -ENV CONTRACT_ADDRESS="" -ENV SENDER_ADDRESS="" -ENV PRIVATE_KEY="" +ENV STARKNET_NODE_URL="" +ENV STARKNET_APPCHAIN_MESSAGING_ADDRESS="" +ENV STARKNET_SOLIS_ACCOUNT_ADDRESS="" +ENV STARKNET_SOLIS_ACCOUNT_PRIVATE_KEY="" WORKDIR /app diff --git a/README.md b/README.md index fb957028b..4bfdfb6e9 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,7 @@ # arkproject in 🦀🦀 ## Overview + Rust libraries and binaries related to the ArkProject. This library aims at providing the building block @@ -73,14 +74,17 @@ by Diri. Examples are available in the `example` folder. They can be run with the following command: + ``` RUST_LOG="ark=trace,storage=trace" cargo run --example diri ``` To work on a specific package: + ``` cargo build -p ``` ## License + Ark Project is licensed under the [Apache License](./LICENCE). diff --git a/aws/cdk-solis-ecs/cdk.context.json b/aws/cdk-solis-ecs/cdk.context.json index 012ecc8a2..b69386107 100644 --- a/aws/cdk-solis-ecs/cdk.context.json +++ b/aws/cdk-solis-ecs/cdk.context.json @@ -58,5 +58,49 @@ "hosted-zone:account=223605539824:domainName=arkproject.dev:region=us-east-1": { "Id": "/hostedzone/Z057403917YO7G55AYYF9", "Name": "arkproject.dev." + }, + "vpc-provider:account=223605539824:filter.vpc-id=vpc-0d11f7ec183208e08:region=us-east-1:returnAsymmetricSubnets=true": { + "vpcId": "vpc-0d11f7ec183208e08", + "vpcCidrBlock": "10.0.0.0/16", + "ownerAccountId": "223605539824", + "availabilityZones": [], + "subnetGroups": [ + { + "name": "Public", + "type": "Public", + "subnets": [ + { + "subnetId": "subnet-043e080e03b9f4ba1", + "cidr": "10.0.0.0/18", + "availabilityZone": "us-east-1a", + "routeTableId": "rtb-0ccb49d56b88eb6dd" + }, + { + "subnetId": "subnet-01fb3b6077af7c052", + "cidr": "10.0.64.0/18", + "availabilityZone": "us-east-1b", + "routeTableId": "rtb-09b85c6c9ff862e54" + } + ] + }, + { + "name": "Private", + "type": "Private", + "subnets": [ + { + "subnetId": "subnet-044b09768846a6c22", + "cidr": "10.0.128.0/18", + "availabilityZone": "us-east-1a", + "routeTableId": "rtb-040106c3b806f9c8c" + }, + { + "subnetId": "subnet-0dcdfd6d4b554f5b6", + "cidr": "10.0.192.0/18", + "availabilityZone": "us-east-1b", + "routeTableId": "rtb-01d1f5cc64632ab78" + } + ] + } + ] } } diff --git a/aws/cdk-solis-ecs/lib/cdk-solis-stack.ts b/aws/cdk-solis-ecs/lib/cdk-solis-stack.ts index ee889a555..a2c8e64fd 100644 --- a/aws/cdk-solis-ecs/lib/cdk-solis-stack.ts +++ b/aws/cdk-solis-ecs/lib/cdk-solis-stack.ts @@ -14,7 +14,7 @@ export class CdkSolisStack extends cdk.Stack { // VPC Lookup const vpc = ec2.Vpc.fromLookup(this, "ArkVPC", { - vpcId: "vpc-050257a2b877850af" + vpcId: "vpc-0d11f7ec183208e08" }); // ECS Cluster @@ -53,15 +53,16 @@ export class CdkSolisStack extends cdk.Stack { "solis-latest" ), environment: { - RPC_URL: process.env.RPC_URL || "default_rpc_url", // Fallback to a default if not set - CONTRACT_ADDRESS: - process.env.CONTRACT_ADDRESS || "default_contract_address", - SENDER_ADDRESS: process.env.SENDER_ADDRESS || "default_sender_address", - PRIVATE_KEY: process.env.PRIVATE_KEY || "default_private_key", - EXECUTOR_ADDRESS: - process.env.EXECUTOR_ADDRESS || "default_executor_address", - ORDERBOOK_ADDRESS: - process.env.ORDERBOOK_ADDRESS || "default_orderbook_address" + STARKNET_NODE_URL: process.env.STARKNET_NODE_URL || "default_rpc_url", // Fallback to a default if not set + STARKNET_APPCHAIN_MESSAGING_ADDRESS: + process.env.STARKNET_APPCHAIN_MESSAGING_ADDRESS || + "default_contract_address", + STARKNET_SOLIS_ACCOUNT_ADDRESS: + process.env.STARKNET_SOLIS_ACCOUNT_ADDRESS || + "default_sender_address", + STARKNET_SOLIS_ACCOUNT_PRIVATE_KEY: + process.env.STARKNET_SOLIS_ACCOUNT_PRIVATE_KEY || + "default_private_key" }, memoryLimitMiB: 512, logging diff --git a/contracts.json b/contracts.json index 7d828d092..21a81a6a5 100644 --- a/contracts.json +++ b/contracts.json @@ -1,12 +1,11 @@ { - "goerli": {}, + "goerli": { + "messaging": "0x6b10be5294e691612d2037f652b43d6d754a710c0545ca1d98e7e7dfa71347e", + "executor": "0x51bc267473e65bbbb39ace9460ca344adbeca027a713daef006d7fc7ee20c20", + "orderbook": "0x614b74e442f67f4778dc66a97444b81e3aeffc637be19a6c8530a3af6919d43", + "nftContract": "0x385796f9fb9ef68cd1d2829013ea582ae36f664a3fc36661a412cbd04bdccbd" + }, "sepolia": {}, "mainnet": {}, - "local": { - "messaging": "0x385ac975687520f0b47f16aa619efb454d16c02388fd01b2fc36c7cb9235dc0", - "executor": "0x72edc1c4893cf4288b1f424b677e7f7c791def1c9826b615864821951875186", - "nftContract": "0x7a0d668105724f2db5197b353538af0454dd059cd0282444c22978493cf2acb", - "eth": "0x172ca09df59789985a1dfb68e0f3f554121eb313c68cf391bd78f9bf69abcf", - "orderbook": "0x3b08fc57e1fc53c8545fa799c7af60bf18b9f43dce739c24bf95f2f118da97" - } + "dev": {} } diff --git a/contracts/ark_common/src/protocol/order_types.cairo b/contracts/ark_common/src/protocol/order_types.cairo index 2b214aff9..8a6ca34cf 100644 --- a/contracts/ark_common/src/protocol/order_types.cairo +++ b/contracts/ark_common/src/protocol/order_types.cairo @@ -134,7 +134,7 @@ impl Felt252TryIntoOrderStatus of TryInto { fn try_into(self: felt252) -> Option { if self == 'OPEN' { Option::Some(OrderStatus::Open) - } else if self == 'EXECUTING' { + } else if self == 'EXECUTED' { Option::Some(OrderStatus::Executed) } else if self == 'FULFILLED' { Option::Some(OrderStatus::Fulfilled) diff --git a/contracts/ark_orderbook/README.md b/contracts/ark_orderbook/README.md index d6c37364d..41eb5512c 100644 --- a/contracts/ark_orderbook/README.md +++ b/contracts/ark_orderbook/README.md @@ -5,6 +5,7 @@ This is mainly the orderbook contract with related order data. `asdf` version manangement is used, so you should have `scarb 0.7.0` installed. # Build + To build: `scarb build` diff --git a/contracts/ark_orderbook/src/orderbook.cairo b/contracts/ark_orderbook/src/orderbook.cairo index daa98c9d9..26e303093 100644 --- a/contracts/ark_orderbook/src/orderbook.cairo +++ b/contracts/ark_orderbook/src/orderbook.cairo @@ -8,8 +8,6 @@ use ark_common::protocol::order_types::{FulfillInfo, OrderType, CancelInfo, OrderStatus}; use ark_common::crypto::signer::{SignInfo, Signer, SignerValidator}; use ark_orderbook::order::order_v1::OrderV1; -use debug::PrintTrait; - /// Orderbook trait to define operations on orderbooks. #[starknet::interface] @@ -209,6 +207,8 @@ mod orderbook { struct OrderExecuted { #[key] order_hash: felt252, + #[key] + order_status: OrderStatus, // info: ExecutionInfo, } @@ -260,8 +260,9 @@ mod orderbook { ) { // Solis already checks that ALL the messages are coming from the executor contract. // TODO: anyway, it can be useful to have an extra check here. - - order_status_write(info.order_hash, OrderStatus::Fulfilled); + order_status_write(info.order_hash, OrderStatus::Executed); + let order_status = order_status_read(info.order_hash).unwrap(); + self.emit(OrderExecuted { order_hash: info.order_hash, order_status: order_status }); } // ************************************************************************* diff --git a/contracts/ark_starknet/src/appchain_messaging.cairo b/contracts/ark_starknet/src/appchain_messaging.cairo index 85cddec9b..5a7dd1a84 100644 --- a/contracts/ark_starknet/src/appchain_messaging.cairo +++ b/contracts/ark_starknet/src/appchain_messaging.cairo @@ -349,7 +349,6 @@ mod appchain_messaging { self.appchain_account.read() == starknet::get_caller_address(), 'Unauthorized executor', ); - match starknet::call_contract_syscall(to_address, selector, payload) { Result::Ok(span) => self .emit(MessageExecuted { from_address, to_address, selector, payload, }), @@ -358,4 +357,3 @@ mod appchain_messaging { } } } - diff --git a/crates/solis/.gitignore b/crates/solis/.gitignore new file mode 100644 index 000000000..4f2634eb8 --- /dev/null +++ b/crates/solis/.gitignore @@ -0,0 +1,2 @@ +messaging.goerli.json +messaging.json diff --git a/crates/solis/Cargo.toml b/crates/solis/Cargo.toml index 416b52f33..b2e99ce5d 100644 --- a/crates/solis/Cargo.toml +++ b/crates/solis/Cargo.toml @@ -95,12 +95,12 @@ warp = "0.3" # katana-core = { path = "../../../dojo/crates/katana/core", features = ["messaging", "starknet-messaging"] } # katana-rpc = { path = "../../../dojo/crates/katana/rpc" } -katana-core = { git = "https://github.com/ArkProjectNFTs/dojo", tag = "v0.1.8-solis", features = [ +katana-core = { git = "https://github.com/ArkProjectNFTs/dojo", tag = "v0.1.7-solis", features = [ "messaging", "starknet-messaging", ] } -katana-rpc = { git = "https://github.com/ArkProjectNFTs/dojo", tag = "v0.1.8-solis" } -katana-primitives = { git = "https://github.com/ArkProjectNFTs/dojo", tag = "v0.1.8-solis" } +katana-rpc = { git = "https://github.com/ArkProjectNFTs/dojo", tag = "v0.1.7-solis" } +katana-primitives = { git = "https://github.com/ArkProjectNFTs/dojo", tag = "v0.1.7-solis" } cainome = { git = "https://github.com/cartridge-gg/cainome", tag = "v0.1.5", features = [ "abigen-rs", diff --git a/crates/solis/messaging.goerli.json b/crates/solis/messaging.goerli.json deleted file mode 100644 index ede8e096c..000000000 --- a/crates/solis/messaging.goerli.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "chain": "starknet", - "rpc_url": "https://starknet-testnet.public.blastapi.io", - "contract_address": "0x64a04c3ee9e946b536d9f52f0a30d1666085c6fafffbcaea489a5d326b58bd7", - "sender_address": "0x06959eecd6f73e2b9ddc9fea265743f4d2b28b50ef66a17164206d2eab486fba", - "private_key": "0x1ef55cf93ce9d2835be9d15cc17d496a0ce1db26e2c59fb8e35d87483ec84cc", - "interval": 2, - "from_block": 0 -} diff --git a/crates/solis/messaging.json b/crates/solis/messaging.json deleted file mode 100644 index c8bf917dc..000000000 --- a/crates/solis/messaging.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "chain": "starknet", - "rpc_url": "", - "contract_address": "", - "sender_address": "", - "private_key": "", - "interval": 2, - "from_block": 0 -} diff --git a/crates/solis/messaging.local.json b/crates/solis/messaging.local.json index e81b2abfd..8feaa1220 100644 --- a/crates/solis/messaging.local.json +++ b/crates/solis/messaging.local.json @@ -1,9 +1,9 @@ { "chain": "starknet", "rpc_url": "http://127.0.0.1:5050", - "contract_address": "0x385ac975687520f0b47f16aa619efb454d16c02388fd01b2fc36c7cb9235dc0", - "sender_address": "0x765149d6bc63271df7b0316537888b81aa021523f9516a05306f10fd36914da", - "private_key": "0x1c9053c053edf324aec366a34c6901b1095b07af69495bffec7d7fe21effb1b", + "contract_address": "0x45801fa380b09278abebacde1c528faa2392267e398ddaea3f29f798b6ba4db", + "sender_address": "0x5686a647a9cdd63ade617e0baf3b364856b813b508f03903eb58a7e622d5855", + "private_key": "0x33003003001800009900180300d206308b0070db00121318d17b5e6262150b", "interval": 2, "from_block": 0 } \ No newline at end of file diff --git a/crates/solis/src/args.rs b/crates/solis/src/args.rs index 9979871c2..3d19d1cb6 100644 --- a/crates/solis/src/args.rs +++ b/crates/solis/src/args.rs @@ -156,7 +156,6 @@ impl KatanaArgs { total_accounts: self.starknet.total_accounts, seed: parse_seed(&self.starknet.seed), disable_fee: true, - disable_validate: false, fork_rpc_url: None, fork_block_number: None, env: Environment { diff --git a/entrypoint.sh b/entrypoint.sh index 500484b7d..0193b06c2 100644 --- a/entrypoint.sh +++ b/entrypoint.sh @@ -5,12 +5,12 @@ cat >crates/solis/messaging.json <=18" }, "dependencies": { - "@ianvs/prettier-plugin-sort-imports": "^4.1.1" + "@ianvs/prettier-plugin-sort-imports": "^4.1.1", + "dotenv-cli": "^7.3.0" } } diff --git a/packages/core/.env.example b/packages/core/.env.example index 8832bd4d4..ece45417b 100644 --- a/packages/core/.env.example +++ b/packages/core/.env.example @@ -4,9 +4,9 @@ STARKNET_RPC_URL=http://0.0.0.0:5050 ARKCHAIN_RPC_URL=http://0.0.0.0:7777 # Starknet accounts -STARKNET_ACCOUNT1_ADDRESS=0x517ececd29116499f4a1b64b094da79ba08dfd54a3edaa316134c41f8160973 -STARKNET_ACCOUNT1_PRIVATE_KEY=0x1800000000300000180000000000030000000000003006001800006600 -STARKNET_ACCOUNT1_PUBLIC_KEY=0x2b191c2f3ecf685a91af7cf72a43e7b90e2e41220175de5c4f7498981b10053 +STARKNET_ACCOUNT1_ADDRESS=0x765149d6bc63271df7b0316537888b81aa021523f9516a05306f10fd36914da +STARKNET_ACCOUNT1_PRIVATE_KEY=0x1c9053c053edf324aec366a34c6901b1095b07af69495bffec7d7fe21effb1b +STARKNET_ACCOUNT1_PUBLIC_KEY=0x4c339f18b9d1b95b64a6d378abd1480b2e0d5d5bd33cd0828cbce4d65c27284 STARKNET_ACCOUNT2_ADDRESS=0x5686a647a9cdd63ade617e0baf3b364856b813b508f03903eb58a7e622d5855 STARKNET_ACCOUNT2_PRIVATE_KEY=0x33003003001800009900180300d206308b0070db00121318d17b5e6262150b diff --git a/packages/core/examples/fulfillListing.ts b/packages/core/examples/fulfillListing.ts index 9b5661d1c..85305218c 100644 --- a/packages/core/examples/fulfillListing.ts +++ b/packages/core/examples/fulfillListing.ts @@ -13,13 +13,15 @@ import { type BigNumberish } from "starknet"; +import "dotenv/config"; + import { createAccount, fetchOrCreateAccount } from "../src/actions/account/account"; import { approveERC20, approveERC721 } from "../src/actions/contract"; import { createListing, fulfillListing } from "../src/actions/order"; -import { getOrderHash, getOrderStatus } from "../src/actions/read"; +import { getOrderStatus } from "../src/actions/read"; import { STARKNET_ETH_ADDRESS, STARKNET_EXECUTOR_ADDRESS, @@ -59,18 +61,14 @@ async function freeMint( * @param {RpcProvider} provider - The RPC provider instance. */ (async (arkProvider: RpcProvider, starknetProvider: RpcProvider) => { - console.log("=> process.env.ARKCHAIN_RPC_URL", process.env.ARKCHAIN_RPC_URL); - // Create a new account for the listing using the provider const { account: arkAccount } = await createAccount(arkProvider); - console.log("STARKNET_NFT_ADDRESS:", STARKNET_NFT_ADDRESS); - // Define the order details let order: ListingV1 = { brokerId: 123, // The broker ID tokenAddress: STARKNET_NFT_ADDRESS, // The token address - tokenId: 5, // The ID of the token + tokenId: Math.floor(Math.random() * 10000) + 1, // The ID of the token startAmount: 100000000000000000 // The starting amount for the order }; @@ -80,12 +78,13 @@ async function freeMint( process.env.STARKNET_ACCOUNT1_PRIVATE_KEY ); - console.log("Minting token...", STARKNET_NFT_ADDRESS); + console.log("=> Minting token at contract address: ", STARKNET_NFT_ADDRESS); await freeMint(starknetProvider, starknetOffererAccount, order.tokenId); console.log( - `Approving token ${order.tokenId} to ${STARKNET_EXECUTOR_ADDRESS}...` + `=> Approving token ${order.tokenId} to ${STARKNET_EXECUTOR_ADDRESS}` ); + await approveERC721( starknetProvider, starknetOffererAccount, @@ -94,44 +93,41 @@ async function freeMint( order.tokenId ); - console.log("Creating listing..."); + console.log("=> Creating listing..."); // Create the listing on the arkchain using the order details - await createListing(arkProvider, starknetOffererAccount, arkAccount, order); + const orderHash = await createListing( + arkProvider, + starknetOffererAccount, + arkAccount, + order + ); // wait 5 seconds for the transaction to be processed await new Promise((resolve) => setTimeout(resolve, 2000)); - // Get the order hash - const { orderHash } = await getOrderHash( - order.tokenId, - order.tokenAddress, - arkProvider - ); - - // let { orderStatus: orderStatusBefore } = await getOrderStatus( - // orderHash, - // arkProvider - // ); - const starknetFulfillerAccount = await fetchOrCreateAccount( starknetProvider, process.env.STARKNET_ACCOUNT2_ADDRESS, process.env.STARKNET_ACCOUNT2_PRIVATE_KEY ); - const mintErc20Result = await starknetFulfillerAccount.execute({ - contractAddress: STARKNET_ETH_ADDRESS, - entrypoint: "mint", - calldata: CallData.compile({ - recipient: starknetFulfillerAccount.address, - amount: cairo.uint256(1000000000000000000) - }) - }); - - console.log("mintResult", mintErc20Result); + if (process.env.STARKNET_NETWORK_ID === "dev") { + console.log("=> Minting ERC20..."); + const mintErc20Result = await starknetFulfillerAccount.execute({ + contractAddress: STARKNET_ETH_ADDRESS, + entrypoint: "mint", + calldata: CallData.compile({ + recipient: starknetFulfillerAccount.address, + amount: cairo.uint256(1000000000000000000) + }) + }); - await starknetProvider.waitForTransaction(mintErc20Result.transaction_hash); + await starknetProvider.waitForTransaction(mintErc20Result.transaction_hash); + } + console.log( + `=> Approuving ERC20 tokens ${STARKNET_ETH_ADDRESS} from minter: ${starknetFulfillerAccount.address} to ${STARKNET_EXECUTOR_ADDRESS}` + ); await approveERC20( starknetProvider, starknetFulfillerAccount, @@ -140,25 +136,32 @@ async function freeMint( BigInt(order.startAmount) + BigInt(1) ); - // Define the cancel details + await new Promise((resolve) => setTimeout(resolve, 2000)); + + // Define the fulfill details const fulfill_info = { order_hash: orderHash, token_address: order.tokenAddress, token_id: order.tokenId }; - // Cancel the order + console.log(`=> Fulfilling listing by ${starknetFulfillerAccount.address}`); + // fulfill the order fulfillListing( arkProvider, starknetFulfillerAccount, arkAccount, fulfill_info ); - await new Promise((resolve) => setTimeout(resolve, 2000)); + console.log("=> Waiting for 10 seconds from transaction complete..."); + await new Promise((resolve) => setTimeout(resolve, 10000)); + + console.log("=> Fetching order status..."); let { orderStatus: orderStatusAfter } = await getOrderStatus( orderHash, arkProvider ); + console.log("orderStatus", shortString.decodeShortString(orderStatusAfter)); })(arkProvider, starknetProvider); diff --git a/packages/core/examples/test.ts b/packages/core/examples/test.ts deleted file mode 100644 index 82922a9d5..000000000 --- a/packages/core/examples/test.ts +++ /dev/null @@ -1,87 +0,0 @@ -import * as dotenv from "dotenv"; -import { cairo, CallData, RpcProvider } from "starknet"; - -import { fetchOrCreateAccount } from "../src/actions/account/account"; -import { approveERC20 } from "../src/actions/contract"; -import { - STARKNET_ADMIN_ACCOUNT_ADDRESS, - STARKNET_ETH_ADDRESS, - STARKNET_EXECUTOR_ADDRESS -} from "../src/constants"; - -dotenv.config(); - -const starknetProvider = new RpcProvider({ - nodeUrl: process.env.STARKNET_RPC_URL || "" -}); - -(async () => { - const makerAddress = await fetchOrCreateAccount( - starknetProvider, - process.env.ACCOUNT1_ADDRESS, - process.env.ACCOUNT1_PRIVATE_KEY - ); - - const starknetFulfillerAccount = await fetchOrCreateAccount( - starknetProvider, - process.env.ACCOUNT2_ADDRESS, - process.env.ACCOUNT2_PRIVATE_KEY - ); - - // console.log("Minting ETH..."); - // const mintResult = await starknetFulfillerAccount.execute({ - // contractAddress: STARKNET_ETH_ADDRESS, - // entrypoint: "mint", - // calldata: CallData.compile({ - // recipient: starknetFulfillerAccount.address, - // amount: cairo.uint256(10000000000000000000) - // }) - // }); - // await starknetProvider.waitForTransaction(mintResult.transaction_hash); - - const balanceOf = await starknetFulfillerAccount.callContract({ - contractAddress: STARKNET_ETH_ADDRESS, - entrypoint: "balance_of", - calldata: CallData.compile({ - account: starknetFulfillerAccount.address - }) - }); - - console.log("=> Balance:", balanceOf.result.toString()); - - await approveERC20( - starknetProvider, - starknetFulfillerAccount, - STARKNET_ETH_ADDRESS, - starknetFulfillerAccount.address, - BigInt(100) - ); - - // from => "0x05686a647a9cdd63ade617e0baf3b364856b813b508f03903eb58a7e622d5855", - // to => "0x0517ececd29116499f4a1b64b094da79ba08dfd54a3edaa316134c41f8160973", - // ethContract => "0x0461003257aec8b23c6d338ab1a4a0ea0afb35fae83abd3cd87087b6310644fb" - - // const result = await starknetFulfillerAccount.execute({ - // contractAddress: STARKNET_ETH_ADDRESS, - // entrypoint: "transfer_from", - // calldata: CallData.compile({ - // sender: starknetFulfillerAccount.address, - // recipient: makerAddress.address, - // amount: cairo.uint256(1) - // }) - // }); - - const result = await starknetFulfillerAccount.execute({ - contractAddress: STARKNET_EXECUTOR_ADDRESS, - entrypoint: "swap_eth", - calldata: CallData.compile({ - from: starknetFulfillerAccount.address, - to: makerAddress.address, - amount: cairo.uint256(1), - payment_currency_address: STARKNET_ETH_ADDRESS - }) - }); - - await starknetProvider.waitForTransaction(result.transaction_hash); - console.log("=> done"); -})(); diff --git a/packages/core/src/actions/account/account.ts b/packages/core/src/actions/account/account.ts index 8551dd7a6..2108d7904 100644 --- a/packages/core/src/actions/account/account.ts +++ b/packages/core/src/actions/account/account.ts @@ -38,16 +38,11 @@ export const createAccount = async (provider: RpcProvider) => { 0 ); const account = new Account(provider, address, privateKey); - const { transaction_hash, contract_address } = await account.deployAccount( - { - classHash: accountClassHash, - constructorCalldata: CallData.compile({ publicKey }), - addressSalt: publicKey - }, - { - maxFee: "0x0" - } - ); + const { transaction_hash, contract_address } = await account.deployAccount({ + classHash: accountClassHash, + constructorCalldata: CallData.compile({ publicKey }), + addressSalt: publicKey + }); await provider.waitForTransaction(transaction_hash, { retryInterval: 100 }); diff --git a/packages/core/src/actions/order/_create.ts b/packages/core/src/actions/order/_create.ts index e77f6fbd1..ea762db0c 100644 --- a/packages/core/src/actions/order/_create.ts +++ b/packages/core/src/actions/order/_create.ts @@ -33,12 +33,12 @@ const createOrder = async ( let compiledOrder = CallData.compile({ order }); - let compiletOrderBigInt = compiledOrder.map(BigInt); + let compiledOrderBigInt = compiledOrder.map(BigInt); // Sign the compiled order const TypedOrderData = { message: { - hash: starknet.poseidonHashMany(compiletOrderBigInt).toString() + hash: starknet.poseidonHashMany(compiledOrderBigInt).toString() }, domain: { name: "Ark", diff --git a/packages/core/src/actions/order/_fulfill.ts b/packages/core/src/actions/order/_fulfill.ts index 0bebd2f63..585c17034 100644 --- a/packages/core/src/actions/order/_fulfill.ts +++ b/packages/core/src/actions/order/_fulfill.ts @@ -61,8 +61,6 @@ export const _fulfillOrder = async ( ); const signer = new CairoCustomEnum({ WEIERSTRESS_STARKNET: signInfo }); - console.log("fulfillInfo", fulfillInfo); - let fulfillInfoCalldata = CallData.compile({ fulfill_info: fulfillInfo, signer: signer diff --git a/packages/core/src/actions/order/createListing.ts b/packages/core/src/actions/order/createListing.ts index 5a310cf81..35101a72c 100644 --- a/packages/core/src/actions/order/createListing.ts +++ b/packages/core/src/actions/order/createListing.ts @@ -52,8 +52,6 @@ const createListing = async ( const startDate = baseOrder.startDate || Math.floor(Date.now() / 1000 + 60); const endDate = baseOrder.endDate || Math.floor(currentDate.getTime() / 1000); - console.log("starknetAccount", starknetAccount.address); - // Construct the OrderV1 object from the base order and additional default values const order: OrderV1 = { route: RouteType.Erc721ToErc20, diff --git a/packages/core/src/constants.ts b/packages/core/src/constants.ts index e9adcfddb..dd31f0d81 100644 --- a/packages/core/src/constants.ts +++ b/packages/core/src/constants.ts @@ -1,6 +1,8 @@ import fs from "fs"; import path from "path"; +import "dotenv/config"; + type ContractConfig = { [key: string]: { messaging?: string; @@ -18,14 +20,14 @@ const contracts: ContractConfig = JSON.parse(contractJson); // Get the current networks from environment variables const starknetNetwork = (process.env.STARKNET_NETWORK_ID || - "local") as keyof ContractConfig; + "dev") as keyof ContractConfig; const solisNetwork = (process.env.SOLIS_NETWORK_ID || - "local") as keyof ContractConfig; + "dev") as keyof ContractConfig; // Assign constants based on the current networks -export const STARKNET_ORDER_BOOK_ADDRESS = - contracts[starknetNetwork]?.orderbook || ""; -export const STARKNET_ETH_ADDRESS = contracts[starknetNetwork]?.eth || ""; +export const STARKNET_ETH_ADDRESS = + contracts[starknetNetwork]?.eth || + "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7"; export const STARKNET_NFT_ADDRESS = contracts[starknetNetwork]?.nftContract || ""; export const STARKNET_EXECUTOR_ADDRESS = @@ -37,6 +39,3 @@ export const SOLIS_ORDER_BOOK_ADDRESS = export const SOLIS_ACCOUNT_CLASS_HASH = "0x04d07e40e93398ed3c76981e72dd1fd22557a78ce36c0515f679e27f0bb5bc5f"; - -export const STARKNET_ADMIN_ACCOUNT_ADDRESS = - "0x765149d6bc63271df7b0316537888b81aa021523f9516a05306f10fd36914da"; diff --git a/packages/deployer/README.md b/packages/deployer/README.md index a56db00fd..721dfc34f 100644 --- a/packages/deployer/README.md +++ b/packages/deployer/README.md @@ -1,46 +1,97 @@ -## Update Katana Accounts in Environment Settings +# Using the Deployer -Navigate to the `root` directory and copy the .env.example for your needs +First use case local starknet with local solis -```bash -cp env.example .env -``` +### Environment Settings -## Choose your networks and change the env accordingly +Navigate to the `root` directory and copy the .env.example for your needs, -```bash -STARKNET_NETWORK_ID=local -SOLIS_NETWORK_ID=local -``` +**Warning** env.example use the default katana accounts, if they change you need to update your .env file -## Clear contracts.json File if needed +### Contracts.json file -the contract.json file is a reference of the deployed contract and is used to deploy contracts if empty or upgrade them is it has values +the contract.json file is a reference of the deployed contracts, when working locally you may need to clear it to redeploy the contracts -## Deploy starknet contracts +## Contracts -- Execute the following commands in the `root` directory: +### Starknet - - `pnpm run deploy:starknet:all` +- appchain_messaging - appchain messaging contract to receive & send messages from starknet +- executor - executor contract to execute the messages from the appchain (swap assets) +- nft - nft contract to mint & transfer nft from starknet used as a test contract +- erc20 - erc20 contract to mint & transfer erc20 from starknet used as a test contract only on katana becase base one doesn't support erc20 -## Run Solis with Updated Configuration +### Solis -- Use the following command: +- orderbook - orderbook contract to store the orders - - `RUST_LOG=trace cargo run -p solis -- --messaging ./messaging.local.json --dev` +## Deployer cmd list -- Deploy Solis using: +Execute the following commands in the `root` directory: - - `(core/deployer) pnpm run deploy:solis` +**Deploy all Starknet contracts** -## Update Core SDK constants +`pnpm run deploy:starknet:all` -- Modify the addresses in `packages/core/src/constants.ts` as needed using the root file contract.json +- Using this cmd will clean the contracts.json file +- Deploy all starknet contract: + - appchain_messaging + - executor + - nft + - erc20 -## Use the SDK +**Deploy ArkProject Starknet contracts** --In the (core) directory, run: +`pnpm run deploy:starknet` -```bash -npx ts-node ./examples/fulfillListing.ts -``` +- Deploy starknet contracts: + - appchain_messaging + - executor +- additional args: + - `-sn, --starknet ` - starknet network to deploy on (default: "dev") + +**Deploy Starknet tokens contracts, for testing purpose** + +`pnpm run deploy:starknet:tokens` + +- Deploy starknet contracts: + + - nft + - erc20 + +- additional args: + - `-sn, --starknet ` - starknet network to deploy on (default: "dev") + +**Deploy ArkProject Solis contracts** + +`pnpm run deploy:solis` + +- Deploy solis contracts: + + - orderbook + +- additional args: + - `-sn, --starknet ` - starknet network to deploy on (default: "dev") + - `-so, --solis ` - solis network to deploy on (default: "dev") + +## Running & deploying ArkProject locally + +**Use the following command:** + +Start a katana for starknet + +`katana` + +Deploy all Starknet contracts on katana + +`pnpm run deploy:starknet:all` + +Start Solis + +`RUST_LOG=trace cargo run -p solis -- --messaging ./messaging.local.json --dev` + +**Deploy Solis contracts using:** + +`pnpm run deploy:solis` + +You can now use the SDK locally diff --git a/packages/deployer/src/accounts/deploy.ts b/packages/deployer/src/accounts/deploy.ts index b1846f52c..181ffd7fd 100644 --- a/packages/deployer/src/accounts/deploy.ts +++ b/packages/deployer/src/accounts/deploy.ts @@ -1,19 +1,21 @@ import { promises as fs } from "fs"; import { join } from "path"; -import { Command } from "commander"; -import { Account, CallData, RpcProvider } from "starknet"; +import { program } from "commander"; +import { Account, CallData } from "starknet"; import "dotenv/config"; -import { SOLIS_NETWORK, STARKNET_NETWORK } from "../constants"; -import { getProvider } from "../providers"; +import { getStarknetProvider } from "../providers"; import { OZaccountClassHash } from "./constants"; -async function deployAccount(network: string) { - const { starknetProvider } = getProvider(STARKNET_NETWORK, SOLIS_NETWORK); - - const accountsFilePath = join(__dirname, `../../accounts/${network}.json`); +async function deployAccount(starknetNetwork: string) { + const starknetProvider = getStarknetProvider(starknetNetwork); + console.log("Using StarkNet provider:", starknetProvider.nodeUrl); + const accountsFilePath = join( + __dirname, + `../../accounts/${starknetNetwork}.json` + ); let accounts: any[] = []; try { const fileData = await fs.readFile(accountsFilePath, "utf8"); @@ -29,8 +31,7 @@ async function deployAccount(network: string) { accountToDeploy.privateKey, "1" ); - - const { transaction_hash, contract_address } = await account.deployAccount({ + const { transaction_hash } = await account.deployAccount({ classHash: OZaccountClassHash, constructorCalldata: CallData.compile({ publicKey: accountToDeploy.publicKey @@ -59,12 +60,10 @@ async function deployAccount(network: string) { } } -const program = new Command(); -program.option("-n, --network ", "Network to use", "goerli"); - -program.parse(process.argv); +program.option("-sn, --starknet ", "Starknet Network", "dev"); +program.parse(); const options = program.opts(); -const network = options.network; +const starknetNetwork = options.starknet; -deployAccount(network).catch(console.error); +deployAccount(starknetNetwork); diff --git a/packages/deployer/src/cleanContracts.ts b/packages/deployer/src/cleanContracts.ts index 601678660..b60f255be 100644 --- a/packages/deployer/src/cleanContracts.ts +++ b/packages/deployer/src/cleanContracts.ts @@ -9,7 +9,7 @@ import { getContractsFilePath } from "./utils"; goerli: {}, sepolia: {}, mainnet: {}, - local: {} + dev: {} }) ); })(); diff --git a/packages/deployer/src/constants.ts b/packages/deployer/src/constants.ts index 640bb3485..de6a0f57c 100644 --- a/packages/deployer/src/constants.ts +++ b/packages/deployer/src/constants.ts @@ -1,6 +1 @@ -import { ProviderNetwork } from "./types"; - -export const STARKNET_NETWORK = (process.env.STARKNET_NETWORK_ID || - "local") as ProviderNetwork; -export const SOLIS_NETWORK = (process.env.SOLIS_NETWORK_ID || - "local") as ProviderNetwork; +export const ARTIFACTS_PATH = "../../contracts/target/dev/"; diff --git a/packages/deployer/src/contracts/erc20.ts b/packages/deployer/src/contracts/erc20.ts index 1d267da44..8442c363f 100644 --- a/packages/deployer/src/contracts/erc20.ts +++ b/packages/deployer/src/contracts/erc20.ts @@ -21,17 +21,12 @@ export async function deployERC20( symbol }); - const deployR = await account.declareAndDeploy( - { - contract: artifacts.sierra, - casm: artifacts.casm, - constructorCalldata: contractConstructor, - salt: "1337" - }, - { - maxFee: 0 - } - ); + const deployR = await account.declareAndDeploy({ + contract: artifacts.sierra, + casm: artifacts.casm, + constructorCalldata: contractConstructor, + salt: "1337" + }); if (deployR.declare.transaction_hash) { await provider.waitForTransaction(deployR.declare.transaction_hash); diff --git a/packages/deployer/src/contracts/executor.ts b/packages/deployer/src/contracts/executor.ts index f2e83a89e..96123b8b0 100644 --- a/packages/deployer/src/contracts/executor.ts +++ b/packages/deployer/src/contracts/executor.ts @@ -14,11 +14,15 @@ export async function upgradeExecutor( ) { const artifacts = getArtifacts(artifactsPath); - const { class_hash } = await deployerAccount.declareIfNot({ + const { class_hash, transaction_hash } = await deployerAccount.declareIfNot({ contract: artifacts.sierra, casm: artifacts.casm }); + if (transaction_hash) { + await provider.waitForTransaction(transaction_hash); + } + const { abi } = await provider.getClassAt(contractAddress); if (abi === undefined) { throw new Error("no abi."); diff --git a/packages/deployer/src/contracts/messaging.ts b/packages/deployer/src/contracts/messaging.ts index 2b7881f66..c2cb62a18 100644 --- a/packages/deployer/src/contracts/messaging.ts +++ b/packages/deployer/src/contracts/messaging.ts @@ -18,7 +18,9 @@ export async function upgradeMessaging( casm: artifacts.casm }); - await provider.waitForTransaction(transaction_hash); + if (transaction_hash) { + await provider.waitForTransaction(transaction_hash); + } const { abi } = await provider.getClassAt(contractAddress); if (abi === undefined) { @@ -42,7 +44,8 @@ export async function upgradeMessaging( export async function deployMessaging( artifactsPath: string, deployerAccount: sn.Account, - provider: sn.RpcProvider + provider: sn.RpcProvider, + appChainAccountAddress: string ) { const artifacts = common.loadArtifacts( artifactsPath, @@ -52,7 +55,7 @@ export async function deployMessaging( const contractCallData = new sn.CallData(artifacts.sierra.abi); const contractConstructor = contractCallData.compile("constructor", { owner: deployerAccount.address, - appchain_account: deployerAccount.address + appchain_account: appChainAccountAddress }); const deployR = await deployerAccount.declareAndDeploy({ diff --git a/packages/deployer/src/contracts/orderbook.ts b/packages/deployer/src/contracts/orderbook.ts index e0c958ebe..872ab6e9b 100644 --- a/packages/deployer/src/contracts/orderbook.ts +++ b/packages/deployer/src/contracts/orderbook.ts @@ -14,21 +14,14 @@ export async function deployOrderBook( ): Promise { const artifacts = loadArtifacts(artifactsPath, "ark_orderbook_orderbook"); const contractCallData = new sn.CallData(artifacts.sierra.abi); - const contractConstructor = contractCallData.compile("constructor", { - admin: adminAddress - }); - const deployR = await account.declareAndDeploy( - { - contract: artifacts.sierra, - casm: artifacts.casm, - constructorCalldata: contractConstructor, - salt: "1337" - }, - { - maxFee: 0 - } - ); + const deployR = await account.declareAndDeploy({ + contract: artifacts.sierra, + casm: artifacts.casm, + constructorCalldata: contractCallData.compile("constructor", { + admin: adminAddress + } as sn.RawArgs) + }); if (deployR.declare.transaction_hash) { await provider.waitForTransaction(deployR.declare.transaction_hash); diff --git a/packages/deployer/src/deployArkchainContracts.ts b/packages/deployer/src/deployArkchainContracts.ts index d32fb15df..562c3f4c1 100644 --- a/packages/deployer/src/deployArkchainContracts.ts +++ b/packages/deployer/src/deployArkchainContracts.ts @@ -1,70 +1,31 @@ import { promises as fs } from "fs"; +import { program } from "commander"; import loading from "loading-cli"; -import { SOLIS_NETWORK, STARKNET_NETWORK } from "./constants"; +import { ARTIFACTS_PATH } from "./constants"; import { updateOrderbookAddress } from "./contracts/executor"; import { deployOrderBook, updateExecutorAddress } from "./contracts/orderbook"; -import { getProvider } from "./providers"; +import { getSolisProvider, getStarknetProvider } from "./providers"; +import { setSolisAddresses } from "./solis"; +import { ProviderNetwork } from "./types"; import { getContractsFilePath, - getExistingAccounts, - getExistingContracts + getExistingContracts, + getSolisAccounts, + getStarknetAccounts } from "./utils"; import "dotenv/config"; -const artifactsPath = "../../contracts/target/dev/"; - -async function setSolisAddresses( - orderbookAddress: string, - executorAddress: string +async function deployArkchainContracts( + starknetNetwork: ProviderNetwork, + solisNetwork: ProviderNetwork ) { - const url = process.env.ARKCHAIN_RPC_URL || "http://127.0.0.1:7777"; - const postData = { - jsonrpc: "2.0", - id: "1", - method: "katana_setSolisAddresses", - params: { - addresses: { - orderbook_arkchain: orderbookAddress, - executor_starknet: executorAddress - } - } - }; - - try { - const response = await fetch(url, { - method: "POST", - headers: { - "Content-Type": "application/json" - }, - body: JSON.stringify(postData) - }); - - if (!response.ok) { - throw new Error(`HTTP error! status: ${response.status}`); - } - - await response.json(); - console.log("Ok"); - } catch (error) { - console.error("Error:", error); - } -} - -async function deployArkchainContracts() { - const { solisProvider, starknetProvider } = getProvider( - STARKNET_NETWORK, - SOLIS_NETWORK - ); - - const { starknetAccounts, arkchainAccounts } = getExistingAccounts( - STARKNET_NETWORK, - SOLIS_NETWORK - ); - - const arkchainAdminAccount = arkchainAccounts[0]; + const starknetProvider = getStarknetProvider(starknetNetwork); + const solisProvider = getSolisProvider(solisNetwork); + const { starknetAdminAccount } = getStarknetAccounts(starknetNetwork); + const { arkchainAdminAccount } = getSolisAccounts(solisNetwork); console.log("\nARKCHAIN ACCOUNTS"); console.log("=================\n"); @@ -74,24 +35,22 @@ async function deployArkchainContracts() { console.log("\n"); - const existingContracts = await getExistingContracts(); - const arkchainSpinner = loading("💠 Deploying Arkchain Contracts...").start(); if (arkchainAdminAccount) { const orderbookContract = await deployOrderBook( - artifactsPath, + ARTIFACTS_PATH, arkchainAdminAccount, solisProvider, arkchainAdminAccount.address ); const fileContent = await fs.readFile(getContractsFilePath(), "utf8"); const contracts = JSON.parse(fileContent); - const { executor: executorAddress } = contracts[STARKNET_NETWORK]; + const { executor: executorAddress } = contracts[starknetNetwork]; arkchainSpinner.text = "💠 Updating executor address..."; const existingContracts = await getExistingContracts(); - existingContracts[SOLIS_NETWORK].orderbook = orderbookContract.address; + existingContracts[solisNetwork].orderbook = orderbookContract.address; await fs.writeFile( getContractsFilePath(), JSON.stringify(existingContracts) @@ -106,18 +65,21 @@ async function deployArkchainContracts() { arkchainSpinner.text = "💠 Updating Executor Contract on Starknet..."; - const adminAccount = starknetAccounts[0]; - if (adminAccount) { + if (starknetAdminAccount) { await updateOrderbookAddress( starknetProvider, - adminAccount, + starknetAdminAccount, executorAddress, orderbookContract.address ); } arkchainSpinner.text = "💠 Updating Contracts on solis rpc..."; - await setSolisAddresses(orderbookContract.address, executorAddress); + await setSolisAddresses( + orderbookContract.address, + executorAddress, + solisProvider.nodeUrl + ); arkchainSpinner.stop(); console.log("💠 Arkchain Contracts"); @@ -125,4 +87,12 @@ async function deployArkchainContracts() { } } -deployArkchainContracts(); +program.option("-sn, --starknet ", "Starknet Network", "dev"); +program.option("-so, --solis ", "Solis Network", "dev"); +program.parse(); + +const options = program.opts(); +const starknetNetwork = options.starknet; +const solisNetwork = options.solis; + +deployArkchainContracts(starknetNetwork, solisNetwork); diff --git a/packages/deployer/src/deployStarknetContracts.ts b/packages/deployer/src/deployStarknetContracts.ts index e16ef9b2e..6b4afcab4 100644 --- a/packages/deployer/src/deployStarknetContracts.ts +++ b/packages/deployer/src/deployStarknetContracts.ts @@ -1,127 +1,104 @@ import { promises as fs } from "fs"; -import { join } from "path"; +import { program } from "commander"; import * as sn from "starknet"; -import { SOLIS_NETWORK, STARKNET_NETWORK } from "./constants"; +import { ProviderNetwork } from "./types"; + +import "dotenv/config"; + +import loading from "loading-cli"; + +import { ARTIFACTS_PATH } from "./constants"; import { deployExecutor, upgradeExecutor } from "./contracts/executor"; import { deployMessaging, upgradeMessaging } from "./contracts/messaging"; -import { getFeeAddress, getProvider } from "./providers"; -import { ProviderNetwork } from "./types"; +import { getFeeAddress, getStarknetProvider } from "./providers"; import { getContractsFilePath, - getExistingAccounts, - getExistingContracts + getExistingContracts, + getMessagingFilePath, + getStarknetAccounts } from "./utils"; -const artifactsPath = "../../contracts/target/dev/"; - -const loading = require("loading-cli"); - -function getMessagingFilePath(network: ProviderNetwork): string { - switch (network) { - case "mainnet": - return join(__dirname, "../../../crates/solis/messaging.json"); - case "goerli": - return join(__dirname, "../../../crates/solis/messaging.goerli.json"); - case "sepolia": - return join(__dirname, "../../../crates/solis/messaging.goerli.json"); - case "local": - return join(__dirname, "../../../crates/solis/messaging.local.json"); - default: - return join(__dirname, "../../../crates/solis/messaging.local.json"); - } -} - -async function deployStarknetContracts() { - const { starknetProvider } = getProvider(STARKNET_NETWORK, SOLIS_NETWORK); - const { starknetAccounts } = getExistingAccounts( - STARKNET_NETWORK, - SOLIS_NETWORK - ); - - const [starknetAdminAccount, ...otherUsers] = starknetAccounts; - +async function deployStarknetContracts(starknetNetwork: ProviderNetwork) { + const starknetProvider = getStarknetProvider(starknetNetwork); + const { starknetAdminAccount, starknetSolisAccount } = + getStarknetAccounts(starknetNetwork); const existingContracts = await getExistingContracts(); + console.log("\nSTARKNET ACCOUNTS"); console.log("=================\n"); console.log(`| Admin account | ${starknetAdminAccount.address}`); - if (otherUsers.length > 0) { - otherUsers.forEach((user, index) => { - console.log(`| User ${index} | ${user.address}`); - }); - } - - console.log(""); - const starknetSpinner = loading("💅 Deploying Starknet Contracts...").start(); - let messagingContract: sn.Contract; - if ( - existingContracts[STARKNET_NETWORK].messaging && - !STARKNET_NETWORK.includes("local") - ) { - starknetSpinner.text = "Upgrading Messaging Contract..."; + if (existingContracts[starknetNetwork].messaging) { + console.log("⚡ Upgrading Messaging Contract..."); + starknetSpinner.text = "⚡ Upgrading Messaging Contract..."; messagingContract = await upgradeMessaging( - artifactsPath, + ARTIFACTS_PATH, starknetAdminAccount, starknetProvider, - existingContracts[STARKNET_NETWORK].messaging + existingContracts[starknetNetwork].messaging ); } else { - starknetSpinner.text = "Deploying Messaging Contract..."; + console.log("⚡ Deploying Messaging Contract..."); + starknetSpinner.text = "⚡ Deploying Messaging Contract..."; messagingContract = await deployMessaging( - artifactsPath, + ARTIFACTS_PATH, starknetAdminAccount, - starknetProvider + starknetProvider, + starknetSolisAccount?.address || "" ); - existingContracts[STARKNET_NETWORK].messaging = messagingContract.address; + existingContracts[starknetNetwork].messaging = messagingContract.address; await fs.writeFile( getContractsFilePath(), JSON.stringify(existingContracts) ); } - starknetSpinner.text = "⚡ Deploying Executor Contract..."; let executorContract: sn.Contract; - if ( - existingContracts[STARKNET_NETWORK].executor && - !STARKNET_NETWORK.includes("local") - ) { + if (existingContracts[starknetNetwork].executor) { + console.log("⚡ Upgrading Executor Contract.."); starknetSpinner.text = "⚡ Upgrading Executor Contract..."; executorContract = await upgradeExecutor( - artifactsPath, + ARTIFACTS_PATH, starknetAdminAccount, starknetProvider, - existingContracts[STARKNET_NETWORK].messaging + existingContracts[starknetNetwork].executor ); } else { + starknetSpinner.text = "⚡ Deploying Executor Contract..."; starknetSpinner.text = "⚡ Deploying Executor Contract..."; executorContract = await deployExecutor( - artifactsPath, + ARTIFACTS_PATH, starknetAdminAccount, starknetProvider, - getFeeAddress(STARKNET_NETWORK), + getFeeAddress(starknetNetwork), messagingContract.address ); - existingContracts[STARKNET_NETWORK].executor = executorContract.address; + existingContracts[starknetNetwork].executor = executorContract.address; await fs.writeFile( getContractsFilePath(), JSON.stringify(existingContracts) ); - - const messagingFilePath = getMessagingFilePath(STARKNET_NETWORK); + const messagingFilePath = getMessagingFilePath(starknetNetwork); const configData = JSON.parse(await fs.readFile(messagingFilePath, "utf8")); configData.contract_address = messagingContract.address; + configData.sender_address = starknetSolisAccount?.address; + configData.private_key = starknetSolisAccount?.privateKey; await fs.writeFile(messagingFilePath, JSON.stringify(configData, null, 2)); } - starknetSpinner.stop(); - console.log("STARKNET CONTRACTS"); console.log("==================\n"); console.log(`| Messaging contract | ${messagingContract.address}`); console.log(`| Executor contract | ${executorContract.address}`); } -deployStarknetContracts(); +program.option("-sn, --starknet ", "Starknet Network", "dev"); +program.parse(); + +const options = program.opts(); +const starknetNetwork = options.starknet; + +deployStarknetContracts(starknetNetwork); diff --git a/packages/deployer/src/deployStarknetFreemintNft.ts b/packages/deployer/src/deployStarknetFreemintNft.ts index 821f5f04e..ce9843e8a 100644 --- a/packages/deployer/src/deployStarknetFreemintNft.ts +++ b/packages/deployer/src/deployStarknetFreemintNft.ts @@ -1,43 +1,34 @@ import { promises as fs } from "fs"; -import { Account, CallData, Contract, RpcProvider } from "starknet"; +import { program } from "commander"; +import loading from "loading-cli"; +import { CallData, Contract } from "starknet"; -import { SOLIS_NETWORK, STARKNET_NETWORK } from "./constants"; +import { ARTIFACTS_PATH } from "./constants"; import { loadArtifacts } from "./contracts/common"; import { deployERC20 } from "./contracts/erc20"; -import { getProvider } from "./providers"; +import { getStarknetProvider } from "./providers"; +import { ProviderNetwork } from "./types"; import { getContractsFilePath, - getExistingAccounts, - getExistingContracts + getExistingContracts, + getStarknetAccounts } from "./utils"; -const loading = require("loading-cli"); -const artifactsPath = "../../contracts/target/dev/"; - -export async function deployStarknetContracts() { - const { starknetProvider } = getProvider(STARKNET_NETWORK, SOLIS_NETWORK); - const { starknetAccounts } = getExistingAccounts( - STARKNET_NETWORK, - SOLIS_NETWORK - ); - const [starknetAdminAccount, ...otherUsers] = starknetAccounts; - +export async function deployStarknetContracts( + starknetNetwork: ProviderNetwork +) { + const starknetProvider = getStarknetProvider(starknetNetwork); + const { starknetAdminAccount } = getStarknetAccounts(starknetNetwork); let existingContracts = await getExistingContracts(); console.log("\nSTARKNET ACCOUNTS"); console.log("=================\n"); console.log(`| Admin account | ${starknetAdminAccount.address}`); - if (otherUsers.length > 0) { - otherUsers.forEach((user, index) => { - console.log(`| User ${index} | ${user.address}`); - }); - } - console.log(""); const starknetSpinner = loading("Deploying Nft Contract...").start(); - const artifacts = loadArtifacts(artifactsPath, "ark_tokens_FreeMintNFT"); + const artifacts = loadArtifacts(ARTIFACTS_PATH, "ark_tokens_FreeMintNFT"); const contractCallData = new CallData(artifacts.sierra.abi); const contractConstructor = contractCallData.compile("constructor", { @@ -59,8 +50,8 @@ export async function deployStarknetContracts() { existingContracts = { ...existingContracts, - [STARKNET_NETWORK]: { - ...existingContracts[STARKNET_NETWORK], + [starknetNetwork]: { + ...existingContracts[starknetNetwork], nftContract: nftContract.address } }; @@ -68,11 +59,11 @@ export async function deployStarknetContracts() { await fs.writeFile(getContractsFilePath(), JSON.stringify(existingContracts)); let ethContract: Contract | undefined; - if (STARKNET_NETWORK === "local") { + if (starknetNetwork === "dev") { starknetSpinner.text = "Deploying Eth Contract..."; ethContract = await deployERC20( - artifactsPath, + ARTIFACTS_PATH, starknetAdminAccount, starknetProvider, "ETH", @@ -81,8 +72,8 @@ export async function deployStarknetContracts() { existingContracts = { ...existingContracts, - [STARKNET_NETWORK]: { - ...existingContracts[STARKNET_NETWORK], + [starknetNetwork]: { + ...existingContracts[starknetNetwork], eth: ethContract.address } }; @@ -100,4 +91,10 @@ export async function deployStarknetContracts() { } } -deployStarknetContracts(); +program.option("-sn, --starknet ", "Starknet Network", "dev"); +program.parse(); + +const options = program.opts(); +const starknetNetwork = options.starknet; + +deployStarknetContracts(starknetNetwork); diff --git a/packages/deployer/src/providers.ts b/packages/deployer/src/providers.ts index 8ec9ea9ff..bb844809e 100644 --- a/packages/deployer/src/providers.ts +++ b/packages/deployer/src/providers.ts @@ -1,51 +1,51 @@ import { RpcProvider } from "starknet"; -export function getProvider(solisNetwork: string, starknetNetwork: string) { - let solisNodeUrl: string; +export function getStarknetProvider(starknetNetwork: string) { let starknetNodeUrl: string; - - switch (solisNetwork) { - case "local": - solisNodeUrl = "http://0.0.0.0:7777"; + switch (starknetNetwork) { + case "dev": + starknetNodeUrl = process.env.STARKNET_NODE_URL_DEV || ""; break; case "mainnet": - solisNodeUrl = - process.env.MAINNET_SOLIS_NODE_URL ?? "default_mainnet_solis_url"; // Replace with default or throw error if not set + starknetNodeUrl = process.env.STARKNET_NODE_URL_MAINNET || ""; break; - case "testnet": - solisNodeUrl = - process.env.TESTNET_SOLIS_NODE_URL ?? "default_testnet_solis_url"; // Replace with default or throw error if not set + case "goerli": + starknetNodeUrl = process.env.STARKNET_NODE_URL_GOERLI || ""; break; default: - throw new Error(`Unsupported solisNetwork: ${solisNetwork}`); + throw new Error(`Unsupported starknetNetwork: ${starknetNetwork}`); } - switch (starknetNetwork) { - case "local": - starknetNodeUrl = "http://0.0.0.0:5050"; + return new RpcProvider({ nodeUrl: starknetNodeUrl }); +} + +export function getSolisProvider(solisNetwork?: string) { + let solisNodeUrl: string; + switch (solisNetwork) { + case "dev": + solisNodeUrl = process.env.SOLIS_NODE_URL_DEV || ""; break; case "mainnet": - starknetNodeUrl = - process.env.MAINNET_STARKNET_NODE_URL ?? "default_mainnet_starknet_url"; // Replace with default or throw error if not set + solisNodeUrl = process.env.SOLIS_NODE_URL_MAINNET || ""; break; - case "testnet": - starknetNodeUrl = - process.env.TESTNET_STARKNET_NODE_URL ?? "default_testnet_starknet_url"; // Replace with default or throw error if not set + case "goerli": + solisNodeUrl = process.env.SOLIS_NODE_URL_GOERLI || ""; break; default: - throw new Error(`Unsupported starknetNetwork: ${starknetNetwork}`); + throw new Error(`Unsupported solisNetwork: ${solisNetwork}`); } - const solisProvider = new RpcProvider({ nodeUrl: solisNodeUrl }); - const starknetProvider = new RpcProvider({ nodeUrl: starknetNodeUrl }); - - return { solisProvider, starknetProvider }; + return new RpcProvider({ nodeUrl: solisNodeUrl }); } export function getFeeAddress(network: string) { switch (network) { - case "katana": + case "dev": return "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7"; + case "goerli": + return "0x049d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7"; + case "mainnet": + return "0x049d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7"; default: return "0x049d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7"; } diff --git a/packages/deployer/src/solis.ts b/packages/deployer/src/solis.ts new file mode 100644 index 000000000..4f65cdda6 --- /dev/null +++ b/packages/deployer/src/solis.ts @@ -0,0 +1,37 @@ +export async function setSolisAddresses( + orderbookAddress: string, + executorAddress: string, + nodeUrl: string +) { + const url = nodeUrl; + const postData = { + jsonrpc: "2.0", + id: "1", + method: "katana_setSolisAddresses", + params: { + addresses: { + orderbook_arkchain: orderbookAddress, + executor_starknet: executorAddress + } + } + }; + + try { + const response = await fetch(url, { + method: "POST", + headers: { + "Content-Type": "application/json" + }, + body: JSON.stringify(postData) + }); + + if (!response.ok) { + throw new Error(`HTTP error! status: ${response.status}`); + } + + await response.json(); + console.log("Ok"); + } catch (error) { + console.error("Error:", error); + } +} diff --git a/packages/deployer/src/types.ts b/packages/deployer/src/types.ts index 7afef46c2..a0dd5b00f 100644 --- a/packages/deployer/src/types.ts +++ b/packages/deployer/src/types.ts @@ -1 +1 @@ -export type ProviderNetwork = "mainnet" | "goerli" | "sepolia" | "local"; +export type ProviderNetwork = "mainnet" | "goerli" | "sepolia" | "dev"; diff --git a/packages/deployer/src/utils.ts b/packages/deployer/src/utils.ts deleted file mode 100644 index df34fdb21..000000000 --- a/packages/deployer/src/utils.ts +++ /dev/null @@ -1,97 +0,0 @@ -import { promises as fs } from "fs"; -import { join } from "path"; - -import { Account, RpcProvider } from "starknet"; - -import { getProvider } from "./providers"; -import { ProviderNetwork } from "./types"; - -export function getExistingAccounts( - starknetNetwork: ProviderNetwork, - solisNetwork: ProviderNetwork -) { - const { solisProvider, starknetProvider } = getProvider( - starknetNetwork, - solisNetwork - ); - - const starknetAccounts = [ - { - address: - process.env.STARKNET_ACCOUNT1_ADDRESS || - "0x517ececd29116499f4a1b64b094da79ba08dfd54a3edaa316134c41f8160973", - privateKey: - process.env.STARKNET_ACCOUNT1_PRIVATE_KEY || - "0x1800000000300000180000000000030000000000003006001800006600", - publicKey: - process.env.STARKNET_ACCOUNT1_PUBLIC_KEY || - "0x2b191c2f3ecf685a91af7cf72a43e7b90e2e41220175de5c4f7498981b10053", - deployed: true - }, - { - address: - process.env.STARKNET_ACCOUNT1_PRIVATE_KEY || - "0x5686a647a9cdd63ade617e0baf3b364856b813b508f03903eb58a7e622d5855", - privateKey: - process.env.STARKNET_ACCOUNT1_PRIVATE_KEY || - "0x33003003001800009900180300d206308b0070db00121318d17b5e6262150b", - publicKey: - process.env.STARKNET_ACCOUNT1_PUBLIC_KEY || - "0x4c0f884b8e5b4f00d97a3aad26b2e5de0c0c76a555060c837da2e287403c01d", - deployed: true - } - ]; - - const solisAccounts = [ - { - address: - process.env.SOLIS_ACCOUNT1_ADDRESS || - "0x517ececd29116499f4a1b64b094da79ba08dfd54a3edaa316134c41f8160973", - privateKey: - process.env.SOLIS_ACCOUNT1_PRIVATE_KEY || - "0x1800000000300000180000000000030000000000003006001800006600", - publicKey: - process.env.SOLIS_ACCOUNT1_PUBLIC_KEY || - "0x2b191c2f3ecf685a91af7cf72a43e7b90e2e41220175de5c4f7498981b10053", - deployed: true - }, - { - address: - process.env.SOLIS_ACCOUNT2_ADDRESS || - "0x5686a647a9cdd63ade617e0baf3b364856b813b508f03903eb58a7e622d5855", - privateKey: - process.env.SOLIS_ACCOUNT2_PRIVATE_KEY || - "0x33003003001800009900180300d206308b0070db00121318d17b5e6262150b", - publicKey: - process.env.SOLIS_ACCOUNT2_PUBLIC_KEY || - "0x4c0f884b8e5b4f00d97a3aad26b2e5de0c0c76a555060c837da2e287403c01d", - deployed: true - } - ]; - - return { - starknetAccounts: buildAccounts(starknetProvider, starknetAccounts), - arkchainAccounts: buildAccounts(solisProvider, solisAccounts) - }; -} - -function buildAccounts(provider: RpcProvider, accountData: any[]): Account[] { - return accountData.map(({ address, privateKey }) => { - return new Account(provider, address, privateKey); - }); -} - -export function getContractsFilePath() { - return join(__dirname, `../../../contracts.json`); -} - -export async function getExistingContracts() { - try { - const fileContent = await fs.readFile(getContractsFilePath(), "utf8"); - const jsonContent = JSON.parse(fileContent); - return jsonContent; - } catch (error) { - console.error("Erreur lors de la lecture du fichier :", error); - throw error; - } -} diff --git a/packages/deployer/src/utils/accounts.ts b/packages/deployer/src/utils/accounts.ts new file mode 100644 index 000000000..282452982 --- /dev/null +++ b/packages/deployer/src/utils/accounts.ts @@ -0,0 +1,38 @@ +import { Account, RpcProvider } from "starknet"; + +import { ProviderNetwork } from "../types"; + +export const getNetworkVarName = ( + network: ProviderNetwork, + type: String, + accountType: string +): string => `${type}_${accountType}_ADDRESS_${network.toUpperCase()}`; + +export const filterAccounts = ( + accounts: { address: string; privateKey: string; publicKey: string }[], + network: ProviderNetwork, + type: string, + accountType: string +): { address: string; privateKey: string; publicKey: string } | undefined => { + return accounts.find((account) => { + const envVarName = getNetworkVarName(network, type, accountType); + const envAddress = process.env[envVarName]; + return account.address === envAddress || network === "dev"; + }); +}; + +export const buildAccounts = ( + provider: RpcProvider, + accountData: + | { + address: string; + privateKey: string; + publicKey: string; + } + | undefined +): Account => { + if (!accountData) { + throw new Error("No account found"); + } + return new Account(provider, accountData.address, accountData.privateKey); +}; diff --git a/packages/deployer/src/utils/contract.ts b/packages/deployer/src/utils/contract.ts new file mode 100644 index 000000000..5fd1d5638 --- /dev/null +++ b/packages/deployer/src/utils/contract.ts @@ -0,0 +1,17 @@ +import { promises as fs } from "fs"; +import { join } from "path"; + +export function getContractsFilePath() { + return join(__dirname, `../../../../contracts.json`); +} + +export async function getExistingContracts() { + try { + const fileContent = await fs.readFile(getContractsFilePath(), "utf8"); + const jsonContent = JSON.parse(fileContent); + return jsonContent; + } catch (error) { + console.error("Error while reading file :", error); + throw error; + } +} diff --git a/packages/deployer/src/utils/index.ts b/packages/deployer/src/utils/index.ts new file mode 100644 index 000000000..7a21083a4 --- /dev/null +++ b/packages/deployer/src/utils/index.ts @@ -0,0 +1,4 @@ +export { getMessagingFilePath } from "./path"; +export { getContractsFilePath, getExistingContracts } from "./contract"; +export { getStarknetAccounts } from "./starknetAccounts"; +export { getSolisAccounts } from "./solisAccounts"; diff --git a/packages/deployer/src/utils/path.ts b/packages/deployer/src/utils/path.ts new file mode 100644 index 000000000..16b0c48f5 --- /dev/null +++ b/packages/deployer/src/utils/path.ts @@ -0,0 +1,18 @@ +import { join } from "path"; + +import { ProviderNetwork } from "../types"; + +export function getMessagingFilePath(network: ProviderNetwork): string { + switch (network) { + case "mainnet": + return join(__dirname, "../../../../crates/solis/messaging.json"); + case "goerli": + return join(__dirname, "../../../../crates/solis/messaging.goerli.json"); + case "sepolia": + return join(__dirname, "../../../../crates/solis/messaging.sepolia.json"); + case "dev": + return join(__dirname, "../../../../crates/solis/messaging.local.json"); + default: + return join(__dirname, "../../../../crates/solis/messaging.local.json"); + } +} diff --git a/packages/deployer/src/utils/solisAccounts.ts b/packages/deployer/src/utils/solisAccounts.ts new file mode 100644 index 000000000..2379a5f87 --- /dev/null +++ b/packages/deployer/src/utils/solisAccounts.ts @@ -0,0 +1,38 @@ +import { getSolisProvider } from "../providers"; +import { ProviderNetwork } from "../types"; +import { buildAccounts, filterAccounts } from "./accounts"; + +import "dotenv/config"; + +export function getSolisAccounts(solisNetwork: ProviderNetwork) { + const solisProvider = getSolisProvider(solisNetwork); + + const solisAdminAccounts = [ + { + address: process.env.SOLIS_ADMIN_ADDRESS_DEV || "", + privateKey: process.env.SOLIS_ADMIN_PRIVATE_KEY_DEV || "", + publicKey: process.env.SOLIS_ADMIN_PUBLIC_KEY_DEV || "" + }, + { + address: process.env.SOLIS_ADMIN_ADDRESS_GOERLI || "", + privateKey: process.env.SOLIS_ADMIN_PRIVATE_KEY_GOERLI || "", + publicKey: process.env.SOLIS_ADMIN_PUBLIC_KEY_GOERLI || "" + }, + { + address: process.env.SOLIS_ADMIN_ADDRESS_MAINNET || "", + privateKey: process.env.SOLIS_ADMIN_PRIVATE_KEY_MAINNET || "", + publicKey: process.env.SOLIS_ADMIN_PUBLIC_KEY_MAINNET || "" + } + ]; + + const filteredSolisAccounts = filterAccounts( + solisAdminAccounts, + solisNetwork, + "SOLIS", + "ADMIN" + ); + + return { + arkchainAdminAccount: buildAccounts(solisProvider, filteredSolisAccounts) + }; +} diff --git a/packages/deployer/src/utils/starknetAccounts.ts b/packages/deployer/src/utils/starknetAccounts.ts new file mode 100644 index 000000000..cc9de314a --- /dev/null +++ b/packages/deployer/src/utils/starknetAccounts.ts @@ -0,0 +1,67 @@ +import { getStarknetProvider } from "../providers"; +import { ProviderNetwork } from "../types"; +import { buildAccounts, filterAccounts } from "./accounts"; + +import "dotenv/config"; + +export function getStarknetAccounts(starknetNetwork: ProviderNetwork) { + const starknetProvider = getStarknetProvider(starknetNetwork); + + const starknetAdminAccounts = [ + { + address: process.env.STARKNET_ADMIN_ADDRESS_DEV || "", + privateKey: process.env.STARKNET_ADMIN_PRIVATE_KEY_DEV || "", + publicKey: process.env.STARKNET_ADMIN_PUBLIC_KEY_DEV || "" + }, + { + address: process.env.STARKNET_ADMIN_ADDRESS_GOERLI || "", + privateKey: process.env.STARKNET_ADMIN_PRIVATE_KEY_GOERLI || "", + publicKey: process.env.STARKNET_ADMIN_PUBLIC_KEY_GOERLI || "" + }, + { + address: process.env.STARKNET_ADMIN_ADDRESS_MAINNET || "", + privateKey: process.env.STARKNET_ADMIN_PRIVATE_KEY_MAINNET || "", + publicKey: process.env.STARKNET_ADMIN_PUBLIC_KEY_MAINNET || "" + } + ]; + + const starknetAppchainAccounts = [ + { + address: process.env.STARKNET_SOLIS_ACCOUNT_ADDRESS_DEV || "", + privateKey: process.env.STARKNET_SOLIS_ACCOUNT_PRIVATE_KEY_DEV || "", + publicKey: process.env.STARKNET_SOLIS_ACCOUNT_PUBLIC_KEY_DEV || "" + }, + { + address: process.env.STARKNET_SOLIS_ACCOUNT_ADDRESS_GOERLI || "", + privateKey: process.env.STARKNET_SOLIS_ACCOUNT_PRIVATE_KEY_GOERLI || "", + publicKey: process.env.STARKNET_SOLIS_ACCOUNT_PUBLIC_KEY_GOERLI || "" + }, + { + address: process.env.STARKNET_SOLIS_ACCOUNT_ADDRESS_MAINNET || "", + privateKey: process.env.STARKNET_SOLIS_ACCOUNT_PRIVATE_KEY_MAINNET || "", + publicKey: process.env.STARKNET_SOLIS_ACCOUNT_PUBLIC_KEY_MAINNET || "" + } + ]; + + const filteredStarknetAccounts = filterAccounts( + starknetAdminAccounts, + starknetNetwork, + "STARKNET", + "ADMIN" + ); + + const filteredStarknetExecutorAccounts = filterAccounts( + starknetAppchainAccounts, + starknetNetwork, + "STARKNET", + "SOLIS_ACCOUNT" + ); + + return { + starknetSolisAccount: filteredStarknetExecutorAccounts, + starknetAdminAccount: buildAccounts( + starknetProvider, + filteredStarknetAccounts + ) + }; +} diff --git a/packages/example/src/app/components/Account.tsx b/packages/example/src/app/components/Account.tsx index 2b3869f7c..3641bf9cc 100644 --- a/packages/example/src/app/components/Account.tsx +++ b/packages/example/src/app/components/Account.tsx @@ -7,7 +7,7 @@ const Account = () => { const { account, address, status } = useAccount(); if (status === "disconnected") return

Disconnected

; - console.log(account); + const signMessage = async () => { if (!account) return; const typedDataValidate: TypedData = { @@ -30,8 +30,6 @@ const Account = () => { } }; const signature = await account.signMessage(typedDataValidate); - console.log(signature); - console.log(account); }; return ( diff --git a/packages/react/components/ArkProvider/RpcContext.tsx b/packages/react/components/ArkProvider/RpcContext.tsx index 73678d135..737c8eb5c 100644 --- a/packages/react/components/ArkProvider/RpcContext.tsx +++ b/packages/react/components/ArkProvider/RpcContext.tsx @@ -57,7 +57,6 @@ export function RpcProviderProvider( !localStorage.getItem("burner_private_key") && !localStorage.getItem("burner_public_key") ) { - console.log("Creating burner account"); createAccount(value.rpcProvider).then( ({ address, privateKey, publicKey }) => { console.log("Burner account created"); diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 4a7ac1e6d..67eeae125 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -1,5 +1,9 @@ lockfileVersion: '6.0' +settings: + autoInstallPeers: true + excludeLinksFromLockfile: false + importers: .: @@ -7,6 +11,9 @@ importers: '@ianvs/prettier-plugin-sort-imports': specifier: ^4.1.1 version: 4.1.1(prettier@3.1.0) + dotenv-cli: + specifier: ^7.3.0 + version: 7.3.0 devDependencies: '@ark-project/eslint-config': specifier: workspace:* @@ -19,7 +26,7 @@ importers: version: 3.1.0 turbo: specifier: latest - version: 1.11.2 + version: 1.11.3 aws/cdk-solis-ecs: dependencies: @@ -50,7 +57,7 @@ importers: version: 29.7.0(@types/node@20.7.1)(ts-node@10.9.1) ts-jest: specifier: ^29.1.1 - version: 29.1.1(jest@29.7.0)(typescript@5.2.2) + version: 29.1.1(@babel/core@7.23.5)(jest@29.7.0)(typescript@5.2.2) ts-node: specifier: ^10.9.1 version: 10.9.1(@types/node@20.7.1)(typescript@5.2.2) @@ -87,6 +94,9 @@ importers: starknet: specifier: 5.22.0 version: 5.22.0 + viem: + specifier: '>=0.3.35' + version: 2.0.0(typescript@5.2.2) devDependencies: '@ark-project/eslint-config': specifier: workspace:* @@ -157,23 +167,23 @@ importers: dependencies: eslint-plugin-unused-imports: specifier: ^3.0.0 - version: 3.0.0(@typescript-eslint/eslint-plugin@6.11.0) + version: 3.0.0(@typescript-eslint/eslint-plugin@6.11.0)(eslint@8.54.0) devDependencies: '@typescript-eslint/eslint-plugin': specifier: ^6.11.0 - version: 6.11.0(@typescript-eslint/parser@6.11.0)(typescript@5.2.2) + version: 6.11.0(@typescript-eslint/parser@6.11.0)(eslint@8.54.0)(typescript@5.2.2) '@typescript-eslint/parser': specifier: ^6.11.0 - version: 6.11.0(typescript@5.2.2) + version: 6.11.0(eslint@8.54.0)(typescript@5.2.2) '@vercel/style-guide': specifier: ^5.1.0 - version: 5.1.0(typescript@5.2.2) + version: 5.1.0(eslint@8.54.0)(prettier@3.1.0)(typescript@5.2.2) eslint-config-prettier: specifier: ^9.0.0 - version: 9.0.0 + version: 9.0.0(eslint@8.54.0) eslint-config-turbo: specifier: ^1.10.12 - version: 1.10.12 + version: 1.10.12(eslint@8.54.0) eslint-plugin-only-warn: specifier: ^1.1.0 version: 1.1.0 @@ -227,7 +237,7 @@ importers: version: 3.2.0(starknet@5.22.0) next: specifier: 14.0.2 - version: 14.0.2(react-dom@18.2.0)(react@18.2.0) + version: 14.0.2(@babel/core@7.23.5)(react-dom@18.2.0)(react@18.2.0) next-themes: specifier: ^0.2.1 version: 0.2.1(next@14.0.2)(react-dom@18.2.0)(react@18.2.0) @@ -322,7 +332,6 @@ packages: /@aashutoshrathi/word-wrap@1.2.6: resolution: {integrity: sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==} engines: {node: '>=0.10.0'} - dev: true /@adraffy/ens-normalize@1.10.0: resolution: {integrity: sha512-nA9XHtlAkYfJxY7bce8DcN7eKxWWCWkU+1GR9d+U6MbNpfwQp8TI7vqOsBsMcHoT4mBu2kypKoSKnghEzOOq5Q==} @@ -377,14 +386,14 @@ packages: '@babel/traverse': 7.23.5 '@babel/types': 7.23.5 convert-source-map: 2.0.0 - debug: 4.3.4 + debug: 4.3.4(supports-color@8.1.1) gensync: 1.0.0-beta.2 json5: 2.2.3 semver: 6.3.1 transitivePeerDependencies: - supports-color - /@babel/eslint-parser@7.23.3(@babel/core@7.23.5): + /@babel/eslint-parser@7.23.3(@babel/core@7.23.5)(eslint@8.54.0): resolution: {integrity: sha512-9bTuNlyx7oSstodm1cR1bECj4fkiknsDa1YniISkJemMY3DGhJNYBECbe6QD/q54mp2J8VO66jW3/7uP//iFCw==} engines: {node: ^10.13.0 || ^12.13.0 || >=14.0.0} peerDependencies: @@ -393,6 +402,7 @@ packages: dependencies: '@babel/core': 7.23.5 '@nicolo-ribaudo/eslint-scope-5-internals': 5.1.1-v1 + eslint: 8.54.0 eslint-visitor-keys: 2.1.0 semver: 6.3.1 dev: true @@ -661,7 +671,7 @@ packages: '@babel/helper-split-export-declaration': 7.22.6 '@babel/parser': 7.23.5 '@babel/types': 7.23.5 - debug: 4.3.4 + debug: 4.3.4(supports-color@8.1.1) globals: 11.12.0 transitivePeerDependencies: - supports-color @@ -674,6 +684,10 @@ packages: '@babel/helper-validator-identifier': 7.22.20 to-fast-properties: 2.0.0 + /@balena/dockerignore@1.0.2: + resolution: {integrity: sha512-wMue2Sy4GAVTk6Ic4tJVcnfdau+gx2EnG7S+uAEe+TWJFqE4YoWN4/H8MSLj4eYJKxGg26lZwboEniNiNwZQ6Q==} + dev: false + /@bcoe/v8-coverage@0.2.3: resolution: {integrity: sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==} dev: true @@ -883,14 +897,6 @@ packages: dev: true optional: true - /@eslint-community/eslint-utils@4.4.0: - resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - peerDependencies: - eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 - dependencies: - eslint-visitor-keys: 3.4.3 - /@eslint-community/eslint-utils@4.4.0(eslint@8.48.0): resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -909,7 +915,6 @@ packages: dependencies: eslint: 8.54.0 eslint-visitor-keys: 3.4.3 - dev: true /@eslint-community/regexpp@4.10.0: resolution: {integrity: sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==} @@ -920,7 +925,7 @@ packages: engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dependencies: ajv: 6.12.6 - debug: 4.3.4 + debug: 4.3.4(supports-color@8.1.1) espree: 9.6.1 globals: 13.23.0 ignore: 5.3.0 @@ -930,7 +935,6 @@ packages: strip-json-comments: 3.1.1 transitivePeerDependencies: - supports-color - dev: true /@eslint/js@8.48.0: resolution: {integrity: sha512-ZSjtmelB7IJfWD2Fvb7+Z+ChTIKWq6kjda95fLcQKNS5aheVHn4IkfgRQE3sIIzTcSLwLcLZUD9UBt+V7+h+Pw==} @@ -940,7 +944,6 @@ packages: /@eslint/js@8.54.0: resolution: {integrity: sha512-ut5V+D+fOoWPgGGNj83GGjnntO39xDy6DWxO0wb7Jp3DcMX0TfIqdzHF85VTQkerdyGmuuMD9AKAo5KiNlf/AQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - dev: true /@floating-ui/core@1.5.2: resolution: {integrity: sha512-Ii3MrfY/GAIN3OhXNzpCKaLxHQfJF9qvwq/kEJYdqDxeIHa01K8sldugal6TmeeXl+WMvhv9cnVzUTaFFJF09A==} @@ -983,20 +986,17 @@ packages: engines: {node: '>=10.10.0'} dependencies: '@humanwhocodes/object-schema': 2.0.1 - debug: 4.3.4 + debug: 4.3.4(supports-color@8.1.1) minimatch: 3.1.2 transitivePeerDependencies: - supports-color - dev: true /@humanwhocodes/module-importer@1.0.1: resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} engines: {node: '>=12.22'} - dev: true /@humanwhocodes/object-schema@2.0.1: resolution: {integrity: sha512-dvuCeX5fC9dXgJn9t+X5atfmgQAzUOWqS1254Gh0m6i8wKd10ebXkfNKiRK+1GWi/yTvvLDHpoxLr0xxxeslWw==} - dev: true /@ianvs/prettier-plugin-sort-imports@4.1.1(prettier@3.1.0): resolution: {integrity: sha512-kJhXq63ngpTQ2dxgf5GasbPJWsJA3LgoOdd7WGhpUSzLgLgI4IsIzYkbJf9kmpOHe7Vdm/o3PcRA3jmizXUuAQ==} @@ -1401,6 +1401,11 @@ packages: engines: {node: '>= 16'} dev: false + /@noble/hashes@1.3.3: + resolution: {integrity: sha512-V7/fPHgl+jsVPXqqeOzT8egNj2iBIVt+ECeMMG8TdcnTikP3oaBtUVqpT/gYCR68aEBJSF+XbYUxStjbFMqIIA==} + engines: {node: '>= 16'} + dev: false + /@nodelib/fs.scandir@2.1.5: resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} engines: {node: '>= 8'} @@ -2079,8 +2084,23 @@ packages: resolution: {integrity: sha512-2/U3GXA6YiPYQDLGwtGlnNgKYBSwCFIHf8Y9LUY5VATHdtbLlU0Y1R3QoBnT0aB4qv/BEiVVsj7LJXoQCgJ2vA==} dev: true - /@scure/base@1.1.3: - resolution: {integrity: sha512-/+SgoRjLq7Xlf0CWuLHq2LUZeL/w65kfzAPG5NH9pcmBhs+nunQTn4gvdwgMTIXnt9b2C/1SeL2XiysZEyIC9Q==} + /@scure/base@1.1.5: + resolution: {integrity: sha512-Brj9FiG2W1MRQSTB212YVPRrcbjkv48FoZi/u4l/zds/ieRrqsh7aUf6CLwkAq61oKXr/ZlTzlY66gLIj3TFTQ==} + dev: false + + /@scure/bip32@1.3.2: + resolution: {integrity: sha512-N1ZhksgwD3OBlwTv3R6KFEcPojl/W4ElJOeCZdi+vuI5QmTFwLq3OFf2zd2ROpKvxFdgZ6hUpb0dx9bVNEwYCA==} + dependencies: + '@noble/curves': 1.2.0 + '@noble/hashes': 1.3.3 + '@scure/base': 1.1.5 + dev: false + + /@scure/bip39@1.2.1: + resolution: {integrity: sha512-Z3/Fsz1yr904dduJD0NpiyRHhRYHdcnyh73FZWiV+/qhWi83wNJ3NWolYqCEN+ZWsUz2TWwajJggcRE9r1zUYg==} + dependencies: + '@noble/hashes': 1.3.3 + '@scure/base': 1.1.5 dev: false /@scure/starknet@0.3.0: @@ -2314,7 +2334,7 @@ packages: '@types/yargs-parser': 21.0.3 dev: true - /@typescript-eslint/eslint-plugin@6.11.0(@typescript-eslint/parser@6.11.0)(typescript@5.2.2): + /@typescript-eslint/eslint-plugin@6.11.0(@typescript-eslint/parser@6.11.0)(eslint@8.54.0)(typescript@5.2.2): resolution: {integrity: sha512-uXnpZDc4VRjY4iuypDBKzW1rz9T5YBBK0snMn8MaTSNd2kMlj50LnLBABELjJiOL5YHk7ZD8hbSpI9ubzqYI0w==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: @@ -2326,12 +2346,13 @@ packages: optional: true dependencies: '@eslint-community/regexpp': 4.10.0 - '@typescript-eslint/parser': 6.11.0(typescript@5.2.2) + '@typescript-eslint/parser': 6.11.0(eslint@8.54.0)(typescript@5.2.2) '@typescript-eslint/scope-manager': 6.11.0 - '@typescript-eslint/type-utils': 6.11.0(typescript@5.2.2) - '@typescript-eslint/utils': 6.11.0(typescript@5.2.2) + '@typescript-eslint/type-utils': 6.11.0(eslint@8.54.0)(typescript@5.2.2) + '@typescript-eslint/utils': 6.11.0(eslint@8.54.0)(typescript@5.2.2) '@typescript-eslint/visitor-keys': 6.11.0 - debug: 4.3.4 + debug: 4.3.4(supports-color@8.1.1) + eslint: 8.54.0 graphemer: 1.4.0 ignore: 5.3.0 natural-compare: 1.4.0 @@ -2355,31 +2376,11 @@ packages: '@typescript-eslint/types': 6.11.0 '@typescript-eslint/typescript-estree': 6.11.0(typescript@5.2.2) '@typescript-eslint/visitor-keys': 6.11.0 - debug: 4.3.4 + debug: 4.3.4(supports-color@8.1.1) eslint: 8.54.0 typescript: 5.2.2 transitivePeerDependencies: - supports-color - dev: true - - /@typescript-eslint/parser@6.11.0(typescript@5.2.2): - resolution: {integrity: sha512-+whEdjk+d5do5nxfxx73oanLL9ghKO3EwM9kBCkUtWMRwWuPaFv9ScuqlYfQ6pAD6ZiJhky7TZ2ZYhrMsfMxVQ==} - engines: {node: ^16.0.0 || >=18.0.0} - peerDependencies: - eslint: ^7.0.0 || ^8.0.0 - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true - dependencies: - '@typescript-eslint/scope-manager': 6.11.0 - '@typescript-eslint/types': 6.11.0 - '@typescript-eslint/typescript-estree': 6.11.0(typescript@5.2.2) - '@typescript-eslint/visitor-keys': 6.11.0 - debug: 4.3.4 - typescript: 5.2.2 - transitivePeerDependencies: - - supports-color /@typescript-eslint/scope-manager@5.62.0: resolution: {integrity: sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w==} @@ -2396,7 +2397,7 @@ packages: '@typescript-eslint/types': 6.11.0 '@typescript-eslint/visitor-keys': 6.11.0 - /@typescript-eslint/type-utils@6.11.0(typescript@5.2.2): + /@typescript-eslint/type-utils@6.11.0(eslint@8.54.0)(typescript@5.2.2): resolution: {integrity: sha512-nA4IOXwZtqBjIoYrJcYxLRO+F9ri+leVGoJcMW1uqr4r1Hq7vW5cyWrA43lFbpRvQ9XgNrnfLpIkO3i1emDBIA==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: @@ -2407,8 +2408,9 @@ packages: optional: true dependencies: '@typescript-eslint/typescript-estree': 6.11.0(typescript@5.2.2) - '@typescript-eslint/utils': 6.11.0(typescript@5.2.2) - debug: 4.3.4 + '@typescript-eslint/utils': 6.11.0(eslint@8.54.0)(typescript@5.2.2) + debug: 4.3.4(supports-color@8.1.1) + eslint: 8.54.0 ts-api-utils: 1.0.3(typescript@5.2.2) typescript: 5.2.2 transitivePeerDependencies: @@ -2434,7 +2436,7 @@ packages: dependencies: '@typescript-eslint/types': 5.62.0 '@typescript-eslint/visitor-keys': 5.62.0 - debug: 4.3.4 + debug: 4.3.4(supports-color@8.1.1) globby: 11.1.0 is-glob: 4.0.3 semver: 7.5.4 @@ -2455,7 +2457,7 @@ packages: dependencies: '@typescript-eslint/types': 6.11.0 '@typescript-eslint/visitor-keys': 6.11.0 - debug: 4.3.4 + debug: 4.3.4(supports-color@8.1.1) globby: 11.1.0 is-glob: 4.0.3 semver: 7.5.4 @@ -2464,18 +2466,19 @@ packages: transitivePeerDependencies: - supports-color - /@typescript-eslint/utils@5.62.0(typescript@5.2.2): + /@typescript-eslint/utils@5.62.0(eslint@8.54.0)(typescript@5.2.2): resolution: {integrity: sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 dependencies: - '@eslint-community/eslint-utils': 4.4.0 + '@eslint-community/eslint-utils': 4.4.0(eslint@8.54.0) '@types/json-schema': 7.0.15 '@types/semver': 7.5.6 '@typescript-eslint/scope-manager': 5.62.0 '@typescript-eslint/types': 5.62.0 '@typescript-eslint/typescript-estree': 5.62.0(typescript@5.2.2) + eslint: 8.54.0 eslint-scope: 5.1.1 semver: 7.5.4 transitivePeerDependencies: @@ -2483,18 +2486,19 @@ packages: - typescript dev: true - /@typescript-eslint/utils@6.11.0(typescript@5.2.2): + /@typescript-eslint/utils@6.11.0(eslint@8.54.0)(typescript@5.2.2): resolution: {integrity: sha512-p23ibf68fxoZy605dc0dQAEoUsoiNoP3MD9WQGiHLDuTSOuqoTsa4oAy+h3KDkTcxbbfOtUjb9h3Ta0gT4ug2g==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: eslint: ^7.0.0 || ^8.0.0 dependencies: - '@eslint-community/eslint-utils': 4.4.0 + '@eslint-community/eslint-utils': 4.4.0(eslint@8.54.0) '@types/json-schema': 7.0.15 '@types/semver': 7.5.6 '@typescript-eslint/scope-manager': 6.11.0 '@typescript-eslint/types': 6.11.0 '@typescript-eslint/typescript-estree': 6.11.0(typescript@5.2.2) + eslint: 8.54.0 semver: 7.5.4 transitivePeerDependencies: - supports-color @@ -2517,9 +2521,8 @@ packages: /@ungap/structured-clone@1.2.0: resolution: {integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==} - dev: true - /@vercel/style-guide@5.1.0(typescript@5.2.2): + /@vercel/style-guide@5.1.0(eslint@8.54.0)(prettier@3.1.0)(typescript@5.2.2): resolution: {integrity: sha512-L9lWYePIycm7vIOjDLj+mmMdmmPkW3/brHjgq+nJdvMOrL7Hdk/19w8X583HYSk0vWsq494o5Qkh6x5+uW7ljg==} engines: {node: '>=16'} peerDependencies: @@ -2538,24 +2541,26 @@ packages: optional: true dependencies: '@babel/core': 7.23.5 - '@babel/eslint-parser': 7.23.3(@babel/core@7.23.5) + '@babel/eslint-parser': 7.23.3(@babel/core@7.23.5)(eslint@8.54.0) '@rushstack/eslint-patch': 1.6.0 - '@typescript-eslint/eslint-plugin': 6.11.0(@typescript-eslint/parser@6.11.0)(typescript@5.2.2) - '@typescript-eslint/parser': 6.11.0(typescript@5.2.2) - eslint-config-prettier: 9.0.0 + '@typescript-eslint/eslint-plugin': 6.11.0(@typescript-eslint/parser@6.11.0)(eslint@8.54.0)(typescript@5.2.2) + '@typescript-eslint/parser': 6.11.0(eslint@8.54.0)(typescript@5.2.2) + eslint: 8.54.0 + eslint-config-prettier: 9.0.0(eslint@8.54.0) eslint-import-resolver-alias: 1.1.2(eslint-plugin-import@2.29.0) - eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@6.11.0)(eslint-plugin-import@2.29.0) - eslint-plugin-eslint-comments: 3.2.0 - eslint-plugin-import: 2.29.0(@typescript-eslint/parser@6.11.0)(eslint-import-resolver-typescript@3.6.1) - eslint-plugin-jest: 27.6.0(@typescript-eslint/eslint-plugin@6.11.0)(typescript@5.2.2) - eslint-plugin-jsx-a11y: 6.8.0 - eslint-plugin-playwright: 0.16.0(eslint-plugin-jest@27.6.0) - eslint-plugin-react: 7.33.2 - eslint-plugin-react-hooks: 4.6.0 - eslint-plugin-testing-library: 6.2.0(typescript@5.2.2) + eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@6.11.0)(eslint-plugin-import@2.29.0)(eslint@8.54.0) + eslint-plugin-eslint-comments: 3.2.0(eslint@8.54.0) + eslint-plugin-import: 2.29.0(@typescript-eslint/parser@6.11.0)(eslint-import-resolver-typescript@3.6.1)(eslint@8.54.0) + eslint-plugin-jest: 27.6.0(@typescript-eslint/eslint-plugin@6.11.0)(eslint@8.54.0)(typescript@5.2.2) + eslint-plugin-jsx-a11y: 6.8.0(eslint@8.54.0) + eslint-plugin-playwright: 0.16.0(eslint-plugin-jest@27.6.0)(eslint@8.54.0) + eslint-plugin-react: 7.33.2(eslint@8.54.0) + eslint-plugin-react-hooks: 4.6.0(eslint@8.54.0) + eslint-plugin-testing-library: 6.2.0(eslint@8.54.0)(typescript@5.2.2) eslint-plugin-tsdoc: 0.2.17 - eslint-plugin-unicorn: 48.0.1 - prettier-plugin-packagejson: 2.4.6 + eslint-plugin-unicorn: 48.0.1(eslint@8.54.0) + prettier: 3.1.0 + prettier-plugin-packagejson: 2.4.6(prettier@3.1.0) typescript: 5.2.2 transitivePeerDependencies: - eslint-import-resolver-node @@ -2564,13 +2569,26 @@ packages: - supports-color dev: true + /abitype@0.10.0(typescript@5.2.2): + resolution: {integrity: sha512-QvMHEUzgI9nPj9TWtUGnS2scas80/qaL5PBxGdwWhhvzqXfOph+IEiiiWrzuisu3U3JgDQVruW9oLbJoQ3oZ3A==} + peerDependencies: + typescript: '>=5.0.4' + zod: ^3 >=3.22.0 + peerDependenciesMeta: + typescript: + optional: true + zod: + optional: true + dependencies: + typescript: 5.2.2 + dev: false + /acorn-jsx@5.3.2(acorn@8.11.2): resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} peerDependencies: acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 dependencies: acorn: 8.11.2 - dev: true /acorn-walk@8.3.0: resolution: {integrity: sha512-FS7hV565M5l1R08MXqo8odwMTB02C2UqzB17RVgu9EyuYFBqJZ3/ZY97sQD5FewVu1UyDFc1yztUDrAwT0EypA==} @@ -2581,7 +2599,6 @@ packages: resolution: {integrity: sha512-nc0Axzp/0FILLEVsm4fNwLCwMttvhEI263QtVPQcbpfZZ3ts0hLsZGOpE6czNlid7CJ9MlyH8reXkpsf3YUY4w==} engines: {node: '>=0.4.0'} hasBin: true - dev: true /aes-js@4.0.0-beta.5: resolution: {integrity: sha512-G965FqalsNyrPqgEGON7nIx1e/OVENSgiEIzyC63haUMuvNnwIgIjMs52hlTCKhkBny7A2ORNlfY9Zu+jmGk1Q==} @@ -2594,7 +2611,15 @@ packages: fast-json-stable-stringify: 2.1.0 json-schema-traverse: 0.4.1 uri-js: 4.4.1 - dev: true + + /ajv@8.12.0: + resolution: {integrity: sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==} + dependencies: + fast-deep-equal: 3.1.3 + json-schema-traverse: 1.0.0 + require-from-string: 2.0.2 + uri-js: 4.4.1 + dev: false /ansi-colors@4.1.1: resolution: {integrity: sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==} @@ -2611,7 +2636,6 @@ packages: /ansi-regex@5.0.1: resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} engines: {node: '>=8'} - dev: true /ansi-styles@3.2.1: resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==} @@ -2624,7 +2648,6 @@ packages: engines: {node: '>=8'} dependencies: color-convert: 2.0.1 - dev: true /ansi-styles@5.2.0: resolution: {integrity: sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==} @@ -2656,7 +2679,6 @@ packages: /argparse@2.0.1: resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} - dev: true /aria-hidden@1.2.3: resolution: {integrity: sha512-xcLxITLe2HYa1cnYnwCjkOO1PqUHQpozB8x9AR0OgWN2woOBi5kSDVxKfd0b7sb1hw5qFeJhXm9H1nu3xSfLeQ==} @@ -2755,6 +2777,11 @@ packages: resolution: {integrity: sha512-OH/2E5Fg20h2aPrbe+QL8JZQFko0YZaF+j4mnQ7BGhfavO7OpSLa8a0y9sBwomHdSbkhTS8TQNayBfnW5DwbvQ==} dev: true + /astral-regex@2.0.0: + resolution: {integrity: sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==} + engines: {node: '>=8'} + dev: false + /asynciterator.prototype@1.0.0: resolution: {integrity: sha512-wwHYEIS0Q80f5mosx3L/dfG5t5rjEa9Ft51GTaNt862EnpyGHpgz2RkZvLPp1oF5TnAiTohkEKVEu8pQPJI7Vg==} dependencies: @@ -2791,7 +2818,17 @@ packages: '@aws-cdk/asset-awscli-v1': 2.2.201 '@aws-cdk/asset-kubectl-v20': 2.1.2 '@aws-cdk/asset-node-proxy-agent-v6': 2.0.1 + '@balena/dockerignore': 1.0.2 + case: 1.6.3 constructs: 10.3.0 + fs-extra: 11.2.0 + ignore: 5.3.0 + jsonschema: 1.4.1 + minimatch: 3.1.2 + punycode: 2.3.1 + semver: 7.5.4 + table: 6.8.1 + yaml: 1.10.2 dev: false bundledDependencies: - '@balena/dockerignore' @@ -3008,7 +3045,6 @@ packages: /callsites@3.1.0: resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} engines: {node: '>=6'} - dev: true /camelcase-css@2.0.1: resolution: {integrity: sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==} @@ -3027,6 +3063,11 @@ packages: /caniuse-lite@1.0.30001565: resolution: {integrity: sha512-xrE//a3O7TP0vaJ8ikzkD2c2NgcVUvsEe2IvFTntV4Yd1Z9FVzh+gW+enX96L0psrbaFMcVcH2l90xNuGDWc8w==} + /case@1.6.3: + resolution: {integrity: sha512-mzDSXIPaFwVDvZAHqZ9VlbyF4yyXRuX6IvB06WvPYkqJVO24kX1PPhv9bfpKNFZyxYFmmgo03HUiD8iklmJYRQ==} + engines: {node: '>= 0.8.0'} + dev: false + /chai-as-promised@7.1.1(chai@4.3.10): resolution: {integrity: sha512-azL6xMoi+uxu6z4rhWQ1jbdUhOMhis2PvscD/xjLqNMkv3BPPp2JyyuTHOrf9BOosGpNQ11v6BKv/g57RXbiaA==} peerDependencies: @@ -3063,7 +3104,6 @@ packages: dependencies: ansi-styles: 4.3.0 supports-color: 7.2.0 - dev: true /char-regex@1.0.2: resolution: {integrity: sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==} @@ -3157,14 +3197,12 @@ packages: engines: {node: '>=7.0.0'} dependencies: color-name: 1.1.4 - dev: true /color-name@1.1.3: resolution: {integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==} /color-name@1.1.4: resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} - dev: true /colors-cli@1.0.33: resolution: {integrity: sha512-PWGsmoJFdOB0t+BeHgmtuoRZUQucOLl5ii81NBzOOGVxlgE04muFNHlR5j8i8MKbOPELBl3243AI6lGBTj5ICQ==} @@ -3221,7 +3259,6 @@ packages: path-key: 3.1.1 shebang-command: 2.0.0 which: 2.0.2 - dev: true /cssesc@3.0.0: resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==} @@ -3251,17 +3288,6 @@ packages: ms: 2.1.3 dev: true - /debug@4.3.4: - resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} - engines: {node: '>=6.0'} - peerDependencies: - supports-color: '*' - peerDependenciesMeta: - supports-color: - optional: true - dependencies: - ms: 2.1.2 - /debug@4.3.4(supports-color@8.1.1): resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} engines: {node: '>=6.0'} @@ -3273,7 +3299,6 @@ packages: dependencies: ms: 2.1.2 supports-color: 8.1.1 - dev: true /decamelize@4.0.0: resolution: {integrity: sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==} @@ -3298,7 +3323,6 @@ packages: /deep-is@0.1.4: resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} - dev: true /deepmerge@4.3.1: resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==} @@ -3409,7 +3433,21 @@ packages: engines: {node: '>=6.0.0'} dependencies: esutils: 2.0.3 - dev: true + + /dotenv-cli@7.3.0: + resolution: {integrity: sha512-314CA4TyK34YEJ6ntBf80eUY+t1XaFLyem1k9P0sX1gn30qThZ5qZr/ZwE318gEnzyYP9yj9HJk6SqwE0upkfw==} + hasBin: true + dependencies: + cross-spawn: 7.0.3 + dotenv: 16.3.1 + dotenv-expand: 10.0.0 + minimist: 1.2.8 + dev: false + + /dotenv-expand@10.0.0: + resolution: {integrity: sha512-GopVGCpVS1UKH75VKHGuQFqS1Gusej0z4FyQkPdwjil2gNIv+LNsqBlboOzpJFZKVT95GkCyWJbBSdFEFUWI2A==} + engines: {node: '>=12'} + dev: false /dotenv@16.0.3: resolution: {integrity: sha512-7GO6HghkA5fYG9TYnNxi14/7K9f5occMlp3zXAuSxn7CKCxt9xbNWG7yF8hTCSUchlfWSe3uLmlPfigevRItzQ==} @@ -3431,7 +3469,6 @@ packages: /emoji-regex@8.0.0: resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} - dev: true /emoji-regex@9.2.2: resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} @@ -3585,7 +3622,6 @@ packages: /escape-string-regexp@4.0.0: resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} engines: {node: '>=10'} - dev: true /eslint-config-next@14.0.2(eslint@8.54.0)(typescript@5.2.2): resolution: {integrity: sha512-CasWThlsyIcg/a+clU6KVOMTieuDhTztsrqvniP6AsRki9v7FnojTa7vKQOYM8QSOsQdZ/aElLD1Y2Oc8/PsIg==} @@ -3602,7 +3638,7 @@ packages: eslint: 8.54.0 eslint-import-resolver-node: 0.3.9 eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@6.11.0)(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.29.0)(eslint@8.54.0) - eslint-plugin-import: 2.29.0(@typescript-eslint/parser@6.11.0)(eslint-import-resolver-typescript@3.6.1)(eslint@8.54.0) + eslint-plugin-import: 2.29.0(eslint@8.54.0) eslint-plugin-jsx-a11y: 6.8.0(eslint@8.54.0) eslint-plugin-react: 7.33.2(eslint@8.54.0) eslint-plugin-react-hooks: 4.6.0(eslint@8.54.0) @@ -3612,19 +3648,22 @@ packages: - supports-color dev: true - /eslint-config-prettier@9.0.0: + /eslint-config-prettier@9.0.0(eslint@8.54.0): resolution: {integrity: sha512-IcJsTkJae2S35pRsRAwoCE+925rJJStOdkKnLVgtE+tEpqU0EVVM7OqrwxqgptKdX29NUwC82I5pXsGFIgSevw==} hasBin: true peerDependencies: eslint: '>=7.0.0' + dependencies: + eslint: 8.54.0 dev: true - /eslint-config-turbo@1.10.12: + /eslint-config-turbo@1.10.12(eslint@8.54.0): resolution: {integrity: sha512-z3jfh+D7UGYlzMWGh+Kqz++hf8LOE96q3o5R8X4HTjmxaBWlLAWG+0Ounr38h+JLR2TJno0hU9zfzoPNkR9BdA==} peerDependencies: eslint: '>6.6.0' dependencies: - eslint-plugin-turbo: 1.10.12 + eslint: 8.54.0 + eslint-plugin-turbo: 1.10.12(eslint@8.54.0) dev: true /eslint-import-resolver-alias@1.1.2(eslint-plugin-import@2.29.0): @@ -3633,7 +3672,7 @@ packages: peerDependencies: eslint-plugin-import: '>=1.4.0' dependencies: - eslint-plugin-import: 2.29.0(@typescript-eslint/parser@6.11.0)(eslint-import-resolver-typescript@3.6.1) + eslint-plugin-import: 2.29.0(@typescript-eslint/parser@6.11.0)(eslint-import-resolver-typescript@3.6.1)(eslint@8.54.0) dev: true /eslint-import-resolver-node@0.3.9: @@ -3653,11 +3692,11 @@ packages: eslint: '*' eslint-plugin-import: '*' dependencies: - debug: 4.3.4 + debug: 4.3.4(supports-color@8.1.1) enhanced-resolve: 5.15.0 eslint: 8.54.0 eslint-module-utils: 2.8.0(@typescript-eslint/parser@6.11.0)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@8.54.0) - eslint-plugin-import: 2.29.0(@typescript-eslint/parser@6.11.0)(eslint-import-resolver-typescript@3.6.1)(eslint@8.54.0) + eslint-plugin-import: 2.29.0(eslint@8.54.0) fast-glob: 3.3.2 get-tsconfig: 4.7.2 is-core-module: 2.13.1 @@ -3669,17 +3708,18 @@ packages: - supports-color dev: true - /eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@6.11.0)(eslint-plugin-import@2.29.0): + /eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@6.11.0)(eslint-plugin-import@2.29.0)(eslint@8.54.0): resolution: {integrity: sha512-xgdptdoi5W3niYeuQxKmzVDTATvLYqhpwmykwsh7f6HIOStGWEIL9iqZgQDF9u9OEzrRwR8no5q2VT+bjAujTg==} engines: {node: ^14.18.0 || >=16.0.0} peerDependencies: eslint: '*' eslint-plugin-import: '*' dependencies: - debug: 4.3.4 + debug: 4.3.4(supports-color@8.1.1) enhanced-resolve: 5.15.0 - eslint-module-utils: 2.8.0(@typescript-eslint/parser@6.11.0)(eslint-import-resolver-typescript@3.6.1) - eslint-plugin-import: 2.29.0(@typescript-eslint/parser@6.11.0)(eslint-import-resolver-typescript@3.6.1) + eslint: 8.54.0 + eslint-module-utils: 2.8.0(@typescript-eslint/parser@6.11.0)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@8.54.0) + eslint-plugin-import: 2.29.0(@typescript-eslint/parser@6.11.0)(eslint-import-resolver-typescript@3.6.1)(eslint@8.54.0) fast-glob: 3.3.2 get-tsconfig: 4.7.2 is-core-module: 2.13.1 @@ -3691,35 +3731,6 @@ packages: - supports-color dev: true - /eslint-module-utils@2.8.0(@typescript-eslint/parser@6.11.0)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1): - resolution: {integrity: sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw==} - engines: {node: '>=4'} - peerDependencies: - '@typescript-eslint/parser': '*' - eslint: '*' - eslint-import-resolver-node: '*' - eslint-import-resolver-typescript: '*' - eslint-import-resolver-webpack: '*' - peerDependenciesMeta: - '@typescript-eslint/parser': - optional: true - eslint: - optional: true - eslint-import-resolver-node: - optional: true - eslint-import-resolver-typescript: - optional: true - eslint-import-resolver-webpack: - optional: true - dependencies: - '@typescript-eslint/parser': 6.11.0(typescript@5.2.2) - debug: 3.2.7 - eslint-import-resolver-node: 0.3.9 - eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@6.11.0)(eslint-plugin-import@2.29.0) - transitivePeerDependencies: - - supports-color - dev: true - /eslint-module-utils@2.8.0(@typescript-eslint/parser@6.11.0)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@8.54.0): resolution: {integrity: sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw==} engines: {node: '>=4'} @@ -3745,50 +3756,23 @@ packages: debug: 3.2.7 eslint: 8.54.0 eslint-import-resolver-node: 0.3.9 - eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@6.11.0)(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.29.0)(eslint@8.54.0) - transitivePeerDependencies: - - supports-color - dev: true - - /eslint-module-utils@2.8.0(@typescript-eslint/parser@6.11.0)(eslint-import-resolver-typescript@3.6.1): - resolution: {integrity: sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw==} - engines: {node: '>=4'} - peerDependencies: - '@typescript-eslint/parser': '*' - eslint: '*' - eslint-import-resolver-node: '*' - eslint-import-resolver-typescript: '*' - eslint-import-resolver-webpack: '*' - peerDependenciesMeta: - '@typescript-eslint/parser': - optional: true - eslint: - optional: true - eslint-import-resolver-node: - optional: true - eslint-import-resolver-typescript: - optional: true - eslint-import-resolver-webpack: - optional: true - dependencies: - '@typescript-eslint/parser': 6.11.0(typescript@5.2.2) - debug: 3.2.7 - eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@6.11.0)(eslint-plugin-import@2.29.0) + eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@6.11.0)(eslint-plugin-import@2.29.0)(eslint@8.54.0) transitivePeerDependencies: - supports-color dev: true - /eslint-plugin-eslint-comments@3.2.0: + /eslint-plugin-eslint-comments@3.2.0(eslint@8.54.0): resolution: {integrity: sha512-0jkOl0hfojIHHmEHgmNdqv4fmh7300NdpA9FFpF7zaoLvB/QeXOGNLIo86oAveJFrfB1p05kC8hpEMHM8DwWVQ==} engines: {node: '>=6.5.0'} peerDependencies: eslint: '>=4.19.1' dependencies: escape-string-regexp: 1.0.5 + eslint: 8.54.0 ignore: 5.3.0 dev: true - /eslint-plugin-import@2.29.0(@typescript-eslint/parser@6.11.0)(eslint-import-resolver-typescript@3.6.1): + /eslint-plugin-import@2.29.0(@typescript-eslint/parser@6.11.0)(eslint-import-resolver-typescript@3.6.1)(eslint@8.54.0): resolution: {integrity: sha512-QPOO5NO6Odv5lpoTkddtutccQjysJuFxoPS7fAHO+9m9udNHvTCPSAMW9zGAYj8lAIdr40I8yPCdUYrncXtrwg==} engines: {node: '>=4'} peerDependencies: @@ -3798,15 +3782,16 @@ packages: '@typescript-eslint/parser': optional: true dependencies: - '@typescript-eslint/parser': 6.11.0(typescript@5.2.2) + '@typescript-eslint/parser': 6.11.0(eslint@8.54.0)(typescript@5.2.2) array-includes: 3.1.7 array.prototype.findlastindex: 1.2.3 array.prototype.flat: 1.3.2 array.prototype.flatmap: 1.3.2 debug: 3.2.7 doctrine: 2.1.0 + eslint: 8.54.0 eslint-import-resolver-node: 0.3.9 - eslint-module-utils: 2.8.0(@typescript-eslint/parser@6.11.0)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1) + eslint-module-utils: 2.8.0(@typescript-eslint/parser@6.11.0)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@8.54.0) hasown: 2.0.0 is-core-module: 2.13.1 is-glob: 4.0.3 @@ -3822,7 +3807,7 @@ packages: - supports-color dev: true - /eslint-plugin-import@2.29.0(@typescript-eslint/parser@6.11.0)(eslint-import-resolver-typescript@3.6.1)(eslint@8.54.0): + /eslint-plugin-import@2.29.0(eslint@8.54.0): resolution: {integrity: sha512-QPOO5NO6Odv5lpoTkddtutccQjysJuFxoPS7fAHO+9m9udNHvTCPSAMW9zGAYj8lAIdr40I8yPCdUYrncXtrwg==} engines: {node: '>=4'} peerDependencies: @@ -3832,7 +3817,6 @@ packages: '@typescript-eslint/parser': optional: true dependencies: - '@typescript-eslint/parser': 6.11.0(eslint@8.54.0)(typescript@5.2.2) array-includes: 3.1.7 array.prototype.findlastindex: 1.2.3 array.prototype.flat: 1.3.2 @@ -3857,7 +3841,7 @@ packages: - supports-color dev: true - /eslint-plugin-jest@27.6.0(@typescript-eslint/eslint-plugin@6.11.0)(typescript@5.2.2): + /eslint-plugin-jest@27.6.0(@typescript-eslint/eslint-plugin@6.11.0)(eslint@8.54.0)(typescript@5.2.2): resolution: {integrity: sha512-MTlusnnDMChbElsszJvrwD1dN3x6nZl//s4JD23BxB6MgR66TZlL064su24xEIS3VACfAoHV1vgyMgPw8nkdng==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} peerDependencies: @@ -3870,37 +3854,14 @@ packages: jest: optional: true dependencies: - '@typescript-eslint/eslint-plugin': 6.11.0(@typescript-eslint/parser@6.11.0)(typescript@5.2.2) - '@typescript-eslint/utils': 5.62.0(typescript@5.2.2) + '@typescript-eslint/eslint-plugin': 6.11.0(@typescript-eslint/parser@6.11.0)(eslint@8.54.0)(typescript@5.2.2) + '@typescript-eslint/utils': 5.62.0(eslint@8.54.0)(typescript@5.2.2) + eslint: 8.54.0 transitivePeerDependencies: - supports-color - typescript dev: true - /eslint-plugin-jsx-a11y@6.8.0: - resolution: {integrity: sha512-Hdh937BS3KdwwbBaKd5+PLCOmYY6U4f2h9Z2ktwtNKvIdIEu137rjYbcb9ApSbVJfWxANNuiKTD/9tOKjK9qOA==} - engines: {node: '>=4.0'} - peerDependencies: - eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 - dependencies: - '@babel/runtime': 7.23.5 - aria-query: 5.3.0 - array-includes: 3.1.7 - array.prototype.flatmap: 1.3.2 - ast-types-flow: 0.0.8 - axe-core: 4.7.0 - axobject-query: 3.2.1 - damerau-levenshtein: 1.0.8 - emoji-regex: 9.2.2 - es-iterator-helpers: 1.0.15 - hasown: 2.0.0 - jsx-ast-utils: 3.3.5 - language-tags: 1.0.9 - minimatch: 3.1.2 - object.entries: 1.1.7 - object.fromentries: 2.0.7 - dev: true - /eslint-plugin-jsx-a11y@6.8.0(eslint@8.54.0): resolution: {integrity: sha512-Hdh937BS3KdwwbBaKd5+PLCOmYY6U4f2h9Z2ktwtNKvIdIEu137rjYbcb9ApSbVJfWxANNuiKTD/9tOKjK9qOA==} engines: {node: '>=4.0'} @@ -3942,7 +3903,7 @@ packages: engines: {node: '>=6'} dev: true - /eslint-plugin-playwright@0.16.0(eslint-plugin-jest@27.6.0): + /eslint-plugin-playwright@0.16.0(eslint-plugin-jest@27.6.0)(eslint@8.54.0): resolution: {integrity: sha512-DcHpF0SLbNeh9MT4pMzUGuUSnJ7q5MWbP8sSEFIMS6j7Ggnduq8ghNlfhURgty4c1YFny7Ge9xYTO1FSAoV2Vw==} peerDependencies: eslint: '>=7' @@ -3951,14 +3912,8 @@ packages: eslint-plugin-jest: optional: true dependencies: - eslint-plugin-jest: 27.6.0(@typescript-eslint/eslint-plugin@6.11.0)(typescript@5.2.2) - dev: true - - /eslint-plugin-react-hooks@4.6.0: - resolution: {integrity: sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g==} - engines: {node: '>=10'} - peerDependencies: - eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 + eslint: 8.54.0 + eslint-plugin-jest: 27.6.0(@typescript-eslint/eslint-plugin@6.11.0)(eslint@8.54.0)(typescript@5.2.2) dev: true /eslint-plugin-react-hooks@4.6.0(eslint@8.54.0): @@ -3970,30 +3925,6 @@ packages: eslint: 8.54.0 dev: true - /eslint-plugin-react@7.33.2: - resolution: {integrity: sha512-73QQMKALArI8/7xGLNI/3LylrEYrlKZSb5C9+q3OtOewTnMQi5cT+aE9E41sLCmli3I9PGGmD1yiZydyo4FEPw==} - engines: {node: '>=4'} - peerDependencies: - eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 - dependencies: - array-includes: 3.1.7 - array.prototype.flatmap: 1.3.2 - array.prototype.tosorted: 1.1.2 - doctrine: 2.1.0 - es-iterator-helpers: 1.0.15 - estraverse: 5.3.0 - jsx-ast-utils: 3.3.5 - minimatch: 3.1.2 - object.entries: 1.1.7 - object.fromentries: 2.0.7 - object.hasown: 1.1.3 - object.values: 1.1.7 - prop-types: 15.8.1 - resolve: 2.0.0-next.5 - semver: 6.3.1 - string.prototype.matchall: 4.0.10 - dev: true - /eslint-plugin-react@7.33.2(eslint@8.54.0): resolution: {integrity: sha512-73QQMKALArI8/7xGLNI/3LylrEYrlKZSb5C9+q3OtOewTnMQi5cT+aE9E41sLCmli3I9PGGmD1yiZydyo4FEPw==} engines: {node: '>=4'} @@ -4019,13 +3950,14 @@ packages: string.prototype.matchall: 4.0.10 dev: true - /eslint-plugin-testing-library@6.2.0(typescript@5.2.2): + /eslint-plugin-testing-library@6.2.0(eslint@8.54.0)(typescript@5.2.2): resolution: {integrity: sha512-+LCYJU81WF2yQ+Xu4A135CgK8IszcFcyMF4sWkbiu6Oj+Nel0TrkZq/HvDw0/1WuO3dhDQsZA/OpEMGd0NfcUw==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0, npm: '>=6'} peerDependencies: eslint: ^7.5.0 || ^8.0.0 dependencies: - '@typescript-eslint/utils': 5.62.0(typescript@5.2.2) + '@typescript-eslint/utils': 5.62.0(eslint@8.54.0)(typescript@5.2.2) + eslint: 8.54.0 transitivePeerDependencies: - supports-color - typescript @@ -4038,24 +3970,26 @@ packages: '@microsoft/tsdoc-config': 0.16.2 dev: true - /eslint-plugin-turbo@1.10.12: + /eslint-plugin-turbo@1.10.12(eslint@8.54.0): resolution: {integrity: sha512-uNbdj+ohZaYo4tFJ6dStRXu2FZigwulR1b3URPXe0Q8YaE7thuekKNP+54CHtZPH9Zey9dmDx5btAQl9mfzGOw==} peerDependencies: eslint: '>6.6.0' dependencies: dotenv: 16.0.3 + eslint: 8.54.0 dev: true - /eslint-plugin-unicorn@48.0.1: + /eslint-plugin-unicorn@48.0.1(eslint@8.54.0): resolution: {integrity: sha512-FW+4r20myG/DqFcCSzoumaddKBicIPeFnTrifon2mWIzlfyvzwyqZjqVP7m4Cqr/ZYisS2aiLghkUWaPg6vtCw==} engines: {node: '>=16'} peerDependencies: eslint: '>=8.44.0' dependencies: '@babel/helper-validator-identifier': 7.22.20 - '@eslint-community/eslint-utils': 4.4.0 + '@eslint-community/eslint-utils': 4.4.0(eslint@8.54.0) ci-info: 3.9.0 clean-regexp: 1.0.0 + eslint: 8.54.0 esquery: 1.5.0 indent-string: 4.0.0 is-builtin-module: 3.2.1 @@ -4069,7 +4003,7 @@ packages: strip-indent: 3.0.0 dev: true - /eslint-plugin-unused-imports@3.0.0(@typescript-eslint/eslint-plugin@6.11.0): + /eslint-plugin-unused-imports@3.0.0(@typescript-eslint/eslint-plugin@6.11.0)(eslint@8.54.0): resolution: {integrity: sha512-sduiswLJfZHeeBJ+MQaG+xYzSWdRXoSw61DpU13mzWumCkR0ufD0HmO4kdNokjrkluMHpj/7PJeN35pgbhW3kw==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: @@ -4079,7 +4013,8 @@ packages: '@typescript-eslint/eslint-plugin': optional: true dependencies: - '@typescript-eslint/eslint-plugin': 6.11.0(@typescript-eslint/parser@6.11.0)(typescript@5.2.2) + '@typescript-eslint/eslint-plugin': 6.11.0(@typescript-eslint/parser@6.11.0)(eslint@8.54.0)(typescript@5.2.2) + eslint: 8.54.0 eslint-rule-composer: 0.3.0 dev: false @@ -4102,7 +4037,6 @@ packages: dependencies: esrecurse: 4.3.0 estraverse: 5.3.0 - dev: true /eslint-utils@3.0.0(eslint@8.48.0): resolution: {integrity: sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==} @@ -4138,7 +4072,7 @@ packages: ajv: 6.12.6 chalk: 4.1.2 cross-spawn: 7.0.3 - debug: 4.3.4 + debug: 4.3.4(supports-color@8.1.1) doctrine: 3.0.0 escape-string-regexp: 4.0.0 eslint-scope: 7.2.2 @@ -4185,7 +4119,7 @@ packages: ajv: 6.12.6 chalk: 4.1.2 cross-spawn: 7.0.3 - debug: 4.3.4 + debug: 4.3.4(supports-color@8.1.1) doctrine: 3.0.0 escape-string-regexp: 4.0.0 eslint-scope: 7.2.2 @@ -4214,7 +4148,6 @@ packages: text-table: 0.2.0 transitivePeerDependencies: - supports-color - dev: true /espree@9.6.1: resolution: {integrity: sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==} @@ -4223,7 +4156,6 @@ packages: acorn: 8.11.2 acorn-jsx: 5.3.2(acorn@8.11.2) eslint-visitor-keys: 3.4.3 - dev: true /esprima@4.0.1: resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==} @@ -4236,14 +4168,12 @@ packages: engines: {node: '>=0.10'} dependencies: estraverse: 5.3.0 - dev: true /esrecurse@4.3.0: resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} engines: {node: '>=4.0'} dependencies: estraverse: 5.3.0 - dev: true /estraverse@4.3.0: resolution: {integrity: sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==} @@ -4253,12 +4183,10 @@ packages: /estraverse@5.3.0: resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} engines: {node: '>=4.0'} - dev: true /esutils@2.0.3: resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} engines: {node: '>=0.10.0'} - dev: true /ethers@6.9.1: resolution: {integrity: sha512-kuV8fGd4/8Gj7wkurbsuUsm1DCG6N5gKGYdw3fnWG/7QGknhy1xtHD7kbkCWQAcbAYmzLCLqCPedS3FYncFkKQ==} @@ -4328,7 +4256,6 @@ packages: /fast-deep-equal@3.1.3: resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} - dev: true /fast-glob@3.3.2: resolution: {integrity: sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==} @@ -4342,11 +4269,9 @@ packages: /fast-json-stable-stringify@2.1.0: resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} - dev: true /fast-levenshtein@2.0.6: resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} - dev: true /fastq@1.15.0: resolution: {integrity: sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==} @@ -4372,7 +4297,6 @@ packages: engines: {node: ^10.12.0 || >=12.0.0} dependencies: flat-cache: 3.2.0 - dev: true /fill-range@7.0.1: resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==} @@ -4394,7 +4318,6 @@ packages: dependencies: locate-path: 6.0.0 path-exists: 4.0.0 - dev: true /flat-cache@3.2.0: resolution: {integrity: sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==} @@ -4403,7 +4326,6 @@ packages: flatted: 3.2.9 keyv: 4.5.4 rimraf: 3.0.2 - dev: true /flat@5.0.2: resolution: {integrity: sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==} @@ -4412,7 +4334,6 @@ packages: /flatted@3.2.9: resolution: {integrity: sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ==} - dev: true /for-each@0.3.3: resolution: {integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==} @@ -4431,6 +4352,15 @@ packages: resolution: {integrity: sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==} dev: true + /fs-extra@11.2.0: + resolution: {integrity: sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw==} + engines: {node: '>=14.14'} + dependencies: + graceful-fs: 4.2.11 + jsonfile: 6.1.0 + universalify: 2.0.1 + dev: false + /fs.realpath@1.0.0: resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} @@ -4595,7 +4525,6 @@ packages: minimatch: 3.1.2 once: 1.4.0 path-is-absolute: 1.0.1 - dev: true /globals@11.12.0: resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==} @@ -4606,7 +4535,6 @@ packages: engines: {node: '>=8'} dependencies: type-fest: 0.20.2 - dev: true /globalthis@1.0.3: resolution: {integrity: sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==} @@ -4660,7 +4588,6 @@ packages: /has-flag@4.0.0: resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} engines: {node: '>=8'} - dev: true /has-property-descriptors@1.0.1: resolution: {integrity: sha512-VsX8eaIewvas0xnvinAe9bw4WfIeODpGYikiWYLH+dma0Jw6KHYqWiWfhQlgOVK8D6PvjubK5Uc4P0iIhIcNVg==} @@ -4733,7 +4660,6 @@ packages: dependencies: parent-module: 1.0.1 resolve-from: 4.0.0 - dev: true /import-local@3.1.0: resolution: {integrity: sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==} @@ -4747,7 +4673,6 @@ packages: /imurmurhash@0.1.4: resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} engines: {node: '>=0.8.19'} - dev: true /indent-string@4.0.0: resolution: {integrity: sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==} @@ -4870,7 +4795,6 @@ packages: /is-fullwidth-code-point@3.0.0: resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} engines: {node: '>=8'} - dev: true /is-generator-fn@2.1.0: resolution: {integrity: sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==} @@ -4921,7 +4845,6 @@ packages: /is-path-inside@3.0.3: resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==} engines: {node: '>=8'} - dev: true /is-plain-obj@2.1.0: resolution: {integrity: sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==} @@ -5017,7 +4940,6 @@ packages: /isexe@2.0.0: resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} - dev: true /isomorphic-fetch@3.0.0: resolution: {integrity: sha512-qvUtwJ3j6qwsF3jLxkZ72qCgjMysPzDfeV240JHiGZsANBYd+EEuu35v7dfrJ9Up0Ak07D7GGSkGhCHTqg/5wA==} @@ -5028,6 +4950,14 @@ packages: - encoding dev: false + /isows@1.0.3(ws@8.13.0): + resolution: {integrity: sha512-2cKei4vlmg2cxEjm3wVSqn8pcoRF/LX/wpifuuNquFO4SQmPwarClT+SUCA2lt+l581tTeZIPIZuIDo2jWN1fg==} + peerDependencies: + ws: '*' + dependencies: + ws: 8.13.0 + dev: false + /istanbul-lib-coverage@3.2.2: resolution: {integrity: sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==} engines: {node: '>=8'} @@ -5072,7 +5002,7 @@ packages: resolution: {integrity: sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==} engines: {node: '>=10'} dependencies: - debug: 4.3.4 + debug: 4.3.4(supports-color@8.1.1) istanbul-lib-coverage: 3.2.2 source-map: 0.6.1 transitivePeerDependencies: @@ -5578,7 +5508,6 @@ packages: hasBin: true dependencies: argparse: 2.0.1 - dev: true /jsesc@0.5.0: resolution: {integrity: sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==} @@ -5598,7 +5527,6 @@ packages: /json-buffer@3.0.1: resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} - dev: true /json-parse-even-better-errors@2.3.1: resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} @@ -5606,11 +5534,13 @@ packages: /json-schema-traverse@0.4.1: resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} - dev: true + + /json-schema-traverse@1.0.0: + resolution: {integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==} + dev: false /json-stable-stringify-without-jsonify@1.0.1: resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} - dev: true /json5@1.0.2: resolution: {integrity: sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==} @@ -5624,6 +5554,18 @@ packages: engines: {node: '>=6'} hasBin: true + /jsonfile@6.1.0: + resolution: {integrity: sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==} + dependencies: + universalify: 2.0.1 + optionalDependencies: + graceful-fs: 4.2.11 + dev: false + + /jsonschema@1.4.1: + resolution: {integrity: sha512-S6cATIPVv1z0IlxdN+zUk5EPjkGCdnhN4wVSBlvoUO1tOLJootbo9CquNJmbIh4yikWHiUedhRYrNPn1arpEmQ==} + dev: false + /jsx-ast-utils@3.3.5: resolution: {integrity: sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==} engines: {node: '>=4.0'} @@ -5638,7 +5580,6 @@ packages: resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} dependencies: json-buffer: 3.0.1 - dev: true /kleur@3.0.3: resolution: {integrity: sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==} @@ -5667,7 +5608,6 @@ packages: dependencies: prelude-ls: 1.2.1 type-check: 0.4.0 - dev: true /lilconfig@2.1.0: resolution: {integrity: sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==} @@ -5703,7 +5643,6 @@ packages: engines: {node: '>=10'} dependencies: p-locate: 5.0.0 - dev: true /lodash.memoize@4.1.2: resolution: {integrity: sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==} @@ -5711,12 +5650,15 @@ packages: /lodash.merge@4.6.2: resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} - dev: true /lodash.sortby@4.7.0: resolution: {integrity: sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA==} dev: true + /lodash.truncate@4.4.2: + resolution: {integrity: sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw==} + dev: false + /lodash@4.17.21: resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} dev: true @@ -5817,7 +5759,6 @@ packages: /minimist@1.2.8: resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} - dev: true /mocha@10.2.0: resolution: {integrity: sha512-IDY7fl/BecMwFHzoqF2sg/SHHANeBoMMXFlS9r0OXKDssYE1M5O43wUY/9BVPeIvfH2zmEbBfseqN9gBQZzXkg==} @@ -5882,12 +5823,12 @@ packages: react: '*' react-dom: '*' dependencies: - next: 14.0.2(react-dom@18.2.0)(react@18.2.0) + next: 14.0.2(@babel/core@7.23.5)(react-dom@18.2.0)(react@18.2.0) react: 18.2.0 react-dom: 18.2.0(react@18.2.0) dev: false - /next@14.0.2(react-dom@18.2.0)(react@18.2.0): + /next@14.0.2(@babel/core@7.23.5)(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-jsAU2CkYS40GaQYOiLl9m93RTv2DA/tTJ0NRlmZIBIL87YwQ/xR8k796z7IqgM3jydI8G25dXvyYMC9VDIevIg==} engines: {node: '>=18.17.0'} hasBin: true @@ -5909,7 +5850,7 @@ packages: postcss: 8.4.31 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) - styled-jsx: 5.1.1(react@18.2.0) + styled-jsx: 5.1.1(@babel/core@7.23.5)(react@18.2.0) watchpack: 2.4.0 optionalDependencies: '@next/swc-darwin-arm64': 14.0.2 @@ -6178,7 +6119,6 @@ packages: levn: 0.4.1 prelude-ls: 1.2.1 type-check: 0.4.0 - dev: true /p-limit@2.3.0: resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==} @@ -6192,7 +6132,6 @@ packages: engines: {node: '>=10'} dependencies: yocto-queue: 0.1.0 - dev: true /p-locate@4.1.0: resolution: {integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==} @@ -6206,7 +6145,6 @@ packages: engines: {node: '>=10'} dependencies: p-limit: 3.1.0 - dev: true /p-try@2.2.0: resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==} @@ -6222,7 +6160,6 @@ packages: engines: {node: '>=6'} dependencies: callsites: 3.1.0 - dev: true /parse-json@5.2.0: resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} @@ -6237,7 +6174,6 @@ packages: /path-exists@4.0.0: resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} engines: {node: '>=8'} - dev: true /path-is-absolute@1.0.1: resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} @@ -6246,7 +6182,6 @@ packages: /path-key@3.1.1: resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} engines: {node: '>=8'} - dev: true /path-key@4.0.0: resolution: {integrity: sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==} @@ -6390,9 +6325,8 @@ packages: /prelude-ls@1.2.1: resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} engines: {node: '>= 0.8.0'} - dev: true - /prettier-plugin-packagejson@2.4.6: + /prettier-plugin-packagejson@2.4.6(prettier@3.1.0): resolution: {integrity: sha512-5JGfzkJRL0DLNyhwmiAV9mV0hZLHDwddFCs2lc9CNxOChpoWUQVe8K4qTMktmevmDlMpok2uT10nvHUyU59sNw==} peerDependencies: prettier: '>= 1.16.0' @@ -6400,6 +6334,7 @@ packages: prettier: optional: true dependencies: + prettier: 3.1.0 sort-package-json: 2.6.0 synckit: 0.8.5 dev: true @@ -6442,7 +6377,6 @@ packages: /punycode@2.3.1: resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} engines: {node: '>=6'} - dev: true /pure-rand@6.0.4: resolution: {integrity: sha512-LA0Y9kxMYv47GIPJy6MI84fqTd2HmYZI83W/kM/SkKfDlajnZYfmXFTxkbY+xSBPkLJxltMa9hIkmdc29eguMA==} @@ -6618,6 +6552,11 @@ packages: engines: {node: '>=0.10.0'} dev: true + /require-from-string@2.0.2: + resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==} + engines: {node: '>=0.10.0'} + dev: false + /resolve-cwd@3.0.0: resolution: {integrity: sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==} engines: {node: '>=8'} @@ -6628,7 +6567,6 @@ packages: /resolve-from@4.0.0: resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} engines: {node: '>=4'} - dev: true /resolve-from@5.0.0: resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==} @@ -6677,7 +6615,6 @@ packages: hasBin: true dependencies: glob: 7.2.3 - dev: true /rollup@4.6.1: resolution: {integrity: sha512-jZHaZotEHQaHLgKr8JnQiDT1rmatjgKlMekyksz+yk9jt/8z9quNjnKNRoaM0wd9DC2QKXjmWWuDYtM3jfF8pQ==} @@ -6785,12 +6722,10 @@ packages: engines: {node: '>=8'} dependencies: shebang-regex: 3.0.0 - dev: true /shebang-regex@3.0.0: resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} engines: {node: '>=8'} - dev: true /side-channel@1.0.4: resolution: {integrity: sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==} @@ -6817,6 +6752,15 @@ packages: engines: {node: '>=12'} dev: true + /slice-ansi@4.0.0: + resolution: {integrity: sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==} + engines: {node: '>=10'} + dependencies: + ansi-styles: 4.3.0 + astral-regex: 2.0.0 + is-fullwidth-code-point: 3.0.0 + dev: false + /sort-object-keys@1.1.3: resolution: {integrity: sha512-855pvK+VkU7PaKYPc+Jjnmt4EzejQHyhhF33q31qG8x7maDzkeFhAAThdCYay11CISO+qAMwjOBP+fPZe0IPyg==} dev: true @@ -6913,7 +6857,7 @@ packages: resolution: {integrity: sha512-v0TuaNc9iNtHdbIRzX372jfQH1vgx2rwBHQDMqK4DqjJbwFEE5dog8Go6rGiZVW750NqRSWrZ7ahqyRNc3bscg==} dependencies: '@noble/curves': 1.2.0 - '@scure/base': 1.1.3 + '@scure/base': 1.1.5 '@scure/starknet': 0.3.0 isomorphic-fetch: 3.0.0 lossless-json: 2.0.11 @@ -6943,7 +6887,6 @@ packages: emoji-regex: 8.0.0 is-fullwidth-code-point: 3.0.0 strip-ansi: 6.0.1 - dev: true /string.prototype.matchall@4.0.10: resolution: {integrity: sha512-rGXbGmOEosIQi6Qva94HUjgPs9vKW+dkG7Y8Q5O2OYkWL6wFaTRZO8zM4mhP94uX55wgyrXzfS2aGtGzUL7EJQ==} @@ -6989,7 +6932,6 @@ packages: engines: {node: '>=8'} dependencies: ansi-regex: 5.0.1 - dev: true /strip-bom@3.0.0: resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==} @@ -7021,9 +6963,8 @@ packages: /strip-json-comments@3.1.1: resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} engines: {node: '>=8'} - dev: true - /styled-jsx@5.1.1(react@18.2.0): + /styled-jsx@5.1.1(@babel/core@7.23.5)(react@18.2.0): resolution: {integrity: sha512-pW7uC1l4mBZ8ugbiZrcIsiIvVx1UmTfw7UkC3Um2tmfUq9Bhk8IiyEIPl6F8agHgjzku6j0xQEZbfA5uSgSaCw==} engines: {node: '>= 12.0.0'} peerDependencies: @@ -7036,6 +6977,7 @@ packages: babel-plugin-macros: optional: true dependencies: + '@babel/core': 7.23.5 client-only: 0.0.1 react: 18.2.0 dev: false @@ -7064,14 +7006,12 @@ packages: engines: {node: '>=8'} dependencies: has-flag: 4.0.0 - dev: true /supports-color@8.1.1: resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==} engines: {node: '>=10'} dependencies: has-flag: 4.0.0 - dev: true /supports-preserve-symlinks-flag@1.0.0: resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} @@ -7085,6 +7025,17 @@ packages: tslib: 2.6.2 dev: true + /table@6.8.1: + resolution: {integrity: sha512-Y4X9zqrCftUhMeH2EptSSERdVKt/nEdijTOacGD/97EKjhQ/Qs8RTlEGABSJNNN8lac9kheH+af7yAkEWlgneA==} + engines: {node: '>=10.0.0'} + dependencies: + ajv: 8.12.0 + lodash.truncate: 4.4.2 + slice-ansi: 4.0.0 + string-width: 4.2.3 + strip-ansi: 6.0.1 + dev: false + /tailwind-merge@2.1.0: resolution: {integrity: sha512-l11VvI4nSwW7MtLSLYT4ldidDEUwQAMWuSHk7l4zcXZDgnCRa0V3OdCwFfM7DCzakVXMNRwAeje9maFFXT71dQ==} dependencies: @@ -7145,7 +7096,6 @@ packages: /text-table@0.2.0: resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==} - dev: true /thenify-all@1.6.0: resolution: {integrity: sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==} @@ -7203,7 +7153,7 @@ packages: /ts-interface-checker@0.1.13: resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==} - /ts-jest@29.1.1(jest@29.7.0)(typescript@5.2.2): + /ts-jest@29.1.1(@babel/core@7.23.5)(jest@29.7.0)(typescript@5.2.2): resolution: {integrity: sha512-D6xjnnbP17cC85nliwGiL+tpoKN0StpgE0TeOjXQTU6MVCfsB4v7aW05CgQ/1OywGb0x/oy9hHFnN+sczTiRaA==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} hasBin: true @@ -7224,6 +7174,7 @@ packages: esbuild: optional: true dependencies: + '@babel/core': 7.23.5 bs-logger: 0.2.6 fast-json-stable-stringify: 2.1.0 jest: 29.7.0(@types/node@20.7.1)(ts-node@10.9.1) @@ -7340,7 +7291,7 @@ packages: bundle-require: 4.0.2(esbuild@0.19.8) cac: 6.7.14 chokidar: 3.5.3 - debug: 4.3.4 + debug: 4.3.4(supports-color@8.1.1) esbuild: 0.19.8 execa: 5.1.1 globby: 11.1.0 @@ -7367,65 +7318,64 @@ packages: typescript: 5.2.2 dev: true - /turbo-darwin-64@1.11.2: - resolution: {integrity: sha512-toFmRG/adriZY3hOps7nYCfqHAS+Ci6xqgX3fbo82kkLpC6OBzcXnleSwuPqjHVAaRNhVoB83L5njcE9Qwi2og==} + /turbo-darwin-64@1.11.3: + resolution: {integrity: sha512-IsOOg2bVbIt3o/X8Ew9fbQp5t1hTHN3fGNQYrPQwMR2W1kIAC6RfbVD4A9OeibPGyEPUpwOH79hZ9ydFH5kifw==} cpu: [x64] os: [darwin] requiresBuild: true dev: true optional: true - /turbo-darwin-arm64@1.11.2: - resolution: {integrity: sha512-FCsEDZ8BUSFYEOSC3rrARQrj7x2VOrmVcfrMUIhexTxproRh4QyMxLfr6LALk4ymx6jbDCxWa6Szal8ckldFbA==} + /turbo-darwin-arm64@1.11.3: + resolution: {integrity: sha512-FsJL7k0SaPbJzI/KCnrf/fi3PgCDCjTliMc/kEFkuWVA6Httc3Q4lxyLIIinz69q6JTx8wzh6yznUMzJRI3+dg==} cpu: [arm64] os: [darwin] requiresBuild: true dev: true optional: true - /turbo-linux-64@1.11.2: - resolution: {integrity: sha512-Vzda/o/QyEske5CxLf0wcu7UUS+7zB90GgHZV4tyN+WZtoouTvbwuvZ3V6b5Wgd3OJ/JwWR0CXDK7Sf4VEMr7A==} + /turbo-linux-64@1.11.3: + resolution: {integrity: sha512-SvW7pvTVRGsqtSkII5w+wriZXvxqkluw5FO/MNAdFw0qmoov+PZ237+37/NgArqE3zVn1GX9P6nUx9VO+xcQAg==} cpu: [x64] os: [linux] requiresBuild: true dev: true optional: true - /turbo-linux-arm64@1.11.2: - resolution: {integrity: sha512-bRLwovQRz0yxDZrM4tQEAYV0fBHEaTzUF0JZ8RG1UmZt/CqtpnUrJpYb1VK8hj1z46z9YehARpYCwQ2K0qU4yw==} + /turbo-linux-arm64@1.11.3: + resolution: {integrity: sha512-YhUfBi1deB3m+3M55X458J6B7RsIS7UtM3P1z13cUIhF+pOt65BgnaSnkHLwETidmhRh8Dl3GelaQGrB3RdCDw==} cpu: [arm64] os: [linux] requiresBuild: true dev: true optional: true - /turbo-windows-64@1.11.2: - resolution: {integrity: sha512-LgTWqkHAKgyVuLYcEPxZVGPInTjjeCnN5KQMdJ4uQZ+xMDROvMFS2rM93iQl4ieDJgidwHCxxCxaU9u8c3d/Kg==} + /turbo-windows-64@1.11.3: + resolution: {integrity: sha512-s+vEnuM2TiZuAUUUpmBHDr6vnNbJgj+5JYfnYmVklYs16kXh+EppafYQOAkcRIMAh7GjV3pLq5/uGqc7seZeHA==} cpu: [x64] os: [win32] requiresBuild: true dev: true optional: true - /turbo-windows-arm64@1.11.2: - resolution: {integrity: sha512-829aVBU7IX0c/B4G7g1VI8KniAGutHhIupkYMgF6xPkYVev2G3MYe6DMS/vsLt9GGM9ulDtdWxWrH5P2ngK8IQ==} + /turbo-windows-arm64@1.11.3: + resolution: {integrity: sha512-ZR5z5Zpc7cASwfdRAV5yNScCZBsgGSbcwiA/u3farCacbPiXsfoWUkz28iyrx21/TRW0bi6dbsB2v17swa8bjw==} cpu: [arm64] os: [win32] requiresBuild: true dev: true optional: true - /turbo@1.11.2: - resolution: {integrity: sha512-jPC7LVQJzebs5gWf8FmEvsvXGNyKbN+O9qpvv98xpNaM59aS0/Irhd0H0KbcqnXfsz7ETlzOC3R+xFWthC4Z8A==} + /turbo@1.11.3: + resolution: {integrity: sha512-RCJOUFcFMQNIGKSjC9YmA5yVP1qtDiBA0Lv9VIgrXraI5Da1liVvl3VJPsoDNIR9eFMyA/aagx1iyj6UWem5hA==} hasBin: true - requiresBuild: true optionalDependencies: - turbo-darwin-64: 1.11.2 - turbo-darwin-arm64: 1.11.2 - turbo-linux-64: 1.11.2 - turbo-linux-arm64: 1.11.2 - turbo-windows-64: 1.11.2 - turbo-windows-arm64: 1.11.2 + turbo-darwin-64: 1.11.3 + turbo-darwin-arm64: 1.11.3 + turbo-linux-64: 1.11.3 + turbo-linux-arm64: 1.11.3 + turbo-windows-64: 1.11.3 + turbo-windows-arm64: 1.11.3 dev: true /type-check@0.4.0: @@ -7433,7 +7383,6 @@ packages: engines: {node: '>= 0.8.0'} dependencies: prelude-ls: 1.2.1 - dev: true /type-detect@4.0.8: resolution: {integrity: sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==} @@ -7443,7 +7392,6 @@ packages: /type-fest@0.20.2: resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==} engines: {node: '>=10'} - dev: true /type-fest@0.21.3: resolution: {integrity: sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==} @@ -7522,6 +7470,11 @@ packages: resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==} dev: true + /universalify@2.0.1: + resolution: {integrity: sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==} + engines: {node: '>= 10.0.0'} + dev: false + /untildify@4.0.0: resolution: {integrity: sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw==} engines: {node: '>=8'} @@ -7541,7 +7494,6 @@ packages: resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} dependencies: punycode: 2.3.1 - dev: true /url-join@4.0.1: resolution: {integrity: sha512-jk1+QP6ZJqyOiuEI9AEWQfju/nB2Pw466kbA0LEZljHwKeMgd9WrAEgEGxjPDD2+TNbbb37rTyhEfrCXfuKXnA==} @@ -7607,6 +7559,29 @@ packages: spdx-expression-parse: 3.0.1 dev: true + /viem@2.0.0(typescript@5.2.2): + resolution: {integrity: sha512-WYPwVAs/wrQE1Li9mgHMZaZTnRZuyPJMauIhnpZKeZgtx7f+bWU3uvVSR5kxTf1aBFdaTuRc/umzX2ucQUurnA==} + peerDependencies: + typescript: '>=5.0.4' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@adraffy/ens-normalize': 1.10.0 + '@noble/curves': 1.2.0 + '@noble/hashes': 1.3.2 + '@scure/bip32': 1.3.2 + '@scure/bip39': 1.2.1 + abitype: 0.10.0(typescript@5.2.2) + isows: 1.0.3(ws@8.13.0) + typescript: 5.2.2 + ws: 8.13.0 + transitivePeerDependencies: + - bufferutil + - utf-8-validate + - zod + dev: false + /walker@1.0.8: resolution: {integrity: sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==} dependencies: @@ -7707,7 +7682,6 @@ packages: hasBin: true dependencies: isexe: 2.0.0 - dev: true /workerpool@6.2.1: resolution: {integrity: sha512-ILEIE97kDZvF9Wb9f6h5aXK4swSlKGUcOEGiIYb2OOu/IrDU9iwj0fD//SsA6E5ibwJxpEvhullJY4Sl4GcpAw==} @@ -7733,6 +7707,19 @@ packages: signal-exit: 3.0.7 dev: true + /ws@8.13.0: + resolution: {integrity: sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA==} + 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 + dev: false + /ws@8.5.0: resolution: {integrity: sha512-BWX0SWVgLPzYwF8lTzEy1egjhS4S4OEAHfsO8o65WOVsrnSRGaSiUaa9e0ggGlkMTtBlmOpEXiie9RUcBO86qg==} engines: {node: '>=10.0.0'} @@ -7757,6 +7744,11 @@ packages: /yallist@4.0.0: resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} + /yaml@1.10.2: + resolution: {integrity: sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==} + engines: {node: '>= 6'} + dev: false + /yaml@2.3.4: resolution: {integrity: sha512-8aAvwVUSHpfEqTQ4w/KMlf3HcRdt50E5ODIQJBw1fQ5RL34xabzxtUlzTXVqc4rkZsPbvrXKWnABCD7kWSmocA==} engines: {node: '>= 14'} @@ -7815,12 +7807,7 @@ packages: /yocto-queue@0.1.0: resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} engines: {node: '>=10'} - dev: true /zod@3.22.4: resolution: {integrity: sha512-iC+8Io04lddc+mVqQ9AZ7OQ2MrUKGN+oIQyq1vemgt46jwCwLfhq7/pwnBnNXXXZb8VTVLKwp9EDkx+ryxIWmg==} dev: false - -settings: - autoInstallPeers: true - excludeLinksFromLockfile: false diff --git a/turbo.json b/turbo.json index dc9e158ef..fbf5edd8a 100644 --- a/turbo.json +++ b/turbo.json @@ -1,6 +1,7 @@ { "$schema": "https://turbo.build/schema.json", "globalDependencies": ["**/.env.*local"], + "globalDotEnv": [".env"], "pipeline": { "build": { "dependsOn": ["^build"], @@ -13,7 +14,7 @@ "cache": false, "persistent": true }, - "deploy:starknet:nft": { + "deploy:starknet:tokens": { "cache": false, "persistent": true }, @@ -24,6 +25,14 @@ "deploy:starknet:all": { "cache": false, "persistent": true + }, + "accounts:new": { + "cache": false, + "persistent": true + }, + "accounts:deploy": { + "cache": false, + "persistent": true } }, "globalEnv": [