diff --git a/.devcontainer/Dockerfile b/.devcontainer/Dockerfile new file mode 100644 index 00000000..22c07aa8 --- /dev/null +++ b/.devcontainer/Dockerfile @@ -0,0 +1,57 @@ +# +# Docker image to generate deterministic, verifiable builds of Anchor programs. +# This must be run *after* a given ANCHOR_CLI version is published and a git tag +# is released on GitHub. +# + +FROM ubuntu:22.04 + +ARG DEBIAN_FRONTEND=noninteractive + +ARG SOLANA_CLI="1.17.16" +ARG ANCHOR_CLI="0.29.0" +ARG NODE_VERSION="v18.16.0" + +ENV HOME="/root" +ENV PATH="${HOME}/.cargo/bin:${PATH}" +ENV PATH="${HOME}/.local/share/solana/install/active_release/bin:${PATH}" +ENV PATH="${HOME}/.nvm/versions/node/${NODE_VERSION}/bin:${PATH}" + +# Install base utilities. +RUN mkdir -p /workdir && mkdir -p /tmp && \ + apt-get update -qq && apt-get upgrade -qq && apt-get install -qq \ + build-essential git curl wget jq pkg-config python3-pip \ + libssl-dev libudev-dev + +#RUN wget http://nz2.archive.ubuntu.com/ubuntu/pool/main/o/openssl/libssl1.1_1.1.1f-1ubuntu2.19_amd64.deb +#RUN dpkg -i libssl1.1_1.1.1f-1ubuntu2.19_amd64.deb + +# Install rust. +RUN curl "https://sh.rustup.rs" -sfo rustup.sh && \ + sh rustup.sh -y && \ + rustup component add rustfmt clippy + +# Install node / npm / yarn. +RUN curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.33.11/install.sh | bash +ENV NVM_DIR="${HOME}/.nvm" +RUN . $NVM_DIR/nvm.sh && \ + nvm install ${NODE_VERSION} && \ + nvm use ${NODE_VERSION} && \ + nvm alias default node && \ + npm install -g yarn + +# Install Solana tools. +RUN sh -c "$(curl -sSfL https://release.solana.com/v${SOLANA_CLI}/install)" + +# Install anchor. +RUN cargo install --git https://github.com/coral-xyz/anchor avm --locked --force +RUN avm install ${ANCHOR_CLI} && avm use ${ANCHOR_CLI} + +# set up keypair +RUN solana-keygen new --no-bip39-passphrase + +WORKDIR /workdir +#be sure to add `/root/.avm/bin` to your PATH to be able to run the installed binaries + +# install dependencies +RUN yarn \ No newline at end of file diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json new file mode 100644 index 00000000..dae163bf --- /dev/null +++ b/.devcontainer/devcontainer.json @@ -0,0 +1,3 @@ +{ + "build": { "dockerfile": "Dockerfile" }, +} diff --git a/.github/workflows/anchor-test.yaml b/.github/workflows/anchor-test.yaml index ad4b405f..66fb3c19 100644 --- a/.github/workflows/anchor-test.yaml +++ b/.github/workflows/anchor-test.yaml @@ -2,7 +2,8 @@ name: anchor-test on: push: branches: - - main + - develop + - production pull_request: jobs: @@ -10,7 +11,7 @@ jobs: runs-on: ubuntu-20.04 steps: - uses: actions/checkout@v3 - - uses: metadaoproject/anchor-test@v2 + - uses: metadaoproject/anchor-test@v2.1 with: - anchor-version: '0.28.0' - solana-cli-version: '1.16.0' + anchor-version: '0.29.0' + solana-cli-version: '1.17.16' diff --git a/.github/workflows/generate-verifiable-builds.yaml b/.github/workflows/generate-verifiable-builds.yaml new file mode 100644 index 00000000..bac62509 --- /dev/null +++ b/.github/workflows/generate-verifiable-builds.yaml @@ -0,0 +1,57 @@ +name: generate-verifiable-builds +on: + workflow_dispatch: + push: + branches: + - production + - develop + +jobs: + generate-verifiable-autocrat: + runs-on: ubuntu-20.04 + steps: + - uses: actions/checkout@v3 + - uses: metadaoproject/anchor-verifiable-build@v0 + with: + program: autocrat_v0 + anchor-version: '0.29.0' + solana-cli-version: '1.17.16' + - run: 'git pull --rebase' + - run: cp target/deploy/autocrat_v0.so ./verifiable-builds + - name: Commit verifiable build back to mainline + uses: EndBug/add-and-commit@v9.1.4 + with: + default_author: github_actions + message: 'Update autocrat_v0 verifiable build' + generate-verifiable-vault: + runs-on: ubuntu-20.04 + steps: + - uses: actions/checkout@v3 + - uses: metadaoproject/anchor-verifiable-build@v0 + with: + program: conditional_vault + anchor-version: '0.29.0' + solana-cli-version: '1.17.16' + - run: 'git pull --rebase' + - run: cp target/deploy/conditional_vault.so ./verifiable-builds + - name: Commit verifiable build back to mainline + uses: EndBug/add-and-commit@v9.1.4 + with: + default_author: github_actions + message: 'Update conditional_vault verifiable build' + generate-verifiable-migrator: + runs-on: ubuntu-20.04 + steps: + - uses: actions/checkout@v3 + - uses: metadaoproject/anchor-verifiable-build@v0 + with: + program: autocrat_migrator + anchor-version: '0.29.0' + solana-cli-version: '1.17.16' + - run: 'git pull --rebase' + - run: cp target/deploy/autocrat_migrator.so ./verifiable-builds + - name: Commit verifiable build back to mainline + uses: EndBug/add-and-commit@v9.1.4 + with: + default_author: github_actions + message: 'Update autocrat_migrator verifiable build' diff --git a/Anchor.toml b/Anchor.toml index 6c603551..dab9e108 100644 --- a/Anchor.toml +++ b/Anchor.toml @@ -5,9 +5,9 @@ seeds = false skip-lint = false [programs.localnet] -autocrat_migrator = "migkwAXrXFN34voCYQUhFQBXZJjHrWnpEXbSGTqZdB3" -autocrat_v0 = "metaX99LHn3A7Gr7VAcCfXhpfocvpMpqQ3eyp3PGUUq" -conditional_vault = "vaU1tVLj8RFk7mNj1BxqgAsMKKaL8UvEUHvU3tdbZPe" +autocrat_migrator = "MigRDW6uxyNMDBD8fX2njCRyJC4YZk2Rx9pDUZiAESt" +autocrat_v0 = "metaRK9dUBnrAdZN6uUDKvxBVKW5pyCbPVmLtUZwtBp" +conditional_vault = "vAuLTQjV5AZx5f3UgE75wcnkxnQowWxThn1hGjfCVwP" [registry] url = "https://api.apr.dev" @@ -17,13 +17,17 @@ cluster = "Localnet" wallet = "~/.config/solana/id.json" [scripts] +initialize_dao = "yarn run ts-node scripts/initializeDao.ts" +crank_twap = "yarn run ts-node scripts/crankTwap.ts" airdrop = "yarn run ts-node scripts/airdrop.ts" autocrat_v0 = "yarn run ts-node scripts/autocratV0.ts" clob = "yarn run tsc scripts/clob.ts --esModuleInterop --resolveJsonModule && node scripts/clob.js && rm scripts/clob.js" crank = "yarn run ts-node scripts/crank.ts" main = "yarn run ts-node scripts/main.ts" +propose = "yarn run ts-node scripts/initializeProposal.ts" initialize_vault = "yarn run tsc scripts/initializeVault.ts --esModuleInterop --resolveJsonModule && node scripts/initializeVault.js" place_order = "yarn run ts-node scripts/placeOrder.ts" +multisig = "yarn run tsx scripts/multisig.ts" test = "yarn run ts-mocha -p ./tsconfig.json -t 1000000 tests/*.ts" [test] @@ -38,3 +42,7 @@ program = "./tests/fixtures/openbook_v2.so" [[test.genesis]] address = "TWAP7frdvD3ia7TWc8e9SxZMmrpd2Yf3ifSPAHS8VG3" program = "./tests/fixtures/openbook_twap.so" + +[[test.genesis]] +address = "metaqbxxUerdq28cj1RbAWkYQm3ybzjb6a8bt518x1s" +program = "./tests/fixtures/mpl_token_metadata.so" diff --git a/Cargo.lock b/Cargo.lock index c1df060a..9f3d79cc 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -334,6 +334,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "78f860599da1c2354e7234c768783049eb42e2f54509ecfc942d2e0076a2da7b" dependencies = [ "anchor-lang 0.28.0", + "mpl-token-metadata 1.13.2", "solana-program", "spl-associated-token-account 1.1.3", "spl-token 3.5.0", @@ -347,6 +348,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6c4fd6e43b2ca6220d2ef1641539e678bfc31b6cc393cf892b373b5997b6a39a" dependencies = [ "anchor-lang 0.29.0", + "mpl-token-metadata 3.2.3", "solana-program", "spl-associated-token-account 2.2.0", "spl-token 4.0.0", @@ -848,6 +850,8 @@ version = "0.1.0" dependencies = [ "anchor-lang 0.28.0", "anchor-spl 0.28.0", + "mpl-token-metadata 1.13.2", + "solana-program", "solana-security-txt", ] @@ -1486,6 +1490,19 @@ dependencies = [ "thiserror", ] +[[package]] +name = "mpl-token-metadata" +version = "3.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba8ee05284d79b367ae8966d558e1a305a781fc80c9df51f37775169117ba64f" +dependencies = [ + "borsh 0.10.3", + "num-derive 0.3.3", + "num-traits", + "solana-program", + "thiserror", +] + [[package]] name = "mpl-token-metadata-context-derive" version = "0.2.1" @@ -1693,7 +1710,7 @@ checksum = "624a8340c38c1b80fd549087862da4ba43e08858af025b236e509b6649fc13d5" [[package]] name = "openbook-twap" version = "1.0.0" -source = "git+https://github.com/metaDAOproject/openbook-twap.git#bf8f4c2f1f136b32b155b8257d5320fe9cba4892" +source = "git+https://github.com/metaDAOproject/openbook-twap.git#6ff11f6065ff122d0f2b7270bab92da06cd20da0" dependencies = [ "anchor-lang 0.28.0", "anchor-spl 0.28.0", @@ -1994,13 +2011,13 @@ dependencies = [ [[package]] name = "raydium-amm-v3" version = "0.1.0" -source = "git+https://github.com/raydium-io/raydium-clmm.git#cea4d49ef5acc643cb04fb4db96af6d73a5f0a1d" +source = "git+https://github.com/raydium-io/raydium-clmm.git#da57b0b7409f5a4437feb8fd0551683b14b8a1f5" dependencies = [ - "anchor-lang 0.28.0", - "anchor-spl 0.28.0", + "anchor-lang 0.29.0", + "anchor-spl 0.29.0", "arrayref", "bytemuck", - "mpl-token-metadata", + "mpl-token-metadata 1.13.2", "solana-program", "spl-memo 4.0.0", "uint", diff --git a/LICENSE b/LICENSE index 5357f691..a927aadf 100644 --- a/LICENSE +++ b/LICENSE @@ -1,166 +1,99 @@ - GNU LESSER GENERAL PUBLIC LICENSE - Version 3, 29 June 2007 +Business Source License 1.1 - Copyright (C) 2007 Free Software Foundation, Inc. - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. +License text copyright (c) 2017 MariaDB Corporation Ab, All Rights Reserved. +"Business Source License" is a trademark of MariaDB Corporation Ab. +----------------------------------------------------------------------------- - This version of the GNU Lesser General Public License incorporates -the terms and conditions of version 3 of the GNU General Public -License, supplemented by the additional permissions listed below. +Parameters - 0. Additional Definitions. +Licensor: MetaDAO LLC - As used herein, "this License" refers to version 3 of the GNU Lesser -General Public License, and the "GNU GPL" refers to version 3 of the GNU -General Public License. +Licensed Work: Futarchy Monorepo + The Licensed Work is (c) 2024 MetaDAO LLC - "The Library" refers to a covered work governed by this License, -other than an Application or a Combined Work as defined below. - - An "Application" is any work that makes use of an interface provided -by the Library, but which is not otherwise based on the Library. -Defining a subclass of a class defined by the Library is deemed a mode -of using an interface provided by the Library. - - A "Combined Work" is a work produced by combining or linking an -Application with the Library. The particular version of the Library -with which the Combined Work was made is also called the "Linked -Version". - - The "Minimal Corresponding Source" for a Combined Work means the -Corresponding Source for the Combined Work, excluding any source code -for portions of the Combined Work that, considered in isolation, are -based on the Application, and not on the Linked Version. - - The "Corresponding Application Code" for a Combined Work means the -object code and/or source code for the Application, including any data -and utility programs needed for reproducing the Combined Work from the -Application, but excluding the System Libraries of the Combined Work. - - 1. Exception to Section 3 of the GNU GPL. - - You may convey a covered work under sections 3 and 4 of this License -without being bound by section 3 of the GNU GPL. - - 2. Conveying Modified Versions. - - If you modify a copy of the Library, and, in your modifications, a -facility refers to a function or data to be supplied by an Application -that uses the facility (other than as an argument passed when the -facility is invoked), then you may convey a copy of the modified -version: - - a) under this License, provided that you make a good faith effort to - ensure that, in the event an Application does not supply the - function or data, the facility still operates, and performs - whatever part of its purpose remains meaningful, or - - b) under the GNU GPL, with none of the additional permissions of - this License applicable to that copy. - - 3. Object Code Incorporating Material from Library Header Files. - - The object code form of an Application may incorporate material from -a header file that is part of the Library. You may convey such object -code under terms of your choice, provided that, if the incorporated -material is not limited to numerical parameters, data structure -layouts and accessors, or small macros, inline functions and templates -(ten or fewer lines in length), you do both of the following: - - a) Give prominent notice with each copy of the object code that the - Library is used in it and that the Library and its use are - covered by this License. - - b) Accompany the object code with a copy of the GNU GPL and this license - document. - - 4. Combined Works. - - You may convey a Combined Work under terms of your choice that, -taken together, effectively do not restrict modification of the -portions of the Library contained in the Combined Work and reverse -engineering for debugging such modifications, if you also do each of -the following: - - a) Give prominent notice with each copy of the Combined Work that - the Library is used in it and that the Library and its use are - covered by this License. - - b) Accompany the Combined Work with a copy of the GNU GPL and this license - document. - - c) For a Combined Work that displays copyright notices during - execution, include the copyright notice for the Library among - these notices, as well as a reference directing the user to the - copies of the GNU GPL and this license document. - - d) Do one of the following: - - 0) Convey the Minimal Corresponding Source under the terms of this - License, and the Corresponding Application Code in a form - suitable for, and under terms that permit, the user to - recombine or relink the Application with a modified version of - the Linked Version to produce a modified Combined Work, in the - manner specified by section 6 of the GNU GPL for conveying - Corresponding Source. - - 1) Use a suitable shared library mechanism for linking with the - Library. A suitable mechanism is one that (a) uses at run time - a copy of the Library already present on the user's computer - system, and (b) will operate properly with a modified version - of the Library that is interface-compatible with the Linked - Version. - - e) Provide Installation Information, but only if you would otherwise - be required to provide such information under section 6 of the - GNU GPL, and only to the extent that such information is - necessary to install and execute a modified version of the - Combined Work produced by recombining or relinking the - Application with a modified version of the Linked Version. (If - you use option 4d0, the Installation Information must accompany - the Minimal Corresponding Source and Corresponding Application - Code. If you use option 4d1, you must provide the Installation - Information in the manner specified by section 6 of the GNU GPL - for conveying Corresponding Source.) - - 5. Combined Libraries. - - You may place library facilities that are a work based on the -Library side by side in a single library together with other library -facilities that are not Applications and are not covered by this -License, and convey such a combined library under terms of your -choice, if you do both of the following: - - a) Accompany the combined library with a copy of the same work based - on the Library, uncombined with any other library facilities, - conveyed under the terms of this License. - - b) Give prominent notice with the combined library that part of it - is a work based on the Library, and explaining where to find the - accompanying uncombined form of the same work. - - 6. Revised Versions of the GNU Lesser General Public License. - - The Free Software Foundation may publish revised and/or new versions -of the GNU Lesser General Public License from time to time. Such new -versions will be similar in spirit to the present version, but may -differ in detail to address new problems or concerns. - - Each version is given a distinguishing version number. If the -Library as you received it specifies that a certain numbered version -of the GNU Lesser General Public License "or any later version" -applies to it, you have the option of following the terms and -conditions either of that published version or of any later version -published by the Free Software Foundation. If the Library as you -received it does not specify a version number of the GNU Lesser -General Public License, you may choose any version of the GNU Lesser -General Public License ever published by the Free Software Foundation. - - If the Library as you received it specifies that a proxy can decide -whether future versions of the GNU Lesser General Public License shall -apply, that proxy's public statement of acceptance of any version is -permanent authorization for you to choose that version for the -Library. +Additional Use Grant: Any uses approved by MetaDAO LLC via calls to + the SPL Memo program +Change Date: 4200-06-09 + +Change License: GNU Lesser General Public License v2.0 or later + +----------------------------------------------------------------------------- + +Terms + +The Licensor hereby grants you the right to copy, modify, create derivative +works, redistribute, and make non-production use of the Licensed Work. The +Licensor may make an Additional Use Grant, above, permitting limited +production use. + +Effective on the Change Date, or the fourth anniversary of the first publicly +available distribution of a specific version of the Licensed Work under this +License, whichever comes first, the Licensor hereby grants you rights under +the terms of the Change License, and the rights granted in the paragraph +above terminate. + +If your use of the Licensed Work does not comply with the requirements +currently in effect as described in this License, you must purchase a +commercial license from the Licensor, its affiliated entities, or authorized +resellers, or you must refrain from using the Licensed Work. + +All copies of the original and modified Licensed Work, and derivative works +of the Licensed Work, are subject to this License. This License applies +separately for each version of the Licensed Work and the Change Date may vary +for each version of the Licensed Work released by Licensor. + +You must conspicuously display this License on each original or modified copy +of the Licensed Work. If you receive the Licensed Work in original or +modified form from a third party, the terms and conditions set forth in this +License apply to your use of that work. + +Any use of the Licensed Work in violation of this License will automatically +terminate your rights under this License for the current and all other +versions of the Licensed Work. + +This License does not grant you any right in any trademark or logo of +Licensor or its affiliates (provided that you may use a trademark or logo of +Licensor as expressly required by this License). + +TO THE EXTENT PERMITTED BY APPLICABLE LAW, THE LICENSED WORK IS PROVIDED ON +AN "AS IS" BASIS. LICENSOR HEREBY DISCLAIMS ALL WARRANTIES AND CONDITIONS, +EXPRESS OR IMPLIED, INCLUDING (WITHOUT LIMITATION) WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, NON-INFRINGEMENT, AND +TITLE. + +MariaDB hereby grants you permission to use this License’s text to license +your works, and to refer to it using the trademark "Business Source License", +as long as you comply with the Covenants of Licensor below. + +----------------------------------------------------------------------------- + +Covenants of Licensor + +In consideration of the right to use this License’s text and the "Business +Source License" name and trademark, Licensor covenants to MariaDB, and to all +other recipients of the licensed work to be provided by Licensor: + +1. To specify as the Change License the GPL Version 2.0 or any later version, + or a license that is compatible with GPL Version 2.0 or a later version, + where "compatible" means that software provided under the Change License can + be included in a program with software provided under GPL Version 2.0 or a + later version. Licensor may specify additional Change Licenses without + limitation. + +2. To either: (a) specify an additional grant of rights to use that does not + impose any additional restriction on the right granted in this License, as + the Additional Use Grant; or (b) insert the text "None". + +3. To specify a Change Date. + +4. Not to modify this License in any other way. + +----------------------------------------------------------------------------- + +Notice + +The Business Source License (this document, or the "License") is not an Open +Source license. However, the Licensed Work will eventually be made available +under an Open Source License, as stated in this License. diff --git a/README.md b/README.md index 5b40f924..273906f9 100644 --- a/README.md +++ b/README.md @@ -1,18 +1,31 @@ -# Meta-DAO Monorepo +# Futarchy Monorepo -![License LGPLv3](https://img.shields.io/badge/License-LGPLv3-violet.svg) +![License BSLv1.1](https://img.shields.io/badge/License-BSLv1.1-lightgray.svg) -Monorepo that houses the Meta-DAO's programs. A description of these programs -and what they do can be found at [themetadao.org](https://themetadao.org). +Monorepo that houses programs helpful for futarchy. A description of these programs +and what they do can be found at [docs.themetadao.org](https://docs.themetadao.org). + +## Scripts + +The scripts folder contains a few scripts that you can use to interact with the Meta-DAO. +Today, the only way to create proposals is via script. You can do this by modifying the +`initializeProposal.ts` script and replacing its `pubkey`, `accounts`, and `data` with the +SVM instruction that you want to use in your proposal. + +Then, run `anchor run propose --provider.cluster CLUSTER`, where `CLUSTER` is replaced with +either devnet, mainnet, or (recommended) an RPC URL. ## Deployments -| program | tag | program ID | -| ----------------- | --- | ------------------------------------------- | -| autocrat_v0 | v0.1| metaX99LHn3A7Gr7VAcCfXhpfocvpMpqQ3eyp3PGUUq | -| autocrat_migrator | v0.1| migkwAXrXFN34voCYQUhFQBXZJjHrWnpEXbSGTqZdB3 | -| autocrat_v0 | v0 | meta3cxKzFBmWYgCVozmvCQAS3y9b3fGxrG9HkHL7Wi | -| conditional_vault | v0 | vaU1tVLj8RFk7mNj1BxqgAsMKKaL8UvEUHvU3tdbZPe | +| program | tag | program ID | +| ----------------- | ---- | ------------------------------------------- | +| autocrat_v0 | v0.2 | metaRK9dUBnrAdZN6uUDKvxBVKW5pyCbPVmLtUZwtBp | +| autocrat_migrator | v0.2 | MigRDW6uxyNMDBD8fX2njCRyJC4YZk2Rx9pDUZiAESt | +| conditional_vault | v0.2 | vAuLTQjV5AZx5f3UgE75wcnkxnQowWxThn1hGjfCVwP | +| autocrat_v0 | v0.1 | metaX99LHn3A7Gr7VAcCfXhpfocvpMpqQ3eyp3PGUUq | +| autocrat_migrator | v0.1 | migkwAXrXFN34voCYQUhFQBXZJjHrWnpEXbSGTqZdB3 | +| autocrat_v0 | v0 | meta3cxKzFBmWYgCVozmvCQAS3y9b3fGxrG9HkHL7Wi | +| conditional_vault | v0 | vaU1tVLj8RFk7mNj1BxqgAsMKKaL8UvEUHvU3tdbZPe | All programs are immutable and verifiable, and have been verified with the OtterSec API. diff --git a/package.json b/package.json index 8bc1beaa..c9ded2d5 100644 --- a/package.json +++ b/package.json @@ -4,18 +4,26 @@ "lint": "prettier */*.js \"*/**/*{.js,.ts}\" --check" }, "dependencies": { - "@coral-xyz/anchor": "0.28.1-beta.2", - "@metaplex-foundation/mpl-token-metadata": "^2.5.2", + "@coral-xyz/anchor": "0.29.0", + "@metaplex-foundation/mpl-token-metadata": "^3.2.0", + "@metaplex-foundation/umi": "^0.9.1", + "@metaplex-foundation/umi-bundle-defaults": "^0.9.1", + "@metaplex-foundation/umi-uploader-bundlr": "^0.9.1", "@noble/ed25519": "^2.0.0", "@noble/secp256k1": "^2.0.0", - "@openbook-dex/openbook-v2": "=0.0.12", - "@solana/spl-token": "^0.3.0", + "@openbook-dex/openbook-v2": "0.1.7", + "@solana/spl-token": "^0.3.7", + "@solana/web3.js": "^1.90.0", + "@sqds/multisig": "^2.0.0", "anchor-bankrun": "^0.2.0", "arweave": "^1.14.4", "solana-bankrun": "^0.2.0", "spl-token-bankrun": "0.2.3" }, "devDependencies": { + "@mercurial-finance/dynamic-amm-sdk": "^0.4.19", + "@solana/spl-memo": "^0.2.3", + "@solana/spl-token-registry": "^0.2.4574", "@types/bn.js": "^5.1.0", "@types/chai": "^4.3.0", "@types/mocha": "^9.0.0", @@ -24,6 +32,7 @@ "mocha": "^9.0.3", "prettier": "^2.6.2", "ts-mocha": "^10.0.0", + "tsx": "^4.7.1", "typescript": "^4.3.5" } } diff --git a/programs/autocrat_migrator/src/lib.rs b/programs/autocrat_migrator/src/lib.rs index ee2864c7..d771a9c0 100644 --- a/programs/autocrat_migrator/src/lib.rs +++ b/programs/autocrat_migrator/src/lib.rs @@ -2,10 +2,10 @@ //! to the new autocrat. use anchor_lang::prelude::*; -use anchor_spl::token::{transfer, Token, TokenAccount, Transfer}; use anchor_lang::solana_program; +use anchor_spl::token::{transfer, Token, TokenAccount, Transfer}; -declare_id!("migkwAXrXFN34voCYQUhFQBXZJjHrWnpEXbSGTqZdB3"); +declare_id!("MigRDW6uxyNMDBD8fX2njCRyJC4YZk2Rx9pDUZiAESt"); #[program] pub mod autocrat_migrator { @@ -41,7 +41,10 @@ pub mod autocrat_migrator { let lamport_transfer = solana_program::system_instruction::transfer( &ctx.accounts.authority.key(), &ctx.accounts.lamport_receiver.key(), - ctx.accounts.authority.get_lamports().saturating_sub(rent.minimum_balance(0)), + ctx.accounts + .authority + .get_lamports() + .saturating_sub(rent.minimum_balance(0)), ); solana_program::program::invoke( @@ -49,7 +52,78 @@ pub mod autocrat_migrator { &[ ctx.accounts.authority.to_account_info(), ctx.accounts.lamport_receiver.to_account_info(), - ] + ], + )?; + + Ok(()) + } + + pub fn multi_transfer4(ctx: Context) -> Result<()> { + transfer( + CpiContext::new( + ctx.accounts.token_program.to_account_info(), + Transfer { + from: ctx.accounts.from0.to_account_info(), + to: ctx.accounts.to0.to_account_info(), + authority: ctx.accounts.authority.to_account_info(), + }, + ), + ctx.accounts.from0.amount, + )?; + + transfer( + CpiContext::new( + ctx.accounts.token_program.to_account_info(), + Transfer { + from: ctx.accounts.from1.to_account_info(), + to: ctx.accounts.to1.to_account_info(), + authority: ctx.accounts.authority.to_account_info(), + }, + ), + ctx.accounts.from1.amount, + )?; + + transfer( + CpiContext::new( + ctx.accounts.token_program.to_account_info(), + Transfer { + from: ctx.accounts.from2.to_account_info(), + to: ctx.accounts.to2.to_account_info(), + authority: ctx.accounts.authority.to_account_info(), + }, + ), + ctx.accounts.from2.amount, + )?; + + transfer( + CpiContext::new( + ctx.accounts.token_program.to_account_info(), + Transfer { + from: ctx.accounts.from3.to_account_info(), + to: ctx.accounts.to3.to_account_info(), + authority: ctx.accounts.authority.to_account_info(), + }, + ), + ctx.accounts.from3.amount, + )?; + + let rent = Rent::get()?; + + let lamport_transfer = solana_program::system_instruction::transfer( + &ctx.accounts.authority.key(), + &ctx.accounts.lamport_receiver.key(), + ctx.accounts + .authority + .get_lamports() + .saturating_sub(rent.minimum_balance(0)), + ); + + solana_program::program::invoke( + &lamport_transfer, + &[ + ctx.accounts.authority.to_account_info(), + ctx.accounts.lamport_receiver.to_account_info(), + ], )?; Ok(()) @@ -74,3 +148,30 @@ pub struct MultiTransfer2<'info> { #[account(mut)] lamport_receiver: UncheckedAccount<'info>, } + +#[derive(Accounts)] +pub struct MultiTransfer4<'info> { + token_program: Program<'info, Token>, + #[account(mut)] + authority: Signer<'info>, + #[account(mut)] + from0: Account<'info, TokenAccount>, + #[account(mut)] + to0: Account<'info, TokenAccount>, + #[account(mut)] + from1: Account<'info, TokenAccount>, + #[account(mut)] + to1: Account<'info, TokenAccount>, + #[account(mut)] + from2: Account<'info, TokenAccount>, + #[account(mut)] + to2: Account<'info, TokenAccount>, + #[account(mut)] + from3: Account<'info, TokenAccount>, + #[account(mut)] + to3: Account<'info, TokenAccount>, + system_program: Program<'info, System>, + /// CHECK: no r/w, just lamport sub + #[account(mut)] + lamport_receiver: UncheckedAccount<'info>, +} diff --git a/programs/autocrat_v0/src/lib.rs b/programs/autocrat_v0/src/lib.rs index 049db47b..0dee3f7f 100644 --- a/programs/autocrat_v0/src/lib.rs +++ b/programs/autocrat_v0/src/lib.rs @@ -24,13 +24,15 @@ security_txt! { acknowledgements: "DCF = (CF1 / (1 + r)^1) + (CF2 / (1 + r)^2) + ... (CFn / (1 + r)^n)" } -declare_id!("metaX99LHn3A7Gr7VAcCfXhpfocvpMpqQ3eyp3PGUUq"); +declare_id!("metaRK9dUBnrAdZN6uUDKvxBVKW5pyCbPVmLtUZwtBp"); pub const SLOTS_PER_10_SECS: u64 = 25; -pub const THREE_DAYS_IN_SLOTS: u64 = 5 * 24 * 60 * 6 * SLOTS_PER_10_SECS; +pub const THREE_DAYS_IN_SLOTS: u64 = 3 * 24 * 60 * 6 * SLOTS_PER_10_SECS; -// by default, the pass price needs to be 5% higher than the fail price -pub const DEFAULT_PASS_THRESHOLD_BPS: u16 = 500; +pub const TEN_DAYS_IN_SECONDS: i64 = 10 * 24 * 60 * 60; + +// by default, the pass price needs to be 3% higher than the fail price +pub const DEFAULT_PASS_THRESHOLD_BPS: u16 = 300; // start at 10 SOL ($600 at current prices), decay by ~5 SOL per day pub const DEFAULT_BASE_BURN_LAMPORTS: u64 = 10 * solana_program::native_token::LAMPORTS_PER_SOL; @@ -38,6 +40,9 @@ pub const DEFAULT_BURN_DECAY_PER_SLOT_LAMPORTS: u64 = 23_150; pub const MAX_BPS: u16 = 10_000; +// TWAP can only move by $5 per slot +pub const DEFAULT_MAX_OBSERVATION_CHANGE_PER_UPDATE_LOTS: u64 = 5_000; + #[account] pub struct DAO { // treasury needed even though DAO is PDA for this reason: https://solana.stackexchange.com/questions/7667/a-peculiar-problem-with-cpis @@ -59,6 +64,7 @@ pub struct DAO { pub slots_per_proposal: u64, pub market_taker_fee: i64, pub twap_expected_value: u64, + pub max_observation_change_per_update_lots: u64, } #[derive(Clone, Copy, AnchorSerialize, AnchorDeserialize, PartialEq, Eq)] @@ -115,7 +121,9 @@ pub mod autocrat_v0 { dao.burn_decay_per_slot_lamports = DEFAULT_BURN_DECAY_PER_SLOT_LAMPORTS; dao.slots_per_proposal = THREE_DAYS_IN_SLOTS; dao.market_taker_fee = 0; - dao.twap_expected_value = 10_000; // 1 USDC per META + // 100_000 price lots * quote lot size of 100 = 10_000_000 or $10 per quote lot size of meta, which is 0.1 meta + dao.twap_expected_value = 100_000; // $100 USDC per 1 META + dao.max_observation_change_per_update_lots = DEFAULT_MAX_OBSERVATION_CHANGE_PER_UPDATE_LOTS; let (treasury_pubkey, treasury_bump) = Pubkey::find_program_address(&[dao.key().as_ref()], ctx.program_id); @@ -145,10 +153,13 @@ pub mod autocrat_v0 { AutocratError::InvalidMarket ); - // this should also be checked by `openbook_twap`, but why not take the - // precaution? + let current_time = Clock::get().unwrap().unix_timestamp as i64; + + // The market expires a minimum of 7 days after the end of a 3 day proposal. + // Make sure to do final TWAP crank after the proposal period has ended + // and before the market expires, or else! Allows for rent retrieval from openbook require!( - openbook_pass_market.time_expiry == 0, + openbook_pass_market.time_expiry > current_time + TEN_DAYS_IN_SECONDS, AutocratError::InvalidMarket ); require!( @@ -164,7 +175,7 @@ pub mod autocrat_v0 { AutocratError::InvalidMarket ); require!( - openbook_pass_market.base_lot_size == 1_000_000_000, // minimum tradeable = 1 META + openbook_pass_market.base_lot_size == 100_000_000, // minimum tradeable = 0.1 META AutocratError::InvalidMarket ); require!( @@ -187,7 +198,7 @@ pub mod autocrat_v0 { AutocratError::InvalidMarket ); require!( - openbook_fail_market.time_expiry == 0, + openbook_fail_market.time_expiry > current_time + TEN_DAYS_IN_SECONDS, AutocratError::InvalidMarket ); require!( @@ -203,11 +214,11 @@ pub mod autocrat_v0 { AutocratError::InvalidMarket ); require!( - openbook_fail_market.base_lot_size == 1_000_000_000, + openbook_fail_market.base_lot_size == 100_000_000, // minimum tradeable = 0.1 META AutocratError::InvalidMarket ); require!( - openbook_pass_market.quote_lot_size == 100, + openbook_fail_market.quote_lot_size == 100, AutocratError::InvalidMarket ); require!( @@ -227,6 +238,20 @@ pub mod autocrat_v0 { openbook_twap_fail_market.twap_oracle.initial_slot + 50 >= clock.slot, AutocratError::TWAPMarketTooOld ); + require_eq!( + openbook_twap_pass_market + .twap_oracle + .max_observation_change_per_update_lots, + dao.max_observation_change_per_update_lots, + AutocratError::TWAPOracleWrongChangeLots + ); + require_eq!( + openbook_twap_fail_market + .twap_oracle + .max_observation_change_per_update_lots, + dao.max_observation_change_per_update_lots, + AutocratError::TWAPOracleWrongChangeLots + ); require!( openbook_twap_pass_market.twap_oracle.expected_value == dao.twap_expected_value, AutocratError::TWAPMarketInvalidExpectedValue @@ -390,10 +415,7 @@ pub mod autocrat_v0 { Ok(()) } - pub fn update_dao( - ctx: Context, - dao_params: UpdateDaoParams, - ) -> Result<()> { + pub fn update_dao(ctx: Context, dao_params: UpdateDaoParams) -> Result<()> { let dao = &mut ctx.accounts.dao; if let Some(pass_threshold_bps) = dao_params.pass_threshold_bps { @@ -420,6 +442,12 @@ pub mod autocrat_v0 { dao.twap_expected_value = twap_expected_value; } + if let Some(max_observation_change_per_update_lots) = + dao_params.max_observation_change_per_update_lots + { + dao.max_observation_change_per_update_lots = max_observation_change_per_update_lots; + } + Ok(()) } } @@ -514,6 +542,7 @@ pub struct UpdateDaoParams { pub slots_per_proposal: Option, pub market_taker_fee: Option, pub twap_expected_value: Option, + pub max_observation_change_per_update_lots: Option, } #[derive(Accounts)] @@ -556,6 +585,8 @@ pub enum AutocratError { InvalidMarket, #[msg("`TWAPMarket` must have an `initial_slot` within 50 slots of the proposal's `slot_enqueued`")] TWAPMarketTooOld, + #[msg("`TWAPOracle` has an incorrect max_observation_change_per_update_lots value")] + TWAPOracleWrongChangeLots, #[msg("`TWAPMarket` has the wrong `expected_value`")] TWAPMarketInvalidExpectedValue, #[msg("One of the vaults has an invalid `settlement_authority`")] diff --git a/programs/conditional_vault/Cargo.toml b/programs/conditional_vault/Cargo.toml index 22ec604a..7d66751f 100644 --- a/programs/conditional_vault/Cargo.toml +++ b/programs/conditional_vault/Cargo.toml @@ -17,5 +17,7 @@ default = [] [dependencies] anchor-lang = "0.28.0" -anchor-spl = "0.28.0" +anchor-spl = { version = "0.28.0", features = ["metadata"] } +mpl-token-metadata = { version = "^1.6.5", features = ["no-entrypoint"] } +solana-program = "1.16.1" solana-security-txt = "1.1.1" diff --git a/programs/conditional_vault/conditional_vault_flows.png b/programs/conditional_vault/conditional_vault_flows.png deleted file mode 100644 index e8861903..00000000 Binary files a/programs/conditional_vault/conditional_vault_flows.png and /dev/null differ diff --git a/programs/conditional_vault/src/lib.rs b/programs/conditional_vault/src/lib.rs index a67c468e..aa31041d 100644 --- a/programs/conditional_vault/src/lib.rs +++ b/programs/conditional_vault/src/lib.rs @@ -1,8 +1,13 @@ use anchor_lang::prelude::*; +use anchor_spl::metadata::{ + create_metadata_accounts_v3, CreateMetadataAccountsV3, Metadata, MetadataAccount, +}; use anchor_spl::{ associated_token::AssociatedToken, token::{self, Burn, Mint, MintTo, Token, TokenAccount, Transfer}, }; +use mpl_token_metadata::state::DataV2; + #[cfg(not(feature = "no-entrypoint"))] use solana_security_txt::security_txt; @@ -18,7 +23,7 @@ security_txt! { acknowledgements: "DCF = (CF1 / (1 + r)^1) + (CF2 / (1 + r)^2) + ... (CFn / (1 + r)^n)" } -declare_id!("vaU1tVLj8RFk7mNj1BxqgAsMKKaL8UvEUHvU3tdbZPe"); +declare_id!("vAuLTQjV5AZx5f3UgE75wcnkxnQowWxThn1hGjfCVwP"); #[derive(AnchorSerialize, AnchorDeserialize, Clone, Copy, PartialEq, Eq)] pub enum VaultStatus { @@ -84,6 +89,62 @@ pub mod conditional_vault { Ok(()) } + pub fn add_metadata_to_conditional_tokens( + ctx: Context, + proposal_number: u64, + on_finalize_uri: String, + on_revert_uri: String, + ) -> Result<()> { + let seeds = generate_vault_seeds!(ctx.accounts.vault); + let signer_seeds = &[&seeds[..]]; + + // there are null bytes we must trim from string, otherwise string value is longer than we want + let underlying_token_symbol_raw = + ctx.accounts.underlying_token_metadata.data.symbol.clone(); + let underlying_token_symbol = underlying_token_symbol_raw.trim_matches(char::from(0)); + + let on_finalize_token_symbol = format!("p{}", underlying_token_symbol); + let on_revert_token_symbol = format!("f{}", underlying_token_symbol); + + create_metadata_accounts_v3( + ctx.accounts + .into_create_on_finalize_token_metadata_context() + .with_signer(signer_seeds), + DataV2 { + name: format!("Proposal {}: {}", proposal_number, on_finalize_token_symbol), + symbol: on_finalize_token_symbol, + uri: on_finalize_uri, + seller_fee_basis_points: 0, + creators: None, + collection: None, + uses: None, + }, + false, + true, + None, + )?; + + create_metadata_accounts_v3( + ctx.accounts + .into_create_on_revert_token_metadata_context() + .with_signer(signer_seeds), + DataV2 { + name: format!("Proposal {}: {}", proposal_number, on_revert_token_symbol), + symbol: on_revert_token_symbol, + uri: on_revert_uri, + seller_fee_basis_points: 0, + creators: None, + collection: None, + uses: None, + }, + false, + true, + None, + )?; + + Ok(()) + } + pub fn settle_conditional_vault( ctx: Context, new_status: VaultStatus, @@ -94,6 +155,116 @@ pub mod conditional_vault { Ok(()) } + pub fn merge_conditional_tokens_for_underlying_tokens( + ctx: Context, + amount: u64, + ) -> Result<()> { + let accs = &ctx.accounts; + + let vault = &accs.vault; + + // Store Pre-operation Balances + let pre_user_conditional_on_finalize_balance = ctx + .accounts + .user_conditional_on_finalize_token_account + .amount; + let pre_user_conditional_on_revert_balance = + ctx.accounts.user_conditional_on_revert_token_account.amount; + let pre_vault_underlying_balance = ctx.accounts.vault_underlying_token_account.amount; + let pre_finalize_mint_supply = ctx.accounts.conditional_on_finalize_token_mint.supply; + let pre_revert_mint_supply = ctx.accounts.conditional_on_revert_token_mint.supply; + + let seeds = generate_vault_seeds!(vault); + let signer = &[&seeds[..]]; + + // burn `amount` from both token accounts + token::burn( + CpiContext::new( + accs.token_program.to_account_info(), + Burn { + mint: accs.conditional_on_finalize_token_mint.to_account_info(), + from: accs + .user_conditional_on_finalize_token_account + .to_account_info(), + authority: accs.authority.to_account_info(), + }, + ), + amount, + )?; + + token::burn( + CpiContext::new( + accs.token_program.to_account_info(), + Burn { + mint: accs.conditional_on_revert_token_mint.to_account_info(), + from: accs + .user_conditional_on_revert_token_account + .to_account_info(), + authority: accs.authority.to_account_info(), + }, + ), + amount, + )?; + + // Transfer `amount` from vault to user + token::transfer( + CpiContext::new_with_signer( + accs.token_program.to_account_info(), + Transfer { + from: accs.vault_underlying_token_account.to_account_info(), + to: accs.user_underlying_token_account.to_account_info(), + authority: accs.vault.to_account_info(), + }, + signer, + ), + amount, + )?; + + // Reload Accounts to Reflect Changes + ctx.accounts + .user_conditional_on_finalize_token_account + .reload()?; + ctx.accounts + .user_conditional_on_revert_token_account + .reload()?; + ctx.accounts.vault_underlying_token_account.reload()?; + ctx.accounts.conditional_on_finalize_token_mint.reload()?; + ctx.accounts.conditional_on_revert_token_mint.reload()?; + + // Check post-operation balances + let post_user_conditional_on_finalize_balance = ctx + .accounts + .user_conditional_on_finalize_token_account + .amount; + let post_user_conditional_on_revert_balance = + ctx.accounts.user_conditional_on_revert_token_account.amount; + let post_vault_underlying_balance = ctx.accounts.vault_underlying_token_account.amount; + let post_finalize_mint_supply = ctx.accounts.conditional_on_finalize_token_mint.supply; + let post_revert_mint_supply = ctx.accounts.conditional_on_revert_token_mint.supply; + + // Check that the user's conditional token balances are unchanged (since we're not necessarily burning all tokens) + require_eq!( + post_user_conditional_on_finalize_balance, + pre_user_conditional_on_finalize_balance - amount + ); + require_eq!( + post_user_conditional_on_revert_balance, + pre_user_conditional_on_revert_balance - amount + ); + + // Check that the mint supplies have been reduced by the burned amounts + require_eq!(post_finalize_mint_supply, pre_finalize_mint_supply - amount); + require_eq!(post_revert_mint_supply, pre_revert_mint_supply - amount); + + // Check that the vault's underlying balance has been reduced by the transferred amount + require_eq!( + post_vault_underlying_balance, + pre_vault_underlying_balance - amount + ); + + Ok(()) + } + pub fn mint_conditional_tokens(ctx: Context, amount: u64) -> Result<()> { let accs = &ctx.accounts; @@ -355,6 +526,84 @@ pub struct InitializeConditionalVault<'info> { pub system_program: Program<'info, System>, } +#[derive(Accounts)] +pub struct AddMetadataToConditionalTokens<'info> { + #[account(mut)] + pub payer: Signer<'info>, + #[account( + mut, + has_one = underlying_token_mint, + constraint = vault.status == VaultStatus::Active @ ErrorCode::VaultAlreadySettled + )] + pub vault: Account<'info, ConditionalVault>, + #[account(mut)] + pub underlying_token_mint: Account<'info, Mint>, + pub underlying_token_metadata: Account<'info, MetadataAccount>, + #[account( + mut, + mint::authority = vault, + mint::freeze_authority = vault, + mint::decimals = underlying_token_mint.decimals + )] + pub conditional_on_finalize_token_mint: Account<'info, Mint>, + #[account( + mut, + mint::authority = vault, + mint::freeze_authority = vault, + mint::decimals = underlying_token_mint.decimals + )] + pub conditional_on_revert_token_mint: Account<'info, Mint>, + /// CHECK: verified via cpi into token metadata + #[account(mut)] + pub conditional_on_finalize_token_metadata: AccountInfo<'info>, + /// CHECK: verified via cpi into token metadata + #[account(mut)] + pub conditional_on_revert_token_metadata: AccountInfo<'info>, + pub token_metadata_program: Program<'info, Metadata>, + pub system_program: Program<'info, System>, + pub rent: Sysvar<'info, Rent>, +} + +impl<'info> AddMetadataToConditionalTokens<'info> { + pub fn into_create_on_finalize_token_metadata_context( + &self, + ) -> CpiContext<'_, '_, '_, 'info, CreateMetadataAccountsV3<'info>> { + let cpi_program = self.token_metadata_program.to_account_info(); + + let cpi_accounts = CreateMetadataAccountsV3 { + metadata: self + .conditional_on_finalize_token_metadata + .to_account_info(), + mint: self.conditional_on_finalize_token_mint.to_account_info(), + mint_authority: self.vault.to_account_info(), + payer: self.payer.to_account_info(), + update_authority: self.vault.to_account_info(), + system_program: self.system_program.to_account_info(), + rent: self.rent.to_account_info(), + }; + + CpiContext::new(cpi_program, cpi_accounts) + } + + pub fn into_create_on_revert_token_metadata_context( + &self, + ) -> CpiContext<'_, '_, '_, 'info, CreateMetadataAccountsV3<'info>> { + let cpi_program = self.token_metadata_program.to_account_info(); + + let cpi_accounts = CreateMetadataAccountsV3 { + metadata: self.conditional_on_revert_token_metadata.to_account_info(), + mint: self.conditional_on_revert_token_mint.to_account_info(), + mint_authority: self.vault.to_account_info(), + payer: self.payer.to_account_info(), + update_authority: self.vault.to_account_info(), + system_program: self.system_program.to_account_info(), + rent: self.rent.to_account_info(), + }; + + CpiContext::new(cpi_program, cpi_accounts) + } +} + #[derive(Accounts)] pub struct SettleConditionalVault<'info> { pub settlement_authority: Signer<'info>, @@ -406,6 +655,45 @@ pub struct MintConditionalTokens<'info> { pub token_program: Program<'info, Token>, } +#[derive(Accounts)] +pub struct MergeConditionalTokensForUnderlyingTokens<'info> { + #[account( + has_one = conditional_on_finalize_token_mint @ ErrorCode::InvalidConditionalTokenMint, + has_one = conditional_on_revert_token_mint @ ErrorCode::InvalidConditionalTokenMint, + constraint = vault.status == VaultStatus::Active @ ErrorCode::VaultAlreadySettled + )] + pub vault: Account<'info, ConditionalVault>, + #[account(mut)] + pub conditional_on_finalize_token_mint: Account<'info, Mint>, + #[account(mut)] + pub conditional_on_revert_token_mint: Account<'info, Mint>, + #[account( + mut, + constraint = vault_underlying_token_account.key() == vault.underlying_token_account @ ErrorCode::InvalidVaultUnderlyingTokenAccount + )] + pub vault_underlying_token_account: Account<'info, TokenAccount>, + pub authority: Signer<'info>, + #[account( + mut, + token::authority = authority, + token::mint = conditional_on_finalize_token_mint + )] + pub user_conditional_on_finalize_token_account: Account<'info, TokenAccount>, + #[account( + mut, + token::authority = authority, + token::mint = conditional_on_revert_token_mint + )] + pub user_conditional_on_revert_token_account: Account<'info, TokenAccount>, + #[account( + mut, + token::authority = authority, + token::mint = vault.underlying_token_mint + )] + pub user_underlying_token_account: Account<'info, TokenAccount>, + pub token_program: Program<'info, Token>, +} + #[derive(Accounts)] pub struct RedeemConditionalTokensForUnderlyingTokens<'info> { #[account( diff --git a/scripts/assets/fMETA.png b/scripts/assets/fMETA.png new file mode 100644 index 00000000..0491fcde Binary files /dev/null and b/scripts/assets/fMETA.png differ diff --git a/scripts/assets/fUSDC.png b/scripts/assets/fUSDC.png new file mode 100644 index 00000000..12ce80fa Binary files /dev/null and b/scripts/assets/fUSDC.png differ diff --git a/scripts/assets/pMETA.png b/scripts/assets/pMETA.png new file mode 100644 index 00000000..253fd5ff Binary files /dev/null and b/scripts/assets/pMETA.png differ diff --git a/scripts/assets/pUSDC.png b/scripts/assets/pUSDC.png new file mode 100644 index 00000000..73ee171d Binary files /dev/null and b/scripts/assets/pUSDC.png differ diff --git a/scripts/crankTwap.ts b/scripts/crankTwap.ts new file mode 100644 index 00000000..3171099d --- /dev/null +++ b/scripts/crankTwap.ts @@ -0,0 +1,152 @@ +import { initializeProposal, payer, provider } from "./main"; +import * as anchor from "@coral-xyz/anchor"; +import * as token from "@solana/spl-token"; +import { MEMO_PROGRAM_ID } from "@solana/spl-memo"; + +const { PublicKey, Keypair, SystemProgram, ComputeBudgetProgram } = anchor.web3; +const { BN, Program } = anchor; + +import { + OpenBookV2Client, + PlaceOrderArgs, + Side, + OrderType, + SelfTradeBehavior, +} from "@openbook-dex/openbook-v2"; + +import { AutocratV0 } from "../target/types/autocrat_v0"; + +import { + openbookTwap, + autocratProgram, + openbook, + OPENBOOK_PROGRAM_ID, +} from "./main"; + +const PROPOSAL_NUMBER = 7; + +// crank the TWAPs of a proposal's markets by passing in a bunch of empty orders +async function crankTwap() { + const proposals = await autocratProgram.account.proposal.all(); + console.log(proposals); + const storedProposal = proposals.find( + (proposal) => proposal.account.number == PROPOSAL_NUMBER + ).account; + + const passMarketTwap = storedProposal.openbookTwapPassMarket; + const passMarket = storedProposal.openbookPassMarket; + const storedPassMarket = await openbook.deserializeMarketAccount(passMarket); + + const failMarketTwap = storedProposal.openbookTwapFailMarket; + const failMarket = storedProposal.openbookFailMarket; + const storedFailMarket = await openbook.deserializeMarketAccount(failMarket); + + console.log(await openbookTwap.account.twapMarket.fetch(passMarketTwap)); + console.log(await openbookTwap.account.twapMarket.fetch(failMarketTwap)); + + let emptyBuyArgs: PlaceOrderArgs = { + side: Side.Bid, + priceLots: new BN(10_000), // 1 USDC for 1 META + maxBaseLots: new BN(1), + maxQuoteLotsIncludingFees: new BN(1 * 10_000), + clientOrderId: new BN(1), + orderType: OrderType.Market, + expiryTimestamp: new BN(0), + selfTradeBehavior: SelfTradeBehavior.DecrementTake, + limit: 255, + }; + + const userPassQuoteAccount = await token.getOrCreateAssociatedTokenAccount( + provider.connection, + payer, + storedPassMarket.quoteMint, + payer.publicKey + ); + + const userFailQuoteAccount = await token.getOrCreateAssociatedTokenAccount( + provider.connection, + payer, + storedFailMarket.quoteMint, + payer.publicKey + ); + + let passMarketOpenOrdersAccount = await openbook.createOpenOrders( + payer, + passMarket, + "oo" + ); + + let failMarketOpenOrdersAccount = await openbook.createOpenOrders( + payer, + failMarket, + "oo" + ); + + // openbook.findOpenOrdersForMarket() + + // return; + + // TODO: have this done programmatically + // let passMarketOpenOrdersAccount = await openbook.findOpenOrdersForMarket( + // payer.publicKey, + // passMarket, + // )[0]; + + // let failMarketOpenOrdersAccount = await openbook.findOpenOrdersForMarket( + // payer.publicKey, + // failMarket, + // )[0]; + + // console.log(passMarketOpenOrdersAccount); + // return; + + // const indexer = openbook.findOpenOrdersIndexer(payer.publicKey); + + // console.log(await openbook.getOpenOrdersIndexer(indexer)); + + const addPriorityFee = ComputeBudgetProgram.setComputeUnitPrice({ + microLamports: 1, + }); + + for (let i = 0; i < 500; i++) { + try { + let tx = await openbookTwap.methods + .placeOrder(emptyBuyArgs) + .accounts({ + asks: storedPassMarket.asks, + bids: storedPassMarket.bids, + eventHeap: storedPassMarket.eventHeap, + market: passMarket, + openOrdersAccount: passMarketOpenOrdersAccount, + userTokenAccount: userPassQuoteAccount.address, + marketVault: storedPassMarket.marketQuoteVault, + twapMarket: passMarketTwap, + openbookProgram: OPENBOOK_PROGRAM_ID, + }) + .preInstructions([ + addPriorityFee, + await openbookTwap.methods + .placeOrder(emptyBuyArgs) + .accounts({ + asks: storedFailMarket.asks, + bids: storedFailMarket.bids, + eventHeap: storedFailMarket.eventHeap, + market: failMarket, + openOrdersAccount: failMarketOpenOrdersAccount, + userTokenAccount: userFailQuoteAccount.address, + marketVault: storedFailMarket.marketQuoteVault, + twapMarket: failMarketTwap, + openbookProgram: OPENBOOK_PROGRAM_ID, + }) + .instruction(), + ]) + .rpc(); + + console.log(tx); + } catch (err) { + console.log("error"); + } + } +} + +crankTwap(); diff --git a/scripts/finalizeProposal.ts b/scripts/finalizeProposal.ts new file mode 100644 index 00000000..ae231349 --- /dev/null +++ b/scripts/finalizeProposal.ts @@ -0,0 +1,19 @@ +import { autocratProgram, finalizeProposal } from "./main"; +import * as anchor from "@coral-xyz/anchor"; +import { MEMO_PROGRAM_ID } from "@solana/spl-memo"; + +const { PublicKey, Keypair, SystemProgram } = anchor.web3; +const { BN, Program } = anchor; + +const PROPOSAL_NUMBER = 3; + +async function main() { + const proposals = await autocratProgram.account.proposal.all(); + const proposal = proposals.find( + (proposal) => proposal.account.number == PROPOSAL_NUMBER + ); + + await finalizeProposal(proposal.publicKey); +} + +main(); diff --git a/scripts/initializeDao.ts b/scripts/initializeDao.ts new file mode 100644 index 00000000..7299359e --- /dev/null +++ b/scripts/initializeDao.ts @@ -0,0 +1,14 @@ +import { autocratProgram, initializeDAO } from "./main"; +import * as anchor from "@coral-xyz/anchor"; + +const { PublicKey, Keypair, SystemProgram } = anchor.web3; +const { BN, Program } = anchor; + +const META = new PublicKey("METADDFL6wWMWEoKTFJwcThTbUmtarRJZjRpzUvkxhr"); +const USDC = new PublicKey("EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v"); + +async function main() { + await initializeDAO(META, USDC); +} + +main(); diff --git a/scripts/initializeProposal.ts b/scripts/initializeProposal.ts new file mode 100644 index 00000000..cf3184fd --- /dev/null +++ b/scripts/initializeProposal.ts @@ -0,0 +1,51 @@ +import { initializeProposal, daoTreasury, META } from "./main"; +import * as anchor from "@coral-xyz/anchor"; +import { MEMO_PROGRAM_ID } from "@solana/spl-memo"; +import * as token from "@solana/spl-token"; + +const { PublicKey, Keypair, SystemProgram } = anchor.web3; +const { BN, Program } = anchor; + +const provider = anchor.AnchorProvider.env(); +anchor.setProvider(provider); + +const payer = provider.wallet["payer"]; + +const PANTERA_PUBKEY = new PublicKey( + "BtNPTBX1XkFCwazDJ6ZkK3hcUsomm1RPcfmtUrP6wd2K" +); + +async function main() { + const senderAcc = await token.getOrCreateAssociatedTokenAccount( + provider.connection, + payer, + META, + daoTreasury, + true + ); + + const receiverAcc = await token.getOrCreateAssociatedTokenAccount( + provider.connection, + payer, + META, + PANTERA_PUBKEY, + true + ); + + const transferIx = token.createTransferInstruction( + senderAcc.address, + receiverAcc.address, + daoTreasury, + 1_000 * 1_000_000_000 // 1,000 META + ); + + const ix = { + programId: transferIx.programId, + accounts: transferIx.keys, + data: transferIx.data, + }; + + await initializeProposal(ix, "https://hackmd.io/@0xNallok/Hy2WJ46op"); +} + +main(); diff --git a/scripts/main.ts b/scripts/main.ts index ed647156..3d5da4c4 100644 --- a/scripts/main.ts +++ b/scripts/main.ts @@ -1,7 +1,8 @@ import * as anchor from "@coral-xyz/anchor"; -import * as token from "@solana/spl-token"; -const { PublicKey, Keypair, SystemProgram } = anchor.web3; +// @ts-ignore +import * as token from "@solana/spl-token-018"; const { BN, Program } = anchor; +import { MPL_TOKEN_METADATA_PROGRAM_ID as UMI_MPL_TOKEN_METADATA_PROGRAM_ID } from "@metaplex-foundation/mpl-token-metadata"; import { OpenBookV2Client, @@ -10,14 +11,25 @@ import { OrderType, SelfTradeBehavior, } from "@openbook-dex/openbook-v2"; +import { toWeb3JsPublicKey } from "@metaplex-foundation/umi-web3js-adapters"; +import { + ComputeBudgetProgram, + Keypair, + PublicKey, + SYSVAR_RENT_PUBKEY, + SystemProgram, + Transaction, +} from "@solana/web3.js"; +import { + fetchOnchainMetadataForMint, + uploadOffchainMetadata, +} from "./uploadOffchainMetadata"; import { AutocratV0 } from "../target/types/autocrat_v0"; - import { IDL as ConditionalVaultIDL, ConditionalVault, } from "../target/types/conditional_vault"; - import { OpenbookTwap } from "../tests/fixtures/openbook_twap"; import { AutocratMigrator } from "../target/types/autocrat_migrator"; @@ -25,19 +37,16 @@ const AutocratIDL: AutocratV0 = require("../target/idl/autocrat_v0.json"); const OpenbookTwapIDL: OpenbookTwap = require("../tests/fixtures/openbook_twap.json"); const AutocratMigratorIDL: AutocratMigrator = require("../target/idl/autocrat_migrator.json"); -const NEW_AUTOCRAT_PROGRAM_ID = new PublicKey( - "metaX99LHn3A7Gr7VAcCfXhpfocvpMpqQ3eyp3PGUUq" -); const AUTOCRAT_PROGRAM_ID = new PublicKey( - "meta3cxKzFBmWYgCVozmvCQAS3y9b3fGxrG9HkHL7Wi" + "metaRK9dUBnrAdZN6uUDKvxBVKW5pyCbPVmLtUZwtBp" ); const CONDITIONAL_VAULT_PROGRAM_ID = new PublicKey( - "vaU1tVLj8RFk7mNj1BxqgAsMKKaL8UvEUHvU3tdbZPe" + "vAuLTQjV5AZx5f3UgE75wcnkxnQowWxThn1hGjfCVwP" ); const OPENBOOK_TWAP_PROGRAM_ID = new PublicKey( - "TWAPrdhADy2aTKN5iFZtNnkQYXERD9NvKjPFVPMSCNN" + "twAP5sArq2vDS1mZCT7f4qRLwzTfHvf5Ay5R5Q5df1m" ); -const OPENBOOK_PROGRAM_ID = new PublicKey( +export const OPENBOOK_PROGRAM_ID = new PublicKey( "opnb2LAfJYbRMAHHvqjCwQxanZn7ReEHp1k81EohpZb" ); @@ -54,9 +63,26 @@ export const PROPH3t_PUBKEY = new PublicKey( "65U66fcYuNfqN12vzateJhZ4bgDuxFWN9gMwraeQKByg" ); const AUTOCRAT_MIGRATOR_PROGRAM_ID = new PublicKey( - "migkwAXrXFN34voCYQUhFQBXZJjHrWnpEXbSGTqZdB3" + "MigRDW6uxyNMDBD8fX2njCRyJC4YZk2Rx9pDUZiAESt" +); + +const MPL_TOKEN_METADATA_PROGRAM_ID = toWeb3JsPublicKey( + UMI_MPL_TOKEN_METADATA_PROGRAM_ID ); +const findMetaplexMetadataPda = async (mint: PublicKey) => { + const [publicKey] = PublicKey.findProgramAddressSync( + [ + anchor.utils.bytes.utf8.encode("metadata"), + MPL_TOKEN_METADATA_PROGRAM_ID.toBuffer(), + mint.toBuffer(), + ], + MPL_TOKEN_METADATA_PROGRAM_ID + ); + + return publicKey; +}; + export const provider = anchor.AnchorProvider.env(); anchor.setProvider(provider); @@ -67,11 +93,6 @@ export const autocratProgram = new Program( AUTOCRAT_PROGRAM_ID, provider ); -export const newAutocratProgram = new Program( - AutocratIDL, - NEW_AUTOCRAT_PROGRAM_ID, - provider -); export const vaultProgram = new Program( ConditionalVaultIDL, @@ -92,27 +113,16 @@ export const migrator = new anchor.Program( provider ); -const [dao] = PublicKey.findProgramAddressSync( +export const [dao] = PublicKey.findProgramAddressSync( [anchor.utils.bytes.utf8.encode("WWCACOTMICMIBMHAFTTWYGHMB")], autocratProgram.programId ); -const [daoTreasury] = PublicKey.findProgramAddressSync( +export const [daoTreasury] = PublicKey.findProgramAddressSync( [dao.toBuffer()], autocratProgram.programId ); -const [newDao] = PublicKey.findProgramAddressSync( - [anchor.utils.bytes.utf8.encode("WWCACOTMICMIBMHAFTTWYGHMB")], - newAutocratProgram.programId -); - -const [newDaoTreasury] = PublicKey.findProgramAddressSync( - [newDao.toBuffer()], - newAutocratProgram.programId -); - - async function createMint( mintAuthority: any, freezeAuthority: any, @@ -132,9 +142,9 @@ async function createMint( async function initializeVault( settlementAuthority: any, underlyingTokenMint: any, - nonce: any + nonce: anchor.BN ): Promise { - const [vault] = anchor.web3.PublicKey.findProgramAddressSync( + const [vault] = PublicKey.findProgramAddressSync( [ anchor.utils.bytes.utf8.encode("conditional_vault"), settlementAuthority.toBuffer(), @@ -156,8 +166,51 @@ async function initializeVault( true ); - let conditionalOnFinalizeKP = anchor.web3.Keypair.generate(); - let conditionalOnRevertKP = anchor.web3.Keypair.generate(); + let conditionalOnFinalizeKP = Keypair.generate(); + let conditionalOnRevertKP = Keypair.generate(); + + const { key: underlyingTokenMetadataKey, metadata: underlyingTokenMetadata } = + await fetchOnchainMetadataForMint(underlyingTokenMint); + + console.log( + `metadata for token = ${underlyingTokenMint.toBase58()}`, + underlyingTokenMetadata + ); + + const conditionalOnFinalizeTokenMetadata = await findMetaplexMetadataPda( + conditionalOnFinalizeKP.publicKey + ); + const conditionalOnRevertTokenMetadata = await findMetaplexMetadataPda( + conditionalOnRevertKP.publicKey + ); + + // pull off the least significant 32 bits representing the proposal count + const proposalCount = nonce.and(new BN(1).shln(32).sub(new BN(1))); + + // create new json, take that and pipe into the instruction + const { passTokenMetadataUri, faileTokenMetadataUri } = + await uploadOffchainMetadata(proposalCount, underlyingTokenMetadata.symbol); + + const addMetadataToConditionalTokensIx = await vaultProgram.methods + .addMetadataToConditionalTokens( + proposalCount, + passTokenMetadataUri, + faileTokenMetadataUri + ) + .accounts({ + payer: payer.publicKey, + vault, + underlyingTokenMint, + underlyingTokenMetadata: underlyingTokenMetadataKey, + conditionalOnFinalizeTokenMint: conditionalOnFinalizeKP.publicKey, + conditionalOnRevertTokenMint: conditionalOnRevertKP.publicKey, + conditionalOnFinalizeTokenMetadata, + conditionalOnRevertTokenMetadata, + tokenMetadataProgram: MPL_TOKEN_METADATA_PROGRAM_ID, + systemProgram: SystemProgram.programId, + rent: SYSVAR_RENT_PUBKEY, + }) + .instruction(); await vaultProgram.methods .initializeConditionalVault(settlementAuthority, nonce) @@ -170,9 +223,18 @@ async function initializeVault( payer: payer.publicKey, tokenProgram: token.TOKEN_PROGRAM_ID, associatedTokenProgram: token.ASSOCIATED_TOKEN_PROGRAM_ID, - systemProgram: anchor.web3.SystemProgram.programId, + systemProgram: SystemProgram.programId, }) .signers([conditionalOnFinalizeKP, conditionalOnRevertKP]) + .preInstructions([ + ComputeBudgetProgram.setComputeUnitLimit({ + units: 150_000 + }), + ComputeBudgetProgram.setComputeUnitPrice({ + microLamports: 100 + }), + ]) + .postInstructions([addMetadataToConditionalTokensIx]) .rpc(); //const storedVault = await vaultProgram.account.conditionalVault.fetch( @@ -183,7 +245,7 @@ async function initializeVault( return vault; } -async function initializeDAO(META: any, USDC: any) { +export async function initializeDAO(META: any, USDC: any) { await autocratProgram.methods .initializeDao() .accounts({ @@ -194,82 +256,108 @@ async function initializeDAO(META: any, USDC: any) { .rpc(); } -async function initializeProposal() { - const treasuryMetaAccount = await token.getOrCreateAssociatedTokenAccount( - provider.connection, - payer, - META, - daoTreasury, - true - ); - - const treasuryUsdcAccount = await token.getOrCreateAssociatedTokenAccount( - provider.connection, - payer, - USDC, - daoTreasury, - true - ); - - const newTreasuryMetaAccount = await token.getOrCreateAssociatedTokenAccount( - provider.connection, - payer, - META, - newDaoTreasury, - true - ); - - const newTreasuryUsdcAccount = await token.getOrCreateAssociatedTokenAccount( - provider.connection, - payer, - USDC, - newDaoTreasury, - true - ); - - const ix = await migrator.methods - .multiTransfer2() - .accounts({ - authority: daoTreasury, - from0: treasuryMetaAccount.address, - to0: newTreasuryMetaAccount.address, - from1: treasuryUsdcAccount.address, - to1: newTreasuryUsdcAccount.address, - lamportReceiver: newDaoTreasury, - }) - .instruction(); - - const instruction = { - programId: ix.programId, - accounts: ix.keys, - data: ix.data, - }; - - // const programId = transferIx.programId; - // const accounts = transferIx.keys; - // const data = transferIx.data; - - // const instruction = { - // programId, - // accounts, - // data, - // }; +export async function fetchDao() { + return autocratProgram.account.dao.fetch(dao); +} +// async function finalizeProposal(proposal: PublicKey) { +// const storedProposal = await autocratProgram.account.proposal.fetch(proposal); +// console.log(storedProposal) +// const treasuryMetaAccount = await token.getOrCreateAssociatedTokenAccount( +// provider.connection, +// payer, +// META, +// daoTreasury, +// true +// ); + +// const treasuryUsdcAccount = await token.getOrCreateAssociatedTokenAccount( +// provider.connection, +// payer, +// USDC, +// daoTreasury, +// true +// ); + +// const newTreasuryMetaAccount = await token.getOrCreateAssociatedTokenAccount( +// provider.connection, +// payer, +// META, +// newDaoTreasury, +// true +// ); + +// const newTreasuryUsdcAccount = await token.getOrCreateAssociatedTokenAccount( +// provider.connection, +// payer, +// USDC, +// newDaoTreasury, +// true +// ); + +// const ix = await migrator.methods +// .multiTransfer2() +// .accounts({ +// authority: daoTreasury, +// from0: treasuryMetaAccount.address, +// to0: newTreasuryMetaAccount.address, +// from1: treasuryUsdcAccount.address, +// to1: newTreasuryUsdcAccount.address, +// lamportReceiver: newDaoTreasury, +// }) +// .instruction(); + +// const instruction = { +// programId: ix.programId, +// accounts: ix.keys, +// data: ix.data, +// }; + +// let tx = await autocratProgram.methods +// .finalizeProposal() +// .accounts({ +// proposal, +// openbookTwapPassMarket: storedProposal.openbookTwapPassMarket, +// openbookTwapFailMarket: storedProposal.openbookTwapFailMarket, +// dao, +// baseVault: storedProposal.baseVault, +// quoteVault: storedProposal.quoteVault, +// vaultProgram: vaultProgram.programId, +// daoTreasury, +// }) +// .remainingAccounts( +// instruction.accounts +// .concat({ +// pubkey: instruction.programId, +// isWritable: false, +// isSigner: false, +// }) +// .map((meta) => +// meta.pubkey.equals(daoTreasury) +// ? { ...meta, isSigner: false } +// : meta +// ) +// ) +// .rpc(); + +// console.log("Proposal finalized", tx); +// } + +export async function initializeProposal( + instruction: any, + proposalURL: string +) { const proposalKeypair = Keypair.generate(); - // const storedDAO = await autocratProgram.account.dao.fetch(dao); - // console.log(storedDAO); + const storedDAO = await autocratProgram.account.dao.fetch(dao); + console.log(storedDAO); // least signficant 32 bits of nonce are proposal number // most significant bit of nonce is 0 for base and 1 for quote - let baseNonce = new BN(1); + let baseNonce = new BN(storedDAO.proposalCount); - const baseVault = await initializeVault( - daoTreasury, - META, - baseNonce - ); + const baseVault = await initializeVault(daoTreasury, META, baseNonce); const quoteVault = await initializeVault( daoTreasury, @@ -292,6 +380,7 @@ async function initializeProposal() { ).conditionalOnRevertTokenMint; let openbookPassMarketKP = Keypair.generate(); + // let openbookPassMarket = new PublicKey("HspxPoqFhAmurNGA1FxdeaUbRcZrv8FoR2vAsyYs3EGA"); let [openbookTwapPassMarket] = PublicKey.findProgramAddressSync( [ @@ -301,32 +390,53 @@ async function initializeProposal() { openbookTwap.programId ); - let openbookPassMarket = await openbook.createMarket( - payer, - "pMETA/pUSDC", - passQuoteMint, - passBaseMint, - new BN(100), - new BN(1e9), - new BN(0), - new BN(0), - new BN(0), - null, - null, - openbookTwapPassMarket, - null, - openbookTwapPassMarket, - { confFilter: 0.1, maxStalenessSlots: 100 }, - openbookPassMarketKP - ); + const currentTimeInSeconds = Math.floor(Date.now() / 1000); + const elevenDaysInSeconds = 11 * 24 * 60 * 60; + const expiryTime = new BN(currentTimeInSeconds + elevenDaysInSeconds); + const quoteLotSize = new BN(100); + const baseLotSize = new BN(1e8); + const maxObservationChangePerUpdateLots = new BN(5_000); + + let [passMarketInstructions, passMarketSigners] = + await openbook.createMarketIx( + payer.publicKey, + `${baseNonce}pMETA/pUSDC`, + passQuoteMint, + passBaseMint, + quoteLotSize, + baseLotSize, + new BN(0), + new BN(0), + expiryTime, + null, + null, + openbookTwapPassMarket, + null, + openbookTwapPassMarket, + { confFilter: 0.1, maxStalenessSlots: 100 }, + openbookPassMarketKP, + daoTreasury + ); - await openbookTwap.methods - .createTwapMarket(new BN(1_000)) - .accounts({ - market: openbookPassMarket, - twapMarket: openbookTwapPassMarket, - }) - .rpc(); + const cuPriceIx = ComputeBudgetProgram.setComputeUnitPrice({ + microLamports: 100, + }); + const cuLimitIx = ComputeBudgetProgram.setComputeUnitLimit({ + units: 150_000 + }); + + let tx1 = new Transaction(); + tx1.add(...passMarketInstructions); + tx1.add(cuPriceIx); + tx1.add(cuLimitIx); + + let blockhash = await provider.connection.getLatestBlockhash(); + tx1.recentBlockhash = blockhash.blockhash; + + tx1.sign(payer); + + const sig1 = await provider.sendAndConfirm(tx1, passMarketSigners); + console.log("First market created:\n", sig1); let openbookFailMarketKP = Keypair.generate(); @@ -338,41 +448,60 @@ async function initializeProposal() { openbookTwap.programId ); - let openbookFailMarket = await openbook.createMarket( - payer, - "fMETA/fUSDC", + let openbookFailMarketIx = await openbook.createMarketIx( + payer.publicKey, + `${baseNonce}fMETA/fUSDC`, failQuoteMint, failBaseMint, - new BN(100), - new BN(1e9), - new BN(0), + quoteLotSize, + baseLotSize, new BN(0), new BN(0), + expiryTime, null, null, openbookTwapFailMarket, null, openbookTwapFailMarket, { confFilter: 0.1, maxStalenessSlots: 100 }, - openbookFailMarketKP + openbookFailMarketKP, + daoTreasury ); - await openbookTwap.methods - .createTwapMarket(new BN(1_000)) - .accounts({ - market: openbookFailMarket, - twapMarket: openbookTwapFailMarket, - }) - .rpc(); - const proposalURL = "https://hackmd.io/5ZkjJtE5STGZn2fH9iMPPw?view"; + let tx = new Transaction(); + tx.add(...openbookFailMarketIx[0]); + tx.add(cuPriceIx); + tx.add(cuLimitIx); + + blockhash = await provider.connection.getLatestBlockhash(); + tx.recentBlockhash = blockhash.blockhash; + + const marketSig2 = await provider.sendAndConfirm(tx, openbookFailMarketIx[1]); + console.log("Second market created:\n", marketSig2); await autocratProgram.methods .initializeProposal(proposalURL, instruction) .preInstructions([ await autocratProgram.account.proposal.createInstruction( proposalKeypair, - 1500 + 1000 ), + await openbookTwap.methods + .createTwapMarket(new BN(10_000), maxObservationChangePerUpdateLots) + .accounts({ + market: openbookPassMarketKP.publicKey, + twapMarket: openbookTwapPassMarket, + }) + .instruction(), + await openbookTwap.methods + .createTwapMarket(new BN(10_000), maxObservationChangePerUpdateLots) + .accounts({ + market: openbookFailMarketKP.publicKey, + twapMarket: openbookTwapFailMarket, + }) + .instruction(), + cuPriceIx, + cuLimitIx, ]) .accounts({ proposal: proposalKeypair.publicKey, @@ -380,8 +509,8 @@ async function initializeProposal() { daoTreasury, quoteVault, baseVault, - openbookPassMarket, - openbookFailMarket, + openbookPassMarket: openbookPassMarketKP.publicKey, + openbookFailMarket: openbookFailMarketKP.publicKey, openbookTwapPassMarket, openbookTwapFailMarket, proposer: payer.publicKey, @@ -417,8 +546,8 @@ async function placeOrdersOnBothSides(twapMarket: any) { limit: 255, }; - const storedMarket = await openbook.getMarketAccount(market); - let openOrdersAccount = new anchor.web3.PublicKey( + const storedMarket = await openbook.deserializeMarketAccount(market); + let openOrdersAccount = new PublicKey( "CxDQ5RSYebF6mRLDrXYn1An7bawe6S3iyaU5rZBjz4Xs" ); // let openOrdersAccount = await openbook.createOpenOrders( @@ -476,7 +605,7 @@ async function placeOrdersOnBothSides(twapMarket: any) { async function placeTakeOrder(twapMarket: any) { let market = (await openbookTwap.account.twapMarket.fetch(twapMarket)).market; - const storedMarket = await openbook.getMarketAccount(market); + const storedMarket = await openbook.deserializeMarketAccount(market); const userBaseAccount = await token.getOrCreateAssociatedTokenAccount( provider.connection, @@ -570,10 +699,7 @@ async function placeTakeOrder(twapMarket: any) { ); } -export async function mintConditionalTokens( - amount: number, - vault: anchor.web3.PublicKey -) { +export async function mintConditionalTokens(amount: number, vault: PublicKey) { const storedVault = await vaultProgram.account.conditionalVault.fetch(vault); // Setting default values for optional parameters @@ -608,7 +734,7 @@ export async function mintConditionalTokens( .rpc(); } -async function getOrCreateAccount(mint: anchor.web3.PublicKey) { +async function getOrCreateAccount(mint: PublicKey) { return ( await token.getOrCreateAssociatedTokenAccount( provider.connection, @@ -618,9 +744,3 @@ async function getOrCreateAccount(mint: anchor.web3.PublicKey) { ) ).address; } - -async function main() { - await initializeProposal(); -} - -main(); diff --git a/scripts/multisig.ts b/scripts/multisig.ts new file mode 100644 index 00000000..637fe108 --- /dev/null +++ b/scripts/multisig.ts @@ -0,0 +1,130 @@ +import * as anchor from "@coral-xyz/anchor"; +import { MEMO_PROGRAM_ID } from "@solana/spl-memo"; +import * as multisig from "@sqds/multisig"; +import AmmImpl from "@mercurial-finance/dynamic-amm-sdk"; +import { META, PROPH3t_PUBKEY, USDC } from "./main"; +import { TokenInfo } from "@solana/spl-token-registry"; +import { assert } from "console"; +import { TransactionMessage } from "@solana/web3.js"; + +const { PublicKey, Keypair, SystemProgram } = anchor.web3; +const { BN, Program } = anchor; + +const provider = anchor.AnchorProvider.env(); +anchor.setProvider(provider); + +const payer = provider.wallet["payer"]; + +async function main() { + // const connection = new anchor.web3.Connection("https://mainnet.helius-rpc.com/?api-key=3f6d553e-de08-4fb9-9212-5d87bbfd1328"); + // const createKey = new PublicKey("FpMnruqVCxh3o2oBFZ9uSQmshiyfMqzeJ3YfNQfP9tHy"); + + const ms = new PublicKey("8T2Yp9AuiuH3qXymZadr7DiMtZqdRAr7Qm6DPDFsPohz"); + const msVault = new PublicKey("FpMnruqVCxh3o2oBFZ9uSQmshiyfMqzeJ3YfNQfP9tHy"); + + const multisigAccount = await multisig.accounts.Multisig.fromAccountAddress( + provider.connection, + ms + ); + + const [vaultPda, vaultBump] = multisig.getVaultPda({ + multisigPda: ms, + index: 0, + }); + + assert(vaultPda == msVault); + + console.log(multisigAccount); + + const metaPoolAddr = new PublicKey( + "6t2CdBC26q9tj6jBwPzzFZogtjX8mtmVHUmAFmjAhMSn" + ); + // const metaPoolAddr = new PublicKey("53miVooS2uLfVpiKShXpMqh6PkZhmfDXiRAzs3tNhjwC"); + + const tokenList = (await fetch("https://token.jup.ag/all").then((res) => + res.json() + )) as TokenInfo[]; + + // const cache = await fetch("https://cache.jup.ag/markets?v=3").then((res) => res.json()); + + const USDC_TOKEN_INFO = tokenList.find( + (token) => token.address == USDC.toString() + ); + const META_TOKEN_INFO = tokenList.find( + (token) => token.address == META.toString() + ); + + // console.log(USDC_TOKEN_INFO); + // console.log(META_TOKEN_INFO); + + const metaPool = await AmmImpl.create( + provider.connection, + metaPoolAddr, + META_TOKEN_INFO, + USDC_TOKEN_INFO + ); + + await metaPool.updateState(); + + const { poolTokenAmountOut, tokenAInAmount, tokenBInAmount } = + metaPool.getDepositQuote( + // new anchor.BN(1_000 * 1_000_000_000), + new anchor.BN(0), + new anchor.BN(35_000 * 1_000_000), + true, + 10 + ); + + console.log(tokenAInAmount.toString()); + console.log(tokenBInAmount.toString()); + console.log(poolTokenAmountOut.toString()); + + const depositTx = await metaPool.deposit( + msVault, + tokenAInAmount, + tokenBInAmount, + poolTokenAmountOut + ); + + // console.log(depositTx.instructions.length); + + const transactionMessage = new TransactionMessage({ + payerKey: vaultPda, + recentBlockhash: (await provider.connection.getLatestBlockhash()).blockhash, + instructions: depositTx.instructions, + }); + + const transactionIndex = BigInt( + (multisigAccount.transactionIndex as anchor.BN).addn(1).toString() + ); + console.log(transactionIndex); + + // const sig1 = await multisig.rpc.vaultTransactionCreate({ + // connection: provider.connection, + // feePayer: payer, + // multisigPda: ms, + // transactionIndex: transactionIndex, + // creator: PROPH3t_PUBKEY, + // vaultIndex: 0, + // ephemeralSigners: 0, + // transactionMessage + // }); + + // console.log(sig1); + + const sig2 = await multisig.rpc.proposalCreate({ + connection: provider.connection, + feePayer: payer, + creator: payer, + multisigPda: ms, + transactionIndex: 17n, + }); + + console.log(sig2); + + // console.log(depositIx); + + // console.log(metaPool); +} + +main(); diff --git a/scripts/uploadOffchainMetadata.ts b/scripts/uploadOffchainMetadata.ts new file mode 100755 index 00000000..f6fdb7cd --- /dev/null +++ b/scripts/uploadOffchainMetadata.ts @@ -0,0 +1,187 @@ +import * as anchor from "@coral-xyz/anchor"; +import { + Metadata, + deserializeMetadata, + findMetadataPda, +} from "@metaplex-foundation/mpl-token-metadata"; +import { + GenericFile, + createGenericFile, + keypairIdentity, + publicKey, + signerIdentity, +} from "@metaplex-foundation/umi"; +import { + fromWeb3JsPublicKey, + toWeb3JsPublicKey, +} from "@metaplex-foundation/umi-web3js-adapters"; +import { createUmi } from "@metaplex-foundation/umi-bundle-defaults"; +import { bundlrUploader } from "@metaplex-foundation/umi-uploader-bundlr"; +import { PublicKey } from "@solana/web3.js"; + +import fs from "fs"; + +const uploadedAssetMap: Record = { + fMETA: "https://arweave.net/tGxvOjMZw7B0qHsdCcIMO57oH5g5OaItOZdXo3BXKz8", + fUSDC: "https://arweave.net/DpvxeAyVbaoivhIVCLjdf566k2SwVn0YVBL0sTOezWk", + pMETA: "https://arweave.net/iuqi7PRRESdDxj1oRyk2WzR90_zdFcmZsuWicv3XGfs", + pUSDC: "https://arweave.net/e4IO7F59F_RKCiuB--_ABPot7Qh1yFsGkWzVhcXuKDU", +}; + +const provider = anchor.AnchorProvider.env(); +anchor.setProvider(provider); + +const payer = provider.wallet["payer"]; + +const umi = createUmi(provider.connection); +umi.use(keypairIdentity(payer)); + +type AcceptedVaultTokens = "META" | "USDC"; +type ConditionalToken = "pMETA" | "fMETA" | "pUSDC" | "fUSDC"; + +const isConditionalToken = (value: string): value is ConditionalToken => + ["pMETA", "fMETA", "pUSDC", "fUSDC"].includes(value as ConditionalToken); + +const isAcceptedVaultToken = (value: string): value is AcceptedVaultTokens => + ["META", "USDC"].includes(value as AcceptedVaultTokens); + +/** + * Usage options + * + * 1: just upload images + * uploadImageData() + * .then((res) => console.log(res)) + * .catch((err) => console.error(err)); + * + * 2: Use pre-existing images in assets/ dir and upload new JSON + * + * const proposalNumber = new BN(0); + * Promise.all( + * uploadedAssetMap.map((asset) => + * uploadImageJson(proposalNumber, asset.name as ConditionalToken, asset.uri) + * ) + * ).then((res) => console.log(res)) + * .catch((err) => console.error(err)); + * + * 3: upload new images, then upload json. new images aren't needed everytime, but + * leaving in for reference. + * + * const proposalNumber = new BN(0); + * uploadImageData() + * .then((results) => { + * results.map((result) => { + * uploadImageJson(proposalNumber, result.name as ConditionalToken, result.uri); + * }); + * }) + * .catch((err) => console.error(err)); + */ + +const uploadImageData = async () => { + // use bundlr, targeting arweave + umi.use(bundlrUploader()); + + const sourceDirContent = fs.readdirSync(`${__dirname}/assets`); + console.log(sourceDirContent); + + if ( + !sourceDirContent + .map((x) => isConditionalToken(x.split(".")[0])) + .every((x) => x) + ) { + throw new Error( + `Found unexpected filename in assets directory. Only setup to handle "ConditionalToken"` + ); + } + + const filesToUpload: Array = []; + for (const filename of sourceDirContent) { + const data = fs.readFileSync(`${__dirname}/assets/${filename}`); + filesToUpload.push( + createGenericFile(new Uint8Array(data), filename, { + contentType: "image/png", + }) + ); + } + + const uris = await umi.uploader.upload(filesToUpload); + + return uris.map((uri, idx) => { + return { + uri, + name: filesToUpload[idx].fileName.split(".")[0], + }; + }); +}; + +export const uploadImageJson = async ( + proposal: anchor.BN, + conditionalToken: ConditionalToken, + image: string +) => { + // use bundlr, targeting arweave + umi.use(bundlrUploader()); + + const market = conditionalToken.toLowerCase().startsWith("p") + ? "pass" + : "fail"; + return umi.uploader.uploadJson({ + name: `Proposal ${proposal.toNumber()}: ${conditionalToken}`, + image, + symbol: conditionalToken, + description: `Native token in the MetaDAO's conditional ${market} market for proposal ${proposal.toNumber()}`, + }); +}; + +export const uploadOffchainMetadata = async ( + proposal: anchor.BN, + symbol: string +) => { + // use bundlr, targeting arweave + umi.use(bundlrUploader()); + + if (!isAcceptedVaultToken(symbol)) { + throw new Error(`Unrecognized symbol provided: ${symbol}`); + } + + console.log(`uploading metadata for token ${symbol}...`); + const [passUri, failUri] = await Promise.all( + [`p${symbol}`, `f${symbol}`].map((symbol) => { + return uploadImageJson( + proposal, + symbol as ConditionalToken, + uploadedAssetMap[symbol] + ); + }) + ); + + return { + symbol, + passTokenMetadataUri: passUri, + faileTokenMetadataUri: failUri, + }; +}; + +export const fetchOnchainMetadataForMint = async ( + address: PublicKey +): + | Promise<{ + key: PublicKey; + metadata: Metadata; + }> + | undefined => { + const pda = findMetadataPda(umi, { + mint: fromWeb3JsPublicKey(address), + }); + + const acct = await umi.rpc.getAccount(pda[0]); + if (!acct.exists) { + throw new Error(`Unable to find metaplex metdata for mint = ${address}`); + } + + return { + key: toWeb3JsPublicKey(pda[0]), + metadata: deserializeMetadata(acct), + }; +}; + +// fetchOnchainMetadataForMint(); diff --git a/tests/autocratV0.ts b/tests/autocratV0.ts index 326b784d..8fe22e33 100644 --- a/tests/autocratV0.ts +++ b/tests/autocratV0.ts @@ -2,37 +2,42 @@ import * as anchor from "@coral-xyz/anchor"; import { BN, Program } from "@coral-xyz/anchor"; import * as token from "@solana/spl-token"; import { BankrunProvider } from "anchor-bankrun"; -import { - mintConditionalTokens, - redeemConditionalTokens, -} from "./conditionalVault"; import { OpenBookV2Client, - IDL, PlaceOrderArgs, Side, OrderType, SelfTradeBehavior, } from "@openbook-dex/openbook-v2"; - -const { PublicKey, Keypair } = anchor.web3; - import { assert } from "chai"; - import { startAnchor, Clock, BanksClient, ProgramTestContext, } from "solana-bankrun"; +import { + createMint, + createAccount, + createAssociatedTokenAccount, + mintToOverride, + getMint, + getAccount, +} from "spl-token-bankrun"; -import { expectError } from "./utils/utils"; +import { + mintConditionalTokens, + redeemConditionalTokens, +} from "./conditionalVault"; +import { expectError } from "./utils/utils"; import { AutocratV0 } from "../target/types/autocrat_v0"; import { ConditionalVault } from "../target/types/conditional_vault"; import { AutocratMigrator } from "../target/types/autocrat_migrator"; -import { OpenbookTwap } from "./fixtures/openbook_twap"; +const { PublicKey, Keypair } = anchor.web3; + +import { OpenbookTwap } from "./fixtures/openbook_twap"; const OpenbookTwapIDL: OpenbookTwap = require("./fixtures/openbook_twap.json"); const AutocratIDL: AutocratV0 = require("../target/idl/autocrat_v0.json"); @@ -56,27 +61,17 @@ interface MarketMaker { type ProposalInstruction = anchor.IdlTypes["ProposalInstruction"]; -import { - createMint, - createAccount, - createAssociatedTokenAccount, - mintToOverride, - getMint, - getAccount, -} from "spl-token-bankrun"; -import { open } from "fs"; - // this test file isn't 'clean' or DRY or whatever; sorry! const AUTOCRAT_PROGRAM_ID = new PublicKey( - "metaX99LHn3A7Gr7VAcCfXhpfocvpMpqQ3eyp3PGUUq" + "metaRK9dUBnrAdZN6uUDKvxBVKW5pyCbPVmLtUZwtBp" ); const CONDITIONAL_VAULT_PROGRAM_ID = new PublicKey( - "vaU1tVLj8RFk7mNj1BxqgAsMKKaL8UvEUHvU3tdbZPe" + "vAuLTQjV5AZx5f3UgE75wcnkxnQowWxThn1hGjfCVwP" ); const OPENBOOK_TWAP_PROGRAM_ID = new PublicKey( - "TWAPrdhADy2aTKN5iFZtNnkQYXERD9NvKjPFVPMSCNN" + "twAP5sArq2vDS1mZCT7f4qRLwzTfHvf5Ay5R5Q5df1m" ); const OPENBOOK_PROGRAM_ID = new PublicKey( @@ -84,22 +79,21 @@ const OPENBOOK_PROGRAM_ID = new PublicKey( ); const AUTOCRAT_MIGRATOR_PROGRAM_ID = new PublicKey( - "migkwAXrXFN34voCYQUhFQBXZJjHrWnpEXbSGTqZdB3" + "MigRDW6uxyNMDBD8fX2njCRyJC4YZk2Rx9pDUZiAESt" ); describe("autocrat_v0", async function () { let provider, - connection, autocrat, payer, context, - banksClient, + banksClient: BanksClient, dao, daoTreasury, META, USDC, vaultProgram, - openbook, + openbook: OpenBookV2Client, openbookTwap, migrator, treasuryMetaAccount, @@ -148,7 +142,7 @@ describe("autocrat_v0", async function () { provider ); - payer = autocrat.provider.wallet.payer; + payer = provider.wallet.payer; USDC = await createMint( banksClient, @@ -191,7 +185,7 @@ describe("autocrat_v0", async function () { assert(daoAcc.metaMint.equals(META)); assert(daoAcc.usdcMint.equals(USDC)); assert.equal(daoAcc.proposalCount, 2); - assert.equal(daoAcc.passThresholdBps, 500); + assert.equal(daoAcc.passThresholdBps, 300); assert.ok(daoAcc.baseBurnLamports.eq(new BN(1_000_000_000).muln(10))); assert.ok(daoAcc.burnDecayPerSlotLamports.eq(new BN(23_150))); @@ -226,7 +220,7 @@ describe("autocrat_v0", async function () { burnDecayPerSlotLamports: null, slotsPerProposal: null, marketTakerFee: null, - } + }, }); const instruction = { programId: autocrat.programId, @@ -330,7 +324,7 @@ describe("autocrat_v0", async function () { // toPubkey: lamportReceiver.publicKey, // lamports: 1_000_000, // }); - + // instruction = { // programId: ix.programId, // accounts: ix.keys, @@ -537,127 +531,17 @@ describe("autocrat_v0", async function () { it("finalizes proposals when pass price TWAP > (fail price TWAP + threshold)", async function () { let storedProposal = await autocrat.account.proposal.fetch(proposal); - let passBuyArgs: PlaceOrderArgs = { - side: Side.Bid, - priceLots: new BN(10000), // 1 USDC for 1 META - maxBaseLots: new BN(10), - maxQuoteLotsIncludingFees: new BN(10000), - clientOrderId: new BN(1), - orderType: OrderType.Limit, - expiryTimestamp: new BN(0), - selfTradeBehavior: SelfTradeBehavior.DecrementTake, - limit: 255, - }; - let failBuyArgs: PlaceOrderArgs = { - side: Side.Bid, - priceLots: new BN(7000), // 0.7 USDC for 1 META - maxBaseLots: new BN(10), - maxQuoteLotsIncludingFees: new BN(10000), - clientOrderId: new BN(1), - orderType: OrderType.Limit, - expiryTimestamp: new BN(0), - selfTradeBehavior: SelfTradeBehavior.DecrementTake, - limit: 255, - }; - - let passSellArgs: PlaceOrderArgs = { - side: Side.Ask, - priceLots: new BN(11_000), // 1.1 USDC for 1 META - maxBaseLots: new BN(10), - maxQuoteLotsIncludingFees: new BN(12000), - clientOrderId: new BN(2), - orderType: OrderType.Limit, - expiryTimestamp: new BN(0), - selfTradeBehavior: SelfTradeBehavior.DecrementTake, - limit: 255, - }; - let failSellArgs: PlaceOrderArgs = { - side: Side.Ask, - priceLots: new BN(8_000), // 8 USDC for 1 META - maxBaseLots: new BN(10), - maxQuoteLotsIncludingFees: new BN(12000), - clientOrderId: new BN(2), - orderType: OrderType.Limit, - expiryTimestamp: new BN(0), - selfTradeBehavior: SelfTradeBehavior.DecrementTake, - limit: 255, - }; - const storedPassMarket = await openbook.getMarketAccount( + const storedPassMarket = await openbook.deserializeMarketAccount( openbookPassMarket ); - const storedFailMarket = await openbook.getMarketAccount( + const storedFailMarket = await openbook.deserializeMarketAccount( openbookFailMarket ); let currentClock; for (let i = 0; i < 10; i++) { - await openbookTwap.methods - .placeOrder(passBuyArgs) - .accounts({ - signer: mm0.publicKey, - market: openbookPassMarket, - asks: storedPassMarket.asks, - bids: storedPassMarket.bids, - marketVault: storedPassMarket.marketQuoteVault, - eventHeap: storedPassMarket.eventHeap, - openOrdersAccount: mm0.pOpenOrdersAccount, - userTokenAccount: mm0.pUsdcAcc, - twapMarket: openbookTwapPassMarket, - openbookProgram: OPENBOOK_PROGRAM_ID, - }) - .signers([mm0.keypair]) - .rpc(); - - await openbookTwap.methods - .placeOrder(passSellArgs) - .accounts({ - signer: mm0.publicKey, - market: openbookPassMarket, - asks: storedPassMarket.asks, - bids: storedPassMarket.bids, - marketVault: storedPassMarket.marketBaseVault, - eventHeap: storedPassMarket.eventHeap, - openOrdersAccount: mm0.pOpenOrdersAccount, - userTokenAccount: mm0.pMetaAcc, - twapMarket: openbookTwapPassMarket, - openbookProgram: OPENBOOK_PROGRAM_ID, - }) - .signers([mm0.keypair]) - .rpc(); - - await openbookTwap.methods - .placeOrder(failBuyArgs) - .accounts({ - signer: mm0.publicKey, - market: openbookFailMarket, - asks: storedFailMarket.asks, - bids: storedFailMarket.bids, - marketVault: storedFailMarket.marketQuoteVault, - eventHeap: storedFailMarket.eventHeap, - openOrdersAccount: mm0.fOpenOrdersAccount, - userTokenAccount: mm0.fUsdcAcc, - twapMarket: openbookTwapFailMarket, - openbookProgram: OPENBOOK_PROGRAM_ID, - }) - .signers([mm0.keypair]) - .rpc(); - - await openbookTwap.methods - .placeOrder(failSellArgs) - .accounts({ - signer: mm0.publicKey, - market: openbookFailMarket, - asks: storedFailMarket.asks, - bids: storedFailMarket.bids, - marketVault: storedFailMarket.marketBaseVault, - eventHeap: storedFailMarket.eventHeap, - openOrdersAccount: mm0.fOpenOrdersAccount, - userTokenAccount: mm0.fMetaAcc, - twapMarket: openbookTwapFailMarket, - openbookProgram: OPENBOOK_PROGRAM_ID, - }) - .signers([mm0.keypair]) - .rpc(); + await placeOrdersAroundMid(openbookTwap, openbook, openbookTwapPassMarket, mm0, 140_000); + await placeOrdersAroundMid(openbookTwap, openbook, openbookTwapFailMarket, mm0, 7_500); currentClock = await context.banksClient.getClock(); context.setClock( new Clock( @@ -682,11 +566,11 @@ describe("autocrat_v0", async function () { ) ); - let takeBuyArgs: PlaceOrderArgs = { + let takeBuyPassArgs: PlaceOrderArgs = { side: Side.Bid, - priceLots: new BN(13000), // 13 USDC for 1 META - maxBaseLots: new BN(1), - maxQuoteLotsIncludingFees: new BN(20000), + priceLots: new BN(145_000), // $14.5 USDC for 0.1 META + maxBaseLots: new BN(10), // Buy 1 meta + maxQuoteLotsIncludingFees: new BN(10_450_000), clientOrderId: new BN(1), orderType: OrderType.Market, expiryTimestamp: new BN(0), @@ -695,7 +579,7 @@ describe("autocrat_v0", async function () { }; await openbookTwap.methods - .placeTakeOrder(takeBuyArgs) + .placeTakeOrder(takeBuyPassArgs) .accountsStrict({ market: openbookPassMarket, asks: storedPassMarket.asks, @@ -727,76 +611,10 @@ describe("autocrat_v0", async function () { currentClock.unixTimestamp ) ); + await placeOrdersAroundMid(openbookTwap, openbook, openbookTwapPassMarket, mm0, 140_000); + await placeOrdersAroundMid(openbookTwap, openbook, openbookTwapFailMarket, mm0, 7_500); - await openbookTwap.methods - .placeOrder(passBuyArgs) - .accounts({ - signer: mm0.publicKey, - market: openbookPassMarket, - asks: storedPassMarket.asks, - bids: storedPassMarket.bids, - marketVault: storedPassMarket.marketQuoteVault, - eventHeap: storedPassMarket.eventHeap, - openOrdersAccount: mm0.pOpenOrdersAccount, - userTokenAccount: mm0.pUsdcAcc, - twapMarket: openbookTwapPassMarket, - openbookProgram: OPENBOOK_PROGRAM_ID, - }) - .signers([mm0.keypair]) - .rpc(); - - await openbookTwap.methods - .placeOrder(passSellArgs) - .accounts({ - signer: mm0.publicKey, - market: openbookPassMarket, - asks: storedPassMarket.asks, - bids: storedPassMarket.bids, - marketVault: storedPassMarket.marketBaseVault, - eventHeap: storedPassMarket.eventHeap, - openOrdersAccount: mm0.pOpenOrdersAccount, - userTokenAccount: mm0.pMetaAcc, - twapMarket: openbookTwapPassMarket, - openbookProgram: OPENBOOK_PROGRAM_ID, - }) - .signers([mm0.keypair]) - .rpc(); - - await openbookTwap.methods - .placeOrder(failBuyArgs) - .accounts({ - signer: mm0.publicKey, - market: openbookFailMarket, - asks: storedFailMarket.asks, - bids: storedFailMarket.bids, - marketVault: storedFailMarket.marketQuoteVault, - eventHeap: storedFailMarket.eventHeap, - openOrdersAccount: mm0.fOpenOrdersAccount, - userTokenAccount: mm0.fUsdcAcc, - twapMarket: openbookTwapFailMarket, - openbookProgram: OPENBOOK_PROGRAM_ID, - }) - .signers([mm0.keypair]) - .rpc(); - - await openbookTwap.methods - .placeOrder(failSellArgs) - .accounts({ - signer: mm0.publicKey, - market: openbookFailMarket, - asks: storedFailMarket.asks, - bids: storedFailMarket.bids, - marketVault: storedFailMarket.marketBaseVault, - eventHeap: storedFailMarket.eventHeap, - openOrdersAccount: mm0.fOpenOrdersAccount, - userTokenAccount: mm0.fMetaAcc, - twapMarket: openbookTwapFailMarket, - openbookProgram: OPENBOOK_PROGRAM_ID, - }) - .signers([mm0.keypair]) - .rpc(); - - let tx = await autocrat.methods + await autocrat.methods .finalizeProposal() .accounts({ proposal, @@ -839,11 +657,6 @@ describe("autocrat_v0", async function () { assert((await getAccount(banksClient, treasuryMetaAccount)).amount == 0n); assert((await getAccount(banksClient, treasuryUsdcAccount)).amount == 0n); - // console.log(await banksClient.getAccount(daoTreasury)); - - // const storedDao = await autocrat.account.dao.fetch(dao); - // assert.equal(storedDao.passThresholdBps, newPassThresholdBps); - await redeemConditionalTokens( vaultProgram, alice, @@ -869,7 +682,7 @@ describe("autocrat_v0", async function () { banksClient ); - // alice should have gained 1 META & lost 0.11 USDC + // alice should have gained 1 META & lost $145 USDC assert.equal( (await getAccount(banksClient, aliceUnderlyingBaseTokenAccount)).amount, 1_000_000_000n @@ -877,135 +690,32 @@ describe("autocrat_v0", async function () { assert.equal( (await getAccount(banksClient, aliceUnderlyingQuoteTokenAccount)) .amount, - 10_000n * 1_000_000n - 1_100_000n + 10_000n * 1_000_000n - 147_000_000n + ); + // And the TWAP on pass market should be $140 per meta / $14 per 0.1 meta + assert.equal( + ( + await openbookTwap.account.twapMarket.fetch(openbookTwapPassMarket) + ).twapOracle.lastObservation.toNumber(), + 140_000 // ); }); it("rejects proposals when pass price TWAP < fail price TWAP", async function () { let storedProposal = await autocrat.account.proposal.fetch(proposal); - let passBuyArgs: PlaceOrderArgs = { - side: Side.Bid, - priceLots: new BN(1000), // 0.1 USDC for 1 META - maxBaseLots: new BN(10), - maxQuoteLotsIncludingFees: new BN(10000), - clientOrderId: new BN(1), - orderType: OrderType.Limit, - expiryTimestamp: new BN(0), - selfTradeBehavior: SelfTradeBehavior.DecrementTake, - limit: 255, - }; - let failBuyArgs: PlaceOrderArgs = { - side: Side.Bid, - priceLots: new BN(3000), // 0.3 USDC for 1 META - maxBaseLots: new BN(10), - maxQuoteLotsIncludingFees: new BN(10000), - clientOrderId: new BN(1), - orderType: OrderType.Limit, - expiryTimestamp: new BN(0), - selfTradeBehavior: SelfTradeBehavior.DecrementTake, - limit: 255, - }; - - let passSellArgs: PlaceOrderArgs = { - side: Side.Ask, - priceLots: new BN(1100), // 0.11 USDC for 1 META - maxBaseLots: new BN(10), - maxQuoteLotsIncludingFees: new BN(12000), - clientOrderId: new BN(2), - orderType: OrderType.Limit, - expiryTimestamp: new BN(0), - selfTradeBehavior: SelfTradeBehavior.DecrementTake, - limit: 255, - }; - - let failSellArgs: PlaceOrderArgs = { - side: Side.Ask, - priceLots: new BN(3200), // 0.32 USDC for 1 META - maxBaseLots: new BN(10), - maxQuoteLotsIncludingFees: new BN(12000), - clientOrderId: new BN(2), - orderType: OrderType.Limit, - expiryTimestamp: new BN(0), - selfTradeBehavior: SelfTradeBehavior.DecrementTake, - limit: 255, - }; - const storedPassMarket = await openbook.getMarketAccount( + const storedPassMarket = await openbook.deserializeMarketAccount( openbookPassMarket ); - const storedFailMarket = await openbook.getMarketAccount( + const storedFailMarket = await openbook.deserializeMarketAccount( openbookFailMarket ); let currentClock; for (let i = 0; i < 10; i++) { - await openbookTwap.methods - .placeOrder(passBuyArgs) - .accounts({ - signer: mm0.publicKey, - market: openbookPassMarket, - asks: storedPassMarket.asks, - bids: storedPassMarket.bids, - marketVault: storedPassMarket.marketQuoteVault, - eventHeap: storedPassMarket.eventHeap, - openOrdersAccount: mm0.pOpenOrdersAccount, - userTokenAccount: mm0.pUsdcAcc, - twapMarket: openbookTwapPassMarket, - openbookProgram: OPENBOOK_PROGRAM_ID, - }) - .signers([mm0.keypair]) - .rpc(); - - await openbookTwap.methods - .placeOrder(passSellArgs) - .accounts({ - signer: mm0.publicKey, - market: openbookPassMarket, - asks: storedPassMarket.asks, - bids: storedPassMarket.bids, - marketVault: storedPassMarket.marketBaseVault, - eventHeap: storedPassMarket.eventHeap, - openOrdersAccount: mm0.pOpenOrdersAccount, - userTokenAccount: mm0.pMetaAcc, - twapMarket: openbookTwapPassMarket, - openbookProgram: OPENBOOK_PROGRAM_ID, - }) - .signers([mm0.keypair]) - .rpc(); - - await openbookTwap.methods - .placeOrder(failBuyArgs) - .accounts({ - signer: mm0.publicKey, - market: openbookFailMarket, - asks: storedFailMarket.asks, - bids: storedFailMarket.bids, - marketVault: storedFailMarket.marketQuoteVault, - eventHeap: storedFailMarket.eventHeap, - openOrdersAccount: mm0.fOpenOrdersAccount, - userTokenAccount: mm0.fUsdcAcc, - twapMarket: openbookTwapFailMarket, - openbookProgram: OPENBOOK_PROGRAM_ID, - }) - .signers([mm0.keypair]) - .rpc(); - - await openbookTwap.methods - .placeOrder(failSellArgs) - .accounts({ - signer: mm0.publicKey, - market: openbookFailMarket, - asks: storedFailMarket.asks, - bids: storedFailMarket.bids, - marketVault: storedFailMarket.marketBaseVault, - eventHeap: storedFailMarket.eventHeap, - openOrdersAccount: mm0.fOpenOrdersAccount, - userTokenAccount: mm0.fMetaAcc, - twapMarket: openbookTwapFailMarket, - openbookProgram: OPENBOOK_PROGRAM_ID, - }) - .signers([mm0.keypair]) - .rpc(); + await placeOrdersAroundMid(openbookTwap, openbook, openbookTwapPassMarket, mm0, 1050); + await placeOrdersAroundMid(openbookTwap, openbook, openbookTwapFailMarket, mm0, 3000); + currentClock = await context.banksClient.getClock(); context.setClock( new Clock( @@ -1076,73 +786,8 @@ describe("autocrat_v0", async function () { ) ); - await openbookTwap.methods - .placeOrder(passBuyArgs) - .accounts({ - signer: mm0.publicKey, - market: openbookPassMarket, - asks: storedPassMarket.asks, - bids: storedPassMarket.bids, - marketVault: storedPassMarket.marketQuoteVault, - eventHeap: storedPassMarket.eventHeap, - openOrdersAccount: mm0.pOpenOrdersAccount, - userTokenAccount: mm0.pUsdcAcc, - twapMarket: openbookTwapPassMarket, - openbookProgram: OPENBOOK_PROGRAM_ID, - }) - .signers([mm0.keypair]) - .rpc(); - - await openbookTwap.methods - .placeOrder(passSellArgs) - .accounts({ - signer: mm0.publicKey, - market: openbookPassMarket, - asks: storedPassMarket.asks, - bids: storedPassMarket.bids, - marketVault: storedPassMarket.marketBaseVault, - eventHeap: storedPassMarket.eventHeap, - openOrdersAccount: mm0.pOpenOrdersAccount, - userTokenAccount: mm0.pMetaAcc, - twapMarket: openbookTwapPassMarket, - openbookProgram: OPENBOOK_PROGRAM_ID, - }) - .signers([mm0.keypair]) - .rpc(); - - await openbookTwap.methods - .placeOrder(failBuyArgs) - .accounts({ - signer: mm0.publicKey, - market: openbookFailMarket, - asks: storedFailMarket.asks, - bids: storedFailMarket.bids, - marketVault: storedFailMarket.marketQuoteVault, - eventHeap: storedFailMarket.eventHeap, - openOrdersAccount: mm0.fOpenOrdersAccount, - userTokenAccount: mm0.fUsdcAcc, - twapMarket: openbookTwapFailMarket, - openbookProgram: OPENBOOK_PROGRAM_ID, - }) - .signers([mm0.keypair]) - .rpc(); - - await openbookTwap.methods - .placeOrder(failSellArgs) - .accounts({ - signer: mm0.publicKey, - market: openbookFailMarket, - asks: storedFailMarket.asks, - bids: storedFailMarket.bids, - marketVault: storedFailMarket.marketBaseVault, - eventHeap: storedFailMarket.eventHeap, - openOrdersAccount: mm0.fOpenOrdersAccount, - userTokenAccount: mm0.fMetaAcc, - twapMarket: openbookTwapFailMarket, - openbookProgram: OPENBOOK_PROGRAM_ID, - }) - .signers([mm0.keypair]) - .rpc(); + await placeOrdersAroundMid(openbookTwap, openbook, openbookTwapPassMarket, mm0, 1050); + await placeOrdersAroundMid(openbookTwap, openbook, openbookTwapFailMarket, mm0, 3000); let storedDao = await autocrat.account.dao.fetch(dao); const passThresholdBpsBefore = storedDao.passThresholdBps; @@ -1245,8 +890,8 @@ async function generateMarketMaker( ): Promise { const mm = anchor.web3.Keypair.generate(); - const storedPassMarket = await openbook.getMarketAccount(passMarket); - const storedFailMarket = await openbook.getMarketAccount(failMarket); + const storedPassMarket = await openbook.deserializeMarketAccount(passMarket); + const storedFailMarket = await openbook.deserializeMarketAccount(failMarket); const metaPassAcc = await createAccount( banksClient, @@ -1335,18 +980,16 @@ async function generateMarketMaker( banksClient ); - let pOpenOrdersAccount = await openbook.createOpenOrders( + const pOpenOrdersAccount = await openbook.createOpenOrders( payer, passMarket, - new BN(1), "oo", mm ); - let fOpenOrdersAccount = await openbook.createOpenOrders( + const fOpenOrdersAccount = await openbook.createOpenOrders( payer, failMarket, - new BN(2), "oo", mm ); @@ -1356,25 +999,96 @@ async function generateMarketMaker( keypair: mm, pOpenOrdersAccount, fOpenOrdersAccount, - pMetaAcc: token.getAssociatedTokenAddressSync( + pMetaAcc: await token.getAssociatedTokenAddress( storedBaseVault.conditionalOnFinalizeTokenMint, - mm.publicKey + mm.publicKey, + true ), - fMetaAcc: token.getAssociatedTokenAddressSync( + fMetaAcc: await token.getAssociatedTokenAddress( storedBaseVault.conditionalOnRevertTokenMint, - mm.publicKey + mm.publicKey, + true ), - pUsdcAcc: token.getAssociatedTokenAddressSync( + pUsdcAcc: await token.getAssociatedTokenAddress( storedQuoteVault.conditionalOnFinalizeTokenMint, - mm.publicKey + mm.publicKey, + true ), - fUsdcAcc: token.getAssociatedTokenAddressSync( + fUsdcAcc: await token.getAssociatedTokenAddress( storedQuoteVault.conditionalOnRevertTokenMint, - mm.publicKey + mm.publicKey, + true ), }; } +function constructOrderArgs(side: any, priceLots: number, baseLots: number): PlaceOrderArgs { + return { + side, + priceLots: new BN(priceLots), + maxBaseLots: new BN(baseLots), + maxQuoteLotsIncludingFees: new BN(1_000_000_000_000_00), + clientOrderId: new BN(1), + orderType: OrderType.Limit, + expiryTimestamp: new BN(0), + selfTradeBehavior: SelfTradeBehavior.DecrementTake, + limit: 255, + } +} + +async function placeOrdersAroundMid( + openbookTwap: Program, + openbook: OpenBookV2Client, + twapMarket: PublicKey, + maker: MarketMaker, + priceLots: number +) { + const storedTwapMarket = await openbookTwap.account.twapMarket.fetch( + twapMarket + ); + const storedMarket = await openbook.deserializeMarketAccount( + storedTwapMarket.market + ); + + const openOrdersAccount = (await openbook.findOpenOrdersForMarket(maker.publicKey, storedTwapMarket.market))[0]; + + await openbookTwap.methods + .placeOrder(constructOrderArgs(Side.Bid, Math.round(priceLots * 0.95), 10)) + .accounts({ + signer: maker.publicKey, + market: storedTwapMarket.market, + asks: storedMarket.asks, + bids: storedMarket.bids, + marketVault: storedMarket.marketQuoteVault, + eventHeap: storedMarket.eventHeap, + openOrdersAccount, + userTokenAccount: token.getAssociatedTokenAddressSync(storedMarket.quoteMint, maker.publicKey), + twapMarket, + openbookProgram: OPENBOOK_PROGRAM_ID, + }) + .signers([maker.keypair]) + .rpc(); + + await openbookTwap.methods + .placeOrder( + constructOrderArgs(Side.Ask, Math.round(priceLots * 1.05), 10) + ) + .accounts({ + signer: maker.publicKey, + market: storedTwapMarket.market, + asks: storedMarket.asks, + bids: storedMarket.bids, + marketVault: storedMarket.marketBaseVault, + eventHeap: storedMarket.eventHeap, + openOrdersAccount, + userTokenAccount: token.getAssociatedTokenAddressSync(storedMarket.baseMint, maker.publicKey), + twapMarket, + openbookProgram: OPENBOOK_PROGRAM_ID, + }) + .signers([maker.keypair]) + .rpc(); +} + async function initializeProposal( autocrat: Program, ix: ProposalInstruction, @@ -1446,6 +1160,7 @@ async function initializeProposal( const dummyURL = "https://www.eff.org/cyberspace-independence"; let openbookPassMarketKP = Keypair.generate(); + let openbookPassMarket = openbookPassMarketKP.publicKey; let [openbookTwapPassMarket] = PublicKey.findProgramAddressSync( [ @@ -1455,35 +1170,50 @@ async function initializeProposal( openbookTwap.programId ); - let openbookPassMarket = await openbook.createMarket( - payer, - "pMETA/pUSDC", - passQuoteMint, - passBaseMint, - new BN(100), - new BN(1e9), - new BN(0), - new BN(0), - new BN(0), - null, - null, - openbookTwapPassMarket, - null, - openbookTwapPassMarket, - { confFilter: 0.1, maxStalenessSlots: 100 }, - openbookPassMarketKP, - daoTreasury - ); + const currentTimeInSeconds = Math.floor(Date.now() / 1000); + const elevenDaysInSeconds = 11 * 24 * 60 * 60; + const quoteLotSize = new BN(100); + const baseLotSize = new BN(1e8); + const maxObservationChangePerUpdateLots = new BN(5_000); + const expiryTime = new BN(currentTimeInSeconds + elevenDaysInSeconds); + + // https://github.com/openbook-dex/openbook-v2/blob/fd1bfba307479e1587d453e5a8b03a2743339ea6/ts/client/src/client.ts#L246 + let [openbookPassMarketIxs, openbookPassMarketSigners] = + await openbook.createMarketIx( + payer.publicKey, + "pMETA/pUSDC", + passQuoteMint, + passBaseMint, + quoteLotSize, + baseLotSize, + new BN(0), + new BN(0), + expiryTime, + null, + null, + openbookTwapPassMarket, + null, + openbookTwapPassMarket, + { confFilter: 0.1, maxStalenessSlots: 100 }, + openbookPassMarketKP, + daoTreasury + ); await openbookTwap.methods - .createTwapMarket(new BN(daoBefore.twapExpectedValue)) + .createTwapMarket( + new BN(daoBefore.twapExpectedValue), + maxObservationChangePerUpdateLots + ) .accounts({ - market: openbookPassMarket, + market: openbookPassMarketKP.publicKey, twapMarket: openbookTwapPassMarket, }) + .preInstructions(openbookPassMarketIxs) + .signers(openbookPassMarketSigners) .rpc(); let openbookFailMarketKP = Keypair.generate(); + let openbookFailMarket = openbookFailMarketKP.publicKey; let [openbookTwapFailMarket] = PublicKey.findProgramAddressSync( [ @@ -1493,31 +1223,39 @@ async function initializeProposal( openbookTwap.programId ); - let openbookFailMarket = await openbook.createMarket( - payer, - "fMETA/fUSDC", - failQuoteMint, - failBaseMint, - new BN(100), - new BN(1e9), - new BN(0), - new BN(0), - new BN(0), - null, - null, - openbookTwapFailMarket, - null, - openbookTwapFailMarket, - { confFilter: 0.1, maxStalenessSlots: 100 }, - openbookFailMarketKP, - daoTreasury - ); + // https://github.com/openbook-dex/openbook-v2/blob/fd1bfba307479e1587d453e5a8b03a2743339ea6/ts/client/src/client.ts#L246 + let [openbookFailMarketIxs, openbookFailMarketSigners] = + await openbook.createMarketIx( + payer.publicKey, + "fMETA/fUSDC", + failQuoteMint, + failBaseMint, + quoteLotSize, + baseLotSize, + new BN(0), + new BN(0), + expiryTime, + null, + null, + openbookTwapFailMarket, + null, + openbookTwapFailMarket, + { confFilter: 0.1, maxStalenessSlots: 100 }, + openbookFailMarketKP, + daoTreasury + ); + await openbookTwap.methods - .createTwapMarket(new BN(daoBefore.twapExpectedValue)) + .createTwapMarket( + new BN(daoBefore.twapExpectedValue), + maxObservationChangePerUpdateLots + ) .accounts({ market: openbookFailMarket, twapMarket: openbookTwapFailMarket, }) + .preInstructions(openbookFailMarketIxs) + .signers(openbookFailMarketSigners) .rpc(); await autocrat.methods @@ -1600,6 +1338,7 @@ async function initializeVault( vault, true ); + await vaultProgram.methods .initializeConditionalVault(settlementAuthority, nonce) .accounts({ diff --git a/tests/conditionalVault.ts b/tests/conditionalVault.ts index ad8f7af4..68e82b22 100644 --- a/tests/conditionalVault.ts +++ b/tests/conditionalVault.ts @@ -1,34 +1,54 @@ import * as anchor from "@coral-xyz/anchor"; import { BN, Program, web3 } from "@coral-xyz/anchor"; -const { PublicKey, Keypair } = web3; +import { + MPL_TOKEN_METADATA_PROGRAM_ID as UMI_MPL_TOKEN_METADATA_PROGRAM_ID, + createMetadataAccountV3, +} from "@metaplex-foundation/mpl-token-metadata"; +import { + Umi, + createSignerFromKeypair, + keypairIdentity, + none, +} from "@metaplex-foundation/umi"; +import { createUmi } from "@metaplex-foundation/umi-bundle-defaults"; +import { + fromWeb3JsKeypair, + fromWeb3JsPublicKey, + toWeb3JsLegacyTransaction, + toWeb3JsPublicKey, +} from "@metaplex-foundation/umi-web3js-adapters"; import * as token from "@solana/spl-token"; +import { SYSVAR_RENT_PUBKEY } from "@solana/web3.js"; import { BankrunProvider } from "anchor-bankrun"; - import { assert } from "chai"; - -import { BanksClient, startAnchor } from "solana-bankrun"; - -import { expectError } from "./utils/utils"; - -import { ConditionalVault } from "../target/types/conditional_vault"; - -const ConditionalVaultIDL: ConditionalVault = require("../target/idl/conditional_vault.json"); - +import { BanksClient, ProgramTestContext, startAnchor } from "solana-bankrun"; import { - createMint, createAccount, createAssociatedTokenAccount, - mintTo, + createMint, getAccount, + mintTo, } from "spl-token-bankrun"; +const { PublicKey, Keypair } = web3; + +import { ConditionalVault } from "../target/types/conditional_vault"; +import { expectError } from "./utils/utils"; +const ConditionalVaultIDL: ConditionalVault = require("../target/idl/conditional_vault.json"); + export type VaultProgram = anchor.Program; export type PublicKey = anchor.web3.PublicKey; export type Signer = anchor.web3.Signer; export type Keypair = anchor.web3.Keypair; const CONDITIONAL_VAULT_PROGRAM_ID = new PublicKey( - "vaU1tVLj8RFk7mNj1BxqgAsMKKaL8UvEUHvU3tdbZPe" + "vAuLTQjV5AZx5f3UgE75wcnkxnQowWxThn1hGjfCVwP" +); + +const METADATA_URI = + "https://ftgnmxferax7tpgqyzdo76sisk5fhpsjv34omvgz33m7udvnsfba.arweave.net/LMzWXKSIL_m80MZG7_pIkrpTvkmu-OZU2d7Z-g6tkUI"; +const MPL_TOKEN_METADATA_PROGRAM_ID = toWeb3JsPublicKey( + UMI_MPL_TOKEN_METADATA_PROGRAM_ID ); export enum VaultStatus { @@ -40,42 +60,59 @@ export enum VaultStatus { // this test file isn't 'clean' or DRY or whatever; sorry! describe("conditional_vault", async function () { - let provider, - connection, - vaultProgram, - payer, - context, - banksClient, - underlyingMintAuthority, - settlementAuthority, - nonce, - alice, - underlyingTokenMint, - vault, - vaultUnderlyingTokenAccount, - conditionalOnFinalizeMint, - conditionalOnRevertMint; + let provider: anchor.Provider; + + let vault: PublicKey; + let vaultUnderlyingTokenAccount: anchor.web3.PublicKey; + let underlyingTokenMint: anchor.web3.PublicKey; + let conditionalOnFinalizeMint: anchor.web3.PublicKey; + let conditionalOnRevertMint: anchor.web3.PublicKey; + let nonce: BN; + let settlementAuthority: anchor.web3.Keypair; + let underlyingMintAuthority: anchor.web3.Keypair; + let alice: anchor.web3.Keypair; + let context: ProgramTestContext; + let banksClient: BanksClient; + let umi: Umi; + + // note: adding types to these creates a slew of type errors below + let payer; + let vaultProgram; before(async function () { - context = await startAnchor("./", [], []); + context = await startAnchor( + "./", + [ + // even though the program is loaded into the test validator, we need + // to tell banks test client to load it as well + { + name: "mpl_token_metadata", + programId: MPL_TOKEN_METADATA_PROGRAM_ID, + }, + ], + [] + ); banksClient = context.banksClient; provider = new BankrunProvider(context); anchor.setProvider(provider); + umi = createUmi(anchor.AnchorProvider.env().connection); + vaultProgram = new Program( ConditionalVaultIDL, CONDITIONAL_VAULT_PROGRAM_ID, provider ); - //vaultProgram = anchor.workspace.ConditionalVault as VaultProgram; + payer = vaultProgram.provider.wallet.payer; alice = anchor.web3.Keypair.generate(); settlementAuthority = anchor.web3.Keypair.generate(); underlyingMintAuthority = anchor.web3.Keypair.generate(); + umi.use(keypairIdentity(fromWeb3JsKeypair(payer))); underlyingTokenMint = await createMint( banksClient, - payer, + payer as anchor.web3.Keypair, underlyingMintAuthority.publicKey, null, 8 @@ -168,7 +205,7 @@ describe("conditional_vault", async function () { bob = anchor.web3.Keypair.generate(); bobUnderlyingTokenAccount = await createAssociatedTokenAccount( - /* bobUnderlyingTokenAccount = await token.createAccount( */ + /* bobUnderlyingTokenAccount = await createAccount( */ banksClient, payer, underlyingTokenMint, @@ -447,7 +484,8 @@ describe("conditional_vault", async function () { let [vault, _, settlementAuthority] = await generateRandomVault( vaultProgram, payer, - banksClient + banksClient, + umi ); await vaultProgram.methods @@ -464,7 +502,8 @@ describe("conditional_vault", async function () { let [vault, _, settlementAuthority] = await generateRandomVault( vaultProgram, payer, - banksClient + banksClient, + umi ); await vaultProgram.methods @@ -481,7 +520,8 @@ describe("conditional_vault", async function () { let [vault, _, settlementAuthority] = await generateRandomVault( vaultProgram, payer, - banksClient + banksClient, + umi ); await vaultProgram.methods @@ -511,16 +551,17 @@ describe("conditional_vault", async function () { }); }); - describe("#redeem_conditional_tokens_for_underlying_tokens", async function () { + describe("#redeem_and_merge_conditional_tokens_for_underlying_tokens", async function () { let bob: Keypair; let amount = 1000; + let mergeAmount = 10; let bobUnderlyingTokenAccount: PublicKey; let bobConditionalOnFinalizeTokenAccount: PublicKey; let bobConditionalOnRevertTokenAccount: PublicKey; beforeEach(async function () { [vault, underlyingMintAuthority, settlementAuthority] = - await generateRandomVault(vaultProgram, payer, banksClient); + await generateRandomVault(vaultProgram, payer, banksClient, umi); let storedVault = await vaultProgram.account.conditionalVault.fetch( vault ); @@ -570,6 +611,54 @@ describe("conditional_vault", async function () { ); }); + it("successfully merges 10 tokens before the vault has been finalized", async function () { + // Assuming the vault has not yet been finalized + + await mergeConditionalTokens( + vaultProgram, + mergeAmount, + bob, + bobConditionalOnFinalizeTokenAccount, + bobConditionalOnRevertTokenAccount, + conditionalOnFinalizeMint, + conditionalOnRevertMint, + bobUnderlyingTokenAccount, + vaultUnderlyingTokenAccount, + vault, + banksClient + ); + }); + + it("prevents users from merging conditional tokens after the vault has been finalized", async function () { + await vaultProgram.methods + .settleConditionalVault({ finalized: {} }) + .accounts({ + settlementAuthority: settlementAuthority.publicKey, + vault, + }) + .signers([settlementAuthority]) + .rpc(); + + const callbacks = expectError( + vaultProgram, + "VaultAlreadySettled", + "merge suceeded even though this vault was finalized" + ); + await mergeConditionalTokens( + vaultProgram, + mergeAmount, + bob, + bobConditionalOnFinalizeTokenAccount, + bobConditionalOnRevertTokenAccount, + conditionalOnFinalizeMint, + conditionalOnRevertMint, + bobUnderlyingTokenAccount, + vaultUnderlyingTokenAccount, + vault, + banksClient + ).then(callbacks[0], callbacks[1]); + }); + it("allows users to redeem conditional-on-finalize tokens for underlying tokens when a vault has been finalized", async function () { await vaultProgram.methods .settleConditionalVault({ finalized: {} }) @@ -679,6 +768,7 @@ async function generateRandomVault( vaultProgram: VaultProgram, payer: Keypair, banksClient: BanksClient, + umi: Umi, settlementAuthority: Keypair = anchor.web3.Keypair.generate() ): Promise<[PublicKey, Keypair, Keypair]> { const underlyingMintAuthority = anchor.web3.Keypair.generate(); @@ -691,6 +781,39 @@ async function generateRandomVault( 8 ); + const tokenMint = fromWeb3JsPublicKey(underlyingTokenMint); + let builder = createMetadataAccountV3(umi, { + mint: tokenMint, + mintAuthority: createSignerFromKeypair( + umi, + fromWeb3JsKeypair(underlyingMintAuthority) + ), + data: { + name: "TOKE", + symbol: "TOKE", + uri: "METADATA_URI", + sellerFeeBasisPoints: 0, + creators: none(), + collection: none(), + uses: none(), + }, + isMutable: false, + collectionDetails: none(), + }); + builder = builder.setBlockhash( + (await umi.rpc.getLatestBlockhash()).blockhash + ); + + const createMetadataResult = await vaultProgram.provider.sendAndConfirm( + toWeb3JsLegacyTransaction(builder.build(umi)), + [underlyingMintAuthority], + { + skipPreflight: true, + commitment: "confirmed", + } + ); + // console.log(createMetadataResult); + const nonce = new BN(1003239); const [vault] = anchor.web3.PublicKey.findProgramAddressSync( @@ -711,7 +834,61 @@ async function generateRandomVault( let conditionalOnFinalizeTokenMintKeypair = anchor.web3.Keypair.generate(); let conditionalOnRevertTokenMintKeypair = anchor.web3.Keypair.generate(); - let result = await vaultProgram.methods + // when we have a ts lib, we can consolidate this logic there + const [conditionalOnFinalizeTokenMetadata] = + anchor.web3.PublicKey.findProgramAddressSync( + [ + anchor.utils.bytes.utf8.encode("metadata"), + MPL_TOKEN_METADATA_PROGRAM_ID.toBuffer(), + conditionalOnFinalizeTokenMintKeypair.publicKey.toBuffer(), + ], + MPL_TOKEN_METADATA_PROGRAM_ID + ); + + const [conditionalOnRevertTokenMetadata] = + anchor.web3.PublicKey.findProgramAddressSync( + [ + anchor.utils.bytes.utf8.encode("metadata"), + MPL_TOKEN_METADATA_PROGRAM_ID.toBuffer(), + conditionalOnRevertTokenMintKeypair.publicKey.toBuffer(), + ], + MPL_TOKEN_METADATA_PROGRAM_ID + ); + + const [underlyingTokenMetadata] = + anchor.web3.PublicKey.findProgramAddressSync( + [ + anchor.utils.bytes.utf8.encode("metadata"), + MPL_TOKEN_METADATA_PROGRAM_ID.toBuffer(), + underlyingTokenMint.toBuffer(), + ], + MPL_TOKEN_METADATA_PROGRAM_ID + ); + + const addMetadataToConditionalTokensIx = await vaultProgram.methods + .addMetadataToConditionalTokens( + new BN(0), // nonce, + METADATA_URI, + METADATA_URI + ) + .accounts({ + payer: payer.publicKey, + vault, + underlyingTokenMint, + underlyingTokenMetadata, + conditionalOnFinalizeTokenMint: + conditionalOnFinalizeTokenMintKeypair.publicKey, + conditionalOnRevertTokenMint: + conditionalOnRevertTokenMintKeypair.publicKey, + conditionalOnFinalizeTokenMetadata, + conditionalOnRevertTokenMetadata, + tokenMetadataProgram: MPL_TOKEN_METADATA_PROGRAM_ID, + systemProgram: anchor.web3.SystemProgram.programId, + rent: SYSVAR_RENT_PUBKEY, + }) + .instruction(); + + await vaultProgram.methods .initializeConditionalVault(settlementAuthority.publicKey, nonce) .accounts({ vault, @@ -730,6 +907,7 @@ async function generateRandomVault( conditionalOnFinalizeTokenMintKeypair, conditionalOnRevertTokenMintKeypair, ]) + .postInstructions([addMetadataToConditionalTokensIx]) .rpc(); return [vault, underlyingMintAuthority, settlementAuthority]; @@ -749,21 +927,25 @@ export async function mintConditionalTokens( ) { const storedVault = await program.account.conditionalVault.fetch(vault); if (!userUnderlyingTokenAccount) { - userUnderlyingTokenAccount = token.getAssociatedTokenAddressSync( + userUnderlyingTokenAccount = await token.getAssociatedTokenAddress( storedVault.underlyingTokenMint, - user.publicKey + user.publicKey, + true ); } if (!userConditionalOnFinalizeTokenAccount) { - userConditionalOnFinalizeTokenAccount = token.getAssociatedTokenAddressSync( - storedVault.conditionalOnFinalizeTokenMint, - user.publicKey - ); + userConditionalOnFinalizeTokenAccount = + await token.getAssociatedTokenAddress( + storedVault.conditionalOnFinalizeTokenMint, + user.publicKey, + true + ); } if (!userConditionalOnRevertTokenAccount) { - userConditionalOnRevertTokenAccount = token.getAssociatedTokenAddressSync( + userConditionalOnRevertTokenAccount = await token.getAssociatedTokenAddress( storedVault.conditionalOnRevertTokenMint, - user.publicKey + user.publicKey, + true ); } if (!vaultUnderlyingTokenAccount) { @@ -842,6 +1024,88 @@ export async function mintConditionalTokens( ); } +export async function mergeConditionalTokens( + vaultProgram: VaultProgram, + amount: number | bigint, + user: Signer, + userConditionalOnFinalizeTokenAccount: PublicKey, + userConditionalOnRevertTokenAccount: PublicKey, + conditionalOnFinalizeTokenMint: PublicKey, + conditionalOnRevertTokenMint: PublicKey, + userUnderlyingTokenAccount: PublicKey, + vaultUnderlyingTokenAccount: PublicKey, + vault: PublicKey, + banksClient: BanksClient +) { + const vaultUnderlyingTokenAccountBefore = await getAccount( + banksClient, + vaultUnderlyingTokenAccount + ); + const userUnderlyingTokenAccountBefore = await getAccount( + banksClient, + userUnderlyingTokenAccount + ); + const userConditionalOnFinalizeTokenAccountBefore = await getAccount( + banksClient, + userConditionalOnFinalizeTokenAccount + ); + const userConditionalOnRevertTokenAccountBefore = await getAccount( + banksClient, + userConditionalOnRevertTokenAccount + ); + + const bnAmount = new anchor.BN(amount.toString()); + await vaultProgram.methods + .mergeConditionalTokensForUnderlyingTokens(bnAmount) + .accounts({ + authority: user.publicKey, + userConditionalOnFinalizeTokenAccount, + userConditionalOnRevertTokenAccount, + userUnderlyingTokenAccount, + vaultUnderlyingTokenAccount, + vault, + conditionalOnFinalizeTokenMint, + conditionalOnRevertTokenMint, + tokenProgram: token.TOKEN_PROGRAM_ID, + }) + .signers([user]) + .rpc(); + + const vaultUnderlyingTokenAccountAfter = await getAccount( + banksClient, + vaultUnderlyingTokenAccount + ); + const userUnderlyingTokenAccountAfter = await getAccount( + banksClient, + userUnderlyingTokenAccount + ); + const userConditionalOnFinalizeTokenAccountAfter = await getAccount( + banksClient, + userConditionalOnFinalizeTokenAccount + ); + const userConditionalOnRevertTokenAccountAfter = await getAccount( + banksClient, + userConditionalOnRevertTokenAccount + ); + + assert.equal( + vaultUnderlyingTokenAccountAfter.amount, + vaultUnderlyingTokenAccountBefore.amount - BigInt(amount) + ); + assert.equal( + userUnderlyingTokenAccountAfter.amount, + userUnderlyingTokenAccountBefore.amount + BigInt(amount) + ); + assert.equal( + userConditionalOnFinalizeTokenAccountAfter.amount, + userConditionalOnFinalizeTokenAccountBefore.amount - BigInt(amount) + ); + assert.equal( + userConditionalOnRevertTokenAccountAfter.amount, + userConditionalOnRevertTokenAccountBefore.amount - BigInt(amount) + ); +} + export async function redeemConditionalTokens( vaultProgram: VaultProgram, user: Signer, diff --git a/tests/fixtures/mpl_token_metadata.so b/tests/fixtures/mpl_token_metadata.so new file mode 100644 index 00000000..fdc129a7 Binary files /dev/null and b/tests/fixtures/mpl_token_metadata.so differ diff --git a/tests/fixtures/openbook_twap.json b/tests/fixtures/openbook_twap.json index ab925267..f6bd000d 100644 --- a/tests/fixtures/openbook_twap.json +++ b/tests/fixtures/openbook_twap.json @@ -34,6 +34,10 @@ { "name": "expectedValue", "type": "u64" + }, + { + "name": "maxObservationChangePerUpdateLots", + "type": "u64" } ] }, @@ -288,6 +292,154 @@ } ] }, + { + "name": "pruneOrders", + "accounts": [ + { + "name": "twapMarket", + "isMut": false, + "isSigner": false + }, + { + "name": "openOrdersAccount", + "isMut": true, + "isSigner": false + }, + { + "name": "market", + "isMut": false, + "isSigner": false + }, + { + "name": "bids", + "isMut": true, + "isSigner": false + }, + { + "name": "asks", + "isMut": true, + "isSigner": false + }, + { + "name": "openbookProgram", + "isMut": false, + "isSigner": false + } + ], + "args": [ + { + "name": "limit", + "type": "u8" + } + ] + }, + { + "name": "settleFundsExpired", + "accounts": [ + { + "name": "twapMarket", + "isMut": true, + "isSigner": false + }, + { + "name": "openOrdersAccount", + "isMut": true, + "isSigner": false + }, + { + "name": "market", + "isMut": true, + "isSigner": false + }, + { + "name": "marketAuthority", + "isMut": false, + "isSigner": false + }, + { + "name": "marketBaseVault", + "isMut": true, + "isSigner": false + }, + { + "name": "marketQuoteVault", + "isMut": true, + "isSigner": false + }, + { + "name": "userBaseAccount", + "isMut": true, + "isSigner": false + }, + { + "name": "userQuoteAccount", + "isMut": true, + "isSigner": false + }, + { + "name": "tokenProgram", + "isMut": false, + "isSigner": false + }, + { + "name": "openbookProgram", + "isMut": false, + "isSigner": false + }, + { + "name": "systemProgram", + "isMut": false, + "isSigner": false + } + ], + "args": [] + }, + { + "name": "closeMarket", + "accounts": [ + { + "name": "closeMarketRentReceiver", + "isMut": true, + "isSigner": false + }, + { + "name": "twapMarket", + "isMut": false, + "isSigner": false + }, + { + "name": "market", + "isMut": true, + "isSigner": false + }, + { + "name": "bids", + "isMut": true, + "isSigner": false + }, + { + "name": "asks", + "isMut": true, + "isSigner": false + }, + { + "name": "eventHeap", + "isMut": true, + "isSigner": false + }, + { + "name": "tokenProgram", + "isMut": false, + "isSigner": false + }, + { + "name": "openbookProgram", + "isMut": false, + "isSigner": false + } + ], + "args": [] + }, { "name": "placeTakeOrder", "accounts": [ @@ -506,6 +658,10 @@ "type": { "defined": "TWAPOracle" } + }, + { + "name": "closeMarketRentReceiver", + "type": "publicKey" } ] } @@ -540,6 +696,10 @@ { "name": "observationAggregator", "type": "u128" + }, + { + "name": "maxObservationChangePerUpdateLots", + "type": "u64" } ] } @@ -698,36 +858,28 @@ }, { "code": 6002, - "name": "NonZeroExpiry", - "msg": "Market must not expire (have `time_expiry` == 0)" - }, - { - "code": 6003, "name": "NoOracles", "msg": "Oracle-pegged trades mess up the TWAP so oracles and oracle-pegged trades aren't allowed" }, { - "code": 6004, + "code": 6003, "name": "InvalidMakerFee", "msg": "Maker fee must be zero" }, { - "code": 6005, + "code": 6004, "name": "InvalidTakerFee", "msg": "Taker fee must be zero" }, { - "code": 6006, + "code": 6005, "name": "InvalidSeqNum", "msg": "Seq num must be zero" }, { - "code": 6007, + "code": 6006, "name": "InvalidConsumeEventsAdmin", "msg": "Consume events admin must be None" } - ], - "metadata": { - "address": "TWAP7frdvD3ia7TWc8e9SxZMmrpd2Yf3ifSPAHS8VG3" - } + ] } \ No newline at end of file diff --git a/tests/fixtures/openbook_twap.so b/tests/fixtures/openbook_twap.so index b937d624..903b3186 100755 Binary files a/tests/fixtures/openbook_twap.so and b/tests/fixtures/openbook_twap.so differ diff --git a/tests/fixtures/openbook_twap.ts b/tests/fixtures/openbook_twap.ts index 6bd8a576..82969d49 100644 --- a/tests/fixtures/openbook_twap.ts +++ b/tests/fixtures/openbook_twap.ts @@ -1,1461 +1,1771 @@ export type OpenbookTwap = { - version: "1.0.0"; - name: "openbook_twap"; - instructions: [ + "version": "1.0.0", + "name": "openbook_twap", + "instructions": [ { - name: "createTwapMarket"; - docs: [ + "name": "createTwapMarket", + "docs": [ "`expected_value` will be the first observation of the TWAP, which is", "necessary for anti-manipulation" - ]; - accounts: [ + ], + "accounts": [ { - name: "market"; - isMut: false; - isSigner: false; + "name": "market", + "isMut": false, + "isSigner": false }, { - name: "twapMarket"; - isMut: true; - isSigner: false; + "name": "twapMarket", + "isMut": true, + "isSigner": false }, { - name: "systemProgram"; - isMut: false; - isSigner: false; + "name": "systemProgram", + "isMut": false, + "isSigner": false }, { - name: "payer"; - isMut: true; - isSigner: true; + "name": "payer", + "isMut": true, + "isSigner": true } - ]; - args: [ + ], + "args": [ + { + "name": "expectedValue", + "type": "u64" + }, { - name: "expectedValue"; - type: "u64"; + "name": "maxObservationChangePerUpdateLots", + "type": "u64" } - ]; + ] }, { - name: "placeOrder"; - accounts: [ + "name": "placeOrder", + "accounts": [ { - name: "signer"; - isMut: false; - isSigner: true; + "name": "signer", + "isMut": false, + "isSigner": true }, { - name: "openOrdersAccount"; - isMut: true; - isSigner: false; + "name": "openOrdersAccount", + "isMut": true, + "isSigner": false }, { - name: "twapMarket"; - isMut: true; - isSigner: false; + "name": "twapMarket", + "isMut": true, + "isSigner": false }, { - name: "userTokenAccount"; - isMut: true; - isSigner: false; + "name": "userTokenAccount", + "isMut": true, + "isSigner": false }, { - name: "market"; - isMut: true; - isSigner: false; + "name": "market", + "isMut": true, + "isSigner": false }, { - name: "bids"; - isMut: true; - isSigner: false; + "name": "bids", + "isMut": true, + "isSigner": false }, { - name: "asks"; - isMut: true; - isSigner: false; + "name": "asks", + "isMut": true, + "isSigner": false }, { - name: "eventHeap"; - isMut: true; - isSigner: false; + "name": "eventHeap", + "isMut": true, + "isSigner": false }, { - name: "marketVault"; - isMut: true; - isSigner: false; + "name": "marketVault", + "isMut": true, + "isSigner": false }, { - name: "tokenProgram"; - isMut: false; - isSigner: false; + "name": "tokenProgram", + "isMut": false, + "isSigner": false }, { - name: "openbookProgram"; - isMut: false; - isSigner: false; + "name": "openbookProgram", + "isMut": false, + "isSigner": false } - ]; - args: [ + ], + "args": [ { - name: "placeOrderArgs"; - type: { - defined: "PlaceOrderArgs"; - }; + "name": "placeOrderArgs", + "type": { + "defined": "PlaceOrderArgs" + } } - ]; - returns: { - option: "u128"; - }; + ], + "returns": { + "option": "u128" + } }, { - name: "editOrder"; - accounts: [ + "name": "editOrder", + "accounts": [ { - name: "signer"; - isMut: false; - isSigner: true; + "name": "signer", + "isMut": false, + "isSigner": true }, { - name: "openOrdersAccount"; - isMut: true; - isSigner: false; + "name": "openOrdersAccount", + "isMut": true, + "isSigner": false }, { - name: "twapMarket"; - isMut: true; - isSigner: false; + "name": "twapMarket", + "isMut": true, + "isSigner": false }, { - name: "userTokenAccount"; - isMut: true; - isSigner: false; + "name": "userTokenAccount", + "isMut": true, + "isSigner": false }, { - name: "market"; - isMut: true; - isSigner: false; + "name": "market", + "isMut": true, + "isSigner": false }, { - name: "bids"; - isMut: true; - isSigner: false; + "name": "bids", + "isMut": true, + "isSigner": false }, { - name: "asks"; - isMut: true; - isSigner: false; + "name": "asks", + "isMut": true, + "isSigner": false }, { - name: "eventHeap"; - isMut: true; - isSigner: false; + "name": "eventHeap", + "isMut": true, + "isSigner": false }, { - name: "marketVault"; - isMut: true; - isSigner: false; + "name": "marketVault", + "isMut": true, + "isSigner": false }, { - name: "tokenProgram"; - isMut: false; - isSigner: false; + "name": "tokenProgram", + "isMut": false, + "isSigner": false }, { - name: "openbookProgram"; - isMut: false; - isSigner: false; + "name": "openbookProgram", + "isMut": false, + "isSigner": false } - ]; - args: [ + ], + "args": [ { - name: "clientOrderId"; - type: "u64"; + "name": "clientOrderId", + "type": "u64" }, { - name: "expectedCancelSize"; - type: "i64"; + "name": "expectedCancelSize", + "type": "i64" }, { - name: "placeOrder"; - type: { - defined: "PlaceOrderArgs"; - }; + "name": "placeOrder", + "type": { + "defined": "PlaceOrderArgs" + } + } + ], + "returns": { + "option": "u128" + } + }, + { + "name": "cancelOrderByClientId", + "accounts": [ + { + "name": "signer", + "isMut": false, + "isSigner": true + }, + { + "name": "twapMarket", + "isMut": true, + "isSigner": false + }, + { + "name": "openOrdersAccount", + "isMut": true, + "isSigner": false + }, + { + "name": "market", + "isMut": false, + "isSigner": false + }, + { + "name": "bids", + "isMut": true, + "isSigner": false + }, + { + "name": "asks", + "isMut": true, + "isSigner": false + }, + { + "name": "openbookProgram", + "isMut": false, + "isSigner": false + } + ], + "args": [ + { + "name": "clientOrderId", + "type": "u64" } - ]; - returns: { - option: "u128"; - }; + ], + "returns": "i64" }, { - name: "cancelOrderByClientId"; - accounts: [ + "name": "cancelAllOrders", + "accounts": [ { - name: "signer"; - isMut: false; - isSigner: true; + "name": "signer", + "isMut": false, + "isSigner": true }, { - name: "twapMarket"; - isMut: true; - isSigner: false; + "name": "twapMarket", + "isMut": true, + "isSigner": false }, { - name: "openOrdersAccount"; - isMut: true; - isSigner: false; + "name": "openOrdersAccount", + "isMut": true, + "isSigner": false }, { - name: "market"; - isMut: false; - isSigner: false; + "name": "market", + "isMut": false, + "isSigner": false }, { - name: "bids"; - isMut: true; - isSigner: false; + "name": "bids", + "isMut": true, + "isSigner": false }, { - name: "asks"; - isMut: true; - isSigner: false; + "name": "asks", + "isMut": true, + "isSigner": false }, { - name: "openbookProgram"; - isMut: false; - isSigner: false; + "name": "openbookProgram", + "isMut": false, + "isSigner": false } - ]; - args: [ + ], + "args": [ + { + "name": "sideOption", + "type": { + "option": { + "defined": "Side" + } + } + }, { - name: "clientOrderId"; - type: "u64"; + "name": "limit", + "type": "u8" } - ]; - returns: "i64"; + ] }, { - name: "cancelAllOrders"; - accounts: [ + "name": "pruneOrders", + "accounts": [ + { + "name": "twapMarket", + "isMut": false, + "isSigner": false + }, + { + "name": "openOrdersAccount", + "isMut": true, + "isSigner": false + }, + { + "name": "market", + "isMut": false, + "isSigner": false + }, + { + "name": "bids", + "isMut": true, + "isSigner": false + }, + { + "name": "asks", + "isMut": true, + "isSigner": false + }, + { + "name": "openbookProgram", + "isMut": false, + "isSigner": false + } + ], + "args": [ + { + "name": "limit", + "type": "u8" + } + ] + }, + { + "name": "settleFundsExpired", + "accounts": [ + { + "name": "twapMarket", + "isMut": true, + "isSigner": false + }, + { + "name": "openOrdersAccount", + "isMut": true, + "isSigner": false + }, + { + "name": "market", + "isMut": true, + "isSigner": false + }, { - name: "signer"; - isMut: false; - isSigner: true; + "name": "marketAuthority", + "isMut": false, + "isSigner": false }, { - name: "twapMarket"; - isMut: true; - isSigner: false; + "name": "marketBaseVault", + "isMut": true, + "isSigner": false }, { - name: "openOrdersAccount"; - isMut: true; - isSigner: false; + "name": "marketQuoteVault", + "isMut": true, + "isSigner": false }, { - name: "market"; - isMut: false; - isSigner: false; + "name": "userBaseAccount", + "isMut": true, + "isSigner": false }, { - name: "bids"; - isMut: true; - isSigner: false; + "name": "userQuoteAccount", + "isMut": true, + "isSigner": false }, { - name: "asks"; - isMut: true; - isSigner: false; + "name": "tokenProgram", + "isMut": false, + "isSigner": false }, { - name: "openbookProgram"; - isMut: false; - isSigner: false; + "name": "openbookProgram", + "isMut": false, + "isSigner": false + }, + { + "name": "systemProgram", + "isMut": false, + "isSigner": false } - ]; - args: [ + ], + "args": [] + }, + { + "name": "closeMarket", + "accounts": [ + { + "name": "closeMarketRentReceiver", + "isMut": true, + "isSigner": false + }, + { + "name": "twapMarket", + "isMut": false, + "isSigner": false + }, + { + "name": "market", + "isMut": true, + "isSigner": false + }, { - name: "sideOption"; - type: { - option: { - defined: "Side"; - }; - }; + "name": "bids", + "isMut": true, + "isSigner": false }, { - name: "limit"; - type: "u8"; + "name": "asks", + "isMut": true, + "isSigner": false + }, + { + "name": "eventHeap", + "isMut": true, + "isSigner": false + }, + { + "name": "tokenProgram", + "isMut": false, + "isSigner": false + }, + { + "name": "openbookProgram", + "isMut": false, + "isSigner": false } - ]; + ], + "args": [] }, { - name: "placeTakeOrder"; - accounts: [ + "name": "placeTakeOrder", + "accounts": [ { - name: "twapMarket"; - isMut: true; - isSigner: false; + "name": "twapMarket", + "isMut": true, + "isSigner": false }, { - name: "signer"; - isMut: true; - isSigner: true; + "name": "signer", + "isMut": true, + "isSigner": true }, { - name: "market"; - isMut: true; - isSigner: false; + "name": "market", + "isMut": true, + "isSigner": false }, { - name: "marketAuthority"; - isMut: false; - isSigner: false; + "name": "marketAuthority", + "isMut": false, + "isSigner": false }, { - name: "bids"; - isMut: true; - isSigner: false; + "name": "bids", + "isMut": true, + "isSigner": false }, { - name: "asks"; - isMut: true; - isSigner: false; + "name": "asks", + "isMut": true, + "isSigner": false }, { - name: "marketBaseVault"; - isMut: true; - isSigner: false; + "name": "marketBaseVault", + "isMut": true, + "isSigner": false }, { - name: "marketQuoteVault"; - isMut: true; - isSigner: false; + "name": "marketQuoteVault", + "isMut": true, + "isSigner": false }, { - name: "eventHeap"; - isMut: true; - isSigner: false; + "name": "eventHeap", + "isMut": true, + "isSigner": false }, { - name: "userBaseAccount"; - isMut: true; - isSigner: false; + "name": "userBaseAccount", + "isMut": true, + "isSigner": false }, { - name: "userQuoteAccount"; - isMut: true; - isSigner: false; + "name": "userQuoteAccount", + "isMut": true, + "isSigner": false }, { - name: "tokenProgram"; - isMut: false; - isSigner: false; + "name": "tokenProgram", + "isMut": false, + "isSigner": false }, { - name: "openbookProgram"; - isMut: false; - isSigner: false; + "name": "openbookProgram", + "isMut": false, + "isSigner": false }, { - name: "systemProgram"; - isMut: false; - isSigner: false; + "name": "systemProgram", + "isMut": false, + "isSigner": false } - ]; - args: [ + ], + "args": [ { - name: "args"; - type: { - defined: "PlaceTakeOrderArgs"; - }; + "name": "args", + "type": { + "defined": "PlaceTakeOrderArgs" + } } - ]; + ] }, { - name: "cancelAndPlaceOrders"; - accounts: [ + "name": "cancelAndPlaceOrders", + "accounts": [ { - name: "signer"; - isMut: false; - isSigner: true; + "name": "signer", + "isMut": false, + "isSigner": true }, { - name: "twapMarket"; - isMut: true; - isSigner: false; + "name": "twapMarket", + "isMut": true, + "isSigner": false }, { - name: "openOrdersAccount"; - isMut: true; - isSigner: false; + "name": "openOrdersAccount", + "isMut": true, + "isSigner": false }, { - name: "userQuoteAccount"; - isMut: true; - isSigner: false; + "name": "userQuoteAccount", + "isMut": true, + "isSigner": false }, { - name: "userBaseAccount"; - isMut: true; - isSigner: false; + "name": "userBaseAccount", + "isMut": true, + "isSigner": false }, { - name: "market"; - isMut: true; - isSigner: false; + "name": "market", + "isMut": true, + "isSigner": false }, { - name: "bids"; - isMut: true; - isSigner: false; + "name": "bids", + "isMut": true, + "isSigner": false }, { - name: "asks"; - isMut: true; - isSigner: false; + "name": "asks", + "isMut": true, + "isSigner": false }, { - name: "eventHeap"; - isMut: true; - isSigner: false; + "name": "eventHeap", + "isMut": true, + "isSigner": false }, { - name: "marketQuoteVault"; - isMut: true; - isSigner: false; + "name": "marketQuoteVault", + "isMut": true, + "isSigner": false }, { - name: "marketBaseVault"; - isMut: true; - isSigner: false; + "name": "marketBaseVault", + "isMut": true, + "isSigner": false }, { - name: "tokenProgram"; - isMut: false; - isSigner: false; + "name": "tokenProgram", + "isMut": false, + "isSigner": false }, { - name: "openbookProgram"; - isMut: false; - isSigner: false; + "name": "openbookProgram", + "isMut": false, + "isSigner": false } - ]; - args: [ + ], + "args": [ { - name: "cancelClientOrdersIds"; - type: { - vec: "u64"; - }; + "name": "cancelClientOrdersIds", + "type": { + "vec": "u64" + } }, { - name: "placeOrders"; - type: { - vec: { - defined: "PlaceOrderArgs"; - }; - }; + "name": "placeOrders", + "type": { + "vec": { + "defined": "PlaceOrderArgs" + } + } + } + ], + "returns": { + "vec": { + "option": "u128" } - ]; - returns: { - vec: { - option: "u128"; - }; - }; + } }, { - name: "getBestBidAndAsk"; - accounts: [ + "name": "getBestBidAndAsk", + "accounts": [ { - name: "market"; - isMut: false; - isSigner: false; + "name": "market", + "isMut": false, + "isSigner": false }, { - name: "bids"; - isMut: false; - isSigner: false; + "name": "bids", + "isMut": false, + "isSigner": false }, { - name: "asks"; - isMut: false; - isSigner: false; + "name": "asks", + "isMut": false, + "isSigner": false } - ]; - args: []; - returns: { - vec: "u64"; - }; + ], + "args": [], + "returns": { + "vec": "u64" + } } - ]; - accounts: [ + ], + "accounts": [ { - name: "twapMarket"; - type: { - kind: "struct"; - fields: [ + "name": "twapMarket", + "type": { + "kind": "struct", + "fields": [ { - name: "market"; - type: "publicKey"; + "name": "market", + "type": "publicKey" }, { - name: "pdaBump"; - type: "u8"; + "name": "pdaBump", + "type": "u8" }, { - name: "twapOracle"; - type: { - defined: "TWAPOracle"; - }; + "name": "twapOracle", + "type": { + "defined": "TWAPOracle" + } + }, + { + "name": "closeMarketRentReceiver", + "type": "publicKey" } - ]; - }; + ] + } } - ]; - types: [ + ], + "types": [ { - name: "TWAPOracle"; - type: { - kind: "struct"; - fields: [ + "name": "TWAPOracle", + "type": { + "kind": "struct", + "fields": [ + { + "name": "expectedValue", + "type": "u64" + }, { - name: "expectedValue"; - type: "u64"; + "name": "initialSlot", + "type": "u64" }, { - name: "initialSlot"; - type: "u64"; + "name": "lastUpdatedSlot", + "type": "u64" }, { - name: "lastUpdatedSlot"; - type: "u64"; + "name": "lastObservedSlot", + "type": "u64" }, { - name: "lastObservedSlot"; - type: "u64"; + "name": "lastObservation", + "type": "u64" }, { - name: "lastObservation"; - type: "u64"; + "name": "observationAggregator", + "type": "u128" }, { - name: "observationAggregator"; - type: "u128"; + "name": "maxObservationChangePerUpdateLots", + "type": "u64" } - ]; - }; + ] + } }, { - name: "PlaceOrderArgs"; - type: { - kind: "struct"; - fields: [ - { - name: "side"; - type: { - defined: "Side"; - }; + "name": "PlaceOrderArgs", + "type": { + "kind": "struct", + "fields": [ + { + "name": "side", + "type": { + "defined": "Side" + } }, { - name: "priceLots"; - type: "i64"; + "name": "priceLots", + "type": "i64" }, { - name: "maxBaseLots"; - type: "i64"; + "name": "maxBaseLots", + "type": "i64" }, { - name: "maxQuoteLotsIncludingFees"; - type: "i64"; + "name": "maxQuoteLotsIncludingFees", + "type": "i64" }, { - name: "clientOrderId"; - type: "u64"; + "name": "clientOrderId", + "type": "u64" }, { - name: "orderType"; - type: { - defined: "PlaceOrderType"; - }; + "name": "orderType", + "type": { + "defined": "PlaceOrderType" + } }, { - name: "expiryTimestamp"; - type: "u64"; + "name": "expiryTimestamp", + "type": "u64" }, { - name: "selfTradeBehavior"; - type: { - defined: "SelfTradeBehavior"; - }; + "name": "selfTradeBehavior", + "type": { + "defined": "SelfTradeBehavior" + } }, { - name: "limit"; - type: "u8"; + "name": "limit", + "type": "u8" } - ]; - }; + ] + } }, { - name: "PlaceTakeOrderArgs"; - type: { - kind: "struct"; - fields: [ - { - name: "side"; - type: { - defined: "Side"; - }; + "name": "PlaceTakeOrderArgs", + "type": { + "kind": "struct", + "fields": [ + { + "name": "side", + "type": { + "defined": "Side" + } }, { - name: "priceLots"; - type: "i64"; + "name": "priceLots", + "type": "i64" }, { - name: "maxBaseLots"; - type: "i64"; + "name": "maxBaseLots", + "type": "i64" }, { - name: "maxQuoteLotsIncludingFees"; - type: "i64"; + "name": "maxQuoteLotsIncludingFees", + "type": "i64" }, { - name: "orderType"; - type: { - defined: "PlaceOrderType"; - }; + "name": "orderType", + "type": { + "defined": "PlaceOrderType" + } }, { - name: "limit"; - type: "u8"; + "name": "limit", + "type": "u8" } - ]; - }; + ] + } }, { - name: "SelfTradeBehavior"; - type: { - kind: "enum"; - variants: [ + "name": "SelfTradeBehavior", + "type": { + "kind": "enum", + "variants": [ { - name: "DecrementTake"; + "name": "DecrementTake" }, { - name: "CancelProvide"; + "name": "CancelProvide" }, { - name: "AbortTransaction"; + "name": "AbortTransaction" } - ]; - }; + ] + } }, { - name: "PlaceOrderType"; - type: { - kind: "enum"; - variants: [ + "name": "PlaceOrderType", + "type": { + "kind": "enum", + "variants": [ { - name: "Limit"; + "name": "Limit" }, { - name: "ImmediateOrCancel"; + "name": "ImmediateOrCancel" }, { - name: "PostOnly"; + "name": "PostOnly" }, { - name: "Market"; + "name": "Market" }, { - name: "PostOnlySlide"; + "name": "PostOnlySlide" } - ]; - }; + ] + } }, { - name: "Side"; - type: { - kind: "enum"; - variants: [ + "name": "Side", + "type": { + "kind": "enum", + "variants": [ { - name: "Bid"; + "name": "Bid" }, { - name: "Ask"; + "name": "Ask" } - ]; - }; + ] + } } - ]; - errors: [ - { - code: 6000; - name: "InvalidOpenOrdersAdmin"; - msg: "The `open_orders_admin` of the underlying market must be equal to the `TWAPMarket` PDA"; - }, + ], + "errors": [ { - code: 6001; - name: "InvalidCloseMarketAdmin"; - msg: "The `close_market_admin` of the underlying market must be equal to the `TWAPMarket` PDA"; + "code": 6000, + "name": "InvalidOpenOrdersAdmin", + "msg": "The `open_orders_admin` of the underlying market must be equal to the `TWAPMarket` PDA" }, { - code: 6002; - name: "NonZeroExpiry"; - msg: "Market must not expire (have `time_expiry` == 0)"; + "code": 6001, + "name": "InvalidCloseMarketAdmin", + "msg": "The `close_market_admin` of the underlying market must be equal to the `TWAPMarket` PDA" }, { - code: 6003; - name: "NoOracles"; - msg: "Oracle-pegged trades mess up the TWAP so oracles and oracle-pegged trades aren't allowed"; + "code": 6002, + "name": "NoOracles", + "msg": "Oracle-pegged trades mess up the TWAP so oracles and oracle-pegged trades aren't allowed" }, { - code: 6004; - name: "InvalidMakerFee"; - msg: "Maker fee must be zero"; + "code": 6003, + "name": "InvalidMakerFee", + "msg": "Maker fee must be zero" }, { - code: 6005; - name: "InvalidTakerFee"; - msg: "Taker fee must be zero"; + "code": 6004, + "name": "InvalidTakerFee", + "msg": "Taker fee must be zero" }, { - code: 6006; - name: "InvalidSeqNum"; - msg: "Seq num must be zero"; + "code": 6005, + "name": "InvalidSeqNum", + "msg": "Seq num must be zero" }, { - code: 6007; - name: "InvalidConsumeEventsAdmin"; - msg: "Consume events admin must be None"; + "code": 6006, + "name": "InvalidConsumeEventsAdmin", + "msg": "Consume events admin must be None" } - ]; + ] }; export const IDL: OpenbookTwap = { - version: "1.0.0", - name: "openbook_twap", - instructions: [ + "version": "1.0.0", + "name": "openbook_twap", + "instructions": [ { - name: "createTwapMarket", - docs: [ + "name": "createTwapMarket", + "docs": [ "`expected_value` will be the first observation of the TWAP, which is", - "necessary for anti-manipulation", + "necessary for anti-manipulation" ], - accounts: [ + "accounts": [ { - name: "market", - isMut: false, - isSigner: false, + "name": "market", + "isMut": false, + "isSigner": false }, { - name: "twapMarket", - isMut: true, - isSigner: false, + "name": "twapMarket", + "isMut": true, + "isSigner": false }, { - name: "systemProgram", - isMut: false, - isSigner: false, + "name": "systemProgram", + "isMut": false, + "isSigner": false }, { - name: "payer", - isMut: true, - isSigner: true, - }, + "name": "payer", + "isMut": true, + "isSigner": true + } ], - args: [ + "args": [ { - name: "expectedValue", - type: "u64", + "name": "expectedValue", + "type": "u64" }, - ], + { + "name": "maxObservationChangePerUpdateLots", + "type": "u64" + } + ] }, { - name: "placeOrder", - accounts: [ + "name": "placeOrder", + "accounts": [ { - name: "signer", - isMut: false, - isSigner: true, + "name": "signer", + "isMut": false, + "isSigner": true }, { - name: "openOrdersAccount", - isMut: true, - isSigner: false, + "name": "openOrdersAccount", + "isMut": true, + "isSigner": false }, { - name: "twapMarket", - isMut: true, - isSigner: false, + "name": "twapMarket", + "isMut": true, + "isSigner": false }, { - name: "userTokenAccount", - isMut: true, - isSigner: false, + "name": "userTokenAccount", + "isMut": true, + "isSigner": false }, { - name: "market", - isMut: true, - isSigner: false, + "name": "market", + "isMut": true, + "isSigner": false }, { - name: "bids", - isMut: true, - isSigner: false, + "name": "bids", + "isMut": true, + "isSigner": false }, { - name: "asks", - isMut: true, - isSigner: false, + "name": "asks", + "isMut": true, + "isSigner": false }, { - name: "eventHeap", - isMut: true, - isSigner: false, + "name": "eventHeap", + "isMut": true, + "isSigner": false }, { - name: "marketVault", - isMut: true, - isSigner: false, + "name": "marketVault", + "isMut": true, + "isSigner": false }, { - name: "tokenProgram", - isMut: false, - isSigner: false, + "name": "tokenProgram", + "isMut": false, + "isSigner": false }, { - name: "openbookProgram", - isMut: false, - isSigner: false, - }, + "name": "openbookProgram", + "isMut": false, + "isSigner": false + } ], - args: [ + "args": [ { - name: "placeOrderArgs", - type: { - defined: "PlaceOrderArgs", - }, - }, + "name": "placeOrderArgs", + "type": { + "defined": "PlaceOrderArgs" + } + } ], - returns: { - option: "u128", - }, + "returns": { + "option": "u128" + } }, { - name: "editOrder", - accounts: [ + "name": "editOrder", + "accounts": [ { - name: "signer", - isMut: false, - isSigner: true, + "name": "signer", + "isMut": false, + "isSigner": true }, { - name: "openOrdersAccount", - isMut: true, - isSigner: false, + "name": "openOrdersAccount", + "isMut": true, + "isSigner": false }, { - name: "twapMarket", - isMut: true, - isSigner: false, + "name": "twapMarket", + "isMut": true, + "isSigner": false }, { - name: "userTokenAccount", - isMut: true, - isSigner: false, + "name": "userTokenAccount", + "isMut": true, + "isSigner": false }, { - name: "market", - isMut: true, - isSigner: false, + "name": "market", + "isMut": true, + "isSigner": false }, { - name: "bids", - isMut: true, - isSigner: false, + "name": "bids", + "isMut": true, + "isSigner": false }, { - name: "asks", - isMut: true, - isSigner: false, + "name": "asks", + "isMut": true, + "isSigner": false }, { - name: "eventHeap", - isMut: true, - isSigner: false, + "name": "eventHeap", + "isMut": true, + "isSigner": false }, { - name: "marketVault", - isMut: true, - isSigner: false, + "name": "marketVault", + "isMut": true, + "isSigner": false }, { - name: "tokenProgram", - isMut: false, - isSigner: false, + "name": "tokenProgram", + "isMut": false, + "isSigner": false }, { - name: "openbookProgram", - isMut: false, - isSigner: false, - }, + "name": "openbookProgram", + "isMut": false, + "isSigner": false + } ], - args: [ + "args": [ { - name: "clientOrderId", - type: "u64", + "name": "clientOrderId", + "type": "u64" }, { - name: "expectedCancelSize", - type: "i64", + "name": "expectedCancelSize", + "type": "i64" }, { - name: "placeOrder", - type: { - defined: "PlaceOrderArgs", - }, - }, + "name": "placeOrder", + "type": { + "defined": "PlaceOrderArgs" + } + } ], - returns: { - option: "u128", - }, + "returns": { + "option": "u128" + } }, { - name: "cancelOrderByClientId", - accounts: [ + "name": "cancelOrderByClientId", + "accounts": [ { - name: "signer", - isMut: false, - isSigner: true, + "name": "signer", + "isMut": false, + "isSigner": true }, { - name: "twapMarket", - isMut: true, - isSigner: false, + "name": "twapMarket", + "isMut": true, + "isSigner": false }, { - name: "openOrdersAccount", - isMut: true, - isSigner: false, + "name": "openOrdersAccount", + "isMut": true, + "isSigner": false }, { - name: "market", - isMut: false, - isSigner: false, + "name": "market", + "isMut": false, + "isSigner": false }, { - name: "bids", - isMut: true, - isSigner: false, + "name": "bids", + "isMut": true, + "isSigner": false }, { - name: "asks", - isMut: true, - isSigner: false, + "name": "asks", + "isMut": true, + "isSigner": false }, { - name: "openbookProgram", - isMut: false, - isSigner: false, - }, + "name": "openbookProgram", + "isMut": false, + "isSigner": false + } ], - args: [ + "args": [ { - name: "clientOrderId", - type: "u64", - }, + "name": "clientOrderId", + "type": "u64" + } ], - returns: "i64", + "returns": "i64" }, { - name: "cancelAllOrders", - accounts: [ + "name": "cancelAllOrders", + "accounts": [ { - name: "signer", - isMut: false, - isSigner: true, + "name": "signer", + "isMut": false, + "isSigner": true }, { - name: "twapMarket", - isMut: true, - isSigner: false, + "name": "twapMarket", + "isMut": true, + "isSigner": false }, { - name: "openOrdersAccount", - isMut: true, - isSigner: false, + "name": "openOrdersAccount", + "isMut": true, + "isSigner": false }, { - name: "market", - isMut: false, - isSigner: false, + "name": "market", + "isMut": false, + "isSigner": false }, { - name: "bids", - isMut: true, - isSigner: false, + "name": "bids", + "isMut": true, + "isSigner": false }, { - name: "asks", - isMut: true, - isSigner: false, + "name": "asks", + "isMut": true, + "isSigner": false }, { - name: "openbookProgram", - isMut: false, - isSigner: false, - }, + "name": "openbookProgram", + "isMut": false, + "isSigner": false + } ], - args: [ + "args": [ { - name: "sideOption", - type: { - option: { - defined: "Side", - }, - }, + "name": "sideOption", + "type": { + "option": { + "defined": "Side" + } + } }, { - name: "limit", - type: "u8", + "name": "limit", + "type": "u8" + } + ] + }, + { + "name": "pruneOrders", + "accounts": [ + { + "name": "twapMarket", + "isMut": false, + "isSigner": false + }, + { + "name": "openOrdersAccount", + "isMut": true, + "isSigner": false }, + { + "name": "market", + "isMut": false, + "isSigner": false + }, + { + "name": "bids", + "isMut": true, + "isSigner": false + }, + { + "name": "asks", + "isMut": true, + "isSigner": false + }, + { + "name": "openbookProgram", + "isMut": false, + "isSigner": false + } ], + "args": [ + { + "name": "limit", + "type": "u8" + } + ] }, { - name: "placeTakeOrder", - accounts: [ + "name": "settleFundsExpired", + "accounts": [ { - name: "twapMarket", - isMut: true, - isSigner: false, + "name": "twapMarket", + "isMut": true, + "isSigner": false }, { - name: "signer", - isMut: true, - isSigner: true, + "name": "openOrdersAccount", + "isMut": true, + "isSigner": false }, { - name: "market", - isMut: true, - isSigner: false, + "name": "market", + "isMut": true, + "isSigner": false }, { - name: "marketAuthority", - isMut: false, - isSigner: false, + "name": "marketAuthority", + "isMut": false, + "isSigner": false }, { - name: "bids", - isMut: true, - isSigner: false, + "name": "marketBaseVault", + "isMut": true, + "isSigner": false }, { - name: "asks", - isMut: true, - isSigner: false, + "name": "marketQuoteVault", + "isMut": true, + "isSigner": false }, { - name: "marketBaseVault", - isMut: true, - isSigner: false, + "name": "userBaseAccount", + "isMut": true, + "isSigner": false }, { - name: "marketQuoteVault", - isMut: true, - isSigner: false, + "name": "userQuoteAccount", + "isMut": true, + "isSigner": false }, { - name: "eventHeap", - isMut: true, - isSigner: false, + "name": "tokenProgram", + "isMut": false, + "isSigner": false }, { - name: "userBaseAccount", - isMut: true, - isSigner: false, + "name": "openbookProgram", + "isMut": false, + "isSigner": false }, { - name: "userQuoteAccount", - isMut: true, - isSigner: false, + "name": "systemProgram", + "isMut": false, + "isSigner": false + } + ], + "args": [] + }, + { + "name": "closeMarket", + "accounts": [ + { + "name": "closeMarketRentReceiver", + "isMut": true, + "isSigner": false }, { - name: "tokenProgram", - isMut: false, - isSigner: false, + "name": "twapMarket", + "isMut": false, + "isSigner": false }, { - name: "openbookProgram", - isMut: false, - isSigner: false, + "name": "market", + "isMut": true, + "isSigner": false }, { - name: "systemProgram", - isMut: false, - isSigner: false, + "name": "bids", + "isMut": true, + "isSigner": false }, - ], - args: [ { - name: "args", - type: { - defined: "PlaceTakeOrderArgs", - }, + "name": "asks", + "isMut": true, + "isSigner": false + }, + { + "name": "eventHeap", + "isMut": true, + "isSigner": false }, + { + "name": "tokenProgram", + "isMut": false, + "isSigner": false + }, + { + "name": "openbookProgram", + "isMut": false, + "isSigner": false + } ], + "args": [] }, { - name: "cancelAndPlaceOrders", - accounts: [ + "name": "placeTakeOrder", + "accounts": [ { - name: "signer", - isMut: false, - isSigner: true, + "name": "twapMarket", + "isMut": true, + "isSigner": false }, { - name: "twapMarket", - isMut: true, - isSigner: false, + "name": "signer", + "isMut": true, + "isSigner": true }, { - name: "openOrdersAccount", - isMut: true, - isSigner: false, + "name": "market", + "isMut": true, + "isSigner": false }, { - name: "userQuoteAccount", - isMut: true, - isSigner: false, + "name": "marketAuthority", + "isMut": false, + "isSigner": false }, { - name: "userBaseAccount", - isMut: true, - isSigner: false, + "name": "bids", + "isMut": true, + "isSigner": false }, { - name: "market", - isMut: true, - isSigner: false, + "name": "asks", + "isMut": true, + "isSigner": false }, { - name: "bids", - isMut: true, - isSigner: false, + "name": "marketBaseVault", + "isMut": true, + "isSigner": false }, { - name: "asks", - isMut: true, - isSigner: false, + "name": "marketQuoteVault", + "isMut": true, + "isSigner": false }, { - name: "eventHeap", - isMut: true, - isSigner: false, + "name": "eventHeap", + "isMut": true, + "isSigner": false }, { - name: "marketQuoteVault", - isMut: true, - isSigner: false, + "name": "userBaseAccount", + "isMut": true, + "isSigner": false }, { - name: "marketBaseVault", - isMut: true, - isSigner: false, + "name": "userQuoteAccount", + "isMut": true, + "isSigner": false }, { - name: "tokenProgram", - isMut: false, - isSigner: false, + "name": "tokenProgram", + "isMut": false, + "isSigner": false }, { - name: "openbookProgram", - isMut: false, - isSigner: false, + "name": "openbookProgram", + "isMut": false, + "isSigner": false }, + { + "name": "systemProgram", + "isMut": false, + "isSigner": false + } ], - args: [ + "args": [ { - name: "cancelClientOrdersIds", - type: { - vec: "u64", - }, + "name": "args", + "type": { + "defined": "PlaceTakeOrderArgs" + } + } + ] + }, + { + "name": "cancelAndPlaceOrders", + "accounts": [ + { + "name": "signer", + "isMut": false, + "isSigner": true }, { - name: "placeOrders", - type: { - vec: { - defined: "PlaceOrderArgs", - }, - }, + "name": "twapMarket", + "isMut": true, + "isSigner": false + }, + { + "name": "openOrdersAccount", + "isMut": true, + "isSigner": false + }, + { + "name": "userQuoteAccount", + "isMut": true, + "isSigner": false }, + { + "name": "userBaseAccount", + "isMut": true, + "isSigner": false + }, + { + "name": "market", + "isMut": true, + "isSigner": false + }, + { + "name": "bids", + "isMut": true, + "isSigner": false + }, + { + "name": "asks", + "isMut": true, + "isSigner": false + }, + { + "name": "eventHeap", + "isMut": true, + "isSigner": false + }, + { + "name": "marketQuoteVault", + "isMut": true, + "isSigner": false + }, + { + "name": "marketBaseVault", + "isMut": true, + "isSigner": false + }, + { + "name": "tokenProgram", + "isMut": false, + "isSigner": false + }, + { + "name": "openbookProgram", + "isMut": false, + "isSigner": false + } ], - returns: { - vec: { - option: "u128", + "args": [ + { + "name": "cancelClientOrdersIds", + "type": { + "vec": "u64" + } }, - }, + { + "name": "placeOrders", + "type": { + "vec": { + "defined": "PlaceOrderArgs" + } + } + } + ], + "returns": { + "vec": { + "option": "u128" + } + } }, { - name: "getBestBidAndAsk", - accounts: [ + "name": "getBestBidAndAsk", + "accounts": [ { - name: "market", - isMut: false, - isSigner: false, + "name": "market", + "isMut": false, + "isSigner": false }, { - name: "bids", - isMut: false, - isSigner: false, + "name": "bids", + "isMut": false, + "isSigner": false }, { - name: "asks", - isMut: false, - isSigner: false, - }, + "name": "asks", + "isMut": false, + "isSigner": false + } ], - args: [], - returns: { - vec: "u64", - }, - }, + "args": [], + "returns": { + "vec": "u64" + } + } ], - accounts: [ + "accounts": [ { - name: "twapMarket", - type: { - kind: "struct", - fields: [ + "name": "twapMarket", + "type": { + "kind": "struct", + "fields": [ { - name: "market", - type: "publicKey", + "name": "market", + "type": "publicKey" }, { - name: "pdaBump", - type: "u8", + "name": "pdaBump", + "type": "u8" }, { - name: "twapOracle", - type: { - defined: "TWAPOracle", - }, + "name": "twapOracle", + "type": { + "defined": "TWAPOracle" + } }, - ], - }, - }, + { + "name": "closeMarketRentReceiver", + "type": "publicKey" + } + ] + } + } ], - types: [ + "types": [ { - name: "TWAPOracle", - type: { - kind: "struct", - fields: [ + "name": "TWAPOracle", + "type": { + "kind": "struct", + "fields": [ { - name: "expectedValue", - type: "u64", + "name": "expectedValue", + "type": "u64" }, { - name: "initialSlot", - type: "u64", + "name": "initialSlot", + "type": "u64" }, { - name: "lastUpdatedSlot", - type: "u64", + "name": "lastUpdatedSlot", + "type": "u64" }, { - name: "lastObservedSlot", - type: "u64", + "name": "lastObservedSlot", + "type": "u64" }, { - name: "lastObservation", - type: "u64", + "name": "lastObservation", + "type": "u64" }, { - name: "observationAggregator", - type: "u128", + "name": "observationAggregator", + "type": "u128" }, - ], - }, + { + "name": "maxObservationChangePerUpdateLots", + "type": "u64" + } + ] + } }, { - name: "PlaceOrderArgs", - type: { - kind: "struct", - fields: [ - { - name: "side", - type: { - defined: "Side", - }, - }, + "name": "PlaceOrderArgs", + "type": { + "kind": "struct", + "fields": [ { - name: "priceLots", - type: "i64", + "name": "side", + "type": { + "defined": "Side" + } }, { - name: "maxBaseLots", - type: "i64", + "name": "priceLots", + "type": "i64" }, { - name: "maxQuoteLotsIncludingFees", - type: "i64", + "name": "maxBaseLots", + "type": "i64" }, { - name: "clientOrderId", - type: "u64", + "name": "maxQuoteLotsIncludingFees", + "type": "i64" }, { - name: "orderType", - type: { - defined: "PlaceOrderType", - }, + "name": "clientOrderId", + "type": "u64" }, { - name: "expiryTimestamp", - type: "u64", + "name": "orderType", + "type": { + "defined": "PlaceOrderType" + } }, { - name: "selfTradeBehavior", - type: { - defined: "SelfTradeBehavior", - }, + "name": "expiryTimestamp", + "type": "u64" }, { - name: "limit", - type: "u8", + "name": "selfTradeBehavior", + "type": { + "defined": "SelfTradeBehavior" + } }, - ], - }, + { + "name": "limit", + "type": "u8" + } + ] + } }, { - name: "PlaceTakeOrderArgs", - type: { - kind: "struct", - fields: [ - { - name: "side", - type: { - defined: "Side", - }, - }, + "name": "PlaceTakeOrderArgs", + "type": { + "kind": "struct", + "fields": [ { - name: "priceLots", - type: "i64", + "name": "side", + "type": { + "defined": "Side" + } }, { - name: "maxBaseLots", - type: "i64", + "name": "priceLots", + "type": "i64" }, { - name: "maxQuoteLotsIncludingFees", - type: "i64", + "name": "maxBaseLots", + "type": "i64" }, { - name: "orderType", - type: { - defined: "PlaceOrderType", - }, + "name": "maxQuoteLotsIncludingFees", + "type": "i64" }, { - name: "limit", - type: "u8", + "name": "orderType", + "type": { + "defined": "PlaceOrderType" + } }, - ], - }, + { + "name": "limit", + "type": "u8" + } + ] + } }, { - name: "SelfTradeBehavior", - type: { - kind: "enum", - variants: [ + "name": "SelfTradeBehavior", + "type": { + "kind": "enum", + "variants": [ { - name: "DecrementTake", + "name": "DecrementTake" }, { - name: "CancelProvide", + "name": "CancelProvide" }, { - name: "AbortTransaction", - }, - ], - }, + "name": "AbortTransaction" + } + ] + } }, { - name: "PlaceOrderType", - type: { - kind: "enum", - variants: [ + "name": "PlaceOrderType", + "type": { + "kind": "enum", + "variants": [ { - name: "Limit", + "name": "Limit" }, { - name: "ImmediateOrCancel", + "name": "ImmediateOrCancel" }, { - name: "PostOnly", + "name": "PostOnly" }, { - name: "Market", + "name": "Market" }, { - name: "PostOnlySlide", - }, - ], - }, + "name": "PostOnlySlide" + } + ] + } }, { - name: "Side", - type: { - kind: "enum", - variants: [ + "name": "Side", + "type": { + "kind": "enum", + "variants": [ { - name: "Bid", + "name": "Bid" }, { - name: "Ask", - }, - ], - }, - }, + "name": "Ask" + } + ] + } + } ], - errors: [ - { - code: 6000, - name: "InvalidOpenOrdersAdmin", - msg: "The `open_orders_admin` of the underlying market must be equal to the `TWAPMarket` PDA", - }, + "errors": [ { - code: 6001, - name: "InvalidCloseMarketAdmin", - msg: "The `close_market_admin` of the underlying market must be equal to the `TWAPMarket` PDA", + "code": 6000, + "name": "InvalidOpenOrdersAdmin", + "msg": "The `open_orders_admin` of the underlying market must be equal to the `TWAPMarket` PDA" }, { - code: 6002, - name: "NonZeroExpiry", - msg: "Market must not expire (have `time_expiry` == 0)", + "code": 6001, + "name": "InvalidCloseMarketAdmin", + "msg": "The `close_market_admin` of the underlying market must be equal to the `TWAPMarket` PDA" }, { - code: 6003, - name: "NoOracles", - msg: "Oracle-pegged trades mess up the TWAP so oracles and oracle-pegged trades aren't allowed", + "code": 6002, + "name": "NoOracles", + "msg": "Oracle-pegged trades mess up the TWAP so oracles and oracle-pegged trades aren't allowed" }, { - code: 6004, - name: "InvalidMakerFee", - msg: "Maker fee must be zero", + "code": 6003, + "name": "InvalidMakerFee", + "msg": "Maker fee must be zero" }, { - code: 6005, - name: "InvalidTakerFee", - msg: "Taker fee must be zero", + "code": 6004, + "name": "InvalidTakerFee", + "msg": "Taker fee must be zero" }, { - code: 6006, - name: "InvalidSeqNum", - msg: "Seq num must be zero", + "code": 6005, + "name": "InvalidSeqNum", + "msg": "Seq num must be zero" }, { - code: 6007, - name: "InvalidConsumeEventsAdmin", - msg: "Consume events admin must be None", - }, - ], + "code": 6006, + "name": "InvalidConsumeEventsAdmin", + "msg": "Consume events admin must be None" + } + ] }; diff --git a/tests/migrator.ts b/tests/migrator.ts index a3a442e9..d1d14a08 100644 --- a/tests/migrator.ts +++ b/tests/migrator.ts @@ -3,14 +3,14 @@ import { BN, Program } from "@coral-xyz/anchor"; import * as token from "@solana/spl-token"; import { BankrunProvider } from "anchor-bankrun"; -const { PublicKey, Keypair } = anchor.web3; +const { PublicKey, Keypair, SystemProgram } = anchor.web3; import { assert } from "chai"; import { startAnchor } from "solana-bankrun"; const AUTOCRAT_MIGRATOR_PROGRAM_ID = new PublicKey( - "migkwAXrXFN34voCYQUhFQBXZJjHrWnpEXbSGTqZdB3" + "MigRDW6uxyNMDBD8fX2njCRyJC4YZk2Rx9pDUZiAESt" ); import { AutocratMigrator } from "../target/types/autocrat_migrator"; @@ -28,7 +28,7 @@ import { } from "spl-token-bankrun"; describe("autocrat_migrator", async function () { - let provider, connection, migrator, payer, context, banksClient, META, USDC; + let provider, connection, migrator, payer, context, banksClient, META, USDC, MNDE, BOL; before(async function () { context = await startAnchor("./", [], []); @@ -59,17 +59,34 @@ describe("autocrat_migrator", async function () { payer.publicKey, 6 ); + + MNDE = await createMint( + banksClient, + payer, + payer.publicKey, + payer.publicKey, + 9 + ); + + BOL = await createMint( + banksClient, + payer, + payer.publicKey, + payer.publicKey, + 6 + ); }); - describe("#multi_transfer", async function () { + describe("#multi_transfer2", async function () { it("does transfer", async function () { + let sender = Keypair.generate(); let receiver = Keypair.generate(); let from0 = await createAccount( banksClient, payer, META, - payer.publicKey + sender.publicKey ); let to0 = await createAccount( banksClient, @@ -82,7 +99,7 @@ describe("autocrat_migrator", async function () { banksClient, payer, USDC, - payer.publicKey + sender.publicKey ); let to1 = await createAccount( banksClient, @@ -97,13 +114,21 @@ describe("autocrat_migrator", async function () { await migrator.methods .multiTransfer2() .accounts({ - authority: payer.publicKey, + authority: sender.publicKey, from0, to0, from1, to1, lamportReceiver: receiver.publicKey, }) + .preInstructions([ + SystemProgram.transfer({ + fromPubkey: payer.publicKey, + toPubkey: sender.publicKey, + lamports: 1_000_000_000n, + }), + ]) + .signers([sender]) .rpc(); assert((await getAccount(banksClient, from0)).amount == 0n); @@ -111,6 +136,81 @@ describe("autocrat_migrator", async function () { assert((await getAccount(banksClient, to0)).amount == 1_000_000n); assert((await getAccount(banksClient, to1)).amount == 10_000n); + + assert( + (await banksClient.getAccount(receiver.publicKey)).lamports > + 1_000_000_000 * 0.999 + ); + }); + }); + + describe("#multi_transfer4", async function () { + it("does transfer", async function () { + let sender = Keypair.generate(); + let receiver = Keypair.generate(); + + const tokens = [META, USDC, BOL, MNDE]; + const accounts = []; + + for (const token of tokens) { + let from = await createAccount( + banksClient, + payer, + token, + sender.publicKey + ); + let to = await createAccount( + banksClient, + payer, + token, + receiver.publicKey + ); + + accounts.push([from, to]); + } + + await mintTo(banksClient, payer, META, accounts[0][0], payer, 1_000_000); + await mintTo(banksClient, payer, USDC, accounts[1][0], payer, 10_000); + await mintTo(banksClient, payer, BOL, accounts[2][0], payer, 5_000_000_000_000); + await mintTo(banksClient, payer, MNDE, accounts[3][0], payer, 10_000_000_000_000); + + await migrator.methods + .multiTransfer4() + .accounts({ + authority: sender.publicKey, + from0: accounts[0][0], + to0: accounts[0][1], + from1: accounts[1][0], + to1: accounts[1][1], + from2: accounts[2][0], + to2: accounts[2][1], + from3: accounts[3][0], + to3: accounts[3][1], + lamportReceiver: receiver.publicKey, + }) + .preInstructions([ + SystemProgram.transfer({ + fromPubkey: payer.publicKey, + toPubkey: sender.publicKey, + lamports: 1_000_000_000n, + }), + ]) + .signers([sender]) + .rpc(); + + for (const tokenAccounts of accounts) { + assert((await getAccount(banksClient, tokenAccounts[0])).amount == 0n); + } + + assert((await getAccount(banksClient, accounts[0][1])).amount == 1_000_000n); + assert((await getAccount(banksClient, accounts[1][1])).amount == 10_000n); + assert((await getAccount(banksClient, accounts[2][1])).amount == 5_000_000_000_000n); + assert((await getAccount(banksClient, accounts[3][1])).amount == 10_000_000_000_000n); + + assert( + (await banksClient.getAccount(receiver.publicKey)).lamports > + 1_000_000_000 * 0.999 + ); }); }); }); diff --git a/tsconfig.json b/tsconfig.json index 194ad8bb..ce468706 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -13,6 +13,11 @@ "module": "commonjs", "target": "ES2020", "esModuleInterop": true, - "resolveJsonModule": true + "resolveJsonModule": true, + "paths": { + "@solana/spl-token": [ + "./node_modules/@solana/spl-token" + ] + } } } \ No newline at end of file diff --git a/verifiable-builds/autocrat_migrator.so b/verifiable-builds/autocrat_migrator.so new file mode 100755 index 00000000..7a63e291 Binary files /dev/null and b/verifiable-builds/autocrat_migrator.so differ diff --git a/verifiable-builds/autocrat_v0.so b/verifiable-builds/autocrat_v0.so new file mode 100755 index 00000000..645a750a Binary files /dev/null and b/verifiable-builds/autocrat_v0.so differ diff --git a/verifiable-builds/conditional_vault.so b/verifiable-builds/conditional_vault.so new file mode 100755 index 00000000..da0e8f7d Binary files /dev/null and b/verifiable-builds/conditional_vault.so differ diff --git a/yarn.lock b/yarn.lock index 61e28071..6e141b77 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2,28 +2,83 @@ # yarn lockfile v1 -"@babel/runtime@^7.12.5", "@babel/runtime@^7.17.2": - version "7.19.0" - resolved "https://registry.npmjs.org/@babel/runtime/-/runtime-7.19.0.tgz" - integrity sha512-eR8Lo9hnDS7tqkO7NsV+mKvCmv5boaXFSZ70DnfhcgiEne8hv9oCEd36Klw74EtizEqLsy4YnW8UWwpBVolHZA== - dependencies: - regenerator-runtime "^0.13.4" - -"@babel/runtime@^7.22.6", "@babel/runtime@^7.23.2": - version "7.23.2" - resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.23.2.tgz#062b0ac103261d68a966c4c7baf2ae3e62ec3885" - integrity sha512-mM8eg4yl5D6i3lu2QKPuPH4FArvJ8KhTofbE7jwMUv9KX5mBvwPAqnV3MlyBNqdp9RyRKP6Yck8TrfYrPvX3bg== +"@babel/runtime@^7.10.5", "@babel/runtime@^7.12.5", "@babel/runtime@^7.17.2", "@babel/runtime@^7.23.4": + version "7.24.0" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.24.0.tgz#584c450063ffda59697021430cb47101b085951e" + integrity sha512-Chk32uHMg6TnQdvw2e9IlqPpFX/6NLuK0Ys2PqLb7/gL5uFn9mXvK715FGLlOLQrcO4qIkNHkvPGktzzXexsFw== dependencies: regenerator-runtime "^0.14.0" -"@coral-xyz/anchor@0.28.1-beta.2": - version "0.28.1-beta.2" - resolved "https://registry.yarnpkg.com/@coral-xyz/anchor/-/anchor-0.28.1-beta.2.tgz#4ddd4b2b66af04407be47cf9524147793ec514a0" - integrity sha512-xreUcOFF8+IQKWOBUrDKJbIw2ftpRVybFlEPVrbSlOBCbreCWrQ5754Gt9cHIcuBDAzearCDiBqzsGQdNgPJiw== +"@blockworks-foundation/mango-client@^3.4.7": + version "3.6.20" + resolved "https://registry.yarnpkg.com/@blockworks-foundation/mango-client/-/mango-client-3.6.20.tgz#66ed0ae4545959fdc31ca1918de0f931de579d41" + integrity sha512-Te0i52KUyp5e8jQQZlIMsTy9fKIfefPHvkA8+NRGIH80kQcnJKKfzw3T1NxaDsc3KFMZwpuN3m4afDNpKTuF0g== dependencies: - "@coral-xyz/borsh" "^0.28.0" + "@project-serum/anchor" "^0.21.0" + "@project-serum/serum" "^0.13.65" + "@project-serum/sol-wallet-adapter" "^0.2.0" + "@solana/spl-token" "^0.1.6" + "@solana/web3.js" "^1.43.5" + big.js "^6.1.1" + bn.js "^5.1.0" + buffer-layout "^1.2.1" + cross-fetch "^3.1.5" + dotenv "^10.0.0" + toformat "^2.0.0" + yargs "^17.0.1" + +"@bundlr-network/client@^0.8.8": + version "0.8.9" + resolved "https://registry.yarnpkg.com/@bundlr-network/client/-/client-0.8.9.tgz#58e969a5d80f8d25d212d46bb7a060730a3c1736" + integrity sha512-SJ7BAt/KhONeFQ0+nbqrw2DUWrsev6y6cmlXt+3x7fPCkw7OJwudtxV/h2nBteZd65NXjqw8yzkmLiLfZ7CCRA== + dependencies: + "@solana/wallet-adapter-base" "^0.9.2" + "@solana/web3.js" "^1.36.0" + "@supercharge/promise-pool" "^2.1.0" + algosdk "^1.13.1" + arbundles "^0.6.21" + arweave "^1.11.4" + async-retry "^1.3.3" + axios "^0.25.0" + base64url "^3.0.1" + bignumber.js "^9.0.1" + bs58 "^4.0.1" + commander "^8.2.0" + csv "^6.0.5" + ethers "^5.5.1" + inquirer "^8.2.0" + js-sha256 "^0.9.0" + mime-types "^2.1.34" + near-api-js "^0.44.2" + near-seed-phrase "^0.2.0" + +"@coral-xyz/anchor@0.29.0", "@coral-xyz/anchor@^0.29.0": + version "0.29.0" + resolved "https://registry.yarnpkg.com/@coral-xyz/anchor/-/anchor-0.29.0.tgz#bd0be95bedfb30a381c3e676e5926124c310ff12" + integrity sha512-eny6QNG0WOwqV0zQ7cs/b1tIuzZGmP7U7EcH+ogt4Gdbl8HDmIYVMh/9aTmYZPaFWjtUaI8qSn73uYEXWfATdA== + dependencies: + "@coral-xyz/borsh" "^0.29.0" "@noble/hashes" "^1.3.1" "@solana/web3.js" "^1.68.0" + bn.js "^5.1.2" + bs58 "^4.0.1" + buffer-layout "^1.2.2" + camelcase "^6.3.0" + cross-fetch "^3.1.5" + crypto-hash "^1.3.0" + eventemitter3 "^4.0.7" + pako "^2.0.3" + snake-case "^3.0.4" + superstruct "^0.15.4" + toml "^3.0.0" + +"@coral-xyz/anchor@^0.26.0": + version "0.26.0" + resolved "https://registry.yarnpkg.com/@coral-xyz/anchor/-/anchor-0.26.0.tgz#c8e4f7177e93441afd030f22d777d54d0194d7d1" + integrity sha512-PxRl+wu5YyptWiR9F2MBHOLLibm87Z4IMUBPreX+DYBtPM+xggvcPi0KAN7+kIL4IrIhXI8ma5V0MCXxSN1pHg== + dependencies: + "@coral-xyz/borsh" "^0.26.0" + "@solana/web3.js" "^1.68.0" base64-js "^1.5.1" bn.js "^5.1.2" bs58 "^4.0.1" @@ -32,6 +87,7 @@ cross-fetch "^3.1.5" crypto-hash "^1.3.0" eventemitter3 "^4.0.7" + js-sha256 "^0.9.0" pako "^2.0.3" snake-case "^3.0.4" superstruct "^0.15.4" @@ -39,7 +95,7 @@ "@coral-xyz/anchor@^0.28.0": version "0.28.0" - resolved "https://registry.npmjs.org/@coral-xyz/anchor/-/anchor-0.28.0.tgz" + resolved "https://registry.yarnpkg.com/@coral-xyz/anchor/-/anchor-0.28.0.tgz#8345c3c9186a91f095f704d7b90cd256f7e8b2dc" integrity sha512-kQ02Hv2ZqxtWP30WN1d4xxT4QqlOXYDxmEd3k/bbneqhV3X5QMO4LAtoUFs7otxyivOgoqam5Il5qx81FuI4vw== dependencies: "@coral-xyz/borsh" "^0.28.0" @@ -58,15 +114,693 @@ superstruct "^0.15.4" toml "^3.0.0" +"@coral-xyz/anchor@^0.28.1-beta.2": + version "0.28.1-beta.2" + resolved "https://registry.yarnpkg.com/@coral-xyz/anchor/-/anchor-0.28.1-beta.2.tgz#4ddd4b2b66af04407be47cf9524147793ec514a0" + integrity sha512-xreUcOFF8+IQKWOBUrDKJbIw2ftpRVybFlEPVrbSlOBCbreCWrQ5754Gt9cHIcuBDAzearCDiBqzsGQdNgPJiw== + dependencies: + "@coral-xyz/borsh" "^0.28.0" + "@noble/hashes" "^1.3.1" + "@solana/web3.js" "^1.68.0" + base64-js "^1.5.1" + bn.js "^5.1.2" + bs58 "^4.0.1" + buffer-layout "^1.2.2" + camelcase "^6.3.0" + cross-fetch "^3.1.5" + crypto-hash "^1.3.0" + eventemitter3 "^4.0.7" + pako "^2.0.3" + snake-case "^3.0.4" + superstruct "^0.15.4" + toml "^3.0.0" + +"@coral-xyz/borsh@^0.26.0": + version "0.26.0" + resolved "https://registry.yarnpkg.com/@coral-xyz/borsh/-/borsh-0.26.0.tgz#d054f64536d824634969e74138f9f7c52bbbc0d5" + integrity sha512-uCZ0xus0CszQPHYfWAqKS5swS1UxvePu83oOF+TWpUkedsNlg6p2p4azxZNSSqwXb9uXMFgxhuMBX9r3Xoi0vQ== + dependencies: + bn.js "^5.1.2" + buffer-layout "^1.2.0" + "@coral-xyz/borsh@^0.28.0": version "0.28.0" - resolved "https://registry.npmjs.org/@coral-xyz/borsh/-/borsh-0.28.0.tgz" + resolved "https://registry.yarnpkg.com/@coral-xyz/borsh/-/borsh-0.28.0.tgz#fa368a2f2475bbf6f828f4657f40a52102e02b6d" integrity sha512-/u1VTzw7XooK7rqeD7JLUSwOyRSesPUk0U37BV9zK0axJc1q0nRbKFGFLYCQ16OtdOJTTwGfGp11Lx9B45bRCQ== dependencies: bn.js "^5.1.2" buffer-layout "^1.2.0" -"@metaplex-foundation/beet-solana@^0.4.0": +"@coral-xyz/borsh@^0.29.0": + version "0.29.0" + resolved "https://registry.yarnpkg.com/@coral-xyz/borsh/-/borsh-0.29.0.tgz#79f7045df2ef66da8006d47f5399c7190363e71f" + integrity sha512-s7VFVa3a0oqpkuRloWVPdCK7hMbAMY270geZOGfCnaqexrP5dTIpbEHL33req6IYPPJ0hYa71cdvJ1h6V55/oQ== + dependencies: + bn.js "^5.1.2" + buffer-layout "^1.2.0" + +"@esbuild/aix-ppc64@0.19.12": + version "0.19.12" + resolved "https://registry.yarnpkg.com/@esbuild/aix-ppc64/-/aix-ppc64-0.19.12.tgz#d1bc06aedb6936b3b6d313bf809a5a40387d2b7f" + integrity sha512-bmoCYyWdEL3wDQIVbcyzRyeKLgk2WtWLTWz1ZIAZF/EGbNOwSA6ew3PftJ1PqMiOOGu0OyFMzG53L0zqIpPeNA== + +"@esbuild/android-arm64@0.19.12": + version "0.19.12" + resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.19.12.tgz#7ad65a36cfdb7e0d429c353e00f680d737c2aed4" + integrity sha512-P0UVNGIienjZv3f5zq0DP3Nt2IE/3plFzuaS96vihvD0Hd6H/q4WXUGpCxD/E8YrSXfNyRPbpTq+T8ZQioSuPA== + +"@esbuild/android-arm@0.19.12": + version "0.19.12" + resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.19.12.tgz#b0c26536f37776162ca8bde25e42040c203f2824" + integrity sha512-qg/Lj1mu3CdQlDEEiWrlC4eaPZ1KztwGJ9B6J+/6G+/4ewxJg7gqj8eVYWvao1bXrqGiW2rsBZFSX3q2lcW05w== + +"@esbuild/android-x64@0.19.12": + version "0.19.12" + resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.19.12.tgz#cb13e2211282012194d89bf3bfe7721273473b3d" + integrity sha512-3k7ZoUW6Q6YqhdhIaq/WZ7HwBpnFBlW905Fa4s4qWJyiNOgT1dOqDiVAQFwBH7gBRZr17gLrlFCRzF6jFh7Kew== + +"@esbuild/darwin-arm64@0.19.12": + version "0.19.12" + resolved "https://registry.yarnpkg.com/@esbuild/darwin-arm64/-/darwin-arm64-0.19.12.tgz#cbee41e988020d4b516e9d9e44dd29200996275e" + integrity sha512-B6IeSgZgtEzGC42jsI+YYu9Z3HKRxp8ZT3cqhvliEHovq8HSX2YX8lNocDn79gCKJXOSaEot9MVYky7AKjCs8g== + +"@esbuild/darwin-x64@0.19.12": + version "0.19.12" + resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.19.12.tgz#e37d9633246d52aecf491ee916ece709f9d5f4cd" + integrity sha512-hKoVkKzFiToTgn+41qGhsUJXFlIjxI/jSYeZf3ugemDYZldIXIxhvwN6erJGlX4t5h417iFuheZ7l+YVn05N3A== + +"@esbuild/freebsd-arm64@0.19.12": + version "0.19.12" + resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.19.12.tgz#1ee4d8b682ed363b08af74d1ea2b2b4dbba76487" + integrity sha512-4aRvFIXmwAcDBw9AueDQ2YnGmz5L6obe5kmPT8Vd+/+x/JMVKCgdcRwH6APrbpNXsPz+K653Qg8HB/oXvXVukA== + +"@esbuild/freebsd-x64@0.19.12": + version "0.19.12" + resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.19.12.tgz#37a693553d42ff77cd7126764b535fb6cc28a11c" + integrity sha512-EYoXZ4d8xtBoVN7CEwWY2IN4ho76xjYXqSXMNccFSx2lgqOG/1TBPW0yPx1bJZk94qu3tX0fycJeeQsKovA8gg== + +"@esbuild/linux-arm64@0.19.12": + version "0.19.12" + resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.19.12.tgz#be9b145985ec6c57470e0e051d887b09dddb2d4b" + integrity sha512-EoTjyYyLuVPfdPLsGVVVC8a0p1BFFvtpQDB/YLEhaXyf/5bczaGeN15QkR+O4S5LeJ92Tqotve7i1jn35qwvdA== + +"@esbuild/linux-arm@0.19.12": + version "0.19.12" + resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.19.12.tgz#207ecd982a8db95f7b5279207d0ff2331acf5eef" + integrity sha512-J5jPms//KhSNv+LO1S1TX1UWp1ucM6N6XuL6ITdKWElCu8wXP72l9MM0zDTzzeikVyqFE6U8YAV9/tFyj0ti+w== + +"@esbuild/linux-ia32@0.19.12": + version "0.19.12" + resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.19.12.tgz#d0d86b5ca1562523dc284a6723293a52d5860601" + integrity sha512-Thsa42rrP1+UIGaWz47uydHSBOgTUnwBwNq59khgIwktK6x60Hivfbux9iNR0eHCHzOLjLMLfUMLCypBkZXMHA== + +"@esbuild/linux-loong64@0.19.12": + version "0.19.12" + resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.19.12.tgz#9a37f87fec4b8408e682b528391fa22afd952299" + integrity sha512-LiXdXA0s3IqRRjm6rV6XaWATScKAXjI4R4LoDlvO7+yQqFdlr1Bax62sRwkVvRIrwXxvtYEHHI4dm50jAXkuAA== + +"@esbuild/linux-mips64el@0.19.12": + version "0.19.12" + resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.19.12.tgz#4ddebd4e6eeba20b509d8e74c8e30d8ace0b89ec" + integrity sha512-fEnAuj5VGTanfJ07ff0gOA6IPsvrVHLVb6Lyd1g2/ed67oU1eFzL0r9WL7ZzscD+/N6i3dWumGE1Un4f7Amf+w== + +"@esbuild/linux-ppc64@0.19.12": + version "0.19.12" + resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.19.12.tgz#adb67dadb73656849f63cd522f5ecb351dd8dee8" + integrity sha512-nYJA2/QPimDQOh1rKWedNOe3Gfc8PabU7HT3iXWtNUbRzXS9+vgB0Fjaqr//XNbd82mCxHzik2qotuI89cfixg== + +"@esbuild/linux-riscv64@0.19.12": + version "0.19.12" + resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.19.12.tgz#11bc0698bf0a2abf8727f1c7ace2112612c15adf" + integrity sha512-2MueBrlPQCw5dVJJpQdUYgeqIzDQgw3QtiAHUC4RBz9FXPrskyyU3VI1hw7C0BSKB9OduwSJ79FTCqtGMWqJHg== + +"@esbuild/linux-s390x@0.19.12": + version "0.19.12" + resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.19.12.tgz#e86fb8ffba7c5c92ba91fc3b27ed5a70196c3cc8" + integrity sha512-+Pil1Nv3Umes4m3AZKqA2anfhJiVmNCYkPchwFJNEJN5QxmTs1uzyy4TvmDrCRNT2ApwSari7ZIgrPeUx4UZDg== + +"@esbuild/linux-x64@0.19.12": + version "0.19.12" + resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.19.12.tgz#5f37cfdc705aea687dfe5dfbec086a05acfe9c78" + integrity sha512-B71g1QpxfwBvNrfyJdVDexenDIt1CiDN1TIXLbhOw0KhJzE78KIFGX6OJ9MrtC0oOqMWf+0xop4qEU8JrJTwCg== + +"@esbuild/netbsd-x64@0.19.12": + version "0.19.12" + resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.19.12.tgz#29da566a75324e0d0dd7e47519ba2f7ef168657b" + integrity sha512-3ltjQ7n1owJgFbuC61Oj++XhtzmymoCihNFgT84UAmJnxJfm4sYCiSLTXZtE00VWYpPMYc+ZQmB6xbSdVh0JWA== + +"@esbuild/openbsd-x64@0.19.12": + version "0.19.12" + resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.19.12.tgz#306c0acbdb5a99c95be98bdd1d47c916e7dc3ff0" + integrity sha512-RbrfTB9SWsr0kWmb9srfF+L933uMDdu9BIzdA7os2t0TXhCRjrQyCeOt6wVxr79CKD4c+p+YhCj31HBkYcXebw== + +"@esbuild/sunos-x64@0.19.12": + version "0.19.12" + resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.19.12.tgz#0933eaab9af8b9b2c930236f62aae3fc593faf30" + integrity sha512-HKjJwRrW8uWtCQnQOz9qcU3mUZhTUQvi56Q8DPTLLB+DawoiQdjsYq+j+D3s9I8VFtDr+F9CjgXKKC4ss89IeA== + +"@esbuild/win32-arm64@0.19.12": + version "0.19.12" + resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.19.12.tgz#773bdbaa1971b36db2f6560088639ccd1e6773ae" + integrity sha512-URgtR1dJnmGvX864pn1B2YUYNzjmXkuJOIqG2HdU62MVS4EHpU2946OZoTMnRUHklGtJdJZ33QfzdjGACXhn1A== + +"@esbuild/win32-ia32@0.19.12": + version "0.19.12" + resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.19.12.tgz#000516cad06354cc84a73f0943a4aa690ef6fd67" + integrity sha512-+ZOE6pUkMOJfmxmBZElNOx72NKpIa/HFOMGzu8fqzQJ5kgf6aTGrcJaFsNiVMH4JKpMipyK+7k0n2UXN7a8YKQ== + +"@esbuild/win32-x64@0.19.12": + version "0.19.12" + resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.19.12.tgz#c57c8afbb4054a3ab8317591a0b7320360b444ae" + integrity sha512-T1QyPSDCyMXaO3pzBkF96E8xMkiRYbUEZADd29SyPGabqxMViNoii+NcK7eWJAEoU6RZyEm5lVSIjTmcdoB9HA== + +"@ethersproject/abi@5.7.0", "@ethersproject/abi@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/abi/-/abi-5.7.0.tgz#b3f3e045bbbeed1af3947335c247ad625a44e449" + integrity sha512-351ktp42TiRcYB3H1OP8yajPeAQstMW/yCFokj/AthP9bLHzQFPlOrxOcwYEDkUAICmOHljvN4K39OMTMUa9RA== + dependencies: + "@ethersproject/address" "^5.7.0" + "@ethersproject/bignumber" "^5.7.0" + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/constants" "^5.7.0" + "@ethersproject/hash" "^5.7.0" + "@ethersproject/keccak256" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + "@ethersproject/properties" "^5.7.0" + "@ethersproject/strings" "^5.7.0" + +"@ethersproject/abstract-provider@5.7.0", "@ethersproject/abstract-provider@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/abstract-provider/-/abstract-provider-5.7.0.tgz#b0a8550f88b6bf9d51f90e4795d48294630cb9ef" + integrity sha512-R41c9UkchKCpAqStMYUpdunjo3pkEvZC3FAwZn5S5MGbXoMQOHIdHItezTETxAO5bevtMApSyEhn9+CHcDsWBw== + dependencies: + "@ethersproject/bignumber" "^5.7.0" + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + "@ethersproject/networks" "^5.7.0" + "@ethersproject/properties" "^5.7.0" + "@ethersproject/transactions" "^5.7.0" + "@ethersproject/web" "^5.7.0" + +"@ethersproject/abstract-signer@5.7.0", "@ethersproject/abstract-signer@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/abstract-signer/-/abstract-signer-5.7.0.tgz#13f4f32117868452191a4649723cb086d2b596b2" + integrity sha512-a16V8bq1/Cz+TGCkE2OPMTOUDLS3grCpdjoJCYNnVBbdYEMSgKrU0+B90s8b6H+ByYTBZN7a3g76jdIJi7UfKQ== + dependencies: + "@ethersproject/abstract-provider" "^5.7.0" + "@ethersproject/bignumber" "^5.7.0" + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + "@ethersproject/properties" "^5.7.0" + +"@ethersproject/address@5.7.0", "@ethersproject/address@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/address/-/address-5.7.0.tgz#19b56c4d74a3b0a46bfdbb6cfcc0a153fc697f37" + integrity sha512-9wYhYt7aghVGo758POM5nqcOMaE168Q6aRLJZwUmiqSrAungkG74gSSeKEIR7ukixesdRZGPgVqme6vmxs1fkA== + dependencies: + "@ethersproject/bignumber" "^5.7.0" + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/keccak256" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + "@ethersproject/rlp" "^5.7.0" + +"@ethersproject/base64@5.7.0", "@ethersproject/base64@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/base64/-/base64-5.7.0.tgz#ac4ee92aa36c1628173e221d0d01f53692059e1c" + integrity sha512-Dr8tcHt2mEbsZr/mwTPIQAf3Ai0Bks/7gTw9dSqk1mQvhW3XvRlmDJr/4n+wg1JmCl16NZue17CDh8xb/vZ0sQ== + dependencies: + "@ethersproject/bytes" "^5.7.0" + +"@ethersproject/basex@5.7.0", "@ethersproject/basex@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/basex/-/basex-5.7.0.tgz#97034dc7e8938a8ca943ab20f8a5e492ece4020b" + integrity sha512-ywlh43GwZLv2Voc2gQVTKBoVQ1mti3d8HK5aMxsfu/nRDnMmNqaSJ3r3n85HBByT8OpoY96SXM1FogC533T4zw== + dependencies: + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/properties" "^5.7.0" + +"@ethersproject/bignumber@5.7.0", "@ethersproject/bignumber@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/bignumber/-/bignumber-5.7.0.tgz#e2f03837f268ba655ffba03a57853e18a18dc9c2" + integrity sha512-n1CAdIHRWjSucQO3MC1zPSVgV/6dy/fjL9pMrPP9peL+QxEg9wOsVqwD4+818B6LUEtaXzVHQiuivzRoxPxUGw== + dependencies: + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + bn.js "^5.2.1" + +"@ethersproject/bytes@5.7.0", "@ethersproject/bytes@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/bytes/-/bytes-5.7.0.tgz#a00f6ea8d7e7534d6d87f47188af1148d71f155d" + integrity sha512-nsbxwgFXWh9NyYWo+U8atvmMsSdKJprTcICAkvbBffT75qDocbuggBU0SJiVK2MuTrp0q+xvLkTnGMPK1+uA9A== + dependencies: + "@ethersproject/logger" "^5.7.0" + +"@ethersproject/constants@5.7.0", "@ethersproject/constants@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/constants/-/constants-5.7.0.tgz#df80a9705a7e08984161f09014ea012d1c75295e" + integrity sha512-DHI+y5dBNvkpYUMiRQyxRBYBefZkJfo70VUkUAsRjcPs47muV9evftfZ0PJVCXYbAiCgght0DtcF9srFQmIgWA== + dependencies: + "@ethersproject/bignumber" "^5.7.0" + +"@ethersproject/contracts@5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/contracts/-/contracts-5.7.0.tgz#c305e775abd07e48aa590e1a877ed5c316f8bd1e" + integrity sha512-5GJbzEU3X+d33CdfPhcyS+z8MzsTrBGk/sc+G+59+tPa9yFkl6HQ9D6L0QMgNTA9q8dT0XKxxkyp883XsQvbbg== + dependencies: + "@ethersproject/abi" "^5.7.0" + "@ethersproject/abstract-provider" "^5.7.0" + "@ethersproject/abstract-signer" "^5.7.0" + "@ethersproject/address" "^5.7.0" + "@ethersproject/bignumber" "^5.7.0" + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/constants" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + "@ethersproject/properties" "^5.7.0" + "@ethersproject/transactions" "^5.7.0" + +"@ethersproject/hash@5.7.0", "@ethersproject/hash@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/hash/-/hash-5.7.0.tgz#eb7aca84a588508369562e16e514b539ba5240a7" + integrity sha512-qX5WrQfnah1EFnO5zJv1v46a8HW0+E5xuBBDTwMFZLuVTx0tbU2kkx15NqdjxecrLGatQN9FGQKpb1FKdHCt+g== + dependencies: + "@ethersproject/abstract-signer" "^5.7.0" + "@ethersproject/address" "^5.7.0" + "@ethersproject/base64" "^5.7.0" + "@ethersproject/bignumber" "^5.7.0" + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/keccak256" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + "@ethersproject/properties" "^5.7.0" + "@ethersproject/strings" "^5.7.0" + +"@ethersproject/hdnode@5.7.0", "@ethersproject/hdnode@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/hdnode/-/hdnode-5.7.0.tgz#e627ddc6b466bc77aebf1a6b9e47405ca5aef9cf" + integrity sha512-OmyYo9EENBPPf4ERhR7oj6uAtUAhYGqOnIS+jE5pTXvdKBS99ikzq1E7Iv0ZQZ5V36Lqx1qZLeak0Ra16qpeOg== + dependencies: + "@ethersproject/abstract-signer" "^5.7.0" + "@ethersproject/basex" "^5.7.0" + "@ethersproject/bignumber" "^5.7.0" + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + "@ethersproject/pbkdf2" "^5.7.0" + "@ethersproject/properties" "^5.7.0" + "@ethersproject/sha2" "^5.7.0" + "@ethersproject/signing-key" "^5.7.0" + "@ethersproject/strings" "^5.7.0" + "@ethersproject/transactions" "^5.7.0" + "@ethersproject/wordlists" "^5.7.0" + +"@ethersproject/json-wallets@5.7.0", "@ethersproject/json-wallets@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/json-wallets/-/json-wallets-5.7.0.tgz#5e3355287b548c32b368d91014919ebebddd5360" + integrity sha512-8oee5Xgu6+RKgJTkvEMl2wDgSPSAQ9MB/3JYjFV9jlKvcYHUXZC+cQp0njgmxdHkYWn8s6/IqIZYm0YWCjO/0g== + dependencies: + "@ethersproject/abstract-signer" "^5.7.0" + "@ethersproject/address" "^5.7.0" + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/hdnode" "^5.7.0" + "@ethersproject/keccak256" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + "@ethersproject/pbkdf2" "^5.7.0" + "@ethersproject/properties" "^5.7.0" + "@ethersproject/random" "^5.7.0" + "@ethersproject/strings" "^5.7.0" + "@ethersproject/transactions" "^5.7.0" + aes-js "3.0.0" + scrypt-js "3.0.1" + +"@ethersproject/keccak256@5.7.0", "@ethersproject/keccak256@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/keccak256/-/keccak256-5.7.0.tgz#3186350c6e1cd6aba7940384ec7d6d9db01f335a" + integrity sha512-2UcPboeL/iW+pSg6vZ6ydF8tCnv3Iu/8tUmLLzWWGzxWKFFqOBQFLo6uLUv6BDrLgCDfN28RJ/wtByx+jZ4KBg== + dependencies: + "@ethersproject/bytes" "^5.7.0" + js-sha3 "0.8.0" + +"@ethersproject/logger@5.7.0", "@ethersproject/logger@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/logger/-/logger-5.7.0.tgz#6ce9ae168e74fecf287be17062b590852c311892" + integrity sha512-0odtFdXu/XHtjQXJYA3u9G0G8btm0ND5Cu8M7i5vhEcE8/HmF4Lbdqanwyv4uQTr2tx6b7fQRmgLrsnpQlmnig== + +"@ethersproject/networks@5.7.1", "@ethersproject/networks@^5.7.0": + version "5.7.1" + resolved "https://registry.yarnpkg.com/@ethersproject/networks/-/networks-5.7.1.tgz#118e1a981d757d45ccea6bb58d9fd3d9db14ead6" + integrity sha512-n/MufjFYv3yFcUyfhnXotyDlNdFb7onmkSy8aQERi2PjNcnWQ66xXxa3XlS8nCcA8aJKJjIIMNJTC7tu80GwpQ== + dependencies: + "@ethersproject/logger" "^5.7.0" + +"@ethersproject/pbkdf2@5.7.0", "@ethersproject/pbkdf2@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/pbkdf2/-/pbkdf2-5.7.0.tgz#d2267d0a1f6e123f3771007338c47cccd83d3102" + integrity sha512-oR/dBRZR6GTyaofd86DehG72hY6NpAjhabkhxgr3X2FpJtJuodEl2auADWBZfhDHgVCbu3/H/Ocq2uC6dpNjjw== + dependencies: + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/sha2" "^5.7.0" + +"@ethersproject/properties@5.7.0", "@ethersproject/properties@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/properties/-/properties-5.7.0.tgz#a6e12cb0439b878aaf470f1902a176033067ed30" + integrity sha512-J87jy8suntrAkIZtecpxEPxY//szqr1mlBaYlQ0r4RCaiD2hjheqF9s1LVE8vVuJCXisjIP+JgtK/Do54ej4Sw== + dependencies: + "@ethersproject/logger" "^5.7.0" + +"@ethersproject/providers@5.7.2": + version "5.7.2" + resolved "https://registry.yarnpkg.com/@ethersproject/providers/-/providers-5.7.2.tgz#f8b1a4f275d7ce58cf0a2eec222269a08beb18cb" + integrity sha512-g34EWZ1WWAVgr4aptGlVBF8mhl3VWjv+8hoAnzStu8Ah22VHBsuGzP17eb6xDVRzw895G4W7vvx60lFFur/1Rg== + dependencies: + "@ethersproject/abstract-provider" "^5.7.0" + "@ethersproject/abstract-signer" "^5.7.0" + "@ethersproject/address" "^5.7.0" + "@ethersproject/base64" "^5.7.0" + "@ethersproject/basex" "^5.7.0" + "@ethersproject/bignumber" "^5.7.0" + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/constants" "^5.7.0" + "@ethersproject/hash" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + "@ethersproject/networks" "^5.7.0" + "@ethersproject/properties" "^5.7.0" + "@ethersproject/random" "^5.7.0" + "@ethersproject/rlp" "^5.7.0" + "@ethersproject/sha2" "^5.7.0" + "@ethersproject/strings" "^5.7.0" + "@ethersproject/transactions" "^5.7.0" + "@ethersproject/web" "^5.7.0" + bech32 "1.1.4" + ws "7.4.6" + +"@ethersproject/random@5.7.0", "@ethersproject/random@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/random/-/random-5.7.0.tgz#af19dcbc2484aae078bb03656ec05df66253280c" + integrity sha512-19WjScqRA8IIeWclFme75VMXSBvi4e6InrUNuaR4s5pTF2qNhcGdCUwdxUVGtDDqC00sDLCO93jPQoDUH4HVmQ== + dependencies: + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + +"@ethersproject/rlp@5.7.0", "@ethersproject/rlp@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/rlp/-/rlp-5.7.0.tgz#de39e4d5918b9d74d46de93af80b7685a9c21304" + integrity sha512-rBxzX2vK8mVF7b0Tol44t5Tb8gomOHkj5guL+HhzQ1yBh/ydjGnpw6at+X6Iw0Kp3OzzzkcKp8N9r0W4kYSs9w== + dependencies: + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + +"@ethersproject/sha2@5.7.0", "@ethersproject/sha2@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/sha2/-/sha2-5.7.0.tgz#9a5f7a7824ef784f7f7680984e593a800480c9fb" + integrity sha512-gKlH42riwb3KYp0reLsFTokByAKoJdgFCwI+CCiX/k+Jm2mbNs6oOaCjYQSlI1+XBVejwH2KrmCbMAT/GnRDQw== + dependencies: + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + hash.js "1.1.7" + +"@ethersproject/signing-key@5.7.0", "@ethersproject/signing-key@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/signing-key/-/signing-key-5.7.0.tgz#06b2df39411b00bc57c7c09b01d1e41cf1b16ab3" + integrity sha512-MZdy2nL3wO0u7gkB4nA/pEf8lu1TlFswPNmy8AiYkfKTdO6eXBJyUdmHO/ehm/htHw9K/qF8ujnTyUAD+Ry54Q== + dependencies: + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + "@ethersproject/properties" "^5.7.0" + bn.js "^5.2.1" + elliptic "6.5.4" + hash.js "1.1.7" + +"@ethersproject/solidity@5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/solidity/-/solidity-5.7.0.tgz#5e9c911d8a2acce2a5ebb48a5e2e0af20b631cb8" + integrity sha512-HmabMd2Dt/raavyaGukF4XxizWKhKQ24DoLtdNbBmNKUOPqwjsKQSdV9GQtj9CBEea9DlzETlVER1gYeXXBGaA== + dependencies: + "@ethersproject/bignumber" "^5.7.0" + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/keccak256" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + "@ethersproject/sha2" "^5.7.0" + "@ethersproject/strings" "^5.7.0" + +"@ethersproject/strings@5.7.0", "@ethersproject/strings@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/strings/-/strings-5.7.0.tgz#54c9d2a7c57ae8f1205c88a9d3a56471e14d5ed2" + integrity sha512-/9nu+lj0YswRNSH0NXYqrh8775XNyEdUQAuf3f+SmOrnVewcJ5SBNAjF7lpgehKi4abvNNXyf+HX86czCdJ8Mg== + dependencies: + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/constants" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + +"@ethersproject/transactions@5.7.0", "@ethersproject/transactions@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/transactions/-/transactions-5.7.0.tgz#91318fc24063e057885a6af13fdb703e1f993d3b" + integrity sha512-kmcNicCp1lp8qanMTC3RIikGgoJ80ztTyvtsFvCYpSCfkjhD0jZ2LOrnbcuxuToLIUYYf+4XwD1rP+B/erDIhQ== + dependencies: + "@ethersproject/address" "^5.7.0" + "@ethersproject/bignumber" "^5.7.0" + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/constants" "^5.7.0" + "@ethersproject/keccak256" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + "@ethersproject/properties" "^5.7.0" + "@ethersproject/rlp" "^5.7.0" + "@ethersproject/signing-key" "^5.7.0" + +"@ethersproject/units@5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/units/-/units-5.7.0.tgz#637b563d7e14f42deeee39245275d477aae1d8b1" + integrity sha512-pD3xLMy3SJu9kG5xDGI7+xhTEmGXlEqXU4OfNapmfnxLVY4EMSSRp7j1k7eezutBPH7RBN/7QPnwR7hzNlEFeg== + dependencies: + "@ethersproject/bignumber" "^5.7.0" + "@ethersproject/constants" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + +"@ethersproject/wallet@5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/wallet/-/wallet-5.7.0.tgz#4e5d0790d96fe21d61d38fb40324e6c7ef350b2d" + integrity sha512-MhmXlJXEJFBFVKrDLB4ZdDzxcBxQ3rLyCkhNqVu3CDYvR97E+8r01UgrI+TI99Le+aYm/in/0vp86guJuM7FCA== + dependencies: + "@ethersproject/abstract-provider" "^5.7.0" + "@ethersproject/abstract-signer" "^5.7.0" + "@ethersproject/address" "^5.7.0" + "@ethersproject/bignumber" "^5.7.0" + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/hash" "^5.7.0" + "@ethersproject/hdnode" "^5.7.0" + "@ethersproject/json-wallets" "^5.7.0" + "@ethersproject/keccak256" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + "@ethersproject/properties" "^5.7.0" + "@ethersproject/random" "^5.7.0" + "@ethersproject/signing-key" "^5.7.0" + "@ethersproject/transactions" "^5.7.0" + "@ethersproject/wordlists" "^5.7.0" + +"@ethersproject/web@5.7.1", "@ethersproject/web@^5.7.0": + version "5.7.1" + resolved "https://registry.yarnpkg.com/@ethersproject/web/-/web-5.7.1.tgz#de1f285b373149bee5928f4eb7bcb87ee5fbb4ae" + integrity sha512-Gueu8lSvyjBWL4cYsWsjh6MtMwM0+H4HvqFPZfB6dV8ctbP9zFAO73VG1cMWae0FLPCtz0peKPpZY8/ugJJX2w== + dependencies: + "@ethersproject/base64" "^5.7.0" + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + "@ethersproject/properties" "^5.7.0" + "@ethersproject/strings" "^5.7.0" + +"@ethersproject/wordlists@5.7.0", "@ethersproject/wordlists@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/wordlists/-/wordlists-5.7.0.tgz#8fb2c07185d68c3e09eb3bfd6e779ba2774627f5" + integrity sha512-S2TFNJNfHWVHNE6cNDjbVlZ6MgE17MIxMbMg2zv3wn+3XSJGosL1m9ZVv3GXCf/2ymSsQ+hRI5IzoMJTG6aoVA== + dependencies: + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/hash" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + "@ethersproject/properties" "^5.7.0" + "@ethersproject/strings" "^5.7.0" + +"@hapi/hoek@^9.0.0", "@hapi/hoek@^9.3.0": + version "9.3.0" + resolved "https://registry.yarnpkg.com/@hapi/hoek/-/hoek-9.3.0.tgz#8368869dcb735be2e7f5cb7647de78e167a251fb" + integrity sha512-/c6rf4UJlmHlC9b5BaNvzAcFv7HZ2QHaV0D4/HNlBdvFnvQq8RI4kYdhyPCl7Xj+oWvTWQ8ujhqS53LIgAe6KQ== + +"@hapi/topo@^5.1.0": + version "5.1.0" + resolved "https://registry.yarnpkg.com/@hapi/topo/-/topo-5.1.0.tgz#dc448e332c6c6e37a4dc02fd84ba8d44b9afb012" + integrity sha512-foQZKJig7Ob0BMAYBfcJk8d77QtOe7Wo4ox7ff1lQYoNNAb6jwcY1ncdoy2e9wQZzvNy7ODZCYJkK8kzmcAnAg== + dependencies: + "@hapi/hoek" "^9.0.0" + +"@mercurial-finance/apricot-sdk@0.17.6": + version "0.17.6" + resolved "https://registry.yarnpkg.com/@mercurial-finance/apricot-sdk/-/apricot-sdk-0.17.6.tgz#e5e2266dbf3d454a09d745561f486aaa351d625a" + integrity sha512-/x/nMksG2h3uB7G4bPVXk0YjvsGVUniSikRmCf/VFFly9BqcRcBtSk4aMdSvIjYsJrpSzWVrHXUYeOtUF1ObDA== + dependencies: + "@solana/spl-token" "0.1.8" + "@solana/web3.js" "^1.37.0" + decimal.js "^10.3.1" + tiny-invariant "^1.1.0" + +"@mercurial-finance/cypher-client@^4.1.4": + version "4.1.4" + resolved "https://registry.yarnpkg.com/@mercurial-finance/cypher-client/-/cypher-client-4.1.4.tgz#17b4d76b9f53d2919e6aee4be2fa22432188c52f" + integrity sha512-W5zy+weni9LPPCL6ImGMjb/Ykg8x09kRVSsVg+OaXZ7qrA+/lwEvv32aEn8kKuha0drvuvTNdXHPUuC60UEnsg== + dependencies: + "@project-serum/anchor" "^0.26.0" + "@solana/web3.js" "~1.72.0" + +"@mercurial-finance/drift-sdk@1.0.3": + version "1.0.3" + resolved "https://registry.yarnpkg.com/@mercurial-finance/drift-sdk/-/drift-sdk-1.0.3.tgz#c9426fd7c019aa973914841ca1f6c9397de444ca" + integrity sha512-I+K95ZK7FpSY67UcZ1JW0M2jOnEVoK5k3TMLzqbrv30m0IGBJYZ1zmrdPlIsNdd4N83KMsYbCjiGltL7h0/bYQ== + dependencies: + "@project-serum/anchor" "0.25.0-beta.1" + "@project-serum/serum" "^0.13.38" + "@pythnetwork/client" "2.5.3" + "@solana/spl-token" "^0.1.6" + "@solana/web3.js" "1.66.2" + "@switchboard-xyz/switchboard-v2" "^0.0.67" + bs58 "^5.0.0" + strict-event-emitter-types "^2.0.0" + uuid "^8.3.2" + +"@mercurial-finance/dynamic-amm-sdk@^0.4.19": + version "0.4.19" + resolved "https://registry.yarnpkg.com/@mercurial-finance/dynamic-amm-sdk/-/dynamic-amm-sdk-0.4.19.tgz#30a45199472b745cf536d5be5f30cdd8752c3adb" + integrity sha512-mN3EubUvwXnoY60RANsu67YhEfUIA3gyR25VsM9lHNAsOtwSPOc0gUl5u63TuDNZdcCVsLScklMJytUPuJ/AHg== + dependencies: + "@mercurial-finance/vault-sdk" "0.5.3" + "@project-serum/anchor" "0.24.2" + "@project-serum/borsh" "^0.2.5" + "@saberhq/anchor-contrib" "1.13.32" + "@saberhq/stableswap-sdk" "1.13.32" + "@saberhq/token-utils" "1.13.32" + "@solana/spl-token" "0.1.8" + "@solana/spl-token-registry" "0.2.1105" + "@solana/web3.js" "^1.42.0" + bn-sqrt "^1.0.0" + bn.js "5.2.1" + decimal.js "^10.4.1" + dotenv "^16.0.1" + invariant "^2.2.4" + jsbi "^4.3.0" + +"@mercurial-finance/frakt-sdk@0.0.2": + version "0.0.2" + resolved "https://registry.yarnpkg.com/@mercurial-finance/frakt-sdk/-/frakt-sdk-0.0.2.tgz#0a0f39aef240c1c7f092156c643f1eb27adfa566" + integrity sha512-x/3W7BMyUzMigkeJMLXNCnZunGw6JFSaG5hx4oaioDy9qT3MxT05OhaoKLs9zMl3RPLjy/xm1Y79eoDdz8qxEQ== + dependencies: + "@project-serum/anchor" "0.24.2" + axios "^1.2.1" + +"@mercurial-finance/francium-sdk@1.4.3": + version "1.4.3" + resolved "https://registry.yarnpkg.com/@mercurial-finance/francium-sdk/-/francium-sdk-1.4.3.tgz#aa6c43da1a923a700bec0b0e425fe72a76d8dd68" + integrity sha512-beFsxFx9WsHsImCSZAPXlitE4kQMugHczATishmJdxXGEHvBfJ3hrncjaWf+znwlMTknx8zYgPFfeP9JzbHHgw== + +"@mercurial-finance/mango-v4@0.5.4": + version "0.5.4" + resolved "https://registry.yarnpkg.com/@mercurial-finance/mango-v4/-/mango-v4-0.5.4.tgz#9df78a7f146c59c8a645877b6587ab44c51e7303" + integrity sha512-KD0xdmU5+05F/Or7YYtzyhFGwAXqDD+LmN9fJIp/KJfieQcKq/GnLnFdGA8iTLMydyqcO0ymgSxu5Uky2IpyaA== + dependencies: + "@project-serum/anchor" "^0.25.0" + "@project-serum/serum" "^0.13.65" + "@pythnetwork/client" "~2.14.0" + "@solana/spl-token" "0.3.7" + "@solana/web3.js" "^1.63.1" + "@switchboard-xyz/sbv2-lite" "^0.1.6" + big.js "^6.1.1" + binance-api-node "^0.12.0" + bs58 "^5.0.0" + cross-fetch "^3.1.5" + dotenv "^16.0.3" + node-kraken-api "^2.2.2" + +"@mercurial-finance/marginfi-client-v2@1.0.2": + version "1.0.2" + resolved "https://registry.yarnpkg.com/@mercurial-finance/marginfi-client-v2/-/marginfi-client-v2-1.0.2.tgz#685dc3b235081741c97ae0cfd5a63ee2241159c0" + integrity sha512-Bmd6yJhVZLdiHMkJvNmEP+MxT0QCNXDGwwKEgIQxtTsIhAYtnlgBQegXz1t8aad5qEmimWRjyYQWu8jjaZ7UcQ== + dependencies: + "@coral-xyz/anchor" "^0.26.0" + "@mrgnlabs/mrgn-common" "*" + "@project-serum/anchor" "^0.26.0" + "@pythnetwork/client" "^2.9.0" + "@solana/wallet-adapter-base" "^0.9.20" + "@solana/web3.js" "^1.71.0" + "@switchboard-xyz/solana.js" "^2.1.10" + bignumber.js "^9.1.1" + decimal.js "^10.4.3" + superstruct "^1.0.3" + +"@mercurial-finance/optimist@^0.1.4": + version "0.1.9" + resolved "https://registry.yarnpkg.com/@mercurial-finance/optimist/-/optimist-0.1.9.tgz#82b612fc6d602c1010cada4fb396d92b7fcae03a" + integrity sha512-cOJan58djQdg2iHKV/jPFgD1bNm2hffa5S0FXREKSNfzZRfsYLZOnRNJ24X0o+VJ9kC5BY0HYwduT/+dAyZ0AQ== + dependencies: + promise-retry "2.0.1" + +"@mercurial-finance/port-sdk@0.2.69": + version "0.2.69" + resolved "https://registry.yarnpkg.com/@mercurial-finance/port-sdk/-/port-sdk-0.2.69.tgz#79978c4be9175afb3640e18e16f21e439f203ef2" + integrity sha512-DDZBLkoIQVhLQRy+t7dVuiHNw0nAmWD7xqwMekHT71bBLU5ajQglRvQ9b8d2RQQn1WJsXhbGbc7eTUGWdZqWoQ== + dependencies: + "@solana/buffer-layout" "^3.0.0" + "@solana/spl-token" "0.1.8" + "@solana/spl-token-registry" "^0.2.1107" + "@solana/web3.js" "^1.32.0" + big.js "^6.1.1" + bn.js "^5.2.1" + buffer-layout "1.2.2" + +"@mercurial-finance/solend-sdk@0.6.5": + version "0.6.5" + resolved "https://registry.yarnpkg.com/@mercurial-finance/solend-sdk/-/solend-sdk-0.6.5.tgz#54b2fe6fb28356ba8e749e8c42fb9193cec4f258" + integrity sha512-544KqvD1IkpnyTUDOCt0yVlTcayt9rv+CTXHTFQDinWQQkA8uWBoiNbI0g49bJVE//Np3SbJSOgJmq5KlxgvWQ== + dependencies: + "@solana/web3.js" "^1.52.0" + bn.js "^5.2.0" + buffer "^6.0.3" + buffer-layout "^1.2.0" + +"@mercurial-finance/tulip-platform-sdk@2.0.30": + version "2.0.30" + resolved "https://registry.yarnpkg.com/@mercurial-finance/tulip-platform-sdk/-/tulip-platform-sdk-2.0.30.tgz#c528ca8efd96e4667d8d905274065d6435438ad6" + integrity sha512-ySPxAtFLtati9Vv7g3czrcNEiT9HBZboRDNnfEDmCFJqsub87Y2ZF125dpspaZzKUlolOrBIqBy1FZYIreMgfg== + dependencies: + "@project-serum/anchor" "^0.25.0" + "@project-serum/associated-token" "^0.1.1" + "@project-serum/borsh" "^0.2.5" + "@solana/web3.js" "^1.66.2" + lodash "^4.17.21" + +"@mercurial-finance/vault-sdk@0.5.3": + version "0.5.3" + resolved "https://registry.yarnpkg.com/@mercurial-finance/vault-sdk/-/vault-sdk-0.5.3.tgz#4a6ef72474a6c81f86d1219c57cbbbd1978879fe" + integrity sha512-JnG5moumWHg15utCMVD/G+1xLveGXSTUAkTQUSiITs7Du1Nw47GtHlpJEa9+z+0uhcy6/eKNiNLkDUrq0z3zSg== + dependencies: + "@blockworks-foundation/mango-client" "^3.4.7" + "@mercurial-finance/apricot-sdk" "0.17.6" + "@mercurial-finance/cypher-client" "^4.1.4" + "@mercurial-finance/drift-sdk" "1.0.3" + "@mercurial-finance/frakt-sdk" "0.0.2" + "@mercurial-finance/francium-sdk" "1.4.3" + "@mercurial-finance/mango-v4" "0.5.4" + "@mercurial-finance/marginfi-client-v2" "1.0.2" + "@mercurial-finance/optimist" "^0.1.4" + "@mercurial-finance/port-sdk" "0.2.69" + "@mercurial-finance/solend-sdk" "0.6.5" + "@mercurial-finance/tulip-platform-sdk" "2.0.30" + "@mithraic-labs/psylend-utils" "0.0.3-rc39" + "@project-serum/anchor" "0.25.0" + "@quarryprotocol/quarry-sdk" "5.0.2" + "@saberhq/anchor-contrib" "1.13.32" + "@solana/buffer-layout" "^4.0.0" + "@solana/spl-token" "0.1.8" + "@solana/spl-token-registry" "0.2.1105" + "@solana/web3.js" "~1.72.0" + bn.js "5.2.1" + cross-fetch "^3.1.5" + decimal.js "10.3.1" + jsbi "4.3.0" + +"@metaplex-foundation/beet-solana@0.4.0": version "0.4.0" resolved "https://registry.yarnpkg.com/@metaplex-foundation/beet-solana/-/beet-solana-0.4.0.tgz#52891e78674aaa54e0031f1bca5bfbc40de12e8d" integrity sha512-B1L94N3ZGMo53b0uOSoznbuM5GBNJ8LwSeznxBxJ+OThvfHQ4B5oMUqb+0zdLRfkKGS7Q6tpHK9P+QK0j3w2cQ== @@ -76,7 +810,17 @@ bs58 "^5.0.0" debug "^4.3.4" -"@metaplex-foundation/beet@>=0.1.0", "@metaplex-foundation/beet@^0.7.1": +"@metaplex-foundation/beet-solana@^0.3.0": + version "0.3.1" + resolved "https://registry.yarnpkg.com/@metaplex-foundation/beet-solana/-/beet-solana-0.3.1.tgz#4b37cda5c7f32ffd2bdd8b3164edc05c6463ab35" + integrity sha512-tgyEl6dvtLln8XX81JyBvWjIiEcjTkUwZbrM5dIobTmoqMuGewSyk9CClno8qsMsFdB5T3jC91Rjeqmu/6xk2g== + dependencies: + "@metaplex-foundation/beet" ">=0.1.0" + "@solana/web3.js" "^1.56.2" + bs58 "^5.0.0" + debug "^4.3.4" + +"@metaplex-foundation/beet@0.7.1": version "0.7.1" resolved "https://registry.yarnpkg.com/@metaplex-foundation/beet/-/beet-0.7.1.tgz#0975314211643f87b5f6f3e584fa31abcf4c612c" integrity sha512-hNCEnS2WyCiYyko82rwuISsBY3KYpe828ubsd2ckeqZr7tl0WVLivGkoyA/qdiaaHEBGdGl71OpfWa2rqL3DiA== @@ -85,75 +829,657 @@ bn.js "^5.2.0" debug "^4.3.3" +"@metaplex-foundation/beet@>=0.1.0": + version "0.7.2" + resolved "https://registry.yarnpkg.com/@metaplex-foundation/beet/-/beet-0.7.2.tgz#fa4726e4cfd4fb6fed6cddc9b5213c1c2a2d0b77" + integrity sha512-K+g3WhyFxKPc0xIvcIjNyV1eaTVJTiuaHZpig7Xx0MuYRMoJLLvhLTnUXhFdR5Tu2l2QSyKwfyXDgZlzhULqFg== + dependencies: + ansicolors "^0.3.2" + assert "^2.1.0" + bn.js "^5.2.0" + debug "^4.3.3" + +"@metaplex-foundation/beet@^0.4.0": + version "0.4.0" + resolved "https://registry.yarnpkg.com/@metaplex-foundation/beet/-/beet-0.4.0.tgz#eb2a0a6eb084bb25d67dd9bed2f7387ee7e63a55" + integrity sha512-2OAKJnLatCc3mBXNL0QmWVQKAWK2C7XDfepgL0p/9+8oSx4bmRAFHFqptl1A/C0U5O3dxGwKfmKluW161OVGcA== + dependencies: + ansicolors "^0.3.2" + bn.js "^5.2.0" + debug "^4.3.3" + "@metaplex-foundation/cusper@^0.0.2": version "0.0.2" resolved "https://registry.yarnpkg.com/@metaplex-foundation/cusper/-/cusper-0.0.2.tgz#dc2032a452d6c269e25f016aa4dd63600e2af975" integrity sha512-S9RulC2fFCFOQraz61bij+5YCHhSO9llJegK8c8Y6731fSi6snUSQJdCUqYS8AIgR0TKbQvdvgSyIIdbDFZbBA== -"@metaplex-foundation/mpl-token-metadata@^2.5.2": - version "2.13.0" - resolved "https://registry.yarnpkg.com/@metaplex-foundation/mpl-token-metadata/-/mpl-token-metadata-2.13.0.tgz#ea498190ad4ed1d4c0b8218a72d03bd17a883d11" - integrity sha512-Fl/8I0L9rv4bKTV/RAl5YIbJe9SnQPInKvLz+xR1fEc4/VQkuCn3RPgypfUMEKWmCznzaw4sApDxy6CFS4qmJw== +"@metaplex-foundation/mpl-token-metadata@2.2.4": + version "2.2.4" + resolved "https://registry.yarnpkg.com/@metaplex-foundation/mpl-token-metadata/-/mpl-token-metadata-2.2.4.tgz#d934cf20d6e22f7923fc96b80c7534595780eda6" + integrity sha512-cayIZ7w/XUKkUygNyWyx5l5Q8PO5qzIemk6c/7dxKhdHLlaVPwKjRhbg6kIuzZ8tvYP5afUmJKln9rWnI8tQCA== dependencies: - "@metaplex-foundation/beet" "^0.7.1" - "@metaplex-foundation/beet-solana" "^0.4.0" + "@metaplex-foundation/beet" "^0.4.0" + "@metaplex-foundation/beet-solana" "^0.3.0" "@metaplex-foundation/cusper" "^0.0.2" - "@solana/spl-token" "^0.3.6" - "@solana/web3.js" "^1.66.2" + "@solana/spl-token" "^0.2.0" + "@solana/web3.js" "^1.35.1" bn.js "^5.2.0" - debug "^4.3.4" + debug "^4.3.3" -"@noble/curves@^1.2.0": - version "1.2.0" - resolved "https://registry.yarnpkg.com/@noble/curves/-/curves-1.2.0.tgz#92d7e12e4e49b23105a2555c6984d41733d65c35" - integrity sha512-oYclrNgRaM9SsBUBVbb8M6DTV7ZHRTKugureoYEncY5c65HOmRzvSiTE3y5CYaPYJA/GVkrhXEoF0M3Ya9PMnw== +"@metaplex-foundation/mpl-token-metadata@^3.2.0": + version "3.2.1" + resolved "https://registry.yarnpkg.com/@metaplex-foundation/mpl-token-metadata/-/mpl-token-metadata-3.2.1.tgz#d424e378a1ee441a6431d2641d66873118d6dc67" + integrity sha512-26W1NhQwDWmLOg/pBRYut7x/vEs/5kFS2sWVEY5/X0f2jJOLhnd4NaZQcq+5u+XZsXvm1jq2AtrRGPNK43oqWQ== dependencies: - "@noble/hashes" "1.3.2" + "@metaplex-foundation/mpl-toolbox" "^0.9.4" -"@noble/ed25519@^1.7.0": - version "1.7.1" - resolved "https://registry.npmjs.org/@noble/ed25519/-/ed25519-1.7.1.tgz" - integrity sha512-Rk4SkJFaXZiznFyC/t77Q0NKS4FL7TLJJsVG2V2oiEq3kJVeTdxysEe/yRWSpnWMe808XRDJ+VFh5pt/FN5plw== +"@metaplex-foundation/mpl-toolbox@^0.9.4": + version "0.9.4" + resolved "https://registry.yarnpkg.com/@metaplex-foundation/mpl-toolbox/-/mpl-toolbox-0.9.4.tgz#2211b2f726b1e5745c03908d26fd8ee580838b6f" + integrity sha512-fd6JxfoLbj/MM8FG2x91KYVy1U6AjBQw4qjt7+Da3trzQaWnSaYHDcYRG/53xqfvZ9qofY1T2t53GXPlD87lnQ== + +"@metaplex-foundation/umi-bundle-defaults@^0.9.1": + version "0.9.1" + resolved "https://registry.yarnpkg.com/@metaplex-foundation/umi-bundle-defaults/-/umi-bundle-defaults-0.9.1.tgz#2c43134e7ddaf25fdbcbb518d75136c6260bac82" + integrity sha512-QBaCLrb2D5uhY6pbWdxGPdD3LNKOAZ/Wfp7gEzhAipWmEV75KO7ya3AzaU4JZPHaf9juwdU4wO50WEPRb7YyQg== + dependencies: + "@metaplex-foundation/umi-downloader-http" "^0.9.1" + "@metaplex-foundation/umi-eddsa-web3js" "^0.9.1" + "@metaplex-foundation/umi-http-fetch" "^0.9.1" + "@metaplex-foundation/umi-program-repository" "^0.9.1" + "@metaplex-foundation/umi-rpc-chunk-get-accounts" "^0.9.1" + "@metaplex-foundation/umi-rpc-web3js" "^0.9.1" + "@metaplex-foundation/umi-serializer-data-view" "^0.9.1" + "@metaplex-foundation/umi-transaction-factory-web3js" "^0.9.1" + +"@metaplex-foundation/umi-downloader-http@^0.9.1": + version "0.9.1" + resolved "https://registry.yarnpkg.com/@metaplex-foundation/umi-downloader-http/-/umi-downloader-http-0.9.1.tgz#fa516b0ef0bbfbd52657708b226db3e00b58469d" + integrity sha512-T/t9YtkDxovIz5hG0SEBolzet0nTd77hZJSSGCNfrhhgJJtNeIHz+/0K+o7U+ubLddFmtPNxF4KBfmh1jCYCQQ== + +"@metaplex-foundation/umi-eddsa-web3js@^0.9.1": + version "0.9.1" + resolved "https://registry.yarnpkg.com/@metaplex-foundation/umi-eddsa-web3js/-/umi-eddsa-web3js-0.9.1.tgz#eccbf4fa544ceec8f6cdebf239eb8d915c980c1c" + integrity sha512-D+ZP8jOEzfr1ncF18zRdxfE820xjTf6AIBZd926TRj8dlOFIDfu1J0FGS7pC+52CAC9BRNrRvYQyc1TPORkfTQ== + dependencies: + "@metaplex-foundation/umi-web3js-adapters" "^0.9.1" + "@noble/curves" "^1.0.0" + +"@metaplex-foundation/umi-http-fetch@^0.9.1": + version "0.9.1" + resolved "https://registry.yarnpkg.com/@metaplex-foundation/umi-http-fetch/-/umi-http-fetch-0.9.1.tgz#7b6c68b51d6cc5f17742b97a639cd98b3dfc72b6" + integrity sha512-Flh5wSbiYmeDg4V6IE9BNX1BH3eewcIzHxZ1RT1sagU0PlDwy37dm0gcU+svYM/usDvnbk4hwOMGcZkhQLN1QQ== + dependencies: + node-fetch "^2.6.7" + +"@metaplex-foundation/umi-options@^0.8.9": + version "0.8.9" + resolved "https://registry.yarnpkg.com/@metaplex-foundation/umi-options/-/umi-options-0.8.9.tgz#9c9e269d9eee7d055ad6831dcb30a30127dcb0c5" + integrity sha512-jSQ61sZMPSAk/TXn8v8fPqtz3x8d0/blVZXLLbpVbo2/T5XobiI6/MfmlUosAjAUaQl6bHRF8aIIqZEFkJiy4A== + +"@metaplex-foundation/umi-program-repository@^0.9.1": + version "0.9.1" + resolved "https://registry.yarnpkg.com/@metaplex-foundation/umi-program-repository/-/umi-program-repository-0.9.1.tgz#575ec3ed452615d5f3d1bce9a105ed639a91de44" + integrity sha512-6SawFMO4IZdk4y+D/+o8CyYnfmy8kcOqhQsX3fUMqIXSzz0vzMT2/dDTMfLsuTVyULnaW/VYm26cmYBjVqZTlw== + +"@metaplex-foundation/umi-public-keys@^0.8.9": + version "0.8.9" + resolved "https://registry.yarnpkg.com/@metaplex-foundation/umi-public-keys/-/umi-public-keys-0.8.9.tgz#ca7a927c924ed8e28d0f8bb3dc0f2adc1f9011ec" + integrity sha512-CxMzN7dgVGOq9OcNCJe2casKUpJ3RmTVoOvDFyeoTQuK+vkZ1YSSahbqC1iGuHEtKTLSjtWjKvUU6O7zWFTw3Q== + dependencies: + "@metaplex-foundation/umi-serializers-encodings" "^0.8.9" + +"@metaplex-foundation/umi-rpc-chunk-get-accounts@^0.9.1": + version "0.9.1" + resolved "https://registry.yarnpkg.com/@metaplex-foundation/umi-rpc-chunk-get-accounts/-/umi-rpc-chunk-get-accounts-0.9.1.tgz#ad4c4dda9b336d27e6dd9afcbaa91bd931874182" + integrity sha512-WxF4DxSBJXzrGfmJ+X4DjF4rk9as/0EnkpGo0DdtHTZNqIfRY9mqi8OPRe/JhSjYzWFCC0ngjanqShhcEetB4A== + +"@metaplex-foundation/umi-rpc-web3js@^0.9.1": + version "0.9.1" + resolved "https://registry.yarnpkg.com/@metaplex-foundation/umi-rpc-web3js/-/umi-rpc-web3js-0.9.1.tgz#fdafb5f03d4d252ebde3025ed78a3e9a868d4e04" + integrity sha512-kOJEc9IWMX+H7dI5zZZimww1w0A6yd2V/fsQHKB/kHddja7JoPK4Au68n45Pi0vb3HY7riCQN9XMqOOPD5tcxA== + dependencies: + "@metaplex-foundation/umi-web3js-adapters" "^0.9.1" + +"@metaplex-foundation/umi-serializer-data-view@^0.9.1": + version "0.9.1" + resolved "https://registry.yarnpkg.com/@metaplex-foundation/umi-serializer-data-view/-/umi-serializer-data-view-0.9.1.tgz#5366f9c31d27ea2f6a884a78df1cf5a14158412b" + integrity sha512-teilMc3abBrdLtgQ0PqnNXvmdsjNFPk4sVbM/flxoh9edyRQCAJmyK7DEA7cXCYfhBVX0jwSJIEcqTDa+r+jdw== + +"@metaplex-foundation/umi-serializers-core@^0.8.9": + version "0.8.9" + resolved "https://registry.yarnpkg.com/@metaplex-foundation/umi-serializers-core/-/umi-serializers-core-0.8.9.tgz#cd5ae763a59e54dd01f1284f4a6bf4e78e4aab9c" + integrity sha512-WT82tkiYJ0Qmscp7uTj1Hz6aWQPETwaKLAENAUN5DeWghkuBKtuxyBKVvEOuoXerJSdhiAk0e8DWA4cxcTTQ/w== + +"@metaplex-foundation/umi-serializers-encodings@^0.8.9": + version "0.8.9" + resolved "https://registry.yarnpkg.com/@metaplex-foundation/umi-serializers-encodings/-/umi-serializers-encodings-0.8.9.tgz#0f02605ee3e6fbeac1abc4fb267a7cc96ecb4410" + integrity sha512-N3VWLDTJ0bzzMKcJDL08U3FaqRmwlN79FyE4BHj6bbAaJ9LEHjDQ9RJijZyWqTm0jE7I750fU7Ow5EZL38Xi6Q== + dependencies: + "@metaplex-foundation/umi-serializers-core" "^0.8.9" + +"@metaplex-foundation/umi-serializers-numbers@^0.8.9": + version "0.8.9" + resolved "https://registry.yarnpkg.com/@metaplex-foundation/umi-serializers-numbers/-/umi-serializers-numbers-0.8.9.tgz#28c10367f6aebac0276ec1bce81d0d8db54b05de" + integrity sha512-NtBf1fnVNQJHFQjLFzRu2i9GGnigb9hOm/Gfrk628d0q0tRJB7BOM3bs5C61VAs7kJs4yd+pDNVAERJkknQ7Lg== + dependencies: + "@metaplex-foundation/umi-serializers-core" "^0.8.9" + +"@metaplex-foundation/umi-serializers@^0.9.0": + version "0.9.0" + resolved "https://registry.yarnpkg.com/@metaplex-foundation/umi-serializers/-/umi-serializers-0.9.0.tgz#af6d03a3bf821bf73b7b3450bb8df0407f2f69d6" + integrity sha512-hAOW9Djl4w4ioKeR4erDZl5IG4iJdP0xA19ZomdaCbMhYAAmG/FEs5khh0uT2mq53/MnzWcXSUPoO8WBN4Q+Vg== + dependencies: + "@metaplex-foundation/umi-options" "^0.8.9" + "@metaplex-foundation/umi-public-keys" "^0.8.9" + "@metaplex-foundation/umi-serializers-core" "^0.8.9" + "@metaplex-foundation/umi-serializers-encodings" "^0.8.9" + "@metaplex-foundation/umi-serializers-numbers" "^0.8.9" + +"@metaplex-foundation/umi-transaction-factory-web3js@^0.9.1": + version "0.9.1" + resolved "https://registry.yarnpkg.com/@metaplex-foundation/umi-transaction-factory-web3js/-/umi-transaction-factory-web3js-0.9.1.tgz#fb891cd1229ace5187930c2329c18c0af29ea553" + integrity sha512-DBBvaMpR6pR3ZpyaRD/0QSTjS+3lxHIUZYAqZi0JYsTyYqNTNsdKVbeu6uLjbeyoJbmqgKVZ0nZgcokEKx49eg== + dependencies: + "@metaplex-foundation/umi-web3js-adapters" "^0.9.1" + +"@metaplex-foundation/umi-uploader-bundlr@^0.9.1": + version "0.9.1" + resolved "https://registry.yarnpkg.com/@metaplex-foundation/umi-uploader-bundlr/-/umi-uploader-bundlr-0.9.1.tgz#43eb5e3022bbef2d5f8bd170d775a4dc1718e8e4" + integrity sha512-R2apPj0lWSem1zI0Tqk1MAi+nPK3JVcnppwzvczoUs2n+vuQdk6cQSLE+sbHiba7Gq1bx/Y7DwLLayhLwY8GcA== + dependencies: + "@bundlr-network/client" "^0.8.8" + "@metaplex-foundation/umi-web3js-adapters" "^0.9.1" + bignumber.js "^9.0.2" + buffer "^6.0.3" + +"@metaplex-foundation/umi-web3js-adapters@^0.9.1": + version "0.9.1" + resolved "https://registry.yarnpkg.com/@metaplex-foundation/umi-web3js-adapters/-/umi-web3js-adapters-0.9.1.tgz#e37cee0b835608044558785c8bf69a5ca92cf341" + integrity sha512-O6lQGJFebRM8P67ajvUpuctJ/J39Lylp4wyg8E1tHmFxUsdBC7M9qBixi/WmCiNKgSfVrq6MmiYaba3OSrtqwg== + dependencies: + buffer "^6.0.3" + +"@metaplex-foundation/umi@^0.9.1": + version "0.9.1" + resolved "https://registry.yarnpkg.com/@metaplex-foundation/umi/-/umi-0.9.1.tgz#1eb581163f87f800bfa32fb58ce5cbe719d9d5b5" + integrity sha512-IhHoOvp4vfO/++YL+78+iVuLM53+FDwUOZDYgH6lx0jYXyQ27BeaieeR5i+q3A9dz4KxQo5Nzc5aCA1109QGCQ== + dependencies: + "@metaplex-foundation/umi-options" "^0.8.9" + "@metaplex-foundation/umi-public-keys" "^0.8.9" + "@metaplex-foundation/umi-serializers" "^0.9.0" + +"@mithraic-labs/psylend-utils@0.0.3-rc39": + version "0.0.3-rc39" + resolved "https://registry.yarnpkg.com/@mithraic-labs/psylend-utils/-/psylend-utils-0.0.3-rc39.tgz#05b0d2733f5ad8ea0868e20b3e78922808d4a1f3" + integrity sha512-7bfGwg9brPF+mxDck8m9GNWUI23YV7eeWA21WKM51aPnz8IJXR6XBTbi3TrQPSA96B77Qx1cP3uE43CsI29tcA== + dependencies: + "@project-serum/anchor" "0.25.0" + "@project-serum/serum" "^0.13.65" + "@pythnetwork/client" "2.7.3" + "@solana/web3.js" "^1.30.2" + chai "^4.3.7" + psyfi-euros-test "0.0.2-rc.5" + spl2 "npm:@solana/spl-token@^0.2.0" + +"@mrgnlabs/mrgn-common@*": + version "1.3.1" + resolved "https://registry.yarnpkg.com/@mrgnlabs/mrgn-common/-/mrgn-common-1.3.1.tgz#1651923ceda82517acd5c121a38e54dd3b48105f" + integrity sha512-AN+OEqNXGOAjgzbYWayBKCpWs8fXK8XyvOpNtrl/9C3rOAGddQgOCQEx050/5Uudxr7P/ZSTD7RaCV/+bKjLkg== + dependencies: + "@coral-xyz/anchor" "^0.28.1-beta.2" + "@solana/buffer-layout-utils" "^0.2.0" + "@solana/wallet-adapter-base" "^0.9.20" + "@solana/web3.js" "^1.87.6" + bignumber.js "^9.1.1" + bs58 "^5.0.0" + decimal.js "^10.4.3" + numeral "^2.0.6" + superstruct "^1.0.3" + +"@noble/curves@^1.0.0", "@noble/curves@^1.2.0": + version "1.3.0" + resolved "https://registry.yarnpkg.com/@noble/curves/-/curves-1.3.0.tgz#01be46da4fd195822dab821e72f71bf4aeec635e" + integrity sha512-t01iSXPuN+Eqzb4eBX0S5oubSqXbK/xXa1Ne18Hj8f9pStxztHCE2gfboSp/dZRLSqfuLpRK2nDXDK+W9puocA== + dependencies: + "@noble/hashes" "1.3.3" + +"@noble/ed25519@^1.6.1", "@noble/ed25519@^1.7.0": + version "1.7.3" + resolved "https://registry.yarnpkg.com/@noble/ed25519/-/ed25519-1.7.3.tgz#57e1677bf6885354b466c38e2b620c62f45a7123" + integrity sha512-iR8GBkDt0Q3GyaVcIu7mSsVIqnFbkbRzGLWlvhwunacoLwt4J3swfKhfaM6rN6WY+TBGoYT1GtT1mIh2/jGbRQ== "@noble/ed25519@^2.0.0": version "2.0.0" resolved "https://registry.yarnpkg.com/@noble/ed25519/-/ed25519-2.0.0.tgz#5964c8190a4b4b804985717ca566113b93379e43" integrity sha512-/extjhkwFupyopDrt80OMWKdLgP429qLZj+z6sYJz90rF2Iz0gjZh2ArMKPImUl13Kx+0EXI2hN9T/KJV0/Zng== -"@noble/hashes@1.3.2", "@noble/hashes@^1.3.1": - version "1.3.2" - resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-1.3.2.tgz#6f26dbc8fbc7205873ce3cee2f690eba0d421b39" - integrity sha512-MVC8EAQp7MvEcm30KWENFjgR+Mkmf+D189XJTkFIlwohU5hcBbn1ZkKq7KVTi2Hme3PMGF390DaL52beVrIihQ== - -"@noble/hashes@^1.1.2": - version "1.1.2" - resolved "https://registry.npmjs.org/@noble/hashes/-/hashes-1.1.2.tgz" - integrity sha512-KYRCASVTv6aeUi1tsF8/vpyR7zpfs3FUzy2Jqm+MU+LmUKhQ0y2FpfwqkCcxSg2ua4GALJd8k2R76WxwZGbQpA== +"@noble/hashes@1.3.3", "@noble/hashes@^1.1.2", "@noble/hashes@^1.3.1", "@noble/hashes@^1.3.3": + version "1.3.3" + resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-1.3.3.tgz#39908da56a4adc270147bb07968bf3b16cfe1699" + integrity sha512-V7/fPHgl+jsVPXqqeOzT8egNj2iBIVt+ECeMMG8TdcnTikP3oaBtUVqpT/gYCR68aEBJSF+XbYUxStjbFMqIIA== "@noble/secp256k1@^1.6.3": - version "1.7.0" - resolved "https://registry.npmjs.org/@noble/secp256k1/-/secp256k1-1.7.0.tgz" - integrity sha512-kbacwGSsH/CTout0ZnZWxnW1B+jH/7r/WAAKLBtrRJ/+CUH7lgmQzl3GTrQua3SGKWNSDsS6lmjnDpIJ5Dxyaw== + version "1.7.1" + resolved "https://registry.yarnpkg.com/@noble/secp256k1/-/secp256k1-1.7.1.tgz#b251c70f824ce3ca7f8dc3df08d58f005cc0507c" + integrity sha512-hOUk6AyBFmqVrv7k5WAw/LpszxVbj9gGN4JRkIX52fdFAj1UA61KXmZDvqVEm+pOyec3+fIeZB02LYa/pWOArw== "@noble/secp256k1@^2.0.0": version "2.0.0" resolved "https://registry.yarnpkg.com/@noble/secp256k1/-/secp256k1-2.0.0.tgz#c214269d45e0233ad6a8ae5104655453636e253d" integrity sha512-rUGBd95e2a45rlmFTqQJYEFA4/gdIARFfuTuTqLglz0PZ6AKyzyXsEZZq7UZn8hZsvaBgpCzKKBJizT2cJERXw== -"@openbook-dex/openbook-v2@=0.0.12": - version "0.0.12" - resolved "https://registry.yarnpkg.com/@openbook-dex/openbook-v2/-/openbook-v2-0.0.12.tgz#abb8cd2b51b573854656eb7605463a0153cf2ca1" - integrity sha512-SxYEslImHB3Qd2KH2ueXCEZC+Tu00p5R+MWPsGHeSt8M+p5kL811mAymanKEUrxY99gd8/F/oV64vJyXZAIf2g== +"@openbook-dex/openbook-v2@0.1.7": + version "0.1.7" + resolved "https://registry.yarnpkg.com/@openbook-dex/openbook-v2/-/openbook-v2-0.1.7.tgz#55ae6a1bbc76faa84023cd59b6dfc759a886539b" + integrity sha512-dyL/q01BTmI+KtxjYfaHOat+JDppCIbqGiNQYFIFMqcawHlyXFaK/y4m3lR0A82iAOvr7+27z5FPtbAMWpyHHw== dependencies: - "@coral-xyz/anchor" "^0.28.0" + "@coral-xyz/anchor" "^0.28.1-beta.2" "@solana/spl-token" "0.3.8" "@solana/web3.js" "^1.77.3" - eslint-config-prettier "^8.10.0" - fs "^0.0.1-security" + big.js "^6.2.1" + +"@project-serum/anchor@0.23.0", "@project-serum/anchor@^0.23.0": + version "0.23.0" + resolved "https://registry.yarnpkg.com/@project-serum/anchor/-/anchor-0.23.0.tgz#2b2eb6b51601b073e8db26663aa2d6c2f2841771" + integrity sha512-LV2/ifZOJVFTZ4GbEloXln3iVfCvO1YM8i7BBCrUm4tehP7irMx4nr4/IabHWOzrQcQElsxSP/lb1tBp+2ff8A== + dependencies: + "@project-serum/borsh" "^0.2.5" + "@solana/web3.js" "^1.36.0" + base64-js "^1.5.1" + bn.js "^5.1.2" + bs58 "^4.0.1" + buffer-layout "^1.2.2" + camelcase "^5.3.1" + cross-fetch "^3.1.5" + crypto-hash "^1.3.0" + eventemitter3 "^4.0.7" + find "^0.3.0" + js-sha256 "^0.9.0" + pako "^2.0.3" + snake-case "^3.0.4" + toml "^3.0.0" + +"@project-serum/anchor@0.24.2", "@project-serum/anchor@^0.24.2": + version "0.24.2" + resolved "https://registry.yarnpkg.com/@project-serum/anchor/-/anchor-0.24.2.tgz#a3c52a99605c80735f446ca9b3a4885034731004" + integrity sha512-0/718g8/DnEuwAidUwh5wLYphUYXhUbiClkuRNhvNoa+1Y8a4g2tJyxoae+emV+PG/Gikd/QUBNMkIcimiIRTA== + dependencies: + "@project-serum/borsh" "^0.2.5" + "@solana/web3.js" "^1.36.0" + base64-js "^1.5.1" + bn.js "^5.1.2" + bs58 "^4.0.1" + buffer-layout "^1.2.2" + camelcase "^5.3.1" + cross-fetch "^3.1.5" + crypto-hash "^1.3.0" + eventemitter3 "^4.0.7" + js-sha256 "^0.9.0" + pako "^2.0.3" + snake-case "^3.0.4" + toml "^3.0.0" + +"@project-serum/anchor@0.25.0", "@project-serum/anchor@^0.25.0": + version "0.25.0" + resolved "https://registry.yarnpkg.com/@project-serum/anchor/-/anchor-0.25.0.tgz#88ee4843336005cf5a64c80636ce626f0996f503" + integrity sha512-E6A5Y/ijqpfMJ5psJvbw0kVTzLZFUcOFgs6eSM2M2iWE1lVRF18T6hWZVNl6zqZsoz98jgnNHtVGJMs+ds9A7A== + dependencies: + "@project-serum/borsh" "^0.2.5" + "@solana/web3.js" "^1.36.0" + base64-js "^1.5.1" + bn.js "^5.1.2" + bs58 "^4.0.1" + buffer-layout "^1.2.2" + camelcase "^5.3.1" + cross-fetch "^3.1.5" + crypto-hash "^1.3.0" + eventemitter3 "^4.0.7" + js-sha256 "^0.9.0" + pako "^2.0.3" + snake-case "^3.0.4" + superstruct "^0.15.4" + toml "^3.0.0" + +"@project-serum/anchor@0.25.0-beta.1": + version "0.25.0-beta.1" + resolved "https://registry.yarnpkg.com/@project-serum/anchor/-/anchor-0.25.0-beta.1.tgz#7b113fb6604483d6740c8da9c6d86e9a5d5f6cf7" + integrity sha512-edesFlclgQzIluD2mC0xrGPnABBllKvbGd6MOtNZMCauUnx1Xbu073um8O6mrCeuZrz4PG9AhwAp1y5cOl3R4A== + dependencies: + "@project-serum/borsh" "^0.2.5" + "@solana/web3.js" "^1.36.0" + base64-js "^1.5.1" + bn.js "^5.1.2" + bs58 "^4.0.1" + buffer-layout "^1.2.2" + camelcase "^5.3.1" + cross-fetch "^3.1.5" + crypto-hash "^1.3.0" + eventemitter3 "^4.0.7" + js-sha256 "^0.9.0" + pako "^2.0.3" + snake-case "^3.0.4" + superstruct "^0.15.4" + toml "^3.0.0" + +"@project-serum/anchor@^0.11.1": + version "0.11.1" + resolved "https://registry.yarnpkg.com/@project-serum/anchor/-/anchor-0.11.1.tgz#155bff2c70652eafdcfd5559c81a83bb19cec9ff" + integrity sha512-oIdm4vTJkUy6GmE6JgqDAuQPKI7XM4TPJkjtoIzp69RZe0iAD9JP2XHx7lV1jLdYXeYHqDXfBt3zcq7W91K6PA== + dependencies: + "@project-serum/borsh" "^0.2.2" + "@solana/web3.js" "^1.17.0" + base64-js "^1.5.1" + bn.js "^5.1.2" + bs58 "^4.0.1" + buffer-layout "^1.2.0" + camelcase "^5.3.1" + crypto-hash "^1.3.0" + eventemitter3 "^4.0.7" + find "^0.3.0" + js-sha256 "^0.9.0" + pako "^2.0.3" + snake-case "^3.0.4" + toml "^3.0.0" + +"@project-serum/anchor@^0.21.0": + version "0.21.0" + resolved "https://registry.yarnpkg.com/@project-serum/anchor/-/anchor-0.21.0.tgz#ad5fb33744991ec1900cdb2fd22707c908b12b5f" + integrity sha512-flRuW/F+iC8mitNokx82LOXyND7Dyk6n5UUPJpQv/+NfySFrNFlzuQZaBZJ4CG5g9s8HS/uaaIz1nVkDR8V/QA== + dependencies: + "@project-serum/borsh" "^0.2.4" + "@solana/web3.js" "^1.17.0" + base64-js "^1.5.1" + bn.js "^5.1.2" + bs58 "^4.0.1" + buffer-layout "^1.2.2" + camelcase "^5.3.1" + cross-fetch "^3.1.5" + crypto-hash "^1.3.0" + eventemitter3 "^4.0.7" + find "^0.3.0" + js-sha256 "^0.9.0" + pako "^2.0.3" + snake-case "^3.0.4" + toml "^3.0.0" + +"@project-serum/anchor@^0.22.0": + version "0.22.1" + resolved "https://registry.yarnpkg.com/@project-serum/anchor/-/anchor-0.22.1.tgz#698a9620f94691de0a12bbc650a5c8380e2f0e8a" + integrity sha512-5pHeyvQhzLahIQ8aZymmDMZJAJFklN0joZdI+YIqFkK2uU/mlKr6rBLQjxysf/j1mLLiNG00tdyLfUtTAdQz7w== + dependencies: + "@project-serum/borsh" "^0.2.5" + "@solana/web3.js" "^1.17.0" + base64-js "^1.5.1" + bn.js "^5.1.2" + bs58 "^4.0.1" + buffer-layout "^1.2.2" + camelcase "^5.3.1" + cross-fetch "^3.1.5" + crypto-hash "^1.3.0" + eventemitter3 "^4.0.7" + find "^0.3.0" + js-sha256 "^0.9.0" + pako "^2.0.3" + snake-case "^3.0.4" + toml "^3.0.0" + +"@project-serum/anchor@^0.26.0": + version "0.26.0" + resolved "https://registry.yarnpkg.com/@project-serum/anchor/-/anchor-0.26.0.tgz#99e15a3923a5d10514f8185b2d3909e5699d60d5" + integrity sha512-Nq+COIjE1135T7qfnOHEn7E0q39bQTgXLFk837/rgFe6Hkew9WML7eHsS+lSYD2p3OJaTiUOHTAq1lHy36oIqQ== + dependencies: + "@coral-xyz/borsh" "^0.26.0" + "@solana/web3.js" "^1.68.0" + base64-js "^1.5.1" + bn.js "^5.1.2" + bs58 "^4.0.1" + buffer-layout "^1.2.2" + camelcase "^6.3.0" + cross-fetch "^3.1.5" + crypto-hash "^1.3.0" + eventemitter3 "^4.0.7" + js-sha256 "^0.9.0" + pako "^2.0.3" + snake-case "^3.0.4" + superstruct "^0.15.4" + toml "^3.0.0" + +"@project-serum/associated-token@^0.1.1": + version "0.1.1" + resolved "https://registry.yarnpkg.com/@project-serum/associated-token/-/associated-token-0.1.1.tgz#9acf745e84dad21e2ea26e06694704b9d698e532" + integrity sha512-Zc1wdqragbDiyBVagzIbIsMe37P7fgkArWZPIj+jJjDIoznlmYMK6ASU5mtdDZrPJ7sNABF/lzZ3+jvCCcU+oA== + +"@project-serum/borsh@^0.2.2", "@project-serum/borsh@^0.2.4", "@project-serum/borsh@^0.2.5": + version "0.2.5" + resolved "https://registry.yarnpkg.com/@project-serum/borsh/-/borsh-0.2.5.tgz#6059287aa624ecebbfc0edd35e4c28ff987d8663" + integrity sha512-UmeUkUoKdQ7rhx6Leve1SssMR/Ghv8qrEiyywyxSWg7ooV7StdpPBhciiy5eB3T0qU1BXvdRNC8TdrkxK7WC5Q== + dependencies: + bn.js "^5.1.2" + buffer-layout "^1.2.0" + +"@project-serum/common@^0.0.1-beta.3": + version "0.0.1-beta.3" + resolved "https://registry.yarnpkg.com/@project-serum/common/-/common-0.0.1-beta.3.tgz#53586eaff9d9fd7e8938b1e12080c935b8b6ad07" + integrity sha512-gnQE/eUydTtto5okCgLWj1M97R9RRPJqnhKklikYI7jP/pnNhDmngSXC/dmfzED2GXSJEIKNIlxVw1k+E2Aw3w== + dependencies: + "@project-serum/serum" "^0.13.21" + bn.js "^5.1.2" + superstruct "0.8.3" + +"@project-serum/serum@^0.13.21", "@project-serum/serum@^0.13.38", "@project-serum/serum@^0.13.61", "@project-serum/serum@^0.13.65": + version "0.13.65" + resolved "https://registry.yarnpkg.com/@project-serum/serum/-/serum-0.13.65.tgz#6d3cf07912f13985765237f053cca716fe84b0b0" + integrity sha512-BHRqsTqPSfFB5p+MgI2pjvMBAQtO8ibTK2fYY96boIFkCI3TTwXDt2gUmspeChKO2pqHr5aKevmexzAcXxrSRA== + dependencies: + "@project-serum/anchor" "^0.11.1" + "@solana/spl-token" "^0.1.6" + "@solana/web3.js" "^1.21.0" + bn.js "^5.1.2" + buffer-layout "^1.2.0" + +"@project-serum/sol-wallet-adapter@^0.2.0": + version "0.2.6" + resolved "https://registry.yarnpkg.com/@project-serum/sol-wallet-adapter/-/sol-wallet-adapter-0.2.6.tgz#b4cd25a566294354427c97c26d716112b91a0107" + integrity sha512-cpIb13aWPW8y4KzkZAPDgw+Kb+DXjCC6rZoH74MGm3I/6e/zKyGnfAuW5olb2zxonFqsYgnv7ev8MQnvSgJ3/g== + dependencies: + bs58 "^4.0.1" + eventemitter3 "^4.0.7" + +"@protobufjs/aspromise@^1.1.1", "@protobufjs/aspromise@^1.1.2": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@protobufjs/aspromise/-/aspromise-1.1.2.tgz#9b8b0cc663d669a7d8f6f5d0893a14d348f30fbf" + integrity sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ== + +"@protobufjs/base64@^1.1.2": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@protobufjs/base64/-/base64-1.1.2.tgz#4c85730e59b9a1f1f349047dbf24296034bb2735" + integrity sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg== + +"@protobufjs/codegen@^2.0.4": + version "2.0.4" + resolved "https://registry.yarnpkg.com/@protobufjs/codegen/-/codegen-2.0.4.tgz#7ef37f0d010fb028ad1ad59722e506d9262815cb" + integrity sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg== + +"@protobufjs/eventemitter@^1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@protobufjs/eventemitter/-/eventemitter-1.1.0.tgz#355cbc98bafad5978f9ed095f397621f1d066b70" + integrity sha512-j9ednRT81vYJ9OfVuXG6ERSTdEL1xVsNgqpkxMsbIabzSo3goCjDIveeGv5d03om39ML71RdmrGNjG5SReBP/Q== + +"@protobufjs/fetch@^1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@protobufjs/fetch/-/fetch-1.1.0.tgz#ba99fb598614af65700c1619ff06d454b0d84c45" + integrity sha512-lljVXpqXebpsijW71PZaCYeIcE5on1w5DlQy5WH6GLbFryLUrBD4932W/E2BSpfRJWseIL4v/KPgBFxDOIdKpQ== + dependencies: + "@protobufjs/aspromise" "^1.1.1" + "@protobufjs/inquire" "^1.1.0" + +"@protobufjs/float@^1.0.2": + version "1.0.2" + resolved "https://registry.yarnpkg.com/@protobufjs/float/-/float-1.0.2.tgz#5e9e1abdcb73fc0a7cb8b291df78c8cbd97b87d1" + integrity sha512-Ddb+kVXlXst9d+R9PfTIxh1EdNkgoRe5tOX6t01f1lYWOvJnSPDBlG241QLzcyPdoNTsblLUdujGSE4RzrTZGQ== + +"@protobufjs/inquire@^1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@protobufjs/inquire/-/inquire-1.1.0.tgz#ff200e3e7cf2429e2dcafc1140828e8cc638f089" + integrity sha512-kdSefcPdruJiFMVSbn801t4vFK7KB/5gd2fYvrxhuJYg8ILrmn9SKSX2tZdV6V+ksulWqS7aXjBcRXl3wHoD9Q== + +"@protobufjs/path@^1.1.2": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@protobufjs/path/-/path-1.1.2.tgz#6cc2b20c5c9ad6ad0dccfd21ca7673d8d7fbf68d" + integrity sha512-6JOcJ5Tm08dOHAbdR3GrvP+yUUfkjG5ePsHYczMFLq3ZmMkAD98cDgcT2iA1lJ9NVwFd4tH/iSSoe44YWkltEA== + +"@protobufjs/pool@^1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@protobufjs/pool/-/pool-1.1.0.tgz#09fd15f2d6d3abfa9b65bc366506d6ad7846ff54" + integrity sha512-0kELaGSIDBKvcgS4zkjz1PeddatrjYcmMWOlAuAPwAeccUrPHdUqo/J6LiymHHEiJT5NrF1UVwxY14f+fy4WQw== + +"@protobufjs/utf8@^1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@protobufjs/utf8/-/utf8-1.1.0.tgz#a777360b5b39a1a2e5106f8e858f2fd2d060c570" + integrity sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw== + +"@pythnetwork/client@2.5.3": + version "2.5.3" + resolved "https://registry.yarnpkg.com/@pythnetwork/client/-/client-2.5.3.tgz#86c9f92d01d8f282fdd8b5b11039da654e263988" + integrity sha512-NBLxPnA6A3tZb/DYUooD4SO63UJ70s9DzzFPGXcQNBR9itcycp7aaV+UA5oUPloD/4UHL9soo2fRuDVur0gmhA== + dependencies: + "@solana/web3.js" "^1.30.2" + assert "^2.0.0" + buffer "^6.0.1" + +"@pythnetwork/client@2.7.3": + version "2.7.3" + resolved "https://registry.yarnpkg.com/@pythnetwork/client/-/client-2.7.3.tgz#6075a16dc394d1734e76b04e907a680490a61536" + integrity sha512-+2k5JXxv/yUA6WMESSppJlg4T/AP+nZZfBnHmeG3RPCIJx+bargxFLCK4B2KgpQYdeTWb+2z8yRCNF7tHooCFQ== + dependencies: + buffer "^6.0.1" + +"@pythnetwork/client@^2.9.0": + version "2.21.0" + resolved "https://registry.yarnpkg.com/@pythnetwork/client/-/client-2.21.0.tgz#01506bcdf2b62878fbe1368656bfe1c7581c72d7" + integrity sha512-jqUuPLuVKRNUsZfwLuvK/MwnJ3LIrIxBNoz43xt0fjvVuH5QyTlz51ek76CkeKfCbomGKe41Vq7bvn8aqWVOGA== + dependencies: + "@coral-xyz/anchor" "^0.29.0" + "@coral-xyz/borsh" "^0.28.0" + buffer "^6.0.1" + +"@pythnetwork/client@~2.14.0": + version "2.14.0" + resolved "https://registry.yarnpkg.com/@pythnetwork/client/-/client-2.14.0.tgz#0c12a7e1bcc66ff198fdb64c003b8d4a24431efc" + integrity sha512-tFLGnuIBjlzDa8TrJULzJIdykketGXDJZtO+8+i4XO9l2uOKXzxt+pjt05ng5B9iY63FzJqgAkawT/O3V0NAdQ== + dependencies: + "@coral-xyz/anchor" "^0.26.0" + buffer "^6.0.1" + +"@quarryprotocol/quarry-sdk@5.0.2": + version "5.0.2" + resolved "https://registry.yarnpkg.com/@quarryprotocol/quarry-sdk/-/quarry-sdk-5.0.2.tgz#f306ef4c0446a2ae7432e6e0593bc3dcb75812ee" + integrity sha512-wczlmNfb8fk6WCZsLLR7ysSjgxl6ZdEJ7cNDhgvFpU9E1YMSN1f2l2NK9yw+VksuLxWCightFsBrHSqqIftDzQ== + dependencies: + superstruct "^0.15.4" + tiny-invariant "^1.2.0" + tslib "^2.3.1" + +"@randlabs/communication-bridge@1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@randlabs/communication-bridge/-/communication-bridge-1.0.1.tgz#d1ecfc29157afcbb0ca2d73122d67905eecb5bf3" + integrity sha512-CzS0U8IFfXNK7QaJFE4pjbxDGfPjbXBEsEaCn9FN15F+ouSAEUQkva3Gl66hrkBZOGexKFEWMwUHIDKpZ2hfVg== + +"@randlabs/myalgo-connect@^1.1.2": + version "1.4.2" + resolved "https://registry.yarnpkg.com/@randlabs/myalgo-connect/-/myalgo-connect-1.4.2.tgz#ce3ad97b3889ea21da75852187511d3f6be0fa05" + integrity sha512-K9hEyUi7G8tqOp7kWIALJLVbGCByhilcy6123WfcorxWwiE1sbQupPyIU5f3YdQK6wMjBsyTWiLW52ZBMp7sXA== + dependencies: + "@randlabs/communication-bridge" "1.0.1" + +"@saberhq/anchor-contrib@1.13.32": + version "1.13.32" + resolved "https://registry.yarnpkg.com/@saberhq/anchor-contrib/-/anchor-contrib-1.13.32.tgz#99c7da5030c92a073a6b934dd11cee3c2893bc9d" + integrity sha512-coU3mFuwJCM5hdNkMSxse+WyJskDer6OzAAXCE5bxe8Lm2bQFN1P3uohrBmV6r+eQlK+im+oozne7CyCSmR1lw== + dependencies: + "@saberhq/solana-contrib" "^1.13.32" + eventemitter3 "^4.0.7" + lodash.camelcase "^4.3.0" + lodash.mapvalues "^4.6.0" + tslib "^2.4.0" + +"@saberhq/option-utils@^1.15.0": + version "1.15.0" + resolved "https://registry.yarnpkg.com/@saberhq/option-utils/-/option-utils-1.15.0.tgz#6415e2ecacac060ef8e00a5f1b32fb113856c1ac" + integrity sha512-XVbS9H4b8PIGXJGaErkOurxV2FKFyvMwYq0pD8Y1iEPoi6HB//+HnpEKAv8tCssIQ5Nn1zQWzmQ9CmGkrwzcsw== + dependencies: + tslib "^2.6.2" + +"@saberhq/solana-contrib@^1.13.32", "@saberhq/solana-contrib@^1.15.0": + version "1.15.0" + resolved "https://registry.yarnpkg.com/@saberhq/solana-contrib/-/solana-contrib-1.15.0.tgz#5b9059fd3bd73eda640a50c9fa89fcd030befe69" + integrity sha512-OExL5qGrNMmIKINU7qFUDmY7+xIwVM2s360g99k8CRNHSnjpnqIzwDjr2CnvEFpeQPp22OdGlS63woDp0w0JsQ== + dependencies: + "@saberhq/option-utils" "^1.15.0" + "@solana/buffer-layout" "^4.0.0" + "@types/promise-retry" "^1.1.6" + "@types/retry" "^0.12.5" + promise-retry "^2.0.1" + retry "^0.13.1" + tiny-invariant "^1.3.1" + tslib "^2.6.2" + +"@saberhq/stableswap-sdk@1.13.32": + version "1.13.32" + resolved "https://registry.yarnpkg.com/@saberhq/stableswap-sdk/-/stableswap-sdk-1.13.32.tgz#eb439f7ed08102c971571821e38980c4d0841223" + integrity sha512-dE9P6EeXCkH0ay+L0a41SmqQfD/YkSRP+z3p9LCADH4gnKpoSgObEB7LKm7Xp06kq+DQiClJV/ycKd9LRJjCVA== + dependencies: + "@saberhq/solana-contrib" "^1.13.32" + "@saberhq/token-utils" "^1.13.32" + "@solana/buffer-layout" "^4.0.0" + tiny-invariant "^1.2.0" + tslib "^2.4.0" + +"@saberhq/token-utils@1.13.32": + version "1.13.32" + resolved "https://registry.yarnpkg.com/@saberhq/token-utils/-/token-utils-1.13.32.tgz#2acc98bd4d3732b826396a70b958198e0d20dee8" + integrity sha512-n5ECiw82IQJwyq9bTkcrbNWVi+lAQoQlJlTmIye8odUQATBsqOWN+clqfrFkn/UMmezO60bo34bUaM0Oir7Pew== + dependencies: + "@saberhq/solana-contrib" "^1.13.32" + "@solana/buffer-layout" "^4.0.0" + "@solana/spl-token" "^0.1.8" + "@ubeswap/token-math" "^5.1.6" + tiny-invariant "^1.2.0" + tslib "^2.4.0" + +"@saberhq/token-utils@^1.13.32": + version "1.15.0" + resolved "https://registry.yarnpkg.com/@saberhq/token-utils/-/token-utils-1.15.0.tgz#7f7a222110276ce53332183de00bae5f59eb284d" + integrity sha512-XydjtT08Qq6hdJXnfk1NtIZeyOhNyb0YXrVtM6K3OoaH88HjF36niIRv6kMMcWAGm+Hkp1111NyYFhk55PNfOA== + dependencies: + "@saberhq/solana-contrib" "^1.15.0" + "@solana/buffer-layout" "^4.0.0" + "@solana/spl-token" "^0.1.8" + "@ubeswap/token-math" "^5.2.1" + tiny-invariant "^1.3.1" + tslib "^2.6.2" + +"@sideway/address@^4.1.5": + version "4.1.5" + resolved "https://registry.yarnpkg.com/@sideway/address/-/address-4.1.5.tgz#4bc149a0076623ced99ca8208ba780d65a99b9d5" + integrity sha512-IqO/DUQHUkPeixNQ8n0JA6102hT9CmaljNTPmQ1u8MEhBo/R4Q8eKLN/vGZxuebwOroDB4cbpjheD4+/sKFK4Q== + dependencies: + "@hapi/hoek" "^9.0.0" + +"@sideway/formula@^3.0.1": + version "3.0.1" + resolved "https://registry.yarnpkg.com/@sideway/formula/-/formula-3.0.1.tgz#80fcbcbaf7ce031e0ef2dd29b1bfc7c3f583611f" + integrity sha512-/poHZJJVjx3L+zVD6g9KgHfYnb443oi7wLu/XKojDviHy6HOEOA6z1Trk5aR1dGcmPenJEgb2sK2I80LeS3MIg== + +"@sideway/pinpoint@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@sideway/pinpoint/-/pinpoint-2.0.0.tgz#cff8ffadc372ad29fd3f78277aeb29e632cc70df" + integrity sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ== "@solana/buffer-layout-utils@^0.2.0": version "0.2.0" - resolved "https://registry.npmjs.org/@solana/buffer-layout-utils/-/buffer-layout-utils-0.2.0.tgz" + resolved "https://registry.yarnpkg.com/@solana/buffer-layout-utils/-/buffer-layout-utils-0.2.0.tgz#b45a6cab3293a2eb7597cceb474f229889d875ca" integrity sha512-szG4sxgJGktbuZYDg2FfNmkMi0DYQoVjN2h7ta1W1hPrwzarcFLBq9UpX1UjNXsNpT9dn+chgprtWGioUAr4/g== dependencies: "@solana/buffer-layout" "^4.0.0" @@ -161,14 +1487,111 @@ bigint-buffer "^1.1.5" bignumber.js "^9.0.1" -"@solana/buffer-layout@^4.0.0": - version "4.0.0" - resolved "https://registry.npmjs.org/@solana/buffer-layout/-/buffer-layout-4.0.0.tgz" - integrity sha512-lR0EMP2HC3+Mxwd4YcnZb0smnaDw7Bl2IQWZiTevRH5ZZBZn6VRWn3/92E3qdU4SSImJkA6IDHawOHAnx/qUvQ== +"@solana/buffer-layout@^3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@solana/buffer-layout/-/buffer-layout-3.0.0.tgz#b9353caeb9a1589cb77a1b145bcb1a9a93114326" + integrity sha512-MVdgAKKL39tEs0l8je0hKaXLQFb7Rdfb0Xg2LjFZd8Lfdazkg6xiS98uAZrEKvaoF3i4M95ei9RydkGIDMeo3w== dependencies: buffer "~6.0.3" -"@solana/spl-token@0.3.8", "@solana/spl-token@^0.3.0", "@solana/spl-token@^0.3.6", "@solana/spl-token@^0.3.8": +"@solana/buffer-layout@^4.0.0", "@solana/buffer-layout@^4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@solana/buffer-layout/-/buffer-layout-4.0.1.tgz#b996235eaec15b1e0b5092a8ed6028df77fa6c15" + integrity sha512-E1ImOIAD1tBZFRdjeM4/pzTiTApC0AOBGwyAMS4fwIodCWArzJ3DWdoh8cKxeFM2fElkxBh2Aqts1BPC373rHA== + dependencies: + buffer "~6.0.3" + +"@solana/codecs-core@2.0.0-experimental.8618508": + version "2.0.0-experimental.8618508" + resolved "https://registry.yarnpkg.com/@solana/codecs-core/-/codecs-core-2.0.0-experimental.8618508.tgz#4f6709dd50e671267f3bea7d09209bc6471b7ad0" + integrity sha512-JCz7mKjVKtfZxkuDtwMAUgA7YvJcA2BwpZaA1NOLcted4OMC4Prwa3DUe3f3181ixPYaRyptbF0Ikq2MbDkYEA== + +"@solana/codecs-data-structures@2.0.0-experimental.8618508": + version "2.0.0-experimental.8618508" + resolved "https://registry.yarnpkg.com/@solana/codecs-data-structures/-/codecs-data-structures-2.0.0-experimental.8618508.tgz#c16a704ac0f743a2e0bf73ada42d830b3402d848" + integrity sha512-sLpjL9sqzaDdkloBPV61Rht1tgaKq98BCtIKRuyscIrmVPu3wu0Bavk2n/QekmUzaTsj7K1pVSniM0YqCdnEBw== + dependencies: + "@solana/codecs-core" "2.0.0-experimental.8618508" + "@solana/codecs-numbers" "2.0.0-experimental.8618508" + +"@solana/codecs-numbers@2.0.0-experimental.8618508": + version "2.0.0-experimental.8618508" + resolved "https://registry.yarnpkg.com/@solana/codecs-numbers/-/codecs-numbers-2.0.0-experimental.8618508.tgz#d84f9ed0521b22e19125eefc7d51e217fcaeb3e4" + integrity sha512-EXQKfzFr3CkKKNzKSZPOOOzchXsFe90TVONWsSnVkonO9z+nGKALE0/L9uBmIFGgdzhhU9QQVFvxBMclIDJo2Q== + dependencies: + "@solana/codecs-core" "2.0.0-experimental.8618508" + +"@solana/codecs-strings@2.0.0-experimental.8618508": + version "2.0.0-experimental.8618508" + resolved "https://registry.yarnpkg.com/@solana/codecs-strings/-/codecs-strings-2.0.0-experimental.8618508.tgz#72457b884d9be80b59b263bcce73892b081e9402" + integrity sha512-b2yhinr1+oe+JDmnnsV0641KQqqDG8AQ16Z/x7GVWO+AWHMpRlHWVXOq8U1yhPMA4VXxl7i+D+C6ql0VGFp0GA== + dependencies: + "@solana/codecs-core" "2.0.0-experimental.8618508" + "@solana/codecs-numbers" "2.0.0-experimental.8618508" + +"@solana/options@2.0.0-experimental.8618508": + version "2.0.0-experimental.8618508" + resolved "https://registry.yarnpkg.com/@solana/options/-/options-2.0.0-experimental.8618508.tgz#95385340e85f9e8a81b2bfba089404a61c8e9520" + integrity sha512-fy/nIRAMC3QHvnKi63KEd86Xr/zFBVxNW4nEpVEU2OT0gCEKwHY4Z55YHf7XujhyuM3PNpiBKg/YYw5QlRU4vg== + dependencies: + "@solana/codecs-core" "2.0.0-experimental.8618508" + "@solana/codecs-numbers" "2.0.0-experimental.8618508" + +"@solana/spl-memo@^0.2.3": + version "0.2.3" + resolved "https://registry.yarnpkg.com/@solana/spl-memo/-/spl-memo-0.2.3.tgz#594a28c37b40c0e22143f38f71b4f56d1f5b24fd" + integrity sha512-CNsKSsl85ebuVoeGq1LDYi5M/PMs1Pxv2/UsyTgS6b30qrYqZOXha5ouZzgGKtJtZ3C3dxfOAEw6caJPN1N63w== + dependencies: + buffer "^6.0.3" + +"@solana/spl-token-metadata@^0.1.2": + version "0.1.2" + resolved "https://registry.yarnpkg.com/@solana/spl-token-metadata/-/spl-token-metadata-0.1.2.tgz#876e13432bd2960bd3cac16b9b0af63e69e37719" + integrity sha512-hJYnAJNkDrtkE2Q41YZhCpeOGU/0JgRFXbtrtOuGGeKc3pkEUHB9DDoxZAxx+XRno13GozUleyBi0qypz4c3bw== + dependencies: + "@solana/codecs-core" "2.0.0-experimental.8618508" + "@solana/codecs-data-structures" "2.0.0-experimental.8618508" + "@solana/codecs-numbers" "2.0.0-experimental.8618508" + "@solana/codecs-strings" "2.0.0-experimental.8618508" + "@solana/options" "2.0.0-experimental.8618508" + "@solana/spl-type-length-value" "0.1.0" + +"@solana/spl-token-registry@0.2.1105": + version "0.2.1105" + resolved "https://registry.yarnpkg.com/@solana/spl-token-registry/-/spl-token-registry-0.2.1105.tgz#460fc363096aa59c5150f67736cddc1d5a810e8a" + integrity sha512-s9MIUoTAtqYsg1RaXIHXq7DhsUVS9VckvrwYuJBFn68YCZNSMUEquqaimbaHi88OVduFsApVAbKRmsGnJ9abIw== + dependencies: + cross-fetch "3.0.6" + +"@solana/spl-token-registry@^0.2.1107", "@solana/spl-token-registry@^0.2.4574": + version "0.2.4574" + resolved "https://registry.yarnpkg.com/@solana/spl-token-registry/-/spl-token-registry-0.2.4574.tgz#13f4636b7bec90d2bb43bbbb83512cd90d2ce257" + integrity sha512-JzlfZmke8Rxug20VT/VpI2XsXlsqMlcORIUivF+Yucj7tFi7A0dXG7h+2UnD0WaZJw8BrUz2ABNkUnv89vbv1A== + dependencies: + cross-fetch "3.0.6" + +"@solana/spl-token@0.1.8", "@solana/spl-token@^0.1.6", "@solana/spl-token@^0.1.8": + version "0.1.8" + resolved "https://registry.yarnpkg.com/@solana/spl-token/-/spl-token-0.1.8.tgz#f06e746341ef8d04165e21fc7f555492a2a0faa6" + integrity sha512-LZmYCKcPQDtJgecvWOgT/cnoIQPWjdH+QVyzPcFvyDUiT0DiRjZaam4aqNUyvchLFhzgunv3d9xOoyE34ofdoQ== + dependencies: + "@babel/runtime" "^7.10.5" + "@solana/web3.js" "^1.21.0" + bn.js "^5.1.0" + buffer "6.0.3" + buffer-layout "^1.2.0" + dotenv "10.0.0" + +"@solana/spl-token@0.3.7": + version "0.3.7" + resolved "https://registry.yarnpkg.com/@solana/spl-token/-/spl-token-0.3.7.tgz#6f027f9ad8e841f792c32e50920d9d2e714fc8da" + integrity sha512-bKGxWTtIw6VDdCBngjtsGlKGLSmiu/8ghSt/IOYJV24BsymRbgq7r12GToeetpxmPaZYLddKwAz7+EwprLfkfg== + dependencies: + "@solana/buffer-layout" "^4.0.0" + "@solana/buffer-layout-utils" "^0.2.0" + buffer "^6.0.3" + +"@solana/spl-token@0.3.8": version "0.3.8" resolved "https://registry.yarnpkg.com/@solana/spl-token/-/spl-token-0.3.8.tgz#8e9515ea876e40a4cc1040af865f61fc51d27edf" integrity sha512-ogwGDcunP9Lkj+9CODOWMiVJEdRtqHAtX2rWF62KxnnSWtMZtV9rDhTrZFshiyJmxDnRL/1nKE1yJHg4jjs3gg== @@ -177,10 +1600,56 @@ "@solana/buffer-layout-utils" "^0.2.0" buffer "^6.0.3" -"@solana/web3.js@^1.32.0": - version "1.62.0" - resolved "https://registry.npmjs.org/@solana/web3.js/-/web3.js-1.62.0.tgz" - integrity sha512-rHnqJR5ECooUp8egurP9Qi1SKI1Q3pbF2ZkaHbEmFsSjBsyEe+Qqxa5h+7ueylqApYyk0zawnxz83y4kdrlNIA== +"@solana/spl-token@^0.2.0", "spl2@npm:@solana/spl-token@^0.2.0": + name spl2 + version "0.2.0" + resolved "https://registry.yarnpkg.com/@solana/spl-token/-/spl-token-0.2.0.tgz#329bb6babb5de0f9c40035ddb1657f01a8347acd" + integrity sha512-RWcn31OXtdqIxmkzQfB2R+WpsJOVS6rKuvpxJFjvik2LyODd+WN58ZP3Rpjpro03fscGAkzlFuP3r42doRJgyQ== + dependencies: + "@solana/buffer-layout" "^4.0.0" + "@solana/buffer-layout-utils" "^0.2.0" + "@solana/web3.js" "^1.32.0" + start-server-and-test "^1.14.0" + +"@solana/spl-token@^0.3.6", "@solana/spl-token@^0.3.7", "@solana/spl-token@^0.3.8": + version "0.3.11" + resolved "https://registry.yarnpkg.com/@solana/spl-token/-/spl-token-0.3.11.tgz#cdc10f9472b29b39c8983c92592cadd06627fb9a" + integrity sha512-bvohO3rIMSVL24Pb+I4EYTJ6cL82eFpInEXD/I8K8upOGjpqHsKUoAempR/RnUlI1qSFNyFlWJfu6MNUgfbCQQ== + dependencies: + "@solana/buffer-layout" "^4.0.0" + "@solana/buffer-layout-utils" "^0.2.0" + "@solana/spl-token-metadata" "^0.1.2" + buffer "^6.0.3" + +"@solana/spl-type-length-value@0.1.0": + version "0.1.0" + resolved "https://registry.yarnpkg.com/@solana/spl-type-length-value/-/spl-type-length-value-0.1.0.tgz#b5930cf6c6d8f50c7ff2a70463728a4637a2f26b" + integrity sha512-JBMGB0oR4lPttOZ5XiUGyvylwLQjt1CPJa6qQ5oM+MBCndfjz2TKKkw0eATlLLcYmq1jBVsNlJ2cD6ns2GR7lA== + dependencies: + buffer "^6.0.3" + +"@solana/wallet-adapter-base@^0.9.2", "@solana/wallet-adapter-base@^0.9.20": + version "0.9.23" + resolved "https://registry.yarnpkg.com/@solana/wallet-adapter-base/-/wallet-adapter-base-0.9.23.tgz#3b17c28afd44e173f44f658bf9700fd637e12a11" + integrity sha512-apqMuYwFp1jFi55NxDfvXUX2x1T0Zh07MxhZ/nCCTGys5raSfYUh82zen2BLv8BSDj/JxZ2P/s7jrQZGrX8uAw== + dependencies: + "@solana/wallet-standard-features" "^1.1.0" + "@wallet-standard/base" "^1.0.1" + "@wallet-standard/features" "^1.0.3" + eventemitter3 "^4.0.7" + +"@solana/wallet-standard-features@^1.1.0": + version "1.2.0" + resolved "https://registry.yarnpkg.com/@solana/wallet-standard-features/-/wallet-standard-features-1.2.0.tgz#be8b3824abf5ebcfeaa7298445bf53f76a27c935" + integrity sha512-tUd9srDLkRpe1BYg7we+c4UhRQkq+XQWswsr/L1xfGmoRDF47BPSXf4zE7ZU2GRBGvxtGt7lwJVAufQyQYhxTQ== + dependencies: + "@wallet-standard/base" "^1.0.1" + "@wallet-standard/features" "^1.0.3" + +"@solana/web3.js@1.66.2": + version "1.66.2" + resolved "https://registry.yarnpkg.com/@solana/web3.js/-/web3.js-1.66.2.tgz#80b43c5868b846124fe3ebac7d3943930c3fa60c" + integrity sha512-RyaHMR2jGmaesnYP045VLeBGfR/gAW3cvZHzMFGg7bkO+WOYOYp1nEllf0/la4U4qsYGKCsO9eEevR5fhHiVHg== dependencies: "@babel/runtime" "^7.12.5" "@noble/ed25519" "^1.7.0" @@ -198,16 +1667,16 @@ rpc-websockets "^7.5.0" superstruct "^0.14.2" -"@solana/web3.js@^1.56.2", "@solana/web3.js@^1.66.2": - version "1.87.5" - resolved "https://registry.yarnpkg.com/@solana/web3.js/-/web3.js-1.87.5.tgz#74df3f19ef65e3a419bd1810f500f8e51f4ab63b" - integrity sha512-hy5RVGVw8eXq//g41mIFhk5Jx4QH1CwbkPiQn/3MmHp6VD2HBRVMMZUSGUhYZxbK7NoIjQUsiv4MOlnl3VaUag== +"@solana/web3.js@^1.17.0", "@solana/web3.js@^1.21.0", "@solana/web3.js@^1.30.2", "@solana/web3.js@^1.32.0", "@solana/web3.js@^1.33.0", "@solana/web3.js@^1.35.1", "@solana/web3.js@^1.36.0", "@solana/web3.js@^1.37.0", "@solana/web3.js@^1.42.0", "@solana/web3.js@^1.43.5", "@solana/web3.js@^1.52.0", "@solana/web3.js@^1.56.2", "@solana/web3.js@^1.63.1", "@solana/web3.js@^1.66.2", "@solana/web3.js@^1.68.0", "@solana/web3.js@^1.70.3", "@solana/web3.js@^1.71.0", "@solana/web3.js@^1.77.3", "@solana/web3.js@^1.78.3", "@solana/web3.js@^1.87.6", "@solana/web3.js@^1.90.0": + version "1.91.0" + resolved "https://registry.yarnpkg.com/@solana/web3.js/-/web3.js-1.91.0.tgz#a763b0fcca0fa005adce3d02f3a4b6d1b84eccb7" + integrity sha512-iqOL9RjNra0TM9BbQWxBRUcZUiNmCJJO+vXLp0GiELUJhbNAoE/K6OV6s+gNEsC13dslvKtfA4mmzRnZNWXtIQ== dependencies: - "@babel/runtime" "^7.23.2" + "@babel/runtime" "^7.23.4" "@noble/curves" "^1.2.0" - "@noble/hashes" "^1.3.1" - "@solana/buffer-layout" "^4.0.0" - agentkeepalive "^4.3.0" + "@noble/hashes" "^1.3.3" + "@solana/buffer-layout" "^4.0.1" + agentkeepalive "^4.5.0" bigint-buffer "^1.1.5" bn.js "^5.2.1" borsh "^0.7.0" @@ -215,14 +1684,14 @@ buffer "6.0.3" fast-stable-stringify "^1.0.0" jayson "^4.1.0" - node-fetch "^2.6.12" + node-fetch "^2.7.0" rpc-websockets "^7.5.1" superstruct "^0.14.2" -"@solana/web3.js@^1.68.0": - version "1.73.2" - resolved "https://registry.npmjs.org/@solana/web3.js/-/web3.js-1.73.2.tgz" - integrity sha512-9WACF8W4Nstj7xiDw3Oom22QmrhBh0VyZyZ7JvvG3gOxLWLlX3hvm5nPVJOGcCE/9fFavBbCUb5A6CIuvMGdoA== +"@solana/web3.js@~1.72.0": + version "1.72.0" + resolved "https://registry.yarnpkg.com/@solana/web3.js/-/web3.js-1.72.0.tgz#8d54de6887bc885c78a4a2bebe891c349fbb029e" + integrity sha512-xMoCk0y/GpiQhHbRjMcrd5NpmkwhAA0c01id7lrr6nhNdz6Uc/CywPdBeZw3Qz6BVZ/qlUoerpKPWeiXqMUjwA== dependencies: "@babel/runtime" "^7.12.5" "@noble/ed25519" "^1.7.0" @@ -241,107 +1710,249 @@ rpc-websockets "^7.5.0" superstruct "^0.14.2" -"@solana/web3.js@^1.77.3": - version "1.87.2" - resolved "https://registry.yarnpkg.com/@solana/web3.js/-/web3.js-1.87.2.tgz#d83484ab576f421342138ca1e0b98d2b9cfc6a00" - integrity sha512-TZNhS+tvJbYjm0LAvIkUy/3Aqgt2l6/3X6XsVUpvj5MGOl2Q6Ch8hYSxcUUtMbAFNN3sUXmV8NhhMLNJEvI6TA== +"@sqds/multisig@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@sqds/multisig/-/multisig-2.0.0.tgz#ac9c842c47b828dc2994813e3f7858efb317b886" + integrity sha512-tiZB1cOi/6Xzolqq/xBAtjoXnmto9tH3qGkbTL9j1SsRFVkIdIZaP2qkzh2ocgH3vYb8e1xsfA4hHjiVJVHLXA== dependencies: - "@babel/runtime" "^7.22.6" - "@noble/curves" "^1.2.0" - "@noble/hashes" "^1.3.1" - "@solana/buffer-layout" "^4.0.0" - agentkeepalive "^4.3.0" - bigint-buffer "^1.1.5" + "@metaplex-foundation/beet" "0.7.1" + "@metaplex-foundation/beet-solana" "0.4.0" + "@metaplex-foundation/cusper" "^0.0.2" + "@solana/spl-token" "^0.3.6" + "@solana/web3.js" "^1.70.3" + "@types/bn.js" "^5.1.1" + assert "^2.0.0" bn.js "^5.2.1" - borsh "^0.7.0" - bs58 "^4.0.1" buffer "6.0.3" - fast-stable-stringify "^1.0.0" - jayson "^4.1.0" - node-fetch "^2.6.12" - rpc-websockets "^7.5.1" - superstruct "^0.14.2" + invariant "2.2.4" -"@types/bn.js@^5.1.0": - version "5.1.1" - resolved "https://registry.npmjs.org/@types/bn.js/-/bn.js-5.1.1.tgz" - integrity sha512-qNrYbZqMx0uJAfKnKclPh+dTwK33KfLHYqtyODwd5HnXOjnkhc4qgn3BrK6RWyGZm5+sIFE7Q7Vz6QQtJB7w7g== +"@supercharge/promise-pool@^2.1.0": + version "2.4.0" + resolved "https://registry.yarnpkg.com/@supercharge/promise-pool/-/promise-pool-2.4.0.tgz#6050eea8c2d7f92ddd4ddc582ee328b15c034ad3" + integrity sha512-O9CMipBlq5OObdt1uKJGIzm9cdjpPWfj+a+Zw9EgWKxaMNHKC7EU7X9taj3H0EGQNLOSq2jAcOa3EzxlfHsD6w== + +"@switchboard-xyz/common@^2.3.6": + version "2.3.17" + resolved "https://registry.yarnpkg.com/@switchboard-xyz/common/-/common-2.3.17.tgz#4da631540cf189909df394cb3aa54ca32241d9ba" + integrity sha512-gg3nLz1Esb1pMt1mhhEkAYNFsvlYEpH+n3mNyguaGPIUF7AFnpzj9xU3aKPQqT2MeJWg+EmU32WFOdLwTK7X7A== + dependencies: + big.js "^6.2.1" + bn.js "^5.2.1" + bs58 "^5.0.0" + cron-validator "^1.3.1" + decimal.js "^10.4.3" + lodash "^4.17.21" + protobufjs "^7.2.4" + yaml "^2.2.1" + +"@switchboard-xyz/sbv2-lite@^0.1.6": + version "0.1.6" + resolved "https://registry.yarnpkg.com/@switchboard-xyz/sbv2-lite/-/sbv2-lite-0.1.6.tgz#dc3fbb5b3b028dbd3c688b991bcc48a670131ddb" + integrity sha512-yNNBBPpqefrf6QaUw7pKj1MYOtITaH5lqpGKdSMOqzGmtTOCBPI9P9Hz/ZfQEzbuRIUws1aNEazxYzitBo1q7Q== + dependencies: + "@project-serum/anchor" "^0.24.2" + big.js "^6.1.1" + +"@switchboard-xyz/solana.js@^2.1.10": + version "2.8.4" + resolved "https://registry.yarnpkg.com/@switchboard-xyz/solana.js/-/solana.js-2.8.4.tgz#383ee63d17040199acf36a88802a65df512ed9c3" + integrity sha512-kiFLAXKfNdAEUWZSdXuCCgs2ISKRJL8dayweKq5KIvQfxOmNEqENuaWwEaWP+7MiVUZotbF3oNG1xQNlKDcXLg== + dependencies: + "@coral-xyz/anchor" "^0.28.0" + "@coral-xyz/borsh" "^0.28.0" + "@solana/spl-token" "^0.3.8" + "@solana/web3.js" "^1.78.3" + "@switchboard-xyz/common" "^2.3.6" + cron-validator "^1.3.1" + dotenv "^16.3.1" + lodash "^4.17.21" + +"@switchboard-xyz/switchboard-api@^0.2.150": + version "0.2.201" + resolved "https://registry.yarnpkg.com/@switchboard-xyz/switchboard-api/-/switchboard-api-0.2.201.tgz#d082206d521d24dbcdeb06a77e6637a56ab883eb" + integrity sha512-hlxgeYmO6dbOEcmQzT1SqRxdiCFyVOMpyW4HFPgmPKT0+wSVkjsLc+BKkMGYPDaO0sWMLTJrj0FGhhTsrqd8Mg== + dependencies: + "@solana/web3.js" "^1.17.0" + form-data "^4.0.0" + protobufjs "^6.10.2" + rpc-websockets "^7.4.12" + typedoc "^0.22.15" + ws "^7.4.6" + +"@switchboard-xyz/switchboard-v2@^0.0.67": + version "0.0.67" + resolved "https://registry.yarnpkg.com/@switchboard-xyz/switchboard-v2/-/switchboard-v2-0.0.67.tgz#2fb1f2f18266f6963cca3ff31da1196dc3172c8d" + integrity sha512-6yFFCSrc7MGLEu2bfRt4dzcYfWyBF8JoA2N/hTZUDqAw9xaEgSSR7laTvHAjVy4m4MVwu7DLadpCivLy/QEPLA== + dependencies: + "@project-serum/anchor" "^0.22.0" + "@solana/spl-token" "^0.1.8" + "@solana/web3.js" "^1.33.0" + "@switchboard-xyz/switchboard-api" "^0.2.150" + assert "^2.0.0" + big.js "^6.1.1" + bs58 "^4.0.1" + buffer-layout "^1.2.0" + chan "^0.6.1" + crypto-js "^4.0.0" + long "^4.0.0" + protobufjs "^6.10.2" + ts-proto "^1.79.0" + typescript "^4.2.4" + +"@types/big.js@^6.1.6": + version "6.2.2" + resolved "https://registry.yarnpkg.com/@types/big.js/-/big.js-6.2.2.tgz#69422ec9ef59df1330ccfde2106d9e1159a083c3" + integrity sha512-e2cOW9YlVzFY2iScnGBBkplKsrn2CsObHQ2Hiw4V1sSyiGbgWL8IyqE3zFi1Pt5o1pdAtYkDAIsF3KKUPjdzaA== + +"@types/bn.js@^5.1.0", "@types/bn.js@^5.1.1": + version "5.1.5" + resolved "https://registry.yarnpkg.com/@types/bn.js/-/bn.js-5.1.5.tgz#2e0dacdcce2c0f16b905d20ff87aedbc6f7b4bf0" + integrity sha512-V46N0zwKRF5Q00AZ6hWtN0T8gGmDUaUzLWQvHFo5yThtVwK/VCenFY3wXVbOvNfajEpsTfQM4IN9k/d6gUVX3A== dependencies: "@types/node" "*" "@types/chai@^4.3.0": - version "4.3.3" - resolved "https://registry.npmjs.org/@types/chai/-/chai-4.3.3.tgz" - integrity sha512-hC7OMnszpxhZPduX+m+nrx+uFoLkWOMiR4oa/AZF3MuSETYTZmFfJAHqZEM8MVlvfG7BEUcgvtwoCTxBp6hm3g== + version "4.3.12" + resolved "https://registry.yarnpkg.com/@types/chai/-/chai-4.3.12.tgz#b192fe1c553b54f45d20543adc2ab88455a07d5e" + integrity sha512-zNKDHG/1yxm8Il6uCCVsm+dRdEsJlFoDu73X17y09bId6UwoYww+vFBsAcRzl8knM1sab3Dp1VRikFQwDOtDDw== "@types/connect@^3.4.33": - version "3.4.35" - resolved "https://registry.npmjs.org/@types/connect/-/connect-3.4.35.tgz" - integrity sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ== + version "3.4.38" + resolved "https://registry.yarnpkg.com/@types/connect/-/connect-3.4.38.tgz#5ba7f3bc4fbbdeaff8dded952e5ff2cc53f8d858" + integrity sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug== dependencies: "@types/node" "*" "@types/json5@^0.0.29": version "0.0.29" - resolved "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz" + resolved "https://registry.yarnpkg.com/@types/json5/-/json5-0.0.29.tgz#ee28707ae94e11d2b827bcbe5270bcea7f3e71ee" integrity sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ== +"@types/long@^4.0.1": + version "4.0.2" + resolved "https://registry.yarnpkg.com/@types/long/-/long-4.0.2.tgz#b74129719fc8d11c01868010082d483b7545591a" + integrity sha512-MqTGEo5bj5t157U6fA/BiDynNkn0YknVdh48CMPkTSpFTVmvao5UQmm7uEF6xBEo7qIMAlY/JSleYaE6VOdpaA== + "@types/mocha@^9.0.0": version "9.1.1" - resolved "https://registry.npmjs.org/@types/mocha/-/mocha-9.1.1.tgz" + resolved "https://registry.yarnpkg.com/@types/mocha/-/mocha-9.1.1.tgz#e7c4f1001eefa4b8afbd1eee27a237fee3bf29c4" integrity sha512-Z61JK7DKDtdKTWwLeElSEBcWGRLY8g95ic5FoQqI9CMx0ns/Ghep3B4DfcEimiKMvtamNVULVNKEsiwV3aQmXw== -"@types/node@*", "@types/node@^20.8.6": - version "20.8.6" - resolved "https://registry.npmjs.org/@types/node/-/node-20.8.6.tgz" - integrity sha512-eWO4K2Ji70QzKUqRy6oyJWUeB7+g2cRagT3T/nxYibYcT4y2BDL8lqolRXjTHmkZCdJfIPaY73KbJAZmcryxTQ== +"@types/node@*", "@types/node@>=13.7.0", "@types/node@^20.8.6": + version "20.11.25" + resolved "https://registry.yarnpkg.com/@types/node/-/node-20.11.25.tgz#0f50d62f274e54dd7a49f7704cc16bfbcccaf49f" + integrity sha512-TBHyJxk2b7HceLVGFcpAUjsa5zIdsPWlR6XHfyGzd0SFu+/NFgQgMAl96MSDZgQDvJAvV6BKsFOrt6zIL09JDw== dependencies: - undici-types "~5.25.1" + undici-types "~5.26.4" + +"@types/node@11.11.6": + version "11.11.6" + resolved "https://registry.yarnpkg.com/@types/node/-/node-11.11.6.tgz#df929d1bb2eee5afdda598a41930fe50b43eaa6a" + integrity sha512-Exw4yUWMBXM3X+8oqzJNRqZSwUAaS4+7NdvHqQuFi/d+synz++xmX3QIf+BFqneW8N31R8Ky+sikfZUXq07ggQ== "@types/node@^12.12.54": version "12.20.55" - resolved "https://registry.npmjs.org/@types/node/-/node-12.20.55.tgz" + resolved "https://registry.yarnpkg.com/@types/node/-/node-12.20.55.tgz#c329cbd434c42164f846b909bd6f85b5537f6240" integrity sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ== +"@types/promise-retry@^1.1.6": + version "1.1.6" + resolved "https://registry.yarnpkg.com/@types/promise-retry/-/promise-retry-1.1.6.tgz#3c48826d8a27f68f9d4900fc7448f08a1532db44" + integrity sha512-EC1+OMXV0PZb0pf+cmyxc43MEP2CDumZe4AfuxWboxxEixztIebknpJPZAX5XlodGF1OY+C1E/RAeNGzxf+bJA== + dependencies: + "@types/retry" "*" + +"@types/retry@*", "@types/retry@^0.12.5": + version "0.12.5" + resolved "https://registry.yarnpkg.com/@types/retry/-/retry-0.12.5.tgz#f090ff4bd8d2e5b940ff270ab39fd5ca1834a07e" + integrity sha512-3xSjTp3v03X/lSQLkczaN9UIEwJMoMCA1+Nb5HfbJEQWogdeQIyVtTvxPXDQjZ5zws8rFQfVfRdz03ARihPJgw== + "@types/ws@^7.4.4": version "7.4.7" - resolved "https://registry.npmjs.org/@types/ws/-/ws-7.4.7.tgz" + resolved "https://registry.yarnpkg.com/@types/ws/-/ws-7.4.7.tgz#f7c390a36f7a0679aa69de2d501319f4f8d9b702" integrity sha512-JQbbmxZTZehdc2iszGKs5oC3NFnjeay7mtAWrdt7qNtAVK0g19muApzAy4bm9byz79xa2ZnO/BOBC2R8RC5Lww== dependencies: "@types/node" "*" +"@ubeswap/token-math@^5.1.6", "@ubeswap/token-math@^5.2.1": + version "5.2.1" + resolved "https://registry.yarnpkg.com/@ubeswap/token-math/-/token-math-5.2.1.tgz#66e70ba8d65b5fdb1b7459332fbdad4ddec32a64" + integrity sha512-wkIKDKIl6rml4CVK3fvjjLVk55Z8qEYTgjxZx7MnrTwECazyhiDuekb9WAaDPXcW5QNffCu8uv4Ba8wE96CJsg== + dependencies: + "@types/big.js" "^6.1.6" + big.js "^6.2.1" + decimal.js-light "^2.5.1" + tiny-invariant "^1.2.0" + tslib "^2.4.0" + "@ungap/promise-all-settled@1.1.2": version "1.1.2" - resolved "https://registry.npmjs.org/@ungap/promise-all-settled/-/promise-all-settled-1.1.2.tgz" + resolved "https://registry.yarnpkg.com/@ungap/promise-all-settled/-/promise-all-settled-1.1.2.tgz#aa58042711d6e3275dd37dc597e5d31e8c290a44" integrity sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q== +"@wallet-standard/base@^1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@wallet-standard/base/-/base-1.0.1.tgz#860dd94d47c9e3c5c43b79d91c6afdbd7a36264e" + integrity sha512-1To3ekMfzhYxe0Yhkpri+Fedq0SYcfrOfJi3vbLjMwF2qiKPjTGLwZkf2C9ftdQmxES+hmxhBzTwF4KgcOwf8w== + +"@wallet-standard/features@^1.0.3": + version "1.0.3" + resolved "https://registry.yarnpkg.com/@wallet-standard/features/-/features-1.0.3.tgz#c992876c5e4f7a0672f8869c4146c87e0dfe48c8" + integrity sha512-m8475I6W5LTatTZuUz5JJNK42wFRgkJTB0I9tkruMwfqBF2UN2eomkYNVf9RbrsROelCRzSFmugqjKZBFaubsA== + dependencies: + "@wallet-standard/base" "^1.0.1" + JSONStream@^1.3.5: version "1.3.5" - resolved "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.5.tgz" + resolved "https://registry.yarnpkg.com/JSONStream/-/JSONStream-1.3.5.tgz#3208c1f08d3a4d99261ab64f92302bc15e111ca0" integrity sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ== dependencies: jsonparse "^1.2.0" through ">=2.2.7 <3" -agentkeepalive@^4.2.1: - version "4.2.1" - resolved "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.2.1.tgz" - integrity sha512-Zn4cw2NEqd+9fiSVWMscnjyQ1a8Yfoc5oBajLeo5w+YBHgDUcEBY2hS4YpTz6iN5f/2zQiktcuM6tS8x1p9dpA== +aes-js@3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/aes-js/-/aes-js-3.0.0.tgz#e21df10ad6c2053295bcbb8dab40b09dbea87e4d" + integrity sha512-H7wUZRn8WpTq9jocdxQ2c8x2sKo9ZVmzfRE13GiNJXfp7NcKYEdvl3vspKjXox6RIG2VtaRe4JFvxG4rqp2Zuw== + +agent-base@6: + version "6.0.2" + resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-6.0.2.tgz#49fff58577cfee3f37176feab4c22e00f86d7f77" + integrity sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ== dependencies: - debug "^4.1.0" - depd "^1.1.2" - humanize-ms "^1.2.1" + debug "4" -agentkeepalive@^4.3.0: +agentkeepalive@^4.2.1, agentkeepalive@^4.5.0: version "4.5.0" resolved "https://registry.yarnpkg.com/agentkeepalive/-/agentkeepalive-4.5.0.tgz#2673ad1389b3c418c5a20c5d7364f93ca04be923" integrity sha512-5GG/5IbQQpC9FpkRGsSvZI5QYeSCzlJHdpBQntCsuTOxhKD8lqKhrleg2Yi7yvMIf82Ycmmqln9U8V9qwEiJew== dependencies: humanize-ms "^1.2.1" +algo-msgpack-with-bigint@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/algo-msgpack-with-bigint/-/algo-msgpack-with-bigint-2.1.1.tgz#38bb717220525b3ff42232eefdcd9efb9ad405d6" + integrity sha512-F1tGh056XczEaEAqu7s+hlZUDWwOBT70Eq0lfMpBP2YguSQVyxRbprLq5rELXKQOyOaixTWYhMeMQMzP0U5FoQ== + +algosdk@^1.13.1: + version "1.24.1" + resolved "https://registry.yarnpkg.com/algosdk/-/algosdk-1.24.1.tgz#afc4102457ae0c38a32de6b84f4d713aedfc9e89" + integrity sha512-9moZxdqeJ6GdE4N6fA/GlUP4LrbLZMYcYkt141J4Ss68OfEgH9qW0wBuZ3ZOKEx/xjc5bg7mLP2Gjg7nwrkmww== + dependencies: + algo-msgpack-with-bigint "^2.1.1" + buffer "^6.0.2" + cross-fetch "^3.1.5" + hi-base32 "^0.5.1" + js-sha256 "^0.9.0" + js-sha3 "^0.8.0" + js-sha512 "^0.8.0" + json-bigint "^1.0.0" + tweetnacl "^1.0.3" + vlq "^2.0.4" + anchor-bankrun@^0.2.0: version "0.2.0" - resolved "https://registry.npmjs.org/anchor-bankrun/-/anchor-bankrun-0.2.0.tgz" + resolved "https://registry.yarnpkg.com/anchor-bankrun/-/anchor-bankrun-0.2.0.tgz#c40f18b2b666eadb6de52588073f761abb581c32" integrity sha512-k/GIiYjkFzj10iluAXPjLjDInZtNNZ2FTcCTrtqgxwm5wofLbD8T0sy13LU9IfQSirj8/6eaTawDo+IvI03KRQ== dependencies: "@coral-xyz/anchor" "^0.28.0" @@ -349,17 +1960,24 @@ anchor-bankrun@^0.2.0: ansi-colors@4.1.1: version "4.1.1" - resolved "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz" + resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.1.tgz#cbb9ae256bf750af1eab344f229aa27fe94ba348" integrity sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA== +ansi-escapes@^4.2.1: + version "4.3.2" + resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-4.3.2.tgz#6b2291d1db7d98b6521d5f1efa42d0f3a9feb65e" + integrity sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ== + dependencies: + type-fest "^0.21.3" + ansi-regex@^5.0.1: version "5.0.1" - resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== ansi-styles@^4.0.0, ansi-styles@^4.1.0: version "4.3.0" - resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== dependencies: color-convert "^2.0.1" @@ -370,13 +1988,35 @@ ansicolors@^0.3.2: integrity sha512-QXu7BPrP29VllRxH8GwB7x5iX5qWKAAMLqKQGWTeLWVlNHNOpVMJ91dsxQAIWXpjuW5wqvxu3Jd/nRjrJ+0pqg== anymatch@~3.1.2: - version "3.1.2" - resolved "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz" - integrity sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg== + version "3.1.3" + resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.3.tgz#790c58b19ba1720a84205b57c618d5ad8524973e" + integrity sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw== dependencies: normalize-path "^3.0.0" picomatch "^2.0.4" +arbundles@^0.6.21: + version "0.6.23" + resolved "https://registry.yarnpkg.com/arbundles/-/arbundles-0.6.23.tgz#c00cda953df67fa65d4297486237cc8e0c072c47" + integrity sha512-+gr93F3fivN+6dhiImT6BQNaXz4oECPn2GYjCZjS2yEoq7hM78FRvVp6kQyjEdhnuBFQr/q4oS/nkjnQlHdj9Q== + dependencies: + "@noble/ed25519" "^1.6.1" + "@randlabs/myalgo-connect" "^1.1.2" + "@solana/wallet-adapter-base" "^0.9.2" + algosdk "^1.13.1" + arweave "^1.11.4" + arweave-stream-tx "^1.1.0" + avsc "https://github.com/Irys-xyz/avsc#csp-fixes" + axios "^0.21.3" + base64url "^3.0.1" + bs58 "^4.0.1" + ethers "^5.5.1" + keccak "^3.0.2" + multistream "^4.1.0" + process "^0.11.10" + secp256k1 "^4.0.2" + tmp-promise "^3.0.2" + arconnect@^0.4.2: version "0.4.2" resolved "https://registry.yarnpkg.com/arconnect/-/arconnect-0.4.2.tgz#83de7638fb46183e82d7ec7efb5594c5f7cdc806" @@ -384,17 +2024,29 @@ arconnect@^0.4.2: dependencies: arweave "^1.10.13" +arg@^5.0.2: + version "5.0.2" + resolved "https://registry.yarnpkg.com/arg/-/arg-5.0.2.tgz#c81433cc427c92c4dcf4865142dbca6f15acd59c" + integrity sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg== + argparse@^2.0.1: version "2.0.1" - resolved "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz" + resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== arrify@^1.0.0: version "1.0.1" - resolved "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz" + resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d" integrity sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA== -arweave@^1.10.13, arweave@^1.14.4: +arweave-stream-tx@^1.1.0: + version "1.2.2" + resolved "https://registry.yarnpkg.com/arweave-stream-tx/-/arweave-stream-tx-1.2.2.tgz#2d5c66554301baacd02586a152fbb198b422112f" + integrity sha512-bNt9rj0hbAEzoUZEF2s6WJbIz8nasZlZpxIw03Xm8fzb9gRiiZlZGW3lxQLjfc9Z0VRUWDzwtqoYeEoB/JDToQ== + dependencies: + exponential-backoff "^3.1.0" + +arweave@^1.10.13, arweave@^1.11.4, arweave@^1.14.4: version "1.14.4" resolved "https://registry.yarnpkg.com/arweave/-/arweave-1.14.4.tgz#5ba22136aa0e7fd9495258a3931fb770c9d6bf21" integrity sha512-tmqU9fug8XAmFETYwgUhLaD3WKav5DaM4p1vgJpEj/Px2ORPPMikwnSySlFymmL2qgRh2ZBcZsg11+RXPPGLsA== @@ -414,19 +2066,84 @@ asn1.js@^5.4.1: minimalistic-assert "^1.0.0" safer-buffer "^2.1.0" +assert@^2.0.0, assert@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/assert/-/assert-2.1.0.tgz#6d92a238d05dc02e7427c881fb8be81c8448b2dd" + integrity sha512-eLHpSK/Y4nhMJ07gDaAzoX/XAKS8PSaojml3M0DM4JpV1LAi5JOJ/p6H/XWrl8L+DzVEvVCW1z3vWAaB9oTsQw== + dependencies: + call-bind "^1.0.2" + is-nan "^1.3.2" + object-is "^1.1.5" + object.assign "^4.1.4" + util "^0.12.5" + assertion-error@^1.1.0: version "1.1.0" - resolved "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz" + resolved "https://registry.yarnpkg.com/assertion-error/-/assertion-error-1.1.0.tgz#e60b6b0e8f301bd97e5375215bda406c85118c0b" integrity sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw== +async-retry@^1.3.3: + version "1.3.3" + resolved "https://registry.yarnpkg.com/async-retry/-/async-retry-1.3.3.tgz#0e7f36c04d8478e7a58bdbed80cedf977785f280" + integrity sha512-wfr/jstw9xNi/0teMHrRW7dsz3Lt5ARhYNZ2ewpadnhaIp5mbALhOAP+EAdsC7t4Z6wqsDVv9+W6gm1Dk9mEyw== + dependencies: + retry "0.13.1" + +asynckit@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" + integrity sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q== + +available-typed-arrays@^1.0.6: + version "1.0.7" + resolved "https://registry.yarnpkg.com/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz#a5cc375d6a03c2efc87a553f3e0b1522def14846" + integrity sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ== + dependencies: + possible-typed-array-names "^1.0.0" + +"avsc@https://github.com/Irys-xyz/avsc#csp-fixes": + version "5.4.7" + resolved "https://github.com/Irys-xyz/avsc#a730cc8018b79e114b6a3381bbb57760a24c6cef" + +axios@^0.21.3: + version "0.21.4" + resolved "https://registry.yarnpkg.com/axios/-/axios-0.21.4.tgz#c67b90dc0568e5c1cf2b0b858c43ba28e2eda575" + integrity sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg== + dependencies: + follow-redirects "^1.14.0" + +axios@^0.25.0: + version "0.25.0" + resolved "https://registry.yarnpkg.com/axios/-/axios-0.25.0.tgz#349cfbb31331a9b4453190791760a8d35b093e0a" + integrity sha512-cD8FOb0tRH3uuEe6+evtAbgJtfxr7ly3fQjYcMcuPlgkwVS9xboaVIpcDV+cYQe+yGykgwZCs1pzjntcGa6l5g== + dependencies: + follow-redirects "^1.14.7" + +axios@^0.27.2: + version "0.27.2" + resolved "https://registry.yarnpkg.com/axios/-/axios-0.27.2.tgz#207658cc8621606e586c85db4b41a750e756d972" + integrity sha512-t+yRIyySRTp/wua5xEr+z1q60QmLq8ABsS5O9Me1AsE5dfKqgnCFzwiCZZ/cGNd1lq4/7akDWMxdhVlucjmnOQ== + dependencies: + follow-redirects "^1.14.9" + form-data "^4.0.0" + +axios@^1.2.1: + version "1.6.7" + resolved "https://registry.yarnpkg.com/axios/-/axios-1.6.7.tgz#7b48c2e27c96f9c68a2f8f31e2ab19f59b06b0a7" + integrity sha512-/hDJGff6/c7u0hDkvkGxR/oy6CbCs8ziCsC7SqmhjfozqiJGc8Z11wrv9z9lYfY4K8l+H9TpjcMDX0xOZmx+RA== + dependencies: + follow-redirects "^1.15.4" + form-data "^4.0.0" + proxy-from-env "^1.1.0" + balanced-match@^1.0.0: version "1.0.2" - resolved "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz" + resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== base-x@^3.0.2: version "3.0.9" - resolved "https://registry.npmjs.org/base-x/-/base-x-3.0.9.tgz" + resolved "https://registry.yarnpkg.com/base-x/-/base-x-3.0.9.tgz#6349aaabb58526332de9f60995e548a53fe21320" integrity sha512-H7JU6iBHTal1gp56aKoaa//YUxEaAOUiydvrV/pILqIHXTtqxSkATOnDA2u+jZ/61sD+L/412+7kzXRtWukhpQ== dependencies: safe-buffer "^5.0.1" @@ -438,51 +2155,127 @@ base-x@^4.0.0: base64-js@^1.3.1, base64-js@^1.5.1: version "1.5.1" - resolved "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz" + resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== +base64url@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/base64url/-/base64url-3.0.1.tgz#6399d572e2bc3f90a9a8b22d5dbb0a32d33f788d" + integrity sha512-ir1UPr3dkwexU7FdV8qBBbNDRUhMmIekYMFZfi+C/sLNnRESKPl23nB9b2pltqfOQNnGzsDdId90AEtG5tCx4A== + +bech32@1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/bech32/-/bech32-1.1.4.tgz#e38c9f37bf179b8eb16ae3a772b40c356d4832e9" + integrity sha512-s0IrSOzLlbvX7yp4WBfPITzpAU8sqQcpsmwXDiKwrG4r491vwCO/XpejasRNl0piBMe/DvP4Tz0mIS/X1DPJBQ== + +big.js@^6.1.1, big.js@^6.2.1: + version "6.2.1" + resolved "https://registry.yarnpkg.com/big.js/-/big.js-6.2.1.tgz#7205ce763efb17c2e41f26f121c420c6a7c2744f" + integrity sha512-bCtHMwL9LeDIozFn+oNhhFoq+yQ3BNdnsLSASUxLciOb1vgvpHsIO1dsENiGMgbb4SkP5TrzWzRiLddn8ahVOQ== + bigint-buffer@^1.1.5: version "1.1.5" - resolved "https://registry.npmjs.org/bigint-buffer/-/bigint-buffer-1.1.5.tgz" + resolved "https://registry.yarnpkg.com/bigint-buffer/-/bigint-buffer-1.1.5.tgz#d038f31c8e4534c1f8d0015209bf34b4fa6dd442" integrity sha512-trfYco6AoZ+rKhKnxA0hgX0HAbVP/s808/EuDSe2JDzUnCp/xAsli35Orvk67UrTEcwuxZqYZDmfA2RXJgxVvA== dependencies: bindings "^1.3.0" -bignumber.js@^9.0.1: - version "9.1.0" - resolved "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.1.0.tgz" - integrity sha512-4LwHK4nfDOraBCtst+wOWIHbu1vhvAPJK8g8nROd4iuc3PSEjWif/qwbkh8jwCJz6yDBvtU4KPynETgrfh7y3A== - -bignumber.js@^9.0.2: +bignumber.js@^9.0.0, bignumber.js@^9.0.1, bignumber.js@^9.0.2, bignumber.js@^9.1.1: version "9.1.2" resolved "https://registry.yarnpkg.com/bignumber.js/-/bignumber.js-9.1.2.tgz#b7c4242259c008903b13707983b5f4bbd31eda0c" integrity sha512-2/mKyZH9K85bzOEfhXDBFZTGd1CTs+5IHpeFQo9luiBG7hghdC851Pj2WAhb6E3R6b9tZj/XKhbg4fum+Kepug== +binance-api-node@^0.12.0: + version "0.12.7" + resolved "https://registry.yarnpkg.com/binance-api-node/-/binance-api-node-0.12.7.tgz#bce64742d5dc5a9398df3cbd861c486b4d4df075" + integrity sha512-hEIPaZg1YwZClOznAJo5Zb1JyxsqdYjT8twG48rhOwhbNVrLJRxkeGj+PTa881wFXOtyOtyrXsDytsEcI2EUHA== + dependencies: + https-proxy-agent "^5.0.0" + isomorphic-fetch "^3.0.0" + isomorphic-ws "^4.0.1" + json-bigint "^1.0.0" + lodash.zipobject "^4.1.3" + reconnecting-websocket "^4.2.0" + ws "^7.2.0" + binary-extensions@^2.0.0: version "2.2.0" - resolved "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz" + resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d" integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA== bindings@^1.3.0: version "1.5.0" - resolved "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz" + resolved "https://registry.yarnpkg.com/bindings/-/bindings-1.5.0.tgz#10353c9e945334bc0511a6d90b38fbc7c9c504df" integrity sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ== dependencies: file-uri-to-path "1.0.0" -bn.js@^4.0.0: +bip39-light@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/bip39-light/-/bip39-light-1.0.7.tgz#06a72f251b89389a136d3f177f29b03342adc5ba" + integrity sha512-WDTmLRQUsiioBdTs9BmSEmkJza+8xfJmptsNJjxnoq3EydSa/ZBXT6rm66KoT3PJIRYMnhSKNR7S9YL1l7R40Q== + dependencies: + create-hash "^1.1.0" + pbkdf2 "^3.0.9" + +bip39@3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/bip39/-/bip39-3.0.2.tgz#2baf42ff3071fc9ddd5103de92e8f80d9257ee32" + integrity sha512-J4E1r2N0tUylTKt07ibXvhpT2c5pyAFgvuA5q1H9uDy6dEGpjV8jmymh3MTYJDLCNbIVClSB9FbND49I6N24MQ== + dependencies: + "@types/node" "11.11.6" + create-hash "^1.1.0" + pbkdf2 "^3.0.9" + randombytes "^2.0.1" + +bl@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/bl/-/bl-4.1.0.tgz#451535264182bec2fbbc83a62ab98cf11d9f7b3a" + integrity sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w== + dependencies: + buffer "^5.5.0" + inherits "^2.0.4" + readable-stream "^3.4.0" + +bluebird@3.7.2: + version "3.7.2" + resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.7.2.tgz#9f229c15be272454ffa973ace0dbee79a1b0c36f" + integrity sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg== + +bn-sqrt@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/bn-sqrt/-/bn-sqrt-1.0.0.tgz#aac3fcb56a359850d8339d3925213ac27c22b782" + integrity sha512-XdCMQ7tfEF/f7nrQgnrJ+DLQBwQzSQyPOKIXdUOTcGEvsRKBcIsdfORp7B5H8DWo8FOzZ4+a2TjSZzaqKgzicg== + dependencies: + bn.js "^5.2.0" + +bn.js@5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-5.2.0.tgz#358860674396c6997771a9d051fcc1b57d4ae002" + integrity sha512-D7iWRBvnZE8ecXiLj/9wbxH7Tk79fAh8IHaTNq1RWRixsS02W+5qS+iE9yq6RYl0asXx5tw0bLhmT5pIfbSquw== + +bn.js@5.2.1, bn.js@^5.0.0, bn.js@^5.1.0, bn.js@^5.1.2, bn.js@^5.2.0, bn.js@^5.2.1: + version "5.2.1" + resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-5.2.1.tgz#0bc527a6a0d18d0aa8d5b0538ce4a77dccfa7b70" + integrity sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ== + +bn.js@^4.0.0, bn.js@^4.11.9: version "4.12.0" resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.12.0.tgz#775b3f278efbb9718eec7361f483fb36fbbfea88" integrity sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA== -bn.js@^5.0.0, bn.js@^5.1.2, bn.js@^5.2.0, bn.js@^5.2.1: - version "5.2.1" - resolved "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz" - integrity sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ== +borsh@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/borsh/-/borsh-0.6.0.tgz#a7c9eeca6a31ca9e0607cb49f329cb659eb791e1" + integrity sha512-sl5k89ViqsThXQpYa9XDtz1sBl3l1lI313cFUY1HKr+wvMILnb+58xpkqTNrYbelh99dY7K8usxoCusQmqix9Q== + dependencies: + bn.js "^5.2.0" + bs58 "^4.0.0" + text-encoding-utf-8 "^1.0.2" borsh@^0.7.0: version "0.7.0" - resolved "https://registry.npmjs.org/borsh/-/borsh-0.7.0.tgz" + resolved "https://registry.yarnpkg.com/borsh/-/borsh-0.7.0.tgz#6e9560d719d86d90dc589bca60ffc8a6c51fec2a" integrity sha512-CLCsZGIBCFnPtkNnieW/a8wmreDmfUtjU2m9yHrzPXIlNbqVs0AQrSatSG6vdNYUqdc83tkQi2eHfF98ubzQLA== dependencies: bn.js "^5.2.0" @@ -491,27 +2284,39 @@ borsh@^0.7.0: brace-expansion@^1.1.7: version "1.1.11" - resolved "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== dependencies: balanced-match "^1.0.0" concat-map "0.0.1" +brace-expansion@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-2.0.1.tgz#1edc459e0f0c548486ecf9fc99f2221364b9a0ae" + integrity sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA== + dependencies: + balanced-match "^1.0.0" + braces@~3.0.2: version "3.0.2" - resolved "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz" + resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== dependencies: fill-range "^7.0.1" +brorand@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/brorand/-/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f" + integrity sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w== + browser-stdout@1.3.1: version "1.3.1" - resolved "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz" + resolved "https://registry.yarnpkg.com/browser-stdout/-/browser-stdout-1.3.1.tgz#baa559ee14ced73452229bad7326467c61fabd60" integrity sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw== bs58@^4.0.0, bs58@^4.0.1: version "4.0.1" - resolved "https://registry.npmjs.org/bs58/-/bs58-4.0.1.tgz" + resolved "https://registry.yarnpkg.com/bs58/-/bs58-4.0.1.tgz#be161e76c354f6f788ae4071f63f34e8c4f0a42a" integrity sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw== dependencies: base-x "^3.0.2" @@ -525,71 +2330,122 @@ bs58@^5.0.0: buffer-from@^1.0.0, buffer-from@^1.1.0: version "1.1.2" - resolved "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz" + resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5" integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ== -buffer-layout@^1.2.0, buffer-layout@^1.2.2: +buffer-layout@1.2.2, buffer-layout@^1.2.0, buffer-layout@^1.2.1, buffer-layout@^1.2.2: version "1.2.2" - resolved "https://registry.npmjs.org/buffer-layout/-/buffer-layout-1.2.2.tgz" + resolved "https://registry.yarnpkg.com/buffer-layout/-/buffer-layout-1.2.2.tgz#b9814e7c7235783085f9ca4966a0cfff112259d5" integrity sha512-kWSuLN694+KTk8SrYvCqwP2WcgQjoRCiF5b4QDvkkz8EmgD+aWAIceGFKMIAdmF/pH+vpgNV3d3kAKorcdAmWA== buffer@6.0.1: version "6.0.1" - resolved "https://registry.npmjs.org/buffer/-/buffer-6.0.1.tgz" + resolved "https://registry.yarnpkg.com/buffer/-/buffer-6.0.1.tgz#3cbea8c1463e5a0779e30b66d4c88c6ffa182ac2" integrity sha512-rVAXBwEcEoYtxnHSO5iWyhzV/O1WMtkUYWlfdLS7FjU4PnSJJHEfHXi/uHPI5EwltmOA794gN3bm3/pzuctWjQ== dependencies: base64-js "^1.3.1" ieee754 "^1.2.1" -buffer@6.0.3, buffer@^6.0.3, buffer@~6.0.3: +buffer@6.0.3, buffer@^6.0.1, buffer@^6.0.2, buffer@^6.0.3, buffer@~6.0.3: version "6.0.3" - resolved "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz" + resolved "https://registry.yarnpkg.com/buffer/-/buffer-6.0.3.tgz#2ace578459cc8fbe2a70aaa8f52ee63b6a74c6c6" integrity sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA== dependencies: base64-js "^1.3.1" ieee754 "^1.2.1" -bufferutil@^4.0.1: - version "4.0.6" - resolved "https://registry.npmjs.org/bufferutil/-/bufferutil-4.0.6.tgz" - integrity sha512-jduaYOYtnio4aIAyc6UbvPCVcgq7nYpVnucyxr6eCYg/Woad9Hf/oxxBRDnGGjPfjUm6j5O/uBWhIu4iLebFaw== +buffer@^5.5.0: + version "5.7.1" + resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.7.1.tgz#ba62e7c13133053582197160851a8f648e99eed0" + integrity sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ== + dependencies: + base64-js "^1.3.1" + ieee754 "^1.1.13" + +bufferutil@^4.0.1, bufferutil@^4.0.6: + version "4.0.8" + resolved "https://registry.yarnpkg.com/bufferutil/-/bufferutil-4.0.8.tgz#1de6a71092d65d7766c4d8a522b261a6e787e8ea" + integrity sha512-4T53u4PdgsXqKaIctwF8ifXlRTTmEPJ8iEPWFdGZvcf7sbwYo6FKFEX9eNNAnzFZ7EzJAQ3CJeOtCRA4rDp7Pw== dependencies: node-gyp-build "^4.3.0" +call-bind@^1.0.0, call-bind@^1.0.2, call-bind@^1.0.5, call-bind@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.7.tgz#06016599c40c56498c18769d2730be242b6fa3b9" + integrity sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w== + dependencies: + es-define-property "^1.0.0" + es-errors "^1.3.0" + function-bind "^1.1.2" + get-intrinsic "^1.2.4" + set-function-length "^1.2.1" + +camelcase@^5.3.1: + version "5.3.1" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" + integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== + camelcase@^6.0.0, camelcase@^6.3.0: version "6.3.0" - resolved "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.3.0.tgz#5685b95eb209ac9c0c177467778c9c84df58ba9a" integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA== -chai@^4.3.4: - version "4.3.6" - resolved "https://registry.npmjs.org/chai/-/chai-4.3.6.tgz" - integrity sha512-bbcp3YfHCUzMOvKqsztczerVgBKSsEijCySNlHHbX3VG1nskvqjz5Rfso1gGwD6w6oOV3eI60pKuMOV5MV7p3Q== +capability@^0.2.5: + version "0.2.5" + resolved "https://registry.yarnpkg.com/capability/-/capability-0.2.5.tgz#51ad87353f1936ffd77f2f21c74633a4dea88801" + integrity sha512-rsJZYVCgXd08sPqwmaIqjAd5SUTfonV0z/gDJ8D6cN8wQphky1kkAYEqQ+hmDxTw7UihvBfjUVUSY+DBEe44jg== + +case-anything@^2.1.13: + version "2.1.13" + resolved "https://registry.yarnpkg.com/case-anything/-/case-anything-2.1.13.tgz#0cdc16278cb29a7fcdeb072400da3f342ba329e9" + integrity sha512-zlOQ80VrQ2Ue+ymH5OuM/DlDq64mEm+B9UTdHULv5osUMD6HalNTblf2b1u/m6QecjsnOkBpqVZ+XPwIVsy7Ng== + +chai@^4.3.4, chai@^4.3.7: + version "4.4.1" + resolved "https://registry.yarnpkg.com/chai/-/chai-4.4.1.tgz#3603fa6eba35425b0f2ac91a009fe924106e50d1" + integrity sha512-13sOfMv2+DWduEU+/xbun3LScLoqN17nBeTLUsmDfKdoiC1fr0n9PU4guu4AhRcOVFk/sW8LyZWHuhWtQZiF+g== dependencies: assertion-error "^1.1.0" - check-error "^1.0.2" - deep-eql "^3.0.1" - get-func-name "^2.0.0" - loupe "^2.3.1" + check-error "^1.0.3" + deep-eql "^4.1.3" + get-func-name "^2.0.2" + loupe "^2.3.6" pathval "^1.1.1" - type-detect "^4.0.5" + type-detect "^4.0.8" -chalk@^4.1.0: +chalk@^4.1.0, chalk@^4.1.1: version "4.1.2" - resolved "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== dependencies: ansi-styles "^4.1.0" supports-color "^7.1.0" -check-error@^1.0.2: - version "1.0.2" - resolved "https://registry.npmjs.org/check-error/-/check-error-1.0.2.tgz" - integrity sha512-BrgHpW9NURQgzoNyjfq0Wu6VFO6D7IZEmJNdtgNqpzGG8RuNFHt2jQxWlAs4HMe119chBnv+34syEZtc6IhLtA== +chan@^0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/chan/-/chan-0.6.1.tgz#ec0ad132e5bc62c27ef10ccbfc4d8dcd8ca00640" + integrity sha512-/TdBP2UhbBmw7qnqkzo9Mk4rzvwRv4dlNPXFerqWy90T8oBspKagJNZxrDbExKHhx9uXXHjo3f9mHgs9iKO3nQ== + +chardet@^0.7.0: + version "0.7.0" + resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.7.0.tgz#90094849f0937f2eedc2425d0d28a9e5f0cbad9e" + integrity sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA== + +check-error@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/check-error/-/check-error-1.0.3.tgz#a6502e4312a7ee969f646e83bb3ddd56281bd694" + integrity sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg== + dependencies: + get-func-name "^2.0.2" + +check-more-types@2.24.0: + version "2.24.0" + resolved "https://registry.yarnpkg.com/check-more-types/-/check-more-types-2.24.0.tgz#1420ffb10fd444dcfc79b43891bbfffd32a84600" + integrity sha512-Pj779qHxV2tuapviy1bSZNEL1maXr13bPYpsvSDB68HlYcYuhlDrmGd63i0JHMCLKzc7rUSNIrpdJlhVlNwrxA== chokidar@3.5.3: version "3.5.3" - resolved "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.3.tgz#1cf37c8707b932bd1af1ae22c0432e2acd1903bd" integrity sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw== dependencies: anymatch "~3.1.2" @@ -602,210 +2458,639 @@ chokidar@3.5.3: optionalDependencies: fsevents "~2.3.2" +cipher-base@^1.0.1, cipher-base@^1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/cipher-base/-/cipher-base-1.0.4.tgz#8760e4ecc272f4c363532f926d874aae2c1397de" + integrity sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q== + dependencies: + inherits "^2.0.1" + safe-buffer "^5.0.1" + +cli-cursor@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-3.1.0.tgz#264305a7ae490d1d03bf0c9ba7c925d1753af307" + integrity sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw== + dependencies: + restore-cursor "^3.1.0" + +cli-spinners@^2.5.0: + version "2.9.2" + resolved "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-2.9.2.tgz#1773a8f4b9c4d6ac31563df53b3fc1d79462fe41" + integrity sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg== + +cli-width@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-3.0.0.tgz#a2f48437a2caa9a22436e794bf071ec9e61cedf6" + integrity sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw== + cliui@^7.0.2: version "7.0.4" - resolved "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-7.0.4.tgz#a0265ee655476fc807aea9df3df8df7783808b4f" integrity sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ== dependencies: string-width "^4.2.0" strip-ansi "^6.0.0" wrap-ansi "^7.0.0" +cliui@^8.0.1: + version "8.0.1" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-8.0.1.tgz#0c04b075db02cbfe60dc8e6cf2f5486b1a3608aa" + integrity sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ== + dependencies: + string-width "^4.2.0" + strip-ansi "^6.0.1" + wrap-ansi "^7.0.0" + +clone@^1.0.2: + version "1.0.4" + resolved "https://registry.yarnpkg.com/clone/-/clone-1.0.4.tgz#da309cc263df15994c688ca902179ca3c7cd7c7e" + integrity sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg== + color-convert@^2.0.1: version "2.0.1" - resolved "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== dependencies: color-name "~1.1.4" color-name@~1.1.4: version "1.1.4" - resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== +combined-stream@^1.0.8: + version "1.0.8" + resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" + integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== + dependencies: + delayed-stream "~1.0.0" + commander@^2.20.3: version "2.20.3" - resolved "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz" + resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== +commander@^8.2.0: + version "8.3.0" + resolved "https://registry.yarnpkg.com/commander/-/commander-8.3.0.tgz#4837ea1b2da67b9c616a67afbb0fafee567bca66" + integrity sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww== + concat-map@0.0.1: version "0.0.1" - resolved "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz" + resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== +crc@^4.1.0: + version "4.3.2" + resolved "https://registry.yarnpkg.com/crc/-/crc-4.3.2.tgz#49b7821cbf2cf61dfd079ed93863bbebd5469b9a" + integrity sha512-uGDHf4KLLh2zsHa8D8hIQ1H/HtFQhyHrc0uhHBcoKGol/Xnb+MPYfUMw7cvON6ze/GUESTudKayDcJC5HnJv1A== + +create-hash@^1.1.0, create-hash@^1.1.2: + version "1.2.0" + resolved "https://registry.yarnpkg.com/create-hash/-/create-hash-1.2.0.tgz#889078af11a63756bcfb59bd221996be3a9ef196" + integrity sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg== + dependencies: + cipher-base "^1.0.1" + inherits "^2.0.1" + md5.js "^1.3.4" + ripemd160 "^2.0.1" + sha.js "^2.4.0" + +create-hmac@1.1.7, create-hmac@^1.1.4: + version "1.1.7" + resolved "https://registry.yarnpkg.com/create-hmac/-/create-hmac-1.1.7.tgz#69170c78b3ab957147b2b8b04572e47ead2243ff" + integrity sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg== + dependencies: + cipher-base "^1.0.3" + create-hash "^1.1.0" + inherits "^2.0.1" + ripemd160 "^2.0.0" + safe-buffer "^5.0.1" + sha.js "^2.4.8" + +cron-validator@^1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/cron-validator/-/cron-validator-1.3.1.tgz#8f2fe430f92140df77f91178ae31fc1e3a48a20e" + integrity sha512-C1HsxuPCY/5opR55G5/WNzyEGDWFVG+6GLrA+fW/sCTcP6A6NTjUP2AK7B8n2PyFs90kDG2qzwm8LMheADku6A== + +cross-fetch@3.0.6: + version "3.0.6" + resolved "https://registry.yarnpkg.com/cross-fetch/-/cross-fetch-3.0.6.tgz#3a4040bc8941e653e0e9cf17f29ebcd177d3365c" + integrity sha512-KBPUbqgFjzWlVcURG+Svp9TlhA5uliYtiNx/0r8nv0pdypeQCRJ9IaSIc3q/x3q8t3F75cHuwxVql1HFGHCNJQ== + dependencies: + node-fetch "2.6.1" + cross-fetch@^3.1.5: - version "3.1.5" - resolved "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.5.tgz" - integrity sha512-lvb1SBsI0Z7GDwmuid+mU3kWVBwTVUbe7S0H52yaaAdQOXq2YktTCZdlAcNKFzE6QtRz0snpw9bNiPeOIkkQvw== + version "3.1.8" + resolved "https://registry.yarnpkg.com/cross-fetch/-/cross-fetch-3.1.8.tgz#0327eba65fd68a7d119f8fb2bf9334a1a7956f82" + integrity sha512-cvA+JwZoU0Xq+h6WkMvAUqPEYy92Obet6UdKLfW60qn99ftItKjB5T+BkyWOFWe2pUyfQ+IJHmpOTznqk1M6Kg== + dependencies: + node-fetch "^2.6.12" + +cross-spawn@^7.0.3: + version "7.0.3" + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" + integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== dependencies: - node-fetch "2.6.7" + path-key "^3.1.0" + shebang-command "^2.0.0" + which "^2.0.1" crypto-hash@^1.3.0: version "1.3.0" - resolved "https://registry.npmjs.org/crypto-hash/-/crypto-hash-1.3.0.tgz" + resolved "https://registry.yarnpkg.com/crypto-hash/-/crypto-hash-1.3.0.tgz#b402cb08f4529e9f4f09346c3e275942f845e247" integrity sha512-lyAZ0EMyjDkVvz8WOeVnuCPvKVBXcMv1l5SVqO1yC7PzTwrD/pPje/BIRbWhMoPe436U+Y2nD7f5bFx0kt+Sbg== -debug@4.3.3: - version "4.3.3" - resolved "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz" - integrity sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q== +crypto-js@^4.0.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/crypto-js/-/crypto-js-4.2.0.tgz#4d931639ecdfd12ff80e8186dba6af2c2e856631" + integrity sha512-KALDyEYgpY+Rlob/iriUtjV6d5Eq+Y191A5g4UqLAi8CyGP9N1+FdVbkc1SxKc2r4YAYqG8JzO2KGL+AizD70Q== + +csv-generate@^4.4.0: + version "4.4.0" + resolved "https://registry.yarnpkg.com/csv-generate/-/csv-generate-4.4.0.tgz#007575d825e537d9690e687f82fdf4a745e8c226" + integrity sha512-geM01acNPZ0wr4/9sKev5fCzFG/tsc/NbuFWrhLc47M1zQyUdEJH65+cxTLIVafEwhBjIYwQ7fdOL9roBqVltQ== + +csv-parse@^5.5.5: + version "5.5.5" + resolved "https://registry.yarnpkg.com/csv-parse/-/csv-parse-5.5.5.tgz#68a271a9092877b830541805e14c8a80e6a22517" + integrity sha512-erCk7tyU3yLWAhk6wvKxnyPtftuy/6Ak622gOO7BCJ05+TYffnPCJF905wmOQm+BpkX54OdAl8pveJwUdpnCXQ== + +csv-stringify@^6.4.6: + version "6.4.6" + resolved "https://registry.yarnpkg.com/csv-stringify/-/csv-stringify-6.4.6.tgz#9ccf87cb8b017c96673a9fa061768c8ba83e8b98" + integrity sha512-h2V2XZ3uOTLilF5dPIptgUfN/o2ia/80Ie0Lly18LAnw5s8Eb7kt8rfxSUy24AztJZas9f6DPZpVlzDUtFt/ag== + +csv@^6.0.5: + version "6.3.8" + resolved "https://registry.yarnpkg.com/csv/-/csv-6.3.8.tgz#c38ad67093622b9fcbce0afaeaab29d1bddeeceb" + integrity sha512-gRh3yiT9bHBA5ka2yOpyFqAVu/ZpwWzajMUR/es0ljevAE88WyHBuMUy7jzd2o5j6LYQesEO/AyhbQ9BhbDXUA== dependencies: - ms "2.1.2" + csv-generate "^4.4.0" + csv-parse "^5.5.5" + csv-stringify "^6.4.6" + stream-transform "^3.3.1" -debug@^4.1.0, debug@^4.3.3, debug@^4.3.4: +debug@4, debug@4.3.4, debug@^4.3.3, debug@^4.3.4: version "4.3.4" - resolved "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== dependencies: ms "2.1.2" +debug@4.3.3: + version "4.3.3" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.3.tgz#04266e0b70a98d4462e6e288e38259213332b664" + integrity sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q== + dependencies: + ms "2.1.2" + decamelize@^4.0.0: version "4.0.0" - resolved "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz" + resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-4.0.0.tgz#aa472d7bf660eb15f3494efd531cab7f2a709837" integrity sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ== -deep-eql@^3.0.1: - version "3.0.1" - resolved "https://registry.npmjs.org/deep-eql/-/deep-eql-3.0.1.tgz" - integrity sha512-+QeIQyN5ZuO+3Uk5DYh6/1eKO0m0YmJFGNmFHGACpf1ClL1nmlV/p4gNgbl2pJGxgXb4faqo6UE+M5ACEMyVcw== +decimal.js-light@^2.5.1: + version "2.5.1" + resolved "https://registry.yarnpkg.com/decimal.js-light/-/decimal.js-light-2.5.1.tgz#134fd32508f19e208f4fb2f8dac0d2626a867934" + integrity sha512-qIMFpTMZmny+MMIitAB6D7iVPEorVw6YQRWkvarTkT4tBeSLLiHzcwj6q0MmYSFCiVpiqPJTJEYIrpcPzVEIvg== + +decimal.js@10.3.1: + version "10.3.1" + resolved "https://registry.yarnpkg.com/decimal.js/-/decimal.js-10.3.1.tgz#d8c3a444a9c6774ba60ca6ad7261c3a94fd5e783" + integrity sha512-V0pfhfr8suzyPGOx3nmq4aHqabehUZn6Ch9kyFpV79TGDTWFmHqUqXdabR7QHqxzrYolF4+tVmJhUG4OURg5dQ== + +decimal.js@^10.3.1, decimal.js@^10.4.1, decimal.js@^10.4.3: + version "10.4.3" + resolved "https://registry.yarnpkg.com/decimal.js/-/decimal.js-10.4.3.tgz#1044092884d245d1b7f65725fa4ad4c6f781cc23" + integrity sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA== + +deep-eql@^4.1.3: + version "4.1.3" + resolved "https://registry.yarnpkg.com/deep-eql/-/deep-eql-4.1.3.tgz#7c7775513092f7df98d8df9996dd085eb668cc6d" + integrity sha512-WaEtAOpRA1MQ0eohqZjpGD8zdI0Ovsm8mmFhaDN8dvDZzyoUMcYDnf5Y6iu7HTXxf8JDS23qWa4a+hKCDyOPzw== dependencies: type-detect "^4.0.0" +defaults@^1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/defaults/-/defaults-1.0.4.tgz#b0b02062c1e2aa62ff5d9528f0f98baa90978d7a" + integrity sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A== + dependencies: + clone "^1.0.2" + +define-data-property@^1.0.1, define-data-property@^1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/define-data-property/-/define-data-property-1.1.4.tgz#894dc141bb7d3060ae4366f6a0107e68fbe48c5e" + integrity sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A== + dependencies: + es-define-property "^1.0.0" + es-errors "^1.3.0" + gopd "^1.0.1" + +define-properties@^1.1.3, define-properties@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.2.1.tgz#10781cc616eb951a80a034bafcaa7377f6af2b6c" + integrity sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg== + dependencies: + define-data-property "^1.0.1" + has-property-descriptors "^1.0.0" + object-keys "^1.1.1" + delay@^5.0.0: version "5.0.0" - resolved "https://registry.npmjs.org/delay/-/delay-5.0.0.tgz" + resolved "https://registry.yarnpkg.com/delay/-/delay-5.0.0.tgz#137045ef1b96e5071060dd5be60bf9334436bd1d" integrity sha512-ReEBKkIfe4ya47wlPYf/gu5ib6yUG0/Aez0JQZQz94kiWtRQvZIQbTiehsnwHvLSWJnQdhVeqYue7Id1dKr0qw== -depd@^1.1.2: +delayed-stream@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" + integrity sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ== + +depd@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/depd/-/depd-2.0.0.tgz#b696163cc757560d09cf22cc8fad1571b79e76df" + integrity sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw== + +depd@~1.1.2: version "1.1.2" - resolved "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz" + resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9" integrity sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ== +detect-libc@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-1.0.3.tgz#fa137c4bd698edf55cd5cd02ac559f91a4c4ba9b" + integrity sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg== + diff@5.0.0: version "5.0.0" - resolved "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz" + resolved "https://registry.yarnpkg.com/diff/-/diff-5.0.0.tgz#7ed6ad76d859d030787ec35855f5b1daf31d852b" integrity sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w== diff@^3.1.0: version "3.5.0" - resolved "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz" + resolved "https://registry.yarnpkg.com/diff/-/diff-3.5.0.tgz#800c0dd1e0a8bfbc95835c202ad220fe317e5a12" integrity sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA== dot-case@^3.0.4: version "3.0.4" - resolved "https://registry.npmjs.org/dot-case/-/dot-case-3.0.4.tgz" + resolved "https://registry.yarnpkg.com/dot-case/-/dot-case-3.0.4.tgz#9b2b670d00a431667a8a75ba29cd1b98809ce751" integrity sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w== dependencies: no-case "^3.0.4" tslib "^2.0.3" +dotenv@10.0.0, dotenv@^10.0.0: + version "10.0.0" + resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-10.0.0.tgz#3d4227b8fb95f81096cdd2b66653fb2c7085ba81" + integrity sha512-rlBi9d8jpv9Sf1klPjNfFAuWDjKLwTIJJ/VxtoTwIR6hnZxcEOQCZg2oIL3MWBYw5GpUDKOEnND7LXTbIpQ03Q== + +dotenv@^16.0.1, dotenv@^16.0.3, dotenv@^16.3.1: + version "16.4.5" + resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-16.4.5.tgz#cdd3b3b604cb327e286b4762e13502f717cb099f" + integrity sha512-ZmdL2rui+eB2YwhsWzjInR8LldtZHGDoQ1ugH85ppHKwpUHL7j7rN0Ti9NCnGiQbhaZ11FpR+7ao1dNsmduNUg== + +dprint-node@^1.0.8: + version "1.0.8" + resolved "https://registry.yarnpkg.com/dprint-node/-/dprint-node-1.0.8.tgz#a02470722d8208a7d7eb3704328afda1d6758625" + integrity sha512-iVKnUtYfGrYcW1ZAlfR/F59cUVL8QIhWoBJoSjkkdua/dkWIgjZfiLMeTjiB06X0ZLkQ0M2C1VbUj/CxkIf1zg== + dependencies: + detect-libc "^1.0.3" + +duplexer@~0.1.1: + version "0.1.2" + resolved "https://registry.yarnpkg.com/duplexer/-/duplexer-0.1.2.tgz#3abe43aef3835f8ae077d136ddce0f276b0400e6" + integrity sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg== + +elliptic@6.5.4: + version "6.5.4" + resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.5.4.tgz#da37cebd31e79a1367e941b592ed1fbebd58abbb" + integrity sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ== + dependencies: + bn.js "^4.11.9" + brorand "^1.1.0" + hash.js "^1.0.0" + hmac-drbg "^1.0.1" + inherits "^2.0.4" + minimalistic-assert "^1.0.1" + minimalistic-crypto-utils "^1.0.1" + +elliptic@^6.5.4: + version "6.5.5" + resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.5.5.tgz#c715e09f78b6923977610d4c2346d6ce22e6dded" + integrity sha512-7EjbcmUm17NQFu4Pmgmq2olYMj8nwMnpcddByChSUjArp8F5DQWcIcpriwO4ZToLNAJig0yiyjswfyGNje/ixw== + dependencies: + bn.js "^4.11.9" + brorand "^1.1.0" + hash.js "^1.0.0" + hmac-drbg "^1.0.1" + inherits "^2.0.4" + minimalistic-assert "^1.0.1" + minimalistic-crypto-utils "^1.0.1" + emoji-regex@^8.0.0: version "8.0.0" - resolved "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz" + resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== +err-code@^2.0.2: + version "2.0.3" + resolved "https://registry.yarnpkg.com/err-code/-/err-code-2.0.3.tgz#23c2f3b756ffdfc608d30e27c9a941024807e7f9" + integrity sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA== + +error-polyfill@^0.1.3: + version "0.1.3" + resolved "https://registry.yarnpkg.com/error-polyfill/-/error-polyfill-0.1.3.tgz#df848b61ad8834f7a5db69a70b9913df86721d15" + integrity sha512-XHJk60ufE+TG/ydwp4lilOog549iiQF2OAPhkk9DdiYWMrltz5yhDz/xnKuenNwP7gy3dsibssO5QpVhkrSzzg== + dependencies: + capability "^0.2.5" + o3 "^1.0.3" + u3 "^0.1.1" + +es-define-property@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/es-define-property/-/es-define-property-1.0.0.tgz#c7faefbdff8b2696cf5f46921edfb77cc4ba3845" + integrity sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ== + dependencies: + get-intrinsic "^1.2.4" + +es-errors@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/es-errors/-/es-errors-1.3.0.tgz#05f75a25dab98e4fb1dcd5e1472c0546d5057c8f" + integrity sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw== + es6-promise@^4.0.3: version "4.2.8" - resolved "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.8.tgz" + resolved "https://registry.yarnpkg.com/es6-promise/-/es6-promise-4.2.8.tgz#4eb21594c972bc40553d276e510539143db53e0a" integrity sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w== es6-promisify@^5.0.0: version "5.0.0" - resolved "https://registry.npmjs.org/es6-promisify/-/es6-promisify-5.0.0.tgz" + resolved "https://registry.yarnpkg.com/es6-promisify/-/es6-promisify-5.0.0.tgz#5109d62f3e56ea967c4b63505aef08291c8a5203" integrity sha512-C+d6UdsYDk0lMebHNR4S2NybQMMngAOnOwYBQjTOiv0MkoJMP0Myw2mgpDLBcpfCmRLxyFqYhS/CfOENq4SJhQ== dependencies: es6-promise "^4.0.3" +esbuild@~0.19.10: + version "0.19.12" + resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.19.12.tgz#dc82ee5dc79e82f5a5c3b4323a2a641827db3e04" + integrity sha512-aARqgq8roFBj054KvQr5f1sFu0D65G+miZRCuJyJ0G13Zwx7vRar5Zhn2tkQNzIXcBrNVsv/8stehpj+GAjgbg== + optionalDependencies: + "@esbuild/aix-ppc64" "0.19.12" + "@esbuild/android-arm" "0.19.12" + "@esbuild/android-arm64" "0.19.12" + "@esbuild/android-x64" "0.19.12" + "@esbuild/darwin-arm64" "0.19.12" + "@esbuild/darwin-x64" "0.19.12" + "@esbuild/freebsd-arm64" "0.19.12" + "@esbuild/freebsd-x64" "0.19.12" + "@esbuild/linux-arm" "0.19.12" + "@esbuild/linux-arm64" "0.19.12" + "@esbuild/linux-ia32" "0.19.12" + "@esbuild/linux-loong64" "0.19.12" + "@esbuild/linux-mips64el" "0.19.12" + "@esbuild/linux-ppc64" "0.19.12" + "@esbuild/linux-riscv64" "0.19.12" + "@esbuild/linux-s390x" "0.19.12" + "@esbuild/linux-x64" "0.19.12" + "@esbuild/netbsd-x64" "0.19.12" + "@esbuild/openbsd-x64" "0.19.12" + "@esbuild/sunos-x64" "0.19.12" + "@esbuild/win32-arm64" "0.19.12" + "@esbuild/win32-ia32" "0.19.12" + "@esbuild/win32-x64" "0.19.12" + escalade@^3.1.1: - version "3.1.1" - resolved "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz" - integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw== + version "3.1.2" + resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.2.tgz#54076e9ab29ea5bf3d8f1ed62acffbb88272df27" + integrity sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA== escape-string-regexp@4.0.0: version "4.0.0" - resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== -eslint-config-prettier@^8.10.0: - version "8.10.0" - resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-8.10.0.tgz#3a06a662130807e2502fc3ff8b4143d8a0658e11" - integrity sha512-SM8AMJdeQqRYT9O9zguiruQZaN7+z+E4eAP9oiLNGKMtomwaB1E9dcgUD6ZAn/eQAb52USbvezbiljfZUhbJcg== +escape-string-regexp@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" + integrity sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg== + +ethers@^5.5.1: + version "5.7.2" + resolved "https://registry.yarnpkg.com/ethers/-/ethers-5.7.2.tgz#3a7deeabbb8c030d4126b24f84e525466145872e" + integrity sha512-wswUsmWo1aOK8rR7DIKiWSw9DbLWe6x98Jrn8wcTflTVvaXhAMaB5zGAXy0GYQEQp9iO1iSHWVyARQm11zUtyg== + dependencies: + "@ethersproject/abi" "5.7.0" + "@ethersproject/abstract-provider" "5.7.0" + "@ethersproject/abstract-signer" "5.7.0" + "@ethersproject/address" "5.7.0" + "@ethersproject/base64" "5.7.0" + "@ethersproject/basex" "5.7.0" + "@ethersproject/bignumber" "5.7.0" + "@ethersproject/bytes" "5.7.0" + "@ethersproject/constants" "5.7.0" + "@ethersproject/contracts" "5.7.0" + "@ethersproject/hash" "5.7.0" + "@ethersproject/hdnode" "5.7.0" + "@ethersproject/json-wallets" "5.7.0" + "@ethersproject/keccak256" "5.7.0" + "@ethersproject/logger" "5.7.0" + "@ethersproject/networks" "5.7.1" + "@ethersproject/pbkdf2" "5.7.0" + "@ethersproject/properties" "5.7.0" + "@ethersproject/providers" "5.7.2" + "@ethersproject/random" "5.7.0" + "@ethersproject/rlp" "5.7.0" + "@ethersproject/sha2" "5.7.0" + "@ethersproject/signing-key" "5.7.0" + "@ethersproject/solidity" "5.7.0" + "@ethersproject/strings" "5.7.0" + "@ethersproject/transactions" "5.7.0" + "@ethersproject/units" "5.7.0" + "@ethersproject/wallet" "5.7.0" + "@ethersproject/web" "5.7.1" + "@ethersproject/wordlists" "5.7.0" + +event-stream@=3.3.4: + version "3.3.4" + resolved "https://registry.yarnpkg.com/event-stream/-/event-stream-3.3.4.tgz#4ab4c9a0f5a54db9338b4c34d86bfce8f4b35571" + integrity sha512-QHpkERcGsR0T7Qm3HNJSyXKEEj8AHNxkY3PK8TS2KJvQ7NiSHe3DDpwVKKtoYprL/AreyzFBeIkBIWChAqn60g== + dependencies: + duplexer "~0.1.1" + from "~0" + map-stream "~0.1.0" + pause-stream "0.0.11" + split "0.3" + stream-combiner "~0.0.4" + through "~2.3.1" eventemitter3@^4.0.7: version "4.0.7" - resolved "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz" + resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.7.tgz#2de9b68f6528d5644ef5c59526a1b4a07306169f" integrity sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw== +execa@5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/execa/-/execa-5.1.1.tgz#f80ad9cbf4298f7bd1d4c9555c21e93741c411dd" + integrity sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg== + dependencies: + cross-spawn "^7.0.3" + get-stream "^6.0.0" + human-signals "^2.1.0" + is-stream "^2.0.0" + merge-stream "^2.0.0" + npm-run-path "^4.0.1" + onetime "^5.1.2" + signal-exit "^3.0.3" + strip-final-newline "^2.0.0" + +exponential-backoff@^3.1.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/exponential-backoff/-/exponential-backoff-3.1.1.tgz#64ac7526fe341ab18a39016cd22c787d01e00bf6" + integrity sha512-dX7e/LHVJ6W3DE1MHWi9S1EYzDESENfLrYohG2G++ovZrYOkm4Knwa0mc1cn84xJOR4KEU0WSchhLbd0UklbHw== + +external-editor@^3.0.3: + version "3.1.0" + resolved "https://registry.yarnpkg.com/external-editor/-/external-editor-3.1.0.tgz#cb03f740befae03ea4d283caed2741a83f335495" + integrity sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew== + dependencies: + chardet "^0.7.0" + iconv-lite "^0.4.24" + tmp "^0.0.33" + eyes@^0.1.8: version "0.1.8" - resolved "https://registry.npmjs.org/eyes/-/eyes-0.1.8.tgz" + resolved "https://registry.yarnpkg.com/eyes/-/eyes-0.1.8.tgz#62cf120234c683785d902348a800ef3e0cc20bc0" integrity sha512-GipyPsXO1anza0AOZdy69Im7hGFCNB7Y/NGjDlZGJ3GJJLtwNSb2vrzYrTYJRrRloVx7pl+bhUaTB8yiccPvFQ== fast-stable-stringify@^1.0.0: version "1.0.0" - resolved "https://registry.npmjs.org/fast-stable-stringify/-/fast-stable-stringify-1.0.0.tgz" + resolved "https://registry.yarnpkg.com/fast-stable-stringify/-/fast-stable-stringify-1.0.0.tgz#5c5543462b22aeeefd36d05b34e51c78cb86d313" integrity sha512-wpYMUmFu5f00Sm0cj2pfivpmawLZ0NKdviQ4w9zJeR8JVtOpOxHmLaJuj0vxvGqMJQWyP/COUkF75/57OKyRag== +figures@^3.0.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/figures/-/figures-3.2.0.tgz#625c18bd293c604dc4a8ddb2febf0c88341746af" + integrity sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg== + dependencies: + escape-string-regexp "^1.0.5" + file-uri-to-path@1.0.0: version "1.0.0" - resolved "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz" + resolved "https://registry.yarnpkg.com/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz#553a7b8446ff6f684359c445f1e37a05dacc33dd" integrity sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw== fill-range@^7.0.1: version "7.0.1" - resolved "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz" + resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== dependencies: to-regex-range "^5.0.1" find-up@5.0.0: version "5.0.0" - resolved "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-5.0.0.tgz#4c92819ecb7083561e4f4a240a86be5198f536fc" integrity sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng== dependencies: locate-path "^6.0.0" path-exists "^4.0.0" +find@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/find/-/find-0.3.0.tgz#4082e8fc8d8320f1a382b5e4f521b9bc50775cb8" + integrity sha512-iSd+O4OEYV/I36Zl8MdYJO0xD82wH528SaCieTVHhclgiYNe9y+yPKSwK+A7/WsmHL1EZ+pYUJBXWTL5qofksw== + dependencies: + traverse-chain "~0.1.0" + flat@^5.0.2: version "5.0.2" - resolved "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz" + resolved "https://registry.yarnpkg.com/flat/-/flat-5.0.2.tgz#8ca6fe332069ffa9d324c327198c598259ceb241" integrity sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ== +follow-redirects@^1.14.0, follow-redirects@^1.14.7, follow-redirects@^1.14.9, follow-redirects@^1.15.4: + version "1.15.5" + resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.5.tgz#54d4d6d062c0fa7d9d17feb008461550e3ba8020" + integrity sha512-vSFWUON1B+yAw1VN4xMfxgn5fTUiaOzAJCKBwIIgT/+7CuGy9+r+5gITvP62j3RmaD5Ph65UaERdOSRGUzZtgw== + +for-each@^0.3.3: + version "0.3.3" + resolved "https://registry.yarnpkg.com/for-each/-/for-each-0.3.3.tgz#69b447e88a0a5d32c3e7084f3f1710034b21376e" + integrity sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw== + dependencies: + is-callable "^1.1.3" + +form-data@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/form-data/-/form-data-4.0.0.tgz#93919daeaf361ee529584b9b31664dc12c9fa452" + integrity sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww== + dependencies: + asynckit "^0.4.0" + combined-stream "^1.0.8" + mime-types "^2.1.12" + +from@~0: + version "0.1.7" + resolved "https://registry.yarnpkg.com/from/-/from-0.1.7.tgz#83c60afc58b9c56997007ed1a768b3ab303a44fe" + integrity sha512-twe20eF1OxVxp/ML/kq2p1uc6KvFK/+vs8WjEbeKmV2He22MKm7YF2ANIt+EOqhJ5L3K/SuuPhk0hWQDjOM23g== + fs.realpath@^1.0.0: version "1.0.0" - resolved "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz" + resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== -fs@^0.0.1-security: - version "0.0.1-security" - resolved "https://registry.yarnpkg.com/fs/-/fs-0.0.1-security.tgz#8a7bd37186b6dddf3813f23858b57ecaaf5e41d4" - integrity sha512-3XY9e1pP0CVEUCdj5BmfIZxRBTSDycnbqhIOGec9QYtmVH2fbLpj86CFWkrNOkt/Fvty4KZG5lTglL9j/gJ87w== - -fsevents@~2.3.2: +fsevents@~2.3.2, fsevents@~2.3.3: version "2.3.3" resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.3.tgz#cac6407785d03675a2a5e1a5305c697b347d90d6" integrity sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw== +function-bind@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.2.tgz#2c02d864d97f3ea6c8830c464cbd11ab6eab7a1c" + integrity sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA== + get-caller-file@^2.0.5: version "2.0.5" - resolved "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz" + resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== -get-func-name@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.0.tgz" - integrity sha512-Hm0ixYtaSZ/V7C8FJrtZIuBBI+iSgL+1Aq82zSu8VQNB4S3Gk8e7Qs3VwBDJAhmRZcFqkl3tQu36g/Foh5I5ig== +get-func-name@^2.0.1, get-func-name@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/get-func-name/-/get-func-name-2.0.2.tgz#0d7cf20cd13fda808669ffa88f4ffc7a3943fc41" + integrity sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ== + +get-intrinsic@^1.1.3, get-intrinsic@^1.2.4: + version "1.2.4" + resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.2.4.tgz#e385f5a4b5227d449c3eabbad05494ef0abbeadd" + integrity sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ== + dependencies: + es-errors "^1.3.0" + function-bind "^1.1.2" + has-proto "^1.0.1" + has-symbols "^1.0.3" + hasown "^2.0.0" + +get-stream@^6.0.0: + version "6.0.1" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-6.0.1.tgz#a262d8eef67aced57c2852ad6167526a43cbf7b7" + integrity sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg== + +get-tsconfig@^4.7.2: + version "4.7.3" + resolved "https://registry.yarnpkg.com/get-tsconfig/-/get-tsconfig-4.7.3.tgz#0498163d98f7b58484dd4906999c0c9d5f103f83" + integrity sha512-ZvkrzoUA0PQZM6fy6+/Hce561s+faD1rsNwhnO5FelNjyy7EMGJ3Rz1AQ8GYDWjhRs/7dBLOEJvhK8MiEJOAFg== + dependencies: + resolve-pkg-maps "^1.0.0" glob-parent@~5.1.2: version "5.1.2" - resolved "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== dependencies: is-glob "^4.0.1" glob@7.2.0: version "7.2.0" - resolved "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.0.tgz#d15535af7732e02e948f4c41628bd910293f6023" integrity sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q== dependencies: fs.realpath "^1.0.0" @@ -815,98 +3100,290 @@ glob@7.2.0: once "^1.3.0" path-is-absolute "^1.0.0" +glob@^8.0.3: + version "8.1.0" + resolved "https://registry.yarnpkg.com/glob/-/glob-8.1.0.tgz#d388f656593ef708ee3e34640fdfb99a9fd1c33e" + integrity sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^5.0.1" + once "^1.3.0" + +gopd@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/gopd/-/gopd-1.0.1.tgz#29ff76de69dac7489b7c0918a5788e56477c332c" + integrity sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA== + dependencies: + get-intrinsic "^1.1.3" + growl@1.10.5: version "1.10.5" - resolved "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz" + resolved "https://registry.yarnpkg.com/growl/-/growl-1.10.5.tgz#f2735dc2283674fa67478b10181059355c369e5e" integrity sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA== has-flag@^4.0.0: version "4.0.0" - resolved "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== +has-property-descriptors@^1.0.0, has-property-descriptors@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz#963ed7d071dc7bf5f084c5bfbe0d1b6222586854" + integrity sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg== + dependencies: + es-define-property "^1.0.0" + +has-proto@^1.0.1: + version "1.0.3" + resolved "https://registry.yarnpkg.com/has-proto/-/has-proto-1.0.3.tgz#b31ddfe9b0e6e9914536a6ab286426d0214f77fd" + integrity sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q== + +has-symbols@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.3.tgz#bb7b2c4349251dce87b125f7bdf874aa7c8b39f8" + integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A== + +has-tostringtag@^1.0.0, has-tostringtag@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/has-tostringtag/-/has-tostringtag-1.0.2.tgz#2cdc42d40bef2e5b4eeab7c01a73c54ce7ab5abc" + integrity sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw== + dependencies: + has-symbols "^1.0.3" + +hash-base@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/hash-base/-/hash-base-3.1.0.tgz#55c381d9e06e1d2997a883b4a3fddfe7f0d3af33" + integrity sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA== + dependencies: + inherits "^2.0.4" + readable-stream "^3.6.0" + safe-buffer "^5.2.0" + +hash.js@1.1.7, hash.js@^1.0.0, hash.js@^1.0.3: + version "1.1.7" + resolved "https://registry.yarnpkg.com/hash.js/-/hash.js-1.1.7.tgz#0babca538e8d4ee4a0f8988d68866537a003cf42" + integrity sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA== + dependencies: + inherits "^2.0.3" + minimalistic-assert "^1.0.1" + +hasown@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/hasown/-/hasown-2.0.1.tgz#26f48f039de2c0f8d3356c223fb8d50253519faa" + integrity sha512-1/th4MHjnwncwXsIW6QMzlvYL9kG5e/CpVvLRZe4XPa8TOUNbCELqmvhDmnkNsAjwaG4+I8gJJL0JBvTTLO9qA== + dependencies: + function-bind "^1.1.2" + he@1.2.0: version "1.2.0" - resolved "https://registry.npmjs.org/he/-/he-1.2.0.tgz" + resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f" integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw== +hi-base32@^0.5.1: + version "0.5.1" + resolved "https://registry.yarnpkg.com/hi-base32/-/hi-base32-0.5.1.tgz#1279f2ddae2673219ea5870c2121d2a33132857e" + integrity sha512-EmBBpvdYh/4XxsnUybsPag6VikPYnN30td+vQk+GI3qpahVEG9+gTkG0aXVxTjBqQ5T6ijbWIu77O+C5WFWsnA== + +hmac-drbg@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/hmac-drbg/-/hmac-drbg-1.0.1.tgz#d2745701025a6c775a6c545793ed502fc0c649a1" + integrity sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg== + dependencies: + hash.js "^1.0.3" + minimalistic-assert "^1.0.0" + minimalistic-crypto-utils "^1.0.1" + +http-errors@^1.7.2: + version "1.8.1" + resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.8.1.tgz#7c3f28577cbc8a207388455dbd62295ed07bd68c" + integrity sha512-Kpk9Sm7NmI+RHhnj6OIWDI1d6fIoFAtFt9RLaTMRlg/8w49juAStsrBgp0Dp4OdxdVbRIeKhtCUvoi/RuAhO4g== + dependencies: + depd "~1.1.2" + inherits "2.0.4" + setprototypeof "1.2.0" + statuses ">= 1.5.0 < 2" + toidentifier "1.0.1" + +https-proxy-agent@^5.0.0: + version "5.0.1" + resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz#c59ef224a04fe8b754f3db0063a25ea30d0005d6" + integrity sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA== + dependencies: + agent-base "6" + debug "4" + +human-signals@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-2.1.0.tgz#dc91fcba42e4d06e4abaed33b3e7a3c02f514ea0" + integrity sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw== + humanize-ms@^1.2.1: version "1.2.1" - resolved "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz" + resolved "https://registry.yarnpkg.com/humanize-ms/-/humanize-ms-1.2.1.tgz#c46e3159a293f6b896da29316d8b6fe8bb79bbed" integrity sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ== dependencies: ms "^2.0.0" -ieee754@^1.2.1: +iconv-lite@^0.4.24: + version "0.4.24" + resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" + integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== + dependencies: + safer-buffer ">= 2.1.2 < 3" + +ieee754@^1.1.13, ieee754@^1.2.1: version "1.2.1" - resolved "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz" + resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== inflight@^1.0.4: version "1.0.6" - resolved "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz" + resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" integrity sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA== dependencies: once "^1.3.0" wrappy "1" -inherits@2, inherits@^2.0.1: +inherits@2, inherits@2.0.4, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4: version "2.0.4" - resolved "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== +inquirer@^8.2.0: + version "8.2.6" + resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-8.2.6.tgz#733b74888195d8d400a67ac332011b5fae5ea562" + integrity sha512-M1WuAmb7pn9zdFRtQYk26ZBoY043Sse0wVDdk4Bppr+JOXyQYybdtvK+l9wUibhtjdjvtoiNy8tk+EgsYIUqKg== + dependencies: + ansi-escapes "^4.2.1" + chalk "^4.1.1" + cli-cursor "^3.1.0" + cli-width "^3.0.0" + external-editor "^3.0.3" + figures "^3.0.0" + lodash "^4.17.21" + mute-stream "0.0.8" + ora "^5.4.1" + run-async "^2.4.0" + rxjs "^7.5.5" + string-width "^4.1.0" + strip-ansi "^6.0.0" + through "^2.3.6" + wrap-ansi "^6.0.1" + +invariant@2.2.4, invariant@^2.2.4: + version "2.2.4" + resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.4.tgz#610f3c92c9359ce1db616e538008d23ff35158e6" + integrity sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA== + dependencies: + loose-envify "^1.0.0" + +is-arguments@^1.0.4: + version "1.1.1" + resolved "https://registry.yarnpkg.com/is-arguments/-/is-arguments-1.1.1.tgz#15b3f88fda01f2a97fec84ca761a560f123efa9b" + integrity sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA== + dependencies: + call-bind "^1.0.2" + has-tostringtag "^1.0.0" + is-binary-path@~2.1.0: version "2.1.0" - resolved "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz" + resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== dependencies: binary-extensions "^2.0.0" +is-callable@^1.1.3: + version "1.2.7" + resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.7.tgz#3bc2a85ea742d9e36205dcacdd72ca1fdc51b055" + integrity sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA== + is-extglob@^2.1.1: version "2.1.1" - resolved "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz" + resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== is-fullwidth-code-point@^3.0.0: version "3.0.0" - resolved "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== +is-generator-function@^1.0.7: + version "1.0.10" + resolved "https://registry.yarnpkg.com/is-generator-function/-/is-generator-function-1.0.10.tgz#f1558baf1ac17e0deea7c0415c438351ff2b3c72" + integrity sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A== + dependencies: + has-tostringtag "^1.0.0" + is-glob@^4.0.1, is-glob@~4.0.1: version "4.0.3" - resolved "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz" + resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== dependencies: - is-extglob "^2.1.1" + is-extglob "^2.1.1" + +is-interactive@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-interactive/-/is-interactive-1.0.0.tgz#cea6e6ae5c870a7b0a0004070b7b587e0252912e" + integrity sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w== + +is-nan@^1.3.2: + version "1.3.2" + resolved "https://registry.yarnpkg.com/is-nan/-/is-nan-1.3.2.tgz#043a54adea31748b55b6cd4e09aadafa69bd9e1d" + integrity sha512-E+zBKpQ2t6MEo1VsonYmluk9NxGrbzpeeLC2xIViuO2EjU2xsXsBPwTr3Ykv9l08UYEVEdWeRZNouaZqF6RN0w== + dependencies: + call-bind "^1.0.0" + define-properties "^1.1.3" is-number@^7.0.0: version "7.0.0" - resolved "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz" + resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== is-plain-obj@^2.1.0: version "2.1.0" - resolved "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz" + resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-2.1.0.tgz#45e42e37fccf1f40da8e5f76ee21515840c09287" integrity sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA== +is-stream@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.1.tgz#fac1e3d53b97ad5a9d0ae9cef2389f5810a5c077" + integrity sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg== + +is-typed-array@^1.1.3: + version "1.1.13" + resolved "https://registry.yarnpkg.com/is-typed-array/-/is-typed-array-1.1.13.tgz#d6c5ca56df62334959322d7d7dd1cca50debe229" + integrity sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw== + dependencies: + which-typed-array "^1.1.14" + is-unicode-supported@^0.1.0: version "0.1.0" - resolved "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz" + resolved "https://registry.yarnpkg.com/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz#3f26c76a809593b52bfa2ecb5710ed2779b522a7" integrity sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw== isexe@^2.0.0: version "2.0.0" - resolved "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz" + resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== +isomorphic-fetch@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/isomorphic-fetch/-/isomorphic-fetch-3.0.0.tgz#0267b005049046d2421207215d45d6a262b8b8b4" + integrity sha512-qvUtwJ3j6qwsF3jLxkZ72qCgjMysPzDfeV240JHiGZsANBYd+EEuu35v7dfrJ9Up0Ak07D7GGSkGhCHTqg/5wA== + dependencies: + node-fetch "^2.6.1" + whatwg-fetch "^3.4.1" + isomorphic-ws@^4.0.1: version "4.0.1" - resolved "https://registry.npmjs.org/isomorphic-ws/-/isomorphic-ws-4.0.1.tgz" + resolved "https://registry.yarnpkg.com/isomorphic-ws/-/isomorphic-ws-4.0.1.tgz#55fd4cd6c5e6491e76dc125938dd863f5cd4f2dc" integrity sha512-BhBvN2MBpWTaSHdWRb/bwdZJ1WaehQ2L1KngkCkfLUGF0mAWAT1sQUQacEmQ0jXkFw/czDXPNQSL5u2/Krsz1w== jayson@^3.4.4: version "3.7.0" - resolved "https://registry.npmjs.org/jayson/-/jayson-3.7.0.tgz" + resolved "https://registry.yarnpkg.com/jayson/-/jayson-3.7.0.tgz#b735b12d06d348639ae8230d7a1e2916cb078f25" integrity sha512-tfy39KJMrrXJ+mFcMpxwBvFDetS8LAID93+rycFglIQM4kl3uNR3W4lBLE/FFhsoUCEox5Dt2adVpDm/XtebbQ== dependencies: "@types/connect" "^3.4.33" @@ -941,108 +3418,260 @@ jayson@^4.1.0: uuid "^8.3.2" ws "^7.4.5" +joi@^17.7.0: + version "17.12.2" + resolved "https://registry.yarnpkg.com/joi/-/joi-17.12.2.tgz#283a664dabb80c7e52943c557aab82faea09f521" + integrity sha512-RonXAIzCiHLc8ss3Ibuz45u28GOsWE1UpfDXLbN/9NKbL4tCJf8TWYVKsoYuuh+sAUt7fsSNpA+r2+TBA6Wjmw== + dependencies: + "@hapi/hoek" "^9.3.0" + "@hapi/topo" "^5.1.0" + "@sideway/address" "^4.1.5" + "@sideway/formula" "^3.0.1" + "@sideway/pinpoint" "^2.0.0" + js-sha256@^0.9.0: version "0.9.0" - resolved "https://registry.npmjs.org/js-sha256/-/js-sha256-0.9.0.tgz" + resolved "https://registry.yarnpkg.com/js-sha256/-/js-sha256-0.9.0.tgz#0b89ac166583e91ef9123644bd3c5334ce9d0966" integrity sha512-sga3MHh9sgQN2+pJ9VYZ+1LPwXOxuBJBA5nrR5/ofPfuiJBE2hnjsaN8se8JznOmGLN2p49Pe5U/ttafcs/apA== +js-sha3@0.8.0, js-sha3@^0.8.0: + version "0.8.0" + resolved "https://registry.yarnpkg.com/js-sha3/-/js-sha3-0.8.0.tgz#b9b7a5da73afad7dedd0f8c463954cbde6818840" + integrity sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q== + +js-sha512@^0.8.0: + version "0.8.0" + resolved "https://registry.yarnpkg.com/js-sha512/-/js-sha512-0.8.0.tgz#dd22db8d02756faccf19f218e3ed61ec8249f7d4" + integrity sha512-PWsmefG6Jkodqt+ePTvBZCSMFgN7Clckjd0O7su3I0+BW2QWUTJNzjktHsztGLhncP2h8mcF9V9Y2Ha59pAViQ== + +"js-tokens@^3.0.0 || ^4.0.0": + version "4.0.0" + resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" + integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== + js-yaml@4.1.0: version "4.1.0" - resolved "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602" integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA== dependencies: argparse "^2.0.1" +jsbi@4.3.0, jsbi@^4.3.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/jsbi/-/jsbi-4.3.0.tgz#b54ee074fb6fcbc00619559305c8f7e912b04741" + integrity sha512-SnZNcinB4RIcnEyZqFPdGPVgrg2AcnykiBy0sHVJQKHYeaLUvi3Exj+iaPpLnFVkDPZIV4U0yvgC9/R4uEAZ9g== + +json-bigint@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/json-bigint/-/json-bigint-1.0.0.tgz#ae547823ac0cad8398667f8cd9ef4730f5b01ff1" + integrity sha512-SiPv/8VpZuWbvLSMtTDU8hEfrZWg/mH/nV/b4o0CYbSxu1UIQPLdwKOCIyLQX+VIPO5vrLX3i8qtqFyhdPSUSQ== + dependencies: + bignumber.js "^9.0.0" + json-stringify-safe@^5.0.1: version "5.0.1" - resolved "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz" + resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" integrity sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA== -json5@^1.0.1: - version "1.0.1" - resolved "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz" - integrity sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow== +json5@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/json5/-/json5-1.0.2.tgz#63d98d60f21b313b77c4d6da18bfa69d80e1d593" + integrity sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA== dependencies: minimist "^1.2.0" +jsonc-parser@^3.0.0: + version "3.2.1" + resolved "https://registry.yarnpkg.com/jsonc-parser/-/jsonc-parser-3.2.1.tgz#031904571ccf929d7670ee8c547545081cb37f1a" + integrity sha512-AilxAyFOAcK5wA1+LeaySVBrHsGQvUFCDWXKpZjzaL0PqW+xfBOttn8GNtWKFWqneyMZj41MWF9Kl6iPWLwgOA== + jsonparse@^1.2.0: version "1.3.1" - resolved "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz" + resolved "https://registry.yarnpkg.com/jsonparse/-/jsonparse-1.3.1.tgz#3f4dae4a91fac315f71062f8521cc239f1366280" integrity sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg== +keccak@^3.0.2: + version "3.0.4" + resolved "https://registry.yarnpkg.com/keccak/-/keccak-3.0.4.tgz#edc09b89e633c0549da444432ecf062ffadee86d" + integrity sha512-3vKuW0jV8J3XNTzvfyicFR5qvxrSAGl7KIhvgOu5cmWwM7tZRj3fMbj/pfIf4be7aznbc+prBWGjywox/g2Y6Q== + dependencies: + node-addon-api "^2.0.0" + node-gyp-build "^4.2.0" + readable-stream "^3.6.0" + +kind-of@^6.0.2: + version "6.0.3" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd" + integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw== + +lazy-ass@1.6.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/lazy-ass/-/lazy-ass-1.6.0.tgz#7999655e8646c17f089fdd187d150d3324d54513" + integrity sha512-cc8oEVoctTvsFZ/Oje/kGnHbpWHYBe8IAJe4C0QNc3t8uM/0Y8+erSz/7Y1ALuXTEZTMvxXwO6YbX1ey3ujiZw== + locate-path@^6.0.0: version "6.0.0" - resolved "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-6.0.0.tgz#55321eb309febbc59c4801d931a72452a681d286" integrity sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw== dependencies: p-locate "^5.0.0" -lodash@^4.17.20: +lodash.camelcase@^4.3.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz#b28aa6288a2b9fc651035c7711f65ab6190331a6" + integrity sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA== + +lodash.mapvalues@^4.6.0: + version "4.6.0" + resolved "https://registry.yarnpkg.com/lodash.mapvalues/-/lodash.mapvalues-4.6.0.tgz#1bafa5005de9dd6f4f26668c30ca37230cc9689c" + integrity sha512-JPFqXFeZQ7BfS00H58kClY7SPVeHertPE0lNuCyZ26/XlN8TvakYD7b9bGyNmXbT/D3BbtPAAmq90gPWqLkxlQ== + +lodash.zipobject@^4.1.3: + version "4.1.3" + resolved "https://registry.yarnpkg.com/lodash.zipobject/-/lodash.zipobject-4.1.3.tgz#b399f5aba8ff62a746f6979bf20b214f964dbef8" + integrity sha512-A9SzX4hMKWS25MyalwcOnNoplyHbkNVsjidhTp8ru0Sj23wY9GWBKS8gAIGDSAqeWjIjvE4KBEl24XXAs+v4wQ== + +lodash@^4.17.20, lodash@^4.17.21: version "4.17.21" - resolved "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== -log-symbols@4.1.0: +log-symbols@4.1.0, log-symbols@^4.1.0: version "4.1.0" - resolved "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz" + resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-4.1.0.tgz#3fbdbb95b4683ac9fc785111e792e558d4abd503" integrity sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg== dependencies: chalk "^4.1.0" is-unicode-supported "^0.1.0" -loupe@^2.3.1: - version "2.3.4" - resolved "https://registry.npmjs.org/loupe/-/loupe-2.3.4.tgz" - integrity sha512-OvKfgCC2Ndby6aSTREl5aCCPTNIzlDfQZvZxNUrBrihDhL3xcrYegTblhmEiCrg2kKQz4XsFIaemE5BF4ybSaQ== +long@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/long/-/long-4.0.0.tgz#9a7b71cfb7d361a194ea555241c92f7468d5bf28" + integrity sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA== + +long@^5.0.0, long@^5.2.3: + version "5.2.3" + resolved "https://registry.yarnpkg.com/long/-/long-5.2.3.tgz#a3ba97f3877cf1d778eccbcb048525ebb77499e1" + integrity sha512-lcHwpNoggQTObv5apGNCTdJrO69eHOZMi4BNC+rTLER8iHAqGrUVeLh/irVIM7zTw2bOXA8T6uNPeujwOLg/2Q== + +loose-envify@^1.0.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf" + integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q== + dependencies: + js-tokens "^3.0.0 || ^4.0.0" + +loupe@^2.3.6: + version "2.3.7" + resolved "https://registry.yarnpkg.com/loupe/-/loupe-2.3.7.tgz#6e69b7d4db7d3ab436328013d37d1c8c3540c697" + integrity sha512-zSMINGVYkdpYSOBmLi0D1Uo7JU9nVdQKrHxC8eYlV+9YKK9WePqAlL7lSlorG/U2Fw1w0hTBmaa/jrQ3UbPHtA== dependencies: - get-func-name "^2.0.0" + get-func-name "^2.0.1" lower-case@^2.0.2: version "2.0.2" - resolved "https://registry.npmjs.org/lower-case/-/lower-case-2.0.2.tgz" + resolved "https://registry.yarnpkg.com/lower-case/-/lower-case-2.0.2.tgz#6fa237c63dbdc4a82ca0fd882e4722dc5e634e28" integrity sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg== dependencies: tslib "^2.0.3" +lunr@^2.3.9: + version "2.3.9" + resolved "https://registry.yarnpkg.com/lunr/-/lunr-2.3.9.tgz#18b123142832337dd6e964df1a5a7707b25d35e1" + integrity sha512-zTU3DaZaF3Rt9rhN3uBMGQD3dD2/vFQqnvZCDv4dl5iOzq2IZQqTxu90r4E5J+nP70J3ilqVCrbho2eWaeW8Ow== + make-error@^1.1.1: version "1.3.6" - resolved "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz" + resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.6.tgz#2eb2e37ea9b67c4891f684a1394799af484cf7a2" integrity sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw== -minimalistic-assert@^1.0.0: +map-stream@~0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/map-stream/-/map-stream-0.1.0.tgz#e56aa94c4c8055a16404a0674b78f215f7c8e194" + integrity sha512-CkYQrPYZfWnu/DAmVCpTSX/xHpKZ80eKh2lAkyA6AJTef6bW+6JpbQZN5rofum7da+SyN1bi5ctTm+lTfcCW3g== + +marked@^4.0.16: + version "4.3.0" + resolved "https://registry.yarnpkg.com/marked/-/marked-4.3.0.tgz#796362821b019f734054582038b116481b456cf3" + integrity sha512-PRsaiG84bK+AMvxziE/lCFss8juXjNaWzVbN5tXAm4XjeaS9NAHhop+PjQxz2A9h8Q4M/xGmzP8vqNwy6JeK0A== + +md5.js@^1.3.4: + version "1.3.5" + resolved "https://registry.yarnpkg.com/md5.js/-/md5.js-1.3.5.tgz#b5d07b8e3216e3e27cd728d72f70d1e6a342005f" + integrity sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg== + dependencies: + hash-base "^3.0.0" + inherits "^2.0.1" + safe-buffer "^5.1.2" + +merge-stream@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60" + integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== + +mime-db@1.52.0: + version "1.52.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70" + integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== + +mime-types@^2.1.12, mime-types@^2.1.34: + version "2.1.35" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a" + integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== + dependencies: + mime-db "1.52.0" + +mimic-fn@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" + integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== + +minimalistic-assert@^1.0.0, minimalistic-assert@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz#2e194de044626d4a10e7f7fbc00ce73e83e4d5c7" integrity sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A== +minimalistic-crypto-utils@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz#f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a" + integrity sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg== + minimatch@4.2.1: version "4.2.1" - resolved "https://registry.npmjs.org/minimatch/-/minimatch-4.2.1.tgz" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-4.2.1.tgz#40d9d511a46bdc4e563c22c3080cde9c0d8299b4" integrity sha512-9Uq1ChtSZO+Mxa/CL1eGizn2vRn3MlLgzhT0Iz8zaY8NdvxvB0d5QdPFmCKf7JKA9Lerx5vRrnwO03jsSfGG9g== dependencies: brace-expansion "^1.1.7" minimatch@^3.0.4: version "3.1.2" - resolved "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== dependencies: brace-expansion "^1.1.7" -minimist@^1.2.0, minimist@^1.2.6: - version "1.2.6" - resolved "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz" - integrity sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q== +minimatch@^5.0.1, minimatch@^5.1.0: + version "5.1.6" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-5.1.6.tgz#1cfcb8cf5522ea69952cd2af95ae09477f122a96" + integrity sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g== + dependencies: + brace-expansion "^2.0.1" + +minimist@^1.2.0, minimist@^1.2.6, minimist@^1.2.7: + version "1.2.8" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c" + integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA== mkdirp@^0.5.1: version "0.5.6" - resolved "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.6.tgz#7def03d2432dcae4ba1d611445c48396062255f6" integrity sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw== dependencies: minimist "^1.2.6" mocha@^9.0.3: version "9.2.2" - resolved "https://registry.npmjs.org/mocha/-/mocha-9.2.2.tgz" + resolved "https://registry.yarnpkg.com/mocha/-/mocha-9.2.2.tgz#d70db46bdb93ca57402c809333e5a84977a88fb9" integrity sha512-L6XC3EdwT6YrIk0yXpavvLkn8h+EU+Y5UcCHKECyMbdUIxyMuZj4bX4U9e1nvnvUUvQVsV2VHQr5zLdcUkhW/g== dependencies: "@ungap/promise-all-settled" "1.1.2" @@ -1072,148 +3701,427 @@ mocha@^9.0.3: ms@2.1.2: version "2.1.2" - resolved "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== ms@2.1.3, ms@^2.0.0: version "2.1.3" - resolved "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== +multistream@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/multistream/-/multistream-4.1.0.tgz#7bf00dfd119556fbc153cff3de4c6d477909f5a8" + integrity sha512-J1XDiAmmNpRCBfIWJv+n0ymC4ABcf/Pl+5YvC5B/D2f/2+8PtHvCNxMPKiQcZyi922Hq69J2YOpb1pTywfifyw== + dependencies: + once "^1.4.0" + readable-stream "^3.6.0" + +mustache@^4.0.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/mustache/-/mustache-4.2.0.tgz#e5892324d60a12ec9c2a73359edca52972bf6f64" + integrity sha512-71ippSywq5Yb7/tVYyGbkBggbU8H3u5Rz56fH60jGFgr8uHwxs+aSKeqmluIVzM0m0kB7xQjKS6qPfd0b2ZoqQ== + +mute-stream@0.0.8: + version "0.0.8" + resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.8.tgz#1630c42b2251ff81e2a283de96a5497ea92e5e0d" + integrity sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA== + nanoid@3.3.1: version "3.3.1" - resolved "https://registry.npmjs.org/nanoid/-/nanoid-3.3.1.tgz" + resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.1.tgz#6347a18cac88af88f58af0b3594b723d5e99bb35" integrity sha512-n6Vs/3KGyxPQd6uO0eH4Bv0ojGSUvuLlIHtC3Y0kEO23YRge8H9x1GCzLn28YX0H66pMkxuaeESFq4tKISKwdw== +near-api-js@^0.44.2: + version "0.44.2" + resolved "https://registry.yarnpkg.com/near-api-js/-/near-api-js-0.44.2.tgz#e451f68f2c56bd885c7b918db5818a3e6e9423d0" + integrity sha512-eMnc4V+geggapEUa3nU2p8HSHn/njtloI4P2mceHQWO8vDE1NGpnAw8FuTBrLmXSgIv9m6oocgFc9t3VNf5zwg== + dependencies: + bn.js "5.2.0" + borsh "^0.6.0" + bs58 "^4.0.0" + depd "^2.0.0" + error-polyfill "^0.1.3" + http-errors "^1.7.2" + js-sha256 "^0.9.0" + mustache "^4.0.0" + node-fetch "^2.6.1" + text-encoding-utf-8 "^1.0.2" + tweetnacl "^1.0.1" + +near-hd-key@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/near-hd-key/-/near-hd-key-1.2.1.tgz#f508ff15436cf8a439b543220f3cc72188a46756" + integrity sha512-SIrthcL5Wc0sps+2e1xGj3zceEa68TgNZDLuCx0daxmfTP7sFTB3/mtE2pYhlFsCxWoMn+JfID5E1NlzvvbRJg== + dependencies: + bip39 "3.0.2" + create-hmac "1.1.7" + tweetnacl "1.0.3" + +near-seed-phrase@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/near-seed-phrase/-/near-seed-phrase-0.2.0.tgz#fb7cf89682112b1160ab68abb50dc821f49be18a" + integrity sha512-NpmrnejpY1AdlRpDZ0schJQJtfBaoUheRfiYtQpcq9TkwPgqKZCRULV5L3hHmLc0ep7KRtikbPQ9R2ztN/3cyQ== + dependencies: + bip39-light "^1.0.7" + bs58 "^4.0.1" + near-hd-key "^1.2.1" + tweetnacl "^1.0.2" + no-case@^3.0.4: version "3.0.4" - resolved "https://registry.npmjs.org/no-case/-/no-case-3.0.4.tgz" + resolved "https://registry.yarnpkg.com/no-case/-/no-case-3.0.4.tgz#d361fd5c9800f558551a8369fc0dcd4662b6124d" integrity sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg== dependencies: lower-case "^2.0.2" tslib "^2.0.3" -node-fetch@2, node-fetch@2.6.7: - version "2.6.7" - resolved "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz" - integrity sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ== - dependencies: - whatwg-url "^5.0.0" +node-addon-api@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/node-addon-api/-/node-addon-api-2.0.2.tgz#432cfa82962ce494b132e9d72a15b29f71ff5d32" + integrity sha512-Ntyt4AIXyaLIuMHF6IOoTakB3K+RWxwtsHNRxllEoA6vPwP9o4866g6YWDLUdnucilZhmkxiHwHr11gAENw+QA== -node-fetch@^2.6.12: +node-fetch@2, node-fetch@^2.6.1, node-fetch@^2.6.12, node-fetch@^2.6.7, node-fetch@^2.7.0: version "2.7.0" resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.7.0.tgz#d0f0fa6e3e2dc1d27efcd8ad99d550bda94d187d" integrity sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A== dependencies: whatwg-url "^5.0.0" -node-gyp-build@^4.3.0: - version "4.5.0" - resolved "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.5.0.tgz" - integrity sha512-2iGbaQBV+ITgCz76ZEjmhUKAKVf7xfY1sRl4UiKQspfZMH2h06SyhNsnSVy50cwkFQDGLyif6m/6uFXHkOZ6rg== +node-fetch@2.6.1: + version "2.6.1" + resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.1.tgz#045bd323631f76ed2e2b55573394416b639a0052" + integrity sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw== + +node-gyp-build@^4.2.0, node-gyp-build@^4.3.0: + version "4.8.0" + resolved "https://registry.yarnpkg.com/node-gyp-build/-/node-gyp-build-4.8.0.tgz#3fee9c1731df4581a3f9ead74664369ff00d26dd" + integrity sha512-u6fs2AEUljNho3EYTJNBfImO5QTo/J/1Etd+NVdCj7qWKUSN/bSLkZwhDv7I+w/MSC6qJ4cknepkAYykDdK8og== + +node-kraken-api@^2.2.2: + version "2.2.2" + resolved "https://registry.yarnpkg.com/node-kraken-api/-/node-kraken-api-2.2.2.tgz#28bf56eec1f0ffe7e784b2ffa29b360ed98b0e4c" + integrity sha512-f+BZpgT1gD9705hlsRDDGj9m96Psb0Gxu3Td/P2fs0/gFy58YQONrTPiqfYzOBxvpmYnuAMxCRuRmdmkw04eRw== + dependencies: + crc "^4.1.0" + ts-ev "^0.4.0" + ws "^8.5.0" + optionalDependencies: + bufferutil "^4.0.6" + utf-8-validate "^5.0.9" normalize-path@^3.0.0, normalize-path@~3.0.0: version "3.0.0" - resolved "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz" + resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== -once@^1.3.0: +npm-run-path@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-4.0.1.tgz#b7ecd1e5ed53da8e37a55e1c2269e0b97ed748ea" + integrity sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw== + dependencies: + path-key "^3.0.0" + +numeral@^2.0.6: + version "2.0.6" + resolved "https://registry.yarnpkg.com/numeral/-/numeral-2.0.6.tgz#4ad080936d443c2561aed9f2197efffe25f4e506" + integrity sha512-qaKRmtYPZ5qdw4jWJD6bxEf1FJEqllJrwxCLIm0sQU/A7v2/czigzOb+C2uSiFsa9lBUzeH7M1oK+Q+OLxL3kA== + +o3@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/o3/-/o3-1.0.3.tgz#192ce877a882dfa6751f0412a865fafb2da1dac0" + integrity sha512-f+4n+vC6s4ysy7YO7O2gslWZBUu8Qj2i2OUJOvjRxQva7jVjYjB29jrr9NCjmxZQR0gzrOcv1RnqoYOeMs5VRQ== + dependencies: + capability "^0.2.5" + +object-is@^1.1.5: + version "1.1.6" + resolved "https://registry.yarnpkg.com/object-is/-/object-is-1.1.6.tgz#1a6a53aed2dd8f7e6775ff870bea58545956ab07" + integrity sha512-F8cZ+KfGlSGi09lJT7/Nd6KJZ9ygtvYC0/UYYLI9nmQKLMnydpB9yvbv9K1uSkEu7FU9vYPmVwLg328tX+ot3Q== + dependencies: + call-bind "^1.0.7" + define-properties "^1.2.1" + +object-keys@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" + integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== + +object.assign@^4.1.4: + version "4.1.5" + resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.5.tgz#3a833f9ab7fdb80fc9e8d2300c803d216d8fdbb0" + integrity sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ== + dependencies: + call-bind "^1.0.5" + define-properties "^1.2.1" + has-symbols "^1.0.3" + object-keys "^1.1.1" + +once@^1.3.0, once@^1.4.0: version "1.4.0" - resolved "https://registry.npmjs.org/once/-/once-1.4.0.tgz" + resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w== dependencies: wrappy "1" +onetime@^5.1.0, onetime@^5.1.2: + version "5.1.2" + resolved "https://registry.yarnpkg.com/onetime/-/onetime-5.1.2.tgz#d0e96ebb56b07476df1dd9c4806e5237985ca45e" + integrity sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg== + dependencies: + mimic-fn "^2.1.0" + +ora@^5.4.1: + version "5.4.1" + resolved "https://registry.yarnpkg.com/ora/-/ora-5.4.1.tgz#1b2678426af4ac4a509008e5e4ac9e9959db9e18" + integrity sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ== + dependencies: + bl "^4.1.0" + chalk "^4.1.0" + cli-cursor "^3.1.0" + cli-spinners "^2.5.0" + is-interactive "^1.0.0" + is-unicode-supported "^0.1.0" + log-symbols "^4.1.0" + strip-ansi "^6.0.0" + wcwidth "^1.0.1" + +os-tmpdir@~1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" + integrity sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g== + p-limit@^3.0.2: version "3.1.0" - resolved "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b" integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== dependencies: yocto-queue "^0.1.0" p-locate@^5.0.0: version "5.0.0" - resolved "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-5.0.0.tgz#83c8315c6785005e3bd021839411c9e110e6d834" integrity sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw== dependencies: p-limit "^3.0.2" pako@^2.0.3: - version "2.0.4" - resolved "https://registry.npmjs.org/pako/-/pako-2.0.4.tgz" - integrity sha512-v8tweI900AUkZN6heMU/4Uy4cXRc2AYNRggVmTR+dEncawDJgCdLMximOVA2p4qO57WMynangsfGRb5WD6L1Bg== + version "2.1.0" + resolved "https://registry.yarnpkg.com/pako/-/pako-2.1.0.tgz#266cc37f98c7d883545d11335c00fbd4062c9a86" + integrity sha512-w+eufiZ1WuJYgPXbV/PO3NCMEc3xqylkKHzp8bxp1uW4qaSNQUkwmLLEc3kKsfz8lpV1F8Ht3U1Cm+9Srog2ug== path-exists@^4.0.0: version "4.0.0" - resolved "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz" + resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== path-is-absolute@^1.0.0: version "1.0.1" - resolved "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz" + resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg== +path-key@^3.0.0, path-key@^3.1.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" + integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== + pathval@^1.1.1: version "1.1.1" - resolved "https://registry.npmjs.org/pathval/-/pathval-1.1.1.tgz" + resolved "https://registry.yarnpkg.com/pathval/-/pathval-1.1.1.tgz#8534e77a77ce7ac5a2512ea21e0fdb8fcf6c3d8d" integrity sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ== +pause-stream@0.0.11: + version "0.0.11" + resolved "https://registry.yarnpkg.com/pause-stream/-/pause-stream-0.0.11.tgz#fe5a34b0cbce12b5aa6a2b403ee2e73b602f1445" + integrity sha512-e3FBlXLmN/D1S+zHzanP4E/4Z60oFAa3O051qt1pxa7DEJWKAyil6upYVXCWadEnuoqa4Pkc9oUx9zsxYeRv8A== + dependencies: + through "~2.3" + +pbkdf2@^3.0.9: + version "3.1.2" + resolved "https://registry.yarnpkg.com/pbkdf2/-/pbkdf2-3.1.2.tgz#dd822aa0887580e52f1a039dc3eda108efae3075" + integrity sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA== + dependencies: + create-hash "^1.1.2" + create-hmac "^1.1.4" + ripemd160 "^2.0.1" + safe-buffer "^5.0.1" + sha.js "^2.4.8" + picomatch@^2.0.4, picomatch@^2.2.1: version "2.3.1" - resolved "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz" + resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== +possible-typed-array-names@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/possible-typed-array-names/-/possible-typed-array-names-1.0.0.tgz#89bb63c6fada2c3e90adc4a647beeeb39cc7bf8f" + integrity sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q== + prettier@^2.6.2: - version "2.7.1" - resolved "https://registry.npmjs.org/prettier/-/prettier-2.7.1.tgz" - integrity sha512-ujppO+MkdPqoVINuDFDRLClm7D78qbDt0/NR+wp5FqEZOoTNAjPHWj17QRhu7geIHJfcNhRk1XVQmF8Bp3ye+g== + version "2.8.8" + resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.8.8.tgz#e8c5d7e98a4305ffe3de2e1fc4aca1a71c28b1da" + integrity sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q== + +process@^0.11.10: + version "0.11.10" + resolved "https://registry.yarnpkg.com/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182" + integrity sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A== + +promise-retry@2.0.1, promise-retry@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/promise-retry/-/promise-retry-2.0.1.tgz#ff747a13620ab57ba688f5fc67855410c370da22" + integrity sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g== + dependencies: + err-code "^2.0.2" + retry "^0.12.0" + +protobufjs@^6.10.2: + version "6.11.4" + resolved "https://registry.yarnpkg.com/protobufjs/-/protobufjs-6.11.4.tgz#29a412c38bf70d89e537b6d02d904a6f448173aa" + integrity sha512-5kQWPaJHi1WoCpjTGszzQ32PG2F4+wRY6BmAT4Vfw56Q2FZ4YZzK20xUYQH4YkfehY1e6QSICrJquM6xXZNcrw== + dependencies: + "@protobufjs/aspromise" "^1.1.2" + "@protobufjs/base64" "^1.1.2" + "@protobufjs/codegen" "^2.0.4" + "@protobufjs/eventemitter" "^1.1.0" + "@protobufjs/fetch" "^1.1.0" + "@protobufjs/float" "^1.0.2" + "@protobufjs/inquire" "^1.1.0" + "@protobufjs/path" "^1.1.2" + "@protobufjs/pool" "^1.1.0" + "@protobufjs/utf8" "^1.1.0" + "@types/long" "^4.0.1" + "@types/node" ">=13.7.0" + long "^4.0.0" + +protobufjs@^7.2.4: + version "7.2.6" + resolved "https://registry.yarnpkg.com/protobufjs/-/protobufjs-7.2.6.tgz#4a0ccd79eb292717aacf07530a07e0ed20278215" + integrity sha512-dgJaEDDL6x8ASUZ1YqWciTRrdOuYNzoOf27oHNfdyvKqHr5i0FV7FSLU+aIeFjyFgVxrpTOtQUi0BLLBymZaBw== + dependencies: + "@protobufjs/aspromise" "^1.1.2" + "@protobufjs/base64" "^1.1.2" + "@protobufjs/codegen" "^2.0.4" + "@protobufjs/eventemitter" "^1.1.0" + "@protobufjs/fetch" "^1.1.0" + "@protobufjs/float" "^1.0.2" + "@protobufjs/inquire" "^1.1.0" + "@protobufjs/path" "^1.1.2" + "@protobufjs/pool" "^1.1.0" + "@protobufjs/utf8" "^1.1.0" + "@types/node" ">=13.7.0" + long "^5.0.0" + +proxy-from-env@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/proxy-from-env/-/proxy-from-env-1.1.0.tgz#e102f16ca355424865755d2c9e8ea4f24d58c3e2" + integrity sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg== -randombytes@^2.1.0: +ps-tree@1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/ps-tree/-/ps-tree-1.2.0.tgz#5e7425b89508736cdd4f2224d028f7bb3f722ebd" + integrity sha512-0VnamPPYHl4uaU/nSFeZZpR21QAWRz+sRv4iW9+v/GS/J5U5iZB5BNN6J0RMoOvdx2gWM2+ZFMIm58q24e4UYA== + dependencies: + event-stream "=3.3.4" + +psyfi-euros-test@0.0.2-rc.5: + version "0.0.2-rc.5" + resolved "https://registry.yarnpkg.com/psyfi-euros-test/-/psyfi-euros-test-0.0.2-rc.5.tgz#7b0db21ecbe7bac490de764f022feb01a9b501d9" + integrity sha512-bTeM4wrS9x6+9Z69uN9wWELTc7MyM3KpNdntp9T3uUkQwnN9Pygwjd/a+Mf/x7PbmAHKMabY7tLbSVxpifVt4g== + dependencies: + "@metaplex-foundation/mpl-token-metadata" "2.2.4" + "@project-serum/anchor" "0.23.0" + "@project-serum/common" "^0.0.1-beta.3" + "@project-serum/serum" "^0.13.61" + "@solana/spl-token" "0.1.8" + "@solana/web3.js" "^1.35.1" + psystake-test "0.0.1-rc.8" + +psystake-test@0.0.1-rc.8: + version "0.0.1-rc.8" + resolved "https://registry.yarnpkg.com/psystake-test/-/psystake-test-0.0.1-rc.8.tgz#67ce3c7546c47ac44bd213997fadcee346efe440" + integrity sha512-wng85jJDM8SwVeH/6fUMKBxHiVPl6SwFm6Y1j3fNmhqEINwu1L+kShO3YCIhPN7oK2tox7Fb7tUrXdbk5HQ54g== + dependencies: + "@project-serum/anchor" "^0.23.0" + "@project-serum/common" "^0.0.1-beta.3" + "@project-serum/serum" "^0.13.61" + "@solana/spl-token" "^0.1.8" + "@solana/web3.js" "^1.35.1" + +randombytes@^2.0.1, randombytes@^2.1.0: version "2.1.0" - resolved "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz" + resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a" integrity sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ== dependencies: safe-buffer "^5.1.0" +readable-stream@^3.4.0, readable-stream@^3.6.0: + version "3.6.2" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.2.tgz#56a9b36ea965c00c5a93ef31eb111a0f11056967" + integrity sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA== + dependencies: + inherits "^2.0.3" + string_decoder "^1.1.1" + util-deprecate "^1.0.1" + readdirp@~3.6.0: version "3.6.0" - resolved "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz" + resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7" integrity sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA== dependencies: picomatch "^2.2.1" -regenerator-runtime@^0.13.4: - version "0.13.9" - resolved "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz" - integrity sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA== +reconnecting-websocket@^4.2.0: + version "4.4.0" + resolved "https://registry.yarnpkg.com/reconnecting-websocket/-/reconnecting-websocket-4.4.0.tgz#3b0e5b96ef119e78a03135865b8bb0af1b948783" + integrity sha512-D2E33ceRPga0NvTDhJmphEgJ7FUYF0v4lr1ki0csq06OdlxKfugGzN0dSkxM/NfqCxYELK4KcaTOUOjTV6Dcng== regenerator-runtime@^0.14.0: - version "0.14.0" - resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.14.0.tgz#5e19d68eb12d486f797e15a3c6a918f7cec5eb45" - integrity sha512-srw17NI0TUWHuGa5CFGGmhfNIeja30WMBfbslPNhf6JrqQlLN5gcrvig1oqPxiVaXb0oW0XRKtH6Nngs5lKCIA== + version "0.14.1" + resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz#356ade10263f685dda125100cd862c1db895327f" + integrity sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw== require-directory@^2.1.1: version "2.1.1" - resolved "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz" + resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" integrity sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q== -rpc-websockets@^7.5.0: - version "7.5.0" - resolved "https://registry.npmjs.org/rpc-websockets/-/rpc-websockets-7.5.0.tgz" - integrity sha512-9tIRi1uZGy7YmDjErf1Ax3wtqdSSLIlnmL5OtOzgd5eqPKbsPpwDP5whUDO2LQay3Xp0CcHlcNSGzacNRluBaQ== +resolve-pkg-maps@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz#616b3dc2c57056b5588c31cdf4b3d64db133720f" + integrity sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw== + +restore-cursor@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-3.1.0.tgz#39f67c54b3a7a58cea5236d95cf0034239631f7e" + integrity sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA== dependencies: - "@babel/runtime" "^7.17.2" - eventemitter3 "^4.0.7" - uuid "^8.3.2" - ws "^8.5.0" - optionalDependencies: - bufferutil "^4.0.1" - utf-8-validate "^5.0.2" + onetime "^5.1.0" + signal-exit "^3.0.2" + +retry@0.13.1, retry@^0.13.1: + version "0.13.1" + resolved "https://registry.yarnpkg.com/retry/-/retry-0.13.1.tgz#185b1587acf67919d63b357349e03537b2484658" + integrity sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg== + +retry@^0.12.0: + version "0.12.0" + resolved "https://registry.yarnpkg.com/retry/-/retry-0.12.0.tgz#1b42a6266a21f07421d1b0b54b7dc167b01c013b" + integrity sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow== + +ripemd160@^2.0.0, ripemd160@^2.0.1: + version "2.0.2" + resolved "https://registry.yarnpkg.com/ripemd160/-/ripemd160-2.0.2.tgz#a1c1a6f624751577ba5d07914cbc92850585890c" + integrity sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA== + dependencies: + hash-base "^3.0.0" + inherits "^2.0.1" -rpc-websockets@^7.5.1: - version "7.6.1" - resolved "https://registry.yarnpkg.com/rpc-websockets/-/rpc-websockets-7.6.1.tgz#7d1dd00e5ad3e17bbe1d88ba6e66f4cb579cb66b" - integrity sha512-MmRGaJJvxTHSRxYPjJJqcj2zWnCetw7YbYbKlD0Yc7qVw6PsZhRJg1MI3mpWlpBs+4zO+urlNfLl9zLsdOD/gA== +rpc-websockets@^7.4.12, rpc-websockets@^7.5.0, rpc-websockets@^7.5.1: + version "7.9.0" + resolved "https://registry.yarnpkg.com/rpc-websockets/-/rpc-websockets-7.9.0.tgz#a3938e16d6f134a3999fdfac422a503731bf8973" + integrity sha512-DwKewQz1IUA5wfLvgM8wDpPRcr+nWSxuFxx5CbrI2z/MyyZ4nXLM86TvIA+cI1ZAdqC8JIBR1mZR55dzaLU+Hw== dependencies: "@babel/runtime" "^7.17.2" eventemitter3 "^4.0.7" @@ -1223,26 +4131,103 @@ rpc-websockets@^7.5.1: bufferutil "^4.0.1" utf-8-validate "^5.0.2" -safe-buffer@^5.0.1, safe-buffer@^5.1.0: +run-async@^2.4.0: + version "2.4.1" + resolved "https://registry.yarnpkg.com/run-async/-/run-async-2.4.1.tgz#8440eccf99ea3e70bd409d49aab88e10c189a455" + integrity sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ== + +rxjs@^7.5.5, rxjs@^7.8.0: + version "7.8.1" + resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-7.8.1.tgz#6f6f3d99ea8044291efd92e7c7fcf562c4057543" + integrity sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg== + dependencies: + tslib "^2.1.0" + +safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.2, safe-buffer@^5.2.0, safe-buffer@~5.2.0: version "5.2.1" - resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== -safer-buffer@^2.1.0: +"safer-buffer@>= 2.1.2 < 3", safer-buffer@^2.1.0: version "2.1.2" resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== +scrypt-js@3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/scrypt-js/-/scrypt-js-3.0.1.tgz#d314a57c2aef69d1ad98a138a21fe9eafa9ee312" + integrity sha512-cdwTTnqPu0Hyvf5in5asVdZocVDTNRmR7XEcJuIzMjJeSHybHl7vpB66AzwTaIg6CLSbtjcxc8fqcySfnTkccA== + +secp256k1@^4.0.2: + version "4.0.3" + resolved "https://registry.yarnpkg.com/secp256k1/-/secp256k1-4.0.3.tgz#c4559ecd1b8d3c1827ed2d1b94190d69ce267303" + integrity sha512-NLZVf+ROMxwtEj3Xa562qgv2BK5e2WNmXPiOdVIPLgs6lyTzMvBq0aWTYMI5XCP9jZMVKOcqZLw/Wc4vDkuxhA== + dependencies: + elliptic "^6.5.4" + node-addon-api "^2.0.0" + node-gyp-build "^4.2.0" + serialize-javascript@6.0.0: version "6.0.0" - resolved "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz" + resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-6.0.0.tgz#efae5d88f45d7924141da8b5c3a7a7e663fefeb8" integrity sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag== dependencies: randombytes "^2.1.0" +set-function-length@^1.2.1: + version "1.2.2" + resolved "https://registry.yarnpkg.com/set-function-length/-/set-function-length-1.2.2.tgz#aac72314198eaed975cf77b2c3b6b880695e5449" + integrity sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg== + dependencies: + define-data-property "^1.1.4" + es-errors "^1.3.0" + function-bind "^1.1.2" + get-intrinsic "^1.2.4" + gopd "^1.0.1" + has-property-descriptors "^1.0.2" + +setprototypeof@1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.2.0.tgz#66c9a24a73f9fc28cbe66b09fed3d33dcaf1b424" + integrity sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw== + +sha.js@^2.4.0, sha.js@^2.4.8: + version "2.4.11" + resolved "https://registry.yarnpkg.com/sha.js/-/sha.js-2.4.11.tgz#37a5cf0b81ecbc6943de109ba2960d1b26584ae7" + integrity sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ== + dependencies: + inherits "^2.0.1" + safe-buffer "^5.0.1" + +shebang-command@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" + integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== + dependencies: + shebang-regex "^3.0.0" + +shebang-regex@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" + integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== + +shiki@^0.10.1: + version "0.10.1" + resolved "https://registry.yarnpkg.com/shiki/-/shiki-0.10.1.tgz#6f9a16205a823b56c072d0f1a0bcd0f2646bef14" + integrity sha512-VsY7QJVzU51j5o1+DguUd+6vmCmZ5v/6gYu4vyYAhzjuNQU6P/vmSy4uQaOhvje031qQMiW0d2BwgMH52vqMng== + dependencies: + jsonc-parser "^3.0.0" + vscode-oniguruma "^1.6.1" + vscode-textmate "5.2.0" + +signal-exit@^3.0.2, signal-exit@^3.0.3: + version "3.0.7" + resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9" + integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== + snake-case@^3.0.4: version "3.0.4" - resolved "https://registry.npmjs.org/snake-case/-/snake-case-3.0.4.tgz" + resolved "https://registry.yarnpkg.com/snake-case/-/snake-case-3.0.4.tgz#4f2bbd568e9935abdfd593f34c691dadb49c452c" integrity sha512-LAOh4z89bGQvl9pFfNF8V146i7o7/CqFPbqzYgP+yYzDIDeS9HaNFtXABamRW+AQzEVODcvE79ljJ+8a9YSdMg== dependencies: dot-case "^3.0.4" @@ -1265,17 +4250,17 @@ solana-bankrun-darwin-x64@0.2.0: solana-bankrun-linux-x64-gnu@0.2.0: version "0.2.0" - resolved "https://registry.npmjs.org/solana-bankrun-linux-x64-gnu/-/solana-bankrun-linux-x64-gnu-0.2.0.tgz" + resolved "https://registry.yarnpkg.com/solana-bankrun-linux-x64-gnu/-/solana-bankrun-linux-x64-gnu-0.2.0.tgz#eb133902e78afc5271ba034bd5353ad5f4005c10" integrity sha512-WnqQjfBBdcI0ZLysjvRStI8gX7vm1c3CI6CC03lgkUztH+Chcq9C4LI9m2M8mXza8Xkn9ryeKAmX36Bx/yoVzg== solana-bankrun-linux-x64-musl@0.2.0: version "0.2.0" - resolved "https://registry.npmjs.org/solana-bankrun-linux-x64-musl/-/solana-bankrun-linux-x64-musl-0.2.0.tgz" + resolved "https://registry.yarnpkg.com/solana-bankrun-linux-x64-musl/-/solana-bankrun-linux-x64-musl-0.2.0.tgz#a99c5187f34ab5979c708281da74093c64baab4a" integrity sha512-8mtf14ZBoah30+MIJBUwb5BlGLRZyK5cZhCkYnC/ROqaIDN8RxMM44NL63gTUIaNHsFwWGA9xR0KSeljeh3PKQ== solana-bankrun@^0.2.0: version "0.2.0" - resolved "https://registry.npmjs.org/solana-bankrun/-/solana-bankrun-0.2.0.tgz" + resolved "https://registry.yarnpkg.com/solana-bankrun/-/solana-bankrun-0.2.0.tgz#e1df2126ee887b9eae17962f09db18aaa25d736f" integrity sha512-TS6vYoO/9YJZng7oiLOVyuz8V7yLow5Hp4SLYWW71XM3702v+z9f1fvUBKudRfa4dfpta4tRNufApSiBIALxJQ== dependencies: "@solana/web3.js" "^1.68.0" @@ -1289,7 +4274,7 @@ solana-bankrun@^0.2.0: source-map-support@^0.5.6: version "0.5.21" - resolved "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz" + resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.21.tgz#04fe7c7f9e1ed2d662233c28cb2b35b9f63f6e4f" integrity sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w== dependencies: buffer-from "^1.0.0" @@ -1297,7 +4282,7 @@ source-map-support@^0.5.6: source-map@^0.6.0: version "0.6.1" - resolved "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== spl-token-bankrun@0.2.3: @@ -1308,86 +4293,198 @@ spl-token-bankrun@0.2.3: "@solana/spl-token" "^0.3.8" solana-bankrun "^0.2.0" -string-width@^4.1.0, string-width@^4.2.0: +split@0.3: + version "0.3.3" + resolved "https://registry.yarnpkg.com/split/-/split-0.3.3.tgz#cd0eea5e63a211dfff7eb0f091c4133e2d0dd28f" + integrity sha512-wD2AeVmxXRBoX44wAycgjVpMhvbwdI2aZjCkvfNcH1YqHQvJVa1duWc73OyVGJUc05fhFaTZeQ/PYsrmyH0JVA== + dependencies: + through "2" + +start-server-and-test@^1.14.0: + version "1.15.5" + resolved "https://registry.yarnpkg.com/start-server-and-test/-/start-server-and-test-1.15.5.tgz#5c9103bd87c06678fc62658fbe97d09501714011" + integrity sha512-o3EmkX0++GV+qsvIJ/OKWm3w91fD8uS/bPQVPrh/7loaxkpXSuAIHdnmN/P/regQK9eNAK76aBJcHt+OSTk+nA== + dependencies: + arg "^5.0.2" + bluebird "3.7.2" + check-more-types "2.24.0" + debug "4.3.4" + execa "5.1.1" + lazy-ass "1.6.0" + ps-tree "1.2.0" + wait-on "7.0.1" + +"statuses@>= 1.5.0 < 2": + version "1.5.0" + resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c" + integrity sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA== + +stream-combiner@~0.0.4: + version "0.0.4" + resolved "https://registry.yarnpkg.com/stream-combiner/-/stream-combiner-0.0.4.tgz#4d5e433c185261dde623ca3f44c586bcf5c4ad14" + integrity sha512-rT00SPnTVyRsaSz5zgSPma/aHSOic5U1prhYdRy5HS2kTZviFpmDgzilbtsJsxiroqACmayynDN/9VzIbX5DOw== + dependencies: + duplexer "~0.1.1" + +stream-transform@^3.3.1: + version "3.3.1" + resolved "https://registry.yarnpkg.com/stream-transform/-/stream-transform-3.3.1.tgz#f8bb6a811e505056b6a215c466e4c2760347189f" + integrity sha512-BL8pv9QL8Ikd11oZwlRDp1qYMhGR0i50zI9ltoijKGc4ubQWal/Rc4p6SYJp1TBOGpE0uAGchwbxOZ1ycwTuqQ== + +strict-event-emitter-types@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/strict-event-emitter-types/-/strict-event-emitter-types-2.0.0.tgz#05e15549cb4da1694478a53543e4e2f4abcf277f" + integrity sha512-Nk/brWYpD85WlOgzw5h173aci0Teyv8YdIAEtV+N88nDB0dLlazZyJMIsN6eo1/AR61l+p6CJTG1JIyFaoNEEA== + +string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: version "4.2.3" - resolved "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== dependencies: emoji-regex "^8.0.0" is-fullwidth-code-point "^3.0.0" strip-ansi "^6.0.1" +string_decoder@^1.1.1: + version "1.3.0" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" + integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== + dependencies: + safe-buffer "~5.2.0" + strip-ansi@^6.0.0, strip-ansi@^6.0.1: version "6.0.1" - resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== dependencies: ansi-regex "^5.0.1" strip-bom@^3.0.0: version "3.0.0" - resolved "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz" + resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" integrity sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA== +strip-final-newline@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-2.0.0.tgz#89b852fb2fcbe936f6f4b3187afb0a12c1ab58ad" + integrity sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA== + strip-json-comments@3.1.1: version "3.1.1" - resolved "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz" + resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== +superstruct@0.8.3: + version "0.8.3" + resolved "https://registry.yarnpkg.com/superstruct/-/superstruct-0.8.3.tgz#fb4d8901aca3bf9f79afab1bbab7a7f335cc4ef2" + integrity sha512-LbtbFpktW1FcwxVIJlxdk7bCyBq/GzOx2FSFLRLTUhWIA1gHkYPIl3aXRG5mBdGZtnPNT6t+4eEcLDCMOuBHww== + dependencies: + kind-of "^6.0.2" + tiny-invariant "^1.0.6" + superstruct@^0.14.2: version "0.14.2" - resolved "https://registry.npmjs.org/superstruct/-/superstruct-0.14.2.tgz" + resolved "https://registry.yarnpkg.com/superstruct/-/superstruct-0.14.2.tgz#0dbcdf3d83676588828f1cf5ed35cda02f59025b" integrity sha512-nPewA6m9mR3d6k7WkZ8N8zpTWfenFH3q9pA2PkuiZxINr9DKB2+40wEQf0ixn8VaGuJ78AB6iWOtStI+/4FKZQ== superstruct@^0.15.4: version "0.15.5" - resolved "https://registry.npmjs.org/superstruct/-/superstruct-0.15.5.tgz" + resolved "https://registry.yarnpkg.com/superstruct/-/superstruct-0.15.5.tgz#0f0a8d3ce31313f0d84c6096cd4fa1bfdedc9dab" integrity sha512-4AOeU+P5UuE/4nOUkmcQdW5y7i9ndt1cQd/3iUe+LTz3RxESf/W/5lg4B74HbDMMv8PHnPnGCQFH45kBcrQYoQ== +superstruct@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/superstruct/-/superstruct-1.0.3.tgz#de626a5b49c6641ff4d37da3c7598e7a87697046" + integrity sha512-8iTn3oSS8nRGn+C2pgXSKPI3jmpm6FExNazNpjvqS6ZUJQCej3PUXEKM8NjHBOs54ExM+LPW/FBRhymrdcCiSg== + supports-color@8.1.1: version "8.1.1" - resolved "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-8.1.1.tgz#cd6fc17e28500cff56c1b86c0a7fd4a54a73005c" integrity sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q== dependencies: has-flag "^4.0.0" supports-color@^7.1.0: version "7.2.0" - resolved "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== dependencies: has-flag "^4.0.0" text-encoding-utf-8@^1.0.2: version "1.0.2" - resolved "https://registry.npmjs.org/text-encoding-utf-8/-/text-encoding-utf-8-1.0.2.tgz" + resolved "https://registry.yarnpkg.com/text-encoding-utf-8/-/text-encoding-utf-8-1.0.2.tgz#585b62197b0ae437e3c7b5d0af27ac1021e10d13" integrity sha512-8bw4MY9WjdsD2aMtO0OzOCY3pXGYNx2d2FfHRVUKkiCPDWjKuOlhLVASS+pD7VkLTVjW268LYJHwsnPFlBpbAg== -"through@>=2.2.7 <3": +through@2, "through@>=2.2.7 <3", through@^2.3.6, through@~2.3, through@~2.3.1: version "2.3.8" - resolved "https://registry.npmjs.org/through/-/through-2.3.8.tgz" + resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" integrity sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg== +tiny-invariant@^1.0.6, tiny-invariant@^1.1.0, tiny-invariant@^1.2.0, tiny-invariant@^1.3.1: + version "1.3.3" + resolved "https://registry.yarnpkg.com/tiny-invariant/-/tiny-invariant-1.3.3.tgz#46680b7a873a0d5d10005995eb90a70d74d60127" + integrity sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg== + +tmp-promise@^3.0.2: + version "3.0.3" + resolved "https://registry.yarnpkg.com/tmp-promise/-/tmp-promise-3.0.3.tgz#60a1a1cc98c988674fcbfd23b6e3367bdeac4ce7" + integrity sha512-RwM7MoPojPxsOBYnyd2hy0bxtIlVrihNs9pj5SUvY8Zz1sQcQG2tG1hSr8PDxfgEB8RNKDhqbIlroIarSNDNsQ== + dependencies: + tmp "^0.2.0" + +tmp@^0.0.33: + version "0.0.33" + resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9" + integrity sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw== + dependencies: + os-tmpdir "~1.0.2" + +tmp@^0.2.0: + version "0.2.3" + resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.2.3.tgz#eb783cc22bc1e8bebd0671476d46ea4eb32a79ae" + integrity sha512-nZD7m9iCPC5g0pYmcaxogYKggSfLsdxl8of3Q/oIbqCqLLIO9IAF0GWjX1z9NZRHPiXv8Wex4yDCaZsgEw0Y8w== + to-regex-range@^5.0.1: version "5.0.1" - resolved "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz" + resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== dependencies: is-number "^7.0.0" +toformat@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/toformat/-/toformat-2.0.0.tgz#7a043fd2dfbe9021a4e36e508835ba32056739d8" + integrity sha512-03SWBVop6nU8bpyZCx7SodpYznbZF5R4ljwNLBcTQzKOD9xuihRo/psX58llS1BMFhhAI08H3luot5GoXJz2pQ== + +toidentifier@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.1.tgz#3be34321a88a820ed1bd80dfaa33e479fbb8dd35" + integrity sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA== + toml@^3.0.0: version "3.0.0" - resolved "https://registry.npmjs.org/toml/-/toml-3.0.0.tgz" + resolved "https://registry.yarnpkg.com/toml/-/toml-3.0.0.tgz#342160f1af1904ec9d204d03a5d61222d762c5ee" integrity sha512-y/mWCZinnvxjTKYhJ+pYxwD0mRLVvOtdS2Awbgxln6iEnt4rk0yBxeSBHkGJcPucRiG0e55mwWp+g/05rsrd6w== tr46@~0.0.3: version "0.0.3" - resolved "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz" + resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a" integrity sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw== +traverse-chain@~0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/traverse-chain/-/traverse-chain-0.1.0.tgz#61dbc2d53b69ff6091a12a168fd7d433107e40f1" + integrity sha512-up6Yvai4PYKhpNp5PkYtx50m3KbwQrqDwbuZP/ItyL64YEWHAvH6Md83LFLV/GRSk/BoUVwwgUzX6SOQSbsfAg== + +ts-ev@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/ts-ev/-/ts-ev-0.4.0.tgz#b30bbab35bd57516efba7ab89b6417424a1ebf0e" + integrity sha512-rLX6QdkC1/jA9sS4y9/DxHABTcOussp33J90h+TxHmya9CWvbGc9uLqdM4c/N4pNRmSdtq9zqhz7sB9KcN1NFQ== + ts-mocha@^10.0.0: version "10.0.0" - resolved "https://registry.npmjs.org/ts-mocha/-/ts-mocha-10.0.0.tgz" + resolved "https://registry.yarnpkg.com/ts-mocha/-/ts-mocha-10.0.0.tgz#41a8d099ac90dbbc64b06976c5025ffaebc53cb9" integrity sha512-VRfgDO+iiuJFlNB18tzOfypJ21xn2xbuZyDvJvqpTbWgkAgD17ONGr8t+Tl8rcBtOBdjXp5e/Rk+d39f7XBHRw== dependencies: ts-node "7.0.1" @@ -1396,7 +4493,7 @@ ts-mocha@^10.0.0: ts-node@7.0.1: version "7.0.1" - resolved "https://registry.npmjs.org/ts-node/-/ts-node-7.0.1.tgz" + resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-7.0.1.tgz#9562dc2d1e6d248d24bc55f773e3f614337d9baf" integrity sha512-BVwVbPJRspzNh2yfslyT1PSbl5uIk03EZlb493RKHN4qej/D06n1cEhjlOJG69oFsE7OT8XjpTUcYf6pKTLMhw== dependencies: arrify "^1.0.0" @@ -1408,76 +4505,211 @@ ts-node@7.0.1: source-map-support "^0.5.6" yn "^2.0.0" +ts-poet@^6.7.0: + version "6.7.0" + resolved "https://registry.yarnpkg.com/ts-poet/-/ts-poet-6.7.0.tgz#6b2ff3b7b0c70ea650d6d570dfe6899f73fb3c38" + integrity sha512-A0wvFtpkTCWPw7ftTIwbEH+L+7ul4CU0x3jXKQ+kCnmEQIAOwhpUaBmcAYKxZCxHae9/MUl4LbyTqw25BpzW5Q== + dependencies: + dprint-node "^1.0.8" + +ts-proto-descriptors@1.15.0: + version "1.15.0" + resolved "https://registry.yarnpkg.com/ts-proto-descriptors/-/ts-proto-descriptors-1.15.0.tgz#e859e3a2887da2d954c552524719b80bdb6ee355" + integrity sha512-TYyJ7+H+7Jsqawdv+mfsEpZPTIj9siDHS6EMCzG/z3b/PZiphsX+mWtqFfFVe5/N0Th6V3elK9lQqjnrgTOfrg== + dependencies: + long "^5.2.3" + protobufjs "^7.2.4" + +ts-proto@^1.79.0: + version "1.168.0" + resolved "https://registry.yarnpkg.com/ts-proto/-/ts-proto-1.168.0.tgz#049895ec546bf729dd5d927866aa967e1fb96257" + integrity sha512-3ae1eXY3VCmhIvM/8Q/q4/3bJrdftmtY+5GwrSkhZh+UnHpI1l5rYu0mm1V75qiQJcdAXRc5m7gfnYbdnuQl5g== + dependencies: + case-anything "^2.1.13" + protobufjs "^7.2.4" + ts-poet "^6.7.0" + ts-proto-descriptors "1.15.0" + tsconfig-paths@^3.5.0: - version "3.14.1" - resolved "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.14.1.tgz" - integrity sha512-fxDhWnFSLt3VuTwtvJt5fpwxBHg5AdKWMsgcPOOIilyjymcYVZoCQF8fvFRezCNfblEXmi+PcM1eYHeOAgXCOQ== + version "3.15.0" + resolved "https://registry.yarnpkg.com/tsconfig-paths/-/tsconfig-paths-3.15.0.tgz#5299ec605e55b1abb23ec939ef15edaf483070d4" + integrity sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg== dependencies: "@types/json5" "^0.0.29" - json5 "^1.0.1" + json5 "^1.0.2" minimist "^1.2.6" strip-bom "^3.0.0" -tslib@^2.0.3: - version "2.4.0" - resolved "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz" - integrity sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ== +tslib@^2.0.3, tslib@^2.1.0, tslib@^2.3.1, tslib@^2.4.0, tslib@^2.6.2: + version "2.6.2" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.6.2.tgz#703ac29425e7b37cd6fd456e92404d46d1f3e4ae" + integrity sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q== + +tsx@^4.7.1: + version "4.7.1" + resolved "https://registry.yarnpkg.com/tsx/-/tsx-4.7.1.tgz#27af6cbf4e1cdfcb9b5425b1c61bb7e668eb5e84" + integrity sha512-8d6VuibXHtlN5E3zFkgY8u4DX7Y3Z27zvvPKVmLon/D4AjuKzarkUBTLDBgj9iTQ0hg5xM7c/mYiRVM+HETf0g== + dependencies: + esbuild "~0.19.10" + get-tsconfig "^4.7.2" + optionalDependencies: + fsevents "~2.3.3" -type-detect@^4.0.0, type-detect@^4.0.5: +tweetnacl@1.0.3, tweetnacl@^1.0.1, tweetnacl@^1.0.2, tweetnacl@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-1.0.3.tgz#ac0af71680458d8a6378d0d0d050ab1407d35596" + integrity sha512-6rt+RN7aOi1nGMyC4Xa5DdYiukl2UWCbcJft7YhxReBGQD7OAM8Pbxw6YMo4r2diNEA8FEmu32YOn9rhaiE5yw== + +type-detect@^4.0.0, type-detect@^4.0.8: version "4.0.8" - resolved "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz" + resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-4.0.8.tgz#7646fb5f18871cfbb7749e69bd39a6388eb7450c" integrity sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g== -typescript@^4.3.5: - version "4.8.3" - resolved "https://registry.npmjs.org/typescript/-/typescript-4.8.3.tgz" - integrity sha512-goMHfm00nWPa8UvR/CPSvykqf6dVV8x/dp0c5mFTMTIu0u0FlGWRioyy7Nn0PGAdHxpJZnuO/ut+PpQ8UiHAig== - -undici-types@~5.25.1: - version "5.25.3" - resolved "https://registry.npmjs.org/undici-types/-/undici-types-5.25.3.tgz" - integrity sha512-Ga1jfYwRn7+cP9v8auvEXN1rX3sWqlayd4HP7OKk4mZWylEmu3KzXDUGrQUN6Ol7qo1gPvB2e5gX6udnyEPgdA== +type-fest@^0.21.3: + version "0.21.3" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.21.3.tgz#d260a24b0198436e133fa26a524a6d65fa3b2e37" + integrity sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w== -utf-8-validate@^5.0.2: - version "5.0.9" - resolved "https://registry.npmjs.org/utf-8-validate/-/utf-8-validate-5.0.9.tgz" - integrity sha512-Yek7dAy0v3Kl0orwMlvi7TPtiCNrdfHNd7Gcc/pLq4BLXqfAmd0J7OWMizUQnTTJsyjKn02mU7anqwfmUP4J8Q== +typedoc@^0.22.15: + version "0.22.18" + resolved "https://registry.yarnpkg.com/typedoc/-/typedoc-0.22.18.tgz#1d000c33b66b88fd8cdfea14a26113a83b7e6591" + integrity sha512-NK9RlLhRUGMvc6Rw5USEYgT4DVAUFk7IF7Q6MYfpJ88KnTZP7EneEa4RcP+tX1auAcz7QT1Iy0bUSZBYYHdoyA== + dependencies: + glob "^8.0.3" + lunr "^2.3.9" + marked "^4.0.16" + minimatch "^5.1.0" + shiki "^0.10.1" + +typescript@^4.2.4, typescript@^4.3.5: + version "4.9.5" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.9.5.tgz#095979f9bcc0d09da324d58d03ce8f8374cbe65a" + integrity sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g== + +u3@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/u3/-/u3-0.1.1.tgz#5f52044f42ee76cd8de33148829e14528494b73b" + integrity sha512-+J5D5ir763y+Am/QY6hXNRlwljIeRMZMGs0cT6qqZVVzzT3X3nFPXVyPOFRMOR4kupB0T8JnCdpWdp6Q/iXn3w== + +undici-types@~5.26.4: + version "5.26.5" + resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-5.26.5.tgz#bcd539893d00b56e964fd2657a4866b221a65617" + integrity sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA== + +utf-8-validate@^5.0.2, utf-8-validate@^5.0.9: + version "5.0.10" + resolved "https://registry.yarnpkg.com/utf-8-validate/-/utf-8-validate-5.0.10.tgz#d7d10ea39318171ca982718b6b96a8d2442571a2" + integrity sha512-Z6czzLq4u8fPOyx7TU6X3dvUZVvoJmxSQ+IcrlmagKhilxlhZgxPK6C5Jqbkw1IDUmFTM+cz9QDnnLTwDz/2gQ== dependencies: node-gyp-build "^4.3.0" +util-deprecate@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" + integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw== + +util@^0.12.5: + version "0.12.5" + resolved "https://registry.yarnpkg.com/util/-/util-0.12.5.tgz#5f17a6059b73db61a875668781a1c2b136bd6fbc" + integrity sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA== + dependencies: + inherits "^2.0.3" + is-arguments "^1.0.4" + is-generator-function "^1.0.7" + is-typed-array "^1.1.3" + which-typed-array "^1.1.2" + uuid@^8.3.2: version "8.3.2" - resolved "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2" integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg== +vlq@^2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/vlq/-/vlq-2.0.4.tgz#6057b85729245b9829e3cc7755f95b228d4fe041" + integrity sha512-aodjPa2wPQFkra1G8CzJBTHXhgk3EVSwxSWXNPr1fgdFLUb8kvLV1iEb6rFgasIsjP82HWI6dsb5Io26DDnasA== + +vscode-oniguruma@^1.6.1: + version "1.7.0" + resolved "https://registry.yarnpkg.com/vscode-oniguruma/-/vscode-oniguruma-1.7.0.tgz#439bfad8fe71abd7798338d1cd3dc53a8beea94b" + integrity sha512-L9WMGRfrjOhgHSdOYgCt/yRMsXzLDJSL7BPrOZt73gU0iWO4mpqzqQzOz5srxqTvMBaR0XZTSrVWo4j55Rc6cA== + +vscode-textmate@5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/vscode-textmate/-/vscode-textmate-5.2.0.tgz#01f01760a391e8222fe4f33fbccbd1ad71aed74e" + integrity sha512-Uw5ooOQxRASHgu6C7GVvUxisKXfSgW4oFlO+aa+PAkgmH89O3CXxEEzNRNtHSqtXFTl0nAC1uYj0GMSH27uwtQ== + +wait-on@7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/wait-on/-/wait-on-7.0.1.tgz#5cff9f8427e94f4deacbc2762e6b0a489b19eae9" + integrity sha512-9AnJE9qTjRQOlTZIldAaf/da2eW0eSRSgcqq85mXQja/DW3MriHxkpODDSUEg+Gri/rKEcXUZHe+cevvYItaog== + dependencies: + axios "^0.27.2" + joi "^17.7.0" + lodash "^4.17.21" + minimist "^1.2.7" + rxjs "^7.8.0" + +wcwidth@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/wcwidth/-/wcwidth-1.0.1.tgz#f0b0dcf915bc5ff1528afadb2c0e17b532da2fe8" + integrity sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg== + dependencies: + defaults "^1.0.3" + webidl-conversions@^3.0.0: version "3.0.1" - resolved "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz" + resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871" integrity sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ== +whatwg-fetch@^3.4.1: + version "3.6.20" + resolved "https://registry.yarnpkg.com/whatwg-fetch/-/whatwg-fetch-3.6.20.tgz#580ce6d791facec91d37c72890995a0b48d31c70" + integrity sha512-EqhiFU6daOA8kpjOWTL0olhVOF3i7OrFzSYiGsEMB8GcXS+RrzauAERX65xMeNWVqxA6HXH2m69Z9LaKKdisfg== + whatwg-url@^5.0.0: version "5.0.0" - resolved "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz" + resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-5.0.0.tgz#966454e8765462e37644d3626f6742ce8b70965d" integrity sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw== dependencies: tr46 "~0.0.3" webidl-conversions "^3.0.0" -which@2.0.2: +which-typed-array@^1.1.14, which-typed-array@^1.1.2: + version "1.1.14" + resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.14.tgz#1f78a111aee1e131ca66164d8bdc3ab062c95a06" + integrity sha512-VnXFiIW8yNn9kIHN88xvZ4yOWchftKDsRJ8fEPacX/wl1lOvBrhsJ/OeJCXq7B0AaijRuqgzSKalJoPk+D8MPg== + dependencies: + available-typed-arrays "^1.0.6" + call-bind "^1.0.5" + for-each "^0.3.3" + gopd "^1.0.1" + has-tostringtag "^1.0.1" + +which@2.0.2, which@^2.0.1: version "2.0.2" - resolved "https://registry.npmjs.org/which/-/which-2.0.2.tgz" + resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== dependencies: isexe "^2.0.0" workerpool@6.2.0: version "6.2.0" - resolved "https://registry.npmjs.org/workerpool/-/workerpool-6.2.0.tgz" + resolved "https://registry.yarnpkg.com/workerpool/-/workerpool-6.2.0.tgz#827d93c9ba23ee2019c3ffaff5c27fccea289e8b" integrity sha512-Rsk5qQHJ9eowMH28Jwhe8HEbmdYDX4lwoMWshiCXugjtHqMD9ZbiqSDLxcsfdqsETPzVUtX5s1Z5kStiIM6l4A== +wrap-ansi@^6.0.1: + version "6.2.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-6.2.0.tgz#e9393ba07102e6c91a3b221478f0257cd2856e53" + integrity sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA== + dependencies: + ansi-styles "^4.0.0" + string-width "^4.1.0" + strip-ansi "^6.0.0" + wrap-ansi@^7.0.0: version "7.0.0" - resolved "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== dependencies: ansi-styles "^4.0.0" @@ -1486,37 +4718,52 @@ wrap-ansi@^7.0.0: wrappy@1: version "1.0.2" - resolved "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz" + resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== -ws@^7.4.5: +ws@7.4.6: + version "7.4.6" + resolved "https://registry.yarnpkg.com/ws/-/ws-7.4.6.tgz#5654ca8ecdeee47c33a9a4bf6d28e2be2980377c" + integrity sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A== + +ws@^7.2.0, ws@^7.4.5, ws@^7.4.6: version "7.5.9" - resolved "https://registry.npmjs.org/ws/-/ws-7.5.9.tgz" + resolved "https://registry.yarnpkg.com/ws/-/ws-7.5.9.tgz#54fa7db29f4c7cec68b1ddd3a89de099942bb591" integrity sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q== ws@^8.5.0: - version "8.8.1" - resolved "https://registry.npmjs.org/ws/-/ws-8.8.1.tgz" - integrity sha512-bGy2JzvzkPowEJV++hF07hAD6niYSr0JzBNo/J29WsB57A2r7Wlc1UFcTR9IzrPvuNVO4B8LGqF8qcpsVOhJCA== + version "8.16.0" + resolved "https://registry.yarnpkg.com/ws/-/ws-8.16.0.tgz#d1cd774f36fbc07165066a60e40323eab6446fd4" + integrity sha512-HS0c//TP7Ina87TfiPUz1rQzMhHrl/SG2guqRcTOIUYD2q8uhUdNHZYJUaQ8aTGPzCh+c6oawMKW35nFl1dxyQ== y18n@^5.0.5: version "5.0.8" - resolved "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz" + resolved "https://registry.yarnpkg.com/y18n/-/y18n-5.0.8.tgz#7f4934d0f7ca8c56f95314939ddcd2dd91ce1d55" integrity sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA== +yaml@^2.2.1: + version "2.4.1" + resolved "https://registry.yarnpkg.com/yaml/-/yaml-2.4.1.tgz#2e57e0b5e995292c25c75d2658f0664765210eed" + integrity sha512-pIXzoImaqmfOrL7teGUBt/T7ZDnyeGBWyXQBvOVhLkWLN37GXv8NMLK406UY6dS51JfcQHsmcW5cJ441bHg6Lg== + yargs-parser@20.2.4: version "20.2.4" - resolved "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.4.tgz#b42890f14566796f85ae8e3a25290d205f154a54" integrity sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA== yargs-parser@^20.2.2: version "20.2.9" - resolved "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.9.tgz#2eb7dc3b0289718fc295f362753845c41a0c94ee" integrity sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w== +yargs-parser@^21.1.1: + version "21.1.1" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-21.1.1.tgz#9096bceebf990d21bb31fa9516e0ede294a77d35" + integrity sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw== + yargs-unparser@2.0.0: version "2.0.0" - resolved "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz" + resolved "https://registry.yarnpkg.com/yargs-unparser/-/yargs-unparser-2.0.0.tgz#f131f9226911ae5d9ad38c432fe809366c2325eb" integrity sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA== dependencies: camelcase "^6.0.0" @@ -1526,7 +4773,7 @@ yargs-unparser@2.0.0: yargs@16.2.0: version "16.2.0" - resolved "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-16.2.0.tgz#1c82bf0f6b6a66eafce7ef30e376f49a12477f66" integrity sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw== dependencies: cliui "^7.0.2" @@ -1537,12 +4784,25 @@ yargs@16.2.0: y18n "^5.0.5" yargs-parser "^20.2.2" +yargs@^17.0.1: + version "17.7.2" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-17.7.2.tgz#991df39aca675a192b816e1e0363f9d75d2aa269" + integrity sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w== + dependencies: + cliui "^8.0.1" + escalade "^3.1.1" + get-caller-file "^2.0.5" + require-directory "^2.1.1" + string-width "^4.2.3" + y18n "^5.0.5" + yargs-parser "^21.1.1" + yn@^2.0.0: version "2.0.0" - resolved "https://registry.npmjs.org/yn/-/yn-2.0.0.tgz" + resolved "https://registry.yarnpkg.com/yn/-/yn-2.0.0.tgz#e5adabc8acf408f6385fc76495684c88e6af689a" integrity sha512-uTv8J/wiWTgUTg+9vLTi//leUl5vDQS6uii/emeTb2ssY7vl6QWf2fFbIIGjnhjvbdKlU0ed7QPgY1htTC86jQ== yocto-queue@^0.1.0: version "0.1.0" - resolved "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz" + resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==